%global appLoc; %let compiled_apploc=/30.SASApps/3030.Projects/303001.DataController/build2/DataController; %let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc)); /** * The serverName represents the SAS 9 logical server context * There is no programmatic (SAS code) way to obtain this * So it is taken from the sasjsconfig file OR supplied at runtime, eg: * * %let apploc=/my/apploc; * %let serverName=SASAppDC; * %inc thisfile; * */ %global serverName; %let compiled_serverName=SASApp; %let serverName=%sysfunc(coalescec(&serverName,&compiled_serverName)); %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 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_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 mf_verifymacvars( verifyVars /* list of macro variable NAMES */ ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ ,mAbort=SOFT )/*/STORE SOURCE*/; %local verifyIterator verifyVar abortmsg; %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); %if not %symexist(&verifyvar) %then %do; %let abortmsg= Variable &verifyVar is MISSING; %goto exit_err; %end; %if %length(%trim(&&&verifyVar))=0 %then %do; %let abortmsg= Variable &verifyVar is EMPTY; %goto exit_err; %end; %if &makeupcase=YES %then %do; %let &verifyVar=%upcase(&&&verifyvar); %end; %end; %goto exit_success; %exit_err: %put &abortmsg; %mf_abort(iftrue=(&mabort ne SOFT), mac=mf_verifymacvars, msg=%str(&abortmsg) ) 0 %return; %exit_success: 1 %mend mf_verifymacvars; %macro mm_getDirectories( path= ,outds=work.mm_getDirectories ,mDebug=0 )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_getDirectories.sas; %&mD.put _local_; data &outds (keep=directoryuri name directoryname directorydesc ); length directoryuri name directoryname directorydesc $256; call missing(of _all_); __i+1; %if %length(&path)=0 %then %do; do while (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); %end; %else %do; do while( metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) >0 ); %end; __rc1=metadata_getattr(directoryuri, "Name", name); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); &mD.putlog (_all_) (=); drop __:; __i+1; if sum(of __rc1-__rc3)=0 then output; end; run; %mend mm_getDirectories; %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 mm_updatestpsourcecode(stp= ,stpcode= ,minify=NO ,mdebug=0 ); /* first, check if STP exists */ %local tsuri; %let tsuri=stopifempty ; data _null_; format type uri tsuri value $200.; call missing (of _all_); path="&stp.(StoredProcess)"; /* first, find the STP ID */ if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; /* get sourcecode */ cnt=1; do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); rc=metadata_getattr(tsuri,"Name",value); %if &mdebug=1 %then %do; put tsuri= value=; %end; if value="SourceCode" then do; /* found it! */ rc=metadata_getattr(tsuri,"Id",value); call symputx('tsuri',value,'l'); stop; end; cnt+1; end; end; else put (_all_)(=); run; %if &tsuri=stopifempty %then %do; %put %str(WARN)ING: &stp.(StoredProcess) not found!; %return; %end; %if %length(&stpcode)<2 %then %do; %put %str(WARN)ING: No SAS code supplied!!; %return; %end; %local frefin frefout; %let frefin=%mf_getuniquefileref(); %let frefout=%mf_getuniquefileref(); /* write header XML */ data _null_; file &frefin; put "$METAREPOSITORY ','>'); outstr=tranwrd(outstr,"'",'''); outstr=tranwrd(outstr,'"','"'); outstr=tranwrd(outstr,'0A'x,' '); outstr=tranwrd(outstr,'0D'x,' '); outstr=tranwrd(outstr,'$','$'); %if &minify=YES %then %do; outstr=cats(outstr); if outstr ne ''; if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); %end; outstr=trim(outstr); put outstr ' '; run; %end; data _null_; file &frefin mod; put "'>SAS268435456 "; run; proc metadata in= &frefin out=&frefout; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=32767; input; put _infile_; run; %end; %else %do; filename &frefin clear; filename &frefout clear; %end; %mend mm_updatestpsourcecode; %macro mm_getrepos( outds=work.mm_getrepos )/*/STORE SOURCE*/; * use a temporary fileref to hold the response; filename response temp; /* get list of libraries */ proc metadata in= "1" out=response; run; /* write the response to the log for debugging */ /* data _null_; infile response lrecl=1048576; input; put _infile_; run; */ /* create an XML map to read the response */ filename sxlemap temp; data _null_; file sxlemap; put ''; put "/GetRepositories/Repositories/Repository"; put ""; put ''; put "/GetRepositories/Repositories/Repository/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Name"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Desc"; put ""; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@DefaultNS"; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryType"; put "characterstring20"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; put "characterstring10"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@Access"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@CurrentAccess"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@PauseState"; put "characterstring16"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Path"; put ""; put "characterstring256"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Engine"; put ""; put "characterstring8"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Options"; put ""; put "characterstring32"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataCreated"; put "characterstring24"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; put "characterstring24"; put ''; put '
'; run; libname _XML_ xml xmlfileref=response xmlmap=sxlemap; proc sort data= _XML_.SASRepos out=&outds; by name; run; /* clear references */ filename sxlemap clear; filename response clear; libname _XML_ clear; %mend mm_getrepos; %macro mm_getservercontexts( outds=work.mm_getrepos )/*/STORE SOURCE*/; %local repo repocnt x; %let repo=%sysfunc(getoption(metarepository)); /* first get list of available repos */ %mm_getrepos(outds=work.repos) %let repocnt=0; data _null_; set repos; where repositorytype in('CUSTOM','FOUNDATION'); keep id name ; call symputx(cats('repo',_n_),name,'l'); call symputx('repocnt',_n_,'l'); run; filename __mc1 temp; filename __mc2 temp; data &outds; length serveruri servername $200; call missing (of _all_); stop; run; %do x=1 %to &repocnt; options metarepository=&&repo&x; proc metadata in= "$METAREPOSITORY ServerContextSAS 0" out=__mc1; run; /* data _null_; infile __mc1 lrecl=1048576; input; put _infile_; run; */ data _null_; file __mc2; put ''; put "/GetMetadataObjects/Objects/ServerContext"; put ""; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Name"; put ""; put "characterstring200"; put ''; put '
'; run; libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; proc append base=&outds data=__mc3.SASContexts;run; libname __mc3 clear; %end; options metarepository=&repo; filename __mc1 clear; filename __mc2 clear; %mend mm_getservercontexts; %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_isblank(param )/*/STORE SOURCE*/; %sysevalf(%superq(param)=,boolean) %mend mf_isblank; %macro mp_dropmembers( list /* space separated list of datasets / views */ ,libref=WORK /* can only drop from a single library at a time */ ,iftrue=%str(1=1) )/*/STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %if %mf_isblank(&list) %then %do; %put NOTE: nothing to drop!; %return; %end; proc datasets lib=&libref nolist; delete &list; delete &list /mtype=view; run; %mend mp_dropmembers; %macro mm_createstp( stpname=SASjs Default STP ,stpdesc=This stp was created automatically by the mm_createstp macro ,filename=mm_createstp.sas ,directory=SASEnvironment/SASCode ,tree=/User Folders/sasdemo ,package=false ,streaming=true ,outds=work.mm_createstp ,mDebug=0 ,server=SASApp ,stptype=1 ,minify=NO ,frefin=mm_in ,frefout=mm_out ,LogicalServerType=Sps )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_CreateSTP.sas; %&mD.put _local_; %mp_abort( iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) ,mac=&sysmacroname ,msg=%str(Empty inputs: stpname filename directory tree) ) %mp_dropmembers(%scan(&outds,2,.)) /* check LogicalServerType validity */ %mp_abort( iftrue=( &LogicalServerType ne Sps and &LogicalServerType ne Wks and &LogicalServerType ne Any ) ,mac=&sysmacroname ,msg=%str(Invalid value for LogicalServerType (&LogicalServerType)) ) /** * check tree exists */ data _null_; length type uri $256; rc=metadata_pathobj("","&tree","Folder",type,uri); call symputx('foldertype',type,'l'); call symputx('treeuri',uri,'l'); run; %if &foldertype ne Tree %then %do; %put %str(WARN)ING: Tree &tree does not exist!; %return; %end; /** * Check STP does not exist already */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype = ClassifierMap %then %do; %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; %return; %end; /** * Check that the physical file exists */ %if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; %return; %end; %if &stptype=1 %then %do; /* type 1 STP - where code is stored on filesystem */ %if %sysevalf(&sysver lt 9.2) %then %do; %put %str(WARN)ING: Version 9.2 or later required; %return; %end; /* check directory object (where 9.2 source code reference is stored) */ data _null_; length id $20 dirtype $256; rc=metadata_resolve("&directory",dirtype,id); call symputx('checkdirtype',dirtype,'l'); run; %if &checkdirtype ne Directory %then %do; %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; %put %str(WARN)ING: The directory object does not exist for &directory; %return; %end; %end; %else %do; data &outds; directoryuri="&directory"; run; %end; data &outds (keep=stpuri prompturi fileuri texturi); length stpuri prompturi fileuri texturi serveruri $256 ; if _n_=1 then call missing (of _all_); set &outds; /* final checks on uris */ length id $20 type $256; __rc=metadata_resolve("&treeuri",type,id); if type ne 'Tree' then do; putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; stopme=1; end; __rc=metadata_resolve(directoryuri,type,id); if type ne 'Directory' then do; putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; stopme=1; end; /* get server info */ __rc=metadata_resolve("&server",type,serveruri); if type ne 'LogicalServer' then do; __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); if serveruri='' then do; putlog "%str(WARN)ING: Invalid server: &server"; stopme=1; end; end; if stopme=1 then do; putlog (_all_)(=); stop; end; /* create empty prompt */ rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); GroupInfo= ""; rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); if sum(of rc1-rc6) ne 0 then do; putlog "%str(WARN)ING: Issue creating prompt."; if prompturi ne . then do; putlog ' Removing orphan: ' prompturi; rc = METADATA_DELOBJ(prompturi); put rc=; end; stop; end; /* create a file uri */ rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); if sum(of rc7-rc10) ne 0 then do; putlog "%str(WARN)ING: Issue creating file."; if fileuri ne . then do; putlog ' Removing orphans:' prompturi fileuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); put (_all_)(=); end; stop; end; /* create a TextStore object */ rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); rc13= METADATA_SETATTR(texturi, 'TextType','XML'); storedtext='' !!"" !!""; rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); if sum(of rc11-rc14) ne 0 then do; putlog "%str(WARN)ING: Issue creating TextStore."; if texturi ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); put (_all_)(=); end; stop; end; /* create meta obj */ rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); /* tidy up if err */ if sum(of rc15-rc24) ne 0 then do; putlog "%str(WARN)ING: Issue creating STP."; if stpuri ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); rc = METADATA_DELOBJ(stpuri); put (_all_)(=); end; end; else do; fullpath=cats('_program=',treepath,"/&stpname"); putlog "NOTE: Stored Process Created!"; putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; putlog "NOTE- "; putlog "NOTE-"; end; output; stop; run; %end; %else %if &stptype=2 %then %do; /* type 2 stp - code is stored in metadata */ %if %sysevalf(&sysver lt 9.3) %then %do; %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; %return; %end; /* check we have the correct ServerContext */ %mm_getservercontexts(outds=contexts) %local serveruri; %let serveruri=NOTFOUND; data _null_; set contexts; where upcase(servername)="%upcase(&server)"; call symputx('serveruri',serveruri); run; %if &serveruri=NOTFOUND %then %do; %put %str(WARN)ING: ServerContext *&server* not found!; %return; %end; /** * First, create a Hello World type 2 stored process */ filename &frefin temp; data _null_; file &frefin; treeuri=quote(symget('treeuri')); serveruri=quote(symget('serveruri')); stpdesc=quote(symget('stpdesc')); stpname=quote(symget('stpname')); put "$METAREPOSITORY "/ ''/ " "/ " "/ " "/ " "/ ' '/ ' ' / " "/ " "/ ' '/ " "/ ""/ "SAS"/ "268435456"; run; filename &frefout temp; proc metadata in= &frefin out=&frefout ; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=1048576; input; put _infile_; run; %end; /** * Next, add the source code */ %mm_updatestpsourcecode(stp=&tree/&stpname ,stpcode="&directory/&filename" ,mdebug=&mdebug ,minify=&minify) %end; %else %do; %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; %end; %mend mm_createstp; %macro mf_getuser( )/*/STORE SOURCE*/; %local user; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; %let user=&SYS_COMPUTE_SESSION_OWNER; %end; %else %if %symexist(_metaperson) %then %do; %if %length(&_metaperson)=0 %then %let user=&sysuserid; /* sometimes SAS will add @domain extension - remove for consistency */ /* but be sure to quote in case of usernames with commas */ %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); %end; %else %let user=&sysuserid; %quote(&user) %mend mf_getuser; %macro mm_createfolder(path=,mDebug=0); %put &sysmacroname: execution started for &path; %local dbg errorcheck; %if &mDebug=0 %then %let dbg=*; %local parentFolderObjId child errorcheck paths; %let paths=0; %let errorcheck=1; %if &syscc ge 4 %then %do; %put SYSCC=&syscc - this macro requires a clean session; %return; %end; data _null_; length objId parentId objType parent child $200 folderPath $1000; call missing (of _all_); folderPath = "%trim(&path)"; * remove any trailing slash ; if ( substr(folderPath,length(folderPath),1) = '/' ) then folderPath=substr(folderPath,1,length(folderPath)-1); * name must not be blank; if ( folderPath = '' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank"; end; * must have a starting slash ; if ( substr(folderPath,1,1) ne '/' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH param value must have starting slash"; stop; end; * check if folder already exists ; rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); if rc ge 1 then do; put "NOTE: Folder " folderPath " already exists!"; stop; end; * do not create a root (one level) folder ; if countc(folderPath,'/')=1 then do; put 'ERR' +(-1) "OR: &sysmacroname will not create a new ROOT folder"; stop; end; * check that root folder exists ; root=cats('/',scan(folderpath,1,'/'),"(Folder)"); if metadata_pathobj('',root,"",objType,parentId)<1 then do; put 'ERR' +(-1) "OR: " root " does not exist!"; stop; end; * check that parent folder exists ; child=scan(folderPath,-1,'/'); parent=substr(folderpath,1,length(folderpath)-length(child)-1); rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); if rc<1 then do; putlog 'The following folders will be created:'; /* folder does not exist - so start from top and work down */ length newpath $1000; paths=0; do x=2 to countw(folderpath,'/'); newpath=''; do i=1 to x; newpath=cats(newpath,'/',scan(folderpath,i,'/')); end; rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); if rc<1 then do; paths+1; call symputx(cats('path',paths),newpath); putlog newpath; end; call symputx('paths',paths); end; end; else putlog "parent " parent " exists"; call symputx('parentFolderObjId',parentId,'l'); call symputx('child',child,'l'); call symputx('errorcheck',0,'l'); &dbg put (_all_)(=); run; %if &errorcheck=1 or &syscc ge 4 %then %return; %if &paths>0 %then %do x=1 %to &paths; %put executing recursive call for &&path&x; %mm_createfolder(path=&&path&x) %end; %else %do; filename __newdir temp; options noquotelenmax; %local inmeta; %put creating: &path; %let inmeta=$METAREPOSITORY SAS268435456 ; proc metadata in="&inmeta" out=__newdir verbose; run ; /* check it was successful */ data _null_; length objId parentId objType parent child $200 ; call missing (of _all_); rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); if rc ge 1 then do; putlog "SUCCCESS! &path created."; end; else do; putlog 'ERR' +(-1) "OR: unsuccessful attempt to create &path"; call symputx('syscc',8); end; run; /* write the response to the log for debugging */ %if &mDebug ne 0 %then %do; data _null_; infile __newdir lrecl=32767; input; put _infile_; run; %end; filename __newdir clear; %end; %put &sysmacroname: execution finished for &path; %mend mm_createfolder; %macro mm_deletestp( target= )/*/STORE SOURCE*/; /** * Check STP does exist */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&target",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype ne ClassifierMap %then %do; %put NOTE: No Stored Process found at ⌖ %return; %end; filename __in temp lrecl=10000; filename __out temp lrecl=10000; data _null_ ; file __in ; put ""; put "SAS268436480"; put ""; run ; proc metadata in=__in out=__out verbose;run; /* list the result */ data _null_;infile __out; input; list; run; filename __in clear; filename __out clear; /** * Check deletion */ %local isgone; data _null_; length type uri $256; call missing (of _all_); rc=metadata_pathobj("","&target",'Note',type,uri); call symputx('isgone',type,'l'); run; %if &isgone = ClassifierMap %then %do; %put %str(ERR)OR: STP not deleted from ⌖ %let syscc=4; %return; %end; %mend mm_deletestp; /* system macro dependencies for build process end*/ /* system macros for build process */ %macro mm_createwebservice(path= ,name=initService ,precode= ,code=ft15f001 ,desc=This stp was created automagically by the mm_createwebservice macro ,mDebug=0 ,server=SASApp ,replace=YES ,adapter=sasjs )/*/STORE SOURCE*/; %if &syscc ge 4 %then %do; %put &=syscc - &sysmacroname will not execute in this state; %return; %end; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_createwebservice.sas; %&mD.put _local_; * remove any trailing slash ; %if "%substr(&path,%length(&path),1)" = "/" %then %let path=%substr(&path,1,%length(&path)-1); /** * Add webout macro * These put statements are auto generated - to change the macro, change the * source (mm_webout) and run `build.py` */ filename sasjs temp; data _null_; file sasjs lrecl=3000 ; put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; /* 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 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 ' '; 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 ' '; put ' '; 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 ' '; put '%else %if &action=OPEN %then %do; '; put ' /* fix encoding */ '; put ' OPTIONS NOBOMFILE; '; put ' '; 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 ' '; 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 ' '; put '%end; '; put ' '; 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 ' '; put '%end; '; put ' '; put '%mend mm_webout; '; /* WEBOUT END */ put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO'; put ' ,maxobs=MAX'; put ');'; put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; put ' ,showmeta=&showmeta,maxobs=&maxobs'; put ' )'; put '%mend;'; run; /* add precode and code */ %local work tmpfile; %let work=%sysfunc(pathname(work)); %let tmpfile=__mm_createwebservice.temp; %local x fref freflist mod; %let freflist= &adapter &precode &code ; %do x=1 %to %sysfunc(countw(&freflist)); %if &x>1 %then %let mod=mod; %let fref=%scan(&freflist,&x); %&mD.put &sysmacroname: adding &fref; data _null_; file "&work/&tmpfile" lrecl=3000 &mod; infile &fref; input; put _infile_; run; %end; /* create the metadata folder if not already there */ %mm_createfolder(path=&path) %if &syscc ge 4 %then %return; %if %upcase(&replace)=YES %then %do; %mm_deletestp(target=&path/&name) %end; /* create the web service */ %mm_createstp(stpname=&name ,filename=&tmpfile ,directory=&work ,tree=&path ,stpdesc=&desc ,mDebug=&mdebug ,server=&server ,stptype=2) /* find the web app url */ %local url; %let url=localhost/SASStoredProcess; data _null_; length url $128; rc=METADATA_GETURI("Stored Process Web App",url); if rc=0 then call symputx('url',url,'l'); run; %put &sysmacroname: STP &name successfully created in &path; %put Check it out here:; %put ;%put ;%put ; %put &url?_PROGRAM=&path/&name; %put ;%put ;%put ; %mend mm_createwebservice; /* system macros for build process end */ * BuildInit start; /** @file @brief Initialise build program for SAS 9 DC

SAS Macros

**/ options nomprint; %global _metaperson _url dcpath; /* set webout if not running in STP mode */ data _null_; if "&sysprocessmode" ne "SAS Stored Process Server" then do; call execute('filename _webout temp;'); end; run; * BuildInit end; %let path=services; %let service=clickme; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put '''';'; put 'put '' '';'; put 'put '' Data Controller'';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '''';'; put 'run;'; put '%sasjsout(HTML)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/admin; %let service=configurator; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief provides the web service to create the control tables'; put '@details'; put '

SAS Macros

'; put '@li dc_getusergroups.sas'; put '@li mf_getuser.sas'; put '@li mf_getapploc.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 '%let root=%mf_getapploc();'; put '/* create web page */'; put 'data _null_;'; put 'file _webout;'; put 'infile datalines ;'; put 'input;'; put 'put _infile_;'; put 'datalines4;'; put ''; put ''; put ''; put ''; put 'Data Controller'; put ''; put ''; put ''; put ''; put ''; put '
'; put '
'; put ''; put 'Data Controller'; put '
'; put '
'; put '
'; put '
'; put '
'; put '
'; put ''; put '
'; put '
'; put 'Terms and Conditions'; put '
'; put '
'; put '
'; put '

Due to the way the Demo version is compiled (in an easy-to-deploy but'; put 'inefficient-to-run format), it should not be deployed to production servers.'; put 'Before proceeding with configuration, please confirm that you have read,'; put 'understood, and agreed to the'; put 'Data Controller for SAS© Evaluation Agreement.'; put '

'; put '
'; put '
'; put '>'; put ''; put '
'; put '
'; put '
'; put ''; put ''; put '
'; put '
'; put '
'; put ''; put ''; put ';;;;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=demodata; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '/** @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_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 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 mf_uid('; put ')/*/STORE SOURCE*/;'; put '%local today now;'; put '%let today=%sysfunc(today(),yymmddn8.);'; put '%let now=%sysfunc(compress(%sysfunc(time(),tod12.3),:.));'; put '&today._&now._&sysjobid._%sysevalf(%sysfunc(ranuni(0))*999,CEIL)'; put '%mend mf_uid;'; 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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref dttm ds1;'; put '%let inref=%mf_getuniquefileref();'; put '%let outref=%mf_getuniquefileref();'; put '%if &outfile=0 %then %let outfile=&infile;'; put '%let ds1=%mf_getuniquename(prefix=allchars);'; put '%let ds2=%mf_getuniquename(prefix=startmark);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '/* %put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) secs to run; */'; put '%mend mp_replace;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro ms_deletefile(driveloc'; put ',mdebug=0'; put ');'; put '%local headref;'; put '%let headref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &headref lrecl=1000;'; put 'infile "&_sasjs_tokenfile" lrecl=1000;'; put 'input;'; put 'put _infile_;'; put 'run;'; put 'proc http method=''DELETE'' headerin=&headref'; put 'url="&_sasjs_apiserverurl/SASjsApi/drive/file?_filePath=&driveloc";'; put '%if &mdebug=1 %then %do;'; put 'debug level=2;'; put '%end;'; put 'run;'; put 'filename &headref clear;'; put '%mend ms_deletefile;'; put '%macro ms_createfile(driveloc'; put ',inref=0'; put ',mdebug=0'; put ');'; put '/* first, delete in case it exists */'; put '%ms_deletefile(&driveloc,mdebug=&mdebug)'; put '%local fname0 fname1 fname2 boundary fname statcd msg optval;'; put '%let fname0=%mf_getuniquefileref();'; put '%let fname1=%mf_getuniquefileref();'; put '%let fname2=%mf_getuniquefileref();'; put '%let boundary=%mf_getuniquename();'; put '/* avoid sending bom marker to API */'; put '%let optval=%sysfunc(getoption(bomfile));'; put 'options nobomfile;'; put 'data _null_;'; put 'file &fname0 termstr=crlf lrecl=32767;'; put 'infile &inref end=eof lrecl=32767;'; put 'if _n_ = 1 then do;'; put 'put "--&boundary.";'; put 'put ''Content-Disposition: form-data; name="filePath"'';'; put 'put ;'; put 'put "&driveloc";'; put 'put "--&boundary";'; put 'put ''Content-Disposition: form-data; name="file"; filename="ignore.sas"'';'; put 'put "Content-Type: text/plain";'; put 'put ;'; put 'end;'; put 'input;'; put 'put _infile_; /* add the actual file to be sent */'; put 'if eof then do;'; put 'put ;'; put 'put "--&boundary--";'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fname1 lrecl=1000;'; put 'infile "&_sasjs_tokenfile" lrecl=1000;'; put 'input;'; put 'if _n_=1 then put "Content-Type: multipart/form-data; boundary=&boundary";'; put 'put _infile_;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &fname0 lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'data _null_;'; put 'infile &fname1 lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'proc http method=''POST'' in=&fname0 headerin=&fname1 out=&fname2'; put 'url="&_sasjs_apiserverurl/SASjsApi/drive/file";'; put '%if &mdebug=1 %then %do;'; put 'debug level=1;'; put '%end;'; put 'run;'; put '%let statcd=0;'; put 'data _null_;'; put 'infile &fname2;'; put 'input;'; put 'putlog _infile_;'; put 'if _infile_=''{"status":"success"}'' then call symputx(''statcd'',1,''l'');'; put 'else call symputx(''msg'',_infile_,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&statcd=0)'; put ',mac=ms_createfile.sas'; put ',msg=%superq(msg)'; put ')'; put '/* reset options */'; put 'options &optval;'; put '%mend ms_createfile;'; put '%macro mf_getuniquelibref(prefix=mc,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 mfv_getpathuri(filepath'; put ')/*/STORE SOURCE*/;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter &sysmacroname with syscc=&syscc'; put ')'; put '%local fref rc path name var /* var is used to avoid delete timing issue */;'; put '%let fref=%mf_getuniquefileref();'; put '%let name=%scan(&filepath,-1,/);'; put '%let path=%substr(&filepath,1,%length(&filepath)-%length(&name)-1);'; put '%if %sysfunc(filename(fref,,filesrvc,folderPath="&path" filename="&name"))=0'; put '%then %do;'; put '%let var=_FILESRVC_&fref._URI;'; put '%str(&&&var)'; put '%let rc=%sysfunc(filename(fref));'; put '%symdel &var;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: did not find &filepath;'; put '%let syscc=0;'; put '%end;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave &sysmacroname with syscc=&syscc'; put ')'; put '%mend mfv_getpathuri;'; put '%macro mfv_existfolder(path'; put ')/*/STORE SOURCE*/;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter mfv_existfolder.sas with syscc=&syscc'; put ')'; put '%local fref rc var;'; put '%let fref=%mf_getuniquefileref();'; put '%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;'; put '1'; put '%let var=_FILESRVC_&fref._URI;'; put '%let rc=%sysfunc(filename(fref));'; put '%symdel &var;'; put '%end;'; put '%else %do;'; put '0'; put '%let syscc=0;'; put '%end;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave mfv_existfolder.sas with syscc=&syscc'; put ')'; put '%mend mfv_existfolder;'; put '%macro mv_createfolder(path='; put ',access_token_var=ACCESS_TOKEN'; put ',grant_type=sas_services'; put ',mdebug=0'; put ',outds=_null_'; put ');'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter &sysmacroname with syscc=&syscc'; put ')'; put '%if %mfv_existfolder(&path)=1 %then %do;'; put '%&dbg.put &sysmacroname: &path already exists;'; put 'data &outds;'; put 'self_uri="%mfv_getpathuri(&path)";'; put 'output;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue=(&syscc ne 0),msg=syscc=&syscc when folder checking)'; 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=(%length(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put 'options noquotelenmax;'; put '%local subfolder_cnt; /* determine the number of subfolders */'; put '%let subfolder_cnt=%sysfunc(countw(&path,/));'; put '%local base_uri; /* location of rest apis */'; put '%let base_uri=%mf_getplatform(VIYARESTAPI);'; put '%local href; /* resource address (none for root) */'; put '%let href="&base_uri/folders/folders?parentFolderUri=/folders/folders/none";'; put '%local x newpath subfolder;'; put '%do x=1 %to &subfolder_cnt;'; put '%let subfolder=%scan(&path,&x,%str(/));'; put '%let newpath=&newpath/&subfolder;'; put '%local fname1;'; put '%let fname1=%mf_getuniquefileref();'; put '%put &sysmacroname checking to see if &newpath exists;'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&newpath";'; 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=401 %then %do;'; put '/* relates to: https://github.com/sasjs/core/issues/400 */'; put '%put 401 thrown in &sysmacroname;'; put '%put sleeping: %sysfunc(sleep(12,1)) secs - will try again;'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&newpath";'; put '%if &grant_type=authorization_code %then %do;'; put 'headers "Authorization"="Bearer &&&access_token_var";'; put '%end;'; put 'run;'; put '%end;'; put '%local libref1;'; put '%let libref1=%mf_getuniquelibref();'; put 'libname &libref1 JSON fileref=&fname1;'; put '%mp_abort('; put 'iftrue=('; put '&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 404'; put ')'; put ',mac=mv_createfolder124'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname following check to see if &newpath exists:;'; put '%put _local_;'; put 'data _null_;'; put 'infile &fname1;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%if &SYS_PROCHTTP_STATUS_CODE=200 %then %do;'; put 'data _null_;'; put 'set &libref1..links;'; put 'if rel=''createChild'' then'; put 'call symputx(''href'',quote(cats("&base_uri",href)),''l'');'; put 'run;'; put '%end;'; put '%else %if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;'; put '%put &sysmacroname &newpath not found - creating it now;'; put '%local fname2;'; put '%let fname2=%mf_getuniquefileref();'; put 'data _null_;'; put 'length json $1000;'; put 'json=cats("''"'; put ',''{"name":'''; put ',quote(trim(symget(''subfolder'')))'; put ','',"description":'''; put ',quote("&subfolder, created by &sysmacroname")'; put ','',"type":"folder"}'''; put ',"''"'; put ');'; put 'call symputx(''json'',json,''l'');'; put 'run;'; put 'proc http method=''POST'''; put 'in=&json'; put 'out=&fname2'; put '&oauth_bearer'; put 'url=%unquote(%superq(href));'; put 'headers'; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '''Content-Type''=''application/vnd.sas.content.folder+json'''; put '''Accept''=''application/vnd.sas.content.folder+json'';'; put 'run;'; put '%if &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;'; put '%put &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;'; put '%end;'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%local libref2;'; put '%let libref2=%mf_getuniquelibref();'; put 'libname &libref2 JSON fileref=&fname2;'; put '%put &sysmacroname &newpath now created. Grabbing the follow on link ;'; put 'data &outds;'; put 'set &libref2..links;'; put 'if rel=''createChild'' then do;'; put 'call symputx(''href'',quote(cats("&base_uri",href)),''l'');'; put '&dbg put (_all_)(=);'; put 'end;'; put 'if method=''GET'' and rel=''self'' then do;'; put 'self_uri=uri;'; put 'output;'; put 'end;'; put 'keep self_uri ;'; put 'run;'; put 'libname &libref2 clear;'; put 'filename &fname2 clear;'; put '%end;'; put 'filename &fname1 clear;'; put 'libname &libref1 clear;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave &sysmacroname with syscc=&syscc'; put ')'; put '%mend mv_createfolder;'; 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 '/* fetch the members of the folder to get the uri */'; 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 '/* 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 '%if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;'; put '%put &=sysmacroname &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;'; put '%end;'; 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 uri $1000;'; put 'call missing(of _all_);'; 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 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 '%macro mv_createjob(path='; put ',name='; put ',desc=Created by the mv_createjob.sas macro'; put ',precode='; put ',code=ft15f001'; put ',access_token_var=ACCESS_TOKEN'; put ',grant_type=sas_services'; put ',replace=YES'; put ',debug=0'; put ',contextname='; put ',addjesbeginendmacros=false'; 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 '/* initial validation checking */'; 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=(%length(&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 'options noquotelenmax;'; put '* remove any trailing slash ;'; put '%if "%substr(&path,%length(&path),1)" = "/" %then'; put '%let path=%substr(&path,1,%length(&path)-1);'; put '/* ensure folder exists */'; put '%put &sysmacroname: Path &path being checked / created;'; put '%mv_createfolder(path=&path)'; 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/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 &debug %then %do;'; put 'data _null_;'; put 'infile &fname1;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; 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 '/* path exists. Grab follow on link to check members */'; 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(''membercheck'',quote("&base_uri"!!trim(href)),''l'');'; put 'else if rel=''self'' then call symputx(''parentFolderUri'',href,''l'');'; put 'run;'; put 'data _null_;'; put 'set &libref1..root;'; put 'call symputx(''folderid'',id,''l'');'; put 'run;'; put '%local fname2;'; put '%let fname2=%mf_getuniquefileref();'; put 'proc http method=''GET'''; put 'out=&fname2'; put '&oauth_bearer'; put 'url=%unquote(%superq(membercheck));'; put 'headers'; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '''Accept''=''application/vnd.sas.collection+json'''; put '''Accept-Language''=''string'';'; put '%if &debug=1 %then %do;'; put 'debug level = 3;'; put '%end;'; put 'run;'; put '/*data _null_;infile &fname2;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 '%if %upcase(&replace)=YES %then %do;'; put '%mv_deletejes(path=&path, name=&name)'; put '%end;'; put '%else %do;'; put '/* check that job does not already exist in that folder */'; put '%local libref2;'; put '%let libref2=%mf_getuniquelibref();'; put 'libname &libref2 JSON fileref=&fname2;'; put '%local exists; %let exists=0;'; put 'data _null_;'; put 'set &libref2..items;'; put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then'; put 'call symputx(''exists'',1,''l'');'; put 'run;'; put '%mp_abort(iftrue=(&exists=1)'; put ',mac=&sysmacroname'; put ',msg=%str(Job &name already exists in &path)'; put ')'; put 'libname &libref2 clear;'; put '%end;'; put '/* set up the body of the request to create the service */'; put '%local fname3 comma;'; put '%let fname3=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fname3 TERMSTR='' '';'; put 'length string $32767;'; put 'string=cats(''{"version": 0,"name":"'''; put ',"&name"'; put ',''","type":"Compute","parameters":['''; put '%if &addjesbeginendmacros ne 0 %then %do;'; put ',''{"name":"_addjesbeginendmacros"'''; put ','',"type":"CHARACTER","defaultValue":"'''; put ',"&addjesbeginendmacros"'; put ',''"}'''; put '%let comma=%str(,);'; put '%end;'; put ');'; put 'context=quote(cats(symget(''contextname'')));'; put 'if context ne ''""'' then do;'; put 'string=cats(string'; put ',"&comma"'; put ',''{"version": 1,"name": "_contextName","defaultValue":'''; put ',context,'',"type":"CHARACTER","label":"Context Name","required": false}'''; put ');'; put 'end;'; put 'string=cats(string,''],"code":"'');'; put 'put string;'; put 'run;'; put '/* insert the code, escaping double quotes and carriage returns */'; put '%local x fref freflist;'; put '%let freflist= &precode &code ;'; put '%do x=1 %to %sysfunc(countw(&freflist));'; put '%let fref=%scan(&freflist,&x);'; put '%put &sysmacroname: adding &fref;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("&fref","I",1,"B");'; put 'fileid = fopen("&fname3","A",1,"B");'; put 'rec = "20"x;'; put 'do while(fread(filein)=0);'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then do; /* DOUBLE QUOTE */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''"'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''0A''x then do; /* LF */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''n'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''0D''x then do; /* CR */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''r'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''09''x then do; /* TAB */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''t'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''5C''x then do; /* BACKSLASH */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''01''x then do; /* Unprintable */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''1'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''07''x then do; /* Bell Char */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''7'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''1B''x then do; /* escape char */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''1'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''B'');rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%end;'; put '/* finish off the body of the code file loaded to JES */'; put 'data _null_;'; put 'file &fname3 mod TERMSTR='' '';'; put 'put ''"}'';'; put 'run;'; put '/* now we can create the job!! */'; put '%local fname4;'; put '%let fname4=%mf_getuniquefileref();'; put 'proc http method=''POST'''; put 'in=&fname3'; put 'out=&fname4'; put '&oauth_bearer'; put 'url="&base_uri/jobDefinitions/definitions?parentFolderUri=&parentFolderUri";'; put 'headers ''Content-Type''=''application/vnd.sas.job.definition+json'''; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '"Accept"="application/vnd.sas.job.definition+json";'; put '%if &debug=1 %then %do;'; put 'debug level = 3;'; put '%end;'; put 'run;'; put '/*data _null_;infile &fname4;input;putlog _infile_;run;*/'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '/* clear refs */'; put 'filename &fname1 clear;'; put 'filename &fname2 clear;'; put 'filename &fname3 clear;'; put 'filename &fname4 clear;'; put 'libname &libref1 clear;'; put '/* get the url so we can give a helpful log message */'; put '%local url;'; put 'data _null_;'; 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";'; put 'end;'; put 'else url="&systcpiphostname";'; put 'call symputx(''url'',url);'; put 'run;'; put '%put &sysmacroname: Job &name successfully created in &path;'; put '%put &sysmacroname:;'; put '%put &sysmacroname: Check it out here:;'; put '%put &sysmacroname:;%put;'; put '%put &url/SASJobExecution?_PROGRAM=&path/&name;%put;'; put '%put &sysmacroname:;'; put '%put &sysmacroname:;'; put '%mend mv_createjob;'; put '%macro mx_createjob(path=HOME'; put ',name=initJob'; put ',precode='; put ',code=ft15f001'; put ',desc=This job was created by the mx_createjob macro'; put ',replace=YES'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%if &syscc ge 4 %then %do;'; put '%put syscc=&syscc - &sysmacroname will not execute in this state;'; put '%return;'; put '%end;'; put '/* combine precode and code into a single file */'; put '%local tempref x fref freflist;'; put '%let tempref=%mf_getuniquefileref();'; put '%local work tmpfile;'; put '%let work=%sysfunc(pathname(work));'; put '%let tmpfile=&tempref..sas;'; put 'filename &tempref "&work/&tmpfile";'; put '%let freflist=&precode &code ;'; put '%do x=1 %to %sysfunc(countw(&freflist));'; put '%let fref=%scan(&freflist,&x);'; put '%put &sysmacroname: adding &fref;'; put 'data _null_;'; put 'file &tempref lrecl=3000 termstr=crlf mod;'; put 'infile &fref lrecl=3000;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%local platform; %let platform=%mf_getplatform();'; put '%if &platform=SASVIYA %then %do;'; put '%if "&path"="HOME" %then %let path=/Users/&sysuserid/My Folder;'; put '%mv_createjob(path=&path'; put ',name=&name'; put ',code=&tempref'; put ',desc=&desc'; put ',replace=&replace'; put ')'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%if "&path"="HOME" %then %let path=/Users/&_sasjs_username/My Folder;'; put '%ms_createfile(&path/&name..sas'; put ',inref=&tempref'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %do;'; put '%if "&path"="HOME" %then %let path=/User Folders/&_METAPERSON/My Folder;'; put '%mm_createstp(stpname=&name'; put ',filename=&tmpfile'; put ',directory=&work'; put ',tree=&path'; put ',stpdesc=&desc'; put ',mDebug=&mdebug'; put ')'; put '%end;'; put 'filename &tempref clear;'; put '%mend mx_createjob;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Creates demo tables and associated config'; put '@details Can be removed in prod installs.'; put 'To activate this job, add the following to SETTINGS:'; put '%let demolib=PUBLIC;'; put 'libname &demolib "%sysfunc(pathname(&dc_libref))/&demolib";'; put '%let joblib=HOOKLIB;'; put 'libname &joblib "%sysfunc(pathname(&dc_libref))/&joblib";'; put '%let dcdemoflag=1;'; put 'Note that this will:'; put '* REPLACE any tables named CARS_EXT or COUNTRIES in the PUBLIC library'; put '* REPLACE all DC config for libraries named PUBLIC'; put '* CREATE a folder called "demo" in the DC Apploc'; put '* CREATE two BASE libraries (HOOKLIB & PUBLIC) in the DC (physical) folder'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li mf_getengine.sas'; put '@li mf_getuser.sas'; put '@li mf_increment.sas'; put '@li mf_nobs.sas'; put '@li mf_uid.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_replace.sas'; put '@li mx_createjob.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 '%let dcdemoflag=0;'; put 'options dlcreatedir;'; put '%global joblib demolib;'; put '%mpeinit()'; put '%mp_abort(iftrue= (&dcdemoflag ne 1)'; put ',mac=&_program'; put ',msg=%str(Job not configured. See comments in the code.)'; put ')'; put 'data work.cars_ext(index=(carspk=(make model PRODUCTIONDATE) /unique));'; put 'attrib'; put 'MAKE length= $13'; put 'MODEL length= $40'; put 'TYPE length= $8'; put 'ORIGIN length= $6'; put 'COUNTRY length= $30'; put 'POTENTIALBUY length= $6'; put 'COMMENT length= $30'; put 'NOTES length= $30'; put 'CHECKBOXVAR length= $3'; put 'PRODUCTIONDATE length= 8 format=DATE9.'; put ';'; put 'set sashelp.cars;'; put 'retain comment ''n/a'';'; put 'if mod(ceil(ranuni(1)*100),3)=0 then notes=catx('' '',make,type);'; put 'call missing(notes);'; put '/* random / reproducible date between 1960 and 2020 */'; put 'PRODUCTIONDATE=ceil(ranuni(1)*365*60);'; put 'if mod(ceil(ranuni(1)*1000),2)=0 then CHECKBOXVAR=''YES'';'; put 'else CHECKBOXVAR=''No'';'; put 'if mod(ceil(ranuni(1)*1000),3)=0 then POTENTIALBUY=''Maybe'';'; put 'else if mod(ceil(ranuni(1)*1000),2)=0 then POTENTIALBUY=''Yes'';'; put 'else POTENTIALBUY=''No'';'; put 'make=cats(make);'; put 'model=cats(model);'; put 'array cntrs (4) $ 60 _temporary_ ( "Germany" "France" "Poland" "Italy");'; put 'if origin=''USA'' then country=''USA'';'; put 'else if origin=''Asia'' then do;'; put 'if mod(_n_,2)=0 then country=''Japan'';'; put 'else country=''Korea'';'; put 'end;'; put 'else COUNTRY = cntrs[ ceil(dim(cntrs) * ranuni(1))];'; put '*put (_all_)(=);'; put 'run;'; put 'data work.COUNTRIES(index=(countriespk=(origin country) /unique));'; put 'attrib'; put 'ORIGIN length= $6'; put 'COUNTRY length= $30'; put ';'; put 'infile cards dsd;'; put 'input'; put 'ORIGIN :$char.'; put 'COUNTRY :$char.'; put ';'; put 'datalines4;'; put 'Europe,Germany'; put 'Europe,France'; put 'Europe,Poland'; put 'Europe,Italy'; put 'USA,USA'; put 'Asia,Japan'; put 'Asia,Korea'; put ';;;;'; put 'run;'; put 'data work.jobdata;'; put 'length message job $100;'; put 'call missing(of _all_);'; put 'stop;'; put 'run;'; put '%let engine_type=%mf_getengine(&demolib);'; put '%put &=engine_type;'; put '%if &engine_type=CAS %then %do;'; put 'proc cas;'; put 'table.tableExists result=r / name="CARS_EXT" caslib="PUBLIC";'; put 'if r.exists then'; put 'table.dropTable / name="CARS_EXT" caslib="PUBLIC" quiet=TRUE;'; put 'table.tableExists result=r2 / name="COUNTRIES" caslib="PUBLIC";'; put 'if r2.exists then'; put 'table.dropTable / name="COUNTRIES" caslib="PUBLIC" quiet=TRUE;'; put 'table.tableExists result=r2 / name="MPE_AUDIT" caslib="PUBLIC";'; put 'if r2.exists then'; put 'table.dropTable / name="MPE_AUDIT" caslib="PUBLIC" quiet=TRUE;'; put 'quit;'; put 'proc casutil;'; put 'load data=work.CARS_EXT outcaslib="PUBLIC" casout="CARS_EXT" promote;'; put 'load data=work.COUNTRIES outcaslib="PUBLIC" casout="COUNTRIES" promote;'; put 'load data=&dc_libref..MPE_AUDIT'; put 'outcaslib="PUBLIC" casout="MPE_AUDIT" promote;'; put 'run;'; put 'data &joblib..JOBDATA; set work.JOBDATA;run;'; put '%end;'; put '%else %do;'; put 'options replace;'; put 'data &demolib..CARS_EXT; set work.cars_ext;'; put 'data &demolib..COUNTRIES; set work.countries;'; put 'data &joblib..JOBDATA; set work.JOBDATA;run;'; put '%end;'; put '%let apploc=%mf_getapploc(&_program);'; put '%let demolib=%upcase(&demolib);'; put 'proc sql;'; put 'delete from &dc_libref..mpe_tables'; put 'where libref="&demolib" and dsn in (''CARS_EXT'',''COUNTRIES'');'; 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="&demolib";'; put 'LOADTYPE=''UPDATE'';'; put 'NUM_OF_APPROVALS_REQUIRED=1;'; put 'PRE_EDIT_HOOK="&apploc/demo/PREEDIT";'; put 'POST_EDIT_HOOK="&apploc/demo/POSTEDIT";'; put 'PRE_APPROVE_HOOK="&apploc/demo/PREAPPROVE";'; put 'POST_APPROVE_HOOK="&apploc/demo/POSTAPPROVE";'; put 'DSN=''CARS_EXT''; BUSKEY=''MAKE MODEL PRODUCTIONDATE''; output;'; put 'DSN=''COUNTRIES''; BUSKEY=''ORIGIN COUNTRY''; output;'; put 'run;'; put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;'; put 'run;'; put '/* hard coded values for CHECKBOXVAR */'; put '%let rk=1e6;'; put 'proc sql noprint;'; put 'delete from &dc_libref..mpe_selectbox'; put 'where select_lib="&demolib"'; put 'and select_ds in (''CARS_EXT'');'; put 'select max(selectbox_rk) into: rk'; put 'from &dc_libref..mpe_selectbox;'; put 'insert into &dc_libref..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&demolib"'; put ',select_ds="CARS_EXT"'; put ',base_column="CHECKBOXVAR"'; put ',selectbox_value=''Yes'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&demolib"'; put ',select_ds="CARS_EXT"'; put ',base_column="CHECKBOXVAR"'; put ',selectbox_value=''No'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/* Table driven values */'; put 'delete from &dc_libref..MPE_VALIDATIONS'; put 'where base_lib="&demolib" and base_ds="CARS_EXT";'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="MAKE"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="SASHELP.CARS.MAKE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="MODEL"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="SASHELP.CARS.MODEL"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="TYPE"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="SASHELP.CARS.TYPE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="POTENTIALBUY"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&demolib..CARS_EXT.POTENTIALBUY"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="COMMENT"'; put ',rule_type=''NOTNULL'''; put ',rule_value="n/a"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ENGINESIZE"'; put ',rule_type=''MINVAL'''; put ',rule_value="1.3"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ENGINESIZE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="8.3"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc during param configuration)'; put ')'; put '/* programmatic values for COUNTRY (Dynamic Dropdown) */'; put 'filename vldtr temp;'; put 'data _null_;'; put 'file vldtr ;'; put 'put ''proc sql;'';'; put 'put ''create table work.vals as'';'; put 'put '' select distinct ORIGIN as display_value,'';'; put 'put '' ORIGIN as raw_value'';'; put 'put " from &demolib..COUNTRIES";'; put 'put '' order by 1;'';'; put 'put ''data work.DYNAMIC_VALUES; set work.vals;display_index=_n_;run;'';'; put 'put '' '';'; put 'put ''proc sql;'';'; put 'put ''create table work.dev as '';'; put 'put '' select a.display_index,b.country as display_value'';'; put 'put '' from work.DYNAMIC_VALUES as a'';'; put 'put " left join &demolib..countries as b";'; put 'put " on a.raw_value=b.origin";'; put 'put '' order by display_index;'';'; put 'put ''data work.DYNAMIC_EXTENDED_VALUES; set work.dev;by display_index;'';'; put 'put '' EXTRA_COL_NAME="COUNTRY";'';'; put 'put '' DISPLAY_TYPE="C";'';'; put 'put '' RAW_VALUE_CHAR=DISPLAY_VALUE;'';'; put 'put '' RAW_VALUE_NUM=.;'';'; put 'put '' if first.display_index then forced_value=1;'';'; put 'put ''run;'';'; put 'run;'; put '%mx_createjob(path=&apploc/demo'; put ',name=origin,code=vldtr'; put ')'; put 'proc sql;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ORIGIN"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="&apploc/demo/origin"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* PRE_EDIT JOB */'; put '%let fvar=XXXXXXXXXXX; /* cannot substitute macvars in parmcards */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.out) obs) fetched for editing %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f1 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f1)'; put '%mp_replace("%sysfunc(pathname(f1))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=PREEDIT,code=f1)'; put 'filename ft15f001 clear;'; put '/* POST EDIT JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds staged %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f2 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f2)'; put '%mp_replace("%sysfunc(pathname(f2))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=POSTEDIT,code=f2)'; put 'filename ft15f001 clear;'; put '/* PRE APPROVE JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.staging_ds) obs) under review by %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f3 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f3)'; put '%mp_replace("%sysfunc(pathname(f3))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=PREAPPROVE,code=f3)'; put 'filename ft15f001 clear;'; put '/* POST APPROVE JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.staging_ds) obs) approved by %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f4 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f4)'; put '%mp_replace("%sysfunc(pathname(f4))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=POSTAPPROVE,code=f4)'; put 'filename ft15f001 clear;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dirlist; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Fetches directories to facilitate configuration'; put '@details The service can also be invoked using the following URL param:'; put '@li &parent= (parent path)'; put '

SAS Macros

'; put '@li mp_dirlist.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 parent;'; put '/* if no flavour is specified, default to root */'; put '%let parent=%sysfunc(coalescec(&parent,/));'; put '%mp_dirlist(path=&parent,outds=dirlist, maxdepth=2)'; put '%webout(OPEN)'; put '%webout(OBJ,dirlist)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_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_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 mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '%macro 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 '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_ds2cards.sas'; put '@li mp_ds2csv.sas'; put '@li mp_streamfile.sas'; put '@li mp_validatecol.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 '%global dclib islib newlib;'; put '%mpeinit()'; put 'data _null_;'; put 'newlib=coalescec(symget(''dclib''),"&mpelib");'; put '%mp_validatecol(newlib,ISLIB,islib)'; put 'call symputx(''islib'',islib);'; put 'call symputx(''newlib'',upcase(newlib));'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&islib ne 1)'; put ',mac=&_program'; put ',msg=%nrstr(&newlib is not a valid libref)'; put ')'; put '%let work=%sysfunc(pathname(work));'; 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 '/* cannot use PROC EXPORT as we need to wrap all csv char values in quotes */'; put '/* cannot use excel as it does not work consistently in all SAS envs */'; put '%mp_ds2csv(&ds,outfile="&work/&newlib..&ds..csv",headerformat=NAME)'; put 'ods package(ProdOutput) add file="&work/&newlib..&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 'if alert_lib="&mpelib" then alert_lib="&newlib";'; 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 'CLS_LIBREF="&newlib";'; 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 'if var_name=''DC_MACROS'' then var_value=tranwrd(var_value,"&mpelib","&newlib");'; 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 'if xl_libref="&mpelib" then xl_libref="&newlib";'; 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 'if rls_libref="&mpelib" then rls_libref="&newlib";'; 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 'if libref="&mpelib" then libref="&newlib";'; 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 'data MPE_XLMAP_INFO;'; put 'set &mpelib..MPE_XLMAP_INFO;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'if XLMAP_TARGETLIBDS=:"&mpelib.." then'; put 'XLMAP_TARGETLIBDS=tranwrd(XLMAP_TARGETLIBDS,"&mpelib..","&newlib..");'; put 'run;'; put '%conditional_export(MPE_XLMAP_INFO)'; put 'data MPE_XLMAP_RULES;'; put 'set &mpelib..MPE_XLMAP_RULES;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_XLMAP_RULES)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_increment(macro_name,incr=1);'; put '/* iterate the value */'; put '%let ¯o_name=%eval(&&¯o_name+&incr);'; put '/* return the value */'; put '&&¯o_name'; put '%mend mf_increment;'; put '%macro mpe_makedata(lib=,mpeadmins=,path=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &lib..mpe_column_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',CLS_SCOPE=''EDIT'''; put ',CLS_GROUP=''AllUsers'''; put ',CLS_LIBREF="&lib"'; put ',CLS_TABLE=''MPE_LOCKANYTABLE'''; put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD'''; put ',CLS_ACTIVE=1'; put ',CLS_HIDE=0;'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_EMAIL_ALERTS"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc=''YES or NO to enable email alerts. Note - this requires email '''; put '!!''options to be preconfigured! They can be configured in the '''; put '!!''settings stp if needed.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_VIEWLIB_CHECK"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc='; put '''Set to YES to enable library validity checking in viewLibs service.'''; put '!!'' Note: this can make the service very slow if there are lots of '''; put '!!''external libraries. If enabled, this removes empty libraries from '''; put '!!''the viewer library dropdown. To switch off, set to NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MACROS"'; put ',var_value=cats(symget(''path''),"/dc_macros")'; put ',var_active=1'; put ',var_desc=''Location of underlying macros - EUC feature.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MAXOBS_WEBEDIT"'; put ',var_value="100"'; put ',var_active=1'; put ',var_desc=''This sets the maximum number of observations that can be loaded'''; put '!!'' into the browser for editing in the EDIT screen. A higher number'''; put '!!'' will require a decent browser (ie, not IE) and more memory on the'''; put '!!'' client side.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_REQUEST_LOGS"'; put ',var_value="YES"'; put ',var_active=1'; put ',var_desc=''Setting to NO will prevent each request being logged to the'''; put '!!'' MPE_REQUESTS table Default=YES.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_VIEWER"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to'''; put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_EDITRECORD"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the'''; put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu'''; put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_CATALOG"'; put ',var_name="DC_IGNORELIBS"'; put ',var_value="|MAPSSAS|MAPS|"'; put ',var_active=1'; put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when'''; put '!!'' running the Data Catalog refresh process. This can enable a clean'''; put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LOCALE"'; put ',var_value="SYSTEM"'; put ',var_active=1'; put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system'''; put '!!'' value (which can be driven from the browser settings). This is '''; put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs '''; put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BULKLOAD"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_BUCKET"'; put ',var_value="''your-aws-bucket/Exchange''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS bucket to'''; put '!!'' use for s3 uploads in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_AWS_CREDENTIALS_FILE"'; put ',var_value="''/path/to/your/aws/s3/.credentials''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS creds file'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_REGION"'; put ',var_value="''eu-west-1''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) AWS region in use'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_COMPRESS"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_USE_SSL"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to use SSL encryption'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_REVIEW"'; put ',var_name="HISTORY_ROWS"'; put ',var_value=''100'''; put ',var_active=1'; put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY '''; put '!!''page'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LICENCE_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Licence Key'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_ACTIVATION_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Activation Key'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_EMAIL"'; put ',var_name="SUBMITTED_TEMPLATE"'; put ',var_value=''Dear user,''!!''0A''x!!''Please be advised that a change to table'''; put '!!'' &alert_lib..&alert_ds has been proposed by &from_user on the '''; put '!!''&syshostname SAS server.''!!''0A''x!!''Reason provided: '''; put '!!''%superq(SUBMITTED_TXT)'''; put '!!''0A''x!!''This is an automated email by Data Controller for SAS. For '''; put '!!''documentation, please visit https://docs.datacontroller.io'''; put ',var_active=1'; put ',var_desc=''Template email, sent after submitting a change'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_EMAIL"'; put ',var_name="APPROVED_TEMPLATE"'; put ',var_value=''Dear user,''!!''0A''x!!''Please be advised that a change to table'''; put '!!'' &alert_lib..&alert_ds has been approved by &from_user on the '''; put '!!''&syshostname SAS server.''!!''0A''x!!''This is an automated email by Data'''; put '!!'' Controller for SAS. For documentation, please visit '''; put '!!''https://docs.datacontroller.io'''; put ',var_active=1'; put ',var_desc=''Template email, sent after approving a change'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_EMAIL"'; put ',var_name="REJECTED_TEMPLATE"'; put ',var_value=''Dear user,''!!''0A''x!!''Please be advised that a change to table'''; put '!!'' &alert_lib..&alert_ds has been rejected by &from_user on the '''; put '!!''&syshostname SAS server.''!!''0A''x!!''Reason provided: '''; put '!!''%superq(REVIEW_REASON_TXT)'''; put '!!''0A''x!!''This is an automated email by Data Controller for SAS. For '''; put '!!''documentation, please visit https://docs.datacontroller.io'''; put ',var_active=1'; put ',var_desc=''Template email, sent after rejecting a change'';'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''LIBRARY'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Data Controller Control Tables"'; put ',DD_LONGDESC="# The Data Controller Library"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib..MPE_TABLES"'; put ',DD_SHORTDESC="Configuration of new tables for Data Controller"'; put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_TABLES.DSN"'; put ',DD_SHORTDESC="Dataset Name to be edited"'; put ',DD_LONGDESC="_DSN_ - must be UPCASE"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''DIRECTORY'''; put ',DD_SOURCE="/some/directory"'; put ',DD_SHORTDESC="Directory for some purpose"'; put ',DD_LONGDESC="This directory is great. It''s great directory.'; put 'It trumps all other directories."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"'; put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "'; put '!!"registered as a user in this table."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"'; put ',DD_SHORTDESC="Set to 1 to make an option active"'; put ',DD_LONGDESC="This value is used as a filter by data controller whenever "'; put '!!"querying for option settings."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* mpe_xlmap_info'; put '*/'; put 'insert into &lib..mpe_xlmap_info set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_description=''Basel 3 Key Metrics report'''; put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";'; put '/**'; put '* mpe_xlmap_rules'; put '*/'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE D10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/b'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''ABSOLUTE E10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/c'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[6]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/d'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[8]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/e'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[9]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/f'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[10]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE H11'''; put ',xlmap_finish=''RELATIVE R[0]C[1]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:3'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''RELATIVE R[12]C[4]'''; put ',xlmap_finish=''ABSOLUTE I13'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec1'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D8'''; put ',xlmap_finish=''BLANKROW'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec2'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D18'''; put ',xlmap_finish=''LASTDOWN'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''header'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B3'''; put ',xlmap_finish=''ABSOLUTE B8'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''data'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B13'''; put ',xlmap_finish=''ABSOLUTE E16'';'; put '/**'; put '* MPE_GROUPS'; put '*/'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="allbow"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="dctestuser1"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="mihmed"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="DCTest"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_ROW_LEVEL_SECURITY'; put '*/'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=1'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib."'; put ',RLS_TABLE="MPE_GROUPS"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''GROUP_NAME'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''-1''"'; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=2'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''RLS_RK'''; put ',RLS_OPERATOR_NM=''>'''; put ',RLS_RAW_VALUE=''0'''; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=3'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''DC Demo Group'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''ACCESS_LEVEL'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''N/A''"'; put ',RLS_ACTIVE=1;'; put '/**'; put '* MPE_SECURITY'; put '*/'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* mpe_selectbox */'; put '%let rk=1;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=&rk'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''LOCKED'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''UNLOCKED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''EDIT'''; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''APPROVE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''VIEW'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''SIGNOFF'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''UPDATE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''REPLACE'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''TXTEMPORAL'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''BITEMPORAL'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''FORMAT_CAT'''; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''SUBMITTED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''APPROVED'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''REJECTED'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 1'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 2'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 3'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value="This is a long option. This option is very long. "'; put '!!"It is optional, though."'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="CASE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MINVAL"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MAXVAL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT"'; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT"'; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="NOTNULL"'; put ',selectbox_order=6'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="SOME_DATASET"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="EXAMPLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="COLUMN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="TABLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="LIBRARY"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="CATALOG"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="FORMAT"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="LIBREF"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''AUDIT'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="="'; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="BETWEEN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NOT IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="CONTAINS"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_EXCEL_CONFIG"'; put ',base_column="XL_RULE"'; put ',selectbox_value="FORMULA"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="0"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="1"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_TABLES'; put '*/'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_COLUMN_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM'''; put ',notes=''Docs: https://docs.datacontroller.io/column-level-security'''; put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_INFO'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_RULES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID XLMAP_RANGE_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_DATA'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_LOCKANYTABLE'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOCK_LIB LOCK_DS'''; put ',notes=''This table may be edited when a process failed and left a lock'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_TABLES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''This entry allows the MP Editor to edit itself!'''; put ',post_edit_hook=''services/hooks/mpe_tables_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''Determines which groups can view/edit/approve which tables'''; put ',post_edit_hook=''services/hooks/mpe_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SELECTBOX'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''SELECTBOX_RK'''; put ',var_txfrom=''VER_FROM_DTTM'''; put ',var_txto=''VER_TO_DTTM'''; put ',notes=''Can configure dropdowns for the front end'''; put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_TEST'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''PRIMARY_KEY_FIELD'''; put ',notes=''Test table for controller'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EMAILS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''USER_NAME'''; put ',notes=''Primary Emails Table (backup is metadata)'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''VAR_SCOPE VAR_NAME'''; put ',notes=''Configuration variables for Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ALERTS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER'''; put ',notes=''Configuration for alert email events'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_GROUPS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''GROUP_NAME USER_NAME'''; put ',notes=''Configuration for additional groups within Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_VALIDATIONS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE'''; put ',notes=''Configuration of data quality rules in Editor component'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',post_edit_hook=''services/hooks/mpe_validations_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_DATADICTIONARY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''DD_TYPE DD_SOURCE'''; put ',notes=''Configuration of data dictionary'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EXCEL_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN'''; put ',notes=''Configuration of the excel import rules'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ROW_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''RLS_RK'''; put ',notes=''Configuration of Row Level Security'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC '''; put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM '''; put '!!''RLS_RAW_VALUE '''; put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_CATALOG-FC'''; put ',num_of_approvals_required=1'; put ',loadtype=''FORMAT_CAT'''; put ',buskey=''TYPE FMTNAME FMTROW'''; put ',notes=''Sample Format Catalog'''; put ';'; put '/* mpe_validations */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_SCOPE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_HIDE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ALERTS"'; put ',base_col="ALERT_LIB"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_alerts.alert_lib"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_RULES"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="NUM_OF_APPROVALS_REQUIRED"'; put ',rule_type=''MINVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''NOTNULL'''; put ',rule_value=" "'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="&lib..MPE_TABLES.LIBREF"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_TABLES.DSN"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="SAS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_COL"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value="0"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="1"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/mpe_tables.dsn"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="BASE_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_SUBGROUP_ID"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_SUBGROUP_ID"'; put ',rule_type=''NOTNULL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test softselect on numeric var (should be ordered numerically) */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_BESTNUM"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_NUM"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_x_test.some_num"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_X_TEST'; put '*/'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=0'; put ',some_char=''this is dummy data'''; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=1'; put ',some_char=''more dummy data'''; put ',some_dropdown=''Option 2'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=422'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=2'; put ',some_char=''even more dummy data'''; put ',some_dropdown=''Option 3'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=142'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=3'; put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing'''; put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And'''; put '!!'' this, is the tale he told: '',3)'; put ',some_dropdown=''Option 2'''; put ',some_num=1613.001'; put ',some_date=423'; put ',some_datetime=423'; put ',some_time=44'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=4'; put ',some_char=''if you can fill the unforgiving minute'''; put ',some_dropdown=''Option 1'''; put ',some_num=1613.001123456'; put ',some_date=4231'; put ',some_datetime=423123123'; put ',some_time=412'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put '%do x=10 %to 500;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=10&x'; put ',some_char="&x bottles of beer on the wall"'; put ',some_dropdown=''Option 1'''; put ',some_num=ranuni(0)'; put ',some_date=round(ranuni(0)*1000,1)'; put ',some_datetime=round(ranuni(0)*50000,1)'; put ',some_time=round(ranuni(0)*100,1)'; put ',some_shortnum=round(ranuni(0)*100,1)'; put ',some_bestnum=round(ranuni(0)*100,1);'; put '%end;'; put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */'; put 'proc format library=&lib..mpe_x_catalog;'; put 'value otdate'; put '.Z = ''Some Zs'''; put '.N = ''Some 9s'''; put 'other = [date9.]'; put ';'; put 'invalue disc'; put '''ABC'' = 0.20'; put '''DEF'' = 0.25'; put '''XYZ'' = 0.00'; put 'other = 0.00'; put ';'; put 'invalue indate'; put '''00000000'' = .Z'; put '''99999999'' = .N'; put 'other = [yymmdd8.]'; put ';'; put 'value age(multilabel)'; put '20 - 29 = ''20 - 29'''; put '30 - 39 = ''30 - 39'''; put '40 - 49 = ''40 - 49'''; put '50 - 59 = ''50 - 59'''; put '60 - high = ''60 +++'''; put '20 - 35 = ''20 - 35'''; put '36 - 55 = ''36 - 55'''; put '55 - high = ''55 +++'''; put ';'; put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */'; put 'VALUE $GENDERLABEL'; put '"M" = "Male"'; put '"F" = "Female"'; put ';'; put 'VALUE LIKERT_SEVEN'; put '1 = "Strongly Disagree"'; put '2 = "Disagree"'; put '3 = "Slightly Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5 = "Slightly Agree"'; put '6 = "Agree"'; put '7 = "Strongly Agree"'; put ';'; put 'VALUE LIKERT7_ELEVEN'; put '1,2,3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5,6,7 = "Agree"'; put ';'; put 'VALUE LIKERT7_SISTERS'; put '1-3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5-7 = "Agree"'; put ';'; put 'VALUE INCOME'; put 'LOW -< 20000 = "Low"'; put '20000 -< 60000 = "Middle"'; put '60000 - HIGH = "High"'; put ';'; put 'VALUE RACE'; put '1 = "White"'; put '2 = "Black"'; put 'OTHER = "Other"'; put ';'; put 'VALUE GENDERCODE'; put '0 = ''Male'''; put '1 = ''Female'';'; put 'VALUE ATHLETECODE'; put '0 = ''Non-athlete'''; put '1 = ''Athlete'';'; put 'VALUE SMOKINGCODE'; put '0 = ''Nonsmoker'''; put '1 = ''Past smoker'''; put '2 = ''Current smoker'';'; put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */'; put 'value $state'; put '''Delaware''=''DE'''; put '''Florida''=''FL'''; put '''Ohio''=''OH'';'; put 'value MYfmt'; put '/* Format dates prior to 31DEC2011 using only a year. */'; put 'low-''31DEC2011''d=[year4.]'; put '/* Format 2012 dates using the month and year. */'; put '''01jan2012''d-''31DEC12''d=[monyy7.]'; put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */'; put '''01JAN2013''d-high=[date9.]'; put '/* Catch missing values. */'; put 'other=''n/a'';'; put 'value newfmt .=''N/A'' other=[12.1];'; put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */'; put 'value $genderml (multilabel)'; put '''1''=''Male'''; put '''2''=''Female'''; put '''1'',''2'','' ''=''Total people'';'; put 'value agemla (multilabel)'; put '1-4=''Preschool'''; put '1-18=''Children'''; put '19-120=''Adults'';'; put 'value agemlb (multilabel)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put 'value agemlc (multilabel notsorted)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put '%mend mpe_makedata;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mpe_makedatamodel(lib=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put '%local notnull;'; put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;'; put '%put &=notnull;'; put 'proc sql;'; put 'create table &lib..mpe_alerts('; put 'tx_from num format=datetime19.3,'; put 'alert_event char(20),'; put 'alert_lib char(8),'; put 'alert_ds char(32),'; put 'alert_user char(100) ,'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_alerts;'; put 'index create'; put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_audit('; put 'load_ref char(36) label=''unique load reference'','; put 'libref char(8) label=''Library Reference (8 chars)'','; put 'dsn char(32) label=''Dataset Name (32 chars)'','; put 'key_hash char(32) label='; put '''MD5 Hash of primary key values (pipe seperated)'','; put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'','; put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'','; put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'','; put 'is_pk num label=''Is Primary Key Field? (1/0)'','; put 'is_diff num label='; put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'','; put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'','; put 'oldval_num num format=best32. label=''Old (numeric) value'','; put 'newval_num num format=best32. label=''New (numeric) value'','; put 'oldval_char char(32765) label=''Old (character) value'','; put 'newval_char char(32765) label=''New (character) value'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_audit;'; put 'index create'; put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_column_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'CLS_SCOPE char(4) ¬null,'; put 'CLS_GROUP char(64) ¬null,'; put 'CLS_LIBREF char(8) ¬null,'; put 'CLS_TABLE char(32) ¬null,'; put 'CLS_VARIABLE_NM char(32) ¬null,'; put 'CLS_ACTIVE num ¬null,'; put 'CLS_HIDE num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_column_level_security;'; put 'index create'; put 'pk_mpe_column_level_security='; put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_config('; put 'tx_from num ¬null format=datetime19.3'; put ',tx_to num ¬null format=datetime19.3'; put ',var_scope varchar(10) ¬null'; put ',var_name varchar(32) ¬null'; put ',var_value varchar(5000)'; put ',var_active num'; put ',var_desc varchar(300)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_config;'; put 'index create'; put 'pk_mpe_config=(tx_to var_scope var_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_CATS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_CATS;'; put 'index create'; put 'pk_mpe_datacatalog_CATS=(tx_to libref memname)'; 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_OBJS('; put 'TX_FROM num ¬null format=datetime19.,'; put 'TX_TO num ¬null format=datetime19.,'; put 'libref char(8) ¬null label=''Library Name'','; put 'memname char(64) ¬null label=''Member Name'','; put 'objname char(32) ¬null label=''Object Name'','; put 'objtype char(8) ¬null label=''Object Type'','; put 'objdesc char(256) label=''Object Description'','; put 'alias char(32) label=''Object Alias'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_OBJS;'; put 'index create'; put 'pk_mpe_datacatalog_OBJS=(libref memname objname objtype 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 - in a constraint being 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_CATS('; put 'TX_FROM float format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'nobjs num ¬null label=''Number of objects'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_CATS;'; put 'index create'; put 'pk_mpe_datastatus_cats=(libref memname 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 'catalog_cnt num label=''Number of Catalogs'''; 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_OBJS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float ¬null format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'objname char(32) label=''Object Name'','; put 'objtype char(8) label=''Object Type'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'','; put 'level num label=''Library Concatenation Level'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_OBJS;'; put 'index create'; put 'pk_mpe_datastatus_OBJS=(libref memname objname objtype 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. label=''Date Created'','; put 'modate num format=DATETIME. label=''Date Modified'','; put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_tabs;'; put 'index create'; put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datadictionary'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'DD_TYPE char(16),'; put 'DD_SOURCE char(1024),'; put 'DD_SHORTDESC char(256),'; put 'DD_LONGDESC char(32767),'; put 'DD_OWNER char(128),'; put 'DD_RESPONSIBLE char(128),'; put 'DD_SENSITIVITY char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datadictionary;'; put 'index create'; put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_dataloads('; put 'libref varchar(8) ¬null,'; put 'dsn varchar(32) ¬null,'; put 'etlsource varchar(100) ¬null,'; put 'loadtype varchar(20) ¬null,'; put 'changed_records int,'; put 'new_records int,'; put 'deleted_records int,'; put 'duration num,'; put 'user_nm varchar(50) ¬null,'; put 'processed_dttm num format=datetime19.3,'; put 'mac_ver varchar(5)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_dataloads;'; put 'index create'; put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_emails('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'user_name char(50) ¬null,'; put 'user_displayname char(100),'; put 'user_email char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_emails;'; put 'index create'; put 'pk_mpe_emails=(tx_to user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_excel_config('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'xl_libref char(8),'; put 'xl_table char(32),'; put 'xl_column char(32),'; put 'xl_rule char(32),'; put 'xl_active num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_excel_config;'; put 'index create'; put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_XLMAP_DATA('; put 'LOAD_REF char(32) ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'ROW_NO num ¬null,'; put 'COL_NO num ¬null,'; put 'VALUE_TXT char(4000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify MPE_XLMAP_DATA;'; put 'index create'; put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_info('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_DESCRIPTION char(1000) ¬null,'; put 'XLMAP_TARGETLIBDS char(41) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_info;'; put 'index create'; put 'pk_mpe_xlmap_info=(tx_to xlmap_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_rules('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'XLMAP_SHEET char(32) ¬null,'; put 'XLMAP_START char(1000) ¬null,'; put 'XLMAP_FINISH char(1000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_rules;'; put 'index create'; put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filteranytable('; put 'filter_rk num ¬null,'; put 'filter_hash char(32) ¬null,'; put 'filter_table char(41) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filteranytable;'; put 'index create filter_rk /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filtersource('; put 'filter_hash char(32) ¬null,'; put 'filter_line num ¬null,'; put 'group_logic char(3) ¬null,'; put 'subgroup_logic char(3) ¬null,'; put 'subgroup_id num ¬null,'; put 'variable_nm varchar(32) ¬null,'; put 'operator_nm varchar(12) ¬null,'; put 'raw_value varchar(4000) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filtersource;'; put 'index create'; put 'pk_mpe_filtersource=(filter_hash filter_line)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_groups('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'group_name char(100) ¬null,'; put 'user_name char(50) ¬null,'; put 'group_desc char(256)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_groups;'; put 'index create'; put 'pk_mpe_groups=(tx_to group_name user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lineage_cols'; put '('; put 'col_id char(32),'; put 'direction char(1),'; put 'sourcecoluri char(256),'; put 'map_type char(256),'; put 'map_transform char(256),'; put 'jobname char(256),'; put 'sourcetablename char(256),'; put 'sourcecolname char(256),'; put 'targettablename char(256),'; put 'targetcolname char(256),'; put 'targetcoluri char(256),'; put 'Derived_Rule char(500),'; put 'level int,'; put 'modified_dttm num format=datetime19.3,'; put 'modified_by char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_cols;'; put 'index create'; put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_LINEAGE_TABS'; put '('; put 'tx_from num ¬null format=datetime19.3,'; put 'jobid char(17),'; put 'srctableid char(17),'; put 'tgttableid char(17),'; put 'jobname char(128),'; put 'srctabletype char(16),'; put 'srctablename char(64),'; put 'srclibref char(8),'; put 'tgttabletype char(16),'; put 'tgttablename char(64),'; put 'tgtlibref char(8),'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_tabs;'; put 'index create'; put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_loads('; put 'csv_dir char(255),'; put 'user_nm char(50) ,'; put 'status char(15) ,'; put 'duration num ,'; put 'processed_dttm num format=datetime19.3,'; put 'reason_txt char(2048) ,'; put 'approvals char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_loads;'; put 'index create csv_dir /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lockanytable('; put 'lock_lib varchar(8) ¬null ,'; put 'lock_ds varchar(32) ¬null,'; put 'lock_status_cd varchar(10) ¬null,'; put 'lock_user_nm varchar(100) ¬null ,'; put 'lock_ref varchar(200),'; put 'lock_pid varchar(10),'; put 'lock_start_dttm num format=E8601DT26.6,'; put 'lock_end_dttm num format=E8601DT26.6'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lockanytable;'; put 'index create'; put 'pk_mpe_lockanytable=(lock_lib lock_ds)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_maxkeyvalues('; put 'keytable varchar(41) label=''Base table in libref.dataset format'','; put 'keycolumn char(32) format=$32.'; put 'label=''The Surrogate / Retained key field containing the key values.'','; put 'max_key num label='; put '''Integer value representing current max RK or SK value in the KEYTABLE'','; put 'processed_dttm num format=E8601DT26.6'; put 'label=''Datetime this value was last updated'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_maxkeyvalues;'; put 'index create keytable /nomiss unique;'; put 'quit;'; put '/* no PK defined as it is a transaction table */'; put 'proc sql;'; put 'create table &lib..mpe_requests('; put 'request_dttm num ¬null format=datetime19.,'; put 'request_user char(64) ¬null,'; put 'request_service char(64) ¬null,'; put 'request_params char(128)'; put ');'; put 'proc sql;'; put 'create table &lib..mpe_review('; put 'table_id varchar(32) ¬null,'; put 'reviewed_by_nm varchar(100) ¬null,'; put 'base_table varchar(41) ¬null,'; put 'review_status_id varchar(10) ¬null,'; put 'reviewed_on_dttm num ¬null format=datetime19.3,'; put 'review_reason_txt varchar(400)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_review;'; put 'index create'; put 'pk_mpe_review=(table_id reviewed_by_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_row_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'RLS_RK num ¬null,'; put 'RLS_SCOPE char(8) ¬null,'; put 'RLS_GROUP char(128) ¬null,'; put 'RLS_LIBREF char(8) ¬null,'; put 'RLS_TABLE char(32) ¬null,'; put 'RLS_GROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_ID num ¬null,'; put 'RLS_VARIABLE_NM varchar(32) ¬null,'; put 'RLS_OPERATOR_NM varchar(12) ¬null,'; put 'RLS_RAW_VALUE varchar(4000) ¬null,'; put 'RLS_ACTIVE num ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_row_level_security;'; put 'index create'; put 'pk_mpe_row_level_security=(tx_to RLS_RK)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'access_level char(10) ¬null,'; put 'sas_group char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_security;'; put 'index create'; put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_selectbox('; put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/'; put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */'; put 'selectbox_rk num ¬null, /* surrogate key */'; put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/'; put 'select_ds varchar(32) ¬null,'; put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */'; put 'selectbox_value varchar(500) ¬null, /* selectbox value */'; put 'selectbox_order num , /* optional ordering (1 comes before 2) */'; put 'selectbox_type varchar(32) /* column type (blank for default, else'; put 'sas or js to indicate relevant system functions)*/'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_selectbox;'; put 'index create'; put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_signoffs('; put 'tech_from_dttm num ¬null format=datetime19.3,'; put 'tech_to_dttm num ¬null format=datetime19.3,'; put 'signoff_table varchar(50) ¬null,'; put 'signoff_section_rk num ¬null,'; put 'signoff_version_rk num ¬null,'; put 'signoff_name varchar(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_signoffs;'; put 'index create'; put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)'; put '/nomiss unique;'; put 'quit;'; put '/* mpe_submit */'; put 'proc sql;'; put 'create table &lib..mpe_submit('; put 'table_id varchar(32) ¬null,'; put 'submit_status_cd varchar(10) ¬null,'; put 'base_lib char(8) ¬null,'; put 'base_ds char(32) ¬null,'; put 'submitted_by_nm varchar(100) ¬null,'; put 'submitted_on_dttm num ¬null format=datetime19.3,'; put 'submitted_reason_txt varchar(400),'; put 'input_obs num,'; put 'input_vars num,'; put 'num_of_approvals_required num ¬null ,'; put 'num_of_approvals_remaining num ¬null ,'; put 'reviewed_by_nm char(100),'; put 'reviewed_on_dttm num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_submit;'; put 'index create table_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_tables('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'num_of_approvals_required int,'; put 'loadtype char(12) ,'; put 'buskey char(1000) ,'; put 'var_txfrom char(32) ,'; put 'var_txto char(32) ,'; put 'var_busfrom char(32) ,'; put 'var_busto char(32) ,'; put 'var_processed char(32) ,'; put 'close_vars varchar(500),'; put 'pre_edit_hook char(200),'; put 'post_edit_hook char(200),'; put 'pre_approve_hook char(200) ,'; put 'post_approve_hook char(200) ,'; put 'signoff_cols varchar(500),'; put 'signoff_hook varchar(200),'; put 'notes char(1000) ,'; put 'rk_underlying char(1000) ,'; put 'audit_libds char(41)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_tables;'; put 'index create'; put 'pk_mpe_tables=(tx_to libref dsn)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_users('; put 'user_id char(50) ¬null,'; put 'last_seen_dt num ¬null format=date9.,'; put 'registered_dt num ¬null format=date9.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_users;'; put 'index create user_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_VALIDATIONS'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'BASE_LIB varchar(8),'; put 'BASE_DS varchar(32),'; put 'BASE_COL varchar(32),'; put 'RULE_TYPE varchar(32),'; put 'RULE_VALUE varchar(128),'; put 'RULE_ACTIVE num ,'; put 'TX_TO num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_validations;'; put 'index create'; put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_x_test('; put 'primary_key_field num ¬null,'; put 'some_char char(32767) ,'; put 'some_dropdown char(128),'; put 'some_num num ,'; put 'some_date num format=date9.,'; put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,'; put 'some_time num format=time8.,'; put 'some_shortnum num length=4,'; put 'some_bestnum num format=best.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_x_test;'; put 'index create primary_key_field /nomiss unique;'; put 'quit;'; put '%mend mpe_makedatamodel;'; put '%macro 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_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 mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mm_getstpinfo(pgm'; put ',outds=work.mm_getstpinfo'; put ',mDebug=0'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length type stp_uri tsuri servercontext value $200'; put 'StoredProcessConfiguration $1000 sourcecode_first32k $32767;'; put 'keep path stp_uri sourcecode_first32k StoredProcessConfiguration'; put 'servercontext;'; put 'call missing (of _all_);'; put 'path="&pgm(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,stp_uri)>0 then do;'; put '/* get attributes */'; put 'cnt=1;'; put 'do while (metadata_getnasn(stp_uri,"Notes",cnt,tsuri)>0);'; put 'rc1=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put 'rc2=metadata_getattr(tsuri,"StoredText",sourcecode_first32k);'; put 'end;'; put 'else if value="Stored Process" then do;'; put 'rc3=metadata_getattr(tsuri,"StoredText",StoredProcessConfiguration);'; put 'end;'; put 'cnt+1;'; put 'end;'; put '/* get context (should only be one) */'; put 'rc4=metadata_getnasn(stp_uri,"ComputeLocations",1,tsuri);'; put 'rc5=metadata_getattr(tsuri,"Name",servercontext);'; put 'end;'; put 'else do;'; put 'put ''ERR'' +(-1) "OR: could not find " path;'; put 'put (_all_)(=);'; put 'end;'; put '&md.put (_all_)(=);'; put 'run;'; put '%mend mm_getstpinfo ;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief service for creating the configuration tables in DEMO mode.'; put '@details'; put 'STP for creating the configuration tables in DEMO mode.'; put 'It also adds the STAGING directory as subdirectory to the BASE'; put 'library location.'; put 'Note - the CURLIB var is added during the build process.'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mf_getapploc.sas'; put '@li mf_getuser.sas'; put '@li mf_mkdir.sas'; put '@li mm_createdocument.sas'; put '@li mm_createlibrary.sas'; put '@li mm_createstp.sas'; put '@li mm_deletedocument.sas'; put '@li mm_deletestp.sas'; put '@li mm_getstpcode.sas'; put '@li mm_getstpinfo.sas'; put '@li mp_abort.sas'; put '@li mp_init.sas'; put '@li mpe_makedata.sas'; put '@li mpe_makedatamodel.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 '%mp_init()'; put '%global admin repo path; /* URL params from configurator */'; put '%let repo=%sysfunc(coalescec(&repo,Foundation));'; put '%let admin=%sysfunc(coalescec(&admin,dc-admin));'; put '%let dcpath=%sysfunc(coalescec(&path,NOTFOUND));'; put '%mp_abort(iftrue= ("&dcpath" = "NOTFOUND")'; put ',mac=&_program'; put ',msg=%str(PATH variable was not provided)'; put ')'; put '%let root=%mf_getapploc();'; put '%let work=%sysfunc(pathname(work));'; put '%let dc_libref=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let DC_LIBNAME=Data Controller(&dc_libref);'; put '%let dcpath=&dcpath/&dc_libref;'; put '%put _all_;'; put '%mf_mkdir(&dcpath/dc_staging)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Unable to create &dcpath using &sysuserid)'; put ')'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&root/services/admin,name=permTest)'; put '%mm_deletedocument(target=&root/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &_metaperson does not have WriteMetadata on metadata folder:'; put '&root )'; put ')'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'putlog "dcpath=&dcpath/permTest.txt";'; put 'putlog "sysuserid=&sysuserid";'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '/* get the server context from the current STP */'; put '%mm_getstpinfo(&_program,outds=work.stpinfo)'; put 'data _null_;'; put 'set work.stpinfo;'; put 'call symputx(''serverContext'',serverContext);'; put 'run;'; put '/* create the library */'; put '%mm_createlibrary('; put 'libname=&DC_LIBNAME'; put ',libref=&dc_libref'; put ',libdesc=Data Controller for SAS configuration tables'; put ',engine=BASE'; put ',tree=&root/data'; put ',servercontext=&serverContext'; put ',directory=&dcpath'; put ',mDebug=1'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to create &dc_libref library)'; put ')'; put '/* assign the library */'; put 'libname &dc_libref "&dcpath";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to assign the &dc_libref library)'; put ')'; put '/* make the tables */'; put '/* SASAdministrators */'; put '%mpe_makedatamodel(lib=&dc_libref)'; put '%mpe_makedata(lib=&DC_LIBREF,mpeadmins=&admin,path=%str(&dcpath))'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem creating tables in &DC_LIBREF library\n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT)'; put ')'; put '/* register tables in metadata */'; put 'proc metalib;'; put 'omr (library="&DC_LIBNAME");'; put 'folder="&root/data";'; put 'update_rule=(delete);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem registering metadata for tables in &DC_LIBREF library \n'; put 'os user=&sysuserid \n'; put 'metaperson=%mf_getuser() \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put '/* finally, update the app component. The user will need WM perms for this. */'; put 'data _null_;'; put 'file "&work/settings.sas" mod ;'; put 'put '' '';'; put 'put ''%global DC_LIBREF DC_LIBNAME DC_LIBLOC DC_STAGING_AREA DC_ADMIN_GROUP'';'; put 'put '' DC_REPO_USERS DC_DTTMTFMT DC_MACROS;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&DC_LIBREF;";'; put 'put ''%let DC_LIBNAME='' "&DC_LIBNAME;";'; put 'put ''%let DC_LIBLOC='' "&dcpath;";'; put 'put '' '';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'put ''/* This metadata group has unrestricted access to Data Controller */'';'; put 'put ''%let dc_admin_group='' "&admin;";'; put 'put '' '';'; put 'put ''/* This repository is used to query for users and groups */'';'; put 'put ''%let dc_repo_users='' "&repo;";'; put 'put '' '';'; put 'put ''/* This physical location is used for staging data and audit history */'';'; put 'put ''%let dc_staging_area=&dc_libloc/dc_staging;'';'; put 'put '' '';'; put 'put ''data _null_;'';'; put 'put '' set &DC_LIBREF..mpe_config(where=('';'; put 'put '' var_scope="DC" '';'; put 'put '' and &dc_dttmtfmt. lt tx_to'';'; put 'put '' and var_active=1'';'; put 'put " ));";'; put 'put " call symputx(var_name,var_value,''G'');";'; put 'put '' putlog var_name "=" var_value;'';'; put 'put "run;";'; put 'put '' '';'; put 'put ''/* to override any DC macros with client versions, place them below */'';'; put 'put ''options insert=(sasautos=("&dc_macros"));'';'; put 'run;'; put '/*'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put '*/'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc when preparing data_controller_settings)'; put ')'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=settings.sas'; put ',directory=&work'; put ',tree=&root/services/public'; put ',Server=&serverContext'; put ',stptype=2'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str('; put 'Problem updating the dc_staging area in'; put '&root/services/public/DataController Settings \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Data Controller Config

'';'; put 'put ''

The following items have been successfully configured:

'';'; put 'put "";'; put 'put "

Next Steps:

";'; put 'put "
  1. Populate ";'; put 'put "Table Lineage
  2. ";'; put 'put "
  3. Populate";'; put 'put "Data Catalog
  4. ";'; put 'put "
  5. Now, ";'; put 'put "hereLaunch!
";'; put 'run;'; put '/* We ran successfully, now remove configurator and makedata STPs */'; put '%mm_deletestp(target=&root/services/admin/configurator)'; put '%mm_deletestp(target=&_program)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makelib; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Create a demo (base engine) library'; put '@details'; put 'Creates the library'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mm_createlibrary.sas'; put '@li mm_createdocument.sas'; put '@li mm_deletedocument.sas'; put '@li mp_abort.sas'; put '@li dc_assignlib.sas'; put '@li mm_deletestp.sas'; put '@li mm_createstp.sas'; put '@li mf_mkdir.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 dcpath;'; put '%let dclib=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let dclibname=Data Controller(&dclib);'; put '%let work=%sysfunc(pathname(work));'; put '%let dcpath=&dcpath/&dclib;'; put '%mf_mkdir(&dcpath)'; put '%mf_mkdir(&work)'; put '%put &=dcpath;'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to write to &dcpath)'; put ')'; put 'data _null_;'; put 'pgm="&_program";'; put 'rootlen=length(trim(pgm))-length("/services/admin/makelib");'; put 'root=substr(pgm,1,rootlen);'; put 'putlog root=;'; put 'call symputx(''deploy_dir'',root);'; put 'run;'; put 'options noquotelenmax ps=max;'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&deploy_dir/services/admin,name=permTest)'; put '%mm_deletedocument(target=&deploy_dir/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &_metaperson does not have WriteMetadata on SAS folder:'; put '&deploy_dir )'; put ')'; put '/**'; put '* Create library and load data'; put '*/'; put '%let mpelibname=Data Controller (&dclib);'; put '%mm_createlibrary('; put 'libname=&mpelibname'; put ',libref=&dclib'; put ',libdesc=Configuration tables for the MacroPeople Data Controller application'; put ',engine=BASE'; put ',tree=&deploy_dir/data'; put ',servercontext=SASApp'; put ',directory=&dcpath'; put ',mDebug=1)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to create &dclib library)'; put ')'; put '/* get direct libref */'; put '%dc_assignlib(READ,&dclib)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &dclib library)'; put ')'; put '/* create an initial settings service (this will be overwritten in the'; put 'data update step)'; put '*/'; put '%let temploc=&work/temp.txt;'; put 'data _null_;'; put 'file "&temploc" ;'; put 'put ''/* Data Controller Precode */'' / / ;'; put 'put '' '';'; put 'put ''options noquotelenmax ps=max;'';'; put 'put ''%global DC_LIBREF DC_LIBNAME;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&dclib;";'; put 'put ''%let DC_LIBNAME='' "&mpelibname;";'; put 'put '' '';'; put 'put ''/* get physical path for direct libname - needed to track requests */'';'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref=''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'run;'; put '%mm_deletestp(target=&deploy_dir/services/public/Data_Controller_Settings)'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=temp.txt'; put ',directory=&work'; put ',tree=&deploy_dir/services/public'; put ',Server=SASApp'; put ',stptype=2'; put ',mdebug=1'; put ',stpdesc=Data Controller Configuration'; put ',minify=NO)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue creating settings stp)'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put "

Library &dclib successfully assigned

";'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc,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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; 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 '%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 '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; 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 work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.libs as'; put 'select libref from work.sumcat'; put 'union'; put 'select libref from work.sumdsn;'; put 'create table work.statuslibs as'; put 'select a.libref,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'c.catalog_cnt'; put 'from work.libs a'; put 'left join work.sumdsn b'; put 'on a.libref=b.libref'; put 'left join work.sumcat c'; put 'on a.libref=c.libref;'; 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(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc,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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshtablelineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc,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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshtablelineage.sas'; put '@brief updates the table level lineage'; put '@details extracts all sources/targets from every job'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getuniquefileref.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 '/* get list of libraries */'; put '%let fileref1=%mf_getuniquefileref();'; put 'filename &fileref1 temp;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'JobSAS'; put ''; put '8452'; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put '"'; put 'out=&fileref1'; put ';'; put 'run;'; put '/* create an XML map and extract dependencies from response */'; put '%macro getTables(type=);'; put '%local x;'; put '%do x=1 %to 2;'; put '%local dir;'; put '%if &x=1 %then %let dir=Source;'; put '%else %let dir=Target;'; put '%local y;'; put '%do y=1 %to 3;'; put '%local maptype;'; put '%if &y=1 %then %let maptype=ClassifierMap;'; put '%else %if &y=2 %then %let maptype=Select;'; put '%else %if &y=3 %then %let maptype=Join;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "";'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities/TransformationActivi"@;'; put 'put "ty/Steps/TransformationStep/Transformations/&maptype/Classifier"@;'; put 'put "&dir.s/&type";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Name";'; put 'put "characterstring128";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations"@;'; put 'put "/&maptype/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations/"@;'; put 'put "&maptype/Classifier&dir.s/&type/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=&fileref1 xmlmap=sxlemap;'; put 'data work.&dir.&type/view=work.&dir.&type;'; put 'set _xml_.&dir.&type;'; put 'length tabletype maptype $16 tabledirection $1;'; put 'jobname=upcase(jobname);'; put 'tabletype="&type";'; put 'maptype="&maptype";'; put 'if "&dir"="Source" then tabledirection="R";'; put 'else tabledirection=''F'';'; put 'run;'; put 'proc append base=work.alldata data=work.&dir.&type;'; put 'run;'; put 'libname _XML_ clear;'; put '%end;'; put '%end;'; put '%mend getTables;'; put '/* list of types:'; put 'https://support.sas.com/documentation/cdl/en/omamodref/63903/HTML/default/viewer.htm#classifiermap.htm'; put '*/'; put '%getTables(type=PhysicalTable)'; put '%getTables(type=ExternalTable)'; put '%getTables(type=QueryTable)'; put '%getTables(type=RelationalTable)'; put '%getTables(type=Report)'; put '%getTables(type=Cube)'; put '%getTables(type=DataTable)'; put '/* remove dups and get tables */'; put 'proc sort data=work.alldata(keep=jobid jobname tableid tabletype tabledirection)'; put 'out=work.sorted nodupkey;'; put 'by _all_;'; put 'run;'; put 'proc sort data=work.sorted(keep=tableid) out=work.tables nodupkey;'; put 'by tableid;'; put 'run;'; put '/* this bit is slow due to lookups but given the different table types'; put 'it was the easiest approach */'; put 'data work.tables2;'; put 'length tablename liburi puri $64 libref schemaname $8 ;'; put 'if _n_=1 then call missing(tablename, liburi, puri, libref, schemaname);'; put 'set work.tables;'; put 'drop rc liburi;'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc= metadata_getattr(liburi, "SchemaName", SchemaName);'; put 'if ^missing(SchemaName) then do;'; put 'if metadata_getnasn(liburi,"UsedByPackages",1,puri)>0 then do;'; put 'rc=metadata_getattr(puri,"Libref",libref);'; put 'end;'; put 'end;'; put 'else rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'tablename=upcase(tablename);'; put 'run;'; put 'proc sql;'; put 'create table work.augmented as'; put 'select a.*'; put ',b.tablename'; put ',b.libref'; put 'from work.sorted a'; put 'left join work.tables2 b'; put 'on a.tableid=b.tableid;'; put 'create table work.mpe_lineage_tabs as'; put 'select distinct'; put 'coalesce(a.jobid,b.jobid) as jobid,'; put 'coalesce(a.jobname,b.jobname) as jobname,'; put 'coalesce(a.tableid,"N/A") as srctableid,'; put 'a.tabletype as srctabletype,'; put 'a.tablename as srctablename,'; put 'coalesce(a.libref,''nolib'') as srclibref,'; put 'coalesce(b.tableid,"N/A") as tgttableid,'; put 'b.tabletype as tgttabletype,'; put 'b.tablename as tgttablename,'; put 'coalesce(b.libref,''nolib'') as tgtlibref'; put 'from work.augmented(where=(tabledirection=''R'')) a'; put 'full join work.augmented(where=(tabledirection=''F'')) b'; put 'on a.jobid=b.jobid'; put ';'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=MPE_LINEAGE_TABS'; put ',append_dsn=MPE_LINEAGE_TABS'; put ',PK=jobid srctableid tgttableid'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%mp_binarycopy(inref=&fileref1, outref=_webout)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc,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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getapprovals.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* determine users group membership */'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put 'proc sql noprint;'; put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as'; put 'select table_id'; put ',submit_status_cd as REVIEW_STATUS_ID'; put ',SUBMITTED_BY_NM'; put ',cats(base_lib,''.'',base_ds) as base_table'; put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1'; put ',submitted_on_dttm as SUBMITTED_ON_DTTM2'; put ',submitted_reason_txt'; put ',num_of_approvals_required'; put ',num_of_approvals_remaining'; put ',base_lib as libref'; put ',base_ds as dsn'; put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))'; put '/* filter out any submits for which approval is already made */'; put 'where table_id not in ('; put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"'; put ');'; put '%macro getapprovals();'; put '%local admin_check;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in ('; put 'select sas_group from &mpelib..mpe_security'; put 'where libref=''*ALL*'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and access_level in (''APPROVE'')'; put ');'; put '%if &admin_check >0 %then %do;'; put 'create table fromSAS as'; put 'select distinct * from out1'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%else %do;'; put 'create table fromSAS as'; put 'select distinct a.*'; put 'from out1 a'; put 'inner join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL =''APPROVE'''; put 'and b.SAS_GROUP in (select groupname from work.groups)'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%mend getapprovals;'; put '%getapprovals()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Returns the list of previously approved / rejected items.'; put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and'; put 'filtered according to the groups in MPE_SECURITY (unless the user is in the'; put 'DC admin group).'; put '

SAS Macros

'; put '@li mpe_getvars.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '

Service Inputs

'; put '
BROWSERPARAMS
'; put 'The following variables MAY be provided from frontend (HIST can also be set'; put 'in MPE_CONFIG):'; put '@li HIST - number of records to return'; put '@li STARTROW - the starting row (default is 1)'; put '

Service Outputs

'; put '
FROMSAS
'; put 'This table is returned, starting from &STARTROW for &HIST rows (ordered'; put 'descending on SUBMITTED datetime)'; put '@li TABLE_ID'; put '@li BASE_TABLE'; put '@li SUBMITTED'; put '@li SUBMITTED_REASON_TXT'; put '@li SUBMITTER'; put '@li REVIEWED'; put '@li STATUS'; put '@li REVIEWED_ON_DTTM'; put '@li APPROVER'; put '
HISTPARAMS
'; put '@li HIST - rows returned'; put '@li STARTROW - starting row used'; put '@li NOBS - Number of observations (rows) available'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* hard coded HIST value */'; put '%let hist=40;'; put '%let startrow=1;'; put '/* load parameters from frontend (HIST and STARTROW) */'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC_REVIEW"'; put 'and var_name=''HISTORY_ROWS'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(''hist'',var_value,''G'');'; put 'putlog ''mpe_config: '' var_name "=" var_value;'; put 'run;'; put '/* load parameters (override HIST again if provided) */'; put '%mpe_getvars(BrowserParams, BrowserParams)'; put '/* determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '/* check to see if the user is an admin, or has *ALL* access rights */'; put '%let authcheck=0;'; put 'proc sql noprint;'; put 'create table work.authcheck'; put 'as select *'; put 'from usergroups'; put 'where upcase(groupname)="%upcase(&mpeadmins)"'; put 'or upcase(groupname) in ('; put 'select upcase(sas_group) from &mpelib..mpe_security'; put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to'; put ');'; put 'select count(*) into: authcheck from &syslast;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after auth check)'; put ')'; put '/* now get the previous &hist records from mpe_submit */'; put 'proc sql;'; put 'create view work.submits as'; put 'select distinct a.TABLE_ID'; put ',cats(a.base_lib,''.'',a.base_ds) as base_table'; put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted'; put ',a.submitted_reason_txt'; put ',a.submitted_by_nm as submitter'; put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED'; put ',a.submit_status_cd as status'; put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a'; put '%macro gethistory();'; put '%if &authcheck=0 %then %do;'; put '/* filter for allowed items */'; put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.base_lib=b.libref'; put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')'; put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)'; put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')'; put '%end;'; put '%mend gethistory;'; put '%gethistory()'; put ';'; put '/* get latest reason text */'; put 'create table work.reviews as'; put 'select a.*'; put ',b.reviewed_on_dttm'; put ',b.reviewed_by_nm as approver'; put ',b.review_reason_txt'; put 'from work.submits a'; put 'left join &mpelib..mpe_review b'; put 'on a.table_id=b.table_id'; put 'order by a.table_id desc, b.reviewed_on_dttm desc;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after fetching submits)'; put ')'; put 'data work.fromsas;'; put 'set work.reviews;'; put 'by descending table_id descending reviewed_on_dttm;'; put 'if first.table_id;'; put 'if _n_ ge &startrow;'; put 'n+1;'; put 'if n>&hist then stop;'; put 'drop n;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.submits;'; put 'data work.histparams;'; put 'hist=&hist;'; put 'startrow=&startrow;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,histparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '/* sanitise message to prevent code injection */'; put 'REVIEW_REASON_TXT=compress(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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1,fetchobs=1'; put ')/*/STORE SOURCE*/;'; put '%local dsid;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%if (&dsid) %then %do;'; put '%local rc &variable;'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetchobs(&dsid,&fetchobs));'; put '%if (&rc ne 0) %then %do;'; put '%put NOTE: Problem reading obs &fetchobs from &libds..;'; put '%put %sysfunc(sysmsg());'; put '/* Coerce an rc value of -1 (read past end of data) to a 4'; put 'that, in SAS condition code terms, represents the sysmsg'; put 'w@rning it generates. */'; put '%if &rc eq -1 %then %let rc = 4;'; put '/* And update SYSCC if the &rc value is higher */'; put '%let syscc = %sysfunc(max(&syscc,&rc));'; put '%end;'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%else %do;'; put '%put %sysfunc(sysmsg());'; put '%let syscc = %sysfunc(max(&syscc,%sysfunc(sysrc())));'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc,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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_loadformat(libcat,libds'; put ',loadtarget=NO'; put ',auditlibds=0'; put ',locklibds=0'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=0'; put ',outds_del=0'; put ',outds_mod=0'; put ',mdebug=0'; put ');'; put '/* set up local macro variables and temporary tables (with a prefix) */'; put '%local err msg prefix dslist i var fmtlist ibufsize;'; put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;'; put '%if &outds_add=0 %then %let dslist=&dslist outds_add;'; put '%if &outds_del=0 %then %let dslist=&dslist outds_del;'; put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;'; put '%let prefix=%substr(%mf_getuniquename(),1,21);'; put '%do i=1 %to %sysfunc(countw(&dslist));'; put '%let var=%scan(&dslist,&i);'; put '%local &var;'; put '%let &var=%upcase(&prefix._&var);'; put '%end;'; put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */'; put '%let libcat=%scan(&libcat,1,-);'; put '/* perform input validations */'; put '%mp_abort('; put 'iftrue=(%mf_existds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&libds could not be found)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(FMTROW not found in &libds)'; put ')'; put '%let err=0;'; put '%let msg=0;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'value=upcase(value);'; put 'if &mdebug=0 then put name ''='' value;'; put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;'; put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'else if name=''LIBCAT'' then do;'; put 'if exist(value,''CATALOG'') le 0 then do;'; put 'call symputx(''msg'',"Unable to open catalog: "!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'end;'; put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))'; put 'and missing(value) then do;'; put 'call symputx(''msg'',"missing value in var: "!!name);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put 'data _null_;'; put 'set &libds;'; put 'if missing(fmtrow) then do;'; put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put '%mp_abort('; put 'iftrue=(&err ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(&msg)'; put ')'; put '%local cnt;'; put 'proc sql noprint;'; put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;'; put '%mp_abort('; put 'iftrue=(&cnt ne %mf_nobs(&libds))'; put ',mac=&sysmacroname'; put ',msg=%str(Non-unique primary key on &libds)'; put ')'; put '/**'; put '* First, extract only relevant formats from the catalog'; put '*/'; put 'proc sql noprint;'; put 'select distinct'; put 'case'; put 'when type=''N'' then upcase(fmtname)'; put 'when type=''C'' then cats(''$'',upcase(fmtname))'; put 'when type=''I'' then cats(''@'',upcase(fmtname))'; put 'when type=''J'' then cats(''@$'',upcase(fmtname))'; put 'else "&sysmacroname:UNHANDLED"'; put 'end'; put 'into: fmtlist separated by '' '''; put 'from &libds;'; put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)'; put '/* get a hash of the row */'; put '%local cvars nvars;'; put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP'; put 'DIG3SEP DATATYPE LANGUAGE;'; put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;'; put 'data &base_fmts/note2err;'; put 'set &base_fmts;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Ensure input table and base_formats have consistent lengths and types'; put '*/'; put 'data &inlibds/nonote2err;'; put 'length &delete_col $3 FMTROW 8 start end label $32767;'; put 'if 0 then set &base_fmts;'; put 'set &libds;'; put 'by type fmtname notsorted;'; put 'if &delete_col='''' then &delete_col=''No'';'; put 'fmtname=upcase(fmtname);'; put 'type=upcase(type);'; put 'if missing(type) then do;'; put 'if substr(fmtname,1,1)=''@'' then do;'; put 'if substr(fmtname,2,1)=''$'' then type=''J'';'; put 'else type=''I'';'; put 'end;'; put 'else do;'; put 'if substr(fmtname,1,1)=''$'' then type=''C'';'; put 'else type=''N'';'; put 'end;'; put 'end;'; put 'if type in (''N'',''I'') then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Identify new records'; put '*/'; put 'proc sql;'; put 'create table &outds_add(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'left join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtname is null'; put 'and upcase(a.&delete_col) ne "YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify modified records'; put '*/'; put 'create table &outds_mod (drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col) ne "YES"'; put 'and a.fmthash ne b.fmthash'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify deleted records'; put '*/'; put 'create table &outds_del(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col)="YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify fully deleted formats (where every record is removed)'; put '* These require to be explicitly deleted in proc format'; put '* del1 - identify _partial_ deletes'; put '* del2 - exclude these, and also formats that come with _additions_'; put '*/'; put 'create table &del1 as'; put 'select a.*'; put 'from &base_fmts a'; put 'left join &outds_del b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtrow is null;'; put 'create table &del2 as'; put 'select * from &outds_del'; put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)'; put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to load prep)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '/* new records plus base records that are not deleted or modified */'; put 'data &ds1;'; put 'merge &base_fmts(in=base)'; put '&outds_mod(in=mod)'; put '&outds_add(in=add)'; put '&outds_del(in=del);'; put 'if not del and not mod;'; put 'by type fmtname fmtrow;'; put 'run;'; put '/* add back the modified records */'; put 'data &stagedata;'; put 'set &ds1 &outds_mod;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put '%end;'; put '/* mp abort needs to run outside of conditional blocks */'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to actual load)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;'; put '%put There are no changes to load in &libcat!;'; put '%return;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* prevent parallel updates */'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT commencing format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* do the actual load */'; put 'proc format lib=&libcat cntlin=&stagedata;'; put 'run;'; put '/* apply any full deletes */'; put '%if %mf_nobs(&del2)>0 %then %do;'; put '%local delfmtlist;'; put 'proc sql noprint;'; put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')'; put 'when type=''C'' then cats(fmtname,''.FORMATC'')'; put 'when type=''J'' then cats(fmtname,''.INFMTC'')'; put 'when type=''I'' then cats(fmtname,''.INFMT'')'; put 'else cats(fmtname,''.BADENTRY!!!'') end'; put 'into: delfmtlist'; put 'separated by '' '''; put 'from &del2;'; put 'proc catalog catalog=&libcat;'; put 'delete &delfmtlist;'; put 'quit;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* unlock the table */'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT completed format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* track the changes */'; put '%if &auditlibds ne 0 %then %do;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%mp_storediffs(&libcat-FC'; put ',&base_fmts'; put ',TYPE FMTNAME FMTROW'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=&storediffs'; put ',mdebug=&mdebug'; put ')'; put 'proc append base=&auditlibds data=&storediffs;'; put 'run;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%end;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc after load)'; put ')'; put '%if &mdebug=0 %then %do;'; put 'proc datasets lib=work;'; put 'delete &prefix:;'; put 'run;'; put '%put &sysmacroname exit vars:;'; put '%put _local_;'; put '%end;'; put '%mend mp_loadformat;'; put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */'; put ',now= %sysfunc(datetime()) /* static processed timestamp */'; put ',etlsource= /* process from whence the data came */'; put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should'; put 'be appended into the target. */'; put ',LOADTARGET=NO /* set to yes to actually load the target */'; put ',CLOSE_VARS= /* provide close vars to override defaults */'; put ',dclib=NOTPROVIDED'; put ',mdebug=0'; put ',dc_dttmtfmt=%sysfunc(datetime())'; put ');'; put '%local lib ds nobs;'; put '/**'; put '* if a format catalog (suffix "-FC") we assume the catalog has already been'; put '* created by the calling program with a libds of work.fmtextract'; put '*/'; put '%let orig_lib=%upcase(%scan(&libds,1,.));'; put '%let orig_ds=%upcase(%scan(&libds,2,.));'; put '%let orig_libds=&libds;'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%let lib=WORK;'; put '%let ds=FMTEXTRACT;'; put '%let libds=&lib..&ds;'; put '%end;'; put '%else %do;'; put '%let lib=&orig_lib;'; put '%let ds=&orig_ds;'; put '%end;'; put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)'; put ',mac=&sysmacroname'; put ',msg=%str(dclib=NOTPROVIDED)'; put ')'; put '/* get table attributes */'; put '%let nobs=0;'; put 'data work.sumo_config;'; put 'set &mpelib..mpe_tables;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&orig_lib"'; put 'and dsn="&orig_ds";'; put 'call symputx(''LOADTYPE'',loadtype,''l'');'; put 'call symputx(''BUSKEY'',buskey,''l'');'; put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');'; put 'call symputx(''VAR_TXTO'',var_txto,''l'');'; put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');'; put 'call symputx(''VAR_BUSTO'',var_busto,''l'');'; put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');'; put '%if %length(&CLOSE_VARS)=0 %then %do;'; put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');'; put '%end;'; put 'call symputx(''nobs'',_n_,''l'');'; put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";'; put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');'; put 'put (_all_)(=);'; put 'run;'; put '/* check if table is actually configured to load */'; put '%if &nobs ne 1 %then %do;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="%mf_getuser()"'; put ',STATUS=''FAILED (BAD DS)'''; put ',CSV_DIR=symget(''ETLSOURCE'')'; put ',PROCESSED_DTTM=&now;'; put '%end;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Table not registered in &mpelib..mpe_tables)'; put ')'; put '%mp_abort(iftrue= (&nobs>1)'; put ',mac=&sysmacroname'; put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)'; put ')'; put '%if &LOADTYPE=TXTEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=&ETLSOURCE'; put ',LOADTYPE=&loadtype'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=REPLACE %then %do;'; put '%if &LOADTARGET=YES %then %do;'; put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put 'data WORK.&STAGING_DS;'; put 'set WORK.&STAGING_DS;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put '&VAR_PROCESSED = &now;'; put '%end;'; put 'drop _____DELETE__THIS__RECORD_____;'; put 'run;'; put 'proc sql; delete * from &libds;'; put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;'; put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)'; put '%end;'; put '%else %do;'; put '/* is full replace so treat all staged records as new in diff screen */'; put 'data work.outds_mod work.outds_add ;'; put 'set work.&staging_ds;'; put 'output work.outds_add;'; put 'run;'; put '/* previous table will be considered fully deleted */'; put 'data work.outds_del;'; put 'set &lib..&ds;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to='; put ',tech_from= ,tech_to = /* explicitly empty*/'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=UPDATE'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=FORMAT_CAT %then %do;'; put '/**'; put '* run mp_formatload'; put '* inputs:'; put '* - LOADTARGET'; put '* - CATALOG'; put '* - STAGEDATA'; put '* - LOADAUDIT'; put '* outputs:'; put '* work.outds_add'; put '* work.outds_del'; put '* work.outds_mod'; put '*/'; put '%mp_loadformat(&orig_libds'; put ',&staging_ds'; put ',loadtarget=&LOADTARGET'; put ',auditlibds=&AUDIT_LIBDS'; put ',locklibds=&dclib..mpe_lockanytable'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=outds_add'; put ',outds_del=outds_del'; put ',outds_mod=outds_mod'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %if &loadtype=BITEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=BITEMPORAL'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: LOADTYPE &LOADTYPE not supported;'; put '%let syscc=4;'; put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)'; put ')'; put '%mend mpe_targetloader;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro dc_cassave(libds, mdebug=0);'; put '%mend dc_cassave;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 dc_cassave.sas'; put '@li mf_existds.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getengine.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuniquelibref.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_runhook.sas'; put '@li mpe_targetloader.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '/* this could be a config setting if required */'; put '%let maxdiff=100;'; put '%mpeinit()'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''ACTION'',ACTION);'; put 'call symputx(''LOAD_REF'',TABLE);'; put '/* DIFFTIME is when the DIFF was generated on the frontend */'; put 'call symputx(''DIFFTIME'',DIFFTIME);'; put 'putlog (_all_)(=);'; put 'run;'; put '%global action is_err err_msg msg;'; put '%let is_err=0;'; put '%let user=%mf_getuser();'; put '%let sastime=%sysfunc(datetime());'; put 'data sastime;'; put 'dt_sastime=&sastime;'; put 'run;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */'; put '/* so we share much of the logic from the actual load process */'; put '%let isfmtcat=0;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit;'; put 'where TABLE_ID="&LOAD_REF";'; put '/* fetch mpe_submit data */'; put 'libds=cats(base_lib,''.'',base_ds);'; put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);'; put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);'; put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);'; put '/* other stuff that''s useful to do in data step */'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''libds'',libds);'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''isfmtcat'',1);'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* convert provided string DIFFTIME back to a numeric SAS datetime */'; put 'if "&action" ne "SHOW_DIFFS" then do;'; put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));'; put 'end;'; put 'length difftime $32;'; put 'DIFFTIME=put(&sastime,datetime19.2);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&isfmtcat=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: difftime orig_libds libds load_ref)'; put ')'; put '/* security checks */'; put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc Before entering postdata macro)'; put ')'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=&_program'; put ',msg=%str(&user not authorised to view approval screen for &orig_libds)'; put ')'; put '%macro quickmacro(inds,outds);'; put 'data &outds ;'; put '%if %length(&VAR_BUSFROM)>0 %then %do;'; put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;'; put '%end;'; put 'if 0 then set &emptybasetable;'; put 'set &inds;'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;'; put 'drop _____DELETE__THIS__RECORD_____;'; put '%end;'; put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put '%mend quickmacro;'; put '%macro postdata();'; put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)'; put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then'; put '%do;'; put 'data params; set approve1; run;'; put '%webout(OPEN)'; put '%webout(OBJ,PARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if &action=APPROVE_TABLE %then %do;'; put '/* check user is authorised to approve table */'; put '/* user could be an editor but not an approver */'; put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)'; put ',mac=&_program'; put ',msg=%str(&user may not APPROVE changes)'; put ')'; put '/* see if this user has already submitted an approval */'; put '%let prev_upload_check=1;'; put 'proc sql;'; put 'select count(*) into: prev_upload_check from &mpelib..mpe_review'; put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"'; put 'and REVIEW_STATUS_ID ne "SUBMITTED";'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%if &authcheck=0 or &prev_upload_check=1 %then %do;'; put '%put %str(WARN)ING: &=authcheck &=prev_upload_check;'; put 'data apPARAMS;'; put 'AUTHORISED=&authcheck;'; put 'PREV_UPLOAD_CHECK=&prev_upload_check;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '/* now check if table has been updated since DIFF screen shown */'; put '%local fmt_tm usernm last_load etlsource;'; put '%let last_load=0;'; put 'proc sql noprint;'; put 'select max(processed_dttm) format=16.2 into: last_load'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";'; put 'select processed_dttm format=datetime19., user_nm, etlsource'; put 'into: fmt_tm, :usernm, :etlsource'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"'; put 'and processed_dttm=&last_load;'; put '%put TIMECHECK: &last_load>&difftime;'; put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;'; put '%let is_err=1;'; put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource'; put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;'; put '%return;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc before logchange;'; put '%return;'; put '%end;'; put '/* upload about to commence so ensure logs */'; put 'options notes mprint source2;'; put '%local oldloc;'; put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;'; put '%else %let oldloc=%qsysfunc(getoption(LOG));'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put 'data _null_;'; put 'if _n_=1 then do;'; put 'length oldloc $1000;'; put 'oldloc=symget(''oldloc'');'; put 'putlog "****** redirected:" oldloc " *****";'; put 'end;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc after logchange;'; put '%return;'; put '%end;'; put '%end;'; put '/**'; put '* upload the actual table'; put '*/'; put '%local libref ds;'; put '%let libref=%scan(&orig_libds,1,.);'; put '%let ds=%scan(&orig_libds,2,.);'; put 'proc sql noprint;'; put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto'; put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO'; put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)'; put ',VAR_PROCESSED'; put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto'; put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO'; put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT'; put ',:VAR_PROCESSED'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&libref"'; put 'and dsn="&ds";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals orig_libds)'; put ')'; put '/* get dataset from approvals location (has same name as load_ref) */'; put '%let tmplib=%mf_getuniquelibref();'; put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";'; put 'data STAGING_DS;'; put 'set &tmplib..&LOAD_REF;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc before preapprove)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */'; put '%mpe_runhook(PRE_APPROVE_HOOK)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after preapprove)'; put ')'; put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'data apReqd;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apReqd);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering TARGETLOADER)'; put ')'; put '%mpe_targetloader(libds=&orig_libds'; put ',now= &sastime'; put ',etlsource=&LOAD_REF'; put ',STAGING_DS=STAGING_DS'; put ',dclib=&mpelib'; put '%if &action=APPROVE_TABLE %then %do;'; put ',LOADTARGET=YES'; put '%end;'; put '%else %do;'; put ',LOADTARGET=NO'; put '%end;'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;'; put '/* empty dataset! */'; put 'data out;'; put 'set STAGING_DS;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering SHOWDIFFS)'; put ')'; put '%if &action=SHOW_DIFFS %then %do;'; put '/**'; put '* Now prepare the SHOW DIFFS (approve) screen'; put '*/'; put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first'; put 'need to find out what version TIME to query it for.. */'; put 'proc sql noprint;'; put 'select max(processed_dttm)-1 format=datetime19. into: tstamp'; put 'from &mpelib..mpe_dataloads'; put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";'; put 'quit;'; put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);'; put '/**'; put '* now create the DIFFS dataset'; put '* If using a database, then utilise pass through!'; put '* Create a temporary table inside the database for joins..'; put '*/'; put 'options mprint;'; put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));'; put '%put &libds engine type = &engine_type;'; put '%local inner_table ;'; put '%if &engine_type=OLEDB %then %do;'; put '/* generate a unique ID for the temporary table */'; put 'data _null_;'; put 'call symputx(''UNIQUE_REF'''; put ',cats(round(datetime(),1)'; put ',''_'''; put ',round(ranuni(0)*100000,1)'; put ')'; put ',''l'''; put ');'; put 'run;'; put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;'; put 'proc sql;'; put 'create table &inner_table as'; put 'select * from work.outds_mod;'; put '%end;'; put '%else %let inner_table=work.outds_mod;'; put 'proc sql;'; put 'create view work.originals2 as'; put 'select b.*'; put 'from &inner_table a'; put 'inner join &libds'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '(where=("&tstamp"dt < &VAR_TXTO))'; put '%end;'; put 'b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&buskey));'; put '%let idx_val=%scan(&buskey,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'create view bitemp5c_updates2 as'; put 'select * from work.outds_mod'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'options varlenchk=nowarn; /* for small numerics (<8) */'; put '%quickmacro(work.outds_del,deleted)'; put '%quickmacro(work.outds_add,new)'; put '%quickmacro(bitemp5c_updates2,updates)'; put '%quickmacro(originals2,originals)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc in quickmacro)'; put ')'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=work.updates'; put 'out=cols (keep=name type length varnum format);'; put 'run;'; put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;'; put 'data cols; set cols; name=upcase(name);run;'; put '%let tempDIFFS_CSV=tempDiffs_%trim('; put '%sysfunc(datetime(),flatdate.)).csv;'; put '/**'; put '* Store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '*/'; put 'data TEMPDIFFS (compress=no) /* for realistic file size */;'; put 'length _____status $10;'; put 'set work.deleted (in=_____del)'; put 'work.new(in=_____new)'; put 'work.updates (in=_____upd)'; put 'work.originals2 (in=_____orig);'; put 'if _____del then _____status=''DELETED '';'; put 'else if _____new then _____status=''NEW'';'; put 'else if _____upd then _____status=''UPDATED'';'; put 'else if _____orig then _____status=''ORIGINAL'';'; put 'run;'; put 'proc export data=TEMPDIFFS dbms=csv replace'; put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;'; put 'run;'; put 'proc sql noprint;'; put 'select filesize format=sizekmg10.1, filesize as filesize_raw'; put 'into: filesize,:filesize_raw'; put 'from dictionary.tables'; put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';'; put 'data params;'; put 'set approve1;'; put 'DIFFS_CSV="&tempDIFFS_CSV";'; put 'FILESIZE="&filesize";'; put 'FILESIZE_RAW=&filesize_raw;'; put 'if %mf_nobs(work.originals)>&maxdiff'; put 'or %mf_nobs(work.new)>&maxdiff'; put 'or %mf_nobs(work.deleted)>&maxdiff'; put 'or %mf_nobs(work.updates)>&maxdiff'; put 'then TRUNCATED="YES";'; put 'else TRUNCATED="NO";'; put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);'; put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);'; put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);'; put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);'; put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;'; put 'ISAPPROVER=''YES'';'; put '%end;'; put '%else %do;'; put 'ISAPPROVER=''NO'';'; put '%end;'; put 'run;'; put '/*'; put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.'; put '* To ensure consistency in the DIFF screen, we should apply the same formats'; put '* to the base table. Limit rows at the same time.'; put '*/'; put 'data work.originals;'; put 'if 0 then set deleted new updates;'; put 'set work.originals;'; put 'if _n_>&maxdiff then stop;'; put 'run;'; put '/* get additional submits against the same base table */'; put 'proc sort data=&mpelib..mpe_submit(where=('; put 'submit_status_cd=''SUBMITTED'''; put 'and cats(base_lib,''.'',base_ds)="&orig_libds"'; put 'and table_id ne "&LOAD_REF"'; put ')) out=submits;'; put 'by descending submitted_on_dttm;'; put 'run;'; put '/* filter last 10 */'; put 'data submits;'; put 'set submits;'; put 'if _n_>10 then stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,params)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,submits)'; put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)'; put '/* need same for formatted view */'; put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)'; put '%webout(CLOSE)'; put '%if &engine_type=OLEDB %then %do;'; put 'proc sql; /* needs to be dropped AFTER view execution */'; put 'drop table &inner_table;'; put '%end;'; put '%return;'; put '%end;'; put '%if &action=APPROVE_TABLE %then %do;'; put '%approve:'; put '/**'; put '* store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '* for REPLACE loads, temp tables not made, so make them'; put '*/'; put '%if &LOADTYPE=REPLACE %then %do;'; put 'data work.outds_add; run;'; put 'data work.outds_mod; run;'; put 'data work.outds_del; run;'; put '%end;'; put 'libname approve "&mpelocapprovals/&LOAD_REF";'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'data approve.ActualDiffs;'; put 'length _____STATUS_____ $10;'; put 'if 0 then set &emptybasetable;'; put 'set work.outds_del (in=_____del)'; put 'work.outds_add (in=_____new)'; put 'work.outds_mod (in=_____upd);'; put 'if _____del then _____STATUS_____=''DELETED'';'; put 'else if _____new then _____STATUS_____=''NEW'';'; put 'else if _____upd then _____STATUS_____=''UPDATED'';'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put 'proc export data=approve.ActualDiffs'; put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control table to show table as approved */'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''APPROVED'','; put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* save table to disk (if viya + cas) */'; put '%dc_cassave(&libds)'; put '/* run post-approve hook */'; put '%mpe_runhook(POST_APPROVE_HOOK)'; put 'data apPARAMS;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'DIFFTIME="&difftime";'; put 'if &syscc=0 then RESPONSE=''SUCCESS!'';'; put 'else response="SYSCC=&syscc.";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program 582'; put ',msg=%superq(msg)'; put ')'; put '%mpe_alerts(alert_event=APPROVED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&LOAD_REF'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mend postdata;'; put '%postdata()'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort(iftrue= (&is_err=1)'; put ',mac=&_program'; put ',msg=%superq(err_msg)'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_casload(libds, mdebug=0);'; put '%mend dc_casload;'; put '%macro mm_getgroupmembers('; put 'group /* metadata group for which to bring back members */'; put ',outds=work.mm_getgroupmembers /* output dataset to contain the results */'; put ',emails=NO /* set to yes to bring back emails also */'; put ',id=NO /* set to yes if passing an ID rather than group name */'; put ')/*/STORE SOURCE*/;'; put 'data &outds ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'euri email length=$64'; put 'GroupDesc length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp uriMem rcGrp rcMem rc i j arc ;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put '%if &id=NO %then %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Name=''&group''",i,uriGrp);'; put '%end;'; put '%else %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Id=''&group''",i,uriGrp);'; put '%end;'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName, MemberType, email);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'if membertype=''User'' and "&emails"=''YES'' then do;'; put 'if metadata_getnasn(uriMem,"EmailAddresses",1,euri)>0 then do;'; put 'arc=metadata_getattr(euri,"Address",email);'; put 'end;'; put 'end;'; put 'output;'; put 'j+1;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_getgroupmembers;'; put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);'; put '%mm_getgroupmembers(&group,outds=&outds)'; put '%mend dc_getgroupmembers;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_length(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_length)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_length(var);'; put 'if var=. then len=0;'; put 'else if missing(var) or trunc(var,3)=var then len=3;'; put 'else if trunc(var,4)=var then len=4;'; put 'else if trunc(var,5)=var then len=5;'; put 'else if trunc(var,6)=var then len=6;'; put 'else if trunc(var,7)=var then len=7;'; put 'else len=8;'; put 'return(len);'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_length;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mp_getmaxvarlengths('; put 'libds'; put ',num2char=NO'; put ',outds=work.mp_getmaxvarlengths'; put ')/*/STORE SOURCE*/;'; put '%local vars prefix x var fmt srcds;'; put '%let vars=%mf_getvarlist(libds=&libds);'; put '%let prefix=%substr(%mf_getuniquename(),1,25);'; put '%let num2char=%upcase(&num2char);'; put '%if &num2char=NO %then %do;'; put '/* compile length function for numeric fields */'; put '%mcf_length(wrap=YES, insert_cmplib=YES)'; put '%end;'; put '%if &num2char=NO'; put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")'; put 'and %mf_getvarcount(&libds,typefilter=N) gt 0'; put '%then %do;'; put '/* custom functions not supported in summary operations */'; put '%let srcds=%mf_getuniquename();'; put 'data &srcds/view=&srcds;'; put 'set &libds;'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if %mf_getvartype(&libds,&var)=N %then %do;'; put '&prefix.&x=mcf_length(&var);'; put '%end;'; put '%end;'; put 'run;'; put '%end;'; put '%else %let srcds=&libds;'; put 'proc sql;'; put 'create table &outds (rename=('; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '&prefix.&x=%scan(&vars,&x)'; put '%end;'; put '))'; put 'as select'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if &x>1 %then ,;'; put '%if %mf_getvartype(&libds,&var)=C %then %do;'; put 'max(lengthn(&var)) as &prefix.&x'; put '%end;'; put '%else %if &num2char=YES %then %do;'; put '%let fmt=%mf_getvarformat(&libds,&var);'; put '%put fmt=&fmt;'; put '%if %str(&fmt)=%str() %then %do;'; put 'max(lengthn(cats(&var))) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(lengthn(put(&var,&fmt))) as &prefix.&x'; put '%end;'; put '%end;'; put '%else %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;'; put 'max(&prefix.&x) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(mcf_length(&var)) as &prefix.&x'; put '%end;'; put '%end;'; put '%end;'; put 'from &srcds;'; put 'proc transpose data=&outds'; put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));'; put 'run;'; put '%mend mp_getmaxvarlengths;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdata.sas'; put '@brief Returns a dataset to the editor front end'; put '@details'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|'; put '|---|---|'; put '|DC258467.MPE_X_TEST|-1|'; put '

Service Outputs

'; put '
sasdata
'; put '
sasparams
'; put 'Contains info on the request. One row is returned.'; put '@li CLS_FLG - set to 0 if there are no CLS rules (everything editable)'; put 'else set to 1 (CLS rules exist)'; put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0'; put '
approvers
'; put '
dqrules
'; put '
dqdata
'; put '
cols
'; put 'Contains column level attributes.'; put '@li NAME - column name'; put '@li VARNUM - var position. https://core.sasjs.io/mp__getcols_8sas.html'; put '@li LABEL - var label. https://core.sasjs.io/mp__getcols_8sas.html'; put '@li FMTNAME - derived format. https://core.sasjs.io/mp__getcols_8sas.html'; put '@li DDTYPE - derived dropdown. https://core.sasjs.io/mp__getcols_8sas.html'; put '@li CLS_RULE - values include:'; put '- EDIT - the column is editable'; put '- READ - the column should be readonly'; put '- HIDE - the column should be hidden'; put '@li memlabel'; put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label'; put '@li longdesc - from MPE_DATADICTIONARY'; put '
maxvarlengths
'; put '
xl_rules
'; put '
query
'; put '
versions
'; put 'history of DC versions for this particular table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_casload.sas'; put '@li dc_getgroupmembers.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getvarlist.sas'; put '@li mf_existds.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getmaxvarlengths.sas'; put '@li mp_validatecol.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getlabels.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@li mpe_runhook.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length filter_rk 8;'; put 'set work.SASCONTROLTABLE;'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put 'call symputx(''orig_libds'',upcase(libds));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds filter_rk)'; put ')'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further calls will return col metadata and actual data'; put '*/'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '%dc_casload(&libds)'; put '/**'; put '* First check user has access permission to edit the table'; put '*/'; put '%put checking access;'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)'; put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)'; put ',mac=mpestp_getdata.sas'; put ',msg=&user is not authorised to edit &orig_libds %trim('; put ')in the &mpelib..MPE_SECURITY table'; put ')'; put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)'; put ',mac=mpestp_getdata.sas'; put ',msg=dataset &libds does not exist!!'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at line 60 )'; put ')'; put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype'; put 'sortpk;'; put '%put getting table attributes;'; put 'proc sql noprint;'; put 'select upcase(loadtype)'; put ',var_txfrom,var_txto'; put ',var_busfrom,var_busto'; put ',var_processed,rk_underlying,buskey'; put ',coalesce(rk_underlying,buskey)'; put ',pre_edit_hook'; put ',case when missing(rk_underlying) then buskey else rk_underlying end'; put 'into: loadtype,:var_txfrom,:var_txto'; put ',:var_busfrom ,:var_busto'; put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt TX_TO'; put 'and upcase(dsn)="%scan(&orig_libds,2,.)"'; put 'and upcase(libref)="%scan(&orig_libds,1,.)";'; put '%put preparing filter query:;'; put '%mpe_filtermaster(EDIT,&orig_libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%macro mpestp_getdata();'; put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;'; put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;'; put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;'; put '%put NOTE-;%put NOTE-;'; put '%global DC_MAXOBS_WEBEDIT;'; put '%let DC_MAXOBS_WEBEDIT=500;'; put '%end;'; put '/* for tables which use RKs/SKs then we just expose the business key to'; put 'users - this lets uploads be sent to multiple environments (with'; put 'potentially different RK/SK values for the same business key).'; put 'Note that the config table has the RK column in the buskey field in'; put 'this scenario. */'; put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;'; put '%else %let drop_rk=;'; put '/* always remove the PROCESSED_DTTM column, if it exists */'; put '%if %length(&var_processed)=0 %then %do;'; put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then'; put '%let var_processed=PROCESSED_DTTM;'; put '%end;'; put '/**'; put '* Now get the slice of the actual table'; put '*/'; put 'options obs=10000;'; put '%if &loadtype=BITEMPORAL %then %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'proc sort data=out;'; put 'by &pk &var_busfrom;'; put 'run;'; put 'data out;'; put 'set out;'; put 'by &pk &var_busfrom;'; put 'if last.%scan(&pk,-1);'; put 'run;'; put '%end;'; put '%else %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%end;'; put 'options obs=max;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue with filtering (line 165) )'; put ')'; put 'options obs=&DC_MAXOBS_WEBEDIT;'; put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));'; put 'proc sort data=work.out; by &sortPK; run;'; put 'options obs=max;'; put '%mpe_runhook(PRE_EDIT_HOOK)'; put '%let obscnt=%mf_getattrn(work.out,NLOBS);'; put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)'; put ',mac=&_program'; put ',msg=Table is too big (&obscnt rows) - please filter and try again!'; put ')'; put '/* order delete var and pk fields at start of table */'; put '%let sourcevars=%mf_wordsInStr1ButNotStr2('; put 'Str1=%mf_getvarlist(work.out)'; put ',Str2= _____DELETE__THIS__RECORD_____ &pk'; put ');'; put '%put sourcevars=&sourcevars;'; put 'data outdata;'; put '/* delete & pk fields come first */'; put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';'; put '/* keep remaining variable order */'; put '%if %length(&sourcevars)>0 %then %do;'; put 'attrib &sourcevars label='''';'; put '%end;'; put '_____DELETE__THIS__RECORD_____="No ";'; put '%if %mf_nobs(work.out)=0 %then %do;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put '%end;'; put 'set work.out ;'; put 'run;'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=outdata'; put 'out=vars(keep=name type length varnum format: label);'; put 'run;'; put 'proc sort;'; put 'by varnum;'; put 'run;'; put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");'; put 'if type2=2 or type2=6 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''num'';'; put 'end;'; put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))'; put 'then PK=''YES'';'; put 'length ctrlOptions $500;'; put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';'; put 'else ctrlOptions='''';'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n'; put '%superq(syserrortext)'; put ')'; put ')'; put '%global jsdttmvars jsdtvars jstmvars;'; put 'data _null_;'; put 'set vars3 end=last;'; put 'if _n_>1 then comma='','';'; put 'length coltype $500.;'; put 'format=upcase(format);'; put 'coltype=cats(comma,''{"data":"'',name,''"'');'; put 'if ctrlOptions ne '''' then'; put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");'; put 'else if type=''num'' then do;'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then do;'; put 'colType=cats(coltype'; put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat datetimes in javascript format */'; put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then do;'; put '/* see bottom of file for more date formats!! */'; put '/* also when updating, update stagedata.sas and mp_getcols.sas'; put 'and mpe_loader.sas */'; put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"'''; put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/'; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript dates */'; put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''TIME'' or format=:''HHMM'' then do;'; put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript times */'; put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);'; put 'end;'; put 'else do;'; put '/* is standard numeric but need to ascertain precision */'; put 'retain base ''000000000000000000'';'; put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));'; put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');'; put 'end;'; put 'end;'; put 'else colType=cats(coltype,''}'');'; put 'length concatcoltype $32767;'; put 'retain concatcoltype;'; put 'concatcoltype=cats(concatcoltype,coltype);'; put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s'''; put '(datatype=datetime);'; put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);'; put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);'; put 'RUN;'; put '/* before we send the data, need to rebuild all date & datetime vars as char*/'; put '%let finalvars=%mf_getvarlist(work.outdata);'; put 'data sasdata;'; put '/* set formats & col order ahead of rename+import */'; put 'informat &finalvars ;'; put '/* read dataset and rename date / datetime vars as necessary */'; put 'set outdata'; put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;'; put '(rename=('; put '%local dtvarnum dtvar tmvar;'; put '/* temp datetime vars end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);'; put '&dtvar=_____&dtvarnum._____'; put '%end;'; put '/* temp date vars do not end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan( &jsdtvars,&dtvarnum);'; put '&dtvar=_____&dtvarnum'; put '%end;'; put '/* temp time vars end in ___tm */'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan( &jstmvars,&tmvarnum);'; put '&tmvar=_____&tmvarnum.___tm'; put '%end;'; put '))'; put '%end;'; put ';'; put '%if %length(&jsdttmvars)>0 %then %do ;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum._____;'; put '%end;'; put '%end;'; put '%if %length(&jsdtvars)>0 %then %do;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan(&jsdtvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum;'; put '%end;'; put '%end;'; put '%if %length(&jstmvars)>0 %then %do;'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan(&jstmvars,&tmvarnum);'; put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));'; put 'if &tmvar="ERROR" then call missing(&tmvar);'; put 'drop _____&tmvarnum.___tm;'; put '%end;'; put '%end;'; put 'output;'; put 'run;'; put '/* get the relevant approvers for the drop down */'; put '%put getting approvers;'; put '%local sas_groups sas_i sas_group;'; put 'proc sql noprint;'; put 'select distinct sas_Group into: sas_groups separated by "|"'; put 'from &mpelib..mpe_security'; put 'where libref="%scan(&orig_libds,1,.)"'; put 'and dsn="%scan(&orig_libds,2,.)"'; put 'and access_level=''APPROVE'''; put 'and &dc_dttmtfmt. lt TX_TO;'; put '%if %length(&sas_groups)=0 %then %do;'; put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)'; put '%end;'; put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));'; put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));'; put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)'; put 'proc append base=work.access1 data=work.temp&sas_i;run;'; put '%end;'; put '%mend mpestp_getdata;'; put '%mpestp_getdata()'; put '%mp_abort(mode=INCLUDE)'; put '/* extract column level security rules */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata'; put ',mode=EDIT'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.sasdata1'; put ',outmeta=work.cls_rules'; put ')'; put '/* get labels */'; put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc extracting spec info)'; put ')'; put '/* extract col info */'; put '%mp_getcols(&libds, outds=cols1)'; put '/* join with cls rules */'; put 'proc sql;'; put 'create table work.cols as'; put 'select a.NAME'; put ',a.VARNUM'; put ',a.LABEL'; put ',a.FMTNAME'; put ',a.DDTYPE'; put ',case b.cls_hide'; put 'when 1 then ''HIDE'''; put 'when 0 then ''EDIT'''; put 'else ''READ'' end as CLS_RULE'; put ',c.memlabel'; put ',c.desc'; put ',c.longdesc'; put 'from work.cols1 a'; put 'left join work.cls_rules b'; put 'on a.NAME=b.CLS_VARIABLE_NM'; put 'left join work.spec c'; put 'on a.NAME=c.NAME;'; put 'proc sql;'; put 'create table approvers as select distinct membername as personname'; put ',membername as email, membername as userid'; put 'from work.access1;'; put '/*'; put 'create table access3 as select b.userid,b.email'; put 'from access2 a'; put ',support.users b'; put 'where a.personname=b.userid'; put 'and a.personname ne "%mf_getuser()"'; put 'and %sysfunc(datetime()) lt b.tx_to_dttm'; put 'order by 1;'; put '*/'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%put params;'; put '%let ismap=0;'; put 'proc sql noprint;'; put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;'; put 'data sasparams;'; put 'length colHeaders $20000 filter_text $32767;'; put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));'; put 'pkCnt=countw("&pk");'; put 'pk="&pk";'; put 'dtvars=compbl("&jsdtvars");'; put 'dttmvars=compbl("&jsdttmvars");'; put 'tmvars=compbl("&jstmvars");'; put 'length coltype $32000;'; put 'coltype=symget(''coltype'');'; put 'loadtype=symget(''loadtype'');'; put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;'; put 'else rk_flag=0;'; put 'filter_text=symget(''filter_text'');'; put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;'; put 'else cls_flag=1;'; put 'put (_all_)(=);'; put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;'; put 'else ismap=0;'; put 'run;'; put '/* Extract validation DQ Rules */'; put 'proc sort data=&mpelib..mpe_validations'; put '(where=(&dc_dttmtfmt. le TX_TO'; put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"'; put 'and rule_active=1))'; put 'out=dqrules (keep=base_col rule_type rule_value);'; put 'by base_col rule_type rule_value;'; put 'run;'; put '/* merge with NOTNULL constraints in the physical table */'; put 'proc sql;'; put 'create table _data_ as'; put 'select * from dqrules'; put 'union'; put 'select upcase(name) as base_col'; put ',''NOTNULL'' as rule_type'; put ','''' as rule_value'; put 'from dictionary.columns'; put 'where upcase(libname)="%scan(&orig_libds,1,.)"'; put 'and upcase(memname)="%scan(&orig_libds,2,.)"'; put 'and upcase(name) in (select name from vars3)'; put 'and notnull=''yes'''; put 'order by 1,2,3;'; put 'data dqrules;'; put 'set &syslast;'; put 'by base_col rule_type rule_value;'; put 'if last.rule_type;'; put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then'; put 'do;'; put 'retain x 0; x+1;'; put 'call symputx(cats(''source'',x),rule_value);'; put '%let sourcecnt=0;'; put 'call symputx(''sourcecnt'',x);'; put 'call symputx(cats(''base_col'',x),base_col);'; put 'end;'; put 'run;'; put 'proc sql;'; put 'create table dqdata as'; put 'select distinct base_column as base_col length=32'; put ',upcase(base_column) as rule_value length=74 /* deprecated */'; put ',selectbox_value as rule_data length=1000'; put ',selectbox_order'; put 'from &mpelib..mpe_selectbox'; put 'where &dc_dttmtfmt. lt ver_to_dttm'; put 'and select_lib="%scan(&orig_libds,1,.)"'; put 'and select_ds="%scan(&orig_libds,2,.)";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during DQ rule validation)'; put ')'; put '/* extract selectbox data */'; put '%macro dq_selects();'; put '%local x source lib ds col;'; put '%do x=1 %to &sourcecnt;'; put '%let source=&&source&x;'; put '%let lib=%scan(&source,1,.);'; put '%let ds=%scan(&source,2,.);'; put '%let col=%scan(&source,3,.);'; put '%put &=source;'; put '%put &=lib;'; put '%dc_assignlib(READ,&lib)'; put 'proc sql;'; put 'create table dqdata&x as'; put 'select distinct "&&base_col&x" as base_col length=32'; put ',"&source" as rule_value length=74'; put ',cats(&col) as rule_data length=1000'; put ',&col as tmp_order'; put 'from &lib..&ds'; put 'order by tmp_order;'; put '/* ensure both numerics and char vals are ordered correctly */'; put 'data work.dqdata&x (drop=tmp_order);'; put 'set work.dqdata&x;'; put 'selectbox_order=_n_;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)'; put ')'; put 'proc append base=dqdata data=dqdata&x;run;'; put 'proc sql; drop table dqdata&x;'; put '%end;'; put '%mend dq_selects;'; put '%dq_selects()'; put 'proc sort data=dqdata;'; put '/* order by selectbox_order then the value */'; put 'by base_col selectbox_order rule_data;'; put 'run;'; put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)'; put 'data maxvarlengths;'; put 'set maxvarlengths;'; put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;'; put 'run;'; put 'data xl_rules;'; put 'set &mpelib..mpe_excel_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";'; put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";'; put 'where also xl_active=1;'; put 'keep xl_column xl_rule;'; put 'run;'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '/* send to the client */'; put '%webout(OPEN)'; put '%webout(OBJ,approvers)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dqdata,missing=STRING)'; put '%webout(OBJ,dqrules)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,maxvarlengths)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,xl_rules)'; put '%webout(CLOSE)'; put '/*'; put '$N8601Bw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'DATEw'; put 'DATEAMPMw'; put 'DATETIMEw'; put 'DAYw'; put 'DDMMYYw'; put 'DDMMYYxw'; put 'DOWNAMEw'; put 'DTDATEw'; put 'DTMONYYw'; put 'DTWKDATXw'; put 'DTYEARw'; put 'DTYYQCw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put 'HHMMw'; put 'HOURw'; put 'JULDAYw'; put 'JULIANw'; put 'MMDDYYw'; put 'MMDDYYxw'; put 'MMSSw'; put 'MMYYw'; put 'MMYYxw'; put 'MONNAMEw'; put 'MONTHw'; put 'MONYYw'; put 'PDJULGw'; put 'PDJULIw'; put 'QTRw'; put 'QTRRw'; put 'TIMEw'; put 'TIMEAMPMw'; put 'TODw'; put 'WEEKDATEw'; put 'WEEKDATXw'; put 'WEEKDAYw'; put 'WEEKUw'; put 'WEEKVw'; put 'WEEKWw'; put 'WORDDATEw'; put 'WORDDATXw'; put 'YEARw'; put 'YYMMw'; put 'YYMMxw'; put 'YYMMDDw'; put 'YYMMDDxw'; put 'YYMONw'; put 'YYQw'; put 'YYQxw'; put 'YYQRw'; put 'YYQRxw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put '*/'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getsubmits.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put 'proc sql noprint;'; put 'create table work.fromsas (rename=(SUBMITTED_ON=SUBMITTED_ON_DTTM)) as'; put 'select table_id'; put ',cats(base_lib,''.'',base_ds) as base_table'; put ',input_vars'; put ',input_obs'; put ',submitted_by_nm'; put ',submitted_reason_txt'; put ',''DEPRECATED'' as approve_group'; put ',submit_status_cd as review_status_id'; put ',reviewed_by_nm'; put ',reviewed_on_dttm'; put ',cats(put(SUBMITTED_ON_DTTM,yymmddhhmmss.)) as SUBMITTED_ON'; put 'from &mpelib..mpe_submit'; put 'where submitted_by_nm="%mf_getuser()" and submit_status_cd=''SUBMITTED'''; put 'order by submitted_on_dttm desc;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getxlmaps; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getxlmaps.sas'; put '@brief Returns a list of rules and other info for a specific xlmap_id'; put '

Service Inputs

'; put '
getxlmaps_in
'; put '|XLMAP_ID|'; put '|---|'; put '|Sample|'; put '

Service Outputs

'; put '
xlmaprules
'; put 'Filtered output of the dc.MPE_XLMAP_RULES table'; put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|'; put '|---|---|---|---|---|'; put '|Sample|Range1|Sheet1|ABSOLUTE A1| |'; put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|'; put '
xlmapinfo
'; put 'Extra info for a map id'; put '|TARGET_DS|'; put '|---|'; put '|DCXXX.MPE_XLMAP_DATA|'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data _null_;'; put 'set work.getxlmaps_in;'; put 'putlog (_all_)(=);'; put 'call symputx(''xlmap_id'',xlmap_id);'; put 'run;'; put 'proc sql noprint;'; put 'create table work.xlmaprules as'; put 'select xlmap_id'; put ',XLMAP_RANGE_ID'; put ',XLMAP_SHEET'; put ',XLMAP_START'; put ',XLMAP_FINISH'; put 'from &mpelib..MPE_XLMAP_RULES'; put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id"'; put 'order by xlmap_sheet, xlmap_range_id;'; put '%global target_ds;'; put 'select XLMAP_TARGETLIBDS into: target_ds'; put 'from &mpelib..MPE_XLMAP_INFO'; put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'data work.xlmapinfo;'; put 'target_ds=coalescec("&target_ds","&mpelib..MPE_XLMAP_DATA");'; put 'output;'; put 'stop;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,xlmaprules)'; put '%webout(OBJ,xlmapinfo)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);'; put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;'; put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;'; put '%return;'; put '%end;'; put '/* presence of a period(.) indicates a physical location */'; put '%if %index(&in,.) %then %let in="&in";'; put '%if %index(&out,.) %then %let out="&out";'; put '/**'; put '* convert all cr and crlf within quotes to lf'; put '* convert all other cr or lf to crlf'; put '*/'; put 'data _null_;'; put 'infile &in recfm=n ;'; put 'file &out recfm=n;'; put 'retain isq iscrlf 0 qchar &qchar;'; put 'input inchar $char1. ;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'if isq then do;'; put '/* inside a quote change cr and crlf to lf */'; put 'if inchar=''0D''x then do;'; put 'put ''0A''x;'; put 'input inchar $char1.;'; put 'if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else put inchar $char1.;'; put 'end;'; put 'else do;'; put '/* outside a quote, change cr and lf to crlf */'; put 'if inchar=''0D''x then do;'; put 'crblank:'; put 'put ''0D0A''x;'; put 'input inchar $char1.;'; put 'if inchar=''0D''x then do;'; put '/* multiple CR indicates CR formatted file with blank lines */'; put 'goto crblank;'; put 'end;'; put 'else if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else if inchar=''0A''x then put ''0D0A''x;'; put 'else put inchar $char1.;'; put 'end;'; put 'run;'; put '%mend mp_cleancsv;'; put '/** @endcond */'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file loadfile.sas'; put '@brief Loads a file'; put '@details'; put '

SAS Macros

'; put '@li mddl_sas_cntlout.sas'; put '@li mp_abort.sas'; put '@li mf_getplatform.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_mkdir.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mpe_getgroups.sas'; put '@li mp_lockfilecheck.sas'; put '@li mpe_loader.sas'; put '@li mp_cleancsv.sas'; put '@li mp_binarycopy.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table dlm;'; put '%mpeinit(fetch=NO)'; put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2'; put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;'; put '%macro load();'; put '%if %mf_getplatform()=SASVIYA %then %do;'; put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;'; put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));'; put '%if "&_webin_fileuri1" ne "" %then %do;'; put '%put &=_webin_fileuri1;'; put 'filename sjfref1 filesrvc "&_webin_fileuri1";'; put '%let _WEBIN_FILEREF1=sjfref1;'; put '%end;'; put '%if "&_webin_fileuri2" ne "" %then %do;'; put '%put &=_webin_fileuri2;'; put 'filename sjfref2 filesrvc "&_webin_fileuri2";'; put '%let _WEBIN_FILEREF2=sjfref2;'; put '%end;'; put '%end;'; put '%mend load;'; put '%load()'; put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));'; put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));'; put '%let abort=0;'; put '/* we do not know if the excel file will be first or second fileref */'; put 'data _null_;'; put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));'; put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));'; put 'if ext1=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME1'');'; put 'csvref=symget(''_WEBIN_FILEREF1'');'; put 'xlsname=symget(''_WEBIN_FILENAME2'');'; put 'xlsref=symget(''_WEBIN_FILEREF2'');'; put 'end;'; put 'else if ext2=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME2'');'; put 'csvref=symget(''_WEBIN_FILEREF2'');'; put 'xlsname=symget(''_WEBIN_FILENAME1'');'; put 'xlsref=symget(''_WEBIN_FILEREF1'');'; put 'end;'; put 'else call symputx(''abort'',1);'; put 'call symputx(''csvname'',csvname);'; put 'call symputx(''csvref'',csvref);'; put 'call symputx(''xlsname'',xlsname);'; put 'call symputx(''xlsref'',coalescec(xlsref,''0''));'; put 'run;'; put '%mp_abort(iftrue= (&abort=1)'; put ',mac=&_program'; put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!'; put '(Comma separated with .csv extension))'; put ')'; put '%let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '%let table=%upcase(%trim(&table));'; put '/* load parameters */'; put 'data _null_;'; put 'libds=upcase(symget(''table''));'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''orig_lib'',scan(libds,1,''.''));'; put 'call symputx(''orig_ds'',scan(libds,2,''.''));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '/* check that the user has the requisite access */'; put '%mpe_getgroups(user=&user,outds=groups)'; put 'proc sql;'; put 'create table accesscheck as'; put 'select * from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select sas_group from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="EDIT"'; put 'and ('; put '(libref="&orig_lib" and dsn="&orig_ds")'; put 'or (libref="&orig_lib" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="&orig_ds")'; put '));'; put '%let nobs=;'; put 'select count(*) into: nobs from &syslast;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)'; put ')'; put '%dc_assignlib(WRITE,&orig_lib)'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=loadfile'; put ',msg=%str(Issue assigning library &orig_lib)'; put ')'; put '%global txfrom txto processed rk;'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where libref="&orig_lib" and dsn="&orig_ds";'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'call symputx(''processed'',var_processed);'; put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);'; put 'run;'; put '%mp_lockfilecheck(libds=&orig_libds)'; put 'data compare;'; put 'set &libds(drop=&txfrom &txto &processed &rk);'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 80)'; put ')'; put '/* get line terminator, assume it''s the first cr, lf, or crlf */'; put 'data _null_;'; put 'length text $32767 term $4;'; put 'call missing (of _all_);'; put 'fid=fopen("&csvref",''I'',32767,''b'');'; put 'rc=fread(fid);'; put 'rc2=fget(fid,text,32767);'; put 'cr=find(text,''0D''x );'; put 'lf=find(text,''0A''x );'; put 'crlf=find(text,''0D0A''x);'; put 'rc=fclose(fid);'; put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';'; put 'else term=''CR'';'; put 'call symputx(''termstr'',term);'; put 'run;'; put 'data _null_;'; put 'infile &csvref lrecl=32000 dsd termstr=&termstr;'; put 'input;'; put 'length incols_unsorted $32000 dlm $1;'; put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');'; put '/* dlm has length 1 so will be the first non alpha / digit char */'; put '/* expectation is that there will not be any crazy characters in first col! */'; put 'dlm=compress(incols_unsorted,''_ '',''ad'');'; put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');'; put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');'; put 'call symputx(''incols_unsorted'',incols_unsorted);'; put 'call symputx(''dlm'',dlm);'; put 'putlog incols_unsorted=;'; put 'putlog dlm=;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 99)'; put ')'; put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));'; put '%let missing_cols=%trim('; put '%mf_wordsInStr1ButNotStr2('; put 'Str1=&basecols'; put ',Str2=&incols_unsorted'; put '));'; put '%let msg='; put 'Expected cols: &basecols'; put '
Received cols: &incols_unsorted'; put '
Missing cols: &missing_cols'; put ';'; put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%superq(msg)'; put ')'; put '%let msg=0;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder and redirect the log */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* clean embedded line breaks and force CRLF line endings */'; put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue in mp_cleancsv)'; put ')'; put '%put; %put; %put log is being redirected;'; put '%let url=_program=%substr(&_program'; put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%put &url;'; put '%put;'; put '/* proc printto log="&dir/weblog.txt";run; */'; put 'libname approve "&dir";'; put 'options mprint;'; put '%put &=mperef;'; put '%put &=termstr;'; put '%put &=dlm;'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%quote(File upload: %superq(csvname))'; put ',dlm=%superq(dlm)'; put ',url=%superq(url)'; put ',termstr=CRLF'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename outref "&dir/BKP_&xlsname";'; put 'data _null_;'; put 'if "&xlsref" ne "0" then do;'; put 'rc=fcopy("&xlsref","outref");'; put 'end;'; put 'run;'; put '/**'; put '* if running 9.3 or older, delete step above and enable macro below'; put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)'; put '*/'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=restore; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &outresult=YES;'; put '%let &outreason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '%macro mp_applyformats(inds,errds=0'; put ')/*/STORE SOURCE*/;'; put '%local outds liblist i engine lib msg ;'; put '/**'; put '* Validations'; put '*/'; put 'proc sort data=&inds;'; put 'by lib ds var fmt;'; put 'run;'; put '%if &errds=0 %then %let outds=%mf_getuniquename(prefix=mp_applyformats);'; put '%else %let outds=&errds;'; put 'data &outds;'; put 'set &inds;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'length msg $128;'; put 'by lib ds var fmt;'; put 'if libref(lib) ne 0 then do;'; put 'msg=catx('' '',''libref'',lib,''is not assigned!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if exist(cats(lib,''.'',ds)) ne 1 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,''does not exist!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put '%mp_validatecol(fmt,FORMAT,is_fmt)'; put 'if is_fmt=0 then do;'; put 'msg=catx('' '',''format'',fmt,''on libds'',lib,''.'',ds,''.'',var,''is not valid!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if first.ds then do;'; put 'retain dsid;'; put 'dsid=open(cats(lib,''.'',ds));'; put 'if dsid=0 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,'' could not be opened!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if varnum(dsid,var)<1 then do;'; put 'msg=catx('' '',''Variable'',lib,''.'',ds,''.'',var,'' was not found!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'end;'; put 'end;'; put 'if last.ds then rc=close(dsid);'; put 'run;'; put 'proc sql noprint;'; put 'select distinct lib into: liblist separated by '' '' from &inds;'; put '%put &=liblist;'; put '%if %length(&liblist)>0 %then %do i=1 %to %sysfunc(countw(&liblist));'; put '%let lib=%scan(&liblist,1);'; put '%let engine=%mf_getengine(&lib);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put '%let msg=&lib has &engine engine - formats cannot be applied;'; put 'insert into &outds set lib="&lib",ds="_all_",var="_all", msg="&msg" ;'; put '%if &errds=0 %then %put %str(ERR)OR: &msg;'; put '%end;'; put '%end;'; put 'quit;'; put '%if %mf_nobs(&outds)>0 %then %return;'; put '/**'; put '* Validations complete - now apply the actual formats!'; put '*/'; put '%let fref=%mf_getuniquefileref();'; put 'data _null_;'; put 'set &inds;'; put 'by lib ds var fmt;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'file &fref;'; put 'if first.lib then put ''proc datasets nolist lib='' lib '';'';'; put 'if first.ds then put '' modify '' ds '';'';'; put 'put '' format '' var fmt '';'';'; put 'if last.ds then put '' run;'';'; put 'if last.lib then put ''quit;'';'; put 'run;'; put '%inc &fref/source2;'; put '%if &errds=0 %then %do;'; put 'proc sql;'; put 'drop table &outds;'; put '%end;'; put '%mend mp_applyformats;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '%macro 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_getfilesize(fpath=,libds=0,format=NO'; put ')/*/STORE SOURCE*/;'; put '%local rc fid fref bytes dsid lib vnum;'; put '%if &libds ne 0 %then %do;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put '%let dsid=%sysfunc(open('; put 'sashelp.vtable(where=(libname="&lib" and memname="%scan(&libds,-1,.)")'; put 'keep=libname memname filesize'; put ')'; put '));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,FILESIZE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let bytes=%sysfunc(getvarn(&dsid,&vnum));'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%else %put &sysmacroname: &libds could not be opened! %sysfunc(sysmsg());'; put '%end;'; put '%else %do;'; put '%let rc=%sysfunc(filename(fref,&fpath));'; put '%let fid=%sysfunc(fopen(&fref));'; put '%let bytes=%sysfunc(finfo(&fid,File Size (bytes)));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(fref));'; put '%end;'; put '%if &format=NO %then %do;'; put '&bytes'; put '%end;'; put '%else %do;'; put '%sysfunc(INPUTN(&bytes, best.),sizekmg.)'; put '%end;'; put '%mend mf_getfilesize ;'; 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 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_ds2squeeze('; put 'libds,'; put 'outds=work.mp_ds2squeeze,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg source;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %do;'; put '%let dbg=*;'; put '%let source=/source2;'; put '%end;'; put '%local optval ds fref startsize;'; put '%let ds=%mf_getuniquename();'; put '%let fref=%mf_getuniquefileref();'; put '%let startsize=%mf_getfilesize(libds=&libds,format=yes);'; put '%mp_getmaxvarlengths(&libds,outds=&ds)'; put 'data _null_;'; put 'set &ds end=last;'; put 'file &fref;'; put '/* grab the types */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&libds",''is'');'; put 'if dsid le 0 then do;'; put 'msg=sysmsg();'; put 'put msg=;'; put 'stop;'; put 'end;'; put 'type=vartype(dsid,varnum(dsid, name));'; put 'if last then rc=close(dsid);'; put '/* write out the length statement */'; put 'if _n_=1 then put ''length '';'; put 'length len $6;'; put 'if type=''C'' then do;'; put 'if maxlen=0 then len=''$1'';'; put 'else len=cats(''$'',maxlen);'; put 'end;'; put 'else do;'; put 'if maxlen=0 then len=''3'';'; put 'else len=cats(maxlen);'; put 'end;'; put 'put '' '' name '' '' len;'; put 'if last then 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 &outds;'; put '%inc &fref &source;'; put 'set &libds;'; put 'run;'; put 'options varlenchk=&optval;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds;'; put 'filename &fref clear;'; put '%end;'; put '%put &sysmacroname: &libds was &startsize;'; put '%put &sysmacroname: &outds is %mf_getfilesize(libds=&outds,format=yes);'; put '%mend mp_ds2squeeze;'; put '/** @cond */'; put '%macro mp_stripdiffs(libds'; put ',loadref'; put ',difftable'; put ',filtervar=0'; put ',outds=work.mp_stripdiffs'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%let libds=%upcase(&libds);'; put '/* safety checks */'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)'; put ')'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid library.dataset reference - %superq(libds))'; put ')'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;'; put '%let fref1=%mf_getuniquefileref();'; put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);'; put '%else %let filterstr=%str(1=1);'; put '/* get timestamp of the diff to be reverted */'; put '%local ts;'; put 'proc sql noprint;'; put 'select put(processed_dttm,datetime19.6) into: ts'; put 'from &difftable where load_ref="&loadref";'; put '%mp_abort(iftrue= (&sqlobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Load ref %superq(loadref) not found!)'; put ')'; put '/* extract diffs for this base table from this timestamp onwards */'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));'; put 'create table &ds1 (drop=libref dsn) as'; put 'select * from &difftable'; put 'where upcase(cats(libref))="%scan(&libds,1,.)"'; put 'and upcase(cats(dsn))="%scan(&libds,2,.)"'; put 'and processed_dttm ge "&ts"dt'; put 'order by processed_dttm desc, key_hash, is_pk;'; put '/* extract key values only */'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));'; put '%local keyhash processed;'; put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));'; put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));'; put 'create table &ds2 as'; put 'select key_hash as &keyhash,'; put 'tgtvar_nm,'; put 'tgtvar_type,'; put 'coalescec(oldval_char,newval_char) as charval,'; put 'coalesce(oldval_num, newval_num) as numval,'; put 'processed_dttm as &processed'; put 'from &ds1'; put 'where is_pk=1'; put 'order by &keyhash, &processed;'; put '/* grab pk values */'; put '%local pk;'; put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))'; put 'out=&ds3(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var charval;'; put 'run;'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))'; put 'out=&ds4(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var numval;'; put 'run;'; put '/* shorten the lengths */'; put '%mp_ds2squeeze(&ds3,outds=&ds3)'; put '%mp_ds2squeeze(&ds4,outds=&ds4)'; put '/* now merge to get all key values and de-dup */'; put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));'; put 'data &ds5;'; put 'length &keyhash $32 &processed 8;'; put 'merge &ds3 &ds4;'; put 'by &keyhash &processed;'; put 'if not missing(&keyhash);'; put 'run;'; put 'proc sort data=&ds5 nodupkey;'; put 'by &pk;'; put 'run;'; put '/* join to base table for preliminary stage DS */'; put 'proc sql;'; put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put ',a.%scan(&pk,&x,%str( ))'; put '%end;'; put '%local notpkcols;'; put '%let notpkcols=%upcase(%mf_getvarlist(&libds));'; put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);'; put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));'; put ',b.%scan(¬pkcols,&x,%str( ))'; put '%end;'; put 'from &ds5 a'; put 'left join &libds (where=(&filterstr)) b'; put 'on 1=1'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))'; put '%end;'; put ';'; put '/* create SAS code to apply to stage_ds */'; put 'data _null_;'; put 'set &ds1;'; put 'file &fref1 lrecl=33000;'; put 'length charval $32767;'; put 'if _n_=1 then put ''proc sql noprint;'';'; put 'by descending processed_dttm key_hash is_pk;'; put 'if move_type=''M'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'if not last.is_pk then put '','';'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'else if move_type=''A'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;'; put 'end;'; put '/* gating if - as only need PK now */'; put 'if is_pk=1;'; put 'put '' AND '' tgtvar_nm ''='' @@;'; put 'cnt=count(newval_char,''"'');'; put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put newval_num @@;'; put 'end;'; put 'else if move_type=''D'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " ," tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'if last.key_hash then put '';'';'; put 'run;'; put '/* apply the modification statements */'; put '%inc &fref1/source2 lrecl=33000;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;'; put 'file &fref1 clear;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'infile &fref1;'; put 'input;'; put 'if _n_=1 then putlog "Contents of SQL adjustments";'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_stripdiffs;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file restore.sas'; put '@brief Restores a data version'; put '@details Only applies if the history is stored in the audit table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mcf_getfmttype.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_applyformats.sas'; put '@li mp_ds2csv.sas'; put '@li mp_getcols.sas'; put '@li mp_stripdiffs.sas'; put '@li mpeinit.sas'; put '@li mpe_checkrestore.sas'; put '@li mpe_loader.sas'; put '

Service Inputs

'; put '
restore_in
'; put '|LOAD_REF:$32|'; put '|---|'; put '|DCXXXXXX|'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let loadref=;'; put 'data _null_;'; put 'set work.restore_in;'; put 'call symputx(''loadref'',load_ref);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)'; put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)'; put ',mac=&_program..sas'; put ',msg=%str(Cannot restore because: &reason)'; put ')'; put '/* grab the base DS */'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: tgtds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&loadref";'; put '/* find the audit table */'; put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto'; put 'into: difftable, :loadtype, :txto'; put 'from &mpelib..MPE_TABLES'; put 'where libref="%scan(&tgtds,1,.)"'; put '& dsn="%scan(&tgtds,2,.)"'; put '& &dc_dttmtfmt0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after stripdiffs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)'; put ',mac=&_program..sas'; put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)'; put ')'; put '/* create a new load ref */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put '/* copy the diffs dataset */'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);'; put 'set work.mp_stripdiffs;'; put 'format _all_;'; put 'run;'; put '/* find all of the date / datetime / time vars */'; put '%mcf_getfmttype(wrap=YES)'; put '%mp_getcols(&tgtds,outds=work.cols)'; put 'data work.applydtfmts;'; put 'set work.cols;'; put 'lib="APPROVE";'; put 'ds="JSDSET";'; put 'var=name;'; put 'fmt=coalescec(format,''0'');'; put 'fmttype=mcf_getfmttype(fmt);'; put 'if fmttype in (''DATE'',''DATETIME'',''TIME'');'; put 'keep lib ds var fmt;'; put 'run;'; put '%mp_applyformats(work.applydtfmts)'; put '/* export to csv */'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/%trim(&tgtds).csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=Restoring &loadref'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data work.restore_out;'; put 'loadref="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,restore_out)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put 'data work.alertmessage;'; put 'set &mpelib..mpe_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also var_scope=''DC_EMAIL'' and var_name="&alert_event._TEMPLATE";'; put 'run;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; 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 'length txt $2048;'; put '%if %mf_getattrn(alertmessage,NLOBS)=0 %then %do;'; put '/* fallback message */'; 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 '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 '%end;'; put '%else %do;'; put '/* take template from config table */'; put 'set work.alertmessage;'; put 'cnt=countw(var_value,''0A''x);'; put 'do i=1 to cnt;'; put 'txt=resolve(scan(var_value,i,''0A''x));'; put 'put txt /;'; put 'end;'; put '%end;'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now'; put ',reason_txt = symget(''submitted_reason_txt'');'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM'''; put 'then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'or format2=:''NLDATE'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warnings */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '/* sanitise message to prevent code injection */'; put 'message=compress(message, ''&%;'');'; put 'call symputx(''message'',message);'; put 'libds=upcase(libds);'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further jquery calls will return col metadata and'; put 'actual data */'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc - unable to assign library &libref)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals libds)'; put ')'; put '%put Verify that the upload does not violate Row Level Security checks:;'; put '%mpe_filtermaster(ULOAD,&libds,'; put 'dclib=&mpelib,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during filtering process)'; put ')'; put '/* prepare inverse query */'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'file &tempref;'; put 'if _n_=1 then put ''where not('';'; put 'input;'; put 'put _infile_;'; put 'if eof then put '')'';'; put 'run;'; put '/* apply the query */'; put 'data work.badrecords;'; put 'set work.jsdata;'; put '%inc &tempref/source2;;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)'; put ',mac=&_program'; put ',msg=%str('; put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted'; put ')'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/**'; put '* Create package folder and redirect the log'; put '*/'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* get web url */'; put '%global url;'; put '%let url=localhost/SASStoredProcess;'; put '%let platform=%mf_getplatform();'; put '%put &=platform;'; put 'data _null_;'; put 'length url $128;'; put '%macro stagedata();'; put '%if &platform=SASVIYA %then %do;'; put 'if symexist(''_baseurl'') then do;'; put 'url=symget(''_baseurl'');'; put 'if subpad(url,length(url)-9,9)=''SASStudio'''; put 'then url=substr(url,1,length(url)-11);'; put 'else url="&systcpiphostname/SASJobExecution";'; put 'end;'; put 'else url="&systcpiphostname/SASJobExecution";'; put '%end;'; put '%else %if &platform=SASMETA %then %do;'; put 'rc=METADATA_GETURI("Stored Process Web App",url);'; put '%end;'; put '%mend stagedata;'; put '%stagedata()'; put 'call symputx(''url'',url);'; put 'putlog url=;'; put 'run;'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* redirect the log */'; put '%put; %put; %put log is being redirected;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%let url=&url?_program=%substr(&_program'; put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;'; put '%put &url;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to log redirection)'; put ')'; put 'proc printto log="&dir/weblog.txt";run;'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of webin file */'; put 'data _null_;'; put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');'; put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */'; put 'else ref=''indata1'';'; put 'call symputx(''ref'',ref);'; put 'putlog ref=;'; put 'run;'; put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'set jsdata;'; put 'run;'; put '/**'; put '* mf_getvarXXX functions will fail if the target is locked - so take a copy'; put '* and reference that (this will also explicitly throw the lock situation)'; put '*/'; put '%let dscopy=work.dscopy;'; put 'data &dscopy;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue getting lock on &libds)'; put ')'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/&orig_libds..csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%superq(message)'; put ',approver=%quote(%trim(&approver))'; put ',url=%superq(url)'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'url="&url";'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_SECURITY table'; put '@details Post edit hooks provide additional backend validation against'; put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this'; put 'file is included from the mpe_loader.sas macro.'; put 'Available (at runtime) macro variables:'; put '@li DC_LIBREF - The DC control library for your site'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '**/'; put '/* ensure upcase and check access level values*/'; put '%let errval=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'LIBREF=upcase(LIBREF);'; put 'if LIBREF in (''WORK'',''CASUSER'',''SASUSER'') then do;'; put 'putlog "ERR" +(-1) "OR: invalid LIBREF - " LIBREF;'; put 'call symputx(''errval'',1);'; put 'call symputx(''errmsg'',"Invalid LIBREF: "!!LIBREF);'; put 'end;'; put 'DSN=upcase(DSN);'; put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);'; put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;'; put 'call symputx(''errval'',1);'; put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errval=1)'; put ',mac=mpe_security_postedit.sas'; put ',msg=%str(&errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_TABLES table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks MPE_TABLES to ensure modified / added records are'; put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check'; put 'to ensure that this table already exists.'; put '**/'; put '%let errmsg=;'; put '%let errflag=0;'; put '/* ensure uppercasing */'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* PK fields should not be upcased if we are trying to delete records */'; put 'if upcase(_____DELETE__THIS__RECORD_____) ne "YES" then do;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'end;'; put 'loadtype=upcase(loadtype);'; put 'buskey=upcase(buskey);'; put 'var_txfrom=upcase(var_txfrom);'; put 'var_txto=upcase(var_txto);'; put 'var_busfrom=upcase(var_busfrom);'; put 'var_busto=upcase(var_busto);'; put 'var_processed=upcase(var_processed);'; put 'close_vars=upcase(close_vars);'; put 'audit_libds=upcase(audit_libds);'; put 'rk_underlying=upcase(rk_underlying);'; put '/* do not accept certain librefs */'; put 'if LIBREF in (''WORK'',''CASUSER'',''SASUSER'')'; put 'then do;'; put 'call symputx(''errmsg'',"Invalid LIBREF: "!!LIBREF);'; put 'call symputx(''errflag'',1);'; put 'end;'; put '/* check for valid loadtype */'; put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')'; put 'then do;'; put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);'; put 'call symputx(''errflag'',1);'; put 'end;'; put '/* force correct BUSKEY and DSN when loading format catalogs */'; put 'if LOADTYPE=''FORMAT_CAT'' then do;'; put 'BUSKEY=''TYPE FMTNAME FMTROW'';'; put 'DSN=scan(dsn,1,''-'')!!''-FC'';'; put 'end;'; put '/* convert tabs into spaces */'; put 'buskey=translate(buskey," ","09"x);'; put 'rk_underlying=translate(rk_underlying," ","09"x);'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '/* get distinct list of audit libs */'; put 'proc sql;'; put 'create table work.liblist as'; put 'select distinct audit_libds'; put 'from work.staging_ds'; put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put '/* assign the libs */'; put 'data _null_;'; put 'set work.liblist;'; put 'call symputx(cats(''lib'',_n_),audit_libds);'; put 'libref=scan(audit_libds,1,''.'');'; put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');'; put 'run;'; put '/* check the audit tables exist */'; put 'data _null_;'; put 'set work.liblist;'; put 'if exist(audit_libds,"DATA")=0 then do;'; put 'call symputx(''errmsg'','; put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."'; put ');'; put 'call symputx(''errflag'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_info_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '

SAS Macros

'; put '@li mf_existds.sas'; put '@li mf_getvarlist.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mp_validatecol.sas'; put '**/'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* apply the first excel map to all cells */'; put 'length tgtds $41;'; put 'retain tgtds;'; put 'drop tgtds is_libds;'; put 'if _n_=1 then do;'; put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";'; put 'else tgtds=upcase(XLMAP_TARGETLIBDS);'; put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)'; put 'call symputx(''tgtds'',tgtds);'; put 'call symputx(''is_libds'',is_libds);'; put 'end;'; put 'XLMAP_TARGETLIBDS=tgtds;'; put 'run;'; put '%mp_abort(iftrue=(&is_libds ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Invalid target dataset (&tgtds)'; put ')'; put '/**'; put '* make sure that the supplied target dataset exists and'; put '* has the necessary columns'; put '*/'; put '%dc_assignlib(READ,%scan(&tgtds,1,.))'; put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Target dataset (&tgtds) could not be opened'; put ')'; put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));'; put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));'; put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);'; put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);'; put '%mp_abort(iftrue=(%length(&badvars1.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)'; put ')'; put '%mp_abort(iftrue=(%length(&badvars2.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_rules_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_XLMAP_RULES table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '**/'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* ensure uppercasing */'; put 'XLMAP_ID=upcase(XLMAP_ID);'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sample_xlmap_data_postapprove; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li LOAD_REF - The Load Reference (unique upload id)'; put '@li ORIG_LIBDS - The target library.dataset that was just loaded'; put '**/'; put 'data _null_;'; put 'set work.staging_ds;'; put 'putlog ''load ref is in the staged data: '' load_ref;'; put 'stop;'; put 'run;'; put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sample_xlmap_data_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The target dataset being loaded'; put '**/'; put '%let abort=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'length errmsg $1000;'; put 'drop err:;'; put '/* KM1 validations */'; put 'if XLMAP_ID=''BASEL-KM1'' then do;'; put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;'; put 'errmsg=''Should be greater than 100'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* CR2 Validations */'; put 'if XLMAP_ID=''BASEL-CR2'' then do;'; put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;'; put 'errmsg=''Should be negative'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* publish error message */'; put 'if err=1 then do;'; put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);'; put 'call symputx(''errmsg'',errmsg);'; put 'call symputx(''abort'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&abort ne 0)'; put ',mac=xlmap_data_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/lineage; %let service=fetchcollineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc,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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 meta_mapper('; put 'baseds=work.allmap /* base table to contain metamapping (two level) */'; put ', stageds=col_meta /* temp table to append to base*/'; put ', metaid=OMSOBJ:Column\A5HOSDWY.BF00LWQT'; put ', direction=REVERSE /* either REVERSE or FORWARDS */'; put ', level=0 /* system var - show level of nesting */'; put ', job= /* system var - avoid looping same source */'; put ', levelcheck=50 /* system var - avoid going too deep down the rabbit hole */'; put ', append=NO /* system var - when YES means appending within nested loop */'; put ');'; put '%if &level>&levelcheck %then %return;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%if &direction=REVERSE %then %do;'; put '%let start=Target;'; put '%let finish=Source;'; put '%end;'; put '%else %do;'; put '%let start=Source;'; put '%let finish=Target;'; put '%end;'; put '%if &append=NO %then %do;'; put 'proc datasets lib=work;'; put 'delete %scan(&baseds,2,.);'; put 'quit;'; put '%let index_statement=(index=(HASH/unique));'; put '%end;'; put '%else %let index_statement=;'; put 'data &stageds &index_statement ;'; put 'length HASH $32'; put 'jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform targettablename targetcolname targetcoluri'; put 'uri targettableuri tfmuri sourcetableuri scuri tpuri tmpuri mturi $256'; put 'Derived_Rule $500 Marker_ID Name_ID N_Name LibRef engine sourcePublicType'; put 'targetPublicType $64;'; put 'keep HASH jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform'; put 'targettablename targetcolname targetcoluri Derived_Rule level;'; put '/* proc transpose logic only */'; put 'length sourceshorttablename sourcemembertype sourcelocation'; put 'assoc assocuri name sturi foundrefuri foundfinishuri'; put 'targetshorttablename targetlocation targetmembertype trafoName $256'; put 'sourceshorttableuri sourceshortcoluri checkrdm targetshorttableuri'; put 'targetshortcoluri selected_direction $17'; put 'lturi _location $200;'; put 'call missing (of _all_);'; put '&start.coluri="&METAID";'; put 'level=&level;'; put '/* first get table associated with the column */'; put 'if metadata_getnasn(&start.coluri,''Table'',1,&start.tableuri)=0 then do;'; put 'putlog "ERR" "OR: Table not found";'; put 'stop;'; put 'end;'; put 'rc=metadata_getattr(&start.tableuri,"Name",&start.tablename);'; put 'rc=metadata_getattr(&start.coluri,"Name",&start.colname);'; put 'rc=metadata_getattr(&start.tableuri,''PublicType'',&start.PublicType);'; put 'if (metadata_getnasn(&start.tableuri, "TablePackage",1, tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&start.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&start.tablename'; put ');'; put 'end;'; put 'else if (&start.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&start.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&start.tablename);'; put 'end;'; put 'else &start.tablename = ''work. ''||trim(lowcase(&start.tablename));'; put '/* now loop the Source / TargetFeatureMaps */'; put 'tfm=1;'; put 'do while(metadata_getnasn(&start.coluri,"&start.FeatureMaps",tfm,tfmuri)>0);'; put 'call missing(derived_rule);'; put 'rc=metadata_getattr(tfmuri,''TransformRole'',map_type);'; put '/* get job and step name */'; put 'if (metadata_getnasn(tfmuri,''AssociatedClassifierMap'',1,tmpuri)<1) then'; put 'do;'; put 'rc=metadata_getnasn(tfmuri,"&finish.Transformations",1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''AssociatedClassifierMap'',1,tmpuri);'; put 'end ;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',map_transform);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'if Map_Type = ''DERIVED'' then do;'; put 'if(metadata_getnasn(tfmuri,"SourceCode",1, scuri)>0) then do;'; put '/* standard */'; put 'mturi=tfmuri;'; put 'end;'; put 'else do;'; put '/* some SQL joins store transform rules elsewhere */'; put 'rc=metadata_getnasn(tfmuri,"Feature&start.s",1, tmpuri);'; put 'if (metadata_getnasn(tmpuri,"Variables",1, tmpuri)>0)'; put 'then rc=metadata_getnasn(tmpuri,"OwningTransformation",1, mturi);'; put 'else rc=metadata_getnasn(tfmuri,"Transformation&start.s",1, mturi);'; put 'rc=metadata_getnasn(mturi,"SourceCode",1, scuri);'; put 'end;'; put 'rc=metadata_getattr(scuri,"StoredText",Derived_Rule);'; put 'Derived_Rule = compress(Derived_Rule,''0A''x);'; put '/* loop to generate derived rule (swap ref numbers for col descs) */'; put 'sv=1;'; put 'do while(metadata_getnasn(mturi,"SubstitutionVariables",sv,tmpuri)>0);'; put 'rc=metadata_getattr(tmpuri,"Marker",Marker_ID);'; put 'rc=metadata_getattr(tmpuri,"Name",Name_ID);'; put 'N_Name = compress(scan(Name_ID,2,''-''));'; put 'Derived_Rule=tranwrd('; put 'Derived_Rule,compress(Marker_ID),compress(N_Name)'; put ');'; put 'sv+1;'; put 'end;'; put 'end;'; put '/* get source col attributes */'; put 'fs=1;'; put 'do while(metadata_getnasn(tfmuri,"Feature&finish.s",fs,&finish.coluri)>0);'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put 'rc=metadata_getattr(&finish.tableuri,''PublicType'',&finish.PublicType);'; put 'if (metadata_getnasn(&finish.tableuri,"TablePackage",1,tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put 'else if (&finish.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&finish.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&finish.tablename);'; put 'end;'; put 'else &finish.tablename=compress(''work.''||lowcase(&finish.tablename));'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'fs+1;'; put 'end;'; put 'tfm+1;'; put 'end;'; put '/* No finish URI found - so proceed to see if this is due to transpose */'; put 'if missing(&finish.coluri)'; put 'and (metadata_getnasn(&start.tableuri,"&start.ClassifierMaps",1,tmpuri)>0)'; put 'then do;'; put 'length trafoname $256;'; put 'call missing(trafoName);'; put 'rc=metadata_getattr(tmpuri,''Name'',trafoName);'; put '/* get &finsh.tablename and jobname */'; put 'rc=metadata_getnasn(tmpuri,"Classifier&finish.s",1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put 'rc1=metadata_getnasl(&finish.tableuri,n1,assoc);'; put 'if (assoc="Columns") then do;'; put 'rc2=1;n2=1;'; put 'do while(rc2>0 and missing(foundfinishuri));'; put '/* Walk through all column associations: SpecSourceTransformations*/'; put 'rc2=metadata_getnasn(&finish.tableuri,trim(assoc),n2,assocuri);'; put '/* REVERSE */'; put '%if ("&direction." = "REVERSE") %then %do;'; put 'if metadata_getnasn(assocuri,"SpecSourceTransformations",1,sturi)>0'; put 'then do;'; put 'rc=metadata_getattr(sturi,"Name",name);'; put '/* SAS Transpose: varColumns */'; put 'if (name ="varColumns") then do;'; put 'foundfinishuri = "true"; /* do a while exit */'; put 'put "scource colname name=" name;'; put 'put "scource colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOONE";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get SAS Folder location of the table */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose vertical";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end; /* (name = "_VALUE_COLUMN") */'; put 'end; /* (metadata_getnasn(assocuri2,"Spec&finish.xxx",1,sturi)>0) */'; put '%end; /* &direction = "REVERSE" */'; put '/* FORWARDS: if TargetFeatureMaps not available: -> target! */'; put '%if ("&direction." = "FORWARDS") %then %do;'; put 'if (metadata_getnasn(assocuri,"TargetFeatureMaps",1,sfuri)<0)'; put 'then do;'; put 'rc=metadata_getattr(assocuri,"Name",name);'; put 'if not missing(assocuri) then do;'; put 'put "target colname name=" name;'; put 'put "target colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOMANY";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get table''s SAS Folder location */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose horizontal";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end;'; put 'end;'; put '%end; /* (&direction = "FORWARDS" */'; put 'call missing(assocuri);'; put 'n2+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* (assoc="Columns") */'; put 'call missing(assoc);'; put 'n1+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* missing(&finish.coluri) */'; put '/* ################# end mapping for Transpose flat ################# */'; put 'stop;'; put 'run;'; put 'proc append base=&baseds data=&stageds;'; put 'run;'; put 'data _null_;'; put 'set &stageds;'; put 'call execute(''%meta_mapper(metaid=''!!&finish.coluri'; put '!!",baseds=&baseds"'; put '!!",direction=&direction"'; put '!!",level=%eval(&level+1)"'; put '!!",levelcheck=&levelcheck"'; put '!!",job="!!jobname'; put '!!",append=YES)");'; put 'run;'; put '%mend meta_mapper;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch the metadata and server as dotlang'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li bitemporal_dataloader.sas'; put '@li meta_mapper.sas'; put '@version 9.4'; 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 column_id direction refresh;'; put '/* enable col id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%let max_depth=50;'; put '%put &=inds;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''column_id'',coluri);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''refresh'',refresh);'; put 'if input(max_depth,8.)>0 then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth &=refresh;'; put 'data info;'; put 'length coluri colname taburi tabname liburi libref $256;'; put 'call missing(of _all_);'; put 'if metadata_getattr("&column_id","Name",colname)<0 then do;'; put 'putlog "Col &column_id not found";'; put 'call symputx(''syscc'',''1234'');'; put 'stop;'; put 'end;'; put 'rc=metadata_getnasn("&column_id","Table",1,taburi);'; put 'rc=metadata_getattr(taburi,"Name",tabname);'; put 'rc=metadata_getnasn(taburi,"TablePackage",1,liburi);'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'call symputx(''lib'',libref);'; put 'call symputx(''tab'',tabname);'; put 'call symputx(''col'',colname);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro launcher();'; put '/* check whether a lineage run already taken place */'; put 'proc sql noprint;'; put 'create table existing_data as'; put 'select * from &mpelib..mpe_lineage_cols'; put 'where col_id="&column_id"'; put 'and direction="%substr(&direction,1,1)";'; put '/* no data, so make some, and append it */'; put '%if &sqlobs=0 or &refresh=1 %then %do;'; put '%meta_mapper(metaid=&column_id'; put ', direction=&direction /* either REVERSE or FORWARDS */'; put ', baseds=work.allmap'; put ', levelcheck=%eval(&max_depth-1)'; put ')'; put 'data append;'; put 'length col_id $32 direction $1 modified_by $64;'; put 'retain col_id "&column_id";'; put 'retain direction "%substr(&direction,1,1)";'; put '%global modified_by modified_dttm;'; put '%let modified_dttm=%sysfunc(datetime());'; put 'retain modified_dttm &modified_dttm;'; put 'retain modified_by "%mf_getuser()";'; put '%let modified_by=%mf_getuser();'; put 'set allmap;'; put 'drop hash;'; put 'run;'; put 'proc sort data=append out=appendme nodupkey;'; put 'by col_id direction sourcecoluri targetcoluri map_type map_transform;'; put 'run;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_lineage_cols'; put ',append_dsn=appendme'; put ',PK=col_id direction sourcecoluri targetcoluri map_type map_transform'; put ',etlsource=&_program'; put ',loadtype=UPDATE'; put ',close_vars=col_id direction'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%else %do;'; put '/* data exists, so use it */'; put 'data work.allmap(drop=modified_by modified_dttm);'; put 'set existing_data(drop=col_id direction );'; put 'if _n_=1 then do;'; put 'call symputx(''modified_by'',modified_by,''g'');'; put 'call symputx(''modified_dttm'',modified_dttm,''g'');'; put 'end;'; put 'where level < &max_depth;'; put 'run;'; put '%end;'; put '%mend launcher;'; put '%launcher()'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put 'options noquotelenmax;'; put '%macro fcmpconditional();'; put '%if &sysver=9.3 and &sysscp=WIN %then %do;'; put '/* nothing - as the FCMP function causes an exception err in this case */'; put '%end;'; put '%else %do;'; put '/* prepare quick func to enable word wrapping of transformations */'; put 'options cmplib=work.funcs;'; put 'proc fcmp outlib=work.funcs.macrocore;'; put 'function wordwrap(str $,cols,splitchar $) $;'; put 'length outstr $32767 curstr $5000;'; put 'base=0;'; put 'put str=;'; put 'do i=1 to countw(str,'' '','' '');'; put 'curstr=scan(str,i,'' '');'; put 'outstr=trim(outstr)!!'' ''!!curstr;'; put 'base=base+length(curstr)+1;'; put 'if base>cols then do;'; put 'outstr=cats(outstr,splitchar);'; put 'base=0;'; put 'end;'; put 'end;'; put 'return (outstr);'; put 'endsub;'; put 'run;'; put '%end;'; put '%mend fcmpconditional;'; put '%fcmpconditional()'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table jobs as select distinct jobname as job from work.allmap ;'; put 'create table cols as select distinct upcase(scan(cat,1,''.-'')) as tmplib'; put ',cats(calculated tmplib,''.'',upcase(scan(cat,2,''.''))) as tmptab'; put ',cats(calculated tmptab,''.'',upcase(col)) as col'; put 'from (select sourcetablename as cat, sourcecolname as col from work.allmap'; put 'union select targettablename as cat, targetcolname as col from work.allmap )'; put 'having findc(tmplib,''/\'')=0 and tmplib ne ''WORK'';'; put 'create table files as select distinct file'; put 'from (select sourcetablename as file from work.allmap'; put 'where findc(sourcetablename,''/\'')>0'; put 'union select targettablename as file from work.allmap'; put 'where findc(targettablename,''/\'')>0'; put ') ;'; put 'create table libs as select distinct tmplib as lib from cols;'; put 'create table tabs as select distinct tmptab as tab from cols;'; put 'data _null_;'; put 'file tmp;'; put 'put ''digraph G {'; put 'concentrate=true;'; put 'node [style=filled,shape=plain];'; put 'labelloc = "t";'; put ''';'; put 'label= "label=<'; put ''; put ''; put ''; put ''; put ''; put ''; put '
&direction Lineage for &col
Library:
&libGenerated by:&modified_by
Table:&tabGenerated on:'; put '%sysfunc(round(&modified_dttm,2),datetime19.)
>";'; put 'put label;'; put 'if "FORWARD"="&direction" then call symputx(''dirdesc'',''Impacted'');'; put 'else call symputx(''dirdesc'',''Source'');'; put '/* close out if there is no lineage */'; put 'if nobs=0 then put ''x [label="No lineage found" shape=Mdiamond]}'';'; put 'set work.allmap nobs=nobs;'; put 'stop;'; put 'run;'; put 'data graphviz1;'; put 'file tmp mod;'; put 'length line arrow $1000 stab ttab slib tlib $100 sbox tbox tooltip $500;'; put 'if _n_=1 then call missing(line, sbox, tbox, tooltip);'; put 'set work.allmap ;'; put 'sourceid=sourcecoluri;'; put 'targetid=targetcoluri;'; put 'if index(sourcetablename,'':'') then do;'; put 'slib='''';'; put 'stab=sourcetablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'stab=scan(sourcetablename,-1,''/\'');'; put 'slib=subpad(sourcetablename,1,length(sourcetablename)-length(stab));'; put 'end;'; put 'else do;'; put 'slib=scan(sourcetablename,1,''.'');'; put 'stab=scan(sourcetablename,2,''.'');'; put 'end;'; put 'if index(targettablename,'':'') then do;'; put 'tlib='''';'; put 'ttab=targettablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'ttab=scan(targettablename,-1,''/\'');'; put 'tlib=subpad(targettablename,1,length(targettablename)-length(ttab));'; put 'end;'; put 'else do;'; put 'tlib=scan(targettablename,1,''.'');'; put 'ttab=scan(targettablename,2,''.'');'; put 'end;'; put 'if trim(derived_rule) ne '''' then do;'; put 'derived_rule=tranwrd(derived_rule,''"'',''\"'');'; put '%macro quick();'; put '%if "&sysver"="9.3" and "&sysscp"="WIN" %then %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',derived_rule,''"]'');'; put '%end;'; put '%else %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',wordwrap(derived_rule,24,''\n''),''"]'');'; put '%end;'; put '%mend quick; %quick()'; put 'end;'; put 'else arrow=cats(''[ label="'',map_transform,''"]'');'; put 'source=quote(strip(sourceid));'; put 'target=quote(strip(targetid));'; put 'put '' '' source '' -> '' target arrow;'; put 'run;'; put 'data graphviz2 (keep=id tab lib col tooltip map_transform);'; put 'set graphviz1 (rename=(source=id stab=tab slib=lib sourcecolname=col ))'; put 'graphviz1 (rename=(target=id ttab=tab tlib=lib targetcolname=col ));'; put 'if upcase(lib)=:''WORK'' then tooltip=cats('',tooltip="Job:'',jobname,''"'');'; put 'else tooltip='''';'; put 'run;'; put 'proc sort data=graphviz2 out=graphviz3 noduprec; by _all_; run;'; put 'data _null_;'; put 'length shape $100 ;'; put 'set graphviz3 end=last;'; put 'file tmp mod;'; put 'tab=tranwrd(tab,''\'',''\\'');'; put 'tab=tranwrd(tab,''&'',''&'');'; put 'lib=tranwrd(lib,''&'',''&'');'; put 'if upcase(lib)=:''WORK'' then do;'; put 'lib=''WORK'';'; put 'put id ''[label=<
Table'' tab'; put '''
Column'' col'; put '''
> ,fillcolor=lightgrey, shape=" " '' tooltip '']'';'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'put id ''[label="Location: '' lib ''\nFile:'' tab ''\nColumn: '' col'; put '''",shape=parallelogram, fillcolor="#00b300"'' tooltip '']'';'; put 'end;'; put 'else do;'; put 'engine=scan(lib,2,''-'');'; put 'lib=scan(lib,1,''-'');'; put 'if engine=''BASE'' then fillcolour=''lightyellow '';'; put 'else fillcolour=''lightblue'';'; put 'shape='' shape=cylinder, fillcolor= ''!!fillcolour;'; put 'put id ''[label=<
Library'' lib'; put '''
Table'' tab'; put '''
Column'' col'; put '''
> ,'' shape tooltip '']'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file tmp mod;'; put '/* close out if records exist */'; put 'set work.allmap;'; put 'put ''}'';'; put 'stop;'; put 'run;'; put 'data flatdata;'; put 'length type $8 item $256;'; put 'keep type item;'; put 'set cols(in=cols) tabs(in=tabs) files(in=files) libs(in=libs) jobs(in=jobs);'; put 'if cols then do;'; put 'type=''Column'';'; put 'item=col;'; put 'end;'; put 'else if tabs then do;'; put 'type=''Table'';'; put 'item=tab;'; put 'end;'; put 'else if files then do;'; put 'type=''File'';'; put 'item=file;'; put 'end;'; put 'else if libs then do;'; put 'type=''Library'';'; put 'item=lib;'; put 'end;'; put 'else if jobs then do;'; put 'type=''Job'';'; put 'item=job;'; put 'end;'; put 'run;'; put 'data fromSAS;'; put 'infile tmp end=last;'; put 'file tmp;'; put 'input ;'; put 'string=_infile_;'; put 'put string;'; put 'run;'; put 'filename tmp clear;'; put '/* get list of IDs so frontend can make a clickable list */'; put 'proc sql;'; put 'create table ids as select distinct id from graphviz3;'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS,missing=STRING)'; put '%webout(OBJ,ids,dslabel=clickableIDS)'; put '%webout(OBJ,info)'; put '%webout(OBJ,flatdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=fetchtablelineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch Table Lineage for SAS 9'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; 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 '%global table_id direction graphOrientation;'; put '/* enable table id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put '%let max_depth=50;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''table_id'',table_id);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''graphOrientation'',''LR'');'; put 'if max_depth>''0'' then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth;'; put '%mp_abort(iftrue= (&table_id=undefined)'; put ',mac=&_program'; put ',msg=%str(Table_id UNDEFINED provided from frontend)'; put ')'; put 'data work.info;'; put 'length tableid tablename liburi $64 libref $8;'; put 'drop rc;'; put 'tableid="&table_id";'; put 'call missing(liburi);'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'tablename=upcase(tablename);'; put 'if missing(libref) then libref=''nolib'';'; put 'call symputx(''libds'',cats(libref,''.'',tablename));'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%let src=%sysfunc(ifc(&direction=REVERSE,src,tgt));'; put '%let tgt=%sysfunc(ifc(&direction=REVERSE,tgt,src));'; put 'data work.sourcetable/view=work.sourcetable;'; put 'set &mpelib..MPE_LINEAGE_TABS;'; put 'where &dc_dttmtfmt. lt tx_to ;'; put 'drop tx_from tx_to;'; put 'run;'; put '%macro recursivejoin(iter=0'; put ',maxiter=&max_depth /* avoid infinite loop */'; put ');'; put '%if &iter=0 %then %do;'; put 'data work.baseds ;'; put 'retain level 0;'; put 'set work.sourcetable;'; put 'where &tgt.tableid="&table_id";'; put 'run;'; put '%let iter=1;'; put 'proc sql;'; put '%end;'; put '%else %if &iter>&maxiter %then %return;'; put 'create table work.appendds as'; put 'select distinct &iter as level'; put ',b.*'; put 'from work.baseds a'; put 'left join work.sourcetable b'; put 'on a.&src.tableid=b.&tgt.tableid'; put 'where a.level=%eval(&iter.-1)'; put 'and b.&src.tableid is not null'; put 'and a.&src.tableid is not null'; put 'and a.&src.tableid ne ''N/A'';'; put '%let obs=&sqlobs;'; put 'insert into work.baseds select * from work.appendds;'; put '%if &obs %then %do;'; put '%recursivejoin(iter=%eval(&iter.+1) )'; put '%end;'; put '%mend recursivejoin;'; put '%recursivejoin()'; put 'proc sql;'; put 'create table work.final as'; put 'select distinct *'; put 'from work.baseds(drop=level)'; put 'where jobid is not null;'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table work.jobs as'; put 'select distinct jobid'; put ', jobname'; put ',quote(cats(jobid))||'' [label=''||quote(cats(jobname))||''];'' as line'; put 'from work.final;'; put 'create table work.tables as'; put 'select distinct &src.tableid as tableid'; put ',&src.tablename as tablename'; put ',&src.libref as libref'; put 'from work.final'; put 'where &src.tableid ne ''N/A'''; put 'union select'; put '&tgt.tableid as tableid'; put ',&tgt.tablename as tablename'; put ',&tgt.libref as libref'; put 'from work.final'; put 'where &tgt.tableid ne ''N/A'''; put 'order by libref, tablename;'; put 'create table idlookup as'; put 'select tableid as metaid'; put ',''TABLE'' as metatype'; put ',cats(libref,''.'',tablename) as metaname'; put 'from work.tables'; put 'union'; put 'select jobid as metaid'; put ',''JOB'' as metatype'; put ',jobname as metaname'; put 'from work.jobs'; put 'order by metaid;'; put 'data CRAYONS;'; put 'length attribute value $8;'; put 'infile datalines4 dsd;'; put 'input attribute value;'; put 'call symput(cats(''col'',_n_),quote(trim(value)));'; put 'datalines;'; put 'red,#e6194b'; put 'green,#3cb44b'; put 'blue,#4363d8'; put 'orange,#f58231'; put 'purple,#911eb4'; put 'cyan,#46f0f0'; put 'magenta,#f032e6'; put 'lime,#bcf60c'; put 'pink,#fabebe'; put 'teal,#008080'; put 'lavender,#e6beff'; put 'brown,#9a6324'; put 'beige,#fffac8'; put 'maroon,#800000'; put 'mint,#aaffc3'; put 'olive,#808000'; put 'apricot,#ffd8b1'; put 'navy,#000075'; put 'gray,#808080'; put 'black,#00000'; put 'yellow,#ffe119'; put 'white,#ffffff'; put 'bazaar,#98777b'; put 'beaver,#9f8170'; put 'bisque,#ffe4c4'; put 'blond,#faf0be'; put 'blush,#de5d83'; put 'bole,#79443b'; put 'bone,#e3dac9'; put 'brass,#b5a642'; put 'bronze,#cd7f32'; put 'bubbles,#e7feff'; put 'buff,#f0dc82'; put 'camel,#c19a6b'; put 'canary,#ffff99'; put 'capri,#00bfff'; put 'cardinal,#c41e3a'; put 'carmine,#ff0040'; put 'celadon,#ace1af'; put 'celeste,#b2ffff'; put 'cerise,#de3163'; put 'cerulean,#007ba7'; put 'cherry,#de3163'; put 'chestnut,#cd5c5c'; put 'cinnabar,#e34234'; put 'cinnamon,#d2691e'; put 'citrine,#e4d00a'; put 'cobalt,#0047ab'; put 'coffee,#6f4e37'; put 'copper,#b87333'; put 'coral,#ff7f50'; put 'corn,#fbec5d'; put 'cornsilk,#fff8dc'; put 'cream,#fffdd0'; put 'crimson,#dc143c'; put 'daffodil,#ffff31'; put 'denim,#1560bd'; put 'desert,#c19a6b'; put 'drab,#967117'; put 'ecru,#c2b280'; put 'eggplant,#614051'; put 'eggshell,#f0ead6'; put 'emerald,#50c878'; put 'fallow,#c19a6b'; put 'fawn,#e5aa70'; put 'fern,#71bc78'; put 'flame,#e25822'; put 'flax,#eedc82'; put 'folly,#ff004f'; put 'fuchsia,#ff00ff'; put 'fulvous,#e48400'; put 'gamboge,#e49b0f'; put 'ginger,#b06500'; put 'glaucous,#6082b6'; put 'glitter,#e6e8fa'; put 'gold,#ffd700'; put 'grullo,#a99a86'; put 'icterine,#fcf75e'; put 'indigo,#4b0082'; put 'iris,#5a4fcf'; put 'ivory,#fffff0'; put 'jade,#00a86b'; put ';;;;'; put 'run;'; put 'proc sort data=work.tables out=work.libs nodupkey;'; put 'by libref;'; put 'run;'; put 'data work.alllibs;'; put 'set work.libs end=last;'; put 'length line $1000. ;'; put 'crayon=symget(cats(''col'',_n_));'; put 'call symputx(libref,crayon);'; put 'if _n_=1 then do;'; put 'line=''subgraph cluster_libs { label="Libraries";'';output;'; put 'end;'; put 'line=cats(libref)!!'' [label=''||quote(cats(libref))||''; style="filled"; color='''; put '||cats(crayon)||'', shape = Mrecord, fontcolor=white]'';output;'; put 'if last then do;'; put 'line=''}'';output;'; put 'end;'; put 'run;'; put 'data alltables;'; put 'length line $1000. ;'; put 'set work.tables;'; put 'crayon=symget(libref);'; put 'line=quote(cats(tableid))||'' [label="''||cats(tablename)'; put '!!''", color=''!!cats(crayon)'; put '!!'', shape=cylinder,style=filled,fontcolor=white];'';'; put 'output;'; put 'run;'; put 'proc sort'; put 'data=final(keep=&src.tableid jobid &src.libref) out=&src.relations nodupkey;'; put 'by &src.tableid jobid;'; put 'proc sort'; put 'data=final(keep=&tgt.tableid jobid &tgt.libref) out=&tgt.relations nodupkey;'; put 'by jobid &tgt.tableid;'; put 'run;'; put 'data srcrelations;'; put 'set srcrelations;'; put 'length line $1000;'; put 'where srctableid ne ''N/A'';'; put 'line=cats('; put '''"'',cats(srctableid),''" -> "'',jobid,''" [color='',symget(srclibref),''];'''; put ');'; put 'data tgtrelations;'; put 'set tgtrelations;'; put 'where tgttableid ne ''N/A'';'; put 'length line $1000;'; put 'line=cats('; put '''"'',cats(jobid),''" -> "'',tgttableid,''" [color='',symget(tgtlibref),''];'''; put ');'; put 'run;'; put 'data finalfinal;'; put 'set work.alllibs(keep=line) work.alltables (keep=line) work.jobs(keep=line)'; put 'work.&src.relations(keep=line) work.&tgt.relations(keep=line) end=last;'; put 'if _N_ = 1 then do;'; put 'firstline=line;'; put 'line=''strict digraph "''!!"&libds"!!''" {''; output;'; put 'line="rankdir=&graphOrientation; nodesep=0.5; node [shape = octagon];";output;'; put 'line=firstline;'; put 'end;'; put 'output;'; put 'if last then do;'; put 'line=''}'';'; put 'output;'; put 'end;'; put 'drop firstline;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,finalfinal)'; put '%webout(OBJ,info)'; put '%webout(OBJ,final,dslabel=flatdata)'; put '%webout(OBJ,idlookup)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetacols; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetacols.sas'; put '@brief List the cols as defined in metadata'; put '@details Provide a table uri and get list of columns'; put '

SAS Macros

'; put '@li mm_getcols.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 '%global tableuri;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''tableuri'',scan(tableuri,-1,''\''));'; put 'run;'; put '%put &=tableuri;'; put '/* load parameters */'; put '%mm_getcols(tableuri=&tableuri,outds=metacols)'; put 'data out;'; put 'set metacols;'; put 'keep col:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,out,dslabel=metacols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetatables; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetatables.sas'; put '@brief List the tables as defined in metadata'; put '@details Provide a library uri and get list of tables'; put '

SAS Macros

'; put '@li mm_gettables.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 '%global liburi;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''liburi'',liburi);'; put 'run;'; put '/* load parameters */'; put '%mm_gettables(uri=&liburi,outds=metatables,getauth=NO)'; put 'data out;'; put 'set metatables;'; put 'keep table:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,metatables)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/metanav; %let service=metadetails; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getdetails(uri'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions='; put ')/*/STORE SOURCE*/;'; put 'data &outassocs;'; put 'keep assoc assocuri name;'; put 'length assoc assocuri name $256;'; put 'call missing(of _all_);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put '/* Walk through all possible associations of this object. */'; put 'rc1=metadata_getnasl("&uri",n1,assoc);'; put 'rc2=1;n2=1;'; put 'do while(rc2>0);'; put '/* Walk through all the associations on this machine object. */'; put 'rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);'; put 'if (rc2>0) then do;'; put 'rc3=metadata_getattr(assocuri,"Name",name);'; put 'output;'; put 'end;'; put 'call missing(name,assocuri);'; put 'n2+1;'; put 'end;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by assoc name;'; put 'run;'; put 'data &outattrs;'; put 'keep type name value;'; put 'length type $4 name $256 value $32767;'; put 'rc1=1;n1=1;type=''Prop'';name='''';value='''';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnprp("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'rc1=1;n1=1;type=''Attr'';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnatr("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort &sortoptions;'; put 'by type name;'; put 'run;'; put '%mend mm_getdetails;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metadetails.sas'; put '@brief Retrieves metadata attributes and associations for a particular object'; put '@details'; put '

SAS Macros

'; put '@li mm_getdetails.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put '%mm_getdetails(&objecturi'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ',sortoptions=SORTSEQ=LINGUISTIC'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,attributes, missing=STRING)'; put '%webout(OBJ,associations)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metaobjects; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getobjects('; put 'type=SASLibrary'; put ',outds=work.mm_getobjects'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"$METAREPOSITORY'; put '&typeSAS'; put '0"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Id";'; put 'put "characterstring200";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Name";'; put 'put "characterstring200";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getobjects;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metaobjects.sas'; put '@brief Retrieves list of objects for a particular metadata type'; put '@details'; put '

SAS Macros

'; put '@li mm_getobjects.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put 'options metarepository=&repo;'; put '%mm_getobjects('; put 'type=&metatype'; put ',outds=work.objects'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,objects,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metarepos; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metarepos.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_getrepos.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 '%mm_getrepos(outds=work.repos)'; put 'data outrepos;'; put 'set repos;'; put 'if repositorytype in (''CUSTOM'',''FOUNDATION'');'; put 'keep id name description;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,outrepos)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metatypes; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettypes('; put 'outds=work.mm_gettypes'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put ''; put 'SAS'; put ''; put '2048'; put ''; put ''; put '$METAREPOSITORY'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put ''//GetTypes/Types/Type'';'; put 'put ''64'';'; put 'put ''//GetTypes/Types/Type/@Id'';'; put 'put ''256'';'; put 'put ''//GetTypes/Types/Type/@Desc'';'; put 'put '''';'; put 'put ''//GetTypes/Types/Type/@HasSubtypes'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.sastypes out=&outds;'; put 'by id;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_gettypes;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metatypes.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_gettypes.sas'; 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 '%mm_gettypes(outds=work.types)'; put '%webout(OPEN)'; put '%webout(OBJ,types)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &outresult=YES;'; put '%let &outreason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getchangeinfo.sas'; put '@brief Returns the details for an approval diff'; put '@details'; put '

SAS Macros

'; put '@li mf_getengine.sas'; put '@li mp_abort.sas'; put '@li mpe_checkrestore.sas'; put '

Service Inputs

'; put '
sascontroltable
'; put '@li table table ID or LOAD_REF used to uniquely identify a staged change'; put '

Service Outputs

'; put '
work.jsparams
'; put 'Mainly sourced from MPE_SUBMIT plus some extra cols:'; put '@li LIB_ENGINE Library engine'; put '@li allow_restore YES if a user can restore, else NO'; put '@li REASON reason why a restore is / is no possible'; put '

Data Inputs

'; put '@li MPE_AUDIT'; put '@li MPE_COLUMN_LEVEL_SECURITY'; put '@li MPE_ROW_LEVEL_SECURITY'; put '@li MPE_SUBMIT'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let table=;'; put 'data _null_;'; put 'set SASControlTable;'; put 'call symputx(''table'',table);'; put 'run;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit'; put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));'; put 'where TABLE_ID="&TABLE";'; put 'TABLE_NM=cats(base_lib,''.'',base_ds);'; put 'BASE_TABLE=table_nm;'; put 'call symputx(''base_lib'',base_lib);'; put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);'; put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&table,outresult=ALLOW_RESTORE,outreason=REASON)'; put 'data work.jsParams;'; put 'set approve1;'; put 'LIB_ENGINE="%mf_getEngine(&base_lib)";'; put 'allow_restore="&allow_restore";'; put 'REASON="&reason";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,jsParams,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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,fetchobs=1'; put ')/*/STORE SOURCE*/;'; put '%local dsid;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%if (&dsid) %then %do;'; put '%local rc &variable;'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetchobs(&dsid,&fetchobs));'; put '%if (&rc ne 0) %then %do;'; put '%put NOTE: Problem reading obs &fetchobs from &libds..;'; put '%put %sysfunc(sysmsg());'; put '/* Coerce an rc value of -1 (read past end of data) to a 4'; put 'that, in SAS condition code terms, represents the sysmsg'; put 'w@rning it generates. */'; put '%if &rc eq -1 %then %let rc = 4;'; put '/* And update SYSCC if the &rc value is higher */'; put '%let syscc = %sysfunc(max(&syscc,&rc));'; put '%end;'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%else %do;'; put '%put %sysfunc(sysmsg());'; put '%let syscc = %sysfunc(max(&syscc,%sysfunc(sysrc())));'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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,fetchobs=1'; put ')/*/STORE SOURCE*/;'; put '%local dsid;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%if (&dsid) %then %do;'; put '%local rc &variable;'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetchobs(&dsid,&fetchobs));'; put '%if (&rc ne 0) %then %do;'; put '%put NOTE: Problem reading obs &fetchobs from &libds..;'; put '%put %sysfunc(sysmsg());'; put '/* Coerce an rc value of -1 (read past end of data) to a 4'; put 'that, in SAS condition code terms, represents the sysmsg'; put 'w@rning it generates. */'; put '%if &rc eq -1 %then %let rc = 4;'; put '/* And update SYSCC if the &rc value is higher */'; put '%let syscc = %sysfunc(max(&syscc,&rc));'; put '%end;'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%else %do;'; put '%put %sysfunc(sysmsg());'; put '%let syscc = %sysfunc(max(&syscc,%sysfunc(sysrc())));'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_existfileref(fref'; put ')/*/STORE SOURCE*/;'; put '%local rc;'; put '%let rc=%sysfunc(fileref(&fref));'; put '%if &rc=0 %then %do;'; put '1'; put '%end;'; put '%else %if &rc<0 %then %do;'; put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;'; put '1'; put '%end;'; put '%else %do;'; put '0'; put '%end;'; put '%mend mf_existfileref;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_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_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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_ds2csv.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 'run;'; put '/* if a format, extract relevant info */'; put 'data _null_;'; 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 '/* cannot use PROC EXPORT as we need to wrap all char values in quotes */'; put '%mp_ds2csv(work.staged,outfile="&outfile",headerformat=NAME)'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getversion; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getversion.sas'; put '@brief get a specific (previous) version of a particular table'; put '@details Used to fetch a version of a table as at a previous point in time'; put 'Delivered as part of this issue: https://git.datacontroller.io/dc/dc/issues/84'; put '

Service Inputs

'; put '
getversion_input
'; put '|LIBREF:$char8.|DS:$char32.|TS: 8.|'; put '|---|---|---|'; put '|SOMELIB|SOMEDS|1341344.804|'; put '

Service Outputs

'; put '
work.getversion_output
'; put 'The data for a particular version'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mpeinit.sas'; put '@li mpe_getvars.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '**/'; put '%mpeinit()'; put '%global LIBREF DS;'; put '/* load parameters */'; put '%mpe_getvars(getversion_input, getversion_input)'; put '%mp_abort(iftrue= (&syscc ne 0 )'; put ',mac=&_program'; put ',msg=%str(Issue on startup)'; put ')'; put '/* todo */'; put '%webout(OPEN)'; put '%webout(OBJ,getversion_output)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_getuniquelibref(prefix=mc,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_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; 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 ',AUDITFOLDER=0'; 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 '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; 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 '%mp_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 '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions 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 etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; 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 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; 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 '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; 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_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if %length(&CLOSE_VARS)>0 and (&engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW or &engine_type=SASIOSNF)'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; 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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%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 '%let temp_table=%upcase(%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 in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; 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 '%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 '/* inherit remote length to handle byte expansion */'; put 'if 0 then set &base_lib..&temp_table(keep=&md5_col);'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using *&engine_type* engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put 'or &engine_type=SASIOSNF'; put '%then %do;'; put '%let innertable=%upcase(%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 '%if &engine_type=SNOW or &engine_type=SASIOSNF %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; 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 '%put Not using passthrough for *&engine_type* engine;'; 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 'or &engine_type=SNOW or &engine_type=SASIOSNF'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mpe_refreshcatalogs(lib,cat=#all);'; put '%let lib=%upcase(&lib);'; put '%let cat=%upcase(&cat);'; put '%put running &sysmacroname &lib for &cat;'; put 'proc sql;'; put 'create table work.catdata as'; put 'select libname as libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'created,'; put 'modified,'; put 'alias,'; put 'level'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put '%if &cat ne #ALL %then %do;'; put 'and upcase(memname)="&cat"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib objects extraction)'; put ')'; put '/* load mpe_datacatalog_CATS */'; put 'proc sql;'; put 'create table datacats as select distinct libref,memname from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_CATS'; put ',append_dsn=datacats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* load mpe_datacatalog_objsS */'; put 'proc sql;'; put 'create table dataobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'objdesc,'; put 'alias'; put 'from catdata;'; put 'quit;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_OBJS'; put ',append_dsn=dataobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_OBJS;'; put 'proc sql;'; put 'create table statusobjs as'; put 'select distinct libref,'; put 'memname,'; put 'objname,'; put 'objtype,'; put 'created,'; put 'modified,'; put 'level'; put 'from catdata;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_OBJS'; put ',append_dsn=statusobjs'; put ',PK=LIBREF MEMNAME OBJNAME OBJTYPE'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF MEMNAME'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%put load mpe_datastatus_cats;'; put 'proc sql;'; put 'create table statuscats as'; put 'select libref,'; put 'memname,'; put 'count(*) as nobjs,'; put 'min(created) as created,'; put 'max(modified) as modified'; put 'from catdata'; put 'group by 1,2;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_cats'; put ',append_dsn=statuscats'; put ',PK=LIBREF MEMNAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &cat = #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '%mend mpe_refreshcatalogs;'; 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 '%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 '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; 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 work.sumcat as'; put 'select libname as libref,'; put 'count(distinct memname) as catalog_cnt'; put 'from dictionary.catalogs'; put 'where upcase(libname)="&lib"'; put 'group by 1;'; put 'create table work.sumdsn as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put 'create table work.libs as'; put 'select libref from work.sumcat'; put 'union'; put 'select libref from work.sumdsn;'; put 'create table work.statuslibs as'; put 'select a.libref,'; put 'b.libsize,'; put 'b.table_cnt,'; put 'c.catalog_cnt'; put 'from work.libs a'; put 'left join work.sumdsn b'; put 'on a.libref=b.libref'; put 'left join work.sumcat c'; put 'on a.libref=c.libref;'; 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(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%mpe_refreshcatalogs(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%mpe_refreshcatalogs(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'b.catalog_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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file startupservice.sas'; put '@brief List the libraries and tables the mp-editor user can access'; put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)'; put 'then they have access to all libraries / tables. Otherwise a join is made'; put 'to the &mpelib..mpe_security table.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue on startup in startupService)'; put ')'; put '%let userid=%mf_getuser();'; put '%put userid is &userid;'; put '%mpe_getgroups(user=&userid,outds=groups)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)'; put ')'; put '/* check if user is an admin */'; put '%let admin_check=0;'; put 'proc sql noprint;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins";'; put '/* check if user is registered or not */'; put '%let isRegistered=0;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '/* get number of registered users */'; put '%let registerCount=0;'; put 'select count(*) into: registercount'; put 'from &mpelib..mpe_users'; put 'where last_seen_dt>%sysfunc(today())-365;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem accessing &mpelib..mpe_users table)'; put ')'; put '%global dc_restrict_editrecord;'; put 'data work.globvars;'; put 'dclib="&mpelib";'; put 'sas9lineage_enabled=1;'; put 'isadmin=&admin_check;'; put 'isregistered=&isregistered;'; put 'registercount=®isterCount;'; put 'dc_admin_group="&mpeadmins";'; put '/* fetched from mpe_config in dc_getsettings */'; put 'licence_key="&dc_licence_key";'; put 'activation_key="&dc_activation_key";'; put 'dc_restrict_editrecord="&dc_restrict_editrecord";'; put 'run;'; put '%macro mstp_mpeditorstartup();'; put 'data _null_;'; put 'putlog "entering &sysmacroname";'; put 'run;'; put 'proc sql noprint;'; put '/* update last seen, if seen */'; put '%if &isregistered>0 %then %do;'; put 'update &mpelib..mpe_users'; put 'set last_seen_dt=%sysfunc(today())'; put 'where user_id="&userid";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem updating &mpelib..mpe_users table)'; put ')'; put '%local all_cnt;'; put 'select count(*) into: all_cnt'; put 'from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and ACCESS_LEVEL in (''EDIT'')'; put 'and libref=''*ALL*'''; put 'and SAS_GROUP in (select groupname from groups);'; put '%if &admin_check >0 or &all_cnt>0 %then %do;'; put 'create table sasDatasets as'; put 'select distinct libref, dsn'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'order by 1;'; put '%end;'; put '%else %do;'; put 'create table sasDatasets as'; put 'select distinct a.libref,a.dsn'; put 'from &mpelib..mpe_tables a'; put 'left join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn'; put 'where &dc_dttmtfmt. lt a.tx_to'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL in (''EDIT'')'; put 'and b.SAS_GROUP in (select groupname from groups)'; put 'order by 1;'; put '%end;'; put '%mend mstp_mpeditorstartup;'; put '%mstp_mpeditorstartup()'; put 'create table saslibs as'; put 'select distinct libref'; put 'from &syslast;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue with security validation)'; put ')'; put 'proc sql;'; put 'create table work.xlmaps as'; put 'select distinct a.XLMAP_ID'; put ',b.XLMAP_DESCRIPTION'; put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")'; put 'as XLMAP_TARGETLIBDS'; put 'from &mpelib..MPE_XLMAP_RULES a'; put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.XLMAP_ID=b.XLMAP_ID'; put 'where &dc_dttmtfmt. lt a.tx_to;'; put '/* we don''t want the XLMAP target datasets to be directly editable */'; put 'delete from sasdatasets'; put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);'; put '%webout(OPEN)'; put '%webout(OBJ,sasDatasets)'; put '%webout(OBJ,saslibs)'; put '%webout(OBJ,globvars)'; put '%webout(ARR,xlmaps)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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,fetchobs=1'; put ')/*/STORE SOURCE*/;'; put '%local dsid;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%if (&dsid) %then %do;'; put '%local rc &variable;'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetchobs(&dsid,&fetchobs));'; put '%if (&rc ne 0) %then %do;'; put '%put NOTE: Problem reading obs &fetchobs from &libds..;'; put '%put %sysfunc(sysmsg());'; put '/* Coerce an rc value of -1 (read past end of data) to a 4'; put 'that, in SAS condition code terms, represents the sysmsg'; put 'w@rning it generates. */'; put '%if &rc eq -1 %then %let rc = 4;'; put '/* And update SYSCC if the &rc value is higher */'; put '%let syscc = %sysfunc(max(&syscc,&rc));'; put '%end;'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%else %do;'; put '%put %sysfunc(sysmsg());'; put '%let syscc = %sysfunc(max(&syscc,%sysfunc(sysrc())));'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_hashdataset('; put 'libds,'; put 'outds=work._data_,'; put 'salt=,'; put 'iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local keyvar /* roll up the md5 */'; put 'prevkeyvar /* retain prev record md5 */'; put 'lastvar /* last var in input ds */'; put 'cvars nvars;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '/* avoid naming conflict for hash key vars */'; put '%let keyvar=%mf_getuniquename();'; put '%let prevkeyvar=%mf_getuniquename();'; put '%let lastvar=%mf_getuniquename();'; put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;'; put 'data &outds;'; put 'length hashkey $32;'; put 'hashkey=put(md5("&salt"),$hex32.);'; put 'output;'; put 'stop;'; put 'run;'; put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;'; put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;'; put '%end;'; put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;'; put '%put %str(ERR)OR: Dataset &libds is not a dataset;'; put '%end;'; put '%else %do;'; put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'length &prevkeyvar &keyvar $32;'; put 'retain &prevkeyvar;'; put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);'; put 'set &libds end=&lastvar;'; put '/* hash should include previous row */'; put '&keyvar=%mp_md5('; put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,'; put 'nvars=%mf_getvarlist(&libds,typefilter=N)'; put ');'; put '&prevkeyvar=&keyvar;'; put 'if &lastvar then output;'; put 'run;'; put '%end;'; put '%mend mp_hashdataset;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '%macro mp_filterstore(libds=,'; put 'queryds=work.filterquery,'; put 'filter_summary=PERM.FILTER_SUMMARY,'; put 'filter_detail=PERM.FILTER_DETAIL,'; put 'lock_table=PERM.LOCK_TABLE,'; put 'maxkeytable=PERM.MAXKEYTABLE,'; put 'outresult=work.result,'; put 'outquery=work.query,'; put 'mdebug=1'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;'; put '%let libds=%upcase(&libds);'; put '%let orig_libds=&libds;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro entry)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_summary value: &filter_summary)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_detail value: &filter_detail)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid lock_table value: &lock_table)'; put ')'; put '/**'; put '* validate query'; put '* use format catalog export, if a format'; put '*/'; put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;'; put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */'; put '%let ds0=%mf_getuniquename(prefix=fmtds_);'; put '%let libds=&ds0;'; put '/*'; put 'There is no need to export the entire format catalog here - the validations'; put 'are done against the data model, not the data values. So we can simply'; put 'hardcode the structure based on the cntlout dataset.'; put '*/'; put '%mddl_sas_cntlout(libds=&ds0)'; put '%end;'; put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)'; put '/* hash the result */'; put '%let ds1=%mf_getuniquename(prefix=hashds);'; put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)'; put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'putlog "filter_hash=&filter_hash";'; put 'set &ds1;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '/* check if data already exists for this hash */'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc after hash check)'; put ')'; put '%mp_abort(iftrue= ("&filter_hash "=" ")'; put ',mac=mp_filterstore'; put ',msg=%str(problem with filter_hash generation)'; put ')'; put '%if %mf_nobs(&outresult)=0 %then %do;'; put '/* first update summary table */'; put '%let ds3=%mf_getuniquename(prefix=filtersum);'; put 'data work.&ds3;'; put 'if 0 then set &filter_summary;'; put 'filter_table="&orig_libds";'; put 'filter_hash="&filter_hash";'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%let ds4=%mf_getuniquename(prefix=filtersumappend);'; put '%mp_retainedkey('; put 'base_lib=%scan(&filter_summary,1,.)'; put ',base_dsn=%scan(&filter_summary,2,.)'; put ',append_lib=work'; put ',append_dsn=&ds3'; put ',retained_key=filter_rk'; put ',business_key=filter_hash'; put ',maxkeytable=&maxkeytable'; put ',locktable=&lock_table'; put ',outds=work.&ds4'; put ')'; put 'proc append base=&filter_summary data=&ds4;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds4;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '/* Next, update detail table */'; put '%let ds2=%mf_getuniquename(prefix=filterdetail);'; put 'data &ds2;'; put 'if 0 then set &filter_detail;'; put 'set &queryds;'; put 'format filter_hash $hex32. filter_line 8.;'; put 'filter_hash="&filter_hash";'; put 'filter_line=_n_;'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put 'proc append base=&filter_detail data=&ds2;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE detail update &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put '%end;'; put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;'; put 'by filter_line;'; put 'run;'; put '%err:'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro exit)'; put ')'; put '%mend mp_filterstore;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_casload(libds, mdebug=0);'; put '%mend dc_casload;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '%macro mm_createdataset(libds=,tableuri=,outds=work.mm_createdataset,mDebug=0);'; put '%local dbg errorcheck tempds1 tempds2 tempds3;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%let errorcheck=1;'; put '%if %index(&libds,.)>0 %then %do;'; put '/* get lib uri */'; put 'data;run;%let tempds1=&syslast;'; put '%mm_getlibs(outds=&tempds1)'; put 'data _null_;'; put 'set &tempds1;'; put 'if upcase(libraryref)="%upcase(%scan(&libds,1,.))";'; put 'call symputx(''liburi'',LibraryId,''l'');'; put 'run;'; put '/* get ds uri */'; put 'data;run;%let tempds2=&syslast;'; put '%mm_gettables(uri=&liburi,outds=&tempds2)'; put 'data _null_;'; put 'set &tempds2;'; put 'where upcase(tablename)="%upcase(%scan(&libds,2,.))";'; put '&dbg putlog tableuri=;'; put 'call symputx(''tableuri'',tableuri);'; put 'run;'; put '%end;'; put 'data;run;'; put '%let tempds3=&syslast;'; put '%mm_getcols(tableuri=&tableuri,outds=&tempds3)'; put '%if %mf_nobs(&tempds3)=0 %then %do;'; put '%put &libds (&tableuri) has no columns defined!!;'; put 'data &outds;'; put 'run;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'set &tempds3 end=last;'; put 'if _n_=1 then call execute(''data &outds;'');'; put 'length attrib $32767;'; put 'if SAScolumntype=''C'' then type=''$'';'; put 'attrib=''attrib ''!!cats(colname)!!'' length=''!!cats(type,SASColumnLength,''.'');'; put 'if not missing(sasformat) then fmt='' format=''!!cats(sasformat);'; put 'if not missing(sasinformat) then infmt='' informat=''!!cats(sasinformat);'; put 'if not missing(coldesc) then desc='' label=''!!quote(cats(coldesc));'; put 'attrib=trim(attrib)!!fmt!!infmt!!desc!!'';'';'; put 'call execute(attrib);'; put 'if last then call execute(''call missing(of _all_);stop;run;'');'; put 'run;'; put '%mend mm_createdataset;'; put '%macro dc_createdataset(libds=mm_getlibs,outds=viewdata);'; put '%mm_createdataset(libds=&libds,outds=viewdata)'; put '%mend dc_createdataset;'; put '%macro mm_gettableid('; put 'libref='; put ',ds='; put ',outds=work.mm_gettableid'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length uri usingpkguri id type tableuri tablename tmpuri $256;'; put 'call missing(of _all_);'; put 'keep tableuri tablename;'; put 'n=1;'; put 'rc=0;'; put 'if metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",n,uri)<1 then do;'; put 'put "Library &libref not found";'; put 'stop;'; put 'end;'; put '&mD.putlog "uri is " uri;'; put 'if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put '&mD.putlog "Type is " type;'; put 'end;'; put 'if type=''DatabaseSchema'' then tmpuri=usingpkguri;'; put 'else tmpuri=uri;'; put 't=1;'; put 'do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0);'; put 't+1;'; put 'rc= metadata_getattr(tableuri, "Name", tablename);'; put '&mD.putlog "Table is " tablename;'; put 'if upcase(tablename)="%upcase(&ds)" then do;'; put 'output;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_gettableid;'; put '%macro dc_gettableid(libref='; put ',ds='; put ',outds=);'; put '%mm_gettableid(libref=&libref,ds=&ds,outds=&outds)'; put '%if %mf_nobs(&outds)=0 %then %do;'; put 'data &outds;'; put 'tableuri='''';'; put 'tablename="&ds";'; put 'run;'; put '%end;'; put '%mend dc_gettableid;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getpk('; put 'lib,'; put 'ds=0,'; put 'outds=work.mp_getpk,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks'; put 'pkfromindex;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let engine=%mf_getengine(&lib);'; put '%let schema=%mf_getschema(&lib);'; put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);'; put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);'; put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);'; put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);'; put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);'; put '%let sum=%mf_getuniquename(prefix=getpk_sum);'; put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);'; put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);'; put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);'; put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put 'proc sql;'; put 'create table &ds1 as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.&ds2 as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table &ds3 as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&ds2 b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%if &ds = 0 %then %let dsn=;'; put '/* get all constraints, in constraint order*/'; put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table &pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.&ds2'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table &sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table &pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from &sum a'; put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table &pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data &finalpks;'; put 'set &pkdefault &pk4sure &pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table &ds3 as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.&tabs1 as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data &tabs2;'; put 'set &ds3;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn constraint_order;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table &outds as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.&tabs1 a'; put 'left join work.&tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '/* tidy up */'; put '%mp_dropmembers('; put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getpk;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mp_searchdata(lib='; put ',ds='; put ',string= /* the query will use a contains (?) operator */'; put ',numval= /* numeric must match exactly */'; put ',outloc=0'; put ',outlib=MPSEARCH'; put ',outobs=-1'; put ',filter_text=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local table_list table table_num table colnum col start_tm check_tm vars type'; put 'coltype;'; put '%put process began at %sysfunc(datetime(),datetime19.);'; put '%if &syscc ge 4 %then %do;'; put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;'; put '%return;'; put '%end;'; put '%if &string = %then %let type=N;'; put '%else %let type=C;'; put '%if "&outloc"="0" %then %do;'; put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();'; put '%end;'; put '%mf_mkdir(&outloc)'; put 'libname &outlib "&outloc";'; put '/* get the list of tables in the library */'; put 'proc sql noprint;'; put 'select distinct memname into: table_list separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put '%if &ds ne %then %do;'; put 'and upcase(memname)=%upcase("&ds")'; put '%end;'; put ';'; put '/* check that we have something to check */'; put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;'; put '/* loop through each table */'; put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));'; put '%let table=%scan(&table_list,&table_num,%str( ));'; put '%let vars=%mf_getvarlist(&lib..&table);'; put '%if %length(&vars)=0 %then %do;'; put '%put NO COLUMNS IN &lib..&table! This will be skipped.;'; put '%end;'; put '%else %do;'; put '%let check_tm=%sysfunc(datetime());'; put '/* prep input */'; put 'data &outlib..&table;'; put 'set &lib..&table;'; put 'where %unquote(&filter_text) and ( 0'; put '/* loop through columns */'; put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let col=%scan(&vars,&colnum,%str( ));'; put '%let coltype=%mf_getvartype(&lib..&table,&col);'; put '%if &type=C and &coltype=C %then %do;'; put '/* if a char column, see if it contains the string */'; put 'or ("&col"n ? "&string")'; put '%end;'; put '%else %if &type=N and &coltype=N %then %do;'; put '/* if numeric match exactly */'; put 'or ("&col"n = &numval)'; put '%end;'; put '%end;'; put ');'; put '%if &outobs>-1 %then %do;'; put 'if _n_ > &outobs then stop;'; put '%end;'; put 'run;'; put '%put Search query for &table took'; put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;'; put '%if &syscc ne 0 %then %do;'; put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;'; put '%return;'; put '%end;'; put '%if %mf_nobs(&outlib..&table)=0 %then %do;'; put 'proc sql;'; put 'drop table &outlib..&table;'; put '%end;'; put '%end;'; put '%end;'; put '%put process finished at %sysfunc(datetime(),datetime19.);'; put '%mend mp_searchdata;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewdata.sas'; put '@brief Provide the raw view of the data'; put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.'; put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered'; put 'for current records and don''t include the SCD2 etc cols).'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000'; put '|---|---|---|---'; put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|'; put '

Service Outputs

'; put '
cols
'; put '@li DDTYPE'; put '@li FORMAT'; put '@li LABEL'; put '@li LENGTH'; put '@li NAME'; put '@li TYPE'; put '@li VARNUM'; put '
sasparams
'; put '@li FILTER_TEXT'; put '@li NOBS'; put '@li PK_FIELDS - string seperated list of primary key fields, if they exist'; put '@li TABLENAME'; put '@li TABLEURI'; put '@li VARS'; put '
versions
'; put 'history of DC versions for this particular table'; put '
viewdata
'; put 'The raw data from the target table.'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_casload.sas'; put '@li dc_createdataset.sas'; put '@li dc_gettableid.sas'; put '@li mf_existds.sas'; put '@li mf_getvarcount.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getpk.sas'; put '@li mp_jsonout.sas'; put '@li mp_searchdata.sas'; put '@li mp_validatecol.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* configure macvars */'; put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;'; put '%let maxrows=250;'; put '/* avoid code injection */'; put '%let FMT_IND=0;'; put '%let SEARCHTYPE=;'; put '%let SEARCHVAL=;'; put '%let FILTER_RK=;'; put '%let LIBDS=;'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;'; put 'set work.SASCONTROLTABLE;'; put 'call symputx(''orig_libds'',libds);'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put '/* check if the request is for a format catalog */'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''fmt_ind'',1);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if searchtype in (''CHAR'',''NUM'') then do;'; put 'searchval=tranwrd(searchval,''%'','''');'; put 'searchval=tranwrd(searchval,''&'','''');'; put 'searchval=tranwrd(searchval,'';'','''');'; put 'searchval=tranwrd(searchval,''"'','''');'; put 'call symputx(''searchtype'',searchtype);'; put 'call symputx(''searchval'',searchval);'; put 'end;'; put 'else if searchtype not in ('''',''NONE'') then do;'; put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;'; put 'stop;'; put 'end;'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem with macro inputs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/**'; put '* assign the Library'; put '*/'; put '%dc_assignlib(READ,%scan(&LIBDS,1,.))'; put '%dc_casload(&libds)'; put '/* abort if looking for a format and the catalog doesn''t exist */'; put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)'; put ',mac=&_program..sas'; put ',msg=%str(Catalog &libds does not exist!)'; put ')'; put '/**'; put 'check if dataset can actually be opened - as library may exist but it may not'; put 'be possible to assign, and even if it can, the physical table may not exist'; put '**/'; put 'data _null_;'; put 'if &fmt_ind=0 then do;'; put 'dsid=open("&libds");'; put 'rc=close(dsid);'; put 'end;'; put 'else dsid=42;'; put 'call symputx(''existds'',dsid,''l'');'; put 'putlog ''dataset exists check:'' dsid;'; put 'run;'; put '/**'; put '* get the data'; put '*/'; put '%global dsobs;'; put '%let dsobs=0;'; put '%macro x();'; put '%if &existds>0 %then %do;'; put '%if &fmt_ind=1 %then %do;'; put '/* export format and point the libds to the output table from here on */'; put '%mp_cntlout('; put 'libcat=&libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%let libds=WORK.FMTEXTRACT;'; put 'proc datasets lib=work noprint;'; put 'modify FMTEXTRACT;'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%end;'; put 'proc sql noprint;'; put 'select count(*) into: dsobs from &libds;'; put '%put preparing query;'; put '%mpe_filtermaster(VIEW,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;'; put '/* get row count */'; put 'filename rows temp;'; put 'data _null_;'; put 'file rows;'; put 'infile filtref end=eof;'; put 'input;'; put 'if _n_=1 then do;'; put 'put ''proc sql;'';'; put 'put "select count(*) into: dsobs from &libds where";'; put 'end;'; put 'put _infile_;'; put 'if eof then put '';'';'; put 'run;'; put 'data _null_;'; put 'infile rows;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%inc rows;'; put '/* send actual data, filtered and row-capped */'; put 'data work.viewdata;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'if _n_>&maxrows then stop;'; put 'run;'; put '%if %mf_nobs(work.viewdata)=0 %then %do;'; put 'data work.viewdata;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put 'set work.viewdata;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data work.vwsearch/view=work.vwsearch;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%if %upcase(&searchtype)=CHAR %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',string=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%else %if %upcase(&searchtype)=NUM %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',numval=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;'; put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);'; put 'data viewdata;'; put 'set MPSEARCH.vwsearch;'; put 'if _n_<&maxrows;'; put 'run;'; put '%end;'; put '%else %do;'; put '%let dsobs=0;'; put 'data viewdata;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '/* physical table is not accessible so create from metatadata definition */'; put '%dc_createdataset(libds=&libds,outds=viewdata)'; put 'data viewData;'; put 'output;'; put 'set viewdata;'; put 'run;'; put '/* make filtref / work.query / work.groups to avoid downstream issues */'; put 'filename filtref temp;'; put 'data work.query;'; put 'file filtref;'; put 'x=0;'; put 'put x;'; put 'run;'; put 'data work.groups;'; put 'length groupuri groupname $32 groupdesc $128 ;'; put 'call missing (of _all_);'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%mend x; %x()'; put '/* apply column level security */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata'; put ',mode=VIEW'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.viewdata2'; put ',outmeta=work.cls_rules'; put ')'; put '/* get table uri (if sas 9) to enable linking direct to lineage */'; put '%dc_gettableid(libref=%scan(&libds,1,.)'; put ',ds=%scan(&libds,2,.)'; put ',outds=work.parambase'; put ')'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)'; put '%let pk_fields=;'; put 'data _null_;'; put 'set work.pk_fields;'; put 'call symputx(''pk_fields'',pk_fields);'; put 'run;'; put 'data work.sasparams;'; put 'set work.parambase;'; put 'format FILTER_TEXT $32767.;'; put 'FILTER_TEXT=symget(''FILTER_TEXT'');'; put 'length PK_FIELDS $512;'; put 'PK_FIELDS=symget(''PK_FIELDS'');'; put 'nobs=&dsobs;'; put 'vars=%mf_getvarcount(viewdata);'; put 'maxrows=&maxrows;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_getcols(&libds, outds=cols)'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,cls_rules)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewlibs.sas'; put '@brief List the libraries for view access'; put '@details'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';'; put '%put securitygroupscount=&securitygroupscount;'; put '%put ALL_CNT=&ALL_CNT;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewlibs();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %do;'; put '%put user in admin group (scenario1=&scenario1);'; put '%return;'; put '%end;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put '%return;'; put '%end;'; put '/* scenario 3 - an *ALL* libref is listed */'; put '%if &all_cnt>0 %then %do;'; put '%put all_cnt=&all_cnt;'; put '%return;'; put '%end;'; put '/* scenario 4 - specific librefs listed */'; put '%if &securitygroupscount>0 %then %do;'; put '%put scenario 4;'; put '%put securitygroupscount=&securitygroupscount;'; put 'proc sql;'; put 'delete from mm_getLibs'; put 'where upcase(libraryref) not in (select upcase(libref) from matches);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic err!)'; put ')'; put '%mend mpestp_viewlibs;'; put '%mpestp_viewlibs()'; put '%global dc_viewlib_check;'; put '/**'; put '* deal with invalid and duplicate library definitions'; put '*/'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'by libraryref;'; put 'if symget(''dc_viewlib_check'')=''YES'' then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings'; put '*/'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sort data=mm_getlibs out=saslibs;'; put 'by libraryname;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,saslibs,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'coalesce(b.catalog_cnt,0) as catalog_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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/usernav; %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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_abort.sas'; put '@li mm_getusers.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 '%macro x();'; put '%if %sysfunc(exist(work.iwant)) ne 1 %then %do;'; put '/* macro called by configurator - grab the URI of calling user */'; put '%mm_getusers(user=&_metaperson, outds=work.iwant)'; put '%end;'; put '%mend x;'; put '%x()'; put 'data groups'; put 'roles(rename=(groupuri=roleuri groupname=rolename groupdesc=roledesc)) ;'; put 'length uri groupuri groupname groupdesc publictype str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No groups found for ";'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri, "PublicType", PublicType);'; put 'a+1;'; put 'if PublicType = ''Role'' then output roles;'; put 'else output groups;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'keep groupuri groupname groupdesc;'; put 'if _n_=1 then delete; /* no content so don''t send empty row */'; put 'run;'; put 'data emails;'; put 'keep email type;'; put 'length emailuri email type uri str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put '/* credit'; put 'https://seleritysas.com/data-step-view-of-email-addresses-in-sas-metadata'; put '*/'; put 'emailrc=1;email_count=1;'; put 'do while(emailrc>0);'; put '/* Get Email from Person */'; put 'emailrc=metadata_getnasn(uri,"EmailAddresses",email_count,emailuri);'; put 'arc=1;'; put 'if (emailrc>0) then do;'; put 'arc=metadata_getattr(emailuri,"Address",email);'; put 'arc=metadata_getattr(emailuri,"EmailType",type);'; put 'end;'; put 'if (arc=0) then output emails;'; put 'email_count=email_count+1;'; put 'end;'; put 'run;'; put 'data logins;'; put 'length domain userid loginuri domainuri uri $256;'; put 'keep domain userid;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'login_count=1;'; put 'do while(metadata_getnasn(uri,"Logins",login_count,loginuri)>0);'; put 'rc=metadata_getattr(loginuri,"UserID",userid);'; put 'rc=metadata_getnasn(loginuri,"Domain",1,domainuri);'; put 'rc=metadata_getattr(domainuri,"Name",domain);'; put 'output;'; put 'login_count+1;'; put 'end;'; put 'run;'; put 'data info;'; put 'length uri name displayname metadatacreated metadataupdated $256;'; put 'keep name displayname metadatacreated metadataupdated;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'rc=metadata_getattr(uri,"Name",name);'; put 'rc=metadata_getattr(uri,"DisplayName",displayname);'; put 'rc=metadata_getattr(uri,"MetadataCreated",MetadataCreated);'; put 'rc=metadata_getattr(uri,"MetadataUpdated",MetadataUpdated);'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,emails)'; put '%webout(OBJ,groups)'; put '%webout(OBJ,roles)'; put '%webout(OBJ,logins)'; put '%webout(OBJ,info)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getusers(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getusers(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getusers(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '@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 sasMembers ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'GroupDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp rcGrp rcMem rc i j;'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(groupid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'output;'; put 'j+1;'; put 'call missing(email,emailuri);'; put 'end;'; put 'end;'; put 'if _n_=1 then delete;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbyrole; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbyrole.sas'; put '@brief List the members of a role'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.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 'data sasMembers sasgroups;'; put 'attrib uriGrp uriMem roleId roleName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'roleDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(roleid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,roleId,roleName,Group_or_Role'; put ',MemberName,MemberType,roleDesc);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",roleId);'; put 'rc = metadata_getattr(uriGrp,"Name",roleName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",roleDesc);'; put 'j=1;'; put 'if Group_or_Role=''Role'' then do while'; put '(metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'call missing(email,emailuri);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'if membertype=''UserGroup'' then output sasgroups;'; put 'else output sasmembers;'; put 'j+1;'; put 'end;'; put 'end;'; put 'if _n_=1 then delete; /* no roles so don''t send empty row */'; put 'keep uriMem membertype membername MemberCreated MemberUpdated email;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasGroups)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=userroles; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getroles('; put 'outds=work.mm_getroles'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put 'options noquotelenmax;'; put 'proc metadata in= ''$METAREPOSITORY'; put 'IdentityGroupSAS388'; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Id";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Name";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Desc";'; put 'put "";'; put 'put "characterstring500";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.roles out=&outds;'; put 'by rolename;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getroles;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getroles(outds=mm_getroles);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getroles(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getroles(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getroles;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file userroles.sas'; put '@brief List all SAS Roles'; put '@details Gets a list of all SAS Roles'; put '

SAS Macros

'; put '@li dc_getroles.sas'; put '@li mpeinit.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 '%dc_getroles(outds=roles)'; put '%webout(OPEN)'; put '%webout(OBJ,roles)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISLIB %then %do;'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for ISLIB";'; 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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne and %length(&open_passthrough)=0'; put '%then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri'; put 'authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=SASIOSNF or &engine=SNOW %then %do;'; put '%&mD.put NOTE: Retrieving SNOW connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value server up_uri schema domprop_uri'; put 'authdomain database $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',server);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= server='; put 'rc6= up_uri= rc7= schema=;'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put 'call symputx(''snow_schema'',schema,''l'');'; put 'call symputx(''snow_server'',server,''l'');'; put 'run;'; put 'libname &libref SNOW SERVER="&snow_server" SCHEMA=&snow_schema &authdomain'; put '&database;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql;'; put 'connect using &libref as &open_passthrough;'; put '%end;'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 cls_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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ')'; 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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '&prefix.PROCESSMODE'; put '&prefix._STPSRV_HEADER_LOC'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=Metropolis-200.0609337a726323e0-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFQgABMAAAAAm8AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfNH55kdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcaAAAOdjy+ejlHU1VCAAAJMAAAACAAAAAgRHZMdU9TLzIAAAlQAAAATQAAAGBoPqzrY21hcAAACaAAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMDAAAADAAAAA8EY4BjGZwZ20AAAw8AAAGOgAADRZ2ZH12Z2FzcAAAEngAAAAIAAAACAAAABBnbHlmAAASgAAANnMAAGgUxFIgN2hlYWQAAEj0AAAANgAAADYLYYgUaGhlYQAASSwAAAAhAAAAJAd2BDJobXR4AABJUAAAAogAAATuuPI/FGxvY2EAAEvYAAACcgAAAnqJanBwbWF4cAAA''@;'; put 'put ''TkwAAAAgAAAAIAKEAeluYW1lAABObAAAAYIAAANWLdCE9XBvc3QAAE/wAAADoQAABiGXFj2KcHJlcAAAU5QAAACBAAAAjRlQAhB3ZWJmAABUGAAAAAYAAAAG9nhYmAAAAAEAAAAA1FG1agAAAADTwZ2GAAAAANS+pvV42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcBbFbVFf7Oufe+v/0LWEoLCB0DUhkxTWWESUVGiWMFsVPDmEEHZlucY61Q7BjZiDFKHZql6YzDDpE0qAyMNsBQsSKypqvOOUdkY6YhYFwHyDYm07nFCPL2vfN+6F9ot/GFj8O59917zznf7bmFAMhiMhZC5tXWLUYBPD2I''@;'; put 'put ''Yzj+I1C4hm83rUTpim82NaB8RcOKBs4G/cloOiNhx++yGI0JmGIehwrUuY50NFplq0rUiogfyfDV/GKc+QJKL0BQG7eSA2ajBZ8ilnFQHoPzZKwcQRGG8WR/j7vj7XFvfBRD/Ik/GHLkt4N6+7h3/v+Pxz8dcoX3hhwZ+jx/jPcOMbI97ov3JbjI38u/v0kw2B5xK7OkmMhMT2G2PkcoqgiHqwiP''@;'; put 'put ''6UTAF4gIM4kMriEKMIsoZG5ns1JrCMH9+BFnPkgEZryF/hcIwYuE4CVCcZDw+APhcZQI+DMR4TgR4T0iwmkigw+IDM4Qhazep1wtJrJSLMUolBIpIZdKKXkcK5vl2tOokgp+cyUhdu70xGondnZibycOmEcUoJYoxAIii0VEERrxfa6QRBJZJJFFEvATPMr5bUQhfoZNnP8Efs7524ki7CQy2EUU''@;'; put 'put ''4BdEBruJAjxHZPA8UYA9RCE6iULsJ7LoIrLoJrLoIbJ4lRD8mhDLToR3iCL8iUjzopYXtbx4y0uwvATLi7e8eMuLlzEyhvm6XC4nJzkKXLWKGZrCGlexttNZ05nMzCxmpBGrcDea8D2sZi3vxzo04wFm4UFGv5MRPcdKvsgKHmTljrJix1mp0zzJGbtZxdy3NLlfeq/dw9ekiXEPp7r2UXet8b8G''@;'; put 'put ''UauNDHYHLoycSjDIl6eHvBunziue9/po3Bw3XzyS3rp4c7x50JG/2DeKctOEmCYUXyMcbiU8biMClhIRFfEo5yRqEFODmhoUHUSEHURklRartFilxSotVlfFMcLhBOFwknA4SwScIyIZKSNZ11EyilwmZeSkomIVFRkv47m+ohKXEUUYSQwzpYspXU3pLqf0+US+0r3FE+XFkzGlu5zS+zXuLSpv''@;'; put 'put ''UWUsqvNKTzWeqnsvMbSuk2i9aVZzESbKdRZnxvTrTL+aizlRseYiT7SsefHnK9pZFjIyTa7h7slPr1pGuIj1upVxLWUkbYxkIx5jNE/gSTyFrYxoOyPZwdvYydN28ZQ9PN0x1uAkT3aOJxjF3cZwl/FccYLpWTHCOkqJqaOEu9TQErNr2ImORBPIfcx/t6yXFnlENkq7bJVnZJfskX3SLa/LATkk''@;'; put 'put ''h+VdOSGn5EP5WM6p16wW62gt18k6Vat0hs7SuVqrdbpIl+jteofW6ypdo/foOn1IW3WDbtItuk07dLd26n7t0Tf0LX1bj2ifntT39SP9xMFFbpgrcWPdBFfhrnTT3NVutrvOLXA3usXuNvcNd6e7yzW5H7h73QPux+5h1+Y2uyfd026He97tdV3uNfem+73rde+4Y+6v7h/u3+6sV1/gR/hSP85P''@;'; put 'put ''9FN8pZ/uq/0cP88v9Df7W/xS/y2/3K/0q/1af59f71v8I36jb/db/TN+l9/j9/lu/7o/4A/5w/5df8Kf8h/6j/254EM2FIfRoTxMDlNDVZgRZoW5oTbUhUVhSbg93BHqw6qwJtwT1oWHQmvYEDaFLWFb6Ai7Q2fYH3rCG+Gt8HY4EvrCyfB++Ch8EiGKomG8HU26k9xsPN+4xnhDwmg0bjPP2n5/''@;'; put 'put ''jm8wrjS+1nhlwlpm9vXGc4wrlD9T5Qrjq4yrE0a9cbu+TG4wf6XxbPP3Gp8xz0Tjx40nGUfGC1w9+SnjpsFZf5UXY435L2F82XiLcWM/y7I0drPvMn7VeMOlnGbA7Ev5euMK7fpfrM8OyFXXYIy5xo8b1/czs9dl2fvvnOaza1CelMdNeWceYOfVtNn8V5g/355vOWwxe1le5tMoBtg2mqoi359m''@;'; put 'put ''tTq1bU6qmbQ6adSpPnN2zp/MaTO73a05r96cxg6a3ZPYuZqmGVubU3K4yJ+eIc3bAbPXWo0OJfNdqsAbbK9em2M3ItXtAH+l2WdyNdp5QdX5/vQGXZunmbQi+fZWs7+e+m2+3QstM7/pIae0SXn2HOPIPEPZfzP7bouu1uw3zc5fuSb+Jbkq3n9RpfJ3rM7d7q7/gwfOVHzW3qXgu2sqs5K8Tj27''@;'; put 'put ''diW7YPLCjvB5vsQymIFq9rCkc49g3/4ie3rSuUfaG7XEOvco/l61kH2ojijDTexzo9npbuHvPkuIcuvln2HXW8au1ci320R7vc1kR2/nelvY+b5ive+r7H4vs0O+ggP4Dl90p/FDe1VuxD8l4DF24vHosJ7ayfOKXGa/m0WQeL2p8D7cSV7PbleEsdyrghFNw9U89XU85Y1YzNEXTLu/Mz5sbHeG''@;'; put 'put ''Gu3ng8bLjbcZ9xmfNS7Cl7jPcnxXMlIghZKVIhkuIy490X8AtlKXWAAAAAEAAAAKABwAHgABREZMVAAIAAQAAAAA//8AAAAAAAB42mNgZrJgnMDAysDC1MUUwcDA4A2hGeMYRBjNgHygFBywMyCBUO9wPwYHBgXVP8zS/40ZGJiPMqoqMDBMBskxsTKtB1IKDEwAxlcKNgAAAHjatZNZUI5RHMZ/''@;'; put 'put ''/7d9ESoU9fb2adNGohRF9qXIvpSs2bKv2RrrEENFUsieJKMZE1NTthvuuDVjjL7PlVvuDB3HV0wzzLhyZt5z3nPOnOeceZ7fH3Ch6wtBdI9U6pk4565SrMcljMONgZRwizru0kgTzbTQJh4SIIMkTAZLnCRJqqRLpkyVHMmTQimSEiPVeGW8d4kyj5ut5hPzi+VuBVrBVqhls6KsYVa6dd/mH/lN''@;'; put 'put ''KX2HxY0e2o9p45n4Sn8xxSaxkigpkiYZkiXZkisFskE2a+2XxlutfchsMdvNz5ZhBVhBVohTe6iV9ktbfVQv1HP1VLWrVvVINauHqkk1qgZVr+rUNVWralS1qlKVqkKVqTOqVJ3ofNOZ1Zn0/ZOj3FHgyHfE2Afa/ew+di+7m93o+NrxuePwh5B3yV1e/afmbng7k+CPWwSj+8/4h0bXSRdcdXbu''@;'; put 'put ''eOCJF9744Esv/OhNH/riTwCB9KM/AwgiWGc8SKceikmYTiQcG4OJIJIooolhCLHEEU8CiQxlGEkMJ5kRjCSFVEaRRjqjGUMGmYzVzGQxnglMZBKTmcJUpjGdGWSTw0xmkcts5jCXecxnAQtZxGJNWh75LKWAZSxnhX7/Dnaym2IOcZzTlFNGBec5RyVVVHORGi5xhcvUcpXr3NQU/WT0Ng2apXua''@;'; put 'put ''pp9tFau1HdFs4Gy3N+tZo/tdnPjtVuFfHLxAPZtZ2WNlLZskRo9b2M4x7DgkXPMZKVG6AiK4o3ceoGmWBF0P8d1nipxhxLKNvWxlH3s4wEFdS/s5wlG9dZhSTnGS17qaerFOvMRbfNgofpp/zx+QzaroeNpjYMACHIHQksGSaT0DA9NuJlYGhv8hzNL/jZl2///CdIBJ8P+X/34gPgDIPQ0ieNqt''@;'; put 'put ''Vml300YUlbxlIxtZaFFLx0ycptHIpBSCAQNBiu1CujhbK0FppThJ9wW60X1f8K95ctpz6Dd+Wu8b2SaBhJ721B/07sy7M2+beWMylCBj3a8EQizdNYaWlyi3es2nUxbNBOG2aK77lCpEf/UavUajITesfJ6MgAxPLrYM0/BC1yFTkQi3HUopsSnoXp0y09daM2a/V2lUKFfx85QuBCvX/bzMW01f''@;'; put 'put ''UL2OqYXAElRiVAoCESfsaJNmMNUeCZpj/Rwz79V9AW+akaD+uh9iRrCun9E8o/nQCoMgsMi0g0CSUfe3gsChtBLYJ1OI4FnWq/uUlS7lpIs4AjJDhzJKwi+xGWc3XMEa9thKPOAvSJUGpWfzUHqiKZowEM9lCwhy2Q/rVrQS+DLIB4IWVn3oLA6tbd+hrKIez24ZqSRTOQylK5Fx6UaU2tgmswED''@;'; put 'put ''lJ11qEcJdnXAa9zNGBuCd6CFMGBKuKhd7VWtngHDq7iz+W7u+9TeWvQnu5g2XPAQdygqTRlxXXS+DItzSsKCkx0vUR0ZLSYmBg5YTlNYZVj3Q9u96JDSAbUG+tMotiXzwWzeoUEVp1IV2owWHRpSIApBh7yrvBxAugEN8mgFo0GMHBrGNiM6JQIZaMAuDXmhaIaChpA0h0bU0pofZzYXgyka3JK3''@;'; put 'put ''HRpVS8v+0moyaeUxP6bnD6vYGPbW/Xh4GAWMXBq2+cziJLvxIf4M4kPmJCqRLtT9mJOHaN0m6stmZ/MSyzrYSvS8BFeBZwJEUoP/NczuLdUBBYwNY0wiWx4ZF1umaepajSkjNlKVNZ+GpSsqNIDD1w/DoStCmP9zdNQ0hgzXbYbx4ZxNd2zrONI0jtjGbIcmVGyynESeWR5RcZrlYyrOsHxcxVmW''@;'; put 'put ''R1WcY2mpuIflEyruZfmkivtYPqNkJ++UC5FhKYpk3uAL4tDsLuVkV3kzUdq7lNNd5a1EeUwZNGj/h/ieQnzH4JdAfCzziI/lccTHUiI+llOIj2UB8bGcRnwsn0Z8LGcQH0ulRFkfU0fB7GgoPHbB06XE1VN8VouKHJsc3MITuAA1cUAVZVSS3BEfybA4+rluac1JOjEbZ82Jio9GxgE+uzszD6tP''@;'; put 'put ''KnFa+/sceGblYSO4nfsa53lj8g+Df4sXZSk+aU5wcKeQAHi8v8O4FVHJodOqeKTs0Pw/UXGCG6CfQU2MyYIoihrffOTySrNZkzW0Ch9PBDor2sG8aU6MI6UltKhJGgEtg65Z0DTq8+ytZlEKUW5iv7N7KaKY7EUZzIApKOSmsbDs76REWlg7qen00cDlRtqLniw1W1Zxhb0H72PIzSx5N1JeuCkp''@;'; put 'put ''7UWbUKe8yAIOuZE9uCaCW2jvsopiSlioIj4IbQX77WNEJi0zgy6BImRxsrIP7YodOaKCdgLfetIq79tC7c918iAwm51u50GWkaLzXRX1an1V1tgoV6/cTR8H086wseYXRRlPLnvfnhTsV6cEuQJGV3a/7knx9jvW7UpJPtsXdnnidUoV8l+AB0PulPciGkWRs1ilEc+vW3gyRTkoxkVzHBf00h7t''@;'; put 'put ''ilXfo13Yd+2jVlxWVLIfZdBVdNZuwjc+XwjqQCoKWqQiVng6ZD6bnZrwsZS4LEXcs2TXRfQdPCEd4r84xLX/69xyFNyiyhJdaNcJyQdtHyvorSW7k4cqRmftvGxnoh1JN+gagp5ILjj+XuAujxXpFO7z8wfMX8F25vgYnQa+qugMxBLnrYIEiyre0k6mXlB8hGkJ8EXVQrMCeAnAZPCyapl6pg6g''@;'; put 'put ''Z5aZUwFYYQ6DVeYwWGMOg3W1g653GegVIFOjV9WOmcz5QMlcwDyT0TXmaXSdeRq9xjyNbrBND+B1tsngDbbJIGSbDCLmVAE2mMOgwRwGm8xhsKX9coG2tV+M3tR+MXpL+8Xobe0Xo3e0X4ze1X4xek/7xeh95Phct4Af6BFdBPwwgZcAP+Kk69ECRjfxjLY5txLInI81x2xzPsHi891dP9UjveKz''@;'; put 'put ''BPKKzxPI9NvYp034IoFM+DKBTPgK3HJ3v6/1SNO/SSDTv00g07/Dyjbh+wQy4YcEMuFHcC909/tJjzT95wQy/ZcEMv1XrGwTfksgE35PIBPuqJ2+TKrzZ9W1qXeL0lP125132PkbZTO6LAAAAAEAAf//AA942rV9CXhbV5noOedKupIl2b5aLcubrNXWamuzvMjXS7wvcbzFSRxnc5y0KV3Sli4h''@;'; put 'put ''pLQNFAqUAWZYhr4u0KFMS5K2dKHtFChQ2qHLDG+AecMH5Q0zLG/YBjowbX09/zn3Xlm27KbwfS+1JPvqrP/59+UUlaHFtST+FOdGHKpAduRCXtSE0iiHutAQcomO3nxnezaTbA766qurHEKlQUNQWSKs9Qge3p60e+3JtDedTPPsk4df1af0Gf2k38CTtPq70oZ1yCbT+FPSs7jrP3t67+vtve++''@;'; put 'put ''3kaPp7e390iv59b7jjR6jnjuu+8+z5Ejtw4M3Hd0oOFF7md9Hr8Hfm461jgw4DsIvw14Onsbj9zQ5ozvvPLKB6+8cmd8xRP3wA9CBE2v/R6dI+fY3vxiI8IYLSKEykcRIdySBnOckxvTaDQVmnK/UKnlnWFrkvM6AulUJtnqsNt03v3D5oTG7bZZq6ut5JxkedFts7jdFpsbobU1NIgfxWPkk5WN''@;'; put 'put ''qAyhSg7eH0F03iC8XQfzulE9umH0vHfnbjFUoSNIyxFMEF42YoOhfLS80szxvH7RVEb0emFUgwmpIGNuMUAfsC+Rnj9a2k9puCDWIVRfV1sD07irXVVOWLBVKPzja8OYT/Je3ptlr2ySvZI8e/H0S/ybzI3mG2Ntsbvgda352sw7zdcpf91gfviuzF34a99NPwb/0t9NPw7/0t8FSMbWHiUR8gfk''@;'; put 'put ''QSEUR51iLub31dVWu5w2s6nMYOaIDiOOjCDCkZsRRvgWCma0BHBxorGmpqZ4U9xhFyxa3hH2lWPAkXQMB7MOpxDD6VQeZwFZHE4engl12I4cznQ5fGTSqUBQIJHUkR1iz8loaOfxowda9+bEKxZDvpno5e+Q9os7OkaweWZ06ua5NNfdy2cjrTsrcWX1rqHkbFrX2WWcbfVGeOlN9+5JXJO2/Z4f''@;'; put 'put ''bpWyI6mWDof0JqxNi+Jr/0X+lXwJMMUKpxZHHeiF0fNVcHJhI9aWYazT4hWkQ3qDTn8MaTRoiWCKSWY4Em7JxBOOq+DG3KPng9Al/pZdEDRl/fglE+Z5Jw9nntyiByHQlnZDW/daWBADiURDg82GUKIj0Z5JNcQbYqGArd5WV11ltQiVsJnyQDlvD1tk4CZbAaa2cuzFSey1UKB6G3V2myOJNn2f''@;'; put 'put ''x+vf/fVAMDQYiQ7CexR/qFNq7rwm1x6JtLWH8dRAKDgYlb+KtdGHuQhejE7EW3ZGo5OJloko3rU6hT84kM4MDmTTA9Lx6ERLYiIWnYy3TEYTA5n0IP0K9sehprXfkxPkMYB9GPhPXuyIR/11NW6X04DLOFLPkIpiPl4CMnaMaouwKhJpaIikI6mGcENzuFEHmKUN6ryNdE/Z4o3BN85M1qnjnYju''@;'; put 'put ''zCnv0pINBOHPOpwkiaV9JzuP5O7x1EXGE5Hh8Nxc5spIUyaRvFr6dFdt/URfrjk0fjp/tnmomT+w3LKQu2kgOuiLjITDI835UZ/4TvFA1fHha8jx9lhNV6ghG27uWj03d8tY1/6Q6AViAH6BPkE+iUwoOnreAYhipCyJnS8GJKhE9M95+BMvUtIZX3jE7iOwHWuBI1Vg72x5lSA4y/kg/o9D3soq''@;'; put 'put ''p+A9lIHW+bU5HCNPwdi6h01anAgzNpZ1AvnYnPznL7nksHdu4Zx3149vuOHHu/27v37VDy4EYCKg5zlcp/bTQT8nI7asDLDYuYU572HofMuFH1z1dejHutN+Hfgm4H1fQrNIFLv8GJPJHd2xRpdNq0d4F9YiboTDWIORFqMVHdZqyRJFaO0Y7G4WzQwPZdJNwdoaN0+xE1bajXngBnBqQfgjm+nG''@;'; put 'put ''wYD8W7LV6ajHwSIIZLLAJthzuw06VWCH08F+Z73hPydj3V82G3TeioZyrcbMa8qc0XAkZi/T8GatxtLs0xnMwKz0uspKLmTTas08VyaEdRGnI+wo43izTuMIOYw6vdmAbzLra1qaa8xVPGfSa4y8WRAsFiNv1OhNXFljTXNLjd5s1jta46ZyrsHImXRaE18mEGgimHiTVmfiyhss+nirQ2+mB4v6''@;'; put 'put ''0HFSTlLIiAKAExoOa2YBl4EzYA4tA7nTo9fgccbDK3V8dRh7qfRMUymaJOXfzD/3XP6bOP5N+gsdb3LtNHoM7UTlyCkC6aJBFaWAMHwWij2A843rIo2fDJqtINGcNfWh49EEFW3+ulqxlY7Vhn6LO3AMqLFKtDNknF1HRqGSoaLH7mnDnLSKY11sP8MgYz8H8xuptkCfAJfD2InpQRtRmY+DAy6W''@;'; put 'put ''qEcUaWoqSFK89pu1R/HHyU9hXkEsp4OC5MBXyxNSVoUnB6S7B8hP33wZMfnaAbziGHkS2Fs9iohNgFhsxzJXwCDY2QIqgZ4q6yvrqhyMD+pgIZrNfI6kUzHsbaREAgwA43cPDr57aur04ODpqfzBTOZgPn8okzmUN+29Z2Xl7r17715ZuWdv59jZudn3jo6enZs7O8ZgUA3vb4C81yG3WAVHyQG8''@;'; put 'put ''RmSujQE/xwQrAx0fzCYF75O31D6YEsmB2ZaTq1OI9W+BTelhPy7ULAaNZbAdwAZCRhg4GbujCssiYjJGcPqCGr4qnPVT/kVXzwcLHK4Cw/m0wKn0Nu1oumJnLHr9cOeh3NjMt/BJqantX/KXppp6A5f7xf7UYq7v1NCD8hmGAJ5amD+MusVOdzXM5QOChhXAMkCSQwsCconjNEuAoLAYkJdLlKad''@;'; put 'put ''jJzDqNnn9/j9PO+Ck6acI9nKWGsYp52tGXmNOj6YUbmwAvxXTkWivqP5xFj40NyOgbF9zcORzEJTePH9+SPtA22dU52X9Jp62puTWX9PU763E/d3+vO+dCp0KjGX7tollM/2ZfemGD6E4C0F8C9DZhQVm00YUHBEp4V9YAT66lEAIROlFZoxo9FoNgINC5ZKul6/J4iTAtVYvWkB49ukzxvwzPil''@;'; put 'put ''l4rSzx9swy9IuY4Hf4ZvkM7K59QGcHLCPA1U73EAexMqOaJBGE4K3pGGAYksypJ7I5AaUH2jYA2UAEk+P0pVfKaAlj9+V6S5eaU9PhGJTCQmR1sN+IPSQ3zfXOdyZ/5Er6k9GY8lw2PRyFAoW4WXul5vSR/I96y0M1h0whr9cJZu0ON7xW4gIo4EqohWQ0Z0wGI0Wk6zggpilIcFqtyipgahmqaa''@;'; put 'put ''kK8ROld7/QE9KMRIWRLlIBTLnHyAkksthj8s6gbokSbxe452dZ3oPX1m8NTYO2Z9o3O5/Znqy3r9E5HYRLz/sLly3xB+MHOwO3+s68k7V/7mwK7W4anb52zpbulMfLw5Ptw03rV7WYZzB2zEwOipXqwBGYIZNVE+hJnuDtovaDccLA970h47MIinpHfjl6TvDJOrulpW30P1iRTAoYbBIQzj9Ys9''@;'; put 'put ''Nh0BbjvCFwFB4Rp6AAKGs2JcIxKhcIh0RNpTrTXhmmYZGhEDZWOUe2Q2qRQKfAqwkFmJU/k7WE4YZ/nJ5T2zvZ3D3cc6Oo91j7X3zvZc0dc0Eo+MREB7iI+EWnYlUtORyK50YleLqWU+27Xf7pjLpqZjsZlUbtbm2N+ZnW/Bt3tyfl9HY2OHL5BrINIFXz4Q6vZi7O0OBfI+tNX511XC0Rv0YD8Q''@;'; put 'put ''2LoWCFlLVoAUONgvxzlGi6SFev6NDXTHAa+fnb9DPn5Q0SnCdmH6hwIBC4XFOvP83KaT72L4sIOdfAvDAvLkxpOXsUE6Q09exgF5D0ym4NdBfsCyRs9HQVNyUqbOVirI1ptWtt7cVFDBd8CkVoqfL4gWkwkhk9PksFQyQaRTNA1VEJEthJJN+cR31lipdLLWSHOqnAJ7j8la/DrYexWwDh4JyIS/''@;'; put 'put ''gAwXMH4cf+F8MkxxN4sWsUSmAXd1D+sI6FPWtN9uxvYsfk66AZ/FXZlX808/nWf77ENfJeX4XwBbedQo1lMcp2Ye2E4cmVVYPuGoLlBJOT7lEvS/Pvz3Upq9/iV/Zx7mHEOLxKrOycGc2ShOa+3aMXwW5nxOyn0aZnw18yqd0732e/wtwI8q5ENZMeUwGSmLxJTNczDx6SKZQxm+Fms0Ts2Yy+Xy''@;'; put 'put ''ubz+Kl9QRxeiys11rs5MuWI5/0z73qSvpyk77w/vO9u+mErube8xq+C9Whvs8DZ2+pLx5pMtM8nIzpzxPUWmNV1nZO12bge5F3WjCVjL+TrAAaHRQ/Rcg4Vo9J0dYGdyI+71Zwb12YLcOGQ0EA3IAR3lyroy0C35w0hhdsBE9HpuCTYo6KnNVg/to2Bca7BhHr3dTk3UNgSY6Q2cfuWinbWAqS1U''@;'; put 'put ''JnBIu7J9L57XzSOdjl9i3ScXwMarEkWExAlxfGgAgJEPBJoCvkDAxLtLtJnGQLCIOlsdzqyTZyZc60bmlGxldoGXqtHMzqOPHUncf/7YVV+54siDR5NTsWinvm62JT7c3HO8vXXQYm4vi4Tq69oDi5/Zu/zFlf137csfzlra39Ef3GMg7en4zkRP6uqjDx65/CtXHvzs0sRlGbBDE5GJZP/Jvpi3''@;'; put 'put ''V9v6T+6GQHihd/Zj8yvnlvd+ZrHG4/Y3vLY8aitL5zMLqbYBduYN8PZ14Ps8SPKwGDJgAMwIYCCgpAakOBWrYFRQjUqv15fpy2QVuQqkOM9M2qARk6x07eAAjtOfw/fff8895Nzq1Kv4jHQGgL4fxj8G41eCptWIusR24Pwwgw6oDuSjdhnOVnEQ8VjWxOlc7mqL4KmvbnQ3VjkEl8UVadAzRXij''@;'; put 'put ''APBgquqAzmO3Kr8I+3Frdi6RjLf3pRY7pK/hUMfoeNdPftM3N9f3G3IuMtGSHndWL7Zl5hL41r50qu/X0qPjHR1j0m8pH6Hy6wNAp7UoJoarXcYyiiQjKrt2bHBhwYNaVBPwB6gLS7N+/nzpmePsvQcO3Ls4cKYlErokN37LxMQt47lLQpGWMwMmOLmlew9mWyNNian3Tk6+byrRHG1pg3OhcHuE''@;'; put 'put ''6Vd2ZrUUwMQMcgVMJqPNYrSb7IEG6tuxqlgZxlkF/ShEfn7JfYuL913y85/P3zY+ftv8/eTc7r8+fPgzuzuG37Nr103Dq88x+T8J88VgPiOKixGVK1JdSrMIoqu8WBtmVoZR9niBamWl/FGQX3fg66T34TslD/4Rueq1vCR1kXNdhfHTML4BNYkBdXzK6dioqooBXxiQgY7MeB4b2cvGPSXd0oP/''@;'; put 'put ''nQ36VXVMel53wnl5UFpsBa0LcfWEaLRMiddqEEMuZgM7qCbKWCxoG6ARBryymecRNhLvpsNLe/EHsLXljuFFdoDDd8ABXt8lH2D6RNN38GHpv+M5+QjbElH1CP2e86iw56sYTIOiT1FXl0FHpvulfqkKtBmWmO4WXkl4J1eJ0qIo4nspOeFuum3pJdwqj4s+zHysVurAWLd5ZHMRDJ5JUaS9qJ0E''@;'; put 'put ''sucZaCtQLGLmBcNopiyTJQ6QycnALqBKm18D3Ys0ZVgGJbMHTzZEnXtbwv0BEawzU3cyHs1Fdrbif5RifZd0whz7YKgr2D4bxFqDXkuYdMPM88bJnlOrxSLL06SAkwagCRBd+0R86az0Kk5NS7+7GtYrnQSd+znp/Xjk1EsMfv0wLoFxtVQnZYumozE6kEGnRVpBoIv2A54kBUKkXrELUG71Q6w/''@;'; put 'put ''paFfrK+L32JdNkFdlwGMEq9ggBPYL2Id1omi9Lr0Ol2WDf/H6hQJss9/Vsf9S4bLdaKbJ6RkVEthVAzL8spjPg4jDtFjeYIMwniDq09Q/ktx+Hf/P+xqmensv/vAgbv3j988MXHzuIy4Css5eO/S0mcPdk69b3LyvVMy3jJ5QHH2IOzNBHwHLGNYBZAqh6mbZN2RD1ssN9ssZnu5XQg06KgT31Pg''@;'; put 'put ''PXavypaFSVw9cGVPz5UD/0fEFfMnTsy/TM61Hc6DHJNwx8zg4Kz0fDEMbGBV5sQM9atriQ7MPOaB5DCHh9fNp2Lftt1uD9mDsUCQMmGQ5E5+gzSGFZFsMOvcJIrJ7yJNY00741d2LaowWpu4pum6Bl8BSLjq2kRvYkcgXACW9P38cuJY8FCqGFxF8CqH9YD8JNQBp5qmy6CKKOxNIXefzyMIVsp7''@;'; put 'put ''YLVWbxBsYIFBTptUYEYOXjb/6MjDz4kMdFLsZQY2fMvV5RL8Y+D7NIWc7Ed8jUTIUyhI5ZXDTu1iQrVKFVTUyVskr4Io4Iv4KKgojSsqSiCoQmud+zmcCk798v3p0JFb0xNNe49efVnHSs8tJ0Lh49nYUNOeo1demTsxYsylWo94O72Zrir39Hh2T/JQa3Pc2+VraXO5d+/MLiRlPhgFGA0zHUP2''@;'; put 'put ''1RTMStm5oqja2At2pReoxf0rUvMrEczKLoWO5wA/zkJ/O/KIdYpDH+PirdmRzeazqaKY8q2NLAzXnhkUswzzxMEzU6aRW2bwJ6WVvuMdHcf76G8zt4zIa1X1IR2dS8vsYOCaCsOUuQ6o/DLXoXwM+Ab5uvQPA/CDTdhEuS687iIHYCw/mEkaRkswVhnl+8AoaFiJiXG2eeAUlkotlaJJN6Y/nNeI''@;'; put 'put ''vf6hbzwz+JWvD/285xvf7IHhniL97DVFdq9+Xl4nyFByM+NtwBsNOhgajp6yn/JRLOOaxWIRKFxhlTCkgY2OT2Hd5I9+NIl56b8nf/TqJJ6X7sc+6Qd4Hu+Gd588tgXGPgNj61GtWK3jgAgLDE7xBFgE6glQxoQjC0m/2PnTn09I/68PV+G/kj4Pox2XfkbHaoexRFXuU3iuu9kKvoWCm80isBVn''@;'; put 'put ''ZRcDCP92/IC0F78hTeMLq68nSXdXcvWrsuyfWvsgbiM/fJtWXBIQC15TPz137qfkh62rVup7XXtj7VF81zY+UA50W+0AXpJdoBi1wHxVhflk/9wyomoZ9dfS+dD6fE5g+ml4tcB0P+0hv2x98xwdPoM/gx+UceuC7ki/6ADuzryWMDP14F6teFgu6FC/NQnsgfd+L3NX+00350AK/erVV+mapbV3''@;'; put 'put ''kl1r52G6BjbGNj5jOgQPACRkZvWBnTn5XLuJiN4kL0NfJ+trgp5D8M3VFhDH8qxZp7e798Ys+UrFh2X+1gr6wy+IgKoB43aK41WY0zhBIAigxdfVajmdVkPNWK2OaGVvJdXiXYxWRvVYp1OVLjeYmO6A2++ph5FcPr/XagA4IYcdAFXs6mK2EbVwLaB+qeEwfPpE3n0iu+uSzGL7xNLAzoFp1/4F''@;'; put 'put ''1yXls5M9uyc6iHDNQekbuyKte0daJyL19r59sWSr5M63TVf3tCa75Jg0yYN8sYAF0i12VpQRrYbxycrRglvGxXSoDc45qxUha6PV43ZBT2Dbm5xzQYpTQrFPThW9HzuRz5/o7T5cn8/XH+4OzSQSM8n0dCw2nSbC4I1jY6cGO9PL5Enp39KdUk3boc7Og23U7X0wC2eUAHj/BuC9tQ3i2t4Gcbyl''@;'; put 'put ''DfLbGwYHbxhKLvrD7qFgdl86vS8bGnaH/ftTpqF3jYycGgr5mmsbcgc7Og7lPHXN/iZ69hmAm2cdbgLH4EahxQDHVGvlrHnmz1MU7GK4WQJegcINKwe9vkqBbJbLHgquXhV4NzGIJRn0yJOrO5bTnYOnxsZuBOBh9+pVWQqxTNvBzs5D1F4CuBEfwM2J6qiVCTyGI0wQE05DlgvLc43qivSHqiqE''@;'; put 'put ''quqqat3V8JcDDAO6Up8MsWItwlNHkkTHe2Cx+MgBd7Dh+vb+6wZ3XLNj7B0d0qg2M5uauLQMX6s7MBn11TZ7o0OnxkZvHBy+dSE934L/dnnn1BFGfyAP8BR5BaTVHrGsAuu0lRjpyIjsDKlBOp12CTSGKmZwo0XQfmTHG8tQqAZlVwd0tlL65YJY5vWy2BXPu2Ve56X8hzmGmPNYZ3/s1lvzMzP9''@;'; put 'put ''qVSkwRGo9hFtTkrhb+cG20c8MUezR6b1+NoMqQEY0lj8kLijrpLotIofE2gZGJ6OrFD6holBsaFuGVfBmWlFYw0gO+VwOIxQH/D7fZTGsaCQC7MqMhu8mYAF6RIsqOm+cqjzSl9Nw2LLwrG6FbH30q6uS3t7jtbdOptIzKaT0/H4dJJopdbelfZAfWutZ+/k/nS7eMXAjivEXPqQtCcxlwX7vmUu''@;'; put 'put ''DdBncB+Htz8AHttppMIi+7YZDoOyxrxtriJzDFQJwea1UfuT0jqAUnHXCAq548sWWvIT+ehIOJ+3L7YRoXVPTnoE9/dMB3qD0mNA16+FMwye3fD+cfIVkNEV1AIsuFOr6MEJo6o1XVFuNjF3qXaTu5QHEbLb5bJY4AW8hFzisgjV1YLFtbz6Boy/9tTaBPoIG99Ncb4C+HI51sBpaYtm4jiGJxrg''@;'; put 'put ''chqNWzPGXLRuU7XTYRXYrHyJk1Y5KqY86bwzygreEa0oM/sFtzffn1pfyps/MfBpLd9UTzKrL7QNM3gDSwDqexJG94oNBg3QG6eyW7oaVT8RrEzaYyroGC8F2Fb/YOLLy/k8bprCVdLPfnX0fQDOWhyV5Rc9nvfDuKrdW1li944BlIBVyG25IOCyF6XEloZq2e7VagVGXLolMAZ1Oteohsb95HP3''@;'; put 'put ''okavYPVavTYDUFHR0es2/JK0y3gL7+S+6Vh+qE2cyg/St7x1Kt0+Z6/c31mEEhP59U+iHWuKd6ZAJBVwUtiEk8KfgZP2t4GT2lmGkgqfHIR5N9mbrovam463tjdfOzU8fGpw8Mbh4RsHM4vZ7GImS9+zppF3DQ2dohIG5Eyu/XAud6i9/VCu/VC7vJ5p4Dl5WE+JbBaKZfO6WKYAsuKLymYVMH+W''@;'; put 'put ''bJZ+TS4sl8hmKg9nQB4KW8hDoUgerovCUZkvbicPhYtxwreQh9rVSSysC8RlKbRBHmI0Dfi1AGs10Sw8OTqr4te6JgHCQ7DJOrclk7QXMOpvTgy0700CGb7Sk4tPp6UfEe0l1I4D3eRpGDOwpb3p2mxvBpDfFy62NzPF5qZDkUzU2iTs2L59VdSzbyE92DewfzI+1Ro/0Fy/c6Slr2tndjDcMpsy''@;'; put 'put ''NflivS3+YNTu7ss09/rr3YmWqK+xqVrw5cLh/oDMI/ywxinyUZDncTHixDq2b8LdTFkiWaTOU4CBTqdqAExuWhup4PTLeqig5H0AR6Ju/EwWT9laq1P9MzP597zHV22pN9orhZF2PJP70Idy0gOeZlMZ400w738RrUzPHM0uGdECd6GzUf0IUeJCapKGHdm9Ni/zcRbpRZTdyla5gP+LknGbStRw''@;'; put 'put ''3G8ABQNR4zHpKUbUeFjeL+jVxEa0ah6EaqmpuoFgYRaFVTYt3Tsef2zHq1kQniP4USpDMLA9xFmhf6mNKry1jertve0vMh95f++D+Q9+KA8jTuCH6Gv1DXy/NF+wpfEfYWyWd1PGa7CGsjlq6cDYHClygIKtSvHEAxaPNZh0ZpO8FZ+7997hb31l+NOfHn7mue9/H+tXX3xxVfojHbdubYy4YFyB''@;'; put 'put ''wtqoJ7BkjMEAVoYuoKGbUzybFpuXoaGMhd2YY7sox/xhf2Wtt7apvP5f+5/5Ut+vqsayjwjZCqerj5ilLvzs6pOdWSzvBdgnfgnm3MaOFd7ajs3gPulZfIf0FB6QjrXgT3a0SCsdbNzw2h68lzwBHAVg5GJyoBLjoUaWVQQN5hWCxWhScFAxp4nhLgzsP011KZq96SwndqccFOFpGJzHpll/ItsW''@;'; put 'put ''98+OaDvyLuzzB7zYle/Q3hnqT38wFW2JpW7P9Af1cX1NovmOeNZkziQ+HE7U6OMwy2Vrj6K7t7GJqYS9LJVSkoKo/2kP3s/WHhL9embLCmBRNmI8uJ5Wt0RBNUmzZQlvCztBbATlgH6WxuqzdaQWA9bbG3XwCScSYysOBHxsxSOz/nhbNgE7eScsNvzheNZsysbvaKaL1Qf7M7enYi3R1AfT/SH9''@;'; put 'put ''2hrqwc34NP6CwGPzmiT9EhkuIPy49EsWJaayZtfaHPoiEVR9jK2OCjzXqJpDYiUl+hjTieRkLtAOkh9V4qm+YXOCCGr8dHUH/pUqXx8F+20c1QBlAZdsqK9xVzltVrO2TFaC1BRdWXlmPEioltGFhsu96RhRc3LpWdKkXHrGPrCXgDvjl2ZjYv5ILnckL8amG8NV+UZvd1VYumm+r2++IcR19xrH''@;'; put 'put ''rurtvWrUKHZxQU9zdT0nzWsaqpuvPingu4WTcu5UFhYaYXGuPlGEo6VJGoinuZ48HtZiAkyTJ8zly5R8mq3B80Vu91pUK9j8PtDfqKrkt3vSWZYtt9H8rMU0x4dEJGNHLgcydMdJV7xyIQec+sUXu7rq617M3d5/olNMRWNt0ank7bkXN/ieHNQTbMPIgMH2QDzLNjiqwwTUFA3hlstYWracX+Sw''@;'; put 'put ''Wy1qCnalkSZhs3R4u5rEBy9G8Pi2h1555ZU+eD30R+qtwv25PbnrroM3fCl1WbHz6yd78Bx5gOVBtDIvSZAmCgIyM8flkpajwMKTW2Q6UAdKsSLdWvT7vqoqodJVJZxTPske+umqpL/Ln4C/YZTGX8Z/V9mIw1pUyeEwelLx28zia8jZt+PzofkK3TgjvUDOtrxdn4+T9z7RdzZLXq44I/O64NpL''@;'; put 'put ''gMPn4LRBf0dUfCJymorO91Axxtx2zG0bYFIBKzpMB1VpqP/W2L+Sazvc9dv0jWkcbtmdy+1uWa0nX1zdJedi/gR9CncA0OpEdxGXIJR9TBYlMGaKoLdYXc1MkJ+4rPTD6lL8WWsieo1mQaJr2d4qnTbAZasBxJee8mewrE1gWTeAOg3yWHMFzbYArr2yzlgP0GF2ukUPawKYdXq7NgsizSV1IZfV''@;'; put 'put ''5/NRwU1Bx6LRzLZVtBvquwLhlUm+FGwLVcUqLbU+R53daiuv9CSqNPqov8YXqzAHKRJYjcJEDrOahhSc+7Ps3CM8PfcIelrJxxjB/8z4lQ+1i9nGKqdJQ+TwAkF0rQwhZQYG0ucAUkSez+t22a0FvETFLExJjqJuIZ2qfQKzwSGFr3m2yCFZ53PSmS2ySNgemN+cu76yEdZK83T60EfRF5D+AsHn''@;'; put 'put ''5TSdLdocx85t2pxU22AefXGbNiuFNmZ0xzZt5gpzHUWfk9uQzW2+URjHiL69sY2cH8E9xGjBggbFfoHyIib19QgDF9LDOeg1ywZgkLpF0CsVf7ZW1pyYGWWptEDvCoVBGYFjYjVinqZJFKAhgCVhUyPn0mv7R/DtRCd5fqaE0GlCRZf0DvwR6XKkxL1FlqeQQa+L7kw6GNDwOjdgajUNmbkqAI/L''@;'; put 'put ''MeG0CvpHaCyKw1fAG9K8Q/UyOUYR8HTFpALpdwDW7SY0ycZGM3NoH4Q1p99uJ1pvE9vQiTt1sV5ieHMHmg1FjmzRD43RtBxjwN8M1GcFA6oGpGUFVvnDZgqUZehWrlCyeG1PuUZfu5k8q+Y/Pr9VjkY8y3nxRqpt0x/5zJ6SpA2KTyyHguF3SKGB9zN8wkV4ubnNcfTwNm1Oqm2ABm7cps1cYZyj''@;'; put 'put ''6Cq5zTp+r1Et7cNsroi8nrU7thoHVxa1OY5sm9us/QLGeY2tJyKvZ+1vS9r8O7T5I1uPPM7RtXs2rgdoqRneXmCx0lqazbtR01jUYxooNRSpGhUV8FFbUcNKrezQzQwyp2zd0GfGU1JQjXygqyQP5it+Tk54GRlRU16+g/+xkPaCu/O4dfV2OfnlD3lWigRwYDF9xlNaFJ7yiRJYsTg1g1Wrcr6P''@;'; put 'put ''lfCdzW2O49w2bU6qbeB8X9mmzUqhjRk9tE2bucJcR9Fzm/gXRrvQX+KvER0IA93DepobCUplEEgkmHVmnThze+R2+eeDYTyh/nb77WGk5vP+juXI+1Cc1gdFwrU1LofJoGc+Gpa2o7g9HHL4RFcUPvH7/XF/LGgNWlkGtprVGgAbL1uUL5fkkcOJFTJFckgaU+/HM6kDd+9vvzSWHp6LZ4A2209E''@;'; put 'put ''08Ozq/8W8uNT/vkY0Cg+cfNEyCfdAn+RmnfvWPrswYC361DLmR1AnfQ36TsrIfxwTT0QqfT9qfdNZo82SeM19Qx2LKbMzqlNOcsnSs57c5vj6P9u0+ak2gbO8gvbtJkrjHMU3b2ZVmW9l83Vqcz19MZxNuUaxBj3hHPQLuuwEuUoFK2B5Klw2CqclU4h4Knk5QhosihDw1/I0Oj555IMjVMsRaPt''@;'; put 'put ''pmdmBgdnpBdkmTPDcnGeBRpuEWNGUMKZGgICh1tREy6ZWxsv6uR0QavP4/dEvCwkUZK7Hcbp9YIFlXFT/+pMel8uty/VGmnrSe3J7hkI7wjN9e3o6BifbG+fFIk5OZ1ITCdTM1Xu/dn0fEuHrzvYMdoxkm4bHc+tSgBHOV75MsCxH2QvQX2Xy/S98TkH8P1E0fPn1faYP1Dc/unCc3Nv8fMHCuMf''@;'; put 'put ''nS96zrkL7Y1UOwMagufcXaDDRUHL60HHxOUagJ3HDUqCHetJDuvKDKB48jotDaOW6UjZCtIjHa/XLZsNRM0Gdo2WG00cFYbUtwO0lU7HYgile9JiZ3ssFUu2JGCCiNXn9fl9/goAuRrEktNTS6KrsgN7U2gL0VxzNeZKXpXjXH3XeuuuGdp7aXHodfCAw3t5T0nsS7plIkpDspP9chRsoKNjYGFs''@;'; put 'put ''PSbblc3ki2Ni0kx4NBqo7mlNdco4llgTWewzgy6I7kTc06DRauxYp02BWq8rqPWqXuPn4SuCdVeg4hT7QlCKnqMbqbpJgDXW6kBpfsvWore0IbUE0JFCew2tAgXJBMvMyAqJnq8Oa/5ERYQW0WWS+HCJItJzaddWkdrGuUR5iQGR049es6MkeNsY0jRiipNyTJTi/JBMCzfIuLrxOaWFe4ueP6+2''@;'; put 'put ''x/ylxe0fKIxz9BB7vkZZw21snJfk8T8gtx8FgBmLnh+vkNv/G3z8ho3/kjz+ffLzH8PH79j4cvujn1mvq2glfw/aQhTtEa2VzKtaC+oAaAM2q6UMD8l55w7VBS1syA5zizaapsFhslL8GCy5urq6aF0k4Av4ad6sKpkKiVABKiDpSdJs7s1eefxPi+KVw8NX9XSd6D/WFz58ynmwPtsVDB9yjlTM''@;'; put 'put ''xmOzbZnZeGIuQyxfOLDz9EDvtaPDJ3tmZuazqXC1r7rGG0l5Vl9I7mtv25NK7sm1700BvORYEOU1UzKvGVmH+yCD4y52Tn3ovVs+P47OFz1/XnkO8L2ueJynC8/Ne4qfP6A+R0cvl3lWHzpNykkd85O50SG5wLqGVitQ1wvS8Fir0R7WqUFGFy2kbURIp5aEqO20Ws08kI12iXWYXBAdzCByV1aD''@;'; put 'put ''cFKdbHpqoRYHPcEuKi5qwA7FMv0pLb/4jlrO8DXVJJ3NX1ivYuAK8S0nWG7NrAYJLPtQsNrlNOq0Gj3GWk4JhKwnMGzWXDweT7OnyW8JWjZoLsWKC9NbnFiOwmkUrQW4ZkNw+MbB6f6G4W5vaPjU4K7BhmFROtmCTal8djGL8WLW5ZReS+bxx/enht410uIfDhxIDZ0aaQ2MSm/mcXug/VDuu+2H''@;'; put 'put ''c4GBGuk5P5yRHFegZ71bpjGFJjc+pzjwsaLnz6vtMb+vuP0DhXGOTsvPZV86HWefMs7Hi+JyF8uZ+bPicsKfH5fjVrZIminaxwPKPmB/M6jIxk8U/ADHFL2+WI+WZfrZgkw/NlLcd2/BP2BQ9LbSvhcKct8wLfOuhrVpzgq6mhNVU/i5sI7TY4KdIFG4EZAxiBo/R5kOzS6XGFW1KCtNS6mqrqr2''@;'; put 'put ''CYLg8FDZolW8N9mgXHQhS+jWrJFwVm9LvMMu9BcqMGoaPbUN1h/cf/8dtbmEs8n0KVaN0eiubbDjHawmg+Z0TZMc0EgziLBFcQ/VSNyYKiQ8iUUNnJ7XY62+mSZBU6WE1xO+UInqouusACtNr1djnEowDdYdDocz4XTAZwU1JOQpAyO9sPL0NmqIXVA3EyhK+CI5ui23oyTp6/AJeX8/V5O/6C7d''@;'; put 'put ''UWPfxuwvmhDGtvyRQhaYai99gOnYAUXH/kOJri7nX1F6GFDo4ZNFfU+qfbEePbNN3+eVvgTrD67blo+wvkGl780leERzrb5GnoQ2g6xNBWjxFmSANo9zFtoI2ij2M2Dou5Gan3UIaLQavhkQ+ywaYtDTakstTZzWomU4mspCBZXC56jjnPE9Jxlzu93N7qYgjYAGvIrr3FuSp6UWwqPN4elDPRvi''@;'; put 'put ''0+fP53vWUHGQenT1S0VJW38b6+1dfWRDmLrgx0gU/BjHYNlbwBX0j7MF/ePYLNrKB4LL0Pe26avqLhy0UepdgAZovUsN9epVgowQMK3XVTNJKYLzi4jnFYceZXcVo0yYAQFYWX1xDaoRbF6a0S1QXFfrYLwqRjtl5M8WFcZMyuhbQ9G7Rnq2UCXDkDUMuByqYcUtNI50mOWz0RtfzohWvw/4bzkG''@;'; put 'put ''xRQ0Gh4Erwa0YA+tuUM6ELQ6zTKN0agHrVz9wBIQGJlaqYj2q00ZAPDhrXrQbLJKdmVMzOW1BvxeLw3xaDZuSFeSHCdrtLyaI3d9YZMGW9mmTLkWsCtsYuBvFKOhslbZucNGitPmwIJweMvw91jy3BY+Mf0WPrHN+qtekZWsTojx8WaFjz9b0lfOfaN8fETm4ytKX+nXtMZI7gv4U0GMTEdi7Tnq''@;'; put 'put ''lIqhPDosHojWEz1f5aSGOK2DR0NG6hzm9JoVg6oolQP16XQCdWsyNJLjjkty3DEep+6ueD7elU1XxCpi4Savp6babqVuryqTqiTRq1Rkvcj5J+bVYberxlsXMAhOp+WXbyvFbq+nurot6giH6OUnc2833w70+f8N+FXGaFr2BR5b+3iJv/BlaKNlNC3r/MfuUHIG1qbRD4EurTTOTiWmVY6zq2Xo''@;'; put 'put ''FGSqvPGBfGTp1qqUAd1CJb4fUuyrtosywVExUR0xkbsVUchk9NobMNcTLNbnoTeq2G1Ew3mwXLZfODJVWawoEAkLEjfUgRXiqDBvmUJnVRfkpOU/6pIWqNVWVVU5SZfmdVvy9fLi1FigULXqgHXWt+h5/MfVN5SFAg7SSs2/WvetAg/jN/mGWM4d2GLaQm6cUJIbN5rP0zwSGG8f4PQVIEcaAXcZ''@;'; put 'put ''TuNvyXYbPOcYrk8oz29jz1kdFpObcUVulpXQD4AEl3O3QptJpY0FPSq3eVRtI9dzPamOA+NfxWQcLpJxdJwwazOptLluYxs5j5Z0AY6YaQabyVhmAM2e0xO1sm1TkZgZme2FIjE+TZEka+cF0iX17tkjfuQjXV24LibG8JT0yqg4KkmokKuLWQ5jg1hrLON1VKjqleq5SqUYxM4ue8E8aLXKwBhP''@;'; put 'put ''5cfH81P4QLP0AnaGxBA+Ij3ZXOxjvl71MQOMflUCR9kWfFmxBan+cZfcF87mL9mZtShn83u5vfRrmkeotofn9xXNdbLgz9bDaWw91/MFu1N/DBX5lRMFv/Ix9OUSfUW2s84WbMdjh9BW/m9cjv6xJO620X4luPy0rDOngLE+C+dqAYu/XcwWqlD1pFCGaqDldmqeDTM2aq01DhtLrJMFsWs9vKay''@;'; put 'put ''QxphW1db/LIoXv2H/fccOHDPfhKXPDvlgI8ijHd/ev/S3fu7Vl8g2YlbJyfePaTYldwbLJ80idrRlDjhxHoddd0xrQE4vVavWTYZiE4nV1W6Ro18GUd1esVll0r5wIpItady2Ywv6WuNNNOUU6sv4PObYdEbHXbrfLxIyDZs4uhIlrZch+ypG7qh0fuukUGWhzn8Lq/nuqGCzJWOFWVk4jMbctXH''@;'; put 'put ''e3sm5BzN8W5xTBa+xWmaav66IoMPsrNNK/j7TAleyHmH9GxnZd/PmKKrAf4eZPibVvD0Cbk94O8Cw99Z5bmxaK6T6lyAv+/dcq79DH9nZfy1yXOxuji2zoyyzrtKcF/OZaTrnJPXqcRWY2siq6kT0RuiM9naUK/R6d006l5dCaKdplhrFP9jdGNcFfTFJRDsDtkg0uKtA6uxTYHVi/ei3sv45kDp''@;'; put 'put ''xbrJQd8tQqtbdJRjqyZfxEdTG6wWA5gBPtk9uU10FV+8epBE0kd2VGwVaB28PrF9TeHN86mSeGtO2xZ/iypDlpcqsrzUPJxZTWtLfZ1Gy2+MhWtG3KDxDm8ZEOd53RKiyeBo3Zdx0YD4RTttGRC/SK9tA+Kl/ZSAuC8censBcXyxBFz89KGRLQPjiaXAtlm5o7u0jSWnFazfPk23mD5PqvQJtH1s''@;'; put 'put ''G/p8XqVPrM8qtaRAn7SW1IMeFu1VcLTIaQaJYKKXZ414sEY95CaEaIrpFSxERU5RR5WaoMF0OULwAZDkbqweVjPtoEHc6bfRQwxuakwLAgk+sqkPixTQ4n5GWPSM2I1TW54Qtbtp+SuetW5xCjVltCY2tgnWfUU1sn6gAZr3HEfPia4mrOea7cSgj9oIMZRETiJIq9HeXIZpbY/hChBeAF5a2cNx''@;'; put 'put ''mkWdXN9TEkCJrvfRG8jpi3UCcG7ZXgmmFHXjKJAs0C2O4iwb2wnAoq6IbSIquDRD28kwHwdKcDeSXc/abmjwV2wRQBlMFmdyx6p0fjkni9UsMxzNKjj6zhIcpbnmP2C66rysq5KmEn1Wjv0mCrHfY+hjpboz882eLfhmjw2gorjxNwqxZSP6VkncmPVlcUfZ32u8AW0VuwY97PNb9QWLv+BbxuVL''@;'; put 'put ''SKm3nmb11n7UIbY5gCWVw8mC6MPciHJ7hXpHKnP7rhtF0MPvq/L6ffJdFrLXfJM3ZFN9Njk7eGbKrKsqeAyqDlytVGqTc6wuG1saFBeBv9rxyRPFddss736a7AC7h63VALaiHms5P6a3EinJ/tRfWUi/L3ZX+mhNTchDI9Qb/ZQbc/HXbUqyQ3ZLFqfm59cNTHfUOLA5Sb9gxjF8ofXgDKfa5VwB''@;'; put 'put ''PFWCC3I+PuV7e5g+xKPvFeUHnFTzA+D5rSV9ZR/486oPHPOLqKjvXCG34Cg6VYILrE6b4UuXojM9VDK+nANP8WVR1pkUXJP7zql9wT797jZ9H1D6Uj/cnUV9Txb66tEN2/R9Xp0X63sZnrL6t1vh7Cuor4Bm5dK6BeYrENavN3EzxKxA5VZ2vYluU3Wbvqiq7aHNpWxy/iweIc+/zZptJ63Z/lzX''@;'; put 'put ''sfTUzjR5/rbFxa3HKNRpEHQz0M7VSpWGMkY2yXu70zun0se6yPOLi7cpY4zjw+QCvW2RjdFI8wY01NFVmkJrRiY/V0hIVvbLzIv7x+pCjmxtbdYRqh1rIuN1dSG702kP1dbLc+xBdzB/SIDN8Zb5uZuznecV78a6N0OugYR1mzk3y6duY6PSYj6aUbyixRzG3Hyh8Ix7W1nVxfck39jZGQ7Dq9rn''@;'; put 'put ''q3b5/S4yLv8d7mzyu+SHcp7wNFpFNiSgdraCuMrPaKUkAyGtcgD5Ps+4GUe/mZQrR3wOjZJZrdztW+TcvaHD624pOHQfZJ4bm+LJle+dJV34DHkadt7L5s3aAIZ65s+yYjwEQpDVeBCMVtjNBfNqcTfhJpmS5wBRqFUQA1HNTb14lOrYdBH0agtzvUtwmEOmZj4RtLPfg2b6O+mzWCvKh/hsp/op''@;'; put 'put ''n0c3fpzlg/Oomq2qQgvYOESt1KutlkIeuZP3+pXEcJztPZshL1fc9GGWII7X5qRfrz28dj8qRz42gqt8i2oVX2EsfuNluF+QfZA2V433Ddm3yPyMBf54vcofUR/ObMMfX1b5I+pDTxXx1vW+x/GXL9r3OBaL+s4V+h7FQyX8Ue77QKHvUeq3ZPcTLtA4QnEM4s01WQd4c03RARJru6kvX/ZLszbf''@;'; put 'put ''fFOSYztvSkob2b+9UhjHDLxua//20wX/tnkcbZk71reFjrExzktQ3wnlflX0n8SAoxe/f/gfpDiOdqh9uPa30Ycjb0pqn2H8bXSB3Ak40/owoMvQpsu4XZsu45arhhYekbHIqjq9ZSF9gV6nXG2n1ymTW+l9yha3fJ8yhSP+FnqMfAqgUIGoLGA1QGSkUAME68An2TpqUfsjteVEXYqZFdaz++LZ''@;'; put 'put ''Yqwbyj44xv4WHvVV+SzsRpGNK3Juu8B/3WatrtJ14+vIpyqD8rrZ+r8K67cU1k9RSt0IvXPrcdyNP/2n1VH8r76+eLy3N/64/BHvk/FnGPAqhHYCbgiAG154/yrDcQHfDA14ek+/ZnfRPf3daBRm+w/5rv6WCqwtl6/R12OdCZcZdWXFV+9bzRbOaOSWBEMlrym+sT99kY7s9n25N097c8q9/bkt''@;'; put 'put ''+21xc39JXzA0MmNjoqje4D82Pza3a6c4Ko4M9Ce6E/m2zJa3+dv+jNv8Gzb97Stq25D5k2/6x8ODwcIf0hPqvf935/7U/wHAlv8zgPX/KQC9VyiN1vDf0dsmHtZinAh3YyfALnBv5hOfyLz+ddNjT5iVO53SoGQr7TjWLph18tFPfCL92c/2PvGY6evfYLLiZ8qdinE0KY7VuIlGB+LPiOnNuBoq''@;'; put 'put ''CjXcsgGTMoyNNA+8kPlvwkaj6ulgtmEsEm5uEix+sPkEq99MfVSFezqCYBBS0wI+8qSQbKejmUQAZCd80PjXi/KVi2O3LTv2TXK6XYdcR24ZVhL+Zz7kxcPSZ3kNXpLO1390T4Jdw9h7cijndHrqc32XdrJs/wMTuVpvtS03e0KW7zhOyvFlwAd1D4NCl2BcT74p9jJ6RyxTdEDV4YArewQP4VZX''@;'; put 'put ''6YvxoSTApU6pJdd/yWU1a0lii0tSSovC696qKPyN5W1rwoHO5TlBBuCEElt4gNG//PyC8nw99ik/f77wnL+6+PkD6nN09NLi5+vj94Fatf78bKH9sf1IgcE0uQxgQGMF+i81ea0YYFBiiqmQWLfDApthcplslxUDRrHL/rMIPoqNNlcEIsU8+4sNWQnra6Z2tbwXsL3/omgvTxdgYp6T5ShN+/kI''@;'; put 'put ''u5tCxYWk4J1WrqOg36/NwPfa0u+1q5PofwAPfnx5AAABAAAAAQAAtCcAwl8PPPUAHwPoAAAAANPBnYYAAAAA1L6m9f9W/u8EWAPFAAAACAACAAAAAAAAeNpjYGRgYD767zYDA0vH/7D/k1kiGIAiyIDRGgClhgavAAAAeNqNlE1oE1EUhc+7k5ULwT8UBSlqElubpK2hDaY0lBRbbUrSjnYRakWh''@;'; put 'put ''CxdaYrW6FtG6ExEXXfkDUvcuBbHuRMgmuNKK+EMUWlxkIS04nvuaqXXSgoHDNzO5b9675515poYz4M8MUQcoA9fcR788RFTOI+7sQEIeoBkf0W/G0EPFzQzSMoysAfJmCiks4oS56/2UJ0ibIvbKSbRLDw7LBFVASs6hW05zTAFJvbb1HMu6Ln0PmTM17HNKaJUvaJJHGJc51tbICdYVqSrvXyGP''@;'; put 'put ''BV7v4hw3MSaH0OcMsIZ1TpT/30De8hZruHaZRkzeY1TfGWpGWJ4hIvewXa7jmLmAYa55hWw3n9EpBe+3SSMjXeiQK3BlN9rITnHRxp7DMkkfshhCBRm89V7INgziHXLOFHL6XK7ZelfHmKv0cBExM8lxWf6fYG9JHJQ97G0A+0VYcwdHzFZcJOPmJXrp+4ids0hPuEYziz6zxJrnyNh1jSOKD/Q8''@;'; put 'put ''yfslJOnXqlcbyPlOqn/q3TphwSurf+QP6puzBS2+d0HJToxYqn/rpf7RZ+nAKevVBnLKpPbi/itUvDf0b5D8Sn2SS8yF711Qmgtl1vr7V+qf+qzUfnXOILV3nd+n5oj7Yvu9zT1VP3RNm1GzpvtdJ72qcL3qXRO5Qh7XPmwGmQPNoWZhjWcRNhHuvc6r/QVofWVva1xGMtTCeZlbzU4DmWXNUwOn''@;'; put 'put ''6xnzqfujHm1C/QZsDnUP1b/6t6B5DFIzzmxmrB4z82UyR3VTr5nDX3wGb9R/Z5ANntbnZG7hVFfPGyxTTwHpRcq5jBTPBHsumHlynpylvyVe81wKzSBhWhGhYjLnVW0+HI4t4eh/iZmB+webP/UMeNpNwl1IGgEAAGDzv1NPO/W68+66X+9ueueddxERETJEQiQkYkj0ENFDREQPQ0JkxAjpIXyI''@;'; put 'put ''iBgjImSEhIwYISN6kBgRwweJHiQiIiQiehgSMmTsZQ/j+wwGw/I/e4ZyD9KzbowbT4wPJoMJN1VNd2armTK/NU+bD8w1i9EyZ9mxPFqT1iXroy1p27Ed2s5s97aOPdWb6M32/gQgIAnkgBLQdlCOIceCY9vxzXHntDonnBvOlotzrbp2XXVXG2TANJgFD8BzsAl23QPuUfc7d9UDeqY8ZU+3L9VX''@;'; put 'put ''7WtDHLQCfYaOvUbvmLfgvfFpvhlfxffk5/0J/3v/vr8JW+EJeB4+gk/hl/5Yf7G/jjgRBBlC0sgHpITaUR+6iObRIrqPHqPn6HWACjwH/mAejMEGsQSWwRaxPHaJ3WAvuAGHcA4fwqfwGn6Ft/AOARA4MU1UiO/ED6JB3BJPxOvAJjlIxsgUmSHnyRUyT26Q25Sd8lEUJVHDVJxKUxUaphk6Qo/Q''@;'; put 'put ''CXqSLtMn9AV9RbfoX0yMOWXqTJN5ZjoswOIsxxbYXbbEnrA1DuI+cUdclbvkrrn74ErwY7AYPOcRPsTH+BSf4Rf5PF/k9/kG3xVAISDwgibEhbQwJywLa8Km0BRnxGUxJxbELbEkfhVrYv3NYWgttBXaC4fCjfBD+FWySz6JlzQpLqWlL1JXBuWALMnDclKekRfknFyQd+WSfC13IoFIKpKNVCNt''@;'; put 'put ''ZUyZVTaVPaWsnCoXSlNpKR0VUHFVVEfUxH9m1ZxaUc+iQJSJjkcz0Yw2oc1pWe1Ba+tGfVQf16f0WX1JX9XX9YZ+qz/pvweBv0tAvSoAAAABAAABPABYAAoAPwAEAAIAKAA5AIsAAACDARYAAwABeNqFks1OwkAUhc8UJIDGKDEuGhd9AflTIepSw0ZQIwo7EhAEIlAtxYTX8Cn0Tfx5Ad24du3a''@;'; put 'put ''hYfhtqDBkEk738y599y50wKI4QMBqGAEwCGfMStYXI3ZwDLqwgFk4AgHkcSD8AJMvAmHmPslHEZaxYQjMJXnuYhtVRFeQkndC69gTX0KryKqvoWfsG6EhJ+RNDaEXxA28sKviBrnY34PwDQqOICNGwx54jaaaMHlyR75pHnyFDuxUKNqMa6lY/rkIucus/rM7SGOAhrMc7STjY5E5X3HM+pNDKhU''@;'; put 'put ''GZViRlKPfVzgCGUck2Z5bE55zKth/alS4sphTFuf0ZqqOq9SiXTJ2WbMqPMT5jc4j/Lq1KrkU+pDXd/l3v93M/JzudpDguPul7Otfbu+a5yazbWX05esJlWXuwN+CS8mwdmr2dVdTmomZnY4a2/Sc5lqDVc63/VvqyB3l9OqxZHRWpYnS2GX7y3s+P9KFteMa2h/R+495zsWccsO2lQcxnR+AGii''@;'; put 'put ''gvcAAHjabZNXbBxVFIa/37F33TZO771Xx173xCkua8exYycucezESca7Y2fxehfGu3FsugQCHkDwwjPlCRC9CiR4QKJX0XsH0XmkB+/cCV4k7sN8/xmd858z994hC3edG2Ae/7NUm36QxQyyycGHn1zyyKeAQgLMpIhZzGYOc6fq57OAhSxiMUtYyjKWs4KVrGI1a1jLOtazgY1sYjNb2Mo2tlPM''@;'; put 'put ''DkooJUgZ5VRQSRXV1LCTXdSymz3sZR911NNAIyGaaGY/LRyglTYO0k4HhzhMJ11008MRejlKH/0c4zgDnOAkp7C4nau4mpu5gTt4n+u5lqf5mDu5jbt5nme5h0HC3EiEF7F5jhd4lZd4mVf4liHe4DVe516G+YWbeJs3eYvTfM+PXMcFRBlhlBhxbiHBRVyIwxgpkpxhnO84yyQTXMylXMJj3Mrl''@;'; put 'put ''XMYVXMkP/MTjytIMZStHPvn5i785J5SrPOVLKlChApqpIs3SbM3hV37TXM3TfC3QQi3id97RYi3RUi3Tcq3gc77QSq3Saq3RWq3Tem3QRm3iPu7XZm3RVm3TdhVrh0r4gz/5kq9UqqDKVK4KVapK1arRTu1SrXZrj/ZqH0+oTvVqUCNf841CvMtnfMCHfMSnvMcnalKz9qtFB9SqNh1Uuzp0SIfV''@;'; put 'put ''qS51q0dH1MsDPMgjPMpDPMw13KWjPMOTPKU+fla/jum4BnRCJ3VKlgYVVkS2hvx1o1bYScT9lqGvbtCxz9g+y4W/LjGciNsjfsvQ1xi20kkRg8apCivpD3kWtmF+KJJIWuGwHU/m2/9Kf8izsj2rkPGwXRQ2hxOjo5ZJLRzOCPwtnnvUY4vnEzUsbM2sHMkIfG1WOJW0fTGDNtMvZtBuXsZdFLZn''@;'; put 'put ''esQzPdpNetyFv8ObIWEY6Didig9bTmo0ZqWSgURm5Os0HRzToTOzg5PZodN0cAy6TNWYC38qHi0prQx6LPN1m6SkmabHmyZlmNPjROPDOan0M9Dzn8lSmZG/x9vBlGFBbzjqhFOjQzH7bMF4hu7L0BPT2tdvZpx0kd8/fdqT06ednjhYVuWyLFjp6x12rKlrNW7QaxzGXeT1RqK2Y49Fx/LGz6t0''@;'; put 'put ''XWmovtpjjccGj42+PmM04SL9NlhSEvRY5rHcY4XHSsNgU3Yo5STcoKKpIccqtmLJfMudxUj37qdlkTX92ek4YJ0f0CS63dOywPt9jDb7mtZ5Vvo0THIyGou4ybnW2NQeRWwnL2J76h+3ZbchAAAAeNpj8N7BcCIoYiMjY1/kBsadHAwcDMkFGxnYnTZJMjJogRibeTgYOSAsMTYwi8NpF7MDAyMD''@;'; put 'put ''J5DN6bSLAcpmZnDZqMLYERixwaEjYiNzistGNRBvF0cDAyOLQ0dySARISSQQbObjYOTR2sH4v3UDS+9GJgaXzawpbAwuLgD+HCVgAAAAAAFYmPZ3AAA='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=Metropolis-400.05446670d27f7666-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFUkABMAAAAApQgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfNH55kdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcXAAAOdj58fExHU1VCAAAJLAAAACAAAAAgRHZMdU9TLzIAAAlMAAAATQAAAGBoQKzzY21hcAAACZwAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMCAAAADAAAAA8EawBpGZwZ20AAAw4AAAGOgAADRZ2ZH12Z2FzcAAAEnQAAAAIAAAACAAAABBnbHlmAAASfAAAN4wAAHG4/7HGDGhlYWQAAEoIAAAANgAAADYLZYgSaGhlYQAASkAAAAAhAAAAJAd6BCBobXR4AABKZAAAAoYAAATaq1M+VWxvY2EAAEzsAAACcwAAAnpN7jLmbWF4cAAA''@;'; put 'put ''T2AAAAAgAAAAIAKEApFuYW1lAABPgAAAAXEAAAMQI+x4YXBvc3QAAFD0AAADoQAABiGXFj2KcHJlcAAAVJgAAACBAAAAjRlQAhB3ZWJmAABVHAAAAAYAAAAG9ndYmAAAAAEAAAAA1FG1agAAAADTwZ2GAAAAANS+pvV42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcNbJbVFX7Oufe+39evgKWUH6EgIVgb0xRGmAiyaRhURyqSjikaZvbjnIPx12EzFuf4cWgWUheHDAlpEPkx2gCiYkXGuoYxxzYCygxhYFwHyBYm0+lCRHn3vOf9sC/QbuMJD4dz73vvPec8t+cWAqCAEZgKmVxXPwN5eHoQ''@;'; put 'put ''x3D8R6Bwc77dOA8Vc7/ROAeVc+fMncPZoD8ZTWck7PhdAQMwDFXmcRiJeteajkYLbFWJmhHxI+m9iF8MNl9AxWcQ1MXN5ICJWIlPEctgKI/BeTJIjqEUvXiyf8Qd8Zb4SHwcPfyJ3+9x5Pfdeju5d/b/J+Of97jCuz2O9HyeP8W7ehjZEnfGuxNc5j/Cv79L0N0ecTOzpBjOTFcxW9cRilrCYRTh''@;'; put 'put ''MYYI+DwRYRyRw3gijwlECXM7kZVqIgRL8RPOfJQIzPhK+l8mBK8QglcJxSHC403C4zgR8FciwkkiwrtEhLNEDu8TOZwnSli9T7laTBSkTMpQIuVSTq6QCvJgVrbAtUdTJSP5zfWE2LnTE6ud2NmJvZ04YDKRRx1RgtuIAhqIUszHg1whiSSySCKLJOBxPMn5q4kS/AJrOf9pbOL8LUQpthE5bCfy''@;'; put 'put ''eIHIYQeRx4tEDi8ReewkStBGlGAPUUA7UUAHUcBeooDfEILfEmLZifA2UYq/EGle1PKilhdveQmWl2B58ZYXb3nxMlAGMl9Xy9XkJEeBq9YyQ1WscS1rO4Y1HcfMTGBG5mMBFqIR38ci1nIplmE5HmEWHmX02xjRi6zkK6zgIVbuOCt2kpU6y5Oct5tVxn0rkvulD9s93CeNjLs31bWbumuOP+pG''@;'; put 'put ''rTbS3R34bORMgm6+PNvj3ThzUfG818fj5fHyy0fSWxevi9d1O/I3+0ZRaZoQ04Tiq4TD3YTHPUTALCKiIp7knEQNYmpQU4OilYiwlYis0mKVFqu0WKXF6qo4QTicIhxOEw6fEAEXiEj6Sl/WtZ/0I/eX/uSkomIVFRkiQ7i+ogZXEaXoS/QypYspXU3prqj0W4ms0r3FE2XiyZnSXVHpXRr3FpW3''@;'; put 'put ''qHIW1UWlpxpP1b2L6FnXSbTeNKvFCBPlOoszZ/p1pl8txpyoWIuRJ1rWTPxZRTvLQk5Gy3junvz0qmOEDazX3YxrFiNZzUjW4ClG8zQ24BlsZERbGMlW3sY2nradp9zL051gDU7zZBd4gn7cbSB3GcIVh5meFX2so5SbOsq5y820xOyb2YmORcPIncx/h6yQlfKErJEW2SjPyXbZKbulQ16XA3JY''@;'; put 'put ''jso7ckrOyAdyTi6o14KW6QCt1BFarbU6VifoLVqn9dqgM/VevU9n6wJt0od0mT6mzbpK1+p63aytukPbdI/u1f16UN/SY9qpp/U9/VA/dnCR6+XK3SA3zI1017vR7gY30U1yt7lpboa7x33d3e++5xrdD9zD7hH3U/czt9qtcxvcs26re8ntcu1un/uDe8MdcW+7E+7v7p/u3+4Trz7v+/gKP9gP''@;'; put 'put ''91W+xo/xN/ov+sl+qp/u7/Sz/Df9A36eX+R/6Jf4FX6lf8Kv8S1+o3/Ob/c7/W7f4V/3B/xhf9S/40/5M/4Df85fCD4UQlkYECrDiFAdasPYMCHcEupCfWgIM8O94b4wOywITeGhsCw8FprDqrA2rA+bQ2vYEdrCnrA37A8Hw1vhWOgMp8N74cPwcYQoinrxdizWbeQlxnUZXpUwmoxbzLO0y1/k''@;'; put 'put ''acY1xjcZP5iwDjV7uvEk42uVP1Ol2niU8ZSEsdB4k75GbjT/eOOJ5u80Pm+e64w3GFcZ540b3Gzy88aLu2d9Mxuj+a9gTDN+1ripi+WuNHaz5xnvM151JacZMPtKnm58rbb/L9aNl+SqvTvGl42fMV7Yxcxeu2Xvv3Oaz/ZuuSrDizNnvsTO1HSJ+avNn7XTrD5u9l2ZzI/qGr1o22iqiqw/zeqU''@;'; put 'put ''1LY5qWbS6qRRp/os2kV/MqfF7E2u6aJ6ixp7w+z9iV2saZqxVNup9rL+9Axp3g6a/SOr0Z9N5+dsfqqcTptjNyLV7SX+GrPPp7bNSVWd9ac36KaMZtKKZO0XzP5W6rf5di90qPk3mD9VWlXGnmScN09P9kfpfbHo7jD7sNnZleviXyXVifdcVqnsjlOKt7v9/+BLZyqusXcp+O6qZlaS16ln165h''@;'; put 'put ''F0xe2BE+x5dYDmNxI3tY0rn7sG9/gT096dx97Y1abp27H3+vmso+VE/0xx3scwPY6e7k7z4ziUrr5UPZ9b7GrjWfb7fh9nobx47ewvXWs/Pdbr3vK+x+r7FD/hIH8B2+6M5isb0q1+BfEvAUO/EQtFpPbeN5Ra6y380iSPxjU+ES3E9ewW5XikHcayQjGo0beOpJPOU0zODor027fzQ+amx3Bvsy''@;'; put 'put ''fMh4rvFm41RVObNL8SXu8wC+KznJS4kUpFR6S58rT/Qf6j6bKQAAAQAAAAoAHAAeAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BmcmCcwMDKwMLUxRTBwMDgDaEZ4xhEGM2AfKAUHLAzIIFQ73A/BgcGBdU/zNL/jRkYmI8yqiswMEwGyTGxMq0HUgoMTADJZQpAAAAAeNq1k1lQjlEcxn//t30R''@;'; put 'put ''KhT19vZp00aiFEX2pci+lKzZsq/ZGusQQ0VSyJ4koxkTU1O2G+64NWOMvs+VW+4MHcdXTDPMuHJm3nPec86c55x5nt8fcKHrC0F0j1TqmTjnrlKsxyWMw42BlHCLOu7SSBPNtNAmHhIggyRMBkucJEmqpEumTJUcyZNCKZISI9V4Zbx3iTKPm63mE/OL5W4FWsFWqGWzoqxhVrp13+Yf+U0pfYfF''@;'; put 'put ''jR7aj2njmfhKfzHFJrGSKCmSJhmSJdmSKwWyQTZr7ZfGW619yGwx283PlmEFWEFWiFN7qJX2S1t9VC/Uc/VUtatW9Ug1q4eqSTWqBlWv6tQ1VatqVLWqUpWqQpWpM6pUneh805nVmfT9k6PcUeDId8TYB9r97D52L7ub3ej42vG54/CHkHfJXV79p+ZueDuT4I9bBKP7z/iHRtdJF1x1du544IkX''@;'; put 'put ''3vjgSy/86E0f+uJPAIH0oz8DCCJYZzxIpx6KSZhOJBwbg4kgkiiiiWEIscQRTwKJDGUYSQwnmRGMJIVURpFGOqMZQwaZjNXMZDGeCUxkEpOZwlSmMZ0ZZJPDTGaRy2zmMJd5zGcBC1nEYk1aHvkspYBlLGeFfv8OdrKbYg5xnNOUU0YF5zlHJVVUc5EaLnGFy9Rylevc1BT9ZPQ2DZqle5qmn20V''@;'; put 'put ''q7Ud0WzgbLc361mj+12c+O1W4V8cvEA9m1nZY2UtmyRGj1vYzjHsOCRc8xkpUboCIrijdx6gaZYEXQ/x3WeKnGHEso29bGUfezjAQV1L+znCUb11mFJOcZLXupp6sU68xFt82Ch+mn/PH5DNquh42mNgwAL8gdCZwZlpPQMD024mVgaG/yHM0v+NmXb//8J0jEnw/5f/fiA+AM9PDVh42q1WaXfT''@;'; put 'put ''RhSVvGUjG1loUUvHTJym0cikFIIBA0GK7UK6OFsrQWmlOEn3BbrRfV/wr3ly2nPoN35a7xvZJoGEnvbUH/TuzLszb5t5YzKUIGPdrwRCLN01hpaXKLd6zadTFs0E4bZorvuUKkR/9Rq9RqMhN6x8noyADE8utgzT8ELXIVORCLcdSimxKehenTLT11ozZr9XaVQoV/HzlC4EK9f9vMxbTV9QvY6p''@;'; put 'put ''hcASVGJUCgIRJ+xok2Yw1R4JmmP9HDPv1X0Bb5qRoP66H2JGsK6f0Tyj+dAKgyCwyLSDQJJR97eCwKG0EtgnU4jgWdar+5SVLuWkizgCMkOHMkrCL7EZZzdcwRr22Eo84C9IlQalZ/NQeqIpmjAQz2ULCHLZD+tWtBL4MsgHghZWfegsDq1t36Gsoh7PbhmpJFM5DKUrkXHpRpTa2CazAQOUnXWo''@;'; put 'put ''Rwl2dcBr3M0YG4J3oIUwYEq4qF3tVa2eAcOruLP5bu771N5a9Ce7mDZc8BB3KCpNGXFddL4Mi3NKwoKTHS9RHRktJiYGDlhOU1hlWPdD273okNIBtQb60yi2JfPBbN6hQRWnUhXajBYdGlIgCkGHvKu8HEC6AQ3yaAWjQYwcGsY2IzolAhlowC4NeaFohoKGkDSHRtTSmh9nNheDKRrckrcdGlVL''@;'; put 'put ''y/7SajJp5TE/pucPq9gY9tb9eHgYBYxcGrb5zOIku/Eh/gziQ+YkKpEu1P2Yk4do3Sbqy2Zn8xLLOthK9LwEV4FnAkRSg/81zO4t1QEFjA1jTCJbHhkXW6Zp6lqNKSM2UpU1n4alKyo0gMPXD8OhK0KY/3N01DSGDNdthvHhnE13bOs40jSO2MZshyZUbLKcRJ5ZHlFxmuVjKs6wfFzFWZZHVZxj''@;'; put 'put ''aam4h+UTKu5l+aSK+1g+o2Qn75QLkWEpimTe4Avi0Owu5WRXeTNR2ruU013lrUR5TBk0aP+H+J5CfMfgl0B8LPOIj+VxxMdSIj6WU4iPZQHxsZxGfCyfRnwsZxAfS6VEWR9TR8HsaCg8dsHTpcTVU3xWi4ocmxzcwhO4ADVxQBVlVJLcER/JsDj6uW5pzUk6MRtnzYmKj0bGAT67OzMPq08qcVr7''@;'; put 'put ''+xx4ZuVhI7id+xrneWPyD4N/ixdlKT5pTnBwp5AAeLy/w7gVUcmh06p4pOzQ/D9RcYIboJ9BTYzJgiiKGt985PJKs1mTNbQKH08EOivawbxpTowjpSW0qEkaAS2DrlnQNOrz7K1mUQpRbmK/s3spopjsRRnMgCko5KaxsOzvpERaWDup6fTRwOVG2oueLDVbVnGFvQfvY8jNLHk3Ul64KSntRZtQ''@;'; put 'put ''p7zIAg65kT24JoJbaO+yimJKWKgiPghtBfvtY0QmLTODLoEiZHGysg/tih05ooJ2At960irv20Ltz3XyIDCbnW7nQZaRovNdFfVqfVXW2ChXr9xNHwfTzrCx5hdFGU8ue9+eFOxXpwS5AkZXdr/uSfH2O9btSkk+2xd2eeJ1ShXyX4AHQ+6U9yIaRZGzWKURz69beDJFOSjGRXMcF/TSHu2KVd+j''@;'; put 'put ''Xdh37aNWXFZUsh9l0FV01m7CNz5fCOpAKgpapCJWeDpkPpudmvCxlLgsRdyzZNdF9B08IR3ivzjEtf/r3HIU3KLKEl1o1wnJB20fK+itJbuThypGZ+28bGeiHUk36BqCnkguOP5e4C6PFekU7vPzB8xfwXbm+BidBr6q6AzEEuetggSLKt7STqZeUHyEaQnwRdVCswJ4CcBk8LJqmXqmDqBnlplT''@;'; put 'put ''AVhhDoNV5jBYYw6DdbWDrncZ6BUgU6NX1Y6ZzPlAyVzAPJPRNeZpdJ15Gr3GPI1usE0P4HW2yeANtskgZJsMIuZUATaYw6DBHAabzGGwpf1ygba1X4ze1H4xekv7xeht7Rejd7RfjN7VfjF6T/vF6H3k+Fy3gB/oEV0E/DCBlwA/4qTr0QJGN/GMtjm3EsicjzXHbHM+weLz3V0/1SO94rME8orP''@;'; put 'put ''E8j029inTfgigUz4MoFM+Arccne/r/VI079JINO/TSDTv8PKNuH7BDLhhwQy4UdwL3T3+0mPNP3nBDL9lwQy/VesbBN+SyATfk8gE+6onb5MqvNn1bWpd4vSU/XbnXfY+RtlM7osAAAAAQAB//8AD3jatX0JeGPVeeg550q6kjftkmV50S7bsiTb2rxbtrxKtuyxx+PZPJ5hxuMZGAiTGQjLDEsI''@;'; put 'put ''JSSkSUNC2gRCCDxaaFkmwLBMFghfSiYLJC9tmrRZ2rQp9AXStElL+sDy+88590qyJc8M+b4HY8m+Out//n05QhVoaT2CPyvYkYC0yIxsyI1aUAx1o340gWxJy/BAX08iHmn1e5rqai16nUZBUEV7QOnUO0VzxOw2R2LuWCQmsncRfpWf0mf0nX4CT2Ly71Ib1iERieHP5l7G/f85NPzw8PDDDw+7''@;'; put 'put ''nM7h4eFDw87bHz7kch5yPvzww85Dh24fG3v48Jjju8IbKafXCf9uPeIaG/McgN/GnH3DrkM3dFnDs8ePP3b8+Gx41Rl2wj+ECJpf/x36GnmC7c2bdCGM0RJCqCaDCBGWFVgQrMKUQqHQKmq8ep1StAaMEcFt8cWi8UinxWxSuZf2mmKCw2G1NDVZyBM5w3cdVrPDYbY6EFpfR+P4MbxIHtS5UAVC''@;'; put 'put ''OgFen0Z0Xj+83ADz2lETuiHzZOfszmSzVkWQUiCYILxSiTWamkyNrloQRfVSVQVRq/UZBSZES6bsSR99wD5EavFwaT+p4a5kI0JNjQ31MI29zlZrhQUb9fn/xIYAFiOiW3Qn2E8iwn4iIvsR6Yf4v6LXaq8NDgfvgZ/j2uPR92tPSH9do33unug9+Kuv9j8F//W/2v80/Nf/KkAytH6WhMnbqBF5''@;'; put 'put ''URtqTwbbAi6nva7WajZUVqjFGkSUAGaSBjCQ2xBG+EMAEiuaatLrBQCwRwVoEfP5ExZrLIRj0QGcAPSwWEWf39yIzQge18BbPBaFByR8/Ej2pr0d03sv29+5syt71a72iZnL35c73NUbSWIymRq//EoxOazb3T+tX7PNZzu2x8X+/pq5/tGa39TtnMf2dv1PNUOtuZGRUDBmegsWokTh9f8mb5Jn''@;'; put 'put ''ACOMcDph1Iu+lXmyFk4oUImVFRirlHgVqZBao1IfQQoFWiaYYkw1gF5YrhKJIGiFKXvmST90CV+wC4KmrJ+4XIVF0SrC2UbK9CAE2tJuqHyvXbuSvvZ2h8NkQqi9t70nHnWEHaFmn6nJ1FhXazTodbCZGl+NaA4YOEgjnQBKUw124wh2Gygs3S6V2WSJoE2fD+DCZ1+YbG6ZDIXYK/7ocK51+Np4''@;'; put 'put ''orU13tWCZydb8h8F2MNEK14KZUMdM6HQTLh9Jojn1rbhu1OdkZFUtDOVOxicaQ/Tz6BFMJ6KdI7Qj2B/AmpZ/x05SZ5FDhQAPjOQ7A0HvU0N9XW1FbhCIA6MBJKmGI6XgVwtGSUQKYMMoFBbm9PZFmuLOgPO1jaXSrQElH6V20X3FE8U7ww+ssYTVpVoRbA1K9+lIeHzA2rBTklw99I1/Qe7pmcb''@;'; put 'put ''64OzncF0YPv2/v3tjUMdoffnPtcVn+jv8DVNnhzuGZzvF/fsD+/sTR10t0z4gpOBwGRgcNo5vjI+33Dl0EmyOxKIj9bHW5rjay9nr5u1Z8K9Y4DzwBfQg+RBVIOCmSdbAFEqKeth54sBCXSI/rkIf+IlSiHTu562eAlsxxDLsx7RJLp36u1Go10vtuEfkeOtRrvd2HqcBKDHwPoOnCBfRtVI9VS1''@;'; put 'put ''ErcHGMtKWNn2rOKjx46tNC9s377QvPCzW2796ULrzhc+cO25xQCdEOh3B/bLfUXoy8HjT3DAhVi/FRjh5sVz137ghZ2tCz+99ZafLbC+vfg6vES+CjsZTg4uTo0n/PVWUQ2cKd2PUTUc2iS0AuQnNyEiYCKcoiyWH6QwBSMso31zs+0hl0MpmgIGtuZ4QiXC/26Xzw9/J+KD2M9/o2dptcD/Pj87''@;'; put 'put ''YM6QoS3tQ/+i/E5UabGV/wbY7KJd/RYr24n761o1FhTVtc1WpVJVpVBU1gcDgWB9pUJRpVIprM211QoBq7UVFfl2CtWF2uHrqjXWiErbqDG5GONWVqt0Or1ep1NVK9WiKFS7TJpGrSpi1VRfeksG1xQ6SmpIFFUiX9KNYDrFAuA9ABILaAVYA0UTBZ5mfF2nEusC2E0laoxK1gipeTHzIvzDLS++''@;'; put 'put ''mH7pJTre9PqN6CW0H/DPmgQyR+My+gEReQwU04A8XAUxJ840V1lAytU7HcGjoTAVd0F342AXHasL/Qr34ihQbm3SzBB3oYC4eh0dzOg0O7uwkFvD0Um2n0mQu8/A/JVUg6BPgCNibMUUBypRhUcAVlUsZY9KErYqL13x+m/Wz+KHyOswrz5ZQwcFYYJP8gkpW8MzC7kHFsjr776GmMztBb5yLTkH''@;'; put 'put ''rLAJtSVbgKuyHXMOgkHYswXogPZ0TbrGWgvjmSCMAorNPJHEoiFAJkpMjTCT6oOTkx+cn4PXW+f79kWj+/r69sVi+/qq9nxxdfWBPXseWF394p6JyVvn5m6dmKCvHAZ1lBRAB1Ahe7IWjlIAeKU5h8dYi6f0RgY60Z+I6N1PX+d6ZDBLZrM9J9a2Ida/AzZVCfuxodakv6oStgPYQEiagZOxRqrE''@;'; put 'put ''LCEmj/RWj18h1gYGMSVmunqV6I9LzFCL4Xw63pkYah72du/yJZY+3XeoN7P4NF7K+YZ+OLAabe53dEWCH+rc2zd6Y+beNJ+/GeCph/lb0GCyz1YLc7kwkDSsAwtUuAOV4xWYXbEMCAqLAdm6rMJKpVVJT7kFNXs8To9XFG1w0pS5RDqpHArgmNUiCaTCCkUJ9N+/tTnuPtQ/sXPf/GR6fPfiUHyH''@;'; put 'put ''P7rnE0OrvZme/sW+K8eqhmKRUHSit29gAuOh7vhYZzh8fXghPjCnr9k+0r07wnGhGV4GAPYVwOWCydYq4Ek4rVLCHjAC/fUwgI+JXK1iqrKysrqyGujKoKNr9Tr9OKKnGqw7psf4ztwjFXhh9+pqNvf7Px/Cr+QGx//81/hg7j4Ooy6AUSPM04j6kt0mjBXaGoEo4NzTCF6RAoS8IJAlLuE3AqgR''@;'; put 'put ''Nbj0Rq9HBpAl0ikJY9FP6UmM5xHyZ9cHIzsvD6db9k7MjXdX4HtyZ8WRmcHV/sH3jVX1RLr3N48Fhudi9fhA+vVQ5MBwarULYNAHa4vA+TWgVsqtDXo4O38dUSpIWgVsRaEUFKsoL2ZFWJjMIRpBr2xsbWzxuqFzvdfrU4PehqTFUK5BiQXEDCeSBkC5iEFWJERKMXcdHRi4auz2W9I3T/ftawl4''@;'; put 'put ''JkLx3THHSr8n07xvfGipWrc4ih+DhQ4e6fvKvSt/caC1ud/tnbljm6YzkftIcMI/CtucO0DlDZxjFaOhpmS9AgiIURDlPZjp8KAFg/ZD1UrsjDnNwBSeyN2Fv5/70W6yku5du4vqG1GAQyvAwQ5w6EEjySGTigCHTYtFQJA4hRqAgOGMGKcIBOrrEQr0BLojHfWt9S0eFwxR16ahrKucxiHBx5An''@;'; put 'put ''QMo9rNKf/hrCmMkb7x9eSA1MDF3RP3DFUKZ3eGH4xJhnItwyHhja1T7uBpUpPuvzzcZBqapqX+we2Guu3dadmG8Lzid6Zy2Wvf3di+34E41xryveNBLxxRtI7nlHt9ff58TY2ef3djsY/m86e4cBjr1CAzYEgW0rgXCVZBXQX4C9CoIlUyQd5LOH3cLZ+7xedvYW6eg5HQ/gfkz/lPZvoJDg7NIS''@;'; put 'put ''wU+VnPogw4YUO/YOigHk3OZT57iQ+wg9dnb+sAcmQ/A6yAsr5eeUf7NF6rnxpuTGW1UVQlXWKotBxwQL5eeGIsFCyggZq/SO75alTe6A/BvYdEx24nWw6bQwmYj0QMb3I80ZjJ/D9z8ZCVC6T6CdOEcWAS9VT6kI6FDGmNdcjc0J4BC34dO4p/cXY88/P87OIoXOkRr8T4CJInIlmyj+UlMOFCSB''@;'; put 'put ''LEgsnAhUtusoB6e0T/9P4W/nYuznn9KfTMOcU2gnMcpzCjBnIohjSrNyCp+GOV/Jdd///PNjv+j9BZ3Tvv47/Bqcfy3yoEQyaqmqpGwPU7YtwMQ3FckQysCVWKGwKqZsNpvH5vbWevwquhBZDhb4dA0G261Ybj/XsyfiHGiOznkje/9oYH80sqdnRi+D95TS0+VoSjg7g5ET7dsjbbO9VbcUmc90''@;'; put 'put ''nW3rdwmjoCcPoix+JvNkBWjKBqeDqIXhJoOgUPf1EkDQNBhbVRs+0RR9YtqiT7nmu3bt4pM0V2qIAmSCinJoVQUGrfIgkhggMBa1WlgGwOjVU9LUQTC8FViziC61k+k9TtL0h0xCDYsAHKhaI6hXL9pZCYZHBxVCAlKubt1LFFWAYypxmXWf2UX/S9Ymkwgls8npiTE4qwGfr9Xr8fmqRHuJ8uSi''@;'; put 'put ''NlaRkAAjrINZl50yX5TUqk5mroABmuDagMQ+Rp488v4Xrz702OHoXCjUr26c75hcSh3r6Rw1VKf0Hk9jY7d36b49K4+v7vvC3oGDCUPPVSPNO9U4Hgtmw/2Rk4cfO/S+F48feGg5e2U81OwP758eOZEKeoaVC2etTe6WxeGFTy2uPrGy576leqfd61i7bErURnqiOzpiQxQfAS3JD0DeiKA5BJLN''@;'; put 'put ''GgxwSQN1ALkoQGugYlzATHtTq9UV6gqujteC1iAyU9tfiUl37tbRBRym/1bu/8K995In1rb9Kz6a+wzAfB+MfxzG14FW50L9yR6QODCDCjgCyGUlVackB5WIudZP57LXGfTOpjqX3VVr0dsMtjaHmindGwWPE0sKltko/7IP9yZ2tHd09A1Fl3pzz2N/9+Rk949/mdy2LflL8kRbtiM61tC4pyu+''@;'; put 'put ''ox3fNdDePvCT3Lnxrq7xHNNtqNz8KJMhoWSgzlZZQXEkLYsKywYXGjxg0sJHXWh5lMirCMUHjhMP7t//4NLYLR0x30pi8nQmc3oyseKLddwyVgXntvzggURnvCU0fVtm6oPZUEu8g+oyFG4vMH3OzCykPJiYo0ACU1WlyVBprjL7wLoE8MgoGcAJCfcCWL/vjWOPLC8/cuyNNxZuz2RuX/gseWLn''@;'; put 'put ''vQcP3rdzfOzUzMyNY2s/Z3ufgfn6YL5KFE62yRyb6m6KJRCbNcWaN7NoKrnHDVQ5o1ni33qn+fP4mtxH8edzRvwWWflF+t/T5AlJt5bH16CWpE8en3JhNqqs2sAHGqShIzN+zEZ1y+PO8EFzr/BB+XndD+flRLFkJ5hJSGgiRKFkBoNSgRhykWUY2UI1X8b+QcsxwqG5uUnp1BcJ9dLDi7nxXdjY''@;'; put 'put ''fvfEEjvAiU+FY97ruvkBtq/6voEvz/22vZsfYXd73N/Oj9Dd8FBhz7cwmPqTHkk9XgGdnO6X+su0aDMsMd0t/ETgldySzV2RzeJPU3LC3XTbub/BbXxcdB/z8RqpY6VgX3HTFIyrmWyW9qI2GcjFv2b0B1jETBmG0Uw5J8sCIJOVgV2HtEavAroXTBdYBaWyJz/Q1G1aDPdns4mDg1XJzq5A195J''@;'; put 'put ''/FquY+RYH9/n3vw+HckGjVpJmOTFzCMocM+t0WDgsj6ixxEN0ASI1b1ZvHc193McXcm9cwzWm/sQPpX7a8Cf5PtfZeOOwLgaGFdJdWG2aDoaJQ0JdEqk1Ovpor2AJxE90eR6s2nAubXPsf6Uhn5fWJdYZl0mvbwuDRhBbn0lnMC+LFpH69ns+jpdlBP/fG0bEdn7/6D8uA8xXG5M2kVCSkY15EfF''@;'; put 'put ''sCw3GxM/ms3mdtBj+T4Jw4jhte9T/ktx+Lf/P2x4znT2PbB//wP7Jk+n06cnOeJKLOfAg8vLDx2YyH5wKnPbNMdbpp9QnD0Ie6sCvgNWOKwCSFXA1CVTCCTAFmuqTYZqc41Z73OoaBDBmec9ZrfMlvUz2Dp2MpU6OXY+izULq6sL58gTXSuDgytdb+Oh7MhINveTYhiYaBwm2Ukd+0qiArNSINQ1''@;'; put 'put ''WjDZFEWeUbPZ3GJuDvv8lAGDELeK/mJipo71eMKfsG4SwuS3zd7pztnw8f4lGUC5V7e7r+i8qq4hDyNcf3U41TPmD+RhlfuXpvqlnmXPYqgYXEXwqoE1gfwEgaHAsim8ApqIxN4kcvd4nHq9kfIeumK3H2xuPYOcUvYVkINH5r+06/GzWQa6XM85BjZ82wlD7u23GfQ+SQEn+TX/i4TJlwFqIK9q''@;'; put 'put ''rQQkNsFF4KLO5yJ51YKavUEPBZdFtmqoFzREStgf9ycCOO97X0f4qpHIhHfxssyBWN/RoclrIu1th2ItI74dB686kbhquvLK/nDUmXBEE1ZDW6Y7vjsaCfe3hpyJpo5Ibd2u7V27o2ytQYDTJNMzuG8ob9JyZ45kCmA32LRuoBjT66T+9SyYtGmJlncAjnwK+puRM9koBRswLt6eGZlMHpMsjinz''@;'; put 'put ''kvYo8THsum0yG1/u61uOZydvm6+aumMH/mTuqqHVnp7VIfrbjjumOH3LOpGKzqVkNjhwTolpcs4DJgnnPJSXAe8gP8h9fwH+YRBplPPCzxkyA2N5EVKYGD3BWBWU9wOzoKEtJsrZ5oFbGHRKKkkjdkz/Ce5K7Pbu/OrZxbNf3fmr6a+9OA3D/Q1pYz/byOTas3ydIEfJ3Yy/AX/UqGBoOH7Kgmoy''@;'; put 'put ''mOObwWDQU7jCKmFIDRsdZJq4/+/+bhmLuf9h7ztzf4FtudfxIvz2OrbxsQ0w9sdgbDVqSNapBKDDPJOTvBAGFtySxoQj8+d+deCnP9+Xe3MO1+LP5J7C07mjuTfoWD0w1rgs+yk8C269vF8j79Yz6NmKE9y9AQpAD+gTRwnJHcAPrv12gPjTA2s/5vJ/2/rHcD/52SVamRFALPjZ9uajj75Jfta9''@;'; put 'put ''5uyGHuvvrJ/FT2zhcxVAv1Uu4GXucsWoA+ZryM8n+wOpakb9w3Q+VJjPCow/Bj8dMN2bPeTn3e8+QYeP4/vw0xy3zqgOjSQtwOGZlxRmph7jk5J354wKjRgjRrdfdP+o94Ghm25Ogiz69T/8A11zbv39ZG79GZjOwcbYwkdNhxABgIRsX/urTIqf6yBJYpF8D/paWd8q6DkBn5w0gEjmsyas7sGZ''@;'; put 'put ''63vIVw2f4DyuE3SI3xA9siM/+kHSZMOCohaEgh40+aZGpaBSKtLcyHRAY6WKUGMLbGyq0NsyaqxSoWUJHyXj0lOmHSUt1ljW0ySb8uJjXtpw1KgzU/9Wvb/e53JQz5bH6zZq4KiQxQxnVWTEWQveWgOogXK4EN9+Rca+Ep+/PLGUyO5OTrknA42HdlgO1kzN9s5PdhH9NQdy39jW1rE70zkTaDAO''@;'; put 'put ''Ltos/Z05b3dkxtwXCieQFJ8nEyDrDGANPXdWW0GUIC849BoAaXWZvJPKJnko6TatedA5Nzeiqt8GX6YEt4uMdgkDUYiZjEaEjC6j026DJYPs2uQZ9VOi0svu0GL9474rBwauTPUfaMxkGg/0e2ba2mY6O2fb2mY7iX70xmz21Gh39AA5l/u3aHfOB8Za795odG9v71KU42k74NzbgHPlbTHb1raY''@;'; put 'put ''5YK22H+dmpw8NR5d9kbrRnyRxQj8843Zo94Dsar06YmJU+lmT6TekdgXTyx1ORsj3lZ6ZnE4s0D+zPRC8ZlR2DEwMkOjGMoFdHdubsSQU2Su1w24fpHRLmGg0jMz+Nx6emZYQvECePRks24UoEeVkg/uFDutTnZy5Nza6IFo9+ipbPZGODhsXTu1+cwIPTPigTMzo3pq6QOPFwhThoigICv5Zdoy''@;'; put 'put ''qiI9zmIBbbfeYrfVUglu8DH3q4efVmGxZiddn0p0wnLxwaXakPMDXaPXTY5eM3ry1twu9Upm8lAF3qvekU546jo8bWOnpzOnxr545/Rl+DN70uk9HKdAFuPtwPssaHeyQotVSh1GKpLm2Sr1SKVSLoPGVsscHmhJgSXPK8tQqQNjQwVcZrX0w13JCo+bxSlF0c7ljJvyfuY05EioMr90882ZbdvG''@;'; put 'put ''E/FWr6Zeb3USZSo3gL+eGu9JOxOaKm8904O3kxaAH83R+HayqlFHVEqNmvmwJf4KDA1kjoqsUs1yWVQQiXAZMI0F/ppvR5khrJO2RqVtTZc05qUNx/irA1QnnqkBm2jyeb0eyl+xvtiXHt/gSgc8jJXgYcvQiXT/1R5n4872XYcAJUeP9fcfG92Mkspc5/Bqj6+pt8GxfWp7e2zw6vHxqwdi7bty''@;'; put 'put ''h0LbopFtodC2SHRbiJ/9NCCoAmjYTKNjBh5XYbQECjvzBtuKTHJARL3JbaI+CMrq4Dglf51e4nb4hl0dmYnuwGRbJmNdihN9ZE9P7lk8ODjrGXDnngW29nZrjNHEILx+kfw16Gha6gXI+/RrKfLoM7JHRVtTXcXc+cpN7nwRVIi9DQ1mU0ODyZfJkIONJvqrqXHf2jsw/vor61lpfDulOS3I5RpQ''@;'; put 'put ''QUlaWTSTIDBcVexXwUbtCh5CsFfVWS1GPZtVLAkiFDsBVPkVXBXUVlV5tbamzHiisJR3f6URB5QqTwOJrH23h+tmwJpYLLUSuZMOjQLoXWCmiY6vRtZP9Uam7WGq6DBRArBt/sm+p5YyGWzfj2tzb/xy750AzjbcyM+RHs9nYFzZ96Er8X1MAZSAW/G2QgToyY3+9Kyjjrk+OB1ZKBErl9WiSlAq''@;'; put 'put ''9RkFjTQX2DWQOjykTVTQhKhUtuIWpgv0v1BXSh90wW7kcuuNbqPbpAFuUYReqg2/RMycOOCVPLk9nElFB7L8JWOaifTsNOv29hahXabonSinWsK9kc6+At5TnvzhZzjacxAYmfWkpNSulzFf2r+V40sJYUibL9tzy05029UXIynzJZCUch4oisuYcdjPJn+J7aL+EsuF/SVcMRi/cXLyxvFOqhd0''@;'; put 'put ''cu1AUgvSpyYmTqdTXUuJ+L4EVw+QpM9tB31OX16fo3JaBWIQCL2gWFEgGXGxPqcvVdM2NjRdfLRLGOiS9Dn5OP4gfS73W3LmQDl9jupQ20GH0pfVoQo7sxUpM5kNIo2pPvpNqtHmhqaLj3YJA11Qh9JfTHZdQIdSrs3g6oISdSDXWar3zsPLYYBTFbr+GZ7EwYGkZ6JWwJLuS3USDhizTHgFxZh/''@;'; put 'put ''aCrfa4sOsOmzehO3vQ3xiDlPms9cPt6zJwLs+G/6U7CJ3M9p0AajIOjnL8I6fagjGTLDQi1gbCNS8NbZNruffMjrCXD3E0/+iLM0ATnTzSr65AyCRkJl0HeOh/y7dkQGXZHgcvbwTHh/q2d6ItRXF+1KjISumKtq9iaG2rx1blO1fSgxOt9k7+lo9oAmadA7ukNjO6i+B2vcTu4GfS+cbLNgFZP5''@;'; put 'put ''RLiNikayRAMpAAewJPdzTZTpcEYnVeK8NDsvppfSzUAw0XBePIG3t8YT49u2ZW6+2WnV12vMznQPTqf++I9TubP13ioNlTnAnwC5Gb8VaEKbzG+BYUoCf7N5YJU/oso8krIHC0ZB2Z5bdirwW7Pb5GZhlCLNn0pzHpjUE4Gy2S6Z6QJyvgMcFpgunsy9xJgunoT92IF4a4lSzumSvUCy7qs3MG+F''@;'; put 'put ''kbut7Nv/6pHtP54AzWweP0b1EwziDgkO6F/q/9Jf2P/lnr31Y0Mfu3X28fE7PzoOIy7jB+jP2jv4vtzBgp9OhLFZDmGFqMAKKt+oFwXGFkhRgMVgMFDEc/pFt9EfsSYiohE/8bl7d37zxZ2funvn11559VWsXnv55bXc7+m4jetTxAXj6qmuWKkGvIYhAbmloSle76drtzO81iOdweSW3KoUTQax''@;'; put 'put ''wHZRg8VjXkOdu86lbfyn+Wf+ctubdVOJp/XJalNdkoi5Ofz42kvJbsz3EoeXV2HOLXxk+gv7yOK4I/e3+BO5V3E0d6QX3zbemzs9zsYNrO/Ge8nzwHUBRjamAOgwnnCxDElosCgxAoxm9BaqQilCuB+DbI5RRZ3mqltriNnKg64ipU4Raxa9wVgs6F2cVvX3WrDX5/Nia2+f6vPNI7GPdbYlgp13''@;'; put 'put ''xVPN6pimrq3lE6FEdU0i9PHWoE0Tg1muXD+LHtnC30a1tyv7+qQER+rf3o2X2dqbk14185PpMYK14/FCOvEyBdUMrQYgoilgBbHu54lKCcpdEo2kAQPKm10qeIcTCfX1WvmKLb39qun8To5rbMHWj4cSNdWJ0Cda2uo0MXVzKn5XZzDR1vmx2Eizen0dDeBWfDN+VC/i6vW13FtIcwbh53JvsQwZ''@;'; put 'put ''KuPm1negrxK9rOuz1VGFxJaRc+KMpETXZ/o2T0wFrTDyeSmXJLjXFCN6OXdkbRT/Wraxz+K3yTSqQ06KKY0NdTarxWTUVStJFY/twawLUtkHqH91LOeSlyBwTz8tPqDHCLIerGyPxQoizYx/OBfK9h3s7j7Ylw3OOqNtA4OhaO7D2d7erKtZOZiqnj4+OHh8umqoX+lvinRocldWdkZOXWnEdxiv''@;'; put 'put ''TPH8IET6QS+vR6lkEo6TJpwhkea1i3hSiQkwX5GwMBIzHWnmmSiyiBIn0npUT3MDwR6garHX7IwlWLZvsSsHjpCmKZL+tf87NDCQODg4em1td/WORH/2W99Kp32ec6k7Ro71SRHKO1Lniv3YFtSdjJsw0uC0GhaGKSc7rMIE1EbQZFcqWJkJz4+0mI0GuaREV0mLSlh5j1lOQIYfRuD4s4+/9tpr''@;'; put 'put ''c/Dz+O+o5xtPpmZTJ07ACz5M3d/c/iMLeA85w3K6OpnH1U+TnAF5WRBkWSlQQOGZMlld1BlbbJR1Fv2+207z5O3Gx6R3smA3GurrDfR3/g742oai+If4RZ0LB1RIJ+AA+o7kA57D15A7L8V/THOzBnE89y1yZ+JS/cdW0f3czB/3kO8ZbuK8zb/+Kl6HM9BSWxAhpijcRMXvB6ngYiEAFgLyMSmA''@;'; put 'put ''JfWql2pbNBZUM3qkp+vgYG7gmgHc0rGzu3tX51oT+fO1XTxG/FP0l3gEgNaYtBdxBULZxUxR8nW8CHqXNTZazI2N5p82WiwNDRaLZFsOrifR/9AMbnQt25vOagI8NtIsQjXlx2kurx1g4IBgV1xNM8uAS68WGOl+OswsKJmsCWDWTVu14VLahmxGj8dDpTQFHc/id+XVI5YaC8IqHvnf/q5WW1hn''@;'; put 'put ''bAANx2Q01eic0VqFGPQ2eIK6qlarWa81VuqzVJjAuUfh3H/Gzr1NpOfehr4r5Z6l8T8y/uRBPcmEq9ZapSA8XEkQXStDSM6wQNrsR5KI87jtNrMxj5eomGVJWZ7UvaqSFWPgMLhT4mPNZfLlCnwtd12ZjDm2BxaDE27QuWCtNCcxhf4EPYrUZwh+8lHGcMu0OYrrt2hzQm6DRfTUFm1W822q0We2''@;'; put 'put ''aLMnP9dh9Fe8Ddnc5hv5cSrRDza24flWwnlGCwY0lkzpKXukcFcjDExIDcegVqxogDeqlkA1lUJjSq4oMavWoDNAZ63EnyqBWWI5ASdGc7JAIQDrKiAn4uR+v3s3vos05Iw/5Rk5ND0rnbsV35y7lefQJFnOUxy9k6yPx/w+haiqEwArbFrA3xoML2k7IP8kx32afgIM62p4QYqrZJepJYOAmUu2''@;'; put 'put ''Joi6/bBqe94ICdI+CCtuutRObugU2tBJOHWxXsnA5g407ZMcKtOPW3iVPm8rkJ4RDLt6kI9aLDOHzeRXJj4uITxZ+sBQjUJs3EybtTs+uaNcwlc4oXDhjSTbrTl0766SDDDAJZYvxXC7WcL/2xku4SKc3NzmKHp2izYn5DaA/7ds0WZPfpzD6HrepoDb61Ry3MfmauPrWf9YuXGwo6jNUeBvm9qs''@;'; put 'put ''/zuMs87W08bXs/5kSRsaNFaw9fBxDq8/snE9QEc0MPNtlnfRQCsRNmoYS2pMky40RSqGVgtvDdp6VjZqhm7VIG8qCr4PZiVF9LLfA4gqIoLQxy/z5LnRUTl97lv4fD6FDnencdvan/JEul+m/xNgwHKDGC/pkHjJ/SVwYvkuDE6d0tk+VsJvNrc5ihNbtDkht4GzfXWLNqv5NtXoS1u02ZOf6zB6''@;'; put 'put ''ZRPfwmgOfRJ/m4AphVRPqWn+N2iQfqAOf8KasOKRO2J3fDj2YfovimfYG/sjhuR6hN+yuh43CmJRMogtWEECrQ31tiqVUqHBSJlPe6YfCUUfYWU+77lsr7Id8pnPtczVQ9MiLBlVmYiqg+cfSv4gC4+DqkoDqluPc/EhKMOpAW4T9LT5jH4jqxEqlBiI7kTBowTiHlmsmDtHEU/RwZYIeTGy/4F9''@;'; put 'put ''XZcHIws7QxHgLt2Xt8Gva7/xOPAV44vAZPDu02mPI3fP+CKxnR5ZfuiAx9Wz0nF6FLgL/S339/t9+P448Jjcv2Q/OBXZ78sdiCN2/iy3huFal4SPT5fg7OY2R9G/btHmhNwG8PGJLdrsyY9zGP3FZl7DdXY2V58010sbx9mUdxVizF+pwMoVFZaijfnCYhCbWotJa9VZ9T6nTuSZIJGibDVvPltt''@;'; put 'put ''9pWSbLXrebraTd+Us9UoLWyHuXXkZdRCfV8VYEAwFYrmq63KuecsvIOXVDx12uh1epwBNwsP5n3QoryEWL5OLF8QRUMA21muUuwylsq8mKIpzKmEt9c12d09mSU10flQaD56pJtnM4/TLOZxZ8IRS43G19b5ufK8je8BHEdAcSAodajccwHge0/R8/NyeywuF7f/Sv55dar4+Zn8+Id3Fj0X7Pn2''@;'; put 'put ''lTcjxgfgufBnoH+2oQhKoiPJlQaAnaseNBwzrlB3YVWFBpRmUaWkVRsVKlKxitRIJapVK9UaIldt2DI1lVUCleUS+UWjwSBC0WR0sLc7GAl2todhgoABqM3r8WoB5HIweUOeflGKB4+ybIwxI1rxI+d9kB/xgPPQSY/z5Mi+oxvSP0aXrZ7L+zdFoXN3TrbRpJD0EI9HD3bFhxazRVkhiY6ORCE8''@;'; put 'put ''nTvSMtLsM/eF2uM89yHJch/iWJGsbw87HQqlIgqmiJg3RRRpM1bJOlkQTGkVnNbVLEZ7lWxi22icVrUMChALADAvpz3PzUKsk0qkdcuX1otqZeGNvfCpi3VLtpX0oIYQOlSmoyofI4ujuJmrZ9QZoHiPalkNpsocPlKiliWPDZRL/nAttmtLbKluzfQ1wyX5IK4Wwc1tLJ7rQGlogtPWVajMc0pb''@;'; put 'put ''Xyh6fl5uj8Wjxe3P5Mc5fBl7vv4KvN3DxnmVj/9h3j4D0LMXPT9q4u3/D7z9Xzb+q3z8v+TP/5m+sfF5+8MPoXy9XIJ8B7SnINqdNOqYq7qhnt1qYTIaKvBE5sk6GuqU/fn6Ddm39qSJpr+BNFwtfgxWbWNjY7CxzefxeWlNgizkZPlm9VGlgd2FkbCKm4Mn+B8Xkycm0yeH+i5PHRxp2XeDfU/c''@;'; put 'put ''PtXiOGgft820BWZjnbNtwW0RUvWF5bmbJ1LXZiben9w2OxcfaG42NDXZ2wYcaz9q35GILnSGF2KJxQ5a28bin5R3beO8a7EA93EGxzkO3xvLPafn91jR8/NyeyxeW9z+K/nn1buLn5/Jj3/4fZwHptC1pIb4mI/Qji7j93DQ5A/mhkIKESsVyoMqOXhvo6E9F0Iq5rBaLbRTKhWLQEPKZdZhZlfS''@;'; put 'put ''wqxDu64OhJ3sYFRTa704mQCMxOJiNmyUrPTXadnd9+Qythdk83w8/VShek3Ix16tYMW25PU4E2hkfl+dzVoJupd6gx4HHwlFHxXrceV6le1QRo+zbanHFcf1Lq7H2crpcRccgulxTqezxdnsNfgNG/S4YjWOanEKq5ErcRaK5X4B5IjLO3nj+OxIw8KwywecaGascSGVu6nlnY44sKJ/X4z43wkn''@;'; put 'put ''8Cf3RiZOp0Ouac9yBBhQ2J19J459LuBB3+laSgx35/7eCfjF40wUT3dy/D3M8W7jc4q/f1r0/LzcHosHitufyY9zWMJfHgOh4+yVxvlMUbyb58INJvukgHf5XMOi2POlhJ31f3jYWVgtm0eY38cZaR+wv12oyFcTyftzjkh2WrFdxPWbO/P6zZFMcd/L8n4ejaTDlvZ9Lq8DabZzvutYnxdczB9t''@;'; put 'put ''o/CrxSpBpNFTrCRCWsQqRA3Zw8yeYJceZWSN0oimrFarzWrz6PV6s1Mt1gWU3AuX8PNaPK6sdCYqieByd3T01Y/k6/JsziZ7o/7f7v/CJxq6O5vrP8tK9Bw2e6MRj7JCPSnPd54MAn0HUAJfzomunqpo9ZhqaCIJhzSCWgSyVAdA+1DJZF62jbLQxnTRcS48RJ4DtMAaRTURV+U7GGxg4qvV3Gdp''@;'; put 'put ''ZaHcjXlwwdIOAE6t1AuVdjK9t1ne4wSUe+jb2toSbXGfxwj6abOzQqyXjzGeiG2ln5r18tn6itKRySA9ZYu+NCV59Qp+4L+SU5PpsVtbq8Y25SbTfGWGBZ8u5ChL/oCPMvvLJ9lf/1Fix/H8XMofxiT+8GdFfU/IfbEavbBF3/NSX4LVXOfhNY+sr1/qe0sJXdFc3B+Rc9BmnLXRCl6hGmmgzXNC''@;'; put 'put ''NW0EbSTfEFDszUjO3z0GPKsOPvn7swYF0ajlsLyPik+MBCVagYPS5cuNbRkaEeKXuGjzyTqtW7ZmkoJ2YZLDmvd9Xur472VoikYGu93eam/x04wFn1sKU7lLUnzlC3PQ5iyVY0Mb0lQefTQzlPt9ca7K5NqzRfm+/6szmVz78gbumvcbRvJ+wyPoWLmzBv32zrx+e2QBlfM54gr04y36yrqxAG2+''@;'; put 'put ''zusqgU/RWtJ6NJ4c0YHKoMf0jg+5AoQSn7iERFHynlORpM0wZQmI06iUw40mN63G0lMSlGtY3TKdWSXWWlTUOsNpykGJri73glzhyuinA+jL28DrUmmM9iDLg6a3xd2SNLpdICNrMFGqQGMWQdmg5RJOWi6PVKDIqRQrNBZasIb4OWfkGwtYdpdXbsoAgA+W60EzkXU+n6/NF6h1GXxet5tZTxs3''@;'; put 'put ''pNqcVM0iN6KcWn06v0W1WrshwToENnBL9kHJwNXWSbs2GXEh2Rps3TYr/i7LuC7je1aX8T1vtovUkl3EanuZjG2VZOzLZfyoNF+aytg0l7Enpb65t2hdMO8LeKMlBskPCe0FK6pBISAIMakPNhG1WGulDiN6Vw6a4EwhUEkDMYJasaqR9fAaGj5QLleoiFLJw/nLPJwvcYZwuS4VWKXS846otJvp''@;'; put 'put ''vc70niehjMIRDlPXd3gg3J+IaUPaUKDF7ayvMxupC7y2SjYQKA5wm8D6HpO1saPe7nO4NcY6u/E/Lilve4ev0RZttzb77UaDfdulJnGDLUuLn/SM3/C4wJH1e0tiBz+ENlWM33B798hnkJQHM4/eBJ5hpFkTatC4jDy/Rr5Wh6dXcTnt0VucrIRLFsygm8qM4U1KGyZdljMDJlebq8jDkjbF9ChY''@;'; put 'put ''xTx6kcX8nSiZ7DebiEJwYn4NUeGUJVNDmydglhziaAQL3KKtLpuWbZQXZKVlxfKS9kk5ADN0aU0Wa8bLF1fICVizwzrr2zUi/p+1d6SFAp3QuP1DhTgL8FfNJj8ry+NG9xBlPt9aX5JvnclkaPIYjLcX6O4WkLsuoC9Gd/iH3GcBz/WMHrPS80+z56y+m+kZYUnP0JbQOIAENwh/BG1mpDYWdJa3''@;'; put 'put ''OSu34XXi5+RxYPy7mE6Ai3QCOs4IazMjtfmTjW14fQjpBxypppnFVZUVGjBCBTWRK+Y3FZ9Xo2pzvvhcjFEkSZhFM+nP9c7PZz/ykXQamwOZAJ7J/Xg8M/5bqf6khuXEO5INlRWiikp8tVSRr5OKS83ssjosgkUkDYpr5jJTU5k5fFlr7ptY78/48XLum60FnekhBsMOCT7/WQJD7gP5nuQDobra''@;'; put 'put ''o7wvnMtD7Lw6JD5JeHt4riB6uT3A6oWiuU7kY1tqdG6Luc7n/S3qE6goxhTJx5iOSHoh2SQLxhntcp/JkctQuVgYrkHnS2Lvm/w5uOZabtOAGSh8H87UgBpozkP+Zgs1yV9toaEl/HJuHTNUG4z1FhPL++UKgq0QY5dZIQ2zF9SpCFcR1l7e98X9+7+4D3DAODt5OpM+neZKwuKf7Vv+4v702j+T''@;'; put 'put ''pulbM5nrUkjypwhAGcAlOlAX2pbMWrFaRV3gTJsBVq9UK1aqNESlkv0VlWKFUOSx6Ox0uRDq7OpMxKKuDld7azOM5TB4fB5vNSx6o+O7wMMLwt+xiZkjrgYIbXKFldt7/eg4S40fvc7rOjkiKQO5q4tS5PH1G2uv+nrHedL8WE/vKFULirPm8/VYkn5wkJ1rTMLdr5XgBM+Hpue6wP2d81JfwNGD''@;'; put 'put ''DHdjEo6+yNvn3qL501J7+rypaK4T8lyAux8uO9cVDHcXOO7W87lYnT1bZ1xa530leM/zoek6d/B1HkNSDmOS1egP0/yKWLSpUaEU7TTrpk4HaoeW5VfUb5lfIYrMNW7JewEuJb/iop3K5ldcpNeW+RWl/aT8Cm+wmeZXGFh+BffJl0+w8F3KbQQkHFmZ0JZLtvjoZRe8o+CPdsYF9+asi8oDF761''@;'; put 'put ''gJ9dcD3JctwHUS7Z1IFFVWdTo6AUN6bHKC+QHiPBxvaHHJ/tDzo+2x94fLaS4/MEmi8tPQZfNJkfv3hgqmyeTHifb+sU/+yCsiRbRulvukDSf4FWT8i0CnR+eAtaPS/TKlbH8ufN7qhwoheSOlrhjqzVIBmq6CWgUu4fDEAzy69m0V5yivo5pUQtjZowZY4QvB/EuR3LR9VGuyiQcNMl9Um2bGpO''@;'; put 'put ''7xkg+FBJLwW9JFsP63YiKqRoGqGRmrLsGs2yJ0XdA/R2DbxgLHMY9dX0yo3QJoin8ldwsHqKJKunCKNXkrYWrBZazUSjDpoI0eQjk8q0TAlKhfK2CkzrVzVXgzADMNP6UUFQLKl4FWlJdDFY6KPWkJsu1inZWr69FGEs6iZQWFEbMIzCrMrDCtCiLpMtQou4tPTDykgAt5XicHehHsRb79WVRhLF''@;'; put 'put ''8WhxkUjCovbyGCK7E4XhakLC1WtKcJXWsPya6a2LXG8lvSW6Lc+piORzKo6gz5Xq0czPf2fez39kujj34xv5nI1K9FpJPgbry+L5LKYAbW4tlxMCetmjZfsGCnEKXLMXSfe5zLP7XDyoN9llBt5UDScL/BQLaemGLPl+eBZCKBhI0MPjqXV7PPy+LJZBsclps+n6F/Kpydvmtea8Z8Ny2Qeke2DI''@;'; put 'put ''E+zWF12D5MxwNljufV/xpTBSzSmsdQ5sIC96mzsIajRgPKoxFry46LZG6amy8NRUpu3mZnnvdr1UkERrebZyaDukNtTHnC/6KePDvvBYFx+GSoAKDy3YbGb1UBtd1BsLiQq2MZnjDuniuqJMkaHcWjWxucIob44yXKd35TB66OH5Q3ixBI95PRHl3bsZLoroJ0U5QyfknCF4/pGSvjwWdF6OBWFx''@;'; put 'put ''Pyrquyefb3QY3VaCx+wOG4br/ZIO+FTJ+LyGh+L6EtcBr0dFfffIfcHO/tst+p6R+lJf5+eK+p7I91WjU1v0PS/Pi9XDDG9ZbTi13bXU50GrDGjdFfN5sCImsp8aFXZGVFpUU+76N5VbKKr4/tLmMm+pHmCGnL/E+2ys9D6bB8cO98xku8n5O3fsKD9Gvs6MwEkQclKqMpPGSERE92B3dqbn8Bg5''@;'; put 'put ''v2PHndIY0/ggeQ6scqnKooLQOos0mFPUz1FaF1CNqrxCvspC2jSzlx6ZagybYnV1MVO4YaqFTDfCnxYL/NHE5llAn2O+HR+b54I1B5srOHaXVGtINSLTuFqwsxqRLjZqkD4HDW1ViQVgHYv54mbhkipFir/j4sa+vkAAfmrd7lr6Q6b534G+Nv6g1s1rH+YxJX096mErCNfAZrQUY9JKVuHBKrUA''@;'; put 'put ''pouMGwv0kxle/eaxKKRqEek7GYqc6Df2NVn6847zx5gXyii5zNm5DZF+/EHyFdj5MJs3AbIAa5hvzoTxhBoLrE4NznKV3ey0KF/8QoQZpq1aQJQrJeRA9IsTClld+boEXN1k01uqTbWqkG7WXPQ7GTQYtTUOj/gB+Z2fxyB+jdW4iKiOrUqrBIycoFb3SaMhXxtjFd1eqdgFD/GKl5s/bjjNaG9b''@;'; put 'put ''7q31p9YfRzXIw0aw1ZSpuPPkxxI3fjnB49yfWltv973L/aTMZ5rnkTfIPBKlcHQLHvk9mUeiFHquiL8W+h4Fm/lifY/i0aK+e/J9D+PZEh7J+57J9z0MfI7Z3uvbabymONbz7jrXYd5dl3SYdpCxHma3T0htvv5ujsf13s1JbXg8YTU/TjU6tEU84Sv5eEL1NCqbU5pCH99CPnwvnyuQWpHuvEdv''@;'; put 'put ''Eg2OXPz7IL6fC+PIuNxH6LmEPgJ5Nyf3GcdfRufIA4AznU8BukxknrQUf5GKbdMXqfDKx11Pcywyyg58Lqifp19v0VRLv96C3E6/38Ls4N9vQX10+KvoJfIgQEELUEnxOkaSytcxwjrwbWwdDajn6YYaIi+lml1+w77rhy3GuKGUTWDsb9dZT63HwG5c27gi65YLfGuLtdaXrhvfSR7U+fm62fq/''@;'; put 'put ''Ces35NdPUUreCAYs/BKexA+8t9qwB8bHOzrGxjq+xN86xjn+TAJejaL9gBtgc+nc8PpNhuN6TC9JE+l3LCkOFH3H0iDKwGxv8vyuDi1W1vCvQFJjVRWuqFRVFH9tkrHaIFRWCst6jU5UFH/bUuwiHdk3J/HeIu0tSN+51F22X5lvXSrpC4pffGoqmZS/fWlqcWrH3Gwyk0yPjbQPtg90xct+E5Pp''@;'; put 'put ''D/gmJsemvz1FbR3x9/wtTXii6I/cWfk7m+5/z1/eVPaLnApf6ETvXYziCuCdSqR6CrTr9sAgtgLsfA+k7r479c43dE8/q5fuvIxivdxOYO38CasYhFYPPDD67NO6b7zCZMUb0r3TYTSTnKq3EwW9vaIS028uUIAAJAphRYNJBcaVtL4lX9BUhSsrZZcNs21DbYHWFr3BCzar3uitBvu2cI+WHwxa''@;'; put 'put ''ahvB2wApVNTSjED6fVFO5g7G3+bXUmc+vGJdyhLltkN1B2+bkOqYpj/kwoncGZWA53IvOj4y18euqk4eH0/Vae2O1PCRXlbEtDiWqm8ym1LZy/j3/OAWUoNPAB9UPQVKXTvjevym/xOsWJkqOqDqCMCVnXonEdbW6A8q3LvG7wxRP2MzVitJe5l7zN7jHRzvHNjyCg4pv4TZq7hdipWczeedBGis''@;'; put 'put ''mT0vxJr58/P55+LNxc/PyM/R4euKnxfGT6EPFT2/M9/+yBXyvSnz5AaAAY19qJ9pcRsxwKDEHJMhUbDFfJthcgO3zYoBI9lm/10EH8lO21EEIslEu6c0t46tmfoF+F5wJbq/aC9fycOk+mD+bhP0eXZ3k4wLEb17XrquiX6+vh0+V5Z+rlybQf8P2z+c0wABAAAAAQAA35vmhl8PPPUAHwPoAAAA''@;'; put 'put ''ANPBnYYAAAAA1L6m9f9R/u0EYQPFAAAACAACAAAAAAAAeNpjYGRgYD767yYDA8vE/4H/W1gSGYAiyIDREAClIAahAAAAeNp1lD9MU1EUxr9zXgeig8HBQSsaDVQtf6WBKmhtJKLSpi3PoDFaw8Bk0AgJLkYS48RAQuKiAyQdDHEzcXFwctDBRCYHnQhLbYiSyATR53cuLWJb2nz5te/d++453/3e''@;'; put 'put ''lXXcBj+Spo5RjfBlHoNaQETH0O6F0aHzOIkSBmUM56l2eY4+zeGiNCAtk4jjN67IQrCmr9EnozioaXTpVZzQ+9R1xMl+vcE5ecTstxvPuRzTa88hU7KJQ94DtOovHNVXyOsix26Qk8joKPWd/z8jg1X+DnONZ7ilUQx4I8h7SkV4/ykyjjMcwzp1Cm1awog9M3QGzfoWLbqA/TqNs3IPOda8SXZJ''@;'; put 'put ''CT2aDf7IJST0HE7rY/jahE6yR310yh3OfcTnZpHGMhJYDj7oEQxhBSlvGim7rg/deN/myBN6uIY2meC8LO93s7ckjmuEveXQpMoxM4jKAYyT7fKOvjZi2K15l56wRnnBWvagVd4g4eoaRwQ/MCBxdz1Gv7a8qqMQSPPPvNshrAafzD/yJ1X09uJUxbtq6WEMO5p/O2X+0We9gGvOqzryPpLWi/+/''@;'; put 'put ''zDf6N0SWqBXW1L/tXbUsF8as8/efzD/z2Wj92prVtN5t/QotR9wX61fnuKfmh9W0Gy1rtt9l0qtvrPcLvYuSAXnZ+nAZZA4sh5aFbTIv0o1m89b6q6H5yt4qDDUgFgpzXebWslNDe+eYpxpOlTNWoe2PebQL7R1wObQ9NP/K74LlsZq2VzLL7JkKzPxXMkUlqPdI6j5eQ5CrPLOaNZ6W15R1wCtu''@;'; put 'put ''nTfYoF4CmkTcm0CcZ8KgO1OWyCWygJs6y7OC51JoDh3SixaqTReDosuHx7nc1zpfH/5f7RzwpAAAeNpNwl9IGnEAAGAz/5Sep6Xped6dt/M8r7vTzp+/02MM2UNEiMTwoceIIRE9RA8hETFihEhERA8REj6EjBESMYaIRIyIiOFDhMQIkREyhgzpQSSkh73sYXyfRqNZ/qegORnABta0qvZE+6B9''@;'; put 'put ''HnQOXg62dTadoEvq0rqSrqZH9Ev6gv6PYcawYmgbk8acMW88M9aN7aH4cHa4bEJMKdO2qWpqmaF53pwxfzbXzV2ERqaQXeTGwlnSlqrlAbWhUTSN7qMVtGU1WAlr3Dpv/WA9tMVtdyPYSGnkZTQ52rdH7Qv2L/amvevIOJpj3FjVOeM8dnZdIdeBq+xqYTYsgWWwC6zuJtySe8594u7hUXwV38QL''@;'; put 'put ''eAX/5UE8K54Nz52n5ekRQwROSEScyJIpMk1myByZJ0vkBXlLPlIh6i2VotJUhspRearizXnz3pL3wnvrfaRpepXepHfoQ7pIn9Hnr94xDBNiXjNTTIqZY5aYDPOR6fm0PtSH+zgf8MV9R+x7dpldZ7PsPltge36t3+Gn/cAf9+9we9wxd8p942pck3vingPFQDlwGagHfvIy/5W/5u/4Fv/Ev4w3''@;'; put 'put ''xjvjfUEWtoQDoSRUhCvhXvgt9EVEfCMuiGvilrgnHomnYlWsiT/EttiTJqUr6V56lDpSP4gEsaAQjIYcoc6EZgKZOJIn5Vl5UV6Xs/KhXJTL8mUYC9fCzXA7/AKGAA4koIIEmAWLYBV8AjegHaEi05HtyDW0QQDn4ArcgLswD0uwAr/DBuzAvoIo2H+AklQ2lT2loXSjeFSICjE6BmPTsXLsOlZX''@;'; put 'put ''URVXORWocTWhzqpF9Uw9V2tq4y9MM8mgAAABAAABPABgAAoAQAAEAAIAKAA5AIsAAACDAbUAAwABeNqNks1OwlAQhc9t0YAa48K4YGG6MO6EggQiLjVsFDQSwS0IApFaLcXErU/i1vcwxp8X0I2P4DN4ejtUJY0xN+V+d86Zmd4pAJbwCBMqkQKwyydkhWWeQjawiBNhE2WcCSewhjvhGaTxIDzL''@;'; put 'put ''+IdwEnllCKeQVgXheRRUTXgBDXUr/IQV9Sb8DFt9Cr8gaawKv2LOWA/53UTasLEDF5e4gYcBeujDh4V7PnnYyKFIalO16Otrz4hc5+4wa8TcC2RQRZd5nq7kYqhdR4z1MOapRSVHl63XNo6xhyZqpLi8janMOI815Wnw5DE+0O9j/ej2nw4NRk/pcsnBTQ9Yo8s9yO1Qa5EPqQfaPvfOH7MI5ufz''@;'; put 'put ''VEaW6/pXZVfXdaKqGWouz5OckWT1qPqMjjn5iSfLfdLT0Tf97pmNvWWTsTb/b4HDj2ZSlQlVtGpxFbVWYu8ctvi7iUL09Us4p6+rq3oy3UpUsY4rvuOAikfP8AvcvXhzAAAAeNptk1dsHFUUhr/fsXfdNk7vvVfHXvfEKS5rx7FjJy5x7MRJxrtjZ/F6F8a7cWy6BAIeQPDCM+UJEL0KJHhAolfR''@;'; put 'put ''ewfReaQH79wJXiTuw3z/GZ3znzP33iELd50bYB7/s1SbfpDFDLLJwYefXPLIp4BCAsykiFnMZg5zp+rns4CFLGIxS1jKMpazgpWsYjVrWMs61rOBjWxiM1vYyja2U8wOSiglSBnlVFBJFdXUsJNd1LKbPexlH3XU00AjIZpoZj8tHKCVNg7STgeHOEwnXXTTwxF6OUof/RzjOAOc4CSnsLidq7ia''@;'; put 'put ''m7mBO3if67mWp/mYO7mNu3meZ7mHQcLcSIQXsXmOF3iVl3iZV/iWId7gNV7nXob5hZt4mzd5i9N8z49cxwVEGWGUGHFuIcFFXIjDGCmSnGGc7zjLJBNczKVcwmPcyuVcxhVcyQ/8xOPK0gxlK0c++fmLvzknlKs85UsqUKECmqkizdJszeFXftNczdN8LdBCLeJ33tFiLdFSLdNyreBzvtBKrdJq''@;'; put 'put ''rdFardN6bdBGbeI+7tdmbdFWbdN2FWuHSviDP/mSr1SqoMpUrgpVqkrVqtFO7VKtdmuP9mofT6hO9WpQI1/zjUK8y2d8wId8xKe8xydqUrP2q0UH1Ko2HVS7OnRIh9WpLnWrR0fUywM8yCM8ykM8zDXcpaM8w5M8pT5+Vr+O6bgGdEIndUqWBhVWRLaG/HWjVthJxP2Woa9u0LHP2D7Lhb8uMZyI''@;'; put 'put ''2yN+y9DXGLbSSRGDxqkKK+kPeRa2YX4okkha4bAdT+bb/0p/yLOyPauQ8bBdFDaHE6OjlkktHM4I/C2ee9Rji+cTNSxszawcyQh8bVY4lbR9MYM20y9m0G5exl0Utmd6xDM92k163IW/w5shYRjoOJ2KD1tOajRmpZKBRGbk6zQdHNOhM7ODk9mh03RwDLpM1ZgLfyoeLSmtDHos83WbpKSZpseb''@;'; put 'put ''JmWY0+NE48M5qfQz0POfyVKZkb/H28GUYUFvOOqEU6NDMftswXiG7svQE9Pa129mnHSR3z992pPTp52eOFhW5bIsWOnrHXasqWs1btBrHMZd5PVGorZjj0XH8sbPq3Rdaai+2mONxwaPjb4+YzThIv02WFIS9FjmsdxjhcdKw2BTdijlJNygoqkhxyq2Ysl8y53FSPfup2WRNf3Z6ThgnR/QJLrd''@;'; put 'put ''07LA+32MNvua1nlW+jRMcjIai7jJudbY1B5FbCcvYnvqH7dltyEAAAB42mPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGdidNkkyMmiBGJt5OBg5ICwxNjCLw2kXswMDIwMnkM3ptIsBymZmcNmowtgRGLHBoSNiI3OKy0Y1EG8XRwMDI4tDR3JIBEhJJBBs5uNg5NHawfi/dQNL70YmBpfNrClsDC4u''@;'; put 'put ''AP4cJWAAAAAAAViY9nYAAA=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=Metropolis-500.4efd580a43b4e116-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFXwABMAAAAAoOAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfKTbLEdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcfAAAOdj+hfXRHU1VCAAAJNAAAACAAAAAgRHZMdU9TLzIAAAlUAAAATgAAAGBoqa3+Y21hcAAACaQAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMEAAAADAAAAA8Ed8By2ZwZ20AAAxAAAAGOgAADRZ2ZH12Z2FzcAAAEnwAAAAIAAAACAAAABBnbHlmAAAShAAAODkAAG08sNGyNWhlYWQAAErAAAAANgAAADYLa4YHaGhlYQAASvgAAAAhAAAAJAeEBCBobXR4AABLHAAAAosAAATasng5PmxvY2EAAE2oAAACbwAAAnpyVVfabWF4cAAA''@;'; put 'put ''UBgAAAAgAAAAIAKRAh5uYW1lAABQOAAAAYUAAANkL+aGSnBvc3QAAFHAAAADoQAABiGXFj2KcHJlcAAAVWQAAACBAAAAjRlQAhB3ZWJmAABV6AAAAAYAAAAG9G1YmAAAAAEAAAAA1CSYugAAAADTwZ2GAAAAANS+pOt42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcLbFVVFl37fO5r3wMspXyEUgkhUAhWhjCiCKNxmlpIRxmsBA0YNY4fkM9UZKbGyGcUzUjqxJGKZELQMtpgBUTFqkheCP6IIfgJEiwEK2L9ASoaI8p13X0fcEv7ZuxKV3f3Offcs/de5+3zIADSGIopkMqqmloUwNGDMITl''@;'; put 'put ''H4GBnfOXunkomXtj3RyUzp0zdw5ng/5oNJ4RseVzafRDGYarx2IYamxLPBos0FUlaEDAh6TnQj4xUH0eJachqAobyB4TsQK/IJSBMNwG58kAaUMGPbizI2E2bA73hvuR5yf8Ju/I7m69n2BAp/8/C/+dd4WOvCNteUf2htk8I83hwXBrhLOf4O/OCF12ivDzsIFZMhjCTA9ntkYQBhWExQWEw1jC''@;'; put 'put ''4/dEgPFEChcTBZhAFDK3E1mpRYRgKe7nzAcIz4yvoP9FQvASIXiZMHiXcHifcNhPeHxCBPiUCPAZEeAokcI3RAoniEJW7xeuFhJpKZIiFEqxFJNLpIQ8kJVNc+0xVMkwPjOKEN13vGOjO7a6Y6c79qgkClBFFKKaSGMakcF83MUVokgCjSTQSDwexkrObyQK8RhWc/4T+C/nP01ksJFIYRNRgOeI''@;'; put 'put ''FDYTBXieSOEFogBbiEK0EoXYRqSRJdLYTqSxg0jjdULwJiGanQAHiAw+JuK8GM2L0bw4zYvXvHjNi9O8OM2Lk/7Sn/k6V84lRznyXLWCGRrOGlewtmNZ0/HMzARmZD4W4K+ow51YyFouxTL8A/cxCw8w+o2M6HlW8iVW8F1Wbj8r9ikrdZQ7OaEnq4jvLYnOl7lXz+EbUse4e1JfW6m7hvD7btSq''@;'; put 'put ''I9H5yDvyJXGsmyeP5T0bX+b+7gu/Dg+ED4UPnT2SO5FNYdPp/75IjHyuzxiUqiZENWFwDWFxLeFwHeExkwioiJWcE6lBVA1G1WDQQgTYQARaadFKi1ZatNKidTU4RFgcJiw6CIufCY+TRCC9pTfr2kf6kPtKX3JUUdGKigySQVzfYDTOITLoTfRQpYsq3ajSbU7pVxBJpTuNJ0jEk1Kl25zSz2jc''@;'; put 'put ''aVROo0ppVKeUHms8VvcrRH5dR9E61azJRRgp12qcKdWvVf2aXMyRik0u8kjLJhF/UtFWs5CSMXIx3x59elUxwmms17WMayYjaWQkq/A4o3kCT6IJ6xjR04xkA09jK3eb5S53cHeHWIMO7uwkd9CHb+vPtwziimWqZ4Ne2lGKw6W0i9nfLqUlal/KTtQWlJHbmf/tslxWyCOyStbIOlkvm2SLbJXt''@;'; put 'put ''8pbskg9knxyUw/KVfCs/yknjTNoUmX6m1Aw15abCjDMTzGWmytSYaWaGud7cbGabBWaRuccsMw+aBvOoWW3WmqdMi9lsWs02s8PsNLvNHtNm2k2HOWKOm58sbGB72GI7wJbZYXaUHWMvtBPt5bbaXmlr7XX2BnuLvcPW2b/be+199p/2X7bR/sc+aZvtBvuCfcVm7Rv2Hfue3WsP2EP2C3vM/mB/''@;'; put 'put ''dsYVuF6uxA10Q9xwN9qNdRe5P7hKN8VNddPdTHeTu83Ncwvd3W6JW+5WuEfcKrfGrXPr3Sa3xW11291bbpf7wO1zB91h95X71v3oTnrn077I9/Olfqgv9xV+nJ/gL/NVvsZP8zP89f5mP9sv8Iv8PX6Zf9A3+Ef9ar/WP+Vb/Gbf6rf5HX6n3+33+Dbf7jv8EX/c/xQgCIIePB31ZiN5iXKlcrVy''@;'; put 'put ''Y8RYrNysnmXKKxM8VblCeZLy3yI2g9WuVa5SHmH4mSrlyhXKkyNGvfKz5tVTtlyiPEn97con1DNKuUl5pHJG+c92NvkZ5frumVU/E2O1+rswpitvVl58hmVWHLva85TfVF7ZleMMqN2Va5VHmOz/Y2o3matsd4ypyi3K9WeY2ctq9v43x/nMdssjE1yf2HMnO1HTJeovV3/SrtQcPqb2rETm4yg6''@;'; put 'put ''2TkV+bP8jWpPjm2dE2smrk4cdazPnJ3zR3Oa1X7WLjql3pzGPlT7/cjO1TTOWKztWHtJf1zZOG/vqb1Ya/SR6vxrnT9V39Wuc/RExLrt5K9Q+0SughtPqzrpj0/QpIRm4ook7efUvjX263w9F2aw+pvUHyttZMKuUs6oJ599XO27Nbqr1N6jdnLl6nAL+XzlZKWSb5ycO93Z38CdZxqcp/dS8N5V''@;'; put 'put ''zqxEt1PHrj2aXTC6YQf4HW9iKYzDRexhUefuxb49iT096ty99Y5arJ27D/vOFPahGqIvrmKf68dON53ffWYQpdrLB7PrzWLXms+72xC9vY1nR1/D9day8/1Je9/V7H6vskO+hl24lTe6o6jXW+UqfCcej7MTD0KL9tRW7lfkHP1uFkDCWIVLcAt5Obtdht91yhjbKN69L+SuL+cur0QtR99W7e5V''@;'; put 'put ''PqisZwa7E6yVwF3K65U/1qz1VTuDP/I9t+F2SUmBFEpaMtJTenXd0a99l590AAABAAAACgAcAB4AAURGTFQACAAEAAAAAP//AAAAAAAAeNpjYGZyZ/zCwMrAwtTFFMHAwOANoRnjGEQYzYB8BjYGOGBnQAKh3uF+DA4MCqp/mKX/GzMwMJ9k1FFgYJgMkmNiZVoPpBQYmADwbQq1AAB42rWTWVCO''@;'; put 'put ''URzGf/+3fREqFPX29mnTRqIURfalyL6UrNmyr9ka6xBDRVLIniSjGRNTU7Yb7rg1Y4y+z5Vb7gwdx1dMM8y4cmbec95zzpznnHme3x9woesLQXSPVOqZOOeuUqzHJYzDjYGUcIs67tJIE8200CYeEiCDJEwGS5wkSaqkS6ZMlRzJk0IpkhIj1XhlvHeJMo+breYT84vlbgVawVaoZbOirGFWunXf''@;'; put 'put ''5h/5TSl9h8WNHtqPaeOZ+Ep/McUmsZIoKZImGZIl2ZIrBbJBNmvtl8ZbrX3IbDHbzc+WYQVYQVaIU3uolfZLW31UL9Rz9VS1q1b1SDWrh6pJNaoGVa/q1DVVq2pUtapSlapClakzqlSd6HzTmdWZ9P2To9xR4Mh3xNgH2v3sPnYvu5vd6Pja8bnj8IeQd8ldXv2n5m54O5Pgj1sEo/vP+IdG10kX''@;'; put 'put ''XHV27njgiRfe+OBLL/zoTR/64k8AgfSjPwMIIlhnPEinHopJmE4kHBuDiSCSKKKJYQixxBFPAokMZRhJDCeZEYwkhVRGkUY6oxlDBpmM1cxkMZ4JTGQSk5nCVKYxnRlkk8NMZpHLbOYwl3nMZwELWcRiTVoe+SylgGUsZ4V+/w52sptiDnGc05RTRgXnOUclVVRzkRoucYXL1HKV69zUFP1k9DYN''@;'; put 'put ''mqV7mqafbRWrtR3RbOBstzfrWaP7XZz47VbhXxy8QD2bWdljZS2bJEaPW9jOMew4JFzzGSlRugIiuKN3HqBplgRdD/HdZ4qcYcSyjb1sZR97OMBBXUv7OcJRvXWYUk5xkte6mnqxTrzEW3zYKH6af88fkM2q6HjaY2DAApKBMIwhjGk9AwPTbiZWBob/IczS/42Zdv//wnSJSfD/l/9+ID4A2s8N''@;'; put 'put ''snjarVZpd9NGFJW8ZSMbWWhRS8dMnKbRyKQUggEDQYrtQro4WytBaaU4SfcFutF9X/CveXLac+g3flrvG9kmgYSe9tQf9O7MuzNvm3ljMpQgY92vBEIs3TWGlpcot3rNp1MWzQThtmiu+5QqRH/1Gr1GoyE3rHyejIAMTy62DNPwQtchU5EItx1KKbEp6F6dMtPXWjNmv1dpVChX8fOULgQr1/28''@;'; put 'put ''zFtNX1C9jqmFwBJUYlQKAhEn7GiTZjDVHgmaY/0cM+/VfQFvmpGg/rofYkawrp/RPKP50AqDILDItINAklH3t4LAobQS2CdTiOBZ1qv7lJUu5aSLOAIyQ4cySsIvsRlnN1zBGvbYSjzgL0iVBqVn81B6oimaMBDPZQsIctkP61a0EvgyyAeCFlZ96CwOrW3foayiHs9uGakkUzkMpSuRcelGlNrY''@;'; put 'put ''JrMBA5SddahHCXZ1wGvczRgbgneghTBgSrioXe1VrZ4Bw6u4s/lu7vvU3lr0J7uYNlzwEHcoKk0ZcV10vgyLc0rCgpMdL1EdGS0mJgYOWE5TWGVY90PbveiQ0gG1BvrTKLYl88Fs3qFBFadSFdqMFh0aUiAKQYe8q7wcQLoBDfJoBaNBjBwaxjYjOiUCGWjALg15oWiGgoaQNIdG1NKaH2c2F4Mp''@;'; put 'put ''GtyStx0aVUvL/tJqMmnlMT+m5w+r2Bj21v14eBgFjFwatvnM4iS78SH+DOJD5iQqkS7U/ZiTh2jdJurLZmfzEss62Er0vARXgWcCRFKD/zXM7i3VAQWMDWNMIlseGRdbpmnqWo0pIzZSlTWfhqUrKjSAw9cPw6ErQpj/c3TUNIYM122G8eGcTXds6zjSNI7YxmyHJlRsspxEnlkeUXGa5WMqzrB8''@;'; put 'put ''XMVZlkdVnGNpqbiH5RMq7mX5pIr7WD6jZCfvlAuRYSmKZN7gC+LQ7C7lZFd5M1Hau5TTXeWtRHlMGTRo/4f4nkJ8x+CXQHws84iP5XHEx1IiPpZTiI9lAfGxnEZ8LJ9GfCxnEB9LpURZH1NHwexoKDx2wdOlxNVTfFaLihybHNzCE7gANXFAFWVUktwRH8mwOPq5bmnNSToxG2fNiYqPRsYBPrs7''@;'; put 'put ''Mw+rTypxWvv7HHhm5WEjuJ37Gud5Y/IPg3+LF2UpPmlOcHCnkAB4vL/DuBVRyaHTqnik7ND8P1Fxghugn0FNjMmCKIoa33zk8kqzWZM1tAofTwQ6K9rBvGlOjCOlJbSoSRoBLYOuWdA06vPsrWZRClFuYr+zeymimOxFGcyAKSjkprGw7O+kRFpYO6np9NHA5Ubai54sNVtWcYW9B+9jyM0seTdS''@;'; put 'put ''XrgpKe1Fm1CnvMgCDrmRPbgmglto77KKYkpYqCI+CG0F++1jRCYtM4MugSJkcbKyD+2KHTmignYC33rSKu/bQu3PdfIgMJudbudBlpGi810V9Wp9VdbYKFev3E0fB9POsLHmF0UZTy57354U7FenBLkCRld2v+5J8fY71u1KST7bF3Z54nVKFfJfgAdD7pT3IhpFkbNYpRHPr1t4MkU5KMZFcxwX''@;'; put 'put ''9NIe7YpV36Nd2Hfto1ZcVlSyH2XQVXTWbsI3Pl8I6kAqClqkIlZ4OmQ+m52a8LGUuCxF3LNk10X0HTwhHeK/OMS1/+vcchTcosoSXWjXCckHbR8r6K0lu5OHKkZn7bxsZ6IdSTfoGoKeSC44/l7gLo8V6RTu8/MHzF/Bdub4GJ0GvqroDMQS562CBIsq3tJOpl5QfIRpCfBF1UKzAngJwGTwsmqZ''@;'; put 'put ''eqYOoGeWmVMBWGEOg1XmMFhjDoN1tYOudxnoFSBTo1fVjpnM+UDJXMA8k9E15ml0nXkavcY8jW6wTQ/gdbbJ4A22ySBkmwwi5lQBNpjDoMEcBpvMYbCl/XKBtrVfjN7UfjF6S/vF6G3tF6N3tF+M3tV+MXpP+8XofeT4XLeAH+gRXQT8MIGXAD/ipOvRAkY38Yy2ObcSyJyPNcdscz7B4vPdXT/V''@;'; put 'put ''I73iswTyis8TyPTb2KdN+CKBTPgygUz4Ctxyd7+v9UjTv0kg079NINO/w8o24fsEMuGHBDLhR3AvdPf7SY80/ecEMv2XBDL9V6xsE35LIBN+TyAT7qidvkyq82fVtal3i9JT9dudd9j5G2UzuiwAAAABAAH//wAPeNq1fQl4ZFWZ6DnnVtWtLanUnqSy1Z6lktpSqeyp7Etl6XRn7e4kvSXppqFp''@;'; put 'put ''6IVFQBAbBkVRnHEbxUEQB1kaBFqUZRxGBZ49LiMOOo7om3FGHbfnG0Z0JDfvP+fcW3WzNTjf96CTVO79z/affz//f4KMaGE9iT8ueJCALMiJSpAf1aAUakEdaAiVZFw9ne2t6aZkbThQWVrsshYZNAQZY3Var9UrOpNOvzOZ8qeSKZH9FOGj8pQ+oz/pG3iSUj7LMKxBOpnCH5f+Dnf83+6eB3p6''@;'; put 'put ''Hnigx+f19vT0HOnxnnvgiM97xPvAAw94jxw5NzDwwMpA1d8LP+v1Br3w75ajvoGBwEH4NOBt7/Edub7ZHd111VWPXHXVruiqN+qFfwgRNLr+OvoWOc/WFsz4EMZoASFUmEWECEsaLAhuYVSj0Vg0hUFrkVZ019mTgt8VSjU2JRMup0PnnzlT0qcNh8s8oZCHnJd8P6wuKw2HS8uqEVpfR334XnwD''@;'; put 'put ''ebDIh4wIFQnw/SVExw3AtxthXA+qRMOZAYuOIK1AMEF42YQNhsJsYVGBIIr6BbOR6PXWrAYTYiGjCFVWlJdBK09pSbEbxrdbc/+J5XVYTIp+0Z9mX+kk+0qK7EukL/GbsSvtJyK7Iu+NTEQutx+PXWG/Aj69F56csP3Ne2PvxReezz4C/2Wfzz4K/2WfR4CZ0PoF0kbeQBUoiCKoPlMbqfN5PaXF''@;'; put 'put ''bqfNZNSLhYhoAW1kBJaFCT4I63Oj0UqrVQBsBXSwx6lQOO1ypxpwqrETp2GvXW4xFHZWYCeCx4XYaWtKNcID0nbmsql3HejI7j1yJLmvderKxdb+8RNXSZdHE3VNv860ZK44KWZ6ivZlh2w/Kp3elZxpFjs6zbtHO63/6Jmbwu4a6wuGFr8031Zd3WD9JsxDiyLrvyNr5CnYXTtgOora0P/KPla8''@;'; put 'put ''ay5TZ8JaI8Y6LV5FOqQ36PRHkUaDlgimu18AeyAsmUUiCBZh1JN9LAxNopdsggCUtROXzFgU3eKoJ5PcpgUhAEuboe1bzc9nQrFYVZXDgVCsLdba1FgVrWqoDjkqHRWlxXabtQgWUxgqFJ11No7RZAIw6SjEfpzEfoZKv0/ndLiSaNP7Tpx/96mRmtqRWAy+Z6P4vbuk8MTpRDIUjidDeO9ILTzk''@;'; put 'put ''r6rj9GEijPc1jEfjuxoaJmLxiXo8tTaJ/7IjGu3siDV0SvvqJ+JR+g4g6rvp486GaCeitBNcf53cQL6AvKgeNaHOTFs8Gq6qKPeUmIhRIF6MBDJCaRsvAeu5slpgOIYZoKCGBp+voakh5av3RSJ+neiq04bCOr+PLqoprV4avHM3pd060Y3o2tx8nbY0gNOlkqAvse9013JLdqK8NLqnMTZRPzE9''@;'; put 'put ''1FdXORGNnZT+Mllc2tNU73cMXNGxOpo2+hrnYnPtvQf8Nf2hhmwkkq1vHw3sGeiaDCz3nSIj0XBp2lsaDwcSa691Xz2cmmzKIIQpn6MnyYPIjOyZIipF2PbiUWeAwMRteXkh+qetXrfba7XE8H8se90+n9u7PIxoH63rM7iPPIsKkO6JAi2O1TExk3YDg8CixAevvHK1cWrX5J7G2R/d8q7X9jRN''@;'; put 'put ''P3Xq1FNTada2Fto2Km1FaMuREE5z/NTumYR2q9DDqemnrj715EzTntfedcuP9rC2KXwCHyDPo4OoOZPaOzHUVF3h1ulhESMCxhqMtBit6rBWS5aAeF1aEEIAemDP7s72WIPPWydSSoSZppvSOhH+9/vC/Dfg9QYcDvHfkgm3C/5nv3FUACxANPFX7NdCDBtZgflvtJswtHe5mZh93mrUEbuj2qrT''@;'; put 'put ''WQ0ac3GDwW02uw0NxWaNsUijt1Y77ERntJoLKJzRZgg5GWABA7SWaqKOAgboDBlsRgpZgE9YTKUJn7nA7jMKFtFgEQstGr1Wq9dYCvUWvVikMfrsBWZfotRk4ZBikegzAyi8ZaCiAVvNHNTsg5ccluG0Gy0TB2lGJhTK+JFGwJppoG2QFFhAy8D+eAEBaseY4C7SiaV12E81YIpqwiRxPLv/mWf2''@;'; put 'put ''P4u9zz47//zztL+B9WvQt9F1qBC5M8DKaFChMWCUgI3SGHCAT0Vmu2oLPKFwmTccjh2LxEE9hVO1/uE07asR/QS3407gzuKME9GOpumcYUYIZlREO7N7nd5GrJd+jzv3svX0gp58EcY3UY1Pn4DUw9iNKTGYkDEgABGoteJlskY057QhXv/V+gV8gfwUxrVmCmmnt8LYp/mAVHThkcul+y4nP32T''@;'; put 'put ''im5QJk0gO24hz4C4q0SRTA0QH1sxlxIYlDObQFERKNbKoopiF5OLoG/qNJvlHkk1NmC/jzJSBYwk3pbN3jY9fS6bPTednonFZtLp2Xh8Nm3e9+nV1Xv37bt3dfXT+xZ6rx0dvaa395rR0Wt7GQ5g3bgcdLYOeTLFsJUC4GuES3GMLXjUameoE8PppNX/hWtqn9q9QtKjw+9Ym0SsfRQWVQzrKUa1''@;'; put 'put ''mbDJCMsBaiBkhKGTiT9qdCwgpnOs7kBIIxbXdWFFaovhJlncWTBsT/TNvrbRpqaZUN+Bj2eOdYzM3YuHJfeeb7UsRpu6GxPt5xqXOvqvHfqzRTa2H3BZAWPXoK5Me0kxjOPDmMDoMAWmuBHByzCyZgmIEyYCunOJ8rybsXsNqg4EvIGgKJbALlOhkkxQPQOWmjvRtHl6ooz2fzhX2x041Nqza2o8''@;'; put 'put ''m+2d3NWenAp1LXy4/3j7SGvHTOdVw+ZMqrcukWlMpfFe3JyMdUbrO6+LTTe177YV7ult3ZfkdOCHb1nAuxGkG1gfZjAy8IhOC2vACGzNFUAdU6kWzajJZCowFQBP2YroXIPeME5aqbXpT1kFfKv0kAmPXXv48PJv75nEX5aG5u95A/dLz8Dq44CfGhijDLVnWmwg9grMBGvAnhlB8B1pQIELAlng''@;'; put 'put ''2nsjcsAc81ntAT9DDhg6SRkjYphykdiUI8O/ONI1t9KzZ0/vZM+gEX9W+qKuZ6zzaEf3qRHz5UP7xtvahhNVeHXxYiR5qKfvWEuOB7pg3zyoGvWD7QNrtwLRBIuJViOM6ECaaLSCZhXlNKgI81IEQ1kZzK66LOz3QvvSQDCkB4sMybOhwoLyiFvkrAHCOGnL0Rplk48e68xcPXjH7dlze66cbwz0''@;'; put 'put ''RxqnErjqUIu7NzjT3TJVWDjejT/feLCn+7L25z6x+tkDE+Neb/912bqY9NHqbn/HSEdibJbSHggd4mZ8U5kpA32CGddQeYOZnQ12LVg11FrE3pTXCYLgr6SP4B9LPzpNJhdH1z5J7Ygo4CHF8BAG36Mv0+3QEZCqI6IKA7J00AMGMOwPkw7V1RQJ1anqxmh9Wbgs5KuiqIgYqLjazpCQkaOyotz0''@;'; put 'put ''M+ihQkJtiZ+f7Zvsbu/rvbKr+8qewZbuXf1nh1Jzk+3tu2ZTvXtjwwH/cHxvrzk229qxz1W8q7l5KlI/lW7d5XLva2+di+KPtsfqO9ob4m2C9JWuhK+pAuOKJl+ii+51GtaYye91RRHssQG4VE+1BqxUCzyqJatA6QIsTxBcWZUSUPaaLzAYCLK9dvGt5hwL2pb+Ii/YRpfOZaIrib+4ZZczbPe7''@;'; put 'put ''2DbX0x0nz2zcZb7z0kfoNrP9pmtgeoLoQCe4qcymMprN0ModKi13qMxmhMxus8tWxJSHTrYgFOVBtlEkZfJPfIuiUaRTyifws5h+JDrws0D/WkVkBen8PmR4HOOn8fseS9ZxOpwhhMwDHeqe0BGwkeypoLMAO9P469L78CkcH/vBzEMPzTK+60ZPEAf+BVCeiHyZSkqv1DdD4BCQaVlME4Hq7yIq''@;'; put 'put ''pSmn0/+78Xekevb1i/nb5mHMERjTqYwpwJjpepzSOrUj+BSM+XUp9chDD838YOwHdEz3+uv4O7D/TrCW05lGu0FPxRum4lmAgW9S6QkqqLVYo3FrRl0ul9dVFSz2B3V0IjIH56QxMLZzg7/6xO6jfc0zA52Lt3cdaorPpQ84FMzequuO1HVNdV4Vn2mMTLaaT/wg78rS+UXW7xT6yX2Amwn0o4y5''@;'; put 'put ''ykaMhs4OIoKQzD7mBwcpBYaOQdAYbjJjoxYbZ5EWJLWoxUeRaMJ6UX8Y6XSK30P9K1iG1UC9qxponFQaw2INRsGw+pad6MDDasm1QkgnIN3qzq31enEWgUu9xLqZAD+rpKcHoZ6JnvHhQVhUJhQK20OBUKhALNtiQvhCYRXvJFzutFvkEiFBMa6yLhLMYvcrolTmr97HVq/+8snlR5bTM9Foh7Fi''@;'; put 'put ''VzQ2WtdzWWu8z26eLtK4Dd7y8rR/3yf2Lz+6snDPYsdyyt5ystfeF0zEagdrm6OnVx5evvLLVx24b3HiynQkHKqP7GrsPdVX5+/STbjPtJgqqmqmu6Y/OLP66PL+T+wvryoLeLExticRbYxO1Mfb2f6VwrfvgRwWQZPWZaoNWEPwCFARkJUGtChVbWDwU0tGr9cb9UZumhaDFhWZaxk2YRKRPt5+''@;'; put 'put ''Eofpv8N3wn/k/NrkT/GA9CXA+6wc0yhCJciHOjKtIIlhBB1wjlZDtNS8kIMrIuYWMB3LU2qzeitLfR5fsctaYiuJVOmZAbpRIHsx06p12GlXPszigZb5RDze0d10oEN6BNc39vQ0vvRq6/Bw66vkfGQ83jjsqdjb0jQdwx9M19U1f1V6qSuR6PoXZg/FQNbeDbxWjhoydaUlJqOGGhWKPHVtCP/A''@;'; put 'put ''g3JUFgqGaPhHkycBceuu46b7Dx26f2no1sRgYLGx90x//5nexsXAYOLWIfPB+5eW7jvYkuwLR4auHRi4bigS7ku2wL5QvH2Z2TdO5i3k0MQcYxlNZpPDZnKanaEqLUWPQph1OC0TYB22zv7qxCMHDz5y4lf/OXF9f/87xt9Pzs994vDhT87tz5waHr46IxnY2sGAIX0wnglFMxFFslF7RrMAuqVQ''@;'; put 'put ''bYUy697Ew0tg3tidspyzep2P48ulP8cfkkT8BzL5lcVvL5Lzi2hD/wZUkwkp/VNpxXpVVD68MCAD7ZnJLdarX+l3hXb60qL0Xd4p36/7Yb+8KJVJgMuAhEpCNFpmPGs1iBEX90+pJcjEJGh/O2yan7tXXutG/t20eSk//jNcFvuL4aXPHDr0maWRP48N+k809dEN7Ivs8z+Nr5Z+HW/jW9ia6AvV''@;'; put 'put ''8y2s8Hwgv+Y7GU7DmYBsMi6DjUrXS+NDFrQZl5iuFr6S8J3cuSzdsbyMr6HshKPSt8l56TXsg15oq8dZfJLGFVS+BnfTwNEYXV6mrQDWCfrjG4z/gIqYac8omhmsZEkAYnIztBchiz2ogeZ5Ux5mQbnsseu9g/Zddc2Dyy3L3eZMor86uacbtFS87/J2vs4Z6OpDbJ1VmXKDXkuYhsIsAibwGKXd''@;'; put 'put ''ZuM6MWnFSQP2g2von1nGfbdI/47r3/lfR2C60sfxivR16TbcePxl3i8IYvCXzyMttRHZpGlviG4+R50Waa1WOukg0EnSShxSw8oi0NzaedYeeAgIIDcvcZt5OazKvDzgFPitJtiB2eXf/naZfsGcuvDfAvJ/Tn9KbrlP8jCj44qMRyRkS4+2XI8YpuRn/eH3Li9LZ+iWvEEMa5Pw9QaVvZR+f///''@;'; put 'put ''w5flAgeo8uB9S72n+/tP93KpI4sbeLp0/8GFoesGBq4d4jTLdAGl1+OwNjPIHPBGYRbApgKmoYl8AByWWFjgsBU4C53WUJWOBr+9Obnj9Csi2ZrF3iEY9/TQs8vYnt23L/soOd+ymsmstvwGjw20tw9Ib6px4KA2fCZBA9hEK1BHRqBhwLwPo1FFAZ1OZ9gZqg+FqfBFMAdxgyKmMeR0OO1u2oAV''@;'; put 'put ''8vuQf7h1LHpV+5KCHulXPYdal+tz+MEVVzR09fWGanJ4kv6QmO6b659QISqPp0KYC+hMQgNiiku4jLRaWaTJLA5OstVqp/KGztQfBr/TyjCmTcq4IscPTpw//df3LDOUSf2PMnThW045//Cb3zCsvYsijNF0aP2/SBt5FrwB0FEuJ/VHCVahiQZYVTqqGoWDET9FU94LDTeQbQSeW6alj53qWL6x''@;'; put 'put ''b3RiYfxwc8cVfaPXp1ojy43Bdl9osOvUmdarJkwnsgc6Ig1xp61htK1lfyoRHa2OlMc8ldUei2dupm1/is6zBnA0yewKHhfJuXY8kCGbyNgPvp0fuMT4v0n1vyyDa7co8+4uoIt7oD3YvZkKOZiOsXppTuRwBByK+qXCivszitzCvtuzy/H55ua5+MrobdPmsTtm8ful0x0HmsA0wHdKV8/eMcbl''@;'; put 'put ''jGID6ehYWuaLgqSUhSSXNGCqc0ljoBF1Dybfk75/Ev7R/QGGPr/2HVLP+gKvQFPCeAj6MlJZDwKCnuEw1c0WDxLCVqSlmpMKHfgn+E3YX3nywYdPPvzgyX9ZfuoLVFK8Tszsa5L4136IlL7Jp5g8A3lo0EHXhIZjqY2GOa3ZbDYrxSvMEro0sN7xJ7Dwjq997TosSGvXf+3F6/Cc9NdYlP6AZ+HT''@;'; put 'put ''H7DI+y6Avj8GfetReaZUR3kvJ9hkb9zGzm7kPmHLqqRfXf/33zoj/eYoLsCflp7HPdKi9J+0ryboa7ei6yk+8yGtnH+fC2nZrGzGae7mg8Jvwu+T3kGKpFP4g2v/NkHI4sSaxPX9+Pq7cT/57tv0vpJAWPA1/sZnPvMG+e7AWhswEF7//foF/Lc7xBsFsGf1l+MFHm7EKArjhXPjKfEwaorR2Cgd''@;'; put 'put ''D+XHc4OwT8FX9IEHfv/7JvLVgTfP0+4T+JP4C5y2Htcd6cu4QKqzCCGMTKOlp+Uox+M61GdP2v1h0f/t4U+OnzkzBtrn19/8Jp2ztH4l2b3+NAxXxfrYIT5LuxABgYRMrT08NMz3tYtksJu8Am3drK0ZWlJpf9oGPiAfNe32dx24doh82fHn3KerB5vhD8QKfBFCN2YcxVjQuEERWMFyryjXCjqt''@;'; put 'put ''Bnw7B7hnVQCs1RHtKvM9qQFfktVj6orJ9OgBu2crCOUqBqeYZPMZp8eDkCfkCXorYdiSQNBvNwBSkcsJWFUHpnKOrA3sM+XcCt9+9cGypfjU8fRSy8juzsHOqcDR/bZ5c/doaqQ7QaxnD0kvDoYje7OJibqyopaxuuFGKZ6s73c01dTE+ZrHQN5Mgx6ygZfy7AWLETQQlldZDsRVlM1FWErkcBpd''@;'; put 'put ''Iugi8FS9AOTdDERNsg2BN9ml9SqHfTsDAozqtWLub4CZB0/VYbcjZPfZvZ4SmDbomE2hvDBlAKsSwVPbB5+7orPzit62pYpDhyoX29wjNTUj0YbhmprhBmIFF2H8hv5UfC95RvptLCW1RKdTqalodCqVmo5ymooAfUhAH+WoMRM3Ah5KTDDJUmByIectlezsLbku6S29ftNI9sbhpkOhXnd3oGEi''@;'; put 'put ''Gp2IBnqKe8OHm80jNw4N3TBSG+osrUhMxxPTiUpPRzjC94/aEc25/bMK6v2jiGR7w5wB9f5Z8vu3GYgRqcjChpxIlf2jgIWXBGT7J7+l0Mx42gizdf9sIb+V7h+WCT6PJCvZtH+k+VDFUlsv38TFyqvZzkXZLpJn1vr3xlP9N4yPv6M/FcOWtbs27x+N2bxOwrB/LtiUTKaD0I1jh65gwxBBQ5Zz''@;'; put 'put ''M5XnLxOdGyxgd7m7rLQEmjrBj6LzDfBtUxtfXjpHneiFKeOFaXen75rmoeuH+s8Ojp9sk44Z53u65s24yTCaGa0qzgQiAzeMj75jIPue/T278RXZrq4spTEvfFsk34Jh92aMRVintWKkozElulllSKfTLoGlVcyCE2hBg+VoIigqT6YUHAMdSJ3VrS/nM8agn52viaKH6wg/lds8FMbpUef81vXX''@;'; put 'put ''HxwfH20va3IG9OVFrkqinZIm8ONTnZ0TDmuP3uT3UDxG16dII+CxEtWhazOWiiKi0+Zjs7KIBDkHakNHVqlhuCRqiMzzDKl2JiJzIFQ8wkwpINoEBiKyqgqhqrqq2lAARqwMBYMBKiKxVeZ27rV14I3EkyKqs3/S2HvNaNepULhsNrpnqXKxtfd4R8fx3talCqDH/v65uX6ilRI9q62hyhFPxWhv''@;'; put 'put ''tj7edXJw8GRnMrJHumbvwMD8/MAAP/ujhrCVxSVPPmVjJhPfGjdibAQmMYtFlihWsMw9bu7sb30Nb/IPWbRDfgOMUsCtPavD76BhASrhYNfkQJpVFnL49vn4wd7GUE/40KHiediW5L5W6Qu4uXXY2+yV/gak2Vq1LOs74PuT5B/AjrKgAT5tVy4oXUwpxSrbqZ6MA+w5TA2NVdXjeWo6WAoLzCxS''@;'; put 'put ''rd0UqRbBCjjg95cU+/3FicOHyb5AcbE/4C4OzKz9kY6//tL6uDx+KTqSMVpAtxZiDclRt1Y1F0FgpKs5oAPMeDSMuhEACIidPm18CTKFRdFLzSUupxxHF7fE0WVHgJrJutxET8aLCkr8xRWHxzryE37zP436MaPfQwJrr3buYvs+CAugZ4YmtPQFA3PSlJ23cg1I54Q37LmVazz1C9htcHYX2K8b''@;'; put 'put ''3szPX7BZ7cwixNQYYioMXOmu75799J5Dh9auxR7p374/dQ62swfrOR2iz8F8BNTOp2GiwQw5ICJPwKSKkXjYb0oAbX7+yXzQZOjQISo+kbJOoQ9420/lTynG2iqMWEybMrWLChbtkl7UCVqtNauhp7ZsWSB54Hf6VgdviU5Xkns5z0I1fuTzW+1+u99hAPmjomTdhg9JJ+de+E7+Zjp2sCPePMC+''@;'; put 'put ''HT7sGIs3z7pt+9oUCm9tGepNSc8pP4l2KFzfHIs1IxWfWsG/HrtgNRPOqHQNduZOaak8sqq5kNHUFv7kTOhAdpj8ZibUicqMZR5s2q07fLh4Ts2DnQ3S40SbDccU/TMKc9oU9yh5y7iH69Jxj9dvzILpMHTjCBgKzHJoiO6Kwj/ZcBi5YQjezYDdEJ9OcANCsf2mwPazMtvh6Gbbj2pyHbgvwPx5''@;'; put 'put ''A4xiyM41PZMKm21DFczbsNMU9P2P7DTpv8nj89vZadQmmgKbSFnXRpsov64SlWGSVXQSs3Ksm2ymDTCXsF+sm1XQn2C/aNcmsC5vwMxL/VvtT3Db8UlYlwn1XDDpqKcur8rKFCbYMtz8ZMaAU6HovFlK7YALIGWYmLE1JZ0KCb+83LPrmHj4MP7HtpnJPumfiPYwj7m8jl+E8YLU3nVggp3gHcOw''@;'; put 'put ''IPxykZeSzZGXIAoEagPM3g2pQi9YsTS4TqZxF0LF8stnGqKzc5Gm5o6lPcf2xA/XRcYGqpPuhkTzYPzEjLk6ONgVrKiqspb2dAxMV5UNx7xljmKHxVrZHhuao/YSzHGRfAjspWgm4sY6GuYFs+5WqkvIAj00ACSAZ3aAm3LMBrL7qBEU5O6VVc4zAolLD7Ca0njR2VTWPjo+fvD66ytdReX6Eqtj''@;'; put 'put ''ohPHpt7//inpVY/fpOc5SK8DPrVMvthhQJKTLyBaZI2pcgfdylNZ8Oc9QC5fQMX7WexfZQZTRcVmZCUWKlaaFSEDxPJHECkgZPCw9BIVMnhCzskhdUSr5OQokQzFBrTamMdt56EX1/F77zn+Twtg+JzAd1MFjcEqRkI1tN8aw7FeOoZTvnzNzVM3n11+dN8NN+6DHt+Jb6Ffa3/EN0s352NNNuib''@;'; put 'put ''5YAZRQ3NJ6GdYwx9C0R1KGCz2Sj1eMOi3x5OutNJ0Y7ve9/7T3z1uZPvPnfi2a8+/zzWr33+829Kb9B+S9ZHST30a6XZMCY9gSlTI4HIXVPiPEDn7mHEaUVFNoc6LNiFBbaKQiwer3WV+0p85tLXLnvgk6s/8exuedI1WmRzpYleOoo/unaxL4P5WkB84u/BmDvEeayXjvMksE/6Cb5Heg0HpL0j''@;'; put 'put ''+ND8iHTPPOu3en0vPkK+CFKrOhMsYcYlaGk85PMSmuMGILMyP2M0YXVR/U1DgGlQRilgszBNKHYXEqebHxWKlMtEbN5fjesbUxFcvTChb2t14lAoHMSuljb9PTUDTbfF63rq4ufSA9X6boO7tvo9DemCwnTDHdW1xYZuGOey9QvoCRY32jk/DmyIy4aHlVw1mn+5F6+ydQB+9CzuQ0+phnwYD7Iu''@;'; put 'put ''ZuXTe4QnaO42ER11btBpYZ6BkqYZJmkQDyKQP8goWA9sT21biwumHgphZ2ubfhddFBWu1ft3LRuKa6vvaEgXFqQb3lNd6zZ066sH0ufYwm5L99foae55C67Gt+FHrSIuWF+XfokMjyP8tPRLlg3Bc99n0LeYbLWwUys6QaqQmVHOcp3s9Lxoo/HLDEueaAi2TfJBOXmg5UwJmFBKvsBaP35N8T8v''@;'; put 'put ''YImMAS94KWYqyktL3C6HvahAS8z8fApGnZbT7kHcl7IcOp41zmPXNF+cbiroTnA/A+Ajg2rBP5yKTnUcbm050jHVsNvbG2htC/VKd/c0NvYEa7WZPvPYVV1dV44V9HRqq72dtSbpL0yRjpsP2PGC7WAbz4FEZAxsyTLUm8nATtFkIiTSXGQRD2sxAaEqEnYcwvwzmlUkity5Rzzpq8xqDwZAs1Dj''@;'; put 'put ''Luj0ptIse1Md7NCVY5p6RsbWfjqUybSsZAau8wwWTMSbh557bm6uofahwXN9l7fLp2y3DD6kjs26UEumyYGRAY+Aiykyt2RFhwmYTWDGLRtZjQDPeXM57TalBqDIRKsAWHmFU0kohS/G8PjRe77yla8cha97WDQXDw5mB0+cgG/4KA3psv3qIpP4avIcy99JsChimCatAv2ywP6SVqCIwhPbZPDQ''@;'; put 'put ''AKPa+0ioPi9WVrpdVZXux9jPKheZpD+9TvqM/wR6rUFJ/H/w3xX5cJ0WFQm4Dr0qxzXH8S3krrcTE6V5OF24R3qe3NX9dmOibtF/4eAHhsgrDlluB9a/AX7Po7DT/gz44aDpELmJqtV3US3GwtrsWCPEtAJWzB96mEvPNwoHLmttXs7g8rGzYzgQn29t3ZtYqyIfXTsKfXeiV9CXQHWZ6JmiSjAQ''@;'; put 'put ''KjImVMm0TSrsHQoESkvh6xX44ffDRzneu96J1qFBMTrD1mYBe0VjN5B8VMJMoxJg3IOq1pykSUQgtFfzUvUAO30BC5CBAGHdtBMM19nFyG0PBAJUZ1PMsQQNFo5Q5TzSWpNXq1sjJTGrs9zv8ABtWmxV7cX6SKg82FBUEHU7LIU2o20szepjYrDnv2N7HtHRPY+g7zE6DK+P4H9lssmLWjPpSqfD''@;'; put 'put ''rCH86I0gOlFGjFxYgeY5gGR1560qdtmtOZpEanHFU3ESabdOMVlBtuCkLMFim/Oi8uJMumpzZhSbOztLEm4q8tFqHquIetGfoc8h/eMEP/Y5JmS3gTmGHTvAnFVgsIge3AHm8hxMAfroDjCrubFW0L0chmyGeTnXjwl9cyMMzxMSXgMZZAFTfzDTZ6Xyh2l6cMJB8tCsNL1m2QACUbcAdqZ8xqPl''@;'; put 'put ''1hJz5WxFNmhtkYWSCSQkVjJHUjSZCKwCcFGySgaJtLbnDL6TNEvit3kqyV13kfOL0ofxMekjLPejk+XqpDDJlNbWCEQj6iqANMuxBpfZgG6tmAhamdzr6dGsgE/CN6Q5oQQPZfktO2ug3Q7AnD2ERg2oAdtAGyGsueltt6qk9UAbWgk3vGWzTGRzC5rXR45s15DH/WkcIYUag7XAdl4nVTU8BmvB''@;'; put 'put ''smjYzH3bnvcm8cuLgcGG63oK9ZWbWdM9c/fM5oylyUi4L9qs8W7k2GbjkU/MbcxgQoymWL4Po/FqmQ/eyWgKq2hzM8wx9PgOMGcVGOCDa3eAWc31s4JOcpg8ja9fpDkzbKwIn8/6+7b0A6ICJ1Qwx5BnM8z6rwHGxuYT4fNZP78F5t8BpoTNh/ezsv7ZjfMBfqqFb99nOQTlNLt8o3WxoGdnDAaV''@;'; put 'put ''eWGxwI9ySxmr8XNCswLQNcZ8HIE5TEmrEkMA3kqKoPDx13ny18DAr6Z5+tez+JlcChhuWMT+tUd4ItiLi/8AOGD5LUymxGWZcu8WPLGcDYanhLy3n9kidzbDHMOxHWDOKjCwt1/dAebyHEwBenIHmNXcWCvouU3yi+ZM3YFfJQ5QArondAjH6oJh4IxwmuZsuvGHz707c+627tvOdb773B3n3t3J''@;'; put 'put ''PmfefQ6xejUlR4VWudajc7J/68IaUldbXlZi1tGUbKQVRjzsqaB6iuHpPG9QzIIp9LjeldVtOEEEg0J9pOTiR4I69XFfphCYvT4QCdnDdlZxoWRxh8A9TKsyUJMicrkxD40jXu6FXUny1eTB+5bSq5GGI/MNjcDaTUcj9UfmJFRZhke7ssDhOHO6v6JMeiKTJcU39C3df9BXmVqJ39gHvO2tbFyR''@;'; put 'put ''fjztwzdTDpf+MHTdQMO0X7q5nuKe5WmwfW6WaeHRLfSyGeYY+vEOMGcVGKCFz+4As5rrZwV9ajOfc1uZjdUuj/Xcxn425e80ZOqAOrQarF3WYfn4K1eECZrL4nJY3EVua8hbJPKsgqQq2ymYy3ZaeWZLttOZltVM90rL9d8baG/vl9ZysSviJV8DSTX/lBHsdhouqQfqqAAdAEpMoMdE+XRTvKDD''@;'; put 'put ''cti6TE5qXM0Bql7PZ4z2gDfgrfOzY61cjFRUpppSco1Sil6gceaxliOZzOHmg+00W3Z3e8vwcEt7JNnb05jsXSbmpulodLrpWLpiX3PTdGye5snOdEai7Z1xmjMKuOZ5Aq8ArvtAvxPUu4i2eS7AHnxA9fyiAo/FWTX8C7nnBQPq58/l+l+ZUD0XKnPwphs5n8Jz4UNgH0ZQEmVwN6/pLSsDLHs9''@;'; put 'put ''YI04sVHfjHVGAyGijnp2uhG5iHdHGBOFyb82bPN6fp6PEwHColWGq0iPdKJet1xgIEpGfkm20GQWqBbPJw3QcZsu2caMcy2yhdhkUgmMzOaGKN+MFg6/ZRdgRlQ1NtbXI9SYaexqa6lP1idiUcBcnT3gDwQDQUvOrFDS3LdkYPDziU0HviBzOnDuvPFlfvqbORn0Xtm7dEKVnjHXvVASWG3bfCIs''@;'; put 'put ''faA3TLM2elr42XBLItEyN5ZP24jXRxKqk2LpDn+bP+BoqqmNsbyETpaXkEIPZcqDWKtpDBGdNlVKkK4EC6i4EDa4ALxmnWwWBmh5AAFjQQccpWOsx0rdeNLFAZDCHqzYdUEKC3A3XRo449sCxwrgj+TAtRT3xhCz3hi3BnR/ouFGEyXwD+bilq2GW3H38a7tsicCdZsNtxbD2OmeLdkUnL94fgDl''@;'; put 'put ''3yHO18vbPad8/RHV84sKPBYX1fDP5fpZmWHP17/GzuxoP9/g/d/O4WlQLKJ6fszJ4X8Gz82s/2/w/h/kz38Mz+2sfw6/ci+PL9GaqU7yTVQGVtbejL2I1QbKlpPDbjPioexjpfQYTwneWzdkl9JDXwyaAJNV9WNwd8vLy2vLawK+UJDm2ysqWNG+7hA1KULcpiBy8qmO29o/n+45kx0929t2rOdA''@;'; put 'put ''b3jfmfLJqoal/gMVPQVz1cOxgXl69GH51NKeW4Z7z44OXdU1PjrR2Bsorgyn63rL1362lI2O1i8Ox8cjFE/8TI/Ky0kuL/fm8T3K8Leb4/X0ds/pvj2gen5RgcfiFWr4F3LPC/arnz+X639lmcvdbnRErmu2gMXclgHtrFPOzBELTSENkP8skL92SQS+1E4wj9BTVAraVYkk6qlrrj5GB8dQXaOE''@;'; put 'put ''rcGgpyQQKPkFraX6lvwL/lKotCQYLCkNdc0/r3yEOSlnjG5UhWpyNpsDbLYwQLlNYJ3pFZsNngqqp9vabCXb2WzqA7LtbDav11vjrQ7awrYNNpvaZKMWm8Zt5wabixpsYQEEZzg4cuPQZE/Z/h5fCBh6or9sfy8Iu5/UxKK7ov88EfXCJ/zB/YmhG0ciVWOhhSSwcr13/LdxbPIAN38R2Lk9Kr3h''@;'; put 'put ''YfvGz2jo/s9xujiItnlO6eJDqucXFXgs7lXDP5frZ2U3f87PHmg/++V+7ladq/KcrA/nz1W3TZfbera6Q7rctoew27+WM+foIezbPIW1/s9PYYXVrelyOdw8J+MGcDaJVDGXllxc5ij62Ba/hts/d+Xsn6ODaLuYDjag+3Zom7OdsGGSy8bS9T2CF2xfN/TSkWktwUB9WIfJiB5MbthqssLKfei9''@;'; put 'put ''M0DPSlmdHY0WFxeXFpcGaOzG4aVBBy2PoaX9YV4KxlV+Im0igtefiHe4C9pzdWHFFeUlZRbpzjvvqmhNBMt4iViFu9hjxZ2sUEzOO91DeoBn6U1CT3MGLPOA6VWKieCAqdVH9IJeFDHW18CUmWW23Wut/Frm4RroWdQTcVWpZC8Bx1qv55FCt3qJnkz9VlhQ3Ba5AdoEP5+x1tbWpmobQwE7GE1h''@;'; put 'put ''r1Esy6EltYPN5LQqiAqpMlhJD0VZyZYk1pWrOep+qySzUgSGy/o3JrPS/FaGzY/lk1plv/hu5guFZF/o51t8Kp7LSXl3QObdD6ranlXaYj16bIe2F+W2BOvnOH2y2jXWNiy3Pb2tz/5b8gzADDIYi9ABJrkBYJ4WMAUCGDlGApT/zlyO57UgT0rhzWsXbBpi0CunzSGqVjAStGgZNggki14v59DR''@;'; put 'put ''UxF+MQVPCKLSp3ZHaCbFaRMm1d1EEUMbWxRessUG4DycTifn8aqBaTzP5vF4aj01YXoiH/LLxzX+LWmgykUgaHM2xbWZDekU999/KCP9Up1T0b/2jCon9GOt7e1rX9+QVZGLobXkYmhH4f9t9hvsubty9tzRcbRd/A0b0Xd2aKvYggLAfJHXyAHP97E7FgYzfUWgiK2AO36GTLP7KeOJC0gU5YAy''@;'; put 'put ''FfKWLDMkgDHtWuXYzeGnVTZWyoBKPaJf4TO3zJGqAsVhzlUVTE5JTyjVioyHmpmI4jWG9KxyheXKhlA9emfGRr2KECZasB2IAWwBmglfBvRRDea+RqvTLNNgrbLj8u04LGOGSQ+mrYIKKFs/PrxdC5qoWhQOh+vDEZfPHmr0B1mYV9y0It2WtFvqGyA59fbH2cLcInW6go0puNXgmUm/kb2uUneh''@;'; put 'put ''snKbFavyccEHw2d4Su42sVj9NrHYzb6AXvYFWK0mo5FaWWd9eUtbnk9LaWSE66xTclvpZ7TOk7cF2rGQUsTvfwB4wY8KUQNqRfdkHPWVRC8q5QoCvQ4EDXH5UGeiRxSCXrNqwPl6XlHULoEbrdXy0+0lfrrtoZd6bYU2Yp3OytugTS3AmY5GaYQ22hptSSUtDZaGuhq/t6zUaaeR2mKzYtrS+6i4''@;'; put 'put ''Nev+E9J2cWVVVdgfMDgrq1z//ZYZvJN1vrK2hpJgTaXLVTX6ttJ5wZd6DYixivE/j1kfXf/Ulrj29wCmlPE/97eOfozHtOLre9DrwMMOnudAsIPngShXefAcIK4zA16Xl5XLyCdwaVokqXDq65RULeZlHWdPquscgQLykGwr0NzZdRjrBXYW7aW5604H0QheJjJ0qo2VTXNLjqNY0kJVRWmx22Up''@;'; put 'put ''2DYv1q5MyK2e0SH5jHqYzqzCbT8c51PLn1WvVcEsy2MmHX597Y/yNIFmafnNU/kzAJB3xk1xSJZjCn6wNlfHa91Sxzt4+DBNcoL+ZoAHPgS60Ae0zngA/yv3meF5BeONcfn5p9lzVjvLdH9U1v3WLfwGHIrrhfcAzIQM40IXOMwFBYbX4D6j9AP9P8z0NFbpadrPYQYzIcOc3wjD8/lJL9BIAc34''@;'; put 'put ''NJuMBnC1BD1RqpE3FfYWoAJnrrBXTFEiSTtFJ+mVGnbtWrn11sVFsAEXavCI9PPehd4fyvUCXpaXnM0UmIyijmpgfT4v3QQfi+R6vlxacL7Ez8N+Uw5b5uefdLL7szDNC5THx97JQ2NjhybxwRrpJawLL4TxnPSDmtyZyU3KmQng8Rfb4Rp89ldkn53aWfdzWwn272G2r3FZtvHY6hA8txKrAg84''@;'; put 'put ''fSFnWz3MZHBclsGf32Gsi7n4gP44Up2TtOTOSY6ip7bYZdxvvivn4x9dQNud5+DCzWcsctupfPwBF14m56GCsH4V9t6Gyum5fe52AT3JXS9goKXUSq4Y89TK7WUuB8sr5Yq9JH9cnEuucGJr3gzq46p97fkD9x88dP8S6ZHEYXp0ebqPK/e5jy8u3bu0KJnxfw2cHRi4kt9FCHMW/h30O11XC5rK''@;'; put 'put ''TLqxXmcgtACZhQeAhjRavWbZbCA6nRIKMIlGQRUMSCb9foSSLcnmppQ/4Y/X1UB3XnsgFAgWwLw3hlHzMl6ltjWbbDpZhQtlPH7aezoYPNMzzNKbe04HAye7FTUuXaPKc8bXbqir6WxKdfHM547GVDvT50Sd/IyvpJpd1uvH2d6mZPr94ha64Dm3dG+neWwuK9t+QKfHGf2mZDq9yOGln9EcXRme''@;'; put 'put ''Po/mbIjjjH5TMv3evO1YZxj9TnP6tfGxWO0zm2eTPM+PbKF9nqtL5znD53kEyXXTnaxuugv9d8YVj5WXaXT6EqzBxYVE0BSAuaDZPlcAzM8l0Pku7vdp8dZTf9s2uQJv3WrbXIG3arZjrsA2DXmugDkY8dP0HK/VAF7FJULNobdRHk7arr1im6Cz+32rlyoZP35Stzn2bDx0yRJyeb9YznUHWgfj''@;'; put 'put ''Cou6WAXRiuXAk6W04FC9c6K8c5GNOyeKuiVEKzBQPiK0JcmjftPGvWWjyi27DbvwFq3YEeN227a1Hd81U6C2mm2aHvyZS50P4LfKLMcvHhzfLsEjvhTeMd1814x2c5aHNly5c/65ijfPKrwJfL24A29eVHgT6+s4b9YAb9K7AqrQFzMWNxaQywzKwETvIpS3FgA17KSGnnySG2iQT04zMugJs/O2''@;'; put 'put ''HNhEaBMNPYh5O20yNZvA5WObLa00NJYIJh5Mtoo67HSbqNfpFXfYI+rI0zsO8D771n3wOOm9B5uy4Hpy1yCwvP5OltffgL6WKa7BeqHWSQx6ByaGXFKfNkf/Wo32ViOGiWLDSVBcgGFaUygImgUdryzkuXvIgxQs1efb6A3kprdqlKndHp6lBqIjqmYCxROV2w2onhUbuAFTNLKh2YGStxYguCnh''@;'; put 'put ''4/gW2k2052sSAmXVRZuzCJv1o2l1mUKf2xhg9MfupGA0mpZp9IotNOoFG0Zgtuwst2XJxBZ7l+chtOTyEI5uo4d4rPyuXKz86AhS5TC8nMtzMKG/35LDwNqy820WlweYm7fLowAb7BPbtm3Px/px4W4k36exh92nEaDnM04QRwWwrYVA4sxNltNP8nH1vNMELQKBYn/Qwe8nYtkEm8IQm67fIPeM''@;'; put 'put ''3jatt+ViD44j18n3cJDz7NYNS6kcbPB53PecVF/Kwec6AHOdA7/Ij27iUtpSrIdNETEW/FiH6ZlNEXviZ5Fr4FE8LAd7y+RKF1pZsk18t0p+TWO6ueqTjSFdY4CWuIW9oirEvbUSJZmL4pI5FkRS16UczruvwbLNBSqKkwh7xe4KYfTYynNe8NgWOuK1KFRm7mW0IKLvqPJczip5LvD83Vva8rOH''@;'; put 'put ''i8rZAxbnkartai5HZgXdsIWO2B0ejNY6ZFtrS56bXP9BaW2B21ryeSNvu6q0Bd/32zu0fU5uS+OBH1a1PZtrq0dnd2h7URkX69sY3bC6WupPF9I4BM1IpzU7LA7BCmDIAWq9exhRF6ICe0C57kpVDmvIl8F+fkvtK80bP0wuvs27PNz0Lo/PzK72j4/1kYt37t69fR+5+iSCbgWeOy1XJ8l9pJOi''@;'; put 'put ''v6tvbLx/dZZc3L37TrmPEXwFeQ72Uc7GNxKajz9iABU5tF3+eAEyB4VcNr4ccmJOycPjlY2OVGlpytFYMVFLRqoqUg6Xy5GqqGLjTKKHWKwlxMa5ZG765kx/Jbs/HymRawlGsEOoZLUEzaxXem8OzaZf1WIBOHw2VwQqvK2KAvX99Td1dUUinZ0ReoE6/SIj/PdIV4I/cPt4jvweQLobWVErm0G0''@;'; put 'put ''EBZjodQyomWVAOxWGMDpLJOEAn0zwaumAi6NXFUg38OuCjLf0FHh7s8Flh9hUSG3HFLmd7mTdnw7eQFG7mHjpp3Qs4FVaTkwHtJjYZAemJNZqk6BfleVKzSIMMGMQxfoUK1MHIiafMoVy/SGdK4y/bjAV2x1m+xubbpo2sk+29y6tGWGdNqsBQUVXsM7+E/9DXw/uvB/sFoIEZXyigEtIGeIuran''@;'; put 'put ''7bZcDYVb9AflogicPfCBQfKK45YPOd7J+K5X+tn6k+tfAqYKsB5K+F3kG+u0Arm+xI2Xkl/ggU1PVVV4nQctWQAzJx9vUuQj6sV1O8jHVxT5iHrR4wht0/YYfvot2x7DXaq2q7m2K7h/i3zkbZ/LtV1BX+f+7fogPc9Qn4W8+TtuP7z5O9l+iABMmPnGQzLM0wyGqGB4rP3yXD8FQA3bx9pfyMXa''@;'; put 'put ''C8bQtjmQvei9O+iGV3Ln0r0HuO5tRP9GTLjjre+Bf1WqwR1zShuh/W20EfRv/l5p040/gy6SzwLNlDF6GdpcEMfpxa7Ey3ls9oX8Bfbk9g032DPbB38WfZs8CCu2AAZivLaNxHK1bTAm/ms2Zjm90am8EOh8QyGTwIRaoDhgYzdIbRxbu+NUsG6HaVWpPvP54UfIg0VhPj82z3+Gedpy86RkokyY''@;'; put 'put ''YvFhvAvWZNmpLojWxbO6oE118Y+3+nzwr4X+exg+eenvXvjA8dQLdPNOdB3sPTgyRX74/s+Mhq3AIwjkQGT9d5ozqr+P0gXUOIt+yfMc4xasLeR/vkSPdWZsNOmM6j95Yi+wCSaTsGQ1FIka9V9KSb1FQ/ZXT3hrkbYW5L+X0rJtu23+YsqWtuCBNI2OZjLKX04ZnR2d2b0rk82MDPTFumKdzU3b''@;'; put 'put ''/hUVx//gr6hUbfo9oIKtavqT/8IKHskqv4xEpfPK31v5K/oh8af84ZX854mG3B9hyf8xFgzWfRKX4L+jN+Y8AQZzrK4LuwF3gft233337jdftD9xwcFrWQGuQoETGFw47RZrP/jB3Z/+9OCFJ+wvvsx0wS/kO3SjaCIzWuYhGnrHgIlZ6RpQcOBbLxswMWJsorUOuRoXM0tO5REQ+B5FDZG62hqr''@;'; put 'put ''LQjOoNUeLKDBq9xFQ2HwFFnmSSrZSfKVlTRhDJDs9rKQKitvSdw6NPaeFffMINEM7y9Zvm1ELmkZuNaLK6WXYCGt0vcrbspOsmt3u68e7C8uACXee1k7K2gZ6+ovK7Hb+gdmZZnlJQ58Pcg53ROE1hDYc7d7X0/v9WaGDJgyAkhdr9VLhLU1+pXLXWiR72LQP1ViL9CS2DZ3PW29K6Hl8CXuSvjj''@;'; put 'put ''3h2vSpBj9i1UxuOYfObw+Vwsv4XqLvZcdc7Knl/MPRevQ9vBo5Wr1M/z/ffKfip/flcO/ugx5T6KPeRdgAMvigMOqn02DDjY7GMpiMh7WIHNKHkX87jUaJE9rnWkQg93v9QIkl2vezfnPrD5Un+brwP87U+p1vFCDh8FR3M5/Og8u3NGoYOk1T+m3B6Dad4bvNdufa9dm0D/D5D8EiIAAAAAAQAA''@;'; put 'put ''AAEAAA8CG+xfDzz1AB8D6AAAAADTwZ2GAAAAANS+pOv/Q/7oBHUDyQAAAAgAAgAAAAAAAHjaY2BkYGA++e8KAwPLov/O/ytYShmAIsiA0RAApfIGqwAAAHjadZQ/aJNRFMXPvV8GRRysWFFsazHWJkSa1thqwcY0xVSTSFtrg0IXcVARsaCp4uJSsQ4u4uRkEF0s6uRW/wzi4K6TOElUWmgoWAr1''@;'; put 'put ''89xnIjGJCYcfefnee/eed74ny5gEP5KlWqkdyMhrDGkBQb2IDi+MiD7EbqxgSC6hnwrLfezXcSSkCUdkCjFZj6Q88xf0JXolj2b+16Wj2KXT1CS6NY9ePYU+PcvxPPrc85yrGY5xHfKYrGKrN8W9Stiuz5HTOUR1lbyGtJ6nivz9EWmsIaOt2MKaJnQfBr3TyHkeFeL/s0g73uPzrF2vI6QLGLE1''@;'; put 'put ''AwfQpvPUE2zUW6zzCo6z5hWyS76hR0f8XzKBuB7GXp1BVneylhmuNYaInEO73mTtOQxjCYew5L/XTqRQwrB3BykbZ50RN49zZBZZKaFDbnBejn0m0OwNoUUj7G0c23QdeuQuOqUFF8iwvMJB893tOY2Y1SgvWEsbQjyLuKvrNoL4iQEZcONR+rXHedVAgSbS/DPvqoQ1/4P5Ry5SX73NCFe8q5UG''@;'; put 'put ''kXE0/6pl/tFnnlnWedVA3jxpvYz9K/r2jv6lyCL1Ra/y/Cve1cpyYTT/qmX+mc9G69f2rKX1bvtXaDniuVi/+qDsy5jbpzEta3beZdKrz6z3E73rJn3yqPXhMsgcWA4tC395Bu0yiHbz1vqrY8jVEKkwsAHRwCbuy9xadurILFue6sh8u4xVaOdjHv2H9g64HNoZmn/ld8HyWEvLuBSYPdNTxPGd''@;'; put 'put ''PEElqDfo1zDH4Ccra9ayztPynrIMeMU/9w1WqceAxhHzLvMeaSrfKYvkIvkIJ/Ut7wreS4EC38MkglRY5/wfLh8e5/JcG3yzyP4Gj5fwtAB42kXCXUgacQAAcLuuM78uMzvP23mfep95nv/z7kEiQiJCIqInieHDiBgxYsSIiIgxxh5GREQPESIRsYc9DAmJESEj9hAjIkRijJAhEhIiMUaIjNjL''@;'; put 'put ''YPx+Nptt8Z+87WOXrSsLUdA2VITK0H33XvdZdwOG4DA8DL+FD+Faz2jPUk8JYZAUUrRj9hn7nH3VnrcXe+HeusPvWHAUHA0n7kw5t50lZ8WFuIBrxrXmOnDducPudfepx+vRPfOeDc+Jp4GiaBJ9ii6hO+gxWkFbfc/7Hr0T3mq/3v/GZ/NlfXnfn4GxgZcDFT/ln/eXB0cGlwfPMRibwhaxHHYe''@;'; put 'put ''gAJaYCWwHbgJNHEKX8CP8YdgIjgazAZXgh+CF4RGJIkNIk8UiDOiQtwS7SejpJfkyAQ5TmbIBXKN3CT3ySb5GPKGuFAiNB7KhJYpmMIoiUpSk1SWytEQjdIELdCAHqHTTJppMR0WYX0sxSqsxabYKbbEfmOv2RrbYjscwk1z11yNa3EdHuF9/A6/zx/xJf6Kvwkr4XK4Hr6PQBE0wkRAJBlpRDoC''@;'; put 'put ''IuBCWHgldES3iIuKaIkpsSF2JEQalrakA+mz9FW6kmrSbxmRcXlCfifvyodyQT6VL+UfclNuK04FU+aUW6WtwqpXJVVNTaqTamZIj/ZGiagQLWqz2gttXdvScton7US70L7HtNhBrBj7EivHqrF7HdJRndGH9BE9ra/qOb2k/4qT8Wx8L14HCABgDEyDZ2ARvAYbIA8K4Axcgp+g+Z+BGIyRNmaN''@;'; put 'put ''PePIqBoto5WoJ9qm21w135u7ZtmsmnfmgwVZqEVY89aStW5tWvm/amzATQAAAQAAATwAYgAKAD8ABAACACgAOQCLAAAAkAFBAAMAAXjahZLNTsJAFIVPCxqIhKAxLrpqXLiTvygYXGrcCGoklp0JSAVisdAWE1/FNzDxQfx5Ajc+g0uXng63CAYlk2a+mXvuuTO3A2ANH4hBiycBHPIbs4ZNrsas''@;'; put 'put ''I41r4Rj2EAjHUcST8BKMic8yc7+EEyhqhnAShlYVXsGOFnmmYGkPwhmsa5/Cq0jpceFnbOgZ4Rfk9S3hVyR0S/gNaf1yzO8xGLqDA7gY4B4eeuigy5ObeORXRB4FlEgtRk3qukrjk+uc+8zymXuLLGqwmecpJxeOqMLdNnlE7Tm5Q3LQpK7AnLwa+7jAMRo4Ic1z2Z5xWVzH/FXJ4sqjqqdOak5V''@;'; put 'put ''XlzN4nxFjUtV2IFTOthT9ZrkM8bDWJVz+58ehX0NuKogx3E34+wq3/7ENcuYy3WU40tWh9GAuyP+kUiT4xzV7Kt7/tTMzb3jX3vRrRvkFt9y6BBMOlaT/h2pqMlRUrEyz1ZgvIJdvpjo1ZRxQ53NCgPpv01vn9mRax1D7vQY8xhzvgHFfYVjAAAAeNptk1dsHFUUhr/fsXfdNk7vvVfHXvfEKS5r''@;'; put 'put ''x7FjJy5x7MRJxrtjZ/F6F8a7cWy6BAIeQPDCM+UJEL0KJHhAolfRewfReaQH79wJXiTuw3z/GZ3znzP33iELd50bYB7/s1SbfpDFDLLJwYefXPLIp4BCAsykiFnMZg5zp+rns4CFLGIxS1jKMpazgpWsYjVrWMs61rOBjWxiM1vYyja2U8wOSiglSBnlVFBJFdXUsJNd1LKbPexlH3XU00AjIZpo''@;'; put 'put ''Zj8tHKCVNg7STgeHOEwnXXTTwxF6OUof/RzjOAOc4CSnsLidq7iam7mBO3if67mWp/mYO7mNu3meZ7mHQcLcSIQXsXmOF3iVl3iZV/iWId7gNV7nXob5hZt4mzd5i9N8z49cxwVEGWGUGHFuIcFFXIjDGCmSnGGc7zjLJBNczKVcwmPcyuVcxhVcyQ/8xOPK0gxlK0c++fmLvzknlKs85UsqUKEC''@;'; put 'put ''mqkizdJszeFXftNczdN8LdBCLeJ33tFiLdFSLdNyreBzvtBKrdJqrdFardN6bdBGbeI+7tdmbdFWbdN2FWuHSviDP/mSr1SqoMpUrgpVqkrVqtFO7VKtdmuP9mofT6hO9WpQI1/zjUK8y2d8wId8xKe8xydqUrP2q0UH1Ko2HVS7OnRIh9WpLnWrR0fUywM8yCM8ykM8zDXcpaM8w5M8pT5+Vr+O''@;'; put 'put ''6bgGdEIndUqWBhVWRLaG/HWjVthJxP2Woa9u0LHP2D7Lhb8uMZyI2yN+y9DXGLbSSRGDxqkKK+kPeRa2YX4okkha4bAdT+bb/0p/yLOyPauQ8bBdFDaHE6OjlkktHM4I/C2ee9Rji+cTNSxszawcyQh8bVY4lbR9MYM20y9m0G5exl0Utmd6xDM92k163IW/w5shYRjoOJ2KD1tOajRmpZKBRGbk''@;'; put 'put ''6zQdHNOhM7ODk9mh03RwDLpM1ZgLfyoeLSmtDHos83WbpKSZpsebJmWY0+NE48M5qfQz0POfyVKZkb/H28GUYUFvOOqEU6NDMftswXiG7svQE9Pa129mnHSR3z992pPTp52eOFhW5bIsWOnrHXasqWs1btBrHMZd5PVGorZjj0XH8sbPq3Rdaai+2mONxwaPjb4+YzThIv02WFIS9FjmsdxjhcdK''@;'; put 'put ''w2BTdijlJNygoqkhxyq2Ysl8y53FSPfup2WRNf3Z6ThgnR/QJLrd07LA+32MNvua1nlW+jRMcjIai7jJudbY1B5FbCcvYnvqH7dltyEAAAB42mPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGdidNkkyMmiBGJt5OBg5ICwxNjCLw2kXswMDIwMnkM3ptIsBymZmcNmowtgRGLHBoSNiI3OKy0Y1EG8X''@;'; put 'put ''RwMDI4tDR3JIBEhJJBBs5uNg5NHawfi/dQNL70YmBpfNrClsDC4uAP4cJWAAAAAAAViY9GwAAA=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=Metropolis-600.b2801a38a74ec6c1-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAFaEABMAAAAAouAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAcfNH55kdERUYAAAHEAAAATQAAAGIH1Qf8R1BPUwAAAhQAAAcYAAAOdkDCfpZHU1VCAAAJLAAAACAAAAAgRHZMdU9TLzIAAAlMAAAATQAAAGBpEq8JY21hcAAACZwAAAJsAAADnndDD7Fj''@;'; put 'put ''dnQgAAAMCAAAADAAAAA8EhEB8WZwZ20AAAw4AAAGOgAADRZ2ZH12Z2FzcAAAEnQAAAAIAAAACAAAABBnbHlmAAASfAAAOMwAAG8kHd7Yl2hlYWQAAEtIAAAANgAAADYLc4gRaGhlYQAAS4AAAAAhAAAAJAeRBCBobXR4AABLpAAAAowAAATauY40J2xvY2EAAE4wAAACdAAAAnrU+7n2bWF4cAAA''@;'; put 'put ''UKQAAAAgAAAAIAKUA1BuYW1lAABQxAAAAY4AAAN6MgiIWnBvc3QAAFJUAAADoQAABiGXFj2KcHJlcAAAVfgAAACBAAAAjRlQAhB3ZWJmAABWfAAAAAYAAAAG9nhYmAAAAAEAAAAA1FG1agAAAADTwZ2GAAAAANS+pvV42g2MQQqEQBDEEkf0MLPof7ypL/DofXfV/z/AIgRC0TQCLR6cdFRkjVso''@;'; put 'put ''7HzTv1D4B7m4048DOlopNlv645SeXXLT51sXzSa+W3AF3AAAAHjajVcNbJbVFX7Oufe+X/sVainlR+gYIYQhaTogTJQgGkY60xRUxlw1aLbpnIMhjDHCNucKc2AWAps/XSULQ+10kgqsCnbWkYYwRtxCZBLDoDAGFapxMoQtBpV3z3veD/vWttM+6dPTc+9733vOee537gcBkMc41ELm1NQtQBE8''@;'; put 'put ''PYhjOP4RKNziby6/DxVLvr58MSqXLF6ymLNBfzKazkjY8bk8hmMMJpjHYTzqXEs6Gi2zVSXagIgPyeAVfGKU+QIqPoKgJt5ADpiJ9fgQsYyCchucJyOlEyUYxJ2djTviZ+PD8TEM8BOfG3DkUL/eLlT2+v+t+JEBV3hzwJGjA4/E+wYYeTY+Hrcn+Jj/MH//kqDv2+PX4o3xRuZ1LDM9gdn6HKGo''@;'; put 'put ''Jhw+T3hMJQK+QESYTuRwLVGEGUQxczuTlVpJCFbjZ5y5jgjM+Hr6dxKCFwnBHwjFQcLjNcLjGBFwiojwBhHhDBHhLJHDOSKH94liVu9DrhYTeSmTMhRLuZSTK6SCPIqVzXPtyVTJeD4ziRDbd7pjtR0727G3HQfMIYpQQxTjRiKP+UQJluL7XCGJJLJIIoskYCMe4/xGohi/wibOfwK/5fxniBJs''@;'; put 'put ''J3LYQRTh90QOrUQRnidyeIEowi6iGG1EMXYTeXQQeewh8thL5PEnQvBnQiw7EY4TJfgnkeZFLS9qefGWl2B5CZYXb3nxlhcvI2QE83WlXElOchS4ajUzNIE1rmZtp7Km05mZGczIUizDd7Ec38MK1nI11uCneJBZWMfotzOi51nJF1nBg6zcMVbsDVbqLHfyvp2sMr63Ijlf+oCdw32ynHEPpr7a''@;'; put 'put ''qbuN8X/6UauN8O+ZAUfeJC708+T5TzpPcWf8r/gf8SM9Jy970uIz8dZ460f/dWeft2eUJzjRhJgmFF8hHG4jPG4nAhYSERXxGOckahBTg5oaFC1EhG1EZJUWq7RYpcUqLVZXRRfhcJpw6CYcPiACLhGRDJEhrOtQGUoeJsPISUXFKioyWkZzfUUVriBKMIQYZEoXU7qa0l1B6V8iskr3Fk+UiSdn''@;'; put 'put ''SncFpfdo3FtU3qLKWVSXlZ5qPFX3S8TAuk6i9aZZLUSYKNdZnDnTrzP9aiHmRMVaiDzRsmbizyraWRZyMlmu5duTT68aRjif9bqNcS1kJI2MpAmPM5on8CSeQjMjeoaRbONpbONuO7jLvdxdF2vQzZ1d4g6G8m0j+JbRXHGM6VlRah2lPP4J7XLMw/W0xOzr2Yk6ozHkk8z/Hlkr6+VhaZLN0ixb''@;'; put 'put ''ZYfskpdlj+yXA3JIjsgJOS1vy7vynlxSr3kt0+FaqeN0olbrNJ2hN2iN1ul8rdc79W5dpMt0pd6va/Qh3aCP6ibdok9ri7Zqm+7WvfqKvqqva6ee1G59Ry/oRQcXuUGu3I10Y9x4N8lNdle7mW62u9HNcwvc7e5r7h73HbfcrXIPuAfdz90vXKP7tXvS/c5tcy+4l1yH2+f+6v7mDrvjrsu95f7t''@;'; put 'put ''/us+8OqLfKmv8KP8WD/BV/mp/ho/y8/xtf5mf6tf6L/h7/X3+RX+h77Br/Xr/cO+yW/2zX6r3+F3+Zf9Hr/fH/CH/BF/wp/2b/t3/Xv+UvAhH8rC8FAZxoWJoTpMCzPCDaEm1IX5oT7cGe4Oi8KysDLcH9aEh8KG8GjYFLaEp0NLaA1tYXfYG14Jr4bXQ2c4GbrDO+FCuBghiqJBPB2rdDu5wXi2''@;'; put 'put ''ca1xU8JYZ9xqnjXGjRm+xXiK8SxjW411Suz6zGqTlJ+pcpVxtfHchLHaeKe2kxvMf10P45TxxcxTzcZVxqXGt7hF5BbjVf2znsvEWGv+Pow7jNuN1/Ww3JXGbvYS4/3GjX05zcAAO6k3nqQdn8T6y1656uiP8VXjncare5h5+zT8f1Zmbnt4VWbPvexMTRvMf5X5s/Zsy+FvzL4rk/n0Lb1sG03r''@;'; put 'put ''m/U3mT03tW1Oqpm0OmnUqT4LdsGfzGk1e6dbeVm9BY11mn00sQs1TXOSajvNTNbfmLEPmd1gNTpqOj/Vo0BqtePyiUBf/xSzL6a2zUlVnfWnJ2hWRjPVmcyn9g6zF2WqYHnTSvM3mz9VWlXGTrNamsl8X/u82T+y6G4y++9mZ1eujbclK8fPfaxS2TfOLZzujk/BvWcqPmv3UvDeNZFZSW6nnl27''@;'; put 'put ''il0wuWFHmMKbWA7TcA17WNK5S9m3r2NPTzr3ELujllvnHsrvVbXsQ3XEMNzEPjecne5WfvepJyqtl3+GXe8Odq2lvLuNtdvbdHb0zVxvCzvfXOt9X2b3a2eH/CMO4Fu80Z3FD+xW2YTzEvA4O/FotFhPbeN+Ra6w72YRJF5hKmzAPeS17HYlGMl3jWdEk3E1dz2bu5yHBRw9aNrtMj5tbGcGRzJ8''@;'; put 'put ''1PjHxs8Zn7CsjTO7BF/ke+7FtyUnRVIseSmRwVLad0f/A3IFobcAAQAAAAoAHAAeAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2Bm8mWKYGBlYGHqAtIMDN4QmjGOQYTRDMhnYGeAAyQmA0Ood7gfgwODguofZun/xgwMzOcYDRUYGCaD5JhYmdYDKQUGJgC8iQorAAAAeNq1k1lQjlEcxn//t30R''@;'; put 'put ''KhT19vZp00aiFEX2pci+lKzZsq/ZGusQQ0VSyJ4koxkTU1O2G+64NWOMvs+VW+4MHcdXTDPMuHJm3nPec86c55x5nt8fcKHrC0F0j1TqmTjnrlKsxyWMw42BlHCLOu7SSBPNtNAmHhIggyRMBkucJEmqpEumTJUcyZNCKZISI9V4Zbx3iTKPm63mE/OL5W4FWsFWqGWzoqxhVrp13+Yf+U0pfYfF''@;'; put 'put ''jR7aj2njmfhKfzHFJrGSKCmSJhmSJdmSKwWyQTZr7ZfGW619yGwx283PlmEFWEFWiFN7qJX2S1t9VC/Uc/VUtatW9Ug1q4eqSTWqBlWv6tQ1VatqVLWqUpWqQpWpM6pUneh805nVmfT9k6PcUeDId8TYB9r97D52L7ub3ej42vG54/CHkHfJXV79p+ZueDuT4I9bBKP7z/iHRtdJF1x1du544IkX''@;'; put 'put ''3vjgSy/86E0f+uJPAIH0oz8DCCJYZzxIpx6KSZhOJBwbg4kgkiiiiWEIscQRTwKJDGUYSQwnmRGMJIVURpFGOqMZQwaZjNXMZDGeCUxkEpOZwlSmMZ0ZZJPDTGaRy2zmMJd5zGcBC1nEYk1aHvkspYBlLGeFfv8OdrKbYg5xnNOUU0YF5zlHJVVUc5EaLnGFy9Rylevc1BT9ZPQ2DZqle5qmn20V''@;'; put 'put ''q7Ud0WzgbLc361mj+12c+O1W4V8cvEA9m1nZY2UtmyRGj1vYzjHsOCRc8xkpUboCIrijdx6gaZYEXQ/x3WeKnGHEso29bGUfezjAQV1L+znCUb11mFJOcZLXupp6sU68xFt82Ch+mn/PH5DNquh42mNgwALKgTCDIYNpPQMD024mVgaG/yHM0v+NmXb//8J0j0nw/5f/fiA+AOYLDgp42q1WaXfT''@;'; put 'put ''RhSVvGUjG1loUUvHTJym0cikFIIBA0GK7UK6OFsrQWmlOEn3BbrRfV/wr3ly2nPoN35a7xvZJoGEnvbUH/TuzLszb5t5YzKUIGPdrwRCLN01hpaXKLd6zadTFs0E4bZorvuUKkR/9Rq9RqMhN6x8noyADE8utgzT8ELXIVORCLcdSimxKehenTLT11ozZr9XaVQoV/HzlC4EK9f9vMxbTV9QvY6p''@;'; put 'put ''hcASVGJUCgIRJ+xok2Yw1R4JmmP9HDPv1X0Bb5qRoP66H2JGsK6f0Tyj+dAKgyCwyLSDQJJR97eCwKG0EtgnU4jgWdar+5SVLuWkizgCMkOHMkrCL7EZZzdcwRr22Eo84C9IlQalZ/NQeqIpmjAQz2ULCHLZD+tWtBL4MsgHghZWfegsDq1t36Gsoh7PbhmpJFM5DKUrkXHpRpTa2CazAQOUnXWo''@;'; put 'put ''Rwl2dcBr3M0YG4J3oIUwYEq4qF3tVa2eAcOruLP5bu771N5a9Ce7mDZc8BB3KCpNGXFddL4Mi3NKwoKTHS9RHRktJiYGDlhOU1hlWPdD273okNIBtQb60yi2JfPBbN6hQRWnUhXajBYdGlIgCkGHvKu8HEC6AQ3yaAWjQYwcGsY2IzolAhlowC4NeaFohoKGkDSHRtTSmh9nNheDKRrckrcdGlVL''@;'; put 'put ''y/7SajJp5TE/pucPq9gY9tb9eHgYBYxcGrb5zOIku/Eh/gziQ+YkKpEu1P2Yk4do3Sbqy2Zn8xLLOthK9LwEV4FnAkRSg/81zO4t1QEFjA1jTCJbHhkXW6Zp6lqNKSM2UpU1n4alKyo0gMPXD8OhK0KY/3N01DSGDNdthvHhnE13bOs40jSO2MZshyZUbLKcRJ5ZHlFxmuVjKs6wfFzFWZZHVZxj''@;'; put 'put ''aam4h+UTKu5l+aSK+1g+o2Qn75QLkWEpimTe4Avi0Owu5WRXeTNR2ruU013lrUR5TBk0aP+H+J5CfMfgl0B8LPOIj+VxxMdSIj6WU4iPZQHxsZxGfCyfRnwsZxAfS6VEWR9TR8HsaCg8dsHTpcTVU3xWi4ocmxzcwhO4ADVxQBVlVJLcER/JsDj6uW5pzUk6MRtnzYmKj0bGAT67OzMPq08qcVr7''@;'; put 'put ''+xx4ZuVhI7id+xrneWPyD4N/ixdlKT5pTnBwp5AAeLy/w7gVUcmh06p4pOzQ/D9RcYIboJ9BTYzJgiiKGt985PJKs1mTNbQKH08EOivawbxpTowjpSW0qEkaAS2DrlnQNOrz7K1mUQpRbmK/s3spopjsRRnMgCko5KaxsOzvpERaWDup6fTRwOVG2oueLDVbVnGFvQfvY8jNLHk3Ul64KSntRZtQ''@;'; put 'put ''p7zIAg65kT24JoJbaO+yimJKWKgiPghtBfvtY0QmLTODLoEiZHGysg/tih05ooJ2At960irv20Ltz3XyIDCbnW7nQZaRovNdFfVqfVXW2ChXr9xNHwfTzrCx5hdFGU8ue9+eFOxXpwS5AkZXdr/uSfH2O9btSkk+2xd2eeJ1ShXyX4AHQ+6U9yIaRZGzWKURz69beDJFOSjGRXMcF/TSHu2KVd+j''@;'; put 'put ''Xdh37aNWXFZUsh9l0FV01m7CNz5fCOpAKgpapCJWeDpkPpudmvCxlLgsRdyzZNdF9B08IR3ivzjEtf/r3HIU3KLKEl1o1wnJB20fK+itJbuThypGZ+28bGeiHUk36BqCnkguOP5e4C6PFekU7vPzB8xfwXbm+BidBr6q6AzEEuetggSLKt7STqZeUHyEaQnwRdVCswJ4CcBk8LJqmXqmDqBnlplT''@;'; put 'put ''AVhhDoNV5jBYYw6DdbWDrncZ6BUgU6NX1Y6ZzPlAyVzAPJPRNeZpdJ15Gr3GPI1usE0P4HW2yeANtskgZJsMIuZUATaYw6DBHAabzGGwpf1ygba1X4ze1H4xekv7xeht7Rejd7RfjN7VfjF6T/vF6H3k+Fy3gB/oEV0E/DCBlwA/4qTr0QJGN/GMtjm3EsicjzXHbHM+weLz3V0/1SO94rME8orP''@;'; put 'put ''E8j029inTfgigUz4MoFM+Arccne/r/VI079JINO/TSDTv8PKNuH7BDLhhwQy4UdwL3T3+0mPNP3nBDL9lwQy/VesbBN+SyATfk8gE+6onb5MqvNn1bWpd4vSU/XbnXfY+RtlM7osAAAAAQAB//8AD3jatX0JdFzFlWhVve73elOr95bU2lq9Sd2t1tJqtfZ+Wmztq21k2RaysC3J2GBbZrOxMeCQ''@;'; put 'put ''BQIhJM5kg4SQYzIhYJZAICQzWSYhzoJ/fuYPJwmTSeCfJH+yTD4hk8mAnv6tqvdarc0488/YUqv7vVv1qu5+b92qRiY0vZzEHxd8SED5yI0KUQBVoRRqRu2oDxXKnq6OtpZ0YzIaCZYVFXjsNqOOIFNtTO+3+yV30h1wJ1OBVDIlsb8SvNWu0mv0L70DV1LaexWGNUgnU/jjyjdx+xudXee7us6f''@;'; put 'put ''76rw+7u6uvZ3+e86v7/Cv99//vx5//79d23den5ua/kPhF93+0N++LljoWLr1uAsvNvqb+uq2H+yyVszduzY48eOjdXM+2v88IMQQVuX30SvkwtsbiG5AmGMphFC1kFEiDCjw4LgFYZ0Ol2+zhqy2/SSN+ZMCgFPONXQmKz3uF1iYPS+ku2GRKKiLFFdTi4o9b+r8ZclEmX+GoSWl1EnPocfJhds''@;'; put 'put ''FciEkE2A11cRfW4FvNwOz/WhMtQvb80XCdILBBOED5ix0WgdtNryBEkyTFtMxGCwD+owIflkCKGy0pJiaOUrKizwwvOd9uw/qSSGpaQUkAJp9ptOst+kxH4lepOQ+EHvQnQ6eiZ6dXS/Z398zjMP787AlXnPt87Ez+DHH98FCD2/6/Fdn4N/ux5HgJmy5edIL/kzKkFBFEMJORaL+suLCr0el91s''@;'; put 'put ''MkhWRPCAHiPcD/PCBM/CBL1oqNRuFwBdQRGInApH0h5vKoEBbWmgtccrhSPuUuxGcNWK3Y7GVANcIL0nDu1+976+gcn5+cU9u2+4uqdn4Nhx5Vg4Goy/2ljTdGRRkrttu6e6nd/07ZgYXzS3d1jG97TavlK08yrsDOafN9aUKkfrK/wR29NIj6qW/12wkmeBsk7Acg1qRd8dfLJgbKccM2O9CWNR''@;'; put 'put ''j+eRiAxG0bCAdDo0QzClfB7gX5ixSEQQ8oUh3+CTEWhSc9kmCEBZO2nGgiXJKw355OQGLQgBWNoMbdxqakoO19aWl7tcCNW21rY0NpTXlCcqw64yV2lRgdNht8FkrGGr5I45KDI7cLIesOiy4gBO4gBDY6BCdLs8SbTmfgdeufepoWh0uLZuOBobqsPv36OE9iwmEoFgdSKA54ZicLFuiN4KJmoC''@;'; put 'put ''AXpxKjFaWzeWSIzBazW+amkcfzYdizelq2NpZSIxWlc7VlPDIAbT8VgTvYUo3/iX/0jeRb6EylEcNaIOubU2ES4rKS4qMBkFUg68LpABytd4BsTOM6gHYWOYAeaprvb7qxurU/64PxavECVPTB8RAxWcgXJnBre8jWmvKHkRnZqXT9ORDkeArWCqpHhkarFzvqVvtLigbrKhYXvN0Lb6vqqS6brE''@;'; put 'put ''9conEp7CtppomSkz2ROL9dTljY/VTrV3TwcrO8OJkUT1cE3zYLh1qH0gvk8+TlrigcLa0oJ4oKJ66S+p3WMFzcG6FoQwlXH0LZBlC3LKNqpBGHnxkDtIYOCOFV0hBa5yR3y+CPA7fvVw0FdZ6Qse7kW0j8blq/AY+QrKQ+IzeXpcG2MqJu1ls/BKn1tcPJgZHx4ez+z6+dmz/zLete3CkSNPbOtm''@;'; put 'put ''bcPQVtbaStCWYyGS5ggKTwwPT2QOQg/z2544cuTCtq4x6OPnY6xtAu/H+8jfoXmUlhtmhnqaqgCXMIcBAWMdRiDW8yLW68kM8K5HD/oHIOemJuWOupqAPyZRRoSBphvTogT/AxXhCP/YCBTg7ymlvB5vKfayzxoqRKkRbqXpRy+7YMUSJSaFdLvgU6ACOkjgCL8gBl50mUWSVxBw6Y1Gm05vLYiW''@;'; put 'put ''W62l1V6rXmc3iAZvhWQ3E9HsyrO6TFgU7C4h4OCgBslerS9wuwpqXZIhB1oQsQlEY7/D4kuU5hs9frPOaDSYHIa8PJMomvKsBodZMph01nLRZsgvTfgsDofFVasrdOc5hDITBTYa8nWmfCIajaLNorMaDCYN3l2oq3VZHBTHHWiWFJI2ZEZhOYB0AtbtAF4HzYEFdADUAZ5GgOthpsRtolQUwwFq''@;'; put 'put ''DVPUKiZJ4Zeu+xL84KIXXlj48pdpf5nlRfQL9EFkRV4Zxo96NZ4DwQk6KM+BSFTk4Ho8YSmrTpSHE9XJaxO1NeXlifbayu2NtK869M+4A/eBtBbIbkQ72kH5AkaEYEQ22pnT7/bX4Tzlj7jvEOOZdrCZP4Hnm6n1p1dAC2LsxZQ7zMgUFIArci3kIdU6WrKWES//Zvk5/B3yK3iuXbbSTs/Cs2/g''@;'; put 'put ''D6SqDG85q5w/S3719iXE7GXd8pvkHvIiqL8yFJergBvZjLnWwGCo2QBsNjCyZbbSAg/Tk2B6Yrq1epCkGhLAXFSwSuFJhruHh++enHzf0ND7JutH4/HR+vqxeHys3rL7M/PzD+/e/fD8/Gd2L3Zcv3Xr9e3t9LWD4YASNg0yLyKfXACkFABfA1yrY5yPh+xOhjopkk7aAy/elPz6/lOkbHDn2aVx''@;'; put 'put ''xNrHYVJhmE8BisoRswmmA9xAyABDJ1OH1AGZRswG2b3BsE4qiGWwpsWlSKOq//IxkKd6SW7cUpvcVjk+92DPdZn+yftxWpHmvpvcHqtpqasdfHfjNR1bbu6+YZE9uxRwGYVnV6GM3FZYAM+pwJjA02EIA9SGg0E/AE/WzQBzwkAQ0s9QJeBl8l+FKoNBfzAkSYVAZapkkvXM7kippKdx7fAkFe3/''@;'; put 'put ''eHd8KLQ33d432D883NHX11Q3HhrY+8m+69v7Wtq3yzcMWTKpiapEU3WiBh/GdfFoKl41dKJ2R2PbhN26vbN1dwPng1J42Ql4N4G2q5ajFvA38ICohzlgBH7nHKCOmdh83ZDZbM4z54FMOWx0rCF/BCft1PMMFGIBn1Yet+Ct52ZmTv3k3Cx+QRk/dA5IGFF+zOkTAxw1wHOKKY4coAvzLESAzrEe''@;'; put 'put ''AY50AKEDuy4IZJob9dU4Ag+twu4MBhiOwPVRMVQhRagwSY1Zbrz/wMDU3o7BofaRjh0m/LzyVRHeLbR33TJiuXZqcktDSq4N4usWn4omr+neem0Lx0EtjG0A6OdDEdQnb7EBDuzAPAVYJ4SwXqcbEEGx6PSCbh5ljasEY9N0RHExjDBSHA74oYuiYChsAD8NqSOieoOpbIlLiQQfHFm28yTxIwc7''@;'; put 'put ''um7sv/fe4Xt2Ht/VHuiO1Q4ldOVXNxg7/KMtdYP5BTfiLzXs6+o+1PaVTx58dGZ4pqyseaE7VKU8WtFcnu5Mxj9M8ZuEiQSY/JTJxWBoMJMeqncw873B1wVvhzqQ2J/yu0EhPKA8jP+g/O97Sfvi1UsXqH8RBTx0qnhIoR650yUS0K4DUs70VS1hgOljIBDTEpWVFAOVqcqGmmqKh4pyioe4kaqt''@;'; put 'put ''jTwMFTM53pWXvgfbZCXUx/jXk1uHM82dWxa7uo/3dDXJQ70nB+tG+hsb+0Zq28djXRCwxMbbLTVTrW1T3oLRpubt8ertTc2j3gK4srMGP9QYrUw3VsUaBOVSU7y0poiQoppS6kQRVA9zHFqhdSnQF+itN4LAGgBrOpisHsRVT+aB6QWYoSB4BnPsgUZrfxmdYygYYrT2cFJz4QUrTD+oc3aA5eba''@;'; put 'put ''EWj99+uoLDPqN1MyV1KCkxdXU5lTXnkEyMzITefA7AWxgG3wUt1NdTUbXiEPsvQ8yLJYELJ4LR6HjRkRUXUtNCNCNjAoFepffESzLMpd2juIvZidJBaIvfIRskvIDoi6FRmfwvh5fOuTyRjlwzTaTkSyG/hQfEYk4Ds5UyF3Hnan8SXlb/BBHJn90dyDD84zuetAj5FC/CfgPAl1DD5ZBmGBA1Ev''@;'; put 'put ''VpjV4kY7Bs+/gHIyjeQQhBBkh6rIiTA89Ry18FSTUzVA/3fgnyoh9vunhZMLMJ4+GI9XG48A40lX45Tere/DB2E8l5S6Fx98cO5Hsz+i43Euv4lfAd5wIz9ql1s0nnAC+wtUmgQdEg7AyLjzRrViVkd5PB6/pzzkDQaZbnSqAi5FVrjevSrKfWJob0f9cGd/9Q29nfvT8+PHvBru79Y1V4Yb+waS''@;'; put 'put ''rfU7G7uvc+z5PysBMEHx5fcLW8gjSEYj6JLs9peXCQahGxsNDqwztrcREViYR1jVEPfqsHES1DhETVS7iibqEu5DquYCvWAwCDOgdO0GGpZV0UgOiGEwCob5d2ysB8LUUTUtIP385q0kSZxEoijNsOajEJAVdAITd450DvdthVlkwuFYKBgOWyTfOteiggYdWQXq8dKwhAtSPcVvjtdRzzx70CgZ''@;'; put 'put ''3LAibZ0X5ha/dnT+C/ubd9XVtluKRxKD050HW2q6nZZ5a57ZWu4rbqiY+sT03Bfm9jw403Yg5Wo+1u3vF3EiFpHDDdEbDnxh7sjXju19eHr8WFMsEo7tG+s+3l3lbzP0dTSO2orLKre37/jA9rknDuz5xJ6S8pKgH3snMrZYfay3qrqR2xYnvLwKelkCCxuTK41Yx4J7HXC0DqwrtXUQGVAPx8Cc''@;'; put 'put ''Xe6yFoB1lVgIGjFjUqp8seEeXAY/d8+eOHHqFLmwNP5r7Ff+BdAOUQd5H/SfD54P41rQX/AEEeRFryN66naoCRgJc8+YPquo0G4rLy30F/m9bluBvSBWbmCOKcO8pp/9mFnZGHY7tTdjeLx1T8NsW1fT/ozyGZxMtLYmvnQx2dmZvEguxEfr9jeU7G5q3FGLP1IXCtc9rvxTOhZL/wPVC9Wgdz8G''@;'; put 'put ''slWCGuQ6CONRoRlsaRGYWRAtVX95ViWJ4EIJKg6HwjRJlGUNj2ZHc+mOG8/v23d+78C7k1PlU3Udh2X5cEfdlH9n/XsGLLOfnZl5ZLa1YVso1nVE7jzSFQ1PpFoZbSjuvsV8HzeLJLKoYkG0iiqL2eUwuy3ucLmeokhjzhgOqUwYw/axN44+uW/fk0ffQMt9RzOZo313kgs7P7lv34M7j7Ue7O5e''@;'; put 'put ''aFWSFAcQmYLtuQDquEaOazqNKhDdNOgSa66Hyjx/M09DUX3iVvWb3e/+B7xPeRC/d+ktoift5xefWSQXFrmPpfVvRFVyWOsfeE3HetXcALhhREbaM+Uz1rM9oPV7mnb6xKLyOu+U0+1vgW5+1Co32YBcdvDNy7AOmAw6plpRr0OMzVa0InORwC9wAvECPADz23NM4noipgL4XThUd25w9tF9+x6d''@;'; put 'put ''Hfpw3VT5gWTmOlm+LhMZK38Mn1T+NdnOSdmWzJKyyHtam/dHGV4jclD1JQ+AD0vnTPNJ+WgtPjGdMfwm4ZV89LTyt6dP40kqVjik/JRcUH6NC6CXfmj1LZbLpHmInFiEh3EQiPRzYQRYO9iOfwJYG+Uk5vrjAe57weBmBGAoL0O9DeU7QzpovuLqwyiouD15umK7oy+S7DzVutBlkesngjX9Lfgl''@;'; put 'put ''pa7ncBun7yh0dZ7Ns1wuMRr0BBx0PIBZxkzg+Uynw8HtYdKOk0YcgNAxMHoaV39M+R2OfPz16dMwuSfxmPJD5XZcuf8feL/UqSiFfvXUd2SDpr2hq5GGOj3S2+100CHglaQdFFLg1CLw3dI3WXuQI8G6Mi5pg3G57Nq4fBA0BOxmoMDY6ddeP3Xq9dfomKbxI4D879G/Skrtk3yR8XKp7JMIWdej''@;'; put 'put ''I9sjhiEFWH/40KlTyjnaXwl+Hfp7XSmhck55WPnviHW52tl7/pprzu/tOJTJHOrgukdVOrOPzMx8dnax60infKSLcyzTO5Rfj7P8lptGqzAKEFUB09TFSrIcpmjNczny3Fa3PVwu0kS5P6t73IGsbu7Fsf4bu7tv7H/iNC7pHB3t/DS50LLQ1bXQ8iu8q72hof01lIsDF/Xt5Xqa7CZ6geh1oPQE''@;'; put 'put ''CJOzgY0uJ2vodrsj7nB1OEJVMNhyrxTJFWMYjS4dSXsbV2GFKMGKLV0DNUfb9mroUX7WMtW1J5DFDy67Nt42LAcrs3h6o2pkeKy1ez2eTgCerDCWpFybR+WaxorUdB4AR0SNFUWBMLGEIbvtQDpk9VMp98b8EYhN7X7V//KqcXUM49985q7TDG27hr6gDH6aYe1Xv2J4G14seJPjjctG2fKfSC/5''@;'; put 'put ''CqpEdXLCC5FhAVgsRHIxRj3DHKNViSKh6iDFGBVxHqpCaJMgq3Qfi3pUtvr9uZa++Vvbe/yd7WNzrZljvSO3N/ZUH0gmO/t23nxL+41j5ubGqemGSHGg0OqsHu5onWmsq9kTiaZClVUu39Rkx0yKjTWoxvKSmkPJhn886aG6yjgA8V8AJAa9ShpePQXh36Iqx/3AI49Ce/B/5VI1EY9x7tzcyOUK''@;'; put 'put ''ujSDTBUXD3g0HYb9d4+cTownG8YTp4bv3mkZuWcnvls52bSrvn5XE363ctPOe0Y4Xl0w1n9m8So8S8/iVdCaqsLkWgdcdq51jDQb78Pkn5Vf3KP84u6f/ITqXPj9MzGyvgoR0pUyeYK+TFTvg7Kgaz/MlLPJg7Zw2PTUklIFBD9CwIwDhe/70CPv/cyH3vfj0194HBS54sK/pb+gORSF8HFC7EE+''@;'; put 'put ''z3Qb6EajCF0TmsulfIe5aXE4HHaKVxhlBHw2IelNJ/FjaPnDzz73IbS8fO7Z5x7AO5XPvfkmnsQ733wT+jSoetyASuQikcpfVrmpkbqDLfUY2UhBs+EC5Q8f+urX7lP+7xngwMeVizitbFMULe6f1mw+xeNK2isb+2fTXg47G2mapwDA8Cfxrcr7QZ2/G59Z+qcZ/LPFGaWC2/2B5VvxCPk+j8w8''@;'; put 'put ''G0RmtiuPzMDOuv0DWPfww8rb5PvblnZsY7hd/vfl5/CPNslZCuD7ms7iXTxlSf2QW3Hd6vHQlAUbD9MD6ni0bBt15mjmlY4H5Y7HC8YiBX5U9cMPY53ydj15bNvbFzita/CD+MucJ58S9/fIHrAMLAsJI6MZ2RvUDMpTIupxJp2U3BcnP7770KFdwDu//+Y36ZyU5UNkYvlFeGg562OTHDDtQgIC''@;'; put 'put ''ELJ96QtbxvjzMySDw+QVaOtlbS2Yxq8I3eDAYIzYU9PeQGbxxh3k656P8vgiAjJLiJ3lM26XvYVY0BWAMXFAFFBWSkQ9sISoh4jQBSgrB3i9SGi4JuhmaDxQOGjAoohmVFb2gfu0HoQKJIPT/Lop2a2lQXiqJxgOOI2AW+RxA3JzTYRXDYMbaR4kpa2X4btvubl4KpHeWd+8t6Wvv72rYyR6/V7r''@;'; put 'put ''qKllS0JujhP7zfuUix2BSNVgXf1IvNha3xPZ0ai0JSItrppgMK6uM5NZsGcOVIp+xKdnysc6wYSRngz4tA+AhoEpfruEMslgNqtTqKbw6NTB1Pk4V/nXAlGPb1WyTw2U/dra4+aAAJNzW4soVsFMQTzsckKM6Cx1lhR6YTZ2u3NN+jBC5cfOMkkrK474+cPt7Yd7mveUnTxZtqe5fPv2TnliQib2''@;'; put 'put ''LbeOjJzaUlc9QV5U/qO6Thm8ur9/erq//2rgr0rAmR545XIxWOHmMZjnsjHYH88MDd0+0HwgPOHuKI/2ReHHn/FMRObaLAOn+/pODVRH+gqKq4fj1cPVJYW9VQnOv3EY01aVjl+TTXaIjwVGQpVoFHuMICy8yCVa/grR1gIxjpVYipJzrEY0Cmi9LCAjmnqXQjNdtxpmPdEc4YCdEg2v4X6P105y''@;'; put 'put ''iEa2Aq2aehjlmvaUTQDBOoFw5MWlLWPx2i2nRkZu3VIbx+LSw1miZWU8BnTzADFkuZ1QgmHmtelA7+rIgezo1DGr3OX1wp8Sb3FRITR1QzRGxxjk5Mp14vzUaxMlPxAV7xzyDPtvaR64tX/rLf2ji23KSfNwumE4D9vM3am9pZ6xQPXWUyNDt24dunemsRtvaUsm26juAkcbL5D/AY89I5tsWNRD''@;'; put 'put ''nChSKlICFSNR1M+Ax1bAkh1oWgf0s6vGzsdrCLIwno1g5CIIQkRQTfPrbwI5TKEAW+yTJB9YeOrd2OlyH8u2af7Wv9x4482DgxNySasnYPTle0qI/oCyF3/6QGPndo9zxGiqKAJcR5e3kw7AdRmKoY9wHnSUYr1gw0RcSRL72EXd6ouqnikHVQkmSCTzMBlhRgKG5uqBkcXJtGwWhGpYmAcFRGvA''@;'; put 'put ''QMuWlyNUHiuPhoMwnrJwKBSkWhbbVcXA48d2vJrlUqtYrgMUQueNldW+qxJDu8p2p7sOtbUd6kpfXTw2NtbRPjbaQfRKfdd8S7hsqrCkp7U7msgc7e092lFbNay8b6yjY3S0o2MM6AseOSlh8cPRZ+10KVslrRcx0YMrM3pmLUhWNKvU29aNbsOdlYss86LeAWrmAQJcyGl3Blw0RUFVIRCUz4kG''@;'; put 'put ''7W6YKD43WXdTe23DwMmTBVcliT25u0X5Eq5LdXcllJdAosLVXHZopufb5Gfgv+WjrXzInmzCvIBykF31j30y+KRwCzyI+ZzLU9Q1ybfmWVgWXb8miy6BN7G/qqqkuKqquOPkSbItWkzfFkdHlt6iz1/+zvKI+nwf2k+tEhGsoOOykqHPGYsgMJbW7RUBKz4d43oEAAJiS2Orb4IOYhl+n6XI63Ha''@;'; put 'put ''2eikdTn+3ByDmB3pYqM93+S3ekpObutaGfLbb5kN0zqxooi4l17r2bGSG4gB3c1o5ktGFixqlLdzU0nHhVfR3M5NY+4NoDYE3dPs46o7U1PPOexO5pVi6lAxWwf+81Uv3/dA/8mTP78flyqvvTx8B1izHX+i46EVGl8l1L9q48MwU19UTcyoAzDn5Gp87JOWzJua+uJK8qYb6AWql88T+FvYAXIf''@;'; put 'put ''QFc9V15EsB6rFshDFY5+xiCJgl5vH9TRlWU2JdBI8JneFeEuEcXC7M0pli4KoIoA8DBwsRHU0louXs3O9bTSJkl+MFl3c1O8PnNzU3WdfPKka6i2cbLAuatF4+9UsrO9Rvmm9pfot4bjDYnqFJ9DN5NRO8jOOLWkWLCAXtIsqZOFcnqqjey5Usj4ap18XlYIpTVCWNsrUimsz5HCpqjyAtFvCTFf''@;'; put 'put ''jfodEzCuNfmXwnfMv3gun3+hLseZgQH2Gu2LxcDp6I/F+qOqwzFwqq/v9MAC+Bvx4WrueHCdsBV0/CyMh/och5mnSEy5PgfzAESB+tU53hrFkpN7CEw7rHUkc2Cu0Klz/7VOnUKemljl01H/aTv4T3wuZ1Q/mDtRmPvB8EEQVvvB2ekV5vg1g5pxYk6SfY3LtQrmyt2f1JW4P/ql0bdX3J8xZXLF''@;'; put 'put ''+8FoK7ycIFS9dT5rZsUJfBZ2ZinBDeIeK/MR3Bozr3iy1D14DhQM0zCOxqRbk7kfz2a2zZ08if9X28KuAeUtot/PZah8+U38A3heJfWRPfBAL0Tn4CWzJUA15VO4UconviblE94g41OKvaWEKuZv35JIb9sVStSlM8Pxuqnmhrl4Mjhc4Y+5ovGmgeTR3Zaq0I62kgKfL98WbI7XDlT5S6a8BYVu''@;'; put 'put ''m9uWl1+RqR+Yoj4XjHWBfAh8rho57sUiTTmDa3iW2hQyTRcxABsQ3u3l7iBzkZwV1EcK8XU1u1oTBcxIF9Ua03jB01oiTwwO3nzjjSWefJ+xxOnZ3om9B+6774DyH0UVJiOzCSDPPqLnesaZ9UZVPQMqRrWeOXGlV7uqGoCVUJLrGVfAFWDrETk8RG0WG5Wd+Kh6adKUDXDMW6BaQNngfuUSVTa4''@;'; put 'put ''V60hAt9Nr9UQaVkVzU+0O1j07uTpH8cdH/nQnT89Du7Pe/Et1FizXI9QC+3X55Hsl88jFZw8fHzuhkMnnzhy5Poj0OOn8Cz9XXoLX6M8tJLvAo+T16yZJB3W0ZQXzSpA3wLJWaRwOBx6lryUAs4ITSZJTvyR287c9Y0X3n3TTXe98I3HH8eGpYcfflv5M+t3eYg0Qb82Wr1jNtAhU2YlateUUffS''@;'; put 'put ''sfsEdfXB4cxl1AwW2CxE6QPt3qJAWcLl+ekdf3PfbT9tvuWL1rydzooEMSq34TuXXrmP8PpGeHkdnrdJvsm+ab5JovmmBHYob+LHsfI77FEGp3DnoSnl7w+x3OXyLnyYvID8qFIOFbB8IFhq3Ocvp3lgmsucVAUbo1G7h9pwmoJMg3ZJgbhFQNIgriFuL1u+lKioSTh/NoqrG1JxHNu7zdTc5MbD''@;'; put 'put ''kTB2NzWbPhXtazpTEx2O1t7W3FdpGDZ4I+G7Jous6ep3has8hmFOs7nl59DfsfzU5rV84EfM7dyp1dVhiNV24evZPAA/BpY/suUT1OfHjEcxmlQr0hAepSXnRHLFvGDXIg2N6TBMJ4HBZSMwAQ/TVV4wF1KEDj0UGaJDN26bjeF4QwPMaXbblMFTFX5XddpaNHlXOOKFeVT2Nd9WC/OqOdPUF5WW''@;'; put 'put ''l1EKR/B9+Gm7hPMQUX6DjE8h/LzyG1atQW1hz/JV6BdMv+az1TM6OGqQmVPOEmtOum612gFmziUviAT/JvmMWrrQe1/JdmLXqhWWtuCX+TMql58jejKMClE5xUpJcWGBx+105Ft02MLXyeCpO9TEIkbDRazmMkjr3LkOpSXulKDhiB2i1yCE1eAB4K/v29V+oKVlf8eu2u3lExW19YEJ5ZPpeDxN''@;'; put 'put ''LHJP3vDRTObIcF5Xhxit6AublBfNkd53bXfilHN7ktVp0rzpi6gYdcsy0JIWOiGJ1k9LuF8PcR3GEmFLMiwyoxVPksSTAYhXpBXbnaEgmBbq3IXc/lSaVZiu0vglmJbHkemlfxzt7m5d6N5yW8mOvP5YfdeTT87Npeo+MXi253CbutJ36+AnUE5u2IOa5UYXRkY8ANGlxMKSORETcJnAuB8wsT0N''@;'; put 'put ''vC6P4lLbs2Az010LbDuIWyt6hV8m5PjrH3jhhRfOPP/88/f9kmaTcc/glsGDB+EFH6IpZUarDBnC7yMXWW1RPctCRmhhLfAtW1CY0QsUUXh0g+oimqDMjT7qc97vCwaLCkPBomeCIfaXDNG/4YKikPYXeDWC6okRf9tWgWM6ZBNwDL2m5kUH8L3k3JXkVGkdUAaPKE+Tc4NXmlP1SoEvLj6wg7zi''@;'; put 'put ''uZPLsH/5ZdJOngBKB2SIwNmCz23UnN5JLRdLq7PllDCzBFjzd+iCMl1XsfYeam2e68Rte27eg8vqd7W07qlfKid3L90EfTej76Hv4N2AtFLZl6MQCFUVozkFv4252ItGS0ui0ZLvRUtLo/RXzRcvt4MZMYPdupHNLd+Fic5pJDwhIYBBttJ8BDj2AsG6o4iuXQhkfkWb7mUrreDyMRBgrNs2g+F2''@;'; put 'put ''ugB5ncFgkNppijleR14RXlWQSffG/LSqNVFUbyso8TsL7XZHnqu8u0AfD5eEE7a8Bq8jP89mcg2l2X6eONDcymge11Oax9HrfD/P8gD+JdNLftQpd5QB57tgYG7qzQ4gPSICLdGjmBM1bcXKayEyRshfXuh12lWNRYNilKux1BKilTQY3UKDG1Ql1ry2MGtFoynXri3NQmwOrMZHuMNWQVfg7BLE''@;'; put 'put ''YbejzyPDUwQ/+XmmaDeAOQj6eGOYExoMltBDm8Acy8LkoY9uAnM8+6w59GEOQ9bCvJztxwx8uQoGaAA+i/BHVlvkQFvlbjtVjRTlBoRBARmQjhh0B4ygF8VpcDPVpSY9d5RYNOewOaBxvqqbzKAosVbIkqL1TX43tgvkkFbQsowGP4DfT7YtvfUtXtly553kwqLyGN6hPMZrUdpZDVEKG2V/FRb1''@;'; put 'put ''UUIgLAf1WIJ1uNgBHGzHRBAHSunmKc791bQaRMBH4QXprl/JMTJ1rsZsYOj2wth9LBfpgEYJ2ghh3W1X3KqUbmla1Uo49Y7N5PjaFiB9Atm/UUO+VkDTCinUEIqCFPrd1PLwdG4+VjXFWmFcE4NohQsvTfl3Jk72WPVlayXVO/nAjrWlVHPR8ERdi86/WoCbTAc+vnN1aRXwFatBYnxeqcrCCcZX''@;'; put 'put ''OIc/18IcRI9tAnNCgwFZOLoJzPFsP3Pwn8Gs8Pny92gND3tWnI9n+f3r+gGmxl05MAfBuq+BWf4twATZeOJ8PMuPr4MBa4XjbDy8n7nlR1aPB2SqCl5+yWoaSlCb3Lza05g2sPUJY46rkZ8Pf0ryi9n+RDc0ywO7Y1rJJbCAKWnnJeW0GM2dlMD44x/xgrS+vjd28Iq0L+DHslVpOLCIi5a+wWvT''@;'; put 'put ''/nbxacABq7dheqVO1SufWYcnVkPC8FSv0vaT63TPWpiDuGoTmBMaDND2K5vAHMvC5KHnNoE5nn3WHHp6jQ6jtWG3Q7xSApZAfEZEuDYWioBYRNLetFfy4o/ceefAnWeHz94xcMedt5/Nvj+L2OKyVjPjBRsURXep8a0L60hlxFfkNYt6HRhavTDgY1eFnKsYrqr5lgKWSaElA55BcdWSIzgXuctR''@;'; put 'put ''Hr6GKOauD8rWioqKaEVV2BFxsB0i2VJzKZCtqqcxIvJ4Ma981VFOiGBPknwvec35vdfurjy+M5EEmT5I3yn5RQW4pikDko0rD2XqlB82Z4j31p6Zz8621szXneqhEl0zr/x6uAxfEwCxfqPrSOdEp/JQgNs6ViPC6Nuk8sCj6+VpDcxB9ONNYE5oMFlbtx7meLYfzY7lyDf3l9mz2tRnvbC6n5x6''@;'; put 'put ''K1pHlJBjwBV6HdYfELG6fJbdPApmK9/jyvfavPaw3yax6jJ3MqfqKpStujp1YaXqSh5jVVfHWhc6uxZabvp1R0ND++tqXWKSfBdkfupZM/jtNHflB44oBaUvQMAxrxVTe/jysIjVlHWxWlY5nwXMuT0lm5xBf9AfD7DVrnX7KmI4pRU6pTRLQJNeva3XdncfbE0mWPXucKq+s7M+VVHd1lJT03qK''@;'; put 'put ''GJt21tXtbGoYL+QVvIdp5e5cY7iqoTGuODntea3BK4DrHjDuBHVPbXRdABrck3P9kgaPpbFc+Jey1/MGcq9fzPY/tzXnuhDMwptPc/mE68J94CNWowYkk0ODT5roikpFMRDVB36AG5tIExZN8GDRKBAkiQNgqc0AU7YxDDZL4EyYJQpmuYKubFfWVelaMMMGYCsQxo0hpug/PsUYMonENGmAmFCU''@;'; put 'put ''iHggz0io98sT+FazRaBOw0pdA51x6nJNLDjbYNCKzebcxpa//nm2/5/nUWQ1gszS5vMg3aJkuOLWsry2IVppRveFv2MXDMlyeSqVSICjJacyrc2JhkSyrhZ4LE5Dn1AwlJ/1utZsUPDmbPlgyzlr1tZRYzvO5sJf5OvsHYfD5Ye79h5fqYNpurq2fXdRaH/L2sV35fODtDympY6vwtdXx5NTQ9ny''@;'; put 'put ''mOKieFVldc6ivPI5OeF31QRD3A5Wgu9Maz8a0GNySRDrdckQEfUNhUCfAgzBcR5IGMTGRFSjRogKRGD0o0gEDSQyVcXiK17JshcslQ9r9ApRWIC77fLAcsU6OHa+wf4suJ6t5YeZe8vy1Lq/0rGltSj4Kwfy1/u1BZ3XZTaqT8GmtW6tcfiGrnXlKlk9FGN6ro/rv2m0wXWq/z6Qc/2SBo+l7bnw''@;'; put 'put ''F7P9zHH9t/wttrZJ+3mZ9/9uDt8NBGzLuX7Qw+F/CddLWf8v8/4f5ddfheth1j+Hn3uQ5+HqWa3N/2S1Yrtkp40tp2QPvnCYcB8vxfBoCx32VdXAdIEcg8XEZD738pScV1zMa8HCIbpHQnNRsu5JeMXlyl0Pwm9s77llePhkT8tC157O8OSRst6BY53T5a0l4+Od8vhEJ7E/dPX2swPdNw31HssM''@;'; put 'put ''DfbX9Zcnaxqi/b6lv+zokq/a1tl9lYYfUsLsyTi3Jypd+LojxdsEx+fhja5Tej2Uc/2SBo+lfbnwL2Wvr+7/Yrb/uSlulzrQNlJI+llO1Uf3TQDfa3UFiKXvkA5YfpJtIJNAFvWjLFz22YrA+9AyrQaat8gtNYCoOXcHGc6PxkqLo1Ulf6D73X6ofsBfpn+jxaWxpoWXtLcwJm0N1ktzsFlf1usi''@;'; put 'put ''OhIJFxXq9Dqzgai+LL0qrFzd0Jct3MiXzV013MiX9fv9Vf7K0Dv5sjqvumXSw1xZCdRlPDx0ZmB4S9G+7ooIvBvZWrSvRzlX/HKwMtof+05fzPcDfxR/cE993+mBaOlIaDoJEhwrG/1l/N88IMOPghDXxX7vpufHsLUrSvudq2R49fUVGebXL2nwWRnm1y9m+1FlWF2Pof3sUfu5N2fNmde5fTy3''@;'; put 'put ''VHGTusP1686b1B1uuEC98W21BJEuUP93lR0qwvyassMsTi6qOAFc9eXmzTLZPNUCemBdjMd9wnNZn3ChJ7ft4Wz+yoge3KTtN7J+o3FU3ZO3vE2ogHigAKSzXW4pwpKuAIuYDBggDAESkzm2HUvP9hWwFVS1JKuwsNBX6Av67Xa7y0+zL3qeVEwHIny7XpKjqT6Nwd+vCNfXtbvLGrK797Cn2FdQ''@;'; put 'put ''YFN+c+LEfWVt9UEf3z3k83gKbDjNNvSp9X7bSC/Iagyl0Qtc8HwlWKcvhhjCgw1CTYIYDUaMjTEsYfBEN78L5lyV3Ki2RZMpHbC4hYN0DQHPiITPUk00sRKAxHpgFnywJky+vbkNpmRHPB5PxxvDQWcgGA64/HQVIoubTQqCQYvZNXSFc4qDSS/Dm3l9gfDcLRyBf9EKhTkW1xYK0+JhhtNPagXD''@;'; put 'put ''aq7gYyxODKtx4i/WxZu8PpbK7lZVdu/O5hk+xmJV1hYb0PlN2l5S2xJsGOV8yvYYsrYRte3COj6NQxxjJi8CTC+DyRd2kD8hI8A8T/5EgQBGzRuBBJzJ1s2+C/RJEYzpNdnkAMLrgObaKnyYmhWMBD06APxry+701ahOsFYwRbVPdFNotJrqRFNDq1tYL9tiFfAKnCiqBdG5wNT9dvh8vrAvFKLV''@;'; put 'put ''CuGAuqQVWF9bohYvoNwSk3d1rKoxeeihkx3Kv2uFJp1Lf59TZ/v+rqampR/n6imeT8xk84kLaP86OnPf7VzWd1tQddmaXCQ2oR9s0lbz+wSAeYrnqEDeh9nZGKCNirEBs11OelHH91WqJ2LQ+nuJSSEgURM9pou4NlqROLpLVPsf0ESMDDOxUh4jeuUWnnHv4eLEpYhcWKQpdyY4TActsJrjEIqj''@;'; put 'put ''M7KDRgwhTPQGcABBtyC6ybwI+KASXHkdjPQAzVRrlFWPN2LlQsyPZFYppIGyOeN9G7UgtHQuHA7HwzFPhTMcDIRYjltS5+DVVMra6mXq9yO1gvm1rRY6q2I6XZ1tdSFzEKIu5S9qQFXstTphshmYvsWRU9QM4RWeZXXNG+ShDRvkodf6+QbVR2B7Z5mNiqo26qvr2vJ6Y2qjBriNWlTbKq/Tfbe8''@;'; put 'put ''LfBKPvEjfkYHwAs1yIoSqAX9mUu7txpL+jKsM0Aop/NiIujoES6oz8fuiBvcUa1CzEyXcQSDbt6IVzZhS5J+BsJoqva1fb1OknNw2/omJiyKdt4QrW0mVyNkpOe84Pls08vA0/i7poamvWtaappTyfxEfiJWFfAXF7mdNP1dYNH8YnocAHeF9X9FRTQuDQWrQiFjYSBUiIV3rI4eqguXdcaLA5V0''@;'; put 'put ''/br3CkqlIf76OTB4gukRvg6wsPzwurWCnwBMJdMjPEZb+ARf021a3oYU0AUuujOUrnjS41cI7s+e48ILqzTp9/jZniZNLuhOWE3gFSbvulOW1VKu+hvUhiB41rfZWr8fHZLNbur2+0HQqREJ0JVjMYcpVO8+PyusjLalLLRZKVBeAzBFt2mVlxZBhJmft2GJslNdlk17c8c+r5YLbKFzKPHmn2zj''@;'; put 'put ''k1gpG1gKw3xKavP0+N+W3lJnpK7loG+trMGAjjWtyQdrNcT67L5u+7p93bQ0WL/0FvQ3CnJ4np03meByiH/P/X+4HmPyOaJef4Jfp3upmZ9Ro/oZznUyz+J54V6AGVVhPOg5DvOcBsP3ZL+o9QP9f5/5BDjHJ6D93MlgRjeG4fsySB/wUx6tvLWYTUZRDxJItN3pazZ656E8t7bROyWl0rQY2y25''@;'; put 'put ''SZ8SAP/+1KnFxbciRyJ4i/KfmaMd39H2fTSw+vBBOc9skkRq6Q0Ia1XiZnhrU/d0ZsuzV7Z5+tgnbbFrauqLblb7gyUw9+rzccP4yaGhk+N4b5Vy8T/DR8J4QvltFcquWd2hrVkBHl/fCNekhPl046ti/TGg3xcZXetU/Wrl8HC9hNg1eMDpRbTyrBPZ9TED+twmz7qUzUMY9qGcdapMdp1qAT25''@;'; put 'put ''zgfk8fm5bC5hYRJttJ6GrWvXuNS2+1byHNiq7hsCxSvQPbYOoFKLnM6eOGEg2SMnjHRrvVavxyLCEmexx8WKeqlrYaIFLpozkS10cWP7ynbvHery/QuzdB/8LOldeqsrc0jOHM7wRfypT1w98+mrF5UU/l7msCzPNzM7BmMWfg7+BZ1XM9ouj3sxjUT0Oppe1wsDwEM6vUF3wGIkoqilHMySSchJ''@;'; put 'put ''OiSTgQBCyeZkU2MqUB+oi1VBd35nMBwM5cG4VydpV8xBjt+gW3OOjOpDCHk8O9t5JBw5KvMC88zRSPC6jOZIKLfl1JvjW1btj2qsq03zCvTGmtoUcyl0uUXouJ86F6pvcYLRNqXy79Pr+ILXP1Pa7uC5PzX+7QU+PcH4N6Xy6SscXnmd1kur8PR6R9Y/PcH4N6Xy780bPut2xr87OP8a+bPYHng2''@;'; put 'put ''zkZ1nA+s431eN03HeRUf525t/3w72z/fgd6WS+rAGakvKRb0UhHdfYh1uMAKLkkeK9rgeef46noNSRJnwPP1DKKVNMa6co3qNeUa79iodF2Nh3DqnVqxdcONijXWt+O1GuZQdYSWadgNUnEsKG6ayb6CQwJI76nrN8hpex84eJlzA65fFCvWpLYts5c7RkCtf29n9e8yXSeow6K+vpToxJIignTg''@;'; put 'put ''LiGgFxHyVq8T6Ng6gbZSqdaubLJOoKNnaN12eWC6TrAGTl0n0MBFvucvXgn4Zaugl0EvLah9p4p8/IO9oxvhN3lN+HJl+tsmpTWLB2kxUnbZuv0ceTqhyRPI4uQm8nRJkydsKOfyFAR5omc8lKMX5HwvUMRjAYqY6XmTKkViGkUo6sgpmgBU67OMBsL8s3WEiWcRfiVt5Ko14Cp51rXSUTLZYdjl''@;'; put 'put ''qJwG81QaTCAMfmkTWtEgnx4XgGed66nhK6XnVaypIuzMHl/B9kO0s/0QCfRtuaAKG4SomxgNLkyM2aJIfVbN6HX6syYMA8XGo2BsAMN0N6Yg6KZFvieT1z4iX3ZZsnqljcFIbnunRnJ0Y3hWWon25zQTKJ7oeQYJVM02aXgBUzTroduEo9dv3PBSAcCpdRycklf2cgR8cdvaKsy0aaw5d3vHRIEl''@;'; put 'put ''xPiPnSXCeDSt8uj6XEgJ+B0FzP+c5P4nuWadj8prODLZGo6FDWwHz6Wfy+bStZwKb/tytkZEq1HMrf9gbVltAMvbA8wdG9WggN9034Zth1fWArC1D6nnoGxj56AE6NqNC7Q+LRrOo/sqBtRTpbQzx1nOXQt22Ja/QLAgEHTxM6ZoULomc7Hm1BTy6PDdk7ZsusIxf0o9PYVcYGelWL1qgsJf5H34''@;'; put 'put ''WO5RKnwfzjYyC3FMCN3Gw3krmFQBYm1dCAN7DfhWXSDZVZwSvbbDa+P0r5/f5ylfbUVnTcbXHPQ7A66Ay0+t27pU78rWnaQ9mxMnsywizc/dynMS50anazf1aJEd0Iqd8cL4sYXXC+GudXzE9+9QnbmL8YKEvptTI3RCqxGC67eta8vXKC5paxRYmkA5bY9n64vm0A3r+IidwcJ4rX3Teka+b4by''@;'; put 'put ''2jT3j46gnLbHtbYb5g1524tqW5o3/GBO2xPZthvlpnjbS9pzsaGBn71C9yXTGDif7sigFf10nxMZQOqmIbKXetw+xtT5yLrRkWViID9nG/HTG+wdprX3N5NLV3ieipeep3J+4eDY8NAouXT/6OjGfWT3dRF0FtjyBnVXl9pHOikFMqNDw2MHF8ilkZH71T56oY9vQHSr7mgwEbqnYYCGGn0b1eDn''@;'; put 'put ''IUtIyO5oUCfNgoknx/wtroaiogZXS/l4jPT6y1tcXi988LPnDKEXWT4lzJ5z2fr+tbsltB0SKykOdT9GLwb9xvZjNLFe6SZWuiNhHqQUY2Eyu4lWuKJdGbnfW3B7Z2d1QpYT3vJyr8fv95DezgT9nOhs8nv4Rb7PYBvWg02zoxY2ghorTCafcgz9moo+9eQewOkk04YCvUOnake2oEen7sxQz9+v''@;'; put 'put ''WFGIp9pLvMNc/EH7Pc7SOT4m8JkyRrckacPvJy+BXHex56bpfkwj293mxrjPgIVedijRJDWpwMPz2tElRBjluxWCIbbZjT4f0cPv2VHa3ANUaSoGsCVQ6HCbHB59xpCscWsf5PzdpN1us5h9pUa6Q8hiLi413a7SJEPXidi5tUV854UeuLKPhqU3OB3ZvSheKRBSN5fgHcf4DpO/8dzB5K9ReX35''@;'; put 'put ''ueVvIysKsh4K+bnzq/e5BbN9CasPoP8Kz1+WhIJVyjLPTbI8JdcpXFfeoelK1I0rNtGVr2i6EnUDxEZtD+In37HtQdyS0/Z4tu0cblqnK3nbi9m2c+hrPD5dbqFnV+aun7z9e+5LvP171ZeILDfTNQmeZ2cwF97+HV8ne/t3KgzP1x/L9pOHrt0kX/9SNl+fN4I2rCXtRu/ZxE68kl3L7lbj3Dr0''@;'; put 'put ''M2LBve987j89m7j3oNZGaL+CNoLl7Te1Ni34A+hV8gTwTTHjmb61mwo5zzi11DhPrn535QsLyN2rvrGAzimD70e/IBdgxvk068j3CJLS7B5BeCb+PntmCaqQy0qswOurNoUJTLkFC4IOduLX6mfrNx0KLt9kWMGc93x8+IfAGxE+PjbOP8A4HdlxMpezVMvvjqHzeBI/DlCb7LGi5wuwPVZrzhd4''@;'; put 'put ''qj0YbA8E2M/5YFuQv4NLHE/twDdfRh8E2kNQYwvA6x8YD9vxzwFAot+Po7s75/txMmgQnvxbXlRVl4/1Vv71NQYsWrDJLJpyv/LGmecQzGZhxm60Sbrcb8pJvUND9q03vLVEWwvq9+U0b9hug2/MWdcWopHGoSFZ1r45Z2hy6KqJMXlQHtjaU5up7Whq3PBbdFz/hW/RKV/zOZgDW974V3/DDh5k''@;'; put 'put ''f+iH4Vrlc9r37XwK3gBs8Mq/eEd9P1aT+yU8K1/Gg8HTr8cR/G16KtEzeoxrYxnsBdwFHpm9//7ZpYuep5/18v3AABfT4AQGF0l7pQhAPfJI/7NPey5+j9mD36nnI9egHfKED6hWjHUioWUkGJnpqfQ6MHcQbR8wYmLC2Ex3jGS3CVlYDStPPcFrDUrEY9EquyME4aHdGcqDUHLl2KcIxI7cWU92''@;'; put 'put ''kJVcCC0vA1R7/SwxynYI1b9nYOTeee9YFxG6dxTOv3dI3RWUua4Mi8rP9QQHlDdKF7vn2JHKncf7ej3mQk9vz+F2tieou6m30GP29HYM0e9swUWkEN8Juk58htB9GM7sae130nPamVMDbo0Amtdv9xNhaYn+5pwRxs+4MDzrdebpSe1//bCJt8Y2PGyC12HAc0C341p1reAJrT4Drn9Dvb6yRsuv''@;'; put 'put ''X8pel47nXr+oXUdzB3Ovv5K93n0q9/q57PWFee1stG3kHpYjT8C8IwEnhnlvXFYDs0/mVNPk4OEeFnRZc5Fxkjtdf1JxwmOvXKyocddja3FD42yOG4izP50z9peyOMi7jttDWrr/NXZOj0bvpD2wVTtxB9N6OLivX39fvzSK/h/iEzz6AAEAAAABAABVErT+Xw889QAfA+gAAAAA08GdhgAAAADU''@;'; put 'put ''vqb1/zb+4wSKA84AAAAIAAIAAAAAAAB42mNgZGBgPvfvPAMDy+b/Zv9zWLoYgCLIgNEQAKcNBrgAAAB42nWUzWsTURTFz70zFEEI2ERQQozGYExMqkm10WotaWpiBWvsRqxYF1IXLlS6UEQFka5ERV24c1Xp0oVKd3ahCAX9C0RQutCCChVKoS6M5z4zEpOacDjz8d68e3/vzMgSToM/OUpFqRQq''@;'; put 'put ''Mo+STiGhE4h7RaT1CbZIB0pyBT3UNnmALj2BgxzfLxeRl/Xok9n6V33J49vo1FPI8v4mvUmdxQ69jl06im49jwyPC2485+owivYc+mFZQdi7xHmLCOsMavoMOV2h30CVdVT1C88/oiohDGkc6/QpjukBlLwzqHk+leH9e6g6f+zmxLlWks8b0h+I+EVs1NfYwHlr9C665RqOsOZlek4WsFNr9V8y''@;'; put 'put ''zprKSOkdVDSB7fSsjiAlE4jpJGsfw4AI9ovU57RAHoKy9wgDvF7Wq258xebIfTJcwmaZ5Lwxsqyh06ty7Twi7DeiIXTJQyQliXP0lLzCHnIfdGveQt5qlDnWspv33pGx1TXFPQD2Sdldz5JXgn2FnRb/lZ/kGsbP2DVJQvW3xo/+jZr3okgH7FqlmQZL49cs40fOepIyVqvIe0G3XsiuWeT2xpjR''@;'; put 'put ''P1Mf9DIKf9m1ynJhbvyaZfyMs7n1a2u2uvVu6wduOeK+WL/MctbxsJqa/XjTuWXN9rvhZPWJ9b4nu72sH44h+3AZZA4sh+488HHEZAQxY2v9tblxZW+B+yHk/A7WydxadtqcWbY8tTnz7TIWuO2PMfqP2zvgcmh7aPwa74LlsdUt4zLD7DWEn/RRapCa5ZhDvIZ6T/DMVm9j2liTdcNb+PO94TOB''@;'; put 'put ''aUD7kPcu8NsRRa/7LqxFL9Uv0+S17L4V8J8jLcPYSnF/699dPjzO5b6u8q+g8hspY9fOeNpFwl1I4nAAAPC1lt+uMptO93H+N6ebO7e5NUF6kiPiCB/iiAiJHo6IOOQ4IqKHIyTikB4OkZCIOEIiIuKIELmHkOghYkQPIRERR/QgItJDyCER93Jw/H4QBGX+2Yb2u6CuNEzA3+Ej+Apudf/oPu9u''@;'; put 'put ''IRZEQJJIDtlH6j0jPcs95ybBNGY6Mb8xp80Z86q5bDYslKVt5azL1jPri020Tdj2bNe2hp2wj9rn7Hl7xQE5Eo6Co+YUnWPOrHPPWUMhlEPH0VV0EzXQVq+jl+vd6RvuW+v39s/3X7qmXGVXe2BiYHvgwi26l9zVQW5wY/ASY7EZ7AAzsI6H80x7cp5rT8ure0e8S95THMVT+DpexMv4Ff7qY31r''@;'; put 'put ''vryv7uv4HX7KL/uT/g/+LSJDrBB5okSUiXPilmgSr+R7Mk1myBUyT5bIMnlNTVOfqSxVoHapCvVMp+k5eoFeodfpIl0KJAJ3gXrgGUDAAbyABTIYBnvgGFSBAW7AI3hiEswJc8HUmAemxXTYJXaV3WB32GO2GuwL/goawZtgI9jmLJyPA5zB3XMN7iVkCY2HaqF66DlsCrvCVPiJh3mUf8cf8lW+''@;'; put 'put ''xj/wLQESXAIr6MKsUBLKwqlwKdwKTeFPxBbBIuGIFsmKiIiJQIyKCXFMnBTnxcW3qSgUdUWp6IE0Ln2UFqVvUkHalY6kM+lKZuVN+UCuyBdyTa7LHcWkeBVW0ZWksqBsKBWlGcNik7FC7LcKq7KaVFPqjPpJ/arm1C31UK2qhnqvNv7TEI3SRrVJraj91O60ptYcehhq6zZ9Wc/pRd3Qb/RH/Ul/''@;'; put 'put ''iVvi7vhUfDb+JZ6N5/8CDBDMyAABAAABPABoAAoAQQAEAAIAKAA5AIsAAACTAmsAAwABeNqNkstOwkAUhv8WNKDGKDHGsOrKGBO5qeBtYdSwUdRIhK0gFRrBYilGXfo2blz6DF6ewI2P4DP4dzitN2LIpJ1v5vznPzOnBRDDO0LQwlEAO3x6rGGOqx7rGEdTOIQN3AqHsYJH4SHE8SE8jFktIhxB''@;'; put 'put ''RksIRxHXToRHsaT5PmMoaQ/CE5jSw8KTiOkzwk+Y1ueFn5HSN4VfENHbwq8Y0a97/BZCXL/DNmy0cQMHFupowIWBez4ZpJBGllRl1KCuoTQdcpFzi1kd5l4ggQJM5jnKyWYffJVJlUXaUrs1HHGnji65QnWamSk11nGMXZSxT+rntRB4+U6DVjR+1Sxx5VBrqZMb384wWN0S+ZQ6m0qvKwd0MTl7''@;'; put 'put ''2TXGKuRDxr3YHufaP33zeu1ytYYkx9UPZ1v5tgLXBGM2135OR7LqjLrc7fIr+ZokZ79mS931q2ay7z377f3tZZk7VZwpHzfoXUE6mVdRgyOrYjmeMI1VvhexHPxPOZxTZ6o6jnyFfOBYxCVvYjHiUNP8BLhZh5cAAHjabZNXbBxVFIa/37F33TZO771Xx173xCkua8exYycucezESca7Y2fxehfG''@;'; put 'put ''u3FsugQCHkDwwjPlCRC9CiR4QKJX0XsH0XmkB+/cCV4k7sN8/xmd858z994hC3edG2Ae/7NUm36QxQyyycGHn1zyyKeAQgLMpIhZzGYOc6fq57OAhSxiMUtYyjKWs4KVrGI1a1jLOtazgY1sYjNb2Mo2tlPMDkooJUgZ5VRQSRXV1LCTXdSymz3sZR911NNAIyGaaGY/LRyglTYO0k4HhzhMJ110''@;'; put 'put ''08MRejlKH/0c4zgDnOAkp7C4nau4mpu5gTt4n+u5lqf5mDu5jbt5nme5h0HC3EiEF7F5jhd4lZd4mVf4liHe4DVe516G+YWbeJs3eYvTfM+PXMcFRBlhlBhxbiHBRVyIwxgpkpxhnO84yyQTXMylXMJj3MrlXMYVXMkP/MTjytIMZStHPvn5i785J5SrPOVLKlChApqpIs3SbM3hV37TXM3TfC3Q''@;'; put 'put ''Qi3id97RYi3RUi3Tcq3gc77QSq3Saq3RWq3Tem3QRm3iPu7XZm3RVm3TdhVrh0r4gz/5kq9UqqDKVK4KVapK1arRTu1SrXZrj/ZqH0+oTvVqUCNf841CvMtnfMCHfMSnvMcnalKz9qtFB9SqNh1Uuzp0SIfVqS51q0dH1MsDPMgjPMpDPMw13KWjPMOTPKU+fla/jum4BnRCJ3VKlgYVVkS2hvx1''@;'; put 'put ''o1bYScT9lqGvbtCxz9g+y4W/LjGciNsjfsvQ1xi20kkRg8apCivpD3kWtmF+KJJIWuGwHU/m2/9Kf8izsj2rkPGwXRQ2hxOjo5ZJLRzOCPwtnnvUY4vnEzUsbM2sHMkIfG1WOJW0fTGDNtMvZtBuXsZdFLZnesQzPdpNetyFv8ObIWEY6Didig9bTmo0ZqWSgURm5Os0HRzToTOzg5PZodN0cAy6''@;'; put 'put ''TNWYC38qHi0prQx6LPN1m6SkmabHmyZlmNPjROPDOan0M9Dzn8lSmZG/x9vBlGFBbzjqhFOjQzH7bMF4hu7L0BPT2tdvZpx0kd8/fdqT06ednjhYVuWyLFjp6x12rKlrNW7QaxzGXeT1RqK2Y49Fx/LGz6t0XWmovtpjjccGj42+PmM04SL9NlhSEvRY5rHcY4XHSsNgU3Yo5STcoKKpIccqtmLJ''@;'; put 'put ''fMudxUj37qdlkTX92ek4YJ0f0CS63dOywPt9jDb7mtZ5Vvo0THIyGou4ybnW2NQeRWwnL2J76h+3ZbchAAAAeNpj8N7BcCIoYiMjY1/kBsadHAwcDMkFGxnYnTZJMjJogRibeTgYOSAsMTYwi8NpF7MDAyMDJ5DN6bSLAcpmZnDZqMLYERixwaEjYiNzistGNRBvF0cDAyOLQ0dySARISSQQbObj''@;'; put 'put ''YOTR2sH4v3UDS+9GJgaXzawpbAwuLgD+HCVgAAAAAAFYmPZ3AAA='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret.65f1fc0acbe4c7ff-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=index-html; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1l''@;'; put 'put ''dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRl''@;'; put 'put ''bnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVu''@;'; put 'put ''dD0iaHR0cDovL2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHBy''@;'; put 'put ''b3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+Cgog''@;'; put 'put ''ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uv''@;'; put 'put ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy45NTM4NDVjOTQzNmJjZGNhLmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6''@;'; put 'put ''IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl''@;'; put 'put ''ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl''@;'; put 'put ''c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg''@;'; put 'put ''ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kZXZ0ZXN0IiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IlJlZGlyZWN0ZWQiIGRlYnVnPSJmYWxzZSIg''@;'; put 'put ''dXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiIGRjcGF0aD0iL3RtcC9kYyIgaG90bGljZW5jZWtleT0ibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPgog''@;'; put 'put ''IDwvc2FzanM+CgogIDxib2R5IGNkcy10aGVtZT0ibGlnaHQiIGNsYXNzPSJtLTAiPgogICAgPG15LWFwcD48L215LWFwcD4KICA8c2NyaXB0IHNyYz0icnVudGltZS5mMTJmYzZmMDNiMDI2MzYwLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJwb2x5ZmlsbHMuNjIz''@;'; put 'put ''MzQ4YWE0NjEyMzk4My5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ic2NyaXB0cy4wMjFmNGE2OGE3ZTAwMDkzLmpzIiBkZWZlcj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibWFpbi45NDJmMTI1NjNkMTA1YTEwLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjwvYm9k''@;'; put 'put ''eT4KPC9odG1sPgo='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.942f12563d105a10-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4Mih0ZSl7dGUuZXhwb3J0cz1mdW5jdGlvbihqKXt2YXIgZD17fTtmdW5jdGlvbiBTKGgpe2lmKGRbaF0pcmV0dXJuIGRbaF0uZXhwb3J0''@;'; put 'put ''czt2YXIgbz1kW2hdPXtpOmgsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4galtoXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxTKSxvLmw9ITAsby5leHBvcnRzfXJldHVybiBTLm09aixTLmM9ZCxTLmQ9ZnVuY3Rpb24oaCxvLEkpe1MubyhoLG8pfHxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''aCxvLHtlbnVtZXJhYmxlOiEwLGdldDpJfSl9LFMucj1mdW5jdGlvbihoKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxTLnQ9ZnVuY3Rpb24oaCxvKXtpZigxJm8mJihoPVMoaCkpLDgmb3x8NCZvJiYib2JqZWN0Ij09dHlwZW9mIGgmJmgmJmguX19lc01vZHVsZSlyZXR1cm4gaDt2YXIgST1PYmplY3QuY3JlYXRlKG51bGwpO2lmKFMucihJKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoSSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6aH0pLDImbyYmInN0cmluZyIhPXR5cGVvZiBoKWZvcih2YXIgZiBpbiBoKVMuZChJLGYsZnVuY3Rpb24oVCl7cmV0dXJuIGhbVF19LmJpbmQobnVsbCxmKSk7cmV0dXJuIEl9LFMubj1mdW5jdGlvbihoKXt2YXIg''@;'; put 'put ''bz1oJiZoLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBofTtyZXR1cm4gUy5kKG8sImEiLG8pLG99LFMubz1mdW5jdGlvbihoLG8pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxvKX0sUy5wPSIi''@;'; put 'put ''LFMoUy5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0''@;'; put 'put ''cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGQsUyl7InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxkLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIGg9UygKLyohIC4vdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVy''@;'; put 'put ''LnRzIiksbz17fSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuc2luZ2xlSW5zdGFuY2V8fChmLnNpbmdsZUluc3RhbmNlPW5ldyBmKSxmLnNpbmdsZUluc3RhbmNlfSxl''@;'; put 'put ''bnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGYucHJvdG90eXBlLnZhbGlkYXRlTmFtZT1mdW5jdGlvbihUKXtpZigwPT09VC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nISIpO2lmKC9ccy8udGVzdChU''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMgbXVzdCBub3QgY29udGFpbiBhbnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzISIpO3JldHVybiEwfSxmLnByb3RvdHlwZS5ub3JtYWxpemVTaGFwZU5hbWU9ZnVuY3Rpb24oVCl7cmV0dXJuIFQudG9Mb3dlckNhc2UoKX0sZi5w''@;'; put 'put ''cm90b3R5cGUuc2V0SWNvblRlbXBsYXRlPWZ1bmN0aW9uKFQsQSl7dmFyIE09QS50cmltKCk7dGhpcy52YWxpZGF0ZU5hbWUoVCkmJihUPXRoaXMubm9ybWFsaXplU2hhcGVOYW1lKFQpLG9bVF0mJmRlbGV0ZSBvW1RdLG9bVF09TSxoLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5l''@;'; put 'put ''bWl0Q2hhbmdlcyhULE0pKX0sZi5wcm90b3R5cGUuc2V0SWNvbkFsaWFzZXM9ZnVuY3Rpb24oVCxBLE0pe2Zvcih2YXIgTz0wLEQ9TTtPPEQubGVuZ3RoO08rKyl7dmFyIEU9RFtPXTt0aGlzLnZhbGlkYXRlTmFtZShFKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFQsRSx7Z2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIFRbQV19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSxmLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVCl7aWYoIm9iamVjdCIhPXR5cGVvZiBUKXRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGlu''@;'; put 'put ''IHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogInNoYXBlLXRlbXBsYXRlIiB9Jyk7Zm9yKHZhciBBIGluIFQpVC5oYXNPd25Qcm9wZXJ0eShBKSYmdGhpcy5zZXRJY29uVGVtcGxhdGUoQSxUW0FdKX0sZi5wcm90b3R5cGUuaGFzPWZ1bmN0''@;'; put 'put ''aW9uKFQpe3JldHVybiEhb1t0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShUKV19LGYucHJvdG90eXBlLmdldD1mdW5jdGlvbihUKXtpZighVClyZXR1cm4gbztpZigic3RyaW5nIiE9dHlwZW9mIFQpdGhyb3cgbmV3IFR5cGVFcnJvcigiT25seSBzdHJpbmcgYXJndW1lbnQgaXMgYWxsb3dlZCBp''@;'; put 'put ''biB0aGlzIG1ldGhvZC4iKTtyZXR1cm4gb1t0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShUKV19LGYucHJvdG90eXBlLmFsaWFzPWZ1bmN0aW9uKFQpe2lmKCJvYmplY3QiIT10eXBlb2YgVCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRlcmFsIHBh''@;'; put 'put ''c3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6IFsiYWxpYXMtbmFtZSIsIC4uLl0gfScpO2Zvcih2YXIgQSBpbiBUKWlmKFQuaGFzT3duUHJvcGVydHkoQSkpe2lmKCFvLmhhc093blByb3BlcnR5KEEpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cignQW4gaWNvbiAiJytBKyJcIiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYWxpYXNlcyB0byBkb2Vzbid0IGV4aXN0IGluIHRoZSBDbGFyaXR5IEljb25zIHNldHMhIik7dGhpcy5zZXRJY29uQWxpYXNlcyhvLEEsVFtBXSl9fSxmfSgpO2QuQ2xhcml0eUljb25zQXBpPUl9LCIuL3Byb2plY3Rz''@;'; put 'put ''L2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMgKioqIQogICAgICAg''@;'; put 'put ''ICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosZCxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLGQuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgaD1TKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbz1TKAovKiEgLi91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlciAqLwoiLi9wcm9qZWN0cy9pY29u''@;'; put 'put ''cy9zcmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMiKSxJPTAsZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBUPWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07''@;'; put 'put ''ZnVuY3Rpb24gQSgpe3ZhciBNPVQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBNLmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK0ksSSsrLE19Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYoVD1mdW5jdGlvbigpe3JldHVybiBSZWZsZWN0LmNvbnN0cnVjdChIVE1MRWxlbWVudCxh''@;'; put 'put ''cmd1bWVudHMsdGhpcy5jb25zdHJ1Y3Rvcil9KSxkLkNsYXJpdHlJY29uRWxlbWVudD1BLEEub2JzZXJ2ZWRBdHRyaWJ1dGVzPVsic2hhcGUiLCJzaXplIiwidGl0bGUiXSwoQS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6QX19KSkuY29uc3RydWN0b3I9QSxBLnByb3RvdHlwZS5fYXBwZW5kQ3VzdG9tVGl0bGU9ZnVuY3Rpb24oKXt2YXIgTT1mLmNsb25lTm9kZSghMSk7TS5pZD10aGlzLmNsckljb25VbmlxSWQsTS50ZXh0Q29udGVudD10aGlzLmN1cnJlbnRU''@;'; put 'put ''aXRsZUF0dHJWYWwsdGhpcy5hcHBlbmRDaGlsZChNKX0sQS5wcm90b3R5cGUuX3NldEljb25TaXplPWZ1bmN0aW9uKE0peyFOdW1iZXIoTSl8fE51bWJlcihNKTwwPyh0aGlzLnN0eWxlLndpZHRoPW51bGwsdGhpcy5zdHlsZS5oZWlnaHQ9bnVsbCk6KHRoaXMuc3R5bGUud2lkdGg9TSsicHgi''@;'; put 'put ''LHRoaXMuc3R5bGUuaGVpZ2h0PU0rInB4Iil9LEEucHJvdG90eXBlLl9ub3JtYWxpemVTaGFwZT1mdW5jdGlvbihNKXtyZXR1cm4gTS5zcGxpdCgvXHMvKVswXS50b0xvd2VyQ2FzZSgpfSxBLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciBNPXRoaXM7aWYodGhp''@;'; put 'put ''cy5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8dGhpcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJub25lIiksdGhpcy5oYXNBdHRyaWJ1dGUoInNpemUiKSl7dmFyIE89dGhpcy5nZXRBdHRyaWJ1dGUoInNpemUiKTt0aGlzLmN1cnJlbnRTaXplQXR0clZhbCE9PU8mJih0aGlzLmN1cnJlbnRTaXplQXR0''@;'; put 'put ''clZhbD1PLHRoaXMuX3NldEljb25TaXplKE8pKX1pZih0aGlzLmhhc0F0dHJpYnV0ZSgic2hhcGUiKSl7dmFyIEQ9dGhpcy5fbm9ybWFsaXplU2hhcGUodGhpcy5nZXRBdHRyaWJ1dGUoInNoYXBlIikpO2lmKHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249by5TaGFwZVRlbXBsYXRl''@;'; put 'put ''T2JzZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8oRCxmdW5jdGlvbihGKXtNLl9pbmplY3RUZW1wbGF0ZShGKX0pLHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD1ELCFoLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0''@;'; put 'put ''aGlzLl9pbmplY3RFcnJvclRlbXBsYXRlKCk7dmFyIEU9aC5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuZ2V0KHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCk7aWYoRT09PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUpcmV0dXJuO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9RX1pZih0aGlz''@;'; put 'put ''Lmhhc0F0dHJpYnV0ZSgidGl0bGUiKSl7dmFyIEI9dGhpcy5nZXRBdHRyaWJ1dGUoInRpdGxlIik7aWYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsIT09QiYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1CKSwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXJldHVybn10aGlzLl9pbmplY3RU''@;'; put 'put ''ZW1wbGF0ZSgpfSxBLnByb3RvdHlwZS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s9ZnVuY3Rpb24oTSxPLEQpe3ZhciBFPXRoaXM7aWYoInNpemUiPT09TSYmdGhpcy5fc2V0SWNvblNpemUoRCksInNoYXBlIj09PU0pe2lmKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD10aGlzLl9ub3JtYWxp''@;'; put 'put ''emVTaGFwZShEKSx0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uJiYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249by5TaGFwZVRlbXBsYXRlT2JzZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8odGhpcy5jdXJy''@;'; put 'put ''ZW50U2hhcGVBdHRyVmFsLGZ1bmN0aW9uKEIpe0UuX2luamVjdFRlbXBsYXRlKEIpfSkpLCFoLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0aGlzLl9pbmplY3RFcnJvclRlbXBsYXRlKCk7dGhpcy5jdXJyZW50U2hh''@;'; put 'put ''cGVUZW1wbGF0ZT1oLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKX0idGl0bGUiPT09TSYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1ELCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfHx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfSxBLnBy''@;'; put 'put ''b3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3RoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJnRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24oKX0sQS5wcm90b3R5cGUuX3NldEFyaWFMYWJlbGxlZEJ5PWZ1bmN0aW9uKCl7dmFyIE09dGhpcy5nZXRB''@;'; put 'put ''dHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpLEQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJzdmciKXx8dGhpcztNP00mJk0uaW5kZXhPZih0aGlzLmNsckljb25VbmlxSWQpPDAmJkQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLE0rIiAiK3RoaXMuY2xySWNvblVuaXFJZCk6RC5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsdGhpcy5jbHJJY29uVW5pcUlkKX0sQS5wcm90b3R5cGUuX2luamVjdFRlbXBsYXRlPWZ1bmN0aW9uKE0pe00mJk0hPT10aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlJiYodGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1NKSx0aGlzLmlubmVySFRN''@;'; put 'put ''TD10aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlLHRoaXMuY3VycmVudFRpdGxlQXR0clZhbCYmKHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KCksdGhpcy5fYXBwZW5kQ3VzdG9tVGl0bGUoKSl9LEEucHJvdG90eXBlLl9pbmplY3RFcnJvclRlbXBsYXRlPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50''@;'; put 'put ''U2hhcGVUZW1wbGF0ZT1oLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQoImVycm9yIiksdGhpcy5faW5qZWN0VGVtcGxhdGUoKX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAg''@;'; put 'put ''ICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvaW5kZXgudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosZCxTKXsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGQuQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgaD1TKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbz1TKAovKiEgLi9jbHItaWNvbnMtZWxl''@;'; put 'put ''bWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxJPVMoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksZj1oLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtkLkNs''@;'; put 'put ''YXJpdHlJY29ucz1mLGYuYWRkKEkuQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz1mKSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29uIil8fGN1c3RvbUVsZW1lbnRzLmRl''@;'; put 'put ''ZmluZSgiY2xyLWljb24iLG8uQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGQsUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxkLkNvcmVTaGFwZXM9ZC5DbHJTaGFwZUFycm93PWQuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9ZC5DbHJTaGFwZUV5ZUhpZGU9ZC5DbHJTaGFwZUV5ZT1kLkNsclNoYXBlRXZlbnQ9ZC5DbHJT''@;'; put 'put ''aGFwZUNhbGVuZGFyPWQuQ2xyU2hhcGVBbmdsZURvdWJsZT1kLkNsclNoYXBlVmlld0NvbHVtbnM9ZC5DbHJTaGFwZVNlYXJjaD1kLkNsclNoYXBlVm1CdWc9ZC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9ZC5DbHJTaGFwZUZpbHRlckdyaWQ9ZC5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9''@;'; put 'put ''ZC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD1kLkNsclNoYXBlQ2xvdWQ9ZC5DbHJTaGFwZUltYWdlPWQuQ2xyU2hhcGVCZWxsPWQuQ2xyU2hhcGVGb2xkZXJPcGVuPWQuQ2xyU2hhcGVGb2xkZXI9ZC5DbHJTaGFwZUFuZ2xlPWQuQ2xyU2hhcGVVc2VyPWQuQ2xyU2hhcGVCYXJzPWQuQ2xy''@;'; put 'put ''U2hhcGVIZWxwSW5mbz1kLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPWQuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPWQuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9ZC5DbHJTaGFwZUluZm9TdGFuZGFyZD1kLkNsclNoYXBlSW5mb0NpcmNsZT1kLkNsclNoYXBlQ2hlY2tDaXJjbGU9ZC5DbHJTaGFw''@;'; put 'put ''ZUV4Y2xhbWF0aW9uQ2lyY2xlPWQuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlPWQuQ2xyU2hhcGVUaW1lcz1kLkNsclNoYXBlQ2hlY2s9ZC5DbHJTaGFwZUNvZz1kLkNsclNoYXBlSG9tZT1kLkNsclNoYXBlVW5rbm93blN0YXR1cz12b2lkIDA7dmFyIGg9UygKLyohIC4uL3V0aWxzL2Rl''@;'; put 'put ''c2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG89UygKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2QuQ2xy''@;'; put 'put ''U2hhcGVVbmtub3duU3RhdHVzPSgwLG8uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4y''@;'; put 'put ''OSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAsMCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLGQuQ2xyU2hhcGVIb21lPSgwLG8uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAsMC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQx''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNWMzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwz''@;'; put 'put ''MywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5LjgzVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxkLkNsclNoYXBlQ29nPSgwLG8u''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3czMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdTMjIsMTEsMTguMSwxMXogTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1''@;'; put 'put ''LTVjMi44LDAsNSwyLjIsNSw1UzIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjYtMS41bDEuNC0yLjZjMC4zLTAuNiwwLjItMS40LTAuMy0x''@;'; put 'put ''LjlsLTIuNC0yLjRjLTAuNS0wLjUtMS4zLTAuNi0xLjktMC4zbC0yLjYsMS40bC0xLjUtMC42bC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUs''@;'; put 'put ''Ny45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwx''@;'; put 'put ''LjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNs''@;'; put 'put ''Mi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6IE0zMiwxOS40bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4x''@;'; put 'put ''bC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4z''@;'; put 'put ''LTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgy''@;'; put 'put ''LjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjQsMC41LDIuMSwwLjlsMC41LDAuM2wzLjMtMS44bDIsMmwtMS44LDMuM2wwLjMsMC41YzAuNCwwLjcsMC43LDEuNCwwLjksMi4xbDAuMSwwLjVsMy42LDEuMVYxOS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjEsMThjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN3MtMy4xLTctNy03QzE0LjIsMTEsMTEuMSwxNC4xLDExLjEsMTh6IE0yMy4xLDE4YzAsMi44LTIuMiw1LTUsNWMtMi44LDAtNS0yLjIt''@;'; put 'put ''NS01czIuMi01LDUtNUMyMC45LDEzLDIzLjEsMTUuMiwyMy4xLDE4eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjEtMC4zYy0wLjgsMC0x''@;'; put 'put ''LjYtMC4yLTIuNC0wLjRjMC4zLDAuNiwwLjYsMS4zLDAuOCwxLjlsMC4xLDAuNWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45''@;'; put 'put ''bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVj''@;'; put 'put ''MC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS4zLDAuNSwxLjksMC44Yy0wLjMtMC44LTAuNC0xLjYtMC40LTIu''@;'; put 'put ''NWwtMC40LTAuMmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIu''@;'; put 'put ''NWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wy''@;'; put 'put ''LjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42''@;'; put 'put ''LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy43LDE1LjRoLTUuM3YwLjFsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMt''@;'; put 'put ''MC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMu''@;'; put 'put ''MywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywy''@;'; put 'put ''LjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy40bDEuNC0yLjNsLTAuNi0yQzIxLDIuNCwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45''@;'; put 'put ''QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQs''@;'; put 'put ''Mi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41''@;'; put 'put ''LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNiwzMy45LDE1LjcsMzMuNywxNS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMwLjIsMCwwLjUsMCwwLjcsMC4xYy0wLjItMC42LTAuMy0xLjMtMC4yLTJoLTAuNWMtMy45LDAtNywzLjEtNyw3YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdjMC0wLjktMC4y''@;'; put 'put ''LTEuOC0wLjUtMi42aC0yLjJjMC41LDAuOCwwLjcsMS42LDAuNywyLjVDMjMuMSwyMC44LDIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgs''@;'; put 'put ''MjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNTcsMTUuNzJsLTMuMzUtMWExMS42NSwxMS42NSwwLDAsMC0uOTUtMi4zM2wxLjY0LTMuMDdhLjYxLjYxLDAsMCwwLS4xMS0uNzJMMjcu''@;'; put 'put ''NDEsNi4yYS42MS42MSwwLDAsMC0uNzItLjExTDIzLjY0LDcuNzJhMTEuNjIsMTEuNjIsMCwwLDAtMi4zNi0xbC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYx''@;'; put 'put ''LDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDks''@;'; put 'put ''MjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAs''@;'; put 'put ''MCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcs''@;'; put 'put ''MTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFh''@;'; put 'put ''MTIuMTIsMTIuMTIsMCwwLDAtLjQ3LTEuMzIsNy40OSw3LjQ5LDAsMCwxLTYuMTQtNi4xNiwxMS44MiwxMS44MiwwLDAsMC0xLjMzLS40OGwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgs''@;'; put 'put ''MWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAs''@;'; put 'put ''MCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4z''@;'; put 'put ''OGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYx''@;'; put 'put ''LjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMi41NywxNS43MiwzMS41LDE1LjRIMjIuODVBNS41LDUuNSwwLDEsMSwxOCwxMi41YTUu''@;'; put 'put ''NTMsNS41MywwLDAsMSwuNjUsMEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjItLjg2LTIuODNBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43''@;'; put 'put ''Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYx''@;'; put 'put ''LjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgt''@;'; put 'put ''Ljk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGQuQ2xyU2hhcGVDaGVjaz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLGQuQ2xyU2hhcGVUaW1lcz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWEx''@;'; put 'put ''LDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxkLkNsclNoYXBlRXhjbGFtYXRpb25U''@;'; put 'put ''cmlhbmdsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEuMywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSww''@;'; put 'put ''LDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRB''@;'; put 'put ''MywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIv''@;'; put 'put ''PicpLGQuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwx''@;'; put 'put ''OCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwx''@;'; put 'put ''OCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUiIGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41''@;'; put 'put ''WiIvPicpLGQuQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwx''@;'; put 'put ''MCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEu''@;'; put 'put ''NDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwxLDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmEx''@;'; put 'put ''LjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksZC5DbHJTaGFwZUluZm9DaXJjbGU9KDAsby5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJoMXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSww''@;'; put 'put ''LTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLGQuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAsby5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwyaDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwx''@;'; put 'put ''LjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLGQuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSww''@;'; put 'put ''LDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBM''@;'; put 'put ''MTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwx''@;'; put 'put ''NiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWExLjQsMS40LDAsMSwxLDIsMloiLz4nKSxkLkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCxvLmNsckljb25TVkcpKCc8Y2lyY2xlIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYt''@;'; put 'put ''MTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx''@;'; put 'put ''NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAs''@;'; put 'put ''MCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4nKSxkLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLG8uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEy''@;'; put 'put ''QTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcu''@;'; put 'put ''ODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEs''@;'; put 'put ''MzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIuODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2''@;'; put 'put ''NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5''@;'; put 'put ''NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAzMi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5''@;'; put 'put ''NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQxOSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2Njky''@;'; put 'put ''IDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4x''@;'; put 'put ''NywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjku''@;'; put 'put ''ODVaIi8+JyksZC5DbHJTaGFwZUhlbHBJbmZvPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4z''@;'; put 'put ''Mi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCww''@;'; put 'put ''LDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4zLDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVB''@;'; put 'put ''Mi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwx''@;'; put 'put ''Ljg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEs''@;'; put 'put ''MSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAuNzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYtLjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4''@;'; put 'put ''LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIuNDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAs''@;'; put 'put ''MCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlQmFycz0oMCxvLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBk''@;'; put 'put ''PSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLGQuQ2xy''@;'; put 'put ''U2hhcGVVc2VyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwx''@;'; put 'put ''LDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwx''@;'; put 'put ''N2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMjAsMTQuNmE1LDUsMCwxLDEsMS4yNC04LjQybDEtMS43NkE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEy''@;'; put 'put ''LDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2''@;'; put 'put ''Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUx''@;'; put 'put ''LDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjE4IiBjeT0iMTAiIHI9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwz''@;'; put 'put ''M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0x''@;'; put 'put ''LjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLjE2LTUuNDdBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41Mloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxkLkNsclNo''@;'; put 'put ''YXBlQW5nbGU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCww''@;'; put 'put ''LDAsMi40NS0yLjM2WiIvPicpLGQuQ2xyU2hhcGVGb2xkZXI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTFhNy41LDcuNSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCww''@;'; put 'put ''LDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMCwxNS40VjI5SDZWMTNoNy4zMWEyLDIsMCww''@;'; put 'put ''LDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5''@;'; put 'put ''LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMTFWN2g2LjQ5bDIuNzIs''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjMuMTMs''@;'; put 'put ''OUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksZC5DbHJTaGFwZUZvbGRlck9wZW49KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40''@;'; put 'put ''MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2''@;'; put 'put ''LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41''@;'; put 'put ''OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEu''@;'; put 'put ''MzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTTMzLjY4LDE1LjRoLS4zTDI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0aDkuNDJBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCww''@;'; put 'put ''LDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgz''@;'; put 'put ''MC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgz''@;'; put 'put ''MmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCww''@;'; put 'put ''LDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4z''@;'; put 'put ''NywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3''@;'; put 'put ''aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4zMS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0''@;'; put 'put ''LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxkLkNsclNo''@;'; put 'put ''YXBlQmVsbD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAs''@;'; put 'put ''MCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAs''@;'; put 'put ''MSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaTTUuMTMsMjguOTRhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNWE4Ljc0LDguNzQsMCwxLDEsMTcuNDcsMHY0Ljk0YTE0LjI0LDE0LjI0LDAs''@;'; put 'put ''MCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAs''@;'; put 'put ''MCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQu''@;'; put 'put ''MjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEw''@;'; put 'put ''LjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5LDcuNDQsNy40NCwwLDAsMS0yLjI0LS44NCw4Ljg5LDguODksMCwwLDEsLjQsMi42NHY0Ljk0YTE0LjI0LDE0LjI0LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNINS4xM2ExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQu''@;'; put 'put ''MjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1QTguOCw4LjgsMCwwLDEsMTgsNi4zMWE4LjYxLDguNjEsMCwwLDEsNC43NiwxLjQ0QTcuNDksNy40OSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTgsMTAuNTgsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSww''@;'; put 'put ''LTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwx''@;'; put 'put ''LDAsMCwwLDMyLjUxLDI3LjgzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMz''@;'; put 'put ''LDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTUuMzIsMzJhMi42NSwyLjY1LDAsMCwwLDUuMjUsMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42''@;'; put 'put ''NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3''@;'; put 'put ''LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5QTcuNSw3LjUsMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU3LDEwLjU3LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3''@;'; put 'put ''LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGQuQ2xyU2hhcGVJbWFnZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwx''@;'; put 'put ''LDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzkt''@;'; put 'put ''Ni43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywz''@;'; put 'put ''LDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUs''@;'; put 'put ''MCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYs''@;'; put 'put ''MjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIy''@;'; put 'put ''LjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxkLkNsclNoYXBlQ2xvdWQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4xOSwxMC4xOSwwLDAsMSwyMC4zMywxLjA2QTEwLjA3LDEwLjA3LDAsMCwxLDI5LDE2LjY2YTguMjksOC4yOSwwLDAsMSw2LDhDMzUs''@;'; put 'put ''MjkuMSwzMS4zMywzMywyNy4xNCwzM1pNMTkuMDksNi4yM2E4LjI0LDguMjQsMCwwLDAtOC4xOSw4bDAsLjg3LS44Ni4xQTcuOTQsNy45NCwwLDAsMCwzLDIzLjFjMCw0LDMuNzcsNy45LDcuNjIsNy45SDI3LjE0QzMwLjIxLDMxLDMzLDI4LDMzLDI0LjY1YTYuMzEsNi4zMSwwLDAsMC01LjM3''@;'; put 'put ''LTYuMjZsLTEuMTgtLjE4LjM5LTEuMTNBOC4xOCw4LjE4LDAsMCwwLDE5LjA5LDYuMjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCww''@;'; put 'put ''LDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDUsNy40NSwwLDAsMS0yLjEtLjU0LDgsOCwwLDAsMS0uMyw0LjE2bC0uMzksMS4xMywxLjE4LjE4YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEt''@;'; put 'put ''Ny42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdhOC4yNCw4LjI0LDAsMCwxLDguMTktOEE4LjEzLDguMTMsMCwwLDEsMjIuNTgsN2E3LjUzLDcuNTMsMCwwLDEtLjA4LTEsNy41MSw3LjUxLDAsMCwxLC4wOS0xLjEyQTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMs''@;'; put 'put ''MTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNCwxMC4xNCwwLDAsMCwuMi0xLjNoLTJhOC4yOCw4LjI4LDAsMCwxLS4zNywxLjcybC0uMzksMS4xMywxLjE4LjE4YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMu''@;'; put 'put ''OTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdBOC4xNiw4LjE2LDAsMCwxLDIxLDYuNDdsMS0xLjhBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3''@;'; put 'put ''Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywx''@;'; put 'put ''MUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42''@;'; put 'put ''NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ0LDcuNDQsMCwwLDEtNi42LTguNThB''@;'; put 'put ''MTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNSwxMC4xNSwwLDAsMCwuMi0xLjI2aC03QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMtNS4yMUExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAu''@;'; put 'put ''NTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGQuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAsby5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGQuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLG8uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0i''@;'; put 'put ''MTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxkLkNsclNoYXBlRmlsdGVyR3JpZD0oMCxvLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwx''@;'; put 'put ''NEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2''@;'; put 'put ''MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIv''@;'; put 'put ''PicpLGQuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2Ex''@;'; put 'put ''LDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCww''@;'; put 'put ''LDAsLjE1LS4zNVYxMVoiLz4nKSxkLkNsclNoYXBlVm1CdWc9KDAsby5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQu''@;'; put 'put ''ODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIyLDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEz''@;'; put 'put ''LDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAsMC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAs''@;'; put 'put ''MCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdo''@;'; put 'put ''LS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEuMTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAs''@;'; put 'put ''MS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEuNzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksZC5DbHJTaGFwZVNl''@;'; put 'put ''YXJjaD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAuOTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywx''@;'; put 'put ''MywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksZC5DbHJTaGFwZVZp''@;'; put 'put ''ZXdDb2x1bW5zPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIsMiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4''@;'; put 'put ''Wm0xMCwwSDE1VjdoOFoiLz4nKSxkLkNsclNoYXBlQW5nbGVEb3VibGU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAs''@;'; put 'put ''MCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEs''@;'; put 'put ''MzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksZC5DbHJTaGFwZUNhbGVuZGFyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUs''@;'; put 'put ''NkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTQiIHk9IjE0IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01IiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9''@;'; put 'put ''IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNW''@;'; put 'put ''OUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn''@;'; put 'put ''ZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIHg9IjE0IiB5PSIyNCIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTE0LS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43''@;'; put 'put ''NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIHg9IjE0''@;'; put 'put ''IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIHg9IjE0IiB5PSIyNCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9seWdvbiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4''@;'; put 'put ''LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5''@;'; put 'put ''aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0i''@;'; put 'put ''TTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEs''@;'; put 'put ''MSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYs''@;'; put 'put ''MTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgx''@;'; put 'put ''Mi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgx''@;'; put 'put ''NFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGQuQ2xyU2hhcGVFdmVudD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywyM2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEs''@;'; put 'put ''MCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0x''@;'; put 'put ''VjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45''@;'; put 'put ''NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgy''@;'; put 'put ''OC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMCwxMGEx''@;'; put 'put ''LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAs''@;'; put 'put ''MjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3Ljgx''@;'; put 'put ''VjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2''@;'; put 'put ''YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEw''@;'; put 'put ''LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDI2LjNhMS4zNCwxLjM0LDAsMCwxLS4zNiwxLjE4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAs''@;'; put 'put ''MCwxLDEyLjksMTlsMy4zOCwzLjM4LDctN2gtMUEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAs''@;'; put 'put ''MCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCww''@;'; put 'put ''LDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIu''@;'; put 'put ''MiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wm0tNC4wNiwzLjA4LTkuNjcsOS42N0wxMSwyMC45''@;'; put 'put ''NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksZC5DbHJTaGFwZUV5ZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1Ljgy''@;'; put 'put ''LDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwx''@;'; put 'put ''LDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIz''@;'; put 'put ''LDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0iNi44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLGQuQ2xyU2hhcGVFeWVIaWRlPSgwLG8uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0''@;'; put 'put ''Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwx''@;'; put 'put ''MGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2''@;'; put 'put ''Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYyLDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2''@;'; put 'put ''LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEu''@;'; put 'put ''Nmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1Ljgy''@;'; put 'put ''LTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45Myww''@;'; put 'put ''LDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGQuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40''@;'; put 'put ''NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0Ex''@;'; put 'put ''LjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlQXJyb3c9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5''@;'; put 'put ''LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz4nKSxkLkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6ZC5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9t''@;'; put 'put ''ZTpkLkNsclNoYXBlSG9tZSxjb2c6ZC5DbHJTaGFwZUNvZyxjaGVjazpkLkNsclNoYXBlQ2hlY2ssdGltZXM6ZC5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlvbi10cmlhbmdsZSI6ZC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6ZC5DbHJTaGFwZUV4''@;'; put 'put ''Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOmQuQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOmQuQ2xyU2hhcGVJbmZvQ2lyY2xlLCJpbmZvLXN0YW5kYXJkIjpkLkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpkLkNsclNoYXBlU3VjY2Vzc1N0''@;'; put 'put ''YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6ZC5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOmQuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQsImhlbHAtaW5mbyI6ZC5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6ZC5DbHJTaGFwZUJhcnMsdXNlcjpkLkNsclNoYXBlVXNlcixh''@;'; put 'put ''bmdsZTpkLkNsclNoYXBlQW5nbGUsZm9sZGVyOmQuQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpkLkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOmQuQ2xyU2hhcGVCZWxsLGltYWdlOmQuQ2xyU2hhcGVJbWFnZSxjbG91ZDpkLkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwi''@;'; put 'put ''OmQuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpkLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQiOmQuQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOmQuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1i''@;'; put 'put ''dWciOmQuQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6ZC5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpkLkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRvdWJsZSI6ZC5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOmQuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpkLkNsclNoYXBlRXZl''@;'; put 'put ''bnQsZXllOmQuQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpkLkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOmQuQ2xyU2hhcGVTdGVwRm9yd2FyZDIsYXJyb3c6ZC5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Db3JlU2hhcGVzLCJob3VzZSIsKDAsaC5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShkLkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Db3JlU2hhcGVzLCJzdWNjZXNz''@;'; put 'put ''IiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFwZXMsImNsb3NlIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFw''@;'; put 'put ''ZXMsIndhcm5pbmciLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywiZXJyb3IiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzWyJleGNsYW1hdGlv''@;'; put 'put ''bi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFwZXMsImluZm8iLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzWyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywibWVudSIsKDAsaC5kZXNjcmlwdG9y''@;'; put 'put ''Q29uZmlnKShkLkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFwZXMsImF2YXRhciIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFwZXMsImNhcmV0IiwoMCxoLmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywi''@;'; put 'put ''bm90aWZpY2F0aW9uIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywiY29sbGFwc2UiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9q''@;'; put 'put ''ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3It''@;'; put 'put ''Y29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGQsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxkLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLGQuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiBoKG8pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpvfX19LCIuL3Byb2plY3RzL2lj''@;'; put 'put ''b25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc2hhcGUt''@;'; put 'put ''dGVtcGxhdGUtb2JzZXJ2ZXIudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosZCxTKXsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGQuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPWQuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsZC5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbygpe3Ro''@;'; put 'put ''aXMuY2FsbGJhY2tzPWQuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc2luZ2xlSW5zdGFuY2V8fChvLnNpbmdsZUluc3RhbmNlPW5ldyBvKSxvLnNpbmdsZUluc3RhbmNlfSxl''@;'; put 'put ''bnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG8ucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKEksZil7dmFyIFQ9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbSV0/LTE9PT10aGlzLmNhbGxiYWNrc1tJXS5pbmRleE9mKGYpJiZ0aGlzLmNhbGxiYWNrc1tJXS5wdXNoKGYp''@;'; put 'put ''OnRoaXMuY2FsbGJhY2tzW0ldPVtmXSxmdW5jdGlvbigpe3ZhciBBPVQuY2FsbGJhY2tzW0ldLmluZGV4T2YoZik7VC5jYWxsYmFja3NbSV0uc3BsaWNlKEEsMSksMD09PVQuY2FsbGJhY2tzW0ldLmxlbmd0aCYmZGVsZXRlIFQuY2FsbGJhY2tzW0ldfX0sby5wcm90b3R5cGUuZW1pdENoYW5n''@;'; put 'put ''ZXM9ZnVuY3Rpb24oSSxmKXt0aGlzLmNhbGxiYWNrc1tJXSYmdGhpcy5jYWxsYmFja3NbSV0ubWFwKGZ1bmN0aW9uKFQpe1QoZil9KX0sb30oKTtkLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1ofSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGQsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxkLmNsckljb25TVkc9dm9p''@;'; put 'put ''ZCAwO2QuY2xySWNvblNWRz1mdW5jdGlvbiBmKFQpe3ZhciBBPSIiO3JldHVybiBULmluZGV4T2YoIi0tYmFkZ2VkIik+LTEmJihBKz0iY2FuLWJhZGdlICIpLFQuaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihBKz0iY2FuLWFsZXJ0ICIpLFQuaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYm''@;'; put 'put ''KEErPSJoYXMtc29saWQgIiksKEE/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytBKyciIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJo''@;'; put 'put ''dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn''@;'; put 'put ''LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStUKyI8L3N2Zz4ifX19KX0sODA2ODUodGUpe3RlLmV4cG9ydHM9ZnVuY3Rpb24oail7dmFyIGQ9e307ZnVuY3Rpb24gUyhoKXtpZihkW2hd''@;'; put 'put ''KXJldHVybiBkW2hdLmV4cG9ydHM7dmFyIG89ZFtoXT17aTpoLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGpbaF0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsUyksby5sPSEwLG8uZXhwb3J0c31yZXR1cm4gUy5tPWosUy5jPWQsUy5kPWZ1bmN0aW9uKGgsbyxJKXtTLm8oaCxvKXx8T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGgsbyx7ZW51bWVyYWJsZTohMCxnZXQ6SX0pfSxTLnI9ZnVuY3Rpb24oaCl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShoLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sUy50PWZ1bmN0aW9uKGgsbyl7aWYoMSZvJiYoaD1TKGgpKSw4Jm98fDQmbyYmIm9iamVjdCI9PXR5cGVvZiBoJiZoJiZoLl9fZXNNb2R1bGUpcmV0dXJuIGg7dmFyIEk9T2JqZWN0LmNyZWF0ZShudWxsKTtp''@;'; put 'put ''ZihTLnIoSSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmh9KSwyJm8mJiJzdHJpbmciIT10eXBlb2YgaClmb3IodmFyIGYgaW4gaClTLmQoSSxmLGZ1bmN0aW9uKFQpe3JldHVybiBoW1RdfS5iaW5kKG51bGwsZikpO3JldHVybiBJfSxT''@;'; put 'put ''Lm49ZnVuY3Rpb24oaCl7dmFyIG89aCYmaC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGguZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gaH07cmV0dXJuIFMuZChvLCJhIixvKSxvfSxTLm89ZnVuY3Rpb24oaCxvKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eS5jYWxsKGgsbyl9LFMucD0iIixTKFMucz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0''@;'; put 'put ''cyBmb3VuZCAqL2Z1bmN0aW9uKGosZCxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGQuQWxsU2hhcGVzPXZvaWQgMDt2YXIgaD1TKAovKiEgLi9jaGFydC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBl''@;'; put 'put ''cy9jaGFydC1zaGFwZXMudHMiKSxvPVMoCi8qISAuL2NvbW1lcmNlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyIpLEk9UygKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBl''@;'; put 'put ''cy50cyIpLGY9UygKLyohIC4vZXNzZW50aWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2Vzc2VudGlhbC1zaGFwZXMudHMiKSxUPVMoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLEE9''@;'; put 'put ''UygKLyohIC4vc29jaWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiKSxNPVMoCi8qISAuL3RlY2hub2xvZ3ktc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiKSxPPVMoCi8q''@;'; put 'put ''ISAuL3RleHQtZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksRD1TKAovKiEgLi90cmF2ZWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyIpLEU9W0kuQ29yZVNoYXBl''@;'; put 'put ''cyxvLkNvbW1lcmNlU2hhcGVzLGYuRXNzZW50aWFsU2hhcGVzLFQuTWVkaWFTaGFwZXMsQS5Tb2NpYWxTaGFwZXMsTS5UZWNobm9sb2d5U2hhcGVzLEQuVHJhdmVsU2hhcGVzLGguQ2hhcnRTaGFwZXMsTy5UZXh0RWRpdFNoYXBlc10sQj17fTtkLkFsbFNoYXBlcz1CO2Zvcih2YXIgRj0wLE49''@;'; put 'put ''RTtGPE4ubGVuZ3RoO0YrKyl7dmFyIEg9TltGXTtmb3IodmFyIHogaW4gSClILmhhc093blByb3BlcnR5KHopJiYoQlt6XT1IW3pdKX10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoQil9LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMu''@;'; put 'put ''dHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixkLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksZC5DaGFydFNoYXBlcz1kLkNsclNoYXBlQmVsbEN1cnZlPWQuQ2xyU2hhcGVUaWNrQ2hhcnQ9ZC5DbHJTaGFwZVNjYXR0ZXJQbG90PWQuQ2xyU2hhcGVQaWVDaGFydD1kLkNsclNoYXBlTGluZUNoYXJ0PWQuQ2xyU2hhcGVIZWF0TWFwPWQuQ2xyU2hhcGVH''@;'; put 'put ''cmlkQ2hhcnQ9ZC5DbHJTaGFwZUN1cnZlQ2hhcnQ9ZC5DbHJTaGFwZUNsb3VkQ2hhcnQ9ZC5DbHJTaGFwZUJ1YmJsZUNoYXJ0PWQuQ2xyU2hhcGVCb3hQbG90PWQuQ2xyU2hhcGVCYXJDaGFydD1kLkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgaD1TKAovKiEgLi4vdXRpbHMvZGVzY3Jp''@;'; put 'put ''cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbz1TKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7ZC5DbHJTaGFw''@;'; put 'put ''ZUF4aXNDaGFydD0oMCxvLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMu''@;'; put 'put ''MTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcu''@;'; put 'put ''NzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUg''@;'; put 'put ''NiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQu''@;'; put 'put ''NzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIy''@;'; put 'put ''IEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwg''@;'; put 'put ''MzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3''@;'; put 'put ''IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAx''@;'; put 'put ''MC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUg''@;'; put 'put ''QyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4z''@;'; put 'put ''IDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEg''@;'; put 'put ''MzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBM''@;'; put 'put ''IDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYg''@;'; put 'put ''MzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5''@;'; put 'put ''NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjgu''@;'; put 'put ''MyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAz''@;'; put 'put ''My42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JyksZC5D''@;'; put 'put ''bHJTaGFwZUJhckNoYXJ0PSgwLG8uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00''@;'; put 'put ''LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYg''@;'; put 'put ''TCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAx''@;'; put 'put ''MCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwg''@;'; put 'put ''MzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAy''@;'; put 'put ''NiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAy''@;'; put 'put ''NiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcg''@;'; put 'put ''QyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYg''@;'; put 'put ''TCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwg''@;'; put 'put ''OC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2''@;'; put 'put ''IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIz''@;'; put 'put ''IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2''@;'; put 'put ''Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44''@;'; put 'put ''NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcu''@;'; put 'put ''NTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEwIFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBM''@;'; put 'put ''IDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45''@;'; put 'put ''MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBM''@;'; put 'put ''IDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGQuQ2xyU2hhcGVCb3hQbG90PSgwLG8uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVI''@;'; put 'put ''NEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBMIDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQg''@;'; put 'put ''TCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkg''@;'; put 'put ''MjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4yIEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQgTCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAu''@;'; put 'put ''MTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQg''@;'; put 'put ''WiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAy''@;'; put 'put ''OSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBM''@;'; put 'put ''IDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAxMS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMu''@;'; put 'put ''MTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxu''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMz''@;'; put 'put ''IDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEy''@;'; put 'put ''IFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIgMTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEyLjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAx''@;'; put 'put ''OSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0''@;'; put 'put ''IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAx''@;'; put 'put ''My42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAx''@;'; put 'put ''OS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcgTCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIx''@;'; put 'put ''LjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQu''@;'; put 'put ''ODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMg''@;'; put 'put ''MTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0''@;'; put 'put ''IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1''@;'; put 'put ''LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxkLkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAsby5j''@;'; put 'put ''bHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUg''@;'; put 'put ''MzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0''@;'; put 'put ''MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcu''@;'; put 'put ''NCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMg''@;'; put 'put ''NyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEz''@;'; put 'put ''LjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMgQyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAy''@;'; put 'put ''MyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYgMjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAx''@;'; put 'put ''OS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYu''@;'; put 'put ''MjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5''@;'; put 'put ''IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5c''@;'; put 'put ''biAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIy''@;'; put 'put ''LjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoi''@;'; put 'put ''PjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYu''@;'; put 'put ''NiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFog''@;'; put 'put ''TSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3''@;'; put 'put ''IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIx''@;'; put 'put ''LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAu''@;'; put 'put ''MTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43''@;'; put 'put ''OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcg''@;'; put 'put ''MjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4''@;'; put 'put ''IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwg''@;'; put 'put ''MzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0''@;'; put 'put ''MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDEx''@;'; put 'put ''IDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEu''@;'; put 'put ''NiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMg''@;'; put 'put ''QyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTku''@;'; put 'put ''NCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0''@;'; put 'put ''IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIx''@;'; put 'put ''Ljk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5''@;'; put 'put ''LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAgQyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAx''@;'; put 'put ''My4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3''@;'; put 'put ''IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIy''@;'; put 'put ''LjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4w''@;'; put 'put ''NjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxkLkNsclNoYXBlQ2xvdWRDaGFydD0oMCxvLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRB''@;'; put 'put ''MiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1''@;'; put 'put ''LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4''@;'; put 'put ''IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAy''@;'; put 'put ''MiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1''@;'; put 'put ''IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44''@;'; put 'put ''NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUg''@;'; put 'put ''MjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3''@;'; put 'put ''IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAz''@;'; put 'put ''NCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIuMzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0''@;'; put 'put ''IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYzNyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0''@;'; put 'put ''LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUg''@;'; put 'put ''MjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5c''@;'; put 'put ''biAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44''@;'; put 'put ''OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMu''@;'; put 'put ''OTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44NzkgOS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIy''@;'; put 'put ''IDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5''@;'; put 'put ''NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUu''@;'; put 'put ''MzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAuNjc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAuMTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYz''@;'; put 'put ''NiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAyMC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcu''@;'; put 'put ''NDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAy''@;'; put 'put ''MiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQg''@;'; put 'put ''MjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAx''@;'; put 'put ''My4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBa''@;'; put 'put ''Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu''@;'; put 'put ''ODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBD''@;'; put 'put ''IDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1''@;'; put 'put ''NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy''@;'; put 'put ''Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku''@;'; put 'put ''MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksZC5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAsby5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUg''@;'; put 'put ''TCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3Bh''@;'; put 'put ''dGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYu''@;'; put 'put ''ODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUu''@;'; put 'put ''OCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0''@;'; put 'put ''LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1''@;'; put 'put ''IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45''@;'; put 'put ''ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2''@;'; put 'put ''MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIy''@;'; put 'put ''LjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44''@;'; put 'put ''MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUu''@;'; put 'put ''OCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEu''@;'; put 'put ''OCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2''@;'; put 'put ''IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3''@;'; put 'put ''IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQg''@;'; put 'put ''MjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYg''@;'; put 'put ''MTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYg''@;'; put 'put ''NyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIg''@;'; put 'put ''MTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5''@;'; put 'put ''LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIw''@;'; put 'put ''MyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAy''@;'; put 'put ''Mi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4''@;'; put 'put ''IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIg''@;'; put 'put ''MjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIuODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAxMi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1''@;'; put 'put ''IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTguMjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44''@;'; put 'put ''NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIwLjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0''@;'; put 'put ''IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMu''@;'; put 'put ''Njg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicp''@;'; put 'put ''LGQuQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAsby5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1''@;'; put 'put ''LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIxYTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBD''@;'; put 'put ''IDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMg''@;'; put 'put ''MTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAx''@;'; put 'put ''OSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIt''@;'; put 'put ''YWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUu''@;'; put 'put ''MzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBk''@;'; put 'put ''PSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAz''@;'; put 'put ''NiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAx''@;'; put 'put ''NyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1''@;'; put 'put ''IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcg''@;'; put 'put ''MTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAy''@;'; put 'put ''OCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0''@;'; put 'put ''IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIu''@;'; put 'put ''NTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIuNzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxj''@;'; put 'put ''aXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBk''@;'; put 'put ''PSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYu''@;'; put 'put ''MDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBDIDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUg''@;'; put 'put ''MzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMy''@;'; put 'put ''IDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiLz4nKSxkLkNsclNoYXBlSGVhdE1hcD0oMCxvLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEg''@;'; put 'put ''NCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAy''@;'; put 'put ''NCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2''@;'; put 'put ''IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMz''@;'; put 'put ''MSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5c''@;'; put 'put ''biAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYgMTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2''@;'; put 'put ''IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3''@;'; put 'put ''LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0i''@;'; put 'put ''TSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoi''@;'; put 'put ''PjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkgMTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBM''@;'; put 'put ''IDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAu''@;'; put 'put ''MyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5''@;'; put 'put ''IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3''@;'; put 'put ''IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2''@;'; put 'put ''IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0''@;'; put 'put ''IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAy''@;'; put 'put ''OCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAgMTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBM''@;'; put 'put ''IDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUuNzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAxMi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0''@;'; put 'put ''IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBM''@;'; put 'put ''IDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcg''@;'; put 'put ''TCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcg''@;'; put 'put ''TCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDEx''@;'; put 'put ''LjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEu''@;'; put 'put ''MDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksZC5DbHJTaGFwZUxpbmVDaGFydD0oMCxvLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFog''@;'; put 'put ''TSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAu''@;'; put 'put ''NDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3''@;'; put 'put ''IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4w''@;'; put 'put ''NSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIg''@;'; put 'put ''MjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEg''@;'; put 'put ''QyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIx''@;'; put 'put ''LjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4z''@;'; put 'put ''MiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMz''@;'; put 'put ''IDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAxMi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3Bh''@;'; put 'put ''dGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIg''@;'; put 'put ''MTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEuNTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAy''@;'; put 'put ''OS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42Njkg''@;'; put 'put ''MTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAx''@;'; put 'put ''Mi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwgMjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40''@;'; put 'put ''MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIg''@;'; put 'put ''ZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45''@;'; put 'put ''OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxkLkNsclNoYXBlUGllQ2hhcnQ9KDAsby5jbHJJY29uU1ZHKSgn''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3''@;'; put 'put ''IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40''@;'; put 'put ''MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMu''@;'; put 'put ''MjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYg''@;'; put 'put ''MTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAz''@;'; put 'put ''MSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMg''@;'; put 'put ''MjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwg''@;'; put 'put ''MzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwg''@;'; put 'put ''MTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAy''@;'; put 'put ''NS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5''@;'; put 'put ''OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAz''@;'; put 'put ''NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMy''@;'; put 'put ''Ljg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTgg''@;'; put 'put ''OSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5''@;'; put 'put ''IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0g''@;'; put 'put ''MjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAxNyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4zNDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEg''@;'; put 'put ''MTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYg''@;'; put 'put ''MjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0''@;'; put 'put ''IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQzNyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwg''@;'; put 'put ''MTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5''@;'; put 'put ''IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksZC5DbHJTaGFwZVNjYXR0ZXJQ''@;'; put 'put ''bG90PSgwLG8uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEg''@;'; put 'put ''MzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTEx''@;'; put 'put ''IDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkx''@;'; put 'put ''IDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMg''@;'; put 'put ''OC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0i''@;'; put 'put ''TSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAx''@;'; put 'put ''OS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMg''@;'; put 'put ''MTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3''@;'; put 'put ''LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4''@;'; put 'put ''MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkx''@;'; put 'put ''MiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEg''@;'; put 'put ''MiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2''@;'; put 'put ''NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45''@;'; put 'put ''MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0''@;'; put 'put ''LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1Ljgz''@;'; put 'put ''IDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTgu''@;'; put 'put ''NjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAx''@;'; put 'put ''NC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAy''@;'; put 'put ''Ny43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3''@;'; put 'put ''MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIy''@;'; put 'put ''LjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42''@;'; put 'put ''NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0''@;'; put 'put ''IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu''@;'; put 'put ''OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx''@;'; put 'put ''My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5''@;'; put 'put ''IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2''@;'; put 'put ''IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0''@;'; put 'put ''LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAy''@;'; put 'put ''MC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAy''@;'; put 'put ''MC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40''@;'; put 'put ''NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgz''@;'; put 'put ''IEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIu''@;'; put 'put ''ODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44''@;'; put 'put ''IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEz''@;'; put 'put ''Ljk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkg''@;'; put 'put ''OS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYy''@;'; put 'put ''NiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAu''@;'; put 'put ''NzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4''@;'; put 'put ''NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAy''@;'; put 'put ''MC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41''@;'; put 'put ''NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkz''@;'; put 'put ''IEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5''@;'; put 'put ''LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3''@;'; put 'put ''IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2''@;'; put 'put ''NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5''@;'; put 'put ''Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2''@;'; put 'put ''IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44''@;'; put 'put ''NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4w''@;'; put 'put ''NDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3''@;'; put 'put ''Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5''@;'; put 'put ''MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4w''@;'; put 'put ''MDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3''@;'; put 'put ''LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44''@;'; put 'put ''IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEz''@;'; put 'put ''Ljk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkg''@;'; put 'put ''OS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYy''@;'; put 'put ''NiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAu''@;'; put 'put ''NzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4''@;'; put 'put ''NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAy''@;'; put 'put ''MC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41''@;'; put 'put ''NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkz''@;'; put 'put ''IEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1''@;'; put 'put ''NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUg''@;'; put 'put ''MTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLGQu''@;'; put 'put ''Q2xyU2hhcGVUaWNrQ2hhcnQ9KDAsby5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAz''@;'; put 'put ''MSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1''@;'; put 'put ''IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2''@;'; put 'put ''MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMx''@;'; put 'put ''IEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAy''@;'; put 'put ''NS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAy''@;'; put 'put ''Mi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBa''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAg''@;'; put 'put ''MjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQg''@;'; put 'put ''MTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBD''@;'; put 'put ''IDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIz''@;'; put 'put ''IDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwg''@;'; put 'put ''NCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwg''@;'; put 'put ''MjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAx''@;'; put 'put ''My4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBM''@;'; put 'put ''IDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAy''@;'; put 'put ''Ni4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAg''@;'; put 'put ''MjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAx''@;'; put 'put ''Mi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAw''@;'; put 'put ''NCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGQuQ2xyU2hhcGVCZWxsQ3VydmU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRzLTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwx''@;'; put 'put ''LDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGQu''@;'; put 'put ''Q2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0IjpkLkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOmQuQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0IjpkLkNsclNoYXBlQnViYmxlQ2hhcnQsImNsb3VkLWNoYXJ0IjpkLkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOmQu''@;'; put 'put ''Q2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0IjpkLkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0IjpkLkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOmQuQ2xyU2hhcGVQaWVDaGFydCwidGljay1jaGFydCI6ZC5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90Ijpk''@;'; put 'put ''LkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90IjpkLkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOmQuQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjpkLkNsclNoYXBlQmVsbEN1cnZlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxo''@;'; put 'put ''LmRlc2NyaXB0b3JDb25maWcpKGQuQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChkLkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMv''@;'; put 'put ''c3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAqKioh''@;'; put 'put ''CiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihqLGQsUyl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KSxkLkNvbW1lcmNlU2hhcGVzPWQuQ2xyU2hhcGVGYWN0b3J5PWQuQ2xyU2hhcGVFbXBsb3llZT1kLkNsclNoYXBlRW1wbG95ZWVHcm91cD1kLkNsclNoYXBlUnVibGU9ZC5DbHJTaGFwZVBlc289ZC5DbHJTaGFwZUNvaW5CYWc9ZC5DbHJTaGFwZUJpdGNvaW49ZC5D''@;'; put 'put ''bHJTaGFwZVllbj1kLkNsclNoYXBlV29uPWQuQ2xyU2hhcGVSdXBlZT1kLkNsclNoYXBlUG91bmQ9ZC5DbHJTaGFwZUVDaGVjaz1kLkNsclNoYXBlRG9sbGFyQmlsbD1kLkNsclNoYXBlQmFuaz1kLkNsclNoYXBlQ3JlZGl0Q2FyZD1kLkNsclNoYXBlRG9sbGFyPWQuQ2xyU2hhcGVFdXJvPWQu''@;'; put 'put ''Q2xyU2hhcGVTdG9yZT1kLkNsclNoYXBlV2FsbGV0PWQuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9ZC5DbHJTaGFwZVBpZ2d5QmFuaz1kLkNsclNoYXBlU2hvcHBpbmdCYWc9ZC5DbHJTaGFwZUNhbGN1bGF0b3I9dm9pZCAwO3ZhciBoPVMoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAq''@;'; put 'put ''LwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxvPVMoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtkLkNsclNoYXBlQ2FsY3VsYXRvcj0o''@;'; put 'put ''MCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAxNCAyNCAxNCAy''@;'; put 'put ''NCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAyMiAyMiAyMiAy''@;'; put 'put ''MiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAyMCAyNiAxOCAy''@;'; put 'put ''NiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYyNmgyWm0wLTZI''@;'; put 'put ''MTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksZC5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLG8uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJINFYzMi4wOUEx''@;'; put 'put ''LjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJhNyw3LDAsMSww''@;'; put 'put ''LTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYx''@;'; put 'put ''MloiLz4nKSxkLkNsclNoYXBlUGlnZ3lCYW5rPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4LDEwLjExLDEw''@;'; put 'put ''LjExLDAsMCwxLDE5LjQ0LDEyYS44LjgsMCwxLDAsLjI4LTEuNTdaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjUuMzgiIGN5PSIxNi43MSIgcj0iMS4zNiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNS41MSwxOC42M2ExLDEsMCwwLDAtLjg0LS40NCwzLjQyLDMuNDIsMCwwLDEtMi4wOS0xLjEyLDE3LjM1LDE3LjM1LDAsMCwxLTIuNjMtMy43OGwyLjg4LTQuNUExLjg5LDEuODksMCwwLDAsMzMsN2ExLjc3LDEuNzcs''@;'; put 'put ''MCwwLDAtMS4zMy0xLDEwLjEyLDEwLjEyLDAsMCwwLTUuMzkuNzUsMTIuNzIsMTIuNzIsMCwwLDAtMi43MiwxLjYzLDE2Ljk0LDE2Ljk0LDAsMCwwLTUuMTYtMS4zOUMxMS4zMSw2LjMsNC44MywxMC45LDQsMTdINGEyLjU2LDIuNTYsMCwwLDEtMS4zOC0xLjUzLDEuODEsMS44MSwwLDAsMSwu''@;'; put 'put ''MTQtMS40LDEuMTksMS4xOSwwLDAsMSwuNDMtLjQzLDEuMDgsMS4wOCwwLDAsMC0xLjEyLTEuODVBMy4zMSwzLjMxLDAsMCwwLC45MSwxM2E0LDQsMCwwLDAtLjMzLDMuMDhBNC43Niw0Ljc2LDAsMCwwLDMsMTguOTVsLjkyLjQ2YTE3LjU4LDE3LjU4LDAsMCwwLDEuODIsN2wuMTcuMzhBMjMs''@;'; put 'put ''MjMsMCwwLDAsOS4yLDMxLjg4YTEsMSwwLDAsMCwuNzUuMzRoNC41MmExLDEsMCwwLDAsLjkyLTEuMzhMMTUsMjkuOTRsMS4xOC4xM2EyMC4zMywyMC4zMywwLDAsMCw0LDBjLjM3LjYuNzcsMS4yLDEuMjEsMS43OWExLDEsMCwwLDAsLjguNDFoNC4zNGExLDEsMCwwLDAsLjkyLTEuMzljLS4x''@;'; put 'put ''Ny0uNC0uMzQtLjgzLS40Ny0xLjItLjE4LS41My0uMzItMS0uNDMtMS40NUExMy4xOCwxMy4xOCwwLDAsMCwyOS41NiwyNmExMi41LDEyLjUsMCwwLDAsMywwLDEsMSwwLDAsMCwuNzgtLjYybDIuMjYtNS44MUExLDEsMCwwLDAsMzUuNTEsMTguNjNabS0zLjc4LDUuNDRhMTEuMzcsMTEuMzcs''@;'; put 'put ''MCwwLDEtMi4zNS0uMTFoMGE4LjIsOC4yLDAsMCwxLTIuNTMtLjg3LDEsMSwwLDAsMC0uOTMsMS43NywxMS43MiwxMS43MiwwLDAsMCwxLjI5LjU4LDgsOCwwLDAsMS0xLjgsMS4xNmwtMS4wNi40OHMuNDksMi4xOS44MiwzLjE2SDIyLjc5Yy0uMjQtLjM0LTEuNDUtMi4zNi0xLjQ1LTIuMzZs''@;'; put 'put ''LS42Ny4wOWExOC41MywxOC41MywwLDAsMS00LjI1LjEyYy0uNjYtLjA2LTEuNzYtLjItMi42Mi0uMzVsLTEuNTUtLjI3cy42MywyLjQzLjc1LDIuNzR2MEgxMC40MkEyMC41NywyMC41NywwLDAsMSw3Ljc2LDI2bC0uMTgtLjM5QTE0LjYyLDE0LjYyLDAsMCwxLDYsMTcuNDhjLjU0LTUuMTks''@;'; put 'put ''Ni4xMi05LjExLDEyLjE5LTguNTRhMTUuNDcsMTUuNDcsMCwwLDEsNS4wOCwxLjQ4bC42Mi4yOS41LS40N0ExMC4yOSwxMC4yOSwwLDAsMSwyNyw4LjU0YTguMjUsOC4yNSwwLDAsMSw0LS42NWwtMy4zOCw1LjI5LjI1LjVoMGEyMS4xNiwyMS4xNiwwLDAsMCwzLjMxLDQuODQsNi40OSw2LjQ5''@;'; put 'put ''LDAsMCwwLDIuMTQsMS4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNSwxOC44N0E1LjgzLDUuODMsMCwwLDEsMzMsMTcuNjFhMjEuNjMsMjEuNjMsMCwwLDEtMy4yOS00Ljg0bDMuMzktNS4yOWEuOS45LDAsMCww''@;'; put 'put ''LS41NC0xLjM4LDkuNjcsOS42NywwLDAsMC01LjEzLjcyLDEyLDEyLDAsMCwwLTMuMTMsMkExNy4zNywxNy4zNywwLDAsMCwxOC42LDcuMTVDMTEuOCw2LjUyLDUuMjcsMTAuOSw0LjU0LDE3bC0uMTQtLjA3QTIuNzYsMi43NiwwLDAsMSwyLjksMTUuMjlhMiwyLDAsMCwxLC4xNS0xLjU1LDEu''@;'; put 'put ''MzIsMS4zMiwwLDAsMSwuNDctLjQ4LDEuMDgsMS4wOCwwLDEsMC0xLjEyLTEuODUsMy40NSwzLjQ1LDAsMCwwLTEuMjMsMS4yNUE0LjE2LDQuMTYsMCwwLDAsLjg0LDE1LjlhNSw1LDAsMCwwLDIuNTcsM2wxLC41NGExOC42MiwxOC42MiwwLDAsMCwyLDcuMywyMywyMywwLDAsMCwzLDQuNzks''@;'; put 'put ''MSwxLDAsMCwwLC44LjM4aDMuNjFhLjUyLjUyLDAsMCwwLC40LS43NUwxNCwzMC4zOGExMSwxMSwwLDAsMS0uMzMtMS4xOGMuOTEuMTYsMi4wOC4zMSwyLjg3LjM4YTIwLjA3LDIwLjA3LDAsMCwwLDMuMTIsMGMuMzkuNy43OSwxLjMzLDEuMTUsMS44NWEuOTMuOTMsMCwwLDAsLjc3LjQxaDMu''@;'; put 'put ''MTFhLjY1LjY1LDAsMCwwLC42MS0uODVjLS4yMy0uNzQtLjUzLTEuNzUtLjcxLTIuMzdhMTUuOSwxNS45LDAsMCwwLDMuNzUtMS43NmMuMTYtLjExLjMyLS4yNi40OC0uMzlhMTMuNzcsMTMuNzcsMCwwLDEtMi40Mi0xLC44LjgsMCwwLDEsLjc0LTEuNDIsMTEuNjQsMTEuNjQsMCwwLDAsMy4x''@;'; put 'put ''OCwxLjEsMTMuMzEsMTMuMzEsMCwwLDAsMi42OC4xMiwxLDEsMCwwLDAsLjktLjY2bDEuNzMtNC40NEExLDEsMCwwLDAsMzUsMTguODdaTTEzLjc5LDExLjU5YS44Ni44NiwwLDAsMS0uMy4wNS44NS44NSwwLDAsMS0uMy0xLjY0LDEyLjQxLDEyLjQxLDAsMCwxLDYuNjktLjU1Ljg1Ljg1LDAs''@;'; put 'put ''MSwxLS4zLDEuNjdBMTAuNzUsMTAuNzUsMCwwLDAsMTMuNzksMTEuNTlabTEyLjUyLDYuMTJhMS40NCwxLjQ0LDAsMSwxLDEuNDQtMS40NEExLjQ0LDEuNDQsMCwwLDEsMjYuMzIsMTcuNzJaIi8+JyksZC5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCxvLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4''@;'; put 'put ''PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjA4LDUuMzdBMSwxLDAsMCwwLDMyLjMxLDVIMTEuNDlsLjY1LDJIMzFMMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40''@;'; put 'put ''OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDMuMTctMTRBMSwxLDAsMCwwLDMzLjA4LDUuMzdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwLjcxIDcgMjEuODcgNSAxMS40OSA1IDEyLjE0''@;'; put 'put ''IDcgMjAuNzEgNyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMTUsMTUuNCwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwx''@;'; put 'put ''LDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0u''@;'; put 'put ''NzhsMS4wOS00LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9''@;'; put 'put ''IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTcsN2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDExLjQ5bC42NSwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVsLS40MiwwTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCww''@;'; put 'put ''LDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjU3LTYuOTFBNy41MSw3LjUxLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xLDYuMzlBMSwxLDAsMCwwLDMyLjMxLDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2''@;'; put 'put ''LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMy4yLTEzQTEsMSwwLDAsMCwzMy4xLDYuMzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUiIGN5PSIyOS41''@;'; put 'put ''IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYt''@;'; put 'put ''LjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJI''@;'; put 'put ''MjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuMTktNC44NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDls''@;'; put 'put ''LS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjcxLTdBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAv''@;'; put 'put ''PicpLGQuQ2xyU2hhcGVXYWxsZXQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5LjU4YTEsMSww''@;'; put 'put ''LDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAsMSw1LDI3Ljkz''@;'; put 'put ''VjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIgY3k9IjIwIiBy''@;'; put 'put ''PSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIuOTQsMi45NCww''@;'; put 'put ''LDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44NywzLjg3LDAsMCwx''@;'; put 'put ''LDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLGQuQ2xyU2hhcGVTdG9yZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCwwLDAsMy0xLjA3''@;'; put 'put ''LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCwwLDEsMjcuODIs''@;'; put 'put ''MTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAsMSw2LDE4LjEz''@;'; put 'put ''YTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgsMzBIMTZWMjJI''@;'; put 'put ''MTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIs''@;'; put 'put ''MiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0Ljcz''@;'; put 'put ''LDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEyLDEuNDhMMjYu''@;'; put 'put ''MTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxkLkNsclNoYXBlRXVybz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ4LDI4''@;'; put 'put ''LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0xLjdBMTQsMTQs''@;'; put 'put ''MCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcxLS4wNS0xLjA3''@;'; put 'put ''czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAsMCwyaDkuODJh''@;'; put 'put ''MSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLGQuQ2xyU2hhcGVEb2xsYXI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y''@;'; put 'put ''NiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEtNi44MywyLjI5''@;'; put 'put ''LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44Mi0uMTksNi4w''@;'; put 'put ''Ny0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcyLDIuMTQtMi4z''@;'; put 'put ''MiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44Myw5LjExLDku''@;'; put 'put ''MTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0LjksMkExLjI1LDEu''@;'; put 'put ''MjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxkLkNsclNoYXBlQ3JlZGl0''@;'; put 'put ''Q2FyZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGlu''@;'; put 'put ''ZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMy''@;'; put 'put ''LDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZUJhbms9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIuOTIsMi41LDEx''@;'; put 'put ''LjgzYTEsMSwwLDEsMCwxLDEuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYz''@;'; put 'put ''SDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFMMTguNjUsNy43''@;'; put 'put ''MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgx''@;'; put 'put ''OVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjIuNzcsOEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwx''@;'; put 'put ''LDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVBMy41MSwzLjUxLDAsMCwxLDIw''@;'; put 'put ''LDE0SDV2MkgzMVYxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDYsOS43NGwuNjgtMS4xNy0xLjQ5LS44NWEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMu''@;'; put 'put ''OS0yLjI0LDEuMS42M0MxOS4zOSw5Ljg5LDE5LjQyLDkuODEsMTkuNDYsOS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMDUsNS4yNSwxOCwyLjkyLDIuNSwxMS44M2Ex''@;'; put 'put ''LDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjEuMDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMuNSwxMy41Niw1LDEyLjY4VjE2SDMxVjEyLjcxbDEuNDguODVhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWk0xNy44NSw3LjExYS44LjgsMCwwLDEsLjgsMEwyNS4zNywxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFIMTEuMTRaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSww''@;'; put 'put ''LDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVB''@;'; put 'put ''MS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwy''@;'; put 'put ''N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzksMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAs''@;'; put 'put ''MCwxLC44LDBsNSwyLjg3QTcuNDUsNy40NSwwLDAsMSwyMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4VjE2SDMxVjEzLjQyQTcuNTMsNy41MywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1''@;'; put 'put ''QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUs''@;'; put 'put ''MjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNWEzLjUxLDMuNTEsMCwwLDEtMy01LjI2bC4xNC0uMjQtMS4zNS0uNzhMMTQuMzUsMTFIMTEuMTRsNi43Mi0zLjg2YS44Ljgs''@;'; put 'put ''MCwwLDEsLjgsMGwxLjc1LDEsMS42NS0yLjg2TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxkLkNsclNoYXBlRG9sbGFyQmlsbD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcsNS44NywwLDAs''@;'; put 'put ''MCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUsNC43LTUuNTUs''@;'; put 'put ''NC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIs''@;'; put 'put ''MiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYuMyw3LjE1UzIx''@;'; put 'put ''LjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4''@;'; put 'put ''IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLGQuQ2xyU2hhcGVFQ2hlY2s9KDAsby5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0LDhIMTIuOTNh''@;'; put 'put ''OC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0zLjQ2LTNoNy41''@;'; put 'put ''M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYuMjUsOC4zOVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAsMCwxLDFIMzRh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0djBBNiw2LDAs''@;'; put 'put ''MCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEuMTEsMS4yLDEu''@;'; put 'put ''MiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLGQuQ2xyU2hhcGVQb3VuZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwxLjQ4LTEuMzVB''@;'; put 'put ''Ny4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUuODUsNS44NSww''@;'; put 'put ''LDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEsMTUsMjUuNDJI''@;'; put 'put ''MjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksZC5DbHJTaGFwZVJ1cGVlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMyYTEsMSwwLDEs''@;'; put 'put ''MCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs''@;'; put 'put ''MTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEzLjU5LDMuNTks''@;'; put 'put ''MCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFaIi8+JyksZC5D''@;'; put 'put ''bHJTaGFwZVdvbj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgsMTRIMjEuMzFM''@;'; put 'put ''MTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYsMjBoNS4zOGwy''@;'; put 'put ''Ljc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44NSwxOGwuNS0y''@;'; put 'put ''aDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEgMTYgMjEuNDQg''@;'; put 'put ''MTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBIN2ExLDEsMCww''@;'; put 'put ''LDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwxLDIuNDIuNjRs''@;'; put 'put ''LTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLGQuQ2xyU2hhcGVZZW49KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1YTEsMSwwLDEs''@;'; put 'put ''MC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMy44aDVhLjgu''@;'; put 'put ''OCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEsMCwwLDEsMCwy''@;'; put 'put ''SDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUuOTUtOS40OWEx''@;'; put 'put ''LjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLGQuQ2xyU2hhcGVCaXRjb2luPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEsMCwwLDAtMSwx''@;'; put 'put ''VjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIuMzZBMy41MSwz''@;'; put 'put ''LjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''MS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVhMi4yNCwyLjI0''@;'; put 'put ''LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOC4z''@;'; put 'put ''MSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2ExLDEsMCwwLDEs''@;'; put 'put ''MiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksZC5DbHJTaGFwZUNvaW5CYWc9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTIxLjYsMjlhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjIuNTQsMjRoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIsMzJIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNywzMmgtN2ExLDEs''@;'; put 'put ''MCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMy43LDI4aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiIC8+PHBhdGggZD0iTTMzLjc0LDI2YTI4LDI4LDAsMCwwLTIuODItMTAuMTJBMjAuMjQsMjAuMjQsMCwwLDAsMjQuNiw4LjcxTDI3LDMuNDJhMSwxLDAsMCwwLS4wNy0xQTEsMSwwLDAsMCwyNi4xMywySDkuOGExLDEsMCwwLDAtLjkxLDEuNDJsMi40NSw1LjMxYTIwLjMzLDIwLjMzLDAs''@;'; put 'put ''MCwwLTYuMjgsNy4xNWMtMi4xNSw0LTIuODIsOC44OS0zLDEyLjI4YTMuNiwzLjYsMCwwLDAsMSwyLjcxQTMuNzksMy43OSwwLDAsMCw1LjgsMzEuOTRIMTJWMzBINS43MmExLjY4LDEuNjgsMCwwLDEtMS4yMS0uNTIsMS42MiwxLjYyLDAsMCwxLS40NS0xLjIzYy4xNC0yLjYxLjY5LTcuNTgs''@;'; put 'put ''Mi43Ni0xMS40NUExOCwxOCwwLDAsMSwxMy4wOCwxMGgxYTMwLjgxLDMwLjgxLDAsMCwwLTEuODcsMi45MiwyMi43OCwyMi43OCwwLDAsMC0xLjQ3LDMuMzRsMS4zNy45MmEyNCwyNCwwLDAsMSwxLjQ5LTMuNDdBMjkuMSwyOS4xLDAsMCwxLDE2LjA1LDEwaDFhMjEuNDUsMjEuNDUsMCwwLDEs''@;'; put 'put ''MS40MSw1LDIyLjU0LDIyLjU0LDAsMCwxLC4zMiwzLjg2bDEuNTgtMS4xMWEyNC4xNSwyNC4xNSwwLDAsMC0uMzItM0EyNC44MiwyNC44MiwwLDAsMCwxOC43NiwxMGguNzhsLjkxLTJIMTMuMjFMMTEuMzYsNEgyNC41N2wtMi41LDUuNDdhOS45Myw5LjkzLDAsMCwxLDEuMjMuNzgsMTguNjMs''@;'; put 'put ''MTguNjMsMCwwLDEsNS44Niw2LjU3QTI2LjU5LDI2LjU5LDAsMCwxLDMxLjczLDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgPHBhdGggZD0iTTI0Ljg5LDI2aDcuODZjLS42Ni04LjcxLTQuNDEtMTQuMTItOS4yMi0xNy4zMkwyNS43Miwz''@;'; put 'put ''LjlhMSwxLDAsMCwwLS45MS0xLjRIMTEuMWExLDEsMCwwLDAtLjkxLDEuNGwxLjIsMi42SDIxLjUxbC0uOSwySDE4Ljc2QTI0LjksMjQuOSwwLDAsMSwyMCwxMy4xOWEyNC40OSwyNC40OSwwLDAsMSwuMzIsM2wtMS41OCwxLjExYTIyLjU0LDIyLjU0LDAsMCwwLS4zMi0zLjg2QTIxLjc0LDIx''@;'; put 'put ''Ljc0LDAsMCwwLDE3LDguNWgtMWEyOC4yMiwyOC4yMiwwLDAsMC0yLjQ4LDMuNywyMy45MSwyMy45MSwwLDAsMC0xLjQ5LDMuNDZsLTEuMzctLjkxYTIyLjc4LDIyLjc4LDAsMCwxLDEuNDctMy4zNEEzMC44MSwzMC44MSwwLDAsMSwxNC4wNSw4LjVIMTIuM2wuMDguMTdDNy4wOCwxMi4yLDMu''@;'; put 'put ''MDUsMTguNCwzLjA1LDI4Ljc1QTEuNjUsMS42NSwwLDAsMCw0LjYxLDMwLjVoOEEyLjY3LDIuNjcsMCwwLDEsMTQuMjEsMjZhMi42NywyLjY3LDAsMCwxLS4zNy0xLjM0LDIuNywyLjcsMCwwLDEsMi43LTIuN2g2YTIuNywyLjcsMCwwLDEsMi43LDIuN0EyLjYzLDIuNjMsMCwwLDEsMjQuODks''@;'; put 'put ''MjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS42LDI4LjVhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjguNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTIyLjU0LDIzLjVoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwzMS41SDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuNywzMS41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNywyNy41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCww''@;'; put 'put ''LDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxkLkNsclNoYXBlUGVzbz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTloMi45M2EuOC44''@;'; put 'put ''LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODktNS4ySDMxYS44''@;'; put 'put ''LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDE5LjdoNS4x''@;'; put 'put ''OWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2YS45LjksMCwx''@;'; put 'put ''LDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2LjgsNi44LDAs''@;'; put 'put ''MCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksZC5DbHJTaGFwZVJ1YmxlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4LjIzLDAsMCww''@;'; put 'put ''LTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEtNi40Myw2SDEz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIwLjU2SDExLjI1''@;'; put 'put ''YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGQuQ2xyU2hh''@;'; put 'put ''cGVFbXBsb3llZUdyb3VwPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTguNDIsNi45MVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCww''@;'; put 'put ''LDAsMTguNDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS45MSwxNy42NWEyMC42LDIwLjYsMCwwLDAtMTMsMkExLjc3LDEuNzcsMCwwLDAsOCwyMS4yNXYzLjU2YTEsMSwwLDAsMCwyLDBWMjEuMzhhMTguOTIsMTgu''@;'; put 'put ''OTIsMCwwLDEsMTItMS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMywyMkgyNi4zVjIwLjUyYTEsMSwwLDAsMC0yLDBWMjJIMTdhMSwxLDAsMCwwLTEsMVYzM2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjNB''@;'; put 'put ''MSwxLDAsMCwwLDMzLDIyWk0zMiwzMkgxOFYyNGg2LjN2LjQxYTEsMSwwLDAsMCwyLDBWMjRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cmVjdCB4PSIyMS44MSIgeT0iMjcuNDIiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEwLjg0LDEyLjI0YTE4LDE4LDAsMCwwLTcuOTUsMkExLjY3LDEuNjcsMCwwLDAsMiwxNS43MXYzLjFhMSwxLDAsMCwwLDIsMHYtMi45YTE2LDE2LDAsMCwxLDcuNTgtMS42N0E3LjI4LDcuMjgsMCww''@;'; put 'put ''LDEsMTAuODQsMTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzMuMTEsMTQuMjNhMTcuOCwxNy44LDAsMCwwLTcuMTItMiw3LjQ2LDcuNDYsMCwwLDEtLjczLDJBMTUuODksMTUuODksMCwwLDEsMzIsMTUuOTF2Mi45YTEs''@;'; put 'put ''MSwwLDEsMCwyLDB2LTMuMUExLjY3LDEuNjcsMCwwLDAsMzMuMTEsMTQuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cGF0aCBkPSJNMTAuNjYsMTAuNjFjMC0uMjMsMC0uNDUsMC0uNjdhMy4wNywzLjA3LDAsMCwxLC41NC02LjExLDMuMTUs''@;'; put 'put ''My4xNSwwLDAsMSwyLjIuODksOC4xNiw4LjE2LDAsMCwxLDEuNy0xLjA4LDUuMTMsNS4xMywwLDAsMC05LDMuMjcsNS4xLDUuMSwwLDAsMCw0LjcsNUE3LjQyLDcuNDIsMCwwLDEsMTAuNjYsMTAuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNMjQuNzcsMS44M2E1LjE3LDUuMTcsMCwwLDAtMy42OSwxLjU1LDcuODcsNy44NywwLDAsMSwxLjksMSwzLjE0LDMuMTQsMCwwLDEsNC45MywyLjUyLDMuMDksMy4wOSwwLDAsMS0xLjc5LDIuNzcsNy4xNCw3LjE0LDAsMCwxLC4wNi45Myw3Ljg4LDcuODgsMCwwLDEtLjEsMS4y''@;'; put 'put ''LDUuMSw1LjEsMCwwLDAsMy44My00LjlBNS4xMiw1LjEyLDAsMCwwLDI0Ljc3LDEuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICBcbiAgPGVsbGlwc2UgY3g9IjE4IiBjeT0iMTEuMjgiIHJ4PSI0Ljc2IiByeT0iNC43IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxMS43NWMuMTYsMCwuMzIsMCwuNDgsMCwwLS4xNSwwLS4yOCwwLS40M2E2LjcsNi43LDAsMCwxLDMuNzUtNiw0LjYyLDQuNjIsMCwxLDAtNC4yMSw2LjQ2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjQuNzYsMTEuMjhjMCwuMTUsMCwuMjgsMCwuNDMuMTYsMCwuMzIsMCwuNDgsMEE0LjU4LDQuNTgsMCwxLDAsMjEsNS4yOSw2LjcsNi43LDAsMCwxLDI0Ljc2LDExLjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjIuMjksMTYuNDVhMjEuNDUsMjEuNDUsMCwwLDEsNS43MSwyLDIuNzEsMi43MSwwLDAsMSwuNjguNTNIMzRWMTUuNTZhLjcyLjcyLDAsMCwwLS4zOC0uNjQsMTgsMTgsMCwwLDAtOC40LTIuMDVsLS42NiwwQTYuNjYsNi42NiwwLDAsMSwyMi4yOSwxNi40NVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTYuNTMsMjAuOTJBMi43NiwyLjc2LDAsMCwxLDgsMTguNDdhMjEuNDUsMjEuNDUsMCwwLDEsNS43MS0yLDYuNjYsNi42NiwwLDAsMS0yLjI3LTMuNTVsLS42NiwwYTE4LDE4LDAsMCwwLTguNCwyLjA1''@;'; put 'put ''LjcyLjcyLDAsMCwwLS4zOC42NFYyMkg2LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIyMS40NiIgeT0iMjYuNjkiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMzIuODEsMjEuMjZIMjUuOTR2LTFhMSwxLDAsMCwwLTIsMHYxSDIyVjE4LjQzQTIwLjE3LDIwLjE3LDAsMCwwLDE4LDE4YTE5LjI3LDE5LjI3LDAsMCwwLTkuMDYsMi4yMi43Ni43NiwwLDAsMC0uNDEuNjh2NS42MWg3LjExdjYuMDlhMSwxLDAsMCwwLDEsMUgzMi44''@;'; put 'put ''MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxkLkNsclNoYXBlRW1wbG95ZWU9KDAs''@;'; put 'put ''by5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMuNTgsMCwwLDEs''@;'; put 'put ''NS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAsMzMuMTcsMjEu''@;'; put 'put ''NDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIyOCIgd2lkdGg9''@;'; put 'put ''IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJWMTguNDJBMzIu''@;'; put 'put ''MTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxkLkNsclNoYXBlRmFj''@;'; put 'put ''dG9yeT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAsMCw0LDMuNzNW''@;'; put 'put ''MTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEuNTYuODNMMzIs''@;'; put 'put ''MTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMjEu''@;'; put 'put ''OTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8''@;'; put 'put ''cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAsMSwxSDMzYTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGQuQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6ZC5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOmQuQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6ZC5DbHJTaGFwZVNob3BwaW5nQmFnLCJzaG9wcGluZy1j''@;'; put 'put ''YXJ0IjpkLkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpkLkNsclNoYXBlV2FsbGV0LHN0b3JlOmQuQ2xyU2hhcGVTdG9yZSxldXJvOmQuQ2xyU2hhcGVFdXJvLGRvbGxhcjpkLkNsclNoYXBlRG9sbGFyLHBlc286ZC5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpkLkNsclNoYXBlQ3Jl''@;'; put 'put ''ZGl0Q2FyZCxiYW5rOmQuQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6ZC5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOmQuQ2xyU2hhcGVFQ2hlY2sscG91bmQ6ZC5DbHJTaGFwZVBvdW5kLHJ1cGVlOmQuQ2xyU2hhcGVSdXBlZSx3b246ZC5DbHJTaGFwZVdvbix5ZW46ZC5DbHJTaGFw''@;'; put 'put ''ZVllbixiaXRjb2luOmQuQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOmQuQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOmQuQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6ZC5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6ZC5DbHJTaGFwZUVtcGxveWVlLGZhY3Rvcnk6ZC5DbHJT''@;'; put 'put ''aGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJp''@;'; put 'put ''dHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChkLkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg''@;'; put 'put ''ICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0''@;'; put 'put ''aW9uKGosZCxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGQuQ29yZVNoYXBlcz1kLkNsclNoYXBlQXJyb3c9ZC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1kLkNsclNoYXBlRXllSGlkZT1kLkNsclNoYXBlRXllPWQuQ2xyU2hh''@;'; put 'put ''cGVFdmVudD1kLkNsclNoYXBlQ2FsZW5kYXI9ZC5DbHJTaGFwZUFuZ2xlRG91YmxlPWQuQ2xyU2hhcGVWaWV3Q29sdW1ucz1kLkNsclNoYXBlU2VhcmNoPWQuQ2xyU2hhcGVWbUJ1Zz1kLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1kLkNsclNoYXBlRmlsdGVyR3JpZD1kLkNsclNoYXBlRWxs''@;'; put 'put ''aXBzaXNWZXJ0aWNhbD1kLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPWQuQ2xyU2hhcGVDbG91ZD1kLkNsclNoYXBlSW1hZ2U9ZC5DbHJTaGFwZUJlbGw9ZC5DbHJTaGFwZUZvbGRlck9wZW49ZC5DbHJTaGFwZUZvbGRlcj1kLkNsclNoYXBlQW5nbGU9ZC5DbHJTaGFwZVVzZXI9ZC5DbHJT''@;'; put 'put ''aGFwZUJhcnM9ZC5DbHJTaGFwZUhlbHBJbmZvPWQuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9ZC5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9ZC5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1kLkNsclNoYXBlSW5mb1N0YW5kYXJkPWQuQ2xyU2hhcGVJbmZvQ2lyY2xlPWQuQ2xyU2hhcGVDaGVja0Np''@;'; put 'put ''cmNsZT1kLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9ZC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9ZC5DbHJTaGFwZVRpbWVzPWQuQ2xyU2hhcGVDaGVjaz1kLkNsclNoYXBlQ29nPWQuQ2xyU2hhcGVIb21lPWQuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgaD1TKAov''@;'; put 'put ''KiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbz1TKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJh''@;'; put 'put ''dG9yLnRzIik7ZC5DbHJTaGFwZVVua25vd25TdGF0dXM9KDAsby5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4xNi0zLjU2LDcuMjYsNy4yNiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0''@;'; put 'put ''LTEuNzIsNS4yOSw1LjI5LDAsMCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0zLjE5LDMuNzUtNS4zMiw0LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksZC5DbHJTaGFw''@;'; put 'put ''ZUhvbWU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy43MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSww''@;'; put 'put ''LDAsMCwxLjQxLTEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2''@;'; put 'put ''bC0yLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE5YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUs''@;'; put 'put ''MTVBMSwxLDAsMCwxLDMzLDE5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLGQuQ2xy''@;'; put 'put ''U2hhcGVDb2c9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0y''@;'; put 'put ''LjItNS01czIuMi01LDUtNWMyLjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42''@;'; put 'put ''LDAuMi0xLjQtMC4zLTEuOWwtMi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0wLjZsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJD''@;'; put 'put ''OS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZj''@;'; put 'put ''LTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEu''@;'; put 'put ''NCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0w''@;'; put 'put ''LjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTIt''@;'; put 'put ''MmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAu''@;'; put 'put ''NS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMuMy0xLjhsMiwybC0xLjgsMy4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMSwxOGMwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1''@;'; put 'put ''Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAu''@;'; put 'put ''MS0wLjNjLTAuOCwwLTEuNi0wLjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0x''@;'; put 'put ''LjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhs''@;'; put 'put ''My40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgt''@;'; put 'put ''MC40LTEuNi0wLjQtMi41bC0wLjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIs''@;'; put 'put ''NS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4z''@;'; put 'put ''LDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEu''@;'; put 'put ''OWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42''@;'; put 'put ''LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAu''@;'; put 'put ''OWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43''@;'; put 'put ''LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEsMi40LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3''@;'; put 'put ''LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEu''@;'; put 'put ''NCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wy''@;'; put 'put ''LjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzAuMiwwLDAuNSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4x''@;'; put 'put ''LDctN2MwLTAuOS0wLjItMS44LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgsMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44''@;'; put 'put ''LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCww''@;'; put 'put ''LDAtLjExLS43MkwyNy40MSw2LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42MiwwLDAsMC0yLjM2LTFsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFs''@;'; put 'put ''LTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAs''@;'; put 'put ''MCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhh''@;'; put 'put ''MTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42''@;'; put 'put ''MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcs''@;'; put 'put ''MTUuNzJsLTMuMzUtMWExMi4xMiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2LDExLjgyLDExLjgyLDAsMCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEu''@;'; put 'put ''NjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFh''@;'; put 'put ''MTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCww''@;'; put 'put ''LC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQz''@;'; put 'put ''LS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAs''@;'; put 'put ''MSwxLDE4LDEyLjVhNS41Myw1LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42Mi0uODYtMi44M0EuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEu''@;'; put 'put ''NjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNM''@;'; put 'put ''Ni4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEu''@;'; put 'put ''NjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwz''@;'; put 'put ''Mi41NywxNS43MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksZC5DbHJTaGFwZUNoZWNrPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjks''@;'; put 'put ''My4yOSwxNy4yN2ExLDEsMCwwLDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+JyksZC5DbHJTaGFwZVRpbWVzPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEs''@;'; put 'put ''MThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLGQuQ2xyU2hh''@;'; put 'put ''cGVFeGNsYW1hdGlvblRyaWFuZ2xlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4''@;'; put 'put ''LDIxLjMyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3''@;'; put 'put ''LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3''@;'; put 'put ''LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCww''@;'; put 'put ''LDEsMTgsMjYuMjVaIi8+JyksZC5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEw''@;'; put 'put ''LDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkEx''@;'; put 'put ''LjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcy''@;'; put 'put ''LDAsMCwxLDE4LDI1LjVaIi8+JyksZC5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEw''@;'; put 'put ''LDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2''@;'; put 'put ''Ljc3TDEzLDE3LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxkLkNsclNoYXBlSW5mb0NpcmNsZT0oMCxvLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiICBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0yLDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdI''@;'; put 'put ''MTZhMSwxLDAsMCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksZC5DbHJTaGFwZUluZm9TdGFuZGFyZD0oMCxvLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMSwyNUgxOVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4x''@;'; put 'put ''di05LjJIMTVhMS40LDEuNCwwLDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+JyksZC5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4''@;'; put 'put ''LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwx''@;'; put 'put ''LDAsMCwwLTEuNDEsMEwxNS40OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUyQTEsMSwwLDAsMCwyOCwxMi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2''@;'; put 'put ''LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40LDEuNCwwLDAsMSwyLTJsNS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLGQuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLG8uY2xySWNvblNW''@;'; put 'put ''RykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWEx''@;'; put 'put ''LDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4''@;'; put 'put ''LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYs''@;'; put 'put ''OC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLGQuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAsby5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEs''@;'; put 'put ''MSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAu''@;'; put 'put ''MDEwMjIxOTM5NiAxNy44ODUsMC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgxLDAuNjQ5MjY2MzU1IDIwLjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUz''@;'; put 'put ''NzMgMzQuNTM3MjE2MSwzMC40MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5ODQgMzEuNzcsMzIgTDQuMDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1Njkx''@;'; put 'put ''MjYgQzAuNjAzMDk4MjY1LDI5LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0MTE5NiBMMTUuMDYyMDc4MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkw''@;'; put 'put ''ODY1NTcsMjkuNDE1Njk3NyBDMy4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBMMzEuNzY5NzM0NCwzMCBDMzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMz''@;'; put 'put ''Njc1NyAzMy4wNDY3NTk1LDI4LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQyMDgxOTUgQzE4LjczOTQyMzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1''@;'; put 'put ''NTM4LDIuMjUxNzY2OTIgMTYuODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAs''@;'; put 'put ''MCwwLTUuNjYsMEwxLjE3LDI5LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwyLjgzLTQuNzVaTTE2LjYsMTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEu''@;'; put 'put ''OCwwLDAsMSwxOCwyOS44NVoiLz4nKSxkLkNsclNoYXBlSGVscEluZm89KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjM5LDI1LjQ1YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMu''@;'; put 'put ''NDkuNDYtMS42NiwzLjMyLTkuNDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAuNTgtLjY4LDIuNDktLjM0LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4y''@;'; put 'put ''Ni02LjQ3QTEsMSwwLDAsMCwyNS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUs''@;'; put 'put ''MCwxLDEtMi41LDIuNUEyLjUsMi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0u''@;'; put 'put ''MDcsMS42OGMtLjYxLDEuODYtMy42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIsMCwwLDAsMS4xNS0uNkMxOS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40''@;'; put 'put ''Ny45NC03LjczLDFhMSwxLDAsMCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEtMy41MSwzLjc3Yy0uMzMuMjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEu''@;'; put 'put ''OS4zNS0zLjc3LTIuNDgtMy4zMi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4zOSwzLjMzLS40MmEuODguODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCww''@;'; put 'put ''LDEuMTgsMyw1LDUsMCwwLDAsMy4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0zLjY2LDYuNDYtNS43NUExLDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVCYXJzPSgw''@;'; put 'put ''LG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMjlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0zMiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSww''@;'; put 'put ''LDJaIi8+JyksZC5DbHJTaGFwZVVzZXI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEsMC03LTdBNyw3LDAsMCwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUu''@;'; put 'put ''MTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUsNSwwLDEsMSwxLjI0LTguNDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgs''@;'; put 'put ''MTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAs''@;'; put 'put ''MC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwx''@;'; put 'put ''LjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs''@;'; put 'put ''NywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEu''@;'; put 'put ''MTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCww''@;'; put 'put ''LDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiAvPicpLGQuQ2xyU2hhcGVBbmdsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDku''@;'; put 'put ''MzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+JyksZC5DbHJTaGFwZUZvbGRlcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIs''@;'; put 'put ''MiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0wLDIwSDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4x''@;'; put 'put ''MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYx''@;'; put 'put ''M2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMs''@;'; put 'put ''MTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEy''@;'; put 'put ''LDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwx''@;'; put 'put ''MVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcu''@;'; put 'put ''NSwwLDAsMSwyMy4xMyw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxkLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIs''@;'; put 'put ''MCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2Ljls''@;'; put 'put ''My44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNI''@;'; put 'put ''MTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3''@;'; put 'put ''VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUs''@;'; put 'put ''MS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNyww''@;'; put 'put ''LDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEs''@;'; put 'put ''MCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIs''@;'; put 'put ''MTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3''@;'; put 'put ''YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAs''@;'; put 'put ''MCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjMxLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwx''@;'; put 'put ''LDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIvPicpLGQuQ2xyU2hhcGVCZWxsPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEw''@;'; put 'put ''LjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYx''@;'; put 'put ''LjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pNNS4xMywyOC45NGExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRh''@;'; put 'put ''MTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4z''@;'; put 'put ''MkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42''@;'; put 'put ''NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1''@;'; put 'put ''LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDguODksOC44OSwwLDAsMSwuNCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAs''@;'; put 'put ''MCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMxYTguNjEsOC42MSwwLDAsMSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWEx''@;'; put 'put ''LjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCww''@;'; put 'put ''LDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRW''@;'; put 'put ''My4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCwwLDAsNS4yNSwwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgs''@;'; put 'put ''MzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQt''@;'; put 'put ''LjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywx''@;'; put 'put ''LjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksZC5DbHJTaGFwZUltYWdlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42''@;'; put 'put ''QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45Miwy''@;'; put 'put ''Mi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEy''@;'; put 'put ''LjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAs''@;'; put 'put ''MCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4''@;'; put 'put ''LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGQuQ2xyU2hhcGVDbG91ZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMsMSwyOC4xOSwxLDIzLjFhMTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5''@;'; put 'put ''LDAsMCwxLDYsOEMzNSwyOS4xLDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04LjE5LDhsMCwuODctLjg2LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2''@;'; put 'put ''LjMxLDAsMCwwLTUuMzctNi4yNmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmEx''@;'; put 'put ''MC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQsOCw4LDAsMCwxLS4zLDQuMTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44''@;'; put 'put ''NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDguMjQsMCwwLDEsOC4xOS04QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMs''@;'; put 'put ''MCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4LDguMjgsMCwwLDEtLjM3LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2Mt''@;'; put 'put ''My44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2LDguMTYsMCwwLDEsMjEsNi40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlI''@;'; put 'put ''MjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44''@;'; put 'put ''NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5''@;'; put 'put ''LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCww''@;'; put 'put ''LDAsMS02LjYtOC41OEExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwx''@;'; put 'put ''Ni42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAsMCwwLC4yLTEuMjZoLTdBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjgu''@;'; put 'put ''MTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksZC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxv''@;'; put 'put ''LmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksZC5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9KDAsby5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGQuQ2xyU2hhcGVGaWx0''@;'; put 'put ''ZXJHcmlkPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwx''@;'; put 'put ''VjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCww''@;'; put 'put ''LC4xNS0uMzVWMTFaIi8+JyksZC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43''@;'; put 'put ''OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEy''@;'; put 'put ''LTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLGQuQ2xyU2hhcGVWbUJ1Zz0oMCxvLmNsckljb25TVkcpKCc8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0''@;'; put 'put ''aCBkPSJNMy43OSwxNC44M2ExLjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5bDIuNDcsNS40Yy4zOS44NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2''@;'; put 'put ''NC42MWExLjE1LDEuMTUsMCwwLDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIy''@;'; put 'put ''LTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIuNjksMi42OSwwLDAsMC0yLjc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4y''@;'; put 'put ''MmEyLjgyLDIuODIsMCwwLDAtMi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wtMi00LjgiIGZpbGw9IiNmZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCww''@;'; put 'put ''LDAsMC0xLjE1LS44N2gtLjFhMS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUsMS4xNSwwLDAsMC0xLjExLS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEu''@;'; put 'put ''MjQsMS4yNCwwLDAsMCwxLjItLjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEuMjcsMS4yNywwLDAsMCwzMiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4n''@;'; put 'put ''KSxkLkNsclNoYXBlU2VhcmNoPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAs''@;'; put 'put ''MSwwLDEzLDEzLDEzLDEzLDAsMCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4n''@;'; put 'put ''KSxkLkNsclNoYXBlVmlld0NvbHVtbnM9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEs''@;'; put 'put ''NVpNMTMsMjlINVY3aDhabTEwLDBIMTVWN2g4WiIvPicpLGQuQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43''@;'; put 'put ''MSwxOS4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlM''@;'; put 'put ''MTgsMTkuODMsNy43MSwzMC4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAsMSwyOSwzMC40MVoiLz4nKSxkLkNsclNoYXBlQ2FsZW5kYXI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIg''@;'; put 'put ''eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5''@;'; put 'put ''PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNB''@;'; put 'put ''MSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5''@;'; put 'put ''PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTctLWJhZGdlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIg''@;'; put 'put ''eD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgs''@;'; put 'put ''MS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YWxlcnRlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0i''@;'; put 'put ''MTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlW''@;'; put 'put ''NmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYy''@;'; put 'put ''NGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEs''@;'; put 'put ''MCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs''@;'; put 'put ''MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0w''@;'; put 'put ''LTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTks''@;'; put 'put ''OS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVI''@;'; put 'put ''OFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptNiw1SDI2VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksZC5DbHJTaGFwZUV2ZW50PSgwLG8uY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYsMTAuODEsMjAuNWExLDEsMCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2''@;'; put 'put ''LjIyLDE1LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEw''@;'; put 'put ''YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwx''@;'; put 'put ''LDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4x''@;'; put 'put ''NywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4y''@;'; put 'put ''OSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCww''@;'; put 'put ''LDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIs''@;'; put 'put ''MFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43''@;'; put 'put ''OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4''@;'; put 'put ''LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNW''@;'; put 'put ''OUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45''@;'; put 'put ''NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIy''@;'; put 'put ''LjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42''@;'; put 'put ''Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxkLkNsclNoYXBlRXllPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIz''@;'; put 'put ''LDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOSwxMS4xN0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0''@;'; put 'put ''Ljg3LDQuODcsMCwwLDEsMTguMDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4y''@;'; put 'put ''Ni40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2''@;'; put 'put ''LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksZC5DbHJTaGFwZUV5''@;'; put 'put ''ZUhpZGU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYyLDE4YTYuODYsNi44NiwwLDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAs''@;'; put 'put ''MCwxLDIzLjYyLDE4YTQuNzksNC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01''@;'; put 'put ''LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUs''@;'; put 'put ''MS43NS0xLjUtMjYtMjZabTkuNzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQuODcsMCwwLDEsMTMuOSwxOCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0''@;'; put 'put ''LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43''@;'; put 'put ''OSwwLDAsMCwxNiwxMS42bDguOCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwxOC4zNywxMS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIz''@;'; put 'put ''LTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUt''@;'; put 'put ''NmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEw''@;'; put 'put ''YTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEs''@;'; put 'put ''Ni4xMi02LjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksZC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcs''@;'; put 'put ''MCwwLDAsMi4zNiwyLjQ0aDBMMjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCww''@;'; put 'put ''LDAsMy40LDBWNi43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVBcnJvdz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEs''@;'; put 'put ''MCw5Ljc1LDE3TDE3LDkuODFWMjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGQuQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpkLkNsclNoYXBlVW5r''@;'; put 'put ''bm93blN0YXR1cyxob21lOmQuQ2xyU2hhcGVIb21lLGNvZzpkLkNsclNoYXBlQ29nLGNoZWNrOmQuQ2xyU2hhcGVDaGVjayx0aW1lczpkLkNsclNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpkLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xl''@;'; put 'put ''IjpkLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6ZC5DbHJTaGFwZUNoZWNrQ2lyY2xlLCJpbmZvLWNpcmNsZSI6ZC5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOmQuQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOmQuQ2xy''@;'; put 'put ''U2hhcGVTdWNjZXNzU3RhbmRhcmQsImVycm9yLXN0YW5kYXJkIjpkLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2FybmluZy1zdGFuZGFyZCI6ZC5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpkLkNsclNoYXBlSGVscEluZm8sYmFyczpkLkNsclNoYXBlQmFycyx1c2VyOmQu''@;'; put 'put ''Q2xyU2hhcGVVc2VyLGFuZ2xlOmQuQ2xyU2hhcGVBbmdsZSxmb2xkZXI6ZC5DbHJTaGFwZUZvbGRlciwiZm9sZGVyLW9wZW4iOmQuQ2xyU2hhcGVGb2xkZXJPcGVuLGJlbGw6ZC5DbHJTaGFwZUJlbGwsaW1hZ2U6ZC5DbHJTaGFwZUltYWdlLGNsb3VkOmQuQ2xyU2hhcGVDbG91ZCwiZWxsaXBz''@;'; put 'put ''aXMtaG9yaXpvbnRhbCI6ZC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOmQuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6ZC5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6ZC5DbHJTaGFwZUZpbHRlckdy''@;'; put 'put ''aWRDaXJjbGUsInZtLWJ1ZyI6ZC5DbHJTaGFwZVZtQnVnLHNlYXJjaDpkLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNvbHVtbnMiOmQuQ2xyU2hhcGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpkLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6ZC5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50''@;'; put 'put ''OmQuQ2xyU2hhcGVFdmVudCxleWU6ZC5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOmQuQ2xyU2hhcGVFeWVIaWRlLCJzdGVwLWZvcndhcmQtMiI6ZC5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpkLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVTaGFwZXMsImhv''@;'; put 'put ''dXNlIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywic2V0dGluZ3MiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkNvcmVT''@;'; put 'put ''aGFwZXMsInN1Y2Nlc3MiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywiY2xvc2UiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGQuQ29yZVNoYXBlcywid2FybmluZyIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Db3JlU2hhcGVzLCJlcnJvciIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkNvcmVTaGFw''@;'; put 'put ''ZXNbImV4Y2xhbWF0aW9uLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywiaW5mbyIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Db3JlU2hhcGVzLCJtZW51Iiwo''@;'; put 'put ''MCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywiYXZhdGFyIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywi''@;'; put 'put ''Y2FyZXQiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuQ29yZVNoYXBlcywiZGlyZWN0b3J5IiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''ZC5Db3JlU2hhcGVzLCJub3RpZmljYXRpb24iLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Db3JlU2hhcGVzLmJlbGwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJs''@;'; put 'put ''ZSJdKSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hh''@;'; put 'put ''cGVzL2Vzc2VudGlhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosZCxTKXsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGQuQ2xyU2hhcGVMb2dvdXQ9ZC5DbHJTaGFwZUxvZ2luPWQuQ2xyU2hhcGVIZWxwPWQuQ2xyU2hhcGVDb3B5PWQuQ2xyU2hhcGVDaGlsZEFycm93PWQuQ2xyU2hhcGVDaXJjbGVBcnJvdz1kLkNsclNoYXBlQWxh''@;'; put 'put ''cm1DbG9jaz1kLkNsclNoYXBlQ2xvY2s9ZC5DbHJTaGFwZUhpc3Rvcnk9ZC5DbHJTaGFwZVRhZ3M9ZC5DbHJTaGFwZVRhZz1kLkNsclNoYXBlVHJhc2g9ZC5DbHJTaGFwZVRpbWVzQ2lyY2xlPWQuQ2xyU2hhcGVCYW49ZC5DbHJTaGFwZVBsdXNDaXJjbGU9ZC5DbHJTaGFwZU1pbnVzQ2lyY2xl''@;'; put 'put ''PWQuQ2xyU2hhcGVNaW51cz1kLkNsclNoYXBlUGx1cz1kLkNsclNoYXBlRmlsZT1kLkNsclNoYXBlUGluPWQuQ2xyU2hhcGVGaWx0ZXI9ZC5DbHJTaGFwZVBvcE91dD1kLkNsclNoYXBlVXNlcnM9ZC5DbHJTaGFwZVVubG9jaz1kLkNsclNoYXBlTG9jaz1kLkNsclNoYXBlVXBsb2FkPWQuQ2xy''@;'; put 'put ''U2hhcGVEb3dubG9hZD1kLkNsclNoYXBlTGlnaHRidWxiPWQuQ2xyU2hhcGVWaWV3Q2FyZHM9ZC5DbHJTaGFwZVZpZXdMaXN0PWQuQ2xyU2hhcGVTeW5jPWQuQ2xyU2hhcGVSZWZyZXNoPWQuQ2xyU2hhcGVOb3RlPWQuQ2xyU2hhcGVQZW5jaWw9ZC5DbHJTaGFwZVRoZXJtb21ldGVyPWQuQ2xy''@;'; put 'put ''U2hhcGVCdWc9ZC5DbHJTaGFwZVNjaXNzb3JzPWQuQ2xyU2hhcGVBc3Rlcmlzaz1kLkNsclNoYXBlQm9vaz1kLkNsclNoYXBlT2JqZWN0cz1kLkNsclNoYXBlUmVzaXplPWQuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9ZC5DbHJTaGFwZUN1cnNvckhhbmQ9ZC5DbHJTaGFwZUN1cnNvckFycm93''@;'; put 'put ''PWQuQ2xyU2hhcGVHcmlkVmlldz1kLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249ZC5DbHJTaGFwZU5ldz1kLkNsclNoYXBlQWxhcm1PZmY9ZC5DbHJTaGFwZVBpbmJvYXJkPWQuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxkLkNsclNoYXBlQ2xvbmU9ZC5DbHJTaGFwZUN1cnNvck1vdmU9ZC5D''@;'; put 'put ''bHJTaGFwZVdhbmQ9ZC5DbHJTaGFwZVN1bj1kLkNsclNoYXBlTW9vbj1kLkNsclNoYXBlRmlsdGVyMj1kLkNsclNoYXBlRHJhZ0hhbmRsZT1kLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPWQuQ2xyU2hhcGVDb2xvclBpY2tlcj1kLkNsclNoYXBlQnJpZWZjYXNlPWQuQ2xyU2hhcGVFeHBhbmRD''@;'; put 'put ''YXJkPWQuQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9ZC5DbHJTaGFwZVNvcnRCeT1kLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9ZC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPWQuQ2xyU2hhcGVTaHJpbms9ZC5DbHJTaGFwZVBhcGVyY2xpcD1kLkNsclNoYXBlRmlsZUdyb3VwPWQuQ2xyU2hhcGVSZXBl''@;'; put 'put ''YXQ9ZC5DbHJTaGFwZUlkQmFkZ2U9ZC5DbHJTaGFwZUJhbGFuY2U9ZC5DbHJTaGFwZU9yZ2FuaXphdGlvbj1kLkNsclNoYXBlTm9BY2Nlc3M9ZC5DbHJTaGFwZUhvdXJnbGFzcz1kLkNsclNoYXBlRmxhbWU9ZC5DbHJTaGFwZVRhcmdldD1kLkNsclNoYXBlQnVsbHNleWU9ZC5DbHJTaGFwZVdy''@;'; put 'put ''ZW5jaD1kLkNsclNoYXBlQm9sdD1kLkNsclNoYXBlTGlicmFyeT1kLkNsclNoYXBlS2V5PWQuQ2xyU2hhcGVab29tT3V0PWQuQ2xyU2hhcGVab29tSW49ZC5DbHJTaGFwZVdpbmRvd1Jlc3RvcmU9ZC5DbHJTaGFwZVdpbmRvd01pbj1kLkNsclNoYXBlV2luZG93TWF4PWQuQ2xyU2hhcGVXaW5k''@;'; put 'put ''b3dDbG9zZT1kLkNsclNoYXBlVG9vbHM9ZC5DbHJTaGFwZVN3aXRjaD1kLkNsclNoYXBlVHdvV2F5QXJyb3dzPWQuQ2xyU2hhcGVGaWxlU2V0dGluZ3M9ZC5DbHJTaGFwZVNjcm9sbD1kLkNsclNoYXBlVW5kbz1kLkNsclNoYXBlUmVkbz1kLkNsclNoYXBlTGlzdD1kLkNsclNoYXBlRmlyZXdh''@;'; put 'put ''bGw9ZC5DbHJTaGFwZUNsaXBib2FyZD1kLkNsclNoYXBlU2xpZGVyPWQuQ2xyU2hhcGVXb3JsZD1kLkNsclNoYXBlUHJpbnRlcj12b2lkIDAsZC5Fc3NlbnRpYWxTaGFwZXM9ZC5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1kLkNsclNoYXBlRmlyc3RBaWQ9ZC5DbHJTaGFwZUJldGE9ZC5DbHJTaGFw''@;'; put 'put ''ZURvdENpcmNsZT1kLkNsclNoYXBlQ2lyY2xlPWQuQ2xyU2hhcGVDcm9zc2hhaXJzPWQuQ2xyU2hhcGVWb2x1bWU9ZC5DbHJTaGFwZVRhYmxlPWQuQ2xyU2hhcGVTbm93Zmxha2U9ZC5DbHJTaGFwZUZ1ZWw9ZC5DbHJTaGFwZUZvcm09ZC5DbHJTaGFwZUZpc2g9ZC5DbHJTaGFwZVRyZWU9ZC5D''@;'; put 'put ''bHJTaGFwZVJlY3ljbGU9ZC5DbHJTaGFwZUZpbHRlck9mZj1kLkNsclNoYXBlRmlsZVppcD1kLkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49ZC5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPWQuQ2xyU2hhcGVUcmVlVmlldz1kLkNsclNoYXBlUG9ydHJhaXQ9ZC5DbHJTaGFwZVBhc3RlPWQuQ2xyU2hh''@;'; put 'put ''cGVMYW5kc2NhcGU9ZC5DbHJTaGFwZUVyYXNlcj1kLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1kLkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIGg9UygKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNv''@;'; put 'put ''bmZpZy50cyIpLG89UygKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLEk9UygKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBl''@;'; put 'put ''cy50cyIpO2QuQ2xyU2hhcGVBZGRUZXh0PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEs''@;'; put 'put ''MSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxkLkNsclNoYXBlUGluYm9hcmQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMw''@;'; put 'put ''LDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40''@;'; put 'put ''MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45Miwx''@;'; put 'put ''LjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTgu''@;'; put 'put ''NzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIu''@;'; put 'put ''NzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLGQuQ2xyU2hhcGVBbGFybU9mZj0oMCxvLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40Miwz''@;'; put 'put ''LjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQy''@;'; put 'put ''LDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2''@;'; put 'put ''LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcu''@;'; put 'put ''NzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4z''@;'; put 'put ''Ny0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMs''@;'; put 'put ''NS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZs''@;'; put 'put ''Mi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcs''@;'; put 'put ''Ni4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicp''@;'; put 'put ''LGQuQ2xyU2hhcGVOZXc9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEu''@;'; put 'put ''OTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9s''@;'; put 'put ''eWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcu''@;'; put 'put ''NTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAy''@;'; put 'put ''MC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYx''@;'; put 'put ''NUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYs''@;'; put 'put ''NC40M0wyNS44NSwxNWgxLjIzWiIvPicpLGQuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwx''@;'; put 'put ''NGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0u''@;'; put 'put ''MTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0i''@;'; put 'put ''MS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAt''@;'; put 'put ''Ni43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwx''@;'; put 'put ''LDE4LjM0LDI2LjQ3WiIvPicpLGQuQ2xyU2hhcGVHcmlkVmlldz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEy''@;'; put 'put ''LDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAs''@;'; put 'put ''NFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYy''@;'; put 'put ''Mmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLGQuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0z''@;'; put 'put ''LjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIu''@;'; put 'put ''Mkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCww''@;'; put 'put ''LDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLGQuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43''@;'; put 'put ''YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcs''@;'; put 'put ''MS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMs''@;'; put 'put ''Ny4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQs''@;'; put 'put ''MS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjks''@;'; put 'put ''MTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4''@;'; put 'put ''LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEw''@;'; put 'put ''LjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksZC5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxvLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4z''@;'; put 'put ''LDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAg''@;'; put 'put ''IGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAt''@;'; put 'put ''My4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4y''@;'; put 'put ''TDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0x''@;'; put 'put ''LjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAg''@;'; put 'put ''ICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUs''@;'; put 'put ''MC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksZC5DbHJTaGFwZVJlc2l6ZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwx''@;'; put 'put ''LDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjku''@;'; put 'put ''NTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksZC5DbHJTaGFwZU9iamVjdHM9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45''@;'; put 'put ''YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwz''@;'; put 'put ''Miw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2''@;'; put 'put ''LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkEx''@;'; put 'put ''LDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlI''@;'; put 'put ''MzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxkLkNsclNoYXBlQm9vaz0oMCxvLmNsckljb25TVkcp''@;'; put 'put ''KCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5''@;'; put 'put ''Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAt''@;'; put 'put ''LjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIg''@;'; put 'put ''eT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2''@;'; put 'put ''QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxkLkNsclNoYXBlQXN0ZXJpc2s9''@;'; put 'put ''KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCww''@;'; put 'put ''LDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1''@;'; put 'put ''YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5''@;'; put 'put ''LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjEx''@;'; put 'put ''LDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1''@;'; put 'put ''LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksZC5DbHJTaGFwZVNjaXNzb3JzPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgs''@;'; put 'put ''MCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJs''@;'; put 'put ''Mi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45Miww''@;'; put 'put ''LDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQu''@;'; put 'put ''MywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksZC5DbHJTaGFwZUJ1Zz0oMCxvLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0i''@;'; put 'put ''MTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0z''@;'; put 'put ''LDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5''@;'; put 'put ''LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0z''@;'; put 'put ''LjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEs''@;'; put 'put ''NS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIu''@;'; put 'put ''MjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwy''@;'; put 'put ''LjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4y''@;'; put 'put ''OSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42''@;'; put 'put ''Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAs''@;'; put 'put ''MCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40Myww''@;'; put 'put ''QTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4y''@;'; put 'put ''Ni0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44''@;'; put 'put ''NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLGQuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxvLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYs''@;'; put 'put ''MTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEs''@;'; put 'put ''OCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxkLkNsclNoYXBlUGVuY2lsPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjky''@;'; put 'put ''LDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjks''@;'; put 'put ''MTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMy''@;'; put 'put ''LDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIu''@;'; put 'put ''MDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLGQuQ2xyU2hhcGVOb3RlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAs''@;'; put 'put ''MCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcs''@;'; put 'put ''MS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVS''@;'; put 'put ''ZWZyZXNoPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQx''@;'; put 'put ''LDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLGQuQ2xyU2hhcGVTeW5jPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQs''@;'; put 'put ''MTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4''@;'; put 'put ''LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksZC5DbHJT''@;'; put 'put ''aGFwZVZpZXdMaXN0PSgwLG8uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIg''@;'; put 'put ''ZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLGQuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEy''@;'; put 'put ''LDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAs''@;'; put 'put ''MCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEs''@;'; put 'put ''Mi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDIt''@;'; put 'put ''MkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLGQuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2''@;'; put 'put ''LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEz''@;'; put 'put ''LjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwy''@;'; put 'put ''LTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44Ljgs''@;'; put 'put ''MCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVI''@;'; put 'put ''MTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43Miwx''@;'; put 'put ''NC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwu''@;'; put 'put ''MTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0Ex''@;'; put 'put ''Ni4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMu''@;'; put 'put ''NzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCww''@;'; put 'put ''LDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44Ljgs''@;'; put 'put ''MCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAs''@;'; put 'put ''MSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCww''@;'; put 'put ''LDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwx''@;'; put 'put ''LDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42''@;'; put 'put ''OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4z''@;'; put 'put ''YTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0Eu''@;'; put 'put ''OC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxkLkNsclNoYXBlRG93bmxvYWQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40''@;'; put 'put ''MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+''@;'; put 'put ''JyksZC5DbHJTaGFwZVVwbG9hZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSww''@;'; put 'put ''LjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42''@;'; put 'put ''LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGQuQ2xyU2hhcGVMb2NrPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBk''@;'; put 'put ''PSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3''@;'; put 'put ''SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksZC5DbHJTaGFwZVVubG9jaz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4y''@;'; put 'put ''LDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRh''@;'; put 'put ''Ni4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxkLkNsclNoYXBlVXNlcnM9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3Ljks''@;'; put 'put ''OS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFj''@;'; put 'put ''MC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4z''@;'; put 'put ''LTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEs''@;'; put 'put ''MC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3''@;'; put 'put ''LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40''@;'; put 'put ''TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYu''@;'; put 'put ''NTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4y''@;'; put 'put ''OC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJW''@;'; put 'put ''MTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42''@;'; put 'put ''MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQu''@;'; put 'put ''NDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3''@;'; put 'put ''aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTks''@;'; put 'put ''MCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYs''@;'; put 'put ''MTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYx''@;'; put 'put ''LDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0''@;'; put 'put ''LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAt''@;'; put 'put ''MS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0''@;'; put 'put ''LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTgu''@;'; put 'put ''NjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4y''@;'; put 'put ''NS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEt''@;'; put 'put ''MiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4y''@;'; put 'put ''LDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjks''@;'; put 'put ''OS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcs''@;'; put 'put ''MCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4x''@;'; put 'put ''MSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSww''@;'; put 'put ''LDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxkLkNsclNoYXBlUG9wT3V0PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwx''@;'; put 'put ''LDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxkLkNsclNoYXBlRmlsdGVyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzks''@;'; put 'put ''MCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMs''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAs''@;'; put 'put ''MCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0''@;'; put 'put ''LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZVBpbj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMz''@;'; put 'put ''LDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUy''@;'; put 'put ''LDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcu''@;'; put 'put ''MTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwx''@;'; put 'put ''LDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksZC5DbHJTaGFwZUZpbGU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0''@;'; put 'put ''SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcu''@;'; put 'put ''ODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwy''@;'; put 'put ''MS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIx''@;'; put 'put ''LDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNB''@;'; put 'put ''MS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIs''@;'; put 'put ''MC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJj''@;'; put 'put ''MC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLGQuQ2xyU2hhcGVQbHVzPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxkLkNsclNoYXBlTWludXM9KDAsby5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGEx''@;'; put 'put ''LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSww''@;'; put 'put ''LDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdh''@;'; put 'put ''MSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwz''@;'; put 'put ''MiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSww''@;'; put 'put ''LDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGQuQ2xyU2hhcGVCYW49KDAsby5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0''@;'; put 'put ''LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLGQuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEs''@;'; put 'put ''MCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEs''@;'; put 'put ''Mi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLGQuQ2xyU2hhcGVUcmFzaD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkz''@;'; put 'put ''LDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCww''@;'; put 'put ''LDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02''@;'; put 'put ''LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxkLkNsclNoYXBlVGFnPSgwLG8uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwz''@;'; put 'put ''MS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIs''@;'; put 'put ''NEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAu''@;'; put 'put ''NjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEy''@;'; put 'put ''LDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDku''@;'; put 'put ''OS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5''@;'; put 'put ''LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGQuQ2xyU2hhcGVUYWdzPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1''@;'; put 'put ''LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYx''@;'; put 'put ''QTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcs''@;'; put 'put ''MjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5''@;'; put 'put ''LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1''@;'; put 'put ''LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4z''@;'; put 'put ''NkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAu''@;'; put 'put ''ODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40Mywx''@;'; put 'put ''NS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIx''@;'; put 'put ''YTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45''@;'; put 'put ''M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAs''@;'; put 'put ''LjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEt''@;'; put 'put ''OS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAs''@;'; put 'put ''MS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYu''@;'; put 'put ''NjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksZC5DbHJTaGFwZUhpc3Rvcnk9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4''@;'; put 'put ''LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2''@;'; put 'put ''LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+JyksZC5DbHJTaGFwZUNsb2NrPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwx''@;'; put 'put ''Mi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwx''@;'; put 'put ''LDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40''@;'; put 'put ''Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0Ex''@;'; put 'put ''MS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxkLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUu''@;'; put 'put ''NzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAs''@;'; put 'put ''MCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3''@;'; put 'put ''Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2''@;'; put 'put ''LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdM''@;'; put 'put ''NS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFh''@;'; put 'put ''MSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSww''@;'; put 'put ''LDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcs''@;'; put 'put ''MCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODks''@;'; put 'put ''MTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwy''@;'; put 'put ''Ljc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcs''@;'; put 'put ''MCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEu''@;'; put 'put ''OS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCww''@;'; put 'put ''LDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmEx''@;'; put 'put ''My45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43Myww''@;'; put 'put ''LDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQy''@;'; put 'put ''LDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhs''@;'; put 'put ''Mi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGQuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQx''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCww''@;'; put 'put ''LDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksZC5DbHJTaGFwZUNoaWxkQXJyb3c9KDAsby5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwu''@;'; put 'put ''NzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZUNvcHk9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlB''@;'; put 'put ''MS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUEx''@;'; put 'put ''LjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41''@;'; put 'put ''NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5''@;'; put 'put ''PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxkLkNsclNoYXBlSGVscD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAs''@;'; put 'put ''MCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAs''@;'; put 'put ''MCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMt''@;'; put 'put ''LjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4w''@;'; put 'put ''OCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0x''@;'; put 'put ''VjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2''@;'; put 'put ''LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42''@;'; put 'put ''NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0z''@;'; put 'put ''LjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEs''@;'; put 'put ''MTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43''@;'; put 'put ''MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4z''@;'; put 'put ''MSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiLz4nKSxkLkNsclNoYXBlTG9naW49KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSww''@;'; put 'put ''LDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWEx''@;'; put 'put ''LDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCww''@;'; put 'put ''LTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVMb2dvdXQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAs''@;'; put 'put ''MCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2Ey''@;'; put 'put ''LDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEu''@;'; put 'put ''NDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxkLkNsclNoYXBlUHJpbnRlcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlW''@;'; put 'put ''OUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRI''@;'; put 'put ''Ni45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCww''@;'; put 'put ''LDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3''@;'; put 'put ''LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZI''@;'; put 'put ''MTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5''@;'; put 'put ''SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4''@;'; put 'put ''SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGQuQ2xyU2hhcGVXb3JsZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42''@;'; put 'put ''SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYu''@;'; put 'put ''NiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcu''@;'; put 'put ''MTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4''@;'; put 'put ''LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCww''@;'; put 'put ''SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQu''@;'; put 'put ''MDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAu''@;'; put 'put ''MjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1''@;'; put 'put ''Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCww''@;'; put 'put ''LDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4y''@;'; put 'put ''YTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40''@;'; put 'put ''OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEs''@;'; put 'put ''MjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgs''@;'; put 'put ''MkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0u''@;'; put 'put ''ODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCww''@;'; put 'put ''LDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2''@;'; put 'put ''LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIs''@;'; put 'put ''MjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVI''@;'; put 'put ''MTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAu''@;'; put 'put ''NTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4w''@;'; put 'put ''NywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45''@;'; put 'put ''NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgx''@;'; put 'put ''aDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40''@;'; put 'put ''LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4w''@;'; put 'put ''NiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGQuQ2xyU2hhcGVTbGlkZXI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQs''@;'; put 'put ''NCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiww''@;'; put 'put ''djYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGQuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4y''@;'; put 'put ''OUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQs''@;'; put 'put ''MCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3''@;'; put 'put ''LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl''@;'; put 'put ''ZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcu''@;'; put 'put ''NTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwz''@;'; put 'put ''NEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFW''@;'; put 'put ''MjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMx''@;'; put 'put ''YTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCww''@;'; put 'put ''LDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksZC5DbHJTaGFwZUZpcmV3YWxsPSgwLG8uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgx''@;'; put 'put ''OC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgs''@;'; put 'put ''MTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0y''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0''@;'; put 'put ''LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJa''@;'; put 'put ''bTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNB''@;'; put 'put ''My42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZI''@;'; put 'put ''NFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiAvPicpLGQuQ2xyU2hhcGVMaXN0PSgwLG8uY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lk''@;'; put 'put ''dGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcu''@;'; put 'put ''NDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlpt''@;'; put 'put ''MC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgx''@;'; put 'put ''MVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGQuQ2xyU2hhcGVSZWRvPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQx''@;'; put 'put ''LDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVVbmRvPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCww''@;'; put 'put ''LDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVTY3JvbGw9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0''@;'; put 'put ''LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUs''@;'; put 'put ''Mi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEs''@;'; put 'put ''MTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs''@;'; put 'put ''NC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5''@;'; put 'put ''LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUu''@;'; put 'put ''NTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0y''@;'; put 'put ''LjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41''@;'; put 'put ''LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41''@;'; put 'put ''LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3''@;'; put 'put ''LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgy''@;'; put 'put ''djUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxkLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVj''@;'; put 'put ''LS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJh''@;'; put 'put ''MS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3''@;'; put 'put ''YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4x''@;'; put 'put ''MS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEu''@;'; put 'put ''MzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTIt''@;'; put 'put ''LjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEs''@;'; put 'put ''LjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4w''@;'; put 'put ''OCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40''@;'; put 'put ''NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwx''@;'; put 'put ''LjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwx''@;'; put 'put ''LjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2''@;'; put 'put ''LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAs''@;'; put 'put ''LjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3''@;'; put 'put ''LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjEx''@;'; put 'put ''LjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0x''@;'; put 'put ''LDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0u''@;'; put 'put ''MTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0u''@;'; put 'put ''MDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEu''@;'; put 'put ''MTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2Ex''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEu''@;'; put 'put ''NDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4''@;'; put 'put ''bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42''@;'; put 'put ''MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41''@;'; put 'put ''My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgs''@;'; put 'put ''MCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4x''@;'; put 'put ''MiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMx''@;'; put 'put ''SDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEu''@;'; put 'put ''NTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40''@;'; put 'put ''N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAt''@;'; put 'put ''LjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1''@;'; put 'put ''bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJh''@;'; put 'put ''Nyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIz''@;'; put 'put ''LjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiww''@;'; put 'put ''LDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAs''@;'; put 'put ''MCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYx''@;'; put 'put ''LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wx''@;'; put 'put ''Ljg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMz''@;'; put 'put ''LDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAs''@;'; put 'put ''MCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYs''@;'; put 'put ''Ny4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJh''@;'; put 'put ''Nyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCww''@;'; put 'put ''LDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4''@;'; put 'put ''LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4x''@;'; put 'put ''OUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0''@;'; put 'put ''LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksZC5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlU3dpdGNoPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9''@;'; put 'put ''IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRh''@;'; put 'put ''MSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGQuQ2xyU2hhcGVUb29scz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwx''@;'; put 'put ''LDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIu''@;'; put 'put ''MzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgx''@;'; put 'put ''My44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxkLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCww''@;'; put 'put ''LTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlV2luZG93TWF4PSgwLG8u''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+JyksZC5DbHJTaGFwZVdpbmRvd01pbj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlV2luZG93UmVzdG9y''@;'; put 'put ''ZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZVpvb21J''@;'; put 'put ''bj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGQuQ2xyU2hhcGVab29tT3V0PSgwLG8u''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxkLkNsclNoYXBlS2V5PSgwLG8uY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVp''@;'; put 'put ''Z2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSww''@;'; put 'put ''LDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2''@;'; put 'put ''LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0y''@;'; put 'put ''LjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAs''@;'; put 'put ''MCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAs''@;'; put 'put ''Ny4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAs''@;'; put 'put ''MCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1''@;'; put 'put ''LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRh''@;'; put 'put ''MSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCww''@;'; put 'put ''LDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDds''@;'; put 'put ''NS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40''@;'; put 'put ''LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxkLkNsclNoYXBlTGlicmFyeT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMs''@;'; put 'put ''MjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIx''@;'; put 'put ''YTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43''@;'; put 'put ''NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZUJvbHQ9KDAsby5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4''@;'; put 'put ''QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0''@;'; put 'put ''Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVXcmVuY2g9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjEx''@;'; put 'put ''LDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCww''@;'; put 'put ''LDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEu''@;'; put 'put ''MDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZUJ1''@;'; put 'put ''bGxzZXllPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2Eu''@;'; put 'put ''NS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQs''@;'; put 'put ''NCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40''@;'; put 'put ''OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwx''@;'; put 'put ''Mi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41''@;'; put 'put ''MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxkLkNsclNoYXBlVGFyZ2V0PSgwLG8uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJB''@;'; put 'put ''MTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgs''@;'; put 'put ''MCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGQuQ2xyU2hhcGVGbGFtZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40''@;'; put 'put ''OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCww''@;'; put 'put ''LDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5''@;'; put 'put ''LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSww''@;'; put 'put ''LDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQt''@;'; put 'put ''MTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywy''@;'; put 'put ''Mi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4y''@;'; put 'put ''My03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlSG91cmdsYXNzPSgwLG8uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJI''@;'; put 'put ''N0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEs''@;'; put 'put ''MTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEs''@;'; put 'put ''MjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2''@;'; put 'put ''LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEs''@;'; put 'put ''MS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCww''@;'; put 'put ''LDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEu''@;'; put 'put ''MjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00''@;'; put 'put ''LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQu''@;'; put 'put ''NjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4''@;'; put 'put ''LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4''@;'; put 'put ''LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwx''@;'; put 'put ''NS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYy''@;'; put 'put ''NC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgu''@;'; put 'put ''NjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDEx''@;'; put 'put ''LjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwx''@;'; put 'put ''LjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5''@;'; put 'put ''LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCww''@;'; put 'put ''LDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2''@;'; put 'put ''LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksZC5DbHJTaGFwZU5vQWNjZXNzPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBB''@;'; put 'put ''MTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCww''@;'; put 'put ''LDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4y''@;'; put 'put ''NSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYu''@;'; put 'put ''ODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxvLmNsckljb25TVkcpKCc8''@;'; put 'put ''cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksZC5DbHJTaGFwZUJhbGFuY2U9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEs''@;'; put 'put ''MSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBs''@;'; put 'put ''LjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIu''@;'; put 'put ''ODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwy''@;'; put 'put ''NC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLGQuQ2xyU2hhcGVJZEJhZGdlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42Myww''@;'; put 'put ''LDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAs''@;'; put 'put ''MC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4Vjho''@;'; put 'put ''NFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00''@;'; put 'put ''LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42''@;'; put 'put ''OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJI''@;'; put 'put ''MTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCww''@;'; put 'put ''LDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5Ljks''@;'; put 'put ''OS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhW''@;'; put 'put ''MzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYu''@;'; put 'put ''NzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMy''@;'; put 'put ''SDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiww''@;'; put 'put ''LDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEw''@;'; put 'put ''LjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjku''@;'; put 'put ''MDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiIC8+JyksZC5DbHJTaGFwZVJlcGVhdD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdM''@;'; put 'put ''MzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1''@;'; put 'put ''QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxkLkNsclNoYXBl''@;'; put 'put ''RmlsZUdyb3VwPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgz''@;'; put 'put ''MFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFW''@;'; put 'put ''MzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYs''@;'; put 'put ''MjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4''@;'; put 'put ''LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLGQuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2''@;'; put 'put ''LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCww''@;'; put 'put ''LDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCww''@;'; put 'put ''LDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEs''@;'; put 'put ''My4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLGQuQ2xyU2hhcGVTaHJpbms9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAs''@;'; put 'put ''MCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWEx''@;'; put 'put ''LDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksZC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMyww''@;'; put 'put ''LDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEy''@;'; put 'put ''LDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4''@;'; put 'put ''aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01''@;'; put 'put ''LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45''@;'; put 'put ''LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41''@;'; put 'put ''OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWgu''@;'; put 'put ''MTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxkLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMyww''@;'; put 'put ''LDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQs''@;'; put 'put ''NCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5''@;'; put 'put ''LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksZC5DbHJT''@;'; put 'put ''aGFwZVNvcnRCeT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywx''@;'; put 'put ''OUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxkLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMz''@;'; put 'put ''LDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjgu''@;'; put 'put ''OCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgs''@;'; put 'put ''MTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0i''@;'; put 'put ''MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAs''@;'; put 'put ''MSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAs''@;'; put 'put ''MSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksZC5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEt''@;'; put 'put ''MVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCww''@;'; put 'put ''LC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwu''@;'; put 'put ''NTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwx''@;'; put 'put ''LDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFa''@;'; put 'put ''bTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxkLkNs''@;'; put 'put ''clNoYXBlQnJpZWZjYXNlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxw''@;'; put 'put ''YXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMs''@;'; put 'put ''MywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2''@;'; put 'put ''LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSww''@;'; put 'put ''LDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2''@;'; put 'put ''LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4w''@;'; put 'put ''OEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEt''@;'; put 'put ''Mi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwy''@;'; put 'put ''Mi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4''@;'; put 'put ''Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0y''@;'; put 'put ''LjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42''@;'; put 'put ''LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwx''@;'; put 'put ''MSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44''@;'; put 'put ''NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGQuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLG8uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIg''@;'; put 'put ''cj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGQuQ2xyU2hhcGVGaWx0ZXIyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksZC5DbHJTaGFwZU1vb249KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwx''@;'; put 'put ''LDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEs''@;'; put 'put ''MiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEz''@;'; put 'put ''LjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZVN1bj0oMCxvLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGEx''@;'; put 'put ''LDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1Ljky''@;'; put 'put ''QTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEu''@;'; put 'put ''NDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAs''@;'; put 'put ''MCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIu''@;'; put 'put ''NDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVpt''@;'; put 'put ''MCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAs''@;'; put 'put ''MCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40''@;'; put 'put ''OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwx''@;'; put 'put ''LjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLGQuQ2xyU2hhcGVXYW5kPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1''@;'; put 'put ''aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjgu''@;'; put 'put ''OCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVs''@;'; put 'put ''MS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEu''@;'; put 'put ''MTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksZC5DbHJTaGFwZUN1cnNvck1vdmU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0x''@;'; put 'put ''LjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCww''@;'; put 'put ''LDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlQ2xvbmU9KDAsby5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAt''@;'; put 'put ''MiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIx''@;'; put 'put ''IDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJh''@;'; put 'put ''MiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYy''@;'; put 'put ''MWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlRGV0YWlscz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy''@;'; put 'put ''LDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwx''@;'; put 'put ''LDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLG8uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEy''@;'; put 'put ''IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiBy''@;'; put 'put ''PSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGQuQ2xyU2hhcGVFcmFzZXI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42''@;'; put 'put ''MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42''@;'; put 'put ''QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgy''@;'; put 'put ''OGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4''@;'; put 'put ''LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlTGFuZHNjYXBlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEz''@;'; put 'put ''QS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0Ljkx''@;'; put 'put ''LDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcu''@;'; put 'put ''NzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAs''@;'; put 'put ''MCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZVBhc3RlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgy''@;'; put 'put ''NnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAs''@;'; put 'put ''MjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQs''@;'; put 'put ''MjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGQuQ2xyU2hhcGVQb3J0cmFpdD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVh''@;'; put 'put ''LjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5''@;'; put 'put ''Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEy''@;'; put 'put ''LDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2''@;'; put 'put ''LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEs''@;'; put 'put ''MCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlVHJlZVZpZXc9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEs''@;'; put 'put ''MSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcs''@;'; put 'put ''NkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSww''@;'; put 'put ''LDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0''@;'; put 'put ''YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4''@;'; put 'put ''SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4''@;'; put 'put ''djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksZC5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIu''@;'; put 'put ''MTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4''@;'; put 'put ''LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDku''@;'; put 'put ''NzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwx''@;'; put 'put ''LjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgy''@;'; put 'put ''N1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4''@;'; put 'put ''LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEz''@;'; put 'put ''LjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEt''@;'; put 'put ''My4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4x''@;'; put 'put ''NC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40''@;'; put 'put ''NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVGaWxlWmlwPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYs''@;'; put 'put ''NS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjkt''@;'; put 'put ''MC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMx''@;'; put 'put ''Ny44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDEx''@;'; put 'put ''LjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+''@;'; put 'put ''PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0''@;'; put 'put ''LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAu''@;'; put 'put ''NCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUu''@;'; put 'put ''NUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlRmlsdGVyT2ZmPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMu''@;'; put 'put ''NCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwx''@;'; put 'put ''LDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41''@;'; put 'put ''LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVSZWN5Y2xlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45''@;'; put 'put ''TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02''@;'; put 'put ''LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAu''@;'; put 'put ''Mi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4y''@;'; put 'put ''LTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUt''@;'; put 'put ''MC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4x''@;'; put 'put ''LDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIu''@;'; put 'put ''MiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjIt''@;'; put 'put ''MC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAu''@;'; put 'put ''NC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQt''@;'; put 'put ''MSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAu''@;'; put 'put ''NC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEu''@;'; put 'put ''OSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxkLkNsclNoYXBlVHJlZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45''@;'; put 'put ''djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0w''@;'; put 'put ''LjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAu''@;'; put 'put ''NnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQt''@;'; put 'put ''MC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBc''@;'; put 'put ''blx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1''@;'; put 'put ''YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlRmlzaD0oMCxvLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEu''@;'; put 'put ''NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00''@;'; put 'put ''LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDku''@;'; put 'put ''NDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIz''@;'; put 'put ''Ljg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVGb3JtPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBI''@;'; put 'put ''MjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCww''@;'; put 'put ''LDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwx''@;'; put 'put ''LjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42''@;'; put 'put ''Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxkLkNsclNoYXBlRnVlbD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44''@;'; put 'put ''NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAs''@;'; put 'put ''MCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEs''@;'; put 'put ''MCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIs''@;'; put 'put ''MHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLGQuQ2xyU2hhcGVTbm93Zmxha2U9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45''@;'; put 'put ''NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEy''@;'; put 'put ''YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCww''@;'; put 'put ''LDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSww''@;'; put 'put ''LDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEs''@;'; put 'put ''MS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUy''@;'; put 'put ''LDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgt''@;'; put 'put ''Mi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIs''@;'; put 'put ''MCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxkLkNsclNoYXBlVGFibGU9KDAsby5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYz''@;'; put 'put ''Mi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWEx''@;'; put 'put ''LDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4n''@;'; put 'put ''KSxkLkNsclNoYXBlVm9sdW1lPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwz''@;'; put 'put ''MlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwx''@;'; put 'put ''LTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGEx''@;'; put 'put ''LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxkLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxvLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUs''@;'; put 'put ''NSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04''@;'; put 'put ''LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+JyksZC5DbHJTaGFwZUNpcmNsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZURvdENpcmNsZT0oMCxvLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAs''@;'; put 'put ''MzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVCZXRhPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCww''@;'; put 'put ''LDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUs''@;'; put 'put ''NkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYx''@;'; put 'put ''MGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVW''@;'; put 'put ''MTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40''@;'; put 'put ''LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45''@;'; put 'put ''LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMw''@;'; put 'put ''LDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIw''@;'; put 'put ''LjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSxkLkNsclNoYXBlRmlyc3RB''@;'; put 'put ''aWQ9KDAsby5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2''@;'; put 'put ''Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNW''@;'; put 'put ''MjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCww''@;'; put 'put ''LDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMy''@;'; put 'put ''LDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSww''@;'; put 'put ''LDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVo''@;'; put 'put ''My40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxkLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIs''@;'; put 'put ''MCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFh''@;'; put 'put ''Mi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTgu''@;'; put 'put ''MTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwx''@;'; put 'put ''OC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0''@;'; put 'put ''LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3Ljgs''@;'; put 'put ''MjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0u''@;'; put 'put ''NDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQu''@;'; put 'put ''OWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcu''@;'; put 'put ''NTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEu''@;'; put 'put ''MzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwx''@;'; put 'put ''LjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMs''@;'; put 'put ''MCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0x''@;'; put 'put ''LjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5''@;'; put 'put ''Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIs''@;'; put 'put ''Mi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0''@;'; put 'put ''LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIu''@;'; put 'put ''NTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44Nywx''@;'; put 'put ''LjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCww''@;'; put 'put ''LDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGQuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOmQuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOmQuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2Fy''@;'; put 'put ''ZDpkLkNsclNoYXBlUGluYm9hcmQsbmV3OmQuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6ZC5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOmQuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpkLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1o''@;'; put 'put ''YW5kIjpkLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOmQuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOmQuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6ZC5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJz''@;'; put 'put ''b3ItbW92ZSI6ZC5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6ZC5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpkLkNsclNoYXBlUmVzaXplLG9iamVjdHM6ZC5DbHJTaGFwZU9iamVjdHMsYm9vazpkLkNsclNoYXBlQm9vayxhc3RlcmlzazpkLkNsclNoYXBlQXN0ZXJpc2ssYnVnOmQu''@;'; put 'put ''Q2xyU2hhcGVCdWcsc2Npc3NvcnM6ZC5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOmQuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6ZC5DbHJTaGFwZVBlbmNpbCxub3RlOmQuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6ZC5DbHJTaGFwZVJlZnJlc2gsc3luYzpkLkNsclNoYXBlU3luYywi''@;'; put 'put ''dmlldy1saXN0IjpkLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOmQuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6ZC5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpkLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOmQuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6ZC5DbHJT''@;'; put 'put ''aGFwZVVwbG9hZCxsb2NrOmQuQ2xyU2hhcGVMb2NrLHVubG9jazpkLkNsclNoYXBlVW5sb2NrLHVzZXJzOmQuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6ZC5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6ZC5DbHJTaGFwZUZpbHRlcixwaW46ZC5DbHJTaGFwZVBpbixmaWxlOmQuQ2xyU2hhcGVGaWxl''@;'; put 'put ''LHBsdXM6ZC5DbHJTaGFwZVBsdXMsbWludXM6ZC5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOmQuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOmQuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpkLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOmQuQ2xyU2hhcGVUaW1lc0Np''@;'; put 'put ''cmNsZSx0cmFzaDpkLkNsclNoYXBlVHJhc2gsY2lyY2xlOmQuQ2xyU2hhcGVDaXJjbGUsdGFnOmQuQ2xyU2hhcGVUYWcsdGFnczpkLkNsclNoYXBlVGFncyxoaXN0b3J5OmQuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOmQuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOmQuQ2xyU2hhcGVBbGFy''@;'; put 'put ''bUNsb2NrLGFycm93OkkuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpkLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93IjpkLkNsclNoYXBlQ2hpbGRBcnJvdyxjb3B5OmQuQ2xyU2hhcGVDb3B5LGhlbHA6ZC5DbHJTaGFwZUhlbHAsbG9naW46ZC5DbHJTaGFwZUxvZ2luLGxv''@;'; put 'put ''Z291dDpkLkNsclNoYXBlTG9nb3V0LHByaW50ZXI6ZC5DbHJTaGFwZVByaW50ZXIsd29ybGQ6ZC5DbHJTaGFwZVdvcmxkLHNsaWRlcjpkLkNsclNoYXBlU2xpZGVyLGNsaXBib2FyZDpkLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOmQuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OmQuQ2xyU2hh''@;'; put 'put ''cGVMaXN0LHJlZG86ZC5DbHJTaGFwZVJlZG8sdW5kbzpkLkNsclNoYXBlVW5kbyxzY3JvbGw6ZC5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6ZC5DbHJTaGFwZUZpbGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOmQuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOmQuQ2xyU2hh''@;'; put 'put ''cGVTd2l0Y2gsdG9vbHM6ZC5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOmQuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6ZC5DbHJTaGFwZVdpbmRvd01heCwid2luZG93LW1pbiI6ZC5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOmQuQ2xyU2hhcGVXaW5k''@;'; put 'put ''b3dSZXN0b3JlLCJ6b29tLWluIjpkLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6ZC5DbHJTaGFwZVpvb21PdXQsa2V5OmQuQ2xyU2hhcGVLZXksbGlicmFyeTpkLkNsclNoYXBlTGlicmFyeSxib2x0OmQuQ2xyU2hhcGVCb2x0LHdyZW5jaDpkLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOmQu''@;'; put 'put ''Q2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6ZC5DbHJTaGFwZVRhcmdldCxmbGFtZTpkLkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOmQuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFjY2VzcyI6ZC5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpkLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFu''@;'; put 'put ''Y2U6ZC5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjpkLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6ZC5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6ZC5DbHJTaGFwZUZpbGVHcm91cCxwYXBlcmNsaXA6ZC5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6ZC5DbHJTaGFwZVNocmluaywiYWNj''@;'; put 'put ''ZXNzaWJpbGl0eS0xIjpkLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6ZC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5IjpkLkNsclNoYXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpkLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6ZC5D''@;'; put 'put ''bHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOmQuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6ZC5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBib2FyZCI6ZC5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOmQuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFn''@;'; put 'put ''LWhhbmRsZSI6ZC5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpkLkNsclNoYXBlTW9vbixzdW46ZC5DbHJTaGFwZVN1bix3YW5kOmQuQ2xyU2hhcGVXYW5kLGNsb25lOmQuQ2xyU2hhcGVDbG9uZSxkZXRhaWxzOmQuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOmQuQ2xyU2hh''@;'; put 'put ''cGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjpkLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpkLkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOmQuQ2xyU2hhcGVQYXN0ZSxwb3J0cmFpdDpkLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpkLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6''@;'; put 'put ''ZC5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOmQuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6ZC5DbHJTaGFwZVRyZWUsZmlzaDpkLkNsclNoYXBlRmlzaCxmb3JtOmQuQ2xyU2hhcGVGb3JtLGZ1ZWw6ZC5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOmQuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6ZC5D''@;'; put 'put ''bHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjpkLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpkLkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6ZC5DbHJTaGFwZUNyb3NzaGFpcnMsYmV0YTpkLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6ZC5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGQuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxoLmRlc2NyaXB0b3JDb25m''@;'; put 'put ''aWcpKGQuRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuRXNzZW50aWFsU2hhcGVz''@;'; put 'put ''LCJkb2N1bWVudCIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuRXNzZW50aWFsU2hhcGVzLCJhZGQiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50''@;'; put 'put ''aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBl''@;'; put 'put ''cywic2lnbi1vdXQiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuRXNzZW50aWFsU2hhcGVzLCJsaWdodG5pbmciLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxoLmRlc2Ny''@;'; put 'put ''aXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBlcywicGlubmVkIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGQuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsaC5kZXNjcmlwdG9y''@;'; put 'put ''Q29uZmlnKShkLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShk''@;'; put 'put ''LkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChkLkVz''@;'; put 'put ''c2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No''@;'; put 'put ''YXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixkLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5NZWRpYVNoYXBlcz1kLkNsclNoYXBlTWljcm9waG9uZU11dGU9ZC5DbHJTaGFwZU1pY3JvcGhvbmU9ZC5DbHJTaGFwZVZpZGVvR2FsbGVyeT1kLkNsclNoYXBlUmVwbGF5T25lPWQuQ2xyU2hhcGVSZXBsYXlBbGw9ZC5D''@;'; put 'put ''bHJTaGFwZUltYWdlR2FsbGVyeT1kLkNsclNoYXBlTXVzaWNOb3RlPWQuQ2xyU2hhcGVGaWxtU3RyaXA9ZC5DbHJTaGFwZUhlYWRwaG9uZXM9ZC5DbHJTaGFwZVZvbHVtZU11dGU9ZC5DbHJTaGFwZVZvbHVtZVVwPWQuQ2xyU2hhcGVWb2x1bWVEb3duPWQuQ2xyU2hhcGVTaHVmZmxlPWQuQ2xy''@;'; put 'put ''U2hhcGVWaWRlb0NhbWVyYT1kLkNsclNoYXBlQ2FtZXJhPWQuQ2xyU2hhcGVGYXN0Rm9yd2FyZD1kLkNsclNoYXBlUmV3aW5kPWQuQ2xyU2hhcGVQb3dlcj1kLkNsclNoYXBlU3RvcD1kLkNsclNoYXBlU3RlcEZvcndhcmQ9ZC5DbHJTaGFwZVBhdXNlPWQuQ2xyU2hhcGVQbGF5PXZvaWQgMDt2''@;'; put 'put ''YXIgaD1TKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7ZC5DbHJTaGFwZVBsYXk9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik04LjA3LDMxLjZBMi4wNywyLjA3LDAsMCwxLDYsMjkuNTNWNi4zMkEyLjA3LDIuMDcsMCwwLDEsOSw0LjQ3TDMyLjIxLDE2LjA4YTIuMDcsMi4wNywwLDAsMSwwLDMuN0w5LDMxLjM4QTIuMDYsMi4wNiwwLDAsMSw4LjA3LDMxLjZabTAtMjUuMzRMOCw2LjMyVjI5LjUz''@;'; put 'put ''bC4xLjA2TDMxLjMxLDE4YS4wNi4wNiwwLDAsMCwwLS4wNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTYuMDgsOC45NCw0LjQ3QTIuMDcsMi4wNywwLDAsMCw2LDYuMzJWMjkuNTNhMi4wNiwyLjA2''@;'; put 'put ''LDAsMCwwLDMsMS44NUwzMi4xNiwxOS43N2EyLjA3LDIuMDcsMCwwLDAsMC0zLjdaIi8+JyksZC5DbHJTaGFwZVBhdXNlPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTIuOTMsMzJINi4wN0EyLjA3LDIuMDcs''@;'; put 'put ''MCwwLDEsNCwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSw2LjA3LDRoNi44N0EyLjA3LDIuMDcsMCwwLDEsMTUsNi4wN1YyOS45M0EyLjA3LDIuMDcsMCwwLDEsMTIuOTMsMzJaTTEzLDZINlYzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjkuOTMsMzJIMjMuMDdBMi4wNywyLjA3LDAsMCwxLDIxLDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDIzLjA3LDRoNi44N0EyLjA3LDIuMDcsMCwwLDEsMzIsNi4wN1YyOS45M0EyLjA3LDIuMDcsMCwwLDEsMjkuOTMsMzJaTTMwLDZIMjNWMzBo''@;'; put 'put ''N1oiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk1IiB5PSI0IiB3aWR0aD0iMTEiIGhlaWdodD0iMjgiIHJ4PSIyLjA3IiByeT0iMi4wNyIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjIwLjk1IiB5PSI0IiB3aWR0aD0iMTEiIGhlaWdodD0iMjgiIHJ4PSIyLjA3IiByeT0iMi4wNyIvPicpLGQuQ2xyU2hhcGVTdGVwRm9yd2FyZD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgZD0iTTUsMzIuMjNhMiwyLDAsMCwxLTItMlY1Ljc3QTIsMiwwLDAsMSw2LjE3LDQuMTRMMjMuMjMsMTYuMzhhMiwyLDAsMCwxLDAsMy4yNWgwTDYuMTcsMzEuODZBMiwyLDAsMCwxLDUsMzIuMjNaTTUsNS43N1YzMC4yM0wyMi4wNywxOFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMxLDMySDI4YTIsMiwwLDAsMS0yLTJWNmEyLDIsMCwwLDEsMi0yaDNhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCwwLDEsMzEsMzJaTTI4LDZWMzBoM1Y2WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik01LDMxLjlhMiwyLDAsMCwxLTItMlY1LjQ0QTIsMiwwLDAsMSw2LjEyLDMuODFMMjMuMTgsMTZhMiwyLDAsMCwxLDAsMy4yNWgwTDYuMTIsMzEuNTJBMiwyLDAsMCwxLDUsMzEuOVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyNS45NSIgeT0iMy42NyIgd2lkdGg9IjciIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLGQuQ2xyU2hhcGVTdG9wPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMzJINmEyLDIsMCwwLDEtMi0yVjZBMiwyLDAsMCwxLDYsNEgzMGEyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMCwzMlpNNiw2VjMwSDMwVjZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NiIgeT0iNCIgd2lkdGg9IjI3Ljk5IiBoZWlnaHQ9IjI4IiByeD0iMiIgcnk9IjIiLz4nKSxkLkNsclNoYXBlUG93ZXI9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OCwyMWExLDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4xNWExNSwxNSwwLDAsMS03LjUyLTI4LDEsMSwwLDAs''@;'; put 'put ''MSwxLDEuNzMsMTMsMTMsMCwxLDAsMTMsMCwxLDEsMCwxLDEsMS0xLjczLDE1LDE1LDAsMCwxLTcuNTIsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOCwyMWExLDEs''@;'; put 'put ''MCwwLDAsMS0xVjRhMSwxLDAsMCwwLTIsMFYyMEExLDEsMCwwLDAsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41MSwxNS40SDMwLjQ0YTEzLDEzLDAsMSwx''@;'; put 'put ''LTE5LTcuNSwxLDEsMCwwLDAtMS0xLjczQTE1LDE1LDAsMSwwLDMzLDE5LjE1LDE0LjksMTQuOSwwLDAsMCwzMi41MSwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVsLS4zMSwwQTEzLDEzLDAsMSwxLDExLjQ4LDcuOWExLDEsMCwwLDAtMS0xLjczLDE1LDE1LDAsMSwwLDIxLjMxLDcuMUE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2''@;'; put 'put ''LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabS4wNiwxNy42OGExLjI4LDEuMjgsMCwwLDEtMS4yOS0xLjI4VjguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40QTEuMjgsMS4yOCwwLDAsMSwxOC4wNiwxOS42OFpNMTgsMjcuNzlBOS44OCw5Ljg4LDAsMCwxLDEyLjE3LDkuODVh''@;'; put 'put ''MS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcuMDcsNy4wNywwLDAsMC0zLTUuNzZBMS4zNywxLjM3LDAsMCwxLDIyLDEwLjJhMS40LDEuNCwwLDAsMSwxLjk0LS4yOUE5Ljg4LDkuODgsMCwwLDEsMTgsMjcu''@;'; put 'put ''NzlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRoLTZBOS43LDkuNywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0xNS44My04LDEuNCwxLjQsMCwwLDEsMS45''@;'; put 'put ''NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA4LDcuMDgsMCwwLDAtLjQ1LTIuNDlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0djQuNGExLjI5LDEuMjksMCwwLDEtMi41OCwwVjguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgs''@;'; put 'put ''MHYuNzFsMy43Ni02LjUxQTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTMuNTctLjlBOS44Myw5LjgzLDAsMCwxLDI4LDE3Ljg5YTEwLDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAs''@;'; put 'put ''MTEuNDMsNS44LDcuMDcsNy4wNywwLDAsMC0zLTUuNzZBMS4zNywxLjM3LDAsMCwxLDIyLDEwLjJhMS4zOCwxLjM4LDAsMCwxLDEuNTItLjQ5LDcuNDUsNy40NSwwLDAsMS0uMy02LjgzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTYuNzcs''@;'; put 'put ''OC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2''@;'; put 'put ''IiByPSI1Ii8+JyksZC5DbHJTaGFwZVJld2luZD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3LjA5LDMxLjU4bC0xNS4zMi0xMmEyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyYTEuOTMsMS45MywwLDAsMSwy''@;'; put 'put ''LjA2LS4yMkExLjc3LDEuNzcsMCwwLDEsMjAsNnY2LjdMMzAuODMsNC40MmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMiwyLDAsMCwxLDM0LDZWMzBhMiwyLDAsMCwxLTEuMTEsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJMMjAsMjMuMzFWMzBhMS43NywxLjc3LDAsMCwxLS44NSwx''@;'; put 'put ''Ljc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMlpNMzIsMzBsLjA2LTI0TDE4LDE2LjhWNkwzLDE4LDE4LDMwVjE5LjJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTYuOTIsMzEuNTgsMS42LDE5LjU3YTIsMiwwLDAs''@;'; put 'put ''MSwwLTMuMTVsMTUuMzItMTJBMS45MywxLjkzLDAsMCwxLDE5LDQuMiwxLjg5LDEuODksMCwwLDEsMjAsNnY2LjdMMzAuNjYsNC40MmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMiwyLDAsMCwxLDMzLjgzLDZWMzBhMiwyLDAsMCwxLTEuMTEsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0u''@;'; put 'put ''MjJMMjAsMjMuMzFWMzBhMS44OSwxLjg5LDAsMCwxLTEsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaIi8+JyksZC5DbHJTaGFwZUZhc3RGb3J3YXJkPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcu''@;'; put 'put ''NzcsMzEuOTJhMiwyLDAsMCwxLS44Ni0uMkExLjgxLDEuODEsMCwwLDEsMTYsMjkuOTN2LTYuN0w1LjI0LDMxLjVhMS45NCwxLjk0LDAsMCwxLTIuMDYuMjIsMiwyLDAsMCwxLTEuMTEtMS43OXYtMjRBMiwyLDAsMCwxLDMuMTgsNC4xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42''@;'; put 'put ''MVY1LjkxYTEuODEsMS44MSwwLDAsMSwuOTEtMS43OUExLjkzLDEuOTMsMCwwLDEsMTksNC4zNGwxNS4zMiwxMmEyLDIsMCwwLDEsMCwzLjE1TDE5LDMxLjVBMiwyLDAsMCwxLDE3Ljc3LDMxLjkyWm0wLTEyLjhWMjkuOTNsMTUuMjYtMTItMTUuMzItMTIsLjA2LDEwLjgxTDQsNS45MXYyNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy43MSwzMmEyLDIsMCwwLDEtLjg2LS4yQTEuNzcsMS43NywwLDAsMSwxNiwzMHYtNi43TDUuMTcsMzEuNThhMS45NCwxLjk0LDAsMCwxLTIuMDYuMjJBMiwyLDAsMCwxLDIs''@;'; put 'put ''MzBWNkEyLDIsMCwwLDEsMy4xMSw0LjJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjlWNmExLjc3LDEuNzcsMCwwLDEsLjg1LTEuNzksMS45MywxLjkzLDAsMCwxLDIuMDYuMjJsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNWwtMTUuMzIsMTJBMiwyLDAsMCwxLDE3LjcxLDMyWiIv''@;'; put 'put ''PicpLGQuQ2xyU2hhcGVDYW1lcmE9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDhIMjQuN0wyMy42NCw1LjI4QTIsMiwwLDAsMCwyMS43OCw0SDE0LjIyYTIsMiwwLDAsMC0xLjg3LDEuMjhMMTEuMyw4SDRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMjJINFYxMGg4LjY3bDEuNTUtNGg3LjU2bDEuNTUsNEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwxOWE5LDksMCwxLDAsOS05QTksOSwwLDAsMCw5LDE5''@;'; put 'put ''Wm0xNi40LDBBNy40LDcuNCwwLDEsMSwxOCwxMS42LDcuNDEsNy40MSwwLDAsMSwyNS40LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjM3LDEyLjgzYS44LjgsMCwwLDAtLjgtLjhINi4xN2EuOC44LDAs''@;'; put 'put ''MCwwLDAsMS42aDIuNEEuOC44LDAsMCwwLDkuMzcsMTIuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjM0LDE5YTUuNTcsNS41NywwLDAsMCwzLjI0LDVsLjg1LTEuMzdhNCw0LDAsMSwxLDQuMTEtNi42''@;'; put 'put ''MWwuODYtMS4zOEE1LjU2LDUuNTYsMCwwLDAsMTIuMzQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDhIMjQuN0wyMy42NCw1LjI4QTIsMiwwLDAsMCwyMS43OCw0SDE0LjIyYTIsMiwwLDAsMC0xLjg3''@;'; put 'put ''LDEuMjhMMTEuMyw4SDRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhaTTYuMTcsMTMuNjNhLjguOCwwLDAsMSwwLTEuNmgyLjRhLjguOCwwLDAsMSwwLDEuNlpNMTgsMjhhOSw5LDAsMSwxLDktOUE5LDksMCwwLDEsMTgs''@;'; put 'put ''MjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMTEsMTkuMDZhNy4wNyw3LjA3LDAsMCwwLDQuMTEsNi40MWwxLjA5LTEuNzRhNSw1LDAsMSwxLDUuMjItOC4zOWwxLjA5LTEuNzZhNy4wNiw3LjA2LDAsMCwwLTEx''@;'; put 'put ''LjUxLDUuNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksZC5DbHJTaGFwZVZpZGVvQ2FtZXJhPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQsMTAuMzRhMi4xMSwyLjEx''@;'; put 'put ''LDAsMCwwLTEuMTYtMS45LDIsMiwwLDAsMC0yLjEzLjE1TDI2LDExLjZWOGEyLDIsMCwwLDAtMi0ySDZhNCw0LDAsMCwwLTQsNFYyNmE0LDQsMCwwLDAsNCw0SDI0YTIsMiwwLDAsMCwyLTJWMjQuNGw0LjY0LDNhMi4wNywyLjA3LDAsMCwwLDIuMi4yQTIuMTEsMi4xMSwwLDAsMCwzNCwyNS42''@;'; put 'put ''NlpNMzEuOTMsMjUuNzdjLS4wNiwwLS4xMSwwLS4xOS0uMDZMMjQsMjAuNzdWMjhINmEyLDIsMCwwLDEtMi0yVjEwQTIsMiwwLDAsMSw2LDhIMjR2Ny4yM2w3LjgtNWEuMTEuMTEsMCwwLDEsLjEzLDAsLjExLjExLDAsMCwxLC4wNy4xMVYyNS42NkEuMTEuMTEsMCwwLDEsMzEuOTMsMjUuNzda''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMyw5LjM1LDI2LDEyLjlWOGEyLDIsMCwwLDAtMi0ySDZhNCw0LDAsMCwwLTQsNFYyNmE0LDQsMCwwLDAsNCw0SDI0YTIsMiwwLDAsMCwyLTJWMjMuMDhsNi4zLDMuNTVB''@;'; put 'put ''MS4xLDEuMSwwLDAsMCwzNCwyNS43N1YxMC4yQTEuMSwxLjEsMCwwLDAsMzIuMyw5LjM1WiIvPicpLGQuQ2xyU2hhcGVTaHVmZmxlPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjEuNjEsMTFoOC42MmwtMy4z''@;'; put 'put ''LDMuM2ExLDEsMCwxLDAsMS40MSwxLjQyTDM0LDEwLjA4bC0uNzEtLjcxaDBMMjguMzQsNC40M2ExLDEsMCwwLDAtMS40MSwxLjQyTDMwLjExLDlIMjFhMSwxLDAsMCwwLS44Ni41TDE3LjUsMTQuMDlsMS4xNiwyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMS4wNywyNS4wN0gzYTEsMSwwLDAsMCwwLDJoOC42NWExLDEsMCwwLDAsLjg2LS41TDE1LjE4LDIyLDE0LDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yOC4z''@;'; put 'put ''NCwyMC4xN2ExLDEsMCwwLDAtMS40MSwxLjQybDMuNSwzLjVIMjEuNjFMMTIuNTEsOS41M2ExLDEsMCwwLDAtLjg2LS41SDNhMSwxLDAsMSwwLDAsMmg4LjA3bDkuMSwxNS41NWExLDEsMCwwLDAsLjg2LjVIMjkuOWwtMywzYTEsMSwwLDAsMCwxLjQxLDEuNDJsNC45NS00Ljk0aDBsLjcxLS43''@;'; put 'put ''MVoiLz4nKSxkLkNsclNoYXBlVm9sdW1lRG93bj0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEs''@;'; put 'put ''MSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzJhMiwyLDAsMCwxLTEuNDItLjU5TDkuMTQsMjRINGEyLDIs''@;'; put 'put ''MCwwLDEtMi0yVjE0YTIsMiwwLDAsMSwyLTJIOS4yMmw3LjMzLTcuNDFBMiwyLDAsMCwxLDIwLDZWMzBhMiwyLDAsMCwxLTEuMjQsMS44NUEyLDIsMCwwLDEsMTgsMzJaTTQsMTR2OEg5LjU2YTEsMSwwLDAsMSwuNzEuMjhMMTgsMzBWNmwtNy42NSw3LjY4YTEsMSwwLDAsMS0uNzEuM1pNMTgs''@;'; put 'put ''NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwy''@;'; put 'put ''NSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTguMzQsMy44Nyw5LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIw''@;'; put 'put ''LDMxLjU1VjQuNjJBMSwxLDAsMCwwLDE4LjM0LDMuODdaIi8+JyksZC5DbHJTaGFwZVZvbHVtZVVwPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEs''@;'; put 'put ''Ni4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjIsMzEu''@;'; put 'put ''MThhMSwxLDAsMCwxLS40NS0xLjg5QTEyLjQ0LDEyLjQ0LDAsMCwwLDI1LDYuODlhMSwxLDAsMSwxLC44Ny0xLjgsMTQuNDQsMTQuNDQsMCwwLDEsLjI0LDI2QTEsMSwwLDAsMSwyNS42MiwzMS4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDZhMiwyLDAsMCwxLTEuNDItLjU5TDkuMTQsMjRINGEyLDIsMCwwLDEtMi0yVjE0YTIsMiwwLDAsMSwyLTJIOS4yMmw3LjMzLTcuMzlBMiwyLDAsMCwxLDIwLDZ2MjRhMiwyLDAsMCwxLTEuMjQsMS44NUEyLDIsMCwwLDEsMTgsMzIuMDZaTTQsMTR2''@;'; put 'put ''OEg5LjU2YTEsMSwwLDAsMSwuNzEuM0wxOCwzMC4wNlY2TDEwLjM1LDEzLjdhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2''@;'; put 'put ''LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUuNjIsMzEu''@;'; put 'put ''MThhMSwxLDAsMCwxLS40NS0xLjg5QTEyLjQ0LDEyLjQ0LDAsMCwwLDI1LDYuODlhMSwxLDAsMSwxLC44Ny0xLjgsMTQuNDQsMTQuNDQsMCwwLDEsLjI0LDI2QTEsMSwwLDAsMSwyNS42MiwzMS4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMiIGQ9Ik0xOC4zMyw0LDkuMDcsMTJoLTZhMSwxLDAsMCwwLTEsMXY5LjkyYTEsMSwwLDAsMCwxLDFIOC44OGw5LjQ2LDguMjRBMSwxLDAsMCwwLDIwLDMxLjQzVjQuNzJBMSwxLDAsMCwwLDE4LjMzLDRaIi8+JyksZC5DbHJTaGFwZVZvbHVtZU11dGU9KDAsaC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zLjYxLDYuNDEsOS4xOSwxMkg0YTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDkuMTRsNy40MSw3LjQ3QTIsMiwwLDAsMCwxOCwzMmEyLDIsMCwwLDAsLjc2LS4xNUEyLDIsMCwwLDAs''@;'; put 'put ''MjAsMzBWMjIuNzdsNS44OSw1Ljg5Yy0uMjUuMTUtLjQ5LjI5LS43NS40MmExLDEsMCwwLDAsLjksMS43OSwxNC40LDE0LjQsMCwwLDAsMS4zMS0uNzVsMi4yOCwyLjI4TDMxLDMxLDUsNVpNMTgsMzBsLTcuNzMtNy43N0ExLDEsMCwwLDAsOS41NiwyMkg0VjE0SDkuNjRhMSwxLDAsMCwwLC43''@;'; put 'put ''MS0uM2wuMjYtLjI2TDE4LDIwLjgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC44OSw2LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI5LDI2LjFsMS40MiwxLjQyQTE0LjQyLDE0LjQyLDAsMCwwLDI1Ljc2LDQu''@;'; put 'put ''ODhhMSwxLDAsMSwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTIyLjY5LDEyLjYyQTYuMjcsNi4yNywwLDAsMSwyNS44LDE4YTYuMTcsNi4xNywwLDAsMS0xLjI0LDMuNzFMMjYsMjMuMTNBOC4x''@;'; put 'put ''NSw4LjE1LDAsMCwwLDI3LjgsMThhOC4yOCw4LjI4LDAsMCwwLTQuMS03LjExLDEsMSwwLDEsMC0xLDEuNzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDZ2OS4xNWwyLDJWNmEyLDIsMCwwLDAtMy40Mi0x''@;'; put 'put ''LjQxTDEyLDkuMTdsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI0Ljg3LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjguNzUsMjYuM2wxLjQyLDEuNDJBMTQuNDMsMTQuNDMsMCwwLDAsMjUuNzQsNC44''@;'; put 'put ''OGExLDEsMCwwLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNy4zLDI3LjY3aDBsLTMuODQtMy44NC0uNTctLjU3aDBMNC42Myw1LDMuMjEsNi40MSw4LjgsMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEs''@;'; put 'put ''MSwwLDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWMjMuMmw1LjU5LDUuNTljLS4xNy4xLS4zNC4yLS41MS4yOWExLDEsMCwwLDAsLjksMS43OWMuMzctLjE5LjcyLS40LDEuMDgtLjYybDIuMTQsMi4xNEwzMC42MSwzMWwtMy4yNS0zLjI1WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIyLjY5LDEyLjYyQTYuMjcsNi4yNywwLDAsMSwyNS44LDE4YTYuMTcsNi4xNywwLDAsMS0xLjQyLDMuOTJsMS40MiwxLjQyYTguMTYsOC4xNiwwLDAsMCwyLTUuMzQsOC4yOCw4LjI4LDAsMCwwLTQu''@;'; put 'put ''MS03LjExLDEsMSwwLDEsMC0xLDEuNzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMjAsNC42MmExLDEsMCwwLDAtMS42Ni0uNzVsLTYuNDIsNS42TDIwLDE3LjU0WiIvPicpLGQuQ2xyU2hhcGVIZWFkcGhvbmVzPSgw''@;'; put 'put ''LGguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOS4yQTIuNzQsMi43NCwwLDAsMCwxMiwyOC4zM1YyMS42N0EyLjc0LDIuNzQsMCwwLDAsOS4yLDE5SDZWMTcu''@;'; put 'put ''NUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3LDEyLjI3LDAsMCwxLDMwLDE3LjVWMTlIMjYuOEEyLjc0LDIuNzQsMCwwLDAsMjQsMjEuNjd2Ni42N0EyLjc0LDIuNzQsMCwwLDAsMjYuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaTTkuMiwyMWEuNzUuNzUsMCwwLDEs''@;'; put 'put ''LjguNjd2Ni42N2EuNzUuNzUsMCwwLDEtLjguNjdINlYyMVpNMjYsMjguMzNWMjEuNjdhLjc1Ljc1LDAsMCwxLC44LS42N0gzMHY4SDI2LjhBLjc1Ljc1LDAsMCwxLDI2LDI4LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwxNy41VjMxSDguMkExLjc0LDEuNzQsMCwwLDAsMTAsMjkuMzNWMjIuNjdBMS43NCwxLjc0LDAsMCwwLDguMiwyMUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjIxSDI3LjhBMS43NCwx''@;'; put 'put ''Ljc0LDAsMCwwLDI2LDIyLjY3djYuNjdBMS43NCwxLjc0LDAsMCwwLDI3LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWiIvPicpLGQuQ2xyU2hhcGVGaWxtU3RyaXA9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFptMCwyNkg2VjZIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE0LjYsMjMuMDdhMS4yOSwxLjI5LDAsMCwwLDEuMjQuMDlsOC43My00YTEuMywxLjMsMCwwLDAsMC0yLjM3aDBsLTguNzMtNEExLjMsMS4zLDAsMCwwLDE0LDE0djhBMS4yOSwxLjI5LDAsMCwwLDE0LjYsMjMuMDdabTEtOC42TDIzLjMxLDE4LDE1LjYsMjEuNTFaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iOCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE0IiB5PSI3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjAiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiB4PSIyNiIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjgiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iMTQiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjAiIHk9IjI2IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk0yMCw3aDJ2M0gyMFpNMTQsN2gydjNIMTRaTTEwLDI5SDhWMjZoMlptMC0xOUg4VjdoMlptNiwxOUgxNFYyNmgyWm02LDBIMjBWMjZoMlpt''@;'; put 'put ''My4xNi0xMC4xNkwxNS4zOSwyMy4yQTEsMSwwLDAsMSwxNCwyMi4yOFYxMy41N2ExLDEsMCwwLDEsMS40MS0uOTFMMjUuMTYsMTdBMSwxLDAsMCwxLDI1LjE2LDE4Ljg0Wk0yOCwyOUgyNlYyNmgyWm0wLTE5SDI2VjdoMloiLz4nKSxkLkNsclNoYXBlTXVzaWNOb3RlPSgwLGguY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjkyLTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjM0YTUuODksNS44OSwwLDAsMC0uODItLjU2LDguMzMsOC4zMywwLDAsMC02''@;'; put 'put ''LjUzLS40MUM3LjU3LDIyLjcsNC45MiwyNi41LDUuNzgsMjkuODRhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTdjMy42Ny0xLjE4LDYuMTctNC4zMyw2LjA2LTcuMzZWOS4zNGEyOS4xNCwyOS4xNCwwLDAs''@;'; put 'put ''MSw2LjU1LDEuNDMsMSwxLDAsMSwwLC43Mi0xLjg3QTMxLjM3LDMxLjM3LDAsMCwwLDIxLDcuMzNWNC4xN2MzLjMzLjM2LDgsMS4zOCw4LjkyLDMsMiwzLjQxLTIuMzMsNy4zNi0yLjM3LDcuNGExLDEsMCwwLDAsMS4zMywxLjQ5QzI5LjE1LDE1Ljg1LDM0LjUsMTEsMzEuNjgsNi4xNlpNMTQu''@;'; put 'put ''MzUsMzEuNjdhNi40Myw2LjQzLDAsMCwxLTUtLjI2LDMuMzEsMy4zMSwwLDAsMS0xLjY5LTIuMDdjLS42LTIuMzMsMS40NS01LjA1LDQuNTgtNi4wNmE3LjUyLDcuNTIsMCwwLDEsMi4zLS4zNyw1LjUyLDUuNTIsMCwwLDEsMi42NS42MiwzLjMxLDMuMzEsMCwwLDEsMS42OSwyLjA3QzE5LjU0''@;'; put 'put ''LDI3Ljk0LDE3LjQ5LDMwLjY2LDE0LjM1LDMxLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMtMTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4yOWE1''@;'; put 'put ''Ljg4LDUuODgsMCwwLDAtLjgxLS41NSw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFjLTQuMTIsMS4zMy02Ljc3LDUuMTMtNS45MSw4LjQ3YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5LjU0LDAsMCwwLDE1LDMzLjUyYzMuNy0xLjE5LDYu''@;'; put 'put ''Mi00LjM3LDYuMDYtNy40MiwwLDAsMCwwLDAsMFY4LjQ5YzEsLjEyLDIuMzcuMzMsMy44Mi42NGExMS4xNywxMS4xNywwLDAsMSw0LjA2LDEuNDZjMSwuNjYuMzgsMS45LjMzLDJhMTEuOCwxMS44LDAsMCwxLTEuNjYsMiwxLDEsMCwwLDAsMS4zMywxLjQ5QzI5LjE1LDE1Ljg1LDM0LjUsMTEs''@;'; put 'put ''MzEuNjgsNi4xNloiLz4nKSxkLkNsclNoYXBlSW1hZ2VHYWxsZXJ5PSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4x''@;'; put 'put ''MlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOC41NiwxOS40NWEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjU2LDE5LjQ1Wm0wLTQuNkExLjYsMS42''@;'; put 'put ''LDAsMSwxLDcsMTYuNDUsMS42LDEuNiwwLDAsMSw4LjU2LDE0Ljg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuOSwyOGw2LTYsMy4xOCwzLjE4TDE0LjI2LDI4aDJsNy40Ni03LjQ2TDMwLDI2Ljc3di0yTDI0LjIsMTlhLjcxLjcx''@;'; put 'put ''LDAsMCwwLTEsMGwtNS4xNiw1LjE2TDE0LjM3LDIwLjVhLjcxLjcxLDAsMCwwLTEsMEw1LjkyLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzAu''@;'; put 'put ''MTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEw''@;'; put 'put ''Wk04LjU2LDEzLjQ1YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguNTYsMTMuNDVaTTMwLDI4aC0yNGw3LjQ2LTcuNDdhLjcxLjcxLDAsMCwxLDEsMGwzLjY4LDMuNjhMMjMuMjEsMTlhLjcxLjcxLDAsMCwxLDEsMEwzMCwyNC43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+JyksZC5DbHJTaGFwZVJlcGxheUFsbD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNDYsMjYuMjJhMS40LDEuNCwwLDAsMCwxLS40Mmw1LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLC40Mi0xLDEuNDYsMS40NiwwLDAsMC0uNDItMWwtNS41OS01LjU2YTEuNDMsMS40''@;'; put 'put ''MywwLDAsMC0yLjQ0LDFWMjQuNzlhMS40MSwxLjQxLDAsMCwwLC44OCwxLjMyQTEuNTQsMS41NCwwLDAsMCwxNy40NiwyNi4yMlptLjE2LTEyLjE2LDUuMTksNS4xNi01LjE5LDUuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgu''@;'; put 'put ''MDYsNWgtNi43bDIuOTItMi42NEExLDEsMCwwLDAsMTIuOTQuODhMNy4zMiw2LDEyLjk0LDExYTEsMSwwLDAsMCwuNjcuMjYsMSwxLDAsMCwwLC43NC0uMzMsMSwxLDAsMCwwLS4wNy0xLjQyTDExLjQ2LDdoNi42QTExLjc4LDExLjc4LDAsMSwxLDcuNzEsMjQuNDEsMSwxLDAsMCwwLDYsMjUu''@;'; put 'put ''MzYsMTMuNzgsMTMuNzgsMCwxLDAsMTguMDYsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVSZXBsYXlPbmU9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDI3LjI3YTEsMSwwLDAsMCwxLTFWMTRhMSwxLDAsMCwwLTEt''@;'; put 'put ''MUgxOWEzLjgsMy44LDAsMCwwLTEuMS4yM2wtMiwuNjJhLjkyLjkyLDAsMCwwLS43Mi44Ni44OC44OCwwLDAsMCwuODguODYsMS40NiwxLjQ2LDAsMCwwLC40My0uMDhMMTgsMTUuMDd2MTEuMkExLDEsMCwwLDAsMTksMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNMTguMDYsNWgtNi43bDIuOTItMi42NEExLDEsMCwwLDAsMTIuOTQuODhMNy4zMiw2LDEyLjk0LDExYTEsMSwwLDAsMCwuNjcuMjYsMSwxLDAsMCwwLC43NC0uMzMsMSwxLDAsMCwwLS4wNy0xLjQyTDExLjQ2LDdoNi42QTExLjc4LDExLjc4LDAsMSwxLDcu''@;'; put 'put ''NzEsMjQuNDEsMSwxLDAsMCwwLDYsMjUuMzYsMTMuNzgsMTMuNzgsMCwxLDAsMTguMDYsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMu''@;'; put 'put ''ODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSww''@;'; put 'put ''LDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTEyLjgyLDI2Ljc5YTEuNzQsMS43NCwwLDAsMCwuOTMuMjgsMS42OCwxLjY4LDAsMCwwLC42OS0uMTVsOS43Ny00LjM2YTEuNjksMS42OSwwLDAsMCwwLTMuMUwx''@;'; put 'put ''NC40NCwxNS4xYTEuNywxLjcsMCwwLDAtMi4zOSwxLjU1djguNzJBMS43LDEuNywwLDAsMCwxMi44MiwyNi43OVptLjYzLTEwLjE0YS4yOS4yOSwwLDAsMSwuMTQtLjI1LjMuMywwLDAsMSwuMTYsMCwuMjcuMjcsMCwwLDEsLjEyLDBsOS43Nyw0LjM1YS4yOS4yOSwwLDAsMSwuMTguMjguMjgu''@;'; put 'put ''MjgsMCwwLDEtLjE4LjI3bC05Ljc3LDQuMzZhLjI4LjI4LDAsMCwxLS4yOCwwLC4zMS4zMSwwLDAsMS0uMTQtLjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAu''@;'; put 'put ''MTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMjQuMTgsMjEuODNsLTkuNzcsNC4zNkExLDEsMCwwLDEsMTMsMjUuMjhWMTYuNTZhMSwxLDAsMCwxLDEuNDEtLjkxTDI0LjE4LDIw''@;'; put 'put ''QTEsMSwwLDAsMSwyNC4xOCwyMS44M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi''@;'; put 'put ''IC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksZC5DbHJTaGFwZU1pY3JvcGhvbmU9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI0YzMu''@;'; put 'put ''OSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywzLjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiBNMTMsOWMwLTIuOCwyLjItNSw1LTVzNSwyLjIsNSw1djhcblx0XHRjMCwyLjgtMi4yLDUtNSw1cy01LTIuMi01LTVWOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYuMyw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2''@;'; put 'put ''LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMwLjYsMCwxLTAuNCwxLTFc''@;'; put 'put ''blx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlTWljcm9waG9uZU11dGU9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAu''@;'; put 'put ''NSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUsMjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDRjMi44LDAsNSwyLjIsNSw1djhjMCwwLjQtMC4xLDAuOC0wLjIsMS4ybDEuNiwxLjZjMC40LTAuOSww''@;'; put 'put ''LjYtMS44LDAuNi0yLjhWOWMwLTMuOS0zLjItNy03LjEtNi45XG5cdFx0Yy0yLjksMC01LjYsMS45LTYuNSw0LjdMMTMsOC4zQzEzLjUsNS45LDE1LjYsNC4yLDE4LDR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUuMiwyNi42bDYu''@;'; put 'put ''OSw2LjlsMS40LTEuNEw0LDIuNkwyLjYsNGw4LjQsOC40VjE3YzAsMy45LDMuMSw3LDcsN2MxLjMsMCwyLjUtMC4zLDMuNi0xbDIuMiwyLjJDMjIuMSwyNi40LDIwLjEsMjcsMTgsMjdcblx0XHRjLTUuNCwwLjItOS44LTQuMS0xMC05LjRjMC0wLjIsMC0wLjQsMC0wLjZINmMwLjEsNi4yLDQu''@;'; put 'put ''OCwxMS40LDExLDEydjNoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMwLjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtM0MyMS4yLDI4LjgsMjMuNCwyOCwyNS4yLDI2LjZ6IE0xMy44LDE5LjdDMTMuMywxOC45LDEzLDE4LDEzLDE3di0yLjZsNy4xLDcuMUMxNy45''@;'; put 'put ''LDIyLjUsMTUuMiwyMS44LDEzLjgsMTkuN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LDE3VjljMC0zLjktMy4yLTctNy4xLTYuOWMtMi45LDAtNS42LDEuOS02LjUsNC43bDEzLDEzQzI0LjgsMTguOSwyNSwxNy45LDI1LDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBk''@;'; put 'put ''PSJNMjUuMiwyNi42bDYuOSw2LjlsMS40LTEuNEw0LDIuNkwyLjYsNGw4LjQsOC40VjE3YzAsMy45LDMuMSw3LDcsN2MxLjMsMCwyLjUtMC4zLDMuNi0xbDIuMiwyLjJDMjIuMSwyNi40LDIwLjEsMjcsMTgsMjdcblx0XHRjLTUuNCwwLjItOS44LTQuMS0xMC05LjRjMC0wLjIsMC0wLjQsMC0w''@;'; put 'put ''LjZINmMwLjEsNi4yLDQuOCwxMS40LDExLDEydjNoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMwLjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtM0MyMS4yLDI4LjgsMjMuNCwyOCwyNS4yLDI2LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zIiAvPicpLGQuTWVkaWFTaGFwZXM9e3BsYXk6ZC5DbHJTaGFwZVBsYXkscGF1c2U6ZC5DbHJTaGFwZVBhdXNlLCJzdGVwLWZvcndhcmQiOmQuQ2xyU2hhcGVTdGVwRm9yd2FyZCxzdG9wOmQuQ2xyU2hhcGVTdG9wLHBvd2VyOmQuQ2xyU2hhcGVQb3dlcixyZXdpbmQ6ZC5DbHJTaGFwZVJl''@;'; put 'put ''d2luZCwiZmFzdC1mb3J3YXJkIjpkLkNsclNoYXBlRmFzdEZvcndhcmQsY2FtZXJhOmQuQ2xyU2hhcGVDYW1lcmEsInZpZGVvLWNhbWVyYSI6ZC5DbHJTaGFwZVZpZGVvQ2FtZXJhLHNodWZmbGU6ZC5DbHJTaGFwZVNodWZmbGUsInZvbHVtZS11cCI6ZC5DbHJTaGFwZVZvbHVtZVVwLCJ2b2x1''@;'; put 'put ''bWUtZG93biI6ZC5DbHJTaGFwZVZvbHVtZURvd24sInZvbHVtZS1tdXRlIjpkLkNsclNoYXBlVm9sdW1lTXV0ZSxoZWFkcGhvbmVzOmQuQ2xyU2hhcGVIZWFkcGhvbmVzLCJmaWxtLXN0cmlwIjpkLkNsclNoYXBlRmlsbVN0cmlwLCJtdXNpYy1ub3RlIjpkLkNsclNoYXBlTXVzaWNOb3RlLCJp''@;'; put 'put ''bWFnZS1nYWxsZXJ5IjpkLkNsclNoYXBlSW1hZ2VHYWxsZXJ5LCJyZXBsYXktYWxsIjpkLkNsclNoYXBlUmVwbGF5QWxsLCJyZXBsYXktb25lIjpkLkNsclNoYXBlUmVwbGF5T25lLCJ2aWRlby1nYWxsZXJ5IjpkLkNsclNoYXBlVmlkZW9HYWxsZXJ5LG1pY3JvcGhvbmU6ZC5DbHJTaGFwZU1p''@;'; put 'put ''Y3JvcGhvbmUsIm1pY3JvcGhvbmUtbXV0ZSI6ZC5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlfSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoZC5NZWRpYVNoYXBlcyl9LCIuL3Byb2plY3RzL2lj''@;'; put 'put ''b25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQog''@;'; put 'put ''ICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosZCxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLGQuU29jaWFsU2hhcGVzPWQuQ2xyU2hhcGVIYXNodGFnPWQuQ2xyU2hhcGVDcm93bj1kLkNsclNoYXBlVGh1bWJzRG93bj1kLkNsclNoYXBlVGh1bWJzVXA9ZC5DbHJTaGFwZVNhZEZhY2U9ZC5DbHJTaGFwZU5ldXRyYWxGYWNlPWQuQ2xyU2hhcGVIYXBweUZhY2U9ZC5D''@;'; put 'put ''bHJTaGFwZVBpY3R1cmU9ZC5DbHJTaGFwZUNoYXRCdWJibGU9ZC5DbHJTaGFwZVRhbGtCdWJibGVzPWQuQ2xyU2hhcGVIZWFydEJyb2tlbj1kLkNsclNoYXBlSGVhcnQ9ZC5DbHJTaGFwZUluYm94PWQuQ2xyU2hhcGVGbGFnPWQuQ2xyU2hhcGVUYXNrcz1kLkNsclNoYXBlRW52ZWxvcGU9ZC5D''@;'; put 'put ''bHJTaGFwZUJvb2ttYXJrPWQuQ2xyU2hhcGVIYWxmU3Rhcj1kLkNsclNoYXBlU3Rhcj1kLkNsclNoYXBlU2hhcmU9dm9pZCAwO3ZhciBoPVMoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMi''@;'; put 'put ''KSxvPVMoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxJPVMoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtk''@;'; put 'put ''LkNsclNoYXBlU2hhcmU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1''@;'; put 'put ''LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwx''@;'; put 'put ''LDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0''@;'; put 'put ''LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVoiLz4nKSxkLkNsclNoYXBlU3Rhcj0oMCxvLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwtNy40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4y''@;'; put 'put ''My4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNhLjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5''@;'; put 'put ''LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCwwLDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4z''@;'; put 'put ''NWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEuNDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIu''@;'; put 'put ''MjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1''@;'; put 'put ''YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0''@;'; put 'put ''WiIvPicpLGQuQ2xyU2hhcGVIYWxmU3Rhcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5''@;'; put 'put ''YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwx''@;'; put 'put ''LjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwyLjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4y''@;'; put 'put ''NWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0uMTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIu''@;'; put 'put ''MjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIsMi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUt''@;'; put 'put ''OC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEsLjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRh''@;'; put 'put ''LjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksZC5DbHJTaGFwZUJvb2ttYXJrPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAs''@;'; put 'put ''MCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wxOCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiwwLDAsMCwyNiwyWiIvPicpLGQuQ2xyU2hhcGVFbnZlbG9wZT0oMCxvLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlM''@;'; put 'put ''NCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0u''@;'; put 'put ''ODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAu''@;'; put 'put ''MDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44''@;'; put 'put ''OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEu''@;'; put 'put ''NDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwy''@;'; put 'put ''MC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAt''@;'; put 'put ''LjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwx''@;'; put 'put ''LjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMu''@;'; put 'put ''NjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUs''@;'; put 'put ''MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksZC5DbHJTaGFwZVRhc2tzPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5''@;'; put 'put ''LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43MiwxOWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAsMCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5''@;'; put 'put ''SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIuMzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIg''@;'; put 'put ''ZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSww''@;'; put 'put ''LDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCww''@;'; put 'put ''LDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEz''@;'; put 'put ''LDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0Ey''@;'; put 'put ''LjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCww''@;'; put 'put ''LDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45''@;'; put 'put ''NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEExLjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFo''@;'; put 'put ''My40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFWOS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gy''@;'; put 'put ''Mi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTguMDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcs''@;'; put 'put ''MCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4x''@;'; put 'put ''MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMsNy41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41''@;'; put 'put ''YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQt''@;'; put 'put ''NS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIg''@;'; put 'put ''Y3k9IjYiIHI9IjUiLz4nKSxkLkNsclNoYXBlRmxhZz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEtMVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4xMSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0x''@;'; put 'put ''LjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUsMCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4Ljkz''@;'; put 'put ''LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzks''@;'; put 'put ''MTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwxNC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUu''@;'; put 'put ''MTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwx''@;'; put 'put ''LDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLGQuQ2xyU2hhcGVJbmJveD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwxOCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3''@;'; put 'put ''VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0u''@;'; put 'put ''MS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYuNUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIs''@;'; put 'put ''Ny40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYu''@;'; put 'put ''NDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41''@;'; put 'put ''YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcu''@;'; put 'put ''NTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGQuQ2xyU2hhcGVIZWFydD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4''@;'; put 'put ''LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0y''@;'; put 'put ''LjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEz''@;'; put 'put ''LDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODks''@;'; put 'put ''Myw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxkLkNsclNoYXBlSGVhcnRCcm9rZW49KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4''@;'; put 'put ''LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODksNi4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgx''@;'; put 'put ''QTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSwwLDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYs''@;'; put 'put ''MTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzkt''@;'; put 'put ''OCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCww''@;'; put 'put ''LDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSwwLDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYs''@;'; put 'put ''MGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0''@;'; put 'put ''LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxkLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMz''@;'; put 'put ''TDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWN0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCww''@;'; put 'put ''LDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4xLDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIy''@;'; put 'put ''LDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0y''@;'; put 'put ''SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMs''@;'; put 'put ''MCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEy''@;'; put 'put ''LjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxkLkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCww''@;'; put 'put ''LDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0x''@;'; put 'put ''NC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjguMjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmExLDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwx''@;'; put 'put ''Mi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0''@;'; put 'put ''LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAs''@;'; put 'put ''MS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwzMy4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSww''@;'; put 'put ''LDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwyMC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwuODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAs''@;'; put 'put ''MCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0''@;'; put 'put ''LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFhMSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwxLDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0x''@;'; put 'put ''MGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwx''@;'; put 'put ''LDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCwwLDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44''@;'; put 'put ''NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcuNDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAsMSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSww''@;'; put 'put ''LDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLWJhZGdlIiAvPicpLGQuQ2xyU2hhcGVQaWN0dXJlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01''@;'; put 'put ''LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEs''@;'; put 'put ''MS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNs''@;'; put 'put ''Ni43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''Miw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0''@;'; put 'put ''LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIs''@;'; put 'put ''NlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDEx''@;'; put 'put ''LjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGQuQ2xyU2hhcGVIYXBweUZhY2U9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwx''@;'; put 'put ''OCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywyOC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAs''@;'; put 'put ''MCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44''@;'; put 'put ''OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwxNS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''Lz4nKSxkLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4x''@;'; put 'put ''NiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44''@;'; put 'put ''LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGQuQ2xyU2hhcGVTYWRGYWNlPSgwLG8uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYi''@;'; put 'put ''IGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4xNiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44''@;'; put 'put ''LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksZC5DbHJTaGFwZVRodW1i''@;'; put 'put ''c1VwPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZhMi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4y''@;'; put 'put ''Myw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIuMzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAs''@;'; put 'put ''MS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwx''@;'; put 'put ''LDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYzLDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIs''@;'; put 'put ''NS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwxLDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZVRodW1ic0Rvd249KDAsby5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAs''@;'; put 'put ''MCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEsMSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQu''@;'; put 'put ''MS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCww''@;'; put 'put ''LDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43NiwxMC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjku''@;'; put 'put ''NDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlQ3Jvd249KDAsby5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4z''@;'; put 'put ''OSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUsMjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIu''@;'; put 'put ''MUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42''@;'; put 'put ''NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDksMS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAsMS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAt''@;'; put 'put ''LjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00''@;'; put 'put ''LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTkuOTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCww''@;'; put 'put ''LDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4x''@;'; put 'put ''LDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwy''@;'; put 'put ''Ni4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIu''@;'; put 'put ''NiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIs''@;'; put 'put ''Ni4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCww''@;'; put 'put ''LDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEtMi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUyLDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgx''@;'; put 'put ''LDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwuMzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEsMSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAs''@;'; put 'put ''MC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAsMSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEs''@;'; put 'put ''MS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLGQuQ2xyU2hhcGVIYXNodGFnPSgwLG8uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03''@;'; put 'put ''Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDkuMTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAs''@;'; put 'put ''MSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMuMzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42''@;'; put 'put ''MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAsMCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0''@;'; put 'put ''SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJIOS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1''@;'; put 'put ''LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLThoNmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0x''@;'; put 'put ''MiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLGQuU29jaWFsU2hhcGVzPXtjcm93bjpkLkNsclNoYXBlQ3Jvd24sc2hhcmU6ZC5DbHJTaGFwZVNoYXJlLHN0YXI6ZC5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6ZC5D''@;'; put 'put ''bHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOmQuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpkLkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6SS5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OkkuQ2xyU2hhcGVFdmVudCx0YXNrczpkLkNsclNoYXBlVGFza3MsZmxhZzpkLkNsclNoYXBlRmxhZyxp''@;'; put 'put ''bmJveDpkLkNsclNoYXBlSW5ib3gsaGFzaHRhZzpkLkNsclNoYXBlSGFzaHRhZyxoZWFydDpkLkNsclNoYXBlSGVhcnQsImhlYXJ0LWJyb2tlbiI6ZC5DbHJTaGFwZUhlYXJ0QnJva2VuLCJ0YWxrLWJ1YmJsZXMiOmQuQ2xyU2hhcGVUYWxrQnViYmxlcywiY2hhdC1idWJibGUiOmQuQ2xyU2hh''@;'; put 'put ''cGVDaGF0QnViYmxlLHBpY3R1cmU6ZC5DbHJTaGFwZVBpY3R1cmUsImhhcHB5LWZhY2UiOmQuQ2xyU2hhcGVIYXBweUZhY2UsIm5ldXRyYWwtZmFjZSI6ZC5DbHJTaGFwZU5ldXRyYWxGYWNlLCJzYWQtZmFjZSI6ZC5DbHJTaGFwZVNhZEZhY2UsInRodW1icy11cCI6ZC5DbHJTaGFwZVRodW1i''@;'; put 'put ''c1VwLCJ0aHVtYnMtZG93biI6ZC5DbHJTaGFwZVRodW1ic0Rvd259LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLlNvY2lhbFNoYXBlcywiZmF2b3JpdGUiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Tb2NpYWxTaGFwZXMuc3RhcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLlNvY2lhbFNo''@;'; put 'put ''YXBlcywiZW1haWwiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Tb2NpYWxTaGFwZXMuZW52ZWxvcGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5Tb2NpYWxTaGFwZXMsImRhdGUiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5Tb2NpYWxTaGFwZXMuY2FsZW5kYXIpKSx0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoZC5Tb2NpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RlY2hub2xvZ3ktc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RlY2hub2xvZ3ktc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixkLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5DbHJTaGFwZVZNV0FwcD1kLkNsclNoYXBlVk09ZC5D''@;'; put 'put ''bHJTaGFwZVJvdXRlcj1kLkNsclNoYXBlTmV0d29ya1N3aXRjaD1kLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPWQuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9ZC5DbHJTaGFwZVRhYmxldD1kLkNsclNoYXBlTW9iaWxlPWQuQ2xyU2hhcGVCYXR0ZXJ5PWQuQ2xyU2hhcGVBcHBsaWNhdGlvbj1kLkNs''@;'; put 'put ''clNoYXBlQ29kZT1kLkNsclNoYXBlVGVybWluYWw9ZC5DbHJTaGFwZURpc3BsYXk9ZC5DbHJTaGFwZUNvbXB1dGVyPWQuQ2xyU2hhcGVGbG9wcHk9ZC5DbHJTaGFwZVBsdWdpbj1kLkNsclNoYXBlRG93bmxvYWRDbG91ZD1kLkNsclNoYXBlVXBsb2FkQ2xvdWQ9ZC5DbHJTaGFwZUV4cG9ydD1k''@;'; put 'put ''LkNsclNoYXBlSW1wb3J0PWQuQ2xyU2hhcGVTaGllbGRYPWQuQ2xyU2hhcGVTaGllbGQ9ZC5DbHJTaGFwZVNoaWVsZENoZWNrPWQuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9ZC5DbHJTaGFwZURhdGFDbHVzdGVyPWQuQ2xyU2hhcGVNZW1vcnk9ZC5DbHJTaGFwZUNQVT1kLkNsclNoYXBlQnVpbGRp''@;'; put 'put ''bmc9ZC5DbHJTaGFwZUFwcGxpY2F0aW9ucz1kLkNsclNoYXBlQ2x1c3Rlcj1kLkNsclNoYXBlU3RvcmFnZT1kLkNsclNoYXBlSG9zdD1kLkNsclNoYXBlRGFzaGJvYXJkPWQuQ2xyU2hhcGVNb3VzZT1kLkNsclNoYXBlS2V5Ym9hcmQ9ZC5DbHJTaGFwZURldmljZXM9ZC5DbHJTaGFwZUJhY2t1''@;'; put 'put ''cD1kLkNsclNoYXBlQmFja3VwUmVzdG9yZT1kLkNsclNoYXBlSGFyZERpc2s9ZC5DbHJTaGFwZVJhY2tTZXJ2ZXI9ZC5DbHJTaGFwZVdpZmk9ZC5DbHJTaGFwZUJ1bmRsZT1kLkNsclNoYXBlQmxvY2tzR3JvdXA9ZC5DbHJTaGFwZUJsb2NrPWQuQ2xyU2hhcGVMYXllcnM9ZC5DbHJTaGFwZVVu''@;'; put 'put ''aW5zdGFsbD1kLkNsclNoYXBlSW5zdGFsbD1kLkNsclNoYXBlTm9XaWZpPWQuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9ZC5DbHJTaGFwZVJ1bGVyUGVuY2lsPXZvaWQgMCxkLlRlY2hub2xvZ3lTaGFwZXM9ZC5DbHJTaGFwZUZpbGVTaGFyZTI9ZC5DbHJTaGFwZUNpQ2Q9ZC5DbHJTaGFwZUFuaW1h''@;'; put 'put ''dGlvbj1kLkNsclNoYXBlVGFwZURyaXZlPWQuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9ZC5DbHJDb250cm9sTHVuPWQuQ2xyU2hhcGVQb2Q9ZC5DbHJTaGFwZU5vZGU9ZC5DbHJTaGFwZU5hbWVzcGFjZT1kLkNsclNoYXBlTm9kZXM9ZC5DbHJTaGFwZU5vZGVHcm91cD1kLkNsclNoYXBlU3RvcmFn''@;'; put 'put ''ZUFkYXB0ZXI9ZC5DbHJTaGFwZUhvc3RHcm91cD1kLkNsclNoYXBlU3F1aWQ9ZC5DbHJTaGFwZUNhcGFjaXRvcj1kLkNsclNoYXBlUmVzaXN0b3I9ZC5DbHJTaGFwZUluZHVjdG9yPWQuQ2xyU2hhcGVSYWRhcj1kLkNsclNoYXBlVXNiPWQuQ2xyU2hhcGVRckNvZGU9ZC5DbHJTaGFwZUZpbGVT''@;'; put 'put ''aGFyZT1kLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPWQuQ2xyU2hhcGVDb250YWluZXI9ZC5DbHJTaGFwZUNkRHZkPWQuQ2xyU2hhcGVCYXJDb2RlPWQuQ2xyU2hhcGVBdG9tPWQuQ2xyU2hhcGVBc3NpZ25Vc2VyPWQuQ2xyU2hhcGVQcm9jZXNzT25WTT1kLkNsclNoYXBlQmx1ZXRvb3RoT2Zm''@;'; put 'put ''PWQuQ2xyU2hhcGVCbHVldG9vdGg9ZC5DbHJTaGFwZVNTRD1kLkNsclNoYXBlTlZNZT1kLkNsclNoYXBlSGFyZERyaXZlRGlza3M9ZC5DbHJTaGFwZUhhcmREcml2ZT1kLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1kLkNsclNoYXBlRmxhc2s9ZC5DbHJTaGFwZUhlbGl4PWQuQ2xyU2hhcGVEZXBs''@;'; put 'put ''b3k9ZC5DbHJTaGFwZUNsb3VkVHJhZmZpYz1kLkNsclNoYXBlQ2xvdWRTY2FsZT1kLkNsclNoYXBlQ2xvdWROZXR3b3JrPWQuQ2xyU2hhcGVVbmxpbms9ZC5DbHJTaGFwZUxpbms9ZC5DbHJTaGFwZURpc2Nvbm5lY3Q9ZC5DbHJTaGFwZUNvbm5lY3Q9ZC5DbHJTaGFwZVVuYXJjaGl2ZT1kLkNs''@;'; put 'put ''clNoYXBlQXJjaGl2ZT1kLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBoPVMoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxvPVMoCi8qISAuLi91dGlscy9zdmctdGFnLWdl''@;'; put 'put ''bmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtkLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAsby5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAx''@;'; put 'put ''Ny40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42''@;'; put 'put ''SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4wOEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgy''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4zN1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBI''@;'; put 'put ''NC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0xMCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicp''@;'; put 'put ''LGQuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwz''@;'; put 'put ''Mi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODdsNSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2''@;'; put 'put ''LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMuODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43''@;'; put 'put ''LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCww''@;'; put 'put ''LDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2''@;'; put 'put ''LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEzMy43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJM''@;'; put 'put ''MTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLGQuQ2xyU2hhcGVOb1dpZmk9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEs''@;'; put 'put ''MCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgs''@;'; put 'put ''MCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEsMzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2''@;'; put 'put ''YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFB''@;'; put 'put ''MjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkExLjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwxMi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEs''@;'; put 'put ''My42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEu''@;'; put 'put ''NSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0xLjQxLTI2LTI2WiIvPlxuJyksZC5DbHJTaGFwZUluc3RhbGw9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAu''@;'; put 'put ''OTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1''@;'; put 'put ''bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjky''@;'; put 'put ''QTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAs''@;'; put 'put ''MC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1''@;'; put 'put ''LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksZC5DbHJTaGFwZVVuaW5zdGFsbD0oMCxvLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4''@;'; put 'put ''bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAs''@;'; put 'put ''MCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4y''@;'; put 'put ''M2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYx''@;'; put 'put ''MEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmEx''@;'; put 'put ''LDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwzLjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEs''@;'; put 'put ''MSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMw''@;'; put 'put ''YTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksZC5DbHJTaGFwZUxheWVycz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2''@;'; put 'put ''bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYu''@;'; put 'put ''ODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEs''@;'; put 'put ''Ljg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFs''@;'; put 'put ''LTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEsMzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLGQuQ2xyU2hhcGVCbG9j''@;'; put 'put ''az0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIs''@;'; put 'put ''OS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEtNS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSww''@;'; put 'put ''LDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4xLTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4x''@;'; put 'put ''Miw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCww''@;'; put 'put ''LDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4''@;'; put 'put ''LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAsMTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAsMCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwx''@;'; put 'put ''LDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgLz4nKSxkLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42''@;'; put 'put ''OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43''@;'; put 'put ''NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSww''@;'; put 'put ''LDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4xMSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYu''@;'; put 'put ''NDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgt''@;'; put 'put ''My4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAs''@;'; put 'put ''MCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCww''@;'; put 'put ''LDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02Ljks''@;'; put 'put ''My4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42''@;'; put 'put ''LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgtMi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTks''@;'; put 'put ''MjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwx''@;'; put 'put ''OC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN''@;'; put 'put ''MjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5''@;'; put 'put ''LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgt''@;'; put 'put ''LjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0y''@;'; put 'put ''NS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4y''@;'; put 'put ''NywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCww''@;'; put 'put ''LDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEs''@;'; put 'put ''MCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEy''@;'; put 'put ''LjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIg''@;'; put 'put ''Y3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGQuQ2xyU2hhcGVCdW5kbGU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1''@;'; put 'put ''Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIuMTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCww''@;'; put 'put ''LC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxkLkNsclNoYXBlV2lmaT0o''@;'; put 'put ''MCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEu''@;'; put 'put ''MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwx''@;'; put 'put ''LDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEu''@;'; put 'put ''MTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQs''@;'; put 'put ''NCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0yOS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwx''@;'; put 'put ''LDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEu''@;'; put 'put ''NywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSwwLDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41''@;'; put 'put ''MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksZC5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsby5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42''@;'; put 'put ''OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMw''@;'; put 'put ''LDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9''@;'; put 'put ''IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''OSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBIMTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4x''@;'; put 'put ''Myw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUyLDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYy''@;'; put 'put ''SDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbicpLGQuQ2xyU2hhcGVIYXJkRGlzaz0oMCxvLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40''@;'; put 'put ''NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0z''@;'; put 'put ''NCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0z''@;'; put 'put ''Mi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwy''@;'; put 'put ''MEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxkLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxv''@;'; put 'put ''LmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcs''@;'; put 'put ''NlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEu''@;'; put 'put ''NTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4x''@;'; put 'put ''NiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIy''@;'; put 'put ''NiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2''@;'; put 'put ''LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42''@;'; put 'put ''NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQs''@;'; put 'put ''MTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMuNjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYs''@;'; put 'put ''MTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwy''@;'; put 'put ''LjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40Mywz''@;'; put 'put ''My4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41''@;'; put 'put ''QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksZC5DbHJTaGFwZUJhY2t1cD0oMCxvLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMxLDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4w''@;'; put 'put ''N2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4z''@;'; put 'put ''NUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3''@;'; put 'put ''LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0y''@;'; put 'put ''SDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0i''@;'; put 'put ''MiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45Mywx''@;'; put 'put ''MkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIu''@;'; put 'put ''MzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwx''@;'; put 'put ''LDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4y''@;'; put 'put ''LDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2Mt''@;'; put 'put ''LjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwx''@;'; put 'put ''LTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0''@;'; put 'put ''bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0''@;'; put 'put ''Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2''@;'; put 'put ''LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwy''@;'; put 'put ''NHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksZC5DbHJTaGFwZURldmljZXM9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCww''@;'; put 'put ''LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhWMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIy''@;'; put 'put ''SDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwyaDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJW''@;'; put 'put ''NkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLGQuQ2xyU2hhcGVLZXlib2FyZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2MkgxMVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1''@;'; put 'put ''LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSxkLkNsclNoYXBlTW91c2U9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYyNGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAs''@;'; put 'put ''OCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMsMCwwLDEsMi42LDBaIi8+XG4nKSxkLkNsclNoYXBlRGFzaGJvYXJkPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQu''@;'; put 'put ''MjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUs''@;'; put 'put ''MS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1LjkyLTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIuMDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZh''@;'; put 'put ''MTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMx''@;'; put 'put ''LjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJsNS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4''@;'; put 'put ''LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYzLDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgs''@;'; put 'put ''MzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQs''@;'; put 'put ''MzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMuNUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQu''@;'; put 'put ''NTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcs''@;'; put 'put ''MjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksZC5DbHJTaGFwZUhvc3Q9KDAsby5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwyLjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAs''@;'; put 'put ''MCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAs''@;'; put 'put ''MCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0i''@;'; put 'put ''MTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4y''@;'; put 'put ''LTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMwLTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01Ljct''@;'; put 'put ''OS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44''@;'; put 'put ''LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41''@;'; put 'put ''LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMt''@;'; put 'put ''MS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2Mt''@;'; put 'put ''MiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwx''@;'; put 'put ''LjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDEx''@;'; put 'put ''LjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAuMSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDEx''@;'; put 'put ''LjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9''@;'; put 'put ''IjUuOSIgcj0iNSIvPlxuJyksZC5DbHJTaGFwZVN0b3JhZ2U9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdj''@;'; put 'put ''MCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5''@;'; put 'put ''LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2''@;'; put 'put ''LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDksMTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAs''@;'; put 'put ''MCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4z''@;'; put 'put ''NHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44''@;'; put 'put ''Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwxLjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQz''@;'; put 'put ''LDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4xMy0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAs''@;'; put 'put ''OS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMywwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdW''@;'; put 'put ''Ni44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00''@;'; put 'put ''LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5''@;'; put 'put ''LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMsNi43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcu''@;'; put 'put ''OTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAs''@;'; put 'put ''MCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2''@;'; put 'put ''LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0u''@;'; put 'put ''MTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCww''@;'; put 'put ''LDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZhNy40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40''@;'; put 'put ''LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUuMjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQu''@;'; put 'put ''MDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSxk''@;'; put 'put ''LkNsclNoYXBlQ2x1c3Rlcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwxLjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDgu''@;'; put 'put ''NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODlsLjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEuNjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAzMiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9''@;'; put 'put ''IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEEx''@;'; put 'put ''LjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJI''@;'; put 'put ''MzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42''@;'; put 'put ''OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41''@;'; put 'put ''IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCww''@;'; put 'put ''LDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYs''@;'; put 'put ''MS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3''@;'; put 'put ''QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxvLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4''@;'; put 'put ''IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9p''@;'; put 'put ''bnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0''@;'; put 'put ''IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMw''@;'; put 'put ''IDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4''@;'; put 'put ''IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAzMiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAg''@;'; put 'put ''MTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz''@;'; put 'put ''MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0''@;'; put 'put ''IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDkuODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxkLkNsclNoYXBlQnVpbGRpbmc9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAs''@;'; put 'put ''MCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIy''@;'; put 'put ''MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIu''@;'; put 'put ''MTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv''@;'; put 'put ''biBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01''@;'; put 'put ''SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVpt''@;'; put 'put ''MC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h''@;'; put 'put ''bGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVI''@;'; put 'put ''N1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVIMTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUsNy41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgy''@;'; put 'put ''NFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhWMzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEy''@;'; put 'put ''IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9''@;'; put 'put ''IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYi''@;'; put 'put ''IHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZUNQVT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEuNUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSww''@;'; put 'put ''LTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4x''@;'; put 'put ''LDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEs''@;'; put 'put ''MCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1''@;'; put 'put ''Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZI''@;'; put 'put ''MzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCww''@;'; put 'put ''LDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAs''@;'; put 'put ''MS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1''@;'; put 'put ''SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEu''@;'; put 'put ''NiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYz''@;'; put 'put ''MGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMu''@;'; put 'put ''NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2''@;'; put 'put ''djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45''@;'; put 'put ''VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMu''@;'; put 'put ''NTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRW''@;'; put 'put ''My44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEu''@;'; put 'put ''OC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTgu''@;'; put 'put ''MTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4x''@;'; put 'put ''QTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4y''@;'; put 'put ''YS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxkLkNsclNoYXBlTWVtb3J5PSgwLG8uY2xySWNvblNWRykoJzxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0''@;'; put 'put ''VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41NmwxLjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJBNy40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5''@;'; put 'put ''djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUu''@;'; put 'put ''NTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4x''@;'; put 'put ''LDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgs''@;'; put 'put ''MEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhDMjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUt''@;'; put 'put ''MS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42''@;'; put 'put ''Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQu''@;'; put 'put ''MzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEy''@;'; put 'put ''Ljc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0x''@;'; put 'put ''LjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQs''@;'; put 'put ''NS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwxOC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3''@;'; put 'put ''LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4z''@;'; put 'put ''OHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUt''@;'; put 'put ''NC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcu''@;'; put 'put ''OTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIy''@;'; put 'put ''LjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwx''@;'; put 'put ''NC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEu''@;'; put 'put ''NDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4x''@;'; put 'put ''NC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEu''@;'; put 'put ''NDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMw''@;'; put 'put ''IiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYs''@;'; put 'put ''OSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMu''@;'; put 'put ''NzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2''@;'; put 'put ''LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45Mywx''@;'; put 'put ''MC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgs''@;'; put 'put ''MjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45''@;'; put 'put ''MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3''@;'; put 'put ''LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4w''@;'; put 'put ''OCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1''@;'; put 'put ''LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2''@;'; put 'put ''Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUsMTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwx''@;'; put 'put ''NCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45''@;'; put 'put ''MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04''@;'; put 'put ''LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1LjkxLDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCww''@;'; put 'put ''LDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44''@;'; put 'put ''NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTIt''@;'; put 'put ''LjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSwwLDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41''@;'; put 'put ''MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZVNoaWVsZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVh''@;'; put 'put ''NDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0x''@;'; put 'put ''MiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42''@;'; put 'put ''NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQu''@;'; put 'put ''MTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4x''@;'; put 'put ''LDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02''@;'; put 'put ''LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQu''@;'; put 'put ''MzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEz''@;'; put 'put ''LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAnKSxkLkNsclNoYXBlU2hpZWxkWD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQz''@;'; put 'put ''Ljc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEy''@;'; put 'put ''LTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00LjgxLDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0Ljgx''@;'; put 'put ''LTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0u''@;'; put 'put ''NTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEu''@;'; put 'put ''NCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxkLkNsclNoYXBlSW1wb3J0PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAs''@;'; put 'put ''MjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwx''@;'; put 'put ''LjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZI''@;'; put 'put ''MTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40''@;'; put 'put ''MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEz''@;'; put 'put ''LjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFo''@;'; put 'put ''Ny42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJs''@;'; put 'put ''LTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZUV4cG9ydD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgx''@;'; put 'put ''MC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0x''@;'; put 'put ''LjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42''@;'; put 'put ''OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYt''@;'; put 'put ''LjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1''@;'; put 'put ''LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIyLjc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0x''@;'; put 'put ''MiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYs''@;'; put 'put ''Ni4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwx''@;'; put 'put ''LDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4x''@;'; put 'put ''NGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIu''@;'; put 'put ''MjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUs''@;'; put 'put ''MTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIu''@;'; put 'put ''NTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUs''@;'; put 'put ''MCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhB''@;'; put 'put ''Ny43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43''@;'; put 'put ''NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxkLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAu''@;'; put 'put ''MzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40Myww''@;'; put 'put ''LDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEuMjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEs''@;'; put 'put ''MSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDct''@;'; put 'put ''LjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Ni44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0y''@;'; put 'put ''LDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTgu''@;'; put 'put ''NzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42''@;'; put 'put ''NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwu''@;'; put 'put ''MDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQtMTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVQbHVnaW49KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5''@;'; put 'put ''LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3''@;'; put 'put ''YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwx''@;'; put 'put ''NUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMs''@;'; put 'put ''MCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx''@;'; put 'put ''LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCww''@;'; put 'put ''LDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEs''@;'; put 'put ''MTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIz''@;'; put 'put ''SDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0''@;'; put 'put ''LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAs''@;'; put 'put ''MCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiww''@;'; put 'put ''LDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAs''@;'; put 'put ''NS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44''@;'; put 'put ''MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gy''@;'; put 'put ''djguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxkLkNsclNoYXBlRmxvcHB5PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40''@;'; put 'put ''My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwzLjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3''@;'; put 'put ''LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwx''@;'; put 'put ''LDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEt''@;'; put 'put ''Mi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0y''@;'; put 'put ''NiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+''@;'; put 'put ''XG4gICAgICAgICcpLGQuQ2xyU2hhcGVDb21wdXRlcj0oMCxvLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAyNC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41''@;'; put 'put ''LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2''@;'; put 'put ''YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4x''@;'; put 'put ''NS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42''@;'; put 'put ''LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEuNSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEu''@;'; put 'put ''MjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41''@;'; put 'put ''NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0x''@;'; put 'put ''LjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjki''@;'; put 'put ''IHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3''@;'; put 'put ''VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx''@;'; put 'put ''TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwx''@;'; put 'put ''LjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwx''@;'; put 'put ''My4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZURpc3BsYXk9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCww''@;'; put 'put ''LDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYg''@;'; put 'put ''Ni4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3''@;'; put 'put ''LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx''@;'; put 'put ''LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4xNiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIs''@;'; put 'put ''MCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwz''@;'; put 'put ''Wk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDku''@;'; put 'put ''OTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIw''@;'; put 'put ''LjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAs''@;'; put 'put ''MCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSww''@;'; put 'put ''LDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZVRlcm1pbmFsPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhIMzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3''@;'; put 'put ''IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAx''@;'; put 'put ''My40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIx''@;'; put 'put ''LjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIs''@;'; put 'put ''MCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYyLjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZUNvZGU9KDAs''@;'; put 'put ''by5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEsMSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwz''@;'; put 'put ''LjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; put 'put ''Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41Niwx''@;'; put 'put ''MS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAsMS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSww''@;'; put 'put ''LDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40''@;'; put 'put ''NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAsMCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxkLkNsclNo''@;'; put 'put ''YXBlQXBwbGljYXRpb249KDAsby5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMydjQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVCYXR0ZXJ5PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwx''@;'; put 'put ''MS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEy''@;'; put 'put ''LDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEu''@;'; put 'put ''ODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjks''@;'; put 'put ''MTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMu''@;'; put 'put ''NTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41Nywx''@;'; put 'put ''LjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwx''@;'; put 'put ''MS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCww''@;'; put 'put ''LDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wx''@;'; put 'put ''Ni45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0''@;'; put 'put ''Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4''@;'; put 'put ''YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYs''@;'; put 'put ''MCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEu''@;'; put 'put ''MDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZU1vYmlsZT0oMCxvLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxkLkNsclNoYXBlVGFibGV0PSgwLG8uY2xySWNvblNWRykoJzxyZWN0IHg9''@;'; put 'put ''IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAs''@;'; put 'put ''MCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0''@;'; put 'put ''QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxkLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThh''@;'; put 'put ''MSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSww''@;'; put 'put ''LDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjky''@;'; put 'put ''LDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMu''@;'; put 'put ''NmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEu''@;'; put 'put ''OTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAs''@;'; put 'put ''MCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAs''@;'; put 'put ''MCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCwwLDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4y''@;'; put 'put ''OSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAt''@;'; put 'put ''Ni4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0''@;'; put 'put ''LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2''@;'; put 'put ''LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQx''@;'; put 'put ''LjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTgu''@;'; put 'put ''NDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEuOTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIu''@;'; put 'put ''NzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3''@;'; put 'put ''LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCww''@;'; put 'put ''LDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcu''@;'; put 'put ''NTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEy''@;'; put 'put ''LjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4y''@;'; put 'put ''M2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUs''@;'; put 'put ''MmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAs''@;'; put 'put ''MS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcu''@;'; put 'put ''NTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQz''@;'; put 'put ''LS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFo''@;'; put 'put ''MGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAs''@;'; put 'put ''MCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAs''@;'; put 'put ''MCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1''@;'; put 'put ''LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4''@;'; put 'put ''LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIuNzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNI''@;'; put 'put ''MjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3''@;'; put 'put ''LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIs''@;'; put 'put ''MC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4xMi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwx''@;'; put 'put ''LjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAsMCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgs''@;'; put 'put ''Mi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUs''@;'; put 'put ''MjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEsMTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0y''@;'; put 'put ''Ljg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJj''@;'; put 'put ''MC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTksMCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCww''@;'; put 'put ''LDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSww''@;'; put 'put ''LDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1''@;'; put 'put ''LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwy''@;'; put 'put ''NSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAt''@;'; put 'put ''LjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4xNCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4''@;'; put 'put ''LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAsMC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNh''@;'; put 'put ''MS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWExLjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZs''@;'; put 'put ''LjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYyLS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0x''@;'; put 'put ''LjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAsMSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTIt''@;'; put 'put ''LjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4yMi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUz''@;'; put 'put ''LDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTktMS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIx''@;'; put 'put ''LjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcu''@;'; put 'put ''MzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0''@;'; put 'put ''LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCww''@;'; put 'put ''LDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5''@;'; put 'put ''LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgtNy4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1''@;'; put 'put ''LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEu''@;'; put 'put ''OTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwxLDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40''@;'; put 'put ''NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41''@;'; put 'put ''M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDks''@;'; put 'put ''MTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0zMiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0i''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4x''@;'; put 'put ''MiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40''@;'; put 'put ''MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEu''@;'; put 'put ''OCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5''@;'; put 'put ''LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCww''@;'; put 'put ''LDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAsMjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAs''@;'; put 'put ''MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVSb3V0ZXI9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCww''@;'; put 'put ''LTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEs''@;'; put 'put ''MCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEs''@;'; put 'put ''MCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlh''@;'; put 'put ''MSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQx''@;'; put 'put ''TDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEs''@;'; put 'put ''MCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEs''@;'; put 'put ''OC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40Mkwz''@;'; put 'put ''MC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTlo''@;'; put 'put ''Ny42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjguOCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCww''@;'; put 'put ''LDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40''@;'; put 'put ''YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wt''@;'; put 'put ''Mi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRs''@;'; put 'put ''Mi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42''@;'; put 'put ''SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44''@;'; put 'put ''LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4x''@;'; put 'put ''NUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZVZNPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwy''@;'; put 'put ''LDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhl''@;'; put 'put ''aWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMu''@;'; put 'put ''NWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJo''@;'; put 'put ''NHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5''@;'; put 'put ''LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMuNTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEuNnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg''@;'; put 'put ''ICAgICcpLGQuQ2xyU2hhcGVWTVdBcHA9KDAsby5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAz''@;'; put 'put ''MCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9''@;'; put 'put ''IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHln''@;'; put 'put ''b24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9''@;'; put 'put ''IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAy''@;'; put 'put ''MC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2''@;'; put 'put ''Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAz''@;'; put 'put ''MiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAy''@;'; put 'put ''OCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCwwLDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''NyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiww''@;'; put 'put ''LDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwy''@;'; put 'put ''Ny40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3''@;'; put 'put ''LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQu''@;'; put 'put ''MzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQs''@;'; put 'put ''MTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45''@;'; put 'put ''MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAu''@;'; put 'put ''NDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42''@;'; put 'put ''SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2''@;'; put 'put ''LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAs''@;'; put 'put ''MCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu''@;'; put 'put ''NjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5''@;'; put 'put ''LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIu''@;'; put 'put ''MzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCww''@;'; put 'put ''LDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxkLkNsclNoYXBlQXJjaGl2ZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMsMCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEsMjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVWM2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAs''@;'; put 'put ''MSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEyczAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTQiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVVbmFyY2hpdmU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlW''@;'; put 'put ''MTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEz''@;'; put 'put ''LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43''@;'; put 'put ''OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgy''@;'; put 'put ''MC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCww''@;'; put 'put ''LDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxkLkNsclNoYXBlQ29ubmVjdD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIy''@;'; put 'put ''LDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVEaXNj''@;'; put 'put ''b25uZWN0PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAsMCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwx''@;'; put 'put ''aDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1''@;'; put 'put ''LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICcpLGQuQ2xyU2hhcGVMaW5rPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwxLTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEu''@;'; put 'put ''NzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcu''@;'; put 'put ''NiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcuODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRh''@;'; put 'put ''NCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0xLjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42''@;'; put 'put ''OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZVVubGluaz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUu''@;'; put 'put ''OTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQu''@;'; put 'put ''NzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxkLkNsclNoYXBlQ2xvdWROZXR3b3JrPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41''@;'; put 'put ''NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEs''@;'; put 'put ''MTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0y''@;'; put 'put ''LjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEu''@;'; put 'put ''MTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwzLjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIu''@;'; put 'put ''MzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45''@;'; put 'put ''MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwyLjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42''@;'; put 'put ''NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4x''@;'; put 'put ''Niw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJIMTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwu''@;'; put 'put ''MTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIw''@;'; put 'put ''LjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEu''@;'; put 'put ''ODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4yNSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUt''@;'; put 'put ''Ljg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCww''@;'; put 'put ''LDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4y''@;'; put 'put ''NWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZURlcGxveT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAs''@;'; put 'put ''MS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwx''@;'; put 'put ''LDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdBMSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIx''@;'; put 'put ''LDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2''@;'; put 'put ''bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZUhlbGl4PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwx''@;'; put 'put ''LS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0u''@;'; put 'put ''NDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0x''@;'; put 'put ''LjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEu''@;'; put 'put ''NjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4x''@;'; put 'put ''NSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwyMS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwuNDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41''@;'; put 'put ''MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwxLTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcs''@;'; put 'put ''My41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1''@;'; put 'put ''LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIsMS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIs''@;'; put 'put ''Mi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAsMCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1''@;'; put 'put ''LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEu''@;'; put 'put ''MjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVGbGFzaz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwzNEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0y''@;'; put 'put ''LjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4wNUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRMNC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMx''@;'; put 'put ''LDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsby5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQuNzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJhMTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2''@;'; put 'put ''LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcs''@;'; put 'put ''MCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAs''@;'; put 'put ''MCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYsMCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1''@;'; put 'put ''LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiww''@;'; put 'put ''LDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCwwLDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEu''@;'; put 'put ''MzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYsMCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMu''@;'; put 'put ''MzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAsMCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4z''@;'; put 'put ''NS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0y''@;'; put 'put ''LS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4wN2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCww''@;'; put 'put ''LDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4z''@;'; put 'put ''Ni4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4w''@;'; put 'put ''NWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIsMzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCww''@;'; put 'put ''LC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAsMCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksZC5DbHJT''@;'; put 'put ''aGFwZUhhcmREcml2ZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5''@;'; put 'put ''LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEy''@;'; put 'put ''LjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEuODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCwwLDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAsMC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAs''@;'; put 'put ''MCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSwwLDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0z''@;'; put 'put ''LjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4zMSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5''@;'; put 'put ''LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhBOS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03''@;'; put 'put ''LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYsMTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEs''@;'; put 'put ''MzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxvLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZBMS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhI''@;'; put 'put ''MTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyMy42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAs''@;'; put 'put ''MSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFh''@;'; put 'put ''LjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMsNC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEsMCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAs''@;'; put 'put ''MTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAs''@;'; put 'put ''My43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3''@;'; put 'put ''Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYyLDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAs''@;'; put 'put ''MCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4xM2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwx''@;'; put 'put ''LDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUt''@;'; put 'put ''MS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVOVk1lPSgwLG8uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRIMjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''MTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEsMSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCww''@;'; put 'put ''LDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksZC5DbHJTaGFwZVNTRD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0''@;'; put 'put ''QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAu''@;'; put 'put ''MjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEuMDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0y''@;'; put 'put ''LjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwx''@;'; put 'put ''MCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIwLjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5Ljcz''@;'; put 'put ''LDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRj''@;'; put 'put ''MS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0''@;'; put 'put ''aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEuMjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFpt''@;'; put 'put ''NS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIs''@;'; put 'put ''MS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2''@;'; put 'put ''LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4z''@;'; put 'put ''Ny0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIuMjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwy''@;'; put 'put ''Mi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGQuQ2xyU2hhcGVCbHVldG9vdGg9KDAsby5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwx''@;'; put 'put ''LDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4y''@;'; put 'put ''My02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMu''@;'; put 'put ''NiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVWMTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwx''@;'; put 'put ''LjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIuMzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwy''@;'; put 'put ''Ni41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwx''@;'; put 'put ''Ni42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwx''@;'; put 'put ''OSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0EyLDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUu''@;'; put 'put ''NDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0zLjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIu''@;'; put 'put ''NzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcs''@;'; put 'put ''MS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxkLkNsclNoYXBlUHJvY2Vzc09uVk09KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQu''@;'; put 'put ''NDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40NiwxMi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCww''@;'; put 'put ''LDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwxLjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEs''@;'; put 'put ''MSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIsMTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNhMSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwx''@;'; put 'put ''LDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0x''@;'; put 'put ''LDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGQuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUzLDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2''@;'; put 'put ''LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMxLjg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTgu''@;'; put 'put ''NjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2LjgxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQu''@;'; put 'put ''ODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCwwLS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4''@;'; put 'put ''bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMuNzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGQuQ2xyU2hhcGVBdG9tPSgwLG8uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwyLjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIy''@;'; put 'put ''LDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43''@;'; put 'put ''OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQs''@;'; put 'put ''MCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAs''@;'; put 'put ''My42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02''@;'; put 'put ''LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1''@;'; put 'put ''LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2''@;'; put 'put ''YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCww''@;'; put 'put ''LDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwy''@;'; put 'put ''Mi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMu''@;'; put 'put ''NDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTct''@;'; put 'put ''LjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0My''@;'; put 'put ''Ljg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwyNS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQs''@;'; put 'put ''MTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiwwLDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUz''@;'; put 'put ''LTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjItLjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUs''@;'; put 'put ''MS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAsMCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCww''@;'; put 'put ''LDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUt''@;'; put 'put ''NC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwx''@;'; put 'put ''LTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIyLjg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjExKSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVCYXJDb2Rl''@;'; put 'put ''PSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCww''@;'; put 'put ''LDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLGQuQ2xyU2hhcGVDZER2ZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0''@;'; put 'put ''LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIu''@;'; put 'put ''ODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkEx''@;'; put 'put ''MC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMw''@;'; put 'put ''LjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4xMmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTguMjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwx''@;'; put 'put ''NiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdBOC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4x''@;'; put 'put ''MywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCwwLTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43''@;'; put 'put ''NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlQ29udGFpbmVyPSgwLG8uY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhWMjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCww''@;'; put 'put ''LDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjgu''@;'; put 'put ''OCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzksMCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEu''@;'; put 'put ''NzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEsLjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEt''@;'; put 'put ''Ljc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQu''@;'; put 'put ''Q2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQuMTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIuNzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0''@;'; put 'put ''LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUtMTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgx''@;'; put 'put ''OGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43''@;'; put 'put ''djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCww''@;'; put 'put ''LDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43Ljcs''@;'; put 'put ''MCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2''@;'; put 'put ''LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEyOSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYs''@;'; put 'put ''MTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxkLkNsclNoYXBlRmlsZVNoYXJlPSgwLG8uY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2''@;'; put 'put ''LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48''@;'; put 'put ''cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEt''@;'; put 'put ''Mi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwxLC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZVFyQ29kZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiwwLDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAsMCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTgg''@;'; put 'put ''MTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAy''@;'; put 'put ''MiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIg''@;'; put 'put ''MjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBwb2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIw''@;'; put 'put ''IDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAyOCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTgg''@;'; put 'put ''MjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxkLkNsclNoYXBlVXNiPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIu''@;'; put 'put ''ODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAtMywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAsMCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEt''@;'; put 'put ''Mi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwzLjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43''@;'; put 'put ''OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42''@;'; put 'put ''OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMx''@;'; put 'put ''YS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIuMjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCww''@;'; put 'put ''LTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJoNC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAs''@;'; put 'put ''LjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVSYWRhcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIs''@;'; put 'put ''MThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTkuNCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNz''@;'; put 'put ''LTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2''@;'; put 'put ''LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRT''@;'; put 'put ''NCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03''@;'; put 'put ''LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywyLjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0''@;'; put 'put ''YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIu''@;'; put 'put ''NDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwx''@;'; put 'put ''Mi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcsMi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIu''@;'; put 'put ''ODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAsMCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcy''@;'; put 'put ''LDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0xLjg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45''@;'; put 'put ''M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwxNC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTEx''@;'; put 'put ''LjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcsMCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSww''@;'; put 'put ''LDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEsMSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4''@;'; put 'put ''bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0x''@;'; put 'put ''LjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZUNhcGFjaXRvcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEs''@;'; put 'put ''MSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41''@;'; put 'put ''NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxkLkNsclNoYXBlU3F1aWQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBW''@;'; put 'put ''NkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSwwLTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEt''@;'; put 'put ''LjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAs''@;'; put 'put ''MywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCww''@;'; put 'put ''LDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEs''@;'; put 'put ''MCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxkLkNsclNoYXBlSG9zdEdyb3VwPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRBMS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJW''@;'; put 'put ''MzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCww''@;'; put 'put ''LDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIg''@;'; put 'put ''QzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwzMS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwx''@;'; put 'put ''MS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4x''@;'; put 'put ''LDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIz''@;'; put 'put ''LjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksZC5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwx''@;'; put 'put ''LDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2''@;'; put 'put ''IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01Ii8+JyksZC5DbHJTaGFwZU5vZGVHcm91cD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1YxMy4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42''@;'; put 'put ''NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEs''@;'; put 'put ''MCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdM''@;'; put 'put ''MzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0xVjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcu''@;'; put 'put ''MzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGQuQ2xyU2hhcGVOb2Rlcz0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQuOXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIi8+JyksZC5DbHJTaGFwZU5hbWVzcGFjZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwxLDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4y''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDkuNjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDku''@;'; put 'put ''NjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2''@;'; put 'put ''NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGQuQ2xyU2hhcGVOb2RlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4z''@;'; put 'put ''M1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksZC5DbHJTaGFwZVBvZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2''@;'; put 'put ''LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwy''@;'; put 'put ''MWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxkLkNsckNvbnRyb2xMdW49KDAsby5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4''@;'; put 'put ''LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4y''@;'; put 'put ''OCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1''@;'; put 'put ''LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEs''@;'; put 'put ''MUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2''@;'; put 'put ''LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4z''@;'; put 'put ''LDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxu''@;'; put 'put ''ICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4w''@;'; put 'put ''OSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjda''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4''@;'; put 'put ''LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3''@;'; put 'put ''Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMw''@;'; put 'put ''Yy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0''@;'; put 'put ''aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAs''@;'; put 'put ''MSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgz''@;'; put 'put ''LDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEy''@;'; put 'put ''NS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjks''@;'; put 'put ''Mi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjItLjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCww''@;'; put 'put ''LDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4z''@;'; put 'put ''LDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAs''@;'; put 'put ''MS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIu''@;'; put 'put ''NzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwuNDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4x''@;'; put 'put ''NiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwz''@;'; put 'put ''MmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEu''@;'; put 'put ''MjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcp''@;'; put 'put ''LGQuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsby5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZB''@;'; put 'put ''MiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44LjgsMCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIy''@;'; put 'put ''MCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41''@;'; put 'put ''OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZB''@;'; put 'put ''MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIx''@;'; put 'put ''LjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMy''@;'; put 'put ''SDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0''@;'; put 'put ''VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgt''@;'; put 'put ''Mkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJI''@;'; put 'put ''MTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRI''@;'; put 'put ''MTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5''@;'; put 'put ''LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cbiAgJyksZC5DbHJTaGFwZVRhcGVEcml2ZT0oMCxvLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUzLDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4z''@;'; put 'put ''MywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQuNTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIu''@;'; put 'put ''OTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4LjgxLDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIu''@;'; put 'put ''OTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYs''@;'; put 'put ''Ny42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQuNTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwx''@;'; put 'put ''LDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAsMCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAs''@;'; put 'put ''MCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEs''@;'; put 'put ''MCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZW''@;'; put 'put ''MTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGQuQ2xyU2hhcGVBbmltYXRpb249KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0x''@;'; put 'put ''LjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSww''@;'; put 'put ''LDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIyLDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIuMTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAs''@;'; put 'put ''Myw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMs''@;'; put 'put ''OC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIsMTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxkLkNsclNoYXBl''@;'; put 'put ''Q2lDZD0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwxLC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMu''@;'; put 'put ''NTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcuNDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4w''@;'; put 'put ''OWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwxLjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMyww''@;'; put 'put ''LDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCwwLDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQs''@;'; put 'put ''MTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwxLDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCww''@;'; put 'put ''LDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEs''@;'; put 'put ''MSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAsMS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4''@;'; put 'put ''LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCww''@;'; put 'put ''LDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJsLS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGQuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0Ex''@;'; put 'put ''Ljg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIu''@;'; put 'put ''NjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDks''@;'; put 'put ''Mi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwyLjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIu''@;'; put 'put ''MTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGQuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6ZC5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''LCJwaG9uZS1oYW5kc2V0IjpkLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpkLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6ZC5DbHJTaGFwZUluc3RhbGwsdW5pbnN0YWxsOmQuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOmQuQ2xyU2hhcGVMYXllcnMsYmxvY2s6ZC5DbHJTaGFwZUJs''@;'; put 'put ''b2NrLCJibG9ja3MtZ3JvdXAiOmQuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6ZC5DbHJTaGFwZUJ1bmRsZSx3aWZpOmQuQ2xyU2hhcGVXaWZpLCJyYWNrLXNlcnZlciI6ZC5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6ZC5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9y''@;'; put 'put ''ZSI6ZC5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOmQuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpkLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpkLkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6ZC5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpkLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6ZC5D''@;'; put 'put ''bHJTaGFwZUhvc3Qsc3RvcmFnZTpkLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOmQuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpkLkNsclNoYXBlQXBwbGljYXRpb25zLGJ1aWxkaW5nOmQuQ2xyU2hhcGVCdWlsZGluZyxjcHU6ZC5DbHJTaGFwZUNQVSxtZW1vcnk6ZC5DbHJTaGFwZU1l''@;'; put 'put ''bW9yeSwiZGF0YS1jbHVzdGVyIjpkLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOmQuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxkOmQuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6ZC5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6ZC5DbHJTaGFwZVNo''@;'; put 'put ''aWVsZFgsaW1wb3J0OmQuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OmQuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6ZC5DbHJTaGFwZVVwbG9hZENsb3VkLCJkb3dubG9hZC1jbG91ZCI6ZC5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOmQuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5OmQu''@;'; put 'put ''Q2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6ZC5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6ZC5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6ZC5DbHJTaGFwZVRlcm1pbmFsLGNvZGU6ZC5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246ZC5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6ZC5DbHJT''@;'; put 'put ''aGFwZUJhdHRlcnksbW9iaWxlOmQuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OmQuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOmQuQ2xyU2hhcGVOZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOmQuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpkLkNs''@;'; put 'put ''clNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6ZC5DbHJTaGFwZVJvdXRlcix2bTpkLkNsclNoYXBlVk0sInZtdy1hcHAiOmQuQ2xyU2hhcGVWTVdBcHAsY2VydGlmaWNhdGU6ZC5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6ZC5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOmQuQ2xyU2hh''@;'; put 'put ''cGVVbmFyY2hpdmUsY29ubmVjdDpkLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OmQuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6ZC5DbHJTaGFwZUxpbmssdW5saW5rOmQuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOmQuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxl''@;'; put 'put ''IjpkLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6ZC5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOmQuQ2xyQ29udHJvbEx1bixkZXBsb3k6ZC5DbHJTaGFwZURlcGxveSxoZWxpeDpkLkNsclNoYXBlSGVsaXgsZmxhc2s6ZC5DbHJTaGFwZUZsYXNrLGFkbWlu''@;'; put 'put ''aXN0cmF0b3I6ZC5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOmQuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOmQuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOmQuQ2xyU2hhcGVOVk1lLHNzZDpkLkNsclNoYXBlU1NELGJsdWV0b290aDpkLkNsclNo''@;'; put 'put ''YXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpkLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpkLkNsclNoYXBlUHJvY2Vzc09uVk0sImFzc2lnbi11c2VyIjpkLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOmQuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6ZC5DbHJTaGFw''@;'; put 'put ''ZUJhckNvZGUsImNkLWR2ZCI6ZC5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpkLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpkLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpkLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpkLkNsclNoYXBlUXJD''@;'; put 'put ''b2RlLHVzYjpkLkNsclNoYXBlVXNiLHJhZGFyOmQuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6ZC5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpkLkNsclNoYXBlU3F1aWQsaW5kdWN0b3I6ZC5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOmQuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6''@;'; put 'put ''ZC5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpkLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOmQuQ2xyU2hhcGVOb2RlR3JvdXAsbm9kZXM6ZC5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpkLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6ZC5DbHJTaGFwZU5v''@;'; put 'put ''ZGUscG9kOmQuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOmQuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOmQuQ2xyU2hhcGVUYXBlRHJpdmUsYW5pbWF0aW9uOmQuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpkLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpkLkNs''@;'; put 'put ''clNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuVGVjaG5vbG9neVNoYXBlcywiY29tbWFu''@;'; put 'put ''ZCIsKDAsaC5kZXNjcmlwdG9yQ29uZmlnKShkLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5UZWNobm9sb2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShkLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5UZWNobm9sb2d5U2hhcGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxo''@;'; put 'put ''LmRlc2NyaXB0b3JDb25maWcpKGQuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuVGVjaG5vbG9neVNoYXBlcywicmVjZWl2ZXIiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoZC5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5UZWNobm9sb2d5U2hhcGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsaC5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShkLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5UZWNobm9sb2d5U2hhcGVzLCJmb2xkZXItc2hhcmUiLCgwLGguZGVzY3JpcHRvckNvbmZpZykoZC5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoZC5UZWNobm9sb2d5U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixkLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5UZXh0RWRpdFNoYXBlcz1kLkNsclNoYXBlU3VwZXJz''@;'; put 'put ''Y3JpcHQ9ZC5DbHJTaGFwZVN1YnNjcmlwdD1kLkNsclNoYXBlU3RyaWtldGhyb3VnaD1kLkNsclNoYXBlSW5kZW50PWQuQ2xyU2hhcGVPdXRkZW50PWQuQ2xyU2hhcGVIaWdobGlnaHRlcj1kLkNsclNoYXBlVGV4dENvbG9yPWQuQ2xyU2hhcGVMYW5ndWFnZT1kLkNsclNoYXBlQWxpZ25Ub3A9''@;'; put 'put ''ZC5DbHJTaGFwZUFsaWduTWlkZGxlPWQuQ2xyU2hhcGVBbGlnbkJvdHRvbT1kLkNsclNoYXBlVW5kZXJsaW5lPWQuQ2xyU2hhcGVUZXh0PWQuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD1kLkNsclNoYXBlQmxvY2tRdW90ZT1kLkNsclNoYXBlUGFpbnRSb2xsZXI9ZC5DbHJTaGFwZU51bWJlckxp''@;'; put 'put ''c3Q9ZC5DbHJTaGFwZUFsaWduTGVmdFRleHQ9ZC5DbHJTaGFwZUp1c3RpZnlUZXh0PWQuQ2xyU2hhcGVJdGFsaWM9ZC5DbHJTaGFwZUFsaWduUmlnaHQ9ZC5DbHJTaGFwZUFsaWduTGVmdD1kLkNsclNoYXBlQWxpZ25DZW50ZXI9ZC5DbHJTaGFwZUZvbnRTaXplPWQuQ2xyU2hhcGVDaGVja2Jv''@;'; put 'put ''eExpc3Q9ZC5DbHJTaGFwZUNlbnRlclRleHQ9ZC5DbHJTaGFwZUJ1bGxldExpc3Q9ZC5DbHJTaGFwZUJvbGQ9dm9pZCAwO3ZhciBoPVMoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtk''@;'; put 'put ''LkNsclNoYXBlQm9sZD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjIuNDMsMTcuNTRhNC42Nyw0LjY3LDAsMCwwLDIuOC00LjM3di0uMDZhNC40Myw0LjQzLDAsMCwwLTEuMzEtMy4yNSw3LjA5LDcuMDksMCwwLDAtNS4xMy0xLjczaC03QTEuNzEsMS43MSwwLDAsMCwxMCw5Ljg2VjI2''@;'; put 'put ''YTEuNzIsMS43MiwwLDAsMCwxLjc0LDEuNzRoNy4zM2M0LjM3LDAsNy4yNS0xLjg4LDcuMjUtNS4zOFYyMi4zQzI2LjMyLDE5LjY0LDI0LjczLDE4LjMyLDIyLjQzLDE3LjU0Wk0xMy42OCwxMS40aDQuNTRjMiwwLDMuMTUuODksMy4xNSwyLjMzdi4wNmMwLDEuNjgtMS4zNiwyLjQ5LTMuMzgs''@;'; put 'put ''Mi40OUgxMy42OFpNMjIuMzcsMjJjMCwxLjU5LTEuMzEsMi40My0zLjQ2LDIuNDNIMTMuNjhWMTkuNjJoNWMyLjQ5LDAsMy42OS44OCwzLjY5LDIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlQnVsbGV0TGlzdD0oMCxoLmNs''@;'; put 'put ''ckljb25TVkcpKCc8Y2lyY2xlIGN4PSI1LjIxIiBjeT0iOS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjE3LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz48Y2lyY2xlIGN4PSI1LjIxIiBjeT0iMjUuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksZC5DbHJTaGFwZUNlbnRlclRleHQ9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjg4LDhINS4xMmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjg4YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUuNSwxNi4yYTEuMSwxLjEsMCwxLDAsMC0yLjJoLTE1YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAuMjUs''@;'; put 'put ''MjBINS43NWExLjEsMS4xLDAsMCwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC44OCwyNkgxMS4xMmExLjEsMS4xLDAsMSwwLDAsMi4ySDI0Ljg4YTEuMSwxLjEsMCwxLDAs''@;'; put 'put ''MC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxkLkNsclNoYXBlQ2hlY2tib3hMaXN0PSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40MywxNkgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNDMsMjRIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE1LjQ1LDEwaDE2YTEsMSwwLDAsMCwwLTJoLTE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjUsMy40MmExLjA5LDEuMDksMCwwLDAtMS41NSwwTDcuODksMTEuNDgsNC41MSw3Ljg0QTEuMSwxLjEsMCwxLDAsMi45LDkuMzRsNC45NCw1LjNMMTcuNSw1QTEuMSwxLjEsMCwwLDAsMTcuNSwzLjQyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksZC5DbHJTaGFwZUZvbnRTaXplPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSw5LjA4QTEuMTMsMS4xMywwLDAsMCwxOS44Niw4SDQuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTFWMjdhMS4wOSwx''@;'; put 'put ''LjA5LDAsMCwwLDIuMTcsMFYxMC4xOWg2LjY5QTEuMTQsMS4xNCwwLDAsMCwyMSw5LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjY3LDE1SDIxLjE1YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDI1VjI2LjVhMS4wOSwxLjA5LDAs''@;'; put 'put ''MCwwLDIuMTcsMFYxNy4yM2gzLjU0YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZUFsaWduQ2VudGVyPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwyMEgxOVYxNmg2YTEsMSwwLDAs''@;'; put 'put ''MCwxLTFWN2ExLDEsMCwwLDAtMS0xSDE5VjJhMSwxLDAsMCwwLTIsMFY2SDExYTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDZ2NEg1YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxSDE3djRhMSwxLDAsMCwwLDIsMFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwz''@;'; put 'put ''MSwyMFpNMTIsMTRWOEgyNHY2Wk0zMCwyOEg2VjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksZC5DbHJTaGFwZUFsaWduTGVmdD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSwxQTEsMSwwLDAsMCw0LDJWMzRhMSwxLDAsMCwwLDIs''@;'; put 'put ''MFYyQTEsMSwwLDAsMCw1LDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEsMjBIOFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwzMSwyMFptLTEsOEgxMFYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNCwxNVY3YTEsMSwwLDAsMC0xLTFIOFYxNkgyM0ExLDEsMCwwLDAsMjQsMTVabS0yLTFIMTBWOEgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGQuQ2xyU2hhcGVBbGlnblJpZ2h0PSgwLGgu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxYTEsMSwwLDAsMC0xLDFWMzRhMSwxLDAsMCwwLDIsMFYyQTEsMSwwLDAsMCwzMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMjF2OGExLDEsMCwwLDAsMSwxSDI4VjIwSDVBMSwx''@;'; put 'put ''LDAsMCwwLDQsMjFabTIsMUgyNnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTIsN3Y4YTEsMSwwLDAsMCwxLDFIMjhWNkgxM0ExLDEsMCwwLDAsMTIsN1ptMiwxSDI2djZIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxkLkNsclNoYXBlSXRhbGljPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC40Miw4SDE3LjFhMS4xLDEuMSwwLDEsMCwwLDIuMTloMi4xM0wxMy4xMSwyNS41NUgxMC40N2ExLjEsMS4xLDAsMSwwLDAsMi4xOUgxNy44YTEuMSwxLjEsMCwxLDAs''@;'; put 'put ''MC0yLjE5SDE1LjUxbDYuMTMtMTUuMzZoMi43OGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGQuQ2xyU2hhcGVKdXN0aWZ5VGV4dD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMC4ySDMxLjc1YTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMC0yLjJINmExLjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjc1LDE0SDZhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMxLjEyLDIwSDYuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAu''@;'; put 'put ''NDUsMjUuODNINi42YTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuNDVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGQuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC4y''@;'; put 'put ''NSwyNkg2djIuMkgyMC4yNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI4LDIwSDZ2Mi4ySDI4QTEuMSwxLjEsMCwwLDAsMjgsMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNiwxNS4xQTEuMSwxLjEsMCwwLDAsMjEuNSwxNEg2djIuMkgyMS41QTEuMSwxLjEsMCwwLDAsMjIuNiwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LjI1LDhINnYyLjJIMjkuMjVh''@;'; put 'put ''MS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGQuQ2xyU2hhcGVOdW1iZXJMaXN0PSgwLGguY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iNS40NiA3LjQxIDUuNDYgMTEuNTYgNi42NSAxMS41NiA2LjY1IDYu''@;'; put 'put ''MDUgNS43IDYuMDUgNC4wNSA3LjE2IDQuNTIgOCA1LjQ2IDcuNDEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjU3LDE0LjgyYS43Ni43NiwwLDAsMSwuODMuNzNjMCwuMzgtLjIxLjc0LS44NywxLjI3bC0yLDEuNTd2MUg3LjY3VjE4''@;'; put 'put ''LjI4SDUuMzNsMS0uNzdjMS0uNywxLjI4LTEuMjcsMS4yOC0yYTEuODMsMS44MywwLDAsMC0yLTEuNzYsMi42MywyLjYzLDAsMCwwLTIuMTQsMS4wOGwuNzYuNzNBMS43NSwxLjc1LDAsMCwxLDUuNTcsMTQuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNi41NiwyNC42NGExLjMyLDEuMzIsMCwwLDAsMS0xLjI3YzAtLjg3LS43OC0xLjUxLTItMS41MWEyLjYxLDIuNjEsMCwwLDAtMi4xLDFsLjY5LjcyYTEuNzgsMS43OCwwLDAsMSwxLjMtLjY0Yy41NCwwLC45Mi4yNi45Mi42NnMtLjM2LjYyLTEsLjYySDQuNzl2MWguNjRj''@;'; put 'put ''Ljc0LDAsMS4wNy4yMSwxLjA3LjYzcy0uMzUuNjgtMSwuNjhhMiwyLDAsMCwxLTEuNDYtLjY1bC0uNy43OGEyLjg1LDIuODUsMCwwLDAsMi4yMS45M2MxLjI5LDAsMi4xMy0uNjksMi4xMy0xLjY0QTEuMzMsMS4zMywwLDAsMCw2LjU2LDI0LjY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlhMSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAs''@;'; put 'put ''MCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxkLkNsclNoYXBlUGFpbnRS''@;'; put 'put ''b2xsZXI9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEwVjRhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDR2NmEyLDIsMCwwLDAsMiwySDI5QTIsMiwwLDAsMCwzMSwxMFpNNiw0SDI5djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjlMMTguNywxNi41NGExLDEsMCwwLDAtLjcsMVYxOUgxNlYzM2EyLDIsMCwwLDAsMiwyaDJhMiwyLDAsMCwwLDItMlYxOUgyMHYtLjczTDMzLjMsMTRhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMsNlpNMjAsMzNIMThWMjFoMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxyZWN0IHg9IjQiIHk9IjIiIHdpZHRoPSIyNyIgaGVpZ2h0PSIxMCIgcng9IjEiIHJ5PSIxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjRMMTguNzEsMTYu''@;'; put 'put ''NDVhMSwxLDAsMCwwLS43MSwxVjE5SDE2VjM0YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE5SDIwdi0uODJMMzMuMjksMTRBMSwxLDAsMCwwLDM0LDEzVjdBMSwxLDAsMCwwLDMzLDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGQuQ2xyU2hh''@;'; put 'put ''cGVCbG9ja1F1b3RlPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMS44NiwxNi41NWE0LjMxLDQuMzEsMCwwLDAtMi4xMS41NiwxNC40NCwxNC40NCwwLDAsMSw0LjM2LTYsMS4xLDEuMSwwLDAsMC0xLjQtMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRBNS4wOCw1LjA4LDAs''@;'; put 'put ''MCwwLDEwLDI0LjU4YTQuNCw0LjQsMCwwLDAsMS44OC40NCw0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLDE2LjU1YTQuMjksNC4yOSwwLDAsMC0yLjExLjU2LDE0LjUsMTQuNSwwLDAsMSw0''@;'; put 'put ''LjM1LTYsMS4xLDEuMSwwLDEsMC0xLjM5LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0YTUuMDgsNS4wOCwwLDAsMCwzLDQuNjFBNC4zNyw0LjM3LDAsMCwwLDIzLDI1YTQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz4nKSxkLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY1LDI3LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjI2SDE1Ljc1QTEuMSwxLjEsMCwwLDAsMTQuNjUsMjcuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjksMjEuMUExLjEsMS4xLDAsMCwwLDgsMjIuMkgzMFYyMEg4QTEuMSwxLjEsMCwwLDAsNi45LDIxLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMuNCwxNS4xYTEuMSwxLjEsMCww''@;'; put 'put ''LDAsMS4xLDEuMUgzMFYxNEgxNC41QTEuMSwxLjEsMCwwLDAsMTMuNCwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTYuNzUsOGExLjEsMS4xLDAsMSwwLDAsMi4ySDMwVjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz4nKSxkLkNsclNoYXBlVGV4dD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTksOC44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFoLS4xMmExLjQ2LDEuNDYsMCwwLDAtMS40MiwxTDEuMTQsMjYuNTZhMS4yOSwxLjI5LDAsMCwwLS4xNC41OSwxLDEsMCww''@;'; put 'put ''LDAsMSwxLDEuMTIsMS4xMiwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4LTEuMDgsMS42NCwxLjY0LDAsMCwwLS4xNC0uNTdaTTYuMDgsMjAuNzFsNC41OS0xMC4yMiw0LjYsMTAuMjJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMjQsMTQuNzhBNi4zNSw2LjM1LDAsMCwwLDI3LjYsMTMuMmExMS4zNiwxMS4zNiwwLDAsMC00LjcsMSwxLDEsMCwwLDAtLjU4Ljg5LDEsMSwwLDAsMCwuOTQuOTIsMS4yMywxLjIzLDAsMCww''@;'; put 'put ''LC4zOS0uMDgsOC44Nyw4Ljg3LDAsMCwxLDMuNzItLjgxYzIuNywwLDQuMjgsMS4zMyw0LjI4LDMuOTJ2LjVhMTUuMjksMTUuMjksMCwwLDAtNC40Mi0uNjFjLTMuNjQsMC02LjE0LDEuNjEtNi4xNCw0LjY0di4wNWMwLDIuOTUsMi43LDQuNDgsNS4zNyw0LjQ4YTYuMjksNi4yOSwwLDAsMCw1''@;'; put 'put ''LjE5LTIuNDhWMjYuOWExLDEsMCwwLDAsMSwxLDEsMSwwLDAsMCwxLTEuMDZWMTlBNS43MSw1LjcxLDAsMCwwLDMyLjI0LDE0Ljc4Wm0tLjU2LDcuN2MwLDIuMjgtMi4xNywzLjg5LTQuODEsMy44OS0xLjk0LDAtMy42MS0xLjA2LTMuNjEtMi44NnYtLjA2YzAtMS44LDEuNS0zLDQuMi0zYTE1''@;'; put 'put ''LjIsMTUuMiwwLDAsMSw0LjIyLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZVVuZGVybGluZT0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjguMTdjNS4wOCwwLDguNDgtMy4wOCw4LjQ4LTlWOC41NGExLjE1LDEu''@;'; put 'put ''MTUsMCwxLDAtMi4zLDB2MTAuOGMwLDQuNDQtMi4zOCw2LjcxLTYuMTMsNi43MXMtNi4yMS0yLjQ3LTYuMjEtNi44NVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44QzkuNTMsMjUuMDksMTMsMjguMTcsMTgsMjguMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNMzEsMzBINWExLjExLDEuMTEsMCwwLDAsMCwyLjIxSDMxQTEuMTEsMS4xMSwwLDAsMCwzMSwzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGQuQ2xyU2hhcGVBbGlnbkJvdHRvbT0oMCxoLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMzQsMzBIMmExLDEsMCwwLDAsMCwySDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTYsNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYyOEgxNlpNMTQsMjZIOFY2aDZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMTNhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCwwLDAtMSwxVjI4SDMwWk0yOCwyNkgyMlYxNGg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksZC5D''@;'; put 'put ''bHJTaGFwZUFsaWduTWlkZGxlPSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwxN0gzMFYxMWExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDF2NkgxNlY1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjE3SDJhMSwxLDAsMCwwLDAsMkg2VjMxYTEsMSwwLDAsMCwxLDFo''@;'; put 'put ''OGExLDEsMCwwLDAsMS0xVjE5aDR2NmExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0YTEsMSwwLDAsMCwwLTJaTTE0LDMwSDhWNmg2Wm0xNC02SDIyVjEyaDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxkLkNsclNoYXBlQWxpZ25U''@;'; put 'put ''b3A9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDRIMkExLDEsMCwwLDAsMiw2SDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDZa''@;'; put 'put ''TTgsMTBoNlYzMEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDIzYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhIMjBabTItMTNoNlYyMkgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIiAvPicpLGQuQ2xyU2hhcGVMYW5ndWFnZT0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsM0gxNHY1aDJWNWgxNGMwLjYsMCwxLDAuNCwxLDF2MTFjMCwwLjYtMC40LDEtMSwxSDE3djdoLTUuM0w4LDI3LjlWMjVINWMtMC42LDAtMS0wLjQtMS0xVjEzYzAtMC42LDAuNC0xLDEt''@;'; put 'put ''MWgxM3YtMkg1XG5cdFx0Yy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFIMTl2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZDMzMsNC4zLDMxLjcsMywzMCwzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTYuMiwyMi45aDIuNGwwLjYtMS42aDMuMWwwLjYsMS42aDIuNEwxMS45LDE0SDkuNUw2LjIsMjIuOXogTTEwLjcsMTYuNWwxLDMuMWgtMkwxMC43LDE2LjV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMTdjMS4xLDAsMi42''@;'; put 'put ''LTAuMyw0LTFjMS40LDAuNywzLDEsNCwxdi0yYzAsMC0xLDAtMi4xLTAuNGMxLjItMS4yLDIuMS0zLDIuMS01LjZWOGgtM1Y2aC0ydjJoLTN2Mmg1Ljlcblx0XHRjLTAuMiwxLjgtMSwyLjktMS45LDMuNmMtMC42LTAuNS0xLjItMS4yLTEuNi0yLjFoLTIuMWMwLjQsMS4zLDEsMi4zLDEuOCwz''@;'; put 'put ''LjFDMjEuMSwxNSwyMC4yLDE1LDIwLDE1VjE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBvbHlnb24gcG9pbnRzPSIxMSwxNi41IDEwLDE5LjYgMTIsMTkuNiAxMSwxNi41IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMC4zLDNoLTE2djVoNHYyaC0xM2MtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xaDYuN3YtN2gxMWMxLjcsMCwzLTEuMywzLTNWNlxuXHRcdEMzMy4zLDQuMywzMiwzLDMwLjMsM3ogTTEzLjEsMjIuOWwtMC41LTEuNkg5LjVs''@;'; put 'put ''LTAuNiwxLjZINi41TDkuOCwxNGgyLjRsMy4zLDguOUwxMy4xLDIyLjl6IE0yOC4zLDE1djJjLTEuMywwLTIuNy0wLjQtMy45LTFcblx0XHRjLTEuMiwwLjYtMi42LDAuOS00LDFsLTAuMS0yYzAuNywwLDEuNC0wLjEsMi4xLTAuM2MtMC45LTAuOS0xLjUtMi0xLjgtMy4yaDIuMWMwLjMsMC45''@;'; put 'put ''LDAuOSwxLjYsMS42LDIuMmMxLjEtMC45LDEuOC0yLjIsMS45LTMuN1xuXHRcdGgtNlY4aDNWNmgydjJoMy4zbDAuMSwxYzAuMSwyLjEtMC43LDQuMi0yLjIsNS43QzI3LjEsMTQuOSwyNy43LDE1LDI4LjMsMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp''@;'; put 'put ''LGQuQ2xyU2hhcGVUZXh0Q29sb3I9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQ3LDMuODRhMS40NSwxLjQ1LDAsMCwwLTEuNC0xSDE4YTEuNDUsMS40NSwwLDAsMC0xLjQyLDFMOC40MiwyMS41NmExLjM1LDEuMzUsMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMSwxLjEx''@;'; put 'put ''LDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4wOCwxLjU5LDEuNTksMCwwLDAtLjE0LS41N1pNMTMuMzYsMTUuNzEsMTgsNS40OWw0LjYsMTAuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI0LjA2IiB5PSIyNSIgd2lkdGg9IjI4IiBoZWlnaHQ9IjgiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxkLkNsclNoYXBlSGlnaGxpZ2h0ZXI9KDAsaC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE1LjgyLDI2LjA2YTEsMSwwLDAsMS0uNzEtLjI5TDguNjcsMTkuMzNhMSwxLDAsMCwxLS4yOS0uNzEsMSwxLDAsMCwxLC4yOS0uNzFMMjMsMy41NGE1LjU1LDUuNTUsMCwxLDEsNy44NSw3Ljg2TDE2LjUzLDI1Ljc3QTEsMSwwLDAsMSwxNS44MiwyNi4wNlpt''@;'; put 'put ''LTUtNy40NCw1LDVMMjkuNDgsMTBhMy41NCwzLjU0LDAsMCwwLDAtNSwzLjYzLDMuNjMsMCwwLDAtNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEwLjM4LDI4LjI4QTEsMSwwLDAsMSw5LjY3LDI4TDYuNDUsMjQuNzdhMSwx''@;'; put 'put ''LDAsMCwxLS4yMi0xLjA5bDIuMjItNS40NGExLDEsMCwwLDEsMS42My0uMzNsNi40NSw2LjQ0QTEsMSwwLDAsMSwxNi4yLDI2bC01LjQ0LDIuMjJBMS4zMywxLjMzLDAsMCwxLDEwLjM4LDI4LjI4Wk04LjMzLDIzLjgybDIuMjksMi4yOCwzLjQzLTEuNEw5Ljc0LDIwLjM5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTguOTQsMzBoLTVhMSwxLDAsMCwxLS44NC0xLjU1bDMuMjItNC45NGExLDEsMCwwLDEsMS41NS0uMTZsMy4yMSwzLjIyYTEsMSwwLDAsMSwuMDYsMS4zNUw5LjcsMjkuNjRBMSwxLDAsMCwxLDguOTQsMzBa''@;'; put 'put ''TTUuNzgsMjhIOC40N0w5LDI3LjM0bC0xLjctMS43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMy4wNiIgeT0iMzEiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIvPicpLGQuQ2xyU2hhcGVPdXRkZW50PSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRo''@;'; put 'put ''LTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJo''@;'; put 'put ''MjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik05LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0uM0w0LjYxLDE4bDQuMjUtNC4yNGExLDEsMCwwLDEsMS40MSwxLjQxTDcuNDQsMThsMi44MywyLjgzYTEsMSww''@;'; put 'put ''LDAsMS0uNzEsMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksZC5DbHJTaGFwZUluZGVudD0oMCxoLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEs''@;'; put 'put ''MSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNNS41NiwyMi41NGExLDEsMCwwLDEtLjctMS43MUw3LjY4''@;'; put 'put ''LDE4LDQuODYsMTUuMTdhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDEwLjUxLDE4LDYuMjcsMjIuMjRBMSwxLDAsMCwxLDUuNTYsMjIuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLGQuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoPSgw''@;'; put 'put ''LGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi44OCwxOS45MmgtMzBhMSwxLDAsMSwxLDAtMmgzMGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcuMjcsMTUuODZhMTIuOSwxMi45LDAsMCwxLDEuMjkt''@;'; put 'put ''LjUyQTUuNjksNS42OSwwLDAsMSwxMC4zOSwxNWEzLjE4LDMuMTgsMCwwLDEsMi43NSwxLjExQTQuNDQsNC40NCwwLDAsMSwxNCwxOC44NXYuNDlhMTMuODMsMTMuODMsMCwwLDAtNC4yOS0uNzQsNi4xOSw2LjE5LDAsMCwwLTIuNTkuNTRBNSw1LDAsMCwwLDUuODEsMjBIMTUuODhWMTguODVh''@;'; put 'put ''NS42Nyw1LjY3LDAsMCwwLTEuMzctNCw1LjE2LDUuMTYsMCwwLDAtNC0xLjQ5LDEwLDEwLDAsMCwwLTMuOTEuODguODcuODcsMCwwLDAtLjQ0LDEuMThBLjg0Ljg0LDAsMCwwLDcuMjcsMTUuODZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMjEsMjBhNS45NCw1Ljk0LDAsMCwxLC41NC0yLjMxLDQuMzUsNC4zNSwwLDAsMSwxLjU4LTEuODMsNC4yNyw0LjI3LDAsMCwxLDQuNTksMCw0LjQ3LDQuNDcsMCwwLDEsMS41NywxLjgzQTYuMTIsNi4xMiwwLDAsMSwyOS44NSwyMGgyYTcuNzMsNy43MywwLDAsMC0uNzgtMy4xOSw2''@;'; put 'put ''LDYsMCwwLDAtMi4xOC0yLjQ1LDUuNzQsNS43NCwwLDAsMC0zLjEtLjg4LDUuMzksNS4zOSwwLDAsMC0yLjguNzMsNS41NSw1LjU1LDAsMCwwLTIsMi4wNVYxMGEuODcuODcsMCwwLDAtLjg2LS44NkgyMGEuODcuODcsMCwwLDAtLjg2Ljg2VjIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTI5LjY3LDIyYTUuNjEsNS42MSwwLDAsMS0uMzYsMS4wNyw0LjQ3LDQuNDcsMCwwLDEtMS41NywxLjg1LDQuMzIsNC4zMiwwLDAsMS00LjU5LDAsNC4zNSw0LjM1LDAsMCwxLTEuNTgtMS44NUE1LjY0LDUuNjQsMCwwLDEsMjEuMiwy''@;'; put 'put ''MkgxOS4wOXY0LjEzQS44Ny44NywwLDAsMCwyMCwyN2guMmEuODcuODcsMCwwLDAsLjg2LS44NlYyNC41MWE1LjU4LDUuNTgsMCwwLDAsMiwyLjA2LDUuNDgsNS40OCwwLDAsMCwyLjguNzIsNS42Niw1LjY2LDAsMCwwLDMuMS0uODhBNS44OCw1Ljg4LDAsMCwwLDMxLjA5LDI0LDcuMDksNy4w''@;'; put 'put ''OSwwLDAsMCwzMS43MywyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xNCwyMnYuNzZhMy4zNCwzLjM0LDAsMCwxLTEuNjIsMiw1LjM0LDUuMzQsMCwwLDEtMi42OS43MiwzLjc4LDMuNzgsMCwwLDEtMi4zNi0uNywyLjI0LDIu''@;'; put 'put ''MjQsMCwwLDEtLjk0LTEuOSwyLjI5LDIuMjksMCwwLDEsLjItLjkxSDQuNjJhNCw0LDAsMCwwLS4xMywxLDMuODMsMy44MywwLDAsMCwxLjM1LDMuMDZBNS4xNSw1LjE1LDAsMCwwLDkuMzEsMjcuMiw2LDYsMCwwLDAsMTIsMjYuNTdhNC42Miw0LjYyLDAsMCwwLDItMS43NFYyNmEuODYuODYs''@;'; put 'put ''MCwwLDAsLjg2Ljg2SDE1YS44Ni44NiwwLDAsMCwuODYtLjg2VjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxkLkNsclNoYXBlU3Vic2NyaXB0PSgwLGguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC41NSwxOGw2LjgsOC42YTEuMTcsMS4xNyww''@;'; put 'put ''LDAsMS0uOTIsMS45aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0uNDRMMTMsMTkuOTEsNi42LDI4YTEuMTcsMS4xNywwLDAsMS0uOTIuNDRoMGExLjE3LDEuMTcsMCwwLDEtLjkyLTEuOUwxMS41NSwxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMTcsMS4xNywwLDAsMSw2''@;'; put 'put ''LjYzLDhsNi40NCw4LjEzTDE5LjUsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIzLDMxLjgsMjcuNDksMjhhOS45LDkuOSwwLDAsMCwx''@;'; put 'put ''Ljg4LTIuMDVBMy40NCwzLjQ0LDAsMCwwLDMwLDI0YTIuMzUsMi4zNSwwLDAsMC0uMzUtMS4yNywyLjQ0LDIuNDQsMCwwLDAtMS0uODQsMi45LDIuOSwwLDAsMC0xLjI2LS4yOCwzLjM2LDMuMzYsMCwwLDAtMS44My41LDUuNjQsNS42NCwwLDAsMC0xLjQ4LDEuNDJsLTEtLjgxYTUuMTEsNS4x''@;'; put 'put ''MSwwLDAsMSw0LjM2LTIuMzcsNC4zNSw0LjM1LDAsMCwxLDIsLjQ1LDMuNDMsMy40MywwLDAsMSwyLDMuMTgsNC40NSw0LjQ1LDAsMCwxLS42OCwyLjM1LDEwLjksMTAuOSwwLDAsMS0yLjI0LDIuNDZsLTMuMjQsMi44MUgzMS41VjMzSDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiLz4nKSxkLkNsclNoYXBlU3VwZXJzY3JpcHQ9KDAsaC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjQzLDE4bDYuNzksOC42YTEuMTcsMS4xNywwLDAsMS0uOTIsMS45aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0uNDRsLTYuNDQtOC4xM0w2LjQ3LDI4YTEuMTcsMS4x''@;'; put 'put ''NywwLDAsMS0uOTIuNDRoMGExLjE3LDEuMTcsMCwwLDEtLjkyLTEuOUwxMS40MywxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMiwxLjIsMCwwLDEsNi41MSw4bDYuNDMsOC4xM0wxOS4zOCw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwx''@;'; put 'put ''LC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjIuODUsMTQuNDdsNC41MS0zLjg1YTkuMzcsOS4zNywwLDAsMCwxLjg4LTIsMy40MywzLjQzLDAsMCwwLC41OS0xLjg2LDIuMjcsMi4yNywwLDAsMC0uMzYtMS4yNywy''@;'; put 'put ''LjM4LDIuMzgsMCwwLDAtLjk1LS44MywyLjc3LDIuNzcsMCwwLDAtMS4yNi0uMjksMy4zOSwzLjM5LDAsMCwwLTEuODMuNSw1LjgzLDUuODMsMCwwLDAtMS40OSwxLjQybC0xLS44MWE1LjEyLDUuMTIsMCwwLDEsNC4zNi0yLjM3LDQuMzYsNC4zNiwwLDAsMSwyLC40NSwzLjQ3LDMuNDcsMCww''@;'; put 'put ''LDEsMiwzLjE4QTQuNDQsNC40NCwwLDAsMSwzMC41OCw5YTExLjE0LDExLjE0LDAsMCwxLTIuMjQsMi40NkwyNS4xLDE0LjMxaDYuMjh2MS4zM0gyMi44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksZC5UZXh0RWRpdFNoYXBlcz17Ym9sZDpkLkNs''@;'; put 'put ''clNoYXBlQm9sZCwiYnVsbGV0LWxpc3QiOmQuQ2xyU2hhcGVCdWxsZXRMaXN0LCJjaGVja2JveC1saXN0IjpkLkNsclNoYXBlQ2hlY2tib3hMaXN0LCJudW1iZXItbGlzdCI6ZC5DbHJTaGFwZU51bWJlckxpc3QsImZvbnQtc2l6ZSI6ZC5DbHJTaGFwZUZvbnRTaXplLGl0YWxpYzpkLkNsclNo''@;'; put 'put ''YXBlSXRhbGljLCJqdXN0aWZ5LXRleHQiOmQuQ2xyU2hhcGVKdXN0aWZ5VGV4dCwiY2VudGVyLXRleHQiOmQuQ2xyU2hhcGVDZW50ZXJUZXh0LCJhbGlnbi1sZWZ0LXRleHQiOmQuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0LCJhbGlnbi1yaWdodC10ZXh0IjpkLkNsclNoYXBlQWxpZ25SaWdodFRl''@;'; put 'put ''eHQsInBhaW50LXJvbGxlciI6ZC5DbHJTaGFwZVBhaW50Um9sbGVyLCJibG9jay1xdW90ZSI6ZC5DbHJTaGFwZUJsb2NrUXVvdGUsdGV4dDpkLkNsclNoYXBlVGV4dCx1bmRlcmxpbmU6ZC5DbHJTaGFwZVVuZGVybGluZSwiYWxpZ24tY2VudGVyIjpkLkNsclNoYXBlQWxpZ25DZW50ZXIsImFs''@;'; put 'put ''aWduLWxlZnQiOmQuQ2xyU2hhcGVBbGlnbkxlZnQsImFsaWduLXJpZ2h0IjpkLkNsclNoYXBlQWxpZ25SaWdodCwiYWxpZ24tYm90dG9tIjpkLkNsclNoYXBlQWxpZ25Cb3R0b20sImFsaWduLW1pZGRsZSI6ZC5DbHJTaGFwZUFsaWduTWlkZGxlLCJhbGlnbi10b3AiOmQuQ2xyU2hhcGVBbGln''@;'; put 'put ''blRvcCxsYW5ndWFnZTpkLkNsclNoYXBlTGFuZ3VhZ2UsInRleHQtY29sb3IiOmQuQ2xyU2hhcGVUZXh0Q29sb3IsaGlnaGxpZ2h0ZXI6ZC5DbHJTaGFwZUhpZ2hsaWdodGVyLGluZGVudDpkLkNsclNoYXBlSW5kZW50LG91dGRlbnQ6ZC5DbHJTaGFwZU91dGRlbnQsc3RyaWtldGhyb3VnaDpk''@;'; put 'put ''LkNsclNoYXBlU3RyaWtldGhyb3VnaCxzdWJzY3JpcHQ6ZC5DbHJTaGFwZVN1YnNjcmlwdCxzdXBlcnNjcmlwdDpkLkNsclNoYXBlU3VwZXJzY3JpcHR9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z''@;'; put 'put ''LmFkZChkLlRleHRFZGl0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2lj''@;'; put 'put ''b25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixkLFMpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5UcmF2ZWxTaGFwZXM9ZC5DbHJTaGFwZU9uSG9saWRheT1kLkNsclNoYXBlVHJhaWxlcj1kLkNsclNoYXBlRmVycnk9ZC5DbHJTaGFwZUNhcmF2YW49ZC5DbHJTaGFwZUNhbXBlcnZhbj1kLkNsclNo''@;'; put 'put ''YXBlQm9hdD1kLkNsclNoYXBlQmljeWNsZT1kLkNsclNoYXBlTWFwTWFya2VyPWQuQ2xyU2hhcGVDb21wYXNzPWQuQ2xyU2hhcGVNYXA9ZC5DbHJTaGFwZUNhcj1kLkNsclNoYXBlQWlycGxhbmU9ZC5DbHJTaGFwZVRydWNrPXZvaWQgMDt2YXIgaD1TKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRv''@;'; put 'put ''ci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbz1TKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7ZC5DbHJTaGFwZVRy''@;'; put 'put ''dWNrPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRWOEgyNFYxOS43YTYuNDUsNi40NSwwLDAsMSwxLjU2''@;'; put 'put ''LS4yYy4xNSwwLC4yOSwwLC40NCwwVjE0aDRhMiwyLDAsMCwxLDIsMnYxSDI4djJoNHY1SDI5LjZhNC41NCw0LjU0LDAsMCwwLTguMzQsMEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OSw0LjQ5LDAsMCwwLDguOTIsMEgzM2Ex''@;'; put 'put ''LDEsMCwwLDAsMS0xVjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4zOCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDMsMjhaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRWOEgyNFYyMS40OUE0LjQ1LDQuNDUsMCwwLDAsMjEuMjUsMjRIMTQuNDNhNC41LDQuNSwwLDAsMC00''@;'; put 'put ''LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDgsNC40OCwwLDAsMCw4LjkxLDBIMzRWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEsMSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIu''@;'; put 'put ''NS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MiwyOFpNMzIsMTdIMjZWMTRoNGEyLDIsMCwwLDEsMiwyWiIvPicpLGQuQ2xyU2hhcGVBaXJwbGFuZT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1Ljc3LDgu''@;'; put 'put ''MTZhMi40MywyLjQzLDAsMCwwLTEuOS0yTDI4LDQuODdhNC41LDQuNSwwLDAsMC0zLjY1Ljc5TDcsMTguMywyLjE0LDE4LjFBMS44NiwxLjg2LDAsMCwwLC45MSwyMS40MWw1LDMuOTNjLjYuNzMsMSwuNTksMTAuOTMtNC44MmwuOTMsOS40MmExLjM2LDEuMzYsMCwwLDAsLjg1LDEuMTgsMS40''@;'; put 'put ''MywxLjQzLDAsMCwwLC41NC4xLDEuNTQsMS41NCwwLDAsMCwxLS40MWwyLjM5LTIuMThhMS41MiwxLjUyLDAsMCwwLC40Ni0uODNMMjUuMiwxNS45YzMuNTctMiw2Ljk1LTMuODgsOS4zNi01LjI1QTIuNDMsMi40MywwLDAsMCwzNS43Nyw4LjE2Wm0tMi4yLjc1Yy0yLjUsMS40Mi02LDMuNDEt''@;'; put 'put ''OS43Niw1LjQ3bC0uNDEuMjNMMjEuMDcsMjcuMjhsLTEuNDcsMS4zNEwxOC41LDE3LjMyLDE3LjE3LDE4QzEwLDIyLDcuNjEsMjMuMTYsNi43OSwyMy41MmwtNC4zLTMuNDEsNS4wOC4yMiwxOC0xMy4wNmEyLjUxLDIuNTEsMCwwLDEsMi0uNDVsNS44NSwxLjI2YS40My40MywwLDAsMSwuMzUu''@;'; put 'put ''MzdBLjQyLjQyLDAsMCwxLDMzLjU3LDguOTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTcsMTIuNTRsMy41NiwxLDEuNjQtMS4xOS00LTEuMTZMMTAsMTAuMDlsNS40Ny0uMTYsMi4zLTEuNjdMMTAsOC41YTEu''@;'; put 'put ''MjUsMS4yNSwwLDAsMC0uNy4xN0w2LjY3LDEwLjJBMS4yOCwxLjI4LDAsMCwwLDcsMTIuNTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNi4yNSwxMS41LDEyLDEzLjE2bDYuMzItNC41OS05LjA3LjI2QS41Mi41Miww''@;'; put 'put ''LDAsMCw5LDguOTFMNi4xMywxMC41NkEuNTEuNTEsMCwwLDAsNi4yNSwxMS41WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTM0LjUyLDYuMzYsMjguMjIsNWEzLjc4LDMuNzgsMCwwLDAtMy4wNy42N0w2LjEyLDE5LjVs''@;'; put 'put ''LTQuNTctLjJhMS4yNSwxLjI1LDAsMCwwLS44MywyLjIybDQuNDUsMy41M2EuNTUuNTUsMCwwLDAsLjUzLjA5YzEuMjctLjQ5LDYtMywxMS41OS02LjA3bDEuMTIsMTEuNTFhLjU1LjU1LDAsMCwwLC45LjM3bDIuNS0yLjA4YS43Ni43NiwwLDAsMCwuMjYtLjQ1bDIuMzctMTMuMjljNC0yLjIy''@;'; put 'put ''LDcuODItNC4zNywxMC41MS01Ljg5QTEuNTUsMS41NSwwLDAsMCwzNC41Miw2LjM2WiIvPicpLGQuQ2xyU2hhcGVDYXI9KDAsby5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjMiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuNDUsMTQuMTdBMjIuMSwyMi4xLDAsMCwwLDE5LjM4LDdhOS42NCw5LjY0LDAsMCwwLTktLjcsOC42LDguNiwwLDAsMC00LjgyLDYuNGMtLjA4LjQ3''@;'; put 'put ''LS4xNC45Mi0uMiwxLjM2QTQsNCwwLDAsMCwyLDE4djYuMTNhMiwyLDAsMCwwLDIsMlYyMEg0VjE4YTIsMiwwLDAsMSwyLTJIMjQuNzNBNy4yOCw3LjI4LDAsMCwxLDMyLDIzLjI3VjI0aC0yYTQuNTMsNC41MywwLDEsMCwuMzMsMkgzMmEyLDIsMCwwLDAsMi0ydi0uNzNBOS4yOCw5LjI4LDAs''@;'; put 'put ''MCwwLDI2LjQ1LDE0LjE3Wk0xMSwxNEg2LjkzYzAtLjMxLjA5LS42My4xNS0xQTYuNTIsNi41MiwwLDAsMSwxMSw4aDBabTIsMFY3LjU4YTguMTcsOC4xNywwLDAsMSw1LjM2LDEuMTZBMTksMTksMCwwLDEsMjMuOSwxNFpNMjUuOCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIu''@;'; put 'put ''NSwwLDAsMSwyNS44LDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuMTcsMjRhNC41Myw0LjUzLDAsMSwwLC4zMywyaDUuM2MwLS4wOCwwLS4xNywwLS4yNUE2LDYsMCwwLDEsMjAsMjRaTTEw''@;'; put 'put ''LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDEwLDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi44NywxNC4yOEEyMi4zNiwyMi4zNiwwLDAsMCwxOS42NSw2LjlhOS42''@;'; put 'put ''NCw5LjY0LDAsMCwwLTktLjcsOC42LDguNiwwLDAsMC00LjgyLDYuNGMtLjA4LjQ5LS4xNSwxLS4yMSwxLjRoLTFBMi41OSwyLjU5LDAsMCwwLDIsMTYuNTl2OC41NWEuODYuODYsMCwwLDAsLjg2Ljg2SDQuNTljMC0uMTMsMC0uMjYsMC0uMzlhNS43Nyw1Ljc3LDAsMCwxLDcuNzEtNS40NWwt''@;'; put 'put ''MSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDE0LjgyLDI2aDUuNDhjMC0uMTMsMC0uMjYsMC0uMzlBNS43Nyw1Ljc3LDAsMCwxLDI4LDIwLjE2bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkz''@;'; put 'put ''QTQuNSw0LjUsMCwxLDAsMzAuNTMsMjZoMi42MWEuODYuODYsMCwwLDAsLjg2LS44NlYyMy4zNkE5LjM5LDkuMzksMCwwLDAsMjYuODcsMTQuMjhaTTEyLDE0SDhjMC0uMzUuMS0uNzEuMTYtMS4wN2E2LjUyLDYuNTIsMCwwLDEsMy44Ny01aDBaTTEwLjM2LDI4LjM2YTIuNSwyLjUsMCwxLDEs''@;'; put 'put ''Mi41LTIuNUEyLjUsMi41LDAsMCwxLDEwLjM2LDI4LjM2Wk0xOSwxOUgxNlYxN2gzWm0tNi01VjcuNDdhOC4xNiw4LjE2LDAsMCwxLDUuNCwxLjE1QTE5LjE1LDE5LjE1LDAsMCwxLDI0LDE0Wk0yNi4wNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwyNi4wNiwy''@;'; put 'put ''OC4zNloiLz4nKSxkLkNsclNoYXBlTWFwPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNTksNi4xOUExLDEsMCwwLDAsMzIuNyw2TDIzLjA5LDksMTMuNDYsNC4xMWExLDEsMCwwLDAtLjg0LDBMMi42Miw4''@;'; put 'put ''LjJBMSwxLDAsMCwwLDIsOS4xM1YyOS42MWExLDEsMCwwLDAsMS4zOC45MkwxMywyNi41OGw5LjU5LDQuOTJhMSwxLDAsMCwwLC40Ni4xMSwxLDEsMCwwLDAsLjMsMGwxMC0zLjEyYTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLjU5LDYuMTlaTTMyLDI2Ljc1bC04LjMyLDIuNlYyNy4w''@;'; put 'put ''NmgtMS42djJsLTguNC00LjMxVjIzLjA2aC0xLjZ2MS43Mkw0LDI4LjExVjkuNzlsOC4wOC0zLjMzVjguODFoMS42VjYuNDdsOC40LDQuM3YyLjFoMS42VjExTDMyLDguMzZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIHg9IjIyLjA4IiB5PSIxNS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjIyLjA4IiB5PSIyMS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjA4IiB5PSIxMS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIHg9IjEyLjA4IiB5PSIxNy4xMyIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjc1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLjMxLDcuMzUsMjUsOS45NFYxNEgyM1YxMC4yOUwxNCw1''@;'; put 'put ''LjY4VjlIMTJWNS4yN2wtOS42Nyw0QS41My41MywwLDAsMCwyLDkuNzVWMzAuNDVhLjUzLjUzLDAsMCwwLC43NC40OUwxMiwyNy4xMlYyM2gydjQuNTNsOSw0LjYxVjI4aDJ2My43OWw4LjYzLTIuN2EuNTMuNTMsMCwwLDAsLjM3LS41MVY3Ljg2QS41My41MywwLDAsMCwzMy4zMSw3LjM1Wk0x''@;'; put 'put ''NCwyMUgxMlYxN2gyWm0wLTZIMTJWMTFoMlpNMjUsMjZIMjNWMjJoMlptMC02SDIzVjE2aDJaIi8+JyksZC5DbHJTaGFwZUNvbXBhc3M9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjgyLDE1LjMxaDBMMTAuNDYsOWMtLjQ2LS4yNi0xLjExLjM3LS44Ni44NGw2LjE1LDEwLjU2LDEw''@;'; put 'put ''LjU2LDYuMTVhLjY2LjY2LDAsMCwwLC44NC0uODZabS00LDQsMy0zLDQuNTUsNy40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMSwy''@;'; put 'put ''OS45NVYyOS41M0gxN3YyLjQyQTE0LDE0LDAsMCwxLDQuMDUsMTlINi40N1YxN0g0LjA1QTE0LDE0LDAsMCwxLDE3LDQuMDVWNi40N2gyVjQuMDVBMTQsMTQsMCwwLDEsMzEuOTUsMTdIMjkuNTN2MmgyLjQyQTE0LDE0LDAsMCwxLDE5LDMxLjk1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk02LjQ3LDE5SDQuMDVjMC0uMzMtLjA1LS42Ni0uMDUtMXMwLS42Ny4wNS0xSDYuNDdaTTE3LDQuMDVjLjMzLDAsLjY2LS4wNSwxLS4wNXMu''@;'; put 'put ''NjcsMCwxLC4wNVY2LjQ3SDE3Wm0yLDI3LjljLS4zMywwLS42Ni4wNS0xLC4wNXMtLjY3LDAtMS0uMDVWMjkuNTNoMlptOC01LjU4YS41OS41OSwwLDAsMS0uNjkuMTZMMTUuNzUsMjAuMzgsOS42LDkuODJjLS4yNS0uNDcuMzktMS4xLjg2LS44NGwxMC4zNyw2LjMzaDBsNi4zMywxMC4zN0Eu''@;'; put 'put ''NTkuNTksMCwwLDEsMjcsMjYuMzdaTTI5LjUzLDE5VjE3aDIuNDJjMCwuMzMuMDUuNjYuMDUsMXMwLC42Ny0uMDUsMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE2Ljc3IDE5LjM1IDI0LjM1IDIzLjc3''@;'; put 'put ''IDE5LjggMTYuMzMgMTYuNzcgMTkuMzUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZU1hcE1hcmtlcj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDYu''@;'; put 'put ''NzJhNS43Myw1LjczLDAsMSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCwwLDAsMTgsNi43MlptMCw5LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45''@;'; put 'put ''MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJaTTIzLjU5LDI0bC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMWE5''@;'; put 'put ''Ljc4LDkuNzgsMCwxLDEsMTkuNTYsMEMyNy43OCwxNy43OSwyNS4zNiwyMS40LDIzLjU5LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDYuNzJhNS43Myw1LjczLDAs''@;'; put 'put ''MSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCwwLDAsMTgsNi43MlptMCw5LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5YTcuNDksNy40OSwwLDAsMS0yLS4zM2MwLC4xOSwwLC4zOCwwLC41NywwLDQuMDYtMi40Miw3LjY3LTQuMTksMTAuMzFsLS4zNi41M2MtMS43MiwyLjU4LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45''@;'; put 'put ''TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxQTkuNzcsOS43NywwLDAsMSwyMi41Niw1LjA5YTcuNDUsNy40NSwwLDAsMSwuNTItMkExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEs''@;'; put 'put ''MCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTEuNzksMTEu''@;'; put 'put ''NzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwx''@;'; put 'put ''MS43OSwwLDAsMCwxOCwyWm0wLDE3YTYuNTYsNi41NiwwLDEsMSw2LjU2LTYuNTZBNi41Niw2LjU2LDAsMCwxLDE4LDE5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5QTcuNDcsNy40NywwLDAsMSwyNC4zOCwxMWE2LjU4LDYuNTgsMCwxLDEtMS42MS0zLDcuNDIsNy40MiwwLDAsMSwuMzEt''@;'; put 'put ''NC44NEExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUz''@;'; put 'put ''LTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGQuQ2xyU2hhcGVCaWN5Y2xlPSgwLG8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LjUsMjkuNjVB''@;'; put 'put ''Ni41MSw2LjUxLDAsMCwxLDIsMjMuMTVhNi4zOSw2LjM5LDAsMCwxLDYuNS02LjM2QTYuMzksNi4zOSwwLDAsMSwxNSwyMy4xNSw2LjUxLDYuNTEsMCwwLDEsOC41LDI5LjY1Wm0wLTExYTQuNSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQuNTEsMCwwLDAsOC41LDE4LjY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI3LjUsMjkuNjVhNi41MSw2LjUxLDAsMCwxLTYuNS02LjUsNi41LDYuNSwwLDAsMSwxMywwQTYuNTEsNi41MSwwLDAsMSwyNy41LDI5LjY1Wm0wLTExYTQuNSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQuNTEs''@;'; put 'put ''MCwwLDAsMjcuNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyNC42Nkg4YTEsMSwwLDAsMS0uODktMS40NWw1LTEwLDEuNzguOUw5LjYyLDIyLjczSDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTMiIHk9IjEyLjY4IiB3aWR0aD0iMTEiIGhlaWdodD0iMS45MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI4LDI0LjY2YTEsMSwwLDAsMS0uOTQtLjY2TDIyLjI5LDEwLjY2SDIwYTEsMSwwLDAs''@;'; put 'put ''MS0xLTEsMSwxLDAsMCwxLDEtLjkzaDNhLjk0Ljk0LDAsMCwxLC45NC42bDUsMTRhMSwxLDAsMCwxLS42LDEuMjdBMSwxLDAsMCwxLDI4LDI0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTEzLDE0LjY2YTEsMSwwLDAsMS0uNzEt''@;'; put 'put ''LjI5bC0xLjctMS43MUg4YTEsMSwwLDAsMS0xLTEsLjk0Ljk0LDAsMCwxLDEtMWgzYTEuMDgsMS4wOCwwLDAsMSwuNzUuMjdsMiwyYTEsMSwwLDAsMSwwLDEuNDFBMSwxLDAsMCwxLDEzLDE0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTE1LDIxLjljLTAuMi0yLTEuMi0zLjgtMi45LTQuOWwtMi41LDQuOUgxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTcuMiwyMy40Yy0wLjItMC4zLTAuMi0wLjcsMC0xbDMuMi02LjNjLTAuNi0wLjItMS4yLTAuMi0xLjgtMC4yQzUs''@;'; put 'put ''MTUuOSwyLDE4LjgsMiwyMi40YzAsMy42LDIuOSw2LjUsNi41LDYuNVxuXHRjMywwLDUuNi0yLjEsNi4zLTVIOEM3LjcsMjMuOSw3LjMsMjMuNyw3LjIsMjMuNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDIxLjloLTRjMCwwLjIsMCww''@;'; put 'put ''LjMsMCwwLjVjMCwwLjUtMC4xLDEtMC4yLDEuNUgxOVYyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNSwxNS45Yy0wLjMsMC0wLjYsMC0wLjksMC4xbDIuNCw2LjZjMC4yLDAuNS0wLjEsMS4xLTAuNiwxLjNjLTAuMSwwLTAuMiww''@;'; put 'put ''LjEtMC4zLDAuMWMtMC40LDAtMC44LTAuMy0wLjktMC43bC0yLjQtNi43XG5cdGMtMy4yLDEuNi00LjUsNS41LTMsOC43YzEuNiwzLjIsNS41LDQuNSw4LjcsM2MzLjItMS42LDQuNS01LjUsMy04LjdDMzIuMiwxNy4zLDMwLDE1LjksMjcuNSwxNS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMjQuNywxNi43YzAuNi0wLjMsMS4zLTAuNSwxLjktMC42bC0yLjctNy40QzIzLjgsOC4yLDIzLjQsOCwyMyw3LjloLTNjLTAuNiwwLTEsMC41LTEsMS4xYzAsMC41LDAuNCwwLjksMSwwLjlcblx0YzAsMCwwLDAsMCwwaDIuM2wwLjcsMmgt''@;'; put 'put ''OS42bC0xLjctMS43QzExLjUsMTAuMSwxMS4zLDEwLDExLDEwSDhjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMi42bDEuMiwxLjJsLTEuNSwzXG5cdGMwLjYsMC4yLDEuMywwLjUsMS44LDAuOGwxLjYtMy4yaDEwTDI0LjcsMTYuN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTUiIC8+JyksZC5DbHJTaGFwZUJvYXQ9KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjEsMjcuMUMyOCwyNywyNi45LDI3LjQsMjYsMjguMmMtMS4xLDEuMS0yLjksMS4xLTQuMSwwYy0xLTAuNy0yLjEtMS4xLTMuMy0xLjFjLTEuMi0wLjEtMi40LDAuMy0zLjMsMS4xXG5c''@;'; put 'put ''dFx0QzE0LjcsMjguNywxNCwyOSwxMy4yLDI5cy0xLjUtMC4zLTIuMS0wLjhjLTEtMC44LTIuMi0xLjItMy40LTEuMnMtMi40LDAuNC0zLjQsMS4yQzMuNywyOC43LDIuOCwyOSwyLDI5djJcblx0XHRjMS4zLDAuMSwyLjYtMC4zLDMuNi0xLjJDNi4yLDI5LjMsNy4xLDI5LDcuOSwyOWMwLjcs''@;'; put 'put ''MCwxLjUsMC4zLDIuMSwwLjhjMS44LDEuNiw0LjYsMS42LDYuNSwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44XG5cdFx0YzAuNywwLDEuNCwwLjMsMiwwLjhjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjQsMC4zLDEuOSwwLjhjMC45LDAuNywx''@;'; put 'put ''LjksMS4xLDMsMS4ydi0yXG5cdFx0Yy0xLDAtMS4yLTAuNC0xLjctMC44QzMxLjQsMjcuNSwzMC4zLDI3LjEsMjkuMSwyNy4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjNjMC0wLjYsMC41LTEsMS4xLTFIMzJsLTMuNSwzLjFo''@;'; put 'put ''MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC43LTAuOCwwLjYtMi4xLTAuMi0yLjhcblx0XHRDMzMsMjAuMiwzMi42LDIwLDMyLjEsMjBoLTI1Yy0xLjcsMC0zLDEuMy0zLDN2My4yYzAuNS0wLjUsMS4yLTAuOCwxLjktMS4xVjIzeiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTguOSwxOUgxNXYtNy44YzAtMC42LTAuMy0xLjItMC44LTEuNkMxMy4zLDguOSwxMiw5LjEsMTEuNCwxMGwtNC4xLDUuOWMtMC40LDAuNi0wLjQsMS40LTAuMSwyLjFDNy41LDE4LjYsOC4yLDE5LDguOSwxOVxuXHRcdHog''@;'; put 'put ''TTEzLjEsMTEuMkwxMywxN0g4LjlMMTMuMSwxMS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI2LDE4YzAuNC0wLjYsMC40LTEuNCwwLTJMMTkuNyw1LjZjLTAuNC0wLjYtMS0xLTEuNy0xYy0xLjEsMC0yLDAuOS0yLDJWMTloOC4z''@;'; put 'put ''QzI1LDE5LDI1LjcsMTguNiwyNiwxOHogTTE3LjksNi42XG5cdFx0bDYuNCwxMC41aC02LjRWNi42eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTM0LDMxYy0xLjEtMC4xLTIuMS0wLjUtMy0xLjJjLTAuNS0wLjUtMS4yLTAuOC0yLTAu''@;'; put 'put ''OGMtMC43LDAtMS41LDAuMy0yLDAuOGMtMC45LDAuOC0yLDEuMS0zLjEsMS4xYy0xLjIsMC0yLjQtMC40LTMuMy0xLjFcblx0Yy0xLjItMS4xLTMtMS4xLTQuMSwwYy0wLjksMC44LTIuMSwxLjItMy40LDEuMmMtMS4yLDAtMi4zLTAuNC0zLjItMS4yYy0wLjYtMC41LTEuMy0wLjgtMi0wLjhj''@;'; put 'put ''LTAuOCwwLTEuNywwLjMtMi4zLDAuOFxuXHRjLTEsMC44LTIuMywxLjItMy41LDEuMVYyOWMwLjgsMCwxLjctMC4zLDIuMy0wLjljMS0wLjgsMi4yLTEuMiwzLjQtMS4xYzEuMiwwLDIuNCwwLjQsMy4zLDEuMmMxLjIsMS4xLDMsMS4xLDQuMiwwXG5cdGMxLjktMS42LDQuNy0xLjYsNi41LDBj''@;'; put 'put ''MS4yLDEuMSwzLDEuMSw0LjEsMGMwLjktMC44LDIuMS0xLjIsMy4zLTEuMmMxLjEsMCwyLjIsMC40LDMsMS4yQzMyLjgsMjguNywzMywyOSwzNCwyOUwzNCwzMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMSwyNi4yYzAuNi0wLjUsMS4y''@;'; put 'put ''LTAuOCwxLjktMVYyM2MwLTAuNiwwLjQtMS4xLDEtMS4xaDI1TDI4LjQsMjVoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJcblx0YzAuNy0wLjksMC41LTIuMS0wLjQtMi44QzMyLjksMjAuMSwzMi40LDIwLDMyLDIwSDdjLTEuNywwLTMsMS4zLTMsM0w0LjEsMjYu''@;'; put 'put ''Mkw0LjEsMjYuMnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE0LjksMTguOUg4LjljLTEuMSwwLTItMC45LTItMmMwLTAuNCwwLjEtMC44LDAuNC0xLjJsNC4xLTUuOGMwLjYtMC45LDEuOS0xLjEsMi44LTAuNWMwLjUsMC40LDAuOCwxLDAu''@;'; put 'put ''OCwxLjZWMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LjMsMTguOUgxNlY2LjRjMC0xLjEsMC45LTIsMi0yYzAuNywwLDEuMywwLjQsMS43LDFMMjYsMTUuOGMwLjYsMSwwLjIsMi4yLTAuNywyLjdDMjUsMTguNywyNC42LDE4Ljgs''@;'; put 'put ''MjQuMywxOC45XG5cdEwyNC4zLDE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGQuQ2xyU2hhcGVDYW1wZXJ2YW49KDAsby5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTkuNSwyNEM5LjUsMjQsOS41LDI0LDkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcu''@;'; put 'put ''NWMwLDAsMCwwLDAsMEM2LDI5LjQsNy42LDMxLDkuNSwzMWMxLjksMCwzLjUtMS42LDMuNS0zLjVcblx0XHRTMTEuNCwyNCw5LjUsMjR6IE05LjUsMjlDOC43LDI5LDgsMjguMyw4LDI3LjVTOC43LDI2LDkuNSwyNnMxLjUsMC43LDEuNSwxLjVTMTAuMywyOSw5LjUsMjl6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjMuNSwyNEMyMy41LDI0LDIzLjUsMjQsMjMuNSwyNGMtMS45LDAtMy41LDEuNi0zLjUsMy41YzAsMCwwLDAsMCwwYzAsMS45LDEuNSwzLjUsMy41LDMuNWMxLjksMCwzLjUtMS42LDMuNS0zLjVcblx0XHRTMjUu''@;'; put 'put ''NCwyNCwyMy41LDI0eiBNMjMuNSwyOWMtMC44LDAtMS41LTAuNy0xLjUtMS41czAuNy0xLjUsMS41LTEuNXMxLjUsMC43LDEuNSwxLjVTMjQuMywyOSwyMy41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDIwLjFWMjBoLTAu''@;'; put 'put ''MWwtMy41LTUuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjNWOS43QzMyLDcuMSwyOS45LDUsMjcuMyw1aC04LjVjLTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzXG5cdFx0djE3aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEwLjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43''@;'; put 'put ''LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMwLDEuNS0xLjIsMi43LTIuNywyLjdIMjR2OWg3Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2MmgyYzEuNywwLDMtMS4zLDMtM3YtMy4zTDMzLDIwLjF6IE0yNiwyMHYtNWgxLjVsMy4xLDVIMjZ6IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMiwyMiAyMiwxMyAxNSwxMyAx''@;'; put 'put ''NSwyOCAxNywyOCAxNywxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTYsMjBoN3YtN0g2VjIweiBNOCwxNWgzdjNIOFYxNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik05LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVTNy42LDMxLDkuNSwzMWMwLDAsMCwwLDAsMGMxLjksMCwzLjUtMS42LDMuNS0zLjVjMCwwLDAtMC4xLDAtMC4xQzEzLDI1LjUsMTEuNCwyNCw5LjUsMjR6IlxuXHRcdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPjxjaXJjbGUgY3g9IjIzLjUiIGN5PSIyNy41IiByPSIzLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI5LjUsMTQuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjJWOS43YzAsMCwwLDAsMC0wLjFDMzIsNywyOS45LDUsMjcuMyw1aC04LjVj''@;'; put 'put ''LTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzdjE3XG5cdFx0aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEwLjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMwLDEuNS0xLjIsMi43LTIuNywyLjdIMjdoLTN2OWg3''@;'; put 'put ''Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2MmgyYzEuNywwLDMtMS4zLDMtM3YtMy4zTDI5LjUsMTQuNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI3LjkiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIxLjksMjIgMjEuOSwxMyAxNSwxMyAxNSwyOCAxNi45LDI4IDE2LjksMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHJlY3QgeD0iNiIg''@;'; put 'put ''eT0iMTMiIHdpZHRoPSI2LjkiIGhlaWdodD0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxkLkNsclNoYXBlQ2FyYXZhbj0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTMuNSwyMUMxMSwyMSw5LDIzLDksMjUuNXMyLDQuNSw0LjUsNC41YzIuNSww''@;'; put 'put ''LDQuNS0yLDQuNS00LjVDMTgsMjMsMTYsMjEsMTMuNSwyMXogTTEzLjUsMjhjLTEuNCwwLTIuNS0xLjEtMi41LTIuNVxuXHRcdHMxLjEtMi41LDIuNS0yLjVzMi41LDEuMSwyLjUsMi41UzE0LjksMjgsMTMuNSwyOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAuNC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEuNUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywxLjMsMywzLDNoMnYtMkg1XG5cdFx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFo''@;'; put 'put ''MTguOGMwLjQsMCwwLjcsMC4yLDAuOSwwLjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdFx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIC8+PHBhdGggZD0iTTE2LDEySDd2Nmg5VjEyeiBNMTQsMTZIOXYtMmg1VjE2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTEzLjUsMzBDMTEsMzAsOSwyOCw5LDI1LjVzMi00LjUsNC41LTQuNXM0LjUsMiw0LjUsNC41QzE4''@;'; put 'put ''LDI4LDE2LDMwLDEzLjUsMzB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAuNC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEuNUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywx''@;'; put 'put ''LjMsMywzLDNoMnYtMkg1XG5cdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRjMC42LDAsMS0wLjQsMS0x''@;'; put 'put ''UzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxOEg3di02aDlWMTh6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGQuQ2xyU2hhcGVGZXJyeT0oMCxvLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMjksMjUuMWMtMS4yLDAtMi4zLDAuNC0zLjMsMS4xYzAsMCwwLDAsMCwwYy0xLjEsMS4xLTMsMS4xLTQuMSwwYy0wLjktMC44LTIuMS0xLjItMy4zLTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yXG5cdFx0Yy0xLjIsMS4xLTMsMS4xLTQuMiwwQzEwLDI1LjQsOC44LDI1LDcu''@;'; put 'put ''NiwyNWMtMS4yLDAtMi40LDAuNC0zLjQsMS4xQzMuNiwyNi43LDIuOCwyNywyLDI3djJjMS4zLDAuMSwyLjUtMC40LDMuNC0xLjJcblx0XHRDNi4xLDI3LjMsNi45LDI3LDcuNywyN2MwLjgsMCwxLjUsMC4zLDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwYzAuNi0wLjUsMS4zLTAuOCwy''@;'; put 'put ''LjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOFxuXHRcdGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNSwwLjMsMiwwLjhjMC45LDAuNywyLDEuMSwzLjEsMS4ydi0xLjljLTAuNywwLTEuNC0wLjMtMS45LTAuOVxuXHRcdEMzMS4zLDI1LjQs''@;'; put 'put ''MzAuMSwyNSwyOSwyNS4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuOSwyMy4yVjIwSDMybC0zLjUsM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjUtMC42LDAuNS0xLjQsMC4yLTIuMWMtMC40''@;'; put 'put ''LTAuNy0xLTEtMS44LTFoLTQuNFxuXHRcdEwyMi41LDExSDE3Yy0xLjcsMC0zLDEuMy0zLDNoLTJWOC4xSDZ2Ni4xYy0xLjIsMC40LTIsMS41LTIsMi44djEuMVYyMHY0LjNsMC4xLTAuMUM0LjYsMjMuNyw1LjIsMjMuNCw1LjksMjMuMnogTTgsMTBoMnY0SDhWMTB6XG5cdFx0IE02LDE3YzAt''@;'; put 'put ''MC42LDAuNC0xLDEtMWg5di0yYzAtMC42LDAuNC0xLDEtMWg1bDAuNiwxSDE4djJoNS44bDEuMiwyLjFINlYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOC4yLDI1Yy0xLjIsMC0yLjQsMC40LTMuMywxLjJjLTEuMiwxLjEtMywx''@;'; put 'put ''LjEtNC4xLDBjLTEuOS0xLjYtNC42LTEuNi02LjUsMGMtMS4yLDEuMS0yLjksMS4xLTQuMSwwXG5cdFx0Yy0wLjktMC44LTItMS4yLTMuMi0xLjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMkMzLjQsMjYuNywyLjcsMjcsMiwyN3YyYzEuMS0wLjEsMi4yLTAuNSwzLjEtMS4yQzUuNiwyNy4zLDYu''@;'; put 'put ''MywyNyw3LDI3XG5cdFx0YzAuNywwLDEuNSwwLjMsMiwwLjhjMS45LDEuNiw0LjcsMS42LDYuNiwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBcblx0XHRjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS42''@;'; put 'put ''LDAuMywyLjEsMC44YzAuOSwwLjgsMi4yLDEuMywzLjQsMS4ydi0yYy0wLjgsMC0xLjYtMC4zLTIuMi0wLjhDMzAuNywyNS40LDI5LjUsMjUsMjguMiwyNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTUuOCwyMy4ydi0zLjNoMjYuMUwyOC40''@;'; put 'put ''LDIzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjEtMC4yYzAuNy0wLjksMC41LTIuMS0wLjQtMi44Yy0wLjMtMC4zLTAuOC0wLjQtMS4yLTAuNFxuXHRcdGgtNC4xbC01LjQtN2gtNS41Yy0xLjcsMC0zLDEuMy0zLDNoLTJWOEg2djYuMmMtMS4yLDAuNC0yLjEsMS41LTIu''@;'; put 'put ''MSwyLjhsMCw3LjJsMC4xLDBDNC41LDIzLjcsNS4xLDIzLjQsNS44LDIzLjJ6IE0xNy45LDE0aDQuMlxuXHRcdGwxLjQsMmgtNS43VjE0eiBNNy45LDEwaDJ2NGgtMlYxMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksZC5DbHJTaGFwZVRyYWlsZXI9KDAs''@;'; put 'put ''by5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44UzE4LjIsMTkuMiwxNSwxOS4yeiBNMTUsMjkuMmMtMi4zLDAtNC4yLTEuOS00LjItNC4yXG5cdFx0czEuOS00LjIsNC4yLTQuMnM0LjIs''@;'; put 'put ''MS45LDQuMiw0LjJTMTcuMywyOS4yLDE1LDI5LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRcdGMwLDAsMCwwLDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFo''@;'; put 'put ''NWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IE0yNiwxM0g0di0yaDIyVjEzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAt''@;'; put 'put ''MS44LTAuOC0xLjktMS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdGMwLDAsMCwwLDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFoNWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOGwwLDBDMjAuOCwyMS44LDE4LjIsMTkuMiwxNSwxOS4yeiBNMTYsMjZoLTJ2LTJoMlYyNnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIC8+JyksZC5DbHJTaGFwZU9uSG9saWRheT0oMCxvLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguMDgsMi4zNGMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNEExNy45MSwxNy45MSwwLDAsMCwyMywyOS42Nmw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuMzgtLjMsMSwxLDAs''@;'; put 'put ''MCwwLC4xNi0uNTRWMjUuNjFhMTMsMTMsMCwwLDAsNC05LjI3QzM0LjA4LDguNjIsMjYuOSwyLjM0LDE4LjA4LDIuMzRaTTI4LjM3LDI0LjQ1YTEsMSwwLDAsMC0uMzIuNzN2NS4zNGwtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExLDE2LDE2LDAsMCwxLTQuNzYuNzJjLTcuNzIsMC0xNC01''@;'; put 'put ''LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4xLDExLjEsMCwwLDEsMjguMzcsMjQuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMSwxNS44MiwzMSwxNS42NywyOC41LDEzLjQ0YTMuMjUsMy4y''@;'; put 'put ''NSwwLDAsMC0yLjM5LS44NGwtNS4zOC4zNC0zLjU5LTNhLjgxLjgxLDAsMCwwLS41Mi0uMTlIMTMuNTZhLjc4Ljc4LDAsMCwwLS42OS40Ljc3Ljc3LDAsMCwwLDAsLjc5bDEuMzYsMi40NC00LjcxLjI5LDEuMzEsMS41MiwxNS4zOS0xYTEuNjUsMS42NSwwLDAsMSwxLjIyLjQzbDIuMzYsMi4x''@;'; put 'put ''M2EuMTEuMTEsMCwwLDEsMCwuMDdjMCwuMDYtLjA5LjA1LS4xLjA2SDIxLjgybC0uMzUuMzctNS4xOSw1LjUzSDE0LjY0bDIuNzMtNS45SDguNTRMNy4xMywxNC4xNiw2LjUxLDEzYS44LjgsMCwwLDAtMS0uMkEuODEuODEsMCwwLDAsNS4yLDEzLjlsMiwzLjk0YTEuMjEsMS4yMSwwLDAsMCwx''@;'; put 'put ''LjA4LjY1aDYuNTdsLTEuOTQsNC4xOEExLjIsMS4yLDAsMCwwLDEzLDIzLjgzYTEuMjIsMS4yMiwwLDAsMCwxLC41NmgyLjQzYTEuMTcsMS4xNywwLDAsMCwuODgtLjM5bDUuMTgtNS41MWg3LjE2YTEuNjUsMS42NSwwLDAsMCwxLjUyLS45MUExLjc0LDEuNzQsMCwwLDAsMzEuMSwxNS44MlpN''@;'; put 'put ''MTQuOTIsMTEuMzFoMS40MWwyLjA5LDEuNzdMMTYsMTMuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExNy45MSwxNy45MSwwLDAsMCw0Ljg4''@;'; put 'put ''LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuMzgtLjNBMSwxLDAsMCwwLDMwLDMyLjVWMjUuNzdhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjkuODQsMThIMjEuNTFhLjQyLjQyLDAsMCwwLS4zLjEzbC01LjMsNS42NGEuMzkuMzksMCwwLDEtLjI5LjEz''@;'; put 'put ''SDEzLjE5YS40MS40MSwwLDAsMS0uMzctLjU4bDIuNDctNS4zMkg3LjQ2YS40Mi40MiwwLDAsMS0uMzYtLjIybC0yLjctNUg2LjI0YS41My41MywwLDAsMSwuMzkuMThsMS41NiwxLjY5YS4zOC4zOCwwLDAsMCwuMzMuMTRsNi4xOC0uMzgtMi0zLjU1aDIuODlhLjQ3LjQ3LDAsMCwxLC4zMS4x''@;'; put 'put ''MUwxOS42MywxNGw2LjY5LS4zNWEyLjQ0LDIuNDQsMCwwLDEsMS44MS42M2wyLjQ3LDIuMjNBLjkyLjkyLDAsMCwxLDI5Ljg0LDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxkLlRyYXZlbFNoYXBlcz17dHJ1Y2s6ZC5DbHJTaGFwZVRydWNrLGFp''@;'; put 'put ''cnBsYW5lOmQuQ2xyU2hhcGVBaXJwbGFuZSxjYXI6ZC5DbHJTaGFwZUNhcixtYXA6ZC5DbHJTaGFwZU1hcCxjb21wYXNzOmQuQ2xyU2hhcGVDb21wYXNzLCJtYXAtbWFya2VyIjpkLkNsclNoYXBlTWFwTWFya2VyLGJpY3ljbGU6ZC5DbHJTaGFwZUJpY3ljbGUsYm9hdDpkLkNsclNoYXBlQm9h''@;'; put 'put ''dCxjYW1wZXJ2YW46ZC5DbHJTaGFwZUNhbXBlcnZhbixjYXJhdmFuOmQuQ2xyU2hhcGVDYXJhdmFuLGZlcnJ5OmQuQ2xyU2hhcGVGZXJyeSx0cmFpbGVyOmQuQ2xyU2hhcGVUcmFpbGVyLCJvbi1ob2xpZGF5IjpkLkNsclNoYXBlT25Ib2xpZGF5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5U''@;'; put 'put ''cmF2ZWxTaGFwZXMsInBsYW5lIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuVHJhdmVsU2hhcGVzLmFpcnBsYW5lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQuVHJhdmVsU2hhcGVzLCJhdXRvIiwoMCxoLmRlc2NyaXB0b3JDb25maWcpKGQuVHJhdmVsU2hhcGVzLmNhcikpLHR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChkLlRyYXZlbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKGosZCxTKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGQuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsZC5kZXNjcmlw''@;'; put 'put ''dG9yQ29uZmlnPWZ1bmN0aW9uIGgobyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOm99fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oaixkLFMpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZC5jbHJJY29uU1ZHPXZvaWQgMDtkLmNsckljb25TVkc9ZnVuY3Rpb24g''@;'; put 'put ''ZihUKXt2YXIgQT0iIjtyZXR1cm4gVC5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoQSs9ImNhbi1iYWRnZSAiKSxULmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoQSs9ImNhbi1hbGVydCAiKSxULmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihBKz0iaGFzLXNvbGlkICIpLChBPyc8c3Zn''@;'; put 'put ''IHZlcnNpb249IjEuMSIgY2xhc3M9IicrQSsnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu''@;'; put 'put ''ayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0''@;'; put 'put ''dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrVCsiPC9zdmc+In19fSl9LDgxNDc0KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXt9O2QucihTKSxkLmQoUyx7YXJyYXlBdmc6KCk9PmNhdCxhcnJheUVhY2g6KCk9PlluLGFycmF5''@;'; put 'put ''RmlsdGVyOigpPT4kNixhcnJheUZsYXR0ZW46KCk9PkFnZSxhcnJheU1hcDooKT0+V3MsYXJyYXlNYXg6KCk9PnNhdCxhcnJheU1pbjooKT0+bGF0LGFycmF5UmVkdWNlOigpPT5kMCxhcnJheVN1bTooKT0+VGdlLGFycmF5VW5pcXVlOigpPT5rZ2UsZXh0ZW5kQXJyYXk6KCk9PlpxLGdldERp''@;'; put 'put ''ZmZlcmVuY2VPZkFycmF5czooKT0+WXEsZ2V0SW50ZXJzZWN0aW9uT2ZBcnJheXM6KCk9PnVhdCxnZXRVbmlvbk9mQXJyYXlzOigpPT5kYXQscGl2b3Q6KCk9PkhBLHN0cmluZ1RvQXJyYXk6KCk9PkdxLHRvMmRBcnJheTooKT0+RWdlfSk7dmFyIGg9e307ZC5yKGgpLGQuZChoLHtfaW5qZWN0''@;'; put 'put ''UHJvZHVjdEluZm86KCk9PlBnZSxpc0RlZmluZWQ6KCk9PndhLGlzRW1wdHk6KCk9PkdjLGlzUmVnRXhwOigpPT5EZ2UsaXNVbmRlZmluZWQ6KCk9Pm1jLHN0cmluZ2lmeTooKT0+cWx9KTt2YXIgbz17fTtkLnIobyksZC5kKG8se2VxdWFsc0lnbm9yZUNhc2U6KCk9PmdhdCxpc0pTT046KCk9''@;'; put 'put ''PkZnZSxpc1BlcmNlbnRWYWx1ZTooKT0+WHEscmFuZG9tU3RyaW5nOigpPT5LcSxzYW5pdGl6ZTooKT0+Skgsc3RyaXBUYWdzOigpPT5iNCxzdWJzdGl0dXRlOigpPT5xSCx0b1VwcGVyQ2FzZUZpcnN0OigpPT5lZH0pO3ZhciBJPXt9O2QucihJKSxkLmQoSSx7YXNzaWduT2JqZWN0RGVmYXVs''@;'; put 'put ''dHM6KCk9PldBLGNsb25lOigpPT5vcCxjcmVhdGVPYmplY3RQcm9wTGlzdGVuZXI6KCk9PkFoLGRlZXBDbG9uZTooKT0+dGQsZGVlcEV4dGVuZDooKT0+ekEsZGVlcE9iamVjdFNpemU6KCk9Pm5OLGRlZmluZUdldHRlcjooKT0+dzQsZHVja1NjaGVtYTooKT0+aEMsZXh0ZW5kOigpPT5GdSxn''@;'; put 'put ''ZXRQcm9wZXJ0eTooKT0+ZU4saGFzT3duUHJvcGVydHk6KCk9PiRjLGluaGVyaXQ6KCk9PllnZSxpc09iamVjdDooKT0+aG8saXNPYmplY3RFcXVhbDooKT0+VUEsbWl4aW46KCk9PnBsLG9iamVjdEVhY2g6KCk9PmFzLHNldFByb3BlcnR5OigpPT50Tn0pO3ZhciBmPXt9O2QucihmKSxkLmQo''@;'; put 'put ''Zix7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PllBLGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+JGdlLGlzQ1NSOigpPT5HZ2UsaXNUb3VjaFN1cHBvcnRlZDooKT0+UXEscmVxdWVzdEFuaW1hdGlvbkZyYW1lOigpPT5aQX0pO3ZhciBUPXt9O2QucihUKSxkLmQoVCx7aXNDaHJvbWU6KCk9''@;'; put 'put ''PmVKLGlzQ2hyb21lV2ViS2l0OigpPT5xZ2UsaXNFZGdlOigpPT5RZ2UsaXNFZGdlV2ViS2l0OigpPT5XYXQsaXNGaXJlZm94OigpPT5yTixpc0ZpcmVmb3hXZWJLaXQ6KCk9PkpnZSxpc0lPUzooKT0+dEosaXNJcGFkT1M6KCk9PmlOLGlzTGludXhPUzooKT0+WmF0LGlzTWFjT1M6KCk9Pm9O''@;'; put 'put ''LGlzTW9iaWxlQnJvd3NlcjooKT0+c3AsaXNTYWZhcmk6KCk9PkdBLGlzV2luZG93c09TOigpPT5hTixzZXRCcm93c2VyTWV0YTooKT0+S2dlLHNldFBsYXRmb3JtTWV0YTooKT0+WGdlfSk7dmFyIEE9e307ZC5yKEEpLGQuZChBLHtIVE1MX0NIQVJBQ1RFUlM6KCk9Pm81ZSxhZGRDbGFzczoo''@;'; put 'put ''KT0+dGksYWRkRXZlbnQ6KCk9PiRhdCxjbGVhclRleHRTZWxlY3Rpb246KCk9PnNKLGNsb3Nlc3Q6KCk9Pks2LGNsb3Nlc3REb3duOigpPT5LQSxlbXB0eTooKT0+UzQsZmFzdElubmVySFRNTDooKT0+SjYsZmFzdElubmVyVGV4dDooKT0+UTYsZmluZEZpcnN0UGFyZW50V2l0aENsYXNzOigp''@;'; put 'put ''PT5uNWUsZ2V0Q2FyZXRQb3NpdGlvbjooKT0+b0osZ2V0Q3NzVHJhbnNmb3JtOigpPT5KYXQsZ2V0RnJhY3Rpb25hbFNjYWxpbmdDb21wZW5zYXRpb246KCk9PmQ1ZSxnZXRGcmFtZUVsZW1lbnQ6KCk9PnQ1ZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+YzVlLGdldE1heGltdW1TY3JvbGxU''@;'; put 'put ''b3A6KCk9Pmw1ZSxnZXRQYXJlbnQ6KCk9PmU1ZSxnZXRQYXJlbnRXaW5kb3c6KCk9Pmc1LGdldFNjcm9sbExlZnQ6KCk9PmlKLGdldFNjcm9sbFRvcDooKT0+bE4sZ2V0U2Nyb2xsYWJsZUVsZW1lbnQ6KCk9PlhBLGdldFNjcm9sbGJhcldpZHRoOigpPT5ndSxnZXRTZWxlY3Rpb25FbmRQb3Np''@;'; put 'put ''dGlvbjooKT0+dTVlLGdldFNlbGVjdGlvblRleHQ6KCk9PlhhdCxnZXRTdHlsZTooKT0+cUEsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PmdDLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PnNOLGdldFdpbmRvd1Njcm9sbFRvcDooKT0+ckosaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9Pllh''@;'; put 'put ''dCxoYXNDbGFzczooKT0+dm8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+dUosaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PmNKLGhhc1plcm9IZWlnaHQ6KCk9PnM1ZSxpbmRleDooKT0+cjVlLGlubmVySGVpZ2h0OigpPT5tQyxpbm5lcldpZHRoOigpPT5hSixpc0NoaWxkT2Y6KCk9Plg2''@;'; put 'put ''LGlzRGV0YWNoZWQ6KCk9PmRKLGlzSFRNTEVsZW1lbnQ6KCk9Pk00LGlzSW5wdXQ6KCk9PmVrLGlzSW50ZXJuYWxFbGVtZW50OigpPT4kQSxpc091dHNpZGVJbnB1dDooKT0+dU4saXNWaXNpYmxlOigpPT5lOCxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6''@;'; put 'put ''KCk9PmhKLG1hdGNoZXNDU1NSdWxlczooKT0+R2F0LG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+aDVlLG9mZnNldDooKT0+RTEsb3V0ZXJIZWlnaHQ6KCk9Pkh1LG91dGVyV2lkdGg6KCk9PnB1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9PnE2LHJlbW92ZUF0dHJpYnV0ZToo''@;'; put 'put ''KT0+QzQscmVtb3ZlQ2xhc3M6KCk9PkhhLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PmZKLHJlbW92ZUV2ZW50OigpPT5LYXQscmVtb3ZlVGV4dE5vZGVzOigpPT5uSixyZXNldENzc1RyYW5zZm9ybTooKT0+UUEscnVuV2l0aFNlbGVjdGVkQ29udGVu''@;'; put 'put ''ZEVkaXRhYmxlRWxlbWVudDooKT0+ZjVlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9PlFhdCxzZXRBdHRyaWJ1dGU6KCk9PlphLHNldENhcmV0UG9zaXRpb246KCk9PkpBLHNldE92ZXJsYXlQb3NpdGlvbjooKT0+Y059KTt2YXIgTT17fTtkLnIoTSksZC5kKE0se2N1cnJ5OigpPT5nNWUs''@;'; put 'put ''Y3VycnlSaWdodDooKT0+bm90LGRlYm91bmNlOigpPT50ayxmYXN0Q2FsbDooKT0+ZE4saXNGdW5jdGlvbjooKT0+YWwscGFydGlhbDooKT0+cEoscGlwZTooKT0+dG90LHRocm90dGxlOigpPT5wNWUsdGhyb3R0bGVBZnRlckhpdHM6KCk9PmVvdH0pO3ZhciBPPXt9O2QucihPKSxkLmQoTyx7''@;'; put 'put ''S0VZX0NPREVTOigpPT5ubyxpc0N0cmxLZXk6KCk9PmlvdCxpc0N0cmxNZXRhS2V5OigpPT52NWUsaXNGdW5jdGlvbktleTooKT0+Z0osaXNLZXk6KCk9Pmt2LGlzUHJpbnRhYmxlQ2hhcjooKT0+bTVlfSk7dmFyIEQ9e307ZC5yKEQpLGQuZChELHtpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3Rv''@;'; put 'put ''cHBlZDooKT0+dDgsaXNMZWZ0Q2xpY2s6KCk9PmhOLGlzUmlnaHRDbGljazooKT0+bjgsaXNUb3VjaEV2ZW50OigpPT55NWUsb2Zmc2V0UmVsYXRpdmVUbzooKT0+XzVlLHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjooKT0+QTJ9KTt2YXIgRT17fTtkLnIoRSksZC5kKEUse19kYXRhVG9IVE1M''@;'; put 'put ''OigpPT5FSixodG1sVG9HcmlkU2V0dGluZ3M6KCk9PlRKLGluc3RhbmNlVG9IVE1MOigpPT54Sn0pO3ZhciBCPXt9O2QucihCKSxkLmQoQix7Y2xhbXA6KCk9PmdzLGdldFBhcnNlZE51bWJlcjooKT0+TDVlLGlzTnVtZXJpYzooKT0+bmQsaXNOdW1lcmljTGlrZTooKT0+UjVlLGlzVW5zaWdu''@;'; put 'put ''ZWROdW1iZXI6KCk9Pkx2LHJhbmdlRWFjaDooKT0+ZW8scmFuZ2VFYWNoUmV2ZXJzZTooKT0+QUosdmFsdWVBY2NvcmRpbmdQZXJjZW50OigpPT5rSn0pO3ZhciBGPXt9O2QucihGKSxkLmQoRix7Y291bnRGaXJzdFJvd0tleXM6KCk9PmRRLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigp''@;'; put 'put ''PT5ldXQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5KY3QsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5RY3QsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT51USxpc0FycmF5T2ZBcnJheXM6KCk9PkhtZSxpc0FycmF5T2ZPYmplY3RzOigpPT5ObWUsc3ByZWFkc2hlZXRDb2x1''@;'; put 'put ''bW5JbmRleDooKT0+cWN0LHNwcmVhZHNoZWV0Q29sdW1uTGFiZWw6KCk9PkROfSk7dmFyIE49e307ZC5yKE4pLGQuZChOLHtDQU5DRUw6KCk9PlNRLENIRUNLQk9YX0NIRUNLRUQ6KCk9PnFlZSxDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0U6KCk9PlhlZSxDSEVDS0JPWF9VTkNIRUNLRUQ6''@;'; put 'put ''KCk9PkplZSxDT01NT05fTkFNRVNQQUNFOigpPT5DUSxDT05URVhUTUVOVV9JVEVNU19BRERfQ09NTUVOVDooKT0+VVEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UOigpPT5HUSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NOigpPT5lZWUsQ09OVEVYVE1FTlVfSVRFTVNf''@;'; put 'put ''QUxJR05NRU5UX0NFTlRFUjooKT0+S1EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PnFRLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT4kUSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT5RUSxDT05URVhUTUVOVV9JVEVN''@;'; put 'put ''U19BTElHTk1FTlRfUklHSFQ6KCk9PlhRLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkpRLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlM6KCk9PnRlZSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0JPVFRPTTooKT0+aWVlLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNf''@;'; put 'put ''TEVGVDooKT0+YWVlLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PnJlZSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1RPUDooKT0+bmVlLENPTlRFWFRNRU5VX0lURU1TX0NMRUFSX0NPTFVNTjooKT0+TFEsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWTooKT0+T1EsQ09OVEVY''@;'; put 'put ''VE1FTlVfSVRFTVNfQ09QWV9DT0xVTU5fSEVBREVSU19PTkxZOigpPT5IUSxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0dST1VQX0hFQURFUlM6KCk9PkZRLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fSEVBREVSUzooKT0+UFEsQ09OVEVYVE1FTlVfSVRF''@;'; put 'put ''TVNfQ1VUOigpPT5OUSxDT05URVhUTUVOVV9JVEVNU19FRElUX0NPTU1FTlQ6KCk9PldRLENPTlRFWFRNRU5VX0lURU1TX0ZSRUVaRV9DT0xVTU46KCk9PlZRLENPTlRFWFRNRU5VX0lURU1TX0hJREVfQ09MVU1OOigpPT5jZWUsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PmRlZSxD''@;'; put 'put ''T05URVhUTUVOVV9JVEVNU19JTlNFUlRfTEVGVDooKT0+VFEsQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX1JJR0hUOigpPT5BUSxDT05URVhUTUVOVV9JVEVNU19NRVJHRV9DRUxMUzooKT0+alEsQ09OVEVYVE1FTlVfSVRFTVNfTkVTVEVEX1JPV1NfREVUQUNIX0NISUxEOigpPT5sZWUsQ09O''@;'; put 'put ''VEVYVE1FTlVfSVRFTVNfTkVTVEVEX1JPV1NfSU5TRVJUX0NISUxEOigpPT5zZWUsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9Pk1RLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+Vk4sQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PllRLENPTlRF''@;'; put 'put ''WFRNRU5VX0lURU1TX1JFRE86KCk9PlJRLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT5vZWUsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTFVNTjooKT0+RFEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTU1FTlQ6KCk9PlpRLENPTlRFWFRNRU5VX0lURU1TX1JF''@;'; put 'put ''TU9WRV9ST1c6KCk9PmtRLENPTlRFWFRNRU5VX0lURU1TX1JPV19BQk9WRTooKT0+eFEsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0JFTE9XOigpPT5FUSxDT05URVhUTUVOVV9JVEVNU19TSE9XX0NPTFVNTjooKT0+dWVlLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfUk9XOigpPT5oZWUsQ09OVEVY''@;'; put 'put ''VE1FTlVfSVRFTVNfVU5ETzooKT0+SVEsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5CUSxDT05URVhUTUVOVV9JVEVNU19VTk1FUkdFX0NFTExTOigpPT56USxDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5KbWUsRU1QVFlfREFUQV9TVEFURV9CVVRUT05T''@;'; put 'put ''X0ZJTFRFUlNfUkVTRVQ6KCk9Pml0ZSxFTVBUWV9EQVRBX1NUQVRFX0RFU0NSSVBUSU9OOigpPT50dGUsRU1QVFlfREFUQV9TVEFURV9ERVNDUklQVElPTl9GSUxURVJTOigpPT5ydGUsRU1QVFlfREFUQV9TVEFURV9OQU1FU1BBQ0U6KCk9PmtDLEVNUFRZX0RBVEFfU1RBVEVfVElUTEU6KCk9''@;'; put 'put ''PmV0ZSxFTVBUWV9EQVRBX1NUQVRFX1RJVExFX0ZJTFRFUlM6KCk9Pm50ZSxGSUxURVJTX0JVVFRPTlNfQ0FOQ0VMOigpPT5OZWUsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5GZWUsRklMVEVSU19CVVRUT05TX09LOigpPT5IZWUsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQVJD''@;'; put 'put ''SDooKT0+VmVlLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PmplZSxGSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfVkFMVUU6KCk9PkJlZSxGSUxURVJTX0JVVFRPTlNfU0VMRUNUX0FMTDooKT0+UGVlLEZJTFRFUlNfQ09ORElUSU9OU19BRlRFUjooKT0+''@;'; put 'put ''VGVlLEZJTFRFUlNfQ09ORElUSU9OU19CRUZPUkU6KCk9PkFlZSxGSUxURVJTX0NPTkRJVElPTlNfQkVHSU5TX1dJVEg6KCk9PnZlZSxGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+eGVlLEZJTFRFUlNfQ09ORElUSU9OU19CWV9WQUxVRTooKT0+SXV0LEZJTFRFUlNfQ09ORElUSU9O''@;'; put 'put ''U19DT05UQUlOUzooKT0+X2VlLEZJTFRFUlNfQ09ORElUSU9OU19FTVBUWTooKT0+ZmVlLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PnllZSxGSUxURVJTX0NPTkRJVElPTlNfRVFVQUw6KCk9PmdlZSxGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOOigpPT53ZWUsRklM''@;'; put 'put ''VEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+Q2VlLEZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU46KCk9PlNlZSxGSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOX09SX0VRVUFMOigpPT5NZWUsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+WGMs''@;'; put 'put ''RklMVEVSU19DT05ESVRJT05TX05PTkU6KCk9PkJOLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+RWVlLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQ09OVEFJTjooKT0+YmVlLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFk6KCk9PnBlZSxGSUxURVJTX0NPTkRJVElPTlNf''@;'; put 'put ''Tk9UX0VRVUFMOigpPT5tZWUsRklMVEVSU19DT05ESVRJT05TX1RPREFZOigpPT5rZWUsRklMVEVSU19DT05ESVRJT05TX1RPTU9SUk9XOigpPT5EZWUsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+SWVlLEZJTFRFUlNfRElWU19GSUxURVJfQllfQ09ORElUSU9OOigpPT5SZWUs''@;'; put 'put ''RklMVEVSU19ESVZTX0ZJTFRFUl9CWV9WQUxVRTooKT0+TGVlLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5PZWUsRklMVEVSU19MQUJFTFNfRElTSlVOQ1RJT046KCk9PmpOLEZJTFRFUlNfTkFNRVNQQUNFOigpPT5CZCxGSUxURVJTX1ZBTFVFU19CTEFOS19DRUxMUzooKT0+ek4s''@;'; put 'put ''TE9BRElOR19OQU1FU1BBQ0U6KCk9PlFtZSxMT0FESU5HX1RJVExFOigpPT5RZWUsT0s6KCk9Pk5OLFBBR0lOQVRJT05fQ09VTlRFUl9TRUNUSU9OOigpPT5XZWUsUEFHSU5BVElPTl9GSVJTVF9QQUdFOigpPT5ZZWUsUEFHSU5BVElPTl9MQVNUX1BBR0U6KCk9PktlZSxQQUdJTkFUSU9OX05B''@;'; put 'put ''TUVTUEFDRTooKT0+RDQsUEFHSU5BVElPTl9OQVZfU0VDVElPTjooKT0+WmVlLFBBR0lOQVRJT05fTkVYVF9QQUdFOigpPT4kZWUsUEFHSU5BVElPTl9QQUdFX1NJWkVfQVVUTzooKT0+VWVlLFBBR0lOQVRJT05fUEFHRV9TSVpFX1NFQ1RJT046KCk9PlVOLFBBR0lOQVRJT05fUFJFVl9QQUdF''@;'; put 'put ''OigpPT5HZWUsUEFHSU5BVElPTl9TRUNUSU9OOigpPT56ZWV9KTt2YXIgSD17fTtmdW5jdGlvbiB6KG4sdCxlLHIsaSxhLGMpe3RyeXt2YXIgbT1uW2FdKGMpLEM9bS52YWx1ZX1jYXRjaChQKXtyZXR1cm4gdm9pZCBlKFApfW0uZG9uZT90KEMpOlByb21pc2UucmVzb2x2ZShDKS50aGVuKHIs''@;'; put 'put ''aSl9ZnVuY3Rpb24gWihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe3ZhciBhPW4uYXBwbHkodCxlKTtmdW5jdGlvbiBjKEMpe3ooYSxyLGksYyxtLCJuZXh0IixDKX1mdW5jdGlvbiBtKEMpe3ooYSxy''@;'; put 'put ''LGksYyxtLCJ0aHJvdyIsQyl9Yyh2b2lkIDApfSl9fWZ1bmN0aW9uIFUobix0KXtyZXR1cm4gT2JqZWN0LmlzKG4sdCl9ZC5yKEgpLGQuZChILHtnZXROb3JtYWxpemVkRGF0ZTooKT0+SDhlfSk7bGV0IEs9bnVsbCxYPSExLG5lPTE7Y29uc3Qgc2U9U3ltYm9sKCJTSUdOQUwiKTtmdW5jdGlv''@;'; put 'put ''biBoZShuKXtjb25zdCB0PUs7cmV0dXJuIEs9bix0fWNvbnN0IFI9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2VyTm9kZTp2b2lkIDAscHJvZHVjZXJMYXN0UmVhZFZlcnNpb246dm9pZCAwLHByb2R1Y2VySW5kZXhPZlRoaXM6dm9pZCAwLG5leHRQcm9kdWNl''@;'; put 'put ''ckluZGV4OjAsbGl2ZUNvbnN1bWVyTm9kZTp2b2lkIDAsbGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM6dm9pZCAwLGNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXM6ITEsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITEsa2luZDoidW5rbm93biIscHJvZHVjZXJNdXN0UmVjb21wdXRlOigpPT4hMSxwcm9k''@;'; put 'put ''dWNlclJlY29tcHV0ZVZhbHVlOigpPT57fSxjb25zdW1lck1hcmtlZERpcnR5OigpPT57fSxjb25zdW1lck9uU2lnbmFsUmVhZDooKT0+e319O2Z1bmN0aW9uIHMobil7aWYoWCl0aHJvdyBuZXcgRXJyb3IoIiIpO2lmKG51bGw9PT1LKXJldHVybjtLLmNvbnN1bWVyT25TaWduYWxSZWFkKG4p''@;'; put 'put ''O2NvbnN0IHQ9Sy5uZXh0UHJvZHVjZXJJbmRleCsrO1BlKEspLHQ8Sy5wcm9kdWNlck5vZGUubGVuZ3RoJiZLLnByb2R1Y2VyTm9kZVt0XSE9PW4mJnBlKEspJiZRKEsucHJvZHVjZXJOb2RlW3RdLEsucHJvZHVjZXJJbmRleE9mVGhpc1t0XSksSy5wcm9kdWNlck5vZGVbdF0hPT1uJiYoSy5w''@;'; put 'put ''cm9kdWNlck5vZGVbdF09bixLLnByb2R1Y2VySW5kZXhPZlRoaXNbdF09cGUoSyk/RyhuLEssdCk6MCksSy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvblt0XT1uLnZlcnNpb259ZnVuY3Rpb24gdihuKXtpZigoIXBlKG4pfHxuLmRpcnR5KSYmKG4uZGlydHl8fG4ubGFzdENsZWFuRXBvY2ghPT1u''@;'; put 'put ''ZSkpe2lmKCFuLnByb2R1Y2VyTXVzdFJlY29tcHV0ZShuKSYmIWIobikpcmV0dXJuIHZvaWQgTChuKTtuLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUobiksTChuKX19ZnVuY3Rpb24gcChuKXtpZih2b2lkIDA9PT1uLmxpdmVDb25zdW1lck5vZGUpcmV0dXJuO2NvbnN0IHQ9WDtYPSEwO3RyeXtm''@;'; put 'put ''b3IoY29uc3QgZSBvZiBuLmxpdmVDb25zdW1lck5vZGUpZS5kaXJ0eXx8ayhlKX1maW5hbGx5e1g9dH19ZnVuY3Rpb24gXygpe3JldHVybiExIT09Sz8uY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlc31mdW5jdGlvbiBrKG4pe24uZGlydHk9ITAscChuKSxuLmNvbnN1bWVyTWFya2VkRGlydHk/''@;'; put 'put ''LihuKX1mdW5jdGlvbiBMKG4pe24uZGlydHk9ITEsbi5sYXN0Q2xlYW5FcG9jaD1uZX1mdW5jdGlvbiB5KG4pe3JldHVybiBuJiYobi5uZXh0UHJvZHVjZXJJbmRleD0wKSxoZShuKX1mdW5jdGlvbiBsKG4sdCl7aWYoaGUodCksbiYmdm9pZCAwIT09bi5wcm9kdWNlck5vZGUmJnZvaWQgMCE9''@;'; put 'put ''PW4ucHJvZHVjZXJJbmRleE9mVGhpcyYmdm9pZCAwIT09bi5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbil7aWYocGUobikpZm9yKGxldCBlPW4ubmV4dFByb2R1Y2VySW5kZXg7ZTxuLnByb2R1Y2VyTm9kZS5sZW5ndGg7ZSsrKVEobi5wcm9kdWNlck5vZGVbZV0sbi5wcm9kdWNlckluZGV4T2ZU''@;'; put 'put ''aGlzW2VdKTtmb3IoO24ucHJvZHVjZXJOb2RlLmxlbmd0aD5uLm5leHRQcm9kdWNlckluZGV4OyluLnByb2R1Y2VyTm9kZS5wb3AoKSxuLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uLnBvcCgpLG4ucHJvZHVjZXJJbmRleE9mVGhpcy5wb3AoKX19ZnVuY3Rpb24gYihuKXtQZShuKTtmb3IobGV0''@;'; put 'put ''IHQ9MDt0PG4ucHJvZHVjZXJOb2RlLmxlbmd0aDt0Kyspe2NvbnN0IGU9bi5wcm9kdWNlck5vZGVbdF0scj1uLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uW3RdO2lmKHIhPT1lLnZlcnNpb258fCh2KGUpLHIhPT1lLnZlcnNpb24pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHEobil7aWYo''@;'; put 'put ''UGUobikscGUobikpZm9yKGxldCB0PTA7dDxuLnByb2R1Y2VyTm9kZS5sZW5ndGg7dCsrKVEobi5wcm9kdWNlck5vZGVbdF0sbi5wcm9kdWNlckluZGV4T2ZUaGlzW3RdKTtuLnByb2R1Y2VyTm9kZS5sZW5ndGg9bi5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5sZW5ndGg9bi5wcm9kdWNlcklu''@;'; put 'put ''ZGV4T2ZUaGlzLmxlbmd0aD0wLG4ubGl2ZUNvbnN1bWVyTm9kZSYmKG4ubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGg9bi5saXZlQ29uc3VtZXJJbmRleE9mVGhpcy5sZW5ndGg9MCl9ZnVuY3Rpb24gRyhuLHQsZSl7aWYoWmUobiksMD09PW4ubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgmJnFlKG4p''@;'; put 'put ''KWZvcihsZXQgcj0wO3I8bi5wcm9kdWNlck5vZGUubGVuZ3RoO3IrKyluLnByb2R1Y2VySW5kZXhPZlRoaXNbcl09RyhuLnByb2R1Y2VyTm9kZVtyXSxuLHIpO3JldHVybiBuLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLnB1c2goZSksbi5saXZlQ29uc3VtZXJOb2RlLnB1c2godCktMX1mdW5j''@;'; put 'put ''dGlvbiBRKG4sdCl7aWYoWmUobiksMT09PW4ubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgmJnFlKG4pKWZvcihsZXQgcj0wO3I8bi5wcm9kdWNlck5vZGUubGVuZ3RoO3IrKylRKG4ucHJvZHVjZXJOb2RlW3JdLG4ucHJvZHVjZXJJbmRleE9mVGhpc1tyXSk7Y29uc3QgZT1uLmxpdmVDb25zdW1l''@;'; put 'put ''ck5vZGUubGVuZ3RoLTE7aWYobi5saXZlQ29uc3VtZXJOb2RlW3RdPW4ubGl2ZUNvbnN1bWVyTm9kZVtlXSxuLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW3RdPW4ubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbZV0sbi5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0tLG4ubGl2ZUNvbnN1bWVySW5k''@;'; put 'put ''ZXhPZlRoaXMubGVuZ3RoLS0sdDxuLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKXtjb25zdCByPW4ubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbdF0saT1uLmxpdmVDb25zdW1lck5vZGVbdF07UGUoaSksaS5wcm9kdWNlckluZGV4T2ZUaGlzW3JdPXR9fWZ1bmN0aW9uIHBlKG4pe3JldHVybiBu''@;'; put 'put ''LmNvbnN1bWVySXNBbHdheXNMaXZlfHwobj8ubGl2ZUNvbnN1bWVyTm9kZT8ubGVuZ3RoPz8wKT4wfWZ1bmN0aW9uIFBlKG4pe24ucHJvZHVjZXJOb2RlPz89W10sbi5wcm9kdWNlckluZGV4T2ZUaGlzPz89W10sbi5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbj8/PVtdfWZ1bmN0aW9uIFplKG4p''@;'; put 'put ''e24ubGl2ZUNvbnN1bWVyTm9kZT8/PVtdLG4ubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM/Pz1bXX1mdW5jdGlvbiBxZShuKXtyZXR1cm4gdm9pZCAwIT09bi5wcm9kdWNlck5vZGV9Y29uc3QgdWU9U3ltYm9sKCJVTlNFVCIpLHplPVN5bWJvbCgiQ09NUFVUSU5HIiksT2U9U3ltYm9sKCJFUlJP''@;'; put 'put ''UkVEIiksQ2U9ey4uLlIsdmFsdWU6dWUsZGlydHk6ITAsZXJyb3I6bnVsbCxlcXVhbDpVLGtpbmQ6ImNvbXB1dGVkIixwcm9kdWNlck11c3RSZWNvbXB1dGU6bj0+bi52YWx1ZT09PXVlfHxuLnZhbHVlPT09emUscHJvZHVjZXJSZWNvbXB1dGVWYWx1ZShuKXtpZihuLnZhbHVlPT09emUpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJEZXRlY3RlZCBjeWNsZSBpbiBjb21wdXRhdGlvbnMuIik7Y29uc3QgdD1uLnZhbHVlO24udmFsdWU9emU7Y29uc3QgZT15KG4pO2xldCByLGk9ITE7dHJ5e3I9bi5jb21wdXRhdGlvbigpLGhlKG51bGwpLGk9dCE9PXVlJiZ0IT09T2UmJnIhPT1PZSYmbi5lcXVhbCh0''@;'; put 'put ''LHIpfWNhdGNoKGEpe3I9T2Usbi5lcnJvcj1hfWZpbmFsbHl7bChuLGUpfWk/bi52YWx1ZT10OihuLnZhbHVlPXIsbi52ZXJzaW9uKyspfX07bGV0IHhlPWZ1bmN0aW9uIGtlKCl7dGhyb3cgbmV3IEVycm9yfTtmdW5jdGlvbiBNZShuKXt4ZShuKX1mdW5jdGlvbiBLZShuLHQpe18oKXx8TWUo''@;'; put 'put ''biksbi5lcXVhbChuLnZhbHVlLHQpfHwobi52YWx1ZT10LGZ1bmN0aW9uIHZ0KG4pe24udmVyc2lvbisrLGZ1bmN0aW9uIHUoKXtuZSsrfSgpLHAobil9KG4pKX1jb25zdCBodD17Li4uUixlcXVhbDpVLHZhbHVlOnZvaWQgMCxraW5kOiJzaWduYWwifTtsZXQgcm47ZnVuY3Rpb24geHQoKXty''@;'; put 'put ''ZXR1cm4gcm59ZnVuY3Rpb24gVHQobil7Y29uc3QgdD1ybjtyZXR1cm4gcm49bix0fWNvbnN0IHluPVN5bWJvbCgiTm90Rm91bmQiKTtmdW5jdGlvbiBYcihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiBzbihuKXtjb25zdCBlPW4ocj0+e0Vycm9yLmNhbGwociksci5z''@;'; put 'put ''dGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfUVycm9yO2NvbnN0IGl0PXNuKG49PmZ1bmN0aW9uKGUpe24odGhpcyksdGhpcy5tZXNzYWdlPWU/YCR7ZS5s''@;'; put 'put ''ZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2UubWFwKChyLGkpPT5gJHtpKzF9KSAke3IudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWV9KTtmdW5jdGlvbiBD''@;'; put 'put ''cihuLHQpe2lmKG4pe2NvbnN0IGU9bi5pbmRleE9mKHQpOzA8PWUmJm4uc3BsaWNlKGUsMSl9fWNsYXNzIEx0e2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5pdGlhbFRlYXJkb3duPXQsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vi''@;'; put 'put ''c2NyaWJlKCl7bGV0IHQ7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFyZW50YWdlOmV9PXRoaXM7aWYoZSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGUpKWZvcihjb25zdCBhIG9mIGUpYS5yZW1vdmUodGhpcyk7ZWxzZSBlLnJlbW92ZSh0''@;'; put 'put ''aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246cn09dGhpcztpZihYcihyKSl0cnl7cigpfWNhdGNoKGEpe3Q9YSBpbnN0YW5jZW9mIGl0P2EuZXJyb3JzOlthXX1jb25zdHtfZmluYWxpemVyczppfT10aGlzO2lmKGkpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgYSBvZiBpKXRy''@;'; put 'put ''eXtRZShhKX1jYXRjaChjKXt0PXQ/P1tdLGMgaW5zdGFuY2VvZiBpdD90PVsuLi50LC4uLmMuZXJyb3JzXTp0LnB1c2goYyl9fWlmKHQpdGhyb3cgbmV3IGl0KHQpfX1hZGQodCl7dmFyIGU7aWYodCYmdCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpUWUodCk7ZWxzZXtpZih0IGluc3RhbmNlb2Yg''@;'; put 'put ''THQpe2lmKHQuY2xvc2VkfHx0Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO3QuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGU9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWU/ZTpbXSkucHVzaCh0KX19X2hhc1BhcmVudCh0KXtjb25zdHtfcGFyZW50YWdl''@;'; put 'put ''OmV9PXRoaXM7cmV0dXJuIGU9PT10fHxBcnJheS5pc0FycmF5KGUpJiZlLmluY2x1ZGVzKHQpfV9hZGRQYXJlbnQodCl7Y29uc3R7X3BhcmVudGFnZTplfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGUpPyhlLnB1c2godCksZSk6ZT9bZSx0XTp0fV9yZW1vdmVQYXJlbnQo''@;'; put 'put ''dCl7Y29uc3R7X3BhcmVudGFnZTplfT10aGlzO2U9PT10P3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoZSkmJkNyKGUsdCl9cmVtb3ZlKHQpe2NvbnN0e19maW5hbGl6ZXJzOmV9PXRoaXM7ZSYmQ3IoZSx0KSx0IGluc3RhbmNlb2YgTHQmJnQuX3JlbW92ZVBhcmVudCh0aGlz''@;'; put 'put ''KX19THQuRU1QVFk9KCgpPT57Y29uc3Qgbj1uZXcgTHQ7cmV0dXJuIG4uY2xvc2VkPSEwLG59KSgpO2NvbnN0IHd0PUx0LkVNUFRZO2Z1bmN0aW9uIFJuKG4pe3JldHVybiBuIGluc3RhbmNlb2YgTHR8fG4mJiJjbG9zZWQiaW4gbiYmWHIobi5yZW1vdmUpJiZYcihuLmFkZCkmJlhyKG4udW5z''@;'; put 'put ''dWJzY3JpYmUpfWZ1bmN0aW9uIFFlKG4pe1hyKG4pP24oKTpuLnVuc3Vic2NyaWJlKCl9Y29uc3QgUHQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiEx''@;'; put 'put ''LHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sUXI9e3NldFRpbWVvdXQobix0LC4uLmUpe2NvbnN0e2RlbGVnYXRlOnJ9PVFyO3JldHVybiByPy5zZXRUaW1lb3V0P3Iuc2V0VGltZW91dChuLHQsLi4uZSk6c2V0VGltZW91dChuLHQsLi4uZSl9LGNsZWFyVGltZW91dChuKXtjb25zdHtk''@;'; put 'put ''ZWxlZ2F0ZTp0fT1RcjtyZXR1cm4odD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIE5lKG4pe1FyLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOnR9PVB0O2lmKCF0KXRocm93IG47dChuKX0pfWZ1bmN0aW9u''@;'; put 'put ''IHl0KCl7fWNvbnN0IHJyPXduKCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiB3bihuLHQsZSl7cmV0dXJue2tpbmQ6bix2YWx1ZTp0LGVycm9yOmV9fWxldCAkdD1udWxsO2Z1bmN0aW9uIEh0KG4pe2lmKFB0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2NvbnN0''@;'; put 'put ''IHQ9ISR0O2lmKHQmJigkdD17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLG4oKSx0KXtjb25zdHtlcnJvclRocm93bjplLGVycm9yOnJ9PSR0O2lmKCR0PW51bGwsZSl0aHJvdyByfX1lbHNlIG4oKX1jbGFzcyBubiBleHRlbmRzIEx0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5p''@;'; put 'put ''c1N0b3BwZWQ9ITEsdD8odGhpcy5kZXN0aW5hdGlvbj10LFJuKHQpJiZ0LmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj0kaX1zdGF0aWMgY3JlYXRlKHQsZSxyKXtyZXR1cm4gbmV3IEd0KHQsZSxyKX1uZXh0KHQpe3RoaXMuaXNTdG9wcGVkP2ZyKGZ1bmN0aW9uIF90KG4pe3JldHVybiB3''@;'; put 'put ''bigiTiIsbix2b2lkIDApfSh0KSx0aGlzKTp0aGlzLl9uZXh0KHQpfWVycm9yKHQpe3RoaXMuaXNTdG9wcGVkP2ZyKGZ1bmN0aW9uIGF0KG4pe3JldHVybiB3bigiRSIsdm9pZCAwLG4pfSh0KSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfWNvbXBsZXRlKCl7dGhp''@;'; put 'put ''cy5pc1N0b3BwZWQ/ZnIocnIsdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQodCl7dGhpcy5k''@;'; put 'put ''ZXN0aW5hdGlvbi5uZXh0KHQpfV9lcnJvcih0KXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0''@;'; put 'put ''IGxuPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIGtpKG4sdCl7cmV0dXJuIGxuLmNhbGwobix0KX1jbGFzcyBhbntjb25zdHJ1Y3Rvcih0KXt0aGlzLnBhcnRpYWxPYnNlcnZlcj10fW5leHQodCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5uZXh0KXRyeXtl''@;'; put 'put ''Lm5leHQodCl9Y2F0Y2gocil7ZWEocil9fWVycm9yKHQpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUuZXJyb3IpdHJ5e2UuZXJyb3IodCl9Y2F0Y2gocil7ZWEocil9ZWxzZSBlYSh0KX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjp0fT10aGlzO2lmKHQuY29t''@;'; put 'put ''cGxldGUpdHJ5e3QuY29tcGxldGUoKX1jYXRjaChlKXtlYShlKX19fWNsYXNzIEd0IGV4dGVuZHMgbm57Y29uc3RydWN0b3IodCxlLHIpe2xldCBpO2lmKHN1cGVyKCksWHIodCl8fCF0KWk9e25leHQ6dD8/dm9pZCAwLGVycm9yOmU/P3ZvaWQgMCxjb21wbGV0ZTpyPz92b2lkIDB9O2Vsc2V7''@;'; put 'put ''bGV0IGE7dGhpcyYmUHQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhhPU9iamVjdC5jcmVhdGUodCksYS51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGk9e25leHQ6dC5uZXh0JiZraSh0Lm5leHQsYSksZXJyb3I6dC5lcnJvciYma2kodC5lcnJvcixhKSxjb21wbGV0ZTp0''@;'; put 'put ''LmNvbXBsZXRlJiZraSh0LmNvbXBsZXRlLGEpfSk6aT10fXRoaXMuZGVzdGluYXRpb249bmV3IGFuKGkpfX1mdW5jdGlvbiBlYShuKXtQdC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIHNpKG4pe1B0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9y''@;'; put 'put ''SGFuZGxpbmcmJiR0JiYoJHQuZXJyb3JUaHJvd249ITAsJHQuZXJyb3I9bil9KG4pOk5lKG4pfWZ1bmN0aW9uIGZyKG4sdCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmV9PVB0O2UmJlFyLnNldFRpbWVvdXQoKCk9PmUobix0KSl9Y29uc3QgJGk9e2Nsb3NlZDohMCxuZXh0Onl0LGVy''@;'; put 'put ''cm9yOmZ1bmN0aW9uIG1pKG4pe3Rocm93IG59LGNvbXBsZXRlOnl0fSxLaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gVmkobil7cmV0dXJuIG59ZnVuY3Rpb24gdWEobil7cmV0dXJuIDA9PT1uLmxlbmd0aD9W''@;'; put 'put ''aToxPT09bi5sZW5ndGg/blswXTpmdW5jdGlvbihlKXtyZXR1cm4gbi5yZWR1Y2UoKHIsaSk9PmkociksZSl9fWxldCBGaT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2UmJih0aGlzLl9zdWJzY3JpYmU9ZSl9bGlmdChlKXtjb25zdCByPW5ldyBuO3JldHVybiByLnNvdXJjZT10aGlz''@;'; put 'put ''LHIub3BlcmF0b3I9ZSxyfXN1YnNjcmliZShlLHIsaSl7Y29uc3QgYT1mdW5jdGlvbiBVaShuKXtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIG5ufHxmdW5jdGlvbiBvaShuKXtyZXR1cm4gbiYmWHIobi5uZXh0KSYmWHIobi5lcnJvcikmJlhyKG4uY29tcGxldGUpfShuKSYmUm4obil9KGUpP2U6''@;'; put 'put ''bmV3IEd0KGUscixpKTtyZXR1cm4gSHQoKCk9Pntjb25zdHtvcGVyYXRvcjpjLHNvdXJjZTptfT10aGlzO2EuYWRkKGM/Yy5jYWxsKGEsbSk6bT90aGlzLl9zdWJzY3JpYmUoYSk6dGhpcy5fdHJ5U3Vic2NyaWJlKGEpKX0pLGF9X3RyeVN1YnNjcmliZShlKXt0cnl7cmV0dXJuIHRoaXMuX3N1''@;'; put 'put ''YnNjcmliZShlKX1jYXRjaChyKXtlLmVycm9yKHIpfX1mb3JFYWNoKGUscil7cmV0dXJuIG5ldyhyPVJhKHIpKSgoaSxhKT0+e2NvbnN0IGM9bmV3IEd0KHtuZXh0Om09Pnt0cnl7ZShtKX1jYXRjaChDKXthKEMpLGMudW5zdWJzY3JpYmUoKX19LGVycm9yOmEsY29tcGxldGU6aX0pO3RoaXMu''@;'; put 'put ''c3Vic2NyaWJlKGMpfSl9X3N1YnNjcmliZShlKXt2YXIgcjtyZXR1cm4gbnVsbD09PShyPXRoaXMuc291cmNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdWJzY3JpYmUoZSl9W0tpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uZSl7cmV0dXJuIHVhKGUpKHRoaXMpfXRvUHJvbWlzZShlKXtyZXR1''@;'; put 'put ''cm4gbmV3KGU9UmEoZSkpKChyLGkpPT57bGV0IGE7dGhpcy5zdWJzY3JpYmUoYz0+YT1jLGM9PmkoYyksKCk9PnIoYSkpfSl9fXJldHVybiBuLmNyZWF0ZT10PT5uZXcgbih0KSxufSkoKTtmdW5jdGlvbiBSYShuKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PW4/P1B0LlByb21pc2UpJiZ2b2lk''@;'; put 'put ''IDAhPT10P3Q6UHJvbWlzZX1jb25zdCBWYT1zbihuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCB1cj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRml7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoZSl7Y29uc3Qgcj1uZXcgZmEodGhpcyx0aGlzKTty''@;'; put 'put ''ZXR1cm4gci5vcGVyYXRvcj1lLHJ9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgVmF9bmV4dChlKXtIdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2Vy''@;'; put 'put ''dmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IHIgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKXIubmV4dChlKX19KX1lcnJvcihlKXtIdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0''@;'; put 'put ''b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1lO2NvbnN0e29ic2VydmVyczpyfT10aGlzO2Zvcig7ci5sZW5ndGg7KXIuc2hpZnQoKS5lcnJvcihlKX19KX1jb21wbGV0ZSgpe0h0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9''@;'; put 'put ''ITA7Y29uc3R7b2JzZXJ2ZXJzOmV9PXRoaXM7Zm9yKDtlLmxlbmd0aDspZS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQo''@;'; put 'put ''KXt2YXIgZTtyZXR1cm4obnVsbD09PShlPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoZSl9X3N1YnNjcmliZShlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksdGhpcy5faW5uZXJTdWJzY3JpYmUoZSl9X2lubmVyU3Vic2NyaWJlKGUpe2NvbnN0e2hhc0Vycm9yOnIsaXNTdG9wcGVkOmksb2JzZXJ2ZXJzOmF9PXRoaXM7cmV0dXJuIHJ8fGk/d3Q6KHRoaXMuY3Vy''@;'; put 'put ''cmVudE9ic2VydmVycz1udWxsLGEucHVzaChlKSxuZXcgTHQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxDcihhLGUpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpe2NvbnN0e2hhc0Vycm9yOnIsdGhyb3duRXJyb3I6aSxpc1N0b3BwZWQ6YX09dGhpcztyP2UuZXJyb3Io''@;'; put 'put ''aSk6YSYmZS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGU9bmV3IEZpO3JldHVybiBlLnNvdXJjZT10aGlzLGV9fXJldHVybiBuLmNyZWF0ZT0odCxlKT0+bmV3IGZhKHQsZSksbn0pKCk7Y2xhc3MgZmEgZXh0ZW5kcyB1cntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5k''@;'; put 'put ''ZXN0aW5hdGlvbj10LHRoaXMuc291cmNlPWV9bmV4dCh0KXt2YXIgZSxyO251bGw9PT0ocj1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUubmV4dCl8fHZvaWQgMD09PXJ8fHIuY2FsbChlLHQpfWVycm9yKHQpe3ZhciBlLHI7bnVsbD09PShyPW51bGw9''@;'; put 'put ''PT0oZT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lcnJvcil8fHZvaWQgMD09PXJ8fHIuY2FsbChlLHQpfWNvbXBsZXRlKCl7dmFyIHQsZTtudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvbXBsZXRlKXx8''@;'; put 'put ''dm9pZCAwPT09ZXx8ZS5jYWxsKHQpfV9zdWJzY3JpYmUodCl7dmFyIGUscjtyZXR1cm4gbnVsbCE9PShyPW51bGw9PT0oZT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3Vic2NyaWJlKHQpKSYmdm9pZCAwIT09cj9yOnd0fX1jbGFzcyB4aSBleHRlbmRzIHVye2NvbnN0cnVj''@;'; put 'put ''dG9yKHQpe3N1cGVyKCksdGhpcy5fdmFsdWU9dH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUodCl7Y29uc3QgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiFlLmNsb3NlZCYmdC5uZXh0KHRoaXMuX3ZhbHVlKSxlfWdldFZhbHVlKCl7Y29uc3R7aGFz''@;'; put 'put ''RXJyb3I6dCx0aHJvd25FcnJvcjplLF92YWx1ZTpyfT10aGlzO2lmKHQpdGhyb3cgZTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHJ9bmV4dCh0KXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPXQpfX1mdW5jdGlvbiBvYShuKXtyZXR1cm4gWHIobj8ubGlmdCl9ZnVuY3Rpb24gWGkobil7''@;'; put 'put ''cmV0dXJuIHQ9PntpZihvYSh0KSlyZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gbihlLHRoaXMpfWNhdGNoKHIpe3RoaXMuZXJyb3Iocil9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24g''@;'; put 'put ''SXIobix0LGUscixpKXtyZXR1cm4gbmV3IGJvKG4sdCxlLHIsaSl9Y2xhc3MgYm8gZXh0ZW5kcyBubntjb25zdHJ1Y3Rvcih0LGUscixpLGEsYyl7c3VwZXIodCksdGhpcy5vbkZpbmFsaXplPWEsdGhpcy5zaG91bGRVbnN1YnNjcmliZT1jLHRoaXMuX25leHQ9ZT9mdW5jdGlvbihtKXt0cnl7''@;'; put 'put ''ZShtKX1jYXRjaChDKXt0LmVycm9yKEMpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aT9mdW5jdGlvbihtKXt0cnl7aShtKX1jYXRjaChDKXt0LmVycm9yKEMpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPXI/ZnVuY3Rpb24oKXt0''@;'; put 'put ''cnl7cigpfWNhdGNoKG0pe3QuZXJyb3IobSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgdDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6ZX09dGhp''@;'; put 'put ''cztzdXBlci51bnN1YnNjcmliZSgpLCFlJiYobnVsbD09PSh0PXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PXR8fHQuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBYYShuLHQpe3JldHVybiBYaSgoZSxyKT0+e2xldCBpPTA7ZS5zdWJzY3JpYmUoSXIocixhPT57ci5uZXh0KG4uY2FsbCh0LGEs''@;'; put 'put ''aSsrKSl9KSl9KX1jb25zdCBvYz0iaHR0cHM6Ly9hbmd1bGFyLmRldi9iZXN0LXByYWN0aWNlcy9zZWN1cml0eSNwcmV2ZW50aW5nLWNyb3NzLXNpdGUtc2NyaXB0aW5nLXhzcyI7Y2xhc3Mga3IgZXh0ZW5kcyBFcnJvcntjb2RlO2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZnVuY3Rpb24gX2Mo''@;'; put 'put ''bix0KXtyZXR1cm5gJHtmdW5jdGlvbiBwZyhuKXtyZXR1cm5gTkcwJHtNYXRoLmFicyhuKX1gfShuKX0ke3Q/IjogIit0OiIifWB9KHQsZSkpLHRoaXMuY29kZT10fX1jb25zdCBYMj1TeW1ib2woIklucHV0U2lnbmFsTm9kZSNVTlNFVCIpLFZjPXsuLi5odCx0cmFuc2Zvcm1Gbjp2b2lkIDAs''@;'; put 'put ''YXBwbHlWYWx1ZVRvSW5wdXRTaWduYWwobix0KXtLZShuLHQpfX07ZnVuY3Rpb24gWGgobix0KXtjb25zdCBlPU9iamVjdC5jcmVhdGUoVmMpO2Z1bmN0aW9uIHIoKXtpZihzKGUpLGUudmFsdWU9PT1YMil0aHJvdyBuZXcga3IoLTk1MCxudWxsKTtyZXR1cm4gZS52YWx1ZX1yZXR1cm4gZS52''@;'; put 'put ''YWx1ZT1uLGUudHJhbnNmb3JtRm49dD8udHJhbnNmb3JtLHJbc2VdPWUscn1mdW5jdGlvbiBXdShuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX1jb25zdCBSMT0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIGkxKG4sdCxlKXtyZXR1cm4gV3UoKCk9Pntjb25zdCByPWZ1bmN0aW9u''@;'; put 'put ''IGdkKG4pe3JldHVybiBmdW5jdGlvbiguLi5lKXtpZihuKXtjb25zdCByPW4oLi4uZSk7Zm9yKGNvbnN0IGkgaW4gcil0aGlzW2ldPXJbaV19fX0odCk7ZnVuY3Rpb24gaSguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgaSlyZXR1cm4gci5hcHBseSh0aGlzLGEpLHRoaXM7Y29uc3QgYz1uZXcg''@;'; put 'put ''aSguLi5hKTtyZXR1cm4gbS5hbm5vdGF0aW9uPWMsbTtmdW5jdGlvbiBtKEMsUCxZKXtjb25zdCBKPUMuaGFzT3duUHJvcGVydHkoUjEpP0NbUjFdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLFIxLHt2YWx1ZTpbXX0pW1IxXTtmb3IoO0oubGVuZ3RoPD1ZOylKLnB1c2gobnVsbCk7cmV0dXJu''@;'; put 'put ''KEpbWV09SltZXXx8W10pLnB1c2goYyksQ319cmV0dXJuIGkucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4saS5hbm5vdGF0aW9uQ2xzPWksaX0pfWNvbnN0IFlzPWdsb2JhbFRoaXM7ZnVuY3Rpb24gdXMobil7Zm9yKGxldCB0IGluIG4paWYoblt0XT09PXVzKXJldHVybiB0O3Rocm93IEVy''@;'; put 'put ''cm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gQ24obix0KXtmb3IoY29uc3QgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJiFuLmhhc093blByb3BlcnR5KGUpJiYobltlXT10W2VdKX1mdW5jdGlvbiBxbihuKXtpZigi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG47aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm5gWyR7bi5tYXAocW4pLmpvaW4oIiwgIil9XWA7aWYobnVsbD09bilyZXR1cm4iIituO2NvbnN0IHQ9bi5vdmVycmlkZGVuTmFtZXx8bi5uYW1lO2lmKHQpcmV0dXJuYCR7dH1gO2NvbnN0IGU9bi50''@;'; put 'put ''b1N0cmluZygpO2lmKG51bGw9PWUpcmV0dXJuIiIrZTtjb25zdCByPWUuaW5kZXhPZigiXG4iKTtyZXR1cm4gcj49MD9lLnNsaWNlKDAscik6ZX1mdW5jdGlvbiBnaShuLHQpe3JldHVybiBuP3Q/YCR7bn0gJHt0fWA6bjp0fHwiIn1jb25zdCBicz11cyh7X19mb3J3YXJkX3JlZl9fOnVzfSk7''@;'; put 'put ''ZnVuY3Rpb24gcmEobil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPXJhLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcW4odGhpcygpKX0sbn1mdW5jdGlvbiB2YShuKXtyZXR1cm4gTG8obik/bigpOm59ZnVuY3Rpb24gTG8obil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4u''@;'; put 'put ''aGFzT3duUHJvcGVydHkoYnMpJiZuLl9fZm9yd2FyZF9yZWZfXz09PXJhfWZ1bmN0aW9uIHVuKG4pe3JldHVybnt0b2tlbjpuLnRva2VuLHByb3ZpZGVkSW46bi5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6bi5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gem4obil7cmV0dXJue3By''@;'; put 'put ''b3ZpZGVyczpuLnByb3ZpZGVyc3x8W10saW1wb3J0czpuLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBEaShuKXtyZXR1cm4gS28obixCYSl8fEtvKG4seGEpfWZ1bmN0aW9uIEtvKG4sdCl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsfWZ1bmN0aW9uIFdvKG4pe3JldHVybiBu''@;'; put 'put ''JiYobi5oYXNPd25Qcm9wZXJ0eShnYSl8fG4uaGFzT3duUHJvcGVydHkoS3IpKT9uW2dhXTpudWxsfWNvbnN0IEJhPXVzKHtcdTAyNzVwcm92OnVzfSksZ2E9dXMoe1x1MDI3NWluajp1c30pLHhhPXVzKHtuZ0luamVjdGFibGVEZWY6dXN9KSxLcj11cyh7bmdJbmplY3RvckRlZjp1c30pO2Ns''@;'; put 'put ''YXNzIHdye19kZXNjO25nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiI7XHUwMjc1cHJvdjtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2Rlc2M9dCx0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWU6dm9pZCAwIT09ZSYm''@;'; put 'put ''KHRoaXMuXHUwMjc1cHJvdj11bih7dG9rZW46dGhpcyxwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlv''@;'; put 'put ''biBIMChuKXtyZXR1cm4gbiYmISFuLlx1MDI3NXByb3ZpZGVyc31jb25zdCB2ZD11cyh7XHUwMjc1Y21wOnVzfSksRXM9dXMoe1x1MDI3NWRpcjp1c30pLG1nPXVzKHtcdTAyNzVwaXBlOnVzfSksdmc9dXMoe1x1MDI3NW1vZDp1c30pLEJjPXVzKHtcdTAyNzVmYWM6dXN9KSxzbD11cyh7X19O''@;'; put 'put ''R19FTEVNRU5UX0lEX186dXN9KSxZdT11cyh7X19OR19FTlZfSURfXzp1c30pO2Z1bmN0aW9uIG9vKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9uOm51bGw9PW4/IiI6U3RyaW5nKG4pfWZ1bmN0aW9uIEd1KG4sdCl7dGhyb3cgbmV3IGtyKC0yMDAsbil9ZnVuY3Rpb24gTjAobix0KXt0''@;'; put 'put ''aHJvdyBuZXcga3IoLTIwMSwhMSl9dmFyIE1vPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uRGVmYXVsdD0wXT0iRGVmYXVsdCIsbltuLkhvc3Q9MV09Ikhvc3QiLG5bbi5TZWxmPTJdPSJTZWxmIixuW24uU2tpcFNlbGY9NF09IlNraXBTZWxmIixuW24uT3B0aW9uYWw9OF09Ik9wdGlvbmFsIixu''@;'; put 'put ''fShNb3x8e30pO2xldCB5ZDtmdW5jdGlvbiBMcCgpe3JldHVybiB5ZH1mdW5jdGlvbiBqYyhuKXtjb25zdCB0PXlkO3JldHVybiB5ZD1uLHR9ZnVuY3Rpb24gdGgobix0LGUpe2NvbnN0IHI9RGkobik7cmV0dXJuIHImJiJyb290Ij09ci5wcm92aWRlZEluP3ZvaWQgMD09PXIudmFsdWU/ci52''@;'; put 'put ''YWx1ZT1yLmZhY3RvcnkoKTpyLnZhbHVlOmUmTW8uT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT10P3Q6dm9pZCBOMCgpfWNvbnN0IGVmPXt9LEo4PSJfX05HX0RJX0ZMQUdfXyI7Y2xhc3MgTmx7aW5qZWN0b3I7Y29uc3RydWN0b3IodCl7dGhpcy5pbmplY3Rvcj10fXJldHJpZXZlKHQsZSl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KHQsZS5vcHRpb25hbD95bjplZixlKX19Y29uc3QgS3U9Im5nVGVtcFRva2VuUGF0aCIsX2c9L1xuL2dtLG9fPSJfX3NvdXJjZSI7ZnVuY3Rpb24gc18obix0PU1vLkRlZmF1bHQpe2lmKHZvaWQgMD09PXh0KCkpdGhyb3cgbmV3IGtyKC0yMDMsITEpO2lm''@;'; put 'put ''KG51bGw9PT14dCgpKXJldHVybiB0aChuLHZvaWQgMCx0KTt7Y29uc3QgZT14dCgpO2xldCByO3JldHVybiByPWUgaW5zdGFuY2VvZiBObD9lLmluamVjdG9yOmUsci5nZXQobix0Jk1vLk9wdGlvbmFsP251bGw6dm9pZCAwLHQpfX1mdW5jdGlvbiBPcihuLHQ9TW8uRGVmYXVsdCl7cmV0dXJu''@;'; put 'put ''KExwKCl8fHNfKSh2YShuKSx0KX1mdW5jdGlvbiBKbihuLHQ9TW8uRGVmYXVsdCl7cmV0dXJuIE9yKG4sbWwodCkpfWZ1bmN0aW9uIG1sKG4pe3JldHVybiB0eXBlb2Ygbj4idSJ8fCJudW1iZXIiPT10eXBlb2Ygbj9uOihuLm9wdGlvbmFsJiY4KXwobi5ob3N0JiYxKXwobi5zZWxmJiYyKXwo''@;'; put 'put ''bi5za2lwU2VsZiYmNCl9ZnVuY3Rpb24gTzEobil7Y29uc3QgdD1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7Y29uc3Qgcj12YShuW2VdKTtpZihBcnJheS5pc0FycmF5KHIpKXtpZigwPT09ci5sZW5ndGgpdGhyb3cgbmV3IGtyKDkwMCwhMSk7bGV0IGksYT1Nby5EZWZhdWx0O2Zv''@;'; put 'put ''cihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtjb25zdCBtPXJbY10sQz1ybShtKTsibnVtYmVyIj09dHlwZW9mIEM/LTE9PT1DP2k9bS50b2tlbjphfD1DOmk9bX10LnB1c2goT3IoaSxhKSl9ZWxzZSB0LnB1c2goT3IocikpfXJldHVybiB0fWZ1bmN0aW9uIHRmKG4sdCl7cmV0dXJuIG5bSjhd''@;'; put 'put ''PXQsbi5wcm90b3R5cGVbSjhdPXQsbn1mdW5jdGlvbiBybShuKXtyZXR1cm4gbltKOF19Y29uc3QgdV89dGYoaTEoIkluamVjdCIsbj0+KHt0b2tlbjpufSkpLC0xKSxoMz10ZihpMSgiT3B0aW9uYWwiKSw4KSx0Yz10ZihpMSgiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBmMyhuLHQpe3JldHVy''@;'; put 'put ''biBuLmhhc093blByb3BlcnR5KEJjKT9uW0JjXTpudWxsfWZ1bmN0aW9uIG5mKG4sdCl7bi5mb3JFYWNoKGU9PkFycmF5LmlzQXJyYXkoZSk/bmYoZSx0KTp0KGUpKX1mdW5jdGlvbiBpbShuLHQsZSl7dD49bi5sZW5ndGg/bi5wdXNoKGUpOm4uc3BsaWNlKHQsMCxlKX1mdW5jdGlvbiB3Zyhu''@;'; put 'put ''LHQpe3JldHVybiB0Pj1uLmxlbmd0aC0xP24ucG9wKCk6bi5zcGxpY2UodCwxKVswXX1mdW5jdGlvbiB2bChuLHQsZSl7bGV0IHI9VjAobix0KTtyZXR1cm4gcj49MD9uWzF8cl09ZToocj1+cixmdW5jdGlvbiBzbShuLHQsZSxyKXtsZXQgaT1uLmxlbmd0aDtpZihpPT10KW4ucHVzaChlLHIp''@;'; put 'put ''O2Vsc2UgaWYoMT09PWkpbi5wdXNoKHIsblswXSksblswXT1lO2Vsc2V7Zm9yKGktLSxuLnB1c2gobltpLTFdLG5baV0pO2k+dDspbltpXT1uW2ktMl0saS0tO25bdF09ZSxuW3QrMV09cn19KG4scix0LGUpKSxyfWZ1bmN0aW9uIHQ3KG4sdCl7Y29uc3QgZT1WMChuLHQpO2lmKGU+PTApcmV0''@;'; put 'put ''dXJuIG5bMXxlXX1mdW5jdGlvbiBWMChuLHQpe3JldHVybiBmdW5jdGlvbiBQcChuLHQsZSl7bGV0IHI9MCxpPW4ubGVuZ3RoPj5lO2Zvcig7aSE9PXI7KXtjb25zdCBhPXIrKGktcj4+MSksYz1uW2E8PGVdO2lmKHQ9PT1jKXJldHVybiBhPDxlO2M+dD9pPWE6cj1hKzF9cmV0dXJufihpPDxl''@;'; put 'put ''KX0obix0LDEpfWNvbnN0IEIwPXt9LGtzPVtdLGwxPW5ldyB3cigiIiksbjc9bmV3IHdyKCIiLC0xKSxyNz1uZXcgd3IoIiIpO2NsYXNzIGxte2dldCh0LGU9ZWYpe2lmKGU9PT1lZil7Y29uc3Qgcj1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtxbih0''@;'; put 'put ''KX0hYCk7dGhyb3cgci5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIscn1yZXR1cm4gZX19ZnVuY3Rpb24gYzEobix0KXtjb25zdCBlPW5bdmddfHxudWxsO2lmKCFlJiYhMD09PXQpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7cW4obil9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVy''@;'; put 'put ''dHkuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gSm8obil7cmV0dXJuIG5bdmRdfHxudWxsfWZ1bmN0aW9uIHlhKG4pe3JldHVybiBuW0VzXXx8bnVsbH1mdW5jdGlvbiBhdShuKXtyZXR1cm4gblttZ118fG51bGx9ZnVuY3Rpb24gX2Qobil7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpufX1mdW5jdGlv''@;'; put 'put ''biBjbSguLi5uKXtyZXR1cm57XHUwMjc1cHJvdmlkZXJzOiRzKDAsbiksXHUwMjc1ZnJvbU5nTW9kdWxlOiEwfX1mdW5jdGlvbiAkcyhuLC4uLnQpe2NvbnN0IGU9W10scj1uZXcgU2V0O2xldCBpO2NvbnN0IGE9Yz0+e2UucHVzaChjKX07cmV0dXJuIG5mKHQsYz0+e2NvbnN0IG09YztDZyht''@;'; put 'put ''LGEsW10scikmJihpfHw9W10saS5wdXNoKG0pKX0pLHZvaWQgMCE9PWkmJnAzKGksYSksZX1mdW5jdGlvbiBwMyhuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtjb25zdHtuZ01vZHVsZTpyLHByb3ZpZGVyczppfT1uW2VdO3VtKGksYT0+e3QoYSxyKX0pfX1mdW5jdGlvbiBDZyhu''@;'; put 'put ''LHQsZSxyKXtpZighKG49dmEobikpKXJldHVybiExO2xldCBpPW51bGwsYT1XbyhuKTtjb25zdCBjPSFhJiZKbyhuKTtpZihhfHxjKXtpZihjJiYhYy5zdGFuZGFsb25lKXJldHVybiExO2k9bn1lbHNle2NvbnN0IEM9bi5uZ01vZHVsZTtpZihhPVdvKEMpLCFhKXJldHVybiExO2k9Q31jb25z''@;'; put 'put ''dCBtPXIuaGFzKGkpO2lmKGMpe2lmKG0pcmV0dXJuITE7aWYoci5hZGQoaSksYy5kZXBlbmRlbmNpZXMpe2NvbnN0IEM9ImZ1bmN0aW9uIj09dHlwZW9mIGMuZGVwZW5kZW5jaWVzP2MuZGVwZW5kZW5jaWVzKCk6Yy5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IFAgb2YgQylDZyhQLHQsZSxyKX19''@;'; put 'put ''ZWxzZXtpZighYSlyZXR1cm4hMTt7aWYobnVsbCE9YS5pbXBvcnRzJiYhbSl7bGV0IFA7ci5hZGQoaSksbmYoYS5pbXBvcnRzLFk9PntDZyhZLHQsZSxyKSYmKFB8fD1bXSxQLnB1c2goWSkpfSksdm9pZCAwIT09UCYmcDMoUCx0KX1pZighbSl7Y29uc3QgUD1mMyhpKXx8KCgpPT5uZXcgaSk7''@;'; put 'put ''dCh7cHJvdmlkZTppLHVzZUZhY3Rvcnk6UCxkZXBzOmtzfSxpKSx0KHtwcm92aWRlOnI3LHVzZVZhbHVlOmksbXVsdGk6ITB9LGkpLHQoe3Byb3ZpZGU6bDEsdXNlVmFsdWU6KCk9Pk9yKGkpLG11bHRpOiEwfSxpKX1jb25zdCBDPWEucHJvdmlkZXJzO2lmKG51bGwhPUMmJiFtKXtjb25zdCBQ''@;'; put 'put ''PW47dW0oQyxZPT57dChZLFApfSl9fX1yZXR1cm4gaSE9PW4mJnZvaWQgMCE9PW4ucHJvdmlkZXJzfWZ1bmN0aW9uIHVtKG4sdCl7Zm9yKGxldCBlIG9mIG4pSDAoZSkmJihlPWUuXHUwMjc1cHJvdmlkZXJzKSxBcnJheS5pc0FycmF5KGUpP3VtKGUsdCk6dChlKX1jb25zdCBhTT11cyh7cHJv''@;'; put 'put ''dmlkZTpTdHJpbmcsdXNlVmFsdWU6dXN9KTtmdW5jdGlvbiBpNyhuKXtyZXR1cm4gbnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2YgbiYmYU0gaW4gbn1mdW5jdGlvbiBnMyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1jb25zdCBvNz1uZXcgd3IoIiIpLEZwPXt9LGZfPXt9O2xldCBK''@;'; put 'put ''aDtmdW5jdGlvbiBkbSgpe3JldHVybiB2b2lkIDA9PT1KaCYmKEpoPW5ldyBsbSksSmh9Y2xhc3MgdWN7fWNsYXNzIG0zIGV4dGVuZHMgdWN7cGFyZW50O3NvdXJjZTtzY29wZXM7cmVjb3Jkcz1uZXcgTWFwO19uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQ7X29uRGVzdHJveUhvb2tzPVtdO2dl''@;'; put 'put ''dCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfV9kZXN0cm95ZWQ9ITE7aW5qZWN0b3JEZWZUeXBlcztjb25zdHJ1Y3Rvcih0LGUscixpKXtzdXBlcigpLHRoaXMucGFyZW50PWUsdGhpcy5zb3VyY2U9cix0aGlzLnNjb3Blcz1pLHU3KHQsYz0+dGhpcy5wcm9jZXNzUHJvdmlk''@;'; put 'put ''ZXIoYykpLHRoaXMucmVjb3Jkcy5zZXQobjcsSHAodm9pZCAwLHRoaXMpKSxpLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldCh1YyxIcCh2b2lkIDAsdGhpcykpO2NvbnN0IGE9dGhpcy5yZWNvcmRzLmdldChvNyk7bnVsbCE9YSYmInN0cmluZyI9PXR5cGVvZiBhLnZhbHVl''@;'; put 'put ''JiZ0aGlzLnNjb3Blcy5hZGQoYS52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQocjcsa3MsTW8uU2VsZikpfXJldHJpZXZlKHQsZSl7cmV0dXJuIHRoaXMuZ2V0KHQsZS5vcHRpb25hbD95bjplZixlKX1kZXN0cm95KCl7U2codGhpcyksdGhpcy5fZGVzdHJv''@;'; put 'put ''eWVkPSEwO2NvbnN0IHQ9aGUobnVsbCk7dHJ5e2Zvcihjb25zdCByIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3Mpci5uZ09uRGVzdHJveSgpO2NvbnN0IGU9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IHIgb2YgZSlyKCl9ZmluYWxseXt0''@;'; put 'put ''aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksaGUodCl9fW9uRGVzdHJveSh0KXtyZXR1cm4gU2codGhpcyksdGhpcy5fb25EZXN0cm95SG9va3MucHVzaCh0KSwoKT0+dGhpcy5yZW1vdmVPbkRl''@;'; put 'put ''c3Ryb3kodCl9cnVuSW5Db250ZXh0KHQpe1NnKHRoaXMpO2NvbnN0IGU9VHQodGhpcykscj1qYyh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7VHQoZSksamMocil9fWdldCh0LGU9ZWYscj1Nby5EZWZhdWx0KXtpZihTZyh0aGlzKSx0Lmhhc093blByb3BlcnR5KFl1KSlyZXR1cm4g''@;'; put 'put ''dFtZdV0odGhpcyk7cj1tbChyKTtjb25zdCBhPVR0KHRoaXMpLGM9amModm9pZCAwKTt0cnl7aWYoIShyJk1vLlNraXBTZWxmKSl7bGV0IEM9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1DKXtjb25zdCBQPWZ1bmN0aW9uIGM3KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBu''@;'; put 'put ''fHwib2JqZWN0Ij09dHlwZW9mIG4mJm4gaW5zdGFuY2VvZiB3cn0odCkmJkRpKHQpO0M9UCYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShQKT9IcChzNyh0KSxGcCk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KHQsQyl9aWYobnVsbCE9QylyZXR1cm4gdGhpcy5oeWRyYXRlKHQsQyxyKX1yZXR1''@;'; put 'put ''cm4ociZNby5TZWxmP2RtKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9ciZNby5PcHRpb25hbCYmZT09PWVmP251bGw6ZSl9Y2F0Y2gobSl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PW0ubmFtZSl7aWYoKG1bS3VdPW1bS3VdfHxbXSkudW5zaGlmdChxbih0KSksYSl0aHJvdyBtO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBjXyhuLHQsZSxyKXtjb25zdCBpPW5bS3VdO3Rocm93IHRbb19dJiZpLnVuc2hpZnQodFtvX10pLG4ubWVzc2FnZT1mdW5jdGlvbiBiZyhuLHQsZSxyPW51bGwpe249biYmIlxuIj09PW4uY2hhckF0KDApJiYiXHUwMjc1Ij09bi5jaGFyQXQoMSk/bi5zbGljZSgyKTpuO2xldCBp''@;'; put 'put ''PXFuKHQpO2lmKEFycmF5LmlzQXJyYXkodCkpaT10Lm1hcChxbikuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgYT1bXTtmb3IobGV0IGMgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGMpKXtsZXQgbT10W2NdO2EucHVzaChjKyI6IisoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBtP0pTT04uc3RyaW5naWZ5KG0pOnFuKG0pKSl9aT1geyR7YS5qb2luKCIsICIpfX1gfXJldHVybmAke2V9JHtyPyIoIityKyIpIjoiIn1bJHtpfV06ICR7bi5yZXBsYWNlKF9nLCJcbiAgIil9YH0oIlxuIituLm1lc3NhZ2UsaSxlLHIpLG4ubmdUb2tlblBhdGg9aSxuW0t1XT1udWxs''@;'; put 'put ''LG59KG0sdCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgbX1maW5hbGx5e2pjKGMpLFR0KGEpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25zdCB0PWhlKG51bGwpLGU9VHQodGhpcykscj1qYyh2b2lkIDApO3RyeXtjb25zdCBhPXRoaXMuZ2V0KGwxLGtz''@;'; put 'put ''LE1vLlNlbGYpO2Zvcihjb25zdCBjIG9mIGEpYygpfWZpbmFsbHl7VHQoZSksamMociksaGUodCl9fXRvU3RyaW5nKCl7Y29uc3QgdD1bXSxlPXRoaXMucmVjb3Jkcztmb3IoY29uc3QgciBvZiBlLmtleXMoKSl0LnB1c2gocW4ocikpO3JldHVybmBSM0luamVjdG9yWyR7dC5qb2luKCIsICIp''@;'; put 'put ''fV1gfXByb2Nlc3NQcm92aWRlcih0KXtsZXQgZT1nMyh0PXZhKHQpKT90OnZhKHQmJnQucHJvdmlkZSk7Y29uc3Qgcj1mdW5jdGlvbiBzTShuKXtyZXR1cm4gaTcobik/SHAodm9pZCAwLG4udXNlVmFsdWUpOkhwKHBfKG4pLEZwKX0odCk7aWYoIWczKHQpJiYhMD09PXQubXVsdGkpe2xldCBp''@;'; put 'put ''PXRoaXMucmVjb3Jkcy5nZXQoZSk7aXx8KGk9SHAodm9pZCAwLEZwLCEwKSxpLmZhY3Rvcnk9KCk9Pk8xKGkubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQoZSxpKSksZT10LGkubXVsdGkucHVzaCh0KX10aGlzLnJlY29yZHMuc2V0KGUscil9aHlkcmF0ZSh0LGUscil7Y29uc3QgaT1oZShudWxs''@;'; put 'put ''KTt0cnl7cmV0dXJuIGUudmFsdWU9PT1mXz9HdShxbih0KSk6ZS52YWx1ZT09PUZwJiYoZS52YWx1ZT1mXyxlLnZhbHVlPWUuZmFjdG9yeSh2b2lkIDAscikpLCJvYmplY3QiPT10eXBlb2YgZS52YWx1ZSYmZS52YWx1ZSYmZnVuY3Rpb24gbE0obil7cmV0dXJuIG51bGwhPT1uJiYib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLm5nT25EZXN0cm95fShlLnZhbHVlKSYmdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5hZGQoZS52YWx1ZSksZS52YWx1ZX1maW5hbGx5e2hlKGkpfX1pbmplY3RhYmxlRGVmSW5TY29wZSh0KXtpZighdC5wcm92aWRlZEluKXJldHVybiEx''@;'; put 'put ''O2NvbnN0IGU9dmEodC5wcm92aWRlZEluKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/ImFueSI9PT1lfHx0aGlzLnNjb3Blcy5oYXMoZSk6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyhlKX1yZW1vdmVPbkRlc3Ryb3kodCl7Y29uc3QgZT10aGlzLl9vbkRlc3Ryb3lIb29rcy5pbmRleE9m''@;'; put 'put ''KHQpOy0xIT09ZSYmdGhpcy5fb25EZXN0cm95SG9va3Muc3BsaWNlKGUsMSl9fWZ1bmN0aW9uIHM3KG4pe2NvbnN0IHQ9RGkobiksZT1udWxsIT09dD90LmZhY3Rvcnk6ZjMobik7aWYobnVsbCE9PWUpcmV0dXJuIGU7aWYobiBpbnN0YW5jZW9mIHdyKXRocm93IG5ldyBrcigyMDQsITEpO2lm''@;'; put 'put ''KG4gaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24gb00obil7aWYobi5sZW5ndGg+MCl0aHJvdyBuZXcga3IoMjA0LCExKTtjb25zdCBlPWZ1bmN0aW9uIFBhKG4pe3JldHVybiBuJiYobltCYV18fG5beGFdKXx8bnVsbH0obik7cmV0dXJuIG51bGwhPT1lPygpPT5lLmZhY3Rv''@;'; put 'put ''cnkobik6KCk9Pm5ldyBufShuKTt0aHJvdyBuZXcga3IoMjA0LCExKX1mdW5jdGlvbiBwXyhuLHQsZSl7bGV0IHI7aWYoZzMobikpe2NvbnN0IGk9dmEobik7cmV0dXJuIGYzKGkpfHxzNyhpKX1pZihpNyhuKSlyPSgpPT52YShuLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIGQxKG4pe3Jl''@;'; put 'put ''dHVybiEoIW58fCFuLnVzZUZhY3RvcnkpfShuKSlyPSgpPT5uLnVzZUZhY3RvcnkoLi4uTzEobi5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVuY3Rpb24gYTcobil7cmV0dXJuISghbnx8IW4udXNlRXhpc3RpbmcpfShuKSlyPShpLGEpPT5Pcih2YShuLnVzZUV4aXN0aW5nKSx2b2lkIDAhPT1hJiZh''@;'; put 'put ''Jk1vLk9wdGlvbmFsP01vLk9wdGlvbmFsOnZvaWQgMCk7ZWxzZXtjb25zdCBpPXZhKG4mJihuLnVzZUNsYXNzfHxuLnByb3ZpZGUpKTtpZighZnVuY3Rpb24gbDcobil7cmV0dXJuISFuLmRlcHN9KG4pKXJldHVybiBmMyhpKXx8czcoaSk7cj0oKT0+bmV3IGkoLi4uTzEobi5kZXBzKSl9cmV0''@;'; put 'put ''dXJuIHJ9ZnVuY3Rpb24gU2cobil7aWYobi5kZXN0cm95ZWQpdGhyb3cgbmV3IGtyKDIwNSwhMSl9ZnVuY3Rpb24gSHAobix0LGU9ITEpe3JldHVybntmYWN0b3J5Om4sdmFsdWU6dCxtdWx0aTplP1tdOnZvaWQgMH19ZnVuY3Rpb24gdTcobix0KXtmb3IoY29uc3QgZSBvZiBuKUFycmF5Lmlz''@;'; put 'put ''QXJyYXkoZSk/dTcoZSx0KTplJiZIMChlKT91NyhlLlx1MDI3NXByb3ZpZGVycyx0KTp0KGUpfWZ1bmN0aW9uIFAxKG4sdCl7bGV0IGU7biBpbnN0YW5jZW9mIG0zPyhTZyhuKSxlPW4pOmU9bmV3IE5sKG4pO2NvbnN0IGk9VHQoZSksYT1qYyh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFs''@;'; put 'put ''bHl7VHQoaSksamMoYSl9fWZ1bmN0aW9uIE1nKCl7cmV0dXJuIHZvaWQgMCE9PUxwKCl8fG51bGwhPXh0KCl9Y29uc3QgeV89RnVuY3Rpb247ZnVuY3Rpb24gY2wobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgblsxXX1mdW5jdGlvbiB6YyhuKXtyZXR1cm4g''@;'; put 'put ''QXJyYXkuaXNBcnJheShuKSYmITA9PT1uWzFdfWZ1bmN0aW9uIGg3KG4pe3JldHVybiEhKDQmbi5mbGFncyl9ZnVuY3Rpb24gYmQobil7cmV0dXJuIG4uY29tcG9uZW50T2Zmc2V0Pi0xfWZ1bmN0aW9uIEFnKG4pe3JldHVybiEoMSZ+bi5mbGFncyl9ZnVuY3Rpb24gaDEobil7cmV0dXJuISFu''@;'; put 'put ''LnRlbXBsYXRlfWZ1bmN0aW9uIFYxKG4pe3JldHVybiEhKDUxMiZuWzJdKX1mdW5jdGlvbiB0MihuKXtyZXR1cm4hKDI1NiZ+blsyXSl9Y2xhc3MgbHR7cHJldmlvdXNWYWx1ZTtjdXJyZW50VmFsdWU7Zmlyc3RDaGFuZ2U7Y29uc3RydWN0b3IodCxlLHIpe3RoaXMucHJldmlvdXNWYWx1ZT10''@;'; put 'put ''LHRoaXMuY3VycmVudFZhbHVlPWUsdGhpcy5maXJzdENoYW5nZT1yfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gTXQobix0LGUscil7bnVsbCE9PXQ/dC5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbCh0LHIpOm5bZV09cn1jb25zdCBXdD0oKCk9Pntj''@;'; put 'put ''b25zdCBuPSgpPT4kbjtyZXR1cm4gbi5uZ0luaGVyaXQ9ITAsbn0pKCk7ZnVuY3Rpb24gJG4obil7cmV0dXJuIG4udHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJihuLnNldElucHV0PUxhKSxlaX1mdW5jdGlvbiBlaSgpe2NvbnN0IG49ZHModGhpcyksdD1uPy5jdXJyZW50O2lmKHQpe2Nv''@;'; put 'put ''bnN0IGU9bi5wcmV2aW91cztpZihlPT09QjApbi5wcmV2aW91cz10O2Vsc2UgZm9yKGxldCByIGluIHQpZVtyXT10W3JdO24uY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXModCl9fWZ1bmN0aW9uIExhKG4sdCxlLHIsaSl7Y29uc3QgYT10aGlzLmRlY2xhcmVkSW5wdXRzW3JdLGM9ZHMo''@;'; put 'put ''bil8fGZ1bmN0aW9uIEMwKG4sdCl7cmV0dXJuIG5beG9dPXR9KG4se3ByZXZpb3VzOkIwLGN1cnJlbnQ6bnVsbH0pLG09Yy5jdXJyZW50fHwoYy5jdXJyZW50PXt9KSxDPWMucHJldmlvdXMsUD1DW2FdO21bYV09bmV3IGx0KFAmJlAuY3VycmVudFZhbHVlLGUsQz09PUIwKSxNdChuLHQsaSxl''@;'; put 'put ''KX1jb25zdCB4bz0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gZHMobil7cmV0dXJuIG5beG9dfHxudWxsfWZ1bmN0aW9uIE9zKG4pe2Zvcig7QXJyYXkuaXNBcnJheShuKTspbj1uWzBdO3JldHVybiBufWZ1bmN0aW9uIG1tKG4sdCl7cmV0dXJuIE9zKHRbbl0pfWZ1bmN0aW9uIGYx''@;'; put 'put ''KG4sdCl7cmV0dXJuIE9zKHRbbi5pbmRleF0pfWZ1bmN0aW9uIERnKG4sdCl7cmV0dXJuIG4uZGF0YVt0XX1mdW5jdGlvbiBJZyhuLHQpe3JldHVybiBuW3RdfWZ1bmN0aW9uIHAxKG4sdCl7Y29uc3QgZT10W25dO3JldHVybiBjbChlKT9lOmVbMF19ZnVuY3Rpb24gZk0obil7cmV0dXJuISgx''@;'; put 'put ''Mjgmfm5bMl0pfWZ1bmN0aW9uIENkKG4sdCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpuW3RdfWZ1bmN0aW9uIElJKG4pe25bMTddPTB9ZnVuY3Rpb24gcE0obil7MTAyNCZuWzJdfHwoblsyXXw9MTAyNCxmTShuKSYmdm0obikpfWZ1bmN0aW9uIGY3KG4pe3JldHVybiEhKDkyMTYmblsyXXx8blsy''@;'; put 'put ''NF0/LmRpcnR5KX1mdW5jdGlvbiBnTShuKXtuWzEwXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSg4KSw2NCZuWzJdJiYoblsyXXw9MTAyNCksZjcobikmJnZtKG4pfWZ1bmN0aW9uIHZtKG4pe25bMTBdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDApO2xldCB0''@;'; put 'put ''PVMzKG4pO2Zvcig7bnVsbCE9PXQmJiEoODE5MiZ0WzJdKSYmKHRbMl18PTgxOTIsZk0odCkpOyl0PVMzKHQpfWZ1bmN0aW9uIHA3KG4sdCl7aWYodDIobikpdGhyb3cgbmV3IGtyKDkxMSwhMSk7bnVsbD09PW5bMjFdJiYoblsyMV09W10pLG5bMjFdLnB1c2godCl9ZnVuY3Rpb24gUzMobil7''@;'; put 'put ''Y29uc3QgdD1uWzNdO3JldHVybiB6Yyh0KT90WzNdOnR9ZnVuY3Rpb24gdk0obil7cmV0dXJuIG5bN10/Pz1bXX1mdW5jdGlvbiBUXyhuKXtyZXR1cm4gbi5jbGVhbnVwPz89W119Y29uc3Qga289e2xGcmFtZTpXSShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RU''@;'; put 'put ''Tm9kZTpudWxsfTtsZXQgeU09ITE7ZnVuY3Rpb24gRF8oKXtyZXR1cm4ga28uYmluZGluZ3NFbmFibGVkfWZ1bmN0aW9uIFJnKCl7cmV0dXJuIG51bGwhPT1rby5za2lwSHlkcmF0aW9uUm9vdFROb2RlfWZ1bmN0aW9uIFVyKCl7cmV0dXJuIGtvLmxGcmFtZS5sVmlld31mdW5jdGlvbiBFbygp''@;'; put 'put ''e3JldHVybiBrby5sRnJhbWUudFZpZXd9ZnVuY3Rpb24gZ3Qobil7cmV0dXJuIGtvLmxGcmFtZS5jb250ZXh0TFZpZXc9bixuWzhdfWZ1bmN0aW9uIG10KG4pe3JldHVybiBrby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsbn1mdW5jdGlvbiBRbygpe2xldCBuPUZJKCk7Zm9yKDtudWxsIT09''@;'; put 'put ''biYmNjQ9PT1uLnR5cGU7KW49bi5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRkkoKXtyZXR1cm4ga28ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiByMihuLHQpe2NvbnN0IGU9a28ubEZyYW1lO2UuY3VycmVudFROb2RlPW4sZS5pc1BhcmVudD10fWZ1bmN0aW9uIF9NKCl7cmV0dXJu''@;'; put 'put ''IGtvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBiTSgpe2tvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBWSSgpe3JldHVybiB5TX1mdW5jdGlvbiBJXyhuKXtjb25zdCB0PXlNO3JldHVybiB5TT1uLHR9ZnVuY3Rpb24gZzEoKXtjb25zdCBuPWtvLmxGcmFtZTtsZXQgdD1uLmJpbmRp''@;'; put 'put ''bmdSb290SW5kZXg7cmV0dXJuLTE9PT10JiYodD1uLmJpbmRpbmdSb290SW5kZXg9bi50Vmlldy5iaW5kaW5nU3RhcnRJbmRleCksdH1mdW5jdGlvbiB1Zigpe3JldHVybiBrby5sRnJhbWUuYmluZGluZ0luZGV4fWZ1bmN0aW9uIHNoKCl7cmV0dXJuIGtvLmxGcmFtZS5iaW5kaW5nSW5kZXgr''@;'; put 'put ''K31mdW5jdGlvbiBNMyhuKXtjb25zdCB0PWtvLmxGcmFtZSxlPXQuYmluZGluZ0luZGV4O3JldHVybiB0LmJpbmRpbmdJbmRleD10LmJpbmRpbmdJbmRleCtuLGV9ZnVuY3Rpb24gblUobix0KXtjb25zdCBlPWtvLmxGcmFtZTtlLmJpbmRpbmdJbmRleD1lLmJpbmRpbmdSb290SW5kZXg9bix3''@;'; put 'put ''TSh0KX1mdW5jdGlvbiB3TShuKXtrby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4PW59ZnVuY3Rpb24gQ00obil7Y29uc3QgdD1rby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09dD9udWxsOm5bdF19ZnVuY3Rpb24gU00oKXtyZXR1cm4ga28ubEZyYW1lLmN1''@;'; put 'put ''cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIFJfKG4pe2tvLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIGlVKG4pe2NvbnN0IHQ9blsxXTtyZXR1cm4gMj09PXQudHlwZT90LmRlY2xUTm9kZToxPT09dC50eXBlP25bNV06bnVsbH1mdW5jdGlvbiB6SShuLHQsZSl7aWYoZSZN''@;'; put 'put ''by5Ta2lwU2VsZil7bGV0IGk9dCxhPW47Zm9yKDshKGk9aS5wYXJlbnQsbnVsbCE9PWl8fGUmTW8uSG9zdHx8KGk9aVUoYSksbnVsbD09PWl8fChhPWFbMTRdLDEwJmkudHlwZSkpKTspO2lmKG51bGw9PT1pKXJldHVybiExO3Q9aSxuPWF9Y29uc3Qgcj1rby5sRnJhbWU9VUkoKTtyZXR1cm4g''@;'; put 'put ''ci5jdXJyZW50VE5vZGU9dCxyLmxWaWV3PW4sITB9ZnVuY3Rpb24gTU0obil7Y29uc3QgdD1VSSgpLGU9blsxXTtrby5sRnJhbWU9dCx0LmN1cnJlbnRUTm9kZT1lLmZpcnN0Q2hpbGQsdC5sVmlldz1uLHQudFZpZXc9ZSx0LmNvbnRleHRMVmlldz1uLHQuYmluZGluZ0luZGV4PWUuYmluZGlu''@;'; put 'put ''Z1N0YXJ0SW5kZXgsdC5pbkkxOG49ITF9ZnVuY3Rpb24gVUkoKXtjb25zdCBuPWtvLmxGcmFtZSx0PW51bGw9PT1uP251bGw6bi5jaGlsZDtyZXR1cm4gbnVsbD09PXQ/V0kobik6dH1mdW5jdGlvbiBXSShuKXtjb25zdCB0PXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpu''@;'; put 'put ''dWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5''@;'; put 'put ''SW5kZXg6MCxwYXJlbnQ6bixjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT1uJiYobi5jaGlsZD10KSx0fWZ1bmN0aW9uIFpJKCl7Y29uc3Qgbj1rby5sRnJhbWU7cmV0dXJuIGtvLmxGcmFtZT1uLnBhcmVudCxuLmN1cnJlbnRUTm9kZT1udWxsLG4ubFZpZXc9bnVsbCxufWNv''@;'; put 'put ''bnN0IFlJPVpJO2Z1bmN0aW9uIHhNKCl7Y29uc3Qgbj1aSSgpO24uaXNQYXJlbnQ9ITAsbi50Vmlldz1udWxsLG4uc2VsZWN0ZWRJbmRleD0tMSxuLmNvbnRleHRMVmlldz1udWxsLG4uZWxlbWVudERlcHRoQ291bnQ9MCxuLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxuLmN1cnJlbnROYW1l''@;'; put 'put ''c3BhY2U9bnVsbCxuLmJpbmRpbmdSb290SW5kZXg9LTEsbi5iaW5kaW5nSW5kZXg9LTEsbi5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIGt1KCl7cmV0dXJuIGtvLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIHgzKG4pe2tvLmxGcmFtZS5zZWxlY3RlZEluZGV4PW59ZnVuY3Rp''@;'; put 'put ''b24gZGwoKXtjb25zdCBuPWtvLmxGcmFtZTtyZXR1cm4gRGcobi50VmlldyxuLnNlbGVjdGVkSW5kZXgpfWxldCBHST0hMDtmdW5jdGlvbiBPZygpe3JldHVybiBHSX1mdW5jdGlvbiBkZihuKXtHST1ufWZ1bmN0aW9uIFRNKG4sdCl7Zm9yKGxldCBlPXQuZGlyZWN0aXZlU3RhcnQscj10LmRp''@;'; put 'put ''cmVjdGl2ZUVuZDtlPHI7ZSsrKXtjb25zdCBhPW4uZGF0YVtlXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OmMsbmdBZnRlckNvbnRlbnRDaGVja2VkOm0sbmdBZnRlclZpZXdJbml0OkMsbmdBZnRlclZpZXdDaGVja2VkOlAsbmdPbkRlc3Ryb3k6WX09YTtjJiYobi5jb250''@;'; put 'put ''ZW50SG9va3M/Pz1bXSkucHVzaCgtZSxjKSxtJiYoKG4uY29udGVudEhvb2tzPz89W10pLnB1c2goZSxtKSwobi5jb250ZW50Q2hlY2tIb29rcz8/PVtdKS5wdXNoKGUsbSkpLEMmJihuLnZpZXdIb29rcz8/PVtdKS5wdXNoKC1lLEMpLFAmJigobi52aWV3SG9va3M/Pz1bXSkucHVzaChlLFAp''@;'; put 'put ''LChuLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goZSxQKSksbnVsbCE9WSYmKG4uZGVzdHJveUhvb2tzPz89W10pLnB1c2goZSxZKX19ZnVuY3Rpb24gTF8obix0LGUpeyRJKG4sdCwzLGUpfWZ1bmN0aW9uIE9fKG4sdCxlLHIpeygzJm5bMl0pPT09ZSYmJEkobix0LGUscil9ZnVuY3Rpb24g''@;'; put 'put ''Xzcobix0KXtsZXQgZT1uWzJdOygzJmUpPT09dCYmKGUmPTE2MzgzLGUrPTEsblsyXT1lKX1mdW5jdGlvbiAkSShuLHQsZSxyKXtjb25zdCBhPXI/Py0xLGM9dC5sZW5ndGgtMTtsZXQgbT0wO2ZvcihsZXQgQz12b2lkIDAhPT1yPzY1NTM1Jm5bMTddOjA7QzxjO0MrKylpZigibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIHRbQysxXSl7aWYobT10W0NdLG51bGwhPXImJm0+PXIpYnJlYWt9ZWxzZSB0W0NdPDAmJihuWzE3XSs9NjU1MzYpLChtPGF8fC0xPT1hKSYmKHNVKG4sZSx0LEMpLG5bMTddPSg0Mjk0OTAxNzYwJm5bMTddKStDKzIpLEMrK31mdW5jdGlvbiBLSShuLHQpe2NvbnN0IGU9aGUobnVs''@;'; put 'put ''bCk7dHJ5e3QuY2FsbChuKX1maW5hbGx5e2hlKGUpfX1mdW5jdGlvbiBzVShuLHQsZSxyKXtjb25zdCBpPWVbcl08MCxhPWVbcisxXSxtPW5baT8tZVtyXTplW3JdXTtpP25bMl0+PjE0PG5bMTddPj4xNiYmKDMmblsyXSk9PT10JiYoblsyXSs9MTYzODQsS0kobSxhKSk6S0kobSxhKX1jbGFz''@;'; put 'put ''cyBiN3tmYWN0b3J5O2luamVjdEltcGw7cmVzb2x2aW5nPSExO2NhblNlZVZpZXdQcm92aWRlcnM7bXVsdGk7Y29tcG9uZW50UHJvdmlkZXJzO2luZGV4O3Byb3ZpZGVyRmFjdG9yeTtjb25zdHJ1Y3Rvcih0LGUscil7dGhpcy5mYWN0b3J5PXQsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWUs''@;'; put 'put ''dGhpcy5pbmplY3RJbXBsPXJ9fWZ1bmN0aW9uIGhmKG4pe3JldHVybiAzPT09bnx8ND09PW58fDY9PT1ufWZ1bmN0aW9uIHFJKG4pe3JldHVybiA2ND09PW4uY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBfbShuLHQpe2lmKG51bGwhPT10JiYwIT09dC5sZW5ndGgpaWYobnVsbD09PW58fDA9PT1u''@;'; put 'put ''Lmxlbmd0aCluPXQuc2xpY2UoKTtlbHNle2xldCBlPS0xO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtjb25zdCBpPXRbcl07Im51bWJlciI9PXR5cGVvZiBpP2U9aTowPT09ZXx8SkkobixlLGksMCwtMT09PWV8fDI9PT1lP3RbKytyXTpudWxsKX19cmV0dXJuIG59ZnVuY3Rpb24gSkko''@;'; put 'put ''bix0LGUscixpKXtsZXQgYT0wLGM9bi5sZW5ndGg7aWYoLTE9PT10KWM9LTE7ZWxzZSBmb3IoO2E8bi5sZW5ndGg7KXtjb25zdCBtPW5bYSsrXTtpZigibnVtYmVyIj09dHlwZW9mIG0pe2lmKG09PT10KXtjPS0xO2JyZWFrfWlmKG0+dCl7Yz1hLTE7YnJlYWt9fX1mb3IoO2E8bi5sZW5ndGg7''@;'; put 'put ''KXtjb25zdCBtPW5bYV07aWYoIm51bWJlciI9PXR5cGVvZiBtKWJyZWFrO2lmKG09PT1lKXJldHVybiB2b2lkKG51bGwhPT1pJiYoblthKzFdPWkpKTthKyssbnVsbCE9PWkmJmErK30tMSE9PWMmJihuLnNwbGljZShjLDAsdCksYT1jKzEpLG4uc3BsaWNlKGErKywwLGUpLG51bGwhPT1pJiZu''@;'; put 'put ''LnNwbGljZShhKyssMCxpKX1mdW5jdGlvbiBETShuKXtyZXR1cm4tMSE9PW59ZnVuY3Rpb24gdzcobil7cmV0dXJuIDMyNzY3Jm59ZnVuY3Rpb24gYm0obix0KXtsZXQgZT1mdW5jdGlvbiBkVShuKXtyZXR1cm4gbj4+MTZ9KG4pLHI9dDtmb3IoO2U+MDspcj1yWzE0XSxlLS07cmV0dXJuIHJ9''@;'; put 'put ''bGV0IFBfPSEwO2Z1bmN0aW9uIEZfKG4pe2NvbnN0IHQ9UF87cmV0dXJuIFBfPW4sdH1sZXQgaFU9MDtjb25zdCBmZj17fTtmdW5jdGlvbiBDNyhuLHQpe2NvbnN0IGU9dFIobix0KTtpZigtMSE9PWUpcmV0dXJuIGU7Y29uc3Qgcj10WzFdO3IuZmlyc3RDcmVhdGVQYXNzJiYobi5pbmplY3Rv''@;'; put 'put ''ckluZGV4PXQubGVuZ3RoLFJNKHIuZGF0YSxuKSxSTSh0LG51bGwpLFJNKHIuYmx1ZXByaW50LG51bGwpKTtjb25zdCBpPUhfKG4sdCksYT1uLmluamVjdG9ySW5kZXg7aWYoRE0oaSkpe2NvbnN0IGM9dzcoaSksbT1ibShpLHQpLEM9bVsxXS5kYXRhO2ZvcihsZXQgUD0wO1A8ODtQKyspdFth''@;'; put 'put ''K1BdPW1bYytQXXxDW2MrUF19cmV0dXJuIHRbYSs4XT1pLGF9ZnVuY3Rpb24gUk0obix0KXtuLnB1c2goMCwwLDAsMCwwLDAsMCwwLHQpfWZ1bmN0aW9uIHRSKG4sdCl7cmV0dXJuLTE9PT1uLmluamVjdG9ySW5kZXh8fG4ucGFyZW50JiZuLnBhcmVudC5pbmplY3RvckluZGV4PT09bi5pbmpl''@;'; put 'put ''Y3RvckluZGV4fHxudWxsPT09dFtuLmluamVjdG9ySW5kZXgrOF0/LTE6bi5pbmplY3RvckluZGV4fWZ1bmN0aW9uIEhfKG4sdCl7aWYobi5wYXJlbnQmJi0xIT09bi5wYXJlbnQuaW5qZWN0b3JJbmRleClyZXR1cm4gbi5wYXJlbnQuaW5qZWN0b3JJbmRleDtsZXQgZT0wLHI9bnVsbCxpPXQ7''@;'; put 'put ''Zm9yKDtudWxsIT09aTspe2lmKHI9bTEoaSksbnVsbD09PXIpcmV0dXJuLTE7aWYoZSsrLGk9aVsxNF0sLTEhPT1yLmluamVjdG9ySW5kZXgpcmV0dXJuIHIuaW5qZWN0b3JJbmRleHxlPDwxNn1yZXR1cm4tMX1mdW5jdGlvbiBMTShuLHQsZSl7IWZ1bmN0aW9uIElNKG4sdCxlKXtsZXQgcjsi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGU/cj1lLmNoYXJDb2RlQXQoMCl8fDA6ZS5oYXNPd25Qcm9wZXJ0eShzbCkmJihyPWVbc2xdKSxudWxsPT1yJiYocj1lW3NsXT1oVSsrKTtjb25zdCBpPTI1NSZyO3QuZGF0YVtuKyhpPj41KV18PTE8PGl9KG4sdCxlKX1mdW5jdGlvbiBOXyhuLHQsZSl7aWYoZSZN''@;'; put 'put ''by5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtOMCgpfWZ1bmN0aW9uIFZfKG4sdCxlLHIpe2lmKGUmTW8uT3B0aW9uYWwmJnZvaWQgMD09PXImJihyPW51bGwpLCEoZSYoTW8uU2VsZnxNby5Ib3N0KSkpe2NvbnN0IGk9bls5XSxhPWpjKHZvaWQgMCk7dHJ5e3JldHVybiBpP2kuZ2V0''@;'; put 'put ''KHQscixlJk1vLk9wdGlvbmFsKTp0aCh0LHIsZSZNby5PcHRpb25hbCl9ZmluYWxseXtqYyhhKX19cmV0dXJuIE5fKHIsMCxlKX1mdW5jdGlvbiBpMihuLHQsZSxyPU1vLkRlZmF1bHQsaSl7aWYobnVsbCE9PW4pe2lmKDIwNDgmdFsyXSYmIShyJk1vLlNlbGYpKXtjb25zdCBjPWZ1bmN0aW9u''@;'; put 'put ''IGtvZShuLHQsZSxyLGkpe2xldCBhPW4sYz10O2Zvcig7bnVsbCE9PWEmJm51bGwhPT1jJiYyMDQ4JmNbMl0mJiFWMShjKTspe2NvbnN0IG09blIoYSxjLGUscnxNby5TZWxmLGZmKTtpZihtIT09ZmYpcmV0dXJuIG07bGV0IEM9YS5wYXJlbnQ7aWYoIUMpe2NvbnN0IFA9Y1syMF07aWYoUCl7''@;'; put 'put ''Y29uc3QgWT1QLmdldChlLGZmLHIpO2lmKFkhPT1mZilyZXR1cm4gWX1DPW0xKGMpLGM9Y1sxNF19YT1DfXJldHVybiBpfShuLHQsZSxyLGZmKTtpZihjIT09ZmYpcmV0dXJuIGN9Y29uc3QgYT1uUihuLHQsZSxyLGZmKTtpZihhIT09ZmYpcmV0dXJuIGF9cmV0dXJuIFZfKHQsZSxyLGkpfWZ1''@;'; put 'put ''bmN0aW9uIG5SKG4sdCxlLHIsaSl7Y29uc3QgYT1mdW5jdGlvbiBNNyhuKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG4uY2hhckNvZGVBdCgwKXx8MDtjb25zdCB0PW4uaGFzT3duUHJvcGVydHkoc2wpP25bc2xdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dD49MD8y''@;'; put 'put ''NTUmdDp4Nzp0fShlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7aWYoIXpJKHQsbixyKSlyZXR1cm4gciZNby5Ib3N0P05fKGksMCxyKTpWXyh0LGUscixpKTt0cnl7bGV0IGM7aWYoYz1hKHIpLG51bGwhPWN8fHImTW8uT3B0aW9uYWwpcmV0dXJuIGM7TjAoKX1maW5hbGx5e1lJKCl9fWVs''@;'; put 'put ''c2UgaWYoIm51bWJlciI9PXR5cGVvZiBhKXtsZXQgYz1udWxsLG09dFIobix0KSxDPS0xLFA9ciZNby5Ib3N0P3RbMTVdWzVdOm51bGw7Zm9yKCgtMT09PW18fHImTW8uU2tpcFNlbGYpJiYoQz0tMT09PW0/SF8obix0KTp0W20rOF0sLTEhPT1DJiZyUihyLCExKT8oYz10WzFdLG09dzcoQyks''@;'; put 'put ''dD1ibShDLHQpKTptPS0xKTstMSE9PW07KXtjb25zdCBZPXRbMV07aWYoT00oYSxtLFkuZGF0YSkpe2NvbnN0IEo9cFUobSx0LGUsYyxyLFApO2lmKEohPT1mZilyZXR1cm4gSn1DPXRbbSs4XSwtMSE9PUMmJnJSKHIsdFsxXS5kYXRhW20rOF09PT1QKSYmT00oYSxtLHQpPyhjPVksbT13NyhD''@;'; put 'put ''KSx0PWJtKEMsdCkpOm09LTF9fXJldHVybiBpfWZ1bmN0aW9uIHBVKG4sdCxlLHIsaSxhKXtjb25zdCBjPXRbMV0sbT1jLmRhdGFbbis4XSxZPVNkKG0sYyxlLG51bGw9PXI/YmQobSkmJlBfOnIhPWMmJiEhKDMmbS50eXBlKSxpJk1vLkhvc3QmJmE9PT1tKTtyZXR1cm4gbnVsbCE9PVk/Uzco''@;'; put 'put ''dCxjLFksbSxpKTpmZn1mdW5jdGlvbiBTZChuLHQsZSxyLGkpe2NvbnN0IGE9bi5wcm92aWRlckluZGV4ZXMsYz10LmRhdGEsbT0xMDQ4NTc1JmEsQz1uLmRpcmVjdGl2ZVN0YXJ0LFk9YT4+MjAsY2U9aT9tK1k6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmZT1yP206bStZO2ZlPGNlO2ZlKysp''@;'; put 'put ''e2NvbnN0IEFlPWNbZmVdO2lmKGZlPEMmJmU9PT1BZXx8ZmU+PUMmJkFlLnR5cGU9PT1lKXJldHVybiBmZX1pZihpKXtjb25zdCBmZT1jW0NdO2lmKGZlJiZoMShmZSkmJmZlLnR5cGU9PT1lKXJldHVybiBDfXJldHVybiBudWxsfWZ1bmN0aW9uIFM3KG4sdCxlLHIsaSl7bGV0IGE9bltlXTtj''@;'; put 'put ''b25zdCBjPXQuZGF0YTtpZihhIGluc3RhbmNlb2YgYjcpe2NvbnN0IG09YTttLnJlc29sdmluZyYmR3UoZnVuY3Rpb24gdG8obil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5uYW1lfHxuLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT1uJiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2Ygbi50eXBlP24udHlwZS5uYW1lfHxuLnR5cGUudG9TdHJpbmcoKTpvbyhuKX0oY1tlXSkpO2NvbnN0IEM9Rl8obS5jYW5TZWVWaWV3UHJvdmlkZXJzKTttLnJlc29sdmluZz0hMDtjb25zdCBZPW0uaW5qZWN0SW1wbD9qYyhtLmluamVjdEltcGwpOm51bGw7ekkobixyLE1vLkRlZmF1''@;'; put 'put ''bHQpO3RyeXthPW5bZV09bS5mYWN0b3J5KHZvaWQgMCxpLGMsbixyKSx0LmZpcnN0Q3JlYXRlUGFzcyYmZT49ci5kaXJlY3RpdmVTdGFydCYmZnVuY3Rpb24geTcobix0LGUpe2NvbnN0e25nT25DaGFuZ2VzOnIsbmdPbkluaXQ6aSxuZ0RvQ2hlY2s6YX09dC50eXBlLnByb3RvdHlwZTtpZihy''@;'; put 'put ''KXtjb25zdCBjPSRuKHQpOyhlLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChuLGMpLChlLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKG4sYyl9aSYmKGUucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKDAtbixpKSxhJiYoKGUucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKG4sYSksKGUu''@;'; put 'put ''cHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2gobixhKSl9KGUsY1tlXSx0KX1maW5hbGx5e251bGwhPT1ZJiZqYyhZKSxGXyhDKSxtLnJlc29sdmluZz0hMSxZSSgpfX1yZXR1cm4gYX1mdW5jdGlvbiBPTShuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj41KV0mMTw8bil9ZnVuY3Rpb24gclIo''@;'; put 'put ''bix0KXtyZXR1cm4hKG4mTW8uU2VsZnx8biZNby5Ib3N0JiZ0KX1jbGFzcyBLbHtfdE5vZGU7X2xWaWV3O2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdE5vZGU9dCx0aGlzLl9sVmlldz1lfWdldCh0LGUscil7cmV0dXJuIGkyKHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LHQsbWwociksZSl9fWZ1''@;'; put 'put ''bmN0aW9uIHg3KCl7cmV0dXJuIG5ldyBLbChRbygpLFVyKCkpfWZ1bmN0aW9uIEtzKG4pe3JldHVybiBXdSgoKT0+e2NvbnN0IHQ9bi5wcm90b3R5cGUuY29uc3RydWN0b3IsZT10W0JjXXx8RTcodCkscj1PYmplY3QucHJvdG90eXBlO2xldCBpPU9iamVjdC5nZXRQcm90b3R5cGVPZihuLnBy''@;'; put 'put ''b3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtpJiZpIT09cjspe2NvbnN0IGE9aVtCY118fEU3KGkpO2lmKGEmJmEhPT1lKXJldHVybiBhO2k9T2JqZWN0LmdldFByb3RvdHlwZU9mKGkpfXJldHVybiBhPT5uZXcgYX0pfWZ1bmN0aW9uIEU3KG4pe3JldHVybiBMbyhuKT8oKT0+e2NvbnN0IHQ9''@;'; put 'put ''RTcodmEobikpO3JldHVybiB0JiZ0KCl9OmYzKG4pfWZ1bmN0aW9uIG0xKG4pe2NvbnN0IHQ9blsxXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bls1XTpudWxsfWZ1bmN0aW9uIFZwKG4pe3JldHVybiBmdW5jdGlvbiBmVShuLHQpe2lmKCJjbGFzcyI9PT10KXJl''@;'; put 'put ''dHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2NvbnN0IGU9bi5hdHRycztpZihlKXtjb25zdCByPWUubGVuZ3RoO2xldCBpPTA7Zm9yKDtpPHI7KXtjb25zdCBhPWVbaV07aWYoaGYoYSkpYnJlYWs7aWYoMD09PWEpaSs9MjtlbHNlIGlmKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgYSlmb3IoaSsrO2k8ciYmInN0cmluZyI9PXR5cGVvZiBlW2ldOylpKys7ZWxzZXtpZihhPT09dClyZXR1cm4gZVtpKzFdO2krPTJ9fX1yZXR1cm4gbnVsbH0oUW8oKSxuKX1mdW5jdGlvbiBzUihuLHQ9bnVsbCxlPW51bGwscil7Y29uc3QgaT1CXyhuLHQsZSxyKTtyZXR1cm4gaS5y''@;'; put 'put ''ZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxpfWZ1bmN0aW9uIEJfKG4sdD1udWxsLGU9bnVsbCxyLGk9bmV3IFNldCl7Y29uc3QgYT1bZXx8a3MsY20obildO3JldHVybiByPXJ8fCgib2JqZWN0Ij09dHlwZW9mIG4/dm9pZCAwOnFuKG4pKSxuZXcgbTMoYSx0fHxkbSgpLHJ8fG51bGws''@;'; put 'put ''aSl9Y2xhc3MgSG97c3RhdGljIFRIUk9XX0lGX05PVF9GT1VORD1lZjtzdGF0aWMgTlVMTD1uZXcgbG07c3RhdGljIGNyZWF0ZSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHNSKHtuYW1lOiIifSxlLHQsIiIpO3tjb25zdCByPXQubmFtZT8/IiI7cmV0dXJuIHNSKHtuYW1lOnJ9''@;'; put 'put ''LHQucGFyZW50LHQucHJvdmlkZXJzLHIpfX1zdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46SG8scHJvdmlkZWRJbjoiYW55IixmYWN0b3J5OigpPT5PcihuNyl9KTtzdGF0aWMgX19OR19FTEVNRU5UX0lEX189LTF9bmV3IHdyKCIiKS5fX05HX0VMRU1FTlRfSURfXz1uPT57Y29uc3QgdD1R''@;'; put 'put ''bygpO2lmKG51bGw9PT10KXRocm93IG5ldyBrcigyMDQsITEpO2lmKDImdC50eXBlKXJldHVybiB0LnZhbHVlO2lmKG4mTW8uT3B0aW9uYWwpcmV0dXJuIG51bGw7dGhyb3cgbmV3IGtyKDIwNCwhMSl9O2NvbnN0IHVSPSExO2xldCBjaD0oKCk9PmNsYXNzIG57c3RhdGljIF9fTkdfRUxFTUVO''@;'; put 'put ''VF9JRF9fPWhSO3N0YXRpYyBfX05HX0VOVl9JRF9fPWU9PmV9KSgpO2NsYXNzIGRSIGV4dGVuZHMgY2h7X2xWaWV3O2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbFZpZXc9dH1vbkRlc3Ryb3kodCl7Y29uc3QgZT10aGlzLl9sVmlldztyZXR1cm4gdDIoZSk/KHQoKSwoKT0+e30pOihw''@;'; put 'put ''NyhlLHQpLCgpPT5mdW5jdGlvbiBtTShuLHQpe2lmKG51bGw9PT1uWzIxXSlyZXR1cm47Y29uc3QgZT1uWzIxXS5pbmRleE9mKHQpOy0xIT09ZSYmblsyMV0uc3BsaWNlKGUsMSl9KGUsdCkpfX1mdW5jdGlvbiBoUigpe3JldHVybiBuZXcgZFIoVXIoKSl9Y2xhc3MgdWh7fWNvbnN0IEQ3PW5l''@;'; put 'put ''dyB3cigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KSxmUj1uZXcgd3IoIiIpLHBmPW5ldyB3cigiIik7bGV0IFUwPSgoKT0+e2NsYXNzIG57dGFza0lkPTA7cGVuZGluZ1Rhc2tzPW5ldyBTZXQ7Z2V0IF9oYXNQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy5oYXNQZW5k''@;'; put 'put ''aW5nVGFza3MudmFsdWV9aGFzUGVuZGluZ1Rhc2tzPW5ldyB4aSghMSk7YWRkKCl7dGhpcy5faGFzUGVuZGluZ1Rhc2tzfHx0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCEwKTtjb25zdCBlPXRoaXMudGFza0lkKys7cmV0dXJuIHRoaXMucGVuZGluZ1Rhc2tzLmFkZChlKSxlfWhhcyhlKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuaGFzKGUpfXJlbW92ZShlKXt0aGlzLnBlbmRpbmdUYXNrcy5kZWxldGUoZSksMD09PXRoaXMucGVuZGluZ1Rhc2tzLnNpemUmJnRoaXMuX2hhc1BlbmRpbmdUYXNrcyYmdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLnBlbmRpbmdUYXNrcy5jbGVhcigpLHRoaXMuX2hhc1BlbmRpbmdUYXNrcyYmdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IG59KX1yZXR1cm4gbn0pKCk7Y29uc3Qg''@;'; put 'put ''WXI9Y2xhc3MgbVUgZXh0ZW5kcyB1cntfX2lzQXN5bmM7ZGVzdHJveVJlZj12b2lkIDA7cGVuZGluZ1Rhc2tzPXZvaWQgMDtjb25zdHJ1Y3Rvcih0PSExKXtzdXBlcigpLHRoaXMuX19pc0FzeW5jPXQsTWcoKSYmKHRoaXMuZGVzdHJveVJlZj1KbihjaCx7b3B0aW9uYWw6ITB9KT8/dm9pZCAw''@;'; put 'put ''LHRoaXMucGVuZGluZ1Rhc2tzPUpuKFUwLHtvcHRpb25hbDohMH0pPz92b2lkIDApfWVtaXQodCl7Y29uc3QgZT1oZShudWxsKTt0cnl7c3VwZXIubmV4dCh0KX1maW5hbGx5e2hlKGUpfX1zdWJzY3JpYmUodCxlLHIpe2xldCBpPXQsYT1lfHwoKCk9Pm51bGwpLGM9cjtpZih0JiYib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIHQpe2NvbnN0IEM9dDtpPUMubmV4dD8uYmluZChDKSxhPUMuZXJyb3I/LmJpbmQoQyksYz1DLmNvbXBsZXRlPy5iaW5kKEMpfXRoaXMuX19pc0FzeW5jJiYoYT10aGlzLndyYXBJblRpbWVvdXQoYSksaSYmKGk9dGhpcy53cmFwSW5UaW1lb3V0KGkpKSxjJiYoYz10aGlzLndy''@;'; put 'put ''YXBJblRpbWVvdXQoYykpKTtjb25zdCBtPXN1cGVyLnN1YnNjcmliZSh7bmV4dDppLGVycm9yOmEsY29tcGxldGU6Y30pO3JldHVybiB0IGluc3RhbmNlb2YgTHQmJnQuYWRkKG0pLG19d3JhcEluVGltZW91dCh0KXtyZXR1cm4gZT0+e2NvbnN0IHI9dGhpcy5wZW5kaW5nVGFza3M/LmFkZCgp''@;'; put 'put ''O3NldFRpbWVvdXQoKCk9Pnt0cnl7dChlKX1maW5hbGx5e3ZvaWQgMCE9PXImJnRoaXMucGVuZGluZ1Rhc2tzPy5yZW1vdmUocil9fSl9fX07ZnVuY3Rpb24gSTcoLi4ubil7fWZ1bmN0aW9uIGdSKG4pe2xldCB0LGU7ZnVuY3Rpb24gcigpe249STc7dHJ5e3ZvaWQgMCE9PWUmJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSksdm9pZCAwIT09dCYmY2xlYXJUaW1lb3V0KHQpfWNhdGNoe319cmV0dXJuIHQ9c2V0VGltZW91dCgoKT0+e24oKSxyKCl9KSwiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZy''@;'; put 'put ''YW1lJiYoZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuKCkscigpfSkpLCgpPT5yKCl9ZnVuY3Rpb24gbVIobil7cmV0dXJuIHF1ZXVlTWljcm90YXNrKCgpPT5uKCkpLCgpPT57bj1JN319Y29uc3Qgal89ImlzQW5ndWxhclpvbmUiLHpfPWpfKyJfSUQiO2xldCB2VT0wO2NsYXNzIEph''@;'; put 'put ''e2hhc1BlbmRpbmdNYWNyb3Rhc2tzPSExO2hhc1BlbmRpbmdNaWNyb3Rhc2tzPSExO2lzU3RhYmxlPSEwO29uVW5zdGFibGU9bmV3IFlyKCExKTtvbk1pY3JvdGFza0VtcHR5PW5ldyBZcighMSk7b25TdGFibGU9bmV3IFlyKCExKTtvbkVycm9yPW5ldyBZcighMSk7Y29uc3RydWN0b3IodCl7''@;'; put 'put ''Y29uc3R7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ZT0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOnI9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246aT0hMSxzY2hlZHVsZUluUm9vdFpvbmU6YT11Un09dDtpZih0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3''@;'; put 'put ''IGtyKDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IGM9dGhpcztjLl9uZXN0aW5nPTAsYy5fb3V0ZXI9Yy5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJihjLl9pbm5lcj1jLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2lu''@;'; put 'put ''Z1pvbmVTcGVjKSksZSYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoYy5faW5uZXI9Yy5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IWkmJnIsYy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5n''@;'; put 'put ''ZURldGVjdGlvbj1pLGMuY2FsbGJhY2tTY2hlZHVsZWQ9ITEsYy5zY2hlZHVsZUluUm9vdFpvbmU9YSxmdW5jdGlvbiBiVShuKXtjb25zdCB0PSgpPT57IWZ1bmN0aW9uIF9VKG4pe2Z1bmN0aW9uIHQoKXtnUigoKT0+e24uY2FsbGJhY2tTY2hlZHVsZWQ9ITEsSE0obiksbi5pc0NoZWNrU3Rh''@;'; put 'put ''YmxlUnVubmluZz0hMCxGTShuKSxuLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSl9bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8bi5jYWxsYmFja1NjaGVkdWxlZHx8KG4uY2FsbGJhY2tTY2hlZHVsZWQ9ITAsbi5zY2hlZHVsZUluUm9vdFpvbmU/Wm9uZS5yb290LnJ1bigoKT0+e3QoKX0pOm4u''@;'; put 'put ''X291dGVyLnJ1bigoKT0+e3QoKX0pLEhNKG4pKX0obil9LGU9dlUrKztuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntbal9dOiEwLFt6X106ZSxbel8rZV06ITB9LG9uSW52b2tlVGFzazoocixpLGEsYyxtLEMpPT57aWYoZnVuY3Rpb24gd1Uobil7''@;'; put 'put ''cmV0dXJuIF9SKG4sIl9faWdub3JlX25nX3pvbmVfXyIpfShDKSlyZXR1cm4gci5pbnZva2VUYXNrKGEsYyxtLEMpO3RyeXtyZXR1cm4gdlIobiksci5pbnZva2VUYXNrKGEsYyxtLEMpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9''@;'; put 'put ''PT1jLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCkseVIobil9fSxvbkludm9rZToocixpLGEsYyxtLEMsUCk9Pnt0cnl7cmV0dXJuIHZSKG4pLHIuaW52b2tlKGEsYyxtLEMsUCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9u''@;'; put 'put ''JiYhbi5jYWxsYmFja1NjaGVkdWxlZCYmIWZ1bmN0aW9uIENVKG4pe3JldHVybiBfUihuLCJfX3NjaGVkdWxlcl90aWNrX18iKX0oQykmJnQoKSx5UihuKX19LG9uSGFzVGFzazoocixpLGEsYyk9PntyLmhhc1Rhc2soYSxjKSxpPT09YSYmKCJtaWNyb1Rhc2siPT1jLmNoYW5nZT8obi5faGFz''@;'; put 'put ''UGVuZGluZ01pY3JvdGFza3M9Yy5taWNyb1Rhc2ssSE0obiksRk0obikpOiJtYWNyb1Rhc2siPT1jLmNoYW5nZSYmKG4uaGFzUGVuZGluZ01hY3JvdGFza3M9Yy5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjoocixpLGEsYyk9PihyLmhhbmRsZUVycm9yKGEsYyksbi5ydW5PdXRzaWRlQW5n''@;'; put 'put ''dWxhcigoKT0+bi5vbkVycm9yLmVtaXQoYykpLCExKX0pfShjKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KGpfKX1zdGF0aWMgYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpe2lmKCFKYS5pc0luQW5ndWxhclpvbmUo''@;'; put 'put ''KSl0aHJvdyBuZXcga3IoOTA5LCExKX1zdGF0aWMgYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpe2lmKEphLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBrcig5MDksITEpfXJ1bih0LGUscil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bih0LGUscil9cnVuVGFzayh0LGUscixpKXtjb25zdCBh''@;'; put 'put ''PXRoaXMuX2lubmVyLGM9YS5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIraSx0LHlVLEk3LEk3KTt0cnl7cmV0dXJuIGEucnVuVGFzayhjLGUscil9ZmluYWxseXthLmNhbmNlbFRhc2soYyl9fXJ1bkd1YXJkZWQodCxlLHIpe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVk''@;'; put 'put ''KHQsZSxyKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfX1jb25zdCB5VT17fTtmdW5jdGlvbiBGTShuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90''@;'; put 'put ''YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBITShuKXtuLmhhc1Bl''@;'; put 'put ''bmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmITA9PT1uLmNhbGxiYWNrU2NoZWR1bGVkKX1mdW5jdGlvbiB2UihuKXtuLl9u''@;'; put 'put ''ZXN0aW5nKyssbi5pc1N0YWJsZSYmKG4uaXNTdGFibGU9ITEsbi5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIHlSKG4pe24uX25lc3RpbmctLSxGTShuKX1jbGFzcyBOTXtoYXNQZW5kaW5nTWljcm90YXNrcz0hMTtoYXNQZW5kaW5nTWFjcm90YXNrcz0hMTtpc1N0YWJsZT0hMDtv''@;'; put 'put ''blVuc3RhYmxlPW5ldyBZcjtvbk1pY3JvdGFza0VtcHR5PW5ldyBZcjtvblN0YWJsZT1uZXcgWXI7b25FcnJvcj1uZXcgWXI7cnVuKHQsZSxyKXtyZXR1cm4gdC5hcHBseShlLHIpfXJ1bkd1YXJkZWQodCxlLHIpe3JldHVybiB0LmFwcGx5KGUscil9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0''@;'; put 'put ''dXJuIHQoKX1ydW5UYXNrKHQsZSxyLGkpe3JldHVybiB0LmFwcGx5KGUscil9fWZ1bmN0aW9uIF9SKG4sdCl7cmV0dXJuISghQXJyYXkuaXNBcnJheShuKXx8MSE9PW4ubGVuZ3RoKSYmITA9PT1uWzBdPy5kYXRhPy5bdF19Y2xhc3MgYTJ7X2NvbnNvbGU9Y29uc29sZTtoYW5kbGVFcnJvcih0''@;'; put 'put ''KXt0aGlzLl9jb25zb2xlLmVycm9yKCJFUlJPUiIsdCl9fWNvbnN0IE1VPW5ldyB3cigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+e2NvbnN0IG49Sm4oSmEpLHQ9Sm4oYTIpO3JldHVybiBlPT5uLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50LmhhbmRsZUVycm9yKGUpKX19KTtm''@;'; put 'put ''dW5jdGlvbiBiUihuLHQpe3JldHVybiBYaChuLHQpfWNvbnN0IFdfPShiUi5yZXF1aXJlZD1mdW5jdGlvbiBVXyhuKXtyZXR1cm4gWGgoWDIsbil9LGJSKTtmdW5jdGlvbiB4VSgpe3JldHVybiBCcChRbygpLFVyKCkpfWZ1bmN0aW9uIEJwKG4sdCl7cmV0dXJuIG5ldyB6aShmMShuLHQpKX1s''@;'; put 'put ''ZXQgemk9KCgpPT5jbGFzcyBue25hdGl2ZUVsZW1lbnQ7Y29uc3RydWN0b3IoZSl7dGhpcy5uYXRpdmVFbGVtZW50PWV9c3RhdGljIF9fTkdfRUxFTUVOVF9JRF9fPXhVfSkoKTtmdW5jdGlvbiBNbShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHppP24ubmF0aXZlRWxlbWVudDpufWZ1bmN0aW9u''@;'; put 'put ''IGRoKG4sdCl7Y29uc3QgZT1mdW5jdGlvbiB3ZShuLHQpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShodCk7ZS52YWx1ZT1uLHZvaWQgMCE9PXQmJihlLmVxdWFsPXQpO2NvbnN0IHI9KCk9PihzKGUpLGUudmFsdWUpO3JldHVybiByW3NlXT1lLHJ9KG4sdD8uZXF1YWwpLHI9ZVtzZV07cmV0dXJu''@;'; put 'put ''IGUuc2V0PWk9PktlKHIsaSksZS51cGRhdGU9aT0+ZnVuY3Rpb24gWWUobix0KXtfKCl8fE1lKG4pLEtlKG4sdChuLnZhbHVlKSl9KHIsaSksZS5hc1JlYWRvbmx5PVI3LmJpbmQoZSksZX1mdW5jdGlvbiBSNygpe2NvbnN0IG49dGhpc1tzZV07aWYodm9pZCAwPT09bi5yZWFkb25seUZuKXtj''@;'; put 'put ''b25zdCB0PSgpPT50aGlzKCk7dFtzZV09bixuLnJlYWRvbmx5Rm49dH1yZXR1cm4gbi5yZWFkb25seUZufWZ1bmN0aW9uIHdSKG4pe3JldHVybiBmdW5jdGlvbiB4bShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmdm9pZCAwIT09bltzZV19KG4pJiYiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''bi5zZXR9ZnVuY3Rpb24gWl8oKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgSGd7X2VtaXREaXN0aW5jdENoYW5nZXNPbmx5O2RpcnR5PSEwO19vbkRpcnR5PXZvaWQgMDtfcmVzdWx0cz1bXTtfY2hhbmdlc0RldGVjdGVkPSExO19jaGFuZ2VzPXZvaWQg''@;'; put 'put ''MDtsZW5ndGg9MDtmaXJzdD12b2lkIDA7bGFzdD12b2lkIDA7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcz8/PW5ldyB1cn1jb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10fWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAo''@;'; put 'put ''dCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7''@;'; put 'put ''dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXt0aGlzLmRpcnR5''@;'; put 'put ''PSExO2NvbnN0IHI9ZnVuY3Rpb24gWHUobil7cmV0dXJuIG4uZmxhdChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSh0KTsodGhpcy5fY2hhbmdlc0RldGVjdGVkPSFmdW5jdGlvbiBlNyhuLHQsZSl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPG4ubGVu''@;'; put 'put ''Z3RoO3IrKyl7bGV0IGk9bltyXSxhPXRbcl07aWYoZSYmKGk9ZShpKSxhPWUoYSkpLGEhPT1pKXJldHVybiExfXJldHVybiEwfSh0aGlzLl9yZXN1bHRzLHIsZSkpJiYodGhpcy5fcmVzdWx0cz1yLHRoaXMubGVuZ3RoPXIubGVuZ3RoLHRoaXMubGFzdD1yW3RoaXMubGVuZ3RoLTFdLHRoaXMu''@;'; put 'put ''Zmlyc3Q9clswXSl9bm90aWZ5T25DaGFuZ2VzKCl7dm9pZCAwIT09dGhpcy5fY2hhbmdlcyYmKHRoaXMuX2NoYW5nZXNEZXRlY3RlZHx8IXRoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5KSYmdGhpcy5fY2hhbmdlcy5uZXh0KHRoaXMpfW9uRGlydHkodCl7dGhpcy5fb25EaXJ0eT10fXNl''@;'; put 'put ''dERpcnR5KCl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9vbkRpcnR5Py4oKX1kZXN0cm95KCl7dm9pZCAwIT09dGhpcy5fY2hhbmdlcyYmKHRoaXMuX2NoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9jaGFuZ2VzLnVuc3Vic2NyaWJlKCkpfVtTeW1ib2wuaXRlcmF0b3JdPVpffWZ1bmN0aW9uIE83KG4p''@;'; put 'put ''e3JldHVybiEoMTI4Jn5uLmZsYWdzKX12YXIgWV89ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5PblB1c2g9MF09Ik9uUHVzaCIsbltuLkRlZmF1bHQ9MV09IkRlZmF1bHQiLG59KFlffHx7fSk7Y29uc3QgR189bmV3IE1hcDtsZXQgUG9lPTA7ZnVuY3Rpb24gak0obil7R18uZGVsZXRlKG5bMTld''@;'; put 'put ''KX1jb25zdCBVTT0iX19uZ0NvbnRleHRfXyI7ZnVuY3Rpb24gVzAobix0KXtjbCh0KT8obltVTV09dFsxOV0sZnVuY3Rpb24gQVUobil7R18uc2V0KG5bMTldLG4pfSh0KSk6bltVTV09dH1mdW5jdGlvbiAkXyhuKXtyZXR1cm4gWU0oblsxMl0pfWZ1bmN0aW9uIFpNKG4pe3JldHVybiBZTShu''@;'; put 'put ''WzRdKX1mdW5jdGlvbiBZTShuKXtmb3IoO251bGwhPT1uJiYhemMobik7KW49bls0XTtyZXR1cm4gbn1sZXQgWE07ZnVuY3Rpb24gdmYoKXtpZih2b2lkIDAhPT1YTSlyZXR1cm4gWE07aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3IGtyKDIxMCwhMSl9''@;'; put 'put ''Y29uc3QgeWY9bmV3IHdyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5WVX0pLFZVPSJuZyIscU09bmV3IHdyKCIiKSxkYz1uZXcgd3IoIiIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxJUj1uZXcgd3IoIiIpLEJVPW5ldyB3cigiIix7''@;'; put 'put ''cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+dmYoKS5ib2R5Py5xdWVyeVNlbGVjdG9yKCJbbmdDc3BOb25jZV0iKT8uZ2V0QXR0cmlidXRlKCJuZ0NzcE5vbmNlIil8fG51bGx9KSxIUj1uZXcgd3IoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiExfSk7dmFyIG94PWZ1''@;'; put 'put ''bmN0aW9uKG4pe3JldHVybiBuW24uQ0hBTkdFX0RFVEVDVElPTj0wXT0iQ0hBTkdFX0RFVEVDVElPTiIsbltuLkFGVEVSX05FWFRfUkVOREVSPTFdPSJBRlRFUl9ORVhUX1JFTkRFUiIsbn0ob3h8fHt9KTtjb25zdCBBbT1uZXcgd3IoIiIpLGpSPW5ldyBTZXQ7ZnVuY3Rpb24gRHUobil7alIu''@;'; put 'put ''aGFzKG4pfHwoalIuYWRkKG4pLHBlcmZvcm1hbmNlPy5tYXJrPy4oIm1hcmtfZmVhdHVyZV91c2FnZSIse2RldGFpbDp7ZmVhdHVyZTpufX0pKX1sZXQga209KCgpPT5jbGFzcyBue3ZpZXc7bm9kZTtjb25zdHJ1Y3RvcihlLHIpe3RoaXMudmlldz1lLHRoaXMubm9kZT1yfXN0YXRpYyBfX05H''@;'; put 'put ''X0VMRU1FTlRfSURfXz1VUn0pKCk7ZnVuY3Rpb24gVVIoKXtyZXR1cm4gbmV3IGttKFVyKCksUW8oKSl9dmFyIERtPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uRWFybHlSZWFkPTBdPSJFYXJseVJlYWQiLG5bbi5Xcml0ZT0xXT0iV3JpdGUiLG5bbi5NaXhlZFJlYWRXcml0ZT0yXT0iTWl4ZWRS''@;'; put 'put ''ZWFkV3JpdGUiLG5bbi5SZWFkPTNdPSJSZWFkIixufShEbXx8e30pO2xldCBzeD0oKCk9PntjbGFzcyBue2ltcGw9bnVsbDtleGVjdXRlKCl7dGhpcy5pbXBsPy5leGVjdXRlKCl9c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3''@;'; put 'put ''IG59KX1yZXR1cm4gbn0pKCk7Y29uc3QgbHg9W0RtLkVhcmx5UmVhZCxEbS5Xcml0ZSxEbS5NaXhlZFJlYWRXcml0ZSxEbS5SZWFkXTtsZXQgVWM9KCgpPT57Y2xhc3MgbntuZ1pvbmU9Sm4oSmEpO3NjaGVkdWxlcj1Kbih1aCk7ZXJyb3JIYW5kbGVyPUpuKGEyLHtvcHRpb25hbDohMH0pO3Nl''@;'; put 'put ''cXVlbmNlcz1uZXcgU2V0O2RlZmVycmVkUmVnaXN0cmF0aW9ucz1uZXcgU2V0O2V4ZWN1dGluZz0hMTtjb25zdHJ1Y3Rvcigpe0puKEFtLHtvcHRpb25hbDohMH0pfWV4ZWN1dGUoKXt0aGlzLmV4ZWN1dGluZz0hMDtmb3IoY29uc3QgciBvZiBseClmb3IoY29uc3QgaSBvZiB0aGlzLnNlcXVl''@;'; put 'put ''bmNlcylpZighaS5lcnJvcmVkT3JEZXN0cm95ZWQmJmkuaG9va3Nbcl0pdHJ5e2kucGlwZWxpbmVkVmFsdWU9dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMubWF5YmVUcmFjZSgoKT0+KDAsaS5ob29rc1tyXSkoaS5waXBlbGluZWRWYWx1ZSksaS5zbmFwc2hvdCkpfWNh''@;'; put 'put ''dGNoKGEpe2kuZXJyb3JlZE9yRGVzdHJveWVkPSEwLHRoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihhKX10aGlzLmV4ZWN1dGluZz0hMTtmb3IoY29uc3QgciBvZiB0aGlzLnNlcXVlbmNlcylyLmFmdGVyUnVuKCksci5vbmNlJiYodGhpcy5zZXF1ZW5jZXMuZGVsZXRlKHIpLHIuZGVz''@;'; put 'put ''dHJveSgpKTtmb3IoY29uc3QgciBvZiB0aGlzLmRlZmVycmVkUmVnaXN0cmF0aW9ucyl0aGlzLnNlcXVlbmNlcy5hZGQocik7dGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMuc2l6ZT4wJiZ0aGlzLnNjaGVkdWxlci5ub3RpZnkoNyksdGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMuY2xlYXIo''@;'; put 'put ''KX1yZWdpc3RlcihlKXtjb25zdHt2aWV3OnJ9PWU7dm9pZCAwIT09cj8oKHJbMjVdPz89W10pLnB1c2goZSksdm0ociksclsyXXw9ODE5Mik6dGhpcy5leGVjdXRpbmc/dGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMuYWRkKGUpOnRoaXMuYWRkU2VxdWVuY2UoZSl9YWRkU2VxdWVuY2UoZSl7''@;'; put 'put ''dGhpcy5zZXF1ZW5jZXMuYWRkKGUpLHRoaXMuc2NoZWR1bGVyLm5vdGlmeSg3KX11bnJlZ2lzdGVyKGUpe3RoaXMuZXhlY3V0aW5nJiZ0aGlzLnNlcXVlbmNlcy5oYXMoZSk/KGUuZXJyb3JlZE9yRGVzdHJveWVkPSEwLGUucGlwZWxpbmVkVmFsdWU9dm9pZCAwLGUub25jZT0hMCk6KHRoaXMu''@;'; put 'put ''c2VxdWVuY2VzLmRlbGV0ZShlKSx0aGlzLmRlZmVycmVkUmVnaXN0cmF0aW9ucy5kZWxldGUoZSkpfW1heWJlVHJhY2UoZSxyKXtyZXR1cm4gcj9yLnJ1bihveC5BRlRFUl9ORVhUX1JFTkRFUixlKTplKCl9c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIs''@;'; put 'put ''ZmFjdG9yeTooKT0+bmV3IG59KX1yZXR1cm4gbn0pKCk7Y2xhc3MgVDN7aW1wbDtob29rczt2aWV3O29uY2U7c25hcHNob3Q7ZXJyb3JlZE9yRGVzdHJveWVkPSExO3BpcGVsaW5lZFZhbHVlPXZvaWQgMDt1bnJlZ2lzdGVyT25EZXN0cm95O2NvbnN0cnVjdG9yKHQsZSxyLGksYSxjPW51bGwp''@;'; put 'put ''e3RoaXMuaW1wbD10LHRoaXMuaG9va3M9ZSx0aGlzLnZpZXc9cix0aGlzLm9uY2U9aSx0aGlzLnNuYXBzaG90PWMsdGhpcy51bnJlZ2lzdGVyT25EZXN0cm95PWE/Lm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfWFmdGVyUnVuKCl7dGhpcy5lcnJvcmVkT3JEZXN0cm95ZWQ9ITEsdGhp''@;'; put 'put ''cy5waXBlbGluZWRWYWx1ZT12b2lkIDAsdGhpcy5zbmFwc2hvdD8uZGlzcG9zZSgpLHRoaXMuc25hcHNob3Q9bnVsbH1kZXN0cm95KCl7dGhpcy5pbXBsLnVucmVnaXN0ZXIodGhpcyksdGhpcy51bnJlZ2lzdGVyT25EZXN0cm95Py4oKTtjb25zdCB0PXRoaXMudmlldz8uWzI1XTt0JiYodGhp''@;'; put 'put ''cy52aWV3WzI1XT10LmZpbHRlcihlPT5lIT09dGhpcykpfX1mdW5jdGlvbiBWZyhuLHQpeyF0Py5pbmplY3RvciYmZnVuY3Rpb24gcmYobil7aWYoIU1nKCkpdGhyb3cgbmV3IGtyKC0yMDMsITEpfSgpO2NvbnN0IGU9dD8uaW5qZWN0b3I/P0puKEhvKTtyZXR1cm4gRHUoIk5nQWZ0ZXJOZXh0''@;'; put 'put ''UmVuZGVyIiksZnVuY3Rpb24gdXgobix0LGUscil7Y29uc3QgaT10LmdldChzeCk7aS5pbXBsPz89dC5nZXQoVWMpO2NvbnN0IGE9dC5nZXQoQW0sbnVsbCx7b3B0aW9uYWw6ITB9KSxjPWU/LnBoYXNlPz9EbS5NaXhlZFJlYWRXcml0ZSxtPSEwIT09ZT8ubWFudWFsQ2xlYW51cD90LmdldChj''@;'; put 'put ''aCk6bnVsbCxDPXQuZ2V0KGttLG51bGwse29wdGlvbmFsOiEwfSksUD1uZXcgVDMoaS5pbXBsLGZ1bmN0aW9uIHpVKG4sdCl7aWYobiBpbnN0YW5jZW9mIEZ1bmN0aW9uKXtjb25zdCBlPVt2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDBdO3JldHVybiBlW3RdPW4sZX1yZXR1cm5bbi5lYXJs''@;'; put 'put ''eVJlYWQsbi53cml0ZSxuLm1peGVkUmVhZFdyaXRlLG4ucmVhZF19KG4sYyksQz8udmlldyxyLG0sYT8uc25hcHNob3QobnVsbCkpO3JldHVybiBpLmltcGwucmVnaXN0ZXIoUCksUH0obixlLHQsITApfWZ1bmN0aW9uIHkxKG4sdCl7Y29uc3QgZT1uLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwh''@;'; put 'put ''PT1lKXtjb25zdCByPWhlKG51bGwpO3RyeXtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2NvbnN0IGM9ZVtpKzFdO2lmKC0xIT09Yyl7Y29uc3QgbT1uLmRhdGFbY107Ul8oZVtpXSksbS5jb250ZW50UXVlcmllcygyLHRbY10sYyl9fX1maW5hbGx5e2hlKHIpfX19ZnVuY3Rpb24gem0o''@;'; put 'put ''bix0LGUpe1JfKDApO2NvbnN0IHI9aGUobnVsbCk7dHJ5e3QobixlKX1maW5hbGx5e2hlKHIpfX1mdW5jdGlvbiBFeChuLHQsZSl7aWYoaDcodCkpe2NvbnN0IHI9aGUobnVsbCk7dHJ5e2NvbnN0IGE9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBjPXQuZGlyZWN0aXZlU3RhcnQ7YzxhO2MrKyl7''@;'; put 'put ''Y29uc3QgbT1uLmRhdGFbY107bS5jb250ZW50UXVlcmllcyYmbS5jb250ZW50UXVlcmllcygxLGVbY10sYyl9fWZpbmFsbHl7aGUocil9fX12YXIgaGg9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLG5bbi5Ob25lPTJdPSJOb25lIixuW24uU2hhZG93RG9t''@;'; put 'put ''PTNdPSJTaGFkb3dEb20iLG59KGhofHx7fSk7bGV0IGxiLGNiO2Z1bmN0aW9uIFVtKG4pe3JldHVybiBmdW5jdGlvbiBiTCgpe2lmKHZvaWQgMD09PWxiJiYobGI9bnVsbCxZcy50cnVzdGVkVHlwZXMpKXRyeXtsYj1Zcy50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3Jl''@;'; put 'put ''YXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBsYn0oKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBreCgpe2lmKHZvaWQgMD09PWNiJiYoY2I9bnVsbCxZcy50cnVzdGVkVHlwZXMpKXRyeXtjYj1Zcy50cnVzdGVk''@;'; put 'put ''VHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIGNifWZ1bmN0aW9uIHdMKG4pe3JldHVybiBreCgpPy5jcmVhdGVIVE1MKG4pfHxufWZ1''@;'; put 'put ''bmN0aW9uIFNMKG4pe3JldHVybiBreCgpPy5jcmVhdGVTY3JpcHRVUkwobil8fG59Y2xhc3MgdWJ7Y2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtjb25zdHJ1Y3Rvcih0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH10b1N0cmluZygp''@;'; put 'put ''e3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke29jfSlgfX1mdW5jdGlvbiBMMyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHViP24uY2hhbmdpbmdUaGlzQnJlYWtz''@;'; put 'put ''QXBwbGljYXRpb25TZWN1cml0eTpufWZ1bmN0aW9uIFdtKG4sdCl7Y29uc3QgZT1mdW5jdGlvbiBNTChuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHViJiZuLmdldFR5cGVOYW1lKCl8fG51bGx9KG4pO2lmKG51bGwhPWUmJmUhPT10KXtpZigiUmVzb3VyY2VVUkwiPT09ZSYmIlVSTCI9PT10KXJl''@;'; put 'put ''dHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7dH0sIGdvdCBhICR7ZX0gKHNlZSAke29jfSlgKX1yZXR1cm4gZT09PXR9Y2xhc3MgRVd7aW5lcnREb2N1bWVudEhlbHBlcjtjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJv''@;'; put 'put ''ZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtjb25zdCBlPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKFVtKHQpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09ZT90aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5l''@;'; put 'put ''cnRCb2R5RWxlbWVudCh0KTooZS5maXJzdENoaWxkPy5yZW1vdmUoKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIFRXe2RlZmF1bHREb2M7aW5lcnREb2N1bWVudDtjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9j''@;'; put 'put ''LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0Iil9Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtjb25zdCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBlLmlubmVySFRNTD1VbSh0KSxlfX1jb25z''@;'; put 'put ''dCBrVz0vXig/IWphdmFzY3JpcHQ6KSg/OlthLXowLTkrLi1dKzp8W14mOlwvPyNdKig/OltcLz8jXXwkKSkvaTtmdW5jdGlvbiBuOShuKXtyZXR1cm4obj1TdHJpbmcobikpLm1hdGNoKGtXKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIG8yKG4pe2NvbnN0IHQ9e307Zm9yKGNvbnN0IGUgb2Yg''@;'; put 'put ''bi5zcGxpdCgiLCIpKXRbZV09ITA7cmV0dXJuIHR9ZnVuY3Rpb24gWm0oLi4ubil7Y29uc3QgdD17fTtmb3IoY29uc3QgZSBvZiBuKWZvcihjb25zdCByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09ITApO3JldHVybiB0fWNvbnN0IHhMPW8yKCJhcmVhLGJyLGNvbCxocixpbWcs''@;'; put 'put ''d2JyIiksRUw9bzIoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxJeD1vMigicnAscnQiKSxSeD1abSh4TCxabShFTCxvMigiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRp''@;'; put 'put ''cixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksWm0oSXgsbzIoImEsYWJicixhY3JvbnltLGF1ZGlvLGIsYmRpLGJk''@;'; put 'put ''byxiaWcsYnIsY2l0ZSxjb2RlLGRlbCxkZm4sZW0sZm9udCxpLGltZyxpbnMsa2JkLGxhYmVsLG1hcCxtYXJrLHBpY3R1cmUscSxydWJ5LHJwLHJ0LHMsc2FtcCxzbWFsbCxzb3VyY2Usc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0cmFjayx0dCx1LHZhcix2aWRlbyIpKSxabShJ''@;'; put 'put ''eCxFTCkpLEx4PW8yKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxkYj1abShMeCxvMigiYWJicixhY2Nlc3NrZXksYWxpZ24sYWx0LGF1dG9wbGF5LGF4aXMsYmdjb2xvcixib3JkZXIsY2VsbHBhZGRpbmcsY2VsbHNwYWNp''@;'; put 'put ''bmcsY2xhc3MsY2xlYXIsY29sb3IsY29scyxjb2xzcGFuLGNvbXBhY3QsY29udHJvbHMsY29vcmRzLGRhdGV0aW1lLGRlZmF1bHQsZGlyLGRvd25sb2FkLGZhY2UsaGVhZGVycyxoZWlnaHQsaGlkZGVuLGhyZWZsYW5nLGhzcGFjZSxpc21hcCxpdGVtc2NvcGUsaXRlbXByb3Asa2luZCxsYWJl''@;'; put 'put ''bCxsYW5nLGxhbmd1YWdlLGxvb3AsbWVkaWEsbXV0ZWQsbm9ocmVmLG5vd3JhcCxvcGVuLHByZWxvYWQscmVsLHJldixyb2xlLHJvd3Mscm93c3BhbixydWxlcyxzY29wZSxzY3JvbGxpbmcsc2hhcGUsc2l6ZSxzaXplcyxzcGFuLHNyY2xhbmcsc3Jjc2V0LHN0YXJ0LHN1bW1hcnksdGFiaW5k''@;'; put 'put ''ZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIiksbzIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCxhcmlhLWF0b21pYyxhcmlhLWF1dG9jb21wbGV0ZSxhcmlhLWJ1c3ksYXJpYS1jaGVja2VkLGFyaWEtY29sY291bnQsYXJpYS1j''@;'; put 'put ''b2xpbmRleCxhcmlhLWNvbHNwYW4sYXJpYS1jb250cm9scyxhcmlhLWN1cnJlbnQsYXJpYS1kZXNjcmliZWRieSxhcmlhLWRldGFpbHMsYXJpYS1kaXNhYmxlZCxhcmlhLWRyb3BlZmZlY3QsYXJpYS1lcnJvcm1lc3NhZ2UsYXJpYS1leHBhbmRlZCxhcmlhLWZsb3d0byxhcmlhLWdyYWJiZWQs''@;'; put 'put ''YXJpYS1oYXNwb3B1cCxhcmlhLWhpZGRlbixhcmlhLWludmFsaWQsYXJpYS1rZXlzaG9ydGN1dHMsYXJpYS1sYWJlbCxhcmlhLWxhYmVsbGVkYnksYXJpYS1sZXZlbCxhcmlhLWxpdmUsYXJpYS1tb2RhbCxhcmlhLW11bHRpbGluZSxhcmlhLW11bHRpc2VsZWN0YWJsZSxhcmlhLW9yaWVudGF0''@;'; put 'put ''aW9uLGFyaWEtb3ducyxhcmlhLXBsYWNlaG9sZGVyLGFyaWEtcG9zaW5zZXQsYXJpYS1wcmVzc2VkLGFyaWEtcmVhZG9ubHksYXJpYS1yZWxldmFudCxhcmlhLXJlcXVpcmVkLGFyaWEtcm9sZWRlc2NyaXB0aW9uLGFyaWEtcm93Y291bnQsYXJpYS1yb3dpbmRleCxhcmlhLXJvd3NwYW4sYXJp''@;'; put 'put ''YS1zZWxlY3RlZCxhcmlhLXNldHNpemUsYXJpYS1zb3J0LGFyaWEtdmFsdWVtYXgsYXJpYS12YWx1ZW1pbixhcmlhLXZhbHVlbm93LGFyaWEtdmFsdWV0ZXh0IikpLERXPW8yKCJzY3JpcHQsc3R5bGUsdGVtcGxhdGUiKTtjbGFzcyBUTHtzYW5pdGl6ZWRTb21ldGhpbmc9ITE7YnVmPVtdO3Nh''@;'; put 'put ''bml0aXplQ2hpbGRyZW4odCl7bGV0IGU9dC5maXJzdENoaWxkLHI9ITAsaT1bXTtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9yPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0''@;'; put 'put ''aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxyJiZlLmZpcnN0Q2hpbGQpaS5wdXNoKGUpLGU9a0woZSk7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgYT1JVyhlKTtpZihhKXtlPWE7YnJlYWt9ZT1pLnBvcCgpfXJl''@;'; put 'put ''dHVybiB0aGlzLmJ1Zi5qb2luKCIiKX1zdGFydEVsZW1lbnQodCl7Y29uc3QgZT1PeCh0KS50b0xvd2VyQ2FzZSgpO2lmKCFSeC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsIURXLmhhc093blByb3BlcnR5KGUpO3RoaXMuYnVmLnB1c2goIjwi''@;'; put 'put ''KSx0aGlzLmJ1Zi5wdXNoKGUpO2NvbnN0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPXIuaXRlbShpKSxjPWEubmFtZSxtPWMudG9Mb3dlckNhc2UoKTtpZighZGIuaGFzT3duUHJvcGVydHkobSkpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEw''@;'; put 'put ''O2NvbnRpbnVlfWxldCBDPWEudmFsdWU7THhbbV0mJihDPW45KEMpKSx0aGlzLmJ1Zi5wdXNoKCIgIixjLCc9IicsQmcoQyksJyInKX1yZXR1cm4gdGhpcy5idWYucHVzaCgiPiIpLCEwfWVuZEVsZW1lbnQodCl7Y29uc3QgZT1PeCh0KS50b0xvd2VyQ2FzZSgpO1J4Lmhhc093blByb3BlcnR5''@;'; put 'put ''KGUpJiYheEwuaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLmJ1Zi5wdXNoKCI8LyIpLHRoaXMuYnVmLnB1c2goZSksdGhpcy5idWYucHVzaCgiPiIpKX1jaGFycyh0KXt0aGlzLmJ1Zi5wdXNoKEJnKHQpKX19ZnVuY3Rpb24gSVcobil7Y29uc3QgdD1uLm5leHRTaWJsaW5nO2lmKHQmJm4hPT10''@;'; put 'put ''LnByZXZpb3VzU2libGluZyl0aHJvdyBQeCh0KTtyZXR1cm4gdH1mdW5jdGlvbiBrTChuKXtjb25zdCB0PW4uZmlyc3RDaGlsZDtpZih0JiZmdW5jdGlvbiBBTChuLHQpe3JldHVybihuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVE''@;'; put 'put ''X0JZKSE9PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZfShuLHQpKXRocm93IFB4KHQpO3JldHVybiB0fWZ1bmN0aW9uIE94KG4pe2NvbnN0IHQ9bi5ub2RlTmFtZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dDoiRk9STSJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIG5ldyBF''@;'; put 'put ''cnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7bi5vdXRlckhUTUx9YCl9Y29uc3QgUlc9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGhiPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBCZyhuKXtyZXR1cm4g''@;'; put 'put ''bi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShSVyxmdW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNoYXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKGhiLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFy''@;'; put 'put ''Q29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWxldCBHbTtmdW5jdGlvbiBmYihuKXtyZXR1cm4iY29udGVudCJpbiBuJiZmdW5jdGlvbiBPVyhuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUi''@;'; put 'put ''PT09bi5ub2RlTmFtZX0obik/bi5jb250ZW50Om51bGx9Y29uc3QgUFc9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxGVz0vKDx8PikvZztmdW5jdGlvbiBGeChuLHQpe3JldHVybiBuLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gREwobil7cmV0dXJuIG4ucmVwbGFjZShQVyx0PT50LnJl''@;'; put 'put ''cGxhY2UoRlcsIlx1MjAwYiQxXHUyMDBiIikpfSh0KSl9ZnVuY3Rpb24gcGIobix0LGUpe3JldHVybiBuLmNyZWF0ZUVsZW1lbnQodCxlKX1mdW5jdGlvbiBqZyhuLHQsZSxyLGkpe24uaW5zZXJ0QmVmb3JlKHQsZSxyLGkpfWZ1bmN0aW9uIFJMKG4sdCxlKXtuLmFwcGVuZENoaWxkKHQsZSl9''@;'; put 'put ''ZnVuY3Rpb24gTEwobix0LGUscixpKXtudWxsIT09cj9qZyhuLHQsZSxyLGkpOlJMKG4sdCxlKX1mdW5jdGlvbiBQTChuLHQsZSl7Y29uc3R7bWVyZ2VkQXR0cnM6cixjbGFzc2VzOmksc3R5bGVzOmF9PWU7bnVsbCE9PXImJmZ1bmN0aW9uIFhJKG4sdCxlKXtsZXQgcj0wO2Zvcig7cjxlLmxl''@;'; put 'put ''bmd0aDspe2NvbnN0IGk9ZVtyXTtpZigibnVtYmVyIj09dHlwZW9mIGkpe2lmKDAhPT1pKWJyZWFrO3IrKztjb25zdCBhPWVbcisrXSxjPWVbcisrXSxtPWVbcisrXTtuLnNldEF0dHJpYnV0ZSh0LGMsbSxhKX1lbHNle2NvbnN0IGE9aSxjPWVbKytyXTtxSShhKT9uLnNldFByb3BlcnR5KHQs''@;'; put 'put ''YSxjKTpuLnNldEF0dHJpYnV0ZSh0LGEsYykscisrfX19KG4sdCxyKSxudWxsIT09aSYmZnVuY3Rpb24gVlcobix0LGUpeyIiPT09ZT9uLnJlbW92ZUF0dHJpYnV0ZSh0LCJjbGFzcyIpOm4uc2V0QXR0cmlidXRlKHQsImNsYXNzIixlKX0obix0LGkpLG51bGwhPT1hJiZmdW5jdGlvbiBOVyhu''@;'; put 'put ''LHQsZSl7bi5zZXRBdHRyaWJ1dGUodCwic3R5bGUiLGUpfShuLHQsYSl9dmFyIEttPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJM''@;'; put 'put ''IixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLG59KEttfHx7fSk7ZnVuY3Rpb24gemcobil7Y29uc3QgdD1pOSgpO3JldHVybiB0P3dMKHQuc2FuaXRpemUoS20uSFRNTCxuKXx8IiIpOldtKG4sIkhUTUwiKT93TChMMyhuKSk6ZnVuY3Rpb24gTFcobix0KXtsZXQgZT1udWxs''@;'; put 'put ''O3RyeXtHbT1HbXx8ZnVuY3Rpb24gRHgobil7Y29uc3QgdD1uZXcgVFcobik7cmV0dXJuIGZ1bmN0aW9uIEFXKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoVW0oIiIpLCJ0ZXh0L2h0bWwiKX1jYXRjaHtyZXR1cm4hMX19KCk/bmV3IEVXKHQp''@;'; put 'put ''OnR9KG4pO2xldCByPXQ/U3RyaW5nKHQpOiIiO2U9R20uZ2V0SW5lcnRCb2R5RWxlbWVudChyKTtsZXQgaT01LGE9cjtkb3tpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aS0tLHI9YSxhPWUu''@;'; put 'put ''aW5uZXJIVE1MLGU9R20uZ2V0SW5lcnRCb2R5RWxlbWVudChyKX13aGlsZShyIT09YSk7cmV0dXJuIFVtKChuZXcgVEwpLnNhbml0aXplQ2hpbGRyZW4oZmIoZSl8fGUpKX1maW5hbGx5e2lmKGUpe2NvbnN0IHI9ZmIoZSl8fGU7Zm9yKDtyLmZpcnN0Q2hpbGQ7KXIuZmlyc3RDaGlsZC5yZW1v''@;'; put 'put ''dmUoKX19fSh2ZigpLG9vKG4pKX1mdW5jdGlvbiBIeChuKXtjb25zdCB0PWk5KCk7cmV0dXJuIHQ/dC5zYW5pdGl6ZShLbS5VUkwsbil8fCIiOldtKG4sIlVSTCIpP0wzKG4pOm45KG9vKG4pKX1mdW5jdGlvbiBGTChuKXtjb25zdCB0PWk5KCk7aWYodClyZXR1cm4gU0wodC5zYW5pdGl6ZShL''@;'; put 'put ''bS5SRVNPVVJDRV9VUkwsbil8fCIiKTtpZihXbShuLCJSZXNvdXJjZVVSTCIpKXJldHVybiBTTChMMyhuKSk7dGhyb3cgbmV3IGtyKDkwNCwhMSl9Y29uc3QgWlc9bmV3IFNldChbImVtYmVkIiwiZnJhbWUiLCJpZnJhbWUiLCJtZWRpYSIsInNjcmlwdCJdKSxZVz1uZXcgU2V0KFsiYmFzZSIs''@;'; put 'put ''ImxpbmsiLCJzY3JpcHQiXSk7ZnVuY3Rpb24gaTkoKXtjb25zdCBuPVVyKCk7cmV0dXJuIG4mJm5bMTBdLnNhbml0aXplcn1mdW5jdGlvbiBOeChuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFhtKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnR9ZnVuY3Rp''@;'; put 'put ''b24gd2Yobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdW5jdGlvbj9uKCk6bn1mdW5jdGlvbiBlWihuLHQsZSl7bGV0IHI9bi5sZW5ndGg7Zm9yKDs7KXtjb25zdCBpPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09aSlyZXR1cm4gaTtpZigwPT09aXx8bi5jaGFyQ29kZUF0KGktMSk8PTMyKXtjb25z''@;'; put 'put ''dCBhPXQubGVuZ3RoO2lmKGkrYT09PXJ8fG4uY2hhckNvZGVBdChpK2EpPD0zMilyZXR1cm4gaX1lPWkrMX19Y29uc3QgVUw9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiB0WihuLHQsZSxyKXtsZXQgaT0wO2lmKHIpe2Zvcig7aTx0Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0W2ldO2krPTIp''@;'; put 'put ''aWYoImNsYXNzIj09PXRbaV0mJi0xIT09ZVoodFtpKzFdLnRvTG93ZXJDYXNlKCksZSwwKSlyZXR1cm4hMH1lbHNlIGlmKFZ4KG4pKXJldHVybiExO2lmKGk9dC5pbmRleE9mKDEsaSksaT4tMSl7bGV0IGE7Zm9yKDsrK2k8dC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YoYT10W2ldKTspaWYo''@;'; put 'put ''YS50b0xvd2VyQ2FzZSgpPT09ZSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBWeChuKXtyZXR1cm4gND09PW4udHlwZSYmbi52YWx1ZSE9PVVMfWZ1bmN0aW9uIG5aKG4sdCxlKXtyZXR1cm4gdD09PSg0IT09bi50eXBlfHxlP24udmFsdWU6VUwpfWZ1bmN0aW9uIHJaKG4sdCxlKXtsZXQg''@;'; put 'put ''cj00O2NvbnN0IGk9bi5hdHRycyxhPW51bGwhPT1pP2Z1bmN0aW9uIFpMKG4pe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKGhmKG5bdF0pKXJldHVybiB0O3JldHVybiBuLmxlbmd0aH0oaSk6MDtsZXQgYz0hMTtmb3IobGV0IG09MDttPHQubGVuZ3RoO20rKyl7Y29uc3QgQz10W21d''@;'; put 'put ''O2lmKCJudW1iZXIiIT10eXBlb2YgQyl7aWYoIWMpaWYoNCZyKXtpZihyPTJ8MSZyLCIiIT09QyYmIW5aKG4sQyxlKXx8IiI9PT1DJiYxPT09dC5sZW5ndGgpe2lmKHMyKHIpKXJldHVybiExO2M9ITB9fWVsc2UgaWYoOCZyKXtpZihudWxsPT09aXx8IXRaKG4saSxDLGUpKXtpZihzMihyKSly''@;'; put 'put ''ZXR1cm4hMTtjPSEwfX1lbHNle2NvbnN0IFA9dFsrK21dLFk9aVooQyxpLFZ4KG4pLGUpO2lmKC0xPT09WSl7aWYoczIocikpcmV0dXJuITE7Yz0hMDtjb250aW51ZX1pZigiIiE9PVApe2xldCBKO2lmKEo9WT5hPyIiOmlbWSsxXS50b0xvd2VyQ2FzZSgpLDImciYmUCE9PUope2lmKHMyKHIp''@;'; put 'put ''KXJldHVybiExO2M9ITB9fX19ZWxzZXtpZighYyYmIXMyKHIpJiYhczIoQykpcmV0dXJuITE7aWYoYyYmczIoQykpY29udGludWU7Yz0hMSxyPUN8MSZyfX1yZXR1cm4gczIocil8fGN9ZnVuY3Rpb24gczIobil7cmV0dXJuISgxJm4pfWZ1bmN0aW9uIGlaKG4sdCxlLHIpe2lmKG51bGw9PT10''@;'; put 'put ''KXJldHVybi0xO2xldCBpPTA7aWYocnx8IWUpe2xldCBhPSExO2Zvcig7aTx0Lmxlbmd0aDspe2NvbnN0IGM9dFtpXTtpZihjPT09bilyZXR1cm4gaTtpZigzPT09Y3x8Nj09PWMpYT0hMDtlbHNle2lmKDE9PT1jfHwyPT09Yyl7bGV0IG09dFsrK2ldO2Zvcig7InN0cmluZyI9PXR5cGVvZiBt''@;'; put 'put ''OyltPXRbKytpXTtjb250aW51ZX1pZig0PT09YylicmVhaztpZigwPT09Yyl7aSs9NDtjb250aW51ZX19aSs9YT8xOjJ9cmV0dXJuLTF9cmV0dXJuIGZ1bmN0aW9uIG9aKG4sdCl7bGV0IGU9bi5pbmRleE9mKDQpO2lmKGU+LTEpZm9yKGUrKztlPG4ubGVuZ3RoOyl7Y29uc3Qgcj1uW2VdO2lm''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4tMTtpZihyPT09dClyZXR1cm4gZTtlKyt9cmV0dXJuLTF9KHQsbil9ZnVuY3Rpb24gV0wobix0LGU9ITEpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHJaKG4sdFtyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBzWihuLHQp''@;'; put 'put ''e2U6Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2NvbnN0IHI9dFtlXTtpZihuLmxlbmd0aD09PXIubGVuZ3RoKXtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ldIT09cltpXSljb250aW51ZSBlO3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBZTChuLHQpe3JldHVybiBu''@;'; put 'put ''PyI6bm90KCIrdC50cmltKCkrIikiOnR9ZnVuY3Rpb24gbFoobil7bGV0IHQ9blswXSxlPTEscj0yLGk9IiIsYT0hMTtmb3IoO2U8bi5sZW5ndGg7KXtsZXQgYz1uW2VdO2lmKCJzdHJpbmciPT10eXBlb2YgYylpZigyJnIpe2NvbnN0IG09blsrK2VdO2krPSJbIitjKyhtLmxlbmd0aD4wPyc9''@;'; put 'put ''IicrbSsnIic6IiIpKyJdIn1lbHNlIDgmcj9pKz0iLiIrYzo0JnImJihpKz0iICIrYyk7ZWxzZSIiIT09aSYmIXMyKGMpJiYodCs9WUwoYSxpKSxpPSIiKSxyPWMsYT1hfHwhczIocik7ZSsrfXJldHVybiIiIT09aSYmKHQrPVlMKGEsaSkpLHR9Y29uc3QgT289e307ZnVuY3Rpb24gYTkobix0''@;'; put 'put ''LGUscixpLGEsYyxtLEMsUCxZKXtjb25zdCBKPTI2K3IsY2U9SitpLGZlPWZ1bmN0aW9uIEJ4KG4sdCl7Y29uc3QgZT1bXTtmb3IobGV0IHI9MDtyPHQ7cisrKWUucHVzaChyPG4/bnVsbDpPbyk7cmV0dXJuIGV9KEosY2UpLEFlPSJmdW5jdGlvbiI9PXR5cGVvZiBQP1AoKTpQO3JldHVybiBm''@;'; put 'put ''ZVsxXT17dHlwZTpuLGJsdWVwcmludDpmZSx0ZW1wbGF0ZTplLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6bSxkZWNsVE5vZGU6dCxkYXRhOmZlLnNsaWNlKCkuZmlsbChudWxsLEopLGJpbmRpbmdTdGFydEluZGV4OkosZXhwYW5kb1N0YXJ0SW5kZXg6Y2UsaG9zdEJpbmRpbmdPcENvZGVzOm51''@;'; put 'put ''bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVlcmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6''@;'; put 'put ''bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgYT9hKCk6YSxwaXBlUmVnaXN0cnk6''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMsZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6Qyxjb25zdHM6QWUsaW5jb21wbGV0ZUZpcnN0UGFzczohMSxzc3JJZDpZfX1mdW5jdGlvbiBtYihuLHQsZSxyLGksYSxjLG0sQyxQLFkpe2NvbnN0IEo9dC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4g''@;'; put 'put ''SlswXT1pLEpbMl09MTIyOHxyLChudWxsIT09UHx8biYmMjA0OCZuWzJdKSYmKEpbMl18PTIwNDgpLElJKEopLEpbM109SlsxNF09bixKWzhdPWUsSlsxMF09Y3x8biYmblsxMF0sSlsxMV09bXx8biYmblsxMV0sSls5XT1DfHxuJiZuWzldfHxudWxsLEpbNV09YSxKWzE5XT1mdW5jdGlvbiBU''@;'; put 'put ''VSgpe3JldHVybiBQb2UrK30oKSxKWzZdPVksSlsyMF09UCxKWzE1XT0yPT10LnR5cGU/blsxNV06SixKfWZ1bmN0aW9uIGp4KG4pe2xldCB0PTE2O3JldHVybiBuLnNpZ25hbHM/dD00MDk2Om4ub25QdXNoJiYodD02NCksdH1mdW5jdGlvbiBvOShuLHQsZSxyKXtpZigwPT09ZSlyZXR1cm4t''@;'; put 'put ''MTtjb25zdCBpPXQubGVuZ3RoO2ZvcihsZXQgYT0wO2E8ZTthKyspdC5wdXNoKHIpLG4uYmx1ZXByaW50LnB1c2gociksbi5kYXRhLnB1c2gobnVsbCk7cmV0dXJuIGl9ZnVuY3Rpb24gengobix0KXtyZXR1cm4gblsxMl0/blsxM11bNF09dDpuWzEyXT10LG5bMTNdPXQsdH1mdW5jdGlvbiBh''@;'; put 'put ''ZShuPTEpeyRMKEVvKCksVXIoKSxrdSgpK24sITEpfWZ1bmN0aW9uICRMKG4sdCxlLHIpe2lmKCFyKWlmKDMmfnRbMl0pe2NvbnN0IGE9bi5wcmVPcmRlckhvb2tzO251bGwhPT1hJiZPXyh0LGEsMCxlKX1lbHNle2NvbnN0IGE9bi5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWEmJkxfKHQs''@;'; put 'put ''YSxlKX14MyhlKX12YXIgdmI9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5Ob25lPTBdPSJOb25lIixuW24uU2lnbmFsQmFzZWQ9MV09IlNpZ25hbEJhc2VkIixuW24uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm09Ml09Ikhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtIixufSh2Ynx8e30pO2Z1''@;'; put 'put ''bmN0aW9uIFV4KG4sdCxlLHIpe2NvbnN0IGk9aGUobnVsbCk7dHJ5e2NvbnN0W2EsYyxtXT1uLmlucHV0c1tlXTtsZXQgQz1udWxsOyEhKGMmdmIuU2lnbmFsQmFzZWQpJiYoQz10W2FdW3NlXSksbnVsbCE9PUMmJnZvaWQgMCE9PUMudHJhbnNmb3JtRm4/cj1DLnRyYW5zZm9ybUZuKHIpOm51''@;'; put 'put ''bGwhPT1tJiYocj1tLmNhbGwodCxyKSksbnVsbCE9PW4uc2V0SW5wdXQ/bi5zZXRJbnB1dCh0LEMscixlLGEpOk10KHQsQyxhLHIpfWZpbmFsbHl7aGUoaSl9fWZ1bmN0aW9uIEtMKG4sdCxlLHIsaSl7Y29uc3QgYT1rdSgpLGM9MiZyO3RyeXt4MygtMSksYyYmdC5sZW5ndGg+MjYmJiRMKG4s''@;'; put 'put ''dCwyNiwhMSksZShyLGkpfWZpbmFsbHl7eDMoYSl9fWZ1bmN0aW9uIHliKG4sdCxlKXsoZnVuY3Rpb24gbVoobix0LGUpe2NvbnN0IHI9ZS5kaXJlY3RpdmVTdGFydCxpPWUuZGlyZWN0aXZlRW5kO2JkKGUpJiZmdW5jdGlvbiBkWihuLHQsZSl7Y29uc3Qgcj1mMSh0LG4pLGk9ZnVuY3Rpb24g''@;'; put 'put ''R0wobil7Y29uc3QgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9YTkoMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzLG4u''@;'; put 'put ''aWQpOnR9KGUpLGE9blsxMF0ucmVuZGVyZXJGYWN0b3J5LGM9engobixtYihuLGksbnVsbCxqeChlKSxyLHQsbnVsbCxhLmNyZWF0ZVJlbmRlcmVyKHIsZSksbnVsbCxudWxsLG51bGwpKTtuW3QuaW5kZXhdPWN9KHQsZSxuLmRhdGFbcitlLmNvbXBvbmVudE9mZnNldF0pLG4uZmlyc3RDcmVh''@;'; put 'put ''dGVQYXNzfHxDNyhlLHQpO2NvbnN0IGE9ZS5pbml0aWFsSW5wdXRzO2ZvcihsZXQgYz1yO2M8aTtjKyspe2NvbnN0IG09bi5kYXRhW2NdLEM9UzcodCxuLGMsZSk7VzAoQyx0KSxudWxsIT09YSYmX1ooMCxjLXIsQyxtLDAsYSksaDEobSkmJihwMShlLmluZGV4LHQpWzhdPVM3KHQsbixjLGUp''@;'; put 'put ''KX19KShuLHQsZSksISg2NCZ+ZS5mbGFncykmJmZ1bmN0aW9uIHZaKG4sdCxlKXtjb25zdCByPWUuZGlyZWN0aXZlU3RhcnQsaT1lLmRpcmVjdGl2ZUVuZCxhPWUuaW5kZXgsYz1mdW5jdGlvbiByVSgpe3JldHVybiBrby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXt4Myhh''@;'; put 'put ''KTtmb3IobGV0IG09cjttPGk7bSsrKXtjb25zdCBDPW4uZGF0YVttXSxQPXRbbV07d00obSksKG51bGwhPT1DLmhvc3RCaW5kaW5nc3x8MCE9PUMuaG9zdFZhcnN8fG51bGwhPT1DLmhvc3RBdHRycykmJnlaKEMsUCl9fWZpbmFsbHl7eDMoLTEpLHdNKGMpfX0obix0LGUpfWZ1bmN0aW9uIFd4''@;'; put 'put ''KG4sdCxlPWYxKXtjb25zdCByPXQubG9jYWxOYW1lcztpZihudWxsIT09cil7bGV0IGk9dC5pbmRleCsxO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSs9Mil7Y29uc3QgYz1yW2ErMV0sbT0tMT09PWM/ZSh0LG4pOm5bY107bltpKytdPW19fX1sZXQgWEw9KCk9Pm51bGw7ZnVuY3Rpb24gajEo''@;'; put 'put ''bix0LGUscixpLGEsYyxtKXtpZihtfHwhJHgodCxuLGUscixpKSl7aWYoMyZ0LnR5cGUpe2NvbnN0IEM9ZjEodCxlKTtyPWZ1bmN0aW9uIHFMKG4pe3JldHVybiJjbGFzcyI9PT1uPyJjbGFzc05hbWUiOiJmb3IiPT09bj8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09bj8iZm9ybUFjdGlvbiI6''@;'; put 'put ''ImlubmVySHRtbCI9PT1uPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1uPyJyZWFkT25seSI6InRhYmluZGV4Ij09PW4/InRhYkluZGV4IjpufShyKSxpPW51bGwhPWM/YyhpLHQudmFsdWV8fCIiLHIpOmksYS5zZXRQcm9wZXJ0eShDLHIsaSl9fWVsc2UgYmQodCkmJmZ1bmN0aW9uIGdaKG4s''@;'; put 'put ''dCl7Y29uc3QgZT1wMSh0LG4pOzE2JmVbMl18fChlWzJdfD02NCl9KGUsdC5pbmRleCl9ZnVuY3Rpb24geVoobix0KXtudWxsIT09bi5ob3N0QmluZGluZ3MmJm4uaG9zdEJpbmRpbmdzKDEsdCl9ZnVuY3Rpb24gWngobix0KXtjb25zdCBlPW4uZGlyZWN0aXZlUmVnaXN0cnk7bGV0IHI9bnVs''@;'; put 'put ''bDtpZihlKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBhPWVbaV07V0wodCxhLnNlbGVjdG9ycywhMSkmJihyPz89W10saDEoYSk/ci51bnNoaWZ0KGEpOnIucHVzaChhKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gQ2Yobix0LGUscixpLGEpe2NvbnN0IGM9ZjEobix0KTshZnVuY3Rp''@;'; put 'put ''b24gWXgobix0LGUscixpLGEsYyl7aWYobnVsbD09YSluLnJlbW92ZUF0dHJpYnV0ZSh0LGksZSk7ZWxzZXtjb25zdCBtPW51bGw9PWM/b28oYSk6YyhhLHJ8fCIiLGkpO24uc2V0QXR0cmlidXRlKHQsaSxtLGUpfX0odFsxMV0sYyxhLG4udmFsdWUsZSxyLGkpfWZ1bmN0aW9uIF9aKG4sdCxl''@;'; put 'put ''LHIsaSxhKXtjb25zdCBjPWFbdF07aWYobnVsbCE9PWMpZm9yKGxldCBtPTA7bTxjLmxlbmd0aDttKz0yKVV4KHIsZSxjW21dLGNbbSsxXSl9ZnVuY3Rpb24gUUwobix0LGUpe3JldHVybihudWxsPT09bnx8aDEobikpJiYoZT1mdW5jdGlvbiBkTShuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7''@;'; put 'put ''KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bMV0pcmV0dXJuIG47bj1uWzBdfXJldHVybiBudWxsfShlW3QuaW5kZXhdKSksZVsxMV19ZnVuY3Rpb24gJHgobix0LGUscixpKXtjb25zdCBhPW4uaW5wdXRzPy5bcl0sYz1uLmhvc3REaXJlY3RpdmVJbnB1dHM/LltyXTtsZXQgbT0hMTtpZihjKWZv''@;'; put 'put ''cihsZXQgQz0wO0M8Yy5sZW5ndGg7Qys9Mil7Y29uc3QgUD1jW0NdO1V4KHQuZGF0YVtQXSxlW1BdLGNbQysxXSxpKSxtPSEwfWlmKGEpZm9yKGNvbnN0IEMgb2YgYSlVeCh0LmRhdGFbQ10sZVtDXSxyLGkpLG09ITA7cmV0dXJuIG19ZnVuY3Rpb24gYloobix0KXtjb25zdCBlPXAxKHQsbiks''@;'; put 'put ''cj1lWzFdOyFmdW5jdGlvbiBLeChuLHQpe2ZvcihsZXQgZT10Lmxlbmd0aDtlPG4uYmx1ZXByaW50Lmxlbmd0aDtlKyspdC5wdXNoKG4uYmx1ZXByaW50W2VdKX0ocixlKTtjb25zdCBpPWVbMF07bnVsbCE9PWkmJm51bGw9PT1lWzZdJiYoZVs2XT1udWxsKSxfYihyLGUsZVs4XSl9ZnVuY3Rp''@;'; put 'put ''b24gX2Iobix0LGUpe01NKHQpO3RyeXtjb25zdCByPW4udmlld1F1ZXJ5O251bGwhPT1yJiZ6bSgxLHIsZSk7Y29uc3QgaT1uLnRlbXBsYXRlO251bGwhPT1pJiZLTChuLHQsaSwxLGUpLG4uZmlyc3RDcmVhdGVQYXNzJiYobi5maXJzdENyZWF0ZVBhc3M9ITEpLHRbMThdPy5maW5pc2hWaWV3''@;'; put 'put ''Q3JlYXRpb24obiksbi5zdGF0aWNDb250ZW50UXVlcmllcyYmeTEobix0KSxuLnN0YXRpY1ZpZXdRdWVyaWVzJiZ6bSgyLG4udmlld1F1ZXJ5LGUpO2NvbnN0IGE9bi5jb21wb25lbnRzO251bGwhPT1hJiZmdW5jdGlvbiB3WihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWJaKG4s''@;'; put 'put ''dFtlXSl9KHQsYSl9Y2F0Y2gocil7dGhyb3cgbi5maXJzdENyZWF0ZVBhc3MmJihuLmluY29tcGxldGVGaXJzdFBhc3M9ITAsbi5maXJzdENyZWF0ZVBhc3M9ITEpLHJ9ZmluYWxseXt0WzJdJj0tNSx4TSgpfX1mdW5jdGlvbiBKbShuLHQsZSxyKXtjb25zdCBpPWhlKG51bGwpO3RyeXtjb25z''@;'; put 'put ''dCBhPXQudFZpZXcsQz1tYihuLGEsZSw0MDk2Jm5bMl0/NDA5NjoxNixudWxsLHQsbnVsbCxudWxsLHI/LmluamVjdG9yPz9udWxsLHI/LmVtYmVkZGVkVmlld0luamVjdG9yPz9udWxsLHI/LmRlaHlkcmF0ZWRWaWV3Pz9udWxsKTtDWzE2XT1uW3QuaW5kZXhdO2NvbnN0IFk9blsxOF07cmV0''@;'; put 'put ''dXJuIG51bGwhPT1ZJiYoQ1sxOF09WS5jcmVhdGVFbWJlZGRlZFZpZXcoYSkpLF9iKGEsQyxlKSxDfWZpbmFsbHl7aGUoaSl9fWZ1bmN0aW9uIFVwKG4sdCl7cmV0dXJuIXR8fG51bGw9PT10LmZpcnN0Q2hpbGR8fE83KG4pfWZ1bmN0aW9uIHdiKG4sdCl7cmV0dXJuIHVuZGVmaW5lZChuLHQp''@;'; put 'put ''fXZhciBXcD1mdW5jdGlvbihuKXtyZXR1cm4gbltuLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixuW24uRGFzaENhc2U9Ml09IkRhc2hDYXNlIixufShXcHx8e30pO2Z1bmN0aW9uIE8zKG4pe3JldHVybiEoMzImfm4uZmxhZ3MpfWZ1bmN0aW9uIFFtKG4sdCxlLHIsaSl7aWYobnVsbCE9cil7''@;'; put 'put ''bGV0IGEsYz0hMTt6YyhyKT9hPXI6Y2wocikmJihjPSEwLHI9clswXSk7Y29uc3QgbT1PcyhyKTswPT09biYmbnVsbCE9PWU/bnVsbD09aT9STCh0LGUsbSk6amcodCxlLG0saXx8bnVsbCwhMCk6MT09PW4mJm51bGwhPT1lP2pnKHQsZSxtLGl8fG51bGwsITApOjI9PT1uP2Z1bmN0aW9uIHI5''@;'; put 'put ''KG4sdCxlKXtuLnJlbW92ZUNoaWxkKG51bGwsdCxlKX0odCxtLGMpOjM9PT1uJiZ0LmRlc3Ryb3lOb2RlKG0pLG51bGwhPWEmJmZ1bmN0aW9uIEFaKG4sdCxlLHIsaSl7Y29uc3QgYT1lWzddO2EhPT1PcyhlKSYmUW0odCxuLHIsYSxpKTtmb3IobGV0IG09MTA7bTxlLmxlbmd0aDttKyspe2Nv''@;'; put 'put ''bnN0IEM9ZVttXTtTYihDWzFdLEMsbix0LHIsYSl9fSh0LG4sYSxlLGkpfX1mdW5jdGlvbiB0TyhuLHQpe3RbMTBdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDkpLFNiKG4sdCx0WzExXSwyLG51bGwsbnVsbCl9ZnVuY3Rpb24gWHgobix0KXtjb25zdCBlPW5bOV0scj1lLmlu''@;'; put 'put ''ZGV4T2YodCk7ZS5zcGxpY2UociwxKX1mdW5jdGlvbiBzOShuLHQpe2lmKHQyKHQpKXJldHVybjtjb25zdCBlPXRbMTFdO2UuZGVzdHJveU5vZGUmJlNiKG4sdCxlLDMsbnVsbCxudWxsKSxmdW5jdGlvbiBNWihuKXtsZXQgdD1uWzEyXTtpZighdClyZXR1cm4gcXgoblsxXSxuKTtmb3IoO3Q7''@;'; put 'put ''KXtsZXQgZT1udWxsO2lmKGNsKHQpKWU9dFsxMl07ZWxzZXtjb25zdCByPXRbMTBdO3ImJihlPXIpfWlmKCFlKXtmb3IoO3QmJiF0WzRdJiZ0IT09bjspY2wodCkmJnF4KHRbMV0sdCksdD10WzNdO251bGw9PT10JiYodD1uKSxjbCh0KSYmcXgodFsxXSx0KSxlPXQmJnRbNF19dD1lfX0odCl9''@;'; put 'put ''ZnVuY3Rpb24gcXgobix0KXtpZih0Mih0KSlyZXR1cm47Y29uc3QgZT1oZShudWxsKTt0cnl7dFsyXSY9LTEyOSx0WzJdfD0yNTYsdFsyNF0mJnEodFsyNF0pLGZ1bmN0aW9uIEVaKG4sdCl7bGV0IGU7aWYobnVsbCE9biYmbnVsbCE9KGU9bi5kZXN0cm95SG9va3MpKWZvcihsZXQgcj0wO3I8''@;'; put 'put ''ZS5sZW5ndGg7cis9Mil7Y29uc3QgaT10W2Vbcl1dO2lmKCEoaSBpbnN0YW5jZW9mIGI3KSl7Y29uc3QgYT1lW3IrMV07aWYoQXJyYXkuaXNBcnJheShhKSlmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrPTIpe2NvbnN0IG09aVthW2NdXSxDPWFbYysxXTt0cnl7Qy5jYWxsKG0pfWZpbmFsbHl7''@;'; put 'put ''fX1lbHNlIHRyeXthLmNhbGwoaSl9ZmluYWxseXt9fX19KG4sdCksZnVuY3Rpb24geFoobix0KXtjb25zdCBlPW4uY2xlYW51cCxyPXRbN107aWYobnVsbCE9PWUpZm9yKGxldCBjPTA7YzxlLmxlbmd0aC0xO2MrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBlW2NdKXtjb25zdCBtPWVbYyszXTtt''@;'; put 'put ''Pj0wP3JbbV0oKTpyWy1tXS51bnN1YnNjcmliZSgpLGMrPTJ9ZWxzZSBlW2NdLmNhbGwocltlW2MrMV1dKTtudWxsIT09ciYmKHRbN109bnVsbCk7Y29uc3QgaT10WzIxXTtpZihudWxsIT09aSl7dFsyMV09bnVsbDtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKykoMCxpW2NdKSgpfWNvbnN0''@;'; put 'put ''IGE9dFsyM107aWYobnVsbCE9PWEpe3RbMjNdPW51bGw7Zm9yKGNvbnN0IGMgb2YgYSljLmRlc3Ryb3koKX19KG4sdCksMT09PXRbMV0udHlwZSYmdFsxMV0uZGVzdHJveSgpO2NvbnN0IHI9dFsxNl07aWYobnVsbCE9PXImJnpjKHRbM10pKXtyIT09dFszXSYmWHgocix0KTtjb25zdCBpPXRb''@;'; put 'put ''MThdO251bGwhPT1pJiZpLmRldGFjaFZpZXcobil9ak0odCl9ZmluYWxseXtoZShlKX19ZnVuY3Rpb24gSngobix0LGUpe3JldHVybiBmdW5jdGlvbiBuTyhuLHQsZSl7bGV0IHI9dDtmb3IoO251bGwhPT1yJiYxNjgmci50eXBlOylyPSh0PXIpLnBhcmVudDtpZihudWxsPT09cilyZXR1cm4g''@;'; put 'put ''ZVswXTtpZihiZChyKSl7Y29uc3R7ZW5jYXBzdWxhdGlvbjppfT1uLmRhdGFbci5kaXJlY3RpdmVTdGFydCtyLmNvbXBvbmVudE9mZnNldF07aWYoaT09PWhoLk5vbmV8fGk9PT1oaC5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gZjEocixlKX0obix0LnBhcmVudCxlKX1mdW5jdGlvbiBy''@;'; put 'put ''TyhuLHQsZSl7cmV0dXJuIGFPKG4sdCxlKX1sZXQgYU89ZnVuY3Rpb24gaU8obix0LGUpe3JldHVybiA0MCZuLnR5cGU/ZjEobixlKTpudWxsfTtmdW5jdGlvbiBDYihuLHQsZSxyKXtjb25zdCBpPUp4KG4scix0KSxhPXRbMTFdLG09ck8oci5wYXJlbnR8fHRbNV0scix0KTtpZihudWxsIT1p''@;'; put 'put ''KWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBDPTA7QzxlLmxlbmd0aDtDKyspTEwoYSxpLGVbQ10sbSwhMSk7ZWxzZSBMTChhLGksZSxtLCExKX1mdW5jdGlvbiBVZyhuLHQpe2lmKG51bGwhPT10KXtjb25zdCBlPXQudHlwZTtpZigzJmUpcmV0dXJuIGYxKHQsbik7aWYoNCZlKXJldHVy''@;'; put 'put ''biBlRSgtMSxuW3QuaW5kZXhdKTtpZig4JmUpe2NvbnN0IHI9dC5jaGlsZDtpZihudWxsIT09cilyZXR1cm4gVWcobixyKTt7Y29uc3QgaT1uW3QuaW5kZXhdO3JldHVybiB6YyhpKT9lRSgtMSxpKTpPcyhpKX19aWYoMTI4JmUpcmV0dXJuIFVnKG4sdC5uZXh0KTtpZigzMiZlKXJldHVybiB3''@;'; put 'put ''Yih0LG4pKCl8fE9zKG5bdC5pbmRleF0pO3tjb25zdCByPXNPKG4sdCk7cmV0dXJuIG51bGwhPT1yP0FycmF5LmlzQXJyYXkocik/clswXTpVZyhTMyhuWzE1XSkscik6VWcobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBzTyhuLHQpe3JldHVybiBudWxsIT09dD9uWzE1XVs1XS5w''@;'; put 'put ''cm9qZWN0aW9uW3QucHJvamVjdGlvbl06bnVsbH1mdW5jdGlvbiBlRShuLHQpe2NvbnN0IGU9MTArbisxO2lmKGU8dC5sZW5ndGgpe2NvbnN0IHI9dFtlXSxpPXJbMV0uZmlyc3RDaGlsZDtpZihudWxsIT09aSlyZXR1cm4gVWcocixpKX1yZXR1cm4gdFs3XX1mdW5jdGlvbiB0RShuLHQsZSxy''@;'; put 'put ''LGksYSxjKXtmb3IoO251bGwhPWU7KXtpZigxMjg9PT1lLnR5cGUpe2U9ZS5uZXh0O2NvbnRpbnVlfWNvbnN0IG09cltlLmluZGV4XSxDPWUudHlwZTtpZihjJiYwPT09dCYmKG0mJlcwKE9zKG0pLHIpLGUuZmxhZ3N8PTIpLCFPMyhlKSlpZig4JkMpdEUobix0LGUuY2hpbGQscixpLGEsITEp''@;'; put 'put ''LFFtKHQsbixpLG0sYSk7ZWxzZSBpZigzMiZDKXtjb25zdCBQPXdiKGUscik7bGV0IFk7Zm9yKDtZPVAoKTspUW0odCxuLGksWSxhKTtRbSh0LG4saSxtLGEpfWVsc2UgMTYmQz9sTyhuLHQscixlLGksYSk6UW0odCxuLGksbSxhKTtlPWM/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0''@;'; put 'put ''aW9uIFNiKG4sdCxlLHIsaSxhKXt0RShlLHIsbi5maXJzdENoaWxkLHQsaSxhLCExKX1mdW5jdGlvbiBsTyhuLHQsZSxyLGksYSl7Y29uc3QgYz1lWzE1XSxDPWNbNV0ucHJvamVjdGlvbltyLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkoQykpZm9yKGxldCBQPTA7UDxDLmxlbmd0aDtQ''@;'; put 'put ''KyspUW0odCxuLGksQ1tQXSxhKTtlbHNle2xldCBQPUM7Y29uc3QgWT1jWzNdO083KHIpJiYoUC5mbGFnc3w9MTI4KSx0RShuLHQsUCxZLGksYSwhMCl9fWZ1bmN0aW9uIGU2KG4sdCxlLHIsaT0hMSl7Zm9yKDtudWxsIT09ZTspe2lmKDEyOD09PWUudHlwZSl7ZT1pP2UucHJvamVjdGlvbk5l''@;'; put 'put ''eHQ6ZS5uZXh0O2NvbnRpbnVlfWNvbnN0IGE9dFtlLmluZGV4XTtudWxsIT09YSYmci5wdXNoKE9zKGEpKSx6YyhhKSYmbkUoYSxyKTtjb25zdCBjPWUudHlwZTtpZig4JmMpZTYobix0LGUuY2hpbGQscik7ZWxzZSBpZigzMiZjKXtjb25zdCBtPXdiKGUsdCk7bGV0IEM7Zm9yKDtDPW0oKTsp''@;'; put 'put ''ci5wdXNoKEMpfWVsc2UgaWYoMTYmYyl7Y29uc3QgbT1zTyh0LGUpO2lmKEFycmF5LmlzQXJyYXkobSkpci5wdXNoKC4uLm0pO2Vsc2V7Y29uc3QgQz1TMyh0WzE1XSk7ZTYoQ1sxXSxDLG0sciwhMCl9fWU9aT9lLnByb2plY3Rpb25OZXh0OmUubmV4dH1yZXR1cm4gcn1mdW5jdGlvbiBuRShu''@;'; put 'put ''LHQpe2ZvcihsZXQgZT0xMDtlPG4ubGVuZ3RoO2UrKyl7Y29uc3Qgcj1uW2VdLGk9clsxXS5maXJzdENoaWxkO251bGwhPT1pJiZlNihyWzFdLHIsaSx0KX1uWzddIT09blswXSYmdC5wdXNoKG5bN10pfWZ1bmN0aW9uIGNPKG4pe2lmKG51bGwhPT1uWzI1XSl7Zm9yKGNvbnN0IHQgb2Ygblsy''@;'; put 'put ''NV0pdC5pbXBsLmFkZFNlcXVlbmNlKHQpO25bMjVdLmxlbmd0aD0wfX1sZXQgdU89W107Y29uc3QgTFo9ey4uLlIsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsa2luZDoidGVtcGxhdGUiLGNvbnN1bWVyTWFya2VkRGlydHk6bj0+e3ZtKG4ubFZpZXcpfSxjb25zdW1lck9uU2lnbmFsUmVhZCgp''@;'; put 'put ''e3RoaXMubFZpZXdbMjRdPXRoaXN9fSxQWj17Li4uUixjb25zdW1lcklzQWx3YXlzTGl2ZTohMCxraW5kOiJ0ZW1wbGF0ZSIsY29uc3VtZXJNYXJrZWREaXJ0eTpuPT57bGV0IHQ9UzMobi5sVmlldyk7Zm9yKDt0JiYhckUodFsxXSk7KXQ9UzModCk7dCYmcE0odCl9LGNvbnN1bWVyT25TaWdu''@;'; put 'put ''YWxSZWFkKCl7dGhpcy5sVmlld1syNF09dGhpc319O2Z1bmN0aW9uIHJFKG4pe3JldHVybiAyIT09bi50eXBlfWZ1bmN0aW9uIGlFKG4pe2lmKG51bGw9PT1uWzIzXSlyZXR1cm47bGV0IHQ9ITA7Zm9yKDt0Oyl7bGV0IGU9ITE7Zm9yKGNvbnN0IHIgb2YgblsyM10pci5kaXJ0eSYmKGU9ITAs''@;'; put 'put ''bnVsbD09PXIuem9uZXx8Wm9uZS5jdXJyZW50PT09ci56b25lP3IucnVuKCk6ci56b25lLnJ1bigoKT0+ci5ydW4oKSkpO3Q9ZSYmISEoODE5MiZuWzJdKX19ZnVuY3Rpb24gbDkobix0PSEwLGU9MCl7Y29uc3QgaT1uWzEwXS5yZW5kZXJlckZhY3Rvcnk7aS5iZWdpbj8uKCk7dHJ5eyFmdW5j''@;'; put 'put ''dGlvbiBGWihuLHQpe2NvbnN0IGU9VkkoKTt0cnl7SV8oITApLGFFKG4sdCk7bGV0IHI9MDtmb3IoO2Y3KG4pOyl7aWYoMTAwPT09cil0aHJvdyBuZXcga3IoMTAzLCExKTtyKyssYUUobiwxKX19ZmluYWxseXtJXyhlKX19KG4sZSl9Y2F0Y2goYyl7dGhyb3cgdCYmZnVuY3Rpb24gR3gobix0''@;'; put 'put ''KXtjb25zdCBlPW5bOV0scj1lP2UuZ2V0KGEyLG51bGwpOm51bGw7ciYmci5oYW5kbGVFcnJvcih0KX0obixjKSxjfWZpbmFsbHl7aS5lbmQ/LigpfX1mdW5jdGlvbiBoTyhuLHQsZSxyKXtpZih0Mih0KSlyZXR1cm47Y29uc3QgaT10WzJdO01NKHQpO2xldCBtPSEwLEM9bnVsbCxQPW51bGw7''@;'; put 'put ''ckUobik/KFA9ZnVuY3Rpb24gRFoobil7cmV0dXJuIG5bMjRdPz9mdW5jdGlvbiBJWihuKXtjb25zdCB0PXVPLnBvcCgpPz9PYmplY3QuY3JlYXRlKExaKTtyZXR1cm4gdC5sVmlldz1uLHR9KG4pfSh0KSxDPXkoUCkpOm51bGw9PT1mdW5jdGlvbiBfZSgpe3JldHVybiBLfSgpPyhtPSExLFA9''@;'; put 'put ''ZnVuY3Rpb24gT1oobil7Y29uc3QgdD1uWzI0XT8/T2JqZWN0LmNyZWF0ZShQWik7cmV0dXJuIHQubFZpZXc9bix0fSh0KSxDPXkoUCkpOnRbMjRdJiYocSh0WzI0XSksdFsyNF09bnVsbCk7dHJ5e0lJKHQpLGZ1bmN0aW9uIEJJKG4pe3JldHVybiBrby5sRnJhbWUuYmluZGluZ0luZGV4PW59''@;'; put 'put ''KG4uYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1lJiZLTChuLHQsZSwyLHIpO2NvbnN0IFk9ISgzJn5pKTtpZihZKXtjb25zdCBmZT1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZmUmJkxfKHQsZmUsbnVsbCl9ZWxzZXtjb25zdCBmZT1uLnByZU9yZGVySG9va3M7bnVsbCE9PWZlJiZP''@;'; put 'put ''Xyh0LGZlLDAsbnVsbCksXzcodCwwKX1pZihmdW5jdGlvbiBwTyhuKXtmb3IobGV0IHQ9JF8obik7bnVsbCE9PXQ7dD1aTSh0KSl7aWYoISgyJnRbMl0pKWNvbnRpbnVlO2NvbnN0IGU9dFs5XTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylwTShlW3JdKX19KHQpLGlFKHQpLGZPKHQsMCks''@;'; put 'put ''bnVsbCE9PW4uY29udGVudFF1ZXJpZXMmJnkxKG4sdCksWSl7Y29uc3QgZmU9bi5jb250ZW50Q2hlY2tIb29rcztudWxsIT09ZmUmJkxfKHQsZmUpfWVsc2V7Y29uc3QgZmU9bi5jb250ZW50SG9va3M7bnVsbCE9PWZlJiZPXyh0LGZlLDEpLF83KHQsMSl9IWZ1bmN0aW9uIHZPKG4sdCl7Y29u''@;'; put 'put ''c3QgZT1uLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09ZSl0cnl7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2NvbnN0IGk9ZVtyXTtpZihpPDApeDMofmkpO2Vsc2V7Y29uc3QgYT1pLGM9ZVsrK3JdLG09ZVsrK3JdO25VKGMsYSk7Y29uc3QgQz10W2FdO20oMixDKX19fWZpbmFs''@;'; put 'put ''bHl7eDMoLTEpfX0obix0KTtjb25zdCBKPW4uY29tcG9uZW50cztudWxsIT09SiYmbU8odCxKLDApO2NvbnN0IGNlPW4udmlld1F1ZXJ5O2lmKG51bGwhPT1jZSYmem0oMixjZSxyKSxZKXtjb25zdCBmZT1uLnZpZXdDaGVja0hvb2tzO251bGwhPT1mZSYmTF8odCxmZSl9ZWxzZXtjb25zdCBm''@;'; put 'put ''ZT1uLnZpZXdIb29rcztudWxsIT09ZmUmJk9fKHQsZmUsMiksXzcodCwyKX1pZighMD09PW4uZmlyc3RVcGRhdGVQYXNzJiYobi5maXJzdFVwZGF0ZVBhc3M9ITEpLHRbMjJdKXtmb3IoY29uc3QgZmUgb2YgdFsyMl0pZmUoKTt0WzIyXT1udWxsfWNPKHQpLHRbMl0mPS03M31jYXRjaChZKXt0''@;'; put 'put ''aHJvdyB2bSh0KSxZfWZpbmFsbHl7bnVsbCE9PVAmJihsKFAsQyksbSYmZnVuY3Rpb24gUloobil7bi5sVmlld1syNF0hPT1uJiYobi5sVmlldz1udWxsLHVPLnB1c2gobikpfShQKSkseE0oKX19ZnVuY3Rpb24gZk8obix0KXtmb3IobGV0IGU9JF8obik7bnVsbCE9PWU7ZT1aTShlKSlmb3Io''@;'; put 'put ''bGV0IHI9MTA7cjxlLmxlbmd0aDtyKyspZ08oZVtyXSx0KX1mdW5jdGlvbiBIWihuLHQsZSl7Y29uc3Qgcj1wMSh0LG4pO2dPKHIsZSl9ZnVuY3Rpb24gZ08obix0KXtmTShuKSYmYUUobix0KX1mdW5jdGlvbiBhRShuLHQpe2NvbnN0IHI9blsxXSxpPW5bMl0sYT1uWzI0XTtsZXQgYz0hISgw''@;'; put 'put ''PT09dCYmMTYmaSk7aWYoY3x8PSEhKDY0JmkmJjA9PT10KSxjfHw9ISEoMTAyNCZpKSxjfHw9ISghYT8uZGlydHl8fCFiKGEpKSxjfHw9ITEsYSYmKGEuZGlydHk9ITEpLG5bMl0mPS05MjE3LGMpaE8ocixuLHIudGVtcGxhdGUsbls4XSk7ZWxzZSBpZig4MTkyJmkpe2lFKG4pLGZPKG4sMSk7''@;'; put 'put ''Y29uc3QgbT1yLmNvbXBvbmVudHM7bnVsbCE9PW0mJm1PKG4sbSwxKSxjTyhuKX19ZnVuY3Rpb24gbU8obix0LGUpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKUhaKG4sdFtyXSxlKX1mdW5jdGlvbiBjOShuLHQpe2NvbnN0IGU9VkkoKT82NDoxMDg4O2ZvcihuWzEwXS5jaGFuZ2VEZXRl''@;'; put 'put ''Y3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSh0KTtuOyl7blsyXXw9ZTtjb25zdCByPVMzKG4pO2lmKFYxKG4pJiYhcilyZXR1cm4gbjtuPXJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTWIobix0LGUscil7cmV0dXJuW24sITAsMCx0LG51bGwscixudWxsLGUsbnVsbCxudWxsXX1mdW5jdGlvbiBacChu''@;'; put 'put ''LHQsZSxyPSEwKXtjb25zdCBpPXRbMV07aWYoZnVuY3Rpb24gTloobix0LGUscil7Y29uc3QgaT0xMCtyLGE9ZS5sZW5ndGg7cj4wJiYoZVtpLTFdWzRdPXQpLHI8YS0xMD8odFs0XT1lW2ldLGltKGUsMTArcix0KSk6KGUucHVzaCh0KSx0WzRdPW51bGwpLHRbM109ZTtjb25zdCBjPXRbMTZd''@;'; put 'put ''O251bGwhPT1jJiZlIT09YyYmeU8oYyx0KTtjb25zdCBtPXRbMThdO251bGwhPT1tJiZtLmluc2VydFZpZXcobiksZ00odCksdFsyXXw9MTI4fShpLHQsbixlKSxyKXtjb25zdCBjPWVFKGUsbiksbT10WzExXSxDPW0ucGFyZW50Tm9kZShuWzddKTtudWxsIT09QyYmZnVuY3Rpb24gU1oobix0''@;'; put 'put ''LGUscixpLGEpe3JbMF09aSxyWzVdPXQsU2IobixyLGUsMSxpLGEpfShpLG5bNV0sbSx0LEMsYyl9Y29uc3QgYT10WzZdO251bGwhPT1hJiZudWxsIT09YS5maXJzdENoaWxkJiYoYS5maXJzdENoaWxkPW51bGwpfWZ1bmN0aW9uIGQ5KG4sdCl7aWYobi5sZW5ndGg8PTEwKXJldHVybjtjb25z''@;'; put 'put ''dCBlPTEwK3Qscj1uW2VdO2lmKHIpe2NvbnN0IGk9clsxNl07bnVsbCE9PWkmJmkhPT1uJiZYeChpLHIpLHQ+MCYmKG5bZS0xXVs0XT1yWzRdKTtjb25zdCBhPXdnKG4sMTArdCk7IWZ1bmN0aW9uIGVPKG4sdCl7dE8obix0KSx0WzBdPW51bGwsdFs1XT1udWxsfShyWzFdLHIpO2NvbnN0IGM9''@;'; put 'put ''YVsxOF07bnVsbCE9PWMmJmMuZGV0YWNoVmlldyhhWzFdKSxyWzNdPW51bGwscls0XT1udWxsLHJbMl0mPS0xMjl9cmV0dXJuIHJ9ZnVuY3Rpb24geU8obix0KXtjb25zdCBlPW5bOV0scj10WzNdOyhjbChyKXx8dFsxNV0hPT1yWzNdWzE1XSkmJihuWzJdfD0yKSxudWxsPT09ZT9uWzldPVt0''@;'; put 'put ''XTplLnB1c2godCl9bGV0IG42PWNsYXNze19sVmlldztfY2RSZWZJbmplY3RpbmdWaWV3O25vdGlmeUVycm9ySGFuZGxlcjtfYXBwUmVmPW51bGw7X2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExO2dldCByb290Tm9kZXMoKXtjb25zdCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gZTYo''@;'; put 'put ''ZSx0LGUuZmlyc3RDaGlsZCxbXSl9Y29uc3RydWN0b3IodCxlLHI9ITApe3RoaXMuX2xWaWV3PXQsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWUsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXI9cn1nZXQgY29udGV4dCgpe3JldHVybiB0aGlzLl9sVmlld1s4XX1zZXQgY29udGV4dCh0KXt0aGlz''@;'; put 'put ''Ll9sVmlld1s4XT10fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdDIodGhpcy5fbFZpZXcpfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7Y29uc3QgdD10aGlzLl9sVmll''@;'; put 'put ''d1szXTtpZih6Yyh0KSl7Y29uc3QgZT10WzhdLHI9ZT9lLmluZGV4T2YodGhpcyk6LTE7cj4tMSYmKGQ5KHQsciksd2coZSxyKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9czkodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveSh0KXtwNyh0aGlzLl9sVmll''@;'; put 'put ''dyx0KX1tYXJrRm9yQ2hlY2soKXtjOSh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXd8fHRoaXMuX2xWaWV3LDQpfWRldGFjaCgpe3RoaXMuX2xWaWV3WzJdJj0tMTI5fXJlYXR0YWNoKCl7Z00odGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3WzJdfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3RoaXMuX2xW''@;'; put 'put ''aWV3WzJdfD0xMDI0LGw5KHRoaXMuX2xWaWV3LHRoaXMubm90aWZ5RXJyb3JIYW5kbGVyKX1jaGVja05vQ2hhbmdlcygpe31hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IGtyKDkwMiwhMSk7dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9''@;'; put 'put ''ITB9ZGV0YWNoRnJvbUFwcFJlZigpe3RoaXMuX2FwcFJlZj1udWxsO2NvbnN0IHQ9VjEodGhpcy5fbFZpZXcpLGU9dGhpcy5fbFZpZXdbMTZdO251bGwhPT1lJiYhdCYmWHgoZSx0aGlzLl9sVmlldyksdE8odGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKHQpe2lm''@;'; put 'put ''KHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBrcig5MDIsITEpO3RoaXMuX2FwcFJlZj10O2NvbnN0IGU9VjEodGhpcy5fbFZpZXcpLHI9dGhpcy5fbFZpZXdbMTZdO251bGwhPT1yJiYhZSYmeU8ocix0aGlzLl9sVmlldyksZ00odGhpcy5fbFZpZXcpfX0sQWw9KCgp''@;'; put 'put ''PT5jbGFzcyBue3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1qWn0pKCk7Y29uc3QgVlo9QWwsQlo9Y2xhc3MgZXh0ZW5kcyBWWntfZGVjbGFyYXRpb25MVmlldztfZGVjbGFyYXRpb25UQ29udGFpbmVyO2VsZW1lbnRSZWY7Y29uc3RydWN0b3IodCxlLHIpe3N1cGVyKCksdGhpcy5fZGVjbGFy''@;'; put 'put ''YXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1yfWdldCBzc3JJZCgpe3JldHVybiB0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIudFZpZXc/LnNzcklkfHxudWxsfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe3JldHVybiB0aGlzLmNy''@;'; put 'put ''ZWF0ZUVtYmVkZGVkVmlld0ltcGwodCxlKX1jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKHQsZSxyKXtjb25zdCBpPUptKHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLHQse2VtYmVkZGVkVmlld0luamVjdG9yOmUsZGVoeWRyYXRlZFZpZXc6cn0pO3Jl''@;'; put 'put ''dHVybiBuZXcgbjYoaSl9fTtmdW5jdGlvbiBqWigpe3JldHVybiB4YihRbygpLFVyKCkpfWZ1bmN0aW9uIHhiKG4sdCl7cmV0dXJuIDQmbi50eXBlP25ldyBCWih0LG4sQnAobix0KSk6bnVsbH1mdW5jdGlvbiBhNihuLHQsZSxyLGkpe2xldCBhPW4uZGF0YVt0XTtpZihudWxsPT09YSlhPWZ1''@;'; put 'put ''bmN0aW9uIGxFKG4sdCxlLHIsaSl7Y29uc3QgYT1GSSgpLGM9X00oKSxDPW4uZGF0YVt0XT1mdW5jdGlvbiBLWihuLHQsZSxyLGksYSl7bGV0IGM9dD90LmluamVjdG9ySW5kZXg6LTEsbT0wO3JldHVybiBSZygpJiYobXw9MTI4KSx7dHlwZTplLGluZGV4OnIsaW5zZXJ0QmVmb3JlSW5kZXg6''@;'; put 'put ''bnVsbCxpbmplY3RvckluZGV4OmMsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLGNvbXBvbmVudE9mZnNldDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6bSxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTppLGF0dHJzOmEsbWVy''@;'; put 'put ''Z2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czpudWxsLGlucHV0czpudWxsLGhvc3REaXJlY3RpdmVJbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsaG9zdERpcmVjdGl2ZU91dHB1dHM6bnVsbCxkaXJlY3RpdmVUb0luZGV4Om51bGwsdFZpZXc6bnVsbCxuZXh0Om51''@;'; put 'put ''bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJl''@;'; put 'put ''c2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsYz9hOmEmJmEucGFyZW50LGUsdCxyLGkpO3JldHVybiBmdW5jdGlvbiAkWihuLHQsZSxyKXtudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPXQpLG51bGwhPT1lJiYocj9udWxs''@;'; put 'put ''PT1lLmNoaWxkJiZudWxsIT09dC5wYXJlbnQmJihlLmNoaWxkPXQpOm51bGw9PT1lLm5leHQmJihlLm5leHQ9dCx0LnByZXY9ZSkpfShuLEMsYSxjKSxDfShuLHQsZSxyLGkpLGZ1bmN0aW9uIHRVKCl7cmV0dXJuIGtvLmxGcmFtZS5pbkkxOG59KCkmJihhLmZsYWdzfD0zMik7ZWxzZSBpZig2''@;'; put 'put ''NCZhLnR5cGUpe2EudHlwZT1lLGEudmFsdWU9cixhLmF0dHJzPWk7Y29uc3QgYz1mdW5jdGlvbiBnNygpe2NvbnN0IG49a28ubEZyYW1lLHQ9bi5jdXJyZW50VE5vZGU7cmV0dXJuIG4uaXNQYXJlbnQ/dDp0LnBhcmVudH0oKTthLmluamVjdG9ySW5kZXg9bnVsbD09PWM/LTE6Yy5pbmplY3Rv''@;'; put 'put ''ckluZGV4fXJldHVybiByMihhLCEwKSxhfWxldCBWTz1jbGFzc3t9LEJPPWNsYXNze307Y2xhc3MgZ1l7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCl7dGhyb3cgRXJyb3IoYE5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAke3FuKHQpfS5gKX19bGV0IF8xPWNsYXNze3N0YXRpYyBO''@;'; put 'put ''VUxMPW5ldyBnWX07Y2xhc3MgSDN7fWxldCBUbz0oKCk9PmNsYXNzIG57ZGVzdHJveU5vZGU9bnVsbDtzdGF0aWMgX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIFBiKCl7Y29uc3Qgbj1VcigpLGU9cDEoUW8oKS5pbmRleCxuKTtyZXR1cm4oY2woZSk/ZTpuKVsxMV19KCl9KSgpLGpP''@;'; put 'put ''PSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfXJldHVybiBufSkoKTtjb25zdCBJdT17fTtjbGFzcyBjNntpbmplY3RvcjtwYXJlbnRJbmplY3Rvcjtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaW5q''@;'; put 'put ''ZWN0b3I9dCx0aGlzLnBhcmVudEluamVjdG9yPWV9Z2V0KHQsZSxyKXtyPW1sKHIpO2NvbnN0IGk9dGhpcy5pbmplY3Rvci5nZXQodCxJdSxyKTtyZXR1cm4gaSE9PUl1fHxlPT09SXU/aTp0aGlzLnBhcmVudEluamVjdG9yLmdldCh0LGUscil9fWZ1bmN0aW9uIFNFKG4sdCxlKXtsZXQgcj1l''@;'; put 'put ''P24uc3R5bGVzOm51bGwsaT1lP24uY2xhc3NlczpudWxsLGE9MDtpZihudWxsIT09dClmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKyl7Y29uc3QgbT10W2NdOyJudW1iZXIiPT10eXBlb2YgbT9hPW06MT09YT9pPWdpKGksbSk6Mj09YSYmKHI9Z2kocixtKyI6ICIrdFsrK2NdKyI7IikpfWU/''@;'; put 'put ''bi5zdHlsZXM9cjpuLnN0eWxlc1dpdGhvdXRIb3N0PXIsZT9uLmNsYXNzZXM9aTpuLmNsYXNzZXNXaXRob3V0SG9zdD1pfWZ1bmN0aW9uIFdlKG4sdD1Nby5EZWZhdWx0KXtjb25zdCBlPVVyKCk7cmV0dXJuIG51bGw9PT1lP09yKG4sdCk6aTIoUW8oKSxlLHZhKG4pLHQpfWZ1bmN0aW9uIE5i''@;'; put 'put ''KG4sdCxlLHIsaSl7Y29uc3QgYT1udWxsPT09cj9udWxsOnsiIjotMX0sYz1pKG4sZSk7aWYobnVsbCE9PWMpe2xldCBtLEM9bnVsbCxQPW51bGw7Y29uc3QgWT1mdW5jdGlvbiB4KG4pe2xldCB0PW51bGwsZT0hMTtmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKyl7Y29uc3QgbT1uW2NdO2lm''@;'; put 'put ''KDA9PT1jJiZoMShtKSYmKHQ9bSksbnVsbCE9PW0uZmluZEhvc3REaXJlY3RpdmVEZWZzKXtlPSEwO2JyZWFrfX1pZighZSlyZXR1cm4gbnVsbDtsZXQgcj1udWxsLGk9bnVsbCxhPW51bGw7Zm9yKGNvbnN0IGMgb2YgbiludWxsIT09Yy5maW5kSG9zdERpcmVjdGl2ZURlZnMmJihyPz89W10s''@;'; put 'put ''aT8/PW5ldyBNYXAsYT8/PW5ldyBNYXAsdyhjLHIsYSxpKSksYz09PXQmJihyPz89W10sci5wdXNoKGMpKTtyZXR1cm4gbnVsbCE9PXI/KHIucHVzaCguLi5udWxsPT09dD9uOm4uc2xpY2UoMSkpLFtyLGksYV0pOm51bGx9KGMpO251bGw9PT1ZP209YzpbbSxDLFBdPVksZnVuY3Rpb24gVyhu''@;'; put 'put ''LHQsZSxyLGksYSxjKXtjb25zdCBtPXIubGVuZ3RoO2xldCBDPSExO2ZvcihsZXQgY2U9MDtjZTxtO2NlKyspe2NvbnN0IGZlPXJbY2VdOyFDJiZoMShmZSkmJihDPSEwLFYobixlLGNlKSksTE0oQzcoZSx0KSxuLGZlLnR5cGUpfSFmdW5jdGlvbiBidChuLHQsZSl7bi5mbGFnc3w9MSxuLmRp''@;'; put 'put ''cmVjdGl2ZVN0YXJ0PXQsbi5kaXJlY3RpdmVFbmQ9dCtlLG4ucHJvdmlkZXJJbmRleGVzPXR9KGUsbi5kYXRhLmxlbmd0aCxtKTtmb3IobGV0IGNlPTA7Y2U8bTtjZSsrKXtjb25zdCBmZT1yW2NlXTtmZS5wcm92aWRlcnNSZXNvbHZlciYmZmUucHJvdmlkZXJzUmVzb2x2ZXIoZmUpfWxldCBQ''@;'; put 'put ''PSExLFk9ITEsSj1vOShuLHQsbSxudWxsKTttPjAmJihlLmRpcmVjdGl2ZVRvSW5kZXg9bmV3IE1hcCk7Zm9yKGxldCBjZT0wO2NlPG07Y2UrKyl7Y29uc3QgZmU9cltjZV07aWYoZS5tZXJnZWRBdHRycz1fbShlLm1lcmdlZEF0dHJzLGZlLmhvc3RBdHRycyksUmUobixlLHQsSixmZSksZXQo''@;'; put 'put ''SixmZSxpKSxudWxsIT09YyYmYy5oYXMoZmUpKXtjb25zdFtIZSxYZV09Yy5nZXQoZmUpO2UuZGlyZWN0aXZlVG9JbmRleC5zZXQoZmUudHlwZSxbSixIZStlLmRpcmVjdGl2ZVN0YXJ0LFhlK2UuZGlyZWN0aXZlU3RhcnRdKX1lbHNlKG51bGw9PT1hfHwhYS5oYXMoZmUpKSYmZS5kaXJlY3Rp''@;'; put 'put ''dmVUb0luZGV4LnNldChmZS50eXBlLEopO251bGwhPT1mZS5jb250ZW50UXVlcmllcyYmKGUuZmxhZ3N8PTQpLChudWxsIT09ZmUuaG9zdEJpbmRpbmdzfHxudWxsIT09ZmUuaG9zdEF0dHJzfHwwIT09ZmUuaG9zdFZhcnMpJiYoZS5mbGFnc3w9NjQpO2NvbnN0IEFlPWZlLnR5cGUucHJvdG90''@;'; put 'put ''eXBlOyFQJiYoQWUubmdPbkNoYW5nZXN8fEFlLm5nT25Jbml0fHxBZS5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGUuaW5kZXgpLFA9ITApLCFZJiYoQWUubmdPbkNoYW5nZXN8fEFlLm5nRG9DaGVjaykmJigobi5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVz''@;'; put 'put ''aChlLmluZGV4KSxZPSEwKSxKKyt9IWZ1bmN0aW9uIGVlKG4sdCxlKXtmb3IobGV0IHI9dC5kaXJlY3RpdmVTdGFydDtyPHQuZGlyZWN0aXZlRW5kO3IrKyl7Y29uc3QgaT1uLmRhdGFbcl07aWYobnVsbCE9PWUmJmUuaGFzKGkpKXtjb25zdCBhPWUuZ2V0KGkpO29lKDAsdCxhLHIpLG9lKDEs''@;'; put 'put ''dCxhLHIpLERlKHQsciwhMCl9ZWxzZSBsZSgwLHQsaSxyKSxsZSgxLHQsaSxyKSxEZSh0LHIsITEpfX0obixlLGEpfShuLHQsZSxtLGEsQyxQKX1udWxsIT09YSYmbnVsbCE9PXImJmZ1bmN0aW9uIGcobix0LGUpe2NvbnN0IHI9bi5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgaT0wO2k8dC5sZW5n''@;'; put 'put ''dGg7aSs9Mil7Y29uc3QgYT1lW3RbaSsxXV07aWYobnVsbD09YSl0aHJvdyBuZXcga3IoLTMwMSwhMSk7ci5wdXNoKHRbaV0sYSl9fShlLHIsYSl9ZnVuY3Rpb24gdyhuLHQsZSxyKXtjb25zdCBpPXQubGVuZ3RoO24uZmluZEhvc3REaXJlY3RpdmVEZWZzKG4sdCxyKSxlLnNldChuLFtpLHQu''@;'; put 'put ''bGVuZ3RoLTFdKX1mdW5jdGlvbiBWKG4sdCxlKXt0LmNvbXBvbmVudE9mZnNldD1lLChuLmNvbXBvbmVudHM/Pz1bXSkucHVzaCh0LmluZGV4KX1mdW5jdGlvbiBsZShuLHQsZSxyKXtjb25zdCBpPTA9PT1uP2UuaW5wdXRzOmUub3V0cHV0cztmb3IoY29uc3QgYSBpbiBpKWlmKGkuaGFzT3du''@;'; put 'put ''UHJvcGVydHkoYSkpe2xldCBjO2M9MD09PW4/dC5pbnB1dHM/Pz17fTp0Lm91dHB1dHM/Pz17fSxjW2FdPz89W10sY1thXS5wdXNoKHIpLGRlKHQsYSl9fWZ1bmN0aW9uIG9lKG4sdCxlLHIpe2NvbnN0IGk9MD09PW4/ZS5pbnB1dHM6ZS5vdXRwdXRzO2Zvcihjb25zdCBhIGluIGkpaWYoaS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eShhKSl7Y29uc3QgYz1pW2FdO2xldCBtO209MD09PW4/dC5ob3N0RGlyZWN0aXZlSW5wdXRzPz89e306dC5ob3N0RGlyZWN0aXZlT3V0cHV0cz8/PXt9LG1bY10/Pz1bXSxtW2NdLnB1c2gocixhKSxkZSh0LGMpfX1mdW5jdGlvbiBkZShuLHQpeyJjbGFzcyI9PT10P24u''@;'; put 'put ''ZmxhZ3N8PTg6InN0eWxlIj09PXQmJihuLmZsYWdzfD0xNil9ZnVuY3Rpb24gRGUobix0LGUpe2NvbnN0e2F0dHJzOnIsaW5wdXRzOmksaG9zdERpcmVjdGl2ZUlucHV0czphfT1uO2lmKG51bGw9PT1yfHwhZSYmbnVsbD09PWl8fGUmJm51bGw9PT1hfHxWeChuKSlyZXR1cm4gbi5pbml0aWFs''@;'; put 'put ''SW5wdXRzPz89W10sdm9pZCBuLmluaXRpYWxJbnB1dHMucHVzaChudWxsKTtsZXQgYz1udWxsLG09MDtmb3IoO208ci5sZW5ndGg7KXtjb25zdCBDPXJbbV07aWYoMCE9PUMpaWYoNSE9PUMpe2lmKCJudW1iZXIiPT10eXBlb2YgQylicmVhaztpZighZSYmaS5oYXNPd25Qcm9wZXJ0eShDKSl7''@;'; put 'put ''Y29uc3QgUD1pW0NdO2Zvcihjb25zdCBZIG9mIFApaWYoWT09PXQpe2M/Pz1bXSxjLnB1c2goQyxyW20rMV0pO2JyZWFrfX1lbHNlIGlmKGUmJmEuaGFzT3duUHJvcGVydHkoQykpe2NvbnN0IFA9YVtDXTtmb3IobGV0IFk9MDtZPFAubGVuZ3RoO1krPTIpaWYoUFtZXT09PXQpe2M/Pz1bXSxj''@;'; put 'put ''LnB1c2goUFtZKzFdLHJbbSsxXSk7YnJlYWt9fW0rPTJ9ZWxzZSBtKz0yO2Vsc2UgbSs9NH1uLmluaXRpYWxJbnB1dHM/Pz1bXSxuLmluaXRpYWxJbnB1dHMucHVzaChjKX1mdW5jdGlvbiBSZShuLHQsZSxyLGkpe24uZGF0YVtyXT1pO2NvbnN0IGE9aS5mYWN0b3J5fHwoaS5mYWN0b3J5PWYz''@;'; put 'put ''KGkudHlwZSkpLGM9bmV3IGI3KGEsaDEoaSksV2UpO24uYmx1ZXByaW50W3JdPWMsZVtyXT1jLGZ1bmN0aW9uIFZlKG4sdCxlLHIsaSl7Y29uc3QgYT1pLmhvc3RCaW5kaW5ncztpZihhKXtsZXQgYz1uLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09YyYmKGM9bi5ob3N0QmluZGluZ09wQ29k''@;'; put 'put ''ZXM9W10pO2NvbnN0IG09fnQuaW5kZXg7KGZ1bmN0aW9uIEdlKG4pe2xldCB0PW4ubGVuZ3RoO2Zvcig7dD4wOyl7Y29uc3QgZT1uWy0tdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiZlPDApcmV0dXJuIGV9cmV0dXJuIDB9KShjKSE9bSYmYy5wdXNoKG0pLGMucHVzaChlLHIsYSl9fShuLHQs''@;'; put 'put ''cixvOShuLGUsaS5ob3N0VmFycyxPbyksaSl9ZnVuY3Rpb24gZXQobix0LGUpe2lmKGUpe2lmKHQuZXhwb3J0QXMpZm9yKGxldCByPTA7cjx0LmV4cG9ydEFzLmxlbmd0aDtyKyspZVt0LmV4cG9ydEFzW3JdXT1uO2gxKHQpJiYoZVsiIl09bil9fWZ1bmN0aW9uIGZ0KG4sdCxlLHIsaSxhLGMs''@;'; put 'put ''bSl7Y29uc3QgQz10LmNvbnN0cyxZPWE2KHQsbiwyLHIsQ2QoQyxjKSk7cmV0dXJuIGEmJk5iKHQsZSxZLENkKEMsbSksaSksWS5tZXJnZWRBdHRycz1fbShZLm1lcmdlZEF0dHJzLFkuYXR0cnMpLG51bGwhPT1ZLmF0dHJzJiZTRShZLFkuYXR0cnMsITEpLG51bGwhPT1ZLm1lcmdlZEF0dHJz''@;'; put 'put ''JiZTRShZLFkubWVyZ2VkQXR0cnMsITApLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxZKSxZfWZ1bmN0aW9uIFJ0KG4sdCl7VE0obix0KSxoNyh0KSYmbi5xdWVyaWVzLmVsZW1lbnRFbmQodCl9Y2xhc3MgU3QgZXh0ZW5kcyBfMXtuZ01vZHVsZTtjb25zdHJ1''@;'; put 'put ''Y3Rvcih0KXtzdXBlcigpLHRoaXMubmdNb2R1bGU9dH1yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXtjb25zdCBlPUpvKHQpO3JldHVybiBuZXcgR24oZSx0aGlzLm5nTW9kdWxlKX19Y2xhc3MgR24gZXh0ZW5kcyBCT3tjb21wb25lbnREZWY7bmdNb2R1bGU7c2VsZWN0b3I7Y29tcG9uZW50''@;'; put 'put ''VHlwZTtuZ0NvbnRlbnRTZWxlY3RvcnM7aXNCb3VuZFRvTW9kdWxlO2NhY2hlZElucHV0cz1udWxsO2NhY2hlZE91dHB1dHM9bnVsbDtnZXQgaW5wdXRzKCl7cmV0dXJuIHRoaXMuY2FjaGVkSW5wdXRzPz89ZnVuY3Rpb24gQXQobil7cmV0dXJuIE9iamVjdC5rZXlzKG4pLm1hcCh0PT57Y29u''@;'; put 'put ''c3RbZSxyLGldPW5bdF0sYT17cHJvcE5hbWU6ZSx0ZW1wbGF0ZU5hbWU6dCxpc1NpZ25hbDohIShyJnZiLlNpZ25hbEJhc2VkKX07cmV0dXJuIGkmJihhLnRyYW5zZm9ybT1pKSxhfSl9KHRoaXMuY29tcG9uZW50RGVmLmlucHV0cyksdGhpcy5jYWNoZWRJbnB1dHN9Z2V0IG91dHB1dHMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jYWNoZWRPdXRwdXRzPz89ZnVuY3Rpb24genQobil7cmV0dXJuIE9iamVjdC5rZXlzKG4pLm1hcCh0PT4oe3Byb3BOYW1lOm5bdF0sdGVtcGxhdGVOYW1lOnR9KSl9KHRoaXMuY29tcG9uZW50RGVmLm91dHB1dHMpLHRoaXMuY2FjaGVkT3V0cHV0c31jb25zdHJ1Y3Rvcih0''@;'; put 'put ''LGUpe3N1cGVyKCksdGhpcy5jb21wb25lbnREZWY9dCx0aGlzLm5nTW9kdWxlPWUsdGhpcy5jb21wb25lbnRUeXBlPXQudHlwZSx0aGlzLnNlbGVjdG9yPWZ1bmN0aW9uIGNaKG4pe3JldHVybiBuLm1hcChsWikuam9pbigiLCIpfSh0LnNlbGVjdG9ycyksdGhpcy5uZ0NvbnRlbnRTZWxlY3Rv''@;'; put 'put ''cnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/P1tdLHRoaXMuaXNCb3VuZFRvTW9kdWxlPSEhZX1jcmVhdGUodCxlLHIsaSl7Y29uc3QgYT1oZShudWxsKTt0cnl7Y29uc3QgYz10aGlzLmNvbXBvbmVudERlZixtPXI/WyJuZy12ZXJzaW9uIiwiMTkuMi4yMSJdOmZ1bmN0aW9uIHVaKG4pe2NvbnN0''@;'; put 'put ''IHQ9W10sZT1bXTtsZXQgcj0xLGk9Mjtmb3IoO3I8bi5sZW5ndGg7KXtsZXQgYT1uW3JdO2lmKCJzdHJpbmciPT10eXBlb2YgYSkyPT09aT8iIiE9PWEmJnQucHVzaChhLG5bKytyXSk6OD09PWkmJmUucHVzaChhKTtlbHNle2lmKCFzMihpKSlicmVhaztpPWF9cisrfXJldHVybiBlLmxlbmd0''@;'; put 'put ''aCYmdC5wdXNoKDEsLi4uZSksdH0odGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdKSxDPWE5KDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLFttXSxudWxsKSxQPWZ1bmN0aW9uIGxyKG4sdCxlKXtsZXQgcj10IGluc3RhbmNlb2YgdWM/dDp0Py5pbmplY3RvcjtyZXR1''@;'; put 'put ''cm4gciYmbnVsbCE9PW4uZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYocj1uLmdldFN0YW5kYWxvbmVJbmplY3RvcihyKXx8cikscj9uZXcgYzYoZSxyKTplfShjLGl8fHRoaXMubmdNb2R1bGUsdCksWT1mdW5jdGlvbiBtbihuKXtjb25zdCB0PW4uZ2V0KEgzLG51bGwpO2lmKG51bGw9PT10KXRo''@;'; put 'put ''cm93IG5ldyBrcig0MDcsITEpO3JldHVybntyZW5kZXJlckZhY3Rvcnk6dCxzYW5pdGl6ZXI6bi5nZXQoak8sbnVsbCksY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyOm4uZ2V0KHVoLG51bGwpfX0oUCksSj1ZLnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLGMpLGNlPXI/ZnVu''@;'; put 'put ''Y3Rpb24gaFoobix0LGUscil7Y29uc3QgYT1yLmdldChIUiwhMSl8fGU9PT1oaC5TaGFkb3dEb20sYz1uLnNlbGVjdFJvb3RFbGVtZW50KHQsYSk7cmV0dXJuIGZ1bmN0aW9uIHBzZShuKXtYTChuKX0oYyksY30oSixyLGMuZW5jYXBzdWxhdGlvbixQKTpmdW5jdGlvbiBkcihuLHQpe2NvbnN0''@;'; put 'put ''IGU9KG4uc2VsZWN0b3JzWzBdWzBdfHwiZGl2IikudG9Mb3dlckNhc2UoKTtyZXR1cm4gcGIodCxlLCJzdmciPT09ZT8ic3ZnIjoibWF0aCI9PT1lPyJtYXRoIjpudWxsKX0oYyxKKSxmZT1tYihudWxsLEMsbnVsbCw1MTJ8angoYyksbnVsbCxudWxsLFksSixQLG51bGwsbnVsbCk7ZmVbMjZd''@;'; put 'put ''PWNlLE1NKGZlKTtsZXQgQWU9bnVsbDt0cnl7Y29uc3QgSGU9ZnQoMjYsQyxmZSwiI2hvc3QiLCgpPT5bdGhpcy5jb21wb25lbnREZWZdLCEwLDApO2NlJiYoUEwoSixjZSxIZSksVzAoY2UsZmUpKSx5YihDLGZlLEhlKSxFeChDLEhlLGZlKSxSdChDLEhlKSx2b2lkIDAhPT1lJiZmdW5jdGlv''@;'; put 'put ''biBocihuLHQsZSl7Y29uc3Qgcj1uLnByb2plY3Rpb249W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2NvbnN0IGE9ZVtpXTtyLnB1c2gobnVsbCE9YSYmYS5sZW5ndGg/QXJyYXkuZnJvbShhKTpudWxsKX19KEhlLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGUpLEFlPXAxKEhlLmlu''@;'; put 'put ''ZGV4LGZlKSxmZVs4XT1BZVs4XSxfYihDLGZlLG51bGwpfWNhdGNoKEhlKXt0aHJvdyBudWxsIT09QWUmJmpNKEFlKSxqTShmZSksSGV9ZmluYWxseXt4TSgpfXJldHVybiBuZXcgSG4odGhpcy5jb21wb25lbnRUeXBlLGZlKX1maW5hbGx5e2hlKGEpfX19Y2xhc3MgSG4gZXh0ZW5kcyBWT3tf''@;'; put 'put ''cm9vdExWaWV3O2luc3RhbmNlO2hvc3RWaWV3O2NoYW5nZURldGVjdG9yUmVmO2NvbXBvbmVudFR5cGU7bG9jYXRpb247cHJldmlvdXNJbnB1dFZhbHVlcz1udWxsO190Tm9kZTtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcm9vdExWaWV3PWUsdGhpcy5fdE5vZGU9RGcoZVsxXSwy''@;'; put 'put ''NiksdGhpcy5sb2NhdGlvbj1CcCh0aGlzLl90Tm9kZSxlKSx0aGlzLmluc3RhbmNlPXAxKHRoaXMuX3ROb2RlLmluZGV4LGUpWzhdLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgbjYoZSx2b2lkIDAsITEpLHRoaXMuY29tcG9uZW50VHlwZT10fXNldElucHV0KHQs''@;'; put 'put ''ZSl7Y29uc3Qgcj10aGlzLl90Tm9kZTtpZih0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM/Pz1uZXcgTWFwLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5oYXModCkmJk9iamVjdC5pcyh0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuZ2V0KHQpLGUpKXJldHVybjtjb25zdCBpPXRoaXMuX3Jvb3RM''@;'; put 'put ''VmlldzskeChyLGlbMV0saSx0LGUpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQodCxlKSxjOShwMShyLmluZGV4LGkpLDEpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgS2wodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95''@;'; put 'put ''KCl9b25EZXN0cm95KHQpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KHQpfX1sZXQgTm49KCgpPT5jbGFzcyBue3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz10cn0pKCk7ZnVuY3Rpb24gdHIoKXtyZXR1cm4gSWkoUW8oKSxVcigpKX1jb25zdCB2aT1ObixQaT1jbGFzcyBleHRlbmRzIHZpe19s''@;'; put 'put ''Q29udGFpbmVyO19ob3N0VE5vZGU7X2hvc3RMVmlldztjb25zdHJ1Y3Rvcih0LGUscil7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPXQsdGhpcy5faG9zdFROb2RlPWUsdGhpcy5faG9zdExWaWV3PXJ9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gQnAodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RM''@;'; put 'put ''Vmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBLbCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCB0PUhfKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpO2lmKERNKHQpKXtjb25zdCBlPWJtKHQsdGhpcy5faG9z''@;'; put 'put ''dExWaWV3KSxyPXc3KHQpO3JldHVybiBuZXcgS2woZVsxXS5kYXRhW3IrOF0sZSl9cmV0dXJuIG5ldyBLbChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtjb25zdCBlPXFpKHRoaXMuX2xD''@;'; put 'put ''b250YWluZXIpO3JldHVybiBudWxsIT09ZSYmZVt0XXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLTEwfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUscil7bGV0IGksYTsibnVtYmVyIj09dHlwZW9mIHI/aT1yOm51bGwhPXImJihpPXIuaW5kZXgsYT1y''@;'; put 'put ''LmluamVjdG9yKTtjb25zdCBtPXQuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChlfHx7fSxhLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwobSxpLFVwKHRoaXMuX2hvc3RUTm9kZSxudWxsKSksbX1jcmVhdGVDb21wb25lbnQodCxlLHIsaSxhKXtjb25zdCBjPXQmJiFmdW5jdGlvbiB4Zyhu''@;'; put 'put ''KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn0odCk7bGV0IG07aWYoYyltPWU7ZWxzZXtjb25zdCBBZT1lfHx7fTttPUFlLmluZGV4LHI9QWUuaW5qZWN0b3IsaT1BZS5wcm9qZWN0YWJsZU5vZGVzLGE9QWUuZW52aXJvbm1lbnRJbmplY3Rvcnx8QWUubmdNb2R1bGVSZWZ9Y29uc3QgQz1j''@;'; put 'put ''P3Q6bmV3IEduKEpvKHQpKSxQPXJ8fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIWEmJm51bGw9PUMubmdNb2R1bGUpe2NvbnN0IEhlPShjP1A6dGhpcy5wYXJlbnRJbmplY3RvcikuZ2V0KHVjLG51bGwpO0hlJiYoYT1IZSl9Sm8oQy5jb21wb25lbnRUeXBlPz97fSk7Y29uc3QgZmU9Qy5jcmVh''@;'; put 'put ''dGUoUCxpLG51bGwsYSk7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChmZS5ob3N0VmlldyxtLFVwKHRoaXMuX2hvc3RUTm9kZSxudWxsKSksZmV9aW5zZXJ0KHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbCh0LGUsITApfWluc2VydEltcGwodCxlLHIpe2NvbnN0IGk9dC5fbFZpZXc7aWYoZnVu''@;'; put 'put ''Y3Rpb24gJHoobil7cmV0dXJuIHpjKG5bM10pfShpKSl7Y29uc3QgbT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT1tKXRoaXMuZGV0YWNoKG0pO2Vsc2V7Y29uc3QgQz1pWzNdLFA9bmV3IFBpKEMsQ1s1XSxDWzNdKTtQLmRldGFjaChQLmluZGV4T2YodCkpfX1jb25zdCBhPXRoaXMuX2FkanVz''@;'; put 'put ''dEluZGV4KGUpLGM9dGhpcy5fbENvbnRhaW5lcjtyZXR1cm4gWnAoYyxpLGEsciksdC5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKSxpbSh0YShjKSxhLHQpLHR9bW92ZSh0LGUpe3JldHVybiB0aGlzLmluc2VydCh0LGUpfWluZGV4T2YodCl7Y29uc3QgZT1xaSh0aGlzLl9sQ29udGFpbmVy''@;'; put 'put ''KTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtjb25zdCBlPXRoaXMuX2FkanVzdEluZGV4KHQsLTEpLHI9ZDkodGhpcy5fbENvbnRhaW5lcixlKTtyJiYod2codGEodGhpcy5fbENvbnRhaW5lciksZSksczkoclsxXSxyKSl9ZGV0YWNoKHQpe2NvbnN0IGU9dGhp''@;'; put 'put ''cy5fYWRqdXN0SW5kZXgodCwtMSkscj1kOSh0aGlzLl9sQ29udGFpbmVyLGUpO3JldHVybiByJiZudWxsIT13Zyh0YSh0aGlzLl9sQ29udGFpbmVyKSxlKT9uZXcgbjYocik6bnVsbH1fYWRqdXN0SW5kZXgodCxlPTApe3JldHVybiB0Pz90aGlzLmxlbmd0aCtlfX07ZnVuY3Rpb24gcWkobil7''@;'; put 'put ''cmV0dXJuIG5bOF19ZnVuY3Rpb24gdGEobil7cmV0dXJuIG5bOF18fChuWzhdPVtdKX1mdW5jdGlvbiBJaShuLHQpe2xldCBlO2NvbnN0IHI9dFtuLmluZGV4XTtyZXR1cm4gemMocik/ZT1yOihlPU1iKHIsdCxudWxsLG4pLHRbbi5pbmRleF09ZSx6eCh0LGUpKSxGbihlLHQsbixyKSxuZXcg''@;'; put 'put ''UGkoZSxuLHQpfWxldCBGbj1mdW5jdGlvbiBMbihuLHQsZSxyKXtpZihuWzddKXJldHVybjtsZXQgaTtpPTgmZS50eXBlP09zKHIpOmZ1bmN0aW9uIFNyKG4sdCl7Y29uc3QgZT1uWzExXSxyPWUuY3JlYXRlQ29tbWVudCgiIiksaT1mMSh0LG4pLGE9ZS5wYXJlbnROb2RlKGkpO3JldHVybiBq''@;'; put 'put ''ZyhlLGEscixlLm5leHRTaWJsaW5nKGkpLCExKSxyfSh0LGUpLG5bN109aX07Y2xhc3MgcGF7cXVlcnlMaXN0O21hdGNoZXM9bnVsbDtjb25zdHJ1Y3Rvcih0KXt0aGlzLnF1ZXJ5TGlzdD10fWNsb25lKCl7cmV0dXJuIG5ldyBwYSh0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1''@;'; put 'put ''ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyBhb3txdWVyaWVzO2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtjb25zdCBlPXQucXVlcmllcztpZihudWxsIT09ZSl7Y29uc3Qgcj1udWxsIT09dC5jb250ZW50UXVlcmllcz90LmNvbnRlbnRR''@;'; put 'put ''dWVyaWVzWzBdOmUubGVuZ3RoLGk9W107Zm9yKGxldCBhPTA7YTxyO2ErKyl7Y29uc3QgYz1lLmdldEJ5SW5kZXgoYSk7aS5wdXNoKHRoaXMucXVlcmllc1tjLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgYW8oaSl9cmV0dXJuIG51bGx9aW5zZXJ0Vmlldyh0''@;'; put 'put ''KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRldGFjaFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1maW5pc2hWaWV3Q3JlYXRpb24odCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KXtmb3Io''@;'; put 'put ''bGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKW51bGwhPT1Nbih0LGUpLm1hdGNoZXMmJnRoaXMucXVlcmllc1tlXS5zZXREaXJ0eSgpfX1jbGFzcyBRaXtmbGFncztyZWFkO3ByZWRpY2F0ZTtjb25zdHJ1Y3Rvcih0LGUscj1udWxsKXt0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPXIs''@;'; put 'put ''dGhpcy5wcmVkaWNhdGU9InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uIFUxKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKX0odCk6dH19Y2xhc3MgRG97cXVlcmllcztjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1lbGVtZW50U3RhcnQodCxlKXtmb3Io''@;'; put 'put ''bGV0IHI9MDtyPHRoaXMucXVlcmllcy5sZW5ndGg7cisrKXRoaXMucXVlcmllc1tyXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0''@;'; put 'put ''KXtsZXQgZT1udWxsO2ZvcihsZXQgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXtjb25zdCBpPW51bGwhPT1lP2UubGVuZ3RoOjAsYT10aGlzLmdldEJ5SW5kZXgocikuZW1iZWRkZWRUVmlldyh0LGkpO2EmJihhLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9cixudWxsIT09ZT9lLnB1c2goYSk6ZT1b''@;'; put 'put ''YV0pfXJldHVybiBudWxsIT09ZT9uZXcgRG8oZSk6bnVsbH10ZW1wbGF0ZSh0LGUpe2ZvcihsZXQgcj0wO3I8dGhpcy5xdWVyaWVzLmxlbmd0aDtyKyspdGhpcy5xdWVyaWVzW3JdLnRlbXBsYXRlKHQsZSl9Z2V0QnlJbmRleCh0KXtyZXR1cm4gdGhpcy5xdWVyaWVzW3RdfWdldCBsZW5ndGgo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayh0KXt0aGlzLnF1ZXJpZXMucHVzaCh0KX19Y2xhc3MgamF7bWV0YWRhdGE7bWF0Y2hlcz1udWxsO2luZGV4SW5EZWNsYXJhdGlvblZpZXc9LTE7Y3Jvc3Nlc05nVGVtcGxhdGU9ITE7X2RlY2xhcmF0aW9uTm9kZUluZGV4O19hcHBs''@;'; put 'put ''aWVzVG9OZXh0Tm9kZT0hMDtjb25zdHJ1Y3Rvcih0LGU9LTEpe3RoaXMubWV0YWRhdGE9dCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1lfWVsZW1lbnRTdGFydCh0LGUpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShlKSYmdGhpcy5tYXRjaFROb2RlKHQsZSl9ZWxlbWVudEVuZCh0KXt0aGlz''@;'; put 'put ''Ll9kZWNsYXJhdGlvbk5vZGVJbmRleD09PXQuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUodCxlKXt0aGlzLmVsZW1lbnRTdGFydCh0LGUpfWVtYmVkZGVkVFZpZXcodCxlKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpPyh0aGlzLmNyb3NzZXNO''@;'; put 'put ''Z1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLXQuaW5kZXgsZSksbmV3IGphKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUodCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEmfnRoaXMubWV0YWRhdGEuZmxhZ3Mpe2NvbnN0IGU9dGhpcy5fZGVjbGFyYXRpb25O''@;'; put 'put ''b2RlSW5kZXg7bGV0IHI9dC5wYXJlbnQ7Zm9yKDtudWxsIT09ciYmOCZyLnR5cGUmJnIuaW5kZXghPT1lOylyPXIucGFyZW50O3JldHVybiBlPT09KG51bGwhPT1yP3IuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKHQsZSl7Y29uc3Qgcj10aGlz''@;'; put 'put ''Lm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPXJbaV07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLG1vKGUsYSkpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxTZChlLHQs''@;'; put 'put ''YSwhMSwhMSkpfWVsc2Ugcj09PUFsPzQmZS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxTZChlLHQsciwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUscil7aWYobnVsbCE9PXIp''@;'; put 'put ''e2NvbnN0IGk9dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1pKWlmKGk9PT16aXx8aT09PU5ufHxpPT09QWwmJjQmZS50eXBlKXRoaXMuYWRkTWF0Y2goZS5pbmRleCwtMik7ZWxzZXtjb25zdCBhPVNkKGUsdCxpLCExLCExKTtudWxsIT09YSYmdGhpcy5hZGRNYXRjaChlLmluZGV4LGEp''@;'; put 'put ''fWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LHIpfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fWZ1bmN0aW9uIG1vKG4sdCl7Y29uc3QgZT1uLmxvY2FsTmFtZXM7aWYobnVsbCE9PWUpZm9yKGxl''@;'; put 'put ''dCByPTA7cjxlLmxlbmd0aDtyKz0yKWlmKGVbcl09PT10KXJldHVybiBlW3IrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gQmkobix0LGUscil7cmV0dXJuLTE9PT1lP2Z1bmN0aW9uIGNvKG4sdCl7cmV0dXJuIDExJm4udHlwZT9CcChuLHQpOjQmbi50eXBlP3hiKG4sdCk6bnVsbH0odCxuKTot''@;'; put 'put ''Mj09PWU/ZnVuY3Rpb24ga2wobix0LGUpe3JldHVybiBlPT09emk/QnAodCxuKTplPT09QWw/eGIodCxuKTplPT09Tm4/SWkodCxuKTp2b2lkIDB9KG4sdCxyKTpTNyhuLG5bMV0sZSx0KX1mdW5jdGlvbiBPbihuLHQsZSxyKXtjb25zdCBpPXRbMThdLnF1ZXJpZXNbcl07aWYobnVsbD09PWku''@;'; put 'put ''bWF0Y2hlcyl7Y29uc3QgYT1uLmRhdGEsYz1lLm1hdGNoZXMsbT1bXTtmb3IobGV0IEM9MDtudWxsIT09YyYmQzxjLmxlbmd0aDtDKz0yKXtjb25zdCBQPWNbQ107bS5wdXNoKFA8MD9udWxsOkJpKHQsYVtQXSxjW0MrMV0sZS5tZXRhZGF0YS5yZWFkKSl9aS5tYXRjaGVzPW19cmV0dXJuIGku''@;'; put 'put ''bWF0Y2hlc31mdW5jdGlvbiB3cyhuLHQsZSxyKXtjb25zdCBpPW4ucXVlcmllcy5nZXRCeUluZGV4KGUpLGE9aS5tYXRjaGVzO2lmKG51bGwhPT1hKXtjb25zdCBjPU9uKG4sdCxpLGUpO2ZvcihsZXQgbT0wO208YS5sZW5ndGg7bSs9Mil7Y29uc3QgQz1hW21dO2lmKEM+MClyLnB1c2goY1tt''@;'; put 'put ''LzJdKTtlbHNle2NvbnN0IFA9YVttKzFdLFk9dFstQ107Zm9yKGxldCBKPTEwO0o8WS5sZW5ndGg7SisrKXtjb25zdCBjZT1ZW0pdO2NlWzE2XT09PWNlWzNdJiZ3cyhjZVsxXSxjZSxQLHIpfWlmKG51bGwhPT1ZWzldKXtjb25zdCBKPVlbOV07Zm9yKGxldCBjZT0wO2NlPEoubGVuZ3RoO2Nl''@;'; put 'put ''Kyspe2NvbnN0IGZlPUpbY2VdO3dzKGZlWzFdLGZlLFAscil9fX19fXJldHVybiByfWZ1bmN0aW9uIFpjKG4sdCxlKXtjb25zdCByPW5ldyBIZyghKDQmfmUpKTtyZXR1cm4gZnVuY3Rpb24gS3oobix0LGUscil7Y29uc3QgaT12TSh0KTtpLnB1c2goZSksbi5maXJzdENyZWF0ZVBhc3MmJlRf''@;'; put 'put ''KG4pLnB1c2gocixpLmxlbmd0aC0xKX0obix0LHIsci5kZXN0cm95KSwodFsxOF0/Pz1uZXcgYW8pLnF1ZXJpZXMucHVzaChuZXcgcGEocikpLTF9ZnVuY3Rpb24gaGMobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IERvKSxuLnF1ZXJpZXMudHJhY2sobmV3IGphKHQs''@;'; put 'put ''ZSkpfWZ1bmN0aW9uIE1uKG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIFVuKG4sdCl7Y29uc3QgZT1uWzFdLHI9TW4oZSx0KTtyZXR1cm4gci5jcm9zc2VzTmdUZW1wbGF0ZT93cyhlLG4sdCxbXSk6T24oZSxuLHIsdCl9bGV0IEU5PWNsYXNze30sU3NlPWNs''@;'; put 'put ''YXNze307Y2xhc3MgdlkgZXh0ZW5kcyBFOXtuZ01vZHVsZVR5cGU7X3BhcmVudDtfYm9vdHN0cmFwQ29tcG9uZW50cz1bXTtfcjNJbmplY3RvcjtpbnN0YW5jZTtkZXN0cm95Q2JzPVtdO2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgU3QodGhpcyk7Y29uc3RydWN0b3IodCxlLHIsaT0h''@;'; put 'put ''MCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlVHlwZT10LHRoaXMuX3BhcmVudD1lO2NvbnN0IGE9YzEodCk7dGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz13ZihhLmJvb3RzdHJhcCksdGhpcy5fcjNJbmplY3Rvcj1CXyh0LGUsW3twcm92aWRlOkU5LHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOl8x''@;'; put 'put ''LHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfSwuLi5yXSxxbih0KSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpLGkmJnRoaXMucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl9cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7dGhpcy5fcjNJbmplY3Rvci5y''@;'; put 'put ''ZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHRoaXMubmdNb2R1bGVUeXBlKX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5fcjNJbmplY3Rvcn1kZXN0cm95KCl7Y29uc3QgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ry''@;'; put 'put ''b3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fWNsYXNzIHlZIGV4dGVuZHMgU3Nle21vZHVsZVR5cGU7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0''@;'; put 'put ''aGlzLm1vZHVsZVR5cGU9dH1jcmVhdGUodCl7cmV0dXJuIG5ldyB2WSh0aGlzLm1vZHVsZVR5cGUsdCxbXSl9fWNsYXNzIE1zZSBleHRlbmRzIEU5e2luamVjdG9yO2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgU3QodGhpcyk7aW5zdGFuY2U9bnVsbDtjb25zdHJ1Y3Rvcih0KXtzdXBl''@;'; put 'put ''cigpO2NvbnN0IGU9bmV3IG0zKFsuLi50LnByb3ZpZGVycyx7cHJvdmlkZTpFOSx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpfMSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLHQucGFyZW50fHxkbSgpLHQuZGVidWdOYW1lLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJd''@;'; put 'put ''KSk7dGhpcy5pbmplY3Rvcj1lLHQucnVuRW52aXJvbm1lbnRJbml0aWFsaXplcnMmJmUucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl9ZGVzdHJveSgpe3RoaXMuaW5qZWN0b3IuZGVzdHJveSgpfW9uRGVzdHJveSh0KXt0aGlzLmluamVjdG9yLm9uRGVzdHJveSh0KX19ZnVuY3Rpb24g''@;'; put 'put ''V08obix0LGU9bnVsbCl7cmV0dXJuIG5ldyBNc2Uoe3Byb3ZpZGVyczpuLHBhcmVudDp0LGRlYnVnTmFtZTplLHJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IFF3ZT0oKCk9PntjbGFzcyBue19pbmplY3RvcjtjYWNoZWRJbmplY3RvcnM9bmV3IE1hcDtjb25z''@;'; put 'put ''dHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lfWdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGUpe2lmKCFlLnN0YW5kYWxvbmUpcmV0dXJuIG51bGw7aWYoIXRoaXMuY2FjaGVkSW5qZWN0b3JzLmhhcyhlKSl7Y29uc3Qgcj0kcygwLGUudHlwZSksaT1yLmxlbmd0aD4wP1dPKFtyXSx0''@;'; put 'put ''aGlzLl9pbmplY3RvcixgU3RhbmRhbG9uZVske2UudHlwZS5uYW1lfV1gKTpudWxsO3RoaXMuY2FjaGVkSW5qZWN0b3JzLnNldChlLGkpfXJldHVybiB0aGlzLmNhY2hlZEluamVjdG9ycy5nZXQoZSl9bmdPbkRlc3Ryb3koKXt0cnl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5jYWNoZWRJbmplY3Rv''@;'; put 'put ''cnMudmFsdWVzKCkpbnVsbCE9PWUmJmUuZGVzdHJveSgpfWZpbmFsbHl7dGhpcy5jYWNoZWRJbmplY3RvcnMuY2xlYXIoKX19c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4scHJvdmlkZWRJbjoiZW52aXJvbm1lbnQiLGZhY3Rvcnk6KCk9Pm5ldyBuKE9yKHVjKSl9KX1yZXR1cm4gbn0p''@;'; put 'put ''KCk7ZnVuY3Rpb24gVnIobil7cmV0dXJuIFd1KCgpPT57Y29uc3QgdD14c2UobiksZT17Li4udCxkZWNsczpuLmRlY2xzLHZhcnM6bi52YXJzLHRlbXBsYXRlOm4udGVtcGxhdGUsY29uc3RzOm4uY29uc3RzfHxudWxsLG5nQ29udGVudFNlbGVjdG9yczpuLm5nQ29udGVudFNlbGVjdG9ycyxv''@;'; put 'put ''blB1c2g6bi5jaGFuZ2VEZXRlY3Rpb249PT1ZXy5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsZGVwZW5kZW5jaWVzOnQuc3RhbmRhbG9uZSYmbi5kZXBlbmRlbmNpZXN8fG51bGwsZ2V0U3RhbmRhbG9uZUluamVjdG9yOnQuc3RhbmRhbG9uZT9pPT5pLmdldChRd2Up''@;'; put 'put ''LmdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGUpOm51bGwsZ2V0RXh0ZXJuYWxTdHlsZXM6bnVsbCxzaWduYWxzOm4uc2lnbmFscz8/ITEsZGF0YTpuLmRhdGF8fHt9LGVuY2Fwc3VsYXRpb246bi5lbmNhcHN1bGF0aW9ufHxoaC5FbXVsYXRlZCxzdHlsZXM6bi5zdHlsZXN8fGtzLF86''@;'; put 'put ''bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCx0VmlldzpudWxsLGlkOiIifTt0LnN0YW5kYWxvbmUmJkR1KCJOZ1N0YW5kYWxvbmUiKSxFc2UoZSk7Y29uc3Qgcj1uLmRlcGVuZGVuY2llcztyZXR1cm4gZS5kaXJlY3RpdmVEZWZzPVpPKHIsITEpLGUucGlwZURlZnM9Wk8ociwhMCksZS5p''@;'; put 'put ''ZD1mdW5jdGlvbiBhQ2Uobil7bGV0IHQ9MDtjb25zdCByPVtuLnNlbGVjdG9ycyxuLm5nQ29udGVudFNlbGVjdG9ycyxuLmhvc3RWYXJzLG4uaG9zdEF0dHJzLCJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbnN0cz8iIjpuLmNvbnN0cyxuLnZhcnMsbi5kZWNscyxuLmVuY2Fwc3VsYXRpb24sbi5z''@;'; put 'put ''dGFuZGFsb25lLG4uc2lnbmFscyxuLmV4cG9ydEFzLEpTT04uc3RyaW5naWZ5KG4uaW5wdXRzKSxKU09OLnN0cmluZ2lmeShuLm91dHB1dHMpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4udHlwZS5wcm90b3R5cGUpLCEhbi5jb250ZW50UXVlcmllcywhIW4udmlld1F1ZXJ5XTtmb3Io''@;'; put 'put ''Y29uc3QgYSBvZiByLmpvaW4oInwiKSl0PU1hdGguaW11bCgzMSx0KSthLmNoYXJDb2RlQXQoMCl8MDtyZXR1cm4gdCs9MjE0NzQ4MzY0OCwiYyIrdH0oZSksZX0pfWZ1bmN0aW9uIGVDZShuKXtyZXR1cm4gSm8obil8fHlhKG4pfWZ1bmN0aW9uIHRDZShuKXtyZXR1cm4gbnVsbCE9PW59ZnVu''@;'; put 'put ''Y3Rpb24gR2kobil7cmV0dXJuIFd1KCgpPT4oe3R5cGU6bi50eXBlLGJvb3RzdHJhcDpuLmJvb3RzdHJhcHx8a3MsZGVjbGFyYXRpb25zOm4uZGVjbGFyYXRpb25zfHxrcyxpbXBvcnRzOm4uaW1wb3J0c3x8a3MsZXhwb3J0czpuLmV4cG9ydHN8fGtzLHRyYW5zaXRpdmVDb21waWxlU2NvcGVz''@;'; put 'put ''Om51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsaWQ6bi5pZHx8bnVsbH0pKX1mdW5jdGlvbiBuQ2Uobix0KXtpZihudWxsPT1uKXJldHVybiBCMDtjb25zdCBlPXt9O2Zvcihjb25zdCByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSl7Y29uc3QgaT1uW3JdO2xldCBhLGMsbSxDO0Fy''@;'; put 'put ''cmF5LmlzQXJyYXkoaSk/KG09aVswXSxhPWlbMV0sYz1pWzJdPz9hLEM9aVszXXx8bnVsbCk6KGE9aSxjPWksbT12Yi5Ob25lLEM9bnVsbCksZVthXT1bcixtLENdLHRbYV09Y31yZXR1cm4gZX1mdW5jdGlvbiByQ2Uobil7aWYobnVsbD09bilyZXR1cm4gQjA7Y29uc3QgdD17fTtmb3IoY29u''@;'; put 'put ''c3QgZSBpbiBuKW4uaGFzT3duUHJvcGVydHkoZSkmJih0W25bZV1dPWUpO3JldHVybiB0fWZ1bmN0aW9uIFdyKG4pe3JldHVybiBXdSgoKT0+e2NvbnN0IHQ9eHNlKG4pO3JldHVybiBFc2UodCksdH0pfWZ1bmN0aW9uIHN1KG4pe3JldHVybnt0eXBlOm4udHlwZSxuYW1lOm4ubmFtZSxmYWN0''@;'; put 'put ''b3J5Om51bGwscHVyZTohMSE9PW4ucHVyZSxzdGFuZGFsb25lOm4uc3RhbmRhbG9uZT8/ITAsb25EZXN0cm95Om4udHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIHhzZShuKXtjb25zdCB0PXt9O3JldHVybnt0eXBlOm4udHlwZSxwcm92aWRlcnNSZXNvbHZlcjpu''@;'; put 'put ''dWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6bi5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6bi5ob3N0VmFyc3x8MCxob3N0QXR0cnM6bi5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6bi5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0czp0LGlucHV0Q29u''@;'; put 'put ''ZmlnOm4uaW5wdXRzfHxCMCxleHBvcnRBczpuLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6bi5zdGFuZGFsb25lPz8hMCxzaWduYWxzOiEwPT09bi5zaWduYWxzLHNlbGVjdG9yczpuLnNlbGVjdG9yc3x8a3Msdmlld1F1ZXJ5Om4udmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOm4uZmVhdHVy''@;'; put 'put ''ZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURlZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpuQ2Uobi5pbnB1dHMsdCksb3V0cHV0czpyQ2Uobi5vdXRwdXRzKSxkZWJ1Z0luZm86bnVsbH19ZnVuY3Rpb24gRXNlKG4pe24uZmVhdHVyZXM/LmZvckVh''@;'; put 'put ''Y2godD0+dChuKSl9ZnVuY3Rpb24gWk8obix0KXtpZighbilyZXR1cm4gbnVsbDtjb25zdCBlPXQ/YXU6ZUNlO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pLm1hcChyPT5lKHIpKS5maWx0ZXIodENlKX1mdW5jdGlvbiBJYShuKXtsZXQgdD1mdW5jdGlvbiBUc2Uobil7''@;'; put 'put ''cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3J9KG4udHlwZSksZT0hMDtjb25zdCByPVtuXTtmb3IoO3Q7KXtsZXQgaTtpZihoMShuKSlpPXQuXHUwMjc1Y21wfHx0Llx1MDI3NWRpcjtlbHNle2lmKHQuXHUwMjc1Y21wKXRocm93IG5ldyBrcig5''@;'; put 'put ''MDMsITEpO2k9dC5cdTAyNzVkaXJ9aWYoaSl7aWYoZSl7ci5wdXNoKGkpO2NvbnN0IGM9bjtjLmlucHV0cz1fWShuLmlucHV0cyksYy5kZWNsYXJlZElucHV0cz1fWShuLmRlY2xhcmVkSW5wdXRzKSxjLm91dHB1dHM9X1kobi5vdXRwdXRzKTtjb25zdCBtPWkuaG9zdEJpbmRpbmdzO20mJnVD''@;'; put 'put ''ZShuLG0pO2NvbnN0IEM9aS52aWV3UXVlcnksUD1pLmNvbnRlbnRRdWVyaWVzO2lmKEMmJmxDZShuLEMpLFAmJmNDZShuLFApLG9DZShuLGkpLENuKG4ub3V0cHV0cyxpLm91dHB1dHMpLGgxKGkpJiZpLmRhdGEuYW5pbWF0aW9uKXtjb25zdCBZPW4uZGF0YTtZLmFuaW1hdGlvbj0oWS5hbmlt''@;'; put 'put ''YXRpb258fFtdKS5jb25jYXQoaS5kYXRhLmFuaW1hdGlvbil9fWNvbnN0IGE9aS5mZWF0dXJlcztpZihhKWZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKXtjb25zdCBtPWFbY107bSYmbS5uZ0luaGVyaXQmJm0obiksbT09PUlhJiYoZT0hMSl9fXQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQp''@;'; put 'put ''fSFmdW5jdGlvbiBzQ2Uobil7bGV0IHQ9MCxlPW51bGw7Zm9yKGxldCByPW4ubGVuZ3RoLTE7cj49MDtyLS0pe2NvbnN0IGk9bltyXTtpLmhvc3RWYXJzPXQrPWkuaG9zdFZhcnMsaS5ob3N0QXR0cnM9X20oaS5ob3N0QXR0cnMsZT1fbShlLGkuaG9zdEF0dHJzKSl9fShyKX1mdW5jdGlvbiBv''@;'; put 'put ''Q2Uobix0KXtmb3IoY29uc3QgZSBpbiB0LmlucHV0cyl7aWYoIXQuaW5wdXRzLmhhc093blByb3BlcnR5KGUpfHxuLmlucHV0cy5oYXNPd25Qcm9wZXJ0eShlKSljb250aW51ZTtjb25zdCByPXQuaW5wdXRzW2VdO3ZvaWQgMCE9PXImJihuLmlucHV0c1tlXT1yLG4uZGVjbGFyZWRJbnB1dHNb''@;'; put 'put ''ZV09dC5kZWNsYXJlZElucHV0c1tlXSl9fWZ1bmN0aW9uIF9ZKG4pe3JldHVybiBuPT09QjA/e306bj09PWtzP1tdOm59ZnVuY3Rpb24gbENlKG4sdCl7Y29uc3QgZT1uLnZpZXdRdWVyeTtuLnZpZXdRdWVyeT1lPyhyLGkpPT57dChyLGkpLGUocixpKX06dH1mdW5jdGlvbiBjQ2Uobix0KXtj''@;'; put 'put ''b25zdCBlPW4uY29udGVudFF1ZXJpZXM7bi5jb250ZW50UXVlcmllcz1lPyhyLGksYSk9Pnt0KHIsaSxhKSxlKHIsaSxhKX06dH1mdW5jdGlvbiB1Q2Uobix0KXtjb25zdCBlPW4uaG9zdEJpbmRpbmdzO24uaG9zdEJpbmRpbmdzPWU/KHIsaSk9Pnt0KHIsaSksZShyLGkpfTp0fWZ1bmN0aW9u''@;'; put 'put ''IE1mKG4pe2NvbnN0IHQ9ZT0+e2NvbnN0IHI9QXJyYXkuaXNBcnJheShuKTtudWxsPT09ZS5ob3N0RGlyZWN0aXZlcz8oZS5maW5kSG9zdERpcmVjdGl2ZURlZnM9QXNlLGUuaG9zdERpcmVjdGl2ZXM9cj9uLm1hcChiWSk6W25dKTpyP2UuaG9zdERpcmVjdGl2ZXMudW5zaGlmdCguLi5uLm1h''@;'; put 'put ''cChiWSkpOmUuaG9zdERpcmVjdGl2ZXMudW5zaGlmdChuKX07cmV0dXJuIHQubmdJbmhlcml0PSEwLHR9ZnVuY3Rpb24gQXNlKG4sdCxlKXtpZihudWxsIT09bi5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgciBvZiBuLmhvc3REaXJlY3RpdmVzKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXtj''@;'; put 'put ''b25zdCBpPXIoKTtmb3IoY29uc3QgYSBvZiBpKWtzZShiWShhKSx0LGUpfWVsc2Uga3NlKHIsdCxlKX1mdW5jdGlvbiBrc2Uobix0LGUpe2NvbnN0IHI9eWEobi5kaXJlY3RpdmUpOyhmdW5jdGlvbiBwQ2Uobix0KXtmb3IoY29uc3QgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihuW3Rb''@;'; put 'put ''ZV1dPW5bZV0pfSkoci5kZWNsYXJlZElucHV0cyxuLmlucHV0cyksQXNlKHIsdCxlKSxlLnNldChyLG4pLHQucHVzaChyKX1mdW5jdGlvbiBiWShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj97ZGlyZWN0aXZlOnZhKG4pLGlucHV0czpCMCxvdXRwdXRzOkIwfTp7ZGlyZWN0aXZlOnZh''@;'; put 'put ''KG4uZGlyZWN0aXZlKSxpbnB1dHM6RHNlKG4uaW5wdXRzKSxvdXRwdXRzOkRzZShuLm91dHB1dHMpfX1mdW5jdGlvbiBEc2Uobil7aWYodm9pZCAwPT09bnx8MD09PW4ubGVuZ3RoKXJldHVybiBCMDtjb25zdCB0PXt9O2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSs9Mil0W25bZV1dPW5bZSsx''@;'; put 'put ''XTtyZXR1cm4gdH1mdW5jdGlvbiBZTyhuKXtyZXR1cm4hIXdZKG4pJiYoQXJyYXkuaXNBcnJheShuKXx8IShuIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIG4pfWZ1bmN0aW9uIHdZKG4pe3JldHVybiBudWxsIT09biYmKCJmdW5jdGlvbiI9PXR5cGVvZiBufHwib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIG4pfWZ1bmN0aW9uIFFwKG4sdCxlKXtyZXR1cm4gblt0XT1lfWZ1bmN0aW9uIGx1KG4sdCxlKXtyZXR1cm4hT2JqZWN0LmlzKG5bdF0sZSkmJihuW3RdPWUsITApfWZ1bmN0aW9uIFQ5KG4sdCxlLHIpe2NvbnN0IGk9bHUobix0LGUpO3JldHVybiBsdShuLHQrMSxyKXx8aX1m''@;'; put 'put ''dW5jdGlvbiBHTyhuLHQsZSxyLGkpe2NvbnN0IGE9VDkobix0LGUscik7cmV0dXJuIGx1KG4sdCsyLGkpfHxhfWZ1bmN0aW9uIHhmKG4sdCxlLHIsaSxhKXtjb25zdCBjPVQ5KG4sdCxlLHIpO3JldHVybiBUOShuLHQrMixpLGEpfHxjfWZ1bmN0aW9uIHhFKG4sdCxlLHIsaSxhLGMsbSxDLFAp''@;'; put 'put ''e2NvbnN0IFk9ZSsyNixKPXQuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIHlDZShuLHQsZSxyLGksYSxjLG0sQyl7Y29uc3QgUD10LmNvbnN0cyxZPWE2KHQsbiw0LGN8fG51bGwsbXx8bnVsbCk7RF8oKSYmTmIodCxlLFksQ2QoUCxDKSxaeCksWS5tZXJnZWRBdHRycz1fbShZLm1lcmdlZEF0''@;'; put 'put ''dHJzLFkuYXR0cnMpLFRNKHQsWSk7Y29uc3QgSj1ZLnRWaWV3PWE5KDIsWSxyLGksYSx0LmRpcmVjdGl2ZVJlZ2lzdHJ5LHQucGlwZVJlZ2lzdHJ5LG51bGwsdC5zY2hlbWFzLFAsbnVsbCk7cmV0dXJuIG51bGwhPT10LnF1ZXJpZXMmJih0LnF1ZXJpZXMudGVtcGxhdGUodCxZKSxKLnF1ZXJp''@;'; put 'put ''ZXM9dC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcoWSkpLFl9KFksdCxuLHIsaSxhLGMsbSxDKTp0LmRhdGFbWV07cjIoSiwhMSk7Y29uc3QgY2U9UnNlKHQsbixKLGUpO09nKCkmJkNiKHQsbixjZSxKKSxXMChjZSxuKTtjb25zdCBmZT1NYihjZSxuLGNlLEopO3JldHVybiBuW1ldPWZlLHp4KG4s''@;'; put 'put ''ZmUpLEFnKEopJiZ5Yih0LG4sSiksbnVsbCE9QyYmV3gobixKLFApLEp9ZnVuY3Rpb24gY3Qobix0LGUscixpLGEsYyxtKXtjb25zdCBDPVVyKCksUD1FbygpO3JldHVybiB4RShDLFAsbix0LGUscixpLENkKFAuY29uc3RzLGEpLGMsbSksY3R9bGV0IFJzZT1mdW5jdGlvbiBMc2Uobix0LGUs''@;'; put 'put ''cil7cmV0dXJuIGRmKCEwKSx0WzExXS5jcmVhdGVDb21tZW50KCIiKX07bGV0IE1ZPSgoKT0+e2NsYXNzIG57bG9nKGUpe2NvbnNvbGUubG9nKGUpfXdhcm4oZSl7Y29uc29sZS53YXJuKGUpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1''@;'; put 'put ''MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX1yZXR1cm4gbn0pKCk7Y29uc3QgWXNlPW5ldyB3cigiIikscU89bmV3IHdyKCIiKTtsZXQgRFksQVk9KCgpPT57Y2xhc3Mgbntfbmdab25lO3JlZ2lzdHJ5O19pc1pvbmVTdGFi''@;'; put 'put ''bGU9ITA7X2NhbGxiYWNrcz1bXTtfdGFza1RyYWNraW5nWm9uZT1udWxsO19kZXN0cm95UmVmO2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PXIsTWcoKSYmKHRoaXMuX2Rlc3Ryb3lSZWY9Sm4oY2gse29wdGlvbmFsOiEwfSk/P3ZvaWQgMCksRFl8fChm''@;'; put 'put ''dW5jdGlvbiBtU2Uobil7RFk9bn0oaSksaS5hZGRUb1dpbmRvdyhyKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLl90YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93''@;'; put 'put ''YXRjaEFuZ3VsYXJFdmVudHMoKXtjb25zdCBlPXRoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSxyPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmli''@;'; put 'put ''ZSh7bmV4dDooKT0+e0phLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KSk7dGhpcy5fZGVzdHJveVJlZj8ub25EZXN0cm95KCgpPT57ZS51bnN1YnNjcmliZSgp''@;'; put 'put ''LHIudW5zdWJzY3JpYmUoKX0pfWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSlxdWV1ZU1pY3JvdGFzaygoKT0+e2Zvcig7MCE9PXRo''@;'; put 'put ''aXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYigpfX0pO2Vsc2V7bGV0IGU9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihy''@;'; put 'put ''PT4hci51cGRhdGVDYnx8IXIudXBkYXRlQ2IoZSl8fChjbGVhclRpbWVvdXQoci50aW1lb3V0SWQpLCExKSl9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLl90YXNrVHJhY2tpbmdab25lP3RoaXMuX3Rhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoZT0+KHtzb3VyY2U6ZS5z''@;'; put 'put ''b3VyY2UsY3JlYXRpb25Mb2NhdGlvbjplLmNyZWF0aW9uTG9jYXRpb24sZGF0YTplLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soZSxyLGkpe2xldCBhPS0xO3ImJnI+MCYmKGE9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGM9PmMudGltZW91''@;'; put 'put ''dElkIT09YSksZSgpfSxyKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjplLHRpbWVvdXRJZDphLHVwZGF0ZUNiOml9KX13aGVuU3RhYmxlKGUscixpKXtpZihpJiYhdGhpcy5fdGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1''@;'; put 'put ''aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvcGx1Z2lucy90YXNrLXRyYWNraW5nIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayhlLHIsaSksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfXJlZ2lzdGVyQXBwbGlj''@;'; put 'put ''YXRpb24oZSl7dGhpcy5yZWdpc3RyeS5yZWdpc3RlckFwcGxpY2F0aW9uKGUsdGhpcyl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkudW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpfWZpbmRQcm92aWRlcnMoZSxyLGkpe3JldHVybltdfXN0YXRpYyBcdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihKYSksT3Ioa1kpLE9yKHFPKSl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCksa1k9KCgpPT57Y2xhc3MgbntfYXBwbGljYXRpb25zPW5ldyBNYXA7cmVnaXN0ZXJBcHBs''@;'; put 'put ''aWNhdGlvbihlLHIpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQoZSxyKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oZSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShlKX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHko''@;'; put 'put ''ZSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQoZSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRp''@;'; put 'put ''b25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUscj0hMCl7cmV0dXJuIERZPy5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyxlLHIpPz9udWxsfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2Vu''@;'; put 'put ''Om4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX1yZXR1cm4gbn0pKCksR3NlPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IHZTZX0pfXJldHVybiBufSkoKTtjbGFz''@;'; put 'put ''cyB2U2V7cXVldWVkRWZmZWN0Q291bnQ9MDtxdWV1ZXM9bmV3IE1hcDtzY2hlZHVsZSh0KXt0aGlzLmVucXVldWUodCl9cmVtb3ZlKHQpe2NvbnN0IHI9dGhpcy5xdWV1ZXMuZ2V0KHQuem9uZSk7ci5oYXModCkmJihyLmRlbGV0ZSh0KSx0aGlzLnF1ZXVlZEVmZmVjdENvdW50LS0pfWVucXVl''@;'; put 'put ''dWUodCl7Y29uc3QgZT10LnpvbmU7dGhpcy5xdWV1ZXMuaGFzKGUpfHx0aGlzLnF1ZXVlcy5zZXQoZSxuZXcgU2V0KTtjb25zdCByPXRoaXMucXVldWVzLmdldChlKTtyLmhhcyh0KXx8KHRoaXMucXVldWVkRWZmZWN0Q291bnQrKyxyLmFkZCh0KSl9Zmx1c2goKXtmb3IoO3RoaXMucXVldWVk''@;'; put 'put ''RWZmZWN0Q291bnQ+MDspZm9yKGNvbnN0W3QsZV1vZiB0aGlzLnF1ZXVlcyludWxsPT09dD90aGlzLmZsdXNoUXVldWUoZSk6dC5ydW4oKCk9PnRoaXMuZmx1c2hRdWV1ZShlKSl9Zmx1c2hRdWV1ZSh0KXtmb3IoY29uc3QgZSBvZiB0KXQuZGVsZXRlKGUpLHRoaXMucXVldWVkRWZmZWN0Q291''@;'; put 'put ''bnQtLSxlLnJ1bigpfX1mdW5jdGlvbiBURShuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW59ZnVuY3Rpb24gJHNlKG4pe3JldHVybiEhbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uc3Vic2NyaWJlfWNvbnN0IEtzZT1uZXcgd3IoIiIpO2Z1bmN0aW9uIFhzZShuKXtyZXR1''@;'; put 'put ''cm4gX2QoW3twcm92aWRlOktzZSxtdWx0aTohMCx1c2VWYWx1ZTpufV0pfWxldCBxc2U9KCgpPT57Y2xhc3MgbntyZXNvbHZlO3JlamVjdDtpbml0aWFsaXplZD0hMTtkb25lPSExO2RvbmVQcm9taXNlPW5ldyBQcm9taXNlKChlLHIpPT57dGhpcy5yZXNvbHZlPWUsdGhpcy5yZWplY3Q9cn0p''@;'; put 'put ''O2FwcEluaXRzPUpuKEtzZSx7b3B0aW9uYWw6ITB9KT8/W107aW5qZWN0b3I9Sm4oSG8pO2NvbnN0cnVjdG9yKCl7fXJ1bkluaXRpYWxpemVycygpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IGU9W107Zm9yKGNvbnN0IGkgb2YgdGhpcy5hcHBJbml0cyl7Y29uc3QgYT1QMSh0''@;'; put 'put ''aGlzLmluamVjdG9yLGkpO2lmKFRFKGEpKWUucHVzaChhKTtlbHNlIGlmKCRzZShhKSl7Y29uc3QgYz1uZXcgUHJvbWlzZSgobSxDKT0+e2Euc3Vic2NyaWJlKHtjb21wbGV0ZTptLGVycm9yOkN9KX0pO2UucHVzaChjKX19Y29uc3Qgcj0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUo''@;'; put 'put ''KX07UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+e3IoKX0pLmNhdGNoKGk9Pnt0aGlzLnJlamVjdChpKX0pLDA9PT1lLmxlbmd0aCYmcigpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11''@;'; put 'put ''bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2NvbnN0IEFFPW5ldyB3cigiIik7ZnVuY3Rpb24gUXNlKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2UoUXNlLG4pOnsuLi5uLC4uLnR9fWxldCBFZD0oKCk9''@;'; put 'put ''PntjbGFzcyBue19ydW5uaW5nVGljaz0hMTtfZGVzdHJveWVkPSExO19kZXN0cm95TGlzdGVuZXJzPVtdO192aWV3cz1bXTtpbnRlcm5hbEVycm9ySGFuZGxlcj1KbihNVSk7YWZ0ZXJSZW5kZXJNYW5hZ2VyPUpuKHN4KTt6b25lbGVzc0VuYWJsZWQ9Sm4oRDcpO3Jvb3RFZmZlY3RTY2hlZHVs''@;'; put 'put ''ZXI9Sm4oR3NlKTtkaXJ0eUZsYWdzPTA7dHJhY2luZ1NuYXBzaG90PW51bGw7ZXh0ZXJuYWxUZXN0Vmlld3M9bmV3IFNldDthZnRlclRpY2s9bmV3IHVyO2dldCBhbGxWaWV3cygpe3JldHVyblsuLi50aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c119Z2V0IGRl''@;'; put 'put ''c3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29tcG9uZW50VHlwZXM9W107Y29tcG9uZW50cz1bXTtpc1N0YWJsZT1KbihVMCkuaGFzUGVuZGluZ1Rhc2tzLnBpcGUoWGEoZT0+IWUpKTtjb25zdHJ1Y3Rvcigpe0puKEFtLHtvcHRpb25hbDohMH0pfXdoZW5TdGFibGUoKXtsZXQg''@;'; put 'put ''ZTtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2U9dGhpcy5pc1N0YWJsZS5zdWJzY3JpYmUoe25leHQ6aT0+e2kmJnIoKX19KX0pLmZpbmFsbHkoKCk9PntlLnVuc3Vic2NyaWJlKCl9KX1faW5qZWN0b3I9Sm4odWMpO19yZW5kZXJlckZhY3Rvcnk9bnVsbDtnZXQgaW5qZWN0b3IoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGUscil7cmV0dXJuIHRoaXMuYm9vdHN0cmFwSW1wbChlLHIpfWJvb3RzdHJhcEltcGwoZSxyLGk9SG8uTlVMTCl7Y29uc3QgYT1lIGluc3RhbmNlb2YgQk87aWYoIXRoaXMuX2luamVjdG9yLmdldChxc2UpLmRvbmUpdGhyb3cgbmV3IGtyKDQwNSwi''@;'; put 'put ''Iik7bGV0IG07bT1hP2U6dGhpcy5faW5qZWN0b3IuZ2V0KF8xKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlKSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2gobS5jb21wb25lbnRUeXBlKTtjb25zdCBDPWZ1bmN0aW9uIHlTZShuKXtyZXR1cm4gbi5pc0JvdW5kVG9Nb2R1bGV9KG0pP3ZvaWQg''@;'; put 'put ''MDp0aGlzLl9pbmplY3Rvci5nZXQoRTkpLFk9bS5jcmVhdGUoaSxbXSxyfHxtLnNlbGVjdG9yLEMpLEo9WS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LGNlPVkuaW5qZWN0b3IuZ2V0KFlzZSxudWxsKTtyZXR1cm4gY2U/LnJlZ2lzdGVyQXBwbGljYXRpb24oSiksWS5vbkRlc3Ryb3koKCk9Pnt0''@;'; put 'put ''aGlzLmRldGFjaFZpZXcoWS5ob3N0VmlldyksSk8odGhpcy5jb21wb25lbnRzLFkpLGNlPy51bnJlZ2lzdGVyQXBwbGljYXRpb24oSil9KSx0aGlzLl9sb2FkQ29tcG9uZW50KFkpLFl9dGljaygpe3RoaXMuem9uZWxlc3NFbmFibGVkfHwodGhpcy5kaXJ0eUZsYWdzfD0xKSx0aGlzLl90aWNr''@;'; put 'put ''KCl9X3RpY2soKXtudWxsIT09dGhpcy50cmFjaW5nU25hcHNob3Q/dGhpcy50cmFjaW5nU25hcHNob3QucnVuKG94LkNIQU5HRV9ERVRFQ1RJT04sdGhpcy50aWNrSW1wbCk6dGhpcy50aWNrSW1wbCgpfXRpY2tJbXBsPSgpPT57aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IGtyKDEw''@;'; put 'put ''MSwhMSk7Y29uc3QgZT1oZShudWxsKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITAsdGhpcy5zeW5jaHJvbml6ZSgpfWNhdGNoKHIpe3RoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXIocil9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLnRyYWNpbmdTbmFwc2hvdD8uZGlzcG9zZSgp''@;'; put 'put ''LHRoaXMudHJhY2luZ1NuYXBzaG90PW51bGwsaGUoZSksdGhpcy5hZnRlclRpY2submV4dCgpfX07c3luY2hyb25pemUoKXtudWxsPT09dGhpcy5fcmVuZGVyZXJGYWN0b3J5JiYhdGhpcy5faW5qZWN0b3IuZGVzdHJveWVkJiYodGhpcy5fcmVuZGVyZXJGYWN0b3J5PXRoaXMuX2luamVjdG9y''@;'; put 'put ''LmdldChIMyxudWxsLHtvcHRpb25hbDohMH0pKTtsZXQgZT0wO2Zvcig7MCE9PXRoaXMuZGlydHlGbGFncyYmZSsrPDEwOyl0aGlzLnN5bmNocm9uaXplT25jZSgpfXN5bmNocm9uaXplT25jZSgpe2lmKDE2JnRoaXMuZGlydHlGbGFncyYmKHRoaXMuZGlydHlGbGFncyY9LTE3LHRoaXMucm9v''@;'; put 'put ''dEVmZmVjdFNjaGVkdWxlci5mbHVzaCgpKSw3JnRoaXMuZGlydHlGbGFncyl7Y29uc3QgZT0hISgxJnRoaXMuZGlydHlGbGFncyk7dGhpcy5kaXJ0eUZsYWdzJj0tOCx0aGlzLmRpcnR5RmxhZ3N8PTg7Zm9yKGxldHtfbFZpZXc6cixub3RpZnlFcnJvckhhbmRsZXI6aX1vZiB0aGlzLmFsbFZp''@;'; put 'put ''ZXdzKWJTZShyLGksZSx0aGlzLnpvbmVsZXNzRW5hYmxlZCk7aWYodGhpcy5kaXJ0eUZsYWdzJj0tNSx0aGlzLnN5bmNEaXJ0eUZsYWdzV2l0aFZpZXdzKCksMjMmdGhpcy5kaXJ0eUZsYWdzKXJldHVybn1lbHNlIHRoaXMuX3JlbmRlcmVyRmFjdG9yeT8uYmVnaW4/LigpLHRoaXMuX3JlbmRl''@;'; put 'put ''cmVyRmFjdG9yeT8uZW5kPy4oKTs4JnRoaXMuZGlydHlGbGFncyYmKHRoaXMuZGlydHlGbGFncyY9LTksdGhpcy5hZnRlclJlbmRlck1hbmFnZXIuZXhlY3V0ZSgpKSx0aGlzLnN5bmNEaXJ0eUZsYWdzV2l0aFZpZXdzKCl9c3luY0RpcnR5RmxhZ3NXaXRoVmlld3MoKXt0aGlzLmFsbFZpZXdz''@;'; put 'put ''LnNvbWUoKHtfbFZpZXc6ZX0pPT5mNyhlKSk/dGhpcy5kaXJ0eUZsYWdzfD0yOnRoaXMuZGlydHlGbGFncyY9LTh9YXR0YWNoVmlldyhlKXtjb25zdCByPWU7dGhpcy5fdmlld3MucHVzaChyKSxyLmF0dGFjaFRvQXBwUmVmKHRoaXMpfWRldGFjaFZpZXcoZSl7Y29uc3Qgcj1lO0pPKHRoaXMu''@;'; put 'put ''X3ZpZXdzLHIpLHIuZGV0YWNoRnJvbUFwcFJlZigpfV9sb2FkQ29tcG9uZW50KGUpe3RoaXMuYXR0YWNoVmlldyhlLmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaChlKSx0aGlzLl9pbmplY3Rvci5nZXQoQUUsW10pLmZvckVhY2goaT0+aShlKSl9bmdPbkRlc3Ry''@;'; put 'put ''b3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZT0+ZSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpfWZpbmFsbHl7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX2Rlc3Ry''@;'; put 'put ''b3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShlKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpLCgpPT5KTyh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGUpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IGtyKDQwNiwhMSk7Y29uc3QgZT10aGlzLl9p''@;'; put 'put ''bmplY3RvcjtlLmRlc3Ryb3kmJiFlLmRlc3Ryb3llZCYmZS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixm''@;'; put 'put ''YWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIEpPKG4sdCl7Y29uc3QgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBiU2Uobix0LGUscil7KGV8fGY3KG4pKSYmbDkobix0LGUmJiFyPzA6MSl9ZnVu''@;'; put 'put ''Y3Rpb24gUnIobix0LGUscil7Y29uc3QgaT1VcigpO3JldHVybiBsdShpLHNoKCksdCkmJihFbygpLENmKGRsKCksaSxuLHQsZSxyKSksUnJ9ZnVuY3Rpb24gVWIobix0LGUscil7cmV0dXJuIGx1KG4sc2goKSxlKT90K29vKGUpK3I6T299ZnVuY3Rpb24gUU8obix0KXtyZXR1cm4gbjw8MTd8''@;'; put 'put ''dDw8Mn1mdW5jdGlvbiBrOShuKXtyZXR1cm4gbj4+MTcmMzI3Njd9ZnVuY3Rpb24gUFkobil7cmV0dXJuIDJ8bn1mdW5jdGlvbiBxYihuKXtyZXR1cm4oMTMxMDY4Jm4pPj4yfWZ1bmN0aW9uIEZZKG4sdCl7cmV0dXJuLTEzMTA2OSZufHQ8PDJ9ZnVuY3Rpb24gSFkobil7cmV0dXJuIDF8bn1m''@;'; put 'put ''dW5jdGlvbiB2bGUobix0LGUscil7Y29uc3QgaT1uW2UrMV0sYT1udWxsPT09dDtsZXQgYz1yP2s5KGkpOnFiKGkpLG09ITE7Zm9yKDswIT09YyYmKCExPT09bXx8YSk7KXtjb25zdCBQPW5bYysxXTtvTWUobltjXSx0KSYmKG09ITAsbltjKzFdPXI/SFkoUCk6UFkoUCkpLGM9cj9rOShQKTpx''@;'; put 'put ''YihQKX1tJiYobltlKzFdPXI/UFkoaSk6SFkoaSkpfWZ1bmN0aW9uIG9NZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJlYwKG4sdCk+PTB9Y29uc3Qg''@;'; put 'put ''TTA9e3RleHRFbmQ6MCxrZXk6MCxrZXlFbmQ6MCx2YWx1ZTowLHZhbHVlRW5kOjB9O2Z1bmN0aW9uIHlsZShuKXtyZXR1cm4gbi5zdWJzdHJpbmcoTTAua2V5LE0wLmtleUVuZCl9ZnVuY3Rpb24gX2xlKG4sdCl7Y29uc3QgZT1NMC50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD1NMC5rZXlF''@;'; put 'put ''bmQ9ZnVuY3Rpb24gdU1lKG4sdCxlKXtmb3IoO3Q8ZSYmbi5jaGFyQ29kZUF0KHQpPjMyOyl0Kys7cmV0dXJuIHR9KG4sTTAua2V5PXQsZSksSmIobix0LGUpKX1mdW5jdGlvbiBKYihuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiB5''@;'; put 'put ''ZShuLHQsZSl7Y29uc3Qgcj1VcigpO3JldHVybiBsdShyLHNoKCksdCkmJmoxKEVvKCksZGwoKSxyLG4sdCxyWzExXSxlLCExKSx5ZX1mdW5jdGlvbiBOWShuLHQsZSxyLGkpeyR4KHQsbixlLGk/ImNsYXNzIjoic3R5bGUiLHIpfWZ1bmN0aW9uIFRkKG4sdCxlKXtyZXR1cm4gVjMobix0LGUs''@;'; put 'put ''ITEpLFRkfWZ1bmN0aW9uIGJyKG4sdCl7cmV0dXJuIFYzKG4sdCxudWxsLCEwKSxicn1mdW5jdGlvbiB0NChuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbiBsTWUobil7cmV0dXJuIGZ1bmN0aW9uIHdsZShuKXtNMC5rZXk9MCxNMC5rZXlFbmQ9MCxNMC52YWx1ZT0wLE0wLnZhbHVlRW5kPTAsTTAu''@;'; put 'put ''dGV4dEVuZD1uLmxlbmd0aH0obiksX2xlKG4sSmIobiwwLE0wLnRleHRFbmQpKX0odCk7ZT49MDtlPV9sZSh0LGUpKXZsKG4seWxlKHQpLCEwKX1mdW5jdGlvbiBWMyhuLHQsZSxyKXtjb25zdCBpPVVyKCksYT1FbygpLGM9TTMoMik7YS5maXJzdFVwZGF0ZVBhc3MmJkVsZShhLG4sYyxyKSx0''@;'; put 'put ''IT09T28mJmx1KGksYyx0KSYmQWxlKGEsYS5kYXRhW2t1KCldLGksaVsxMV0sbixpW2MrMV09ZnVuY3Rpb24gd01lKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49cW4oTDMobikpKSksbn0odCxlKSxy''@;'; put 'put ''LGMpfWZ1bmN0aW9uIHhsZShuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIEVsZShuLHQsZSxyKXtjb25zdCBpPW4uZGF0YTtpZihudWxsPT09aVtlKzFdKXtjb25zdCBhPWlba3UoKV0sYz14bGUobixlKTtEbGUoYSxyKSYmbnVsbD09PXQmJiFjJiYodD0hMSks''@;'; put 'put ''dD1mdW5jdGlvbiBwTWUobix0LGUscil7Y29uc3QgaT1DTShuKTtsZXQgYT1yP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7aWYobnVsbD09PWkpMD09PShyP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpJiYoZT1ERShlPVZZKG51bGwsbix0LGUsciksdC5hdHRy''@;'; put 'put ''cyxyKSxhPW51bGwpO2Vsc2V7Y29uc3QgYz10LmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09Y3x8bltjXSE9PWkpaWYoZT1WWShpLG4sdCxlLHIpLG51bGw9PT1hKXtsZXQgQz1mdW5jdGlvbiBnTWUobix0LGUpe2NvbnN0IHI9ZT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdz''@;'; put 'put ''O2lmKDAhPT1xYihyKSlyZXR1cm4gbltrOShyKV19KG4sdCxyKTt2b2lkIDAhPT1DJiZBcnJheS5pc0FycmF5KEMpJiYoQz1WWShudWxsLG4sdCxDWzFdLHIpLEM9REUoQyx0LmF0dHJzLHIpLGZ1bmN0aW9uIG1NZShuLHQsZSxyKXtuW2s5KGU/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5k''@;'; put 'put ''aW5ncyldPXJ9KG4sdCxyLEMpKX1lbHNlIGE9ZnVuY3Rpb24gdk1lKG4sdCxlKXtsZXQgcjtjb25zdCBpPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgYT0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7YTxpO2ErKylyPURFKHIsblthXS5ob3N0QXR0cnMsZSk7cmV0dXJuIERFKHIsdC5hdHRycyxl''@;'; put 'put ''KX0obix0LHIpfXJldHVybiB2b2lkIDAhPT1hJiYocj90LnJlc2lkdWFsQ2xhc3Nlcz1hOnQucmVzaWR1YWxTdHlsZXM9YSksZX0oaSxhLHQsciksZnVuY3Rpb24gaU1lKG4sdCxlLHIsaSxhKXtsZXQgYz1hP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MsbT1rOShjKSxDPXFiKGMp''@;'; put 'put ''O25bcl09ZTtsZXQgWSxQPSExO2lmKEFycmF5LmlzQXJyYXkoZSk/KFk9ZVsxXSwobnVsbD09PVl8fFYwKGUsWSk+MCkmJihQPSEwKSk6WT1lLGkpaWYoMCE9PUMpe2NvbnN0IGNlPWs5KG5bbSsxXSk7bltyKzFdPVFPKGNlLG0pLDAhPT1jZSYmKG5bY2UrMV09RlkobltjZSsxXSxyKSksbltt''@;'; put 'put ''KzFdPWZ1bmN0aW9uIG5NZShuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30oblttKzFdLHIpfWVsc2UgbltyKzFdPVFPKG0sMCksMCE9PW0mJihuW20rMV09RlkoblttKzFdLHIpKSxtPXI7ZWxzZSBuW3IrMV09UU8oQywwKSwwPT09bT9tPXI6bltDKzFdPUZZKG5bQysxXSxyKSxDPXI7UCYm''@;'; put 'put ''KG5bcisxXT1QWShuW3IrMV0pKSx2bGUobixZLHIsITApLHZsZShuLFksciwhMSksZnVuY3Rpb24gYU1lKG4sdCxlLHIsaSl7Y29uc3QgYT1pP24ucmVzaWR1YWxDbGFzc2VzOm4ucmVzaWR1YWxTdHlsZXM7bnVsbCE9YSYmInN0cmluZyI9PXR5cGVvZiB0JiZWMChhLHQpPj0wJiYoZVtyKzFd''@;'; put 'put ''PUhZKGVbcisxXSkpfSh0LFksbixyLGEpLGM9UU8obSxDKSxhP3QuY2xhc3NCaW5kaW5ncz1jOnQuc3R5bGVCaW5kaW5ncz1jfShpLGEsdCxlLGMscil9fWZ1bmN0aW9uIFZZKG4sdCxlLHIsaSl7bGV0IGE9bnVsbDtjb25zdCBjPWUuZGlyZWN0aXZlRW5kO2xldCBtPWUuZGlyZWN0aXZlU3R5''@;'; put 'put ''bGluZ0xhc3Q7Zm9yKC0xPT09bT9tPWUuZGlyZWN0aXZlU3RhcnQ6bSsrO208YyYmKGE9dFttXSxyPURFKHIsYS5ob3N0QXR0cnMsaSksYSE9PW4pOyltKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1tKSxyfWZ1bmN0aW9uIERFKG4sdCxlKXtjb25zdCByPWU/''@;'; put 'put ''MToyO2xldCBpPS0xO2lmKG51bGwhPT10KWZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtjb25zdCBjPXRbYV07Im51bWJlciI9PXR5cGVvZiBjP2k9YzppPT09ciYmKEFycmF5LmlzQXJyYXkobil8fChuPXZvaWQgMD09PW4/W106WyIiLG5dKSx2bChuLGMsISFlfHx0WysrYV0pKX1yZXR1''@;'; put 'put ''cm4gdm9pZCAwPT09bj9udWxsOm59ZnVuY3Rpb24gQWxlKG4sdCxlLHIsaSxhLGMsbSl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2NvbnN0IEM9bi5kYXRhLFA9Q1ttKzFdLFk9ZnVuY3Rpb24gck1lKG4pe3JldHVybiEoMSZ+bil9KFApP2tsZShDLHQsZSxpLHFiKFApLGMpOnZvaWQgMDtlUChZ''@;'; put 'put ''KXx8KGVQKGEpfHxmdW5jdGlvbiB0TWUobil7cmV0dXJuISgyJn5uKX0oUCkmJihhPWtsZShDLG51bGwsZSxpLG0sYykpLGZ1bmN0aW9uIGtaKG4sdCxlLHIsaSl7aWYodClpP24uYWRkQ2xhc3MoZSxyKTpuLnJlbW92ZUNsYXNzKGUscik7ZWxzZXtsZXQgYT0tMT09PXIuaW5kZXhPZigiLSIp''@;'; put 'put ''P3ZvaWQgMDpXcC5EYXNoQ2FzZTtudWxsPT1pP24ucmVtb3ZlU3R5bGUoZSxyLGEpOigic3RyaW5nIj09dHlwZW9mIGkmJmkuZW5kc1dpdGgoIiFpbXBvcnRhbnQiKSYmKGk9aS5zbGljZSgwLC0xMCksYXw9V3AuSW1wb3J0YW50KSxuLnNldFN0eWxlKGUscixpLGEpKX19KHIsYyxtbShrdSgp''@;'; put 'put ''LGUpLGksYSkpfWZ1bmN0aW9uIGtsZShuLHQsZSxyLGksYSl7Y29uc3QgYz1udWxsPT09dDtsZXQgbTtmb3IoO2k+MDspe2NvbnN0IEM9bltpXSxQPUFycmF5LmlzQXJyYXkoQyksWT1QP0NbMV06QyxKPW51bGw9PT1ZO2xldCBjZT1lW2krMV07Y2U9PT1PbyYmKGNlPUo/a3M6dm9pZCAwKTts''@;'; put 'put ''ZXQgZmU9Sj90NyhjZSxyKTpZPT09cj9jZTp2b2lkIDA7aWYoUCYmIWVQKGZlKSYmKGZlPXQ3KEMscikpLGVQKGZlKSYmKG09ZmUsYykpcmV0dXJuIG07Y29uc3QgQWU9bltpKzFdO2k9Yz9rOShBZSk6cWIoQWUpfWlmKG51bGwhPT10KXtsZXQgQz1hP3QucmVzaWR1YWxDbGFzc2VzOnQucmVz''@;'; put 'put ''aWR1YWxTdHlsZXM7bnVsbCE9QyYmKG09dDcoQyxyKSl9cmV0dXJuIG19ZnVuY3Rpb24gZVAobil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gRGxlKG4sdCl7cmV0dXJuISEobi5mbGFncyYodD84OjE2KSl9ZnVuY3Rpb24gSWxlKG4sdCxlKXshZnVuY3Rpb24gQjMobix0LGUscil7Y29u''@;'; put 'put ''c3QgaT1FbygpLGE9TTMoMik7aS5maXJzdFVwZGF0ZVBhc3MmJkVsZShpLG51bGwsYSxyKTtjb25zdCBjPVVyKCk7aWYoZSE9PU9vJiZsdShjLGEsZSkpe2NvbnN0IG09aS5kYXRhW2t1KCldO2lmKERsZShtLHIpJiYheGxlKGksYSkpe2xldCBDPXI/bS5jbGFzc2VzV2l0aG91dEhvc3Q6bS5z''@;'; put 'put ''dHlsZXNXaXRob3V0SG9zdDtudWxsIT09QyYmKGU9Z2koQyxlfHwiIikpLE5ZKGksbSxjLGUscil9ZWxzZSFmdW5jdGlvbiBiTWUobix0LGUscixpLGEsYyxtKXtpPT09T28mJihpPWtzKTtsZXQgQz0wLFA9MCxZPTA8aS5sZW5ndGg/aVswXTpudWxsLEo9MDxhLmxlbmd0aD9hWzBdOm51bGw7''@;'; put 'put ''Zm9yKDtudWxsIT09WXx8bnVsbCE9PUo7KXtjb25zdCBjZT1DPGkubGVuZ3RoP2lbQysxXTp2b2lkIDAsZmU9UDxhLmxlbmd0aD9hW1ArMV06dm9pZCAwO2xldCBIZSxBZT1udWxsO1k9PT1KPyhDKz0yLFArPTIsY2UhPT1mZSYmKEFlPUosSGU9ZmUpKTpudWxsPT09Snx8bnVsbCE9PVkmJlk8''@;'; put 'put ''Sj8oQys9MixBZT1ZKTooUCs9MixBZT1KLEhlPWZlKSxudWxsIT09QWUmJkFsZShuLHQsZSxyLEFlLEhlLGMsbSksWT1DPGkubGVuZ3RoP2lbQ106bnVsbCxKPVA8YS5sZW5ndGg/YVtQXTpudWxsfX0oaSxtLGMsY1sxMV0sY1thKzFdLGNbYSsxXT1mdW5jdGlvbiB5TWUobix0LGUpe2lmKG51''@;'; put 'put ''bGw9PWV8fCIiPT09ZSlyZXR1cm4ga3M7Y29uc3Qgcj1bXSxpPUwzKGUpO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBhPTA7YTxpLmxlbmd0aDthKyspbihyLGlbYV0sITApO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcihjb25zdCBhIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShh''@;'; put 'put ''KSYmbihyLGEsaVthXSk7ZWxzZSJzdHJpbmciPT10eXBlb2YgaSYmdChyLGkpO3JldHVybiByfShuLHQsZSkscixhKX19KHZsLHQ0LFViKFVyKCksbix0LGUpLCEwKX1mdW5jdGlvbiByZShuLHQsZSxyKXtjb25zdCBpPVVyKCksYT1FbygpLGM9MjYrbixtPWlbMTFdLEM9YS5maXJzdENyZWF0''@;'; put 'put ''ZVBhc3M/ZnQoYyxhLGksdCxaeCxEXygpLGUscik6YS5kYXRhW2NdLFA9UGxlKGEsaSxDLG0sdCxuKTtpW2NdPVA7Y29uc3QgWT1BZyhDKTtyZXR1cm4gcjIoQywhMCksUEwobSxQLEMpLCFPMyhDKSYmT2coKSYmQ2IoYSxpLFAsQyksKDA9PT1mdW5jdGlvbiBMSSgpe3JldHVybiBrby5sRnJh''@;'; put 'put ''bWUuZWxlbWVudERlcHRoQ291bnR9KCl8fFkpJiZXMChQLGkpLGZ1bmN0aW9uIFh6KCl7a28ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksWSYmKHliKGEsaSxDKSxFeChhLEMsaSkpLG51bGwhPT1yJiZXeChpLEMpLHJlfWZ1bmN0aW9uIGllKCl7bGV0IG49UW8oKTtfTSgpP2JNKCk6''@;'; put 'put ''KG49bi5wYXJlbnQscjIobiwhMSkpO2NvbnN0IHQ9bjsoZnVuY3Rpb24gcXoobil7cmV0dXJuIGtvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9PT1ufSkodCkmJmZ1bmN0aW9uIGVVKCl7a28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT1udWxsfSgpLGZ1bmN0aW9uIE9JKCl7a28ubEZyYW1lLmVs''@;'; put 'put ''ZW1lbnREZXB0aENvdW50LS19KCk7Y29uc3QgZT1FbygpO3JldHVybiBlLmZpcnN0Q3JlYXRlUGFzcyYmUnQoZSx0KSxudWxsIT10LmNsYXNzZXNXaXRob3V0SG9zdCYmZnVuY3Rpb24gY1Uobil7cmV0dXJuISEoOCZuLmZsYWdzKX0odCkmJk5ZKGUsdCxVcigpLHQuY2xhc3Nlc1dpdGhvdXRI''@;'; put 'put ''b3N0LCEwKSxudWxsIT10LnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiB1VShuKXtyZXR1cm4hISgxNiZuLmZsYWdzKX0odCkmJk5ZKGUsdCxVcigpLHQuc3R5bGVzV2l0aG91dEhvc3QsITEpLGllfWZ1bmN0aW9uIFZ0KG4sdCxlLHIpe3JldHVybiByZShuLHQsZSxyKSxpZSgpLFZ0fWxl''@;'; put 'put ''dCBQbGU9KG4sdCxlLHIsaSxhKT0+KGRmKCEwKSxwYihyLGksZnVuY3Rpb24gdjcoKXtyZXR1cm4ga28ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2V9KCkpKTtmdW5jdGlvbiByaShuLHQsZSl7Y29uc3Qgcj1VcigpLGk9RW8oKSxhPW4rMjYsYz1pLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbiBa''@;'; put 'put ''TWUobix0LGUscixpKXtjb25zdCBhPXQuY29uc3RzLGM9Q2QoYSxyKSxtPWE2KHQsbiw4LCJuZy1jb250YWluZXIiLGMpO251bGwhPT1jJiZTRShtLGMsITApO2NvbnN0IEM9Q2QoYSxpKTtyZXR1cm4gRF8oKSYmTmIodCxlLG0sQyxaeCksbS5tZXJnZWRBdHRycz1fbShtLm1lcmdlZEF0dHJz''@;'; put 'put ''LG0uYXR0cnMpLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxtKSxtfShhLGkscix0LGUpOmkuZGF0YVthXTtyMihjLCEwKTtjb25zdCBtPUZsZShpLHIsYyxuKTtyZXR1cm4gclthXT1tLE9nKCkmJkNiKGkscixtLGMpLFcwKG0sciksQWcoYykmJih5YihpLHIs''@;'; put 'put ''YyksRXgoaSxjLHIpKSxudWxsIT1lJiZXeChyLGMpLHJpfWZ1bmN0aW9uIGlpKCl7bGV0IG49UW8oKTtjb25zdCB0PUVvKCk7cmV0dXJuIF9NKCk/Yk0oKToobj1uLnBhcmVudCxyMihuLCExKSksdC5maXJzdENyZWF0ZVBhc3MmJihUTSh0LG4pLGg3KG4pJiZ0LnF1ZXJpZXMuZWxlbWVudEVu''@;'; put 'put ''ZChuKSksaWl9ZnVuY3Rpb24gamwobix0LGUpe3JldHVybiByaShuLHQsZSksaWkoKSxqbH1sZXQgRmxlPShuLHQsZSxyKT0+KGRmKCEwKSxGeCh0WzExXSwiIikpO2Z1bmN0aW9uIEluKCl7cmV0dXJuIFVyKCl9ZnVuY3Rpb24gbjQobix0LGUpe2NvbnN0IHI9VXIoKTtyZXR1cm4gbHUocixz''@;'; put 'put ''aCgpLHQpJiZqMShFbygpLGRsKCkscixuLHQsclsxMV0sZSwhMCksbjR9ZnVuY3Rpb24gVVkobix0LGUpe2NvbnN0IHI9VXIoKTtpZihsdShyLHNoKCksdCkpe2NvbnN0IGE9RW8oKSxjPWRsKCk7ajEoYSxjLHIsbix0LFFMKENNKGEuZGF0YSksYyxyKSxlLCEwKX1yZXR1cm4gVVl9Y29uc3Qg''@;'; put 'put ''RDk9dm9pZCAwO3ZhciBLTWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxEOV0sW1siQU0iLCJQTSJdLEQ5LEQ5XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIs''@;'; put 'put ''IlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxEOSxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIs''@;'; put 'put ''IkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIi''@;'; put 'put ''XV0sRDksW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpz''@;'; put 'put ''cyBhIHp6enoiXSxbInsxfSwgezB9IixEOSwiezF9ICdhdCcgezB9IixEOV0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwi''@;'; put 'put ''VVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiAkTWUobil7Y29uc3QgdD1NYXRoLmZsb29yKE1hdGguYWJzKG4pKSxlPW4udG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT10JiYwPT09ZT8xOjV9XTtsZXQgUWI9e307ZnVuY3Rpb24gWjEobil7''@;'; put 'put ''Y29uc3QgdD1mdW5jdGlvbiBxTWUobil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obik7bGV0IGU9TmxlKHQpO2lmKGUpcmV0dXJuIGU7Y29uc3Qgcj10LnNwbGl0KCItIilbMF07aWYoZT1ObGUociksZSlyZXR1cm4gZTtpZigiZW4iPT09cilyZXR1cm4gS01l''@;'; put 'put ''O3Rocm93IG5ldyBrcig3MDEsITEpfWZ1bmN0aW9uIE5sZShuKXtyZXR1cm4gbiBpbiBRYnx8KFFiW25dPVlzLm5nJiZZcy5uZy5jb21tb24mJllzLm5nLmNvbW1vbi5sb2NhbGVzJiZZcy5uZy5jb21tb24ubG9jYWxlc1tuXSksUWJbbl19dmFyIG5jPWZ1bmN0aW9uKG4pe3JldHVybiBuW24u''@;'; put 'put ''TG9jYWxlSWQ9MF09IkxvY2FsZUlkIixuW24uRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsbltuLkRheVBlcmlvZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsbltuLkRheXNGb3JtYXQ9M109IkRheXNGb3JtYXQiLG5bbi5EYXlzU3RhbmRhbG9u''@;'; put 'put ''ZT00XT0iRGF5c1N0YW5kYWxvbmUiLG5bbi5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsbltuLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLG5bbi5FcmFzPTddPSJFcmFzIixuW24uRmlyc3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixuW24uV2Vl''@;'; put 'put ''a2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLG5bbi5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsbltuLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9ybWF0IixuW24uRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZvcm1hdCIsbltuLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1i''@;'; put 'put ''b2xzIixuW24uTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLG5bbi5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLG5bbi5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixuW24uQ3VycmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixuW24uQ3VycmVu''@;'; put 'put ''Y2llcz0xOF09IkN1cnJlbmNpZXMiLG5bbi5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixuW24uUGx1cmFsQ2FzZT0yMF09IlBsdXJhbENhc2UiLG5bbi5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLG59KG5jfHx7fSk7Y29uc3QgblA9ImVuLVVTIjtsZXQgVmxlPW5QO2Z1''@;'; put 'put ''bmN0aW9uIGljZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uIHIoaSl7aWYoaT09PUZ1bmN0aW9uKXJldHVybiBlO2M5KGJkKG4pP3AxKG4uaW5kZXgsdCk6dCw1KTtjb25zdCBjPXRbOF07bGV0IG09YWNlKHQsYyxlLGkpLEM9ci5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO0M7KW09YWNlKHQs''@;'; put 'put ''YyxDLGkpJiZtLEM9Qy5fX25nTmV4dExpc3RlbmVyRm5fXztyZXR1cm4gbX19ZnVuY3Rpb24gYWNlKG4sdCxlLHIpe2NvbnN0IGk9aGUobnVsbCk7dHJ5e3JldHVybiExIT09ZShyKX1jYXRjaChhKXtyZXR1cm4gZnVuY3Rpb24gTnhlKG4sdCl7Y29uc3QgZT1uWzldLHI9ZT9lLmdldChhMixu''@;'; put 'put ''dWxsKTpudWxsO3ImJnIuaGFuZGxlRXJyb3IodCl9KG4sYSksITF9ZmluYWxseXtoZShpKX19ZnVuY3Rpb24gb2NlKG4sdCxlLHIsaSxhKXtjb25zdCBtPXRbMV0sWT10W2VdW20uZGF0YVtlXS5vdXRwdXRzW3JdXSxKPW0uZmlyc3RDcmVhdGVQYXNzP1RfKG0pOm51bGwsY2U9dk0odCksZmU9''@;'; put 'put ''WS5zdWJzY3JpYmUoYSksQWU9Y2UubGVuZ3RoO2NlLnB1c2goYSxmZSksSiYmSi5wdXNoKGksbi5pbmRleCxBZSwtKEFlKzEpKX1mdW5jdGlvbiBrdChuLHQsZSxyKXtjb25zdCBpPVVyKCksYT1FbygpLGM9UW8oKTtyZXR1cm4gR1koYSxpLGlbMTFdLGMsbix0LHIpLGt0fWZ1bmN0aW9uIFlZ''@;'; put 'put ''KG4sdCl7Y29uc3QgZT1RbygpLHI9VXIoKSxpPUVvKCk7cmV0dXJuIEdZKGkscixRTChDTShpLmRhdGEpLGUsciksZSxuLHQpLFlZfWZ1bmN0aW9uIEdZKG4sdCxlLHIsaSxhLGMpe2NvbnN0IG09QWcociksUD1uLmZpcnN0Q3JlYXRlUGFzcz9UXyhuKTpudWxsLFk9dk0odCk7bGV0IEo9ITA7''@;'; put 'put ''aWYoMyZyLnR5cGV8fGMpe2NvbnN0IGNlPWYxKHIsdCksZmU9Yz9jKGNlKTpjZSxBZT1ZLmxlbmd0aCxIZT1jP3J0PT5jKE9zKHJ0W3IuaW5kZXhdKSk6ci5pbmRleDtsZXQgWGU9bnVsbDtpZighYyYmbSYmKFhlPWZ1bmN0aW9uIFZ4ZShuLHQsZSxyKXtjb25zdCBpPW4uY2xlYW51cDtpZihu''@;'; put 'put ''dWxsIT1pKWZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKz0yKXtjb25zdCBjPWlbYV07aWYoYz09PWUmJmlbYSsxXT09PXIpe2NvbnN0IG09dFs3XSxDPWlbYSsyXTtyZXR1cm4gbS5sZW5ndGg+Qz9tW0NdOm51bGx9InN0cmluZyI9PXR5cGVvZiBjJiYoYSs9Mil9cmV0dXJuIG51bGx9KG4s''@;'; put 'put ''dCxpLHIuaW5kZXgpKSxudWxsIT09WGUpKFhlLl9fbmdMYXN0TGlzdGVuZXJGbl9ffHxYZSkuX19uZ05leHRMaXN0ZW5lckZuX189YSxYZS5fX25nTGFzdExpc3RlbmVyRm5fXz1hLEo9ITE7ZWxzZXthPWljZShyLHQsYSk7Y29uc3QgcnQ9ZS5saXN0ZW4oZmUsaSxhKTtZLnB1c2goYSxydCks''@;'; put 'put ''UCYmUC5wdXNoKGksSGUsQWUsQWUrMSl9fWVsc2UgYT1pY2Uocix0LGEpO2lmKEope2NvbnN0IGNlPXIub3V0cHV0cz8uW2ldLGZlPXIuaG9zdERpcmVjdGl2ZU91dHB1dHM/LltpXTtpZihmZSYmZmUubGVuZ3RoKWZvcihsZXQgQWU9MDtBZTxmZS5sZW5ndGg7QWUrPTIpb2NlKHIsdCxmZVtB''@;'; put 'put ''ZV0sZmVbQWUrMV0saSxhKTtpZihjZSYmY2UubGVuZ3RoKWZvcihjb25zdCBBZSBvZiBjZSlvY2Uocix0LEFlLGksaSxhKX19ZnVuY3Rpb24gRWUobj0xKXtyZXR1cm4gZnVuY3Rpb24gbTcobil7cmV0dXJuKGtvLmxGcmFtZS5jb250ZXh0TFZpZXc9ZnVuY3Rpb24gUkkobix0KXtmb3IoO24+''@;'; put 'put ''MDspdD10WzE0XSxuLS07cmV0dXJuIHR9KG4sa28ubEZyYW1lLmNvbnRleHRMVmlldykpWzhdfShuKX1mdW5jdGlvbiBCeGUobix0KXtsZXQgZT1udWxsO2NvbnN0IHI9ZnVuY3Rpb24gYVoobil7Y29uc3QgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2NvbnN0IGU9dC5pbmRleE9mKDUpO2lmKCEo''@;'; put 'put ''MSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7Y29uc3QgYT10W2ldO2lmKCIqIiE9PWEpe2lmKG51bGw9PT1yP1dMKG4sYSwhMCk6c1oocixhKSlyZXR1cm4gaX1lbHNlIGU9aX1yZXR1cm4gZX1mdW5jdGlvbiBuYShuKXtjb25z''@;'; put 'put ''dCB0PVVyKClbMTVdWzVdO2lmKCF0LnByb2plY3Rpb24pe2NvbnN0IHI9dC5wcm9qZWN0aW9uPWZ1bmN0aW9uIGFtKG4sdCl7Y29uc3QgZT1bXTtmb3IobGV0IHI9MDtyPG47cisrKWUucHVzaCh0KTtyZXR1cm4gZX0obj9uLmxlbmd0aDoxLG51bGwpLGk9ci5zbGljZSgpO2xldCBhPXQuY2hp''@;'; put 'put ''bGQ7Zm9yKDtudWxsIT09YTspe2lmKDEyOCE9PWEudHlwZSl7Y29uc3QgYz1uP0J4ZShhLG4pOjA7bnVsbCE9PWMmJihpW2NdP2lbY10ucHJvamVjdGlvbk5leHQ9YTpyW2NdPWEsaVtjXT1hKX1hPWEubmV4dH19fWZ1bmN0aW9uIEJyKG4sdD0wLGUscixpLGEpe2NvbnN0IGM9VXIoKSxtPUVv''@;'; put 'put ''KCksQz1yP24rMTpudWxsO251bGwhPT1DJiZ4RShjLG0sQyxyLGksYSxudWxsLGUpO2NvbnN0IFA9YTYobSwyNituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PVAucHJvamVjdGlvbiYmKFAucHJvamVjdGlvbj10KSxiTSgpO2NvbnN0IEo9IWNbNl18fFJnKCk7bnVsbD09PWNbMTVdWzVdLnBy''@;'; put 'put ''b2plY3Rpb25bUC5wcm9qZWN0aW9uXSYmbnVsbCE9PUM/ZnVuY3Rpb24ganhlKG4sdCxlKXtjb25zdCByPTI2K2UsaT10LmRhdGFbcl0sYT1uW3JdO1pwKGEsSm0obixpLHZvaWQgMCx7ZGVoeWRyYXRlZFZpZXc6bnVsbH0pLDAsVXAoaSxudWxsKSl9KGMsbSxDKTpKJiYhTzMoUCkmJmZ1bmN0''@;'; put 'put ''aW9uIFRaKG4sdCxlKXtsTyh0WzExXSwwLHQsZSxKeChuLGUsdCksck8oZS5wYXJlbnR8fHRbNV0sZSx0KSl9KG0sYyxQKX1mdW5jdGlvbiBQRShuLHQsZSl7cmV0dXJuICRZKG4sIiIsdCwiIixlKSxQRX1mdW5jdGlvbiAkWShuLHQsZSxyLGkpe2NvbnN0IGE9VXIoKSxjPVViKGEsdCxlLHIp''@;'; put 'put ''O3JldHVybiBjIT09T28mJmoxKEVvKCksZGwoKSxhLG4sYyxhWzExXSxpLCExKSwkWX1mdW5jdGlvbiBzbyhuLHQsZSxyKXshZnVuY3Rpb24gSWMobix0LGUscil7Y29uc3QgaT1FbygpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBhPVFvKCk7aGMoaSxuZXcgUWkodCxlLHIpLGEuaW5k''@;'; put 'put ''ZXgpLGZ1bmN0aW9uIGVuKG4sdCl7Y29uc3QgZT1uLmNvbnRlbnRRdWVyaWVzfHwobi5jb250ZW50UXVlcmllcz1bXSk7dCE9PShlLmxlbmd0aD9lW2UubGVuZ3RoLTFdOi0xKSYmZS5wdXNoKG4ucXVlcmllcy5sZW5ndGgtMSx0KX0oaSxuKSwhKDImfmUpJiYoaS5zdGF0aWNDb250ZW50UXVl''@;'; put 'put ''cmllcz0hMCl9cmV0dXJuIFpjKGksVXIoKSxlKX0obix0LGUscil9ZnVuY3Rpb24gV2Eobix0LGUpeyFmdW5jdGlvbiBEYyhuLHQsZSl7Y29uc3Qgcj1FbygpO3JldHVybiByLmZpcnN0Q3JlYXRlUGFzcyYmKGhjKHIsbmV3IFFpKG4sdCxlKSwtMSksISgyJn50KSYmKHIuc3RhdGljVmlld1F1''@;'; put 'put ''ZXJpZXM9ITApKSxaYyhyLFVyKCksdCl9KG4sdCxlKX1mdW5jdGlvbiBkaShuKXtjb25zdCB0PVVyKCksZT1FbygpLHI9U00oKTtSXyhyKzEpO2NvbnN0IGk9TW4oZSxyKTtpZihuLmRpcnR5JiZmdW5jdGlvbiBHeihuKXtyZXR1cm4hKDQmfm5bMl0pfSh0KT09PSEoMiZ+aS5tZXRhZGF0YS5m''@;'; put 'put ''bGFncykpe2lmKG51bGw9PT1pLm1hdGNoZXMpbi5yZXNldChbXSk7ZWxzZXtjb25zdCBhPVVuKHQscik7bi5yZXNldChhLE1tKSxuLm5vdGlmeU9uQ2hhbmdlcygpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGhpKCl7cmV0dXJuIGZ1bmN0aW9uIFBzKG4sdCl7cmV0dXJuIG5bMThdLnF1''@;'; put 'put ''ZXJpZXNbdF0ucXVlcnlMaXN0fShVcigpLFNNKCkpfWZ1bmN0aW9uIGRhKG4pe3JldHVybiBJZyhmdW5jdGlvbiBISSgpe3JldHVybiBrby5sRnJhbWUuY29udGV4dExWaWV3fSgpLDI2K24pfWZ1bmN0aW9uIFRlKG4sdD0iIil7Y29uc3QgZT1VcigpLHI9RW8oKSxpPW4rMjYsYT1yLmZpcnN0''@;'; put 'put ''Q3JlYXRlUGFzcz9hNihyLGksMSx0LG51bGwpOnIuZGF0YVtpXSxjPU1jZShyLGUsYSx0LG4pO2VbaV09YyxPZygpJiZDYihyLGUsYyxhKSxyMihhLCExKX1sZXQgTWNlPShuLHQsZSxyLGkpPT4oZGYoITApLGZ1bmN0aW9uICRtKG4sdCl7cmV0dXJuIG4uY3JlYXRlVGV4dCh0KX0odFsxMV0s''@;'; put 'put ''cikpO2Z1bmN0aW9uIHZyKG4pe3JldHVybiBNcigiIixuLCIiKSx2cn1mdW5jdGlvbiBNcihuLHQsZSl7Y29uc3Qgcj1VcigpLGk9VWIocixuLHQsZSk7cmV0dXJuIGkhPT1PbyYmR2cocixrdSgpLGkpLE1yfWZ1bmN0aW9uIG4wKG4sdCxlLHIsaSl7Y29uc3QgYT1VcigpLGM9ZnVuY3Rpb24g''@;'; put 'put ''V2Iobix0LGUscixpLGEpe2NvbnN0IG09VDkobix1ZigpLGUsaSk7cmV0dXJuIE0zKDIpLG0/dCtvbyhlKStyK29vKGkpK2E6T299KGEsbix0LGUscixpKTtyZXR1cm4gYyE9PU9vJiZHZyhhLGt1KCksYyksbjB9ZnVuY3Rpb24gajMobix0LGUscixpLGEsYyl7Y29uc3QgbT1VcigpLEM9ZnVu''@;'; put 'put ''Y3Rpb24gWmIobix0LGUscixpLGEsYyxtKXtjb25zdCBQPUdPKG4sdWYoKSxlLGksYyk7cmV0dXJuIE0zKDMpLFA/dCtvbyhlKStyK29vKGkpK2Erb28oYykrbTpPb30obSxuLHQsZSxyLGksYSxjKTtyZXR1cm4gQyE9PU9vJiZHZyhtLGt1KCksQyksajN9ZnVuY3Rpb24gc1Aobix0LGUscixp''@;'; put 'put ''LGEsYyxtLEMpe2NvbnN0IFA9VXIoKSxZPWZ1bmN0aW9uIFliKG4sdCxlLHIsaSxhLGMsbSxDLFApe2NvbnN0IEo9eGYobix1ZigpLGUsaSxjLEMpO3JldHVybiBNMyg0KSxKP3Qrb28oZSkrcitvbyhpKSthK29vKGMpK20rb28oQykrUDpPb30oUCxuLHQsZSxyLGksYSxjLG0sQyk7cmV0dXJu''@;'; put 'put ''IFkhPT1PbyYmR2coUCxrdSgpLFkpLHNQfWZ1bmN0aW9uIEdnKG4sdCxlKXtjb25zdCByPW1tKHQsbik7IWZ1bmN0aW9uIElMKG4sdCxlKXtuLnNldFZhbHVlKHQsZSl9KG5bMTFdLHIsZSl9ZnVuY3Rpb24gbGkobix0LGUpe3dSKHQpJiYodD10KCkpO2NvbnN0IHI9VXIoKTtyZXR1cm4gbHUo''@;'; put 'put ''cixzaCgpLHQpJiZqMShFbygpLGRsKCkscixuLHQsclsxMV0sZSwhMSksbGl9ZnVuY3Rpb24gdWkobix0KXtjb25zdCBlPXdSKG4pO3JldHVybiBlJiZuLnNldCh0KSxlfWZ1bmN0aW9uIGNpKG4sdCl7Y29uc3QgZT1VcigpLHI9RW8oKSxpPVFvKCk7cmV0dXJuIEdZKHIsZSxlWzExXSxpLG4s''@;'; put 'put ''dCksY2l9ZnVuY3Rpb24gS1kobix0LGUscixpKXtpZihuPXZhKG4pLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspS1koblthXSx0LGUscixpKTtlbHNle2NvbnN0IGE9RW8oKSxjPVVyKCksbT1RbygpO2xldCBDPWczKG4pP246dmEobi5wcm92aWRlKTtjb25z''@;'; put 'put ''dCBQPXBfKG4pLFk9MTA0ODU3NSZtLnByb3ZpZGVySW5kZXhlcyxKPW0uZGlyZWN0aXZlU3RhcnQsY2U9bS5wcm92aWRlckluZGV4ZXM+PjIwO2lmKGczKG4pfHwhbi5tdWx0aSl7Y29uc3QgZmU9bmV3IGI3KFAsaSxXZSksQWU9cVkoQyx0LGk/WTpZK2NlLEopOy0xPT09QWU/KExNKEM3KG0s''@;'; put 'put ''YyksYSxDKSxYWShhLG4sdC5sZW5ndGgpLHQucHVzaChDKSxtLmRpcmVjdGl2ZVN0YXJ0KyssbS5kaXJlY3RpdmVFbmQrKyxpJiYobS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChmZSksYy5wdXNoKGZlKSk6KGVbQWVdPWZlLGNbQWVdPWZlKX1lbHNle2NvbnN0IGZlPXFZKEMs''@;'; put 'put ''dCxZK2NlLEopLEFlPXFZKEMsdCxZLFkrY2UpLFhlPUFlPj0wJiZlW0FlXTtpZihpJiYhWGV8fCFpJiYhKGZlPj0wJiZlW2ZlXSkpe0xNKEM3KG0sYyksYSxDKTtjb25zdCBydD1mdW5jdGlvbiBsRWUobix0LGUscixpKXtjb25zdCBhPW5ldyBiNyhuLGUsV2UpO3JldHVybiBhLm11bHRpPVtd''@;'; put 'put ''LGEuaW5kZXg9dCxhLmNvbXBvbmVudFByb3ZpZGVycz0wLFJjZShhLGksciYmIWUpLGF9KGk/c0VlOm9FZSxlLmxlbmd0aCxpLHIsUCk7IWkmJlhlJiYoZVtBZV0ucHJvdmlkZXJGYWN0b3J5PXJ0KSxYWShhLG4sdC5sZW5ndGgsMCksdC5wdXNoKEMpLG0uZGlyZWN0aXZlU3RhcnQrKyxtLmRp''@;'; put 'put ''cmVjdGl2ZUVuZCsrLGkmJihtLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksZS5wdXNoKHJ0KSxjLnB1c2gocnQpfWVsc2UgWFkoYSxuLGZlPi0xP2ZlOkFlLFJjZShlW2k/QWU6ZmVdLFAsIWkmJnIpKTshaSYmciYmWGUmJmVbQWVdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24g''@;'; put 'put ''WFkobix0LGUscil7Y29uc3QgaT1nMyh0KSxhPWZ1bmN0aW9uIGhfKG4pe3JldHVybiEhbi51c2VDbGFzc30odCk7aWYoaXx8YSl7Y29uc3QgQz0oYT92YSh0LnVzZUNsYXNzKTp0KS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoQyl7Y29uc3QgUD1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJv''@;'; put 'put ''eUhvb2tzPVtdKTtpZighaSYmdC5tdWx0aSl7Y29uc3QgWT1QLmluZGV4T2YoZSk7LTE9PT1ZP1AucHVzaChlLFtyLENdKTpQW1krMV0ucHVzaChyLEMpfWVsc2UgUC5wdXNoKGUsQyl9fX1mdW5jdGlvbiBSY2Uobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVs''@;'; put 'put ''dGkucHVzaCh0KS0xfWZ1bmN0aW9uIHFZKG4sdCxlLHIpe2ZvcihsZXQgaT1lO2k8cjtpKyspaWYodFtpXT09PW4pcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gb0VlKG4sdCxlLHIsaSl7cmV0dXJuIEpZKHRoaXMubXVsdGksW10pfWZ1bmN0aW9uIHNFZShuLHQsZSxyLGkpe2NvbnN0IGE9''@;'; put 'put ''dGhpcy5tdWx0aTtsZXQgYztpZih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3QgbT10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsQz1TNyhyLHJbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7Yz1DLnNsaWNlKDAsbSksSlkoYSxjKTtmb3IobGV0IFA9''@;'; put 'put ''bTtQPEMubGVuZ3RoO1ArKyljLnB1c2goQ1tQXSl9ZWxzZSBjPVtdLEpZKGEsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gSlkobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gc2Eobix0PVtdKXtyZXR1cm4gZT0+e2UucHJv''@;'; put 'put ''dmlkZXJzUmVzb2x2ZXI9KHIsaSk9PmZ1bmN0aW9uIGFFZShuLHQsZSl7Y29uc3Qgcj1FbygpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBpPWgxKG4pO0tZKGUsci5kYXRhLHIuYmx1ZXByaW50LGksITApLEtZKHQsci5kYXRhLHIuYmx1ZXByaW50LGksITEpfX0ocixpP2kobik6bix0''@;'; put 'put ''KX19ZnVuY3Rpb24gbmwobix0LGUpe2NvbnN0IHI9ZzEoKStuLGk9VXIoKTtyZXR1cm4gaVtyXT09PU9vP1FwKGkscixlP3QuY2FsbChlKTp0KCkpOmZ1bmN0aW9uIE1FKG4sdCl7cmV0dXJuIG5bdF19KGkscil9ZnVuY3Rpb24gcjQobix0LGUscil7cmV0dXJuIE9jZShVcigpLGcxKCksbix0''@;'; put 'put ''LGUscil9ZnVuY3Rpb24gaTQobix0LGUscixpKXtyZXR1cm4gUGNlKFVyKCksZzEoKSxuLHQsZSxyLGkpfWZ1bmN0aW9uIEZFKG4sdCxlLHIsaSxhKXtyZXR1cm4gRmNlKFVyKCksZzEoKSxuLHQsZSxyLGksYSl9ZnVuY3Rpb24gY1Aobix0LGUscixpLGEsYyl7cmV0dXJuIGZ1bmN0aW9uIEhj''@;'; put 'put ''ZShuLHQsZSxyLGksYSxjLG0sQyl7Y29uc3QgUD10K2U7cmV0dXJuIHhmKG4sUCxpLGEsYyxtKT9RcChuLFArNCxDP3IuY2FsbChDLGksYSxjLG0pOnIoaSxhLGMsbSkpOkhFKG4sUCs0KX0oVXIoKSxnMSgpLG4sdCxlLHIsaSxhLGMpfWZ1bmN0aW9uIEhFKG4sdCl7Y29uc3QgZT1uW3RdO3Jl''@;'; put 'put ''dHVybiBlPT09T28/dm9pZCAwOmV9ZnVuY3Rpb24gT2NlKG4sdCxlLHIsaSxhKXtjb25zdCBjPXQrZTtyZXR1cm4gbHUobixjLGkpP1FwKG4sYysxLGE/ci5jYWxsKGEsaSk6cihpKSk6SEUobixjKzEpfWZ1bmN0aW9uIFBjZShuLHQsZSxyLGksYSxjKXtjb25zdCBtPXQrZTtyZXR1cm4gVDko''@;'; put 'put ''bixtLGksYSk/UXAobixtKzIsYz9yLmNhbGwoYyxpLGEpOnIoaSxhKSk6SEUobixtKzIpfWZ1bmN0aW9uIEZjZShuLHQsZSxyLGksYSxjLG0pe2NvbnN0IEM9dCtlO3JldHVybiBHTyhuLEMsaSxhLGMpP1FwKG4sQyszLG0/ci5jYWxsKG0saSxhLGMpOnIoaSxhLGMpKTpIRShuLEMrMyl9ZnVu''@;'; put 'put ''Y3Rpb24gaGwobix0KXtjb25zdCBlPUVvKCk7bGV0IHI7Y29uc3QgaT1uKzI2O2UuZmlyc3RDcmVhdGVQYXNzPyhyPWZ1bmN0aW9uIHZFZShuLHQpe2lmKHQpZm9yKGxldCBlPXQubGVuZ3RoLTE7ZT49MDtlLS0pe2NvbnN0IHI9dFtlXTtpZihuPT09ci5uYW1lKXJldHVybiByfX0odCxlLnBp''@;'; put 'put ''cGVSZWdpc3RyeSksZS5kYXRhW2ldPXIsci5vbkRlc3Ryb3kmJihlLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKGksci5vbkRlc3Ryb3kpKTpyPWUuZGF0YVtpXTtjb25zdCBhPXIuZmFjdG9yeXx8KHIuZmFjdG9yeT1mMyhyLnR5cGUpKSxtPWpjKFdlKTt0cnl7Y29uc3QgQz1GXyghMSksUD1h''@;'; put 'put ''KCk7cmV0dXJuIEZfKEMpLGZ1bmN0aW9uIGhNKG4sdCxlLHIpe2U+PW4uZGF0YS5sZW5ndGgmJihuLmRhdGFbZV09bnVsbCxuLmJsdWVwcmludFtlXT1udWxsKSx0W2VdPXJ9KGUsVXIoKSxpLFApLFB9ZmluYWxseXtqYyhtKX19ZnVuY3Rpb24gUmMobix0LGUpe2NvbnN0IHI9bisyNixpPVVy''@;'; put 'put ''KCksYT1JZyhpLHIpO3JldHVybiBORShpLHIpP09jZShpLGcxKCksdCxhLnRyYW5zZm9ybSxlLGEpOmEudHJhbnNmb3JtKGUpfWZ1bmN0aW9uIEk5KG4sdCxlLHIpe2NvbnN0IGk9bisyNixhPVVyKCksYz1JZyhhLGkpO3JldHVybiBORShhLGkpP1BjZShhLGcxKCksdCxjLnRyYW5zZm9ybSxl''@;'; put 'put ''LHIsYyk6Yy50cmFuc2Zvcm0oZSxyKX1mdW5jdGlvbiBRWShuLHQsZSxyLGkpe2NvbnN0IGE9bisyNixjPVVyKCksbT1JZyhjLGEpO3JldHVybiBORShjLGEpP0ZjZShjLGcxKCksdCxtLnRyYW5zZm9ybSxlLHIsaSxtKTptLnRyYW5zZm9ybShlLHIsaSl9ZnVuY3Rpb24gTkUobix0KXtyZXR1''@;'; put 'put ''cm4gblsxXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gQ2Mobix0KXtyZXR1cm4geGIobix0KX1jbGFzcyBoUHtmdWxsO21ham9yO21pbm9yO3BhdGNoO2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10O2NvbnN0IGU9dC5zcGxpdCgiLiIpO3RoaXMubWFqb3I9ZVswXSx0aGlzLm1pbm9yPWVbMV0s''@;'; put 'put ''dGhpcy5wYXRjaD1lLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgZlA9bmV3IGhQKCIxOS4yLjIxIik7Y2xhc3MgR0Vle25nTW9kdWxlRmFjdG9yeTtjb21wb25lbnRGYWN0b3JpZXM7Y29uc3RydWN0b3IodCxlKXt0aGlzLm5nTW9kdWxlRmFjdG9yeT10LHRoaXMuY29tcG9uZW50RmFjdG9y''@;'; put 'put ''aWVzPWV9fWxldCAkRWU9KCgpPT57Y2xhc3Mgbntjb21waWxlTW9kdWxlU3luYyhlKXtyZXR1cm4gbmV3IHlZKGUpfWNvbXBpbGVNb2R1bGVBc3luYyhlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcGlsZU1vZHVsZVN5bmMoZSkpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25l''@;'; put 'put ''bnRzU3luYyhlKXtjb25zdCByPXRoaXMuY29tcGlsZU1vZHVsZVN5bmMoZSksYT13ZihjMShlKS5kZWNsYXJhdGlvbnMpLnJlZHVjZSgoYyxtKT0+e2NvbnN0IEM9Sm8obSk7cmV0dXJuIEMmJmMucHVzaChuZXcgR24oQykpLGN9LFtdKTtyZXR1cm4gbmV3IEdFZShyLGEpfWNvbXBpbGVNb2R1''@;'; put 'put ''bGVBbmRBbGxDb21wb25lbnRzQXN5bmMoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhlKSl9Y2xlYXJDYWNoZSgpe31jbGVhckNhY2hlRm9yKGUpe31nZXRNb2R1bGVJZChlKXt9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpLHFFZT0oKCk9PntjbGFzcyBue3pvbmU9Sm4oSmEpO2NoYW5nZURldGVjdGlvblNjaGVkdWxlcj1Kbih1''@;'; put 'put ''aCk7YXBwbGljYXRpb25SZWY9Sm4oRWQpO19vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uO2luaXRpYWxpemUoKXt0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9ufHwodGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj10aGlzLnpvbmUub25NaWNyb3Rhc2tFbXB0''@;'; put 'put ''eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLmNoYW5nZURldGVjdGlvblNjaGVkdWxlci5ydW5uaW5nVGlja3x8dGhpcy56b25lLnJ1bigoKT0+e3RoaXMuYXBwbGljYXRpb25SZWYudGljaygpfSl9fSkpfW5nT25EZXN0cm95KCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlv''@;'; put 'put ''bj8udW5zdWJzY3JpYmUoKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gaUcoe25nWm9u''@;'; put 'put ''ZUZhY3Rvcnk6bixpZ25vcmVDaGFuZ2VzT3V0c2lkZVpvbmU6dCxzY2hlZHVsZUluUm9vdFpvbmU6ZX0pe3JldHVybiBuPz89KCk9Pm5ldyBKYSh7Li4uYUcoKSxzY2hlZHVsZUluUm9vdFpvbmU6ZX0pLFt7cHJvdmlkZTpKYSx1c2VGYWN0b3J5Om59LHtwcm92aWRlOmwxLG11bHRpOiEwLHVz''@;'; put 'put ''ZUZhY3Rvcnk6KCk9Pntjb25zdCByPUpuKHFFZSx7b3B0aW9uYWw6ITB9KTtyZXR1cm4oKT0+ci5pbml0aWFsaXplKCl9fSx7cHJvdmlkZTpsMSxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3Qgcj1KbihRRWUpO3JldHVybigpPT57ci5pbml0aWFsaXplKCl9fX0sITA9PT10P3twcm92''@;'; put 'put ''aWRlOmZSLHVzZVZhbHVlOiEwfTpbXSx7cHJvdmlkZTpwZix1c2VWYWx1ZTplPz91Un1dfWZ1bmN0aW9uIGFHKG4pe3JldHVybntlbmFibGVMb25nU3RhY2tUcmFjZTohMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOm4/LmV2ZW50Q29hbGVzY2luZz8/ITEsc2hvdWxkQ29h''@;'; put 'put ''bGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246bj8ucnVuQ29hbGVzY2luZz8/ITF9fWxldCBRRWU9KCgpPT57Y2xhc3MgbntzdWJzY3JpcHRpb249bmV3IEx0O2luaXRpYWxpemVkPSExO3pvbmU9Sm4oSmEpO3BlbmRpbmdUYXNrcz1KbihVMCk7aW5pdGlhbGl6ZSgpe2lmKHRoaXMuaW5pdGlhbGl6''@;'; put 'put ''ZWQpcmV0dXJuO3RoaXMuaW5pdGlhbGl6ZWQ9ITA7bGV0IGU9bnVsbDshdGhpcy56b25lLmlzU3RhYmxlJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYoZT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKSksdGhpcy56b25l''@;'; put 'put ''LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntKYS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PntudWxsIT09ZSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90''@;'; put 'put ''YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShlKSxlPW51bGwpfSl9KSl9KSx0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpPT57SmEuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgp''@;'; put 'put ''LGU/Pz10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4u''@;'; put 'put ''XHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpLEJFPSgoKT0+e2NsYXNzIG57YXBwUmVmPUpuKEVkKTt0YXNrU2VydmljZT1KbihVMCk7bmdab25lPUpuKEphKTt6b25lbGVzc0VuYWJsZWQ9Sm4oRDcpO3RyYWNpbmc9Sm4oQW0se29wdGlvbmFsOiEwfSk7ZGlzYWJs''@;'; put 'put ''ZVNjaGVkdWxpbmc9Sm4oZlIse29wdGlvbmFsOiEwfSk/PyExO3pvbmVJc0RlZmluZWQ9dHlwZW9mIFpvbmU8InUiJiYhIVpvbmUucm9vdC5ydW47c2NoZWR1bGVyVGlja0FwcGx5QXJncz1be2RhdGE6e19fc2NoZWR1bGVyX3RpY2tfXzohMH19XTtzdWJzY3JpcHRpb25zPW5ldyBMdDthbmd1''@;'; put 'put ''bGFyWm9uZUlkPXRoaXMuem9uZUlzRGVmaW5lZD90aGlzLm5nWm9uZS5faW5uZXI/LmdldCh6Xyk6bnVsbDtzY2hlZHVsZUluUm9vdFpvbmU9IXRoaXMuem9uZWxlc3NFbmFibGVkJiZ0aGlzLnpvbmVJc0RlZmluZWQmJihKbihwZix7b3B0aW9uYWw6ITB9KT8/ITEpO2NhbmNlbFNjaGVkdWxl''@;'; put 'put ''ZENhbGxiYWNrPW51bGw7dXNlTWljcm90YXNrU2NoZWR1bGVyPSExO3J1bm5pbmdUaWNrPSExO3BlbmRpbmdSZW5kZXJUYXNrSWQ9bnVsbDtjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hcHBSZWYuYWZ0ZXJUaWNrLnN1YnNjcmliZSgoKT0+e3RoaXMucnVubmlu''@;'; put 'put ''Z1RpY2t8fHRoaXMuY2xlYW51cCgpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJ1bm5pbmdUaWNrfHx0aGlzLmNsZWFudXAoKX0pKSx0aGlzLmRpc2FibGVTY2hlZHVsaW5nfHw9IXRoaXMuem9uZWxlc3NFbmFi''@;'; put 'put ''bGVkJiYodGhpcy5uZ1pvbmUgaW5zdGFuY2VvZiBOTXx8IXRoaXMuem9uZUlzRGVmaW5lZCl9bm90aWZ5KGUpe2lmKCF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmNT09PWUpcmV0dXJuO2xldCByPSExO3N3aXRjaChlKXtjYXNlIDA6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9MjticmVhaztjYXNl''@;'; put 'put ''IDM6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6Y2FzZSAxOnRoaXMuYXBwUmVmLmRpcnR5RmxhZ3N8PTQ7YnJlYWs7Y2FzZSA2OmNhc2UgMTM6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9MixyPSEwO2JyZWFrO2Nhc2UgMTI6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9MTYscj0hMDticmVhaztjYXNl''@;'; put 'put ''IDExOnI9ITA7YnJlYWs7ZGVmYXVsdDp0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzfD04fWlmKHRoaXMuYXBwUmVmLnRyYWNpbmdTbmFwc2hvdD10aGlzLnRyYWNpbmc/LnNuYXBzaG90KHRoaXMuYXBwUmVmLnRyYWNpbmdTbmFwc2hvdCk/P251bGwsIXRoaXMuc2hvdWxkU2NoZWR1bGVUaWNrKHIp''@;'; put 'put ''KXJldHVybjtjb25zdCBpPXRoaXMudXNlTWljcm90YXNrU2NoZWR1bGVyP21SOmdSO3RoaXMucGVuZGluZ1JlbmRlclRhc2tJZD10aGlzLnRhc2tTZXJ2aWNlLmFkZCgpLHRoaXMuY2FuY2VsU2NoZWR1bGVkQ2FsbGJhY2s9dGhpcy5zY2hlZHVsZUluUm9vdFpvbmU/Wm9uZS5yb290LnJ1bigo''@;'; put 'put ''KT0+aSgoKT0+dGhpcy50aWNrKCkpKTp0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+aSgoKT0+dGhpcy50aWNrKCkpKX1zaG91bGRTY2hlZHVsZVRpY2soZSl7cmV0dXJuISh0aGlzLmRpc2FibGVTY2hlZHVsaW5nJiYhZXx8dGhpcy5hcHBSZWYuZGVzdHJveWVkfHxudWxsIT09''@;'; put 'put ''dGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkfHx0aGlzLnJ1bm5pbmdUaWNrfHx0aGlzLmFwcFJlZi5fcnVubmluZ1RpY2t8fCF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmdGhpcy56b25lSXNEZWZpbmVkJiZab25lLmN1cnJlbnQuZ2V0KHpfK3RoaXMuYW5ndWxhclpvbmVJZCkpfXRpY2soKXtpZih0''@;'; put 'put ''aGlzLnJ1bm5pbmdUaWNrfHx0aGlzLmFwcFJlZi5kZXN0cm95ZWQpcmV0dXJuO2lmKDA9PT10aGlzLmFwcFJlZi5kaXJ0eUZsYWdzKXJldHVybiB2b2lkIHRoaXMuY2xlYW51cCgpOyF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmNyZ0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzJiYodGhpcy5hcHBSZWYu''@;'; put 'put ''ZGlydHlGbGFnc3w9MSk7Y29uc3QgZT10aGlzLnRhc2tTZXJ2aWNlLmFkZCgpO3RyeXt0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnJ1bm5pbmdUaWNrPSEwLHRoaXMuYXBwUmVmLl90aWNrKCl9LHZvaWQgMCx0aGlzLnNjaGVkdWxlclRpY2tBcHBseUFyZ3MpfWNhdGNoKHIpe3Rocm93IHRo''@;'; put 'put ''aXMudGFza1NlcnZpY2UucmVtb3ZlKGUpLHJ9ZmluYWxseXt0aGlzLmNsZWFudXAoKX10aGlzLnVzZU1pY3JvdGFza1NjaGVkdWxlcj0hMCxtUigoKT0+e3RoaXMudXNlTWljcm90YXNrU2NoZWR1bGVyPSExLHRoaXMudGFza1NlcnZpY2UucmVtb3ZlKGUpfSl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKSx0aGlzLmNsZWFudXAoKX1jbGVhbnVwKCl7aWYodGhpcy5ydW5uaW5nVGljaz0hMSx0aGlzLmNhbmNlbFNjaGVkdWxlZENhbGxiYWNrPy4oKSx0aGlzLmNhbmNlbFNjaGVkdWxlZENhbGxiYWNrPW51bGwsbnVsbCE9PXRoaXMucGVuZGluZ1Jl''@;'; put 'put ''bmRlclRhc2tJZCl7Y29uc3QgZT10aGlzLnBlbmRpbmdSZW5kZXJUYXNrSWQ7dGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkPW51bGwsdGhpcy50YXNrU2VydmljZS5yZW1vdmUoZSl9fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXBy''@;'; put 'put ''b3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBhND1uZXcgd3IoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkpuKGE0LE1vLk9wdGlvbmFsfE1vLlNraXBTZWxmKXx8ZnVuY3Rpb24gZVRlKCl7''@;'; put 'put ''cmV0dXJuIHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxuUH0oKX0pLHBQPW5ldyB3cigiIiksb1RlPW5ldyB3cigiIik7ZnVuY3Rpb24gakUobil7cmV0dXJuIW4ubW9kdWxlUmVmfWxldCBzdWU9KCgpPT57Y2xhc3MgbntfaW5qZWN0b3I7X21vZHVsZXM9W107X2Rl''@;'; put 'put ''c3Ryb3lMaXN0ZW5lcnM9W107X2Rlc3Ryb3llZD0hMTtjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lfWJvb3RzdHJhcE1vZHVsZUZhY3RvcnkoZSxyKXtjb25zdCBpPXI/LnNjaGVkdWxlSW5Sb290Wm9uZSxjPXI/Lmlnbm9yZUNoYW5nZXNPdXRzaWRlWm9uZSxtPVtpRyh7bmdab25l''@;'; put 'put ''RmFjdG9yeTooKT0+ZnVuY3Rpb24gU1Uobj0iem9uZS5qcyIsdCl7cmV0dXJuIm5vb3AiPT09bj9uZXcgTk06InpvbmUuanMiPT09bj9uZXcgSmEodCk6bn0ocj8ubmdab25lLHsuLi5hRyh7ZXZlbnRDb2FsZXNjaW5nOnI/Lm5nWm9uZUV2ZW50Q29hbGVzY2luZyxydW5Db2FsZXNjaW5nOnI/''@;'; put 'put ''Lm5nWm9uZVJ1bkNvYWxlc2Npbmd9KSxzY2hlZHVsZUluUm9vdFpvbmU6aX0pLGlnbm9yZUNoYW5nZXNPdXRzaWRlWm9uZTpjfSkse3Byb3ZpZGU6dWgsdXNlRXhpc3Rpbmc6QkV9XSxDPWZ1bmN0aW9uIEp3ZShuLHQsZSl7cmV0dXJuIG5ldyB2WShuLHQsZSwhMSl9KGUubW9kdWxlVHlwZSx0''@;'; put 'put ''aGlzLmluamVjdG9yLG0pO3JldHVybiBmdW5jdGlvbiBvdWUobil7Y29uc3QgdD1qRShuKT9uLnIzSW5qZWN0b3I6bi5tb2R1bGVSZWYuaW5qZWN0b3IsZT10LmdldChKYSk7cmV0dXJuIGUucnVuKCgpPT57akUobik/bi5yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygp''@;'; put 'put ''Om4ubW9kdWxlUmVmLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpO2NvbnN0IHI9dC5nZXQoYTIsbnVsbCk7bGV0IGk7aWYoZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2k9ZS5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDphPT57ci5oYW5kbGVFcnJvcihhKX19KX0pLGpFKG4pKXtjb25z''@;'; put 'put ''dCBhPSgpPT50LmRlc3Ryb3koKSxjPW4ucGxhdGZvcm1JbmplY3Rvci5nZXQocFApO2MuYWRkKGEpLHQub25EZXN0cm95KCgpPT57aS51bnN1YnNjcmliZSgpLGMuZGVsZXRlKGEpfSl9ZWxzZXtjb25zdCBhPSgpPT5uLm1vZHVsZVJlZi5kZXN0cm95KCksYz1uLnBsYXRmb3JtSW5qZWN0b3Iu''@;'; put 'put ''Z2V0KHBQKTtjLmFkZChhKSxuLm1vZHVsZVJlZi5vbkRlc3Ryb3koKCk9PntKTyhuLmFsbFBsYXRmb3JtTW9kdWxlcyxuLm1vZHVsZVJlZiksaS51bnN1YnNjcmliZSgpLGMuZGVsZXRlKGEpfSl9cmV0dXJuIGZ1bmN0aW9uIGxUZShuLHQsZSl7dHJ5e2NvbnN0IHI9ZSgpO3JldHVybiBURShy''@;'; put 'put ''KT9yLmNhdGNoKGk9Pnt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKGkpKSxpfSk6cn1jYXRjaChyKXt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKHIpKSxyfX0ocixlLCgpPT57Y29uc3QgYT10LmdldChxc2UpO3JldHVybiBh''@;'; put 'put ''LnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbigoKT0+e2lmKGZ1bmN0aW9uIHR4ZShuKXsic3RyaW5nIj09dHlwZW9mIG4mJihWbGU9bi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0odC5nZXQoYTQsblApfHxuUCksIXQuZ2V0KG9UZSwhMCkpcmV0dXJuIGpF''@;'; put 'put ''KG4pP3QuZ2V0KEVkKToobi5hbGxQbGF0Zm9ybU1vZHVsZXMucHVzaChuLm1vZHVsZVJlZiksbi5tb2R1bGVSZWYpO2lmKGpFKG4pKXtjb25zdCBDPXQuZ2V0KEVkKTtyZXR1cm4gdm9pZCAwIT09bi5yb290Q29tcG9uZW50JiZDLmJvb3RzdHJhcChuLnJvb3RDb21wb25lbnQpLEN9cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIHNUZShuLHQpe2NvbnN0IGU9bi5pbmplY3Rvci5nZXQoRWQpO2lmKG4uX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApbi5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKHI9PmUuYm9vdHN0cmFwKHIpKTtlbHNle2lmKCFuLmluc3RhbmNlLm5nRG9Cb290c3RyYXAp''@;'; put 'put ''dGhyb3cgbmV3IGtyKC00MDMsITEpO24uaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChlKX10LnB1c2gobil9KG4ubW9kdWxlUmVmLG4uYWxsUGxhdGZvcm1Nb2R1bGVzKSxuLm1vZHVsZVJlZn0pfSl9KX0oe21vZHVsZVJlZjpDLGFsbFBsYXRmb3JtTW9kdWxlczp0aGlzLl9tb2R1bGVzLHBsYXRm''@;'; put 'put ''b3JtSW5qZWN0b3I6dGhpcy5pbmplY3Rvcn0pfWJvb3RzdHJhcE1vZHVsZShlLHI9W10pe2NvbnN0IGk9UXNlKHt9LHIpO3JldHVybiBmdW5jdGlvbiBYRWUobix0LGUpe2NvbnN0IHI9bmV3IHlZKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9KDAsMCxlKS50aGVuKGE9PnRoaXMuYm9v''@;'; put 'put ''dHN0cmFwTW9kdWxlRmFjdG9yeShhLGkpKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBrcig0MDQsITEpO3RoaXMuX21v''@;'; put 'put ''ZHVsZXMuc2xpY2UoKS5mb3JFYWNoKHI9PnIuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2gocj0+cigpKTtjb25zdCBlPXRoaXMuX2luamVjdG9yLmdldChwUCxudWxsKTtlJiYoZS5mb3JFYWNoKHI9PnIoKSksZS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9''@;'; put 'put ''Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKEhvKSl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0i''@;'; put 'put ''fSl9cmV0dXJuIG59KSgpLHR3PW51bGw7ZnVuY3Rpb24gbHVlKG4sdCxlPVtdKXtjb25zdCByPWBQbGF0Zm9ybTogJHt0fWAsaT1uZXcgd3Iocik7cmV0dXJuKGE9W10pPT57bGV0IGM9Z1AoKTtpZighYyl7Y29uc3QgbT1bLi4uZSwuLi5hLHtwcm92aWRlOmksdXNlVmFsdWU6ITB9XTtjPW4/''@;'; put 'put ''LihtKT8/ZnVuY3Rpb24gY1RlKG4pe2lmKGdQKCkpdGhyb3cgbmV3IGtyKDQwMCwhMSk7KGZ1bmN0aW9uIEpzZSgpeyFmdW5jdGlvbiBJZShuKXt4ZT1ufSgoKT0+e3Rocm93IG5ldyBrcig2MDAsITEpfSl9KSgpLHR3PW47Y29uc3QgdD1uLmdldChzdWUpO3JldHVybiBmdW5jdGlvbiB1dWUo''@;'; put 'put ''bil7Y29uc3QgdD1uLmdldChxTSxudWxsKTtQMShuLCgpPT57dD8uZm9yRWFjaChlPT5lKCkpfSl9KG4pLHR9KGZ1bmN0aW9uIGN1ZShuPVtdLHQpe3JldHVybiBIby5jcmVhdGUoe25hbWU6dCxwcm92aWRlcnM6W3twcm92aWRlOm83LHVzZVZhbHVlOiJwbGF0Zm9ybSJ9LHtwcm92aWRlOnBQ''@;'; put 'put ''LHVzZVZhbHVlOm5ldyBTZXQoWygpPT50dz1udWxsXSl9LC4uLm5dfSl9KG0scikpfXJldHVybiBmdW5jdGlvbiB1VGUoKXtjb25zdCB0PWdQKCk7aWYoIXQpdGhyb3cgbmV3IGtyKDQwMSwhMSk7cmV0dXJuIHR9KCl9fWZ1bmN0aW9uIGdQKCl7cmV0dXJuIHR3Py5nZXQoc3VlKT8/bnVsbH1s''@;'; put 'put ''ZXQgRnM9KCgpPT5jbGFzcyBue3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1oVGV9KSgpO2Z1bmN0aW9uIGhUZShuKXtyZXR1cm4gZnVuY3Rpb24gZlRlKG4sdCxlKXtpZihiZChuKSYmIWUpe2NvbnN0IHI9cDEobi5pbmRleCx0KTtyZXR1cm4gbmV3IG42KHIscil9cmV0dXJuIDE3NSZuLnR5''@;'; put 'put ''cGU/bmV3IG42KHRbMTVdLHQpOm51bGx9KFFvKCksVXIoKSwhKDE2Jn5uKSl9Y2xhc3MgZ3Vle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiBZTyh0KX1jcmVhdGUodCl7cmV0dXJuIG5ldyB5VGUodCl9fWNvbnN0IHZUZT0obix0KT0+dDtjbGFzcyB5VGV7bGVuZ3RoPTA7Y29s''@;'; put 'put ''bGVjdGlvbjtfbGlua2VkUmVjb3Jkcz1udWxsO191bmxpbmtlZFJlY29yZHM9bnVsbDtfcHJldmlvdXNJdEhlYWQ9bnVsbDtfaXRIZWFkPW51bGw7X2l0VGFpbD1udWxsO19hZGRpdGlvbnNIZWFkPW51bGw7X2FkZGl0aW9uc1RhaWw9bnVsbDtfbW92ZXNIZWFkPW51bGw7X21vdmVzVGFpbD1u''@;'; put 'put ''dWxsO19yZW1vdmFsc0hlYWQ9bnVsbDtfcmVtb3ZhbHNUYWlsPW51bGw7X2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbDtfaWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsO190cmFja0J5Rm47Y29uc3RydWN0b3IodCl7dGhpcy5fdHJhY2tCeUZuPXR8fHZUZX1mb3JFYWNoSXRlbSh0KXtsZXQgZTtm''@;'; put 'put ''b3IoZT10aGlzLl9pdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9Zm9yRWFjaE9wZXJhdGlvbih0KXtsZXQgZT10aGlzLl9pdEhlYWQscj10aGlzLl9yZW1vdmFsc0hlYWQsaT0wLGE9bnVsbDtmb3IoO2V8fHI7KXtjb25zdCBjPSFyfHxlJiZlLmN1cnJlbnRJbmRleDx2dWUocixpLGEp''@;'; put 'put ''P2U6cixtPXZ1ZShjLGksYSksQz1jLmN1cnJlbnRJbmRleDtpZihjPT09cilpLS0scj1yLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1jLnByZXZpb3VzSW5kZXgpaSsrO2Vsc2V7YXx8KGE9W10pO2NvbnN0IFA9bS1pLFk9Qy1pO2lmKFAhPVkpe2ZvcihsZXQgY2U9MDtj''@;'; put 'put ''ZTxQO2NlKyspe2NvbnN0IGZlPWNlPGEubGVuZ3RoP2FbY2VdOmFbY2VdPTAsQWU9ZmUrY2U7WTw9QWUmJkFlPFAmJihhW2NlXT1mZSsxKX1hW2MucHJldmlvdXNJbmRleF09WS1QfX1tIT09QyYmdChjLG0sQyl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJl''@;'; put 'put ''dmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21v''@;'; put 'put ''dmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9p''@;'; put 'put ''ZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIVlPKHQpKXRocm93IG5ldyBrcig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7''@;'; put 'put ''dGhpcy5fcmVzZXQoKTtsZXQgaSxhLGMsZT10aGlzLl9pdEhlYWQscj0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IG09MDttPHRoaXMubGVuZ3RoO20rKylhPXRbbV0sYz10aGlzLl90cmFja0J5Rm4obSxhKSxudWxsIT09ZSYmT2JqZWN0Lmlz''@;'; put 'put ''KGUudHJhY2tCeUlkLGMpPyhyJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLGEsYyxtKSksT2JqZWN0LmlzKGUuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxhKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxhLGMsbSkscj0hMCksZT1lLl9uZXh0fWVsc2UgaT0wLGZ1bmN0''@;'; put 'put ''aW9uIG1DZShuLHQpe2lmKEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdChuW2VdKTtlbHNle2NvbnN0IGU9bltTeW1ib2wuaXRlcmF0b3JdKCk7bGV0IHI7Zm9yKDshKHI9ZS5uZXh0KCkpLmRvbmU7KXQoci52YWx1ZSl9fSh0LG09PntjPXRoaXMuX3RyYWNr''@;'; put 'put ''QnlGbihpLG0pLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQsYyk/KHImJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUsbSxjLGkpKSxPYmplY3QuaXMoZS5pdGVtLG0pfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLG0pKTooZT10aGlzLl9taXNtYXRjaChlLG0sYyxpKSxy''@;'; put 'put ''PSEwKSxlPWUuX25leHQsaSsrfSksdGhpcy5sZW5ndGg9aTtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxu''@;'; put 'put ''dWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3Vz''@;'; put 'put ''PXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10''@;'; put 'put ''O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRp''@;'; put 'put ''dHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLHIsaSl7bGV0IGE7cmV0dXJuIG51bGw9PT10P2E9dGhpcy5faXRUYWlsOihhPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVj''@;'; put 'put ''b3Jkcy5nZXQocixudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LGEsaSkpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KHIs''@;'; put 'put ''aSkpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LGEsaSkpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IF9UZShlLHIpLGEsaSksdH1fdmVyaWZ5UmVpbnNlcnRpb24odCxlLHIsaSl7bGV0IGE9bnVsbD09PXRoaXMuX3Vu''@;'; put 'put ''bGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQocixudWxsKTtyZXR1cm4gbnVsbCE9PWE/dD10aGlzLl9yZWluc2VydEFmdGVyKGEsdC5fcHJldixpKTp0LmN1cnJlbnRJbmRleCE9aSYmKHQuY3VycmVudEluZGV4PWksdGhpcy5fYWRkVG9Nb3Zlcyh0LGkpKSx0''@;'; put 'put ''fV90cnVuY2F0ZSh0KXtmb3IoO251bGwhPT10Oyl7Y29uc3QgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0''@;'; put 'put ''aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMu''@;'; put 'put ''X3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLHIpe251''@;'; put 'put ''bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7Y29uc3QgaT10Ll9wcmV2UmVtb3ZlZCxhPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09aT90aGlzLl9yZW1vdmFsc0hlYWQ9YTppLl9uZXh0UmVtb3ZlZD1hLG51bGw9PT1hP3Ro''@;'; put 'put ''aXMuX3JlbW92YWxzVGFpbD1pOmEuX3ByZXZSZW1vdmVkPWksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLHIpLHRoaXMuX2FkZFRvTW92ZXModCxyKSx0fV9tb3ZlQWZ0ZXIodCxlLHIpe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLHIpLHRoaXMuX2FkZFRvTW92''@;'; put 'put ''ZXModCxyKSx0fV9hZGRBZnRlcih0LGUscil7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxyKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fV9p''@;'; put 'put ''bnNlcnRBZnRlcih0LGUscil7Y29uc3QgaT1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1pLHQuX3ByZXY9ZSxudWxsPT09aT90aGlzLl9pdFRhaWw9dDppLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9s''@;'; put 'put ''aW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgbXVlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1yLHR9X3JlbW92ZSh0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfV91bmxpbmsodCl7bnVsbCE9PXRo''@;'; put 'put ''aXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHQpO2NvbnN0IGU9dC5fcHJldixyPXQuX25leHQ7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2l0SGVhZD1yOmUuX25leHQ9cixudWxsPT09cj90aGlzLl9pdFRhaWw9ZTpyLl9wcmV2PWUsdH1fYWRkVG9Nb3Zlcyh0''@;'; put 'put ''LGUpe3JldHVybiB0LnByZXZpb3VzSW5kZXg9PT1lfHwodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNIZWFkPXQ6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9dCksdH1fYWRkVG9SZW1vdmFscyh0KXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlu''@;'; put 'put ''a2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgbXVlKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5f''@;'; put 'put ''cmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fV9hZGRJZGVudGl0eUNoYW5nZSh0LGUpe3JldHVybiB0Lml0ZW09''@;'; put 'put ''ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fX1jbGFzcyBfVGV7aXRlbTt0cmFja0J5SWQ7''@;'; put 'put ''Y3VycmVudEluZGV4PW51bGw7cHJldmlvdXNJbmRleD1udWxsO19uZXh0UHJldmlvdXM9bnVsbDtfcHJldj1udWxsO19uZXh0PW51bGw7X3ByZXZEdXA9bnVsbDtfbmV4dER1cD1udWxsO19wcmV2UmVtb3ZlZD1udWxsO19uZXh0UmVtb3ZlZD1udWxsO19uZXh0QWRkZWQ9bnVsbDtfbmV4dE1v''@;'; put 'put ''dmVkPW51bGw7X25leHRJZGVudGl0eUNoYW5nZT1udWxsO2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZX19Y2xhc3MgYlRle19oZWFkPW51bGw7X3RhaWw9bnVsbDthZGQodCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD10LHQu''@;'; put 'put ''X25leHREdXA9bnVsbCx0Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPXQsdC5fcHJldkR1cD10aGlzLl90YWlsLHQuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPXQpfWdldCh0LGUpe2xldCByO2ZvcihyPXRoaXMuX2hlYWQ7bnVsbCE9PXI7cj1yLl9uZXh0RHVwKWlmKChu''@;'; put 'put ''dWxsPT09ZXx8ZTw9ci5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoci50cmFja0J5SWQsdCkpcmV0dXJuIHI7cmV0dXJuIG51bGx9cmVtb3ZlKHQpe2NvbnN0IGU9dC5fcHJldkR1cCxyPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9cjplLl9uZXh0RHVwPXIsbnVsbD09''@;'; put 'put ''PXI/dGhpcy5fdGFpbD1lOnIuX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgbXVle21hcD1uZXcgTWFwO3B1dCh0KXtjb25zdCBlPXQudHJhY2tCeUlkO2xldCByPXRoaXMubWFwLmdldChlKTtyfHwocj1uZXcgYlRlLHRoaXMubWFwLnNldChlLHIpKSxyLmFkZCh0KX1nZXQo''@;'; put 'put ''dCxlKXtjb25zdCBpPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gaT9pLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2NvbnN0IGU9dC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChlKS5yZW1vdmUodCkmJnRoaXMubWFwLmRlbGV0ZShlKSx0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10''@;'; put 'put ''aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24gdnVlKG4sdCxlKXtjb25zdCByPW4ucHJldmlvdXNJbmRleDtpZihudWxsPT09cilyZXR1cm4gcjtsZXQgaT0wO3JldHVybiBlJiZyPGUubGVuZ3RoJiYoaT1lW3JdKSxyK3QraX1jbGFzcyB5dWV7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXB8fHdZKHQpfWNyZWF0ZSgpe3JldHVybiBuZXcgd1RlfX1jbGFzcyB3VGV7X3JlY29yZHM9bmV3IE1hcDtfbWFwSGVhZD1udWxsO19hcHBlbmRBZnRlcj1udWxsO19wcmV2aW91c01hcEhlYWQ9bnVsbDtfY2hhbmdl''@;'; put 'put ''c0hlYWQ9bnVsbDtfY2hhbmdlc1RhaWw9bnVsbDtfYWRkaXRpb25zSGVhZD1udWxsO19hZGRpdGlvbnNUYWlsPW51bGw7X3JlbW92YWxzSGVhZD1udWxsO19yZW1vdmFsc1RhaWw9bnVsbDtnZXQgaXNEaXJ0eSgpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRo''@;'; put 'put ''aXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfWZvckVhY2hJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9Zm9yRWFjaFByZXZpb3VzSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9wcmV2aW91c01hcEhlYWQ7''@;'; put 'put ''bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQ2hhbmdlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0Q2hhbmdlZCl0KGUpfWZvckVhY2hBZGRlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVh''@;'; put 'put ''ZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWRpZmYodCl7aWYodCl7aWYoISh0IGluc3RhbmNlb2YgTWFwfHx3WSh0KSkpdGhyb3cg''@;'; put 'put ''bmV3IGtyKDkwMCwhMSl9ZWxzZSB0PW5ldyBNYXA7cmV0dXJuIHRoaXMuY2hlY2sodCk/dGhpczpudWxsfW9uRGVzdHJveSgpe31jaGVjayh0KXt0aGlzLl9yZXNldCgpO2xldCBlPXRoaXMuX21hcEhlYWQ7aWYodGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9mb3JFYWNoKHQsKHIsaSk9''@;'; put 'put ''PntpZihlJiZlLmtleT09PWkpdGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoZSxyKSx0aGlzLl9hcHBlbmRBZnRlcj1lLGU9ZS5fbmV4dDtlbHNle2NvbnN0IGE9dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkoaSxyKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsYSl9fSksZSl7''@;'; put 'put ''ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCByPWU7bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRS''@;'; put 'put ''ZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRk''@;'; put 'put ''aXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7Y29uc3Qgcj10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1yLHQuX3ByZXY9ZSxyJiYoci5fbmV4dD1lKSx0''@;'; put 'put ''PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5k''@;'; put 'put ''QWZ0ZXI9ZSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleSh0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXtjb25zdCBpPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGksZSk7Y29uc3QgYT1pLl9wcmV2LGM9aS5fbmV4dDtyZXR1cm4gYSYmKGEu''@;'; put 'put ''X25leHQ9YyksYyYmKGMuX3ByZXY9YSksaS5fbmV4dD1udWxsLGkuX3ByZXY9bnVsbCxpfWNvbnN0IHI9bmV3IENUZSh0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxyKSxyLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKHIpLHJ9X3Jlc2V0KCl7aWYodGhpcy5pc0Rp''@;'; put 'put ''cnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5n''@;'; put 'put ''ZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRp''@;'; put 'put ''dGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhp''@;'; put 'put ''cy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9''@;'; put 'put ''X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFw''@;'; put 'put ''P3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKHI9PmUodFtyXSxyKSl9fWNsYXNzIENUZXtrZXk7cHJldmlvdXNWYWx1ZT1udWxsO2N1cnJlbnRWYWx1ZT1udWxsO19uZXh0UHJldmlvdXM9bnVsbDtfbmV4dD1udWxsO19wcmV2PW51bGw7X25leHRBZGRlZD1udWxsO19uZXh0''@;'; put 'put ''UmVtb3ZlZD1udWxsO19uZXh0Q2hhbmdlZD1udWxsO2NvbnN0cnVjdG9yKHQpe3RoaXMua2V5PXR9fWZ1bmN0aW9uIF91ZSgpe3JldHVybiBuZXcgcDYoW25ldyBndWVdKX1sZXQgcDY9KCgpPT57Y2xhc3MgbntmYWN0b3JpZXM7c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4scHJvdmlk''@;'; put 'put ''ZWRJbjoicm9vdCIsZmFjdG9yeTpfdWV9KTtjb25zdHJ1Y3RvcihlKXt0aGlzLmZhY3Rvcmllcz1lfXN0YXRpYyBjcmVhdGUoZSxyKXtpZihudWxsIT1yKXtjb25zdCBpPXIuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChpKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXty''@;'; put 'put ''ZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6cj0+bi5jcmVhdGUoZSxyfHxfdWUoKSksZGVwczpbW24sbmV3IHRjLG5ldyBoM11dfX1maW5kKGUpe2NvbnN0IHI9dGhpcy5mYWN0b3JpZXMuZmluZChpPT5pLnN1cHBvcnRzKGUpKTtpZihudWxsIT1yKXJldHVybiByO3Rocm93IG5ldyBrcig5''@;'; put 'put ''MDEsITEpfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gYnVlKCl7cmV0dXJuIG5ldyB6RShbbmV3IHl1ZV0pfWxldCB6RT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6YnVlfSk7ZmFjdG9yaWVzO2NvbnN0cnVjdG9y''@;'; put 'put ''KGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLHIpe2lmKHIpe2NvbnN0IGk9ci5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KGkpfXJldHVybiBuZXcgbihlKX1zdGF0aWMgZXh0ZW5kKGUpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTpyPT5uLmNyZWF0ZShlLHJ8''@;'; put 'put ''fGJ1ZSgpKSxkZXBzOltbbixuZXcgdGMsbmV3IGgzXV19fWZpbmQoZSl7Y29uc3Qgcj10aGlzLmZhY3Rvcmllcy5maW5kKGk9Pmkuc3VwcG9ydHMoZSkpO2lmKHIpcmV0dXJuIHI7dGhyb3cgbmV3IGtyKDkwMSwhMSl9fXJldHVybiBufSkoKTtjb25zdCB4VGU9bHVlKG51bGwsImNvcmUiLFtd''@;'; put 'put ''KTtsZXQgRVRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihFZCkpfTtzdGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBlOm59KTtzdGF0aWMgXHUwMjc1aW5qPXpuKHt9KX1yZXR1cm4gbn0pKCk7ZnVu''@;'; put 'put ''Y3Rpb24gWTEobil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbj9uOm51bGwhPW4mJiJmYWxzZSIhPT1ufWZ1bmN0aW9uICRUZShuLHQ9TmFOKXtyZXR1cm4gaXNOYU4ocGFyc2VGbG9hdChuKSl8fGlzTmFOKE51bWJlcihuKSk/dDpOdW1iZXIobil9ZnVuY3Rpb24gcjAobil7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIG50KG4pe2NvbnN0IHQ9aGUobnVsbCk7dHJ5e3JldHVybiBuKCl9ZmluYWxseXtoZSh0KX19KG4pfWZ1bmN0aW9uICRnKG4sdCl7cmV0dXJuIGZ1bmN0aW9uIHZlKG4sdCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKENlKTtlLmNvbXB1dGF0aW9uPW4sdm9pZCAwIT09dCYmKGUuZXF1''@;'; put 'put ''YWw9dCk7Y29uc3Qgcj0oKT0+e2lmKHYoZSkscyhlKSxlLnZhbHVlPT09T2UpdGhyb3cgZS5lcnJvcjtyZXR1cm4gZS52YWx1ZX07cmV0dXJuIHJbc2VdPWUscn0obix0Py5lcXVhbCl9ZnVuY3Rpb24gQ1Aobix0KXtjb25zdCBlPUpvKG4pLHI9dC5lbGVtZW50SW5qZWN0b3J8fGRtKCk7cmV0''@;'; put 'put ''dXJuIG5ldyBHbihlKS5jcmVhdGUocix0LnByb2plY3RhYmxlTm9kZXMsdC5ob3N0RWxlbWVudCx0LmVudmlyb25tZW50SW5qZWN0b3IpfWNvbnN0IFhzPW5ldyB3cigiIik7bGV0IEJ1ZT1udWxsO2Z1bmN0aW9uIGc2KCl7cmV0dXJuIEJ1ZX1jbGFzcyB2QWV7fWxldCBmRz0oKCk9PntjbGFz''@;'; put 'put ''cyBue2hpc3RvcnlHbyhlKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTooKT0+Sm4oX0FlKSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX1yZXR1cm4g''@;'; put 'put ''bn0pKCk7Y29uc3QgeUFlPW5ldyB3cigiIik7bGV0IF9BZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZkd7X2xvY2F0aW9uO19oaXN0b3J5O19kb2M9Sm4oWHMpO2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cu''@;'; put 'put ''aGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gZzYoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoZSl7Y29uc3Qgcj1nNigpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIHIuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3Rh''@;'; put 'put ''dGUiLGUsITEpLCgpPT5yLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixlKX1vbkhhc2hDaGFuZ2UoZSl7Y29uc3Qgcj1nNigpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIHIuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSwhMSks''@;'; put 'put ''KCk9PnIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaHJlZn1nZXQgcHJvdG9jb2woKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhv''@;'; put 'put ''c3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBvcnR9Z2V0IHBhdGhuYW1lKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnBhdGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9u''@;'; put 'put ''Lmhhc2h9c2V0IHBhdGhuYW1lKGUpe3RoaXMuX2xvY2F0aW9uLnBhdGhuYW1lPWV9cHVzaFN0YXRlKGUscixpKXt0aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZShlLHIsaSl9cmVwbGFjZVN0YXRlKGUscixpKXt0aGlzLl9oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLHIsaSl9Zm9yd2FyZCgpe3RoaXMu''@;'; put 'put ''X2hpc3RvcnkuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9oaXN0b3J5LmJhY2soKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9oaXN0b3J5LmdvKGUpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2hpc3Rvcnkuc3RhdGV9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4p''@;'; put 'put ''fTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5OigpPT5uZXcgbixwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gcEcobix0KXtyZXR1cm4gbj90P24uZW5kc1dpdGgoIi8iKT90LnN0YXJ0c1dpdGgoIi8iKT9uK3Quc2xpY2UoMSk6bit0''@;'; put 'put ''OnQuc3RhcnRzV2l0aCgiLyIpP24rdDpgJHtufS8ke3R9YDpuOnR9ZnVuY3Rpb24ganVlKG4pe2NvbnN0IHQ9bi5zZWFyY2goLyN8XD98JC8pO3JldHVybiIvIj09PW5bdC0xXT9uLnNsaWNlKDAsdC0xKStuLnNsaWNlKHQpOm59ZnVuY3Rpb24gS2cobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/''@;'; put 'put ''YD8ke259YDpufWxldCBMOT0oKCk9PntjbGFzcyBue2hpc3RvcnlHbyhlKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTooKT0+Sm4oVXVlKSxwcm92''@;'; put 'put ''aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCB6dWU9bmV3IHdyKCIiKTtsZXQgVXVlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBMOXtfcGxhdGZvcm1Mb2NhdGlvbjtfYmFzZUhyZWY7X3JlbW92ZUxpc3RlbmVyRm5zPVtdO2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLl9w''@;'; put 'put ''bGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fYmFzZUhyZWY9cj8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/Sm4oWHMpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMu''@;'; put 'put ''X3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBwRyh0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2NvbnN0IHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStLZyh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksaT10aGlzLl9wbGF0''@;'; put 'put ''Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIGkmJmU/YCR7cn0ke2l9YDpyfXB1c2hTdGF0ZShlLHIsaSxhKXtjb25zdCBjPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGkrS2coYSkpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKGUscixjKX1yZXBsYWNlU3RhdGUoZSxyLGksYSl7''@;'; put 'put ''Y29uc3QgYz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChpK0tnKGEpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLHIsYyl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1n''@;'; put 'put ''ZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoT3IoZkcpLE9yKHp1ZSw4''@;'; put 'put ''KSl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCksbDI9KCgpPT57Y2xhc3Mgbntfc3ViamVjdD1uZXcgdXI7X2Jhc2VQYXRoO19sb2NhdGlvblN0cmF0ZWd5O191cmxDaGFuZ2VMaXN0ZW5l''@;'; put 'put ''cnM9W107X3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsO2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3k9ZTtjb25zdCByPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlUGF0aD1mdW5jdGlvbiBDQWUobil7aWYobmV3IFJlZ0V4cCgi''@;'; put 'put ''XihodHRwcz86KT8vLyIpLnRlc3Qobikpe2NvbnN0WyxlXT1uLnNwbGl0KC9cL1wvW15cL10rLyk7cmV0dXJuIGV9cmV0dXJuIG59KGp1ZShXdWUocikpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoaT0+e3RoaXMuX3N1YmplY3QubmV4dCh7dXJsOnRoaXMucGF0aCghMCks''@;'; put 'put ''cG9wOiEwLHN0YXRlOmkuc3RhdGUsdHlwZTppLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGU9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2Nh''@;'; put 'put ''dGlvblN0cmF0ZWd5LnBhdGgoZSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1cnJlbnRQYXRoRXF1YWxUbyhlLHI9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoZStLZyhyKSl9bm9ybWFsaXplKGUpe3JldHVy''@;'; put 'put ''biBuLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiB3QWUobix0KXtpZighbnx8IXQuc3RhcnRzV2l0aChuKSlyZXR1cm4gdDtjb25zdCBlPXQuc3Vic3RyaW5nKG4ubGVuZ3RoKTtyZXR1cm4iIj09PWV8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGVbMF0pP2U6dH0odGhpcy5fYmFz''@;'; put 'put ''ZVBhdGgsV3VlKGUpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBlJiYiLyIhPT1lWzBdJiYoZT0iLyIrZSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoZSl9Z28oZSxyPSIiLGk9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUo''@;'; put 'put ''aSwiIixlLHIpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK0tnKHIpKSxpKX1yZXBsYWNlU3RhdGUoZSxyPSIiLGk9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUoaSwiIixlLHIpLHRoaXMuX25vdGlmeVVy''@;'; put 'put ''bENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK0tnKHIpKSxpKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2xvY2F0aW9uU3Ry''@;'; put 'put ''YXRlZ3kuaGlzdG9yeUdvPy4oZSl9b25VcmxDaGFuZ2UoZSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGUpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8/PXRoaXMuc3Vic2NyaWJlKHI9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoci51cmwsci5z''@;'; put 'put ''dGF0ZSl9KSwoKT0+e2NvbnN0IHI9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoZSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShyLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1''@;'; put 'put ''YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhlPSIiLHIpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKGk9PmkoZSxyKSl9c3Vic2NyaWJlKGUscixpKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJz''@;'; put 'put ''Y3JpYmUoe25leHQ6ZSxlcnJvcjpyPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfSl9c3RhdGljIG5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPUtnO3N0YXRpYyBqb2luV2l0aFNsYXNoPXBHO3N0YXRpYyBzdHJpcFRyYWlsaW5nU2xhc2g9anVlO3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7''@;'; put 'put ''cmV0dXJuIG5ldyhyfHxuKShPcihMOSkpfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5OigpPT5mdW5jdGlvbiBiQWUoKXtyZXR1cm4gbmV3IGwyKE9yKEw5KSl9KCkscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gV3VlKG4pe3JldHVybiBu''@;'; put 'put ''LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX1mdW5jdGlvbiBadWUobix0KXt0PWVuY29kZVVSSUNvbXBvbmVudCh0KTtmb3IoY29uc3QgZSBvZiBuLnNwbGl0KCI7Iikpe2NvbnN0IHI9ZS5pbmRleE9mKCI9IiksW2ksYV09LTE9PXI/W2UsIiJdOltlLnNsaWNlKDAsciksZS5zbGljZShy''@;'; put 'put ''KzEpXTtpZihpLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBfbChuKXtyZXR1cm4iYnJvd3NlciI9PT1ufWZ1bmN0aW9uIEd1ZShuKXtyZXR1cm4ic2VydmVyIj09PW59Y2xhc3MgJHVle31sZXQgeEFlPSgoKT0+e2NsYXNzIG4g''@;'; put 'put ''ZXh0ZW5kcyBMOXtfcGxhdGZvcm1Mb2NhdGlvbjtfYmFzZUhyZWY9IiI7X3JlbW92ZUxpc3RlbmVyRm5zPVtdO2NvbnN0cnVjdG9yKGUscil7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsbnVsbCE9ciYmKHRoaXMuX2Jhc2VIcmVmPXIpfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlz''@;'; put 'put ''Ll9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9u''@;'; put 'put ''SGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cGF0aChlPSExKXtjb25zdCByPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaD8/IiMiO3JldHVybiByLmxlbmd0aD4wP3Iuc3Vic3RyaW5nKDEpOnJ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe2NvbnN0''@;'; put 'put ''IHI9cEcodGhpcy5fYmFzZUhyZWYsZSk7cmV0dXJuIHIubGVuZ3RoPjA/IiMiK3I6cn1wdXNoU3RhdGUoZSxyLGksYSl7Y29uc3QgYz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChpK0tnKGEpKXx8dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9u''@;'; put 'put ''LnB1c2hTdGF0ZShlLHIsYyl9cmVwbGFjZVN0YXRlKGUscixpLGEpe2NvbnN0IGM9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaStLZyhhKSl8fHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWU7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoZSxyLGMpfWZvcndhcmQo''@;'; put 'put ''KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhlPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlz''@;'; put 'put ''dG9yeUdvPy4oZSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKGZHKSxPcih6dWUsOCkpfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO3ZhciB4MD1mdW5jdGlvbihuKXtyZXR1''@;'; put 'put ''cm4gbltuLkZvcm1hdD0wXT0iRm9ybWF0IixuW24uU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSIsbn0oeDB8fHt9KSxibD1mdW5jdGlvbihuKXtyZXR1cm4gbltuLk5hcnJvdz0wXT0iTmFycm93IixuW24uQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixuW24uV2lkZT0yXT0iV2lkZSIs''@;'; put 'put ''bltuLlNob3J0PTNdPSJTaG9ydCIsbn0oYmx8fHt9KSxwaD1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlNob3J0PTBdPSJTaG9ydCIsbltuLk1lZGl1bT0xXT0iTWVkaXVtIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkZ1bGw9M109IkZ1bGwiLG59KHBofHx7fSk7ZnVuY3Rpb24gZ0cobix0LGUp''@;'; put 'put ''e2NvbnN0IHI9WjEobiksYT1UZihbcltuYy5EYXlzRm9ybWF0XSxyW25jLkRheXNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIFRmKGEsZSl9ZnVuY3Rpb24gbUcobix0LGUpe2NvbnN0IHI9WjEobiksYT1UZihbcltuYy5Nb250aHNGb3JtYXRdLHJbbmMuTW9udGhzU3RhbmRhbG9uZV1dLHQpO3Jl''@;'; put 'put ''dHVybiBUZihhLGUpfWZ1bmN0aW9uIFRmKG4sdCl7Zm9yKGxldCBlPXQ7ZT4tMTtlLS0paWYodHlwZW9mIG5bZV08InUiKXJldHVybiBuW2VdO3Rocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgQVBJOiBsb2NhbGUgZGF0YSB1bmRlZmluZWQiKX1jb25zdCBFRz0vXHMrLyxyMGU9W107bGV0''@;'; put 'put ''IFJ1PSgoKT0+e2NsYXNzIG57X25nRWw7X3JlbmRlcmVyO2luaXRpYWxDbGFzc2VzPXIwZTtyYXdDbGFzcztzdGF0ZU1hcD1uZXcgTWFwO2NvbnN0cnVjdG9yKGUscil7dGhpcy5fbmdFbD1lLHRoaXMuX3JlbmRlcmVyPXJ9c2V0IGtsYXNzKGUpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9''@;'; put 'put ''ZT9lLnRyaW0oKS5zcGxpdChFRyk6cjBlfXNldCBuZ0NsYXNzKGUpe3RoaXMucmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiBlP2UudHJpbSgpLnNwbGl0KEVHKTplfW5nRG9DaGVjaygpe2Zvcihjb25zdCByIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUociwhMCk7''@;'; put 'put ''Y29uc3QgZT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQpZm9yKGNvbnN0IHIgb2YgZSl0aGlzLl91cGRhdGVTdGF0ZShyLCEwKTtlbHNlIGlmKG51bGwhPWUpZm9yKGNvbnN0IHIgb2YgT2JqZWN0LmtleXMoZSkpdGhpcy5fdXBkYXRlU3RhdGUo''@;'; put 'put ''ciwhIWVbcl0pO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGUscil7Y29uc3QgaT10aGlzLnN0YXRlTWFwLmdldChlKTt2b2lkIDAhPT1pPyhpLmVuYWJsZWQhPT1yJiYoaS5jaGFuZ2VkPSEwLGkuZW5hYmxlZD1yKSxpLnRvdWNoZWQ9ITApOnRoaXMuc3RhdGVNYXAuc2V0''@;'; put 'put ''KGUse2VuYWJsZWQ6cixjaGFuZ2VkOiEwLHRvdWNoZWQ6ITB9KX1fYXBwbHlTdGF0ZURpZmYoKXtmb3IoY29uc3QgZSBvZiB0aGlzLnN0YXRlTWFwKXtjb25zdCByPWVbMF0saT1lWzFdO2kuY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MocixpLmVuYWJsZWQpLGkuY2hhbmdlZD0hMSk6aS50''@;'; put 'put ''b3VjaGVkfHwoaS5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhyLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShyKSksaS50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoZSxyKXsoZT1lLnRyaW0oKSkubGVuZ3RoPjAmJmUuc3BsaXQoRUcpLmZvckVhY2goaT0+e3I/dGhpcy5fcmVuZGVyZXIu''@;'; put 'put ''YWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGkpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxpKX0pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZSh6aSksV2UoVG8pKX07c3RhdGljIFx1''@;'; put 'put ''MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0NsYXNzIiwiIl1dLGlucHV0czp7a2xhc3M6WzAsImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn19KX1yZXR1cm4gbn0pKCk7Y2xhc3MgY2tleyRpbXBsaWNpdDtuZ0Zvck9mO2luZGV4O2NvdW50O2NvbnN0cnVj''@;'; put 'put ''dG9yKHQsZSxyLGkpe3RoaXMuJGltcGxpY2l0PXQsdGhpcy5uZ0Zvck9mPWUsdGhpcy5pbmRleD1yLHRoaXMuY291bnQ9aX1nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmluZGV4JTI9PTB9Z2V0IG9kZCgpe3JldHVybiF0aGlzLmV2ZW59fWxldCBocz0oKCk9PntjbGFzcyBue192aWV3Q29udGFpbmVyO190ZW1wbGF0ZTtfZGlmZmVycztzZXQgbmdGb3JPZihlKXt0aGlzLl9uZ0Zvck9mPWUsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRy''@;'; put 'put ''YWNrQnkoZSl7dGhpcy5fdHJhY2tCeUZuPWV9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59X25nRm9yT2Y9bnVsbDtfbmdGb3JPZkRpcnR5PSEwO19kaWZmZXI9bnVsbDtfdHJhY2tCeUZuO2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLl92aWV3Q29udGFpbmVyPWUs''@;'; put 'put ''dGhpcy5fdGVtcGxhdGU9cix0aGlzLl9kaWZmZXJzPWl9c2V0IG5nRm9yVGVtcGxhdGUoZSl7ZSYmKHRoaXMuX3RlbXBsYXRlPWUpfW5nRG9DaGVjaygpe2lmKHRoaXMuX25nRm9yT2ZEaXJ0eSl7dGhpcy5fbmdGb3JPZkRpcnR5PSExO2NvbnN0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlm''@;'; put 'put ''ZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2NvbnN0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdGb3JPZik7ZSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGUpfX1fYXBwbHlDaGFu''@;'; put 'put ''Z2VzKGUpe2NvbnN0IHI9dGhpcy5fdmlld0NvbnRhaW5lcjtlLmZvckVhY2hPcGVyYXRpb24oKGksYSxjKT0+e2lmKG51bGw9PWkucHJldmlvdXNJbmRleClyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSxuZXcgY2tlKGkuaXRlbSx0aGlzLl9uZ0Zvck9mLC0xLC0xKSxudWxs''@;'; put 'put ''PT09Yz92b2lkIDA6Yyk7ZWxzZSBpZihudWxsPT1jKXIucmVtb3ZlKG51bGw9PT1hP3ZvaWQgMDphKTtlbHNlIGlmKG51bGwhPT1hKXtjb25zdCBtPXIuZ2V0KGEpO3IubW92ZShtLGMpLGEwZShtLGkpfX0pO2ZvcihsZXQgaT0wLGE9ci5sZW5ndGg7aTxhO2krKyl7Y29uc3QgbT1yLmdldChp''@;'; put 'put ''KS5jb250ZXh0O20uaW5kZXg9aSxtLmNvdW50PWEsbS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaT0+e2EwZShyLmdldChpLmN1cnJlbnRJbmRleCksaSl9KX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChlLHIpe3JldHVybiEwfXN0YXRpYyBc''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShObiksV2UoQWwpLFdlKHA2KSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFj''@;'; put 'put ''a0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifX0pfXJldHVybiBufSkoKTtmdW5jdGlvbiBhMGUobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX1sZXQgbWE9KCgpPT57Y2xhc3Mgbntfdmlld0NvbnRhaW5lcjtfY29udGV4dD1uZXcgdWtlO190''@;'; put 'put ''aGVuVGVtcGxhdGVSZWY9bnVsbDtfZWxzZVRlbXBsYXRlUmVmPW51bGw7X3RoZW5WaWV3UmVmPW51bGw7X2Vsc2VWaWV3UmVmPW51bGw7Y29uc3RydWN0b3IoZSxyKXt0aGlzLl92aWV3Q29udGFpbmVyPWUsdGhpcy5fdGhlblRlbXBsYXRlUmVmPXJ9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4''@;'; put 'put ''dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtvMGUoZSksdGhpcy5fdGhlblRlbXBsYXRlUmVmPWUsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZFbHNlKGUpe28wZShlKSx0''@;'; put 'put ''aGlzLl9lbHNlVGVtcGxhdGVSZWY9ZSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3''@;'; put 'put ''UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFp''@;'; put 'put ''bmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdJ''@;'; put 'put ''ZlVzZUlmVHlwZUd1YXJkO3N0YXRpYyBuZ1RlbXBsYXRlR3VhcmRfbmdJZjtzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChlLHIpe3JldHVybiEwfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShObiksV2UoQWwpKX07c3RhdGljIFx1MDI3NWRp''@;'; put 'put ''cj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0lmIiwiIl1dLGlucHV0czp7bmdJZjoibmdJZiIsbmdJZlRoZW46Im5nSWZUaGVuIixuZ0lmRWxzZToibmdJZkVsc2UifX0pfXJldHVybiBufSkoKTtjbGFzcyB1a2V7JGltcGxpY2l0PW51bGw7bmdJZj1udWxsfWZ1bmN0aW9uIG8wZShu''@;'; put 'put ''LHQpe2lmKG4mJiFuLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcga3IoMjAyMCwhMSl9Y2xhc3MgVEd7X3ZpZXdDb250YWluZXJSZWY7X3RlbXBsYXRlUmVmO19jcmVhdGVkPSExO2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlUmVm''@;'; put 'put ''PWV9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0''@;'; put 'put ''JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19bGV0IEFmPSgoKT0+e2NsYXNzIG57X2RlZmF1bHRWaWV3cz1bXTtfZGVmYXVsdFVzZWQ9ITE7X2Nhc2VDb3VudD0wO19sYXN0Q2FzZUNoZWNrSW5kZXg9MDtfbGFzdENhc2Vz''@;'; put 'put ''TWF0Y2hlZD0hMTtfbmdTd2l0Y2g7c2V0IG5nU3dpdGNoKGUpe3RoaXMuX25nU3dpdGNoPWUsMD09PXRoaXMuX2Nhc2VDb3VudCYmdGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCEwKX1fYWRkQ2FzZSgpe3JldHVybiB0aGlzLl9jYXNlQ291bnQrK31fYWRkRGVmYXVsdChlKXt0aGlzLl9kZWZh''@;'; put 'put ''dWx0Vmlld3MucHVzaChlKX1fbWF0Y2hDYXNlKGUpe2NvbnN0IHI9ZT09PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkfHw9cix0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0''@;'; put 'put ''aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLHJ9X3VwZGF0ZURlZmF1bHRDYXNlcyhlKXtpZih0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoPjAmJmUhPT10''@;'; put 'put ''aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9ZTtmb3IoY29uc3QgciBvZiB0aGlzLl9kZWZhdWx0Vmlld3Mpci5lbmZvcmNlU3RhdGUoZSl9fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpu''@;'; put 'put ''LHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaCIsIiJdXSxpbnB1dHM6e25nU3dpdGNoOiJuZ1N3aXRjaCJ9fSl9cmV0dXJuIG59KSgpLG80PSgoKT0+e2NsYXNzIG57bmdTd2l0Y2g7X3ZpZXc7bmdTd2l0Y2hDYXNlO2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLm5nU3dpdGNoPWksaS5fYWRkQ2Fz''@;'; put 'put ''ZSgpLHRoaXMuX3ZpZXc9bmV3IFRHKGUscil9bmdEb0NoZWNrKCl7dGhpcy5fdmlldy5lbmZvcmNlU3RhdGUodGhpcy5uZ1N3aXRjaC5fbWF0Y2hDYXNlKHRoaXMubmdTd2l0Y2hDYXNlKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKE5uKSxXZShB''@;'; put 'put ''bCksV2UoQWYsOSkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn19KX1yZXR1cm4gbn0pKCksbDBlPSgoKT0+e2NsYXNzIG57X25nRWw7X2RpZmZlcnM7X3Jl''@;'; put 'put ''bmRlcmVyO19uZ1N0eWxlPW51bGw7X2RpZmZlcj1udWxsO2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1yLHRoaXMuX3JlbmRlcmVyPWl9c2V0IG5nU3R5bGUoZSl7dGhpcy5fbmdTdHlsZT1lLCF0aGlzLl9kaWZmZXImJmUmJih0aGlzLl9kaWZmZXI9dGhp''@;'; put 'put ''cy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7ZSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGUpfX1fc2V0U3R5bGUoZSxyKXtjb25zdFtpLGFdPWUuc3BsaXQoIi4iKSxj''@;'; put 'put ''PS0xPT09aS5pbmRleE9mKCItIik/dm9pZCAwOldwLkRhc2hDYXNlO251bGwhPXI/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGksYT9gJHtyfSR7YX1gOnIsYyk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LGksYyl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShyPT50aGlzLl9zZXRTdHlsZShyLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKHI9PnRoaXMuX3NldFN0eWxlKHIua2V5LHIuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0ocj0+dGhp''@;'; put 'put ''cy5fc2V0U3R5bGUoci5rZXksci5jdXJyZW50VmFsdWUpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoemkpLFdlKHpFKSxXZShUbykpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5w''@;'; put 'put ''dXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn19KX1yZXR1cm4gbn0pKCksa2Q9KCgpPT57Y2xhc3Mgbntfdmlld0NvbnRhaW5lclJlZjtfdmlld1JlZj1udWxsO25nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGw7bmdUZW1wbGF0ZU91dGxldD1udWxsO25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj1u''@;'; put 'put ''dWxsO2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZX1uZ09uQ2hhbmdlcyhlKXtpZih0aGlzLl9zaG91bGRSZWNyZWF0ZVZpZXcoZSkpe2NvbnN0IHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZyLnJlbW92ZShyLmluZGV4T2YodGhpcy5f''@;'; put 'put ''dmlld1JlZikpLCF0aGlzLm5nVGVtcGxhdGVPdXRsZXQpcmV0dXJuIHZvaWQodGhpcy5fdmlld1JlZj1udWxsKTtjb25zdCBpPXRoaXMuX2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKTt0aGlzLl92aWV3UmVmPXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCxp''@;'; put 'put ''LHtpbmplY3Rvcjp0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj8/dm9pZCAwfSl9fV9zaG91bGRSZWNyZWF0ZVZpZXcoZSl7cmV0dXJuISFlLm5nVGVtcGxhdGVPdXRsZXR8fCEhZS5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3J9X2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKXtyZXR1''@;'; put 'put ''cm4gbmV3IFByb3h5KHt9LHtzZXQ6KGUscixpKT0+ISF0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZSZWZsZWN0LnNldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LHIsaSksZ2V0OihlLHIsaSk9PntpZih0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KXJldHVybiBSZWZs''@;'; put 'put ''ZWN0LmdldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LHIsaSl9fSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKE5uKSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJd''@;'; put 'put ''XSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IifSxmZWF0dXJlczpbV3RdfSl9''@;'; put 'put ''cmV0dXJuIG59KSgpO2NsYXNzIGZrZXtjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gcjAoKCk9PnQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6cj0+e3Rocm93IHJ9fSkpfWRpc3Bvc2UodCl7cjAoKCk9PnQudW5zdWJzY3JpYmUoKSl9fWNsYXNzIHBrZXtjcmVhdGVTdWJzY3JpcHRp''@;'; put 'put ''b24odCxlKXtyZXR1cm4gdC50aGVuKHI9PmU/LihyKSxyPT57dGhyb3cgcn0pLHt1bnN1YnNjcmliZTooKT0+e2U9bnVsbH19fWRpc3Bvc2UodCl7dC51bnN1YnNjcmliZSgpfX1jb25zdCBna2U9bmV3IHBrZSxta2U9bmV3IGZrZTtsZXQgWUU9KCgpPT57Y2xhc3MgbntfcmVmO19sYXRlc3RW''@;'; put 'put ''YWx1ZT1udWxsO21hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITA7X3N1YnNjcmlwdGlvbj1udWxsO19vYmo9bnVsbDtfc3RyYXRlZ3k9bnVsbDtjb25zdHJ1Y3RvcihlKXt0aGlzLl9yZWY9ZX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMu''@;'; put 'put ''X3JlZj1udWxsfXRyYW5zZm9ybShlKXtpZighdGhpcy5fb2JqKXtpZihlKXRyeXt0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITEsdGhpcy5fc3Vic2NyaWJlKGUpfWZpbmFsbHl7dGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwfXJldHVybiB0aGlzLl9sYXRlc3RWYWx1''@;'; put 'put ''ZX1yZXR1cm4gZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlz''@;'; put 'put ''Ll9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxyPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLHIpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYoVEUoZSkpcmV0dXJuIGdrZTtpZigkc2UoZSkpcmV0dXJuIG1rZTt0aHJvdyBmdW5jdGlvbiBVMyhuLHQpe3JldHVybiBuZXcga3IoMjEw''@;'; put 'put ''MCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxyKXtlPT09dGhpcy5fb2JqJiYo''@;'; put 'put ''dGhpcy5fbGF0ZXN0VmFsdWU9cix0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUmJnRoaXMuX3JlZj8ubWFya0ZvckNoZWNrKCkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShGcywxNikpfTtzdGF0aWMgXHUwMjc1cGlwZT1zdSh7bmFtZToi''@;'; put 'put ''YXN5bmMiLHR5cGU6bixwdXJlOiExfSl9cmV0dXJuIG59KSgpLEFHPSgoKT0+e2NsYXNzIG57dHJhbnNmb3JtKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlLG51bGwsMil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cGlwZT1z''@;'; put 'put ''dSh7bmFtZToianNvbiIsdHlwZTpuLHB1cmU6ITF9KX1yZXR1cm4gbn0pKCksUFA9KCgpPT57Y2xhc3MgbntkaWZmZXJzO2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlmZmVycz1lfWRpZmZlcjtrZXlWYWx1ZXM9W107Y29tcGFyZUZuPWMwZTt0cmFuc2Zvcm0oZSxyPWMwZSl7aWYoIWV8fCEoZSBp''@;'; put 'put ''bnN0YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpO2NvbnN0IGk9dGhpcy5kaWZmZXIuZGlmZihlKSxhPXIhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaSYmKHRoaXMua2V5VmFsdWVz''@;'; put 'put ''PVtdLGkuZm9yRWFjaEl0ZW0oYz0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24gQWtlKG4sdCl7cmV0dXJue2tleTpuLHZhbHVlOnR9fShjLmtleSxjLmN1cnJlbnRWYWx1ZSkpfSkpLChpfHxhKSYmKHImJnRoaXMua2V5VmFsdWVzLnNvcnQociksdGhpcy5jb21wYXJlRm49ciksdGhp''@;'; put 'put ''cy5rZXlWYWx1ZXN9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKHpFLDE2KSl9O3N0YXRpYyBcdTAyNzVwaXBlPXN1KHtuYW1lOiJrZXl2YWx1ZSIsdHlwZTpuLHB1cmU6ITF9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gYzBlKG4sdCl7Y29uc3QgZT1u''@;'; put 'put ''LmtleSxyPXQua2V5O2lmKGU9PT1yKXJldHVybiAwO2lmKG51bGw9PWUpcmV0dXJuIDE7aWYobnVsbD09cilyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGUmJiJzdHJpbmciPT10eXBlb2YgcilyZXR1cm4gZTxyPy0xOjE7aWYoIm51bWJlciI9PXR5cGVvZiBlJiYibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHIpcmV0dXJuIGUtcjtpZigiYm9vbGVhbiI9PXR5cGVvZiBlJiYiYm9vbGVhbiI9PXR5cGVvZiByKXJldHVybiBlPHI/LTE6MTtjb25zdCBpPVN0cmluZyhlKSxhPVN0cmluZyhyKTtyZXR1cm4gaT09YT8wOmk8YT8tMToxfWxldCBGYT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj16bih7fSl9cmV0dXJuIG59KSgpO2NvbnN0IElHPW5ldyB3cigiIik7bGV0IHUwZT0oKCk9PntjbGFzcyBue196b25lO19wbHVnaW5zO19ldmVudE5h''@;'; put 'put ''bWVUb1BsdWdpbj1uZXcgTWFwO2NvbnN0cnVjdG9yKGUscil7dGhpcy5fem9uZT1yLGUuZm9yRWFjaChpPT57aS5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWUuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihlLHIsaSxhKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZv''@;'; put 'put ''cihyKS5hZGRFdmVudExpc3RlbmVyKGUscixpLGEpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihlKXtsZXQgcj10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoZSk7aWYocilyZXR1cm4gcjtpZihyPXRoaXMuX3BsdWdpbnMuZmluZChhPT5hLnN1cHBvcnRz''@;'; put 'put ''KGUpKSwhcil0aHJvdyBuZXcga3IoNTEwMSwhMSk7cmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChlLHIpLHJ9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKElHKSxPcihKYSkpfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixm''@;'; put 'put ''YWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO2NsYXNzIGQwZXtfZG9jO2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fW1hbmFnZXJ9Y29uc3QgRlA9Im5nLWFwcC1pZCI7ZnVuY3Rpb24gaDBlKG4pe2Zvcihjb25zdCB0IG9mIG4pdC5yZW1vdmUoKX1mdW5jdGlvbiBmMGUobix0''@;'; put 'put ''KXtjb25zdCBlPXQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gZS50ZXh0Q29udGVudD1uLGV9ZnVuY3Rpb24gUkcobix0KXtjb25zdCBlPXQuY3JlYXRlRWxlbWVudCgibGluayIpO3JldHVybiBlLnNldEF0dHJpYnV0ZSgicmVsIiwic3R5bGVzaGVldCIpLGUuc2V0QXR0cmlidXRl''@;'; put 'put ''KCJocmVmIixuKSxlfWxldCBwMGU9KCgpPT57Y2xhc3Mgbntkb2M7YXBwSWQ7bm9uY2U7aW5saW5lPW5ldyBNYXA7ZXh0ZXJuYWw9bmV3IE1hcDtob3N0cz1uZXcgU2V0O2lzU2VydmVyO2NvbnN0cnVjdG9yKGUscixpLGE9e30pe3RoaXMuZG9jPWUsdGhpcy5hcHBJZD1yLHRoaXMubm9uY2U9''@;'; put 'put ''aSx0aGlzLmlzU2VydmVyPUd1ZShhKSxmdW5jdGlvbiBSa2Uobix0LGUscil7Y29uc3QgaT1uLmhlYWQ/LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlWyR7RlB9PSIke3R9Il0sbGlua1ske0ZQfT0iJHt0fSJdYCk7aWYoaSlmb3IoY29uc3QgYSBvZiBpKWEucmVtb3ZlQXR0cmlidXRlKEZQKSxh''@;'; put 'put ''IGluc3RhbmNlb2YgSFRNTExpbmtFbGVtZW50P3Iuc2V0KGEuaHJlZi5zbGljZShhLmhyZWYubGFzdEluZGV4T2YoIi8iKSsxKSx7dXNhZ2U6MCxlbGVtZW50czpbYV19KTphLnRleHRDb250ZW50JiZlLnNldChhLnRleHRDb250ZW50LHt1c2FnZTowLGVsZW1lbnRzOlthXX0pfShlLHIsdGhp''@;'; put 'put ''cy5pbmxpbmUsdGhpcy5leHRlcm5hbCksdGhpcy5ob3N0cy5hZGQoZS5oZWFkKX1hZGRTdHlsZXMoZSxyKXtmb3IoY29uc3QgaSBvZiBlKXRoaXMuYWRkVXNhZ2UoaSx0aGlzLmlubGluZSxmMGUpO3I/LmZvckVhY2goaT0+dGhpcy5hZGRVc2FnZShpLHRoaXMuZXh0ZXJuYWwsUkcpKX1yZW1v''@;'; put 'put ''dmVTdHlsZXMoZSxyKXtmb3IoY29uc3QgaSBvZiBlKXRoaXMucmVtb3ZlVXNhZ2UoaSx0aGlzLmlubGluZSk7cj8uZm9yRWFjaChpPT50aGlzLnJlbW92ZVVzYWdlKGksdGhpcy5leHRlcm5hbCkpfWFkZFVzYWdlKGUscixpKXtjb25zdCBhPXIuZ2V0KGUpO2E/YS51c2FnZSsrOnIuc2V0KGUs''@;'; put 'put ''e3VzYWdlOjEsZWxlbWVudHM6Wy4uLnRoaXMuaG9zdHNdLm1hcChjPT50aGlzLmFkZEVsZW1lbnQoYyxpKGUsdGhpcy5kb2MpKSl9KX1yZW1vdmVVc2FnZShlLHIpe2NvbnN0IGk9ci5nZXQoZSk7aSYmKGkudXNhZ2UtLSxpLnVzYWdlPD0wJiYoaDBlKGkuZWxlbWVudHMpLHIuZGVsZXRlKGUp''@;'; put 'put ''KSl9bmdPbkRlc3Ryb3koKXtmb3IoY29uc3RbLHtlbGVtZW50czplfV1vZlsuLi50aGlzLmlubGluZSwuLi50aGlzLmV4dGVybmFsXSloMGUoZSk7dGhpcy5ob3N0cy5jbGVhcigpfWFkZEhvc3QoZSl7dGhpcy5ob3N0cy5hZGQoZSk7Zm9yKGNvbnN0W3Ise2VsZW1lbnRzOml9XW9mIHRoaXMu''@;'; put 'put ''aW5saW5lKWkucHVzaCh0aGlzLmFkZEVsZW1lbnQoZSxmMGUocix0aGlzLmRvYykpKTtmb3IoY29uc3Rbcix7ZWxlbWVudHM6aX1db2YgdGhpcy5leHRlcm5hbClpLnB1c2godGhpcy5hZGRFbGVtZW50KGUsUkcocix0aGlzLmRvYykpKX1yZW1vdmVIb3N0KGUpe3RoaXMuaG9zdHMuZGVsZXRl''@;'; put 'put ''KGUpfWFkZEVsZW1lbnQoZSxyKXtyZXR1cm4gdGhpcy5ub25jZSYmci5zZXRBdHRyaWJ1dGUoIm5vbmNlIix0aGlzLm5vbmNlKSx0aGlzLmlzU2VydmVyJiZyLnNldEF0dHJpYnV0ZShGUCx0aGlzLmFwcElkKSxlLmFwcGVuZENoaWxkKHIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7''@;'; put 'put ''cmV0dXJuIG5ldyhyfHxuKShPcihYcyksT3IoeWYpLE9yKEJVLDgpLE9yKGRjKSl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y29uc3QgTEc9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJo''@;'; put 'put ''dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53''@;'; put 'put ''My5vcmcvMTk5OC9NYXRoL01hdGhNTCJ9LE9HPS8lQ09NUCUvZyxOa2U9bmV3IHdyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMH0pO2Z1bmN0aW9uIG0wZShuLHQpe3JldHVybiB0Lm1hcChlPT5lLnJlcGxhY2UoT0csbikpfWxldCBQRz0oKCk9PntjbGFzcyBue2V2ZW50''@;'; put 'put ''TWFuYWdlcjtzaGFyZWRTdHlsZXNIb3N0O2FwcElkO3JlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k7ZG9jO3BsYXRmb3JtSWQ7bmdab25lO25vbmNlO3RyYWNpbmdTZXJ2aWNlO3JlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcDtkZWZhdWx0UmVuZGVyZXI7cGxhdGZvcm1Jc1NlcnZlcjtjb25zdHJ1''@;'; put 'put ''Y3RvcihlLHIsaSxhLGMsbSxDLFA9bnVsbCxZPW51bGwpe3RoaXMuZXZlbnRNYW5hZ2VyPWUsdGhpcy5zaGFyZWRTdHlsZXNIb3N0PXIsdGhpcy5hcHBJZD1pLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1hLHRoaXMuZG9jPWMsdGhpcy5wbGF0Zm9ybUlkPW0sdGhpcy5uZ1pvbmU9''@;'; put 'put ''Qyx0aGlzLm5vbmNlPVAsdGhpcy50cmFjaW5nU2VydmljZT1ZLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1HdWUobSksdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IEZHKGUsYyxDLHRoaXMucGxhdGZvcm1Jc1NlcnZlcix0aGlzLnRyYWNpbmdTZXJ2aWNlKX1jcmVhdGVSZW5kZXJlcihlLHIpe2lm''@;'; put 'put ''KCFlfHwhcilyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7dGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZyLmVuY2Fwc3VsYXRpb249PT1oaC5TaGFkb3dEb20mJihyPXsuLi5yLGVuY2Fwc3VsYXRpb246aGguRW11bGF0ZWR9KTtjb25zdCBpPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihlLHIp''@;'; put 'put ''O3JldHVybiBpIGluc3RhbmNlb2YgeTBlP2kuYXBwbHlUb0hvc3QoZSk6aSBpbnN0YW5jZW9mIEhHJiZpLmFwcGx5U3R5bGVzKCksaX1nZXRPckNyZWF0ZVJlbmRlcmVyKGUscil7Y29uc3QgaT10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IGE9aS5nZXQoci5pZCk7aWYoIWEpe2NvbnN0IGM9''@;'; put 'put ''dGhpcy5kb2MsbT10aGlzLm5nWm9uZSxDPXRoaXMuZXZlbnRNYW5hZ2VyLFA9dGhpcy5zaGFyZWRTdHlsZXNIb3N0LFk9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LEo9dGhpcy5wbGF0Zm9ybUlzU2VydmVyLGNlPXRoaXMudHJhY2luZ1NlcnZpY2U7c3dpdGNoKHIuZW5jYXBzdWxh''@;'; put 'put ''dGlvbil7Y2FzZSBoaC5FbXVsYXRlZDphPW5ldyB5MGUoQyxQLHIsdGhpcy5hcHBJZCxZLGMsbSxKLGNlKTticmVhaztjYXNlIGhoLlNoYWRvd0RvbTpyZXR1cm4gbmV3IHprZShDLFAsZSxyLGMsbSx0aGlzLm5vbmNlLEosY2UpO2RlZmF1bHQ6YT1uZXcgSEcoQyxQLHIsWSxjLG0sSixjZSl9''@;'; put 'put ''aS5zZXQoci5pZCxhKX1yZXR1cm4gYX1uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfWNvbXBvbmVudFJlcGxhY2VkKGUpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5kZWxldGUoZSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4p''@;'; put 'put ''KE9yKHUwZSksT3IocDBlKSxPcih5ZiksT3IoTmtlKSxPcihYcyksT3IoZGMpLE9yKEphKSxPcihCVSksT3IoQW0sOCkpfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpO2NsYXNzIEZHe2V2ZW50TWFuYWdlcjtkb2M7bmda''@;'; put 'put ''b25lO3BsYXRmb3JtSXNTZXJ2ZXI7dHJhY2luZ1NlcnZpY2U7ZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpO3Rocm93T25TeW50aGV0aWNQcm9wcz0hMDtjb25zdHJ1Y3Rvcih0LGUscixpLGEpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kb2M9ZSx0aGlzLm5nWm9uZT1yLHRoaXMucGxhdGZv''@;'; put 'put ''cm1Jc1NlcnZlcj1pLHRoaXMudHJhY2luZ1NlcnZpY2U9YX1kZXN0cm95KCl7fWRlc3Ryb3lOb2RlPW51bGw7Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybiBlP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhMR1tlXXx8ZSx0KTp0aGlzLmRvYy5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUNvbW1l''@;'; put 'put ''bnQodCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQodCl9Y3JlYXRlVGV4dCh0KXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUodCl9YXBwZW5kQ2hpbGQodCxlKXsodjBlKHQpP3QuY29udGVudDp0KS5hcHBlbmRDaGlsZChlKX1pbnNlcnRCZWZvcmUodCxlLHIpe3QmJih2''@;'; put 'put ''MGUodCk/dC5jb250ZW50OnQpLmluc2VydEJlZm9yZShlLHIpfXJlbW92ZUNoaWxkKHQsZSl7ZS5yZW1vdmUoKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCByPSJzdHJpbmciPT10eXBlb2YgdD90aGlzLmRvYy5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIXIpdGhyb3cgbmV3IGtyKC01MTA0''@;'; put 'put ''LCExKTtyZXR1cm4gZXx8KHIudGV4dENvbnRlbnQ9IiIpLHJ9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZSh0LGUscixpKXtpZihpKXtlPWkrIjoiK2U7Y29uc3QgYT1MR1tpXTthP3Quc2V0''@;'; put 'put ''QXR0cmlidXRlTlMoYSxlLHIpOnQuc2V0QXR0cmlidXRlKGUscil9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLHIpfXJlbW92ZUF0dHJpYnV0ZSh0LGUscil7aWYocil7Y29uc3QgaT1MR1tyXTtpP3QucmVtb3ZlQXR0cmlidXRlTlMoaSxlKTp0LnJlbW92ZUF0dHJpYnV0ZShgJHtyfToke2V9YCl9''@;'; put 'put ''ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX1hZGRDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX1yZW1vdmVDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX1zZXRTdHlsZSh0LGUscixpKXtpJihXcC5EYXNoQ2FzZXxXcC5JbXBvcnRhbnQpP3Quc3R5bGUuc2V0UHJvcGVydHko''@;'; put 'put ''ZSxyLGkmV3AuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPXJ9cmVtb3ZlU3R5bGUodCxlLHIpe3ImV3AuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifXNldFByb3BlcnR5KHQsZSxyKXtudWxsIT10JiYodFtlXT1yKX1zZXRWYWx1''@;'; put 'put ''ZSh0LGUpe3Qubm9kZVZhbHVlPWV9bGlzdGVuKHQsZSxyLGkpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmISh0PWc2KCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsdCkpKXRocm93IG5ldyBrcig1MTAyLCExKTtsZXQgYT10aGlzLmRlY29yYXRlUHJldmVudERlZmF1bHQocik7cmV0''@;'; put 'put ''dXJuIHRoaXMudHJhY2luZ1NlcnZpY2U/LndyYXBFdmVudExpc3RlbmVyJiYoYT10aGlzLnRyYWNpbmdTZXJ2aWNlLndyYXBFdmVudExpc3RlbmVyKHQsZSxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LGUsYSxpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KHQpe3Jl''@;'; put 'put ''dHVybiBlPT57aWYoIl9fbmdVbndyYXBfXyI9PT1lKXJldHVybiB0OyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT50KGUpKTp0KGUpKSYmZS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gdjBlKG4pe3JldHVybiJURU1QTEFURSI9PT1u''@;'; put 'put ''LnRhZ05hbWUmJnZvaWQgMCE9PW4uY29udGVudH1jbGFzcyB6a2UgZXh0ZW5kcyBGR3tzaGFyZWRTdHlsZXNIb3N0O2hvc3RFbDtzaGFkb3dSb290O2NvbnN0cnVjdG9yKHQsZSxyLGksYSxjLG0sQyxQKXtzdXBlcih0LGEsYyxDLFApLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9z''@;'; put 'put ''dEVsPXIsdGhpcy5zaGFkb3dSb290PXIuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IFk9aS5zdHlsZXM7WT1tMGUoaS5pZCxZKTtmb3IoY29uc3QgY2Ugb2YgWSl7Y29uc3QgZmU9ZG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgic3R5bGUiKTttJiZmZS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixtKSxmZS50ZXh0Q29udGVudD1jZSx0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoZmUpfWNvbnN0IEo9aS5nZXRFeHRlcm5hbFN0eWxlcz8uKCk7aWYoSilmb3IoY29uc3QgY2Ugb2YgSil7Y29uc3Qg''@;'; put 'put ''ZmU9UkcoY2UsYSk7bSYmZmUuc2V0QXR0cmlidXRlKCJub25jZSIsbSksdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGZlKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVy''@;'; put 'put ''LmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLHIpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUscil9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQobnVsbCxl''@;'; put 'put ''KX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCkpKX1kZXN0cm95KCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX19Y2xhc3MgSEcgZXh0ZW5k''@;'; put 'put ''cyBGR3tzaGFyZWRTdHlsZXNIb3N0O3JlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3k7c3R5bGVzO3N0eWxlVXJscztjb25zdHJ1Y3Rvcih0LGUscixpLGEsYyxtLEMsUCl7c3VwZXIodCxhLGMsbSxDKSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZSx0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ry''@;'; put 'put ''b3k9aTtsZXQgWT1yLnN0eWxlczt0aGlzLnN0eWxlcz1QP20wZShQLFkpOlksdGhpcy5zdHlsZVVybHM9ci5nZXRFeHRlcm5hbFN0eWxlcz8uKFApfWFwcGx5U3R5bGVzKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyh0aGlzLnN0eWxlcyx0aGlzLnN0eWxlVXJscyl9ZGVzdHJv''@;'; put 'put ''eSgpe3RoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSYmdGhpcy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlcyx0aGlzLnN0eWxlVXJscyl9fWNsYXNzIHkwZSBleHRlbmRzIEhHe2NvbnRlbnRBdHRyO2hvc3RBdHRyO2NvbnN0cnVjdG9yKHQsZSxyLGksYSxj''@;'; put 'put ''LG0sQyxQKXtjb25zdCBZPWkrIi0iK3IuaWQ7c3VwZXIodCxlLHIsYSxjLG0sQyxQLFkpLHRoaXMuY29udGVudEF0dHI9ZnVuY3Rpb24gVmtlKG4pe3JldHVybiJfbmdjb250ZW50LSVDT01QJSIucmVwbGFjZShPRyxuKX0oWSksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbiBCa2Uobil7cmV0dXJu''@;'; put 'put ''Il9uZ2hvc3QtJUNPTVAlIi5yZXBsYWNlKE9HLG4pfShZKX1hcHBseVRvSG9zdCh0KXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUodCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KHQsZSl7Y29uc3Qgcj1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJu''@;'; put 'put ''IHN1cGVyLnNldEF0dHJpYnV0ZShyLHRoaXMuY29udGVudEF0dHIsIiIpLHJ9fWNsYXNzIE5HIGV4dGVuZHMgdkFle3N1cHBvcnRzRE9NRXZlbnRzPSEwO3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBtQWUobil7QnVlPz89bn0obmV3IE5HKX1vbkFuZENhbmNlbCh0LGUscixpKXty''@;'; put 'put ''ZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUscixpKSwoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsaSl9fWRpc3BhdGNoRXZlbnQodCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9cmVtb3ZlKHQpe3QucmVtb3ZlKCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0''@;'; put 'put ''RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVu''@;'; put 'put ''dE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09''@;'; put 'put ''ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYodCl7Y29uc3QgZT1mdW5jdGlvbiBVa2UoKXtyZXR1cm4gR0U9R0V8fGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcigiYmFzZSIpLEdFP0dFLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGx9KCk7cmV0dXJuIG51bGw9PWU/''@;'; put 'put ''bnVsbDpmdW5jdGlvbiBXa2Uobil7cmV0dXJuIG5ldyBVUkwobixkb2N1bWVudC5iYXNlVVJJKS5wYXRobmFtZX0oZSl9cmVzZXRCYXNlRWxlbWVudCgpe0dFPW51bGx9Z2V0VXNlckFnZW50KCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fWdldENvb2tpZSh0KXtyZXR1cm4g''@;'; put 'put ''WnVlKGRvY3VtZW50LmNvb2tpZSx0KX19bGV0IEdFPW51bGwsWWtlPSgoKT0+e2NsYXNzIG57YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4s''@;'; put 'put ''ZmFjdG9yeTpuLlx1MDI3NWZhY30pfXJldHVybiBufSkoKSxHa2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGQwZXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1zdXBwb3J0cyhlKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGUscixpLGEpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIocixp''@;'; put 'put ''LGEpLCgpPT50aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxyLGksYSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsaSxhKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyKHIsaSxhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoT3IoWHMpKX07c3Rh''@;'; put 'put ''dGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pfXJldHVybiBufSkoKTtjb25zdCBiMGU9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sJGtlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNj''@;'; put 'put ''YXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxLa2U9e2FsdDpuPT5uLmFsdEtl''@;'; put 'put ''eSxjb250cm9sOm49Pm4uY3RybEtleSxtZXRhOm49Pm4ubWV0YUtleSxzaGlmdDpuPT5uLnNoaWZ0S2V5fTtsZXQgWGtlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBkMGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9c3VwcG9ydHMoZSl7cmV0dXJuIG51bGwhPW4ucGFyc2VFdmVudE5hbWUoZSl9''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcihlLHIsaSxhKXtjb25zdCBjPW4ucGFyc2VFdmVudE5hbWUociksbT1uLmV2ZW50Q2FsbGJhY2soYy5mdWxsS2V5LGksdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmc2KCku''@;'; put 'put ''b25BbmRDYW5jZWwoZSxjLmRvbUV2ZW50TmFtZSxtLGEpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoZSl7Y29uc3Qgcj1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoIi4iKSxpPXIuc2hpZnQoKTtpZigwPT09ci5sZW5ndGh8fCJrZXlkb3duIiE9PWkmJiJrZXl1cCIhPT1pKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0IGE9bi5fbm9ybWFsaXplS2V5KHIucG9wKCkpO2xldCBjPSIiLG09ci5pbmRleE9mKCJjb2RlIik7aWYobT4tMSYmKHIuc3BsaWNlKG0sMSksYz0iY29kZS4iKSxiMGUuZm9yRWFjaChQPT57Y29uc3QgWT1yLmluZGV4T2YoUCk7WT4tMSYmKHIuc3BsaWNlKFksMSksYys9UCsiLiIpfSks''@;'; put 'put ''Yys9YSwwIT1yLmxlbmd0aHx8MD09PWEubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IEM9e307cmV0dXJuIEMuZG9tRXZlbnROYW1lPWksQy5mdWxsS2V5PWMsQ31zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGUscil7bGV0IGk9JGtlW2Uua2V5XXx8ZS5rZXksYT0iIjtyZXR1cm4gci5p''@;'; put 'put ''bmRleE9mKCJjb2RlLiIpPi0xJiYoaT1lLmNvZGUsYT0iY29kZS4iKSwhKG51bGw9PWl8fCFpKSYmKGk9aS50b0xvd2VyQ2FzZSgpLCIgIj09PWk/aT0ic3BhY2UiOiIuIj09PWkmJihpPSJkb3QiKSxiMGUuZm9yRWFjaChjPT57YyE9PWkmJigwLEtrZVtjXSkoZSkmJihhKz1jKyIuIil9KSxh''@;'; put 'put ''Kz1pLGE9PT1yKX1zdGF0aWMgZXZlbnRDYWxsYmFjayhlLHIsaSl7cmV0dXJuIGE9PntuLm1hdGNoRXZlbnRGdWxsS2V5Q29kZShhLGUpJiZpLnJ1bkd1YXJkZWQoKCk9PnIoYSkpfX1zdGF0aWMgX25vcm1hbGl6ZUtleShlKXtyZXR1cm4iZXNjIj09PWU/ImVzY2FwZSI6ZX1zdGF0aWMgXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoT3IoWHMpKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pfXJldHVybiBufSkoKTtjb25zdCBDMGU9W3twcm92aWRlOmRjLHVzZVZhbHVlOiJicm93c2VyIn0se3Byb3ZpZGU6cU0s''@;'; put 'put ''dXNlVmFsdWU6ZnVuY3Rpb24gcWtlKCl7TkcubWFrZUN1cnJlbnQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOlhzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gUWtlKCl7cmV0dXJuIGZ1bmN0aW9uIE5VKG4pe1hNPW59KGRvY3VtZW50KSxkb2N1bWVudH19XSxlRGU9bHVlKHhUZSwiYnJvd3NlciIsQzBl''@;'; put 'put ''KSxTMGU9W3twcm92aWRlOnFPLHVzZUNsYXNzOmNsYXNzIFprZXthZGRUb1dpbmRvdyh0KXtZcy5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KHIsaT0hMCk9Pntjb25zdCBhPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHIsaSk7aWYobnVsbD09YSl0aHJvdyBuZXcga3IoNTEwMywhMSk7cmV0dXJu''@;'; put 'put ''IGF9LFlzLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT50LmdldEFsbFRlc3RhYmlsaXRpZXMoKSxZcy5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT50LmdldEFsbFJvb3RFbGVtZW50cygpLFlzLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoWXMuZnJhbWV3b3JrU3RhYmlsaXpl''@;'; put 'put ''cnM9W10pLFlzLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2gocj0+e2NvbnN0IGk9WXMuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgYT1pLmxlbmd0aDtjb25zdCBjPWZ1bmN0aW9uKCl7YS0tLDA9PWEmJnIoKX07aS5mb3JFYWNoKG09PnttLndoZW5TdGFibGUoYyl9KX0pfWZp''@;'; put 'put ''bmRUZXN0YWJpbGl0eUluVHJlZSh0LGUscil7cmV0dXJuIG51bGw9PWU/bnVsbDp0LmdldFRlc3RhYmlsaXR5KGUpPz8ocj9nNigpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLnBh''@;'; put 'put ''cmVudEVsZW1lbnQsITApOm51bGwpfX19LHtwcm92aWRlOllzZSx1c2VDbGFzczpBWSxkZXBzOltKYSxrWSxxT119LHtwcm92aWRlOkFZLHVzZUNsYXNzOkFZLGRlcHM6W0phLGtZLHFPXX1dLE0wZT1be3Byb3ZpZGU6bzcsdXNlVmFsdWU6InJvb3QifSx7cHJvdmlkZTphMix1c2VGYWN0b3J5''@;'; put 'put ''OmZ1bmN0aW9uIEprZSgpe3JldHVybiBuZXcgYTJ9fSx7cHJvdmlkZTpJRyx1c2VDbGFzczpHa2UsbXVsdGk6ITAsZGVwczpbWHNdfSx7cHJvdmlkZTpJRyx1c2VDbGFzczpYa2UsbXVsdGk6ITAsZGVwczpbWHNdfSxQRyxwMGUsdTBlLHtwcm92aWRlOkgzLHVzZUV4aXN0aW5nOlBHfSx7cHJv''@;'; put 'put ''dmlkZTokdWUsdXNlQ2xhc3M6WWtlfSxbXV07bGV0IHgwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj16bih7cHJv''@;'; put 'put ''dmlkZXJzOlsuLi5NMGUsLi4uUzBlXSxpbXBvcnRzOltGYSxFVGVdfSl9cmV0dXJuIG59KSgpO2QoMzc0ODIpLGQoODA2ODUpO2NvbnN0IFZHPXtmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119''@;'; put 'put ''fSxXbj17ZW1iZWQ6ITEscm9vdFBhcmFtOiIiLGRjTGliOiIiLHhsbWFwczpbXSxlZGl0b3I6e3N0YXJ0dXBTZXQ6ITEsdHJlZU5vZGVMaWJyYXJpZXM6W10sbGlic0FuZFRhYmxlczpbXSxsaWJyYXJpZXM6W10sbGlicmFyeToiIix0YWJsZToiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxn''@;'; put 'put ''cm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119fSx2aWV3ZXI6e3N0YXJ0dXBTZXQ6ITEsdGFibGVzU2V0OiExLGxpYnJhcmllczpbXSx0YWJsZXM6bnVsbCxsaWJyYXJ5OiIiLHRhYmxlOiIiLGxpYmluZm86W10sbGlicmFyaWVzU2VhcmNo''@;'; put 'put ''OiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX0sY3VycmVudFNlbGVjdGlvbjoiIn0sdmlld2JveGVzOnt9LGxpbmVhZ2U6e2xpYnJhcnlMaXN0OltdLHRhYmxlc0xpc3Q6W10sY29sdW1u''@;'; put 'put ''c0xpc3Q6W10sbGlicmFyaWVzU2VhcmNoOiIiLGxpYjoiIix0YWJsZToiIixjb2x1bW46IiIsY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU6IiIsY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOiIifSxtZXRhZGF0YTp7bWV0YURhdGFMaXN0OnZvaWQgMCxtZXRhRGF0YVNlYXJjaDoiIixtZXRh''@;'; put 'put ''T2JqZWN0TGlzdDpbXSxtZXRhT2JqZWN0U2VhcmNoOiIiLG1ldGFSZXBvc2l0b3JpZXM6dm9pZCAwLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdml5YUFwaTp7Y29sbGVjdGlvbnNMaXN0OnZvaWQgMCxjb2xsZWN0aW9uc1NlYXJjaDoiIixzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHVzZXJuYXY6''@;'; put 'put ''e3VzZXJMaXN0OnZvaWQgMCx1c2VyU2VhcmNoOiIiLGdyb3VwTGlzdDp2b2lkIDAsZ3JvdXBTZWFyY2g6IiIscm9sZUxpc3Q6dm9pZCAwLHJvbGVTZWFyY2g6IiJ9LG9wZXJhdG9yczp7bnVtT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIs''@;'; put 'put ''Ik5FIl0sY2hhck9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlOUyIsIklOIiwiTk9UIElOIiwiTkUiXX0saGFuZHNvbnRhYmxlOntkYXJrVGFibGVIZWFkZXJDbGFzczoiZGFya1RIIn0sdXNlckRyb3Bkb3duQ29uZmlnOntjbG9zZU9uRGVidWdDbGljazohMX19O3Zh''@;'; put 'put ''ciBxcz1kKDk3NTg2KSxnaD1kLm4ocXMpO2Z1bmN0aW9uIEUwZShuLHQpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihlLHIsaSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGUscixpLGEpe3JldHVybiB0''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA1OnJldHVybiBmdW5jdGlvbihlLHIsaSxhLGMpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVybiBmdW5jdGlvbihlLHIsaSxhLGMsbSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGUscixpLGEsYyxtLEMpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihlLHIsaSxhLGMsbSxDLFApe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA5OnJldHVybiBmdW5jdGlvbihlLHIsaSxh''@;'; put 'put ''LGMsbSxDLFAsWSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDEwOnJldHVybiBmdW5jdGlvbihlLHIsaSxhLGMsbSxDLFAsWSxKKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBf''@;'; put 'put ''YXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4iKX19ZnVuY3Rpb24gbTYobil7cmV0dXJuIG51bGwhPW4mJiJvYmplY3QiPT10eXBlb2YgbiYmITA9PT1uWyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBxZyhuKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gdChlKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fG02KGUpP3Q6bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHJ3KG4pe3JldHVybiBmdW5jdGlvbiB0KGUscil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdDtjYXNlIDE6''@;'; put 'put ''cmV0dXJuIG02KGUpP3Q6cWcoZnVuY3Rpb24oaSl7cmV0dXJuIG4oZSxpKX0pO2RlZmF1bHQ6cmV0dXJuIG02KGUpJiZtNihyKT90Om02KGUpP3FnKGZ1bmN0aW9uKGkpe3JldHVybiBuKGkscil9KTptNihyKT9xZyhmdW5jdGlvbihpKXtyZXR1cm4gbihlLGkpfSk6bihlLHIpfX19ZnVuY3Rp''@;'; put 'put ''b24gVDBlKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHI9W10saT0wLGE9bixjPTAsbT0hMTtjPHQubGVuZ3RofHxpPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgQztjPHQubGVuZ3RoJiYoIW02KHRbY10pfHxpPj1hcmd1bWVudHMubGVuZ3RoKT9DPXRbY106KEM9YXJndW1lbnRz''@;'; put 'put ''W2ldLGkrPTEpLHJbY109QyxtNihDKT9tPSEwOmEtPTEsYys9MX1yZXR1cm4hbSYmYTw9MD9lLmFwcGx5KHRoaXMscik6RTBlKE1hdGgubWF4KDAsYSksVDBlKG4scixlKSl9fWNvbnN0IEEwZT1ydyhmdW5jdGlvbih0LGUpe3JldHVybiAxPT09dD9xZyhlKTpFMGUodCxUMGUodCxbXSxlKSl9''@;'; put 'put ''KSxrMGU9cncoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fG51bGwhPWUmJihlLmNvbnN0cnVjdG9yPT09dHx8Ik9iamVjdCI9PT10Lm5hbWUmJiJvYmplY3QiPT10eXBlb2YgZSl9KTtmdW5jdGlvbiBIUChuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blBy''@;'; put 'put ''b3BlcnR5LmNhbGwodCxuKX12YXIgRDBlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsckRlPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1EMGUuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09RDBlLmNhbGwo''@;'; put 'put ''dCl9OmZ1bmN0aW9uKHQpe3JldHVybiBIUCgiY2FsbGVlIix0KX19KCk7Y29uc3QgSTBlPXJEZSxpRGU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJnQubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs''@;'; put 'put ''KHQpfTtmdW5jdGlvbiBSMGUobil7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobil9dmFyIHNEZT1xZyhmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbImZhbnRhc3ktbGFuZC9lbXB0eSJdP3Rb''@;'; put 'put ''ImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9dCYmbnVsbCE9dC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdP3QuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9dCYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHQuZW1wdHk/dC5lbXB0eSgpOm51bGwhPXQmJm51bGwhPXQuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yLmVtcHR5P3QuY29uc3RydWN0b3IuZW1wdHkoKTppRGUodCk/W106UjBlKHQpPyIiOmZ1bmN0aW9uIGFEZShuKXtyZXR1cm4iW29i''@;'; put 'put ''amVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKX0odCk/e306STBlKHQpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiBvRGUobil7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pO3JldHVybiJbb2JqZWN0''@;'; put 'put ''IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT10fHwiW29iamVjdCBJbnQ4QXJyYXldIj09PXR8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PXR8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PXR8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT10fHwiW29iamVjdCBJbnQzMkFycmF5XSI9PT10fHwiW29i''@;'; put 'put ''amVjdCBVaW50MzJBcnJheV0iPT09dHx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT10fHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PXR8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PXR8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT10fSh0KT90LmNvbnN0cnVjdG9yLmZyb20o''@;'; put 'put ''IiIpOnZvaWQgMH0pO2NvbnN0IGxEZT1zRGU7ZnVuY3Rpb24gTDBlKG4pe2Zvcih2YXIgZSx0PVtdOyEoZT1uLm5leHQoKSkuZG9uZTspdC5wdXNoKGUudmFsdWUpO3JldHVybiB0fWZ1bmN0aW9uIE8wZShuLHQsZSl7Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7KXtpZihuKHQsZVtyXSkp''@;'; put 'put ''cmV0dXJuITA7cis9MX1yZXR1cm4hMX1jb25zdCBCRz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpmdW5jdGlvbiB1RGUobix0KXtyZXR1cm4gbj09PXQ/MCE9PW58fDEvbj09MS90Om4hPW4mJnQhPXR9O3ZhciBkRGU9IXt0b1N0cmluZzpudWxsfS5wcm9wZXJ0eUlz''@;'; put 'put ''RW51bWVyYWJsZSgidG9TdHJpbmciKSxQMGU9WyJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSxGMGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJsZW5ndGgiKX0oKSxoRGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOyl7aWYodFtyXT09PWUpcmV0dXJuITA7cis9MX1yZXR1cm4hMX07Y29uc3QgSDBlPXFnKCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3Qua2V5c3x8RjBl''@;'; put 'put ''P2Z1bmN0aW9uKHQpe2lmKE9iamVjdCh0KSE9PXQpcmV0dXJuW107dmFyIGUscixpPVtdLGE9RjBlJiZJMGUodCk7Zm9yKGUgaW4gdClIUChlLHQpJiYoIWF8fCJsZW5ndGgiIT09ZSkmJihpW2kubGVuZ3RoXT1lKTtpZihkRGUpZm9yKHI9UDBlLmxlbmd0aC0xO3I+PTA7KUhQKGU9UDBlW3Jd''@;'; put 'put ''LHQpJiYhaERlKGksZSkmJihpW2kubGVuZ3RoXT1lKSxyLT0xO3JldHVybiBpfTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHQpIT09dD9bXTpPYmplY3Qua2V5cyh0KX0pLE4wZT1xZyhmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQ/Ik51bGwiOnZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpfSk7ZnVuY3Rpb24gVjBlKG4sdCxlLHIpe3ZhciBpPUwwZShuKTtmdW5jdGlvbiBjKG0sQyl7cmV0dXJuIGpHKG0sQyxlLnNsaWNlKCksci5zbGljZSgpKX1yZXR1cm4hTzBlKGZ1bmN0aW9uKG0sQyl7cmV0dXJu''@;'; put 'put ''IU8wZShjLEMsbSl9LEwwZSh0KSxpKX1mdW5jdGlvbiBqRyhuLHQsZSxyKXtpZihCRyhuLHQpKXJldHVybiEwO3ZhciBpPU4wZShuKTtpZihpIT09TjBlKHQpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiB0WyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG5bImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmblsiZmFudGFzeS1sYW5kL2VxdWFscyJdKHQpJiYiZnVuY3Rpb24iPT10eXBlb2YgdFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZ0WyJmYW50YXN5LWxh''@;'; put 'put ''bmQvZXF1YWxzIl0obik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4uZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgdC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uZXF1YWxzJiZuLmVxdWFscyh0KSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZXF1YWxzJiZ0LmVxdWFscyhuKTtz''@;'; put 'put ''d2l0Y2goaSl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2Ygbi5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gY0RlKG4pe3ZhciB0PVN0cmluZyhuKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51''@;'; put 'put ''bGw9PXQ/IiI6dFsxXX0obi5jb25zdHJ1Y3RvcikpcmV0dXJuIG49PT10O2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgbiE9dHlwZW9mIHR8fCFCRyhuLnZhbHVlT2YoKSx0LnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRl''@;'; put 'put ''IjppZighQkcobi52YWx1ZU9mKCksdC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBuLm5hbWU9PT10Lm5hbWUmJm4ubWVzc2FnZT09PXQubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYobi5zb3VyY2UhPT10LnNvdXJjZXx8bi5nbG9iYWwhPT10Lmdsb2JhbHx8''@;'; put 'put ''bi5pZ25vcmVDYXNlIT09dC5pZ25vcmVDYXNlfHxuLm11bHRpbGluZSE9PXQubXVsdGlsaW5lfHxuLnN0aWNreSE9PXQuc3RpY2t5fHxuLnVuaWNvZGUhPT10LnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDspe2lmKGVbYV09PT1uKXJldHVybiByW2FdPT09dDth''@;'; put 'put ''LT0xfXN3aXRjaChpKXtjYXNlIk1hcCI6cmV0dXJuIG4uc2l6ZT09PXQuc2l6ZSYmVjBlKG4uZW50cmllcygpLHQuZW50cmllcygpLGUuY29uY2F0KFtuXSksci5jb25jYXQoW3RdKSk7Y2FzZSJTZXQiOnJldHVybiBuLnNpemU9PT10LnNpemUmJlYwZShuLnZhbHVlcygpLHQudmFsdWVzKCks''@;'; put 'put ''ZS5jb25jYXQoW25dKSxyLmNvbmNhdChbdF0pKTtjYXNlIkFyZ3VtZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmNhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjpjYXNlIkRhdGUiOmNhc2UiRXJyb3IiOmNhc2UiUmVnRXhwIjpjYXNlIkludDhBcnJheSI6Y2Fz''@;'; put 'put ''ZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkFycmF5QnVmZmVyIjpi''@;'; put 'put ''cmVhaztkZWZhdWx0OnJldHVybiExfXZhciBjPUgwZShuKTtpZihjLmxlbmd0aCE9PUgwZSh0KS5sZW5ndGgpcmV0dXJuITE7dmFyIG09ZS5jb25jYXQoW25dKSxDPXIuY29uY2F0KFt0XSk7Zm9yKGE9Yy5sZW5ndGgtMTthPj0wOyl7dmFyIFA9Y1thXTtpZighSFAoUCx0KXx8IWpHKHRbUF0s''@;'; put 'put ''bltQXSxtLEMpKXJldHVybiExO2EtPTF9cmV0dXJuITB9Y29uc3QgbURlPXJ3KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGpHKHQsZSxbXSxbXSl9KSxCMGU9cWcoZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJm1EZSh0LGxEZSh0KSl9KTtmdW5jdGlvbiAkRShuKXtyZXR1cm4gbnVsbD09bn1m''@;'; put 'put ''dW5jdGlvbiBLRShuKXtyZXR1cm4gJEUobil8fEIwZShuKX1mdW5jdGlvbiB6RyhuKXtyZXR1cm4gazBlKFN0cmluZyxuKX1mdW5jdGlvbiBXMGUobix0KXtyZXR1cm4gbiE9PXR9ZnVuY3Rpb24gJDBlKG49d2luZG93KXtyZXR1cm4hJEUobil9Y29uc3QgVERlPU51bWJlci5pc0ludGVnZXJ8''@;'; put 'put ''fGZ1bmN0aW9uKHQpe3JldHVybigwfHQpPT09dH0sa0RlPXJ3KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dDwwP2UubGVuZ3RoK3Q6dDtyZXR1cm4gUjBlKGUpP2UuY2hhckF0KHIpOmVbcl19KSxJRGU9cncoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24ocil7Zm9yKHZhciBjLGk9''@;'; put 'put ''ZSxhPTA7YTxyLmxlbmd0aDspe2lmKG51bGw9PWkpcmV0dXJuO2k9VERlKGM9clthXSk/a0RlKGMsaSk6aVtjXSxhKz0xfXJldHVybiBpfSl9KSxMRGU9cncoZnVuY3Rpb24odCxlKXtyZXR1cm4gSURlKFt0XSxlKVswXX0pLFBEZT1BMGUoMiwobix0KT0+dm9pZCAwIT09TERlKG4sdCkpLEsw''@;'; put 'put ''ZT1QRGUoeyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiOiEwfSx3aW5kb3cpO2xldCBWUCxYMGUsVUcsV0c7ZnVuY3Rpb24gcTBlKG49ITApe2lmKCFufHwhVlApe2NvbnN0IHQ9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO1ZQPXQ/IiIrdC5nZXRB''@;'; put 'put ''dHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJuIFZQfWZ1bmN0aW9uIEhEZShuPSEwKXtyZXR1cm4gbiYmVlB8fChYMGU9d2luZG93Py5hbmd1bGFyPy52ZXJzaW9uPy5mdWxsKSxYMGV9ZnVuY3Rpb24gSjBlKG49ITApe3JldHVybiBuJiZVR3x8KFVHPXdpbmRvdz8uQ0RTPy5f''@;'; put 'put ''cmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lvbjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksVUd9ZnVuY3Rpb24gUTBlKG49ITApe2lmKCFufHwhV0cpe2NvbnN0''@;'; put 'put ''IHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiKiIpO2xldCBlO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX192dWVfXyl7ZT10W3JdO2JyZWFrfVdHPWU/InVua25vd24gdmVyc2lvbiI6dm9pZCAwfXJldHVybiBXR31mdW5jdGlvbiBPOShuKXtyZXR1cm4gbi5yZXBs''@;'; put 'put ''YWNlKC9bQS1aXS9nLHQ9PiItIit0LnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIG4xZShuKXtyZXR1cm4gbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStuLnNsaWNlKDEpfWNvbnN0IFpEZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXtpZih0aGlzLnN1cHBvcnRzPXtqczohMH0sIWRvY3VtZW50''@;'; put 'put ''LmJvZHkuaGFzQXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKXx8Im5vLWpzIj09PWRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKSl7Y29uc3Qgbj1POShPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRzKS5yZWR1Y2UoKHQsZSk9PmAke3R9ICR7dGhpcy5zdXBwb3J0c1tl''@;'; put 'put ''XT9lOiJuby0iK2V9YCwiIikpLnRyaW0oKTtkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIixuKX19fTtjbGFzcyBYRXtzdGF0aWMgbG9nKC4uLnQpe0dHKCkmJllHKCkmJmNvbnNvbGUubG9nKC4uLnQpfXN0YXRpYyB3YXJuKC4uLnQpe0dHKCkmJllHKCkmJmNvbnNv''@;'; put 'put ''bGUud2FybiguLi50KX1zdGF0aWMgZXJyb3IoLi4udCl7R0coKSYmWUcoKSYmY29uc29sZS5lcnJvciguLi50KX19ZnVuY3Rpb24gWUcoKXtyZXR1cm4hSzBlKFsiamFzbWluZSJdKX1mdW5jdGlvbiBHRygpe3JldHVybiF3aW5kb3cuQ0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rp''@;'; put 'put ''b24gYTFlKCl7JDBlKCkmJih3aW5kb3cuQ0RTPXdpbmRvdy5DRFN8fHtfdmVyc2lvbjpbXSxfcmVhY3Q6e3ZlcnNpb246dm9pZCAwfSxfc3VwcG9ydHM6WkRlLnN1cHBvcnRzLF9pc1N0YXRlUHJveGllZDohMSxfc3RhdGU6e2ZvY3VzVHJhcEl0ZW1zOltdLGxheWVyRWxlbWVudHM6W10saTE4''@;'; put 'put ''blJlZ2lzdHJ5Ont9LGVsZW1lbnRSZWdpc3RyeTp7fSxpY29uUmVnaXN0cnk6e30sbW90aW9uUmVnaXN0cnk6e319LGVudmlyb25tZW50Ontwcm9kdWN0aW9uOiExfSxnZXREZXRhaWxzOm8xZSxsb2dEZXRhaWxzOllEZX0sZnVuY3Rpb24oKXtjb25zdCBuPSI2LjE3LjAiO3dpbmRvdy5DRFMu''@;'; put 'put ''X3ZlcnNpb24uaW5kZXhPZihuKTwwJiYod2luZG93LkNEUy5fdmVyc2lvbi5wdXNoKG4pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKT8uc2V0QXR0cmlidXRlKCJjZHMtdmVyc2lvbiIsd2luZG93LkNEUy5fdmVyc2lvbi5qb2luKCIgIikpKSx3aW5kb3cuQ0RTLl92ZXJzaW9uLmxl''@;'; put 'put ''bmd0aD4xJiZYRS53YXJuKCJSdW5uaW5nIG1vcmUgdGhhbiBvbmUgdmVyc2lvbiBvZiBDbGFyaXR5IGNhbiBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4gUGxlYXNlIGVuc3VyZSBvbmx5IG9uZSB2ZXJzaW9uIGlzIGxvYWRlZC4iKX0oKSx3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZHx8KHdp''@;'; put 'put ''bmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkPSEwLHdpbmRvdy5DRFMuX3N0YXRlPW5ldyBQcm94eSh3aW5kb3cuQ0RTLl9zdGF0ZSx7c2V0OihuLHQsZSk9Pntjb25zdCByPXtrZXk6dCxwcmV2OndpbmRvdy5DRFMuX3N0YXRlW3RdLGN1cnJlbnQ6ZX07cmV0dXJuIG5bdF09ZSxkb2N1bWVudC5k''@;'; put 'put ''aXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiQ0RTX1NUQVRFX1VQREFURSIse2RldGFpbDpyfSkpLCEwfX0pKSl9ZnVuY3Rpb24gbzFlKCl7cmV0dXJue3ZlcnNpb25zOndpbmRvdy5DRFMuX3ZlcnNpb24sZW52aXJvbm1lbnQ6d2luZG93LkNEUy5lbnZpcm9ubWVudCx1c2VyQWdlbnQ6''@;'; put 'put ''bmF2aWdhdG9yLnVzZXJBZ2VudCxzdXBwb3J0czp3aW5kb3cuQ0RTLl9zdXBwb3J0cyxhbmd1bGFyVmVyc2lvbjpxMGUoITEpLGFuZ3VsYXJKU1ZlcnNpb246SERlKCExKSxyZWFjdFZlcnNpb246SjBlKCExKSx2dWVWZXJzaW9uOlEwZSghMSksc3RhdGU6ey4uLndpbmRvdy5DRFMuX3N0YXRl''@;'; put 'put ''LGljb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5pY29uUmVnaXN0cnkpLG1vdGlvblJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLm1vdGlvblJlZ2lzdHJ5KSxmb2N1c1RyYXBSZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0''@;'; put 'put ''ZS5mb2N1c1RyYXBJdGVtcy5tYXAobj0+bi5mb2N1c1RyYXBJZCkpfX19ZnVuY3Rpb24gWURlKCl7WEUubG9nKEpTT04uc3RyaW5naWZ5KG8xZSgpLG51bGwsMikpfWNvbnN0IEdEZT1BMGUoMywobix0LGUpPT57IWZ1bmN0aW9uIEZEZShuLHQpe3JldHVybiB0fHwodD13aW5kb3cmJndpbmRv''@;'; put 'put ''dy5jdXN0b21FbGVtZW50cyksIXR8fCEhdC5nZXQobil9KG4pfHxmdW5jdGlvbiBORGUoKXtyZXR1cm4gd2luZG93Py5sb2NhdGlvbj8uaHJlZj8uaW5jbHVkZXMoImxvY2FsaG9zdDo2MDA2Iil9KCk/KGUuZGVmaW5lKG4sdCksYTFlKCksd2luZG93JiYhT2JqZWN0LmtleXMod2luZG93LkNE''@;'; put 'put ''Uy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5KS5zb21lKHI9PnI9PT1uKSYmKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeT17Li4ud2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5LFtuXTp7fX0pKTpYRS53YXJuKG4rIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQi''@;'; put 'put ''KX0pO2Z1bmN0aW9uIFczKG4sdCxlLHIpe3ZhciBjLGk9YXJndW1lbnRzLmxlbmd0aCxhPWk8Mz90Om51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5k''@;'; put 'put ''ZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUobix0LGUscik7ZWxzZSBmb3IodmFyIG09bi5sZW5ndGgtMTttPj0wO20tLSkoYz1uW21dKSYmKGE9KGk8Mz9jKGEpOmk+Mz9jKHQsZSxhKTpjKHQsZSkpfHxhKTtyZXR1cm4gaT4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLGEpLGF9''@;'; put 'put ''ZnVuY3Rpb24gdjYobil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB2Nj8odGhpcy52PW4sdGhpcyk6bmV3IHY2KG4pfWZ1bmN0aW9uIHUxZShuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQu''@;'; put 'put ''Iik7dmFyIGUsdD1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwobik6KG49ZnVuY3Rpb24gcUcobil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGU9dCYmblt0XSxyPTA7aWYoZSlyZXR1cm4gZS5jYWxsKG4pO2lmKG4mJiJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2Ygbi5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbiYmcj49bi5sZW5ndGgmJihuPXZvaWQgMCkse3ZhbHVlOm4mJm5bcisrXSxkb25lOiFufX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wu''@;'; put 'put ''aXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KG4pLGU9e30scigibmV4dCIpLHIoInRocm93IikscigicmV0dXJuIiksZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZSk7ZnVuY3Rpb24gcihhKXtlW2FdPW5bYV0mJmZ1bmN0aW9uKGMpe3JldHVybiBu''@;'; put 'put ''ZXcgUHJvbWlzZShmdW5jdGlvbihtLEMpeyFmdW5jdGlvbiBpKGEsYyxtLEMpe1Byb21pc2UucmVzb2x2ZShDKS50aGVuKGZ1bmN0aW9uKFApe2Eoe3ZhbHVlOlAsZG9uZTptfSl9LGMpfShtLEMsKGM9blthXShjKSkuZG9uZSxjLnZhbHVlKX0pfX19ImZ1bmN0aW9uIj09dHlwZW9mIFN1cHBy''@;'; put 'put ''ZXNzZWRFcnJvciYmU3VwcHJlc3NlZEVycm9yO2xldCBkMWU9ITE7ZnVuY3Rpb24gYkllKG4pe2lmKChuPU1hdGgudHJ1bmMobil8fDApPDAmJihuKz10aGlzLmxlbmd0aCksIShuPDB8fG4+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tuXX1pZighZDFlKXtkMWU9ITA7Y29uc3Qgbj1SZWZs''@;'; put 'put ''ZWN0LmdldFByb3RvdHlwZU9mKEludDhBcnJheSk7Zm9yKGNvbnN0IHQgb2ZbQXJyYXksU3RyaW5nLG5dKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXQiLHt2YWx1ZTpiSWUsd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1sZXQgaDFlPSEx''@;'; put 'put ''LGYxZT0hMTtmdW5jdGlvbiBwMWUobix0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0F0dHJpYnV0ZSh0KT90aGlzLmdldEF0dHJpYnV0ZSh0KTpudWxsfSxzZXQ6ZnVuY3Rp''@;'; put 'put ''b24ocil7bnVsbCE9PXI/dGhpcy5zZXRBdHRyaWJ1dGUodCxyKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KX1oMWV8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChwMWUoRWxlbWVudC5wcm90b3R5cGUsInJvbGUiLCJyb2xlIiksaDFlPSEwKSxmMWV8fEVs''@;'; put 'put ''ZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KGYxZT0hMCxbIkFjdGl2ZURlc2NlbmRhbnQiLCJBdG9taWMiLCJBdXRvQ29tcGxldGUiLCJCdXN5IiwiQ2hlY2tlZCIsIkNvbENvdW50IiwiQ29sSW5kZXgiLCJDb2xTcGFuIiwiQ29udHJvbHMiLCJDdXJyZW50''@;'; put 'put ''IiwiRGVzY3JpYmVkQnkiLCJEZXRhaWxzIiwiRGlzYWJsZWQiLCJFcnJvck1lc3NhZ2UiLCJFeHBhbmRlZCIsIkZsb3dUbyIsIkhhc1BvcHVwIiwiSGlkZGVuIiwiSW52YWxpZCIsIktleVNob3J0Y3V0cyIsIkxhYmVsIiwiTGFiZWxsZWRCeSIsIkxldmVsIiwiTGl2ZSIsIk1vZGFsIiwiTXVs''@;'; put 'put ''dGlMaW5lIiwiTXVsdGlTZWxlY3RhYmxlIiwiT3JpZW50YXRpb24iLCJPd25zIiwiUGxhY2Vob2xkZXIiLCJQb3NJblNldCIsIlByZXNzZWQiLCJSZWFkT25seSIsIlJlbGV2YW50IiwiUmVxdWlyZWQiLCJSb2xlRGVzY3JpcHRpb24iLCJSb3dDb3VudCIsIlJvd0luZGV4IiwiUm93U3BhbiIs''@;'; put 'put ''IlNlbGVjdGVkIiwiU2V0U2l6ZSIsIlNvcnQiLCJWYWx1ZU1heCIsIlZhbHVlTWluIiwiVmFsdWVOb3ciLCJWYWx1ZVRleHQiXS5mb3JFYWNoKG49PnAxZShFbGVtZW50LnByb3RvdHlwZSwiYXJpYS0iK24udG9Mb3dlckNhc2UoKSwiYXJpYSIrbikpKTtjb25zdCBqUD13aW5kb3csUUc9alAu''@;'; put 'put ''U2hhZG93Um9vdCYmKHZvaWQgMD09PWpQLlNoYWR5Q1NTfHxqUC5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsZSQ9U3ltYm9sKCksZzFlPW5ldyBXZWFr''@;'; put 'put ''TWFwO2NsYXNzIG0xZXtjb25zdHJ1Y3Rvcih0LGUscil7aWYodGhpcy5fJGNzc1Jlc3VsdCQ9ITAsciE9PWUkKXRocm93IEVycm9yKCJDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLiIpO3RoaXMuY3NzVGV4dD10LHRoaXMu''@;'; put 'put ''dD1lfWdldCBzdHlsZVNoZWV0KCl7bGV0IHQ9dGhpcy5vO2NvbnN0IGU9dGhpcy50O2lmKFFHJiZ2b2lkIDA9PT10KXtjb25zdCByPXZvaWQgMCE9PWUmJjE9PT1lLmxlbmd0aDtyJiYodD1nMWUuZ2V0KGUpKSx2b2lkIDA9PT10JiYoKHRoaXMubz10PW5ldyBDU1NTdHlsZVNoZWV0KS5yZXBs''@;'; put 'put ''YWNlU3luYyh0aGlzLmNzc1RleHQpLHImJmcxZS5zZXQoZSx0KSl9cmV0dXJuIHR9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCB2MWU9KG4sLi4udCk9Pntjb25zdCBlPTE9PT1uLmxlbmd0aD9uWzBdOnQucmVkdWNlKChyLGksYSk9PnIrKGM9PntpZighMD09PWMuXyRj''@;'; put 'put ''c3NSZXN1bHQkKXJldHVybiBjLmNzc1RleHQ7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBjO3Rocm93IEVycm9yKCJWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogIitjKyIuIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNz''@;'; put 'put ''IG5vbi1saXRlcmFsIHZhbHVlcywgYnV0IHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS4iKX0pKGkpK25bYSsxXSxuWzBdKTtyZXR1cm4gbmV3IG0xZShlLG4sZSQpfSx5MWU9UUc/bj0+bjpuPT5uIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8odD0+e2xldCBlPSIiO2Zvcihj''@;'; put 'put ''b25zdCByIG9mIHQuY3NzUnVsZXMpZSs9ci5jc3NUZXh0O3JldHVybihuPT5uZXcgbTFlKCJzdHJpbmciPT10eXBlb2Ygbj9uOm4rIiIsdm9pZCAwLGUkKSkoZSl9KShuKTpuO3ZhciB0JDtjb25zdCB6UD13aW5kb3csXzFlPXpQLnRydXN0ZWRUeXBlcyxTSWU9XzFlP18xZS5lbXB0eVNjcmlw''@;'; put 'put ''dDoiIixiMWU9elAucmVhY3RpdmVFbGVtZW50UG9seWZpbGxTdXBwb3J0LG4kPXt0b0F0dHJpYnV0ZShuLHQpe3N3aXRjaCh0KXtjYXNlIEJvb2xlYW46bj1uP1NJZTpudWxsO2JyZWFrO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6bj1udWxsPT1uP246SlNPTi5zdHJpbmdpZnkobil9cmV0dXJu''@;'; put 'put ''IG59LGZyb21BdHRyaWJ1dGUobix0KXtsZXQgZT1uO3N3aXRjaCh0KXtjYXNlIEJvb2xlYW46ZT1udWxsIT09bjticmVhaztjYXNlIE51bWJlcjplPW51bGw9PT1uP251bGw6TnVtYmVyKG4pO2JyZWFrO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6dHJ5e2U9SlNPTi5wYXJzZShuKX1jYXRjaHtl''@;'; put 'put ''PW51bGx9fXJldHVybiBlfX0sdzFlPShuLHQpPT50IT09biYmKHQ9PXR8fG49PW4pLHIkPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOm4kLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDp3MWV9LGkkPSJmaW5hbGl6ZWQiO2NsYXNzIGl3IGV4dGVuZHMgSFRNTEVsZW1lbnR7Y29u''@;'; put 'put ''c3RydWN0b3IoKXtzdXBlcigpLHRoaXMuXyRFaT1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExLHRoaXMuaGFzVXBkYXRlZD0hMSx0aGlzLl8kRWw9bnVsbCx0aGlzLl8kRXUoKX1zdGF0aWMgYWRkSW5pdGlhbGl6ZXIodCl7dmFyIGU7dGhpcy5maW5hbGl6ZSgpLChudWxsIT09KGU9''@;'; put 'put ''dGhpcy5oKSYmdm9pZCAwIT09ZT9lOnRoaXMuaD1bXSkucHVzaCh0KX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtjb25zdCB0PVtdO3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGUscik9Pntjb25zdCBpPXRoaXMuXyRFcChy''@;'; put 'put ''LGUpO3ZvaWQgMCE9PWkmJih0aGlzLl8kRXYuc2V0KGksciksdC5wdXNoKGkpKX0pLHR9c3RhdGljIGNyZWF0ZVByb3BlcnR5KHQsZT1yJCl7aWYoZS5zdGF0ZSYmKGUuYXR0cmlidXRlPSExKSx0aGlzLmZpbmFsaXplKCksdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQodCxlKSwhZS5ub0Fj''@;'; put 'put ''Y2Vzc29yJiYhdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpe2NvbnN0IGk9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodCwic3ltYm9sIj09dHlwZW9mIHQ/U3ltYm9sKCk6Il9fIit0LGUpO3ZvaWQgMCE9PWkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlw''@;'; put 'put ''ZSx0LGkpfX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsZSxyKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbZV19LHNldChpKXtjb25zdCBhPXRoaXNbdF07dGhpc1tlXT1pLHRoaXMucmVxdWVzdFVwZGF0ZSh0LGEscil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1z''@;'; put 'put ''dGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldCh0KXx8ciR9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShpJCkpcmV0dXJuITE7dGhpc1tpJF09ITA7Y29uc3QgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''dGhpcyk7aWYodC5maW5hbGl6ZSgpLHZvaWQgMCE9PXQuaCYmKHRoaXMuaD1bLi4udC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKHQuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3Qg''@;'; put 'put ''ZT10aGlzLnByb3BlcnRpZXMscj1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKV07Zm9yKGNvbnN0IGkgb2Ygcil0aGlzLmNyZWF0ZVByb3BlcnR5KGksZVtpXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlz''@;'; put 'put ''LmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXModCl7Y29uc3QgZT1bXTtpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdCByPW5ldyBTZXQodC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaSBvZiByKWUudW5zaGlmdCh5MWUoaSkpfWVs''@;'; put 'put ''c2Ugdm9pZCAwIT09dCYmZS5wdXNoKHkxZSh0KSk7cmV0dXJuIGV9c3RhdGljIF8kRXAodCxlKXtjb25zdCByPWUuYXR0cmlidXRlO3JldHVybiExPT09cj92b2lkIDA6InN0cmluZyI9PXR5cGVvZiByP3I6InN0cmluZyI9PXR5cGVvZiB0P3QudG9Mb3dlckNhc2UoKTp2b2lkIDB9XyRFdSgp''@;'; put 'put ''e3ZhciB0O3RoaXMuXyRFXz1uZXcgUHJvbWlzZShlPT50aGlzLmVuYWJsZVVwZGF0aW5nPWUpLHRoaXMuXyRBTD1uZXcgTWFwLHRoaXMuXyRFZygpLHRoaXMucmVxdWVzdFVwZGF0ZSgpLG51bGw9PT0odD10aGlzLmNvbnN0cnVjdG9yLmgpfHx2b2lkIDA9PT10fHx0LmZvckVhY2goZT0+ZSh0''@;'; put 'put ''aGlzKSl9YWRkQ29udHJvbGxlcih0KXt2YXIgZSxyOyhudWxsIT09KGU9dGhpcy5fJEVTKSYmdm9pZCAwIT09ZT9lOnRoaXMuXyRFUz1bXSkucHVzaCh0KSx2b2lkIDAhPT10aGlzLnJlbmRlclJvb3QmJnRoaXMuaXNDb25uZWN0ZWQmJihudWxsPT09KHI9dC5ob3N0Q29ubmVjdGVkKXx8dm9p''@;'; put 'put ''ZCAwPT09cnx8ci5jYWxsKHQpKX1yZW1vdmVDb250cm9sbGVyKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLl8kRVMpfHx2b2lkIDA9PT1lfHxlLnNwbGljZSh0aGlzLl8kRVMuaW5kZXhPZih0KT4+PjAsMSl9XyRFZygpe3RoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFj''@;'; put 'put ''aCgodCxlKT0+e3RoaXMuaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLl8kRWkuc2V0KGUsdGhpc1tlXSksZGVsZXRlIHRoaXNbZV0pfSl9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciB0O2NvbnN0IGU9bnVsbCE9PSh0PXRoaXMuc2hhZG93Um9vdCkmJnZvaWQgMCE9PXQ/dDp0aGlzLmF0dGFjaFNo''@;'; put 'put ''YWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4oKG4sdCk9PntRRz9uLmFkb3B0ZWRTdHlsZVNoZWV0cz10Lm1hcChlPT5lIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD9lOmUuc3R5bGVTaGVldCk6dC5mb3JFYWNoKGU9Pntjb25zdCByPWRvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoInN0eWxlIiksaT1qUC5saXROb25jZTt2b2lkIDAhPT1pJiZyLnNldEF0dHJpYnV0ZSgibm9uY2UiLGkpLHIudGV4dENvbnRlbnQ9ZS5jc3NUZXh0LG4uYXBwZW5kQ2hpbGQocil9KX0pKGUsdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50U3R5bGVzKSxlfWNvbm5lY3RlZENh''@;'; put 'put ''bGxiYWNrKCl7dmFyIHQ7dm9pZCAwPT09dGhpcy5yZW5kZXJSb290JiYodGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpKSx0aGlzLmVuYWJsZVVwZGF0aW5nKCEwKSxudWxsPT09KHQ9dGhpcy5fJEVTKXx8dm9pZCAwPT09dHx8dC5mb3JFYWNoKGU9Pnt2YXIgcjtyZXR1''@;'; put 'put ''cm4gbnVsbD09PShyPWUuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2FsbChlKX0pfWVuYWJsZVVwZGF0aW5nKHQpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciB0O251bGw9PT0odD10aGlzLl8kRVMpfHx2b2lkIDA9PT10fHx0LmZvckVhY2goZT0+e3ZhciByO3Jl''@;'; put 'put ''dHVybiBudWxsPT09KHI9ZS5ob3N0RGlzY29ubmVjdGVkKXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKGUpfSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQsZSxyKXt0aGlzLl8kQUsodCxyKX1fJEVPKHQsZSxyPXIkKXt2YXIgaTtjb25zdCBhPXRoaXMuY29uc3RydWN0b3IuXyRFcCh0''@;'; put 'put ''LHIpO2lmKHZvaWQgMCE9PWEmJiEwPT09ci5yZWZsZWN0KXtjb25zdCBjPSh2b2lkIDAhPT0obnVsbD09PShpPXIuY29udmVydGVyKXx8dm9pZCAwPT09aT92b2lkIDA6aS50b0F0dHJpYnV0ZSk/ci5jb252ZXJ0ZXI6biQpLnRvQXR0cmlidXRlKGUsci50eXBlKTt0aGlzLl8kRWw9dCxudWxs''@;'; put 'put ''PT1jP3RoaXMucmVtb3ZlQXR0cmlidXRlKGEpOnRoaXMuc2V0QXR0cmlidXRlKGEsYyksdGhpcy5fJEVsPW51bGx9fV8kQUsodCxlKXt2YXIgcjtjb25zdCBpPXRoaXMuY29uc3RydWN0b3IsYT1pLl8kRXYuZ2V0KHQpO2lmKHZvaWQgMCE9PWEmJnRoaXMuXyRFbCE9PWEpe2NvbnN0IGM9aS5n''@;'; put 'put ''ZXRQcm9wZXJ0eU9wdGlvbnMoYSksbT0iZnVuY3Rpb24iPT10eXBlb2YgYy5jb252ZXJ0ZXI/e2Zyb21BdHRyaWJ1dGU6Yy5jb252ZXJ0ZXJ9OnZvaWQgMCE9PShudWxsPT09KHI9Yy5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmZyb21BdHRyaWJ1dGUpP2MuY29udmVydGVyOm4k''@;'; put 'put ''O3RoaXMuXyRFbD1hLHRoaXNbYV09bS5mcm9tQXR0cmlidXRlKGUsYy50eXBlKSx0aGlzLl8kRWw9bnVsbH19cmVxdWVzdFVwZGF0ZSh0LGUscil7bGV0IGk9ITA7dm9pZCAwIT09dCYmKCgocj1yfHx0aGlzLmNvbnN0cnVjdG9yLmdldFByb3BlcnR5T3B0aW9ucyh0KSkuaGFzQ2hhbmdlZHx8''@;'; put 'put ''dzFlKSh0aGlzW3RdLGUpPyh0aGlzLl8kQUwuaGFzKHQpfHx0aGlzLl8kQUwuc2V0KHQsZSksITA9PT1yLnJlZmxlY3QmJnRoaXMuXyRFbCE9PXQmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldCh0LHIpKSk6aT0hMSksIXRoaXMuaXNVcGRh''@;'; put 'put ''dGVQZW5kaW5nJiZpJiYodGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIHQ9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXt0LmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgdC5fJEVffWNhdGNoKHIpe1Byb21pc2UucmVqZWN0KHIpfWNvbnN0IGU9dC5zY2hlZHVsZVVwZGF0''@;'; put 'put ''ZSgpO3JldHVybiBudWxsIT1lJiYoeWllbGQgZSksIXQuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIHQ7aWYoIXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0''@;'; put 'put ''aGlzLl8kRWkuZm9yRWFjaCgoaSxhKT0+dGhpc1thXT1pKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgZT0hMTtjb25zdCByPXRoaXMuXyRBTDt0cnl7ZT10aGlzLnNob3VsZFVwZGF0ZShyKSxlPyh0aGlzLndpbGxVcGRhdGUociksbnVsbD09PSh0PXRoaXMuXyRFUyl8fHZvaWQgMD09PXR8fHQu''@;'; put 'put ''Zm9yRWFjaChpPT57dmFyIGE7cmV0dXJuIG51bGw9PT0oYT1pLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNhbGwoaSl9KSx0aGlzLnVwZGF0ZShyKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaSl7dGhyb3cgZT0hMSx0aGlzLl8kRWsoKSxpfWUmJnRoaXMuXyRBRShyKX13aWxsVXBk''@;'; put 'put ''YXRlKHQpe31fJEFFKHQpe3ZhciBlO251bGw9PT0oZT10aGlzLl8kRVMpfHx2b2lkIDA9PT1lfHxlLmZvckVhY2gocj0+e3ZhciBpO3JldHVybiBudWxsPT09KGk9ci5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2FsbChyKX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFz''@;'; put 'put ''VXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZCh0KSksdGhpcy51cGRhdGVkKHQpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBs''@;'; put 'put ''ZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUodCl7cmV0dXJuITB9dXBkYXRlKHQpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChlLHIpPT50aGlzLl8kRU8ocix0aGlzW3JdLGUpKSx0aGlzLl8kRUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVk''@;'; put 'put ''KHQpe31maXJzdFVwZGF0ZWQodCl7fX12YXIgYSQ7aXdbaSRdPSEwLGl3LmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAsaXcuZWxlbWVudFN0eWxlcz1bXSxpdy5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LGIxZT8uKHtSZWFjdGl2ZUVsZW1lbnQ6aXd9KSwobnVsbCE9PSh0JD16''@;'; put 'put ''UC5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PXQkP3QkOnpQLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IFVQPXdpbmRvdyxhdz1VUC50cnVzdGVkVHlwZXMsQzFlPWF3P2F3LmNyZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVI''@;'; put 'put ''VE1MOm49Pm59KTp2b2lkIDAsV1A9IiRsaXQkIixKZz1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLG8kPSI/IitKZyxNSWU9YDwke28kfT5gLFA5PWRvY3VtZW50LHFFPSgpPT5QOS5jcmVhdGVDb21tZW50KCIiKSxKRT1uPT5udWxsPT09bnx8Im9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBuJiYiZnVuY3Rpb24iIT10eXBlb2YgbixTMWU9QXJyYXkuaXNBcnJheSxzJD0iWyBcdFxuXGZccl0iLFFFPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLHgxZT0vLS0+L2csRTFlPS8+L2csRjk9UmVnRXhwKGA+fCR7cyR9KD86KFteXFxz''@;'; put 'put ''Iic+PS9dKykoJHtzJH0qPSR7cyR9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksVDFlPS8nL2csQTFlPS8iL2csazFlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxEMWU9bj0+KHQsLi4uZSk9Pih7XyRsaXRUeXBlJDpuLHN0cmluZ3M6dCx2''@;'; put 'put ''YWx1ZXM6ZX0pLHhJZT1EMWUoMSksRUllPUQxZSgyKSxvdz1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxaMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLEkxZT1uZXcgV2Vha01hcCxIOT1QOS5jcmVhdGVUcmVlV2Fsa2VyKFA5LDEyOSxudWxsLCExKTtmdW5jdGlvbiBSMWUobix0KXtp''@;'; put 'put ''ZighQXJyYXkuaXNBcnJheShuKXx8IW4uaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09QzFlP0MxZS5jcmVhdGVIVE1MKHQpOnR9Y2xhc3MgZVR7Y29uc3RydWN0b3Ioe3N0cmluZ3M6dCxf''@;'; put 'put ''JGxpdFR5cGUkOmV9LHIpe2xldCBpO3RoaXMucGFydHM9W107bGV0IGE9MCxjPTA7Y29uc3QgbT10Lmxlbmd0aC0xLEM9dGhpcy5wYXJ0cyxbUCxZXT0oKG4sdCk9Pntjb25zdCBlPW4ubGVuZ3RoLTEscj1bXTtsZXQgaSxhPTI9PT10PyI8c3ZnPiI6IiIsYz1RRTtmb3IobGV0IG09MDttPGU7''@;'; put 'put ''bSsrKXtjb25zdCBDPW5bbV07bGV0IFAsWSxKPS0xLGNlPTA7Zm9yKDtjZTxDLmxlbmd0aCYmKGMubGFzdEluZGV4PWNlLFk9Yy5leGVjKEMpLG51bGwhPT1ZKTspY2U9Yy5sYXN0SW5kZXgsYz09PVFFPyIhLS0iPT09WVsxXT9jPXgxZTp2b2lkIDAhPT1ZWzFdP2M9RTFlOnZvaWQgMCE9PVlb''@;'; put 'put ''Ml0/KGsxZS50ZXN0KFlbMl0pJiYoaT1SZWdFeHAoIjwvIitZWzJdLCJnIikpLGM9RjkpOnZvaWQgMCE9PVlbM10mJihjPUY5KTpjPT09Rjk/Ij4iPT09WVswXT8oYz1pPz9RRSxKPS0xKTp2b2lkIDA9PT1ZWzFdP0o9LTI6KEo9Yy5sYXN0SW5kZXgtWVsyXS5sZW5ndGgsUD1ZWzFdLGM9dm9p''@;'; put 'put ''ZCAwPT09WVszXT9GOTonIic9PT1ZWzNdP0ExZTpUMWUpOmM9PT1BMWV8fGM9PT1UMWU/Yz1GOTpjPT09eDFlfHxjPT09RTFlP2M9UUU6KGM9RjksaT12b2lkIDApO2NvbnN0IGZlPWM9PT1GOSYmblttKzFdLnN0YXJ0c1dpdGgoIi8+Iik/IiAiOiIiO2ErPWM9PT1RRT9DK01JZTpKPj0wPyhy''@;'; put 'put ''LnB1c2goUCksQy5zbGljZSgwLEopK1dQK0Muc2xpY2UoSikrSmcrZmUpOkMrSmcrKC0yPT09Sj8oci5wdXNoKHZvaWQgMCksbSk6ZmUpfXJldHVybltSMWUobixhKyhuW2VdfHwiPD8+IikrKDI9PT10PyI8L3N2Zz4iOiIiKSkscl19KSh0LGUpO2lmKHRoaXMuZWw9ZVQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dChQLHIpLEg5LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09ZSl7Y29uc3QgSj10aGlzLmVsLmNvbnRlbnQsY2U9Si5maXJzdENoaWxkO2NlLnJlbW92ZSgpLEouYXBwZW5kKC4uLmNlLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShpPUg5Lm5leHROb2RlKCkpJiZDLmxlbmd0aDxt''@;'; put 'put ''Oyl7aWYoMT09PWkubm9kZVR5cGUpe2lmKGkuaGFzQXR0cmlidXRlcygpKXtjb25zdCBKPVtdO2Zvcihjb25zdCBjZSBvZiBpLmdldEF0dHJpYnV0ZU5hbWVzKCkpaWYoY2UuZW5kc1dpdGgoV1ApfHxjZS5zdGFydHNXaXRoKEpnKSl7Y29uc3QgZmU9WVtjKytdO2lmKEoucHVzaChjZSksdm9p''@;'; put 'put ''ZCAwIT09ZmUpe2NvbnN0IEFlPWkuZ2V0QXR0cmlidXRlKGZlLnRvTG93ZXJDYXNlKCkrV1ApLnNwbGl0KEpnKSxIZT0vKFsuP0BdKT8oLiopLy5leGVjKGZlKTtDLnB1c2goe3R5cGU6MSxpbmRleDphLG5hbWU6SGVbMl0sc3RyaW5nczpBZSxjdG9yOiIuIj09PUhlWzFdP1AxZToiPyI9PT1I''@;'; put 'put ''ZVsxXT9GMWU6IkAiPT09SGVbMV0/SDFlOnRUfSl9ZWxzZSBDLnB1c2goe3R5cGU6NixpbmRleDphfSl9Zm9yKGNvbnN0IGNlIG9mIEopaS5yZW1vdmVBdHRyaWJ1dGUoY2UpfWlmKGsxZS50ZXN0KGkudGFnTmFtZSkpe2NvbnN0IEo9aS50ZXh0Q29udGVudC5zcGxpdChKZyksY2U9Si5sZW5n''@;'; put 'put ''dGgtMTtpZihjZT4wKXtpLnRleHRDb250ZW50PWF3P2F3LmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgZmU9MDtmZTxjZTtmZSsrKWkuYXBwZW5kKEpbZmVdLHFFKCkpLEg5Lm5leHROb2RlKCksQy5wdXNoKHt0eXBlOjIsaW5kZXg6KythfSk7aS5hcHBlbmQoSltjZV0scUUoKSl9fX1lbHNlIGlm''@;'; put 'put ''KDg9PT1pLm5vZGVUeXBlKWlmKGkuZGF0YT09PW8kKUMucHVzaCh7dHlwZToyLGluZGV4OmF9KTtlbHNle2xldCBKPS0xO2Zvcig7LTEhPT0oSj1pLmRhdGEuaW5kZXhPZihKZyxKKzEpKTspQy5wdXNoKHt0eXBlOjcsaW5kZXg6YX0pLEorPUpnLmxlbmd0aC0xfWErK319c3RhdGljIGNyZWF0''@;'; put 'put ''ZUVsZW1lbnQodCxlKXtjb25zdCByPVA5LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIHIuaW5uZXJIVE1MPXQscn19ZnVuY3Rpb24gTjkobix0LGU9bixyKXt2YXIgaSxhLGMsbTtpZih0PT09b3cpcmV0dXJuIHQ7bGV0IEM9dm9pZCAwIT09cj9udWxsPT09KGk9ZS5fJENvKXx8''@;'; put 'put ''dm9pZCAwPT09aT92b2lkIDA6aVtyXTplLl8kQ2w7Y29uc3QgUD1KRSh0KT92b2lkIDA6dC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEM/LmNvbnN0cnVjdG9yIT09UCYmKG51bGw9PT0oYT1DPy5fJEFPKXx8dm9pZCAwPT09YXx8YS5jYWxsKEMsITEpLHZvaWQgMD09PVA/Qz12b2lkIDA6KEM9''@;'; put 'put ''bmV3IFAobiksQy5fJEFUKG4sZSxyKSksdm9pZCAwIT09cj8obnVsbCE9PShjPShtPWUpLl8kQ28pJiZ2b2lkIDAhPT1jP2M6bS5fJENvPVtdKVtyXT1DOmUuXyRDbD1DKSx2b2lkIDAhPT1DJiYodD1OOShuLEMuXyRBUyhuLHQudmFsdWVzKSxDLHIpKSx0fWNsYXNzIE8xZXtjb25zdHJ1Y3Rv''@;'; put 'put ''cih0LGUpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD10LHRoaXMuXyRBTT1lfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUodCl7dmFyIGU7Y29uc3R7ZWw6e2NvbnRl''@;'; put 'put ''bnQ6cn0scGFydHM6aX09dGhpcy5fJEFELGE9KG51bGwhPT0oZT10Py5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09ZT9lOlA5KS5pbXBvcnROb2RlKHIsITApO0g5LmN1cnJlbnROb2RlPWE7bGV0IGM9SDkubmV4dE5vZGUoKSxtPTAsQz0wLFA9aVswXTtmb3IoO3ZvaWQgMCE9PVA7KXtpZiht''@;'; put 'put ''PT09UC5pbmRleCl7bGV0IFk7Mj09PVAudHlwZT9ZPW5ldyBzdyhjLGMubmV4dFNpYmxpbmcsdGhpcyx0KToxPT09UC50eXBlP1k9bmV3IFAuY3RvcihjLFAubmFtZSxQLnN0cmluZ3MsdGhpcyx0KTo2PT09UC50eXBlJiYoWT1uZXcgTjFlKGMsdGhpcyx0KSksdGhpcy5fJEFWLnB1c2goWSks''@;'; put 'put ''UD1pWysrQ119bSE9PVA/LmluZGV4JiYoYz1IOS5uZXh0Tm9kZSgpLG0rKyl9cmV0dXJuIEg5LmN1cnJlbnROb2RlPVA5LGF9dih0KXtsZXQgZT0wO2Zvcihjb25zdCByIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1yJiYodm9pZCAwIT09ci5zdHJpbmdzPyhyLl8kQUkodCxyLGUpLGUrPXIuc3Ry''@;'; put 'put ''aW5ncy5sZW5ndGgtMik6ci5fJEFJKHRbZV0pKSxlKyt9fWNsYXNzIHN3e2NvbnN0cnVjdG9yKHQsZSxyLGkpe3ZhciBhO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1aMCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT10LHRoaXMuXyRBQj1lLHRoaXMuXyRBTT1yLHRoaXMub3B0aW9ucz1pLHRo''@;'; put 'put ''aXMuXyRDcD1udWxsPT09KGE9aT8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1hfHxhfWdldCBfJEFVKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9PShlPW51bGw9PT0odD10aGlzLl8kQU0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0Ll8kQVUpJiZ2b2lkIDAhPT1lP2U6dGhpcy5fJENwfWdldCBwYXJl''@;'; put 'put ''bnROb2RlKCl7bGV0IHQ9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgZT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWUmJjExPT09dD8ubm9kZVR5cGUmJih0PWUucGFyZW50Tm9kZSksdH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQgZW5kTm9kZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl8kQUJ9XyRBSSh0LGU9dGhpcyl7dD1OOSh0aGlzLHQsZSksSkUodCk/dD09PVowfHxudWxsPT10fHwiIj09PXQ/KHRoaXMuXyRBSCE9PVowJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9WjApOnQhPT10aGlzLl8kQUgmJnQhPT1vdyYmdGhpcy5fKHQpOnZvaWQgMCE9PXQuXyRsaXRUeXBl''@;'; put 'put ''JD90aGlzLmcodCk6dm9pZCAwIT09dC5ub2RlVHlwZT90aGlzLiQodCk6KG49PlMxZShuKXx8ImZ1bmN0aW9uIj09dHlwZW9mIG4/LltTeW1ib2wuaXRlcmF0b3JdKSh0KT90aGlzLlQodCk6dGhpcy5fKHQpfWsodCl7cmV0dXJuIHRoaXMuXyRBQS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0''@;'; put 'put ''LHRoaXMuXyRBQil9JCh0KXt0aGlzLl8kQUghPT10JiYodGhpcy5fJEFSKCksdGhpcy5fJEFIPXRoaXMuayh0KSl9Xyh0KXt0aGlzLl8kQUghPT1aMCYmSkUodGhpcy5fJEFIKT90aGlzLl8kQUEubmV4dFNpYmxpbmcuZGF0YT10OnRoaXMuJChQOS5jcmVhdGVUZXh0Tm9kZSh0KSksdGhpcy5f''@;'; put 'put ''JEFIPXR9Zyh0KXt2YXIgZTtjb25zdHt2YWx1ZXM6cixfJGxpdFR5cGUkOml9PXQsYT0ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5fJEFDKHQpOih2b2lkIDA9PT1pLmVsJiYoaS5lbD1lVC5jcmVhdGVFbGVtZW50KFIxZShpLmgsaS5oWzBdKSx0aGlzLm9wdGlvbnMpKSxpKTtpZigobnVsbD09''@;'; put 'put ''PShlPXRoaXMuXyRBSCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuXyRBRCk9PT1hKXRoaXMuXyRBSC52KHIpO2Vsc2V7Y29uc3QgYz1uZXcgTzFlKGEsdGhpcyksbT1jLnUodGhpcy5vcHRpb25zKTtjLnYociksdGhpcy4kKG0pLHRoaXMuXyRBSD1jfX1fJEFDKHQpe2xldCBlPUkxZS5nZXQodC5z''@;'; put 'put ''dHJpbmdzKTtyZXR1cm4gdm9pZCAwPT09ZSYmSTFlLnNldCh0LnN0cmluZ3MsZT1uZXcgZVQodCkpLGV9VCh0KXtTMWUodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgZT10aGlzLl8kQUg7bGV0IHIsaT0wO2Zvcihjb25zdCBhIG9mIHQpaT09PWUubGVuZ3Ro''@;'; put 'put ''P2UucHVzaChyPW5ldyBzdyh0aGlzLmsocUUoKSksdGhpcy5rKHFFKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6cj1lW2ldLHIuXyRBSShhKSxpKys7aTxlLmxlbmd0aCYmKHRoaXMuXyRBUihyJiZyLl8kQUIubmV4dFNpYmxpbmcsaSksZS5sZW5ndGg9aSl9XyRBUih0PXRoaXMuXyRBQS5uZXh0''@;'; put 'put ''U2libGluZyxlKXt2YXIgcjtmb3IobnVsbD09PShyPXRoaXMuXyRBUCl8fHZvaWQgMD09PXJ8fHIuY2FsbCh0aGlzLCExLCEwLGUpO3QmJnQhPT10aGlzLl8kQUI7KXtjb25zdCBpPXQubmV4dFNpYmxpbmc7dC5yZW1vdmUoKSx0PWl9fXNldENvbm5lY3RlZCh0KXt2YXIgZTt2b2lkIDA9PT10''@;'; put 'put ''aGlzLl8kQU0mJih0aGlzLl8kQ3A9dCxudWxsPT09KGU9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHRoaXMsdCkpfX1jbGFzcyB0VHtjb25zdHJ1Y3Rvcih0LGUscixpLGEpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1aMCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuZWxlbWVudD10LHRo''@;'; put 'put ''aXMubmFtZT1lLHRoaXMuXyRBTT1pLHRoaXMub3B0aW9ucz1hLHIubGVuZ3RoPjJ8fCIiIT09clswXXx8IiIhPT1yWzFdPyh0aGlzLl8kQUg9QXJyYXkoci5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9cik6dGhpcy5fJEFIPVowfWdldCB0YWdOYW1lKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkodCxlPXRoaXMscixpKXtjb25zdCBhPXRoaXMuc3RyaW5ncztsZXQgYz0hMTtpZih2b2lkIDA9PT1hKXQ9TjkodGhpcyx0LGUsMCksYz0hSkUodCl8fHQhPT10aGlzLl8kQUgmJnQhPT1v''@;'; put 'put ''dyxjJiYodGhpcy5fJEFIPXQpO2Vsc2V7Y29uc3QgbT10O2xldCBDLFA7Zm9yKHQ9YVswXSxDPTA7QzxhLmxlbmd0aC0xO0MrKylQPU45KHRoaXMsbVtyK0NdLGUsQyksUD09PW93JiYoUD10aGlzLl8kQUhbQ10pLGN8fChjPSFKRShQKXx8UCE9PXRoaXMuXyRBSFtDXSksUD09PVowP3Q9WjA6''@;'; put 'put ''dCE9PVowJiYodCs9KFA/PyIiKSthW0MrMV0pLHRoaXMuXyRBSFtDXT1QfWMmJiFpJiZ0aGlzLmoodCl9aih0KXt0PT09WjA/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHQ/PyIiKX19Y2xhc3MgUDFl''@;'; put 'put ''IGV4dGVuZHMgdFR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0zfWoodCl7dGhpcy5lbGVtZW50W3RoaXMubmFtZV09dD09PVowP3ZvaWQgMDp0fX1jb25zdCBUSWU9YXc/YXcuZW1wdHlTY3JpcHQ6IiI7Y2xhc3MgRjFlIGV4dGVuZHMgdFR7Y29uc3RydWN0''@;'; put 'put ''b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT00fWoodCl7dCYmdCE9PVowP3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLFRJZSk6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpfX1jbGFzcyBIMWUgZXh0ZW5kcyB0VHtjb25zdHJ1Y3Rv''@;'; put 'put ''cih0LGUscixpLGEpe3N1cGVyKHQsZSxyLGksYSksdGhpcy50eXBlPTV9XyRBSSh0LGU9dGhpcyl7dmFyIHI7aWYoKHQ9bnVsbCE9PShyPU45KHRoaXMsdCxlLDApKSYmdm9pZCAwIT09cj9yOlowKT09PW93KXJldHVybjtjb25zdCBpPXRoaXMuXyRBSCxhPXQ9PT1aMCYmaSE9PVowfHx0LmNh''@;'; put 'put ''cHR1cmUhPT1pLmNhcHR1cmV8fHQub25jZSE9PWkub25jZXx8dC5wYXNzaXZlIT09aS5wYXNzaXZlLGM9dCE9PVowJiYoaT09PVowfHxhKTthJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxpKSxjJiZ0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cih0aGlzLm5hbWUsdGhpcyx0KSx0aGlzLl8kQUg9dH1oYW5kbGVFdmVudCh0KXt2YXIgZSxyOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShyPW51bGw9PT0oZT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmhvc3QpJiZ2b2lk''@;'; put 'put ''IDAhPT1yP3I6dGhpcy5lbGVtZW50LHQpOnRoaXMuXyRBSC5oYW5kbGVFdmVudCh0KX19Y2xhc3MgTjFle2NvbnN0cnVjdG9yKHQsZSxyKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLnR5cGU9Nix0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBTT1lLHRoaXMub3B0aW9ucz1yfWdldCBfJEFVKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkodCl7TjkodGhpcyx0KX19Y29uc3QgVjFlPVVQLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7dmFyIGwkLGMkO1YxZT8uKGVULHN3KSwobnVsbCE9PShhJD1VUC5saXRIdG1sVmVyc2lvbnMpJiZ2b2lkIDAhPT1hJD9hJDpVUC5saXRIdG1sVmVyc2lvbnM9''@;'; put 'put ''W10pLnB1c2goIjIuOC4wIik7Y2xhc3MgblQgZXh0ZW5kcyBpd3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZW5kZXJPcHRpb25zPXtob3N0OnRoaXN9LHRoaXMuXyREbz12b2lkIDB9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciB0LGU7Y29uc3Qgcj1zdXBlci5jcmVh''@;'; put 'put ''dGVSZW5kZXJSb290KCk7cmV0dXJuIG51bGwhPT0odD0oZT10aGlzLnJlbmRlck9wdGlvbnMpLnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PXR8fChlLnJlbmRlckJlZm9yZT1yLmZpcnN0Q2hpbGQpLHJ9dXBkYXRlKHQpe2NvbnN0IGU9dGhpcy5yZW5kZXIoKTt0aGlzLmhhc1VwZGF0ZWR8fCh0''@;'; put 'put ''aGlzLnJlbmRlck9wdGlvbnMuaXNDb25uZWN0ZWQ9dGhpcy5pc0Nvbm5lY3RlZCksc3VwZXIudXBkYXRlKHQpLHRoaXMuXyREbz0oKG4sdCxlKT0+e3ZhciByLGk7Y29uc3QgYT1udWxsIT09KHI9ZT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09cj9yOnQ7bGV0IGM9YS5fJGxpdFBhcnQkO2lm''@;'; put 'put ''KHZvaWQgMD09PWMpe2NvbnN0IG09bnVsbCE9PShpPWU/LnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWk/aTpudWxsO2EuXyRsaXRQYXJ0JD1jPW5ldyBzdyh0Lmluc2VydEJlZm9yZShxRSgpLG0pLG0sdm9pZCAwLGU/P3t9KX1yZXR1cm4gYy5fJEFJKG4pLGN9KShlLHRoaXMucmVuZGVyUm9v''@;'; put 'put ''dCx0aGlzLnJlbmRlck9wdGlvbnMpfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIHQ7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsPT09KHQ9dGhpcy5fJERvKXx8dm9pZCAwPT09dHx8dC5zZXRDb25uZWN0ZWQoITApfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIHQ7c3VwZXIuZGlz''@;'; put 'put ''Y29ubmVjdGVkQ2FsbGJhY2soKSxudWxsPT09KHQ9dGhpcy5fJERvKXx8dm9pZCAwPT09dHx8dC5zZXRDb25uZWN0ZWQoITEpfXJlbmRlcigpe3JldHVybiBvd319blQuZmluYWxpemVkPSEwLG5ULl8kbGl0RWxlbWVudCQ9ITAsbnVsbD09PShsJD1nbG9iYWxUaGlzLmxpdEVsZW1lbnRIeWRy''@;'; put 'put ''YXRlU3VwcG9ydCl8fHZvaWQgMD09PWwkfHxsJC5jYWxsKGdsb2JhbFRoaXMse0xpdEVsZW1lbnQ6blR9KTtjb25zdCBCMWU9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O0IxZT8uKHtMaXRFbGVtZW50Om5UfSksKG51bGwhPT0oYyQ9Z2xvYmFsVGhpcy5saXRFbGVtZW50''@;'; put 'put ''VmVyc2lvbnMpJiZ2b2lkIDAhPT1jJD9jJDpnbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMy4zLjMiKTtjb25zdCBESWU9djFlYEBjaGFyc2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhzLCBjYWxjKDQg''@;'; put 'put ''KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2Utc20sIGNh''@;'; put 'put ''bGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNl''@;'; put 'put ''LWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxheW91dH49IndyYXA6bm9uZSJde2Zs''@;'; put 'put ''ZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnJp''@;'; put 'put ''Z2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRl''@;'; put 'put ''bXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIi''@;'; put 'put ''XSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1y''@;'; put 'put ''ZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246''@;'; put 'put ''aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQi''@;'; put 'put ''XXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1jb250ZW50OnN0YXJ0O2dyaWQtdGVt''@;'; put 'put ''cGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0byl9W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDpl''@;'; put 'put ''bmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfTo6c2xvdHRlZChbY2RzLWxheW91''@;'; put 'put ''dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2Jv''@;'; put 'put ''cmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0t''@;'; put 'put ''zrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDpzbSJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS3OtDYpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctcmln''@;'; put 'put ''aHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS3OtDUpIWlt''@;'; put 'put ''cG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS3O''@;'; put 'put ''tDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+OjpzbG90''@;'; put 'put ''dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12''@;'; put 'put ''ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGlj''@;'; put 'put ''YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6''@;'; put 'put ''YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtb''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJv''@;'; put 'put ''dHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXtt''@;'; put 'put ''YXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxl''@;'; put 'put ''ZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVy''@;'; put 'put ''Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhs''@;'; put 'put ''OnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWlt''@;'; put 'put ''cG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250''@;'; put 'put ''YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZs''@;'; put 'put ''ZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJd''@;'; put 'put ''KXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7YWxpZ24tc2Vs''@;'; put 'put ''ZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQi''@;'; put 'put ''XSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1o''@;'; put 'put ''b3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4t''@;'; put 'put ''cmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxn''@;'; put 'put ''OmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19W2Nkcy10ZXh0XXtmb250''@;'; put 'put ''LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmFmdGVyLFtjZHMtdGV4''@;'; put 'put ''dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmFmdGVyLFtjZHMtdGV4dF1b''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1o''@;'; put 'put ''ZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCwjMjEzMzNiKSl9W2Nkcy10ZXh0''@;'; put 'put ''Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5saW5lXXt3aWR0aDphdXRvIWltcG9y''@;'; put 'put ''dGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDUwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVp''@;'; put 'put ''Z2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp''@;'; put 'put ''ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''dGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nLC0uMDA4MzMzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0''@;'; put 'put ''OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSkgLSAxZW0pLyAyKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSkgLSAxZW0p''@;'; put 'put ''LyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUsY2FsYygyMCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcsLS4wMWVtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2Fs''@;'; put 'put ''YygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpj''@;'; put 'put ''YWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2Vt''@;'; put 'put ''KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1m''@;'; put 'put ''b250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vi''@;'; put 'put ''c2VjdGlvbi1saW5lLWhlaWdodCwxLjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCwxLjVlbSkgLSAxZW0pLyAyKSkq''@;'; put 'put ''LTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVt''@;'; put 'put ''KSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Ym9keV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQsNDAwKTtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplLGNhbGMo''@;'; put 'put ''MTQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nLC0uMDA3MTQyODZlbSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGlu''@;'; put 'put ''ZS1oZWlnaHQsMS40Mjg1NzE0ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBj''@;'; put 'put ''YWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjFlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpj''@;'; put 'put ''YWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2Vt''@;'; put 'put ''KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1ib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YWZ0ZXIsYm9keVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50Om5vbmV9''@;'; put 'put ''W2Nkcy10ZXh0Kj1tZXNzYWdlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNz''@;'; put 'put ''YWdlLWZvbnQtd2VpZ2h0LGNhbGMoNDAwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdh''@;'; put 'put ''cC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPW1lc3NhZ2VdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0''@;'; put 'put ''OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUsY2FsYygxMyAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCw0MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nLC0uMDA3NjkyZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTo6YmVmb3Jle2NvbnRl''@;'; put 'put ''bnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWln''@;'; put 'put ''aHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10''@;'; put 'put ''b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vj''@;'; put 'put ''b25kYXJ5LWxpbmUtaGVpZ2h0LDEuMjMwNzdlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHR+PWxpbmtde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsIzAwNzlhZCkpIWltcG9y''@;'; put 'put ''dGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIWltcG9ydGFudDtsaW5lLWhlaWdodDppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''b3V0bGluZSxIaWdobGlnaHQgc29saWQgMnB4KTtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LDFweCl9W2Nkcy10ZXh0fj1saW5rXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xv''@;'; put 'put ''ci1ob3Zlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwLCMwMDYwOGEpKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pe2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQsdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwLCM3YzEyYTUpKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIs''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwMCwjMzIwMDQ3KSkhaW1wb3J0YW50fUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApe1tjZHMtdGV4dD1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0''@;'; put 'put ''bGluZS13ZWJraXQsNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yKX19W2Nkcy10ZXh0fj1jb2RlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX1b''@;'; put 'put ''Y2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nk''@;'; put 'put ''cy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246''@;'; put 'put ''bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzouMDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQt''@;'; put 'put ''ZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''Y29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcx''@;'; put 'put ''NDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxh''@;'; put 'put ''eTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJpdDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2Jv''@;'; put 'put ''eC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNwbGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQo''@;'; put 'put ''Kil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhv''@;'; put 'put ''c3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9s''@;'; put 'put ''ZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRl''@;'; put 'put ''bl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRh''@;'; put 'put ''bnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5p''@;'; put 'put ''bnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9jdXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291''@;'; put 'put ''dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIHUkKG4pe3JldHVybmBjYWxjKCgke259IC8gdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlKSkgKiAxcmVtKWB9Y2xhc3MgUElle2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5mbj10LHRoaXMuc3Vic2NyaXB0aW9ucz1lfXVuc3Vic2NyaWJlKCl7Y29uc3QgdD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PXQmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UodCwx''@;'; put 'put ''KX19Y29uc3QgZCQ9bmV3IGNsYXNzIEZJZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaXB0aW9ucz1bXX1zdWJzY3JpYmUodCl7Y29uc3QgZT1uZXcgUEllKHQsdGhpcy5zdWJzY3JpcHRpb25zKTtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZSksZX1lbWl0KHQpe3RoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUuZm4odCkpfXRvRXZlbnRPYnNlcnZhYmxlKCl7cmV0dXJuIHRoaXN9fTtkJC5saXN0ZW5lcj1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJDRFNfU1RBVEVfVVBEQVRFIixuPT5kJC5lbWl0KG4uZGV0YWlsKSk7Y2xhc3MgWjN7c3RhdGljIGdldCBz''@;'; put 'put ''dGF0ZSgpe3JldHVybiBhMWUoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0aWMgZ2V0VmFsdWUodCl7cmV0dXJuIFozLnN0YXRlW3RdfXN0YXRpYyBzZXRWYWx1ZSh0LGUpe1ozLnN0YXRlW3RdPWV9c3RhdGljIGxvZygpe1hFLmxvZyhKU09OLnN0cmluZ2lmeShaMy5zdGF0ZSxudWxsLDIpKX19''@;'; put 'put ''WjMuc3RhdGVVcGRhdGVzPWQkLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29uc3QgSEllPShuLHQpPT4ibWV0aG9kIj09PXQua2luZCYmdC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiB0LmRlc2NyaXB0b3IpP3suLi50LGZpbmlzaGVyKGUpe2UuY3JlYXRlUHJvcGVydHkodC5rZXksbil9fTp7a2lu''@;'; put 'put ''ZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTp0LmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiB0LmluaXRpYWxpemVyJiYodGhpc1t0LmtleV09dC5pbml0aWFsaXplci5jYWxsKHRoaXMpKX0sZmluaXNo''@;'; put 'put ''ZXIoZSl7ZS5jcmVhdGVQcm9wZXJ0eSh0LmtleSxuKX19O2Z1bmN0aW9uIHoxZShuKXtyZXR1cm4odCxlKT0+dm9pZCAwIT09ZT8oKG4sdCxlKT0+e3QuY29uc3RydWN0b3IuY3JlYXRlUHJvcGVydHkoZSxuKX0pKG4sdCxlKTpISWUobix0KX1mdW5jdGlvbiBaMWUobix0KXtzd2l0Y2godCYm''@;'; put 'put ''dC50eXBlKXtjYXNlIEFycmF5OmNhc2UgT2JqZWN0OnJldHVybntyZWZsZWN0OiExLC4uLnR9O2Nhc2UgU3RyaW5nOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpPOShuKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmU9PmV8fG51bGx9LC4uLnR9O2Nhc2UgTnVtYmVyOnJldHVybntyZWZs''@;'; put 'put ''ZWN0OiEwLGF0dHJpYnV0ZTpPOShuKSwuLi50fTtjYXNlIEJvb2xlYW46cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOk85KG4pLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6ZT0+ZT8iIjpudWxsLGZyb21BdHRyaWJ1dGU6ZT0+ZnVuY3Rpb24gWEllKG4pe3JldHVybiBudWxsIT1uJiYiIitu''@;'; put 'put ''IT0iZmFsc2UifShlKX0sLi4udH07Y2FzZSBEYXRlOnJldHVybntyZWZsZWN0OiExLGNvbnZlcnRlcjp7ZnJvbUF0dHJpYnV0ZTplPT5uZXcgRGF0ZShlKX0sLi4udH07ZGVmYXVsdDpyZXR1cm57Li4udH19fWZ1bmN0aW9uIHk2KG4pe3JldHVybih0LGUpPT4obj8ucmVxdWlyZWQmJmZ1bmN0''@;'; put 'put ''aW9uIHFJZShuLHQsZSl7Y29uc3Qgcj1uLmZpcnN0VXBkYXRlZDtuLmZpcnN0VXBkYXRlZD1mdW5jdGlvbihpKXtpZihlJiZlLnJlcXVpcmVkJiZLRSh0aGlzW3RdKSl7Y29uc3QgYT1lLnJlcXVpcmVkTWVzc2FnZXx8ZnVuY3Rpb24oYz0id2FybmluZyIsbSxDKXtjb25zdCBQPUMudG9Mb2Nh''@;'; put 'put ''bGVMb3dlckNhc2UoKTtyZXR1cm5gJHtuMWUoYyl9OiAke219IGlzIHJlcXVpcmVkIHRvIHVzZSAke1B9IGNvbXBvbmVudC4gU2V0IHRoZSBKUyBQcm9wZXJ0eSBvciBIVE1MIEF0dHJpYnV0ZS5cblxuYCsocTBlKCk/YEFuZ3VsYXI6IDwke1B9IFske219XT0iLi4uIj48LyR7UH0+XG5gOiIi''@;'; put 'put ''KSsoUTBlKCk/YFZ1ZTogPCR7UH0gOiR7bX09Ii4uLiI+PC8ke1B9PlxuYDoiIikrKEowZSgpP2BSZWFjdDogPCR7ZnVuY3Rpb24gekRlKG4pe3JldHVybiBuMWUoZnVuY3Rpb24gakRlKG4pe3JldHVybiBuLnNwbGl0KCItIikubWFwKCh0LGUpPT5lP3QuY2hhckF0KDApLnRvVXBwZXJDYXNl''@;'; put 'put ''KCkrdC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpOnQpLmpvaW4oIiIpfShuKSl9KFApfSAke1k9bSxZLnN0YXJ0c1dpdGgoImFyaWEiKT9POShZKTpZfT17Li4ufSAvPlxuYDoiIikrYEhUTUw6IDwke1B9ICR7TzkobSl9PSIuLi4iPjwvJHtQfT5cbkphdmFTY3JpcHQ6IGRvY3VtZW50LnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IoJyR7UH0nKS4ke219ID0gJy4uLic7XG5cbmA7dmFyIFl9KGUucmVxdWlyZWQsdCx0aGlzLnRhZ05hbWUpO2lmKCJlcnJvciI9PT1lLnJlcXVpcmVkKXRocm93IEVycm9yKGEpO1hFLndhcm4oYSx0aGlzKX1yJiZyLmNhbGwodGhpcyxpKX19KHQsZSxuKSx6MWUoWjFlKGUsbikp''@;'; put 'put ''KHQsZSkpfXZhciB0UmU9djFlYEBrZXlmcmFtZXMgZmFkZUluQW5kT3V0ezAlLHRve29wYWNpdHk6MH03NSV7b3BhY2l0eToxfX06aG9zdHstLWNvbG9yOmN1cnJlbnRDb2xvcjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAx''@;'; put 'put ''cmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOnZhcigtLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jb2xvcik7Y29udGFpbjpzdHJpY3Q7Y3Vyc29yOmluaGVyaXR9c3Zne2Rpc3BsYXk6YmxvY2t9Omhvc3QoW3NpemUqPXhzXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1zbV0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPW1kXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bGddKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9eGxdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9eHhsXSl7aGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7bWluLWhlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7bWluLXdpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKX06aG9zdChbc2l6ZSo9Zml0XSl7aGVpZ2h0OmF1dG87d2lkdGg6YXV0bztjb250YWluOmxheW91dH06aG9zdChbc3RhdHVzPXN1Y2Nlc3NdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0''@;'; put 'put ''dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbc3RhdHVzPWRhbmdlcl0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0''@;'; put 'put ''KFtzdGF0dXM9d2FybmluZ10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmssIHZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwLCAjYTM2NTAwKSl9Omhvc3QoW3N0YXR1cz1pbmZvXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8s''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX06aG9zdChbc3RhdHVzPW5ldXRyYWxdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCAjNGY2MTY5KSl9Omhvc3Qo''@;'; put 'put ''W2ludmVyc2VdKXstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwgI2NiZDRkOCl9Omhvc3QoW2RpcmVjdGlvbj11cF0pe3RyYW5zZm9ybTpyb3RhdGUoMCl9Omhvc3QoW2RpcmVjdGlvbj1kb3duXSl7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTpob3N0''@;'; put 'put ''KFtkaXJlY3Rpb249cmlnaHRdKXt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX06aG9zdChbZGlyZWN0aW9uPWxlZnRdKXt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9Omhvc3QoW2ZsaXA9aG9yaXpvbnRhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWCgxODBkZWcpfTpob3N0KFtmbGlw''@;'; put 'put ''PXZlcnRpY2FsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVZKDE4MGRlZyl9LmFsZXJ0LC5iYWRnZXtmaWxsOnZhcigtLWJhZGdlLWNvbG9yLHZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSkpfTpob3N0KFti''@;'; put 'put ''YWRnZT1zdWNjZXNzXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlPWRhbmdlcl0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''YW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZSo9d2FybmluZ10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmssIHZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwLCAjYTM2NTAw''@;'; put 'put ''KSl9Omhvc3QoW2JhZGdlPWluaGVyaXRdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3Qo''@;'; put 'put ''W2JhZGdlPW5ldXRyYWxdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCAjNGY2MTY5KSl9Omhvc3QoW2JhZGdlPWluaGVyaXQtdHJpYW5nbGVdKXstLWJhZGdlLWNvbG9yOmN1cnJl''@;'; put 'put ''bnRDb2xvcn06aG9zdChbYmFkZ2VdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2U9c3VjY2Vzc11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZSo9d2FybmluZ11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmssIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwLCAjYTM2NTAwKSl9Omhvc3QoW2JhZGdlKj1pbmhlcml0XVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''aW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfS5jZHMtaW50ZXJuYWwtZG90LTF7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2UtaW4gMHMgaW5maW5pdGV9LmNkcy1pbnRlcm5hbC1kb3QtMnthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMg''@;'; put 'put ''ZWFzZS1vdXQgLjQyMnMgaW5maW5pdGV9LmNkcy1pbnRlcm5hbC1kb3QtM3thbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1vdXQgLjY3NXMgaW5maW5pdGV9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXsuY2RzLWludGVybmFsLWRvdC0xLC5jZHMtaW50ZXJuYWwtZG90''@;'; put 'put ''LTIsLmNkcy1pbnRlcm5hbC1kb3QtM3thbmltYXRpb246bm9uZX19YDtjb25zdCBuUmU9WyJ1bmtub3duIix7b3V0bGluZTonPGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0zIiBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90''@;'; put 'put ''LTIiIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90LTEiIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45Ii8+J31dO2NsYXNzIEhze3N0YXRpYyBnZXQgcmVnaXN0cnkoKXtyZXR1cm57dW5rbm93bjpuUmVbMV0sLi4uWjMuc3RhdGUuaWNvblJl''@;'; put 'put ''Z2lzdHJ5fX1zdGF0aWMgYWRkSWNvbnMoLi4udCl7WjMuc3RhdGUuaWNvblJlZ2lzdHJ5PXsuLi5aMy5zdGF0ZS5pY29uUmVnaXN0cnksLi4uT2JqZWN0LmZyb21FbnRyaWVzKHQuZmlsdGVyKChbZV0pPT4hSHMucmVnaXN0cnlbZV0pKX19c3RhdGljIGFkZEFsaWFzZXMoLi4udCl7Y29uc3Qg''@;'; put 'put ''ZT10LmZpbHRlcigoW3JdKT0+SHMucmVnaXN0cnlbcl0pLmZsYXRNYXAoKFtyLGldKT0+aS5tYXAoYT0+W2EsSHMucmVnaXN0cnlbcl1dKSk7WjMuc3RhdGUuaWNvblJlZ2lzdHJ5PXsuLi5aMy5zdGF0ZS5pY29uUmVnaXN0cnksLi4uT2JqZWN0LmZyb21FbnRyaWVzKGUpfX1zdGF0aWMgZ2V0''@;'; put 'put ''SWNvbk5hbWVGcm9tU2hhcGUodCl7cmV0dXJuIHRbMF19fXZhciBsNCxuO2Z1bmN0aW9uIHVSZShuLHQpe2xldCBlPSIiO3N3aXRjaChmdW5jdGlvbiBzUmUobil7c3dpdGNoKCEwKXtjYXNlIEtFKG4pOnJldHVybiBsNC5OaWxTaXplVmFsdWU7Y2FzZSBmdW5jdGlvbiBHMWUobil7cmV0dXJu''@;'; put 'put ''WyJ4eHMiLCJ4cyIsInNtIiwibWQiLCJsZyIsInhsIiwieHhsIl0uaW5kZXhPZihuKT4tMX0obik6cmV0dXJuIGw0LlZhbGlkU2l6ZVN0cmluZztjYXNlIGZ1bmN0aW9uIHowZShuKXtyZXR1cm4gekcobikmJiFCMGUobi50cmltKCkpJiYrbj09K259KG4pOnJldHVybiBsNC5WYWxpZE51bWVy''@;'; put 'put ''aWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4gbDQuQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gbFJlKG4pe3JldHVybiBLRShuKT8iIjpmdW5jdGlvbiBVRGUobix0LGU9IiIpe2NvbnN0IHI9bi5zcGxpdCgiICIpLGk9IiI9PT1lP3IuZmlsdGVyKGE9PmEhPT10KTpyLm1hcChhPT5hPT09dD9lOmEp''@;'; put 'put ''O3JldHVybiBpLmxlbmd0aD4wP2kuam9pbigiICIpOiIifShuLCJmaXQiKX0odCkpKXtjYXNlIGw0LlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gZT11JChwYXJzZUludCh0KSksdm9pZCBmdW5jdGlvbiBMSWUobiwuLi50KXt0LmZvckVhY2goKFtlLHJdKT0+e24uc3R5bGVbZV09cn0pfShu''@;'; put 'put ''LC4uLmZ1bmN0aW9uIGNSZShuLHQpe3JldHVybiEkRShuKSYmbi5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsdF0sWyJtaW4taGVpZ2h0Iix0XV06W1sid2lkdGgiLHRdLFsiaGVpZ2h0Iix0XSxbIm1pbi13aWR0aCIs''@;'; put 'put ''dF0sWyJtaW4taGVpZ2h0Iix0XV19KHQsZSkpO2Nhc2UgbDQuVmFsaWRTaXplU3RyaW5nOmNhc2UgbDQuTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIE9JZShuLC4uLnQpe3QuZm9yRWFjaChlPT57bi5zdHlsZVtlXT0iIn0pfShuLCJ3aWR0aCIsImhlaWdodCIsIm1pbi13aWR0''@;'; put 'put ''aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gaCQobil7cmV0dXJuIG4uYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1uLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1uLmJhZGdlKX0obj1sNHx8KGw0PXt9KSkuQmFkU2l6ZVZhbHVlPSJiYWQtdmFsdWUi''@;'; put 'put ''LG4uVmFsaWRTaXplU3RyaW5nPSJ2YWx1ZS1pcy1zdHJpbmciLG4uVmFsaWROdW1lcmljU3RyaW5nPSJ2YWx1ZS1pcy1udW1lcmljIixuLk5pbFNpemVWYWx1ZT0idmFsdWUtaXMtbmlsIjtjbGFzcyBZMyBleHRlbmRzIG5Ue2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlz''@;'; put 'put ''Ll9zaGFwZT0idW5rbm93biIsdGhpcy5zb2xpZD0hMSx0aGlzLmludmVyc2U9ITF9c3RhdGljIGdldCBzdHlsZXMoKXtyZXR1cm5bREllLHRSZV19Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZSh0KXtpZihmdW5jdGlvbiB3RGUobix0KXtyZXR1cm4hS0UobikmJlcw''@;'; put 'put ''ZShuLHQpfSh0LHRoaXMuX3NoYXBlKSl7Y29uc3QgZT10aGlzLl9zaGFwZTt0aGlzLl9zaGFwZT10LHRoaXMucmVxdWVzdFVwZGF0ZSgic2hhcGUiLGUpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKHQpe2lmKGZ1bmN0aW9uIGJEZShuLHQpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''biBfRGUobil7cmV0dXJuIGswZShTdHJpbmcsbil8fCRFKG4pfShuKSYmVzBlKG4sdCl9KHQsdGhpcy5fc2l6ZSkpe2NvbnN0IGU9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPXQsdVJlKHRoaXMsdCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixlKX19dXBkYXRlZCh0KXtpZih0LmhhcygiaW5u''@;'; put 'put ''ZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBlPXUkKC0xKnRoaXMuaW5uZXJPZmZzZXQpLHI9YGNhbGMoMTAwJSArICR7dSQoMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1yLHRoaXMuc3ZnLnN0eWxlLmhlaWdodD1yLHRoaXMuc3ZnLnN0''@;'; put 'put ''eWxlLm1hcmdpbj1gJHtlfSAwIDAgJHtlfWB9fWZpcnN0VXBkYXRlZCh0KXtpZihzdXBlci5maXJzdFVwZGF0ZWQodCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGU9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPVozLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUocj0+eyJpY29uUmVnaXN0cnki''@;'; put 'put ''PT09ci5rZXkmJkhzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZlIT09dGhpcy5zaGFwZSYmKGU9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gekcoSHMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP3hJZWA8c3BhbiAuaW5uZXJIVE1MPSIke0hzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdfSI+PC9zcGFuPmA6RUllYDxzdmcgLmlubmVySFRNTD0iJHtmdW5jdGlvbiBoUmUobil7Y29uc3Qg''@;'; put 'put ''dD1Icy5yZWdpc3RyeVtuLnNoYXBlXT8/SHMucmVnaXN0cnkudW5rbm93bjtsZXQgZT1uLnNvbGlkJiZ0LnNvbGlkP3Quc29saWQ6dC5vdXRsaW5lO3JldHVybiBuLmJhZGdlJiYhaCQobikmJihlPW4uc29saWQ/dC5zb2xpZEJhZGdlZD8/ZTp0Lm91dGxpbmVCYWRnZWQ/P2UpLGgkKG4pJiYo''@;'; put 'put ''ZT1uLnNvbGlkP3Quc29saWRBbGVydGVkPz9lOnQub3V0bGluZUFsZXJ0ZWQ/P2UpLGV9KHRoaXMpK2Z1bmN0aW9uIGRSZShuKXtsZXQgdD0iIjtyZXR1cm4gbi5iYWRnZSYmaCQobik/dD0nPHBhdGggZD0iTTI2Ljg1IDEuMTRMMjEuMTMgMTFhMS4yOCAxLjI4IDAgMDAxLjEgMmgxMS40NWEx''@;'; put 'put ''LjI4IDEuMjggMCAwMDEuMS0ybC01LjcyLTkuODZhMS4yOCAxLjI4IDAgMDAtMi4yMSAweiIgY2xhc3M9ImFsZXJ0IiAvPic6bi5iYWRnZSYmKHQ9JzxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImJhZGdlIiAvPicpLHR9KHRoaXMpfSIgdmlld0JveD0iMCAwIDM2IDM2IiB4''@;'; put 'put ''bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3N2Zz5gfX1mdW5jdGlvbiByVChuKXtyZXR1cm4hIW4mJihuIGluc3RhbmNlb2YgRml8fFhyKG4ubGlmdCkmJlhyKG4uc3Vic2NyaWJlKSl9VzMoW3k2KHt0eXBlOlN0cmluZ30pXSxZMy5wcm90''@;'; put 'put ''b3R5cGUsInNoYXBlIixudWxsKSxXMyhbeTYoe3R5cGU6U3RyaW5nfSldLFkzLnByb3RvdHlwZSwic2l6ZSIsbnVsbCksVzMoW3k2KHt0eXBlOlN0cmluZ30pXSxZMy5wcm90b3R5cGUsImRpcmVjdGlvbiIsdm9pZCAwKSxXMyhbeTYoe3R5cGU6U3RyaW5nfSldLFkzLnByb3RvdHlwZSwiZmxp''@;'; put 'put ''cCIsdm9pZCAwKSxXMyhbeTYoe3R5cGU6Qm9vbGVhbn0pXSxZMy5wcm90b3R5cGUsInNvbGlkIix2b2lkIDApLFczKFt5Nih7dHlwZTpTdHJpbmd9KV0sWTMucHJvdG90eXBlLCJzdGF0dXMiLHZvaWQgMCksVzMoW3k2KHt0eXBlOkJvb2xlYW59KV0sWTMucHJvdG90eXBlLCJpbnZlcnNlIix2''@;'; put 'put ''b2lkIDApLFczKFt5Nih7dHlwZTpTdHJpbmd9KV0sWTMucHJvdG90eXBlLCJiYWRnZSIsdm9pZCAwKSxXMyhbZnVuY3Rpb24gSkllKG4pe3JldHVybih0LGUpPT57Y29uc3Qgcj1aMWUoZSxuKTtyZXR1cm4gciYmKHIucmVmbGVjdD0hIW4/LnJlZmxlY3QmJm4ucmVmbGVjdCxyLnJlZmxlY3Qm''@;'; put 'put ''JiFuPy5hdHRyaWJ1dGUmJihyLmF0dHJpYnV0ZT0iXyIrTzkoZSkpKSx6MWUocikodCxlKX19KHt0eXBlOk51bWJlcn0pXSxZMy5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLFczKFtmdW5jdGlvbiBlUmUobix0KXtyZXR1cm4oKHtmaW5pc2hlcjpuLGRlc2NyaXB0b3I6dH0pPT4o''@;'; put 'put ''ZSxyKT0+e3ZhciBpO2lmKHZvaWQgMD09PXIpe2NvbnN0IGE9bnVsbCE9PShpPWUub3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1pP2k6ZS5rZXksYz1udWxsIT10P3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6YSxkZXNjcmlwdG9yOnQoZS5rZXkpfTp7Li4uZSxrZXk6''@;'; put 'put ''YX07cmV0dXJuIG51bGwhPW4mJihjLmZpbmlzaGVyPWZ1bmN0aW9uKG0pe24obSxhKX0pLGN9e2NvbnN0IGE9ZS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT10JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHQocikpLG4/LihhLHIpfX0pKHtkZXNjcmlwdG9yOmU9Pntjb25zdCByPXtnZXQoKXt2''@;'; put 'put ''YXIgaSxhO3JldHVybiBudWxsIT09KGE9bnVsbD09PShpPXRoaXMucmVuZGVyUm9vdCl8fHZvaWQgMD09PWk/dm9pZCAwOmkucXVlcnlTZWxlY3RvcihuKSkmJnZvaWQgMCE9PWE/YTpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYodCl7Y29uc3QgaT0ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGU/U3ltYm9sKCk6Il9fIitlO3IuZ2V0PWZ1bmN0aW9uKCl7dmFyIGEsYztyZXR1cm4gdm9pZCAwPT09dGhpc1tpXSYmKHRoaXNbaV09bnVsbCE9PShjPW51bGw9PT0oYT10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IobikpJiZ2b2lk''@;'; put 'put ''IDAhPT1jP2M6bnVsbCksdGhpc1tpXX19cmV0dXJuIHJ9fSl9KCJzdmciKV0sWTMucHJvdG90eXBlLCJzdmciLHZvaWQgMCksZnVuY3Rpb24gJERlKG4sdCl7JDBlKCkmJkswZShbImN1c3RvbUVsZW1lbnRzIl0pJiZHRGUobix0LHdpbmRvdy5jdXN0b21FbGVtZW50cyl9KCJjZHMtaWNvbiIs''@;'; put 'put ''WTMpO2NvbnN0IGYkPW49Pm4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiBuO2Z1bmN0aW9uICQxZShuKXtyZXR1cm4gWHIobj8udGhlbil9ZnVuY3Rpb24gSzFlKG4pe3JldHVybiBYcihuW0tpXSl9ZnVuY3Rpb24gWDFlKG4pe3JldHVybiBTeW1ib2wu''@;'; put 'put ''YXN5bmNJdGVyYXRvciYmWHIobj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9ZnVuY3Rpb24gcTFlKG4pe3JldHVybiBuZXcgVHlwZUVycm9yKGBZb3UgcHJvdmlkZWQgJHtudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuPyJhbiBpbnZhbGlkIG9iamVjdCI6YCcke259J2B9IHdoZXJlIGEg''@;'; put 'put ''c3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuYCl9Y29uc3QgSjFlPWZ1bmN0aW9uIF9SZSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBT''@;'; put 'put ''eW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifSgpO2Z1bmN0aW9uIFExZShuKXtyZXR1cm4gWHIobj8uW0oxZV0pfWZ1bmN0aW9uIGVkZShuKXtyZXR1cm4gZnVuY3Rpb24gYzFlKG4sdCxlKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGkscj1lLmFwcGx5KG4sdHx8W10pLGE9W107cmV0dXJuIGk9T2JqZWN0LmNyZWF0ZSgoImZ1bmN0aW9uIj09dHlwZW9mIEFzeW5jSXRlcmF0b3I/QXN5bmNJdGVyYXRvcjpPYmplY3QpLnBy''@;'; put 'put ''b3RvdHlwZSksbSgibmV4dCIpLG0oInRocm93IiksbSgicmV0dXJuIixmdW5jdGlvbiBjKGZlKXtyZXR1cm4gZnVuY3Rpb24oQWUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoQWUpLnRoZW4oZmUsSil9fSksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30s''@;'; put 'put ''aTtmdW5jdGlvbiBtKGZlLEFlKXtyW2ZlXSYmKGlbZmVdPWZ1bmN0aW9uKEhlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oWGUscnQpe2EucHVzaChbZmUsSGUsWGUscnRdKT4xfHxDKGZlLEhlKX0pfSxBZSYmKGlbZmVdPUFlKGlbZmVdKSkpfWZ1bmN0aW9uIEMoZmUsQWUpe3RyeXsh''@;'; put 'put ''ZnVuY3Rpb24gUChmZSl7ZmUudmFsdWUgaW5zdGFuY2VvZiB2Nj9Qcm9taXNlLnJlc29sdmUoZmUudmFsdWUudikudGhlbihZLEopOmNlKGFbMF1bMl0sZmUpfShyW2ZlXShBZSkpfWNhdGNoKEhlKXtjZShhWzBdWzNdLEhlKX19ZnVuY3Rpb24gWShmZSl7QygibmV4dCIsZmUpfWZ1bmN0aW9u''@;'; put 'put ''IEooZmUpe0MoInRocm93IixmZSl9ZnVuY3Rpb24gY2UoZmUsQWUpe2ZlKEFlKSxhLnNoaWZ0KCksYS5sZW5ndGgmJkMoYVswXVswXSxhWzBdWzFdKX19KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGU9bi5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpyLGRv''@;'; put 'put ''bmU6aX09eWllbGQgdjYoZS5yZWFkKCkpO2lmKGkpcmV0dXJuIHlpZWxkIHY2KHZvaWQgMCk7eWllbGQgeWllbGQgdjYocil9fWZpbmFsbHl7ZS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIHRkZShuKXtyZXR1cm4gWHIobj8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBHMShuKXtpZihuIGluc3Rh''@;'; put 'put ''bmNlb2YgRmkpcmV0dXJuIG47aWYobnVsbCE9bil7aWYoSzFlKG4pKXJldHVybiBmdW5jdGlvbiBiUmUobil7cmV0dXJuIG5ldyBGaSh0PT57Y29uc3QgZT1uW0tpXSgpO2lmKFhyKGUuc3Vic2NyaWJlKSlyZXR1cm4gZS5zdWJzY3JpYmUodCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlk''@;'; put 'put ''ZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShuKTtpZihmJChuKSlyZXR1cm4gZnVuY3Rpb24gd1JlKG4pe3JldHVybiBuZXcgRmkodD0+e2ZvcihsZXQgZT0wO2U8bi5sZW5ndGgmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0p''@;'; put 'put ''O3QuY29tcGxldGUoKX0pfShuKTtpZigkMWUobikpcmV0dXJuIGZ1bmN0aW9uIENSZShuKXtyZXR1cm4gbmV3IEZpKHQ9PntuLnRoZW4oZT0+e3QuY2xvc2VkfHwodC5uZXh0KGUpLHQuY29tcGxldGUoKSl9LGU9PnQuZXJyb3IoZSkpLnRoZW4obnVsbCxOZSl9KX0obik7aWYoWDFlKG4pKXJl''@;'; put 'put ''dHVybiBuZGUobik7aWYoUTFlKG4pKXJldHVybiBmdW5jdGlvbiBTUmUobil7cmV0dXJuIG5ldyBGaSh0PT57Zm9yKGNvbnN0IGUgb2YgbilpZih0Lm5leHQoZSksdC5jbG9zZWQpcmV0dXJuO3QuY29tcGxldGUoKX0pfShuKTtpZih0ZGUobikpcmV0dXJuIGZ1bmN0aW9uIE1SZShuKXtyZXR1''@;'; put 'put ''cm4gbmRlKGVkZShuKSl9KG4pfXRocm93IHExZShuKX1mdW5jdGlvbiBuZGUobil7cmV0dXJuIG5ldyBGaSh0PT57KGZ1bmN0aW9uIHhSZShuLHQpe3ZhciBlLHIsaSxhO3JldHVybiBmdW5jdGlvbiBzMWUobix0LGUscil7cmV0dXJuIG5ldyhlfHwoZT1Qcm9taXNlKSkoZnVuY3Rpb24oYSxj''@;'; put 'put ''KXtmdW5jdGlvbiBtKFkpe3RyeXtQKHIubmV4dChZKSl9Y2F0Y2goSil7YyhKKX19ZnVuY3Rpb24gQyhZKXt0cnl7UChyLnRocm93KFkpKX1jYXRjaChKKXtjKEopfX1mdW5jdGlvbiBQKFkpe1kuZG9uZT9hKFkudmFsdWUpOmZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBlP2E6''@;'; put 'put ''bmV3IGUoZnVuY3Rpb24oYyl7YyhhKX0pfShZLnZhbHVlKS50aGVuKG0sQyl9UCgocj1yLmFwcGx5KG4sdHx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGU9dTFlKG4pOyEocj15aWVsZCBlLm5leHQoKSkuZG9uZTspaWYodC5uZXh0KHIu''@;'; put 'put ''dmFsdWUpLHQuY2xvc2VkKXJldHVybn1jYXRjaChjKXtpPXtlcnJvcjpjfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYoYT1lLnJldHVybikmJih5aWVsZCBhLmNhbGwoZSkpfWZpbmFsbHl7aWYoaSl0aHJvdyBpLmVycm9yfX10LmNvbXBsZXRlKCl9KX0pKG4sdCkuY2F0Y2goZT0+dC5lcnJv''@;'; put 'put ''cihlKSl9KX1mdW5jdGlvbiBRZyhuLHQsZSxyPTAsaT0hMSl7Y29uc3QgYT10LnNjaGVkdWxlKGZ1bmN0aW9uKCl7ZSgpLGk/bi5hZGQodGhpcy5zY2hlZHVsZShudWxsLHIpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LHIpO2lmKG4uYWRkKGEpLCFpKXJldHVybiBhfWZ1bmN0aW9uIHJkZShuLHQ9''@;'; put 'put ''MCl7cmV0dXJuIFhpKChlLHIpPT57ZS5zdWJzY3JpYmUoSXIocixpPT5RZyhyLG4sKCk9PnIubmV4dChpKSx0KSwoKT0+UWcocixuLCgpPT5yLmNvbXBsZXRlKCksdCksaT0+UWcocixuLCgpPT5yLmVycm9yKGkpLHQpKSl9KX1mdW5jdGlvbiBpZGUobix0PTApe3JldHVybiBYaSgoZSxyKT0+''@;'; put 'put ''e3IuYWRkKG4uc2NoZWR1bGUoKCk9PmUuc3Vic2NyaWJlKHIpLHQpKX0pfWZ1bmN0aW9uIGFkZShuLHQpe2lmKCFuKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEZpKGU9PntRZyhlLHQsKCk9Pntjb25zdCByPW5bU3ltYm9sLmFzeW5jSXRl''@;'; put 'put ''cmF0b3JdKCk7UWcoZSx0LCgpPT57ci5uZXh0KCkudGhlbihpPT57aS5kb25lP2UuY29tcGxldGUoKTplLm5leHQoaS52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIG8wKG4sdCl7cmV0dXJuIHQ/ZnVuY3Rpb24gSVJlKG4sdCl7aWYobnVsbCE9bil7aWYoSzFlKG4pKXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBFUmUobix0KXtyZXR1cm4gRzEobikucGlwZShpZGUodCkscmRlKHQpKX0obix0KTtpZihmJChuKSlyZXR1cm4gZnVuY3Rpb24gQVJlKG4sdCl7cmV0dXJuIG5ldyBGaShlPT57bGV0IHI9MDtyZXR1cm4gdC5zY2hlZHVsZShmdW5jdGlvbigpe3I9PT1uLmxlbmd0aD9lLmNvbXBsZXRl''@;'; put 'put ''KCk6KGUubmV4dChuW3IrK10pLGUuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0obix0KTtpZigkMWUobikpcmV0dXJuIGZ1bmN0aW9uIFRSZShuLHQpe3JldHVybiBHMShuKS5waXBlKGlkZSh0KSxyZGUodCkpfShuLHQpO2lmKFgxZShuKSlyZXR1cm4gYWRlKG4sdCk7aWYoUTFlKG4p''@;'; put 'put ''KXJldHVybiBmdW5jdGlvbiBrUmUobix0KXtyZXR1cm4gbmV3IEZpKGU9PntsZXQgcjtyZXR1cm4gUWcoZSx0LCgpPT57cj1uW0oxZV0oKSxRZyhlLHQsKCk9PntsZXQgaSxhO3RyeXsoe3ZhbHVlOmksZG9uZTphfT1yLm5leHQoKSl9Y2F0Y2goYyl7cmV0dXJuIHZvaWQgZS5lcnJvcihjKX1h''@;'; put 'put ''P2UuY29tcGxldGUoKTplLm5leHQoaSl9LDAsITApfSksKCk9PlhyKHI/LnJldHVybikmJnIucmV0dXJuKCl9KX0obix0KTtpZih0ZGUobikpcmV0dXJuIGZ1bmN0aW9uIERSZShuLHQpe3JldHVybiBhZGUoZWRlKG4pLHQpfShuLHQpfXRocm93IHExZShuKX0obix0KTpHMShuKX1mdW5jdGlv''@;'; put 'put ''biBvZGUobil7cmV0dXJuIG4mJlhyKG4uc2NoZWR1bGUpfWZ1bmN0aW9uIHAkKG4pe3JldHVybiBuW24ubGVuZ3RoLTFdfWZ1bmN0aW9uIHNkZShuKXtyZXR1cm4gWHIocCQobikpP24ucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGlUKG4pe3JldHVybiBvZGUocCQobikpP24ucG9wKCk6dm9pZCAw''@;'; put 'put ''fWZ1bmN0aW9uIGdvKC4uLm4pe3JldHVybiBvMChuLGlUKG4pKX1jb25zdHtpc0FycmF5OkxSZX09QXJyYXkse2dldFByb3RvdHlwZU9mOk9SZSxwcm90b3R5cGU6UFJlLGtleXM6RlJlfT1PYmplY3Q7ZnVuY3Rpb24gbGRlKG4pe2lmKDE9PT1uLmxlbmd0aCl7Y29uc3QgdD1uWzBdO2lmKExS''@;'; put 'put ''ZSh0KSlyZXR1cm57YXJnczp0LGtleXM6bnVsbH07aWYoZnVuY3Rpb24gSFJlKG4pe3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4mJk9SZShuKT09PVBSZX0odCkpe2NvbnN0IGU9RlJlKHQpO3JldHVybnthcmdzOmUubWFwKHI9PnRbcl0pLGtleXM6ZX19fXJldHVybnthcmdzOm4sa2V5''@;'; put 'put ''czpudWxsfX1jb25zdHtpc0FycmF5Ok5SZX09QXJyYXk7ZnVuY3Rpb24gZyQobil7cmV0dXJuIFhhKHQ9PmZ1bmN0aW9uIFZSZShuLHQpe3JldHVybiBOUmUodCk/biguLi50KTpuKHQpfShuLHQpKX1mdW5jdGlvbiBjZGUobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUscixpKT0+KGVbcl09dFtp''@;'; put 'put ''XSxlKSx7fSl9ZnVuY3Rpb24gVjkoLi4ubil7Y29uc3QgdD1pVChuKSxlPXNkZShuKSx7YXJnczpyLGtleXM6aX09bGRlKG4pO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gbzAoW10sdCk7Y29uc3QgYT1uZXcgRmkoZnVuY3Rpb24gQlJlKG4sdCxlPVZpKXtyZXR1cm4gcj0+e3VkZSh0LCgpPT57''@;'; put 'put ''Y29uc3R7bGVuZ3RoOml9PW4sYT1uZXcgQXJyYXkoaSk7bGV0IGM9aSxtPWk7Zm9yKGxldCBDPTA7QzxpO0MrKyl1ZGUodCwoKT0+e2NvbnN0IFA9bzAobltDXSx0KTtsZXQgWT0hMTtQLnN1YnNjcmliZShJcihyLEo9PnthW0NdPUosWXx8KFk9ITAsbS0tKSxtfHxyLm5leHQoZShhLnNsaWNl''@;'; put 'put ''KCkpKX0sKCk9PnstLWN8fHIuY29tcGxldGUoKX0pKX0scil9LHIpfX0ocix0LGk/Yz0+Y2RlKGksYyk6VmkpKTtyZXR1cm4gZT9hLnBpcGUoZyQoZSkpOmF9ZnVuY3Rpb24gdWRlKG4sdCxlKXtuP1FnKGUsbix0KTp0KCl9Y29uc3QgWlA9c24obj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMu''@;'; put 'put ''bmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiB3MShuLHQsZT0xLzApe3JldHVybiBYcih0KT93MSgocixpKT0+WGEoKGEsYyk9PnQocixhLGksYykpKEcxKG4ocixpKSkpLGUpOigibnVtYmVyIj09dHlwZW9mIHQmJihl''@;'; put 'put ''PXQpLFhpKChyLGkpPT5mdW5jdGlvbiBqUmUobix0LGUscixpLGEsYyxtKXtjb25zdCBDPVtdO2xldCBQPTAsWT0wLEo9ITE7Y29uc3QgY2U9KCk9PntKJiYhQy5sZW5ndGgmJiFQJiZ0LmNvbXBsZXRlKCl9LGZlPUhlPT5QPHI/QWUoSGUpOkMucHVzaChIZSksQWU9SGU9PnthJiZ0Lm5leHQo''@;'; put 'put ''SGUpLFArKztsZXQgWGU9ITE7RzEoZShIZSxZKyspKS5zdWJzY3JpYmUoSXIodCxydD0+e2k/LihydCksYT9mZShydCk6dC5uZXh0KHJ0KX0sKCk9PntYZT0hMH0sdm9pZCAwLCgpPT57aWYoWGUpdHJ5e2ZvcihQLS07Qy5sZW5ndGgmJlA8cjspe2NvbnN0IHJ0PUMuc2hpZnQoKTtjP1FnKHQs''@;'; put 'put ''YywoKT0+QWUocnQpKTpBZShydCl9Y2UoKX1jYXRjaChydCl7dC5lcnJvcihydCl9fSkpfTtyZXR1cm4gbi5zdWJzY3JpYmUoSXIodCxmZSwoKT0+e0o9ITAsY2UoKX0pKSwoKT0+e20/LigpfX0ocixpLG4sZSkpKX1mdW5jdGlvbiBsdyhuPTEvMCl7cmV0dXJuIHcxKFZpLG4pfWZ1bmN0aW9u''@;'; put 'put ''IG0kKC4uLm4pe3JldHVybiBmdW5jdGlvbiB6UmUoKXtyZXR1cm4gbHcoMSl9KCkobzAobixpVChuKSkpfWZ1bmN0aW9uIGRkZShuKXtyZXR1cm4gbmV3IEZpKHQ9PntHMShuKCkpLnN1YnNjcmliZSh0KX0pfWZ1bmN0aW9uIGFUKG4sdCl7Y29uc3QgZT1YcihuKT9uOigpPT5uLHI9aT0+aS5l''@;'; put 'put ''cnJvcihlKCkpO3JldHVybiBuZXcgRmkodD9pPT50LnNjaGVkdWxlKHIsMCxpKTpyKX1jb25zdCBjMj1uZXcgRmkobj0+bi5jb21wbGV0ZSgpKTtmdW5jdGlvbiB2JCgpe3JldHVybiBYaSgobix0KT0+e2xldCBlPW51bGw7bi5fcmVmQ291bnQrKztjb25zdCByPUlyKHQsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsKCk9PntpZighbnx8bi5fcmVmQ291bnQ8PTB8fDA8LS1uLl9yZWZDb3VudClyZXR1cm4gdm9pZChlPW51bGwpO2NvbnN0IGk9bi5fY29ubmVjdGlvbixhPWU7ZT1udWxsLGkmJighYXx8aT09PWEpJiZpLnVuc3Vic2NyaWJlKCksdC51bnN1YnNjcmliZSgpfSk7bi5zdWJzY3Jp''@;'; put 'put ''YmUociksci5jbG9zZWR8fChlPW4uY29ubmVjdCgpKX0pfWNsYXNzIHkkIGV4dGVuZHMgRml7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJqZWN0RmFjdG9yeT1lLHRoaXMuX3N1YmplY3Q9bnVsbCx0aGlzLl9yZWZDb3VudD0wLHRoaXMuX2Nvbm5lY3Rp''@;'; put 'put ''b249bnVsbCxvYSh0KSYmKHRoaXMubGlmdD10LmxpZnQpfV9zdWJzY3JpYmUodCl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZSh0KX1nZXRTdWJqZWN0KCl7Y29uc3QgdD10aGlzLl9zdWJqZWN0O3JldHVybighdHx8dC5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlz''@;'; put 'put ''LnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9X3RlYXJkb3duKCl7dGhpcy5fcmVmQ291bnQ9MDtjb25zdHtfY29ubmVjdGlvbjp0fT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLHQ/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nv''@;'; put 'put ''bm5lY3Rpb247aWYoIXQpe3Q9dGhpcy5fY29ubmVjdGlvbj1uZXcgTHQ7Y29uc3QgZT10aGlzLmdldFN1YmplY3QoKTt0LmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUoSXIoZSx2b2lkIDAsKCk9Pnt0aGlzLl90ZWFyZG93bigpLGUuY29tcGxldGUoKX0scj0+e3RoaXMuX3RlYXJkb3duKCks''@;'; put 'put ''ZS5lcnJvcihyKX0sKCk9PnRoaXMuX3RlYXJkb3duKCkpKSksdC5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsdD1MdC5FTVBUWSl9cmV0dXJuIHR9cmVmQ291bnQoKXtyZXR1cm4gdiQoKSh0aGlzKX19ZnVuY3Rpb24gRGQobix0KXtyZXR1cm4gWGkoKGUscik9PntsZXQgaT1udWxs''@;'; put 'put ''LGE9MCxjPSExO2NvbnN0IG09KCk9PmMmJiFpJiZyLmNvbXBsZXRlKCk7ZS5zdWJzY3JpYmUoSXIocixDPT57aT8udW5zdWJzY3JpYmUoKTtsZXQgUD0wO2NvbnN0IFk9YSsrO0cxKG4oQyxZKSkuc3Vic2NyaWJlKGk9SXIocixKPT5yLm5leHQodD90KEMsSixZLFArKyk6SiksKCk9PntpPW51''@;'; put 'put ''bGwsbSgpfSkpfSwoKT0+e2M9ITAsbSgpfSkpfSl9ZnVuY3Rpb24gRzMobil7cmV0dXJuIG48PTA/KCk9PmMyOlhpKCh0LGUpPT57bGV0IHI9MDt0LnN1YnNjcmliZShJcihlLGk9PnsrK3I8PW4mJihlLm5leHQoaSksbjw9ciYmZS5jb21wbGV0ZSgpKX0pKX0pfWZ1bmN0aW9uIGtmKC4uLm4p''@;'; put 'put ''e2NvbnN0IHQ9aVQobik7cmV0dXJuIFhpKChlLHIpPT57KHQ/bSQobixlLHQpOm0kKG4sZSkpLnN1YnNjcmliZShyKX0pfWZ1bmN0aW9uIHJjKG4sdCl7cmV0dXJuIFhpKChlLHIpPT57bGV0IGk9MDtlLnN1YnNjcmliZShJcihyLGE9Pm4uY2FsbCh0LGEsaSsrKSYmci5uZXh0KGEpKSl9KX1m''@;'; put 'put ''dW5jdGlvbiBZUChuKXtyZXR1cm4gWGkoKHQsZSk9PntsZXQgcj0hMTt0LnN1YnNjcmliZShJcihlLGk9PntyPSEwLGUubmV4dChpKX0sKCk9PntyfHxlLm5leHQobiksZS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gaGRlKG49WlJlKXtyZXR1cm4gWGkoKHQsZSk9PntsZXQgcj0hMTt0LnN1''@;'; put 'put ''YnNjcmliZShJcihlLGk9PntyPSEwLGUubmV4dChpKX0sKCk9PnI/ZS5jb21wbGV0ZSgpOmUuZXJyb3IobigpKSkpfSl9ZnVuY3Rpb24gWlJlKCl7cmV0dXJuIG5ldyBaUH1mdW5jdGlvbiBfNihuLHQpe2NvbnN0IGU9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gcj0+ci5waXBlKG4/cmMo''@;'; put 'put ''KGksYSk9Pm4oaSxhLHIpKTpWaSxHMygxKSxlP1lQKHQpOmhkZSgoKT0+bmV3IFpQKSl9ZnVuY3Rpb24gY3cobix0KXtyZXR1cm4gWHIodCk/dzEobix0LDEpOncxKG4sMSl9ZnVuY3Rpb24gRTAobix0LGUpe2NvbnN0IHI9WHIobil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9''@;'; put 'put ''Om47cmV0dXJuIHI/WGkoKGksYSk9Pnt2YXIgYztudWxsPT09KGM9ci5zdWJzY3JpYmUpfHx2b2lkIDA9PT1jfHxjLmNhbGwocik7bGV0IG09ITA7aS5zdWJzY3JpYmUoSXIoYSxDPT57dmFyIFA7bnVsbD09PShQPXIubmV4dCl8fHZvaWQgMD09PVB8fFAuY2FsbChyLEMpLGEubmV4dChDKX0s''@;'; put 'put ''KCk9Pnt2YXIgQzttPSExLG51bGw9PT0oQz1yLmNvbXBsZXRlKXx8dm9pZCAwPT09Q3x8Qy5jYWxsKHIpLGEuY29tcGxldGUoKX0sQz0+e3ZhciBQO209ITEsbnVsbD09PShQPXIuZXJyb3IpfHx2b2lkIDA9PT1QfHxQLmNhbGwocixDKSxhLmVycm9yKEMpfSwoKT0+e3ZhciBDLFA7bSYmKG51''@;'; put 'put ''bGw9PT0oQz1yLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09Q3x8Qy5jYWxsKHIpKSxudWxsPT09KFA9ci5maW5hbGl6ZSl8fHZvaWQgMD09PVB8fFAuY2FsbChyKX0pKX0pOlZpfWZ1bmN0aW9uIEI5KG4pe3JldHVybiBYaSgodCxlKT0+e2xldCBhLHI9bnVsbCxpPSExO3I9dC5zdWJzY3JpYmUo''@;'; put 'put ''SXIoZSx2b2lkIDAsdm9pZCAwLGM9PnthPUcxKG4oYyxCOShuKSh0KSkpLHI/KHIudW5zdWJzY3JpYmUoKSxyPW51bGwsYS5zdWJzY3JpYmUoZSkpOmk9ITB9KSksaSYmKHIudW5zdWJzY3JpYmUoKSxyPW51bGwsYS5zdWJzY3JpYmUoZSkpfSl9ZnVuY3Rpb24gXyQobil7cmV0dXJuIG48PTA/''@;'; put 'put ''KCk9PmMyOlhpKCh0LGUpPT57bGV0IHI9W107dC5zdWJzY3JpYmUoSXIoZSxpPT57ci5wdXNoKGkpLG48ci5sZW5ndGgmJnIuc2hpZnQoKX0sKCk9Pntmb3IoY29uc3QgaSBvZiByKWUubmV4dChpKTtlLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e3I9bnVsbH0pKX0pfWZ1bmN0aW9uIG9UKG4p''@;'; put 'put ''e3JldHVybiBYaSgodCxlKT0+e3RyeXt0LnN1YnNjcmliZShlKX1maW5hbGx5e2UuYWRkKG4pfX0pfWZ1bmN0aW9uICQxKG4pe3JldHVybiBYaSgodCxlKT0+e0cxKG4pLnN1YnNjcmliZShJcihlLCgpPT5lLmNvbXBsZXRlKCkseXQpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9bGV0''@;'; put 'put ''IG9MZT0oKCk9PntjbGFzcyBue19kb2M7Y29uc3RydWN0b3IoZSl7dGhpcy5fZG9jPWV9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fZG9jLnRpdGxlfXNldFRpdGxlKGUpe3RoaXMuX2RvYy50aXRsZT1lfHwiIn1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8biko''@;'; put 'put ''T3IoWHMpKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBucz0icHJpbWFyeSIsbFQ9U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgdUxle3BhcmFtcztjb25zdHJ1Y3Rvcih0''@;'; put 'put ''KXt0aGlzLnBhcmFtcz10fHx7fX1oYXModCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnBhcmFtcyx0KX1nZXQodCl7aWYodGhpcy5oYXModCkpe2NvbnN0IGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZVswXTplfXJl''@;'; put 'put ''dHVybiBudWxsfWdldEFsbCh0KXtpZih0aGlzLmhhcyh0KSl7Y29uc3QgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOltlXX1yZXR1cm5bXX1nZXQga2V5cygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyl9fWZ1bmN0aW9uIHV3KG4pe3JldHVybiBu''@;'; put 'put ''ZXcgdUxlKG4pfWZ1bmN0aW9uIGRMZShuLHQsZSl7Y29uc3Qgcj1lLnBhdGguc3BsaXQoIi8iKTtpZihyLmxlbmd0aD5uLmxlbmd0aHx8ImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fHIubGVuZ3RoPG4ubGVuZ3RoKSlyZXR1cm4gbnVsbDtjb25zdCBpPXt9O2Zvcihs''@;'; put 'put ''ZXQgYT0wO2E8ci5sZW5ndGg7YSsrKXtjb25zdCBjPXJbYV0sbT1uW2FdO2lmKCI6Ij09PWNbMF0paVtjLnN1YnN0cmluZygxKV09bTtlbHNlIGlmKGMhPT1tLnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOm4uc2xpY2UoMCxyLmxlbmd0aCkscG9zUGFyYW1zOml9fWZ1bmN0aW9u''@;'; put 'put ''IGM0KG4sdCl7Y29uc3QgZT1uP3ckKG4pOnZvaWQgMCxyPXQ/dyQodCk6dm9pZCAwO2lmKCFlfHwhcnx8ZS5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2xldCBpO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKWlmKGk9ZVthXSwheWRlKG5baV0sdFtpXSkpcmV0dXJuITE7cmV0dXJuITB9''@;'; put 'put ''ZnVuY3Rpb24gdyQobil7cmV0dXJuWy4uLk9iamVjdC5rZXlzKG4pLC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobildfWZ1bmN0aW9uIHlkZShuLHQpe2lmKEFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkodCkpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7''@;'; put 'put ''Y29uc3QgZT1bLi4ubl0uc29ydCgpLHI9Wy4uLnRdLnNvcnQoKTtyZXR1cm4gZS5ldmVyeSgoaSxhKT0+clthXT09PWkpfXJldHVybiBuPT09dH1mdW5jdGlvbiBfZGUobil7cmV0dXJuIG4ubGVuZ3RoPjA/bltuLmxlbmd0aC0xXTpudWxsfWZ1bmN0aW9uIHc2KG4pe3JldHVybiByVChuKT9u''@;'; put 'put ''OlRFKG4pP28wKFByb21pc2UucmVzb2x2ZShuKSk6Z28obil9Y29uc3QgZkxlPXtleGFjdDpmdW5jdGlvbiBDZGUobix0LGUpe2lmKCF6OShuLnNlZ21lbnRzLHQuc2VnbWVudHMpfHwhR1Aobi5zZWdtZW50cyx0LnNlZ21lbnRzLGUpfHxuLm51bWJlck9mQ2hpbGRyZW4hPT10Lm51bWJlck9m''@;'; put 'put ''Q2hpbGRyZW4pcmV0dXJuITE7Zm9yKGNvbnN0IHIgaW4gdC5jaGlsZHJlbilpZighbi5jaGlsZHJlbltyXXx8IUNkZShuLmNoaWxkcmVuW3JdLHQuY2hpbGRyZW5bcl0sZSkpcmV0dXJuITE7cmV0dXJuITB9LHN1YnNldDpTZGV9LGJkZT17ZXhhY3Q6ZnVuY3Rpb24gcExlKG4sdCl7cmV0dXJu''@;'; put 'put ''IGM0KG4sdCl9LHN1YnNldDpmdW5jdGlvbiBnTGUobix0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoPD1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJk9iamVjdC5rZXlzKHQpLmV2ZXJ5KGU9PnlkZShuW2VdLHRbZV0pKX0saWdub3JlZDooKT0+ITB9O2Z1bmN0aW9uIHdkZShuLHQsZSl7''@;'; put 'put ''cmV0dXJuIGZMZVtlLnBhdGhzXShuLnJvb3QsdC5yb290LGUubWF0cml4UGFyYW1zKSYmYmRlW2UucXVlcnlQYXJhbXNdKG4ucXVlcnlQYXJhbXMsdC5xdWVyeVBhcmFtcykmJiEoImV4YWN0Ij09PWUuZnJhZ21lbnQmJm4uZnJhZ21lbnQhPT10LmZyYWdtZW50KX1mdW5jdGlvbiBTZGUobix0''@;'; put 'put ''LGUpe3JldHVybiBNZGUobix0LHQuc2VnbWVudHMsZSl9ZnVuY3Rpb24gTWRlKG4sdCxlLHIpe2lmKG4uc2VnbWVudHMubGVuZ3RoPmUubGVuZ3RoKXtjb25zdCBpPW4uc2VnbWVudHMuc2xpY2UoMCxlLmxlbmd0aCk7cmV0dXJuISghejkoaSxlKXx8dC5oYXNDaGlsZHJlbigpfHwhR1AoaSxl''@;'; put 'put ''LHIpKX1pZihuLnNlZ21lbnRzLmxlbmd0aD09PWUubGVuZ3RoKXtpZighejkobi5zZWdtZW50cyxlKXx8IUdQKG4uc2VnbWVudHMsZSxyKSlyZXR1cm4hMTtmb3IoY29uc3QgaSBpbiB0LmNoaWxkcmVuKWlmKCFuLmNoaWxkcmVuW2ldfHwhU2RlKG4uY2hpbGRyZW5baV0sdC5jaGlsZHJlbltp''@;'; put 'put ''XSxyKSlyZXR1cm4hMTtyZXR1cm4hMH17Y29uc3QgaT1lLnNsaWNlKDAsbi5zZWdtZW50cy5sZW5ndGgpLGE9ZS5zbGljZShuLnNlZ21lbnRzLmxlbmd0aCk7cmV0dXJuISEoejkobi5zZWdtZW50cyxpKSYmR1Aobi5zZWdtZW50cyxpLHIpJiZuLmNoaWxkcmVuW25zXSkmJk1kZShuLmNoaWxk''@;'; put 'put ''cmVuW25zXSx0LGEscil9fWZ1bmN0aW9uIEdQKG4sdCxlKXtyZXR1cm4gdC5ldmVyeSgocixpKT0+YmRlW2VdKG5baV0ucGFyYW1ldGVycyxyLnBhcmFtZXRlcnMpKX1jbGFzcyBqOXtyb290O3F1ZXJ5UGFyYW1zO2ZyYWdtZW50O19xdWVyeVBhcmFtTWFwO2NvbnN0cnVjdG9yKHQ9bmV3IFhs''@;'; put 'put ''KFtdLHt9KSxlPXt9LHI9bnVsbCl7dGhpcy5yb290PXQsdGhpcy5xdWVyeVBhcmFtcz1lLHRoaXMuZnJhZ21lbnQ9cn1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dXcodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmlu''@;'; put 'put ''Zygpe3JldHVybiB5TGUuc2VyaWFsaXplKHRoaXMpfX1jbGFzcyBYbHtzZWdtZW50cztjaGlsZHJlbjtwYXJlbnQ9bnVsbDtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc2VnbWVudHM9dCx0aGlzLmNoaWxkcmVuPWUsT2JqZWN0LnZhbHVlcyhlKS5mb3JFYWNoKHI9PnIucGFyZW50PXRoaXMpfWhh''@;'; put 'put ''c0NoaWxkcmVuKCl7cmV0dXJuIHRoaXMubnVtYmVyT2ZDaGlsZHJlbj4wfWdldCBudW1iZXJPZkNoaWxkcmVuKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aH10b1N0cmluZygpe3JldHVybiBLUCh0aGlzKX19Y2xhc3MgY1R7cGF0aDtwYXJhbWV0ZXJzO19wYXJh''@;'; put 'put ''bWV0ZXJNYXA7Y29uc3RydWN0b3IodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnBhcmFtZXRlcnM9ZX1nZXQgcGFyYW1ldGVyTWFwKCl7cmV0dXJuIHRoaXMuX3BhcmFtZXRlck1hcD8/PXV3KHRoaXMucGFyYW1ldGVycyksdGhpcy5fcGFyYW1ldGVyTWFwfXRvU3RyaW5nKCl7cmV0dXJuIFRkZSh0''@;'; put 'put ''aGlzKX19ZnVuY3Rpb24gejkobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxyKT0+ZS5wYXRoPT09dFtyXS5wYXRoKX1sZXQgdVQ9KCgpPT57Y2xhc3MgbntzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAy''@;'; put 'put ''NzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6KCk9Pm5ldyAkUCxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjbGFzcyAkUHtwYXJzZSh0KXtjb25zdCBlPW5ldyBrTGUodCk7cmV0dXJuIG5ldyBqOShlLnBhcnNlUm9vdFNlZ21lbnQoKSxlLnBhcnNlUXVlcnlQYXJhbXMoKSxl''@;'; put 'put ''LnBhcnNlRnJhZ21lbnQoKSl9c2VyaWFsaXplKHQpe2NvbnN0IGU9YC8ke2RUKHQucm9vdCwhMCl9YCxyPWZ1bmN0aW9uIHdMZShuKXtjb25zdCB0PU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2Uscl0pPT5BcnJheS5pc0FycmF5KHIpP3IubWFwKGk9PmAke1hQKGUpfT0ke1hQKGkpfWApLmpv''@;'; put 'put ''aW4oIiYiKTpgJHtYUChlKX09JHtYUChyKX1gKS5maWx0ZXIoZT0+ZSk7cmV0dXJuIHQubGVuZ3RoP2A/JHt0LmpvaW4oIiYiKX1gOiIifSh0LnF1ZXJ5UGFyYW1zKSxpPSJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudD9gIyR7ZnVuY3Rpb24gX0xlKG4pe3JldHVybiBlbmNvZGVVUkkobil9''@;'; put 'put ''KHQuZnJhZ21lbnQpfWA6IiI7cmV0dXJuYCR7ZX0ke3J9JHtpfWB9fWNvbnN0IHlMZT1uZXcgJFA7ZnVuY3Rpb24gS1Aobil7cmV0dXJuIG4uc2VnbWVudHMubWFwKHQ9PlRkZSh0KSkuam9pbigiLyIpfWZ1bmN0aW9uIGRUKG4sdCl7aWYoIW4uaGFzQ2hpbGRyZW4oKSlyZXR1cm4gS1Aobik7''@;'; put 'put ''aWYodCl7Y29uc3QgZT1uLmNoaWxkcmVuW25zXT9kVChuLmNoaWxkcmVuW25zXSwhMSk6IiIscj1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobi5jaGlsZHJlbikuZm9yRWFjaCgoW2ksYV0pPT57aSE9PW5zJiZyLnB1c2goYCR7aX06JHtkVChhLCExKX1gKX0pLHIubGVuZ3RoPjA/YCR7ZX0o''@;'; put 'put ''JHtyLmpvaW4oIi8vIil9KWA6ZX17Y29uc3QgZT1mdW5jdGlvbiB2TGUobix0KXtsZXQgZT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobi5jaGlsZHJlbikuZm9yRWFjaCgoW3IsaV0pPT57cj09PW5zJiYoZT1lLmNvbmNhdCh0KGkscikpKX0pLE9iamVjdC5lbnRyaWVzKG4uY2hpbGRyZW4p''@;'; put 'put ''LmZvckVhY2goKFtyLGldKT0+e3IhPT1ucyYmKGU9ZS5jb25jYXQodChpLHIpKSl9KSxlfShuLChyLGkpPT5pPT09bnM/W2RUKG4uY2hpbGRyZW5bbnNdLCExKV06W2Ake2l9OiR7ZFQociwhMSl9YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMobi5jaGlsZHJlbikubGVuZ3RoJiZudWxsIT1u''@;'; put 'put ''LmNoaWxkcmVuW25zXT9gJHtLUChuKX0vJHtlWzBdfWA6YCR7S1Aobil9Lygke2Uuam9pbigiLy8iKX0pYH19ZnVuY3Rpb24geGRlKG4pe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZSgvJTQwL2csIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywi''@;'; put 'put ''JCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpfWZ1bmN0aW9uIFhQKG4pe3JldHVybiB4ZGUobikucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gQyQobil7cmV0dXJuIHhkZShuKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYi''@;'; put 'put ''KX1mdW5jdGlvbiBxUChuKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KG4pfWZ1bmN0aW9uIEVkZShuKXtyZXR1cm4gcVAobi5yZXBsYWNlKC9cKy9nLCIlMjAiKSl9ZnVuY3Rpb24gVGRlKG4pe3JldHVybmAke0MkKG4ucGF0aCl9JHtmdW5jdGlvbiBiTGUobil7cmV0dXJuIE9iamVjdC5l''@;'; put 'put ''bnRyaWVzKG4pLm1hcCgoW3QsZV0pPT5gOyR7QyQodCl9PSR7QyQoZSl9YCkuam9pbigiIil9KG4ucGFyYW1ldGVycyl9YH1jb25zdCBDTGU9L15bXlwvKCk/OyNdKy87ZnVuY3Rpb24gUyQobil7Y29uc3QgdD1uLm1hdGNoKENMZSk7cmV0dXJuIHQ/dFswXToiIn1jb25zdCBTTGU9L15bXlwv''@;'; put 'put ''KCk/Oz0jXSsvLHhMZT0vXltePT8mI10rLyxUTGU9L15bXiYjXSsvO2NsYXNzIGtMZXt1cmw7cmVtYWluaW5nO2NvbnN0cnVjdG9yKHQpe3RoaXMudXJsPXQsdGhpcy5yZW1haW5pbmc9dH1wYXJzZVJvb3RTZWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10''@;'; put 'put ''aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IFhsKFtdLHt9KTpuZXcgWGwoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfXBhcnNlUXVlcnlQYXJhbXMoKXtjb25zdCB0PXt9O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFs''@;'; put 'put ''KCI/IikpZG97dGhpcy5wYXJzZVF1ZXJ5UGFyYW0odCl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWwoIiYiKSk7cmV0dXJuIHR9cGFyc2VGcmFnbWVudCgpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH1w''@;'; put 'put ''YXJzZUNoaWxkcmVuKCl7aWYoIiI9PT10aGlzLnJlbWFpbmluZylyZXR1cm57fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpO2NvbnN0IHQ9W107Zm9yKHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKXx8dC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3RoaXMucGVla1N0YXJ0c1dpdGgoIi8i''@;'; put 'put ''KSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8vIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpOyl0aGlzLmNhcHR1cmUoIi8iKSx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7bGV0IGU9e307dGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKSYmKHRoaXMuY2FwdHVyZSgiLyIpLGU9dGhp''@;'; put 'put ''cy5wYXJzZVBhcmVucyghMCkpO2xldCByPXt9O3JldHVybiB0aGlzLnBlZWtTdGFydHNXaXRoKCIoIikmJihyPXRoaXMucGFyc2VQYXJlbnMoITEpKSwodC5sZW5ndGg+MHx8T2JqZWN0LmtleXMoZSkubGVuZ3RoPjApJiYocltuc109bmV3IFhsKHQsZSkpLHJ9cGFyc2VTZWdtZW50KCl7Y29u''@;'; put 'put ''c3QgdD1TJCh0aGlzLnJlbWFpbmluZyk7aWYoIiI9PT10JiZ0aGlzLnBlZWtTdGFydHNXaXRoKCI7IikpdGhyb3cgbmV3IGtyKDQwMDksITEpO3JldHVybiB0aGlzLmNhcHR1cmUodCksbmV3IGNUKHFQKHQpLHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKSl9cGFyc2VNYXRyaXhQYXJhbXMoKXtj''@;'; put 'put ''b25zdCB0PXt9O2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWwoIjsiKTspdGhpcy5wYXJzZVBhcmFtKHQpO3JldHVybiB0fXBhcnNlUGFyYW0odCl7Y29uc3QgZT1mdW5jdGlvbiBNTGUobil7Y29uc3QgdD1uLm1hdGNoKFNMZSk7cmV0dXJuIHQ/dFswXToiIn0odGhpcy5yZW1haW5pbmcpO2lm''@;'; put 'put ''KCFlKXJldHVybjt0aGlzLmNhcHR1cmUoZSk7bGV0IHI9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7Y29uc3QgaT1TJCh0aGlzLnJlbWFpbmluZyk7aSYmKHI9aSx0aGlzLmNhcHR1cmUocikpfXRbcVAoZSldPXFQKHIpfXBhcnNlUXVlcnlQYXJhbSh0KXtjb25zdCBlPWZ1bmN0''@;'; put 'put ''aW9uIEVMZShuKXtjb25zdCB0PW4ubWF0Y2goeExlKTtyZXR1cm4gdD90WzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWUpcmV0dXJuO3RoaXMuY2FwdHVyZShlKTtsZXQgcj0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBjPWZ1bmN0aW9uIEFMZShuKXtjb25zdCB0''@;'; put 'put ''PW4ubWF0Y2goVExlKTtyZXR1cm4gdD90WzBdOiIifSh0aGlzLnJlbWFpbmluZyk7YyYmKHI9Yyx0aGlzLmNhcHR1cmUocikpfWNvbnN0IGk9RWRlKGUpLGE9RWRlKHIpO2lmKHQuaGFzT3duUHJvcGVydHkoaSkpe2xldCBjPXRbaV07QXJyYXkuaXNBcnJheShjKXx8KGM9W2NdLHRbaV09Yyks''@;'; put 'put ''Yy5wdXNoKGEpfWVsc2UgdFtpXT1hfXBhcnNlUGFyZW5zKHQpe2NvbnN0IGU9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe2NvbnN0IHI9UyQodGhpcy5yZW1haW5pbmcpLGk9dGhpcy5yZW1haW5p''@;'; put 'put ''bmdbci5sZW5ndGhdO2lmKCIvIiE9PWkmJiIpIiE9PWkmJiI7IiE9PWkpdGhyb3cgbmV3IGtyKDQwMTAsITEpO2xldCBhO3IuaW5kZXhPZigiOiIpPi0xPyhhPXIuc2xpY2UoMCxyLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGEpLHRoaXMuY2FwdHVyZSgiOiIpKTp0JiYoYT1ucyk7Y29u''@;'; put 'put ''c3QgYz10aGlzLnBhcnNlQ2hpbGRyZW4oKTtlW2FdPTE9PT1PYmplY3Qua2V5cyhjKS5sZW5ndGg/Y1tuc106bmV3IFhsKFtdLGMpLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBlfXBlZWtTdGFydHNXaXRoKHQpe3JldHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKHQp''@;'; put 'put ''fWNvbnN1bWVPcHRpb25hbCh0KXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgodCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcodC5sZW5ndGgpLCEwKX1jYXB0dXJlKHQpe2lmKCF0aGlzLmNvbnN1bWVPcHRpb25hbCh0KSl0aHJvdyBuZXcga3IoNDAxMSwh''@;'; put 'put ''MSl9fWZ1bmN0aW9uIEFkZShuKXtyZXR1cm4gbi5zZWdtZW50cy5sZW5ndGg+MD9uZXcgWGwoW10se1tuc106bn0pOm59ZnVuY3Rpb24ga2RlKG4pe2NvbnN0IHQ9e307Zm9yKGNvbnN0W3IsaV1vZiBPYmplY3QuZW50cmllcyhuLmNoaWxkcmVuKSl7Y29uc3QgYT1rZGUoaSk7aWYocj09PW5z''@;'; put 'put ''JiYwPT09YS5zZWdtZW50cy5sZW5ndGgmJmEuaGFzQ2hpbGRyZW4oKSlmb3IoY29uc3RbYyxtXW9mIE9iamVjdC5lbnRyaWVzKGEuY2hpbGRyZW4pKXRbY109bTtlbHNlKGEuc2VnbWVudHMubGVuZ3RoPjB8fGEuaGFzQ2hpbGRyZW4oKSkmJih0W3JdPWEpfXJldHVybiBmdW5jdGlvbiBETGUo''@;'; put 'put ''bil7aWYoMT09PW4ubnVtYmVyT2ZDaGlsZHJlbiYmbi5jaGlsZHJlbltuc10pe2NvbnN0IHQ9bi5jaGlsZHJlbltuc107cmV0dXJuIG5ldyBYbChuLnNlZ21lbnRzLmNvbmNhdCh0LnNlZ21lbnRzKSx0LmNoaWxkcmVuKX1yZXR1cm4gbn0obmV3IFhsKG4uc2VnbWVudHMsdCkpfWZ1bmN0aW9u''@;'; put 'put ''IFU5KG4pe3JldHVybiBuIGluc3RhbmNlb2Ygajl9ZnVuY3Rpb24gRGRlKG4pe2xldCB0O2NvbnN0IGk9QWRlKGZ1bmN0aW9uIGUoYSl7Y29uc3QgYz17fTtmb3IoY29uc3QgQyBvZiBhLmNoaWxkcmVuKXtjb25zdCBQPWUoQyk7Y1tDLm91dGxldF09UH1jb25zdCBtPW5ldyBYbChhLnVybCxj''@;'; put 'put ''KTtyZXR1cm4gYT09PW4mJih0PW0pLG19KG4ucm9vdCkpO3JldHVybiB0Pz9pfWZ1bmN0aW9uIElkZShuLHQsZSxyKXtsZXQgaT1uO2Zvcig7aS5wYXJlbnQ7KWk9aS5wYXJlbnQ7aWYoMD09PXQubGVuZ3RoKXJldHVybiBNJChpLGksaSxlLHIpO2NvbnN0IGE9ZnVuY3Rpb24gUkxlKG4pe2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgblswXSYmMT09PW4ubGVuZ3RoJiYiLyI9PT1uWzBdKXJldHVybiBuZXcgTGRlKCEwLDAsbik7bGV0IHQ9MCxlPSExO2NvbnN0IHI9bi5yZWR1Y2UoKGksYSxjKT0+e2lmKCJvYmplY3QiPT10eXBlb2YgYSYmbnVsbCE9YSl7aWYoYS5vdXRsZXRzKXtjb25zdCBt''@;'; put 'put ''PXt9O3JldHVybiBPYmplY3QuZW50cmllcyhhLm91dGxldHMpLmZvckVhY2goKFtDLFBdKT0+e21bQ109InN0cmluZyI9PXR5cGVvZiBQP1Auc3BsaXQoIi8iKTpQfSksWy4uLmkse291dGxldHM6bX1dfWlmKGEuc2VnbWVudFBhdGgpcmV0dXJuWy4uLmksYS5zZWdtZW50UGF0aF19cmV0dXJu''@;'; put 'put ''InN0cmluZyIhPXR5cGVvZiBhP1suLi5pLGFdOjA9PT1jPyhhLnNwbGl0KCIvIikuZm9yRWFjaCgobSxDKT0+ezA9PUMmJiIuIj09PW18fCgwPT1DJiYiIj09PW0/ZT0hMDoiLi4iPT09bT90Kys6IiIhPW0mJmkucHVzaChtKSl9KSxpKTpbLi4uaSxhXX0sW10pO3JldHVybiBuZXcgTGRlKGUs''@;'; put 'put ''dCxyKX0odCk7aWYoYS50b1Jvb3QoKSlyZXR1cm4gTSQoaSxpLG5ldyBYbChbXSx7fSksZSxyKTtjb25zdCBjPWZ1bmN0aW9uIExMZShuLHQsZSl7aWYobi5pc0Fic29sdXRlKXJldHVybiBuZXcgUVAodCwhMCwwKTtpZighZSlyZXR1cm4gbmV3IFFQKHQsITEsTmFOKTtpZihudWxsPT09ZS5w''@;'; put 'put ''YXJlbnQpcmV0dXJuIG5ldyBRUChlLCEwLDApO2NvbnN0IHI9SlAobi5jb21tYW5kc1swXSk/MDoxO3JldHVybiBmdW5jdGlvbiBPTGUobix0LGUpe2xldCByPW4saT10LGE9ZTtmb3IoO2E+aTspe2lmKGEtPWkscj1yLnBhcmVudCwhcil0aHJvdyBuZXcga3IoNDAwNSwhMSk7aT1yLnNlZ21l''@;'; put 'put ''bnRzLmxlbmd0aH1yZXR1cm4gbmV3IFFQKHIsITEsaS1hKX0oZSxlLnNlZ21lbnRzLmxlbmd0aC0xK3Isbi5udW1iZXJPZkRvdWJsZURvdHMpfShhLGksbiksbT1jLnByb2Nlc3NDaGlsZHJlbj9mVChjLnNlZ21lbnRHcm91cCxjLmluZGV4LGEuY29tbWFuZHMpOk9kZShjLnNlZ21lbnRHcm91''@;'; put 'put ''cCxjLmluZGV4LGEuY29tbWFuZHMpO3JldHVybiBNJChpLGMuc2VnbWVudEdyb3VwLG0sZSxyKX1mdW5jdGlvbiBKUChuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPW4mJiFuLm91dGxldHMmJiFuLnNlZ21lbnRQYXRofWZ1bmN0aW9uIGhUKG4pe3JldHVybiJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgbiYmbnVsbCE9biYmbi5vdXRsZXRzfWZ1bmN0aW9uIE0kKG4sdCxlLHIsaSl7bGV0IGMsYT17fTtyJiZPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbQyxQXSk9PnthW0NdPUFycmF5LmlzQXJyYXkoUCk/UC5tYXAoWT0+YCR7WX1gKTpgJHtQfWB9KSxjPW49PT10P2U6UmRlKG4s''@;'; put 'put ''dCxlKTtjb25zdCBtPUFkZShrZGUoYykpO3JldHVybiBuZXcgajkobSxhLGkpfWZ1bmN0aW9uIFJkZShuLHQsZSl7Y29uc3Qgcj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobi5jaGlsZHJlbikuZm9yRWFjaCgoW2ksYV0pPT57cltpXT1hPT09dD9lOlJkZShhLHQsZSl9KSxuZXcgWGwobi5z''@;'; put 'put ''ZWdtZW50cyxyKX1jbGFzcyBMZGV7aXNBYnNvbHV0ZTtudW1iZXJPZkRvdWJsZURvdHM7Y29tbWFuZHM7Y29uc3RydWN0b3IodCxlLHIpe2lmKHRoaXMuaXNBYnNvbHV0ZT10LHRoaXMubnVtYmVyT2ZEb3VibGVEb3RzPWUsdGhpcy5jb21tYW5kcz1yLHQmJnIubGVuZ3RoPjAmJkpQKHJbMF0p''@;'; put 'put ''KXRocm93IG5ldyBrcig0MDAzLCExKTtjb25zdCBpPXIuZmluZChoVCk7aWYoaSYmaSE9PV9kZShyKSl0aHJvdyBuZXcga3IoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNs''@;'; put 'put ''YXNzIFFQe3NlZ21lbnRHcm91cDtwcm9jZXNzQ2hpbGRyZW47aW5kZXg7Y29uc3RydWN0b3IodCxlLHIpe3RoaXMuc2VnbWVudEdyb3VwPXQsdGhpcy5wcm9jZXNzQ2hpbGRyZW49ZSx0aGlzLmluZGV4PXJ9fWZ1bmN0aW9uIE9kZShuLHQsZSl7aWYobj8/PW5ldyBYbChbXSx7fSksMD09PW4u''@;'; put 'put ''c2VnbWVudHMubGVuZ3RoJiZuLmhhc0NoaWxkcmVuKCkpcmV0dXJuIGZUKG4sdCxlKTtjb25zdCByPWZ1bmN0aW9uIEZMZShuLHQsZSl7bGV0IHI9MCxpPXQ7Y29uc3QgYT17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aTxuLnNlZ21lbnRzLmxlbmd0aDspe2lm''@;'; put 'put ''KHI+PWUubGVuZ3RoKXJldHVybiBhO2NvbnN0IGM9bi5zZWdtZW50c1tpXSxtPWVbcl07aWYoaFQobSkpYnJlYWs7Y29uc3QgQz1gJHttfWAsUD1yPGUubGVuZ3RoLTE/ZVtyKzFdOm51bGw7aWYoaT4wJiZ2b2lkIDA9PT1DKWJyZWFrO2lmKEMmJlAmJiJvYmplY3QiPT10eXBlb2YgUCYmdm9p''@;'; put 'put ''ZCAwPT09UC5vdXRsZXRzKXtpZighRmRlKEMsUCxjKSlyZXR1cm4gYTtyKz0yfWVsc2V7aWYoIUZkZShDLHt9LGMpKXJldHVybiBhO3IrK31pKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDppLGNvbW1hbmRJbmRleDpyfX0obix0LGUpLGk9ZS5zbGljZShyLmNvbW1hbmRJbmRleCk7aWYo''@;'; put 'put ''ci5tYXRjaCYmci5wYXRoSW5kZXg8bi5zZWdtZW50cy5sZW5ndGgpe2NvbnN0IGE9bmV3IFhsKG4uc2VnbWVudHMuc2xpY2UoMCxyLnBhdGhJbmRleCkse30pO3JldHVybiBhLmNoaWxkcmVuW25zXT1uZXcgWGwobi5zZWdtZW50cy5zbGljZShyLnBhdGhJbmRleCksbi5jaGlsZHJlbiksZlQo''@;'; put 'put ''YSwwLGkpfXJldHVybiByLm1hdGNoJiYwPT09aS5sZW5ndGg/bmV3IFhsKG4uc2VnbWVudHMse30pOnIubWF0Y2gmJiFuLmhhc0NoaWxkcmVuKCk/eCQobix0LGUpOnIubWF0Y2g/ZlQobiwwLGkpOngkKG4sdCxlKX1mdW5jdGlvbiBmVChuLHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiBu''@;'; put 'put ''ZXcgWGwobi5zZWdtZW50cyx7fSk7e2NvbnN0IHI9ZnVuY3Rpb24gUExlKG4pe3JldHVybiBoVChuWzBdKT9uWzBdLm91dGxldHM6e1tuc106bn19KGUpLGk9e307aWYoT2JqZWN0LmtleXMocikuc29tZShhPT5hIT09bnMpJiZuLmNoaWxkcmVuW25zXSYmMT09PW4ubnVtYmVyT2ZDaGlsZHJl''@;'; put 'put ''biYmMD09PW4uY2hpbGRyZW5bbnNdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgYT1mVChuLmNoaWxkcmVuW25zXSx0LGUpO3JldHVybiBuZXcgWGwobi5zZWdtZW50cyxhLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2EsY10pPT57InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBjJiYoYz1bY10pLG51bGwhPT1jJiYoaVthXT1PZGUobi5jaGlsZHJlblthXSx0LGMpKX0pLE9iamVjdC5lbnRyaWVzKG4uY2hpbGRyZW4pLmZvckVhY2goKFthLGNdKT0+e3ZvaWQgMD09PXJbYV0mJihpW2FdPWMpfSksbmV3IFhsKG4uc2VnbWVudHMsaSl9fWZ1bmN0aW9uIHgkKG4sdCxl''@;'; put 'put ''KXtjb25zdCByPW4uc2VnbWVudHMuc2xpY2UoMCx0KTtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aDspe2NvbnN0IGE9ZVtpXTtpZihoVChhKSl7Y29uc3QgQz1ITGUoYS5vdXRsZXRzKTtyZXR1cm4gbmV3IFhsKHIsQyl9aWYoMD09PWkmJkpQKGVbMF0pKXtyLnB1c2gobmV3IGNUKG4uc2VnbWVu''@;'; put 'put ''dHNbdF0ucGF0aCxQZGUoZVswXSkpKSxpKys7Y29udGludWV9Y29uc3QgYz1oVChhKT9hLm91dGxldHNbbnNdOmAke2F9YCxtPWk8ZS5sZW5ndGgtMT9lW2krMV06bnVsbDtjJiZtJiZKUChtKT8oci5wdXNoKG5ldyBjVChjLFBkZShtKSkpLGkrPTIpOihyLnB1c2gobmV3IGNUKGMse30pKSxp''@;'; put 'put ''KyspfXJldHVybiBuZXcgWGwocix7fSl9ZnVuY3Rpb24gSExlKG4pe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKFtlLHJdKT0+eyJzdHJpbmciPT10eXBlb2YgciYmKHI9W3JdKSxudWxsIT09ciYmKHRbZV09eCQobmV3IFhsKFtdLHt9KSwwLHIpKX0pLHR9''@;'; put 'put ''ZnVuY3Rpb24gUGRlKG4pe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKFtlLHJdKT0+dFtlXT1gJHtyfWApLHR9ZnVuY3Rpb24gRmRlKG4sdCxlKXtyZXR1cm4gbj09ZS5wYXRoJiZjNCh0LGUucGFyYW1ldGVycyl9Y29uc3QgZUY9ImltcGVyYXRpdmUiO3Zh''@;'; put 'put ''ciB6cz1mdW5jdGlvbihuKXtyZXR1cm4gbltuLk5hdmlnYXRpb25TdGFydD0wXT0iTmF2aWdhdGlvblN0YXJ0IixuW24uTmF2aWdhdGlvbkVuZD0xXT0iTmF2aWdhdGlvbkVuZCIsbltuLk5hdmlnYXRpb25DYW5jZWw9Ml09Ik5hdmlnYXRpb25DYW5jZWwiLG5bbi5OYXZpZ2F0aW9uRXJyb3I9''@;'; put 'put ''M109Ik5hdmlnYXRpb25FcnJvciIsbltuLlJvdXRlc1JlY29nbml6ZWQ9NF09IlJvdXRlc1JlY29nbml6ZWQiLG5bbi5SZXNvbHZlU3RhcnQ9NV09IlJlc29sdmVTdGFydCIsbltuLlJlc29sdmVFbmQ9Nl09IlJlc29sdmVFbmQiLG5bbi5HdWFyZHNDaGVja1N0YXJ0PTddPSJHdWFyZHNDaGVj''@;'; put 'put ''a1N0YXJ0IixuW24uR3VhcmRzQ2hlY2tFbmQ9OF09Ikd1YXJkc0NoZWNrRW5kIixuW24uUm91dGVDb25maWdMb2FkU3RhcnQ9OV09IlJvdXRlQ29uZmlnTG9hZFN0YXJ0IixuW24uUm91dGVDb25maWdMb2FkRW5kPTEwXT0iUm91dGVDb25maWdMb2FkRW5kIixuW24uQ2hpbGRBY3RpdmF0aW9u''@;'; put 'put ''U3RhcnQ9MTFdPSJDaGlsZEFjdGl2YXRpb25TdGFydCIsbltuLkNoaWxkQWN0aXZhdGlvbkVuZD0xMl09IkNoaWxkQWN0aXZhdGlvbkVuZCIsbltuLkFjdGl2YXRpb25TdGFydD0xM109IkFjdGl2YXRpb25TdGFydCIsbltuLkFjdGl2YXRpb25FbmQ9MTRdPSJBY3RpdmF0aW9uRW5kIixuW24u''@;'; put 'put ''U2Nyb2xsPTE1XT0iU2Nyb2xsIixuW24uTmF2aWdhdGlvblNraXBwZWQ9MTZdPSJOYXZpZ2F0aW9uU2tpcHBlZCIsbn0oenN8fHt9KTtjbGFzcyB1NHtpZDt1cmw7Y29uc3RydWN0b3IodCxlKXt0aGlzLmlkPXQsdGhpcy51cmw9ZX19Y2xhc3MgdEYgZXh0ZW5kcyB1NHt0eXBlPXpzLk5hdmln''@;'; put 'put ''YXRpb25TdGFydDtuYXZpZ2F0aW9uVHJpZ2dlcjtyZXN0b3JlZFN0YXRlO2NvbnN0cnVjdG9yKHQsZSxyPSJpbXBlcmF0aXZlIixpPW51bGwpe3N1cGVyKHQsZSksdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1yLHRoaXMucmVzdG9yZWRTdGF0ZT1pfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRp''@;'; put 'put ''b25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGQ0IGV4dGVuZHMgdTR7dXJsQWZ0ZXJSZWRpcmVjdHM7dHlwZT16cy5OYXZpZ2F0aW9uRW5kO2NvbnN0cnVjdG9yKHQsZSxyKXtzdXBlcih0LGUpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9cn10b1N0''@;'; put 'put ''cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScpYH19dmFyIHUyPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uUmVkaXJlY3Q9MF09IlJlZGlyZWN0''@;'; put 'put ''IixuW24uU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbj0xXT0iU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiIsbltuLk5vRGF0YUZyb21SZXNvbHZlcj0yXT0iTm9EYXRhRnJvbVJlc29sdmVyIixuW24uR3VhcmRSZWplY3RlZD0zXT0iR3VhcmRSZWplY3RlZCIsbn0odTJ8fHt9KSxuRj1mdW5j''@;'; put 'put ''dGlvbihuKXtyZXR1cm4gbltuLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbj0wXT0iSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uIixuW24uSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneT0xXT0iSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSIsbn0obkZ8fHt9KTtjbGFzcyBXOSBleHRl''@;'; put 'put ''bmRzIHU0e3JlYXNvbjtjb2RlO3R5cGU9enMuTmF2aWdhdGlvbkNhbmNlbDtjb25zdHJ1Y3Rvcih0LGUscixpKXtzdXBlcih0LGUpLHRoaXMucmVhc29uPXIsdGhpcy5jb2RlPWl9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkNhbmNlbChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlz''@;'; put 'put ''LnVybH0nKWB9fWNsYXNzIGR3IGV4dGVuZHMgdTR7cmVhc29uO2NvZGU7dHlwZT16cy5OYXZpZ2F0aW9uU2tpcHBlZDtjb25zdHJ1Y3Rvcih0LGUscixpKXtzdXBlcih0LGUpLHRoaXMucmVhc29uPXIsdGhpcy5jb2RlPWl9fWNsYXNzIEUkIGV4dGVuZHMgdTR7ZXJyb3I7dGFyZ2V0O3R5cGU9''@;'; put 'put ''enMuTmF2aWdhdGlvbkVycm9yO2NvbnN0cnVjdG9yKHQsZSxyLGkpe3N1cGVyKHQsZSksdGhpcy5lcnJvcj1yLHRoaXMudGFyZ2V0PWl9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJy''@;'; put 'put ''b3J9KWB9fWNsYXNzIEhkZSBleHRlbmRzIHU0e3VybEFmdGVyUmVkaXJlY3RzO3N0YXRlO3R5cGU9enMuUm91dGVzUmVjb2duaXplZDtjb25zdHJ1Y3Rvcih0LGUscixpKXtzdXBlcih0LGUpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9cix0aGlzLnN0YXRlPWl9dG9TdHJpbmcoKXtyZXR1cm5g''@;'; put 'put ''Um91dGVzUmVjb2duaXplZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBOTGUgZXh0ZW5kcyB1NHt1cmxBZnRlclJlZGlyZWN0cztz''@;'; put 'put ''dGF0ZTt0eXBlPXpzLkd1YXJkc0NoZWNrU3RhcnQ7Y29uc3RydWN0b3IodCxlLHIsaSl7c3VwZXIodCxlKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPXIsdGhpcy5zdGF0ZT1pfXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51''@;'; put 'put ''cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgVkxlIGV4dGVuZHMgdTR7dXJsQWZ0ZXJSZWRpcmVjdHM7c3RhdGU7c2hvdWxkQWN0aXZhdGU7dHlwZT16cy5HdWFyZHNDaGVja0VuZDtjb25z''@;'; put 'put ''dHJ1Y3Rvcih0LGUscixpLGEpe3N1cGVyKHQsZSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1yLHRoaXMuc3RhdGU9aSx0aGlzLnNob3VsZEFjdGl2YXRlPWF9dG9TdHJpbmcoKXtyZXR1cm5gR3VhcmRzQ2hlY2tFbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0''@;'; put 'put ''ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0sIHNob3VsZEFjdGl2YXRlOiAke3RoaXMuc2hvdWxkQWN0aXZhdGV9KWB9fWNsYXNzIEJMZSBleHRlbmRzIHU0e3VybEFmdGVyUmVkaXJlY3RzO3N0YXRlO3R5cGU9enMuUmVzb2x2''@;'; put 'put ''ZVN0YXJ0O2NvbnN0cnVjdG9yKHQsZSxyLGkpe3N1cGVyKHQsZSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1yLHRoaXMuc3RhdGU9aX10b1N0cmluZygpe3JldHVybmBSZXNvbHZlU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICck''@;'; put 'put ''e3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgakxlIGV4dGVuZHMgdTR7dXJsQWZ0ZXJSZWRpcmVjdHM7c3RhdGU7dHlwZT16cy5SZXNvbHZlRW5kO2NvbnN0cnVjdG9yKHQsZSxyLGkpe3N1cGVyKHQsZSksdGhpcy51cmxBZnRlclJlZGly''@;'; put 'put ''ZWN0cz1yLHRoaXMuc3RhdGU9aX10b1N0cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIHpM''@;'; put 'put ''ZXtyb3V0ZTt0eXBlPXpzLlJvdXRlQ29uZmlnTG9hZFN0YXJ0O2NvbnN0cnVjdG9yKHQpe3RoaXMucm91dGU9dH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRTdGFydChwYXRoOiAke3RoaXMucm91dGUucGF0aH0pYH19Y2xhc3MgVUxle3JvdXRlO3R5cGU9enMuUm91dGVDb25m''@;'; put 'put ''aWdMb2FkRW5kO2NvbnN0cnVjdG9yKHQpe3RoaXMucm91dGU9dH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIFdMZXtzbmFwc2hvdDt0eXBlPXpzLkNoaWxkQWN0aXZhdGlvblN0YXJ0O2NvbnN0cnVjdG9yKHQp''@;'; put 'put ''e3RoaXMuc25hcHNob3Q9dH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgWkxle3NuYXBzaG90O3R5cGU9enMuQ2hpbGRB''@;'; put 'put ''Y3RpdmF0aW9uRW5kO2NvbnN0cnVjdG9yKHQpe3RoaXMuc25hcHNob3Q9dH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIFlM''@;'; put 'put ''ZXtzbmFwc2hvdDt0eXBlPXpzLkFjdGl2YXRpb25TdGFydDtjb25zdHJ1Y3Rvcih0KXt0aGlzLnNuYXBzaG90PXR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0''@;'; put 'put ''aHx8IiJ9JylgfX1jbGFzcyBHTGV7c25hcHNob3Q7dHlwZT16cy5BY3RpdmF0aW9uRW5kO2NvbnN0cnVjdG9yKHQpe3RoaXMuc25hcHNob3Q9dH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qu''@;'; put 'put ''cm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBOZGV7cm91dGVyRXZlbnQ7cG9zaXRpb247YW5jaG9yO3R5cGU9enMuU2Nyb2xsO2NvbnN0cnVjdG9yKHQsZSxyKXt0aGlzLnJvdXRlckV2ZW50PXQsdGhpcy5wb3NpdGlvbj1lLHRoaXMuYW5jaG9yPXJ9dG9TdHJpbmcoKXtyZXR1cm5g''@;'; put 'put ''U2Nyb2xsKGFuY2hvcjogJyR7dGhpcy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyBUJHt9Y2xhc3MgckZ7dXJsO25hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM7Y29u''@;'; put 'put ''c3RydWN0b3IodCxlKXt0aGlzLnVybD10LHRoaXMubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1lfX1mdW5jdGlvbiAkMyhuKXtyZXR1cm4gbi5vdXRsZXR8fG5zfWZ1bmN0aW9uIHBUKG4pe2lmKCFuKXJldHVybiBudWxsO2lmKG4ucm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4gbi5y''@;'; put 'put ''b3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCB0PW4ucGFyZW50O3Q7dD10LnBhcmVudCl7Y29uc3QgZT10LnJvdXRlQ29uZmlnO2lmKGU/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gZS5fbG9hZGVkSW5qZWN0b3I7aWYoZT8uX2luamVjdG9yKXJldHVybiBlLl9pbmplY3Rvcn1yZXR1cm4g''@;'; put 'put ''bnVsbH1jbGFzcyBRTGV7cm9vdEluamVjdG9yO291dGxldD1udWxsO3JvdXRlPW51bGw7Y2hpbGRyZW47YXR0YWNoUmVmPW51bGw7Z2V0IGluamVjdG9yKCl7cmV0dXJuIHBUKHRoaXMucm91dGU/LnNuYXBzaG90KT8/dGhpcy5yb290SW5qZWN0b3J9Y29uc3RydWN0b3IodCl7dGhpcy5yb290''@;'; put 'put ''SW5qZWN0b3I9dCx0aGlzLmNoaWxkcmVuPW5ldyBnVCh0aGlzLnJvb3RJbmplY3Rvcil9fWxldCBnVD0oKCk9PntjbGFzcyBue3Jvb3RJbmplY3Rvcjtjb250ZXh0cz1uZXcgTWFwO2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdEluamVjdG9yPWV9b25DaGlsZE91dGxldENyZWF0ZWQoZSxyKXtj''@;'; put 'put ''b25zdCBpPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGUpO2kub3V0bGV0PXIsdGhpcy5jb250ZXh0cy5zZXQoZSxpKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGUpe2NvbnN0IHI9dGhpcy5nZXRDb250ZXh0KGUpO3ImJihyLm91dGxldD1udWxsLHIuYXR0YWNoUmVmPW51bGwpfW9uT3V0bGV0''@;'; put 'put ''RGVhY3RpdmF0ZWQoKXtjb25zdCBlPXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxlfW9uT3V0bGV0UmVBdHRhY2hlZChlKXt0aGlzLmNvbnRleHRzPWV9Z2V0T3JDcmVhdGVDb250ZXh0KGUpe2xldCByPXRoaXMuZ2V0Q29udGV4dChlKTtyZXR1cm4gcnx8KHI9''@;'; put 'put ''bmV3IFFMZSh0aGlzLnJvb3RJbmplY3RvciksdGhpcy5jb250ZXh0cy5zZXQoZSxyKSkscn1nZXRDb250ZXh0KGUpe3JldHVybiB0aGlzLmNvbnRleHRzLmdldChlKXx8bnVsbH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoT3IodWMpKX07c3RhdGljIFx1''@;'; put 'put ''MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjbGFzcyBWZGV7X3Jvb3Q7Y29uc3RydWN0b3IodCl7dGhpcy5fcm9vdD10fWdldCByb290KCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9cGFyZW50KHQpe2Nv''@;'; put 'put ''bnN0IGU9dGhpcy5wYXRoRnJvbVJvb3QodCk7cmV0dXJuIGUubGVuZ3RoPjE/ZVtlLmxlbmd0aC0yXTpudWxsfWNoaWxkcmVuKHQpe2NvbnN0IGU9QSQodCx0aGlzLl9yb290KTtyZXR1cm4gZT9lLmNoaWxkcmVuLm1hcChyPT5yLnZhbHVlKTpbXX1maXJzdENoaWxkKHQpe2NvbnN0IGU9QSQo''@;'; put 'put ''dCx0aGlzLl9yb290KTtyZXR1cm4gZSYmZS5jaGlsZHJlbi5sZW5ndGg+MD9lLmNoaWxkcmVuWzBdLnZhbHVlOm51bGx9c2libGluZ3ModCl7Y29uc3QgZT1rJCh0LHRoaXMuX3Jvb3QpO3JldHVybiBlLmxlbmd0aDwyP1tdOmVbZS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGk9PmkudmFsdWUp''@;'; put 'put ''LmZpbHRlcihpPT5pIT09dCl9cGF0aEZyb21Sb290KHQpe3JldHVybiBrJCh0LHRoaXMuX3Jvb3QpLm1hcChlPT5lLnZhbHVlKX19ZnVuY3Rpb24gQSQobix0KXtpZihuPT09dC52YWx1ZSlyZXR1cm4gdDtmb3IoY29uc3QgZSBvZiB0LmNoaWxkcmVuKXtjb25zdCByPUEkKG4sZSk7aWYocily''@;'; put 'put ''ZXR1cm4gcn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBrJChuLHQpe2lmKG49PT10LnZhbHVlKXJldHVyblt0XTtmb3IoY29uc3QgZSBvZiB0LmNoaWxkcmVuKXtjb25zdCByPWskKG4sZSk7aWYoci5sZW5ndGgpcmV0dXJuIHIudW5zaGlmdCh0KSxyfXJldHVybltdfWNsYXNzIEsze3ZhbHVlO2No''@;'; put 'put ''aWxkcmVuO2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuY2hpbGRyZW49ZX10b1N0cmluZygpe3JldHVybmBUcmVlTm9kZSgke3RoaXMudmFsdWV9KWB9fWZ1bmN0aW9uIGh3KG4pe2NvbnN0IHQ9e307cmV0dXJuIG4mJm4uY2hpbGRyZW4uZm9yRWFjaChlPT50W2UudmFsdWUu''@;'; put 'put ''b3V0bGV0XT1lKSx0fWNsYXNzIEJkZSBleHRlbmRzIFZkZXtzbmFwc2hvdDtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuc25hcHNob3Q9ZSxEJCh0aGlzLHQpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX19ZnVuY3Rpb24gamRlKG4pe2NvbnN0IHQ9''@;'; put 'put ''ZnVuY3Rpb24gZU9lKG4pe2NvbnN0IGE9bmV3IGFGKFtdLHt9LHt9LCIiLHt9LG5zLG4sbnVsbCx7fSk7cmV0dXJuIG5ldyB6ZGUoIiIsbmV3IEszKGEsW10pKX0obiksZT1uZXcgeGkoW25ldyBjVCgiIix7fSldKSxyPW5ldyB4aSh7fSksaT1uZXcgeGkoe30pLGE9bmV3IHhpKHt9KSxjPW5l''@;'; put 'put ''dyB4aSgiIiksbT1uZXcgczAoZSxyLGEsYyxpLG5zLG4sdC5yb290KTtyZXR1cm4gbS5zbmFwc2hvdD10LnJvb3QsbmV3IEJkZShuZXcgSzMobSxbXSksdCl9Y2xhc3MgczB7dXJsU3ViamVjdDtwYXJhbXNTdWJqZWN0O3F1ZXJ5UGFyYW1zU3ViamVjdDtmcmFnbWVudFN1YmplY3Q7ZGF0YVN1''@;'; put 'put ''YmplY3Q7b3V0bGV0O2NvbXBvbmVudDtzbmFwc2hvdDtfZnV0dXJlU25hcHNob3Q7X3JvdXRlclN0YXRlO19wYXJhbU1hcDtfcXVlcnlQYXJhbU1hcDt0aXRsZTt1cmw7cGFyYW1zO3F1ZXJ5UGFyYW1zO2ZyYWdtZW50O2RhdGE7Y29uc3RydWN0b3IodCxlLHIsaSxhLGMsbSxDKXt0aGlzLnVy''@;'; put 'put ''bFN1YmplY3Q9dCx0aGlzLnBhcmFtc1N1YmplY3Q9ZSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1yLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWksdGhpcy5kYXRhU3ViamVjdD1hLHRoaXMub3V0bGV0PWMsdGhpcy5jb21wb25lbnQ9bSx0aGlzLl9mdXR1cmVTbmFwc2hvdD1DLHRoaXMudGl0bGU9''@;'; put 'put ''dGhpcy5kYXRhU3ViamVjdD8ucGlwZShYYShQPT5QW2xUXSkpPz9nbyh2b2lkIDApLHRoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPXIsdGhpcy5mcmFnbWVudD1pLHRoaXMuZGF0YT1hfWdldCByb3V0ZUNvbmZpZygpe3JldHVybiB0aGlzLl9mdXR1cmVTbmFwc2hv''@;'; put 'put ''dC5yb3V0ZUNvbmZpZ31nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9''@;'; put 'put ''Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PXRoaXMucGFy''@;'; put 'put ''YW1zLnBpcGUoWGEodD0+dXcodCkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dGhpcy5xdWVyeVBhcmFtcy5waXBlKFhhKHQ9PnV3KHQpKSksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlz''@;'; put 'put ''LnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIGlGKG4sdCxlPSJlbXB0eU9ubHkiKXtsZXQgcjtjb25zdHtyb3V0ZUNvbmZpZzppfT1uO3JldHVybiByPW51bGw9PT10fHwiYWx3YXlzIiE9PWUmJiIi''@;'; put 'put ''IT09aT8ucGF0aCYmKHQuY29tcG9uZW50fHx0LnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50KT97cGFyYW1zOnsuLi5uLnBhcmFtc30sZGF0YTp7Li4ubi5kYXRhfSxyZXNvbHZlOnsuLi5uLmRhdGEsLi4ubi5fcmVzb2x2ZWREYXRhPz97fX19OntwYXJhbXM6ey4uLnQucGFyYW1zLC4uLm4u''@;'; put 'put ''cGFyYW1zfSxkYXRhOnsuLi50LmRhdGEsLi4ubi5kYXRhfSxyZXNvbHZlOnsuLi5uLmRhdGEsLi4udC5kYXRhLC4uLmk/LmRhdGEsLi4ubi5fcmVzb2x2ZWREYXRhfX0saSYmV2RlKGkpJiYoci5yZXNvbHZlW2xUXT1pLnRpdGxlKSxyfWNsYXNzIGFGe3VybDtwYXJhbXM7cXVlcnlQYXJhbXM7''@;'; put 'put ''ZnJhZ21lbnQ7ZGF0YTtvdXRsZXQ7Y29tcG9uZW50O3JvdXRlQ29uZmlnO19yZXNvbHZlO19yZXNvbHZlZERhdGE7X3JvdXRlclN0YXRlO19wYXJhbU1hcDtfcXVlcnlQYXJhbU1hcDtnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bbFRdfWNvbnN0cnVjdG9yKHQsZSxyLGksYSxjLG0s''@;'; put 'put ''QyxQKXt0aGlzLnVybD10LHRoaXMucGFyYW1zPWUsdGhpcy5xdWVyeVBhcmFtcz1yLHRoaXMuZnJhZ21lbnQ9aSx0aGlzLmRhdGE9YSx0aGlzLm91dGxldD1jLHRoaXMuY29tcG9uZW50PW0sdGhpcy5yb3V0ZUNvbmZpZz1DLHRoaXMuX3Jlc29sdmU9UH1nZXQgcm9vdCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0''@;'; put 'put ''YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PXV3KHRoaXMucGFyYW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJh''@;'; put 'put ''bU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dXcodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKHI9PnIudG9TdHJpbmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5y''@;'; put 'put ''b3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBhdGg6IiJ9JylgfX1jbGFzcyB6ZGUgZXh0ZW5kcyBWZGV7dXJsO2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZSksdGhpcy51cmw9dCxEJCh0aGlzLGUpfXRvU3RyaW5nKCl7cmV0dXJuIFVkZSh0aGlzLl9yb290KX19ZnVuY3Rpb24gRCQobix0''@;'; put 'put ''KXt0LnZhbHVlLl9yb3V0ZXJTdGF0ZT1uLHQuY2hpbGRyZW4uZm9yRWFjaChlPT5EJChuLGUpKX1mdW5jdGlvbiBVZGUobil7Y29uc3QgdD1uLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke24uY2hpbGRyZW4ubWFwKFVkZSkuam9pbigiLCAiKX0gfSBgOiIiO3JldHVybmAke24udmFsdWV9JHt0''@;'; put 'put ''fWB9ZnVuY3Rpb24gSSQobil7aWYobi5zbmFwc2hvdCl7Y29uc3QgdD1uLnNuYXBzaG90LGU9bi5fZnV0dXJlU25hcHNob3Q7bi5zbmFwc2hvdD1lLGM0KHQucXVlcnlQYXJhbXMsZS5xdWVyeVBhcmFtcyl8fG4ucXVlcnlQYXJhbXNTdWJqZWN0Lm5leHQoZS5xdWVyeVBhcmFtcyksdC5mcmFn''@;'; put 'put ''bWVudCE9PWUuZnJhZ21lbnQmJm4uZnJhZ21lbnRTdWJqZWN0Lm5leHQoZS5mcmFnbWVudCksYzQodC5wYXJhbXMsZS5wYXJhbXMpfHxuLnBhcmFtc1N1YmplY3QubmV4dChlLnBhcmFtcyksZnVuY3Rpb24gaExlKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0''@;'; put 'put ''IGU9MDtlPG4ubGVuZ3RoOysrZSlpZighYzQobltlXSx0W2VdKSlyZXR1cm4hMTtyZXR1cm4hMH0odC51cmwsZS51cmwpfHxuLnVybFN1YmplY3QubmV4dChlLnVybCksYzQodC5kYXRhLGUuZGF0YSl8fG4uZGF0YVN1YmplY3QubmV4dChlLmRhdGEpfWVsc2Ugbi5zbmFwc2hvdD1uLl9mdXR1''@;'; put 'put ''cmVTbmFwc2hvdCxuLmRhdGFTdWJqZWN0Lm5leHQobi5fZnV0dXJlU25hcHNob3QuZGF0YSl9ZnVuY3Rpb24gUiQobix0KXtjb25zdCBlPWM0KG4ucGFyYW1zLHQucGFyYW1zKSYmZnVuY3Rpb24gbUxlKG4sdCl7cmV0dXJuIHo5KG4sdCkmJm4uZXZlcnkoKGUscik9PmM0KGUucGFyYW1ldGVy''@;'; put 'put ''cyx0W3JdLnBhcmFtZXRlcnMpKX0obi51cmwsdC51cmwpO3JldHVybiBlJiYhKCFuLnBhcmVudCE9IXQucGFyZW50KSYmKCFuLnBhcmVudHx8UiQobi5wYXJlbnQsdC5wYXJlbnQpKX1mdW5jdGlvbiBXZGUobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuLnRpdGxlfHxudWxsPT09bi50aXRs''@;'; put 'put ''ZX1jb25zdCB0T2U9bmV3IHdyKCIiKTtsZXQgZTU9KCgpPT57Y2xhc3MgbnthY3RpdmF0ZWQ9bnVsbDtnZXQgYWN0aXZhdGVkQ29tcG9uZW50UmVmKCl7cmV0dXJuIHRoaXMuYWN0aXZhdGVkfV9hY3RpdmF0ZWRSb3V0ZT1udWxsO25hbWU9bnM7YWN0aXZhdGVFdmVudHM9bmV3IFlyO2RlYWN0''@;'; put 'put ''aXZhdGVFdmVudHM9bmV3IFlyO2F0dGFjaEV2ZW50cz1uZXcgWXI7ZGV0YWNoRXZlbnRzPW5ldyBZcjtyb3V0ZXJPdXRsZXREYXRhPVdfKHZvaWQgMCk7cGFyZW50Q29udGV4dHM9Sm4oZ1QpO2xvY2F0aW9uPUpuKE5uKTtjaGFuZ2VEZXRlY3Rvcj1KbihGcyk7aW5wdXRCaW5kZXI9Sm4ob0Ys''@;'; put 'put ''e29wdGlvbmFsOiEwfSk7c3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1dHM9ITA7bmdPbkNoYW5nZXMoZSl7aWYoZS5uYW1lKXtjb25zdHtmaXJzdENoYW5nZTpyLHByZXZpb3VzVmFsdWU6aX09ZS5uYW1lO2lmKHIpcmV0dXJuO3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhp''@;'; put 'put ''KSYmKHRoaXMuZGVhY3RpdmF0ZSgpLHRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZChpKSksdGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX19bmdPbkRlc3Ryb3koKXt0aGlzLmlzVHJhY2tlZEluUGFyZW50Q29udGV4dHModGhpcy5uYW1lKSYmdGhpcy5w''@;'; put 'put ''YXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKHRoaXMubmFtZSksdGhpcy5pbnB1dEJpbmRlcj8udW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKHRoaXMpfWlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMoZSl7cmV0dXJuIHRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dChl''@;'; put 'put ''KT8ub3V0bGV0PT09dGhpc31uZ09uSW5pdCgpe3RoaXMuaW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl9aW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl7aWYodGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0Q3JlYXRlZCh0aGlzLm5hbWUsdGhpcyksdGhpcy5hY3RpdmF0ZWQpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGU9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7ZT8ucm91dGUmJihlLmF0dGFjaFJlZj90aGlzLmF0dGFjaChlLmF0dGFjaFJlZixlLnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aChlLnJvdXRlLGUuaW5qZWN0b3IpKX1nZXQgaXNBY3RpdmF0ZWQo''@;'; put 'put ''KXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfWdldCBjb21wb25lbnQoKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IGtyKDQwMTIsITEpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX1nZXQgYWN0aXZhdGVkUm91dGUoKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IGty''@;'; put 'put ''KDQwMTIsITEpO3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZX1nZXQgYWN0aXZhdGVkUm91dGVEYXRhKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319ZGV0YWNoKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5l''@;'; put 'put ''dyBrcig0MDEyLCExKTt0aGlzLmxvY2F0aW9uLmRldGFjaCgpO2NvbnN0IGU9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRldGFjaEV2ZW50cy5lbWl0KGUuaW5zdGFuY2UpLGV9YXR0YWNoKGUscil7dGhp''@;'; put 'put ''cy5hY3RpdmF0ZWQ9ZSx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1yLHRoaXMubG9jYXRpb24uaW5zZXJ0KGUuaG9zdFZpZXcpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYXR0YWNoRXZlbnRzLmVtaXQoZS5pbnN0YW5jZSl9''@;'; put 'put ''ZGVhY3RpdmF0ZSgpe2lmKHRoaXMuYWN0aXZhdGVkKXtjb25zdCBlPXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZWFjdGl2YXRlRXZlbnRzLmVtaXQoZSl9fWFjdGl2YXRl''@;'; put 'put ''V2l0aChlLHIpe2lmKHRoaXMuaXNBY3RpdmF0ZWQpdGhyb3cgbmV3IGtyKDQwMTMsITEpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPWU7Y29uc3QgaT10aGlzLmxvY2F0aW9uLGM9ZS5zbmFwc2hvdC5jb21wb25lbnQsbT10aGlzLnBhcmVudENvbnRleHRzLmdldE9yQ3JlYXRlQ29udGV4dCh0aGlz''@;'; put 'put ''Lm5hbWUpLmNoaWxkcmVuLEM9bmV3IG5PZShlLG0saS5pbmplY3Rvcix0aGlzLnJvdXRlck91dGxldERhdGEpO3RoaXMuYWN0aXZhdGVkPWkuY3JlYXRlQ29tcG9uZW50KGMse2luZGV4OmkubGVuZ3RoLGluamVjdG9yOkMsZW52aXJvbm1lbnRJbmplY3RvcjpyfSksdGhpcy5jaGFuZ2VEZXRl''@;'; put 'put ''Y3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJu''@;'; put 'put ''IG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGlucHV0czp7bmFtZToibmFtZSIscm91dGVyT3V0bGV0RGF0YTpbMSwicm91dGVyT3V0bGV0RGF0YSJdfSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUi''@;'; put 'put ''LGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sZmVhdHVyZXM6W1d0XX0pfXJldHVybiBufSkoKTtjbGFzcyBuT2V7cm91dGU7Y2hpbGRDb250ZXh0cztwYXJlbnQ7b3V0''@;'; put 'put ''bGV0RGF0YTtjb25zdHJ1Y3Rvcih0LGUscixpKXt0aGlzLnJvdXRlPXQsdGhpcy5jaGlsZENvbnRleHRzPWUsdGhpcy5wYXJlbnQ9cix0aGlzLm91dGxldERhdGE9aX1nZXQodCxlKXtyZXR1cm4gdD09PXMwP3RoaXMucm91dGU6dD09PWdUP3RoaXMuY2hpbGRDb250ZXh0czp0PT09dE9lP3Ro''@;'; put 'put ''aXMub3V0bGV0RGF0YTp0aGlzLnBhcmVudC5nZXQodCxlKX19Y29uc3Qgb0Y9bmV3IHdyKCIiKTtsZXQgWmRlPSgoKT0+e2NsYXNzIG57b3V0bGV0RGF0YVN1YnNjcmlwdGlvbnM9bmV3IE1hcDtiaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChlKXt0aGlzLnVuc3Vic2NyaWJl''@;'; put 'put ''RnJvbVJvdXRlRGF0YShlKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGUpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShlKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmdldChlKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShlKX1z''@;'; put 'put ''dWJzY3JpYmVUb1JvdXRlRGF0YShlKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpyfT1lLGk9VjkoW3IucXVlcnlQYXJhbXMsci5wYXJhbXMsci5kYXRhXSkucGlwZShEZCgoW2EsYyxtXSxDKT0+KG09ey4uLmEsLi4uYywuLi5tfSwwPT09Qz9nbyhtKTpQcm9taXNlLnJlc29sdmUobSkpKSkuc3Vi''@;'; put 'put ''c2NyaWJlKGE9PntpZighZS5pc0FjdGl2YXRlZHx8IWUuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxlLmFjdGl2YXRlZFJvdXRlIT09cnx8bnVsbD09PXIuY29tcG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGUpO2NvbnN0IGM9ZnVuY3Rpb24gZ0FlKG4p''@;'; put 'put ''e2NvbnN0IHQ9Sm8obik7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgZT1uZXcgR24odCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBlLnNlbGVjdG9yfSxnZXQgdHlwZSgpe3JldHVybiBlLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gZS5pbnB1dHN9LGdldCBvdXRw''@;'; put 'put ''dXRzKCl7cmV0dXJuIGUub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBlLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRhbG9uZSgpe3JldHVybiB0LnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiB0LnNpZ25hbHN9fX0oci5jb21wb25lbnQp''@;'; put 'put ''O2lmKGMpZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTptfW9mIGMuaW5wdXRzKWUuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KG0sYVttXSk7ZWxzZSB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShlKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGUsaSl9c3Rh''@;'; put 'put ''dGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9cmV0dXJuIG59KSgpLFlkZT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5l''@;'; put 'put ''dyhyfHxuKX07c3RhdGljIFx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZXhwb3J0QXM6WyJlbXB0eVJvdXRlck91dGxldCJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiZWdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbZTVdLGVuY2Fwc3VsYXRpb246Mn0pfXJldHVybiBufSkoKTtmdW5jdGlvbiBMJChuKXtjb25zdCB0PW4uY2hpbGRyZW4mJm4uY2hpbGRyZW4ubWFwKEwkKSxlPXQ/ey4uLm4sY2hpbGRyZW46dH06ey4uLm59O3JldHVybiFlLmNvbXBvbmVudCYmIWUubG9hZENvbXBvbmVu''@;'; put 'put ''dCYmKHR8fGUubG9hZENoaWxkcmVuKSYmZS5vdXRsZXQmJmUub3V0bGV0IT09bnMmJihlLmNvbXBvbmVudD1ZZGUpLGV9ZnVuY3Rpb24gbVQobix0LGUpe2lmKGUmJm4uc2hvdWxkUmV1c2VSb3V0ZSh0LnZhbHVlLGUudmFsdWUuc25hcHNob3QpKXtjb25zdCByPWUudmFsdWU7ci5fZnV0dXJl''@;'; put 'put ''U25hcHNob3Q9dC52YWx1ZTtjb25zdCBpPWZ1bmN0aW9uIGlPZShuLHQsZSl7cmV0dXJuIHQuY2hpbGRyZW4ubWFwKHI9Pntmb3IoY29uc3QgaSBvZiBlLmNoaWxkcmVuKWlmKG4uc2hvdWxkUmV1c2VSb3V0ZShyLnZhbHVlLGkudmFsdWUuc25hcHNob3QpKXJldHVybiBtVChuLHIsaSk7cmV0''@;'; put 'put ''dXJuIG1UKG4scil9KX0obix0LGUpO3JldHVybiBuZXcgSzMocixpKX17aWYobi5zaG91bGRBdHRhY2godC52YWx1ZSkpe2NvbnN0IGE9bi5yZXRyaWV2ZSh0LnZhbHVlKTtpZihudWxsIT09YSl7Y29uc3QgYz1hLnJvdXRlO3JldHVybiBjLnZhbHVlLl9mdXR1cmVTbmFwc2hvdD10LnZhbHVl''@;'; put 'put ''LGMuY2hpbGRyZW49dC5jaGlsZHJlbi5tYXAobT0+bVQobixtKSksY319Y29uc3Qgcj1mdW5jdGlvbiBhT2Uobil7cmV0dXJuIG5ldyBzMChuZXcgeGkobi51cmwpLG5ldyB4aShuLnBhcmFtcyksbmV3IHhpKG4ucXVlcnlQYXJhbXMpLG5ldyB4aShuLmZyYWdtZW50KSxuZXcgeGkobi5kYXRh''@;'; put 'put ''KSxuLm91dGxldCxuLmNvbXBvbmVudCxuKX0odC52YWx1ZSksaT10LmNoaWxkcmVuLm1hcChhPT5tVChuLGEpKTtyZXR1cm4gbmV3IEszKHIsaSl9fWNsYXNzIE8ke3JlZGlyZWN0VG87bmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucztjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVkaXJlY3RUbz10''@;'; put 'put ''LHRoaXMubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1lfX1jb25zdCBHZGU9Im5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiBzRihuLHQpe2NvbnN0e3JlZGlyZWN0VG86ZSxuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zOnJ9PVU5KHQpP3tyZWRpcmVjdFRvOnQsbmF2aWdh''@;'; put 'put ''dGlvbkJlaGF2aW9yT3B0aW9uczp2b2lkIDB9OnQsaT0kZGUoITEsdTIuUmVkaXJlY3QpO3JldHVybiBpLnVybD1lLGkubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1yLGl9ZnVuY3Rpb24gJGRlKG4sdCl7Y29uc3QgZT1uZXcgRXJyb3IoYE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogJHtu''@;'; put 'put ''fHwiIn1gKTtyZXR1cm4gZVtHZGVdPSEwLGUuY2FuY2VsbGF0aW9uQ29kZT10LGV9ZnVuY3Rpb24gS2RlKG4pe3JldHVybiEhbiYmbltHZGVdfWNsYXNzIGxPZXtyb3V0ZVJldXNlU3RyYXRlZ3k7ZnV0dXJlU3RhdGU7Y3VyclN0YXRlO2ZvcndhcmRFdmVudDtpbnB1dEJpbmRpbmdFbmFibGVk''@;'; put 'put ''O2NvbnN0cnVjdG9yKHQsZSxyLGksYSl7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9dCx0aGlzLmZ1dHVyZVN0YXRlPWUsdGhpcy5jdXJyU3RhdGU9cix0aGlzLmZvcndhcmRFdmVudD1pLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZD1hfWFjdGl2YXRlKHQpe2NvbnN0IGU9dGhpcy5mdXR1cmVT''@;'; put 'put ''dGF0ZS5fcm9vdCxyPXRoaXMuY3VyclN0YXRlP3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxyLHQpLEkkKHRoaXMuZnV0dXJlU3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGUscix0KX1kZWFjdGl2YXRlQ2hpbGRSb3V0''@;'; put 'put ''ZXModCxlLHIpe2NvbnN0IGk9aHcoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGE9Pntjb25zdCBjPWEudmFsdWUub3V0bGV0O3RoaXMuZGVhY3RpdmF0ZVJvdXRlcyhhLGlbY10sciksZGVsZXRlIGlbY119KSxPYmplY3QudmFsdWVzKGkpLmZvckVhY2goYT0+e3RoaXMuZGVhY3RpdmF0ZVJvdXRl''@;'; put 'put ''QW5kSXRzQ2hpbGRyZW4oYSxyKX0pfWRlYWN0aXZhdGVSb3V0ZXModCxlLHIpe2NvbnN0IGk9dC52YWx1ZSxhPWU/ZS52YWx1ZTpudWxsO2lmKGk9PT1hKWlmKGkuY29tcG9uZW50KXtjb25zdCBjPXIuZ2V0Q29udGV4dChpLm91dGxldCk7YyYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMo''@;'; put 'put ''dCxlLGMuY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLHIpO2Vsc2UgYSYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLHIpfWRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsZSl7dC52YWx1ZS5jb21wb25lbnQmJnRoaXMucm91''@;'; put 'put ''dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaCh0LnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKHQsZSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQodCxlKX1kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZSh0LGUpe2NvbnN0IHI9ZS5nZXRD''@;'; put 'put ''b250ZXh0KHQudmFsdWUub3V0bGV0KSxpPXImJnQudmFsdWUuY29tcG9uZW50P3IuY2hpbGRyZW46ZSxhPWh3KHQpO2Zvcihjb25zdCBjIG9mIE9iamVjdC52YWx1ZXMoYSkpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihjLGkpO2lmKHImJnIub3V0bGV0KXtjb25zdCBjPXIu''@;'; put 'put ''b3V0bGV0LmRldGFjaCgpLG09ci5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUodC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOmMscm91dGU6dCxjb250ZXh0czptfSl9fWRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldCh0LGUp''@;'; put 'put ''e2NvbnN0IHI9ZS5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KSxpPXImJnQudmFsdWUuY29tcG9uZW50P3IuY2hpbGRyZW46ZSxhPWh3KHQpO2Zvcihjb25zdCBjIG9mIE9iamVjdC52YWx1ZXMoYSkpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihjLGkpO3ImJihyLm91dGxl''@;'; put 'put ''dCYmKHIub3V0bGV0LmRlYWN0aXZhdGUoKSxyLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSksci5hdHRhY2hSZWY9bnVsbCxyLnJvdXRlPW51bGwpfWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLHIpe2NvbnN0IGk9aHcoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKGE9Pnt0aGlzLmFjdGl2''@;'; put 'put ''YXRlUm91dGVzKGEsaVthLnZhbHVlLm91dGxldF0sciksdGhpcy5mb3J3YXJkRXZlbnQobmV3IEdMZShhLnZhbHVlLnNuYXBzaG90KSl9KSx0LmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IFpMZSh0LnZhbHVlLnNuYXBzaG90KSl9YWN0aXZhdGVSb3V0ZXModCxlLHIp''@;'; put 'put ''e2NvbnN0IGk9dC52YWx1ZSxhPWU/ZS52YWx1ZTpudWxsO2lmKEkkKGkpLGk9PT1hKWlmKGkuY29tcG9uZW50KXtjb25zdCBjPXIuZ2V0T3JDcmVhdGVDb250ZXh0KGkub3V0bGV0KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLGMuY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNo''@;'; put 'put ''aWxkUm91dGVzKHQsZSxyKTtlbHNlIGlmKGkuY29tcG9uZW50KXtjb25zdCBjPXIuZ2V0T3JDcmVhdGVDb250ZXh0KGkub3V0bGV0KTtpZih0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goaS5zbmFwc2hvdCkpe2NvbnN0IG09dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0''@;'; put 'put ''cmlldmUoaS5zbmFwc2hvdCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoaS5zbmFwc2hvdCxudWxsKSxjLmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChtLmNvbnRleHRzKSxjLmF0dGFjaFJlZj1tLmNvbXBvbmVudFJlZixjLnJvdXRlPW0ucm91dGUudmFsdWUsYy5vdXRsZXQm''@;'; put 'put ''JmMub3V0bGV0LmF0dGFjaChtLmNvbXBvbmVudFJlZixtLnJvdXRlLnZhbHVlKSxJJChtLnJvdXRlLnZhbHVlKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLGMuY2hpbGRyZW4pfWVsc2UgYy5hdHRhY2hSZWY9bnVsbCxjLnJvdXRlPWksYy5vdXRsZXQmJmMub3V0bGV0LmFjdGl2''@;'; put 'put ''YXRlV2l0aChpLGMuaW5qZWN0b3IpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LG51bGwsYy5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLHIpfX1jbGFzcyBYZGV7cGF0aDtyb3V0ZTtjb25zdHJ1Y3Rvcih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRl''@;'; put 'put ''PXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyBsRntjb21wb25lbnQ7cm91dGU7Y29uc3RydWN0b3IodCxlKXt0aGlzLmNvbXBvbmVudD10LHRoaXMucm91dGU9ZX19ZnVuY3Rpb24gY09lKG4sdCxlKXtjb25zdCByPW4uX3Jvb3Q7cmV0dXJuIHZUKHIsdD90Ll9yb290Om51''@;'; put 'put ''bGwsZSxbci52YWx1ZV0pfWZ1bmN0aW9uIGZ3KG4sdCl7Y29uc3QgZT1TeW1ib2woKSxyPXQuZ2V0KG4sZSk7cmV0dXJuIHI9PT1lPyJmdW5jdGlvbiIhPXR5cGVvZiBufHxmdW5jdGlvbiBwbyhuKXtyZXR1cm4gbnVsbCE9PURpKG4pfShuKT90LmdldChuKTpuOnJ9ZnVuY3Rpb24gdlQobix0''@;'; put 'put ''LGUscixpPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgYT1odyh0KTtyZXR1cm4gbi5jaGlsZHJlbi5mb3JFYWNoKGM9PnsoZnVuY3Rpb24gZE9lKG4sdCxlLHIsaT17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpb''@;'; put 'put ''XX0pe2NvbnN0IGE9bi52YWx1ZSxjPXQ/dC52YWx1ZTpudWxsLG09ZT9lLmdldENvbnRleHQobi52YWx1ZS5vdXRsZXQpOm51bGw7aWYoYyYmYS5yb3V0ZUNvbmZpZz09PWMucm91dGVDb25maWcpe2NvbnN0IEM9ZnVuY3Rpb24gaE9lKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSly''@;'; put 'put ''ZXR1cm4gZShuLHQpO3N3aXRjaChlKXtjYXNlInBhdGhQYXJhbXNDaGFuZ2UiOnJldHVybiF6OShuLnVybCx0LnVybCk7Y2FzZSJwYXRoUGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIXo5KG4udXJsLHQudXJsKXx8IWM0KG4ucXVlcnlQYXJhbXMsdC5xdWVyeVBhcmFtcyk7Y2Fz''@;'; put 'put ''ZSJhbHdheXMiOnJldHVybiEwO2Nhc2UicGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIVIkKG4sdCl8fCFjNChuLnF1ZXJ5UGFyYW1zLHQucXVlcnlQYXJhbXMpO2RlZmF1bHQ6cmV0dXJuIVIkKG4sdCl9fShjLGEsYS5yb3V0ZUNvbmZpZy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMp''@;'; put 'put ''O0M/aS5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBYZGUocikpOihhLmRhdGE9Yy5kYXRhLGEuX3Jlc29sdmVkRGF0YT1jLl9yZXNvbHZlZERhdGEpLHZUKG4sdCxhLmNvbXBvbmVudD9tP20uY2hpbGRyZW46bnVsbDplLHIsaSksQyYmbSYmbS5vdXRsZXQmJm0ub3V0bGV0LmlzQWN0aXZh''@;'; put 'put ''dGVkJiZpLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgbEYobS5vdXRsZXQuY29tcG9uZW50LGMpKX1lbHNlIGMmJnlUKHQsbSxpKSxpLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IFhkZShyKSksdlQobixudWxsLGEuY29tcG9uZW50P20/bS5jaGlsZHJlbjpudWxsOmUscixpKX0p''@;'; put 'put ''KGMsYVtjLnZhbHVlLm91dGxldF0sZSxyLmNvbmNhdChbYy52YWx1ZV0pLGkpLGRlbGV0ZSBhW2MudmFsdWUub3V0bGV0XX0pLE9iamVjdC5lbnRyaWVzKGEpLmZvckVhY2goKFtjLG1dKT0+eVQobSxlLmdldENvbnRleHQoYyksaSkpLGl9ZnVuY3Rpb24geVQobix0LGUpe2NvbnN0IHI9aHco''@;'; put 'put ''biksaT1uLnZhbHVlO09iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFthLGNdKT0+e3lUKGMsaS5jb21wb25lbnQ/dD90LmNoaWxkcmVuLmdldENvbnRleHQoYSk6bnVsbDp0LGUpfSksZS5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGxGKGkuY29tcG9uZW50JiZ0JiZ0Lm91dGxldCYm''@;'; put 'put ''dC5vdXRsZXQuaXNBY3RpdmF0ZWQ/dC5vdXRsZXQuY29tcG9uZW50Om51bGwsaSkpfWZ1bmN0aW9uIF9UKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIHFkZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFpQfHwiRW1wdHlFcnJvciI9PT1uPy5uYW1lfWNvbnN0IGNGPVN5''@;'; put 'put ''bWJvbCgiSU5JVElBTF9WQUxVRSIpO2Z1bmN0aW9uIHB3KCl7cmV0dXJuIERkKG49PlY5KG4ubWFwKHQ9PnQucGlwZShHMygxKSxrZihjRikpKSkucGlwZShYYSh0PT57Zm9yKGNvbnN0IGUgb2YgdClpZighMCE9PWUpe2lmKGU9PT1jRilyZXR1cm4gY0Y7aWYoITE9PT1lfHxfT2UoZSkpcmV0''@;'; put 'put ''dXJuIGV9cmV0dXJuITB9KSxyYyh0PT50IT09Y0YpLEczKDEpKSl9ZnVuY3Rpb24gX09lKG4pe3JldHVybiBVOShuKXx8biBpbnN0YW5jZW9mIE8kfWZ1bmN0aW9uIEpkZShuKXtyZXR1cm4gZnVuY3Rpb24gcXIoLi4ubil7cmV0dXJuIHVhKG4pfShFMCh0PT57aWYoImJvb2xlYW4iIT10eXBl''@;'; put 'put ''b2YgdCl0aHJvdyBzRigwLHQpfSksWGEodD0+ITA9PT10KSl9Y2xhc3MgUCR7c2VnbWVudEdyb3VwO2NvbnN0cnVjdG9yKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9fWNsYXNzIEYkIGV4dGVuZHMgRXJyb3J7dXJsVHJlZTtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudXJsVHJl''@;'; put 'put ''ZT10fX1mdW5jdGlvbiBndyhuKXtyZXR1cm4gYVQobmV3IFAkKG4pKX1jbGFzcyBST2V7dXJsU2VyaWFsaXplcjt1cmxUcmVlO2NvbnN0cnVjdG9yKHQsZSl7dGhpcy51cmxTZXJpYWxpemVyPXQsdGhpcy51cmxUcmVlPWV9bGluZXJhbGl6ZVNlZ21lbnRzKHQsZSl7bGV0IHI9W10saT1lLnJv''@;'; put 'put ''b3Q7Zm9yKDs7KXtpZihyPXIuY29uY2F0KGkuc2VnbWVudHMpLDA9PT1pLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuIGdvKHIpO2lmKGkubnVtYmVyT2ZDaGlsZHJlbj4xfHwhaS5jaGlsZHJlbltuc10pcmV0dXJuIGFUKG5ldyBrcig0ZTMsITEpKTtpPWkuY2hpbGRyZW5bbnNdfX1hcHBseVJl''@;'; put 'put ''ZGlyZWN0Q29tbWFuZHModCxlLHIsaSxhKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe2NvbnN0IG09ZSx7cXVlcnlQYXJhbXM6QyxmcmFnbWVudDpQLHJvdXRlQ29uZmlnOlksdXJsOkosb3V0bGV0OmNlLHBhcmFtczpmZSxkYXRhOkFlLHRpdGxlOkhlfT1pLFhlPVAxKGEsKCk9Pm0oe3BhcmFt''@;'; put 'put ''czpmZSxkYXRhOkFlLHF1ZXJ5UGFyYW1zOkMsZnJhZ21lbnQ6UCxyb3V0ZUNvbmZpZzpZLHVybDpKLG91dGxldDpjZSx0aXRsZTpIZX0pKTtpZihYZSBpbnN0YW5jZW9mIGo5KXRocm93IG5ldyBGJChYZSk7ZT1YZX1jb25zdCBjPXRoaXMuYXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUoZSx0''@;'; put 'put ''aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoZSksdCxyKTtpZigiLyI9PT1lWzBdKXRocm93IG5ldyBGJChjKTtyZXR1cm4gY31hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZSh0LGUscixpKXtjb25zdCBhPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKHQsZS5yb290LHIsaSk7cmV0dXJuIG5ldyBq''@;'; put 'put ''OShhLHRoaXMuY3JlYXRlUXVlcnlQYXJhbXMoZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQpfWNyZWF0ZVF1ZXJ5UGFyYW1zKHQsZSl7Y29uc3Qgcj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2ksYV0pPT57aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBhJiYiOiI9PT1hWzBdKXtjb25zdCBtPWEuc3Vic3RyaW5nKDEpO3JbaV09ZVttXX1lbHNlIHJbaV09YX0pLHJ9Y3JlYXRlU2VnbWVudEdyb3VwKHQsZSxyLGkpe2NvbnN0IGE9dGhpcy5jcmVhdGVTZWdtZW50cyh0LGUuc2VnbWVudHMscixpKTtsZXQgYz17fTtyZXR1cm4g''@;'; put 'put ''T2JqZWN0LmVudHJpZXMoZS5jaGlsZHJlbikuZm9yRWFjaCgoW20sQ10pPT57Y1ttXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cCh0LEMscixpKX0pLG5ldyBYbChhLGMpfWNyZWF0ZVNlZ21lbnRzKHQsZSxyLGkpe3JldHVybiBlLm1hcChhPT4iOiI9PT1hLnBhdGhbMF0/dGhpcy5maW5kUG9z''@;'; put 'put ''UGFyYW0odCxhLGkpOnRoaXMuZmluZE9yUmV0dXJuKGEscikpfWZpbmRQb3NQYXJhbSh0LGUscil7Y29uc3QgaT1yW2UucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFpKXRocm93IG5ldyBrcig0MDAxLCExKTtyZXR1cm4gaX1maW5kT3JSZXR1cm4odCxlKXtsZXQgcj0wO2Zvcihjb25zdCBpIG9m''@;'; put 'put ''IGUpe2lmKGkucGF0aD09PXQucGF0aClyZXR1cm4gZS5zcGxpY2UociksaTtyKyt9cmV0dXJuIHR9fWNvbnN0IEgkPXttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6W10scGFyYW1ldGVyczp7fSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX07ZnVu''@;'; put 'put ''Y3Rpb24gTE9lKG4sdCxlLHIsaSl7Y29uc3QgYT1RZGUobix0LGUpO3JldHVybiBhLm1hdGNoZWQ/KHI9ZnVuY3Rpb24gJExlKG4sdCl7cmV0dXJuIG4ucHJvdmlkZXJzJiYhbi5faW5qZWN0b3ImJihuLl9pbmplY3Rvcj1XTyhuLnByb3ZpZGVycyx0LGBSb3V0ZTogJHtuLnBhdGh9YCkpLG4u''@;'; put 'put ''X2luamVjdG9yPz90fSh0LHIpLGZ1bmN0aW9uIGtPZShuLHQsZSxyKXtjb25zdCBpPXQuY2FuTWF0Y2g7cmV0dXJuIGkmJjAhPT1pLmxlbmd0aD9nbyhpLm1hcChjPT57Y29uc3QgbT1mdyhjLG4pO3JldHVybiB3NihmdW5jdGlvbiB5T2Uobil7cmV0dXJuIG4mJl9UKG4uY2FuTWF0Y2gpfSht''@;'; put 'put ''KT9tLmNhbk1hdGNoKHQsZSk6UDEobiwoKT0+bSh0LGUpKSl9KSkucGlwZShwdygpLEpkZSgpKTpnbyghMCl9KHIsdCxlKS5waXBlKFhhKGM9PiEwPT09Yz9hOnsuLi5IJH0pKSk6Z28oYSl9ZnVuY3Rpb24gUWRlKG4sdCxlKXtpZigiKioiPT09dC5wYXRoKXJldHVybiBmdW5jdGlvbiBPT2Uo''@;'; put 'put ''bil7cmV0dXJue21hdGNoZWQ6ITAscGFyYW1ldGVyczpuLmxlbmd0aD4wP19kZShuKS5wYXJhbWV0ZXJzOnt9LGNvbnN1bWVkU2VnbWVudHM6bixyZW1haW5pbmdTZWdtZW50czpbXSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX19KGUpO2lmKCIiPT09dC5wYXRoKXJldHVybiJmdWxsIj09''@;'; put 'put ''PXQucGF0aE1hdGNoJiYobi5oYXNDaGlsZHJlbigpfHxlLmxlbmd0aD4wKT97Li4uSCR9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6ZSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTtjb25zdCBpPSh0Lm1hdGNoZXJ8''@;'; put 'put ''fGRMZSkoZSxuLHQpO2lmKCFpKXJldHVybnsuLi5IJH07Y29uc3QgYT17fTtPYmplY3QuZW50cmllcyhpLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFttLENdKT0+e2FbbV09Qy5wYXRofSk7Y29uc3QgYz1pLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5hLC4uLmkuY29uc3VtZWRbaS5jb25zdW1l''@;'; put 'put ''ZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306YTtyZXR1cm57bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmkuY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6ZS5zbGljZShpLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczpjLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOmkucG9zUGFyYW1z''@;'; put 'put ''Pz97fX19ZnVuY3Rpb24gZWhlKG4sdCxlLHIpe3JldHVybiBlLmxlbmd0aD4wJiZmdW5jdGlvbiBIT2Uobix0LGUpe3JldHVybiBlLnNvbWUocj0+dUYobix0LHIpJiYkMyhyKSE9PW5zKX0obixlLHIpP3tzZWdtZW50R3JvdXA6bmV3IFhsKHQsRk9lKHIsbmV3IFhsKGUsbi5jaGlsZHJlbikp''@;'; put 'put ''KSxzbGljZWRTZWdtZW50czpbXX06MD09PWUubGVuZ3RoJiZmdW5jdGlvbiBOT2Uobix0LGUpe3JldHVybiBlLnNvbWUocj0+dUYobix0LHIpKX0obixlLHIpP3tzZWdtZW50R3JvdXA6bmV3IFhsKG4uc2VnbWVudHMsUE9lKG4sZSxyLG4uY2hpbGRyZW4pKSxzbGljZWRTZWdtZW50czplfTp7''@;'; put 'put ''c2VnbWVudEdyb3VwOm5ldyBYbChuLnNlZ21lbnRzLG4uY2hpbGRyZW4pLHNsaWNlZFNlZ21lbnRzOmV9fWZ1bmN0aW9uIFBPZShuLHQsZSxyKXtjb25zdCBpPXt9O2Zvcihjb25zdCBhIG9mIGUpaWYodUYobix0LGEpJiYhclskMyhhKV0pe2NvbnN0IGM9bmV3IFhsKFtdLHt9KTtpWyQzKGEp''@;'; put 'put ''XT1jfXJldHVybnsuLi5yLC4uLml9fWZ1bmN0aW9uIEZPZShuLHQpe2NvbnN0IGU9e307ZVtuc109dDtmb3IoY29uc3QgciBvZiBuKWlmKCIiPT09ci5wYXRoJiYkMyhyKSE9PW5zKXtjb25zdCBpPW5ldyBYbChbXSx7fSk7ZVskMyhyKV09aX1yZXR1cm4gZX1mdW5jdGlvbiB1RihuLHQsZSl7''@;'; put 'put ''cmV0dXJuKCEobi5oYXNDaGlsZHJlbigpfHx0Lmxlbmd0aD4wKXx8ImZ1bGwiIT09ZS5wYXRoTWF0Y2gpJiYiIj09PWUucGF0aH1jbGFzcyBCT2V7fWNsYXNzIFVPZXtpbmplY3Rvcjtjb25maWdMb2FkZXI7cm9vdENvbXBvbmVudFR5cGU7Y29uZmlnO3VybFRyZWU7cGFyYW1zSW5oZXJpdGFu''@;'; put 'put ''Y2VTdHJhdGVneTt1cmxTZXJpYWxpemVyO2FwcGx5UmVkaXJlY3RzO2Fic29sdXRlUmVkaXJlY3RDb3VudD0wO2FsbG93UmVkaXJlY3RzPSEwO2NvbnN0cnVjdG9yKHQsZSxyLGksYSxjLG0pe3RoaXMuaW5qZWN0b3I9dCx0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMucm9vdENvbXBvbmVudFR5''@;'; put 'put ''cGU9cix0aGlzLmNvbmZpZz1pLHRoaXMudXJsVHJlZT1hLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT1jLHRoaXMudXJsU2VyaWFsaXplcj1tLHRoaXMuYXBwbHlSZWRpcmVjdHM9bmV3IFJPZSh0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy51cmxUcmVlKX1ub01hdGNoRXJyb3IodCl7''@;'; put 'put ''cmV0dXJuIG5ldyBrcig0MDAyLGAnJHt0LnNlZ21lbnRHcm91cH0nYCl9cmVjb2duaXplKCl7Y29uc3QgdD1laGUodGhpcy51cmxUcmVlLnJvb3QsW10sW10sdGhpcy5jb25maWcpLnNlZ21lbnRHcm91cDtyZXR1cm4gdGhpcy5tYXRjaCh0KS5waXBlKFhhKCh7Y2hpbGRyZW46ZSxyb290U25h''@;'; put 'put ''cHNob3Q6cn0pPT57Y29uc3QgaT1uZXcgSzMocixlKSxhPW5ldyB6ZGUoIiIsaSksYz1mdW5jdGlvbiBJTGUobix0LGU9bnVsbCxyPW51bGwpe3JldHVybiBJZGUoRGRlKG4pLHQsZSxyKX0ocixbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1''@;'; put 'put ''cm4gYy5xdWVyeVBhcmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsYS51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShjKSx7c3RhdGU6YSx0cmVlOmN9fSkpfW1hdGNoKHQpe2NvbnN0IGU9bmV3IGFGKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoey4uLnRo''@;'; put 'put ''aXMudXJsVHJlZS5xdWVyeVBhcmFtc30pLHRoaXMudXJsVHJlZS5mcmFnbWVudCxPYmplY3QuZnJlZXplKHt9KSxucyx0aGlzLnJvb3RDb21wb25lbnRUeXBlLG51bGwse30pO3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAodGhpcy5pbmplY3Rvcix0aGlzLmNvbmZpZyx0LG5zLGUp''@;'; put 'put ''LnBpcGUoWGEocj0+KHtjaGlsZHJlbjpyLHJvb3RTbmFwc2hvdDplfSkpLEI5KHI9PntpZihyIGluc3RhbmNlb2YgRiQpcmV0dXJuIHRoaXMudXJsVHJlZT1yLnVybFRyZWUsdGhpcy5tYXRjaChyLnVybFRyZWUucm9vdCk7dGhyb3cgciBpbnN0YW5jZW9mIFAkP3RoaXMubm9NYXRjaEVycm9y''@;'; put 'put ''KHIpOnJ9KSl9cHJvY2Vzc1NlZ21lbnRHcm91cCh0LGUscixpLGEpe3JldHVybiAwPT09ci5zZWdtZW50cy5sZW5ndGgmJnIuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbih0LGUscixhKTp0aGlzLnByb2Nlc3NTZWdtZW50KHQsZSxyLHIuc2VnbWVudHMsaSwhMCxhKS5waXBl''@;'; put 'put ''KFhhKGM9PmMgaW5zdGFuY2VvZiBLMz9bY106W10pKX1wcm9jZXNzQ2hpbGRyZW4odCxlLHIsaSl7Y29uc3QgYT1bXTtmb3IoY29uc3QgYyBvZiBPYmplY3Qua2V5cyhyLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1jP2EudW5zaGlmdChjKTphLnB1c2goYyk7cmV0dXJuIG8wKGEpLnBpcGUoY3co''@;'; put 'put ''Yz0+e2NvbnN0IG09ci5jaGlsZHJlbltjXSxDPWZ1bmN0aW9uIEpMZShuLHQpe2NvbnN0IGU9bi5maWx0ZXIocj0+JDMocik9PT10KTtyZXR1cm4gZS5wdXNoKC4uLm4uZmlsdGVyKHI9PiQzKHIpIT09dCkpLGV9KGUsYyk7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0LEMsbSxj''@;'; put 'put ''LGkpfSksZnVuY3Rpb24gR1JlKG4sdCl7cmV0dXJuIFhpKGZ1bmN0aW9uIFlSZShuLHQsZSxyLGkpe3JldHVybihhLGMpPT57bGV0IG09ZSxDPXQsUD0wO2Euc3Vic2NyaWJlKElyKGMsWT0+e2NvbnN0IEo9UCsrO0M9bT9uKEMsWSxKKToobT0hMCxZKSxyJiZjLm5leHQoQyl9LGkmJigoKT0+''@;'; put 'put ''e20mJmMubmV4dChDKSxjLmNvbXBsZXRlKCl9KSkpfX0obix0LGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGMsbSk9PihjLnB1c2goLi4ubSksYykpLFlQKG51bGwpLGZ1bmN0aW9uICRSZShuLHQpe2NvbnN0IGU9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gcj0+ci5waXBlKG4/cmMo''@;'; put 'put ''KGksYSk9Pm4oaSxhLHIpKTpWaSxfJCgxKSxlP1lQKHQpOmhkZSgoKT0+bmV3IFpQKSl9KCksdzEoYz0+e2lmKG51bGw9PT1jKXJldHVybiBndyhyKTtjb25zdCBtPXRoZShjKTtyZXR1cm4gZnVuY3Rpb24gV09lKG4pe24uc29ydCgodCxlKT0+dC52YWx1ZS5vdXRsZXQ9PT1ucz8tMTplLnZh''@;'; put 'put ''bHVlLm91dGxldD09PW5zPzE6dC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShlLnZhbHVlLm91dGxldCkpfShtKSxnbyhtKX0pKX1wcm9jZXNzU2VnbWVudCh0LGUscixpLGEsYyxtKXtyZXR1cm4gbzAoZSkucGlwZShjdyhDPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKEMu''@;'; put 'put ''X2luamVjdG9yPz90LGUsQyxyLGksYSxjLG0pLnBpcGUoQjkoUD0+e2lmKFAgaW5zdGFuY2VvZiBQJClyZXR1cm4gZ28obnVsbCk7dGhyb3cgUH0pKSksXzYoQz0+ISFDKSxCOShDPT57aWYocWRlKEMpKXJldHVybiBmdW5jdGlvbiBWT2Uobix0LGUpe3JldHVybiAwPT09dC5sZW5ndGgmJiFu''@;'; put 'put ''LmNoaWxkcmVuW2VdfShyLGksYSk/Z28obmV3IEJPZSk6Z3cocik7dGhyb3cgQ30pKX1wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUscixpLGEsYyxtLEMpe3JldHVybiAkMyhyKT09PWN8fGMhPT1ucyYmdUYoaSxhLHIpP3ZvaWQgMD09PXIucmVkaXJlY3RUbz90aGlzLm1hdGNoU2Vn''@;'; put 'put ''bWVudEFnYWluc3RSb3V0ZSh0LGkscixhLGMsQyk6dGhpcy5hbGxvd1JlZGlyZWN0cyYmbT90aGlzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQsaSxlLHIsYSxjLEMpOmd3KGkpOmd3KGkpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KHQs''@;'; put 'put ''ZSxyLGksYSxjLG0pe2NvbnN0e21hdGNoZWQ6QyxwYXJhbWV0ZXJzOlAsY29uc3VtZWRTZWdtZW50czpZLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOkoscmVtYWluaW5nU2VnbWVudHM6Y2V9PVFkZShlLGksYSk7aWYoIUMpcmV0dXJuIGd3KGUpOyJzdHJpbmciPT10eXBlb2YgaS5yZWRpcmVj''@;'; put 'put ''dFRvJiYiLyI9PT1pLnJlZGlyZWN0VG9bMF0mJih0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudCsrLHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50PjMxJiYodGhpcy5hbGxvd1JlZGlyZWN0cz0hMSkpO2NvbnN0IGZlPW5ldyBhRihhLFAsT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVl''@;'; put 'put ''LnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LG5oZShpKSwkMyhpKSxpLmNvbXBvbmVudD8/aS5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGkscmhlKGkpKSxBZT1pRihmZSxtLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7ZmUucGFyYW1zPU9iamVjdC5mcmVlemUo''@;'; put 'put ''QWUucGFyYW1zKSxmZS5kYXRhPU9iamVjdC5mcmVlemUoQWUuZGF0YSk7Y29uc3QgSGU9dGhpcy5hcHBseVJlZGlyZWN0cy5hcHBseVJlZGlyZWN0Q29tbWFuZHMoWSxpLnJlZGlyZWN0VG8sSixmZSx0KTtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0cy5saW5lcmFsaXplU2VnbWVudHMoaSxI''@;'; put 'put ''ZSkucGlwZSh3MShYZT0+dGhpcy5wcm9jZXNzU2VnbWVudCh0LHIsZSxYZS5jb25jYXQoY2UpLGMsITEsbSkpKX1tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUodCxlLHIsaSxhLGMpe2NvbnN0IG09TE9lKGUscixpLHQpO3JldHVybiIqKiI9PT1yLnBhdGgmJihlLmNoaWxkcmVuPXt9KSxtLnBp''@;'; put 'put ''cGUoRGQoQz0+Qy5tYXRjaGVkP3RoaXMuZ2V0Q2hpbGRDb25maWcodD1yLl9pbmplY3Rvcj8/dCxyLGkpLnBpcGUoRGQoKHtyb3V0ZXM6UH0pPT57Y29uc3QgWT1yLl9sb2FkZWRJbmplY3Rvcj8/dCx7cGFyYW1ldGVyczpKLGNvbnN1bWVkU2VnbWVudHM6Y2UscmVtYWluaW5nU2VnbWVudHM6''@;'; put 'put ''ZmV9PUMsQWU9bmV3IGFGKGNlLEosT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LG5oZShyKSwkMyhyKSxyLmNvbXBvbmVudD8/ci5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLHIscmhlKHIpKSxIZT1pRihBZSxjLHRoaXMu''@;'; put 'put ''cGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7QWUucGFyYW1zPU9iamVjdC5mcmVlemUoSGUucGFyYW1zKSxBZS5kYXRhPU9iamVjdC5mcmVlemUoSGUuZGF0YSk7Y29uc3R7c2VnbWVudEdyb3VwOlhlLHNsaWNlZFNlZ21lbnRzOnJ0fT1laGUoZSxjZSxmZSxQKTtpZigwPT09cnQubGVuZ3Ro''@;'; put 'put ''JiZYZS5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihZLFAsWGUsQWUpLnBpcGUoWGEoanQ9Pm5ldyBLMyhBZSxqdCkpKTtpZigwPT09UC5sZW5ndGgmJjA9PT1ydC5sZW5ndGgpcmV0dXJuIGdvKG5ldyBLMyhBZSxbXSkpO2NvbnN0IGR0PSQzKHIpPT09YTtyZXR1''@;'; put 'put ''cm4gdGhpcy5wcm9jZXNzU2VnbWVudChZLFAsWGUscnQsZHQ/bnM6YSwhMCxBZSkucGlwZShYYShqdD0+bmV3IEszKEFlLGp0IGluc3RhbmNlb2YgSzM/W2p0XTpbXSkpKX0pKTpndyhlKSkpfWdldENoaWxkQ29uZmlnKHQsZSxyKXtyZXR1cm4gZS5jaGlsZHJlbj9nbyh7cm91dGVzOmUuY2hp''@;'; put 'put ''bGRyZW4saW5qZWN0b3I6dH0pOmUubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWUuX2xvYWRlZFJvdXRlcz9nbyh7cm91dGVzOmUuX2xvYWRlZFJvdXRlcyxpbmplY3RvcjplLl9sb2FkZWRJbmplY3Rvcn0pOmZ1bmN0aW9uIEFPZShuLHQsZSxyKXtjb25zdCBpPXQuY2FuTG9hZDtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwPT09aXx8MD09PWkubGVuZ3RoP2dvKCEwKTpnbyhpLm1hcChjPT57Y29uc3QgbT1mdyhjLG4pO3JldHVybiB3NihmdW5jdGlvbiBwT2Uobil7cmV0dXJuIG4mJl9UKG4uY2FuTG9hZCl9KG0pP20uY2FuTG9hZCh0LGUpOlAxKG4sKCk9Pm0odCxlKSkpfSkpLnBpcGUocHcoKSxKZGUoKSl9''@;'; put 'put ''KHQsZSxyKS5waXBlKHcxKGk9Pmk/dGhpcy5jb25maWdMb2FkZXIubG9hZENoaWxkcmVuKHQsZSkucGlwZShFMChhPT57ZS5fbG9hZGVkUm91dGVzPWEucm91dGVzLGUuX2xvYWRlZEluamVjdG9yPWEuaW5qZWN0b3J9KSk6ZnVuY3Rpb24gSU9lKCl7cmV0dXJuIGFUKCRkZSghMSx1Mi5HdWFy''@;'; put 'put ''ZFJlamVjdGVkKSl9KCkpKTpnbyh7cm91dGVzOltdLGluamVjdG9yOnR9KX19ZnVuY3Rpb24gWk9lKG4pe2NvbnN0IHQ9bi52YWx1ZS5yb3V0ZUNvbmZpZztyZXR1cm4gdCYmIiI9PT10LnBhdGh9ZnVuY3Rpb24gdGhlKG4pe2NvbnN0IHQ9W10sZT1uZXcgU2V0O2Zvcihjb25zdCByIG9mIG4p''@;'; put 'put ''e2lmKCFaT2Uocikpe3QucHVzaChyKTtjb250aW51ZX1jb25zdCBpPXQuZmluZChhPT5yLnZhbHVlLnJvdXRlQ29uZmlnPT09YS52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aT8oaS5jaGlsZHJlbi5wdXNoKC4uLnIuY2hpbGRyZW4pLGUuYWRkKGkpKTp0LnB1c2gocil9Zm9yKGNvbnN0''@;'; put 'put ''IHIgb2YgZSl7Y29uc3QgaT10aGUoci5jaGlsZHJlbik7dC5wdXNoKG5ldyBLMyhyLnZhbHVlLGkpKX1yZXR1cm4gdC5maWx0ZXIocj0+IWUuaGFzKHIpKX1mdW5jdGlvbiBuaGUobil7cmV0dXJuIG4uZGF0YXx8e319ZnVuY3Rpb24gcmhlKG4pe3JldHVybiBuLnJlc29sdmV8fHt9fWZ1bmN0''@;'; put 'put ''aW9uIGloZShuKXtjb25zdCB0PW4uY2hpbGRyZW4ubWFwKGU9PmloZShlKSkuZmxhdCgpO3JldHVybltuLC4uLnRdfWZ1bmN0aW9uIE4kKG4pe3JldHVybiBEZCh0PT57Y29uc3QgZT1uKHQpO3JldHVybiBlP28wKGUpLnBpcGUoWGEoKCk9PnQpKTpnbyh0KX0pfWxldCBhaGU9KCgpPT57Y2xh''@;'; put 'put ''c3MgbntidWlsZFRpdGxlKGUpe2xldCByLGk9ZS5yb290O2Zvcig7dm9pZCAwIT09aTspcj10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShpKT8/cixpPWkuY2hpbGRyZW4uZmluZChhPT5hLm91dGxldD09PW5zKTtyZXR1cm4gcn1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoZSl7cmV0''@;'; put 'put ''dXJuIGUuZGF0YVtsVF19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5OigpPT5KbihxT2UpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpLHFPZT0oKCk9PntjbGFzcyBuIGV4''@;'; put 'put ''dGVuZHMgYWhle3RpdGxlO2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy50aXRsZT1lfXVwZGF0ZVRpdGxlKGUpe2NvbnN0IHI9dGhpcy5idWlsZFRpdGxlKGUpO3ZvaWQgMCE9PXImJnRoaXMudGl0bGUuc2V0VGl0bGUocil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4g''@;'; put 'put ''bmV3KHJ8fG4pKE9yKG9MZSkpfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2NvbnN0IGJUPW5ldyB3cigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHt9KX0pLGRGPW5l''@;'; put 'put ''dyB3cigiIik7bGV0IFYkPSgoKT0+e2NsYXNzIG57Y29tcG9uZW50TG9hZGVycz1uZXcgV2Vha01hcDtjaGlsZHJlbkxvYWRlcnM9bmV3IFdlYWtNYXA7b25Mb2FkU3RhcnRMaXN0ZW5lcjtvbkxvYWRFbmRMaXN0ZW5lcjtjb21waWxlcj1KbigkRWUpO2xvYWRDb21wb25lbnQoZSl7aWYodGhp''@;'; put 'put ''cy5jb21wb25lbnRMb2FkZXJzLmdldChlKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChlKTtpZihlLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIGdvKGUuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIo''@;'; put 'put ''ZSk7Y29uc3Qgcj13NihlLmxvYWRDb21wb25lbnQoKSkucGlwZShYYShvaGUpLEUwKGE9Pnt0aGlzLm9uTG9hZEVuZExpc3RlbmVyJiZ0aGlzLm9uTG9hZEVuZExpc3RlbmVyKGUpLGUuX2xvYWRlZENvbXBvbmVudD1hfSksb1QoKCk9Pnt0aGlzLmNvbXBvbmVudExvYWRlcnMuZGVsZXRlKGUp''@;'; put 'put ''fSkpLGk9bmV3IHkkKHIsKCk9Pm5ldyB1cikucGlwZSh2JCgpKTtyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLnNldChlLGkpLGl9bG9hZENoaWxkcmVuKGUscil7aWYodGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KHIpKXJldHVybiB0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQocik7aWYo''@;'; put 'put ''ci5fbG9hZGVkUm91dGVzKXJldHVybiBnbyh7cm91dGVzOnIuX2xvYWRlZFJvdXRlcyxpbmplY3RvcjpyLl9sb2FkZWRJbmplY3Rvcn0pO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKHIpO2NvbnN0IGE9ZnVuY3Rpb24gSk9lKG4sdCxlLHIpe3Jl''@;'; put 'put ''dHVybiB3NihuLmxvYWRDaGlsZHJlbigpKS5waXBlKFhhKG9oZSksdzEoaT0+aSBpbnN0YW5jZW9mIFNzZXx8QXJyYXkuaXNBcnJheShpKT9nbyhpKTpvMCh0LmNvbXBpbGVNb2R1bGVBc3luYyhpKSkpLFhhKGk9PntyJiZyKG4pO2xldCBhLGMsbT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShp''@;'; put 'put ''KT8oYz1pLCEwKTooYT1pLmNyZWF0ZShlKS5pbmplY3RvcixjPWEuZ2V0KGRGLFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOmMubWFwKEwkKSxpbmplY3RvcjphfX0pKX0ocix0aGlzLmNvbXBpbGVyLGUsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZShvVCgo''@;'; put 'put ''KT0+e3RoaXMuY2hpbGRyZW5Mb2FkZXJzLmRlbGV0ZShyKX0pKSxjPW5ldyB5JChhLCgpPT5uZXcgdXIpLnBpcGUodiQoKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChyLGMpLGN9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMg''@;'; put 'put ''XHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIG9oZShuKXtyZXR1cm4gZnVuY3Rpb24gUU9lKG4pe3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4mJiJkZWZhdWx0ImluIG59KG4pP24u''@;'; put 'put ''ZGVmYXVsdDpufWxldCBCJD0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTooKT0+Sm4oZVBlKSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxlUGU9''@;'; put 'put ''KCgpPT57Y2xhc3MgbntzaG91bGRQcm9jZXNzVXJsKGUpe3JldHVybiEwfWV4dHJhY3QoZSl7cmV0dXJuIGV9bWVyZ2UoZSxyKXtyZXR1cm4gZX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rv''@;'; put 'put ''cnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7Y29uc3Qgc2hlPW5ldyB3cigiIiksbGhlPW5ldyB3cigiIik7ZnVuY3Rpb24gdFBlKG4sdCxlKXtjb25zdCByPW4uZ2V0KGxoZSksaT1uLmdldChYcyk7cmV0dXJuIG4uZ2V0KEphKS5ydW5PdXRzaWRlQW5n''@;'; put 'put ''dWxhcigoKT0+e2lmKCFpLnN0YXJ0Vmlld1RyYW5zaXRpb258fHIuc2tpcE5leHRUcmFuc2l0aW9uKXJldHVybiByLnNraXBOZXh0VHJhbnNpdGlvbj0hMSxuZXcgUHJvbWlzZShQPT5zZXRUaW1lb3V0KFApKTtsZXQgYTtjb25zdCBjPW5ldyBQcm9taXNlKFA9PnthPVB9KSxtPWkuc3RhcnRW''@;'; put 'put ''aWV3VHJhbnNpdGlvbigoKT0+KGEoKSxmdW5jdGlvbiBuUGUobil7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntWZyh7cmVhZDooKT0+c2V0VGltZW91dCh0KX0se2luamVjdG9yOm59KX0pfShuKSkpLHtvblZpZXdUcmFuc2l0aW9uQ3JlYXRlZDpDfT1yO3JldHVybiBDJiZQMShuLCgpPT5DKHt0''@;'; put 'put ''cmFuc2l0aW9uOm0sZnJvbTp0LHRvOmV9KSksY30pfWNvbnN0IGNoZT1uZXcgd3IoIiIpO2xldCBqJD0oKCk9PntjbGFzcyBue2N1cnJlbnROYXZpZ2F0aW9uPW51bGw7Y3VycmVudFRyYW5zaXRpb249bnVsbDtsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249bnVsbDtldmVudHM9bmV3IHVyO3Ry''@;'; put 'put ''YW5zaXRpb25BYm9ydFN1YmplY3Q9bmV3IHVyO2NvbmZpZ0xvYWRlcj1KbihWJCk7ZW52aXJvbm1lbnRJbmplY3Rvcj1Kbih1Yyk7ZGVzdHJveVJlZj1KbihjaCk7dXJsU2VyaWFsaXplcj1Kbih1VCk7cm9vdENvbnRleHRzPUpuKGdUKTtsb2NhdGlvbj1KbihsMik7aW5wdXRCaW5kaW5nRW5h''@;'; put 'put ''YmxlZD1udWxsIT09Sm4ob0Yse29wdGlvbmFsOiEwfSk7dGl0bGVTdHJhdGVneT1KbihhaGUpO29wdGlvbnM9Sm4oYlQse29wdGlvbmFsOiEwfSl8fHt9O3BhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3l8fCJlbXB0eU9ubHki''@;'; put 'put ''O3VybEhhbmRsaW5nU3RyYXRlZ3k9Sm4oQiQpO2NyZWF0ZVZpZXdUcmFuc2l0aW9uPUpuKHNoZSx7b3B0aW9uYWw6ITB9KTtuYXZpZ2F0aW9uRXJyb3JIYW5kbGVyPUpuKGNoZSx7b3B0aW9uYWw6ITB9KTtuYXZpZ2F0aW9uSWQ9MDtnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9dHJhbnNpdGlvbnM7YWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5nbyh2b2lkIDApO3Jvb3RDb21wb25lbnRUeXBlPW51bGw7ZGVzdHJveWVkPSExO2NvbnN0cnVjdG9yKCl7dGhpcy5jb25maWdMb2FkZXIub25Mb2FkRW5kTGlzdGVuZXI9aT0+dGhpcy5l''@;'; put 'put ''dmVudHMubmV4dChuZXcgVUxlKGkpKSx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRTdGFydExpc3RlbmVyPWk9PnRoaXMuZXZlbnRzLm5leHQobmV3IHpMZShpKSksdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKT0+e3RoaXMuZGVzdHJveWVkPSEwfSl9Y29tcGxldGUoKXt0aGlzLnRyYW5z''@;'; put 'put ''aXRpb25zPy5jb21wbGV0ZSgpfWhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KGUpe2NvbnN0IHI9Kyt0aGlzLm5hdmlnYXRpb25JZDt0aGlzLnRyYW5zaXRpb25zPy5uZXh0KHsuLi5lLGV4dHJhY3RlZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChlLnJhd1VybCksdGFyZ2V0''@;'; put 'put ''U25hcHNob3Q6bnVsbCx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGwsaWQ6cn0pfXNldHVwTmF2aWdhdGlvbnMoZSl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IHhp''@;'; put 'put ''KG51bGwpLHRoaXMudHJhbnNpdGlvbnMucGlwZShyYyhyPT5udWxsIT09ciksRGQocj0+e2xldCBpPSExLGE9ITE7cmV0dXJuIGdvKHIpLnBpcGUoRGQoYz0+e2lmKHRoaXMubmF2aWdhdGlvbklkPnIuaWQpcmV0dXJuIHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24ociwiIix1Mi5T''@;'; put 'put ''dXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKSxjMjt0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPXIsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17aWQ6Yy5pZCxpbml0aWFsVXJsOmMucmF3VXJsLGV4dHJhY3RlZFVybDpjLmV4dHJhY3RlZFVybCx0YXJnZXRCcm93c2VyVXJsOiJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgYy5leHRyYXMuYnJvd3NlclVybD90aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYy5leHRyYXMuYnJvd3NlclVybCk6Yy5leHRyYXMuYnJvd3NlclVybCx0cmlnZ2VyOmMuc291cmNlLGV4dHJhczpjLmV4dHJhcyxwcmV2aW91c05hdmlnYXRpb246dGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmln''@;'; put 'put ''YXRpb24/ey4uLnRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uLHByZXZpb3VzTmF2aWdhdGlvbjpudWxsfTpudWxsfTtjb25zdCBtPSFlLm5hdmlnYXRlZHx8dGhpcy5pc1VwZGF0aW5nSW50ZXJuYWxTdGF0ZSgpfHx0aGlzLmlzVXBkYXRlZEJyb3dzZXJVcmwoKTtpZighbSYmInJlbG9h''@;'; put 'put ''ZCIhPT0oYy5leHRyYXMub25TYW1lVXJsTmF2aWdhdGlvbj8/ZS5vblNhbWVVcmxOYXZpZ2F0aW9uKSlyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgZHcoYy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGMucmF3VXJsKSwiIixuRi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24p''@;'; put 'put ''KSxjLnJlc29sdmUoITEpLGMyO2lmKHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGMucmF3VXJsKSlyZXR1cm4gZ28oYykucGlwZShEZChQPT4odGhpcy5ldmVudHMubmV4dChuZXcgdEYoUC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFAuZXh0cmFj''@;'; put 'put ''dGVkVXJsKSxQLnNvdXJjZSxQLnJlc3RvcmVkU3RhdGUpKSxQLmlkIT09dGhpcy5uYXZpZ2F0aW9uSWQ/YzI6UHJvbWlzZS5yZXNvbHZlKFApKSksZnVuY3Rpb24gWU9lKG4sdCxlLHIsaSxhKXtyZXR1cm4gdzEoYz0+ZnVuY3Rpb24gak9lKG4sdCxlLHIsaSxhLGM9ImVtcHR5T25seSIpe3Jl''@;'; put 'put ''dHVybiBuZXcgVU9lKG4sdCxlLHIsaSxjLGEpLnJlY29nbml6ZSgpfShuLHQsZSxyLGMuZXh0cmFjdGVkVXJsLGksYSkucGlwZShYYSgoe3N0YXRlOm0sdHJlZTpDfSk9Pih7Li4uYyx0YXJnZXRTbmFwc2hvdDptLHVybEFmdGVyUmVkaXJlY3RzOkN9KSkpKX0odGhpcy5lbnZpcm9ubWVudElu''@;'; put 'put ''amVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsZS5jb25maWcsdGhpcy51cmxTZXJpYWxpemVyLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksRTAoUD0+e3IudGFyZ2V0U25hcHNob3Q9UC50YXJnZXRTbmFwc2hvdCxyLnVybEFmdGVyUmVkaXJl''@;'; put 'put ''Y3RzPVAudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhpcy5jdXJyZW50TmF2aWdhdGlvbixmaW5hbFVybDpQLnVybEFmdGVyUmVkaXJlY3RzfTtjb25zdCBZPW5ldyBIZGUoUC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFAuZXh0cmFjdGVk''@;'; put 'put ''VXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFAudXJsQWZ0ZXJSZWRpcmVjdHMpLFAudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoWSl9KSk7aWYobSYmdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoYy5jdXJyZW50UmF3VXJsKSl7Y29u''@;'; put 'put ''c3R7aWQ6UCxleHRyYWN0ZWRVcmw6WSxzb3VyY2U6SixyZXN0b3JlZFN0YXRlOmNlLGV4dHJhczpmZX09YyxBZT1uZXcgdEYoUCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFkpLEosY2UpO3RoaXMuZXZlbnRzLm5leHQoQWUpO2NvbnN0IEhlPWpkZSh0aGlzLnJvb3RDb21wb25lbnRU''@;'; put 'put ''eXBlKS5zbmFwc2hvdDtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1yPXsuLi5jLHRhcmdldFNuYXBzaG90OkhlLHVybEFmdGVyUmVkaXJlY3RzOlksZXh0cmFzOnsuLi5mZSxza2lwTG9jYXRpb25DaGFuZ2U6ITEscmVwbGFjZVVybDohMX19LHRoaXMuY3VycmVudE5hdmlnYXRpb24u''@;'; put 'put ''ZmluYWxVcmw9WSxnbyhyKX1yZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgZHcoYy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGMuZXh0cmFjdGVkVXJsKSwiIixuRi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksYy5yZXNvbHZlKCExKSxjMn0pLEUwKGM9Pntjb25z''@;'; put 'put ''dCBtPW5ldyBOTGUoYy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGMuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGMudXJsQWZ0ZXJSZWRpcmVjdHMpLGMudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQobSl9KSxYYShjPT4odGhpcy5j''@;'; put 'put ''dXJyZW50VHJhbnNpdGlvbj1yPXsuLi5jLGd1YXJkczpjT2UoYy50YXJnZXRTbmFwc2hvdCxjLmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RDb250ZXh0cyl9LHIpKSxmdW5jdGlvbiBiT2Uobix0KXtyZXR1cm4gdzEoZT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OnIsY3VycmVudFNuYXBzaG90''@;'; put 'put ''OmksZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczphLGNhbkRlYWN0aXZhdGVDaGVja3M6Y319PWU7cmV0dXJuIDA9PT1jLmxlbmd0aCYmMD09PWEubGVuZ3RoP2dvKHsuLi5lLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIHdPZShuLHQsZSxyKXtyZXR1cm4gbzAobikucGlwZSh3MShpPT5m''@;'; put 'put ''dW5jdGlvbiBUT2Uobix0LGUscixpKXtjb25zdCBhPXQmJnQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIGEmJjAhPT1hLmxlbmd0aD9nbyhhLm1hcChtPT57Y29uc3QgQz1wVCh0KT8/aSxQPWZ3KG0sQyk7cmV0dXJuIHc2KGZ1bmN0aW9uIHZP''@;'; put 'put ''ZShuKXtyZXR1cm4gbiYmX1Qobi5jYW5EZWFjdGl2YXRlKX0oUCk/UC5jYW5EZWFjdGl2YXRlKG4sdCxlLHIpOlAxKEMsKCk9PlAobix0LGUscikpKS5waXBlKF82KCkpfSkpLnBpcGUocHcoKSk6Z28oITApfShpLmNvbXBvbmVudCxpLnJvdXRlLGUsdCxyKSksXzYoaT0+ITAhPT1pLCEwKSl9''@;'; put 'put ''KGMscixpLG4pLnBpcGUodzEobT0+bSYmZnVuY3Rpb24gZk9lKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG59KG0pP2Z1bmN0aW9uIENPZShuLHQsZSxyKXtyZXR1cm4gbzAodCkucGlwZShjdyhpPT5tJChmdW5jdGlvbiBNT2Uobix0KXtyZXR1cm4gbnVsbCE9PW4mJnQmJnQobmV3IFdM''@;'; put 'put ''ZShuKSksZ28oITApfShpLnJvdXRlLnBhcmVudCxyKSxmdW5jdGlvbiBTT2Uobix0KXtyZXR1cm4gbnVsbCE9PW4mJnQmJnQobmV3IFlMZShuKSksZ28oITApfShpLnJvdXRlLHIpLGZ1bmN0aW9uIEVPZShuLHQsZSl7Y29uc3Qgcj10W3QubGVuZ3RoLTFdLGE9dC5zbGljZSgwLHQubGVuZ3Ro''@;'; put 'put ''LTEpLnJldmVyc2UoKS5tYXAoYz0+ZnVuY3Rpb24gdU9lKG4pe2NvbnN0IHQ9bi5yb3V0ZUNvbmZpZz9uLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gdCYmMCE9PXQubGVuZ3RoP3tub2RlOm4sZ3VhcmRzOnR9Om51bGx9KGMpKS5maWx0ZXIoYz0+bnVsbCE9PWMp''@;'; put 'put ''Lm1hcChjPT5kZGUoKCk9PmdvKGMuZ3VhcmRzLm1hcChDPT57Y29uc3QgUD1wVChjLm5vZGUpPz9lLFk9ZncoQyxQKTtyZXR1cm4gdzYoZnVuY3Rpb24gbU9lKG4pe3JldHVybiBuJiZfVChuLmNhbkFjdGl2YXRlQ2hpbGQpfShZKT9ZLmNhbkFjdGl2YXRlQ2hpbGQocixuKTpQMShQLCgpPT5Z''@;'; put 'put ''KHIsbikpKS5waXBlKF82KCkpfSkpLnBpcGUocHcoKSkpKTtyZXR1cm4gZ28oYSkucGlwZShwdygpKX0obixpLnBhdGgsZSksZnVuY3Rpb24geE9lKG4sdCxlKXtjb25zdCByPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZTpudWxsO2lmKCFyfHwwPT09ci5sZW5ndGgp''@;'; put 'put ''cmV0dXJuIGdvKCEwKTtjb25zdCBpPXIubWFwKGE9PmRkZSgoKT0+e2NvbnN0IGM9cFQodCk/P2UsbT1mdyhhLGMpO3JldHVybiB3NihmdW5jdGlvbiBnT2Uobil7cmV0dXJuIG4mJl9UKG4uY2FuQWN0aXZhdGUpfShtKT9tLmNhbkFjdGl2YXRlKHQsbik6UDEoYywoKT0+bSh0LG4pKSkucGlw''@;'; put 'put ''ZShfNigpKX0pKTtyZXR1cm4gZ28oaSkucGlwZShwdygpKX0obixpLnJvdXRlLGUpKSksXzYoaT0+ITAhPT1pLCEwKSl9KHIsYSxuLHQpOmdvKG0pKSxYYShtPT4oey4uLmUsZ3VhcmRzUmVzdWx0Om19KSkpfSl9KHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixjPT50aGlzLmV2ZW50cy5uZXh0''@;'; put 'put ''KGMpKSxFMChjPT57aWYoci5ndWFyZHNSZXN1bHQ9Yy5ndWFyZHNSZXN1bHQsYy5ndWFyZHNSZXN1bHQmJiJib29sZWFuIiE9dHlwZW9mIGMuZ3VhcmRzUmVzdWx0KXRocm93IHNGKDAsYy5ndWFyZHNSZXN1bHQpO2NvbnN0IG09bmV3IFZMZShjLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJp''@;'; put 'put ''YWxpemUoYy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYy51cmxBZnRlclJlZGlyZWN0cyksYy50YXJnZXRTbmFwc2hvdCwhIWMuZ3VhcmRzUmVzdWx0KTt0aGlzLmV2ZW50cy5uZXh0KG0pfSkscmMoYz0+ISFjLmd1YXJkc1Jlc3VsdHx8KHRoaXMuY2FuY2Vs''@;'; put 'put ''TmF2aWdhdGlvblRyYW5zaXRpb24oYywiIix1Mi5HdWFyZFJlamVjdGVkKSwhMSkpLE4kKGM9PntpZigwIT09Yy5ndWFyZHMuY2FuQWN0aXZhdGVDaGVja3MubGVuZ3RoKXJldHVybiBnbyhjKS5waXBlKEUwKG09Pntjb25zdCBDPW5ldyBCTGUobS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2Vy''@;'; put 'put ''aWFsaXplKG0uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG0udXJsQWZ0ZXJSZWRpcmVjdHMpLG0udGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoQyl9KSxEZChtPT57bGV0IEM9ITE7cmV0dXJuIGdvKG0pLnBpcGUoZnVuY3Rpb24gR09lKG4sdCl7''@;'; put 'put ''cmV0dXJuIHcxKGU9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpyLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6aX19PWU7aWYoIWkubGVuZ3RoKXJldHVybiBnbyhlKTtjb25zdCBhPW5ldyBTZXQoaS5tYXAoQz0+Qy5yb3V0ZSkpLGM9bmV3IFNldDtmb3IoY29uc3QgQyBvZiBhKWlmKCFjLmhh''@;'; put 'put ''cyhDKSlmb3IoY29uc3QgUCBvZiBpaGUoQykpYy5hZGQoUCk7bGV0IG09MDtyZXR1cm4gbzAoYykucGlwZShjdyhDPT5hLmhhcyhDKT9mdW5jdGlvbiAkT2Uobix0LGUscil7Y29uc3QgaT1uLnJvdXRlQ29uZmlnLGE9bi5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09aT8udGl0bGUmJiFXZGUo''@;'; put 'put ''aSkmJihhW2xUXT1pLnRpdGxlKSxmdW5jdGlvbiBLT2Uobix0LGUscil7Y29uc3QgaT13JChuKTtpZigwPT09aS5sZW5ndGgpcmV0dXJuIGdvKHt9KTtjb25zdCBhPXt9O3JldHVybiBvMChpKS5waXBlKHcxKGM9PmZ1bmN0aW9uIFhPZShuLHQsZSxyKXtjb25zdCBpPXBUKHQpPz9yLGE9Znco''@;'; put 'put ''bixpKTtyZXR1cm4gdzYoYS5yZXNvbHZlP2EucmVzb2x2ZSh0LGUpOlAxKGksKCk9PmEodCxlKSkpfShuW2NdLHQsZSxyKS5waXBlKF82KCksRTAobT0+e2lmKG0gaW5zdGFuY2VvZiBPJCl0aHJvdyBzRihuZXcgJFAsbSk7YVtjXT1tfSkpKSxfJCgxKSxYYSgoKT0+YSksQjkoYz0+cWRlKGMp''@;'; put 'put ''P2MyOmFUKGMpKSl9KGEsbix0LHIpLnBpcGUoWGEoYz0+KG4uX3Jlc29sdmVkRGF0YT1jLG4uZGF0YT1pRihuLG4ucGFyZW50LGUpLnJlc29sdmUsbnVsbCkpKX0oQyxyLG4sdCk6KEMuZGF0YT1pRihDLEMucGFyZW50LG4pLnJlc29sdmUsZ28odm9pZCAwKSkpLEUwKCgpPT5tKyspLF8kKDEp''@;'; put 'put ''LHcxKEM9Pm09PT1jLnNpemU/Z28oZSk6YzIpKX0pfSh0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3ksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yKSxFMCh7bmV4dDooKT0+Qz0hMCxjb21wbGV0ZTooKT0+e0N8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24obSwiIix1Mi5O''@;'; put 'put ''b0RhdGFGcm9tUmVzb2x2ZXIpfX0pKX0pLEUwKG09Pntjb25zdCBDPW5ldyBqTGUobS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG0uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKG0udXJsQWZ0ZXJSZWRpcmVjdHMpLG0udGFyZ2V0U25hcHNob3Qp''@;'; put 'put ''O3RoaXMuZXZlbnRzLm5leHQoQyl9KSl9KSxOJChjPT57Y29uc3QgbT1DPT57Y29uc3QgUD1bXTtDLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhQy5yb3V0ZUNvbmZpZy5fbG9hZGVkQ29tcG9uZW50JiZQLnB1c2godGhpcy5jb25maWdMb2FkZXIubG9hZENvbXBvbmVudChDLnJvdXRl''@;'; put 'put ''Q29uZmlnKS5waXBlKEUwKFk9PntDLmNvbXBvbmVudD1ZfSksWGEoKCk9Pnt9KSkpO2Zvcihjb25zdCBZIG9mIEMuY2hpbGRyZW4pUC5wdXNoKC4uLm0oWSkpO3JldHVybiBQfTtyZXR1cm4gVjkobShjLnRhcmdldFNuYXBzaG90LnJvb3QpKS5waXBlKFlQKG51bGwpLEczKDEpKX0pLE4kKCgp''@;'; put 'put ''PT50aGlzLmFmdGVyUHJlYWN0aXZhdGlvbigpKSxEZCgoKT0+e2NvbnN0e2N1cnJlbnRTbmFwc2hvdDpjLHRhcmdldFNuYXBzaG90Om19PXIsQz10aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLGMucm9vdCxtLnJvb3QpO3JldHVybiBDP28wKEMp''@;'; put 'put ''LnBpcGUoWGEoKCk9PnIpKTpnbyhyKX0pLFhhKGM9Pntjb25zdCBtPWZ1bmN0aW9uIHJPZShuLHQsZSl7Y29uc3Qgcj1tVChuLHQuX3Jvb3QsZT9lLl9yb290OnZvaWQgMCk7cmV0dXJuIG5ldyBCZGUocix0KX0oZS5yb3V0ZVJldXNlU3RyYXRlZ3ksYy50YXJnZXRTbmFwc2hvdCxjLmN1cnJl''@;'; put 'put ''bnRSb3V0ZXJTdGF0ZSk7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb249cj17Li4uYyx0YXJnZXRSb3V0ZXJTdGF0ZTptfSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnRhcmdldFJvdXRlclN0YXRlPW0scn0pLEUwKCgpPT57dGhpcy5ldmVudHMubmV4dChuZXcgVCQpfSksKChuLHQsZSxy''@;'; put 'put ''KT0+WGEoaT0+KG5ldyBsT2UodCxpLnRhcmdldFJvdXRlclN0YXRlLGkuY3VycmVudFJvdXRlclN0YXRlLGUscikuYWN0aXZhdGUobiksaSkpKSh0aGlzLnJvb3RDb250ZXh0cyxlLnJvdXRlUmV1c2VTdHJhdGVneSxjPT50aGlzLmV2ZW50cy5uZXh0KGMpLHRoaXMuaW5wdXRCaW5kaW5nRW5h''@;'; put 'put ''YmxlZCksRzMoMSksRTAoe25leHQ6Yz0+e2k9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbix0aGlzLmV2ZW50cy5uZXh0KG5ldyBkNChjLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYy5leHRyYWN0ZWRVcmwpLHRoaXMudXJs''@;'; put 'put ''U2VyaWFsaXplci5zZXJpYWxpemUoYy51cmxBZnRlclJlZGlyZWN0cykpKSx0aGlzLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKGMudGFyZ2V0Um91dGVyU3RhdGUuc25hcHNob3QpLGMucmVzb2x2ZSghMCl9LGNvbXBsZXRlOigpPT57aT0hMH19KSwkMSh0aGlzLnRyYW5zaXRpb25BYm9y''@;'; put 'put ''dFN1YmplY3QucGlwZShFMChjPT57dGhyb3cgY30pKSksb1QoKCk9PnshaSYmIWEmJnRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24ociwiIix1Mi5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKSx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5pZD09PXIuaWQmJih0aGlzLmN1cnJlbnRO''@;'; put 'put ''YXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsKX0pLEI5KGM9PntpZih0aGlzLmRlc3Ryb3llZClyZXR1cm4gci5yZXNvbHZlKCExKSxjMjtpZihhPSEwLEtkZShjKSl0aGlzLmV2ZW50cy5uZXh0KG5ldyBXOShyLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxp''@;'; put 'put ''emUoci5leHRyYWN0ZWRVcmwpLGMubWVzc2FnZSxjLmNhbmNlbGxhdGlvbkNvZGUpKSxmdW5jdGlvbiBvT2Uobil7cmV0dXJuIEtkZShuKSYmVTkobi51cmwpfShjKT90aGlzLmV2ZW50cy5uZXh0KG5ldyByRihjLnVybCxjLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnMpKTpyLnJlc29sdmUo''@;'; put 'put ''ITEpO2Vsc2V7Y29uc3QgbT1uZXcgRSQoci5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHIuZXh0cmFjdGVkVXJsKSxjLHIudGFyZ2V0U25hcHNob3Q/P3ZvaWQgMCk7dHJ5e2NvbnN0IEM9UDEodGhpcy5lbnZpcm9ubWVudEluamVjdG9yLCgpPT50aGlzLm5hdmlnYXRpb25FcnJv''@;'; put 'put ''ckhhbmRsZXI/LihtKSk7aWYoIShDIGluc3RhbmNlb2YgTyQpKXRocm93IHRoaXMuZXZlbnRzLm5leHQobSksYzt7Y29uc3R7bWVzc2FnZTpQLGNhbmNlbGxhdGlvbkNvZGU6WX09c0YoMCxDKTt0aGlzLmV2ZW50cy5uZXh0KG5ldyBXOShyLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxp''@;'; put 'put ''emUoci5leHRyYWN0ZWRVcmwpLFAsWSkpLHRoaXMuZXZlbnRzLm5leHQobmV3IHJGKEMucmVkaXJlY3RUbyxDLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnMpKX19Y2F0Y2goQyl7dGhpcy5vcHRpb25zLnJlc29sdmVOYXZpZ2F0aW9uUHJvbWlzZU9uRXJyb3I/ci5yZXNvbHZlKCExKTpyLnJl''@;'; put 'put ''amVjdChDKX19cmV0dXJuIGMyfSkpfSkpfWNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKGUscixpKXtjb25zdCBhPW5ldyBXOShlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZS5leHRyYWN0ZWRVcmwpLHIsaSk7dGhpcy5ldmVudHMubmV4dChhKSxlLnJlc29sdmUoITEpfWlz''@;'; put 'put ''VXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uY3VycmVudFVybFRyZWUudG9TdHJpbmcoKX1pc1VwZGF0ZWRCcm93c2VyVXJsKCl7Y29uc3QgZT10aGlz''@;'; put 'put ''LnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdCh0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSkpLHI9dGhpcy5jdXJyZW50TmF2aWdhdGlvbj8udGFyZ2V0QnJvd3NlclVybD8/dGhpcy5jdXJyZW50TmF2aWdhdGlvbj8uZXh0cmFjdGVkVXJsO3JldHVy''@;'; put 'put ''biBlLnRvU3RyaW5nKCkhPT1yPy50b1N0cmluZygpJiYhdGhpcy5jdXJyZW50TmF2aWdhdGlvbj8uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rv''@;'; put 'put ''cnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gclBlKG4pe3JldHVybiBuIT09ZUZ9bGV0IGlQZT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9''@;'; put 'put ''dW4oe3Rva2VuOm4sZmFjdG9yeTooKT0+Sm4ob1BlKSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjbGFzcyBhUGV7c2hvdWxkRGV0YWNoKHQpe3JldHVybiExfXN0b3JlKHQsZSl7fXNob3VsZEF0dGFjaCh0KXtyZXR1cm4hMX1yZXRyaWV2ZSh0KXtyZXR1cm4gbnVsbH1zaG91''@;'; put 'put ''bGRSZXVzZVJvdXRlKHQsZSl7cmV0dXJuIHQucm91dGVDb25maWc9PT1lLnJvdXRlQ29uZmlnfX1sZXQgb1BlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBhUGV7c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKGV8fChlPUtzKG4pKSkoaXx8bil9''@;'; put 'put ''fSkoKTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpLHVoZT0oKCk9PntjbGFzcyBue3VybFNlcmlhbGl6ZXI9Sm4odVQpO29wdGlvbnM9Sm4oYlQse29wdGlvbmFsOiEwfSl8fHt9O2NhbmNl''@;'; put 'put ''bGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIjtsb2NhdGlvbj1KbihsMik7dXJsSGFuZGxpbmdTdHJhdGVneT1KbihCJCk7dXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0''@;'; put 'put ''ZWd5fHwiZGVmZXJyZWQiO2N1cnJlbnRVcmxUcmVlPW5ldyBqOTtnZXRDdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLmN1cnJlbnRVcmxUcmVlfXJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZTtnZXRSYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMucmF3VXJsVHJlZX1jcmVhdGVCcm93''@;'; put 'put ''c2VyUGF0aCh7ZmluYWxVcmw6ZSxpbml0aWFsVXJsOnIsdGFyZ2V0QnJvd3NlclVybDppfSl7Y29uc3QgYT12b2lkIDAhPT1lP3RoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShlLHIpOnIsYz1pPz9hO3JldHVybiBjIGluc3RhbmNlb2Ygajk/dGhpcy51cmxTZXJpYWxpemVyLnNlcmlh''@;'; put 'put ''bGl6ZShjKTpjfWNvbW1pdFRyYW5zaXRpb24oe3RhcmdldFJvdXRlclN0YXRlOmUsZmluYWxVcmw6cixpbml0aWFsVXJsOml9KXtyJiZlPyh0aGlzLmN1cnJlbnRVcmxUcmVlPXIsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShyLGkpLHRoaXMucm91dGVy''@;'; put 'put ''U3RhdGU9ZSk6dGhpcy5yYXdVcmxUcmVlPWl9cm91dGVyU3RhdGU9amRlKG51bGwpO2dldFJvdXRlclN0YXRlKCl7cmV0dXJuIHRoaXMucm91dGVyU3RhdGV9c3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCk7dXBkYXRlU3RhdGVNZW1lbnRvKCl7dGhpcy5zdGF0ZU1lbWVu''@;'; put 'put ''dG89dGhpcy5jcmVhdGVTdGF0ZU1lbWVudG8oKX1jcmVhdGVTdGF0ZU1lbWVudG8oKXtyZXR1cm57cmF3VXJsVHJlZTp0aGlzLnJhd1VybFRyZWUsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxyb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfX1yZXNldEludGVybmFsU3Rh''@;'; put 'put ''dGUoe2ZpbmFsVXJsOmV9KXt0aGlzLnJvdXRlclN0YXRlPXRoaXMuc3RhdGVNZW1lbnRvLnJvdXRlclN0YXRlLHRoaXMuY3VycmVudFVybFRyZWU9dGhpcy5zdGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0''@;'; put 'put ''aGlzLmN1cnJlbnRVcmxUcmVlLGU/P3RoaXMucmF3VXJsVHJlZSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5OigpPT5KbihzUGUpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59''@;'; put 'put ''KSgpLHNQZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdWhle2N1cnJlbnRQYWdlSWQ9MDtsYXN0U3VjY2Vzc2Z1bElkPS0xO3Jlc3RvcmVkU3RhdGUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpfWdldCBicm93c2VyUGFnZUlkKCl7cmV0dXJuImNvbXB1dGVkIiE9PXRoaXMuY2Fu''@;'; put 'put ''Y2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj90aGlzLmN1cnJlbnRQYWdlSWQ6dGhpcy5yZXN0b3JlZFN0YXRlKCk/Llx1MDI3NXJvdXRlclBhZ2VJZD8/dGhpcy5jdXJyZW50UGFnZUlkfXJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIoZSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bG9jYXRpb24uc3Vic2NyaWJlKHI9PnsicG9wc3RhdGUiPT09ci50eXBlJiZzZXRUaW1lb3V0KCgpPT57ZShyLnVybCxyLnN0YXRlLCJwb3BzdGF0ZSIpfSl9KX1oYW5kbGVSb3V0ZXJFdmVudChlLHIpe2UgaW5zdGFuY2VvZiB0Rj90aGlzLnVwZGF0ZVN0YXRlTWVtZW50bygpOmUgaW5zdGFu''@;'; put 'put ''Y2VvZiBkdz90aGlzLmNvbW1pdFRyYW5zaXRpb24ocik6ZSBpbnN0YW5jZW9mIEhkZT8iZWFnZXIiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneSYmKHIuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8dGhpcy5zZXRCcm93c2VyVXJsKHRoaXMuY3JlYXRlQnJvd3NlclBhdGgocikscikpOmUg''@;'; put 'put ''aW5zdGFuY2VvZiBUJD8odGhpcy5jb21taXRUcmFuc2l0aW9uKHIpLCJkZWZlcnJlZCI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYhci5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlJiZ0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5jcmVhdGVCcm93c2VyUGF0aChyKSxyKSk6ZSBpbnN0YW5j''@;'; put 'put ''ZW9mIFc5JiYoZS5jb2RlPT09dTIuR3VhcmRSZWplY3RlZHx8ZS5jb2RlPT09dTIuTm9EYXRhRnJvbVJlc29sdmVyKT90aGlzLnJlc3RvcmVIaXN0b3J5KHIpOmUgaW5zdGFuY2VvZiBFJD90aGlzLnJlc3RvcmVIaXN0b3J5KHIsITApOmUgaW5zdGFuY2VvZiBkNCYmKHRoaXMubGFzdFN1Y2Nl''@;'; put 'put ''c3NmdWxJZD1lLmlkLHRoaXMuY3VycmVudFBhZ2VJZD10aGlzLmJyb3dzZXJQYWdlSWQpfXNldEJyb3dzZXJVcmwoZSx7ZXh0cmFzOnIsaWQ6aX0pe2NvbnN0e3JlcGxhY2VVcmw6YSxzdGF0ZTpjfT1yO2lmKHRoaXMubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8oZSl8fGEpe2NvbnN0''@;'; put 'put ''IG09dGhpcy5icm93c2VyUGFnZUlkLEM9ey4uLmMsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoaSxtKX07dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZSwiIixDKX1lbHNle2NvbnN0IG09ey4uLmMsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoaSx0aGlzLmJyb3dzZXJQ''@;'; put 'put ''YWdlSWQrMSl9O3RoaXMubG9jYXRpb24uZ28oZSwiIixtKX19cmVzdG9yZUhpc3RvcnkoZSxyPSExKXtpZigiY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uKXtjb25zdCBhPXRoaXMuY3VycmVudFBhZ2VJZC10aGlzLmJyb3dzZXJQYWdlSWQ7MCE9PWE/dGhp''@;'; put 'put ''cy5sb2NhdGlvbi5oaXN0b3J5R28oYSk6dGhpcy5nZXRDdXJyZW50VXJsVHJlZSgpPT09ZS5maW5hbFVybCYmMD09PWEmJih0aGlzLnJlc2V0SW50ZXJuYWxTdGF0ZShlKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNlInJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5hdmln''@;'; put 'put ''YXRpb25SZXNvbHV0aW9uJiYociYmdGhpcy5yZXNldEludGVybmFsU3RhdGUoZSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9cmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0''@;'; put 'put ''aGlzLmdldFJhd1VybFRyZWUoKSksIiIsdGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUodGhpcy5sYXN0U3VjY2Vzc2Z1bElkLHRoaXMuY3VycmVudFBhZ2VJZCkpfWdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShlLHIpe3JldHVybiJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJl''@;'; put 'put ''c29sdXRpb24/e25hdmlnYXRpb25JZDplLFx1MDI3NXJvdXRlclBhZ2VJZDpyfTp7bmF2aWdhdGlvbklkOmV9fXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybihlfHwoZT1LcyhuKSkpKGl8fG4pfX0pKCk7c3RhdGljIFx1MDI3NXByb3Y9dW4o''@;'; put 'put ''e3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtmdW5jdGlvbiBkaGUobix0KXtuLmV2ZW50cy5waXBlKHJjKGU9PmUgaW5zdGFuY2VvZiBkNHx8ZSBpbnN0YW5jZW9mIFc5fHxlIGluc3RhbmNlb2YgRSR8fGUgaW5zdGFuY2VvZiBk''@;'; put 'put ''dyksWGEoZT0+ZSBpbnN0YW5jZW9mIGQ0fHxlIGluc3RhbmNlb2YgZHc/MDplIGluc3RhbmNlb2YgVzkmJihlLmNvZGU9PT11Mi5SZWRpcmVjdHx8ZS5jb2RlPT09dTIuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbik/MjoxKSxyYyhlPT4yIT09ZSksRzMoMSkpLnN1YnNjcmliZSgoKT0+e3Qo''@;'; put 'put ''KX0pfWNvbnN0IGxQZT17cGF0aHM6ImV4YWN0IixmcmFnbWVudDoiaWdub3JlZCIsbWF0cml4UGFyYW1zOiJpZ25vcmVkIixxdWVyeVBhcmFtczoiZXhhY3QifSxjUGU9e3BhdGhzOiJzdWJzZXQiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1z''@;'; put 'put ''OiJzdWJzZXQifTtsZXQgcmw9KCgpPT57Y2xhc3MgbntnZXQgY3VycmVudFVybFRyZWUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFVybFRyZWUoKX1nZXQgcmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRSYXdVcmxUcmVlKCl9ZGlzcG9zZWQ9''@;'; put 'put ''ITE7bm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uO2NvbnNvbGU9Sm4oTVkpO3N0YXRlTWFuYWdlcj1Kbih1aGUpO29wdGlvbnM9Sm4oYlQse29wdGlvbmFsOiEwfSl8fHt9O3BlbmRpbmdUYXNrcz1KbihVMCk7dXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVy''@;'; put 'put ''bFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiO25hdmlnYXRpb25UcmFuc2l0aW9ucz1KbihqJCk7dXJsU2VyaWFsaXplcj1Kbih1VCk7bG9jYXRpb249Sm4obDIpO3VybEhhbmRsaW5nU3RyYXRlZ3k9Sm4oQiQpO19ldmVudHM9bmV3IHVyO2dldCBldmVudHMoKXtyZXR1cm4gdGhpcy5fZXZl''@;'; put 'put ''bnRzfWdldCByb3V0ZXJTdGF0ZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRSb3V0ZXJTdGF0ZSgpfW5hdmlnYXRlZD0hMTtyb3V0ZVJldXNlU3RyYXRlZ3k9Sm4oaVBlKTtvblNhbWVVcmxOYXZpZ2F0aW9uPXRoaXMub3B0aW9ucy5vblNhbWVVcmxOYXZpZ2F0aW9ufHwiaWdub3Jl''@;'; put 'put ''Ijtjb25maWc9Sm4oZEYse29wdGlvbmFsOiEwfSk/LmZsYXQoKT8/W107Y29tcG9uZW50SW5wdXRCaW5kaW5nRW5hYmxlZD0hIUpuKG9GLHtvcHRpb25hbDohMH0pO2NvbnN0cnVjdG9yKCl7dGhpcy5yZXNldENvbmZpZyh0aGlzLmNvbmZpZyksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMu''@;'; put 'put ''c2V0dXBOYXZpZ2F0aW9ucyh0aGlzKS5zdWJzY3JpYmUoe2Vycm9yOmU9Pnt0aGlzLmNvbnNvbGUud2FybihlKX19KSx0aGlzLnN1YnNjcmliZVRvTmF2aWdhdGlvbkV2ZW50cygpfWV2ZW50c1N1YnNjcmlwdGlvbj1uZXcgTHQ7c3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzKCl7Y29uc3Qg''@;'; put 'put ''ZT10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKHI9Pnt0cnl7Y29uc3QgaT10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50VHJhbnNpdGlvbixhPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnROYXZpZ2F0aW9uO2lmKG51bGwhPT1p''@;'; put 'put ''JiZudWxsIT09YSlpZih0aGlzLnN0YXRlTWFuYWdlci5oYW5kbGVSb3V0ZXJFdmVudChyLGEpLHIgaW5zdGFuY2VvZiBXOSYmci5jb2RlIT09dTIuUmVkaXJlY3QmJnIuY29kZSE9PXUyLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pdGhpcy5uYXZpZ2F0ZWQ9ITA7ZWxzZSBpZihyIGluc3Rh''@;'; put 'put ''bmNlb2YgZDQpdGhpcy5uYXZpZ2F0ZWQ9ITA7ZWxzZSBpZihyIGluc3RhbmNlb2YgckYpe2NvbnN0IGM9ci5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zLG09dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKHIudXJsLGkuY3VycmVudFJhd1VybCksQz17YnJvd3NlclVybDppLmV4dHJh''@;'; put 'put ''cy5icm93c2VyVXJsLGluZm86aS5leHRyYXMuaW5mbyxza2lwTG9jYXRpb25DaGFuZ2U6aS5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6aS5leHRyYXMucmVwbGFjZVVybHx8ImVhZ2VyIj09PXRoaXMudXJsVXBkYXRlU3RyYXRlZ3l8fHJQZShpLnNvdXJjZSksLi4uY307''@;'; put 'put ''dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24obSxlRixudWxsLEMse3Jlc29sdmU6aS5yZXNvbHZlLHJlamVjdDppLnJlamVjdCxwcm9taXNlOmkucHJvbWlzZX0pfShmdW5jdGlvbiBkUGUobil7cmV0dXJuIShuIGluc3RhbmNlb2YgVCR8fG4gaW5zdGFuY2VvZiByRil9KShyKSYmdGhpcy5fZXZl''@;'; put 'put ''bnRzLm5leHQocil9Y2F0Y2goaSl7dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5uZXh0KGkpfX0pO3RoaXMuZXZlbnRzU3Vic2NyaXB0aW9uLmFkZChlKX1yZXNldFJvb3RDb21wb25lbnRUeXBlKGUpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21w''@;'; put 'put ''b25lbnQ9ZSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9uZW50VHlwZT1lfWluaXRpYWxOYXZpZ2F0aW9uKCl7dGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYXNSZXF1ZXN0ZWROYXZpZ2F0aW9ufHx0aGlz''@;'; put 'put ''Lm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSxlRix0aGlzLnN0YXRlTWFuYWdlci5yZXN0b3JlZFN0YXRlKCkpfXNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpe3RoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPz89''@;'; put 'put ''dGhpcy5zdGF0ZU1hbmFnZXIucmVnaXN0ZXJOb25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VMaXN0ZW5lcigoZSxyLGkpPT57dGhpcy5uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKGUsaSxyKX0pfW5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoZSxyLGkpe2NvbnN0IGE9e3JlcGxhY2VVcmw6''@;'; put 'put ''ITB9LGM9aT8ubmF2aWdhdGlvbklkP2k6bnVsbDtpZihpKXtjb25zdCBDPXsuLi5pfTtkZWxldGUgQy5uYXZpZ2F0aW9uSWQsZGVsZXRlIEMuXHUwMjc1cm91dGVyUGFnZUlkLDAhPT1PYmplY3Qua2V5cyhDKS5sZW5ndGgmJihhLnN0YXRlPUMpfWNvbnN0IG09dGhpcy5wYXJzZVVybChlKTt0''@;'; put 'put ''aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihtLHIsYyxhKX1nZXQgdXJsKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3VycmVudFVybFRyZWUpfWdldEN1cnJlbnROYXZpZ2F0aW9uKCl7cmV0dXJuIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnROYXZpZ2F0aW9ufWdl''@;'; put 'put ''dCBsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9ufXJlc2V0Q29uZmlnKGUpe3RoaXMuY29uZmlnPWUubWFwKEwkKSx0aGlzLm5hdmlnYXRlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlz''@;'; put 'put ''cG9zZSgpfWRpc3Bvc2UoKXt0aGlzLl9ldmVudHMudW5zdWJzY3JpYmUoKSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uJiYodGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJz''@;'; put 'put ''Y3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITAsdGhpcy5ldmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1jcmVhdGVVcmxUcmVlKGUscj17fSl7Y29uc3R7cmVsYXRp''@;'; put 'put ''dmVUbzppLHF1ZXJ5UGFyYW1zOmEsZnJhZ21lbnQ6YyxxdWVyeVBhcmFtc0hhbmRsaW5nOm0scHJlc2VydmVGcmFnbWVudDpDfT1yLFA9Qz90aGlzLmN1cnJlbnRVcmxUcmVlLmZyYWdtZW50OmM7bGV0IEosWT1udWxsO3N3aXRjaChtPz90aGlzLm9wdGlvbnMuZGVmYXVsdFF1ZXJ5UGFyYW1z''@;'; put 'put ''SGFuZGxpbmcpe2Nhc2UibWVyZ2UiOlk9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uYX07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6WT10aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zO2JyZWFrO2RlZmF1bHQ6WT1hfHxudWxsfW51bGwhPT1ZJiYoWT10aGlzLnJl''@;'; put 'put ''bW92ZUVtcHR5UHJvcHMoWSkpO3RyeXtKPURkZShpP2kuc25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290KX1jYXRjaHsoInN0cmluZyIhPXR5cGVvZiBlWzBdfHwiLyIhPT1lWzBdWzBdKSYmKGU9W10pLEo9dGhpcy5jdXJyZW50VXJsVHJlZS5yb290fXJldHVybiBJZGUo''@;'; put 'put ''SixlLFksUD8/bnVsbCl9bmF2aWdhdGVCeVVybChlLHI9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe2NvbnN0IGk9VTkoZSk/ZTp0aGlzLnBhcnNlVXJsKGUpLGE9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGksdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4gdGhpcy5zY2hlZHVsZU5h''@;'; put 'put ''dmlnYXRpb24oYSxlRixudWxsLHIpfW5hdmlnYXRlKGUscj17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7cmV0dXJuIGZ1bmN0aW9uIHVQZShuKXtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihudWxsPT1uW3RdKXRocm93IG5ldyBrcig0MDA4LCExKX0oZSksdGhpcy5uYXZpZ2F0ZUJ5''@;'; put 'put ''VXJsKHRoaXMuY3JlYXRlVXJsVHJlZShlLHIpLHIpfXNlcmlhbGl6ZVVybChlKXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShlKX1wYXJzZVVybChlKXt0cnl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlKX1jYXRjaHtyZXR1cm4gdGhpcy51cmxTZXJpYWxp''@;'; put 'put ''emVyLnBhcnNlKCIvIil9fWlzQWN0aXZlKGUscil7bGV0IGk7aWYoaT0hMD09PXI/ey4uLmxQZX06ITE9PT1yP3suLi5jUGV9OnIsVTkoZSkpcmV0dXJuIHdkZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGUsaSk7Y29uc3QgYT10aGlzLnBhcnNlVXJsKGUpO3JldHVybiB3ZGUodGhpcy5jdXJyZW50''@;'; put 'put ''VXJsVHJlZSxhLGkpfXJlbW92ZUVtcHR5UHJvcHMoZSl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLnJlZHVjZSgocixbaSxhXSk9PihudWxsIT1hJiYocltpXT1hKSxyKSx7fSl9c2NoZWR1bGVOYXZpZ2F0aW9uKGUscixpLGEsYyl7aWYodGhpcy5kaXNwb3NlZClyZXR1cm4gUHJvbWlzZS5y''@;'; put 'put ''ZXNvbHZlKCExKTtsZXQgbSxDLFA7Yz8obT1jLnJlc29sdmUsQz1jLnJlamVjdCxQPWMucHJvbWlzZSk6UD1uZXcgUHJvbWlzZSgoSixjZSk9PnttPUosQz1jZX0pO2NvbnN0IFk9dGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7cmV0dXJuIGRoZSh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9''@;'; put 'put ''PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShZKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOnIscmVzdG9yZWRTdGF0ZTppLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUsY3VycmVudFJhd1VybDp0aGlzLmN1''@;'; put 'put ''cnJlbnRVcmxUcmVlLHJhd1VybDplLGV4dHJhczphLHJlc29sdmU6bSxyZWplY3Q6Qyxwcm9taXNlOlAsY3VycmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9KSxQLmNhdGNoKEo9PlByb21pc2UucmVqZWN0''@;'; put 'put ''KEopKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7dmFyIG13PWZ1bmN0aW9uKG4pe3JldHVybiBuLmxp''@;'; put 'put ''Z2h0PSJsaWdodCIsbi5kYXJrPSJkYXJrIixufShtd3x8e30pLGhoZT1kKDU1MTg4KSxoUGU9ZCg3ODc1NSk7Y29uc3QgeiQ9e3VzZXJzX2FsbG93ZWQ6MSx2aWV3ZXJfcm93c19hbGxvd2VkOjE1LGVkaXRvcl9yb3dzX2FsbG93ZWQ6MTUsc3RhZ2Vfcm93c19hbGxvd2VkOjEvMCxoaXN0b3J5''@;'; put 'put ''X3Jvd3NfYWxsb3dlZDoxNSxzdWJtaXRfcm93c19saW1pdDo1LHZpZXdib3hfbGltaXQ6MSxsaW5lYWdlX2RhaWx5X2xpbWl0OjMsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MzUsdmlld2JveDohMCxmaWxlVXBsb2FkOiExLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfTt2YXIgZDI9ZnVu''@;'; put 'put ''Y3Rpb24obil7cmV0dXJuIG5bbi52aWV3ZXJfcm93c19hbGxvd2VkPTBdPSJ2aWV3ZXJfcm93c19hbGxvd2VkIixuW24uZWRpdG9yX3Jvd3NfYWxsb3dlZD0xXT0iZWRpdG9yX3Jvd3NfYWxsb3dlZCIsbltuLnN0YWdlX3Jvd3NfYWxsb3dlZD0yXT0ic3RhZ2Vfcm93c19hbGxvd2VkIixuW24u''@;'; put 'put ''aGlzdG9yeV9yb3dzX2FsbG93ZWQ9M109Imhpc3Rvcnlfcm93c19hbGxvd2VkIixuW24uc3VibWl0X3Jvd3NfbGltaXQ9NF09InN1Ym1pdF9yb3dzX2xpbWl0IixuW24udGFibGVzX2luX2xpYnJhcnlfbGltaXQ9NV09InRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IixuW24udmlld2JveD02XT0i''@;'; put 'put ''dmlld2JveCIsbltuLnZpZXdib3hfbGltaXQ9N109InZpZXdib3hfbGltaXQiLG5bbi5saW5lYWdlX2RhaWx5X2xpbWl0PThdPSJsaW5lYWdlX2RhaWx5X2xpbWl0IixuW24uZmlsZVVwbG9hZD05XT0iZmlsZVVwbG9hZCIsbltuLmVkaXRSZWNvcmQ9MTBdPSJlZGl0UmVjb3JkIixuW24uYWRk''@;'; put 'put ''UmVjb3JkPTExXT0iYWRkUmVjb3JkIixufShkMnx8e30pLGgyPWQoMzczNCksZmhlPWQubihoMiksQzE9ZCgxMzI0Nyk7bGV0IFo5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt9c2V0RGNBZGFwdGVyU2V0dGluZ3MoZSl7dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1lfWdldERjQWRhcHRl''@;'; put 'put ''clNldHRpbmdzKCl7cmV0dXJuIHRoaXMuZGNBZGFwdGVyU2V0dGluZ3N9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290''@;'; put 'put ''In0pfX1yZXR1cm4gbn0pKCksVSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudXNlckNoYW5nZT1uZXcgdXJ9c2V0IHVzZXIoZSl7dGhpcy5fdXNlcj1lLHRoaXMudXNlckNoYW5nZS5uZXh0KGUpfWdldCB1c2VyKCl7cmV0dXJuIHRoaXMuX3VzZXJ9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pfX1yZXR1cm4gbn0pKCk7Y2xhc3MgaEZ7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRTZXR0aW5ncz17cGVyc2lzdFNlbGVj''@;'; put 'put ''dGVkVGhlbWU6ITAsc2VsZWN0ZWRUaGVtZTptdy5saWdodH0sdGhpcy5zZXR0aW5ncz1uZXcgeGkodGhpcy5kZWZhdWx0U2V0dGluZ3MpLHRoaXMucmVzdG9yZUFwcFNldHRpbmdzKCl9cmVzdG9yZUFwcFNldHRpbmdzKCl7dHJ5e2NvbnN0IHQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFwcC1z''@;'; put 'put ''ZXR0aW5ncyIpO2lmKHQpe2NvbnN0IGU9SlNPTi5wYXJzZSh0KTt0aGlzLnNldEFwcFNldHRpbmdzKGUpfWVsc2UgY29uc29sZS5pbmZvKCJObyBhcHAgc2V0dGluZ3Mgc3RvcmVkIGluIHRoZSBsb2NhbFN0b3JhZ2UsIHdlIHdpbGwgc2V0IHRvIGRlZmF1bHQgdmFsdWVzLiIpfWNhdGNoKHQp''@;'; put 'put ''e2NvbnNvbGUud2FybigiRXJyb3IgcmVzdG9yaW5nIHNldHRpbmdzIGZyb20gbG9jYWwgc3RvcmdhZS4iLHQpfX1zdG9yZUFwcFNldHRpbmdzKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFwcC1zZXR0aW5ncyIsSlNPTi5zdHJpbmdpZnkodGhpcy5zZXR0aW5ncy52YWx1ZSkpfXNldEFwcFNl''@;'; put 'put ''dHRpbmdzKHQpe3RoaXMuc2V0dGluZ3MubmV4dCh7Li4udGhpcy5zZXR0aW5ncy52YWx1ZSwuLi50fSksdGhpcy5zdG9yZUFwcFNldHRpbmdzKCl9fWxldCBTYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPWUsdGhpcy5vblNpZGViYXJUb2dn''@;'; put 'put ''bGU9bmV3IFlyLHRoaXMub25TdGFydHVwRGF0YUxvYWRlZD1uZXcgWXIsdGhpcy5vblNob3dBYm9ydE1vZGFsPW5ldyBZcix0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW49bmV3IFlyLHRoaXMub25EZW1vTGltaXRNb2RhbFNob3c9bmV3IFlyLHRoaXMudmlld0xhc3RVcmw9bnVsbCx0aGlzLnNp''@;'; put 'put ''ZGViYXJDbG9zZUxpbWl0PTEyODAsdGhpcy5kYXJrTW9kZT1uZXcgeGkoITEpfXRvZ2dsZURhcmtNb2RlKGUpe3RoaXMuZGFya01vZGUubmV4dChlKSxlP2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUiLCJkYXJrIik6ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNk''@;'; put 'put ''cy10aGVtZSIsImxpZ2h0IiksdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0QXBwU2V0dGluZ3Moe3NlbGVjdGVkVGhlbWU6ZT9tdy5kYXJrOm13LmxpZ2h0fSl9c2hvd0RlbW9MaW1pdE1vZGFsKGUpe3RoaXMub25EZW1vTGltaXRNb2RhbFNob3cuZW1pdChlKX1zaG93SW5mb01vZGFsKGU9''@;'; put 'put ''IkluZm8iLHIpe3RoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KHttb2RhbFRpdGxlOmUsbWVzc2FnZTpyLHNhc1NlcnZpY2U6IiIsZGV0YWlsczpudWxsfSl9c2hvd0Fib3J0TW9kYWwoZSxyLGksYT12b2lkIDApe2l8fChpPW51bGwpO2xldCBjPXtzYXNTZXJ2aWNlOmUsbWVzc2FnZTpyLGRl''@;'; put 'put ''dGFpbHM6aX07YSYmKGMubW9kYWxUaXRsZT1hKSx0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdChjKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMub25SZXF1ZXN0c01vZGFsT3Blbi5lbWl0KCEwKX1jYXRjaFJlc3BvbnNlRXJyb3IoZSxyKXtsZXQgaT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1''@;'; put 'put ''cnJlZCI7aWYoci5lcnJvcil7bGV0IGE7aT1yLmVycm9yLm1lc3NhZ2Usci5lcnJvci5kZXRhaWxzJiZyLmVycm9yLmRldGFpbHMubG9nJiYoYT1yLmVycm9yLmRldGFpbHMubG9nKSwoIWl8fGkudHJpbSgpLmxlbmd0aDwxKSYmKGk9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiKSx0aGlz''@;'; put 'put ''LnNob3dBYm9ydE1vZGFsKGUsaSx7TE9HOmF9LCJSZXF1ZXN0IGVycm9yIil9ZWxzZSB0aGlzLnNob3dBYm9ydE1vZGFsKGUsaSl9dG9nZ2xlU2lkZWJhcigpe3RoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoKX1jbG9zZVNpZGViYXIoKXt3aW5kb3cuaW5uZXJXaWR0aDx0aGlzLnNpZGViYXJD''@;'; put 'put ''bG9zZUxpbWl0JiZ0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KHtvcGVuOiExfSl9b3BlblNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KHtvcGVuOiEwfSl9c3RhcnR1cERhdGFMb2FkZWQoKXt0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQuZW1pdCgpfWRpc3BhdGNoRXZlbnQo''@;'; put 'put ''ZSl7bGV0IHI7ImZ1bmN0aW9uIj09dHlwZW9mIEV2ZW50P3I9bmV3IEV2ZW50KGUpOihyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHIuaW5pdEV2ZW50KGUsITAsITApKSx3aW5kb3cuZGlzcGF0Y2hFdmVudChyKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0''@;'; put 'put ''dXJuIG5ldyhyfHxuKShPcihoRikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIG59KSgpO2NsYXNzIGZGe31jbGFzcyBwRnt9Y2xhc3MgWDN7aGVhZGVycztub3JtYWxpemVkTmFtZXM9''@;'; put 'put ''bmV3IE1hcDtsYXp5SW5pdDtsYXp5VXBkYXRlPW51bGw7Y29uc3RydWN0b3IodCl7dD8ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57Y29uc3Qgcj1lLmluZGV4T2YoIjoiKTtpZihyPjAp''@;'; put 'put ''e2NvbnN0IGk9ZS5zbGljZSgwLHIpLGE9ZS5zbGljZShyKzEpLnRyaW0oKTt0aGlzLmFkZEhlYWRlckVudHJ5KGksYSl9fSl9OnR5cGVvZiBIZWFkZXJzPCJ1IiYmdCBpbnN0YW5jZW9mIEhlYWRlcnM/KHRoaXMuaGVhZGVycz1uZXcgTWFwLHQuZm9yRWFjaCgoZSxyKT0+e3RoaXMuYWRkSGVh''@;'; put 'put ''ZGVyRW50cnkocixlKX0pKTp0aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2Uscl0pPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGUscil9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKHQpe3JldHVybiB0aGlzLmlu''@;'; put 'put ''aXQoKSx0aGlzLmhlYWRlcnMuaGFzKHQudG9Mb3dlckNhc2UoKSl9Z2V0KHQpe3RoaXMuaW5pdCgpO2NvbnN0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZy''@;'; put 'put ''b20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxl''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9y''@;'; put 'put ''bWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIFgzP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlV''@;'; put 'put ''cGRhdGUuZm9yRWFjaCh0PT50aGlzLmFwcGx5VXBkYXRlKHQpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKHQpe3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMu''@;'; put 'put ''bm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KX1jbG9uZSh0KXtjb25zdCBlPW5ldyBYMztyZXR1cm4gZS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgWDM/dGhpcy5sYXp5SW5pdDp0aGlzLGUubGF6eVVwZGF0''@;'; put 'put ''ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFt0XSksZX1hcHBseVVwZGF0ZSh0KXtjb25zdCBlPXQubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IHI9dC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIHImJihyPVtyXSksMD09PXIubGVu''@;'; put 'put ''Z3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUodC5uYW1lLGUpO2NvbnN0IGk9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtpLnB1c2goLi4uciksdGhpcy5oZWFkZXJzLnNldChlLGkpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgYT10LnZhbHVl''@;'; put 'put ''O2lmKGEpe2xldCBjPXRoaXMuaGVhZGVycy5nZXQoZSk7aWYoIWMpcmV0dXJuO2M9Yy5maWx0ZXIobT0+LTE9PT1hLmluZGV4T2YobSkpLDA9PT1jLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQo''@;'; put 'put ''ZSxjKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1hZGRIZWFkZXJFbnRyeSh0LGUpe2NvbnN0IHI9dC50b0xvd2VyQ2FzZSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0LHIpLHRoaXMuaGVhZGVycy5oYXMocik/dGhp''@;'; put 'put ''cy5oZWFkZXJzLmdldChyKS5wdXNoKGUpOnRoaXMuaGVhZGVycy5zZXQocixbZV0pfXNldEhlYWRlckVudHJpZXModCxlKXtjb25zdCByPShBcnJheS5pc0FycmF5KGUpP2U6W2VdKS5tYXAoYT0+YS50b1N0cmluZygpKSxpPXQudG9Mb3dlckNhc2UoKTt0aGlzLmhlYWRlcnMuc2V0KGksciks''@;'; put 'put ''dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQsaSl9Zm9yRWFjaCh0KXt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSl9fWNsYXNz''@;'; put 'put ''IGZQZXtlbmNvZGVLZXkodCl7cmV0dXJuIGdoZSh0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gZ2hlKHQpfWRlY29kZUtleSh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWRlY29kZVZhbHVlKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9fWNvbnN0IGdQZT0vJShcZFth''@;'; put 'put ''LWYwLTldKS9naSxtUGU9ezQwOiJAIiwiM0EiOiI6IiwyNDoiJCIsIjJDIjoiLCIsIjNCIjoiOyIsIjNEIjoiPSIsIjNGIjoiPyIsIjJGIjoiLyJ9O2Z1bmN0aW9uIGdoZShuKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG4pLnJlcGxhY2UoZ1BlLCh0LGUpPT5tUGVbZV0/P3QpfWZ1bmN0''@;'; put 'put ''aW9uIGdGKG4pe3JldHVybmAke259YH1jbGFzcyBDNnttYXA7ZW5jb2Rlcjt1cGRhdGVzPW51bGw7Y2xvbmVGcm9tPW51bGw7Y29uc3RydWN0b3IodD17fSl7aWYodGhpcy5lbmNvZGVyPXQuZW5jb2Rlcnx8bmV3IGZQZSx0LmZyb21TdHJpbmcpe2lmKHQuZnJvbU9iamVjdCl0aHJvdyBuZXcg''@;'; put 'put ''a3IoMjgwNSwhMSk7dGhpcy5tYXA9ZnVuY3Rpb24gcFBlKG4sdCl7Y29uc3QgZT1uZXcgTWFwO3JldHVybiBuLmxlbmd0aD4wJiZuLnJlcGxhY2UoL15cPy8sIiIpLnNwbGl0KCImIikuZm9yRWFjaChpPT57Y29uc3QgYT1pLmluZGV4T2YoIj0iKSxbYyxtXT0tMT09YT9bdC5kZWNvZGVLZXko''@;'; put 'put ''aSksIiJdOlt0LmRlY29kZUtleShpLnNsaWNlKDAsYSkpLHQuZGVjb2RlVmFsdWUoaS5zbGljZShhKzEpKV0sQz1lLmdldChjKXx8W107Qy5wdXNoKG0pLGUuc2V0KGMsQyl9KSxlfSh0LmZyb21TdHJpbmcsdGhpcy5lbmNvZGVyKX1lbHNlIHQuZnJvbU9iamVjdD8odGhpcy5tYXA9bmV3IE1h''@;'; put 'put ''cCxPYmplY3Qua2V5cyh0LmZyb21PYmplY3QpLmZvckVhY2goZT0+e2NvbnN0IHI9dC5mcm9tT2JqZWN0W2VdLGk9QXJyYXkuaXNBcnJheShyKT9yLm1hcChnRik6W2dGKHIpXTt0aGlzLm1hcC5zZXQoZSxpKX0pKTp0aGlzLm1hcD1udWxsfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhp''@;'; put 'put ''cy5tYXAuaGFzKHQpfWdldCh0KXt0aGlzLmluaXQoKTtjb25zdCBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRo''@;'; put 'put ''aXMubWFwLmtleXMoKSl9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX1hcHBlbmRBbGwodCl7Y29uc3QgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChyPT57Y29uc3QgaT10W3JdO0FycmF5LmlzQXJyYXkoaSk/aS5mb3JF''@;'; put 'put ''YWNoKGE9PntlLnB1c2goe3BhcmFtOnIsdmFsdWU6YSxvcDoiYSJ9KX0pOmUucHVzaCh7cGFyYW06cix2YWx1ZTppLG9wOiJhIn0pfSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKHQ9Pntjb25zdCBlPXRoaXMuZW5jb2Rlci5lbmNvZGVLZXkodCk7cmV0dXJuIHRoaXMubWFwLmdldCh0KS5tYXAocj0+ZSsiPSIrdGhpcy5lbmNv''@;'; put 'put ''ZGVyLmVuY29kZVZhbHVlKHIpKS5qb2luKCImIil9KS5maWx0ZXIodD0+IiIhPT10KS5qb2luKCImIil9Y2xvbmUodCl7Y29uc3QgZT1uZXcgQzYoe2VuY29kZXI6dGhpcy5lbmNvZGVyfSk7cmV0dXJuIGUuY2xvbmVGcm9tPXRoaXMuY2xvbmVGcm9tfHx0aGlzLGUudXBkYXRlcz0odGhpcy51''@;'; put 'put ''cGRhdGVzfHxbXSkuY29uY2F0KHQpLGV9aW5pdCgpe251bGw9PT10aGlzLm1hcCYmKHRoaXMubWFwPW5ldyBNYXApLG51bGwhPT10aGlzLmNsb25lRnJvbSYmKHRoaXMuY2xvbmVGcm9tLmluaXQoKSx0aGlzLmNsb25lRnJvbS5rZXlzKCkuZm9yRWFjaCh0PT50aGlzLm1hcC5zZXQodCx0aGlz''@;'; put 'put ''LmNsb25lRnJvbS5tYXAuZ2V0KHQpKSksdGhpcy51cGRhdGVzLmZvckVhY2godD0+e3N3aXRjaCh0Lm9wKXtjYXNlImEiOmNhc2UicyI6Y29uc3QgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKGdGKHQudmFsdWUpKSx0aGlzLm1hcC5zZXQo''@;'; put 'put ''dC5wYXJhbSxlKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PXQudmFsdWUpe3RoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKTticmVha317bGV0IHI9dGhpcy5tYXAuZ2V0KHQucGFyYW0pfHxbXTtjb25zdCBpPXIuaW5kZXhPZihnRih0LnZhbHVlKSk7LTEhPT1pJiZyLnNwbGljZShpLDEpLHIu''@;'; put 'put ''bGVuZ3RoPjA/dGhpcy5tYXAuc2V0KHQucGFyYW0scik6dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pfX19KSx0aGlzLmNsb25lRnJvbT10aGlzLnVwZGF0ZXM9bnVsbCl9fWNsYXNzIHZQZXttYXA9bmV3IE1hcDtzZXQodCxlKXtyZXR1cm4gdGhpcy5tYXAuc2V0KHQsZSksdGhpc31nZXQodCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubWFwLmhhcyh0KXx8dGhpcy5tYXAuc2V0KHQsdC5kZWZhdWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KHQpfWRlbGV0ZSh0KXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKHQpLHRoaXN9aGFzKHQpe3JldHVybiB0aGlzLm1hcC5oYXModCl9a2V5cygpe3JldHVybiB0aGlzLm1h''@;'; put 'put ''cC5rZXlzKCl9fWZ1bmN0aW9uIG1oZShuKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIHZoZShuKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZuIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiB5aGUobil7cmV0dXJuIHR5''@;'; put 'put ''cGVvZiBGb3JtRGF0YTwidSImJm4gaW5zdGFuY2VvZiBGb3JtRGF0YX1jb25zdCB3VD0iQ29udGVudC1UeXBlIixXJD0iWC1SZXF1ZXN0LVVSTCIsX2hlPSJ0ZXh0L3BsYWluIixiaGU9ImFwcGxpY2F0aW9uL2pzb24iLHdoZT1gJHtiaGV9LCAke19oZX0sICovKmA7Y2xhc3MgQ1R7dXJsO2Jv''@;'; put 'put ''ZHk9bnVsbDtoZWFkZXJzO2NvbnRleHQ7cmVwb3J0UHJvZ3Jlc3M9ITE7d2l0aENyZWRlbnRpYWxzPSExO3Jlc3BvbnNlVHlwZT0ianNvbiI7bWV0aG9kO3BhcmFtczt1cmxXaXRoUGFyYW1zO3RyYW5zZmVyQ2FjaGU7Y29uc3RydWN0b3IodCxlLHIsaSl7bGV0IGE7aWYodGhpcy51cmw9ZSx0''@;'; put 'put ''aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24geVBlKG4pe3N3aXRjaChuKXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxpPyh0aGlzLmJv''@;'; put 'put ''ZHk9dm9pZCAwIT09cj9yOm51bGwsYT1pKTphPXIsYSYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFhLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhYS53aXRoQ3JlZGVudGlhbHMsYS5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1hLnJlc3BvbnNlVHlwZSks''@;'; put 'put ''YS5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPWEuaGVhZGVycyksYS5jb250ZXh0JiYodGhpcy5jb250ZXh0PWEuY29udGV4dCksYS5wYXJhbXMmJih0aGlzLnBhcmFtcz1hLnBhcmFtcyksdGhpcy50cmFuc2ZlckNhY2hlPWEudHJhbnNmZXJDYWNoZSksdGhpcy5oZWFkZXJzPz89bmV3IFgzLHRo''@;'; put 'put ''aXMuY29udGV4dD8/PW5ldyB2UGUsdGhpcy5wYXJhbXMpe2NvbnN0IGM9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09Yy5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtjb25zdCBtPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PW0/Ij8iOm08''@;'; put 'put ''ZS5sZW5ndGgtMT8iJiI6IiIpK2N9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IEM2LHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5fHxtaGUodGhpcy5ib2R5KXx8dmhlKHRoaXMu''@;'; put 'put ''Ym9keSl8fHloZSh0aGlzLmJvZHkpfHxmdW5jdGlvbiBfUGUobil7cmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiJiZuIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfSh0aGlzLmJvZHkpP3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBDNj90aGlzLmJvZHkudG9TdHJp''@;'; put 'put ''bmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVy''@;'; put 'put ''biBudWxsPT09dGhpcy5ib2R5fHx5aGUodGhpcy5ib2R5KT9udWxsOnZoZSh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOm1oZSh0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/X2hlOnRoaXMuYm9keSBpbnN0YW5jZW9mIEM2PyJhcHBsaWNhdGlvbi94''@;'; put 'put ''LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/YmhlOm51bGx9Y2xvbmUodD17fSl7Y29uc3QgZT10Lm1ldGhvZHx8dGhpcy5t''@;'; put 'put ''ZXRob2Qscj10LnVybHx8dGhpcy51cmwsaT10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsYT10LnRyYW5zZmVyQ2FjaGU/P3RoaXMudHJhbnNmZXJDYWNoZSxjPXZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LG09dC53aXRoQ3JlZGVudGlhbHM/P3RoaXMud2l0aENy''@;'; put 'put ''ZWRlbnRpYWxzLEM9dC5yZXBvcnRQcm9ncmVzcz8/dGhpcy5yZXBvcnRQcm9ncmVzcztsZXQgUD10LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxZPXQucGFyYW1zfHx0aGlzLnBhcmFtcztjb25zdCBKPXQuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT10LnNldEhlYWRlcnMm''@;'; put 'put ''JihQPU9iamVjdC5rZXlzKHQuc2V0SGVhZGVycykucmVkdWNlKChjZSxmZSk9PmNlLnNldChmZSx0LnNldEhlYWRlcnNbZmVdKSxQKSksdC5zZXRQYXJhbXMmJihZPU9iamVjdC5rZXlzKHQuc2V0UGFyYW1zKS5yZWR1Y2UoKGNlLGZlKT0+Y2Uuc2V0KGZlLHQuc2V0UGFyYW1zW2ZlXSksWSkp''@;'; put 'put ''LG5ldyBDVChlLHIsYyx7cGFyYW1zOlksaGVhZGVyczpQLGNvbnRleHQ6SixyZXBvcnRQcm9ncmVzczpDLHJlc3BvbnNlVHlwZTppLHdpdGhDcmVkZW50aWFsczptLHRyYW5zZmVyQ2FjaGU6YX0pfX12YXIgUzY9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5TZW50PTBdPSJTZW50IixuW24uVXBs''@;'; put 'put ''b2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixuW24uUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIixuW24uRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsbltuLlVzZXI9NV09IlVzZXIiLG59KFM2''@;'; put 'put ''fHx7fSk7Y2xhc3MgWiR7aGVhZGVycztzdGF0dXM7c3RhdHVzVGV4dDt1cmw7b2s7dHlwZTtjb25zdHJ1Y3Rvcih0LGU9MjAwLHI9Ik9LIil7dGhpcy5oZWFkZXJzPXQuaGVhZGVyc3x8bmV3IFgzLHRoaXMuc3RhdHVzPXZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOmUsdGhpcy5zdGF0dXNU''@;'; put 'put ''ZXh0PXQuc3RhdHVzVGV4dHx8cix0aGlzLnVybD10LnVybHx8bnVsbCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMH19Y2xhc3MgdkYgZXh0ZW5kcyBaJHtjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KX10eXBlPVM2LlJlc3BvbnNlSGVhZGVyO2Nsb25lKHQ9e30p''@;'; put 'put ''e3JldHVybiBuZXcgdkYoe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9''@;'; put 'put ''fWNsYXNzIFNUIGV4dGVuZHMgWiR7Ym9keTtjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLmJvZHk9dm9pZCAwIT09dC5ib2R5P3QuYm9keTpudWxsfXR5cGU9UzYuUmVzcG9uc2U7Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBTVCh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRo''@;'; put 'put ''aXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyB2''@;'; put 'put ''dyBleHRlbmRzIFoke25hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIjttZXNzYWdlO2Vycm9yO29rPSExO2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJp''@;'; put 'put ''bmcgcGFyc2luZyBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifTogJHt0LnN0YXR1c30gJHt0LnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPXQuZXJyb3J8fG51bGx9fWZ1bmN0aW9uIFkkKG4s''@;'; put 'put ''dCl7cmV0dXJue2JvZHk6dCxoZWFkZXJzOm4uaGVhZGVycyxjb250ZXh0Om4uY29udGV4dCxvYnNlcnZlOm4ub2JzZXJ2ZSxwYXJhbXM6bi5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOm4u''@;'; put 'put ''d2l0aENyZWRlbnRpYWxzLHRyYW5zZmVyQ2FjaGU6bi50cmFuc2ZlckNhY2hlfX1sZXQgRyQ9KCgpPT57Y2xhc3MgbntoYW5kbGVyO2NvbnN0cnVjdG9yKGUpe3RoaXMuaGFuZGxlcj1lfXJlcXVlc3QoZSxyLGk9e30pe2xldCBhO2lmKGUgaW5zdGFuY2VvZiBDVClhPWU7ZWxzZXtsZXQgQyxQ''@;'; put 'put ''O0M9aS5oZWFkZXJzIGluc3RhbmNlb2YgWDM/aS5oZWFkZXJzOm5ldyBYMyhpLmhlYWRlcnMpLGkucGFyYW1zJiYoUD1pLnBhcmFtcyBpbnN0YW5jZW9mIEM2P2kucGFyYW1zOm5ldyBDNih7ZnJvbU9iamVjdDppLnBhcmFtc30pKSxhPW5ldyBDVChlLHIsdm9pZCAwIT09aS5ib2R5P2kuYm9k''@;'; put 'put ''eTpudWxsLHtoZWFkZXJzOkMsY29udGV4dDppLmNvbnRleHQscGFyYW1zOlAscmVwb3J0UHJvZ3Jlc3M6aS5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aS5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aS53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTppLnRy''@;'; put 'put ''YW5zZmVyQ2FjaGV9KX1jb25zdCBjPWdvKGEpLnBpcGUoY3coQz0+dGhpcy5oYW5kbGVyLmhhbmRsZShDKSkpO2lmKGUgaW5zdGFuY2VvZiBDVHx8ImV2ZW50cyI9PT1pLm9ic2VydmUpcmV0dXJuIGM7Y29uc3QgbT1jLnBpcGUocmMoQz0+QyBpbnN0YW5jZW9mIFNUKSk7c3dpdGNoKGkub2Jz''@;'; put 'put ''ZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChhLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIG0ucGlwZShYYShDPT57aWYobnVsbCE9PUMuYm9keSYmIShDLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IGtyKDI4MDYsITEpO3JldHVy''@;'; put 'put ''biBDLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gbS5waXBlKFhhKEM9PntpZihudWxsIT09Qy5ib2R5JiYhKEMuYm9keSBpbnN0YW5jZW9mIEJsb2IpKXRocm93IG5ldyBrcigyODA3LCExKTtyZXR1cm4gQy5ib2R5fSkpO2Nhc2UidGV4dCI6cmV0dXJuIG0ucGlwZShYYShDPT57aWYobnVs''@;'; put 'put ''bCE9PUMuYm9keSYmInN0cmluZyIhPXR5cGVvZiBDLmJvZHkpdGhyb3cgbmV3IGtyKDI4MDgsITEpO3JldHVybiBDLmJvZHl9KSk7ZGVmYXVsdDpyZXR1cm4gbS5waXBlKFhhKEM9PkMuYm9keSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBtO2RlZmF1bHQ6dGhyb3cgbmV3IGtyKDI4MDksITEp''@;'; put 'put ''fX1kZWxldGUoZSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLGUscil9Z2V0KGUscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixlLHIpfWhlYWQoZSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixlLHIpfWpzb25wKGUscil7cmV0dXJuIHRoaXMucmVx''@;'; put 'put ''dWVzdCgiSlNPTlAiLGUse3BhcmFtczoobmV3IEM2KS5hcHBlbmQociwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhlLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGUscil9cGF0Y2goZSxyLGk9e30pe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixlLFkkKGkscikpfXBvc3QoZSxyLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGUsWSQoaSxyKSl9cHV0KGUscixpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGUsWSQoaSxyKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKGZGKSl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y29uc3QgTWhlPW5ldyB3cigiIik7ZnVuY3Rpb24geGhlKG4sdCl7cmV0dXJuIHQobil9ZnVuY3Rpb24geFBlKG4sdCl7''@;'; put 'put ''cmV0dXJuKGUscik9PnQuaW50ZXJjZXB0KGUse2hhbmRsZTppPT5uKGkscil9KX1jb25zdCBUUGU9bmV3IHdyKCIiKSxNVD1uZXcgd3IoIiIpLEFQZT1uZXcgd3IoIiIpLEVoZT1uZXcgd3IoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiEwfSk7ZnVuY3Rpb24ga1BlKCl7bGV0''@;'; put 'put ''IG49bnVsbDtyZXR1cm4odCxlKT0+e251bGw9PT1uJiYobj0oSm4oVFBlLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoeFBlLHhoZSkpO2NvbnN0IHI9Sm4oVTApO2lmKEpuKEVoZSkpe2NvbnN0IGE9ci5hZGQoKTtyZXR1cm4gbih0LGUpLnBpcGUob1QoKCk9PnIucmVtb3ZlKGEp''@;'; put 'put ''KSl9cmV0dXJuIG4odCxlKX19bGV0IFRoZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZkZ7YmFja2VuZDtpbmplY3RvcjtjaGFpbj1udWxsO3BlbmRpbmdUYXNrcz1KbihVMCk7Y29udHJpYnV0ZVRvU3RhYmlsaXR5PUpuKEVoZSk7Y29uc3RydWN0b3IoZSxyKXtzdXBlcigpLHRoaXMuYmFja2Vu''@;'; put 'put ''ZD1lLHRoaXMuaW5qZWN0b3I9cn1oYW5kbGUoZSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IHI9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldChNVCksLi4udGhpcy5pbmplY3Rvci5nZXQoQVBlLFtdKV0pKTt0aGlzLmNoYWluPXIucmVkdWNlUmlnaHQoKGks''@;'; put 'put ''YSk9PmZ1bmN0aW9uIEVQZShuLHQsZSl7cmV0dXJuKHIsaSk9PlAxKGUsKCk9PnQocixhPT5uKGEsaSkpKX0oaSxhLHRoaXMuaW5qZWN0b3IpLHhoZSl9aWYodGhpcy5jb250cmlidXRlVG9TdGFiaWxpdHkpe2NvbnN0IHI9dGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7cmV0dXJuIHRoaXMuY2hh''@;'; put 'put ''aW4oZSxpPT50aGlzLmJhY2tlbmQuaGFuZGxlKGkpKS5waXBlKG9UKCgpPT50aGlzLnBlbmRpbmdUYXNrcy5yZW1vdmUocikpKX1yZXR1cm4gdGhpcy5jaGFpbihlLHI9PnRoaXMuYmFja2VuZC5oYW5kbGUocikpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxu''@;'; put 'put ''KShPcihwRiksT3IodWMpKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pfXJldHVybiBufSkoKTtjb25zdCBMUGU9L15cKVxdXH0nLD9cbi8sT1BlPVJlZ0V4cChgXiR7VyR9OmAsIm0iKTtsZXQga2hlPSgoKT0+e2NsYXNzIG57eGhyRmFjdG9y''@;'; put 'put ''eTtjb25zdHJ1Y3RvcihlKXt0aGlzLnhockZhY3Rvcnk9ZX1oYW5kbGUoZSl7aWYoIkpTT05QIj09PWUubWV0aG9kKXRocm93IG5ldyBrcigtMjgwMCwhMSk7Y29uc3Qgcj10aGlzLnhockZhY3Rvcnk7cmV0dXJuKHIuXHUwMjc1bG9hZEltcGw/bzAoci5cdTAyNzVsb2FkSW1wbCgpKTpnbyhu''@;'; put 'put ''dWxsKSkucGlwZShEZCgoKT0+bmV3IEZpKGE9Pntjb25zdCBjPXIuYnVpbGQoKTtpZihjLm9wZW4oZS5tZXRob2QsZS51cmxXaXRoUGFyYW1zKSxlLndpdGhDcmVkZW50aWFscyYmKGMud2l0aENyZWRlbnRpYWxzPSEwKSxlLmhlYWRlcnMuZm9yRWFjaCgoSGUsWGUpPT5jLnNldFJlcXVlc3RI''@;'; put 'put ''ZWFkZXIoSGUsWGUuam9pbigiLCIpKSksZS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fGMuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix3aGUpLCFlLmhlYWRlcnMuaGFzKHdUKSl7Y29uc3QgSGU9ZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1IZSYmYy5zZXRSZXF1ZXN0SGVh''@;'; put 'put ''ZGVyKHdULEhlKX1pZihlLnJlc3BvbnNlVHlwZSl7Y29uc3QgSGU9ZS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtjLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1IZT9IZToidGV4dCJ9Y29uc3QgbT1lLnNlcmlhbGl6ZUJvZHkoKTtsZXQgQz1udWxsO2NvbnN0IFA9KCk9PntpZihudWxsIT09''@;'; put 'put ''QylyZXR1cm4gQztjb25zdCBIZT1jLnN0YXR1c1RleHR8fCJPSyIsWGU9bmV3IFgzKGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHJ0PWZ1bmN0aW9uIFBQZShuKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gbiYmbi5yZXNwb25zZVVSTD9uLnJlc3BvbnNlVVJMOk9QZS50ZXN0KG4uZ2V0QWxs''@;'; put 'put ''UmVzcG9uc2VIZWFkZXJzKCkpP24uZ2V0UmVzcG9uc2VIZWFkZXIoVyQpOm51bGx9KGMpfHxlLnVybDtyZXR1cm4gQz1uZXcgdkYoe2hlYWRlcnM6WGUsc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6SGUsdXJsOnJ0fSksQ30sWT0oKT0+e2xldHtoZWFkZXJzOkhlLHN0YXR1czpYZSxzdGF0''@;'; put 'put ''dXNUZXh0OnJ0LHVybDpkdH09UCgpLGp0PW51bGw7MjA0IT09WGUmJihqdD10eXBlb2YgYy5yZXNwb25zZT4idSI/Yy5yZXNwb25zZVRleHQ6Yy5yZXNwb25zZSksMD09PVhlJiYoWGU9anQ/MjAwOjApO2xldCBGdD1YZT49MjAwJiZYZTwzMDA7aWYoImpzb24iPT09ZS5yZXNwb25zZVR5cGUm''@;'; put 'put ''JiJzdHJpbmciPT10eXBlb2YganQpe2NvbnN0IHBuPWp0O2p0PWp0LnJlcGxhY2UoTFBlLCIiKTt0cnl7anQ9IiIhPT1qdD9KU09OLnBhcnNlKGp0KTpudWxsfWNhdGNoKG9uKXtqdD1wbixGdCYmKEZ0PSExLGp0PXtlcnJvcjpvbix0ZXh0Omp0fSl9fUZ0PyhhLm5leHQobmV3IFNUKHtib2R5''@;'; put 'put ''Omp0LGhlYWRlcnM6SGUsc3RhdHVzOlhlLHN0YXR1c1RleHQ6cnQsdXJsOmR0fHx2b2lkIDB9KSksYS5jb21wbGV0ZSgpKTphLmVycm9yKG5ldyB2dyh7ZXJyb3I6anQsaGVhZGVyczpIZSxzdGF0dXM6WGUsc3RhdHVzVGV4dDpydCx1cmw6ZHR8fHZvaWQgMH0pKX0sSj1IZT0+e2NvbnN0e3Vy''@;'; put 'put ''bDpYZX09UCgpLHJ0PW5ldyB2dyh7ZXJyb3I6SGUsc3RhdHVzOmMuc3RhdHVzfHwwLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOlhlfHx2b2lkIDB9KTthLmVycm9yKHJ0KX07bGV0IGNlPSExO2NvbnN0IGZlPUhlPT57Y2V8fChhLm5leHQoUCgpKSxjZT0h''@;'; put 'put ''MCk7bGV0IFhlPXt0eXBlOlM2LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOkhlLmxvYWRlZH07SGUubGVuZ3RoQ29tcHV0YWJsZSYmKFhlLnRvdGFsPUhlLnRvdGFsKSwidGV4dCI9PT1lLnJlc3BvbnNlVHlwZSYmYy5yZXNwb25zZVRleHQmJihYZS5wYXJ0aWFsVGV4dD1jLnJlc3BvbnNlVGV4''@;'; put 'put ''dCksYS5uZXh0KFhlKX0sQWU9SGU9PntsZXQgWGU9e3R5cGU6UzYuVXBsb2FkUHJvZ3Jlc3MsbG9hZGVkOkhlLmxvYWRlZH07SGUubGVuZ3RoQ29tcHV0YWJsZSYmKFhlLnRvdGFsPUhlLnRvdGFsKSxhLm5leHQoWGUpfTtyZXR1cm4gYy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixZKSxjLmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIoImVycm9yIixKKSxjLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLEopLGMuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLEopLGUucmVwb3J0UHJvZ3Jlc3MmJihjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmZSksbnVsbCE9PW0mJmMudXBsb2FkJiZjLnVw''@;'; put 'put ''bG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsQWUpKSxjLnNlbmQobSksYS5uZXh0KHt0eXBlOlM2LlNlbnR9KSwoKT0+e2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLEopLGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLEopLGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigi''@;'; put 'put ''bG9hZCIsWSksYy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixKKSxlLnJlcG9ydFByb2dyZXNzJiYoYy5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZmUpLG51bGwhPT1tJiZjLnVwbG9hZCYmYy51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEFlKSks''@;'; put 'put ''Yy5yZWFkeVN0YXRlIT09Yy5ET05FJiZjLmFib3J0KCl9fSkpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoT3IoJHVlKSl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y29uc3Qg''@;'; put 'put ''WCQ9bmV3IHdyKCIiKSxEaGU9bmV3IHdyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxJaGU9bmV3IHdyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pO2NsYXNzIFJoZXt9bGV0IE5QZT0oKCk9PntjbGFz''@;'; put 'put ''cyBue2RvYztjb29raWVOYW1lO2xhc3RDb29raWVTdHJpbmc9IiI7bGFzdFRva2VuPW51bGw7cGFyc2VDb3VudD0wO2NvbnN0cnVjdG9yKGUscil7dGhpcy5kb2M9ZSx0aGlzLmNvb2tpZU5hbWU9cn1nZXRUb2tlbigpe2NvbnN0IGU9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gZSE9PXRo''@;'; put 'put ''aXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPVp1ZShlLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWUpLHRoaXMubGFzdFRva2VufXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShP''@;'; put 'put ''cihYcyksT3IoRGhlKSl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7Y29uc3QgVlBlPS9eKD86aHR0cHM/Oik/XC9cLy9pO2Z1bmN0aW9uIEJQZShuLHQpe2lmKCFKbihYJCl8fCJHRVQiPT09bi5tZXRob2R8fCJIRUFE''@;'; put 'put ''Ij09PW4ubWV0aG9kfHxWUGUudGVzdChuLnVybCkpcmV0dXJuIHQobik7Y29uc3QgZT1KbihSaGUpLmdldFRva2VuKCkscj1KbihJaGUpO3JldHVybiBudWxsIT1lJiYhbi5oZWFkZXJzLmhhcyhyKSYmKG49bi5jbG9uZSh7aGVhZGVyczpuLmhlYWRlcnMuc2V0KHIsZSl9KSksdChuKX12YXIg''@;'; put 'put ''TTY9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5JbnRlcmNlcHRvcnM9MF09IkludGVyY2VwdG9ycyIsbltuLkxlZ2FjeUludGVyY2VwdG9ycz0xXT0iTGVnYWN5SW50ZXJjZXB0b3JzIixuW24uQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb249Ml09IkN1c3RvbVhzcmZDb25maWd1cmF0aW9uIixuW24u''@;'; put 'put ''Tm9Yc3JmUHJvdGVjdGlvbj0zXT0iTm9Yc3JmUHJvdGVjdGlvbiIsbltuLkpzb25wU3VwcG9ydD00XT0iSnNvbnBTdXBwb3J0IixuW24uUmVxdWVzdHNNYWRlVmlhUGFyZW50PTVdPSJSZXF1ZXN0c01hZGVWaWFQYXJlbnQiLG5bbi5GZXRjaD02XT0iRmV0Y2giLG59KE02fHx7fSk7ZnVuY3Rp''@;'; put 'put ''b24gWTkobix0KXtyZXR1cm57XHUwMjc1a2luZDpuLFx1MDI3NXByb3ZpZGVyczp0fX1mdW5jdGlvbiBqUGUoLi4ubil7Y29uc3QgdD1bRyQsa2hlLFRoZSx7cHJvdmlkZTpmRix1c2VFeGlzdGluZzpUaGV9LHtwcm92aWRlOnBGLHVzZUZhY3Rvcnk6KCk9PkpuKE1oZSx7b3B0aW9uYWw6ITB9''@;'; put 'put ''KT8/Sm4oa2hlKX0se3Byb3ZpZGU6TVQsdXNlVmFsdWU6QlBlLG11bHRpOiEwfSx7cHJvdmlkZTpYJCx1c2VWYWx1ZTohMH0se3Byb3ZpZGU6UmhlLHVzZUNsYXNzOk5QZX1dO2Zvcihjb25zdCBlIG9mIG4pdC5wdXNoKC4uLmUuXHUwMjc1cHJvdmlkZXJzKTtyZXR1cm4gX2QodCl9Y29uc3Qg''@;'; put 'put ''TGhlPW5ldyB3cigiIik7bGV0IE9oZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscil7dGhpcy5odHRwPWUsdGhpcy5hcHBTdG9yZVNlcnZpY2U9cix0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtj''@;'; put 'put ''b25zdCBlPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy51cmw9YCR7ZT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7''@;'; put 'put ''dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGUpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2V9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShlKXtyZXR1cm4gdGhpcy5odHRwLmdl''@;'; put 'put ''dChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHtlfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21G''@;'; put 'put ''aWxlVHJlZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHIsaSk9Pnt0aGlzLmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGE9Pntjb25zdCBtPXRoaXMuZmluZEluVHJlZShhLnRyZWUsZSk7cihtKX0pfSl9ZmluZEluVHJlZShlLHIpe2lmKGUucmVsYXRpdmVQYXRoPT09cilyZXR1''@;'; put 'put ''cm4gZTtmb3IobGV0IGkgb2YgZS5jaGlsZHJlbil7Y29uc3QgYT10aGlzLmZpbmRJblRyZWUoaSxyKTtpZihhKXJldHVybiBhfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihHJCksT3IoWjkpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj11''@;'; put 'put ''bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBufSkoKSxxJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscil7dGhpcy5odHRwPWUsdGhpcy5hcHBTdG9yZVNlcnZpY2U9cix0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdo''@;'; put 'put ''dHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOntyZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29t''@;'; put 'put ''cHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246Ii9qb2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9k''@;'; put 'put ''ZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNl''@;'; put 'put ''RGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2Zv''@;'; put 'put ''bGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBp''@;'; put 'put ''cGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3QgZT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVy''@;'; put 'put ''VXJsPWU/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChlKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtlfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtlfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwYCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Q29t''@;'; put 'put ''cHV0ZUNvbnRleHRCeUlkKGUpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke2V9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Rm9sZGVyQnlQYXRoKGUpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xk''@;'; put 'put ''ZXJzL0BpdGVtP3BhdGg9JHtlfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlck1lbWJlcnMoZSl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9mb2xkZXJzL2ZvbGRlcnMvJHtlfS9tZW1iZXJzYCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QWRtaW5Hcm91cHMo''@;'; put 'put ''ZT01ZTMpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9JHtlfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEN1cnJlbnRVc2VyKCl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9pZGVudGl0''@;'; put 'put ''aWVzL3VzZXJzL0BjdXJyZW50VXNlcmAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldChlLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGUscikucGlwZShCOShpPT4oY29uc29sZS5sb2coInVybCIsZSksY29uc29sZS5sb2coImVyci5zdGF0dXMiLGkuc3RhdHVzKSw0NDk9PT1pLnN0YXR1c3x8''@;'; put 'put ''NDAxPT09aS5zdGF0dXM/dGhpcy5odHRwLmdldChlLHIpOmFUKCgpPT5pKSkpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihHJCksT3IoWjkpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1''@;'; put 'put ''ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBufSkoKSxKcz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWUsdGhpcy51c2VyU2VydmljZT1yLHRoaXMuZXZlbnRTZXJ2aWNlPWksdGhpcy5zYXNqc1NlcnZpY2U9YSx0''@;'; put 'put ''aGlzLnNhc1ZpeWFTZXJ2aWNlPWMsdGhpcy5sb2dnZXJTZXJ2aWNlPW0sdGhpcy5yb3V0ZXI9Qyx0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXI9bmV3IFlyLHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlcj1uZXcgWXIsdGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlcj1uZXcgWXIsdGhp''@;'; put 'put ''cy5zYXNqc0FkYXB0ZXI9bmV3KGZoZSgpKSx0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyB4aSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IHhpKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFw''@;'; put 'put ''cFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5zYXNWaXlhU2VydmljZS5zZXR1cCgpLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Mpe3N3aXRjaCh0aGlzLnNhc2pzQWRhcHRlcj1uZXcoZmhlKCkpKHRoaXMuZGNBZGFwdGVy''@;'; put 'put ''U2V0dGluZ3MpLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Muc2VydmVyVHlwZSl7Y2FzZSBDMS5ZLlNhc1ZpeWE6dGhpcy5jaGVja1ZpeWFEZXBsb3kodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncy5hcHBMb2N8fCIiKTticmVhaztjYXNlIEMxLlkuU2FzOTp0aGlzLmxvYWRTdGFydHVwU2VydmljZUVt''@;'; put 'put ''aXR0ZXIuZW1pdCgpO2JyZWFrO2Nhc2UgQzEuWS5TYXNqczp0aGlzLmNoZWNrU2FzanNEZXBsb3koKX0iUmVkaXJlY3RlZCI9PT10aGlzLmdldFNhc2pzQ29uZmlnKCkubG9naW5NZWNoYW5pc20mJnRoaXMuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGU9PntlJiZ0aGlzLnNhc2pzQWRhcHRlci5s''@;'; put 'put ''b2dJbigpLnRoZW4ocj0+e2NvbnNvbGUubG9nKCJyZXMiLHIpfSl9KX1lbHNlIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQWRhcHRlciBzZXR0aW5ncyAoaW5kZXguaHRtbCkgYXJlIG5vdCBwcmVzZW50LiIpfXJlcXVlc3QoZSxyLGksYSl7cmV0dXJuIGF8fChh''@;'; put 'put ''PXt9KSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nUmVxdWVzdERhdGEoZT0ic2VydmljZXMvIitlLHIpLG5ldyBQcm9taXNlKChjLG0pPT57dGhpcy5zYXNqc0FkYXB0ZXIucmVxdWVzdChlLHIsaSwoKT0+e3RoaXMuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKEM9Pntjb25zdCBQPXRoaXMu''@;'; put 'put ''c2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChZPT5ZLnNlcnZpY2VMaW5rPT09ZSk7aWYoITE9PT1DLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxtKHthZGFwdGVyUmVzcG9uc2U6ITEsbG9nOlA/LmxvZ0ZpbGV9KSksIXRoaXMudXNlclNlcnZpY2UudXNlciYm''@;'; put 'put ''Qy5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpDLk1GX0dFVFVTRVJ9KSxDLlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoQy5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5z''@;'; put 'put ''ZVNpdGVJZCgpLmluY2x1ZGVzKEMuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KEMuU1lTU0lURSkpKSw0MDQ9PT1DLnN0YXR1cyYmbSh7YWRhcHRlclJlc3BvbnNlOntNRVNTQUdFOkMuYm9keXx8IlNBUyBSZXNwb25kZWQgd2l0aCBlcnJvciJ9LGxvZzpQPy5s''@;'; put 'put ''b2dGaWxlfSksdHlwZW9mIEMuc2FzanNBYm9ydDwidSIpe2NvbnN0IFk9QyxKPVkuc2FzanNBYm9ydFswXS5NU0csY2U9WS5zYXNqc0Fib3J0WzBdLk1BQztpZihKLmluY2x1ZGVzKCJEYXRhX0NvbnRyb2xsZXJfU2V0dGluZ3MoU3RvcmVkUHJvY2Vzcykgbm90IGZvdW5kIikpcmV0dXJuIHRo''@;'; put 'put ''aXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHZvaWQgbSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpKfSxsb2c6UD8ubG9nRmlsZX0pO2E/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGUucmVwbGFjZSgic2VydmljZXMvIiwiIiksSix7U1lTV0FSTklOR1RFWFQ6WS5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6WS5TWVNFUlJPUlRFWFQsTUFDOmNlfSksbSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpKfSxsb2c6UD8ubG9nRmlsZX0p''@;'; put 'put ''fWMoe2FkYXB0ZXJSZXNwb25zZTpDLGxvZzpQPy5sb2dGaWxlfSl9LEM9Pntjb25zb2xlLmVycm9yKEMpO2NvbnN0IFA9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKFk9Plkuc2VydmljZUxpbms9PT1lKTtpZihDLmVycm9yKXtsZXQgSixZPUMuZXJyb3IubWVzc2Fn''@;'; put 'put ''ZTtDLmVycm9yLmRldGFpbHMmJkMuZXJyb3IuZGV0YWlscy5sb2cmJihKPUMuZXJyb3IuZGV0YWlscy5sb2cpLCghWXx8WS50cmltKCkubGVuZ3RoPDEpJiYoWT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGE/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5zaG93QWJvcnRNb2RhbChlLFkse0xPRzpKfSwiUmVxdWVzdCBlcnJvciIpLG0oe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6WX0sbG9nOlA/LmxvZ0ZpbGV9KX1tKHthZGFwdGVyUmVzcG9uc2U6Qyxsb2c6UD8ubG9nRmlsZX0pfSl9KX11cGxvYWRGaWxlKGUscixpKXtyZXR1cm4gbmV3IFBy''@;'; put 'put ''b21pc2UoKGEsYyk9Pnt0aGlzLnNhc2pzQWRhcHRlci51cGxvYWRGaWxlKGUscixpKS50aGVuKG09Pntjb25zdCBDPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChQPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1QLnNlcnZpY2VMaW5rKTthKHthZGFwdGVy''@;'; put 'put ''UmVzcG9uc2U6bSxsb2c6Qz8ubG9nRmlsZX0pfSxtPT57Y29uc3QgQz10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoUD0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09UC5zZXJ2aWNlTGluayk7Yyh7cmVzcG9uc2U6bSxsb2c6Qz8ubG9nRmlsZX0pfSl9KX1s''@;'; put 'put ''b2dpbihlLHIpe3ZhciBpPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7Y29uc3QgYT1pLmdldFNlcnZlclR5cGUoKT09PUMxLlkuU2FzanM/ImNsaWVudElEMSI6dm9pZCAwO3JldHVybiBpLnNhc2pzQWRhcHRlci5sb2dJbihlLHIsYSkudGhlbihjPT4oYy5pc0xvZ2dlZEluJiYoaS51c2Vy''@;'; put 'put ''U2VydmljZS51c2VyPXt1c2VybmFtZTpjLnVzZXJOYW1lfSxpLmFwcExvY0NoZWNrUGVuZGluZyYmKGkuY2hlY2tWaXlhRGVwbG95KGkuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIpLGkuYXBwTG9jQ2hlY2tQZW5kaW5nPSExKSksaS5zaG91bGRMb2dpbi5uZXh0KCFjLmlzTG9nZ2Vk''@;'; put 'put ''SW4pLGMuaXNMb2dnZWRJbiksYz0+KGNvbnNvbGUuZXJyb3IoYyksaS5zaG91bGRMb2dpbi5uZXh0KCEwKSwhMSkpLmNhdGNoKGM9Pig0MDM9PT1jJiZjb25zb2xlLmVycm9yKCJJbnZhbGlkIGhvc3QiKSwhMSkpfSkoKX1yZWxvYWRTdGFydHVwRGF0YSgpe3RoaXMubG9hZFN0YXJ0dXBTZXJ2''@;'; put 'put ''aWNlRW1pdHRlci5lbWl0KCl9Z2V0TGljZW5zZVNpdGVJZCgpe3JldHVybiB0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC52YWx1ZXx8W119c2V0TGljZW5zZVNpdGVJZChlKXt0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC5uZXh0KCJvYmplY3QiPT10eXBlb2YgZT9lOltlXSl9Y2hlY2tTYXNqc0RlcGxveSgp''@;'; put 'put ''e3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7Y29uc3QgaT1gJHtlLmdldFNhc2pzQ29uZmlnKCkuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7ZS5zYXNqc1NlcnZpY2UuZ2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUoaSkuc3Vic2NyaWJlKGE9PnthLmZpbGVzLmluY2x1ZGVzKCJt''@;'; put 'put ''YWtlZGF0YS5zYXMiKT8oZS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxlLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpOihlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpLGUucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJmUucm91dGVyLm5h''@;'; put 'put ''dmlnYXRlQnlVcmwoIi8iKSl9LGE9Pntjb25zdCBjPSJzdHJpbmciPT10eXBlb2YgYS5lcnJvcj9hLmVycm9yOkpTT04uc3RyaW5naWZ5KGEuZXJyb3J8fGEpO2MuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhlLnNob3VsZExvZ2luLm5leHQoITApLGUuc2hvdWxkTG9naW4uc3Vic2NyaWJl''@;'; put 'put ''KG09PnshMT09PW0mJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmMuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxlLmV2ZW50U2VydmljZS5zdGFy''@;'; put 'put ''dHVwRGF0YUxvYWRlZCgpLGUucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgcj1aKGZ1bmN0aW9uKihpLGEp''@;'; put 'put ''e2UuY2hlY2tpbmdJbnRlcnZhbD1zZXRJbnRlcnZhbChaKGZ1bmN0aW9uKigpe2Uuc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihjPT57YyYmKGNsZWFySW50ZXJ2YWwoZS5jaGVja2luZ0ludGVydmFsKSxpKGMpKX0pLmNhdGNoKGM9PntjbGVhckludGVydmFsKGUuY2hlY2tpbmdJ''@;'; put 'put ''bnRlcnZhbCksYShjKX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihpLGEpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgo''@;'; put 'put ''cixpKT0+e2NvbnN0IGM9YCR7ZS5nZXRTYXNqc0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5gO2Uuc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGMpLnN1YnNjcmliZShtPT57bS5maWxlcy5pbmNsdWRlcygibWFrZWRhdGEuc2FzIik/cighMSk6cighMCl9''@;'; put 'put ''LG09PnsoInN0cmluZyI9PXR5cGVvZiBtLmVycm9yP20uZXJyb3I6SlNPTi5zdHJpbmdpZnkobS5lcnJvcnx8bSkpLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmaSgpfSl9KX0pKCl9Y2hlY2tWaXlhRGVwbG95KGUpe3ZhciByPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7''@;'; put 'put ''bGV0IGMsYT0hMTtpZih0eXBlb2Ygci5zYXNqc0FkYXB0ZXIuZ2V0Rm9sZGVyPCJ1Iil7Y29uc3QgbT15aWVsZCByLmFwcExvY0NoZWNrKGUpO2E9bS5mb3VuZCxjPW0uZXJyb3JNZXNzYWdlfWVsc2UgYT15aWVsZCByLmFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihlKTthP3Iudml5YU1h''@;'; put 'put ''a2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKG09PnttP3IubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCk6KHIuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksci5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKX0sbT0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIHdo''@;'; put 'put ''aWxlIGxvb2tpbmcgZm9yIHRoZSBmaWxlOiBtYWtlZGF0YS5zYXMiLG0pfSk6ci5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLChjfHwiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLCBvciBBUEkgbm90IHJlYWNoYWJsZS4gQ2hl''@;'; put 'put ''Y2sgdGhlIEFEQVBURVIgY29uZmlndXJhdGlvbi4iKStgXG5BcHBMb2M6ICR7ZX1gKX0pKCl9dml5YU1ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgocixpKT0+e2NvbnN0IGE9ZS5nZXRTYXNqc0NvbmZpZygp''@;'; put 'put ''LGM9YCR7YS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDtlLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlckJ5UGF0aChjKS5zdWJzY3JpYmUobT0+e2NvbnN0IEM9bS5pZDtDfHwoY29uc29sZS5lcnJvcihgRm9sZGVyIElEIGlzIG5vdCBwcmVzZW50LiAke2N9YCxhKSxyKCExKSksZS5zYXNWaXlh''@;'; put 'put ''U2VydmljZS5nZXRGb2xkZXJNZW1iZXJzKEMpLnN1YnNjcmliZShQPT57UC5pdGVtcy5zb21lKFk9PiJtYWtlZGF0YSI9PT1ZLm5hbWUpP3IoITEpOnIoITApfSxQPT57Y29uc29sZS5lcnJvcigiRXJyb3IgZ2V0dGluZyBmb2xkZXIgY29udGVudHMiLFApLGkoKX0pfSxtPT57Y29uc29sZS53''@;'; put 'put ''YXJuKCJFcnJvciBnZXR0aW5nIGZvbGRlciBpbmZvIixtKSxpKG0pfSl9KX0pKCl9YXBwTG9jQ2hlY2soZSl7dmFyIHI9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaT1aKGZ1bmN0aW9uKihhLGMpe2xldCBDLG09IiI7dHJ5e0M9eWllbGQgci5zYXNqc0FkYXB0ZXIu''@;'; put 'put ''Z2V0Rm9sZGVyKGUpfWNhdGNoKFApeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09UC5uYW1lPyhyLmFwcExvY0NoZWNrUGVuZGluZz0hMCxyLnNob3VsZExvZ2luLm5leHQoITApLGEoe2ZvdW5kOiExfSkpOm09Ik5vdEZvdW5kZUVycm9yIj09PVAubmFtZT9QLm1lc3NhZ2U6IlZpeWEgc2Vydmlj''@;'; put 'put ''ZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIn1pZihtLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJuKG0pLGEoe2ZvdW5kOiExLGVycm9yTWVzc2FnZTptfSk7YSh7''@;'; put 'put ''Zm91bmQ6ITB9KX0pO3JldHVybiBmdW5jdGlvbihhLGMpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihlKXtyZXR1cm4gbmV3IFByb21pc2UoKHIsaSk9PntsZXQgYz0hMTtyZXR1cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRl''@;'; put 'put ''cnMvQGl0ZW0/cGF0aD0ke2V9YCkudGhlbihtPT4oNDA0PT09bS5zdGF0dXMmJihjPSEwKSxtLnRleHQoKSkpLnRoZW4obT0+e2lmKHRoaXMuaXNMb2dpblJlcXVpcmVkKG0pKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCk7ZWxzZXtpZihjKXJl''@;'; put 'put ''dHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxyKCExKTtsZXQgQz1udWxs''@;'; put 'put ''O3RyeXtDPUpTT04ucGFyc2UobSl9Y2F0Y2h7fWlmKEMmJkMuaHR0cFN0YXR1c0NvZGUmJjQwND09PUMuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2''@;'; put 'put ''aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHIoITEpO3IoITApfX0pLmNhdGNoKG09PntyKCExKX0pfSl9aXNMb2dpblJlcXVpcmVkKGUpe3JldHVybi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblteIl0qKS4qPi9nbS50ZXN0KGUp''@;'; put 'put ''fWxvZ291dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0''@;'; put 'put ''ZXIuZ2V0U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGUpe3RoaXMuc2FzanNBZGFwdGVyLnNldERlYnVnU3RhdGUoZSl9Z2V0U2FzanNJbnN0YW5jZSgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBlKCl7Y29uc3QgZT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNq''@;'; put 'put ''c0NvbmZpZygpO3JldHVybiBlLnNlcnZlclR5cGU/ZS5zZXJ2ZXJUeXBlOiJTQVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgZT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChlLnNlcnZlclR5cGUpe2Nhc2UgQzEuWS5TYXNWaXlhOnJldHVybiBlLnBh''@;'; put 'put ''dGhTQVNWaXlhO2Nhc2UgQzEuWS5TYXM5OnJldHVybiBlLnBhdGhTQVM5O2Nhc2UgQzEuWS5TYXNqczpyZXR1cm4gZS5wYXRoU0FTSlN9fWdldEZpbGVDb250ZW50KGUscil7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldEZpbGVDb250ZW50KGUscil9dXBkYXRlRmlsZUNvbnRlbnQoZSxy''@;'; put 'put ''LGkpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci51cGRhdGVGaWxlQ29udGVudChlLHIsaSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoT3IoWjkpLE9yKFUkKSxPcihTYyksT3IoT2hlKSxPcihxJCksT3IobWgpLE9yKHJsKSl9fXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gbn0pKCksbWg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmluamVjdG9yPWV9bG9nKGUscil7dGhpcy5pbmplY3RTYXNTZXJ2aWNlKCksdGhp''@;'; put 'put ''cy5zYXNqc0NvbmZpZz8uZGVidWcmJihyP2NvbnNvbGUubG9nKGUscik6Y29uc29sZS5sb2coZSkpfWVycm9yKGUscil7Y29uc29sZS5lcnJvcihlLHIpfWxvZ1JlcXVlc3REYXRhKGUscil7aWYodGhpcy5sb2coIi0tLSBBZGFwdGVyIFJlcXVlc3QgSW5wdXQgLS0tIiksdGhpcy5sb2coZSks''@;'; put 'put ''cil7Zm9yKGxldCBpIG9mIE9iamVjdC5rZXlzKHIpKXRoaXMubG9nKGkscltpXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNqc0NvbmZpZyl7Y29uc3QgZT10aGlzLmluamVjdG9yLmdldChK''@;'; put 'put ''cyk7dGhpcy5zYXNqc0NvbmZpZz1lLmdldFNhc2pzQ29uZmlnKCl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKEhvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZElu''@;'; put 'put ''OiJyb290In0pfX1yZXR1cm4gbn0pKCk7Y29uc3QgUGhlPWZ1bmN0aW9uIFpQZShuLHQpe3JldHVybiBuPT09dHx8biE9biYmdCE9dH0seUY9ZnVuY3Rpb24gWVBlKG4sdCl7Zm9yKHZhciBlPW4ubGVuZ3RoO2UtLTspaWYoUGhlKG5bZV1bMF0sdCkpcmV0dXJuIGU7cmV0dXJuLTF9O3ZhciAk''@;'; put 'put ''UGU9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiB5dyhuKXt2YXIgdD0tMSxlPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxlOyl7dmFyIHI9blt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX15dy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gVVBlKCl7dGhp''@;'; put 'put ''cy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0seXcucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBLUGUobil7dmFyIHQ9dGhpcy5fX2RhdGFfXyxlPXlGKHQsbik7cmV0dXJuIShlPDB8fChlPT10Lmxlbmd0aC0xP3QucG9wKCk6JFBlLmNhbGwodCxlLDEpLC0tdGhpcy5zaXplLDApKX0seXcu''@;'; put 'put ''cHJvdG90eXBlLmdldD1mdW5jdGlvbiBxUGUobil7dmFyIHQ9dGhpcy5fX2RhdGFfXyxlPXlGKHQsbik7cmV0dXJuIGU8MD92b2lkIDA6dFtlXVsxXX0seXcucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBRUGUobil7cmV0dXJuIHlGKHRoaXMuX19kYXRhX18sbik+LTF9LHl3LnByb3RvdHlwZS5z''@;'; put 'put ''ZXQ9ZnVuY3Rpb24gdEZlKG4sdCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxyPXlGKGUsbik7cmV0dXJuIHI8MD8oKyt0aGlzLnNpemUsZS5wdXNoKFtuLHRdKSk6ZVtyXVsxXT10LHRoaXN9O2NvbnN0IF9GPXl3LEZoZT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2Jq''@;'; put 'put ''ZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGhGZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IGg0PUZoZXx8aEZlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHg2PWg0LlN5bWJvbDt2YXIgSGhlPU9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUsZ0ZlPUhoZS5oYXNPd25Qcm9wZXJ0eSxtRmU9SGhlLnRvU3RyaW5nLHhUPXg2P3g2LnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgYkZlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIE5oZT14Nj94Ni50b1N0cmluZ1RhZzp2b2lkIDA7Y29uc3QgX3c9ZnVuY3Rpb24geEZlKG4pe3Jl''@;'; put 'put ''dHVybiBudWxsPT1uP3ZvaWQgMD09PW4/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOk5oZSYmTmhlIGluIE9iamVjdChuKT9mdW5jdGlvbiB2RmUobil7dmFyIHQ9Z0ZlLmNhbGwobix4VCksZT1uW3hUXTt0cnl7blt4VF09dm9pZCAwO3ZhciByPSEwfWNhdGNoe312YXIg''@;'; put 'put ''aT1tRmUuY2FsbChuKTtyZXR1cm4gciYmKHQ/blt4VF09ZTpkZWxldGUgblt4VF0pLGl9KG4pOmZ1bmN0aW9uIHdGZShuKXtyZXR1cm4gYkZlLmNhbGwobil9KG4pfSxFVD1mdW5jdGlvbiBFRmUobil7dmFyIHQ9dHlwZW9mIG47cmV0dXJuIG51bGwhPW4mJigib2JqZWN0Ij09dHx8ImZ1bmN0''@;'; put 'put ''aW9uIj09dCl9LFZoZT1mdW5jdGlvbiBJRmUobil7aWYoIUVUKG4pKXJldHVybiExO3ZhciB0PV93KG4pO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PXR8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXR8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09dHx8IltvYmplY3QgUHJv''@;'; put 'put ''eHldIj09dH0sSiQ9aDRbIl9fY29yZS1qc19zaGFyZWRfXyJdO3ZhciBCaGU9ZnVuY3Rpb24oKXt2YXIgbj0vW14uXSskLy5leGVjKEokJiZKJC5rZXlzJiZKJC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG4/IlN5bWJvbChzcmMpXzEuIituOiIifSgpO3ZhciBGRmU9RnVuY3Rpb24ucHJv''@;'; put 'put ''dG90eXBlLnRvU3RyaW5nO2NvbnN0IEc5PWZ1bmN0aW9uIEhGZShuKXtpZihudWxsIT1uKXt0cnl7cmV0dXJuIEZGZS5jYWxsKG4pfWNhdGNoe310cnl7cmV0dXJuIG4rIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIFZGZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxXRmU9UmVnRXhw''@;'; put 'put ''KCJeIitGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/''@;'; put 'put ''PVxcXF0pL2csIiQxLio/IikrIiQiKTtjb25zdCBZRmU9ZnVuY3Rpb24gWkZlKG4pe3JldHVybiEoIUVUKG4pfHxmdW5jdGlvbiBMRmUobil7cmV0dXJuISFCaGUmJkJoZSBpbiBufShuKSkmJihWaGUobik/V0ZlOlZGZSkudGVzdChHOShuKSl9LCQ5PWZ1bmN0aW9uIEtGZShuLHQpe3ZhciBl''@;'; put 'put ''PWZ1bmN0aW9uIEdGZShuLHQpe3JldHVybiBuPy5bdF19KG4sdCk7cmV0dXJuIFlGZShlKT9lOnZvaWQgMH0sVFQ9JDkoaDQsIk1hcCIpLEFUPSQ5KE9iamVjdCwiY3JlYXRlIik7dmFyIGlIZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBsSGU9T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBidyhuKXt2YXIgdD0tMSxlPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxlOyl7dmFyIHI9blt0XTt0aGlzLnNldChyWzBdLHJbMV0pfX1idy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gSkZlKCl7dGhpcy5fX2RhdGFf''@;'; put 'put ''Xz1BVD9BVChudWxsKTp7fSx0aGlzLnNpemU9MH0sYncucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBlSGUobil7dmFyIHQ9dGhpcy5oYXMobikmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW25dO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LGJ3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gYUhl''@;'; put 'put ''KG4pe3ZhciB0PXRoaXMuX19kYXRhX187aWYoQVQpe3ZhciBlPXRbbl07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09ZT92b2lkIDA6ZX1yZXR1cm4gaUhlLmNhbGwodCxuKT90W25dOnZvaWQgMH0sYncucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBjSGUobil7dmFyIHQ9dGhp''@;'; put 'put ''cy5fX2RhdGFfXztyZXR1cm4gQVQ/dm9pZCAwIT09dFtuXTpsSGUuY2FsbCh0LG4pfSxidy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGhIZShuLHQpe3ZhciBlPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMobik/MDoxLGVbbl09QVQmJnZvaWQgMD09PXQ/Il9fbG9k''@;'; put 'put ''YXNoX2hhc2hfdW5kZWZpbmVkX18iOnQsdGhpc307Y29uc3QgamhlPWJ3LGJGPWZ1bmN0aW9uIHlIZShuLHQpe3ZhciBlPW4uX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIG1IZShuKXt2YXIgdD10eXBlb2YgbjtyZXR1cm4ic3RyaW5nIj09dHx8Im51bWJlciI9PXR8fCJzeW1ib2wiPT10fHwi''@;'; put 'put ''Ym9vbGVhbiI9PXQ/Il9fcHJvdG9fXyIhPT1uOm51bGw9PT1ufSh0KT9lWyJzdHJpbmciPT10eXBlb2YgdD8ic3RyaW5nIjoiaGFzaCJdOmUubWFwfTtmdW5jdGlvbiB3dyhuKXt2YXIgdD0tMSxlPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxlOyl7dmFyIHI9blt0''@;'; put 'put ''XTt0aGlzLnNldChyWzBdLHJbMV0pfX13dy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gcEhlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgamhlLG1hcDpuZXcoVFR8fF9GKSxzdHJpbmc6bmV3IGpoZX19LHd3LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gX0hlKG4p''@;'; put 'put ''e3ZhciB0PWJGKHRoaXMsbikuZGVsZXRlKG4pO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LHd3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gd0hlKG4pe3JldHVybiBiRih0aGlzLG4pLmdldChuKX0sd3cucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBTSGUobil7cmV0dXJuIGJGKHRoaXMsbiku''@;'; put 'put ''aGFzKG4pfSx3dy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIHhIZShuLHQpe3ZhciBlPWJGKHRoaXMsbikscj1lLnNpemU7cmV0dXJuIGUuc2V0KG4sdCksdGhpcy5zaXplKz1lLnNpemU9PXI/MDoxLHRoaXN9O2NvbnN0IFEkPXd3O2Z1bmN0aW9uIEN3KG4pe3ZhciB0PXRoaXMuX19kYXRhX189''@;'; put 'put ''bmV3IF9GKG4pO3RoaXMuc2l6ZT10LnNpemV9Q3cucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHJGZSgpe3RoaXMuX19kYXRhX189bmV3IF9GLHRoaXMuc2l6ZT0wfSxDdy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGFGZShuKXt2YXIgdD10aGlzLl9fZGF0YV9fLGU9dC5kZWxldGUobik7''@;'; put 'put ''cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUsZX0sQ3cucHJvdG90eXBlLmdldD1mdW5jdGlvbiBzRmUobil7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KG4pfSxDdy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGNGZShuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobil9LEN3LnByb3RvdHlwZS5z''@;'; put 'put ''ZXQ9ZnVuY3Rpb24gQUhlKG4sdCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihlIGluc3RhbmNlb2YgX0Ype3ZhciByPWUuX19kYXRhX187aWYoIVRUfHxyLmxlbmd0aDwxOTkpcmV0dXJuIHIucHVzaChbbix0XSksdGhpcy5zaXplPSsrZS5zaXplLHRoaXM7ZT10aGlzLl9fZGF0YV9fPW5ldyBR''@;'; put 'put ''JChyKX1yZXR1cm4gZS5zZXQobix0KSx0aGlzLnNpemU9ZS5zaXplLHRoaXN9O2NvbnN0IERIZT1Ddzt2YXIgTEhlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBuPSQ5KE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gbih7fSwiIix7fSksbn1jYXRjaHt9fSgpO2NvbnN0IHpoZT1MSGUsVWhl''@;'; put 'put ''PWZ1bmN0aW9uIE9IZShuLHQsZSl7Il9fcHJvdG9fXyI9PXQmJnpoZT96aGUobix0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplLHdyaXRhYmxlOiEwfSk6blt0XT1lfTt2YXIgRkhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgV2hlPWZ1bmN0''@;'; put 'put ''aW9uIEhIZShuLHQsZSl7dmFyIHI9blt0XTsoIUZIZS5jYWxsKG4sdCl8fCFQaGUocixlKXx8dm9pZCAwPT09ZSYmISh0IGluIG4pKSYmVWhlKG4sdCxlKX0sd0Y9ZnVuY3Rpb24gTkhlKG4sdCxlLHIpe3ZhciBpPSFlO2V8fChlPXt9KTtmb3IodmFyIGE9LTEsYz10Lmxlbmd0aDsrK2E8Yzsp''@;'; put 'put ''e3ZhciBtPXRbYV0sQz1yP3IoZVttXSxuW21dLG0sZSxuKTp2b2lkIDA7dm9pZCAwPT09QyYmKEM9blttXSksaT9VaGUoZSxtLEMpOldoZShlLG0sQyl9cmV0dXJuIGV9LFN3PWZ1bmN0aW9uIGpIZShuKXtyZXR1cm4gbnVsbCE9biYmIm9iamVjdCI9PXR5cGVvZiBufSxaaGU9ZnVuY3Rpb24g''@;'; put 'put ''VUhlKG4pe3JldHVybiBTdyhuKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PV93KG4pfTt2YXIgWWhlPU9iamVjdC5wcm90b3R5cGUsV0hlPVloZS5oYXNPd25Qcm9wZXJ0eSxaSGU9WWhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLFlIZT1aaGUoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgp''@;'; put 'put ''KT9aaGU6ZnVuY3Rpb24obil7cmV0dXJuIFN3KG4pJiZXSGUuY2FsbChuLCJjYWxsZWUiKSYmIVpIZS5jYWxsKG4sImNhbGxlZSIpfTtjb25zdCBHSGU9WUhlLE13PUFycmF5LmlzQXJyYXk7dmFyIEdoZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVU''@;'; put 'put ''eXBlJiZleHBvcnRzLCRoZT1HaGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxLaGU9JGhlJiYkaGUuZXhwb3J0cz09PUdoZT9oNC5CdWZmZXI6dm9pZCAwO2NvbnN0IFhoZT0oS2hlP0toZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5j''@;'; put 'put ''dGlvbiBLSGUoKXtyZXR1cm4hMX07dmFyIHROZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3Qgck5lPWZ1bmN0aW9uIG5OZShuLHQpe3ZhciBlPXR5cGVvZiBuO3JldHVybiEhKHQ9dD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVtYmVyIj09ZXx8InN5bWJvbCIhPWUmJnROZS50ZXN0KG4pKSYm''@;'; put 'put ''bj4tMSYmbiUxPT0wJiZuPHR9LHFoZT1mdW5jdGlvbiBhTmUobil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBuJiZuPi0xJiZuJTE9PTAmJm48PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciBNYz17fTtNY1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09TWNbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJd''@;'; put 'put ''PU1jWyJbb2JqZWN0IEludDhBcnJheV0iXT1NY1siW29iamVjdCBJbnQxNkFycmF5XSJdPU1jWyJbb2JqZWN0IEludDMyQXJyYXldIl09TWNbIltvYmplY3QgVWludDhBcnJheV0iXT1NY1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1NY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1N''@;'; put 'put ''Y1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxNY1siW29iamVjdCBBcmd1bWVudHNdIl09TWNbIltvYmplY3QgQXJyYXldIl09TWNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09TWNbIltvYmplY3QgQm9vbGVhbl0iXT1NY1siW29iamVjdCBEYXRhVmlld10iXT1NY1siW29iamVjdCBEYXRl''@;'; put 'put ''XSJdPU1jWyJbb2JqZWN0IEVycm9yXSJdPU1jWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPU1jWyJbb2JqZWN0IE1hcF0iXT1NY1siW29iamVjdCBOdW1iZXJdIl09TWNbIltvYmplY3QgT2JqZWN0XSJdPU1jWyJbb2JqZWN0IFJlZ0V4cF0iXT1NY1siW29iamVjdCBTZXRdIl09TWNbIltvYmplY3Qg''@;'; put 'put ''U3RyaW5nXSJdPU1jWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgZUs9ZnVuY3Rpb24gUk5lKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KX19O3ZhciBKaGU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxr''@;'; put 'put ''VD1KaGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSx0Sz1rVCYma1QuZXhwb3J0cz09PUpoZSYmRmhlLnByb2Nlc3M7Y29uc3QgeHc9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGtUJiZrVC5yZXF1aXJlJiZrVC5yZXF1aXJlKCJ1dGls''@;'; put 'put ''IikudHlwZXN8fHRLJiZ0Sy5iaW5kaW5nJiZ0Sy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgUWhlPXh3JiZ4dy5pc1R5cGVkQXJyYXk7Y29uc3QgRk5lPVFoZT9lSyhRaGUpOmZ1bmN0aW9uIEROZShuKXtyZXR1cm4gU3cobikmJnFoZShuLmxlbmd0aCkmJiEhTWNbX3cobildfTt2''@;'; put 'put ''YXIgTk5lPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgZTJlPWZ1bmN0aW9uIFZOZShuLHQpe3ZhciBlPU13KG4pLHI9IWUmJkdIZShuKSxpPSFlJiYhciYmWGhlKG4pLGE9IWUmJiFyJiYhaSYmRk5lKG4pLGM9ZXx8cnx8aXx8YSxtPWM/ZnVuY3Rpb24gVkhlKG4sdCl7''@;'; put 'put ''Zm9yKHZhciBlPS0xLHI9QXJyYXkobik7KytlPG47KXJbZV09dChlKTtyZXR1cm4gcn0obi5sZW5ndGgsU3RyaW5nKTpbXSxDPW0ubGVuZ3RoO2Zvcih2YXIgUCBpbiBuKSh0fHxOTmUuY2FsbChuLFApKSYmKCFjfHwhKCJsZW5ndGgiPT1QfHxpJiYoIm9mZnNldCI9PVB8fCJwYXJlbnQiPT1Q''@;'; put 'put ''KXx8YSYmKCJidWZmZXIiPT1QfHwiYnl0ZUxlbmd0aCI9PVB8fCJieXRlT2Zmc2V0Ij09UCl8fHJOZShQLEMpKSkmJm0ucHVzaChQKTtyZXR1cm4gbX07dmFyIEJOZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IG5LPWZ1bmN0aW9uIGpOZShuKXt2YXIgdD1uJiZuLmNvbnN0cnVjdG9yO3JldHVy''@;'; put 'put ''biBuPT09KCJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LnByb3RvdHlwZXx8Qk5lKX0sdDJlPWZ1bmN0aW9uIHpOZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbih0KGUpKX19LFdOZT10MmUoT2JqZWN0LmtleXMsT2JqZWN0KTt2YXIgWU5lPU9iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHk7Y29uc3QgbjJlPWZ1bmN0aW9uIEtOZShuKXtyZXR1cm4gbnVsbCE9biYmcWhlKG4ubGVuZ3RoKSYmIVZoZShuKX0scks9ZnVuY3Rpb24gWE5lKG4pe3JldHVybiBuMmUobik/ZTJlKG4pOmZ1bmN0aW9uIEdOZShuKXtpZighbksobikpcmV0dXJuIFdOZShuKTt2YXIgdD1bXTtm''@;'; put 'put ''b3IodmFyIGUgaW4gT2JqZWN0KG4pKVlOZS5jYWxsKG4sZSkmJiJjb25zdHJ1Y3RvciIhPWUmJnQucHVzaChlKTtyZXR1cm4gdH0obil9O3ZhciBuVmU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBpVmU9ZnVuY3Rpb24gclZlKG4pe2lmKCFFVChuKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gUU5lKG4pe3ZhciB0PVtdO2lmKG51bGwhPW4pZm9yKHZhciBlIGluIE9iamVjdChuKSl0LnB1c2goZSk7cmV0dXJuIHR9KG4pO3ZhciB0PW5LKG4pLGU9W107Zm9yKHZhciByIGluIG4pImNvbnN0cnVjdG9yIj09ciYmKHR8fCFuVmUuY2FsbChuLHIpKXx8ZS5wdXNoKHIpO3JldHVy''@;'; put 'put ''biBlfSxpSz1mdW5jdGlvbiBhVmUobil7cmV0dXJuIG4yZShuKT9lMmUobiwhMCk6aVZlKG4pfTt2YXIgcjJlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsaTJlPXIyZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVs''@;'; put 'put ''ZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGEyZT1pMmUmJmkyZS5leHBvcnRzPT09cjJlP2g0LkJ1ZmZlcjp2b2lkIDAsbzJlPWEyZT9hMmUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IHMyZT1mdW5jdGlvbiBnVmUoKXtyZXR1cm5bXX07dmFyIHZWZT1PYmplY3QucHJvdG90eXBlLnBy''@;'; put 'put ''b3BlcnR5SXNFbnVtZXJhYmxlLGwyZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHlWZT1sMmU/ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW4/W106KG49T2JqZWN0KG4pLGZ1bmN0aW9uIGZWZShuLHQpe2Zvcih2YXIgZT0tMSxyPW51bGw9PW4/MDpuLmxlbmd0aCxpPTAsYT1bXTsr''@;'; put 'put ''K2U8cjspe3ZhciBjPW5bZV07dChjLGUsbikmJihhW2krK109Yyl9cmV0dXJuIGF9KGwyZShuKSxmdW5jdGlvbih0KXtyZXR1cm4gdlZlLmNhbGwobix0KX0pKX06czJlO2NvbnN0IGFLPXlWZSxjMmU9ZnVuY3Rpb24gd1ZlKG4sdCl7Zm9yKHZhciBlPS0xLHI9dC5sZW5ndGgsaT1uLmxlbmd0''@;'; put 'put ''aDsrK2U8cjspbltpK2VdPXRbZV07cmV0dXJuIG59LHUyZT10MmUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIE1WZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKG4pe2Zvcih2YXIgdD1bXTtuOyljMmUodCxhSyhuKSksbj11MmUobik7cmV0dXJuIHR9''@;'; put 'put ''OnMyZTtjb25zdCBkMmU9TVZlLGgyZT1mdW5jdGlvbiBUVmUobix0LGUpe3ZhciByPXQobik7cmV0dXJuIE13KG4pP3I6YzJlKHIsZShuKSl9LGtWZT1mdW5jdGlvbiBBVmUobil7cmV0dXJuIGgyZShuLHJLLGFLKX0sSVZlPWZ1bmN0aW9uIERWZShuKXtyZXR1cm4gaDJlKG4saUssZDJlKX0s''@;'; put 'put ''b0s9JDkoaDQsIkRhdGFWaWV3Iiksc0s9JDkoaDQsIlByb21pc2UiKSxsSz0kOShoNCwiU2V0IiksY0s9JDkoaDQsIldlYWtNYXAiKTt2YXIgZjJlPSJbb2JqZWN0IE1hcF0iLHAyZT0iW29iamVjdCBQcm9taXNlXSIsZzJlPSJbb2JqZWN0IFNldF0iLG0yZT0iW29iamVjdCBXZWFrTWFwXSIs''@;'; put 'put ''djJlPSJbb2JqZWN0IERhdGFWaWV3XSIsSFZlPUc5KG9LKSxOVmU9RzkoVFQpLFZWZT1HOShzSyksQlZlPUc5KGxLKSxqVmU9RzkoY0spLEs5PV93OyhvSyYmSzkobmV3IG9LKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT12MmV8fFRUJiZLOShuZXcgVFQpIT1mMmV8fHNLJiZLOShzSy5yZXNvbHZl''@;'; put 'put ''KCkpIT1wMmV8fGxLJiZLOShuZXcgbEspIT1nMmV8fGNLJiZLOShuZXcgY0spIT1tMmUpJiYoSzk9ZnVuY3Rpb24obil7dmFyIHQ9X3cobiksZT0iW29iamVjdCBPYmplY3RdIj09dD9uLmNvbnN0cnVjdG9yOnZvaWQgMCxyPWU/RzkoZSk6IiI7aWYocilzd2l0Y2gocil7Y2FzZSBIVmU6cmV0''@;'; put 'put ''dXJuIHYyZTtjYXNlIE5WZTpyZXR1cm4gZjJlO2Nhc2UgVlZlOnJldHVybiBwMmU7Y2FzZSBCVmU6cmV0dXJuIGcyZTtjYXNlIGpWZTpyZXR1cm4gbTJlfXJldHVybiB0fSk7Y29uc3QgdUs9Szk7dmFyIFVWZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHkyZT1oNC5V''@;'; put 'put ''aW50OEFycmF5LGRLPWZ1bmN0aW9uIEdWZShuKXt2YXIgdD1uZXcgbi5jb25zdHJ1Y3RvcihuLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgeTJlKHQpLnNldChuZXcgeTJlKG4pKSx0fTt2YXIgWFZlPS9cdyokLzt2YXIgXzJlPXg2P3g2LnByb3RvdHlwZTp2b2lkIDAsYjJlPV8yZT9fMmUudmFs''@;'; put 'put ''dWVPZjp2b2lkIDA7Y29uc3QgU0JlPWZ1bmN0aW9uIENCZShuLHQsZSl7dmFyIHI9bi5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIGRLKG4pO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3''@;'; put 'put ''IHIoK24pO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBmdW5jdGlvbiAkVmUobix0KXt2YXIgZT10P2RLKG4uYnVmZmVyKTpuLmJ1ZmZlcjtyZXR1cm4gbmV3IG4uY29uc3RydWN0b3IoZSxuLmJ5dGVPZmZzZXQsbi5ieXRlTGVuZ3RoKX0obixlKTtjYXNlIltvYmplY3QgRmxvYXQz''@;'; put 'put ''MkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVk''@;'; put 'put ''QXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gdEJlKG4sdCl7dmFyIGU9dD9kSyhuLmJ1ZmZlcik6bi5idWZmZXI7cmV0dXJuIG5ldyBuLmNvbnN0cnVjdG9yKGUsbi5ieXRlT2Zmc2V0LG4ubGVuZ3Ro''@;'; put 'put ''KX0obixlKTtjYXNlIltvYmplY3QgTWFwXSI6Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgcjtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgcihuKTtjYXNlIltvYmplY3QgUmVnRXhwXSI6cmV0dXJuIGZ1bmN0aW9uIHFWZShuKXt2''@;'; put 'put ''YXIgdD1uZXcgbi5jb25zdHJ1Y3RvcihuLnNvdXJjZSxYVmUuZXhlYyhuKSk7cmV0dXJuIHQubGFzdEluZGV4PW4ubGFzdEluZGV4LHR9KG4pO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gUVZlKG4pe3JldHVybiBiMmU/T2JqZWN0KGIyZS5jYWxsKG4pKTp7fX0obil9''@;'; put 'put ''fTt2YXIgdzJlPU9iamVjdC5jcmVhdGUsTUJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm4gZnVuY3Rpb24odCl7aWYoIUVUKHQpKXJldHVybnt9O2lmKHcyZSlyZXR1cm4gdzJlKHQpO24ucHJvdG90eXBlPXQ7dmFyIGU9bmV3IG47cmV0dXJuIG4ucHJvdG90eXBlPXZvaWQgMCxl''@;'; put 'put ''fX0oKTtjb25zdCB4QmU9TUJlO3ZhciBDMmU9eHcmJnh3LmlzTWFwO2NvbnN0IFJCZT1DMmU/ZUsoQzJlKTpmdW5jdGlvbiBrQmUobil7cmV0dXJuIFN3KG4pJiYiW29iamVjdCBNYXBdIj09dUsobil9O3ZhciBTMmU9eHcmJnh3LmlzU2V0O2NvbnN0IEhCZT1TMmU/ZUsoUzJlKTpmdW5jdGlv''@;'; put 'put ''biBPQmUobil7cmV0dXJuIFN3KG4pJiYiW29iamVjdCBTZXRdIj09dUsobil9O3ZhciBNMmU9IltvYmplY3QgQXJndW1lbnRzXSIseDJlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsRTJlPSJbb2JqZWN0IE9iamVjdF0iLHBjPXt9O3BjW00yZV09cGNbIltvYmplY3QgQXJyYXldIl09cGNbIltvYmpl''@;'; put 'put ''Y3QgQXJyYXlCdWZmZXJdIl09cGNbIltvYmplY3QgRGF0YVZpZXddIl09cGNbIltvYmplY3QgQm9vbGVhbl0iXT1wY1siW29iamVjdCBEYXRlXSJdPXBjWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1wY1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09cGNbIltvYmplY3QgSW50OEFycmF5XSJd''@;'; put 'put ''PXBjWyJbb2JqZWN0IEludDE2QXJyYXldIl09cGNbIltvYmplY3QgSW50MzJBcnJheV0iXT1wY1siW29iamVjdCBNYXBdIl09cGNbIltvYmplY3QgTnVtYmVyXSJdPXBjW0UyZV09cGNbIltvYmplY3QgUmVnRXhwXSJdPXBjWyJbb2JqZWN0IFNldF0iXT1wY1siW29iamVjdCBTdHJpbmddIl09''@;'; put 'put ''cGNbIltvYmplY3QgU3ltYm9sXSJdPXBjWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09cGNbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09cGNbIltvYmplY3QgVWludDE2QXJyYXldIl09cGNbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAscGNbIltvYmplY3QgRXJyb3JdIl09cGNbeDJl''@;'; put 'put ''XT1wY1siW29iamVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IHVqZT1mdW5jdGlvbiBDRihuLHQsZSxyLGksYSl7dmFyIGMsbT0xJnQsQz0yJnQsUD00JnQ7aWYoZSYmKGM9aT9lKG4scixpLGEpOmUobikpLHZvaWQgMCE9PWMpcmV0dXJuIGM7aWYoIUVUKG4pKXJldHVybiBuO3ZhciBZPU13KG4p''@;'; put 'put ''O2lmKFkpe2lmKGM9ZnVuY3Rpb24gV1ZlKG4pe3ZhciB0PW4ubGVuZ3RoLGU9bmV3IG4uY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgblswXSYmVVZlLmNhbGwobiwiaW5kZXgiKSYmKGUuaW5kZXg9bi5pbmRleCxlLmlucHV0PW4uaW5wdXQpLGV9KG4pLCFtKXJl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBkVmUobix0KXt2YXIgZT0tMSxyPW4ubGVuZ3RoO2Zvcih0fHwodD1BcnJheShyKSk7KytlPHI7KXRbZV09bltlXTtyZXR1cm4gdH0obixjKX1lbHNle3ZhciBKPXVLKG4pLGNlPUo9PXgyZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09SjtpZihYaGUobikp''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIGNWZShuLHQpe2lmKHQpcmV0dXJuIG4uc2xpY2UoKTt2YXIgZT1uLmxlbmd0aCxyPW8yZT9vMmUoZSk6bmV3IG4uY29uc3RydWN0b3IoZSk7cmV0dXJuIG4uY29weShyKSxyfShuLG0pO2lmKEo9PUUyZXx8Sj09TTJlfHxjZSYmIWkpe2lmKGM9Q3x8Y2U/e306ZnVu''@;'; put 'put ''Y3Rpb24gRUJlKG4pe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBuLmNvbnN0cnVjdG9yfHxuSyhuKT97fTp4QmUodTJlKG4pKX0obiksIW0pcmV0dXJuIEM/ZnVuY3Rpb24geFZlKG4sdCl7cmV0dXJuIHdGKG4sZDJlKG4pLHQpfShuLGZ1bmN0aW9uIG9WZShuLHQpe3JldHVybiBuJiZ3Rih0''@;'; put 'put ''LGlLKHQpLG4pfShjLG4pKTpmdW5jdGlvbiBfVmUobix0KXtyZXR1cm4gd0YobixhSyhuKSx0KX0obixmdW5jdGlvbiBxTmUobix0KXtyZXR1cm4gbiYmd0YodCxySyh0KSxuKX0oYyxuKSl9ZWxzZXtpZighcGNbSl0pcmV0dXJuIGk/bjp7fTtjPVNCZShuLEosbSl9fWF8fChhPW5ldyBESGUp''@;'; put 'put ''O3ZhciBmZT1hLmdldChuKTtpZihmZSlyZXR1cm4gZmU7YS5zZXQobixjKSxIQmUobik/bi5mb3JFYWNoKGZ1bmN0aW9uKFhlKXtjLmFkZChDRihYZSx0LGUsWGUsbixhKSl9KTpSQmUobikmJm4uZm9yRWFjaChmdW5jdGlvbihYZSxydCl7Yy5zZXQocnQsQ0YoWGUsdCxlLHJ0LG4sYSkpfSk7''@;'; put 'put ''dmFyIEhlPVk/dm9pZCAwOihQP0M/SVZlOmtWZTpDP2lLOnJLKShuKTtyZXR1cm4gZnVuY3Rpb24gSUhlKG4sdCl7Zm9yKHZhciBlPS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoOysrZTxyJiYhMSE9PXQobltlXSxlLG4pOyk7fShIZXx8bixmdW5jdGlvbihYZSxydCl7SGUmJihYZT1uW3J0PVhl''@;'; put 'put ''XSksV2hlKGMscnQsQ0YoWGUsdCxlLHJ0LG4sYSkpfSksY30sU0Y9ZnVuY3Rpb24gZmplKG4pe3JldHVybiB1amUobiw1KX07dmFyIHBqZT1kKDc4ODU1KSxnamU9ZC5uKHBqZSk7bGV0IEx1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zYXNTZXJ2aWNlPWUsdGhpcy5zaG93''@;'; put 'put ''bkxpYnJhcmllcz01MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTB9Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShlLHI9ImRheXMiKXtsZXQgaSxhPTA7aT1lIGluc3RhbmNlb2YgRGF0ZT9lOm5ldyBEYXRlKGUpLGE9bmV3IERhdGUoRGF0ZS5VVEMoaS5nZXRGdWxsWWVhcigpLGkuZ2V0TW9udGgoKSxp''@;'; put 'put ''LmdldERhdGUoKSxpLmdldEhvdXJzKCksaS5nZXRNaW51dGVzKCksaS5nZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgQz1hKzMxNTYxOTJlNTtzd2l0Y2gocil7Y2FzZSJkYXlzIjp7bGV0IFA9Qy84NjRlNTtyZXR1cm4gUD1NYXRoLmFicyhQKSxQPU1hdGguZmxvb3IoUCksUH1jYXNl''@;'; put 'put ''InNlY29uZHMiOnJldHVybiBDLzFlM31yZXR1cm4gMH1jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGUscj0iZGF5cyIpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmKGU9cGFyc2VGbG9hdChlKSksInNlY29uZHMiPT09cil7bGV0IG09MWUzKmUtMzE1NjE5MmU1O3JldHVybiBtKz02MCpuZXcgRGF0''@;'; put 'put ''ZShtKS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxuZXcgRGF0ZShtKX1yZXR1cm4gbmV3IERhdGUoODY0ZTUqZS0zMTU2MTkyZTUpfXRyZWVPbkZpbHRlcihlLHIpe2xldCBpPWUuc2VhcmNoU3RyaW5nP2Uuc2VhcmNoU3RyaW5nOiIiLGE9ci5zcGxpdCgiLiIpWzBdLGM9ci5zcGxpdCgiLiIp''@;'; put 'put ''WzFdLG09YSsiQWxsIjtlW2FdJiYoZVttXXx8KGVbbV09dGhpcy5kZWVwQ2xvbmUoZVthXSkpLGVbYV09dGhpcy5kZWVwQ2xvbmUoZVttXSksaS5sZW5ndGg+MCYmKGVbYV09ZVthXS5maWx0ZXIoYz9DPT5DW2NdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaS50b0xvd2VyQ2FzZSgpKTpDPT5D''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaS50b0xvd2VyQ2FzZSgpKSkpKX1saWJyYXJ5T25GaWx0ZXIoZSxyLGkpe3IubGVuZ3RoPjA/ZS5mb3JFYWNoKGE9PnthW2ldLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoci50b0xvd2VyQ2FzZSgpKT8oYS5oaWRkZW49ITEsYS5pbkZvcmVncm91bmQ9''@;'; put 'put ''ITApOihhLmhpZGRlbj0hMCxhLmluRm9yZWdyb3VuZD0hMSl9KToodGhpcy5yZXNldEFycmF5RmlsdGVyKGUpLHRoaXMuZGlzcGxheUxpYnJhcmllcyhlKSl9ZGlzcGxheUxpYnJhcmllcyhlLHIpe3I/dGhpcy5zaG93bkxpYnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3du''@;'; put 'put ''TGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChlKSk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aCYmaSE9PXRoaXMuc2hvd25MaWJyYXJpZXM7aSsrKWVbaV0uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGlicmFyeUZvcmVncm91bmQoZSl7Zm9yKGxldCByPTA7cjxlLmxlbmd0''@;'; put 'put ''aDtyKyspZVtyXS5pbkZvcmVncm91bmQ9ITF9bWV0YU9iamVjdE9uRmlsdGVyKGUscixpKXtyLmxlbmd0aD4wPyh0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoZSksZS5mb3JFYWNoKGE9PnthW2ldLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoci50b0xvd2VyQ2FzZSgpKXx8KGEuaGlkZGVuPSEwKX0p''@;'; put 'put ''KTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoZSl9cmVzZXRBcnJheUZpbHRlcihlKXtlLmZvckVhY2gocj0+e3IuaGlkZGVuPSExLHIuaW5Gb3JlZ3JvdW5kJiZkZWxldGUgci5pbkZvcmVncm91bmR9KX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkoZSxyPSExKXtyZXR1cm4gciYmKGU9dGhpcy5kZWVw''@;'; put 'put ''Q2xvbmUoZSkpLGUubWFwKGk9Pk9iamVjdC5rZXlzKGkpLm1hcChhPT5pW2FdKSl9YWRkTGVhZGluZ1plcm8oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYoZT1lLnRvU3RyaW5nKCkpLGUubGVuZ3RoPDI/IjAiK2U6ZX1kZWxldGVLZXlzQW5kSGFzaChlLHIsaT0hMCl7Y29uc3QgYT1p''@;'; put 'put ''P3RoaXMuZGVlcENsb25lKGUpOmU7Zm9yKGxldCBjIG9mIHIpZGVsZXRlIGFbY107cmV0dXJuIGdqZSgpKEpTT04uc3RyaW5naWZ5KGEpKS50b1N0cmluZygpfWRvd25sb2FkVGV4dEZpbGUoZSxyKXtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpLnNldEF0dHJpYnV0ZSgi''@;'; put 'put ''aHJlZiIsImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KHIpKSxpLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLGUrIi50eHQiKSxpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaSksaS5jbGljaygpLGRvY3Vt''@;'; put 'put ''ZW50LmJvZHkucmVtb3ZlQ2hpbGQoaSl9Y29udmVydEFycmF5VmFsdWVzKGUscil7aWYoZS5sZW5ndGg8MSlyZXR1cm5bXTtzd2l0Y2gocil7Y2FzZSJudW1iZXIiOnJldHVybiBlLm1hcChpPT4xKmkpO2Nhc2Uic3RyaW5nIjpyZXR1cm4gZS50b1N0cmluZygpLnNwbGl0KCIsIil9fWlzU3Ry''@;'; put 'put ''ZWFtaW5nVml5YSgpe3JldHVybiJTQVNWSVlBIj09PXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCkmJiEoIWxvY2F0aW9uLnNlYXJjaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCI/X2ZpbGU9Iil8fCFsb2NhdGlvbi5wYXRobmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCIvc2Fz''@;'; put 'put ''am9iZXhlY3V0aW9uIikpfWRlYm91bmNlQ2FsbChlLHIpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dChyLGUpfWRlZXBDbG9uZShlKXtyZXR1cm4gU0YoZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIp''@;'; put 'put ''e3JldHVybiBuZXcocnx8bikoT3IoSnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBufSkoKSxLMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyxtKXt0aGlzLmxv''@;'; put 'put ''Z2dlclNlcnZpY2U9ZSx0aGlzLmFwcFN0b3JlU2VydmljZT1yLHRoaXMuZXZlbnRTZXJ2aWNlPWksdGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWMsdGhpcy5yb3V0ZXI9bSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb249ITEsdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRo''@;'; put 'put ''aXMuX2xpY2VuY2VTdGF0ZT16JCx0aGlzLmFsbEZlYXR1cmVzT249e3ZpZXdlcl9yb3dzX2FsbG93ZWQ6MS8wLGVkaXRvcl9yb3dzX2FsbG93ZWQ6MS8wLHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MS8wLHN1Ym1pdF9yb3dzX2xpbWl0OjEvMCx0YWJsZXNf''@;'; put 'put ''aW5fbGlicmFyeV9saW1pdDoxLzAsdmlld2JveF9saW1pdDoxLzAsbGluZWFnZV9kYWlseV9saW1pdDoxLzAsdmlld2JveDohMCxmaWxlVXBsb2FkOiEwLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfSx0aGlzLmZyZWVUaWVyTGljZW5jZURhdGE9e2RlbW86ITAsaG90X2xpY2Vuc2Vfa2V5''@;'; put 'put ''OnRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXksdXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZHx8MSx2YWxpZF91bnRpbDpnaCgpKCkuYWRkKDEsInllYXIiKS5mb3JtYXQoIllZWVktTU0tREQiKSxz''@;'; put 'put ''aXRlX2lkOiIiLHNpdGVfaWRfbXVsdGlwbGU6W119LHRoaXMuaXNBcHBBY3RpdmF0ZWQ9bmV3IHhpKG51bGwpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHk9bmV3IHhpKCExKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXI9bmV3IHhpKCExKSx0aGlzLmFwcExvY2tlZD1uZXcgeGkoITEpLHRo''@;'; put 'put ''aXMubGljZW5zZUV4cGlyZXNJbkRheXM9bmV3IHhpKG51bGwpLHRoaXMuaXNBcHBGcmVlVGllcj1uZXcgeGkoITEpLHRoaXMubGljZW5jZVByb2JsZW09bmV3IHhpKG51bGwpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5PW5ldyB4aSh2b2lkIDApLHRoaXMubGljZW5jZVN0YXRlPW5ldyB4aSh0aGlz''@;'; put 'put ''Ll9saWNlbmNlU3RhdGUpLHRoaXMuc2FzU2VydmljZS5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShDPT57aWYobnVsbCE9PXRoaXMuaXNBcHBBY3RpdmF0ZWQudmFsdWUmJiF0aGlzLmlzQXBwRnJlZVRpZXIudmFsdWUpe2NvbnN0IFA9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1p''@;'; put 'put ''c3NtYXRjaCZtaXNzbWF0Y2hJZD0ke0N9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChQKSx0aGlzLmRlYWN0aXZhdGVBcHAoUCl9fSl9YWN0aXZhdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe3IuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGlj''@;'; put 'put ''ZW5zZV9rZXk9ci5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCByLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoZSkseWllbGQgci5saWNlbnNpbmcoZS5nbG9idmFycyxlLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVz''@;'; put 'put ''KGUpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09ZS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhlLHIpe3ZhciBpPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7aWYoIWV8fCFlWzBdKXtjb25zdCBjPSdFcnJvciBnZXR0aW5nICJH''@;'; put 'put ''bG9idmFycyIgZnJvbSBzdGFydHVwc2VydmljZSByZXNwb25zZS4nO3JldHVybiBjb25zb2xlLmVycm9yKGMpLGkuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBpLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKGMp''@;'; put 'put ''fWApfWxldCBhPWVbMF07cmV0dXJuIHZvaWQgMD09PWEuTElDRU5DRV9LRVl8fHZvaWQgMD09PWEuQUNUSVZBVElPTl9LRVl8fG51bGw9PWEuUkVHSVNURVJDT1VOVHx8bnVsbD09YS5JU1JFR0lTVEVSRUQ/KGNvbnNvbGUuZXJyb3IoIlNvbWUgb2YgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50''@;'; put 'put ''IiksaS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGkuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiU29tZSBvZiB0aGUgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZSIpKTphLkxJQ0VOQ0VfS0VZJiZhLkFDVElWQVRJT05fS0VZ''@;'; put 'put ''PyhpLmxpY2VuY2VLZXk9YS5MSUNFTkNFX0tFWSxpLmFjdGl2YXRpb25LZXk9YS5BQ1RJVkFUSU9OX0tFWSx2b2lkKHlpZWxkIGkuZGVjcnlwdExpY2Vuc2VLZXkoYS5MSUNFTkNFX0tFWSxhLkFDVElWQVRJT05fS0VZKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGM9WihmdW5jdGlvbioobSl7eWll''@;'; put 'put ''bGQgaS5hcHBsaWNhdGlvbkFjdGl2YXRpb24obSxhLHIpfSk7cmV0dXJuIGZ1bmN0aW9uKG0pe3JldHVybiBjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZnVuY3Rpb24oKXt2YXIgYz1aKGZ1bmN0aW9uKihtKXtjb25zdCBDPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAke219''@;'; put 'put ''YDtjb25zb2xlLmVycm9yKEMpO2NvbnN0IFA9YC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWlscz0ke2J0b2EoQyl9JmZvcmNlPXRydWVgO2kubGljZW5jZVByb2JsZW0ubmV4dChQKSxpLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFApLHNldFRpbWVvdXQoKCk9PmkuYXBwbGljYXRp''@;'; put 'put ''b25BY3RpdmF0aW9uKGkuZnJlZVRpZXJMaWNlbmNlRGF0YSxhLHIsITApKX0pO3JldHVybiBmdW5jdGlvbihtKXtyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGkuYXBwbGljYXRpb25BY3RpdmF0aW9uKGkuZnJlZVRpZXJMaWNlbmNlRGF0YSxhLHIpfSkoKX1h''@;'; put 'put ''cHBsaWNhdGlvbkFjdGl2YXRpb24oZSxyLGksYSl7YXx8KGE9ITEpLHRoaXMuc2V0U2l0ZUlkKGUpLCFlLmRlbW8mJnImJmkmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGUscixpLGEpO2xldCBjPXZvaWQgMCE9PWUuaG90X2xpY2Vuc2Vfa2V5P2UuaG90X2xpY2Vuc2Vfa2V5OnRoaXMu''@;'; put 'put ''aG90X2xpY2Vuc2Vfa2V5LnZhbHVlO2N8fChjPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQoYyksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJzQWxsb3dl''@;'; put 'put ''ZChlKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoZSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTptLGRheXNUb0V4cGlyeTpDfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShlKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJbj1DLHRo''@;'; put 'put ''aXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChDKSxDPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQociYmaSYmdGhpcy5oYW5kbGVFeHBpcnkobSxyLGksYSkpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhZS5kZW1vKSxyJiZ0aGlz''@;'; put 'put ''LmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oZSxyLGEpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGUpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoZSl7aWYoIWUuZmVhdHVyZXMpe2lmKGUuZGVtbylyZXR1cm47cmV0''@;'; put 'put ''dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3Qgcj1lLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKHJb''@;'; put 'put ''ZDIudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShyW2QyLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShyW2QyLnN0YWdlX3Jvd3NfYWxsb3dlZF0pLGhp''@;'; put 'put ''c3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUocltkMi5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUocltkMi5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnRoaXMu''@;'; put 'put ''cGFyc2VGZWF0dXJlVmFsdWUocltkMi50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShyW2QyLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUocltkMi5saW5lYWdlX2Rh''@;'; put 'put ''aWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShyW2QyLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKHJbZDIuZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUocltkMi5lZGl0UmVjb3JkXSks''@;'; put 'put ''YWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKHJbZDIuYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGUpe3JldHVybiItIj09PWU/MS8wOnBhcnNlSW50KGUpfXBh''@;'; put 'put ''cnNlRmVhdHVyZVRvZ2dsZShlKXtyZXR1cm4hIXBhcnNlSW50KGUpfWRlY3J5cHRMaWNlbnNlS2V5KGUscil7dmFyIGk9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgYT1aKGZ1bmN0aW9uKihjLG0pe2lmKCF3aW5kb3cuY3J5cHRvfHwhd2luZG93LmNyeXB0by5zdWJ0''@;'; put 'put ''bGUpdHJ5e2xldCBjZT1hdG9iKGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSk7YyhKU09OLnBhcnNlKGNlKSl9Y2F0Y2goY2Upe20oIkVycm9yIHBhcnNpbmcgaHR0cCBsaWNlbnNlIGtleSBkYXRhLiAiK2NlKX1sZXQgUCxDPXlpZWxkIGkuYmFzZTY0VG9BcnJheUJ1ZmZlcihlKS5j''@;'; put 'put ''YXRjaChjZT0+e20oY2UpfSk7Y29uc3QgWT15aWVsZCBpLmJhc2U2NFRvQXJyYXlCdWZmZXIocikuY2F0Y2goY2U9PnttKGNlKX0pO2lmKCFZKXJldHVybiB2b2lkIG0oIk1pc3NpbmcgYWN0aXZhdGlvbiBrZXkiKTtsZXQgSjtQPVk7dHJ5e0o9eWllbGQgd2luZG93LmNyeXB0by5zdWJ0bGUu''@;'; put 'put ''aW1wb3J0S2V5KCJwa2NzOCIsUCx7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goY2Upe20oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrY2UpfWlmKEopaWYoQyl0cnl7d2luZG93LmNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7''@;'; put 'put ''bmFtZToiUlNBLU9BRVAiLGhhc2g6e25hbWU6IlNIQS0yNTYifX0sSixDKS50aGVuKGNlPT57bGV0IGZlPShuZXcgaFBlLlRleHREZWNvZGVyKS5kZWNvZGUoY2UpO3RyeXtjKEpTT04ucGFyc2UoZmUpKX1jYXRjaChBZSl7bSgiRXJyb3IgcGFyc2luZyBsaWNlbnNlIGtleSBkYXRhLiAiK0Fl''@;'; put 'put ''KX19LGNlPT57bShjZSl9KX1jYXRjaChjZSl7bShjZSl9ZWxzZSBtKCJMaWNlbnNlIGtleSBieXRlcyBtaXNzaW5nIik7ZWxzZSBtKCJVbmFibGUgdG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5Iil9KTtyZXR1cm4gZnVuY3Rpb24oYyxtKXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9''@;'; put 'put ''fSgpKX1nZXRIb3RMaWNlbnNlS2V5KCl7cmV0dXJuIHRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlfWdldExpY2Vuc2VLZXlEYXRhKCl7cmV0dXJuIHRoaXMubGljZW5zZUtleURhdGF9ZGVhY3RpdmF0ZUFwcChlKXt0aGlzLl9saWNlbmNlU3RhdGU9eiQsdGhpcy5hcHBsaWNhdGlvbkFjdGl2''@;'; put 'put ''YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhKSxlJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGUpfWNoZWNrTGluZWFnZUxpbWl0KGUpe2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQ9PT0xLzApcmV0dXJuITE7Y29uc3Qgcj1sb2NhbFN0b3Jh''@;'; put 'put ''Z2UuZ2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIiksaT1naCgpKCkudmFsdWVPZigpO2lmKCFyKXJldHVybiBlfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaSwxKSwhMTtjb25zdCBhPXBhcnNlSW50KHIuc3BsaXQoIiwiKVswXSksYz1wYXJzZUludChyLnNwbGl0KCIsIilbMV0pO3JldHVybiBn''@;'; put 'put ''aCgpKGEpLmlzU2FtZShnaCgpKCksImRheSIpP2M+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXR8fChlfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaSxjKzEpLCExKTooZXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGksMSksITEpfXNldExpbmVhZ2VSZW5kZXIo''@;'; put 'put ''ZSxyKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIixgJHtlfSwke3J9YCl9YmFzZTY0VG9BcnJheUJ1ZmZlcihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgcj1aKGZ1bmN0aW9uKihpLGEpe2koaGhlLkQoZSkpfSk7cmV0dXJuIGZ1bmN0aW9uKGks''@;'; put 'put ''YSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZmZXJUb0Jhc2U2NChlKXtyZXR1cm4gbmV3IFByb21pc2UoKHIsaSk9PntyKGhoZS5sKGUpKX0pfXNldFNpdGVJZChlKXtlLnNpdGVfaWRfbXVsdGlwbGU/dGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRl''@;'; put 'put ''SWQoZS5zaXRlX2lkX211bHRpcGxlKTplLnNpdGVfaWQmJnRoaXMuc2FzU2VydmljZS5zZXRMaWNlbnNlU2l0ZUlkKGUuc2l0ZV9pZCl9aGFuZGxlU2l0ZUlkTWlzc21hdGNoKGUscixpLGEpe2xldCBjPSExLG09ITE7aWYoKCFlLnNpdGVfaWR8fGUuc2l0ZV9pZCE9PWkpJiYoYz0hMCksKCFl''@;'; put 'put ''LnNpdGVfaWRfbXVsdGlwbGV8fCFlLnNpdGVfaWRfbXVsdGlwbGUuaW5jbHVkZXMoaSkpJiYobT0hMCksYyYmbSlyZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIGtleSBwcm92aWRlZCBpcyBmb3IgZGlmZmVyZW50IG9yZ2FuaXphdGlvbi4iKSx2b2lkIHNldFRpbWVvdXQoKCk9Pntjb25zdCBD''@;'; put 'put ''PSIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmZm9yY2U9dHJ1ZSI7dGhpcy5saWNlbmNlUHJvYmxlbS5uZXh0KEMpLHRoaXMuX2xpY2VuY2VTdGF0ZT16JCx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEscixpLCEwKSxhfHx0aGlzLnJv''@;'; put 'put ''dXRlci5uYXZpZ2F0ZUJ5VXJsKEMpfSl9Y2FsY3VsYXRlRXhwaXJ5KGUpe2xldCByPWdoKCkoZS52YWxpZF91bnRpbCwiWVlZWS1NTS1ERCIpLnN0YXJ0T2YoImRheSIpLGk9Z2goKSgpLnN0YXJ0T2YoImRheSIpLGE9ci5kaWZmKGksImRheXMiKTtyZXR1cm57ZXhwaXJ5X2RhdGU6cixkYXlz''@;'; put 'put ''VG9FeHBpcnk6YX19aGFuZGxlRXhwaXJ5KGUscixpLGEpe3NldFRpbWVvdXQoKCk9Pntjb25zdCBjPWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0b2EoIkV4cGlyeSBkYXRlOiAiK2UuZm9ybWF0KCJERC9NTS9ZWVlZIikpfWA7dGhpcy5saWNl''@;'; put 'put ''bmNlUHJvYmxlbS5uZXh0KGMpLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxyLGksITApLGF8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYyl9KX1oYW5kbGVVc2Vyc0FsbG93ZWQoZSl7ZS5kZW1vJiZ2b2lkIDAhPT10aGlzLl9saWNlbmNl''@;'; put 'put ''U3RhdGUudXNlcnNfYWxsb3dlZCYmKGUudXNlcnNfYWxsb3dlZD1lLnVzZXJzX2FsbG93ZWQ+MD9lLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWUudXNlcnNfYWxsb3dlZH1oYW5kbGVVc2Vy''@;'; put 'put ''UmVnaXN0cmF0aW9uKGUscixpKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihyLlJFR0lTVEVSQ09VTlQ+ZS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0FwcE92ZXJDYXBhY2l0''@;'; put 'put ''eS5uZXh0KCEwKSk6ci5SRUdJU1RFUkNPVU5UPT09ZS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1yLklTUkVHSVNURVJFRClyZXR1cm4gci5SRUdJU1RFUkNPVU5UPGUudXNlcnNfYWxsb3dlZHx8IXRo''@;'; put 'put ''aXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChpfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5z''@;'; put 'put ''aW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChpfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQo''@;'; put 'put ''ITApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKG1oKSxPcihaOSksT3IoU2MpLE9yKEpzKSxPcihMdSksT3IocmwpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46''@;'; put 'put ''InJvb3QifSl9fXJldHVybiBufSkoKSxNRj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMpe3RoaXMubGljZW5jZVNlcnZpY2U9ZSx0aGlzLmV2ZW50U2VydmljZT1yLHRoaXMuc2FzU2VydmljZT1pLHRoaXMubG9nZ2VyU2VydmljZT1hLHRoaXMuYXBwU2V0dGluZ3NT''@;'; put 'put ''ZXJ2aWNlPWMsdGhpcy5yb3V0ZXI9bSx0aGlzLmFwcFN0b3JlU2VydmljZT1DLHRoaXMuc3lzc2l0ZT1uZXcgeGkobnVsbCksdGhpcy5lbnZpcm9ubWVudEluZm89e30sdGhpcy5zdWJzY3JpYmUoKSx0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKFk9PntZIGluc3RhbmNlb2YgZDQmJiIv''@;'; put 'put ''ZGVwbG95Ij09PVkudXJsJiZ0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpfSk7Y29uc3QgUD10aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy52YWx1ZTtQLnBlcnNpc3RTZWxlY3RlZFRoZW1lJiZ0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShQLnNl''@;'; put 'put ''bGVjdGVkVGhlbWUhPT1tdy5saWdodCYmUC5zZWxlY3RlZFRoZW1lPT09bXcuZGFyayl9c2FzU2VydmljZUluaXQoKXt0aGlzLnNhc1NlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1zdWJzY3JpYmUoKXt0aGlzLnNhc1NlcnZpY2UubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5zdWJzY3JpYmUo''@;'; put 'put ''KCk9Pnt0aGlzLnN0YXJ0VXBEYXRhKCl9KSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKGU9Pnt0aGlzLnBhdGNoU3lzc2l0ZShlKX0pfWdldEVudmlyb25tZW50SW5mbygpe3JldHVybiB0aGlzLmVudmlyb25tZW50SW5mb31wYXRjaFN5c3NpdGUoZSl7''@;'; put 'put ''bGV0IHI9dGhpcy5zeXNzaXRlLmdldFZhbHVlKCk7ciYmKHIuaW5jbHVkZXMoZSl8fChyLnB1c2goZSksdGhpcy5zeXNzaXRlLm5leHQocikpKX1zdGFydFVwRGF0YSgpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0IHI9ITE7eWllbGQgZS5zYXNTZXJ2aWNlLnJlcXVlc3Qo''@;'; put 'put ''InB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihmdW5jdGlvbigpe3ZhciBpPVooZnVuY3Rpb24qKGEpe2Uuc3lzc2l0ZS5uZXh0KFthLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFXSk7bGV0IGM9W107aWYoKCFhLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc3x8YS5hZGFwdGVyUmVz''@;'; put 'put ''cG9uc2UuZ2xvYnZhcnMmJiFhLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXSkmJmMucHVzaCgiR2xvYnZhcnMiKSxhLmFkYXB0ZXJSZXNwb25zZS5zYXNkYXRhc2V0c3x8Yy5wdXNoKCJTYXNkYXRhc2V0cyIpLGEuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnN8fGMucHVzaCgiU2FzbGlicyIp''@;'; put 'put ''LGEuYWRhcHRlclJlc3BvbnNlLnhsbWFwc3x8Yy5wdXNoKCJYTE1hcHMiKSxjLmxlbmd0aD4wKXJldHVybiByPSEwLGUuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixgJHtjLmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2VgKSx2b2lk''@;'; put 'put ''IGUubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7Y29uc3QgbT1lLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO2UuZW52aXJvbm1lbnRJbmZvPXtTWVNTSVRFOmEuYWRhcHRlclJlc3BvbnNlLlNZU1NJVEUsU1lTU0NQTDphLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5TWVNTQ1BMLFNZU1RDUElQSE9TVE5BTUU6YS5hZGFwdGVyUmVzcG9uc2UuU1lTVENQSVBIT1NUTkFNRSxTWVNWTE9ORzphLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyxNRU1TSVpFOmEuYWRhcHRlclJlc3BvbnNlLk1FTVNJWkUsU1lTUFJPQ0VTU01PREU6YS5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2UuU1lTUFJPQ0VTU01PREUsU1lTSE9TVE5BTUU6YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsU1lTVVNFUklEOmEuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCxTWVNIT1NUSU5GT0xPTkc6YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmEuYWRh''@;'; put 'put ''cHRlclJlc3BvbnNlLlNZU0VOQ09ESU5HLEFVVE9FWEVDOmEuYWRhcHRlclJlc3BvbnNlLkFVVE9FWEVDLElTQURNSU46YS5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uSVNBRE1JTixEQ19BRE1JTl9HUk9VUDphLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ19BRE1JTl9HUk9V''@;'; put 'put ''UCxBUFBfTE9DOm0/LmFwcExvY307bGV0IFksSixDPWEuYWRhcHRlclJlc3BvbnNlLnNhc2RhdGFzZXRzLFA9e307Zm9yKGxldCBIZSBvZiBDKVBbSGUuTElCUkVGXXx8KFBbSGUuTElCUkVGXT1bXSksUFtIZS5MSUJSRUZdLnB1c2goSGUuRFNOKTtsZXQgY2U9SlNPTi5wYXJzZShKU09OLnN0''@;'; put 'put ''cmluZ2lmeShQKSksZmU9W107Zm9yKGxldCBIZSBvZiBPYmplY3Qua2V5cyhjZSkpZmUucHVzaCh7TElCUkFSWVJFRjpIZSx0YWJsZXM6Y2VbSGVdfSk7bGV0IEFlPWZlO1k9UCxKPU9iamVjdC5rZXlzKFApLHZvaWQgMCE9PVkmJihXbi5lZGl0b3IubGlic0FuZFRhYmxlcz1ZKSxXbi54bG1h''@;'; put 'put ''cHM9YS5hZGFwdGVyUmVzcG9uc2UueGxtYXBzLm1hcChIZT0+KHtpZDpIZVswXSxkZXNjcmlwdGlvbjpIZVsxXSx0YXJnZXREUzpIZVsyXX0pKSxXbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9QWUsV24uZWRpdG9yLmxpYnJhcmllcz1KLFduLmVkaXRvci5zdGFydHVwU2V0PSEwLFduLmRj''@;'; put 'put ''TGliPWEuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLkRDTElCLHlpZWxkIGUubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbihhLmFkYXB0ZXJSZXNwb25zZSl9KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goaT0+e3I9ITAs''@;'; put 'put ''ZS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJUaGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlIiksZS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKX0pLGUubG9nZ2VyU2VydmljZS5sb2coIkFjdGl2YXRlZDoiLGUu''@;'; put 'put ''bGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpLHJ8fChlLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGUubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWU/ZS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmZS5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL2hvbWUiKTohZS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmIWUucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmUucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NpbmcmZm9yY2U9dHJ1ZSIpKX0pKCl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoT3IoSzEpLE9yKFNjKSxPcihKcyksT3IobWgpLE9yKGhGKSxPcihybCksT3IoWjkpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9fXJldHVybiBufSko''@;'; put 'put ''KSx3amU9KCgpPT57Y2xhc3MgbntzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgQ2plKEpuKFhzKSx3aW5kb3cpfSl9cmV0dXJuIG59KSgpO2NsYXNzIENqZXtkb2N1bWVudDt3aW5kb3c7b2Zmc2V0PSgpPT5bMCwwXTtjb25z''@;'; put 'put ''dHJ1Y3Rvcih0LGUpe3RoaXMuZG9jdW1lbnQ9dCx0aGlzLndpbmRvdz1lfXNldE9mZnNldCh0KXt0aGlzLm9mZnNldD1BcnJheS5pc0FycmF5KHQpPygpPT50OnR9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm5bdGhpcy53aW5kb3cuc2Nyb2xsWCx0aGlzLndpbmRvdy5zY3JvbGxZXX1zY3Jv''@;'; put 'put ''bGxUb1Bvc2l0aW9uKHQpe3RoaXMud2luZG93LnNjcm9sbFRvKHRbMF0sdFsxXSl9c2Nyb2xsVG9BbmNob3IodCl7Y29uc3QgZT1mdW5jdGlvbiBTamUobix0KXtjb25zdCBlPW4uZ2V0RWxlbWVudEJ5SWQodCl8fG4uZ2V0RWxlbWVudHNCeU5hbWUodClbMF07aWYoZSlyZXR1cm4gZTtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2Ygbi5jcmVhdGVUcmVlV2Fsa2VyJiZuLmJvZHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmJvZHkuYXR0YWNoU2hhZG93KXtjb25zdCByPW4uY3JlYXRlVHJlZVdhbGtlcihuLmJvZHksTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQpO2xldCBpPXIuY3VycmVudE5vZGU7''@;'; put 'put ''Zm9yKDtpOyl7Y29uc3QgYT1pLnNoYWRvd1Jvb3Q7aWYoYSl7Y29uc3QgYz1hLmdldEVsZW1lbnRCeUlkKHQpfHxhLnF1ZXJ5U2VsZWN0b3IoYFtuYW1lPSIke3R9Il1gKTtpZihjKXJldHVybiBjfWk9ci5uZXh0Tm9kZSgpfX1yZXR1cm4gbnVsbH0odGhpcy5kb2N1bWVudCx0KTtlJiYodGhp''@;'; put 'put ''cy5zY3JvbGxUb0VsZW1lbnQoZSksZS5mb2N1cygpKX1zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24odCl7dGhpcy53aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbj10fXNjcm9sbFRvRWxlbWVudCh0KXtjb25zdCBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1lLmxlZnQr''@;'; put 'put ''dGhpcy53aW5kb3cucGFnZVhPZmZzZXQsaT1lLnRvcCt0aGlzLndpbmRvdy5wYWdlWU9mZnNldCxhPXRoaXMub2Zmc2V0KCk7dGhpcy53aW5kb3cuc2Nyb2xsVG8oci1hWzBdLGktYVsxXSl9fWxldCBYMT0oKCk9PntjbGFzcyBue3JvdXRlcjtyb3V0ZTt0YWJJbmRleEF0dHJpYnV0ZTtyZW5k''@;'; put 'put ''ZXJlcjtlbDtsb2NhdGlvblN0cmF0ZWd5O2hyZWY9bnVsbDt0YXJnZXQ7cXVlcnlQYXJhbXM7ZnJhZ21lbnQ7cXVlcnlQYXJhbXNIYW5kbGluZztzdGF0ZTtpbmZvO3JlbGF0aXZlVG87aXNBbmNob3JFbGVtZW50O3N1YnNjcmlwdGlvbjtvbkNoYW5nZXM9bmV3IHVyO2NvbnN0cnVjdG9yKGUs''@;'; put 'put ''cixpLGEsYyxtKXt0aGlzLnJvdXRlcj1lLHRoaXMucm91dGU9cix0aGlzLnRhYkluZGV4QXR0cmlidXRlPWksdGhpcy5yZW5kZXJlcj1hLHRoaXMuZWw9Yyx0aGlzLmxvY2F0aW9uU3RyYXRlZ3k9bTtjb25zdCBDPWMubmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMu''@;'; put 'put ''aXNBbmNob3JFbGVtZW50PSJhIj09PUN8fCJhcmVhIj09PUMsdGhpcy5pc0FuY2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249ZS5ldmVudHMuc3Vic2NyaWJlKFA9PntQIGluc3RhbmNlb2YgZDQmJnRoaXMudXBkYXRlSHJlZigpfSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVF''@;'; put 'put ''bCgiMCIpfXByZXNlcnZlRnJhZ21lbnQ9ITE7c2tpcExvY2F0aW9uQ2hhbmdlPSExO3JlcGxhY2VVcmw9ITE7c2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoZSl7bnVsbCE9dGhpcy50YWJJbmRleEF0dHJpYnV0ZXx8dGhpcy5pc0FuY2hvckVsZW1lbnR8fHRoaXMuYXBwbHlBdHRyaWJ1dGVW''@;'; put 'put ''YWx1ZSgidGFiaW5kZXgiLGUpfW5nT25DaGFuZ2VzKGUpe3RoaXMuaXNBbmNob3JFbGVtZW50JiZ0aGlzLnVwZGF0ZUhyZWYoKSx0aGlzLm9uQ2hhbmdlcy5uZXh0KHRoaXMpfXJvdXRlckxpbmtJbnB1dD1udWxsO3NldCByb3V0ZXJMaW5rKGUpe251bGw9PWU/KHRoaXMucm91dGVyTGlua0lu''@;'; put 'put ''cHV0PW51bGwsdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbChudWxsKSk6KHRoaXMucm91dGVyTGlua0lucHV0PVU5KGUpfHxBcnJheS5pc0FycmF5KGUpP2U6W2VdLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoIjAiKSl9b25DbGljayhlLHIsaSxhLGMpe2NvbnN0IG09''@;'; put 'put ''dGhpcy51cmxUcmVlO3JldHVybiEhKG51bGw9PT1tfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1lfHxyfHxpfHxhfHxjfHwic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChtLHtza2lwTG9j''@;'; put 'put ''YXRpb25DaGFuZ2U6dGhpcy5za2lwTG9jYXRpb25DaGFuZ2UscmVwbGFjZVVybDp0aGlzLnJlcGxhY2VVcmwsc3RhdGU6dGhpcy5zdGF0ZSxpbmZvOnRoaXMuaW5mb30pLCF0aGlzLmlzQW5jaG9yRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUo''@;'; put 'put ''KX11cGRhdGVIcmVmKCl7Y29uc3QgZT10aGlzLnVybFRyZWU7dGhpcy5ocmVmPW51bGwhPT1lJiZ0aGlzLmxvY2F0aW9uU3RyYXRlZ3k/dGhpcy5sb2NhdGlvblN0cmF0ZWd5Py5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKGUpKTpudWxsO2NvbnN0IHI9bnVs''@;'; put 'put ''bD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIEhMKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24gR1cobix0KXtyZXR1cm4ic3JjIj09PXQmJlpXLmhhcyhuKXx8ImhyZWYiPT09dCYmWVcuaGFzKG4pfHwieGxpbms6aHJlZiI9PT10JiYic2NyaXB0Ij09PW4/Rkw6SHh9KHQsZSkobil9KHRoaXMu''@;'; put 'put ''aHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCJocmVmIik7dGhpcy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixyKX1hcHBseUF0dHJpYnV0ZVZhbHVlKGUscil7Y29uc3QgaT10aGlzLnJlbmRlcmVyLGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251''@;'; put 'put ''bGwhPT1yP2kuc2V0QXR0cmlidXRlKGEsZSxyKTppLnJlbW92ZUF0dHJpYnV0ZShhLGUpfWdldCB1cmxUcmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLnJvdXRlckxpbmtJbnB1dD9udWxsOlU5KHRoaXMucm91dGVyTGlua0lucHV0KT90aGlzLnJvdXRlckxpbmtJbnB1dDp0aGlzLnJvdXRlci5j''@;'; put 'put ''cmVhdGVVcmxUcmVlKHRoaXMucm91dGVyTGlua0lucHV0LHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNIYW5k''@;'; put 'put ''bGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UocmwpLFdlKHMwKSxWcCgidGFiaW5kZXgiKSxXZShUbyksV2UoemkpLFdlKEw5''@;'; put 'put ''KSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYma3QoImNsaWNrIixmdW5jdGlvbihjKXtyZXR1cm4gaS5vbkNsaWNrKGMuYnV0dG9uLGMuY3RybEtl''@;'; put 'put ''eSxjLnNoaWZ0S2V5LGMuYWx0S2V5LGMubWV0YUtleSl9KSwyJnImJlJyKCJ0YXJnZXQiLGkudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1z''@;'; put 'put ''SGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIsaW5mbzoiaW5mbyIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbMiwicHJlc2VydmVGcmFnbWVudCIsInByZXNlcnZlRnJhZ21lbnQiLFkxXSxza2lwTG9jYXRpb25DaGFuZ2U6WzIsInNraXBMb2NhdGlvbkNoYW5nZSIs''@;'; put 'put ''InNraXBMb2NhdGlvbkNoYW5nZSIsWTFdLHJlcGxhY2VVcmw6WzIsInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixZMV0scm91dGVyTGluazoicm91dGVyTGluayJ9LGZlYXR1cmVzOltXdF19KX1yZXR1cm4gbn0pKCksRXc9KCgpPT57Y2xhc3Mgbntyb3V0ZXI7ZWxlbWVudDtyZW5kZXJlcjtj''@;'; put 'put ''ZHI7bGluaztsaW5rcztjbGFzc2VzPVtdO3JvdXRlckV2ZW50c1N1YnNjcmlwdGlvbjtsaW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uO19pc0FjdGl2ZT0hMTtnZXQgaXNBY3RpdmUoKXtyZXR1cm4gdGhpcy5faXNBY3RpdmV9cm91dGVyTGlua0FjdGl2ZU9wdGlvbnM9e2V4YWN0OiExfTth''@;'; put 'put ''cmlhQ3VycmVudFdoZW5BY3RpdmU7aXNBY3RpdmVDaGFuZ2U9bmV3IFlyO2NvbnN0cnVjdG9yKGUscixpLGEsYyl7dGhpcy5yb3V0ZXI9ZSx0aGlzLmVsZW1lbnQ9cix0aGlzLnJlbmRlcmVyPWksdGhpcy5jZHI9YSx0aGlzLmxpbms9Yyx0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj1l''@;'; put 'put ''LmV2ZW50cy5zdWJzY3JpYmUobT0+e20gaW5zdGFuY2VvZiBkNCYmdGhpcy51cGRhdGUoKX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe2dvKHRoaXMubGlua3MuY2hhbmdlcyxnbyhudWxsKSkucGlwZShsdygpKS5zdWJzY3JpYmUoZT0+e3RoaXMudXBkYXRlKCksdGhpcy5zdWJzY3JpYmVUb0Vh''@;'; put 'put ''Y2hMaW5rT25DaGFuZ2VzKCl9KX1zdWJzY3JpYmVUb0VhY2hMaW5rT25DaGFuZ2VzKCl7dGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO2NvbnN0IGU9Wy4uLnRoaXMubGlua3MudG9BcnJheSgpLHRoaXMubGlua10uZmlsdGVyKHI9PiEhcikubWFwKHI9''@;'; put 'put ''PnIub25DaGFuZ2VzKTt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb249bzAoZSkucGlwZShsdygpKS5zdWJzY3JpYmUocj0+e3RoaXMuX2lzQWN0aXZlIT09dGhpcy5pc0xpbmtBY3RpdmUodGhpcy5yb3V0ZXIpKHIpJiZ0aGlzLnVwZGF0ZSgpfSl9c2V0IHJvdXRlckxpbmtBY3Rp''@;'; put 'put ''dmUoZSl7Y29uc3Qgcj1BcnJheS5pc0FycmF5KGUpP2U6ZS5zcGxpdCgiICIpO3RoaXMuY2xhc3Nlcz1yLmZpbHRlcihpPT4hIWkpfW5nT25DaGFuZ2VzKGUpe3RoaXMudXBkYXRlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRo''@;'; put 'put ''aXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX11cGRhdGUoKXshdGhpcy5saW5rc3x8IXRoaXMucm91dGVyLm5hdmlnYXRlZHx8cXVldWVNaWNyb3Rhc2soKCk9Pntjb25zdCBlPXRoaXMuaGFzQWN0aXZlTGlua3MoKTt0aGlzLmNsYXNzZXMuZm9yRWFjaChy''@;'; put 'put ''PT57ZT90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LHIpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQscil9KSxlJiZ2b2lkIDAhPT10aGlzLmFyaWFDdXJyZW50V2hlbkFjdGl2ZT90aGlzLnJlbmRl''@;'; put 'put ''cmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwiYXJpYS1jdXJyZW50Iix0aGlzLmFyaWFDdXJyZW50V2hlbkFjdGl2ZS50b1N0cmluZygpKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwiYXJpYS1jdXJy''@;'; put 'put ''ZW50IiksdGhpcy5faXNBY3RpdmUhPT1lJiYodGhpcy5faXNBY3RpdmU9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlzQWN0aXZlQ2hhbmdlLmVtaXQoZSkpfSl9aXNMaW5rQWN0aXZlKGUpe2NvbnN0IHI9ZnVuY3Rpb24gY3plKG4pe3JldHVybiEhbi5wYXRoc30odGhpcy5yb3V0''@;'; put 'put ''ZXJMaW5rQWN0aXZlT3B0aW9ucyk/dGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczp0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zLmV4YWN0fHwhMTtyZXR1cm4gaT0+e2NvbnN0IGE9aS51cmxUcmVlO3JldHVybiEhYSYmZS5pc0FjdGl2ZShhLHIpfX1oYXNBY3RpdmVMaW5rcygpe2Nv''@;'; put 'put ''bnN0IGU9dGhpcy5pc0xpbmtBY3RpdmUodGhpcy5yb3V0ZXIpO3JldHVybiB0aGlzLmxpbmsmJmUodGhpcy5saW5rKXx8dGhpcy5saW5rcy5zb21lKGUpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShybCksV2UoemkpLFdlKFRvKSxXZShGcyksV2Uo''@;'; put 'put ''WDEsOCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24ocixpLGEpe2lmKDEmciYmc28oYSxYMSw1KSwyJnIpe2xldCBjO2RpKGM9aGkoKSkmJihpLmxpbmtzPWMpfX0saW5w''@;'; put 'put ''dXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMiLGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJpYUN1cnJlbnRXaGVuQWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZlIn0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6Imlz''@;'; put 'put ''QWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0ZXJMaW5rQWN0aXZlIl0sZmVhdHVyZXM6W1d0XX0pfXJldHVybiBufSkoKTtjbGFzcyBOMmV7fWxldCB1emU9KCgpPT57Y2xhc3Mgbntyb3V0ZXI7aW5qZWN0b3I7cHJlbG9hZGluZ1N0cmF0ZWd5O2xvYWRlcjtzdWJzY3JpcHRpb247Y29u''@;'; put 'put ''c3RydWN0b3IoZSxyLGksYSl7dGhpcy5yb3V0ZXI9ZSx0aGlzLmluamVjdG9yPXIsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9aSx0aGlzLmxvYWRlcj1hfXNldFVwUHJlbG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKHJjKGU9PmUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBkNCksY3coKCk9PnRoaXMucHJlbG9hZCgpKSkuc3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rvcix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRlcyhlLHIpe2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2Ygcil7YS5wcm92aWRlcnMmJiFhLl9pbmplY3RvciYmKGEuX2luamVjdG9yPVdPKGEucHJvdmlkZXJzLGUsYFJvdXRlOiAke2EucGF0aH1gKSk7Y29uc3QgYz1hLl9pbmplY3Rvcj8/''@;'; put 'put ''ZSxtPWEuX2xvYWRlZEluamVjdG9yPz9jOyhhLmxvYWRDaGlsZHJlbiYmIWEuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09YS5jYW5Mb2FkfHxhLmxvYWRDb21wb25lbnQmJiFhLl9sb2FkZWRDb21wb25lbnQpJiZpLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKGMsYSkpLChhLmNoaWxkcmVufHxh''@;'; put 'put ''Ll9sb2FkZWRSb3V0ZXMpJiZpLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKG0sYS5jaGlsZHJlbj8/YS5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIG8wKGkpLnBpcGUobHcoKSl9cHJlbG9hZENvbmZpZyhlLHIpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKHIsKCk9Pnts''@;'; put 'put ''ZXQgaTtpPXIubG9hZENoaWxkcmVuJiZ2b2lkIDA9PT1yLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGUscik6Z28obnVsbCk7Y29uc3QgYT1pLnBpcGUodzEoYz0+bnVsbD09PWM/Z28odm9pZCAwKTooci5fbG9hZGVkUm91dGVzPWMucm91dGVzLHIuX2xvYWRlZEluamVjdG9y''@;'; put 'put ''PWMuaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVzKGMuaW5qZWN0b3I/P2UsYy5yb3V0ZXMpKSkpO3JldHVybiByLmxvYWRDb21wb25lbnQmJiFyLl9sb2FkZWRDb21wb25lbnQ/bzAoW2EsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChyKV0pLnBpcGUobHcoKSk6YX0pfXN0YXRpYyBcdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihybCksT3IodWMpLE9yKE4yZSksT3IoViQpKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBtSz1uZXcgd3Io''@;'; put 'put ''IiIpO2xldCBWMmU9KCgpPT57Y2xhc3Mgbnt1cmxTZXJpYWxpemVyO3RyYW5zaXRpb25zO3ZpZXdwb3J0U2Nyb2xsZXI7em9uZTtvcHRpb25zO3JvdXRlckV2ZW50c1N1YnNjcmlwdGlvbjtzY3JvbGxFdmVudHNTdWJzY3JpcHRpb247bGFzdElkPTA7bGFzdFNvdXJjZT0iaW1wZXJhdGl2ZSI7''@;'; put 'put ''cmVzdG9yZWRJZD0wO3N0b3JlPXt9O2NvbnN0cnVjdG9yKGUscixpLGEsYz17fSl7dGhpcy51cmxTZXJpYWxpemVyPWUsdGhpcy50cmFuc2l0aW9ucz1yLHRoaXMudmlld3BvcnRTY3JvbGxlcj1pLHRoaXMuem9uZT1hLHRoaXMub3B0aW9ucz1jLGMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlv''@;'; put 'put ''bnx8PSJkaXNhYmxlZCIsYy5hbmNob3JTY3JvbGxpbmd8fD0iZGlzYWJsZWQifWluaXQoKXsiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oIm1hbnVhbCIp''@;'; put 'put ''LHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPXRoaXMuY3JlYXRlU2Nyb2xsRXZlbnRzKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jb25zdW1lU2Nyb2xsRXZlbnRzKCl9Y3JlYXRlU2Nyb2xsRXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRz''@;'; put 'put ''LnN1YnNjcmliZShlPT57ZSBpbnN0YW5jZW9mIHRGPyh0aGlzLnN0b3JlW3RoaXMubGFzdElkXT10aGlzLnZpZXdwb3J0U2Nyb2xsZXIuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLmxhc3RTb3VyY2U9ZS5uYXZpZ2F0aW9uVHJpZ2dlcix0aGlzLnJlc3RvcmVkSWQ9ZS5yZXN0b3JlZFN0YXRl''@;'; put 'put ''P2UucmVzdG9yZWRTdGF0ZS5uYXZpZ2F0aW9uSWQ6MCk6ZSBpbnN0YW5jZW9mIGQ0Pyh0aGlzLmxhc3RJZD1lLmlkLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChlLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlLnVybEFmdGVyUmVkaXJlY3RzKS5mcmFnbWVudCkpOmUgaW5zdGFuY2VvZiBk''@;'; put 'put ''dyYmZS5jb2RlPT09bkYuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoZSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoZS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Ny''@;'; put 'put ''b2xsRXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShlPT57ZSBpbnN0YW5jZW9mIE5kZSYmKGUucG9zaXRpb24/InRvcCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj90aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Q''@;'; put 'put ''b3NpdGlvbihbMCwwXSk6ImVuYWJsZWQiPT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKGUucG9zaXRpb24pOmUuYW5jaG9yJiYiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuYW5jaG9yU2Nyb2xs''@;'; put 'put ''aW5nP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb0FuY2hvcihlLmFuY2hvcik6ImRpc2FibGVkIiE9PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uJiZ0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihbMCwwXSkpfSl9c2NoZWR1bGVTY3Jv''@;'; put 'put ''bGxFdmVudChlLHIpe3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnpvbmUucnVuKCgpPT57dGhpcy50cmFuc2l0aW9ucy5ldmVudHMubmV4dChuZXcgTmRlKGUsInBvcHN0YXRlIj09PXRoaXMubGFzdFNvdXJjZT90aGlzLnN0b3JlW3RoaXMu''@;'; put 'put ''cmVzdG9yZWRJZF06bnVsbCxyKSl9KX0sMCl9KX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7IWZ1''@;'; put 'put ''bmN0aW9uIFVPKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gZjQobix0KXtyZXR1cm57XHUwMjc1a2luZDpuLFx1MDI3NXByb3ZpZGVyczp0fX1m''@;'; put 'put ''dW5jdGlvbiBqMmUoKXtjb25zdCBuPUpuKEhvKTtyZXR1cm4gdD0+e2NvbnN0IGU9bi5nZXQoRWQpO2lmKHQhPT1lLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IHI9bi5nZXQocmwpLGk9bi5nZXQoejJlKTsxPT09bi5nZXQodkspJiZyLmluaXRpYWxOYXZpZ2F0aW9uKCksbi5nZXQoVTJl''@;'; put 'put ''LG51bGwsTW8uT3B0aW9uYWwpPy5zZXRVcFByZWxvYWRpbmcoKSxuLmdldChtSyxudWxsLE1vLk9wdGlvbmFsKT8uaW5pdCgpLHIucmVzZXRSb290Q29tcG9uZW50VHlwZShlLmNvbXBvbmVudFR5cGVzWzBdKSxpLmNsb3NlZHx8KGkubmV4dCgpLGkuY29tcGxldGUoKSxpLnVuc3Vic2NyaWJl''@;'; put 'put ''KCkpfX1jb25zdCB6MmU9bmV3IHdyKCIiLHtmYWN0b3J5OigpPT5uZXcgdXJ9KSx2Sz1uZXcgd3IoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxVMmU9bmV3IHdyKCIiKTtmdW5jdGlvbiBwemUobil7cmV0dXJuIGY0KDAsW3twcm92aWRlOlUyZSx1c2VFeGlzdGluZzp1''@;'; put 'put ''emV9LHtwcm92aWRlOk4yZSx1c2VFeGlzdGluZzpufV0pfWZ1bmN0aW9uIG16ZShuKXtyZXR1cm4gRHUoIk5nUm91dGVyVmlld1RyYW5zaXRpb25zIiksZjQoOSxbe3Byb3ZpZGU6c2hlLHVzZVZhbHVlOnRQZX0se3Byb3ZpZGU6bGhlLHVzZVZhbHVlOntza2lwTmV4dFRyYW5zaXRpb246ISFu''@;'; put 'put ''Py5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4ubn19XSl9Y29uc3QgdnplPVtsMix7cHJvdmlkZTp1VCx1c2VDbGFzczokUH0scmwsZ1Qse3Byb3ZpZGU6czAsdXNlRmFjdG9yeTpmdW5jdGlvbiBCMmUobil7cmV0dXJuIG4ucm91dGVyU3RhdGUucm9vdH0sZGVwczpbcmxdfSxWJCxbXV07bGV0''@;'; put 'put ''IFljPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt9c3RhdGljIGZvclJvb3QoZSxyKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3Z6ZSxbXSx7cHJvdmlkZTpkRixtdWx0aTohMCx1c2VWYWx1ZTplfSxbXSxyPy5lcnJvckhhbmRsZXI/e3Byb3ZpZGU6Y2hlLHVzZVZhbHVlOnIu''@;'; put 'put ''ZXJyb3JIYW5kbGVyfTpbXSx7cHJvdmlkZTpiVCx1c2VWYWx1ZTpyfHx7fX0scj8udXNlSGFzaD97cHJvdmlkZTpMOSx1c2VDbGFzczp4QWV9Ontwcm92aWRlOkw5LHVzZUNsYXNzOlV1ZX0se3Byb3ZpZGU6bUssdXNlRmFjdG9yeTooKT0+e2NvbnN0IG49Sm4od2plKSx0PUpuKEphKSxlPUpu''@;'; put 'put ''KGJUKSxyPUpuKGokKSxpPUpuKHVUKTtyZXR1cm4gZS5zY3JvbGxPZmZzZXQmJm4uc2V0T2Zmc2V0KGUuc2Nyb2xsT2Zmc2V0KSxuZXcgVjJlKGkscixuLHQsZSl9fSxyPy5wcmVsb2FkaW5nU3RyYXRlZ3k/cHplKHIucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10scj8u''@;'; put 'put ''aW5pdGlhbE5hdmlnYXRpb24/d3plKHIpOltdLHI/LmJpbmRUb0NvbXBvbmVudElucHV0cz9mNCg4LFtaZGUse3Byb3ZpZGU6b0YsdXNlRXhpc3Rpbmc6WmRlfV0pLlx1MDI3NXByb3ZpZGVyczpbXSxyPy5lbmFibGVWaWV3VHJhbnNpdGlvbnM/bXplKCkuXHUwMjc1cHJvdmlkZXJzOltdLFt7''@;'; put 'put ''cHJvdmlkZTpXMmUsdXNlRmFjdG9yeTpqMmV9LHtwcm92aWRlOkFFLG11bHRpOiEwLHVzZUV4aXN0aW5nOlcyZX1dXX19c3RhdGljIGZvckNoaWxkKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZEYsbXVsdGk6ITAsdXNlVmFsdWU6ZX1dfX1zdGF0aWMgXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVtb2Q9R2koe3R5cGU6bn0pO3N0YXRpYyBcdTAyNzVpbmo9em4oe30pfXJldHVybiBufSkoKTtmdW5jdGlvbiB3emUobil7cmV0dXJuWyJkaXNhYmxlZCI9PT1uLmluaXRpYWxOYXZpZ2F0aW9uP2Y0KDMsW1hz''@;'; put 'put ''ZSgoKT0+e0puKHJsKS5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKX0pLHtwcm92aWRlOnZLLHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09bi5pbml0aWFsTmF2aWdhdGlvbj9mNCgyLFt7cHJvdmlkZTp2Syx1c2VWYWx1ZTowfSxYc2Uo''@;'; put 'put ''KCk9Pntjb25zdCB0PUpuKEhvKTtyZXR1cm4gdC5nZXQoeUFlLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5uZXcgUHJvbWlzZShyPT57Y29uc3QgaT10LmdldChybCksYT10LmdldCh6MmUpO2RoZShpLCgpPT57cighMCl9KSx0LmdldChqJCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4o''@;'; put 'put ''cighMCksYS5jbG9zZWQ/Z28odm9pZCAwKTphKSxpLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9KV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgVzJlPW5ldyB3cigiIik7bGV0IFoyZT0oKCk9PntjbGFzcyBue19yZW5kZXJlcjtfZWxlbWVudFJlZjtvbkNoYW5nZT1lPT57fTtvblRvdWNo''@;'; put 'put ''ZWQ9KCk9Pnt9O2NvbnN0cnVjdG9yKGUscil7dGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9lbGVtZW50UmVmPXJ9c2V0UHJvcGVydHkoZSxyKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZSxyKX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0''@;'; put 'put ''aGlzLm9uVG91Y2hlZD1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGUpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShUbyksV2UoemkpKX07''@;'; put 'put ''c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpufSl9cmV0dXJuIG59KSgpLFg5PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaMmV7c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKGV8fChlPUtzKG4pKSkoaXx8bil9fSkoKTtzdGF0aWMgXHUwMjc1''@;'; put 'put ''ZGlyPVdyKHt0eXBlOm4sZmVhdHVyZXM6W0lhXX0pfXJldHVybiBufSkoKTtjb25zdCBwND1uZXcgd3IoIiIpLE16ZT17cHJvdmlkZTpwNCx1c2VFeGlzdGluZzpyYSgoKT0+dmgpLG11bHRpOiEwfTtsZXQgdmg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFg5e3dyaXRlVmFsdWUoZSl7dGhpcy5z''@;'; put 'put ''ZXRQcm9wZXJ0eSgiY2hlY2tlZCIsZSl9c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKGV8fChlPUtzKG4pKSkoaXx8bil9fSkoKTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNr''@;'; put 'put ''Ym94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHIsaSl7MSZyJiZrdCgiY2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihjKXtyZXR1cm4gaS5vbkNoYW5nZShjLnRhcmdldC5jaGVja2VkKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtNemVdKSxJYV19KX1yZXR1cm4gbn0pKCk7Y29uc3QgeHplPXtwcm92aWRlOnA0LHVzZUV4''@;'; put 'put ''aXN0aW5nOnJhKCgpPT56bCksbXVsdGk6ITB9LFR6ZT1uZXcgd3IoIiIpO2xldCB6bD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWjJle19jb21wb3NpdGlvbk1vZGU7X2NvbXBvc2luZz0hMTtjb25zdHJ1Y3RvcihlLHIsaSl7c3VwZXIoZSxyKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9aSxudWxs''@;'; put 'put ''PT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IWZ1bmN0aW9uIEV6ZSgpe2NvbnN0IG49ZzYoKT9nNigpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KG4udG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoZSl7dGhp''@;'; put 'put ''cy5zZXRQcm9wZXJ0eSgidmFsdWUiLGU/PyIiKX1faGFuZGxlSW5wdXQoZSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoZSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9''@;'; put 'put ''ITB9X2NvbXBvc2l0aW9uRW5kKGUpe3RoaXMuX2NvbXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoZSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKFRvKSxXZSh6aSksV2UoVHplLDgpKX07c3RhdGljIFx1MDI3''@;'; put 'put ''NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0''@;'; put 'put ''YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYma3QoImlucHV0Iixm''@;'; put 'put ''dW5jdGlvbihjKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQoYy50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9u''@;'; put 'put ''ZW5kIixmdW5jdGlvbihjKXtyZXR1cm4gaS5fY29tcG9zaXRpb25FbmQoYy50YXJnZXQudmFsdWUpfSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFt4emVdKSxJYV19KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gX0sobil7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4p''@;'; put 'put ''fHwic3RyaW5nIj09dHlwZW9mIG4/bi5sZW5ndGg6biBpbnN0YW5jZW9mIFNldD9uLnNpemU6bnVsbH1jb25zdCBUMD1uZXcgd3IoIiIpLEU2PW5ldyB3cigiIik7ZnVuY3Rpb24gJDJlKG4pe3JldHVybiBmdW5jdGlvbiB5SyhuKXtyZXR1cm4gbnVsbD09bnx8MD09PV9LKG4pfShuLnZhbHVl''@;'; put 'put ''KT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gSzJlKG4pe3JldHVybiEwPT09bi52YWx1ZT9udWxsOntyZXF1aXJlZDohMH19ZnVuY3Rpb24ga0Yobil7cmV0dXJuIG51bGx9ZnVuY3Rpb24gZWZlKG4pe3JldHVybiBudWxsIT1ufWZ1bmN0aW9uIHRmZShuKXtyZXR1cm4gVEUobik/bzAo''@;'; put 'put ''bik6bn1mdW5jdGlvbiBuZmUobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaChlPT57dD1udWxsIT1lP3suLi50LC4uLmV9OnR9KSwwPT09T2JqZWN0LmtleXModCkubGVuZ3RoP251bGw6dH1mdW5jdGlvbiByZmUobix0KXtyZXR1cm4gdC5tYXAoZT0+ZShuKSl9ZnVuY3Rpb24gaWZlKG4p''@;'; put 'put ''e3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbiBremUobil7cmV0dXJuIW4udmFsaWRhdGV9KHQpP3Q6ZT0+dC52YWxpZGF0ZShlKSl9ZnVuY3Rpb24gYksobil7cmV0dXJuIG51bGwhPW4/ZnVuY3Rpb24gYWZlKG4pe2lmKCFuKXJldHVybiBudWxsO2NvbnN0IHQ9bi5maWx0ZXIoZWZlKTtyZXR1''@;'; put 'put ''cm4gMD09dC5sZW5ndGg/bnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gbmZlKHJmZShlLHQpKX19KGlmZShuKSk6bnVsbH1mdW5jdGlvbiB3SyhuKXtyZXR1cm4gbnVsbCE9bj9mdW5jdGlvbiBvZmUobil7aWYoIW4pcmV0dXJuIG51bGw7Y29uc3QgdD1uLmZpbHRlcihlZmUpO3JldHVybiAwPT10''@;'; put 'put ''Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiBTemUoLi4ubil7Y29uc3QgdD1zZGUobikse2FyZ3M6ZSxrZXlzOnJ9PWxkZShuKSxpPW5ldyBGaShhPT57Y29uc3R7bGVuZ3RoOmN9PWU7aWYoIWMpcmV0dXJuIHZvaWQgYS5jb21wbGV0ZSgpO2NvbnN0IG09bmV3IEFy''@;'; put 'put ''cmF5KGMpO2xldCBDPWMsUD1jO2ZvcihsZXQgWT0wO1k8YztZKyspe2xldCBKPSExO0cxKGVbWV0pLnN1YnNjcmliZShJcihhLGNlPT57Snx8KEo9ITAsUC0tKSxtW1ldPWNlfSwoKT0+Qy0tLHZvaWQgMCwoKT0+eyghQ3x8IUopJiYoUHx8YS5uZXh0KHI/Y2RlKHIsbSk6bSksYS5jb21wbGV0''@;'; put 'put ''ZSgpKX0pKX19KTtyZXR1cm4gdD9pLnBpcGUoZyQodCkpOml9KHJmZShlLHQpLm1hcCh0ZmUpKS5waXBlKFhhKG5mZSkpfX0oaWZlKG4pKTpudWxsfWZ1bmN0aW9uIHNmZShuLHQpe3JldHVybiBudWxsPT09bj9bdF06QXJyYXkuaXNBcnJheShuKT9bLi4ubix0XTpbbix0XX1mdW5jdGlvbiBD''@;'; put 'put ''SyhuKXtyZXR1cm4gbj9BcnJheS5pc0FycmF5KG4pP246W25dOltdfWZ1bmN0aW9uIERGKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5pbmNsdWRlcyh0KTpuPT09dH1mdW5jdGlvbiB1ZmUobix0KXtjb25zdCBlPUNLKHQpO3JldHVybiBDSyhuKS5mb3JFYWNoKGk9PntERihlLGkp''@;'; put 'put ''fHxlLnB1c2goaSl9KSxlfWZ1bmN0aW9uIGRmZShuLHQpe3JldHVybiBDSyh0KS5maWx0ZXIoZT0+IURGKG4sZSkpfWNsYXNzIGhmZXtnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/''@;'; put 'put ''dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHBy''@;'; put 'put ''aXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hl''@;'; put 'put ''ZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250''@;'; put 'put ''cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X2NvbXBvc2VkVmFsaWRhdG9yRm47X2NvbXBvc2VkQXN5bmNW''@;'; put 'put ''YWxpZGF0b3JGbjtfcmF3VmFsaWRhdG9ycz1bXTtfcmF3QXN5bmNWYWxpZGF0b3JzPVtdO19zZXRWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1iSyh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3Jz''@;'; put 'put ''KHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49d0sodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRh''@;'; put 'put ''dG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fb25EZXN0cm95Q2FsbGJhY2tzPVtdO19yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25E''@;'; put 'put ''ZXN0cm95Q2FsbGJhY2tzLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119cmVzZXQodD12b2lkIDApe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KHQpfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNF''@;'; put 'put ''cnJvcih0LGUpfWdldEVycm9yKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0RXJyb3IodCxlKTpudWxsfX1jbGFzcyBJZCBleHRlbmRzIGhmZXtuYW1lO2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19Y2xhc3Mg''@;'; put 'put ''cTEgZXh0ZW5kcyBoZmV7X3BhcmVudD1udWxsO25hbWU9bnVsbDt2YWx1ZUFjY2Vzc29yPW51bGx9Y2xhc3MgZmZle19jZDtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jZD10fWdldCBpc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fY2Q/LmNvbnRyb2w/Ll90b3VjaGVkPy4oKSwhIXRoaXMuX2NkPy5j''@;'; put 'put ''b250cm9sPy50b3VjaGVkfWdldCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiB0aGlzLl9jZD8uY29udHJvbD8uX3ByaXN0aW5lPy4oKSwhIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNE''@;'; put 'put ''aXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuX2NkPy5jb250cm9sPy5fc3RhdHVzPy4oKSwhIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52''@;'; put 'put ''YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4gdGhpcy5fY2Q/Ll9zdWJtaXR0ZWQ/LigpLCEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19bGV0IGlsPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmZmV7Y29u''@;'; put 'put ''c3RydWN0b3IoZSl7c3VwZXIoZSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKHExLDIpKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIs''@;'; put 'put ''ImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYmYnIoIm5nLXVudG91Y2hlZCIsaS5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGkuaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGkuaXNQcmlzdGluZSkoIm5nLWRpcnR5IixpLmlz''@;'; put 'put ''RGlydHkpKCJuZy12YWxpZCIsaS5pc1ZhbGlkKSgibmctaW52YWxpZCIsaS5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixpLmlzUGVuZGluZyl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pfXJldHVybiBufSkoKSxxOT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZmZle2NvbnN0cnVjdG9y''@;'; put 'put ''KGUpe3N1cGVyKGUpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShJZCwxMCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5n''@;'; put 'put ''TW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYmYnIoIm5nLXVudG91Y2hlZCIsaS5pc1VudG91Y2hlZCkoIm5nLXRvdWNo''@;'; put 'put ''ZWQiLGkuaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGkuaXNQcmlzdGluZSkoIm5nLWRpcnR5IixpLmlzRGlydHkpKCJuZy12YWxpZCIsaS5pc1ZhbGlkKSgibmctaW52YWxpZCIsaS5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixpLmlzUGVuZGluZykoIm5nLXN1Ym1pdHRlZCIsaS5pc1N1Ym1p''@;'; put 'put ''dHRlZCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pfXJldHVybiBufSkoKTtjb25zdCBMVD0iVkFMSUQiLFJGPSJJTlZBTElEIixUdz0iUEVORElORyIsT1Q9IkRJU0FCTEVEIjtjbGFzcyBBd3t9Y2xhc3MgZ2ZlIGV4dGVuZHMgQXd7dmFsdWU7c291cmNlO2NvbnN0cnVjdG9yKHQs''@;'; put 'put ''ZSl7c3VwZXIoKSx0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2U9ZX19Y2xhc3MgeEsgZXh0ZW5kcyBBd3twcmlzdGluZTtzb3VyY2U7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMucHJpc3RpbmU9dCx0aGlzLnNvdXJjZT1lfX1jbGFzcyBFSyBleHRlbmRzIEF3e3RvdWNoZWQ7c291cmNl''@;'; put 'put ''O2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnRvdWNoZWQ9dCx0aGlzLnNvdXJjZT1lfX1jbGFzcyBMRiBleHRlbmRzIEF3e3N0YXR1cztzb3VyY2U7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc3RhdHVzPXQsdGhpcy5zb3VyY2U9ZX19Y2xhc3MgbWZlIGV4dGVuZHMgQXd7''@;'; put 'put ''c291cmNlO2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5zb3VyY2U9dH19Y2xhc3MgdmZlIGV4dGVuZHMgQXd7c291cmNlO2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5zb3VyY2U9dH19ZnVuY3Rpb24gVEsobil7cmV0dXJuKE9GKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5j''@;'; put 'put ''dGlvbiBBSyhuLHQpe3JldHVybihPRih0KT90LmFzeW5jVmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBPRihuKXtyZXR1cm4gbnVsbCE9biYmIUFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2Ygbn1jbGFzcyBrS3tfcGVuZGluZ0RpcnR5PSExO19oYXNPd25QZW5kaW5nQXN5''@;'; put 'put ''bmNWYWxpZGF0b3I9bnVsbDtfcGVuZGluZ1RvdWNoZWQ9ITE7X29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+e307X3VwZGF0ZU9uO19wYXJlbnQ9bnVsbDtfYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uO19jb21wb3NlZFZhbGlkYXRvckZuO19jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm47X3Jh''@;'; put 'put ''d1ZhbGlkYXRvcnM7X3Jhd0FzeW5jVmFsaWRhdG9yczt2YWx1ZTtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnModCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGUpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQg''@;'; put 'put ''dmFsaWRhdG9yKHQpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj10fWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9y''@;'; put 'put ''cz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgc3RhdHVzKCl7cmV0dXJuIHIwKHRoaXMuc3RhdHVzUmVhY3RpdmUpfXNldCBzdGF0dXModCl7cjAoKCk9PnRoaXMuc3RhdHVzUmVhY3RpdmUuc2V0KHQpKX1fc3Rh''@;'; put 'put ''dHVzPSRnKCgpPT50aGlzLnN0YXR1c1JlYWN0aXZlKCkpO3N0YXR1c1JlYWN0aXZlPWRoKHZvaWQgMCk7Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09TFR9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1SRn1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1''@;'; put 'put ''cz09VHd9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09T1R9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1PVH1lcnJvcnM7Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHIwKHRoaXMucHJpc3RpbmVSZWFjdGl2ZSl9c2V0IHByaXN0aW5lKHQpe3IwKCgpPT50aGlz''@;'; put 'put ''LnByaXN0aW5lUmVhY3RpdmUuc2V0KHQpKX1fcHJpc3RpbmU9JGcoKCk9PnRoaXMucHJpc3RpbmVSZWFjdGl2ZSgpKTtwcmlzdGluZVJlYWN0aXZlPWRoKCEwKTtnZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdG91Y2hlZCgpe3JldHVybiByMCh0aGlzLnRvdWNoZWRSZWFj''@;'; put 'put ''dGl2ZSl9c2V0IHRvdWNoZWQodCl7cjAoKCk9PnRoaXMudG91Y2hlZFJlYWN0aXZlLnNldCh0KSl9X3RvdWNoZWQ9JGcoKCk9PnRoaXMudG91Y2hlZFJlYWN0aXZlKCkpO3RvdWNoZWRSZWFjdGl2ZT1kaCghMSk7Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9X2V2ZW50cz1u''@;'; put 'put ''ZXcgdXI7ZXZlbnRzPXRoaXMuX2V2ZW50cy5hc09ic2VydmFibGUoKTt2YWx1ZUNoYW5nZXM7c3RhdHVzQ2hhbmdlcztnZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0''@;'; put 'put ''VmFsaWRhdG9ycyh0KXt0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKHQpfXNldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnModCl9YWRkVmFsaWRhdG9ycyh0KXt0aGlzLnNldFZhbGlkYXRvcnModWZlKHQsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5j''@;'; put 'put ''VmFsaWRhdG9ycyh0KXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyh1ZmUodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhkZmUodCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKHQpe3Ro''@;'; put 'put ''aXMuc2V0QXN5bmNWYWxpZGF0b3JzKGRmZSh0LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcih0KXtyZXR1cm4gREYodGhpcy5fcmF3VmFsaWRhdG9ycyx0KX1oYXNBc3luY1ZhbGlkYXRvcih0KXtyZXR1cm4gREYodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLHQpfWNs''@;'; put 'put ''ZWFyVmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZCh0PXt9KXtjb25zdCBlPSExPT09dGhpcy50b3VjaGVkO3RoaXMudG91Y2hlZD0hMDtjb25zdCByPXQuc291cmNlQ29u''@;'; put 'put ''dHJvbD8/dGhpczt0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh7Li4udCxzb3VyY2VDb250cm9sOnJ9KSxlJiYhMSE9PXQuZW1pdEV2ZW50JiZ0aGlzLl9ldmVudHMubmV4dChuZXcgRUsoITAscikpfW1hcmtBbGxBc1RvdWNoZWQodD17fSl7''@;'; put 'put ''dGhpcy5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnQsc291cmNlQ29udHJvbDp0aGlzfSksdGhpcy5fZm9yRWFjaENoaWxkKGU9PmUubWFya0FsbEFzVG91Y2hlZCh0KSl9bWFya0FzVW50b3VjaGVkKHQ9e30pe2NvbnN0IGU9ITA9PT10aGlzLnRvdWNo''@;'; put 'put ''ZWQ7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExO2NvbnN0IHI9dC5zb3VyY2VDb250cm9sPz90aGlzO3RoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudCxzb3VyY2VDb250cm9sOnJ9''@;'; put 'put ''KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0LHIpLGUmJiExIT09dC5lbWl0RXZlbnQmJnRoaXMuX2V2ZW50cy5uZXh0KG5ldyBFSyghMSxyKSl9bWFya0FzRGlydHkodD17fSl7Y29uc3QgZT0hMD09PXRoaXMucHJpc3RpbmU7dGhp''@;'; put 'put ''cy5wcmlzdGluZT0hMTtjb25zdCByPXQuc291cmNlQ29udHJvbD8/dGhpczt0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkoey4uLnQsc291cmNlQ29udHJvbDpyfSksZSYmITEhPT10LmVtaXRFdmVudCYmdGhpcy5fZXZlbnRzLm5leHQobmV3IHhL''@;'; put 'put ''KCExLHIpKX1tYXJrQXNQcmlzdGluZSh0PXt9KXtjb25zdCBlPSExPT09dGhpcy5wcmlzdGluZTt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMTtjb25zdCByPXQuc291cmNlQ29udHJvbD8/dGhpczt0aGlzLl9mb3JFYWNoQ2hpbGQoaT0+e2kubWFya0FzUHJpc3RpbmUo''@;'; put 'put ''e29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0LHIpLGUmJiExIT09dC5lbWl0RXZlbnQmJnRoaXMuX2V2ZW50cy5uZXh0KG5ldyB4SyghMCxyKSl9bWFya0FzUGVuZGlu''@;'; put 'put ''Zyh0PXt9KXt0aGlzLnN0YXR1cz1Udztjb25zdCBlPXQuc291cmNlQ29udHJvbD8/dGhpczshMSE9PXQuZW1pdEV2ZW50JiYodGhpcy5fZXZlbnRzLm5leHQobmV3IExGKHRoaXMuc3RhdHVzLGUpKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYm''@;'; put 'put ''IXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKHsuLi50LHNvdXJjZUNvbnRyb2w6ZX0pfWRpc2FibGUodD17fSl7Y29uc3QgZT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eSh0Lm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1PVCx0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVh''@;'; put 'put ''Y2hDaGlsZChpPT57aS5kaXNhYmxlKHsuLi50LG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpO2NvbnN0IHI9dC5zb3VyY2VDb250cm9sPz90aGlzOyExIT09dC5lbWl0RXZlbnQmJih0aGlzLl9ldmVudHMubmV4dChuZXcgZ2ZlKHRoaXMudmFsdWUscikpLHRoaXMuX2V2ZW50''@;'; put 'put ''cy5uZXh0KG5ldyBMRih0aGlzLnN0YXR1cyxyKSksdGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4udCxza2lwUHJpc3RpbmVDaGVjazplfSx0aGlzKSx0aGlzLl9v''@;'; put 'put ''bkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMCkpfWVuYWJsZSh0PXt9KXtjb25zdCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPUxULHRoaXMuX2ZvckVhY2hDaGlsZChyPT57ci5lbmFibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMu''@;'; put 'put ''dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9LHRoaXMpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChyPT5yKCExKSl9X3VwZGF0ZUFu''@;'; put 'put ''Y2VzdG9ycyh0LGUpe3RoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KSx0LnNraXBQcmlzdGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKHt9LGUpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh7''@;'; put 'put ''fSxlKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0PXt9KXtpZih0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQpe2NvbnN0IHI9''@;'; put 'put ''dGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKTt0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1MVHx8dGhpcy5zdGF0dXM9PT1UdykmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9y''@;'; put 'put ''KHIsdC5lbWl0RXZlbnQpfWNvbnN0IGU9dC5zb3VyY2VDb250cm9sPz90aGlzOyExIT09dC5lbWl0RXZlbnQmJih0aGlzLl9ldmVudHMubmV4dChuZXcgZ2ZlKHRoaXMudmFsdWUsZSkpLHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBMRih0aGlzLnN0YXR1cyxlKSksdGhpcy52YWx1ZUNoYW5nZXMu''@;'; put 'put ''ZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsuLi50LHNvdXJjZUNvbnRyb2w6ZX0pfV91cGRhdGVUcmVlVmFsaWRpdHkodD17''@;'; put 'put ''ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMu''@;'; put 'put ''X2FsbENvbnRyb2xzRGlzYWJsZWQoKT9PVDpMVH1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKHQsZSl7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9VHcsdGhpcy5faGFz''@;'; put 'put ''T3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPXtlbWl0RXZlbnQ6ITEhPT1lfTtjb25zdCByPXRmZSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ci5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRv''@;'; put 'put ''cj1udWxsLHRoaXMuc2V0RXJyb3JzKGkse2VtaXRFdmVudDplLHNob3VsZEhhdmVFbWl0dGVkOnR9KX0pfX1fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXtpZih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24pe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51''@;'; put 'put ''bnN1YnNjcmliZSgpO2NvbnN0IHQ9dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPy5lbWl0RXZlbnQ/PyExO3JldHVybiB0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9bnVsbCx0fXJldHVybiExfXNldEVycm9ycyh0LGU9e30pe3RoaXMuZXJyb3JzPXQsdGhpcy5f''@;'; put 'put ''dXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1lLmVtaXRFdmVudCx0aGlzLGUuc2hvdWxkSGF2ZUVtaXR0ZWQpfWdldCh0KXtsZXQgZT10O3JldHVybiBudWxsPT1lfHwoQXJyYXkuaXNBcnJheShlKXx8KGU9ZS5zcGxpdCgiLiIpKSwwPT09ZS5sZW5ndGgpP251bGw6ZS5yZWR1Y2UoKHIsaSk9''@;'; put 'put ''PnImJnIuX2ZpbmQoaSksdGhpcyl9Z2V0RXJyb3IodCxlKXtjb25zdCByPWU/dGhpcy5nZXQoZSk6dGhpcztyZXR1cm4gciYmci5lcnJvcnM/ci5lcnJvcnNbdF06bnVsbH1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5nZXRFcnJvcih0LGUpfWdldCByb290KCl7bGV0IHQ9dGhpcztmb3Io''@;'; put 'put ''O3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKHQsZSxyKXt0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSx0JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksKHR8fHIpJiZ0aGlzLl9ldmVudHMubmV4dChu''@;'; put 'put ''ZXcgTEYodGhpcy5zdGF0dXMsZSkpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0LGUscil9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBZcix0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IFlyfV9jYWxjdWxhdGVTdGF0dXMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP09UOnRoaXMuZXJyb3JzP1JGOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKFR3KT9Udzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoUkYpP1JGOkxUfV9h''@;'; put 'put ''bnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250''@;'; put 'put ''cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0LGUpe2NvbnN0IHI9IXRoaXMuX2FueUNvbnRyb2xzRGlydHkoKSxpPXRoaXMucHJpc3RpbmUhPT1yO3RoaXMucHJpc3RpbmU9cix0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5l''@;'; put 'put ''KHQsZSksaSYmdGhpcy5fZXZlbnRzLm5leHQobmV3IHhLKHRoaXMucHJpc3RpbmUsZSkpfV91cGRhdGVUb3VjaGVkKHQ9e30sZSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBFSyh0aGlzLnRvdWNoZWQsZSkpLHRoaXMuX3Bh''@;'; put 'put ''cmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0LGUpfV9vbkRpc2FibGVkQ2hhbmdlPVtdO19yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7T0YodCkmJm51bGwh''@;'; put 'put ''PXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVs''@;'; put 'put ''bH1fYXNzaWduVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkodCk/dC5zbGljZSgpOnQsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbiBGemUobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/Yksobik6bnx8bnVsbH0odGhpcy5fcmF3VmFs''@;'; put 'put ''aWRhdG9ycyl9X2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheSh0KT90LnNsaWNlKCk6dCx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49ZnVuY3Rpb24gSHplKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP3dLKG4p''@;'; put 'put ''Om58fG51bGx9KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9fWNsYXNzIFBGIGV4dGVuZHMga0t7Y29uc3RydWN0b3IodCxlLHIpe3N1cGVyKFRLKGUpLEFLKHIsZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0''@;'; put 'put ''aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9Y29udHJvbHM7cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0''@;'; put 'put ''XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUscj17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5k''@;'; put 'put ''VmFsaWRpdHkoe2VtaXRFdmVudDpyLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlz''@;'; put 'put ''LmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbCh0LGUscj17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxl''@;'; put 'put ''Y3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OnIuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnModCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH1zZXRWYWx1ZSh0LGU9e30peyhmdW5jdGlvbiBfZmUobix0LGUpe24uX2ZvckVhY2hDaGlsZCgocixpKT0+e2lmKHZvaWQgMD09PWVbaV0pdGhyb3cgbmV3IGtyKDEwMDIsIiIp''@;'; put 'put ''fSl9KSh0aGlzLDAsdCksT2JqZWN0LmtleXModCkuZm9yRWFjaChyPT57KGZ1bmN0aW9uIHlmZShuLHQsZSl7Y29uc3Qgcj1uLmNvbnRyb2xzO2lmKCEodD9PYmplY3Qua2V5cyhyKTpyKS5sZW5ndGgpdGhyb3cgbmV3IGtyKDFlMywiIik7aWYoIXJbZV0pdGhyb3cgbmV3IGtyKDEwMDEsIiIp''@;'; put 'put ''fSkodGhpcywhMCxyKSx0aGlzLmNvbnRyb2xzW3JdLnNldFZhbHVlKHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXtudWxsIT10JiYoT2JqZWN0LmtleXModCkuZm9yRWFj''@;'; put 'put ''aChyPT57Y29uc3QgaT10aGlzLmNvbnRyb2xzW3JdO2kmJmkucGF0Y2hWYWx1ZSh0W3JdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKHIsaSk9''@;'; put 'put ''PntyLnJlc2V0KHQ/dFtpXTpudWxsLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUsdGhpcyksdGhpcy5fdXBkYXRlVG91Y2hlZChlLHRoaXMpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1nZXRSYXdWYWx1ZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwodCxlLHIpPT4odFtyXT1lLmdldFJhd1ZhbHVlKCksdCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IHQ9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGUscik9PiEhci5fc3luY1BlbmRpbmdDb250cm9scygpfHxlKTtyZXR1cm4gdCYm''@;'; put 'put ''dGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9X2ZvckVhY2hDaGlsZCh0KXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGU9Pntjb25zdCByPXRoaXMuY29udHJvbHNbZV07ciYmdChyLGUpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JF''@;'; put 'put ''YWNoQ2hpbGQodD0+e3Quc2V0UGFyZW50KHRoaXMpLHQuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKHQpe2Zvcihjb25zdFtlLHJd''@;'; put 'put ''b2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhlKSYmdChyKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGUscixpKT0+KChyLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoZVtp''@;'; put 'put ''XT1yLnZhbHVlKSxlKSl9X3JlZHVjZUNoaWxkcmVuKHQsZSl7bGV0IHI9dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChpLGEpPT57cj1lKHIsaSxhKX0pLHJ9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlz''@;'; put 'put ''LmNvbnRyb2xzW3RdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KHQpP3RoaXMuY29udHJvbHNbdF06bnVsbH19Y29uc3Qg''@;'; put 'put ''Sjk9bmV3IHdyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5QVH0pLFBUPSJhbHdheXMiO2Z1bmN0aW9uIEZUKG4sdCxlPVBUKXtESyhuLHQpLHQudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKG4udmFsdWUpLChuLmRpc2FibGVkfHwiYWx3YXlzIj09PWUpJiZ0LnZhbHVlQWNj''@;'; put 'put ''ZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKG4uZGlzYWJsZWQpLGZ1bmN0aW9uIEJ6ZShuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGU9PntuLl9wZW5kaW5nVmFsdWU9ZSxuLl9wZW5kaW5nQ2hhbmdlPSEwLG4uX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PW4udXBk''@;'; put 'put ''YXRlT24mJmJmZShuLHQpfSl9KG4sdCksZnVuY3Rpb24genplKG4sdCl7Y29uc3QgZT0ocixpKT0+e3QudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKHIpLGkmJnQudmlld1RvTW9kZWxVcGRhdGUocil9O24ucmVnaXN0ZXJPbkNoYW5nZShlKSx0Ll9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e24u''@;'; put 'put ''X3VucmVnaXN0ZXJPbkNoYW5nZShlKX0pfShuLHQpLGZ1bmN0aW9uIGp6ZShuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJmJmZShuLHQpLCJzdWJtaXQi''@;'; put 'put ''IT09bi51cGRhdGVPbiYmbi5tYXJrQXNUb3VjaGVkKCl9KX0obix0KSxmdW5jdGlvbiBWemUobix0KXtpZih0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgZT1yPT57dC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUocil9O24ucmVnaXN0ZXJPbkRpc2FibGVk''@;'; put 'put ''Q2hhbmdlKGUpLHQuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57bi5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSl9KX19KG4sdCl9ZnVuY3Rpb24gTkYobix0KXtuLmZvckVhY2goZT0+e2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdl''@;'; put 'put ''KHQpfSl9ZnVuY3Rpb24gREsobix0KXtjb25zdCBlPWZ1bmN0aW9uIGxmZShuKXtyZXR1cm4gbi5fcmF3VmFsaWRhdG9yc30obik7bnVsbCE9PXQudmFsaWRhdG9yP24uc2V0VmFsaWRhdG9ycyhzZmUoZSx0LnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiZuLnNldFZhbGlkYXRv''@;'; put 'put ''cnMoW2VdKTtjb25zdCByPWZ1bmN0aW9uIGNmZShuKXtyZXR1cm4gbi5fcmF3QXN5bmNWYWxpZGF0b3JzfShuKTtudWxsIT09dC5hc3luY1ZhbGlkYXRvcj9uLnNldEFzeW5jVmFsaWRhdG9ycyhzZmUocix0LmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHImJm4uc2V0QXN5''@;'; put 'put ''bmNWYWxpZGF0b3JzKFtyXSk7Y29uc3QgaT0oKT0+bi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7TkYodC5fcmF3VmFsaWRhdG9ycyxpKSxORih0Ll9yYXdBc3luY1ZhbGlkYXRvcnMsaSl9ZnVuY3Rpb24gYmZlKG4sdCl7bi5fcGVuZGluZ0RpcnR5JiZuLm1hcmtBc0RpcnR5KCksbi5zZXRW''@;'; put 'put ''YWx1ZShuLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLHQudmlld1RvTW9kZWxVcGRhdGUobi5fcGVuZGluZ1ZhbHVlKSxuLl9wZW5kaW5nQ2hhbmdlPSExfWNvbnN0IEd6ZT17cHJvdmlkZTpJZCx1c2VFeGlzdGluZzpyYSgoKT0+cTMpfSxIVD1Qcm9taXNlLnJl''@;'; put 'put ''c29sdmUoKTtsZXQgcTM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIElke2NhbGxTZXREaXNhYmxlZFN0YXRlO2dldCBzdWJtaXR0ZWQoKXtyZXR1cm4gcjAodGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZSl9X3N1Ym1pdHRlZD0kZygoKT0+dGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZSgpKTtzdWJtaXR0ZWRS''@;'; put 'put ''ZWFjdGl2ZT1kaCghMSk7X2RpcmVjdGl2ZXM9bmV3IFNldDtmb3JtO25nU3VibWl0PW5ldyBZcjtvcHRpb25zO2NvbnN0cnVjdG9yKGUscixpKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aSx0aGlzLmZvcm09bmV3IFBGKHt9LGJLKGUpLHdLKHIpKX1uZ0FmdGVyVmlld0lu''@;'; put 'put ''aXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9s''@;'; put 'put ''KGUpe0hULnRoZW4oKCk9Pntjb25zdCByPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtlLmNvbnRyb2w9ci5yZWdpc3RlckNvbnRyb2woZS5uYW1lLGUuY29udHJvbCksRlQoZS5jb250cm9sLGUsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksZS5jb250cm9sLnVwZGF0ZVZhbHVlQW5k''@;'; put 'put ''VmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGUpfSl9Z2V0Q29udHJvbChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXJlbW92ZUNvbnRyb2woZSl7SFQudGhlbigoKT0+e2NvbnN0IHI9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO3ImJnIu''@;'; put 'put ''cmVtb3ZlQ29udHJvbChlLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGUpfSl9YWRkRm9ybUdyb3VwKGUpe0hULnRoZW4oKCk9Pntjb25zdCByPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKSxpPW5ldyBQRih7fSk7KGZ1bmN0aW9uIHdmZShuLHQpe0RLKG4sdCl9KShpLGUpLHIu''@;'; put 'put ''cmVnaXN0ZXJDb250cm9sKGUubmFtZSxpKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGUpe0hULnRoZW4oKCk9Pntjb25zdCByPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtyJiZyLnJlbW92ZUNvbnRyb2woZS5uYW1lKX0p''@;'; put 'put ''fWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUscil7SFQudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoZS5wYXRoKS5zZXRWYWx1ZShyKX0pfXNldFZhbHVlKGUpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShlKX1vblN1Ym1pdChlKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZS5zZXQoITApLGZ1bmN0aW9uIENmZShuLHQpe24uX3N5bmNQZW5kaW5nQ29udHJvbHMoKSx0LmZvckVhY2goZT0+e2NvbnN0IHI9ZS5jb250cm9sOyJzdWJtaXQiPT09ci51cGRhdGVPbiYmci5fcGVuZGluZ0NoYW5nZSYmKGUudmlld1RvTW9kZWxV''@;'; put 'put ''cGRhdGUoci5fcGVuZGluZ1ZhbHVlKSxyLl9wZW5kaW5nQ2hhbmdlPSExKX0pfSh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLHRoaXMuZm9ybS5fZXZlbnRzLm5leHQobmV3IG1mZSh0aGlzLmNvbnRyb2wpKSwiZGlhbG9nIj09PWU/LnRhcmdldD8u''@;'; put 'put ''bWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShlPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkUmVhY3RpdmUuc2V0KCExKSx0aGlzLmZvcm0uX2V2ZW50cy5uZXh0KG5ldyB2ZmUodGhpcy5mb3JtKSl9X3NldFVwZGF0ZVN0cmF0ZWd5''@;'; put 'put ''KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoZSl7cmV0dXJuIGUucG9wKCksZS5sZW5ndGg/dGhpcy5mb3JtLmdldChlKTp0aGlzLmZvcm19c3RhdGlj''@;'; put 'put ''IFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKFQwLDEwKSxXZShFNiwxMCksV2UoSjksOCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJmb3JtR3JvdXAiLCIiXSxbIm5nLWZvcm0iXSxb''@;'; put 'put ''IiIsIm5nRm9ybSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJzdWJtaXQiLGZ1bmN0aW9uKGMpe3JldHVybiBpLm9uU3VibWl0KGMpfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WzAsIm5nRm9ybU9w''@;'; put 'put ''dGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW0d6ZV0pLElhXX0pfXJldHVybiBufSkoKTtmdW5jdGlvbiBTZmUobix0KXtjb25zdCBlPW4uaW5kZXhPZih0KTtlPi0x''@;'; put 'put ''JiZuLnNwbGljZShlLDEpfWZ1bmN0aW9uIE1mZShuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYyPT09T2JqZWN0LmtleXMobikubGVuZ3RoJiYidmFsdWUiaW4gbiYmImRpc2FibGVkImluIG59Y29uc3QgT0s9Y2xhc3MgZXh0ZW5kcyBrS3tkZWZhdWx0VmFsdWU9bnVs''@;'; put 'put ''bDtfb25DaGFuZ2U9W107X3BlbmRpbmdWYWx1ZTtfcGVuZGluZ0NoYW5nZT0hMTtjb25zdHJ1Y3Rvcih0PW51bGwsZSxyKXtzdXBlcihUSyhlKSxBSyhyLGUpKSx0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMo''@;'; put 'put ''KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxPRihlKSYmKGUubm9uTnVsbGFibGV8fGUuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPU1mZSh0KT90LnZhbHVlOnQpfXNl''@;'; put 'put ''dFZhbHVlKHQsZT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09ZS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2gocj0+cih0aGlzLnZhbHVlLCExIT09ZS5lbWl0Vmlld1RvTW9kZWxDaGFu''@;'; put 'put ''Z2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe3RoaXMuc2V0VmFsdWUodCxlKX1yZXNldCh0PXRoaXMuZGVmYXVsdFZhbHVlLGU9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMubWFya0FzUHJpc3RpbmUoZSksdGhpcy5tYXJrQXNV''@;'; put 'put ''bnRvdWNoZWQoZSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGUpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyh0KXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2Uo''@;'; put 'put ''dCl7dGhpcy5fb25DaGFuZ2UucHVzaCh0KX1fdW5yZWdpc3Rlck9uQ2hhbmdlKHQpe1NmZSh0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtTZmUo''@;'; put 'put ''dGhpcy5fb25EaXNhYmxlZENoYW5nZSx0KX1fZm9yRWFjaENoaWxkKHQpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRo''@;'; put 'put ''aXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKHQpe01mZSh0KT8odGhpcy52YWx1ZT10aGlzLl9w''@;'; put 'put ''ZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fX0sSnplPXtwcm92aWRlOnExLHVz''@;'; put 'put ''ZUV4aXN0aW5nOnJhKCgpPT5Rcyl9LHhmZT1Qcm9taXNlLnJlc29sdmUoKTtsZXQgUXM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHExe19jaGFuZ2VEZXRlY3RvclJlZjtjYWxsU2V0RGlzYWJsZWRTdGF0ZTtjb250cm9sPW5ldyBPSztzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaXNEaXNhYmxl''@;'; put 'put ''ZDtfcmVnaXN0ZXJlZD0hMTt2aWV3TW9kZWw7bmFtZT0iIjtpc0Rpc2FibGVkO21vZGVsO29wdGlvbnM7dXBkYXRlPW5ldyBZcjtjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1jLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9bSx0aGlz''@;'; put 'put ''Ll9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKHIpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKSx0aGlzLnZhbHVlQWNjZXNzb3I9ZnVuY3Rpb24gTEsobix0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZSxyLGk7cmV0dXJuIEFycmF5LmlzQXJyYXkodCksdC5mb3JFYWNoKGE9Pnth''@;'; put 'put ''LmNvbnN0cnVjdG9yPT09emw/ZT1hOmZ1bmN0aW9uIFp6ZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4uY29uc3RydWN0b3IpPT09WDl9KGEpP3I9YTppPWF9KSxpfHxyfHxlfHxudWxsfSgwLGEpfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRo''@;'; put 'put ''aXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGUpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUpKXtjb25zdCByPWUubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOnIscGF0aDp0''@;'; put 'put ''aGlzLl9nZXRQYXRoKHIpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gZSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoZSksZnVuY3Rpb24gUksobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBlPW4ubW9kZWw7cmV0dXJuISFlLmlz''@;'; put 'put ''Rmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyh0LGUuY3VycmVudFZhbHVlKX0oZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3Jt''@;'; put 'put ''RGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGUp''@;'; put 'put ''e3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlz''@;'; put 'put ''Ll9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwh''@;'; put 'put ''KCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe0ZUKHRoaXMuY29udHJvbCx0aGlzLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hl''@;'; put 'put ''Y2tGb3JFcnJvcnMoKXt0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKGUpe3hmZS50aGVuKCgpPT57dGhpcy5j''@;'; put 'put ''b250cm9sLnNldFZhbHVlKGUse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChlKXtjb25zdCByPWUuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaT0wIT09ciYmWTEocik7eGZlLnRoZW4o''@;'; put 'put ''KCk9PntpJiYhdGhpcy5jb250cm9sLmRpc2FibGVkP3RoaXMuY29udHJvbC5kaXNhYmxlKCk6IWkmJnRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy5jb250cm9sLmVuYWJsZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV9nZXRQYXRoKGUpe3JldHVybiB0''@;'; put 'put ''aGlzLl9wYXJlbnQ/ZnVuY3Rpb24gRkYobix0KXtyZXR1cm5bLi4udC5wYXRoLG5dfShlLHRoaXMuX3BhcmVudCk6W2VdfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShJZCw5KSxXZShUMCwxMCksV2UoRTYsMTApLFdlKHA0LDEwKSxXZShGcyw4KSxX''@;'; put 'put ''ZShKOSw4KSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WzAsImRpc2FibGVkIiwiaXNEaXNhYmxl''@;'; put 'put ''ZCJdLG1vZGVsOlswLCJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlswLCJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW0p6ZV0pLElhLFd0''@;'; put 'put ''XX0pfXJldHVybiBufSkoKSxROT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIs''@;'; put 'put ''IiJdXSxob3N0QXR0cnM6WyJub3ZhbGlkYXRlIiwiIl0sc3RhbmRhbG9uZTohMX0pfXJldHVybiBufSkoKTtjb25zdCBRemU9e3Byb3ZpZGU6cDQsdXNlRXhpc3Rpbmc6cmEoKCk9PmpGKSxtdWx0aTohMH07bGV0IGpGPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYOXt3cml0ZVZhbHVlKGUpe3Ro''@;'; put 'put ''aXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPXI9PntlKCIiPT1yP251bGw6cGFyc2VGbG9hdChyKSl9fXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybihlfHwoZT1LcyhuKSkp''@;'; put 'put ''KGl8fG4pfX0pKCk7c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIi''@;'; put 'put ''LCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYma3QoImlucHV0IixmdW5jdGlvbihjKXtyZXR1cm4gaS5vbkNoYW5nZShjLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxzdGFuZGFsb25lOiExLGZl''@;'; put 'put ''YXR1cmVzOltzYShbUXplXSksSWFdfSl9cmV0dXJuIG59KSgpO2NvbnN0IGVVZT17cHJvdmlkZTpwNCx1c2VFeGlzdGluZzpyYSgoKT0+ekYpLG11bHRpOiEwfTtsZXQgdFVlPSgoKT0+e2NsYXNzIG57X2FjY2Vzc29ycz1bXTthZGQoZSxyKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbZSxyXSl9''@;'; put 'put ''cmVtb3ZlKGUpe2ZvcihsZXQgcj10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7cj49MDstLXIpaWYodGhpcy5fYWNjZXNzb3JzW3JdWzFdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKHIsMSl9c2VsZWN0KGUpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKHI9Pnt0aGlz''@;'; put 'put ''Ll9pc1NhbWVHcm91cChyLGUpJiZyWzFdIT09ZSYmclsxXS5maXJlVW5jaGVjayhlLnZhbHVlKX0pfV9pc1NhbWVHcm91cChlLHIpe3JldHVybiEhZVswXS5jb250cm9sJiZlWzBdLl9wYXJlbnQ9PT1yLl9jb250cm9sLl9wYXJlbnQmJmVbMV0ubmFtZT09PXIubmFtZX1zdGF0aWMgXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCksekY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFg5e19yZWdpc3RyeTtfaW5qZWN0b3I7''@;'; put 'put ''X3N0YXRlO19jb250cm9sO19mbjtzZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITE7b25DaGFuZ2U9KCk9Pnt9O25hbWU7Zm9ybUNvbnRyb2xOYW1lO3ZhbHVlO2NhbGxTZXREaXNhYmxlZFN0YXRlPUpuKEo5LHtvcHRpb25hbDohMH0pPz9QVDtjb25zdHJ1Y3RvcihlLHIsaSxhKXtzdXBlcihlLHIp''@;'; put 'put ''LHRoaXMuX3JlZ2lzdHJ5PWksdGhpcy5faW5qZWN0b3I9YX1uZ09uSW5pdCgpe3RoaXMuX2NvbnRyb2w9dGhpcy5faW5qZWN0b3IuZ2V0KHExKSx0aGlzLl9jaGVja05hbWUoKSx0aGlzLl9yZWdpc3RyeS5hZGQodGhpcy5fY29udHJvbCx0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlZ2lz''@;'; put 'put ''dHJ5LnJlbW92ZSh0aGlzKX13cml0ZVZhbHVlKGUpe3RoaXMuX3N0YXRlPWU9PT10aGlzLnZhbHVlLHRoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLHRoaXMuX3N0YXRlKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2ZuPWUsdGhpcy5vbkNoYW5nZT0oKT0+e2UodGhpcy52YWx1ZSksdGhp''@;'; put 'put ''cy5fcmVnaXN0cnkuc2VsZWN0KHRoaXMpfX1zZXREaXNhYmxlZFN0YXRlKGUpeyh0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZHx8ZXx8IndoZW5EaXNhYmxlZEZvckxlZ2FjeUNvZGUiPT09dGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSkmJnRoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIixl''@;'; put 'put ''KSx0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZD0hMH1maXJlVW5jaGVjayhlKXt0aGlzLndyaXRlVmFsdWUoZSl9X2NoZWNrTmFtZSgpeyF0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiYodGhpcy5uYW1lPXRoaXMuZm9ybUNvbnRyb2xOYW1lKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoVG8pLFdlKHppKSxXZSh0VWUpLFdlKEhvKSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlv''@;'; put 'put ''IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9u''@;'; put 'put ''VG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtlVWVdKSxJYV19KX1yZXR1cm4gbn0pKCk7Y29uc3QgUEs9bmV3IHdyKCIiKSxsVWU9e3Byb3Zp''@;'; put 'put ''ZGU6cDQsdXNlRXhpc3Rpbmc6cmEoKCk9PklmKSxtdWx0aTohMH07ZnVuY3Rpb24gRGZlKG4sdCl7cmV0dXJuIG51bGw9PW4/YCR7dH1gOih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0PSJPYmplY3QiKSxgJHtufTogJHt0fWAuc2xpY2UoMCw1MCkpfWxldCBJZj0oKCk9PntjbGFzcyBuIGV4''@;'; put 'put ''dGVuZHMgWDl7dmFsdWU7X29wdGlvbk1hcD1uZXcgTWFwO19pZENvdW50ZXI9MDtzZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX1fY29tcGFyZVdpdGg9T2JqZWN0LmlzO3dyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lO2NvbnN0IGk9RGZlKHRoaXMuX2dldE9wdGlvbklk''@;'; put 'put ''KGUpLGUpO3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9cj0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUociksZSh0aGlzLnZhbHVlKX19X3JlZ2lzdGVyT3B0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291bnRlcisr''@;'; put 'put ''KS50b1N0cmluZygpfV9nZXRPcHRpb25JZChlKXtmb3IoY29uc3QgciBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQociksZSkpcmV0dXJuIHI7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2NvbnN0IHI9ZnVu''@;'; put 'put ''Y3Rpb24gY1VlKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKHIpP3RoaXMuX29wdGlvbk1hcC5nZXQocik6ZX1zdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBlO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4oZXx8KGU9S3MobikpKShp''@;'; put 'put ''fHxuKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwz''@;'; put 'put ''LCJtdWx0aXBsZSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJjaGFuZ2UiLGZ1bmN0aW9uKGMpe3JldHVybiBpLm9uQ2hhbmdlKGMudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFy''@;'; put 'put ''ZVdpdGg6ImNvbXBhcmVXaXRoIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW2xVZV0pLElhXX0pfXJldHVybiBufSkoKSxSZj0oKCk9PntjbGFzcyBue19lbGVtZW50O19yZW5kZXJlcjtfc2VsZWN0O2lkO2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVu''@;'; put 'put ''ZGVyZXI9cix0aGlzLl9zZWxlY3Q9aSx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsZSksdGhpcy5fc2V0RWxl''@;'; put 'put ''bWVudFZhbHVlKERmZSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGUpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVl''@;'; put 'put ''KX1fc2V0RWxlbWVudFZhbHVlKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGUpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3Nl''@;'; put 'put ''bGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZSh6aSksV2UoVG8pLFdlKElmLDkpKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRz''@;'; put 'put ''OntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifSxzdGFuZGFsb25lOiExfSl9cmV0dXJuIG59KSgpO2NvbnN0IHVVZT17cHJvdmlkZTpwNCx1c2VFeGlzdGluZzpyYSgoKT0+QlQpLG11bHRpOiEwfTtmdW5jdGlvbiBJZmUobix0KXtyZXR1cm4gbnVsbD09bj9gJHt0fWA6KCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgdCYmKHQ9YCcke3R9J2ApLHQmJiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9Ik9iamVjdCIpLGAke259OiAke3R9YC5zbGljZSgwLDUwKSl9bGV0IEJUPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYOXt2YWx1ZTtfb3B0aW9uTWFwPW5ldyBNYXA7X2lkQ291bnRlcj0wO3NldCBj''@;'; put 'put ''b21wYXJlV2l0aChlKXt0aGlzLl9jb21wYXJlV2l0aD1lfV9jb21wYXJlV2l0aD1PYmplY3QuaXM7d3JpdGVWYWx1ZShlKXtsZXQgcjtpZih0aGlzLnZhbHVlPWUsQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgaT1lLm1hcChhPT50aGlzLl9nZXRPcHRpb25JZChhKSk7cj0oYSxjKT0+e2EuX3Nl''@;'; put 'put ''dFNlbGVjdGVkKGkuaW5kZXhPZihjLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSByPShpLGEpPT57aS5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChyKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9cj0+e2NvbnN0IGk9W10sYT1yLnNlbGVjdGVkT3B0''@;'; put 'put ''aW9ucztpZih2b2lkIDAhPT1hKXtjb25zdCBjPWE7Zm9yKGxldCBtPTA7bTxjLmxlbmd0aDttKyspe2NvbnN0IFA9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoY1ttXS52YWx1ZSk7aS5wdXNoKFApfX1lbHNle2NvbnN0IGM9ci5vcHRpb25zO2ZvcihsZXQgbT0wO208Yy5sZW5ndGg7bSsrKXtjb25z''@;'; put 'put ''dCBDPWNbbV07aWYoQy5zZWxlY3RlZCl7Y29uc3QgUD10aGlzLl9nZXRPcHRpb25WYWx1ZShDLnZhbHVlKTtpLnB1c2goUCl9fX10aGlzLnZhbHVlPWksZShpKX19X3JlZ2lzdGVyT3B0aW9uKGUpe2NvbnN0IHI9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9v''@;'; put 'put ''cHRpb25NYXAuc2V0KHIsZSkscn1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGNvbnN0IHIgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KHIpLl92YWx1ZSxlKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUo''@;'; put 'put ''ZSl7Y29uc3Qgcj1mdW5jdGlvbiBkVWUobil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMocik/dGhpcy5fb3B0aW9uTWFwLmdldChyKS5fdmFsdWU6ZX1zdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBlO3JldHVybiBmdW5jdGlvbihpKXty''@;'; put 'put ''ZXR1cm4oZXx8KGU9S3MobikpKShpfHxuKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVj''@;'; put 'put ''dCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJjaGFuZ2UiLGZ1bmN0aW9uKGMpe3JldHVybiBpLm9uQ2hhbmdlKGMudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0''@;'; put 'put ''czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW3VVZV0pLElhXX0pfXJldHVybiBufSkoKSxMZj0oKCk9PntjbGFzcyBue19lbGVtZW50O19yZW5kZXJlcjtfc2VsZWN0O2lkO192YWx1ZTtjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy5fZWxl''@;'; put 'put ''bWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fc2VsZWN0PWksdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRW''@;'; put 'put ''YWx1ZShJZmUodGhpcy5pZCxlKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGUpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9ZSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoSWZlKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZh''@;'; put 'put ''bHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShlKX1fc2V0RWxlbWVudFZhbHVlKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGUpfV9zZXRTZWxlY3RlZChlKXt0aGlzLl9yZW5kZXJl''@;'; put 'put ''ci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixlKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFs''@;'; put 'put ''dWUpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoemkpLFdlKFRvKSxXZShCVCw5KSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVl''@;'; put 'put ''In0sc3RhbmRhbG9uZTohMX0pfXJldHVybiBufSkoKTtsZXQgZXY9KCgpPT57Y2xhc3MgbntfdmFsaWRhdG9yPWtGO19vbkNoYW5nZTtfZW5hYmxlZDtuZ09uQ2hhbmdlcyhlKXtpZih0aGlzLmlucHV0TmFtZSBpbiBlKXtjb25zdCByPXRoaXMubm9ybWFsaXplSW5wdXQoZVt0aGlzLmlucHV0''@;'; put 'put ''TmFtZV0uY3VycmVudFZhbHVlKTt0aGlzLl9lbmFibGVkPXRoaXMuZW5hYmxlZChyKSx0aGlzLl92YWxpZGF0b3I9dGhpcy5fZW5hYmxlZD90aGlzLmNyZWF0ZVZhbGlkYXRvcihyKTprRix0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX19dmFsaWRhdGUoZSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3ZhbGlkYXRvcihlKX1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9ZW5hYmxlZChlKXtyZXR1cm4gbnVsbCE9ZX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixmZWF0''@;'; put 'put ''dXJlczpbV3RdfSl9cmV0dXJuIG59KSgpO2NvbnN0IHBVZT17cHJvdmlkZTpUMCx1c2VFeGlzdGluZzpyYSgoKT0+RkspLG11bHRpOiEwfSxnVWU9e3Byb3ZpZGU6VDAsdXNlRXhpc3Rpbmc6cmEoKCk9PkhLKSxtdWx0aTohMH07bGV0IEZLPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBldntyZXF1''@;'; put 'put ''aXJlZDtpbnB1dE5hbWU9InJlcXVpcmVkIjtub3JtYWxpemVJbnB1dD1ZMTtjcmVhdGVWYWxpZGF0b3I9ZT0+JDJlO2VuYWJsZWQoZSl7cmV0dXJuIGV9c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgZTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKGV8fChlPUtzKG4pKSkoaXx8bil9fSko''@;'; put 'put ''KTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVx''@;'; put 'put ''dWlyZWQiLCIiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsyJnImJlJyKCJyZXF1aXJlZCIsaS5fZW5hYmxlZD8iIjpudWxsKX0saW5wdXRzOntyZXF1aXJlZDoicmVxdWlyZWQifSxzdGFuZGFsb25lOiEx''@;'; put 'put ''LGZlYXR1cmVzOltzYShbcFVlXSksSWFdfSl9cmV0dXJuIG59KSgpLEhLPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGS3tjcmVhdGVWYWxpZGF0b3I9ZT0+SzJlO3N0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGU7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybihlfHwoZT1LcyhuKSkpKGl8fG4p''@;'; put 'put ''fX0pKCk7c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIi''@;'; put 'put ''XSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHIsaSl7MiZyJiZScigicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtn''@;'; put 'put ''VWVdKSxJYV19KX1yZXR1cm4gbn0pKCk7Y29uc3QgeVVlPXtwcm92aWRlOlQwLHVzZUV4aXN0aW5nOnJhKCgpPT5OSyksbXVsdGk6ITB9O2xldCBOSz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZXZ7bWF4bGVuZ3RoO2lucHV0TmFtZT0ibWF4bGVuZ3RoIjtub3JtYWxpemVJbnB1dD1lPT5mdW5j''@;'; put 'put ''dGlvbiBSZmUobil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBuP246cGFyc2VJbnQobiwxMCl9KGUpO2NyZWF0ZVZhbGlkYXRvcj1lPT5mdW5jdGlvbiBKMmUobil7cmV0dXJuIHQ9Pntjb25zdCBlPXQudmFsdWU/Lmxlbmd0aD8/X0sodC52YWx1ZSk7cmV0dXJuIG51bGwhPT1lJiZlPm4/e21h''@;'; put 'put ''eGxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6ZX19Om51bGx9fShlKTtzdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBlO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4oZXx8KGU9S3MobikpKShpfHxuKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxl''@;'; put 'put ''Y3RvcnM6W1siIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtYXhsZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYmUnIo''@;'; put 'put ''Im1heGxlbmd0aCIsaS5fZW5hYmxlZD9pLm1heGxlbmd0aDpudWxsKX0saW5wdXRzOnttYXhsZW5ndGg6Im1heGxlbmd0aCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFt5VWVdKSxJYV19KX1yZXR1cm4gbn0pKCksVmZlPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBlOm59KTtzdGF0aWMgXHUwMjc1aW5qPXpuKHt9KX1yZXR1cm4gbn0pKCksT2M9KCgpPT57Y2xhc3MgbntzdGF0aWMgd2l0aENvbmZpZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92''@;'; put 'put ''aWRlOko5LHVzZVZhbHVlOmUuY2FsbFNldERpc2FibGVkU3RhdGU/P1BUfV19fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj16bih7aW1wb3J0czpbVmZlXX0pfXJldHVy''@;'; put 'put ''biBufSkoKSx3VWU9KCgpPT57Y2xhc3MgbntzdGF0aWMgd2l0aENvbmZpZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOlBLLHVzZVZhbHVlOmUud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOko5LHVzZVZhbHVlOmUuY2Fs''@;'; put 'put ''bFNldERpc2FibGVkU3RhdGU/P1BUfV19fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj16bih7aW1wb3J0czpbVmZlXX0pfXJldHVybiBufSkoKTtjb25zdCBEdz1bImFu''@;'; put 'put ''Z2xlIix7b3V0bGluZTonPHBhdGggZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+J31dLGYyPVsiZXhjbGFtYXRpb24tY2lyY2xlIix7b3V0bGluZTon''@;'; put 'put ''PHBhdGggZD0iTTE4IDE5LjhDMTguNTUgMTkuOCAxOSAxOS4zNSAxOSAxOC44VjEzQzE5IDEyLjQ1IDE4LjU1IDEyIDE4IDEyQzE3LjQ1IDEyIDE3IDEyLjQ1IDE3IDEzVjE4LjhDMTcgMTkuMzUgMTcuNDUgMTkuOCAxOCAxOS44Wk0xOC44NSAyMS45NUMxOC43MyAyMS44NCAxOC42IDIxLjc1''@;'; put 'put ''IDE4LjQ2IDIxLjY5QzE4LjE3IDIxLjU3IDE3LjgzIDIxLjU3IDE3LjU0IDIxLjY5QzE3LjQgMjEuNzUgMTcuMjcgMjEuODQgMTcuMTUgMjEuOTVDMTYuOTMgMjIuMTggMTYuOCAyMi40OCAxNi44IDIyLjhDMTYuOCAyMy4xMiAxNi45MyAyMy40MiAxNy4xNSAyMy42NUMxNy4yNyAyMy43NiAx''@;'; put 'put ''Ny40IDIzLjg1IDE3LjU0IDIzLjkxQzE3LjY5IDIzLjk3IDE3Ljg0IDI0IDE4IDI0QzE4LjE2IDI0IDE4LjMxIDIzLjk3IDE4LjQ2IDIzLjkxQzE4LjYgMjMuODUgMTguNzMgMjMuNzYgMTguODUgMjMuNjVDMTkuMDcgMjMuNDIgMTkuMiAyMy4xMiAxOS4yIDIyLjhDMTkuMiAyMi42NCAxOS4x''@;'; put 'put ''NyAyMi40OSAxOS4xMSAyMi4zNEMxOS4wNSAyMi4yIDE4Ljk2IDIyLjA2IDE4Ljg1IDIxLjk1Wk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAy''@;'; put 'put ''OCA4IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMw''@;'; put 'put ''IDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTYuOCAxMi42NUMxNi44IDExLjk5IDE3LjM0IDExLjQ1IDE4IDExLjQ1QzE4LjY2IDExLjQ1IDE5LjIgMTEuOTkgMTkuMiAxMi42NVYxOC40NUMxOS4yIDE5LjExIDE4LjY2IDE5LjY1IDE4IDE5LjY1QzE3LjM0IDE5LjY1IDE2''@;'; put 'put ''LjggMTkuMTEgMTYuOCAxOC40NVYxMi42NVpNMTguOTggMjQuMTVDMTguODQgMjQuMjggMTguNjkgMjQuMzggMTguNTMgMjQuNDVDMTguMzUgMjQuNTIgMTguMTggMjQuNTYgMTggMjQuNTZDMTcuODIgMjQuNTYgMTcuNjQgMjQuNTMgMTcuNDYgMjQuNDVDMTcuMzEgMjQuMzggMTcuMTYgMjQu''@;'; put 'put ''MjkgMTcgMjQuMTRDMTYuNzQgMjMuODcgMTYuNTkgMjMuNTIgMTYuNTkgMjMuMTVDMTYuNTkgMjIuNzggMTYuNzMgMjIuNDQgMTcgMjIuMTVDMTcuMTQgMjIuMDIgMTcuMjkgMjEuOTIgMTcuNDUgMjEuODVDMTcuNjIgMjEuNzggMTcuOCAyMS43NCAxNy45OSAyMS43NEMxOC4xOCAyMS43NCAx''@;'; put 'put ''OC4zNiAyMS43OCAxOC41MyAyMS44NUMxOC42OCAyMS45MiAxOC44MyAyMi4wMiAxOC45OCAyMi4xNUMxOS4xIDIyLjI3IDE5LjIxIDIyLjQzIDE5LjI4IDIyLjYxQzE5LjM1IDIyLjc5IDE5LjM5IDIyLjk2IDE5LjM5IDIzLjE0QzE5LjM5IDIzLjUgMTkuMjUgMjMuODUgMTguOTcgMjQuMTRM''@;'; put 'put ''MTguOTggMjQuMTVaIi8+J31dLHAyPVsiY2hlY2stY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTIyLjYxIDE0LjIyTDE2LjI1IDIwLjU4TDEyLjcxIDE3LjA0QzEyLjMyIDE2LjY1IDExLjY5IDE2LjY1IDExLjMgMTcuMDRDMTAuOTEgMTcuNDMgMTAuOTEgMTguMDYgMTEuMyAxOC40NUwx''@;'; put 'put ''Ni4yNSAyMy40TDI0LjAzIDE1LjYyQzI0LjQyIDE1LjIzIDI0LjQyIDE0LjYgMjQuMDMgMTQuMjFDMjMuNjQgMTMuODIgMjMuMDEgMTMuODIgMjIuNjIgMTQuMjFMMjIuNjEgMTQuMjJaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAz''@;'; put 'put ''MCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4''@;'; put 'put ''IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0yNC4xNiAxNS43OEwxNi4yNCAyMy43TDExLjE1IDE4LjYxQzEwLjY4IDE4LjE0IDEwLjY4IDE3LjM4IDExLjE1IDE2LjkxQzExLjYyIDE2''@;'; put 'put ''LjQ0IDEyLjM4IDE2LjQ0IDEyLjg1IDE2LjkxTDE2LjI0IDIwLjNMMjIuNDYgMTQuMDhDMjIuOTMgMTMuNjEgMjMuNjkgMTMuNjEgMjQuMTYgMTQuMDhDMjQuNjMgMTQuNTUgMjQuNjMgMTUuMzEgMjQuMTYgMTUuNzhaIi8+J31dLEJmZT1bImVsbGlwc2lzLWhvcml6b250YWwiLHtvdXRsaW5l''@;'; put 'put ''Oic8cGF0aCBkPSJNNy44IDE4LjFDNy44IDE5Ljc1NjggNi41MDE2MyAyMS4xIDQuOSAyMS4xQzMuMjk4MzcgMjEuMSAyIDE5Ljc1NjggMiAxOC4xQzIgMTYuNDQzMSAzLjI5ODM3IDE1LjEgNC45IDE1LjFDNi41MDE2MyAxNS4xIDcuOCAxNi40NDMxIDcuOCAxOC4xWiIvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCAyMS4xQzE5LjYwMTYgMjEuMSAyMC45IDE5Ljc1NjggMjAuOSAxOC4xQzIwLjkgMTYuNDQzMSAxOS42MDE2IDE1LjEgMTggMTUuMUMxNi4zOTg0IDE1LjEgMTUuMSAxNi40NDMxIDE1LjEgMTguMUMxNS4xIDE5Ljc1NjggMTYuMzk4NCAyMS4xIDE4IDIxLjFaIi8+PHBhdGggZD0iTTMxLjEg''@;'; put 'put ''MjEuMUMzMi43MDE2IDIxLjEgMzQgMTkuNzU2OCAzNCAxOC4xQzM0IDE2LjQ0MzEgMzIuNzAxNiAxNS4xIDMxLjEgMTUuMUMyOS40OTg0IDE1LjEgMjguMiAxNi40NDMxIDI4LjIgMTguMUMyOC4yIDE5Ljc1NjggMjkuNDk4NCAyMS4xIDMxLjEgMjEuMVoiLz4nLG91dGxpbmVCYWRnZWQ6Jzxw''@;'; put 'put ''YXRoIGQ9Ik00LjkgMjEuMUM2LjUwMTYzIDIxLjEgNy44IDE5Ljc1NjggNy44IDE4LjFDNy44IDE2LjQ0MzEgNi41MDE2MyAxNS4xIDQuOSAxNS4xQzMuMjk4MzcgMTUuMSAyIDE2LjQ0MzEgMiAxOC4xQzIgMTkuNzU2OCAzLjI5ODM3IDIxLjEgNC45IDIxLjFaIi8+PHBhdGggZD0iTTE4IDIx''@;'; put 'put ''LjFDMTkuNjAxNiAyMS4xIDIwLjkgMTkuNzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2LjQ0MzEgMTUuMSAxOC4xQzE1LjEgMTkuNzU2OCAxNi4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzQgMTguMUMz''@;'; put 'put ''NCAxOS43NTY4IDMyLjcwMTYgMjEuMSAzMS4xIDIxLjFDMjkuNDk4NCAyMS4xIDI4LjIgMTkuNzU2OCAyOC4yIDE4LjFDMjguMiAxNi40NDMxIDI5LjQ5ODQgMTUuMSAzMS4xIDE1LjFDMzIuNzAxNiAxNS4xIDM0IDE2LjQ0MzEgMzQgMTguMVoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAx''@;'; put 'put ''MSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0salQ9WyJ3aW5kb3ctY2xvc2UiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEgMTguMDAwM0wyNi43IDEw''@;'; put 'put ''LjcxMDNDMjcuMDM5OCAxMC4zMTM1IDI3LjAxNjkgOS43MjIwNyAyNi42NDc2IDkuMzUyN0MyNi4yNzgyIDguOTgzMzMgMjUuNjg2OCA4Ljk2MDQ5IDI1LjI5IDkuMzAwMjZMMTggMTYuNTkwM0wxMC43MSA5LjI5MDI2QzEwLjMxMzIgOC45NTA0OSA5LjcyMTgxIDguOTczMzMgOS4zNTI0NCA5''@;'; put 'put ''LjM0MjdDOC45ODMwNyA5LjcxMjA3IDguOTYwMjMgMTAuMzAzNSA5LjMwMDAxIDEwLjcwMDNMMTYuNTkgMTguMDAwM0w5LjI5MDAxIDI1LjI5MDNDOS4wMDQ2MyAyNS41MzQ3IDguODgwMzIgMjUuOTE4NCA4Ljk2ODE5IDI2LjI4MzdDOS4wNTYwNyAyNi42NDkgOS4zNDEyOSAyNi45MzQyIDku''@;'; put 'put ''NzA2NTkgMjcuMDIyMUMxMC4wNzE5IDI3LjEwOTkgMTAuNDU1NiAyNi45ODU2IDEwLjcgMjYuNzAwM0wxOCAxOS40MTAzTDI1LjI5IDI2LjcwMDNDMjUuNjg2OCAyNy4wNCAyNi4yNzgyIDI3LjAxNzIgMjYuNjQ3NiAyNi42NDc4QzI3LjAxNjkgMjYuMjc4NSAyNy4wMzk4IDI1LjY4NyAyNi43''@;'; put 'put ''IDI1LjI5MDNMMTkuNDEgMTguMDAwM1oiLz4nfV0sQ1VlPVsiaW5mby1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjEgMjNIMTlWMTVIMTZDMTUuNDUgMTUgMTUgMTUuNDUgMTUgMTZDMTUgMTYuNTUgMTUuNDUgMTcgMTYgMTdIMTdWMjNIMTVDMTQuNDUgMjMgMTQgMjMuNDUgMTQgMjRD''@;'; put 'put ''MTQgMjQuNTUgMTQuNDUgMjUgMTUgMjVIMjFDMjEuNTUgMjUgMjIgMjQuNTUgMjIgMjRDMjIgMjMuNDUgMjEuNTUgMjMgMjEgMjNaTTE3LjkzIDEzLjNDMTguNyAxMy4zIDE5LjMzIDEyLjY3IDE5LjMzIDExLjlDMTkuMzMgMTEuMTMgMTguNyAxMC41IDE3LjkzIDEwLjVDMTcuMTYgMTAuNSAx''@;'; put 'put ''Ni41MyAxMS4xMyAxNi41MyAxMS45QzE2LjUzIDEyLjY3IDE3LjE2IDEzLjMgMTcuOTMgMTMuM1pNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkg''@;'; put 'put ''MjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAz''@;'; put 'put ''MCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE3LjkzIDEwLjNDMTguODEgMTAuMyAxOS41MyAxMS4wMiAxOS41MyAxMS45QzE5LjUzIDEyLjc4IDE4LjgxIDEzLjUgMTcuOTMgMTMuNUMxNy4wNSAxMy41IDE2LjMzIDEyLjc4IDE2LjMzIDExLjlDMTYuMzMgMTEuMDIgMTcu''@;'; put 'put ''MDUgMTAuMyAxNy45MyAxMC4zWk0yMSAyNS4ySDE1QzE0LjM0IDI1LjIgMTMuOCAyNC42NiAxMy44IDI0QzEzLjggMjMuMzQgMTQuMzQgMjIuOCAxNSAyMi44SDE2LjhWMTcuMkgxNkMxNS4zNCAxNy4yIDE0LjggMTYuNjYgMTQuOCAxNkMxNC44IDE1LjM0IDE1LjM0IDE0LjggMTYgMTQuOEgx''@;'; put 'put ''OS4yVjIyLjhIMjFDMjEuNjYgMjIuOCAyMi4yIDIzLjM0IDIyLjIgMjRDMjIuMiAyNC42NiAyMS42NiAyNS4yIDIxIDI1LjJaIi8+J31dLGpmZT1bInRpbWVzIix7b3V0bGluZTonPHBhdGggZD0iTTE5LjQ2OTYgMTcuOTczMkwyNy43NTk2IDkuNzA1NDJDMjguMDk5NCA5LjMwOTcyIDI4LjA3''@;'; put 'put ''NjUgOC43MTk4NyAyNy43MDcxIDguMzUxNDhDMjcuMzM3OCA3Ljk4MzEgMjYuNzQ2MyA3Ljk2MDMyIDI2LjM0OTYgOC4yOTkxOUwxOC4wNTk2IDE2LjU2N0w5Ljc2OTU4IDguMjg5MjJDOS4zNzc0NSA3Ljg5ODE0IDguNzQxNyA3Ljg5ODE0IDguMzQ5NTggOC4yODkyMkM3Ljk1NzQ1IDguNjgw''@;'; put 'put ''MjkgNy45NTc0NSA5LjMxNDM0IDguMzQ5NTggOS43MDU0MkwxNi42NDk2IDE3Ljk3MzJMOC4zNDk1OCAyNi4yNDFDOC4wNjQyIDI2LjQ4NDggNy45Mzk4OSAyNi44Njc1IDguMDI3NzcgMjcuMjMxOEM4LjExNTY0IDI3LjU5NjEgOC40MDA4NiAyNy44ODA2IDguNzY2MTYgMjcuOTY4MkM5LjEz''@;'; put 'put ''MTQ2IDI4LjA1NTkgOS41MTUxOSAyNy45MzE5IDkuNzU5NTggMjcuNjQ3M0wxOC4wNTk2IDE5LjM3OTVMMjYuMzQ5NiAyNy42NDczQzI2Ljc0NjMgMjcuOTg2MSAyNy4zMzc4IDI3Ljk2MzQgMjcuNzA3MSAyNy41OTVDMjguMDc2NSAyNy4yMjY2IDI4LjA5OTQgMjYuNjM2NyAyNy43NTk2IDI2''@;'; put 'put ''LjI0MUwxOS40Njk2IDE3Ljk3MzJaIi8+J31dLHpmZT1bImFuZ2xlLWRvdWJsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOC4zNDkxIDE3Ljg5OTZDMjguNTM4NCAxOC4wODM3IDI4Ljc5NDUgMTguMTg2MyAyOS4wNjEgMTguMTg0OEMyOS40NjQgMTguMTgzMSAyOS44MjY4IDE3Ljk0NTEgMjku''@;'; put 'put ''OTgyMSAxNy41ODA1QzMwLjEzNzQgMTcuMjE1OCAzMC4wNTUgMTYuNzk1NSAyOS43NzI5IDE2LjUxMzNMMTguMDMxOCA1TDYuMzAwNjcgMTYuNTEzM0M1Ljk1OTk5IDE2LjkwMzQgNS45ODI4OSAxNy40ODQ5IDYuMzUzMjUgMTcuODQ4MUM2LjcyMzYgMTguMjExMiA3LjMxNjYgMTguMjMzNyA3''@;'; put 'put ''LjcxNDQyIDE3Ljg5OTZMMTguMDMxOCA3Ljc4MjQ2TDI4LjM0OTEgMTcuODk5NloiLz48cGF0aCBkPSJNMjguMzQ5MSAyOC43MTQ5QzI4LjUzODQgMjguODk4OSAyOC43OTQ1IDI5LjAwMTUgMjkuMDYxIDI5QzI5LjQ2NCAyOC45OTg0IDI5LjgyNjggMjguNzYwMyAyOS45ODIxIDI4LjM5NTdD''@;'; put 'put ''MzAuMTM3NCAyOC4wMzExIDMwLjA1NSAyNy42MTA3IDI5Ljc3MjkgMjcuMzI4NUwxOC4wMzE4IDE1LjgxNTJMNi4zMDA2NyAyNy4zMjg1QzUuOTU5OTkgMjcuNzE4NiA1Ljk4Mjg5IDI4LjMwMDEgNi4zNTMyNSAyOC42NjMzQzYuNzIzNiAyOS4wMjY1IDcuMzE2NiAyOS4wNDg5IDcuNzE0NDIg''@;'; put 'put ''MjguNzE0OUwxOC4wMzE4IDE4LjU5NzdMMjguMzQ5MSAyOC43MTQ5WiIvPid9XSxTVWU9WyJldmVudCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNi4xNyAyNS44NkwxMC44MSAyMC41QzEwLjY0NjIgMjAuMzA4NyAxMC41NjA2IDIwLjA2MjYgMTAuNTcwMyAxOS44MTA5QzEwLjU4IDE5LjU1OTMg''@;'; put 'put ''MTAuNjg0NCAxOS4zMjA1IDEwLjg2MjQgMTkuMTQyNEMxMS4wNDA1IDE4Ljk2NDMgMTEuMjc5MyAxOC44NiAxMS41MzEgMTguODUwM0MxMS43ODI2IDE4Ljg0MDYgMTIuMDI4NyAxOC45MjYyIDEyLjIyIDE5LjA5TDE2LjE3IDIzTDI0LjgxIDE0LjM2QzI1LjAwMTMgMTQuMTk2MiAyNS4yNDc0''@;'; put 'put ''IDE0LjExMDYgMjUuNDk5MSAxNC4xMjAzQzI1Ljc1MDcgMTQuMTMgMjUuOTg5NSAxNC4yMzQzIDI2LjE2NzYgMTQuNDEyNEMyNi4zNDU3IDE0LjU5MDUgMjYuNDUgMTQuODI5MyAyNi40NTk3IDE1LjA4MDlDMjYuNDY5NCAxNS4zMzI2IDI2LjM4MzggMTUuNTc4NyAyNi4yMiAxNS43N0wxNi4x''@;'; put 'put ''NyAyNS44NloiLz48cGF0aCBkPSJNMzIuMjUgNkgyOVY4SDMyVjMwSDQuMDAwMDFWOEg3LjAwMDAxVjZIMy43NTAwMUMzLjUxNjI1IDYuMDAzOTEgMy4yODU1NSA2LjA1MzgzIDMuMDcxMDggNi4xNDY5MUMyLjg1NjYxIDYuMjM5OTkgMi42NjI1OCA2LjM3NDQxIDIuNTAwMDcgNi41NDI0OUMy''@;'; put 'put ''LjMzNzU3IDYuNzEwNTcgMi4yMDk3NiA2LjkwOTAyIDIuMTIzOTYgNy4xMjY1QzIuMDM4MTYgNy4zNDM5OCAxLjk5NjA0IDcuNTc2MjQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1''@;'; put 'put ''NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44''@;'; put 'put ''NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjcuODFDMzQuMDA0IDcuNTc2MjQgMzMuOTYxOSA3LjM0''@;'; put 'put ''Mzk4IDMzLjg3NjEgNy4xMjY1QzMzLjc5MDMgNi45MDkwMiAzMy42NjI1IDYuNzEwNTcgMzMuNSA2LjU0MjQ5QzMzLjMzNzQgNi4zNzQ0MSAzMy4xNDM0IDYuMjM5OTkgMzIuOTI4OSA2LjE0NjkxQzMyLjcxNDUgNi4wNTM4MyAzMi40ODM4IDYuMDAzOTEgMzIuMjUgNloiLz48cGF0aCBkPSJN''@;'; put 'put ''MTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAy''@;'; put 'put ''IDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRo''@;'; put 'put ''IGQ9Ik0yNiAxMEMyNi4yNjUyIDEwIDI2LjUxOTYgOS44OTQ2NCAyNi43MDcxIDkuNzA3MTFDMjYuODk0NyA5LjUxOTU3IDI3IDkuMjY1MjIgMjcgOVYzQzI3IDIuNzM0NzggMjYuODk0NyAyLjQ4MDQzIDI2LjcwNzEgMi4yOTI4OUMyNi41MTk2IDIuMTA1MzYgMjYuMjY1MiAyIDI2IDJDMjUu''@;'; put 'put ''NzM0OCAyIDI1LjQ4MDQgMi4xMDUzNiAyNS4yOTI5IDIuMjkyODlDMjUuMTA1NCAyLjQ4MDQzIDI1IDIuNzM0NzggMjUgM1Y5QzI1IDkuMjY1MjIgMjUuMTA1NCA5LjUxOTU3IDI1LjI5MjkgOS43MDcxMUMyNS40ODA0IDkuODk0NjQgMjUuNzM0OCAxMCAyNiAxMFoiLz48cGF0aCBkPSJNMjMg''@;'; put 'put ''NkgxM1Y4SDIzVjZaIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMu''@;'; put 'put ''MDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAx''@;'; put 'put ''LjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0zMiAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2NCAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAzNCAxNS4wMjYzVjMwLjE5QzM0LjAwNCAzMC40MjM4IDMzLjk2MTkgMzAuNjU2''@;'; put 'put ''IDMzLjg3NjEgMzAuODczNUMzMy43OTAzIDMxLjA5MSAzMy42NjI1IDMxLjI4OTQgMzMuNSAzMS40NTc1QzMzLjMzNzQgMzEuNjI1NiAzMy4xNDM0IDMxLjc2IDMyLjkyODkgMzEuODUzMUMzMi43MTQ1IDMxLjk0NjIgMzIuNDgzOCAzMS45OTYxIDMyLjI1IDMySDMuNzUwMDFDMy41MTYyNSAz''@;'; put 'put ''MS45OTYxIDMuMjg1NTUgMzEuOTQ2MiAzLjA3MTA4IDMxLjg1MzFDMi44NTY2MSAzMS43NiAyLjY2MjU4IDMxLjYyNTYgMi41MDAwNyAzMS40NTc1QzIuMzM3NTcgMzEuMjg5NCAyLjIwOTc2IDMxLjA5MSAyLjEyMzk2IDMwLjg3MzVDMi4wMzgxNiAzMC42NTYgMS45OTYwNCAzMC40MjM4IDIu''@;'; put 'put ''MDAwMDEgMzAuMTlWNy44MUMxLjk5NjA0IDcuNTc2MjQgMi4wMzgxNiA3LjM0Mzk4IDIuMTIzOTYgNy4xMjY1QzIuMjA5NzYgNi45MDkwMiAyLjMzNzU3IDYuNzEwNTcgMi41MDAwNyA2LjU0MjQ5QzIuNjYyNTggNi4zNzQ0MSAyLjg1NjYxIDYuMjM5OTkgMy4wNzEwOCA2LjE0NjkxQzMuMjg1''@;'; put 'put ''NTUgNi4wNTM4MyAzLjUxNjI1IDYuMDAzOTEgMy43NTAwMSA2SDcuMDAwMDFWOEg0LjAwMDAxVjMwSDMyVjE1LjAzNjdaIi8+PHBhdGggZD0iTTI0LjEzMzMgMTUuMDM2N0gyNi40NTdDMjYuNDU4MyAxNS4wNTE0IDI2LjQ1OTIgMTUuMDY2MSAyNi40NTk3IDE1LjA4MDlDMjYuNDY5NCAxNS4z''@;'; put 'put ''MzI2IDI2LjM4MzggMTUuNTc4NyAyNi4yMiAxNS43N0wxNi4xNyAyNS44NkwxMC44MSAyMC41QzEwLjY0NjIgMjAuMzA4NyAxMC41NjA2IDIwLjA2MjYgMTAuNTcwMyAxOS44MTA5QzEwLjU4IDE5LjU1OTMgMTAuNjg0NCAxOS4zMjA1IDEwLjg2MjQgMTkuMTQyNEMxMS4wNDA1IDE4Ljk2NDMg''@;'; put 'put ''MTEuMjc5MyAxOC44NiAxMS41MzEgMTguODUwM0MxMS43ODI2IDE4Ljg0MDYgMTIuMDI4NyAxOC45MjYyIDEyLjIyIDE5LjA5TDE2LjE3IDIzTDI0LjEzMzMgMTUuMDM2N1oiLz48cGF0aCBkPSJNMjEuOTU5NCA2TDIwLjc1OTQgOEgxM1Y2SDIxLjk1OTRaIi8+PHBhdGggZD0iTTEwLjcwNzEg''@;'; put 'put ''OS43MDcxMUMxMC41MTk2IDkuODk0NjQgMTAuMjY1MiAxMCAxMCAxMEM5LjczNDggMTAgOS40ODA0NCA5Ljg5NDY0IDkuMjkyOTEgOS43MDcxMUM5LjEwNTM3IDkuNTE5NTcgOS4wMDAwMSA5LjI2NTIyIDkuMDAwMDEgOVYzQzkuMDAwMDEgMi43MzQ3OCA5LjEwNTM3IDIuNDgwNDMgOS4yOTI5''@;'; put 'put ''MSAyLjI5Mjg5QzkuNDgwNDQgMi4xMDUzNiA5LjczNDggMiAxMCAyQzEwLjI2NTIgMiAxMC41MTk2IDIuMTA1MzYgMTAuNzA3MSAyLjI5Mjg5QzEwLjg5NDcgMi40ODA0MyAxMSAyLjczNDc4IDExIDNWOUMxMSA5LjI2NTIyIDEwLjg5NDcgOS41MTk1NyAxMC43MDcxIDkuNzA3MTFaIi8+Jyxv''@;'; put 'put ''dXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMTAuODEgMjAuNUwxNi4xNyAyNS44NkwyNi4yMiAxNS44MUMyNi4zODM4IDE1LjYxODcgMjYuNDY5NCAxNS4zNzI2IDI2LjQ1OTcgMTUuMTIwOUMyNi40NSAxNC44NjkzIDI2LjM0NTcgMTQuNjMwNSAyNi4xNjc2IDE0LjQ1MjRDMjUuOTg5NSAxNC4y''@;'; put 'put ''NzQzIDI1Ljc1MDcgMTQuMTcgMjUuNDk5MSAxNC4xNjAzQzI1LjI0NzQgMTQuMTUwNiAyNS4wMDEzIDE0LjIzNjIgMjQuODEgMTQuNEwxNi4xNyAyM0wxMi4yMyAxOS4wNkMxMi4wMzg3IDE4Ljg5NjIgMTEuNzkyNiAxOC44MTA2IDExLjU0MSAxOC44MjAzQzExLjI4OTMgMTguODMgMTEuMDUw''@;'; put 'put ''NSAxOC45MzQzIDEwLjg3MjQgMTkuMTEyNEMxMC42OTQ0IDE5LjI5MDUgMTAuNTkgMTkuNTI5MyAxMC41ODAzIDE5Ljc4MDlDMTAuNTcwNiAyMC4wMzI2IDEwLjY1NjIgMjAuMjc4NyAxMC44MiAyMC40N0wxMC44MSAyMC41WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYg''@;'; put 'put ''OS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEg''@;'; put 'put ''Mi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMyIDEzLjIyVjMwSDQuMDAwMDFW''@;'; put 'put ''OEg3LjAwMDAxVjZIMy43NTAwMUMzLjUxNjI1IDYuMDAzOTEgMy4yODU1NSA2LjA1MzgzIDMuMDcxMDggNi4xNDY5MUMyLjg1NjYxIDYuMjM5OTkgMi42NjI1OCA2LjM3NDQxIDIuNTAwMDcgNi41NDI0OUMyLjMzNzU3IDYuNzEwNTcgMi4yMDk3NiA2LjkwOTAyIDIuMTIzOTYgNy4xMjY1QzIu''@;'; put 'put ''MDM4MTYgNy4zNDM5OCAxLjk5NjA0IDcuNTc2MjQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2''@;'; put 'put ''MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMz''@;'; put 'put ''My42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMzLjM4MDIgMTIuNzMgMzIuNzA2MyAxMy4wMjY2IDMyIDEzLjIyWiIvPjxwYXRoIGQ9Ik0yMi41IDZIMTNWOEgyMi43OEMyMi41''@;'; put 'put ''OTY4IDcuMzQ5MDMgMjIuNTAyNiA2LjY3NjI1IDIyLjUgNloiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4n''@;'; put 'put ''LHNvbGlkOic8cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2''@;'; put 'put ''NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4''@;'; put 'put ''IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0yNiAxMEMyNi4yNjUyIDEwIDI2LjUxOTYgOS44OTQ2NCAyNi43MDcxIDkuNzA3MTFDMjYuODk0NyA5LjUxOTU3IDI3IDkuMjY1MjIgMjcgOVYzQzI3IDIuNzM0NzggMjYuODk0NyAyLjQ4MDQzIDI2LjcwNzEgMi4yOTI4OUMyNi41MTk2IDIuMTA1MzYg''@;'; put 'put ''MjYuMjY1MiAyIDI2IDJDMjUuNzM0OCAyIDI1LjQ4MDQgMi4xMDUzNiAyNS4yOTI5IDIuMjkyODlDMjUuMTA1NCAyLjQ4MDQzIDI1IDIuNzM0NzggMjUgM1Y5QzI1IDkuMjY1MjIgMjUuMTA1NCA5LjUxOTU3IDI1LjI5MjkgOS43MDcxMUMyNS40ODA0IDkuODk0NjQgMjUuNzM0OCAxMCAyNiAx''@;'; put 'put ''MFoiLz48cGF0aCBkPSJNMzIuMjUgNkgyOC4yNVY5QzI4LjI1IDkuNTgzNDggMjguMDE4MiAxMC4xNDMxIDI3LjYwNTYgMTAuNTU1NkMyNy4xOTMxIDEwLjk2ODIgMjYuNjMzNSAxMS4yIDI2LjA1IDExLjJDMjUuNDY2NSAxMS4yIDI0LjkwNyAxMC45NjgyIDI0LjQ5NDQgMTAuNTU1NkMyNC4w''@;'; put 'put ''ODE4IDEwLjE0MzEgMjMuODUgOS41ODM0OCAyMy44NSA5VjZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAu''@;'; put 'put ''NTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0''@;'; put 'put ''OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIu''@;'; put 'put ''NTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQg''@;'; put 'put ''MzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjcuODFDMzQuMDA0IDcuNTc2MjQgMzMuOTYxOSA3LjM0Mzk4IDMzLjg3NjEg''@;'; put 'put ''Ny4xMjY1QzMzLjc5MDMgNi45MDkwMiAzMy42NjI1IDYuNzEwNTcgMzMuNSA2LjU0MjQ5QzMzLjMzNzQgNi4zNzQ0MSAzMy4xNDM0IDYuMjM5OTkgMzIuOTI4OSA2LjE0NjkxQzMyLjcxNDUgNi4wNTM4MyAzMi40ODM4IDYuMDAzOTEgMzIuMjUgNlpNMjUuOTQgMTYuNThMMTYuMjcgMjYuMjVM''@;'; put 'put ''MTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42''@;'; put 'put ''NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43ODU4IDE0LjI2MDMgMjQuOTY1IDE0LjI2MDNDMjUuMTQ0MiAxNC4yNjAzIDI1LjMy''@;'; put 'put ''MTcgMTQuMjk1NiAyNS40ODczIDE0LjM2NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1''@;'; put 'put ''QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5''@;'; put 'put ''QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0''@;'; put 'put ''OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMjEuOTU5''@;'; put 'put ''NCA2SDEyLjJWOUMxMi4yIDkuNTgzNDggMTEuOTY4MiAxMC4xNDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4''@;'; put 'put ''MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFDMy41NjIwNCA1Ljk5NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5''@;'; put 'put ''M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5OSA3LjU3MjA0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIu''@;'; put 'put ''ODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1''@;'; put 'put ''NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVYxNS4wMjYzQzMzLjg4ODYgMTUuMDM1NCAzMy43NzY0IDE1LjAzODkgMzMuNjYzNyAxNS4wMzY3SDI2LjE5NjRDMjYuMjA2OCAxNS4w''@;'; put 'put ''NTg0IDI2LjIxNjYgMTUuMDgwNCAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMxMjggMjYuMDU2NyAxNi40NjMzIDI1''@;'; put 'put ''LjkzIDE2LjU5TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1MjkgMTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUy''@;'; put 'put ''NyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyMy42MjMzIDE1LjAzNjdIMjIuMzM5NUMyMS4xNTc3IDE1LjA2MDQgMjAuMDIzMyAxNC40NDg5IDE5LjQyMDYgMTMuMzg5M0MxOC44MjA0IDEyLjMzNDIgMTguODcwMyAxMS4wNDIz''@;'; put 'put ''IDE5LjUzNjIgMTAuMDM4N0wyMS45NTk0IDZaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5''@;'; put 'put ''QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFD''@;'; put 'put ''OS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40''@;'; put 'put ''ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUx''@;'; put 'put ''OTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0zMCAxMy41QzI4LjAxMDkgMTMuNSAyNi4xMDMyIDEyLjcwOTggMjQuNjk2NyAxMS4zMDMzQzIzLjI5MDIgOS44OTY3OCAyMi41IDcuOTg5MTIgMjIuNSA2SDEyLjJWOUMxMi4y''@;'; put 'put ''IDkuNTgzNDggMTEuOTY4MiAxMC4xNDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2''@;'; put 'put ''SDMuODAwMDFDMy41NjIwNCA1Ljk5NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1''@;'; put 'put ''NjkgMS45OTU5OSA3LjU3MjA0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4w''@;'; put 'put ''NzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4y''@;'; put 'put ''ODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVYxMi4zNEMzMi44MDQxIDEzLjA5OTEgMzEuNDE2NSAxMy41MDE1IDMwIDEzLjVaTTI1Ljk0IDE2LjU4TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAu''@;'; put 'put ''NjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1MjkgMTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkg''@;'; put 'put ''MTIuOSAxOUwxNi4yOCAyMi4zOEwyNCAxNC42NkMyNC4xMjY3IDE0LjUzMzMgMjQuMjc3MiAxNC40MzI3IDI0LjQ0MjggMTQuMzY0MkMyNC42MDgzIDE0LjI5NTYgMjQuNzg1OCAxNC4yNjAzIDI0Ljk2NSAxNC4yNjAzQzI1LjE0NDIgMTQuMjYwMyAyNS4zMjE3IDE0LjI5NTYgMjUuNDg3MyAx''@;'; put 'put ''NC4zNjQyQzI1LjY1MjggMTQuNDMyNyAyNS44MDMzIDE0LjUzMzMgMjUuOTMgMTQuNjZDMjYuMDU2NyAxNC43ODY3IDI2LjE1NzMgMTQuOTM3MiAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYu''@;'; put 'put ''Mjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMxMjggMjYuMDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDI1Ljk0IDE2LjU4WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYg''@;'; put 'put ''MSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxNVWU9WyJjYWxlbmRhciIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMiAyMEgyMFYyMkgyMlYyMFpNMjAgMjZIMjJWMjRIMjBWMjZaTTI4IDI0SDI2VjI2SDI4VjI0Wk0yOCAyMEgyNlYyMkgyOFYyMFpN''@;'; put 'put ''MjcgMTJDMjcuNTUgMTIgMjggMTEuNTUgMjggMTFWNUMyOCA0LjQ1IDI3LjU1IDQgMjcgNEMyNi40NSA0IDI2IDQuNDUgMjYgNVYxMUMyNiAxMS41NSAyNi40NSAxMiAyNyAxMlpNMjIgMTZIMjBWMThIMjJWMTZaTTI4IDE2SDI2VjE4SDI4VjE2Wk0yNCA4SDEyVjEwSDI0VjhaTTEwIDE2SDhW''@;'; put 'put ''MThIMTBWMTZaTTEwIDIwSDhWMjJIMTBWMjBaTTEwIDI0SDhWMjZIMTBWMjRaTTMzLjUgOC41NEMzMy4xNyA4LjIgMzIuNzIgOC4wMSAzMi4yNSA4SDMwVjEwSDMyVjMwSDRWMTBINlY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5''@;'; put 'put ''QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWOS44MUMzNCA5LjM0IDMzLjgzIDguODggMzMuNSA4LjU0Wk0x''@;'; put 'put ''NCAyNkgxNlYyNEgxNFYyNlpNMTYgMjBIMTRWMjJIMTZWMjBaTTE2IDE2SDE0VjE4SDE2VjE2Wk05IDEyQzkuNTUgMTIgMTAgMTEuNTUgMTAgMTFWNUMxMCA0LjQ1IDkuNTUgNCA5IDRDOC40NSA0IDggNC40NSA4IDVWMTFDOCAxMS41NSA4LjQ1IDEyIDkgMTJaIi8+JyxvdXRsaW5lQWxlcnRl''@;'; put 'put ''ZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAz''@;'; put 'put ''NC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5''@;'; put 'put ''IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0zMiAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2MyAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAzNCAxNS4wMjYzVjMwLjE5QzM0LjAxIDMwLjY2IDMzLjgzIDMxLjEyIDMzLjUgMzEuNDZDMzMuMTcgMzEuOCAzMi43MiAzMiAzMi4y''@;'; put 'put ''NSAzMkgzLjc1QzMuMjggMzEuOTkgMi44MyAzMS44IDIuNSAzMS40NkMyLjE3IDMxLjEyIDIgMzAuNjYgMiAzMC4xOVY5LjgxQzIgOS4zNCAyLjE3IDguODggMi41IDguNTRDMi44MyA4LjIgMy4yOCA4IDMuNzUgOEg2VjEwSDRWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjAuNzU5NCA4''@;'; put 'put ''TDE5LjU1OTQgMTBIMTJWOEgyMC43NTk0WiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2WiIvPjxwYXRoIGQ9Ik0yNiAyMlYyMEgyOFYyMkgyNloiLz48cGF0aCBkPSJNMjAg''@;'; put 'put ''MTZIMjJWMThIMjBWMTZaIi8+PHBhdGggZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJNOCAyNEgxMFYyNkg4VjI0WiIvPjxwYXRoIGQ9Ik0xNiAyNkgxNFYyNEgxNlYyNloi''@;'; put 'put ''Lz48cGF0aCBkPSJNMTQgMjBIMTZWMjJIMTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjEx''@;'; put 'put ''WiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+PHBhdGggZD0iTTIzLjI4OTkg''@;'; put 'put ''OEMyMy40NTk0IDguNTY5NjMgMjMuNjk5NSA5LjEwODg3IDI0IDkuNjA3NTlWMTBIMTJWOEgyMy4yODk5WiIvPjxwYXRoIGQ9Ik0zNCAxMS43NDUzQzMzLjM5NiAxMi4xNjY2IDMyLjcyMjQgMTIuNDk1MSAzMiAxMi43MTAxVjMwSDRWMTBINlY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4''@;'; put 'put ''LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWMTEu''@;'; put 'put ''NzQ1M1oiLz48cGF0aCBkPSJNMjAgMjBIMjJWMjJIMjBWMjBaIi8+PHBhdGggZD0iTTIyIDI2SDIwVjI0SDIyVjI2WiIvPjxwYXRoIGQ9Ik0yNiAyNlYyNEgyOFYyNkgyNloiLz48cGF0aCBkPSJNMjYgMjJWMjBIMjhWMjJIMjZaIi8+PHBhdGggZD0iTTIwIDE2SDIyVjE4SDIwVjE2WiIvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yNiAxOFYxNkgyOFYxOEgyNloiLz48cGF0aCBkPSJNOCAxNkgxMFYxOEg4VjE2WiIvPjxwYXRoIGQ9Ik04IDIwSDEwVjIySDhWMjBaIi8+PHBhdGggZD0iTTggMjRIMTBWMjZIOFYyNFoiLz48cGF0aCBkPSJNMTYgMjZIMTRWMjRIMTZWMjZaIi8+PHBhdGggZD0iTTE0IDIwSDE2''@;'; put 'put ''VjIySDE0VjIwWiIvPjxwYXRoIGQ9Ik0xNCAxNkgxNlYxOEgxNFYxNloiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkOic8cGF0aCBk''@;'; put 'put ''PSJNMjcgMTJDMjcuNTUgMTIgMjggMTEuNTUgMjggMTFWNUMyOCA0LjQ1IDI3LjU1IDQgMjcgNEMyNi40NSA0IDI2IDQuNDUgMjYgNVYxMUMyNiAxMS41NSAyNi40NSAxMiAyNyAxMlpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMjkuMlYxMUMyOS4yIDEyLjIxIDI4''@;'; put 'put ''LjIxIDEzLjIgMjcgMTMuMkMyNS43OSAxMy4yIDI0LjggMTIuMjEgMjQuOCAxMVY4SDExLjJWMTFDMTEuMiAxMi4yMSAxMC4yMSAxMy4yIDkgMTMuMkM3Ljc5IDEzLjIgNi44IDEyLjIxIDYuOCAxMVY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5''@;'; put 'put ''LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWOS44MUMzNCA5LjM0IDMzLjgzIDguODggMzMu''@;'; put 'put ''NSA4LjU0Wk0xMC4xIDI2LjFINy45VjIzLjlIMTAuMVYyNi4xWk0xMC4xIDIyLjFINy45VjE5LjlIMTAuMVYyMi4xWk0xMC4xIDE4LjFINy45VjE1LjlIMTAuMVYxOC4xWk0xNi4xIDI2LjFIMTMuOVYyMy45SDE2LjFWMjYuMVpNMTYuMSAyMi4xSDEzLjlWMTkuOUgxNi4xVjIyLjFaTTE2LjEg''@;'; put 'put ''MTguMUgxMy45VjE1LjlIMTYuMVYxOC4xWk0yMi4xIDI2LjFIMTkuOVYyMy45SDIyLjFWMjYuMVpNMjIuMSAyMi4xSDE5LjlWMTkuOUgyMi4xVjIyLjFaTTIyLjEgMTguMUgxOS45VjE1LjlIMjIuMVYxOC4xWk0yOC4xIDI2LjFIMjUuOVYyMy45SDI4LjFWMjYuMVpNMjguMSAyMi4xSDI1LjlW''@;'; put 'put ''MTkuOUgyOC4xVjIyLjFaTTI4LjEgMTguMUgyNS45VjE1LjlIMjguMVYxOC4xWk05IDEyQzkuNTUgMTIgMTAgMTEuNTUgMTAgMTFWNUMxMCA0LjQ1IDkuNTUgNCA5IDRDOC40NSA0IDggNC40NSA4IDVWMTFDOCAxMS41NSA4LjQ1IDEyIDkgMTJaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9''@;'; put 'put ''Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44''@;'; put 'put ''MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2''@;'; put 'put ''LjkwMzkgMS42NDYyMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIwLjc1OTQgOEwxOS41MzYyIDEwLjAzODdDMTguODcwMyAxMS4wNDIzIDE4LjgyMDQgMTIuMzM0MiAxOS40MjA2IDEzLjM4OTNDMjAuMDIzMyAxNC40NDg5IDIxLjE1Nzcg''@;'; put 'put ''MTUuMDYwNCAyMi4zMzk1IDE1LjAzNjdIMzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDEgMzAuNjYgMzMuODMgMzEuMTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMySDMuNzVDMy4yOCAzMS45OSAyLjgz''@;'; put 'put ''IDMxLjggMi41IDMxLjQ2QzIuMTcgMzEuMTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41NEMyLjgzIDguMiAzLjI4IDggMy43NSA4SDYuOFYxMUM2LjggMTIuMjEgNy43OSAxMy4yIDkgMTMuMkMxMC4yMSAxMy4yIDExLjIgMTIuMjEgMTEuMiAxMVY4SDIw''@;'; put 'put ''Ljc1OTRaTTcuOSAyMy45VjI2LjFIMTAuMVYyMy45SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4xWk0xMy45IDIyLjFIMTYuMVYxOS45SDEzLjlWMjIuMVpNMTMuOSAxOC4x''@;'; put 'put ''SDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5LjkgMjYuMUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMuOVYyNi4xSDI4LjFWMjMuOUgyNS45Wk0yNS45IDE5LjlWMjIuMUgyOC4x''@;'; put 'put ''VjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4LjFIMjguMVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+Jyxzb2xpZEJhZGdlZDon''@;'; put 'put ''PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2''@;'; put 'put ''ZW5vZGQiIGQ9Ik0zNCAxMS43NDUzQzMyLjg2NjIgMTIuNTM2MiAzMS40ODcyIDEzIDMwIDEzQzI5LjQwNjMgMTMgMjguODI5OSAxMi45MjYxIDI4LjI3OTQgMTIuNzg3QzI3LjkxODMgMTMuMDQ2NyAyNy40NzYyIDEzLjIgMjcgMTMuMkMyNS43OSAxMy4yIDI0LjggMTIuMjEgMjQuOCAxMVYx''@;'; put 'put ''MC42ODYyQzI0LjExMjYgOS45MjM5MyAyMy41OTA0IDkuMDA5NyAyMy4yODk5IDhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2LjggMTIuMjEgNi44IDExVjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDku''@;'; put 'put ''ODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUzWk03LjkgMjMuOVYyNi4xSDEwLjFW''@;'; put 'put ''MjMuOUg3LjlaTTcuOSAxOS45VjIyLjFIMTAuMVYxOS45SDcuOVpNNy45IDE1LjlWMTguMUgxMC4xVjE1LjlINy45Wk0xMy45IDI2LjFIMTYuMVYyMy45SDEzLjlWMjYuMVpNMTMuOSAyMi4xSDE2LjFWMTkuOUgxMy45VjIyLjFaTTEzLjkgMTguMUgxNi4xVjE1LjlIMTMuOVYxOC4xWk0xOS45''@;'; put 'put ''IDI2LjFIMjIuMVYyMy45SDE5LjlWMjYuMVpNMTkuOSAyMi4xSDIyLjFWMTkuOUgxOS45VjIyLjFaTTE5LjkgMTguMUgyMi4xVjE1LjlIMTkuOVYxOC4xWk0yNS45IDIzLjlWMjYuMUgyOC4xVjIzLjlIMjUuOVpNMjUuOSAxOS45VjIyLjFIMjguMVYxOS45SDI1LjlaTTI1LjkgMTUuOVYxOC4x''@;'; put 'put ''SDI4LjFWMTUuOUgyNS45WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPid9XSx4VWU9WyJmb2xkZXItb3BlbiIse291dGxpbmU6JzxwYXRoIGQ9''@;'; put 'put ''Ik0zMy4yNiAxM0MzMy44NCAxMi45OSAzNC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4yOEMzMC42IDMwLjcyIDMwLjE5IDMxLjAyIDI5LjczIDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0MzIDUu''@;'; put 'put ''OSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMgNSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI5LjM5QzMwLjQ5IDkgMzEuMzkgOS45IDMxLjM5IDExSDE0LjkxQzE0LjU5IDExIDE0LjI5IDEwLjg1IDE0LjEgMTAuNTlMMTEuNDkgN0g1VjI1TDcuOTIgMTQuNjZDNy45MiAxNC42NiA3Ljky''@;'; put 'put ''IDE0LjU3IDcuOTIgMTQuNTJDOC4zMiAxMy42MyA5LjE5IDEzLjA0IDEwLjE3IDEzSDMzLjI2Wk01LjkgMjlIMjguOTRMMzIuODggMTQuOTVIMTAuMTZDMTAuMDEgMTQuOTggOS44NyAxNS4wNyA5Ljc4IDE1LjE5TDUuOSAyOVoiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0''@;'; put 'put ''MSAxLjY0NjIxTDIyLjIyMjQgMTEuMTE1OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMuMzE1IDEzLjAzNjdIMzQuNjg4NEMzNS4xNjY5IDEzLjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0''@;'; put 'put ''MyAxMi40MDA1QzM2LjA3NSAxMS45OTQ5IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4wMDE3IDEuMDM3MzVDMjguNTUgMS4wMzczNSAyOC4xMzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIx''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0yMC4xMDU4IDExSDE0LjkxMDJDMTQuNTkwMiAxMSAxNC4yOTAyIDEwLjg1IDE0LjEwMDIgMTAuNTlMMTEuNDkwMiA3SDUuMDAwMjRWMjVMNy45MjAyNCAxNC42NlYxNC41MkM4LjMyMDI0IDEzLjYzIDkuMTkwMjQgMTMuMDQgMTAuMTcwMiAxM0gyMC4yMzI3QzIwLjI4''@;'; put 'put ''NjEgMTMuMTMyNiAyMC4zNDg4IDEzLjI2MjcgMjAuNDIwOCAxMy4zODkzQzIwLjg4MTUgMTQuMTk5MSAyMS42NTI3IDE0Ljc0NzIgMjIuNTE4MyAxNC45NUgxMC4xNjAyQzEwLjAxMDIgMTQuOTggOS44NzAyNCAxNS4wNyA5Ljc4MDI0IDE1LjE5TDUuOTAwMjQgMjlIMjguOTQwMkwzMi44NTU5''@;'; put 'put ''IDE1LjAzNjdIMzQuNjYzOUMzNC43NjM2IDE1LjAzODcgMzQuODYzIDE1LjAzNjIgMzQuOTYxNyAxNS4wMjkyQzM0Ljk1MDMgMTUuMDc5OCAzNC45MzY1IDE1LjEzMDEgMzQuOTIwMiAxNS4xOEwzMC43MzAyIDMwLjI4QzMwLjYwMDIgMzAuNzIgMzAuMTkwMiAzMS4wMiAyOS43MzAyIDMxSDQu''@;'; put 'put ''NDEwMjRDMy42NjAyNCAzMS4wMiAzLjAzMDI0IDMwLjQ0IDMuMDAwMjQgMjkuNjlWN0MzLjAwMDI0IDUuOSAzLjkwMDI0IDUgNS4wMDAyNCA1SDExLjQ5MDJDMTIuMTMwMiA1IDEyLjczMDIgNS4zIDEzLjExMDIgNS44MkwxNS40MjAyIDlIMjEuMTU5N0wyMC41MzY0IDEwLjAzODdDMjAuMzM3''@;'; put 'put ''OCAxMC4zMzgxIDIwLjE5MzkgMTAuNjYzMiAyMC4xMDU4IDExWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMxIDExQzMzLjc2MTQgMTEgMzYgOC43NjE0MiAzNiA2QzM2IDMuMjM4NTggMzMuNzYxNCAxIDMxIDFDMjguMjM4NiAxIDI2IDMuMjM4NTggMjYgNkMyNiA4Ljc2MTQyIDI4''@;'; put 'put ''LjIzODYgMTEgMzEgMTFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNi4xMDEgMTFIMTQuOTFDMTQuNTkgMTEgMTQuMjkgMTAuODUgMTQuMSAxMC41OUwxMS40OSA3SDVWMjVMNy45MiAxNC42NlYxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMu''@;'; put 'put ''MDQgMTAuMTcgMTNIMzMuMjZDMzMuODQgMTIuOTkgMzQuMzggMTMuMjYgMzQuNzEgMTMuNzRDMzUgMTQuMTYgMzUuMDggMTQuNjkgMzQuOTIgMTUuMThMMzAuNzMgMzAuMjhDMzAuNiAzMC43MiAzMC4xOSAzMS4wMiAyOS43MyAzMUg0LjQxQzMuNjYgMzEuMDIgMy4wMyAzMC40NCAzIDI5LjY5''@;'; put 'put ''VjdDMyA1LjkgMy45IDUgNSA1SDExLjQ5QzEyLjEzIDUgMTIuNzMgNS4zIDEzLjExIDUuODJMMTUuNDIgOUgyNC42NzM2QzI1LjAyOTcgOS43NDk2IDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFaTTI4Ljk0IDI5SDUuOUw5Ljc4IDE1LjE5QzkuODcgMTUuMDcgMTAuMDEgMTQuOTggMTAuMTYg''@;'; put 'put ''MTQuOTVIMzIuODhMMjguOTQgMjlaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTM0LjcwNTggMTMuNzRDMzQuMzc0NCAxMy4yNjQzIDMzLjgyMjMgMTIuOTg2IDMzLjIzNzkgMTNIMTAuMjU4M0M5LjI2OTUyIDEzLjA0MTQgOC4zODg1OCAxMy42MjkzIDcuOTgwNiAxNC41MkM3Ljk3NzI5IDE0LjU2''@;'; put 'put ''NjYgNy45NzcyOSAxNC42MTM0IDcuOTgwNiAxNC42Nkw1LjAyNDYzIDI1VjcuMDAwMDFIMTEuNTk0NkwxNC4yMzY3IDEwLjU5QzE0LjQyNzkgMTAuODQ4NCAxNC43MzI3IDExLjAwMDggMTUuMDU2NyAxMUgzMS4zNDQ5QzMxLjM0NDkgOS44OTU0NCAzMC40Mzg0IDkuMDAwMDEgMjkuMzIwMyA5''@;'; put 'put ''LjAwMDAxSDE1LjU3M0wxMy4yMzQ1IDUuODIwMDFDMTIuODUyMiA1LjMwMzE4IDEyLjI0MjYgNC45OTgzNSAxMS41OTQ2IDUuMDAwMDFINS4wMjQ2M0MzLjkwNjQ2IDUuMDAwMDEgMyA1Ljg5NTQ0IDMgNy4wMDAwMVYyOS42OUMzLjAzMjg5IDMwLjQzODkgMy42Njg5MSAzMS4wMjI2IDQuNDI3''@;'; put 'put ''MzcgMzFIMjkuNjY0NEMzMC4xMjkzIDMxLjAxODMgMzAuNTQ2OSAzMC43MjEzIDMwLjY3NjggMzAuMjhMMzQuOTE4NCAxNS4xOEMzNS4wNzg4IDE0LjY5MzUgMzUuMDAwMSAxNC4xNjEgMzQuNzA1OCAxMy43NFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI3LjkwNDEgMS42NDYyMUwy''@;'; put 'put ''Mi4yMjI0IDExLjExNTlDMjEuOTUyOSAxMS40OTg0IDIxLjkyODQgMTEuOTk0OSAyMi4xNTkxIDEyLjQwMDVDMjIuMzg5OCAxMi44MDYgMjIuODM2NiAxMy4wNTE5IDIzLjMxNSAxMy4wMzY3SDM0LjY4ODRDMzUuMTY2OSAxMy4wNTE5IDM1LjYxMzYgMTIuODA2IDM1Ljg0NDMgMTIuNDAwNUMz''@;'; put 'put ''Ni4wNzUgMTEuOTk0OSAzNi4wNTA2IDExLjQ5ODQgMzUuNzgxIDExLjExNTlMMzAuMDk5MyAxLjY0NjIxQzI5Ljg3MTMgMS4yNjkxMyAyOS40NTM1IDEuMDM3MzUgMjkuMDAxNyAxLjAzNzM1QzI4LjU1IDEuMDM3MzUgMjguMTMyMSAxLjI2OTEzIDI3LjkwNDEgMS42NDYyMVoiLz48cGF0aCBk''@;'; put 'put ''PSJNMjAuMjMyNSAxM0MyMC4yODU4IDEzLjEzMjYgMjAuMzQ4NSAxMy4yNjI3IDIwLjQyMDYgMTMuMzg5M0MyMS4wMjMzIDE0LjQ0ODkgMjIuMTU3NyAxNS4wNjA0IDIzLjMzOTUgMTUuMDM2N0gzNC42NjM3QzM0Ljc2MjkgMTUuMDM4NyAzNC44NjE4IDE1LjAzNjIgMzQuOTYwMSAxNS4wMjkz''@;'; put 'put ''QzM0Ljk0ODcgMTUuMDc5OSAzNC45MzQ4IDE1LjEzMDIgMzQuOTE4NCAxNS4xOEwzMC42NzY4IDMwLjI4QzMwLjU0NjkgMzAuNzIxMyAzMC4xMjkzIDMxLjAxODMgMjkuNjY0NCAzMUg0LjQyNzM3QzMuNjY4OTEgMzEuMDIyNiAzLjAzMjg5IDMwLjQzODkgMyAyOS42OVY3LjAwMDAxQzMgNS44''@;'; put 'put ''OTU0NCAzLjkwNjQ2IDUuMDAwMDEgNS4wMjQ2MyA1LjAwMDAxSDExLjU5NDZDMTIuMjQyNiA0Ljk5ODM1IDEyLjg1MjIgNS4zMDMxOCAxMy4yMzQ1IDUuODIwMDFMMTUuNTczIDkuMDAwMDFIMjEuMTU5NEwyMC41MzYyIDEwLjAzODdDMjAuMzM3NSAxMC4zMzgxIDIwLjE5MzcgMTAuNjYzMiAy''@;'; put 'put ''MC4xMDU2IDExSDE1LjA1NjdDMTQuNzMyNyAxMS4wMDA4IDE0LjQyNzkgMTAuODQ4NCAxNC4yMzY3IDEwLjU5TDExLjU5NDYgNy4wMDAwMUg1LjAyNDYzVjI1TDcuOTgwNiAxNC42NkM3Ljk3NzI5IDE0LjYxMzQgNy45NzcyOSAxNC41NjY2IDcuOTgwNiAxNC41MkM4LjM4ODU4IDEzLjYyOTMg''@;'; put 'put ''OS4yNjk1MiAxMy4wNDE0IDEwLjI1ODMgMTNIMjAuMjMyNVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2IDZDMzYgMy4yMzg1OCAzMy43NjE0IDEgMzEgMUMyOC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4''@;'; put 'put ''NiAxMSAzMSAxMVoiLz48cGF0aCBkPSJNMjQuNjczNiA5LjAwMDAxQzI1LjAyOTcgOS43NDk2MSAyNS41MTUxIDEwLjQyNTkgMjYuMTAxIDExSDE1LjA1NjdDMTQuNzMyNyAxMS4wMDA4IDE0LjQyNzkgMTAuODQ4NCAxNC4yMzY3IDEwLjU5TDExLjU5NDYgNy4wMDAwMUg1LjAyNDYzVjI1TDcu''@;'; put 'put ''OTgwNiAxNC42NkM3Ljk3NzI5IDE0LjYxMzQgNy45NzcyOSAxNC41NjY2IDcuOTgwNiAxNC41MkM4LjM4ODU4IDEzLjYyOTMgOS4yNjk1MiAxMy4wNDE0IDEwLjI1ODMgMTNIMzMuMjM3OUMzMy44MjIzIDEyLjk4NiAzNC4zNzQ0IDEzLjI2NDMgMzQuNzA1OCAxMy43NEMzNS4wMDAxIDE0LjE2''@;'; put 'put ''MSAzNS4wNzg4IDE0LjY5MzUgMzQuOTE4NCAxNS4xOEwzMC42NzY4IDMwLjI4QzMwLjU0NjkgMzAuNzIxMyAzMC4xMjkzIDMxLjAxODMgMjkuNjY0NCAzMUg0LjQyNzM3QzMuNjY4OTEgMzEuMDIyNiAzLjAzMjg5IDMwLjQzODkgMyAyOS42OVY3LjAwMDAxQzMgNS44OTU0NCAzLjkwNjQ2IDUu''@;'; put 'put ''MDAwMDEgNS4wMjQ2MyA1LjAwMDAxSDExLjU5NDZDMTIuMjQyNiA0Ljk5ODM1IDEyLjg1MjIgNS4zMDMxOCAxMy4yMzQ1IDUuODIwMDFMMTUuNTczIDkuMDAwMDFIMjQuNjczNloiLz4nfV0sRVVlPVsibWludXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjYgMTdIMTBDOS40NDc3MiAxNyA5IDE3''@;'; put 'put ''LjQ0NzcgOSAxOEM5IDE4LjU1MjMgOS40NDc3MiAxOSAxMCAxOUgyNkMyNi41NTIzIDE5IDI3IDE4LjU1MjMgMjcgMThDMjcgMTcuNDQ3NyAyNi41NTIzIDE3IDI2IDE3WiIvPid9XSxUVWU9WyJwbHVzIix7b3V0bGluZTonPHBhdGggZD0iTTI5Ljk5OTkgMTdIMTguOTk5OVY2QzE4Ljk5OTkg''@;'; put 'put ''NS40NDc3MiAxOC41NTIyIDUgMTcuOTk5OSA1QzE3LjQ0NzYgNSAxNi45OTk5IDUuNDQ3NzIgMTYuOTk5OSA2VjE3SDUuOTk5OTJDNS40NDc2NCAxNyA0Ljk5OTkyIDE3LjQ0NzcgNC45OTk5MiAxOEM0Ljk4OTk0IDE4LjI2MyA1LjA5NDI3IDE4LjUxNzQgNS4yODYgMTguNjk3NkM1LjQ3Nzcz''@;'; put 'put ''IDE4Ljg3NzggNS43MzgwOSAxOC45NjYyIDUuOTk5OTIgMTguOTRIMTYuOTk5OVYzMEMxNi45OTk5IDMwLjU1MjMgMTcuNDQ3NiAzMSAxNy45OTk5IDMxQzE4LjU1MjIgMzEgMTguOTk5OSAzMC41NTIzIDE4Ljk5OTkgMzBWMTlIMjkuOTk5OUMzMC41NTIyIDE5IDMwLjk5OTkgMTguNTUyMyAz''@;'; put 'put ''MC45OTk5IDE4QzMwLjk5OTkgMTcuNDQ3NyAzMC41NTIyIDE3IDI5Ljk5OTkgMTdaIi8+J31dLEFVZT1bImV5ZS1oaWRlIix7b3V0bGluZTonPHBhdGggZD0iTTI0LjU0OTUgMjAuNDMwMUMyNC44Mjk0IDE5LjY3MDEgMjQuOTg5MyAxOC44NjAxIDI0Ljk4OTMgMTguMDAwMUMyNC45ODkzIDE0''@;'; put 'put ''LjE0MDEgMjEuODUwOCAxMS4wMDAxIDE3Ljk5MjYgMTEuMDAwMUMxNy4xMzMgMTEuMDAwMSAxNi4zMjMzIDExLjE2MDEgMTUuNTYzNyAxMS40NDAxTDE3LjIwMjkgMTMuMDgwMUMxNy40NjI4IDEzLjA0MDEgMTcuNzIyNyAxMy4wMDAxIDE3Ljk5MjYgMTMuMDAwMUMyMC43NTEzIDEzLjAwMDEg''@;'; put 'put ''MjIuOTkwMiAxNS4yNDAxIDIyLjk5MDIgMTguMDAwMUMyMi45OTAyIDE4LjI3MDEgMjIuOTUwMiAxOC41MzAxIDIyLjkxMDMgMTguNzkwMUwyNC41NDk1IDIwLjQzMDFaTTE3Ljk5MjYgOS4wMDAwNkMyMy45ODk4IDkuMDAwMDYgMjkuMzk3MiAxMi41MjAxIDMxLjg5NiAxOC4wMDAxQzMwLjg5''@;'; put 'put ''NjUgMjAuMTkwMSAyOS40MjcyIDIyLjA2MDEgMjcuNjQ4IDIzLjUzMDFMMjkuMDY3NCAyNC45NTAxQzMxLjEyNjQgMjMuMjIwMSAzMi44MDU2IDIwLjk5MDEgMzMuOTE1MSAxOC4zOTAxQzM0LjAyNSAxOC4xNDAxIDM0LjAyNSAxNy44NjAxIDMzLjkxNTEgMTcuNjEwMUMzMS4xODY0IDExLjE2''@;'; put 'put ''MDEgMjQuOTM5MyA3LjAwMDA2IDE4LjAwMjYgNy4wMDAwNkMxNS45NzM1IDcuMDAwMDYgMTQuMDA0NCA3LjM3MDA2IDEyLjE2NTMgOC4wMzAwNkwxMy43NDQ2IDkuNjEwMDZDMTUuMTAzOSA5LjIxMDA2IDE2LjUzMzIgOS4wMDAwNiAxOC4wMDI2IDkuMDAwMDZIMTcuOTkyNlpNMy43MDkyNiAy''@;'; put 'put ''LjI5MDA2QzMuMzE5NDQgMS45MDAwNiAyLjY3OTc0IDEuOTAwMDYgMi4yODk5MiAyLjI5MDA2QzEuOTAwMSAyLjY4MDA2IDEuOTAwMSAzLjMyMDA2IDIuMjg5OTIgMy43MTAwNkw4LjQ3NzAyIDkuOTAwMDZDNS43MDgzMiAxMS43NDAxIDMuNDQ5MzggMTQuMzgwMSAyLjA4MDAyIDE3LjYxMDFD''@;'; put 'put ''MS45NzAwNyAxNy44NjAxIDEuOTcwMDcgMTguMTQwMSAyLjA4MDAyIDE4LjM5MDFDNC44MDg3NCAyNC44NDAxIDExLjA1NTggMjkuMDAwMSAxNy45OTI2IDI5LjAwMDFDMjAuNzQxMyAyOS4wMDAxIDIzLjM3IDI4LjM0MDEgMjUuNzE4OSAyNy4xNTAxTDMyLjI3NTkgMzMuNzEwMUMzMi40NzU4''@;'; put 'put ''IDMzLjkxMDEgMzIuNzI1NyAzNC4wMDAxIDMyLjk4NTUgMzQuMDAwMUMzMy4yNDU0IDM0LjAwMDEgMzMuNDk1MyAzMy45MDAxIDMzLjY5NTIgMzMuNzEwMUMzNC4wODUgMzMuMzIwMSAzNC4wODUgMzIuNjkwMSAzMy42OTUyIDMyLjMwMDFMMy43MDkyNiAyLjI5MDA2Wk0xMy44MzQ1IDE1LjI1''@;'; put 'put ''MDFMMjAuNzQxMyAyMi4xNjAxQzE5Ljk1MTYgMjIuNjgwMSAxOS4wMTIxIDIzLjAwMDEgMTcuOTkyNiAyMy4wMDAxQzE1LjIzMzkgMjMuMDAwMSAxMi45OTQ5IDIwLjc2MDEgMTIuOTk0OSAxOC4wMDAxQzEyLjk5NDkgMTYuOTgwMSAxMy4zMDQ4IDE2LjA0MDEgMTMuODM0NSAxNS4yNTAxWk0x''@;'; put 'put ''Ny45OTI2IDI3LjAwMDFDMTEuOTk1NCAyNy4wMDAxIDYuNTg3OTEgMjMuNDgwMSA0LjA4OTA4IDE4LjAwMDFDNS4zNjg0OCAxNS4xOTAxIDcuNDI3NTEgMTIuOTEwMSA5LjkyNjM0IDExLjM0MDFMMTIuNDA1MiAxMy44MjAxQzExLjUyNTYgMTQuOTkwMSAxMC45OTU4IDE2LjQzMDEgMTAuOTk1''@;'; put 'put ''OCAxOC4wMDAxQzEwLjk5NTggMjEuODYwMSAxNC4xMzQ0IDI1LjAwMDEgMTcuOTkyNiAyNS4wMDAxQzE5LjU2MTggMjUuMDAwMSAyMS4wMDEyIDI0LjQ3MDEgMjIuMTcwNiAyMy41OTAxTDI0LjIyOTYgMjUuNjUwMUMyMi4zMTA1IDI2LjUyMDEgMjAuMTkxNSAyNy4wMDAxIDE3Ljk5MjYgMjcu''@;'; put 'put ''MDAwMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAyMC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4y''@;'; put 'put ''MjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUxIDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAyNC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIu''@;'; put 'put ''MTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAwNkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkwMDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYg''@;'; put 'put ''MS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcxMDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1''@;'; put 'put ''OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMyMC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMuOTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkw''@;'; put 'put ''MDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAzMy4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTE3Ljk5MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40''@;'; put 'put ''Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEuMzQwMUwxMi40MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIg''@;'; put 'put ''MjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFMMjQuMjI5NiAyNS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAxWk0xNS41NjM3IDExLjQ0MDFMMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4w''@;'; put 'put ''MDAxQzI0Ljk4OTMgMTQuMTQwMSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFaIi8+J31dLGtVZT1bImV5ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNy45OTc2IDExQzE0LjEzODIgMTEgMTAuOTk4''@;'; put 'put ''NyAxNC4xNCAxMC45OTg3IDE4QzEwLjk5ODcgMjEuODYgMTQuMTM4MiAyNSAxNy45OTc2IDI1QzIxLjg1NyAyNSAyNC45OTY1IDIxLjg2IDI0Ljk5NjUgMThDMjQuOTk2NSAxNC4xNCAyMS44NTcgMTEgMTcuOTk3NiAxMVpNMTcuOTk3NiAyM0MxNS4yMzggMjMgMTIuOTk4MyAyMC43NiAxMi45''@;'; put 'put ''OTgzIDE4QzEyLjk5ODMgMTUuMjQgMTUuMjM4IDEzIDE3Ljk5NzYgMTNDMjAuNzU3MSAxMyAyMi45OTY4IDE1LjI0IDIyLjk5NjggMThDMjIuOTk2OCAyMC43NiAyMC43NTcxIDIzIDE3Ljk5NzYgMjNaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzEx''@;'; put 'put ''LjA1ODYgNyA0LjgwOTYyIDExLjE3IDIuMDgwMDUgMTcuNjFDMS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4x''@;'; put 'put ''NCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEgMTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45''@;'; put 'put ''OTY2IDI3IDE3Ljk5NzYgMjdaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1''@;'; put 'put ''IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2IDExWk0zMy45MTUxIDE3LjYxQzMxLjE4NTUgMTEuMTcgMjQuOTM2NSA3IDE3Ljk5NzYgN0MxMS4wNTg2IDcgNC44MDk2MiAxMS4xNyAyLjA4MDA1IDE3LjYxQzEuOTcwMDYgMTcuODYgMS45NzAwNiAxOC4xNCAyLjA4MDA1IDE4LjM5QzQuODA5NjIg''@;'; put 'put ''MjQuODQgMTEuMDU4NiAyOSAxNy45OTc2IDI5QzI0LjkzNjUgMjkgMzEuMTg1NSAyNC44MyAzMy45MTUxIDE4LjM5QzM0LjAyNTEgMTguMTQgMzQuMDI1MSAxNy44NiAzMy45MTUxIDE3LjYxWk0xNy45OTc2IDI3QzExLjk5ODUgMjcgNi41ODkzNCAyMy40OCA0LjA4OTczIDE4QzYuNTg5MzQg''@;'; put 'put ''MTIuNTIgMTEuOTk4NSA5IDE3Ljk5NzYgOUMyMy45OTY2IDkgMjkuNDA1OCAxMi41MiAzMS45MDU0IDE4QzI5LjQwNTggMjMuNDggMjMuOTk2NiAyNyAxNy45OTc2IDI3WiIvPid9XSxEVWU9WyJlbGxpcHNpcy12ZXJ0aWNhbCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMS4xMDAxIDQuOUMyMS4x''@;'; put 'put ''MDAxIDYuNTAxNjMgMTkuNzU3IDcuOCAxOC4xMDAxIDcuOEMxNi40NDMyIDcuOCAxNS4xMDAxIDYuNTAxNjMgMTUuMTAwMSA0LjlDMTUuMTAwMSAzLjI5ODM3IDE2LjQ0MzIgMiAxOC4xMDAxIDJDMTkuNzU3IDIgMjEuMTAwMSAzLjI5ODM3IDIxLjEwMDEgNC45WiIvPjxwYXRoIGQ9Ik0xOC4x''@;'; put 'put ''MDAxIDIwLjlDMTkuNzU3IDIwLjkgMjEuMTAwMSAxOS42MDE2IDIxLjEwMDEgMThDMjEuMTAwMSAxNi4zOTg0IDE5Ljc1NyAxNS4xIDE4LjEwMDEgMTUuMUMxNi40NDMyIDE1LjEgMTUuMTAwMSAxNi4zOTg0IDE1LjEwMDEgMThDMTUuMTAwMSAxOS42MDE2IDE2LjQ0MzIgMjAuOSAxOC4xMDAx''@;'; put 'put ''IDIwLjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMzRDMTkuNzU3IDM0IDIxLjEwMDEgMzIuNzAxNiAyMS4xMDAxIDMxLjFDMjEuMTAwMSAyOS40OTg0IDE5Ljc1NyAyOC4yIDE4LjEwMDEgMjguMkMxNi40NDMyIDI4LjIgMTUuMTAwMSAyOS40OTg0IDE1LjEwMDEgMzEuMUMxNS4xMDAxIDMyLjcw''@;'; put 'put ''MTYgMTYuNDQzMiAzNCAxOC4xMDAxIDM0WiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEgNi41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYu''@;'; put 'put ''NDQzMiAyIDE4LjEwMDEgMkMxOS43NTcgMiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0''@;'; put 'put ''MzIgMTUuMSAxNS4xMDAxIDE2LjM5ODQgMTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4''@;'; put 'put ''LjIgMTguMTAwMSAyOC4yQzE2LjQ0MzIgMjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAxNi40NDMyIDM0IDE4LjEwMDEgMzRaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMw''@;'; put 'put ''IDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLElVZT1bInZpZXctY29sdW1ucyIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEgNUg1QzMuODk1NDMgNSAzIDUu''@;'; put 'put ''ODk1NDMgMyA3VjI5QzMgMzAuMTA0NiAzLjg5NTQzIDMxIDUgMzFIMzFDMzIuMTA0NiAzMSAzMyAzMC4xMDQ2IDMzIDI5VjdDMzMgNS44OTU0MyAzMi4xMDQ2IDUgMzEgNVpNMTMgMjlINVY3SDEzVjI5Wk0xNSAyOUgyM1Y3SDE1VjI5WiIvPid9XSxSVWU9WyJhcnJvdyIse291dGxpbmU6Jzxw''@;'; put 'put ''YXRoIGQ9Ik0yNy42NTA0IDE1LjYzNDFMMTcuOTk1MSA2TDguMzM5ODEgMTUuNjM0MUM4LjAyODY5IDE1Ljg3MTcgNy44ODQzMiAxNi4yNjk1IDcuOTcwMyAxNi42NTIxQzguMDU2MjkgMTcuMDM0NyA4LjM1Njg1IDE3LjMzMTkgOC43Mzk1MiAxNy40MTI3QzkuMTIyMTkgMTcuNDkzNSA5LjUx''@;'; put 'put ''NjY3IDE3LjM0MyA5Ljc0OTEyIDE3LjAyNzZMMTYuOTk1NiA5LjgxOTU1VjI4Ljk5NzVDMTYuOTk1NiAyOS41NTEyIDE3LjQ0MzEgMzAgMTcuOTk1MSAzMEMxOC41NDcxIDMwIDE4Ljk5NDYgMjkuNTUxMiAxOC45OTQ2IDI4Ljk5NzVWOS44MTk1NUwyNi4yNDExIDE3LjAyNzZDMjYuNjMzIDE3''@;'; put 'put ''LjQxNzkgMjcuMjY2MiAxNy40MTU3IDI3LjY1NTQgMTcuMDIyNkMyOC4wNDQ1IDE2LjYyOTUgMjguMDQyMyAxNS45OTQzIDI3LjY1MDQgMTUuNjA0VjE1LjYzNDFaIi8+J31dLExVZT1bInN0ZXAtZm9yd2FyZC0yIix7b3V0bGluZTonPHBhdGggZD0iTTcuMDg4OTMgNi41MjAwM0M2LjkyNjQz''@;'; put 'put ''IDYuNjc2NDUgNi43OTczNCA2Ljg2MzE1IDYuNzA5MjEgNy4wNjkyMUM2LjYyMTA4IDcuMjc1MjYgNi41NzU2OCA3LjQ5NjUyIDYuNTc1NjggNy43MjAwM0M2LjU3NTY4IDcuOTQzNTMgNi42MjEwOCA4LjE2NDc5IDYuNzA5MjEgOC4zNzA4NUM2Ljc5NzM0IDguNTc2OSA2LjkyNjQzIDguNzYz''@;'; put 'put ''NjEgNy4wODg5MyA4LjkyMDAzTDE2LjY4NzIgMThMNy4xMjk2NCAyNy4wOEM2LjgyOTc3IDI3LjM5OTEgNi42NjU1NCAyNy44MTg4IDYuNjcwNjUgMjguMjUzQzYuNjc1NzYgMjguNjg3MiA2Ljg0OTgyIDI5LjEwMzEgNy4xNTcxMiAyOS40MTUyQzcuNDY0NDIgMjkuNzI3NCA3Ljg4MTY2IDI5''@;'; put 'put ''LjkxMjEgOC4zMjMyMyAyOS45MzE2QzguNzY0OCAyOS45NTExIDkuMTk3MjEgMjkuODAzOCA5LjUzMTc2IDI5LjUyTDIxLjY2NDUgMThMOS41MzE3NiA2LjQ3MDAzQzkuMzY4NTEgNi4zMTQ4MiA5LjE3NTU5IDYuMTkyOTMgOC45NjQxMyA2LjExMTM3QzguNzUyNjcgNi4wMjk4MiA4LjUyNjg2''@;'; put 'put ''IDUuOTkwMjIgOC4yOTk3NCA1Ljk5NDg3QzguMDcyNjIgNS45OTk1MiA3Ljg0ODY5IDYuMDQ4MzIgNy42NDA4NyA2LjEzODQ2QzcuNDMzMDUgNi4yMjg1OSA3LjI0NTQ2IDYuMzU4MjggNy4wODg5MyA2LjUyMDAzWiIvPjxwYXRoIGQ9Ik0yNi44NDUzIDVDMjYuMzg2NCA1IDI1Ljk0NjMgNS4x''@;'; put 'put ''NzkxMSAyNS42MjE4IDUuNDk3OTJDMjUuMjk3MyA1LjgxNjczIDI1LjExNSA2LjI0OTEzIDI1LjExNSA2LjdWMjkuM0MyNS4xMTUgMjkuNzUwOSAyNS4yOTczIDMwLjE4MzMgMjUuNjIxOCAzMC41MDIxQzI1Ljk0NjMgMzAuODIwOSAyNi4zODY0IDMxIDI2Ljg0NTMgMzFDMjcuMzA0MyAzMSAy''@;'; put 'put ''Ny43NDQ0IDMwLjgyMDkgMjguMDY4OSAzMC41MDIxQzI4LjM5MzQgMzAuMTgzMyAyOC41NzU3IDI5Ljc1MDkgMjguNTc1NyAyOS4zVjYuN0MyOC41NzU3IDYuMjQ5MTMgMjguMzkzNCA1LjgxNjczIDI4LjA2ODkgNS40OTc5MkMyNy43NDQ0IDUuMTc5MTEgMjcuMzA0MyA1IDI2Ljg0NTMgNVoi''@;'; put 'put ''Lz4nfV0sT1VlPVsiZmlsdGVyLWdyaWQtY2lyY2xlIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2''@;'; put 'put ''LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThD''@;'; put 'put ''MzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAyNy44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk0xNyAyNi44NkwxNSAyNS44NlYyMC42OEw4LjQyIDE0QzguMTU2NzkgMTMuNzMzIDguMDA2NCAxMy4zNzQ5IDggMTNWMTJDOCAxMS40NDc3IDguNDQ3NzIgMTEgOSAx''@;'; put 'put ''MUgyN0MyNy41NTIzIDExIDI4IDExLjQ0NzcgMjggMTJWMTNDMjcuOTkzNiAxMy4zNzQ5IDI3Ljg0MzIgMTMuNzMzIDI3LjU4IDE0TDIxIDIwLjY4VjI5TDE5IDI4TDE5LjAzIDIwLjI3QzE5LjAzMTEgMjAuMDA3NyAxOS4xMzUzIDE5Ljc1NjMgMTkuMzIgMTkuNTdMMjUuNzkgMTNIMTAuMjNM''@;'; put 'put ''MTYuNzEgMTkuNTdDMTYuODk0NyAxOS43NTYzIDE2Ljk5ODkgMjAuMDA3NyAxNyAyMC4yN1YyNi44NloiLz4nLHNvbGlkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2''@;'; put 'put ''MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAx''@;'; put 'put ''OCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTggMTIuMTJWMTFIMjcuOThWMTIuMTRDMjcuOTc4MSAxMi4yNzE5IDI3LjkyNDIgMTIuMzk3NyAyNy44MyAxMi40''@;'; put 'put ''OUwyMC43MSAxOS43NEMyMC42MDgxIDE5LjgyOTkgMjAuNTQzOCAxOS45NTQ4IDIwLjUzIDIwLjA5VjI4LjQ4QzIwLjUzMDMgMjguNjUyOCAyMC40NDE1IDI4LjgxMzQgMjAuMjk1IDI4LjkwNUMyMC4xNDg1IDI4Ljk5NjYgMTkuOTY1MSAyOS4wMDYgMTkuODEgMjguOTNMMTUuODYgMjcuNTJD''@;'; put 'put ''MTUuNjg4MyAyNy40MzU5IDE1LjU3OTYgMjcuMjYxMiAxNS41OCAyNy4wN1YyMC4xOEMxNS41NzgxIDIwLjA0ODEgMTUuNTI0MiAxOS45MjIzIDE1LjQzIDE5LjgzTDguMTUgMTIuNDdDOC4wNTU3OSAxMi4zNzc3IDguMDAxODggMTIuMjUxOSA4IDEyLjEyWiIvPid9XSxQVWU9WyJmaWx0ZXIt''@;'; put 'put ''Z3JpZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNSAyMy44NkwxNyAyNC44NlYxOC4yN0MxNi45OTg5IDE4LjAwNzcgMTYuODk0NyAxNy43NTYzIDE2LjcxIDE3LjU3TDEwLjIzIDExSDI1Ljc5TDE5LjMyIDE3LjU3QzE5LjEzNTMgMTcuNzU2MyAxOS4wMzExIDE4LjAwNzcgMTkuMDMgMTguMjdM''@;'; put 'put ''MTkgMjZMMjEgMjdWMTguNjhMMjcuNTggMTJDMjcuODQzMiAxMS43MzMgMjcuOTkzNiAxMS4zNzQ5IDI4IDExVjEwQzI4IDkuNDQ3NzIgMjcuNTUyMyA5IDI3IDlIOUM4LjQ0NzcyIDkgOCA5LjQ0NzcyIDggMTBWMTFDOC4wMDY0IDExLjM3NDkgOC4xNTY3OSAxMS43MzMgOC40MiAxMkwxNSAx''@;'; put 'put ''OC42OFYyMy44NloiLz4nLHNvbGlkOic8cGF0aCBkPSJNOCA5VjEwLjEyMTJDOC4wMDE4OCAxMC4yNTMyIDguMDU1ODUgMTAuMzc5MSA4LjE1MDE1IDEwLjQ3MTZMMTUuNDM3NCAxNy44MzkzQzE1LjUzMTcgMTcuOTMxNyAxNS41ODU3IDE4LjA1NzcgMTUuNTg3NiAxOC4xODk3VjI1LjA4N0Mx''@;'; put 'put ''NS41ODcyIDI1LjI3ODQgMTUuNjk2IDI1LjQ1MzIgMTUuODY3OSAyNS41Mzc1TDE5LjgyMTggMjYuOTQ4OUMxOS45NzcxIDI3LjAyNSAyMC4xNjA3IDI3LjAxNTYgMjAuMzA3MyAyNi45MjM5QzIwLjQ1MzkgMjYuODMyMyAyMC41NDI5IDI2LjY3MTQgMjAuNTQyNSAyNi40OTg1VjE4LjA5OTZD''@;'; put 'put ''MjAuNTU2NCAxNy45NjQzIDIwLjYyMDcgMTcuODM5MiAyMC43MjI3IDE3Ljc0OTJMMjcuODQ5OCAxMC40OTE2QzI3Ljk0NDIgMTAuMzk5MiAyNy45OTgxIDEwLjI3MzIgMjggMTAuMTQxMlY5SDhaIi8+J31dLFZLPVsiZXJyb3Itc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMjIu''@;'; put 'put ''NjFDMTcuNDQ3NyAyMi42MSAxNyAyMi4xNjIzIDE3IDIxLjYxVjkuNjFDMTcgOS4wNTc3MiAxNy40NDc3IDguNjEgMTggOC42MUMxOC41NTIzIDguNjEgMTkgOS4wNTc3MiAxOSA5LjYxVjIxLjYxQzE5IDIyLjE2MjMgMTguNTUyMyAyMi42MSAxOCAyMi42MVoiLz48cGF0aCBkPSJNMTkuMzMg''@;'; put 'put ''MjYuMDZDMTkuMzMgMjYuNzk0NSAxOC43MzQ1IDI3LjM5IDE4IDI3LjM5QzE3LjI2NTUgMjcuMzkgMTYuNjcgMjYuNzk0NSAxNi42NyAyNi4wNkMxNi42NyAyNS4zMjU1IDE3LjI2NTUgMjQuNzMgMTggMjQuNzNDMTguNzM0NSAyNC43MyAxOS4zMyAyNS4zMjU1IDE5LjMzIDI2LjA2WiIvPjxw''@;'; put 'put ''YXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyMi4yNDM1IDM0IDI2LjMxMzEgMzIuMzE0MyAyOS4zMTM3IDI5LjMxMzdDMzIuMzE0MyAyNi4zMTMxIDM0IDIyLjI0MzUgMzQgMThDMzQgOS4xNjM0''@;'; put 'put ''NCAyNi44MzY2IDIgMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThaTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFoiLz4nLHNvbGlkOic8cGF0aCBk''@;'; put 'put ''PSJNMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0xNyA5LjYxQzE3IDkuMDYgMTcuNDUgOC42MSAxOCA4LjYx''@;'; put 'put ''QzE4LjU1IDguNjEgMTkgOS4wNiAxOSA5LjYxVjIxLjYxQzE5IDIyLjE2IDE4LjU1IDIyLjYxIDE4IDIyLjYxQzE3LjQ1IDIyLjYxIDE3IDIyLjE2IDE3IDIxLjYxVjkuNjFaTTE4IDI3LjI2QzE3LjM0IDI3LjI2IDE2LjggMjYuNzIgMTYuOCAyNi4wNkMxNi44IDI1LjQgMTcuMzQgMjQuODYg''@;'; put 'put ''MTggMjQuODZDMTguNjYgMjQuODYgMTkuMiAyNS40IDE5LjIgMjYuMDZDMTkuMiAyNi43MiAxOC42NiAyNy4yNiAxOCAyNy4yNloiLz4nfV0sRlVlPVsiaGVscCIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDkuMTYz''@;'; put 'put ''NDQgOS4xNjM0NCAyIDE4IDJDMjIuMjQzNSAyIDI2LjMxMzEgMy42ODU3MSAyOS4zMTM3IDYuNjg2MjlDMzIuMzE0MyA5LjY4Njg3IDM0IDEzLjc1NjUgMzQgMThDMzQgMjYuODM2NiAyNi44MzY2IDM0IDE4IDM0QzkuMTYzNDQgMzQgMiAyNi44MzY2IDIgMThaTTQgMThDNCAyNS43MzIgMTAu''@;'; put 'put ''MjY4IDMyIDE4IDMyQzIxLjcxMyAzMiAyNS4yNzQgMzAuNTI1IDI3Ljg5OTUgMjcuODk5NUMzMC41MjUgMjUuMjc0IDMyIDIxLjcxMyAzMiAxOEMzMiAxMC4yNjggMjUuNzMyIDQgMTggNEMxMC4yNjggNCA0IDEwLjI2OCA0IDE4Wk0xOC4yOSA4LjkyQzE2LjA5NjEgOC44ODM3NCAxMy45OTk4''@;'; put 'put ''IDkuODI1NiAxMi41NyAxMS40OUMxMi4zNzE4IDExLjY3MzcgMTIuMjU2MyAxMS45Mjk4IDEyLjI1IDEyLjJDMTIuMjQ5OSAxMi40NDkzIDEyLjM1MDkgMTIuNjg4IDEyLjUzIDEyLjg2MTRDMTIuNzA5MSAxMy4wMzQ4IDEyLjk1MDggMTMuMTI4MSAxMy4yIDEzLjEyQzEzLjQ2NDIgMTMuMTEz''@;'; put 'put ''NSAxMy43MTY4IDEzLjAxMDMgMTMuOTEgMTIuODNDMTQuOTkxNiAxMS41NjI1IDE2LjU3MzcgMTAuODMxNyAxOC4yNCAxMC44M0MyMC42IDEwLjgzIDIyLjA3IDEyLjM1IDIyLjA3IDE0LjI0VjE0LjI5QzIyLjA3IDE2LjUgMjAuMzEgMTcuNzMgMTcuNTMgMTcuOTRDMTcuMzAyMyAxNy45NDg4''@;'; put 'put ''IDE3LjA4OTIgMTguMDU0MiAxNi45NDQxIDE4LjIyOTlDMTYuNzk5IDE4LjQwNTYgMTYuNzM1NyAxOC42MzQ4IDE2Ljc3IDE4Ljg2VjIxLjYxQzE2LjgyMTUgMjIuMTIyOSAxNy4yNTQ1IDIyLjUxMjYgMTcuNzcgMjIuNTFIMTcuODhDMTguMzkyOSAyMi40NTg1IDE4Ljc4MjYgMjIuMDI1NSAx''@;'; put 'put ''OC43OCAyMS41MVYxOS40NUMyMS43OCAxOS4wMyAyNC4yMSAxNy40NSAyNC4yMSAxNC4xN1YxNC4xMkMyNC4xOCAxMS4xMiAyMS44NCA4LjkyIDE4LjI5IDguOTJaTTE5LjAzIDI2LjJDMTkuMDMgMjYuODkwNCAxOC40NzA0IDI3LjQ1IDE3Ljc4IDI3LjQ1QzE3LjA4OTYgMjcuNDUgMTYuNTMg''@;'; put 'put ''MjYuODkwNCAxNi41MyAyNi4yQzE2LjUzIDI1LjUwOTYgMTcuMDg5NiAyNC45NSAxNy43OCAyNC45NUMxOC40NzA0IDI0Ljk1IDE5LjAzIDI1LjUwOTYgMTkuMDMgMjYuMloiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzIuMzk1OSAxMy4wNDYyIDMxLjc1''@;'; put 'put ''NTkgMTMuMjQwNiAzMS4wOTg2IDEzLjM0NjdDMzMuMjYzNiAxOS41MTA4IDMwLjg3NjMgMjYuMzUyOCAyNS4zNDY1IDI5LjgzMkMxOS44MTY3IDMzLjMxMTIgMTIuNjE1NCAzMi41MDIgNy45OTU2OSAyNy44ODIyQzMuMzc1OTcgMjMuMjYyNSAyLjU2Njc0IDE2LjA2MTMgNi4wNDU5MiAxMC41''@;'; put 'put ''MzE1QzkuNTI1MDkgNS4wMDE2MiAxNi4zNjcxIDIuNjE0MjkgMjIuNTMxMiA0Ljc3OTM4QzIyLjYzNzUgNC4xMjIwNSAyMi44MzE4IDMuNDgyMDQgMjMuMTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTkyMDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUg''@;'; put 'put ''MS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4NTkgMjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaIi8+PHBhdGggZD0iTTE3LjcxOTYgMjcuMzUzM0MxOC40MDczIDI3''@;'; put 'put ''LjM1MzMgMTguOTY0OCAyNi43OTU4IDE4Ljk2NDggMjYuMTA4MUMxOC45NjQ4IDI1LjQyMDMgMTguNDA3MyAyNC44NjI4IDE3LjcxOTYgMjQuODYyOEMxNy4wMzE4IDI0Ljg2MjggMTYuNDc0MyAyNS40MjAzIDE2LjQ3NDMgMjYuMTA4MUMxNi40NzQzIDI2Ljc5NTggMTcuMDMxOCAyNy4zNTMz''@;'; put 'put ''IDE3LjcxOTYgMjcuMzUzM1oiLz48cGF0aCBkPSJNMjQuMDk1MyAxNC4wNzM5VjE0LjEyMzhDMjQuMDk1MyAxNy4zOTEzIDIxLjY3NDUgMTguOTM1NCAxOC43MjU3IDE5LjM4MzdWMjEuNDM1OUMxOC43MjgzIDIxLjk0OTQgMTguMzQwMSAyMi4zODA3IDE3LjgyOTEgMjIuNDMyMUgxNy43MTk2''@;'; put 'put ''QzE3LjIwNiAyMi40MzQ3IDE2Ljc3NDcgMjIuMDQ2NSAxNi43MjMzIDIxLjUzNTVWMTguNzk1OUMxNi42ODkxIDE4LjU3MTYgMTYuNzUyMiAxOC4zNDMyIDE2Ljg5NjggMTguMTY4MkMxNy4wNDEzIDE3Ljk5MzIgMTcuMjUzNyAxNy44ODgyIDE3LjQ4MDUgMTcuODc5NEMyMC4yNDk5IDE3LjY3''@;'; put 'put ''MDIgMjIuMDAzMiAxNi40NDQ5IDIyLjAwMzIgMTQuMjQzM1YxNC4xOTM1QzIyLjAwMzIgMTIuMzEwNyAyMC41Mzg4IDEwLjc5NjQgMTguMTg3OCAxMC43OTY0QzE2LjUyNzggMTAuNzk4MiAxNC45NTE3IDExLjUyNjEgMTMuODc0MiAxMi43ODg4QzEzLjY4MTcgMTIuOTY4NCAxMy40MzAxIDEz''@;'; put 'put ''LjA3MTIgMTMuMTY2OSAxMy4wNzc3QzEyLjkxODcgMTMuMDg1OCAxMi42Nzc4IDEyLjk5MjkgMTIuNDk5NCAxMi44MjAxQzEyLjMyMSAxMi42NDczIDEyLjIyMDQgMTIuNDA5NiAxMi4yMjA1IDEyLjE2MTJDMTIuMjI2OCAxMS44OTIxIDEyLjM0MTggMTEuNjM2OSAxMi41MzkzIDExLjQ1MzlD''@;'; put 'put ''MTMuOTYzNyA5Ljc5NTg1IDE2LjA1MiA4Ljg1NzU3IDE4LjIzNzYgOC44OTM2OUMyMS43NjQxIDguODkzNjkgMjQuMDk1MyAxMS4wODUzIDI0LjA5NTMgMTQuMDczOVoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAg''@;'; put 'put ''MUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nLHNvbGlkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0''@;'; put 'put ''IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xNy43OCAyNy44NUMxNy4xMTI2IDI3Ljg1IDE2LjUxMSAyNy40NDggMTYuMjU1NiAyNi44''@;'; put 'put ''MzE0QzE2LjAwMDIgMjYuMjE0OSAxNi4xNDE0IDI1LjUwNTIgMTYuNjEzMyAyNS4wMzMzQzE3LjA4NTIgMjQuNTYxNCAxNy43OTQ5IDI0LjQyMDIgMTguNDExNCAyNC42NzU2QzE5LjAyOCAyNC45MzEgMTkuNDMgMjUuNTMyNiAxOS40MyAyNi4yQzE5LjQzIDI3LjExMTMgMTguNjkxMyAyNy44''@;'; put 'put ''NSAxNy43OCAyNy44NVpNMTkuMTUgMjEuNTFWMTkuNzlDMjIuNjEgMTkuMiAyNC41OCAxNy4xNiAyNC41OCAxNC4xMUMyNC41OCAxMC44MSAyMiA4LjUxIDE4LjMgOC41MUMxNi4wMDA1IDguNDc0NTIgMTMuODAzMyA5LjQ1OTU2IDEyLjMgMTEuMkMxMi4wMzA0IDExLjQ2MzYgMTEuODc1OSAx''@;'; put 'put ''MS44MjMgMTEuODcgMTIuMkMxMS44ODMgMTIuNzUxNiAxMi4yMjggMTMuMjQwNiAxMi43NDMyIDEzLjQzOEMxMy4yNTg1IDEzLjYzNTMgMTMuODQxOSAxMy41MDE4IDE0LjIyIDEzLjFDMTUuMjA5MiAxMS45MDY5IDE2LjY3MDQgMTEuMjA1NiAxOC4yMiAxMS4xOEMyMC4yNCAxMS4xOCAyMS42''@;'; put 'put ''NSAxMi40MiAyMS42NSAxNC4yNUMyMS42NSAxNi44IDE5LjA0IDE3LjM4IDE3LjQ3IDE3LjVDMTcuMTQ0OCAxNy41MTc1IDE2Ljg0MDkgMTcuNjY3NCAxNi42MjkzIDE3LjkxNUMxNi40MTc2IDE4LjE2MjUgMTYuMzE2NyAxOC40ODYgMTYuMzUgMTguODFWMjEuNTdDMTYuMzYwNCAyMS45Mjcy''@;'; put 'put ''IDE2LjUxMzEgMjIuMjY1NSAxNi43NzQxIDIyLjUwOTZDMTcuMDM1MSAyMi43NTM3IDE3LjM4MjkgMjIuODgzNSAxNy43NCAyMi44N0gxNy44NUMxOC41NzUzIDIyLjgzMjkgMTkuMTQ1NiAyMi4yMzYyIDE5LjE1IDIxLjUxWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZl''@;'; put 'put ''bm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzMuMDAxMyAxMi43Njg5QzMwLjE2NTkgMTQuMDY4OCAyNi44MjEyIDEzLjQ2NzkgMjQuNjE1NiAxMS4yNjIzQzIyLjQxMDEgOS4wNTY3NCAyMS44MDkxIDUuNzEyIDIzLjEwOSAyLjg3NjYzQzE2LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAz''@;'; put 'put ''LjE5MjA1IDQuMzE4MjMgOS41MTAyOUMwLjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4MDYgMjAuMDQ5NCAzNS41MTM1IDI2LjM2NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5''@;'; put 'put ''Wk0xNy43MTk2IDI3LjcxMkMxNy4wNTQ3IDI3LjcxMiAxNi40NTU0IDI3LjMxMTUgMTYuMjAwOSAyNi42OTczQzE1Ljk0NjUgMjYuMDgzIDE2LjA4NzIgMjUuMzc2IDE2LjU1NzMgMjQuOTA1OUMxNy4wMjc0IDI0LjQzNTggMTcuNzM0NCAyNC4yOTUyIDE4LjM0ODYgMjQuNTQ5NkMxOC45NjI4''@;'; put 'put ''IDI0LjgwNCAxOS4zNjMzIDI1LjQwMzQgMTkuMzYzMyAyNi4wNjgyQzE5LjM3NCAyNi41MTEgMTkuMjA1NiAyNi45Mzk0IDE4Ljg5NjIgMjcuMjU2NEMxOC41ODY3IDI3LjU3MzMgMTguMTYyNSAyNy43NTE5IDE3LjcxOTYgMjcuNzUxOFYyNy43MTJaTTE5LjA4NDQgMjEuMzk2VjE5LjcyMjRD''@;'; put 'put ''MjIuNTMxMiAxOS4xMzQ3IDI0LjQ5MzcgMTcuMTAyNCAyNC40OTM3IDE0LjAyNDFDMjQuNDkzNyAxMC43MzY3IDIxLjkyMzUgOC40NDU0IDE4LjIzNzYgOC40NDU0QzE1Ljk0NjggOC40MTAwNiAxMy43NTggOS4zOTEzNiAxMi4yNjA0IDExLjEyNTJDMTEuOTkxOCAxMS4zODc4IDExLjgzNzkg''@;'; put 'put ''MTEuNzQ1OCAxMS44MzIgMTIuMTIxNEMxMS44NDUgMTIuNjcwOSAxMi4xODg2IDEzLjE1ODEgMTIuNzAxOSAxMy4zNTQ3QzEzLjIxNTIgMTMuNTUxMiAxMy43OTY0IDEzLjQxODIgMTQuMTczMSAxMy4wMThDMTUuMTU4NiAxMS44Mjk0IDE2LjYxNDEgMTEuMTMwNyAxOC4xNTc5IDExLjEwNTND''@;'; put 'put ''MjAuMTcwMiAxMS4xMDUzIDIxLjU3NDkgMTIuMzQwNiAyMS41NzQ5IDE0LjE2MzZDMjEuNTc0OSAxNi43MDM5IDE4Ljk3NDggMTcuMjgxNyAxNy40MTA3IDE3LjQwMTNDMTcuMDg2NyAxNy40MTg2IDE2Ljc4NCAxNy41NjgxIDE2LjU3MzIgMTcuODE0N0MxNi4zNjIzIDE4LjA2MTMgMTYuMjYx''@;'; put 'put ''OCAxOC4zODM1IDE2LjI5NSAxOC43MDYzVjIxLjQ1NThDMTYuMzA1NCAyMS44MTE3IDE2LjQ1NzUgMjIuMTQ4NyAxNi43MTc1IDIyLjM5MTlDMTYuOTc3NSAyMi42MzUxIDE3LjMyMzkgMjIuNzY0MyAxNy42Nzk3IDIyLjc1MDlIMTcuNzg5M0MxOC41MTE4IDIyLjcxMzkgMTkuMDggMjIuMTE5''@;'; put 'put ''NSAxOS4wODQ0IDIxLjM5NloiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sSFVlPVsiaW5mby1zdGFu''@;'; put 'put ''ZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThaTTQgMThDNCAxMC4y''@;'; put 'put ''NyAxMC4yNyA0IDE4IDRDMjUuNzMgNCAzMiAxMC4yNyAzMiAxOEMzMiAyNS43MyAyNS43MyAzMiAxOCAzMkMxMC4yNyAzMiA0IDI1LjczIDQgMThaTTIxIDI1SDE5VjE0SDE2QzE1LjQ1IDE0IDE1IDE0LjQ1IDE1IDE1QzE1IDE1LjU1IDE1LjQ1IDE2IDE2IDE2SDE3VjI1SDE1QzE0LjQ1IDI1''@;'; put 'put ''IDE0IDI1LjQ1IDE0IDI2QzE0IDI2LjU1IDE0LjQ1IDI3IDE1IDI3SDIxQzIxLjU1IDI3IDIyIDI2LjU1IDIyIDI2QzIyIDI1LjQ1IDIxLjU1IDI1IDIxIDI1Wk0xOS4zNyAxMC40NUMxOS4zNyAxMS4yMiAxOC43NCAxMS44NSAxNy45NyAxMS44NUMxNy4yIDExLjg1IDE2LjU3IDExLjIyIDE2''@;'; put 'put ''LjU3IDEwLjQ1QzE2LjU3IDkuNjggMTcuMiA5LjA1IDE3Ljk3IDkuMDVDMTguNzQgOS4wNSAxOS4zNyA5LjY4IDE5LjM3IDEwLjQ1WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEg''@;'; put 'put ''MjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJaTTE3Ljk3IDguODVDMTguODUgOC44NSAxOS41NyA5LjU3IDE5LjU3IDEwLjQ1QzE5LjU3IDExLjMzIDE4Ljg1IDEyLjA1IDE3Ljk3IDEyLjA1QzE3LjA5IDEyLjA1IDE2LjM3IDExLjMz''@;'; put 'put ''IDE2LjM3IDEwLjQ1QzE2LjM3IDkuNTcgMTcuMDkgOC44NSAxNy45NyA4Ljg1Wk0yMSAyNy4ySDE1QzE0LjM0IDI3LjIgMTMuOCAyNi42NiAxMy44IDI2QzEzLjggMjUuMzQgMTQuMzQgMjQuOCAxNSAyNC44SDE2LjhWMTYuMkgxNkMxNS4zNCAxNi4yIDE0LjggMTUuNjYgMTQuOCAxNUMxNC44''@;'; put 'put ''IDE0LjM0IDE1LjM0IDEzLjggMTYgMTMuOEgxOS4yVjI0LjhIMjFDMjEuNjYgMjQuOCAyMi4yIDI1LjM0IDIyLjIgMjZDMjIuMiAyNi42NiAyMS42NiAyNy4yIDIxIDI3LjJaIi8+J31dLE5VZT1bIm5vdGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjgsMzBINlY4SDE5LjIybDItMkg2QTIsMiww''@;'; put 'put ''LDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1bC0yLDJaIi8+PHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42''@;'; put 'put ''OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIi8+Jyxzb2xpZDon''@;'; put 'put ''PHBhdGggZD0iTTMzLDYuNCwyOS4zLDIuN2ExLjcxLDEuNzEsMCwwLDAtMi4zNiwwTDIzLjY1LDZINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMS43NmwzLTNBMS42NywxLjY3LDAsMCwwLDMzLDYuNFpNMTguODMsMjAuMTNsLTQuMTkuOTMsMS00''@;'; put 'put ''LjE1LDkuNTUtOS41NywzLjIzLDMuMjNaTTI5LjUsOS40MywyNi4yNyw2LjJsMS44NS0xLjg1LDMuMjMsMy4yM1oiLz4nfV0sQks9WyJzdWNjZXNzLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYz''@;'; put 'put ''NDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMy''@;'; put 'put ''IDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAyNy44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk0yNi41OSAxMi4xQzI2Ljk4IDExLjcxMjMgMjcuNjEg''@;'; put 'put ''MTEuNzEyMyAyOCAxMi4xQzI4LjE4OTMgMTIuMjg3OCAyOC4yOTU4IDEyLjU0MzQgMjguMjk1OCAxMi44MUMyOC4yOTU4IDEzLjA3NjYgMjguMTg5MyAxMy4zMzIyIDI4IDEzLjUyTDE1LjQ5IDI2TDggMTguNTNDNy42MTg5MiAxOC4xMTg1IDcuNjQzNTUgMTcuNDc2MSA4LjA1NSAxNy4wOTVD''@;'; put 'put ''OC40NjY0NSAxNi43MTM5IDkuMTA4OTIgMTYuNzM4NSA5LjQ5IDE3LjE1TDE1LjQ5IDIzLjE1TDI2LjU5IDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTI5LjMxIDYuNjlDMjYuMzEgMy42OSAyMi4yNCAyIDE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMy''@;'; put 'put ''Ni44NCAzNCAzNCAyNi44NCAzNCAxOEMzNCAxMy43NiAzMi4zMSA5LjY5IDI5LjMxIDYuNjlaTTI4LjE0IDEzLjY0TDE1LjYzIDI2LjEyTDE1LjQ5IDI2LjI2TDE1LjM1IDI2LjEyTDcuODUgMTguNjRDNy4zOSAxOC4xNSA3LjQyIDE3LjM4IDcuOTIgMTYuOTJDOC4xNSAxNi43MSA4LjQ0IDE2''@;'; put 'put ''LjYgOC43NSAxNi42QzkuMDkgMTYuNiA5LjQxIDE2Ljc0IDkuNjQgMTYuOThMMTUuNSAyMi44NEwyNi40NiAxMS45M0MyNi42OSAxMS43IDI2Ljk5IDExLjU4IDI3LjMxIDExLjU4QzI3LjYzIDExLjU4IDI3LjkzIDExLjcgMjguMTYgMTEuOTNDMjguMzkgMTIuMTUgMjguNTEgMTIuNDYgMjgu''@;'; put 'put ''NTEgMTIuNzhDMjguNTEgMTMuMSAyOC4zOCAxMy40MSAyOC4xNiAxMy42M0wyOC4xNCAxMy42NFoiLz4nfV0sVlVlPVsid2FybmluZy1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4wMDAxIDIyLjk5MzJDMTguNTUwMSAyMi45OTMyIDE5LjAwMDEgMjIuNTQzNCAxOS4wMDAxIDIx''@;'; put 'put ''Ljk5MzZWMTAuOTk3NUMxOS4wMDAxIDEwLjQ0NzcgMTguNTUwMSA5Ljk5Nzg2IDE4LjAwMDEgOS45OTc4NkMxNy40NTAxIDkuOTk3ODYgMTcuMDAwMSAxMC40NDc3IDE3LjAwMDEgMTAuOTk3NVYyMS45OTM2QzE3LjAwMDEgMjIuNTQzNCAxNy40NTAxIDIyLjk5MzIgMTguMDAwMSAyMi45OTMy''@;'; put 'put ''Wk0zMy41NjAxIDI3LjIxMTdMMjAuNzgwMSA1LjU3OTQ0QzIwLjIwMDEgNC41ODk3OSAxOS4xNjAxIDQgMTguMDAwMSA0QzE2Ljg0MDEgNCAxNS44MDAxIDQuNTg5NzkgMTUuMjIwMSA1LjU3OTQ0TDIuNDQwMSAyNy4yMTE3QzEuODUwMSAyOC4yMTE0IDEuODUwMSAyOS40MDA5IDIuNDMwMSAz''@;'; put 'put ''MC40MDA2QzMuMDEwMSAzMS40MDAyIDQuMDYwMSAzMiA1LjIyMDEgMzJIMzAuNzcwMUMzMS45NDAxIDMyIDMyLjk4MDEgMzEuNDAwMiAzMy41NjAxIDMwLjQwMDZDMzQuMTQwMSAyOS40MDA5IDM0LjE0MDEgMjguMjExNCAzMy41NTAxIDI3LjIxMTdIMzMuNTYwMVpNMzEuODEwMSAyOS40MDA5''@;'; put 'put ''QzMxLjcxMDEgMjkuNTgwOSAzMS40MDAxIDI5Ljk5MDcgMzAuNzgwMSAyOS45OTA3SDUuMjMwMUM0LjYxMDEgMjkuOTkwNyA0LjMwMDEgMjkuNTgwOSA0LjIwMDEgMjkuNDAwOUM0LjEwMDEgMjkuMjIxIDMuODkwMSAyOC43NTEyIDQuMjAwMSAyOC4yMzEzTDE2Ljk4MDEgNi41ODkwOEMxNy4y''@;'; put 'put ''OTAxIDYuMDY5MjYgMTcuODAwMSA2LjAwOTI4IDE4LjAwMDEgNi4wMDkyOEMxOC4yMDAxIDYuMDA5MjggMTguNzEwMSA2LjA2OTI2IDE5LjAyMDEgNi41ODkwOEwzMS43OTAxIDI4LjIyMTNDMzIuMTAwMSAyOC43NTEyIDMxLjkwMDEgMjkuMjIxIDMxLjc5MDEgMjkuMzkwOUwzMS44MTAxIDI5''@;'; put 'put ''LjQwMDlaTTE4LjAxMDEgMjUuMDAyNUMxNy4yODAxIDI1LjAwMjUgMTYuNjgwMSAyNS42MDIzIDE2LjY4MDEgMjYuMzMyQzE2LjY4MDEgMjcuMDYxOCAxNy4yODAxIDI3LjY2MTUgMTguMDEwMSAyNy42NjE1QzE4Ljc0MDEgMjcuNjYxNSAxOS4zNDAxIDI3LjA2MTggMTkuMzQwMSAyNi4zMzJD''@;'; put 'put ''MTkuMzQwMSAyNS42MDIzIDE4Ljc0MDEgMjUuMDAyNSAxOC4wMTAxIDI1LjAwMjVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLjU2MDEgMjcuMjJMMjAuNzgwMSA1LjU4QzIwLjIwMDEgNC41OSAxOS4xNjAxIDQgMTguMDAwMSA0QzE2Ljg0MDEgNCAxNS44MDAxIDQuNTkgMTUuMjIwMSA1LjU4''@;'; put 'put ''TDIuNDQwMDYgMjcuMjJDMS44NTAwNiAyOC4yMiAxLjg1MDA2IDI5LjQxIDIuNDQwMDYgMzAuNDFDMy4wMjAwNiAzMS40MSA0LjA3MDA2IDMyLjAxIDUuMjMwMDYgMzIuMDFIMzAuNzgwMUMzMS45NTAxIDMyLjAxIDMyLjk5MDEgMzEuNDEgMzMuNTcwMSAzMC40MUMzNC4xNTAxIDI5LjQxIDM0''@;'; put 'put ''LjE1MDEgMjguMjIgMzMuNTYwMSAyNy4yMlpNMTYuOTAwMSAxMUMxNi45MDAxIDEwLjM5IDE3LjM5MDEgOS45IDE4LjAwMDEgOS45QzE4LjYxMDEgOS45IDE5LjEwMDEgMTAuMzkgMTkuMTAwMSAxMVYyMkMxOS4xMDAxIDIyLjYxIDE4LjYxMDEgMjMuMSAxOC4wMDAxIDIzLjFDMTcuMzkwMSAy''@;'; put 'put ''My4xIDE2LjkwMDEgMjIuNjEgMTYuOTAwMSAyMlYxMVpNMTguMDAwMSAyNy43NkMxNy4yMTAxIDI3Ljc2IDE2LjU3MDEgMjcuMTIgMTYuNTcwMSAyNi4zM0MxNi41NzAxIDI1LjU0IDE3LjIxMDEgMjQuOSAxOC4wMDAxIDI0LjlDMTguNzkwMSAyNC45IDE5LjQzMDEgMjUuNTQgMTkuNDMwMSAy''@;'; put 'put ''Ni4zM0MxOS40MzAxIDI3LjEyIDE4Ljc5MDEgMjcuNzYgMTguMDAwMSAyNy43NloiLz4nfV0sQlVlPVsiY2lyY2xlIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQg''@;'; put 'put ''MzIgMTAuMjY4IDMyIDE4QzMyIDI1LjczMiAyNS43MzIgMzIgMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThaTTYgMThDNiAyNC42Mjc0IDExLjM3MjYgMzAgMTggMzBDMjEuMTgyNiAzMCAyNC4yMzQ4IDI4LjczNTcgMjYuNDg1MyAyNi40ODUzQzI4LjczNTcgMjQuMjM0OCAzMCAyMS4x''@;'; put 'put ''ODI2IDMwIDE4QzMwIDExLjM3MjYgMjQuNjI3NCA2IDE4IDZDMTEuMzcyNiA2IDYgMTEuMzcyNiA2IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA0QzEwLjI2OCA0IDQgMTAuMjY4IDQgMThDNCAyNS43MzIgMTAuMjY4IDMyIDE4IDMyQzI1LjczMiAzMiAzMiAyNS43MzIgMzIgMThDMzIg''@;'; put 'put ''MTAuMjY4IDI1LjczMiA0IDE4IDRaIi8+J31dLGpVZT1bImRvdC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMTFDMTkuMzg0NSAxMSAyMC43Mzc5IDExLjQxMDUgMjEuODg5IDEyLjE3OTdDMjMuMDQwMSAxMi45NDg5IDIzLjkzNzQgMTQuMDQyMSAyNC40NjcyIDE1LjMyMTJDMjQu''@;'; put 'put ''OTk3IDE2LjYwMDMgMjUuMTM1NiAxOC4wMDc4IDI0Ljg2NTUgMTkuMzY1NkMyNC41OTU0IDIwLjcyMzUgMjMuOTI4NyAyMS45NzA4IDIyLjk0OTggMjIuOTQ5OEMyMS45NzA4IDIzLjkyODcgMjAuNzIzNSAyNC41OTU0IDE5LjM2NTYgMjQuODY1NUMxOC4wMDc4IDI1LjEzNTYgMTYuNjAwMyAy''@;'; put 'put ''NC45OTcgMTUuMzIxMiAyNC40NjcyQzE0LjA0MjEgMjMuOTM3NCAxMi45NDg5IDIzLjA0MDEgMTIuMTc5NyAyMS44ODlDMTEuNDEwNSAyMC43Mzc5IDExIDE5LjM4NDUgMTEgMThDMTEgMTYuMTQzNSAxMS43Mzc1IDE0LjM2MyAxMy4wNTAzIDEzLjA1MDNDMTQuMzYzIDExLjczNzUgMTYuMTQz''@;'; put 'put ''NSAxMSAxOCAxMVoiLz48cGF0aCBkPSJNMTggMzRDMTQuODM1NSAzNCAxMS43NDIxIDMzLjA2MTYgOS4xMTA4OCAzMS4zMDM1QzYuNDc5NyAyOS41NDU0IDQuNDI4OTQgMjcuMDQ2NiAzLjIxNzkzIDI0LjEyMjlDMi4wMDY5MyAyMS4xOTkzIDEuNjkwMDggMTcuOTgyMyAyLjMwNzQ0IDE0Ljg3''@;'; put 'put ''ODZDMi45MjQ4MSAxMS43NzQ5IDQuNDQ4NjYgOC45MjM5NCA2LjY4NjMgNi42ODYzQzguOTIzOTQgNC40NDg2NiAxMS43NzQ5IDIuOTI0ODEgMTQuODc4NiAyLjMwNzQ0QzE3Ljk4MjMgMS42OTAwOCAyMS4xOTkzIDIuMDA2OTMgMjQuMTIyOSAzLjIxNzkzQzI3LjA0NjYgNC40Mjg5NCAyOS41''@;'; put 'put ''NDU0IDYuNDc5NyAzMS4zMDM1IDkuMTEwODhDMzMuMDYxNiAxMS43NDIxIDM0IDE0LjgzNTUgMzQgMThDMzQgMjIuMjQzNSAzMi4zMTQzIDI2LjMxMzEgMjkuMzEzNyAyOS4zMTM3QzI2LjMxMzEgMzIuMzE0MyAyMi4yNDM1IDM0IDE4IDM0Wk0xOCA0LjAwMDAxQzE1LjIzMTEgNC4wMDAwMSAx''@;'; put 'put ''Mi41MjQzIDQuODIxMDkgMTAuMjIyIDYuMzU5NDNDNy45MTk3NCA3Ljg5Nzc3IDYuMTI1MzIgMTAuMDg0MyA1LjA2NTY5IDEyLjY0MjRDNC4wMDYwNyAxNS4yMDA2IDMuNzI4ODIgMTguMDE1NSA0LjI2OTAxIDIwLjczMTNDNC44MDkyMSAyMy40NDcgNi4xNDI1OCAyNS45NDE2IDguMTAwNTEg''@;'; put 'put ''MjcuODk5NUMxMC4wNTg0IDI5Ljg1NzQgMTIuNTUzIDMxLjE5MDggMTUuMjY4NyAzMS43MzFDMTcuOTg0NSAzMi4yNzEyIDIwLjc5OTQgMzEuOTkzOSAyMy4zNTc2IDMwLjkzNDNDMjUuOTE1NyAyOS44NzQ3IDI4LjEwMjIgMjguMDgwMyAyOS42NDA2IDI1Ljc3OEMzMS4xNzg5IDIzLjQ3NTcg''@;'; put 'put ''MzIgMjAuNzY4OSAzMiAxOEMzMiAxNC4yODcgMzAuNTI1IDEwLjcyNiAyNy44OTk1IDguMTAwNTFDMjUuMjc0IDUuNDc1IDIxLjcxMyA0LjAwMDAxIDE4IDQuMDAwMDFaIi8+J31dO2Z1bmN0aW9uIGpLKG4sdD1WaSl7cmV0dXJuIG49bj8/elVlLFhpKChlLHIpPT57bGV0IGksYT0hMDtlLnN1''@;'; put 'put ''YnNjcmliZShJcihyLGM9Pntjb25zdCBtPXQoYyk7KGF8fCFuKGksbSkpJiYoYT0hMSxpPW0sci5uZXh0KGMpKX0pKX0pfWZ1bmN0aW9uIHpVZShuLHQpe3JldHVybiBuPT09dH1jbGFzcyBXVWUgZXh0ZW5kcyBMdHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCl9c2NoZWR1bGUodCxlPTApe3Jl''@;'; put 'put ''dHVybiB0aGlzfX1jb25zdCBXRj17c2V0SW50ZXJ2YWwobix0LC4uLmUpe2NvbnN0e2RlbGVnYXRlOnJ9PVdGO3JldHVybiByPy5zZXRJbnRlcnZhbD9yLnNldEludGVydmFsKG4sdCwuLi5lKTpzZXRJbnRlcnZhbChuLHQsLi4uZSl9LGNsZWFySW50ZXJ2YWwobil7Y29uc3R7ZGVsZWdhdGU6''@;'; put 'put ''dH09V0Y7cmV0dXJuKHQ/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIHpLIGV4dGVuZHMgV1Vle2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lLHRoaXMucGVuZGluZz0hMX1zY2hl''@;'; put 'put ''ZHVsZSh0LGU9MCl7dmFyIHI7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT10O2NvbnN0IGk9dGhpcy5pZCxhPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1pJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGEsaSxlKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMu''@;'; put 'put ''ZGVsYXk9ZSx0aGlzLmlkPW51bGwhPT0ocj10aGlzLmlkKSYmdm9pZCAwIT09cj9yOnRoaXMucmVxdWVzdEFzeW5jSWQoYSx0aGlzLmlkLGUpLHRoaXN9cmVxdWVzdEFzeW5jSWQodCxlLHI9MCl7cmV0dXJuIFdGLnNldEludGVydmFsKHQuZmx1c2guYmluZCh0LHRoaXMpLHIpfXJlY3ljbGVB''@;'; put 'put ''c3luY0lkKHQsZSxyPTApe2lmKG51bGwhPXImJnRoaXMuZGVsYXk9PT1yJiYhMT09PXRoaXMucGVuZGluZylyZXR1cm4gZTtudWxsIT1lJiZXRi5jbGVhckludGVydmFsKGUpfWV4ZWN1dGUodCxlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxs''@;'; put 'put ''ZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO2NvbnN0IHI9dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKHIpcmV0dXJuIHI7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4''@;'; put 'put ''ZWN1dGUodCxlKXtsZXQgaSxyPSExO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2goYSl7cj0hMCxpPWF8fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKHIpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxpfXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xv''@;'; put 'put ''c2VkKXtjb25zdHtpZDp0LHNjaGVkdWxlcjplfT10aGlzLHthY3Rpb25zOnJ9PWU7dGhpcy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlzLnBlbmRpbmc9ITEsQ3Iocix0aGlzKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSks''@;'; put 'put ''dGhpcy5kZWxheT1udWxsLHN1cGVyLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBVSz17bm93OigpPT4oVUsuZGVsZWdhdGV8fERhdGUpLm5vdygpLGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgelR7Y29uc3RydWN0b3IodCxlPXpULm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yPXQsdGhpcy5u''@;'; put 'put ''b3c9ZX1zY2hlZHVsZSh0LGU9MCxyKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLHQpLnNjaGVkdWxlKHIsZSl9fXpULm5vdz1VSy5ub3c7Y2xhc3MgV0sgZXh0ZW5kcyB6VHtjb25zdHJ1Y3Rvcih0LGU9elQubm93KXtzdXBlcih0LGUpLHRoaXMuYWN0aW9ucz1b''@;'; put 'put ''XSx0aGlzLl9hY3RpdmU9ITF9Zmx1c2godCl7Y29uc3R7YWN0aW9uczplfT10aGlzO2lmKHRoaXMuX2FjdGl2ZSlyZXR1cm4gdm9pZCBlLnB1c2godCk7bGV0IHI7dGhpcy5fYWN0aXZlPSEwO2Rve2lmKHI9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUodD1lLnNoaWZ0''@;'; put 'put ''KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxyKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgcn19fWNvbnN0IFpGPW5ldyBXSyh6SyksWlVlPVpGO2Z1bmN0aW9uIHR2KG4sdD1aRil7cmV0dXJuIFhpKChlLHIpPT57bGV0IGk9bnVsbCxhPW51bGwsYz1udWxsO2NvbnN0''@;'; put 'put ''IG09KCk9PntpZihpKXtpLnVuc3Vic2NyaWJlKCksaT1udWxsO2NvbnN0IFA9YTthPW51bGwsci5uZXh0KFApfX07ZnVuY3Rpb24gQygpe2NvbnN0IFA9YytuLFk9dC5ub3coKTtpZihZPFApcmV0dXJuIGk9dGhpcy5zY2hlZHVsZSh2b2lkIDAsUC1ZKSx2b2lkIHIuYWRkKGkpO20oKX1lLnN1''@;'; put 'put ''YnNjcmliZShJcihyLFA9PnthPVAsYz10Lm5vdygpLGl8fChpPXQuc2NoZWR1bGUoQyxuKSxyLmFkZChpKSl9LCgpPT57bSgpLHIuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57YT1pPW51bGx9KSl9KX1jb25zdCBZVWU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sR1VlPVsiYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwkVWU9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIE9mKG4sdCxlLHIpe2lmKFhyKGUpJiYocj1lLGU9dm9pZCAwKSxyKXJldHVybiBPZihuLHQsZSkucGlwZShnJChyKSk7Y29uc3RbaSxhXT1mdW5jdGlvbiBxVWUobil7cmV0dXJu''@;'; put 'put ''IFhyKG4uYWRkRXZlbnRMaXN0ZW5lcikmJlhyKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KG4pP0dVZS5tYXAoYz0+bT0+bltjXSh0LG0sZSkpOmZ1bmN0aW9uIEtVZShuKXtyZXR1cm4gWHIobi5hZGRMaXN0ZW5lcikmJlhyKG4ucmVtb3ZlTGlzdGVuZXIpfShuKT9ZVWUubWFwKFVmZShuLHQp''@;'; put 'put ''KTpmdW5jdGlvbiBYVWUobil7cmV0dXJuIFhyKG4ub24pJiZYcihuLm9mZil9KG4pPyRVZS5tYXAoVWZlKG4sdCkpOltdO2lmKCFpJiZmJChuKSlyZXR1cm4gdzEoYz0+T2YoYyx0LGUpKShHMShuKSk7aWYoIWkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTty''@;'; put 'put ''ZXR1cm4gbmV3IEZpKGM9Pntjb25zdCBtPSguLi5DKT0+Yy5uZXh0KDE8Qy5sZW5ndGg/QzpDWzBdKTtyZXR1cm4gaShtKSwoKT0+YShtKX0pfWZ1bmN0aW9uIFVmZShuLHQpe3JldHVybiBlPT5yPT5uW2VdKHQscil9Y2xhc3MgVVQgZXh0ZW5kcyB1cntjb25zdHJ1Y3Rvcih0PTEvMCxlPTEv''@;'; put 'put ''MCxyPVVLKXtzdXBlcigpLHRoaXMuX2J1ZmZlclNpemU9dCx0aGlzLl93aW5kb3dUaW1lPWUsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9cix0aGlzLl9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz1lPT09MS8wLHRoaXMuX2J1''@;'; put 'put ''ZmZlclNpemU9TWF0aC5tYXgoMSx0KSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4KDEsZSl9bmV4dCh0KXtjb25zdHtpc1N0b3BwZWQ6ZSxfYnVmZmVyOnIsX2luZmluaXRlVGltZVdpbmRvdzppLF90aW1lc3RhbXBQcm92aWRlcjphLF93aW5kb3dUaW1lOmN9PXRoaXM7ZXx8KHIucHVzaCh0''@;'; put 'put ''KSwhaSYmci5wdXNoKGEubm93KCkrYykpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KHQpfV9zdWJzY3JpYmUodCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtjb25zdCBlPXRoaXMuX2lubmVyU3Vic2NyaWJlKHQpLHtfaW5maW5pdGVUaW1lV2luZG93''@;'; put 'put ''OnIsX2J1ZmZlcjppfT10aGlzLGE9aS5zbGljZSgpO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGgmJiF0LmNsb3NlZDtjKz1yPzE6Mil0Lm5leHQoYVtjXSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksZX1fdHJpbUJ1ZmZlcigpe2NvbnN0e19idWZmZXJTaXplOnQsX3Rp''@;'; put 'put ''bWVzdGFtcFByb3ZpZGVyOmUsX2J1ZmZlcjpyLF9pbmZpbml0ZVRpbWVXaW5kb3c6aX09dGhpcyxhPShpPzE6MikqdDtpZih0PDEvMCYmYTxyLmxlbmd0aCYmci5zcGxpY2UoMCxyLmxlbmd0aC1hKSwhaSl7Y29uc3QgYz1lLm5vdygpO2xldCBtPTA7Zm9yKGxldCBDPTE7QzxyLmxlbmd0aCYm''@;'; put 'put ''cltDXTw9YztDKz0yKW09QzttJiZyLnNwbGljZSgwLG0rMSl9fX1mdW5jdGlvbiBaSyhuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2NvbnN0IHI9bmV3IEd0KHtuZXh0OigpPT57ci51bnN1YnNjcmliZSgpLG4oKX19KTtyZXR1cm4gRzEodCgu''@;'; put 'put ''Li5lKSkuc3Vic2NyaWJlKHIpfWZ1bmN0aW9uIFdmZShuLHQsZSl7bGV0IHIsaT0hMTtyZXR1cm4gbiYmIm9iamVjdCI9PXR5cGVvZiBuPyh7YnVmZmVyU2l6ZTpyPTEvMCx3aW5kb3dUaW1lOnQ9MS8wLHJlZkNvdW50Omk9ITEsc2NoZWR1bGVyOmV9PW4pOnI9bj8/MS8wLGZ1bmN0aW9uIEpV''@;'; put 'put ''ZShuPXt9KXtjb25zdHtjb25uZWN0b3I6dD0oKT0+bmV3IHVyLHJlc2V0T25FcnJvcjplPSEwLHJlc2V0T25Db21wbGV0ZTpyPSEwLHJlc2V0T25SZWZDb3VudFplcm86aT0hMH09bjtyZXR1cm4gYT0+e2xldCBjLG0sQyxQPTAsWT0hMSxKPSExO2NvbnN0IGNlPSgpPT57bT8udW5zdWJzY3Jp''@;'; put 'put ''YmUoKSxtPXZvaWQgMH0sZmU9KCk9PntjZSgpLGM9Qz12b2lkIDAsWT1KPSExfSxBZT0oKT0+e2NvbnN0IEhlPWM7ZmUoKSxIZT8udW5zdWJzY3JpYmUoKX07cmV0dXJuIFhpKChIZSxYZSk9PntQKyssIUomJiFZJiZjZSgpO2NvbnN0IHJ0PUM9Qz8/dCgpO1hlLmFkZCgoKT0+e1AtLSwwPT09''@;'; put 'put ''UCYmIUomJiFZJiYobT1aSyhBZSxpKSl9KSxydC5zdWJzY3JpYmUoWGUpLCFjJiZQPjAmJihjPW5ldyBHdCh7bmV4dDpkdD0+cnQubmV4dChkdCksZXJyb3I6ZHQ9PntKPSEwLGNlKCksbT1aSyhmZSxlLGR0KSxydC5lcnJvcihkdCl9LGNvbXBsZXRlOigpPT57WT0hMCxjZSgpLG09WksoZmUs''@;'; put 'put ''cikscnQuY29tcGxldGUoKX19KSxHMShIZSkuc3Vic2NyaWJlKGMpKX0pKGEpfX0oe2Nvbm5lY3RvcjooKT0+bmV3IFVUKHIsdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86aX0pfWZ1bmN0aW9uIFdUKC4uLm4pe2NvbnN0IHQ9aVQo''@;'; put 'put ''biksZT1mdW5jdGlvbiBSUmUobix0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHAkKG4pP24ucG9wKCk6dH0obiwxLzApLHI9bjtyZXR1cm4gci5sZW5ndGg/MT09PXIubGVuZ3RoP0cxKHJbMF0pOmx3KGUpKG8wKHIsdCkpOmMyfXZhciBJbz1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlN0YXRl''@;'; put 'put ''PTBdPSJTdGF0ZSIsbltuLlRyYW5zaXRpb249MV09IlRyYW5zaXRpb24iLG5bbi5TZXF1ZW5jZT0yXT0iU2VxdWVuY2UiLG5bbi5Hcm91cD0zXT0iR3JvdXAiLG5bbi5BbmltYXRlPTRdPSJBbmltYXRlIixuW24uS2V5ZnJhbWVzPTVdPSJLZXlmcmFtZXMiLG5bbi5TdHlsZT02XT0iU3R5bGUi''@;'; put 'put ''LG5bbi5UcmlnZ2VyPTddPSJUcmlnZ2VyIixuW24uUmVmZXJlbmNlPThdPSJSZWZlcmVuY2UiLG5bbi5BbmltYXRlQ2hpbGQ9OV09IkFuaW1hdGVDaGlsZCIsbltuLkFuaW1hdGVSZWY9MTBdPSJBbmltYXRlUmVmIixuW24uUXVlcnk9MTFdPSJRdWVyeSIsbltuLlN0YWdnZXI9MTJdPSJTdGFn''@;'; put 'put ''Z2VyIixufShJb3x8e30pO2NvbnN0IHQ1PSIqIjtmdW5jdGlvbiBnMihuLHQpe3JldHVybnt0eXBlOklvLlRyaWdnZXIsbmFtZTpuLGRlZmluaXRpb25zOnQsb3B0aW9uczp7fX19ZnVuY3Rpb24gWTAobix0PW51bGwpe3JldHVybnt0eXBlOklvLkFuaW1hdGUsc3R5bGVzOnQsdGltaW5nczpu''@;'; put 'put ''fX1mdW5jdGlvbiBDcyhuKXtyZXR1cm57dHlwZTpJby5TdHlsZSxzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gWUYobix0LGUpe3JldHVybnt0eXBlOklvLlN0YXRlLG5hbWU6bixzdHlsZXM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGVXZShuKXtyZXR1cm57dHlwZTpJby5LZXlmcmFt''@;'; put 'put ''ZXMsc3RlcHM6bn19ZnVuY3Rpb24gdXUobix0LGU9bnVsbCl7cmV0dXJue3R5cGU6SW8uVHJhbnNpdGlvbixleHByOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1jbGFzcyBaVHtfb25Eb25lRm5zPVtdO19vblN0YXJ0Rm5zPVtdO19vbkRlc3Ryb3lGbnM9W107X29yaWdpbmFsT25Eb25lRm5z''@;'; put 'put ''PVtdO19vcmlnaW5hbE9uU3RhcnRGbnM9W107X3N0YXJ0ZWQ9ITE7X2Rlc3Ryb3llZD0hMTtfZmluaXNoZWQ9ITE7X3Bvc2l0aW9uPTA7cGFyZW50UGxheWVyPW51bGw7dG90YWxUaW1lO2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMudG90YWxUaW1lPXQrZX1fb25GaW5pc2goKXt0aGlzLl9m''@;'; put 'put ''aW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5f''@;'; put 'put ''b3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5f''@;'; put 'put ''b25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0''@;'; put 'put ''Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lG''@;'; put 'put ''bnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZu''@;'; put 'put ''c31zZXRQb3NpdGlvbih0KXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT90KnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3Rh''@;'; put 'put ''cnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChyPT5yKCkpLGUubGVuZ3RoPTB9fWNsYXNzIFpmZXtfb25Eb25lRm5zPVtdO19vblN0YXJ0Rm5zPVtdO19maW5pc2hlZD0hMTtfc3RhcnRlZD0hMTtfZGVzdHJveWVkPSExO19vbkRlc3Ryb3lGbnM9W107''@;'; put 'put ''cGFyZW50UGxheWVyPW51bGw7dG90YWxUaW1lPTA7cGxheWVycztjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYXllcnM9dDtsZXQgZT0wLHI9MCxpPTA7Y29uc3QgYT10aGlzLnBsYXllcnMubGVuZ3RoOzA9PWE/cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVy''@;'; put 'put ''cy5mb3JFYWNoKGM9PntjLm9uRG9uZSgoKT0+eysrZT09YSYmdGhpcy5fb25GaW5pc2goKX0pLGMub25EZXN0cm95KCgpPT57KytyPT1hJiZ0aGlzLl9vbkRlc3Ryb3koKX0pLGMub25TdGFydCgoKT0+eysraT09YSYmdGhpcy5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBs''@;'; put 'put ''YXllcnMucmVkdWNlKChjLG0pPT5NYXRoLm1heChjLG0udG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJz''@;'; put 'put ''LmZvckVhY2godD0+dC5pbml0KCkpfW9uU3RhcnQodCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfV9vblN0YXJ0KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9u''@;'; put 'put ''ZSh0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxh''@;'; put 'put ''eWVycy5mb3JFYWNoKHQ9PnQucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucGF1c2UoKSl9cmVzdGFydCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucmVzdGFydCgpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9''@;'; put 'put ''PnQuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5m''@;'; put 'put ''b3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucmVzZXQoKSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7Y29uc3QgZT10KnRoaXMu''@;'; put 'put ''dG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKHI9Pntjb25zdCBpPXIudG90YWxUaW1lP01hdGgubWluKDEsZS9yLnRvdGFsVGltZSk6MTtyLnNldFBvc2l0aW9uKGkpfSl9Z2V0UG9zaXRpb24oKXtjb25zdCB0PXRoaXMucGxheWVycy5yZWR1Y2UoKGUscik9Pm51bGw9PT1lfHxyLnRv''@;'; put 'put ''dGFsVGltZT5lLnRvdGFsVGltZT9yOmUsbnVsbCk7cmV0dXJuIG51bGwhPXQ/dC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9Pnt0LmJlZm9yZURlc3Ryb3kmJnQuYmVmb3JlRGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKHQpe2NvbnN0''@;'; put 'put ''IGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2gocj0+cigpKSxlLmxlbmd0aD0wfX1sZXQgR0s7dHJ5e0dLPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7R0s9ITF9bGV0ICRLLFlUPSgoKT0+e2NsYXNzIG57''@;'; put 'put ''X3BsYXRmb3JtSWQ9Sm4oZGMpO2lzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP19sKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQ7RURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7VFJJ''@;'; put 'put ''REVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtCTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIUdLKSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQ7V0VCS0lUPXRoaXMu''@;'; put 'put ''aXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVDtJT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0''@;'; put 'put ''cmVhbSJpbiB3aW5kb3cpO0ZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtBTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQ7''@;'; put 'put ''U0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVQ7Y29uc3RydWN0b3IoKXt9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1cHJvdj11bih7dG9rZW46bixm''@;'; put 'put ''YWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIEtLKG4pe2lmKGZ1bmN0aW9uIHRXZSgpe2lmKG51bGw9PSRLKXtjb25zdCBuPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsOyRLPSEoIW58fCFuLmNyZWF0ZVNo''@;'; put 'put ''YWRvd1Jvb3QmJiFuLmF0dGFjaFNoYWRvdyl9cmV0dXJuICRLfSgpKXtjb25zdCB0PW4uZ2V0Um9vdE5vZGU/bi5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gdH1yZXR1cm4gbnVs''@;'; put 'put ''bH1mdW5jdGlvbiBHRihuKXtyZXR1cm4gbi5jb21wb3NlZFBhdGg/bi5jb21wb3NlZFBhdGgoKVswXTpuLnRhcmdldH1jb25zdCAkRj1uZXcgV2Vha01hcDtsZXQgWWZlPSgoKT0+e2NsYXNzIG57X2FwcFJlZjtfaW5qZWN0b3I9Sm4oSG8pO19lbnZpcm9ubWVudEluamVjdG9yPUpuKHVjKTts''@;'; put 'put ''b2FkKGUpe2NvbnN0IHI9dGhpcy5fYXBwUmVmPXRoaXMuX2FwcFJlZnx8dGhpcy5faW5qZWN0b3IuZ2V0KEVkKTtsZXQgaT0kRi5nZXQocik7aXx8KGk9e2xvYWRlcnM6bmV3IFNldCxyZWZzOltdfSwkRi5zZXQocixpKSxyLm9uRGVzdHJveSgoKT0+eyRGLmdldChyKT8ucmVmcy5mb3JFYWNo''@;'; put 'put ''KGE9PmEuZGVzdHJveSgpKSwkRi5kZWxldGUocil9KSksaS5sb2FkZXJzLmhhcyhlKXx8KGkubG9hZGVycy5hZGQoZSksaS5yZWZzLnB1c2goQ1AoZSx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yfSkpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIp''@;'; put 'put ''e3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCkscldlPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4p''@;'; put 'put ''fTtzdGF0aWMgXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxleHBvcnRBczpbImNka1Zpc3VhbGx5SGlkZGVuIl0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXt9LHN0eWxlczpbIi5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRl''@;'; put 'put ''cjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJh''@;'; put 'put ''bmNlOm5vbmU7bGVmdDowfVtkaXI9cnRsXSAuY2RrLXZpc3VhbGx5LWhpZGRlbntsZWZ0OmF1dG87cmlnaHQ6MH1cbiJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfXJldHVybiBufSkoKSxpV2U9KCgpPT57Y2xhc3MgbntfcGxhdGZvcm09Sm4oWVQpO2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7fWlzRGlzYWJsZWQoZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShlKXtyZXR1cm4gZnVuY3Rpb24gb1dlKG4pe3JldHVybiEhKG4ub2Zmc2V0V2lkdGh8fG4ub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2Ygbi5nZXRDbGllbnRSZWN0cyYm''@;'; put 'put ''bi5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KGUpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKGUpLnZpc2liaWxpdHl9aXNUYWJiYWJsZShlKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiExO2NvbnN0IHI9ZnVuY3Rpb24gYVdlKG4pe3RyeXtyZXR1cm4gbi5m''@;'; put 'put ''cmFtZUVsZW1lbnR9Y2F0Y2h7cmV0dXJuIG51bGx9fShmdW5jdGlvbiBwV2Uobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGUpKTtpZihyJiYoLTE9PT0kZmUocil8fCF0aGlzLmlzVmlzaWJsZShyKSkpcmV0dXJuITE7bGV0''@;'; put 'put ''IGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGE9JGZlKGUpO3JldHVybiBlLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1hOiEoImlmcmFtZSI9PT1pfHwib2JqZWN0Ij09PWl8fHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhZnVuY3Rp''@;'; put 'put ''b24gaFdlKG4pe2xldCB0PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlPSJpbnB1dCI9PT10JiZuLnR5cGU7cmV0dXJuInRleHQiPT09ZXx8InBhc3N3b3JkIj09PWV8fCJzZWxlY3QiPT09dHx8InRleHRhcmVhIj09PXR9KGUpKSYmKCJhdWRpbyI9PT1pPyEhZS5oYXNBdHRyaWJ1dGUoImNv''@;'; put 'put ''bnRyb2xzIikmJi0xIT09YToidmlkZW8iPT09aT8tMSE9PWEmJihudWxsIT09YXx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8ZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmUudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGUscil7cmV0dXJuIGZ1bmN0aW9uIGZXZShuKXtyZXR1cm4hZnVu''@;'; put 'put ''Y3Rpb24gbFdlKG4pe3JldHVybiBmdW5jdGlvbiB1V2Uobil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbiBzV2Uobil7bGV0IHQ9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9''@;'; put 'put ''PT10fHwic2VsZWN0Ij09PXR8fCJidXR0b24iPT09dHx8InRleHRhcmVhIj09PXR9KG4pfHxmdW5jdGlvbiBjV2Uobil7cmV0dXJuIGZ1bmN0aW9uIGRXZShuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhh''@;'; put 'put ''c0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fEdmZShuKSl9KGUpJiYhdGhpcy5pc0Rpc2FibGVkKGUpJiYocj8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3''@;'; put 'put ''NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtmdW5jdGlvbiBHZmUobil7aWYoIW4uaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT1uLnRhYkluZGV4KXJldHVybiExO2xldCB0PW4uZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIXR8fGlzTmFOKHBhcnNlSW50KHQsMTApKSl9ZnVuY3Rpb24gJGZlKG4pe2lmKCFHZmUobikpcmV0dXJuIG51bGw7Y29uc3QgdD1wYXJzZUludChuLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTih0KT8tMTp0fWNs''@;'; put 'put ''YXNzIGdXZXtfZWxlbWVudDtfY2hlY2tlcjtfbmdab25lO19kb2N1bWVudDtfaW5qZWN0b3I7X3N0YXJ0QW5jaG9yO19lbmRBbmNob3I7X2hhc0F0dGFjaGVkPSExO3N0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCk7ZW5kQW5jaG9yTGlzdGVu''@;'; put 'put ''ZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpO2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQodCl7dGhpcy5fZW5hYmxlZD10LHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJ''@;'; put 'put ''bmRleCh0LHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX2VuZEFuY2hvcikpfV9lbmFibGVkPSEwO2NvbnN0cnVjdG9yKHQsZSxyLGksYT0hMSxjKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1yLHRoaXMu''@;'; put 'put ''X2RvY3VtZW50PWksdGhpcy5faW5qZWN0b3I9YyxhfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1kZXN0cm95KCl7Y29uc3QgdD10aGlzLl9zdGFydEFuY2hvcixlPXRoaXMuX2VuZEFuY2hvcjt0JiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVy''@;'; put 'put ''KSx0LnJlbW92ZSgpKSxlJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lciksZS5yZW1vdmUoKSksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5jaG9yPW51bGwsdGhpcy5faGFzQXR0YWNoZWQ9ITF9YXR0YWNoQW5jaG9ycygpe3JldHVy''@;'; put 'put ''biEhdGhpcy5faGFzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlz''@;'; put 'put ''LnN0YXJ0QW5jaG9yTGlzdGVuZXIpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSl9KSx0aGlzLl9lbGVtZW50LnBhcmVu''@;'; put 'put ''dE5vZGUmJih0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX3N0YXJ0QW5jaG9yLHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fZW5kQW5jaG9yLHRoaXMuX2VsZW1lbnQubmV4dFNpYmxpbmcpLHRoaXMu''@;'; put 'put ''X2hhc0F0dGFjaGVkPSEwKSx0aGlzLl9oYXNBdHRhY2hlZCl9Zm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzSW5pdGlhbEVsZW1lbnQodCkpKX0pfWZvY3VzRmlyc3RUYWJi''@;'; put 'put ''YWJsZUVsZW1lbnRXaGVuUmVhZHkodCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmUodGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpKSl9KX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkodCl7cmV0dXJuIG5ldyBQcm9t''@;'; put 'put ''aXNlKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmUodGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQodCkpKX0pfV9nZXRSZWdpb25Cb3VuZGFyeSh0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtG''@;'; put 'put ''b2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0''@;'; put 'put ''aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KHQpe2NvbnN0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKGUpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGUpKXtjb25zdCByPXRo''@;'; put 'put ''aXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGUpO3JldHVybiByPy5mb2N1cyh0KSwhIXJ9cmV0dXJuIGUuZm9jdXModCksITB9cmV0dXJuIHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpe2NvbnN0IGU9dGhpcy5fZ2V0UmVn''@;'; put 'put ''aW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KXtjb25zdCBlPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''aGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtjb25zdCBlPXQuY2hpbGRyZW47Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2NvbnN0IGk9''@;'; put 'put ''ZVtyXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW3JdKTpudWxsO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJs''@;'; put 'put ''ZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2NvbnN0IGU9dC5jaGlsZHJlbjtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSl7Y29uc3QgaT1lW3JdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldExhc3RUYWJiYWJs''@;'; put 'put ''ZUVsZW1lbnQoZVtyXSk6bnVsbDtpZihpKXJldHVybiBpfXJldHVybiBudWxsfV9jcmVhdGVBbmNob3IoKXtjb25zdCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLHQpLHQuY2xhc3NM''@;'; put 'put ''aXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHR9X3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsZSl7dD9lLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgi''@;'; put 'put ''LCIwIik6ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyh0KXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgo''@;'; put 'put ''dCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKHQpe3RoaXMuX2luamVjdG9yP1ZnKHQse2luamVjdG9yOnRoaXMuX2luamVjdG9yfSk6c2V0VGltZW91dCh0KX19bGV0IFhLPSgoKT0+e2NsYXNzIG57X2NoZWNrZXI9Sm4oaVdlKTtfbmdab25lPUpuKEphKTtfZG9jdW1lbnQ9''@;'; put 'put ''Sm4oWHMpO19pbmplY3Rvcj1KbihIbyk7Y29uc3RydWN0b3IoKXtKbihZZmUpLmxvYWQocldlKX1jcmVhdGUoZSxyPSExKXtyZXR1cm4gbmV3IGdXZShlLHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LHIsdGhpcy5faW5qZWN0b3IpfXN0YXRpYyBcdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxLZmU9KCgpPT57Y2xhc3MgbntfZWxlbWVudFJlZj1Kbih6aSk7X2ZvY3VzVHJhcEZhY3Rv''@;'; put 'put ''cnk9Sm4oWEspO2ZvY3VzVHJhcDtfcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGw7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5mb2N1c1RyYXA/LmVuYWJsZWR8fCExfXNldCBlbmFibGVkKGUpe3RoaXMuZm9jdXNUcmFwJiYodGhpcy5mb2N1c1RyYXAuZW5hYmxlZD1lKX1hdXRvQ2Fw''@;'; put 'put ''dHVyZTtjb25zdHJ1Y3Rvcigpe0puKFlUKS5pc0Jyb3dzZXImJih0aGlzLmZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9jdXNUcmFwPy5kZXN0cm95KCksdGhpcy5f''@;'; put 'put ''cHJldmlvdXNseUZvY3VzZWRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCksdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNUcmFwPy5hdHRhY2hBbmNob3JzKCksdGhpcy5hdXRv''@;'; put 'put ''Q2FwdHVyZSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9bmdEb0NoZWNrKCl7dGhpcy5mb2N1c1RyYXAmJiF0aGlzLmZvY3VzVHJhcC5oYXNBdHRhY2hlZCgpJiZ0aGlzLmZvY3VzVHJhcC5hdHRhY2hBbmNob3JzKCl9bmdPbkNoYW5nZXMoZSl7Y29uc3Qgcj1lLmF1dG9DYXB0dXJlO3ImJiFyLmZp''@;'; put 'put ''cnN0Q2hhbmdlJiZ0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLmZvY3VzVHJhcD8uaGFzQXR0YWNoZWQoKSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9X2NhcHR1cmVGb2N1cygpe3RoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1mdW5jdGlvbiBuV2UoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8''@;'; put 'put ''InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtjb25zdCB0PW4uc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O2lmKHQ9PT1uKWJyZWFrO249dH1yZXR1cm4gbn0oKSx0aGlzLmZvY3VzVHJhcD8uZm9jdXNJbml0aWFsRWxlbWVu''@;'; put 'put ''dFdoZW5SZWFkeSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0saW5wdXRzOntlbmFibGVkOlsyLCJjZGtUcmFwRm9jdXMiLCJlbmFibGVk''@;'; put 'put ''IixZMV0sYXV0b0NhcHR1cmU6WzIsImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwiYXV0b0NhcHR1cmUiLFkxXX0sZXhwb3J0QXM6WyJjZGtUcmFwRm9jdXMiXSxmZWF0dXJlczpbV3RdfSl9cmV0dXJuIG59KSgpO2Z1bmN0aW9uIFhmZShuPTAsdCxlPVpVZSl7bGV0IHI9LTE7cmV0dXJuIG51''@;'; put 'put ''bGwhPXQmJihvZGUodCk/ZT10OnI9dCksbmV3IEZpKGk9PntsZXQgYT1mdW5jdGlvbiB5V2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obil9KG4pPytuLWUubm93KCk6bjthPDAmJihhPTApO2xldCBjPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtpLmNsb3Nl''@;'; put 'put ''ZHx8KGkubmV4dChjKyspLDA8PXI/dGhpcy5zY2hlZHVsZSh2b2lkIDAscik6aS5jb21wbGV0ZSgpKX0sYSl9KX1jb25zdCBHVD17c2NoZWR1bGUobil7bGV0IHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9Y2FuY2VsQW5pbWF0aW9uRnJhbWU7Y29uc3R7ZGVsZWdhdGU6cn09R1Q7ciYmKHQ9''@;'; put 'put ''ci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1yLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtjb25zdCBpPXQoYT0+e2U9dm9pZCAwLG4oYSl9KTtyZXR1cm4gbmV3IEx0KCgpPT5lPy4oaSkpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4ubil7Y29uc3R7ZGVsZWdhdGU6dH09R1Q7cmV0dXJuKHQ/''@;'; put 'put ''LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5uKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4ubil7Y29uc3R7ZGVsZWdhdGU6dH09R1Q7cmV0dXJuKHQ/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4ubil9LGRl''@;'; put 'put ''bGVnYXRlOnZvaWQgMH0scWZlPW5ldyBjbGFzcyB3V2UgZXh0ZW5kcyBXS3tmbHVzaCh0KXtsZXQgZTt0aGlzLl9hY3RpdmU9ITAsdD9lPXQuaWQ6KGU9dGhpcy5fc2NoZWR1bGVkLHRoaXMuX3NjaGVkdWxlZD12b2lkIDApO2NvbnN0e2FjdGlvbnM6cn09dGhpcztsZXQgaTt0PXR8fHIuc2hp''@;'; put 'put ''ZnQoKTtkb3tpZihpPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PXJbMF0pJiZ0LmlkPT09ZSYmci5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaSl7Zm9yKDsodD1yWzBdKSYmdC5pZD09PWUmJnIuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IGl9''@;'; put 'put ''fX0oY2xhc3MgYldlIGV4dGVuZHMgekt7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9cmVxdWVzdEFzeW5jSWQodCxlLHI9MCl7cmV0dXJuIG51bGwhPT1yJiZyPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLHIpOih0LmFjdGlvbnMu''@;'; put 'put ''cHVzaCh0aGlzKSx0Ll9zY2hlZHVsZWR8fCh0Ll9zY2hlZHVsZWQ9R1QucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50LmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQodCxlLHI9MCl7dmFyIGk7aWYobnVsbCE9cj9yPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xl''@;'; put 'put ''QXN5bmNJZCh0LGUscik7Y29uc3R7YWN0aW9uczphfT10O251bGwhPWUmJmU9PT10Ll9zY2hlZHVsZWQmJihudWxsPT09KGk9YVthLmxlbmd0aC0xXSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWQpIT09ZSYmKEdULmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuX3NjaGVkdWxlZD12b2lkIDAp''@;'; put 'put ''fX0pO2Z1bmN0aW9uIG52KG4sdD0wKXtyZXR1cm4gZnVuY3Rpb24gTVdlKG4pe3JldHVybiFpc05hTihwYXJzZUZsb2F0KG4pKSYmIWlzTmFOKE51bWJlcihuKSl9KG4pP051bWJlcihuKToyPT09YXJndW1lbnRzLmxlbmd0aD90OjB9ZnVuY3Rpb24gVDYobil7cmV0dXJuIG4gaW5zdGFuY2Vv''@;'; put 'put ''ZiB6aT9uLm5hdGl2ZUVsZW1lbnQ6bn1mdW5jdGlvbiBydihuLHQsZSxyLGkpe2NvbnN0IGE9cGFyc2VJbnQoZlAubWFqb3IpLGM9cGFyc2VJbnQoZlAubWlub3IpO3JldHVybiBhPjE5fHwxOT09PWEmJmM+MHx8MD09PWEmJjA9PT1jP24ubGlzdGVuKHQsZSxyLGkpOih0LmFkZEV2ZW50TGlz''@;'; put 'put ''dGVuZXIoZSxyLGkpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixpKX0pfWxldCBxSyx4V2U9MTtjb25zdCBLRj17fTtmdW5jdGlvbiBKZmUobil7cmV0dXJuIG4gaW4gS0YmJihkZWxldGUgS0Zbbl0sITApfWNvbnN0IEVXZT17c2V0SW1tZWRpYXRlKG4pe2NvbnN0IHQ9eFdlKys7''@;'; put 'put ''cmV0dXJuIEtGW3RdPSEwLHFLfHwocUs9UHJvbWlzZS5yZXNvbHZlKCkpLHFLLnRoZW4oKCk9PkpmZSh0KSYmbigpKSx0fSxjbGVhckltbWVkaWF0ZShuKXtKZmUobil9fSx7c2V0SW1tZWRpYXRlOlRXZSxjbGVhckltbWVkaWF0ZTpBV2V9PUVXZSxYRj17c2V0SW1tZWRpYXRlKC4uLm4pe2Nv''@;'; put 'put ''bnN0e2RlbGVnYXRlOnR9PVhGO3JldHVybih0Py5zZXRJbW1lZGlhdGV8fFRXZSkoLi4ubil9LGNsZWFySW1tZWRpYXRlKG4pe2NvbnN0e2RlbGVnYXRlOnR9PVhGO3JldHVybih0Py5jbGVhckltbWVkaWF0ZXx8QVdlKShuKX0sZGVsZWdhdGU6dm9pZCAwfSxJV2U9bmV3IGNsYXNzIERXZSBl''@;'; put 'put ''eHRlbmRzIFdLe2ZsdXNoKHQpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBlPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6cn09dGhpcztsZXQgaTt0PXR8fHIuc2hpZnQoKTtkb3tpZihpPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFr''@;'; put 'put ''fXdoaWxlKCh0PXJbMF0pJiZ0LmlkPT09ZSYmci5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaSl7Zm9yKDsodD1yWzBdKSYmdC5pZD09PWUmJnIuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IGl9fX0oY2xhc3Mga1dlIGV4dGVuZHMgekt7Y29uc3RydWN0b3IodCxlKXtzdXBl''@;'; put 'put ''cih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9cmVxdWVzdEFzeW5jSWQodCxlLHI9MCl7cmV0dXJuIG51bGwhPT1yJiZyPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLHIpOih0LmFjdGlvbnMucHVzaCh0aGlzKSx0Ll9zY2hlZHVsZWR8fCh0Ll9zY2hlZHVsZWQ9WEYuc2V0''@;'; put 'put ''SW1tZWRpYXRlKHQuZmx1c2guYmluZCh0LHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQodCxlLHI9MCl7dmFyIGk7aWYobnVsbCE9cj9yPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZCh0LGUscik7Y29uc3R7YWN0aW9uczphfT10O251bGwhPWUmJihudWxsPT09''@;'; put 'put ''KGk9YVthLmxlbmd0aC0xXSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaWQpIT09ZSYmKFhGLmNsZWFySW1tZWRpYXRlKGUpLHQuX3NjaGVkdWxlZD09PWUmJih0Ll9zY2hlZHVsZWQ9dm9pZCAwKSl9fSk7ZnVuY3Rpb24gSksobix0PVpGKXtyZXR1cm4gZnVuY3Rpb24gUldlKG4pe3JldHVybiBY''@;'; put 'put ''aSgodCxlKT0+e2xldCByPSExLGk9bnVsbCxhPW51bGwsYz0hMTtjb25zdCBtPSgpPT57aWYoYT8udW5zdWJzY3JpYmUoKSxhPW51bGwscil7cj0hMTtjb25zdCBQPWk7aT1udWxsLGUubmV4dChQKX1jJiZlLmNvbXBsZXRlKCl9LEM9KCk9PnthPW51bGwsYyYmZS5jb21wbGV0ZSgpfTt0LnN1''@;'; put 'put ''YnNjcmliZShJcihlLFA9PntyPSEwLGk9UCxhfHxHMShuKFApKS5zdWJzY3JpYmUoYT1JcihlLG0sQykpfSwoKT0+e2M9ITAsKCFyfHwhYXx8YS5jbG9zZWQpJiZlLmNvbXBsZXRlKCl9KSl9KX0oKCk9PlhmZShuLHQpKX1jb25zdCBPV2U9bmV3IHdyKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVk''@;'; put 'put ''SW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gUFdlKCl7cmV0dXJuIEpuKFhzKX19KSxGV2U9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwt''@;'; put 'put ''fF8pL2k7bGV0IEl3PSgoKT0+e2NsYXNzIG57dmFsdWU9Imx0ciI7Y2hhbmdlPW5ldyBZcjtjb25zdHJ1Y3Rvcigpe2NvbnN0IGU9Sm4oT1dlLHtvcHRpb25hbDohMH0pO2UmJih0aGlzLnZhbHVlPWZ1bmN0aW9uIEhXZShuKXtjb25zdCB0PW4/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJh''@;'; put 'put ''dXRvIj09PXQmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP0ZXZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT10PyJydGwiOiJsdHIifSgoZS5ib2R5P2UuYm9keS5kaXI6bnVsbCl8fChlLmRvY3VtZW50RWxlbWVudD9lLmRv''@;'; put 'put ''Y3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZh''@;'; put 'put ''Yyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTt2YXIgZzQ9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5OT1JNQUw9MF09Ik5PUk1BTCIsbltuLk5FR0FURUQ9MV09Ik5FR0FURUQiLG5bbi5JTlZFUlRFRD0yXT0iSU5WRVJURUQiLG59KGc0fHx7fSk7bGV0IHFGLGl2O2Z1bmN0aW9u''@;'; put 'put ''ICRUKCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiBnNC5OT1JNQUw7aWYobnVsbD09cUYpe2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1uLnN0eWxlO24uZGlyPSJydGwiLHQud2lkdGg9IjFweCIsdC5vdmVyZmxvdz0iYXV0''@;'; put 'put ''byIsdC52aXNpYmlsaXR5PSJoaWRkZW4iLHQucG9pbnRlckV2ZW50cz0ibm9uZSIsdC5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikscj1lLnN0eWxlO3Iud2lkdGg9IjJweCIsci5oZWlnaHQ9IjFweCIsbi5hcHBlbmRDaGlsZChlKSxk''@;'; put 'put ''b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLHFGPWc0Lk5PUk1BTCwwPT09bi5zY3JvbGxMZWZ0JiYobi5zY3JvbGxMZWZ0PTEscUY9MD09PW4uc2Nyb2xsTGVmdD9nNC5ORUdBVEVEOmc0LklOVkVSVEVEKSxuLnJlbW92ZSgpfXJldHVybiBxRn1jbGFzcyBWV2V7fWNsYXNzIGpXZSBleHRl''@;'; put 'put ''bmRzIFZXZXtfZGF0YTtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIHJUKHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6Z28odGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319dmFyIEtUPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uUkVQTEFDRUQ9MF09''@;'; put 'put ''IlJFUExBQ0VEIixuW24uSU5TRVJURUQ9MV09IklOU0VSVEVEIixuW24uTU9WRUQ9Ml09Ik1PVkVEIixuW24uUkVNT1ZFRD0zXT0iUkVNT1ZFRCIsbn0oS1R8fHt9KTtjb25zdCBRSz1uZXcgd3IoIl9WaWV3UmVwZWF0ZXIiKTtjbGFzcyBRZmV7dmlld0NhY2hlU2l6ZT0yMDtfdmlld0NhY2hl''@;'; put 'put ''PVtdO2FwcGx5Q2hhbmdlcyh0LGUscixpLGEpe3QuZm9yRWFjaE9wZXJhdGlvbigoYyxtLEMpPT57bGV0IFAsWTtudWxsPT1jLnByZXZpb3VzSW5kZXg/KFA9dGhpcy5faW5zZXJ0VmlldygoKT0+cihjLG0sQyksQyxlLGkoYykpLFk9UD9LVC5JTlNFUlRFRDpLVC5SRVBMQUNFRCk6bnVsbD09''@;'; put 'put ''Qz8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3KG0sZSksWT1LVC5SRU1PVkVEKTooUD10aGlzLl9tb3ZlVmlldyhtLEMsZSxpKGMpKSxZPUtULk1PVkVEKSxhJiZhKHtjb250ZXh0OlA/LmNvbnRleHQsb3BlcmF0aW9uOlkscmVjb3JkOmN9KX0pfWRldGFjaCgpe2Zvcihjb25zdCB0IG9mIHRo''@;'; put 'put ''aXMuX3ZpZXdDYWNoZSl0LmRlc3Ryb3koKTt0aGlzLl92aWV3Q2FjaGU9W119X2luc2VydFZpZXcodCxlLHIsaSl7Y29uc3QgYT10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUscik7aWYoYSlyZXR1cm4gdm9pZChhLmNvbnRleHQuJGltcGxpY2l0PWkpO2NvbnN0IGM9dCgpO3JldHVybiBy''@;'; put 'put ''LmNyZWF0ZUVtYmVkZGVkVmlldyhjLnRlbXBsYXRlUmVmLGMuY29udGV4dCxjLmluZGV4KX1fZGV0YWNoQW5kQ2FjaGVWaWV3KHQsZSl7Y29uc3Qgcj1lLmRldGFjaCh0KTt0aGlzLl9tYXliZUNhY2hlVmlldyhyLGUpfV9tb3ZlVmlldyh0LGUscixpKXtjb25zdCBhPXIuZ2V0KHQpO3JldHVy''@;'; put 'put ''biByLm1vdmUoYSxlKSxhLmNvbnRleHQuJGltcGxpY2l0PWksYX1fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2NvbnN0IHI9ZS5pbmRleE9mKHQpOy0xPT09cj90LmRl''@;'; put 'put ''c3Ryb3koKTplLnJlbW92ZShyKX19X2luc2VydFZpZXdGcm9tQ2FjaGUodCxlKXtjb25zdCByPXRoaXMuX3ZpZXdDYWNoZS5wb3AoKTtyZXR1cm4gciYmZS5pbnNlcnQocix0KSxyfHxudWxsfX1jb25zdCB6V2U9WyJjb250ZW50V3JhcHBlciJdLFVXZT1bIioiXSxlM2U9bmV3IHdyKCJWSVJU''@;'; put 'put ''VUFMX1NDUk9MTF9TVFJBVEVHWSIpO2NsYXNzIFdXZXtfc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgdXI7c2Nyb2xsZWRJbmRleENoYW5nZT10aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLnBpcGUoaksoKSk7X3ZpZXdwb3J0PW51bGw7X2l0ZW1TaXplO19taW5CdWZmZXJQeDtfbWF4QnVmZmVy''@;'; put 'put ''UHg7Y29uc3RydWN0b3IodCxlLHIpe3RoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1yfWF0dGFjaCh0KXt0aGlzLl92aWV3cG9ydD10LHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9''@;'; put 'put ''ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodCxlLHIpe3RoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1yLHRoaXMuX3VwZGF0''@;'; put 'put ''ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRhTGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5k''@;'; put 'put ''ZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJlZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleCh0LGUpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zY3JvbGxUb09mZnNldCh0KnRoaXMuX2l0ZW1TaXplLGUpfV91cGRhdGVUb3RhbENvbnRlbnRT''@;'; put 'put ''aXplKCl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47Y29uc3QgdD10aGlz''@;'; put 'put ''Ll92aWV3cG9ydC5nZXRSZW5kZXJlZFJhbmdlKCksZT17c3RhcnQ6dC5zdGFydCxlbmQ6dC5lbmR9LHI9dGhpcy5fdmlld3BvcnQuZ2V0Vmlld3BvcnRTaXplKCksaT10aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCk7bGV0IGE9dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNl''@;'; put 'put ''dCgpLGM9dGhpcy5faXRlbVNpemU+MD9hL3RoaXMuX2l0ZW1TaXplOjA7aWYoZS5lbmQ+aSl7Y29uc3QgQz1NYXRoLmNlaWwoci90aGlzLl9pdGVtU2l6ZSksUD1NYXRoLm1heCgwLE1hdGgubWluKGMsaS1DKSk7YyE9UCYmKGM9UCxhPVAqdGhpcy5faXRlbVNpemUsZS5zdGFydD1NYXRoLmZs''@;'; put 'put ''b29yKGMpKSxlLmVuZD1NYXRoLm1heCgwLE1hdGgubWluKGksZS5zdGFydCtDKSl9Y29uc3QgbT1hLWUuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYobTx0aGlzLl9taW5CdWZmZXJQeCYmMCE9ZS5zdGFydCl7Y29uc3QgQz1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LW0pL3RoaXMuX2l0''@;'; put 'put ''ZW1TaXplKTtlLnN0YXJ0PU1hdGgubWF4KDAsZS5zdGFydC1DKSxlLmVuZD1NYXRoLm1pbihpLE1hdGguY2VpbChjKyhyK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7Y29uc3QgQz1lLmVuZCp0aGlzLl9pdGVtU2l6ZS0oYStyKTtpZihDPHRoaXMuX21pbkJ1ZmZl''@;'; put 'put ''clB4JiZlLmVuZCE9aSl7Y29uc3QgUD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LUMpL3RoaXMuX2l0ZW1TaXplKTtQPjAmJihlLmVuZD1NYXRoLm1pbihpLGUuZW5kK1ApLGUuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGMtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNp''@;'; put 'put ''emUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoZSksdGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmUuc3RhcnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKGMpKX19bGV0IEpGPSgoKT0+''@;'; put 'put ''e2NsYXNzIG57X25nWm9uZT1KbihKYSk7X3BsYXRmb3JtPUpuKFlUKTtfcmVuZGVyZXI9Sm4oSDMpLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCk7X2NsZWFudXBHbG9iYWxMaXN0ZW5lcjtjb25zdHJ1Y3Rvcigpe31fc2Nyb2xsZWQ9bmV3IHVyO19zY3JvbGxlZENvdW50PTA7c2Nyb2xsQ29u''@;'; put 'put ''dGFpbmVycz1uZXcgTWFwO3JlZ2lzdGVyKGUpe3RoaXMuc2Nyb2xsQ29udGFpbmVycy5oYXMoZSl8fHRoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQoZSxlLmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dChlKSkpfWRlcmVnaXN0ZXIoZSl7Y29uc3Qg''@;'; put 'put ''cj10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGUpO3ImJihyLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZShlKSl9c2Nyb2xsZWQoZT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgRmkocj0+e3RoaXMuX2NsZWFudXBHbG9iYWxMaXN0''@;'; put 'put ''ZW5lcnx8KHRoaXMuX2NsZWFudXBHbG9iYWxMaXN0ZW5lcj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX3JlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLCJzY3JvbGwiLCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKSk7Y29uc3QgaT1lPjA/dGhpcy5fc2Nyb2xs''@;'; put 'put ''ZWQucGlwZShKSyhlKSkuc3Vic2NyaWJlKHIpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShyKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aS51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHwodGhpcy5fY2xlYW51cEds''@;'; put 'put ''b2JhbExpc3RlbmVyPy4oKSx0aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXI9dm9pZCAwKX19KTpnbygpfW5nT25EZXN0cm95KCl7dGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyPy4oKSx0aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXI9dm9pZCAwLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5m''@;'; put 'put ''b3JFYWNoKChlLHIpPT50aGlzLmRlcmVnaXN0ZXIocikpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChlLHIpe2NvbnN0IGk9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQocikucGlwZShyYyhhPT4hYXx8''@;'; put 'put ''aS5pbmRleE9mKGEpPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2NvbnN0IHI9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChpLGEpPT57dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGUpJiZyLnB1c2goYSl9KSxyfV9zY3JvbGxh''@;'; put 'put ''YmxlQ29udGFpbnNFbGVtZW50KGUscil7bGV0IGk9VDYociksYT1lLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKGk9PWEpcmV0dXJuITB9d2hpbGUoaT1pLnBhcmVudEVsZW1lbnQpO3JldHVybiExfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhy''@;'; put 'put ''fHxuKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSx0M2U9KCgpPT57Y2xhc3MgbntlbGVtZW50UmVmPUpuKHppKTtzY3JvbGxEaXNwYXRjaGVyPUpuKEpGKTtuZ1pvbmU9Sm4oSmEpO2Rp''@;'; put 'put ''cj1KbihJdyx7b3B0aW9uYWw6ITB9KTtfc2Nyb2xsRWxlbWVudD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtfZGVzdHJveWVkPW5ldyB1cjtfcmVuZGVyZXI9Sm4oVG8pO19jbGVhbnVwU2Nyb2xsO19lbGVtZW50U2Nyb2xsZWQ9bmV3IHVyO2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0''@;'; put 'put ''KCl7dGhpcy5fY2xlYW51cFNjcm9sbD10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuX3Njcm9sbEVsZW1lbnQsInNjcm9sbCIsZT0+dGhpcy5fZWxlbWVudFNjcm9sbGVkLm5leHQoZSkpKSx0aGlzLnNjcm9sbERpc3BhdGNoZXIu''@;'; put 'put ''cmVnaXN0ZXIodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jbGVhbnVwU2Nyb2xsPy4oKSx0aGlzLl9lbGVtZW50U2Nyb2xsZWQuY29tcGxldGUoKSx0aGlzLnNjcm9sbERpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5j''@;'; put 'put ''b21wbGV0ZSgpfWVsZW1lbnRTY3JvbGxlZCgpe3JldHVybiB0aGlzLl9lbGVtZW50U2Nyb2xsZWR9Z2V0RWxlbWVudFJlZigpe3JldHVybiB0aGlzLmVsZW1lbnRSZWZ9c2Nyb2xsVG8oZSl7Y29uc3Qgcj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuZGlyJiYicnRsIj09''@;'; put 'put ''dGhpcy5kaXIudmFsdWU7bnVsbD09ZS5sZWZ0JiYoZS5sZWZ0PWk/ZS5lbmQ6ZS5zdGFydCksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9aT9lLnN0YXJ0OmUuZW5kKSxudWxsIT1lLmJvdHRvbSYmKGUudG9wPXIuc2Nyb2xsSGVpZ2h0LXIuY2xpZW50SGVpZ2h0LWUuYm90dG9tKSxpJiYkVCgp''@;'; put 'put ''IT1nNC5OT1JNQUw/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9ci5zY3JvbGxXaWR0aC1yLmNsaWVudFdpZHRoLWUubGVmdCksJFQoKT09ZzQuSU5WRVJURUQ/ZS5sZWZ0PWUucmlnaHQ6JFQoKT09ZzQuTkVHQVRFRCYmKGUubGVmdD1lLnJpZ2h0Py1lLnJpZ2h0OmUucmlnaHQpKTpudWxsIT1l''@;'; put 'put ''LnJpZ2h0JiYoZS5sZWZ0PXIuc2Nyb2xsV2lkdGgtci5jbGllbnRXaWR0aC1lLnJpZ2h0KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKX1fYXBwbHlTY3JvbGxUb09wdGlvbnMoZSl7Y29uc3Qgcj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDshZnVuY3Rpb24gTldlKCl7aWYo''@;'; put 'put ''bnVsbD09aXYpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiBpdj0hMSxpdjtpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKWl2PSEwO2Vs''@;'; put 'put ''c2V7Y29uc3Qgbj1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbztpdj0hIW4mJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChuLnRvU3RyaW5nKCkpfX1yZXR1cm4gaXZ9KCk/KG51bGwhPWUudG9wJiYoci5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKHIuc2Nyb2xs''@;'; put 'put ''TGVmdD1lLmxlZnQpKTpyLnNjcm9sbFRvKGUpfW1lYXN1cmVTY3JvbGxPZmZzZXQoZSl7Y29uc3Qgcj0ibGVmdCIsaT0icmlnaHQiLGE9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PWUpcmV0dXJuIGEuc2Nyb2xsVG9wO2lmKCJib3R0b20iPT1lKXJldHVybiBhLnNj''@;'; put 'put ''cm9sbEhlaWdodC1hLmNsaWVudEhlaWdodC1hLnNjcm9sbFRvcDtjb25zdCBjPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPWM/aTpyOiJlbmQiPT1lJiYoZT1jP3I6aSksYyYmJFQoKT09ZzQuSU5WRVJURUQ/ZT09cj9hLnNjcm9sbFdpZHRoLWEu''@;'; put 'put ''Y2xpZW50V2lkdGgtYS5zY3JvbGxMZWZ0OmEuc2Nyb2xsTGVmdDpjJiYkVCgpPT1nNC5ORUdBVEVEP2U9PXI/YS5zY3JvbGxMZWZ0K2Euc2Nyb2xsV2lkdGgtYS5jbGllbnRXaWR0aDotYS5zY3JvbGxMZWZ0OmU9PXI/YS5zY3JvbGxMZWZ0OmEuc2Nyb2xsV2lkdGgtYS5jbGllbnRXaWR0aC1h''@;'; put 'put ''LnNjcm9sbExlZnR9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSl9cmV0dXJuIG59KSgpLFFG''@;'; put 'put ''PSgoKT0+e2NsYXNzIG57X3BsYXRmb3JtPUpuKFlUKTtfbGlzdGVuZXJzO192aWV3cG9ydFNpemU7X2NoYW5nZT1uZXcgdXI7X2RvY3VtZW50PUpuKFhzLHtvcHRpb25hbDohMH0pO2NvbnN0cnVjdG9yKCl7Y29uc3QgZT1KbihKYSkscj1KbihIMykuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxs''@;'; put 'put ''KTtlLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtjb25zdCBpPWE9PnRoaXMuX2NoYW5nZS5uZXh0KGEpO3RoaXMuX2xpc3RlbmVycz1bci5saXN0ZW4oIndpbmRvdyIsInJlc2l6ZSIsaSksci5saXN0ZW4oIndpbmRvdyIsIm9yaWVudGF0aW9u''@;'; put 'put ''Y2hhbmdlIixpKV19dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fbGlzdGVuZXJzPy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmll''@;'; put 'put ''d3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtjb25zdCBlPXt3aWR0aDp0aGlzLl92aWV3cG9ydFNpemUud2lkdGgsaGVpZ2h0OnRoaXMuX3ZpZXdwb3J0U2l6ZS5oZWlnaHR9O3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCh0aGlzLl92aWV3cG9ydFNpemU9''@;'; put 'put ''bnVsbCksZX1nZXRWaWV3cG9ydFJlY3QoKXtjb25zdCBlPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHt3aWR0aDpyLGhlaWdodDppfT10aGlzLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybnt0b3A6ZS50b3AsbGVmdDplLmxlZnQsYm90dG9tOmUudG9wK2kscmlnaHQ6ZS5sZWZ0''@;'; put 'put ''K3IsaGVpZ2h0Omksd2lkdGg6cn19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07Y29uc3QgZT10aGlzLl9kb2N1bWVudCxyPXRoaXMuX2dldFdpbmRvdygpLGk9ZS5kb2N1bWVudEVsZW1lbnQsYT1p''@;'; put 'put ''LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LWEudG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxyLnNjcm9sbFl8fGkuc2Nyb2xsVG9wfHwwLGxlZnQ6LWEubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fHIuc2Nyb2xsWHx8aS5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0''@;'; put 'put ''dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZShKSyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7Y29uc3QgZT10aGlzLl9nZXRXaW5kb3coKTt0aGlzLl92aWV3cG9ydFNp''@;'; put 'put ''emU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDplLmlubmVyV2lkdGgsaGVpZ2h0OmUuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpu''@;'; put 'put ''LGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7Y29uc3QgbjNlPW5ldyB3cigiVklSVFVBTF9TQ1JPTExBQkxFIik7bGV0IHIzZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdDNle2NvbnN0cnVjdG9yKCl7c3VwZXIoKX1tZWFzdXJlVmlld3BvcnRT''@;'; put 'put ''aXplKGUpe2NvbnN0IHI9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09ZT9yLmNsaWVudFdpZHRoOnIuY2xpZW50SGVpZ2h0fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7''@;'; put 'put ''dHlwZTpuLGZlYXR1cmVzOltJYV19KX1yZXR1cm4gbn0pKCk7Y29uc3QgJFdlPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU8InUiP3FmZTpJV2U7bGV0IFJ3PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyByM2V7ZWxlbWVudFJlZj1Kbih6aSk7X2NoYW5nZURldGVjdG9yUmVmPUpuKEZzKTtf''@;'; put 'put ''c2Nyb2xsU3RyYXRlZ3k9Sm4oZTNlLHtvcHRpb25hbDohMH0pO3Njcm9sbGFibGU9Sm4objNlLHtvcHRpb25hbDohMH0pO19wbGF0Zm9ybT1KbihZVCk7X2RldGFjaGVkU3ViamVjdD1uZXcgdXI7X3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyB1cjtnZXQgb3JpZW50YXRpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fb3JpZW50YXRpb259c2V0IG9yaWVudGF0aW9uKGUpe3RoaXMuX29yaWVudGF0aW9uIT09ZSYmKHRoaXMuX29yaWVudGF0aW9uPWUsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpKX1fb3JpZW50YXRpb249InZlcnRpY2FsIjthcHBlbmRPbmx5PSExO3Njcm9sbGVkSW5kZXhDaGFu''@;'; put 'put ''Z2U9bmV3IEZpKGU9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKHI9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMubmdab25lLnJ1bigoKT0+ZS5uZXh0KHIpKSkpKTtfY29udGVudFdyYXBwZXI7cmVuZGVyZWRSYW5nZVN0cmVhbT10''@;'; put 'put ''aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdDtfdG90YWxDb250ZW50U2l6ZT0wO190b3RhbENvbnRlbnRXaWR0aD0iIjtfdG90YWxDb250ZW50SGVpZ2h0PSIiO19yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm07X3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9O19kYXRhTGVuZ3RoPTA7X3Zp''@;'; put 'put ''ZXdwb3J0U2l6ZT0wO19mb3JPZjtfcmVuZGVyZWRDb250ZW50T2Zmc2V0PTA7X3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMTtfaXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExO19ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtfdmlld3BvcnRDaGFuZ2VzPUx0LkVNUFRZ''@;'; put 'put ''O19pbmplY3Rvcj1KbihIbyk7X2lzRGVzdHJveWVkPSExO2NvbnN0cnVjdG9yKCl7c3VwZXIoKTtjb25zdCBlPUpuKFFGKTt0aGlzLl92aWV3cG9ydENoYW5nZXM9ZS5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0''@;'; put 'put ''aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfW5nT25Jbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5zY3JvbGxhYmxlPT09dGhpcyYmc3VwZXIubmdPbklu''@;'; put 'put ''aXQoKSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5zY3JvbGxhYmxlLmVsZW1lbnRTY3JvbGxlZCgpLnBp''@;'; put 'put ''cGUoa2YobnVsbCksSksoMCwkV2UpLCQxKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50U2Nyb2xsZWQoKSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCks''@;'; put 'put ''dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKSx0aGlzLl9pc0Rlc3Ryb3llZD0hMCxzdXBlci5u''@;'; put 'put ''Z09uRGVzdHJveSgpfWF0dGFjaChlKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Zvck9mPWUsdGhpcy5fZm9yT2YuZGF0YVN0cmVhbS5waXBlKCQxKHRoaXMuX2RldGFjaGVkU3ViamVjdCkpLnN1YnNjcmliZShyPT57Y29uc3QgaT1yLmxlbmd0aDtpIT09dGhp''@;'; put 'put ''cy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9aSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1n''@;'; put 'put ''ZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxP''@;'; put 'put ''ZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxj''@;'; put 'put ''dWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbiBHV2Uobix0KXtyZXR1cm4gbi5zdGFydD09dC5zdGFydCYmbi5lbmQ9PXQuZW5kfSkodGhpcy5fcmVuZGVyZWRSYW5nZSxlKXx8KHRoaXMuYXBw''@;'; put 'put ''ZW5kT25seSYmKGU9e3N0YXJ0OjAsZW5kOk1hdGgubWF4KHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kLGUuZW5kKX0pLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0Lm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZT1lKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT50aGlzLl9z''@;'; put 'put ''Y3JvbGxTdHJhdGVneS5vbkNvbnRlbnRSZW5kZXJlZCgpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVuZGVyZWRDb250''@;'; put 'put ''ZW50T2Zmc2V0KGUscj0idG8tc3RhcnQiKXtlPXRoaXMuYXBwZW5kT25seSYmInRvLXN0YXJ0Ij09PXI/MDplO2NvbnN0IGE9Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLGM9YT8iWCI6IlkiO2xldCBDPWB0cmFuc2xhdGUke2N9KCR7TnVtYmVyKChhJiZ0aGlzLmRpciYmInJ0bCI9''@;'; put 'put ''PXRoaXMuZGlyLnZhbHVlPy0xOjEpKmUpfXB4KWA7dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PWUsInRvLWVuZCI9PT1yJiYoQys9YCB0cmFuc2xhdGUke2N9KC0xMDAlKWAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSEwKSx0aGlzLl9yZW5kZXJlZENvbnRl''@;'; put 'put ''bnRUcmFuc2Zvcm0hPUMmJih0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm09Qyx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT57dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPyh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQtPXRoaXMubWVh''@;'; put 'put ''c3VyZVJlbmRlcmVkQ29udGVudFNpemUoKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KSk6dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5kZXJlZE9mZnNl''@;'; put 'put ''dENoYW5nZWQoKX0pKX1zY3JvbGxUb09mZnNldChlLHI9ImF1dG8iKXtjb25zdCBpPXtiZWhhdmlvcjpyfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2kuc3RhcnQ9ZTppLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhpKX1zY3JvbGxUb0luZGV4KGUscj0iYXV0byIp''@;'; put 'put ''e3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxyKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCByO3JldHVybiByPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9pPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KGkpOmk9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xs''@;'; put 'put ''T2Zmc2V0KGkpLE1hdGgubWF4KDAscihlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCByO2NvbnN0IGk9ImxlZnQiLGE9InJpZ2h0IixjPSJy''@;'; put 'put ''dGwiPT10aGlzLmRpcj8udmFsdWU7cj0ic3RhcnQiPT1lP2M/YTppOiJlbmQiPT1lP2M/aTphOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7Y29uc3QgbT10aGlzLnNjcm9sbGFibGUubWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxP''@;'; put 'put ''ZmZzZXQocik7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3JdLW19bWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKXtjb25zdCBlPXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwi''@;'; put 'put ''PT09dGhpcy5vcmllbnRhdGlvbj9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUoZSl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUoZSx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXplKCl7dGhpcy5f''@;'; put 'put ''bWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLnNjcm9sbGFibGUubWVhc3VyZVZpZXdwb3J0U2l6ZSh0aGlzLm9yaWVudGF0aW9uKX1fbWFy''@;'; put 'put ''a0NoYW5nZURldGVjdGlvbk5lZWRlZChlKXtlJiZ0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKGUpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigo''@;'; put 'put ''KT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSkpfV9kb0NoYW5nZURldGVjdGlvbigpe3RoaXMuX2lzRGVzdHJveWVkfHx0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlz''@;'; put 'put ''Ll9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0sVmcoKCk9Pnt0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITE7Y29uc3QgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9y''@;'; put 'put ''dW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IoY29uc3QgciBvZiBlKXIoKX0se2luamVjdG9yOnRoaXMuX2luamVjdG9yfSl9KX1fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpe3RoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyIiOmAke3Ro''@;'; put 'put ''aXMuX3RvdGFsQ29udGVudFNpemV9cHhgLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGA6IiJ9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0''@;'; put 'put ''aWMgXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24ocixpKXtpZigxJnImJldhKHpXZSw3KSwyJnIpe2xldCBhO2RpKGE9aGkoKSkmJihpLl9jb250ZW50V3JhcHBlcj1hLmZpcnN0KX19LGhv''@;'; put 'put ''c3RBdHRyczpbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsyJnImJmJyKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsImhvcml6b250YWwiPT09aS5vcmllbnRhdGlvbikoImNk''@;'; put 'put ''ay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsImhvcml6b250YWwiIT09aS5vcmllbnRhdGlvbil9LGlucHV0czp7b3JpZW50YXRpb246Im9yaWVudGF0aW9uIixhcHBlbmRPbmx5OlsyLCJhcHBlbmRPbmx5IiwiYXBwZW5kT25seSIsWTFdfSxvdXRwdXRzOntzY3JvbGxl''@;'; put 'put ''ZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6W3NhKFt7cHJvdmlkZTp0M2UsdXNlRmFjdG9yeTooZSxyKT0+ZXx8cixkZXBzOltbbmV3IGgzLG5ldyB1XyhuM2UpXSxuXX1dKSxJYV0sbmdDb250ZW50U2VsZWN0b3JzOlVXZSxkZWNsczo0LHZhcnM6NCxjb25z''@;'; put 'put ''dHM6W1siY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtc3BhY2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYobmEoKSxyZSgwLCJkaXYiLDEsMCksQnIoMiksaWUoKSxWdCgz''@;'; put 'put ''LCJkaXYiLDIpKSwyJnImJihhZSgzKSxUZCgid2lkdGgiLGkuX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixpLl90b3RhbENvbnRlbnRIZWlnaHQpKX0sc3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpzdHJpY3R9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDow''@;'; put 'put ''O2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1o''@;'; put 'put ''ZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmly''@;'; put 'put ''dHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZp''@;'; put 'put ''cnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxl''@;'; put 'put ''ZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0''@;'; put 'put ''aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0''@;'; put 'put ''dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVh''@;'; put 'put ''bC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5j''@;'; put 'put ''ZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9XG4iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0''@;'; put 'put ''aW9uOjB9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gaTNlKG4sdCxlKXtpZighZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7Y29uc3QgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PW4/InN0YXJ0Ij09PXQ/aS5sZWZ0OmkucmlnaHQ6InN0''@;'; put 'put ''YXJ0Ij09PXQ/aS50b3A6aS5ib3R0b219bGV0IGVIPSgoKT0+e2NsYXNzIG57X3ZpZXdDb250YWluZXJSZWY9Sm4oTm4pO190ZW1wbGF0ZT1KbihBbCk7X2RpZmZlcnM9Sm4ocDYpO192aWV3UmVwZWF0ZXI9Sm4oUUspO192aWV3cG9ydD1KbihSdyx7c2tpcFNlbGY6ITB9KTt2aWV3Q2hhbmdl''@;'; put 'put ''PW5ldyB1cjtfZGF0YVNvdXJjZUNoYW5nZXM9bmV3IHVyO2dldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoZSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWUsZnVuY3Rpb24gQldlKG4pe3JldHVybiBuJiYiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2Ygbi5jb25uZWN0JiYhKG4gaW5zdGFuY2VvZiB5JCl9KGUpP3RoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQoZSk6dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChuZXcgaldlKHJUKGUpP2U6QXJyYXkuZnJvbShlfHxbXSkpKX1fY2RrVmlydHVhbEZvck9mO2dldCBj''@;'; put 'put ''ZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoZSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnk9ZT8ocixpKT0+ZShyKyh0aGlzLl9yZW5kZXJlZFJhbmdl''@;'; put 'put ''P3RoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCksaSk6dm9pZCAwfV9jZGtWaXJ0dWFsRm9yVHJhY2tCeTtzZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKGUpe2UmJih0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT1lKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVT''@;'; put 'put ''aXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoZSl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemU9bnYoZSl9ZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKGtm''@;'; put 'put ''KG51bGwpLGZ1bmN0aW9uIExXZSgpe3JldHVybiBYaSgobix0KT0+e2xldCBlLHI9ITE7bi5zdWJzY3JpYmUoSXIodCxpPT57Y29uc3QgYT1lO2U9aSxyJiZ0Lm5leHQoW2EsaV0pLHI9ITB9KSl9KX0oKSxEZCgoW2Uscl0pPT50aGlzLl9jaGFuZ2VEYXRhU291cmNlKGUscikpLFdmZSgxKSk7''@;'; put 'put ''X2RpZmZlcj1udWxsO19kYXRhO19yZW5kZXJlZEl0ZW1zO19yZW5kZXJlZFJhbmdlO19uZWVkc1VwZGF0ZT0hMTtfZGVzdHJveWVkPW5ldyB1cjtjb25zdHJ1Y3Rvcigpe2NvbnN0IGU9Sm4oSmEpO3RoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUocj0+e3RoaXMuX2RhdGE9cix0aGlzLl9vblJl''@;'; put 'put ''bmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKCQxKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1yLHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZlLnJ1bigoKT0+dGhp''@;'; put 'put ''cy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9bWVhc3VyZVJhbmdlU2l6ZShlLHIpe2lmKGUuc3RhcnQ+PWUuZW5kKXJldHVybiAwO2NvbnN0IGk9ZS5zdGFydC10''@;'; put 'put ''aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LGE9ZS5lbmQtZS5zdGFydDtsZXQgYyxtO2ZvcihsZXQgQz0wO0M8YTtDKyspe2NvbnN0IFA9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoQytpKTtpZihQJiZQLnJvb3ROb2Rlcy5sZW5ndGgpe2M9bT1QLnJvb3ROb2Rlc1swXTticmVha319Zm9y''@;'; put 'put ''KGxldCBDPWEtMTtDPi0xO0MtLSl7Y29uc3QgUD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChDK2kpO2lmKFAmJlAucm9vdE5vZGVzLmxlbmd0aCl7bT1QLnJvb3ROb2Rlc1tQLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBjJiZtP2kzZShyLCJlbmQiLG0pLWkzZShyLCJz''@;'; put 'put ''dGFydCIsYyk6MH1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXImJnRoaXMuX25lZWRzVXBkYXRlKXtjb25zdCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2U/dGhpcy5fYXBwbHlDaGFuZ2VzKGUpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1Vw''@;'; put 'put ''ZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4''@;'; put 'put ''dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25SZW5kZXJlZERhdGFDaGFuZ2UoKXt0aGlzLl9yZW5kZXJlZFJhbmdlJiYodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3Rh''@;'; put 'put ''cnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChlLHIpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoZSxy''@;'; put 'put ''KTpyKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGUscil7cmV0dXJuIGUmJmUuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxyP3IuY29ubmVjdCh0aGlzKTpnbygpfV91cGRhdGVDb250ZXh0KCl7Y29uc3QgZT10aGlzLl9kYXRhLmxlbmd0''@;'; put 'put ''aDtsZXQgcj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO3ItLTspe2NvbnN0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQocik7aS5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrcixpLmNvbnRleHQuY291bnQ9ZSx0aGlzLl91cGRhdGVDb21w''@;'; put 'put ''dXRlZENvbnRleHRQcm9wZXJ0aWVzKGkuY29udGV4dCksaS5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5nZXMoZSl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyhlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKGEsYyxtKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyhhLG0p''@;'; put 'put ''LGE9PmEuaXRlbSksZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoYT0+e3RoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGEuY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD1hLml0ZW19KTtjb25zdCByPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYu''@;'; put 'put ''bGVuZ3RoO2Zvcig7aS0tOyl7Y29uc3QgYT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChpKTthLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtpLGEuY29udGV4dC5jb3VudD1yLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoYS5jb250ZXh0''@;'; put 'put ''KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZSl7ZS5maXJzdD0wPT09ZS5pbmRleCxlLmxhc3Q9ZS5pbmRleD09PWUuY291bnQtMSxlLmV2ZW49ZS5pbmRleCUyPT0wLGUub2RkPSFlLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoZSxyKXtyZXR1cm57dGVtcGxhdGVSZWY6''@;'; put 'put ''dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmUuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5fY2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4OnJ9fXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1''@;'; put 'put ''YXJkKGUscil7cmV0dXJuITB9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1ZpcnR1YWxGb3IiLCIiLCJjZGtWaXJ0dWFsRm9yT2YiLCIiXV0saW5wdXRzOntjZGtWaXJ0''@;'; put 'put ''dWFsRm9yT2Y6ImNka1ZpcnR1YWxGb3JPZiIsY2RrVmlydHVhbEZvclRyYWNrQnk6ImNka1ZpcnR1YWxGb3JUcmFja0J5IixjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSIsY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOiJjZGtWaXJ0dWFsRm9yVGVt''@;'; put 'put ''cGxhdGVDYWNoZVNpemUifSxmZWF0dXJlczpbc2EoW3twcm92aWRlOlFLLHVzZUNsYXNzOlFmZX1dKV19KX1yZXR1cm4gbn0pKCksS1dlPSgoKT0+e2NsYXNzIG57c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBl''@;'; put 'put ''Om59KTtzdGF0aWMgXHUwMjc1aW5qPXpuKHt9KX1yZXR1cm4gbn0pKCk7Y29uc3QgZVg9e307bGV0IFhXZT0oKCk9PntjbGFzcyBue19hcHBJZD1Kbih5Zik7Z2V0SWQoZSl7cmV0dXJuIm5nIiE9PXRoaXMuX2FwcElkJiYoZSs9dGhpcy5fYXBwSWQpLGVYLmhhc093blByb3BlcnR5KGUpfHwo''@;'; put 'put ''ZVhbZV09MCksYCR7ZX0ke2VYW2VdKyt9YH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24g''@;'; put 'put ''YTNlKG4pe2NvbnN0IHQ9bi5jbG9uZU5vZGUoITApLGU9dC5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikscj1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspZVtpXS5yZW1vdmVBdHRyaWJ1dGUoImlkIik7''@;'; put 'put ''cmV0dXJuImNhbnZhcyI9PT1yP2wzZShuLHQpOigiaW5wdXQiPT09cnx8InNlbGVjdCI9PT1yfHwidGV4dGFyZWEiPT09cikmJnMzZShuLHQpLG8zZSgiY2FudmFzIixuLHQsbDNlKSxvM2UoImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IixuLHQsczNlKSx0fWZ1bmN0aW9uIG8zZShuLHQsZSxy''@;'; put 'put ''KXtjb25zdCBpPXQucXVlcnlTZWxlY3RvckFsbChuKTtpZihpLmxlbmd0aCl7Y29uc3QgYT1lLnF1ZXJ5U2VsZWN0b3JBbGwobik7Zm9yKGxldCBjPTA7YzxpLmxlbmd0aDtjKyspcihpW2NdLGFbY10pfX1sZXQgSldlPTA7ZnVuY3Rpb24gczNlKG4sdCl7ImZpbGUiIT09dC50eXBlJiYodC52''@;'; put 'put ''YWx1ZT1uLnZhbHVlKSwicmFkaW8iPT09dC50eXBlJiZ0Lm5hbWUmJih0Lm5hbWU9YG1hdC1jbG9uZS0ke3QubmFtZX0tJHtKV2UrK31gKX1mdW5jdGlvbiBsM2Uobix0KXtjb25zdCBlPXQuZ2V0Q29udGV4dCgiMmQiKTtpZihlKXRyeXtlLmRyYXdJbWFnZShuLDAsMCl9Y2F0Y2h7fX1mdW5j''@;'; put 'put ''dGlvbiB0WChuKXtjb25zdCB0PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDp0LnRvcCxyaWdodDp0LnJpZ2h0LGJvdHRvbTp0LmJvdHRvbSxsZWZ0OnQubGVmdCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCx4OnQueCx5OnQueX19ZnVuY3Rpb24gblgobix0LGUp''@;'; put 'put ''e2NvbnN0e3RvcDpyLGJvdHRvbTppLGxlZnQ6YSxyaWdodDpjfT1uO3JldHVybiBlPj1yJiZlPD1pJiZ0Pj1hJiZ0PD1jfWZ1bmN0aW9uIFhUKG4sdCxlKXtuLnRvcCs9dCxuLmJvdHRvbT1uLnRvcCtuLmhlaWdodCxuLmxlZnQrPWUsbi5yaWdodD1uLmxlZnQrbi53aWR0aH1mdW5jdGlvbiBj''@;'; put 'put ''M2Uobix0LGUscil7Y29uc3R7dG9wOmkscmlnaHQ6YSxib3R0b206YyxsZWZ0Om0sd2lkdGg6QyxoZWlnaHQ6UH09bixZPUMqdCxKPVAqdDtyZXR1cm4gcj5pLUomJnI8YytKJiZlPm0tWSYmZTxhK1l9Y2xhc3MgdTNle19kb2N1bWVudDtwb3NpdGlvbnM9bmV3IE1hcDtjb25zdHJ1Y3Rvcih0''@;'; put 'put ''KXt0aGlzLl9kb2N1bWVudD10fWNsZWFyKCl7dGhpcy5wb3NpdGlvbnMuY2xlYXIoKX1jYWNoZSh0KXt0aGlzLmNsZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX0pLHQuZm9yRWFj''@;'; put 'put ''aChlPT57dGhpcy5wb3NpdGlvbnMuc2V0KGUse3Njcm9sbFBvc2l0aW9uOnt0b3A6ZS5zY3JvbGxUb3AsbGVmdDplLnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6dFgoZSl9KX0pfWhhbmRsZVNjcm9sbCh0KXtjb25zdCBlPUdGKHQpLHI9dGhpcy5wb3NpdGlvbnMuZ2V0KGUpO2lmKCFyKXJldHVy''@;'; put 'put ''biBudWxsO2NvbnN0IGk9ci5zY3JvbGxQb3NpdGlvbjtsZXQgYSxjO2lmKGU9PT10aGlzLl9kb2N1bWVudCl7Y29uc3QgUD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTthPVAudG9wLGM9UC5sZWZ0fWVsc2UgYT1lLnNjcm9sbFRvcCxjPWUuc2Nyb2xsTGVmdDtjb25zdCBtPWku''@;'; put 'put ''dG9wLWEsQz1pLmxlZnQtYztyZXR1cm4gdGhpcy5wb3NpdGlvbnMuZm9yRWFjaCgoUCxZKT0+e1AuY2xpZW50UmVjdCYmZSE9PVkmJmUuY29udGFpbnMoWSkmJlhUKFAuY2xpZW50UmVjdCxtLEMpfSksaS50b3A9YSxpLmxlZnQ9Yyx7dG9wOm0sbGVmdDpDfX1nZXRWaWV3cG9ydFNjcm9sbFBv''@;'; put 'put ''c2l0aW9uKCl7cmV0dXJue3RvcDp3aW5kb3cuc2Nyb2xsWSxsZWZ0OndpbmRvdy5zY3JvbGxYfX19ZnVuY3Rpb24gZDNlKG4sdCl7Y29uc3QgZT1uLnJvb3ROb2RlcztpZigxPT09ZS5sZW5ndGgmJmVbMF0ubm9kZVR5cGU9PT10LkVMRU1FTlRfTk9ERSlyZXR1cm4gZVswXTtjb25zdCByPXQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuZm9yRWFjaChpPT5yLmFwcGVuZENoaWxkKGkpKSxyfWZ1bmN0aW9uIHJYKG4sdCxlKXtmb3IobGV0IHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHIpKXtjb25zdCBpPXRbcl07aT9uLnNldFByb3BlcnR5KHIsaSxlPy5oYXMocik/Imlt''@;'; put 'put ''cG9ydGFudCI6IiIpOm4ucmVtb3ZlUHJvcGVydHkocil9cmV0dXJuIG59ZnVuY3Rpb24gTHcobix0KXtjb25zdCBlPXQ/IiI6Im5vbmUiO3JYKG4uc3R5bGUseyJ0b3VjaC1hY3Rpb24iOnQ/IiI6Im5vbmUiLCItd2Via2l0LXVzZXItZHJhZyI6dD8iIjoibm9uZSIsIi13ZWJraXQtdGFwLWhp''@;'; put 'put ''Z2hsaWdodC1jb2xvciI6dD8iIjoidHJhbnNwYXJlbnQiLCJ1c2VyLXNlbGVjdCI6ZSwiLW1zLXVzZXItc2VsZWN0IjplLCItd2Via2l0LXVzZXItc2VsZWN0IjplLCItbW96LXVzZXItc2VsZWN0IjplfSl9ZnVuY3Rpb24gaDNlKG4sdCxlKXtyWChuLnN0eWxlLHtwb3NpdGlvbjp0PyIiOiJm''@;'; put 'put ''aXhlZCIsdG9wOnQ/IiI6IjAiLG9wYWNpdHk6dD8iIjoiMCIsbGVmdDp0PyIiOiItOTk5ZW0ifSxlKX1mdW5jdGlvbiB0SChuLHQpe3JldHVybiB0JiYibm9uZSIhPXQ/bisiICIrdDpufWZ1bmN0aW9uIGYzZShuLHQpe24uc3R5bGUud2lkdGg9YCR7dC53aWR0aH1weGAsbi5zdHlsZS5oZWln''@;'; put 'put ''aHQ9YCR7dC5oZWlnaHR9cHhgLG4uc3R5bGUudHJhbnNmb3JtPW5IKHQubGVmdCx0LnRvcCl9ZnVuY3Rpb24gbkgobix0KXtyZXR1cm5gdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKG4pfXB4LCAke01hdGgucm91bmQodCl9cHgsIDApYH1mdW5jdGlvbiBwM2Uobil7Y29uc3QgdD1uLnRvTG93''@;'; put 'put ''ZXJDYXNlKCkuaW5kZXhPZigibXMiKT4tMT8xOjFlMztyZXR1cm4gcGFyc2VGbG9hdChuKSp0fWZ1bmN0aW9uIGlYKG4sdCl7cmV0dXJuIG4uZ2V0UHJvcGVydHlWYWx1ZSh0KS5zcGxpdCgiLCIpLm1hcChyPT5yLnRyaW0oKSl9Y29uc3QgZVplPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFz''@;'; put 'put ''cyB0WmV7X2RvY3VtZW50O19yb290RWxlbWVudDtfZGlyZWN0aW9uO19pbml0aWFsRG9tUmVjdDtfcHJldmlld1RlbXBsYXRlO19wcmV2aWV3Q2xhc3M7X3BpY2t1cFBvc2l0aW9uT25QYWdlO19pbml0aWFsVHJhbnNmb3JtO196SW5kZXg7X3JlbmRlcmVyO19wcmV2aWV3RW1iZWRkZWRWaWV3''@;'; put 'put ''O19wcmV2aWV3O2dldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuX3ByZXZpZXd9Y29uc3RydWN0b3IodCxlLHIsaSxhLGMsbSxDLFAsWSl7dGhpcy5fZG9jdW1lbnQ9dCx0aGlzLl9yb290RWxlbWVudD1lLHRoaXMuX2RpcmVjdGlvbj1yLHRoaXMuX2luaXRpYWxEb21SZWN0PWksdGhpcy5fcHJl''@;'; put 'put ''dmlld1RlbXBsYXRlPWEsdGhpcy5fcHJldmlld0NsYXNzPWMsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9bSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPUMsdGhpcy5fekluZGV4PVAsdGhpcy5fcmVuZGVyZXI9WX1hdHRhY2godCl7dGhpcy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3''@;'; put 'put ''KCksdC5hcHBlbmRDaGlsZCh0aGlzLl9wcmV2aWV3KSxnM2UodGhpcy5fcHJldmlldykmJnRoaXMuX3ByZXZpZXcuc2hvd1BvcG92ZXIoKX1kZXN0cm95KCl7dGhpcy5fcHJldmlldy5yZW1vdmUoKSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz10''@;'; put 'put ''aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PW51bGx9c2V0VHJhbnNmb3JtKHQpe3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPXR9Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9YWRkQ2xhc3ModCl7dGhpcy5f''@;'; put 'put ''cHJldmlldy5jbGFzc0xpc3QuYWRkKHQpfWdldFRyYW5zaXRpb25EdXJhdGlvbigpe3JldHVybiBmdW5jdGlvbiBRV2Uobil7Y29uc3QgdD1nZXRDb21wdXRlZFN0eWxlKG4pLGU9aVgodCwidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLHI9ZS5maW5kKG09PiJ0cmFuc2Zvcm0iPT09bXx8ImFsbCI9''@;'; put 'put ''PT1tKTtpZighcilyZXR1cm4gMDtjb25zdCBpPWUuaW5kZXhPZihyKSxhPWlYKHQsInRyYW5zaXRpb24tZHVyYXRpb24iKSxjPWlYKHQsInRyYW5zaXRpb24tZGVsYXkiKTtyZXR1cm4gcDNlKGFbaV0pK3AzZShjW2ldKX0odGhpcy5fcHJldmlldyl9YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5fcHJldmlldyx0LGUpfV9jcmVhdGVQcmV2aWV3KCl7Y29uc3QgdD10aGlzLl9wcmV2aWV3VGVtcGxhdGUsZT10aGlzLl9wcmV2aWV3Q2xhc3Mscj10P3QudGVtcGxhdGU6bnVsbDtsZXQgaTtpZihyJiZ0KXtjb25zdCBhPXQubWF0Y2hT''@;'; put 'put ''aXplP3RoaXMuX2luaXRpYWxEb21SZWN0Om51bGwsYz10LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHIsdC5jb250ZXh0KTtjLmRldGVjdENoYW5nZXMoKSxpPWQzZShjLHRoaXMuX2RvY3VtZW50KSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PWMsdC5tYXRjaFNpemU/ZjNl''@;'; put 'put ''KGksYSk6aS5zdHlsZS50cmFuc2Zvcm09bkgodGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KX1lbHNlIGk9YTNlKHRoaXMuX3Jvb3RFbGVtZW50KSxmM2UoaSx0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5faW5pdGlhbFRyYW5zZm9y''@;'; put 'put ''bSYmKGkuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pO3JldHVybiByWChpLnN0eWxlLHsicG9pbnRlci1ldmVudHMiOiJub25lIixtYXJnaW46ZzNlKGkpPyIwIGF1dG8gMCAwIjoiMCIscG9zaXRpb246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4Ijp0''@;'; put 'put ''aGlzLl96SW5kZXgrIiJ9LGVaZSksTHcoaSwhMSksaS5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wcmV2aWV3IiksaS5zZXRBdHRyaWJ1dGUoInBvcG92ZXIiLCJtYW51YWwiKSxpLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLl9kaXJlY3Rpb24pLGUmJihBcnJheS5pc0FycmF5KGUpP2UuZm9y''@;'; put 'put ''RWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpOmkuY2xhc3NMaXN0LmFkZChlKSksaX19ZnVuY3Rpb24gZzNlKG4pe3JldHVybiJzaG93UG9wb3ZlciJpbiBufWNvbnN0IG5aZT17cGFzc2l2ZTohMH0sbTNlPXtwYXNzaXZlOiExfSxyWmU9e3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0sdjNlPW5l''@;'; put 'put ''dyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBhWmV7X2NvbmZpZztfZG9jdW1lbnQ7X25nWm9uZTtfdmlld3BvcnRSdWxlcjtfZHJhZ0Ryb3BSZWdpc3RyeTtfcmVuZGVyZXI7X3Jvb3RFbGVtZW50Q2xlYW51cHM7X2NsZWFudXBTaGFkb3dSb290U2VsZWN0U3RhcnQ7X3ByZXZpZXc7X3ByZXZp''@;'; put 'put ''ZXdDb250YWluZXI7X3BsYWNlaG9sZGVyUmVmO19wbGFjZWhvbGRlcjtfcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ7X3BpY2t1cFBvc2l0aW9uT25QYWdlO19hbmNob3I7X3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9O19hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9O19pbml0aWFsVHJhbnNm''@;'; put 'put ''b3JtO19oYXNTdGFydGVkRHJhZ2dpbmc9ZGgoITEpO19oYXNNb3ZlZDtfaW5pdGlhbENvbnRhaW5lcjtfaW5pdGlhbEluZGV4O19wYXJlbnRQb3NpdGlvbnM7X21vdmVFdmVudHM9bmV3IHVyO19wb2ludGVyRGlyZWN0aW9uRGVsdGE7X3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNo''@;'; put 'put ''YW5nZTtfbGFzdEtub3duUG9pbnRlclBvc2l0aW9uO19yb290RWxlbWVudDtfb3duZXJTVkdFbGVtZW50O19yb290RWxlbWVudFRhcEhpZ2hsaWdodDtfcG9pbnRlck1vdmVTdWJzY3JpcHRpb249THQuRU1QVFk7X3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1MdC5FTVBUWTtfc2Nyb2xsU3Vic2Ny''@;'; put 'put ''aXB0aW9uPUx0LkVNUFRZO19yZXNpemVTdWJzY3JpcHRpb249THQuRU1QVFk7X2xhc3RUb3VjaEV2ZW50VGltZTtfZHJhZ1N0YXJ0VGltZTtfYm91bmRhcnlFbGVtZW50PW51bGw7X25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9ITA7X2luaXRpYWxEb21SZWN0O19wcmV2aWV3UmVjdDtfYm91''@;'; put 'put ''bmRhcnlSZWN0O19wcmV2aWV3VGVtcGxhdGU7X3BsYWNlaG9sZGVyVGVtcGxhdGU7X2hhbmRsZXM9W107X2Rpc2FibGVkSGFuZGxlcz1uZXcgU2V0O19kcm9wQ29udGFpbmVyO19kaXJlY3Rpb249Imx0ciI7X3BhcmVudERyYWdSZWY7X2NhY2hlZFNoYWRvd1Jvb3Q7bG9ja0F4aXM7ZHJhZ1N0''@;'; put 'put ''YXJ0RGVsYXk9MDtwcmV2aWV3Q2xhc3M7c2NhbGU9MTtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQodCl7dCE9PXRoaXMuX2Rpc2FibGVkJiYodGhp''@;'; put 'put ''cy5fZGlzYWJsZWQ9dCx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGU9Pkx3KGUsdCkpKX1fZGlzYWJsZWQ9ITE7YmVmb3JlU3RhcnRlZD1uZXcgdXI7c3RhcnRlZD1uZXcgdXI7cmVsZWFzZWQ9bmV3IHVyO2VuZGVkPW5ldyB1cjtl''@;'; put 'put ''bnRlcmVkPW5ldyB1cjtleGl0ZWQ9bmV3IHVyO2Ryb3BwZWQ9bmV3IHVyO21vdmVkPXRoaXMuX21vdmVFdmVudHM7ZGF0YTtjb25zdHJhaW5Qb3NpdGlvbjtjb25zdHJ1Y3Rvcih0LGUscixpLGEsYyxtKXt0aGlzLl9jb25maWc9ZSx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX25nWm9uZT1pLHRo''@;'; put 'put ''aXMuX3ZpZXdwb3J0UnVsZXI9YSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWMsdGhpcy5fcmVuZGVyZXI9bSx0aGlzLndpdGhSb290RWxlbWVudCh0KS53aXRoUGFyZW50KGUucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyB1M2UociksYy5yZWdpc3RlckRy''@;'; put 'put ''YWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dpbmcoKT90aGlzLmdldFBsYWNlaG9s''@;'; put 'put ''ZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyh0KXt0aGlzLl9oYW5kbGVzPXQubWFwKHI9PlQ2KHIpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2gocj0+THcocix0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2Nv''@;'; put 'put ''bnN0IGU9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2gocj0+e3RoaXMuX2hhbmRsZXMuaW5kZXhPZihyKT4tMSYmZS5hZGQocil9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9ZSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUodCl7cmV0dXJuIHRoaXMuX3ByZXZp''@;'; put 'put ''ZXdUZW1wbGF0ZT10LHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUodCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9dCx0aGlzfXdpdGhSb290RWxlbWVudCh0KXtjb25zdCBlPVQ2KHQpO3JldHVybiBlIT09dGhpcy5fcm9vdEVsZW1lbnQmJih0aGlzLl9yZW1vdmVSb290''@;'; put 'put ''RWxlbWVudExpc3RlbmVycygpLHRoaXMuX3Jvb3RFbGVtZW50Q2xlYW51cHM9dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5bcnYodGhpcy5fcmVuZGVyZXIsZSwibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixtM2UpLHJ2KHRoaXMuX3JlbmRlcmVyLGUsInRvdWNoc3Rh''@;'; put 'put ''cnQiLHRoaXMuX3BvaW50ZXJEb3duLG5aZSkscnYodGhpcy5fcmVuZGVyZXIsZSwiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQsbTNlKV0pLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX3Jvb3RFbGVtZW50PWUpLHR5cGVvZiBTVkdFbGVtZW50PCJ1IiYmdGhp''@;'; put 'put ''cy5fcm9vdEVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYodGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50Lm93bmVyU1ZHRWxlbWVudCksdGhpc313aXRoQm91bmRhcnlFbGVtZW50KHQpe3JldHVybiB0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9dD9UNih0KTpudWxs''@;'; put 'put ''LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHQmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTApLnN1YnNjcmliZSgoKT0+dGhpcy5fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKSkpLHRoaXN9d2l0aFBh''@;'; put 'put ''cmVudCh0KXtyZXR1cm4gdGhpcy5fcGFyZW50RHJhZ1JlZj10LHRoaXN9ZGlzcG9zZSgpe3RoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMuX3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJlbW92ZSgpLHRoaXMuX2Rl''@;'; put 'put ''c3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0''@;'; put 'put ''aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhp''@;'; put 'put ''cy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRo''@;'; put 'put ''aXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKCkmJnRoaXMuX2RyYWdE''@;'; put 'put ''cm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKX1yZXNldCgpe3RoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtfHwiIix0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9fWRp''@;'; put 'put ''c2FibGVIYW5kbGUodCl7IXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXModCkmJnRoaXMuX2hhbmRsZXMuaW5kZXhPZih0KT4tMSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5hZGQodCksTHcodCwhMCkpfWVuYWJsZUhhbmRsZSh0KXt0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKHQpJiYodGhp''@;'; put 'put ''cy5fZGlzYWJsZWRIYW5kbGVzLmRlbGV0ZSh0KSxMdyh0LHRoaXMuZGlzYWJsZWQpKX13aXRoRGlyZWN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXJlY3Rpb249dCx0aGlzfV93aXRoRHJvcENvbnRhaW5lcih0KXt0aGlzLl9kcm9wQ29udGFpbmVyPXR9Z2V0RnJlZURyYWdQb3NpdGlvbigpe2Nv''@;'; put 'put ''bnN0IHQ9dGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5fYWN0aXZlVHJhbnNmb3JtOnRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07cmV0dXJue3g6dC54LHk6dC55fX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVU''@;'; put 'put ''cmFuc2Zvcm0ueD10LngsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PXQueSx0aGlzLl9kcm9wQ29udGFpbmVyfHx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHQueCx0LnkpLHRoaXN9d2l0aFByZXZpZXdDb250YWluZXIodCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdDb250YWluZXI9''@;'; put 'put ''dCx0aGlzfV9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKXtjb25zdCB0PXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbjt0JiZ0aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0''@;'; put 'put ''aW9uKHQpLHQpfV9yZW1vdmVMaXN0ZW5lcnMoKXt0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NsZWFu''@;'; put 'put ''dXBTaGFkb3dSb290U2VsZWN0U3RhcnQ/LigpLHRoaXMuX2NsZWFudXBTaGFkb3dSb290U2VsZWN0U3RhcnQ9dm9pZCAwfV9kZXN0cm95UHJldmlldygpe3RoaXMuX3ByZXZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PW51bGx9X2Rlc3Ryb3lQbGFjZWhvbGRlcigpe3RoaXMuX3BsYWNl''@;'; put 'put ''aG9sZGVyPy5yZW1vdmUoKSx0aGlzLl9wbGFjZWhvbGRlclJlZj8uZGVzdHJveSgpLHRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX3BsYWNlaG9sZGVyUmVmPW51bGx9X3BvaW50ZXJEb3duPXQ9PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25z''@;'; put 'put ''dCBlPXRoaXMuX2dldFRhcmdldEhhbmRsZSh0KTtlJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhlKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoZSx0KX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UodGhp''@;'; put 'put ''cy5fcm9vdEVsZW1lbnQsdCl9O19wb2ludGVyTW92ZT10PT57Y29uc3QgZT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UodCk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZygpKXtpZihNYXRoLmFicyhlLngtdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCkrTWF0aC5hYnMo''@;'; put 'put ''ZS55LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpPj10aGlzLl9jb25maWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCBtPURhdGUubm93KCk+PXRoaXMuX2RyYWdTdGFydFRpbWUrdGhpcy5fZ2V0RHJhZ1N0YXJ0RGVsYXkodCksQz10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFtKXJl''@;'; put 'put ''dHVybiB2b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5jZSh0KTsoIUN8fCFDLmlzRHJhZ2dpbmcoKSYmIUMuaXNSZWNlaXZpbmcoKSkmJih0LmNhbmNlbGFibGUmJnQucHJldmVudERlZmF1bHQoKSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcuc2V0KCEwKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50''@;'; put 'put ''aGlzLl9zdGFydERyYWdTZXF1ZW5jZSh0KSkpfXJldHVybn10LmNhbmNlbGFibGUmJnQucHJldmVudERlZmF1bHQoKTtjb25zdCByPXRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGUpO2lmKHRoaXMuX2hhc01vdmVkPSEwLHRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlv''@;'; put 'put ''bj1lLHRoaXMuX3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShyKSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIocixlKTtlbHNle2NvbnN0IGk9dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9pbml0aWFsRG9tUmVjdDp0aGlzLl9waWNr''@;'; put 'put ''dXBQb3NpdGlvbk9uUGFnZSxhPXRoaXMuX2FjdGl2ZVRyYW5zZm9ybTthLng9ci54LWkueCt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsYS55PXIueS1pLnkrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55LHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0oYS54LGEueSl9dGhpcy5fbW92''@;'; put 'put ''ZUV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fbW92ZUV2ZW50cy5uZXh0KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246cixldmVudDp0LGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShyKSxkZWx0YTp0aGlzLl9wb2ludGVyRGly''@;'; put 'put ''ZWN0aW9uRGVsdGF9KX0pfTtfcG9pbnRlclVwPXQ9Pnt0aGlzLl9lbmREcmFnU2VxdWVuY2UodCl9O19lbmREcmFnU2VxdWVuY2UodCl7aWYodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpJiYodGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5fZHJhZ0Ryb3BSZWdp''@;'; put 'put ''c3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVudC5zdHlsZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj10aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFz''@;'; put 'put ''U3RhcnRlZERyYWdnaW5nKCkpKWlmKHRoaXMucmVsZWFzZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6dH0pLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fZHJvcENvbnRhaW5lci5fc3RvcFNjcm9sbGluZygpLHRoaXMuX2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpLnRoZW4oKCk9''@;'; put 'put ''Pnt0aGlzLl9jbGVhbnVwRHJhZ0FydGlmYWN0cyh0KSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfSk7ZWxzZXt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLng7Y29u''@;'; put 'put ''c3QgZT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UodCk7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0''@;'; put 'put ''YW5jZShlKSxkcm9wUG9pbnQ6ZSxldmVudDp0fSl9KSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfX1fc3RhcnREcmFnU2VxdWVuY2UodCl7cVQodCkmJih0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWU9RGF0''@;'; put 'put ''ZS5ub3coKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGU9dGhpcy5fZ2V0U2hhZG93Um9vdCgpLHI9dGhpcy5fZHJvcENvbnRhaW5lcjtpZihlJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9jbGVhbnVwU2hhZG93Um9vdFNl''@;'; put 'put ''bGVjdFN0YXJ0PXJ2KHRoaXMuX3JlbmRlcmVyLGUsInNlbGVjdHN0YXJ0IixvWmUsclplKX0pLHIpe2NvbnN0IGk9dGhpcy5fcm9vdEVsZW1lbnQsYT1pLnBhcmVudE5vZGUsYz10aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKSxtPXRoaXMuX2FuY2hv''@;'; put 'put ''cj10aGlzLl9hbmNob3J8fHRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpO2EuaW5zZXJ0QmVmb3JlKG0saSksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT1pLnN0eWxlLnRyYW5zZm9ybXx8IiIsdGhpcy5fcHJldmlldz1uZXcgdFplKHRoaXMuX2RvY3VtZW50LHRoaXMuX3Jvb3RFbGVt''@;'; put 'put ''ZW50LHRoaXMuX2RpcmVjdGlvbix0aGlzLl9pbml0aWFsRG9tUmVjdCx0aGlzLl9wcmV2aWV3VGVtcGxhdGV8fG51bGwsdGhpcy5wcmV2aWV3Q2xhc3N8fG51bGwsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSx0aGlzLl9jb25maWcuekluZGV4fHwx''@;'; put 'put ''ZTMsdGhpcy5fcmVuZGVyZXIpLHRoaXMuX3ByZXZpZXcuYXR0YWNoKHRoaXMuX2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChhLGUpKSxoM2UoaSwhMSx2M2UpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYS5yZXBsYWNlQ2hpbGQoYyxpKSksdGhpcy5zdGFydGVkLm5leHQoe3Nv''@;'; put 'put ''dXJjZTp0aGlzLGV2ZW50OnR9KSxyLnN0YXJ0KCksdGhpcy5faW5pdGlhbENvbnRhaW5lcj1yLHRoaXMuX2luaXRpYWxJbmRleD1yLmdldEl0ZW1JbmRleCh0aGlzKX1lbHNlIHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDp0fSksdGhpcy5faW5pdGlhbENvbnRhaW5lcj10''@;'; put 'put ''aGlzLl9pbml0aWFsSW5kZXg9dm9pZCAwO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZShyP3IuZ2V0U2Nyb2xsYWJsZVBhcmVudHMoKTpbXSl9X2luaXRpYWxpemVEcmFnU2VxdWVuY2UodCxlKXt0aGlzLl9wYXJlbnREcmFnUmVmJiZlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IHI9dGhp''@;'; put 'put ''cy5pc0RyYWdnaW5nKCksaT1xVChlKSxhPSFpJiYwIT09ZS5idXR0b24sYz10aGlzLl9yb290RWxlbWVudCxtPUdGKGUpLEM9IWkmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lKzgwMD5EYXRlLm5vdygpLFA9aT9mdW5jdGlvbiBTV2Uobil7Y29u''@;'; put 'put ''c3QgdD1uLnRvdWNoZXMmJm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlcyYmbi5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCF0fHwtMSE9PXQuaWRlbnRpZmllcnx8bnVsbCE9dC5yYWRpdXNYJiYxIT09dC5yYWRpdXNYfHxudWxsIT10LnJhZGl1c1kmJjEhPT10LnJhZGl1c1kpfShl''@;'; put 'put ''KTpmdW5jdGlvbiBDV2Uobil7cmV0dXJuIDA9PT1uLmJ1dHRvbnN8fDA9PT1uLmRldGFpbH0oZSk7aWYobSYmbS5kcmFnZ2FibGUmJiJtb3VzZWRvd24iPT09ZS50eXBlJiZlLnByZXZlbnREZWZhdWx0KCkscnx8YXx8Q3x8UClyZXR1cm47aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0''@;'; put 'put ''IGNlPWMuc3R5bGU7dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ9Y2Uud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLGNlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nLnNldCh0aGlz''@;'; put 'put ''Ll9oYXNNb3ZlZCksdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyTW92ZS5z''@;'; put 'put ''dWJzY3JpYmUodGhpcy5fcG9pbnRlck1vdmUpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJVcC5zdWJzY3JpYmUodGhpcy5fcG9pbnRlclVwKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5z''@;'; put 'put ''Y3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShjZT0+dGhpcy5fdXBkYXRlT25TY3JvbGwoY2UpKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFyeVJlY3Q9dFgodGhpcy5fYm91bmRhcnlFbGVtZW50KSk7Y29uc3QgWT10aGlzLl9wcmV2aWV3VGVt''@;'; put 'put ''cGxhdGU7dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ9WSYmWS50ZW1wbGF0ZSYmIVkubWF0Y2hTaXplP3t4OjAseTowfTp0aGlzLl9nZXRQb2ludGVyUG9zaXRpb25JbkVsZW1lbnQodGhpcy5faW5pdGlhbERvbVJlY3QsdCxlKTtjb25zdCBKPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25Q''@;'; put 'put ''YWdlPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoZSk7dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhPXt4OjAseTowfSx0aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6Si54LHk6Si55fSx0''@;'; put 'put ''aGlzLl9kcmFnU3RhcnRUaW1lPURhdGUubm93KCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdGFydERyYWdnaW5nKHRoaXMsZSl9X2NsZWFudXBEcmFnQXJ0aWZhY3RzKHQpe2gzZSh0aGlzLl9yb290RWxlbWVudCwhMCx2M2UpLHRoaXMuX2FuY2hvci5wYXJlbnROb2RlLnJlcGxhY2VDaGls''@;'; put 'put ''ZCh0aGlzLl9yb290RWxlbWVudCx0aGlzLl9hbmNob3IpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX2luaXRpYWxUcmFuc2Zvcm09''@;'; put 'put ''dm9pZCAwLHRoaXMuX25nWm9uZS5ydW4oKCk9Pntjb25zdCBlPXRoaXMuX2Ryb3BDb250YWluZXIscj1lLmdldEl0ZW1JbmRleCh0aGlzKSxpPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZSh0KSxhPXRoaXMuX2dldERyYWdEaXN0YW5jZShpKSxjPWUuX2lzT3ZlckNvbnRhaW5lcihp''@;'; put 'put ''LngsaS55KTt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOmEsZHJvcFBvaW50OmksZXZlbnQ6dH0pLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOnRoaXMsY3VycmVudEluZGV4OnIscHJldmlvdXNJbmRleDp0aGlzLl9pbml0aWFsSW5kZXgsY29udGFpbmVyOmUscHJldmlv''@;'; put 'put ''dXNDb250YWluZXI6dGhpcy5faW5pdGlhbENvbnRhaW5lcixpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmMsZGlzdGFuY2U6YSxkcm9wUG9pbnQ6aSxldmVudDp0fSksZS5kcm9wKHRoaXMscix0aGlzLl9pbml0aWFsSW5kZXgsdGhpcy5faW5pdGlhbENvbnRhaW5lcixjLGEsaSx0KSx0aGlzLl9k''@;'; put 'put ''cm9wQ29udGFpbmVyPXRoaXMuX2luaXRpYWxDb250YWluZXJ9KX1fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih7eDp0LHk6ZX0se3g6cix5Oml9KXtsZXQgYT10aGlzLl9pbml0aWFsQ29udGFpbmVyLl9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKHRoaXMsdCxlKTshYSYmdGhp''@;'; put 'put ''cy5fZHJvcENvbnRhaW5lciE9PXRoaXMuX2luaXRpYWxDb250YWluZXImJnRoaXMuX2luaXRpYWxDb250YWluZXIuX2lzT3ZlckNvbnRhaW5lcih0LGUpJiYoYT10aGlzLl9pbml0aWFsQ29udGFpbmVyKSxhJiZhIT09dGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fbmdab25lLnJ1bigoKT0+''@;'; put 'put ''e3RoaXMuZXhpdGVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6dGhpcy5fZHJvcENvbnRhaW5lcn0pLHRoaXMuX2Ryb3BDb250YWluZXIuZXhpdCh0aGlzKSx0aGlzLl9kcm9wQ29udGFpbmVyPWEsdGhpcy5fZHJvcENvbnRhaW5lci5lbnRlcih0aGlzLHQsZSxhPT09dGhpcy5faW5pdGlh''@;'; put 'put ''bENvbnRhaW5lciYmYS5zb3J0aW5nRGlzYWJsZWQ/dGhpcy5faW5pdGlhbEluZGV4OnZvaWQgMCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6YSxjdXJyZW50SW5kZXg6YS5nZXRJdGVtSW5kZXgodGhpcyl9KX0pLHRoaXMuaXNEcmFnZ2luZygpJiYodGhpcy5fZHJv''@;'; put 'put ''cENvbnRhaW5lci5fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShyLGkpLHRoaXMuX2Ryb3BDb250YWluZXIuX3NvcnRJdGVtKHRoaXMsdCxlLHRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSksdGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0odCxl''@;'; put 'put ''KTp0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0odC10aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54LGUtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueSkpfV9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKXtpZighdGhpcy5faGFzTW92ZWQpcmV0dXJuIFByb21pc2Uu''@;'; put 'put ''cmVzb2x2ZSgpO2NvbnN0IHQ9dGhpcy5fcGxhY2Vob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcHJldmlldy5hZGRDbGFzcygiY2RrLWRyYWctYW5pbWF0aW5nIiksdGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKHQubGVmdCx0LnRvcCk7Y29uc3QgZT10aGlzLl9wcmV2''@;'; put 'put ''aWV3LmdldFRyYW5zaXRpb25EdXJhdGlvbigpO3JldHVybiAwPT09ZT9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm5ldyBQcm9taXNlKHI9Pntjb25zdCBpPW09PnsoIW18fHRoaXMuX3ByZXZpZXcmJkdGKG0pPT09dGhpcy5fcHJldmlldy5l''@;'; put 'put ''bGVtZW50JiYidHJhbnNmb3JtIj09PW0ucHJvcGVydHlOYW1lKSYmKGMoKSxyKCksY2xlYXJUaW1lb3V0KGEpKX0sYT1zZXRUaW1lb3V0KGksMS41KmUpLGM9dGhpcy5fcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixpKX0pKX1fY3JlYXRlUGxhY2Vob2xkZXJFbGVt''@;'; put 'put ''ZW50KCl7Y29uc3QgdD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLGU9dD90LnRlbXBsYXRlOm51bGw7bGV0IHI7cmV0dXJuIGU/KHRoaXMuX3BsYWNlaG9sZGVyUmVmPXQudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZSx0LmNvbnRleHQpLHRoaXMuX3BsYWNlaG9sZGVyUmVm''@;'; put 'put ''LmRldGVjdENoYW5nZXMoKSxyPWQzZSh0aGlzLl9wbGFjZWhvbGRlclJlZix0aGlzLl9kb2N1bWVudCkpOnI9YTNlKHRoaXMuX3Jvb3RFbGVtZW50KSxyLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHIuY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcGxhY2Vob2xkZXIiKSxyfV9nZXRQb2lu''@;'; put 'put ''dGVyUG9zaXRpb25JbkVsZW1lbnQodCxlLHIpe2NvbnN0IGk9ZT09PXRoaXMuX3Jvb3RFbGVtZW50P251bGw6ZSxhPWk/aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0LGM9cVQocik/ci50YXJnZXRUb3VjaGVzWzBdOnIsbT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0''@;'; put 'put ''dXJue3g6YS5sZWZ0LXQubGVmdCsoYy5wYWdlWC1hLmxlZnQtbS5sZWZ0KSx5OmEudG9wLXQudG9wKyhjLnBhZ2VZLWEudG9wLW0udG9wKX19X2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZSh0KXtjb25zdCBlPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxyPXFUKHQpP3QudG91''@;'; put 'put ''Y2hlc1swXXx8dC5jaGFuZ2VkVG91Y2hlc1swXXx8e3BhZ2VYOjAscGFnZVk6MH06dCxpPXIucGFnZVgtZS5sZWZ0LGE9ci5wYWdlWS1lLnRvcDtpZih0aGlzLl9vd25lclNWR0VsZW1lbnQpe2NvbnN0IGM9dGhpcy5fb3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpO2lmKGMpe2NvbnN0''@;'; put 'put ''IG09dGhpcy5fb3duZXJTVkdFbGVtZW50LmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIG0ueD1pLG0ueT1hLG0ubWF0cml4VHJhbnNmb3JtKGMuaW52ZXJzZSgpKX19cmV0dXJue3g6aSx5OmF9fV9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbih0KXtjb25zdCBlPXRoaXMuX2Ryb3BDb250''@;'; put 'put ''YWluZXI/dGhpcy5fZHJvcENvbnRhaW5lci5sb2NrQXhpczpudWxsO2xldHt4OnIseTppfT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuY29uc3RyYWluUG9zaXRpb24odCx0aGlzLHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50KTp0O2lmKCJ4''@;'; put 'put ''Ij09PXRoaXMubG9ja0F4aXN8fCJ4Ij09PWU/aT10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50Lnk6MCk6KCJ5Ij09PXRoaXMubG9ja0F4aXN8fCJ5Ij09PWUpJiYocj10aGlzLl9waWNrdXBQ''@;'; put 'put ''b3NpdGlvbk9uUGFnZS54LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50Lng6MCkpLHRoaXMuX2JvdW5kYXJ5UmVjdCl7Y29uc3R7eDphLHk6Y309dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj97eDowLHk6MH06dGhpcy5fcGlja3VwUG9zaXRpb25J''@;'; put 'put ''bkVsZW1lbnQsbT10aGlzLl9ib3VuZGFyeVJlY3Qse3dpZHRoOkMsaGVpZ2h0OlB9PXRoaXMuX2dldFByZXZpZXdSZWN0KCksWT1tLnRvcCtjLEo9bS5ib3R0b20tKFAtYyk7cj15M2UocixtLmxlZnQrYSxtLnJpZ2h0LShDLWEpKSxpPXkzZShpLFksSil9cmV0dXJue3g6cix5Oml9fV91cGRh''@;'; put 'put ''dGVQb2ludGVyRGlyZWN0aW9uRGVsdGEodCl7Y29uc3R7eDplLHk6cn09dCxpPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSxhPXRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSxjPU1hdGguYWJzKGUtYS54KSxtPU1hdGguYWJzKHItYS55KTtyZXR1cm4gYz50''@;'; put 'put ''aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGkueD1lPmEueD8xOi0xLGEueD1lKSxtPnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaS55PXI+YS55PzE6LTEsYS55PXIpLGl9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFj''@;'; put 'put ''dGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCB0PXRoaXMuX2hhbmRsZXMubGVuZ3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTt0IT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9u''@;'; put 'put ''c0VuYWJsZWQ9dCxMdyh0aGlzLl9yb290RWxlbWVudCx0KSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKCl7dGhpcy5fcm9vdEVsZW1lbnRDbGVhbnVwcz8uZm9yRWFjaCh0PT50KCkpLHRoaXMuX3Jvb3RFbGVtZW50Q2xlYW51cHM9dm9pZCAwfV9hcHBseVJvb3RFbGVtZW50VHJhbnNm''@;'; put 'put ''b3JtKHQsZSl7Y29uc3Qgcj0xL3RoaXMuc2NhbGUsaT1uSCh0KnIsZSpyKSxhPXRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlO251bGw9PXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJih0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWEudHJhbnNmb3JtJiYibm9uZSIhPWEudHJhbnNmb3JtP2EudHJhbnNm''@;'; put 'put ''b3JtOiIiKSxhLnRyYW5zZm9ybT10SChpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pfV9hcHBseVByZXZpZXdUcmFuc2Zvcm0odCxlKXtjb25zdCByPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT8udGVtcGxhdGU/dm9pZCAwOnRoaXMuX2luaXRpYWxUcmFuc2Zvcm0saT1uSCh0LGUpO3RoaXMuX3By''@;'; put 'put ''ZXZpZXcuc2V0VHJhbnNmb3JtKHRIKGkscikpfV9nZXREcmFnRGlzdGFuY2UodCl7Y29uc3QgZT10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZTtyZXR1cm4gZT97eDp0LngtZS54LHk6dC55LWUueX06e3g6MCx5OjB9fV9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpe3RoaXMuX2JvdW5kYXJ5''@;'; put 'put ''UmVjdD10aGlzLl9wcmV2aWV3UmVjdD12b2lkIDAsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCl7bGV0e3g6dCx5OmV9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07aWYoMD09PXQmJjA9PT1lfHx0aGlzLmlzRHJhZ2dpbmcoKXx8''@;'; put 'put ''IXRoaXMuX2JvdW5kYXJ5RWxlbWVudClyZXR1cm47Y29uc3Qgcj10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX2JvdW5kYXJ5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09aS53aWR0aCYmMD09PWkuaGVpZ2h0fHwwPT09ci53''@;'; put 'put ''aWR0aCYmMD09PXIuaGVpZ2h0KXJldHVybjtjb25zdCBhPWkubGVmdC1yLmxlZnQsYz1yLnJpZ2h0LWkucmlnaHQsbT1pLnRvcC1yLnRvcCxDPXIuYm90dG9tLWkuYm90dG9tO2kud2lkdGg+ci53aWR0aD8oYT4wJiYodCs9YSksYz4wJiYodC09YykpOnQ9MCxpLmhlaWdodD5yLmhlaWdodD8o''@;'; put 'put ''bT4wJiYoZSs9bSksQz4wJiYoZS09QykpOmU9MCwodCE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueHx8ZSE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSkmJnRoaXMuc2V0RnJlZURyYWdQb3NpdGlvbih7eTplLHg6dH0pfV9nZXREcmFnU3RhcnREZWxheSh0KXtjb25zdCBlPXRoaXMuZHJh''@;'; put 'put ''Z1N0YXJ0RGVsYXk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP2U6cVQodCk/ZS50b3VjaDplP2UubW91c2U6MH1fdXBkYXRlT25TY3JvbGwodCl7Y29uc3QgZT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKHQpO2lmKGUpe2NvbnN0IHI9R0YodCk7dGhpcy5fYm91bmRhcnlS''@;'; put 'put ''ZWN0JiZyIT09dGhpcy5fYm91bmRhcnlFbGVtZW50JiZyLmNvbnRhaW5zKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkmJlhUKHRoaXMuX2JvdW5kYXJ5UmVjdCxlLnRvcCxlLmxlZnQpLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngrPWUubGVmdCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFn''@;'; put 'put ''ZS55Kz1lLnRvcCx0aGlzLl9kcm9wQ29udGFpbmVyfHwodGhpcy5fYWN0aXZlVHJhbnNmb3JtLngtPWUubGVmdCx0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueS09ZS50b3AsdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybSh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueCx0aGlzLl9hY3RpdmVU''@;'; put 'put ''cmFuc2Zvcm0ueSkpfX1fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldCh0aGlzLl9kb2N1bWVudCk/LnNjcm9sbFBvc2l0aW9ufHx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlv''@;'; put 'put ''bigpfV9nZXRTaGFkb3dSb290KCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3QmJih0aGlzLl9jYWNoZWRTaGFkb3dSb290PUtLKHRoaXMuX3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KHQsZSl7Y29u''@;'; put 'put ''c3Qgcj10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PXIpcmV0dXJuIHQ7aWYoImdsb2JhbCI9PT1yKXtjb25zdCBpPXRoaXMuX2RvY3VtZW50O3JldHVybiBlfHxpLmZ1bGxzY3JlZW5FbGVtZW50fHxpLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxpLm1v''@;'; put 'put ''ekZ1bGxTY3JlZW5FbGVtZW50fHxpLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGkuYm9keX1yZXR1cm4gVDYocil9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYmKHRo''@;'; put 'put ''aXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5fcHJldmlld1JlY3R9X25hdGl2ZURyYWdTdGFydD10PT57aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IGU9dGhp''@;'; put 'put ''cy5fZ2V0VGFyZ2V0SGFuZGxlKHQpO2UmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGUpJiYhdGhpcy5kaXNhYmxlZCYmdC5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgdGhpcy5kaXNhYmxlZHx8dC5wcmV2ZW50RGVmYXVsdCgpfTtfZ2V0VGFyZ2V0SGFuZGxlKHQpe3JldHVybiB0aGlzLl9o''@;'; put 'put ''YW5kbGVzLmZpbmQoZT0+dC50YXJnZXQmJih0LnRhcmdldD09PWV8fGUuY29udGFpbnModC50YXJnZXQpKSl9fWZ1bmN0aW9uIHkzZShuLHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSl9ZnVuY3Rpb24gcVQobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIG9a''@;'; put 'put ''ZShuKXtuLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gYVgobix0LGUpe2NvbnN0IHI9SlQodCxuLmxlbmd0aC0xKSxpPUpUKGUsbi5sZW5ndGgtMSk7aWYocj09PWkpcmV0dXJuO2NvbnN0IGE9bltyXSxjPWk8cj8tMToxO2ZvcihsZXQgbT1yO20hPT1pO20rPWMpblttXT1uW20rY107bltp''@;'; put 'put ''XT1hfWZ1bmN0aW9uIEpUKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4odCxuKSl9Y2xhc3MgXzNle19kcmFnRHJvcFJlZ2lzdHJ5O19lbGVtZW50O19zb3J0UHJlZGljYXRlO19pdGVtUG9zaXRpb25zPVtdO19hY3RpdmVEcmFnZ2FibGVzO29yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI7''@;'; put 'put ''ZGlyZWN0aW9uO2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9dH1fcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGE6MCxvdmVybGFwczohMX07c3RhcnQodCl7dGhpcy53aXRoSXRlbXModCl9c29ydCh0LGUscixpKXtjb25zdCBhPXRoaXMuX2l0ZW1Qb3NpdGlvbnMs''@;'; put 'put ''Yz10aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKHQsZSxyLGkpO2lmKC0xPT09YyYmYS5sZW5ndGg+MClyZXR1cm4gbnVsbDtjb25zdCBtPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sQz1hLmZpbmRJbmRleChYZT0+WGUuZHJhZz09PXQpLFA9YVtjXSxKPVAu''@;'; put 'put ''Y2xpZW50UmVjdCxjZT1DPmM/MTotMSxmZT10aGlzLl9nZXRJdGVtT2Zmc2V0UHgoYVtDXS5jbGllbnRSZWN0LEosY2UpLEFlPXRoaXMuX2dldFNpYmxpbmdPZmZzZXRQeChDLGEsY2UpLEhlPWEuc2xpY2UoKTtyZXR1cm4gYVgoYSxDLGMpLGEuZm9yRWFjaCgoWGUscnQpPT57aWYoSGVbcnRd''@;'; put 'put ''PT09WGUpcmV0dXJuO2NvbnN0IGR0PVhlLmRyYWc9PT10LGp0PWR0P2ZlOkFlLEZ0PWR0P3QuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6WGUuZHJhZy5nZXRSb290RWxlbWVudCgpO1hlLm9mZnNldCs9anQ7Y29uc3QgcG49TWF0aC5yb3VuZChYZS5vZmZzZXQqKDEvWGUuZHJhZy5zY2FsZSkp''@;'; put 'put ''O20/KEZ0LnN0eWxlLnRyYW5zZm9ybT10SChgdHJhbnNsYXRlM2QoJHtwbn1weCwgMCwgMClgLFhlLmluaXRpYWxUcmFuc2Zvcm0pLFhUKFhlLmNsaWVudFJlY3QsMCxqdCkpOihGdC5zdHlsZS50cmFuc2Zvcm09dEgoYHRyYW5zbGF0ZTNkKDAsICR7cG59cHgsIDApYCxYZS5pbml0aWFsVHJh''@;'; put 'put ''bnNmb3JtKSxYVChYZS5jbGllbnRSZWN0LGp0LDApKX0pLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz1uWChKLGUsciksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9UC5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1tP2kueDppLnkse3ByZXZpb3VzSW5kZXg6QyxjdXJyZW50SW5k''@;'; put 'put ''ZXg6Y319ZW50ZXIodCxlLHIsaSl7Y29uc3QgYT1udWxsPT1pfHxpPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbih0LGUscik6aSxjPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsbT1jLmluZGV4T2YodCksQz10LmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBQPWNb''@;'; put 'put ''YV07aWYoUD09PXQmJihQPWNbYSsxXSksIVAmJihudWxsPT1hfHwtMT09PWF8fGE8Yy5sZW5ndGgtMSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGUscikmJihQPWNbMF0pLG0+LTEmJmMuc3BsaWNlKG0sMSksUCYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhQ''@;'; put 'put ''KSl7Y29uc3QgWT1QLmdldFJvb3RFbGVtZW50KCk7WS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShDLFkpLGMuc3BsaWNlKGEsMCx0KX1lbHNlIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoQyksYy5wdXNoKHQpO0Muc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0''@;'; put 'put ''aW9ucygpfXdpdGhJdGVtcyh0KXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPXQuc2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZSh0KXt0aGlzLl9zb3J0UHJlZGljYXRlPXR9cmVzZXQoKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPy5mb3JFYWNoKHQ9''@;'; put 'put ''Pntjb25zdCBlPXQuZ2V0Um9vdEVsZW1lbnQoKTtpZihlKXtjb25zdCByPXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZChpPT5pLmRyYWc9PT10KT8uaW5pdGlhbFRyYW5zZm9ybTtlLnN0eWxlLnRyYW5zZm9ybT1yfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2ZURy''@;'; put 'put ''YWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1JbmRl''@;'; put 'put ''eCh0KXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9zaXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChyPT5yLmRyYWc9PT10KX11cGRhdGVPblNjcm9s''@;'; put 'put ''bCh0LGUpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6cn0pPT57WFQocix0LGUpfSksdGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7ZHJhZzpyfSk9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcocikmJnIuX3NvcnRGcm9tTGFzdFBvaW50''@;'; put 'put ''ZXJQb3NpdGlvbigpfSl9d2l0aEVsZW1lbnRDb250YWluZXIodCl7dGhpcy5fZWxlbWVudD10fV9jYWNoZUl0ZW1Qb3NpdGlvbnMoKXtjb25zdCB0PSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247dGhpcy5faXRlbVBvc2l0aW9ucz10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLm1hcChl''@;'; put 'put ''PT57Y29uc3Qgcj1lLmdldFZpc2libGVFbGVtZW50KCk7cmV0dXJue2RyYWc6ZSxvZmZzZXQ6MCxpbml0aWFsVHJhbnNmb3JtOnIuc3R5bGUudHJhbnNmb3JtfHwiIixjbGllbnRSZWN0OnRYKHIpfX0pLnNvcnQoKGUscik9PnQ/ZS5jbGllbnRSZWN0LmxlZnQtci5jbGllbnRSZWN0LmxlZnQ6''@;'; put 'put ''ZS5jbGllbnRSZWN0LnRvcC1yLmNsaWVudFJlY3QudG9wKX1fZ2V0SXRlbU9mZnNldFB4KHQsZSxyKXtjb25zdCBpPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247bGV0IGE9aT9lLmxlZnQtdC5sZWZ0OmUudG9wLXQudG9wO3JldHVybi0xPT09ciYmKGErPWk/ZS53aWR0aC10Lndp''@;'; put 'put ''ZHRoOmUuaGVpZ2h0LXQuaGVpZ2h0KSxhfV9nZXRTaWJsaW5nT2Zmc2V0UHgodCxlLHIpe2NvbnN0IGk9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixhPWVbdF0uY2xpZW50UmVjdCxjPWVbdCstMSpyXTtsZXQgbT1hW2k/IndpZHRoIjoiaGVpZ2h0Il0qcjtpZihjKXtjb25zdCBD''@;'; put 'put ''PWk/ImxlZnQiOiJ0b3AiLFA9aT8icmlnaHQiOiJib3R0b20iOy0xPT09cj9tLT1jLmNsaWVudFJlY3RbQ10tYVtQXTptKz1hW0NdLWMuY2xpZW50UmVjdFtQXX1yZXR1cm4gbX1fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQodCxlKXtpZighdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5sZW5ndGgp''@;'; put 'put ''cmV0dXJuITE7Y29uc3Qgcj10aGlzLl9pdGVtUG9zaXRpb25zLGk9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtpZihyWzBdLmRyYWchPT10aGlzLl9hY3RpdmVEcmFnZ2FibGVzWzBdKXtjb25zdCBjPXJbci5sZW5ndGgtMV0uY2xpZW50UmVjdDtyZXR1cm4gaT90Pj1jLnJpZ2h0''@;'; put 'put ''OmU+PWMuYm90dG9tfXtjb25zdCBjPXJbMF0uY2xpZW50UmVjdDtyZXR1cm4gaT90PD1jLmxlZnQ6ZTw9Yy50b3B9fV9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKHQsZSxyLGkpe2NvbnN0IGE9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixjPXRoaXMuX2l0ZW1Qb3Np''@;'; put 'put ''dGlvbnMuZmluZEluZGV4KCh7ZHJhZzptLGNsaWVudFJlY3Q6Q30pPT5tIT09dCYmKCghaXx8bSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnfHwhdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzfHwoYT9pLng6aS55KSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YSkmJihhP2U+PU1hdGgu''@;'; put 'put ''Zmxvb3IoQy5sZWZ0KSYmZTxNYXRoLmZsb29yKEMucmlnaHQpOnI+PU1hdGguZmxvb3IoQy50b3ApJiZyPE1hdGguZmxvb3IoQy5ib3R0b20pKSkpO3JldHVybi0xIT09YyYmdGhpcy5fc29ydFByZWRpY2F0ZShjLHQpP2M6LTF9fWNsYXNzIGxaZXtfZG9jdW1lbnQ7X2RyYWdEcm9wUmVnaXN0''@;'; put 'put ''cnk7X2VsZW1lbnQ7X3NvcnRQcmVkaWNhdGU7X3Jvb3ROb2RlO19hY3RpdmVJdGVtcztfcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGFYOjAsZGVsdGFZOjAsb3ZlcmxhcHM6ITF9O19yZWxhdGVkTm9kZXM9W107Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kb2N1bWVudD10LHRoaXMuX2Ry''@;'; put 'put ''YWdEcm9wUmVnaXN0cnk9ZX1zdGFydCh0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnQuY2hpbGROb2Rlczt0aGlzLl9yZWxhdGVkTm9kZXM9W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2NvbnN0IGk9ZVtyXTt0aGlzLl9yZWxhdGVkTm9kZXMucHVzaChbaSxpLm5leHRTaWJsaW5nXSl9''@;'; put 'put ''dGhpcy53aXRoSXRlbXModCl9c29ydCh0LGUscixpKXtjb25zdCBhPXRoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24odCxlLHIpLGM9dGhpcy5fcHJldmlvdXNTd2FwO2lmKC0xPT09YXx8dGhpcy5fYWN0aXZlSXRlbXNbYV09PT10KXJldHVybiBudWxsO2NvbnN0IG09dGhp''@;'; put 'put ''cy5fYWN0aXZlSXRlbXNbYV07aWYoYy5kcmFnPT09bSYmYy5vdmVybGFwcyYmYy5kZWx0YVg9PT1pLngmJmMuZGVsdGFZPT09aS55KXJldHVybiBudWxsO2NvbnN0IEM9dGhpcy5nZXRJdGVtSW5kZXgodCksUD10LmdldFBsYWNlaG9sZGVyRWxlbWVudCgpLFk9bS5nZXRSb290RWxlbWVudCgp''@;'; put 'put ''O2E+Qz9ZLmFmdGVyKFApOlkuYmVmb3JlKFApLGFYKHRoaXMuX2FjdGl2ZUl0ZW1zLEMsYSk7Y29uc3QgSj10aGlzLl9nZXRSb290Tm9kZSgpLmVsZW1lbnRGcm9tUG9pbnQoZSxyKTtyZXR1cm4gYy5kZWx0YVg9aS54LGMuZGVsdGFZPWkueSxjLmRyYWc9bSxjLm92ZXJsYXBzPVk9PT1KfHxZ''@;'; put 'put ''LmNvbnRhaW5zKEopLHtwcmV2aW91c0luZGV4OkMsY3VycmVudEluZGV4OmF9fWVudGVyKHQsZSxyLGkpe2xldCBhPW51bGw9PWl8fGk8MD90aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKHQsZSxyKTppOy0xPT09YSYmKGE9dGhpcy5fZ2V0Q2xvc2VzdEl0ZW1JbmRleFRv''@;'; put 'put ''UG9pbnRlcih0LGUscikpO2NvbnN0IGM9dGhpcy5fYWN0aXZlSXRlbXNbYV0sbT10aGlzLl9hY3RpdmVJdGVtcy5pbmRleE9mKHQpO20+LTEmJnRoaXMuX2FjdGl2ZUl0ZW1zLnNwbGljZShtLDEpLGMmJiF0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoYyk/KHRoaXMuX2FjdGl2''@;'; put 'put ''ZUl0ZW1zLnNwbGljZShhLDAsdCksYy5nZXRSb290RWxlbWVudCgpLmJlZm9yZSh0LmdldFBsYWNlaG9sZGVyRWxlbWVudCgpKSk6KHRoaXMuX2FjdGl2ZUl0ZW1zLnB1c2godCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0LmdldFBsYWNlaG9sZGVyRWxlbWVudCgpKSl9d2l0aEl0ZW1z''@;'; put 'put ''KHQpe3RoaXMuX2FjdGl2ZUl0ZW1zPXQuc2xpY2UoKX13aXRoU29ydFByZWRpY2F0ZSh0KXt0aGlzLl9zb3J0UHJlZGljYXRlPXR9cmVzZXQoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQsZT10aGlzLl9wcmV2aW91c1N3YXA7Zm9yKGxldCByPXRoaXMuX3JlbGF0ZWROb2Rlcy5sZW5ndGgtMTty''@;'; put 'put ''Pi0xO3ItLSl7Y29uc3RbaSxhXT10aGlzLl9yZWxhdGVkTm9kZXNbcl07aS5wYXJlbnROb2RlPT09dCYmaS5uZXh0U2libGluZyE9PWEmJihudWxsPT09YT90LmFwcGVuZENoaWxkKGkpOmEucGFyZW50Tm9kZT09PXQmJnQuaW5zZXJ0QmVmb3JlKGksYSkpfXRoaXMuX3JlbGF0ZWROb2Rlcz1b''@;'; put 'put ''XSx0aGlzLl9hY3RpdmVJdGVtcz1bXSxlLmRyYWc9bnVsbCxlLmRlbHRhWD1lLmRlbHRhWT0wLGUub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtc31nZXRJdGVtSW5kZXgodCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1zLmluZGV4''@;'; put 'put ''T2YodCl9dXBkYXRlT25TY3JvbGwoKXt0aGlzLl9hY3RpdmVJdGVtcy5mb3JFYWNoKHQ9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodCkmJnQuX3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpfSl9d2l0aEVsZW1lbnRDb250YWluZXIodCl7dCE9PXRoaXMuX2VsZW1l''@;'; put 'put ''bnQmJih0aGlzLl9lbGVtZW50PXQsdGhpcy5fcm9vdE5vZGU9dm9pZCAwKX1fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbih0LGUscil7Y29uc3QgaT10aGlzLl9nZXRSb290Tm9kZSgpLmVsZW1lbnRGcm9tUG9pbnQoTWF0aC5mbG9vcihlKSxNYXRoLmZsb29yKHIpKSxhPWk/dGhp''@;'; put 'put ''cy5fYWN0aXZlSXRlbXMuZmluZEluZGV4KGM9Pntjb25zdCBtPWMuZ2V0Um9vdEVsZW1lbnQoKTtyZXR1cm4gaT09PW18fG0uY29udGFpbnMoaSl9KTotMTtyZXR1cm4tMSE9PWEmJnRoaXMuX3NvcnRQcmVkaWNhdGUoYSx0KT9hOi0xfV9nZXRSb290Tm9kZSgpe3JldHVybiB0aGlzLl9yb290''@;'; put 'put ''Tm9kZXx8KHRoaXMuX3Jvb3ROb2RlPUtLKHRoaXMuX2VsZW1lbnQpfHx0aGlzLl9kb2N1bWVudCksdGhpcy5fcm9vdE5vZGV9X2dldENsb3Nlc3RJdGVtSW5kZXhUb1BvaW50ZXIodCxlLHIpe2lmKDA9PT10aGlzLl9hY3RpdmVJdGVtcy5sZW5ndGgpcmV0dXJuLTE7aWYoMT09PXRoaXMuX2Fj''@;'; put 'put ''dGl2ZUl0ZW1zLmxlbmd0aClyZXR1cm4gMDtsZXQgaT0xLzAsYT0tMTtmb3IobGV0IGM9MDtjPHRoaXMuX2FjdGl2ZUl0ZW1zLmxlbmd0aDtjKyspe2NvbnN0IG09dGhpcy5fYWN0aXZlSXRlbXNbY107aWYobSE9PXQpe2NvbnN0e3g6Qyx5OlB9PW0uZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3Vu''@;'; put 'put ''ZGluZ0NsaWVudFJlY3QoKSxZPU1hdGguaHlwb3QoZS1DLHItUCk7WTxpJiYoaT1ZLGE9Yyl9fXJldHVybiBhfX12YXIgUGY9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5OT05FPTBdPSJOT05FIixuW24uVVA9MV09IlVQIixuW24uRE9XTj0yXT0iRE9XTiIsbn0oUGZ8fHt9KSxSZD1mdW5jdGlv''@;'; put 'put ''bihuKXtyZXR1cm4gbltuLk5PTkU9MF09Ik5PTkUiLG5bbi5MRUZUPTFdPSJMRUZUIixuW24uUklHSFQ9Ml09IlJJR0hUIixufShSZHx8e30pO2NsYXNzIGNaZXtfZHJhZ0Ryb3BSZWdpc3RyeTtfbmdab25lO192aWV3cG9ydFJ1bGVyO2VsZW1lbnQ7ZGlzYWJsZWQ9ITE7c29ydGluZ0Rpc2Fi''@;'; put 'put ''bGVkPSExO2xvY2tBeGlzO2F1dG9TY3JvbGxEaXNhYmxlZD0hMTthdXRvU2Nyb2xsU3RlcD0yO2VudGVyUHJlZGljYXRlPSgpPT4hMDtzb3J0UHJlZGljYXRlPSgpPT4hMDtiZWZvcmVTdGFydGVkPW5ldyB1cjtlbnRlcmVkPW5ldyB1cjtleGl0ZWQ9bmV3IHVyO2Ryb3BwZWQ9bmV3IHVyO3Nv''@;'; put 'put ''cnRlZD1uZXcgdXI7cmVjZWl2aW5nU3RhcnRlZD1uZXcgdXI7cmVjZWl2aW5nU3RvcHBlZD1uZXcgdXI7ZGF0YTtfY29udGFpbmVyO19pc0RyYWdnaW5nPSExO19wYXJlbnRQb3NpdGlvbnM7X3NvcnRTdHJhdGVneTtfZG9tUmVjdDtfZHJhZ2dhYmxlcz1bXTtfc2libGluZ3M9W107X2FjdGl2''@;'; put 'put ''ZVNpYmxpbmdzPW5ldyBTZXQ7X3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uPUx0LkVNUFRZO192ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1QZi5OT05FO19ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPVJkLk5PTkU7X3Njcm9sbE5vZGU7X3N0b3BTY3JvbGxUaW1lcnM9bmV3IHVyO19jYWNo''@;'; put 'put ''ZWRTaGFkb3dSb290PW51bGw7X2RvY3VtZW50O19zY3JvbGxhYmxlRWxlbWVudHM9W107X2luaXRpYWxTY3JvbGxTbmFwO19kaXJlY3Rpb249Imx0ciI7Y29uc3RydWN0b3IodCxlLHIsaSxhKXt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWUsdGhpcy5fbmdab25lPWksdGhpcy5fdmlld3BvcnRS''@;'; put 'put ''dWxlcj1hO2NvbnN0IGM9dGhpcy5lbGVtZW50PVQ2KHQpO3RoaXMuX2RvY3VtZW50PXIsdGhpcy53aXRoT3JpZW50YXRpb24oInZlcnRpY2FsIikud2l0aEVsZW1lbnRDb250YWluZXIoYyksZS5yZWdpc3RlckRyb3BDb250YWluZXIodGhpcyksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyB1''@;'; put 'put ''M2Uocil9ZGlzcG9zZSgpe3RoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29t''@;'; put 'put ''cGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuc29ydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLmNvbXBsZXRlKCksdGhpcy5fYWN0aXZlU2libGluZ3Mu''@;'; put 'put ''Y2xlYXIoKSx0aGlzLl9zY3JvbGxOb2RlPW51bGwsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcm9wQ29udGFpbmVyKHRoaXMpfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZ31zdGFydCgpe3RoaXMuX2RyYWdn''@;'; put 'put ''aW5nU3RhcnRlZCgpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl9ZW50ZXIodCxlLHIsaSl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksbnVsbD09aSYmdGhpcy5zb3J0aW5nRGlzYWJsZWQmJihpPXRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZih0KSksdGhpcy5fc29ydFN0cmF0ZWd5''@;'; put 'put ''LmVudGVyKHQsZSxyLGkpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTp0LGNvbnRhaW5lcjp0aGlzLGN1cnJlbnRJbmRleDp0aGlzLmdldEl0ZW1JbmRleCh0KX0pfWV4aXQodCl7dGhp''@;'; put 'put ''cy5fcmVzZXQoKSx0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnQsY29udGFpbmVyOnRoaXN9KX1kcm9wKHQsZSxyLGksYSxjLG0sQz17fSl7dGhpcy5fcmVzZXQoKSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0LGN1cnJlbnRJbmRleDplLHByZXZpb3VzSW5kZXg6cixjb250YWluZXI6dGhpcyxw''@;'; put 'put ''cmV2aW91c0NvbnRhaW5lcjppLGlzUG9pbnRlck92ZXJDb250YWluZXI6YSxkaXN0YW5jZTpjLGRyb3BQb2ludDptLGV2ZW50OkN9KX13aXRoSXRlbXModCl7Y29uc3QgZT10aGlzLl9kcmFnZ2FibGVzO3JldHVybiB0aGlzLl9kcmFnZ2FibGVzPXQsdC5mb3JFYWNoKHI9PnIuX3dpdGhEcm9w''@;'; put 'put ''Q29udGFpbmVyKHRoaXMpKSx0aGlzLmlzRHJhZ2dpbmcoKSYmKGUuZmlsdGVyKGk9PmkuaXNEcmFnZ2luZygpKS5ldmVyeShpPT4tMT09PXQuaW5kZXhPZihpKSk/dGhpcy5fcmVzZXQoKTp0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEl0ZW1zKHRoaXMuX2RyYWdnYWJsZXMpKSx0aGlzfXdpdGhE''@;'; put 'put ''aXJlY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbj10LHRoaXMuX3NvcnRTdHJhdGVneSBpbnN0YW5jZW9mIF8zZSYmKHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb249dCksdGhpc31jb25uZWN0ZWRUbyh0KXtyZXR1cm4gdGhpcy5fc2libGluZ3M9dC5zbGljZSgpLHRoaXN9d2l0''@;'; put 'put ''aE9yaWVudGF0aW9uKHQpe2lmKCJtaXhlZCI9PT10KXRoaXMuX3NvcnRTdHJhdGVneT1uZXcgbFplKHRoaXMuX2RvY3VtZW50LHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpO2Vsc2V7Y29uc3QgZT1uZXcgXzNlKHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpO2UuZGlyZWN0aW9uPXRoaXMuX2RpcmVj''@;'; put 'put ''dGlvbixlLm9yaWVudGF0aW9uPXQsdGhpcy5fc29ydFN0cmF0ZWd5PWV9cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS53aXRoRWxlbWVudENvbnRhaW5lcih0aGlzLl9jb250YWluZXIpLHRoaXMuX3NvcnRTdHJhdGVneS53aXRoU29ydFByZWRpY2F0ZSgoZSxyKT0+dGhpcy5zb3J0UHJlZGlj''@;'; put 'put ''YXRlKGUscix0aGlzKSksdGhpc313aXRoU2Nyb2xsYWJsZVBhcmVudHModCl7Y29uc3QgZT10aGlzLl9jb250YWluZXI7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cz0tMT09PXQuaW5kZXhPZihlKT9bZSwuLi50XTp0LnNsaWNlKCksdGhpc313aXRoRWxlbWVudENvbnRhaW5lcih0''@;'; put 'put ''KXtpZih0PT09dGhpcy5fY29udGFpbmVyKXJldHVybiB0aGlzO1Q2KHRoaXMuZWxlbWVudCk7Y29uc3Qgcj10aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMuaW5kZXhPZih0aGlzLl9jb250YWluZXIpLGk9dGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzLmluZGV4T2YodCk7cmV0dXJuIHI+LTEmJnRo''@;'; put 'put ''aXMuX3Njcm9sbGFibGVFbGVtZW50cy5zcGxpY2UociwxKSxpPi0xJiZ0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMuc3BsaWNlKGksMSksdGhpcy5fc29ydFN0cmF0ZWd5JiZ0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEVsZW1lbnRDb250YWluZXIodCksdGhpcy5fY2FjaGVkU2hhZG93Um9vdD1u''@;'; put 'put ''dWxsLHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cy51bnNoaWZ0KHQpLHRoaXMuX2NvbnRhaW5lcj10LHRoaXN9Z2V0U2Nyb2xsYWJsZVBhcmVudHMoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzfWdldEl0ZW1JbmRleCh0KXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZz90aGlzLl9z''@;'; put 'put ''b3J0U3RyYXRlZ3kuZ2V0SXRlbUluZGV4KHQpOnRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZih0KX1pc1JlY2VpdmluZygpe3JldHVybiB0aGlzLl9hY3RpdmVTaWJsaW5ncy5zaXplPjB9X3NvcnRJdGVtKHQsZSxyLGkpe2lmKHRoaXMuc29ydGluZ0Rpc2FibGVkfHwhdGhpcy5fZG9tUmVjdHx8''@;'; put 'put ''IWMzZSh0aGlzLl9kb21SZWN0LC4wNSxlLHIpKXJldHVybjtjb25zdCBhPXRoaXMuX3NvcnRTdHJhdGVneS5zb3J0KHQsZSxyLGkpO2EmJnRoaXMuc29ydGVkLm5leHQoe3ByZXZpb3VzSW5kZXg6YS5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDphLmN1cnJlbnRJbmRleCxjb250YWluZXI6''@;'; put 'put ''dGhpcyxpdGVtOnR9KX1fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeSh0LGUpe2lmKHRoaXMuYXV0b1Njcm9sbERpc2FibGVkKXJldHVybjtsZXQgcixpPVBmLk5PTkUsYT1SZC5OT05FO2lmKHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZm9yRWFjaCgoYyxtKT0+e209PT10aGlz''@;'; put 'put ''Ll9kb2N1bWVudHx8IWMuY2xpZW50UmVjdHx8cnx8YzNlKGMuY2xpZW50UmVjdCwuMDUsdCxlKSYmKFtpLGFdPWZ1bmN0aW9uIHVaZShuLHQsZSxyLGkpe2NvbnN0IGE9QzNlKHQsaSksYz1TM2UodCxyKTtsZXQgbT1QZi5OT05FLEM9UmQuTk9ORTtpZihhKXtjb25zdCBQPW4uc2Nyb2xsVG9w''@;'; put 'put ''O2E9PT1QZi5VUD9QPjAmJihtPVBmLlVQKTpuLnNjcm9sbEhlaWdodC1QPm4uY2xpZW50SGVpZ2h0JiYobT1QZi5ET1dOKX1pZihjKXtjb25zdCBQPW4uc2Nyb2xsTGVmdDsicnRsIj09PWU/Yz09PVJkLlJJR0hUP1A8MCYmKEM9UmQuUklHSFQpOm4uc2Nyb2xsV2lkdGgrUD5uLmNsaWVudFdp''@;'; put 'put ''ZHRoJiYoQz1SZC5MRUZUKTpjPT09UmQuTEVGVD9QPjAmJihDPVJkLkxFRlQpOm4uc2Nyb2xsV2lkdGgtUD5uLmNsaWVudFdpZHRoJiYoQz1SZC5SSUdIVCl9cmV0dXJuW20sQ119KG0sYy5jbGllbnRSZWN0LHRoaXMuX2RpcmVjdGlvbix0LGUpLChpfHxhKSYmKHI9bSkpfSksIWkmJiFhKXtj''@;'; put 'put ''b25zdHt3aWR0aDpjLGhlaWdodDptfT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLEM9e3dpZHRoOmMsaGVpZ2h0Om0sdG9wOjAscmlnaHQ6Yyxib3R0b206bSxsZWZ0OjB9O2k9QzNlKEMsZSksYT1TM2UoQyx0KSxyPXdpbmRvd31yJiYoaSE9PXRoaXMuX3ZlcnRpY2Fs''@;'; put 'put ''U2Nyb2xsRGlyZWN0aW9ufHxhIT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbnx8ciE9PXRoaXMuX3Njcm9sbE5vZGUpJiYodGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249aSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWEsdGhpcy5fc2Nyb2xsTm9kZT1yLChp''@;'; put 'put ''fHxhKSYmcj90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbCk6dGhpcy5fc3RvcFNjcm9sbGluZygpKX1fc3RvcFNjcm9sbGluZygpe3RoaXMuX3N0b3BTY3JvbGxUaW1lcnMubmV4dCgpfV9kcmFnZ2luZ1N0YXJ0ZWQoKXtjb25zdCB0PXRo''@;'; put 'put ''aXMuX2NvbnRhaW5lci5zdHlsZTt0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2lzRHJhZ2dpbmc9ITAsdGhpcy5faW5pdGlhbFNjcm9sbFNuYXA9dC5tc1Njcm9sbFNuYXBUeXBlfHx0LnNjcm9sbFNuYXBUeXBlfHwiIix0LnNjcm9sbFNuYXBUeXBlPXQubXNTY3JvbGxTbmFwVHlw''@;'; put 'put ''ZT0ibm9uZSIsdGhpcy5fc29ydFN0cmF0ZWd5LnN0YXJ0KHRoaXMuX2RyYWdnYWJsZXMpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpfV9jYWNoZVBh''@;'; put 'put ''cmVudFBvc2l0aW9ucygpe3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZSh0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHMpLHRoaXMuX2RvbVJlY3Q9dGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQodGhpcy5fY29udGFpbmVyKS5jbGllbnRSZWN0fV9yZXNldCgpe3RoaXMuX2lz''@;'; put 'put ''RHJhZ2dpbmc9ITE7Y29uc3QgdD10aGlzLl9jb250YWluZXIuc3R5bGU7dC5zY3JvbGxTbmFwVHlwZT10Lm1zU2Nyb2xsU25hcFR5cGU9dGhpcy5faW5pdGlhbFNjcm9sbFNuYXAsdGhpcy5fc2libGluZ3MuZm9yRWFjaChlPT5lLl9zdG9wUmVjZWl2aW5nKHRoaXMpKSx0aGlzLl9zb3J0U3Ry''@;'; put 'put ''YXRlZ3kucmVzZXQoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fc3RhcnRTY3JvbGxJbnRlcnZhbD0oKT0+e3RoaXMuX3N0b3BTY3JvbGxpbmcoKSxmdW5j''@;'; put 'put ''dGlvbiBfV2Uobj0wLHQ9WkYpe3JldHVybiBuPDAmJihuPTApLFhmZShuLG4sdCl9KDAscWZlKS5waXBlKCQxKHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMpKS5zdWJzY3JpYmUoKCk9Pntjb25zdCB0PXRoaXMuX3Njcm9sbE5vZGUsZT10aGlzLmF1dG9TY3JvbGxTdGVwO3RoaXMuX3ZlcnRpY2Fs''@;'; put 'put ''U2Nyb2xsRGlyZWN0aW9uPT09UGYuVVA/dC5zY3JvbGxCeSgwLC1lKTp0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PVBmLkRPV04mJnQuc2Nyb2xsQnkoMCxlKSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09UmQuTEVGVD90LnNjcm9sbEJ5KC1lLDApOnRoaXMuX2hv''@;'; put 'put ''cml6b250YWxTY3JvbGxEaXJlY3Rpb249PT1SZC5SSUdIVCYmdC5zY3JvbGxCeShlLDApfSl9O19pc092ZXJDb250YWluZXIodCxlKXtyZXR1cm4gbnVsbCE9dGhpcy5fZG9tUmVjdCYmblgodGhpcy5fZG9tUmVjdCx0LGUpfV9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKHQsZSxy''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fc2libGluZ3MuZmluZChpPT5pLl9jYW5SZWNlaXZlKHQsZSxyKSl9X2NhblJlY2VpdmUodCxlLHIpe2lmKCF0aGlzLl9kb21SZWN0fHwhblgodGhpcy5fZG9tUmVjdCxlLHIpfHwhdGhpcy5lbnRlclByZWRpY2F0ZSh0LHRoaXMpKXJldHVybiExO2NvbnN0IGk9dGhp''@;'; put 'put ''cy5fZ2V0U2hhZG93Um9vdCgpLmVsZW1lbnRGcm9tUG9pbnQoZSxyKTtyZXR1cm4hIWkmJihpPT09dGhpcy5fY29udGFpbmVyfHx0aGlzLl9jb250YWluZXIuY29udGFpbnMoaSkpfV9zdGFydFJlY2VpdmluZyh0LGUpe2NvbnN0IHI9dGhpcy5fYWN0aXZlU2libGluZ3M7IXIuaGFzKHQpJiZl''@;'; put 'put ''LmV2ZXJ5KGk9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaSx0aGlzKXx8dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGkpPi0xKSYmKHIuYWRkKHQpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQubmV4''@;'; put 'put ''dCh7aW5pdGlhdG9yOnQscmVjZWl2ZXI6dGhpcyxpdGVtczplfSkpfV9zdG9wUmVjZWl2aW5nKHQpe3RoaXMuX2FjdGl2ZVNpYmxpbmdzLmRlbGV0ZSh0KSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5uZXh0KHtp''@;'; put 'put ''bml0aWF0b3I6dCxyZWNlaXZlcjp0aGlzfSl9X2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl7dGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZSh0PT57aWYodGhpcy5pc0Ry''@;'; put 'put ''YWdnaW5nKCkpe2NvbnN0IGU9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbCh0KTtlJiZ0aGlzLl9zb3J0U3RyYXRlZ3kudXBkYXRlT25TY3JvbGwoZS50b3AsZS5sZWZ0KX1lbHNlIHRoaXMuaXNSZWNlaXZpbmcoKSYmdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKX0pfV9n''@;'; put 'put ''ZXRTaGFkb3dSb290KCl7aWYoIXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Qpe2NvbnN0IHQ9S0sodGhpcy5fY29udGFpbmVyKTt0aGlzLl9jYWNoZWRTaGFkb3dSb290PXR8fHRoaXMuX2RvY3VtZW50fXJldHVybiB0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9ub3RpZnlSZWNlaXZpbmdTaWJsaW5n''@;'; put 'put ''cygpe2NvbnN0IHQ9dGhpcy5fc29ydFN0cmF0ZWd5LmdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKS5maWx0ZXIoZT0+ZS5pc0RyYWdnaW5nKCkpO3RoaXMuX3NpYmxpbmdzLmZvckVhY2goZT0+ZS5fc3RhcnRSZWNlaXZpbmcodGhpcyx0KSl9fWZ1bmN0aW9uIEMzZShuLHQpe2NvbnN0e3RvcDpl''@;'; put 'put ''LGJvdHRvbTpyLGhlaWdodDppfT1uLGE9LjA1Kmk7cmV0dXJuIHQ+PWUtYSYmdDw9ZSthP1BmLlVQOnQ+PXItYSYmdDw9cithP1BmLkRPV046UGYuTk9ORX1mdW5jdGlvbiBTM2Uobix0KXtjb25zdHtsZWZ0OmUscmlnaHQ6cix3aWR0aDppfT1uLGE9LjA1Kmk7cmV0dXJuIHQ+PWUtYSYmdDw9''@;'; put 'put ''ZSthP1JkLkxFRlQ6dD49ci1hJiZ0PD1yK2E/UmQuUklHSFQ6UmQuTk9ORX1jb25zdCBRVD17Y2FwdHVyZTohMH0sb1g9e3Bhc3NpdmU6ITEsY2FwdHVyZTohMH07bGV0IGRaZT0oKCk9PntjbGFzcyBue3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3Rh''@;'; put 'put ''dGljIFx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsiY2RrLWRyYWctcmVzZXRzLWNvbnRhaW5lciIsIiJdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7fSxzdHlsZXM6WyJAbGF5ZXIgY2RrLXJlc2V0c3su''@;'; put 'put ''Y2RrLWRyYWctcHJldmlld3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowO2NvbG9yOmluaGVyaXQ7aW5zZXQ6YXV0b319LmNkay1kcmFnLXBsYWNlaG9sZGVyICosLmNkay1kcmFnLXByZXZpZXcgKntwb2ludGVyLWV2ZW50czpub25lICFpbXBvcnRhbnR9XG4iXSxlbmNh''@;'; put 'put ''cHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX1yZXR1cm4gbn0pKCksc1g9KCgpPT57Y2xhc3Mgbntfbmdab25lPUpuKEphKTtfZG9jdW1lbnQ9Sm4oWHMpO19zdHlsZUxvYWRlcj1KbihZZmUpO19yZW5kZXJlcj1KbihIMykuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKTtfY2xlYW51''@;'; put 'put ''cERvY3VtZW50VG91Y2htb3ZlO19kcm9wSW5zdGFuY2VzPW5ldyBTZXQ7X2RyYWdJbnN0YW5jZXM9bmV3IFNldDtfYWN0aXZlRHJhZ0luc3RhbmNlcz1kaChbXSk7X2dsb2JhbExpc3RlbmVycztfZHJhZ2dpbmdQcmVkaWNhdGU9ZT0+ZS5pc0RyYWdnaW5nKCk7X2RvbU5vZGVzVG9EaXJlY3Rp''@;'; put 'put ''dmVzPW51bGw7cG9pbnRlck1vdmU9bmV3IHVyO3BvaW50ZXJVcD1uZXcgdXI7c2Nyb2xsPW5ldyB1cjtjb25zdHJ1Y3Rvcigpe31yZWdpc3RlckRyb3BDb250YWluZXIoZSl7dGhpcy5fZHJvcEluc3RhbmNlcy5oYXMoZSl8fHRoaXMuX2Ryb3BJbnN0YW5jZXMuYWRkKGUpfXJlZ2lzdGVyRHJh''@;'; put 'put ''Z0l0ZW0oZSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5hZGQoZSksMT09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fY2xlYW51cERvY3VtZW50VG91Y2htb3ZlPy4oKSx0aGlzLl9jbGVhbnVwRG9jdW1lbnRUb3VjaG1v''@;'; put 'put ''dmU9cnYodGhpcy5fcmVuZGVyZXIsdGhpcy5fZG9jdW1lbnQsInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLG9YKX0pfXJlbW92ZURyb3BDb250YWluZXIoZSl7dGhpcy5fZHJvcEluc3RhbmNlcy5kZWxldGUoZSl9cmVtb3ZlRHJhZ0l0ZW0oZSl7dGhpcy5f''@;'; put 'put ''ZHJhZ0luc3RhbmNlcy5kZWxldGUoZSksdGhpcy5zdG9wRHJhZ2dpbmcoZSksMD09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fY2xlYW51cERvY3VtZW50VG91Y2htb3ZlPy4oKX1zdGFydERyYWdnaW5nKGUscil7aWYoISh0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkuaW5k''@;'; put 'put ''ZXhPZihlKT4tMSkmJih0aGlzLl9zdHlsZUxvYWRlci5sb2FkKGRaZSksdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy51cGRhdGUoaT0+Wy4uLmksZV0pLDE9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkubGVuZ3RoKSl7Y29uc3QgaT1yLnR5cGUuc3RhcnRzV2l0aCgidG91Y2giKSxh''@;'; put 'put ''PW09PnRoaXMucG9pbnRlclVwLm5leHQobSksYz1bWyJzY3JvbGwiLG09PnRoaXMuc2Nyb2xsLm5leHQobSksUVRdLFsic2VsZWN0c3RhcnQiLHRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZyxvWF1dO2k/Yy5wdXNoKFsidG91Y2hlbmQiLGEsUVRdLFsidG91Y2hjYW5jZWwiLGEs''@;'; put 'put ''UVRdKTpjLnB1c2goWyJtb3VzZXVwIixhLFFUXSksaXx8Yy5wdXNoKFsibW91c2Vtb3ZlIixtPT50aGlzLnBvaW50ZXJNb3ZlLm5leHQobSksb1hdKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nbG9iYWxMaXN0ZW5lcnM9Yy5tYXAoKFttLEMsUF0pPT5ydih0''@;'; put 'put ''aGlzLl9yZW5kZXJlcix0aGlzLl9kb2N1bWVudCxtLEMsUCkpfSl9fXN0b3BEcmFnZ2luZyhlKXt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnVwZGF0ZShyPT57Y29uc3QgaT1yLmluZGV4T2YoZSk7cmV0dXJuIGk+LTE/KHIuc3BsaWNlKGksMSksWy4uLnJdKTpyfSksMD09PXRoaXMuX2Fj''@;'; put 'put ''dGl2ZURyYWdJbnN0YW5jZXMoKS5sZW5ndGgmJnRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCl9aXNEcmFnZ2luZyhlKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmluZGV4T2YoZSk+LTF9c2Nyb2xsZWQoZSl7Y29uc3Qgcj1bdGhpcy5zY3JvbGxdO3JldHVybiBlJiZl''@;'; put 'put ''IT09dGhpcy5fZG9jdW1lbnQmJnIucHVzaChuZXcgRmkoaT0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgYT1ydih0aGlzLl9yZW5kZXJlcixlLCJzY3JvbGwiLGM9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkubGVuZ3RoJiZpLm5leHQoYyl9LFFUKTty''@;'; put 'put ''ZXR1cm4oKT0+e2EoKX19KSkpLFdUKC4uLnIpfXJlZ2lzdGVyRGlyZWN0aXZlTm9kZShlLHIpe3RoaXMuX2RvbU5vZGVzVG9EaXJlY3RpdmVzPz89bmV3IFdlYWtNYXAsdGhpcy5fZG9tTm9kZXNUb0RpcmVjdGl2ZXMuc2V0KGUscil9cmVtb3ZlRGlyZWN0aXZlTm9kZShlKXt0aGlzLl9kb21O''@;'; put 'put ''b2Rlc1RvRGlyZWN0aXZlcz8uZGVsZXRlKGUpfWdldERyYWdEaXJlY3RpdmVGb3JOb2RlKGUpe3JldHVybiB0aGlzLl9kb21Ob2Rlc1RvRGlyZWN0aXZlcz8uZ2V0KGUpfHxudWxsfW5nT25EZXN0cm95KCl7dGhpcy5fZHJhZ0luc3RhbmNlcy5mb3JFYWNoKGU9PnRoaXMucmVtb3ZlRHJhZ0l0''@;'; put 'put ''ZW0oZSkpLHRoaXMuX2Ryb3BJbnN0YW5jZXMuZm9yRWFjaChlPT50aGlzLnJlbW92ZURyb3BDb250YWluZXIoZSkpLHRoaXMuX2RvbU5vZGVzVG9EaXJlY3RpdmVzPW51bGwsdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLnBvaW50ZXJNb3ZlLmNvbXBsZXRlKCksdGhpcy5wb2lu''@;'; put 'put ''dGVyVXAuY29tcGxldGUoKX1fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nPWU9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzKCkubGVuZ3RoPjAmJmUucHJldmVudERlZmF1bHQoKX07X3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcj1lPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNl''@;'; put 'put ''cygpLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLnNvbWUodGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGUpJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5wb2ludGVyTW92ZS5uZXh0KGUpKX07X2NsZWFyR2xvYmFsTGlzdGVuZXJzKCl7dGhpcy5fZ2xvYmFsTGlzdGVuZXJz''@;'; put 'put ''Py5mb3JFYWNoKGU9PmUoKSksdGhpcy5fZ2xvYmFsTGlzdGVuZXJzPXZvaWQgMH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1y''@;'; put 'put ''ZXR1cm4gbn0pKCk7Y29uc3QgaFplPXtkcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjV9O2xldCBySD0oKCk9PntjbGFzcyBue19kb2N1bWVudD1KbihYcyk7X25nWm9uZT1KbihKYSk7X3ZpZXdwb3J0UnVsZXI9Sm4oUUYpO19kcmFnRHJvcFJl''@;'; put 'put ''Z2lzdHJ5PUpuKHNYKTtfcmVuZGVyZXI9Sm4oSDMpLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCk7Y29uc3RydWN0b3IoKXt9Y3JlYXRlRHJhZyhlLHI9aFplKXtyZXR1cm4gbmV3IGFaZShlLHIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5f''@;'; put 'put ''ZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9yZW5kZXJlcil9Y3JlYXRlRHJvcExpc3QoZSl7cmV0dXJuIG5ldyBjWmUoZSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gbn0pKCk7Y29uc3QgZUE9bmV3IHdyKCJDREtfRFJBR19QQVJFTlQiKSxNM2U9bmV3IHdyKCJDZGtEcmFnSGFuZGxl''@;'; put 'put ''Iik7bGV0IHgzZT0oKCk9PntjbGFzcyBue2VsZW1lbnQ9Sm4oemkpO19wYXJlbnREcmFnPUpuKGVBLHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pO19kcmFnRHJvcFJlZ2lzdHJ5PUpuKHNYKTtfc3RhdGVDaGFuZ2VzPW5ldyB1cjtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJs''@;'; put 'put ''ZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQodGhpcyl9X2Rpc2FibGVkPSExO2NvbnN0cnVjdG9yKCl7dGhpcy5fcGFyZW50RHJhZz8uX2FkZEhhbmRsZSh0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXtpZighdGhpcy5fcGFyZW50RHJh''@;'; put 'put ''Zyl7bGV0IGU9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2U7KXtjb25zdCByPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuZ2V0RHJhZ0RpcmVjdGl2ZUZvck5vZGUoZSk7aWYocil7dGhpcy5fcGFyZW50RHJhZz1yLHIuX2FkZEhhbmRsZSh0aGlzKTticmVh''@;'; put 'put ''a31lPWUucGFyZW50RWxlbWVudH19fW5nT25EZXN0cm95KCl7dGhpcy5fcGFyZW50RHJhZz8uX3JlbW92ZUhhbmRsZSh0aGlzKSx0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVk''@;'; put 'put ''aXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6WzIsImNka0RyYWdIYW5kbGVEaXNhYmxlZCIsImRpc2FibGVkIixZMV19LGZlYXR1cmVzOltzYShbe3Byb3ZpZGU6''@;'; put 'put ''TTNlLHVzZUV4aXN0aW5nOm59XSldfSl9cmV0dXJuIG59KSgpO2NvbnN0IGxYPW5ldyB3cigiQ0RLX0RSQUdfQ09ORklHIiksY1g9bmV3IHdyKCJDZGtEcm9wTGlzdCIpO2xldCB1WD0oKCk9PntjbGFzcyBue2VsZW1lbnQ9Sm4oemkpO2Ryb3BDb250YWluZXI9Sm4oY1gse29wdGlvbmFsOiEw''@;'; put 'put ''LHNraXBTZWxmOiEwfSk7X25nWm9uZT1KbihKYSk7X3ZpZXdDb250YWluZXJSZWY9Sm4oTm4pO19kaXI9Sm4oSXcse29wdGlvbmFsOiEwfSk7X2NoYW5nZURldGVjdG9yUmVmPUpuKEZzKTtfc2VsZkhhbmRsZT1KbihNM2Use29wdGlvbmFsOiEwLHNlbGY6ITB9KTtfcGFyZW50RHJhZz1Kbihl''@;'; put 'put ''QSx7b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KTtfZHJhZ0Ryb3BSZWdpc3RyeT1KbihzWCk7X2Rlc3Ryb3llZD1uZXcgdXI7X2hhbmRsZXM9bmV3IHhpKFtdKTtfcHJldmlld1RlbXBsYXRlO19wbGFjZWhvbGRlclRlbXBsYXRlO19kcmFnUmVmO2RhdGE7bG9ja0F4aXM7cm9vdEVsZW1lbnRT''@;'; put 'put ''ZWxlY3Rvcjtib3VuZGFyeUVsZW1lbnQ7ZHJhZ1N0YXJ0RGVsYXk7ZnJlZURyYWdQb3NpdGlvbjtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuZHJvcENvbnRhaW5lcnx8IXRoaXMuZHJvcENvbnRhaW5lci5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGUpe3Ro''@;'; put 'put ''aXMuX2Rpc2FibGVkPWUsdGhpcy5fZHJhZ1JlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZH1fZGlzYWJsZWQ7Y29uc3RyYWluUG9zaXRpb247cHJldmlld0NsYXNzO3ByZXZpZXdDb250YWluZXI7c2NhbGU9MTtzdGFydGVkPW5ldyBZcjtyZWxlYXNlZD1uZXcgWXI7ZW5kZWQ9bmV3IFlyO2Vu''@;'; put 'put ''dGVyZWQ9bmV3IFlyO2V4aXRlZD1uZXcgWXI7ZHJvcHBlZD1uZXcgWXI7bW92ZWQ9bmV3IEZpKGU9Pntjb25zdCByPXRoaXMuX2RyYWdSZWYubW92ZWQucGlwZShYYShpPT4oe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjppLnBvaW50ZXJQb3NpdGlvbixldmVudDppLmV2ZW50LGRlbHRh''@;'; put 'put ''OmkuZGVsdGEsZGlzdGFuY2U6aS5kaXN0YW5jZX0pKSkuc3Vic2NyaWJlKGUpO3JldHVybigpPT57ci51bnN1YnNjcmliZSgpfX0pO19pbmplY3Rvcj1KbihIbyk7Y29uc3RydWN0b3IoKXtjb25zdCBlPXRoaXMuZHJvcENvbnRhaW5lcixyPUpuKGxYLHtvcHRpb25hbDohMH0pLGk9Sm4ockgp''@;'; put 'put ''O3RoaXMuX2RyYWdSZWY9aS5jcmVhdGVEcmFnKHRoaXMuZWxlbWVudCx7ZHJhZ1N0YXJ0VGhyZXNob2xkOnImJm51bGwhPXIuZHJhZ1N0YXJ0VGhyZXNob2xkP3IuZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDpyJiZudWxsIT1yLnBvaW50ZXJE''@;'; put 'put ''aXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ/ci5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjUsekluZGV4OnI/LnpJbmRleH0pLHRoaXMuX2RyYWdSZWYuZGF0YT10aGlzLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVnaXN0ZXJEaXJlY3RpdmVOb2RlKHRoaXMuZWxlbWVudC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LHRoaXMpLHImJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKHIpLGUmJih0aGlzLl9kcmFnUmVmLl93aXRoRHJvcENvbnRhaW5lcihlLl9kcm9wTGlzdFJlZiksZS5hZGRJdGVtKHRoaXMpLGUuX2Ryb3BMaXN0UmVmLmJlZm9yZVN0YXJ0ZWQucGlwZSgkMSh0aGlzLl9kZXN0cm95ZWQp''@;'; put 'put ''KS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9kcmFnUmVmLnNjYWxlPXRoaXMuc2NhbGV9KSksdGhpcy5fc3luY0lucHV0cyh0aGlzLl9kcmFnUmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJhZ1JlZil9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0''@;'; put 'put ''UGxhY2Vob2xkZXJFbGVtZW50KCl9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRSb290RWxlbWVudCgpfXJlc2V0KCl7dGhpcy5fZHJhZ1JlZi5yZXNldCgpfWdldEZyZWVEcmFnUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRGcmVlRHJhZ1Bvc2l0''@;'; put 'put ''aW9uKCl9c2V0RnJlZURyYWdQb3NpdGlvbihlKXt0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24oZSl9bmdBZnRlclZpZXdJbml0KCl7VmcoKCk9Pnt0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVyKCksdGhpcy5fZHJhZ1JlZi5zY2Fs''@;'; put 'put ''ZT10aGlzLnNjYWxlLHRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9LHtpbmplY3Rvcjp0aGlzLl9pbmplY3Rvcn0pfW5nT25DaGFuZ2VzKGUpe2NvbnN0IHI9ZS5yb290RWxlbWVudFNlbGVjdG9y''@;'; put 'put ''LGk9ZS5mcmVlRHJhZ1Bvc2l0aW9uO3ImJiFyLmZpcnN0Q2hhbmdlJiZ0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX2RyYWdSZWYuc2NhbGU9dGhpcy5zY2FsZSxpJiYhaS5maXJzdENoYW5nZSYmdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFn''@;'; put 'put ''UG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1uZ09uRGVzdHJveSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhpcyksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEaXJlY3RpdmVOb2RlKHRoaXMuZWxlbWVudC5uYXRpdmVF''@;'; put 'put ''bGVtZW50KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9oYW5kbGVzLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKX0pfV9hZGRIYW5kbGUoZSl7Y29uc3Qg''@;'; put 'put ''cj10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCk7ci5wdXNoKGUpLHRoaXMuX2hhbmRsZXMubmV4dChyKX1fcmVtb3ZlSGFuZGxlKGUpe2NvbnN0IHI9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpLGk9ci5pbmRleE9mKGUpO2k+LTEmJihyLnNwbGljZShpLDEpLHRoaXMuX2hhbmRsZXMubmV4dChy''@;'; put 'put ''KSl9X3NldFByZXZpZXdUZW1wbGF0ZShlKXt0aGlzLl9wcmV2aWV3VGVtcGxhdGU9ZX1fcmVzZXRQcmV2aWV3VGVtcGxhdGUoZSl7ZT09PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSYmKHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1udWxsKX1fc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShlKXt0aGlzLl9w''@;'; put 'put ''bGFjZWhvbGRlclRlbXBsYXRlPWV9X3Jlc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShlKXtlPT09dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSYmKHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bnVsbCl9X3VwZGF0ZVJvb3RFbGVtZW50KCl7Y29uc3QgZT10aGlzLmVsZW1lbnQubmF0aXZlRWxl''@;'; put 'put ''bWVudDtsZXQgcj1lO3RoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmKHI9dm9pZCAwIT09ZS5jbG9zZXN0P2UuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpOmUucGFyZW50RWxlbWVudD8uY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVmLndp''@;'; put 'put ''dGhSb290RWxlbWVudChyfHxlKX1fZ2V0Qm91bmRhcnlFbGVtZW50KCl7Y29uc3QgZT10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdChlKTpUNihlKTpudWxsfV9zeW5jSW5wdXRzKGUpe2Uu''@;'; put 'put ''YmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9PntpZighZS5pc0RyYWdnaW5nKCkpe2NvbnN0IHI9dGhpcy5fZGlyLGk9dGhpcy5kcmFnU3RhcnREZWxheSxhPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYs''@;'; put 'put ''Y29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLGM9dGhpcy5fcHJldmlld1RlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9w''@;'; put 'put ''cmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6dGhpcy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGw7ZS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGUubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxlLnNjYWxlPXRo''@;'; put 'put ''aXMuc2NhbGUsZS5kcmFnU3RhcnREZWxheT0ib2JqZWN0Ij09dHlwZW9mIGkmJmk/aTpudihpKSxlLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29uc3RyYWluUG9zaXRpb24sZS5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsZS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJv''@;'; put 'put ''dW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShhKS53aXRoUHJldmlld1RlbXBsYXRlKGMpLndpdGhQcmV2aWV3Q29udGFpbmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLHImJmUud2l0aERpcmVjdGlvbihyLnZhbHVlKX19KSxlLmJlZm9yZVN0YXJ0''@;'; put 'put ''ZWQucGlwZShHMygxKSkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fcGFyZW50RHJhZylyZXR1cm4gdm9pZCBlLndpdGhQYXJlbnQodGhpcy5fcGFyZW50RHJhZy5fZHJhZ1JlZik7bGV0IHI9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO3I7KXtjb25zdCBp''@;'; put 'put ''PXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuZ2V0RHJhZ0RpcmVjdGl2ZUZvck5vZGUocik7aWYoaSl7ZS53aXRoUGFyZW50KGkuX2RyYWdSZWYpO2JyZWFrfXI9ci5wYXJlbnRFbGVtZW50fX0pfV9oYW5kbGVFdmVudHMoZSl7ZS5zdGFydGVkLnN1YnNjcmliZShyPT57dGhpcy5zdGFydGVkLmVt''@;'; put 'put ''aXQoe3NvdXJjZTp0aGlzLGV2ZW50OnIuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUucmVsZWFzZWQuc3Vic2NyaWJlKHI9Pnt0aGlzLnJlbGVhc2VkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OnIuZXZlbnR9KX0pLGUuZW5kZWQuc3Vic2NyaWJl''@;'; put 'put ''KHI9Pnt0aGlzLmVuZGVkLmVtaXQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOnIuZGlzdGFuY2UsZHJvcFBvaW50OnIuZHJvcFBvaW50LGV2ZW50OnIuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUuZW50ZXJlZC5zdWJzY3JpYmUocj0+e3RoaXMuZW50''@;'; put 'put ''ZXJlZC5lbWl0KHtjb250YWluZXI6ci5jb250YWluZXIuZGF0YSxpdGVtOnRoaXMsY3VycmVudEluZGV4OnIuY3VycmVudEluZGV4fSl9KSxlLmV4aXRlZC5zdWJzY3JpYmUocj0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjpyLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpc30pfSksZS5k''@;'; put 'put ''cm9wcGVkLnN1YnNjcmliZShyPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ci5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpyLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpyLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOnIuY29udGFpbmVyLmRh''@;'; put 'put ''dGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpyLmlzUG9pbnRlck92ZXJDb250YWluZXIsaXRlbTp0aGlzLGRpc3RhbmNlOnIuZGlzdGFuY2UsZHJvcFBvaW50OnIuZHJvcFBvaW50LGV2ZW50OnIuZXZlbnR9KX0pfV9hc3NpZ25EZWZhdWx0cyhlKXtjb25zdHtsb2NrQXhpczpyLGRyYWdTdGFy''@;'; put 'put ''dERlbGF5OmksY29uc3RyYWluUG9zaXRpb246YSxwcmV2aWV3Q2xhc3M6Yyxib3VuZGFyeUVsZW1lbnQ6bSxkcmFnZ2luZ0Rpc2FibGVkOkMscm9vdEVsZW1lbnRTZWxlY3RvcjpQLHByZXZpZXdDb250YWluZXI6WX09ZTt0aGlzLmRpc2FibGVkPUM/PyExLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9''@;'; put 'put ''aXx8MCxyJiYodGhpcy5sb2NrQXhpcz1yKSxhJiYodGhpcy5jb25zdHJhaW5Qb3NpdGlvbj1hKSxjJiYodGhpcy5wcmV2aWV3Q2xhc3M9YyksbSYmKHRoaXMuYm91bmRhcnlFbGVtZW50PW0pLFAmJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9UCksWSYmKHRoaXMucHJldmlld0NvbnRhaW5l''@;'; put 'put ''cj1ZKX1fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKXt0aGlzLl9oYW5kbGVzLnBpcGUoRTAoZT0+e2NvbnN0IHI9ZS5tYXAoaT0+aS5lbGVtZW50KTt0aGlzLl9zZWxmSGFuZGxlJiZ0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJnIucHVzaCh0aGlzLmVsZW1lbnQpLHRoaXMuX2RyYWdSZWYud2l0''@;'; put 'put ''aEhhbmRsZXMocil9KSxEZChlPT5XVCguLi5lLm1hcChyPT5yLl9zdGF0ZUNoYW5nZXMucGlwZShrZihyKSkpKSksJDEodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGU9Pntjb25zdCByPXRoaXMuX2RyYWdSZWYsaT1lLmVsZW1lbnQubmF0aXZlRWxlbWVudDtlLmRpc2FibGVkP3IuZGlz''@;'; put 'put ''YWJsZUhhbmRsZShpKTpyLmVuYWJsZUhhbmRsZShpKX0pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWRyYWciXSxo''@;'; put 'put ''b3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezImciYmYnIoImNkay1kcmFnLWRpc2FibGVkIixpLmRpc2FibGVkKSgiY2RrLWRyYWctZHJhZ2dpbmciLGkuX2RyYWdSZWYuaXNEcmFnZ2luZygpKX0saW5wdXRzOntkYXRhOlswLCJjZGtEcmFnRGF0YSIsImRhdGEiXSxsb2Nr''@;'; put 'put ''QXhpczpbMCwiY2RrRHJhZ0xvY2tBeGlzIiwibG9ja0F4aXMiXSxyb290RWxlbWVudFNlbGVjdG9yOlswLCJjZGtEcmFnUm9vdEVsZW1lbnQiLCJyb290RWxlbWVudFNlbGVjdG9yIl0sYm91bmRhcnlFbGVtZW50OlswLCJjZGtEcmFnQm91bmRhcnkiLCJib3VuZGFyeUVsZW1lbnQiXSxkcmFn''@;'; put 'put ''U3RhcnREZWxheTpbMCwiY2RrRHJhZ1N0YXJ0RGVsYXkiLCJkcmFnU3RhcnREZWxheSJdLGZyZWVEcmFnUG9zaXRpb246WzAsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiZnJlZURyYWdQb3NpdGlvbiJdLGRpc2FibGVkOlsyLCJjZGtEcmFnRGlzYWJsZWQiLCJkaXNhYmxlZCIsWTFdLGNv''@;'; put 'put ''bnN0cmFpblBvc2l0aW9uOlswLCJjZGtEcmFnQ29uc3RyYWluUG9zaXRpb24iLCJjb25zdHJhaW5Qb3NpdGlvbiJdLHByZXZpZXdDbGFzczpbMCwiY2RrRHJhZ1ByZXZpZXdDbGFzcyIsInByZXZpZXdDbGFzcyJdLHByZXZpZXdDb250YWluZXI6WzAsImNka0RyYWdQcmV2aWV3Q29udGFpbmVy''@;'; put 'put ''IiwicHJldmlld0NvbnRhaW5lciJdLHNjYWxlOlsyLCJjZGtEcmFnU2NhbGUiLCJzY2FsZSIsJFRlXX0sb3V0cHV0czp7c3RhcnRlZDoiY2RrRHJhZ1N0YXJ0ZWQiLHJlbGVhc2VkOiJjZGtEcmFnUmVsZWFzZWQiLGVuZGVkOiJjZGtEcmFnRW5kZWQiLGVudGVyZWQ6ImNka0RyYWdFbnRlcmVk''@;'; put 'put ''IixleGl0ZWQ6ImNka0RyYWdFeGl0ZWQiLGRyb3BwZWQ6ImNka0RyYWdEcm9wcGVkIixtb3ZlZDoiY2RrRHJhZ01vdmVkIn0sZXhwb3J0QXM6WyJjZGtEcmFnIl0sZmVhdHVyZXM6W3NhKFt7cHJvdmlkZTplQSx1c2VFeGlzdGluZzpufV0pLFd0XX0pfXJldHVybiBufSkoKTtjb25zdCBkWD1u''@;'; put 'put ''ZXcgd3IoIkNka0Ryb3BMaXN0R3JvdXAiKTtsZXQgRTNlPSgoKT0+e2NsYXNzIG57X2l0ZW1zPW5ldyBTZXQ7ZGlzYWJsZWQ9ITE7bmdPbkRlc3Ryb3koKXt0aGlzLl9pdGVtcy5jbGVhcigpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1''@;'; put 'put ''MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6WzIsImNka0Ryb3BMaXN0R3JvdXBEaXNhYmxlZCIsImRpc2FibGVkIixZMV19LGV4cG9ydEFzOlsiY2RrRHJvcExpc3RHcm91cCJdLGZlYXR1cmVzOltzYShb''@;'; put 'put ''e3Byb3ZpZGU6ZFgsdXNlRXhpc3Rpbmc6bn1dKV19KX1yZXR1cm4gbn0pKCksVDNlPSgoKT0+e2NsYXNzIG57ZWxlbWVudD1Kbih6aSk7X2NoYW5nZURldGVjdG9yUmVmPUpuKEZzKTtfc2Nyb2xsRGlzcGF0Y2hlcj1KbihKRik7X2Rpcj1KbihJdyx7b3B0aW9uYWw6ITB9KTtfZ3JvdXA9Sm4o''@;'; put 'put ''ZFgse29wdGlvbmFsOiEwLHNraXBTZWxmOiEwfSk7X2xhdGVzdFNvcnRlZFJlZnM7X2Rlc3Ryb3llZD1uZXcgdXI7X3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQ7c3RhdGljIF9kcm9wTGlzdHM9W107X2Ryb3BMaXN0UmVmO2Nvbm5lY3RlZFRvPVtdO2RhdGE7b3JpZW50YXRpb247aWQ9Sm4o''@;'; put 'put ''WFdlKS5nZXRJZCgiY2RrLWRyb3AtbGlzdC0iKTtsb2NrQXhpcztnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kcm9wTGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNh''@;'; put 'put ''YmxlZD1lfV9kaXNhYmxlZDtzb3J0aW5nRGlzYWJsZWQ7ZW50ZXJQcmVkaWNhdGU9KCk9PiEwO3NvcnRQcmVkaWNhdGU9KCk9PiEwO2F1dG9TY3JvbGxEaXNhYmxlZDthdXRvU2Nyb2xsU3RlcDtlbGVtZW50Q29udGFpbmVyU2VsZWN0b3I7ZHJvcHBlZD1uZXcgWXI7ZW50ZXJlZD1uZXcgWXI7''@;'; put 'put ''ZXhpdGVkPW5ldyBZcjtzb3J0ZWQ9bmV3IFlyO191bnNvcnRlZEl0ZW1zPW5ldyBTZXQ7Y29uc3RydWN0b3IoKXtjb25zdCBlPUpuKHJIKSxyPUpuKGxYLHtvcHRpb25hbDohMH0pO3RoaXMuX2Ryb3BMaXN0UmVmPWUuY3JlYXRlRHJvcExpc3QodGhpcy5lbGVtZW50KSx0aGlzLl9kcm9wTGlz''@;'; put 'put ''dFJlZi5kYXRhPXRoaXMsciYmdGhpcy5fYXNzaWduRGVmYXVsdHMociksdGhpcy5fZHJvcExpc3RSZWYuZW50ZXJQcmVkaWNhdGU9KGksYSk9PnRoaXMuZW50ZXJQcmVkaWNhdGUoaS5kYXRhLGEuZGF0YSksdGhpcy5fZHJvcExpc3RSZWYuc29ydFByZWRpY2F0ZT0oaSxhLGMpPT50aGlzLnNv''@;'; put 'put ''cnRQcmVkaWNhdGUoaSxhLmRhdGEsYy5kYXRhKSx0aGlzLl9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0aGlzLl9kcm9wTGlzdFJlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2Ryb3BMaXN0UmVmKSxuLl9kcm9wTGlzdHMucHVzaCh0aGlzKSx0aGlzLl9ncm91cCYmdGhpcy5fZ3Jv''@;'; put 'put ''dXAuX2l0ZW1zLmFkZCh0aGlzKX1hZGRJdGVtKGUpe3RoaXMuX3Vuc29ydGVkSXRlbXMuYWRkKGUpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZih0aGlzLmdldFNvcnRlZEl0ZW1zKCkubWFwKHI9PnIuX2RyYWdSZWYpKX1yZW1vdmVJdGVt''@;'; put 'put ''KGUpe2lmKHRoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKGUpLHRoaXMuX2xhdGVzdFNvcnRlZFJlZnMpe2NvbnN0IHI9dGhpcy5fbGF0ZXN0U29ydGVkUmVmcy5pbmRleE9mKGUuX2RyYWdSZWYpO3I+LTEmJih0aGlzLl9sYXRlc3RTb3J0ZWRSZWZzLnNwbGljZShyLDEpLHRoaXMuX3N5bmNJ''@;'; put 'put ''dGVtc1dpdGhSZWYodGhpcy5fbGF0ZXN0U29ydGVkUmVmcykpfX1nZXRTb3J0ZWRJdGVtcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3Vuc29ydGVkSXRlbXMpLnNvcnQoKGUscik9PmUuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyLl9k''@;'; put 'put ''cmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HPy0xOjEpfW5nT25EZXN0cm95KCl7Y29uc3QgZT1uLl9kcm9wTGlzdHMuaW5kZXhPZih0aGlzKTtlPi0xJiZuLl9kcm9wTGlzdHMuc3BsaWNlKGUsMSksdGhpcy5fZ3JvdXAmJnRoaXMu''@;'; put 'put ''X2dyb3VwLl9pdGVtcy5kZWxldGUodGhpcyksdGhpcy5fbGF0ZXN0U29ydGVkUmVmcz12b2lkIDAsdGhpcy5fdW5zb3J0ZWRJdGVtcy5jbGVhcigpLHRoaXMuX2Ryb3BMaXN0UmVmLmRpc3Bvc2UoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9z''@;'; put 'put ''ZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbihlKXt0aGlzLl9kaXImJnRoaXMuX2Rpci5jaGFuZ2UucGlwZShrZih0aGlzLl9kaXIudmFsdWUpLCQxKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT5lLndpdGhEaXJlY3Rpb24ocikpLGUuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9''@;'; put 'put ''Pntjb25zdCByPWZ1bmN0aW9uIHFXZShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX0odGhpcy5jb25uZWN0ZWRUbykubWFwKGk9PiJzdHJpbmciPT10eXBlb2YgaT9uLl9kcm9wTGlzdHMuZmluZChjPT5jLmlkPT09aSk6aSk7aWYodGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9p''@;'; put 'put ''dGVtcy5mb3JFYWNoKGk9PnstMT09PXIuaW5kZXhPZihpKSYmci5wdXNoKGkpfSksIXRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQpe2NvbnN0IGk9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5lbGVtZW50KS5tYXAoYT0+YS5n''@;'; put 'put ''ZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCk7dGhpcy5fZHJvcExpc3RSZWYud2l0aFNjcm9sbGFibGVQYXJlbnRzKGkpLHRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQ9ITB9aWYodGhpcy5lbGVtZW50Q29udGFpbmVyU2VsZWN0b3Ipe2NvbnN0IGk9dGhpcy5lbGVtZW50Lm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmVsZW1lbnRDb250YWluZXJTZWxlY3Rvcik7ZS53aXRoRWxlbWVudENvbnRhaW5lcihpKX1lLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsZS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGUuc29ydGluZ0Rpc2FibGVkPXRoaXMuc29ydGluZ0Rp''@;'; put 'put ''c2FibGVkLGUuYXV0b1Njcm9sbERpc2FibGVkPXRoaXMuYXV0b1Njcm9sbERpc2FibGVkLGUuYXV0b1Njcm9sbFN0ZXA9bnYodGhpcy5hdXRvU2Nyb2xsU3RlcCwyKSxlLmNvbm5lY3RlZFRvKHIuZmlsdGVyKGk9PmkmJmkhPT10aGlzKS5tYXAoaT0+aS5fZHJvcExpc3RSZWYpKS53aXRoT3Jp''@;'; put 'put ''ZW50YXRpb24odGhpcy5vcmllbnRhdGlvbil9KX1faGFuZGxlRXZlbnRzKGUpe2UuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKHRoaXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAocj0+ci5fZHJhZ1JlZikpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVm''@;'; put 'put ''Lm1hcmtGb3JDaGVjaygpfSksZS5lbnRlcmVkLnN1YnNjcmliZShyPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ci5pdGVtLmRhdGEsY3VycmVudEluZGV4OnIuY3VycmVudEluZGV4fSl9KSxlLmV4aXRlZC5zdWJzY3JpYmUocj0+e3RoaXMuZXhpdGVkLmVtaXQo''@;'; put 'put ''e2NvbnRhaW5lcjp0aGlzLGl0ZW06ci5pdGVtLmRhdGF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUuc29ydGVkLnN1YnNjcmliZShyPT57dGhpcy5zb3J0ZWQuZW1pdCh7cHJldmlvdXNJbmRleDpyLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OnIuY3Vy''@;'; put 'put ''cmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06ci5pdGVtLmRhdGF9KX0pLGUuZHJvcHBlZC5zdWJzY3JpYmUocj0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OnIucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ci5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6''@;'; put 'put ''ci5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpyLmNvbnRhaW5lci5kYXRhLGl0ZW06ci5pdGVtLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpyLmlzUG9pbnRlck92ZXJDb250YWluZXIsZGlzdGFuY2U6ci5kaXN0YW5jZSxkcm9wUG9pbnQ6ci5kcm9wUG9pbnQsZXZlbnQ6''@;'; put 'put ''ci5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksV1QoZS5yZWNlaXZpbmdTdGFydGVkLGUucmVjZWl2aW5nU3RvcHBlZCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2Fzc2lnbkRlZmF1bHRzKGUp''@;'; put 'put ''e2NvbnN0e2xvY2tBeGlzOnIsZHJhZ2dpbmdEaXNhYmxlZDppLHNvcnRpbmdEaXNhYmxlZDphLGxpc3RBdXRvU2Nyb2xsRGlzYWJsZWQ6YyxsaXN0T3JpZW50YXRpb246bX09ZTt0aGlzLmRpc2FibGVkPWk/PyExLHRoaXMuc29ydGluZ0Rpc2FibGVkPWE/PyExLHRoaXMuYXV0b1Njcm9sbERp''@;'; put 'put ''c2FibGVkPWM/PyExLHRoaXMub3JpZW50YXRpb249bXx8InZlcnRpY2FsIixyJiYodGhpcy5sb2NrQXhpcz1yKX1fc3luY0l0ZW1zV2l0aFJlZihlKXt0aGlzLl9sYXRlc3RTb3J0ZWRSZWZzPWUsdGhpcy5fZHJvcExpc3RSZWYud2l0aEl0ZW1zKGUpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdCIsIiJdLFsiY2RrLWRyb3AtbGlzdCJdXSxob3N0QXR0cnM6WzEsImNkay1kcm9wLWxpc3QiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihyLGkpezImciYmKFJyKCJpZCIsaS5pZCksYnIoImNkay1kcm9wLWxpc3QtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJjZGstZHJvcC1saXN0LWRyYWdnaW5nIixpLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkpKCJjZGstZHJvcC1saXN0LXJlY2VpdmluZyIsaS5fZHJvcExpc3RSZWYuaXNS''@;'; put 'put ''ZWNlaXZpbmcoKSkpfSxpbnB1dHM6e2Nvbm5lY3RlZFRvOlswLCJjZGtEcm9wTGlzdENvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxkYXRhOlswLCJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246WzAsImNka0Ryb3BMaXN0T3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiJd''@;'; put 'put ''LGlkOiJpZCIsbG9ja0F4aXM6WzAsImNka0Ryb3BMaXN0TG9ja0F4aXMiLCJsb2NrQXhpcyJdLGRpc2FibGVkOlsyLCJjZGtEcm9wTGlzdERpc2FibGVkIiwiZGlzYWJsZWQiLFkxXSxzb3J0aW5nRGlzYWJsZWQ6WzIsImNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkIiwic29ydGluZ0Rpc2Fi''@;'; put 'put ''bGVkIixZMV0sZW50ZXJQcmVkaWNhdGU6WzAsImNka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGUiLCJlbnRlclByZWRpY2F0ZSJdLHNvcnRQcmVkaWNhdGU6WzAsImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlzYWJsZWQ6WzIsImNka0Ryb3BM''@;'; put 'put ''aXN0QXV0b1Njcm9sbERpc2FibGVkIiwiYXV0b1Njcm9sbERpc2FibGVkIixZMV0sYXV0b1Njcm9sbFN0ZXA6WzAsImNka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXAiLCJhdXRvU2Nyb2xsU3RlcCJdLGVsZW1lbnRDb250YWluZXJTZWxlY3RvcjpbMCwiY2RrRHJvcExpc3RFbGVtZW50Q29udGFp''@;'; put 'put ''bmVyIiwiZWxlbWVudENvbnRhaW5lclNlbGVjdG9yIl19LG91dHB1dHM6e2Ryb3BwZWQ6ImNka0Ryb3BMaXN0RHJvcHBlZCIsZW50ZXJlZDoiY2RrRHJvcExpc3RFbnRlcmVkIixleGl0ZWQ6ImNka0Ryb3BMaXN0RXhpdGVkIixzb3J0ZWQ6ImNka0Ryb3BMaXN0U29ydGVkIn0sZXhwb3J0QXM6''@;'; put 'put ''WyJjZGtEcm9wTGlzdCJdLGZlYXR1cmVzOltzYShbe3Byb3ZpZGU6ZFgsdXNlVmFsdWU6dm9pZCAwfSx7cHJvdmlkZTpjWCx1c2VFeGlzdGluZzpufV0pXX0pfXJldHVybiBufSkoKSxBM2U9KCgpPT57Y2xhc3MgbntzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8''@;'; put 'put ''bil9O3N0YXRpYyBcdTAyNzVtb2Q9R2koe3R5cGU6bn0pO3N0YXRpYyBcdTAyNzVpbmo9em4oe3Byb3ZpZGVyczpbckhdLGltcG9ydHM6W0tXZV19KX1yZXR1cm4gbn0pKCk7Y29uc3QgQ289WyIqIl0sdlplPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxb''@;'; put 'put ''WyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLHlaZT1bImNsci1hY2NvcmRpb24tdGl0bGUsIGNsci1zdGVwLXRpdGxlIiwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb24iLCIqIl07ZnVuY3Rp''@;'; put 'put ''b24gX1plKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw5KSxrdCgiQHRvZ2dsZS5kb25lIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShpKSl9KSxyZSgxLCJkaXYi''@;'; put 'put ''LDEwKSxCcigyLDIpLGllKCkoKX0yJm4mJnllKCJAdG9nZ2xlIix2b2lkIDApfWZ1bmN0aW9uIGJaZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImRpdiIsMikoMiwiZGl2IiwzKSgzLCJidXR0b24iLDQsMCksaGwoNSwiYXN5bmMiKSxrdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGd0KGUpLG10KEVlKCkudG9nZ2xlUGFuZWwoKSl9KSxyZSg2LCJzcGFuIiw1KSxWdCg3LCJjZHMtaWNvbiIsNiksaWUoKSxCcig4KSxCcig5LDEpLGllKCkoKSxyZSgxMCwiZGl2Iiw3KSxjdCgxMSxfWmUsMywxLCJkaXYiLDgpLGllKCkoKSxpaSgpfWlmKDImbil7bGV0IGU7''@;'; put 'put ''Y29uc3Qgcj10LiRpbXBsaWNpdCxpPUVlKCk7YWUoKSx5ZSgibmdDbGFzcyIsaS5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhyKSksYWUoKSxScigicm9sZSIsaS5oZWFkaW5nRW5hYmxlZHx8aS5leHBsaWNpdEhlYWRpbmdMZXZlbD8iaGVhZGluZyI6bnVsbCkoImFyaWEtbGV2ZWwiLGkuaGVhZGlu''@;'; put 'put ''Z0VuYWJsZWR8fGkuZXhwbGljaXRIZWFkaW5nTGV2ZWw/aS5oZWFkaW5nTGV2ZWw6bnVsbCksYWUoKSxicigiY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIiwobnVsbD09KGU9UmMoNSwxNCxpLmFjY29yZGlvbkRlc2NyaXB0aW9uLmNoYW5nZXMpKT9udWxsOmUubGVuZ3Ro''@;'; put 'put ''KXx8aS5hY2NvcmRpb25EZXNjcmlwdGlvbi5sZW5ndGgpLHllKCJpZCIsaS5nZXRBY2NvcmRpb25IZWFkZXJJZChyLnRlbXBsYXRlSWQpKSgiZGlzYWJsZWQiLHIuZGlzYWJsZWQpLFJyKCJhcmlhLWNvbnRyb2xzIiwhci5kaXNhYmxlZCYmci5vcGVuP2kuZ2V0QWNjb3JkaW9uQ29udGVudElk''@;'; put 'put ''KHIudGVtcGxhdGVJZCk6bnVsbCkoImFyaWEtZXhwYW5kZWQiLHIub3BlbiksYWUoNykseWUoIkBza2lwSW5pdGlhbFJlbmRlciIsdm9pZCAwKSgiaWQiLGkuZ2V0QWNjb3JkaW9uQ29udGVudElkKHIudGVtcGxhdGVJZCkpLFJyKCJhcmlhLWhpZGRlbiIsIXIub3BlbikoImFyaWEtbGFiZWxs''@;'; put 'put ''ZWRieSIsaS5nZXRBY2NvcmRpb25IZWFkZXJJZChyLnRlbXBsYXRlSWQpKSxhZSgpLHllKCJuZ0lmIixyLm9wZW4pfX1jb25zdCB6WmU9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gVVplKG4sdCl7MSZuJiYocmkoMCksVnQoMSwic3BhbiIsMyksaWkoKSksMiZuJiYoYWUoKSx5ZSgiQHNw''@;'; put 'put ''aW5uZXIiLHZvaWQgMCkpfWZ1bmN0aW9uIFdaZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsInNwYW4iLDQpLGt0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpO3JldHVybiBtdChpLmxvYWRpbmdTdGF0ZUNoYW5nZShpLmJ1dHRv''@;'; put 'put ''blN0YXRlLkRFRkFVTFQpKX0pLGllKCksaWkoKX0yJm4mJihhZSgpLHllKCJAdmFsaWRhdGVkIix2b2lkIDApKX1mdW5jdGlvbiBaWmUobix0KXsxJm4mJihyZSgwLCJzcGFuIiw1KSxCcigxKSxpZSgpKSwyJm4mJnllKCJAZGVmYXVsdEJ1dHRvbiIsdm9pZCAwKX1mdW5jdGlvbiBZWmUobix0''@;'; put 'put ''KXtpZigxJm4mJihyaSgwKSxyZSgxLCJidXR0b24iLDEpLFZ0KDIsImNkcy1pY29uIiwyKSxpZSgpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCksUnIoImFyaWEtbGFiZWwiLGUuc2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsfHxlLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdFRvZ2ds''@;'; put 'put ''ZSksYWUoKSxScigidGl0bGUiLGUuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBHWmU9W1tbImNsci1zaWducG9zdC10aXRsZSJdXSwiKiJdLCRaZT1bImNsci1zaWducG9zdC10aXRsZSIsIioiXSxLWmU9W1tbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIi''@;'; put 'put ''XV0sW1sibGFiZWwiXV1dLFhaZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIHFaZShuLHQpezEmbiYmVnQoMCwibGFiZWwiKX1jb25zdCBKWmU9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIi''@;'; put 'put ''XV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLFFaZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRy''@;'; put 'put ''b2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gZVllKG4sdCl7MSZuJiZWdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIHRZZShuLHQpezEmbiYmKHJlKDAsImRpdiIsMyksQnIoMSwyKSxpZSgpKX1mdW5jdGlvbiBuWWUobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiw2KX1m''@;'; put 'put ''dW5jdGlvbiByWWUobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBpWWUobix0KXsxJm4mJkJyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gYVllKG4sdCl7MSZuJiZCcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBvWWUobix0''@;'; put 'put ''KXtpZigxJm4mJihyZSgwLCJkaXYiLDMpLGN0KDEsblllLDEsMCwiY2RzLWljb24iLDQpKDIsclllLDEsMCwiY2RzLWljb24iLDUpKDMsaVllLDEsMCwibmctY29udGVudCIsMCkoNCxhWWUsMSwwLCJuZy1jb250ZW50IiwwKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHllKCJuZ0lm''@;'; put 'put ''IixlLnNob3dJbnZhbGlkKSxhZSgpLHllKCJuZ0lmIixlLnNob3dWYWxpZCksYWUoKSx5ZSgibmdJZiIsZS5zaG93SW52YWxpZCksYWUoKSx5ZSgibmdJZiIsZS5zaG93VmFsaWQpfX1jb25zdCBzWWU9WyJjbHJLZXlGb2N1cyIsIiJdLGhZZT1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXRQ''@;'; put 'put ''cmVmaXgiLCIiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siIiwiY2xySW5wdXRTdWZmaXgiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGZZZT1bImxhYmVsIiwiW2NscklucHV0UHJlZml4''@;'; put 'put ''XSIsIltjbHJJbnB1dF0iLCJbY2xySW5wdXRTdWZmaXhdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gcFllKG4sdCl7MSZuJiZWdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGdZZShuLHQpezEmbiYmVnQoMCwi''@;'; put 'put ''Y2RzLWljb24iLDYpfWZ1bmN0aW9uIG1ZZShuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIHZZZShuLHQpezEmbiYmQnIoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIHlZZShuLHQpezEmbiYmQnIoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1m''@;'; put 'put ''dW5jdGlvbiBfWWUobix0KXsxJm4mJkJyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIEFZZShuLHQpezEmbiYmQnIoMCl9Y29uc3Qga1llPVsidGFiQ29udGVudFByb2plY3RlZFJlZiJdO2Z1bmN0aW9uIERZZShuLHQpe2lmKDEmbiYmKHJlKDAsInNlY3Rpb24iLDEpLEJy''@;'; put 'put ''KDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2JyKCJhY3RpdmUiLGUuYWN0aXZlKSx5ZSgiaWQiLGUudGFiQ29udGVudElkKSgiaGlkZGVuIiwhZS5hY3RpdmUpLFJyKCJhcmlhLWxhYmVsbGVkYnkiLGUuYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWhpZGRlbiIsIWUuYWN0aXZlKX19Y29uc3Qg''@;'; put 'put ''SVllPVsidGFiQ29udGVudFZpZXdDb250YWluZXIiXSxSWWU9W1tbImNsci10YWJzLWFjdGlvbnMiXV1dLExZZT1bImNsci10YWJzLWFjdGlvbnMiXTtmdW5jdGlvbiBPWWUobix0KXtpZigxJm4mJihyaSgwKSxyZSgxLCJsaSIsNSksamwoMiw2KSxpZSgpLGlpKCkpLDImbil7Y29uc3QgZT1F''@;'; put 'put ''ZSgpLiRpbXBsaWNpdDthZSgyKSx5ZSgibmdUZW1wbGF0ZU91dGxldCIsZS50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9fWZ1bmN0aW9uIFBZZShuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsT1llLDMsMSwibmctY29udGFpbmVyIiw0KSxpaSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1w''@;'; put 'put ''bGljaXQscj1FZSgpO2FlKCkseWUoIm5nSWYiLGUudGFic0lkPT09ci50YWJzSWQmJiFlLmluT3ZlcmZsb3cpfX1mdW5jdGlvbiBGWWUobix0KXsxJm4mJmpsKDAsNiksMiZuJiZ5ZSgibmdUZW1wbGF0ZU91dGxldCIsRWUoKS4kaW1wbGljaXQudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxh''@;'; put 'put ''dGUpfWZ1bmN0aW9uIEhZZShuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsRlllLDEsMSwibmctY29udGFpbmVyIiwxMyksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoMyk7YWUoKSx5ZSgibmdJZiIsZS50YWJzSWQ9PT1yLnRhYnNJZCYmZS5pbk92ZXJmbG93KX19ZnVuY3Rp''@;'; put 'put ''b24gTlllKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMiksa3QoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLFhtKSgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KGkpe2d0KGUpLEVlKCk7Y29uc3QgYT1kYSg0KTtyZXR1cm4gbXQoRWUoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGksYSkpfSwhMSxYbSkoImZvY3Vzb3V0IixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuY2xvc2VPbkZvY3VzT3V0KGkpKX0pLGN0KDEsSFllLDIsMSwibmctY29u''@;'; put 'put ''dGFpbmVyIiwzKSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0Zvck9mIixlLnRhYkxpbmtEaXJlY3RpdmVzKX19ZnVuY3Rpb24gVlllKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwiZGl2Iiw3KSgyLCJsaSIsOCkoMywiYnV0dG9uIiw5LDEpLGt0''@;'; put 'put ''KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuX21vdXNlZG93bj0hMCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkub3Blbk92ZXJmbG93T25Gb2N1cygpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUo''@;'; put 'put ''KS50b2dnbGVPdmVyZmxvd09uQ2xpY2soKSl9KSxWdCg1LCJjZHMtaWNvbiIsMTApLGllKCkoKSxjdCg2LE5ZZSwyLDEsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTEpLGllKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSgpLGJyKCJvcGVuIixlLnRvZ2dsZVNlcnZpY2Uub3Bl''@;'; put 'put ''biksYWUoMiksYnIoImFjdGl2ZSIsZS5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsZS50b2dnbGVTZXJ2aWNlLm9wZW4pLFJyKCJ0YWJpbmRleCIsZS5hY3RpdmVUYWJJbk92ZXJmbG93JiYhZS50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIixlLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5tb3JlKSxhZSgyKSxScigic3RhdHVzIixlLnRvZ2dsZVNlcnZpY2Uub3Blbj8iaW5mbyI6bnVsbCkoInRpdGxlIixlLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxhZSgpLHllKCJuZ0lmIixlLnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9uIEJZZShuLHQpe2lmKDEmbil7Y29uc3Qg''@;'; put 'put ''ZT1JbigpO3JlKDAsImJ1dHRvbiIsMyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLnRvZ2dsZUJ5QnV0dG9uKCkpfSksVnQoMSwiY2RzLWljb24iLDQpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7YnIoIm9uLWNvbGxhcHNlIixlLmNvbGxhcHNlZCksUnIo''@;'; put 'put ''ImFyaWEtY29udHJvbHMiLGUuY29udGVudElkKSgiYXJpYS1leHBhbmRlZCIsZS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixlLnRvZ2dsZUxhYmVsfHxlLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksYWUoKSxScigiZGlyZWN0aW9uIixlLmNvbGxhcHNlZD8icmln''@;'; put 'put ''aHQiOiJsZWZ0Iil9fWZ1bmN0aW9uIGpZZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsNSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmNvbGxhcHNlZD0hMSl9KSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO1JyKCJhcmlhLWNv''@;'; put 'put ''bnRyb2xzIixlLmNvbnRlbnRJZCkoImFyaWEtbGFiZWwiLGUudG9nZ2xlTGFiZWx8fGUuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKX19Y29uc3QgV1llPVsiY2xyVmVydGljYWxOYXZMaW5rIiwiIl0sWlllPVtbWyIiLCJjbHJWZXJ0aWNhbE5hdkljb24iLCIiXV0sIioi''@;'; put 'put ''XSxZWWU9WyJbY2xyVmVydGljYWxOYXZJY29uXSIsIioiXTtmdW5jdGlvbiBHWWUobix0KXtpZigxJm4mJihyZSgwLCJ0aCIsNCkoMSwic3BhbiIpLFRlKDIpLGllKCkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCksUnIoImFyaWEtbGFiZWwiLGUuZGF5KSxhZSgpLHZyKGUubmFy''@;'; put 'put ''cm93KX19ZnVuY3Rpb24gJFllKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwidGQiLDcpKDEsImNsci1kYXkiLDgpLGt0KCJzZWxlY3REYXkiLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgyKS5zZXRTZWxlY3RlZERheShpKSl9KSxpZSgpKCl9aWYoMiZuKXtjb25zdCBl''@;'; put 'put ''PXQuJGltcGxpY2l0O2FlKCkseWUoImNsckRheVZpZXciLGUpfX1mdW5jdGlvbiBLWWUobix0KXtpZigxJm4mJihyZSgwLCJ0ciIsNSksY3QoMSwkWWUsMiwxLCJ0ZCIsNiksaWUoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCkseWUoIm5nRm9yT2YiLGUpfX1mdW5jdGlvbiBYWWUo''@;'; put 'put ''bix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24iLDEwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS5pbmRleDtyZXR1cm4gbXQoRWUoKS5jaGFuZ2VNb250aChpKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLmluZGV4O3Jl''@;'; put 'put ''dHVybiBtdChFZSgpLm9uSG92ZXIoaSkpfSksVGUoMSksaWUoKX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQscj10LmluZGV4LGk9RWUoKTticigiaXMtc2VsZWN0ZWQiLGkuaXNTZWxlY3RlZChyKSkoImlzLXN0YXJ0LXJhbmdlIixpLmdldElzUmFuZ2VTdGFydE1vbnRoKHIpKSgiaXMt''@;'; put 'put ''ZW5kLXJhbmdlIixpLmdldElzUmFuZ2VFbmRNb250aChyKSkoImluLXJhbmdlIixpLmlzSW5SYW5nZShyKSkoImlzLXRvZGF5IixpLmNhbGVuZGFyWWVhcj09PWkuY3VycmVudENhbGVuZGFyWWVhciYmcj09PWkuY3VycmVudENhbGVuZGFyTW9udGgpLFJyKCJ0YWJpbmRleCIsaS5nZXRUYWJJ''@;'; put 'put ''bmRleChyKSksYWUoKSxNcigiICIsZSwiICIpfX1mdW5jdGlvbiBxWWUobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24iLDEwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkuY2hhbmdlWWVhcihpKSl9KSgi''@;'; put 'put ''bW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS5vbkhvdmVyKGkpKX0pLFRlKDEpLGllKCl9aWYoMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoKTticigiaXMtc2VsZWN0ZWQiLGU9PT1yLnNlbGVjdGVkU3RhcnRZZWFyfHxl''@;'; put 'put ''PT09ci5zZWxlY3RlZEVuZFllYXIpKCJpcy1zdGFydC1yYW5nZSIsci5nZXRJc1JhbmdlU3RhcnRZZWFyKGUpKSgiaXMtZW5kLXJhbmdlIixyLmdldElzUmFuZ2VFbmRZZWFyKGUpKSgiaW4tcmFuZ2UiLHIuaXNJblJhbmdlKGUpKSgiaXMtdG9kYXkiLHIuaXNDdXJyZW50Q2FsZW5kYXJZZWFy''@;'; put 'put ''KGUpKSxScigidGFiaW5kZXgiLHIuZ2V0VGFiSW5kZXgoZSkpLGFlKCksTXIoIiAiLGUsIiAiKX19ZnVuY3Rpb24gSlllKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwiYSIsNiksa3QoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBtdChFZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGkpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoMikub25SYW5nZU9wdGlvblNlbGVjdChpKSl9KSxUZSgyKSxpZSgpLGlpKCl9aWYoMiZuKXtjb25zdCBlPXQuJGlt''@;'; put 'put ''cGxpY2l0O2FlKCksUnIoImFyaWEtbGFiZWwiLG51bGw9PWU/bnVsbDplLmxhYmVsKSxhZSgpLE1yKCIgIixlLmxhYmVsLCIgIil9fWZ1bmN0aW9uIFFZZShuLHQpezEmbiYmamwoMCl9ZnVuY3Rpb24gZUdlKG4sdCl7aWYoMSZuJiYocmkoMCkscmUoMSwiY2xyLXZlcnRpY2FsLW5hdiIsMiks''@;'; put 'put ''Y3QoMixKWWUsMywyLCJuZy1jb250YWluZXIiLDMpLGllKCkscmUoMywiZGl2Iiw0KSxjdCg0LFFZZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksaWUoKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoKSxyPWRhKDIpO2FlKDIpLHllKCJuZ0Zvck9mIixlLmRhdGVSYW5nZU9wdGlvbnMpLGFlKDIpLHll''@;'; put 'put ''KCJuZ1RlbXBsYXRlT3V0bGV0IixyKX19ZnVuY3Rpb24gdEdlKG4sdCl7MSZuJiZWdCgwLCJjbHItbW9udGhwaWNrZXIiKX1mdW5jdGlvbiBuR2Uobix0KXsxJm4mJlZ0KDAsImNsci15ZWFycGlja2VyIil9ZnVuY3Rpb24gckdlKG4sdCl7MSZuJiZWdCgwLCJjbHItZGF5cGlja2VyIil9ZnVu''@;'; put 'put ''Y3Rpb24gaUdlKG4sdCl7MSZuJiZWdCgwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIil9ZnVuY3Rpb24gYUdlKG4sdCl7aWYoMSZuJiZjdCgwLHRHZSwxLDAsImNsci1tb250aHBpY2tlciIsNykoMSxuR2UsMSwwLCJjbHIteWVhcnBpY2tlciIsNykoMixyR2UsMSwwLCJjbHItZGF5cGlja2Vy''@;'; put 'put ''Iiw3KSgzLGlHZSwxLDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiLDcpLDImbil7Y29uc3QgZT1FZSgpO3llKCJuZ0lmIixlLmlzTW9udGhWaWV3KSxhZSgpLHllKCJuZ0lmIixlLmlzWWVhclZpZXcpLGFlKCkseWUoIm5nSWYiLGUuaXNEYXlWaWV3KSxhZSgpLHllKCJuZ0lmIixlLmhhc0Fj''@;'; put 'put ''dGlvbkJ1dHRvbnMpfX1jb25zdCBvR2U9WyJhY3Rpb25CdXR0b24iXSxzR2U9W1tbImxhYmVsIl1dLFtbIiIsImNsckRhdGUiLCIiXV0sW1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLFtbIiIsImNsckVuZERhdGUiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9s''@;'; put 'put ''LWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGxHZT1bImxhYmVsIiwiW2NsckRhdGVdIiwiW2NsclN0YXJ0RGF0ZV0iLCJbY2xyRW5kRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlv''@;'; put 'put ''biBjR2Uobix0KXsxJm4mJlZ0KDAsImxhYmVsIil9ZnVuY3Rpb24gdUdlKG4sdCl7MSZuJiYocmkoMCksQnIoMSwyKSxyZSgyLCJzcGFuIiw5KSxUZSgzLCItIiksaWUoKSxCcig0LDMpLGlpKCkpfWZ1bmN0aW9uIGRHZShuLHQpezEmbiYmKHJlKDAsImJ1dHRvbiIsMTAsMCksVnQoMiwiY2Rz''@;'; put 'put ''LWljb24iLDExKSxpZSgpKSwyJm4mJnllKCJkaXNhYmxlZCIsRWUoKS5pc0lucHV0RGF0ZURpc2FibGVkKX1mdW5jdGlvbiBoR2Uobix0KXsxJm4mJlZ0KDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsMTIpfWZ1bmN0aW9uIGZHZShuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDEz''@;'; put 'put ''KX1mdW5jdGlvbiBwR2Uobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiwxNCl9ZnVuY3Rpb24gZ0dlKG4sdCl7MSZuJiZCcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gbUdlKG4sdCl7MSZuJiZCcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIHZH''@;'; put 'put ''ZShuLHQpezEmbiYmQnIoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qgd0dlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJd''@;'; put 'put ''XV0sQ0dlPVsibGFiZWwiLCJbY2xyTnVtYmVySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gU0dlKG4sdCl7MSZuJiZWdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIE1HZShuLHQpezEmbiYmVnQoMCwi''@;'; put 'put ''Y2RzLWljb24iLDExKX1mdW5jdGlvbiB4R2Uobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiwxMil9ZnVuY3Rpb24gRUdlKG4sdCl7MSZuJiZCcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gVEdlKG4sdCl7MSZuJiZCcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0p''@;'; put 'put ''fWZ1bmN0aW9uIEFHZShuLHQpezEmbiYmQnIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qga0dlPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJlbCJdXV0sREdlPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gSUdlKG4sdCl7MSZuJiZWdCgwLCJsYWJlbCIpfWNv''@;'; put 'put ''bnN0IFJHZT1bW1sibGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLExHZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJv''@;'; put 'put ''bC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBPR2Uobix0KXsxJm4mJlZ0KDAsImxhYmVsIil9ZnVuY3Rpb24gUEdlKG4sdCl7MSZuJiYocmUoMCwiZGl2IiwzKSxCcigxLDIpLGllKCkpfWZ1bmN0aW9uIEZHZShuLHQpezEmbiYm''@;'; put 'put ''VnQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEhHZShuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIE5HZShuLHQpezEmbiYmQnIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBWR2Uobix0KXsxJm4mJkJyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlk''@;'; put 'put ''Il0pfWZ1bmN0aW9uIEJHZShuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMyksY3QoMSxGR2UsMSwwLCJjZHMtaWNvbiIsNCkoMixIR2UsMSwwLCJjZHMtaWNvbiIsNSkoMyxOR2UsMSwwLCJuZy1jb250ZW50IiwwKSg0LFZHZSwxLDAsIm5nLWNvbnRlbnQiLDApLGllKCkpLDImbil7Y29uc3Qg''@;'; put 'put ''ZT1FZSgpO2FlKCkseWUoIm5nSWYiLGUuc2hvd0ludmFsaWQpLGFlKCkseWUoIm5nSWYiLGUuc2hvd1ZhbGlkKSxhZSgpLHllKCJuZ0lmIixlLnNob3dJbnZhbGlkKSxhZSgpLHllKCJuZ0lmIixlLnNob3dWYWxpZCl9fWNvbnN0IGpHZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyU2VsZWN0Iiwi''@;'; put 'put ''Il1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSx6R2U9WyJsYWJlbCIsIltjbHJTZWxlY3RdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNj''@;'; put 'put ''ZXNzIl07ZnVuY3Rpb24gVUdlKG4sdCl7MSZuJiZWdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFdHZShuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIFpHZShuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIFlHZShuLHQpezEmbiYmQnIoMCwyLFsiKm5nSWYi''@;'; put 'put ''LCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIEdHZShuLHQpezEmbiYmQnIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiAkR2Uobix0KXsxJm4mJkJyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IEtHZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyVGV4dGFyZWEi''@;'; put 'put ''LCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLFhHZT1bImxhYmVsIiwiW2NsclRleHRhcmVhXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wt''@;'; put 'put ''c3VjY2VzcyJdO2Z1bmN0aW9uIHFHZShuLHQpezEmbiYmVnQoMCwibGFiZWwiKX1mdW5jdGlvbiBKR2Uobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBRR2Uobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBlJGUobix0KXsxJm4mJkJyKDAsMixbIipu''@;'; put 'put ''Z0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiB0JGUobix0KXsxJm4mJkJyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gbiRlKG4sdCl7MSZuJiZCcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCByJGU9WyJhbmNob3IiXTtmdW5jdGlvbiBpJGUobix0''@;'; put 'put ''KXtpZigxJm4mJihyZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiYnV0dG9uIiw2KSxWdCgzLCJjZHMtaWNvbiIsNyksaWUoKSgpLEJyKDQpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO3llKCJpZCIsZS5wb3BvdmVySWQpLFJyKCJhcmlhLWxhYmVsIixlLmNvbW1vblN0cmluZ3Mua2V5cy5k''@;'; put 'put ''YXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbCksYWUoMyksUnIoInRpdGxlIixlLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWNvbnN0IGEkZT1bImlucHV0X2xvdyJdLG8kZT1bImlucHV0Il0scyRlPVsiY29sdW1uUG9ydGFsIl07ZnVuY3Rpb24gbCRlKG4sdCl7MSZuJiZCcigwKX1j''@;'; put 'put ''b25zdCBjJGU9WyJyZXNpemVUcmFja2VyIl0sdSRlPVsiY29sdW1uSGFuZGxlIl0sZCRlPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLCIqIl0saCRlPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1m''@;'; put 'put ''aWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBmJGUobix0KXsxJm4mJmpsKDApfWZ1bmN0aW9uIHAkZShuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDEwKSwyJm4mJlJyKCJkaXJlY3Rpb24iLEVlKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIGckZShuLHQp''@;'; put 'put ''e2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsNyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLnNvcnQoKSl9KSxjdCgxLGYkZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkoMixwJGUsMSwxLCJjZHMtaWNvbiIsOSksaWUoKX1pZigyJm4pe2NvbnN0''@;'; put 'put ''IGU9RWUoKSxyPWRhKDYpO2FlKCkseWUoIm5nVGVtcGxhdGVPdXRsZXQiLHIpLGFlKCkseWUoIm5nSWYiLGUuc29ydERpcmVjdGlvbil9fWZ1bmN0aW9uIG0kZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1kZy1zdHJpbmctZmlsdGVyIiwxMSksY2koImNsckZpbHRlclZh''@;'; put 'put ''bHVlQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEuZmlsdGVyVmFsdWUsaSl8fChhLmZpbHRlclZhbHVlPWkpLG10KGkpfSksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTt5ZSgiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLGUuZmlsdGVyU3RyaW5nUGxh''@;'; put 'put ''Y2Vob2xkZXIpKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZS5yZWdpc3RlcmVkKSxsaSgiY2xyRmlsdGVyVmFsdWUiLGUuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiB2JGUobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxjaSgiY2xyRmlsdGVy''@;'; put 'put ''VmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKTtyZXR1cm4gdWkoYS5maWx0ZXJWYWx1ZSxpKXx8KGEuZmlsdGVyVmFsdWU9aSksbXQoaSl9KSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO3llKCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsZS5maWx0ZXJOdW1i''@;'; put 'put ''ZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixlLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixlLnJlZ2lzdGVyZWQpLGxpKCJjbHJGaWx0ZXJWYWx1ZSIsZS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIHkkZShuLHQpezEm''@;'; put 'put ''biYmQnIoMCwxKX1mdW5jdGlvbiBfJGUobix0KXsxJm4mJmpsKDApfWZ1bmN0aW9uIGIkZShuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iLDEzKSxjdCgxLF8kZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksaWUoKSksMiZuKXtFZSgpO2NvbnN0IGU9ZGEoNik7YWUoKSx5ZSgibmdUZW1wbGF0ZU91''@;'; put 'put ''dGxldCIsZSl9fWZ1bmN0aW9uIHckZShuLHQpezEmbiYmVnQoMCwiY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3IiKX1mdW5jdGlvbiBDJGUobix0KXsxJm4mJlZ0KDAsImRpdiIsNCl9ZnVuY3Rpb24gUyRlKG4sdCl7MSZuJiZCcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdyaWQiXSl9Y29uc3Qg''@;'; put 'put ''TSRlPVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIHgkZShuLHQpezEmbiYmQnIoMCl9Y29uc3QgRSRlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gVCRlKG4sdCl7MSZuJiZCcigwKX1jb25zdCBBJGU9WyJkZXRhaWxCdXR0b24iXSxrJGU9WyJzdGlja3lDZWxscyJdLEQkZT1bInNjcm9sbGFibGVD''@;'; put 'put ''ZWxscyJdLEkkZT1bImNhbGN1bGF0ZWRDZWxscyJdLFIkZT1bW1siY2xyLWRnLXJvdy1kZXRhaWwiXV0sW1siY2xyLWRnLWNlbGwiXV0sW1siY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdXV0sTCRlPVsiY2xyLWRnLXJvdy1kZXRhaWwiLCJjbHItZGctY2VsbCIsImNsci1kZy1hY3Rpb24tb3Zl''@;'; put 'put ''cmZsb3ciXSxPJGU9bj0+KHsiaXMtcmVwbGFjZWQiOm59KSxrM2U9bj0+KHsiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCI6bn0pO2Z1bmN0aW9uIFAkZShuLHQpe31mdW5jdGlvbiBGJGUobix0KXtpZigxJm4mJihyZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxjdCgxLFAk''@;'; put 'put ''ZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKDIpLHI9ZGEoNik7eWUoImNsckV4cGFuZFRyaWdnZXIiLGUuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksYWUoKSx5ZSgibmdUZW1wbGF0ZU91dGxldCIscil9fWZ1bmN0aW9uIEgkZShuLHQpe31mdW5jdGlvbiBO''@;'; put 'put ''JGUobix0KXsxJm4mJmN0KDAsSCRlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJm4mJihFZSgyKSx5ZSgibmdUZW1wbGF0ZU91dGxldCIsZGEoNikpKX1mdW5jdGlvbiBWJGUobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDkpLGt0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGkp''@;'; put 'put ''e3JldHVybiBndChlKSxtdChFZSgpLmNsZWFyUmFuZ2VzKGkpKX0pKCJjbGljayIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVybiBtdChhLnNlbGVjdFJvdyghYS5zZWxlY3RlZCxpKSl9KSxjdCgxLEYkZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixO''@;'; put 'put ''JGUsMSwxLG51bGwsOCksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHllKCJuZ0lmIixlLmV4cGFuZC5leHBhbmRhYmxlKSxhZSgpLHllKCJuZ0lmIiwhZS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIEIkZShuLHQpe31mdW5jdGlvbiBqJGUobix0KXtpZigxJm4mJihyZSgw''@;'; put 'put ''LCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxjdCgxLEIkZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCkscj1kYSg2KTt5ZSgiY2xyRXhwYW5kVHJpZ2dlciIsZS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxhZSgpLHllKCJuZ1RlbXBsYXRlT3V0''@;'; put 'put ''bGV0IixyKX19ZnVuY3Rpb24geiRlKG4sdCl7fWZ1bmN0aW9uIFUkZShuLHQpezEmbiYmY3QoMCx6JGUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImbiYmKEVlKCkseWUoIm5nVGVtcGxhdGVPdXRsZXQiLGRhKDYpKSl9ZnVuY3Rpb24gVyRlKG4sdCl7MSZuJiZCcigwKX1mdW5jdGlvbiBaJGUo''@;'; put 'put ''bix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJpbnB1dCIsMjMpLGt0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikudG9nZ2xlKGkpKX0pLGllKCkscmUoMywibGFiZWwiLDI0KSxrdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgyKS5jbGVhclJhbmdlcyhpKSl9KSxyZSg0LCJzcGFuIiwyNSksVGUoNSksaWUoKSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMik7eWUoIm5nQ2xhc3MiLHI0KDcsazNlLCFlLmNsckRnU2VsZWN0YWJsZSkpLGFlKDIpLHllKCJuZ01v''@;'; put 'put ''ZGVsIixlLnNlbGVjdGVkKSgiaWQiLGUuY2hlY2tib3hJZCkoImRpc2FibGVkIiwhZS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFJyKCJhcmlhLWRpc2FibGVkIiwhZS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGFlKCkseWUoImZvciIsZS5jaGVja2JveElkKSxhZSgyKSx2cihlLmNsckRnUm93''@;'; put 'put ''U2VsZWN0aW9uTGFiZWx8fGUuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIFkkZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMjEpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDI2KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''aSl7Z3QoZSk7Y29uc3QgYT1FZSgyKTtyZXR1cm4gdWkoYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSxpKXx8KGEuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9aSksbXQoaSl9KSxpZSgpLHJlKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjUpLFRlKDUpLGllKCkoKSgpKCl9aWYoMiZuKXtjb25z''@;'; put 'put ''dCBlPUVlKDIpO3llKCJuZ0NsYXNzIixyNCgxMCxrM2UsIWUuY2xyRGdTZWxlY3RhYmxlKSksYWUoMikseWUoImlkIixlLnJhZGlvSWQpKCJuYW1lIixlLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixlLml0ZW0pLGxpKCJuZ01vZGVsIixlLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xl''@;'; put 'put ''KSx5ZSgiY2hlY2tlZCIsZS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT09PWUuaXRlbSkoImRpc2FibGVkIiwhZS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFJyKCJhcmlhLWRpc2FibGVkIiwhZS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGFlKCkseWUoImZvciIsZS5yYWRpb0lkKSxhZSgyKSx2''@;'; put 'put ''cihlLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGUuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIEckZShuLHQpezEmbiYmKHJlKDAsImRpdiIsMjgpLEJyKDEsMiksaWUoKSl9ZnVuY3Rpb24gJCRlKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYnV0dG9uIiwz''@;'; put 'put ''Miksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSg0KS50b2dnbGVFeHBhbmQoKSl9KSxWdCgxLCJjZHMtaWNvbiIsMzMpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKDQpO1JyKCJhcmlhLWV4cGFuZGVkIixlLmV4cGFuZC5leHBhbmRlZCkoImFyaWEtbGFiZWwiLGUu''@;'; put 'put ''ZXhwYW5kLmV4cGFuZGVkP2UuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmUuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWNvbnRyb2xzIixlLmV4cGFuZC5oYXNFeHBhbmRUZW1wbGF0ZSYmIWUuZXhwYW5kLmV4cGFuZGVkP251bGw6ZS5leHBhbmRhYmxlSWQpLGFlKCksUnIoImRpcmVjdGlv''@;'; put 'put ''biIsZS5leHBhbmQuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpKCJ0aXRsZSIsZS5leHBhbmQuZXhwYW5kZWQ/ZS5jb21tb25TdHJpbmdzLmtleXMuY29sbGFwc2U6ZS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kKX19ZnVuY3Rpb24gSyRlKG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXNwaW5u''@;'; put 'put ''ZXIiLDM0KSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoNCk7YWUoKSx2cihlLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gWCRlKG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSwkJGUsMiw1LCJidXR0b24iLDMwKSgyLEskZSwyLDEsImNsci1zcGlubmVyIiwzMSks''@;'; put 'put ''aWkoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKCkseWUoIm5nSWYiLCFlLmV4cGFuZC5sb2FkaW5nKSxhZSgpLHllKCJuZ0lmIixlLmV4cGFuZC5sb2FkaW5nKX19ZnVuY3Rpb24gcSRlKG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwyOSksY3QoMSxYJGUsMywyLCJuZy1jb250YWluZXIiLDgp''@;'; put 'put ''LGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIixlLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gSiRlKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYnV0dG9uIiwzNyw1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1kYSgxKSxh''@;'; put 'put ''PUVlKDMpO3JldHVybiBtdChhLmRldGFpbFNlcnZpY2UudG9nZ2xlKGEuaXRlbSxpKSl9KSxWdCgyLCJjZHMtaWNvbiIsMzgpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKDMpO2JyKCJpcy1vcGVuIixlLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGUuaXRlbSkpLHllKCJkaXNhYmxlZCIsZS5k''@;'; put 'put ''ZXRhaWxEaXNhYmxlZCksUnIoImFyaWEtbGFiZWwiLGUuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oZS5pdGVtKT9lLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDplLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1leHBhbmRlZCIsZS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihlLml0ZW0pKSgi''@;'; put 'put ''YXJpYS1jb250cm9scyIsZS5kZXRhaWxTZXJ2aWNlLmlkKSxhZSgyKSxScigiZGlyZWN0aW9uIixlLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGUuaXRlbSk/ImxlZnQiOiJyaWdodCIpKCJ0aXRsZSIsZS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihlLml0ZW0pP2UuY29tbW9uU3RyaW5ncy5r''@;'; put 'put ''ZXlzLmNsb3NlOmUuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW4pfX1mdW5jdGlvbiBRJGUobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDM1KSxjdCgxLEokZSwzLDgsImJ1dHRvbiIsMzYpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIiwhZS5kZXRhaWxIaWRkZW4pfX1m''@;'; put 'put ''dW5jdGlvbiBlS2Uobix0KXt9ZnVuY3Rpb24gdEtlKG4sdCl7MSZuJiZjdCgwLGVLZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZuJiYoRWUoMikseWUoIm5nVGVtcGxhdGVPdXRsZXQiLGRhKDQpKSl9ZnVuY3Rpb24gbktlKG4sdCl7fWZ1bmN0aW9uIHJLZShuLHQpezEmbiYmY3QoMCxuS2Us''@;'; put 'put ''MCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImbiYmKEVlKDIpLHllKCJuZ1RlbXBsYXRlT3V0bGV0IixkYSg0KSkpfWZ1bmN0aW9uIGlLZShuLHQpezEmbiYmVnQoMCwiY2xyLWRnLWNlbGwiLDM5KX1mdW5jdGlvbiBhS2Uobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxy''@;'; put 'put ''aSgyLG51bGwsMyksY3QoNCxaJGUsNiw5LCJkaXYiLDE0KSg1LFkkZSw2LDEyLCJkaXYiLDE0KSg2LEckZSwyLDAsImRpdiIsMTUpKDcscSRlLDIsMSwiZGl2IiwxNikoOCxRJGUsMiwxLCJkaXYiLDE3KSxpaSgpLGllKCkscmUoOSwiZGl2IiwxOCkoMTAsImRpdiIsMTkpLEJyKDExLDEpLGps''@;'; put 'put ''KDEyLG51bGwsNCksaWUoKSxjdCgxNCx0S2UsMSwxLG51bGwsOCkoMTUscktlLDEsMSxudWxsLDgpLGllKCksY3QoMTYsaUtlLDEsMCwiY2xyLWRnLWNlbGwiLDIwKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTticigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixlLmRldGFpbFNlcnZpY2Uu''@;'; put 'put ''aXNSb3dPcGVuKGUuaXRlbSkpLHllKCJpZCIsZS5pZCksYWUoNCkseWUoIm5nSWYiLGUuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1lLlNFTEVDVElPTl9UWVBFLk11bHRpKSxhZSgpLHllKCJuZ0lmIixlLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZS5TRUxFQ1RJT05fVFlQRS5TaW5n''@;'; put 'put ''bGUpLGFlKCkseWUoIm5nSWYiLGUucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93KSxhZSgpLHllKCJuZ0lmIixlLmdsb2JhbEV4cGFuZGFibGUuaGFzRXhwYW5kYWJsZVJvdyksYWUoKSx5ZSgibmdJZiIsZS5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGFlKCkseWUoIm5nQ2xhc3Mi''@;'; put 'put ''LHI0KDEyLE8kZSxlLnJlcGxhY2VkJiZlLmV4cGFuZGVkKSksYWUoNSkseWUoIm5nSWYiLGUucmVwbGFjZWQmJiFlLmV4cGFuZC5sb2FkaW5nKSxhZSgpLHllKCJuZ0lmIiwhZS5yZXBsYWNlZCYmIWUuZXhwYW5kLmxvYWRpbmcpLGFlKCkseWUoIm5nSWYiLGUuc2tlbGV0b25Mb2FkaW5nKX19''@;'; put 'put ''Y29uc3Qgb0tlPVsiZGF0YWdyaWQiXSxzS2U9WyJkYXRhZ3JpZFRhYmxlIl0sbEtlPVsic2Nyb2xsYWJsZUNvbHVtbnMiXSxjS2U9WyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyJdLHVLZT1bInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyJdLGRLZT1bImRpc3BsYXllZFJvd3MiXSxoS2U9''@;'; put 'put ''WyJjYWxjdWxhdGlvblJvd3MiXSxmS2U9WyJzZWxlY3RBbGxDaGVja2JveCJdLHBLZT1bW1siY2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRhaWwiXV1dLGdL''@;'; put 'put ''ZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZvb3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdO2Z1bmN0aW9uIG1LZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMzApKDEsImlucHV0IiwzMSw2KSxjaSgi''@;'; put 'put ''bmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgyKTtyZXR1cm4gdWkoYS5hbGxTZWxlY3RlZCxpKXx8KGEuYWxsU2VsZWN0ZWQ9aSksbXQoaSl9KSxpZSgpLHJlKDMsImxhYmVsIiwzMikoNCwic3BhbiIsMzMpLFRlKDUpLGllKCkoKSgpfWlmKDImbil7Y29uc3Qg''@;'; put 'put ''ZT1FZSgyKTthZSgpLHllKCJpZCIsZS5zZWxlY3RBbGxJZCksbGkoIm5nTW9kZWwiLGUuYWxsU2VsZWN0ZWQpLFJyKCJhcmlhLWxhYmVsIixlLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwpLGFlKDIpLHllKCJmb3IiLGUuc2VsZWN0QWxsSWQpLGFlKDIpLHZyKGUuY29tbW9uU3RyaW5n''@;'; put 'put ''cy5rZXlzLnNlbGVjdEFsbCl9fWZ1bmN0aW9uIHZLZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMjcpLGt0KCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS50b2dnbGVBbGxTZWxlY3RlZChpKSl9KSxjdCgxLG1LZSw2LDUsImRp''@;'; put 'put ''diIsMjgpLFZ0KDIsImRpdiIsMjkpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsIWUudmlydHVhbFNjcm9sbHx8ZS5jdXN0b21TZWxlY3RBbGxFbmFibGVkKX19ZnVuY3Rpb24geUtlKG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwzNCkoMSwiZGl2IiwzMyksVGUo''@;'; put 'put ''MiksaWUoKSxWdCgzLCJkaXYiLDI5KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgyKSx2cihlLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsKX19ZnVuY3Rpb24gX0tlKG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwzNSkoMSwiZGl2IiwzMyksVGUoMiksaWUoKSxWdCgzLCJkaXYi''@;'; put 'put ''LDI5KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgyKSx2cihlLmNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIGJLZShuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMzYpKDEsImRpdiIsMzMpLFRlKDIpLGllKCksVnQoMywiZGl2IiwyOSksaWUoKSksMiZuKXtj''@;'; put 'put ''b25zdCBlPUVlKCk7YWUoMiksdnIoZS5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsKX19ZnVuY3Rpb24gd0tlKG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLWRnLXJvdyIsMzcpKDEsImNsci1kZy1jZWxsIiksVnQoMiwiY2xyLXNwaW5uZXIiLDM4KSxyZSgzLCJzcGFuIiksVGUoNCksaWUo''@;'; put 'put ''KSgpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDQpLHZyKGUuY29tbW9uU3RyaW5ncy5rZXlzLmxvYWRpbmcpfX1mdW5jdGlvbiBDS2Uobix0KXtpZigxJm4mJihyZSgwLCJjbHItZGctcm93IiwzNykoMSwiY2xyLWRnLWNlbGwiKSxWdCgyLCJjbHItc3Bpbm5lciIsMzgpLHJlKDMsInNwYW4i''@;'; put 'put ''KSxUZSg0KSxpZSgpKCkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoNCksdnIoZS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIFNLZShuLHQpezEmbiYmVnQoMCwiY2xyLWRnLXBsYWNlaG9sZGVyIil9ZnVuY3Rpb24gTUtlKG4sdCl7MSZuJiYocmUoMCwiZGl2IiwzOSko''@;'; put 'put ''MSwiY2xyLXNwaW5uZXIiLDM4KSxUZSgyLCJMb2FkaW5nIiksaWUoKSgpKX1jb25zdCBFS2U9WyJhbGxTZWxlY3RlZCJdO2Z1bmN0aW9uIFRLZShuLHQpe31mdW5jdGlvbiBBS2Uobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13cmFwcGVyIiko''@;'; put 'put ''MiwiaW5wdXQiLDEzKSxrdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3QgYT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKGEsIWkpKX0pLGllKCkscmUoMywibGFiZWwiKSxjdCg0LFRLZSwwLDAsIm5nLXRlbXBsYXRlIiwxNCksaWUo''@;'; put 'put ''KSgpKCl9aWYoMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoMik7YWUoMikseWUoImRpc2FibGVkIixyLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhZS5oaWRkZW4pKCJuZ01vZGVsIiwhZS5oaWRkZW4pLGFlKDIpLHllKCJuZ1RlbXBsYXRlT3V0bGV0IixlLnRpdGxlVGVtcGxhdGVS''@;'; put 'put ''ZWYpfX1mdW5jdGlvbiBrS2Uobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDMpKDEsImRpdiIsNCkoMiwiZGl2Iiw1LDApLFRlKDQpLGllKCkscmUoNSwiaDIiKSxUZSg2KSxpZSgpLHJlKDcsImJ1dHRvbiIsNiksVnQoOCwiY2RzLWljb24iLDcpLHJlKDksInNwYW4iLDgp''@;'; put 'put ''LFRlKDEwKSxpZSgpKCkoKSxyZSgxMSwidWwiLDkpLGN0KDEyLEFLZSw1LDMsImxpIiwxMCksaWUoKSxyZSgxMywiZGl2IiwxMSkoMTQsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiIsMTIpLGt0KCJjbHJBbGxTZWxlY3RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5h''@;'; put 'put ''bGxDb2x1bW5zU2VsZWN0ZWQoKSl9KSxpZSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTt5ZSgiaWQiLGUucG9wb3ZlcklkKSxScigiYXJpYS1sYWJlbCIsZS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb24pLGFlKDQpLHZyKGUuY29tbW9uU3RyaW5ncy5r''@;'; put 'put ''ZXlzLmFsbENvbHVtbnNTZWxlY3RlZCksYWUoMiksdnIoZS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnMpLGFlKCksUnIoImFyaWEtbGFiZWwiLGUuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxhZSgpLFJyKCJ0aXRsZSIsZS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGFlKDIp''@;'; put 'put ''LHZyKGUuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxhZSgyKSx5ZSgibmdGb3JPZiIsZS5oaWRlYWJsZUNvbHVtblN0YXRlcykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5Rm4pfX1jb25zdCBEM2U9WyJ0aXRsZSJdLElLZT1bW1siY2xyLWRnLXBhZ2luYXRpb24iXV0sIioiXSxSS2U9WyJj''@;'; put 'put ''bHItZGctcGFnaW5hdGlvbiIsIioiXTtmdW5jdGlvbiBMS2Uobix0KXtpZigxJm4mJihyaSgwKSxyZSgxLCJkaXYiLDEpKDIsImNsci1jaGVja2JveC13cmFwcGVyIiwyKSxWdCgzLCJpbnB1dCIsMykscmUoNCwibGFiZWwiKSxUZSg1KSxpZSgpLHJlKDYsInNwYW4iLDQpLFRlKDcpLGllKCko''@;'; put 'put ''KSgpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDUpLHZyKGUuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoKSxhZSgyKSx2cihlLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFJvd3MpfX1mdW5jdGlvbiBPS2Uobix0KXsxJm4mJlZ0KDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIil9ZnVu''@;'; put 'put ''Y3Rpb24gUEtlKG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxPS2UsMSwwLCJjbHItZGctY29sdW1uLXRvZ2dsZSIsMCkscmUoMiwiZGl2Iiw1KSxCcigzLDEpLGllKCksaWkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsZS5oYXNIaWRlYWJsZUNvbHVtbnMpfX1mdW5jdGlv''@;'; put 'put ''biBGS2Uobix0KXtpZigxJm4mJihyZSgwLCJvcHRpb24iLDQpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgibmdWYWx1ZSIsZSksYWUoKSx2cihlKX19Y29uc3QgSEtlPVsiY3VycmVudFBhZ2VJbnB1dCJdLE5LZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1d''@;'; put 'put ''LFZLZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gQktlKG4sdCl7MSZuJiYocmUoMCwiZGl2Iiw2KSxCcigxLDEpLGllKCkpfWZ1bmN0aW9uIGpLZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImlucHV0IiwxOCwxKSxrdCgia2V5ZG93bi5lbnRlciIsZnVuY3Rp''@;'; put 'put ''b24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGkpKX0pKCJibHVyIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykudmVyaWZ5Q3VycmVudFBhZ2UoaSkpfSksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoMyk7eWUoInNpemUiLGUucGFnZS5sYXN0''@;'; put 'put ''LnRvU3RyaW5nKCkubGVuZ3RoKSgidmFsdWUiLGUucGFnZS5jdXJyZW50KSxScigiYXJpYS1sYWJlbCIsZS5jb21tb25TdHJpbmdzLmtleXMuY3VycmVudFBhZ2UpfX1mdW5jdGlvbiB6S2Uobix0KXtpZigxJm4mJihyZSgwLCJzcGFuIiksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKDMp''@;'; put 'put ''O2FlKCksdnIoZS5wYWdlLmN1cnJlbnQpfX1mdW5jdGlvbiBVS2Uobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDcpKDEsImJ1dHRvbiIsOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5wYWdlLmN1cnJlbnQ9MSl9KSxyZSgyLCJzcGFu''@;'; put 'put ''Iiw5KSxUZSgzKSxpZSgpLFZ0KDQsImNkcy1pY29uIiwxMCksaWUoKSxyZSg1LCJidXR0b24iLDExKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gbXQoaS5wYWdlLmN1cnJlbnQ9aS5wYWdlLmN1cnJlbnQtMSl9KSxyZSg2LCJzcGFuIiw5KSxUZSg3''@;'; put 'put ''KSxpZSgpLFZ0KDgsImNkcy1pY29uIiwxMiksaWUoKSxjdCg5LGpLZSwyLDMsImlucHV0IiwxMykoMTAsektlLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMCxDYyksVGUoMTIsIiBceGEwL1x4YTAiKSxyZSgxMywic3BhbiIpLFRlKDE0KSxpZSgpLHJlKDE1LCJidXR0b24iLDE0KSxrdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gbXQoaS5wYWdlLmN1cnJlbnQ9aS5wYWdlLmN1cnJlbnQrMSl9KSxyZSgxNiwic3BhbiIsOSksVGUoMTcpLGllKCksVnQoMTgsImNkcy1pY29uIiwxNSksaWUoKSxyZSgxOSwiYnV0dG9uIiwxNiksa3QoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMik7cmV0dXJuIG10KGkucGFnZS5jdXJyZW50PWkucGFnZS5sYXN0KX0pLHJlKDIwLCJzcGFuIiw5KSxUZSgyMSksaWUoKSxWdCgyMiwiY2RzLWljb24iLDE3KSxpZSgpKCl9aWYoMiZuKXtjb25zdCBlPWRhKDExKSxyPUVlKDIpO2FlKCkseWUo''@;'; put 'put ''ImRpc2FibGVkIixyLnBhZ2UuY3VycmVudDw9MSksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksYWUoMiksdnIoci5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxhZSgyKSx5ZSgiZGlzYWJsZWQiLHIucGFnZS5jdXJyZW50PD0xKSxScigiYXJp''@;'; put 'put ''YS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxhZSgyKSx2cihyLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGFlKDIpLHllKCJuZ0lmIiwhci5kaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCkoIm5nSWZFbHNlIixlKSxhZSg0KSxScigiYXJpYS1sYWJl''@;'; put 'put ''bCIsci5jb21tb25TdHJpbmdzLmtleXMudG90YWxQYWdlcyksYWUoKSx2cihyLnBhZ2UubGFzdCksYWUoKSx5ZSgiZGlzYWJsZWQiLHIucGFnZS5jdXJyZW50Pj1yLnBhZ2UubGFzdCksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxhZSgyKSx2cihyLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksYWUoMikseWUoImRpc2FibGVkIixyLnBhZ2UuY3VycmVudD49ci5wYWdlLmxhc3QpLFJyKCJhcmlhLWxhYmVsIixyLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSksYWUoMiksdnIoci5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpfX1m''@;'; put 'put ''dW5jdGlvbiBXS2Uobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLEJLZSwyLDAsImRpdiIsMykscmUoMiwiZGl2Iiw0KSxCcigzKSxpZSgpLGN0KDQsVUtlLDIzLDE2LCJkaXYiLDUpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLGUuX3BhZ2VTaXplQ29tcG9uZW50KSxh''@;'; put 'put ''ZSgzKSx5ZSgibmdJZiIsZS5wYWdlLmxhc3Q+MSl9fWZ1bmN0aW9uIFpLZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImRpdiIsMTkpLFRlKDIpLGllKCkscmUoMywiZGl2Iiw3KSg0LCJidXR0b24iLDExKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3Qg''@;'; put 'put ''aT1FZSgpO3JldHVybiBtdChpLnBhZ2UuY3VycmVudD1pLnBhZ2UuY3VycmVudC0xKX0pLHJlKDUsInNwYW4iLDkpLFRlKDYpLGllKCksVnQoNywiY2RzLWljb24iLDEyKSxpZSgpLHJlKDgsInNwYW4iKSxUZSg5KSxpZSgpLHJlKDEwLCJidXR0b24iLDE0KSxrdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7Z3QoZSk7Y29uc3QgaT1FZSgpO3JldHVybiBtdChpLnBhZ2UuY3VycmVudD1pLnBhZ2UuY3VycmVudCsxKX0pLHJlKDExLCJzcGFuIiw5KSxUZSgxMiksaWUoKSxWdCgxMywiY2RzLWljb24iLDE1KSxpZSgpKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSgyKSxqMygiICIsZS5w''@;'; put 'put ''YWdlLmZpcnN0SXRlbSsxLCItIixlLnBhZ2UubGFzdEl0ZW0rMSwiIC8gIixlLnBhZ2UudG90YWxJdGVtcywiICIpLGFlKDIpLHllKCJkaXNhYmxlZCIsZS5wYWdlLmN1cnJlbnQ8PTEpLFJyKCJhcmlhLWxhYmVsIixlLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGFlKDIpLHZy''@;'; put 'put ''KGUuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksYWUoMyksdnIoZS5wYWdlLmN1cnJlbnQpLGFlKCkseWUoImRpc2FibGVkIixlLnBhZ2UuY3VycmVudD49ZS5wYWdlLmxhc3QpLFJyKCJhcmlhLWxhYmVsIixlLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksYWUoMiksdnIo''@;'; put 'put ''ZS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpfX1jb25zdCBLS2U9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxYS2U9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl07ZnVuY3Rpb24gcUtlKG4sdCl7MSZuJiZWdCgw''@;'; put 'put ''LCJjZHMtaWNvbiIsNyksMiZuJiZScigiZGlyZWN0aW9uIixFZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiBKS2Uobix0KXtpZigxJm4mJihyZSgwLCJzcGFuIiw4KSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHZyKGUuY29tbW9uU3RyaW5ncy5rZXlzLnN0YWNrVmll''@;'; put 'put ''d0NoYW5nZWQpfX1mdW5jdGlvbiBRS2Uobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDkpLEJyKDEsMiksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7VGQoImhlaWdodCIsZS5leHBhbmRlZD8iYXV0byI6MCksUnIoImlkIixlLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSgiYXJpYS1sYWJlbGxlZGJ5''@;'; put 'put ''IixlLmxhYmVsbGVkQnlJZCl9fWNvbnN0IGVYZT1bW1siY2xyLXN0YWNrLWhlYWRlciJdXSwiKiJdLHRYZT1bImNsci1zdGFjay1oZWFkZXIiLCIqIl07ZnVuY3Rpb24gaVhlKG4sdCl7MSZuJiZqbCgwKX1mdW5jdGlvbiBhWGUobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLGlYZSwxLDAsIm5n''@;'; put 'put ''LWNvbnRhaW5lciIsMiksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoMik7YWUoKSx5ZSgibmdUZW1wbGF0ZU91dGxldCIsci5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHIuZ2V0Q29udGV4dChlKSl9fWZ1''@;'; put 'put ''bmN0aW9uIG9YZShuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsYVhlLDIsMiwibmctY29udGFpbmVyIiwxKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHllKCJuZ0Zvck9mIiwobnVsbD09ZS5wYXJlbnQ/bnVsbDplLnBhcmVudC5jaGlsZHJlbil8fGUuY2hpbGRyZW4pfX1jb25zdCBz''@;'; put 'put ''WGU9WyJjb250ZW50Q29udGFpbmVyIl0sbFhlPVtbWyJjbHItdHJlZS1ub2RlIl1dLFtbIiIsImNscklmRXhwYW5kZWQiLCIiXV0sIioiXSxjWGU9WyJjbHItdHJlZS1ub2RlIiwiW2NscklmRXhwYW5kZWRdIiwiKiJdO2Z1bmN0aW9uIHVYZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3Jl''@;'; put 'put ''KDAsImJ1dHRvbiIsOSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxWdCgxLCJjZHMtaWNvbiIsMTApLGll''@;'; put 'put ''KCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7eWUoImRpc2FibGVkIixlLmRpc2FibGVkKSxhZSgpLFJyKCJkaXJlY3Rpb24iLGUuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZG93biI6InJpZ2h0Iil9fWZ1bmN0aW9uIGRYZShuLHQpezEmbiYmKHJlKDAsImRpdiIsMTEpLFZ0KDEsInNwYW4iLDEy''@;'; put 'put ''KSxpZSgpKX1mdW5jdGlvbiBoWGUobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDEzKSgxLCJpbnB1dCIsMTQpLGt0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpO3JldHVybiBtdChpLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24oaS5mZWF0dXJlc1Nl''@;'; put 'put ''cnZpY2UuZWFnZXIpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5mb2N1c1RyZWVOb2RlKCkpfSksaWUoKSxyZSgyLCJsYWJlbCIsMTUpLGpsKDMsMTYpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKSxyPWRhKDcpO2FlKCkseWUoImlkIixlLm5vZGVJZCsi''@;'; put 'put ''LWNoZWNrIikoImRpc2FibGVkIixlLmRpc2FibGVkKSgiY2hlY2tlZCIsZS5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1lLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGUuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09ZS5TVEFURVMuSU5ERVRFUk1JTkFURSksYWUoKSx5ZSgiZm9y''@;'; put 'put ''IixlLm5vZGVJZCsiLWNoZWNrIiksYWUoKSx5ZSgibmdUZW1wbGF0ZU91dGxldCIscil9fWZ1bmN0aW9uIGZYZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMTcpLGt0KCJtb3VzZXVwIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmZvY3VzVHJlZU5vZGUo''@;'; put 'put ''KSl9KSxqbCgxLDE2KSxpZSgpfWlmKDImbil7RWUoKTtjb25zdCBlPWRhKDcpO2FlKCkseWUoIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBwWGUobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDE5KSgxLCJzcGFuIiksVGUoMiksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUo''@;'; put 'put ''MiksTXIoIiAiLGUuYXJpYVNlbGVjdGVkP2UuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkVHJlZU5vZGU6ZS5jb21tb25TdHJpbmdzLmtleXMudW5zZWxlY3RlZFRyZWVOb2RlLCIiKX19ZnVuY3Rpb24gZ1hlKG4sdCl7aWYoMSZuJiYoQnIoMCwyKSxjdCgxLHBYZSwzLDEsImRpdiIsMTgp''@;'; put 'put ''KSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHllKCJuZ0lmIixlLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfHxlLmFyaWFTZWxlY3RlZCl9fWZ1bmN0aW9uIG1YZShuLHQpezEmbiYmVnQoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZuJiZ5ZSgiY2hpbGRyZW4iLEVlKCkuZmVh''@;'; put 'put ''dHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290KX1mdW5jdGlvbiB2WGUobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24iLDQpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuY2xvc2UoKSl9KSxWdCgxLCJjZHMtaWNvbiIsNSksaWUoKX0y''@;'; put 'put ''Jm4mJlJyKCJhcmlhLWxhYmVsIixFZSgyKS5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVuY3Rpb24geVhlKG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLEJyKDIpLGllKCksY3QoMyx2WGUsMiwxLCJidXR0b24iLDMpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2Jy''@;'; put 'put ''KCJhbGVydC1zbSIsZS5pc1NtYWxsKSgiYWxlcnQtbGlnaHR3ZWlnaHQiLGUuaXNMaWdodHdlaWdodCkoImFsZXJ0LWFwcC1sZXZlbCIsZS5pc0FwcExldmVsKSx5ZSgibmdDbGFzcyIsZS5hbGVydENsYXNzKSxhZSgzKSx5ZSgibmdJZiIsZS5jbG9zYWJsZSl9fWZ1bmN0aW9uIF9YZShuLHQp''@;'; put 'put ''ezEmbiYmVnQoMCwiY2xyLXNwaW5uZXIiLDMpfWZ1bmN0aW9uIGJYZShuLHQpe2lmKDEmbiYmVnQoMCwiY2RzLWljb24iLDQpLDImbil7Y29uc3QgZT1FZSgpO1JyKCJzaGFwZSIsZS5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSkoImFyaWEtbGFiZWwiLGUuaWNvblNlcnZpY2UuYWxlcnRJ''@;'; put 'put ''Y29uVGl0bGUpfX1jb25zdCB3WGU9W1tbImNsci1hbGVydCJdXV0sQ1hlPVsiY2xyLWFsZXJ0Il07ZnVuY3Rpb24gU1hlKG4sdCl7MSZuJiZWdCgwLCJjbHItYWxlcnRzLXBhZ2VyIiwyKSwyJm4mJnllKCJjbHJDdXJyZW50QWxlcnRJbmRleCIsRWUoKS5jdXJyZW50QWxlcnRJbmRleCl9Y29u''@;'; put 'put ''c3QgTVhlPVsiY2xySW50ZXJuYWxNb2RhbENvbnRlbnRUZW1wbGF0ZSJdLEkzZT1bImJvZHkiXSx4WGU9W1tbIiIsOCwibGVhZGluZy1idXR0b24iXV0sW1siIiw4LCJtb2RhbC10aXRsZSJdXSxbWyIiLDgsIm1vZGFsLWJvZHkiXV0sW1siIiw4LCJtb2RhbC1mb290ZXIiXV1dLEVYZT1bIi5s''@;'; put 'put ''ZWFkaW5nLWJ1dHRvbiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFsLWZvb3RlciJdO2Z1bmN0aW9uIFRYZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsMTQpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykuY2xv''@;'; put 'put ''c2UoKSl9KSxWdCgxLCJjZHMtaWNvbiIsMTUpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKDMpO1JyKCJhcmlhLWxhYmVsIixlLmNsb3NlQnV0dG9uQXJpYUxhYmVsfHxlLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWZ1bmN0aW9uIEFYZShuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsOCko''@;'; put 'put ''MSwiZGl2Iiw5KSgyLCJkaXYiLDEwKSxCcigzKSxyZSg0LCJkaXYiLDExLDApLEJyKDYsMSksaWUoKSxjdCg3LFRYZSwyLDEsImJ1dHRvbiIsMTIpLGllKCkscmUoOCwiZGl2IiwxMywxKSxCcigxMCwyKSxpZSgpLEJyKDExLDMpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKDQpLHll''@;'; put 'put ''KCJpZCIsZS5tb2RhbElkKSxhZSgzKSx5ZSgibmdJZiIsZS5jbG9zYWJsZSl9fWZ1bmN0aW9uIGtYZShuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxrdCgiQGZhZGVNb3ZlLmRvbmUiLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgpLmZh''@;'; put 'put ''ZGVEb25lKGkpKX0pLHJlKDIsImRpdiIsNiksVGUoMyksaWUoKSxjdCg0LEFYZSwxMiwyLCJkaXYiLDcpLHJlKDUsImRpdiIsNiksVGUoNiksaWUoKSgpKCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7YnIoIm1vZGFsLWZ1bGwtc2NyZWVuIiwiZnVsbC1zY3JlZW4iPT1lLnNpemUpLGFlKCksYnIo''@;'; put 'put ''Im1vZGFsLXNtIiwic20iPT1lLnNpemUpKCJtb2RhbC1sZyIsImxnIj09ZS5zaXplKSgibW9kYWwteGwiLCJ4bCI9PWUuc2l6ZSkseWUoImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwhMCkoIkBmYWRlTW92ZSIsZS5mYWRlTW92ZSksUnIoImFyaWEtaGlkZGVuIiwhZS5fb3BlbikoImFyaWEt''@;'; put 'put ''bGFiZWxsZWRieSIsZS5sYWJlbGxlZEJ5fHxlLm1vZGFsSWQpLGFlKDIpLHZyKGUuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxhZSgpLHllKCJuZ0lmIiwhZS5tb2RhbENvbnRlbnRUZW1wbGF0ZSkoIm5nSWZFbHNlIixlLm1vZGFsQ29udGVudFRlbXBsYXRlKSxhZSgy''@;'; put 'put ''KSx2cihlLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpfX1mdW5jdGlvbiBEWGUobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDE2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuYmFja2Ryb3BDbGljaygpKX0pLGllKCl9''@;'; put 'put ''MiZuJiZ5ZSgiQGZhZGUiLHZvaWQgMCl9bGV0IFVsPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItaWNvbiJdXSxzdGFuZGFsb25lOiExfSksbn0pKCks''@;'; put 'put ''cnM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNkcy1pY29uIl1dLHN0YW5kYWxvbmU6ITF9KSxufSkoKSxOcz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYV19KSxufSkoKTtjbGFzcyB0QXt9dmFyIExkPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltu''@;'; put 'put ''LkxPQURJTkc9MV09IkxPQURJTkciLG5bbi5TVUNDRVNTPTJdPSJTVUNDRVNTIixuW24uRVJST1I9M109IkVSUk9SIixufShMZHx8e30pO2xldCBTMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMubGlzdGVuZXI9ZSx0aGlzLl9sb2FkaW5nU3RhdGU9TGQuREVGQVVMVH1nZXQg''@;'; put 'put ''bG9hZGluZ1N0YXRlKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmdTdGF0ZX1zZXQgbG9hZGluZ1N0YXRlKGUpeyEwPT09ZT9lPUxkLkxPQURJTkc6ZXx8KGU9TGQuREVGQVVMVCksZSE9PXRoaXMuX2xvYWRpbmdTdGF0ZSYmKHRoaXMuX2xvYWRpbmdTdGF0ZT1lLHRoaXMubGlzdGVuZXImJnRoaXMu''@;'; put 'put ''bGlzdGVuZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGUpKX1uZ09uRGVzdHJveSgpe3RoaXMubG9hZGluZ1N0YXRlPUxkLkRFRkFVTFR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHRBLDgpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiY2xyTG9hZGluZyIsIiJdXSxpbnB1dHM6e2xvYWRpbmdTdGF0ZTpbMCwiY2xyTG9hZGluZyIsImxvYWRpbmdTdGF0ZSJdfSxzdGFuZGFsb25lOiExfSksbn0pKCksT2Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kYWJsZT0wLHRoaXMuaGFzRXhwYW5k''@;'; put 'put ''VGVtcGxhdGU9ITEsdGhpcy5fbG9hZGluZz0hMSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IHVyfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcoZSl7KGU9ISFlKSE9PXRoaXMuX2xvYWRpbmcmJih0aGlzLl9sb2FkaW5nPWUp''@;'; put 'put ''fWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoZSl7KGU9ISFlKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9ZSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChlKSl9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRD''@;'; put 'put ''aGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKCl7dGhpcy5leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9bG9hZGluZ1N0YXRlQ2hhbmdlKGUpe3RoaXMubG9hZGluZz1lPT09TGQuTE9BRElOR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUw''@;'; put 'put ''Mjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksb3FlPTA7ZnVuY3Rpb24gUHUoKXtyZXR1cm4iY2xyLWlkLSIrb3FlKyt9bGV0IFIzZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIiwhMCl9''@;'; put 'put ''LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOkNvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoKSxCcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2NvbnN0IEozPSIwLjJzIGVhc2UtaW4tb3V0Iixz''@;'; put 'put ''cWU9W2cyKCJza2lwSW5pdGlhbFJlbmRlciIsW3V1KCI6ZW50ZXIiLFtdKV0pLGcyKCJ0b2dnbGUiLFt1dSgidm9pZCA9PiAqIixbQ3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLFkwKEozLENzKHtoZWlnaHQ6IioifSkpXSldKV0saFg9KGcyKCJza2lwSW5pdGlhbFJlbmRlciIsW3V1''@;'; put 'put ''KCI6ZW50ZXIiLFtdKV0pLGcyKCJ0b2dnbGUiLFt1dSgidm9pZCA9PiAqIixbQ3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLFkwKEozLENzKHtoZWlnaHQ6IioifSkpXSksdXUoIiogPT4gdm9pZCIsW0NzKHtkaXNwbGF5OiJibG9jayJ9KSxZMChKMyxDcyh7aGVpZ2h0OjAsZGlzcGxh''@;'; put 'put ''eToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGFwcGx5OiJBcHBseSIsY2FuY2VsOiJDYW5jZWwiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxl''@;'; put 'put ''Y3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQcmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixuZXV0cmFsOiJOZXV0cmFsIix1bmtub3du''@;'; put 'put ''OiJVbmtub3duIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdl''@;'; put 'put ''IixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJDdXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4''@;'; put 'put ''IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVudEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNpZGVQYW5lbFBpbjoiUGluIFNpZGUgUGFuZWwiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUg''@;'; put 'put ''Y29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9zdENsb3NlOiJDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWls''@;'; put 'put ''cyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVyIixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFi''@;'; put 'put ''ZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoie0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckxhYmVsOiJ7Q09MVU1OfSBmaWx0ZXIiLGRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVsOiJGaWx0ZXIgZGlhbG9nIixjb2x1bW5TZXBh''@;'; put 'put ''cmF0b3JBcmlhTGFiZWw6IkNvbHVtbiByZXNpemUgaGFuZGxlIixjb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbjoiVXNlIGxlZnQgb3IgcmlnaHQga2V5IHRvIHJlc2l6ZSB0aGUgY29sdW1uIixmcm9tTGFiZWw6IkZyb20iLHRvTGFiZWw6IlRvIixhbGVydENsb3NlQnV0dG9uQXJpYUxhYmVs''@;'; put 'put ''OiJDbG9zZSBhbGVydCIsYWxlcnROZXh0QWxlcnRBcmlhTGFiZWw6Ik5leHQgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbDoiUHJldmlvdXMgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGRhdGVwaWNr''@;'; put 'put ''ZXJEaWFsb2dMYWJlbDoiQ2hvb3NlIGRhdGUiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFuZ2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJl''@;'; put 'put ''dmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToiUHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRh''@;'; put 'put ''dGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJfTU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3Vy''@;'; put 'put ''cmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQuIixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG1lbnUiLHJlc3Bv''@;'; put 'put ''bnNpdmVOYXZUb2dnbGVDbG9zZToiQ2xvc2UgbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dPcGVuOiJPcGVuIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIsdmVy''@;'; put 'put ''dGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3RhcnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJy''@;'; put 'put ''b3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9wdGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9u''@;'; put 'put ''Iixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3BlbjoiU2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9m''@;'; put 'put ''IixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVSb3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxl''@;'; put 'put ''YXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhpcyBidXR0b24iLHdpemFyZFN0ZXA6IlN0ZXAiLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0''@;'; put 'put ''ZXBuYXZBcmlhTGFiZWw6IldpemFyZCBzdGVwcyIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIGZvciB7TEFCRUx9IixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQgZm9yIHtMQUJFTH0iLHNlbGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyIsc3RlcENvbXBsZXRlOiJTdGVwIHtTVEVQ''@;'; put 'put ''fSBjb21wbGV0ZSIsc3RlcEVycm9yOiJFcnJvciBpbiBzdGVwIHtTVEVQfSIsYnJvd3NlOiJCcm93c2UiLGZpbGVDb3VudDoie0NPVU5UfSBmaWxlcyIsY2xlYXJGaWxlOiJDbGVhciB7RklMRX0iLGNsZWFyRmlsZXM6IkNsZWFyIHtDT1VOVH0gZmlsZXMiLHNlbGVjdGVkVHJlZU5vZGU6InNl''@;'; put 'put ''bGVjdGVkIix1bnNlbGVjdGVkVHJlZU5vZGU6InVuc2VsZWN0ZWQiLGJyZWFkY3J1bWJzTGFiZWw6ImJyZWFkY3J1bWJzIixleHBhbmRCcmVhZGNydW1ic0xhYmVsOiJFeHBhbmQgYnJlYWRjcnVtYnMifSk7bGV0IGZzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJpbmdz''@;'; put 'put ''PWhYfWdldCBrZXlzKCl7cmV0dXJuIHRoaXMuX3N0cmluZ3N9bG9jYWxpemUoZSl7dGhpcy5fc3RyaW5ncz17Li4udGhpcy5fc3RyaW5ncywuLi5lfX1wYXJzZShlLHI9e30pe2NvbnN0IGk9T2JqZWN0LmtleXMocik7bGV0IGE9ZTtyZXR1cm4gaS5sZW5ndGgmJmkuZm9yRWFjaChjPT57YT1h''@;'; put 'put ''LnJlcGxhY2UoYHske2N9fWAscltjXSl9KSxhfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTt2YXIgUTM9ZnVuY3Rpb24o''@;'; put 'put ''bil7cmV0dXJuIG4uSW5hY3RpdmU9ImluYWN0aXZlIixuLkVycm9yPSJlcnJvciIsbi5Db21wbGV0ZT0iY29tcGxldGUiLG59KFEzfHx7fSksbkE9ZnVuY3Rpb24obil7cmV0dXJuIG4uRGVmYXVsdD0iZGVmYXVsdCIsbi5NdWx0aT0ibXVsdGkiLG59KG5BfHx7fSk7bGV0IGNxZT0wO2NsYXNz''@;'; put 'put ''IHVxZXtjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaWQ9dCx0aGlzLmFjY29yZGlvbklkPWUsdGhpcy5zdGF0dXM9UTMuSW5hY3RpdmUsdGhpcy5pbmRleD1udWxsLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5vcGVuPSExLHRoaXMudGVtcGxhdGVJZD1gJHt0aGlzLmlkfS0ke3RoaXMuYWNjb3JkaW9u''@;'; put 'put ''SWR9YH19Y2xhc3MgTDNle2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJhdGVneT1uQS5EZWZhdWx0LHRoaXMuYWNjb3JkaW9uQ291bnQ9Y3FlKyssdGhpcy5fcGFuZWxzPXt9fWdldCBwYW5lbHMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcGFuZWxzKS5tYXAodD0+dGhpcy5fcGFuZWxzW3Rd''@;'; put 'put ''KX1zZXRTdHJhdGVneSh0KXt0aGlzLnN0cmF0ZWd5PXR9dXBkYXRlUGFuZWxPcmRlcih0KXt0LmZvckVhY2goKGUscik9PnRoaXMuX3BhbmVsc1tlXS5pbmRleD1yKSx0aGlzLnJlbW92ZU9sZFBhbmVscyh0KX1hZGRQYW5lbCh0LGU9ITEpe3RoaXMuX3BhbmVsc1t0XT1uZXcgdXFlKHQsdGhp''@;'; put 'put ''cy5hY2NvcmRpb25Db3VudCksdGhpcy5fcGFuZWxzW3RdLm9wZW49ZX10b2dnbGVQYW5lbCh0LGUpe2NvbnN0IGk9dm9pZCAwIT09ZT9lOiF0aGlzLl9wYW5lbHNbdF0ub3BlbjtpJiZ0aGlzLnN0cmF0ZWd5PT09bkEuRGVmYXVsdCYmdGhpcy5jbG9zZUFsbFBhbmVscygpLHRoaXMuX3BhbmVs''@;'; put 'put ''c1t0XS5vcGVuPWl9ZGlzYWJsZVBhbmVsKHQsZSl7dGhpcy5fcGFuZWxzW3RdLmRpc2FibGVkPWV9Y2xvc2VBbGxQYW5lbHMoKXt0aGlzLnBhbmVscy5mb3JFYWNoKHQ9PnRoaXMuX3BhbmVsc1t0LmlkXS5vcGVuPSExKX1yZW1vdmVPbGRQYW5lbHModCl7dGhpcy5wYW5lbHMuZmlsdGVyKGU9''@;'; put 'put ''PnZvaWQgMD09PXQuZmluZChyPT5yPT09ZS5pZCkpLmZvckVhY2goZT0+ZGVsZXRlIHRoaXMuX3BhbmVsc1tlLmlkXSl9fWxldCByQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY2NvcmRpb249bmV3IEwzZSx0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyB4aSh0aGlzLmFjY29y''@;'; put 'put ''ZGlvbi5wYW5lbHMpfWdldFBhbmVsQ2hhbmdlcyhlKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKFhhKHI9PnIuZmluZChpPT5pLmlkPT09ZSkpKX1zZXRTdHJhdGVneShlKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShlKX1hZGRQYW5lbChlLHI9ITEpe3RoaXMuYWNjb3Jk''@;'; put 'put ''aW9uLmFkZFBhbmVsKGUsciksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGUscil7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoZSxyKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGUscil7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGUs''@;'; put 'put ''ciksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoZSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihlKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRp''@;'; put 'put ''b24ucGFuZWxzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaUg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMpe3RoaXMucGFyZW50''@;'; put 'put ''PWUsdGhpcy5jb21tb25TdHJpbmdzPXIsdGhpcy5hY2NvcmRpb25TZXJ2aWNlPWksdGhpcy5pZkV4cGFuZFNlcnZpY2U9YSx0aGlzLmNkcj1jLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW49ITEsdGhpcy5oZWFkaW5nRW5hYmxlZD0hMSx0aGlzLnBhbmVsT3BlbkNoYW5nZT1uZXcg''@;'; put 'put ''WXIsdGhpcy5faWQ9UHUoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV9Z2V0IHBhbmVsTnVtYmVyKCl7cmV0dXJuIHRoaXMuX3BhbmVsSW5kZXgrMX1nZXQgaGVhZGluZ0xldmVsKCl7cmV0dXJuIHRoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw/dGhpcy5l''@;'; put 'put ''eHBsaWNpdEhlYWRpbmdMZXZlbDp0aGlzLnBhcmVudD80OjN9bmdPbkluaXQoKXt0aGlzLnBhbmVsPXRoaXMuYWNjb3JkaW9uU2VydmljZS5nZXRQYW5lbENoYW5nZXModGhpcy5pZCkucGlwZShFMChlPT50aGlzLmVtaXRQYW5lbENoYW5nZShlKSkpLHRoaXMuYWNjb3JkaW9uU2VydmljZS5h''@;'; put 'put ''ZGRQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLHRoaXMuZGlzYWJsZWQpfW5nT25DaGFuZ2VzKGUpe3Ro''@;'; put 'put ''aXMucGFuZWwmJmUucGFuZWxPcGVuJiZlLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUhPT1lLnBhbmVsT3Blbi5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCxlLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUpLHRoaXMucGFuZWwmJmUuZGlzYWJs''@;'; put 'put ''ZWQmJmUuZGlzYWJsZWQuY3VycmVudFZhbHVlIT09ZS5kaXNhYmxlZC5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsZS5kaXNhYmxlZC5jdXJyZW50VmFsdWUpfXRvZ2dsZVBhbmVsKCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2ds''@;'; put 'put ''ZVBhbmVsKHRoaXMuaWQpfWNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUoZSl7ZS5vcGVufHwodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITEpfWdldFBhbmVsU3RhdGVDbGFzc2VzKGUpe3JldHVybmBjbHItYWNjb3JkaW9uLXBhbmVsLSR7ZS5zdGF0dXN9ICR7ZS5vcGVuPyJj''@;'; put 'put ''bHItYWNjb3JkaW9uLXBhbmVsLW9wZW4iOiIifWB9Z2V0QWNjb3JkaW9uQ29udGVudElkKGUpe3JldHVybmBjbHItYWNjb3JkaW9uLWNvbnRlbnQtJHtlfSdgfWdldEFjY29yZGlvbkhlYWRlcklkKGUpe3JldHVybmBjbHItYWNjb3JkaW9uLWhlYWRlci0ke2V9YH1zdGVwQ29tcGxldGVUZXh0''@;'; put 'put ''KGUpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcENvbXBsZXRlLHtTVEVQOmUudG9TdHJpbmcoKX0pfXN0ZXBFcnJvclRleHQoZSl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5zdGVwRXJyb3Ise1NURVA6ZS50b1N0cmluZygpfSl9ZW1pdFBhbmVsQ2hhbmdlKGUpe2UuaW5kZXghPT10aGlzLl9wYW5lbEluZGV4JiYodGhpcy5fcGFuZWxJbmRleD1lLmluZGV4LHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSksZS5vcGVuIT09dGhpcy5wYW5lbE9wZW4mJih0aGlzLnBh''@;'; put 'put ''bmVsT3BlbkNoYW5nZS5lbWl0KGUub3BlbiksdGhpcy5wYW5lbE9wZW49ZS5vcGVuKSxlLm9wZW4mJih0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKG4sMTIpLFdlKGZzKSxXZShyQSks''@;'; put 'put ''V2UoT2QpLFdlKEZzKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmc28oaSxSM2UsNCksMiZlKXtsZXQgYTtkaShhPWhpKCkpJiYoci5hY2NvcmRpb25EZXNj''@;'; put 'put ''cmlwdGlvbj1hKX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiY2xyLWFjY29yZGlvbi1wYW5lbCIsITApKCJjbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkIixyLmRpc2FibGVkKX0saW5wdXRzOntkaXNhYmxlZDpbMCwiY2xyQWNjb3JkaW9uUGFu''@;'; put 'put ''ZWxEaXNhYmxlZCIsImRpc2FibGVkIl0scGFuZWxPcGVuOlswLCJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXSxoZWFkaW5nRW5hYmxlZDpbMCwiY2xyQWNjb3JkaW9uUGFuZWxIZWFkaW5nRW5hYmxlZCIsImhlYWRpbmdFbmFibGVkIl0sZXhwbGljaXRIZWFkaW5nTGV2ZWw6''@;'; put 'put ''WzAsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0xldmVsIiwiZXhwbGljaXRIZWFkaW5nTGV2ZWwiXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbT2RdKSxXdF0sbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOnlaZSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaGVhZGVyQnV0dG9uIiwiIl0sWzQsIm5nSWYiXSxbMywibmdDbGFzcyJdLFsxLCJjbHItYWNjb3JkaW9uLWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uIiwzLCJjbGljayIs''@;'; put 'put ''ImlkIiwiZGlzYWJsZWQiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsicm9sZSIsInJlZ2lvbiIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50LXJlZ2lvbiIsMywiaWQiXSxb''@;'; put 'put ''ImNsYXNzIiwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0LCJuZ0lmIl0sWzEsImNsci1hY2NvcmRpb24tY29udGVudCJdLFsxLCJjbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSh2WmUpLGN0KDAsYlplLDEyLDE2LCJuZy1jb250''@;'; put 'put ''YWluZXIiLDEpLGhsKDEsImFzeW5jIikpLDImZSYmeWUoIm5nSWYiLFJjKDEsMSxyLnBhbmVsKSl9LGRlcGVuZGVuY2llczpbUnUsbWEscnMsWUVdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246c3FlfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE8zZT0oKCk9PntjbGFzcyBu''@;'; put 'put ''e2NvbnN0cnVjdG9yKGUpe3RoaXMuYWNjb3JkaW9uU2VydmljZT1lLHRoaXMubXVsdGlQYW5lbD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdPbkluaXQoKXt0aGlzLnNldEFjY29yZGlvblN0cmF0ZWd5KCl9bmdPbkNoYW5nZXMoZSl7ZS5tdWx0aVBhbmVsLmN1cnJlbnRWYWx1ZSE9PWUu''@;'; put 'put ''bXVsdGlQYW5lbC5wcmV2aW91c1ZhbHVlJiZ0aGlzLnNldEFjY29yZGlvblN0cmF0ZWd5KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JET01DaGFuZ2VzKCkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2go''@;'; put 'put ''ZT0+ZS51bnN1YnNjcmliZSgpKX1zZXRBY2NvcmRpb25TdHJhdGVneSgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS5zZXRTdHJhdGVneSh0aGlzLm11bHRpUGFuZWw/bkEuTXVsdGk6bkEuRGVmYXVsdCl9bGlzdGVuRm9yRE9NQ2hhbmdlcygpe3JldHVybiB0aGlzLnBhbmVscy5jaGFuZ2VzLnBp''@;'; put 'put ''cGUoa2YodGhpcy5wYW5lbHMpKS5zdWJzY3JpYmUoZT0+dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnVwZGF0ZVBhbmVsT3JkZXIoZS50b0FycmF5KCkubWFwKHI9PnIuaWQpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHJBKSl9LG4uXHUwMjc1''@;'; put 'put ''Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmc28oaSxpSCw0KSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLnBhbmVscz1hKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9u''@;'; put 'put ''KGUscil7MiZlJiZicigiY2xyLWFjY29yZGlvbiIsITApfSxpbnB1dHM6e211bHRpUGFuZWw6WzAsImNsckFjY29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtyQV0pLFd0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2''@;'; put 'put ''YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUDNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3''@;'; put 'put ''NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDAp''@;'; put 'put ''KX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRjNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRp''@;'; put 'put ''dGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImNsci1hY2NvcmRpb24tdGl0bGUiLCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksT3c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExLHRoaXMuX2Nob2NvbGF0ZT1uZXcgdXJ9Z2V0IGNob2NvbGF0''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl9jaG9jb2xhdGUuYXNPYnNlcnZhYmxlKCl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2t8fHRoaXMuX2Nob2NvbGF0ZS5uZXh0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxu''@;'; put 'put ''Llx1MDI3NWRpcj1Xcih7dHlwZTpuLHN0YW5kYWxvbmU6ITF9KSxufSkoKSxQdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscil7dGhpcy5zdWJzY3JpcHRpb249ci5jaG9jb2xhdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10aGlzLmZsYXZvciYmKHIuZGlzYWJs''@;'; put 'put ''ZUNob2NvbGF0ZUNoZWNrPSEwLGUuZGV0ZWN0Q2hhbmdlcygpLHIuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMubGF0ZXN0Rmxhdm9yPXRoaXMuZmxhdm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo''@;'; put 'put ''KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoRnMpLFdlKE93KSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc3RhbmRhbG9uZTohMX0pLG59KSgpLGZYPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBPd3t9cmV0dXJuIG4uXHUwMjc1ZmFjPSgoKT0+''@;'; put 'put ''e2xldCB0O3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4odHx8KHQ9S3MobikpKShyfHxuKX19KSgpLG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24iXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdfSksbn0pKCksSDNlPSgoKT0+e2NsYXNzIG4g''@;'; put 'put ''ZXh0ZW5kcyBQd3tjb25zdHJ1Y3RvcihlLHIsaSl7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJjbHItYWNjb3JkaW9uLXBhbmVsIHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGNsci1hY2NvcmRpb24iKTtzdXBlcihlLHIpLHRoaXMuZXhwYW5kPWl9Z2V0IGZsYXZvcigpe3JldHVybiB0''@;'; put 'put ''aGlzLmV4cGFuZC5leHBhbmRlZH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoRnMpLFdlKGZYLDgpLFdlKE9kKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sc3RhbmRhbG9uZToh''@;'; put 'put ''MSxmZWF0dXJlczpbSWFdfSksbn0pKCksTjNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXtIcy5hZGRJY29ucyhEdyxmMixwMil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9''@;'; put 'put ''em4oe2ltcG9ydHM6W0ZhLE5zXX0pLG59KSgpLGdxZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxOcyxOM2UsTjNlXX0pLG59''@;'; put 'put ''KSgpO3ZhciBoYT1mdW5jdGlvbihuKXtyZXR1cm4gbi5BcnJvd0xlZnQ9IkFycm93TGVmdCIsbi5BcnJvd1VwPSJBcnJvd1VwIixuLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLG4uQXJyb3dEb3duPSJBcnJvd0Rvd24iLG4uQmFja3NwYWNlPSJCYWNrc3BhY2UiLG4uVGFiPSJUYWIiLG4uRW50''@;'; put 'put ''ZXI9IkVudGVyIixuLkVzY2FwZT0iRXNjYXBlIixuLlNwYWNlPSJTcGFjZSIsbi5TcGFjZWJhcj0iICIsbi5Ib21lPSJIb21lIixuLkVuZD0iRW5kIixuLlBhZ2VEb3duPSJQYWdlRG93biIsbi5QYWdlVXA9IlBhZ2VVcCIsbn0oaGF8fHt9KSxhdj1mdW5jdGlvbihuKXtyZXR1cm4gbi5BcnJv''@;'; put 'put ''d1VwPSJVcCIsbi5BcnJvd0Rvd249IkRvd24iLG4uQXJyb3dSaWdodD0iUmlnaHQiLG4uQXJyb3dMZWZ0PSJMZWZ0IixuLlNwYWNlPSJTcGFjZWJhciIsbi5Fc2NhcGU9IkVzYyIsbn0oYXZ8fHt9KTtmdW5jdGlvbiBGZihuKXtyZXR1cm4gbj09PWhhLkFycm93VXB8fG49PT1hdi5BcnJvd1Vw''@;'; put 'put ''P2hhLkFycm93VXA6bj09PWhhLkFycm93RG93bnx8bj09PWF2LkFycm93RG93bj9oYS5BcnJvd0Rvd246bj09PWhhLkFycm93UmlnaHR8fG49PT1hdi5BcnJvd1JpZ2h0P2hhLkFycm93UmlnaHQ6bj09PWhhLkFycm93TGVmdHx8bj09PWF2LkFycm93TGVmdD9oYS5BcnJvd0xlZnQ6bj09PWhh''@;'; put 'put ''LlNwYWNlfHxuPT09YXYuU3BhY2U/aGEuU3BhY2U6bj09PWhhLkVzY2FwZXx8bj09PWF2LkVzY2FwZT9oYS5Fc2NhcGU6bn1mdW5jdGlvbiBnWChuKXtjb25zdCB0PUZmKG4ua2V5KTsodD09PWhhLkFycm93VXB8fHQ9PT1oYS5BcnJvd0Rvd258fHQ9PT1oYS5BcnJvd0xlZnR8fHQ9PT1oYS5B''@;'; put 'put ''cnJvd1JpZ2h0KSYmbi5wcmV2ZW50RGVmYXVsdCgpfWxldCBnYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlPW5ldyB1cix0aGlzLl9vcGVuRXZlbnRDaGFuZ2U9bmV3IHVyLHRoaXMuX3BvcG92ZXJBbGlnbmVkPW5ldyB1cix0aGlz''@;'; put 'put ''Ll9wb3BvdmVyVmlzaWJsZT1uZXcgdXJ9Z2V0IG9wZW5DaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgcG9wb3ZlclZpc2libGUoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlclZpc2libGUuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudChlKXt0aGlzLl9vcGVuRXZlbnQ9ZSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChlKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGUpe3RoaXMuX29wZW4hPT0oZT0hIWUpJiYodGhpcy5fb3Blbj1lLHRoaXMu''@;'; put 'put ''X29wZW5DaGFuZ2UubmV4dChlKSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUoKX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZl''@;'; put 'put ''bnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KGUpe2dYKGUpLHRoaXMub3BlbkV2ZW50PWUsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlclZpc2libGVFbWl0KGUpe3RoaXMuX3BvcG92ZXJWaXNpYmxlLm5leHQoZSl9cG9wb3ZlckFsaWduZWRFbWl0KGUpe3RoaXMu''@;'; put 'put ''X3BvcG92ZXJBbGlnbmVkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGFBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGkpe3Ro''@;'; put 'put ''aXMucmVuZGVyZXI9ZSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9cix0aGlzLmRvY3VtZW50PWksdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHIub3BlbkNoYW5nZS5zdWJz''@;'; put 'put ''Y3JpYmUoYT0+e2E/KHRoaXMuYWRkRXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLHIuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoYT0+e3RoaXMuaWdub3Jl''@;'; put 'put ''ZEV2ZW50PWF9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxl''@;'; put 'put ''cj1PZih0aGlzLmRvY3VtZW50LCJzY3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUocmModGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRP''@;'; put 'put ''cGVuU2VydmljZS5vcGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xp''@;'; put 'put ''Y2tMaXN0ZW5lcigpe3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsZT0+e2U9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMu''@;'; put 'put ''c21hcnRPcGVuU2VydmljZS5vcGVuPSExLGUudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNr''@;'; put 'put ''TGlzdGVuZXIoKSxkZWxldGUgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNl''@;'; put 'put ''Lm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5u''@;'; put 'put ''YXRpdmVFbGVtZW50LmZvY3VzKCl9c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoZSl7bGV0IHI9ZS50YXJnZXQ7Zm9yKDtyLmNsYXNzTGlzdCYmImJvZHkiIT09ci5w''@;'; put 'put ''YXJlbnRFbGVtZW50LmxvY2FsTmFtZTspcj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFyLmNsYXNzTGlzdCYmIXIuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhp''@;'; put 'put ''cy5yZW1vdmVDbGlja0xpc3RlbmVyKCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcihUbyksT3IoZ2MpLE9yKFhzKSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1''@;'; put 'put ''ZmFjfSksbn0pKCksb0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIpe2UuYW5jaG9yQnV0dG9uUmVmPXJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGFBKSxXZSh6aSkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpb''@;'; put 'put ''WyIiLCJjbHJQb3BvdmVyQW5jaG9yIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiY2xyLWFuY2hvciIsITApfSxzdGFuZGFsb25lOiExfSksbn0pKCksajNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGkpe3RoaXMuZWxlbWVudFJl''@;'; put 'put ''Zj1lLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPXIsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWksdGhpcy5jbG9zZUNoYW5nZT1uZXcgWXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGkub3BlbkNoYW5nZS5waXBlKHJjKGE9PiFhKSkuc3Vic2NyaWJlKCgp''@;'; put 'put ''PT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9KSl9aGFuZGxlQ2xpY2soZSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChlKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2''@;'; put 'put ''aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxlbWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZSl7cmV0dXJuIG5ldyhlfHxuKShXZSh6aSksV2UoYUEpLFdlKGdjKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gci5oYW5kbGVDbGljayhhKX0pLDImZSYmYnIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMX0pLG59KSgpO3ZhciBKMT1mdW5jdGlvbihuKXty''@;'; put 'put ''ZXR1cm4gbltuLlZFUlRJQ0FMPTBdPSJWRVJUSUNBTCIsbltuLkhPUklaT05UQUw9MV09IkhPUklaT05UQUwiLG59KEoxfHx7fSksVXM9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5TVEFSVD0wXT0iU1RBUlQiLG5bbi5DRU5URVI9LjVdPSJDRU5URVIiLG5bbi5FTkQ9MV09IkVORCIsbn0oVXN8''@;'; put 'put ''fHt9KSxzQT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLkJPVFRPTT0wXT0iQk9UVE9NIixuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCIsbltuLlRPUD0zXT0iVE9QIixufShzQXx8e30pO2NvbnN0IEQ2PW49Pih7Li4ubixzaWRlOi0xKm4uc2lkZX0pLG41PShuLHQpPT57''@;'; put 'put ''Y29uc3QgZT1uLmNvbnRlbnQrKHQ/LjU6LS41KTtyZXR1cm4gZTwwfHxlPjE/bjp7Li4ubixjb250ZW50OmV9fTtmdW5jdGlvbiBGdyhuLHQsZSl7cmV0dXJuIHI9PnQobihyKSxlKX1mdW5jdGlvbiBtMihuLHQsZSl7bGV0IHI9dC5sZWZ0LGk9dC50b3A7c3dpdGNoKG4uYXhpcytuLnNpZGUp''@;'; put 'put ''e2Nhc2UtMTpyKz16M2Uobix0LGUpLGktPWUuaGVpZ2h0O2JyZWFrO2Nhc2UgMTpyKz16M2Uobix0LGUpLGkrPXQuaGVpZ2h0O2JyZWFrO2Nhc2UgMDpyLT1lLndpZHRoLGkrPVUzZShuLHQsZSk7YnJlYWs7Y2FzZSAyOnIrPXQud2lkdGgsaSs9VTNlKG4sdCxlKX1yZXR1cm57eE9mZnNldDpy''@;'; put 'put ''LHlPZmZzZXQ6aX19ZnVuY3Rpb24gejNlKG4sdCxlKXtsZXQgcj0wO3N3aXRjaChuLmFuY2hvcil7Y2FzZSBVcy5TVEFSVDpicmVhaztjYXNlIFVzLkNFTlRFUjpyKz10LndpZHRoLzI7YnJlYWs7Y2FzZSBVcy5FTkQ6cis9dC53aWR0aH1zd2l0Y2gobi5jb250ZW50KXtjYXNlIFVzLlNUQVJU''@;'; put 'put ''OmJyZWFrO2Nhc2UgVXMuQ0VOVEVSOnItPWUud2lkdGgvMjticmVhaztjYXNlIFVzLkVORDpyLT1lLndpZHRofXJldHVybiByfWZ1bmN0aW9uIFUzZShuLHQsZSl7bGV0IHI9MDtzd2l0Y2gobi5hbmNob3Ipe2Nhc2UgVXMuU1RBUlQ6YnJlYWs7Y2FzZSBVcy5DRU5URVI6cis9dC5oZWlnaHQv''@;'; put 'put ''MjticmVhaztjYXNlIFVzLkVORDpyKz10LmhlaWdodH1zd2l0Y2gobi5jb250ZW50KXtjYXNlIFVzLlNUQVJUOmJyZWFrO2Nhc2UgVXMuQ0VOVEVSOnItPWUuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBVcy5FTkQ6ci09ZS5oZWlnaHR9cmV0dXJuIHJ9bGV0IFczZT0oKCk9PntjbGFzcyBue2NvbnN0''@;'; put 'put ''cnVjdG9yKGUscil7dGhpcy5ldmVudFNlcnZpY2U9ZSx0aGlzLnBsYXRmb3JtSWQ9cix0aGlzLl9zaG91bGRSZWFsaWduPW5ldyB1cix0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09ic2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0''@;'; put 'put ''KCl9YWxpZ25Db250ZW50KGUpe2lmKCFfbCh0aGlzLnBsYXRmb3JtSWQpKXJldHVybnt4T2Zmc2V0OjAseU9mZnNldDowfTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY29udGVudE9mZnNldHM9bTIodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3Qgcj1mdW5jdGlvbiB2cWUo''@;'; put 'put ''bix0KXtjb25zdCBlPVtdLHJfYm90dG9tPW4ueU9mZnNldCt0LmhlaWdodCxyX2xlZnQ9bi54T2Zmc2V0LHJfcmlnaHQ9bi54T2Zmc2V0K3Qud2lkdGg7cmV0dXJuIG4ueU9mZnNldD49MHx8ZS5wdXNoKHNBLlRPUCkscl9sZWZ0Pj0wfHxlLnB1c2goc0EuTEVGVCkscl9ib3R0b208PSh3aW5k''@;'; put 'put ''b3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpfHxlLnB1c2goc0EuQk9UVE9NKSxyX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl8fGUucHVzaChzQS5SSUdIVCksZX0odGhp''@;'; put 'put ''cy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxpPXIucmVkdWNlKChhLGMpPT5hK2MsMCk7cmV0dXJuIDE9PT1yLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09SjEuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oaSk6MT09''@;'; put 'put ''PXIubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1KMS5IT1JJWk9OVEFMP3RoaXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oaSk6Mj09PXIubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1KMS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xh''@;'; put 'put ''dGlvbnMoaSk6Mj09PXIubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1KMS5IT1JJWk9OVEFMJiZ0aGlzLmhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhpKSx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcDwwJiYodGhpcy5jb250ZW50T2Zmc2V0cy55T2Zmc2V0Kz1N''@;'; put 'put ''YXRoLmFicyh0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcCkpLHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMueTwwJiYodGhpcy5jb250ZW50T2Zmc2V0cy55T2Zmc2V0PTAtdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApLHRoaXMu''@;'; put 'put ''Y29udGVudE9mZnNldHN9aGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDA6Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9bTIoRDYodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMp''@;'; put 'put ''O2JyZWFrO2Nhc2UgMTp0aGlzLmNvbnRlbnRPZmZzZXRzPW0yKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpLHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldDwwJiYodGhpcy5jb250ZW50T2Zmc2V0cy54T2Zmc2V0PTEw''@;'; put 'put ''KTticmVhaztjYXNlIDI6dGhpcy5jb250ZW50T2Zmc2V0cz1tMihuNSh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyl9fWhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoZSl7c3dpdGNoKGUpe2Nhc2UgNTp7''@;'; put 'put ''Y29uc3Qgcj1GdyhENixuNSwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1tMihyKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDQ6e2NvbnN0IHI9RncoRDYsbjUsITEpO3RoaXMuY29udGVudE9mZnNl''@;'; put 'put ''dHM9bTIocih0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOntjb25zdCByPUZ3KEQ2LG41LCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPW0yKHIodGhpcy5wb3Np''@;'; put 'put ''dGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMTp7Y29uc3Qgcj1GdyhENixuNSwhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz1tMihyKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1''@;'; put 'put ''cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fWhhbmRsZUhvcml6b250YWxBeGlzT25lVmlvbGF0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9bTIoRDYodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVu''@;'; put 'put ''dENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMDp0aGlzLmNvbnRlbnRPZmZzZXRzPW0yKG41KHRoaXMucG9zaXRpb24sITApLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDM6dGhpcy5jb250ZW50T2Zmc2V0cz1tMihuNSh0''@;'; put 'put ''aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyl9fWhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhlKXtzd2l0Y2goZSl7Y2FzZSA1OmNhc2UgNDp7Y29uc3Qgcj1GdyhENixuNSwhMSk7dGhpcy5jb250ZW50T2Zm''@;'; put 'put ''c2V0cz1tMihyKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDM6ZGVmYXVsdDpicmVhaztjYXNlIDI6Y2FzZSAxOntjb25zdCByPUZ3KEQ2LG41LCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPW0yKHIo''@;'; put 'put ''dGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKGFBKSxPcihkYykpfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4s''@;'; put 'put ''ZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGxBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjLG0sQyl7dGhpcy5kb2N1bWVudD1lLHRoaXMuY29udGFpbmVyPXIsdGhpcy50ZW1wbGF0ZT1pLHRoaXMucmVuZGVyZXI9YSx0aGlzLnNtYXJ0UG9zaXRpb25TZXJ2aWNlPWMs''@;'; put 'put ''dGhpcy5zbWFydEV2ZW50c1NlcnZpY2U9bSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9Qyx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQ9bnVsbCx0aGlzLmNo''@;'; put 'put ''ZWNrQ29sbGVjdG9yPW5ldyBZcn1zZXQgb3BlbihlKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hIWV9c2V0IGNvbnRlbnRBdChlKXt0aGlzLnNtYXJ0UG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uPWV9c2V0IG91dHNpZGVDbGlja0Nsb3NlKGUpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNl''@;'; put 'put ''Lm91dHNpZGVDbGlja0Nsb3NlPSEhZX1zZXQgc2Nyb2xsVG9DbG9zZShlKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zY3JvbGxUb0Nsb3NlPSEhZX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtpZih0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbiYmdGhpcy52aWV3KXtjb25zdCBlPXRoaXMu''@;'; put 'put ''dmlldy5yb290Tm9kZXNbMF0ub2Zmc2V0SGVpZ2h0Oyh0aGlzLnNob3VsZFJlYWxpZ258fG51bGwhPT10aGlzLnByZXZpb3VzQ29udGVudEhlaWdodCYmdGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQhPT1lKSYmKHRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0PWUsdGhpcy5jaGVja0NvbGxl''@;'; put 'put ''Y3Rvci5lbWl0KCkpfX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZT0+e2U/dGhpcy5hZGRDb250ZW50KCk6dGhpcy5yZW1vdmVDb250ZW50KCl9KSx0aGlzLnNtYXJ0UG9zaXRpb25T''@;'; put 'put ''ZXJ2aWNlLnNob3VsZFJlYWxpZ24uc3Vic2NyaWJlKCgpPT57dGhpcy5zaG91bGRSZWFsaWduPSEwfSksdGhpcy5jaGVja0NvbGxlY3Rvci5waXBlKHR2KDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmFsaWduQ29udGVudCgpLHRoaXMuc2hvdWxkUmVhbGlnbj0hMSx0aGlzLnZpZXcmJih0aGlz''@;'; put 'put ''LnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIiksdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMCkpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5yZW1vdmVDb250ZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVh''@;'; put 'put ''Y2goZT0+ZS51bnN1YnNjcmliZSgpKX1hZGRDb250ZW50KCl7dGhpcy52aWV3PXRoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTtjb25zdFtlXT10aGlzLnZpZXcucm9vdE5vZGVzO3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNvbnRlbnRSZWY9ZSx0aGlz''@;'; put 'put ''LnJlbmRlcmVyLmFkZENsYXNzKGUsImNsci1wb3BvdmVyLWNvbnRlbnQiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsInRvcCIsIjBweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwibGVmdCIsIjBweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwib3BhY2l0eSIsIjAiKSx0aGlz''@;'; put 'put ''LnJlbW92ZUNsaWNrTGlzdGVuZXJGbj10aGlzLnJlbmRlcmVyLmxpc3RlbihlLCJjbGljayIscj0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuRXZlbnQ9cn0pLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChyPT57dGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50''@;'; put 'put ''LmJvZHkscil9KSx0aGlzLnNob3VsZFJlYWxpZ249ITB9cmVtb3ZlQ29udGVudCgpe3RoaXMudmlldyYmKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuJiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4oKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj1udWxsKSx0aGlzLnZpZXcucm9v''@;'; put 'put ''dE5vZGVzLmZvckVhY2goZT0+dGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksZSkpLHRoaXMuY29udGFpbmVyLmNsZWFyKCksZGVsZXRlIHRoaXMudmlldyx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlclZpc2libGVFbWl0KCExKSl9YWxpZ25Db250ZW50''@;'; put 'put ''KCl7aWYoIXRoaXMudmlldylyZXR1cm47Y29uc3QgZT10aGlzLnNtYXJ0UG9zaXRpb25TZXJ2aWNlLmFsaWduQ29udGVudCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sInRvcCIsYCR7ZS55T2Zmc2V0fXB4YCks''@;'; put 'put ''dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJsZWZ0IixgJHtlLnhPZmZzZXR9cHhgKSx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlckFsaWduZWRFbWl0KHRoaXMudmlldy5yb290Tm9kZXNbMF0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZSl7cmV0dXJuIG5ldyhlfHxuKShXZShYcyksV2UoTm4pLFdlKEFsKSxXZShUbyksV2UoVzNlKSxXZShhQSksV2UoZ2MpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3ZlckNvbnRlbnQiLCIiXV0saW5wdXRzOntvcGVuOlswLCJjbHJQb3BvdmVyQ29u''@;'; put 'put ''dGVudCIsIm9wZW4iXSxjb250ZW50QXQ6WzAsImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250ZW50QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbMCwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwib3V0c2lkZUNsaWNrQ2xvc2UiXSxzY3JvbGxUb0Nsb3NlOlswLCJjbHJQ''@;'; put 'put ''b3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCJzY3JvbGxUb0Nsb3NlIl19LHN0YW5kYWxvbmU6ITF9KSxufSkoKSxjQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc21hcnRPcGVuU2VydmljZT1lLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBZcix0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShyPT57dGhpcy5vcGVuQ2xvc2VDaGFuZ2UubmV4dChyKX0pKX1oYW5kbGVDbGljayhlKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGUpfW5nT25EZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoZ2MpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRv''@;'; put 'put ''biIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoImNsaWNrIixmdW5jdGlvbihhKXtyZXR1cm4gci5oYW5kbGVDbGljayhhKX0pLDImZSYmYnIoImNsci1zbWFydC1vcGVuLWNsb3NlIiwhMCl9LG91dHB1dHM6e29wZW5DbG9zZUNoYW5nZToiY2xy''@;'; put 'put ''UG9wb3Zlck9wZW5DbG9zZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITF9KSxufSkoKSx1QT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHt9KSxufSkoKTt2''@;'; put 'put ''YXIgdjI9ZnVuY3Rpb24obil7cmV0dXJuIG4uVVA9InVwIixuLkRPV049ImRvd24iLG4uTEVGVD0ibGVmdCIsbi5SSUdIVD0icmlnaHQiLG59KHYyfHx7fSk7bGV0IGRBPSgoKT0+e2xldCBuPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucmVuZGVyZXI9ZSx0aGlzLl91bmxpc3RlbkZ1bmNz''@;'; put 'put ''PVtdfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9cmVzZXQoZSl7dGhpcy5fY3VycmVudD1lfWxpc3RlblRvQXJyb3dLZXlzKGUpe3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihlLCJrZXlkb3duLmFycm93dXAiLCgpPT4hdGhpcy5tb3Zl''@;'; put 'put ''KHYyLlVQKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihlLCJrZXlkb3duLmFycm93ZG93biIsKCk9PiF0aGlzLm1vdmUodjIuRE9XTikpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oZSwia2V5ZG93bi5hcnJv''@;'; put 'put ''d2xlZnQiLCgpPT4hdGhpcy5tb3ZlKHYyLkxFRlQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGUsImtleWRvd24uYXJyb3dyaWdodCIsKCk9PiF0aGlzLm1vdmUodjIuUklHSFQpKSl9cmVnaXN0ZXJDb250YWluZXIoZSxyPSIwIil7dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5zZXRBdHRyaWJ1dGUoZSwidGFiaW5kZXgiLHIpLHRoaXMubGlzdGVuVG9BcnJvd0tleXMoZSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGUsImtleWRvd24uc3BhY2UiLCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpLHRoaXMuX3VubGlz''@;'; put 'put ''dGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihlLCJrZXlkb3duLmVudGVyIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKX1tb3ZlVG8oZSl7dm9pZCAwIT09ZSYmKHRoaXMuY3VycmVudCYmdGhpcy5jdXJyZW50LmJsdXIoKSxlLmZvY3VzKCksdGhpcy5fY3VycmVudD1l''@;'; put 'put ''KX1tb3ZlKGUpe2xldCByPSExO2lmKHRoaXMuY3VycmVudCl7Y29uc3QgaT10aGlzLmN1cnJlbnRbZV07aSYmKHJUKGkpP2k6Z28oaSkpLnN1YnNjcmliZShjPT57YyYmKHRoaXMubW92ZVRvKGMpLHI9ITApfSl9cmV0dXJuIHJ9YWN0aXZhdGVDdXJyZW50KCl7cmV0dXJuISghdGhpcy5jdXJy''@;'; put 'put ''ZW50fHwhdGhpcy5jdXJyZW50LmFjdGl2YXRlfHwodGhpcy5jdXJyZW50LmFjdGl2YXRlKCksMCkpfWRldGFjaExpc3RlbmVycygpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaChlPT5lKCkpfX07cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoT3Io''@;'; put 'put ''VG8pKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtjb25zdCBHM2U9e3Byb3ZpZGU6ZEEsdXNlRmFjdG9yeTpmdW5jdGlvbiB5cWUobix0KXtyZXR1cm4gbnx8bmV3IGRBKHQpfSxkZXBzOltbbmV3IGgzLG5ldyB0YyxkQV0sVG9dfTt2YXIg''@;'; put 'put ''SGY9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5CRUZPUkU9LTFdPSJCRUZPUkUiLG5bbi5BRlRFUj0xXT0iQUZURVIiLG59KEhmfHx7fSk7Y2xhc3MgeWh7fXloWyJ0b3AtcmlnaHQiXT17YXhpczpKMS5WRVJUSUNBTCxzaWRlOkhmLkJFRk9SRSxhbmNob3I6VXMuRU5ELGNvbnRlbnQ6VXMuRU5E''@;'; put 'put ''fSx5aFsidG9wLWxlZnQiXT17YXhpczpKMS5WRVJUSUNBTCxzaWRlOkhmLkJFRk9SRSxhbmNob3I6VXMuU1RBUlQsY29udGVudDpVcy5TVEFSVH0seWhbImJvdHRvbS1yaWdodCJdPXtheGlzOkoxLlZFUlRJQ0FMLHNpZGU6SGYuQUZURVIsYW5jaG9yOlVzLkVORCxjb250ZW50OlVzLkVORH0s''@;'; put 'put ''eWhbImJvdHRvbS1sZWZ0Il09e2F4aXM6SjEuVkVSVElDQUwsc2lkZTpIZi5BRlRFUixhbmNob3I6VXMuU1RBUlQsY29udGVudDpVcy5TVEFSVH0seWhbInJpZ2h0LXRvcCJdPXtheGlzOkoxLkhPUklaT05UQUwsc2lkZTpIZi5BRlRFUixhbmNob3I6VXMuQ0VOVEVSLGNvbnRlbnQ6VXMuRU5E''@;'; put 'put ''fSx5aFsicmlnaHQtYm90dG9tIl09e2F4aXM6SjEuSE9SSVpPTlRBTCxzaWRlOkhmLkFGVEVSLGFuY2hvcjpVcy5TVEFSVCxjb250ZW50OlVzLlNUQVJUfSx5aFsibGVmdC10b3AiXT17YXhpczpKMS5IT1JJWk9OVEFMLHNpZGU6SGYuQkVGT1JFLGFuY2hvcjpVcy5DRU5URVIsY29udGVudDpV''@;'; put 'put ''cy5FTkR9LHloWyJsZWZ0LWJvdHRvbSJdPXtheGlzOkoxLkhPUklaT05UQUwsc2lkZTpIZi5CRUZPUkUsYW5jaG9yOlVzLlNUQVJULGNvbnRlbnQ6VXMuU1RBUlR9O2NvbnN0IG9IPW5ldyB3cigiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2xldCBfcWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rv''@;'; put 'put ''cihlKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGx9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZT0+e3RoaXMubGFzdE9wZW5DaGFuZ2U9ZX0pfW5nT25EZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9b25Fc2NhcGVLZXkoZSl7bnVsbCE9PXRoaXMubGFzdE9wZW5DaGFuZ2UmJighMT09PXRoaXMubGFzdE9wZW5DaGFuZ2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoZ2MpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsxJmUmJmt0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKGEpe3JldHVybiByLm9uRXNjYXBlS2V5KGEpfSl9fSksbn0pKCkscjU9KCgp''@;'; put 'put ''PT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sZmVhdHVyZXM6W3NhKFtnYyxhQSxXM2Use3Byb3ZpZGU6b0gsdXNlRXhpc3Rpbmc6eml9XSksTWYoW19xZV0pXX0pLG59KSgpO2NsYXNzIHZY''@;'; put 'put ''e3N0YXRpYyBsaW5rUGFyZW50KHQsZSxyKXt0LmZvckVhY2goaT0+aVtyXT1lKX1zdGF0aWMgbGlua1ZlcnRpY2FsKHQsZT0hMCl7dC5mb3JFYWNoKChyLGkpPT57aT4wJiYoci51cD10W2ktMV0pLGk8dC5sZW5ndGgtMSYmKHIuZG93bj10W2krMV0pfSksZSYmdC5sZW5ndGg+MSYmKHRbMF0u''@;'; put 'put ''dXA9dFt0Lmxlbmd0aC0xXSx0W3QubGVuZ3RoLTFdLmRvd249dFswXSl9fWxldCBJNj0oKCk9PntjbGFzcyBue3VzZXJEZWZpbmVkV2lkdGgoZSl7Y29uc3Qgcj1lLmNsb25lTm9kZSghMCk7ci5pZCYmKHIuaWQ9ci5pZCsiLWNsb25lIiksci5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxs''@;'; put 'put ''LXdpZHRoLXplcm8iKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpO2NvbnN0IGk9dGhpcy5jbGllbnRSZWN0KHIpLndpZHRoO3JldHVybiByLnJlbW92ZSgpLGl9c2Nyb2xsQmFyV2lkdGgoZSl7cmV0dXJuIGUub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aH1zY3JvbGxXaWR0aChlKXty''@;'; put 'put ''ZXR1cm4gZS5zY3JvbGxXaWR0aHx8MH1jb21wdXRlZEhlaWdodChlKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlKS5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSwxMCl9Y2xpZW50UmVjdChlKXtjb25zdCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3Rv''@;'; put 'put ''cDpwYXJzZUludChyLnRvcCwxMCksYm90dG9tOnBhcnNlSW50KHIuYm90dG9tLDEwKSxsZWZ0OnBhcnNlSW50KHIubGVmdCwxMCkscmlnaHQ6cGFyc2VJbnQoci5yaWdodCwxMCksd2lkdGg6cGFyc2VJbnQoci53aWR0aCwxMCksaGVpZ2h0OnBhcnNlSW50KHIuaGVpZ2h0LDEwKX19bWluV2lk''@;'; put 'put ''dGgoZSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZSkuZ2V0UHJvcGVydHlWYWx1ZSgibWluLXdpZHRoIiksMTApfWZvY3VzKGUpe2UuZm9jdXMoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9r''@;'; put 'put ''ZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksc0g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy5lbGVtZW50PWUsdGhpcy5kb21BZGFwdGVyPXIsdGhpcy5yZW5kZXJlcj1pLHRoaXMuY2xyRXhwYW5kVHJpZ2dlcj0hMSx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0''@;'; put 'put ''IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFuZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uU3RhcnQoZSl7InZvaWQiIT09ZS5mcm9tU3RhdGUmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVt''@;'; put 'put ''ZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiwiaGlkZGVuIil9YW5pbWF0aW9uRG9uZShlKXsidm9pZCIhPT1lLmZyb21TdGF0ZSYmKHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiksdGhpcy51cGRhdGVTdGFydEhlaWdo''@;'; put 'put ''dCgpKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhpcy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoemkpLFdlKEk2''@;'; put 'put ''KSxXZShUbykpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsxJmUmJllZKCJAZXhwYW5kQW5pbWF0aW9uLnN0YXJ0IixmdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''ci5hbmltYXRpb25TdGFydChhKX0pKCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUiLGZ1bmN0aW9uKGEpe3JldHVybiByLmFuaW1hdGlvbkRvbmUoYSl9KSwyJmUmJlVZKCJAZXhwYW5kQW5pbWF0aW9uIixyLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dlcjoiY2xyRXhw''@;'; put 'put ''YW5kVHJpZ2dlciJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtJNl0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbZzIoImV4''@;'; put 'put ''cGFuZEFuaW1hdGlvbiIsW3V1KCJ0cnVlIDw9PiBmYWxzZSIsW0NzKHtoZWlnaHQ6Int7c3RhcnRIZWlnaHR9fXB4In0pLFkwKCIwLjJzIGVhc2UtaW4tb3V0IixDcyh7aGVpZ2h0OiIqIn0pKV0pXSldfX0pLG59KSgpLHlYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhXX0pLG59KSgpLGJxZT0wO2NvbnN0IE53PW5ldyB3cigiSUZfQUNUSVZFX0lEIiksQ3FlPXtwcm92aWRlOk53LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gd3Fl''@;'; put 'put ''KCl7cmV0dXJuKyticWV9fTtsZXQgb3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnJlbnRDaGFuZ2U9bmV3IHVyfWdldCBjdXJyZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fY3VycmVudH1zZXQgY3VycmVudChlKXt0aGlzLl9jdXJyZW50IT09ZSYmKHRoaXMuX2N1cnJlbnQ9ZSx0aGlzLl9jdXJyZW50Q2hhbmdlLm5leHQoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpu''@;'; put 'put ''LGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxWdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWUsdGhpcy5pZD1yLHRoaXMudGVtcGxhdGU9aSx0aGlzLmNvbnRhaW5lcj1hLHRoaXMuYWN0aXZlQ2hhbmdlPW5ldyBZcighMSksdGhp''@;'; put 'put ''cy53YXNBY3RpdmU9ITEsdGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcoZS5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj1lLmN1cnJlbnRDaGFuZ2Uuc3Vic2NyaWJlKGM9Pnt0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyhjKX0pfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZp''@;'; put 'put ''Y2UuY3VycmVudD09PXRoaXMuaWR9c2V0IGFjdGl2ZShlKXtlJiYodGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhlKXtlP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVk''@;'; put 'put ''ZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfWNoZWNrQW5kVXBkYXRlVmlldyhlKXtjb25zdCByPWU9PT10aGlzLmlkO3IhPT10aGlzLndhc0FjdGl2ZSYmKHRoaXMudXBkYXRlVmlldyhyKSx0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KHIpLHRoaXMud2FzQWN0''@;'; put 'put ''aXZlPXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShvdiksV2UoTncpLFdlKEFsKSxXZShObikpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJJZkFjdGl2ZSIsIiJdXSxpbnB1dHM6e2FjdGl2ZTpbMCwiY2xy''@;'; put 'put ''SWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITF9KSxufSkoKSx5Mj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZSx0aGlzLnRlbXBsYXRlPXIsdGhpcy5j''@;'; put 'put ''b250YWluZXI9aSx0aGlzLm9wZW5DaGFuZ2U9bmV3IFlyKCExKSx0aGlzLnN1YnNjcmlwdGlvbj1lLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnVwZGF0ZVZpZXcoYSksdGhpcy5vcGVuQ2hhbmdlLmVtaXQoYSl9KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uu''@;'; put 'put ''b3Blbn1zZXQgb3BlbihlKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1lfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGUpe2U/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFp''@;'; put 'put ''bmVyLmNsZWFyKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGdjKSxXZShBbCksV2UoTm4pKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xySWZPcGVuIiwiIl1dLGlucHV0czp7b3BlbjpbMCwiY2xySWZPcGVu''@;'; put 'put ''Iiwib3BlbiJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJJZk9wZW5DaGFuZ2UifSxzdGFuZGFsb25lOiExfSksbn0pKCksJDNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjKXt0aGlzLnRlbXBsYXRlPWUsdGhpcy5jb250YWluZXI9cix0aGlzLmVsPWksdGhpcy5yZW5k''@;'; put 'put ''ZXJlcj1hLHRoaXMuZXhwYW5kPWMsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgWXIoITApLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3N1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKGMuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlVmlldygp''@;'; put 'put ''LHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChjLmV4cGFuZGVkKX0pKSxjLmhhc0V4cGFuZFRlbXBsYXRlPSEhZX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGUpeyJib29sZWFuIj09dHlwZW9mIGUmJih0aGlzLmV4cGFuZC5leHBhbmRlZD1lLHRo''@;'; put 'put ''aXMuX2V4cGFuZGVkPWUpfW5nT25Jbml0KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSsrLHRoaXMudXBkYXRlVmlldygpfW5nT25EZXN0cm95KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZS0tLHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZVZp''@;'; put 'put ''ZXcoKXtpZighdGhpcy5leHBhbmQuZXhwYW5kZWR8fDA9PT10aGlzLmNvbnRhaW5lci5sZW5ndGgpaWYodGhpcy50ZW1wbGF0ZSl0aGlzLmV4cGFuZC5leHBhbmRlZD90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIo''@;'; put 'put ''KTtlbHNlIHRyeXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzcGxheSIsdGhpcy5leHBhbmQuZXhwYW5kZWQ/bnVsbDoibm9uZSIpfWNhdGNoe319fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKEFsLDgp''@;'; put 'put ''LFdlKE5uKSxXZSh6aSksV2UoVG8pLFdlKE9kKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNscklmRXhwYW5kZWQiLCIiXV0saW5wdXRzOntleHBhbmRlZDpbMCwiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJj''@;'; put 'put ''bHJJZkV4cGFuZGVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMX0pLG59KSgpLE5mPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhXX0p''@;'; put 'put ''LG59KSgpO2NvbnN0IFNxZT17cHJvdmlkZTpuZXcgd3IoIkZPQ1VTX09OX1ZJRVdfSU5JVCIpLHVzZVZhbHVlOiEwfTtsZXQgbEg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxu''@;'; put 'put ''Llx1MDI3NWluaj16bih7cHJvdmlkZXJzOltTcWVdLGltcG9ydHM6W0ZhXX0pLG59KSgpLHhxZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBv''@;'; put 'put ''cnRzOltGYSxOcyx1QV19KSxufSkoKSxWZj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscil7dGhpcy5lbD1lLHRoaXMucmVuZGVyZXI9cix0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IFlyKCExKSx0aGlzLmJ1dHRvblN0YXRlPUxkLHRoaXMuc3RhdGU9TGQuREVGQVVMVH1sb2FkaW5n''@;'; put 'put ''U3RhdGVDaGFuZ2UoZSl7aWYoZSE9PXRoaXMuc3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWUsZSl7Y2FzZSBMZC5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5u''@;'; put 'put ''YXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBMZC5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVu''@;'; put 'put ''ZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgTGQuU1VDQ0VTUzp0aGlzLnNldEV4cGxp''@;'; put 'put ''Y2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNlIExkLkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKExkLkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGUpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXtjb25zdCBlPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPU1hdGgubWF4KDQyLGUud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIs''@;'; put 'put ''YCR7cn1weGApfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoemkpLFdlKFRvKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24oZSxyKXsyJmUmJlJyKCJkaXNhYmxlZCIsci5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW3twcm92aWRlOnRB''@;'; put 'put ''LHVzZUV4aXN0aW5nOm59XSldLGF0dHJzOnpaZSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImNsci1sb2FkaW5nLWJ0bi1jb250ZW50Iiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwi''@;'; put 'put ''c3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsInNwaW5uZXItY2hlY2siXSxbMSwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLHJlKDAsInNwYW4iLDApLGN0KDEsVVplLDIs''@;'; put 'put ''MSwibmctY29udGFpbmVyIiwxKSgyLFdaZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkoMyxaWmUsMiwxLCJzcGFuIiwyKSxpZSgpKSwyJmUmJih5ZSgiQHBhcmVudCIsdm9pZCAwKSgibmdTd2l0Y2giLHIuc3RhdGUpLGFlKCkseWUoIm5nU3dpdGNoQ2FzZSIsci5idXR0b25TdGF0ZS5MT0FESU5H''@;'; put 'put ''KSxhZSgpLHllKCJuZ1N3aXRjaENhc2UiLHIuYnV0dG9uU3RhdGUuU1VDQ0VTUyksYWUoKSx5ZSgibmdTd2l0Y2hDYXNlIixyLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltBZixvNF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbZzIoInBhcmVudCIsW3V1''@;'; put 'put ''KCI6ZW50ZXIiLFtdKV0pLGcyKCJkZWZhdWx0QnV0dG9uIixbdXUoIjplbnRlciIsW0NzKHtvcGFjaXR5OjB9KSxZMCgiMjAwbXMgMTAwbXMgZWFzZS1pbiIsQ3Moe29wYWNpdHk6MX0pKV0pLHV1KCI6bGVhdmUiLFtDcyh7b3BhY2l0eTowfSldKV0pLGcyKCJzcGlubmVyIixbdXUoIjplbnRl''@;'; put 'put ''ciIsW0NzKHtvcGFjaXR5OjB9KSxZMCgiMjAwbXMgMTAwbXMgZWFzZS1pbiIsQ3Moe29wYWNpdHk6MX0pKV0pLHV1KCI6bGVhdmUiLFtDcyh7b3BhY2l0eToxfSksWTAoIjEwMG1zIGVhc2Utb3V0IixDcyh7b3BhY2l0eTowfSkpXSldKSxnMigidmFsaWRhdGVkIixbdXUoIjplbnRlciIsW1kw''@;'; put 'put ''KCI2MDBtcyIsZVdlKFtDcyh7dHJhbnNmb3JtOiJzY2FsZSgwLDApIixvZmZzZXQ6MH0pLENzKHtvcGFjaXR5OjEsb2Zmc2V0Oi4yfSksQ3Moe3RyYW5zZm9ybToic2NhbGUoMS4yLDEuMikiLG9mZnNldDouNH0pLENzKHt0cmFuc2Zvcm06InNjYWxlKC45LC45KSIsb2Zmc2V0Oi42fSksQ3Mo''@;'; put 'put ''e3RyYW5zZm9ybToic2NhbGUoMSwxKSIsb2Zmc2V0OjF9KV0pKV0pLHV1KCI6bGVhdmUiLFtDcyh7b3BhY2l0eToxfSksWTAoIjEwMG1zIGVhc2Utb3V0IixDcyh7b3BhY2l0eTowfSkpXSldKV19fSksbn0pKCksVHFlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhXX0pLG59KSgpLEFxZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoQmZlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUp''@;'; put 'put ''e3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbVHFlLHhxZV19KSxufSkoKSxrcWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21w''@;'; put 'put ''PVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxzdGFuZGFsb25lOiExLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxoQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHt9KSxufSkoKSxEcWU9MCxfMj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRyb2wtIisgKytEcWUsdGhpcy5faWRDaGFuZ2U9bmV3IHhp''@;'; put 'put ''KHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWUsdGhpcy5faWRDaGFuZ2UubmV4dChlKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXty''@;'; put 'put ''ZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLElxZT0wLHN2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udGFpbmVyLSIrICsrSXFlLHRoaXMuX2lkQ2hhbmdlPW5ldyB4''@;'; put 'put ''aSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lLHRoaXMuX2lkQ2hhbmdlLm5leHQoZSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7''@;'; put 'put ''cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtsZXQgX1g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29udHJvbElkU2VydmljZT1lLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPXIsdGhpcy5j''@;'; put 'put ''b250cm9sSWRTdWZmaXg9ImFic3RyYWN0In1nZXQgaWQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJJZFNlcnZpY2U/YCR7dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/YCR7dGhpcy5jb250cm9sSWRTZXJ2''@;'; put 'put ''aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoXzIsOCksV2Uoc3YsOCkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHN0YW5kYWxvbmU6ITF9KSxufSkoKSxScWU9KCgpPT57Y2xh''@;'; put 'put ''c3MgbiBleHRlbmRzIF9Ye2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9ZSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1yLHRoaXMuY29udHJvbElkU3VmZml4PSJlcnJvciJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3''@;'; put 'put ''KGV8fG4pKFdlKF8yLDgpLFdlKHN2LDgpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJihScigiaWQiLHIuaWQpLGJyKCJjbHItc3VidGV4dCIsITApKCJl''@;'; put 'put ''cnJvciIsITApKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdLG5nQ29udGVudFNlbGVjdG9yczpDbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKCksQnIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxjSD0oKCk9PntjbGFzcyBuIGV4dGVu''@;'; put 'put ''ZHMgX1h7Y29uc3RydWN0b3IoZSxyKXtzdXBlcihlLHIpLHRoaXMuY29udHJvbElkU2VydmljZT1lLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPXIsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdl''@;'; put 'put ''KF8yLDgpLFdlKHN2LDgpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiYoUnIoImlkIixyLmlkKSxicigiY2xyLXN1YnRleHQiLCEwKSl9LHN0YW5kYWxv''@;'; put 'put ''bmU6ITEsZmVhdHVyZXM6W0lhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUTE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FkZGl0''@;'; put 'put ''aW9uYWxDb250cm9scz1bXSx0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgdXIsdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcz1uZXcgdXIsdGhpcy5faGVscGVycz1uZXcgdXJ9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5fY29udHJvbH1nZXQgY29udHJvbENoYW5nZXMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY29udHJvbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGFkZGl0aW9uYWxDb250cm9scygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHN9Z2V0IGFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdl''@;'; put 'put ''cy5hc09ic2VydmFibGUoKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuISF0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aH1nZXQgaGVscGVyc0NoYW5nZSgpe3JldHVybiB0aGlzLl9oZWxwZXJzLmFzT2JzZXJ2YWJsZSgpfXNldENvbnRyb2woZSl7dGhpcy5fY29u''@;'; put 'put ''dHJvbD1lLHRoaXMuX2NvbnRyb2xDaGFuZ2VzLm5leHQoZSl9YWRkQWRkaXRpb25hbENvbnRyb2woZSl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzLnB1c2goZSksdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5uZXh0KHRoaXMuX2FkZGl0aW9uYWxDb250cm9scyl9c2V0SGVscGVy''@;'; put 'put ''cyhlKXt0aGlzLl9oZWxwZXJzLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO3ZhciBfaD1mdW5jdGlvbihuKXtyZXR1cm4gbi5OT05FPSJO''@;'; put 'put ''T05FIixuLlZBTElEPSJWQUxJRCIsbi5JTlZBTElEPSJJTlZBTElEIixufShfaHx8e30pO2xldCBiaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3Q9bmV3IHVyLHRoaXMuc3RhdHVzQ2hhbmdlcz10aGlzLmdldFN0YXR1c0NoYW5n''@;'; put 'put ''ZXMoZSkucGlwZShXZmUoMSkpfXRyaWdnZXJTdGF0dXNDaGFuZ2UoKXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0Lm5leHQoKX1nZXRTdGF0dXNDaGFuZ2VzKGUpe3JldHVybiBWOShbZS5jb250cm9sQ2hhbmdlcyxlLmFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMucGlwZShrZihb''@;'; put 'put ''XSkpXSkucGlwZShEZCgoW3IsaV0pPT57aWYocil7Y29uc3QgYT1bciwuLi5pXTtyZXR1cm4gV1QoVjkoYS5tYXAoYz0+Yy5zdGF0dXNDaGFuZ2VzKSksdGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdC5waXBlKFhhKCgpPT5hLm1hcChjPT5jLnN0YXR1cykpKSl9cmV0dXJuIGMyfSks''@;'; put 'put ''WGEocj0+ci5pbmNsdWRlcyhfaC5JTlZBTElEKT9faC5JTlZBTElEOnIuaW5jbHVkZXMoX2guVkFMSUQpP19oLlZBTElEOl9oLk5PTkUpLGtmKF9oLk5PTkUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoT3IoUTEpKX0sbi5cdTAyNzVwcm92PXVu''@;'; put 'put ''KHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtjbGFzcyB1SHt9ZnVuY3Rpb24gSjNlKG4pe3JldHVybltuLHtwcm92aWRlOnVILHVzZUV4aXN0aW5nOm59XX1mdW5jdGlvbiBRM2Uobix0LGUpe3JldHVybiBGaS5jcmVhdGUocj0+e3Qocik7Y29uc3QgaT1uLnN1YnNjcmli''@;'; put 'put ''ZShyKTtyZXR1cm4oKT0+e2kudW5zdWJzY3JpYmUoKSxlJiZlKHIpfX0pfWxldCBkSD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyl7dGhpcy5yZW5kZXJlcj1lLHRoaXMucGFyZW50PXIsdGhpcy50b2dnbGVTZXJ2aWNlPWksdGhpcy5mb2N1c1NlcnZpY2U9YSx0aGlzLnBs''@;'; put 'put ''YXRmb3JtSWQ9Yyx0aGlzLmlkPVB1KCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMuX3VubGlzdGVuRnVuY3M9W10sdGhpcy5yZXNldENoaWxkcmVuKCksdGhpcy5tb3ZlVG9GaXJzdEl0ZW1XaGVuT3BlbigpLHJ8fHRoaXMuaGFuZGxlUm9vdEZvY3VzKCl9Z2V0''@;'; put 'put ''IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihlKXt0aGlzLl90cmlnZ2VyPWUsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGUsImtleWRvd24uYXJyb3dyaWdodCIscj0+dGhpcy50b2dnbGVTZXJ2aWNl''@;'; put 'put ''LnRvZ2dsZVdpdGhFdmVudChyKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oZSwia2V5ZG93bi5hcnJvd3VwIixyPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KHIpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVu''@;'; put 'put ''ZGVyZXIubGlzdGVuKGUsImtleWRvd24uYXJyb3dkb3duIixyPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KHIpKSksdGhpcy5mb2N1c1NlcnZpY2UubGlzdGVuVG9BcnJvd0tleXMoZSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfXNldCBjb250''@;'; put 'put ''YWluZXIoZSl7dGhpcy5fY29udGFpbmVyPWUsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGUsImtleWRvd24udGFiIixyPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KHIpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5w''@;'; put 'put ''dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGUsImtleWRvd24uZXNjYXBlIixyPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZSh2Mi5MRUZUKSxyLnN0b3BQcm9wYWdhdGlvbigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihlKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1''@;'; put 'put ''c2godGhpcy5yZW5kZXJlci5saXN0ZW4oZSwia2V5ZG93bi5lc2NhcGUiLHI9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQocikpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oZSwiYmx1ciIscj0+e3RoaXMuY2hpbGRyZW4ucGlwZShH''@;'; put 'put ''MygxKSkuc3Vic2NyaWJlKGE9PmEuZm9yRWFjaChjPT5jLmJsdXIoKSkpO2NvbnN0IGk9ci5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2kmJl9sKHRoaXMucGxhdGZvcm1JZCkmJihlLmNvbnRhaW5zKGkpfHxpPT09dGhpcy50cmlnZ2VyKXx8KHRoaXMuZm9jdXNCYWNr''@;'; put 'put ''T25UcmlnZ2VyV2hlbkNsb3NlZD0hMSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGU9PmUoKSksdGhpcy5mb2N1c1NlcnZpY2UuZGV0YWNoTGlzdGVuZXJzKCl9bW92ZVRvRmlyc3RJdGVtV2hlbk9wZW4o''@;'; put 'put ''KXtjb25zdCBlPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShyPT57ciYmdGhpcy50b2dnbGVTZXJ2aWNlLm9yaWdpbmFsRXZlbnQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlVG8odGhpcyksdGhpcy5mb2N1c1NlcnZpY2UubW92ZSh0aGlz''@;'; put 'put ''LnBhcmVudD92Mi5SSUdIVDp2Mi5ET1dOKX0pfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5lLnVuc3Vic2NyaWJlKCkpfWhhbmRsZVJvb3RGb2N1cygpe2NvbnN0IGU9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKHI9PntyfHwodGhpcy5mb2N1c1NlcnZp''@;'; put 'put ''Y2UucmVzZXQodGhpcyksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkJiZ0aGlzLmZvY3VzKCkpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD1yfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5lLnVuc3Vic2NyaWJlKCkpfWZvY3VzKCl7dGhpcy50cmln''@;'; put 'put ''Z2VyJiZfbCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZfbCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7X2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmNsaWNrKCl9cmVz''@;'; put 'put ''ZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IFVUKDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKFhhKGU9PmVbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShYYShlPT5lWzBdKSksdGhpcy51''@;'; put 'put ''cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoWGEoZT0+ZVtlLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihlKXt2WC5saW5rVmVydGljYWwoZSksdGhpcy5wYXJlbnQmJnZYLmxpbmtQYXJlbnQoZSx0aGlzLmNsb3NlQW5kR2V0VGhpcygpLHYyLkxFRlQpLHRoaXMuY2hpbGRyZW4u''@;'; put 'put ''bmV4dChlKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gUTNlKHRoaXMuY2hpbGRyZW4sKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1jbG9zZUFuZEdldFRoaXMoKXtyZXR1cm4gUTNlKGdvKHRoaXMpLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9fXJldHVybiBu''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKFRvKSxPcihuLDEyKSxPcihnYyksT3IoZEEpLE9yKGRjKSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y29uc3QgTHFlPUozZShkSCk7bGV0IGZBPSgoKT0+e2Ns''@;'; put 'put ''YXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyB1cn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJu''@;'; put 'put ''IG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtjb25zdCBQcWU9e3Byb3ZpZGU6ZkEsdXNlRmFjdG9yeTpmdW5jdGlvbiBPcWUobil7cmV0dXJuIG58fG5ldyBmQX0sZGVwczpbW25ldyBoMyxuZXcgdGMsZkFdXX07bGV0IGk1''@;'; put 'put ''PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjKXt0aGlzLnBhcmVudD1lLHRoaXMudG9nZ2xlU2VydmljZT1yLHRoaXMuZm9jdXNIYW5kbGVyPWksdGhpcy5pc01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYy5j''@;'; put 'put ''aGFuZ2VzLnN1YnNjcmliZShtPT5yLm9wZW49bSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHIub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PmEubWFya0ZvckNoZWNrKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9fXJl''@;'; put 'put ''dHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKG4sMTIpLFdlKGdjKSxXZShkSCksV2UoRnMpLFdlKGZBKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5j''@;'; put 'put ''dGlvbihlLHIpezImZSYmYnIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLHIudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbMCwiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbUHFl''@;'; put 'put ''LEczZSxMcWVdKSxNZihbcjVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkNvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoKSxCcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO3ZhciBNaT1mdW5jdGlvbihuKXtyZXR1cm4gbltuLlJJR0hUX0NFTlRF''@;'; put 'put ''Uj0wXT0iUklHSFRfQ0VOVEVSIixuW24uUklHSFRfVE9QPTFdPSJSSUdIVF9UT1AiLG5bbi5SSUdIVF9CT1RUT009Ml09IlJJR0hUX0JPVFRPTSIsbltuLlRPUF9DRU5URVI9M109IlRPUF9DRU5URVIiLG5bbi5UT1BfUklHSFQ9NF09IlRPUF9SSUdIVCIsbltuLlRPUF9MRUZUPTVdPSJUT1Bf''@;'; put 'put ''TEVGVCIsbltuLkJPVFRPTV9DRU5URVI9Nl09IkJPVFRPTV9DRU5URVIiLG5bbi5CT1RUT01fUklHSFQ9N109IkJPVFRPTV9SSUdIVCIsbltuLkJPVFRPTV9MRUZUPThdPSJCT1RUT01fTEVGVCIsbltuLkxFRlRfQ0VOVEVSPTldPSJMRUZUX0NFTlRFUiIsbltuLkxFRlRfVE9QPTEwXT0iTEVG''@;'; put 'put ''VF9UT1AiLG5bbi5MRUZUX0JPVFRPTT0xMV09IkxFRlRfQk9UVE9NIixufShNaXx8e30pO2NsYXNzIE5xZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJs''@;'; put 'put ''ZUVsZW1lbnRzPVtdLHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnRvcD0wLHQuc3R5bGUuYm90dG9tPSJhdXRvIix0LnN0eWxlLmxlZnQ9MCx0LnN0eWxlLnJpZ2h0PSJhdXRvIn1hbmNob3IodCxlLHIse29mZnNldFg6aT0wLG9mZnNldFk6YT0wLHVzZUFuY2hvclBhcmVu''@;'; put 'put ''dDpjPSExfT17fSl7dGhpcy5hZGRTY3JvbGxFdmVudExpc3RlbmVycyh0KSxjJiYodD10LnBhcmVudE5vZGUpLHQuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Y29uc3QgbT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEM9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xl''@;'; put 'put ''dCBQPW0ubGVmdC1DLmxlZnQraSxZPW0udG9wLUMudG9wK2E7c3dpdGNoKGUpe2Nhc2UgTWkuTEVGVF9UT1A6Y2FzZSBNaS5UT1BfTEVGVDpicmVhaztjYXNlIE1pLlRPUF9DRU5URVI6UCs9bS53aWR0aC8yO2JyZWFrO2Nhc2UgTWkuVE9QX1JJR0hUOmNhc2UgTWkuUklHSFRfVE9QOlArPW0u''@;'; put 'put ''d2lkdGg7YnJlYWs7Y2FzZSBNaS5MRUZUX0JPVFRPTTpjYXNlIE1pLkJPVFRPTV9MRUZUOlkrPW0uaGVpZ2h0O2JyZWFrO2Nhc2UgTWkuQk9UVE9NX0NFTlRFUjpZKz1tLmhlaWdodCxQKz1tLndpZHRoLzI7YnJlYWs7Y2FzZSBNaS5CT1RUT01fUklHSFQ6Y2FzZSBNaS5SSUdIVF9CT1RUT006''@;'; put 'put ''WSs9bS5oZWlnaHQsUCs9bS53aWR0aDticmVhaztjYXNlIE1pLkxFRlRfQ0VOVEVSOlkrPW0uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBNaS5SSUdIVF9DRU5URVI6WSs9bS5oZWlnaHQvMixQKz1tLndpZHRofXN3aXRjaChyKXtjYXNlIE1pLkxFRlRfVE9QOmNhc2UgTWkuVE9QX0xFRlQ6YnJlYWs7''@;'; put 'put ''Y2FzZSBNaS5UT1BfQ0VOVEVSOlAtPUMud2lkdGgvMjticmVhaztjYXNlIE1pLlRPUF9SSUdIVDpjYXNlIE1pLlJJR0hUX1RPUDpQLT1DLndpZHRoO2JyZWFrO2Nhc2UgTWkuTEVGVF9CT1RUT006Y2FzZSBNaS5CT1RUT01fTEVGVDpZLT1DLmhlaWdodDticmVhaztjYXNlIE1pLkJPVFRPTV9D''@;'; put 'put ''RU5URVI6WS09Qy5oZWlnaHQsUC09Qy53aWR0aC8yO2JyZWFrO2Nhc2UgTWkuQk9UVE9NX1JJR0hUOmNhc2UgTWkuUklHSFRfQk9UVE9NOlktPUMuaGVpZ2h0LFAtPUMud2lkdGg7YnJlYWs7Y2FzZSBNaS5MRUZUX0NFTlRFUjpZLT1DLmhlaWdodC8yO2JyZWFrO2Nhc2UgTWkuUklHSFRfQ0VO''@;'; put 'put ''VEVSOlktPUMuaGVpZ2h0LzIsUC09Qy53aWR0aH1jb25zdCBKPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxjZT1wYXJzZUludChKLm1hcmdpbkxlZnQsMTApLGZlPXBhcnNlSW50KEoubWFyZ2luUmlnaHQsMTApLEFlPXBhcnNlSW50KEoubWFyZ2luVG9wLDEwKSxIZT1wYXJzZUlu''@;'; put 'put ''dChKLm1hcmdpbkJvdHRvbSwxMCk7c3dpdGNoKGUpe2Nhc2UgTWkuTEVGVF9UT1A6Y2FzZSBNaS5UT1BfTEVGVDpjYXNlIE1pLlRPUF9SSUdIVDpjYXNlIE1pLlJJR0hUX1RPUDoocj09PU1pLkJPVFRPTV9SSUdIVHx8cj09PU1pLlJJR0hUX0JPVFRPTSkmJihZLT1IZSxQLT1mZSksKHI9PT1N''@;'; put 'put ''aS5CT1RUT01fTEVGVHx8cj09PU1pLkxFRlRfQk9UVE9NKSYmKFktPUFlLFArPWNlKSwocj09PU1pLlRPUF9MRUZUfHxyPT09TWkuTEVGVF9UT1ApJiYoWSs9QWUsUCs9Y2UpLChyPT09TWkuVE9QX1JJR0hUfHxyPT09TWkuUklHSFRfVE9QKSYmKFkrPUFlLFAtPWZlKTticmVhaztjYXNlIE1p''@;'; put 'put ''LkxFRlRfQk9UVE9NOmNhc2UgTWkuQk9UVE9NX0xFRlQ6Y2FzZSBNaS5CT1RUT01fUklHSFQ6Y2FzZSBNaS5SSUdIVF9CT1RUT006KHI9PT1NaS5CT1RUT01fTEVGVHx8cj09PU1pLkxFRlRfQk9UVE9NKSYmKFktPUhlLFArPWNlKSwocj09PU1pLkJPVFRPTV9SSUdIVHx8cj09PU1pLlJJR0hU''@;'; put 'put ''X0JPVFRPTSkmJihZLT1IZSxQLT1mZSksKHI9PT1NaS5UT1BfTEVGVHx8cj09PU1pLkxFRlRfVE9QKSYmKFkrPUFlLFArPWNlKSwocj09PU1pLlRPUF9SSUdIVHx8cj09PU1pLlJJR0hUX1RPUCkmJihZKz1BZSxQLT1mZSk7YnJlYWs7Y2FzZSBNaS5UT1BfQ0VOVEVSOlktPUhlLFArPWNlLFAt''@;'; put 'put ''PWZlO2JyZWFrO2Nhc2UgTWkuQk9UVE9NX0NFTlRFUjpZKz1BZSxQKz1jZSxQLT1mZTticmVhaztjYXNlIE1pLkxFRlRfQ0VOVEVSOlkrPUFlLFktPUhlLFAtPWZlO2JyZWFrO2Nhc2UgTWkuUklHSFRfQ0VOVEVSOlkrPUFlLFktPUhlLFArPWNlfXJldHVybiB0aGlzLmVsZW1lbnQuc3R5bGUu''@;'; put 'put ''dHJhbnNmb3JtPWB0cmFuc2xhdGVYKCR7TWF0aC5yb3VuZChQKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91bmQoWSl9cHgpYCx0aGlzLl9zY3JvbGwuYXNPYnNlcnZhYmxlKCl9cmVsZWFzZSgpe3RoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09IiIsdGhpcy5yZW1vdmVTY3JvbGxFdmVu''@;'; put 'put ''dExpc3RlbmVycygpfWlzUG9zaXRpb25lZCh0KXtjb25zdCBlPWdldENvbXB1dGVkU3R5bGUodCkucG9zaXRpb247cmV0dXJuInJlbGF0aXZlIj09PWV8fCJhYnNvbHV0ZSI9PT1lfHwiZml4ZWQiPT09ZX1lbWl0U2Nyb2xsRXZlbnQoKXt0aGlzLl9zY3JvbGwubmV4dCgpfWFkZFNjcm9sbEV2''@;'; put 'put ''ZW50TGlzdGVuZXJzKHQpe3RoaXMuX3Njcm9sbD1uZXcgdXI7Y29uc3QgZT10O2xldCByPXQ7Zm9yKDtyJiZyIT09ZG9jdW1lbnQmJih0aGlzLnNjcm9sbHMocikmJihyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIpLHRoaXMuc2Nyb2xsYWJs''@;'; put 'put ''ZUVsZW1lbnRzLnB1c2gocikpLHI9PT1lfHwhdGhpcy5pc1Bvc2l0aW9uZWQocikpOylyPXIucGFyZW50Tm9kZX1yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVycygpe2Zvcihjb25zdCB0IG9mIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzKXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0''@;'; put 'put ''aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcik7dGhpcy5zY3JvbGxhYmxlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fc2Nyb2xsJiYodGhpcy5fc2Nyb2xsLmNvbXBsZXRlKCksZGVsZXRlIHRoaXMuX3Njcm9sbCl9c2Nyb2xscyh0KXtjb25zdCBlPWdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJu''@;'; put 'put ''InNjcm9sbCI9PT1lLm92ZXJmbG93WHx8ImF1dG8iPT09ZS5vdmVyZmxvd1h8fCJzY3JvbGwiPT09ZS5vdmVyZmxvd1l8fCJhdXRvIj09PWUub3ZlcmZsb3dZfX1jb25zdCBycGU9ImlzLW9mZi1zY3JlZW4iO2xldCBiWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscil7dGhpcy5wYXJl''@;'; put 'put ''bnRIb3N0PXIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aT0+e3RoaXMuYW5jaG9yRWxlbS5j''@;'; put 'put ''b250YWlucyhpLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9ZS5nZXQoemkpLHRoaXMudG9nZ2xlU2VydmljZT1lLmdldChnYyksdGhpcy5yZW5kZXJlcj1lLmdldChUbyksdGhpcy5uZ1pvbmU9ZS5nZXQoSmEpLHRoaXMucmVmPWUuZ2V0KEZzKSx0aGlz''@;'; put 'put ''LmFuY2hvckVsZW09ci5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyBOcWUodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBlKGtmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuKSkuc3Vi''@;'; put 'put ''c2NyaWJlKGk9PntpPyh0aGlzLmFuY2hvcigpLHRoaXMuYXR0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxycGUpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVyZXIuYWRk''@;'; put 'put ''Q2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHJwZSkpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLmFuY2hvcigpLHRoaXMuYXR0YWNoRVNDTGlzdGVuZXIoKSl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy51cGRhdGVBbmNob3ImJih0aGlzLnVwZGF0ZUFuY2hvcj0hMSx0''@;'; put 'put ''aGlzLnBvcG92ZXJJbnN0YW5jZS5hbmNob3IodGhpcy5hbmNob3JFbGVtLHRoaXMuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQsdGhpcy5wb3BvdmVyT3B0aW9ucykuc3Vic2NyaWJlKCgpPT57dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9KSx0aGlzLmF0dGFjaE91dHNpZGVDbGlj''@;'; put 'put ''a0xpc3RlbmVyKCkpfW5nT25EZXN0cm95KCl7dGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpLHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9YW5jaG9yKCl7dGhpcy51cGRhdGVBbmNob3I9ITB9cmVsZWFzZSgpe3RoaXMuZGV0YWNoT3V0c2lkZUNsaWNrTGlz''@;'; put 'put ''dGVuZXIoKSx0aGlzLnBvcG92ZXJJbnN0YW5jZS5yZWxlYXNlKCl9YXR0YWNoRVNDTGlzdGVuZXIoKXt0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj10''@;'; put 'put ''aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLCJrZXlkb3duIixlPT57ZSYmZS5rZXkmJkZmKGUua2V5KT09PWhhLkVzY2FwZSYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5yZWYubWFya0ZvckNoZWNrKCl9KX0pfSl9ZGV0YWNoRVND''@;'; put 'put ''TGlzdGVuZXIoKXt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXImJih0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXIoKSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCl9YXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2smJnRoaXMudG9nZ2xlU2Vy''@;'; put 'put ''dmljZS5vcGVuJiZkb2N1bWVudCYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX1kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNp''@;'; put 'put ''ZGVDbGljayYmZG9jdW1lbnQmJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXImJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3''@;'; put 'put ''KGV8fG4pKFdlKEhvKSxXZSh6aSw0KSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc3RhbmRhbG9uZTohMX0pLG59KSgpLGx2PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBiWHtjb25zdHJ1Y3RvcihlLHIsaSxhKXtpZighcil0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3Vs''@;'; put 'put ''ZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoZSxyKSxpPyh0aGlzLmFuY2hvclBvaW50PU1pLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1NaS5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9TWkuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9p''@;'; put 'put ''bnQ9TWkuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9YX1zZXQgcG9zaXRpb24o''@;'; put 'put ''ZSl7c3dpdGNoKGUpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PU1pLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1NaS5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1NaS5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1NaS5M''@;'; put 'put ''RUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1NaS5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9TWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1NaS5CT1RUT01fTEVGVCx0''@;'; put 'put ''aGlzLnBvcG92ZXJQb2ludD1NaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1NaS5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9TWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9TWkuUklHSFRfQk9U''@;'; put 'put ''VE9NLHRoaXMucG9wb3ZlclBvaW50PU1pLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9TWkuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9TWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9TWkuTEVG''@;'; put 'put ''VF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9TWkuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVy''@;'; put 'put ''LmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7''@;'; put 'put ''cmV0dXJuIG5ldyhlfHxuKShXZShIbyksV2Uob0gsOCksV2UobiwxMiksV2UoZEgpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmc28oaSx1SCw0KSwyJmUpe2xl''@;'; put 'put ''dCBhO2RpKGE9aGkoKSkmJihyLml0ZW1zPWEpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJihScigicm9sZSIsIm1lbnUiKSxicigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbMCwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV0sbmdDb250ZW50U2VsZWN0b3JzOkNvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoKSxCcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGN2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGks''@;'; put 'put ''YSl7dGhpcy50b2dnbGVTZXJ2aWNlPXIsdGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMCxlLnBhcmVudCYmKHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITEpLGEudHJpZ2dlcj1pLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1vbkRyb3Bk''@;'; put 'put ''b3duVHJpZ2dlckNsaWNrKGUpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGk1KSxXZShnYyksV2UoemkpLFdlKGRIKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0''@;'; put 'put ''b3JzOltbIiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsiIiwiY2xyRHJvcGRvd25Ub2dnbGUiLCIiXV0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MSZlJiZrdCgiY2xpY2siLGZ1bmN0aW9uKGEpe3JldHVybiByLm9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soYSl9''@;'; put 'put ''KSwyJmUmJihScigiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSgiYXJpYS1leHBhbmRlZCIsci5hY3RpdmUpLGJyKCJkcm9wZG93bi10b2dnbGUiLHIuaXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhci5pc1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFibGUiLCFyLmlzUm9vdExl''@;'; put 'put ''dmVsVG9nZ2xlKSgiYWN0aXZlIixyLmFjdGl2ZSkpfSxzdGFuZGFsb25lOiExfSksbn0pKCk7Y29uc3QgVnFlPVt7cHJvdmlkZTp1SCx1c2VDbGFzczooKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLmVsPWUsdGhpcy5yZW5kZXJlcj1yLHRoaXMucGxhdGZvcm1JZD1pLHRo''@;'; put 'put ''aXMuaWQ9UHUoKSx0aGlzLmRpc2FibGVkPSExLHIuc2V0QXR0cmlidXRlKGUubmF0aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLHIuc2V0QXR0cmlidXRlKGUubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7X2wodGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIu''@;'; put 'put ''c2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIwIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFy''@;'; put 'put ''ZXN0In0pKX1ibHVyKCl7X2wodGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5ibHVyKCkpfWFjdGl2YXRlKCl7X2wodGhpcy5wbGF0Zm9ybUlkKSYm''@;'; put 'put ''dGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKHppKSxPcihUbyksT3IoZGMpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKX1dO2xldCBqdz0o''@;'; put 'put ''KCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLmRyb3Bkb3duPWUsdGhpcy5fZHJvcGRvd25TZXJ2aWNlPXIsdGhpcy5mb2N1c2FibGVJdGVtPWl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5m''@;'; put 'put ''b2N1c2FibGVJdGVtLmRpc2FibGVkPSEhZXx8IiI9PT1lfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGUpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1lfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtpZih0aGlzLmRyb3Bk''@;'; put 'put ''b3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5kcm9wZG93bi50b2dnbGVTZXJ2aWNlLm9wZW4pe2NvbnN0IGU9dGhpcy5maW5kUm9vdERyb3Bkb3duKCk7ZS5mb2N1c0hhbmRsZXIuZm9jdXMoKSxlLmZvY3VzSGFuZGxlci5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xv''@;'; put 'put ''c2VkPSExfXNldFRpbWVvdXQoKCk9Pnt0aGlzLmRyb3Bkb3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZHJvcGRvd25TZXJ2aWNlLmNsb3NlTWVudXMoKX0pfW9uU3BhY2VLZXlkb3duKGUpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChl''@;'; put 'put ''KX1vbkVudGVyS2V5ZG93bihlKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoZSl9c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChlKXt0aGlzLmRpc2FibGVkJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkp''@;'; put 'put ''fWZpbmRSb290RHJvcGRvd24oKXtsZXQgZT10aGlzLmRyb3Bkb3duO2Zvcig7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGk1KSxXZShmQSksV2UodUgpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5''@;'; put 'put ''cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25JdGVtIiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MSZlJiZrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Ecm9wZG93bkl0ZW1DbGljaygpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiByLm9uU3BhY2VLZXlkb3duKGEpfSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGEpe3JldHVybiByLm9uRW50ZXJLZXlkb3duKGEpfSksMiZlJiYoUnIoInJvbGUiLCJtZW51aXRlbSIpKCJhcmlhLWRpc2FibGVkIixyLmRpc2FibGVkKSgiaWQiLHIuZHJvcGRvd25JdGVt''@;'; put 'put ''SWQpLGJyKCJkaXNhYmxlZCIsci5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6WzAsImNsckRpc2FibGVkIiwiZGlzYWJsZWQiXSxkcm9wZG93bkl0ZW1JZDpbMCwiaWQiLCJkcm9wZG93bkl0ZW1JZCJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltz''@;'; put 'put ''YShbVnFlXSldfSksbn0pKCksd1g9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsTmYsTnNdfSksbn0pKCksQ1g9KCgpPT57Y2xh''@;'; put 'put ''c3MgbntzZXQgdHJpZ2dlckVsKGUpe3RoaXMuX3RyaWdnZXJFbD1lfWZvY3VzVHJpZ2dlcigpe3RoaXMuX3RyaWdnZXJFbCYmdGhpcy5fdHJpZ2dlckVsLmZvY3VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rv''@;'; put 'put ''a2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFNYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgdXJ9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXNldElkKGUpe3RoaXMuX2lkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGhIPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjLG0pe3RoaXMudG9nZ2xlU2VydmljZT1lLHRoaXMuZWw9cix0aGlzLnNp''@;'; put 'put ''Z25wb3N0SWRTZXJ2aWNlPWksdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1hLHRoaXMucGxhdGZvcm1JZD1tLHRoaXMuYXJpYUV4cGFuZGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PWN9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdn''@;'; put 'put ''ZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGU9Pnt0aGlzLmFyaWFFeHBhbmRlZD1lO2NvbnN0IHI9dGhpcy5pc09wZW47dGhpcy5pc09wZW49ZSwhdGhpcy5pc09wZW4mJnIm''@;'; put 'put ''JnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShlPT50aGlzLmFyaWFDb250cm9sPWUpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9b25TaWducG9zdFRyaWdnZXJDbGlj''@;'; put 'put ''ayhlKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGUpfWZvY3VzT25DbG9zZSgpe19sKHRoaXMucGxhdGZvcm1JZCkmJiF0aGlzLmlzT3BlbiYmdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5kb2N1bWVudC5ib2R5JiZ0aGlzLnNpZ25wb3N0Rm9jdXNNYW5h''@;'; put 'put ''Z2VyLmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShnYyksV2UoemkpLFdlKFNYKSxXZShDWCksV2UoWHMpLFdlKGRjKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclNpZ25wb3N0VHJp''@;'; put 'put ''Z2dlciIsIiJdXSxob3N0QXR0cnM6WzEsInNpZ25wb3N0LXRyaWdnZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoImNsaWNrIixmdW5jdGlvbihhKXtyZXR1cm4gci5vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGEpfSksMiZlJiYoUnIoImFyaWEtZXhw''@;'; put 'put ''YW5kZWQiLHIuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsci5hcmlhQ29udHJvbCksYnIoImFjdGl2ZSIsci5pc09wZW4pKX0sc3RhbmRhbG9uZTohMX0pLG59KSgpLGZIPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jb21tb25TdHJpbmdzPWUsdGhpcy51c2VDdXN0''@;'; put 'put ''b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGUpe3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGZzKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1zaWducG9z''@;'; put 'put ''dCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiZzbyhpLGhILDUpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIuY3VzdG9tVHJpZ2dlcj1hLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigic2lnbnBvc3QiLCEw''@;'; put 'put ''KX0saW5wdXRzOntzaWducG9zdFRyaWdnZXJBcmlhTGFiZWw6WzAsImNsclNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCIsInNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbQ1gsU1hdKSxNZihbcjVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkNv''@;'; put 'put ''LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWxpbmsiXSxbInNoYXBlIiwiaW5mby1jaXJjbGUiXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLGN0KDAsWVplLDMsMiwibmctY29udGFpbmVyIiwwKSxCcigxKSksMiZlJiZ5ZSgibmdJZiIsIXIudXNlQ3VzdG9tVHJpZ2dlcil9LGRlcGVuZGVuY2llczpbbWEscnMsaEhdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2NvbnN0IEJxZT17InRv''@;'; put 'put ''cC1sZWZ0Ijp7YW5jaG9yUG9pbnQ6TWkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6TWkuQk9UVE9NX1JJR0hULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInRvcC1taWRkbGUiOnthbmNob3JQb2ludDpNaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpNaS5CT1RUT01fQ0VOVEVSLG9mZnNldFk6''@;'; put 'put ''LTE2LG9mZnNldFg6MH0sInRvcC1yaWdodCI6e2FuY2hvclBvaW50Ok1pLlRPUF9DRU5URVIscG9wb3ZlclBvaW50Ok1pLkJPVFRPTV9MRUZULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInJpZ2h0LXRvcCI6e2FuY2hvclBvaW50Ok1pLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6TWkuTEVG''@;'; put 'put ''VF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJyaWdodC1taWRkbGUiOnthbmNob3JQb2ludDpNaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50Ok1pLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6TWkuUklHSFRfQ0VO''@;'; put 'put ''VEVSLHBvcG92ZXJQb2ludDpNaS5MRUZUX1RPUCxvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50Ok1pLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50Ok1pLlRPUF9MRUZULG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hv''@;'; put 'put ''clBvaW50Ok1pLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50Ok1pLlRPUF9DRU5URVIsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50Ok1pLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50Ok1pLlRPUF9SSUdIVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0s''@;'; put 'put ''ImxlZnQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6TWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50Ok1pLlJJR0hUX1RPUCxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0LW1pZGRsZSI6e2FuY2hvclBvaW50Ok1pLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpNaS5SSUdIVF9DRU5URVIsb2Zm''@;'; put 'put ''c2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC10b3AiOnthbmNob3JQb2ludDpNaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6TWkuUklHSFRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sZGVmYXVsdDp7YW5jaG9yUG9pbnQ6TWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpNaS5M''@;'; put 'put ''RUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn19LGpxZT1bInRvcC1sZWZ0IiwidG9wLW1pZGRsZSIsInRvcC1yaWdodCIsInJpZ2h0LXRvcCIsInJpZ2h0LW1pZGRsZSIsInJpZ2h0LWJvdHRvbSIsImJvdHRvbS1yaWdodCIsImJvdHRvbS1taWRkbGUiLCJib3R0b20tbGVmdCIsImxl''@;'; put 'put ''ZnQtYm90dG9tIiwibGVmdC1taWRkbGUiLCJsZWZ0LXRvcCJdO2xldCBpcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGJYe2NvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMpe2lmKHN1cGVyKGUsciksdGhpcy5jb21tb25TdHJpbmdzPWksdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1jLHRoaXMu''@;'; put 'put ''cGxhdGZvcm1JZD1tLHRoaXMuc2lnbnBvc3RDb250ZW50SWQ9UHUoKSwhcil0aHJvdyBuZXcgRXJyb3IoImNsci1zaWducG9zdC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXNpZ25wb3N0Iik7dGhpcy5wb3NpdGlvbj0icmlnaHQtbWlkZGxlIix0aGlzLmNs''@;'; put 'put ''b3NlT25PdXRzaWRlQ2xpY2s9ITAsYS5zZXRJZCh0aGlzLnNpZ25wb3N0Q29udGVudElkKSx0aGlzLmRvY3VtZW50PUN9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihlKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxl''@;'; put 'put ''bWVudCx0aGlzLnBvc2l0aW9uKSx0aGlzLl9wb3NpdGlvbj1lJiZqcWUuaW5kZXhPZihlKT4tMT9lOiJyaWdodC1taWRkbGUiLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pO2NvbnN0IHI9QnFlW3RoaXMucG9zaXRpb25dO3RoaXMu''@;'; put 'put ''YW5jaG9yUG9pbnQ9ci5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludD1yLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFk9ci5vZmZzZXRZLHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WD1yLm9mZnNldFh9Y2xvc2UoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Bl''@;'; put 'put ''bj0hMX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksX2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJl''@;'; put 'put ''dHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKEhvKSxXZShvSCw4KSxXZShmcyksV2UoU1gpLFdlKENYKSxXZShkYyksV2UoWHMpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0LWNvbnRlbnQiXV0saG9zdFZh''@;'; put 'put ''cnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJihuNCgiaWQiLHIuc2lnbnBvc3RDb250ZW50SWQpLGJyKCJzaWducG9zdC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e3NpZ25wb3N0Q2xvc2VBcmlhTGFiZWw6WzAsImNsclNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiLCJzaWducG9z''@;'; put 'put ''dENsb3NlQXJpYUxhYmVsIl0scG9zaXRpb246WzAsImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdLG5nQ29udGVudFNlbGVjdG9yczokWmUsZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic2lnbnBvc3Qtd3JhcCJdLFsxLCJwb3BvdmVyLXBv''@;'; put 'put ''aW50ZXIiXSxbMSwic2lnbnBvc3QtY29udGVudC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsInNpZ25wb3N0LWFjdGlvbiIsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbInRhYmluZGV4IiwiMCIsMSwic2lnbnBvc3QtY29udGVudC1ib2R5Il1dLHRl''@;'; put 'put ''bXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoR1plKSxyZSgwLCJkaXYiLDApLFZ0KDEsImRpdiIsMSkscmUoMiwiZGl2IiwyKSxCcigzKSxyZSg0LCJidXR0b24iLDMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gci5jbG9zZSgpfSksVnQoNSwiY2RzLWljb24iLDQpLGllKCko''@;'; put 'put ''KSxyZSg2LCJkaXYiLDUpLEJyKDcsMSksaWUoKSgpKSwyJmUmJihhZSg0KSxScigiYXJpYS1sYWJlbCIsci5zaWducG9zdENsb3NlQXJpYUxhYmVsfHxyLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJpYS1jb250cm9scyIsci5zaWducG9zdENvbnRlbnRJZCksYWUoKSxS''@;'; put 'put ''cigidGl0bGUiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSl9LGRlcGVuZGVuY2llczpbcnNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHpxZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoalQsQ1VlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUp''@;'; put 'put ''e3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsTnMsbEgsTmZdfSksbn0pKCksTVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyB1cn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNP''@;'; put 'put ''YnNlcnZhYmxlKCl9dXBkYXRlSWQoZSl7dGhpcy5faWQubmV4dChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseFg9KCgpPT57Y2xhc3Mgbntjb25z''@;'; put 'put ''dHJ1Y3RvcihlKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZX1vbk1vdXNlRW50ZXJUcmlnZ2VyKCl7dGhpcy5tb3VzZU92ZXJUcmlnZ2VyPSEwLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfW9uTW91c2VMZWF2ZVRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITEsdGhpcy5oaWRlSWZN''@;'; put 'put ''b3VzZU91dCgpfW9uTW91c2VFbnRlckNvbnRlbnQoKXt0aGlzLm1vdXNlT3ZlckNvbnRlbnQ9ITB9b25Nb3VzZUxlYXZlQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9aGlkZUlmTW91c2VPdXQoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMu''@;'; put 'put ''bW91c2VPdmVyVHJpZ2dlciYmIXRoaXMubW91c2VPdmVyQ29udGVudCYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKGdjKSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5''@;'; put 'put ''Om4uXHUwMjc1ZmFjfSksbn0pKCksUjY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10b29sdGlwIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGUscil7MiZlJiZicigidG9vbHRpcCIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbTVgseFhdKSxNZihbcjVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkNvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoKSxCcigwKSl9LGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pLG59KSgpO2NvbnN0IFdxZT1bImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImxlZnQiXSxacWU9WyJ4cyIsInNtIiwibWQiLCJsZyJdO2xldCBMNj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgYlh7Y29uc3RydWN0''@;'; put 'put ''b3IoZSxyLGksYSl7aWYoc3VwZXIoZSxyKSx0aGlzLnRvb2x0aXBJZFNlcnZpY2U9aSx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9YSwhcil0aHJvdyBuZXcgRXJyb3IoImNsci10b29sdGlwLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItdG9vbHRpcCIpO3Ro''@;'; put 'put ''aXMuaWQ9UHUoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe2NvbnN0IHI9ZXx8IiI7dGhpcy5faWQ9cix0aGlzLnRvb2x0aXBJZFNlcnZpY2UudXBkYXRlSWQocil9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihlKXtjb25zdCBy''@;'; put 'put ''PXRoaXMuX3Bvc2l0aW9uLGk9V3FlLmluY2x1ZGVzKGUpP2U6InJpZ2h0Ijtzd2l0Y2godGhpcy5fcG9zaXRpb249aSx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke3J9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2l9YH0pLGkpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFu''@;'; put 'put ''Y2hvclBvaW50PU1pLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9TWkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1NaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PU1pLlJJR0hUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdo''@;'; put 'put ''dCI6dGhpcy5hbmNob3JQb2ludD1NaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PU1pLkxFRlRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9TWkuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1NaS5SSUdIVF9UT1A7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJyaWdodCI6dGhpcy5hbmNob3JQb2ludD1NaS5SSUdIVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9TWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLmFuY2hvclBvaW50PU1pLkxFRlRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PU1pLlJJR0hUX1RPUDticmVhaztkZWZhdWx0''@;'; put 'put ''OiFmdW5jdGlvbiBVcWUobil7dGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgdmFsdWU6ICR7bn1gKX0oaSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoZSl7Y29uc3Qgcj10aGlzLl9zaXplLGk9WnFlLmluY2x1ZGVzKGUpP2U6InNtIjt0aGlzLl9zaXplPWksdGhp''@;'; put 'put ''cy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtyfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtpfWB9KX1uZ09uSW5pdCgpe3RoaXMuc2l6ZT10aGlzLnNpemV8fCJzbSIsdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufHwicmlnaHQifW9uTW91c2VFbnRlcigpe3RoaXMudG9v''@;'; put 'put ''bHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJDb250ZW50KCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZUNvbnRlbnQoKX11cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6ZSxuZXdDbGFzczpyfSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFz''@;'; put 'put ''cyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZSksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKEhvKSxXZShvSCw4KSxXZShNWCksV2UoeFgpKX0sbi5cdTAyNzVj''@;'; put 'put ''bXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAtY29udGVudCJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gci5vbk1vdXNlTGVhdmUoKX0pLDImZSYmKG40KCJpZCIsci5pZCksUnIoInJvbGUiLCJ0b29sdGlwIiksVGQoIm9wYWNpdHkiLDEpLGJyKCJ0b29sdGlwLWNvbnRlbnQiLCEwKSl9LGlucHV0czp7aWQ6ImlkIixwb3NpdGlvbjpbMCwiY2xyUG9zaXRpb24iLCJwb3NpdGlv''@;'; put 'put ''biJdLHNpemU6WzAsImNsclNpemUiLCJzaXplIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksTzY9''@;'; put 'put ''KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy50b2dnbGVTZXJ2aWNlPWUsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWksdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNoKHIuaWQuc3Vic2NyaWJlKGE9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWEpKX1uZ09uRGVzdHJveSgp''@;'; put 'put ''e3RoaXMuc3Vicy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1v''@;'; put 'put ''dXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoZ2MpLFdlKE1YKSxXZSh4WCkpfSxuLlx1MDI3NWRpcj1X''@;'; put 'put ''cih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiByLnNob3dUb29sdGlwKCl9''@;'; put 'put ''KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gci5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5vbk1vdXNlTGVhdmUoKX0pLDImZSYmKFJyKCJhcmlhLWRlc2Ny''@;'; put 'put ''aWJlZGJ5IixyLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxicigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfSxzdGFuZGFsb25lOiExfSksbn0pKCksWXFlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1''@;'; put 'put ''MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE5mLE5zXX0pLG59KSgpLEdxZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1''@;'; put 'put ''aW5qPXpuKHtpbXBvcnRzOlt3WCx6cWUsWXFlXX0pLG59KSgpO3ZhciB1dj1mdW5jdGlvbihuKXtyZXR1cm4gbi5WRVJUSUNBTD0idmVydGljYWwiLG4uSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsbi5DT01QQUNUPSJjb21wYWN0IixufSh1dnx8e30pO2xldCB2ND0oKCk9PntjbGFzcyBue2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlzLmxheW91dD11di5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKHV2KS5tYXAoZT0+dXZbZV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoZSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlkKGUpJiYodGhpcy5fbGFiZWxTaXplPWUpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09''@;'; put 'put ''PXV2LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PXV2LkhPUklaT05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09dXYuQ09NUEFDVH1pc1ZhbGlkKGUpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGUpPi0xfWxhYmVsU2l6''@;'; put 'put ''ZUlzVmFsaWQoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMubWluTGFiZWxTaXplJiZlPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5''@;'; put 'put ''Om4uXHUwMjc1ZmFjfSksbn0pKCkscHM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMpe3RoaXMuY29udHJvbElkU2VydmljZT1lLHRoaXMubGF5b3V0U2VydmljZT1yLHRoaXMubmdDb250cm9sU2VydmljZT1pLHRoaXMucmVuZGVyZXI9YSx0aGlzLmVsPWMsdGhpcy5lbmFi''@;'; put 'put ''bGVHcmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7dGhpcy5pZEF0dHI9dGhpcy5pZElucHV0LCh0aGlzLmNvbnRyb2xJZFNl''@;'; put 'put ''cnZpY2V8fHRoaXMubmdDb250cm9sU2VydmljZSkmJnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29udHJvbC1sYWJlbCIpLHRoaXMuZW5hYmxlR3JpZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwo''@;'; put 'put ''KSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKTwwJiYodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb2wtMTIiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudCxgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemV9YCkpLHRoaXMuY29udHJvbElkU2VydmljZSYmIXRoaXMuZm9yQXR0ciYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkQ2hhbmdlLnN1YnNj''@;'; put 'put ''cmliZShlPT57dGhpcy5mb3JBdHRyPWUsdGhpcy5pZEF0dHI9dGhpcy5pZElucHV0fHxgJHtlfS1sYWJlbGB9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfW9uQ2xp''@;'; put 'put ''Y2soZSl7dGhpcy5wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoZSl9cHJldmVudERlZmF1bHRPblNpZ25wb3N0VGFyZ2V0KGUpe3RoaXMuc2lnbnBvc3QmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFy''@;'; put 'put ''Z2V0KSYmZS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShfMiw4KSxXZSh2NCw4KSxXZShRMSw4KSxXZShUbyksV2UoemkpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1sibGFiZWwiXV0sY29u''@;'; put 'put ''dGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmc28oaSxmSCw1LHppKSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLnNpZ25wb3N0PWEuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsxJmUmJmt0KCJjbGljayIsZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIHIub25DbGljayhhKX0pLDImZSYmUnIoImlkIixyLmlkQXR0cikoImZvciIsci5mb3JBdHRyKX0saW5wdXRzOntpZElucHV0OlswLCJpZCIsImlkSW5wdXQiXSxmb3JBdHRyOlswLCJmb3IiLCJmb3JBdHRyIl19LHN0YW5kYWxvbmU6ITF9KSxufSkoKSwkcWU9KCgpPT57Y2xhc3MgbiBl''@;'; put 'put ''eHRlbmRzIF9Ye2NvbnN0cnVjdG9yKGUscil7c3VwZXIoZSxyKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9ZSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1yLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8''@;'; put 'put ''bikoV2UoXzIsOCksV2Uoc3YsOCkpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiYoUnIoImlkIixyLmlkKSxicigiY2xyLXN1YnRleHQiLCEwKSgic3Vj''@;'; put 'put ''Y2VzcyIsITApKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdLG5nQ29udGVudFNlbGVjdG9yczpDbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKCksQnIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx3aD0oKCk9PntjbGFzcyBue2NvbnN0''@;'; put 'put ''cnVjdG9yKGUpe3RoaXMubGF5b3V0U2VydmljZT1lLHRoaXMuY2xhc3NOYW1lPSIifWNvbnRyb2xDbGFzcyhlPV9oLk5PTkUscj0hMSxpPSIiKXtjb25zdCBhPVt0aGlzLmNsYXNzTmFtZSxpXTtzd2l0Y2goZSl7Y2FzZSBfaC5WQUxJRDphLnB1c2goImNsci1zdWNjZXNzIik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSBfaC5JTlZBTElEOmEucHVzaCgiY2xyLWVycm9yIil9cmV0dXJuIHImJnRoaXMubGF5b3V0U2VydmljZSYmLTE9PT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJjbHItY29sIikmJmEucHVzaChgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5tYXhMYWJlbFNpemUtdGhpcy5sYXlv''@;'; put 'put ''dXRTZXJ2aWNlLmxhYmVsU2l6ZX0gY2xyLWNvbC0xMmApLGEuam9pbigiICIpLnRyaW0oKX1pbml0Q29udHJvbENsYXNzKGUscil7ciYmci5jbGFzc05hbWUmJih0aGlzLmNsYXNzTmFtZT1yLmNsYXNzTmFtZSxyLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goYT0+e2Euc3RhcnRzV2l0''@;'; put 'put ''aCgiY2xyLWNvbCIpJiZlLnJlbW92ZUNsYXNzKHIsYSl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKHY0LDgpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxkdj0oKCk9PntjbGFzcyBu''@;'; put 'put ''e2NvbnN0cnVjdG9yKGUscixpLGEpe3RoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWUsdGhpcy5sYXlvdXRTZXJ2aWNlPXIsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5w''@;'; put 'put ''dXNoKGUuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoYz0+e3RoaXMuc3RhdGU9YyxzZXRUaW1lb3V0KCgpPT57dGhpcy51cGRhdGVIZWxwZXJzKCl9KX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShjPT57dGhpcy5jb250cm9sPWN9KSxhLmFk''@;'; put 'put ''ZGl0aW9uYWxDb250cm9sc0NoYW5nZXMuc3Vic2NyaWJlKGM9Pnt0aGlzLmFkZGl0aW9uYWxDb250cm9scz1jfSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnR9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3Rh''@;'; put 'put ''dGU9PT1faC5WQUxJRCYmdGhpcy5zdWNjZXNzTWVzc2FnZVByZXNlbnR9Z2V0IHNob3dJbnZhbGlkKCl7cmV0dXJuIHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09PV9oLklOVkFMSUQmJnRoaXMuZXJyb3JNZXNzYWdlUHJlc2VudH1nZXQgc3VjY2Vzc01lc3NhZ2VQcmVzZW50KCl7cmV0dXJu''@;'; put 'put ''ISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBlcnJvck1lc3NhZ2VQcmVzZW50KCl7cmV0dXJuISF0aGlzLmNvbnRyb2xFcnJvckNvbXBvbmVudH1nZXQgdG91Y2hlZCgpe3JldHVybiEoIXRoaXMuY29udHJvbD8udG91Y2hlZCYmIXRoaXMuYWRkaXRpb25hbENvbnRyb2xzPy5z''@;'; put 'put ''b21lKGU9PmUudG91Y2hlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMudXBkYXRlSGVscGVycygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX1jb250cm9sQ2xhc3MoKXtyZXR1cm4gdGhpcy5jb250cm9sQ2xhc3NTZXJ2''@;'; put 'put ''aWNlLmNvbnRyb2xDbGFzcyghdGhpcy5jb250cm9sU3VjY2Vzc0NvbXBvbmVudCYmdGhpcy5zdGF0ZT09PV9oLlZBTElEfHwhdGhpcy50b3VjaGVkP19oLk5PTkU6dGhpcy5zdGF0ZSx0aGlzLmFkZEdyaWQoKSl9YWRkR3JpZCgpe3JldHVybiB0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxh''@;'; put 'put ''eW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpfXVwZGF0ZUhlbHBlcnMoKXt0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2VydmljZS5zZXRIZWxwZXJzKHtzaG93OnRoaXMuc2hvd0ludmFsaWR8fHRoaXMuc2hvd0hlbHBlcnx8dGhpcy5zaG93VmFsaWQsc2hvd0ludmFsaWQ6''@;'; put 'put ''dGhpcy5zaG93SW52YWxpZCxzaG93SGVscGVyOnRoaXMuc2hvd0hlbHBlcixzaG93VmFsaWQ6dGhpcy5zaG93VmFsaWR9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoYmgpLFdlKHY0LDgpLFdlKHdoKSxXZShRMSkpfSxuLlx1MDI3NWRpcj1X''@;'; put 'put ''cih7dHlwZTpuLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUscixpKXtpZigxJmUmJihzbyhpLHBzLDUpLHNvKGksJHFlLDUpLHNvKGksUnFlLDUpLHNvKGksY0gsNSkpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIubGFiZWw9YS5maXJzdCksZGkoYT1oaSgpKSYmKHIuY29udHJvbFN1Y2Nl''@;'; put 'put ''c3NDb21wb25lbnQ9YS5maXJzdCksZGkoYT1oaSgpKSYmKHIuY29udHJvbEVycm9yQ29tcG9uZW50PWEuZmlyc3QpLGRpKGE9aGkoKSkmJihyLmNvbnRyb2xIZWxwZXJDb21wb25lbnQ9YS5maXJzdCl9fSxzdGFuZGFsb25lOiExfSksbn0pKCk7Y2xhc3MgcEh7Y29uc3RydWN0b3IodCxlLHI9''@;'; put 'put ''MCl7aWYodGhpcy5pbmplY3Rvcj1lLmluamVjdG9yLCF0aGlzLmluamVjdG9yLmdldCh0LG51bGwpKXtjb25zdCBpPXRoaXMuaW5qZWN0b3IuZ2V0KF8xKSxhPXRoaXMuaW5qZWN0b3IuZ2V0KHppKTtlLmNyZWF0ZUNvbXBvbmVudChpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGtxZSkpO2Nv''@;'; put 'put ''bnN0IGM9aS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSxtPVtdO21bcl09W2EubmF0aXZlRWxlbWVudF07Y29uc3QgQz1lLmNyZWF0ZUNvbXBvbmVudChjLHZvaWQgMCx2b2lkIDAsbSk7ZS5yZW1vdmUoMCksdGhpcy5pbmplY3Rvcj1DLmluamVjdG9yfX1nZXQodCxlKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pbmplY3Rvci5nZXQodCxlKX19bGV0IEVYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkPW5ldyB1cn1nZXQgdG91Y2hlZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVkLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkLm5l''@;'; put 'put ''eHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7dmFyIFRYPWZ1bmN0aW9uKG4pe3JldHVybiBuLkZPUk09ImZvcm0iLG4uTU9ERUw9Im1vZGVsIixu''@;'; put 'put ''fShUWHx8e30pO2xldCBodj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyxtKXt0aGlzLnZjcj1lLHRoaXMud3JhcHBlclR5cGU9cix0aGlzLl9uZ0NvbnRyb2w9YSx0aGlzLnJlbmRlcmVyPWMsdGhpcy5lbD1tLHRoaXMuaW5kZXg9MCx0aGlzLnN1YnNjcmlwdGlvbnM9W10s''@;'; put 'put ''dGhpcy5hZGRpdGlvbmFsRGlmZmVyPW5ldyBNYXAsaSYmKHRoaXMubmdDb250cm9sU2VydmljZT1pLmdldChRMSxudWxsKSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1pLmdldChiaCxudWxsKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aS5nZXQod2gsbnVsbCksdGhpcy5tYXJrQ29u''@;'; put 'put ''dHJvbFNlcnZpY2U9aS5nZXQoRVgsbnVsbCksdGhpcy5kaWZmZXJzPWkuZ2V0KHpFLG51bGwpKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UmJnRoaXMuY29udHJvbENsYXNzU2VydmljZS5pbml0Q29udHJvbENsYXNzKGMsbS5uYXRpdmVFbGVtZW50KSx0aGlzLm1hcmtDb250cm9sU2Vydmlj''@;'; put 'put ''ZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tYXJrQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1hcmtBc1RvdWNoZWQoKX0pKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9s''@;'; put 'put ''U2VydmljZS5oZWxwZXJzQ2hhbmdlLnN1YnNjcmliZShDPT57dGhpcy5zZXRBcmlhRGVzY3JpYmVkQnkoQyl9KSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lLHRoaXMuY29udHJvbElkU2VydmljZSYmKHRoaXMuY29udHJvbElkU2VydmljZS5pZD1lKX1n''@;'; put 'put ''ZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuYWRkaXRpb25hbERpZmZlci5zaXplPjB9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgcEgodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9''@;'; put 'put ''dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KF8yKSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoc3YsbnVsbCksdGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2Vydmlj''@;'; put 'put ''ZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuX25nQ29udHJvbCYmKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sPyh0aGlzLm5nQ29udHJvbD10aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkQWRkaXRpb25hbENvbnRyb2wo''@;'; put 'put ''dGhpcy5fbmdDb250cm9sKSx0aGlzLmFkZGl0aW9uYWxEaWZmZXIuc2V0KHRoaXMuX25nQ29udHJvbCx0aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSk6KHRoaXMubmdDb250cm9sPXRoaXMuX25nQ29udHJvbCx0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0Q29u''@;'; put 'put ''dHJvbCh0aGlzLm5nQ29udHJvbCksdGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fbmdDb250cm9sKS5jcmVhdGUoKSkpfW5nRG9DaGVjaygpe2lmKHRoaXMudHJpZ2dlckRvQ2hlY2sodGhpcy5kaWZmZXIsdGhpcy5uZ0NvbnRyb2wpLHRoaXMuaGFzQWRkaXRpb25hbENvbnRy''@;'; put 'put ''b2xzKWZvcihjb25zdFtlLHJdb2YgdGhpcy5hZGRpdGlvbmFsRGlmZmVyKXRoaXMudHJpZ2dlckRvQ2hlY2socixlKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmU/LnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5pZkNvbnRyb2xT''@;'; put 'put ''dGF0ZVNlcnZpY2UmJnRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlLnRyaWdnZXJTdGF0dXNDaGFuZ2UoKX1nZXRQcm92aWRlckZyb21Db250YWluZXIoZSxyKXt0cnl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChlLHIpfWNhdGNoe3JldHVybiByfX10cmlnZ2VyRG9DaGVj''@;'; put 'put ''ayhlLHIpe2lmKGUpe2NvbnN0IGk9ZS5kaWZmKHIpO2kmJmkuZm9yRWFjaENoYW5nZWRJdGVtKGE9PnsoYS5rZXk9PT1UWC5GT1JNfHxhLmtleT09PVRYLk1PREVMKSYmYS5jdXJyZW50VmFsdWUhPT1hLnByZXZpb3VzVmFsdWUmJnRoaXMudHJpZ2dlclZhbGlkYXRpb24oKX0pfX1tYXJrQXNU''@;'; put 'put ''b3VjaGVkKCl7dGhpcy5uZ0NvbnRyb2wmJih0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuaGFzQWRk''@;'; put 'put ''aXRpb25hbENvbnRyb2xzJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2UuYWRkaXRpb25hbENvbnRyb2xzPy5mb3JFYWNoKGU9PntlLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLGUuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9KX1zZXRBcmlhRGVzY3JpYmVkQnkoZSl7aWYoZS5zaG93''@;'; put 'put ''KXtjb25zdCByPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoZSk7aWYobnVsbCE9PXIpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixyKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChlKXtjb25zdCByPXRoaXMuY29udGFpbmVySWRTZXJ2aWNlPy5pZHx8dGhpcy5jb250cm9sSWRTZXJ2aWNlPy5pZDtpZighcilyZXR1cm4gbnVsbDtjb25zdCBpPVtgJHtyfS1oZWxw''@;'; put 'put ''ZXJgXTtyZXR1cm4gZS5zaG93SW52YWxpZD9pLnB1c2goYCR7cn0tZXJyb3JgKTplLnNob3dWYWxpZCYmaS5wdXNoKGAke3J9LXN1Y2Nlc3NgKSxpLmpvaW4oIiAiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoTm4pLFdlKHlfKSxXZShIbyks''@;'; put 'put ''V2UocTEpLFdlKFRvKSxXZSh6aSkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MSZlJiZrdCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gci50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZlJiZuNCgiaWQiLHIuaWQpfSxpbnB1''@;'; put 'put ''dHM6e2lkOiJpZCJ9LHN0YW5kYWxvbmU6ITF9KSxufSkoKSxzcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIpe3RoaXMubGF5b3V0U2VydmljZT1lLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPXJ9c2V0IGxhYmVsU2l6ZShlKXtjb25zdCByPXBhcnNlSW50KGUsMTApfHwyO3RoaXMu''@;'; put 'put ''bGF5b3V0U2VydmljZS5sYWJlbFNpemU9cn1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJrQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxu''@;'; put 'put ''KShXZSh2NCksV2UoRVgpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiZzbyhpLHBzLDUpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIubGFiZWxzPWEpfX0saG9zdFZh''@;'; put 'put ''cnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsxJmUmJmt0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25Gb3JtU3VibWl0KCl9KSwyJmUmJmJyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixyLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJj''@;'; put 'put ''bHItZm9ybS1jb21wYWN0IixyLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbMCwiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFt2NCxFWF0pXX0pLG59KSgpLGR1PSgoKT0+e2NsYXNzIG57Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtIcy5hZGRJY29ucyhmMixwMil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE5zXX0pLG59KSgpO2NvbnN0IEFYPW5ldyB3cigiSVNfVE9H''@;'; put 'put ''R0xFIiksSnFlPXtwcm92aWRlOkFYLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gcXFlKCl7cmV0dXJuIG5ldyB4aSghMSl9fTtsZXQgYjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2go''@;'; put 'put ''ZS5zdWJzY3JpYmUocj0+e3RoaXMudG9nZ2xlPXJ9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShBWCkpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUscixpKXtpZigxJmUmJihzbyhpLHBz''@;'; put 'put ''LDcpLHNvKGksQ2gsNykpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIubGFiZWw9YS5maXJzdCksZGkoYT1oaSgpKSYmKHIuY2hlY2tib3g9YS5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImNsci1jaGVja2JveC13cmFwcGVyIiwhci50''@;'; put 'put ''b2dnbGUpKCJjbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCIsbnVsbD09ci5jaGVja2JveD9udWxsOnIuY2hlY2tib3guY29udHJvbERpc2FibGVkKSgiY2xyLXRvZ2dsZS13cmFwcGVyIixyLnRvZ2dsZSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtfMixKcWVdKV0sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOlhaZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoS1plKSxCcigwKSxCcigxLDEpLGN0KDIscVplLDEsMCwibGFiZWwiLDApKSwyJmUmJihhZSgyKSx5ZSgibmdJZiIsIXIubGFiZWwpKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOlttYSxwc10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksQ2g9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGh2e2NvbnN0cnVjdG9yKGUscixpLGEsYyxtKXtzdXBlcihlLGIyLHIsaSxhLGMpLHRoaXMuY29udHJvbD1pLHRoaXMudG9nZ2xlPW19Z2V0IGNvbnRyb2xEaXNhYmxlZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKTtjb25zdCBlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKEFYLG51bGwpO2UmJm51bGwhPT10aGlzLnRvZ2dsZSYmZS5uZXh0KCEwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoTm4pLFdlKEhvKSxXZShxMSwxMCksV2UoVG8pLFdlKHppKSxWcCgiY2xyVG9nZ2xlIikpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJDaGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLGhvc3RWYXJz''@;'; put 'put ''OjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZScigicm9sZSIsbnVsbCE9PXIudG9nZ2xlPyJzd2l0Y2giOm51bGwpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxufSkoKSx6dz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZHZ7Y29uc3RydWN0b3IoZSxyLGksYSl7c3Vw''@;'; put 'put ''ZXIoYSxlLHIsaSksdGhpcy5sYXlvdXRTZXJ2aWNlPWUsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPXIsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmlubGluZT0hMX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNl''@;'; put 'put ''dCBjbHJJbmxpbmUoZSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBlPyJmYWxzZSIhPT1lOiEhZX1nZXQgYWxsQ2hlY2tib3hlc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWQmJighdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aHx8dGhpcy5hZGRp''@;'; put 'put ''dGlvbmFsQ29udHJvbHMuZXZlcnkoZT0+ZS5kaXNhYmxlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMuY2hlY2tib3hlcy5sZW5ndGg/Imdyb3VwIjpudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZSh2NCw4KSxXZSh3aCksV2UoUTEpLFdlKGJoKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1jaGVja2JveC1jb250YWluZXIiXSxbImNsci10b2dnbGUtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9u''@;'; put 'put ''KGUscixpKXtpZigxJmUmJnNvKGksQ2gsNSksMiZlKXtsZXQgYTtkaShhPWhpKCkpJiYoci5jaGVja2JveGVzPWEpfX0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJihScigicm9sZSIsci5yb2xlKSxicigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9y''@;'; put 'put ''bS1jb250cm9sLWRpc2FibGVkIixyLmFsbENoZWNrYm94ZXNEaXNhYmxlZCkoImNsci1yb3ciLHIuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbYmgsUTEsd2gsc3ZdKSxJYV0sbmdDb250ZW50U2VsZWN0b3Jz''@;'; put 'put ''OlFaZSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItc3VidGV4dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlk''@;'; put 'put ''YXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEt''@;'; put 'put ''aGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlh''@;'; put 'put ''LWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoSlplKSxCcigwKSxjdCgxLGVZZSwxLDAsImxhYmVsIiwwKSxyZSgyLCJkaXYiLDEpLEJyKDMsMSksY3QoNCx0WWUsMiwwLCJkaXYiLDIpKDUsb1llLDUsNCwiZGl2''@;'; put 'put ''IiwyKSxpZSgpKSwyJmUmJihhZSgpLHllKCJuZ0lmIiwhci5sYWJlbCYmci5hZGRHcmlkKCkpLGFlKCksYnIoImNsci1jb250cm9sLWlubGluZSIsci5jbHJJbmxpbmUpLHllKCJuZ0NsYXNzIixyLmNvbnRyb2xDbGFzcygpKSxhZSgyKSx5ZSgibmdJZiIsci5zaG93SGVscGVyKSxhZSgpLHll''@;'; put 'put ''KCJuZ0lmIixyLnNob3dJbnZhbGlkfHxyLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1J1LG1hLHJzLHBzXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRcWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe0hzLmFkZEljb25zKGYyLHAyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsTnMsZHUsaEEsZHVdfSksbn0pKCk7ZnVuY3Rpb24gZXAobil7cmV0dXJuIG51bGwhPT1uJiYoInN0cmluZyI9PXR5cGVvZiBuP24ubGVuZ3RoPj0wOiJi''@;'; put 'put ''b29sZWFuIj09dHlwZW9mIG4mJm4pfWxldCBTaD0oKCk9PntjbGFzcyBue2dldCBzcGlubmVyQ2xhc3MoKXtyZXR1cm4hMH1nZXQgaW5saW5lQ2xhc3MoKXtyZXR1cm4gdGhpcy5faW5saW5lfXNldCBjbHJJbmxpbmUoZSl7dGhpcy5faW5saW5lPWVwKGUpfWdldCBpbnZlcnNlQ2xhc3MoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5faW52ZXJzZX1zZXQgY2xySW52ZXJzZShlKXt0aGlzLl9pbnZlcnNlPWVwKGUpfWdldCBzbWFsbENsYXNzKCl7cmV0dXJuIHRoaXMuX3NtYWxsfXNldCBjbHJTbWFsbChlKXt0aGlzLl9zbWFsbD1lcChlKX1nZXQgbWVkaXVtQ2xhc3MoKXtyZXR1cm4hdGhpcy5fc21hbGwm''@;'; put 'put ''JnRoaXMuX21lZGl1bX1zZXQgY2xyTWVkaXVtKGUpe3RoaXMuX21lZGl1bT1lcChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1zcGlubmVyIl1dLGhvc3RWYXJzOjExLGhv''@;'; put 'put ''c3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmKFJyKCJhcmlhLWJ1c3kiLCEwKSxicigic3Bpbm5lciIsci5zcGlubmVyQ2xhc3MpKCJzcGlubmVyLWlubGluZSIsci5pbmxpbmVDbGFzcykoInNwaW5uZXItaW52ZXJzZSIsci5pbnZlcnNlQ2xhc3MpKCJzcGlubmVyLXNtIixyLnNtYWxs''@;'; put 'put ''Q2xhc3MpKCJzcGlubmVyLW1kIixyLm1lZGl1bUNsYXNzKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUiLGNsckludmVyc2U6ImNsckludmVyc2UiLGNsclNtYWxsOiJjbHJTbWFsbCIsY2xyTWVkaXVtOiJjbHJNZWRpdW0ifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9y''@;'; put 'put ''czpDbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKCksQnIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxVdz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9''@;'; put 'put ''R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYV19KSxufSkoKTt2YXIgUDY9ZnVuY3Rpb24obil7cmV0dXJuIG4uVkVSVElDQUw9InZlcnRpY2FsIixuLkhPUklaT05UQUw9Imhvcml6b250YWwiLG4uQk9USD0iYm90aCIsbn0oUDZ8fHt9KTtsZXQgbHBlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIG57Y29uc3RydWN0b3IoZSxyKXt0aGlzLmVsZW1lbnRSZWY9ZSx0aGlzLnBsYXRmb3JtSWQ9cn1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1mb2N1cygpe19sKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWxlbWVudFJlZi5uYXRp''@;'; put 'put ''dmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHppKSxXZShkYykpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1c0l0ZW0iLCIiXV0sc3RhbmRhbG9uZTohMX0pLG59KSgp''@;'; put 'put ''LFd3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5kaXJlY3Rpb249UDYuVkVSVElDQUwsdGhpcy5mb2N1c09uTG9hZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5mb2N1c0NoYW5nZT1uZXcgWXIsdGhpcy5fY3VycmVudD0wfWdldCBm''@;'; put 'put ''b2N1c2FibGVJdGVtcygpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLl9mb2N1c2FibGVJdGVtczp0aGlzLmNscktleUZvY3VzSXRlbXM/dGhpcy5jbHJLZXlGb2N1c0l0ZW1zLnRvQXJyYXkoKTpbXX1zZXQgZm9jdXNhYmxlSXRlbXMoZSl7QXJyYXkuaXNBcnJheShlKSYmZS5s''@;'; put 'put ''ZW5ndGgmJih0aGlzLl9mb2N1c2FibGVJdGVtcz1lLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCkpfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoZSl7dGhp''@;'; put 'put ''cy5fY3VycmVudCE9PWUmJih0aGlzLl9jdXJyZW50PWUpfWdldCBjdXJyZW50SXRlbSgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW1zW3RoaXMuX2N1cnJlbnRdfWdldCBjdXJyZW50SXRlbUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50P3RoaXMuY3Vy''@;'; put 'put ''cmVudEl0ZW0ubmF0aXZlRWxlbWVudDp0aGlzLmN1cnJlbnRJdGVtfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9ySXRlbVVwZGF0ZXMoKSksdGhpcy5pbml0aWFsaXplRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9aGFuZGxlS2V5Ym9hcmRFdmVudChlKXtpZih0aGlzLmN1cnJlbnRJdGVtRWxlbWVudCE9PWUudGFyZ2V0KXtjb25zdCByPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGUudGFyZ2V0KTt0aGlzLnBvc2l0aW9uSW5SYW5nZShyKSYmKHRoaXMu''@;'; put 'put ''Y3VycmVudD1yKX10aGlzLnByZXZLZXlQcmVzc2VkKGUpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50LTEpOnRoaXMubmV4dEtleVByZXNzZWQoZSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpP3RoaXMubW92ZVRv''@;'; put 'put ''KHRoaXMuY3VycmVudCsxKTplLmNvZGU9PT1oYS5Ib21lP3RoaXMubW92ZVRvKDApOmUuY29kZT09PWhhLkVuZCYmdGhpcy5tb3ZlVG8odGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksZ1goZSl9c2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGUpe2NvbnN0IHI9dGhpcy5nZXRJdGVtUG9zaXRp''@;'; put 'put ''b24oZS50YXJnZXQpO3I+LTEmJnRoaXMubW92ZVRvKHIpfWZvY3VzQ3VycmVudCgpe3RoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9bW92ZVRvKGUpe3RoaXMucG9zaXRpb25JblJhbmdlKGUpJiYodGhpcy5jdXJyZW50PWUsdGhp''@;'; put 'put ''cy5mb2N1c0N1cnJlbnQoKSl9cG9zaXRpb25JblJhbmdlKGUpe3JldHVybiBlPj0wJiZlPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQtMT49MH1jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2N1cnJlbnQrMTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1pbml0aWFsaXplRm9jdXMoKXt0aGlzLmZvY3VzYWJsZUl0ZW1zJiZ0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ+PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5f''@;'; put 'put ''Y3VycmVudD10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSx0aGlzLmZvY3VzT25Mb2FkJiYodGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCgpKSl9bmV4dEtleVByZXNzZWQoZSl7Y29uc3Qgcj1GZihlLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9u''@;'; put 'put ''KXtjYXNlIFA2LlZFUlRJQ0FMOnJldHVybiByPT09aGEuQXJyb3dEb3duO2Nhc2UgUDYuSE9SSVpPTlRBTDpyZXR1cm4gcj09PWhhLkFycm93UmlnaHQ7Y2FzZSBQNi5CT1RIOnJldHVybiByPT09aGEuQXJyb3dEb3dufHxyPT09aGEuQXJyb3dSaWdodDtkZWZhdWx0OnJldHVybiExfX1wcmV2''@;'; put 'put ''S2V5UHJlc3NlZChlKXtjb25zdCByPUZmKGUua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgUDYuVkVSVElDQUw6cmV0dXJuIHI9PT1oYS5BcnJvd1VwO2Nhc2UgUDYuSE9SSVpPTlRBTDpyZXR1cm4gcj09PWhhLkFycm93TGVmdDtjYXNlIFA2LkJPVEg6cmV0dXJuIHI9PT1oYS5B''@;'; put 'put ''cnJvd1VwfHxyPT09aGEuQXJyb3dMZWZ0O2RlZmF1bHQ6cmV0dXJuITF9fWdldEl0ZW1Qb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5mb2N1c2FibGVJdGVtcy5pbmRleE9mKGUpOnRoaXMuZm9jdXNhYmxlSXRlbXMubWFwKHI9PnIubmF0aXZlRWxlbWVudCku''@;'; put 'put ''aW5kZXhPZihlKX1saXN0ZW5Gb3JJdGVtVXBkYXRlcygpe3JldHVybiB0aGlzLmNscktleUZvY3VzSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmluaXRpYWxpemVGb2N1cygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHpp''@;'; put 'put ''KSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUscixpKXtpZigxJmUmJnNvKGksbHBlLDUpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIuY2xyS2V5Rm9jdXNJdGVtcz1hKX19LGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoImtleWRvd24iLGZ1bmN0aW9uKGEpe3JldHVybiByLmhhbmRsZUtleWJvYXJkRXZlbnQoYSl9KSgiY2xpY2siLGZ1bmN0aW9uKGEpe3JldHVybiByLnNldENsaWNrZWRJdGVtQ3VycmVudChhKX0pfSxpbnB1dHM6e2RpcmVjdGlvbjpbMCwi''@;'; put 'put ''Y2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxvYWQ6WzAsImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxmb2N1c2FibGVJdGVtczpbMCwiY2xyS2V5Rm9jdXMiLCJmb2N1c2FibGVJdGVtcyJdfSxvdXRwdXRzOntmb2N1c0NoYW5nZToiY2xyRm9jdXNDaGFuZ2UifSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGF0dHJzOnNZZSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksa1g9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmFdfSksbn0pKCk7Y2xhc3MgZUple2NvbnRhaW5zSXRlbSh0KXtyZXR1cm4hIXRoaXMubW9kZWwmJnRoaXMubW9kZWwuaW5jbHVkZXModCl9c2VsZWN0''@;'; put 'put ''KHQpe3RoaXMuYWRkSXRlbSh0KX11bnNlbGVjdCh0KXt0aGlzLnJlbW92ZUl0ZW0odCl9aXNFbXB0eSgpe3JldHVybiEodGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCl9cG9wKCl7bGV0IHQ7cmV0dXJuIHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjAmJih0PXRoaXMubW9k''@;'; put 'put ''ZWxbdGhpcy5tb2RlbC5sZW5ndGgtMV0sdGhpcy5yZW1vdmVJdGVtKHQpKSx0fXRvU3RyaW5nKHQsZT0tMSl7bGV0IHI9IiI7cmV0dXJuIHRoaXMubW9kZWwmJihlPi0xP3RoaXMubW9kZWxbZV0mJihyKz10JiZ0aGlzLm1vZGVsW2VdW3RdP3RoaXMubW9kZWxbZV1bdF06dGhpcy5tb2RlbFtl''@;'; put 'put ''XS50b1N0cmluZygpKTp0aGlzLm1vZGVsLmZvckVhY2goaT0+e3IrPXQmJmlbdF0/aVt0XTppLnRvU3RyaW5nKCkscis9IiAifSkpLHIudHJpbSgpfWFkZEl0ZW0odCl7dGhpcy5jb250YWluc0l0ZW0odCl8fCh0aGlzLm1vZGVsPXRoaXMubW9kZWx8fFtdLHRoaXMubW9kZWwucHVzaCh0KSl9''@;'; put 'put ''cmVtb3ZlSXRlbSh0KXtpZihudWxsPT10aGlzLm1vZGVsKXJldHVybjtjb25zdCBlPXRoaXMubW9kZWwuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLm1vZGVsLnNwbGljZShlLDEpLDA9PT10aGlzLm1vZGVsLmxlbmd0aCYmKHRoaXMubW9kZWw9bnVsbCl9fWNsYXNzIHRKZXtjb250YWluc0l0ZW0o''@;'; put 'put ''dCl7cmV0dXJuIHRoaXMubW9kZWw9PT10fXNlbGVjdCh0KXt0aGlzLm1vZGVsPXR9dW5zZWxlY3QodCl7dGhpcy5jb250YWluc0l0ZW0odCkmJih0aGlzLm1vZGVsPW51bGwpfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5tb2RlbH1wb3AoKXtjb25zdCB0PXRoaXMubW9kZWw7cmV0dXJuIHRoaXMu''@;'; put 'put ''bW9kZWw9bnVsbCx0fXRvU3RyaW5nKHQpe3JldHVybiB0aGlzLm1vZGVsP3QmJnRoaXMubW9kZWxbdF0/dGhpcy5tb2RlbFt0XTp0aGlzLm1vZGVsLnRvU3RyaW5nKCk6IiJ9fWNsYXNzIG5KZSBleHRlbmRzIHRKZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9j''@;'; put 'put ''dXNDaGFuZ2VkPW5ldyB4aShudWxsKX1nZXQgZm9jdXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QodCl7dGhpcy5tb2RlbCE9PXQmJih0aGlzLm1vZGVsPXQsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQodCkpfX1sZXQgckplPSgoKT0+''@;'; put 'put ''e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5zaG93QWxsT3B0aW9ucz0hMCx0aGlzLl9jdXJyZW50SW5wdXQ9IiIsdGhpcy5faW5wdXRDaGFuZ2VkPW5ldyB4aSgiIiksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZD1uZXcgVVQoMSksdGhpcy5pbnB1dENoYW5nZWQ9''@;'; put 'put ''dGhpcy5faW5wdXRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50SW5wdXQoKXtyZXR1cm4gdGhpcy5fY3VycmVudElucHV0fXNldCBjdXJyZW50SW5wdXQoZSl7IiI9PT1lJiYhdGhpcy5tdWx0aXNlbGVjdGFibGUmJnRoaXMuc2V0U2VsZWN0aW9uVmFsdWUobnVsbCksdGhpcy5f''@;'; put 'put ''Y3VycmVudElucHV0PWUsdGhpcy5faW5wdXRDaGFuZ2VkLm5leHQoZSl9Z2V0IHNlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgbXVsdGlzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwgaW5zdGFu''@;'; put 'put ''Y2VvZiBlSmV9c2VsZWN0KGUpe251bGw9PWV8fHRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGUpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX10b2dnbGUoZSl7bnVsbCE9ZSYm''@;'; put 'put ''KHRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGUpP3RoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoZSk6dGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX11bnNlbGVjdChlKXtudWxs''@;'; put 'put ''PT1lfHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oZSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGUpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9c2V0U2VsZWN0aW9uVmFsdWUoZSl7IXRoaXMuc2VsZWN0aW9uTW9k''@;'; put 'put ''ZWx8fHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9PT1lfHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbCYmIWV8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPWUsdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX19cmV0dXJuIG4uXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7SjNlKCgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy50b2dnbGVTZXJ2aWNlPXIsdGhpcy5zZWxlY3Rpb25TZXJ2aWNl''@;'; put 'put ''PWksdGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5wc2V1ZG9Gb2N1cz1uZXcgbkplLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dHJpZ2dlcn1zZXQgdHJpZ2dlcihlKXt0aGlzLl90cmlnZ2VyPWUsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGUpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goZSl7dGhpcy5fbGlzdGJveD1lLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihl''@;'; put 'put ''KX1nZXQgdGV4dElucHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGUpe3RoaXMuX3RleHRJbnB1dD1lLHRoaXMucmVuZGVyZXIubGlzdGVuKGUsImtleWRvd24iLHI9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChyKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVy''@;'; put 'put ''KGUpfWZvY3VzSW5wdXQoKXt0aGlzLnRleHRJbnB1dCYmX2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5p''@;'; put 'put ''c0VtcHR5KCkpdGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBlO2U9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25T''@;'; put 'put ''ZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsO2NvbnN0IHI9dGhpcy5vcHRpb25EYXRhLmZpbmQoaT0+aS52YWx1ZT09PWUpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KHJ8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRp''@;'; put 'put ''b25WYWx1ZXMoZSl7dGhpcy5vcHRpb25EYXRhPWV9aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZT0+e2V8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oZSl7bGV0IHI9dGhpcy5vcHRp''@;'; put 'put ''b25EYXRhLmZpbmRJbmRleChpPT5pLmVxdWFscyh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7ZT09PXYyLlVQPy0xPT09cnx8MD09PXI/cj10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ci0tOmU9PT12Mi5ET1dOJiYoLTE9PT1yfHxyPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP3I9MDpy''@;'; put 'put ''KyspLHRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVtyXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oZSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhlKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5D''@;'; put 'put ''aGFuZ2UucGlwZShHMygxKSkuc3Vic2NyaWJlKHI9PntyJiZ0aGlzLm1vdmVGb2N1c1RvKGUpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChlKXtsZXQgcj0hMTtjb25zdCBpPUZmKGUua2V5KTtpZihlKXN3aXRjaChpKXtjYXNlIGhhLkVudGVyOnRoaXMu''@;'; put 'put ''dG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5z''@;'; put 'put ''ZWxlY3QodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSkscj0hMCk7YnJlYWs7Y2FzZSBoYS5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLHI9ITApO2JyZWFrO2Nhc2UgaGEuQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNj''@;'; put 'put ''cm9sbGluZyhlKSx0aGlzLm9wZW5BbmRNb3ZlVG8odjIuVVApLHI9ITA7YnJlYWs7Y2FzZSBoYS5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoZSksdGhpcy5vcGVuQW5kTW92ZVRvKHYyLkRPV04pLHI9ITA7YnJlYWs7ZGVmYXVsdDplLmtleSE9PWhhLlRhYiYmKCF0''@;'; put 'put ''aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlfHxlLmtleSE9PWhhLkJhY2tzcGFjZSkmJmUua2V5IT09aGEuRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIHJ9c2Nyb2xsSW50b1NlbGVjdGVkTW9k''@;'; put 'put ''ZWwoZT0ic21vb3RoIil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ZSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdw''@;'; put 'put ''b3J0U2Nyb2xsaW5nKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoZSl7X2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oZSwiYmx1ciIscj0+e3RoaXMuZm9jdXNPdXRPZkNvbXBv''@;'; put 'put ''bmVudChyKSYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoZSl7Y29uc3Qgcj1lLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1l''@;'; put 'put ''bnQ7cmV0dXJuISh0aGlzLnRleHRJbnB1dC5jb250YWlucyhyKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKHIpfHx0aGlzLmxpc3Rib3guY29udGFpbnMocikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcihIMyksT3IoZ2MpLE9yKHJKZSksT3Io''@;'; put 'put ''ZGMpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSk7bGV0IGlKZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoZjIscDIsRHcsalQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhl''@;'; put 'put ''fHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxPYyxOcyxrWCxkdSxOZix1QSxVdyxkdSxOZl19KSxufSkoKSxnSD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZHZ7fXJldHVybiBuLlx1MDI3NWZhYz0oKCk9PntsZXQgdDtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24ocil7cmV0dXJuKHR8fCh0PUtzKG4pKSkocnx8bil9fSkoKSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiY2xyLWZvcm0tY29udHJvbCIs''@;'; put 'put ''ITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1yLmNvbnRyb2w/bnVsbDpyLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixyLmFkZEdyaWQoKSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtiaCxRMSxfMix3aF0pLElhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Zlll''@;'; put 'put ''LGRlY2xzOjEzLHZhcnM6Nyxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xh''@;'; put 'put ''bWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJd''@;'; put 'put ''LFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12''@;'; put 'put ''YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoaFllKSxCcigwKSxjdCgxLHBZZSwxLDAsImxhYmVsIiwwKSxyZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxCcig1LDEpLEJyKDYsMiksQnIoNywzKSxpZSgpLGN0KDgsZ1llLDEsMCwiY2Rz''@;'; put 'put ''LWljb24iLDQpKDksbVllLDEsMCwiY2RzLWljb24iLDUpLGllKCksY3QoMTAsdlllLDEsMCwibmctY29udGVudCIsMCkoMTEseVllLDEsMCwibmctY29udGVudCIsMCkoMTIsX1llLDEsMCwibmctY29udGVudCIsMCksaWUoKSksMiZlJiYoYWUoKSx5ZSgibmdJZiIsIXIubGFiZWwmJnIuYWRk''@;'; put 'put ''R3JpZCgpKSxhZSgpLHllKCJuZ0NsYXNzIixyLmNvbnRyb2xDbGFzcygpKSxhZSg2KSx5ZSgibmdJZiIsci5zaG93SW52YWxpZCksYWUoKSx5ZSgibmdJZiIsci5zaG93VmFsaWQpLGFlKCkseWUoIm5nSWYiLHIuc2hvd0hlbHBlciksYWUoKSx5ZSgibmdJZiIsci5zaG93SW52YWxpZCksYWUo''@;'; put 'put ''KSx5ZSgibmdJZiIsci5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltSdSxtYSxycyxwc10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUGQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGh2e2NvbnN0cnVjdG9yKGUscixpLGEsYyl7c3VwZXIoZSxnSCxyLGksYSxjKSx0aGlzLmluZGV4PTEsIm51''@;'; put 'put ''bWJlciI9PT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0eXBlIikmJmNvbnNvbGUud2FybignV2FybmluZzogSW5wdXRzIG9mIHR5cGUgIm51bWJlciIgc2hvdWxkIHV0aWxpemUgdGhlIG51bWJlci1pbnB1dCBjb21wb25lbnQgZm9yIHByb3BlciBoYW5kbGluZy5cblxu''@;'; put 'put ''ICBFeGFtcGxlIHVzYWdlOlxuICA8Y2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgPGxhYmVsPk51bWJlciBJbnB1dDwvbGFiZWw+XG4gICAgPGlucHV0IGNsck51bWJlcklucHV0IHR5cGU9Im51bWJlciIvPlxuICA8L2Nsci1udW1iZXItaW5wdXQtY29udGFpbmVyPlxuICAgICAg''@;'; put 'put ''Jyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKE5uKSxXZShIbyksV2UocTEsMTApLFdlKFRvKSxXZSh6aSkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJJbnB1dCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5k''@;'; put 'put ''aW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImNsci1pbnB1dCIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxufSkoKSxjcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe0hzLmFkZEljb25zKGYyLHAyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3Jl''@;'; put 'put ''dHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsT2MsTnMsZHUsZHVdfSksbn0pKCksWnc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IHhpKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChlKXt0aGlzLl9mb2N1c2VkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZh''@;'; put 'put ''Y30pLG59KSgpLGFKZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoZjIscDIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxj''@;'; put 'put ''cGUsTnNdfSksbn0pKCksb0plPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE5zLGhBLFljXX0pLG59KSgpLHNKZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxOc119KSxufSkoKSxmSmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsTnMsd1hdfSksbn0pKCksaHBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUscil7aWYoMSZlJiZXYShBbCw1KSwyJmUpe2xldCBpO2RpKGk9aGkoKSkmJihyLnRlbXBsYXRlPWkuZmlyc3QpfX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3Rv''@;'; put 'put ''cnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLGN0KDAsQVllLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHBKZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJu''@;'; put 'put ''IG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYV19KSxufSkoKSxGNj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT3d7fXJldHVybiBuLlx1MDI3NWZhYz0oKCk9PntsZXQgdDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKHR8fCh0''@;'; put 'put ''PUtzKG4pKSkocnx8bil9fSkoKSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxufSkoKSxmdj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUHd7Y29uc3RydWN0b3IoZSxyLGksYSl7aWYoIXIpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJjbHJUYWJMaW5rIGFuZCBjbHItdGFiLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItdGFicyIpO3N1cGVyKGUsciksdGhpcy5pZkFjdGl2ZT1hLHRoaXMuaWQ9aX1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmUuY3VycmVudD09''@;'; put 'put ''PXRoaXMuaWR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKEZzKSxXZShGNiw4KSxXZShOdyksV2Uob3YpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdLFsiY2xyLXRhYi1jb250ZW50Il1d''@;'; put 'put ''LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLG59KSgpO3ZhciBwdj1mdW5jdGlvbihuKXtyZXR1cm4gbi5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixuLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsbn0ocHZ8fHt9KTtsZXQgcEE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubGF5''@;'; put 'put ''b3V0PXB2LkhPUklaT05UQUwsdGhpcy5fY2hpbGRyZW49W119Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX2NoaWxkcmVufWdldCBhY3RpdmVUYWIoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKGU9PmUuYWN0aXZlKX1nZXQgb3ZlcmZsb3dUYWJzKCl7cmV0dXJuIHRoaXMubGF5b3V0''@;'; put 'put ''PT09cHYuVkVSVElDQUw/W106dGhpcy5jaGlsZHJlbi5maWx0ZXIoZT0+ITA9PT1lLnRhYkxpbmsuaW5PdmVyZmxvdyl9cmVnaXN0ZXIoZSl7dGhpcy5fY2hpbGRyZW4ucHVzaChlKX11bnJlZ2lzdGVyKGUpe2NvbnN0IHI9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGUpO3I+LTEmJnRoaXMuY2hp''@;'; put 'put ''bGRyZW4uc3BsaWNlKHIsMSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGdKZT0wLEg2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGkpe3Ro''@;'; put 'put ''aXMuaWZBY3RpdmVTZXJ2aWNlPWUsdGhpcy5pZD1yLHRoaXMudGFic1NlcnZpY2U9aSx0aGlzLnRhYkNvbnRlbnRJZHx8KHRoaXMudGFiQ29udGVudElkPSJjbHItdGFiLWNvbnRlbnQtIitnSmUrKyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09''@;'; put 'put ''dGhpcy5pZH1nZXQgYXJpYUxhYmVsbGVkQnkoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGU9PmUudGFiTGluay5pZD09PXRoaXMuaWQpPy50YWJMaW5rPy50YWJMaW5rSWR9c2V0IHRlbXBsYXRlUmVmKGUpe3RoaXMudmlld1JlZj10aGlzLnRhYnNTZXJ2aWNlLnRh''@;'; put 'put ''YkNvbnRlbnRWaWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhlKX1uZ09uRGVzdHJveSgpe2NvbnN0IGU9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5pbmRleE9mKHRoaXMudmlld1JlZik7ZT4tMSYmdGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmll''@;'; put 'put ''d0NvbnRhaW5lci5yZW1vdmUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKG92KSxXZShOdyksV2UocEEpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXRhYi1jb250ZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlv''@;'; put 'put ''bihlLHIpe2lmKDEmZSYmV2Eoa1llLDcpLDImZSl7bGV0IGk7ZGkoaT1oaSgpKSYmKHIudGVtcGxhdGVSZWY9aS5maXJzdCl9fSxpbnB1dHM6e3RhYkNvbnRlbnRJZDpbMCwiaWQiLCJ0YWJDb250ZW50SWQiXX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6Mix2''@;'; put 'put ''YXJzOjAsY29uc3RzOltbInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMSwidGFiLWNvbnRlbnQiLDMsImlkIiwiaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoKSxjdCgwLERZZSwyLDYsIm5nLXRlbXBsYXRlIixudWxsLDAs''@;'; put 'put ''Q2MpKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksbUplPTA7Y29uc3QgSVg9bmV3IHdyKCJUQUJTX0lEIikseUplPXtwcm92aWRlOklYLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gdkplKCl7cmV0dXJuImNsci10YWJzLSIrbUplKyt9fTtsZXQgX0plPTAsTjY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1''@;'; put 'put ''Y3RvcihlLHIsaSxhLGMsbSxDKXt0aGlzLmlmQWN0aXZlU2VydmljZT1lLHRoaXMuaWQ9cix0aGlzLmVsPWksdGhpcy50YWJzU2VydmljZT1tLHRoaXMudGFic0lkPUMsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrX0plKyspO2NvbnN0IFA9YS5yZXNv''@;'; put 'put ''bHZlQ29tcG9uZW50RmFjdG9yeShocGUpO3RoaXMudGVtcGxhdGVSZWZDb250YWluZXI9Yy5jcmVhdGVDb21wb25lbnQoUCx2b2lkIDAsdm9pZCAwLFtbaS5uYXRpdmVFbGVtZW50XV0pLmluc3RhbmNlfWdldCBpbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMuX2luT3ZlcmZsb3cmJnRoaXMudGFi''@;'; put 'put ''c1NlcnZpY2UubGF5b3V0IT09cHYuVkVSVElDQUx9c2V0IGluT3ZlcmZsb3coZSl7dGhpcy5faW5PdmVyZmxvdz1lfWdldCBhZGRMaW5rQ2xhc3Nlcygpe3JldHVybiF0aGlzLmluT3ZlcmZsb3d9Z2V0IGFyaWFDb250cm9scygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZp''@;'; put 'put ''bmQoZT0+ZS50YWJMaW5rPT09dGhpcyk/LnRhYkNvbnRlbnQ/LnRhYkNvbnRlbnRJZH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCB0YWJpbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZT8wOi0xfWFjdGl2YXRlKCl7dGhpcy5p''@;'; put 'put ''ZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShvdiksV2UoTncpLFdlKHppKSxXZShfMSksV2UoTm4pLFdlKHBBKSxXZShJWCkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpb''@;'; put 'put ''WyIiLCJjbHJUYWJMaW5rIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJ0YWIiLCJ0eXBlIiwiYnV0dG9uIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MSZlJiZrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYWN0aXZhdGUoKX0pLDImZSYmKG40KCJpZCIs''@;'; put 'put ''ci50YWJMaW5rSWQpLFJyKCJhcmlhLWNvbnRyb2xzIixyLmFyaWFDb250cm9scykoImFyaWEtc2VsZWN0ZWQiLHIuYWN0aXZlKSgidGFiaW5kZXgiLHIudGFiaW5kZXgpLGJyKCJidG4iLCEwKSgiYnRuLWxpbmsiLHIuYWRkTGlua0NsYXNzZXMpKCJuYXYtbGluayIsci5hZGRMaW5rQ2xhc3Nl''@;'; put 'put ''cykoImFjdGl2ZSIsci5hY3RpdmUpKX0saW5wdXRzOnt0YWJMaW5rSWQ6WzAsImlkIiwidGFiTGlua0lkIl0saW5PdmVyZmxvdzpbMCwiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19LHN0YW5kYWxvbmU6ITF9KSxufSkoKSxWNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9y''@;'; put 'put ''KGUscixpKXt0aGlzLmlmQWN0aXZlU2VydmljZT1lLHRoaXMuaWQ9cix0aGlzLnRhYnNTZXJ2aWNlPWksaS5yZWdpc3Rlcih0aGlzKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfW5nT25EZXN0cm95KCl7dGhpcy50YWJzU2Vydmlj''@;'; put 'put ''ZS51bnJlZ2lzdGVyKHRoaXMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShvdiksV2UoTncpLFdlKHBBKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxy''@;'; put 'put ''LGkpe2lmKDEmZSYmKHNvKGksTjYsNyksc28oaSxINiw3KSksMiZlKXtsZXQgYTtkaShhPWhpKCkpJiYoci50YWJMaW5rPWEuZmlyc3QpLGRpKGE9aGkoKSkmJihyLnRhYkNvbnRlbnQ9YS5maXJzdCl9fSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbQ3FlXSldLG5nQ29udGVudFNlbGVj''@;'; put 'put ''dG9yczpDbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKCksQnIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxmcGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1''@;'; put 'put ''ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclRhYkFjdGlvbiIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxzdGFuZGFsb25lOiExfSksbn0pKCksUlg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9''@;'; put 'put ''LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10YWItb3ZlcmZsb3ctY29udGVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImRyb3Bkb3duLW1lbnUiLCEwKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6''@;'; put 'put ''Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksZ3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWUsdGhpcy50b2dnbGVTZXJ2aWNl''@;'; put 'put ''PXIsdGhpcy50YWJzU2VydmljZT1pLHRoaXMudGFic0lkPWEsdGhpcy5jb21tb25TdHJpbmdzPWMsdGhpcy50YWJMaW5rRWxlbWVudHM9W10sdGhpcy5fbW91c2Vkb3duPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz1bXX1nZXQgbGF5b3V0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMudGFic1NlcnZpY2UubGF5b3V0fXNldCBsYXlvdXQoZSl7T2JqZWN0LmtleXMocHYpLm1hcChyPT5wdltyXSkuaW5kZXhPZihlKT49MCYmKHRoaXMudGFic1NlcnZpY2UubGF5b3V0PWUpfWdldCB0YWJMaW5rRGlyZWN0aXZlcygpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0''@;'; put 'put ''aXZlc31nZXQgYWN0aXZlVGFiSW5PdmVyZmxvdygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5pbmRleE9mKHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiKT4tMX1nZXQgYWN0aXZlVGFiUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlu''@;'; put 'put ''ZEluZGV4KGU9PmUuYWN0aXZlKX1nZXQgaXNDdXJyZW50SW5PdmVyZmxvdygpe3JldHVybiB0aGlzLmtleUZvY3VzLmN1cnJlbnQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1nZXQgaXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PXB2LlZFUlRJQ0FMfXNldCB0YWJPdmVyZmxvd0Vs''@;'; put 'put ''KGUpe3RoaXMuX3RhYk92ZXJmbG93RWw9ZSYmZS5uYXRpdmVFbGVtZW50LHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZlJiZ0aGlzLmtleUZvY3VzLmZvY3VzQ3VycmVudCgpfWdldCBvdmVyZmxvd1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbHRlcihlPT4h''@;'; put 'put ''ZS5pbk92ZXJmbG93KS5sZW5ndGh9c2V0IHRhYkNvbnRlbnRWaWV3Q29udGFpbmVyKGUpe3RoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXI9ZX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclRhYkxpbmtDaGFu''@;'; put 'put ''Z2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCkpLHR5cGVvZiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PiJ1IiYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXSYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXS5hY3Rp''@;'; put 'put ''dmF0ZSgpLHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+e2UudW5zdWJzY3JpYmUoKX0pfXRvZ2dsZU92ZXJmbG93T25Qb3NpdGlvbihlKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Bl''@;'; put 'put ''bj1lPj10aGlzLm92ZXJmbG93UG9zaXRpb259cmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShlKXshdGhpcy5rZXlGb2N1cy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkmJnRoaXMua2V5Rm9jdXMuY3VycmVudCE9PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24mJih0''@;'; put 'put ''aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9dG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm92ZXJmbG93UG9zaXRpb24tMTp0''@;'; put 'put ''aGlzLm92ZXJmbG93UG9zaXRpb24pLHRoaXMuX21vdXNlZG93bj0hMX1vcGVuT3ZlcmZsb3dPbkZvY3VzKCl7IXRoaXMuX21vdXNlZG93biYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX1jbG9zZU9uRm9jdXNP''@;'; put 'put ''dXQoZSl7IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJiF0aGlzLl9tb3VzZWRvd24mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnRhYkxpbmtFbGVtZW50c1t0aGlzLmFjdGl2ZVRhYlBvc2l0''@;'; put 'put ''aW9uXT09PWUucmVsYXRlZFRhcmdldCYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKSl9Y2xvc2VPbkVzY2FwZUtleSgpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1jbG9zZU9uT3V0c2lkZUNsaWNrKGUscil7Y29u''@;'; put 'put ''c3QgaT10aGlzLnRhYnNBY3Rpb25zLnNvbWUoYT0+YS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGUudGFyZ2V0KSk7ZS50YXJnZXQ9PT1yfHxyLmNvbnRhaW5zKGUudGFyZ2V0KXx8aXx8IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoZS50YXJnZXQpJiZ0aGlzLmlzQ3VycmVudEluT3Zl''@;'; put 'put ''cmZsb3cmJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1zZXRUYWJMaW5rRWxlbWVudHMoKXt0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz10aGlzLnRhYnMubWFwKGU9PmUudGFiTGluayksdGhpcy50YWJMaW5rRWxlbWVudHM9dGhpcy5fdGFiTGlua0RpcmVj''@;'; put 'put ''dGl2ZXMubWFwKGU9PmUuZWwubmF0aXZlRWxlbWVudCksdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJMaW5rRWxlbWVudHMucHVzaCguLi50aGlzLnRhYnNBY3Rpb25zLm1hcChlPT5lLm5hdGl2ZUVsZW1lbnQpKX1saXN0ZW5Gb3JUYWJMaW5rQ2hhbmdlcygp''@;'; put 'put ''e3JldHVybiB0aGlzLnRhYnMuY2hhbmdlcy5waXBlKGtmKHRoaXMudGFicy5tYXAoZT0+ZS50YWJMaW5rKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9bGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFic0FjdGlvbnMuY2hhbmdl''@;'; put 'put ''cy5zdWJzY3JpYmUoKCk9PnRoaXMuc2V0VGFiTGlua0VsZW1lbnRzKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShvdiksV2UoZ2MpLFdlKHBBKSxXZShJWCksV2UoZnMpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmKHNvKGksZnBlLDUsemkpLHNvKGksVjYsNCkpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIudGFic0FjdGlvbnM9YSksZGkoYT1oaSgpKSYmKHIudGFicz1hKX19LHZpZXdRdWVyeTpmdW5jdGlvbihl''@;'; put 'put ''LHIpe2lmKDEmZSYmKFdhKFd3LDcpLFdhKFJYLDUsemkpLFdhKElZZSw3LE5uKSksMiZlKXtsZXQgaTtkaShpPWhpKCkpJiYoci5rZXlGb2N1cz1pLmZpcnN0KSxkaShpPWhpKCkpJiYoci50YWJPdmVyZmxvd0VsPWkuZmlyc3QpLGRpKGk9aGkoKSkmJihyLnRhYkNvbnRlbnRWaWV3Q29udGFp''@;'; put 'put ''bmVyPWkuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJ0YWJzLXZlcnRpY2FsIixyLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbMCwiY2xyTGF5b3V0IiwibGF5b3V0Il19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtvdixw''@;'; put 'put ''QSx5SmVdKSxNZihbcjVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkxZZSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLCJjbHJEaXJlY3Rpb24iLCJib3RoIiwxLCJu''@;'; put 'put ''YXYiLDMsImNsckZvY3VzQ2hhbmdlIiwiZm9jdXNvdXQiLCJjbHJLZXlGb2N1cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIs''@;'; put 'put ''MSwidGFicy1vdmVyZmxvdyIsImJvdHRvbS1yaWdodCJdLFsicm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGluayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vk''@;'; put 'put ''b3duIiwiZm9jdXMiLCJjbGljayJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIl0sWzMsImtleWRvd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIs''@;'; put 'put ''NCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpe2lmKDEmZSl7Y29uc3QgaT1JbigpO25hKFJZZSkscmUoMCwidWwiLDIpLGt0KCJjbHJGb2N1c0NoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGd0KGkpLG10KHIudG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGMpKX0pKCJmb2N1c291''@;'; put 'put ''dCIsZnVuY3Rpb24oYyl7cmV0dXJuIGd0KGkpLG10KHIucmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShjKSl9KSxjdCgxLFBZZSwyLDEsIm5nLWNvbnRhaW5lciIsMykoMixWWWUsNywxMSwibmctY29udGFpbmVyIiw0KSxCcigzKSxpZSgpLGpsKDQsbnVsbCwwKX0yJmUmJih5ZSgiY2xy''@;'; put 'put ''S2V5Rm9jdXMiLHIudGFiTGlua0VsZW1lbnRzKSxhZSgpLHllKCJuZ0Zvck9mIixyLnRhYkxpbmtEaXJlY3RpdmVzKSxhZSgpLHllKCJuZ0lmIixyLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLGtkLHJzLFd3LFJYXSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjJ9KSxufSkoKSxiSmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe0hzLmFkZEljb25zKEJmZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0Zh''@;'; put 'put ''LE5mLE5zLHBKZSxrWCxOZl19KSxufSkoKSxMWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5uYXZHcm91cENvdW50PTB9cmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudCsrfXVucmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudC0tfX1yZXR1''@;'; put 'put ''cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxPWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5faWNvbnM9MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5faWNvbnM+MH1yZWdpc3Rlckljb24oKXt0aGlzLl9pY29ucysrfXVucmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMtLX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1''@;'; put 'put ''ZmFjfSksbn0pKCksUFg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZD1uZXcgdXIsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZD1uZXcgdXIsdGhpcy5fY29sbGFwc2VkPSExLHRoaXMuX2NvbGxhcHNpYmxlPSExfWdldCBhbmltYXRlT25Db2xsYXBz''@;'; put 'put ''ZWQoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWRDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNlZENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWR9c2V0IGNv''@;'; put 'put ''bGxhcHNlZChlKXtlPSEhZSx0aGlzLmNvbGxhcHNpYmxlJiZ0aGlzLl9jb2xsYXBzZWQhPT1lJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoZSl9Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShlKXt0aGlzLl9jb2xsYXBzaWJs''@;'; put 'put ''ZSE9PShlPSEhZSkmJighZSYmdGhpcy5jb2xsYXBzZWQmJnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcighMSksdGhpcy5fY29sbGFwc2libGU9ZSl9dXBkYXRlQ29sbGFwc2VCZWhhdmlvcihlKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQubmV4dChlKSx0aGlzLl9jb2xsYXBzZWQ9ZSx0''@;'; put 'put ''aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEZYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxy''@;'; put 'put ''LGksYSl7dGhpcy5fbmF2U2VydmljZT1lLHRoaXMuX25hdkljb25TZXJ2aWNlPXIsdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlPWksdGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb250ZW50SWQ9UHUoKSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBZcighMCksdGhpcy5f''@;'; put 'put ''c3ViPWUuY29sbGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUoYz0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdChjKX0pfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShlKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxh''@;'; put 'put ''cHNpYmxlPWV9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGUpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkPWV9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2Uu''@;'; put 'put ''bmF2R3JvdXBDb3VudD4wfWdldCBoYXNJY29ucygpe3JldHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMu''@;'; put 'put ''X3N1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9uKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShQWCksV2UoT1gpLFdlKExYKSxXZShmcykpfSxuLlx1MDI3NWNtcD1Wcih7dHlw''@;'; put 'put ''ZTpuLHNlbGVjdG9yczpbWyJjbHItdmVydGljYWwtbmF2Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiaXMtY29sbGFwc2VkIixyLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixyLmhh''@;'; put 'put ''c05hdkdyb3VwcykoImhhcy1pY29ucyIsci5oYXNJY29ucyl9LGlucHV0czp7dG9nZ2xlTGFiZWw6WzAsImNsclZlcnRpY2FsTmF2VG9nZ2xlTGFiZWwiLCJ0b2dnbGVMYWJlbCJdLGNvbGxhcHNpYmxlOlswLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxjb2xs''@;'; put 'put ''YXBzZWQ6WzAsImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtQWCxPWCxMWF0pXSxuZ0NvbnRlbnRTZWxlY3Rv''@;'; put 'put ''cnM6Q28sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi10cmlnZ2VyIiwzLCJvbi1jb2xsYXBzZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm5hdi1jb250ZW50IiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LWJ0biIsImFy''@;'; put 'put ''aWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJuYXYtdHJpZ2dlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJuYXYtdHJpZ2dlci1pY29uIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJp''@;'; put 'put ''YS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMSwibmF2LWJ0biIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLGN0KDAsQlllLDIsNiwiYnV0dG9uIiwwKSxyZSgxLCJkaXYiLDEpLEJyKDIpLGN0KDMsalllLDEsMiwiYnV0dG9uIiwyKSxpZSgp''@;'; put 'put ''KSwyJmUmJih5ZSgibmdJZiIsci5jb2xsYXBzaWJsZSksYWUoKSx5ZSgiaWQiLHIuY29udGVudElkKSxhZSgyKSx5ZSgibmdJZiIsci5jb2xsYXBzaWJsZSYmci5jb2xsYXBzZWQpKX0sZGVwZW5kZW5jaWVzOlttYSxyc10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksSFg9KCgpPT57Y2xhc3Mg''@;'; put 'put ''bntjb25zdHJ1Y3Rvcigpe3RoaXMuX2V4cGFuZENoYW5nZT1uZXcgdXJ9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9ZXhwYW5kKCl7dGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxOWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLmRlc3Ryb3kkPW5ldyB1cixpJiZPZihlLm5hdGl2ZUVsZW1lbnQsImNsaWNrIiku''@;'; put 'put ''cGlwZSgkMSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57aS5leHBhbmQoKSxyLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoemkpLFdlKEZz''@;'; put 'put ''KSxXZShIWCw4KSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclZlcnRpY2FsTmF2TGluayIsIiJdXSxob3N0QXR0cnM6WzEsIm5hdi1saW5rIl0sc3RhbmRhbG9uZTohMSxhdHRyczpXWWUsbmdDb250ZW50U2VsZWN0b3JzOllZZSxkZWNsczozLHZhcnM6MCxj''@;'; put 'put ''b25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKFpZZSksQnIoMCkscmUoMSwic3BhbiIsMCksQnIoMiwxKSxpZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkscHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXtIcy5hZGRJY29ucyhE''@;'; put 'put ''dyx6ZmUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxOcyxOZixsSCxOZixOcyxsSF19KSxufSkoKSxNSmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4u''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbc0plLGZKZSxiSmUscHBlLG9KZV19KSxufSkoKSxZdz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS2Zle2NvbnN0cnVjdG9yKGUscixp''@;'; put 'put ''KXtzdXBlcihlLHIsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHppKSxXZShYSyksV2UoWHMsOCkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0sc3RhbmRhbG9uZTohMSxmZWF0''@;'; put 'put ''dXJlczpbSWFdfSksbn0pKCksdkg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7fSksbn0pKCk7Y29uc3QgRUplPS9kKy4rbSsuK3krL2ksVEplPS9t''@;'; put 'put ''Ky4rZCsuK3krL2ksQUplPS9kK3xtK3x5Ky9pLGtKZT0vXGQrL2csREplPS9Nb2JpL2ksSUplPS9cdTIwMGYvZyxWWD0iWVlZWSIseUg9e25hbWU6IkxJVFRMRV9FTkRJQU4iLGZvcm1hdDpbIkREIiwiTU0iLFZYXX0selg9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQi''@;'; put 'put ''LFZYXX0sUkplPXtuYW1lOiJCSUdfRU5ESUFOIixmb3JtYXQ6W1ZYLCJNTSIsIkREIl19O2Z1bmN0aW9uIG1wZShuLHQpe3JldHVybiBuZXcgRGF0ZShuLHQrMSwwKS5nZXREYXRlKCl9Y2xhc3MgSEple2NvbnN0cnVjdG9yKHQsZT0hMSxyPSExLGk9ITEsYT0hMSxjPSExLG09ITEsQz0hMSl7''@;'; put 'put ''dGhpcy5kYXlNb2RlbD10LHRoaXMuaXNUb2RheXNEYXRlPWUsdGhpcy5pc0V4Y2x1ZGVkPXIsdGhpcy5pc0Rpc2FibGVkPWksdGhpcy5pc1NlbGVjdGVkPWEsdGhpcy5pc0ZvY3VzYWJsZT1jLHRoaXMuaXNSYW5nZVN0YXJ0RGF5PW0sdGhpcy5pc1JhbmdlRW5kRGF5PUN9Z2V0IHRhYkluZGV4''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgTWh7Y29uc3RydWN0b3IodCxlLHIpe3RoaXMueWVhcj10LHRoaXMubW9udGg9ZSx0aGlzLmRhdGU9cn1pc0VxdWFsKHQpe3JldHVybiEhdCYmdGhpcy55ZWFyPT09dC55ZWFyJiZ0aGlzLm1vbnRoPT09dC5tb250aCYmdGhp''@;'; put 'put ''cy5kYXRlPT09dC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KHQpe2NvbnN0IGU9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK3QpO3JldHVybiBuZXcgTWgoZS5nZXRGdWxsWWVh''@;'; put 'put ''cigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IE1oKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRh''@;'; put 'put ''dGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KX1pc0JlZm9yZSh0LGU9ITEpe3JldHVybiBlP3RoaXMudG9EYXRl''@;'; put 'put ''KCkuZ2V0VGltZSgpPD10Py50b0RhdGUoKS5nZXRUaW1lKCk6dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk8dD8udG9EYXRlKCkuZ2V0VGltZSgpfWlzQWZ0ZXIodCxlPSExKXtyZXR1cm4gZT90aGlzLnRvRGF0ZSgpLmdldFRpbWUoKT49dD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRl''@;'; put 'put ''KCkuZ2V0VGltZSgpPnQ/LnRvRGF0ZSgpLmdldFRpbWUoKX1wYWQodCl7cmV0dXJuIHQ8MTA/YDAke3R9YDpgJHt0fWB9fWNsYXNzIE5KZXtjb25zdHJ1Y3Rvcih0LGUscixpLGEsYyxtKXt0aGlzLmNhbGVuZGFyPXQsdGhpcy5zZWxlY3RlZERheT1lLHRoaXMuc2VsZWN0ZWRFbmREYXk9cix0''@;'; put 'put ''aGlzLmZvY3VzYWJsZURheT1pLHRoaXMudG9kYXk9YSx0aGlzLmZpcnN0RGF5T2ZXZWVrPWMsdGhpcy5leGNsdWRlZERhdGVzPW0sdGhpcy5jdXJyTW9udGhEYXlWaWV3cz1bXSx0aGlzLmluaXRpYWxpemVDYWxlbmRhclZpZXcoKX1nZXQgY2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX2Nh''@;'; put 'put ''bGVuZGFyVmlld311cGRhdGVGb2N1c2FibGVEYXkodCl7dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCExKSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodCwhMCksdGhpcy5mb2N1c2FibGVEYXk9dH11cGRhdGVTZWxlY3RlZERheSh0KXt0aGlzLnNldFNlbGVjdGVkRGF5''@;'; put 'put ''KHRoaXMuc2VsZWN0ZWREYXksITEpLHRoaXMuc2VsZWN0ZWREYXk9dCx0aGlzLnNldFNlbGVjdGVkRGF5KHQsITApfXVwZGF0ZVNlbGVjdGVkRW5kRGF5KHQpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMSksdGhpcy5zZWxlY3RlZEVuZERheT10LHRoaXMuc2V0''@;'; put 'put ''U2VsZWN0ZWREYXkodCwhMCl9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IHQ9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksZT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLHI9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0aGlzLmNhbGVuZGFyLnllYXIs''@;'; put 'put ''dGhpcy5jYWxlbmRhci5tb250aCksaT00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtyKTtsZXQgYT1bXSxjPVtdO3I+MCYmKGE9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHModC5kYXlzLnNsaWNlKC0xKnIpLCEwLCExKSksdGhpcy5jdXJyTW9udGhEYXlWaWV3cz10aGlzLmdlbmVy''@;'; put 'put ''YXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGk+MCYmKGM9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoZS5kYXlzLnNsaWNlKDAsaSksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldyhhLHRoaXMuY3Vyck1vbnRo''@;'; put 'put ''RGF5Vmlld3MsYyksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZCh0KXtjb25zdHttaW5EYXRlOmUsbWF4RGF0ZTpyfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaT1lLnRvQ29tcGFyaXNvblN0cmluZygpLGE9ci50''@;'; put 'put ''b0NvbXBhcmlzb25TdHJpbmcoKSxjPXQudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuIShjPj1pJiZjPD1hKX1nZW5lcmF0ZURheVZpZXdNb2RlbHModCxlLHIpe2NvbnN0IGk9dC5tYXAoYT0+bmV3IEhKZShhLCExLGUsdGhpcy5pc0RhdGVFeGNsdWRlZChhKSwhMSwhMSkpO3JldHVybiBy''@;'; put 'put ''JiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGlbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaX1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0LGUpe2NvbnN0IHI9ZnVuY3Rpb24gT0plKG4sdCxlKXtyZXR1cm4gbmV3IERhdGUo''@;'; put 'put ''bix0LGUpLmdldERheSgpfSh0LGUsMSk7cmV0dXJuIHI+PXRoaXMuZmlyc3REYXlPZldlZWs/ci10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrci10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcodCl7cmV0dXJuISF0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0KX1n''@;'; put 'put ''ZW5lcmF0ZUNhbGVuZGFyVmlldyh0LGUscil7Y29uc3QgaT1bLi4udCwuLi5lLC4uLnJdLGE9W107Zm9yKGxldCBjPTA7Yzw2O2MrKylhW2NdPWkuc2xpY2UoNypjLDcqKGMrMSkpO3JldHVybiBhfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxl''@;'; put 'put ''Y3RlZERheSwhMCksdGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKX1pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl7dGhpcy5mb2N1c2FibGVEYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLmZvY3VzYWJsZURheSk/dGhpcy5zZXRGb2N1c2FibGVGbGFn''@;'; put 'put ''KHRoaXMuZm9jdXNhYmxlRGF5LCEwKTp0aGlzLnNlbGVjdGVkRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRGF5LmNs''@;'; put 'put ''b25lKCkpOnRoaXMuc2VsZWN0ZWRFbmREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRW5kRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWRFbmREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWRFbmREYXkuY2xvbmUo''@;'; put 'put ''KSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IE1oKHRoaXMuY2FsZW5kYXIueWVhcix0aGlz''@;'; put 'put ''LmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKHQsZSl7dCYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbdC5kYXRlLTFdLmlzRm9jdXNhYmxlPWUpfXNldFNlbGVjdGVkRGF5KHQsZSl7dCYmdGhp''@;'; put 'put ''cy5pc0RheUluQ2FsZW5kYXJWaWV3KHQpJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1t0Py5kYXRlLTFdLmlzU2VsZWN0ZWQ9ZSl9fWxldCBtQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMubG9jYWxlPWUsdGhpcy5fZmlyc3REYXlPZldlZWs9MCx0aGlzLmluaXRpYWxpemVM''@;'; put 'put ''b2NhbGVEYXRhKCl9Z2V0IGZpcnN0RGF5T2ZXZWVrKCl7cmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXN9Z2V0IGxvY2FsZURheXNOYXJyb3coKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5cy5tYXAoZT0+ZS5uYXJyb3cp''@;'; put 'put ''fWdldCBsb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNBYmJyZXZpYXRlZH1nZXQgbG9jYWxlTW9udGhzV2lkZSgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNXaWRlfWdldCBsb2NhbGVEYXRlRm9ybWF0KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURh''@;'; put 'put ''dGVGb3JtYXR9aW5pdGlhbGl6ZUxvY2FsZURhdGEoKXt0aGlzLmluaXRpYWxpemVGaXJzdERheU9mV2VlaygpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRo''@;'; put 'put ''c1dpZGUoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXlzKCl9aW5pdGlhbGl6ZUxvY2FsZURheXMoKXtjb25zdCBlPVtdLHI9Z0codGhpcy5sb2NhbGUseDAuU3RhbmRhbG9uZSxibC5XaWRlKS5zbGljZSgpLGk9Z0codGhpcy5sb2NhbGUseDAuU3RhbmRhbG9uZSxibC5OYXJyb3cpLnNsaWNl''@;'; put 'put ''KCksYT10aGlzLmZpcnN0RGF5T2ZXZWVrO2ZvcihsZXQgYz0wO2M8NztjKyspZS5wdXNoKHtkYXk6cltjXSxuYXJyb3c6aVtjXX0pO2lmKGE+MCl7Y29uc3QgYz1lLnNwbGljZSgwLGEpO2UucHVzaCguLi5jKX10aGlzLl9sb2NhbGVEYXlzPWV9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJl''@;'; put 'put ''dmlhdGVkKCl7dGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQ9bUcodGhpcy5sb2NhbGUseDAuU3RhbmRhbG9uZSxibC5BYmJyZXZpYXRlZCkuc2xpY2UoKX1pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpe3RoaXMuX2xvY2FsZU1vbnRoc1dpZGU9bUcodGhpcy5sb2NhbGUseDAuU3Rh''@;'; put 'put ''bmRhbG9uZSxibC5XaWRlKS5zbGljZSgpfWluaXRpYWxpemVGaXJzdERheU9mV2Vlaygpe3RoaXMuX2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIERBZShuKXtyZXR1cm4gWjEobilbbmMuRmlyc3REYXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKXt0''@;'; put 'put ''aGlzLl9sb2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIFdFKG4sdCl7cmV0dXJuIFRmKFoxKG4pW25jLkRhdGVGb3JtYXRdLHQpfSh0aGlzLmxvY2FsZSxwaC5TaG9ydCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKGE0KSl9LG4uXHUwMjc1cHJv''@;'; put 'put ''dj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y2xhc3MgeGh7Y29uc3RydWN0b3IodCxlKXt0aGlzLnllYXI9dCx0aGlzLm1vbnRoPWUsdGhpcy5pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKX1pc0VxdWFsKHQpe3JldHVybiEhdCYmdGhpcy55ZWFyPT09dC55ZWFy''@;'; put 'put ''JiZ0aGlzLm1vbnRoPT09dC5tb250aH1pc0RheUluQ2FsZW5kYXIodCl7cmV0dXJuISF0JiZ0aGlzLnllYXI9PT10LnllYXImJnRoaXMubW9udGg9PT10Lm1vbnRofXByZXZpb3VzTW9udGgoKXtyZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IHhoKHRoaXMueWVhci0xLDExKTpuZXcgeGgodGhp''@;'; put 'put ''cy55ZWFyLHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7cmV0dXJuIDExPT09dGhpcy5tb250aD9uZXcgeGgodGhpcy55ZWFyKzEsMCk6bmV3IHhoKHRoaXMueWVhcix0aGlzLm1vbnRoKzEpfXByZXZpb3VzWWVhcigpe3JldHVybiBuZXcgeGgodGhpcy55ZWFyLTEsdGhpcy5tb250aCl9bmV4''@;'; put 'put ''dFllYXIoKXtyZXR1cm4gbmV3IHhoKHRoaXMueWVhcisxLHRoaXMubW9udGgpfWluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpe2NvbnN0IHQ9bXBlKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkodCkuZmlsbChudWxsKS5tYXAoKGUscik9Pm5ldyBNaCh0aGlzLnllYXIs''@;'; put 'put ''dGhpcy5tb250aCxyKzEpKX19bGV0IHcyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmlzUmFuZ2VQaWNrZXI9ITEsdGhpcy5oYXNBY3Rpb25CdXR0b25zPSExLHRoaXMuX3RvZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlPW5ldyB1cix0aGlz''@;'; put 'put ''Ll9zZWxlY3RlZEVuZERheUNoYW5nZT1uZXcgdXIsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2U9bmV3IHVyLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgdXIsdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldz1uZXcgdXIsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgdXJ9''@;'; put 'put ''Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNlbGVj''@;'; put 'put ''dGVkRW5kRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVu''@;'; put 'put ''ZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoRTAoZT0+dGhpcy5mb2N1c2VkRGF5PWUpKX1nZXQg''@;'; put 'put ''cmVmcmVzaENhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3LmFzT2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChlLHtlbWl0RXZlbnQ6cn09e2VtaXRFdmVudDohMH0pe2lmKHRoaXMuaXNSYW5nZVBpY2tlcil7Y29uc3R7c3RhcnREYXRl''@;'; put 'put ''OmksZW5kRGF0ZTphfT1lO2kmJmE/KHRoaXMuc2V0U2VsZWN0ZWREYXkoaSxyKSx0aGlzLnNldFNlbGVjdGVkRW5kRGF5KGEscikpOihudWxsIT09YSYmdGhpcy5zZXRTZWxlY3RlZEVuZERheShhLHIpLG51bGwhPT1pJiZ0aGlzLnNldFNlbGVjdGVkRGF5KGkscikpfWVsc2UgdGhpcy5zZXRT''@;'; put 'put ''ZWxlY3RlZERheShlLHIpO3RoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXcubmV4dCgpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyB4''@;'; put 'put ''aCh0aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IHhoKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChlKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyB4aCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFy''@;'; put 'put ''LGUpKX1jaGFuZ2VZZWFyKGUpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IHhoKGUsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgp''@;'; put 'put ''KX1tb3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb05leHRZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0WWVh''@;'; put 'put ''cigpKX1tb3ZlVG9QcmV2aW91c1llYXIoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzWWVhcigpKX1tb3ZlVG9DdXJyZW50TW9udGgoKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8''@;'; put 'put ''dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgeGgodGhpcy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfW1vdmVUb1NwZWNpZmljTW9udGgoZSl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIo''@;'; put 'put ''ZSl8fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IHhoKGUueWVhcixlLm1vbnRoKSl9aW5jcmVtZW50Rm9jdXNEYXkoZSl7dGhpcy5ob3ZlcmVkRGF5PXRoaXMuZm9jdXNlZERheT10aGlzLmZvY3VzZWREYXkuaW5jcmVtZW50QnkoZSksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNE''@;'; put 'put ''YXlJbkNhbGVuZGFyKHRoaXMuZm9jdXNlZERheSk/dGhpcy5fZm9jdXNlZERheUNoYW5nZS5uZXh0KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgeGgodGhpcy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNP''@;'; put 'put ''bkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1yZXNldFNlbGVjdGVkRGF5KCl7dGhpcy5zZWxlY3RlZERheT10aGlzLnBlcnNpc3RlZERhdGUsdGhpcy5zZWxlY3RlZEVuZERheT10aGlzLnBlcnNpc3RlZEVuZERhdGV9Y29udmVydERhdGVUb0RheU1vZGVsKGUpe3JldHVybiBuZXcgTWgoZS5nZXRG''@;'; put 'put ''dWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSl9c2V0U2VsZWN0ZWREYXkoZSxyKXt0aGlzLnNlbGVjdGVkRGF5PWUsciYmdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UubmV4dChlKX1zZXRTZWxlY3RlZEVuZERheShlLHIpe3RoaXMuc2VsZWN0ZWRFbmREYXk9ZSxyJiZ0aGlzLl9z''@;'; put 'put ''ZWxlY3RlZEVuZERheUNoYW5nZS5uZXh0KGUpfXNldERpc3BsYXllZENhbGVuZGFyKGUpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoZSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1lLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRv''@;'; put 'put ''ZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgTWgodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVy''@;'; put 'put ''biBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEI2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnBsYXRmb3JtSWQ9cn1m''@;'; put 'put ''b2N1c0NlbGwoZSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IHI9ZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ciYmci5mb2N1cygpfSl9''@;'; put 'put ''KX1mb2N1c0lucHV0KGUpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+ZS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChlKXtyZXR1cm4gX2wodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQu''@;'; put 'put ''YWN0aXZlRWxlbWVudD09PWV9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXzYoKSxyYygoKT0+X2wodGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJu''@;'; put 'put ''IG5ldyhlfHxuKShPcihKYSksT3IoZGMpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxvNT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlzYWJsZWREYXRlcz17bWluRGF0ZTpuZXcgTWgoMCwwLDEpLG1heERhdGU6bmV3''@;'; put 'put ''IE1oKDk5OTksMTEsMzEpfSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PSJkZC9NTS95Iix0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9eUgsdGhpcy5kZWxpbWl0ZXJzPVsiLyIsIi8iXSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PWUubG9jYWxlRGF0ZUZvcm1hdCx0aGlzLmluaXRpYWxp''@;'; put 'put ''emVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe2NvbnN0IGU9dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtyZXR1cm4gZVswXSt0aGlzLmRlbGltaXRlcnNbMF0rZVsxXSt0aGlzLmRlbGltaXRlcnNbMV0rZVsyXX1zZXRNaW5EYXRlKGUpe2lmKGUp''@;'; put 'put ''e2NvbnN0W3IsaSxhXT1lLnNwbGl0KCItIikubWFwKGM9PnBhcnNlSW50KGMsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTWgocixpLTEsYSl9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTWgoMCwwLDEpfXNldE1heERhdGUoZSl7aWYoZSl7Y29uc3Rb''@;'; put 'put ''cixpLGFdPWUuc3BsaXQoIi0iKS5tYXAoYz0+cGFyc2VJbnQoYywxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBNaChyLGktMSxhKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBNaCg5OTk5LDExLDMxKX1zZXRSYW5nZU9wdGlvbnMoZSl7Y29uc3Qgcj10''@;'; put 'put ''aGlzLnZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhlKTt0aGlzLmRhdGVSYW5nZU9wdGlvbnM9cnx8W119Z2V0UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZVJhbmdlT3B0aW9uc310b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoZSl7aWYoZSl7aWYoaXNOYU4oZS5nZXRUaW1lKCkp''@;'; put 'put ''KXJldHVybiIiO2NvbnN0IHI9ZS5nZXREYXRlKCksaT1lLmdldE1vbnRoKCkrMSxhPXI+OT9yLnRvU3RyaW5nKCk6IjAiK3IsYz1pPjk/aS50b1N0cmluZygpOiIwIitpO3JldHVybiB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT15SD9hK3RoaXMuZGVsaW1pdGVyc1swXStjK3RoaXMuZGVs''@;'; put 'put ''aW1pdGVyc1sxXStlLmdldEZ1bGxZZWFyKCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09elg/Yyt0aGlzLmRlbGltaXRlcnNbMF0rYSt0aGlzLmRlbGltaXRlcnNbMV0rZS5nZXRGdWxsWWVhcigpOmUuZ2V0RnVsbFllYXIoKSt0aGlzLmRlbGltaXRlcnNbMF0rYyt0aGlzLmRlbGltaXRl''@;'; put 'put ''cnNbMV0rYX1yZXR1cm4iIn1nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO2NvbnN0IHI9ZS5tYXRjaChrSmUpO2lmKCFyfHwzIT09ci5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3RbaSxhLGNdPXI7cmV0dXJuIHRoaXMu''@;'; put 'put ''bG9jYWxlRGlzcGxheUZvcm1hdD09PXlIP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKGMsYSxpKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT16WD90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShjLGksYSk6dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoaSxhLGMpfXZhbGlkYXRlRGF0ZVJhbmdl''@;'; put 'put ''T3B0aW9ucyhlKXtjb25zdCByPVtdO3JldHVybiBlPy5mb3JFYWNoKGk9PnsyIT09aT8udmFsdWU/Lmxlbmd0aHx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGk/LnZhbHVlWzBdKXx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZy5jYWxsKGk/LnZhbHVlWzFdKXx8ci5wdXNoKGkpfSkscn1pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpe2NvbnN0IGU9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMubG9jYWxlRGlzcGxheUZvcm1hdD1FSmUudGVzdChlKT95''@;'; put 'put ''SDpUSmUudGVzdChlKT96WDpSSmUsdGhpcy5leHRyYWN0RGVsaW1pdGVycygpfWV4dHJhY3REZWxpbWl0ZXJzKCl7aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7Y29uc3Qgcj10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoSUplLCIiKS5zcGxpdChBSmUpO3ImJjQ9PT1y''@;'; put 'put ''Lmxlbmd0aD90aGlzLmRlbGltaXRlcnM9W3JbMV0sclsyXV06Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICIscil9fWlzVmFsaWRNb250aChlKXtyZXR1cm4gZT4tMSYmZTwxMn1pc1ZhbGlkRGF0ZShlLHIsaSl7''@;'; put 'put ''cmV0dXJuIGk+MCYmaTw9bXBlKGUscil9dmFsaWRhdGVBbmRHZXREYXRlKGUscixpKXtjb25zdCBhPStlLGM9K3ItMSxtPStpO2lmKCF0aGlzLmlzVmFsaWRNb250aChjKXx8IXRoaXMuaXNWYWxpZERhdGUoYSxjLG0pKXJldHVybiBudWxsO2NvbnN0IEM9ZnVuY3Rpb24gUEplKG4pe2lmKG4+''@;'; put 'put ''OTk5OXx8bj4xMDAmJm48OTk5fHxuPDEwKXJldHVybi0xO2lmKG4+OTk5KXJldHVybiBuO2NvbnN0IHQ9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCByPW4rMTAwKk1hdGguZmxvb3IodC8xMDApO3JldHVybiByPnQrMjAmJihyLT0xMDApLHJ9KGEpO3JldHVybi0xIT09Qz9uZXcgRGF0''@;'; put 'put ''ZShDLGMsbSk6bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoT3IobUEpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSwkdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91''@;'; put 'put ''Y2hlZENoYW5nZT1uZXcgdXIsdGhpcy5fZGlydHlDaGFuZ2U9bmV3IHVyfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1h''@;'; put 'put ''cmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChlKXt0aGlzLmRpc2FibGVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1''@;'; put 'put ''MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHZwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWUsdGhpcy5jb21tb25TdHJpbmdzPXIsdGhpcy5vblNlbGVjdERheT1uZXcgWXJ9Z2V0IGRh''@;'; put 'put ''eVZpZXcoKXtyZXR1cm4gdGhpcy5fZGF5Vmlld31zZXQgZGF5VmlldyhlKXt0aGlzLl9kYXlWaWV3PWV9Z2V0IGRheVN0cmluZygpe3JldHVybiB0aGlzLmRheVZpZXcuaXNTZWxlY3RlZD90aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tl''@;'; put 'put ''clNlbGVjdGVkTGFiZWwse0ZVTExfREFURTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfSk6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX1nZXQgaXNSYW5nZVN0YXJ0RGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1Jh''@;'; put 'put ''bmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9Z2V0IGlzUmFuZ2VFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1ob3Zlckxpc3RlbmVyKCl7dGhpcy5kYXlWaWV3''@;'; put 'put ''LmlzRGlzYWJsZWR8fCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWwpfW9uRGF5Vmlld0ZvY3VzKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgp''@;'; put 'put ''e3RoaXMuZGF5Vmlldy5pc0Rpc2FibGVkfHx0aGlzLm9uU2VsZWN0RGF5LmVtaXQodGhpcy5kYXlWaWV3LmRheU1vZGVsKX1pc0luUmFuZ2UoKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNl''@;'; put 'put ''bGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlz''@;'; put 'put ''Ll9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlz''@;'; put 'put ''Ll9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheSwhMCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShX''@;'; put 'put ''ZSh3MiksV2UoZnMpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuaG92ZXJMaXN0ZW5lcigpfSksMiZlJiZi''@;'; put 'put ''cigiZGF5IiwhMCl9LGlucHV0czp7ZGF5VmlldzpbMCwiY2xyRGF5VmlldyIsImRheVZpZXciXX0sb3V0cHV0czp7b25TZWxlY3REYXk6InNlbGVjdERheSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6Mix2YXJzOjE5LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXktYnRuIiwzLCJjbGlj''@;'; put 'put ''ayIsImZvY3VzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYocmUoMCwiYnV0dG9uIiwwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuc2VsZWN0RGF5KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25EYXlWaWV3Rm9jdXMoKX0pLFRlKDEpLGllKCkpLDIm''@;'; put 'put ''ZSYmKGJyKCJpcy10b2RheSIsci5kYXlWaWV3LmlzVG9kYXlzRGF0ZSkoImlzLWV4Y2x1ZGVkIixyLmRheVZpZXcuaXNFeGNsdWRlZCkoImlzLWRpc2FibGVkIixyLmRheVZpZXcuaXNEaXNhYmxlZCkoImlzLXNlbGVjdGVkIixyLmRheVZpZXcuaXNTZWxlY3RlZCkoImluLXJhbmdlIixyLmlz''@;'; put 'put ''SW5SYW5nZSgpKSgiaXMtc3RhcnQtcmFuZ2UiLHIuaXNSYW5nZVN0YXJ0RGF5KSgiaXMtZW5kLXJhbmdlIixyLmlzUmFuZ2VFbmREYXkpLFJyKCJ0YWJpbmRleCIsci5kYXlWaWV3LnRhYkluZGV4KSgiYXJpYS1jdXJyZW50IixyLmRheVZpZXcuaXNUb2RheXNEYXRlPyJkYXRlIjoiZmFsc2Ui''@;'; put 'put ''KSgiYXJpYS1sYWJlbCIsci5kYXlTdHJpbmcpKCJhcmlhLXNlbGVjdGVkIixyLmRheVZpZXcuaXNTZWxlY3RlZCksYWUoKSxNcigiICIsci5kYXlWaWV3LmRheU1vZGVsLmRhdGUsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHlwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUs''@;'; put 'put ''cixpLGEsYyxtLEMpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9ZSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9cix0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWksdGhpcy5fZGF0ZUlPU2VydmljZT1hLHRoaXMuX2VsUmVmPWMsdGhpcy5fZGF0ZUZvcm1Db250cm9sU2Vydmlj''@;'; put 'put ''ZT1tLHRoaXMuX3RvZ2dsZVNlcnZpY2U9Qyx0aGlzLl9zdWJzPVtdLHRoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoKSx0aGlzLmluaXRpYWxpemVTdWJzY3JpcHRpb25zKCl9Z2V0IGxvY2FsZURheXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVEYXlzfWdldCBj''@;'; put 'put ''YWxlbmRhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJ9Z2V0IHNlbGVjdGVkRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheX1nZXQgc2VsZWN0ZWRFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fWdldCBmb2N1c2VkRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5fWdldCB0b2RheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXl9bmdBZnRlclZpZXdJbml0''@;'; put 'put ''KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vicy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9b25LZXlEb3duKGUpe2lmKGUmJnRoaXMuZm9jdXNlZERheSlzd2l0Y2goRmYoZS5rZXkpKXtjYXNl''@;'; put 'put ''IGhhLkFycm93VXA6ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtNyk7YnJlYWs7Y2FzZSBoYS5BcnJvd0Rvd246ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1''@;'; put 'put ''c0RheSg3KTticmVhaztjYXNlIGhhLkFycm93TGVmdDplLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC0xKTticmVhaztjYXNlIGhhLkFycm93UmlnaHQ6ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgxKX19c2V0U2VsZWN0ZWREYXkoZSl7Y29uc3Qgcj10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9ucyxpPXRoaXMudXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwoZSk7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5v''@;'; put 'put ''dGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChpLHtlbWl0RXZlbnQ6IXJ9KSxyfHwodGhpcy5fZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMudmFsaWRhdGVBbmRDbG9zZURhdGVQaWNrZXIoKSl9aW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKXt0aGlzLl9zdWJzLnB1c2go''@;'; put 'put ''dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXlDaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGU9Pnt0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZUZvY3VzYWJsZURheShlKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzT25DYWxlbmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNl''@;'; put 'put ''LmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9KSksdGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5yZWZyZXNoQ2FsZW5kYXJWaWV3LnN1YnNjcmliZSgoKT0+e3RoaXMucmVmcmVzaENhbGVuZGFyVmlld01vZGFsKCl9KSl9dmFsaWRhdGVBbmRDbG9zZURhdGVQaWNr''@;'; put 'put ''ZXIoKXsodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fHwhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlz''@;'; put 'put ''UmFuZ2VQaWNrZXImJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkmJih0aGlzLl90b2dnbGVTZXJ2aWNlLm9wZW49ITEpfXVwZGF0ZUNhbGVuZGFyVmlld01vZGFsKGUpe2NvbnN0IHI9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheXx8bnVsbCxpPXRo''@;'; put 'put ''aXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyO2xldCBhPXRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWRFbmREYXl8fG51bGw7cmV0dXJuIGk/IXJ8fHImJmF8fHImJmU/LmlzQmVmb3JlKHIpPyh0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVk''@;'; put 'put ''RGF5KGUpLGEmJihhPXZvaWQgMCx0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGEpKSk6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheShlKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5KGUpLGk/e3N0''@;'; put 'put ''YXJ0RGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5LGVuZERhdGU6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheX06dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheX1yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKXt0aGlzLmNhbGVuZGFy''@;'; put 'put ''Vmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkodGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KX1nZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IE5KZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5zZWxlY3RlZEVuZERheSx0aGlzLmZvY3VzZWREYXksdGhpcy50b2Rh''@;'; put 'put ''eSx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmZpcnN0RGF5T2ZXZWVrLHRoaXMuX2RhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKG1BKSxXZSh3MiksV2UoQjYpLFdlKG81KSxXZSh6aSksV2Uo''@;'; put 'put ''JHcpLFdlKGdjKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1jYWxlbmRhciJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsxJmUmJmt0KCJrZXlkb3duIixmdW5jdGlvbihhKXtyZXR1cm4gci5vbktleURvd24oYSl9KX0sc3RhbmRhbG9uZTohMSxkZWNs''@;'; put 'put ''czo0LHZhcnM6Mixjb25zdHM6W1sicm9sZSIsInByZXNlbnRhdGlvbiIsMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2RheXMiXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCB3ZWVrZGF5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiY2FsZW5kYXIt''@;'; put 'put ''cm93Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsInNlbGVjdERheSIsImNsckRheVZp''@;'; put 'put ''ZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihyZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLGN0KDIsR1llLDMsMiwidGgiLDIpLGllKCksY3QoMyxLWWUsMiwxLCJ0ciIsMyksaWUoKSksMiZlJiYoYWUoMikseWUoIm5nRm9yT2YiLHIubG9jYWxlRGF5cyksYWUoKSx5ZSgibmdG''@;'; put 'put ''b3JPZiIsci5jYWxlbmRhclZpZXdNb2RlbC5jYWxlbmRhclZpZXcpKX0sZGVwZW5kZW5jaWVzOltocyx2cGVdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLF9IPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSxl''@;'; put 'put ''JiYodGhpcy5faXNVc2VyQWdlbnRNb2JpbGU9REplLnRlc3QoZS5kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLl9pbm5lcldpZHRoPWUuZGVmYXVsdFZpZXcuaW5uZXJXaWR0aCl9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiEodGhpcy5fZG9jdW1lbnQmJnRoaXMuX2lubmVy''@;'; put 'put ''V2lkdGg8NzY4JiZ0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKFhzKSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVVg9KCgpPT57Y2xhc3MgbiBl''@;'; put 'put ''eHRlbmRzIGh2e2NvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMsUCxZLEosY2UsZmUsQWUpe3N1cGVyKGUseUEscixjLGEsaSksdGhpcy5lbD1pLHRoaXMucmVuZGVyZXI9YSx0aGlzLmNvbnRyb2w9Yyx0aGlzLmNvbnRhaW5lcj1tLHRoaXMuZGF0ZUlPU2VydmljZT1DLHRoaXMuZGF0ZU5hdmln''@;'; put 'put ''YXRpb25TZXJ2aWNlPVAsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9WSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9Six0aGlzLnBsYXRmb3JtSWQ9Y2UsdGhpcy5mb2N1c1NlcnZpY2U9ZmUsdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPUFlLHRoaXMuaW5kZXg9MX1nZXQg''@;'; put 'put ''ZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZHx8ISF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LmRpc2FibGVkOm51bGx9c2V0IGRpc2FibGVkKGUpe3RoaXMuZGF0ZUZvcm1Db250cm9sU2Vydmlj''@;'; put 'put ''ZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnNldERpc2FibGVkKGVwKGUpKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjp0aGlzLmRhdGVJT1NlcnZpY2UucGxhY2Vob2xkZXJUZXh0fWdldCBpbnB1dFR5cGUoKXty''@;'; put 'put ''ZXR1cm4gX2wodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8iZGF0ZSI6InRleHQifW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLnB1''@;'; put 'put ''c2godGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckRpcnR5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkp''@;'; put 'put ''fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucHJvY2Vzc0luaXRpYWxJbnB1dHMoKX1zZXRGb2N1c1N0YXRlcygpe3RoaXMuc2V0Rm9jdXMoITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7c3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLnNldEZvY3VzKCExKX1vblZhbHVlQ2hhbmdlKGUpe2Nv''@;'; put 'put ''bnN0IHI9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGUudmFsdWUpO2lmKHRoaXMudXNpbmdDbGFyaXR5RGF0ZXBpY2tlcigpJiZyKXRoaXMudXBkYXRlRGF0ZShyLCEwKTtlbHNlIGlmKHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpe2NvbnN0W2ks''@;'; put 'put ''YSxjXT1lLnZhbHVlLnNwbGl0KCItIik7dGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCtpLCthLTEsK2MpLCEwKX1lbHNlIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9c2V0RGF0ZShlKXsic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGUmJihlPW5ldyBEYXRlKGUpKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSE9PWUmJnRoaXMudXBkYXRlRGF0ZShlKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWUpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoZSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2Vydmlj''@;'; put 'put ''ZS5mb2N1c2VkPWUpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIobzUpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlk''@;'; put 'put ''ZXJGcm9tQ29udGFpbmVyKHcyKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihfSCksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKCR3KSl9cHJvY2Vzc0luaXRpYWxJbnB1''@;'; put 'put ''dHMoKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVl''@;'; put 'put ''KX11cGRhdGVEYXRlKGUscj0hMSl7Y29uc3QgaT10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoZSk7aWYocj90aGlzLmVtaXREYXRlT3V0cHV0KGkpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Upe2NvbnN0IGE9aT9uZXcgTWgoaS5n''@;'; put 'put ''ZXRGdWxsWWVhcigpLGkuZ2V0TW9udGgoKSxpLmdldERhdGUoKSk6bnVsbDt0aGlzLnVwZGF0ZURheU1vZGVsKGEpfXRoaXMudXBkYXRlSW5wdXQoaSl9dXBkYXRlSW5wdXQoZSl7aWYoZSl7Y29uc3Qgcj10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGUp''@;'; put 'put ''O3RoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KGUuc2V0TWludXRlcyhlLmdldE1pbnV0ZXMoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZUFzRGF0ZSIsZSkpOnRoaXMuZGF0ZXBpY2tlckhh''@;'; put 'put ''c0Zvcm1Db250cm9sKCkmJnIhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUocik6dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixyKSx0aGlzLnZhbGlkYXRlRGF0ZVJhbmdlKCl9ZWxzZSB0aGlz''@;'; put 'put ''LnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGUpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3Qgcj10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGUp''@;'; put 'put ''O3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcocil9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoZSl7IWZ1bmN0aW9uIEZKZShuLHQpe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUmJm4uZ2V0RnVsbFllYXIo''@;'; put 'put ''KT09PXQuZ2V0RnVsbFllYXIoKSYmbi5nZXRNb250aCgpPT09dC5nZXRNb250aCgpJiZuLmdldERhdGUoKT09PXQuZ2V0RGF0ZSgpfShlLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoZSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9ZSk6IWUmJnRoaXMu''@;'; put 'put ''cHJldmlvdXNEYXRlQ2hhbmdlJiYodGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMuY29udHJvbC52YWx1''@;'; put 'put ''ZUNoYW5nZXMucGlwZShyYygoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoZT0+dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmlu''@;'; put 'put ''ZyhlKSkpOm51bGx9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVybiB0aGlzLnVzZXJTZWxlY3RlZERheUNoYW5nZS5zdWJzY3JpYmUoZT0+dGhpcy51cGRhdGVEYXRlKGU/LnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0''@;'; put 'put ''ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUocmMoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKHJjKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShyYyhlPT4hIWUmJiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKSkuc3Vic2NyaWJlKCgpPT50aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVs''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQpKX12YWxpZGF0ZURhdGVSYW5nZSgpe2lmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIpe2NvbnN0IGU9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5jb250cm9sLHI9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5hZGRpdGlvbmFsQ29udHJvbHM7''@;'; put 'put ''dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LmlzQmVmb3JlKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LCEwKSYmKGU/Lmhhc0Vycm9yKCJyYW5nZSIpfHxyPy5zb21lKGE9PmEuaGFzRXJyb3IoInJhbmdlIikpKSYmKGUuY29udHJvbD8u''@;'; put 'put ''dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksci5mb3JFYWNoKGE9PnthPy5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKE5uKSxX''@;'; put 'put ''ZShIbyksV2UoemkpLFdlKFRvKSxXZShxMSwxMCksV2UocmEoKCk9PnlBKSw4KSxXZShvNSw4KSxXZSh3Miw4KSxXZShfSCw4KSxXZSgkdyw4KSxXZShkYyksV2UoWncsOCksV2UoQjYpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihl''@;'; put 'put ''LHIpezEmZSYma3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiByLnNldEZvY3VzU3RhdGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gci50cmlnZ2VyVmFsaWRhdGlvbigpfSkoImNoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIHIub25WYWx1ZUNoYW5nZShhLnRhcmdldCl9KSwy''@;'; put 'put ''JmUmJihuNCgiZGlzYWJsZWQiLHIuZGlzYWJsZWQpLFJyKCJwbGFjZWhvbGRlciIsci5wbGFjZWhvbGRlclRleHQpKCJ0eXBlIixyLmlucHV0VHlwZSkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJl''@;'; put 'put ''czpbSWFdfSksbn0pKCksX3BlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVWHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBZcighMSksdGhpcy5pbnB1dFdpZHRoPTEzfXNldCBkYXRlKGUpe3RoaXMuc2V0RGF0ZShlKX1nZXQgaW5wdXRTaXpl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaW5wdXRXaWR0aH1nZXQgdXNlclNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Q2hhbmdlfXRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNv''@;'; put 'put ''bnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfXVwZGF0ZURheU1vZGVsKGUpe3RoaXMuZGF0ZU5hdmln''@;'; put 'put ''YXRpb25TZXJ2aWNlLnBlcnNpc3RlZEVuZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPSgoKT0+e2xldCB0O3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4odHx8KHQ9S3MobikpKShyfHxuKX19KSgpLG4uXHUwMjc1''@;'; put 'put ''ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsckVuZERhdGUiLCIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJihScigic2l6ZSIsci5pbnB1dFNpemUpLGJyKCJjbHItaW5wdXQiLCEwKSl9LGlucHV0czp7aW5wdXRXaWR0aDoiaW5wdXRXaWR0''@;'; put 'put ''aCIsZGF0ZTpbMCwiY2xyRW5kRGF0ZSIsImRhdGUiXX0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRW5kRGF0ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtCNl0pLElhXX0pLG59KSgpLGJIPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVWHtjb25zdHJ1Y3Rvcigpe3N1cGVy''@;'; put 'put ''KC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBZcighMSl9c2V0IGRhdGUoZSl7dGhpcy5zZXREYXRlKGUpfXNldCBtaW4oZSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoZSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1zZXQgbWF4KGUpe3RoaXMuZGF0''@;'; put 'put ''ZUlPU2VydmljZS5zZXRNYXhEYXRlKGUpLHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX11cGRhdGVEYXlNb2RlbChlKXt0aGlzLmRhdGVO''@;'; put 'put ''YXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWV9dHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1''@;'; put 'put ''ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9KCgpPT57bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybih0fHwodD1LcyhuKSkpKHJ8''@;'; put 'put ''fG4pfX0pKCksbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImNsci1pbnB1dCIsITApfSxpbnB1dHM6e2RhdGU6WzAsImNsckRhdGUiLCJkYXRlIl0sbWluOiJt''@;'; put 'put ''aW4iLG1heDoibWF4In0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRGF0ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtCNl0pLElhXX0pLG59KSgpLGJwZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVVh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMu''@;'; put 'put ''ZGF0ZUNoYW5nZT1uZXcgWXIoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShlKXt0aGlzLnNldERhdGUoZSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5zZWxlY3RlZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNv''@;'; put 'put ''bnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChlKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWV9fXJldHVybiBuLlx1MDI3NWZh''@;'; put 'put ''Yz0oKCk9PntsZXQgdDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKHR8fCh0PUtzKG4pKSkocnx8bil9fSkoKSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUm''@;'; put 'put ''JihScigic2l6ZSIsci5pbnB1dFNpemUpLFRkKCJ0ZXh0LWFsaWduIiwicmlnaHQiKSxicigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6WzAsImNsclN0YXJ0RGF0ZSIsImRhdGUiXX0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyU3RhcnRE''@;'; put 'put ''YXRlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW0I2XSksSWFdfSksbn0pKCksS3c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpb249eWhbImJvdHRvbS1sZWZ0Il0sdGhpcy5fY3VycmVudFZpZXc9IkRBWVZJRVcifWdldCBpc0RheVZpZXcoKXty''@;'; put 'put ''ZXR1cm4iREFZVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiJZRUFSVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31nZXQgaXNNb250aFZpZXcoKXtyZXR1cm4iTU9OVEhWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWNoYW5nZVRvTW9udGhWaWV3KCl7''@;'; put 'put ''dGhpcy5fY3VycmVudFZpZXc9Ik1PTlRIVklFVyJ9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJZRUFSVklFVyJ9Y2hhbmdlVG9EYXlWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9IkRBWVZJRVcifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5l''@;'; put 'put ''dyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx3cGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1lLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1yLHRo''@;'; put 'put ''aXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aSx0aGlzLl9lbFJlZj1hLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1jLHRoaXMuY29tbW9uU3RyaW5ncz1tLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4PXRoaXMuY2FsZW5kYXJNb250aEluZGV4fWdldCBtb250aE5hbWVzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzV2lkZX1nZXQgY2FsZW5kYXJNb250aEluZGV4KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci5tb250aH1nZXQgY2FsZW5kYXJFbmRNb250aEluZGV4KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0WWVhclRleHQse0NBTEVOREFSX1lFQVI6dGhp''@;'; put 'put ''cy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Z2V0IGN1cnJlbnRDYWxlbmRhclllYXIoKXtyZXR1cm4obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9Z2V0''@;'; put 'put ''IGN1cnJlbnRDYWxlbmRhck1vbnRoKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRNb250aCgpfWdldElzUmFuZ2VTdGFydE1vbnRoKGUpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXImJmU9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1vbnRofWdldElzUmFuZ2VFbmRNb250aChlKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZ''@;'; put 'put ''ZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyJiZlPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aH1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVh''@;'; put 'put ''clZpZXcoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGUpe2lmKGUpe2NvbnN0IHI9RmYoZS5rZXkpO3I9PT1oYS5BcnJvd1VwJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD4xPyhlLnByZXZl''@;'; put 'put ''bnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgtPTIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpyPT09aGEuQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMD8oZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2Zv''@;'; put 'put ''Y3VzZWRNb250aEluZGV4Kz0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6cj09PWhhLkFycm93UmlnaHQmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDExPyhlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrKyx0''@;'; put 'put ''aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOnI9PT1oYS5BcnJvd0xlZnQmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PjAmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgtLSx0aGlzLl9kYXRlcGlja2VyRm9jdXNT''@;'; put 'put ''ZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpfX1pc1NlbGVjdGVkKGUpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmZT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8u''@;'; put 'put ''bW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcj09PXRoaXMuY2FsZW5kYXJZZWFyJiZlPT09dGhpcy5jYWxlbmRhckVuZE1vbnRoSW5kZXh9b25Ib3ZlcihlKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoPWV9Y2hh''@;'; put 'put ''bmdlTW9udGgoZSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGUpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChlKXtyZXR1cm4gZT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9bmV4dFllYXIoKXt0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dFllYXIoKX1wcmV2aW91c1llYXIoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvUHJldmlvdXNZZWFyKCl9Y3VycmVudFllYXIoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvQ3VycmVudE1v''@;'; put 'put ''bnRoKCl9aXNJblJhbmdlKGUpe3JldHVybiEhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT90aGlzLmNhbGVu''@;'; put 'put ''ZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZlPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmRE''@;'; put 'put ''YXkueWVhciYmZTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyIT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJnRoaXMuY2Fs''@;'; put 'put ''ZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmU+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVO''@;'; put 'put ''YXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZlPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS5tb250aHx8dGhpcy5j''@;'; put 'put ''YWxlbmRhclllYXI+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFyPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh''@;'; put 'put ''eXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmKHRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmU+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRoJiZl''@;'; put 'put ''PHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGh8fHRoaXMuY2FsZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZlPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGgpKX19cmV0dXJuIG4uXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UobUEpLFdlKHcyKSxXZShCNiksV2UoemkpLFdlKEt3KSxXZShmcykpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImFwcGxpY2F0aW9u''@;'; put 'put ''Il0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsxJmUmJmt0KCJrZXlkb3duIixmdW5jdGlvbihhKXtyZXR1cm4gci5vbktleURvd24oYSl9KSwyJmUmJmJyKCJtb250aHBpY2tlciIsITApfSxzdGFuZGFsb25lOiExLGRlY2xzOjEzLHZhcnM6MTAsY29uc3RzOltbMSwi''@;'; put 'put ''Y2FsZW5kYXItaGVhZGVyIiwiaW4tbW9udGhwaWNrZXIiXSxbMSwieWVhci12aWV3LXN3aXRjaGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsIm1vbnRocyJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''ImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxl''@;'; put 'put ''bmRhci1idG4iLCJtb250aCIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYocmUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmNoYW5nZVRvWWVhclZpZXcoKX0pLFRl''@;'; put 'put ''KDMpLGllKCkoKSxyZSg0LCJkaXYiLDMpKDUsImJ1dHRvbiIsNCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLnByZXZpb3VzWWVhcigpfSksVnQoNiwiY2RzLWljb24iLDUpLGllKCkscmUoNywiYnV0dG9uIiw0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY3VycmVu''@;'; put 'put ''dFllYXIoKX0pLFZ0KDgsImNkcy1pY29uIiw2KSxpZSgpLHJlKDksImJ1dHRvbiIsNCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLm5leHRZZWFyKCl9KSxWdCgxMCwiY2RzLWljb24iLDcpLGllKCkoKSgpLHJlKDExLCJkaXYiLDgpLGN0KDEyLFhZZSwyLDEyLCJidXR0b24iLDkp''@;'; put 'put ''LGllKCkpLDImZSYmKGFlKDIpLFJyKCJhcmlhLWxhYmVsIixyLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLHIueWVhckF0dHJTdHJpbmcpLGFlKCksTXIoIiAiLHIuY2FsZW5kYXJZZWFyLCIgIiksYWUoMiksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQ''@;'; put 'put ''cmV2aW91c01vbnRoKSxhZSgpLFJyKCJ0aXRsZSIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGFlKCksUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGFlKCksUnIoInRpdGxlIixyLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxhZSgpLFJyKCJhcmlhLWxhYmVsIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxhZSgpLFJyKCJ0aXRsZSIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksYWUoMiks''@;'; put 'put ''eWUoIm5nRm9yT2YiLHIubW9udGhOYW1lcykpfSxkZXBlbmRlbmNpZXM6W2hzLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtjbGFzcyB2QXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnllYXI9dCx0aGlzLnllYXJSYW5nZT1bXSx0aGlzLmdlbmVyYXRlWWVhclJhbmdlKCl9Z2V0IG1pZGRsZVll''@;'; put 'put ''YXIoKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VbTWF0aC5mbG9vcih0aGlzLnllYXJSYW5nZS5sZW5ndGgvMildfW5leHREZWNhZGUoKXtyZXR1cm4gbmV3IHZBKHRoaXMueWVhcisxMCl9cHJldmlvdXNEZWNhZGUoKXtyZXR1cm4gbmV3IHZBKHRoaXMueWVhci0xMCl9Y3VycmVudERlY2FkZSgp''@;'; put 'put ''e3JldHVybiBuZXcgdkEoKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKX1pblJhbmdlKHQpe3JldHVybiB0aGlzLnllYXJSYW5nZS5pbmRleE9mKHQpPi0xfWdlbmVyYXRlWWVhclJhbmdlKCl7Y29uc3QgZT10aGlzLnllYXItdGhpcy55ZWFyJTEwO3RoaXMueWVhclJhbmdlPXRoaXMuZ2VuZXJh''@;'; put 'put ''dGVSYW5nZShlLGUrMTApfWdlbmVyYXRlUmFuZ2UodCxlKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmUtdH0sKHIsaSk9PmkrdCl9fWxldCBTcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1lLHRoaXMuX3ZpZXdN''@;'; put 'put ''YW5hZ2VyU2VydmljZT1yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aSx0aGlzLl9lbFJlZj1hLHRoaXMuY29tbW9uU3RyaW5ncz1jLHRoaXMueWVhclJhbmdlTW9kZWw9bmV3IHZBKHRoaXMuY2FsZW5kYXJZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj10aGlzLmNhbGVuZGFyWWVhcn1n''@;'; put 'put ''ZXQgc2VsZWN0ZWRTdGFydFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfWdldCBzZWxlY3RlZEVuZFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfWdldCBjYWxlbmRh''@;'; put 'put ''clllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9aXNDdXJyZW50Q2FsZW5kYXJZZWFyKGUpe3JldHVybiBlPT09KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldElzUmFuZ2VTdGFydFllYXIoZSl7cmV0dXJuIHRoaXMuX2Rh''@;'; put 'put ''dGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZlPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfWdldElzUmFuZ2VFbmRZZWFyKGUpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmZT09PXRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGUpe2lmKGUpe2NvbnN0IHI9RmYoZS5rZXkpO3I9PT1oYS5BcnJvd1Vw''@;'; put 'put ''PyhlLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMikpOnI9PT1oYS5BcnJvd0Rvd24/KGUucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDIpKTpyPT09aGEuQXJyb3dSaWdodD8oZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5j''@;'; put 'put ''cmVtZW50Rm9jdXNZZWFyQnkoMSkpOnI9PT1oYS5BcnJvd0xlZnQmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpfX1jaGFuZ2VZZWFyKGUpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGUpLHRoaXMuX3ZpZXdNYW5hZ2Vy''@;'; put 'put ''U2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1vbkhvdmVyKGUpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkWWVhcj1lfXByZXZpb3VzRGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCl9Y3VycmVudERlY2Fk''@;'; put 'put ''ZSgpe3RoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXkueWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwuY3VycmVudERlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3Vz''@;'; put 'put ''Q2VsbCh0aGlzLl9lbFJlZil9bmV4dERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCl9Z2V0VGFiSW5kZXgoZSl7cmV0dXJuIHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLl9mb2N1''@;'; put 'put ''c2VkWWVhcj10aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5jYWxlbmRhclllYXIpP3RoaXMuY2FsZW5kYXJZZWFyOnRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLnNlbGVjdGVkRW5kWWVhcik/dGhpcy5zZWxlY3RlZEVuZFllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5t''@;'; put 'put ''aWRkbGVZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj09PWU/MDotMX1pc0luUmFuZ2UoZSl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmdGhpcy5zZWxlY3RlZEVu''@;'; put 'put ''ZFllYXI/ZT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZlPHRoaXMuc2VsZWN0ZWRFbmRZZWFyOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcnx8dGhpcy5zZWxlY3RlZEVuZFllYXIpJiZlPnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJmU8dGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyKX1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9aW5jcmVtZW50Rm9jdXNZZWFyQnkoZSl7dGhpcy5fZm9jdXNlZFllYXI9dGhpcy5fZm9jdXNlZFllYXIrZSx0aGlzLnllYXJS''@;'; put 'put ''YW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD1lPjA/dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCk6dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZv''@;'; put 'put ''Y3VzQ2VsbCh0aGlzLl9lbFJlZil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHcyKSxXZShLdyksV2UoQjYpLFdlKHppKSxXZShmcykpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHIteWVhcnBpY2tlciJdXSxob3N0''@;'; put 'put ''QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoImtleWRvd24iLGZ1bmN0aW9uKGEpe3JldHVybiByLm9uS2V5RG93bihhKX0pLDImZSYmYnIoInllYXJwaWNrZXIiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNs''@;'; put 'put ''czoxMyx2YXJzOjksY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsInllYXItcmFuZ2UiLDMsImNsaWNrIl0sWzEsInllYXItc3dpdGNoZXJzIl0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0''@;'; put 'put ''dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFyIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihyZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY2hhbmdlVG9EYXlW''@;'; put 'put ''aWV3KCl9KSxUZSgzKSxpZSgpKCkscmUoNCwiZGl2IiwzKSg1LCJidXR0b24iLDQpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gci5wcmV2aW91c0RlY2FkZSgpfSksVnQoNiwiY2RzLWljb24iLDUpLGllKCkscmUoNywiYnV0dG9uIiw0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHIuY3VycmVudERlY2FkZSgpfSksVnQoOCwiY2RzLWljb24iLDYpLGllKCkscmUoOSwiYnV0dG9uIiw0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIubmV4dERlY2FkZSgpfSksVnQoMTAsImNkcy1pY29uIiw3KSxpZSgpKCkoKSxyZSgxMSwiZGl2Iiw4KSxjdCgxMixxWWUs''@;'; put 'put ''MiwxMiwiYnV0dG9uIiw5KSxpZSgpKSwyJmUmJihhZSgzKSxuMCgiICIsci55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbMF0sIiAtICIsci55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2Vbci55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UubGVuZ3RoLTFdLCIgIiksYWUoMiksUnIoImFyaWEtbGFi''@;'; put 'put ''ZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksYWUoKSxScigidGl0bGUiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksYWUoKSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tl''@;'; put 'put ''ckN1cnJlbnREZWNhZGUpLGFlKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksYWUoKSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGFlKCksUnIoInRpdGxlIixyLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dERlY2FkZSksYWUoMikseWUoIm5nRm9yT2YiLHIueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbaHMscnNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLE1wZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixp''@;'; put 'put ''LGEpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1lLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1yLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aSx0aGlzLmNvbW1vblN0cmluZ3M9YX1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0''@;'; put 'put ''aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRh''@;'; put 'put ''dGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9N''@;'; put 'put ''b250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShLdyksV2UodzIpLFdlKG1B''@;'; put 'put ''KSxXZShmcykpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiZGF5cGlja2VyIiwhMCl9LHN0YW5k''@;'; put 'put ''YWxvbmU6ITEsZGVjbHM6MTgsdmFyczoxNCxjb25zdHM6W1sxLCJjbHItc3Itb25seSJdLFsxLCJjYWxlbmRhci1oZWFkZXIiXSxbMSwiY2FsZW5kYXItcGlja2VycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwibW9udGhwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJk''@;'; put 'put ''aXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihyZSgwLCJkaXYiLDApLFRlKDEpLGllKCkscmUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImJ1dHRvbiIs''@;'; put 'put ''Myksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmNoYW5nZVRvTW9udGhWaWV3KCl9KSxUZSg1KSxpZSgpLHJlKDYsImJ1dHRvbiIsNCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmNoYW5nZVRvWWVhclZpZXcoKX0pLFRlKDcpLGllKCkoKSxyZSg4LCJkaXYiLDUpKDks''@;'; put 'put ''ImJ1dHRvbiIsNiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLnByZXZpb3VzTW9udGgoKX0pLFZ0KDEwLCJjZHMtaWNvbiIsNyksaWUoKSxyZSgxMSwiYnV0dG9uIiw2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY3VycmVudE1vbnRoKCl9KSxWdCgxMiwiY2RzLWlj''@;'; put 'put ''b24iLDgpLGllKCkscmUoMTMsImJ1dHRvbiIsNiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLm5leHRNb250aCgpfSksVnQoMTQsImNkcy1pY29uIiw5KSxpZSgpKCkoKSxWdCgxNSwiY2xyLWNhbGVuZGFyIikscmUoMTYsImRpdiIsMCksVGUoMTcpLGllKCkpLDImZSYmKGFlKCks''@;'; put 'put ''dnIoci5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50U3RhcnQpLGFlKDMpLFJyKCJhcmlhLWxhYmVsIixyLm1vbnRoQXR0clN0cmluZykoInRpdGxlIixyLm1vbnRoQXR0clN0cmluZyksYWUoKSxNcigiICIsci5jYWxlbmRhck1vbnRoLCIgIiksYWUoKSxScigiYXJpYS1sYWJlbCIs''@;'; put 'put ''ci55ZWFyQXR0clN0cmluZykoInRpdGxlIixyLnllYXJBdHRyU3RyaW5nKSxhZSgpLE1yKCIgIixyLmNhbGVuZGFyWWVhciwiICIpLGFlKDIpLFJyKCJhcmlhLWxhYmVsIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksYWUoKSxScigidGl0bGUiLHIuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxhZSgpLFJyKCJhcmlhLWxhYmVsIixyLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxhZSgpLFJyKCJ0aXRsZSIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250''@;'; put 'put ''aCksYWUoKSxScigiYXJpYS1sYWJlbCIsci5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksYWUoKSxScigidGl0bGUiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGFlKDMpLHZyKHIuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVu''@;'; put 'put ''dEVuZCkpfSxkZXBlbmRlbmNpZXM6W3JzLHlwZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkseHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5jb21tb25TdHJpbmdzPWUsdGhpcy50b2dnbGVTZXJ2aWNlPXIsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9aSx0''@;'; put 'put ''aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9YX1hcHBseSgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8odGhp''@;'; put 'put ''cy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHtzdGFydERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheX0pLHRoaXMuZGF0ZUZvcm1D''@;'; put 'put ''b250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpKTohdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJih0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQo''@;'; put 'put ''dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpKSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1jYW5jZWwoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5yZXNldFNlbGVjdGVkRGF5KCks''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGZzKSxXZShnYyksV2UodzIpLFdlKCR3KSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kYXRlcGlja2VyLWFjdGlvbnMi''@;'; put 'put ''XV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJkYXRlcGlja2VyLWFjdGlvbnMiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1h''@;'; put 'put ''cnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYocmUoMCwiYnV0dG9uIiwwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FuY2VsKCl9KSxUZSgxKSxpZSgpLHJlKDIsImJ1dHRvbiIsMSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmFw''@;'; put 'put ''cGx5KCl9KSxUZSgzKSxpZSgpKSwyJmUmJihhZSgpLHZyKHIuY29tbW9uU3RyaW5ncy5rZXlzLmNhbmNlbCksYWUoMiksdnIoci5jb21tb25TdHJpbmdzLmtleXMuYXBwbHkpKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzPWUsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9cix0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pLHRoaXMuZGF0ZUlPU2VydmljZT1hfWdldCBpc01vbnRoVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZ''@;'; put 'put ''ZWFyVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNEYXlWaWV3fWdldCBoYXNSYW5nZU9wdGlvbnMoKXtyZXR1cm4hIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''Py5pc1JhbmdlUGlja2VyJiYhIXRoaXMuZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RofWdldCBoYXNBY3Rpb25CdXR0b25zKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnN9Z2V0IGRhdGVSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlSU9T''@;'; put 'put ''ZXJ2aWNlLmdldFJhbmdlT3B0aW9ucygpfW9uUmFuZ2VPcHRpb25TZWxlY3QoZSl7Y29uc3Qgcj10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoZT8udmFsdWVbMF0pLGk9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1v''@;'; put 'put ''ZGVsKGU/LnZhbHVlWzFdKTt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTpyLGVuZERhdGU6aX0se2VtaXRFdmVudDohdGhpcy5oYXNBY3Rpb25CdXR0b25zfSksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3Bl''@;'; put 'put ''Y2lmaWNNb250aChyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoZnMpLFdlKEt3KSxXZSh3MiksV2UobzUpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RB''@;'; put 'put ''dHRyczpbInJvbGUiLCJkaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmKFJyKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCksYnIoImRhdGVwaWNrZXIiLCEwKSgi''@;'; put 'put ''aGFzLXJhbmdlLW9wdGlvbiIsci5oYXNSYW5nZU9wdGlvbnMpKCJoYXMtYWN0aW9uLWJ1dHRvbnMiLHIuaGFzQWN0aW9uQnV0dG9ucykpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbQjZdKV0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNhbGVuZGFyVmlldyIsIiJdLFs0LCJuZ0lm''@;'; put 'put ''IiwibmdJZkVsc2UiXSxbMSwiY2xyLWRhdGUtcmFuZ2UtcGlja2VyLW5hdiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwiaHJlZiIsImphdmFzY3JpcHQ6''@;'; put 'put ''dm9pZCgwKSIsInRhYmluZGV4IiwiMCIsMywia2V5dXAuZW50ZXIiLCJjbGljayJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7aWYoMSZlJiZjdCgwLGVHZSw1LDIsIm5nLWNvbnRhaW5lciIsMSkoMSxhR2UsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLENjKSwyJmUpe2Nv''@;'; put 'put ''bnN0IGk9ZGEoMik7eWUoIm5nSWYiLHIuaGFzUmFuZ2VPcHRpb25zKSgibmdJZkVsc2UiLGkpfX0sZGVwZW5kZW5jaWVzOltocyxtYSxrZCxGWCxOWCx3cGUsU3BlLE1wZSx4cGVdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHlBPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBkdntjb25zdHJ1Y3Rv''@;'; put 'put ''cihlLHIsaSxhLGMsbSxDLFAsWSxKLGNlLGZlLEFlLEhlKXtpZihzdXBlcihIZSxmZSxjZSxBZSksdGhpcy5yZW5kZXJlcj1lLHRoaXMuZWxlbT1yLHRoaXMudG9nZ2xlU2VydmljZT1pLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9''@;'; put 'put ''Yyx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9bSx0aGlzLmRhdGVJT1NlcnZpY2U9Qyx0aGlzLmNvbW1vblN0cmluZ3M9UCx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1KLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1jZSx0aGlzLmxheW91dFNlcnZpY2U9ZmUsdGhpcy5uZ0NvbnRyb2xT''@;'; put 'put ''ZXJ2aWNlPUFlLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPUhlLHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goWS5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoWGU9Pnt0aGlzLmZvY3VzPVhlfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGkub3BlbkNoYW5nZS5zdWJz''@;'; put 'put ''Y3JpYmUoKCk9PnttLm1hcmtBc1RvdWNoZWQoKX0pKSxhKXtjb25zdCBYZT1yLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2EuaGFzQWN0aW9uQnV0dG9ucz1hLmlzUmFuZ2VQaWNrZXI9ImNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciI9PT1YZX19c2V0IHNob3dBY3Rpb25C''@;'; put 'put ''dXR0b25zKGUpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJiFlP2NvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSByYW5nZSBwaWNrZXIgcmVxdWlyZXMgYWN0aW9uIGJ1dHRvbnMsIFtzaG93QWN0aW9uQnV0dG9uc10gY2Fubm90IGJlIHR1cm5lZCBvZmYu''@;'; put 'put ''Iik6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9ucz1lfXNldCBjbHJQb3NpdGlvbihlKXtlJiZ5aFtlXSYmKHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9uPXloW2VdKX1zZXQgcmFuZ2VPcHRpb25zKGUpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRSYW5n''@;'; put 'put ''ZU9wdGlvbnMoZSl9c2V0IG1pbihlKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyPyh0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWluRGF0ZShlKSx0aGlzLmNsclN0YXJ0RGF0ZUlucHV0Py50cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpLHRoaXMuY2xyRW5k''@;'; put 'put ''RGF0ZUlucHV0Py50cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpKTpjb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgY29udGFpbmVyIFttaW5dIGlucHV0IG9ubHkgd29ya3MgZm9yIGRhdGUgcmFuZ2UgcGlja2Vycy4gVXNlIHRoZSBuYXRpdmUgYG1pbmAgYXR0cmlidXRlL3By''@;'; put 'put ''b3BlcnR5IGZvciBzaW5nbGUtZGF0ZSBpbnB1dHMuIil9c2V0IG1heChlKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyPyh0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShlKSx0aGlzLmNsclN0YXJ0RGF0ZUlucHV0Py50cmlnZ2VyQ29udHJvbElucHV0VmFs''@;'; put 'put ''aWRhdGlvbigpLHRoaXMuY2xyRW5kRGF0ZUlucHV0Py50cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpKTpjb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgY29udGFpbmVyIFttYXhdIGlucHV0IG9ubHkgd29ya3MgZm9yIGRhdGUgcmFuZ2UgcGlja2Vycy4gVXNlIHRoZSBuYXRp''@;'; put 'put ''dmUgYG1heGAgYXR0cmlidXRlL3Byb3BlcnR5IGZvciBzaW5nbGUtZGF0ZSBpbnB1dHMuIil9c2V0IGFjdGlvbkJ1dHRvbihlKXt0aGlzLnRvZ2dsZUJ1dHRvbj1lfWdldCBwb3BvdmVyUG9zaXRpb24oKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb259Z2V0IG9wZW4o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59Z2V0IGlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9Z2V0IGlzSW5wdXREYXRlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWR8''@;'; put 'put ''fHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLmRpc2FibGVkfWdldCBpc1JhbmdlUGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5kYXRlUmFu''@;'; put 'put ''Z2VTdHJ1Y3R1cmFsQ2hlY2tzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGU9PntlP3RoaXMuaW5pdGlhbGl6ZUNhbGVuZGFyKCk6KHRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmRh''@;'; put 'put ''dGVOYXZpZ2F0aW9uU2VydmljZS5yZXNldFNlbGVjdGVkRGF5KCkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGF0ZUNoYW5nZXMoKSl9Z2V0VG9nZ2xlQnV0dG9uTGFiZWwoZSl7aWYoZSl7Y29uc3Qgcj10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNw''@;'; put 'put ''bGF5Rm9ybWF0U3RyaW5nKGUudG9EYXRlKCkpO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbCx7U0VMRUNURURfREFURTpyfSl9cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWx9bGlzdGVuRm9yRGF0ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShrZih0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkpLnN1YnNjcmli''@;'; put 'put ''ZShlPT57aWYodGhpcy5pc0VuYWJsZWQpe2NvbnN0IHI9dGhpcy5nZXRUb2dnbGVCdXR0b25MYWJlbChlKSxpPXRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaSwiYXJpYS1sYWJlbCIsciksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoaSwidGl0bGUiLHIpfX0pfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluaXRpYWxpemVDYWxlbmRhcigpfWRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5j''@;'; put 'put ''bHJEYXRlSW5wdXQmJmNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsclN0YXJ0RGF0ZSBhbmQgY2xyRW5kRGF0ZSBpbnB1dHMiKSx0aGlzLmNsclN0YXJ0RGF0ZUlucHV0fHxjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUt''@;'; put 'put ''cmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJTdGFydERhdGUgaW5wdXQiKSx0aGlzLmNsckVuZERhdGVJbnB1dHx8Y29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyRW5kRGF0ZSBpbnB1dCIpKX19cmV0dXJuIG4uXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoVG8pLFdlKHppKSxXZShnYyksV2UodzIpLFdlKF9IKSxXZSgkdyksV2UobzUpLFdlKGZzKSxXZShadyksV2UoS3cpLFdlKHdoKSxXZSh2NCw4KSxXZShRMSksV2UoYmgpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxl''@;'; put 'put ''Y3RvcnM6W1siY2xyLWRhdGUtY29udGFpbmVyIl0sWyJjbHItZGF0ZS1yYW5nZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmKHNvKGksYkgsNSksc28oaSxicGUsNSksc28oaSxfcGUsNSkpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIuY2xy''@;'; put 'put ''RGF0ZUlucHV0PWEuZmlyc3QpLGRpKGE9aGkoKSkmJihyLmNsclN0YXJ0RGF0ZUlucHV0PWEuZmlyc3QpLGRpKGE9aGkoKSkmJihyLmNsckVuZERhdGVJbnB1dD1hLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLHIpe2lmKDEmZSYmV2Eob0dlLDUpLDImZSl7bGV0IGk7ZGkoaT1oaSgp''@;'; put 'put ''KSYmKHIuYWN0aW9uQnV0dG9uPWkuZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJjbHItZGF0ZS1jb250YWluZXIiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsci5pc0lucHV0RGF0ZURpc2FibGVkKSgiY2xyLWZvcm0tY29u''@;'; put 'put ''dHJvbCIsITApKCJjbHItcm93IixyLmFkZEdyaWQoKSl9LGlucHV0czp7c2hvd0FjdGlvbkJ1dHRvbnM6InNob3dBY3Rpb25CdXR0b25zIixjbHJQb3NpdGlvbjoiY2xyUG9zaXRpb24iLHJhbmdlT3B0aW9uczoicmFuZ2VPcHRpb25zIixtaW46Im1pbiIsbWF4OiJtYXgifSxzdGFuZGFsb25l''@;'; put 'put ''OiExLGZlYXR1cmVzOltzYShbXzIsbUEsd2gsWncsUTEsbzUsdzIsX0gsJHcsS3csYmhdKSxNZihbcjVdKSxJYV0sbmdDb250ZW50U2VsZWN0b3JzOmxHZSxkZWNsczoxNCx2YXJzOjE1LGNvbnN0czpbWyJhY3Rpb25CdXR0b24iLCIiXSxbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250''@;'; put 'put ''YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsclBvcG92ZXJBbmNob3IiLCIiLDEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLCJjbGFzcyIsImNsci1pbnB1dC1ncm91cC1pY29u''@;'; put 'put ''LWFjdGlvbiIsMywiZGlzYWJsZWQiLDQsIm5nSWYiXSxbImNka1RyYXBGb2N1cyIsIiIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3Nl''@;'; put 'put ''Il0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0''@;'; put 'put ''YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMSwiZGF0ZS1yYW5nZS1zZXBhcmF0b3IiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVk''@;'; put 'put ''Il0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2RrVHJhcEZvY3VzIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hl''@;'; put 'put ''Y2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYShzR2UpLEJyKDApLGN0KDEsY0dlLDEsMCwibGFiZWwiLDEpLHJlKDIsImRpdiIsMikoMywiZGl2Iiwz''@;'; put 'put ''KSg0LCJkaXYiLDQpLGN0KDUsdUdlLDUsMCwibmctY29udGFpbmVyIiwxKSxCcig2LDEpLGN0KDcsZEdlLDMsMSwiYnV0dG9uIiw1KSg4LGhHZSwxLDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsNiksaWUoKSxjdCg5LGZHZSwxLDAsImNkcy1pY29uIiw3KSgxMCxwR2UsMSwwLCJj''@;'; put 'put ''ZHMtaWNvbiIsOCksaWUoKSxjdCgxMSxnR2UsMSwwLCJuZy1jb250ZW50IiwxKSgxMixtR2UsMSwwLCJuZy1jb250ZW50IiwxKSgxMyx2R2UsMSwwLCJuZy1jb250ZW50IiwxKSxpZSgpKSwyJmUmJihhZSgpLHllKCJuZ0lmIiwhci5sYWJlbCYmci5hZGRHcmlkKCkpLGFlKCkseWUoIm5nQ2xh''@;'; put 'put ''c3MiLHIuY29udHJvbENsYXNzKCkpLGFlKDIpLGJyKCJjbHItZm9jdXMiLHIuZm9jdXMpLGFlKCkseWUoIm5nSWYiLHIuaXNSYW5nZVBpY2tlciksYWUoMikseWUoIm5nSWYiLHIuaXNFbmFibGVkKSxhZSgpLHllKCJjbHJQb3BvdmVyQ29udGVudCIsci5vcGVuKSgiY2xyUG9wb3ZlckNvbnRl''@;'; put 'put ''bnRBdCIsci5wb3BvdmVyUG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCksYWUoKSx5ZSgibmdJZiIsci5zaG93SW52YWxpZCksYWUoKSx5ZSgibmdJZiIsci5zaG93VmFsaWQpLGFl''@;'; put 'put ''KCkseWUoIm5nSWYiLHIuc2hvd0hlbHBlciksYWUoKSx5ZSgibmdJZiIsci5zaG93SW52YWxpZCksYWUoKSx5ZSgibmdJZiIsci5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltSdSxtYSxZdyxvQSxjQSxsQSxycyxwcyxFcGVdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFdYPSgoKT0+e2Ns''@;'; put 'put ''YXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWV9dmFsaWRhdGUoZSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCByPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhlLnZhbHVlKSxpPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNh''@;'; put 'put ''YmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksYT10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKHImJnI8aSlyZXR1cm57bWluOnttaW46aS50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ci50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKHIm''@;'; put 'put ''JnI+YSlyZXR1cm57bWF4OnttYXg6YS50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ci50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShvNSw4KSl9LG4uXHUwMjc1ZGlyPVdyKHt0''@;'; put 'put ''eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXSxbIiIsImNsclN0YXJ0RGF0ZSIsIiJdLFsiIiwiY2xyRW5kRGF0ZSIsIiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbe3Byb3ZpZGU6VDAsdXNlRXhpc3Rpbmc6bixtdWx0aTohMH1dKV19KSxufSkoKSxWSmU9KCgpPT57''@;'; put 'put ''Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe0hzLmFkZEljb25zKGYyLHAyLER3LFNVZSxNVWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSx2SCxoQSxOZix1''@;'; put 'put ''QSxOcyxkdSxwcGVdfSksbn0pKCk7bmV3IHdyKCJDbHJGaWxlTWVzc2FnZXNUZW1wbGF0ZUNvbnRleHQiKTtsZXQgakplPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXtIcy5hZGRJY29ucyh4VWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0s''@;'; put 'put ''bi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxOcyxkdSxkdV19KSxufSkoKSxUcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGR2e2NvbnN0cnVjdG9yKGUscixpLGEsYyl7c3VwZXIoYyxyLGUsaSksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9''@;'; put 'put ''Yyx0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKG09PnRoaXMuZm9jdXM9bSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZSh3aCksV2UodjQsOCksV2UoUTEpLFdlKFp3KSxXZShi''@;'; put 'put ''aCkpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiZzbyhpLEFwZSw1KSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLmlucHV0PWEuZmlyc3QpfX0s''@;'; put 'put ''aG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PXIuY29udHJvbD9udWxsOnIuY29udHJvbC5kaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHki''@;'; put 'put ''LHIuaW5wdXQucmVhZG9ubHkpKCJjbHItcm93IixyLmFkZEdyaWQoKSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtadyxiaCxRMSxfMix3aF0pLElhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q0dlLGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJv''@;'; put 'put ''bC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsxLCJjbHItaW5wdXQtZ3JvdXAtYWN0aW9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJjbGlj''@;'; put 'put ''ayIsImRpc2FibGVkIl0sWyJzaGFwZSIsIm1pbnVzIiwic2l6ZSIsInNtIl0sWzEsImNsci1udW1iZXItaW5wdXQtc2VwYXJhdG9yIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwic20iXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIs''@;'; put 'put ''InN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNs''@;'; put 'put ''YW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEod0dlKSxCcigwKSxjdCgxLFNHZSwxLDAsImxhYmVsIiwwKSxyZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxCcig1LDEpLHJlKDYsImRpdiIsNCkoNywiYnV0dG9uIiw1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHIuaW5wdXQuc3RlcERvd24oKX0pLFZ0KDgsImNkcy1pY29uIiw2KSxpZSgpLFZ0KDksImRpdiIsNykscmUoMTAsImJ1dHRvbiIsNSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByLmlucHV0LnN0ZXBVcCgpfSksVnQoMTEsImNkcy1pY29uIiw4KSxpZSgpKCkoKSxjdCgxMixN''@;'; put 'put ''R2UsMSwwLCJjZHMtaWNvbiIsOSkoMTMseEdlLDEsMCwiY2RzLWljb24iLDEwKSxpZSgpLGN0KDE0LEVHZSwxLDAsIm5nLWNvbnRlbnQiLDApKDE1LFRHZSwxLDAsIm5nLWNvbnRlbnQiLDApKDE2LEFHZSwxLDAsIm5nLWNvbnRlbnQiLDApLGllKCkpLDImZSYmKGFlKCkseWUoIm5nSWYiLCFy''@;'; put 'put ''LmxhYmVsJiZyLmFkZEdyaWQoKSksYWUoKSx5ZSgibmdDbGFzcyIsci5jb250cm9sQ2xhc3MoKSksYWUoMiksYnIoImNsci1mb2N1cyIsci5mb2N1cyksYWUoMykseWUoImRpc2FibGVkIixudWxsPT1yLmNvbnRyb2w/bnVsbDpyLmNvbnRyb2wuZGlzYWJsZWQpLGFlKDMpLHllKCJkaXNhYmxl''@;'; put 'put ''ZCIsbnVsbD09ci5jb250cm9sP251bGw6ci5jb250cm9sLmRpc2FibGVkKSxhZSgyKSx5ZSgibmdJZiIsci5zaG93SW52YWxpZCksYWUoKSx5ZSgibmdJZiIsci5zaG93VmFsaWQpLGFlKCkseWUoIm5nSWYiLHIuc2hvd0hlbHBlciksYWUoKSx5ZSgibmdJZiIsci5zaG93SW52YWxpZCksYWUo''@;'; put 'put ''KSx5ZSgibmdJZiIsci5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltSdSxtYSxycyxwc10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksQXBlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBodntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7aWYoc3VwZXIocixUcGUsaSxhLGMsbSksdGhpcy5mb2N1''@;'; put 'put ''c1NlcnZpY2U9ZSx0aGlzLmNvbnRyb2w9YSx0aGlzLmVsPW0sdGhpcy5pbmRleD0xLCFlKXRocm93IG5ldyBFcnJvcigiY2xyTnVtYmVySW5wdXQgcmVxdWlyZXMgYmVpbmcgd3JhcHBlZCBpbiA8Y2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+Iil9Z2V0IHJlYWRvbmx5KCl7cmV0dXJuIG51''@;'; put 'put ''bGwhPT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJyZWFkb25seSIpfXRyaWdnZXJGb2N1cygpeyF0aGlzLnJlYWRvbmx5JiZ0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5yZWFkb25s''@;'; put 'put ''eXx8KHN1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCksdGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPSExKSl9c3RlcFVwKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0ZXBVcCgpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVu''@;'; put 'put ''dCgiaW5wdXQiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSksdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpfXN0ZXBEb3duKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0ZXBEb3duKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2''@;'; put 'put ''ZW50KCJpbnB1dCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKFp3LDgpLFdlKE5uKSxXZShIbyksV2UocTEsMTApLFdl''@;'; put 'put ''KFRvKSxXZSh6aSkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezEmZSYma3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biByLnRyaWdnZXJGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIudHJpZ2dlclZhbGlkYXRpb24oKX0pLDImZSYmYnIoImNsci1pbnB1dCIsITApKCJjbHItbnVtYmVyLWlucHV0IiwhMCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLG59KSgpLHpKZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoZjIscDIsRVVlLFRVZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE9jLE5zLGR1LGR1XX0p''@;'; put 'put ''LG59KSgpO25ldyB3cih2b2lkIDApO2xldCBaSmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe0hzLmFkZEljb25zKEFVZSxrVWUsZjIscDIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUw''@;'; put 'put ''Mjc1aW5qPXpuKHtpbXBvcnRzOltGYSxPYyxOcyxkdSxkdV19KSxufSkoKSxaWD0oKCk9PntjbGFzcyBue25nT25Jbml0KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAy''@;'; put 'put ''NzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmc28oaSxwcyw3KSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLmxhYmVsPWEuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJjbHItcmFkaW8td3JhcHBlciIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbXzJdKV0sbmdDb250ZW50U2VsZWN0b3JzOkRHZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7''@;'; put 'put ''MSZlJiYobmEoa0dlKSxCcigwKSxCcigxLDEpLGN0KDIsSUdlLDEsMCwibGFiZWwiLDApKSwyJmUmJihhZSgyKSx5ZSgibmdJZiIsIXIubGFiZWwpKX0sZGVwZW5kZW5jaWVzOlttYSxwc10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWVg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGh2e2NvbnN0''@;'; put 'put ''cnVjdG9yKGUscixpLGEsYyl7c3VwZXIoZSxaWCxyLGksYSxjKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoTm4pLFdlKEhvKSxXZShxMSwxMCksV2UoVG8pLFdlKHppKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''ImNsclJhZGlvIiwiIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLG59KSgpLFlKZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZHZ7Y29uc3RydWN0b3IoZSxyLGksYSl7c3VwZXIoYSxlLHIsaSksdGhpcy5sYXlvdXRTZXJ2aWNlPWUsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPXIs''@;'; put 'put ''dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmlubGluZT0hMSx0aGlzLl9nZW5lcmF0ZWRJZD1QdSgpfWdldCBjbHJJbmxpbmUoKXtyZXR1cm4gdGhpcy5pbmxpbmV9c2V0IGNscklubGluZShlKXt0aGlzLmlubGluZT0ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGU/ImZhbHNlIiE9PWU6ISFlfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCksdGhpcy5zZXRBcmlhTGFiZWxsZWRCeSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnJhZGlvcy5sZW5ndGg/InJhZGlvZ3JvdXAiOm51bGx9c2V0QXJpYUxhYmVs''@;'; put 'put ''bGVkQnkoKXtjb25zdCBlPXRoaXMuZ3JvdXBMYWJlbD8ubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIik7ZT90aGlzLmFyaWFMYWJlbGxlZEJ5PXRoaXMucmFkaW9zLmxlbmd0aD9lOm51bGw6KHRoaXMuZ3JvdXBMYWJlbD8ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIix0''@;'; put 'put ''aGlzLl9nZW5lcmF0ZWRJZCksdGhpcy5hcmlhTGFiZWxsZWRCeT10aGlzLnJhZGlvcy5sZW5ndGg/dGhpcy5fZ2VuZXJhdGVkSWQ6bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHY0LDgpLFdlKHdoKSxXZShRMSksV2UoYmgpKX0sbi5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXJhZGlvLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiYoc28oaSxwcyw3LHppKSxzbyhpLFlYLDUpKSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLmdyb3VwTGFiZWw9YS5maXJz''@;'; put 'put ''dCksZGkoYT1oaSgpKSYmKHIucmFkaW9zPWEpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJihScigicm9sZSIsci5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixyLmFyaWFMYWJlbGxlZEJ5KSxicigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1j''@;'; put 'put ''b250cm9sLWRpc2FibGVkIixudWxsPT1yLmNvbnRyb2w/bnVsbDpyLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixyLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW1ExLGJoLHdoLHN2XSksSWFdLG5nQ29u''@;'; put 'put ''dGVudFNlbGVjdG9yczpMR2UsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFz''@;'; put 'put ''cyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1''@;'; put 'put ''Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJz''@;'; put 'put ''dWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKFJHZSksQnIoMCksY3QoMSxPR2UsMSwwLCJsYWJlbCIsMCkscmUoMiwiZGl2IiwxKSxCcigzLDEpLGN0KDQsUEdlLDIsMCwiZGl2IiwyKSg1''@;'; put 'put ''LEJHZSw1LDQsImRpdiIsMiksaWUoKSksMiZlJiYoYWUoKSx5ZSgibmdJZiIsIXIubGFiZWwmJnIuYWRkR3JpZCgpKSxhZSgpLGJyKCJjbHItY29udHJvbC1pbmxpbmUiLHIuY2xySW5saW5lKSx5ZSgibmdDbGFzcyIsci5jb250cm9sQ2xhc3MoKSksYWUoMikseWUoIm5nSWYiLHIuc2hvd0hl''@;'; put 'put ''bHBlciksYWUoKSx5ZSgibmdJZiIsci5zaG93VmFsaWR8fHIuc2hvd0ludmFsaWQpKX0sZGVwZW5kZW5jaWVzOltSdSxtYSxwcyxyc10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksR0plPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXtIcy5hZGRJY29ucyhmMixwMil9fXJldHVybiBuLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLGR1LGhBLE5zLGR1XX0pLG59KSgpLCRKZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoZjIscDIpfX1y''@;'; put 'put ''ZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxkdSxoQSxOcyxkdV19KSxufSkoKSxYdz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZHZ7Y29uc3RydWN0b3IoZSxy''@;'; put 'put ''LGksYSl7c3VwZXIoYSxlLHIsaSksdGhpcy5sYXlvdXRTZXJ2aWNlPWUsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPXIsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLm11bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25z''@;'; put 'put ''LnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShlPT57ZSYmKHRoaXMubXVsdGk9ZS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgQlQsdGhpcy5jb250cm9sPWUpfSkpfXdyYXBwZXJDbGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlz''@;'; put 'put ''ZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHY0LDgpLFdlKHdoKSxXZShRMSksV2UoYmgpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1j''@;'; put 'put ''b250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmc28oaSxCVCw1KSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLm11bHRpcGxlPWEuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJjbHItZm9ybS1j''@;'; put 'put ''b250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PXIuY29udHJvbD9udWxsOnIuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLHIuYWRkR3JpZCgpKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW2JoLFExLF8yLHdoXSksSWFdLG5nQ29udGVudFNlbGVj''@;'; put 'put ''dG9yczp6R2UsZGVjbHM6MTAsdmFyczo4LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIs''@;'; put 'put ''ImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGUscil7MSZlJiYobmEoakdlKSxCcigwKSxjdCgxLFVHZSwxLDAsImxhYmVsIiwwKSxyZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksQnIoNCwxKSxjdCg1LFdHZSwxLDAsImNkcy1pY29uIiwzKSg2LFpHZSwxLDAsImNkcy1pY29uIiw0KSxpZSgpLGN0KDcsWUdlLDEsMCwibmct''@;'; put 'put ''Y29udGVudCIsMCkoOCxHR2UsMSwwLCJuZy1jb250ZW50IiwwKSg5LCRHZSwxLDAsIm5nLWNvbnRlbnQiLDApLGllKCkpLDImZSYmKGFlKCkseWUoIm5nSWYiLCFyLmxhYmVsJiZyLmFkZEdyaWQoKSksYWUoKSx5ZSgibmdDbGFzcyIsci5jb250cm9sQ2xhc3MoKSksYWUoKSx5ZSgibmdDbGFz''@;'; put 'put ''cyIsci53cmFwcGVyQ2xhc3MoKSksYWUoMikseWUoIm5nSWYiLHIuc2hvd0ludmFsaWQpLGFlKCkseWUoIm5nSWYiLHIuc2hvd1ZhbGlkKSxhZSgpLHllKCJuZ0lmIixyLnNob3dIZWxwZXIpLGFlKCkseWUoIm5nSWYiLHIuc2hvd0ludmFsaWQpLGFlKCkseWUoIm5nSWYiLHIuc2hvd1ZhbGlk''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbUnUsbWEscnMscHNdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLG12PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBodntjb25zdHJ1Y3RvcihlLHIsaSxhLGMpe3N1cGVyKGUsWHcscixpLGEsYyksdGhpcy5pbmRleD0xfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShObiksV2UoSG8pLFdlKHExLDEwKSxXZShUbyksV2UoemkpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyU2VsZWN0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigi''@;'; put 'put ''Y2xyLXNlbGVjdCIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxufSkoKSxLSmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe0hzLmFkZEljb25zKGYyLHAyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9k''@;'; put 'put ''PUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsT2MsTnMsZHUsZHVdfSksbn0pKCksa3BlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBkdnt9cmV0dXJuIG4uXHUwMjc1ZmFjPSgoKT0+e2xldCB0O3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4odHx8KHQ9S3MobikpKShy''@;'; put 'put ''fHxuKX19KSgpLG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10ZXh0YXJlYS1jb250YWluZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJs''@;'; put 'put ''ZWQiLG51bGw9PXIuY29udHJvbD9udWxsOnIuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLHIuYWRkR3JpZCgpKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW2JoLFExLF8yLHdoXSksSWFdLG5nQ29udGVudFNlbGVjdG9yczpYR2UsZGVjbHM6MTAsdmFyczo3LGNvbnN0czpbWzQs''@;'; put 'put ''Im5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2Vy''@;'; put 'put ''IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5h''@;'; put 'put ''KEtHZSksQnIoMCksY3QoMSxxR2UsMSwwLCJsYWJlbCIsMCkscmUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLEJyKDQsMSksY3QoNSxKR2UsMSwwLCJjZHMtaWNvbiIsMykoNixRR2UsMSwwLCJjZHMtaWNvbiIsNCksaWUoKSxjdCg3LGUkZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsdCRlLDEsMCwi''@;'; put 'put ''bmctY29udGVudCIsMCkoOSxuJGUsMSwwLCJuZy1jb250ZW50IiwwKSxpZSgpKSwyJmUmJihhZSgpLHllKCJuZ0lmIiwhci5sYWJlbCYmci5hZGRHcmlkKCkpLGFlKCkseWUoIm5nQ2xhc3MiLHIuY29udHJvbENsYXNzKCkpLGFlKDMpLHllKCJuZ0lmIixyLnNob3dJbnZhbGlkKSxhZSgpLHll''@;'; put 'put ''KCJuZ0lmIixyLnNob3dWYWxpZCksYWUoKSx5ZSgibmdJZiIsci5zaG93SGVscGVyKSxhZSgpLHllKCJuZ0lmIixyLnNob3dJbnZhbGlkKSxhZSgpLHllKCJuZ0lmIixyLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1J1LG1hLHJzLHBzXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx3SD0o''@;'; put 'put ''KCk9PntjbGFzcyBuIGV4dGVuZHMgaHZ7Y29uc3RydWN0b3IoZSxyLGksYSxjKXtzdXBlcihlLGtwZSxyLGksYSxjKSx0aGlzLmluZGV4PTF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKE5uKSxXZShIbyksV2UocTEsMTApLFdlKFRvKSxXZSh6''@;'; put 'put ''aSkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImNsci10ZXh0YXJlYSIsITApfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxufSkoKSxY''@;'; put 'put ''SmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe0hzLmFkZEljb25zKGYyLHAyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsT2MsTnMsZHUsZHVd''@;'; put 'put ''fSksbn0pKCksRHBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLGR1LFFxZSxpSmUsVkplLGpKZSxjcGUsWkplLEdKZSxLSmUs''@;'; put 'put ''WEplLCRKZSxhSmUsekplXX0pLG59KSgpLElwZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYV19KSxufSkoKSxxSmU9KCgpPT57''@;'; put 'put ''Y2xhc3MgbiBleHRlbmRzIHVYe2NvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMsUCxZKXtzdXBlcihlLHIsaSxhLGMsbSxDLFAsWSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHppKSxXZShjWCw4KSxXZShYcyw4KSxXZShKYSksV2UoTm4pLFdl''@;'; put 'put ''KGxYLDgpLFdlKEl3KSxXZShySCksV2UoRnMpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxufSkoKSxKSmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7fSksbn0pKCksUUplPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSks''@;'; put 'put ''bi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhXX0pLG59KSgpO2NsYXNzIENIe31sZXQgX0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyB1cn1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUo''@;'; put 'put ''KX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRoaXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFj''@;'; put 'put ''dG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGo2PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdGF0ZURlYm91bmNlcj1lLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyB1cix0aGlzLnByZXZlbnRFbWl0PSEx''@;'; put 'put ''LHRoaXMuX3NpemVDaGFuZ2U9bmV3IHVyfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoZSl7Y29uc3Qgcj10aGlzLl9zaXplO2UhPT1yJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9ZSx0aGlzLl9j''@;'; put 'put ''dXJyZW50PTA9PT1lPzE6TWF0aC5mbG9vcihyL2UqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURv''@;'; put 'put ''bmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8MH1zZXQgdG90YWxJdGVtcyhlKXt0aGlzLl90b3RhbEl0ZW1zPWUsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGUpe3RoaXMuX2xhc3Q9ZX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2Vy''@;'; put 'put ''dmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoZSl7ZSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0''@;'; put 'put ''KCksdGhpcy5fY3VycmVudD1lLHRoaXMuX2NoYW5nZS5uZXh0KGUpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1n''@;'; put 'put ''ZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVybiB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgZT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGU9TWF0aC5taW4oZSx0aGlzLnRv''@;'; put 'put ''dGFsSXRlbXMtMSkpLGV9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMuY3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoZT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1lLHRoaXMuc2l6ZT0wfX1yZXR1cm4gbi5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcihfQSkpfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHM1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9wYWdlPWUsdGhpcy5zdGF0ZURlYm91bmNl''@;'; put 'put ''cj1yLHRoaXMuX2NoYW5nZT1uZXcgdXIsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmV9b2YgdGhpcy5fYWxsKWlmKGUmJmUuaXNBY3RpdmUoKSlyZXR1cm4hMDty''@;'; put 'put ''ZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgZT1bXTtmb3IoY29uc3R7ZmlsdGVyOnJ9b2YgdGhpcy5fYWxsKXImJnIuaXNBY3RpdmUoKSYmZS5wdXNoKHIpO3JldHVybiBlfWFkZChlKXtjb25zdCByPWUuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1p''@;'; put 'put ''dEZpbHRlckNoYW5nZShbZV0pKTtsZXQgaT0hMTtjb25zdCBhPW5ldyBTSChlLCgpPT57aWYoaSlyZXR1cm47ci51bnN1YnNjcmliZSgpO2NvbnN0IGM9dGhpcy5fYWxsLmZpbmRJbmRleChtPT5tLmZpbHRlcj09PWUpO2M+PTAmJnRoaXMuX2FsbC5zcGxpY2UoYywxKSxlLmlzQWN0aXZlKCkm''@;'; put 'put ''JnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaT0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChhKSxlLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbZV0pLGF9YWNjZXB0cyhlKXtmb3IoY29uc3R7ZmlsdGVyOnJ9b2YgdGhpcy5f''@;'; put 'put ''YWxsKWlmKHImJnIuaXNBY3RpdmUoKSYmIXIuYWNjZXB0cyhlKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChlKSx0''@;'; put 'put ''aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoT3IoajYpLE9yKF9BKSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7Y2xhc3MgU0h7Y29uc3Ry''@;'; put 'put ''dWN0b3IodCxlKXt0aGlzLmZpbHRlcj10LHRoaXMudW5yZWdpc3Rlcj1lfX1sZXQgTUg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmZpbHRlcnM9ZX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGUpe3RoaXMuZGVsZXRlRmlsdGVyKCksZSBpbnN0YW5jZW9mIFNIP3RoaXMucmVnaXN0ZXJlZD1lOmUmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChlKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYo''@;'; put 'put ''dGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoczUpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzdGFuZGFsb25lOiExfSksbn0pKCk7Y2xhc3MgUnBl''@;'; put 'put ''e2NvbnN0cnVjdG9yKHQpe3RoaXMudXRpbHM9dH1rZXlVcCh0KXtjb25zdCBlPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHModCk7aWYoMD09PXQueSlyZXR1cm4gZTtlLnk9dC55LTE7Y29uc3Qgcj10aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbCh0KTtyZXR1cm4gdGhpcy51dGlscy5p''@;'; put 'put ''c1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhlLnkpJiYhciYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KT9lLng9MDp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpJiYocj9lLnk9ZS55LTE6ZS54PWUueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudCh0LnkpKSxlfWtleURvd24odCl7''@;'; put 'put ''Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpO2lmKHQueT49KHRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCkpcmV0dXJuIGU7Y29uc3QgaT10aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbCh0KTtyZXR1cm4gZS55PXQueSsxLCFpJiZ0aGlz''@;'; put 'put ''LnV0aWxzLmlzUm93UmVwbGFjZWQoZS55KSYmKGUueT1lLnkrMSxlLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhlLnkpPzA6ZS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSkpLGV9a2V5TGVmdCh0KXtjb25zdCBlPXRoaXMudXRpbHMuY3JlYXRlTmV4dENl''@;'; put 'put ''bGxDb29yZHModCk7cmV0dXJuIDA9PT10Lnh8fChlLng9dC54LTEpLGV9a2V5UmlnaHQodCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpLHI9dGhpcy51dGlscy5yb3dzPy5sZW5ndGgtMT90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7''@;'; put 'put ''cmV0dXJuIGUueD10Lng8cj9lLngrMTplLngsZX1rZXlFbmQodCxlKXtjb25zdCByPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHModCksaT10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0dXJuIHIueD1pP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JS''@;'; put 'put ''b3coMCkubGVuZ3RoLTE6MCxlJiYoci55PWksdGhpcy51dGlscy5pc0RldGFpbHNSb3coci55KSYmKHIueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KHIueSkubGVuZ3RoLTEpKSxyfWtleUhvbWUodCxlKXtjb25zdCByPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHModCk7cmV0''@;'; put 'put ''dXJuIHIueD0wLGUmJihyLnk9MCkscn1rZXlQYWdlVXAodCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpLHI9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGUueT10Lnktcj4wP3QueS1yKzE6MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbCh0KT90aGlz''@;'; put 'put ''LnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpJiYoZS55PWUueS0xKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpP2UueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGUueSk/MDplLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQodC55KTp0aGlzLnV0aWxzLmlzUm93''@;'; put 'put ''UmVwbGFjZWQoZS55KSYmKGUueT1lLnkrMSxlLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhlLnkpPzA6ZS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSkpLGV9a2V5UGFnZURvd24odCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRz''@;'; put 'put ''KHQpLHI9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGk9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGUueT10LnkraT49cj9yOnQueStpLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKHQpJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpP2UueT1l''@;'; put 'put ''LnktMTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpJiZ0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGUueSk/ZS54PTA6dGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KT9lLng9ZS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSk6dGhpcy51dGlscy5pc1Jv''@;'; put 'put ''d1JlcGxhY2VkKGUueSkmJihlLnk9ZS55KzEsZS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coZS55KT8wOmUueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudCh0LnkpKSxlfX1jbGFzcyBMcGUgZXh0ZW5kcyBScGV7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9a2V5VXAo''@;'; put 'put ''dCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpO2lmKDA9PT10LnkpcmV0dXJuIGU7aWYoZS55PXQueS0xLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKHQpKXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSkmJmUueT4wJiYoZS55PWUueS0xKTtlbHNlIHN3aXRj''@;'; put 'put ''aCh0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQodC55KSYmKGUueT1lLnktMSksITApe2Nhc2UgdGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KTplLng9MDticmVhaztjYXNlITE9PT10aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpOmUueD10Lng7YnJlYWs7ZGVmYXVsdDplLng9dGhpcy51''@;'; put 'put ''dGlscy5hY3Rpb25DZWxsQ291bnQoZS55KX1yZXR1cm4gZX1rZXlEb3duKHQpe2NvbnN0IGU9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3Jkcyh0KSxyPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MDtyZXR1cm4gdC55Pj1yfHwoZS55PXQueSsxLHRoaXMu''@;'; put 'put ''dXRpbHMuaXNBY3Rpb25DZWxsKHQpP2UueT1lLnk8cj9lLnkrMTplLnk6KHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChlLnkpJiYoZS55PWUueSsxKSxlLng9dGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KT8wOnRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGUueSkpKSxlfWtleUxlZnQo''@;'; put 'put ''dCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpO3JldHVybiB0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQodC55KT8oMCE9PXQueD9lLng9dC54LTE6dGhpcy51dGlscy5pc0FjdGlvbkNlbGwodCl8fChlLnk9''@;'; put 'put ''dC55LTEsZS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGUueSktMSksZSk6c3VwZXIua2V5TGVmdCh0KX1rZXlSaWdodCh0KXtjb25zdCBlPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHModCk7aWYoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSkmJiF0aGlzLnV0aWxz''@;'; put 'put ''LmlzUm93UmVwbGFjZWQodC55KSlyZXR1cm4gc3VwZXIua2V5UmlnaHQodCk7Y29uc3Qgcj10aGlzLnV0aWxzLnJvd3M/Lmxlbmd0aC0xP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gdC54Pj1yfHwodGhpcy51dGlscy5pc0FjdGlvbkNlbGwodCkmJnQu''@;'; put 'put ''eD09PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueCktMSYmdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKHQueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpPyhlLnk9dC55KzEsZS54PTApOmUueD10LngrMSksZX1rZXlFbmQodCxlKXtjb25zdCByPXRoaXMudXRpbHMuY3Jl''@;'; put 'put ''YXRlTmV4dENlbGxDb29yZHModCk7cmV0dXJuIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSkmJiF0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQodC55KXx8ZT9zdXBlci5rZXlFbmQodCxlKTooci54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3codC55KS5sZW5ndGgtMSxyKX1rZXlIb21l''@;'; put 'put ''KHQsZSl7Y29uc3Qgcj10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpO3JldHVybiB0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQodC55KT8oci54PTAsci55PXQueS0xLGUmJihyLnk9MCkscik6c3VwZXIua2V5SG9tZSh0LGUp''@;'; put 'put ''fWtleVBhZ2VVcCh0KXtjb25zdCBlPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHModCkscj10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gZS55PXQueS1yPjA/dC55LXIrMToxLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKHQpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUu''@;'; put 'put ''eSkmJihlLnk9ZS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChlLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSl8fChlLnk9ZS55KzEsZS54PTApOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KHQueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KSYmKHRoaXMudXRpbHMu''@;'; put 'put ''aXNEZXRhaWxzUm93KGUueSl8fChlLng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoZS55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSkmJihlLng9MCksZX1rZXlQYWdlRG93bih0KXtjb25zdCBlPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHModCkscj10aGlzLnV0''@;'; put 'put ''aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaT10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gZS55PXQueStpPj1yP3I6dC55K2ksdGhpcy51dGlscy5pc0FjdGlvbkNlbGwodCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KSYmKGUueT1lLnktMSk6dGhpcy51''@;'; put 'put ''dGlscy5pc1Jvd1JlcGxhY2VkKGUueSk/ZS55PHImJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpJiYoZS55PWUueSsxKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KT9lLng9dC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENv''@;'; put 'put ''dW50KGUueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KSYmKGUueD0wKSxlfX1jbGFzcyBlUWUgZXh0ZW5kcyBMcGV7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9a2V5VXAodCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpO2lmKDA9PT10LnkpcmV0dXJu''@;'; put 'put ''IGU7aWYoZS55PXQueS0xLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coZS55KSlyZXR1cm4gc3VwZXIua2V5VXAodCk7Y29uc3Qgcj10aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbCh0KTtyZXR1cm4gciYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KT9lLnk9ZS55LTE6dGhp''@;'; put 'put ''cy51dGlscy5pc1Jvd1JlcGxhY2VkKGUueSk/KGUueT1lLnktMSx0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpfHwoZS54PXQueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpKSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3codC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93''@;'; put 'put ''KGUueSk/ZS54PXQueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpOiFyJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpJiYoZS54PXQueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudCh0LnkpKSxlfWtleURvd24odCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRD''@;'; put 'put ''ZWxsQ29vcmRzKHQpLHI9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGk9cj90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIHQueT49cj9lOihlLnk9dC55KzEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhl''@;'; put 'put ''LnkpP3N1cGVyLmtleURvd24odCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKHQpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoZS55KT9lLnk9ZS55PHI/ZS55KzE6ZS55LTE6ZS54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3codC55KS5sZW5ndGg+aT90LngtdGhpcy51dGlscy5hY3Rp''@;'; put 'put ''b25DZWxsQ291bnQodC55KTp0LngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoZS55KSxlKSl9a2V5TGVmdCh0KXtyZXR1cm4gc3VwZXIua2V5TGVmdCh0KX1rZXlSaWdodCh0KXtyZXR1cm4gc3VwZXIua2V5UmlnaHQodCl9a2V5RW5kKHQsZSl7cmV0dXJuIHN1cGVyLmtleUVuZCh0LGUp''@;'; put 'put ''fWtleUhvbWUodCxlKXtyZXR1cm4gc3VwZXIua2V5SG9tZSh0LGUpfWtleVBhZ2VVcCh0KXtjb25zdCBlPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHModCkscj10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gZS55PXQueS1yPjA/dC55LXIrMToxLHRoaXMudXRpbHMuaXNT''@;'; put 'put ''aW5nbGVDZWxsRXhwYW5kZWRSb3coZS55KT9zdXBlci5rZXlQYWdlVXAodCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKHQpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSkmJihlLnk9ZS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChlLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxz''@;'; put 'put ''Um93KGUueSl8fChlLnk9ZS55KzEsZS54PXQueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyh0LnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coZS55KT9lLng9dC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGUueSk6dGhp''@;'; put 'put ''cy51dGlscy5pc0RldGFpbHNSb3coZS55KSYmKGUueD10LngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQodC55KSksZSl9a2V5UGFnZURvd24odCl7Y29uc3QgZT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKHQpLHI9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5s''@;'; put 'put ''ZW5ndGgtMTowLGk9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGUueT10LnkraT49cj9yOnQueStpLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coZS55KT9zdXBlci5rZXlQYWdlRG93bih0KToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwodCk/dGhpcy51dGlscy5p''@;'; put 'put ''c0RldGFpbHNSb3coZS55KSYmKGUueT1lLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGUueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhlLnkpP2UueTxyJiYoZS55PWUueSsxLGUueD10LngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoZS55KSk6dGhpcy51dGlscy5pc0Rl''@;'; put 'put ''dGFpbHNSb3codC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSk/ZS54PXQueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChlLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGUueSkmJihlLng9dC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KHQueSkpLGUpfX1jbGFz''@;'; put 'put ''cyB0UWV7Y29uc3RydWN0b3IodCxlKXt0aGlzLmhvc3Q9dCx0aGlzLmNvbmZpZz1lfWdldCBncmlkKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3Rvcih0aGlzLmNvbmZpZy5rZXlHcmlkKX1nZXQgcm93cygpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5j''@;'; put 'put ''b25maWcua2V5R3JpZFJvd3MpfWdldCBjZWxscygpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1nZXQgY3VycmVudENlbGxDb29yZGluYXRlcygpe2NvbnN0IHQ9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZp''@;'; put 'put ''bmQoaT0+IjAiPT09aS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGwsZT10P3QuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyk6bnVsbDtyZXR1cm57eDplJiZ0P0FycmF5LmZyb20oZS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpLmluZGV4''@;'; put 'put ''T2YodCk6MCx5OmUmJnQmJnRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93cykuaW5kZXhPZihlKTowfX1nZXQgaXRlbXNQZXJQYWdlKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNs''@;'; put 'put ''aWVudEhlaWdodCktMXx8MH1nZXROZXh0SXRlbUNvb3JkaW5hdGUodCl7Y29uc3QgZT10aGlzLmN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMscj10aGlzLmdldE5hdlN0cmF0ZWd5KGUpO3N3aXRjaCh0LmtleSl7Y2FzZSBoYS5BcnJvd1VwOnJldHVybiByLmtleVVwKGUpO2Nhc2UgaGEuQXJyb3dE''@;'; put 'put ''b3duOnJldHVybiByLmtleURvd24oZSk7Y2FzZSJydGwiPT09dGhpcy5ob3N0LmRpcj9oYS5BcnJvd1JpZ2h0OmhhLkFycm93TGVmdDpyZXR1cm4gci5rZXlMZWZ0KGUpO2Nhc2UicnRsIj09PXRoaXMuaG9zdC5kaXI/aGEuQXJyb3dMZWZ0OmhhLkFycm93UmlnaHQ6cmV0dXJuIHIua2V5Umln''@;'; put 'put ''aHQoZSk7Y2FzZSBoYS5Ib21lOnJldHVybiByLmtleUhvbWUoZSx0LmN0cmxLZXkpO2Nhc2UgaGEuRW5kOnJldHVybiByLmtleUVuZChlLHQuY3RybEtleSk7Y2FzZSBoYS5QYWdlVXA6cmV0dXJuIHIua2V5UGFnZVVwKGUpO2Nhc2UgaGEuUGFnZURvd246cmV0dXJuIHIua2V5UGFnZURvd24o''@;'; put 'put ''ZSk7ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Q2VsbHNGb3JSb3codCl7cmV0dXJuIHRoaXMucm93c1t0XS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9aXNFeHBhbmRlZFJvdyh0KXtjb25zdCBlPXRoaXMucm93c1t0XS5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQt''@;'; put 'put ''cm93LWRldGFpbCIpO3JldHVybiEhZSYmIm5vbmUiIT09ZS5zdHlsZS5kaXNwbGF5fWlzRGV0YWlsc1Jvdyh0KXtyZXR1cm4gdGhpcy5yb3dzW3RdLmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtcm93LWRldGFpbCIpfWlzUm93UmVwbGFjZWQodCl7cmV0dXJuISF0aGlzLnJvd3NbdF0u''@;'; put 'put ''Y2xvc2VzdCgiY2xyLWRnLXJvdy5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKX1pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyh0KXtyZXR1cm4gMT09PXRoaXMucm93c1t0XT8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpLmxlbmd0aH1hY3Rpb25DZWxsQ291bnQodCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KHQpLmxlbmd0aH1hY3Rpb25DZWxsc0FzQXJyYXkodCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5yb3dzW3RdLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jZWxsLCAuZGF0YWdyaWQtcm93LXN0''@;'; put 'put ''aWNreSAuZGF0YWdyaWQtY29sdW1uIikpfWlzQWN0aW9uQ2VsbCh0KXtyZXR1cm4hIXRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KHQueSlbdC54XX1jcmVhdGVOZXh0Q2VsbENvb3Jkcyh0KXtyZXR1cm57eDp0LngseTp0Lnl9fWdldE5hdlN0cmF0ZWd5KHQpe3N3aXRjaCghMCl7Y2FzZSB0aGlz''@;'; put 'put ''LmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KHQueSk6cmV0dXJuIG5ldyBMcGUodGhpcyk7Y2FzZSB0aGlzLmlzRGV0YWlsc1Jvdyh0LnkpOmNhc2UgdGhpcy5pc0V4cGFuZGVkUm93KHQueSk6cmV0dXJuIG5ldyBlUWUodGhpcyk7ZGVmYXVsdDpyZXR1cm4gbmV3IFJwZSh0aGlzKX19fWNvbnN0''@;'; put 'put ''IE9wZT1bImFbaHJlZl0iLCJhcmVhW2hyZWZdIiwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pIiwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKSIsInNlbGVjdDpub3QoW2Rpc2FibGVkXSkiLCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSkiLCJpZnJhbWUiLCJvYmplY3QiLCJlbWJlZCIsIltjb250ZW50''@;'; put 'put ''ZWRpdGFibGU9dHJ1ZV0iLCJbcm9sZT1idXR0b25dOm5vdChbZGlzYWJsZWRdKSJdO2Z1bmN0aW9uIHJRZShuKXtjb25zdCB0PU9wZS5qb2luKCIsIik7cmV0dXJuIG4ubWF0Y2hlcyh0KX1sZXQgeEg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnpvbmU9ZSx0aGlzLnNraXBJ''@;'; put 'put ''dGVtRm9jdXM9ITEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyB1cix0aGlzLl9hY3RpdmVDZWxsPW51bGwsdGhpcy5jb25maWc9e2tleUdyaWRSb3dzOidbcm9sZT1yb3ddOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXIpOm5vdChbc3R5bGUqPSJkaXNwbGF5OiBu''@;'; put 'put ''b25lIl0pJyxrZXlHcmlkQ2VsbHM6Iltyb2xlPWdyaWRjZWxsXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIFtyb2xlPWNvbHVtbmhlYWRlcl06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlk''@;'; put 'put ''LXBsYWNlaG9sZGVyLWNvbnRlbnQpLCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IixrZXlHcmlkOiJbcm9sZT1ncmlkXSJ9fW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8''@;'; put 'put ''fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntPZih0aGlzLmtleU5hdlV0aWxzLmdyaWQsIm1vdXNlZG93biIpLnBpcGUoJDEodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShlPT57aWYoMT09PWUuYnV0dG9ucyYmIWUuY3RybEtleSl7Y29uc3Qgcj10aGlzLmtleU5hdlV0aWxz''@;'; put 'put ''LmNlbGxzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5jZWxscykuZmluZChpPT5pPT09ZS50YXJnZXR8fGk9PT1lLnRhcmdldC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpOm51bGw7ciYmdGhpcy5zZXRBY3RpdmVDZWxsKHIse2tlZXBGb2N1czpyUWUoZS50YXJnZXQp''@;'; put 'put ''fSl9fSksT2YodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJ3aGVlbCIpLnBpcGUoJDEodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSksT2YodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJmb2N1c291dCIpLnBpcGUodHYoMCksJDEodGhpcy5kZXN0''@;'; put 'put ''cm95JCkpLnN1YnNjcmliZSgoKT0+e3RoaXMua2V5TmF2VXRpbHMuZ3JpZC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dGhpcy5yZW1vdmVBY3RpdmVDZWxsKCl9KSxPZih0aGlzLmtleU5hdlV0aWxzLmdyaWQsImtleWRvd24iKS5waXBlKCQxKHRoaXMuZGVzdHJveSQpKS5z''@;'; put 'put ''dWJzY3JpYmUoZT0+e2lmKCghZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkcmFnLWhhbmRsZSIpfHxlLmtleSE9PWhhLkFycm93TGVmdCYmZS5rZXkhPT1oYS5BcnJvd1JpZ2h0KSYmKGUua2V5PT09aGEuQXJyb3dVcHx8ZS5rZXk9PT1oYS5BcnJvd0Rvd258fGUua2V5PT09aGEuQXJy''@;'; put 'put ''b3dMZWZ0fHxlLmtleT09PWhhLkFycm93UmlnaHR8fGUua2V5PT09aGEuRW5kfHxlLmtleT09PWhhLkhvbWV8fGUua2V5PT09aGEuUGFnZVVwfHxlLmtleT09PWhhLlBhZ2VEb3duKSl7Y29uc3Qgcj10aGlzLmtleU5hdlV0aWxzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShlKSxpPXRoaXMua2V5''@;'; put 'put ''TmF2VXRpbHMucm93cz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuZ2V0Q2VsbHNGb3JSb3coci55KSlbci54XTpudWxsO2kmJnRoaXMuc2V0QWN0aXZlQ2VsbChpKSxlLnByZXZlbnREZWZhdWx0KCl9fSl9KSx0aGlzLmxpc3RlbmVyc0FkZGVkPSEwKX1pbml0aWFsaXplS2V5R3JpZChl''@;'; put 'put ''KXt0aGlzLmtleU5hdlV0aWxzPW5ldyB0UWUoZSx0aGlzLmNvbmZpZyksdGhpcy5hZGRMaXN0ZW5lcnMoKSx0aGlzLnJlc2V0S2V5R3JpZCgpfXJlc2V0S2V5R3JpZCgpe3RoaXMua2V5TmF2VXRpbHMuY2VsbHM/LmZvckVhY2gocj0+ci5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSks''@;'; put 'put ''KHRoaXMua2V5TmF2VXRpbHMuY2VsbHM/dGhpcy5rZXlOYXZVdGlscy5jZWxsc1swXTpudWxsKT8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKX1yZW1vdmVBY3RpdmVDZWxsKCl7dGhpcy5fYWN0aXZlQ2VsbD1udWxsfWdldEFjdGl2ZUNlbGwoKXtyZXR1cm4gdGhpcy5fYWN0aXZlQ2Vs''@;'; put 'put ''bH1zZXRBY3RpdmVDZWxsKGUse2tlZXBGb2N1czpyfT17a2VlcEZvY3VzOiExfSl7Y29uc3QgaT10aGlzLmtleU5hdlV0aWxzLmNlbGxzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5jZWxscykuZmluZChhPT4iMCI9PT1hLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbDtpZihp''@;'; put 'put ''JiZpLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9hY3RpdmVDZWxsPWUsIXRoaXMuc2tpcEl0ZW1Gb2N1cyYmIXIpe2xldCBhO2lmKCJjb2x1bW5oZWFkZXIiPT09ZS5nZXRBdHRyaWJ1dGUoInJvbGUiKSlhPWU7ZWxz''@;'; put 'put ''ZXtjb25zdCBjPWZ1bmN0aW9uIG5RZShuKXtjb25zdCBlPVsuLi5PcGUsJ1t0YWJpbmRleD0iMCJdOm5vdChbZGlzYWJsZWRdKSddLmpvaW4oIiwiKTtyZXR1cm4gQXJyYXkuZnJvbShuLnF1ZXJ5U2VsZWN0b3JBbGwoZSkpfShlKTthPWMubGVuZ3RoP2NbMF06ZX1hLmZvY3VzKCl9fX1yZXR1''@;'; put 'put ''cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcihKYSkpfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGJBPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBNSHtjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7c3VwZXIo''@;'; put 'put ''ZSksdGhpcy5jb21tb25TdHJpbmdzPXIsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9aSx0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmVsZW1lbnRSZWY9Yyx0aGlzLmtleU5hdmlnYXRpb249bSx0aGlzLm9wZW5DaGFuZ2U9bmV3IFlyKCExKSx0aGlzLmFyaWFFeHBhbmRlZD0hMSx0aGlzLnBvcG92''@;'; put 'put ''ZXJJZD1QdSgpLHRoaXMuc21hcnRQb3NpdGlvbj17YXhpczpKMS5WRVJUSUNBTCxzaWRlOkhmLkFGVEVSLGFuY2hvcjpVcy5FTkQsY29udGVudDpVcy5FTkR9LHRoaXMuX29wZW49ITEsdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNoKGkub3BlbkNoYW5nZS5zdWJzY3JpYmUoQz0+e3RoaXMu''@;'; put 'put ''b3Blbj1DLHRoaXMuYXJpYUV4cGFuZGVkPUN9KSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy5fb3Blbn1zZXQgb3BlbihlKXt0aGlzLm9wZW4hPT0oZT0hIWUpJiYodGhpcy5zbWFydFRvZ2dsZVNlcnZpY2Uub3Blbj1lLHRoaXMub3BlbkNoYW5nZS5lbWl0KGUpLCFlJiZfbCh0aGlzLnBsYXRm''@;'; put 'put ''b3JtSWQpJiZ0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5rZXlOYXZpZ2F0aW9uJiYodGhpcy5rZXlOYXZpZ2F0aW9uLnNraXBJdGVtRm9jdXM9ZSksdGhpcy5fb3Blbj1lKX1zZXQgY3VzdG9tRmlsdGVyKGUpe3RoaXMuc2V0RmlsdGVyKGUpfWdldCBhY3RpdmUoKXty''@;'; put 'put ''ZXR1cm4hIXRoaXMuZmlsdGVyJiZ0aGlzLmZpbHRlci5pc0FjdGl2ZSgpfW5nT25DaGFuZ2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzLmZvckVhY2goZT0+ZS51''@;'; put 'put ''bnN1YnNjcmliZSgpKX1zZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKXtjb25zdCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKT8udGV4dENvbnRlbnQudHJpbSgp''@;'; put 'put ''LnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy50b2dnbGVCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyQXJpYUxhYmVsLHtDT0xVTU46aXx8IiJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGUpe3JldHVybiBuZXcoZXx8bikoV2UoczUpLFdlKGZzKSxXZShnYyksV2UoZGMpLFdlKHppKSxXZSh4SCw4KSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUscil7aWYoMSZlJiZXYShyJGUsNSx6aSks''@;'; put 'put ''MiZlKXtsZXQgaTtkaShpPWhpKCkpJiYoci5hbmNob3I9aS5maXJzdCl9fSxpbnB1dHM6e29wZW46WzAsImNsckRnRmlsdGVyT3BlbiIsIm9wZW4iXSxjdXN0b21GaWx0ZXI6WzAsImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNsckRnRmlsdGVy''@;'; put 'put ''T3BlbkNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFt7cHJvdmlkZTpDSCx1c2VFeGlzdGluZzpufV0pLElhLFd0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6NCx2YXJzOjEzLGNvbnN0czpbWyJhbmNob3IiLCIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVy''@;'; put 'put ''QW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZSJdLFsic29saWQiLCIiXSxbImNsYXNzIiwiZGF0YWdyaWQtZmlsdGVyIiwiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIsMywiaWQiLDQsImNsclBvcG92ZXJD''@;'; put 'put ''b250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIsMSwiZGF0YWdyaWQtZmlsdGVyIiwzLCJpZCJd''@;'; put 'put ''LFsxLCJkYXRhZ3JpZC1maWx0ZXItY2xvc2Utd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsMSwiY2xvc2UiXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoKSxyZSgwLCJidXR0b24i''@;'; put 'put ''LDEsMCksVnQoMiwiY2RzLWljb24iLDIpLGllKCksY3QoMyxpJGUsNSwzLCJkaXYiLDMpKSwyJmUmJihicigiZGF0YWdyaWQtZmlsdGVyLW9wZW4iLHIub3BlbikoImRhdGFncmlkLWZpbHRlcmVkIixyLmFjdGl2ZSksUnIoImFyaWEtbGFiZWwiLHIudG9nZ2xlQnV0dG9uQXJpYUxhYmVsKSgi''@;'; put 'put ''YXJpYS1leHBhbmRlZCIsci5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixyLnBvcG92ZXJJZCksYWUoMiksUnIoInN0YXR1cyIsci5hY3RpdmU/ImluZm8iOm51bGwpKCJzaGFwZSIsci5hY3RpdmU/ImZpbHRlci1ncmlkLWNpcmNsZSI6ImZpbHRlci1ncmlkIiksYWUoKSx5ZSgiY2xy''@;'; put 'put ''UG9wb3ZlckNvbnRlbnQiLHIub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLHIuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSl9LGRlcGVuZGVuY2llczpbWXcscnMs''@;'; put 'put ''b0EsajNlLGNBLGxBXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtjbGFzcyBHWHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb3A9dCx0LmluZGV4T2YoIi4iKT49MCYmKHRoaXMuc3BsaXRQcm9wPXQuc3BsaXQoIi4iKSl9Z2V0UHJvcFZhbHVlKHQpe2lmKHRoaXMuc3BsaXRQcm9wKXtsZXQgZT10''@;'; put 'put ''O2Zvcihjb25zdCByIG9mIHRoaXMuc3BsaXRQcm9wKXtpZihudWxsPT09ZXx8dHlwZW9mIGU+InUifHx0eXBlb2YgZVtyXT4idSIpcmV0dXJuO2U9ZVtyXX1yZXR1cm4gZX1yZXR1cm4gdFt0aGlzLnByb3BdfX1jbGFzcyBFSHtjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMucHJvcD10LHRoaXMu''@;'; put 'put ''ZXhhY3Q9ZSx0aGlzLm5lc3RlZFByb3A9bmV3IEdYKHQpfWFjY2VwdHModCxlLHIpe2NvbnN0IGk9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZSh0KTtyZXR1cm4hKHZvaWQgMD09PWl8fG51bGwhPT1lJiYoIm51bWJlciIhPXR5cGVvZiBpfHxpPGUpfHxudWxsIT09ciYmKCJudW1iZXIi''@;'; put 'put ''IT10eXBlb2YgaXx8aT5yKSl9fWNsYXNzIHZ2e2NvbnN0cnVjdG9yKHQpe3RoaXMuZmlsdGVyRm49dCx0aGlzLl9jaGFuZ2VzPW5ldyB1cix0aGlzLl9sb3c9bnVsbCx0aGlzLl9oaWdoPW51bGx9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQg''@;'; put 'put ''dmFsdWUoKXtyZXR1cm5bdGhpcy5fbG93LHRoaXMuX2hpZ2hdfXNldCB2YWx1ZSh0KXtjb25zdCBlPXRbMF0scj10WzFdOyhlIT09dGhpcy5fbG93fHxyIT09dGhpcy5faGlnaCkmJih0aGlzLl9sb3c9ZSx0aGlzLl9oaWdoPXIsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5f''@;'; put 'put ''aGlnaF0pKX1nZXQgbG93KCl7cmV0dXJuIHRoaXMuX2xvd31zZXQgbG93KHQpe3QhPT10aGlzLl9sb3cmJih0aGlzLl9sb3c9dCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIHRoaXMuX2hpZ2h9c2V0IGhpZ2godCl7dCE9PXRo''@;'; put 'put ''aXMuX2hpZ2gmJih0aGlzLl9oaWdoPXQsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIEVIP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsbG93OnRoaXMuX2xvdyxoaWdoOnRo''@;'; put 'put ''aXMuX2hpZ2h9OnRoaXN9aXNBY3RpdmUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2xvd3x8bnVsbCE9PXRoaXMuaGlnaH1hY2NlcHRzKHQpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHModCx0aGlzLl9sb3csdGhpcy5faGlnaCl9ZXF1YWxzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdnYm''@;'; put 'put ''Jih0LmZpbHRlckZuIGluc3RhbmNlb2YgRUg/dGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIEVIJiZ0LmZpbHRlckZuLnByb3A9PT10aGlzLmZpbHRlckZuLnByb3AmJnQubG93PT09dGhpcy5fbG93JiZ0LmhpZ2g9PT10aGlzLl9oaWdoOnQ9PT10aGlzKX19bGV0IFBwZT0oKCk9PntjbGFzcyBu''@;'; put 'put ''IGV4dGVuZHMgTUh7Y29uc3RydWN0b3IoZSxyLGksYSxjKXtzdXBlcihlKSx0aGlzLmRvbUFkYXB0ZXI9cix0aGlzLmNvbW1vblN0cmluZ3M9aSx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWEsdGhpcy5uZ1pvbmU9Yyx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBZcix0aGlzLm9wZW49''@;'; put 'put ''ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGUpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGUpP2UmJihlWzBdIT09dGhpcy5maWx0ZXIubG93fHxlWzFdIT09dGhpcy5maWx0''@;'; put 'put ''ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBlWzBdP2VbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgZVsxXT9lWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGUpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZXM9ZX1z''@;'; put 'put ''ZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihlKXt0aGlzLnNldEZpbHRlcihlIGluc3RhbmNlb2YgU0g/ZTpuZXcgdnYoZSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZXMpfWdldCBtYXhQ''@;'; put 'put ''bGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1pblZhbHVl''@;'; put 'put ''fWdldCBmcm9tTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLmZyb21MYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZnJvbUxhYmVsfWdldCB0b0xhYmVsVmFsdWUoKXtyZXR1cm4gdGhpcy50b0xhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy50b0xhYmVsfWdldCBsb3coKXtyZXR1''@;'; put 'put ''cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGUpeyJudW1iZXIiPT10eXBlb2YgZSYmZSE9PXRoaXMuZmlsdGVyLmxvdz8odGhpcy5maWx0ZXIubG93PWUsdGhpcy5maWx0ZXJW''@;'; put 'put ''YWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGUmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpfWdldCBo''@;'; put 'put ''aWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goZSl7Im51bWJlciI9PXR5cGVvZiBlJiZlIT09dGhpcy5maWx0ZXIuaGlnaD8odGhpcy5maWx0ZXIuaGln''@;'; put 'put ''aD1lLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBlJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmls''@;'; put 'put ''dGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5vcGVuPWUsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0''@;'; put 'put ''aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PntlLnVuc3Vic2NyaWJlKCl9KX19cmV0dXJuIG4uXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoczUpLFdlKEk2KSxXZShmcyksV2UoZ2MpLFdlKEphKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxyKXtpZigxJmUm''@;'; put 'put ''JihXYShhJGUsNSksV2EoYkEsNSkpLDImZSl7bGV0IGk7ZGkoaT1oaSgpKSYmKHIuaW5wdXQ9aS5maXJzdCksZGkoaT1oaSgpKSYmKHIuZmlsdGVyQ29udGFpbmVyPWkuZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbMCwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJtaW5QbGFj''@;'; put 'put ''ZWhvbGRlciJdLG1heFBsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsIm1heFBsYWNlaG9sZGVyIl0sZnJvbUxhYmVsOlswLCJjbHJGaWx0ZXJGcm9tTGFiZWwiLCJmcm9tTGFiZWwiXSx0b0xhYmVsOlswLCJjbHJGaWx0ZXJUb0xhYmVsIiwidG9MYWJlbCJdLHZhbHVl''@;'; put 'put ''OlswLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl0sY3VzdG9tTnVtZXJpY0ZpbHRlcjpbMCwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZl''@;'; put 'put ''YXR1cmVzOltzYShbe3Byb3ZpZGU6Q0gsdXNlRXhpc3Rpbmc6bn1dKSxJYV0sZGVjbHM6MTIsdmFyczoxMCxjb25zdHM6W1siaW5wdXRfbG93IiwiIl0sWyJpbnB1dF9oaWdoIiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0s''@;'; put 'put ''WzEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJsb3ciLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0Iiwz''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwiaGlnaCIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXtpZigxJmUpe2NvbnN0IGk9SW4oKTtyZSgwLCJjbHItZGctZmlsdGVyIiwyKSxjaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gZ3QoaSksdWkoci5vcGVuLGMpfHwoci5v''@;'; put 'put ''cGVuPWMpLG10KGMpfSkscmUoMSwiZGl2IiwzKSgyLCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDMsImxhYmVsIiw0KSxUZSg0KSxpZSgpLHJlKDUsImlucHV0Iiw1LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gZ3QoaSksdWkoci5sb3csYyl8fChyLmxv''@;'; put 'put ''dz1jKSxtdChjKX0pLGllKCkoKSxyZSg3LCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDgsImxhYmVsIiw0KSxUZSg5KSxpZSgpLHJlKDEwLCJpbnB1dCIsNiwxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGd0KGkpLHVpKHIuaGlnaCxjKXx8KHIuaGlnaD1j''@;'; put 'put ''KSxtdChjKX0pLGllKCkoKSgpKCl9MiZlJiYoeWUoImNsckRnRmlsdGVyIixyLnJlZ2lzdGVyZWQpLGxpKCJjbHJEZ0ZpbHRlck9wZW4iLHIub3BlbiksYWUoNCksdnIoci5mcm9tTGFiZWxWYWx1ZSksYWUoKSxsaSgibmdNb2RlbCIsci5sb3cpLHllKCJwbGFjZWhvbGRlciIsci5taW5QbGFj''@;'; put 'put ''ZWhvbGRlclZhbHVlKSxScigiYXJpYS1sYWJlbCIsci5taW5QbGFjZWhvbGRlclZhbHVlKSxhZSg0KSx2cihyLnRvTGFiZWxWYWx1ZSksYWUoKSxsaSgibmdNb2RlbCIsci5oaWdoKSx5ZSgicGxhY2Vob2xkZXIiLHIubWF4UGxhY2Vob2xkZXJWYWx1ZSksUnIoImFyaWEtbGFiZWwiLHIubWF4''@;'; put 'put ''UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3BzLEFwZSxUcGUsemwsakYsaWwsUXMsYkFdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2NsYXNzIFRIe2NvbnN0cnVjdG9yKHQsZT0hMSl7dGhpcy5wcm9wPXQsdGhpcy5leGFjdD1lLHRoaXMubmVzdGVkUHJvcD1uZXcgR1godCl9''@;'; put 'put ''YWNjZXB0cyh0LGUpe2NvbnN0IHI9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZSh0KTtyZXR1cm4hKHR5cGVvZiByPiJ1IikmJih0aGlzLmV4YWN0PygiIityKS50b0xvd2VyQ2FzZSgpPT09ZTooIiIrcikudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUpPj0wKX19Y2xhc3MgeXZ7Y29uc3Ry''@;'; put 'put ''dWN0b3IodCl7dGhpcy5maWx0ZXJGbj10LHRoaXMuX2NoYW5nZXM9bmV3IHVyLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPSIiLHRoaXMuX3Jhd1ZhbHVlPSIifWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGxvd2VyQ2FzZVZhbHVlKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2xvd2VyQ2FzZVZhbHVlfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgVEg/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCx2YWx1ZTp0aGlzLnZhbHVlfTp0aGlzfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9yYXdWYWx1ZX1zZXQgdmFsdWUo''@;'; put 'put ''dCl7dHx8KHQ9IiIpLHQhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMuX3Jhd1ZhbHVlPXQsdGhpcy5fbG93ZXJDYXNlVmFsdWU9dC50b0xvd2VyQ2FzZSgpLnRyaW0oKSx0aGlzLl9jaGFuZ2VzLm5leHQodCkpfWlzQWN0aXZlKCl7cmV0dXJuISF0aGlzLnZhbHVlfWFjY2VwdHModCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZmlsdGVyRm4uYWNjZXB0cyh0LHRoaXMubG93ZXJDYXNlVmFsdWUpfWVxdWFscyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHl2JiYodC5maWx0ZXJGbiBpbnN0YW5jZW9mIFRIP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBUSCYmdC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJG''@;'; put 'put ''bi5wcm9wJiZ0LnZhbHVlPT09dGhpcy52YWx1ZTp0PT09dGhpcyl9fWxldCBxdz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTUh7Y29uc3RydWN0b3IoZSxyLGksYSxjLG0sQyl7c3VwZXIoZSksdGhpcy5kb21BZGFwdGVyPXIsdGhpcy5jb21tb25TdHJpbmdzPWksdGhpcy5zbWFydFRvZ2dsZVNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLmVsZW1lbnRSZWY9Yyx0aGlzLmNkcj1tLHRoaXMubmdab25lPUMsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgWXIsdGhpcy5vcGVuPSExLHRoaXMubGFiZWxWYWx1ZT0iIix0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihlKXt0aGlzLnNldEZpbHRl''@;'; put 'put ''cihlIGluc3RhbmNlb2YgU0g/ZTpuZXcgeXYoZSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoZSl7''@;'; put 'put ''dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgZT8oZXx8KGU9IiIpLGUhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWUsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGUpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9ZX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5vcGVuPWUsdGhpcy5uZ1pv''@;'; put 'put ''bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRGaWx0ZXJMYWJlbCgpLHRoaXMu''@;'; put 'put ''Y2RyLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9c2V0RmlsdGVyTGFiZWwoKXtpZih0aGlzLmxhYmVsKXJldHVybiB2b2lkKHRoaXMubGFiZWxWYWx1ZT10aGlzLmxhYmVsKTtj''@;'; put 'put ''b25zdCByPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKTt0aGlzLmxhYmVsVmFsdWU9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5r''@;'; put 'put ''ZXlzLmRhdGFncmlkRmlsdGVyTGFiZWwse0NPTFVNTjpyPy50ZXh0Q29udGVudC50cmltKCl8fCIifSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHM1KSxXZShJNiksV2UoZnMpLFdlKGdjKSxXZSh6aSksV2UoRnMpLFdlKEphKSl9LG4uXHUw''@;'; put 'put ''Mjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1zdHJpbmctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLHIpe2lmKDEmZSYmKFdhKG8kZSw1KSxXYShiQSw1KSksMiZlKXtsZXQgaTtkaShpPWhpKCkpJiYoci5pbnB1dD1pLmZpcnN0KSxkaShpPWhpKCkpJiYoci5m''@;'; put 'put ''aWx0ZXJDb250YWluZXI9aS5maXJzdCl9fSxpbnB1dHM6e3BsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIl0sbGFiZWw6WzAsImNsckZpbHRlckxhYmVsIiwibGFiZWwiXSxjdXN0b21TdHJpbmdGaWx0ZXI6WzAsImNsckRnU3RyaW5nRmlsdGVyIiwi''@;'; put 'put ''Y3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6WzAsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW3twcm92aWRlOkNILHVzZUV4aXN0aW5nOm59XSks''@;'; put 'put ''SWEsV3RdLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWyJpbnB1dCIsIiJdLFszLCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwic2VhcmNoIiwiY2xySW5wdXQi''@;'; put 'put ''LCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXtpZigxJmUpe2NvbnN0IGk9SW4oKTtyZSgwLCJjbHItZGctZmlsdGVyIiwxKSxjaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gZ3Qo''@;'; put 'put ''aSksdWkoci5vcGVuLGMpfHwoci5vcGVuPWMpLG10KGMpfSkscmUoMSwiY2xyLWlucHV0LWNvbnRhaW5lciIpKDIsImxhYmVsIiksVGUoMyksaWUoKSxyZSg0LCJpbnB1dCIsMiwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGd0KGkpLHVpKHIudmFsdWUsYyl8fChy''@;'; put 'put ''LnZhbHVlPWMpLG10KGMpfSksaWUoKSgpKCl9MiZlJiYoeWUoImNsckRnRmlsdGVyIixyLnJlZ2lzdGVyZWQpLGxpKCJjbHJEZ0ZpbHRlck9wZW4iLHIub3BlbiksYWUoMyksdnIoci5sYWJlbFZhbHVlKSxhZSgpLGxpKCJuZ01vZGVsIixyLnZhbHVlKSx5ZSgicGxhY2Vob2xkZXIiLHIucGxh''@;'; put 'put ''Y2Vob2xkZXJWYWx1ZSksUnIoImFyaWEtbGFiZWwiLHIucGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3BzLFBkLGdILHpsLGlsLFFzLGJBXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx6Nj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT3d7fXJldHVybiBuLlx1MDI3NWZhYz0oKCk9''@;'; put 'put ''PntsZXQgdDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuKHR8fCh0PUtzKG4pKSkocnx8bil9fSkoKSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdfSksbn0pKCksSnc9KCgpPT57Y2xhc3Mgbntj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50PTB9Z2V0IGhhc0FjdGlvbmFibGVSb3coKXtyZXR1cm4gdGhpcy5hY3Rpb25hYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50LS19fXJldHVy''@;'; put 'put ''biBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF92PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBQd3tjb25zdHJ1Y3RvcihlLHIsaSl7aWYoIXIpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoZSxyKSx0aGlzLnJvd0FjdGlvbnM9aX1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMucm93QWN0aW9ucy5oYXNBY3Rpb25hYmxlUm93fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShGcyksV2UoejYsOCksV2UoSncpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLG59KSgpLEZwZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucGxhdGZvcm1JZD1lLHRoaXMubW9kYWxTdGFjaz1bXSx0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcj10aGlzLm9uS2V5VXAuYmluZCh0aGlzKX10cmFja01vZGFsT3BlbihlKXshMT09PXRoaXMubW9kYWxTdGFjay5pbmNsdWRlcyhlKSYmdGhpcy5t''@;'; put 'put ''b2RhbFN0YWNrLnVuc2hpZnQoZSksX2wodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfXRyYWNrTW9kYWxDbG9zZShlKXtjb25zdCByPXRoaXMubW9kYWxTdGFjay5pbmRleE9mKGUpO3I+LTEm''@;'; put 'put ''JnRoaXMubW9kYWxTdGFjay5zcGxpY2UociwxKSwwPT09dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmX2wodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfW9uS2V5VXAoZSl7dGhpcy5tb2Rh''@;'; put 'put ''bFN0YWNrLmxlbmd0aCYmRmYoZS5rZXkpPT09aGEuRXNjYXBlJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksdGhpcy5tb2RhbFN0YWNrWzBdLmNsb3NlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcihkYykpfSxuLlx1MDI3NXBy''@;'; put 'put ''b3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHRwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5tb2RhbFN0YWNrU2VydmljZT1lLHRoaXMucHJldmVudFNjcm9sbD0hMSx0aGlzLnRvZ2dsZVN0YXRlPSExLHRoaXMu''@;'; put 'put ''X2VuYWJsZWQ9ITEsdGhpcy5fc3RhdGU9bmV3IHhpKHRoaXMudG9nZ2xlU3RhdGUpfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQoZSl7dGhpcy5fZW5hYmxlZD1lfWdldCBwcmV2ZW50Rm9jdXNTY3JvbGwoKXtyZXR1cm4gdGhpcy5wcmV2ZW50U2Nyb2xs''@;'; put 'put ''fXNldCBwcmV2ZW50Rm9jdXNTY3JvbGwoZSl7dGhpcy5wcmV2ZW50U2Nyb2xsPWV9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xl''@;'; put 'put ''U3RhdGV9b3BlbihlLHIpe3RoaXMuY2FjaGU9ZSx0aGlzLmJ1dHRvbj1yLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpfWNsb3NlKCl7dGhpcy50b2dnbGVTdGF0''@;'; put 'put ''ZT0hMSx0aGlzLnJldHVybkZvY3VzKCksdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKX1yZXR1cm5Gb2N1cygpe3RoaXMuYnV0dG9uJiYodGhpcy5idXR0b24uZm9jdXMoe3ByZXZlbnRTY3JvbGw6''@;'; put 'put ''dGhpcy5wcmV2ZW50Rm9jdXNTY3JvbGx9KSx0aGlzLmJ1dHRvbj1udWxsKX10b2dnbGUoZSxyKXt0aGlzLmlzUm93T3BlbihlKXx8IWU/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihlLHIpfWlzUm93T3BlbihlKXtyZXR1cm4hKCF0aGlzLnRvZ2dsZVN0YXRlfHx0aGlzLmNhY2hlIT09ZSl9fXJl''@;'; put 'put ''dHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKEZwZSkpfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFF3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kZXRhaWxTZXJ2aWNlPWUsdGhp''@;'; put 'put ''cy5leHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFzRXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNlcnZpY2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNv''@;'; put 'put ''dW50LS19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKHRwKSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksYnY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFB3e2NvbnN0cnVjdG9yKGUscixpKXtp''@;'; put 'put ''Zighcil0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihlLHIpLHRoaXMuZXhwYW5kYWJsZUNvdW50PWl9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZGFibGVDb3VudC5oYXNFeHBhbmRh''@;'; put 'put ''YmxlUm93fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShGcyksV2UoejYsOCksV2UoUXcpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLHN0YW5kYWxvbmU6ITEsZmVh''@;'; put 'put ''dHVyZXM6W0lhXX0pLG59KSgpO2NsYXNzIEFIe2NvbnN0cnVjdG9yKHQpe3RoaXMucHJvcD10LHRoaXMubmVzdGVkUHJvcD1uZXcgR1godCl9Y29tcGFyZSh0LGUpe2xldCByPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUodCksaT10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGUp''@;'; put 'put ''O3JldHVybiJzdHJpbmciPT10eXBlb2YgciYmKHI9ci50b0xvd2VyQ2FzZSgpKSwic3RyaW5nIj09dHlwZW9mIGkmJihpPWkudG9Mb3dlckNhc2UoKSksdHlwZW9mIHI+InUifHxudWxsPT09cj90eXBlb2YgaT4idSJ8fG51bGw9PT1pPzA6MTp0eXBlb2YgaT4idSJ8fG51bGw9PT1pfHxyPGk/''@;'; put 'put ''LTE6cj5pPzE6MH19dmFyIEMyPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uVU5TT1JURUQ9MF09IlVOU09SVEVEIixuW24uQVNDPTFdPSJBU0MiLG5bbi5ERVNDPS0xXT0iREVTQyIsbn0oQzJ8fHt9KTtjb25zdCBlQz0iZGF0YWdyaWQtZml4ZWQtd2lkdGgiLHdBPSJkYXRhZ3JpZC1oaWRkZW4t''@;'; put 'put ''Y29sdW1uIjtsZXQgJFg9KCgpPT57Y2xhc3MgbntuZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUscil7aWYoMSZlJiZXYShzJGUsNSksMiZlKXtsZXQgaTtkaShpPWhpKCkpJiYoci50ZW1wbGF0ZVJl''@;'; put 'put ''Zj1pLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOkNvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLGN0KDAsbCRlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxDYykp''@;'; put 'put ''fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxrSD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RhdGVEZWJvdW5jZXI9ZSx0aGlzLl9yZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgdXJ9Z2V0IGNvbXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQgY29t''@;'; put 'put ''cGFyYXRvcihlKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj1lLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCByZXZlcnNlKCl7cmV0dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2UoZSl7''@;'; put 'put ''dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9ZSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoZSxyKXt0aGlz''@;'; put 'put ''LnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09ZT90aGlzLl9yZXZlcnNlPXR5cGVvZiByPCJ1IiYmcnx8IXRoaXMuX3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9ZSx0aGlzLl9yZXZlcnNlPXR5cGVvZiByPCJ1IiYmciksdGhpcy5lbWl0Q2hhbmdlKCks''@;'; put 'put ''dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKGUscil7cmV0dXJuKHRoaXMucmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29tcGFyZShlLHIpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlz''@;'; put 'put ''KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoT3IoX0EpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTt2YXIgbnA9ZnVuY3Rpb24obil7cmV0dXJuIG5bbi5BTElHTl9DT0xVTU5TPTBdPSJBTElH''@;'; put 'put ''Tl9DT0xVTU5TIixuW24uQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixuW24uQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxDVUxBVEVfTU9ERV9PRkYiLG5bbi5DTEVBUl9XSURUSFM9M109IkNMRUFSX1dJRFRIUyIsbltuLkNPTVBVVEVfQ09MVU1OX1dJRFRIUz00''@;'; put 'put ''XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixufShucHx8e30pO2xldCB3dj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3RlcD1uZXcgdXIsdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0IHJlbmRlclN0ZXAoKXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09ic2Vy''@;'; put 'put ''dmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyhlKXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUocmMocj0+ZT09PXIpKX1yZXNpemUoKXt0aGlzLl9yZW5kZXJTdGVwLm5leHQobnAuQ0FMQ1VMQVRFX01PREVfT04pLHRoaXMuYWxyZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5leHQo''@;'; put 'put ''bnAuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQobnAuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQobnAuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6ZWQ9ITAsdGhpcy5fcmVuZGVyU3RlcC5uZXh0KG5wLkNBTENVTEFURV9NT0RF''@;'; put 'put ''X09GRil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEtYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGkpe3RoaXMuZWw9ZSx0aGlzLmRvbUFk''@;'; put 'put ''YXB0ZXI9cix0aGlzLm9yZ2FuaXplcj1pLHRoaXMuX3Jlc2l6ZWRCeT0wfWdldCByZXNpemVkQnkoKXtyZXR1cm4gdGhpcy5fcmVzaXplZEJ5fWdldCBtaW5Db2x1bW5XaWR0aCgpe3JldHVybiB0aGlzLmRvbUFkYXB0ZXIubWluV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KXx8OTZ9Z2V0''@;'; put 'put ''IG1heFJlc2l6ZVJhbmdlKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUtdGhpcy5taW5Db2x1bW5XaWR0aH1nZXQgd2lkdGhBZnRlclJlc2l6ZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplK3RoaXMuX3Jlc2l6ZWRCeX1zdGFydFJlc2l6ZSgpe3RoaXMuX3Jlc2l6ZWRC''@;'; put 'put ''eT0wLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCx0aGlzLndpZHRoQmVmb3JlUmVzaXplPXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkud2lkdGh9ZW5kUmVzaXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9Y2FsY3VsYXRlUmVzaXpl''@;'; put 'put ''KGUpe2U8LXRoaXMubWF4UmVzaXplUmFuZ2U/KHRoaXMuX3Jlc2l6ZWRCeT0tdGhpcy5tYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITEpOih0aGlzLl9yZXNpemVkQnk9ZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITApfX1yZXR1cm4gbi5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcih6aSksT3IoSTYpLE9yKHd2KSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWFg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnBsYXRmb3JtSWQ9ZX1nZXQgdGFi''@;'; put 'put ''bGVSZWYoKXtyZXR1cm4gdGhpcy5fdGFibGVSZWZ9c2V0IHRhYmxlUmVmKGUpe3RoaXMuX3RhYmxlUmVmPWV9c2V0IHRhYmxlKGUpe19sKHRoaXMucGxhdGZvcm1JZCkmJmUubmF0aXZlRWxlbWVudCYmKHRoaXMudGFibGVSZWY9ZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSIpKX1nZXRDb2x1bW5EcmFnSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGFibGVSZWY/YCR7dGhpcy50YWJsZVJlZi5jbGllbnRIZWlnaHR9cHhgOm51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKGRjKSl9LG4uXHUwMjc1cHJv''@;'; put 'put ''dj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTnBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjLG0pe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9ZSx0aGlzLnJlbmRlcmVyPXIsdGhpcy5uZ1pvbmU9aSx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9''@;'; put 'put ''YSx0aGlzLmNvbW1vblN0cmluZz1jLHRoaXMuZG9jdW1lbnQ9bSx0aGlzLmNvbHVtblNlcGFyYXRvcklkPVB1KCksdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRv''@;'; put 'put ''cklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5p''@;'; put 'put ''dCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleWRvd24iLGU9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oZSksdGhpcy5tb3ZlVHJhY2tl''@;'; put 'put ''ck9uS2V5RG93bihlKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAiLGU9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChlKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGU9''@;'; put 'put ''PmUoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgZT10aGlzLnRhYmxlU2l6ZVNlcnZpY2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIs''@;'; put 'put ''ZSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoZSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoZSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNr''@;'; put 'put ''ZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVU''@;'; put 'put ''cmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIs''@;'; put 'put ''InRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2x1bW5IYW5kbGVFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImF1dG8iKX1zaG93VHJhY2tlck9u''@;'; put 'put ''Rmlyc3RLZXlEb3duKGUpeyF0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoZSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoZSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSEwLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhp''@;'; put 'put ''cy5yZXNpemVUcmFja2VyRWwsIm9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLnNob3dUcmFja2VyKCkpfW1vdmVUcmFja2VyT25LZXlEb3duKGUpe3RoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChlKT8oZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1uUmVz''@;'; put 'put ''aXplclNlcnZpY2UucmVzaXplZEJ5LTEyKSk6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChlKSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMikpfWhpZGVUcmFja2VyT25LZXlVcChlKXt0aGlzLnJl''@;'; put 'put ''c2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoZSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoZSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsIm9u''@;'; put 'put ''LWFycm93LWtleS1yZXNpemUiKSx0aGlzLmhpZGVUcmFja2VyKCksdGhpcy5jb2x1bW5IYW5kbGVFbC5mb2N1cygpKX1yZWRGbGFnVHJhY2tlcigpe3RoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSE9PXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSYm''@;'; put 'put ''KHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlP3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1h''@;'; put 'put ''eCIpOnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1heCIpKX1pc0Fycm93TGVmdEtleUV2ZW50KGUpe3JldHVybiBGZihlLmtleSk9PT1oYS5BcnJvd0xlZnR9aXNBcnJvd1JpZ2h0S2V5RXZlbnQoZSl7cmV0dXJuIEZmKGUua2V5KT09PWhh''@;'; put 'put ''LkFycm93UmlnaHR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKEtYKSxXZShUbyksV2UoSmEpLFdlKFhYKSxXZShmcyksV2UoWHMpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3Ii''@;'; put 'put ''XV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUscil7aWYoMSZlJiYoV2EoYyRlLDUpLFdhKHUkZSw1KSksMiZlKXtsZXQgaTtkaShpPWhpKCkpJiYoci5yZXNpemVUcmFja2VyUmVmPWkuZmlyc3QpLGRpKGk9aGkoKSkmJihyLmNvbHVtbkhhbmRsZVJlZj1pLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciIsITApfSxzdGFuZGFsb25lOiExLGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWyJjb2x1bW5IYW5kbGUiLCIiXSxbInJlc2l6ZVRyYWNrZXIiLCIiXSxbInR5cGUiLCJidXR0b24iLCJjZGtE''@;'; put 'put ''cmFnIiwiIiwiY2RrRHJhZ0xvY2tBeGlzIiwieCIsMSwiZGF0YWdyaWQtY29sdW1uLWhhbmRsZSIsMywiY2RrRHJhZ1N0YXJ0ZWQiLCJjZGtEcmFnTW92ZWQiLCJjZGtEcmFnRW5kZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2VyIl1dLHRl''@;'; put 'put ''bXBsYXRlOmZ1bmN0aW9uKGUscil7aWYoMSZlKXtjb25zdCBpPUluKCk7cmUoMCwiYnV0dG9uIiwyLDApLGt0KCJjZGtEcmFnU3RhcnRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoaSksbXQoci5zaG93VHJhY2tlcigpKX0pKCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGMpe3JldHVybiBndChp''@;'; put 'put ''KSxtdChyLm1vdmVUcmFja2VyKGMuZGlzdGFuY2UueCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24oYyl7cmV0dXJuIGd0KGkpLHIuaGlkZVRyYWNrZXIoKSxtdChjLnNvdXJjZS5fZHJhZ1JlZi5yZXNldCgpKX0pLGllKCkscmUoMiwic3BhbiIsMyksVGUoMyksaWUoKSxWdCg0LCJkaXYi''@;'; put 'put ''LDQsMSl9MiZlJiYoUnIoImFyaWEtbGFiZWwiLHIuY29tbW9uU3RyaW5nLmtleXMuY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsci5kZXNjcmlwdGlvbklkKSxhZSgyKSxScigiaWQiLHIuZGVzY3JpcHRpb25JZCksYWUoKSxNcigiICIsci5jb21tb25TdHJp''@;'; put 'put ''bmcua2V5cy5jb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbiwiICIpKX0sZGVwZW5kZW5jaWVzOltxSmVdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEN2PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBNSHtjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7c3VwZXIoaSksdGhpcy5lbD1lLHRoaXMuX3Nv''@;'; put 'put ''cnQ9cix0aGlzLnZjcj1hLHRoaXMuZGV0YWlsU2VydmljZT1jLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9bSx0aGlzLnNvcnRPcmRlckNoYW5nZT1uZXcgWXIsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgWXIsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0''@;'; put 'put ''aGlzLl9zb3J0T3JkZXI9QzIuVU5TT1JURUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3Nob3dTZXBhcmF0b3I9ITAsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZv''@;'; put 'put ''ckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBpc0hpZGRlbigpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKHdBKX1nZXQgc2hvd1NlcGFyYXRvcigpe3JldHVybiB0aGlzLl9zaG93U2VwYXJhdG9yfXNldCBzaG93U2VwYXJhdG9yKGUpe3RoaXMuX3No''@;'; put 'put ''b3dTZXBhcmF0b3I9ZSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBjb2xUeXBlKCl7cmV0dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoZSl7dGhpcy5fY29sVHlwZT1lfWdldCBmaWVsZCgpe3JldHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoZSl7InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBlJiYodGhpcy5fZmllbGQ9ZSx0aGlzLl9zb3J0Qnl8fCh0aGlzLl9zb3J0Qnk9bmV3IEFIKGUpKSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0IHNvcnRCeShlKXsic3RyaW5nIj09dHlwZW9mIGU/dGhpcy5fc29ydEJ5PW5ldyBBSChlKTplP3Ro''@;'; put 'put ''aXMuX3NvcnRCeT1lOnRoaXMuZmllbGQ/dGhpcy5fc29ydEJ5PW5ldyBBSCh0aGlzLmZpZWxkKTpkZWxldGUgdGhpcy5fc29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29ydE9yZGVyfXNldCBzb3J0T3JkZXIoZSl7aWYoISh0eXBlb2YgZT4idSIpJiZ0aGlzLl9zb3J0T3Jk''@;'; put 'put ''ZXIhPT1lKXN3aXRjaChlKXtjYXNlIEMyLkFTQzp0aGlzLnNvcnQoITEpO2JyZWFrO2Nhc2UgQzIuREVTQzp0aGlzLnNvcnQoITApO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc29ydC5jbGVhcigpfX1zZXQgdXBkYXRlRmlsdGVyVmFsdWUoZSl7dGhpcy5maWx0ZXI/dGhpcy5maWx0ZXIgaW5zdGFu''@;'; put 'put ''Y2VvZiB5dj8oKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpJiYoZT0iIiksZSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9ZSkpOnRoaXMuZmlsdGVyIGluc3RhbmNlb2YgdnYmJigoIWV8fCEoZSBpbnN0YW5jZW9mIEFycmF5KSkmJihlPVtudWxsLG51bGxdKSwyPT09''@;'; put 'put ''ZS5sZW5ndGgmJihlWzBdIT09dGhpcy5maWx0ZXIudmFsdWVbMF18fGVbMV0hPT10aGlzLmZpbHRlci52YWx1ZVsxXSkmJih0aGlzLmZpbHRlci52YWx1ZT1lKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9ZX1zZXQgcHJvamVjdGVkRmlsdGVyKGUpe2UmJih0aGlzLmRlbGV0ZUZpbHRlcigpLHRo''@;'; put 'put ''aXMuY3VzdG9tRmlsdGVyPSEwKX1nZXQgc29ydGFibGUoKXtyZXR1cm4hIXRoaXMuX3NvcnRCeX1nZXQgYXJpYVNvcnQoKXtzd2l0Y2godGhpcy5fc29ydE9yZGVyKXtjYXNlIEMyLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIEMyLkRFU0M6cmV0dXJuImRlc2NlbmRpbmciO2RlZmF1bHQ6''@;'; put 'put ''cmV0dXJuIm5vbmUifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0YW5jZW9mIHl2fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIHZ2P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0''@;'; put 'put ''IGZpbHRlclZhbHVlKGUpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIHl2fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIHZ2KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9ZSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KCRYLHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IHBIKCRYLHRoaXMudmNyKX1uZ09uQ2hhbmdlcyhlKXtlLmNvbFR5cGUmJmUuY29sVHlwZS5jdXJyZW50VmFsdWUmJmUuY29sVHlwZS5jdXJy''@;'; put 'put ''ZW50VmFsdWUhPT1lLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5zZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGUuZmllbGQmJmUuZmllbGQuY3Vy''@;'; put 'put ''cmVudFZhbHVlJiZlLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWUuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25E''@;'; put 'put ''ZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX1zb3J0KGUpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlzLl9zb3J0QnksZSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9DMi5ERVNDOkMyLkFTQyx0''@;'; put 'put ''aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PUMyLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpKX1saXN0ZW5Gb3JEZXRhaWxQYW5lQ2hhbmdlcygpe3JldHVybiB0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFu''@;'; put 'put ''Z2Uuc3Vic2NyaWJlKGU9Pnt0aGlzLnNob3dTZXBhcmF0b3IhPT0hZSYmKHRoaXMuc2hvd1NlcGFyYXRvcj0hZSl9KX1saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpe3JldHVybiB0aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoZT0+e3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNo''@;'; put 'put ''ZWNrKCksdGhpcy5zb3J0T3JkZXIhPT1DMi5VTlNPUlRFRCYmZS5jb21wYXJhdG9yIT09dGhpcy5fc29ydEJ5JiYodGhpcy5fc29ydE9yZGVyPUMyLlVOU09SVEVELHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0RGlyZWN0aW9uPW51bGwpfSl9''@;'; put 'put ''c2V0dXBEZWZhdWx0RmlsdGVyKGUscil7Im51bWJlciI9PT1yP3RoaXMuc2V0RmlsdGVyKG5ldyB2dihuZXcgRUgoZSkpKToic3RyaW5nIj09PXImJnRoaXMuc2V0RmlsdGVyKG5ldyB5dihuZXcgVEgoZSkpKSx0aGlzLmZpbHRlciYmdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnVwZGF0''@;'; put 'put ''ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHppKSxXZShrSCksV2UoczUpLFdlKE5uKSxXZSh0cCksV2UoRnMpKX0sbi5cdTAyNzVj''@;'; put 'put ''bXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiZzbyhpLENILDUpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIucHJvamVjdGVkRmlsdGVyPWEuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIs''@;'; put 'put ''ImNvbHVtbmhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiYoUnIoImFyaWEtc29ydCIsci5hcmlhU29ydCksYnIoImRhdGFncmlkLWNvbHVtbiIsITApKX0saW5wdXRzOntmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjpbMCwiY2xyRmlsdGVyU3RyaW5n''@;'; put 'put ''UGxhY2Vob2xkZXIiLCJmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WzAsImNs''@;'; put 'put ''ckZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiXSxjb2xUeXBlOlswLCJjbHJEZ0NvbFR5cGUiLCJjb2xUeXBlIl0sZmllbGQ6WzAsImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbMCwiY2xyRGdTb3J0QnkiLCJzb3J0QnkiXSxzb3J0''@;'; put 'put ''T3JkZXI6WzAsImNsckRnU29ydE9yZGVyIiwic29ydE9yZGVyIl0sdXBkYXRlRmlsdGVyVmFsdWU6WzAsImNsckZpbHRlclZhbHVlIiwidXBkYXRlRmlsdGVyVmFsdWUiXX0sb3V0cHV0czp7c29ydE9yZGVyQ2hhbmdlOiJjbHJEZ1NvcnRPcmRlckNoYW5nZSIsZmlsdGVyVmFsdWVDaGFuZ2U6''@;'; put 'put ''ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbTWYoW3I1XSksSWEsV3RdLG5nQ29udGVudFNlbGVjdG9yczpoJGUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbImNvbHVtblRpdGxlIiwiIl0sWzEsImRhdGFncmlkLWNvbHVtbi1mbGV4Il0sWyJjbGFzcyIs''@;'; put 'put ''ImRhdGFncmlkLWNvbHVtbi10aXRsZSIsInR5cGUiLCJidXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckZp''@;'; put 'put ''bHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsNCwibmdJZiJdLFs0LCJu''@;'; put 'put ''Z0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJdLFsic2hhcGUiLCJhcnJv''@;'; put 'put ''dyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyTWF4''@;'; put 'put ''UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKGQkZSkscmUoMCwiZGl2IiwxKSxjdCgxLGck''@;'; put 'put ''ZSwzLDIsImJ1dHRvbiIsMiksQnIoMiksY3QoMyxtJGUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMykoNCx2JGUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDQpKDUseSRlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxDYykoNyxiJGUsMiwxLCJzcGFuIiw1KSg4LHckZSwxLDAs''@;'; put 'put ''ImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSxpZSgpKSwyJmUmJihhZSgpLHllKCJuZ0lmIixyLnNvcnRhYmxlKSxhZSgyKSx5ZSgibmdJZiIsci5maWVsZCYmIXIuY3VzdG9tRmlsdGVyJiYic3RyaW5nIj09ci5jb2xUeXBlKSxhZSgpLHllKCJuZ0lmIixyLmZpZWxkJiYhci5jdXN0b21G''@;'; put 'put ''aWx0ZXImJiJudW1iZXIiPT1yLmNvbFR5cGUpLGFlKDMpLHllKCJuZ0lmIiwhci5zb3J0YWJsZSksYWUoKSx5ZSgibmdJZiIsci5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbbWEsa2QscnMsTnBlLFBwZSxxd10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0p''@;'; put 'put ''KCksbDU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy5fZmlsdGVycz1lLHRoaXMuX3NvcnQ9cix0aGlzLl9wYWdlPWksdGhpcy5sb2FkaW5nPSExLHRoaXMuX3NtYXJ0PSExLHRoaXMuX2Rpc3BsYXllZD1bXSx0aGlzLl9jaGFuZ2U9bmV3IHVyLHRoaXMuX2FsbENoYW5n''@;'; put 'put ''ZXM9bmV3IHVyLHRoaXMudHJhY2tCeT1hPT5hfWdldCBzbWFydCgpe3JldHVybiB0aGlzLl9zbWFydH1nZXQgYWxsKCl7cmV0dXJuIHRoaXMuX2FsbH1zZXQgYWxsKGUpe3RoaXMuX2FsbD1lLHRoaXMuZW1pdEFsbENoYW5nZXMoZSksdGhpcy5zbWFydD90aGlzLl9maWx0ZXJJdGVtcygpOih0''@;'; put 'put ''aGlzLl9kaXNwbGF5ZWQ9ZSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGRpc3BsYXllZCgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWR9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbENoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWxsQ2hhbmdlcy5h''@;'; put 'put ''c09ic2VydmFibGUoKX1nZXQgdW5pbml0aWFsaXplZCgpe3JldHVybiF0aGlzLl9hbGx9ZGVzdHJveSgpe3RoaXMuX2ZpbHRlcnNTdWImJnRoaXMuX2ZpbHRlcnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLl9zb3J0U3ViJiZ0aGlzLl9zb3J0U3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFnZVN1''@;'; put 'put ''YiYmdGhpcy5fcGFnZVN1Yi51bnN1YnNjcmliZSgpfXNtYXJ0ZW5Eb3duKCl7dGhpcy5fc21hcnQ9ITEsdGhpcy5kZXN0cm95KCl9c21hcnRlblVwKCl7dGhpcy5fc21hcnQ9ITAsdGhpcy5fZmlsdGVyc1N1Yj10aGlzLl9maWx0ZXJzLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2ZpbHRl''@;'; put 'put ''ckl0ZW1zKCkpLHRoaXMuX3NvcnRTdWI9dGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fc29ydC5jb21wYXJhdG9yP3RoaXMuX3NvcnRJdGVtcygpOnRoaXMuX2ZpbHRlckl0ZW1zKCl9KSx0aGlzLl9wYWdlU3ViPXRoaXMuX3BhZ2UuY2hhbmdlLnN1YnNjcmliZSgoKT0+''@;'; put 'put ''dGhpcy5fY2hhbmdlUGFnZSgpKX1yZWZyZXNoKCl7dGhpcy5zbWFydCYmdGhpcy5fZmlsdGVySXRlbXMoKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcy5kaXNwbGF5ZWQpfWVtaXRBbGxDaGFuZ2VzKGUpe3RoaXMuX2FsbENoYW5nZXMubmV4dChlKX1fZmlsdGVySXRlbXMo''@;'; put 'put ''KXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9maWx0ZXJlZD10aGlzLl9maWx0ZXJzLmhhc0FjdGl2ZUZpbHRlcnMoKT90aGlzLl9hbGwuZmlsdGVyKGU9PnRoaXMuX2ZpbHRlcnMuYWNjZXB0cyhlKSk6dGhpcy5fYWxsLnNsaWNlKCksdGhpcy5fcGFnZS50b3RhbEl0ZW1zPXRoaXMuX2Zp''@;'; put 'put ''bHRlcmVkLmxlbmd0aCx0aGlzLl9zb3J0SXRlbXMoKSl9X3NvcnRJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX3NvcnQuY29tcGFyYXRvciYmdGhpcy5fZmlsdGVyZWQuc29ydCgoZSxyKT0+dGhpcy5fc29ydC5jb21wYXJlKGUscikpLHRoaXMuX2NoYW5nZVBhZ2UoKSl9X2No''@;'; put 'put ''YW5nZVBhZ2UoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fHRoaXMuX3BhZ2UuYWN0aXZhdGVkJiYwPT09dGhpcy5fcGFnZS5zaXplfHwodGhpcy5fZGlzcGxheWVkPXRoaXMuX3BhZ2Uuc2l6ZT4wP3RoaXMuX2ZpbHRlcmVkLnNsaWNlKHRoaXMuX3BhZ2UuZmlyc3RJdGVtLHRoaXMuX3BhZ2UubGFz''@;'; put 'put ''dEl0ZW0rMSk6dGhpcy5fZmlsdGVyZWQsdGhpcy5lbWl0Q2hhbmdlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcihzNSksT3Ioa0gpLE9yKGo2KSl9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0p''@;'; put 'put ''KCksdEM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhKXt0aGlzLnRlbXBsYXRlPWUsdGhpcy5kaWZmZXJzPXIsdGhpcy5pdGVtcz1pLHRoaXMuZGlmZmVyPW51bGwsdGhpcy5zdWJzY3JpcHRpb25zPVtdLGkuc21hcnRlblVwKCksdGhpcy5pdGVyYWJsZVByb3h5PW5ldyBocyhh''@;'; put 'put ''LGUsciksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaS5jaGFuZ2Uuc3Vic2NyaWJlKGM9Pnt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JPZj1jLHRoaXMuaXRlcmFibGVQcm94eS5uZ0RvQ2hlY2soKX0pKX1zZXQgcmF3SXRlbXMoZSl7dGhpcy5fcmF3SXRlbXM9ZXx8W119c2V0IHRyYWNrQnko''@;'; put 'put ''ZSl7dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1lfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUscil7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRlKHRoaXMu''@;'; put 'put ''aXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJl''@;'; put 'put ''KCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShBbCksV2UocDYpLFdlKGw1KSxXZShObikpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlucHV0czp7''@;'; put 'put ''cmF3SXRlbXM6WzAsImNsckRnSXRlbXNPZiIsInJhd0l0ZW1zIl0sdHJhY2tCeTpbMCwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LHN0YW5kYWxvbmU6ITF9KSxufSkoKSxxWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaXRlbXM9ZX1nZXQgZW1wdHlEYXRhZ3Jp''@;'; put 'put ''ZCgpe3JldHVybiEodGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGw1KSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBl''@;'; put 'put ''Om4sc2VsZWN0b3JzOltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpDbyxkZWNsczo0''@;'; put 'put ''LHZhcnM6NCxjb25zdHM6W1sxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50Il0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1h''@;'; put 'put ''Z2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLHJlKDAsImRpdiIsMCksY3QoMSxDJGUsMSwwLCJkaXYiLDEpLHJlKDIsInNwYW4iLDIpLGN0KDMsUyRlLDEsMCwibmctY29udGVudCIsMyksaWUoKSgpKSwyJmUmJihicigiZGF0YWdyaWQtZW1wdHkiLHIuZW1wdHlEYXRh''@;'; put 'put ''Z3JpZCksYWUoKSx5ZSgibmdJZiIsci5lbXB0eURhdGFncmlkKSxhZSgyKSx5ZSgibmdJZiIsci5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbbWFdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEpYPSgoKT0+e2NsYXNzIG57bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jZWxsVmlldz10''@;'; put 'put ''aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY2VsbFZpZXcuZGVzdHJveSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1si''@;'; put 'put ''ZGctd3JhcHBlZC1jZWxsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLHIpe2lmKDEmZSYmV2EoTSRlLDUpLDImZSl7bGV0IGk7ZGkoaT1oaSgpKSYmKHIudGVtcGxhdGVSZWY9aS5maXJzdCl9fSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpDbyxkZWNsczoyLHZhcnM6MCxjb25z''@;'; put 'put ''dHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKCksY3QoMCx4JGUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLENjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52Y3I9ZX1n''@;'; put 'put ''ZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KEpYLHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBwSChKWCx0aGlzLnZjcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4p''@;'; put 'put ''KFdlKE5uKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUscixpKXtpZigxJmUmJnNvKGksZkgsNCksMiZlKXtsZXQgYTtkaShhPWhpKCkpJiYoci5zaWducG9zdD1hKX19LGhvc3RBdHRyczpbInJv''@;'; put 'put ''bGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiZGF0YWdyaWQtY2VsbCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixyLnNpZ25wb3N0Lmxlbmd0aD4wKX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6''@;'; put 'put ''Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksVnBlPTAsQ0E9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE9ke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlz''@;'; put 'put ''Ll9yZXBsYWNlPW5ldyB4aSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgdXIsVnBlKyssdGhpcy5leHBhbmRhYmxlSWQ9ImNsci1kZy1leHBhbmRhYmxlLXJvdy0iK1ZwZX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGUpeyhlPSEhZSkhPT10aGlzLl9l''@;'; put 'put ''eHBhbmRlZCYmKHRoaXMuX2V4cGFuZGVkPWUsdGhpcy5fYW5pbWF0ZS5uZXh0KCksdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoZSkpfWdldCByZXBsYWNlKCl7cmV0dXJuIHRoaXMuX3JlcGxhY2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFuaW1hdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZS5hc09i''@;'; put 'put ''c2VydmFibGUoKX1sb2FkaW5nU3RhdGVDaGFuZ2UoZSl7c3VwZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGUpLGUhPT1MZC5MT0FESU5HJiZ0aGlzLl9hbmltYXRlLm5leHQoKX1zZXRSZXBsYWNlKGUpe3RoaXMuX3JlcGxhY2UubmV4dChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUp''@;'; put 'put ''e3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7dmFyIG5DPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uRElTUExBWT0wXT0iRElTUExBWSIsbltuLkNBTENVTEFURT0xXT0iQ0FMQ1VMQVRFIixufShuQ3x8e30pLHds''@;'; put 'put ''PWZ1bmN0aW9uKG4pe3JldHVybiBuW24uTm9uZT0wXT0iTm9uZSIsbltuLlNpbmdsZT0xXT0iU2luZ2xlIixuW24uTXVsdGk9Ml09Ik11bHRpIixufSh3bHx8e30pO2xldCBRWD0oKCk9PntjbGFzcyBue25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucm93Vmlldz10aGlzLnRlbXBsYXRlUmVmLmNy''@;'; put 'put ''ZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMucm93Vmlldy5kZXN0cm95KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLXJvdyJdXSx2''@;'; put 'put ''aWV3UXVlcnk6ZnVuY3Rpb24oZSxyKXtpZigxJmUmJldhKEUkZSw1KSwyJmUpe2xldCBpO2RpKGk9aGkoKSkmJihyLnRlbXBsYXRlUmVmPWkuZmlyc3QpfX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJd''@;'; put 'put ''XSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKCksY3QoMCxUJGUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLENjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGFRZT0wLHJDPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyKXt0aGlzLl9pdGVtcz1lLHRoaXMucHJlc2Vy''@;'; put 'put ''dmVTZWxlY3Rpb249ITEsdGhpcy5zaGlmdFByZXNzZWQ9ITEsdGhpcy5yb3dTZWxlY3Rpb25Nb2RlPSExLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5sb2NrZWRSZWZzPVtdLHRoaXMudmFsdWVDb2xsZWN0b3I9bmV3IHVyLHRoaXMuX3NlbGVjdGlvblR5cGU9d2wuTm9uZSx0aGlz''@;'; put 'put ''Ll9jaGFuZ2U9bmV3IHVyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmlkPSJjbHItZGctc2VsZWN0aW9uIithUWUrKyx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChyLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnshdGhpcy5fc2VsZWN0YWJsZXx8dGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbnx8dGhp''@;'; put 'put ''cy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGUuYWxsQ2hhbmdlcy5zdWJzY3JpYmUoaT0+e2NvbnN0IGE9W107c3dpdGNoKHRoaXMuc2VsZWN0aW9uVHlwZSl7Y2FzZSB3bC5Ob25lOmJyZWFrO2Nhc2Ugd2wuU2luZ2xlOntsZXQgYyxtPSExO3RoaXMuY3Vy''@;'; put 'put ''cmVudFNpbmdsZSYmIXRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZiYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj1lLnRyYWNrQnkodGhpcy5jdXJyZW50U2luZ2xlKSksaS5mb3JFYWNoKEM9Pntjb25zdCBQPWUudHJhY2tCeShDKTt0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9''@;'; put 'put ''PT1QJiYoYz1DLG09ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKFApPi0xJiZhLnB1c2goUCl9KSxlLnNtYXJ0JiYhYyYmKG09ITApLHNldFRpbWVvdXQoKCk9PnttJiYodGhpcy5jdXJyZW50U2luZ2xlPWMpfSwwKTticmVha31jYXNlIHdsLk11bHRpOntsZXQgYz10aGlzLmN1cnJlbnQu''@;'; put 'put ''c2xpY2UoKSxtPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10aGlzLmN1cnJlbnQubGVuZ3RoJiYodGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChDPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5w''@;'; put 'put ''dXNoKGUudHJhY2tCeShDKSl9KSksaS5mb3JFYWNoKEM9Pntjb25zdCBQPWUudHJhY2tCeShDKTt0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihQKT4tMSYmYS5wdXNoKFApfSksYy5sZW5ndGg+MCYmKGkuZm9yRWFjaChDPT57Y29uc3QgUD1lLnRyYWNrQnkoQyksWT10aGlzLnByZXZTZWxlY3Rp''@;'; put 'put ''b25SZWZzLmluZGV4T2YoUCk7WT4tMSYmKGNbWV09QyxtPSEwKX0pLGUuc21hcnQmJihjPWMuZmlsdGVyKEM9PmkuaW5kZXhPZihDKT4tMSksdGhpcy5jdXJyZW50Lmxlbmd0aCE9PWMubGVuZ3RoJiYobT0hMCkpLHNldFRpbWVvdXQoKCk9PnttJiYodGhpcy5jdXJyZW50PWMpfSwwKSk7YnJl''@;'; put 'put ''YWt9fXRoaXMubG9ja2VkUmVmcz1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0b3IucGlwZSh0digwKSkuc3Vic2NyaWJlKCgpPT50aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25UeXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0''@;'; put 'put ''IHNlbGVjdGlvblR5cGUoZSl7ZSE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9ZSxlPT09d2wuTm9uZT9kZWxldGUgdGhpcy5jdXJyZW50OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1''@;'; put 'put ''cnJlbnQoZSl7dGhpcy51cGRhdGVDdXJyZW50KGUsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRTaW5nbGV9c2V0IGN1cnJlbnRTaW5nbGUoZSl7ZSE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0aGlzLl9jdXJyZW50U2luZ2xlPWUsZSYmKHRoaXMucHJldlNp''@;'; put 'put ''bmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGUpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT13bC5NdWx0aXx8''@;'; put 'put ''dGhpcy5fc2VsZWN0aW9uVHlwZT09PXdsLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdl''@;'; put 'put ''KCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChlLHIpe3RoaXMuX2N1cnJlbnQ9ZSxyJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoZSl9aXNTZWxlY3RlZChlKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlw''@;'; put 'put ''ZT09PXdsLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1lOnRoaXMuX3NlbGVjdGlvblR5cGU9PT13bC5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoZSk+PTB9c2V0U2VsZWN0ZWQoZSxyKXtjb25zdCBpPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihlKTotMTtzd2l0''@;'; put 'put ''Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSB3bC5Ob25lOmNhc2Ugd2wuU2luZ2xlOmJyZWFrO2Nhc2Ugd2wuTXVsdGk6aT49MCYmIXI/dGhpcy5kZXNlbGVjdEl0ZW0oaSk6aTwwJiZyJiZ0aGlzLnNlbGVjdEl0ZW0oZSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25U''@;'; put 'put ''eXBlIT09d2wuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgZT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGE9PiExPT09dGhpcy5pc0xvY2tlZChhKSk7cmV0dXJuIShlLmxlbmd0aDwxKSYmZS5maWx0ZXIoYT0+dGhpcy5jdXJyZW50LmluZGV4T2Yo''@;'; put 'put ''YSk+LTEpLmxlbmd0aD09PWUubGVuZ3RofWxvY2tJdGVtKGUscil7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGk9dGhpcy5faXRlbXMudHJhY2tCeShlKTshMD09PXI/dGhpcy5sb2NrZWRSZWZzLnB1c2goaSk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIo''@;'; put 'put ''YT0+aSE9PWEpfX1pc0xvY2tlZChlKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3Qgcj10aGlzLl9pdGVtcy50cmFja0J5KGUpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihyKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09d2wuTm9u''@;'; put 'put ''ZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXdsLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGU9Pntjb25zdCByPXRoaXMuY3VycmVudC5pbmRleE9mKGUpO3I+LTEmJiExPT09dGhpcy5pc0xvY2tlZChlKSYmdGhpcy5kZXNlbGVj''@;'; put 'put ''dEl0ZW0ocil9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChlPT57dGhpcy5jdXJyZW50LmluZGV4T2YoZSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGUpJiZ0aGlzLnNlbGVjdEl0ZW0oZSl9KSl9c2VsZWN0SXRlbShlKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChl''@;'; put 'put ''KSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeShlKSl9ZGVzZWxlY3RJdGVtKGUpe2lmKHRoaXMuY3VycmVudD10aGlzLmN1cnJlbnQuc2xpY2UoMCxlKS5jb25jYXQodGhpcy5jdXJyZW50LnNsaWNlKGUrMSkpLGU8dGhpcy5wcmV2U2VsZWN0aW9uUmVm''@;'; put 'put ''cy5sZW5ndGgpe2NvbnN0IHI9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UoZSwxKTt0aGlzLmxvY2tlZFJlZnM9dGhpcy5sb2NrZWRSZWZzLmZpbHRlcihpPT5pIT09clswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZSE9PXdsLk5vbmV9ZW1pdENo''@;'; put 'put ''YW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT13bC5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2luZ2xlKTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09d2wuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKGw1KSxPcihzNSkpfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGVxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fdmlldz1uZXcgeGkobkMuRElTUExBWSksdGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGUuZmlsdGVyUmVuZGVyU3RlcHMobnAuQ0FMQ1VMQVRFX01PREVfT04pLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KG5DLkNBTENVTEFURSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChlLmZpbHRlclJlbmRlclN0''@;'; put 'put ''ZXBzKG5wLkNBTENVTEFURV9NT0RFX09GRikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQobkMuRElTUExBWSkpKX1nZXQgdmlldygpe3JldHVybiB0aGlzLl92aWV3LmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1''@;'; put 'put ''YnNjcmliZSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoT3Iod3YpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx0cT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc2VsZWN0''@;'; put 'put ''aW9uPWV9b25TZWxlY3Rpb25DZWxsQ2xpY2soZSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZXx8IkxBQkVMIiE9PWUudGFyZ2V0LnRhZ05hbWUmJiJJTlBVVCIhPT1lLnRhcmdldC50YWdOYW1lJiZlLnRhcmdldC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpPy5jbGljaygpfX1yZXR1''@;'; put 'put ''cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShyQykpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsxJmUmJmt0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIHIub25TZWxlY3Rpb25DZWxsQ2xpY2soYSl9KX0sc3RhbmRhbG9uZTohMX0pLG59KSgpLHk0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGkpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5w''@;'; put 'put ''dXNoKGkuZmlsdGVyUmVuZGVyU3RlcHMobnAuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMu''@;'; put 'put ''c3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZXNldFN0YXRlKGUpe3RoaXMuc2V0V2lkdGgoZSksdGhpcy5zZXRIaWRkZW4oZSl9c2V0V2lkdGgoZSl7ZS5zdHJpY3RXaWR0aD90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxlQyk6dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZUMpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsZS53aWR0aCsicHgiKX1zZXRIaWRkZW4oZSl7ZS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQsd0EpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHdBKX1jbGVhcldpZHRoKCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZUMpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5u''@;'; put 'put ''YXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHppKSxXZShUbyksV2Uod3YpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLWNlbGwiXV0sc3RhbmRhbG9uZTohMX0p''@;'; put 'put ''LG59KSgpLERIPTAsVTY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSxDLFAsWSxKLGNlLGZlKXt0aGlzLnNlbGVjdGlvbj1lLHRoaXMucm93QWN0aW9uU2VydmljZT1yLHRoaXMuZ2xvYmFsRXhwYW5kYWJsZT1pLHRoaXMuZXhwYW5kPWEsdGhpcy5kZXRhaWxTZXJ2aWNl''@;'; put 'put ''PWMsdGhpcy5kaXNwbGF5TW9kZT1tLHRoaXMudmNyPUMsdGhpcy5jb21tb25TdHJpbmdzPUosdGhpcy5pdGVtcz1jZSx0aGlzLmRvY3VtZW50PWZlLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBZcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgWXIoITEpLHRoaXMuZGV0YWlsRGlzYWJs''@;'; put 'put ''ZWQ9ITEsdGhpcy5kZXRhaWxIaWRkZW49ITEsdGhpcy5za2VsZXRvbkxvYWRpbmc9ITEsdGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9OX1RZUEU9d2wsdGhpcy5pdGVtQ2hhbmdlcz1uZXcgVVQoMSksdGhpcy5fc2VsZWN0''@;'; put 'put ''ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIsdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAsREgrKyx0aGlzLmlkPSJjbHItZGctcm93IitESCx0aGlzLnJhZGlv''@;'; put 'put ''SWQ9ImNsci1kZy1yb3ctcmQiK0RILHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrREgsdGhpcy5leHBhbmRhYmxlSWQ9YS5leHBhbmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goVjkoYS5yZXBsYWNlLGEuZXhwYW5kQ2hhbmdlKS5zdWJzY3JpYmUoKFtBZSxIZV0pPT57''@;'; put 'put ''QWUmJkhlPyh0aGlzLnJlcGxhY2VkPSEwLFAuYWRkQ2xhc3MoWS5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSk6KHRoaXMucmVwbGFjZWQ9ITEsUC5yZW1vdmVDbGFzcyhZLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKX0pKX1nZXQgaXRlbSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9pdGVtfXNldCBpdGVtKGUpe3RoaXMuX2l0ZW09ZSx0aGlzLml0ZW1DaGFuZ2VzLm5leHQoZSksdGhpcy5jbHJEZ1NlbGVjdGFibGU9dGhpcy5fc2VsZWN0YWJsZX1nZXQgY2xyRGdTZWxlY3RhYmxlKCl7cmV0dXJuIXRoaXMuc2VsZWN0aW9uLmlzTG9ja2VkKHRoaXMu''@;'; put 'put ''aXRlbSl9c2V0IGNsckRnU2VsZWN0YWJsZShlKXt0aGlzLml0ZW0mJnRoaXMuc2VsZWN0aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwiZmFsc2UiPT09ZXx8ITE9PT1lKSx0aGlzLl9zZWxlY3RhYmxlPWV9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9''@;'; put 'put ''PT13bC5Ob25lP3RoaXMuX3NlbGVjdGVkOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy5pdGVtKX1zZXQgc2VsZWN0ZWQoZSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXdsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ9ZTooZSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlw''@;'; put 'put ''ZT09PXdsLk11bHRpP3RoaXMucmFuZ2VTZWxlY3QoKTp0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PW51bGwsdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0ZWQodGhpcy5pdGVtLGUpKX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGUpe3Ro''@;'; put 'put ''aXMuZXhwYW5kLmV4cGFuZGVkPWV9Z2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbE9wZW5MYWJlbD90aGlzLl9kZXRhaWxPcGVuTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMub3Blbn1zZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoZSl7dGhpcy5fZGV0''@;'; put 'put ''YWlsT3BlbkxhYmVsPWV9Z2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxDbG9zZUxhYmVsP3RoaXMuX2RldGFpbENsb3NlTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2V9c2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbChlKXt0aGlzLl9kZXRh''@;'; put 'put ''aWxDbG9zZUxhYmVsPWV9Z2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoKXtyZXR1cm4gdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw/dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0fXNldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKGUpe3RoaXMu''@;'; put 'put ''X3Jvd1NlbGVjdGlvbkxhYmVsPWV9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChRWCx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBwSChRWCx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhp''@;'; put 'put ''cy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxscy5mb3JFYWNoKGU9PntlLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChl''@;'; put 'put ''Ll92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShlPT57Zm9yKGxldCByPXRoaXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7cj4wO3ItLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNo''@;'; put 'put ''KCk7Zm9yKGxldCByPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7cj4wO3ItLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7ZT09PW5DLkNBTENVTEFURT8odGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2gocj0+e3IuX3ZpZXcuZGVzdHJveWVkfHx0''@;'; put 'put ''aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KHIuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChyPT57ci5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoci5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmlt''@;'; put 'put ''YXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX10b2dnbGUoZT0hdGhpcy5zZWxlY3RlZCl7''@;'; put 'put ''ZSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWUsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChlKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhp''@;'; put 'put ''cy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGUpe2Uuc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhP''@;'; put 'put ''ZigiRmlyZWZveCIpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhlPSF0aGlzLnNlbGVjdGVkLHIpeyJMQUJFTCIhPT1yLnRhcmdldC50YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2lu''@;'; put 'put ''Z2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGUpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGU9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7aWYoIWUpcmV0dXJuO2NvbnN0IHI9ZS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZCYmLTEhPT1yKXtjb25zdCBpPWUuaW5kZXhPZih0aGlzLml0ZW0pLGE9bmV3IFNldCh0aGlz''@;'; put 'put ''LnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChlLnNsaWNlKE1hdGgubWluKHIsaSksTWF0aC5tYXgocixpKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmEpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10''@;'; put 'put ''aGlzLml0ZW19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHJDKSxXZShKdyksV2UoUXcpLFdlKENBKSxXZSh0cCksV2UoZXEpLFdlKE5uKSxXZShUbyksV2UoemkpLFdlKGZzKSxXZShsNSksV2UoWHMpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6''@;'; put 'put ''bixzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiZzbyhpLHJwLDQpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIuZGdDZWxscz1hKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLHIpe2lmKDEmZSYmKFdhKHNILDUpLFdhKEEk''@;'; put 'put ''ZSw1KSxXYShrJGUsNSxObiksV2EoRCRlLDUsTm4pLFdhKEkkZSw1LE5uKSksMiZlKXtsZXQgaTtkaShpPWhpKCkpJiYoci5leHBhbmRBbmltYXRpb249aS5maXJzdCksZGkoaT1oaSgpKSYmKHIuZGV0YWlsQnV0dG9uPWkuZmlyc3QpLGRpKGk9aGkoKSkmJihyLl9zdGlja3lDZWxscz1pLmZp''@;'; put 'put ''cnN0KSxkaShpPWhpKCkpJiYoci5fc2Nyb2xsYWJsZUNlbGxzPWkuZmlyc3QpLGRpKGk9aGkoKSkmJihyLl9jYWxjdWxhdGVkQ2VsbHM9aS5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmKFJy''@;'; put 'put ''KCJhcmlhLW93bnMiLHIuaWQpLGJyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtcm93LXNrZWxldG9uIixyLnNrZWxldG9uTG9hZGluZykoImRhdGFncmlkLXNlbGVjdGVkIixyLnNlbGVjdGVkKSl9LGlucHV0czp7ZGV0YWlsRGlzYWJsZWQ6WzAsImNsckRnRGV0YWlsRGlzYWJsZWQi''@;'; put 'put ''LCJkZXRhaWxEaXNhYmxlZCJdLGRldGFpbEhpZGRlbjpbMCwiY2xyRGdEZXRhaWxIaWRkZW4iLCJkZXRhaWxIaWRkZW4iXSxza2VsZXRvbkxvYWRpbmc6WzAsImNsckRnU2tlbGV0b25Mb2FkaW5nIiwic2tlbGV0b25Mb2FkaW5nIl0saXRlbTpbMCwiY2xyRGdJdGVtIiwiaXRlbSJdLGNsckRn''@;'; put 'put ''U2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbMCwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6WzAsImNsckRnRXhwYW5kZWQiLCJleHBhbmRlZCJdLGNsckRnRGV0YWlsT3BlbkxhYmVsOiJjbHJEZ0RldGFpbE9wZW5MYWJlbCIsY2xyRGdEZXRhaWxD''@;'; put 'put ''bG9zZUxhYmVsOiJjbHJEZ0RldGFpbENsb3NlTGFiZWwiLGNsckRnUm93U2VsZWN0aW9uTGFiZWw6ImNsckRnUm93U2VsZWN0aW9uTGFiZWwifSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJEZ0V4cGFuZGVkQ2hhbmdl''@;'; put 'put ''In0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW0NBLHtwcm92aWRlOk9kLHVzZUV4aXN0aW5nOkNBfSx7cHJvdmlkZTp0QSx1c2VFeGlzdGluZzpDQX1dKV0sbmdDb250ZW50U2VsZWN0b3JzOkwkZSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50''@;'; put 'put ''IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbInN0aWNreUNlbGxzIiwiIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJF''@;'; put 'put ''eHBhbmRUcmlnZ2VyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwiY2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFz''@;'; put 'put ''dGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbImNsYXNzIiwiZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsImRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwi''@;'; put 'put ''LCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIiwzLCJuZ0NsYXNz''@;'; put 'put ''Il0sWzEsImRhdGFncmlkLXNjcm9sbGluZy1jZWxscyJdLFsiY2xhc3MiLCJza2VsZXRvbi1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxb''@;'; put 'put ''MSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwi''@;'; put 'put ''Y2xyLXNyLW9ubHkiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVs''@;'; put 'put ''bCIsMywiZm9yIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29s''@;'; put 'put ''dW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBl''@;'; put 'put ''IiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWls''@;'; put 'put ''LWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9w''@;'; put 'put ''ZW4iLCJjbGljayIsNCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLWNhcmV0LWljb24iXSxbMSwic2tlbGV0b24tbG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKFIkZSksY3QoMCxWJGUsMywyLCJkaXYiLDYpKDEsaiRlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLFUkZSwxLDEsbnVsbCw4''@;'; put 'put ''KSgzLFckZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsQ2MpKDUsYUtlLDE3LDE0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLENjKSxqbCg3LG51bGwsMikpLDImZSYmKHllKCJuZ0lmIixyLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxhZSgpLHllKCJuZ0lmIiwhci5zZWxlY3Rpb24ucm93''@;'; put 'put ''U2VsZWN0aW9uTW9kZSYmci5leHBhbmQuZXhwYW5kYWJsZSksYWUoKSx5ZSgibmdJZiIsIXIuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJiFyLmV4cGFuZC5leHBhbmRhYmxlKSl9LGRlcGVuZGVuY2llczpbUnUsbWEsa2QscnMscHMsWVgsWlgsemwsdmgsekYsaWwsUXMsc0gsU2gscnAs''@;'; put 'put ''dHEseTRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO3ZhciBGZD1mdW5jdGlvbihuKXtyZXR1cm4gbltuLldJRFRIPTBdPSJXSURUSCIsbltuLkhJRERFTj0xXT0iSElEREVOIixuW24uSU5JVElBTElaRT0yXT0iSU5JVElBTElaRSIsbn0oRmR8fHt9KTtjb25zdCBvUWU9T2JqZWN0LmtleXMo''@;'; put 'put ''RmQpLm1hcChuPT5GZFtuXSkuZmlsdGVyKG49Pm49PT1wYXJzZUludChuLDEwKSYmbiE9PUZkLklOSVRJQUxJWkUpO2xldCBjNT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlPW5ldyB4aShudWxsKSx0aGlzLl9jYWNo''@;'; put 'put ''ZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoZT0+ZS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoZT0+ZS5oaWRlYWJsZSkubGVuZ3RoPjB9Z2V0IHZpc2libGVDb2x1bW5zKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihlPT4hZS5oaWRkZW4pfWNhY2hlKCl7dGhpcy5fY2FjaGU9dGhpcy5jb2x1bW5zLm1hcChlPT57Y29uc3Qgcj17Li4uZS52YWx1ZX07cmV0dXJuIGRlbGV0ZSByLmNoYW5nZXMscn0pfWhhc0NhY2hlKCl7cmV0dXJuISF0aGlzLl9jYWNoZS5s''@;'; put 'put ''ZW5ndGh9cmVzZXRUb0xhc3RDYWNoZSgpe3RoaXMuX2NhY2hlLmZvckVhY2goKGUscik9Pntjb25zdCBpPXsuLi5lLGNoYW5nZXM6b1FlfTt0aGlzLmNvbHVtbnNbcl0ubmV4dChpKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGkpfSksdGhpcy5fY2FjaGU9W119ZW1pdFN0YXRlQ2hh''@;'; put 'put ''bmdlQXQoZSxyKXt0aGlzLmNvbHVtbnNbZV0mJnRoaXMuZW1pdFN0YXRlQ2hhbmdlKHRoaXMuY29sdW1uc1tlXSxyKX1lbWl0U3RhdGVDaGFuZ2UoZSxyKXtjb25zdCBpPXsuLi5lLnZhbHVlLC4uLnJ9O2UubmV4dChpKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGkpfX1yZXR1cm4g''@;'; put 'put ''bi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtjb25zdCBzUWU9e2l0ZW1TaXplOjMyLG1pbkJ1ZmZlclB4OjIwMCxtYXhCdWZmZXJQeDo0MDB9O2xldCBCcGU9KCgpPT57''@;'; put 'put ''Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSxDLFAsWSxKLGNlLGZlLEFlKXt0aGlzLmNoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5pdGVyYWJsZURpZmZlcnM9cix0aGlzLml0ZW1zPWksdGhpcy5uZ1pvbmU9YSx0aGlzLnJlbmRlcmVyMj1jLHRoaXMudGVtcGxhdGVSZWY9bSx0aGlz''@;'; put 'put ''LnZpZXdDb250YWluZXJSZWY9Qyx0aGlzLmRpcmVjdGlvbmFsaXR5PVAsdGhpcy5zY3JvbGxEaXNwYXRjaGVyPVksdGhpcy52aWV3cG9ydFJ1bGVyPUosdGhpcy5kYXRhZ3JpZD1jZSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWZlLHRoaXMuaW5qZWN0b3I9QWUsdGhpcy5yZW5kZXJlZFJhbmdlQ2hh''@;'; put 'put ''bmdlPW5ldyBZcix0aGlzLnBlcnNpc3RJdGVtcz0hMCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzPXsuLi5zUWV9LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnRvcEluZGV4PTAsdGhpcy5tdXRhdGlvbkNoYW5nZXM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoSGU9PntI''@;'; put 'put ''ZS5mb3JFYWNoKFhlPT57WGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtY29tcGFjdCIpJiZ0aGlzLml0ZW1TaXplPjI0JiYodGhpcy5pdGVtU2l6ZT0yNCl9KX0pLHRoaXMudmlld1JlcGVhdGVyPW5ldyBRZmUsdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzPXtjZGtWaXJ0''@;'; put 'put ''dWFsRm9yVHJhY2tCeTpIZT0+SGV9LGkuc21hcnRlblVwKCksY2UuZGV0YWlsU2VydmljZS5wcmV2ZW50Rm9jdXNTY3JvbGw9ITAsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWY9Y2UuZWwsdGhpcy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9MjAsdGhpcy5tdXRhdGlvbkNoYW5nZXMu''@;'; put 'put ''b2JzZXJ2ZSh0aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHthdHRyaWJ1dGVGaWx0ZXI6WyJjbGFzcyJdLGF0dHJpYnV0ZU9sZFZhbHVlOiEwfSksdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3k9bmV3IFdXZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5w''@;'; put 'put ''dXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1''@;'; put 'put ''dHMuY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoZSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZj1lLHRoaXMuaXRlbXMuYWxsPWUsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoZSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5PWUsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNk''@;'; put 'put ''a1ZpcnR1YWxGb3JUZW1wbGF0ZSgpe3JldHVybiB0aGlzPy5jZGtWaXJ0dWFsRm9ySW5wdXRzPy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShlKXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlPWUsdGhpcy51cGRh''@;'; put 'put ''dGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoZSl7dGhp''@;'; put 'put ''cy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT1udihlKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZX1zZXQg''@;'; put 'put ''aXRlbVNpemUoZSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZT1udihlKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWluQnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElu''@;'; put 'put ''cHV0cy5taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoZSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeD1udihlKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''Y2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgoZSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeD1udihlKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1zZXQg''@;'; put 'put ''ZGF0YVJhbmdlKGUpe2UmJih0aGlzLml0ZW1zLnNtYXJ0JiZ0aGlzLml0ZW1zLnNtYXJ0ZW5Eb3duKCksdGhpcy50b3RhbEl0ZW1zPWUudG90YWwsdGhpcy51cGRhdGVEYXRhUmFuZ2UoZS5za2lwLGUuZGF0YSkpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN9c2V0''@;'; put 'put ''IHRvdGFsSXRlbXMoZSl7dGhpcy5fdG90YWxJdGVtcz1lfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5qZWN0b3IucnVuSW5Db250ZXh0KCgpPT57dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ9dGhpcy5jcmVhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZCh0aGlzLmNoYW5n''@;'; put 'put ''ZURldGVjdG9yUmVmLHRoaXMubmdab25lLHRoaXMucmVuZGVyZXIyLHRoaXMuZGlyZWN0aW9uYWxpdHksdGhpcy5zY3JvbGxEaXNwYXRjaGVyLHRoaXMudmlld3BvcnRSdWxlcix0aGlzLmRhdGFncmlkRWxlbWVudFJlZix0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSksdGhpcy5jZGtWaXJ0''@;'; put 'put ''dWFsRm9yPWZ1bmN0aW9uIGNRZShuLHQsZSxyLGksYSl7aWYoK2ZQLm1ham9yPDE5KXJldHVybiBuZXcgZUgobix0LGUscixpLGEpO3tjb25zdCBjPUhvLmNyZWF0ZSh7cGFyZW50OkpuKHVjKSxwcm92aWRlcnM6W3twcm92aWRlOlJ3LHVzZVZhbHVlOml9XX0pO3JldHVybiBIby5jcmVhdGUo''@;'; put 'put ''e3BhcmVudDpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6Tm4sdXNlVmFsdWU6bn0se3Byb3ZpZGU6QWwsdXNlVmFsdWU6dH0se3Byb3ZpZGU6cDYsdXNlVmFsdWU6ZX0se3Byb3ZpZGU6UUssdXNlVmFsdWU6cn0se3Byb3ZpZGU6SmEsdXNlVmFsdWU6YX0se3Byb3ZpZGU6ZUgsdXNlQ2xhc3M6ZUh9''@;'; put 'put ''XX0pLmdldChlSCl9fSh0aGlzLnZpZXdDb250YWluZXJSZWYsdGhpcy50ZW1wbGF0ZVJlZix0aGlzLml0ZXJhYmxlRGlmZmVycyx0aGlzLnZpZXdSZXBlYXRlcix0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCx0aGlzLm5nWm9uZSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQubmdPbklu''@;'; put 'put ''aXQoKX0pLHRoaXMuZ3JpZFJvbGVFbGVtZW50PXRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9ImdyaWQiXScpLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaXRlbXMu''@;'; put 'put ''Y2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pdGVtcy5zbWFydCYmKHRoaXMuY2RrVmlydHVhbEZvci5jZGtWaXJ0dWFsRm9yT2Y9ZSl9KSx0aGlzLmNka1ZpcnR1YWxGb3IuZGF0YVN0cmVhbS5zdWJzY3JpYmUoZT0+e3RoaXMudXBkYXRlQXJpYVJvd0NvdW50KGUubGVuZ3RoKX0pLHRoaXMu''@;'; put 'put ''dmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKGU9Pnt0aGlzLnRvcEluZGV4PWV9KSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnN1YnNjcmliZShlPT57dGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlLmVtaXQo''@;'; put 'put ''ZSl9KSx0aGlzLmRhdGFncmlkLnJlZnJlc2guc3Vic2NyaWJlKGU9PntlLmZpbHRlcnMmJnRoaXMuc2Nyb2xsVG9JbmRleCgwKX0pLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudmlld1JlcGVhdGVyLmRldGFjaCgpfSkpfW5nRG9D''@;'; put 'put ''aGVjaygpe3RoaXMuY2RrVmlydHVhbEZvcj8ubmdEb0NoZWNrKCksdGhpcy51cGRhdGVBcmlhUm93SW5kZXhlcygpfW5nT25EZXN0cm95KCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5uZ09uRGVzdHJveSgpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5uZ09uRGVzdHJveSgpLHRoaXMubXV0''@;'; put 'put ''YXRpb25DaGFuZ2VzPy5kaXNjb25uZWN0KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+e2UudW5zdWJzY3JpYmUoKX0pfXNjcm9sbFVwKGUscj0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLnRvcEluZGV4LWUscil9c2Nyb2xsRG93bihlLHI9ImF1dG8iKXt0aGlzLnNj''@;'; put 'put ''cm9sbFRvSW5kZXgodGhpcy50b3BJbmRleCtlLHIpfXNjcm9sbFRvSW5kZXgoZSxyPSJhdXRvIil7dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ/LnNjcm9sbFRvSW5kZXgoZSxyKX11cGRhdGVEYXRhUmFuZ2UoZSxyKXtsZXQgaT10aGlzLmNka1ZpcnR1YWxGb3JPZjsoIXRoaXMucGVyc2lz''@;'; put 'put ''dEl0ZW1zfHwhaXx8aT8ubGVuZ3RoIT09dGhpcy50b3RhbEl0ZW1zKSYmKGk9QXJyYXkodGhpcy50b3RhbEl0ZW1zKSksaS5zcGxpY2UoZSxyLmxlbmd0aCwuLi5yKSx0aGlzLmNka1ZpcnR1YWxGb3JPZj1BcnJheS5mcm9tKGkpfXVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKXtpZih0aGlz''@;'; put 'put ''LmNka1ZpcnR1YWxGb3IpZm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzKSl0aGlzLmNka1ZpcnR1YWxGb3JbZV0hPT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbZV0mJih0aGlzLmNka1ZpcnR1YWxGb3JbZV09dGhpcy5jZGtWaXJ0dWFsRm9ySW5w''@;'; put 'put ''dXRzW2VdKX11cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl7dGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kmJnRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRl''@;'; put 'put ''bVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX11cGRhdGVBcmlhUm93Q291bnQoZSl7dGhpcy5ncmlkUm9sZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgi''@;'; put 'put ''YXJpYS1yb3djb3VudCIsZS50b1N0cmluZygpKX11cGRhdGVBcmlhUm93SW5kZXhlcygpe2ZvcihsZXQgZT0wO2U8dGhpcy52aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtlKyspe2NvbnN0IHI9dGhpcy52aWV3Q29udGFpbmVyUmVmLmdldChlKTtyLnJvb3ROb2Rlcy5maW5kKG09PiJDTFItREct''@;'; put 'put ''Uk9XIj09PW0udGFnTmFtZSk/LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJyb3ciXScpPy5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLChyLmNvbnRleHQuaW5kZXgrMSkudG9TdHJpbmcoKSl9fWNyZWF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydEZvckRhdGFncmlkKGUscixpLGEsYyxtLEMs''@;'; put 'put ''UCl7Y29uc3QgWT1DLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIiksSj1DLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIiksY2U9Qy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3dzIik7bGV0IEFlPTAs''@;'; put 'put ''SGU9MDtmdW5jdGlvbiBYZSgpe2NlLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke0FlfXB4KWAsY2Uuc3R5bGUuaGVpZ2h0PUhlLUFlKyJweCJ9Y29uc3QgcnQ9ZnVuY3Rpb24gbFFlKG4sdCxlLHIsaSxhLGMsbSxDKXtyZXR1cm4rZlAubWFqb3I8MTk/bmV3IFJ3KG4sdCxlLGksYSxj''@;'; put 'put ''LG0sQyk6SG8uY3JlYXRlKHtwYXJlbnQ6Sm4odWMpLHByb3ZpZGVyczpbe3Byb3ZpZGU6emksdXNlVmFsdWU6bn0se3Byb3ZpZGU6RnMsdXNlVmFsdWU6dH0se3Byb3ZpZGU6SmEsdXNlVmFsdWU6ZX0se3Byb3ZpZGU6VG8sdXNlVmFsdWU6cn0se3Byb3ZpZGU6ZTNlLHVzZVZhbHVlOml9LHtw''@;'; put 'put ''cm92aWRlOkl3LHVzZVZhbHVlOmF9LHtwcm92aWRlOkpGLHVzZVZhbHVlOmN9LHtwcm92aWRlOlFGLHVzZVZhbHVlOm19LHtwcm92aWRlOnIzZSx1c2VWYWx1ZTpDfSx7cHJvdmlkZTpSdyx1c2VDbGFzczpSd31dfSkuZ2V0KFJ3KX0oe25hdGl2ZUVsZW1lbnQ6WX0sZSxyLGksUCxhLGMsbSxu''@;'; put 'put ''dWxsKTtyZXR1cm4gcnQuX2NvbnRlbnRXcmFwcGVyPXtuYXRpdmVFbGVtZW50OntzdHlsZTp7c2V0IHRyYW5zZm9ybShkdCl7QWU9dm9pZCAwPT09ZHQ/MDorL3RyYW5zbGF0ZVlcKChbMC05XSspcHhcKS8uZXhlYyhkdCk/LlsxXSxYZSgpfX19fSxydC5zZXRUb3RhbENvbnRlbnRTaXplPWR0''@;'; put 'put ''PT57SGU9ZHQsSi5zdHlsZS5oZWlnaHQ9YCR7SGV9cHhgLFhlKCl9LHJ0fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShGcyksV2UocDYpLFdlKGw1KSxXZShKYSksV2UoVG8pLFdlKEFsKSxXZShObiksV2UoSXcpLFdlKEpGKSxXZShRRiksV2Uo''@;'; put 'put ''cmEoKCk9Plo2KSksV2UoYzUpLFdlKHVjKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNsclZpcnR1YWxTY3JvbGwiLCIiXSxbIiIsIkNsclZpcnR1YWxTY3JvbGwiLCIiXV0saW5wdXRzOntwZXJzaXN0SXRlbXM6WzAsImNsclZpcnR1YWxQZXJzaXN0SXRlbXMi''@;'; put 'put ''LCJwZXJzaXN0SXRlbXMiXSxjZGtWaXJ0dWFsRm9yT2Y6WzAsImNsclZpcnR1YWxSb3dzT2YiLCJjZGtWaXJ0dWFsRm9yT2YiXSxjZGtWaXJ0dWFsRm9yVHJhY2tCeTpbMCwiY2xyVmlydHVhbFJvd3NUcmFja0J5IiwiY2RrVmlydHVhbEZvclRyYWNrQnkiXSxjZGtWaXJ0dWFsRm9yVGVtcGxh''@;'; put 'put ''dGU6WzAsImNsclZpcnR1YWxSb3dzVGVtcGxhdGUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6WzAsImNsclZpcnR1YWxSb3dzVGVtcGxhdGVDYWNoZVNpemUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUiXSxpdGVtU2l6''@;'; put 'put ''ZTpbMCwiY2xyVmlydHVhbFJvd3NJdGVtU2l6ZSIsIml0ZW1TaXplIl0sbWluQnVmZmVyUHg6WzAsImNsclZpcnR1YWxSb3dzTWluQnVmZmVyUHgiLCJtaW5CdWZmZXJQeCJdLG1heEJ1ZmZlclB4OlswLCJjbHJWaXJ0dWFsUm93c01heEJ1ZmZlclB4IiwibWF4QnVmZmVyUHgiXSxkYXRhUmFu''@;'; put 'put ''Z2U6WzAsImNsclZpcnR1YWxEYXRhUmFuZ2UiLCJkYXRhUmFuZ2UiXX0sb3V0cHV0czp7cmVuZGVyZWRSYW5nZUNoYW5nZToicmVuZGVyZWRSYW5nZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W3NhKFtsNV0pXX0pLG59KSgpLGpwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9y''@;'; put 'put ''KGUscixpLGEpe3RoaXMuZmlsdGVycz1lLHRoaXMuc29ydD1yLHRoaXMucGFnZT1pLHRoaXMuZGVib3VuY2VyPWEsdGhpcy5jaGFuZ2U9dGhpcy5kZWJvdW5jZXIuY2hhbmdlLnBpcGUoWGEoKCk9PnRoaXMuc3RhdGUpKX1nZXQgc3RhdGUoKXtjb25zdCBlPXt9O3RoaXMucGFnZS5zaXplPjAm''@;'; put 'put ''JihlLnBhZ2U9e2Zyb206dGhpcy5wYWdlLmZpcnN0SXRlbSx0bzp0aGlzLnBhZ2UubGFzdEl0ZW0sc2l6ZTp0aGlzLnBhZ2Uuc2l6ZSxjdXJyZW50OnRoaXMucGFnZS5jdXJyZW50fSksdGhpcy5zb3J0LmNvbXBhcmF0b3ImJihlLnNvcnQ9dGhpcy5zb3J0LmNvbXBhcmF0b3IgaW5zdGFuY2Vv''@;'; put 'put ''ZiBBSD97Ynk6dGhpcy5zb3J0LmNvbXBhcmF0b3IucHJvcCxyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfTp7Ynk6dGhpcy5zb3J0LmNvbXBhcmF0b3IscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX0pO2NvbnN0IHI9dGhpcy5maWx0ZXJzLmdldEFjdGl2ZUZpbHRlcnMoKTtpZihyLmxlbmd0''@;'; put 'put ''aD4wKXtlLmZpbHRlcnM9W107Zm9yKGNvbnN0IGkgb2YgcillLmZpbHRlcnMucHVzaChpLnN0YXRlP2kuc3RhdGU6aSl9cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE9yKHM1KSxPcihrSCksT3IoajYpLE9yKF9BKSl9LG4uXHUwMjc1''@;'; put 'put ''cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVzY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbHVtbnNTZXJ2aWNlPWUsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0Q2VsbHNTdGF0ZSgpLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldENlbGxzU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9c2V0Q2VsbHNTdGF0ZSgpe3RoaXMuY2Vs''@;'; put 'put ''bHMubGVuZ3RoPT09dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmdGhpcy5jZWxscy5mb3JFYWNoKChlLHIpPT57dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW3JdJiZlLnJlc2V0U3RhdGUodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW3JdLnZhbHVlKX0pfX1yZXR1''@;'; put 'put ''cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShjNSkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiYo''@;'; put 'put ''c28oaSxuLDUpLHNvKGkseTQsNCkpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIuZXhwYW5kYWJsZVJvdz1hLmZpcnN0KSxkaShhPWhpKCkpJiYoci5jZWxscz1hKX19LHN0YW5kYWxvbmU6ITF9KSxufSkoKSxaNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMsUCxZ''@;'; put 'put ''LEosY2UsZmUsQWUsSGUsWGUpe3RoaXMub3JnYW5pemVyPWUsdGhpcy5pdGVtcz1yLHRoaXMuZXhwYW5kYWJsZVJvd3M9aSx0aGlzLnNlbGVjdGlvbj1hLHRoaXMucm93QWN0aW9uU2VydmljZT1jLHRoaXMuc3RhdGVQcm92aWRlcj1tLHRoaXMuZGlzcGxheU1vZGU9Qyx0aGlzLnJlbmRlcmVy''@;'; put 'put ''PVAsdGhpcy5kZXRhaWxTZXJ2aWNlPVksdGhpcy5kb2N1bWVudD1KLHRoaXMuZWw9Y2UsdGhpcy5wYWdlPWZlLHRoaXMuY29tbW9uU3RyaW5ncz1BZSx0aGlzLmtleU5hdmlnYXRpb249SGUsdGhpcy56b25lPVhlLHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21t''@;'; put 'put ''b25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IFlyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgWXIoITEpLHRoaXMucmVmcmVzaD1uZXcgWXIo''@;'; put 'put ''ITEpLHRoaXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD0hMSx0aGlzLmN1c3RvbVNlbGVjdEFsbD1uZXcgWXIsdGhpcy5TRUxFQ1RJT05fVFlQRT13bCx0aGlzLl9zdWJzY3JpcHRpb25zPVtdO2NvbnN0IHJ0PVB1KCk7dGhpcy5zZWxlY3RBbGxJZD0iY2xyLWRnLXNlbGVjdC1hbGwtIitydCxZ''@;'; put 'put ''LmlkPXJ0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhlKXt0aGlzLml0ZW1zLmxvYWRpbmc9ZX1zZXQgc2VsZWN0ZWQoZSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1lP3dsLk11bHRpOndsLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBk''@;'; put 'put ''YXRlQ3VycmVudChlLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoZSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT13bC5TaW5nbGUsZT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWU6dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRT''@;'; put 'put ''aW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oZSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249ZX1zZXQgcm93U2VsZWN0aW9uTW9kZShlKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWV9c2V0IHRyYWNrQnkoZSl7dGhpcy5pdGVtcy50cmFj''@;'; put 'put ''a0J5PWV9Z2V0IGFsbFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQoKX1zZXQgYWxsU2VsZWN0ZWQoZSl7dGhpcy5jdXN0b21TZWxlY3RBbGxFbmFibGVkP3RoaXMuY3VzdG9tU2VsZWN0QWxsLmVtaXQoZSk6dGhpcy5zZWxlY3Rpb24udG9nZ2xlQWxsKCl9''@;'; put 'put ''bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPXRoaXMucm93cy5tYXAocj0+ci5pdGVtKSk7Y29uc3QgZT10aGlzLnJvd3MuY2hhbmdlcy5waXBlKERkKHI9PldUKGdvKHIubWFwKGk9PmkuaXRlbSkpLFY5KHIubWFwKGk9PmkuaXRlbUNoYW5n''@;'; put 'put ''ZXMpKS5waXBlKHR2KDApKSkpKTt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goZS5zdWJzY3JpYmUocj0+e3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD1yKX0pLHRoaXMucm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e2ZvcihsZXQgcj10aGlzLl9kaXNwbGF5ZWRSb3dzLmxl''@;'; put 'put ''bmd0aC0xO3I+PTA7ci0tKXRoaXMuX2Rpc3BsYXllZFJvd3MuZ2V0KHIpLmRlc3Ryb3llZCYmdGhpcy5fZGlzcGxheWVkUm93cy5yZW1vdmUocik7aWYodGhpcy5yb3dzLmZvckVhY2gocj0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KHIuX3ZpZXcpfSksdGhpcy51cGRhdGVEZXRhaWxT''@;'; put 'put ''dGF0ZSgpLHRoaXMudmlydHVhbFNjcm9sbCl7Y29uc3Qgcj10aGlzLmtleU5hdmlnYXRpb24uZ2V0QWN0aXZlQ2VsbCgpO3ImJnRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9PnRoaXMua2V5TmF2aWdhdGlvbi5zZXRBY3RpdmVDZWxsKHIpKX0pfX0pKX1u''@;'; put 'put ''Z0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmlnYXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnVwZGF0ZURldGFpbFN0YXRlKCksdGhpcy5yZWZyZXNoLmVtaXQodGhpcy5zdGF0ZVByb3ZpZGVyLnN0YXRlKSx0aGlzLl9zdWJzY3JpcHRpb25z''@;'; put 'put ''LnB1c2godGhpcy5zdGF0ZVByb3ZpZGVyLmNoYW5nZS5zdWJzY3JpYmUoZT0+dGhpcy5yZWZyZXNoLmVtaXQoZSkpLHRoaXMuc2VsZWN0aW9uLmNoYW5nZS5zdWJzY3JpYmUoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT13bC5TaW5nbGU/dGhpcy5zaW5nbGVTZWxlY3RlZENo''@;'; put 'put ''YW5nZWQuZW1pdChlKTp0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09d2wuTXVsdGkmJnRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoZSl9KSx0aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdyaWQoKSx0aGlzLmNsckRnRGlz''@;'; put 'put ''YWJsZVBhZ2VGb2N1c3x8dGhpcy5kYXRhZ3JpZFRhYmxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoZT0+e2ZvcihsZXQgcj10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5ndGg7cj4wO3ItLSl0aGlzLl9wcm9qZWN0ZWRE''@;'; put 'put ''aXNwbGF5Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IHI9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtyPjA7ci0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IHI9dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDty''@;'; put 'put ''PjA7ci0tKXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IHI9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7cj4wO3ItLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2U9PT1uQy5ESVNQTEFZPyh0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChyPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KHIuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2gocj0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KHIuX3Zp''@;'; put 'put ''ZXcpfSkpOih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChyPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmluc2VydChyLl92aWV3KX0pLHRoaXMucm93''@;'; put 'put ''cy5mb3JFYWNoKHI9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KHIuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChPZih0aGlzLmRvY3VtZW50LmJvZHksImtleWRvd24iKS5zdWJzY3JpYmUoZT0+eyJT''@;'; put 'put ''aGlmdCI9PT1lLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSxPZih0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGU9PnsiU2hpZnQiPT09ZS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX10b2dnbGVBbGxTZWxlY3RlZChlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZWxlY3RBbGxDaGVja2JveD8ubmF0aXZlRWxlbWVudC5jbGljaygpfXJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgp''@;'; put 'put ''fXVwZGF0ZURldGFpbFN0YXRlKCl7aWYodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlJiZ0aGlzLmRldGFpbFNlcnZpY2UuaXNPcGVuKXtjb25zdCBlPXRoaXMucm93cy5maW5kKHI9PnRoaXMuaXRlbXMudHJhY2tCeShyLml0ZW0pPT09dGhpcy5pdGVtcy50cmFja0J5KHRoaXMuZGV0YWlsU2Vy''@;'; put 'put ''dmljZS5zdGF0ZSkpO2U/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oZS5pdGVtLGUuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMudmlydHVhbFNjcm9sbHx8c2V0VGltZW91dCgoKT0+e3RoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfSl9fWRhdGFDaGFuZ2VkKCl7dGhpcy5pdGVt''@;'; put 'put ''cy5yZWZyZXNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHd2KSxXZShsNSksV2UoUXcpLFdlKHJDKSxXZShKdyksV2UoanBlKSxXZShlcSksV2UoVG8pLFdlKHRwKSxXZShYcyksV2UoemkpLFdlKGo2KSxXZShmcyksV2UoeEgpLFdlKEph''@;'; put 'put ''KSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiYoc28oaSxCcGUsNSksc28oaSx0Qyw1KSxzbyhpLHFYLDUpLHNvKGksQ3YsNCksc28oaSxVNiw0KSksMiZlKXtsZXQgYTtk''@;'; put 'put ''aShhPWhpKCkpJiYoci52aXJ0dWFsU2Nyb2xsPWEuZmlyc3QpLGRpKGE9aGkoKSkmJihyLml0ZXJhdG9yPWEuZmlyc3QpLGRpKGE9aGkoKSkmJihyLnBsYWNlaG9sZGVyPWEuZmlyc3QpLGRpKGE9aGkoKSkmJihyLmNvbHVtbnM9YSksZGkoYT1oaSgpKSYmKHIucm93cz1hKX19LHZpZXdRdWVy''@;'; put 'put ''eTpmdW5jdGlvbihlLHIpe2lmKDEmZSYmKFdhKG9LZSw1LHppKSxXYShzS2UsNSx6aSksV2EobEtlLDUsTm4pLFdhKGNLZSw1LE5uKSxXYSh1S2UsNSxObiksV2EoZEtlLDUsTm4pLFdhKGhLZSw1LE5uKSxXYShmS2UsNSkpLDImZSl7bGV0IGk7ZGkoaT1oaSgpKSYmKHIuZGF0YWdyaWQ9aS5m''@;'; put 'put ''aXJzdCksZGkoaT1oaSgpKSYmKHIuZGF0YWdyaWRUYWJsZT1pLmZpcnN0KSxkaShpPWhpKCkpJiYoci5zY3JvbGxhYmxlQ29sdW1ucz1pLmZpcnN0KSxkaShpPWhpKCkpJiYoci5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aS5maXJzdCksZGkoaT1oaSgpKSYmKHIuX3Byb2plY3RlZENhbGN1''@;'; put 'put ''bGF0aW9uQ29sdW1ucz1pLmZpcnN0KSxkaShpPWhpKCkpJiYoci5fZGlzcGxheWVkUm93cz1pLmZpcnN0KSxkaShpPWhpKCkpJiYoci5fY2FsY3VsYXRpb25Sb3dzPWkuZmlyc3QpLGRpKGk9aGkoKSkmJihyLnNlbGVjdEFsbENoZWNrYm94PWkuZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixyLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntsb2FkaW5nTW9yZUl0ZW1zOlswLCJjbHJMb2FkaW5nTW9yZUl0ZW1zIiwibG9hZGluZ01vcmVJdGVtcyJd''@;'; put 'put ''LGNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCIsY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwiLGNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6ImNsckRldGFp''@;'; put 'put ''bEV4cGFuZGFibGVBcmlhTGFiZWwiLGNsckRnRGlzYWJsZVBhZ2VGb2N1czoiY2xyRGdEaXNhYmxlUGFnZUZvY3VzIixjdXN0b21TZWxlY3RBbGxFbmFibGVkOlswLCJjbHJEZ0N1c3RvbVNlbGVjdEFsbEVuYWJsZWQiLCJjdXN0b21TZWxlY3RBbGxFbmFibGVkIl0sbG9hZGluZzpbMCwiY2xy''@;'; put 'put ''RGdMb2FkaW5nIiwibG9hZGluZyJdLHNlbGVjdGVkOlswLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxzaW5nbGVTZWxlY3RlZDpbMCwiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVjdGlv''@;'; put 'put ''biIscm93U2VsZWN0aW9uTW9kZTpbMCwiY2xyRGdSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb25Nb2RlIl0sdHJhY2tCeTpbMCwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsc2luZ2xlU2VsZWN0''@;'; put 'put ''ZWRDaGFuZ2VkOiJjbHJEZ1NpbmdsZVNlbGVjdGVkQ2hhbmdlIixyZWZyZXNoOiJjbHJEZ1JlZnJlc2giLGN1c3RvbVNlbGVjdEFsbDoiY2xyRGdDdXN0b21TZWxlY3RBbGwifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbckMsa0gsczUsajYsbDUsd3YsSncsUXcsX0EsdHAsanBlLFhY''@;'; put 'put ''LGM1LGVxLHhIXSldLG5nQ29udGVudFNlbGVjdG9yczpnS2UsZGVjbHM6MzUsdmFyczo5LGNvbnN0czpbWyJkYXRhZ3JpZCIsIiJdLFsiZGF0YWdyaWRUYWJsZSIsIiJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxbImRpc3BsYXllZFJvd3MiLCIiXSxbInByb2plY3RlZENhbGN1''@;'; put 'put ''bGF0aW9uQ29sdW1ucyIsIiJdLFsiY2FsY3VsYXRpb25Sb3dzIiwiIl0sWyJzZWxlY3RBbGxDaGVja2JveCIsIiJdLFsxLCJkYXRhZ3JpZC1vdXRlci13cmFwcGVyIl0sWzEsImRhdGFncmlkLWlubmVyLXdyYXBwZXIiXSxbMSwiZGF0YWdyaWQiXSxbMSwiZGF0YWdyaWQtdGFibGUtd3JhcHBl''@;'; put 'put ''ciJdLFsicm9sZSIsImdyaWQiLCJ0YWJpbmRleCIsIi0xIiwxLCJkYXRhZ3JpZC10YWJsZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJkYXRhZ3JpZC1oZWFkZXIiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdyJdLFsxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93''@;'; put 'put ''LWZsZXgiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5o''@;'; put 'put ''ZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQt''@;'; put 'put ''Y29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiXSxbInJvbGUiLCJw''@;'; put 'put ''cmVzZW50YXRpb24iLDEsImRhdGFncmlkLXJvd3MiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWxvYWRpbmciLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFn''@;'; put 'put ''cmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9kZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29s''@;'; put 'put ''LW51bGwiLDMsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJk''@;'; put 'put ''YXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsxLCJkYXRhZ3JpZC1yb3ctbG9hZGlu''@;'; put 'put ''ZyJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsImRhdGFncmlkLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYShwS2UpLEJyKDApLHJlKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJkaXYiLDksMCkoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSwxKSg4LCJkaXYiLDEyKSg5''@;'; put 'put ''LCJkaXYiLDEzKSgxMCwiZGl2IiwxNCkoMTEsImRpdiIsMTUpLGN0KDEyLHZLZSwzLDEsImRpdiIsMTYpKDEzLHlLZSw0LDEsImRpdiIsMTcpKDE0LF9LZSw0LDEsImRpdiIsMTgpKDE1LGJLZSw0LDEsImRpdiIsMTkpLGllKCkscmUoMTYsImRpdiIsMjApLGpsKDE3LG51bGwsMiksaWUoKSgp''@;'; put 'put ''KCkoKSxyZSgxOSwiZGl2IiwyMSksY3QoMjAsd0tlLDUsMSwiY2xyLWRnLXJvdyIsMjIpLGpsKDIxLG51bGwsMyksY3QoMjMsQ0tlLDUsMSwiY2xyLWRnLXJvdyIsMjIpLEJyKDI0LDEpLGN0KDI1LFNLZSwxLDAsImNsci1kZy1wbGFjZWhvbGRlciIsMjMpLGllKCkoKSgpKCksQnIoMjYsMiks''@;'; put 'put ''Y3QoMjcsTUtlLDMsMCwiZGl2IiwyNCksaWUoKSxCcigyOCwzKSxpZSgpLHJlKDI5LCJkaXYiLDI1KSgzMCwiZGl2IiwyNiksamwoMzEsbnVsbCw0KSxpZSgpLGpsKDMzLG51bGwsNSksaWUoKSksMiZlJiYoYWUoMyksUnIoImFyaWEtaGlkZGVuIiwhIXIuZGV0YWlsU2VydmljZS5pc09wZW58''@;'; put 'put ''fG51bGwpLGFlKDkpLHllKCJuZ0lmIixyLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ci5TRUxFQ1RJT05fVFlQRS5NdWx0aSksYWUoKSx5ZSgibmdJZiIsci5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXIuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxhZSgpLHllKCJuZ0lmIixyLnJvd0Fj''@;'; put 'put ''dGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksYWUoKSx5ZSgibmdJZiIsci5leHBhbmRhYmxlUm93cy5oYXNFeHBhbmRhYmxlUm93fHxyLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksYWUoNSkseWUoIm5nSWYiLHIubG9hZGluZ01vcmVJdGVtcyksYWUoMykseWUoIm5nSWYiLHIubG9hZGlu''@;'; put 'put ''Z01vcmVJdGVtcyksYWUoMikseWUoIm5nSWYiLCFyLnBsYWNlaG9sZGVyKSxhZSgyKSx5ZSgibmdJZiIsci5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbWEscHMsdmgsaWwsUXMsU2gscnAscVgsVTYsdHEseTQsVzYsX3YsYnZdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2NvbnN0IGZRZT1u''@;'; put 'put ''PT5uO2xldCB6cGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIpe3RoaXMuY29tbW9uU3RyaW5ncz1lLHRoaXMuY29sdW1uc1NlcnZpY2U9cix0aGlzLmFsbFNlbGVjdGVkPW5ldyBZcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFi''@;'; put 'put ''bGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoZT0+ZS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RBbGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goZT0+dGhpcy5jb2x1bW5zU2VydmljZS5l''@;'; put 'put ''bWl0U3RhdGVDaGFuZ2UoZSx7aGlkZGVuOiExLGNoYW5nZXM6W0ZkLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihlPT5lLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJu''@;'; put 'put ''IG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoZnMpLFdlKGM1KSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXSxvdXRwdXRzOntjbHJBbGxTZWxlY3RlZDoiY2xyQWxsU2VsZWN0ZWQi''@;'; put 'put ''fSxzdGFuZGFsb25lOiExLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInN3aXRjaC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihyZSgwLCJidXR0b24i''@;'; put 'put ''LDApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gci5zZWxlY3RBbGwoKX0pLFRlKDEpLGllKCkpLDImZSYmKHllKCJkaXNhYmxlZCIsci5hbGxIaWRlYWJsZXNWaXNpYmxlKSxhZSgpLE1yKCIgIixyLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKSl9LGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pLG59KSgpLFVwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLmNvbW1vblN0cmluZ3M9ZSx0aGlzLmNvbHVtbnNTZXJ2aWNlPXIsdGhpcy5wb3BvdmVySWQ9UHUoKSx0aGlzLm9wZW5TdGF0ZT0hMSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6SjEuVkVSVElD''@;'; put 'put ''QUwsc2lkZTpIZi5CRUZPUkUsYW5jaG9yOlVzLlNUQVJULGNvbnRlbnQ6VXMuU1RBUlR9LHRoaXMudHJhY2tCeUZuPWZRZSx0aGlzLnN1YnNjcmlwdGlvbj1pLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMub3BlblN0YXRlPWEpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoZSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9ZX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihyPT5yLnZhbHVlLmhpZGVhYmxlKS5t''@;'; put 'put ''YXAocj0+ci52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihyPT4h''@;'; put 'put ''ci5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoZSxyKXtjb25zdCBpPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoYT0+YS52YWx1ZT09PWUpWzBdO3RoaXMuY29sdW1uc1NlcnZp''@;'; put 'put ''Y2UuZW1pdFN0YXRlQ2hhbmdlKGkse2hpZGRlbjpyLGNoYW5nZXM6W0ZkLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZv''@;'; put 'put ''Y3VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGZzKSxXZShjNSksV2UoZ2MpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUscil7aWYo''@;'; put 'put ''MSZlJiZXYShFS2UsNSx6aSksMiZlKXtsZXQgaTtkaShpPWhpKCkpJiYoci5hbGxTZWxlY3RlZEVsZW1lbnQ9aS5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImNvbHVtbi1zd2l0Y2gtd3JhcHBlciIsITApKCJhY3RpdmUiLHIub3BlblN0''@;'; put 'put ''YXRlKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbTWYoW3I1XSldLGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWyJhbGxTZWxlY3RlZCIsIiJdLFsicm9sZSIsImJ1dHRvbiIsInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIs''@;'; put 'put ''IiIsMSwiYnRuIiwiYnRuLXNtIiwiY29sdW1uLXRvZ2dsZS0tYWN0aW9uIl0sWyJjbGFzcyIsImNvbHVtbi1zd2l0Y2giLCJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwzLCJpZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3Zl''@;'; put 'put ''ckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwxLCJjb2x1bW4tc3dpdGNoIiwzLCJpZCJdLFsxLCJzd2l0Y2gtaGVhZGVyIl0sWyJ0YWJpbmRleCIsIi0xIiwxLCJj''@;'; put 'put ''bHItc3Itb25seSJdLFsiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJ0b2dnbGUtc3dpdGNoLWNsb3NlLWJ1dHRvbiJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbMSwi''@;'; put 'put ''Y2xyLXNyLW9ubHkiXSxbMSwic3dpdGNoLWNvbnRlbnQiLCJsaXN0LXVuc3R5bGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJzd2l0Y2gtZm9vdGVyIl0sWzMsImNsckFsbFNlbGVjdGVkIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIs''@;'; put 'put ''MywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYocmUoMCwiYnV0dG9uIiwxKSxUZSgxKSxpZSgpLGN0KDIsa0tlLDE1LDksImRpdiIsMikpLDImZSYmKFJyKCJhcmlhLWNvbnRy''@;'; put 'put ''b2xzIixyLnBvcG92ZXJJZCkoImFyaWEtZXhwYW5kZWQiLHIub3BlblN0YXRlKSgiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSxhZSgpLE1yKCIgIixyLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLGFlKCkseWUoImNsclBvcG92ZXJDb250ZW50IixyLm9wZW5TdGF0ZSkoImNs''@;'; put 'put ''clBvcG92ZXJDb250ZW50QXQiLHIuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSl9LGRlcGVuZGVuY2llczpbaHMsa2QsWXcscnMscHMsQ2gsYjIsdmgsaWwsUXMsb0Es''@;'; put 'put ''ajNlLGNBLGxBLHpwZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWnBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5leHBhbmRhYmxlUm93c0NvdW50PWUsZSYmZS5yZWdpc3RlcigpfW5nT25EZXN0cm95KCl7dGhpcy5leHBhbmRhYmxlUm93c0NvdW50JiZ0aGlzLmV4cGFu''@;'; put 'put ''ZGFibGVSb3dzQ291bnQudW5yZWdpc3RlcigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShRdyw4KSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNscklmRXhwYW5kZWQiLCIiXV0sc3RhbmRhbG9uZTohMX0pLG59''@;'; put 'put ''KSgpLElIPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5zZWxlY3Rpb249ZSx0aGlzLmRldGFpbFNlcnZpY2U9cix0aGlzLmNvbHVtbnNTZXJ2aWNlPWksdGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5TRUxFQ1RJT05fVFlQRT13bH1nZXQgaGFzSGlkZWFibGVDb2x1''@;'; put 'put ''bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShyQyksV2UodHApLFdlKGM1KSxXZShmcykpfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpb''@;'; put 'put ''WyJjbHItZGctZm9vdGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiZicigiZGF0YWdyaWQtZm9vdGVyIiwhMCl9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOlJLZSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLXNlbGVjdCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWZvb3Rlci1k''@;'; put 'put ''ZXNjcmlwdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKElLZSksY3QoMCxMS2UsOCwyLCJuZy1jb250YWluZXIiLDApKDEsUEtlLDQsMSwibmctY29udGFpbmVyIiwwKSxCcigyKSksMiZlJiYoeWUoIm5nSWYiLHIuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1yLlNF''@;'; put 'put ''TEVDVElPTl9UWVBFLk11bHRpJiZyLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aD4wKSxhZSgpLHllKCJuZ0lmIiwhci5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W21hLHBzLENoLGIyLFVwZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7Y29uc3QgbnE9bmV3IHdyKCJD''@;'; put 'put ''T0xVTU5fU1RBVEUiKSx2UWU9e3Byb3ZpZGU6bnEsdXNlRmFjdG9yeTpmdW5jdGlvbiBtUWUoKXtyZXR1cm4gbmV3IHhpKHtjaGFuZ2VzOltdfSl9fTtsZXQgU0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnBhZ2U9ZSx0aGlzLnBhZ2VTaXplT3B0aW9uc0lkPVB1KCl9bmdP''@;'; put 'put ''bkluaXQoKXsoIXRoaXMucGFnZVNpemVPcHRpb25zfHwwPT09dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoKSYmKHRoaXMucGFnZVNpemVPcHRpb25zPVt0aGlzLnBhZ2Uuc2l6ZV0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShqNikpfSxu''@;'; put 'put ''Llx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGctcGFnZS1zaXplIl1dLGlucHV0czp7cGFnZVNpemVPcHRpb25zOlswLCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbMCwiY2xyUGFnZVNpemVPcHRpb25zSWQi''@;'; put 'put ''LCJwYWdlU2l6ZU9wdGlvbnNJZCJdfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpDbyxkZWNsczo1LHZhcnM6Nixjb25zdHM6W1szLCJmb3IiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWzMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9kZWwiXSxbMywibmdWYWx1ZSIs''@;'; put 'put ''NCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLHJlKDAsImxhYmVsIiwwKSxCcigxKSxpZSgpLHJlKDIsImRpdiIsMSkoMywic2VsZWN0IiwyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oYSl7cmV0dXJuIHVp''@;'; put 'put ''KHIucGFnZS5zaXplLGEpfHwoci5wYWdlLnNpemU9YSksYX0pLGN0KDQsRktlLDIsMiwib3B0aW9uIiwzKSxpZSgpKCkpLDImZSYmKHllKCJmb3IiLHIucGFnZVNpemVPcHRpb25zSWQpLGFlKDMpLGJyKCJjbHItcGFnZS1zaXplLXNlbGVjdCIsITApLHllKCJpZCIsci5wYWdlU2l6ZU9wdGlv''@;'; put 'put ''bnNJZCksbGkoIm5nTW9kZWwiLHIucGFnZS5zaXplKSxhZSgpLHllKCJuZ0Zvck9mIixyLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W2hzLHBzLFJmLExmLElmLGlsLFFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxSSD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixp''@;'; put 'put ''KXt0aGlzLnBhZ2U9ZSx0aGlzLmNvbW1vblN0cmluZ3M9cix0aGlzLmRldGFpbFNlcnZpY2U9aSx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBZcighMSksZS5hY3RpdmF0ZWQ9ITB9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMucGFnZS5zaXplfXNldCBwYWdlU2l6ZShlKXsibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGUmJih0aGlzLnBhZ2Uuc2l6ZT1lKX1nZXQgdG90YWxJdGVtcygpe3JldHVybiB0aGlzLnBhZ2UudG90YWxJdGVtc31zZXQgdG90YWxJdGVtcyhlKXsibnVtYmVyIj09dHlwZW9mIGUmJih0aGlzLnBhZ2UudG90YWxJdGVtcz1lKX1nZXQgbGFzdFBhZ2UoKXtyZXR1cm4gdGhpcy5w''@;'; put 'put ''YWdlLmxhc3R9c2V0IGxhc3RQYWdlKGUpeyJudW1iZXIiPT10eXBlb2YgZSYmKHRoaXMucGFnZS5sYXN0PWUpfWdldCBjdXJyZW50UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UuY3VycmVudH1zZXQgY3VycmVudFBhZ2UoZSl7Im51bWJlciI9PXR5cGVvZiBlJiYodGhpcy5wYWdlLmN1cnJlbnQ9''@;'; put 'put ''ZSl9Z2V0IGZpcnN0SXRlbSgpe3JldHVybiB0aGlzLnBhZ2UuZmlyc3RJdGVtfWdldCBsYXN0SXRlbSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdEl0ZW19Z2V0IG1pZGRsZVBhZ2VzKCl7Y29uc3QgZT1bXTtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnQ+MSYmZS5wdXNoKHRoaXMucGFnZS5jdXJy''@;'; put 'put ''ZW50LTEpLGUucHVzaCh0aGlzLnBhZ2UuY3VycmVudCksdGhpcy5wYWdlLmN1cnJlbnQ8dGhpcy5wYWdlLmxhc3QmJmUucHVzaCh0aGlzLnBhZ2UuY3VycmVudCsxKSxlfW5nT25Jbml0KCl7dGhpcy5wYWdlLnNpemV8fCh0aGlzLnBhZ2Uuc2l6ZT0xMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlv''@;'; put 'put ''bj10aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmliZShlPT50aGlzLmN1cnJlbnRDaGFuZ2VkLmVtaXQoZSkpfW5nT25EZXN0cm95KCl7dGhpcy5wYWdlLnJlc2V0UGFnZVNpemUoITApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb24mJnRoaXMuX3BhZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1w''@;'; put 'put ''cmV2aW91cygpe3RoaXMucGFnZS5wcmV2aW91cygpfW5leHQoKXt0aGlzLnBhZ2UubmV4dCgpfXZlcmlmeUN1cnJlbnRQYWdlKGUpe3BhcnNlSW50KGUudGFyZ2V0LnZhbHVlLDEwKSE9PXRoaXMucGFnZS5jdXJyZW50JiYoZS50YXJnZXQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnQpfXVwZGF0''@;'; put 'put ''ZUN1cnJlbnRQYWdlKGUpe2NvbnN0IHI9cGFyc2VJbnQoZS50YXJnZXQudmFsdWUsMTApO2lzTmFOKHIpfHwodGhpcy5wYWdlLmN1cnJlbnQ9cjwxPzE6cj50aGlzLnBhZ2UubGFzdD90aGlzLnBhZ2UubGFzdDpyKSx0aGlzLmN1cnJlbnRQYWdlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1''@;'; put 'put ''ZT10aGlzLnBhZ2UuY3VycmVudC50b1N0cmluZygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShqNiksV2UoZnMpLFdlKHRwKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1dLGNvbnRl''@;'; put 'put ''bnRRdWVyaWVzOmZ1bmN0aW9uKGUscixpKXtpZigxJmUmJnNvKGksU0EsNSksMiZlKXtsZXQgYTtkaShhPWhpKCkpJiYoci5fcGFnZVNpemVDb21wb25lbnQ9YS5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxyKXtpZigxJmUmJldhKEhLZSw1KSwyJmUpe2xldCBpO2RpKGk9aGkoKSkm''@;'; put 'put ''JihyLmN1cnJlbnRQYWdlSW5wdXRSZWY9aS5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbMCwiY2xyRGdQYWdlSW5wdXREaXNhYmxlZCIsImRpc2Fi''@;'; put 'put ''bGVDdXJyZW50UGFnZUlucHV0Il0scGFnZVNpemU6WzAsImNsckRnUGFnZVNpemUiLCJwYWdlU2l6ZSJdLHRvdGFsSXRlbXM6WzAsImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbMCwiY2xyRGdMYXN0UGFnZSIsImxhc3RQYWdlIl0sY3VycmVudFBhZ2U6WzAsImNs''@;'; put 'put ''ckRnUGFnZSIsImN1cnJlbnRQYWdlIl19LG91dHB1dHM6e2N1cnJlbnRDaGFuZ2VkOiJjbHJEZ1BhZ2VDaGFuZ2UifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpWS2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInJlYWRPbmx5IiwiIl0sWyJjdXJyZW50UGFnZUlucHV0Iiwi''@;'; put 'put ''Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1zaXplIiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24iXSxbImNsYXNzIiwicGFnaW5hdGlvbi1saXN0Iiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tc2l6ZSJdLFsxLCJwYWdpbmF0aW9uLWxpc3QiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tZmlyc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJkb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwzLCJj''@;'; put 'put ''bGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsidHlwZSIsInRleHQiLCJjbGFzcyIsInBhZ2luYXRpb24tY3VycmVudCBjbHItaW5wdXQiLDMsInNpemUiLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJibHVyIiw0LCJuZ0lmIiwibmdJZkVs''@;'; put 'put ''c2UiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNo''@;'; put 'put ''YXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsidHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywia2V5ZG93bi5lbnRlciIsImJsdXIiLCJzaXplIiwidmFsdWUiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoTktlKSxjdCgwLFdLZSw1LDIsIm5nLWNvbnRhaW5lciIsMikoMSxaS2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMikpLDImZSYmKHllKCJuZ0lmIiwhci5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksYWUoKSx5ZSgibmdJZiIsci5kZXRh''@;'; put 'put ''aWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W21hLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxTdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXIsdGhpcy5kb21BZGFwdGVyPWEsdGhpcy5jb2x1bW5S''@;'; put 'put ''ZXNpemVyU2VydmljZT1jLHRoaXMuY29sdW1uc1NlcnZpY2U9bSx0aGlzLmNvbHVtblN0YXRlPUMsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBZcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaS5m''@;'; put 'put ''aWx0ZXJSZW5kZXJTdGVwcyhucC5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9Z2V0Q29sdW1uV2lkdGhTdGF0ZSgpe2NvbnN0IGU9dGhpcy5k''@;'; put 'put ''ZXRlY3RTdHJpY3RXaWR0aCgpO3JldHVybnt3aWR0aDp0aGlzLmNvbXB1dGVXaWR0aChlKSxzdHJpY3RXaWR0aDplfX1zZXRDb2x1bW5TdGF0ZShlKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZV09dGhpcy5jb2x1bW5TdGF0ZX1zZXRXaWR0aChlKXtlLnN0cmljdFdpZHRoPyh0aGlz''@;'; put 'put ''LmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmKHRoaXMucmVzaXplRW1pdHRlci5lbWl0KGUud2lkdGgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsZS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSExKSx0aGlzLnJlbmRlcmVy''@;'; put 'put ''LmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxlQyksdGhpcy5hdXRvU2V0PSExKToodGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZUMpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsZS53aWR0''@;'; put 'put ''aCsicHgiKSx0aGlzLndpZHRoU2V0PSEwLHRoaXMuYXV0b1NldD0hMCl9c2V0SGlkZGVuKGUpe2UuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHdBKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx3QSl9''@;'; put 'put ''Y2xlYXJXaWR0aCgpe3RoaXMud2lkdGhTZXQmJiF0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKSx0aGlzLmF1dG9TZXQmJnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3Mo''@;'; put 'put ''dGhpcy5lbC5uYXRpdmVFbGVtZW50LGVDKX1kZXRlY3RTdHJpY3RXaWR0aCgpe3JldHVybiB0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeT90aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLndpZHRoQWZ0ZXJSZXNpemU6dGhpcy5hdXRvU2V0PzA6dGhpcy5kb21BZGFwdGVyLnVz''@;'; put 'put ''ZXJEZWZpbmVkV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1jb21wdXRlV2lkdGgoZSl7bGV0IHI9ZTtyZXR1cm4gcnx8KHI9dGhpcy5kb21BZGFwdGVyLnNjcm9sbFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpLHJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1''@;'; put 'put ''cm4gbmV3KGV8fG4pKFdlKHppKSxXZShUbyksV2Uod3YpLFdlKEk2KSxXZShLWCksV2UoYzUpLFdlKG5xKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sb3V0cHV0czp7cmVzaXplRW1pdHRlcjoiY2xyRGdDb2x1bW5SZXNpemUifSxzdGFu''@;'; put 'put ''ZGFsb25lOiExLGZlYXR1cmVzOltzYShbS1gsdlFlXSldfSksbn0pKCksd1FlPSgoKT0+e2NsYXNzIG57dXNlckRlZmluZWRXaWR0aChlKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChlKXtyZXR1cm4gMH1zY3JvbGxXaWR0aChlKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChlKXtyZXR1cm4g''@;'; put 'put ''MH1jbGllbnRSZWN0KGUpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChlKXtyZXR1cm4gMH1mb2N1cyhlKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9''@;'; put 'put ''dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2NvbnN0IENRZT1uPT5fbChuKT9uZXcgSTY6bmV3IHdRZTtsZXQgaUM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSxDLFAsWSxKLGNlLGZlKXt0aGlzLmRhdGFncmlkPWUsdGhpcy5vcmdhbml6ZXI9''@;'; put 'put ''cix0aGlzLml0ZW1zPWksdGhpcy5wYWdlPWEsdGhpcy5lbD1jLHRoaXMucmVuZGVyZXI9bSx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9UCx0aGlzLmNvbHVtbnNTZXJ2aWNlPVksdGhpcy5uZ1pvbmU9Six0aGlzLmtleU5hdmlnYXRpb249Y2UsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1mZSx0aGlz''@;'; put 'put ''Ll9oZWlnaHRTZXQ9ITEsdGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW51bGwsdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goci5maWx0ZXJSZW5kZXJT''@;'; put 'put ''dGVwcyhucC5DT01QVVRFX0NPTFVNTl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jb21wdXRlSGVhZGVyc1dpZHRoKCkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnNpemVDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnJlc2V0RGF0YWdyaWRIZWln''@;'; put 'put ''aHQoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChDLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShBZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKEFlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGkuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEw''@;'; put 'put ''KSl9bmdPbkluaXQoKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUoZT0+dGhpcy5jb2x1bW5TdGF0ZUNoYW5nZWQoZSkpLG51bGw9PT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50JiYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1u''@;'; put 'put ''ZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKFtlXSk9PnsodGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudHx8ZS5pc0ludGVyc2VjdGluZykmJnRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiYodGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5t''@;'; put 'put ''YXJrRm9yQ2hlY2soKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSl9KSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50''@;'; put 'put ''YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+''@;'; put 'put ''e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCl9dG9nZ2xlRGV0YWlsUGFuZShlKXt0aGlzLmhlYWRl''@;'; put 'put ''cnMmJihlJiYhdGhpcy5jb2x1bW5zU2VydmljZS5oYXNDYWNoZSgpPyh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNhY2hlKCksdGhpcy5jb2x1bW5zU2VydmljZS52aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChyLGkpPT57aT4wJiZ0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZUF0KHIu''@;'; put 'put ''Y29sdW1uSW5kZXgse2NoYW5nZXM6W0ZkLkhJRERFTl0saGlkZGVuOmV9KX0pKTplfHx0aGlzLmNvbHVtbnNTZXJ2aWNlLnJlc2V0VG9MYXN0Q2FjaGUoKSl9c2V0dXBDb2x1bW5zKCl7dGhpcy5oZWFkZXJzLmZvckVhY2goKGUscik9PmUuc2V0Q29sdW1uU3RhdGUocikpLHRoaXMuY29sdW1u''@;'; put 'put ''c1NlcnZpY2UuY29sdW1ucy5zcGxpY2UodGhpcy5oZWFkZXJzLmxlbmd0aCksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZvckVhY2goKGUscik9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShlLHtjaGFuZ2VzOltGZC5JTklUSUFMSVpFXSxjb2x1bW5JbmRleDpy''@;'; put 'put ''fSl9KX1zaG91bGRDb21wdXRlSGVpZ2h0KCl7cmV0dXJuIXRoaXMuX2hlaWdodFNldCYmdGhpcy5wYWdlLnNpemU+MCYmdGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoPT09dGhpcy5wYWdlLnNpemV9Y29tcHV0ZURhdGFncmlkSGVpZ2h0KCl7Y29uc3QgZT13aW5kb3cuZ2V0Q29tcHV0ZWRT''@;'; put 'put ''dHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLmhlaWdodDt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiaGVpZ2h0IixlKSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5u''@;'; put 'put ''YXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRTZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGU9dGhpcy5oZWFkZXJzLmxlbmd0aCxyPXRoaXMuaGVhZGVycy5tYXAoYT0+YS5nZXRDb2x1bW5XaWR0aFN0YXRlKCkpO2xldCBpPSEwO3RoaXMuaGVhZGVycy5m''@;'; put 'put ''b3JFYWNoKChhLGMpPT57Y29uc3QgbT17Y2hhbmdlczpbRmQuV0lEVEhdLC4uLnJbY119O20uc3RyaWN0V2lkdGh8fChpPSExKSxlPT09YysxJiZpJiYobS5zdHJpY3RXaWR0aD0wKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZUF0KGMsbSl9KX1jb2x1bW5TdGF0ZUNoYW5n''@;'; put 'put ''ZWQoZSl7aWYoIXRoaXMuaGVhZGVyc3x8bnVsbD09ZS5jb2x1bW5JbmRleClyZXR1cm47Y29uc3Qgcj1lLmNvbHVtbkluZGV4O2UuY2hhbmdlcyYmZS5jaGFuZ2VzLmxlbmd0aCYmZS5jaGFuZ2VzLmZvckVhY2goaT0+e3N3aXRjaChpKXtjYXNlIEZkLldJRFRIOnRoaXMuaGVhZGVycy5nZXQo''@;'; put 'put ''cikuc2V0V2lkdGgoZSksdGhpcy5yb3dzLmZvckVhY2goYT0+e2E/LmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJihhLmNlbGxzLmdldChyKS5zZXRXaWR0aChlKSxhLmV4cGFuZGFibGVSb3c/LmNlbGxzLmdldChyKT8uc2V0V2lkdGgoZSkpfSk7''@;'; put 'put ''YnJlYWs7Y2FzZSBGZC5ISURERU46dGhpcy5oZWFkZXJzLmdldChyKS5zZXRIaWRkZW4oZSksdGhpcy5yb3dzLmZvckVhY2goYT0+e2EuY2VsbHMmJmEuY2VsbHMubGVuZ3RoJiYoYS5jZWxscy5nZXQocikuc2V0SGlkZGVuKGUpLGEuZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KHIpPy5zZXRI''@;'; put 'put ''aWRkZW4oZSkpfSksdGhpcy51cGRhdGVDb2x1bW5TZXBhcmF0b3JzVmlzaWJpbGl0eSgpLHRoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdyaWQoKTticmVhaztjYXNlIEZkLklOSVRJQUxJWkU6ZS5oaWRlYWJsZSYmZS5oaWRkZW4mJih0aGlzLmhlYWRlcnMuZ2V0KHIpLnNldEhpZGRlbihl''@;'; put 'put ''KSx0aGlzLnJvd3MuZm9yRWFjaChhPT57YS5zZXRDZWxsc1N0YXRlKCksYS5leHBhbmRhYmxlUm93Py5zZXRDZWxsc1N0YXRlKCl9KSl9fSl9c3RhYmlsaXplQ29sdW1ucygpe3RoaXMuY29sdW1uc1NpemVzU3RhYmxlfHx0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3Jn''@;'; put 'put ''YW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSEwKX11cGRhdGVDb2x1bW5TZXBhcmF0b3JzVmlzaWJpbGl0eSgpe2NvbnN0IGU9dGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZpbHRlcihyPT4hci5pc0hpZGRlbik7ZS5mb3JFYWNoKChyLGkpPT57aT09PWUubGVuZ3RoLTE/''@;'; put 'put ''ci5zaG93U2VwYXJhdG9yPSExOnIuc2hvd1NlcGFyYXRvcnx8KHIuc2hvd1NlcGFyYXRvcj0hMCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoWjYpLFdlKHd2KSxXZShsNSksV2UoajYpLFdlKHppKSxXZShUbyksV2UodHApLFdlKFhYKSxX''@;'; put 'put ''ZShjNSksV2UoSmEpLFdlKHhIKSxXZShGcykpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmKHNvKGksU3YsNCksc28oaSxXNiw0KSksMiZlKXtsZXQgYTtkaShhPWhpKCkp''@;'; put 'put ''JiYoci5oZWFkZXJzPWEpLGRpKGE9aGkoKSkmJihyLnJvd3M9YSl9fSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbe3Byb3ZpZGU6STYsdXNlRmFjdG9yeTpDUWUsZGVwczpbZGNdfV0pXX0pLG59KSgpLFNRZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoRFVl''@;'; put 'put ''LElVZSxqVCxSVWUsamZlLExVZSx6ZmUsT1VlLFBVZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLEpKZSx2SCxOcyxEcGUsT2MseVgsTmYsUUplLElw''@;'; put 'put ''ZSxVdyx1QSxrWF19KSxufSkoKSxZcGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1zdGFjay1jb250ZW50Il1dLHN0YW5kYWxvbmU6ITF9KSxufSko''@;'; put 'put ''KSxycT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fZ2VuZXJhdGVkSWQ9bnVsbCx0aGlzLl9pZD1udWxsfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoZSl7dGhpcy5faWQ9InN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWU/ZTp0aGlzLl9nZW5lcmF0ZWRJZCsiIn1u''@;'; put 'put ''Z09uSW5pdCgpe3RoaXMuX2dlbmVyYXRlZElkPSJjbHItc3RhY2stbGFiZWwtIitQdSgpLHRoaXMuaWR8fCh0aGlzLl9pZD10aGlzLl9nZW5lcmF0ZWRJZCsiIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1Wcih7dHlwZTpu''@;'; put 'put ''LHNlbGVjdG9yczpbWyJjbHItc3RhY2stbGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJlJyKCJpZCIsci5pZCl9LGlucHV0czp7aWQ6ImlkIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6MSx2YXJzOjAsdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksR3BlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyKXt0aGlzLnBhcmVudD1lLHRoaXMuY29tbW9uU3RyaW5ncz1yLHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5leHBhbmRhYmxlPSEx''@;'; put 'put ''LHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IFlyKCExKSx0aGlzLmZvY3VzZWQ9ITEsdGhpcy51bmlxdWVJZD1QdSgpLHRoaXMuX2NoYW5nZWRDaGlsZHJlbj0wLHRoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITEsdGhpcy5fY2hhbmdlZD0hMSxlJiZlLmFkZENoaWxkKCl9c2V0IHNldENoYW5nZWRW''@;'; put 'put ''YWx1ZShlKXt0aGlzLl9jaGFuZ2VkPWUsdGhpcy5wYXJlbnQmJnRoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQmJihlP3RoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4rKzp0aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVuLS0pfWdldCBnZXRDaGFuZ2VkVmFsdWUoKXtyZXR1cm4gdGhpcy5fY2hh''@;'; put 'put ''bmdlZHx8dGhpcy5fY2hhbmdlZENoaWxkcmVuPjAmJiF0aGlzLmV4cGFuZGVkfWdldCBvblN0YWNrTGFiZWxGb2N1cygpe3JldHVybiB0aGlzLmV4cGFuZGFibGUmJiF0aGlzLmV4cGFuZGVkJiZ0aGlzLmZvY3VzZWR9Z2V0IGxhYmVsbGVkQnlJZCgpe3JldHVybiB0aGlzLnN0YWNrQmxvY2tU''@;'; put 'put ''aXRsZS5pZH1nZXQgaGVhZGluZ0xldmVsKCl7cmV0dXJuIHRoaXMuYXJpYUxldmVsP3RoaXMuYXJpYUxldmVsKyIiOnRoaXMucGFyZW50PyI0IjoiMyJ9Z2V0IGNhcmV0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCJ9Z2V0IHJvbGUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5leHBhbmRhYmxlPyJidXR0b24iOm51bGx9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iMCI6bnVsbH1nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT90aGlzLmV4cGFuZGVkPyJ0cnVlIjoiZmFsc2UiOm51bGx9bmdPbkluaXQoKXt0aGlz''@;'; put 'put ''Ll9mdWxseUluaXRpYWxpemVkPSEwfWFkZENoaWxkKCl7dGhpcy5leHBhbmRhYmxlPSEwfXRvZ2dsZUV4cGFuZChlKXskcGUoZSl8fHRoaXMuZXhwYW5kYWJsZSYmKHRoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpKX1n''@;'; put 'put ''ZXRTdGFja0NoaWxkcmVuSWQoKXtyZXR1cm4gdGhpcy5leHBhbmRlZD9gY2xyLXN0YWNrLWNoaWxkcmVuLSR7dGhpcy51bmlxdWVJZH1gOm51bGx9cHJldmVudERlZmF1bHRJZk5vdElucHV0RXZlbnQoZSl7JHBlKGUpfHxlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKG4sMTIpLFdlKGZzKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1zdGFjay1ibG9jayJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLHIsaSl7aWYoMSZlJiZzbyhpLHJxLDUpLDImZSl7bGV0IGE7ZGko''@;'; put 'put ''YT1oaSgpKSYmKHIuc3RhY2tCbG9ja1RpdGxlPWEuZmlyc3QpfX0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUscil7MiZlJiYoUnIoInJvbGUiLCJoZWFkaW5nIikoImFyaWEtbGV2ZWwiLHIuaGVhZGluZ0xldmVsKSxicigic3RhY2stYmxvY2siLCEwKSgic3RhY2stYmxv''@;'; put 'put ''Y2stZXhwYW5kZWQiLHIuZXhwYW5kZWQpKCJzdGFjay1ibG9jay1leHBhbmRhYmxlIixyLmV4cGFuZGFibGUpKCJzdGFjay1ibG9jay1jaGFuZ2VkIixyLmdldENoYW5nZWRWYWx1ZSkoIm9uLWZvY3VzIixyLm9uU3RhY2tMYWJlbEZvY3VzKSl9LGlucHV0czp7ZXhwYW5kZWQ6WzAsImNsclNi''@;'; put 'put ''RXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WzAsImNsclNiRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxhcmlhTGV2ZWw6WzAsImNsclN0YWNrVmlld0xldmVsIiwiYXJpYUxldmVsIl0sc2V0Q2hhbmdlZFZhbHVlOlswLCJjbHJTYk5vdGlmeUNoYW5nZSIsInNldENoYW5nZWRW''@;'; put 'put ''YWx1ZSJdfSxvdXRwdXRzOntleHBhbmRlZENoYW5nZToiY2xyU2JFeHBhbmRlZENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOlhLZSxkZWNsczo5LHZhcnM6OSxjb25zdHM6W1sxLCJzdGFjay1ibG9jay1sYWJlbCIsMywiY2xpY2siLCJrZXl1cC5lbnRlciIsImtl''@;'; put 'put ''eXVwLnNwYWNlIiwia2V5ZG93bi5zcGFjZSIsImZvY3VzIiwiYmx1ciIsImlkIl0sWyJzaGFwZSIsImFuZ2xlIiwiY2xhc3MiLCJzdGFjay1ibG9jay1jYXJldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJzdGFjay12aWV3LWtleSJdLFsxLCJzdGFj''@;'; put 'put ''ay1ibG9jay1jb250ZW50Il0sWzEsInN0YWNrLWNoaWxkcmVuIiwzLCJjbHJFeHBhbmRUcmlnZ2VyIl0sWyJyb2xlIiwicmVnaW9uIiwzLCJoZWlnaHQiLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUiLDEsInN0YWNrLWJsb2NrLWNhcmV0Il0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwi''@;'; put 'put ''cmVnaW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoS0tlKSxyZSgwLCJkaXYiLDApLGt0KCJjbGljayIsZnVuY3Rpb24oYSl7cmV0dXJuIHIudG9nZ2xlRXhwYW5kKGEpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbihhKXtyZXR1cm4gci50b2dnbGVFeHBhbmQoYSl9KSgi''@;'; put 'put ''a2V5dXAuc3BhY2UiLGZ1bmN0aW9uKGEpe3JldHVybiByLnRvZ2dsZUV4cGFuZChhKX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihhKXtyZXR1cm4gci5wcmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChhKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gci5mb2N1c2VkPSEwfSko''@;'; put 'put ''ImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZm9jdXNlZD0hMX0pLGN0KDEscUtlLDEsMSwiY2RzLWljb24iLDEpKDIsSktlLDIsMSwic3BhbiIsMikscmUoMywiZGl2IiwzKSxCcig0KSxpZSgpLHJlKDUsImRpdiIsNCksQnIoNiwxKSxpZSgpKCkscmUoNywiY2xyLWV4cGFuZGFibGUtYW5p''@;'; put 'put ''bWF0aW9uIiw1KSxjdCg4LFFLZSwyLDQsImRpdiIsNiksaWUoKSksMiZlJiYoeWUoImlkIixyLnVuaXF1ZUlkKSxScigicm9sZSIsci5yb2xlKSgidGFiaW5kZXgiLHIudGFiSW5kZXgpKCJhcmlhLWV4cGFuZGVkIixyLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLHIuZ2V0U3RhY2tD''@;'; put 'put ''aGlsZHJlbklkKCkpLGFlKCkseWUoIm5nSWYiLHIuZXhwYW5kYWJsZSksYWUoKSx5ZSgibmdJZiIsci5nZXRDaGFuZ2VkVmFsdWUpLGFlKDUpLHllKCJjbHJFeHBhbmRUcmlnZ2VyIixyLmV4cGFuZGVkKSxhZSgpLHllKCJuZ0lmIixyLmV4cGFuZGVkKSl9LGRlcGVuZGVuY2llczpbbWEscnMs''@;'; put 'put ''c0hdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uICRwZShuKXtjb25zdCB0PW4/LnRhcmdldDtyZXR1cm4hIXQ/LnRhZ05hbWUmJlsiSU5QVVQiLCJURVhUQVJFQSIsIkJVVFRPTiIsIkEiLCJTRUxFQ1QiLCJPUFRJT04iXS5pbmNsdWRlcyh0LnRhZ05hbWUpfWxldCBpcT0oKCk9''@;'; put 'put ''PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXN0YWNrLXZpZXciXV0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6dFhlLGRlY2xzOjMsdmFyczow''@;'; put 'put ''LGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYShlWGUpLEJyKDApLHJlKDEsImRpdiIsMCksQnIoMiwxKSxpZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkseFFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXtIcy5hZGRJY29u''@;'; put 'put ''cyhEdyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE9jLE5zLElwZV19KSxufSkoKSxNdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5z''@;'; put 'put ''ZWxlY3RhYmxlPSExLHRoaXMuZWFnZXI9ITAsdGhpcy5jaGlsZHJlbkZldGNoZWQ9bmV3IHVyfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtjb25zdCBL''@;'; put 'put ''cGU9e3Byb3ZpZGU6TXYsdXNlRmFjdG9yeTpmdW5jdGlvbiBFUWUobil7cmV0dXJuIG58fG5ldyBNdn0sZGVwczpbW25ldyBoMyxuZXcgdGMsTXZdXX07bGV0IFhwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscil7dGhpcy5mZWF0dXJlc1NlcnZpY2U9ZSx0aGlzLmV4cGFuZFNlcnZp''@;'; put 'put ''Y2U9cixyJiYodGhpcy5zdWJzY3JpcHRpb249ci5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKGk9PnshaSYmdGhpcy5wYXJlbnQmJiFlLmVhZ2VyJiZlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVz''@;'; put 'put ''KCl9c2hvdWxkUmVuZGVyKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmKHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyfHwhdGhpcy5leHBhbmRTZXJ2aWNlfHx0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQpfWdldENvbnRleHQoZSl7cmV0dXJueyRpbXBsaWNp''@;'; put 'put ''dDplLm1vZGVsLGNsck1vZGVsOmV9fW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucGFyZW50PyJncm91cCI6bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGUpe3JldHVybiBuZXcoZXx8bikoV2UoTXYpLFdlKE9kLDgpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmUnIoInJvbGUiLHIucm9sZSl9LGlu''@;'; put 'put ''cHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il1dLHRl''@;'; put 'put ''bXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiZjdCgwLG9YZSwyLDEsIm5nLWNvbnRhaW5lciIsMCksMiZlJiZ5ZSgibmdJZiIsci5zaG91bGRSZW5kZXIoKSl9LGRlcGVuZGVuY2llczpbaHMsbWEsa2RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO3ZhciBsMD1mdW5jdGlvbihuKXtyZXR1cm4g''@;'; put 'put ''bltuLlVOU0VMRUNURUQ9MF09IlVOU0VMRUNURUQiLG5bbi5TRUxFQ1RFRD0xXT0iU0VMRUNURUQiLG5bbi5JTkRFVEVSTUlOQVRFPTJdPSJJTkRFVEVSTUlOQVRFIixufShsMHx8e30pO2NsYXNzIHFwZXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IHhpKCExKSx0aGlzLnNlbGVj''@;'; put 'put ''dGVkPW5ldyB4aShsMC5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcodCl7dGhpcy5fbG9hZGluZz10LHRoaXMubG9hZGluZyQubmV4dCh0KX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4hKCF0aGlzLl9kaXNh''@;'; put 'put ''YmxlZCYmIXRoaXMucGFyZW50Py5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPXR9ZGVzdHJveSgpe3RoaXMuc2VsZWN0ZWQuY29tcGxldGUoKX1zZXRTZWxlY3RlZCh0LGUscil7dCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQodCks''@;'; put 'put ''ciYmdCE9PWwwLklOREVURVJNSU5BVEUmJnRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW4uZm9yRWFjaChpPT57aS5kaXNhYmxlZHx8aS5zZXRTZWxlY3RlZCh0LCExLCEwKX0pLGUmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRv''@;'; put 'put ''Z2dsZVNlbGVjdGlvbih0KXt0aGlzLmRpc2FibGVkfHx0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT1sMC5TRUxFQ1RFRD9sMC5VTlNFTEVDVEVEOmwwLlNFTEVDVEVELCEwLHQpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCB0PXRoaXMuY29tcHV0''@;'; put 'put ''ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7dCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQodCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxk''@;'; put 'put ''cmVuKCl7bGV0IHQ9ITEsZT0hMTtmb3IoY29uc3QgciBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChyLnNlbGVjdGVkLnZhbHVlKXtjYXNlIGwwLklOREVURVJNSU5BVEU6aWYoci5kaXNhYmxlZCljb250aW51ZTtyZXR1cm4gbDAuSU5ERVRFUk1JTkFURTtjYXNlIGwwLlNFTEVDVEVEOmlmKHQ9''@;'; put 'put ''ITAsZSlyZXR1cm4gbDAuSU5ERVRFUk1JTkFURTticmVhaztkZWZhdWx0OmlmKGU9ITAsdClyZXR1cm4gbDAuSU5ERVRFUk1JTkFURX1yZXR1cm4gdD9lP2wwLlVOU0VMRUNURUQ6bDAuU0VMRUNURUQ6bDAuVU5TRUxFQ1RFRH19Y2xhc3MgTEggZXh0ZW5kcyBxcGV7Y29uc3RydWN0b3IodCxl''@;'; put 'put ''LHIsaSl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPXIsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aSx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1bXSx0aGlzLm1vZGVsPXQsdGhpcy5wYXJlbnQ9ZX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENoaWxkcmVu''@;'; put 'put ''KCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKHQpe3RoaXMuX2NoaWxkcmVuPXR9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4uZm9yRWFj''@;'; put 'put ''aCh0PT50LmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVuRmV0Y2hlZClyZXR1cm47Y29uc3QgdD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBUUWUobil7''@;'; put 'put ''cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW59KHQpP3JUKHQpPyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249dC5zdWJzY3JpYmUoZT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGUpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9jaGlsZHJl''@;'; put 'put ''bj10P3RoaXMud3JhcENoaWxkcmVuKHQpOltdOih0aGlzLmxvYWRpbmc9ITAsdC50aGVuKGU9Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihlKSx0aGlzLmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRoaXMuZmVh''@;'; put 'put ''dHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKHQpe3JldHVybiB0Lm1hcChlPT5uZXcgTEgoZSx0aGlzLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IEpwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0''@;'; put 'put ''aGlzLnRlbXBsYXRlPWUsdGhpcy5mZWF0dXJlc1NlcnZpY2U9cix0aGlzLmNkcj1pfW5nT25DaGFuZ2VzKCl7bGV0IGU7ZT1BcnJheS5pc0FycmF5KHRoaXMubm9kZXMpP3RoaXMubm9kZXMubWFwKHI9Pm5ldyBMSChyLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2Vydmlj''@;'; put 'put ''ZSkpOltuZXcgTEgodGhpcy5ub2RlcyxudWxsLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpXSx0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb258fCh0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb249dGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRj''@;'; put 'put ''aGVkLnBpcGUodHYoMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pKSx0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb249e3RlbXBsYXRlOnRoaXMudGVtcGxhdGUscm9vdDplfX1uZ09uRGVzdHJveSgpe3RoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlv''@;'; put 'put ''biYmdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKEFsKSxXZShNdiksV2UoRnMpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2xyUmVj''@;'; put 'put ''dXJzaXZlRm9yIiwiIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCIiXV0saW5wdXRzOntub2RlczpbMCwiY2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENoaWxkcmVuOlswLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsImdldENoaWxkcmVuIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVy''@;'; put 'put ''ZXM6W1d0XX0pLG59KSgpLGFxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c1JlcXVlc3Q9bmV3IHVyLHRoaXMuX2ZvY3VzQ2hhbmdlPW5ldyB1cn1nZXQgZm9jdXNSZXF1ZXN0KCl7cmV0dXJuIHRoaXMuX2ZvY3VzUmVxdWVzdC5hc09ic2VydmFibGUoKX1nZXQgZm9j''@;'; put 'put ''dXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Zm9jdXNOb2RlKGUpe2UmJnRoaXMuX2ZvY3VzUmVxdWVzdC5uZXh0KGUubm9kZUlkKX1icm9hZGNhc3RGb2N1c2VkTm9kZShlKXt0aGlzLmZvY3VzZWROb2RlSWQhPT1lJiYodGhpcy5mb2N1c2VkTm9k''@;'; put 'put ''ZUlkPWUsdGhpcy5fZm9jdXNDaGFuZ2UubmV4dChlKSl9Zm9jdXNQYXJlbnQoZSl7ZSYmdGhpcy5mb2N1c05vZGUoZS5wYXJlbnQpfWZvY3VzRmlyc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHNbMF0pfWZvY3Vz''@;'; put 'put ''TGFzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTGFzdFZpc2libGVJblRyZWUoKSl9Zm9jdXNOb2RlQWJvdmUoZSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTm9kZUFib3ZlKGUpKX1mb2N1c05vZGVCZWxvdyhlKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2Rl''@;'; put 'put ''QmVsb3coZSkpfWZvY3VzTm9kZVN0YXJ0c1dpdGgoZSxyKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dpdGgoZSxyKSl9ZmluZFNpYmxpbmdzKGUpe3JldHVybiBlLnBhcmVudD9lLnBhcmVudC5jaGlsZHJlbjp0aGlzLnJvb3ROb2RlTW9kZWxzfWZpbmRMYXN0''@;'; put 'put ''VmlzaWJsZUluTm9kZShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlLmV4cGFuZGVkJiZlLmNoaWxkcmVuLmxlbmd0aD4wKXtjb25zdCByPWUuY2hpbGRyZW47cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKHJbci5sZW5ndGgtMV0pfXJldHVybiBlfWZpbmROZXh0Rm9jdXNhYmxl''@;'; put 'put ''KGUpe2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHI9dGhpcy5maW5kU2libGluZ3MoZSksaT1yLmluZGV4T2YoZSk7cmV0dXJuIGk8ci5sZW5ndGgtMT9yW2krMV06aT09PXIubGVuZ3RoLTE/dGhpcy5maW5kTmV4dEZvY3VzYWJsZShlLnBhcmVudCk6bnVsbH1maW5kTGFzdFZpc2libGVJblRy''@;'; put 'put ''ZWUoKXtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVscy5sZW5ndGgmJnRoaXMucm9vdE5vZGVNb2RlbHNbdGhpcy5yb290Tm9kZU1vZGVscy5sZW5ndGgtMV0pfWZpbmROb2RlQWJvdmUoZSl7aWYoIWUpcmV0''@;'; put 'put ''dXJuIG51bGw7Y29uc3Qgcj10aGlzLmZpbmRTaWJsaW5ncyhlKSxpPXIuaW5kZXhPZihlKTtyZXR1cm4gMD09PWk/ZS5wYXJlbnQ6aT4wP3RoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKHJbaS0xXSk6bnVsbH1maW5kTm9kZUJlbG93KGUpe3JldHVybiBlP2UuZXhwYW5kZWQmJmUuY2hpbGRy''@;'; put 'put ''ZW4ubGVuZ3RoPjA/ZS5jaGlsZHJlblswXTp0aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGUpOm51bGx9ZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChlLHIpe2lmKHIuZXhwYW5kZWQmJnIuY2hpbGRyZW4ubGVuZ3RoPjApZm9yKGNvbnN0IGkgb2Ygci5jaGlsZHJlbil7Y29uc3QgYT10aGlz''@;'; put 'put ''LmZpbmROb2RlU3RhcnRzV2l0aChlLGkpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChlLHIpe2NvbnN0IGk9dGhpcy5maW5kU2libGluZ3Mocik7Zm9yKGxldCBjPWkuaW5kZXhPZihyKSsxO2M8aS5sZW5ndGg7YysrKXtjb25zdCBDPXRoaXMu''@;'; put 'put ''ZmluZE5vZGVTdGFydHNXaXRoKGUsaVtjXSk7aWYoQylyZXR1cm4gQ31yZXR1cm4gbnVsbH1maW5kUm9vdE5vZGVTdGFydHNXaXRoKGUscil7Zm9yKGNvbnN0IGkgb2YgdGhpcy5yb290Tm9kZU1vZGVscyl7aWYoci5wYXJlbnQmJnIucGFyZW50PT09aSljb250aW51ZTtjb25zdCBhPXRoaXMu''@;'; put 'put ''ZmluZE5vZGVTdGFydHNXaXRoKGUsaSk7aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH1maW5kTm9kZVN0YXJ0c1dpdGgoZSxyKXtyZXR1cm4gcj9yLnRleHRDb250ZW50LnN0YXJ0c1dpdGgoZSk/cjp0aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoZSxyKTpudWxsfWZpbmRDbG9z''@;'; put 'put ''ZXN0Tm9kZVN0YXJ0c1dpdGgoZSxyKXtpZighcilyZXR1cm4gbnVsbDtjb25zdCBpPXRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChlLHIpO2lmKGkpcmV0dXJuIGk7Y29uc3QgYT10aGlzLmZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoZSxyKTtyZXR1cm4gYXx8KHRoaXMuZmlu''@;'; put 'put ''ZFJvb3ROb2RlU3RhcnRzV2l0aChlLHIpfHx0aGlzLmZpbmROb2RlU3RhcnRzV2l0aChlLHIucGFyZW50KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgp''@;'; put 'put ''O2NsYXNzIEFRZSBleHRlbmRzIHFwZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMucGFyZW50PXQsdCYmdC5fYWRkQ2hpbGQodGhpcyksdGhpcy5jaGlsZHJlbj1bXX1kZXN0cm95KCl7dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll9yZW1vdmVDaGlsZCh0aGlzKSxzdXBlci5kZXN0cm95''@;'; put 'put ''KCl9X2FkZENoaWxkKHQpe3RoaXMuY2hpbGRyZW4ucHVzaCh0KX1fcmVtb3ZlQ2hpbGQodCl7Y29uc3QgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7ZT4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKX19bGV0IHU1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5lbD1l''@;'; put 'put ''fWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiYWN0aXZlIil9YWN0aXZhdGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljayYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9''@;'; put 'put ''fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKHppKSl9LG4uXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsOCwiY2xyLXRyZWVub2RlLWxpbmsiXV0sc3RhbmRhbG9uZTohMX0pLG59KSgpLEVoPSgoKT0+e2NsYXNzIG57Y29uc3Ry''@;'; put 'put ''dWN0b3IoZSxyLGksYSxjLG0sQyxQKXt0aGlzLnBsYXRmb3JtSWQ9ZSx0aGlzLmZlYXR1cmVzU2VydmljZT1pLHRoaXMuZXhwYW5kU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1jLHRoaXMuZm9jdXNNYW5hZ2VyPW0sdGhpcy5lbGVtZW50UmVmPUMsdGhpcy5zZWxlY3RlZENoYW5nZT1u''@;'; put 'put ''ZXcgWXIoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IFlyLHRoaXMuU1RBVEVTPWwwLHRoaXMuaXNNb2RlbExvYWRpbmc9ITEsdGhpcy5ub2RlSWQ9UHUoKSx0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD0tMSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExLHRoaXMudHlwZUFoZWFkS2V5''@;'; put 'put ''QnVmZmVyPSIiLHRoaXMudHlwZUFoZWFkS2V5RXZlbnQ9bmV3IHVyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9tb2RlbD1pLnJlY3Vyc2lvbj9QLnZpZXc/UC52aWV3LmNvbnRleHQuY2xyTW9kZWw6UC5fbFZpZXdbOF0uY2xyTW9kZWw6bmV3IEFRZShyP3IuX21vZGVsOm51bGwpLHRo''@;'; put 'put ''aXMuX21vZGVsLm5vZGVJZD10aGlzLm5vZGVJZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX21vZGVsLmRpc2FibGVkPWV9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLnNlbGVjdGVkLnZhbHVlfXNldCBz''@;'; put 'put ''ZWxlY3RlZChlKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlPSEwLChudWxsPT09ZXx8dHlwZW9mIGU+InUiKSYmKGU9bDAuVU5TRUxFQ1RFRCksImJvb2xlYW4iPT10eXBlb2YgZSYmKGU9ZT9sMC5TRUxFQ1RFRDpsMC5VTlNFTEVDVEVEKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSEw''@;'; put 'put ''LHRoaXMuX21vZGVsLnNldFNlbGVjdGVkKGUsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZH1zZXQgZXhwYW5k''@;'; put 'put ''ZWQoZSl7dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPWV9c2V0IGNsckZvclR5cGVBaGVhZChlKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudD1RcGUoZXx8dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWwwLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9kZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0''@;'; put 'put ''fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVuZ3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuX21vZGVsLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsdGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb25zLnB1c2godGhpcy5fbW9kZWwuc2VsZWN0ZWQucGlwZShyYygoKT0+IXRoaXMuc2tpcEVtaXRDaGFuZ2UpKS5zdWJzY3JpYmUoZT0+e3RoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChlKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5k''@;'; put 'put ''Q2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KGUpLHRoaXMuX21vZGVsLmV4cGFuZGVkPWV9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c01hbmFnZXIuZm9jdXNSZXF1ZXN0LnN1YnNjcmliZShlPT57dGhpcy5ub2RlSWQ9PT1lJiZ0aGlz''@;'; put 'put ''LmZvY3VzVHJlZU5vZGUoKX0pLHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5jaGVja1RhYkluZGV4KGUpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLmxvYWRpbmckLnBpcGUodHYoMCkpLnN1YnNjcmliZShlPT50aGlzLmlz''@;'; put 'put ''TW9kZWxMb2FkaW5nPWUpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnR5cGVBaGVhZEtleUV2ZW50LnBpcGUodHYoMjAwKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVTdGFydHNXaXRoKGUsdGhpcy5fbW9kZWwp''@;'; put 'put ''LHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX21vZGVsLnRleHRDb250ZW50fHwodGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9UXBlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KSl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''Ll9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxlOiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRo''@;'; put 'put ''aXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGU9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7X2wodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxl''@;'; put 'put ''bWVudCE9PWUmJih0aGlzLnNldFRhYkluZGV4KDApLGUuZm9jdXMoKSxlLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5mb2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhp''@;'; put 'put ''cy5ub2RlSWQpfW9uS2V5RG93bihlKXtzd2l0Y2goZ1goZSksRmYoZS5rZXkpKXtjYXNlIGhhLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgaGEuQXJyb3dEb3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93''@;'; put 'put ''KHRoaXMuX21vZGVsKTticmVhaztjYXNlIGhhLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2UgaGEuQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7Y2FzZSBoYS5Ib21lOmUucHJldmVudERlZmF1bHQoKSx0aGlz''@;'; put 'put ''LmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIGhhLkVuZDplLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIGhhLkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVm''@;'; put 'put ''YXVsdCgpO2JyZWFrO2Nhc2UgaGEuU3BhY2U6Y2FzZSBoYS5TcGFjZWJhcjplLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50ZXh0Q29udGVudCYmZnVuY3Rpb24gbXFlKG4pe2NvbnN0IHQ9''@;'; put 'put ''bi5rZXk7cmV0dXJuIHQudG9Mb3dlckNhc2UoKSE9PXQudG9VcHBlckNhc2UoKXx8dD49IjAiJiZ0PD0iOSJ9KGUpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9ZS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRo''@;'; put 'put ''aXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGUpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWUsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsZS50b1N0cmluZygpKX1jaGVja1RhYkluZGV4KGUpe19s''@;'; put 'put ''KHRoaXMucGxhdGZvcm1JZCkmJnRoaXMubm9kZUlkIT09ZSYmLTEhPT10aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleCYmdGhpcy5zZXRUYWJJbmRleCgtMSl9dG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmlzRXhwYW5kYWJsZSgpJiYhdGhp''@;'; put 'put ''cy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpKX1leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuaXNQYXJlbnQmJnRoaXMu''@;'; put 'put ''Zm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTp0aGlzLmlzRXhwYW5kYWJsZSgpJiYodGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSEwKSl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ/dGhpcy5leHBhbmRTZXJ2''@;'; put 'put ''aWNlLmV4cGFuZGVkPSExOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUGFyZW50KHRoaXMuX21vZGVsKSl9dHJpZ2dlckRlZmF1bHRBY3Rpb24oKXt0aGlzLnRyZWVOb2RlTGluaz90aGlzLnRyZWVOb2RlTGluay5hY3RpdmF0ZSgpOnRoaXMuaXNTZWxlY3RhYmxlKCkmJnRoaXMuX21vZGVsLnRv''@;'; put 'put ''Z2dsZVNlbGVjdGlvbih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKGRjKSxXZShuLDEyKSxXZShNdiksV2UoT2QpLFdlKGZzKSxXZShhcSksV2UoemkpLFdlKEhvKSl9LG4uXHUwMjc1Y21wPVZy''@;'; put 'put ''KHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci10cmVlLW5vZGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lmKDEmZSYmc28oaSx1NSw0KSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLnRyZWVOb2RlTGlua0xpc3Q9YSl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxyKXtpZigx''@;'; put 'put ''JmUmJldhKHNYZSw3LHppKSwyJmUpe2xldCBpO2RpKGk9aGkoKSkmJihyLmNvbnRlbnRDb250YWluZXI9aS5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImNsci10cmVlLW5vZGUiLCEwKSgiZGlzYWJsZWQiLHIuX21vZGVsLmRpc2FibGVk''@;'; put 'put ''KX0saW5wdXRzOntleHBhbmRhYmxlOlswLCJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLGRpc2FibGVkOlswLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sc2VsZWN0ZWQ6WzAsImNsclNlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbMCwiY2xyRXhwYW5kZWQiLCJleHBhbmRl''@;'; put 'put ''ZCJdLGNsckZvclR5cGVBaGVhZDoiY2xyRm9yVHlwZUFoZWFkIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2U6ImNsclNlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRXhwYW5kZWRDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbS3BlLE9kLHtwcm92aWRlOnRB''@;'; put 'put ''LHVzZUV4aXN0aW5nOk9kfV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Y1hlLGRlY2xzOjEyLHZhcnM6MTIsY29uc3RzOltbImNvbnRlbnRDb250YWluZXIiLCIiXSxbInRyZWVub2RlQ29udGVudCIsIiJdLFsicm9sZSIsInRyZWVpdGVtIiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS1jb250ZW50LWNvbnRhaW5lciIsMywia2V5ZG93biIsImZvY3VzIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWNhcmV0IiwzLCJkaXNhYmxlZCIsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxb''@;'; put 'put ''ImNsYXNzIiwiY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2JveCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2V1cCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJjbHItdHJlZW5vZGUtY2hpbGRyZW4iXSxbMywicGFyZW50Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0IiwzLCJjbGljayIsImZvY3VzIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5n''@;'; put 'put ''bGUiLDEsImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEt''@;'; put 'put ''aGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiY2hhbmdlIiwiZm9jdXMiLCJpZCIsImRpc2FibGVkIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLDMsImZvciJdLFszLCJu''@;'; put 'put ''Z1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3VzZXVwIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsImNsci1zci1vbmx5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7aWYoMSZlKXtjb25zdCBpPUluKCk7bmEobFhlKSxyZSgw''@;'; put 'put ''LCJkaXYiLDIsMCksa3QoImtleWRvd24iLGZ1bmN0aW9uKGMpe3JldHVybiBndChpKSxtdChyLm9uS2V5RG93bihjKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGkpLG10KHIuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpKX0pLGN0KDIsdVhlLDIsMiwiYnV0dG9uIiwzKSgz''@;'; put 'put ''LGRYZSwyLDAsImRpdiIsNCkoNCxoWGUsNCw2LCJkaXYiLDUpKDUsZlhlLDIsMSwiZGl2Iiw2KSg2LGdYZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEsQ2MpLGllKCkscmUoOCwiZGl2Iiw3KSxCcig5KSxCcigxMCwxKSxWdCgxMSwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsOCksaWUoKX0y''@;'; put 'put ''JmUmJihicigiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsci5kaXNhYmxlZCksUnIoImFyaWEtZGlzYWJsZWQiLHIuZGlzYWJsZWQpKCJhcmlhLWV4cGFuZGVkIixyLmlzRXhwYW5kYWJsZSgpP3IuZXhwYW5kZWQ6bnVsbCkoImFyaWEtc2VsZWN0ZWQiLHIuYXJpYVNlbGVjdGVkKSxhZSgy''@;'; put 'put ''KSx5ZSgibmdJZiIsci5pc0V4cGFuZGFibGUoKSYmIXIuaXNNb2RlbExvYWRpbmcmJiFyLmV4cGFuZFNlcnZpY2UubG9hZGluZyksYWUoKSx5ZSgibmdJZiIsci5leHBhbmRTZXJ2aWNlLmxvYWRpbmd8fHIuaXNNb2RlbExvYWRpbmcpLGFlKCkseWUoIm5nSWYiLHIuZmVhdHVyZXNTZXJ2aWNl''@;'; put 'put ''LnNlbGVjdGFibGUpLGFlKCkseWUoIm5nSWYiLCFyLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlKSxhZSgzKSx5ZSgiQHRvZ2dsZUNoaWxkcmVuQW5pbSIsci5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCIpLFJyKCJyb2xlIixyLmlzRXhwYW5kYWJsZSgp''@;'; put 'put ''JiYhci5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPyJncm91cCI6bnVsbCksYWUoMykseWUoInBhcmVudCIsci5fbW9kZWwpKX0sZGVwZW5kZW5jaWVzOlttYSxrZCxycyxYcGVdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2cyKCJ0b2dnbGVDaGlsZHJlbkFuaW0iLFt1dSgi''@;'; put 'put ''Y29sbGFwc2VkID0+IGV4cGFuZGVkIixbQ3Moe2hlaWdodDowfSksWTAoMjAwLENzKHtoZWlnaHQ6IioifSkpXSksdXUoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW0NzKHtoZWlnaHQ6IioifSksWTAoMjAwLENzKHtoZWlnaHQ6MH0pKV0pLFlGKCJleHBhbmRlZCIsQ3Moe2hlaWdodDoiKiIs''@;'; put 'put ''Im92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxZRigiY29sbGFwc2VkIixDcyh7aGVpZ2h0OjB9KSldKV19fSksbn0pKCk7ZnVuY3Rpb24gUXBlKG4pe3JldHVybiBuLnRvTG9jYWxlTG93ZXJDYXNlKCkudHJpbSgpfWxldCBTMj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyl7''@;'; put 'put ''dGhpcy5mZWF0dXJlc1NlcnZpY2U9ZSx0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2U9cix0aGlzLnJlbmRlcmVyPWksdGhpcy5lbD1hLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMTtjb25zdCBtPWMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pk9mKGEubmF0''@;'; put 'put ''aXZlRWxlbWVudCwiZm9jdXNpbiIpLnN1YnNjcmliZShDPT57Qy50YXJnZXQ9PT1hLm5hdGl2ZUVsZW1lbnQmJihyLmZvY3VzRmlyc3RWaXNpYmxlTm9kZSgpLGkucmVtb3ZlQXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSl9KSk7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2go''@;'; put 'put ''bSl9c2V0IGxhenkoZSl7dGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXI9IWV9Z2V0IGlzTXVsdGlTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0Um9vdE5vZGVzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2go''@;'; put 'put ''dGhpcy5yb290Tm9kZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldE11bHRpU2VsZWN0YWJsZSgpLHRoaXMuc2V0Um9vdE5vZGVzKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpfXNldE11bHRpU2VsZWN0YWJs''@;'; put 'put ''ZSgpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUmJnRoaXMucm9vdE5vZGVzLmxlbmd0aD4wPyh0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMCx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1''@;'; put 'put ''ZSIpKToodGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpKX1zZXRSb290Tm9kZXMoKXt0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2Uucm9vdE5vZGVNb2RlbHM9''@;'; put 'put ''dGhpcy5yb290Tm9kZXMubWFwKGU9PmUuX21vZGVsKS5maWx0ZXIoZT0+IWUucGFyZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoTXYpLFdlKGFxKSxXZShUbyksV2UoemkpLFdlKEphKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2Vs''@;'; put 'put ''ZWN0b3JzOltbImNsci10cmVlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUscixpKXtpZigxJmUmJnNvKGksRWgsNCksMiZlKXtsZXQgYTtkaShhPWhpKCkpJiYoci5yb290Tm9kZXM9YSl9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihlLHIpezImZSYmUnIoInJvbGUiLCJ0cmVlIil9LGlucHV0czp7bGF6eTpbMCwiY2xyTGF6eSIsImxhenkiXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW0twZSxhcV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Q28sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiY2hpbGRy''@;'; put 'put ''ZW4iLDQsIm5nSWYiXSxbMywiY2hpbGRyZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLEJyKDApLGN0KDEsbVhlLDEsMSwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMCkpLDImZSYmKGFlKCkseWUoIm5nSWYiLHIuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W21hLFhwZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksSVFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXtIcy5hZGRJY29ucyhEdyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpu''@;'; put 'put ''fSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE5zLHlYXX0pLG59KSgpLFJRZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltT''@;'; put 'put ''UWUseFFlLElRZV19KSxufSkoKTtjb25zdCBMUWU9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiLCJuZXV0cmFsIiwidW5rbm93biIsImxvYWRpbmciXTtsZXQgb3E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbW1vblN0cmluZ3M9ZSx0aGlzLmRlZmF1''@;'; put 'put ''bHRJY29uU2hhcGU9ImluZm8tc3RhbmRhcmQiLHRoaXMuX2FsZXJ0SWNvblNoYXBlPSIiLHRoaXMuX2FsZXJ0VHlwZT0iaW5mbyJ9Z2V0IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLl9hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShlKXtMUWUuaW5kZXhPZihlKT4tMSYmKHRoaXMuX2FsZXJ0VHlw''@;'; put 'put ''ZT1lKX1nZXQgYWxlcnRJY29uU2hhcGUoKXtyZXR1cm4iIj09PXRoaXMuX2FsZXJ0SWNvblNoYXBlP3RoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVydFR5cGUpLnNoYXBlOnRoaXMuX2FsZXJ0SWNvblNoYXBlfXNldCBhbGVydEljb25TaGFwZShlKXtlP2UhPT10aGlzLl9hbGVydElj''@;'; put 'put ''b25TaGFwZSYmKHRoaXMuX2FsZXJ0SWNvblNoYXBlPWUpOnRoaXMuX2FsZXJ0SWNvblNoYXBlPSIifWdldCBhbGVydEljb25UaXRsZSgpe3JldHVybiB0aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS50aXRsZX1pY29uSW5mb0Zyb21UeXBlKGUpe2NvbnN0IHI9e3NoYXBl''@;'; put 'put ''OiIiLGNzc0NsYXNzOiIiLHRpdGxlOiIifTtzd2l0Y2goZSl7Y2FzZSJ3YXJuaW5nIjpyLnNoYXBlPSJ3YXJuaW5nLXN0YW5kYXJkIixyLmNzc0NsYXNzPSJhbGVydC13YXJuaW5nIixyLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLndhcm5pbmc7YnJlYWs7Y2FzZSJkYW5nZXIiOnIu''@;'; put 'put ''c2hhcGU9ImVycm9yLXN0YW5kYXJkIixyLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLHIudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ci5zaGFwZT0ic3VjY2Vzcy1zdGFuZGFyZCIsci5jc3NDbGFzcz0iYWxlcnQtc3VjY2VzcyIsci50''@;'; put 'put ''aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdWNjZXNzO2JyZWFrO2Nhc2UibmV1dHJhbCI6ci5zaGFwZT0ibm90ZSIsci5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5uZXV0cmFsO2JyZWFrO2Nhc2UidW5rbm93biI6ci5zaGFw''@;'; put 'put ''ZT0iaGVscCIsci5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2Nhc2UibG9hZGluZyI6ci5zaGFwZT0ibG9hZGluZyIsci5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsci50aXRsZT10aGlzLmNvbW1vblN0cmlu''@;'; put 'put ''Z3Mua2V5cy51bmtub3duO2JyZWFrO2RlZmF1bHQ6ci5zaGFwZT10aGlzLmRlZmF1bHRJY29uU2hhcGUsci5jc3NDbGFzcz0iYWxlcnQtaW5mbyIsci50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvfXJldHVybiByfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0''@;'; put 'put ''dXJuIG5ldyhlfHxuKShPcihmcykpfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE9IPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2U9bmV3IHVyfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09i''@;'; put 'put ''c2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGUpe2UhPT10aGlzLl9jdXJyZW50JiYodGhpcy5fY3VycmVudD1lLHRoaXMuX2NoYW5nZS5uZXh0KGUpKX1nZXQgYWN0aXZlQWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzJiZ0aGlz''@;'; put 'put ''LmFsbEFsZXJ0cy5maWx0ZXIoZT0+IWUuX2Nsb3NlZCl9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVBbGVydHNbdGhpcy5jdXJyZW50XX1zZXQgY3VycmVudEFsZXJ0KGUpe3RoaXMuY3VycmVudD10aGlzLmFjdGl2ZUFsZXJ0cy5pbmRl''@;'; put 'put ''eE9mKGUpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVBbGVydHMubGVuZ3RofHwwfW1hbmFnZShlKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmFsbEFsZXJ0cz1lLHRoaXMuY3VycmVudD0i''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIHRoaXMuX2N1cnJlbnQ/dGhpcy5fY3VycmVudDowLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy5hbGxBbGVydHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmN1cnJlbnQ+PXRoaXMuYWxsQWxlcnRzLmxl''@;'; put 'put ''bmd0aCYmKHRoaXMuY3VycmVudD1NYXRoLm1heCgwLHRoaXMuYWxsQWxlcnRzLmxlbmd0aC0xKSl9KX1uZXh0KCl7dGhpcy5fY3VycmVudD10aGlzLmN1cnJlbnQ9PT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMT8wOnRoaXMuY3VycmVudCsxLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1''@;'; put 'put ''cnJlbnQpfXByZXZpb3VzKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9MD09PXRoaXMuY3VycmVudD90aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMTp0aGlzLmN1cnJlbnQtMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9b3BlbigpezAh''@;'; put 'put ''PT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnRBbGVydHx8KHRoaXMuX2N1cnJlbnQ9MCksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfWNsb3NlKGUpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJihlJiYodGhpcy5fY3VycmVudD1NYXRoLm1h''@;'; put 'put ''eCgwLHRoaXMuY3VycmVudC0xKSksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9''@;'; put 'put ''LG4uXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTUE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7dGhpcy5pY29uU2VydmljZT1lLHRoaXMuY2RyPXIsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT1pLHRoaXMuY29tbW9uU3Ry''@;'; put 'put ''aW5ncz1hLHRoaXMucmVuZGVyZXI9Yyx0aGlzLmhvc3RFbGVtZW50PW0sdGhpcy5pc1NtYWxsPSExLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5pc0FwcExldmVsPSExLHRoaXMuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRDbG9zZUJ1dHRvbkFy''@;'; put 'put ''aWFMYWJlbCx0aGlzLl9jbG9zZWRDaGFuZ2VkPW5ldyBZcighMSksdGhpcy5fY2xvc2VkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9pc0xpZ2h0d2VpZ2h0PSExfWdldCBpc0xpZ2h0d2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzTGlnaHR3ZWlnaHR9c2V0IGlzTGlnaHR3ZWlnaHQo''@;'; put 'put ''ZSl7dGhpcy5faXNMaWdodHdlaWdodD1lLHRoaXMuY29uZmlnQWxlcnRUeXBlKHRoaXMuX29yaWdBbGVydFR5cGUpfWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShlKXt0aGlzLl9vcmlnQWxlcnRUeXBlPWUsdGhpcy5jb25m''@;'; put 'put ''aWdBbGVydFR5cGUoZSl9c2V0IGFsZXJ0SWNvblNoYXBlKGUpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGU9ZX1zZXQgY2xvc2VkKGUpe2UmJiF0aGlzLl9jbG9zZWQ/dGhpcy5jbG9zZSgpOiFlJiZ0aGlzLl9jbG9zZWQmJnRoaXMub3BlbigpfWdldCBhbGVydENsYXNzKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaWNvblNlcnZpY2UuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZSkuY3NzQ2xhc3N9Z2V0IGhpZGRlbigpe3JldHVybiB0aGlzLl9oaWRkZW59c2V0IGhpZGRlbihlKXtlIT09dGhpcy5faGlkZGVuJiYodGhpcy5faGlkZGVuPWUsdGhpcy5faGlk''@;'; put 'put ''ZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIiksdGhpcy5jZHIuZGV0ZWN0Q2hh''@;'; put 'put ''bmdlcygpKX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhpZGRlbj10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCE9PXRo''@;'; put 'put ''aXN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChlPT5lLnVuc3Vic2NyaWJlKCkpfWNvbmZpZ0FsZXJ0VHlwZShlKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1lfW9wZW4oKXt0aGlzLl9jbG9zZWQ9ITEsdGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhp''@;'; put 'put ''cy5tdWx0aUFsZXJ0U2VydmljZS5vcGVuKCksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCExKX1jbG9zZSgpe2lmKCF0aGlzLmNsb3NhYmxlKXJldHVybjtjb25zdCBlPXRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmN1cnJlbnRBbGVydD09PXRoaXM7dGhpcy5fY2xvc2VkPSEwLHRoaXMubXVs''@;'; put 'put ''dGlBbGVydFNlcnZpY2U/LmFjdGl2ZUFsZXJ0cyYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jbG9zZShlKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShvcSksV2UoRnMpLFdlKE9ILDgpLFdl''@;'; put 'put ''KGZzKSxXZShUbyksV2UoemkpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbMCwiY2xyQWxlcnRTaXplU21hbGwiLCJpc1NtYWxsIl0sY2xvc2FibGU6WzAsImNsckFsZXJ0Q2xvc2FibGUiLCJjbG9zYWJsZSJdLGlz''@;'; put 'put ''QXBwTGV2ZWw6WzAsImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixpc0xpZ2h0d2VpZ2h0OlswLCJjbHJBbGVydExpZ2h0d2VpZ2h0IiwiaXNMaWdodHdlaWdodCJdLGFsZXJ0VHlwZTpbMCwi''@;'; put 'put ''Y2xyQWxlcnRUeXBlIiwiYWxlcnRUeXBlIl0sYWxlcnRJY29uU2hhcGU6WzAsImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOlswLCJjbHJBbGVydENsb3NlZCIsImNsb3NlZCJdfSxvdXRwdXRzOntfY2xvc2VkQ2hhbmdlZDoiY2xyQWxlcnRDbG9zZWRDaGFuZ2UifSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbb3FdKV0sbmdDb250ZW50U2VsZWN0b3JzOkNvLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsImFsZXJ0IiwzLCJuZ0NsYXNzIiwiYWxlcnQtc20iLCJhbGVydC1saWdodHdlaWdodCIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJd''@;'; put 'put ''LFsxLCJhbGVydCIsMywibmdDbGFzcyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBs''@;'; put 'put ''YXRlOmZ1bmN0aW9uKGUscil7MSZlJiYobmEoKSxjdCgwLHlYZSw0LDgsImRpdiIsMCkpLDImZSYmeWUoIm5nSWYiLCFyLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1J1LG1hLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxlNGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlz''@;'; put 'put ''Lmljb25TZXJ2aWNlPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKG9xKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hbGVydC1pdGVtIl1dLGhvc3RBdHRyczpbMSwiYWxlcnQtaXRlbSJdLHN0YW5kYWxvbmU6''@;'; put 'put ''ITEsbmdDb250ZW50U2VsZWN0b3JzOkNvLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsiY2xhc3MiLCJhbGVydC1zcGlubmVyIiwiY2xySW5saW5lIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0LWljb24iLCJyb2xlIiwiaW1nIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJjbHJJbmxpbmUiLCIiLDEsImFsZXJ0LXNwaW5uZXIiXSxbInJvbGUiLCJpbWciLDEsImFsZXJ0LWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSgpLHJlKDAsImRpdiIsMCksY3QoMSxfWGUsMSwwLCJjbHItc3Bpbm5lciIsMSkoMixiWGUsMSwyLCJjZHMtaWNv''@;'; put 'put ''biIsMiksaWUoKSxCcigzKSksMiZlJiYoYWUoKSx5ZSgibmdJZiIsImxvYWRpbmciPT09ci5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSksYWUoKSx5ZSgibmdJZiIsImxvYWRpbmciIT09ci5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSkpfSxkZXBlbmRlbmNpZXM6W21hLHJzLFNoXSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx4QT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dLHN0YW5kYWxvbmU6ITF9KSxufSko''@;'; put 'put ''KSx0NGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9ZSx0aGlzLmNvbW1vblN0cmluZ3M9cix0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgWXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IFlyfWdldCBjdXJyZW50''@;'; put 'put ''QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChlKXtlJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9ZSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZp''@;'; put 'put ''Y2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoZSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWV9Z2V0IHByZXZpb3VzQWxlcnRBcmlhTGFiZWwoKXtjb25zdCBlPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooMT09PWU/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudDplLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5l''@;'; put 'put ''eHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGU9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGU9PT10aGlzLm11bHRpQWxlcnRTZXJ2''@;'; put 'put ''aWNlLmNvdW50PzE6ZSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShlPT57dGhp''@;'; put 'put ''cy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGUpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3RpdmVBbGVydHNbZV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBh''@;'; put 'put ''Z2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShXZShPSCksV2UoZnMpKX0sbi5cdTAyNzVjbXA9VnIoe3R5''@;'; put 'put ''cGU6bixzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImFsZXJ0cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbMCwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il0sY3Vy''@;'; put 'put ''cmVudEFsZXJ0SW5kZXg6WzAsImNsckN1cnJlbnRBbGVydEluZGV4IiwiY3VycmVudEFsZXJ0SW5kZXgiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5n''@;'; put 'put ''ZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6OSx2YXJzOjYsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwiYWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJl''@;'; put 'put ''Y3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihyZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwy''@;'; put 'put ''KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIucGFnZURvd24oKX0pLFZ0KDMsImNkcy1pY29uIiwzKSxpZSgpKCkscmUoNCwiZGl2Iiw0KSxUZSg1KSxpZSgpLHJlKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHIucGFnZVVwKCl9''@;'; put 'put ''KSxWdCg4LCJjZHMtaWNvbiIsNiksaWUoKSgpKCkpLDImZSYmKGFlKDIpLFJyKCJhcmlhLWxhYmVsIixyLnByZXZpb3VzQWxlcnRBcmlhTGFiZWwpLGFlKCksUnIoInRpdGxlIixyLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91cyksYWUoMiksbjAoIiIsci5tdWx0aUFsZXJ0U2VydmljZS5j''@;'; put 'put ''dXJyZW50KzEsIiAvICIsci5tdWx0aUFsZXJ0U2VydmljZS5jb3VudCwiIiksYWUoMiksUnIoImFyaWEtbGFiZWwiLHIubmV4dEFsZXJ0QXJpYUxhYmVsKSxhZSgpLFJyKCJ0aXRsZSIsci5jb21tb25TdHJpbmdzLmtleXMubmV4dCkpfSxkZXBlbmRlbmNpZXM6W3JzXSxlbmNhcHN1bGF0aW9u''@;'; put 'put ''OjJ9KSxufSkoKSxuNGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWUsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9bmV3IFlyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlPW5ldyBZcighMSksdGhpcy5zdWJzY3JpcHRpb25zPVtd''@;'; put 'put ''fXNldCBhbGxBbGVydHMoZSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5tYW5hZ2UoZSl9c2V0IF9pbnB1dEN1cnJlbnRJbmRleChlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0wJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWUpfWdldCBjdXJyZW50QWxlcnRJbmRleCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGUpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1lfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJl''@;'; put 'put ''bnRBbGVydChlKXtlJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9ZSl9Z2V0IGFsZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoZT0+ITE9PT1lLmhpZGRlbil9Z2V0IGN1cnJlbnRBbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2Vydmlj''@;'; put 'put ''ZS5jdXJyZW50QWxlcnQ/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQuYWxlcnRUeXBlOiIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e3RoaXMuY3VycmVu''@;'; put 'put ''dEFsZXJ0SW5kZXhDaGFuZ2UubmV4dChlKSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5uZXh0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSksdGhpcy5tdWx0''@;'; put 'put ''aUFsZXJ0U2VydmljZS5kZXN0cm95KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKE9IKSl9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImNsci1hbGVydHMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxyLGkpe2lm''@;'; put 'put ''KDEmZSYmc28oaSxNQSw0KSwyJmUpe2xldCBhO2RpKGE9aGkoKSkmJihyLmFsbEFsZXJ0cz1hKX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLHIpezImZSYmYnIoImFsZXJ0cyIsITApKCJhbGVydC1kYW5nZXIiLCJkYW5nZXIiPT1yLmN1cnJlbnRBbGVydFR5cGUpKCJh''@;'; put 'put ''bGVydC1pbmZvIiwiaW5mbyI9PXIuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LXN1Y2Nlc3MiLCJzdWNjZXNzIj09ci5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtd2FybmluZyIsIndhcm5pbmciPT1yLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1uZXV0cmFsIiwibmV1dHJhbCI9PXIuY3Vy''@;'; put 'put ''cmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4OlswLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsIl9pbnB1dEN1cnJlbnRJbmRleCJdLGN1cnJlbnRBbGVydDpbMCwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENo''@;'; put 'put ''YW5nZToiY2xyQ3VycmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbT0hdKV0sbmdDb250ZW50U2VsZWN0b3JzOkNYZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1sx''@;'; put 'put ''LCJhbGVydHMtd3JhcHBlciJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIpezEmZSYmKG5hKHdYZSkscmUoMCwiZGl2IiwwKSxjdCgxLFNYZSwxLDEsImNsci1hbGVydHMtcGFnZXIi''@;'; put 'put ''LDEpLEJyKDIpLGllKCkpLDImZSYmKGFlKCkseWUoIm5nSWYiLHIubXVsdGlBbGVydFNlcnZpY2UuY291bnQ+MSkpfSxkZXBlbmRlbmNpZXM6W21hLHQ0ZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksbn0pKCkscjRlPSgoKT0+e2NsYXNzIG57Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtIcy5hZGRJY29ucyhWSyxGVWUsSFVlLE5VZSxCSyxWVWUsalQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxOcyx3WCxVd119KSxufSko''@;'; put 'put ''KSxPUWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbcjRlXX0pLG59KSgpLGk0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUp''@;'; put 'put ''e3RoaXMuX2RvY3VtZW50PWV9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9k''@;'; put 'put ''b2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShPcihYcykpfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGE0ZT0oKCk9''@;'; put 'put ''PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5mYWRlTW92ZT0iZmFkZURvd24iLHRoaXMuYmFja2Ryb3A9ITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92''@;'; put 'put ''aWRlZEluOiJyb290In0pLG59KSgpLGh1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5fc2Nyb2xsaW5nU2VydmljZT1lLHRoaXMuY29tbW9uU3RyaW5ncz1yLHRoaXMubW9kYWxTdGFja1NlcnZpY2U9aSx0aGlzLmNvbmZpZ3VyYXRpb249YSx0aGlzLm1vZGFsSWQ9''@;'; put 'put ''UHUoKSx0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2VkPW5ldyBZcighMSksdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmNsb3NlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlLHRoaXMuc2l6ZT0ibWQiLHRoaXMuc3RhdGljQmFja2Ryb3A9ITAsdGhpcy5z''@;'; put 'put ''a2lwQW5pbWF0aW9uPSExLHRoaXMuc3RvcENsb3NlPSExLHRoaXMuYWx0Q2xvc2U9bmV3IFlyKCExKSx0aGlzLmJ5cGFzc1Njcm9sbFNlcnZpY2U9ITF9Z2V0IGZhZGVNb3ZlKCl7cmV0dXJuIHRoaXMuc2tpcEFuaW1hdGlvbj8iIjp0aGlzLmNvbmZpZ3VyYXRpb24uZmFkZU1vdmV9c2V0IGZh''@;'; put 'put ''ZGVNb3ZlKGUpe3RoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZT1lfWdldCBiYWNrZHJvcCgpe3JldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFja2Ryb3B9bmdPbkNoYW5nZXMoZSl7IXRoaXMuYnlwYXNzU2Nyb2xsU2VydmljZSYmZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eS5jYWxsKGUsIl9vcGVuIikmJihlLl9vcGVuLmN1cnJlbnRWYWx1ZT8odGhpcy5fc2Nyb2xsaW5nU2VydmljZS5zdG9wU2Nyb2xsaW5nKCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKSk6dGhpcy5fc2Nyb2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmco''@;'; put 'put ''KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpfW9wZW4oKXt0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMCx0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCEwKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKX1i''@;'; put 'put ''YWNrZHJvcENsaWNrKCl7dGhpcy5zdGF0aWNCYWNrZHJvcD90aGlzLnRpdGxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTp0aGlzLmNsb3NlKCl9Y2xvc2UoKXt0aGlzLnN0b3BDbG9zZT90aGlzLmFsdENsb3NlLmVtaXQoITEpOiF0aGlzLmNsb3NhYmxlfHwhdGhpcy5fb3Blbnx8KHRoaXMuX29w''@;'; put 'put ''ZW49ITEpfWZhZGVEb25lKGUpeyJ2b2lkIj09PWUudG9TdGF0ZSYmKHRoaXMuX29wZW5DaGFuZ2VkLmVtaXQoITEpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbENsb3NlKHRoaXMpKX1zY3JvbGxUb3AoKXt0aGlzLmJvZHlFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xs''@;'; put 'put ''VG8oMCwwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoV2UoaTRlKSxXZShmcyksV2UoRnBlKSxXZShhNGUpKX0sbi5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2xyLW1vZGFsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUs''@;'; put 'put ''cixpKXtpZigxJmUmJnNvKGksTVhlLDUpLDImZSl7bGV0IGE7ZGkoYT1oaSgpKSYmKHIubW9kYWxDb250ZW50VGVtcGxhdGU9YS5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxyKXtpZigxJmUmJihXYShEM2UsNSksV2EoSTNlLDUpKSwyJmUpe2xldCBpO2RpKGk9aGkoKSkmJihyLnRp''@;'; put 'put ''dGxlPWkuZmlyc3QpLGRpKGk9aGkoKSkmJihyLmJvZHlFbGVtZW50UmVmPWkuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxyKXsyJmUmJmJyKCJvcGVuIixyLl9vcGVuKX0saW5wdXRzOntfb3BlbjpbMCwiY2xyTW9kYWxPcGVuIiwiX29wZW4iXSxjbG9zYWJs''@;'; put 'put ''ZTpbMCwiY2xyTW9kYWxDbG9zYWJsZSIsImNsb3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WzAsImNsck1vZGFsQ2xvc2VCdXR0b25BcmlhTGFiZWwiLCJjbG9zZUJ1dHRvbkFyaWFMYWJlbCJdLHNpemU6WzAsImNsck1vZGFsU2l6ZSIsInNpemUiXSxzdGF0aWNCYWNrZHJvcDpbMCwi''@;'; put 'put ''Y2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0JhY2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbMCwiY2xyTW9kYWxTa2lwQW5pbWF0aW9uIiwic2tpcEFuaW1hdGlvbiJdLHN0b3BDbG9zZTpbMCwiY2xyTW9kYWxQcmV2ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OlswLCJj''@;'; put 'put ''bHJNb2RhbExhYmVsbGVkQnlJZCIsImxhYmVsbGVkQnkiXSxieXBhc3NTY3JvbGxTZXJ2aWNlOlswLCJjbHJNb2RhbE92ZXJyaWRlU2Nyb2xsU2VydmljZSIsImJ5cGFzc1Njcm9sbFNlcnZpY2UiXX0sb3V0cHV0czp7X29wZW5DaGFuZ2VkOiJjbHJNb2RhbE9wZW5DaGFuZ2UiLGFsdENsb3Nl''@;'; put 'put ''OiJjbHJNb2RhbEFsdGVybmF0ZUNsb3NlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW10sW2k0ZV0pLFd0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6RVhlLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0aXRsZSIsIiJdLFsiYm9keSIsIiJdLFsiY2xhc3MiLCJtb2RhbCIsMywibW9kYWwt''@;'; put 'put ''ZnVsbC1zY3JlZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwiYXJpYS1tb2RhbCIsInRydWUiLDEsIm1vZGFs''@;'; put 'put ''LWRpYWxvZyIsMywiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXSxbMSwiY2xyLXNyLW9ubHkiXSxbImNsYXNzIiwibW9kYWwtY29udGVudC13cmFwcGVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9k''@;'; put 'put ''YWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjZGtGb2N1c0luaXRpYWwiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtb2RhbC10aXRsZS13cmFwcGVyIiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHktd3Jh''@;'; put 'put ''cHBlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxyKXsxJmUmJihuYSh4WGUpLGN0KDAs''@;'; put 'put ''a1hlLDcsMTYsImRpdiIsMikoMSxEWGUsMSwxLCJkaXYiLDMpKSwyJmUmJih5ZSgibmdJZiIsci5fb3BlbiksYWUoKSx5ZSgibmdJZiIsci5iYWNrZHJvcCkpfSxkZXBlbmRlbmNpZXM6W21hLFl3LHJzXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltnMigiZmFkZU1vdmUiLFt1''@;'; put 'put ''dSgiKiA9PiBmYWRlRG93biIsW0NzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSksWTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLHV1KCJmYWRlRG93biA9PiAqIixbWTAoIjAuMnMgZWFzZS1pbi1vdXQiLENzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xh''@;'; put 'put ''dGUoMCwgLTI1JSkifSkpXSksdXUoIiogPT4gZmFkZUxlZnQiLFtDcyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSksWTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLHV1KCJmYWRlTGVmdCA9PiAqIixbWTAoIjAuMnMgZWFzZS1pbi1vdXQiLENzKHtvcGFjaXR5OjAs''@;'; put 'put ''dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSldKV0pLGcyKCJmYWRlIixbdXUoInZvaWQgPT4gKiIsW0NzKHtvcGFjaXR5OjB9KSxZMCgiMC4ycyBlYXNlLWluLW91dCIsQ3Moe29wYWNpdHk6Ljg1fSkpXSksdXUoIiogPT4gdm9pZCIsW1kwKCIwLjJzIGVhc2UtaW4tb3V0IixDcyh7''@;'; put 'put ''b3BhY2l0eTowfSkpXSldKV19fSksbn0pKCksYzA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy5yZW5kZXJlcj1lLHRoaXMuaG9zdD1yLHRoaXMudGFiaW5kZXg9IjAiLHRoaXMudW5saXN0ZW5lcnM9W10saS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMub2JzZXJ2''@;'; put 'put ''ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT50aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKHIubmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKGUubGlzdGVuKHIubmF0aXZlRWxlbWVudCwibW91c2V1cCIsKCk9Pnt0aGlzLmFkZE9y''@;'; put 'put ''UmVtb3ZlVGFiSW5kZXgoKX0pLGUubGlzdGVuKHIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIiwoKT0+e3RoaXMucmVtb3ZlVGFiSW5kZXgoKX0pKX0pfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLnVubGlzdGVuZXJzLmxlbmd0aDspdGhpcy51bmxpc3RlbmVycy5wb3AoKSgpO3RoaXMub2Jz''@;'; put 'put ''ZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMub2JzZXJ2ZXI9bnVsbH1hZGRUYWJJbmRleCgpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsdGhpcy50YWJpbmRleCl9cmVtb3ZlVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKX1hZGRPclJlbW92ZVRhYkluZGV4KCl7Y29uc3QgZT10aGlzLmhvc3QubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2UmJmUuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0P3RoaXMuYWRkVGFiSW5kZXgo''@;'; put 'put ''KTp0aGlzLnJlbW92ZVRhYkluZGV4KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFdlKFRvKSxXZSh6aSksV2UoSmEpKX0sbi5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxlY3RvcnM6W1siIiw4LCJtb2RhbC1ib2R5Il1dLHN0YW5kYWxvbmU6ITF9''@;'; put 'put ''KSxufSkoKSxQSD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMoalQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSx2SCxOcyxO''@;'; put 'put ''c119KSxufSkoKSxQUWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsdkgsTnMsUEgsUEgsTnNdfSksbn0pKCksRlFlPSgoKT0+''@;'; put 'put ''e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhXX0pLG59KSgpLE5RZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7SHMuYWRkSWNvbnMo''@;'; put 'put ''QlVlLGpVZSxWSyxCSyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE5zLFV3LE5zLFV3XX0pLG59KSgpLFVRZT0oKCk9PntjbGFzcyBue2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7SHMuYWRkSWNvbnMoVkssQkspfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxQSCxyNGVdfSksbn0pKCksTTE9KCgpPT57Y2xhc3Mgbnt9cmV0''@;'; put 'put ''dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUdpKHt0eXBlOm59KSxuLlx1MDI3NWluaj16bih7aW1wb3J0czpbT1FlLFJRZSxOcyxQSCx5WCxOZixsSCxBcWUsRHBlLE1KZSxHcWUsVVFlLFBRZSxncWUsVXcsRlFlLHVBLE5RZV19KSxu''@;'; put 'put ''fSkoKSxXUWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIpe3RoaXMuc2FzU2VydmljZT1lLHRoaXMubG9nZ2VyU2VydmljZT1yLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgTHQsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFz''@;'; put 'put ''czpudWxsfX1uZ09uSW5pdCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUocj0+e3RoaXMuaXNBY3RpdmU9cjtsZXQg''@;'; put 'put ''aT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7aSYmKHI/aS5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTppLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgp''@;'; put 'put ''e3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihlPT57dGhpcy5sb2FkaW5nPSExLGV8fCh0aGlzLmVycm9yTXNnPSJVc2Vy''@;'; put 'put ''bmFtZSBvciBwYXNzd29yZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sZT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coZSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9ZSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihy''@;'; put 'put ''KXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEpzKSxXZShtaCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLHN0YW5kYWxvbmU6ITEsZGVjbHM6MjAsdmFyczo5LGNvbnN0czpbWzEsImxvZ2luLXNpZGViYXItd3JhcHBlciJdLFsxLCJs''@;'; put 'put ''b2dpbi1zaWRlYmFyIiwic2lkZUJhclByb3BzIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsImxvZ2luLWxvZ28i''@;'; put 'put ''XSxbMSwibG9naW4iLDMsIm5nU3VibWl0Il0sWzEsInRpdGxlIl0sWzEsIndlbGNvbWUiXSxbMSwiaGludCJdLFsxLCJsb2dpbi1ncm91cCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwidXNlciIsInR5cGUiLCJ0ZXh0IiwicGxhY2Vob2xkZXIiLCJVc2VybmFtZSIsMSwidXNlcm5hbWUiLDMs''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJwYXNzIiwidHlwZSIsInBhc3N3b3JkIiwicGxhY2Vob2xkZXIiLCJQYXNzd29yZCIsMSwicGFzc3dvcmQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdl''@;'; put 'put ''IiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRDbG9zZWQiXSxbImNsci1hbGVydC1pdGVtIiwiIiwxLCJhbGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxb''@;'; put 'put ''MSwib3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxWdCgyLCJpbWciLDIpLHJlKDMsImZvcm0iLDMpLGt0KCJuZ1N1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5zdWJtaXQoKX0pLHJlKDQsImxhYmVsIiw0KSg1LCJoMyIs''@;'; put 'put ''NSksVGUoNiwiV2VsY29tZSB0byIpLGllKCksVGUoNywiIERhdGEgQ29udHJvbGxlciAiKSxyZSg4LCJoNCIsNiksVGUoOSwiQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIpLGllKCkoKSxyZSgxMCwiZGl2Iiw3KSgxMSwiaW5wdXQiLDgpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihjKXtyZXR1cm4gdWkoaS5kYXRhLnVzZXIsYyl8fChpLmRhdGEudXNlcj1jKSxjfSksaWUoKSxyZSgxMiwiaW5wdXQiLDkpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gdWkoaS5kYXRhLnBhc3MsYyl8fChpLmRhdGEucGFzcz1jKSxjfSksaWUoKSxyZSgxMywiY2xy''@;'; put 'put ''LWFsZXJ0IiwxMCksY2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gdWkoaS5hbGVydENsb3NlZCxjKXx8KGkuYWxlcnRDbG9zZWQ9YyksY30pLHJlKDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLFRlKDE2KSxpZSgpKCkoKSxyZSgxNywiYnV0dG9uIiwxMyks''@;'; put 'put ''VGUoMTgsIiBMb2cgaW4gIiksaWUoKSgpKCkoKSxWdCgxOSwiZGl2IiwxNCksaWUoKSksMiZyJiYoYnIoImFjdGl2ZSIsaS5pc0FjdGl2ZSksYWUoMTEpLGxpKCJuZ01vZGVsIixpLmRhdGEudXNlciksYWUoKSxsaSgibmdNb2RlbCIsaS5kYXRhLnBhc3MpLGFlKCkseWUoImNsckFsZXJ0VHlw''@;'; put 'put ''ZSIsImFsZXJ0LWRhbmdlciIpLGxpKCJjbHJBbGVydENsb3NlZCIsaS5hbGVydENsb3NlZCksYWUoMyksdnIoaS5lcnJvck1zZyksYWUoKSx5ZSgiY2xyTG9hZGluZyIsaS5sb2FkaW5nKSgiZGlzYWJsZWQiLGkubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W1E5LHpsLGlsLHE5LFFzLHEzLE1B''@;'; put 'put ''LHhBLFMxLFZmLHBzLFBkXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpO2Z1bmN0aW9uIFpRZShuLHQpezEmbiYmKHJlKDAsInNwYW4iLDEwKSxUZSgxLCJsb2FkaW5nIiksaWUoKSl9ZnVuY3Rpb24gWVFlKG4sdCl7MSZuJiYocmUoMCwic3BhbiIsMTEpLFRlKDEsImxvYWRlZCIp''@;'; put 'put ''LGllKCkpfWZ1bmN0aW9uIEdRZShuLHQpezEmbiYmKHJlKDAsInNwYW4iLDEyKSxUZSgxLCJmYWlsZWQiKSxpZSgpKX1mdW5jdGlvbiAkUWUobix0KXtpZigxJm4mJihyZSgwLCJwIikoMSwiY29kZSIpLFRlKDIpLGllKCksVGUoMywiIFx4YTAgIiksY3QoNCxaUWUsMiwwLCJzcGFuIiw3KSg1''@;'; put 'put ''LFlRZSwyLDAsInNwYW4iLDgpKDYsR1FlLDIsMCwic3BhbiIsOSksaWUoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKDIpLHZyKGUucHJvZ3JhbSksYWUoMikseWUoIm5nSWYiLGUucnVubmluZyksYWUoKSx5ZSgibmdJZiIsIWUucnVubmluZyYmZS5zdWNjZXNzZnVsKSxhZSgpLHll''@;'; put 'put ''KCJuZ0lmIiwhZS5ydW5uaW5nJiYhZS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24gS1FlKG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDUpLGN0KDEsJFFlLDcsNCwicCIsNiksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7eWUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1p''@;'; put 'put ''ZGRsZSIpLGFlKCkseWUoIm5nRm9yT2YiLGUucmVxdWVzdHMpfX1sZXQgWFFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLl9sb2FkaW5nU3ViPW5ldyBMdH1uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe3RoaXMuX2xv''@;'; put 'put ''YWRpbmdTdWIudW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1sb2FkaW5nLWluZGljYXRvciJdXSxzdGFuZGFsb25lOiExLGRlY2xz''@;'; put 'put ''OjYsdmFyczo2LGNvbnN0czpbWzEsImxvYWRpbmctaW5kaWNhdG9yIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwic3Bpbm5lci1pbnZlcnNlIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIiwx''@;'; put 'put ''LCJpcy1pbmZvIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImVycm9yIiwic2l6ZSIsIjI0IiwxLCJpcy1lcnJvciJdLFszLCJjbHJQb3NpdGlvbiIsNCwiY2xySWZPcGVuIl0sWzMsImNsclBvc2l0aW9uIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJydW5u''@;'; put 'put ''aW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInN1Y2Nlc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmFpbCIsNCwibmdJZiJdLFsxLCJydW5uaW5nIl0sWzEsInN1Y2Nlc3MiXSxbMSwiZmFpbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImRpdiIsMCkoMSwiY2xyLXNpZ25w''@;'; put 'put ''b3N0IiksVnQoMiwic3BhbiIsMSkoMywiY2xyLWljb24iLDIpKDQsImNsci1pY29uIiwzKSxjdCg1LEtRZSwyLDIsImNsci1zaWducG9zdC1jb250ZW50Iiw0KSxpZSgpKCkpLDImciYmKGFlKDIpLFRkKCJkaXNwbGF5IixpLmxvYWRpbmc/ImlubGluZS1ibG9jayI6Im5vbmUiKSxhZSgpLFRk''@;'; put 'put ''KCJkaXNwbGF5IiwhaS5sb2FkaW5nJiZpLnJlcXVlc3RzLmxlbmd0aD4wJiZpLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxhZSgpLFRkKCJkaXNwbGF5IiwhaS5sb2FkaW5nJiZpLnJlcXVlc3RzLmxlbmd0aD4wJiYhaS5yZXF1ZXN0c1swXS5zdWNjZXNz''@;'; put 'put ''ZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIikpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLFVsLHkyLGZILGlwZSxoSF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtmdW5jdGlvbiBxUWUobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjZHMtaWNvbiIsMTIpLGt0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS50b2dnbGVEYXJrTW9kZSghMCkpfSksaWUoKX19ZnVuY3Rpb24gSlFlKG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2RzLWljb24iLDEzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCku''@;'; put 'put ''dG9nZ2xlRGFya01vZGUoITEpKX0pLGllKCl9fWZ1bmN0aW9uIFFRZShuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iKSxWdCgxLCJpbWciLDE0KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLFBFKCJzcmMiLGUuZ2V0UGljdHVyZVVybCgpLEh4KX19ZnVuY3Rpb24gZWV0KG4sdCl7aWYo''@;'; put 'put ''MSZuJiYocmUoMCwic3BhbiIsMTUpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2JyKCJoaWRkZW4iLDA9PT1lLmZhaWxlZFJlcXMubGVuZ3RoKSxhZSgpLHZyKGUuZmFpbGVkUmVxcy5sZW5ndGgpfX1mdW5jdGlvbiB0ZXQobix0KXtpZigxJm4mJihyZSgwLCJzcGFuIiwxNiksVGUo''@;'; put 'put ''MSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YnIoImhpZGRlbiIsMD09PWUuZGVidWdMb2dzLmxlbmd0aCksYWUoKSx2cihlLmRlYnVnTG9ncy5sZW5ndGgpfX1mdW5jdGlvbiBuZXQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwxNyl9ZnVuY3Rpb24gcmV0KG4sdCl7MSZuJiYocmkoMCks''@;'; put 'put ''cmUoMSwiYSIsMjgpKDIsInNwYW4iLDI5KSxUZSgzLCJEb2N1bWVudGF0aW9uIiksaWUoKSgpLGlpKCkpfWZ1bmN0aW9uIGlldChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1kcm9wZG93bi1tZW51IiwxOCkoMSwiZGl2IiwxOSwwKSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5l''@;'; put 'put ''ciIsMjApLGt0KCJjbGljayIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1kYSgyKTtyZXR1cm4gbXQoRWUoKS5vbkRlYnVnUm93Q2xpY2soaSxhKSl9KSxyZSg0LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIsMjEpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChl''@;'; put 'put ''KTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEuc2FzanNDb25maWcuZGVidWcsaSl8fChhLnNhc2pzQ29uZmlnLmRlYnVnPWkpLG10KGkpfSksa3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkub25EZWJ1Z01vZGVDaGFuZ2UoKSl9KSxpZSgpLHJlKDYs''@;'; put 'put ''ImxhYmVsIiksVGUoNywiRGVidWcgTW9kZSIpLGllKCkoKSgpKCkscmUoOCwiYSIsMjIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLHJlKDksInNwYW4iKSxUZSgxMCwiU0FTIFJlcXVlc3RzIiksaWUoKSgpLGN0KDEx''@;'; put 'put ''LHJldCw0LDAsIm5nLWNvbnRhaW5lciIsNyksVnQoMTIsImRpdiIsMjMpLHJlKDEzLCJhIiwyNCkoMTQsInNwYW4iKSxUZSgxNSwiU3lzdGVtIiksaWUoKSgpLHJlKDE2LCJhIiwyNSksa3QoImNsaWNrIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5sb2dvdXQoaSkpfSkscmUo''@;'; put 'put ''MTcsInNwYW4iKSxUZSgxOCwiTG9nIE91dCIpLGllKCksVnQoMTksImNsci1pY29uIiwyNiksaWUoKSxyZSgyMCwiZGl2IiwyNykoMjEsInNwYW4iKSxUZSgyMiksaWUoKSgpKCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7YWUoNSksbGkoIm5nTW9kZWwiLGUuc2FzanNDb25maWcuZGVidWcpLGFl''@;'; put 'put ''KDYpLHllKCJuZ0lmIiwhZS5pc0RlcGxveVBhZ2UpLGFlKDExKSxNcigidiIsZS5jb21taXRWZXIsIiIpfX1sZXQgYWV0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy51c2VyU2VydmljZT1lLHRoaXMuc2FzU2VydmljZT1yLHRoaXMuZXZlbnRTZXJ2aWNlPWksdGhp''@;'; put 'put ''cy5yb3V0ZXI9YSx0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgTHQsdGhpcy51c2VyU3ViPW5ldyBMdCx0aGlzLmFwcExvZ3M9W10sdGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRSZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSEx''@;'; put 'put ''LHRoaXMuc2FzanNDb25maWc9bmV3IGgyLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIiLHRoaXMuZGFya01vZGU9dGhpcy5ldmVudFNlcnZpY2UuZGFya01vZGV9bmdPbkluaXQoKXt0aGlzLnVzZXJTdWI9dGhpcy51c2VyU2VydmljZS51c2VyQ2hh''@;'; put 'put ''bmdlLnN1YnNjcmliZShlPT57dGhpcy51c2VyTmFtZT1lLnVzZXJuYW1lfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCksdGhpcy5jb21taXRW''@;'; put 'put ''ZXI9InY3LjcuMyIucmVwbGFjZSgidiIsIiIpKyIuZzMyMmY5MDQifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5zdWJzY3JpYmUoKX10b2dnbGVEYXJrTW9kZShlKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShlKX1vcGVu''@;'; put 'put ''UmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoZSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhpcy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGUs''@;'; put 'put ''cil7ZS5zdG9wUHJvcGFnYXRpb24oKSxXbi51c2VyRHJvcGRvd25Db25maWcuY2xvc2VPbkRlYnVnQ2xpY2smJnNldFRpbWVvdXQoKCk9PntyLmNsaWNrKCl9LDMwMCl9bG9nb3V0KGUpe2UucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKHIpe2Nv''@;'; put 'put ''bnNvbGUuZXJyb3Iocil9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNlck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNs''@;'; put 'put ''dWRlcygiZGVwbG95Iil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoVSQpLFdlKEpzKSxXZShTYyksV2UocmwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItYWN0aW9ucyJdXSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGRlY2xzOjE0LHZhcnM6Nyxjb25zdHM6W1siZHJvcGRvd25JdGVtRGVidWciLCIiXSxbMSwiaGVhZGVyLWFjdGlvbnMiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2l6ZSIsIm1kIiwiY2xhc3MiLCJ0aGVtZS10b2dnbGUtaWNvbiBjdXJz''@;'; put 'put ''b3ItcG9pbnRlciIsInNoYXBlIiwibW9vbiIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaXplIiwibWQiLCJjbGFzcyIsInRoZW1lLXRvZ2dsZS1pY29uIGN1cnNvci1wb2ludGVyIiwic2hhcGUiLCJzdW4iLCJpbnZlcnNlIiwiZmFs''@;'; put 'put ''c2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJhcHAtbmF2LWRyb3Bkb3duIl0sWyJjbHJEcm9wZG93blRvZ2dsZSIsIiIsMSwibmF2LXRleHQiLCJjb2xvci13aGl0ZSIsInVzZXItbmF2LXRvZ2dsZSJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImJhZGdlIGJhZGdl''@;'; put 'put ''LWRhbmdlciIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJhZGdlIGJhZGdlLWluZm8iLDMsImhpZGRlbiIsNCwibmdJZiJdLFsic2hhcGUiLCJjYXJldCBkb3duIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJzaXplIiwi''@;'; put 'put ''bWQiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwxLCJ0aGVtZS10b2dnbGUtaWNvbiIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2l6ZSIsIm1kIiwic2hhcGUiLCJzdW4iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwx''@;'; put 'put ''LCJ0aGVtZS10b2dnbGUtaWNvbiIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiYWx0IiwicHJvZmlsZSBwaWN0dXJlIiwxLCJhdmF0YXItaW1nIiwzLCJzcmMiXSxbMSwiYmFkZ2UiLCJiYWRnZS1kYW5nZXIiXSxbMSwiYmFkZ2UiLCJiYWRnZS1pbmZvIl0sWyJzaGFwZSIsImNhcmV0''@;'; put 'put ''IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImRlYnVnLXN3aXRjaC1pdGVtIl0sWzEsInRvZ2dsZS1zd2l0Y2giLDMsImNsaWNrIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTEiLCJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUi''@;'; put 'put ''LCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWzEsInNlcGFyYXRvciJdLFsiaHJlZiIsIi4uLiIsInJvdXRlckxpbmsiLCIvc3lzdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIl0sWyJocmVmIiwiLi4uIiwiY2xyRHJvcGRv''@;'; put 'put ''d25JdGVtIiwiIiwzLCJjbGljayJdLFsic2hhcGUiLCJsb2dvdXQiLDEsImNsci1sb2dvdXQiXSxbMSwiY29weVJpZ2h0Il0sWyJ0YXJnZXQiLCJfYmxhbmsiLCJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvIiwiY2xyRHJvcGRvd25JdGVtIiwiIl0sWzEsImRyb3Bkb3du''@;'; put 'put ''LXRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihyZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksY3QoMixxUWUsMSwwLCJjZHMtaWNvbiIsMykoMyxKUWUsMSwwLCJjZHMtaWNvbiIsNCksaWUoKSxWdCg0LCJhcHAtbG9hZGluZy1pbmRpY2F0b3IiKSxyZSg1LCJjbHItZHJvcGRv''@;'; put 'put ''d24iLDUpKDYsImJ1dHRvbiIsNikoNywic3BhbiIpLFRlKDgpLGllKCksY3QoOSxRUWUsMiwxLCJzcGFuIiw3KSgxMCxlZXQsMiwzLCJzcGFuIiw4KSgxMSx0ZXQsMiwzLCJzcGFuIiw5KSgxMixuZXQsMSwwLCJjbHItaWNvbiIsMTApLGllKCksY3QoMTMsaWV0LDIzLDMsImNsci1kcm9wZG93''@;'; put 'put ''bi1tZW51IiwxMSksaWUoKSgpKSwyJnImJihhZSgyKSx5ZSgibmdJZiIsIWkuZGFya01vZGUudmFsdWUpLGFlKCkseWUoIm5nSWYiLCEhaS5kYXJrTW9kZS52YWx1ZSksYWUoNSksdnIoaS51c2VyTmFtZSksYWUoKSx5ZSgibmdJZiIsIk5vdCBsb2dnZWQgaW4iIT09aS51c2VyTmFtZSYmaS5p''@;'; put 'put ''c1ZpeWEpLGFlKCkseWUoIm5nSWYiLCFpLnNhc2pzQ29uZmlnLmRlYnVnKSxhZSgpLHllKCJuZ0lmIixpLnNhc2pzQ29uZmlnLmRlYnVnKSxhZSgpLHllKCJuZ0lmIiwhaS5pc1ZpeWEpKX0sZGVwZW5kZW5jaWVzOlttYSx2aCxpbCxRcyxYMSxVbCxycyx5MixwcyxDaCx6dyxiMixpNSxsdixj''@;'; put 'put ''dixqdyxYUWVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCksXzRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsZXJ0cz1uZXcgdXJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NXBy''@;'; put 'put ''b3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gb2V0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWFsZXJ0IiwyKSxjaSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSkuJGlt''@;'; put 'put ''cGxpY2l0O3JldHVybiB1aShhLmNsb3NlZCxpKXx8KGEuY2xvc2VkPWkpLG10KGkpfSksa3QoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5vbkFsZXJ0Q2xvc2UoKSl9KSxyZSgxLCJkaXYiLDMpKDIsInNwYW4iLDQpLFRlKDMpLGllKCko''@;'; put 'put ''KSgpfWlmKDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgiY2xyQWxlcnRUeXBlIixlLnR5cGUpKCJjbHJBbGVydEFwcExldmVsIiwhMCksbGkoImNsckFsZXJ0Q2xvc2VkIixlLmNsb3NlZCksYWUoMyksTXIoIiAiLGUubWVzc2FnZSwiICIpfX1mdW5jdGlvbiBzZXQobix0KXtpZigxJm4m''@;'; put 'put ''JihyZSgwLCJjbHItYWxlcnRzIiksY3QoMSxvZXQsNCw0LCJjbHItYWxlcnQiLDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nRm9yT2YiLGUuYWxlcnRzKX19bGV0IGNldD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2FsZXJ0c1NlcnZpY2U9ZSx0aGlz''@;'; put 'put ''LmFsZXJ0cz1bXSx0aGlzLmhhc09wZW5BbGVydD0hMSx0aGlzLmFsZXJ0c1N1Yj1uZXcgTHR9bmdPbkluaXQoKXt0aGlzLmFsZXJ0c1N1Yj10aGlzLl9hbGVydHNTZXJ2aWNlLmFsZXJ0cy5zdWJzY3JpYmUoZT0+e3RoaXMuYWxlcnRzLnB1c2goZSksdGhpcy5oYXNPcGVuQWxlcnQ9ITAsZS5l''@;'; put 'put ''cnImJmNvbnNvbGUuZXJyb3IoZS5lcnIpfSl9b25BbGVydENsb3NlKCl7dGhpcy5oYXNPcGVuQWxlcnQ9dGhpcy5hbGVydHMuc29tZShlPT4hZS5jbG9zZWQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKF80ZSkpfX1zdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWFsZXJ0cyJdXSxzdGFuZGFsb25lOiExLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIiwiY2xyQWxlcnRDbG9zZWRD''@;'; put 'put ''aGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCJdLFsxLCJhbGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsx''@;'; put 'put ''JnImJmN0KDAsc2V0LDIsMSwiY2xyLWFsZXJ0cyIsMCksMiZyJiZ5ZSgibmdJZiIsaS5oYXNPcGVuQWxlcnQpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLE1BLG40ZSx4QV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKSxGSD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5j''@;'; put 'put ''bGFzc2VzPSIifW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siY29udGFjdC1saW5rIl1dLGlucHV0czp7Y2xhc3NlczoiY2xhc3NlcyJ9LHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihyZSgwLCJhIiwwKSxUZSgxLCJzdXBwb3J0QGRh''@;'; put 'put ''dGFjb250cm9sbGVyLmlvIiksaWUoKSksMiZyJiYoYnIoInVuc2V0IiwiIiE9PWkuY2xhc3NlcykseWUoIm5nQ2xhc3MiLGkuY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6W1J1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpLGI0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5vcHRpb25zU3ViamVjdCQ9bmV3IHVyLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgdXJ9b3BlbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5lfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyB1cix0aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZh''@;'; put 'put ''YmxlKCl9Y2xvc2UoZSl7dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0Q2hhbmdlJC5uZXh0KHtwYXNzd29yZDplfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXco''@;'; put 'put ''cnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gdWV0KG4sdCl7MSZuJiYocmUoMCwicCIsMTMpLFRlKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0''@;'; put 'put ''cnkgYWdhaW4uICIpLGllKCkpfWZ1bmN0aW9uIGRldChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMikoMSwiY2xyLW1vZGFsIiwzKSgyLCJoMyIsNCksVGUoMywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGllKCkscmUoNCwiZGl2Iiw1KSg1LCJwIiw2KSxUZSg2''@;'; put 'put ''LCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaWUoKSxyZSg3LCJpbnB1dCIsNywwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVybiB1aShhLnBhc3N3b3JkSW5wdXQsaSl8fChhLnBhc3N3b3JkSW5wdXQ9aSksbXQoaSl9KSxpZSgpKCks''@;'; put 'put ''cmUoOSwiZGl2Iiw4KSgxMCwiZGl2IiksY3QoMTEsdWV0LDIsMCwicCIsOSksaWUoKSxyZSgxMiwiZGl2IiwxMCkoMTMsImJ1dHRvbiIsMTEpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5jbG9zZSgpKX0pLFRlKDE0LCIgQ2FuY2VsICIpLGllKCkscmUoMTUs''@;'; put 'put ''ImJ1dHRvbiIsMTIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPWRhKDgpO3JldHVybiBtdChFZSgpLmNsb3NlKGkudmFsdWUpKX0pLFRlKDE2LCIgVW5sb2NrICIpLGllKCkoKSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9dC5uZ0lmLHI9ZGEoOCksaT1FZSgpO2FlKCkseWUo''@;'; put 'put ''ImNsck1vZGFsT3BlbiIsZS5vcGVuKSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGFlKDYpLGxpKCJuZ01vZGVsIixpLnBhc3N3b3JkSW5wdXQpLGFlKDQpLHllKCJuZ0lmIixlLmVycm9yKSxhZSg0KSx5ZSgiZGlzYWJsZWQiLHIudmFsdWUubGVuZ3RoPDEp''@;'; put 'put ''fX1sZXQgaGV0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWUsdGhpcy5vcHRpb25zJD10aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3B0aW9uc1N1YmplY3QkLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMucGFz''@;'; put 'put ''c3dvcmRJbnB1dD0iIn1jbG9zZShlKXt0aGlzLnBhc3N3b3JkSW5wdXQ9IiIsdGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLmNsb3NlKGUpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKGI0ZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVj''@;'; put 'put ''bXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLHN0YW5kYWxvbmU6ITEsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImZpbGVQYXNzd29yZElucHV0IiwiIl0sWyJjbGFzcyIsImV4Y2VsLXBhc3N3b3JkLXJvb3QiLDQsIm5nSWYiXSxbMSwiZXhj''@;'; put 'put ''ZWwtcGFzc3dvcmQtcm9vdCJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4IiwiY2xyLWp1''@;'; put 'put ''c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibS0wIl0sWyJkYXRhLWxwaWdub3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlkIiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0IiwiZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2VyIiwzLCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbImNsYXNzIiwibS0wIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsxLCJidXR0b25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24i''@;'; put 'put ''LDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwibS0wIiwiY29sb3ItcmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYoY3QoMCxkZXQsMTcsNiwiZGl2IiwxKSxobCgxLCJhc3luYyIpKSwyJnImJnllKCJuZ0lm''@;'; put 'put ''IixSYygxLDEsaS5vcHRpb25zJCkpfSxkZXBlbmRlbmNpZXM6W21hLHpsLGlsLFFzLGh1LGMwLFlFXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpLFRBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmZpbGVPdmVyPSExLHRoaXMuZmlsZURyb3BwZWQ9bmV3IFlyLHRo''@;'; put 'put ''aXMuZmlsZURyYWdnZWRPdmVyPW5ldyBZcn1vbkRyYWdPdmVyKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29udGFpbnNGaWxlcyhlKSYmIXRoaXMuZmlsZU92ZXImJih0aGlzLmZpbGVPdmVyPSEwLHRoaXMuZmlsZURyYWdnZWRPdmVyLmVtaXQoKSl9''@;'; put 'put ''b25EcmFnTGVhdmUoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMX1vbmRyb3AoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMTtjb25zdCByPWUuZGF0YVRyYW5zZmVyLmZpbGVz''@;'; put 'put ''O3IubGVuZ3RoPjAmJnRoaXMuZmlsZURyb3BwZWQuZW1pdChyKX1jb250YWluc0ZpbGVzKGUpe2lmKGUmJmUuZGF0YVRyYW5zZmVyJiZlLmRhdGFUcmFuc2Zlci50eXBlcylmb3IobGV0IHI9MDtyPGUuZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aDtyKyspaWYoIkZpbGVzIj09ZS5kYXRhVHJh''@;'; put 'put ''bnNmZXIudHlwZXNbcl0pcmV0dXJuITB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJhcHBEcmFnTmRyb3AiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJkcmFnb3ZlciIsZnVuY3Rpb24oYyl7cmV0dXJuIGkub25EcmFnT3ZlcihjKX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKGMpe3JldHVybiBpLm9uRHJhZ0xlYXZlKGMpfSkoImRyb3AiLGZ1bmN0aW9uKGMpe3JldHVybiBpLm9uZHJvcChjKX0pLDIm''@;'; put 'put ''ciYmYnIoImZpbGVvdmVyIixpLmZpbGVPdmVyKX0sb3V0cHV0czp7ZmlsZURyb3BwZWQ6ImZpbGVEcm9wcGVkIixmaWxlRHJhZ2dlZE92ZXI6ImZpbGVEcmFnZ2VkT3ZlciJ9LHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIG59KSgpO2NvbnN0IHc0ZT0oKT0+W107ZnVuY3Rpb24gZmV0KG4sdCl7''@;'; put 'put ''MSZuJiYocmUoMCwicCIsNiksVGUoMSwiTm8gcmVxdWVzdHMgbWFkZSIpLGllKCkpfWZ1bmN0aW9uIHBldChuLHQpezEmbiYmKHJlKDAsInNwYW4iKSxWdCgxLCJjbHItaWNvbiIsMTMpLGllKCkpfWZ1bmN0aW9uIGdldChuLHQpezEmbiYmKHJlKDAsInNwYW4iKSxWdCgxLCJjbHItaWNvbiIs''@;'; put 'put ''MTQpLGllKCkpfWZ1bmN0aW9uIG1ldChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDIyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQsYT1FZSgzKS5pbmRleDtyZXR1cm4gbXQoRWUoMikuZ29Ub0xvZ0xpbmUoaSwi''@;'; put 'put ''cmVxdWVzdF8iK2EsImVycm9yIikpfSkscmUoMSwiYnV0dG9uIiwyMyksVGUoMiksaWUoKSgpfWlmKDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDthZSgyKSxNcigiICIsZSwiICIpfX1mdW5jdGlvbiB2ZXQobix0KXtpZigxJm4mJihyZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksVnQoMSwiY2xy''@;'; put 'put ''LWljb24iLDIwKSxUZSgyKSxjdCgzLG1ldCwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMikuJGltcGxpY2l0O2FlKDIpLE1yKCIgRXJyb3JzICgiLGUubG9nRXJyb3JzLmxlbmd0aCwiKSAiKSxhZSgpLHllKCJuZ0Zvck9mIixlLmxvZ0Vycm9yc3x8bmwo''@;'; put 'put ''Mix3NGUpKX19ZnVuY3Rpb24geWV0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdCxhPUVlKDMpLmluZGV4O3JldHVybiBtdChFZSgyKS5nb1RvTG9nTGluZShpLCJy''@;'; put 'put ''ZXF1ZXN0XyIrYSwid2FybmluZyIpKX0pLHJlKDEsImJ1dHRvbiIsMjMpLFRlKDIpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoMiksTXIoIiAiLGUsIiAiKX19ZnVuY3Rpb24gX2V0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRyZWUtbm9kZSIsMTkpLFZ0KDEsImNs''@;'; put 'put ''ci1pY29uIiwyNCksVGUoMiksY3QoMyx5ZXQsMywxLCJjbHItdHJlZS1ub2RlIiwyMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKDIpLiRpbXBsaWNpdDthZSgyKSxNcigiIFdhcm5pbmdzICgiLGUubG9nV2FybmluZ3MubGVuZ3RoLCIpICIpLGFlKCkseWUoIm5nRm9yT2YiLGUubG9nV2Fybmlu''@;'; put 'put ''Z3N8fG5sKDIsdzRlKSl9fWZ1bmN0aW9uIGJldChuLHQpezEmbiYmVnQoMCwiZGl2IiwyNSksMiZuJiZ5ZSgiaW5uZXJIVE1MIixFZSgyKS4kaW1wbGljaXQubG9nRmlsZSx6Zyl9ZnVuY3Rpb24gd2V0KG4sdCl7MSZuJiZWdCgwLCJkaXYiLDI2KSwyJm4mJnllKCJ0ZXh0Q29udGVudCIsRWUo''@;'; put 'put ''MikuJGltcGxpY2l0LmxvZ0ZpbGUpfWZ1bmN0aW9uIENldChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsMjcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoMikuZG93bmxvYWRMb2coaS5sb2dG''@;'; put 'put ''aWxlKSl9KSxUZSgxLCIgRG93bmxvYWQgIiksaWUoKX19ZnVuY3Rpb24gTWV0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiY2xyLXRyZWUiKSxjdCgyLHZldCw0LDMsImNsci10cmVlLW5vZGUiLDE1KSgzLF9ldCw0LDMsImNsci10cmVlLW5vZGUiLDE1KSxpZSgp''@;'; put 'put ''LGN0KDQsYmV0LDEsMSwiZGl2IiwxNikoNSx3ZXQsMSwxLCJkaXYiLDE3KSg2LENldCwyLDAsImJ1dHRvbiIsMTgpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdCxyPUVlKDIpO2FlKDIpLHllKCJuZ0lmIixlLmxvZ0Vycm9ycyksYWUoKSx5ZSgibmdJZiIsZS5sb2dXYXJuaW5n''@;'; put 'put ''cyksYWUoKSx5ZSgibmdJZiIsIlNBU1ZJWUEiIT09ci5zZXJ2ZXJUeXBlKSxhZSgpLHllKCJuZ0lmIiwiU0FTVklZQSI9PT1yLnNlcnZlclR5cGUpLGFlKCkseWUoIm5nSWYiLChudWxsPT1lLmxvZ0ZpbGU/bnVsbDplLmxvZ0ZpbGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24geGV0KG4sdCl7aWYo''@;'; put 'put ''MSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYnV0dG9uIiwyNyksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMikuJGltcGxpY2l0O3JldHVybiBtdChFZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaS5zb3VyY2VDb2RlKSl9KSxUZSgxLCIgRG93bmxvYWQgIiksaWUoKX19''@;'; put 'put ''ZnVuY3Rpb24gRWV0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyOCksVGUoMiksaWUoKSxjdCgzLHhldCwyLDAsImJ1dHRvbiIsMTgpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdDthZSgyKSx2cihlLnNvdXJjZUNvZGUpLGFlKCkseWUo''@;'; put 'put ''Im5nSWYiLChudWxsPT1lLnNvdXJjZUNvZGU/bnVsbDplLnNvdXJjZUNvZGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gVGV0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYnV0dG9uIiwyNyksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMikuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBtdChFZSgyKS5kb3dubG9hZEdlbmVyYXRlZENvZGUoaS5nZW5lcmF0ZWRDb2RlKSl9KSxUZSgxLCIgRG93bmxvYWQgIiksaWUoKX19ZnVuY3Rpb24gQWV0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyOCksVGUoMiksaWUoKSxjdCgzLFRl''@;'; put 'put ''dCwyLDAsImJ1dHRvbiIsMTgpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdDthZSgyKSxNcigiICIsZS5nZW5lcmF0ZWRDb2RlLCIgIiksYWUoKSx5ZSgibmdJZiIsKG51bGw9PWUuZ2VuZXJhdGVkQ29kZT9udWxsOmUuZ2VuZXJhdGVkQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlv''@;'; put 'put ''biBrZXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDM0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPWkua2V5KX0pLFRlKDEpLGllKCl9aWYoMiZuKXtjb25z''@;'; put 'put ''dCBlPXQuJGltcGxpY2l0O2JyKCJzZWxlY3RlZCIsRWUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9PT1lLmtleSksYWUoKSxNcigiICIsZS5rZXksIiAiKX19ZnVuY3Rpb24gRGV0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxjdCgxLGtldCwyLDMsImRpdiIs''@;'; put 'put ''MzMpLGhsKDIsImtleXZhbHVlIiksaWUoKSksMiZuKXtjb25zdCBlPUVlKDIpLiRpbXBsaWNpdDthZSgpLHllKCJuZ0Zvck9mIixSYygyLDEsZS5TQVNXT1JLKSl9fWZ1bmN0aW9uIElldChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDM4KSgxLCJzdHJvbmciKSxUZSgyKSxpZSgpKCkpLDImbil7''@;'; put 'put ''Y29uc3QgZT1FZSgzKS4kaW1wbGljaXQ7YWUoMiksTXIoIiIsZS5zZWxlY3RlZFRhYmxlLCIgKGZpcnN0IDEwIHJvd3MpICIpfX1mdW5jdGlvbiBSZXQobix0KXtpZigxJm4mJihyZSgwLCJ0aCIpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDthZSgpLE1yKCIgIixlLmtl''@;'; put 'put ''eSwiICIpfX1mdW5jdGlvbiBMZXQobix0KXtpZigxJm4mJihyZSgwLCJ0ZCIpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKCkuJGltcGxpY2l0O2FlKCksTXIoIiAiLHJbZS5rZXldLCIgIil9fWZ1bmN0aW9uIE9ldChuLHQpe2lmKDEmbiYmKHJlKDAsInRyIiks''@;'; put 'put ''Y3QoMSxMZXQsMiwxLCJ0ZCIsNDApLGhsKDIsImtleXZhbHVlIiksaWUoKSksMiZuKXtjb25zdCBlPUVlKDQpLiRpbXBsaWNpdDthZSgpLHllKCJuZ0Zvck9mIixSYygyLDEsZS5TQVNXT1JLW2Uuc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKX19ZnVuY3Rpb24gUGV0KG4sdCl7aWYo''@;'; put 'put ''MSZuJiYocmUoMCwidGFibGUiLDM5KSgxLCJ0aGVhZCIpKDIsInRyIiksY3QoMyxSZXQsMiwxLCJ0aCIsNDApLGhsKDQsImtleXZhbHVlIiksaWUoKSgpLHJlKDUsInRib2R5IiksY3QoNixPZXQsMywzLCJ0ciIsNDApLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDMpLiRpbXBsaWNpdDthZSgz''@;'; put 'put ''KSx5ZSgibmdGb3JPZiIsUmMoNCwyLGUuU0FTV09SS1tlLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSksYWUoMykseWUoIm5nRm9yT2YiLGUuU0FTV09SS1tlLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzKX19ZnVuY3Rpb24gRmV0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRh''@;'; put 'put ''Yi1jb250ZW50IiksY3QoMSxJZXQsMywxLCJwIiwzNSkscmUoMiwiZGl2IiwzNiksY3QoMyxQZXQsNyw0LCJ0YWJsZSIsMzcpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDIpLiRpbXBsaWNpdDthZSgpLHllKCJuZ0lmIixlLnNlbGVjdGVkVGFibGUpLGFlKDIpLHllKCJuZ0lmIixlLnNlbGVj''@;'; put 'put ''dGVkVGFibGUpfX1mdW5jdGlvbiBIZXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdGFiIikoMSwiY2xyLWRyb3Bkb3duIiwyOSkoMiwiYnV0dG9uIiwzMCksVGUoMywiIFNBUyBXb3JrIFRhYmxlcyAiKSxWdCg0LCJjbHItaWNvbiIsMzEpLGllKCksY3QoNSxEZXQsMywz''@;'; put 'put ''LCJjbHItZHJvcGRvd24tbWVudSIsMzIpLGllKCksY3QoNixGZXQsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLGNpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgzKTtyZXR1cm4gdWkoYS50YWJsZXNBY3RpdmUsaSl8fChhLnRhYmxlc0FjdGl2ZT1pKSxt''@;'; put 'put ''dChpKX0pLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKDMpO2FlKCkseWUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCksYWUoNSksbGkoImNscklmQWN0aXZlIixlLnRhYmxlc0FjdGl2ZSl9fWZ1bmN0aW9uIE5ldChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1zdGFj''@;'; put 'put ''ay1ibG9jayIsOCkoMSwiY2xyLXN0YWNrLWxhYmVsIiksVGUoMikscmUoMywic3BhbiIsOSksY3QoNCxwZXQsMiwwLCJzcGFuIiw1KSg1LGdldCwyLDAsInNwYW4iLDUpLGllKCkoKSxyZSg2LCJjbHItc3RhY2stY29udGVudCIpLFRlKDcpLGllKCkscmUoOCwiY2xyLXN0YWNrLWJsb2NrIiwx''@;'; put 'put ''MCkoOSwiY2xyLXN0YWNrLWNvbnRlbnQiKSgxMCwiY2xyLXRhYnMiKSgxMSwiY2xyLXRhYiIpKDEyLCJidXR0b24iLDExKSxUZSgxMywiU0FTIExvZyIpLGllKCksY3QoMTQsTWV0LDcsNSwibmctdGVtcGxhdGUiLDEyKSxjaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUp''@;'; put 'put ''O2NvbnN0IGE9RWUoMik7cmV0dXJuIHVpKGEuc2FzTG9nQWN0aXZlLGkpfHwoYS5zYXNMb2dBY3RpdmU9aSksbXQoaSl9KSxpZSgpLHJlKDE1LCJjbHItdGFiIikoMTYsImJ1dHRvbiIsMTEpLFRlKDE3LCJTQVMgU291cmNlIENvZGUiKSxpZSgpLGN0KDE4LEVldCw0LDIsIm5nLXRlbXBsYXRl''@;'; put 'put ''IiwxMiksY2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDIpO3JldHVybiB1aShhLnNhc1NvdXJjZUNvZGVBY3RpdmUsaSl8fChhLnNhc1NvdXJjZUNvZGVBY3RpdmU9aSksbXQoaSl9KSxpZSgpLHJlKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIs''@;'; put 'put ''MTEpLFRlKDIxLCJTQVMgR2VuZXJhdGVkIENvZGUiKSxpZSgpLGN0KDIyLEFldCw0LDIsIm5nLXRlbXBsYXRlIiwxMiksY2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDIpO3JldHVybiB1aShhLnNhc0dlbmVyYXRlZENvZGVBY3RpdmUsaSl8fChh''@;'; put 'put ''LnNhc0dlbmVyYXRlZENvZGVBY3RpdmU9aSksbXQoaSl9KSxpZSgpLGN0KDIzLEhldCw3LDIsImNsci10YWIiLDUpLGllKCkoKSgpKCl9aWYoMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9dC5pbmRleCxpPUVlKDIpO3llKCJpZCIsInJlcXVlc3RfIityKSgiY2xyU3RhY2tWaWV3TGV2ZWwi''@;'; put 'put ''LDEpLGFlKDIpLE1yKCIgIixlLnNlcnZpY2VMaW5rLCIgIiksYWUoMikseWUoIm5nSWYiLChudWxsPT1lLmxvZ1dhcm5pbmdzP251bGw6ZS5sb2dXYXJuaW5ncy5sZW5ndGgpPjApLGFlKCkseWUoIm5nSWYiLChudWxsPT1lLmxvZ0Vycm9ycz9udWxsOmUubG9nRXJyb3JzLmxlbmd0aCk+MCks''@;'; put 'put ''YWUoMiksdnIoZS5wYXJzZWRUaW1lc3RhbXApLGFlKDcpLGxpKCJjbHJJZkFjdGl2ZSIsaS5zYXNMb2dBY3RpdmUpLGFlKDQpLGxpKCJjbHJJZkFjdGl2ZSIsaS5zYXNTb3VyY2VDb2RlQWN0aXZlKSxhZSg0KSxsaSgiY2xySWZBY3RpdmUiLGkuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSksYWUo''@;'; put 'put ''KSx5ZSgibmdJZiIsZS5TQVNXT1JLKX19ZnVuY3Rpb24gVmV0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXN0YWNrLXZpZXciKSxjdCgxLE5ldCwyNCwxMCwiY2xyLXN0YWNrLWJsb2NrIiw3KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHllKCJuZ0Zvck9mIixlLnNhc2pzUmVxdWVz''@;'; put 'put ''dHMpfX1sZXQgQmV0PSgoKT0+e2NsYXNzIG57Z2V0IG9wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9c2V0IG9wZW5lZChlKXt0aGlzLl9vcGVuZWQ9ZSxlJiZ0aGlzLm1vZGFsT3BlbmVkKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLnNhc2pzUmVxdWVzdHMpfWNvbnN0cnVjdG9y''@;'; put 'put ''KGUscixpKXt0aGlzLnNhc1NlcnZpY2U9ZSx0aGlzLmxvZ2dlclNlcnZpY2U9cix0aGlzLmhlbHBlclNlcnZpY2U9aSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IFlyLHRoaXMuc2FzTG9nQWN0aXZlPSEwLHRoaXMuc2FzU291cmNlQ29kZUFjdGl2ZT0hMSx0aGlzLnNh''@;'; put 'put ''c0dlbmVyYXRlZENvZGVBY3RpdmU9ITEsdGhpcy50YWJsZXNBY3RpdmU9ITEsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNhc2pzUmVxdWVzdHM9W10sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWco''@;'; put 'put ''KSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe31wYXJzZUxvZ1RpbWVzdGFtcChlKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChlKX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3coZSl9YH1jdXRBcHBMb2MoZSl7cmV0dXJu''@;'; put 'put ''IGUucmVwbGFjZSh0aGlzLnNhc2pzQ29uZmlnLmFwcExvYysiLyIsIiIpfWZvcm1hdFRpbWVzdGFtcChlKXtyZXR1cm4gZ2goKShlKS5mb3JtYXQoKT9naCgpKGUpLmZvcm1hdCgiZGRkZCwgTU1NTSBEbyBZWVlZLCBoOm1tOnNzIGEiKTplfXRpbWVzdGFtcEZyb21Ob3coZSl7cmV0dXJuIGdo''@;'; put 'put ''KCkoZSkuZm9ybWF0KCk/YCAoJHtnaCgpKGUpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFuZ2UoZSl7dGhpcy5vcGVuZWQ9ZSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0''@;'; put 'put ''U2FzUmVxdWVzdHMoKTtmb3IobGV0IGUgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhlKSxlLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGUuc2VydmljZUxpbmspLGUucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoZS50''@;'; put 'put ''aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGUscixpKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3J9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtpZihhKWlmKCJTQVNWSVlBIj09PXRoaXMuc2VydmVyVHlwZSl7Y29uc3QgbT0oYS50ZXh0Q29udGVudHx8IiIpLnNwbGl0KCJcbiIp''@;'; put 'put ''O2xldCBDPS0xO2ZvcihsZXQgY2U9MDtjZTxtLmxlbmd0aDtjZSsrKWlmKG1bY2VdLmluY2x1ZGVzKGUpKXtDPWNlO2JyZWFrfWlmKC0xPT09QylyZXR1cm47Y29uc3QgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtQLmNsYXNzTmFtZT0idGVtcC1saW5lLWhlaWdodC1jYWxjIixQ''@;'; put 'put ''LnRleHRDb250ZW50PSJYIixhLmFwcGVuZENoaWxkKFApO2NvbnN0IFk9UC5jbGllbnRIZWlnaHQ7YS5yZW1vdmVDaGlsZChQKSxhLnNjcm9sbFRvcD1ZKkM7Y29uc3QgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtKLmNsYXNzTmFtZT0ibGluZS1oaWdobGlnaHQtb3ZlcmxheSAi''@;'; put 'put ''KygiZXJyb3IiPT09aT8iZXJyb3ItaGlnaGxpZ2h0Ijoid2FybmluZy1oaWdobGlnaHQiKSxKLmNsYXNzTGlzdC5hZGQoInRlbXAtaGVpZ2h0LXNldHRlciIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLWhlaWdodCIsYCR7WX1weGApLEouY2xh''@;'; put 'put ''c3NMaXN0LmFkZCgibGluZS1wb3NpdGlvbi1zZXR0ZXIiKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoIi0tbGluZS10b3AiLFkqQysicHgiKSxhLmFwcGVuZENoaWxkKEopLHNldFRpbWVvdXQoKCk9PnthLmNvbnRhaW5zKEopJiZhLnJlbW92ZUNoaWxkKEop''@;'; put 'put ''fSwzZTMpfWVsc2V7Y29uc3QgYz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjJHtyfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKTtmb3IobGV0IG0gb2YgQXJyYXkuZnJvbShjKSlpZihtLnRleHRDb250ZW50Py5pbmNsdWRlcyhlKSl7YS5zY3JvbGxUb3A9bS5vZmZzZXRUb3AtYS5v''@;'; put 'put ''ZmZzZXRUb3AsbS5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRlZC1saW5lIiksc2V0VGltZW91dCgoKT0+e20uY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQtbGluZSIpfSwzZTMpO2JyZWFrfX19cGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0''@;'; put 'put ''aW9uKigpe2lmKCFlfHwhZS5sb2dGaWxlfHwic3RyaW5nIiE9dHlwZW9mIGUubG9nRmlsZXx8dm9pZCAwIT09ZS5sb2dFcnJvcnN8fHZvaWQgMCE9PWUubG9nV2FybmluZ3MpcmV0dXJuO2xldCBpPVtdLGE9W10sYz1lLmxvZ0ZpbGUuc3BsaXQoIlxuIiksbT1bLi4uY107Zm9yKGxldCBDPTA7''@;'; put 'put ''QzxjLmxlbmd0aDtDKyspe2lmKC88Lio+RVJST1IvZ20udGVzdChjW0NdKSl7bGV0IFA9Y1tDXS5zdWJzdHJpbmcoY1tDXS5pbmRleE9mKCJFIiksY1tDXS5sZW5ndGgtMSk7aS5wdXNoKFApfWVsc2UvXkVSUk9SL2dtLnRlc3QoY1tDXSkmJihpLnB1c2goY1tDXSksIlNBU1ZJWUEiIT09ci5z''@;'; put 'put ''ZXJ2ZXJUeXBlJiYoY1tDXT0nPGZvbnQgY2xhc3M9ImVycm9yLWxpbmUiPicrY1tDXSsiPC9mb250PiIpKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdChjW0NdKSl7bGV0IFA9Y1tDXS5zdWJzdHJpbmcoY1tDXS5pbmRleE9mKCJXIiksY1tDXS5sZW5ndGgtMSk7YS5wdXNoKFApfWVsc2UvXldB''@;'; put 'put ''Uk5JTkcvZ20udGVzdChjW0NdKSYmKGEucHVzaChjW0NdKSwiU0FTVklZQSIhPT1yLnNlcnZlclR5cGUmJihjW0NdPSc8Zm9udCBjbGFzcz0id2FybmluZy1saW5lIj4nK2NbQ10rIjwvZm9udD4iKSl9ci5sb2dnZXJTZXJ2aWNlLmxvZyhhKSwiU0FTVklZQSI9PT1yLnNlcnZlclR5cGUmJihl''@;'; put 'put ''Lm9yaWdpbmFsTG9nRmlsZT1tLmpvaW4oIlxuIiksZS5sb2dGaWxlTGluZU1hcD17fSxpLmZvckVhY2goQz0+e2ZvcihsZXQgUD0wO1A8bS5sZW5ndGg7UCsrKWlmKG1bUF0uaW5jbHVkZXMoQykpe2UubG9nRmlsZUxpbmVNYXAuZXJyb3JzfHwoZS5sb2dGaWxlTGluZU1hcC5lcnJvcnM9e30p''@;'; put 'put ''LGUubG9nRmlsZUxpbmVNYXAuZXJyb3JzW0NdPVA7YnJlYWt9fSksYS5mb3JFYWNoKEM9Pntmb3IobGV0IFA9MDtQPG0ubGVuZ3RoO1ArKylpZihtW1BdLmluY2x1ZGVzKEMpKXtlLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzfHwoZS5sb2dGaWxlTGluZU1hcC53YXJuaW5ncz17fSksZS5sb2dG''@;'; put 'put ''aWxlTGluZU1hcC53YXJuaW5nc1tDXT1QO2JyZWFrfX0pKSxlLmxvZ0ZpbGU9Yy5qb2luKCJcbiIpLGUubG9nRXJyb3JzPWksZS5sb2dXYXJuaW5ncz1hfSkoKX1kb3dubG9hZExvZyhlKXtjb25zdCByPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRl''@;'; put 'put ''eHRGaWxlKGBsb2dGaWxlLSR7cn1gLGUpfWRvd25sb2FkU291cmNlQ29kZShlKXtjb25zdCByPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7cn1gLGUpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShlKXtjb25zdCBy''@;'; put 'put ''PShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7cn1gLGUpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEpzKSxXZShtaCksV2UoTHUpKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxzdGFuZGFsb25lOiExLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJN''@;'; put 'put ''b2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUtYmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsiY2xhc3MiLCJuby1yZXFzIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibm8tcmVxcyJdLFszLCJpZCIsImNsclN0YWNrVmlld0xldmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCJdLFsxLCJtbC0xMCJdLFsxLCJjb250ZW50Il0sWyJjbHJUYWJMaW5rIiwiIl0sWzMsImNscklm''@;'; put 'put ''QWN0aXZlQ2hhbmdlIiwiY2xySWZBY3RpdmUiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJtYi01IiwiY29sb3ItZ3JlZW4iXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1yZWQiXSxbImNsYXNzIiwiZXJyLWxpbmtzIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJjbGFzcyIsImxvZy13cmFwcGVyIHNhc2xvZyIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIHNhc2xvZyB2aXlhIiwzLCJ0ZXh0Q29udGVudCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1saW5rIiwzLCJjbGlj''@;'; put 'put ''ayIsNCwibmdJZiJdLFsxLCJlcnItbGlua3MiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsImNvbG9yLXJlZCJdLFszLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9u''@;'; put 'put ''LWNpcmNsZSIsMSwiY29sb3ItZ3JlZW4iXSxbMSwibG9nLXdyYXBwZXIiLCJzYXNsb2ciLDMsImlubmVySFRNTCJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsInZpeWEiLDMsInRleHRDb250ZW50Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwibG9nLXdyYXBwZXIiXSxbImNsclRhYkxpbmsiLCIiLDEsIndvcmstdGFibGVzLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbGFzcyIsImRy''@;'; put 'put ''b3Bkb3duLWl0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJjbGljayJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsxLCJtaW4taC01''@;'; put 'put ''MHZoIl0sWyJjbGFzcyIsInRhYmxlIG10LTEwIiw0LCJuZ0lmIl0sWzEsIm10LTEwIl0sWzEsInRhYmxlIiwibXQtMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiY2xyLW1vZGFsIiwwKSxrdCgiY2xyTW9kYWxPcGVuQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihjKXtyZXR1cm4gaS5tb2RhbE9wZW5DaGFuZ2UoYyl9KSxyZSgxLCJoMyIsMSksVGUoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxyZSgzLCJwIiwyKSxUZSg0KSxpZSgpKCkscmUoNSwiZGl2IiwzKSxjdCg2LGZldCwyLDAsInAiLDQpKDcsVmV0LDIsMSwiY2xyLXN0YWNrLXZp''@;'; put 'put ''ZXciLDUpLGllKCkoKSksMiZyJiYoeWUoImNsck1vZGFsT3BlbiIsaS5vcGVuZWQpLGFlKDQpLE1yKCJBcHAgTG9jYXRpb246ICIsaS5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLGFlKDIpLHllKCJuZ0lmIiwobnVsbD09aS5zYXNqc1JlcXVlc3RzP251bGw6aS5zYXNqc1JlcXVlc3RzLmxlbmd0''@;'; put 'put ''aCk8MSksYWUoKSx5ZSgibmdJZiIsaS5vcGVuZWQmJihudWxsPT1pLnNhc2pzUmVxdWVzdHM/bnVsbDppLnNhc2pzUmVxdWVzdHMubGVuZ3RoKT4wKSl9LGRlcGVuZGVuY2llczpbaHMsbWEsaXEsR3BlLHJxLFlwZSxTMixFaCx1NSxVbCxodSxjMCxWdyx5MixINixWNixndixONixGNixmdixp''@;'; put 'put ''NSxsdixjdixqdyxQUF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtjbGFzcyBqZXR7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBDNGV9fWNsYXNzIEM0ZXt9ZnVuY3Rpb24gemV0KG4sdCl7aWYoMSZu''@;'; put 'put ''JiYocmUoMCwicCIsOCksVGUoMSwiIFNBUyBTZXJ2aWNlOiAiKSxyZSgyLCJzdHJvbmciKSxUZSgzKSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDMpLHZyKGUuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24gVWV0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw5KSgxLCJwIikoMiwi''@;'; put 'put ''c3Ryb25nIiksVGUoMywiU1lTV0FSTklOR1RFWFQ6IiksaWUoKSxUZSg0KSxpZSgpLHJlKDUsInAiKSg2LCJzdHJvbmciKSxUZSg3LCJTWVNFUlJPUlRFWFQ6IiksaWUoKSxUZSg4KSxpZSgpLHJlKDksInAiKSgxMCwic3Ryb25nIiksVGUoMTEsIk1BQzoiKSxpZSgpLFRlKDEyKSxpZSgpKCkp''@;'; put 'put ''LDImbil7Y29uc3QgZT1FZSgpO2FlKDQpLE1yKCIgIixlLmRhdGEuZGV0YWlscy5TWVNXQVJOSU5HVEVYVCwiIiksYWUoNCksTXIoIiAiLGUuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksYWUoNCksTXIoIiAiLGUuZGF0YS5kZXRhaWxzLk1BQywiIil9fWZ1bmN0aW9uIFdldChuLHQp''@;'; put 'put ''e2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsMTApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5vcGVuQ29uZmlndXJhdG9yKCkpfSksVGUoMSwiIE9wZW4gY29uZmlndXJhdG9yICIpLGllKCl9fWZ1bmN0aW9uIFpldChuLHQpe2lmKDEmbil7''@;'; put 'put ''Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsMTApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLFRlKDEsIiBPcGVuIHJlcXVlc3RzIG1vZGFsICIpLGllKCl9fWZ1bmN0aW9uIFlldChuLHQpe2lmKDEmbil7Y29uc3Qg''@;'; put 'put ''ZT1JbigpO3JlKDAsImJ1dHRvbiIsMTApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5kb3dubG9hZExvZygpKX0pLFRlKDEsIiBEb3dubG9hZCBsb2cgIiksaWUoKX19ZnVuY3Rpb24gR2V0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYnV0dG9u''@;'; put 'put ''IiwxMCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmNsb3NlQWJvcnRNb2RhbCgpKX0pLFRlKDEsIiBDbG9zZSAiKSxpZSgpfX1mdW5jdGlvbiAkZXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24iLDEwKSxrdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkucmVsb2FkKCkpfSksVGUoMSwiIFJlbG9hZCAiKSxpZSgpfX1sZXQgS2V0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWUsdGhpcy5ldmVudFNlcnZpY2U9cix0aGlzLnNhc1NlcnZpY2U9aSx0''@;'; put 'put ''aGlzLnJvdXRlcj1hLHRoaXMub25Db25maXJtTW9kYWxDbGljaz1uZXcgWXIsdGhpcy5kYXRhPW5ldyBqZXQsdGhpcy5mb3JjZVJlbG9hZD0hMSx0aGlzLm1vZGFsRW5hYmxlZD0hMCx0aGlzLmRlZmF1bHREYXRhPXttb2RhbFRpdGxlOiJBYm9ydCBNZXNzYWdlIixzYXNTZXJ2aWNlOm51bGws''@;'; put 'put ''bWVzc2FnZToiIixkZXRhaWxzOm5ldyBDNGV9fW5nT25Jbml0KCl7bGV0IGU9ey4uLnRoaXMuZGVmYXVsdERhdGEsLi4udGhpcy5kYXRhfTt0aGlzLmRhdGE9ZX1zaG93Q29uZmlndXJhdG9yQnV0dG9uKGUpe2NvbnN0IHI9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJu''@;'; put 'put ''IGU/LmluY2x1ZGVzKCJzdGFydHVwc2VydmljZSIpJiZyLnNlcnZlclR5cGU9PT1DMS5ZLlNhczl9Y2xvc2VBYm9ydE1vZGFsKCl7dGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrLmVtaXQoKX1vcGVuQ29uZmlndXJhdG9yKCl7dGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0''@;'; put 'put ''aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksdGhpcy5jbG9zZUFib3J0TW9kYWwoKX1kb3dubG9hZExvZygpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGAke3RoaXMuZGF0YS5zYXNTZXJ2aWNlfS1MT0dgLHRoaXMuZGF0YS5kZXRhaWxzPy5MT0d8fCJF''@;'; put 'put ''cnJvciBwYXJzaW5nIHRoZSBsb2ciKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9cmVsb2FkKCl7bG9jYXRpb24ucmVsb2FkKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoTHUp''@;'; put 'put ''LFdlKFNjKSxXZShKcyksV2UocmwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7b25Db25maXJtTW9kYWxDbGljazoi''@;'; put 'put ''b25Db25maXJtTW9kYWxDbGljayJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTMsdmFyczoxMixjb25zdHM6W1siYXBwRHJhZ05kcm9wIiwiIiwxLCJjbHItYWJvcnQtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xv''@;'; put 'put ''c2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwic2FzU2VydmljZSBtdC0wIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiYWJvcnRNc2ciLDMsImlubmVySFRNTCJdLFsiY2xhc3MiLCJzeXN0ZXh0Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIs''@;'; put 'put ''ImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJzYXNTZXJ2aWNlIiwibXQtMCJdLFsxLCJzeXN0ZXh0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixp''@;'; put 'put ''KXsxJnImJihyZSgwLCJjbHItbW9kYWwiLDApLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGMpe3JldHVybiB1aShpLm1vZGFsRW5hYmxlZCxjKXx8KGkubW9kYWxFbmFibGVkPWMpLGN9KSxyZSgxLCJoMyIsMSksVGUoMiksY3QoMyx6ZXQsNCwxLCJwIiwyKSxpZSgpLHJlKDQs''@;'; put 'put ''ImRpdiIsMyksVnQoNSwiZGl2Iiw0KSxjdCg2LFVldCwxMywzLCJkaXYiLDUpLGllKCkscmUoNywiZGl2Iiw2KSxjdCg4LFdldCwyLDAsImJ1dHRvbiIsNykoOSxaZXQsMiwwLCJidXR0b24iLDcpKDEwLFlldCwyLDAsImJ1dHRvbiIsNykoMTEsR2V0LDIsMCwiYnV0dG9uIiw3KSgxMiwkZXQs''@;'; put 'put ''MiwwLCJidXR0b24iLDcpLGllKCkoKSksMiZyJiYobGkoImNsck1vZGFsT3BlbiIsaS5tb2RhbEVuYWJsZWQpLHllKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhaS5mb3JjZVJlbG9hZCksYWUoMiksTXIoIiAiLGkuZGF0YS5tb2RhbFRpdGxlLCIgIiksYWUoKSx5''@;'; put 'put ''ZSgibmdJZiIsaS5kYXRhLnNhc1NlcnZpY2UmJmkuZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wKSxhZSgyKSx5ZSgiaW5uZXJIVE1MIixpLmRhdGEubWVzc2FnZSx6ZyksYWUoKSx5ZSgibmdJZiIsbnVsbCE9PWkuZGF0YS5kZXRhaWxzKSxhZSgyKSx5ZSgibmdJZiIsaS5zaG93Q29uZmlndXJh''@;'; put 'put ''dG9yQnV0dG9uKGkuZGF0YS5zYXNTZXJ2aWNlKSksYWUoKSx5ZSgibmdJZiIsbnVsbCE9PWkuZGF0YS5kZXRhaWxzKSxhZSgpLHllKCJuZ0lmIiwobnVsbD09aS5kYXRhLmRldGFpbHM/bnVsbDppLmRhdGEuZGV0YWlscy5MT0cpJiYobnVsbD09aS5kYXRhLmRldGFpbHN8fG51bGw9PWkuZGF0''@;'; put 'put ''YS5kZXRhaWxzLkxPRz9udWxsOmkuZGF0YS5kZXRhaWxzLkxPRy50cmltKCkubGVuZ3RoKT4wKSxhZSgpLHllKCJuZ0lmIiwhaS5mb3JjZVJlbG9hZCksYWUoKSx5ZSgibmdJZiIsaS5mb3JjZVJlbG9hZCkpfSxkZXBlbmRlbmNpZXM6W21hLGh1LGMwLFRBXSxlbmNhcHN1bGF0aW9uOjJ9KX19''@;'; put 'put ''cmV0dXJuIG59KSgpO2NvbnN0IFhldD0oKT0+WyIvIl0sUzRlPSgpPT5bIi92aWV3Il0sTTRlPSgpPT5bIi9ob21lIl0sbHE9KCk9PlsiL3Jldmlldy9zdWJtaXR0ZWQiXSxxZXQ9KCk9PlsiL3Jldmlldy9hcHByb3ZlIl0sSmV0PSgpPT5bIi9yZXZpZXcvaGlzdG9yeSJdO2Z1bmN0aW9uIFFl''@;'; put 'put ''dChuLHQpezEmbiYmKHJpKDApLHJlKDEsImRpdiIsMTQpKDIsImRpdiIsMTUpKDMsImRpdiIsMTYpLFZ0KDQsImNkcy1pY29uIiwxNyksaWUoKSxyZSg1LCJkaXYiLDE4KSxUZSg2LCIgRGF0YSBDb250cm9sbGVyIChGUkVFIFRpZXIpIC0gdG8gdXBncmFkZSBjb250YWN0ICIpLFZ0KDcsImNv''@;'; put 'put ''bnRhY3QtbGluayIsMTkpLGllKCkoKSgpLHJlKDgsImEiLDIwKSxUZSg5LCJVcGRhdGUgTGljZW5jZSBLZXkiKSxpZSgpLGlpKCkpfWZ1bmN0aW9uIGV0dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImRpdiIsMTQpKDIsImRpdiIsMTUpKDMsImRpdiIsMTYpLFZ0KDQs''@;'; put 'put ''ImNkcy1pY29uIiwxNyksaWUoKSxyZSg1LCJkaXYiLDE4KSxUZSg2LCIgRGF0YSBDb250cm9sbGVyIChGUkVFIFRpZXIpIC0gUHJvYmxlbSB3aXRoIGxpY2VuY2UgIiksaWUoKSgpKCkscmUoNywiYSIsMjEpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDMpO3JldHVy''@;'; put 'put ''biBtdChpLmxpY2VuY2VQcm9ibGVtRGV0YWlscyhpLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSl9KSxUZSg4LCJNb3JlIGRldGFpbHMiKSxpZSgpLGlpKCl9fWZ1bmN0aW9uIHR0dChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMTMpLGN0KDEsUWV0LDEwLDAsIm5nLWNvbnRhaW5lciIsMSkoMixl''@;'; put 'put ''dHQsOSwwLCJuZy1jb250YWluZXIiLDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIixudWxsPT09ZS5saWNlbmNlUHJvYmxlbS52YWx1ZSksYWUoKSx5ZSgibmdJZiIsbnVsbCE9PWUubGljZW5jZVByb2JsZW0udmFsdWUpfX1mdW5jdGlvbiBudHQobix0KXsxJm4m''@;'; put 'put ''JihyZSgwLCJhIiwyMCksVGUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaWUoKSl9ZnVuY3Rpb24gcnR0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwyMikoMSwiZGl2IiwxNCkoMiwiZGl2IiwxNSkoMywiZGl2IiwxNiksVnQoNCwiY2RzLWljb24iLDE3KSxpZSgpLHJlKDUsImRpdiIsMTgp''@;'; put 'put ''LFRlKDYpLFZ0KDcsImNvbnRhY3QtbGluayIsMTkpLFRlKDgpLGllKCkoKSgpLGN0KDksbnR0LDIsMCwiYSIsMjMpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSg2KSxuMCgiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4gIixlLmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9''@;'; put 'put ''PT1lLmxpY2Vuc2VFeHBpcmluZ0RheXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLGFlKDIpLE1yKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGUuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLGFlKCkseWUo''@;'; put 'put ''Im5nSWYiLCFlLmZyZWVUaWVyQmFubmVyKX19ZnVuY3Rpb24gaXR0KG4sdCl7MSZuJiYocmUoMCwiYSIsMjApLFRlKDEsIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGllKCkpfWZ1bmN0aW9uIGF0dChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMjIpKDEsImRpdiIsMTQpKDIsImRpdiIsMTUpKDMs''@;'; put 'put ''ImRpdiIsMTYpLFZ0KDQsImNkcy1pY29uIiwxNyksaWUoKSxyZSg1LCJkaXYiLDE4KSxUZSg2LCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIGV4Y2VlZHMgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbnNlLiBQbGVhc2UgY29udGFjdCAiKSxWdCg3LCJjb250YWN0''@;'; put 'put ''LWxpbmsiLDE5KSxUZSg4KSxpZSgpKCkoKSxjdCg5LGl0dCwyLDAsImEiLDIzKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoOCksTXIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsZS5zeXNzaXRlLmdldFZhbHVlKCks''@;'; put 'put ''Ii4gIiksYWUoKSx5ZSgibmdJZiIsIWUubGljZW5zZUV4cGlyaW5nRGF5cyYmIWUuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBvdHQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLHR0dCwzLDIsImRpdiIsMTEpKDIscnR0LDEwLDQsImRpdiIsMTIpKDMsYXR0LDEwLDIsImRpdiIsMTIpLGlp''@;'; put 'put ''KCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLGUuZnJlZVRpZXJCYW5uZXImJighZS5saWNlbnNlRXhwaXJpbmdEYXlzfHxlLmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLGFlKCkseWUoIm5nSWYiLGUubGljZW5zZUV4cGlyaW5nRGF5cyYmIWUuZnJlZVRpZXJCYW5uZXIpLGFl''@;'; put 'put ''KCkseWUoIm5nSWYiLGUuYXBwT3ZlckNhcGFjaXR5KX19ZnVuY3Rpb24gc3R0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IiwyOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS50b2dnbGVTaWRlYmFyKCkpfSksVnQoMSwiY2xyLWljb24i''@;'; put 'put ''LDI5KSxpZSgpfX1mdW5jdGlvbiBsdHQobix0KXsxJm4mJihyZSgwLCJhIiwzMCksVnQoMSwiaW1nIiwzMSkoMiwiaW1nIiwzMiksaWUoKSksMiZuJiZ5ZSgicm91dGVyTGluayIsbmwoMSxYZXQpKX1mdW5jdGlvbiBjdHQobix0KXsxJm4mJihyZSgwLCJhIiksVnQoMSwic3BhbiIsMzMpLGll''@;'; put 'put ''KCkpfWZ1bmN0aW9uIHV0dChuLHQpezEmbiYmKHJlKDAsImNsci1kcm9wZG93bi1tZW51Iiw0MSkoMSwiYSIsNDIpLFRlKDIsIlZJRVciKSxpZSgpLHJlKDMsImEiLDQyKSxUZSg0LCJMT0FEIiksaWUoKSxyZSg1LCJhIiw0MiksVGUoNiwiUkVWSUVXIiksaWUoKSgpKSwyJm4mJihhZSgpLHll''@;'; put 'put ''KCJyb3V0ZXJMaW5rIixubCgzLFM0ZSkpLGFlKDIpLHllKCJyb3V0ZXJMaW5rIixubCg0LE00ZSkpLGFlKDIpLHllKCJyb3V0ZXJMaW5rIixubCg1LGxxKSkpfWZ1bmN0aW9uIGR0dChuLHQpe2lmKDEmbiYmKHJpKDApLHJlKDEsImRpdiIsMzQpKDIsImNsci1kcm9wZG93biIpKDMsImJ1dHRv''@;'; put 'put ''biIsMzUpLFRlKDQsIiBNZW51ICIpLGllKCksY3QoNSx1dHQsNyw2LCJjbHItZHJvcGRvd24tbWVudSIsMzYpLGllKCkoKSxyZSg2LCJkaXYiLDM3KSg3LCJhIiwzOCksVGUoOCwiVklFVyIpLGllKCkscmUoOSwiYSIsMzkpLFRlKDEwLCJMT0FEIiksaWUoKSxyZSgxMSwiYSIsNDApLFRlKDEy''@;'; put 'put ''LCJSRVZJRVciKSxpZSgpKCksaWkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKDcpLHllKCJyb3V0ZXJMaW5rIixubCg3LFM0ZSkpLGFlKDIpLGJyKCJhY3RpdmUiLGUucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGUucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8''@;'; put 'put ''ZS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21lIikpLHllKCJyb3V0ZXJMaW5rIixubCg4LE00ZSkpLGFlKDIpLGJyKCJhY3RpdmUiLGUucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGUucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxlLnJvdXRlci51cmwuaW5jbHVk''@;'; put 'put ''ZXMoImhpc3RvcnkiKSkseWUoInJvdXRlckxpbmsiLG5sKDksbHEpKX19ZnVuY3Rpb24gaHR0KG4sdCl7aWYoMSZuJiYocmUoMCwiaGVhZGVyIiwyNCksY3QoMSxzdHQsMiwwLCJkaXYiLDI1KSxyZSgyLCJkaXYiLDI2KSxjdCgzLGx0dCwzLDIsImEiLDI3KSg0LGN0dCwyLDAsImEiLDEpLGll''@;'; put 'put ''KCksY3QoNSxkdHQsMTMsMTAsIm5nLWNvbnRhaW5lciIsMSksVnQoNiwiYXBwLWhlYWRlci1hY3Rpb25zIiksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsZS5pc01haW5Sb3V0ZSgidmlldyIpfHxlLmlzTWFpblJvdXRlKCJob21lIikmJiFlLnJvdXRlci51cmwuaW5j''@;'; put 'put ''bHVkZXMoImxpY2Vuc2luZyIpKSxhZSgyKSx5ZSgibmdJZiIsIWUucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGFlKCkseWUoIm5nSWYiLGUucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGFlKCkseWUoIm5nSWYiLCFlLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIp''@;'; put 'put ''JiYhZS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSl9fWZ1bmN0aW9uIGZ0dChuLHQpe2lmKDEmbiYmKHJlKDAsIm5hdiIsNDMpKDEsInVsIiw0NCkoMiwibGkiLDQ1KSgzLCJhIiwzOCksVGUoNCwiU1VCTUlUIiksaWUoKSgpLHJlKDUsImxpIiw0NSkoNiwiYSIsMzgpLFRlKDcs''@;'; put 'put ''IkFQUFJPVkUiKSxpZSgpKCkscmUoOCwibGkiLDQ1KSg5LCJhIiwzOCksVGUoMTAsIkhJU1RPUlkiKSxpZSgpKCkoKSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgzKSx5ZSgicm91dGVyTGluayIsbmwoNSxscSkpLGFlKDMpLGJyKCJhY3RpdmUiLGUucm91dGVyLnVybC5pbmNsdWRlcygiYXBw''@;'; put 'put ''cm92ZSIpKSx5ZSgicm91dGVyTGluayIsbmwoNixxZXQpKSxhZSgzKSx5ZSgicm91dGVyTGluayIsbmwoNyxKZXQpKX19ZnVuY3Rpb24gcHR0KG4sdCl7MSZuJiZWdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gZ3R0KG4sdCl7MSZuJiZWdCgwLCJyb3V0ZXItb3V0bGV0Iil9ZnVuY3Rpb24g''@;'; put 'put ''bXR0KG4sdCl7MSZuJiZWdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gdnR0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYXBwLWluZm8tbW9kYWwiLDQ2KSxrdCgib25Db25maXJtTW9kYWxDbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4g''@;'; put 'put ''bXQoRWUoKS5jbG9zZUFib3J0TW9kYWwoaS5pZCkpfSksaWUoKX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQscj1FZSgpO3llKCJkYXRhIixlKSgiZm9yY2VSZWxvYWQiLCFyLnN0YXJ0dXBEYXRhTG9hZGVkJiYxPT09ci5zYXNqc0Fib3J0cy5sZW5ndGgpfX1mdW5jdGlvbiB5dHQobix0''@;'; put 'put ''KXsxJm4mJihyZSgwLCJkaXYiLDUwKSxWdCgxLCJkaXYiLDUxKSgyLCJkaXYiLDUyKSgzLCJkaXYiLDUzKSxpZSgpKX1mdW5jdGlvbiBfdHQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDQ3KSxWdCgxLCJpbWciLDQ4KSxjdCgyLHl0dCw0LDAsImRpdiIsNDkpLGllKCkpLDImbil7Y29uc3Qg''@;'; put 'put ''ZT1FZSgpO2FlKDIpLHllKCJuZ0lmIixudWxsPT09ZS5hcHBBY3RpdmUpfX1Icy5hZGRJY29ucyhbIm1vb24iLHtvdXRsaW5lOic8cGF0aCBkPSJNMTguMTEgMzIuMDAwM0MxMC4zMyAzMi4wMDAzIDQgMjUuNzIwMyA0IDE3Ljk5MDNDNCAxMC4yNjAzIDEwLjAzIDQuMjAwMyAxNy43MyA0LjAw''@;'; put 'put ''MDNDMTguMTUgMy45OTAzIDE4LjUyIDQuMjMwMyAxOC42OCA0LjYxMDNDMTguODQgNC45OTAzIDE4Ljc1IDUuNDMwMyAxOC40NiA1LjcyMDNDMTYuNjkgNy40NTAzIDE1LjcxIDkuNzYwMyAxNS43MSAxMi4yMTAzQzE1LjcxIDE3LjI0MDMgMTkuODMgMjEuMzMwMyAyNC45MSAyMS4zMzAzQzI2''@;'; put 'put ''LjkgMjEuMzMwMyAyOC44IDIwLjcwMDMgMzAuNDEgMTkuNTEwM0MzMC43NCAxOS4yNzAzIDMxLjE5IDE5LjI1MDMgMzEuNTMgMTkuNDYwM0MzMS44OCAxOS42ODAzIDMyLjA2IDIwLjA4MDMgMzEuOTkgMjAuNDkwM0MzMC43OCAyNy4xNjAzIDI0Ljk0IDMyLjAwMDMgMTguMTEgMzIuMDAwM1pN''@;'; put 'put ''MTUuNDMgNi4yOTAzQzkuOTkgNy40ODAzIDYgMTIuMjQwMyA2IDE3Ljk5MDNDNiAyNC42MTAzIDExLjQzIDMwLjAwMDMgMTguMTEgMzAuMDAwM0MyMy4xNiAzMC4wMDAzIDI3LjU4IDI2LjkyMDMgMjkuMzcgMjIuNDAwM0MyNy45NyAyMy4wMTAzIDI2LjQ2IDIzLjMyMDMgMjQuOTEgMjMuMzIw''@;'; put 'put ''M0MxOC43NCAyMy4zMjAzIDEzLjcxIDE4LjMzMDMgMTMuNzEgMTIuMjAwM0MxMy43MSAxMC4wNzAzIDE0LjMxIDguMDMwMyAxNS40MyA2LjI4MDNWNi4yOTAzWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEw''@;'; put 'put ''LjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAx''@;'; put 'put ''OS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMg''@;'; put 'put ''MjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWiIvPid9XSxbInN1biIse291dGxpbmU6JzxwYXRoIGQ9Ik04LjgxIDEwLjIyQzkuMDEgMTAuNDIgOS4yNiAxMC41MSA5LjUyIDEwLjUxQzkuNzggMTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAu''@;'; put 'put ''MjMgOC44MUw4LjExIDYuNjlDNy43MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAuMjJIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41''@;'; put 'put ''NSAxOSA3IDE4LjU1IDcgMThaTTE4IDdDMTguNTUgNyAxOSA2LjU1IDE5IDZWM0MxOSAyLjQ1IDE4LjU1IDIgMTggMkMxNy40NSAyIDE3IDIuNDUgMTcgM1Y2QzE3IDYuNTUgMTcuNDUgNyAxOCA3Wk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDgu''@;'; put 'put ''MUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk04LjgxIDI1Ljc4TDYuNjkg''@;'; put 'put ''MjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5''@;'; put 'put ''IDguODIgMjUuNzhIOC44MVpNMzMgMTdIMzBDMjkuNDUgMTcgMjkgMTcuNDUgMjkgMThDMjkgMTguNTUgMjkuNDUgMTkgMzAgMTlIMzNDMzMuNTUgMTkgMzQgMTguNTUgMzQgMThDMzQgMTcuNDUgMzMuNTUgMTcgMzMgMTdaTTE4IDlDMTMuMDQgOSA5IDEzLjA0IDkgMThDOSAyMi45NiAxMy4w''@;'; put 'put ''NCAyNyAxOCAyN0MyMi45NiAyNyAyNyAyMi45NiAyNyAxOEMyNyAxMy4wNCAyMi45NiA5IDE4IDlaTTE4IDI1QzE0LjE0IDI1IDExIDIxLjg2IDExIDE4QzExIDE0LjE0IDE0LjE0IDExIDE4IDExQzIxLjg2IDExIDI1IDE0LjE0IDI1IDE4QzI1IDIxLjg2IDIxLjg2IDI1IDE4IDI1Wk0yNy4x''@;'; put 'put ''OSAyNS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjgu''@;'; put 'put ''OTIgMjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCAyOUMxNy40NSAyOSAxNyAyOS40NSAxNyAzMFYzM0MxNyAzMy41NSAxNy40NSAzNCAxOCAzNEMxOC41NSAzNCAxOSAzMy41NSAxOSAzM1YzMEMxOSAyOS40NSAxOC41NSAyOSAxOCAyOVoiLz4nLHNvbGlkOic8''@;'; put 'put ''cGF0aCBkPSJNOC44MSAyNS43OEw2LjY5IDI3LjlDNi4zIDI4LjI5IDYuMyAyOC45MiA2LjY5IDI5LjMxQzYuODkgMjkuNTEgNy4xNCAyOS42IDcuNCAyOS42QzcuNjYgMjkuNiA3LjkxIDI5LjUgOC4xMSAyOS4zMUwxMC4yMyAyNy4xOUMxMC42MiAyNi44IDEwLjYyIDI2LjE3IDEwLjIzIDI1''@;'; put 'put ''Ljc4QzkuODQgMjUuMzkgOS4yMSAyNS4zOSA4LjgyIDI1Ljc4SDguODFaTTcgMThDNyAxNy40NSA2LjU1IDE3IDYgMTdIM0MyLjQ1IDE3IDIgMTcuNDUgMiAxOEMyIDE4LjU1IDIuNDUgMTkgMyAxOUg2QzYuNTUgMTkgNyAxOC41NSA3IDE4Wk04LjgxIDEwLjIyQzkuMDEgMTAuNDIgOS4yNiAx''@;'; put 'put ''MC41MSA5LjUyIDEwLjUxQzkuNzggMTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAuMjMgOC44MUw4LjExIDYuNjlDNy43MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAuMjJIOC44MVpN''@;'; put 'put ''MjYuNDkgMTAuNTFDMjYuNzUgMTAuNTEgMjcgMTAuNDEgMjcuMiAxMC4yMkwyOS4zMiA4LjFDMjkuNzEgNy43MSAyOS43MSA3LjA4IDI5LjMyIDYuNjlDMjguOTMgNi4zIDI4LjMgNi4zIDI3LjkxIDYuNjlMMjUuNzkgOC44MUMyNS40IDkuMiAyNS40IDkuODMgMjUuNzkgMTAuMjJDMjUuOTkg''@;'; put 'put ''MTAuNDIgMjYuMjQgMTAuNTEgMjYuNSAxMC41MUgyNi40OVpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3''@;'; put 'put ''IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5Wk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40''@;'; put 'put ''NSAzMy41NSAxNyAzMyAxN1pNMjcuMTkgMjUuNzhDMjYuOCAyNS4zOSAyNi4xNyAyNS4zOSAyNS43OCAyNS43OEMyNS4zOSAyNi4xNyAyNS4zOSAyNi44IDI1Ljc4IDI3LjE5TDI3LjkgMjkuMzFDMjguMSAyOS41MSAyOC4zNSAyOS42IDI4LjYxIDI5LjZDMjguODcgMjkuNiAyOS4xMiAyOS41''@;'; put 'put ''IDI5LjMyIDI5LjMxQzI5LjcxIDI4LjkyIDI5LjcxIDI4LjI5IDI5LjMyIDI3LjlMMjcuMiAyNS43OEgyNy4xOVpNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVoiLz4n''@;'; put 'put ''fV0sWyJleGNsYW1hdGlvbi10cmlhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNy45OTQzIDIwLjhDMTguNTQ0IDIwLjggMTguOTkzOCAyMC4zNSAxOC45OTM4IDE5LjhWMTRDMTguOTkzOCAxMy40NSAxOC41NDQgMTMgMTcuOTk0MyAxM0MxNy40NDQ1IDEzIDE2Ljk5NDcgMTMuNDUgMTYu''@;'; put 'put ''OTk0NyAxNFYxOS44QzE2Ljk5NDcgMjAuMzUgMTcuNDQ0NSAyMC44IDE3Ljk5NDMgMjAuOFpNMTguODQzOSAyMi45NUMxOC43MjM5IDIyLjg0IDE4LjU5NCAyMi43NSAxOC40NTQxIDIyLjY5QzE4LjE2NDIgMjIuNTcgMTcuODI0MyAyMi41NyAxNy41MzQ1IDIyLjY5QzE3LjM5NDUgMjIuNzUg''@;'; put 'put ''MTcuMjY0NiAyMi44NCAxNy4xNDQ2IDIyLjk1QzE2LjkyNDcgMjMuMTggMTYuNzk0OCAyMy40OCAxNi43OTQ4IDIzLjhDMTYuNzk0OCAyNC4xMiAxNi45MjQ3IDI0LjQyIDE3LjE0NDYgMjQuNjVDMTcuMjY0NiAyNC43NiAxNy4zOTQ1IDI0Ljg1IDE3LjUzNDUgMjQuOTFDMTcuNjg0NCAyNC45''@;'; put 'put ''NyAxNy44MzQzIDI1IDE3Ljk5NDMgMjVDMTguMTU0MiAyNSAxOC4zMDQxIDI0Ljk3IDE4LjQ1NDEgMjQuOTFDMTguNTk0IDI0Ljg1IDE4LjcyMzkgMjQuNzYgMTguODQzOSAyNC42NUMxOS4wNjM4IDI0LjQyIDE5LjE5MzcgMjQuMTIgMTkuMTkzNyAyMy44QzE5LjE5MzcgMjMuNjQgMTkuMTYz''@;'; put 'put ''NyAyMy40OSAxOS4xMDM4IDIzLjM0QzE5LjA0MzggMjMuMiAxOC45NTM4IDIzLjA2IDE4Ljg0MzkgMjIuOTVaTTMwLjU5ODYgMjUuNDNMMjAuNjYzMSA3LjU3QzIwLjExMzMgNi41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3TDUuMzg5''@;'; put 'put ''ODggMjUuNDNDNC44NTAxMiAyNi4zOSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDguMDU4NjkgMzBIMjcuOTI5OEMyOS4wMjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYuMzkgMzAu''@;'; put 'put ''NTk4NiAyNS40M1pNMjguODQ5NCAyNy40N0MyOC43NTk1IDI3LjYzIDI4LjQ3OTYgMjggMjcuOTM5OCAyOEg4LjA1ODY5QzcuNTA4OTQgMjggNy4yMzkwNiAyNy42MyA3LjE0OTEgMjcuNDdDNy4wNTkxNCAyNy4zMSA2Ljg2OTIyIDI2Ljg5IDcuMTQ5MSAyNi40MUwxNy4wNjQ3IDguNTVDMTcu''@;'; put 'put ''MzM0NiA4LjA2IDE3LjgwNDMgOCAxNy45ODQzIDhDMTguMTY0MiA4IDE4LjYzNCA4LjA1IDE4LjkwMzkgOC41NUwyOC44Mzk0IDI2LjQxQzI5LjEwOTMgMjYuODkgMjguOTE5NCAyNy4zMSAyOC44Mjk0IDI3LjQ3SDI4Ljg0OTRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMwLjU5ODYgMjUuNDNM''@;'; put 'put ''MjAuNjYzMSA3LjU3QzIwLjExMzMgNi41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3TDUuMzg5ODggMjUuNDNDNC44NTAxMiAyNi4zOSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDgu''@;'; put 'put ''MDU4NjkgMzBIMjcuOTI5OEMyOS4wMjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYuMzkgMzAuNTk4NiAyNS40M1pNMTYuNzk0OCAxMy41QzE2Ljc5NDggMTIuODQgMTcuMzM0NiAxMi4zIDE3Ljk5NDMgMTIuM0MxOC42NTQgMTIuMyAx''@;'; put 'put ''OS4xOTM3IDEyLjg0IDE5LjE5MzcgMTMuNVYxOS4zQzE5LjE5MzcgMTkuOTYgMTguNjU0IDIwLjUgMTcuOTk0MyAyMC41QzE3LjMzNDYgMjAuNSAxNi43OTQ4IDE5Ljk2IDE2Ljc5NDggMTkuM1YxMy41Wk0xOC45NzM4IDI1QzE4LjgzMzkgMjUuMTMgMTguNjg0IDI1LjIzIDE4LjUyNCAyNS4z''@;'; put 'put ''QzE4LjM0NDEgMjUuMzcgMTguMTc0MiAyNS40MSAxNy45OTQzIDI1LjQxQzE3LjgxNDMgMjUuNDEgMTcuNjM0NCAyNS4zOCAxNy40NTQ1IDI1LjNDMTcuMzA0NiAyNS4yMyAxNy4xNTQ2IDI1LjEzIDE2Ljk5NDcgMjQuOTlDMTYuNzM0OCAyNC43MiAxNi41ODQ5IDI0LjM3IDE2LjU4NDkgMjRD''@;'; put 'put ''MTYuNTg0OSAyMy42MyAxNi43MjQ4IDIzLjI5IDE2Ljk5NDcgMjNDMTcuMTM0NiAyMi44NyAxNy4yODQ2IDIyLjc3IDE3LjQ0NDUgMjIuN0MxNy42MTQ0IDIyLjYzIDE3Ljc5NDMgMjIuNTkgMTcuOTg0MyAyMi41OUMxOC4xNzQyIDIyLjU5IDE4LjM1NDEgMjIuNjMgMTguNTI0IDIyLjdDMTgu''@;'; put 'put ''Njc0IDIyLjc3IDE4LjgyMzkgMjIuODcgMTguOTczOCAyM0MxOS4wOTM4IDIzLjEyIDE5LjIwMzcgMjMuMjggMTkuMjczNyAyMy40NkMxOS4zNDM3IDIzLjY0IDE5LjM4MzYgMjMuODEgMTkuMzgzNiAyMy45OUMxOS4zODM2IDI0LjM1IDE5LjI0MzcgMjQuNyAxOC45NjM4IDI0Ljk5TDE4Ljk3''@;'; put 'put ''MzggMjVaIi8+J31dLFsidGFibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMgMThDMzMuNTUgMTggMzQgMTcuNTUgMzQgMTdDMzQgMTYuNDUgMzMuNTUgMTYgMzMgMTZIMjhWOEgzM0MzMy41NSA4IDM0IDcuNTUgMzQgN0MzNCA2LjQ1IDMzLjU1IDYgMzMgNkg4VjNDOCAyLjQ1IDcuNTUgMiA3''@;'; put 'put ''IDJDNi40NSAyIDYgMi40NSA2IDNWNkgzQzIuNDUgNiAyIDYuNDUgMiA3QzIgNy41NSAyLjQ1IDggMyA4SDZWMzNDNiAzMy41NSA2LjQ1IDM0IDcgMzRDNy41NSAzNCA4IDMzLjU1IDggMzNWMjhIMTZWMzNDMTYgMzMuNTUgMTYuNDUgMzQgMTcgMzRDMTcuNTUgMzQgMTggMzMuNTUgMTggMzNW''@;'; put 'put ''MjhIMjZWMzNDMjYgMzMuNTUgMjYuNDUgMzQgMjcgMzRDMjcuNTUgMzQgMjggMzMuNTUgMjggMzNWMjhIMzNDMzMuNTUgMjggMzQgMjcuNTUgMzQgMjdDMzQgMjYuNDUgMzMuNTUgMjYgMzMgMjZIMjhWMThIMzNaTTE2IDI2SDhWMThIMTZWMjZaTTE2IDE2SDhWOEgxNlYxNlpNMjYgMjZIMThW''@;'; put 'put ''MThIMjZWMjZaTTI2IDE2SDE4VjhIMjZWMTZaIi8+J31dLFsidHJhc2giLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuOTggMzFDMjggMzEuMjUgMjcuOTIgMzEuNDkgMjcuNzYgMzEuNjhDMjcuNiAzMS44NyAyNy4zNyAzMS45OCAyNy4xMiAzMkg4Ljg1QzguNiAzMS45OCA4LjM3IDMxLjg3IDgu''@;'; put 'put ''MjEgMzEuNjhDOC4wNSAzMS40OSA3Ljk3IDMxLjI1IDcuOTkgMzFWMTEuMDNINS45N1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMy''@;'; put 'put ''LjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDI3Ljk4VjMxWk0xMyAxMi45OFYyNy45OEgxNS4wMlYxMi45OEgxM1pNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQz''@;'; put 'put ''IDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNMjAuOTggMTIuOThWMjcuOThIMjNWMTIuOThIMjAuOThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE1IDRIMjFWNkgy''@;'; put 'put ''M1Y0QzIzIDIuOSAyMi4xIDIgMjEgMkgxNUMxMy45IDIgMTMgMi45IDEzIDRWNkgxNVY0Wk0zMC45OSA2Ljk4SDUuMDFDNC40NSA2Ljk4IDQgNy40MyA0IDcuOThDNCA4LjUzIDQuNDUgOC45OCA1LjAxIDguOThIMzAuOTlDMzEuNTUgOC45OCAzMiA4LjUzIDMyIDcuOThDMzIgNy40MyAzMS41''@;'; put 'put ''NSA2Ljk4IDMwLjk5IDYuOThaTTUuOTcgMTEuMDNWMzFDNS45NSAzMS43OCA2LjI0IDMyLjUzIDYuNzggMzMuMDlDNy4zMiAzMy42NSA4LjA2IDMzLjk4IDguODUgMzRIMjcuMTJDMjcuOSAzMy45OCAyOC42NSAzMy42NiAyOS4xOSAzMy4wOUMyOS43MyAzMi41MiAzMC4wMiAzMS43NyAzMCAz''@;'; put 'put ''MVYxMS4wM0g1Ljk3Wk0yMC43OSAyOC44MlYxNUgyMy4yMVYyOUgyMC43OVYyOC44MlpNMTIuODEgMjguODJWMTVIMTUuMjNWMjlIMTIuODFWMjguODJaIi8+J31dLFsicHJvY2Vzcy1vbi12bSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xMiAxNC41MDAxVjI0LjUwMDFDMTIgMjUuMDUwMSAxMi40''@;'; put 'put ''NSAyNS41MDAxIDEzIDI1LjUwMDFIMjNDMjMuNTUgMjUuNTAwMSAyNCAyNS4wNTAxIDI0IDI0LjUwMDFWMTQuNTAwMUMyNCAxMy45NTAxIDIzLjU1IDEzLjUwMDEgMjMgMTMuNTAwMUgxM0MxMi40NSAxMy41MDAxIDEyIDEzLjk1MDEgMTIgMTQuNTAwMVpNMTQgMTUuNTAwMUgyMlYyMy41MDAx''@;'; put 'put ''SDE0VjE1LjUwMDFaTTUuMjYgMjIuMjgwMUM1LjgxIDIyLjIwMDEgNi4xOSAyMS43MDAxIDYuMTEgMjEuMTUwMUM2LjAzIDIwLjYxMDEgNiAyMC4wNTAxIDYgMTkuNDkwMUM2IDEzLjQxMDEgMTAuNTUgOC4zOTAwNiAxNi40NyA3LjYxMDA2TDE2LjI5IDcuNzkwMDZDMTUuOSA4LjE4MDA2IDE1''@;'; put 'put ''LjkgOC44MTAwNiAxNi4yOSA5LjIwMDA2QzE2LjQ5IDkuNDAwMDYgMTYuNzQgOS40OTAwNiAxNyA5LjQ5MDA2QzE3LjI2IDkuNDkwMDYgMTcuNTEgOS4zOTAwNiAxNy43MSA5LjIwMDA2TDIwLjQyIDYuNDkwMDZMMTcuNzEgMy43OTAwNkMxNy4zMiAzLjQwMDA2IDE2LjY5IDMuNDAwMDYgMTYu''@;'; put 'put ''MyAzLjc5MDA2QzE1LjkxIDQuMTgwMDYgMTUuOTEgNC44MTAwNiAxNi4zIDUuMjAwMDZMMTYuNjYgNS41NjAwNkM5LjU2IDYuMjUwMDYgNCAxMi4yMzAxIDQgMTkuNTAwMUM0IDIwLjE1MDEgNC4wNCAyMC44MDAxIDQuMTMgMjEuNDMwMUM0LjIgMjEuOTMwMSA0LjYzIDIyLjI5MDEgNS4xMiAy''@;'; put 'put ''Mi4yOTAxQzUuMTYgMjIuMjkwMSA1LjIxIDIyLjI5MDEgNS4yNiAyMi4yOTAxVjIyLjI4MDFaTTIzLjY3IDMwLjA3MDFDMjEuOTQgMzEuMDAwMSAxOS45OCAzMS40OTAxIDE4IDMxLjQ5MDFDMTQuMyAzMS40OTAxIDEwLjgzIDI5Ljc2MDEgOC41NyAyNi45MDAxTDguODMgMjYuOTQwMUM5LjM4''@;'; put 'put ''IDI3LjA0MDEgOS44OSAyNi42NjAxIDkuOTggMjYuMTIwMUMxMC4wNyAyNS41ODAxIDkuNyAyNS4wNjAxIDkuMTYgMjQuOTcwMUw1LjM4IDI0LjM0MDFMNC43NSAyOC4xMjAxQzQuNjYgMjguNjYwMSA1LjAzIDI5LjE4MDEgNS41NyAyOS4yNzAxQzUuNjMgMjkuMjcwMSA1LjY4IDI5LjI4MDEg''@;'; put 'put ''NS43NCAyOS4yODAxQzYuMjIgMjkuMjgwMSA2LjY0IDI4LjkzMDEgNi43MyAyOC40NTAxTDYuODIgMjcuOTIwMUM5LjQ1IDMxLjQwMDEgMTMuNTkgMzMuNTAwMSAxOCAzMy41MDAxQzIwLjMxIDMzLjUwMDEgMjIuNiAzMi45MzAxIDI0LjYyIDMxLjg0MDFDMjUuMTEgMzEuNTgwMSAyNS4yOSAz''@;'; put 'put ''MC45NzAxIDI1LjAzIDMwLjQ5MDFDMjQuNzcgMzAuMDAwMSAyNC4xNiAyOS44MjAxIDIzLjY4IDMwLjA4MDFMMjMuNjcgMzAuMDcwMVpNMzAuMDkgMjYuODMwMUwyOS45IDI2Ljg2MDFDMzEuMjYgMjQuNjYwMSAzMiAyMi4xMjAxIDMyIDE5LjQ5MDFDMzIgMTMuOTAwMSAyOC42OCA4Ljg1MDA2''@;'; put 'put ''IDIzLjU1IDYuNjMwMDZDMjMuMDQgNi40MTAwNiAyMi40NiA2LjY0MDA2IDIyLjI0IDcuMTUwMDZDMjIuMDIgNy42NjAwNiAyMi4yNSA4LjI1MDA2IDIyLjc2IDguNDYwMDZDMjcuMTYgMTAuMzYwMSAzMC4wMSAxNC42OTAxIDMwLjAxIDE5LjQ4MDFDMzAuMDEgMjEuODAwMSAyOS4zNCAyNC4w''@;'; put 'put ''NDAxIDI4LjEgMjUuOTYwMUwyNy45OSAyNS4zMjAxQzI3LjkgMjQuNzgwMSAyNy4zOSAyNC40MDAxIDI2Ljg0IDI0LjUwMDFDMjYuMyAyNC41OTAxIDI1LjkzIDI1LjEwMDEgMjYuMDIgMjUuNjUwMUwyNi42NCAyOS40MzAxTDMwLjQyIDI4LjgxMDFDMzAuOTYgMjguNzIwMSAzMS4zMyAyOC4y''@;'; put 'put ''MTAxIDMxLjI0IDI3LjY2MDFDMzEuMTUgMjcuMTIwMSAzMC42NCAyNi43NDAxIDMwLjA5IDI2Ljg0MDFWMjYuODMwMVoiLz4nfV0pO2xldCBidHQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSxDLFAsWSl7dGhpcy5hcHBTZXJ2aWNlPWUsdGhpcy5saWNlbmNlU2Vydmlj''@;'; put 'put ''ZT1yLHRoaXMucm91dGVyPWksdGhpcy5yb3V0ZT1hLHRoaXMubG9jYXRpb249Yyx0aGlzLmV2ZW50U2VydmljZT1tLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUMsdGhpcy5jZHI9UCx0aGlzLmVsZW1lbnRSZWY9WSx0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9bnVsbCx0aGlzLnNhc2pzQWJvcnRz''@;'; put 'put ''PVtdLHRoaXMuZWRpdG9yQWN0aXZlPSExLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSx0aGlzLmZyZWVUaWVyQmFubmVyPXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllci52YWx1ZSx0aGlzLmxpY2VuY2VQcm9ibGVtPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVByb2JsZW0sdGhp''@;'; put 'put ''cy5hcHBPdmVyQ2FwYWNpdHk9ITEsdGhpcy5hcHBBY3RpdmU9bnVsbCx0aGlzLnJlcXVlc3RzTW9kYWw9ITEsdGhpcy5zaG93UmVnaXN0cmF0aW9uPSEwLHRoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITEsdGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITEsZmVhdHVyZU5hbWU6IiJ9LHRoaXMu''@;'; put 'put ''c3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmVtYmVkPVduLmVtYmVkLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJs''@;'; put 'put ''ZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTYuNyIsIkFwcCB2ZXJzaW9uIjoidjcuNy4zIi5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6Z2goKShwYXJzZUludCgiMTc3ODYxMTM5MTc4MiIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIiksIi4uLiI6Ii4uLiJ9KX0sdGhp''@;'; put 'put ''cy5zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKSx0aGlzLmNvbW1pdFZlcj0idjcuNy4zIi5yZXBsYWNlKCJ2IiwiIikrIi5nMzIyZjkwNCIsaS5ldmVudHMuc3Vic2NyaWJlKGNlPT57aWYodGhpcy5yb3V0ZVVybD10aGlzLnJvdXRlci51cmwsdHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0''@;'; put 'put ''aGlzLnJvdXRlVXJsLmxlbmd0aD40KXtsZXQgZmU9dGhpcy5yb3V0ZVVybC5zcGxpdCgiLyIpWzFdOyJlZGl0b3IiPT09ZmU/KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6ImhvbWUiPT09ZmU/KHRoaXMuZXJyVG9wPSExLHRoaXMu''@;'; put 'put ''ZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSExKSxXbi5yb290UGFyYW09ZmV9dHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD42JiYodGhpcy5hcHByb3ZlQWN0aXZlPSEh''@;'; put 'put ''dGhpcy5yb3V0ZVVybC5pbmNsdWRlcygiYXBwcm92ZURldCIpfHwhIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoInRvYXBwcm92ZSIpKX0pO2NvbnN0IEo9d2luZG93LmxvY2F0aW9uLmhhc2guc3BsaXQoIj8iKVsxXTtpZihKKXtjb25zdCBjZT1uZXcgVVJMU2VhcmNoUGFyYW1zKEopLmdldCgi''@;'; put 'put ''ZW1iZWQiKTtpZihudWxsIT09Y2Upe2NvbnN0IGZlPSJmYWxzZSIhPT1jZTtXbi5lbWJlZD1mZSx0aGlzLmVtYmVkPWZlfX10aGlzLnN1YnNjcmliZVRvU2hvd0Fib3J0TW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9TdGFydHVwRGF0YSgp''@;'; put 'put ''LHRoaXMuc3Vic2NyaWJlVG9BcHBBY3RpdmUoKSx0aGlzLnN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKSx3aW5kb3cuZnJhbWVFbGVtZW50JiYod2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZSIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhbGxvd2Z1bGxzY3JlZW4iLCIiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiZnJhbWVib3JkZXIiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbmhlaWdodCIsIjAiKSx3''@;'; put 'put ''aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2lud2lkdGgiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNjcm9sbGluZyIsImF1dG8iKSx3aW5kb3cuZm9jdXMoKSl9cGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpe2NvbnN0IGU9ZG9jdW1lbnQucXVl''@;'; put 'put ''cnlTZWxlY3Rvcigic2FzanMiKTtpZighZSlyZXR1cm4gdGhpcy5saWNlbmNlU2VydmljZS5kZWFjdGl2YXRlQXBwKCksdm9pZCBzZXRUaW1lb3V0KCgpPT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiUGxlYXNlIG1ha2Ugc3VyZSAnU0FTSlMnIHRhZyB3aXRoIGNv''@;'; put 'put ''bmZpZyBhdHRyaWJ1dGVzIGlzIGFkZGVkIHRvIGluZGV4Lmh0bWwiLG51bGwsIlNBU2pzIENvbmZpZyBub3QgZm91bmQiKX0pO2NvbnN0IHI9YT0+ZS5nZXRBdHRyaWJ1dGUoYSl8fHZvaWQgMCxpPXtzZXJ2ZXJVcmw6cigic2VydmVyVXJsIil8fCIiLGFwcExvYzpyKCJhcHBMb2MiKXx8IiIs''@;'; put 'put ''c2VydmVyVHlwZTpyKCJzZXJ2ZXJUeXBlIiksbG9naW5NZWNoYW5pc206cigibG9naW5NZWNoYW5pc20iKXx8IiIsYWRtaW5Hcm91cDpyKCJhZG1pbkdyb3VwIil8fCIiLGRjUGF0aDpyKCJkY1BhdGgiKXx8IiIsZGVidWc6InRydWUiPT09cigiZGVidWciKXx8ITEsdXNlQ29tcHV0ZUFwaTp0''@;'; put 'put ''aGlzLnBhcnNlQ29tcHV0ZUFwaShyKCJ1c2VDb21wdXRlQXBpIikpLGNvbnRleHROYW1lOnIoImNvbnRleHROYW1lIil8fCIiLGhvdExpY2VuY2VLZXk6cigiaG90TGljZW5jZUtleSIpfHwiIn07dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1pLHRoaXMuYXBwU3RvcmVTZXJ2aWNlLnNldERjQWRh''@;'; put 'put ''cHRlclNldHRpbmdzKGkpLHRoaXMuYXBwU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfWxpY2VuY2VQcm9ibGVtRGV0YWlscyhlKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGUpfXBhcnNlQ29tcHV0ZUFwaShlKXtyZXR1cm4gdm9pZCAwPT09ZXx8InVuZGVmaW5lZCI9PT1lfHwibnVsbCI9''@;'; put 'put ''PT1lP251bGw6InRydWUiPT09ZXx8ITF9c3Vic2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uRGVtb0xpbWl0TW9kYWxTaG93LnN1YnNjcmliZShlPT57dGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITAsZmVhdHVyZU5hbWU6ZX19KX1zdWJzY3JpYmVUb0xp''@;'; put 'put ''Y2Vuc2VFdmVudHMoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIuc3Vic2NyaWJlKGU9Pnt0aGlzLmZyZWVUaWVyQmFubmVyPWV9KSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2Vuc2VFeHBpcmVzSW5EYXlzLnN1YnNjcmliZShlPT57ZSYmZTw9MTQmJih0aGlzLmxpY2Vuc2VF''@;'; put 'put ''eHBpcmluZ0RheXM9ZSl9KSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwT3ZlckNhcGFjaXR5LnN1YnNjcmliZShlPT57dGhpcy5hcHBPdmVyQ2FwYWNpdHk9ZX0pfXN1YnNjcmliZVRvQXBwQWN0aXZlKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5zdWJzY3JpYmUoZT0+''@;'; put 'put ''e3RoaXMuYXBwQWN0aXZlPWV9KX1zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaG93QWJvcnRNb2RhbC5zdWJzY3JpYmUoZT0+e2UuaWQ9dGhpcy5zYXNqc0Fib3J0cy5sZW5ndGgrMSx0aGlzLnNhc2pzQWJvcnRzLnB1c2goZSksdGhpcy5jZHIuZGV0''@;'; put 'put ''ZWN0Q2hhbmdlcygpfSl9c3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMH0pfXN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''Lm9uUmVxdWVzdHNNb2RhbE9wZW4uc3Vic2NyaWJlKGU9Pnt0aGlzLnJlcXVlc3RzTW9kYWw9ITB9KX1jbG9zZUFib3J0TW9kYWwoZSl7bGV0IHI9dGhpcy5zYXNqc0Fib3J0cy5maW5kSW5kZXgoaT0+aS5pZD09PWUpO3RoaXMuc2FzanNBYm9ydHMuc3BsaWNlKHIsMSl9dG9nZ2xlU2lkZWJh''@;'; put 'put ''cigpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZVNpZGViYXIoKX1pc01haW5Sb3V0ZShlKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKGUpfW9wZW5MaWNlbmNpbmdQYWdlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy91cGRhdGUiKX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShNRiksV2UoSzEpLFdlKHJsKSxXZShzMCksV2UobDIpLFdlKFNjKSxXZShaOSksV2UoRnMpLFdlKHppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJteS1hcHAiXV0sc3Rh''@;'; put 'put ''bmRhbG9uZTohMSxkZWNsczoyMCx2YXJzOjE0LGNvbnN0czpbWzEsIm1haW4tY29udGFpbmVyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYXBwLWhlYWRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkQ2hhbmdlIiwib3BlbmVkIl0sWzMsImRhdGEi''@;'; put 'put ''LCJmb3JjZVJlbG9hZCIsIm9uQ29uZmlybU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFs''@;'; put 'put ''U2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsic2l6ZSIsIjIwIiwic2hhcGUiLCJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFu''@;'; put 'put ''bmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIs''@;'; put 'put ''ImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRlbXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwiYWxlcnQtaWNvbiJdLFsxLCJhbGVydC10ZXh0Il0s''@;'; put 'put ''WyJjbGFzc2VzIiwiY29sb3Itd2hpdGUiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUta2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIs''@;'; put 'put ''ImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LWRhbmdlciJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5Iiw0LCJuZ0lmIl0sWzEsImFwcC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIHNlbGVjdC1u''@;'; put 'put ''b25lIG1sLTEwIGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJsb2dvIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaHJlZiIsIiMiLCJjbGFzcyIsIm5hdi1saW5rIiwz''@;'; put 'put ''LCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwi''@;'; put 'put ''MjQiLCJzaGFwZSIsInRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RjLWxvZ28tc3ZnIiwiYWx0IiwiZGF0YWNv''@;'; put 'put ''bnRyb2xsZXIgbG9nbyB3aXRob3V0IHRleHQiLDEsIndpdGhvdXQtdGV4dCIsImQtYmxvY2siLCJkLW1kLW5vbmUiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0''@;'; put 'put ''IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJp''@;'; put 'put ''YS1sYWJlbCIsInRvZ2dsZSBzZXR0aW5ncyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwi''@;'; put 'put ''YWN0aXZlIiwxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJv''@;'; put 'put ''dHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJvbkNvbmZpcm1Nb2RhbENsaWNrIiwiZGF0YSIsImZvcmNlUmVsb2FkIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FT''@;'; put 'put ''U3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsImxvYWRpbmctbG9nbyJdLFsiY2xhc3MiLCJzbGlkZXIiLDQsIm5nSWYiXSxbMSwic2xpZGVy''@;'; put 'put ''Il0sWzEsImxpbmUiXSxbMSwic3VibGluZSIsImluYyJdLFsxLCJzdWJsaW5lIiwiZGVjIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiZGl2IiwwKSxjdCgxLG90dCw0LDMsIm5nLWNvbnRhaW5lciIsMSkoMixodHQsNyw0LCJoZWFkZXIiLDIpKDMsZnR0LDExLDgsIm5h''@;'; put 'put ''diIsMykoNCxwdHQsMSwwLCJhcHAtYWxlcnRzIiwxKSxyZSg1LCJhcHAtcmVxdWVzdHMtbW9kYWwiLDQpLGNpKCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKGMpe3JldHVybiB1aShpLnJlcXVlc3RzTW9kYWwsYyl8fChpLnJlcXVlc3RzTW9kYWw9YyksY30pLGllKCksVnQoNiwiYXBwLWV4Y2Vs''@;'; put 'put ''LXBhc3N3b3JkLW1vZGFsIiksY3QoNyxndHQsMSwwLCJyb3V0ZXItb3V0bGV0IiwxKSxWdCg4LCJhcHAtbG9naW4iKSxjdCg5LG10dCwxLDAsImFwcC1hbGVydHMiLDEpKDEwLHZ0dCwxLDIsImFwcC1pbmZvLW1vZGFsIiw1KSxyZSgxMSwiY2xyLW1vZGFsIiw2KSxjaSgiY2xyTW9kYWxPcGVu''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gdWkoaS5kZW1vTGltaXROb3RpY2Uub3BlbixjKXx8KGkuZGVtb0xpbWl0Tm90aWNlLm9wZW49YyksY30pLHJlKDEyLCJoMyIsNyksVGUoMTMpLFZ0KDE0LCJjbHItaWNvbiIsOCksaWUoKSxyZSgxNSwiZGl2Iiw5KSxUZSgxNiwiIENvbnRhY3Qg''@;'; put 'put ''IiksVnQoMTcsImNvbnRhY3QtbGluayIpLFRlKDE4KSxpZSgpKCkoKSxjdCgxOSxfdHQsMywxLCJkaXYiLDEwKSksMiZyJiYoYWUoKSx5ZSgibmdJZiIsIWkucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGFlKCkseWUoIm5nSWYiLCFpLmVtYmVkKSxhZSgpLHllKCJuZ0lmIiwh''@;'; put 'put ''aS5lbWJlZCYmKGkucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGkucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxpLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSkpLGFlKCkseWUoIm5nSWYiLCFpLmVyclRvcCksYWUoKSxsaSgib3BlbmVkIixpLnJlcXVl''@;'; put 'put ''c3RzTW9kYWwpLGFlKDIpLHllKCJuZ0lmIixpLnN0YXJ0dXBEYXRhTG9hZGVkKSxhZSgyKSx5ZSgibmdJZiIsaS5lcnJUb3ApLGFlKCkseWUoIm5nRm9yT2YiLGkuc2FzanNBYm9ydHMpLGFlKCksbGkoImNsck1vZGFsT3BlbiIsaS5kZW1vTGltaXROb3RpY2Uub3BlbikseWUoImNsck1vZGFs''@;'; put 'put ''Q2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxhZSgyKSxNcigiIExvY2tlZCBGZWF0dXJlICgiLGkuZGVtb0xpbWl0Tm90aWNlLmZlYXR1cmVOYW1lLCIpICIpLGFlKDUpLE1yKCIgd2l0aCB5b3VyIHNpdGUgaWQgKCIsaS5zeXNzaXRlLnZhbHVlLCIpIHRvIGFjdGl2YXRlISAi''@;'; put 'put ''KSxhZSgpLHllKCJuZ0lmIiwhaS5zdGFydHVwRGF0YUxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLGU1LFgxLEV3LFdRZSxhZXQsY2V0LEZILGhldCx4QSxVbCxycyxodSxjMCx5MixpNSxsdixjdixqdyxUQSxCZXQsS2V0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpO2Z1''@;'; put 'put ''bmN0aW9uIEU0ZShuKXtyZXR1cm4gbmV3IGtyKDNlMywhMSl9ZnVuY3Rpb24gRzYobil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBaVDtjYXNlIDE6cmV0dXJuIG5bMF07ZGVmYXVsdDpyZXR1cm4gbmV3IFpmZShuKX19ZnVuY3Rpb24gVDRlKG4sdCxlPW5ldyBNYXAscj1u''@;'; put 'put ''ZXcgTWFwKXtjb25zdCBpPVtdLGE9W107bGV0IGM9LTEsbT1udWxsO2lmKHQuZm9yRWFjaChDPT57Y29uc3QgUD1DLmdldCgib2Zmc2V0IiksWT1QPT1jLEo9WSYmbXx8bmV3IE1hcDtDLmZvckVhY2goKGNlLGZlKT0+e2xldCBBZT1mZSxIZT1jZTtpZigib2Zmc2V0IiE9PWZlKXN3aXRjaChB''@;'; put 'put ''ZT1uLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShBZSxpKSxIZSl7Y2FzZSIhIjpIZT1lLmdldChmZSk7YnJlYWs7Y2FzZSB0NTpIZT1yLmdldChmZSk7YnJlYWs7ZGVmYXVsdDpIZT1uLm5vcm1hbGl6ZVN0eWxlVmFsdWUoZmUsQWUsSGUsaSl9Si5zZXQoQWUsSGUpfSksWXx8YS5wdXNoKEopLG09''@;'; put 'put ''SixjPVB9KSxpLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBqdHQoKXtyZXR1cm4gbmV3IGtyKDM1MDIsITEpfSgpO3JldHVybiBhfWZ1bmN0aW9uIGNxKG4sdCxlLHIpe3N3aXRjaCh0KXtjYXNlInN0YXJ0IjpuLm9uU3RhcnQoKCk9PnIoZSYmdXEoZSwic3RhcnQiLG4pKSk7YnJlYWs7Y2FzZSJk''@;'; put 'put ''b25lIjpuLm9uRG9uZSgoKT0+cihlJiZ1cShlLCJkb25lIixuKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6bi5vbkRlc3Ryb3koKCk9PnIoZSYmdXEoZSwiZGVzdHJveSIsbikpKX19ZnVuY3Rpb24gdXEobix0LGUpe2NvbnN0IGE9ZHEobi5lbGVtZW50LG4udHJpZ2dlck5hbWUsbi5mcm9tU3Rh''@;'; put 'put ''dGUsbi50b1N0YXRlLHR8fG4ucGhhc2VOYW1lLGUudG90YWxUaW1lPz9uLnRvdGFsVGltZSwhIWUuZGlzYWJsZWQpLGM9bi5fZGF0YTtyZXR1cm4gbnVsbCE9YyYmKGEuX2RhdGE9YyksYX1mdW5jdGlvbiBkcShuLHQsZSxyLGk9IiIsYT0wLGMpe3JldHVybntlbGVtZW50Om4sdHJpZ2dlck5h''@;'; put 'put ''bWU6dCxmcm9tU3RhdGU6ZSx0b1N0YXRlOnIscGhhc2VOYW1lOmksdG90YWxUaW1lOmEsZGlzYWJsZWQ6ISFjfX1mdW5jdGlvbiBNMihuLHQsZSl7bGV0IHI9bi5nZXQodCk7cmV0dXJuIHJ8fG4uc2V0KHQscj1lKSxyfWZ1bmN0aW9uIEE0ZShuKXtjb25zdCB0PW4uaW5kZXhPZigiOiIpO3Jl''@;'; put 'put ''dHVybltuLnN1YnN0cmluZygxLHQpLG4uc2xpY2UodCsxKV19Y29uc3QgUXR0PXR5cGVvZiBkb2N1bWVudD4idSI/bnVsbDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gaHEobil7Y29uc3QgdD1uLnBhcmVudE5vZGV8fG4uaG9zdHx8bnVsbDtyZXR1cm4gdD09PVF0dD9udWxs''@;'; put 'put ''OnR9bGV0IHh2PW51bGwsazRlPSExO2Z1bmN0aW9uIEQ0ZShuLHQpe2Zvcig7dDspe2lmKHQ9PT1uKXJldHVybiEwO3Q9aHEodCl9cmV0dXJuITF9ZnVuY3Rpb24gSTRlKG4sdCxlKXtpZihlKXJldHVybiBBcnJheS5mcm9tKG4ucXVlcnlTZWxlY3RvckFsbCh0KSk7Y29uc3Qgcj1uLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IodCk7cmV0dXJuIHI/W3JdOltdfWNvbnN0IGZxPSJuZy1sZWF2ZSIsSEg9Im5nLXRyaWdnZXIiLE5IPSIubmctdHJpZ2dlciIsTzRlPSJuZy1hbmltYXRpbmciLHBxPSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiBkNShuKXtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47''@;'; put 'put ''Y29uc3QgdD1uLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiF0fHx0Lmxlbmd0aDwyPzA6Z3EocGFyc2VGbG9hdCh0WzFdKSx0WzJdKX1mdW5jdGlvbiBncShuLHQpe3JldHVybiJzIj09PXQ/MWUzKm46bn1mdW5jdGlvbiBWSChuLHQsZSl7cmV0dXJuIG4uaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoImR1cmF0aW9uIik/bjpmdW5jdGlvbiBhbnQobix0LGUpe2xldCBpLGE9MCxjPSIiO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7Y29uc3QgbT1uLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9p''@;'; put 'put ''KTtpZihudWxsPT09bSlyZXR1cm4gdC5wdXNoKEU0ZSgpKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07aT1ncShwYXJzZUZsb2F0KG1bMV0pLG1bMl0pO2NvbnN0IEM9bVszXTtudWxsIT1DJiYoYT1ncShwYXJzZUZsb2F0KEMpLG1bNF0pKTtjb25zdCBQPW1bNV07UCYmKGM9UCl9''@;'; put 'put ''ZWxzZSBpPW47aWYoIWUpe2xldCBtPSExLEM9dC5sZW5ndGg7aTwwJiYodC5wdXNoKGZ1bmN0aW9uIHd0dCgpe3JldHVybiBuZXcga3IoMzEwMCwhMSl9KCkpLG09ITApLGE8MCYmKHQucHVzaChmdW5jdGlvbiBDdHQoKXtyZXR1cm4gbmV3IGtyKDMxMDEsITEpfSgpKSxtPSEwKSxtJiZ0LnNw''@;'; put 'put ''bGljZShDLDAsRTRlKCkpfXJldHVybntkdXJhdGlvbjppLGRlbGF5OmEsZWFzaW5nOmN9fShuLHQsZSl9ZnVuY3Rpb24gXzQobix0LGUpe3QuZm9yRWFjaCgocixpKT0+e2NvbnN0IGE9dnEoaSk7ZSYmIWUuaGFzKGkpJiZlLnNldChpLG4uc3R5bGVbYV0pLG4uc3R5bGVbYV09cn0pfWZ1bmN0''@;'; put 'put ''aW9uIEV2KG4sdCl7dC5mb3JFYWNoKChlLHIpPT57Y29uc3QgaT12cShyKTtuLnN0eWxlW2ldPSIifSl9ZnVuY3Rpb24gQUEobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTpmdW5jdGlvbiBRVWUobix0PW51bGwpe3JldHVybnt0eXBlOklvLlNlcXVlbmNlLHN0''@;'; put 'put ''ZXBzOm4sb3B0aW9uczp0fX0obik6bn1jb25zdCBtcT1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiBQNGUobil7bGV0IHQ9W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgZTtmb3IoO2U9bXEuZXhlYyhuKTspdC5wdXNoKGVbMV0pO21xLmxhc3RJbmRl''@;'; put 'put ''eD0wfXJldHVybiB0fWZ1bmN0aW9uIGtBKG4sdCxlKXtjb25zdCByPWAke259YCxpPXIucmVwbGFjZShtcSwoYSxjKT0+e2xldCBtPXRbY107cmV0dXJuIG51bGw9PW0mJihlLnB1c2goZnVuY3Rpb24gTXR0KCl7cmV0dXJuIG5ldyBrcigzMDAzLCExKX0oKSksbT0iIiksbS50b1N0cmluZygp''@;'; put 'put ''fSk7cmV0dXJuIGk9PXI/bjppfWNvbnN0IGxudD0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gdnEobil7cmV0dXJuIG4ucmVwbGFjZShsbnQsKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIHgyKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIElvLlRyaWdnZXI6cmV0dXJu''@;'; put 'put ''IG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSBJby5TdGF0ZTpyZXR1cm4gbi52aXNpdFN0YXRlKHQsZSk7Y2FzZSBJby5UcmFuc2l0aW9uOnJldHVybiBuLnZpc2l0VHJhbnNpdGlvbih0LGUpO2Nhc2UgSW8uU2VxdWVuY2U6cmV0dXJuIG4udmlzaXRTZXF1ZW5jZSh0LGUpO2Nhc2UgSW8uR3Jv''@;'; put 'put ''dXA6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgSW8uQW5pbWF0ZTpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIElvLktleWZyYW1lczpyZXR1cm4gbi52aXNpdEtleWZyYW1lcyh0LGUpO2Nhc2UgSW8uU3R5bGU6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgSW8u''@;'; put 'put ''UmVmZXJlbmNlOnJldHVybiBuLnZpc2l0UmVmZXJlbmNlKHQsZSk7Y2FzZSBJby5BbmltYXRlQ2hpbGQ6cmV0dXJuIG4udmlzaXRBbmltYXRlQ2hpbGQodCxlKTtjYXNlIElvLkFuaW1hdGVSZWY6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSBJby5RdWVyeTpyZXR1cm4gbi52''@;'; put 'put ''aXNpdFF1ZXJ5KHQsZSk7Y2FzZSBJby5TdGFnZ2VyOnJldHVybiBuLnZpc2l0U3RhZ2dlcih0LGUpO2RlZmF1bHQ6dGhyb3cgZnVuY3Rpb24geHR0KCl7cmV0dXJuIG5ldyBrcigzMDA0LCExKX0oKX19ZnVuY3Rpb24geXEobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilb''@;'; put 'put ''dF19bGV0IF9xPSgoKT0+e2NsYXNzIG57dmFsaWRhdGVTdHlsZVByb3BlcnR5KGUpe3JldHVybiBmdW5jdGlvbiB0bnQobil7eHZ8fCh4dj1mdW5jdGlvbiBubnQoKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5ib2R5Om51bGx9KCl8fHt9LGs0ZT0hIXh2LnN0eWxlJiYi''@;'; put 'put ''V2Via2l0QXBwZWFyYW5jZSJpbiB4di5zdHlsZSk7bGV0IHQ9ITA7cmV0dXJuIHh2LnN0eWxlJiYhZnVuY3Rpb24gZW50KG4pe3JldHVybiJlYmtpdCI9PW4uc3Vic3RyaW5nKDEsNil9KG4pJiYodD1uIGluIHh2LnN0eWxlLCF0JiZrNGUmJih0PSJXZWJraXQiK24uY2hhckF0KDApLnRvVXBw''@;'; put 'put ''ZXJDYXNlKCkrbi5zbGljZSgxKWluIHh2LnN0eWxlKSksdH0oZSl9Y29udGFpbnNFbGVtZW50KGUscil7cmV0dXJuIEQ0ZShlLHIpfWdldFBhcmVudEVsZW1lbnQoZSl7cmV0dXJuIGhxKGUpfXF1ZXJ5KGUscixpKXtyZXR1cm4gSTRlKGUscixpKX1jb21wdXRlU3R5bGUoZSxyLGkpe3JldHVy''@;'; put 'put ''biBpfHwiIn1hbmltYXRlKGUscixpLGEsYyxtPVtdLEMpe3JldHVybiBuZXcgWlQoaSxhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KX1yZXR1cm4gbn0pKCk7''@;'; put 'put ''Y2xhc3MgYnF7c3RhdGljIE5PT1A9bmV3IF9xfWNsYXNzIHdxe31jb25zdCBtbnQ9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0''@;'; put 'put ''bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0''@;'; put 'put ''aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVudCIsInBlcnNwZWN0aXZlIl0pO2NsYXNzIEg0ZSBleHRlbmRzIHdxe25vcm1hbGl6ZVByb3BlcnR5TmFtZSh0LGUpe3JldHVybiB2cSh0''@;'; put 'put ''KX1ub3JtYWxpemVTdHlsZVZhbHVlKHQsZSxyLGkpe2xldCBhPSIiO2NvbnN0IGM9ci50b1N0cmluZygpLnRyaW0oKTtpZihtbnQuaGFzKGUpJiYwIT09ciYmIjAiIT09cilpZigibnVtYmVyIj09dHlwZW9mIHIpYT0icHgiO2Vsc2V7Y29uc3QgbT1yLm1hdGNoKC9eWystXT9bXGRcLl0rKFth''@;'; put 'put ''LXpdKikkLyk7bSYmMD09bVsxXS5sZW5ndGgmJmkucHVzaChmdW5jdGlvbiBFdHQoKXtyZXR1cm4gbmV3IGtyKDMwMDUsITEpfSgpKX1yZXR1cm4gYythfX1jb25zdCBqSD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksekg9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBONGUobix0KXtj''@;'; put 'put ''b25zdCBlPWpILmhhcyhuKXx8ekguaGFzKG4pLHI9akguaGFzKHQpfHx6SC5oYXModCk7cmV0dXJuKGksYSk9PntsZXQgYz0iKiI9PW58fG49PWksbT0iKiI9PXR8fHQ9PWE7cmV0dXJuIWMmJmUmJiJib29sZWFuIj09dHlwZW9mIGkmJihjPWk/akguaGFzKG4pOnpILmhhcyhuKSksIW0mJnIm''@;'; put 'put ''JiJib29sZWFuIj09dHlwZW9mIGEmJihtPWE/akguaGFzKHQpOnpILmhhcyh0KSksYyYmbX19Y29uc3QgYm50PW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIFNxKG4sdCxlLHIpe3JldHVybiBuZXcgd250KG4pLmJ1aWxkKHQsZSxyKX1jbGFzcyB3bnR7X2RyaXZlcjtj''@;'; put 'put ''b25zdHJ1Y3Rvcih0KXt0aGlzLl9kcml2ZXI9dH1idWlsZCh0LGUscil7Y29uc3QgaT1uZXcgTW50KGUpO3JldHVybiB0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGkpLHgyKHRoaXMsQUEodCksaSl9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUodCl7dC5jdXJyZW50''@;'; put 'put ''UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHQuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcgTWFwKSx0LmN1cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKHQsZSl7bGV0IHI9ZS5xdWVyeUNvdW50PTAsaT1lLmRlcENvdW50PTA7Y29uc3QgYT1bXSxjPVtdO3Jl''@;'; put 'put ''dHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaChmdW5jdGlvbiBUdHQoKXtyZXR1cm4gbmV3IGtyKDMwMDYsITEpfSgpKSx0LmRlZmluaXRpb25zLmZvckVhY2gobT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksbS50eXBlPT1Jby5TdGF0''@;'; put 'put ''ZSl7Y29uc3QgQz1tLFA9Qy5uYW1lO1AudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goWT0+e0MubmFtZT1ZLGEucHVzaCh0aGlzLnZpc2l0U3RhdGUoQyxlKSl9KSxDLm5hbWU9UH1lbHNlIGlmKG0udHlwZT09SW8uVHJhbnNpdGlvbil7Y29uc3QgQz10aGlzLnZpc2l0VHJh''@;'; put 'put ''bnNpdGlvbihtLGUpO3IrPUMucXVlcnlDb3VudCxpKz1DLmRlcENvdW50LGMucHVzaChDKX1lbHNlIGUuZXJyb3JzLnB1c2goZnVuY3Rpb24gQXR0KCl7cmV0dXJuIG5ldyBrcigzMDA3LCExKX0oKSl9KSx7dHlwZTpJby5UcmlnZ2VyLG5hbWU6dC5uYW1lLHN0YXRlczphLHRyYW5zaXRpb25z''@;'; put 'put ''OmMscXVlcnlDb3VudDpyLGRlcENvdW50Omksb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7Y29uc3Qgcj10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSksaT10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYoci5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGE9''@;'; put 'put ''bmV3IFNldCxjPWl8fHt9O3Iuc3R5bGVzLmZvckVhY2gobT0+e20gaW5zdGFuY2VvZiBNYXAmJm0uZm9yRWFjaChDPT57UDRlKEMpLmZvckVhY2goUD0+e2MuaGFzT3duUHJvcGVydHkoUCl8fGEuYWRkKFApfSl9KX0pLGEuc2l6ZSYmZS5lcnJvcnMucHVzaChmdW5jdGlvbiBrdHQoKXtyZXR1''@;'; put 'put ''cm4gbmV3IGtyKDMwMDgsITEpfSgwLGEudmFsdWVzKCkpKX1yZXR1cm57dHlwZTpJby5TdGF0ZSxuYW1lOnQubmFtZSxzdHlsZTpyLG9wdGlvbnM6aT97cGFyYW1zOml9Om51bGx9fXZpc2l0VHJhbnNpdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDtjb25zdCByPXgyKHRo''@;'; put 'put ''aXMsQUEodC5hbmltYXRpb24pLGUpLGk9ZnVuY3Rpb24gdm50KG4sdCl7Y29uc3QgZT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2gocj0+ZnVuY3Rpb24geW50KG4sdCxlKXtpZigiOiI9PW5bMF0pe2NvbnN0IEM9ZnVuY3Rpb24gX250KG4s''@;'; put 'put ''dCl7c3dpdGNoKG4pe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oZSxyKT0+cGFyc2VGbG9hdChyKT5wYXJzZUZsb2F0KGUpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGUscik9PnBh''@;'; put 'put ''cnNlRmxvYXQocik8cGFyc2VGbG9hdChlKTtkZWZhdWx0OnJldHVybiB0LnB1c2goZnVuY3Rpb24gVnR0KCl7cmV0dXJuIG5ldyBrcigzMDE2LCExKX0oKSksIiogPT4gKiJ9fShuLGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBDKXJldHVybiB2b2lkIHQucHVzaChDKTtuPUN9Y29uc3Qgcj1u''@;'; put 'put ''Lm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1yfHxyLmxlbmd0aDw0KXJldHVybiBlLnB1c2goZnVuY3Rpb24gTnR0KCl7cmV0dXJuIG5ldyBrcigzMDE1LCExKX0oKSksdDtjb25zdCBpPXJbMV0sYT1yWzJdLGM9clszXTt0LnB1c2go''@;'; put 'put ''TjRlKGksYykpLCI8Ij09YVswXSYmKCIqIiE9aXx8IioiIT1jKSYmdC5wdXNoKE40ZShjLGkpKX0ocixlLHQpKTplLnB1c2gobiksZX0odC5leHByLGUuZXJyb3JzKTtyZXR1cm57dHlwZTpJby5UcmFuc2l0aW9uLG1hdGNoZXJzOmksYW5pbWF0aW9uOnIscXVlcnlDb3VudDplLnF1ZXJ5Q291''@;'; put 'put ''bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOlR2KHQub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UodCxlKXtyZXR1cm57dHlwZTpJby5TZXF1ZW5jZSxzdGVwczp0LnN0ZXBzLm1hcChyPT54Mih0aGlzLHIsZSkpLG9wdGlvbnM6VHYodC5vcHRpb25zKX19dmlzaXRHcm91cCh0LGUpe2Nv''@;'; put 'put ''bnN0IHI9ZS5jdXJyZW50VGltZTtsZXQgaT0wO2NvbnN0IGE9dC5zdGVwcy5tYXAoYz0+e2UuY3VycmVudFRpbWU9cjtjb25zdCBtPXgyKHRoaXMsYyxlKTtyZXR1cm4gaT1NYXRoLm1heChpLGUuY3VycmVudFRpbWUpLG19KTtyZXR1cm4gZS5jdXJyZW50VGltZT1pLHt0eXBlOklvLkdyb3Vw''@;'; put 'put ''LHN0ZXBzOmEsb3B0aW9uczpUdih0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGUodCxlKXtjb25zdCByPWZ1bmN0aW9uIEVudChuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBNcShWSChuLHQpLmR1cmF0aW9u''@;'; put 'put ''LDAsIiIpO2NvbnN0IGU9bjtpZihlLnNwbGl0KC9ccysvKS5zb21lKGE9PiJ7Ij09YS5jaGFyQXQoMCkmJiJ7Ij09YS5jaGFyQXQoMSkpKXtjb25zdCBhPU1xKDAsMCwiIik7cmV0dXJuIGEuZHluYW1pYz0hMCxhLnN0clZhbHVlPWUsYX1jb25zdCBpPVZIKGUsdCk7cmV0dXJuIE1xKGkuZHVy''@;'; put 'put ''YXRpb24saS5kZWxheSxpLmVhc2luZyl9KHQudGltaW5ncyxlLmVycm9ycyk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9cjtsZXQgaSxhPXQuc3R5bGVzP3Quc3R5bGVzOkNzKHt9KTtpZihhLnR5cGU9PUlvLktleWZyYW1lcylpPXRoaXMudmlzaXRLZXlmcmFtZXMoYSxlKTtlbHNle2xldCBj''@;'; put 'put ''PXQuc3R5bGVzLG09ITE7aWYoIWMpe209ITA7Y29uc3QgUD17fTtyLmVhc2luZyYmKFAuZWFzaW5nPXIuZWFzaW5nKSxjPUNzKFApfWUuY3VycmVudFRpbWUrPXIuZHVyYXRpb24rci5kZWxheTtjb25zdCBDPXRoaXMudmlzaXRTdHlsZShjLGUpO0MuaXNFbXB0eVN0ZXA9bSxpPUN9cmV0dXJu''@;'; put 'put ''IGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6SW8uQW5pbWF0ZSx0aW1pbmdzOnIsc3R5bGU6aSxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUodCxlKXtjb25zdCByPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KHIsZSkscn1f''@;'; put 'put ''bWFrZVN0eWxlQXN0KHQsZSl7Y29uc3Qgcj1bXSxpPUFycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzOlt0LnN0eWxlc107Zm9yKGxldCBtIG9mIGkpInN0cmluZyI9PXR5cGVvZiBtP209PT10NT9yLnB1c2gobSk6ZS5lcnJvcnMucHVzaChuZXcga3IoMzAwMiwhMSkpOnIucHVzaChu''@;'; put 'put ''ZXcgTWFwKE9iamVjdC5lbnRyaWVzKG0pKSk7bGV0IGE9ITEsYz1udWxsO3JldHVybiByLmZvckVhY2gobT0+e2lmKG0gaW5zdGFuY2VvZiBNYXAmJihtLmhhcygiZWFzaW5nIikmJihjPW0uZ2V0KCJlYXNpbmciKSxtLmRlbGV0ZSgiZWFzaW5nIikpLCFhKSlmb3IobGV0IEMgb2YgbS52YWx1''@;'; put 'put ''ZXMoKSlpZihDLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7YT0hMDticmVha319KSx7dHlwZTpJby5TdHlsZSxzdHlsZXM6cixlYXNpbmc6YyxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOmEsb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdCh0LGUpe2Nv''@;'; put 'put ''bnN0IHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGk9ZS5jdXJyZW50VGltZSxhPWUuY3VycmVudFRpbWU7ciYmYT4wJiYoYS09ci5kdXJhdGlvbityLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKGM9Pnsic3RyaW5nIiE9dHlwZW9mIGMmJmMuZm9yRWFjaCgobSxDKT0+e2NvbnN0IFA9''@;'; put 'put ''ZS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLFk9UC5nZXQoQyk7bGV0IEo9ITA7WSYmKGEhPWkmJmE+PVkuc3RhcnRUaW1lJiZpPD1ZLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKGZ1bmN0aW9uIEl0dCgpe3JldHVybiBuZXcga3IoMzAxMCwhMSl9KCkpLEo9''@;'; put 'put ''ITEpLGE9WS5zdGFydFRpbWUpLEomJlAuc2V0KEMse3N0YXJ0VGltZTphLGVuZFRpbWU6aX0pLGUub3B0aW9ucyYmZnVuY3Rpb24gc250KG4sdCxlKXtjb25zdCByPXQucGFyYW1zfHx7fSxpPVA0ZShuKTtpLmxlbmd0aCYmaS5mb3JFYWNoKGE9PntyLmhhc093blByb3BlcnR5KGEpfHxlLnB1''@;'; put 'put ''c2goZnVuY3Rpb24gU3R0KCl7cmV0dXJuIG5ldyBrcigzMDAxLCExKX0oKSl9KX0obSxlLm9wdGlvbnMsZS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyh0LGUpe2NvbnN0IHI9e3R5cGU6SW8uS2V5ZnJhbWVzLHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFlLmN1cnJlbnRBbmltYXRl''@;'; put 'put ''VGltaW5ncylyZXR1cm4gZS5lcnJvcnMucHVzaChmdW5jdGlvbiBSdHQoKXtyZXR1cm4gbmV3IGtyKDMwMTEsITEpfSgpKSxyO2xldCBhPTA7Y29uc3QgYz1bXTtsZXQgbT0hMSxDPSExLFA9MDtjb25zdCBZPXQuc3RlcHMubWFwKHJ0PT57Y29uc3QgZHQ9dGhpcy5fbWFrZVN0eWxlQXN0KHJ0''@;'; put 'put ''LGUpO2xldCBqdD1udWxsIT1kdC5vZmZzZXQ/ZHQub2Zmc2V0OmZ1bmN0aW9uIHhudChuKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaChlPT57aWYoZSBpbnN0YW5jZW9mIE1hcCYmZS5oYXMoIm9mZnNl''@;'; put 'put ''dCIpKXtjb25zdCByPWU7dD1wYXJzZUZsb2F0KHIuZ2V0KCJvZmZzZXQiKSksci5kZWxldGUoIm9mZnNldCIpfX0pO2Vsc2UgaWYobiBpbnN0YW5jZW9mIE1hcCYmbi5oYXMoIm9mZnNldCIpKXtjb25zdCBlPW47dD1wYXJzZUZsb2F0KGUuZ2V0KCJvZmZzZXQiKSksZS5kZWxldGUoIm9mZnNl''@;'; put 'put ''dCIpfXJldHVybiB0fShkdC5zdHlsZXMpLEZ0PTA7cmV0dXJuIG51bGwhPWp0JiYoYSsrLEZ0PWR0Lm9mZnNldD1qdCksQz1DfHxGdDwwfHxGdD4xLG09bXx8RnQ8UCxQPUZ0LGMucHVzaChGdCksZHR9KTtDJiZlLmVycm9ycy5wdXNoKGZ1bmN0aW9uIEx0dCgpe3JldHVybiBuZXcga3IoMzAx''@;'; put 'put ''MiwhMSl9KCkpLG0mJmUuZXJyb3JzLnB1c2goZnVuY3Rpb24gT3R0KCl7cmV0dXJuIG5ldyBrcigzMjAwLCExKX0oKSk7Y29uc3QgSj10LnN0ZXBzLmxlbmd0aDtsZXQgY2U9MDthPjAmJmE8Sj9lLmVycm9ycy5wdXNoKGZ1bmN0aW9uIFB0dCgpe3JldHVybiBuZXcga3IoMzIwMiwhMSl9KCkp''@;'; put 'put ''OjA9PWEmJihjZT0xLyhKLTEpKTtjb25zdCBmZT1KLTEsQWU9ZS5jdXJyZW50VGltZSxIZT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxYZT1IZS5kdXJhdGlvbjtyZXR1cm4gWS5mb3JFYWNoKChydCxkdCk9Pntjb25zdCBqdD1jZT4wP2R0PT1mZT8xOmNlKmR0OmNbZHRdLEZ0PWp0KlhlO2Uu''@;'; put 'put ''Y3VycmVudFRpbWU9QWUrSGUuZGVsYXkrRnQsSGUuZHVyYXRpb249RnQsdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChydCxlKSxydC5vZmZzZXQ9anQsci5zdHlsZXMucHVzaChydCl9KSxyfXZpc2l0UmVmZXJlbmNlKHQsZSl7cmV0dXJue3R5cGU6SW8uUmVmZXJlbmNlLGFuaW1hdGlvbjp4Mih0''@;'; put 'put ''aGlzLEFBKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOlR2KHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTpJby5BbmltYXRlQ2hpbGQsb3B0aW9uczpUdih0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYodCxlKXtyZXR1cm57dHlw''@;'; put 'put ''ZTpJby5BbmltYXRlUmVmLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGUpLG9wdGlvbnM6VHYodC5vcHRpb25zKX19dmlzaXRRdWVyeSh0LGUpe2NvbnN0IHI9ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixpPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5j''@;'; put 'put ''dXJyZW50UXVlcnk9dDtjb25zdFthLGNdPWZ1bmN0aW9uIENudChuKXtjb25zdCB0PSEhbi5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoZT0+IjpzZWxmIj09ZSk7cmV0dXJuIHQmJihuPW4ucmVwbGFjZShibnQsIiIpKSxuPW4ucmVwbGFjZSgvQFwqL2csTkgpLnJlcGxhY2UoL0BcdysvZyxlPT5O''@;'; put 'put ''SCsiLSIrZS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLHBxKSxbbix0XX0odC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1yLmxlbmd0aD9yKyIgIithOmEsTTIoZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtjb25zdCBt''@;'; put 'put ''PXgyKHRoaXMsQUEodC5hbmltYXRpb24pLGUpO3JldHVybiBlLmN1cnJlbnRRdWVyeT1udWxsLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3I9cix7dHlwZTpJby5RdWVyeSxzZWxlY3RvcjphLGxpbWl0OmkubGltaXR8fDAsb3B0aW9uYWw6ISFpLm9wdGlvbmFsLGluY2x1ZGVTZWxmOmMsYW5pbWF0''@;'; put 'put ''aW9uOm0sb3JpZ2luYWxTZWxlY3Rvcjp0LnNlbGVjdG9yLG9wdGlvbnM6VHYodC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKHQsZSl7ZS5jdXJyZW50UXVlcnl8fGUuZXJyb3JzLnB1c2goZnVuY3Rpb24gRnR0KCl7cmV0dXJuIG5ldyBrcigzMDEzLCExKX0oKSk7Y29uc3Qgcj0iZnVsbCI9PT10''@;'; put 'put ''LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpWSCh0LnRpbWluZ3MsZS5lcnJvcnMsITApO3JldHVybnt0eXBlOklvLlN0YWdnZXIsYW5pbWF0aW9uOngyKHRoaXMsQUEodC5hbmltYXRpb24pLGUpLHRpbWluZ3M6cixvcHRpb25zOm51bGx9fX1jbGFzcyBNbnR7''@;'; put 'put ''ZXJyb3JzO3F1ZXJ5Q291bnQ9MDtkZXBDb3VudD0wO2N1cnJlbnRUcmFuc2l0aW9uPW51bGw7Y3VycmVudFF1ZXJ5PW51bGw7Y3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbDtjdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbDtjdXJyZW50VGltZT0wO2NvbGxlY3RlZFN0eWxlcz1uZXcgTWFwO29w''@;'; put 'put ''dGlvbnM9bnVsbDt1bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0O2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3JzPXR9fWZ1bmN0aW9uIFR2KG4pe3JldHVybiBuPyhuPXsuLi5ufSkucGFyYW1zJiYobi5wYXJhbXM9ZnVuY3Rpb24gU250KG4pe3JldHVybiBuP3suLi5ufTpu''@;'; put 'put ''dWxsfShuLnBhcmFtcykpOm49e30sbn1mdW5jdGlvbiBNcShuLHQsZSl7cmV0dXJue2R1cmF0aW9uOm4sZGVsYXk6dCxlYXNpbmc6ZX19ZnVuY3Rpb24geHEobix0LGUscixpLGEsYz1udWxsLG09ITEpe3JldHVybnt0eXBlOjEsZWxlbWVudDpuLGtleWZyYW1lczp0LHByZVN0eWxlUHJvcHM6''@;'; put 'put ''ZSxwb3N0U3R5bGVQcm9wczpyLGR1cmF0aW9uOmksZGVsYXk6YSx0b3RhbFRpbWU6aSthLGVhc2luZzpjLHN1YlRpbWVsaW5lOm19fWNsYXNzIFVIe19tYXA9bmV3IE1hcDtnZXQodCl7cmV0dXJuIHRoaXMuX21hcC5nZXQodCl8fFtdfWFwcGVuZCh0LGUpe2xldCByPXRoaXMuX21hcC5nZXQo''@;'; put 'put ''dCk7cnx8dGhpcy5fbWFwLnNldCh0LHI9W10pLHIucHVzaCguLi5lKX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3Qga250PW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxJbnQ9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1''@;'; put 'put ''bmN0aW9uIEVxKG4sdCxlLHIsaSxhPW5ldyBNYXAsYz1uZXcgTWFwLG0sQyxQPVtdKXtyZXR1cm4obmV3IFJudCkuYnVpbGRLZXlmcmFtZXMobix0LGUscixpLGEsYyxtLEMsUCl9Y2xhc3MgUm50e2J1aWxkS2V5ZnJhbWVzKHQsZSxyLGksYSxjLG0sQyxQLFk9W10pe1A9UHx8bmV3IFVIO2Nv''@;'; put 'put ''bnN0IEo9bmV3IFRxKHQsZSxQLGksYSxZLFtdKTtKLm9wdGlvbnM9Qztjb25zdCBjZT1DLmRlbGF5P2Q1KEMuZGVsYXkpOjA7Si5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChjZSksSi5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtjXSxudWxsLEouZXJyb3JzLEMpLHgyKHRoaXMs''@;'; put 'put ''cixKKTtjb25zdCBmZT1KLnRpbWVsaW5lcy5maWx0ZXIoQWU9PkFlLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKGZlLmxlbmd0aCYmbS5zaXplKXtsZXQgQWU7Zm9yKGxldCBIZT1mZS5sZW5ndGgtMTtIZT49MDtIZS0tKXtjb25zdCBYZT1mZVtIZV07aWYoWGUuZWxlbWVudD09PWUpe0FlPVhl''@;'; put 'put ''O2JyZWFrfX1BZSYmIUFlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJkFlLnNldFN0eWxlcyhbbV0sbnVsbCxKLmVycm9ycyxDKX1yZXR1cm4gZmUubGVuZ3RoP2ZlLm1hcChBZT0+QWUuYnVpbGRLZXlmcmFtZXMoKSk6W3hxKGUsW10sW10sW10sMCxjZSwiIiwhMSldfXZpc2l0VHJpZ2dl''@;'; put 'put ''cih0LGUpe312aXNpdFN0YXRlKHQsZSl7fXZpc2l0VHJhbnNpdGlvbih0LGUpe312aXNpdEFuaW1hdGVDaGlsZCh0LGUpe2NvbnN0IHI9ZS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGUuZWxlbWVudCk7aWYocil7Y29uc3QgaT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKSxhPWUuY3VycmVu''@;'; put 'put ''dFRpbWVsaW5lLmN1cnJlbnRUaW1lLGM9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMocixpLGkub3B0aW9ucyk7YSE9YyYmZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYyl9ZS5wcmV2aW91c05vZGU9dH12aXNpdEFuaW1hdGVSZWYodCxlKXtjb25zdCByPWUuY3JlYXRlU3ViQ29udGV4''@;'; put 'put ''dCh0Lm9wdGlvbnMpO3IudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW3Qub3B0aW9ucyx0LmFuaW1hdGlvbi5vcHRpb25zXSxlLHIpLHRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sciksZS50cmFuc2Zvcm1JbnRvTmV3VGlt''@;'; put 'put ''ZWxpbmUoci5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGUucHJldmlvdXNOb2RlPXR9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKHQsZSxyKXtmb3IoY29uc3QgaSBvZiB0KXtjb25zdCBhPWk/LmRlbGF5O2lmKGEpe2NvbnN0IGM9Im51bWJlciI9PXR5cGVvZiBhP2E6ZDUoa0EoYSxp''@;'; put 'put ''Py5wYXJhbXM/P3t9LGUuZXJyb3JzKSk7ci5kZWxheU5leHRTdGVwKGMpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKHQsZSxyKXtsZXQgYT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBjPW51bGwhPXIuZHVyYXRpb24/ZDUoci5kdXJhdGlvbik6bnVsbCxtPW51bGwhPXIu''@;'; put 'put ''ZGVsYXk/ZDUoci5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PWMmJnQuZm9yRWFjaChDPT57Y29uc3QgUD1lLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShDLGMsbSk7YT1NYXRoLm1heChhLFAuZHVyYXRpb24rUC5kZWxheSl9KSxhfXZpc2l0UmVmZXJlbmNlKHQsZSl7ZS51cGRhdGVPcHRp''@;'; put 'put ''b25zKHQub3B0aW9ucywhMCkseDIodGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U2VxdWVuY2UodCxlKXtjb25zdCByPWUuc3ViQ29udGV4dENvdW50O2xldCBpPWU7Y29uc3QgYT10Lm9wdGlvbnM7aWYoYSYmKGEucGFyYW1zfHxhLmRlbGF5KSYmKGk9ZS5jcmVh''@;'; put 'put ''dGVTdWJDb250ZXh0KGEpLGkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9YS5kZWxheSkpe2kucHJldmlvdXNOb2RlLnR5cGU9PUlvLlN0eWxlJiYoaS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaS5wcmV2aW91c05vZGU9V0gpO2NvbnN0IGM9ZDUo''@;'; put 'put ''YS5kZWxheSk7aS5kZWxheU5leHRTdGVwKGMpfXQuc3RlcHMubGVuZ3RoJiYodC5zdGVwcy5mb3JFYWNoKGM9PngyKHRoaXMsYyxpKSksaS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaS5zdWJDb250ZXh0Q291bnQ+ciYmaS50cmFuc2Zvcm1JbnRvTmV3VGltZWxp''@;'; put 'put ''bmUoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdEdyb3VwKHQsZSl7Y29uc3Qgcj1bXTtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBhPXQub3B0aW9ucyYmdC5vcHRpb25zLmRlbGF5P2Q1KHQub3B0aW9ucy5kZWxheSk6MDt0LnN0ZXBzLmZvckVhY2goYz0+e2Nv''@;'; put 'put ''bnN0IG09ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7YSYmbS5kZWxheU5leHRTdGVwKGEpLHgyKHRoaXMsYyxtKSxpPU1hdGgubWF4KGksbS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLHIucHVzaChtLmN1cnJlbnRUaW1lbGluZSl9KSxyLmZvckVhY2goYz0+ZS5jdXJyZW50''@;'; put 'put ''VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhjKSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaSksZS5wcmV2aW91c05vZGU9dH1fdmlzaXRUaW1pbmcodCxlKXtpZih0LmR5bmFtaWMpe2NvbnN0IHI9dC5zdHJWYWx1ZTtyZXR1cm4gVkgoZS5wYXJhbXM/a0Eocixl''@;'; put 'put ''LnBhcmFtcyxlLmVycm9ycyk6cixlLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOnQuZHVyYXRpb24sZGVsYXk6dC5kZWxheSxlYXNpbmc6dC5lYXNpbmd9fXZpc2l0QW5pbWF0ZSh0LGUpe2NvbnN0IHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcodC50aW1pbmdz''@;'; put 'put ''LGUpLGk9ZS5jdXJyZW50VGltZWxpbmU7ci5kZWxheSYmKGUuaW5jcmVtZW50VGltZShyLmRlbGF5KSxpLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBhPXQuc3R5bGU7YS50eXBlPT1Jby5LZXlmcmFtZXM/dGhpcy52aXNpdEtleWZyYW1lcyhhLGUpOihlLmluY3JlbWVudFRpbWUo''@;'; put 'put ''ci5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGEsZSksaS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtjb25zdCByPWUuY3VycmVudFRpbWVsaW5lLGk9ZS5jdXJyZW50QW5pbWF0''@;'; put 'put ''ZVRpbWluZ3M7IWkmJnIuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZyLmZvcndhcmRGcmFtZSgpO2NvbnN0IGE9aSYmaS5lYXNpbmd8fHQuZWFzaW5nO3QuaXNFbXB0eVN0ZXA/ci5hcHBseUVtcHR5U3RlcChhKTpyLnNldFN0eWxlcyh0LnN0eWxlcyxhLGUuZXJyb3JzLGUub3B0aW9u''@;'; put 'put ''cyksZS5wcmV2aW91c05vZGU9dH12aXNpdEtleWZyYW1lcyh0LGUpe2NvbnN0IHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixhPXIuZHVyYXRpb24sbT1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7bS5lYXNpbmc9ci5l''@;'; put 'put ''YXNpbmcsdC5zdHlsZXMuZm9yRWFjaChDPT57bS5mb3J3YXJkVGltZSgoQy5vZmZzZXR8fDApKmEpLG0uc2V0U3R5bGVzKEMuc3R5bGVzLEMuZWFzaW5nLGUuZXJyb3JzLGUub3B0aW9ucyksbS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxp''@;'; put 'put ''bmVDb2xsZWN0ZWRTdHlsZXMobSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaSthKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtjb25zdCByPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGk9dC5vcHRpb25zfHx7fSxhPWkuZGVsYXk/ZDUoaS5kZWxheSk6MDth''@;'; put 'put ''JiYoZS5wcmV2aW91c05vZGUudHlwZT09PUlvLlN0eWxlfHwwPT1yJiZlLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9V0gpO2xldCBjPXI7Y29uc3Qg''@;'; put 'put ''bT1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIWkub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9bS5sZW5ndGg7bGV0IEM9bnVsbDttLmZvckVhY2goKFAsWSk9PntlLmN1cnJlbnRRdWVyeUlu''@;'; put 'put ''ZGV4PVk7Y29uc3QgSj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zLFApO2EmJkouZGVsYXlOZXh0U3RlcChhKSxQPT09ZS5lbGVtZW50JiYoQz1KLmN1cnJlbnRUaW1lbGluZSkseDIodGhpcyx0LmFuaW1hdGlvbixKKSxKLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJh''@;'; put 'put ''bWUoKSxjPU1hdGgubWF4KGMsSi5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksZS5jdXJyZW50UXVlcnlJbmRleD0wLGUuY3VycmVudFF1ZXJ5VG90YWw9MCxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShjKSxDJiYoZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxl''@;'; put 'put ''Y3RlZFN0eWxlcyhDKSxlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdFN0YWdnZXIodCxlKXtjb25zdCByPWUucGFyZW50Q29udGV4dCxpPWUuY3VycmVudFRpbWVsaW5lLGE9dC50aW1pbmdzLGM9TWF0aC5hYnMoYS5kdXJh''@;'; put 'put ''dGlvbiksbT1jKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpO2xldCBDPWMqZS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goYS5kdXJhdGlvbjwwPyJyZXZlcnNlIjphLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpDPW0tQzticmVhaztjYXNlImZ1bGwiOkM9ci5jdXJyZW50U3RhZ2dlclRpbWV9Y29u''@;'; put 'put ''c3QgWT1lLmN1cnJlbnRUaW1lbGluZTtDJiZZLmRlbGF5TmV4dFN0ZXAoQyk7Y29uc3QgSj1ZLmN1cnJlbnRUaW1lO3gyKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxyLmN1cnJlbnRTdGFnZ2VyVGltZT1pLmN1cnJlbnRUaW1lLUorKGkuc3RhcnRUaW1lLXIuY3VycmVu''@;'; put 'put ''dFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNvbnN0IFdIPXt9O2NsYXNzIFRxe19kcml2ZXI7ZWxlbWVudDtzdWJJbnN0cnVjdGlvbnM7X2VudGVyQ2xhc3NOYW1lO19sZWF2ZUNsYXNzTmFtZTtlcnJvcnM7dGltZWxpbmVzO3BhcmVudENvbnRleHQ9bnVsbDtjdXJyZW50VGltZWxpbmU7Y3VycmVu''@;'; put 'put ''dEFuaW1hdGVUaW1pbmdzPW51bGw7cHJldmlvdXNOb2RlPVdIO3N1YkNvbnRleHRDb3VudD0wO29wdGlvbnM9e307Y3VycmVudFF1ZXJ5SW5kZXg9MDtjdXJyZW50UXVlcnlUb3RhbD0wO2N1cnJlbnRTdGFnZ2VyVGltZT0wO2NvbnN0cnVjdG9yKHQsZSxyLGksYSxjLG0sQyl7dGhpcy5fZHJp''@;'; put 'put ''dmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9cix0aGlzLl9lbnRlckNsYXNzTmFtZT1pLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWEsdGhpcy5lcnJvcnM9Yyx0aGlzLnRpbWVsaW5lcz1tLHRoaXMuY3VycmVudFRpbWVsaW5lPUN8fG5ldyBaSCh0aGlzLl9kcml2ZXIs''@;'; put 'put ''ZSwwKSxtLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKHQsZSl7aWYoIXQpcmV0dXJuO2NvbnN0IHI9dDtsZXQgaT10aGlzLm9wdGlvbnM7bnVsbCE9ci5kdXJhdGlvbiYmKGkuZHVyYXRpb249''@;'; put 'put ''ZDUoci5kdXJhdGlvbikpLG51bGwhPXIuZGVsYXkmJihpLmRlbGF5PWQ1KHIuZGVsYXkpKTtjb25zdCBhPXIucGFyYW1zO2lmKGEpe2xldCBjPWkucGFyYW1zO2N8fChjPXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKGEpLmZvckVhY2gobT0+eyghZXx8IWMuaGFzT3duUHJv''@;'; put 'put ''cGVydHkobSkpJiYoY1ttXT1rQShhW21dLGMsdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtjb25zdCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe2NvbnN0IHI9dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChp''@;'; put 'put ''PT57cltpXT1lW2ldfSl9fXJldHVybiB0fWNyZWF0ZVN1YkNvbnRleHQodD1udWxsLGUscil7Y29uc3QgaT1lfHx0aGlzLmVsZW1lbnQsYT1uZXcgVHEodGhpcy5fZHJpdmVyLGksdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUs''@;'; put 'put ''dGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhpLHJ8fDApKTtyZXR1cm4gYS5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsYS5vcHRpb25zPXRo''@;'; put 'put ''aXMuX2NvcHlPcHRpb25zKCksYS51cGRhdGVPcHRpb25zKHQpLGEuY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxhLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsYS5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQr''@;'; put 'put ''KyxhfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9V0gsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSks''@;'; put 'put ''dGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsZSxyKXtjb25zdCBpPXtkdXJhdGlvbjplPz90LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhyPz8wKSt0LmRlbGF5LGVhc2luZzoiIn0sYT1uZXcgTG50KHRo''@;'; put 'put ''aXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMsaSx0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChhKSxpfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUu''@;'; put 'put ''Zm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLHIsaSxhLGMpe2xldCBtPVtdO2lmKGkmJm0ucHVzaCh0aGlzLmVsZW1lbnQp''@;'; put 'put ''LHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKGtudCwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKEludCwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBQPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsdCwxIT1yKTswIT09ciYmKFA9cjwwP1Auc2xpY2Uo''@;'; put 'put ''UC5sZW5ndGgrcixQLmxlbmd0aCk6UC5zbGljZSgwLHIpKSxtLnB1c2goLi4uUCl9cmV0dXJuIWEmJjA9PW0ubGVuZ3RoJiZjLnB1c2goZnVuY3Rpb24gSHR0KCl7cmV0dXJuIG5ldyBrcigzMDE0LCExKX0oKSksbX19Y2xhc3MgWkh7X2RyaXZlcjtlbGVtZW50O3N0YXJ0VGltZTtfZWxlbWVu''@;'; put 'put ''dFRpbWVsaW5lU3R5bGVzTG9va3VwO2R1cmF0aW9uPTA7ZWFzaW5nPW51bGw7X3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcDtfY3VycmVudEtleWZyYW1lPW5ldyBNYXA7X2tleWZyYW1lcz1uZXcgTWFwO19zdHlsZVN1bW1hcnk9bmV3IE1hcDtfbG9jYWxUaW1lbGluZVN0eWxlcz1uZXcgTWFw''@;'; put 'put ''O19nbG9iYWxUaW1lbGluZVN0eWxlcztfcGVuZGluZ1N0eWxlcz1uZXcgTWFwO19iYWNrRmlsbD1uZXcgTWFwO19jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbDtjb25zdHJ1Y3Rvcih0LGUscixpKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN0YXJ0VGltZT1yLHRo''@;'; put 'put ''aXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1pLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHls''@;'; put 'put ''ZXNMb29rdXAuZ2V0KGUpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGUsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykp''@;'; put 'put ''LHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5''@;'; put 'put ''bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcCh0KXtjb25zdCBlPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVu''@;'; put 'put ''ZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH1mb3JrKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1l''@;'; put 'put ''KCksbmV3IFpIKHRoaXMuX2RyaXZlcix0LGV8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUp''@;'; put 'put ''LHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJh''@;'; put 'put ''bWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRUaW1lKHQpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj10LHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZSh0LGUpe3RoaXMuX2xv''@;'; put 'put ''Y2FsVGltZWxpbmVTdHlsZXMuc2V0KHQsZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KHQsZSksdGhpcy5fc3R5bGVTdW1tYXJ5LnNldCh0LHt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJl''@;'; put 'put ''bnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcCh0KXt0JiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIix0KTtmb3IobGV0W2Uscl1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQo''@;'; put 'put ''ZSxyfHx0NSksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChlLHQ1KTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyh0LGUscixpKXtlJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixlKTtjb25zdCBhPWkm''@;'; put 'put ''JmkucGFyYW1zfHx7fSxjPWZ1bmN0aW9uIE9udChuLHQpe2NvbnN0IGU9bmV3IE1hcDtsZXQgcjtyZXR1cm4gbi5mb3JFYWNoKGk9PntpZigiKiI9PT1pKXtyPz89dC5rZXlzKCk7Zm9yKGxldCBhIG9mIHIpZS5zZXQoYSx0NSl9ZWxzZSBmb3IobGV0W2EsY11vZiBpKWUuc2V0KGEsYyl9KSxl''@;'; put 'put ''fSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtmb3IobGV0W20sQ11vZiBjKXtjb25zdCBQPWtBKEMsYSxyKTt0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChtLFApLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKG0pfHx0aGlzLl9iYWNrRmlsbC5zZXQobSx0aGlzLl9nbG9iYWxU''@;'; put 'put ''aW1lbGluZVN0eWxlcy5nZXQobSk/P3Q1KSx0aGlzLl91cGRhdGVTdHlsZShtLFApfX1hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKXswIT10aGlzLl9wZW5kaW5nU3R5bGVzLnNpemUmJih0aGlzLl9wZW5kaW5nU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0''@;'; put 'put ''KGUsdCl9KSx0aGlzLl9wZW5kaW5nU3R5bGVzLmNsZWFyKCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5mb3JFYWNoKCh0LGUpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhcyhlKXx8dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChlLHQpfSkpfXNuYXBzaG90Q3VycmVudFN0eWxlcygp''@;'; put 'put ''e2ZvcihsZXRbdCxlXW9mIHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpdGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQodCxlKSx0aGlzLl91cGRhdGVTdHlsZSh0LGUpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVy''@;'; put 'put ''dGllcygpe2NvbnN0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxyKT0+e2NvbnN0IGk9dGhpcy5fc3R5bGVTdW1tYXJ5Lmdl''@;'; put 'put ''dChyKTsoIWl8fGUudGltZT5pLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShyLGUudmFsdWUpfSl9YnVpbGRLZXlmcmFtZXMoKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO2NvbnN0IHQ9bmV3IFNldCxlPW5ldyBTZXQscj0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlz''@;'; put 'put ''LmR1cmF0aW9uO2xldCBpPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKChtLEMpPT57Y29uc3QgUD1uZXcgTWFwKFsuLi50aGlzLl9iYWNrRmlsbCwuLi5tXSk7UC5mb3JFYWNoKChZLEopPT57IiEiPT09WT90LmFkZChKKTpZPT09dDUmJmUuYWRkKEopfSkscnx8UC5zZXQoIm9mZnNldCIs''@;'; put 'put ''Qy90aGlzLmR1cmF0aW9uKSxpLnB1c2goUCl9KTtjb25zdCBhPVsuLi50LnZhbHVlcygpXSxjPVsuLi5lLnZhbHVlcygpXTtpZihyKXtjb25zdCBtPWlbMF0sQz1uZXcgTWFwKG0pO20uc2V0KCJvZmZzZXQiLDApLEMuc2V0KCJvZmZzZXQiLDEpLGk9W20sQ119cmV0dXJuIHhxKHRoaXMuZWxl''@;'; put 'put ''bWVudCxpLGEsYyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgTG50IGV4dGVuZHMgWkh7a2V5ZnJhbWVzO3ByZVN0eWxlUHJvcHM7cG9zdFN0eWxlUHJvcHM7X3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lO3RpbWluZ3M7Y29uc3RydWN0b3IodCxl''@;'; put 'put ''LHIsaSxhLGMsbT0hMSl7c3VwZXIodCxlLGMuZGVsYXkpLHRoaXMua2V5ZnJhbWVzPXIsdGhpcy5wcmVTdHlsZVByb3BzPWksdGhpcy5wb3N0U3R5bGVQcm9wcz1hLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPW0sdGhpcy50aW1pbmdzPXtkdXJhdGlvbjpjLmR1cmF0aW9uLGRlbGF5''@;'; put 'put ''OmMuZGVsYXksZWFzaW5nOmMuZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCB0PXRoaXMua2V5ZnJhbWVzLHtkZWxheTplLGR1cmF0aW9uOnIsZWFzaW5nOml9PXRoaXMudGltaW5ncztpZih0aGlz''@;'; put 'put ''Ll9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmZSl7Y29uc3QgYT1bXSxjPXIrZSxtPWUvYyxDPW5ldyBNYXAodFswXSk7Qy5zZXQoIm9mZnNldCIsMCksYS5wdXNoKEMpO2NvbnN0IFA9bmV3IE1hcCh0WzBdKTtQLnNldCgib2Zmc2V0IixqNGUobSkpLGEucHVzaChQKTtjb25zdCBZPXQubGVu''@;'; put 'put ''Z3RoLTE7Zm9yKGxldCBKPTE7Sjw9WTtKKyspe2xldCBjZT1uZXcgTWFwKHRbSl0pO2NvbnN0IGZlPWNlLmdldCgib2Zmc2V0Iik7Y2Uuc2V0KCJvZmZzZXQiLGo0ZSgoZStmZSpyKS9jKSksYS5wdXNoKGNlKX1yPWMsZT0wLGk9IiIsdD1hfXJldHVybiB4cSh0aGlzLmVsZW1lbnQsdCx0aGlz''@;'; put 'put ''LnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxyLGUsaSwhMCl9fWZ1bmN0aW9uIGo0ZShuLHQ9Myl7Y29uc3QgZT1NYXRoLnBvdygxMCx0LTEpO3JldHVybiBNYXRoLnJvdW5kKG4qZSkvZX1mdW5jdGlvbiB6NGUobix0LGUscixpLGEsYyxtLEMsUCxZLEosY2Upe3JldHVybnt0''@;'; put 'put ''eXBlOjAsZWxlbWVudDpuLHRyaWdnZXJOYW1lOnQsaXNSZW1vdmFsVHJhbnNpdGlvbjppLGZyb21TdGF0ZTplLGZyb21TdHlsZXM6YSx0b1N0YXRlOnIsdG9TdHlsZXM6Yyx0aW1lbGluZXM6bSxxdWVyaWVkRWxlbWVudHM6QyxwcmVTdHlsZVByb3BzOlAscG9zdFN0eWxlUHJvcHM6WSx0b3Rh''@;'; put 'put ''bFRpbWU6SixlcnJvcnM6Y2V9fWNvbnN0IEFxPXt9O2NsYXNzIFU0ZXtfdHJpZ2dlck5hbWU7YXN0O19zdGF0ZVN0eWxlcztjb25zdHJ1Y3Rvcih0LGUscil7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPXJ9bWF0Y2godCxlLHIsaSl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIFBudChuLHQsZSxyLGkpe3JldHVybiBuLnNvbWUoYT0+YSh0LGUscixpKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxyLGkpfWJ1aWxkU3R5bGVzKHQsZSxyKXtsZXQgaT10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09dCYmKGk9dGhpcy5fc3RhdGVT''@;'; put 'put ''dHlsZXMuZ2V0KHQ/LnRvU3RyaW5nKCkpfHxpKSxpP2kuYnVpbGRTdHlsZXMoZSxyKTpuZXcgTWFwfWJ1aWxkKHQsZSxyLGksYSxjLG0sQyxQLFkpe2NvbnN0IEo9W10sY2U9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fEFxLEFlPXRoaXMuYnVpbGRTdHlsZXMo''@;'; put 'put ''cixtJiZtLnBhcmFtc3x8QXEsSiksSGU9QyYmQy5wYXJhbXN8fEFxLFhlPXRoaXMuYnVpbGRTdHlsZXMoaSxIZSxKKSxydD1uZXcgU2V0LGR0PW5ldyBNYXAsanQ9bmV3IE1hcCxGdD0idm9pZCI9PT1pLHBuPXtwYXJhbXM6VzRlKEhlLGNlKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxh''@;'; put 'put ''eX0sb249WT9bXTpFcSh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLGEsYyxBZSxYZSxwbixQLEopO2xldCBnbj0wO3JldHVybiBvbi5mb3JFYWNoKFpuPT57Z249TWF0aC5tYXgoWm4uZHVyYXRpb24rWm4uZGVsYXksZ24pfSksSi5sZW5ndGg/ejRlKGUsdGhpcy5fdHJpZ2dlck5hbWUscixpLEZ0''@;'; put 'put ''LEFlLFhlLFtdLFtdLGR0LGp0LGduLEopOihvbi5mb3JFYWNoKFpuPT57Y29uc3QgR3I9Wm4uZWxlbWVudCxFcj1NMihkdCxHcixuZXcgU2V0KTtabi5wcmVTdHlsZVByb3BzLmZvckVhY2goaXI9PkVyLmFkZChpcikpO2NvbnN0IFRyPU0yKGp0LEdyLG5ldyBTZXQpO1puLnBvc3RTdHlsZVBy''@;'; put 'put ''b3BzLmZvckVhY2goaXI9PlRyLmFkZChpcikpLEdyIT09ZSYmcnQuYWRkKEdyKX0pLHo0ZShlLHRoaXMuX3RyaWdnZXJOYW1lLHIsaSxGdCxBZSxYZSxvbixbLi4ucnQudmFsdWVzKCldLGR0LGp0LGduKSl9fWZ1bmN0aW9uIFc0ZShuLHQpe2NvbnN0IGU9ey4uLnR9O3JldHVybiBPYmplY3Qu''@;'; put 'put ''ZW50cmllcyhuKS5mb3JFYWNoKChbcixpXSk9PntudWxsIT1pJiYoZVtyXT1pKX0pLGV9Y2xhc3MgRm50e3N0eWxlcztkZWZhdWx0UGFyYW1zO25vcm1hbGl6ZXI7Y29uc3RydWN0b3IodCxlLHIpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWUsdGhpcy5ub3JtYWxpemVyPXJ9''@;'; put 'put ''YnVpbGRTdHlsZXModCxlKXtjb25zdCByPW5ldyBNYXAsaT1XNGUodCx0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiB0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChhPT57InN0cmluZyIhPXR5cGVvZiBhJiZhLmZvckVhY2goKGMsbSk9PntjJiYoYz1rQShjLGksZSkpO2NvbnN0IEM9dGhp''@;'; put 'put ''cy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShtLGUpO2M9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUobSxDLGMsZSksci5zZXQobSxjKX0pfSkscn19Y2xhc3MgTm50e25hbWU7YXN0O19ub3JtYWxpemVyO3RyYW5zaXRpb25GYWN0b3JpZXM9W107ZmFsbGJh''@;'; put 'put ''Y2tUcmFuc2l0aW9uO3N0YXRlcz1uZXcgTWFwO2NvbnN0cnVjdG9yKHQsZSxyKXt0aGlzLm5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX25vcm1hbGl6ZXI9cixlLnN0YXRlcy5mb3JFYWNoKGk9Pnt0aGlzLnN0YXRlcy5zZXQoaS5uYW1lLG5ldyBGbnQoaS5zdHlsZSxpLm9wdGlvbnMmJmkub3B0''@;'; put 'put ''aW9ucy5wYXJhbXN8fHt9LHIpKX0pLFo0ZSh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxaNGUodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChpPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IFU0ZSh0LGksdGhpcy5zdGF0ZXMpKX0pLHRo''@;'; put 'put ''aXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uIFZudChuLHQpe3JldHVybiBuZXcgVTRlKG4se3R5cGU6SW8uVHJhbnNpdGlvbixhbmltYXRpb246e3R5cGU6SW8uU2VxdWVuY2Usc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKGMsbSk9PiEwXSxvcHRpb25zOm51bGwscXVl''@;'; put 'put ''cnlDb3VudDowLGRlcENvdW50OjB9LHQpfSh0LHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24odCxlLHIsaSl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKGM9PmMubWF0Y2go''@;'; put 'put ''dCxlLHIsaSkpfHxudWxsfW1hdGNoU3R5bGVzKHQsZSxyKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLHIpfX1mdW5jdGlvbiBaNGUobix0LGUpe24uaGFzKHQpP24uaGFzKGUpfHxuLnNldChlLG4uZ2V0KHQpKTpuLmhhcyhlKSYmbi5zZXQodCxuLmdl''@;'; put 'put ''dChlKSl9Y29uc3QgQm50PW5ldyBVSDtjbGFzcyBqbnR7Ym9keU5vZGU7X2RyaXZlcjtfbm9ybWFsaXplcjtfYW5pbWF0aW9ucz1uZXcgTWFwO19wbGF5ZXJzQnlJZD1uZXcgTWFwO3BsYXllcnM9W107Y29uc3RydWN0b3IodCxlLHIpe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0''@;'; put 'put ''aGlzLl9ub3JtYWxpemVyPXJ9cmVnaXN0ZXIodCxlKXtjb25zdCByPVtdLGE9U3EodGhpcy5fZHJpdmVyLGUscixbXSk7aWYoci5sZW5ndGgpdGhyb3cgZnVuY3Rpb24genR0KCl7cmV0dXJuIG5ldyBrcigzNTAzLCExKX0oKTt0aGlzLl9hbmltYXRpb25zLnNldCh0LGEpfV9idWlsZFBsYXll''@;'; put 'put ''cih0LGUscil7Y29uc3QgaT10LmVsZW1lbnQsYT1UNGUodGhpcy5fbm9ybWFsaXplcix0LmtleWZyYW1lcyxlLHIpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShpLGEsdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLFtdLCEwKX1jcmVhdGUodCxlLHI9e30pe2NvbnN0IGk9W10sYT10''@;'; put 'put ''aGlzLl9hbmltYXRpb25zLmdldCh0KTtsZXQgYztjb25zdCBtPW5ldyBNYXA7aWYoYT8oYz1FcSh0aGlzLl9kcml2ZXIsZSxhLCJuZy1lbnRlciIsZnEsbmV3IE1hcCxuZXcgTWFwLHIsQm50LGkpLGMuZm9yRWFjaChZPT57Y29uc3QgSj1NMihtLFkuZWxlbWVudCxuZXcgTWFwKTtZLnBvc3RT''@;'; put 'put ''dHlsZVByb3BzLmZvckVhY2goY2U9Pkouc2V0KGNlLG51bGwpKX0pKTooaS5wdXNoKGZ1bmN0aW9uIFV0dCgpe3JldHVybiBuZXcga3IoMzMwMCwhMSl9KCkpLGM9W10pLGkubGVuZ3RoKXRocm93IGZ1bmN0aW9uIFd0dCgpe3JldHVybiBuZXcga3IoMzUwNCwhMSl9KCk7bS5mb3JFYWNoKChZ''@;'; put 'put ''LEopPT57WS5mb3JFYWNoKChjZSxmZSk9PntZLnNldChmZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKEosZmUsdDUpKX0pfSk7Y29uc3QgUD1HNihjLm1hcChZPT57Y29uc3QgSj1tLmdldChZLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihZLG5ldyBNYXAsSil9KSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldCh0LFApLFAub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kodCkpLHRoaXMucGxheWVycy5wdXNoKFApLFB9ZGVzdHJveSh0KXtjb25zdCBlPXRoaXMuX2dldFBsYXllcih0KTtlLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUodCk7''@;'; put 'put ''Y29uc3Qgcj10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtyPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKHIsMSl9X2dldFBsYXllcih0KXtjb25zdCBlPXRoaXMuX3BsYXllcnNCeUlkLmdldCh0KTtpZighZSl0aHJvdyBmdW5jdGlvbiBadHQoKXtyZXR1cm4gbmV3IGtyKDMzMDEsITEpfSgpO3Jl''@;'; put 'put ''dHVybiBlfWxpc3Rlbih0LGUscixpKXtjb25zdCBhPWRxKGUsIiIsIiIsIiIpO3JldHVybiBjcSh0aGlzLl9nZXRQbGF5ZXIodCkscixhLGkpLCgpPT57fX1jb21tYW5kKHQsZSxyLGkpe2lmKCJyZWdpc3RlciI9PXIpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3Rlcih0LGlbMF0pO2lmKCJjcmVh''@;'; put 'put ''dGUiPT1yKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKHQsZSxpWzBdfHx7fSk7Y29uc3QgYT10aGlzLl9nZXRQbGF5ZXIodCk7c3dpdGNoKHIpe2Nhc2UicGxheSI6YS5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6YS5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOmEucmVzZXQoKTticmVhaztj''@;'; put 'put ''YXNlInJlc3RhcnQiOmEucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjphLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6YS5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6YS5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGlbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVz''@;'; put 'put ''dHJveSh0KX19fWNvbnN0IFk0ZT0ibmctYW5pbWF0ZS1xdWV1ZWQiLGtxPSJuZy1hbmltYXRlLWRpc2FibGVkIixZbnQ9W10sRzRlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxH''@;'; put 'put ''bnQ9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LGlwPSJfX25nX3JlbW92ZWQiO2NsYXNzIERxe25hbWVzcGFjZUlkO3ZhbHVlO29wdGlvbnM7Z2V0IHBhcmFtcygpe3JldHVybiB0''@;'; put 'put ''aGlzLm9wdGlvbnMucGFyYW1zfWNvbnN0cnVjdG9yKHQsZT0iIil7dGhpcy5uYW1lc3BhY2VJZD1lO2NvbnN0IHI9dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uIHFudChuKXtyZXR1cm4gbj8/bnVsbH0ocj90LnZhbHVlOnQpLHIpe2NvbnN0e3Zh''@;'; put 'put ''bHVlOmEsLi4uY309dDt0aGlzLm9wdGlvbnM9Y31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyh0KXtjb25zdCBlPXQucGFyYW1zO2lmKGUpe2NvbnN0IHI9dGhpcy5vcHRpb25zLnBhcmFtcztP''@;'; put 'put ''YmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PntudWxsPT1yW2ldJiYocltpXT1lW2ldKX0pfX19Y29uc3QgREE9InZvaWQiLElxPW5ldyBEcShEQSk7Y2xhc3MgJG50e2lkO2hvc3RFbGVtZW50O19lbmdpbmU7cGxheWVycz1bXTtfdHJpZ2dlcnM9bmV3IE1hcDtfcXVldWU9W107X2VsZW1lbnRM''@;'; put 'put ''aXN0ZW5lcnM9bmV3IE1hcDtfaG9zdENsYXNzTmFtZTtjb25zdHJ1Y3Rvcih0LGUscil7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9cix0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIit0LEJmKGUsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKHQsZSxy''@;'; put 'put ''LGkpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoZSkpdGhyb3cgZnVuY3Rpb24gWXR0KCl7cmV0dXJuIG5ldyBrcigzMzAyLCExKX0oKTtpZihudWxsPT1yfHwwPT1yLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBHdHQoKXtyZXR1cm4gbmV3IGtyKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiBKbnQo''@;'; put 'put ''bil7cmV0dXJuInN0YXJ0Ij09bnx8ImRvbmUiPT1ufShyKSl0aHJvdyBmdW5jdGlvbiAkdHQoKXtyZXR1cm4gbmV3IGtyKDM0MDAsITEpfSgpO2NvbnN0IGE9TTIodGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxjPXtuYW1lOmUscGhhc2U6cixjYWxsYmFjazppfTthLnB1c2goYyk7Y29u''@;'; put 'put ''c3QgbT1NMih0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQsbmV3IE1hcCk7cmV0dXJuIG0uaGFzKGUpfHwoQmYodCxISCksQmYodCxISCsiLSIrZSksbS5zZXQoZSxJcSkpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBDPWEuaW5kZXhPZihjKTtDPj0wJiZh''@;'; put 'put ''LnNwbGljZShDLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhlKXx8bS5kZWxldGUoZSl9KX19cmVnaXN0ZXIodCxlKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKHQpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KHQsZSksITApfV9nZXRUcmlnZ2VyKHQpe2NvbnN0IGU9dGhpcy5fdHJpZ2dlcnMuZ2V0''@;'; put 'put ''KHQpO2lmKCFlKXRocm93IGZ1bmN0aW9uIEt0dCgpe3JldHVybiBuZXcga3IoMzQwMSwhMSl9KCk7cmV0dXJuIGV9dHJpZ2dlcih0LGUscixpPSEwKXtjb25zdCBhPXRoaXMuX2dldFRyaWdnZXIoZSksYz1uZXcgUnEodGhpcy5pZCxlLHQpO2xldCBtPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVs''@;'; put 'put ''ZW1lbnQuZ2V0KHQpO218fChCZih0LEhIKSxCZih0LEhIKyItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LG09bmV3IE1hcCkpO2xldCBDPW0uZ2V0KGUpO2NvbnN0IFA9bmV3IERxKHIsdGhpcy5pZCk7aWYoIShyJiZyLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYm''@;'; put 'put ''QyYmUC5hYnNvcmJPcHRpb25zKEMub3B0aW9ucyksbS5zZXQoZSxQKSxDfHwoQz1JcSksUC52YWx1ZSE9PURBJiZDLnZhbHVlPT09UC52YWx1ZSl7aWYoIWZ1bmN0aW9uIHRydChuLHQpe2NvbnN0IGU9T2JqZWN0LmtleXMobikscj1PYmplY3Qua2V5cyh0KTtpZihlLmxlbmd0aCE9ci5sZW5n''@;'; put 'put ''dGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IGE9ZVtpXTtpZighdC5oYXNPd25Qcm9wZXJ0eShhKXx8blthXSE9PXRbYV0pcmV0dXJuITF9cmV0dXJuITB9KEMucGFyYW1zLFAucGFyYW1zKSl7Y29uc3QgSGU9W10sWGU9YS5tYXRjaFN0eWxlcyhDLnZhbHVl''@;'; put 'put ''LEMucGFyYW1zLEhlKSxydD1hLm1hdGNoU3R5bGVzKFAudmFsdWUsUC5wYXJhbXMsSGUpO0hlLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IoSGUpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57RXYodCxYZSksXzQodCxydCl9KX1yZXR1cm59Y29uc3QgY2U9TTIodGhpcy5f''@;'; put 'put ''ZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsdCxbXSk7Y2UuZm9yRWFjaChIZT0+e0hlLm5hbWVzcGFjZUlkPT10aGlzLmlkJiZIZS50cmlnZ2VyTmFtZT09ZSYmSGUucXVldWVkJiZIZS5kZXN0cm95KCl9KTtsZXQgZmU9YS5tYXRjaFRyYW5zaXRpb24oQy52YWx1ZSxQLnZhbHVlLHQsUC5wYXJh''@;'; put 'put ''bXMpLEFlPSExO2lmKCFmZSl7aWYoIWkpcmV0dXJuO2ZlPWEuZmFsbGJhY2tUcmFuc2l0aW9uLEFlPSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsdHJhbnNpdGlvbjpmZSxmcm9tU3Rh''@;'; put 'put ''dGU6Qyx0b1N0YXRlOlAscGxheWVyOmMsaXNGYWxsYmFja1RyYW5zaXRpb246QWV9KSxBZXx8KEJmKHQsWTRlKSxjLm9uU3RhcnQoKCk9PntzQyh0LFk0ZSl9KSksYy5vbkRvbmUoKCk9PntsZXQgSGU9dGhpcy5wbGF5ZXJzLmluZGV4T2YoYyk7SGU+PTAmJnRoaXMucGxheWVycy5zcGxpY2Uo''@;'; put 'put ''SGUsMSk7Y29uc3QgWGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKFhlKXtsZXQgcnQ9WGUuaW5kZXhPZihjKTtydD49MCYmWGUuc3BsaWNlKHJ0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKGMpLGNlLnB1c2goYyksY31kZXJlZ2lzdGVyKHQpe3RoaXMuX3RyaWdn''@;'; put 'put ''ZXJzLmRlbGV0ZSh0KSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goZT0+ZS5kZWxldGUodCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZSxyKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KHIsZS5maWx0ZXIoaT0+aS5uYW1lIT10KSl9KX1jbGVh''@;'; put 'put ''ckVsZW1lbnRDYWNoZSh0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTtjb25zdCBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKHI9PnIuZGVzdHJveSgpKSx0''@;'; put 'put ''aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2NvbnN0IHI9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LE5ILCEwKTtyLmZvckVhY2goaT0+e2lmKGlbaXBdKXJldHVybjtjb25zdCBhPXRoaXMuX2Vu''@;'; put 'put ''Z2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaSk7YS5zaXplP2EuZm9yRWFjaChjPT5jLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihpLGUsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGkpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+ci5mb3JF''@;'; put 'put ''YWNoKGk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaSkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLHIsaSl7Y29uc3QgYT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KSxjPW5ldyBNYXA7aWYoYSl7Y29uc3QgbT1bXTtpZihhLmZvckVhY2goKEMsUCk9PntpZihjLnNl''@;'; put 'put ''dChQLEMudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhQKSl7Y29uc3QgWT10aGlzLnRyaWdnZXIodCxQLERBLGkpO1kmJm0ucHVzaChZKX19KSxtLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMCxlLGMpLHImJkc2KG0pLm9uRG9u''@;'; put 'put ''ZSgoKT0+dGhpcy5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUodCkpLCEwfXJldHVybiExfXByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KXtjb25zdCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLHI9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYo''@;'; put 'put ''ZSYmcil7Y29uc3QgaT1uZXcgU2V0O2UuZm9yRWFjaChhPT57Y29uc3QgYz1hLm5hbWU7aWYoaS5oYXMoYykpcmV0dXJuO2kuYWRkKGMpO2NvbnN0IEM9dGhpcy5fdHJpZ2dlcnMuZ2V0KGMpLmZhbGxiYWNrVHJhbnNpdGlvbixQPXIuZ2V0KGMpfHxJcSxZPW5ldyBEcShEQSksSj1uZXcgUnEo''@;'; put 'put ''dGhpcy5pZCxjLHQpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6Yyx0cmFuc2l0aW9uOkMsZnJvbVN0YXRlOlAsdG9TdGF0ZTpZLHBsYXllcjpKLGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVt''@;'; put 'put ''b3ZlTm9kZSh0LGUpe2NvbnN0IHI9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSlyZXR1cm47bGV0IGk9ITE7aWYoci50b3RhbEFuaW1h''@;'; put 'put ''dGlvbnMpe2NvbnN0IGE9ci5wbGF5ZXJzLmxlbmd0aD9yLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTpbXTtpZihhJiZhLmxlbmd0aClpPSEwO2Vsc2V7bGV0IGM9dDtmb3IoO2M9Yy5wYXJlbnROb2RlOylpZihyLnN0YXRlc0J5RWxlbWVudC5nZXQoYykpe2k9ITA7YnJlYWt9fX1p''@;'; put 'put ''Zih0aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxpKXIubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpO2Vsc2V7Y29uc3QgYT10W2lwXTsoIWF8fGE9PT1HNGUpJiYoci5hZnRlckZsdXNoKCgpPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHQpKSxyLmRl''@;'; put 'put ''c3Ryb3lJbm5lckFuaW1hdGlvbnModCksci5fb25SZW1vdmFsQ29tcGxldGUodCxlKSl9fWluc2VydE5vZGUodCxlKXtCZih0LHRoaXMuX2hvc3RDbGFzc05hbWUpfWRyYWluUXVldWVkVHJhbnNpdGlvbnModCl7Y29uc3QgZT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChyPT57Y29u''@;'; put 'put ''c3QgaT1yLnBsYXllcjtpZihpLmRlc3Ryb3llZClyZXR1cm47Y29uc3QgYT1yLmVsZW1lbnQsYz10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChhKTtjJiZjLmZvckVhY2gobT0+e2lmKG0ubmFtZT09ci50cmlnZ2VyTmFtZSl7Y29uc3QgQz1kcShhLHIudHJpZ2dlck5hbWUsci5mcm9tU3Rh''@;'; put 'put ''dGUudmFsdWUsci50b1N0YXRlLnZhbHVlKTtDLl9kYXRhPXQsY3Eoci5wbGF5ZXIsbS5waGFzZSxDLG0uY2FsbGJhY2spfX0pLGkubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2kuZGVzdHJveSgpfSk6ZS5wdXNoKHIpfSksdGhpcy5fcXVldWU9W10sZS5z''@;'; put 'put ''b3J0KChyLGkpPT57Y29uc3QgYT1yLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LGM9aS50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09YXx8MD09Yz9hLWM6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoci5lbGVtZW50LGkuZWxlbWVudCk/MTotMX0pfWRlc3Ry''@;'; put 'put ''b3kodCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9fWNsYXNzIEtudHtib2R5Tm9kZTtkcml2ZXI7X25vcm1hbGl6ZXI7cGxheWVycz1bXTtuZXdIb3N0RWxlbWVudHM9''@;'; put 'put ''bmV3IE1hcDtwbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXA7cGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcDtzdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcDtkaXNhYmxlZE5vZGVzPW5ldyBTZXQ7dG90YWxBbmltYXRpb25zPTA7dG90YWxRdWV1ZWRQbGF5ZXJzPTA7X25hbWVzcGFjZUxvb2t1''@;'; put 'put ''cD17fTtfbmFtZXNwYWNlTGlzdD1bXTtfZmx1c2hGbnM9W107X3doZW5RdWlldEZucz1bXTtuYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwO2NvbGxlY3RlZEVudGVyRWxlbWVudHM9W107Y29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXTtvblJlbW92YWxDb21wbGV0ZT0odCxlKT0+e307''@;'; put 'put ''X29uUmVtb3ZhbENvbXBsZXRlKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfWNvbnN0cnVjdG9yKHQsZSxyKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPXJ9Z2V0IHF1ZXVlZFBsYXllcnMoKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLl9u''@;'; put 'put ''YW1lc3BhY2VMaXN0LmZvckVhY2goZT0+e2UucGxheWVycy5mb3JFYWNoKHI9PntyLnF1ZXVlZCYmdC5wdXNoKHIpfSl9KSx0fWNyZWF0ZU5hbWVzcGFjZSh0LGUpe2NvbnN0IHI9bmV3ICRudCh0LGUsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJpdmVyLmNvbnRhaW5zRWxl''@;'; put 'put ''bWVudCh0aGlzLmJvZHlOb2RlLGUpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KHIsZSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChlLHIpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdPXJ9X2JhbGFuY2VOYW1lc3BhY2VMaXN0KHQs''@;'; put 'put ''ZSl7Y29uc3Qgcj10aGlzLl9uYW1lc3BhY2VMaXN0LGk9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihyLmxlbmd0aC0xPj0wKXtsZXQgYz0hMSxtPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoZSk7Zm9yKDttOyl7Y29uc3QgQz1pLmdldChtKTtpZihDKXtjb25zdCBQPXIu''@;'; put 'put ''aW5kZXhPZihDKTtyLnNwbGljZShQKzEsMCx0KSxjPSEwO2JyZWFrfW09dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChtKX1jfHxyLnVuc2hpZnQodCl9ZWxzZSByLnB1c2godCk7cmV0dXJuIGkuc2V0KGUsdCksdH1yZWdpc3Rlcih0LGUpe2xldCByPXRoaXMuX25hbWVzcGFjZUxvb2t1''@;'; put 'put ''cFt0XTtyZXR1cm4gcnx8KHI9dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSkscn1yZWdpc3RlclRyaWdnZXIodCxlLHIpe2xldCBpPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtpJiZpLnJlZ2lzdGVyKGUscikmJnRoaXMudG90YWxBbmltYXRpb25zKyt9ZGVzdHJveSh0LGUpe3QmJih0aGlz''@;'; put 'put ''LmFmdGVyRmx1c2goKCk9Pnt9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e2NvbnN0IHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoci5ob3N0RWxlbWVudCk7Y29uc3QgaT10aGlzLl9uYW1lc3BhY2VMaXN0''@;'; put 'put ''LmluZGV4T2Yocik7aT49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaSwxKSxyLmRlc3Ryb3koZSksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX0pKX1fZmV0Y2hOYW1lc3BhY2UodCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX1mZXRjaE5hbWVzcGFjZXNC''@;'; put 'put ''eUVsZW1lbnQodCl7Y29uc3QgZT1uZXcgU2V0LHI9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKHIpZm9yKGxldCBpIG9mIHIudmFsdWVzKCkpaWYoaS5uYW1lc3BhY2VJZCl7Y29uc3QgYT10aGlzLl9mZXRjaE5hbWVzcGFjZShpLm5hbWVzcGFjZUlkKTthJiZlLmFkZChhKX1yZXR1''@;'; put 'put ''cm4gZX10cmlnZ2VyKHQsZSxyLGkpe2lmKFlIKGUpKXtjb25zdCBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKGEpcmV0dXJuIGEudHJpZ2dlcihlLHIsaSksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZSh0LGUscixpKXtpZighWUgoZSkpcmV0dXJuO2NvbnN0IGE9ZVtpcF07aWYoYSYmYS5z''@;'; put 'put ''ZXRGb3JSZW1vdmFsKXthLnNldEZvclJlbW92YWw9ITEsYS5zZXRGb3JNb3ZlPSEwO2NvbnN0IGM9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmluZGV4T2YoZSk7Yz49MCYmdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnNwbGljZShjLDEpfWlmKHQpe2NvbnN0IGM9dGhpcy5fZmV0''@;'; put 'put ''Y2hOYW1lc3BhY2UodCk7YyYmYy5pbnNlcnROb2RlKGUscil9aSYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfWNvbGxlY3RFbnRlckVsZW1lbnQodCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2godCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl7ZT90aGlzLmRpc2Fi''@;'; put 'put ''bGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxCZih0LGtxKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksc0ModCxrcSkpfXJlbW92ZU5vZGUodCxlLHIpe2lmKFlIKGUpKXtjb25zdCBpPXQ/dGhpcy5f''@;'; put 'put ''ZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpP2kucmVtb3ZlTm9kZShlLHIpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLHIpO2NvbnN0IGE9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoZSk7YSYmYS5pZCE9PXQmJmEucmVtb3ZlTm9kZShlLHIpfWVsc2UgdGhpcy5f''@;'; put 'put ''b25SZW1vdmFsQ29tcGxldGUoZSxyKX1tYXJrRWxlbWVudEFzUmVtb3ZlZCh0LGUscixpLGEpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGUpLGVbaXBdPXtuYW1lc3BhY2VJZDp0LHNldEZvclJlbW92YWw6aSxoYXNBbmltYXRpb246cixyZW1vdmVkQmVmb3JlUXVlcmllZDoh''@;'; put 'put ''MSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOmF9fWxpc3Rlbih0LGUscixpLGEpe3JldHVybiBZSChlKT90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5saXN0ZW4oZSxyLGksYSk6KCk9Pnt9fV9idWlsZEluc3RydWN0aW9uKHQsZSxyLGksYSl7cmV0dXJuIHQudHJhbnNpdGlvbi5idWlsZCh0aGlz''@;'; put 'put ''LmRyaXZlcix0LmVsZW1lbnQsdC5mcm9tU3RhdGUudmFsdWUsdC50b1N0YXRlLnZhbHVlLHIsaSx0LmZyb21TdGF0ZS5vcHRpb25zLHQudG9TdGF0ZS5vcHRpb25zLGUsYSl9ZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KXtsZXQgZT10aGlzLmRyaXZlci5xdWVyeSh0LE5ILCEwKTtlLmZvckVh''@;'; put 'put ''Y2gocj0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQocikpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGU9dGhpcy5kcml2ZXIucXVlcnkodCxwcSwhMCksZS5mb3JFYWNoKHI9PnRoaXMuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9u''@;'; put 'put ''RWxlbWVudChyKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KXtjb25zdCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKHI9PntyLnF1ZXVlZD9yLm1hcmtlZEZvckRlc3Ryb3k9ITA6ci5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVRdWVy''@;'; put 'put ''aWVkQW5pbWF0aW9uT25FbGVtZW50KHQpe2NvbnN0IGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKHI9PnIuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntpZih0aGlzLnBsYXllcnMubGVuZ3RoKXJl''@;'; put 'put ''dHVybiBHNih0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+dCgpKTt0KCl9KX1wcm9jZXNzTGVhdmVOb2RlKHQpe2NvbnN0IGU9dFtpcF07aWYoZSYmZS5zZXRGb3JSZW1vdmFsKXtpZih0W2lwXT1HNGUsZS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO2NvbnN0''@;'; put 'put ''IHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoZS5uYW1lc3BhY2VJZCk7ciYmci5jbGVhckVsZW1lbnRDYWNoZSh0KX10aGlzLl9vblJlbW92YWxDb21wbGV0ZSh0LGUuc2V0Rm9yUmVtb3ZhbCl9dC5jbGFzc0xpc3Q/LmNvbnRhaW5zKGtxKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwh''@;'; put 'put ''MSksdGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKHI9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChyLCExKX0pfWZsdXNoKHQ9LTEpe2xldCBlPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RFbGVt''@;'; put 'put ''ZW50cy5mb3JFYWNoKChyLGkpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChyLGkpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IobGV0IHI9MDtyPHRoaXMuY29sbGVj''@;'; put 'put ''dGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7cisrKUJmKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tyXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50''@;'; put 'put ''cy5sZW5ndGgpKXtjb25zdCByPVtdO3RyeXtlPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhyLHQpfWZpbmFsbHl7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspcltpXSgpfX1lbHNlIGZvcihsZXQgcj0wO3I8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtyKyspdGhpcy5wcm9j''@;'; put 'put ''ZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tyXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZv''@;'; put 'put ''ckVhY2gocj0+cigpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCByPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sZS5sZW5ndGg/RzYoZSkub25Eb25lKCgpPT57ci5mb3JFYWNoKGk9PmkoKSl9KTpyLmZvckVhY2go''@;'; put 'put ''aT0+aSgpKX19cmVwb3J0RXJyb3IodCl7dGhyb3cgZnVuY3Rpb24gWHR0KCl7cmV0dXJuIG5ldyBrcigzNDAyLCExKX0oKX1fZmx1c2hBbmltYXRpb25zKHQsZSl7Y29uc3Qgcj1uZXcgVUgsaT1bXSxhPW5ldyBNYXAsYz1bXSxtPW5ldyBNYXAsQz1uZXcgTWFwLFA9bmV3IE1hcCxZPW5ldyBT''@;'; put 'put ''ZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZXI9PntZLmFkZChlcik7Y29uc3QgRHI9dGhpcy5kcml2ZXIucXVlcnkoZXIsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgWnI9MDtacjxEci5sZW5ndGg7WnIrKylZLmFkZChEcltacl0pfSk7Y29uc3QgSj10aGlzLmJvZHlO''@;'; put 'put ''b2RlLGNlPUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVsZW1lbnQua2V5cygpKSxmZT1YNGUoY2UsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSxBZT1uZXcgTWFwO2xldCBIZT0wO2ZlLmZvckVhY2goKGVyLERyKT0+e2NvbnN0IFpyPSJuZy1lbnRlciIrSGUrKztBZS5zZXQoRHIsWnIp''@;'; put 'put ''LGVyLmZvckVhY2goYmk9PkJmKGJpLFpyKSl9KTtjb25zdCBYZT1bXSxydD1uZXcgU2V0LGR0PW5ldyBTZXQ7Zm9yKGxldCBlcj0wO2VyPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7ZXIrKyl7Y29uc3QgRHI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2VyXSxacj1E''@;'; put 'put ''cltpcF07WnImJlpyLnNldEZvclJlbW92YWwmJihYZS5wdXNoKERyKSxydC5hZGQoRHIpLFpyLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShEciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGJpPT5ydC5hZGQoYmkpKTpkdC5hZGQoRHIpKX1jb25zdCBqdD1uZXcgTWFw''@;'; put 'put ''LEZ0PVg0ZShjZSxBcnJheS5mcm9tKHJ0KSk7RnQuZm9yRWFjaCgoZXIsRHIpPT57Y29uc3QgWnI9ZnErSGUrKztqdC5zZXQoRHIsWnIpLGVyLmZvckVhY2goYmk9PkJmKGJpLFpyKSl9KSx0LnB1c2goKCk9PntmZS5mb3JFYWNoKChlcixEcik9Pntjb25zdCBacj1BZS5nZXQoRHIpO2VyLmZv''@;'; put 'put ''ckVhY2goYmk9PnNDKGJpLFpyKSl9KSxGdC5mb3JFYWNoKChlcixEcik9Pntjb25zdCBacj1qdC5nZXQoRHIpO2VyLmZvckVhY2goYmk9PnNDKGJpLFpyKSl9KSxYZS5mb3JFYWNoKGVyPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGVyKX0pfSk7Y29uc3QgcG49W10sb249W107Zm9yKGxldCBl''@;'; put 'put ''cj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO2VyPj0wO2VyLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtlcl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhlKS5mb3JFYWNoKFpyPT57Y29uc3QgYmk9WnIucGxheWVyLFNpPVpyLmVsZW1lbnQ7aWYocG4ucHVzaChiaSksdGhpcy5jb2xsZWN0''@;'; put 'put ''ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgVXQ9U2lbaXBdO2lmKFV0JiZVdC5zZXRGb3JNb3ZlKXtpZihVdC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZVdC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcyhaci50cmlnZ2VyTmFtZSkpe2NvbnN0IEVuPVV0LnByZXZpb3VzVHJpZ2dl''@;'; put 'put ''cnNWYWx1ZXMuZ2V0KFpyLnRyaWdnZXJOYW1lKSxhcj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoWnIuZWxlbWVudCk7aWYoYXImJmFyLmhhcyhaci50cmlnZ2VyTmFtZSkpe2NvbnN0IEV0PWFyLmdldChaci50cmlnZ2VyTmFtZSk7RXQudmFsdWU9RW4sYXIuc2V0KFpyLnRyaWdnZXJOYW1l''@;'; put 'put ''LEV0KX19cmV0dXJuIHZvaWQgYmkuZGVzdHJveSgpfX1jb25zdCBqcj0hSnx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChKLFNpKSxUaT1qdC5nZXQoU2kpLGxhPUFlLmdldChTaSksRnI9dGhpcy5fYnVpbGRJbnN0cnVjdGlvbihacixyLGxhLFRpLGpyKTtpZihGci5lcnJvcnMmJkZy''@;'; put 'put ''LmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgb24ucHVzaChGcik7aWYoanIpcmV0dXJuIGJpLm9uU3RhcnQoKCk9PkV2KFNpLEZyLmZyb21TdHlsZXMpKSxiaS5vbkRlc3Ryb3koKCk9Pl80KFNpLEZyLnRvU3R5bGVzKSksdm9pZCBpLnB1c2goYmkpO2lmKFpyLmlzRmFsbGJhY2tUcmFuc2l0''@;'; put 'put ''aW9uKXJldHVybiBiaS5vblN0YXJ0KCgpPT5FdihTaSxGci5mcm9tU3R5bGVzKSksYmkub25EZXN0cm95KCgpPT5fNChTaSxGci50b1N0eWxlcykpLHZvaWQgaS5wdXNoKGJpKTtjb25zdCBvdD1bXTtGci50aW1lbGluZXMuZm9yRWFjaChVdD0+e1V0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1l''@;'; put 'put ''PSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMoVXQuZWxlbWVudCl8fG90LnB1c2goVXQpfSksRnIudGltZWxpbmVzPW90LHIuYXBwZW5kKFNpLEZyLnRpbWVsaW5lcyksYy5wdXNoKHtpbnN0cnVjdGlvbjpGcixwbGF5ZXI6YmksZWxlbWVudDpTaX0pLEZyLnF1ZXJpZWRFbGVtZW50cy5mb3JF''@;'; put 'put ''YWNoKFV0PT5NMihtLFV0LFtdKS5wdXNoKGJpKSksRnIucHJlU3R5bGVQcm9wcy5mb3JFYWNoKChVdCxFbik9PntpZihVdC5zaXplKXtsZXQgYXI9Qy5nZXQoRW4pO2FyfHxDLnNldChFbixhcj1uZXcgU2V0KSxVdC5mb3JFYWNoKChFdCxadCk9PmFyLmFkZChadCkpfX0pLEZyLnBvc3RTdHls''@;'; put 'put ''ZVByb3BzLmZvckVhY2goKFV0LEVuKT0+e2xldCBhcj1QLmdldChFbik7YXJ8fFAuc2V0KEVuLGFyPW5ldyBTZXQpLFV0LmZvckVhY2goKEV0LFp0KT0+YXIuYWRkKFp0KSl9KX0pO2lmKG9uLmxlbmd0aCl7Y29uc3QgZXI9W107b24uZm9yRWFjaChEcj0+e2VyLnB1c2goZnVuY3Rpb24gcXR0''@;'; put 'put ''KCl7cmV0dXJuIG5ldyBrcigzNTA1LCExKX0oKSl9KSxwbi5mb3JFYWNoKERyPT5Eci5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoZXIpfWNvbnN0IGduPW5ldyBNYXAsWm49bmV3IE1hcDtjLmZvckVhY2goZXI9Pntjb25zdCBEcj1lci5lbGVtZW50O3IuaGFzKERyKSYmKFpuLnNldChE''@;'; put 'put ''cixEciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoZXIucGxheWVyLm5hbWVzcGFjZUlkLGVyLmluc3RydWN0aW9uLGduKSl9KSxpLmZvckVhY2goZXI9Pntjb25zdCBEcj1lci5lbGVtZW50O3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhEciwhMSxlci5uYW1lc3BhY2VJZCxlci50cmln''@;'; put 'put ''Z2VyTmFtZSxudWxsKS5mb3JFYWNoKGJpPT57TTIoZ24sRHIsW10pLnB1c2goYmkpLGJpLmRlc3Ryb3koKX0pfSk7Y29uc3QgR3I9WGUuZmlsdGVyKGVyPT5KNGUoZXIsQyxQKSksRXI9bmV3IE1hcDtLNGUoRXIsdGhpcy5kcml2ZXIsZHQsUCx0NSkuZm9yRWFjaChlcj0+e0o0ZShlcixDLFAp''@;'; put 'put ''JiZHci5wdXNoKGVyKX0pO2NvbnN0IGlyPW5ldyBNYXA7ZmUuZm9yRWFjaCgoZXIsRHIpPT57SzRlKGlyLHRoaXMuZHJpdmVyLG5ldyBTZXQoZXIpLEMsIiEiKX0pLEdyLmZvckVhY2goZXI9Pntjb25zdCBEcj1Fci5nZXQoZXIpLFpyPWlyLmdldChlcik7RXIuc2V0KGVyLG5ldyBNYXAoWy4u''@;'; put 'put ''LkRyPy5lbnRyaWVzKCk/P1tdLC4uLlpyPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3QgcGk9W10sRG49W10sQXI9e307Yy5mb3JFYWNoKGVyPT57Y29uc3R7ZWxlbWVudDpEcixwbGF5ZXI6WnIsaW5zdHJ1Y3Rpb246Yml9PWVyO2lmKHIuaGFzKERyKSl7aWYoWS5oYXMoRHIpKXJldHVybiBa''@;'; put 'put ''ci5vbkRlc3Ryb3koKCk9Pl80KERyLGJpLnRvU3R5bGVzKSksWnIuZGlzYWJsZWQ9ITAsWnIub3ZlcnJpZGVUb3RhbFRpbWUoYmkudG90YWxUaW1lKSx2b2lkIGkucHVzaChacik7bGV0IFNpPUFyO2lmKFpuLnNpemU+MSl7bGV0IFRpPURyO2NvbnN0IGxhPVtdO2Zvcig7VGk9VGkucGFyZW50''@;'; put 'put ''Tm9kZTspe2NvbnN0IEZyPVpuLmdldChUaSk7aWYoRnIpe1NpPUZyO2JyZWFrfWxhLnB1c2goVGkpfWxhLmZvckVhY2goRnI9PlpuLnNldChGcixTaSkpfWNvbnN0IGpyPXRoaXMuX2J1aWxkQW5pbWF0aW9uKFpyLm5hbWVzcGFjZUlkLGJpLGduLGEsaXIsRXIpO2lmKFpyLnNldFJlYWxQbGF5''@;'; put 'put ''ZXIoanIpLFNpPT09QXIpcGkucHVzaChacik7ZWxzZXtjb25zdCBUaT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KFNpKTtUaSYmVGkubGVuZ3RoJiYoWnIucGFyZW50UGxheWVyPUc2KFRpKSksaS5wdXNoKFpyKX19ZWxzZSBFdihEcixiaS5mcm9tU3R5bGVzKSxaci5vbkRlc3Ryb3koKCk9''@;'; put 'put ''Pl80KERyLGJpLnRvU3R5bGVzKSksRG4ucHVzaChaciksWS5oYXMoRHIpJiZpLnB1c2goWnIpfSksRG4uZm9yRWFjaChlcj0+e2NvbnN0IERyPWEuZ2V0KGVyLmVsZW1lbnQpO2lmKERyJiZEci5sZW5ndGgpe2NvbnN0IFpyPUc2KERyKTtlci5zZXRSZWFsUGxheWVyKFpyKX19KSxpLmZvckVh''@;'; put 'put ''Y2goZXI9Pntlci5wYXJlbnRQbGF5ZXI/ZXIuc3luY1BsYXllckV2ZW50cyhlci5wYXJlbnRQbGF5ZXIpOmVyLmRlc3Ryb3koKX0pO2ZvcihsZXQgZXI9MDtlcjxYZS5sZW5ndGg7ZXIrKyl7Y29uc3QgRHI9WGVbZXJdLFpyPURyW2lwXTtpZihzQyhEcixmcSksWnImJlpyLmhhc0FuaW1hdGlv''@;'; put 'put ''biljb250aW51ZTtsZXQgYmk9W107aWYobS5zaXplKXtsZXQganI9bS5nZXQoRHIpO2pyJiZqci5sZW5ndGgmJmJpLnB1c2goLi4uanIpO2xldCBUaT10aGlzLmRyaXZlci5xdWVyeShEcixwcSwhMCk7Zm9yKGxldCBsYT0wO2xhPFRpLmxlbmd0aDtsYSsrKXtsZXQgRnI9bS5nZXQoVGlbbGFd''@;'; put 'put ''KTtGciYmRnIubGVuZ3RoJiZiaS5wdXNoKC4uLkZyKX19Y29uc3QgU2k9YmkuZmlsdGVyKGpyPT4hanIuZGVzdHJveWVkKTtTaS5sZW5ndGg/UW50KHRoaXMsRHIsU2kpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShEcil9cmV0dXJuIFhlLmxlbmd0aD0wLHBpLmZvckVhY2goZXI9Pnt0aGlzLnBs''@;'; put 'put ''YXllcnMucHVzaChlciksZXIub25Eb25lKCgpPT57ZXIuZGVzdHJveSgpO2NvbnN0IERyPXRoaXMucGxheWVycy5pbmRleE9mKGVyKTt0aGlzLnBsYXllcnMuc3BsaWNlKERyLDEpfSksZXIucGxheSgpfSkscGl9YWZ0ZXJGbHVzaCh0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfWFmdGVyRmx1''@;'; put 'put ''c2hBbmltYXRpb25zRG9uZSh0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX1fZ2V0UHJldmlvdXNQbGF5ZXJzKHQsZSxyLGksYSl7bGV0IGM9W107aWYoZSl7Y29uc3QgbT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTttJiYoYz1tKX1lbHNle2NvbnN0IG09dGhpcy5w''@;'; put 'put ''bGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihtKXtjb25zdCBDPSFhfHxhPT1EQTttLmZvckVhY2goUD0+e1AucXVldWVkfHwhQyYmUC50cmlnZ2VyTmFtZSE9aXx8Yy5wdXNoKFApfSl9fXJldHVybihyfHxpKSYmKGM9Yy5maWx0ZXIobT0+IShyJiZyIT1tLm5hbWVzcGFjZUlkfHxpJiZpIT1t''@;'; put 'put ''LnRyaWdnZXJOYW1lKSkpLGN9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQsZSxyKXtjb25zdCBhPWUuZWxlbWVudCxjPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxtPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgQyBvZiBlLnRpbWVs''@;'; put 'put ''aW5lcyl7Y29uc3QgUD1DLmVsZW1lbnQsWT1QIT09YSxKPU0yKHIsUCxbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKFAsWSxjLG0sZS50b1N0YXRlKS5mb3JFYWNoKGZlPT57Y29uc3QgQWU9ZmUuZ2V0UmVhbFBsYXllcigpO0FlLmJlZm9yZURlc3Ryb3kmJkFlLmJlZm9yZURlc3Ryb3ko''@;'; put 'put ''KSxmZS5kZXN0cm95KCksSi5wdXNoKGZlKX0pfUV2KGEsZS5mcm9tU3R5bGVzKX1fYnVpbGRBbmltYXRpb24odCxlLHIsaSxhLGMpe2NvbnN0IG09ZS50cmlnZ2VyTmFtZSxDPWUuZWxlbWVudCxQPVtdLFk9bmV3IFNldCxKPW5ldyBTZXQsY2U9ZS50aW1lbGluZXMubWFwKEFlPT57Y29uc3Qg''@;'; put 'put ''SGU9QWUuZWxlbWVudDtZLmFkZChIZSk7Y29uc3QgWGU9SGVbaXBdO2lmKFhlJiZYZS5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IFpUKEFlLmR1cmF0aW9uLEFlLmRlbGF5KTtjb25zdCBydD1IZSE9PUMsZHQ9ZnVuY3Rpb24gZXJ0KG4pe2NvbnN0IHQ9W107cmV0dXJuIHE0ZShu''@;'; put 'put ''LHQpLHR9KChyLmdldChIZSl8fFludCkubWFwKGduPT5nbi5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoZ249PiEhZ24uZWxlbWVudCYmZ24uZWxlbWVudD09PUhlKSxqdD1hLmdldChIZSksRnQ9Yy5nZXQoSGUpLHBuPVQ0ZSh0aGlzLl9ub3JtYWxpemVyLEFlLmtleWZyYW1lcyxqdCxGdCks''@;'; put 'put ''b249dGhpcy5fYnVpbGRQbGF5ZXIoQWUscG4sZHQpO2lmKEFlLnN1YlRpbWVsaW5lJiZpJiZKLmFkZChIZSkscnQpe2NvbnN0IGduPW5ldyBScSh0LG0sSGUpO2duLnNldFJlYWxQbGF5ZXIob24pLFAucHVzaChnbil9cmV0dXJuIG9ufSk7UC5mb3JFYWNoKEFlPT57TTIodGhpcy5wbGF5ZXJz''@;'; put 'put ''QnlRdWVyaWVkRWxlbWVudCxBZS5lbGVtZW50LFtdKS5wdXNoKEFlKSxBZS5vbkRvbmUoKCk9PmZ1bmN0aW9uIFhudChuLHQsZSl7bGV0IHI9bi5nZXQodCk7aWYocil7aWYoci5sZW5ndGgpe2NvbnN0IGk9ci5pbmRleE9mKGUpO3Iuc3BsaWNlKGksMSl9MD09ci5sZW5ndGgmJm4uZGVsZXRl''@;'; put 'put ''KHQpfXJldHVybiByfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEFlLmVsZW1lbnQsQWUpKX0pLFkuZm9yRWFjaChBZT0+QmYoQWUsTzRlKSk7Y29uc3QgZmU9RzYoY2UpO3JldHVybiBmZS5vbkRlc3Ryb3koKCk9PntZLmZvckVhY2goQWU9PnNDKEFlLE80ZSkpLF80KEMsZS50b1N0''@;'; put 'put ''eWxlcyl9KSxKLmZvckVhY2goQWU9PntNMihpLEFlLFtdKS5wdXNoKGZlKX0pLGZlfV9idWlsZFBsYXllcih0LGUscil7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcscik6bmV3IFpUKHQuZHVyYXRp''@;'; put 'put ''b24sdC5kZWxheSl9fWNsYXNzIFJxe25hbWVzcGFjZUlkO3RyaWdnZXJOYW1lO2VsZW1lbnQ7X3BsYXllcj1uZXcgWlQ7X2NvbnRhaW5zUmVhbFBsYXllcj0hMTtfcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXA7ZGVzdHJveWVkPSExO3BhcmVudFBsYXllcj1udWxsO21hcmtlZEZvckRlc3Ryb3k9''@;'; put 'put ''ITE7ZGlzYWJsZWQ9ITE7cXVldWVkPSEwO3RvdGFsVGltZT0wO2NvbnN0cnVjdG9yKHQsZSxyKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1yfXNldFJlYWxQbGF5ZXIodCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVy''@;'; put 'put ''PXQsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGUscik9PntlLmZvckVhY2goaT0+Y3EodCxyLHZvaWQgMCxpKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGlt''@;'; put 'put ''ZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtjb25zdCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KCgp''@;'; put 'put ''PT5lLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksdC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLHQub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQodCxlKXtNMih0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX1vbkRvbmUodCl7dGhpcy5xdWV1''@;'; put 'put ''ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9b25TdGFydCh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfW9uRGVzdHJveSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVl''@;'; put 'put ''dWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXll''@;'; put 'put ''ci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9w''@;'; put 'put ''bGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdl''@;'; put 'put ''dFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKHQpe2NvbnN0IGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX19ZnVuY3Rpb24gWUgobil7cmV0dXJuIG4mJjE9PT1uLm5vZGVUeXBlfWZ1bmN0aW9uICQ0ZShuLHQpe2NvbnN0IGU9bi5zdHls''@;'; put 'put ''ZS5kaXNwbGF5O3JldHVybiBuLnN0eWxlLmRpc3BsYXk9dD8/Im5vbmUiLGV9ZnVuY3Rpb24gSzRlKG4sdCxlLHIsaSl7Y29uc3QgYT1bXTtlLmZvckVhY2goQz0+YS5wdXNoKCQ0ZShDKSkpO2NvbnN0IGM9W107ci5mb3JFYWNoKChDLFApPT57Y29uc3QgWT1uZXcgTWFwO0MuZm9yRWFjaChK''@;'; put 'put ''PT57Y29uc3QgY2U9dC5jb21wdXRlU3R5bGUoUCxKLGkpO1kuc2V0KEosY2UpLCghY2V8fDA9PWNlLmxlbmd0aCkmJihQW2lwXT1HbnQsYy5wdXNoKFApKX0pLG4uc2V0KFAsWSl9KTtsZXQgbT0wO3JldHVybiBlLmZvckVhY2goQz0+JDRlKEMsYVttKytdKSksY31mdW5jdGlvbiBYNGUobix0''@;'; put 'put ''KXtjb25zdCBlPW5ldyBNYXA7aWYobi5mb3JFYWNoKG09PmUuc2V0KG0sW10pKSwwPT10Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBpPW5ldyBTZXQodCksYT1uZXcgTWFwO2Z1bmN0aW9uIGMobSl7aWYoIW0pcmV0dXJuIDE7bGV0IEM9YS5nZXQobSk7aWYoQylyZXR1cm4gQztjb25zdCBQPW0u''@;'; put 'put ''cGFyZW50Tm9kZTtyZXR1cm4gQz1lLmhhcyhQKT9QOmkuaGFzKFApPzE6YyhQKSxhLnNldChtLEMpLEN9cmV0dXJuIHQuZm9yRWFjaChtPT57Y29uc3QgQz1jKG0pOzEhPT1DJiZlLmdldChDKS5wdXNoKG0pfSksZX1mdW5jdGlvbiBCZihuLHQpe24uY2xhc3NMaXN0Py5hZGQodCl9ZnVuY3Rp''@;'; put 'put ''b24gc0Mobix0KXtuLmNsYXNzTGlzdD8ucmVtb3ZlKHQpfWZ1bmN0aW9uIFFudChuLHQsZSl7RzYoZSkub25Eb25lKCgpPT5uLnByb2Nlc3NMZWF2ZU5vZGUodCkpfWZ1bmN0aW9uIHE0ZShuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtjb25zdCByPW5bZV07ciBpbnN0YW5jZW9m''@;'; put 'put ''IFpmZT9xNGUoci5wbGF5ZXJzLHQpOnQucHVzaChyKX19ZnVuY3Rpb24gSjRlKG4sdCxlKXtjb25zdCByPWUuZ2V0KG4pO2lmKCFyKXJldHVybiExO2xldCBpPXQuZ2V0KG4pO3JldHVybiBpP3IuZm9yRWFjaChhPT5pLmFkZChhKSk6dC5zZXQobixyKSxlLmRlbGV0ZShuKSwhMH1jbGFzcyBJ''@;'; put 'put ''QXtfZHJpdmVyO19ub3JtYWxpemVyO190cmFuc2l0aW9uRW5naW5lO190aW1lbGluZUVuZ2luZTtfdHJpZ2dlckNhY2hlPXt9O29uUmVtb3ZhbENvbXBsZXRlPSh0LGUpPT57fTtjb25zdHJ1Y3Rvcih0LGUscil7dGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1yLHRoaXMuX3RyYW5z''@;'; put 'put ''aXRpb25FbmdpbmU9bmV3IEtudCh0LmJvZHksZSxyKSx0aGlzLl90aW1lbGluZUVuZ2luZT1uZXcgam50KHQuYm9keSxlLHIpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KGksYSk9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoaSxhKX1yZWdpc3RlclRyaWdnZXIo''@;'; put 'put ''dCxlLHIsaSxhKXtjb25zdCBjPXQrIi0iK2k7bGV0IG09dGhpcy5fdHJpZ2dlckNhY2hlW2NdO2lmKCFtKXtjb25zdCBDPVtdLFk9U3EodGhpcy5fZHJpdmVyLGEsQyxbXSk7aWYoQy5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gQnR0KCl7cmV0dXJuIG5ldyBrcigzNDA0LCExKX0oKTttPWZ1bmN0''@;'; put 'put ''aW9uIEhudChuLHQsZSl7cmV0dXJuIG5ldyBObnQobix0LGUpfShpLFksdGhpcy5fbm9ybWFsaXplciksdGhpcy5fdHJpZ2dlckNhY2hlW2NdPW19dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxpLG0pfXJlZ2lzdGVyKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2lu''@;'; put 'put ''ZS5yZWdpc3Rlcih0LGUpfWRlc3Ryb3kodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3kodCxlKX1vbkluc2VydCh0LGUscixpKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLHIsaSl9b25SZW1vdmUodCxlLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUu''@;'; put 'put ''cmVtb3ZlTm9kZSh0LGUscil9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpfXByb2Nlc3ModCxlLHIsaSl7aWYoIkAiPT1yLmNoYXJBdCgwKSl7Y29uc3RbYSxjXT1BNGUocik7dGhpcy5fdGltZWxpbmVFbmdp''@;'; put 'put ''bmUuY29tbWFuZChhLGUsYyxpKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUscixpKX1saXN0ZW4odCxlLHIsaSxhKXtpZigiQCI9PXIuY2hhckF0KDApKXtjb25zdFtjLG1dPUE0ZShyKTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKGMsZSxtLGEp''@;'; put 'put ''fXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3Rlbih0LGUscixpLGEpfWZsdXNoKHQ9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9Z2V0IHBsYXllcnMoKXtyZXR1cm5bLi4udGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLC4uLnRoaXMuX3RpbWVsaW5l''@;'; put 'put ''RW5naW5lLnBsYXllcnNdfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUodCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUodCl9''@;'; put 'put ''fWxldCBycnQ9KCgpPT57Y2xhc3MgbntfZWxlbWVudDtfc3RhcnRTdHlsZXM7X2VuZFN0eWxlcztzdGF0aWMgaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcDtfc3RhdGU9MDtfaW5pdGlhbFN0eWxlcztjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3N0''@;'; put 'put ''YXJ0U3R5bGVzPXIsdGhpcy5fZW5kU3R5bGVzPWk7bGV0IGE9bi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChlKTthfHxuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGUsYT1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWF9c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5f''@;'; put 'put ''c3RhcnRTdHlsZXMmJl80KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihfNCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMu''@;'; put 'put ''X2VuZFN0eWxlcyYmKF80KHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5kZWxldGUodGhpcy5fZWxl''@;'; put 'put ''bWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihFdih0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoRXYodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSxfNCh0aGlz''@;'; put 'put ''Ll9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gTHEobil7bGV0IHQ9bnVsbDtyZXR1cm4gbi5mb3JFYWNoKChlLHIpPT57KGZ1bmN0aW9uIGlydChuKXtyZXR1cm4iZGlzcGxheSI9PT1ufHwicG9zaXRpb24iPT09bn0p''@;'; put 'put ''KHIpJiYodD10fHxuZXcgTWFwLHQuc2V0KHIsZSkpfSksdH1jbGFzcyBRNGV7ZWxlbWVudDtrZXlmcmFtZXM7b3B0aW9ucztfc3BlY2lhbFN0eWxlcztfb25Eb25lRm5zPVtdO19vblN0YXJ0Rm5zPVtdO19vbkRlc3Ryb3lGbnM9W107X2R1cmF0aW9uO19kZWxheTtfaW5pdGlhbGl6ZWQ9ITE7''@;'; put 'put ''X2ZpbmlzaGVkPSExO19zdGFydGVkPSExO19kZXN0cm95ZWQ9ITE7X2ZpbmFsS2V5ZnJhbWU7X29yaWdpbmFsT25Eb25lRm5zPVtdO19vcmlnaW5hbE9uU3RhcnRGbnM9W107ZG9tUGxheWVyO3RpbWU9MDtwYXJlbnRQbGF5ZXI9bnVsbDtjdXJyZW50U25hcHNob3Q9bmV3IE1hcDtjb25zdHJ1''@;'; put 'put ''Y3Rvcih0LGUscixpKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1yLHRoaXMuX3NwZWNpYWxTdHlsZXM9aSx0aGlzLl9kdXJhdGlvbj1yLmR1cmF0aW9uLHRoaXMuX2RlbGF5PXIuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2Rl''@;'; put 'put ''bGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9i''@;'; put 'put ''dWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtjb25zdCB0PXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LHQsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5h''@;'; put 'put ''bEtleWZyYW1lPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV06bmV3IE1hcDtjb25zdCBlPSgpPT50aGlzLl9vbkZpbmlzaCgpO3RoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsZSksdGhpcy5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRvbVBsYXllci5yZW1vdmVFdmVudExpc3Rl''@;'; put 'put ''bmVyKCJmaW5pc2giLGUpfSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QodCl7Y29uc3QgZT1bXTtyZXR1cm4gdC5mb3JFYWNo''@;'; put 'put ''KHI9PntlLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKHIpKX0pLGV9X3RyaWdnZXJXZWJBbmltYXRpb24odCxlLHIpe3JldHVybiB0LmFuaW1hdGUodGhpcy5fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGUpLHIpfW9uU3RhcnQodCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2godCks''@;'; put 'put ''dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfW9uRG9uZSh0KXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKHQpLHRoaXMuX29uRG9uZUZucy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX1wbGF5KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhh''@;'; put 'put ''c1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLHRoaXMuZG9tUGxheWVyLnBsYXkoKX1wYXVzZSgpe3Ro''@;'; put 'put ''aXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLnBhdXNlKCl9ZmluaXNoKCl7dGhpcy5pbml0KCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfXJlc2V0KCl7dGhpcy5fcmVzZXRE''@;'; put 'put ''b21QbGF5ZXJTdGF0ZSgpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31fcmVzZXREb21QbGF5''@;'; put 'put ''ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEw''@;'; put 'put ''LHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1zZXRQb3NpdGlv''@;'; put 'put ''bih0KXt2b2lkIDA9PT10aGlzLmRvbVBsYXllciYmdGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9Z2V0UG9zaXRpb24oKXtyZXR1cm4rKHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPz8wKS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7Y29uc3QgdD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKHIsaSk9Pnsib2Zmc2V0IiE9PWkmJnQuc2V0KGksdGhpcy5fZmluaXNoZWQ/cjp5cSh0aGlzLmVs''@;'; put 'put ''ZW1lbnQsaSkpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7Y29uc3QgZT0ic3RhcnQiPT09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2gocj0+cigpKSxlLmxlbmd0aD0wfX1jbGFzcyBlZ2V7dmFsaWRhdGVTdHlsZVByb3Bl''@;'; put 'put ''cnR5KHQpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkodCl7cmV0dXJuITB9Y29udGFpbnNFbGVtZW50KHQsZSl7cmV0dXJuIEQ0ZSh0LGUpfWdldFBhcmVudEVsZW1lbnQodCl7cmV0dXJuIGhxKHQpfXF1ZXJ5KHQsZSxyKXtyZXR1cm4gSTRlKHQsZSxyKX1jb21w''@;'; put 'put ''dXRlU3R5bGUodCxlLHIpe3JldHVybiB5cSh0LGUpfWFuaW1hdGUodCxlLHIsaSxhLGM9W10pe2NvbnN0IEM9e2R1cmF0aW9uOnIsZGVsYXk6aSxmaWxsOjA9PWk/ImJvdGgiOiJmb3J3YXJkcyJ9O2EmJihDLmVhc2luZz1hKTtjb25zdCBQPW5ldyBNYXAsWT1jLmZpbHRlcihmZT0+ZmUgaW5z''@;'; put 'put ''dGFuY2VvZiBRNGUpOyhmdW5jdGlvbiBjbnQobix0KXtyZXR1cm4gMD09PW58fDA9PT10fSkocixpKSYmWS5mb3JFYWNoKGZlPT57ZmUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKEFlLEhlKT0+UC5zZXQoSGUsQWUpKX0pO2xldCBKPWZ1bmN0aW9uIG9udChuKXtyZXR1cm4gbi5sZW5ndGg/''@;'; put 'put ''blswXWluc3RhbmNlb2YgTWFwP246bi5tYXAodD0+bmV3IE1hcChPYmplY3QuZW50cmllcyh0KSkpOltdfShlKS5tYXAoZmU9Pm5ldyBNYXAoZmUpKTtKPWZ1bmN0aW9uIHVudChuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IHI9dFswXSxpPVtdO2lmKGUuZm9yRWFjaCgoYSxjKT0+''@;'; put 'put ''e3IuaGFzKGMpfHxpLnB1c2goYyksci5zZXQoYyxhKX0pLGkubGVuZ3RoKWZvcihsZXQgYT0xO2E8dC5sZW5ndGg7YSsrKXtsZXQgYz10W2FdO2kuZm9yRWFjaChtPT5jLnNldChtLHlxKG4sbSkpKX19cmV0dXJuIHR9KHQsSixQKTtjb25zdCBjZT1mdW5jdGlvbiBucnQobix0KXtsZXQgZT1u''@;'; put 'put ''dWxsLHI9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg/KGU9THEodFswXSksdC5sZW5ndGg+MSYmKHI9THEodFt0Lmxlbmd0aC0xXSkpKTp0IGluc3RhbmNlb2YgTWFwJiYoZT1McSh0KSksZXx8cj9uZXcgcnJ0KG4sZSxyKTpudWxsfSh0LEopO3JldHVybiBuZXcgUTRl''@;'; put 'put ''KHQsSixDLGNlKX19Y29uc3QgdGdlPSJALmRpc2FibGVkIjtjbGFzcyBuZ2V7bmFtZXNwYWNlSWQ7ZGVsZWdhdGU7ZW5naW5lO19vbkRlc3Ryb3k7XHUwMjc1dHlwZT0wO2NvbnN0cnVjdG9yKHQsZSxyLGkpe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9''@;'; put 'put ''cix0aGlzLl9vbkRlc3Ryb3k9aX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveU5vZGUodCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT8uKHQpfWRlc3Ryb3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSks''@;'; put 'put ''dGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4oKX1jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0''@;'; put 'put ''LGUpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9YXBwZW5kQ2hpbGQodCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdp''@;'; put 'put ''bmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfWluc2VydEJlZm9yZSh0LGUscixpPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsciksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsaSl9cmVtb3ZlQ2hpbGQodCxlLHIpe3RoaXMu''@;'; put 'put ''cGFyZW50Tm9kZShlKSYmdGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCxlKX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLmRl''@;'; put 'put ''bGVnYXRlLnBhcmVudE5vZGUodCl9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9c2V0QXR0cmlidXRlKHQsZSxyLGkpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxyLGkpfXJlbW92ZUF0dHJpYnV0ZSh0LGUscil7dGhpcy5kZWxlZ2F0''@;'; put 'put ''ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLHIpfWFkZENsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfXJlbW92ZUNsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfXNldFN0eWxlKHQsZSxyLGkpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLHIsaSl9''@;'; put 'put ''cmVtb3ZlU3R5bGUodCxlLHIpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLHIpfXNldFByb3BlcnR5KHQsZSxyKXsiQCI9PWUuY2hhckF0KDApJiZlPT10Z2U/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LCEhcik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUscil9c2V0VmFs''@;'; put 'put ''dWUodCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9bGlzdGVuKHQsZSxyLGkpe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUscixpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fWNsYXNzIGFydCBleHRlbmRz''@;'; put 'put ''IG5nZXtmYWN0b3J5O2NvbnN0cnVjdG9yKHQsZSxyLGksYSl7c3VwZXIoZSxyLGksYSksdGhpcy5mYWN0b3J5PXQsdGhpcy5uYW1lc3BhY2VJZD1lfXNldFByb3BlcnR5KHQsZSxyKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJmU9PXRnZT90aGlzLmRpc2FibGVBbmltYXRp''@;'; put 'put ''b25zKHQscj12b2lkIDA9PT1yfHwhIXIpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc2xpY2UoMSkscik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUscil9bGlzdGVuKHQsZSxyLGkpe2lmKCJAIj09ZS5jaGFyQXQoMCkpe2NvbnN0IGE9ZnVuY3Rpb24g''@;'; put 'put ''b3J0KG4pe3N3aXRjaChuKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBufX0odCk7bGV0IGM9ZS5zbGljZSgxKSxtPSIiO3JldHVybiJAIiE9Yy5j''@;'; put 'put ''aGFyQXQoMCkmJihbYyxtXT1mdW5jdGlvbiBzcnQobil7Y29uc3QgdD1uLmluZGV4T2YoIi4iKTtyZXR1cm5bbi5zdWJzdHJpbmcoMCx0KSxuLnNsaWNlKHQrMSldfShjKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsYSxjLG0sQz0+e3RoaXMuZmFjdG9yeS5zY2hlZHVs''@;'; put 'put ''ZUxpc3RlbmVyQ2FsbGJhY2soQy5fZGF0YXx8LTEscixDKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUscixpKX19Y2xhc3MgbHJ0e2RlbGVnYXRlO2VuZ2luZTtfem9uZTtfY3VycmVudElkPTA7X21pY3JvdGFza0lkPTE7X2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXTtf''@;'; put 'put ''cmVuZGVyZXJDYWNoZT1uZXcgTWFwO19jZFJlY3VyRGVwdGg9MDtjb25zdHJ1Y3Rvcih0LGUscil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1yLGUub25SZW1vdmFsQ29tcGxldGU9KGksYSk9PnthPy5yZW1vdmVDaGlsZChudWxsLGkpfX1jcmVhdGVSZW5kZXJl''@;'; put 'put ''cih0LGUpe2NvbnN0IGk9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCF0fHwhZT8uZGF0YT8uYW5pbWF0aW9uKXtjb25zdCBQPXRoaXMuX3JlbmRlcmVyQ2FjaGU7bGV0IFk9UC5nZXQoaSk7cmV0dXJuIFl8fChZPW5ldyBuZ2UoIiIsaSx0aGlzLmVuZ2luZSwoKT0+UC5k''@;'; put 'put ''ZWxldGUoaSkpLFAuc2V0KGksWSkpLFl9Y29uc3QgYT1lLmlkLGM9ZS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGMsdCk7Y29uc3QgbT1QPT57QXJyYXkuaXNBcnJheShQKT9QLmZvckVhY2gobSk6dGhpcy5lbmdpbmUucmVn''@;'; put 'put ''aXN0ZXJUcmlnZ2VyKGEsYyx0LFAubmFtZSxQKX07cmV0dXJuIGUuZGF0YS5hbmltYXRpb24uZm9yRWFjaChtKSxuZXcgYXJ0KHRoaXMsYyxpLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4o''@;'; put 'put ''KX1fc2NoZWR1bGVDb3VudFRhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2sodCxlLHIpe2lmKHQ+PTAmJnQ8dGhpcy5fbWljcm90YXNrSWQpcmV0dXJuIHZvaWQgdGhpcy5fem9uZS5ydW4oKCk9PmUocikpO2Nv''@;'; put 'put ''bnN0IGk9dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyOzA9PWkubGVuZ3RoJiZxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57aS5mb3JFYWNoKGE9Pntjb25zdFtjLG1dPWE7YyhtKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksaS5w''@;'; put 'put ''dXNoKFtlLHJdKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMu''@;'; put 'put ''ZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9Y29tcG9uZW50UmVwbGFjZWQodCl7dGhpcy5lbmdpbmUuZmx1c2goKSx0aGlzLmRlbGVnYXRlLmNvbXBvbmVudFJlcGxhY2Vk''@;'; put 'put ''Py4odCl9fWxldCB1cnQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIElBe2NvbnN0cnVjdG9yKGUscixpKXtzdXBlcihlLHIsaSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKFhzKSxPcihicSksT3Iod3Ep''@;'; put 'put ''KX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pfXJldHVybiBufSkoKTtjb25zdCByZ2U9W3twcm92aWRlOndxLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZHJ0KCl7cmV0dXJuIG5ldyBINGV9fSx7cHJvdmlkZTpJQSx1c2VDbGFzczp1cnR9LHtwcm92''@;'; put 'put ''aWRlOkgzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gaHJ0KG4sdCxlKXtyZXR1cm4gbmV3IGxydChuLHQsZSl9LGRlcHM6W1BHLElBLEphXX1dLGlnZT1be3Byb3ZpZGU6YnEsdXNlQ2xhc3M6X3F9LHtwcm92aWRlOklSLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLnJnZV0sT3E9W3twcm92''@;'; put 'put ''aWRlOmJxLHVzZUZhY3Rvcnk6KCk9Pm5ldyBlZ2V9LHtwcm92aWRlOklSLHVzZUZhY3Rvcnk6KCk9PiJCcm93c2VyQW5pbWF0aW9ucyJ9LC4uLnJnZV07bGV0IGZydD0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczplLmRpc2Fi''@;'; put 'put ''bGVBbmltYXRpb25zP2lnZTpPcX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfTtzdGF0aWMgXHUwMjc1bW9kPUdpKHt0eXBlOm59KTtzdGF0aWMgXHUwMjc1aW5qPXpuKHtwcm92aWRlcnM6T3EsaW1wb3J0czpbeDBlXX0pfXJldHVybiBufSkoKSxwcnQ9''@;'; put 'put ''KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1ub3QtZm91bmQiXV0saG9zdEF0dHJz''@;'; put 'put ''OlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiZGl2IiwwKSgxLCJwIiksVGUoMiwiNDA0IC0gTm90IEZvdW5kIiksaWUoKSgpKX0s''@;'; put 'put ''ZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKSxhZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe31kb3dubG9hZEZpbGUoZSxyLGk9InR4dCIpe2xldCBhPW5ldyBCbG9iKFtlXSx7dHlwZToidGV4dC9wbGFpbiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygp''@;'; put 'put ''LmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihhLGAke3J9LiR7aX1gKTtlbHNle2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtjLmhyZWY9ImRhdGE6dGV4dC9wbGFpbiwiK2VuY29kZVVSSUNvbXBvbmVudChlKSxjLmRvd25sb2FkPWAke3J9''@;'; put 'put ''LiR7aX1gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksYy5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYyl9fXJlYWRGaWxlKGUpe3JldHVybiBuZXcgUHJvbWlzZSgocixpKT0+e2xldCBhPW5ldyBGaWxlUmVhZGVyO2Eub25sb2FkPSgpPT57YS5yZXN1bHQmJnIoSlNP''@;'; put 'put ''Ti5wYXJzZShhLnJlc3VsdC50b1N0cmluZygpKSl9LGEucmVhZEFzVGV4dChlKX0pfWNsZWFyVXBsb2FkSW5wdXQoZSl7ZS50YXJnZXQudmFsdWU9IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9dW4o''@;'; put 'put ''e3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gbn0pKCk7dmFyIGg1PWQoNTk0OCk7Y29uc3QgUHE9ZnVuY3Rpb24gbXJ0KG4pe3JldHVybiJzeW1ib2wiPT10eXBlb2Ygbnx8U3cobikmJiJbb2JqZWN0IFN5bWJvbF0iPT1fdyhuKX07dmFy''@;'; put 'put ''IHZydD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyx5cnQ9L15cdyokLztmdW5jdGlvbiBGcShuLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBufHxudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBl''@;'; put 'put ''Y3RlZCBhIGZ1bmN0aW9uIik7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgcj1hcmd1bWVudHMsaT10P3QuYXBwbHkodGhpcyxyKTpyWzBdLGE9ZS5jYWNoZTtpZihhLmhhcyhpKSlyZXR1cm4gYS5nZXQoaSk7dmFyIGM9bi5hcHBseSh0aGlzLHIpO3JldHVybiBlLmNhY2hlPWEuc2V0KGksYyl8fGEs''@;'; put 'put ''Y307cmV0dXJuIGUuY2FjaGU9bmV3KEZxLkNhY2hlfHxRJCksZX1GcS5DYWNoZT1RJDtjb25zdCBDcnQ9RnE7dmFyIEVydD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwk''@;'; put 'put ''KSkvZyxUcnQ9L1xcKFxcKT8vZyxBcnQ9ZnVuY3Rpb24gTXJ0KG4pe3ZhciB0PUNydChuLGZ1bmN0aW9uKHIpe3JldHVybiA1MDA9PT1lLnNpemUmJmUuY2xlYXIoKSxyfSksZT10LmNhY2hlO3JldHVybiB0fShmdW5jdGlvbihuKXt2YXIgdD1bXTtyZXR1cm4gNDY9PT1uLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJnQucHVzaCgiIiksbi5yZXBsYWNlKEVydCxmdW5jdGlvbihlLHIsaSxhKXt0LnB1c2goaT9hLnJlcGxhY2UoVHJ0LCIkMSIpOnJ8fGUpfSksdH0pO2NvbnN0IGtydD1BcnQ7dmFyIG9nZT14Nj94Ni5wcm90b3R5cGU6dm9pZCAwLHNnZT1vZ2U/b2dlLnRvU3RyaW5nOnZvaWQgMDtjb25z''@;'; put 'put ''dCBMcnQ9ZnVuY3Rpb24gbGdlKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihNdyhuKSlyZXR1cm4gZnVuY3Rpb24gRHJ0KG4sdCl7Zm9yKHZhciBlPS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoLGk9QXJyYXkocik7KytlPHI7KWlbZV09dChuW2VdLGUsbik7cmV0dXJuIGl9''@;'; put 'put ''KG4sbGdlKSsiIjtpZihQcShuKSlyZXR1cm4gc2dlP3NnZS5jYWxsKG4pOiIiO3ZhciB0PW4rIiI7cmV0dXJuIjAiPT10JiYxL249PS0xLzA/Ii0wIjp0fSxIcnQ9ZnVuY3Rpb24gRnJ0KG4sdCl7cmV0dXJuIE13KG4pP246ZnVuY3Rpb24gX3J0KG4sdCl7aWYoTXcobikpcmV0dXJuITE7dmFy''@;'; put 'put ''IGU9dHlwZW9mIG47cmV0dXJuISgibnVtYmVyIiE9ZSYmInN5bWJvbCIhPWUmJiJib29sZWFuIiE9ZSYmbnVsbCE9biYmIVBxKG4pKXx8eXJ0LnRlc3Qobil8fCF2cnQudGVzdChuKXx8bnVsbCE9dCYmbiBpbiBPYmplY3QodCl9KG4sdCk/W25dOmtydChmdW5jdGlvbiBPcnQobil7cmV0dXJu''@;'; put 'put ''IG51bGw9PW4/IiI6THJ0KG4pfShuKSl9LEJydD1mdW5jdGlvbiBWcnQobil7aWYoInN0cmluZyI9PXR5cGVvZiBufHxQcShuKSlyZXR1cm4gbjt2YXIgdD1uKyIiO3JldHVybiIwIj09dCYmMS9uPT0tMS8wPyItMCI6dH0seGM9ZnVuY3Rpb24gVXJ0KG4sdCxlKXt2YXIgcj1udWxsPT1uP3Zv''@;'; put 'put ''aWQgMDpmdW5jdGlvbiBqcnQobix0KXtmb3IodmFyIGU9MCxyPSh0PUhydCh0LG4pKS5sZW5ndGg7bnVsbCE9biYmZTxyOyluPW5bQnJ0KHRbZSsrXSldO3JldHVybiBlJiZlPT1yP246dm9pZCAwfShuLHQpO3JldHVybiB2b2lkIDA9PT1yP2U6cn07bGV0IEUyPSgoKT0+e2NsYXNzIG57Y29u''@;'; put 'put ''c3RydWN0b3IoZSxyLGkpe3RoaXMuc2FzU2VydmljZT1lLHRoaXMuaGVscGVyU2VydmljZT1yLHRoaXMubG9nZ2VyU2VydmljZT1pLHRoaXMucmVzcG9uc2U9bmV3IHVyLHRoaXMuY2hhbmdlZFRhYmxlPW5ldyB1cix0aGlzLmRldGFpbHM9bmV3IHVyLHRoaXMuZGlmZnM9bmV3IHVyLHRoaXMu''@;'; put 'put ''Y29sdW1ucz1uZXcgdXIsdGhpcy52YWx1ZXM9bmV3IHVyLHRoaXMuZmlsdGVyPW5ldyB1cix0aGlzLnF1ZXJ5PW5ldyB1cix0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IHVyLHRoaXMucmVtb3ZlUXVlcnk9bmV3IHVyLHRoaXMuc2V0U3VibWl0PW5ldyB1cix0aGlzLnNldFN1Ym1pdExpc3Q9bmV3''@;'; put 'put ''IHVyfWNhbGxTZXJ2aWNlKGUscixpLGEpe3ZhciBjPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7Y29uc3QgbT17fTtyZXR1cm4gbVtyXT1bZV0se2RhdGE6KHlpZWxkIGMuc2FzU2VydmljZS5yZXF1ZXN0KGksbSkpLmFkYXB0ZXJSZXNwb25zZSxsaWJkczphfX0pKCl9dXBkYXRlVGFibGUo''@;'; put 'put ''ZSxyLGksYSxjLG0sQyl7dmFyIFA9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtsZXQgWT17anNkYXRhOnJ9O2lmKGMpe2xldCBjZT1QLnBhcnNlRm9ybWF0cyhjKTtZLiRqc2RhdGE9e2Zvcm1hdHM6Y2V9fXJldHVybiBZW2ldPVtlXSx5aWVsZCBQLnNhc1NlcnZpY2UucmVxdWVzdChhLFks''@;'; put 'put ''Qyx7c3VwcHJlc3NFcnJvckFib3J0TW9kYWw6bSxzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOm19KX0pKCl9Z2V0QXBwcm92YWxzKGUscixpKXt2YXIgYT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2xldCBjPXt9O3JldHVybiBjW3JdPVtlXSwoeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVl''@;'; put 'put ''c3QoaSxjKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zZW5kRGV0YWlscyhlLHIsaSl7dmFyIGE9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtsZXQgYz1PYmplY3QuYXNzaWduKHtzdWI6ITB9LGUpO2Euc3VibWl0dERldGFpbC5uZXh0KHtkYXRhOmlbcl0sdmlld0RhdGE6Y30pfSkoKX1nZXRT''@;'; put 'put ''dWJtaXR0cygpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGUuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdMaWJzKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbioo''@;'; put 'put ''KXtyZXR1cm4oeWllbGQgZS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9cmVmcmVzaExpYkluZm8oZSl7dmFyIHI9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtjb25zdCBpPXtsaWIycmVmcmVzaDpbe2xpYnJlZjplfV19''@;'; put 'put ''O3JldHVybih5aWVsZCByLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hsaWJpbmZvIixpKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3VGFibGVzKGUpe3ZhciByPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0IGk9e1NBU0NvbnRyb2xUYWJsZTpbe01QTElCOmV9XX07''@;'; put 'put ''cmV0dXJuKHlpZWxkIHIuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGEoZSxyKXt2YXIgaT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2xldCBhPXtTQVNDb250cm9sVGFibGU6W3tMSUJEUzplLEZJTFRFUl9S''@;'; put 'put ''SzpyfV19O3JldHVybih5aWVsZCBpLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixhKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3RGF0YVNlYXJjaChlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0aW9uKihpLGE9ITEsYyxtKXtsZXQgUD17U0FTQ29udHJvbFRhYmxl''@;'; put 'put ''Olt7U0VBUkNIVFlQRTppLmxlbmd0aD4wP2E/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6aSxMSUJEUzpjLEZJTFRFUl9SSzptfV19O3JldHVybih5aWVsZCByLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixQKSkuYWRhcHRlclJlc3BvbnNlfSkuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfWdldFhMTWFwUnVsZXMoZSl7dmFyIHI9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtjb25zdCBpPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDplfV19O3JldHVybih5aWVsZCByLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGkpKS5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2V9KSgpfXNob3dEaWZmcyhlLHIsaSl7dmFyIGE9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtsZXQgYz17fTtyZXR1cm4gY1tyXT1bZV0sKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KGksYyx7dXNlQ29tcHV0ZUFwaTpudWxsfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9cmVq''@;'; put 'put ''ZWN0aW5nKGUscixpKXt2YXIgYT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2xldCBjPXt9O3JldHVybiBjW3JdPVtlXSwoeWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoaSxjLHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1hcHByb3ZlVGFibGUoZSxyLGkp''@;'; put 'put ''e3ZhciBhPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0IGM9e307cmV0dXJuIGNbcl09W2VdLCh5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdChpLGMpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfWdldEhpc3RvcnkoZSxyLGkpe3ZhciBhPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0''@;'; put 'put ''IGM9e307cmV0dXJuIGNbcl09W2VdLCh5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdChpLGMpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNldFF1ZXJ5VmFyaWFibGVzKGUscil7dGhpcy5jb2x1bW5zLm5leHQoe2RhdGE6e2NvbHM6cn0sbGliZHM6ZX0pfWdldENoYW5nZUluZm8oZSl7dmFyIHI9''@;'; put 'put ''dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtsZXQgYT17U0FTQ29udHJvbFRhYmxlOlt7VEFCTEU6ZX1dfTtyZXR1cm4oeWllbGQgci5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixhKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRRdWVyeVZhbHVlcyhlLHIsaSxh''@;'; put 'put ''LGMpe3ZhciBtPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0IEM9e2l3YW50Olt7bGliZHM6cixjb2w6ZSwuLi5hJiZ7U1RBUlRST1c6YX0sLi4uYyYme1JPV1M6Y319XX07cmV0dXJuIGkubGVuZ3RoPjAmJihDLkZJTFRFUlFVRVJZPWkpLCh5aWVsZCBtLnNhc1NlcnZpY2UucmVxdWVz''@;'; put 'put ''dCgicHVibGljL2dldGNvbHZhbHMiLEMpLmNhdGNoKFA9Pnt0aHJvdyBQfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2F2ZVF1ZXJ5KGUscil7dmFyIGk9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtsZXQgYT17aXdhbnQ6W3tmaWx0ZXJfdGFibGU6ZX1dLGZpbHRlcnF1ZXJ5OnJ9O2NvbnN0''@;'; put 'put ''IGM9eWllbGQgaS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92YWxpZGF0ZWZpbHRlciIsYSk7cmV0dXJuIGkuZmlsdGVyLm5leHQoYyksYy5hZGFwdGVyUmVzcG9uc2V9KSgpfW9wZW5UYWJsZShlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2xldCBpPXtpd2FudDpbe3Rh''@;'; put 'put ''YmxlX2lkOmV9XX07cmV0dXJuKHlpZWxkIHIuc2FzU2VydmljZS5yZXF1ZXN0KCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixpKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1jaGVja09wZXJhdG9yKGUscixpKXtsZXQgYTtzd2l0Y2goZSl7Y2FzZSJCRVRXRUVOIjpyIGluc3RhbmNlb2YgQXJyYXkm''@;'; put 'put ''JigiIiE9PXJbMF0mJiIiIT09clsxXT9hPXJbMF0rIiBBTkQgIityWzFdOiIiIT09clswXSYmIiI9PT1yWzFdPyhyWzFdPSIuIixhPXJbMF0rIiBBTkQgIityWzFdKToiIj09PXJbMF0mJiIiIT09clsxXT8oclswXT0iLiIsYT1yWzBdKyIgQU5EICIrclsxXSk6KHJbMF09Ii4iLHJbMV09Ii4i''@;'; put 'put ''LGE9clswXSsiIEFORCAiK3JbMV0pKTticmVhaztjYXNlIklOIjpjYXNlIk5PVCBJTiI6bGV0IG09W107aWYodHlwZW9mIHI8InUiKWZvcihsZXQgQz0wO0M8ci5sZW5ndGg7QysrKSEwPT09cltDXS5jaGVja2VkJiYoImNoYXIiPT09aT8oInN0cmluZyI9PXR5cGVvZiByW0NdLnZhbCYmKHJb''@;'; put 'put ''Q10udmFsPXJbQ10udmFsLnJlcGxhY2UoIiciLCInJyIpKSxtLnB1c2goIiciK3JbQ10udmFsKyInIikpOihudWxsPT09cltDXS52YWwmJihyW0NdLnZhbD0iLiIpLG0ucHVzaChyW0NdLnZhbCkpKTtyPSIoIittKyIpIjticmVhaztjYXNlIkNPTlRBSU5TIjplPSI/IjticmVhaztjYXNlIk5P''@;'; put 'put ''VCBFUVVBTCI6ZT0ibmUifXJldHVybiJudW0iPT09aSYmbnVsbD09PXImJihyPSIuIiksIlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09ciYmKHI9IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKGUpJiYibnVtIj09PWkmJiIiPT09ciYmKHI9Ii4iKSwiQkVUV0VF''@;'; put 'put ''TiI9PT1lP3t2YWx1ZTphLG9wZXJhdG9yOmV9Ont2YWx1ZTpyLG9wZXJhdG9yOmV9fXdoZXJlQ2xhdXNlQ3JlYXRvcihlLHIsaSl7bGV0IEMsSixhPSIiLFA9IiIsWT1bXTtmb3IobGV0IGZlPTA7ZmU8ZS5xdWVyeU9iai5sZW5ndGg7ZmUrKyl7bGV0IEFlPSIiLEhlPWUucXVlcnlPYmpbZmVd''@;'; put 'put ''O2ZvcihsZXQgWGU9MDtYZTxIZS5lbGVtZW50cy5sZW5ndGg7WGUrKyl7bGV0IGR0LHJ0PUhlLmVsZW1lbnRzW1hlXTtDPVhlPEhlLmVsZW1lbnRzLmxlbmd0aC0xP0hlLmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgWm49MDtabjxydC52YWx1ZXMubGVuZ3RoO1puKyspe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgcnQudmFsdWUmJiJudW1iZXIiPT10eXBlb2YgcnQudmFsdWVzW1puXS5mb3JtYXR0ZWQpcnQudmFsdWU9PT1KU09OLnN0cmluZ2lmeShydC52YWx1ZXNbWm5dLmZvcm1hdHRlZCkmJihkdD1ydC52YWx1ZXNbWm5dLnVuZm9ybWF0dGVkKTtlbHNle2xldCBFcj0ibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIHJ0LnZhbHVlc1tabl0uZm9ybWF0dGVkJiZudWxsIT09cnQudmFsdWVzW1puXS5mb3JtYXR0ZWQ/cnQudmFsdWVzW1puXS5mb3JtYXR0ZWQudHJpbSgpOnJ0LnZhbHVlc1tabl0uZm9ybWF0dGVkO3J0LnZhbHVlPT09RXImJihkdD1ydC52YWx1ZXNbWm5dLnVuZm9ybWF0dGVkKX0iUGxl''@;'; put 'put ''YXNlIHNlbGVjdCB2YWx1ZSI9PT1ydC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YocnQub3BlcmF0b3IpJiYoZHQ9IiIpLCgiQ09OVEFJTlMiPT09cnQub3BlcmF0b3J8fCJMSUtFIj09PXJ0Lm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09cnQub3Bl''@;'; put 'put ''cmF0b3IpJiYoZHQ9cnQudmFsdWUpfWlmKGR0fHwoZHQ9cnQudmFsdWUpLHJ0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PXJ0Lm9wZXJhdG9yKXtkdD1bXSxkdC5wdXNoKHJ0LnZhbHVlWzBdKSxkdC5wdXNoKHJ0LnZhbHVlWzFdKTtmb3IobGV0IFpuPTA7Wm48cnQudmFs''@;'; put 'put ''dWVzLmxlbmd0aDtabisrKWR0WzBdPT09cnQudmFsdWVzW1puXS5mb3JtYXR0ZWQmJihkdFswXT1ydC52YWx1ZXNbWm5dLnVuZm9ybWF0dGVkKSxkdFsxXT09PXJ0LnZhbHVlc1tabl0uZm9ybWF0dGVkJiYoZHRbMV09cnQudmFsdWVzW1puXS51bmZvcm1hdHRlZCl9aWYocnQudmFsdWUgaW5z''@;'; put 'put ''dGFuY2VvZiBBcnJheSYmKCJJTiI9PT1ydC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1ydC5vcGVyYXRvcikpe2R0PVtdLGR0PXJ0LnZhbHVlO2ZvcihsZXQgWm49MDtabjxydC52YWx1ZXMubGVuZ3RoO1puKyspZHRbWm5dJiZkdFtabl0udmFsPT09cnQudmFsdWVzW1puXS5mb3JtYXR0ZWQmJihk''@;'; put 'put ''dFtabl0udmFsPXJ0LnZhbHVlc1tabl0udW5mb3JtYXR0ZWQpfWxldCBqdD1ydC50eXBlO2NvbnN0IEZ0PXJ0LnZhbHVlVmFyaWFibGU7bGV0IGduLHBuPW51bGw9PT1ydC52YXJpYWJsZT8iIjpydC52YXJpYWJsZSxvbj1udWxsPT09cnQub3BlcmF0b3I/IiI6cnQub3BlcmF0b3I7Z249dGhp''@;'; put 'put ''cy5jaGVja09wZXJhdG9yKG9uLGR0LGp0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIGduJiYiKCIhPT1nblswXSYmKGduPWduLnJlcGxhY2UoIiciLCInJyIpKSxvbj10aGlzLmNoZWNrT3BlcmF0b3Iob24sZ24sanQpLm9wZXJhdG9yLCJjaGFyIj09PWp0JiYiSU4iIT09b24mJiJOT1QgSU4i''@;'; put 'put ''IT09b24/KHR5cGVvZiBnbj4idSImJihnbj0iIiksZ249RnQ/IiAiK2duKyIgIjoiICciK2duKyInICIsQWU9QWUrIiAiK3BuKyIgIitvbitnbitDKTooIm51bSI9PT1qdCYmdHlwZW9mIGduPiJ1IiYmKGduPSIuIiksZ249dHlwZW9mIGduPiJ1Ij8iIjoiICIrZ24rIiAiLEFlPUFlKyIgIitw''@;'; put 'put ''bisiICIrb24rZ24rQyl9WS5wdXNoKEFlKX1QPSIiO2ZvcihsZXQgZmU9MDtmZTxZLmxlbmd0aDtmZSsrKUo9ZmU8WS5sZW5ndGgtMT9yOiIiLFA9MT09PVkubGVuZ3RoP1lbMF06UCsiICgiK1lbZmVdKyIpICIrSjtyZXR1cm4gYT1QLnN1YnN0cigxKS5zbGljZSgwLC0xKSxQPSJXSEVSRSIr''@;'; put 'put ''UCsiOyIsdGhpcy5xdWVyeS5uZXh0KHt3aGVyZUNsYXVzZTpQLHN0cmluZzphLG9iajplLGxpYmRzOml9KSx7d2hlcmVDbGF1c2U6UCxzdHJpbmc6YX19Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShlKXtjb25zdCByPVtdO3JldHVybiBlLmZpbHRlckdyb3Vwcy5mb3JFYWNoKChpLGEpPT57aS5m''@;'; put 'put ''aWx0ZXJDbGF1c2VzLmZvckVhY2goYz0+e2xldCBtPSIiOyJCRVRXRUVOIj09PWMub3BlcmF0b3I/bT1gJHtjLnZhbHVlWzBdfSBBTkQgJHtjLnZhbHVlWzFdfWA6IklOIj09PWMub3BlcmF0b3J8fCJOT1QgSU4iPT09Yy5vcGVyYXRvcj8oYy52YWx1ZS5mb3JFYWNoKEM9PntpZihDLmNoZWNr''@;'; put 'put ''ZWQpe2NvbnN0IFA9Qy52YWw7InN0cmluZyIhPXR5cGVvZiBQfHwoMCxoNS5pc1NwZWNpYWxNaXNzaW5nKShQKSYmImNoYXIiIT09Yy50eXBlP20ubGVuZ3RoPjA/bSs9YCwke1B9YDptPWAoJHtQfWA6bS5sZW5ndGg+MD9tKz1gLCcke1AucmVwbGFjZSgvJy9nLCInJyIpfSdgOm09YCgnJHtQ''@;'; put 'put ''LnJlcGxhY2UoLycvZywiJyciKX0nYH19KSxtLmxlbmd0aD4wJiYobSs9IikiKSk6IiI9PT1jLnZhbHVlP209ImNoYXIiPT09Yy50eXBlPyInICciOiIuIjoiY2hhciI9PT1jLnR5cGUmJiFjLnZhbHVlVmFyaWFibGUmJihtPWAnJHtjLnZhbHVlLnJlcGxhY2UoLycvZywiJyciKX0nYCksci5w''@;'; put 'put ''dXNoKHtHUk9VUF9MT0dJQzplLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6aS5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6YSxWQVJJQUJMRV9OTTpjLnZhcmlhYmxlLE9QRVJBVE9SX05NOmMub3BlcmF0b3IsUkFXX1ZBTFVFOm18fGMudmFsdWV9KX0pfSkscn1pbml0aWFsaXpl''@;'; put 'put ''R2xvYmFsRmlsdGVyQ2xhdXNlKGUscil7Y29uc3QgaT17cXVlcnlPYmo6W10sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp4YyhXbixlKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUN9O3hjKFduLGUpLmZpbHRlci5jbGF1c2VzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaSks''@;'; put 'put ''eGMoV24sZSkuZmlsdGVyLmdyb3VwTG9naWM9eGMoV24sZSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDO2xldCBhPSIiLGM9e2VsZW1lbnRzOltdfSxtPTA7eGMoV24sZSkuZmlsdGVyLnF1ZXJ5LmZvckVhY2goQz0+e2NvbnN0IFA9e307Zm9yKGxldCBZPTA7WTxyLmxlbmd0aDtZKysp''@;'; put 'put ''aWYocltZXS5OQU1FPT09Qy5WQVJJQUJMRV9OTSl7aWYoYT1DLlNVQkdST1VQX0xPR0lDLFAuZGR0eXBlPXJbWV0uRERUWVBFLFAudHlwZT1yW1ldLlRZUEUsUC5vcGVyYXRvcnM9Im51bSI9PT1yW1ldLlRZUEU/V24ub3BlcmF0b3JzLm51bU9wZXJhdG9yczpXbi5vcGVyYXRvcnMuY2hhck9w''@;'; put 'put ''ZXJhdG9ycyxQLmxvZ2ljPW51bGwsUC5vcGVyYXRvcj1DLk9QRVJBVE9SX05NLFAudmFyaWFibGU9Qy5WQVJJQUJMRV9OTSwiY2hhciI9PT1yW1ldLlRZUEUpaWYoIklOIj09PUMuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09Qy5PUEVSQVRPUl9OTSl7Y29uc3QgSj1bXSxmZT1DLlJBV19WQUxV''@;'; put 'put ''RS5zbGljZSgxLC0xKS5zcGxpdCgiJywnIik7MT09PWZlLmxlbmd0aD9KLnB1c2goe2NoZWNrZWQ6ITAsdmFsOmZlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOmZlLmZvckVhY2goKEFlLEhlKT0+e0oucHVzaCgwPT09SGU/e2NoZWNrZWQ6ITAsdmFsOkFlLnNsaWNlKDEp''@;'; put 'put ''LnJlcGxhY2UoLycnL2csIiciKX06SGU9PT1mZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6QWUuc2xpY2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6QWUucmVwbGFjZSgvJycvZywiJyIpfSl9KSxQLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xv''@;'; put 'put ''bmUoSil9ZWxzZSBQLnZhbHVlPUMuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKTtlbHNlIGlmKCJJTiI9PT1DLk9QRVJBVE9SX05NfHwiTk9UIElOIj09PUMuT1BFUkFUT1JfTk0pe2NvbnN0IEo9W107Qy5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5m''@;'; put 'put ''b3JFYWNoKChBZSxIZSk9PntKLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkFlfSl9KSxQLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoSil9ZWxzZSBpZigiQkVUV0VFTiI9PT1DLk9QRVJBVE9SX05NKXtjb25zdCBKPUMuUkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO1AudmFsdWU9''@;'; put 'put ''Sn1lbHNlIFAudmFsdWU9Qy5SQVdfVkFMVUU7UC52YWx1ZXM9W10sbT09PUMuU1VCR1JPVVBfSUR8fCh4YyhXbixlKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYykpLHhjKFduLGUpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW21d''@;'; put 'put ''LmNsYXVzZUxvZ2ljPWEseGMoV24sZSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbbV0uaW52YWxpZENsYXVzZT0hMSxtKyssYy5lbGVtZW50cz1bXSksYy5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoUCkpO2JyZWFrfX0pLGMuZWxlbWVudHMubGVuZ3RoPjAm''@;'; put 'put ''Jih4YyhXbixlKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYykpLHhjKFduLGUpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW21dLmNsYXVzZUxvZ2ljPWEseGMoV24sZSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbbV0uaW52YWxp''@;'; put 'put ''ZENsYXVzZT0hMSkseGMoV24sZSkuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVzZSgpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0IHI9ITA7cmV0dXJuIGUucmVtb3ZlUXVlcnkubmV4dChyKSxyfSkoKX1zcGVjQ29udmVyc2lvbihlKXtsZXQgcj17fSxpPVtdO2lmKGk9''@;'; put 'put ''ZS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuTkFNRS50b1VwcGVyQ2FzZSgpfSksZSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXJbaVthXV09MT09PWVbYV0uVFlQRT97Y29sVHlwZToibnVtIixjb2xMZW5ndGg6ZVthXS5MRU5HVEh9Ontjb2xUeXBlOiJz''@;'; put 'put ''dHJpbmciLGNvbExlbmd0aDplW2FdLkxFTkdUSH07cmV0dXJuIHJ9c2V0U3VibWl0UmVhZHkoKXt0aGlzLnNldFN1Ym1pdC5uZXh0KCEwKX1wYXJzZUZvcm1hdHMoZSl7Y29uc3Qgcj17fSxpPWUudmFycztmb3IobGV0IGEgb2YgT2JqZWN0LmtleXMoaSkpe2NvbnN0IGM9aVthXS50eXBlLG09''@;'; put 'put ''aVthXS5sZW5ndGg7Im51bSI9PT1jP3JbYV09ImJlc3QuIjoiY2hhciI9PT1jJiYoclthXT1gJGNoYXIke219LmApfXJldHVybiByfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKEpzKSxPcihMdSksT3IobWgpKX19c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9fXJldHVybiBufSkoKTtmdW5jdGlvbiBXcnQobix0KXsxJm4mJihyaSgwKSxyZSgxLCJzcGFuIiwyMSksVGUoMiwiIExvYWRpbmcuLi4gIiksaWUoKSxyZSgzLCJwIiksVGUoNCwiRGVwbG95aW5nLi4uIiksaWUoKSxp''@;'; put 'put ''aSgpKX1mdW5jdGlvbiBacnQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gWXJ0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIEdydChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMzApLGN0KDEsWnJ0LDEsMCwiY2xyLWljb24iLDMxKSgyLFly''@;'; put 'put ''dCwxLDAsImNsci1pY29uIiwyNykscmUoMywicCIpLFRlKDQsIkRlcGxveSBTQVMgSm9icyIpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKCkseWUoIm5nSWYiLCEwPT09ZS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxhZSgpLHllKCJuZ0lmIiwhIWUuYXV0b0Rl''@;'; put 'put ''cGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayl9fWZ1bmN0aW9uICRydChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBLcnQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gWHJ0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwzMCksY3QoMSwk''@;'; put 'put ''cnQsMSwwLCJjbHItaWNvbiIsMzEpKDIsS3J0LDEsMCwiY2xyLWljb24iLDI3KSxyZSgzLCJwIiksVGUoNCwiQ3JlYXRlIGRhdGFiYXNlIiksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSx5ZSgibmdJZiIsZS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxhZSgpLHllKCJu''@;'; put 'put ''Z0lmIiwhMT09PWUuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIHFydChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiBKcnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyaSgwKSxyZSgxLCJwIiwyMiksVGUoMiwiRG9uZSIpLGllKCksVnQo''@;'; put 'put ''MywiaHIiLDIzKSxjdCg0LEdydCw1LDIsImRpdiIsMjQpKDUsWHJ0LDUsMiwiZGl2IiwyNCksVnQoNiwiaHIiLDIzKSxyZSg3LCJkaXYiLDI1KSg4LCJidXR0b24iLDI2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksY3Qo''@;'; put 'put ''OSxxcnQsMSwwLCJjbHItaWNvbiIsMjcpLFRlKDEwLCIgTEFVTkNIICIpLGllKCkscmUoMTEsImJ1dHRvbiIsMjgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVybiBtdChpLmRvd25sb2FkRmlsZShpLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRh''@;'; put 'put ''YmFzZS1sb2ciLCJ0eHQiKSl9KSxUZSgxMiwiIERvd25sb2FkIGxvZyAiKSxpZSgpKCksVnQoMTMsImhyIiwyMykscmUoMTQsImRpdiIsMjUpKDE1LCJidXR0b24iLDI5KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gaS5hdXRvZGVwbG95aW5nPSEx''@;'; put 'put ''LG10KGkuYXV0b2RlcGxveURvbmU9ITEpfSksVGUoMTYsIiBDbG9zZSAiKSxpZSgpLHJlKDE3LCJidXR0b24iLDI5KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLm9wZW5TYXNSZXF1ZXN0c01vZGFsKCkpfSksVGUoMTgsIiBTQVMgUmVxdWVzdHMgIiksaWUo''@;'; put 'put ''KSgpLGlpKCl9aWYoMiZuKXtjb25zdCBlPUVlKDIpO2FlKDQpLHllKCJuZ0lmIixudWxsIT09ZS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxhZSgpLHllKCJuZ0lmIixudWxsIT09ZS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxhZSg0KSx5ZSgibmdJZiIsITE9''@;'; put 'put ''PT1lLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2t8fCExPT09ZS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gUXJ0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwxOSkoMSwiZGl2IiwyMCksY3QoMixXcnQsNSwwLCJuZy1jb250YWluZXIiLDEyKSgz''@;'; put 'put ''LEpydCwxOSwzLCJuZy1jb250YWluZXIiLDEyKSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDIpLHllKCJuZ0lmIiwhZS5hdXRvZGVwbG95RG9uZSksYWUoKSx5ZSgibmdJZiIsZS5hdXRvZGVwbG95RG9uZSl9fWZ1bmN0aW9uIGVpdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIs''@;'; put 'put ''MzYpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgidmFsdWUiLGUuaWQpLGFlKCksTXIoIiAiLGUubmFtZSwiICIpfX1mdW5jdGlvbiB0aXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJzZWxlY3QiLDM0KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVybiB1aShhLnNlbGVjdGVkQWRtaW5Hcm91cCxpKXx8KGEuc2VsZWN0ZWRBZG1pbkdyb3VwPWkpLG10KGkpfSksY3QoMSxlaXQsMiwyLCJvcHRpb24iLDM1KSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO2xpKCJuZ01vZGVsIixlLnNlbGVj''@;'; put 'put ''dGVkQWRtaW5Hcm91cCksYWUoKSx5ZSgibmdGb3JPZiIsZS5hZG1pbkdyb3Vwcyl9fWZ1bmN0aW9uIG5pdChuLHQpezEmbiYmVnQoMCwiY2xyLXNwaW5uZXIiLDM3KX1mdW5jdGlvbiByaXQobix0KXtpZigxJm4mJihyZSgwLCJvcHRpb24iLDM2KSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9''@;'; put 'put ''dC4kaW1wbGljaXQ7eWUoInZhbHVlIixlLmlkKSxhZSgpLE1yKCIgIixlLm5hbWUsIiAiKX19ZnVuY3Rpb24gaWl0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwic2VsZWN0IiwzNCksa3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgpLm9u''@;'; put 'put ''Q29tcHV0ZUNvbnRleHRDaGFuZ2UoaSkpfSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKTtyZXR1cm4gdWkoYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0LGkpfHwoYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0PWkpLG10KGkpfSksY3QoMSxyaXQsMiwy''@;'; put 'put ''LCJvcHRpb24iLDM1KSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO2xpKCJuZ01vZGVsIixlLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpLGFlKCkseWUoIm5nRm9yT2YiLGUuY29tcHV0ZUNvbnRleHRzKX19ZnVuY3Rpb24gYWl0KG4sdCl7MSZuJiZWdCgwLCJjbHItc3Bpbm5lciIsMzcpfWZ1''@;'; put 'put ''bmN0aW9uIG9pdChuLHQpe2lmKDEmbiYmKHJpKDApLHJlKDEsImxhYmVsIiwyKSxUZSgyLCJSdW5uaW5nIGFzIHVzZXI6IiksaWUoKSxyZSgzLCJkaXYiLDMpKDQsImRpdiIsNCkoNSwicCIsNSksVGUoNiksaWUoKSgpKCksaWkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoNiksdnIoZS5ydW5u''@;'; put 'put ''aW5nQXNVc2VyKX19bGV0IHNpdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyxtKXt0aGlzLmV2ZW50U2VydmljZT1lLHRoaXMuZGVwbG95U2VydmljZT1yLHRoaXMuc2FzU2VydmljZT1pLHRoaXMuc2FzVml5YVNlcnZpY2U9YSx0aGlzLmxvZ2dlclNlcnZpY2U9Yyx0aGlz''@;'; put 'put ''LmhlbHBlclNlcnZpY2U9bSx0aGlzLnNhc0pzQ29uZmlnPW5ldyBoMi5TQVNqc0NvbmZpZyx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IFlyLHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29udGV4''@;'; put 'put ''dD0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuYXV0b2RlcGxveWluZz0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1p''@;'; put 'put ''dHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITAsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5hZG1pbkdyb3Vwc0xvYWRpbmc9ITEsdGhpcy5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSExLHRoaXMuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmFkbWluR3Jv''@;'; put 'put ''dXBzPVtdLHRoaXMuY3VycmVudFVzZXJJbmZvPW51bGwsdGhpcy5jb21wdXRlQ29udGV4dHM9W10sdGhpcy5hdXRvRGVwbG95U3RhdHVzPXtkZXBsb3lTZXJ2aWNlUGFjazpudWxsLHJ1bk1ha2VEYXRhOm51bGx9LHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29u''@;'; put 'put ''ZmlnKCksdGhpcy5kZXBsb3lJbk5ld1dpbmRvdz0hMH1uZ09uSW5pdCgpe3RoaXMubG9hZERhdGEoKX1sb2FkRGF0YSgpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7eWllbGQgZS5nZXRBZG1pbkdyb3VwcygpLHlpZWxkIGUuZ2V0Q29tcHV0ZUNvbnRleHRzKCkseWllbGQgZS5n''@;'; put 'put ''ZXRDdXJyZW50VXNlcigpLHNldFRpbWVvdXQoKCk9PntlLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQmJmUub25Db21wdXRlQ29udGV4dENoYW5nZShlLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpfSw1MDApfSkoKX1nZXRDb21wdXRlQ29udGV4dHMoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgocixpKT0+e2UuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMCxlLnNhc1ZpeWFTZXJ2aWNlLmdldENvbXB1dGVDb250ZXh0cygpLnN1YnNjcmliZShhPT57ZS5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExO2NvbnN0IGM9YS5pdGVtcy5maW5kKG09''@;'; put 'put ''PiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiPT09bS5uYW1lKTtjJiYoZS5zZWxlY3RlZENvbXB1dGVDb250ZXh0PWMuaWQpLGUuY29tcHV0ZUNvbnRleHRzPWEuaXRlbXMscigpfSxhPT57aShhKX0pfSl9KSgpfWdldEN1cnJlbnRVc2VyKCl7dmFyIGU9dGhpcztyZXR1cm4g''@;'; put 'put ''WihmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKHIsaSk9PntlLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITAsZS5zYXNWaXlhU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnN1YnNjcmliZShhPT57ZS5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSExLGUuY3VycmVudFVzZXJJbmZvPWEs''@;'; put 'put ''ZS5kY1BhdGg9YC9leHBvcnQvdml5YS9ob21lcy8ke2EuaWR9YCxyKCl9LGE9Pntjb25zb2xlLmVycm9yKCJFcnJvciB3aGlsZSBnZXR0aW5nIGN1cnJlbnQgdXNlciIsYSksaShhKX0pfSl9KSgpfWdldEFkbWluR3JvdXBzKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtyZXR1''@;'; put 'put ''cm4gbmV3IFByb21pc2UoKHIsaSk9PntlLmFkbWluR3JvdXBzTG9hZGluZz0hMCxlLnNhc1ZpeWFTZXJ2aWNlLmdldEFkbWluR3JvdXBzKCkuc3Vic2NyaWJlKGE9PntlLmFkbWluR3JvdXBzTG9hZGluZz0hMSxlLmFkbWluR3JvdXBzPWEuaXRlbXMubWFwKGM9Pih7aWQ6Yy5pZCxuYW1lOmMu''@;'; put 'put ''bmFtZX0pKSxyKCl9KX0pfSkoKX1vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGUpe3ZhciByPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7ci5zYXNWaXlhU2VydmljZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQoZSkuc3Vic2NyaWJlKGk9PntyLnJ1bm5pbmdBc1VzZXI9aS5hdHRyaWJ1dGVzJiZp''@;'; put 'put ''LmF0dHJpYnV0ZXMucnVuU2VydmVyQXM/aS5hdHRyaWJ1dGVzLnJ1blNlcnZlckFzOnIuY3VycmVudFVzZXJJbmZvPy5pZHx8InVua25vd24ifSl9KSgpfWdldENvbXB1dGVDb250ZXh0TmFtZShlKXtyZXR1cm4gdGhpcy5jb21wdXRlQ29udGV4dHMuZmluZChyPT5yLmlkPT09ZSk/Lm5hbWV8''@;'; put 'put ''fHZvaWQgMH1leGVjdXRlSnNvbigpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7ZS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBlLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGUuanNvbkZpbGUsZS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ITApLGUuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMCxlLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChyKXtsZXQgaT0iIjtyZXR1cm4gaT0ic3RyaW5nIiE9dHlwZW9mIHIubWVzc2FnZT9KU09OLnN0cmluZ2lmeShyKS5yZXBsYWNlKC9cXC9nbSwiIik6ci5tZXNzYWdl''@;'; put 'put ''LGUuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMSxlLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1pP2k6cn1gKSxlLmF1dG9kZXBsb3lpbmc9ITEsdm9pZChlLmF1dG9kZXBsb3lEb25lPSExKX1lLmlz''@;'; put 'put ''U3VibWl0dGluZ0pzb249ITF9KSgpfXJ1bkF1dG9EZXBsb3koKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKihyPSExKXtlLmRlcGxveUluTmV3V2luZG93fHwoZS5hdXRvZGVwbG95aW5nPSEwKSxyJiZlLmV4ZWN1dGVKc29uKCksZS5yZWNyZWF0ZURhdGFiYXNlP2UuY3JlYXRlRGF0''@;'; put 'put ''YWJhc2UoKTplLmRlcGxveUluTmV3V2luZG93fHwoZS5hdXRvZGVwbG95RG9uZT0hMCl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y3JlYXRlRGF0YWJhc2UoKXtsZXQgZT17ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHI9dGhp''@;'; put 'put ''cy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZTtpZih0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQubGVuZ3RoJiZ0aGlzLmNvbXB1dGVDb250ZXh0cy5sZW5ndGgpe2NvbnN0IGE9dGhpcy5nZXRDb21wdXRlQ29udGV4dE5hbWUodGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTthJiYocj1h''@;'; put 'put ''KX1sZXQgaT17dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOnIsZGVidWc6ITB9O3RoaXMuZGVwbG95SW5OZXdXaW5kb3c/dGhpcy5ydW5NYWtlZGF0YUluTmV3V2luZG93KHtjb250ZXh0TmFtZTpyLGFkbWluOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLGRjUGF0aDp0aGlzLmRjUGF0''@;'; put 'put ''aH0pOnRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLGUsaSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oYT0+e3RoaXMuYXV0b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmlu''@;'; put 'put ''Z2lmeShhKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9YX10aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ISEoYS5yZXN1bHQmJmEucmVzdWx0Lmxlbmd0aD4wKSx0eXBlb2YgYS5zYXNqc0Fib3J0PCJ1IiYmdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1h''@;'; put 'put ''a2VkYXRhIixhLnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDphLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDphLlNZU0VSUk9SVEVYVCxNQUM6YS5zYXNqc0Fib3J0WzBdLk1BQ30pLHRoaXMuaGVscGVyU2VydmljZS5pc1N0cmVhbWluZ1ZpeWEoKSYmdGhpcy51cGRhdGVJ''@;'; put 'put ''bmRleEh0bWxDb21wdXRlQ29udGV4dCgpfSkuY2F0Y2goYT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsSlNPTi5zdHJpbmdpZnkoYSkpLHRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0''@;'; put 'put ''aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoYSl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWF9fSl9cnVuTWFrZWRhdGFJbk5ld1dpbmRvdyhlKXtsZXQgcj10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxpPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGE9''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihyK2ErIi8/X3Byb2dyYW09IitpKyIvc2VydmljZXMvYWRtaW4vbWFrZWRhdGEiK2AmX2NvbnRleHRuYW1lPSR7ZS5jb250ZXh0TmFtZX1gK2AmYWRtaW49JHtlLmFkbWlufWArYCZkY3BhdGg9JHtlLmRjUGF0''@;'; put 'put ''aH0mX2RlYnVnPTEzMWApfXVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtjb25zdCByPWxvY2F0aW9uLnNlYXJjaC5zcGxpdCgiLyIpLnBvcCgpLGk9cj8uaW5jbHVkZXMoIi4iKT9yOnZvaWQgMDtpZighaSlyZXR1cm4gdm9p''@;'; put 'put ''ZCBlLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJXZSBjb3VsZCBub3QgZmlndXJlIG91dCB0aGUgZmlsZSBuYW1lIG9mIGBpbmRleC5odG1sYCBiYXNlZCBvbiB0aGUgdXJsLiIpO2NvbnN0IGE9eWllbGQgZS5zYXNTZXJ2aWNlLmdldEZpbGVDb250ZW50KGAke2UuYXBwTG9j''@;'; put 'put ''fS9zZXJ2aWNlc2AsaSk7aWYoIWEpcmV0dXJuIHZvaWQgZS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBGYWlsZWQgdG8gZ2V0ICR7aX0gYXQgJHtlLmFwcExvY30vc2VydmljZXNgKTtjb25zdCBjPWUuZ2V0Q29tcHV0ZUNvbnRleHROYW1lKGUuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCk7aWYoIWMp''@;'; put 'put ''cmV0dXJuIHZvaWQgZS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBDb21wdXRlIGNvbnRleHQgbmFtZSBub3QgZm91bmQgZm9yIElEOiAke2Uuc2VsZWN0ZWRDb21wdXRlQ29udGV4dH0gfCBMaXN0OiAke0pTT04uc3RyaW5naWZ5KGUuY29tcHV0ZUNvbnRleHRzKX1gKTtjb25zdCBtPWEucmVwbGFj''@;'; put 'put ''ZSgvY29udGV4dG5hbWU9IlteIl0qIi9nLGBjb250ZXh0bmFtZT0iJHtjfSJgKTt5aWVsZCBlLnNhc1NlcnZpY2UudXBkYXRlRmlsZUNvbnRlbnQoYCR7ZS5hcHBMb2N9L3NlcnZpY2VzYCxpLG0pLmNhdGNoKEM9PntlLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byB1cGRhdGUgRGF0''@;'; put 'put ''YUNvbnRyb2xsZXIuaHRtbDogJHtDfWApfSl9KSgpfWRvd25sb2FkRmlsZShlLHIsaT0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShlLHIsaSl9b25Kc29uRmlsZUNoYW5nZShlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2xldCBpPWUudGFyZ2V0LmZp''@;'; put 'put ''bGVzWzBdO3IuanNvbkZpbGU9eWllbGQgci5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGkpfSkoKX1yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChlKXshMD09PWUudGFyZ2V0LmNoZWNrZWQmJih0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMCl9Y2xlYXJVcGxvYWRJbnB1dChlKXt0aGlzLmRl''@;'; put 'put ''cGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChlKX1vcGVuU2FzUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKFNjKSxXZShhZ2UpLFdlKEpzKSxXZShxJCksV2UobWgpLFdlKEx1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtYXV0b21hdGljLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2Fz''@;'; put 'put ''SnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MiLGFwcExvYzoiYXBwTG9jIixkY1BhdGg6ImRjUGF0aCIsc2VsZWN0ZWRBZG1pbkdyb3VwOiJzZWxlY3RlZEFkbWluR3JvdXAifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5h''@;'; put 'put ''dmlnYXRlVG9Ib21lIn0sc3RhbmRhbG9uZTohMSxkZWNsczo0NCx2YXJzOjExLGNvbnN0czpbWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1i''@;'; put 'put ''LTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiLCJkYy1sb2MtaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciIsInNtYWxsLW10Il0sWyJjbHJJ''@;'; put 'put ''bnB1dCIsIiIsIm5hbWUiLCJkY2xvYyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsclNlbGVjdCIsIiIsIm5hbWUiLCJvcHRpb25zIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwiIiwiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJmb3IiLCJjb21wdXRlQ29udGV4dCIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFs0LCJuZ0lmIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW5D''@;'; put 'put ''aGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1k''@;'; put 'put ''ZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbMSwic3Bpbm5lciIsInNwaW5uZXItbWQiXSxbMSwibS0wIiwiYWxpZ24tc2VsZi1zdGFydCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJkZXBsb3ktc3RhdHVzLXJvdyIsNCwibmdJZiJdLFsxLCJidXR0b25zIl0sWzEsImJ0biIsImJ0bi1wcmlt''@;'; put 'put ''YXJ5IiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsiY2xhc3MiLCJkZXBsb3ktZXJyb3IiLCJzaGFwZSIsInRpbWVzLWNpcmNsZSIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwiYWxpZ24tc2VsZi1lbmQiLDMsImNsaWNrIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRh''@;'; put 'put ''cmQiLDEsImRlcGxveS1zdWNjZXNzIl0sWyJzaGFwZSIsInRpbWVzLWNpcmNsZSIsMSwiZGVwbG95LWVycm9yIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2''@;'; put 'put ''YWx1ZSJdLFsiY2xySW5saW5lIiwiIiwxLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYoY3QoMCxRcnQsNCwyLCJkaXYiLDApLHJlKDEsImg0IiwxKSxUZSgyLCJWaXlhIERlcGxveSIpLGllKCksVnQoMywiaHIiKSxyZSg0LCJsYWJlbCIsMiksVGUoNSwiQXBw''@;'; put 'put ''IExvYyIpLGllKCkscmUoNiwiZGl2IiwzKSg3LCJkaXYiLDQpKDgsInAiLDUpLFRlKDkpLGllKCkoKSgpLHJlKDEwLCJsYWJlbCIsMiksVGUoMTEsIkRDIExvYyIpLGllKCkscmUoMTIsImRpdiIsNikoMTMsImRpdiIsNykoMTQsImlucHV0Iiw4KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oYyl7cmV0dXJuIHVpKGkuZGNQYXRoLGMpfHwoaS5kY1BhdGg9YyksY30pLGllKCkoKSgpLHJlKDE1LCJsYWJlbCIsMiksVGUoMTYsIlNBUyBBZG1pbiBncm91cCIpLGllKCkscmUoMTcsImRpdiIsMykoMTgsImRpdiIsNyksY3QoMTksdGl0LDIsMiwic2VsZWN0Iiw5KSgyMCxuaXQsMSww''@;'; put 'put ''LCJjbHItc3Bpbm5lciIsMTApLGllKCkoKSxyZSgyMSwibGFiZWwiLDExKSxUZSgyMiwiQ29tcHV0ZSBDb250ZXh0IiksaWUoKSxyZSgyMywiZGl2IiwzKSgyNCwiZGl2Iiw3KSxjdCgyNSxpaXQsMiwyLCJzZWxlY3QiLDkpKDI2LGFpdCwxLDAsImNsci1zcGlubmVyIiwxMCksaWUoKSgpLGN0''@;'; put 'put ''KDI3LG9pdCw3LDEsIm5nLWNvbnRhaW5lciIsMTIpLFZ0KDI4LCJociIpLHJlKDI5LCJidXR0b24iLDEzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucnVuQXV0b0RlcGxveSgpfSksVGUoMzAsIiBEZXBsb3lcbiIpLGllKCkscmUoMzEsImNsci1tb2RhbCIsMTQpLGNpKCJjbHJN''@;'; put 'put ''b2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGMpe3JldHVybiB1aShpLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCxjKXx8KGkucmVjcmVhdGVEYXRhYmFzZU1vZGFsPWMpLGN9KSxyZSgzMiwiaDMiLDE1KSxUZSgzMywiV2FybmluZyIpLGllKCkscmUoMzQsImRpdiIsMTYpLFRlKDM1LCIgVGhpcyBh''@;'; put 'put ''Y3Rpb24gd2lsbCByZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIikscmUo''@;'; put 'put ''MzYsInN0cm9uZyIpLFRlKDM3KSxpZSgpLFRlKDM4LCIuICIpLGllKCkscmUoMzksImRpdiIsMTcpKDQwLCJidXR0b24iLDE4KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGkucmVjcmVhdGVEYXRhYmFzZT0hMX0pLFRlKDQxLCIgQ2Fu''@;'; put 'put ''Y2VsICIpLGllKCkscmUoNDIsImJ1dHRvbiIsMTgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsaS5yZWNyZWF0ZURhdGFiYXNlPSEwfSksVGUoNDMsIiBPayAiKSxpZSgpKCkoKSksMiZyJiYoeWUoIm5nSWYiLGkuYXV0b2RlcGxveWlu''@;'; put 'put ''ZyksYWUoOSksdnIoaS5hcHBMb2MpLGFlKDUpLGxpKCJuZ01vZGVsIixpLmRjUGF0aCksYWUoNSkseWUoIm5nSWYiLCFpLmFkbWluR3JvdXBzTG9hZGluZyksYWUoKSx5ZSgibmdJZiIsaS5hZG1pbkdyb3Vwc0xvYWRpbmcpLGFlKDUpLHllKCJuZ0lmIiwhaS5jb21wdXRlQ29udGV4dHNMb2Fk''@;'; put 'put ''aW5nKSxhZSgpLHllKCJuZ0lmIixpLmNvbXB1dGVDb250ZXh0c0xvYWRpbmcpLGFlKCkseWUoIm5nSWYiLGkucnVubmluZ0FzVXNlciksYWUoNCksbGkoImNsck1vZGFsT3BlbiIsaS5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpLHllKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksYWUoNiksdnIoaS5k''@;'; put 'put ''Y1BhdGgpKX0sZGVwZW5kZW5jaWVzOltocyxtYSxSZixMZix6bCxJZixpbCxRcyxVbCxodSxjMCxwcyxQZCxtdixTaF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtjb25zdCBIcT0oKT0+KHtzdGFuZGFsb25lOiEwfSk7ZnVuY3Rpb24gbGl0KG4sdCl7MSZuJiYocmUoMCwiZGl2''@;'; put 'put ''Iiw2KSgxLCJwIiw3KSxUZSgyLCJQbGVhc2UgbG9nIGluIGZpcnN0IiksaWUoKSxyZSgzLCJsYWJlbCIsOCksVGUoNCwiVXNlcm5hbWUiKSxpZSgpLHJlKDUsImRpdiIsOSkoNiwiZGl2IiwxMCksVnQoNywiaW5wdXQiLDExKSxpZSgpKCkscmUoOCwibGFiZWwiLDEyKSxUZSg5LCJQYXNzd29y''@;'; put 'put ''ZCIpLGllKCkscmUoMTAsImRpdiIsOSkoMTEsImRpdiIsMTApLFZ0KDEyLCJpbnB1dCIsMTMpLGllKCkoKSxyZSgxMywiYnV0dG9uIiwxNCksVGUoMTQsIkxvZyBpbiIpLGllKCkoKSl9ZnVuY3Rpb24gY2l0KG4sdCl7aWYoMSZuJiYocmUoMCwib3B0aW9uIiwzNiksVGUoMSksaWUoKSksMiZu''@;'; put 'put ''KXtjb25zdCBlPXQuJGltcGxpY2l0O3llKCJ2YWx1ZSIsZS5pZCksYWUoKSxNcigiICIsZS5uYW1lLCIgIil9fWZ1bmN0aW9uIHVpdChuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iKSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQ7YWUoKSxNcigiKCAiLGUuYXR0cmli''@;'; put 'put ''dXRlcy5zeXNVc2VySWQsIiApIil9fWZ1bmN0aW9uIGRpdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIsMzYpLFRlKDEpLGN0KDIsdWl0LDIsMSwic3BhbiIsNSksaGwoMywianNvbiIpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgidmFsdWUiLGUubmFtZSksYWUoKSxN''@;'; put 'put ''cigiICIsZS5uYW1lLCIgIiksYWUoKSx5ZSgibmdJZiIsInt9IiE9UmMoMywzLGUuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBoaXQobix0KXsxJm4mJihyZSgwLCJzcGFuIiksVGUoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IiksaWUoKSl9ZnVuY3Rpb24gZml0KG4sdCl7aWYoMSZu''@;'; put 'put ''KXtjb25zdCBlPUluKCk7cmUoMCwiYnV0dG9uIiwzNyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSksVnQoMSwiY2xyLWljb24iLDM4KSxpZSgpfX1mdW5jdGlvbiBwaXQobix0KXtpZigxJm4pe2NvbnN0IGU9''@;'; put 'put ''SW4oKTtyaSgwKSxyZSgxLCJwIiwzOSksVGUoMiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLGllKCksVnQoMywiaHIiKSxyZSg0LCJkaXYiKSg1LCJidXR0b24iLDQwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gbXQoaS5kb3dubG9hZEZpbGUo''@;'; put 'put ''aS5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4dCIpKX0pLFRlKDYsIiBEb3dubG9hZCBsb2cgIiksaWUoKSgpLGlpKCl9fWZ1bmN0aW9uIGdpdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsNDQpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgzKTthZSgpLE1yKCIgIixlLm1h''@;'; put 'put ''a2VEYXRhUmVzcG9uc2UsIiAiKX19ZnVuY3Rpb24gbWl0KG4sdCl7MSZuJiYocmkoMCkscmUoMSwic3BhbiIsMjUpLFRlKDIsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxpZSgpLHJlKDMsInNwYW4iKSxUZSg0LCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaWUoKSxpaSgpKX1mdW5jdGlv''@;'; put 'put ''biB2aXQobix0KXsxJm4mJihyaSgwKSxWdCgxLCJjbHItaWNvbiIsNDYpLHJlKDIsInNwYW4iKSxUZSgzLCIgVmFsaWRhdGlvbiBmYWlsZWQgIiksaWUoKSxpaSgpKX1mdW5jdGlvbiB5aXQobix0KXsxJm4mJihyaSgwKSxWdCgxLCJjbHItaWNvbiIsNDcpLHJlKDIsInNwYW4iKSxUZSgzLCIg''@;'; put 'put ''VmFsaWRhdGlvbiBzdWNjZWVkZWQgIiksaWUoKSxpaSgpKX1mdW5jdGlvbiBfaXQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDQ1KSxjdCgxLG1pdCw1LDAsIm5nLWNvbnRhaW5lciIsNSkoMix2aXQsNCwwLCJuZy1jb250YWluZXIiLDUpKDMseWl0LDQsMCwibmctY29udGFpbmVyIiw1KSxp''@;'; put 'put ''ZSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSx5ZSgibmdJZiIsZS5pc1ZhbGlkYXRpbmcpLGFlKCkseWUoIm5nSWYiLCFlLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWUudmFsaWRhdGlvblN0YXRlKSxhZSgpLHllKCJuZ0lmIiwhZS5pc1ZhbGlkYXRpbmcmJiJzdWNjZXNzIj09PWUudmFs''@;'; put 'put ''aWRhdGlvblN0YXRlKX19ZnVuY3Rpb24gYml0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwicCIsMzkpLFRlKDIsIkNyZWF0ZSBEYXRhYmFzZSBDb21wbGV0ZWQiKSxpZSgpLFZ0KDMsImhyIiksY3QoNCxnaXQsMiwxLCJkaXYiLDQxKSxyZSg1LCJidXR0b24iLDQyKSxr''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksVGUoNiwiIExldCdzIGdldCBzdGFydGVkICIpLGllKCkscmUoNywiYnV0dG9uIiw0Miksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMik7cmV0dXJuIG10''@;'; put 'put ''KGkuZG93bmxvYWRGaWxlKGkubWFrZURhdGFSZXNwb25zZSwiY3JlYXRlLWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLFRlKDgsIiBEb3dubG9hZCBsb2cgIiksaWUoKSxyZSg5LCJidXR0b24iLDQyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLnZhbGlkYXRl''@;'; put 'put ''RGVwbG95KCkpfSksVGUoMTAsIiBWYWxpZGF0ZSAiKSxpZSgpLGN0KDExLF9pdCw0LDMsImRpdiIsNDMpLGlpKCl9aWYoMiZuKXtjb25zdCBlPUVlKDIpO2FlKDQpLHllKCJuZ0lmIixlLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApLGFlKDcpLHllKCJuZ0lmIiwibm9uZSIhPT1lLnZhbGlk''@;'; put 'put ''YXRpb25TdGF0ZXx8ZS5pc1ZhbGlkYXRpbmcpfX1mdW5jdGlvbiB3aXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyaSgwKSxyZSgxLCJmb3JtIikoMiwiZGl2IiwxNSkoMywibGFiZWwiLDE2KSxUZSg0LCJBZG1pbiBncm91cCIpLGllKCkscmUoNSwiZGl2IiwxNykoNiwiZGl2IiwxOCko''@;'; put 'put ''Nywic2VsZWN0IiwxOSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKTtyZXR1cm4gdWkoYS5zZWxlY3RlZEFkbWluR3JvdXAsaSl8fChhLnNlbGVjdGVkQWRtaW5Hcm91cD1pKSxtdChpKX0pLGN0KDgsY2l0LDIsMiwib3B0aW9uIiwyMCksaWUoKSgp''@;'; put 'put ''KCkoKSxyZSg5LCJkaXYiLDE1KSgxMCwiZGl2IikoMTEsImxhYmVsIiwxNiksVGUoMTIsIkNvbnRleHQiKSxpZSgpLHJlKDEzLCJkaXYiLDE3KSgxNCwiZGl2IiwxOCkoMTUsInNlbGVjdCIsMjEpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0''@;'; put 'put ''dXJuIHVpKGEuc2VsZWN0ZWRDb250ZXh0LGkpfHwoYS5zZWxlY3RlZENvbnRleHQ9aSksbXQoaSl9KSxjdCgxNixkaXQsNCw1LCJvcHRpb24iLDIwKSxpZSgpKCkoKSxyZSgxNywiYnV0dG9uIiwyMiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmV4ZWN1dGFi''@;'; put 'put ''bGVDb250ZXh0KCkpfSksVnQoMTgsImNsci1pY29uIiwyMyksaWUoKSgpLHJlKDE5LCJkaXYiLDI0KSgyMCwic3BhbiIsMjUpLFRlKDIxLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxpZSgpLHJlKDIyLCJzcGFuIiksVGUoMjMsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLGllKCkoKSxyZSgy''@;'; put 'put ''NCwibGFiZWwiLDI2KSxUZSgyNSwiREMgTG9jIiksaWUoKSxyZSgyNiwiZGl2Iiw5KSgyNywiZGl2IiwxMCkoMjgsImlucHV0IiwyNyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKTtyZXR1cm4gdWkoYS5kY1BhdGgsaSl8fChhLmRjUGF0aD1pKSxt''@;'; put 'put ''dChpKX0pLGt0KCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5zYXZlRGNQYXRoKCkpfSksaWUoKSgpKCkscmUoMjksInAiLDI4KSxUZSgzMCwiIFNlbGVjdCBKU09OIGZpbGUgdG8gdXBsb2FkIChqc29uIGJ1aWxkIGZpbGUgcHJlbG9hZGVkKTogIiksaWUoKSxy''@;'; put 'put ''ZSgzMSwiZGl2IiwyOSkoMzIsImlucHV0IiwzMCksa3QoImNsaWNrIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5jbGVhclVwbG9hZElucHV0KGkpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgpLm9uSnNvbkZpbGVDaGFuZ2UoaSkpfSksaWUo''@;'; put 'put ''KSgpLHJlKDMzLCJkaXYiLDMxKSgzNCwiYnV0dG9uIiwzMiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmV4ZWN1dGVKc29uKCkpfSksVGUoMzUsIiBTVUJNSVQgSlNPTiAiKSxpZSgpLGN0KDM2LGhpdCwyLDAsInNwYW4iLDUpLGllKCkscmUoMzcsInAiLDI4''@;'; put 'put ''KSxUZSgzOCwiU2VsZWN0IFNBUyBmaWxlIHRvIHVwbG9hZDoiKSxpZSgpLHJlKDM5LCJkaXYiLDI5KSg0MCwiaW5wdXQiLDMwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgpLmNsZWFyVXBsb2FkSW5wdXQoaSkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaSl7Z3Qo''@;'; put 'put ''ZSk7Y29uc3QgYT1FZSgpO3JldHVybiBhLm9uU2FzRmlsZUNoYW5nZShpKSxtdChhLmRvd25sb2FkRmlsZUJ0bj0hMCl9KSxpZSgpLGN0KDQxLGZpdCwyLDAsImJ1dHRvbiIsMzMpLGllKCkscmUoNDIsImRpdiIsMzEpKDQzLCJidXR0b24iLDM0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGd0KGUpLG10KEVlKCkuZXhlY3V0ZVNBUygpKX0pLFRlKDQ0LCIgU1VCTUlUICIpLGllKCkoKSgpLGN0KDQ1LHBpdCw3LDAsIm5nLWNvbnRhaW5lciIsNSkscmUoNDYsImJ1dHRvbiIsMzUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5jcmVhdGVEYXRh''@;'; put 'put ''YmFzZSgpKX0pLFRlKDQ3LCIgQ3JlYXRlIERhdGFiYXNlICIpLGllKCksY3QoNDgsYml0LDEyLDIsIm5nLWNvbnRhaW5lciIsNSksaWUoKSxpaSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO2FlKDcpLGxpKCJuZ01vZGVsIixlLnNlbGVjdGVkQWRtaW5Hcm91cCkseWUoIm5nTW9kZWxPcHRpb25z''@;'; put 'put ''IixubCgxOSxIcSkpLGFlKCkseWUoIm5nRm9yT2YiLGUuYWRtaW5Hcm91cHMpLGFlKDIpLGJyKCJoaWRkZW4iLGUuY29udGV4dHNMb2FkaW5nKSxhZSg1KSxsaSgibmdNb2RlbCIsZS5zZWxlY3RlZENvbnRleHQpLHllKCJuZ01vZGVsT3B0aW9ucyIsbmwoMjAsSHEpKSxhZSgpLHllKCJuZ0Zv''@;'; put 'put ''ck9mIixlLmFsbENvbnRleHRzKSxhZSgzKSxicigiaGlkZGVuIiwhZS5jb250ZXh0c0xvYWRpbmcpLGFlKDkpLGxpKCJuZ01vZGVsIixlLmRjUGF0aCkseWUoIm5nTW9kZWxPcHRpb25zIixubCgyMSxIcSkpLGFlKDYpLHllKCJjbHJMb2FkaW5nIixlLmlzU3VibWl0dGluZ0pzb24pLGFlKDIp''@;'; put 'put ''LHllKCJuZ0lmIixlLmlzSnNvblN1Ym1pdHRlZCksYWUoNSkseWUoIm5nSWYiLGUuZG93bmxvYWRGaWxlQnRuKSxhZSgyKSx5ZSgiY2xyTG9hZGluZyIsZS5leGVjdXRpbmdTY3JpcHQpLGFlKDIpLHllKCJuZ0lmIixlLmpvYkxvZy5sZW5ndGg+MCksYWUoKSx5ZSgiY2xyTG9hZGluZyIsZS5j''@;'; put 'put ''cmVhdGVEYXRhYmFzZUxvYWRpbmcpLGFlKDIpLHllKCJuZ0lmIixlLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApfX1sZXQgQ2l0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5zYXNTZXJ2aWNlPWUsdGhpcy5ldmVudFNlcnZpY2U9cix0aGlzLmxvZ2dlclNlcnZp''@;'; put 'put ''Y2U9aSx0aGlzLmRlcGxveVNlcnZpY2U9YSx0aGlzLnNhc0pzQ29uZmlnPW5ldyBoMi5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IFlyLHRoaXMubmVlZHNMb2dpbj0hMSx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5hcHBMb2M9IiIs''@;'; put 'put ''dGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENvbnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMubGluZXNPZkNvZGU9W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRlZEZpbGU9ITAs''@;'; put 'put ''dGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRvd25sb2FkRmlsZUJ0bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpzb25GaWxlPW51''@;'; put 'put ''bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgpe3JldHVybiBaKGZ1bmN0aW9uKigpe30pKCl9Y2xlYXJVcGxvYWRJbnB1dChlKXt0aGlzLmRl''@;'; put 'put ''cGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChlKX1vblNhc0ZpbGVDaGFuZ2UoZSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCByPWUudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZmlsZU5hbWU9ci5uYW1lO2xldCBpPW5ldyBGaWxlUmVhZGVyO2kub25sb2FkPSgpPT57aS5yZXN1bHQmJih0''@;'; put 'put ''aGlzLmxpbmVzT2ZDb2RlPWkucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoYT0+IiIhPT1hJiZudWxsIT09YSksdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMCx0aGlzLmFkZFByZWNvZGVMaW5lcygpKX0saS5yZWFkQXNUZXh0KHIp''@;'; put 'put ''fW9uSnNvbkZpbGVDaGFuZ2UoZSl7dmFyIHI9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtsZXQgaT1lLnRhcmdldC5maWxlc1swXTtyLmpzb25GaWxlPXlpZWxkIHIuZGVwbG95U2VydmljZS5yZWFkRmlsZShpKX0pKCl9YWRkUHJlY29kZUxpbmVzKCl7dGhpcy5saW5lc09mQ29kZS51bnNo''@;'; put 'put ''aWZ0KGAlbGV0IGNvbnRleHQ9JHt0aGlzLnNlbGVjdGVkQ29udGV4dH07YCxgJWxldCBhcHBMb2M9JHt0aGlzLmFwcExvY307YCxgJWxldCBhZG1pbj0ke3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfTtgLGAlbGV0IGRjcGF0aD0ke3RoaXMuZGNQYXRofTtgKX1kb3dubG9hZFNhc1ByZWNvZGVG''@;'; put 'put ''aWxlKCl7bGV0IGU9dGhpcy5saW5lc09mQ29kZS5qb2luKCJcbiIpLHI9dGhpcy5maWxlTmFtZS5zcGxpdCgiLiIpWzBdO3RoaXMuZG93bmxvYWRGaWxlKGUsciwic2FzIil9ZG93bmxvYWRGaWxlKGUscixpPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGUscixpKX1z''@;'; put 'put ''YXZlRGNQYXRoKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImRlcGxveV9kY19sb2MiLHRoaXMuZGNQYXRoKX1leGVjdXRlSnNvbigpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7ZS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBlLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNr''@;'; put 'put ''KGUuanNvbkZpbGUsZS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9pZCAwLCEwKSxlLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChyKXtsZXQgaT0iIjtyZXR1cm4gaT0ic3RyaW5nIiE9dHlwZW9mIHIubWVzc2FnZT9KU09OLnN0cmluZ2lmeShyKS5yZXBsYWNlKC9c''@;'; put 'put ''XC9nbSwiIik6ci5tZXNzYWdlLHZvaWQgZS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aT9pOnJ9YCl9ZS5pc1N1Ym1pdHRpbmdKc29uPSExfSkoKX1leGVjdXRlU0FTKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlv''@;'; put 'put ''biooKXtlLmV4ZWN1dGluZ1NjcmlwdD0hMCxlLmpvYkxvZz0iIixlLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCByPXlpZWxkIGUuc2FzSnMuZXhlY3V0ZVNjcmlwdCh7ZmlsZU5hbWU6ZS5maWxlTmFtZSxsaW5lc09mQ29kZTplLmxpbmVzT2ZDb2RlLGNvbnRleHROYW1lOmUuc2VsZWN0''@;'; put 'put ''ZWRDb250ZXh0fSk7ZS5sb2dnZXJTZXJ2aWNlLmxvZyhyKSwic3RyaW5nIj09dHlwZW9mIHIubG9nJiYoci5sb2c9SlNPTi5wYXJzZShyLmxvZykpLCJlcnJvciI9PT1yLmpvYlN0YXR1cz9hbGVydCgiRXJyb3IhIik6ZS5qb2JMb2c9ci5sb2cuaXRlbXM/ci5sb2cuaXRlbXMubWFwKGk9Pmku''@;'; put 'put ''bGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShyLmxvZyksZS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7ZS5leGVjdXRpbmdTY3JpcHQ9ITF9fSkoKX1jcmVhdGVEYXRhYmFzZShlPSEwKXtpZihlKXtsZXQgYT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5zZXJ2ZXJV''@;'; put 'put ''cmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRhJkFETUlOPSIrdGhpcy5zZWxlY3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9Iit0aGlzLmRjUGF0aCsiJl9kZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGEs''@;'; put 'put ''Il9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlzLmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFw''@;'; put 'put ''aTpudWxsLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihhPT57dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShhKX1jYXRjaHt0aGlz''@;'; put 'put ''Lm1ha2VEYXRhUmVzcG9uc2U9YX10aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMX0pLmNhdGNoKGE9Pnt0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMTt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGEpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1h''@;'; put 'put ''fX0pfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX12YWxpZGF0ZURlcGxveSgpe3RoaXMuaXNWYWxpZGF0aW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvc3RhcnR1cHNlcnZpY2UiLG51bGwpLnRoZW4oZT0+e3RoaXMubG9nZ2VyU2Vy''@;'; put 'put ''dmljZS5sb2coZS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMudmFsaWRhdGlvblN0YXRlPWUuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChlPT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy52YWxpZGF0aW9uU3Rh''@;'; put 'put ''dGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEpzKSxXZShTYyksV2UobWgpLFdlKGFnZSkpfX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToi''@;'; put 'put ''b25OYXZpZ2F0ZVRvSG9tZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJkLWlubGluZS1ibG9jayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xl''@;'; put 'put ''YXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsImNsYXNzIiwiZC1ub25lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImlkIiwibG9naW5Gb3JtIiwxLCJkLW5vbmUiXSxbMSwibWItMTAiXSxb''@;'; put 'put ''ImZvciIsInVzZXJuYW1lIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsidHlwZSIsInRleHQiLCJpZCIsInVzZXJuYW1lIiwxLCJjbHItaW5wdXQiXSxbImZvciIsInBhc3N3b3JkIiwx''@;'; put 'put ''LCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsInBhc3N3b3JkIiwiaWQiLCJwYXNzd29yZCIsMSwiY2xyLWlucHV0Il0sWyJpZCIsImxvZ2luQnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImQtbm9uZSJdLFsxLCJjbHItZm9ybS1jb250cm9sIl0sWyJmb3IiLCJzZWxlY3QtZnVsbCIs''@;'; put 'put ''MSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsibmFtZSIsInNlbGVjdGVkQWRtaW5Hcm91cCIsImlkIiwiYWRtaW5Hcm91cHNTZWxlY3QiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWxDaGFuZ2UiLCJu''@;'; put 'put ''Z01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibmFtZSIsInNlbGVjdGVkQ29udGV4dCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFsidHlwZSIsImJ1dHRvbiIsImlk''@;'; put 'put ''IiwiY29udGV4dHMtYnRuIiwxLCJidG4iLCJidG4taWNvbiIsMywiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJkLWZsZXgiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwibXItMTAiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWyJu''@;'; put 'put ''YW1lIiwiZGNQYXRoIiwidHlwZSIsInRleHQiLCJpZCIsImRjbG9jIiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJmb2N1c291dCIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFsxLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsidHlwZSIsImZpbGUi''@;'; put 'put ''LDMsImNsaWNrIiwiY2hhbmdlIl0sWzEsIm10LTIwIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsIiIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJjbGFzcyIsImJ0biBidG4tc20gYnRuLWljb24gbWluLXctMCB3LTQwIiwzLCJjbGljayIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMywidmFsdWUiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIs''@;'; put 'put ''MywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwibWItMCIsIm10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1Iiwz''@;'; put 'put ''LCJjbGljayJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWJhciIsNCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2Vz''@;'; put 'put ''cyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImRpdiIsMCksVGUoMSwiIENvbmZpZ3VyYXRvciAiKSxyZSgyLCJwIiwxKSxUZSgzKSxpZSgpLHJlKDQsImJ1dHRvbiIsMiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmRlbGV0ZUtleXMoKX0pLFRlKDUsIiBD''@;'; put 'put ''bGVhciBtZW1vcnkgIiksaWUoKSgpLHJlKDYsImRpdiIsMyksY3QoNyxsaXQsMTUsMCwiZGl2Iiw0KSg4LHdpdCw0OSwyMiwibmctY29udGFpbmVyIiw1KSxpZSgpKSwyJnImJihhZSgzKSxNcigiQXBwIExvY2F0aW9uOiAiLGkuYXBwTG9jLCIiKSxhZSg0KSx5ZSgibmdJZiIsaS5uZWVkc0xv''@;'; put 'put ''Z2luKSxhZSgpLHllKCJuZ0lmIiwhaS5uZWVkc0xvZ2luKSl9LGRlcGVuZGVuY2llczpbaHMsbWEsUTksUmYsTGYsemwsSWYsaWwscTksUXMscTMsVWwsUzEsVmYscHMsQUddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gU2l0KG4sdCl7MSZuJiYocmUoMCwiZGl2''@;'; put 'put ''IiwxNSksVnQoMSwicHJvZ3Jlc3MiKSxpZSgpKX1mdW5jdGlvbiBNaXQobix0KXtpZigxJm4mJihyZSgwLCJvcHRpb24iLDE2KSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7eWUoInZhbHVlIixlLkdST1VQTkFNRSksYWUoKSxuMCgiICIsZS5HUk9VUE5BTUUsIiAtICIs''@;'; put 'put ''ZS5HUk9VUERFU0MsIiAiKX19bGV0IHhpdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLnNhc1NlcnZpY2U9ZSx0aGlzLnNhc2pzU2VydmljZT1yLHRoaXMubG9jYXRpb249aSx0aGlzLnNhc0pzQ29uZmlnPW5ldyBoMi5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVU''@;'; put 'put ''b0hvbWU9bmV3IFlyLHRoaXMuZGNEaXJlY3Rvcnk9IiIsdGhpcy5kY0FkbWluR3JvdXA9IkRDREVGQVVMVCIsdGhpcy5NRVRBUEVSU09OPSJuL2EiLHRoaXMuTUVUQVVTRVI9Im4vYSIsdGhpcy5TWVNVU0VSSUQ9Im4vYSIsdGhpcy5TWVNIT1NUTkFNRT0ibi9hIix0aGlzLlNZU1ZMT05HPSJu''@;'; put 'put ''L2EiLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1bXSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5zaG93TG9nb3V0PSExLHRoaXMudG1wRGlyZWN0b3JpZXM9e2xpbnV4OiIvdG1wL0RhdGFDb250cm9sbGVyIix3aW5kb3dzOiJDOlxcRGF0YUNvbnRyb2xsZXIifX1uZ09uSW5pdCgpe3RoaXMuZ2V0VXNl''@;'; put 'put ''ckdyb3VwcygpLHRoaXMuZ2V0U2VydmVySW5mbygpfWdldFNlcnZlckluZm8oKXt0aGlzLnNhc2pzU2VydmljZS5nZXRTZXJ2ZXJJbmZvKCkuc3Vic2NyaWJlKGU9PnsiZGVza3RvcCIhPT1lLm1vZGUmJih0aGlzLnNob3dMb2dvdXQ9ITApfSl9Z2V0VXNlckdyb3Vwcygpe3RoaXMubG9hZGlu''@;'; put 'put ''Zz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLG51bGwpLnRoZW4oZT0+e3RoaXMuTUVUQVBFUlNPTj1lLmFkYXB0ZXJSZXNwb25zZS5NRl9HRVRVU0VSLHRoaXMuU1lTVVNFUklEPWUuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCx0aGlz''@;'; put 'put ''LlNZU0hPU1ROQU1FPWUuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1ROQU1FLHRoaXMuU1lTVkxPTkc9ZS5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9yeT10aGlzLnRtcERpcmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGUuYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6IndpbmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9ZS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMuZGNBZG1pbkdyb3VwPXRoaXMuZGNBZG1pbkdyb3VwTGlzdFswXS5HUk9VUE5BTUUsdGhpcy5sb2FkaW5nPSExfSxlPT57''@;'; put 'put ''dGhpcy5sb2FkaW5nPSExfSl9bWFrZURhdGEoKXtsZXQgcj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2NvbnN0IGk9dGhpcy5zYXNKc0NvbmZpZy5hcHBMb2M7bGV0IGE9dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwsYz10aGlzLmRjRGlyZWN0b3J5O3RoaXMuc2FzSnND''@;'; put 'put ''b25maWcuc2VydmVyVHlwZT09PUMxLlkuU2FzanM/dGhpcy5zYXNTZXJ2aWNlLnNhc2pzTWFrZWRhdGFDaGVja2luZygpLnRoZW4oQz0+e0MmJih0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiLyIpLGxvY2F0aW9uLnJlbG9hZCgpKX0pOnRoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09''@;'; put 'put ''PUMxLlkuU2FzOSYmKGE9IiIscj13aW5kb3cubG9jYXRpb24ub3JpZ2luK3IrIi8iLGM9ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZGNEaXJlY3RvcnkpKSx3aW5kb3cub3BlbihgJHthfHwiIn0ke3J9P19wcm9ncmFtPSR7aX0vc2VydmljZXMvYWRtaW4vbWFrZWRhdGEmYWRtaW49JHt0aGlz''@;'; put 'put ''LmRjQWRtaW5Hcm91cH0mcGF0aD0ke2N9IGAsIl9ibGFuayIpfWxvZ291dCgpe3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShKcyksV2UoT2hlKSxXZShsMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVj''@;'; put 'put ''bXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21l''@;'; put 'put ''OiJvbk5hdmlnYXRlVG9Ib21lIn0sc3RhbmRhbG9uZTohMSxkZWNsczo0NCx2YXJzOjEwLGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJt''@;'; put 'put ''LTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0Iiwz''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3Vj''@;'; put 'put ''Y2VzcyIsIm10LTE1IiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihjdCgwLFNp''@;'; put 'put ''dCwyLDAsImRpdiIsMCkscmUoMSwiaDQiLDEpLFRlKDIsIlNhc2pzIERlcGxveSIpLGllKCksVnQoMywiaHIiLDIpLHJlKDQsInAiLDMpLFRlKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6''@;'; put 'put ''XG4iKSxpZSgpLHJlKDYsInAiLDQpLFRlKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSAob24gdGhlICIpLHJlKDgsInN0cm9uZyIpLFRlKDkpLGllKCksVGUoMTAsIiBjb21wdXRlIHNlcnZlcikgYmVsb3csIHRvIHdoaWNoIHVzZXIgIikscmUoMTEsInN0cm9uZyIp''@;'; put 'put ''LFRlKDEyKSxpZSgpLFRlKDEzLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyLlxuIiksaWUoKSxyZSgxNCwibGFiZWwiLDUpLFRlKDE1LCJEQyBTdGFnaW5nIERpcmVjdG9yeSIpLGllKCkscmUoMTYsImRpdiIsNikoMTcsImRpdiIsNykoMTgsImlucHV0Iiw4KSxj''@;'; put 'put ''aSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGkuZGNEaXJlY3RvcnksYyl8fChpLmRjRGlyZWN0b3J5PWMpLGN9KSxpZSgpKCkoKSxyZSgxOSwicCIsNCksVGUoMjAsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBn''@;'; put 'put ''cm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSxpZSgpLHJlKDIxLCJsYWJlbCIsNSksVGUoMjIsIkRh''@;'; put 'put ''dGEgQ29udHJvbGxlciBBZG1pbiBncm91cCIpLGllKCkscmUoMjMsImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyNCwic2VsZWN0IiwxMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGMpe3JldHVybiB1aShpLmRjQWRtaW5Hcm91cCxjKXx8KGkuZGNBZG1pbkdyb3VwPWMpLGN9KSxj''@;'; put 'put ''dCgyNSxNaXQsMiwzLCJvcHRpb24iLDExKSxpZSgpKCkscmUoMjYsInAiLDQpLFRlKDI3LCIgTm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLGllKCks''@;'; put 'put ''cmUoMjgsImRpdiIsMTIpKDI5LCJidXR0b24iLDEzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubWFrZURhdGEoKX0pLFRlKDMwLCIgU1VCTUlUICIpLGllKCkoKSxWdCgzMSwiaHIiLDIpLHJlKDMyLCJkaXYiLDE0KSgzMywicCIpLFRlKDM0LCJZb3UgYXJlIGNvbm5lY3RlZCB3''@;'; put 'put ''aXRoIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6IiksaWUoKSxyZSgzNSwidWwiKSgzNiwibGkiKSxUZSgzNyksaWUoKSxyZSgzOCwibGkiKSxUZSgzOSksaWUoKSxyZSg0MCwibGkiKSxUZSg0MSksaWUoKSxyZSg0MiwibGkiKSxUZSg0MyksaWUoKSgpKCkpLDImciYmKHllKCJuZ0lmIixp''@;'; put 'put ''LmxvYWRpbmcpLGFlKDkpLE1yKCIgIixpLlNZU0hPU1ROQU1FLCIiKSxhZSgzKSx2cihpLlNZU1VTRVJJRCksYWUoNiksbGkoIm5nTW9kZWwiLGkuZGNEaXJlY3RvcnkpLGFlKDYpLGxpKCJuZ01vZGVsIixpLmRjQWRtaW5Hcm91cCksYWUoKSx5ZSgibmdGb3JPZiIsaS5kY0FkbWluR3JvdXBM''@;'; put 'put ''aXN0KSxhZSgxMiksTXIoIk1FVEFQRVJTT046ICIsaS5NRVRBUEVSU09OLCIiKSxhZSgyKSxNcigiU1lTVVNFUklEOiAiLGkuU1lTVVNFUklELCIiKSxhZSgyKSxNcigiU1lTSE9TVE5BTUU6ICIsaS5TWVNIT1NUTkFNRSwiIiksYWUoMiksTXIoIlNZU1ZMT05HOiAiLGkuU1lTVkxPTkcsIiIp''@;'; put 'put ''KX0sZGVwZW5kZW5jaWVzOltocyxtYSxSZixMZix6bCxJZixpbCxRcyxwcyxtdixYd10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtmdW5jdGlvbiBFaXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksVGUoMiwiVGVybXMgYW5kIENv''@;'; put 'put ''bmRpdGlvbnMiKSxpZSgpLHJlKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJwIiw4KSxUZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBCZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRp''@;'; put 'put ''b24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIikscmUoNywiYSIsOSksVGUoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaWUoKSxUZSg5LCIuICIpLGllKCkoKSxW''@;'; put 'put ''dCgxMCwiaHIiLDEwKSxyZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwiaW5wdXQiLDExKSxrdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxpZSgpLHJlKDEzLCJsYWJlbCIpLFRlKDE0LCJJIGhhdmUgcmVhZCBh''@;'; put 'put ''bmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxyZSgxNSwiYSIsOSksVGUoMTYsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLGllKCkoKSgpKCkoKX19ZnVuY3Rpb24gVGl0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2''@;'; put 'put ''IiwxNikoMSwiYXBwLWF1dG9tYXRpYy1kZXBsb3kiLDE3KSxrdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSx5ZSgic2FzSnMiLGUuc2FzSnMp''@;'; put 'put ''KCJzYXNKc0NvbmZpZyIsZS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixlLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixlLmFwcExvYykoImRjUGF0aCIsZS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGUuc2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gQWl0''@;'; put 'put ''KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IiwxOCkoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE5KSxrdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGllKCkoKX1pZigyJm4pe2NvbnN0''@;'; put 'put ''IGU9RWUoMyk7YWUoKSx5ZSgic2FzSnMiLGUuc2FzSnMpKCJzYXNKc0NvbmZpZyIsZS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixlLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24ga2l0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxUaXQsMiw2LCJkaXYiLDE0KSgyLEFp''@;'; put 'put ''dCwyLDMsImRpdiIsMTUpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIixlLmF1dG9kZXBsb3kpLGFlKCkseWUoIm5nSWYiLCFlLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBEaXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyaSgwKSxyZSgxLCJkaXYiLDE2KSgyLCJh''@;'; put 'put ''cHAtc2FzanMtY29uZmlndXJhdG9yIiwxOSksa3QoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxpZSgpKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMik7YWUoMikseWUoInNhc0pzIixlLnNhc0pzKSgi''@;'; put 'put ''c2FzSnNDb25maWciLGUuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsZS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIElpdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE5KSxrdCgi''@;'; put 'put ''b25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGllKCkoKSxpaSgpfWlmKDImbil7Y29uc3QgZT1FZSgyKTthZSgyKSx5ZSgic2FzSnMiLGUuc2FzSnMpKCJzYXNKc0NvbmZpZyIsZS5zYXNKc0NvbmZpZykoImRj''@;'; put 'put ''QWRhcHRlclNldHRpbmdzIixlLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gUml0KG4sdCl7aWYoMSZuJiYocmkoMCwxMiksY3QoMSxraXQsMywyLCJuZy1jb250YWluZXIiLDEzKSgyLERpdCwzLDMsIm5nLWNvbnRhaW5lciIsMTMpKDMsSWl0LDMsMywibmctY29udGFpbmVyIiwxMyks''@;'; put 'put ''aWkoKSksMiZuKXtjb25zdCBlPUVlKCk7eWUoIm5nU3dpdGNoIiwhMCksYWUoKSx5ZSgibmdTd2l0Y2hDYXNlIixlLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1lLlNlcnZlclR5cGUuU2FzVml5YSksYWUoKSx5ZSgibmdTd2l0Y2hDYXNlIixlLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1l''@;'; put 'put ''LlNlcnZlclR5cGUuU2FzanMpLGFlKCkseWUoIm5nU3dpdGNoQ2FzZSIsZS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09ZS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgY2dlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5hcHBTdG9yZVNlcnZpY2U9ZSx0aGlzLnNhc1Nl''@;'; put 'put ''cnZpY2U9cix0aGlzLmxvZ2dlclNlcnZpY2U9aSx0aGlzLnJvdXRlcj1hLHRoaXMuc3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdy''@;'; put 'put ''b3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5zYXNKc0NvbmZpZz1uZXcgaDIuU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPUMxLlksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5n''@;'; put 'put ''cygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlzLnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRo''@;'; put 'put ''aXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRfc2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIp''@;'; put 'put ''fHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2V0RGVwbG95RGVmYXVsdHMoKX1zZXREZXBsb3lEZWZhdWx0cygpe3RoaXMuZGNQYXRoPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmRjUGF0aHx8IiIsdGhp''@;'; put 'put ''cy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYWRtaW5Hcm91cHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXB8fCh0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiKX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hdXRvZGVwbG95''@;'; put 'put ''fHx0aGlzLmdldEFkbWluR3JvdXBzKCksdGhpcy5zdGVwKyt9Z2V0QWRtaW5Hcm91cHMoKXtmZXRjaCh0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PTUwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24i''@;'; put 'put ''fX0pLnRoZW4oZT0+ZS50ZXh0KCkpLnRoZW4oZT0+e2xldCByO3RyeXtyPUpTT04ucGFyc2UoZSl9Y2F0Y2goaSl7Y29uc29sZS5lcnJvcihpKX1yJiYodGhpcy5hZG1pbkdyb3Vwcz1yLml0ZW1zLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuYWRtaW5Hcm91cHNbMF0uaWQpfSl9b25O''@;'; put 'put ''YXZpZ2F0ZVRvSG9tZSgpe3dpbmRvdy5vcGVuKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSwiX2JsYW5rIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoWjkpLFdlKEpzKSxXZShtaCksV2UocmwpKX19c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1kZXBsb3kiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiY2xyLXJvdyJd''@;'; put 'put ''LFsiaWQiLCJUQ1MiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiY2FyZC10ZXh0Il0sWzEsIm10LTAiXSxbImhyZWYiLCJodHRwczovL2Rv''@;'; put 'put ''Y3MuZGF0YWNvbnRyb2xsZXIuaW8vZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxb''@;'; put 'put ''ImNsYXNzIiwiYXV0b2RlcGxveS1zZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxveS1zZWN0aW9uIiwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRj''@;'; put 'put ''QWRhcHRlclNldHRpbmdzIiwiYXBwTG9jIiwiZGNQYXRoIiwic2VsZWN0ZWRBZG1pbkdyb3VwIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiXV0sdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24ocixpKXsxJnImJihyZSgwLCJkaXYiLDApKDEsImRpdiIsMSksY3QoMixFaXQsMTcsMCwiZGl2IiwyKSxpZSgpLGN0KDMsUml0LDQsNCwibmctY29udGFpbmVyIiwzKSxpZSgpKSwyJnImJihhZSgyKSx5ZSgibmdJZiIsMD09PWkuc3RlcCksYWUoKSx5ZSgibmdJZiIsaS5zdGVwPjApKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOlttYSxBZixvNCxwcyxDaCxiMixzaXQsQ2l0LHhpdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtjb25zdCBMaXQ9W3twYXRoOiIiLGNvbXBvbmVudDpjZ2V9LHtwYXRoOiJtYW51YWxkZXBsb3kiLGNvbXBvbmVudDpjZ2V9XTtsZXQgT2l0PSgoKT0+e2Ns''@;'; put 'put ''YXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltZYy5mb3JDaGlsZChMaXQpLFljXX0pfX1yZXR1cm4gbn0pKCks''@;'; put 'put ''UGl0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxPYyxNMSxPaXRdfSl9fXJldHVybiBu''@;'; put 'put ''fSkoKTtkKDQ5NTM3KSxkKDc3NTI1KSxkKDU3NzIpLGQoNjk4NzUpLGQoMTYwOTMpLGQoOTU2MDgpLGQoMTY0OTMpLGQoNjE5MzQpLGQoMTAxMDEpLGQoMjY4ODkpLGQoNDMyODcpLGQoNjU3NDUpLGQoMjk3MDgpLGQoNjUxMTcpLGQoMTAzNjMpO2NvbnN0e2VudHJpZXM6dWdlLHNldFByb3Rv''@;'; put 'put ''dHlwZU9mOmRnZSxpc0Zyb3plbjpGaXQsZ2V0UHJvdG90eXBlT2Y6SGl0LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpOaXR9PU9iamVjdDtsZXR7ZnJlZXplOkhkLHNlYWw6amYsY3JlYXRlOmxDfT1PYmplY3Qse2FwcGx5Ok5xLGNvbnN0cnVjdDpWcX09dHlwZW9mIFJlZmxlY3Q8InUiJiZS''@;'; put 'put ''ZWZsZWN0O0hkfHwoSGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxqZnx8KGpmPWZ1bmN0aW9uKHQpe3JldHVybiB0fSksTnF8fChOcT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHI+Mj9yLTI6MCksYT0yO2E8cjthKyspaVthLTJdPWFyZ3Vt''@;'; put 'put ''ZW50c1thXTtyZXR1cm4gdC5hcHBseShlLGkpfSksVnF8fChWcT1mdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlPjE/ZS0xOjApLGk9MTtpPGU7aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07cmV0dXJuIG5ldyB0KC4uLnIpfSk7Y29uc3QgUkE9dTAo''@;'; put 'put ''QXJyYXkucHJvdG90eXBlLmZvckVhY2gpLFZpdD11MChBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YpLGhnZT11MChBcnJheS5wcm90b3R5cGUucG9wKSxMQT11MChBcnJheS5wcm90b3R5cGUucHVzaCksQml0PXUwKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLE5kPUFycmF5LmlzQXJyYXks''@;'; put 'put ''T0E9dTAoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksQnE9dTAoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksZmdlPXUwKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLGNDPXUwKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSkscGdlPXUwKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiks''@;'; put 'put ''aml0PXUwKFN0cmluZy5wcm90b3R5cGUudHJpbSkseml0PXUwKE51bWJlci5wcm90b3R5cGUudG9TdHJpbmcpLFVpdD11MChCb29sZWFuLnByb3RvdHlwZS50b1N0cmluZyksZ2dlPXR5cGVvZiBCaWdJbnQ+InUiP251bGw6dTAoQmlnSW50LnByb3RvdHlwZS50b1N0cmluZyksbWdlPXR5cGVv''@;'; put 'put ''ZiBTeW1ib2w+InUiP251bGw6dTAoU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyksZnU9dTAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksUEE9dTAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykseDE9dTAoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSwkSD1mdW5jdGlvbiBXaXQo''@;'; put 'put ''bil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuIFZxKG4sZSl9fShUeXBlRXJyb3IpO2Z1bmN0aW9uIHUwKG4pe3JldHVybiBmdW5jdGlvbih0KXt0IGluc3RhbmNl''@;'; put 'put ''b2YgUmVnRXhwJiYodC5sYXN0SW5kZXg9MCk7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZT4xP2UtMTowKSxpPTE7aTxlO2krKylyW2ktMV09YXJndW1lbnRzW2ldO3JldHVybiBOcShuLHQscil9fWZ1bmN0aW9uIGlzKG4sdCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOk9BO2lmKGRnZSYmZGdlKG4sbnVsbCksIU5kKHQpKXJldHVybiBuO2xldCByPXQubGVuZ3RoO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTtpZigic3RyaW5nIj09dHlwZW9mIGkpe2NvbnN0IGE9ZShpKTthIT09aSYmKEZpdCh0''@;'; put 'put ''KXx8KHRbcl09YSksaT1hKX1uW2ldPSEwfXJldHVybiBufWZ1bmN0aW9uIFppdChuKXtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylmdShuLHQpfHwoblt0XT1udWxsKTtyZXR1cm4gbn1mdW5jdGlvbiBUaChuKXtjb25zdCB0PWxDKG51bGwpO2Zvcihjb25zdFtlLHJdb2YgdWdlKG4pKWZ1''@;'; put 'put ''KG4sZSkmJih0W2VdPU5kKHIpP1ppdChyKTpyJiYib2JqZWN0Ij09dHlwZW9mIHImJnIuY29uc3RydWN0b3I9PT1PYmplY3Q/VGgocik6cik7cmV0dXJuIHR9ZnVuY3Rpb24gdUMobix0KXtmb3IoO251bGwhPT1uOyl7Y29uc3Qgcj1OaXQobix0KTtpZihyKXtpZihyLmdldClyZXR1cm4gdTAo''@;'; put 'put ''ci5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByLnZhbHVlKXJldHVybiB1MChyLnZhbHVlKX1uPUhpdChuKX1yZXR1cm4gZnVuY3Rpb24gZSgpe3JldHVybiBudWxsfX1jb25zdCB2Z2U9SGQoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lk''@;'; put 'put ''ZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRk''@;'; put 'put ''IiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJo''@;'; put 'put ''NiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wi''@;'; put 'put ''LCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlYXJjaCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbG90Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJz''@;'; put 'put ''cGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIs''@;'; put 'put ''IndiciJdKSxqcT1IZChbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImVudGVy''@;'; put 'put ''a2V5aGludCIsImV4cG9ydHBhcnRzIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImlucHV0bW9kZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGFydCIsInBhdGgiLCJw''@;'; put 'put ''YXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksenE9SGQoWyJmZUJsZW5kIiwiZmVD''@;'; put 'put ''b2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVu''@;'; put 'put ''Y0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1''@;'; put 'put ''cmJ1bGVuY2UiXSksJGl0PUhkKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0''@;'; put 'put ''Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxVcT1IZChbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQi''@;'; put 'put ''LCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRh''@;'; put 'put ''YmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksS2l0PUhkKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xp''@;'; put 'put ''bmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSx5Z2U9SGQoWyIjdGV4dCJdKSxfZ2U9SGQoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRl''@;'; put 'put ''IiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwi''@;'; put 'put ''Y29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dh''@;'; put 'put ''YmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImV4cG9ydHBhcnRzIiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZsYW5nIiwiaWQiLCJpbmVydCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxh''@;'; put 'put ''YmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3Bl''@;'; put 'put ''biIsIm9wdGltdW0iLCJwYXJ0IiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicGxheXNpbmxpbmUiLCJwb3BvdmVyIiwicG9wb3ZlcnRhcmdldCIsInBvcG92ZXJ0YXJnZXRhY3Rpb24iLCJwb3N0ZXIiLCJwcmVsb2FkIiwicHViZGF0ZSIsInJhZGlvZ3JvdXAiLCJyZWFkb25seSIsInJlbCIs''@;'; put 'put ''InJlcXVpcmVkIiwicmV2IiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd3NwYW4iLCJzcGVsbGNoZWNrIiwic2NvcGUiLCJzZWxlY3RlZCIsInNoYXBlIiwic2l6ZSIsInNpemVzIiwic2xvdCIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5''@;'; put 'put ''bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIl0pLFdxPUhkKFsiYWNjZW50LWhlaWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdubWVudC1iYXNl''@;'; put 'put ''bGluZSIsImFtcGxpdHVkZSIsImFzY2VudCIsImF0dHJpYnV0ZW5hbWUiLCJhdHRyaWJ1dGV0eXBlIiwiYXppbXV0aCIsImJhc2VmcmVxdWVuY3kiLCJiYXNlbGluZS1zaGlmdCIsImJlZ2luIiwiYmlhcyIsImJ5IiwiY2xhc3MiLCJjbGlwIiwiY2xpcHBhdGh1bml0cyIsImNsaXAtcGF0aCIs''@;'; put 'put ''ImNsaXAtcnVsZSIsImNvbG9yIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXByb2ZpbGUiLCJjb2xvci1yZW5kZXJpbmciLCJjeCIsImN5IiwiZCIsImR4IiwiZHkiLCJkaWZmdXNlY29uc3RhbnQiLCJkaXJlY3Rpb24iLCJkaXNw''@;'; put 'put ''bGF5IiwiZGl2aXNvciIsImR1ciIsImVkZ2Vtb2RlIiwiZWxldmF0aW9uIiwiZW5kIiwiZXhwb25lbnQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZv''@;'; put 'put ''bnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIs''@;'; put 'put ''ImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmluZyIsImluIiwiaW4yIiwiaW50ZXJjZXB0IiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3Bh''@;'; put 'put ''Y2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGluZy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0''@;'; put 'put ''cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtYXNrLXR5cGUiLCJtZWRpYSIsIm1ldGhvZCIsIm1vZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVy''@;'; put 'put ''ZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRzIiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwi''@;'; put 'put ''cngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJyZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic2xvcGUiLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIs''@;'; put 'put ''InNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJv''@;'; put 'put ''a2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFibGV2YWx1ZXMiLCJ0YXJnZXR4IiwidGFyZ2V0eSIsInRyYW5zZm9ybSIsInRyYW5zZm9ybS1v''@;'; put 'put ''cmlnaW4iLCJ0ZXh0LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVyc2lvbiIsInZlcnQtYWR2LXkiLCJ2ZXJ0LW9yaWdpbi14''@;'; put 'put ''IiwidmVydC1vcmlnaW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9kZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIsInkyIiwieiIsInpvb21hbmRwYW4iXSksYmdlPUhkKFsi''@;'; put 'put ''YWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5hbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhY2luZyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2Rp''@;'; put 'put ''bmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJscXVvdGUiLCJsc3BhY2UiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6''@;'; put 'put ''ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwi''@;'; put 'put ''c2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLEtIPUhkKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwi''@;'; put 'put ''eG1sOnNwYWNlIiwieG1sbnM6eGxpbmsiXSksWGl0PWpmKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSkscWl0PWpmKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxKaXQ9amYoL1wkXHtbXHdcV10qL2dtKSxRaXQ9amYoL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdKyQvKSxlYXQ9amYo''@;'; put 'put ''L15hcmlhLVtcLVx3XSskLyksd2dlPWpmKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfHNtc3xjaWR8eG1wcHxtYXRyaXgpOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSx0YXQ9amYoL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLG5hdD1qZigv''@;'; put 'put ''W1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxDZ2U9amYoL15odG1sJC9pKSxyYXQ9amYoL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpO3ZhciBTZ2U9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQVJJQV9BVFRSOmVh''@;'; put 'put ''dCxBVFRSX1dISVRFU1BBQ0U6bmF0LENVU1RPTV9FTEVNRU5UOnJhdCxEQVRBX0FUVFI6UWl0LERPQ1RZUEVfTkFNRTpDZ2UsRVJCX0VYUFI6cWl0LElTX0FMTE9XRURfVVJJOndnZSxJU19TQ1JJUFRfT1JfREFUQTp0YXQsTVVTVEFDSEVfRVhQUjpYaXQsVE1QTElUX0VYUFI6Sml0fSk7dmFy''@;'; put 'put ''IG9hdD1mdW5jdGlvbiB4Z2UoKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3c7Y29uc3QgdD13bz0+eGdlKHdvKTtpZih0LnZlcnNpb249IjMuNC4yIix0LnJlbW92ZWQ9W10s''@;'; put 'put ''IW58fCFuLmRvY3VtZW50fHw5IT09bi5kb2N1bWVudC5ub2RlVHlwZXx8IW4uRWxlbWVudClyZXR1cm4gdC5pc1N1cHBvcnRlZD0hMSx0O2xldHtkb2N1bWVudDplfT1uO2NvbnN0IHI9ZSxpPXIuY3VycmVudFNjcmlwdCx7RG9jdW1lbnRGcmFnbWVudDphLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6''@;'; put 'put ''YyxOb2RlOm0sRWxlbWVudDpDLE5vZGVGaWx0ZXI6UCxOYW1lZE5vZGVNYXA6WT1uLk5hbWVkTm9kZU1hcHx8bi5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZvcm1FbGVtZW50OkosRE9NUGFyc2VyOmNlLHRydXN0ZWRUeXBlczpmZX09bixBZT1DLnByb3RvdHlwZSxIZT11QyhBZSwiY2xvbmVOb2Rl''@;'; put 'put ''IiksWGU9dUMoQWUsInJlbW92ZSIpLHJ0PXVDKEFlLCJuZXh0U2libGluZyIpLGR0PXVDKEFlLCJjaGlsZE5vZGVzIiksanQ9dUMoQWUsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYyl7Y29uc3Qgd289ZS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3dvLmNvbnRlbnQm''@;'; put 'put ''JndvLmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGU9d28uY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgRnQscG49IiI7Y29uc3R7aW1wbGVtZW50YXRpb246b24sY3JlYXRlTm9kZUl0ZXJhdG9yOmduLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6Wm4sZ2V0RWxlbWVudHNCeVRhZ05hbWU6R3J9''@;'; put 'put ''PWUse2ltcG9ydE5vZGU6RXJ9PXI7bGV0IFRyPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZv''@;'; put 'put ''cmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfTt0LmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiB1Z2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBqdCYmb24mJnZv''@;'; put 'put ''aWQgMCE9PW9uLmNyZWF0ZUhUTUxEb2N1bWVudDtjb25zdHtNVVNUQUNIRV9FWFBSOmlyLEVSQl9FWFBSOnBpLFRNUExJVF9FWFBSOkRuLERBVEFfQVRUUjpBcixBUklBX0FUVFI6ZXIsSVNfU0NSSVBUX09SX0RBVEE6RHIsQVRUUl9XSElURVNQQUNFOlpyLENVU1RPTV9FTEVNRU5UOmJpfT1T''@;'; put 'put ''Z2U7bGV0e0lTX0FMTE9XRURfVVJJOlNpfT1TZ2UsanI9bnVsbDtjb25zdCBUaT1pcyh7fSxbLi4udmdlLC4uLmpxLC4uLnpxLC4uLlVxLC4uLnlnZV0pO2xldCBsYT1udWxsO2NvbnN0IEZyPWlzKHt9LFsuLi5fZ2UsLi4uV3EsLi4uYmdlLC4uLktIXSk7bGV0IG90PU9iamVjdC5zZWFsKGxD''@;'; put 'put ''KG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRC''@;'; put 'put ''dWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxJdD1udWxsLFV0PW51bGw7Y29uc3QgRW49T2JqZWN0LnNlYWwobEMobnVsbCx7dGFnQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfX0pKTtsZXQgYXI9ITAsRXQ9ITAsWnQ9ITEsZm49ITAsWG49ITEsa249ITAsX249ITEsZ3I9ITEseG49ITEsbnI9ITEseHI9ITEsX3I9ITEs''@;'; put 'put ''Zmk9ITAsQ2E9ITE7Y29uc3QgY2E9InVzZXItY29udGVudC0iO2xldCBmbz0hMCxjcz0hMSxHbz17fSxTbz1udWxsO2NvbnN0IGVzPWlzKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIs''@;'; put 'put ''Im1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSk7bGV0IFpzPW51bGw7Y29uc3QgemE9aXMoe30s''@;'; put 'put ''WyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgTzA9bnVsbDtjb25zdCBKZD1pcyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxl''@;'; put 'put ''IiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLHljPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixRZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEpsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtsZXQgUWw9SmwsdHM9ITEsWWg9bnVsbDtjb25zdCBo''@;'; put 'put ''Zz1pcyh7fSxbeWMsUWQsSmxdLEJxKTtsZXQgRHA9aXMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLFg1PWlzKHt9LFsiYW5ub3RhdGlvbi14bWwiXSk7Y29uc3QgR2g9aXMoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSk7bGV0IG0wPW51bGw7Y29u''@;'; put 'put ''c3QgSlM9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXTtsZXQgem89bnVsbCxYOD1udWxsO2NvbnN0IFFTPWUuY3JlYXRlRWxlbWVudCgiZm9ybSIpLHE1PWZ1bmN0aW9uKFZuKXtyZXR1cm4gVm4gaW5zdGFuY2VvZiBSZWdFeHB8fFZuIGluc3RhbmNlb2YgRnVuY3Rpb259''@;'; put 'put ''LHBJPWZ1bmN0aW9uKCl7bGV0IFZuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZihYOCYmWDg9PT1WbilyZXR1cm47KCFWbnx8Im9iamVjdCIhPXR5cGVvZiBWbikmJihWbj17fSksVm49VGgoVm4pLG0wPS0xPT09SlMuaW5kZXhP''@;'; put 'put ''ZihWbi5QQVJTRVJfTUVESUFfVFlQRSk/InRleHQvaHRtbCI6Vm4uUEFSU0VSX01FRElBX1RZUEUsem89ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1tMD9CcTpPQSxqcj1mdShWbiwiQUxMT1dFRF9UQUdTIikmJk5kKFZuLkFMTE9XRURfVEFHUyk/aXMoe30sVm4uQUxMT1dFRF9UQUdTLHpv''@;'; put 'put ''KTpUaSxsYT1mdShWbiwiQUxMT1dFRF9BVFRSIikmJk5kKFZuLkFMTE9XRURfQVRUUik/aXMoe30sVm4uQUxMT1dFRF9BVFRSLHpvKTpGcixZaD1mdShWbiwiQUxMT1dFRF9OQU1FU1BBQ0VTIikmJk5kKFZuLkFMTE9XRURfTkFNRVNQQUNFUyk/aXMoe30sVm4uQUxMT1dFRF9OQU1FU1BBQ0VT''@;'; put 'put ''LEJxKTpoZyxPMD1mdShWbiwiQUREX1VSSV9TQUZFX0FUVFIiKSYmTmQoVm4uQUREX1VSSV9TQUZFX0FUVFIpP2lzKFRoKEpkKSxWbi5BRERfVVJJX1NBRkVfQVRUUix6byk6SmQsWnM9ZnUoVm4sIkFERF9EQVRBX1VSSV9UQUdTIikmJk5kKFZuLkFERF9EQVRBX1VSSV9UQUdTKT9pcyhUaCh6''@;'; put 'put ''YSksVm4uQUREX0RBVEFfVVJJX1RBR1Msem8pOnphLFNvPWZ1KFZuLCJGT1JCSURfQ09OVEVOVFMiKSYmTmQoVm4uRk9SQklEX0NPTlRFTlRTKT9pcyh7fSxWbi5GT1JCSURfQ09OVEVOVFMsem8pOmVzLEl0PWZ1KFZuLCJGT1JCSURfVEFHUyIpJiZOZChWbi5GT1JCSURfVEFHUyk/aXMoe30s''@;'; put 'put ''Vm4uRk9SQklEX1RBR1Msem8pOlRoKHt9KSxVdD1mdShWbiwiRk9SQklEX0FUVFIiKSYmTmQoVm4uRk9SQklEX0FUVFIpP2lzKHt9LFZuLkZPUkJJRF9BVFRSLHpvKTpUaCh7fSksR289ISFmdShWbiwiVVNFX1BST0ZJTEVTIikmJihWbi5VU0VfUFJPRklMRVMmJiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''Vm4uVVNFX1BST0ZJTEVTP1RoKFZuLlVTRV9QUk9GSUxFUyk6Vm4uVVNFX1BST0ZJTEVTKSxhcj0hMSE9PVZuLkFMTE9XX0FSSUFfQVRUUixFdD0hMSE9PVZuLkFMTE9XX0RBVEFfQVRUUixadD1Wbi5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsZm49ITEhPT1Wbi5BTExPV19TRUxGX0NM''@;'; put 'put ''T1NFX0lOX0FUVFIsWG49Vm4uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxrbj0hMSE9PVZuLlNBRkVfRk9SX1hNTCxfbj1Wbi5XSE9MRV9ET0NVTUVOVHx8ITEsbnI9Vm4uUkVUVVJOX0RPTXx8ITEseHI9Vm4uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsX3I9Vm4uUkVUVVJOX1RSVVNURURfVFlQ''@;'; put 'put ''RXx8ITEseG49Vm4uRk9SQ0VfQk9EWXx8ITEsZmk9ITEhPT1Wbi5TQU5JVElaRV9ET00sQ2E9Vm4uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLGZvPSExIT09Vm4uS0VFUF9DT05URU5ULGNzPVZuLklOX1BMQUNFfHwhMSxTaT1mdW5jdGlvbiBHaXQobil7dHJ5e3JldHVybiB4MShuLCIiKSwh''@;'; put 'put ''MH1jYXRjaHtyZXR1cm4hMX19KFZuLkFMTE9XRURfVVJJX1JFR0VYUCk/Vm4uQUxMT1dFRF9VUklfUkVHRVhQOndnZSxRbD0ic3RyaW5nIj09dHlwZW9mIFZuLk5BTUVTUEFDRT9Wbi5OQU1FU1BBQ0U6SmwsRHA9ZnUoVm4sIk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UUyIpJiZWbi5N''@;'; put 'put ''QVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMmJiJvYmplY3QiPT10eXBlb2YgVm4uTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTP1RoKFZuLk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UUyk6aXMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLFg1PWZ1KFZu''@;'; put 'put ''LCJIVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyIpJiZWbi5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyYmIm9iamVjdCI9PXR5cGVvZiBWbi5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UUz9UaChWbi5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UUyk6aXMoe30sWyJhbm5vdGF0aW9uLXhtbCJdKTtjb25zdCBB''@;'; put 'put ''aT1mdShWbiwiQ1VTVE9NX0VMRU1FTlRfSEFORExJTkciKSYmVm4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJiJvYmplY3QiPT10eXBlb2YgVm4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkc/VGgoVm4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcpOmxDKG51bGwpO2lmKG90PWxDKG51bGwpLGZ1''@;'; put 'put ''KEFpLCJ0YWdOYW1lQ2hlY2siKSYmcTUoQWkudGFnTmFtZUNoZWNrKSYmKG90LnRhZ05hbWVDaGVjaz1BaS50YWdOYW1lQ2hlY2spLGZ1KEFpLCJhdHRyaWJ1dGVOYW1lQ2hlY2siKSYmcTUoQWkuYXR0cmlidXRlTmFtZUNoZWNrKSYmKG90LmF0dHJpYnV0ZU5hbWVDaGVjaz1BaS5hdHRyaWJ1''@;'; put 'put ''dGVOYW1lQ2hlY2spLGZ1KEFpLCJhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMiKSYmImJvb2xlYW4iPT10eXBlb2YgQWkuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYob3QuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPUFpLmFsbG93Q3VzdG9taXplZEJ1aWx0''@;'; put 'put ''SW5FbGVtZW50cyksWG4mJihFdD0hMSkseHImJihucj0hMCksR28mJihqcj1pcyh7fSx5Z2UpLGxhPWxDKG51bGwpLCEwPT09R28uaHRtbCYmKGlzKGpyLHZnZSksaXMobGEsX2dlKSksITA9PT1Hby5zdmcmJihpcyhqcixqcSksaXMobGEsV3EpLGlzKGxhLEtIKSksITA9PT1Hby5zdmdGaWx0''@;'; put 'put ''ZXJzJiYoaXMoanIsenEpLGlzKGxhLFdxKSxpcyhsYSxLSCkpLCEwPT09R28ubWF0aE1sJiYoaXMoanIsVXEpLGlzKGxhLGJnZSksaXMobGEsS0gpKSksRW4udGFnQ2hlY2s9bnVsbCxFbi5hdHRyaWJ1dGVDaGVjaz1udWxsLGZ1KFZuLCJBRERfVEFHUyIpJiYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFZuLkFERF9UQUdTP0VuLnRhZ0NoZWNrPVZuLkFERF9UQUdTOk5kKFZuLkFERF9UQUdTKSYmKGpyPT09VGkmJihqcj1UaChqcikpLGlzKGpyLFZuLkFERF9UQUdTLHpvKSkpLGZ1KFZuLCJBRERfQVRUUiIpJiYoImZ1bmN0aW9uIj09dHlwZW9mIFZuLkFERF9BVFRSP0VuLmF0dHJpYnV0ZUNo''@;'; put 'put ''ZWNrPVZuLkFERF9BVFRSOk5kKFZuLkFERF9BVFRSKSYmKGxhPT09RnImJihsYT1UaChsYSkpLGlzKGxhLFZuLkFERF9BVFRSLHpvKSkpLGZ1KFZuLCJBRERfVVJJX1NBRkVfQVRUUiIpJiZOZChWbi5BRERfVVJJX1NBRkVfQVRUUikmJmlzKE8wLFZuLkFERF9VUklfU0FGRV9BVFRSLHpvKSxm''@;'; put 'put ''dShWbiwiRk9SQklEX0NPTlRFTlRTIikmJk5kKFZuLkZPUkJJRF9DT05URU5UUykmJihTbz09PWVzJiYoU289VGgoU28pKSxpcyhTbyxWbi5GT1JCSURfQ09OVEVOVFMsem8pKSxmdShWbiwiQUREX0ZPUkJJRF9DT05URU5UUyIpJiZOZChWbi5BRERfRk9SQklEX0NPTlRFTlRTKSYmKFNvPT09''@;'; put 'put ''ZXMmJihTbz1UaChTbykpLGlzKFNvLFZuLkFERF9GT1JCSURfQ09OVEVOVFMsem8pKSxmbyYmKGpyWyIjdGV4dCJdPSEwKSxfbiYmaXMoanIsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksanIudGFibGUmJihpcyhqcixbInRib2R5Il0pLGRlbGV0ZSBJdC50Ym9keSksVm4uVFJVU1RFRF9UWVBF''@;'; put 'put ''U19QT0xJQ1kpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBWbi5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MKXRocm93ICRIKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgVm4uVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKXRocm93ICRIKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO0Z0PVZuLlRSVVNURURfVFlQRVNf''@;'; put 'put ''UE9MSUNZLHBuPUZ0LmNyZWF0ZUhUTUwoIiIpfWVsc2Ugdm9pZCAwPT09RnQmJihGdD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT10eXBlb2YgdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO2xldCByPW51bGw7Y29uc3QgaT0iZGF0YS10dC1wb2xp''@;'; put 'put ''Y3ktc3VmZml4IjtlJiZlLmhhc0F0dHJpYnV0ZShpKSYmKHI9ZS5nZXRBdHRyaWJ1dGUoaSkpO2NvbnN0IGE9ImRvbXB1cmlmeSIrKHI/IiMiK3I6IiIpO3RyeXtyZXR1cm4gdC5jcmVhdGVQb2xpY3koYSx7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7cmV0''@;'; put 'put ''dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK2ErIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX0oZmUsaSkpLG51bGwhPT1GdCYmInN0cmluZyI9PXR5cGVvZiBwbiYmKHBuPUZ0LmNyZWF0ZUhUTUwoIiIpKTtIZCYmSGQoVm4pLFg4PVZufSxEej1pcyh7fSxb''@;'; put 'put ''Li4uanEsLi4uenEsLi4uJGl0XSksSXo9aXMoe30sWy4uLlVxLC4uLktpdF0pLHYwPWZ1bmN0aW9uKFZuKXtMQSh0LnJlbW92ZWQse2VsZW1lbnQ6Vm59KTt0cnl7anQoVm4pLnJlbW92ZUNoaWxkKFZuKX1jYXRjaHtYZShWbil9fSxKNT1mdW5jdGlvbihWbixBaSl7dHJ5e0xBKHQucmVtb3Zl''@;'; put 'put ''ZCx7YXR0cmlidXRlOkFpLmdldEF0dHJpYnV0ZU5vZGUoVm4pLGZyb206QWl9KX1jYXRjaHtMQSh0LnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206QWl9KX1pZihBaS5yZW1vdmVBdHRyaWJ1dGUoVm4pLCJpcyI9PT1WbilpZihucnx8eHIpdHJ5e3YwKEFpKX1jYXRjaHt9ZWxzZSB0cnl7''@;'; put 'put ''QWkuc2V0QXR0cmlidXRlKFZuLCIiKX1jYXRjaHt9fSxSej1mdW5jdGlvbihWbil7bGV0IEFpPW51bGwsVWE9bnVsbDtpZih4bilWbj0iPHJlbW92ZT48L3JlbW92ZT4iK1ZuO2Vsc2V7Y29uc3QgX289ZmdlKFZuLC9eW1xyXG5cdCBdKy8pO1VhPV9vJiZfb1swXX0iYXBwbGljYXRpb24veGh0''@;'; put 'put ''bWwreG1sIj09PW0wJiZRbD09PUpsJiYoVm49JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytWbisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBNbD1GdD9GdC5jcmVhdGVIVE1MKFZuKTpWbjtpZihRbD09PUpsKXRyeXtBaT0o''@;'; put 'put ''bmV3IGNlKS5wYXJzZUZyb21TdHJpbmcoTWwsbTApfWNhdGNoe31pZighQWl8fCFBaS5kb2N1bWVudEVsZW1lbnQpe0FpPW9uLmNyZWF0ZURvY3VtZW50KFFsLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e0FpLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9dHM/cG46TWx9Y2F0Y2h7fX1jb25zdCBD''@;'; put 'put ''dT1BaS5ib2R5fHxBaS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIFZuJiZVYSYmQ3UuaW5zZXJ0QmVmb3JlKGUuY3JlYXRlVGV4dE5vZGUoVWEpLEN1LmNoaWxkTm9kZXNbMF18fG51bGwpLFFsPT09Smw/R3IuY2FsbChBaSxfbj8iaHRtbCI6ImJvZHkiKVswXTpfbj9BaS5kb2N1bWVudEVsZW1l''@;'; put 'put ''bnQ6Q3V9LEx6PWZ1bmN0aW9uKFZuKXtyZXR1cm4gZ24uY2FsbChWbi5vd25lckRvY3VtZW50fHxWbixWbixQLlNIT1dfRUxFTUVOVHxQLlNIT1dfQ09NTUVOVHxQLlNIT1dfVEVYVHxQLlNIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTnxQLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sZU09''@;'; put 'put ''ZnVuY3Rpb24oVm4pe3JldHVybiBWbiBpbnN0YW5jZW9mIEomJigic3RyaW5nIiE9dHlwZW9mIFZuLm5vZGVOYW1lfHwic3RyaW5nIiE9dHlwZW9mIFZuLnRleHRDb250ZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgVm4ucmVtb3ZlQ2hpbGR8fCEoVm4uYXR0cmlidXRlcyBpbnN0YW5jZW9mIFkp''@;'; put 'put ''fHwiZnVuY3Rpb24iIT10eXBlb2YgVm4ucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgVm4uc2V0QXR0cmlidXRlfHwic3RyaW5nIiE9dHlwZW9mIFZuLm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFZuLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IFZuLmhhc0NoaWxkTm9kZXMpfSxnST1mdW5jdGlvbihWbil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG0mJlZuIGluc3RhbmNlb2YgbX07ZnVuY3Rpb24gSXAod28sVm4sQWkpe1JBKHdvLFVhPT57VWEuY2FsbCh0LFZuLEFpLFg4KX0pfWNvbnN0IE96PWZ1bmN0aW9uKFZuKXtsZXQgQWk9''@;'; put 'put ''bnVsbDtpZihJcChUci5iZWZvcmVTYW5pdGl6ZUVsZW1lbnRzLFZuLG51bGwpLGVNKFZuKSlyZXR1cm4gdjAoVm4pLCEwO2NvbnN0IFVhPXpvKFZuLm5vZGVOYW1lKTtpZihJcChUci51cG9uU2FuaXRpemVFbGVtZW50LFZuLHt0YWdOYW1lOlVhLGFsbG93ZWRUYWdzOmpyfSksa24mJlZuLmhh''@;'; put 'put ''c0NoaWxkTm9kZXMoKSYmIWdJKFZuLmZpcnN0RWxlbWVudENoaWxkKSYmeDEoLzxbL1x3IV0vZyxWbi5pbm5lckhUTUwpJiZ4MSgvPFsvXHchXS9nLFZuLnRleHRDb250ZW50KXx8a24mJlZuLm5hbWVzcGFjZVVSST09PUpsJiYic3R5bGUiPT09VWEmJmdJKFZuLmZpcnN0RWxlbWVudENoaWxk''@;'; put 'put ''KXx8Nz09PVZuLm5vZGVUeXBlfHxrbiYmOD09PVZuLm5vZGVUeXBlJiZ4MSgvPFsvXHddL2csVm4uZGF0YSkpcmV0dXJuIHYwKFZuKSwhMDtpZihJdFtVYV18fCEoRW4udGFnQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmRW4udGFnQ2hlY2soVWEpKSYmIWpyW1VhXSl7aWYoIUl0W1VhXSYm''@;'; put 'put ''UHooVWEpJiYob3QudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZ4MShvdC50YWdOYW1lQ2hlY2ssVWEpfHxvdC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmb3QudGFnTmFtZUNoZWNrKFVhKSkpcmV0dXJuITE7aWYoZm8mJiFTb1tVYV0pe2NvbnN0IE1sPWp0KFZu''@;'; put 'put ''KXx8Vm4ucGFyZW50Tm9kZSxDdT1kdChWbil8fFZuLmNoaWxkTm9kZXM7aWYoQ3UmJk1sKWZvcihsZXQgZmQ9Q3UubGVuZ3RoLTE7ZmQ+PTA7LS1mZCl7Y29uc3QgU3U9SGUoQ3VbZmRdLCEwKTtNbC5pbnNlcnRCZWZvcmUoU3UscnQoVm4pKX19cmV0dXJuIHYwKFZuKSwhMH1yZXR1cm4gVm4g''@;'; put 'put ''aW5zdGFuY2VvZiBDJiYhZnVuY3Rpb24oVm4pe2xldCBBaT1qdChWbik7KCFBaXx8IUFpLnRhZ05hbWUpJiYoQWk9e25hbWVzcGFjZVVSSTpRbCx0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTtjb25zdCBVYT1PQShWbi50YWdOYW1lKSxNbD1PQShBaS50YWdOYW1lKTtyZXR1cm4hIVloW1ZuLm5hbWVz''@;'; put 'put ''cGFjZVVSSV0mJihWbi5uYW1lc3BhY2VVUkk9PT1RZD9BaS5uYW1lc3BhY2VVUkk9PT1KbD8ic3ZnIj09PVVhOkFpLm5hbWVzcGFjZVVSST09PXljPyJzdmciPT09VWEmJigiYW5ub3RhdGlvbi14bWwiPT09TWx8fERwW01sXSk6ISFEeltVYV06Vm4ubmFtZXNwYWNlVVJJPT09eWM/QWkubmFt''@;'; put 'put ''ZXNwYWNlVVJJPT09Smw/Im1hdGgiPT09VWE6QWkubmFtZXNwYWNlVVJJPT09UWQ/Im1hdGgiPT09VWEmJlg1W01sXTohIUl6W1VhXTpWbi5uYW1lc3BhY2VVUkk9PT1KbD8hKEFpLm5hbWVzcGFjZVVSST09PVFkJiYhWDVbTWxdfHxBaS5uYW1lc3BhY2VVUkk9PT15YyYmIURwW01sXSkmJiFJ''@;'; put 'put ''eltVYV0mJihHaFtVYV18fCFEeltVYV0pOiEoImFwcGxpY2F0aW9uL3hodG1sK3htbCIhPT1tMHx8IVloW1ZuLm5hbWVzcGFjZVVSSV0pKX0oVm4pfHwoIm5vc2NyaXB0Ij09PVVhfHwibm9lbWJlZCI9PT1VYXx8Im5vZnJhbWVzIj09PVVhKSYmeDEoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFt''@;'; put 'put ''ZXMpL2ksVm4uaW5uZXJIVE1MKT8odjAoVm4pLCEwKTooWG4mJjM9PT1Wbi5ub2RlVHlwZSYmKEFpPVZuLnRleHRDb250ZW50LFJBKFtpcixwaSxEbl0sTWw9PntBaT1jQyhBaSxNbCwiICIpfSksVm4udGV4dENvbnRlbnQhPT1BaSYmKExBKHQucmVtb3ZlZCx7ZWxlbWVudDpWbi5jbG9uZU5v''@;'; put 'put ''ZGUoKX0pLFZuLnRleHRDb250ZW50PUFpKSksSXAoVHIuYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzLFZuLG51bGwpLCExKX0sbUk9ZnVuY3Rpb24oVm4sQWksVWEpe2lmKFV0W0FpXXx8ZmkmJigiaWQiPT09QWl8fCJuYW1lIj09PUFpKSYmKFVhIGluIGV8fFVhIGluIFFTKSlyZXR1cm4hMTtjb25z''@;'; put 'put ''dCBNbD1sYVtBaV18fEVuLmF0dHJpYnV0ZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkVuLmF0dHJpYnV0ZUNoZWNrKEFpLFZuKTtpZigoIUV0fHxVdFtBaV18fCF4MShBcixBaSkpJiYoIWFyfHwheDEoZXIsQWkpKSlpZighTWx8fFV0W0FpXSl7aWYoIShQeihWbikmJihvdC50YWdOYW1l''@;'; put 'put ''Q2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJngxKG90LnRhZ05hbWVDaGVjayxWbil8fG90LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZvdC50YWdOYW1lQ2hlY2soVm4pKSYmKG90LmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmeDEob3QuYXR0cmlidXRl''@;'; put 'put ''TmFtZUNoZWNrLEFpKXx8b3QuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJm90LmF0dHJpYnV0ZU5hbWVDaGVjayhBaSxWbikpfHwiaXMiPT09QWkmJm90LmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKG90LnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJl''@;'; put 'put ''Z0V4cCYmeDEob3QudGFnTmFtZUNoZWNrLFVhKXx8b3QudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJm90LnRhZ05hbWVDaGVjayhVYSkpKSlyZXR1cm4hMX1lbHNlIGlmKCFPMFtBaV0mJiF4MShTaSxjQyhVYSxaciwiIikpJiYoInNyYyIhPT1BaSYmInhsaW5rOmhyZWYiIT09''@;'; put 'put ''QWkmJiJocmVmIiE9PUFpfHwic2NyaXB0Ij09PVZufHwwIT09cGdlKFVhLCJkYXRhOiIpfHwhWnNbVm5dKSYmKCFadHx8eDEoRHIsY0MoVWEsWnIsIiIpKSkmJlVhKXJldHVybiExO3JldHVybiEwfSxmb2U9aXMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImNvbG9yLXByb2ZpbGUiLCJmb250LWZh''@;'; put 'put ''Y2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsIm1pc3NpbmctZ2x5cGgiXSksUHo9ZnVuY3Rpb24oVm4pe3JldHVybiFmb2VbT0EoVm4pXSYmeDEoYmksVm4pfSxGej1mdW5jdGlvbihWbil7SXAoVHIuYmVmb3Jl''@;'; put 'put ''U2FuaXRpemVBdHRyaWJ1dGVzLFZuLG51bGwpO2NvbnN0e2F0dHJpYnV0ZXM6QWl9PVZuO2lmKCFBaXx8ZU0oVm4pKXJldHVybjtjb25zdCBVYT17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOmxhLGZvcmNlS2VlcEF0dHI6dm9pZCAwfTts''@;'; put 'put ''ZXQgTWw9QWkubGVuZ3RoO2Zvcig7TWwtLTspe2NvbnN0IEN1PUFpW01sXSx7bmFtZTpfbyxuYW1lc3BhY2VVUkk6ZmQsdmFsdWU6U3V9PUN1LCQyPXpvKF9vKSx2ST1TdTtsZXQgTXU9InZhbHVlIj09PV9vP3ZJOmppdCh2SSk7aWYoVWEuYXR0ck5hbWU9JDIsVWEuYXR0clZhbHVlPU11LFVh''@;'; put 'put ''LmtlZXBBdHRyPSEwLFVhLmZvcmNlS2VlcEF0dHI9dm9pZCAwLElwKFRyLnVwb25TYW5pdGl6ZUF0dHJpYnV0ZSxWbixVYSksTXU9VWEuYXR0clZhbHVlLENhJiYoImlkIj09PSQyfHwibmFtZSI9PT0kMikmJjAhPT1wZ2UoTXUsY2EpJiYoSjUoX28sVm4pLE11PWNhK011KSxrbiYmeDEoLygo''@;'; put 'put ''LS0hP3xdKT4pfDxcLyhzdHlsZXxzY3JpcHR8dGl0bGV8eG1wfHRleHRhcmVhfG5vc2NyaXB0fGlmcmFtZXxub2VtYmVkfG5vZnJhbWVzKS9pLE11KSl7SjUoX28sVm4pO2NvbnRpbnVlfWlmKCJhdHRyaWJ1dGVuYW1lIj09PSQyJiZmZ2UoTXUsImhyZWYiKSl7SjUoX28sVm4pO2NvbnRpbnVl''@;'; put 'put ''fWlmKFVhLmZvcmNlS2VlcEF0dHIpY29udGludWU7aWYoIVVhLmtlZXBBdHRyKXtKNShfbyxWbik7Y29udGludWV9aWYoIWZuJiZ4MSgvXC8+L2ksTXUpKXtKNShfbyxWbik7Y29udGludWV9WG4mJlJBKFtpcixwaSxEbl0seUk9PntNdT1jQyhNdSx5SSwiICIpfSk7Y29uc3QgdE09em8oVm4u''@;'; put 'put ''bm9kZU5hbWUpO2lmKG1JKHRNLCQyLE11KSl7aWYoRnQmJiJvYmplY3QiPT10eXBlb2YgZmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBmZS5nZXRBdHRyaWJ1dGVUeXBlJiYhZmQpc3dpdGNoKGZlLmdldEF0dHJpYnV0ZVR5cGUodE0sJDIpKXtjYXNlIlRydXN0ZWRIVE1MIjpNdT1GdC5jcmVhdGVI''@;'; put 'put ''VE1MKE11KTticmVhaztjYXNlIlRydXN0ZWRTY3JpcHRVUkwiOk11PUZ0LmNyZWF0ZVNjcmlwdFVSTChNdSl9aWYoTXUhPT12SSl0cnl7ZmQ/Vm4uc2V0QXR0cmlidXRlTlMoZmQsX28sTXUpOlZuLnNldEF0dHJpYnV0ZShfbyxNdSksZU0oVm4pP3YwKFZuKTpoZ2UodC5yZW1vdmVkKX1jYXRj''@;'; put 'put ''aHtKNShfbyxWbil9fWVsc2UgSjUoX28sVm4pfUlwKFRyLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLFZuLG51bGwpfSxIej1mdW5jdGlvbihWbil7bGV0IEFpPW51bGw7Y29uc3QgVWE9THooVm4pO2ZvcihJcChUci5iZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSxWbixudWxsKTtBaT1VYS5uZXh0''@;'; put 'put ''Tm9kZSgpOylJcChUci51cG9uU2FuaXRpemVTaGFkb3dOb2RlLEFpLG51bGwpLE96KEFpKSxGeihBaSksQWkuY29udGVudCBpbnN0YW5jZW9mIGEmJkh6KEFpLmNvbnRlbnQpO0lwKFRyLmFmdGVyU2FuaXRpemVTaGFkb3dET00sVm4sbnVsbCl9O3JldHVybiB0LnNhbml0aXplPWZ1bmN0aW9u''@;'; put 'put ''KHdvKXtsZXQgVm49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LEFpPW51bGwsVWE9bnVsbCxNbD1udWxsLEN1PW51bGw7aWYodHM9IXdvLHRzJiYod289Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiB3byYmIWdJKHdvKSYm''@;'; put 'put ''KHdvPWZ1bmN0aW9uIFlpdChuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2Uic3RyaW5nIjpyZXR1cm4gbjtjYXNlIm51bWJlciI6cmV0dXJuIHppdChuKTtjYXNlImJvb2xlYW4iOnJldHVybiBVaXQobik7Y2FzZSJiaWdpbnQiOnJldHVybiBnZ2U/Z2dlKG4pOiIwIjtjYXNlInN5bWJvbCI6cmV0''@;'; put 'put ''dXJuIG1nZT9tZ2Uobik6IlN5bWJvbCgpIjtjYXNlInVuZGVmaW5lZCI6ZGVmYXVsdDpyZXR1cm4gUEEobik7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJvYmplY3QiOntpZihudWxsPT09bilyZXR1cm4gUEEobik7Y29uc3QgdD1uLGU9dUModCwidG9TdHJpbmciKTtpZigiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgZSl7Y29uc3Qgcj1lKHQpO3JldHVybiJzdHJpbmciPT10eXBlb2Ygcj9yOlBBKHIpfXJldHVybiBQQShuKX19fSh3byksInN0cmluZyIhPXR5cGVvZiB3bykpdGhyb3cgJEgoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKTtpZighdC5pc1N1cHBvcnRlZClyZXR1cm4gd287''@;'; put 'put ''aWYoZ3J8fHBJKFZuKSx0LnJlbW92ZWQ9W10sInN0cmluZyI9PXR5cGVvZiB3byYmKGNzPSExKSxjcyl7Y29uc3QgU3U9d28ubm9kZU5hbWU7aWYoInN0cmluZyI9PXR5cGVvZiBTdSl7Y29uc3QgJDI9em8oU3UpO2lmKCFqclskMl18fEl0WyQyXSl0aHJvdyAkSCgicm9vdCBub2RlIGlzIGZv''@;'; put 'put ''cmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKHdvIGluc3RhbmNlb2YgbSlBaT1SeigiXHgzYyEtLS0tXHgzZSIpLFVhPUFpLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZSh3bywhMCksMT09PVVhLm5vZGVUeXBlJiYiQk9EWSI9PT1VYS5ub2RlTmFt''@;'; put 'put ''ZXx8IkhUTUwiPT09VWEubm9kZU5hbWU/QWk9VWE6QWkuYXBwZW5kQ2hpbGQoVWEpO2Vsc2V7aWYoIW5yJiYhWG4mJiFfbiYmLTE9PT13by5pbmRleE9mKCI8IikpcmV0dXJuIEZ0JiZfcj9GdC5jcmVhdGVIVE1MKHdvKTp3bztpZihBaT1Seih3byksIUFpKXJldHVybiBucj9udWxsOl9yP3Bu''@;'; put 'put ''OiIifUFpJiZ4biYmdjAoQWkuZmlyc3RDaGlsZCk7Y29uc3QgX289THooY3M/d286QWkpO2Zvcig7TWw9X28ubmV4dE5vZGUoKTspT3ooTWwpLEZ6KE1sKSxNbC5jb250ZW50IGluc3RhbmNlb2YgYSYmSHooTWwuY29udGVudCk7aWYoY3MpcmV0dXJuIHdvO2lmKG5yKXtpZihYbil7QWkubm9y''@;'; put 'put ''bWFsaXplKCk7bGV0IFN1PUFpLmlubmVySFRNTDtSQShbaXIscGksRG5dLCQyPT57U3U9Y0MoU3UsJDIsIiAiKX0pLEFpLmlubmVySFRNTD1TdX1pZih4cilmb3IoQ3U9Wm4uY2FsbChBaS5vd25lckRvY3VtZW50KTtBaS5maXJzdENoaWxkOylDdS5hcHBlbmRDaGlsZChBaS5maXJzdENoaWxk''@;'; put 'put ''KTtlbHNlIEN1PUFpO3JldHVybihsYS5zaGFkb3dyb290fHxsYS5zaGFkb3dyb290bW9kZSkmJihDdT1Fci5jYWxsKHIsQ3UsITApKSxDdX1sZXQgZmQ9X24/QWkub3V0ZXJIVE1MOkFpLmlubmVySFRNTDtyZXR1cm4gX24mJmpyWyIhZG9jdHlwZSJdJiZBaS5vd25lckRvY3VtZW50JiZBaS5v''@;'; put 'put ''d25lckRvY3VtZW50LmRvY3R5cGUmJkFpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZ4MShDZ2UsQWkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpJiYoZmQ9IjwhRE9DVFlQRSAiK0FpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4iK2ZkKSxYbiYmUkEoW2lyLHBpLERu''@;'; put 'put ''XSxTdT0+e2ZkPWNDKGZkLFN1LCIgIil9KSxGdCYmX3I/RnQuY3JlYXRlSFRNTChmZCk6ZmR9LHQuc2V0Q29uZmlnPWZ1bmN0aW9uKCl7cEkoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9KSxncj0hMH0sdC5jbGVhckNvbmZpZz1mdW5j''@;'; put 'put ''dGlvbigpe1g4PW51bGwsZ3I9ITF9LHQuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbih3byxWbixBaSl7WDh8fHBJKHt9KTtjb25zdCBVYT16byh3byksTWw9em8oVm4pO3JldHVybiBtSShVYSxNbCxBaSl9LHQuYWRkSG9vaz1mdW5jdGlvbih3byxWbil7ImZ1bmN0aW9uIj09dHlwZW9mIFZu''@;'; put 'put ''JiZMQShUclt3b10sVm4pfSx0LnJlbW92ZUhvb2s9ZnVuY3Rpb24od28sVm4pe2lmKHZvaWQgMCE9PVZuKXtjb25zdCBBaT1WaXQoVHJbd29dLFZuKTtyZXR1cm4tMT09PUFpP3ZvaWQgMDpCaXQoVHJbd29dLEFpLDEpWzBdfXJldHVybiBoZ2UoVHJbd29dKX0sdC5yZW1vdmVIb29rcz1mdW5j''@;'; put 'put ''dGlvbih3byl7VHJbd29dPVtdfSx0LnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7VHI9e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZvcmVT''@;'; put 'put ''YW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltdLHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119fSx0fSgpO2Z1bmN0aW9uIEVnZShuKXtjb25zdCB0PW4ubGVuZ3RoO2xldCBl''@;'; put 'put ''PTA7Zm9yKDtlPHQ7KW5bZV09W25bZV1dLGUrPTF9ZnVuY3Rpb24gWnEobix0KXtjb25zdCBlPXQubGVuZ3RoO2xldCByPTA7Zm9yKDtyPGU7KW4ucHVzaCh0W3JdKSxyKz0xfWZ1bmN0aW9uIEhBKG4pe2NvbnN0IHQ9W107aWYoIW58fDA9PT1uLmxlbmd0aHx8IW5bMF18fDA9PT1uWzBdLmxl''@;'; put 'put ''bmd0aClyZXR1cm4gdDtjb25zdCBlPW4ubGVuZ3RoLHI9blswXS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxlO2krKylmb3IobGV0IGE9MDthPHI7YSsrKXRbYV18fCh0W2FdPVtdKSx0W2FdW2ldPW5baV1bYV07cmV0dXJuIHR9ZnVuY3Rpb24gZDAobix0LGUscil7bGV0IGk9LTEsYT1uLGM9ZTtB''@;'; put 'put ''cnJheS5pc0FycmF5KG4pfHwoYT1BcnJheS5mcm9tKG4pKTtjb25zdCBtPWEubGVuZ3RoO2ZvcihyJiZtJiYoaSs9MSxjPWFbaV0pLGkrPTE7aTxtOyljPXQoYyxhW2ldLGksYSksaSs9MTtyZXR1cm4gY31mdW5jdGlvbiAkNihuLHQpe2xldCBlPTAscj1uO0FycmF5LmlzQXJyYXkobil8fChy''@;'; put 'put ''PUFycmF5LmZyb20obikpO2NvbnN0IGk9ci5sZW5ndGgsYT1bXTtsZXQgYz0tMTtmb3IoO2U8aTspe2NvbnN0IG09cltlXTt0KG0sZSxyKSYmKGMrPTEsYVtjXT1tKSxlKz0xfXJldHVybiBhfWZ1bmN0aW9uIFdzKG4sdCl7bGV0IGU9MCxyPW47QXJyYXkuaXNBcnJheShuKXx8KHI9QXJyYXku''@;'; put 'put ''ZnJvbShuKSk7Y29uc3QgaT1yLmxlbmd0aCxhPVtdO2xldCBjPS0xO2Zvcig7ZTxpOyljKz0xLGFbY109dChyW2VdLGUsciksZSs9MTtyZXR1cm4gYX1mdW5jdGlvbiBZbihuLHQpe2xldCBlPTAscj1uO0FycmF5LmlzQXJyYXkobil8fChyPUFycmF5LmZyb20obikpO2NvbnN0IGk9ci5sZW5n''@;'; put 'put ''dGg7Zm9yKDtlPGkmJiExIT09dChyW2VdLGUscik7KWUrPTE7cmV0dXJuIG59ZnVuY3Rpb24gVGdlKG4pe3JldHVybiBkMChuLCh0LGUpPT50K2UsMCl9ZnVuY3Rpb24gc2F0KG4pe3JldHVybiBkMChuLCh0LGUpPT50PmU/dDplLEFycmF5LmlzQXJyYXkobik/blswXTp2b2lkIDApfWZ1bmN0''@;'; put 'put ''aW9uIGxhdChuKXtyZXR1cm4gZDAobiwodCxlKT0+dDxlP3Q6ZSxBcnJheS5pc0FycmF5KG4pP25bMF06dm9pZCAwKX1mdW5jdGlvbiBjYXQobil7cmV0dXJuIG4ubGVuZ3RoP1RnZShuKS9uLmxlbmd0aDowfWZ1bmN0aW9uIEFnZShuKXtyZXR1cm4gZDAobiwodCxlKT0+dC5jb25jYXQoQXJy''@;'; put 'put ''YXkuaXNBcnJheShlKT9BZ2UoZSk6ZSksW10pfWZ1bmN0aW9uIGtnZShuKXtjb25zdCB0PVtdO3JldHVybiBZbihuLGU9PnstMT09PXQuaW5kZXhPZihlKSYmdC5wdXNoKGUpfSksdH1mdW5jdGlvbiBZcSgpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KG4pLGU9MDtl''@;'; put 'put ''PG47ZSsrKXRbZV09YXJndW1lbnRzW2VdO2NvbnN0W3IsLi4uaV09Wy4uLnRdO2xldCBhPXI7cmV0dXJuIFluKGksYz0+e2E9YS5maWx0ZXIobT0+IWMuaW5jbHVkZXMobSkpfSksYX1mdW5jdGlvbiB1YXQoKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShuKSxlPTA7''@;'; put 'put ''ZTxuO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtjb25zdFtyLC4uLmldPVsuLi50XTtsZXQgYT1yO3JldHVybiBZbihpLGM9PnthPWEuZmlsdGVyKG09PmMuaW5jbHVkZXMobSkpfSksYX1mdW5jdGlvbiBkYXQoKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShuKSxlPTA7''@;'; put 'put ''ZTxuO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtjb25zdFtyLC4uLmldPVsuLi50XSxhPW5ldyBTZXQocik7cmV0dXJuIFluKGksYz0+e1luKGMsbT0+e2EuaGFzKG0pfHxhLmFkZChtKX0pfSksQXJyYXkuZnJvbShhKX1mdW5jdGlvbiBHcShuKXtyZXR1cm4gbi5zcGxpdChhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBlbChuKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKWVbci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIGQwKG4sKGEsYyxtKT0+''@;'; put 'put ''YStjLnJlcGxhY2UoL1xyP1xuXHMqL2csIiIpKyhlW21dP2VbbV06IiIpLCIiKS50cmltKCl9ZnVuY3Rpb24gZEMobil7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyllW3ItMV09YXJndW1lbnRzW3JdO2NvbnN0IGk9ZG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtpLmlubmVySFRNTD1uLnJlZHVjZSgobSxDLFApPT57dmFyIFk7cmV0dXJuIG0rQysobnVsbCE9PShZPWVbUF0pJiZ2b2lkIDAhPT1ZP1k6IiIpfSwiIik7Y29uc3QgYT1pLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSxjPXt9O3JldHVybiBhLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJlZl0iKS5mb3JFYWNoKG09Pntjb25zdCBDPW0uZ2V0QXR0cmlidXRlKCJkYXRhLXJlZiIpO20ucmVtb3ZlQXR0cmlidXRlKCJkYXRhLXJlZiIpLGNbQ109bX0pLHtmcmFnbWVudDphLHJlZnM6Y319ZnVuY3Rpb24gcWwobil7bGV0IHQ7c3dpdGNoKHR5''@;'; put 'put ''cGVvZiBuKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOnQ9YCR7bn1gO2JyZWFrO2Nhc2Uib2JqZWN0Ijp0PW51bGw9PT1uPyIiOm4udG9TdHJpbmcoKTticmVhaztjYXNlInVuZGVmaW5lZCI6dD0iIjticmVhaztkZWZhdWx0OnQ9bi50b1N0cmluZygpfXJldHVybiB0fWZ1bmN0aW9uIHdh''@;'; put 'put ''KG4pe3JldHVybiB0eXBlb2YgbjwidSJ9ZnVuY3Rpb24gbWMobil7cmV0dXJuIHR5cGVvZiBuPiJ1In1mdW5jdGlvbiBHYyhuKXtyZXR1cm4gbnVsbD09PW58fCIiPT09bnx8bWMobil9ZnVuY3Rpb24gRGdlKG4pe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZy5jYWxsKG4pfWQoNDQyMTMpO2NvbnN0IE5BPSJsZW5ndGgiLFZBPW49PnBhcnNlSW50KG4sMTYpLElnZT1uPT5wYXJzZUludChuLDEwKSxYSD0obix0LGUpPT5uLnN1YnN0cih0LGUpLEJBPW49Pm4uY29kZVBvaW50QXQoMCktNjUsJHE9bj0+YCR7bn1gLnJlcGxhY2UoL1wtL2cs''@;'; put 'put ''IiIpO2xldCBSZ2U9ITE7Y29uc3QgTGdlPXtpbnZhbGlkOigpPT5lbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsZXhw''@;'; put 'put ''aXJlZDpuPT57bGV0e2tleVZhbGlkaXR5RGF0ZTp0LGhvdFZlcnNpb246ZX09bjtyZXR1cm4gZWxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7dH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7''@;'; put 'put ''ZX0uIFJlbmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFuZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yXHgyMAogICAgdG8gJHt0fS4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc2FsZXNAaGFuZHNvbnRhYmxlLmNvbS5g''@;'; put 'put ''fSxtaXNzaW5nOigpPT5lbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFi''@;'; put 'put ''bGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3RceDIwCiAgICB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5j''@;'; put 'put ''b20uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9LE9nZT17aW52YWxpZDooKT0+ZWxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5''@;'; put 'put ''Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IG9uIGhvdyB0b1x4MjAKICAgIGluc3RhbGwgaXQgcHJvcGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAs''@;'; put 'put ''ZXhwaXJlZDpuPT57bGV0e2tleVZhbGlkaXR5RGF0ZTp0LGhvdFZlcnNpb246ZX09bjtyZXR1cm4gZWxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7dH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9u''@;'; put 'put ''ICR7ZX0uIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9wcmljaW5nIiB0YXJnZXQ9Il9ibGFuayI+UmVuZXc8L2E+IHlvdXJceDIwCiAgICBsaWNlbnNlIGtleSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yIHRvICR7dH0uIElmIHlvdSBuZWVkIGFu''@;'; put 'put ''eVx4MjAKICAgIGhlbHAsIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb20iPnNhbGVzQGhhbmRzb250YWJsZS5jb208L2E+LmB9LG1pc3Npbmc6KCk9PmVsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4g''@;'; put 'put ''VXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAn''@;'; put 'put ''bm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0IGluXHgyMAogICAgdGhlIGRvY3Vt''@;'; put 'put ''ZW50YXRpb24gb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifTtmdW5jdGlvbiBQZ2Uobix0KXtjb25zdCBlPSFHYyhuKSxyPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgbiYmIm5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj09PW4udG9Mb3dlckNhc2UoKSxpPSIxNi4yLjAiO2xldCBhLGM9ImludmFsaWQiLG09ImludmFsaWQiO2NvbnN0IEM9ZnVuY3Rpb24gcGF0KG4pe2xldCB0PVtdW05BXSxlPXQ7aWYobltOQV0hPT1CQSgiWiIpKXJl''@;'; put 'put ''dHVybiExO2ZvcihsZXQgcj0iIixpPSJCPEg0UCsiLnNwbGl0KCIiKSxhPUJBKGkuc2hpZnQoKSk7YTthPUJBKGkuc2hpZnQoKXx8IkEiKSktLWE8IiJbTkFdP2V8PShJZ2UoYCR7SWdlKFZBKHIpKyhWQShYSChuLE1hdGguYWJzKGEpLDIpKStbXSkucGFkU3RhcnQoMiwiMCIpKX1gKSU5N3x8''@;'; put 'put ''Mik+PjE6cj1YSChuLGEsYT8xPT09aVtOQV0/OTo4OjYpO3JldHVybiBlPT09dH0obj0kcShufHwiIikpO2lmKGV8fHJ8fEMpaWYoQyl7Y29uc3QgUD1xcygiMjUvMTEvMjAyNSIsIkREL01NL1lZWVkiKSxZPU1hdGguZmxvb3IoUC50b0RhdGUoKS5nZXRUaW1lKCkvODY0ZTUpLEo9KG49PlZB''@;'; put 'put ''KFhIKCRxKG4pLFZBKCIxMiIpLEJBKCJGIikpKS8oVkEoWEgoJHEobiksQkEoIkIiKSx+fiFbXVtOQV0pKXx8OSkpKG4pO2E9cXMoODY0ZTUqKEorMSksIngiKS5mb3JtYXQoIk1NTU0gREQsIFlZWVkiKSxZPko/KGM9ImV4cGlyZWQiLG09ImV4cGlyZWQiKTooYz0idmFsaWQiLG09InZhbGlk''@;'; put 'put ''Iil9ZWxzZSByPyhjPSJub25fY29tbWVyY2lhbCIsbT0idmFsaWQiKTooYz0iaW52YWxpZCIsbT0iaW52YWxpZCIpO2Vsc2UgYz0ibWlzc2luZyIsbT0ibWlzc2luZyI7aWYodHlwZW9mIGxvY2F0aW9uPCJ1IiYmL14oW2EtejAtOVwtXStcLik/XHg2OFx4NjFceDZFXHg2NFx4NzNceDZGXHg2''@;'; put 'put ''RVx4NzRceDYxXHg2Mlx4NkNceDY1XHgyRVx4NjNceDZGXHg2RCQvaS50ZXN0KGxvY2F0aW9uLmhvc3QpJiYoYz0idmFsaWQiLG09InZhbGlkIiksIVJnZSYmInZhbGlkIiE9PWMmJihMZ2VbY10oe2tleVZhbGlkaXR5RGF0ZTphLGhvdFZlcnNpb246aX0pJiZjb25zb2xlWyJub25fY29tbWVy''@;'; put 'put ''Y2lhbCI9PT1jPyJpbmZvIjoid2FybiJdKExnZVtjXSh7a2V5VmFsaWRpdHlEYXRlOmEsaG90VmVyc2lvbjppfSkpLFJnZT0hMCksInZhbGlkIiE9PW0mJnQmJk9nZVttXSh7a2V5VmFsaWRpdHlEYXRlOmEsaG90VmVyc2lvbjppfSkpe2NvbnN0IFk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''ZGl2Iik7WS5jbGFzc05hbWU9ImhhbmRzb250YWJsZSBob3QtZGlzcGxheS1saWNlbnNlLWluZm8iLFkuaW5uZXJIVE1MPU9nZVttXSh7a2V5VmFsaWRpdHlEYXRlOmEsaG90VmVyc2lvbjppfSksdC5hcHBlbmRDaGlsZChZKX19ZnVuY3Rpb24gZWQobil7cmV0dXJuIG5bMF0udG9VcHBlckNh''@;'; put 'put ''c2UoKStuLnN1YnN0cigxKX1mdW5jdGlvbiBnYXQoKXtjb25zdCBuPVtdO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO2xldCBpPWUubGVuZ3RoO2Zvcig7aTspe2ktPTE7Y29uc3QgYT1xbChlW2ldKS50b0xv''@;'; put 'put ''d2VyQ2FzZSgpOy0xPT09bi5pbmRleE9mKGEpJiZuLnB1c2goYSl9cmV0dXJuIDE9PT1uLmxlbmd0aH1mdW5jdGlvbiBLcSgpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4gbigp''@;'; put 'put ''K24oKStuKCkrbigpfWZ1bmN0aW9uIEZnZShuKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuITE7dHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShuKTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBYcShuKXtyZXR1cm4vXihbMC05''@;'; put 'put ''XVswLTldPyUkKXwoXjEwMCUkKS8udGVzdChuKX1mdW5jdGlvbiBxSChuKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuYCR7bn1gLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZywoZSxyKT0+IlxcIj09''@;'; put 'put ''PWUuY2hhckF0KDApP2Uuc3Vic3RyKDEsZS5sZW5ndGgtMSk6dm9pZCAwPT09dFtyXT8iIjp0W3JdKX1mdW5jdGlvbiBiNChuKXtyZXR1cm4gSkgoYCR7bn1gLHtBTExPV0VEX1RBR1M6W119KX1mdW5jdGlvbiBKSChuLHQpe3JldHVybiBvYXQuc2FuaXRpemUobix0KX1jb25zdCBhcD1uPT5b''@;'; put 'put ''InRhYmluZGV4IixuXSxUMj1uPT5bImFyaWEtbGFiZWwiLG5dLFJhdD1uPT5bImFyaWEtbGFiZWxsZWRieSIsbl0sTGF0PW49PlsiYXJpYS1kZXNjcmliZWRieSIsbl0sakE9ZnVuY3Rpb24oKXtyZXR1cm5bImFyaWEtZGlzYWJsZWQiLCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF1dfSxCZ2U9bj0+WyJhcmlhLWhhc3BvcHVwIixuXSxqZ2U9bj0+WyJhcmlhLXJvd2NvdW50IixuXSxRSD1uPT5bImFyaWEtY29sY291bnQiLG5dLHpnZT1uPT5bImFyaWEtcm93aW5kZXgiLG5dLHFxPW49PlsiYXJpYS1jb2xpbmRleCIsbl0semY9''@;'; put 'put ''bj0+WyJhcmlhLWV4cGFuZGVkIixuXSxaZ2U9bj0+WyJhcmlhLWNoZWNrZWQiLG5dLEhhdD1uPT5bImFyaWEtY29udHJvbHMiLG5dLFZhdD1uPT5bImFyaWEtbGl2ZSIsbl0sQmF0PW49PlsiYXJpYS1yZWxldmFudCIsbl0samF0PW49PlsiYXJpYS1zZXRzaXplIixuXSx6YXQ9bj0+WyJhcmlh''@;'; put 'put ''LXBvc2luc2V0IixuXTtmdW5jdGlvbiBoQyhuKXtsZXQgdDtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT90PW4ubGVuZ3RoP25ldyBBcnJheShuLmxlbmd0aCkuZmlsbChudWxsKTpbXToodD17fSxhcyhuLChlLHIpPT57Il9fY2hpbGRyZW4iIT09ciYmKHRbcl09ZSYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBlJiYhQXJyYXkuaXNBcnJheShlKT9oQyhlKTpBcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGVbMF0mJiFBcnJheS5pc0FycmF5KGVbMF0pP1toQyhlWzBdKV06W106bnVsbCl9KSksdH1mdW5jdGlvbiBZZ2Uobix0KXtyZXR1cm4gdC5wcm90b3R5cGUuY29u''@;'; put 'put ''c3RydWN0b3I9dCxuLnByb3RvdHlwZT1uZXcgdCxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG59ZnVuY3Rpb24gRnUobix0LGUpe2NvbnN0IHI9QXJyYXkuaXNBcnJheShlKTtyZXR1cm4gYXModCwoaSxhKT0+eyghMT09PXJ8fGUuaW5jbHVkZXMoYSkpJiYoblthXT1pKX0pLG59ZnVuY3Rp''@;'; put 'put ''b24gekEobix0KXthcyh0LChlLHIpPT57dFtyXSYmIm9iamVjdCI9PXR5cGVvZiB0W3JdPyhuW3JdfHwobltyXT1BcnJheS5pc0FycmF5KHRbcl0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0W3JdKT90W3JdOnt9KSx6QShuW3JdLHRbcl0p''@;'; put 'put ''KTpuW3JdPXRbcl19KX1mdW5jdGlvbiB0ZChuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuKSk6bn1mdW5jdGlvbiBvcChuKXtjb25zdCB0PXt9O3JldHVybiBhcyhuLChlLHIpPT57dFtyXT1lfSksdH1mdW5jdGlvbiBwbChuKXtuLk1JWElO''@;'; put 'put ''U3x8KG4uTUlYSU5TPVtdKTtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKWVbci0xXT1hcmd1bWVudHNbcl07cmV0dXJuIFluKGUsaT0+e24uTUlYSU5TLnB1c2goaS5NSVhJTl9OQU1FKSxhcyhpLChhLGMpPT57aWYodm9pZCAw''@;'; put 'put ''IT09bi5wcm90b3R5cGVbY10pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7Y30nIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5gKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSluLnByb3RvdHlwZVtjXT1hO2Vsc2V7Y29uc3QgQz1m''@;'; put 'put ''dW5jdGlvbihZKXtjb25zdCBKPWBfJHtZfWA7cmV0dXJuIGZ1bmN0aW9uKGNlKXt0aGlzW0pdPWNlfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGMse2dldDpmdW5jdGlvbihZLEope2NvbnN0IGNlPWBfJHtZfWA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09''@;'; put 'put ''PXRoaXNbY2VdJiYodGhpc1tjZV09KEFlPT57bGV0IEhlPUFlO3JldHVybihBcnJheS5pc0FycmF5KEhlKXx8aG8oSGUpKSYmKEhlPXRkKEhlKSksSGV9KShKKSksdGhpc1tjZV19fShjLGEpLHNldDpDKGMpLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSksbn1mdW5jdGlvbiBVQShuLHQpe3JldHVy''@;'; put 'put ''biBKU09OLnN0cmluZ2lmeShuKT09PUpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIGhvKG4pe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pfWZ1bmN0aW9uIHc0KG4sdCxlLHIpe3IudmFsdWU9ZSxyLndyaXRhYmxlPSExIT09ci53''@;'; put 'put ''cml0YWJsZSxyLmVudW1lcmFibGU9ITEhPT1yLmVudW1lcmFibGUsci5jb25maWd1cmFibGU9ITEhPT1yLmNvbmZpZ3VyYWJsZSxPYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHIpfWZ1bmN0aW9uIGFzKG4sdCl7Zm9yKGNvbnN0IGUgaW4gbilpZigoIW4uaGFzT3duUHJvcGVydHl8fG4uaGFz''@;'; put 'put ''T3duUHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpKSYmITE9PT10KG5bZV0sZSxuKSlicmVhaztyZXR1cm4gbn1mdW5jdGlvbiBlTihuLHQpe2NvbnN0IGU9dC5zcGxpdCgiLiIpO2xldCByPW47cmV0dXJuIGFzKGUsaT0+e2lmKHI9cltpXSx2b2lk''@;'; put 'put ''IDA9PT1yKXJldHVybiByPXZvaWQgMCwhMX0pLHJ9ZnVuY3Rpb24gdE4obix0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm47Y29uc3Qgcj10LnNwbGl0KCIuIik7bGV0IGk9bjtyLmZvckVhY2goKGEsYyk9PnsiX19wcm90b19fIj09PWF8fCJjb25zdHJ1Y3RvciI9PT1hfHwicHJv''@;'; put 'put ''dG90eXBlIj09PWF8fChjIT09ci5sZW5ndGgtMT8oJGMoaSxhKXx8KGlbYV09e30pLGk9aVthXSk6aVthXT1lKX0pfWZ1bmN0aW9uIG5OKG4pe2lmKCFobyhuKSlyZXR1cm4gMDtjb25zdCB0PWZ1bmN0aW9uKGUpe2xldCByPTA7cmV0dXJuIGhvKGUpP2FzKGUsKGksYSk9PnsiX19jaGlsZHJl''@;'; put 'put ''biIhPT1hJiYocis9dChpKSl9KTpyKz0xLHJ9O3JldHVybiB0KG4pfWZ1bmN0aW9uIEFoKG4pe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGU9YF8ke3R9YCxyPXtfdG91Y2hlZDohMSxbZV06bixpc1Rv''@;'; put 'put ''dWNoZWQoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZH19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocix0LHtnZXQoKXtyZXR1cm4gdGhpc1tlXX0sc2V0KGkpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1tlXT1pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHJ9ZnVuY3Rpb24g''@;'; put 'put ''JGMobix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9ZnVuY3Rpb24gV0Eobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fG51bGw9PT1uKXJldHVybiB0O2lmKCJvYmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuIG47Y29uc3QgZT17''@;'; put 'put ''fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChyPT57ZVtyXT0ib2JqZWN0IiE9dHlwZW9mIHRbcl18fG51bGw9PT10W3JdfHxBcnJheS5pc0FycmF5KHRbcl0pPyRjKG4scikmJnZvaWQgMCE9PW5bcl0/bltyXTp0W3JdOldBKG5bcl0sdFtyXSl9KSxPYmplY3Qua2V5cyhuKS5mb3JF''@;'; put 'put ''YWNoKHI9PnskYyhlLHIpfHwoZVtyXT1uW3JdKX0pLGV9ZnVuY3Rpb24gWkEobil7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9ZnVuY3Rpb24gWUEobil7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pfWZ1bmN0aW9uIFFxKCl7cmV0dXJuIm9udG91Y2hzdGFy''@;'; put 'put ''dCJpbiB3aW5kb3d9ZnVuY3Rpb24gR2dlKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUifWxldCBmQztmdW5jdGlvbiAkZ2Uobil7cmV0dXJuIGZDfHwoZkM9Im9iamVjdCI9PXR5cGVvZiBJbnRsP25ldyBJbnRsLkNvbGxhdG9yKG4sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5jb21wYXJlOiJmdW5jdGlvbiI9PXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmU/KGUscik9PmAke2V9YC5sb2NhbGVDb21wYXJlKHIpOihlLHIpPT5lPT09cj8wOmU+cj8tMToxLGZDKX1kKDk1NDkzKTtjb25zdCBVZj1uPT57''@;'; put 'put ''Y29uc3QgdD17dmFsdWU6ITEsdGVzdDooZSxyKT0+e3QudmFsdWU9bihlLHIpfX07cmV0dXJuIHR9LHA1PXtjaHJvbWU6VWYoKG4sdCk9Pi9DaHJvbWUvLnRlc3QobikmJi9Hb29nbGUvLnRlc3QodCkpLGNocm9tZVdlYktpdDpVZihuPT4vQ3JpT1MvLnRlc3QobikpLGVkZ2U6VWYobj0+L0Vk''@;'; put 'put ''Z2UvLnRlc3QobikpLGVkZ2VXZWJLaXQ6VWYobj0+L0VkZ2lPUy8udGVzdChuKSksZmlyZWZveDpVZihuPT4vRmlyZWZveC8udGVzdChuKSksZmlyZWZveFdlYktpdDpVZihuPT4vRnhpT1MvLnRlc3QobikpLG1vYmlsZTpVZihuPT4vQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJs''@;'; put 'put ''YWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobikpLHNhZmFyaTpVZigobix0KT0+L1NhZmFyaS8udGVzdChuKSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KHQpKX0scEM9e21hYzpVZihuPT4vXk1hYy8udGVzdChuKSksd2luOlVmKG49Pi9eV2luLy50ZXN0KG4pKSxsaW51eDpV''@;'; put 'put ''ZihuPT4vXkxpbnV4Ly50ZXN0KG4pKSxpb3M6VWYobj0+L2lQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KG4pKX07ZnVuY3Rpb24gS2dlKCl7bGV0e3VzZXJBZ2VudDpuPW5hdmlnYXRvci51c2VyQWdlbnQsdmVuZG9yOnQ9bmF2aWdhdG9yLnZlbmRvcn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2FzKHA1LGU9PntsZXR7dGVzdDpyfT1lO3Iobix0KX0pfWZ1bmN0aW9uIFhnZSgpe2xldHtwbGF0Zm9ybTpuPW5hdmlnYXRvci5wbGF0Zm9ybX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOnt9O2FzKHBDLHQ9PntsZXR7dGVzdDplfT10O2Uobil9KX1mdW5jdGlvbiBlSigpe3JldHVybiBwNS5jaHJvbWUudmFsdWV9ZnVuY3Rpb24gcWdlKCl7cmV0dXJuIHA1LmNocm9tZVdlYktpdC52YWx1ZX1mdW5jdGlvbiByTigpe3JldHVybiBwNS5maXJlZm94LnZhbHVlfWZ1bmN0''@;'; put 'put ''aW9uIEpnZSgpe3JldHVybiBwNS5maXJlZm94V2ViS2l0LnZhbHVlfWZ1bmN0aW9uIEdBKCl7cmV0dXJuIHA1LnNhZmFyaS52YWx1ZX1mdW5jdGlvbiBRZ2UoKXtyZXR1cm4gcDUuZWRnZS52YWx1ZX1mdW5jdGlvbiBXYXQoKXtyZXR1cm4gcDUuZWRnZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBz''@;'; put 'put ''cCgpe3JldHVybiBwNS5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gdEooKXtyZXR1cm4gcEMuaW9zLnZhbHVlfWZ1bmN0aW9uIGlOKCl7bGV0e21heFRvdWNoUG9pbnRzOm59PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuYXZpZ2F0b3I7cmV0''@;'; put 'put ''dXJuIG4+MiYmcEMubWFjLnZhbHVlfWZ1bmN0aW9uIGFOKCl7cmV0dXJuIHBDLndpbi52YWx1ZX1mdW5jdGlvbiBvTigpe3JldHVybiBwQy5tYWMudmFsdWV9ZnVuY3Rpb24gWmF0KCl7cmV0dXJuIHBDLmxpbnV4LnZhbHVlfWZ1bmN0aW9uIGU1ZShuKXtsZXQgdD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxlPS0xLHI9bnVsbCxpPW47Zm9yKDtudWxsIT09aTspe2lmKGU9PT10KXtyPWk7YnJlYWt9aS5ob3N0JiZpLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2k9aS5ob3N0OihlKz0xLGk9aS5wYXJl''@;'; put 'put ''bnROb2RlKX1yZXR1cm4gcn1mdW5jdGlvbiAkQShuLHQpe2NvbnN0IGU9bi5jbG9zZXN0KCIuaGFuZHNvbnRhYmxlIik7cmV0dXJuISFlJiYoZS5wYXJlbnROb2RlPT09dHx8ZT09PXQpfWZ1bmN0aW9uIHQ1ZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucGFyZW50KSYmbi5m''@;'; put 'put ''cmFtZUVsZW1lbnR9ZnVuY3Rpb24gZzUobil7cmV0dXJuIHQ1ZShuKSYmbi5wYXJlbnR9ZnVuY3Rpb24gWWF0KG4pe3JldHVybiEhT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucGFyZW50KX1mdW5jdGlvbiBLNihuKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1sxXT9hcmd1bWVudHNbMV06W10sZT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtjb25zdHtFTEVNRU5UX05PREU6cixET0NVTUVOVF9GUkFHTUVOVF9OT0RFOml9PU5vZGU7bGV0IGE9bjtmb3IoO251bGwhPWEmJmEhPT1lOyl7Y29uc3R7bm9kZVR5cGU6Yyxub2Rl''@;'; put 'put ''TmFtZTptfT1hO2lmKGM9PT1yJiYodC5pbmNsdWRlcyhtKXx8dC5pbmNsdWRlcyhhKSkpcmV0dXJuIGE7Y29uc3R7aG9zdDpDfT1hO2E9QyYmYz09PWk/QzphLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gS0Eobix0LGUpe2NvbnN0IHI9W107bGV0IGk9bjtmb3IoO2kmJihpPUs2''@;'; put 'put ''KGksdCxlKSxpJiYoIWV8fGUuY29udGFpbnMoaSkpKTspci5wdXNoKGkpLGk9aS5ob3N0JiZpLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2kuaG9zdDppLnBhcmVudE5vZGU7Y29uc3QgYT1yLmxlbmd0aDtyZXR1cm4gYT9yW2EtMV06bnVsbH1mdW5jdGlvbiBuNWUo''@;'; put 'put ''bix0KXtjb25zdCBlPXtlbGVtZW50OnZvaWQgMCxjbGFzc05hbWVzOltdfTtsZXQgcj1uO2Zvcig7bnVsbCE9PXImJnIhPT1uLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhZS5lbGVtZW50Oyl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZyLmNsYXNzTGlzdC5jb250YWlucyh0KSll''@;'; put 'put ''LmVsZW1lbnQ9cixlLmNsYXNzTmFtZXMucHVzaCh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBSZWdFeHApe2NvbnN0IGk9QXJyYXkuZnJvbShyLmNsYXNzTGlzdCkuZmlsdGVyKGE9PnQudGVzdChhKSk7aS5sZW5ndGgmJihlLmVsZW1lbnQ9cixlLmNsYXNzTmFtZXMucHVzaCguLi5pKSl9cj1y''@;'; put 'put ''LnBhcmVudEVsZW1lbnR9cmV0dXJuIGV9ZnVuY3Rpb24gWDYobix0KXtsZXQgZT1uLnBhcmVudE5vZGUscj1bXTtmb3IoInN0cmluZyI9PXR5cGVvZiB0P3I9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kZWZhdWx0Vmlldz9uLnF1ZXJ5U2VsZWN0b3JBbGwodCk6bi5vd25lckRvY3Vt''@;'; put 'put ''ZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCksMCk6ci5wdXNoKHQpO251bGwhPT1lOyl7aWYoci5pbmRleE9mKGUpPi0xKXJldHVybiEwO2U9ZS5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIHI1ZShuKXtsZXQgdD0wLGU9bjtpZihlLnByZXZpb3VzU2libGluZylmb3IoO2U9ZS5wcmV2aW91''@;'; put 'put ''c1NpYmxpbmc7KXQrPTE7cmV0dXJuIHR9ZnVuY3Rpb24gcTYobix0LGUpe2NvbnN0IHI9ZS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke259YCk7cmV0dXJuIHI/ci5jb250YWlucyh0KTpudWxsfWZ1bmN0aW9uIGk1ZShuKXtyZXR1cm4gbiYmbi5sZW5ndGg/bi5m''@;'; put 'put ''aWx0ZXIodD0+ISF0KTpbXX1mdW5jdGlvbiBhNWUobix0KXtpZighbnx8IW4ubGVuZ3RoKXJldHVybiB0P3tyZWdleEZyZWU6W10scmVnZXhlczpbXX06W107Y29uc3QgZT1bXSxyPVtdO3JldHVybiByLnB1c2goLi4ubi5maWx0ZXIoaT0+e2NvbnN0IGE9aSBpbnN0YW5jZW9mIFJlZ0V4cDty''@;'; put 'put ''ZXR1cm4gYSYmdCYmZS5wdXNoKGkpLCFhfSkpLHQ/e3JlZ2V4RnJlZTpyLHJlZ2V4ZXM6ZX06cn1mdW5jdGlvbiB2byhuLHQpe3JldHVybiB2b2lkIDAhPT1uLmNsYXNzTGlzdCYmInN0cmluZyI9PXR5cGVvZiB0JiYiIiE9PXQmJm4uY2xhc3NMaXN0LmNvbnRhaW5zKHQpfWZ1bmN0aW9uIHRp''@;'; put 'put ''KG4sdCl7InN0cmluZyI9PXR5cGVvZiB0JiYodD10LnNwbGl0KCIgIikpLCh0PWk1ZSh0KSkubGVuZ3RoPjAmJm4uY2xhc3NMaXN0LmFkZCguLi50KX1mdW5jdGlvbiBIYShuLHQpeyJzdHJpbmciPT10eXBlb2YgdD90PXQuc3BsaXQoIiAiKTp0IGluc3RhbmNlb2YgUmVnRXhwJiYodD1bdF0p''@;'; put 'put ''O2xldHtyZWdleEZyZWU6ZSxyZWdleGVzOnJ9PWE1ZSh0LCEwKTtlPWk1ZShlKSxlLmxlbmd0aD4wJiZuLmNsYXNzTGlzdC5yZW1vdmUoLi4uZSksci5mb3JFYWNoKGk9PntuLmNsYXNzTGlzdC5mb3JFYWNoKGE9PntpLnRlc3QoYSkmJm4uY2xhc3NMaXN0LnJlbW92ZShhKX0pfSl9ZnVuY3Rp''@;'; put 'put ''b24gWmEobil7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGU9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9W1t0LGVdXSksdC5mb3JFYWNoKHI9PntBcnJheS5p''@;'; put 'put ''c0FycmF5KHIpJiYiIiE9PXJbMF0mJm4uc2V0QXR0cmlidXRlKC4uLnIpfSl9ZnVuY3Rpb24gQzQobil7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdOyJzdHJpbmciPT10eXBlb2YgdD90PXQuc3BsaXQoIiAiKTp0IGluc3Rh''@;'; put 'put ''bmNlb2YgUmVnRXhwJiYodD1bdF0pO2NvbnN0e3JlZ2V4RnJlZTplLHJlZ2V4ZXM6cn09YTVlKHQsITApO2UuZm9yRWFjaChpPT57IiIhPT1pJiZuLnJlbW92ZUF0dHJpYnV0ZShpKX0pLHIuZm9yRWFjaChpPT57bi5nZXRBdHRyaWJ1dGVOYW1lcygpLmZvckVhY2goYT0+e2kudGVzdChhKSYm''@;'; put 'put ''bi5yZW1vdmVBdHRyaWJ1dGUoYSl9KX0pfWZ1bmN0aW9uIG5KKG4pe2lmKDM9PT1uLm5vZGVUeXBlKW4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTtlbHNlIGlmKFsiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUUiJdLmluZGV4T2Yobi5ub2RlTmFtZSk+LTEpe2NvbnN0IHQ9''@;'; put 'put ''bi5jaGlsZE5vZGVzO2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKW5KKHRbZV0pfX1mdW5jdGlvbiBTNChuKXtsZXQgdDtmb3IoO3Q9bi5sYXN0Q2hpbGQ7KW4ucmVtb3ZlQ2hpbGQodCl9R2dlKCkmJihLZ2UoKSxYZ2UoKSk7Y29uc3QgbzVlPS8oPCguKik+fCYoLiopOykvO2Z1bmN0''@;'; put 'put ''aW9uIEo2KG4sdCl7bGV0IGU9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtvNWUudGVzdCh0KT9uLmlubmVySFRNTD1lP0pIKHQpOnQ6UTYobix0KX1mdW5jdGlvbiBRNihuLHQpe2NvbnN0IGU9bi5maXJzdENoaWxkO2UmJjM9PT1l''@;'; put 'put ''Lm5vZGVUeXBlJiZudWxsPT09ZS5uZXh0U2libGluZz9lLnRleHRDb250ZW50PXQ6KFM0KG4pLG4uYXBwZW5kQ2hpbGQobi5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpKSl9ZnVuY3Rpb24gZTgobil7Y29uc3QgdD1uLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9bi5v''@;'; put 'put ''d25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2xldCByPW47Zm9yKDtyIT09dDspe2lmKG51bGw9PT1yKXJldHVybiExO2lmKHIubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2lmKHIuaG9zdCl7aWYoci5ob3N0LmltcGwpcmV0dXJuIGU4KHIuaG9zdC5pbXBsKTtpZihy''@;'; put 'put ''Lmhvc3QpcmV0dXJuIGU4KHIuaG9zdCk7dGhyb3cgbmV3IEVycm9yKCJMb3N0IGluIFdlYiBDb21wb25lbnRzIHdvcmxkIil9cmV0dXJuITF9aWYoIm5vbmUiPT09ZS5nZXRDb21wdXRlZFN0eWxlKHIpLmRpc3BsYXkpcmV0dXJuITE7cj1yLnBhcmVudE5vZGV9cmV0dXJuITB9ZnVuY3Rpb24g''@;'; put 'put ''czVlKG4pe2NvbnN0IGU9bi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2xldCByPW47Zm9yKDtyLnBhcmVudE5vZGU7KXtpZigiMHB4Ij09PXIuc3R5bGUuaGVpZ2h0fHwiMCI9PT1yLnN0eWxlLmhlaWdodClyZXR1cm4iaGlkZGVuIj09PWUuZ2V0Q29tcHV0ZWRTdHlsZShyKS5vdmVyZmxv''@;'; put 'put ''dztyPXIucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBFMShuKXtjb25zdCB0PW4ub3duZXJEb2N1bWVudCxlPXQuZGVmYXVsdFZpZXcscj10LmRvY3VtZW50RWxlbWVudDtsZXQgYSxjLG0saT1uO2ZvcihhPWkub2Zmc2V0TGVmdCxjPWkub2Zmc2V0VG9wLG09aTsoaT1pLm9mZnNldFBh''@;'; put 'put ''cmVudCkmJmkhPT10LmJvZHkmJiJvZmZzZXRMZWZ0ImluIGk7KWErPWkub2Zmc2V0TGVmdCxjKz1pLm9mZnNldFRvcCxtPWk7cmV0dXJuIG0mJiJmaXhlZCI9PT1tLnN0eWxlLnBvc2l0aW9uJiYoYSs9ZS5wYWdlWE9mZnNldHx8ci5zY3JvbGxMZWZ0LGMrPWUucGFnZVlPZmZzZXR8fHIuc2Ny''@;'; put 'put ''b2xsVG9wKSx7bGVmdDphLHRvcDpjfX1mdW5jdGlvbiBySigpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxZfWZ1bmN0aW9uIHNOKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFh9ZnVuY3Rpb24gbE4obil7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gbj09PXQ/ckoodCk6bi5zY3JvbGxUb3B9ZnVuY3Rpb24g''@;'; put 'put ''aUoobil7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gbj09PXQ/c04odCk6bi5zY3JvbGxMZWZ0fWZ1bmN0aW9uIFhBKG4pe2xldCB0PW4ub3duZXJEb2N1bWVudCxlPXQ/dC5kZWZhdWx0Vmlldzp2b2lk''@;'; put 'put ''IDA7dHx8KHQ9bi5kb2N1bWVudD9uLmRvY3VtZW50Om4sZT10LmRlZmF1bHRWaWV3KTtjb25zdCByPVsiYXV0byIsInNjcm9sbCJdO2xldCBpPW4ucGFyZW50Tm9kZTtmb3IoO2kmJmkuc3R5bGUmJnQuYm9keSE9PWk7KXtsZXR7b3ZlcmZsb3c6YSxvdmVyZmxvd1g6YyxvdmVyZmxvd1k6bX09''@;'; put 'put ''aS5zdHlsZTtpZihbYSxjLG1dLmluY2x1ZGVzKCJzY3JvbGwiKSlyZXR1cm4gaTtpZigoe292ZXJmbG93OmEsb3ZlcmZsb3dYOmMsb3ZlcmZsb3dZOm19PWUuZ2V0Q29tcHV0ZWRTdHlsZShpKSksci5pbmNsdWRlcyhhKXx8ci5pbmNsdWRlcyhjKXx8ci5pbmNsdWRlcyhtKXx8aS5jbGllbnRI''@;'; put 'put ''ZWlnaHQ8PWkuc2Nyb2xsSGVpZ2h0KzEmJihyLmluY2x1ZGVzKG0pfHxyLmluY2x1ZGVzKGEpKXx8aS5jbGllbnRXaWR0aDw9aS5zY3JvbGxXaWR0aCsxJiYoci5pbmNsdWRlcyhjKXx8ci5pbmNsdWRlcyhhKSkpcmV0dXJuIGk7aT1pLnBhcmVudE5vZGV9cmV0dXJuIGV9ZnVuY3Rpb24gbDVl''@;'; put 'put ''KG4pe3JldHVybiBuLnNjcm9sbEhlaWdodC1uLmNsaWVudEhlaWdodH1mdW5jdGlvbiBjNWUobil7cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aH1mdW5jdGlvbiBnQyhuKXtjb25zdCB0PW4ub3duZXJEb2N1bWVudCxlPXQuZGVmYXVsdFZpZXc7bGV0IHI9bi5wYXJlbnROb2Rl''@;'; put 'put ''O2Zvcig7ciYmci5zdHlsZSYmdC5ib2R5IT09cjspe2lmKCJ2aXNpYmxlIiE9PXIuc3R5bGUub3ZlcmZsb3cmJiIiIT09ci5zdHlsZS5vdmVyZmxvdylyZXR1cm4gcjtjb25zdCBpPWUuZ2V0Q29tcHV0ZWRTdHlsZShyKSxhPVsic2Nyb2xsIiwiaGlkZGVuIiwiYXV0byJdLGM9aS5nZXRQcm9w''@;'; put 'put ''ZXJ0eVZhbHVlKCJvdmVyZmxvdyIpLG09aS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy15IiksQz1pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXgiKTtpZihhLmluY2x1ZGVzKGMpfHxhLmluY2x1ZGVzKG0pfHxhLmluY2x1ZGVzKEMpKXJldHVybiByO3I9ci5wYXJlbnROb2RlfXJl''@;'; put 'put ''dHVybiBlfWZ1bmN0aW9uIHFBKG4sdCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOndpbmRvdztpZighbilyZXR1cm47aWYobj09PWUpcmV0dXJuIndpZHRoIj09PXQ/YCR7ZS5pbm5lcldpZHRofXB4YDoiaGVpZ2h0Ij09PXQ/''@;'; put 'put ''YCR7ZS5pbm5lckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IHI9bi5zdHlsZVt0XTtpZigiIiE9PXImJnZvaWQgMCE9PXIpcmV0dXJuIHI7Y29uc3QgaT1lLmdldENvbXB1dGVkU3R5bGUobik7cmV0dXJuIiIhPT1pW3RdJiZ2b2lkIDAhPT1pW3RdP2lbdF06dm9pZCAwfWZ1bmN0aW9uIEdhdChu''@;'; put 'put ''LHQpe2NvbnN0e3NlbGVjdG9yVGV4dDplfT10O2xldCByPSExO3JldHVybiB0LnR5cGU9PT1DU1NSdWxlLlNUWUxFX1JVTEUmJmUmJihuLm1zTWF0Y2hlc1NlbGVjdG9yP3I9bi5tc01hdGNoZXNTZWxlY3RvcihlKTpuLm1hdGNoZXMmJihyPW4ubWF0Y2hlcyhlKSkpLHJ9ZnVuY3Rpb24gcHUo''@;'; put 'put ''bil7cmV0dXJuIG4ub2Zmc2V0V2lkdGh9ZnVuY3Rpb24gSHUobil7cmV0dXJuIG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fWZ1bmN0aW9uIG1DKG4pe3JldHVybiBuLmNsaWVudEhlaWdodHx8bi5pbm5lckhlaWdodH1mdW5jdGlvbiBhSihuKXtyZXR1cm4gbi5jbGllbnRXaWR0''@;'; put 'put ''aHx8bi5pbm5lcldpZHRofWZ1bmN0aW9uICRhdChuLHQsZSl7bi5hZGRFdmVudExpc3RlbmVyKHQsZSwhMSl9ZnVuY3Rpb24gS2F0KG4sdCxlKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLCExKX1mdW5jdGlvbiBvSihuKXtyZXR1cm4gbi5zZWxlY3Rpb25TdGFydD9uLnNlbGVjdGlvblN0''@;'; put 'put ''YXJ0OjB9ZnVuY3Rpb24gdTVlKG4pe3JldHVybiBuLnNlbGVjdGlvbkVuZD9uLnNlbGVjdGlvbkVuZDowfWZ1bmN0aW9uIFhhdCgpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Y29uc3QgdD1uLmRvY3VtZW50O2xl''@;'; put 'put ''dCBlPSIiO3JldHVybiBuLmdldFNlbGVjdGlvbj9lPW4uZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTp0LnNlbGVjdGlvbiYmIkNvbnRyb2wiIT09dC5zZWxlY3Rpb24udHlwZSYmKGU9dC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0KSxlfWZ1bmN0aW9uIHNKKCl7bGV0IG49YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztuLmdldFNlbGVjdGlvbiYmKG4uZ2V0U2VsZWN0aW9uKCkuZW1wdHk/bi5nZXRTZWxlY3Rpb24oKS5lbXB0eSgpOm4uZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzJiZuLmdldFNlbGVj''@;'; put 'put ''dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpKX1mdW5jdGlvbiBKQShuLHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9dCksbi5zZXRTZWxlY3Rpb25SYW5nZSl7bi5mb2N1cygpO3RyeXtuLnNldFNlbGVjdGlvblJhbmdlKHQsZSl9Y2F0Y2h7Y29uc3QgaT1uLnBhcmVudE5vZGUsYT1pLnN0eWxlLmRp''@;'; put 'put ''c3BsYXk7aS5zdHlsZS5kaXNwbGF5PSJibG9jayIsbi5zZXRTZWxlY3Rpb25SYW5nZSh0LGUpLGkuc3R5bGUuZGlzcGxheT1hfX19bGV0IGxKO2Z1bmN0aW9uIGQ1ZSgpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVu''@;'; put 'put ''dDtyZXR1cm4gYU4oKT9OdW1iZXIuaXNJbnRlZ2VyKG4uZGVmYXVsdFZpZXcuZGV2aWNlUGl4ZWxSYXRpb3x8MSk/MDoyOjB9ZnVuY3Rpb24gZ3UoKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7cmV0dXJuIHZv''@;'; put 'put ''aWQgMD09PWxKJiYobEo9ZnVuY3Rpb24gcWF0KCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IHQ9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LnN0eWxlLmhlaWdodD0iMjAwcHgiLHQuc3R5bGUud2lk''@;'; put 'put ''dGg9IjEwMCUiO2NvbnN0IGU9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTtHQSgpJiYhc3AoKSYmIWlOKCkmJmUuY2xhc3NMaXN0LmFkZCgiaHRTY3JvbGxiYXJTYWZhcmlUZXN0IiksZS5zdHlsZS5ib3hTaXppbmc9ImNvbnRlbnQtYm94IixlLnN0eWxlLmhlaWdodD0iMTUwcHgiLGUuc3R5bGUu''@;'; put 'put ''bGVmdD0iMHB4IixlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLnN0eWxlLnRvcD0iMHB4IixlLnN0eWxlLndpZHRoPSIyMDBweCIsZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuYXBwZW5kQ2hpbGQodCksKG4uYm9keXx8bi5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGUpO2NvbnN0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtlLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiO2xldCBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7cmV0dXJuIHI9PT1pJiYoaT1lLmNsaWVudFdpZHRoKSwo''@;'; put 'put ''bi5ib2R5fHxuLmRvY3VtZW50RWxlbWVudCkucmVtb3ZlQ2hpbGQoZSkscGFyc2VGbG9hdCgoci1pKS50b0ZpeGVkKDMpKX0obikpLGxKfWZ1bmN0aW9uIGNKKG4pe3JldHVybiBuIGluc3RhbmNlb2YgV2luZG93P24uZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ+bi5pbm5lckhlaWdodDpu''@;'; put 'put ''Lm9mZnNldFdpZHRoIT09bi5jbGllbnRXaWR0aH1mdW5jdGlvbiB1SihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFdpbmRvdz9uLmRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg+bi5pbm5lcldpZHRoOm4ub2Zmc2V0SGVpZ2h0IT09bi5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gY04obix0LGUpe24u''@;'; put 'put ''c3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke3R9LCR7ZX0sMClgfWZ1bmN0aW9uIEphdChuKXtsZXQgdDtyZXR1cm4gbi5zdHlsZS50cmFuc2Zvcm0mJiIiIT09KHQ9bi5zdHlsZS50cmFuc2Zvcm0pP1sidHJhbnNmb3JtIix0XTotMX1mdW5jdGlvbiBRQShuKXtuLnN0eWxlLnRyYW5z''@;'; put 'put ''Zm9ybSYmIiIhPT1uLnN0eWxlLnRyYW5zZm9ybSYmKG4uc3R5bGUudHJhbnNmb3JtPSIiKX1mdW5jdGlvbiBlayhuKXtyZXR1cm4gbiYmKFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2Yobi5ub2RlTmFtZSk+LTF8fCJ0cnVlIj09PW4uY29udGVudEVkaXRhYmxlKX1mdW5j''@;'; put 'put ''dGlvbiB1TihuKXtyZXR1cm4gZWsobikmJiExPT09bi5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gUWF0KG4pe3VOKG4ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8bi5zZWxlY3QoKX1mdW5jdGlvbiBkSihuKXtyZXR1cm4hbi5wYXJlbnROb2RlfWZ1bmN0''@;'; put 'put ''aW9uIGg1ZShuLHQpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigocixpKT0+e3IuZm9yRWFjaChhPT57YS5pc0ludGVyc2VjdGluZyYmbnVsbCE9PW4ub2Zmc2V0UGFyZW50JiYodCgpLGkudW5vYnNlcnZlKG4pKX0pfSx7cm9vdDpuLm93bmVyRG9jdW1lbnQuYm9keX0pLm9ic2VydmUobil9''@;'; put 'put ''ZnVuY3Rpb24gaEoobil7bGV0IHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxlPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3Qgcj1uLm93bmVyRG9jdW1lbnQs''@;'; put 'put ''aT1yLmNyZWF0ZVJhbmdlKCksYT1yLmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO1phKG4sImNvbnRlbnRlZGl0YWJsZSIsITApLGUmJlphKG4sImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHQmJnRpKG4sImludmlzaWJsZVNlbGVjdGlvbiIpLGkuc2VsZWN0Tm9kZUNvbnRlbnRzKG4pLGEucmVt''@;'; put 'put ''b3ZlQWxsUmFuZ2VzKCksYS5hZGRSYW5nZShpKX1mdW5jdGlvbiBmSihuKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGU9bi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO24uaGFz''@;'; put 'put ''QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpJiZuLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxlLnJlbW92ZUFsbFJhbmdlcygpLHQmJkhhKG4sImludmlzaWJsZVNlbGVjdGlvbiIpLG4ucmVtb3ZlQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKX1mdW5jdGlvbiBmNWUobix0KXts''@;'; put 'put ''ZXQgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2hKKG4sZSksdCgpLGZKKG4sZSl9ZnVuY3Rpb24gTTQobil7dmFyIHQ7Y29uc3QgZT1udWxsPT1ufHxudWxsPT09KHQ9bi5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09dD92b2lk''@;'; put 'put ''IDA6dC5kZWZhdWx0Vmlldy5FbGVtZW50O3JldHVybiEhKGUmJm51bGwhPT1lJiZuIGluc3RhbmNlb2YgZSl9ZnVuY3Rpb24gYWwobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gcDVlKG4pe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzFdP2FyZ3VtZW50c1sxXToyMDAsZT0wO2NvbnN0IHI9e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaT1udWxsO3JldHVybiBmdW5jdGlvbiBhKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbT1uZXcgQXJyYXkoYyksQz0wO0M8YztDKyspbVtDXT1hcmd1bWVudHNbQ107Y29uc3Qg''@;'; put 'put ''UD1EYXRlLm5vdygpO2xldCBZPSExO3IubGFzdENhbGxUaHJvdHRsZWQ9ITAsZXx8KGU9UCxZPSEwKTtjb25zdCBKPXQtKFAtZSk7cmV0dXJuIFk/KHIubGFzdENhbGxUaHJvdHRsZWQ9ITEsbi5hcHBseSh0aGlzLG0pKTooaSYmY2xlYXJUaW1lb3V0KGkpLGk9c2V0VGltZW91dCgoKT0+e3Iu''@;'; put 'put ''bGFzdENhbGxUaHJvdHRsZWQ9ITEsbi5hcHBseSh0aGlzLG0pLGU9MCxpPXZvaWQgMH0sSikpLHJ9fWZ1bmN0aW9uIGVvdChuKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTA7Y29uc3Qgcj1wNWUobixhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwKTtsZXQgaT1lO2Z1bmN0aW9uIGMoKXtmb3IodmFyIG09YXJndW1lbnRzLmxlbmd0aCxDPW5ldyBBcnJheShtKSxQPTA7UDxtO1ArKylDW1BdPWFyZ3VtZW50c1tQXTtyZXR1cm4gaT8oaS09MSxuLmFwcGx5KHRo''@;'; put 'put ''aXMsQykpOnIuYXBwbHkodGhpcyxDKX1yZXR1cm4gYy5jbGVhckhpdHM9ZnVuY3Rpb24gYSgpe2k9ZX0sY31mdW5jdGlvbiB0ayhuKXtsZXQgcix0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsZT1udWxsO3JldHVybiBmdW5jdGlv''@;'; put 'put ''biBpKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkoYSksbT0wO208YTttKyspY1ttXT1hcmd1bWVudHNbbV07cmV0dXJuIGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKCk9PntyPW4uYXBwbHkodGhpcyxjKX0sdCkscn19ZnVuY3Rpb24gdG90KCl7Zm9y''@;'; put 'put ''KHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkobiksZT0wO2U8bjtlKyspdFtlXT1hcmd1bWVudHNbZV07Y29uc3RbciwuLi5pXT10O3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLG09bmV3IEFycmF5KGMpLEM9MDtDPGM7QysrKW1bQ109YXJn''@;'; put 'put ''dW1lbnRzW0NdO3JldHVybiBkMChpLChQLFkpPT5ZKFApLHIuYXBwbHkodGhpcyxtKSl9fWZ1bmN0aW9uIHBKKG4pe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQ+MT90LTE6MCkscj0xO3I8dDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxjPW5ldyBBcnJheShhKSxtPTA7bTxhO20rKyljW21dPWFyZ3VtZW50c1ttXTtyZXR1cm4gbi5hcHBseSh0aGlzLGUuY29uY2F0KGMpKX19ZnVuY3Rpb24gZzVlKG4pe2NvbnN0IHQ9bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGUocil7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkoYSksbT0wO208YTttKyspY1ttXT1hcmd1bWVudHNbbV07Y29uc3QgQz1yLmNvbmNhdChjKTtsZXQgUDtyZXR1cm4gUD1DLmxlbmd0aD49dD9uLmFwcGx5KHRoaXMsQyk6ZShDKSxQfX0oW10pfWZ1''@;'; put 'put ''bmN0aW9uIG5vdChuKXtjb25zdCB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBlKHIpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KGEpLG09MDttPGE7bSsrKWNbbV09YXJndW1lbnRzW21dO2NvbnN0IEM9ci5jb25jYXQoYy5yZXZl''@;'; put 'put ''cnNlKCkpO2xldCBQO3JldHVybiBQPUMubGVuZ3RoPj10P24uYXBwbHkodGhpcyxDKTplKEMpLFB9fShbXSl9ZnVuY3Rpb24gZE4obix0LGUscixpLGEsYyxtKXtyZXR1cm4gd2EobSk/bi5jYWxsKHQsZSxyLGksYSxjLG0pOndhKGMpP24uY2FsbCh0LGUscixpLGEsYyk6d2EoYSk/bi5jYWxs''@;'; put 'put ''KHQsZSxyLGksYSk6d2EoaSk/bi5jYWxsKHQsZSxyLGkpOndhKHIpP24uY2FsbCh0LGUscik6d2EoZSk/bi5jYWxsKHQsZSk6bi5jYWxsKHQpfWNvbnN0IG5vPXtBTFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9XX1VQOjM4LEFVRElPX0RPV046''@;'; put 'put ''ck4oKT8xODI6MTc0LEFVRElPX01VVEU6ck4oKT8xODE6MTczLEFVRElPX1VQOnJOKCk/MTgzOjE3NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQsQ09OVFJPTDoxNyxERUxFVEU6''@;'; put 'put ''NDYsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3LEYxNzoxMjgsRjE4OjEyOSxG''@;'; put 'put ''MTk6MTMwLEhPTUU6MzYsSU5TRVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5VTEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVSSU9EOjE5MCxTQ1JPTExfTE9D''@;'; put 'put ''SzoxNDUsU0hJRlQ6MTYsU1BBQ0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LHJvdD1bbm8uQUxULG5vLkFSUk9XX0RPV04sbm8uQVJST1dfTEVGVCxuby5BUlJPV19SSUdIVCxuby5BUlJPV19VUCxuby5BVURJ''@;'; put 'put ''T19ET1dOLG5vLkFVRElPX01VVEUsbm8uQVVESU9fVVAsbm8uQkFDS1NQQUNFLG5vLkNBUFNfTE9DSyxuby5ERUxFVEUsbm8uRU5ELG5vLkVOVEVSLG5vLkVTQ0FQRSxuby5GMSxuby5GMixuby5GMyxuby5GNCxuby5GNSxuby5GNixuby5GNyxuby5GOCxuby5GOSxuby5GMTAsbm8uRjExLG5v''@;'; put 'put ''LkYxMixuby5GMTMsbm8uRjE0LG5vLkYxNSxuby5GMTYsbm8uRjE3LG5vLkYxOCxuby5GMTksbm8uSE9NRSxuby5JTlNFUlQsbm8uTUVESUFfTkVYVCxuby5NRURJQV9QTEFZX1BBVVNFLG5vLk1FRElBX1BSRVYsbm8uTUVESUFfU1RPUCxuby5OVUxMLG5vLk5VTV9MT0NLLG5vLlBBR0VfRE9X''@;'; put 'put ''Tixuby5QQUdFX1VQLG5vLlBBVVNFLG5vLlNDUk9MTF9MT0NLLG5vLlNISUZULG5vLlRBQl07ZnVuY3Rpb24gbTVlKG4pe3JldHVybiAzMj09PW58fG4+PTQ4JiZuPD01N3x8bj49OTYmJm48PTExMXx8bj49MTg2JiZuPD0xOTJ8fG4+PTIxOSYmbjw9MjIyfHxuPj0yMjZ8fG4+PTY1JiZuPD05''@;'; put 'put ''MH1mdW5jdGlvbiBnSihuKXtyZXR1cm4gcm90LmluY2x1ZGVzKG4pfWZ1bmN0aW9uIGlvdChuKXtjb25zdCB0PVtdO3JldHVybiBvTigpP3QucHVzaChuby5DT01NQU5EX0xFRlQsbm8uQ09NTUFORF9SSUdIVCxuby5DT01NQU5EX0ZJUkVGT1gpOnQucHVzaChuby5DT05UUk9MKSx0LmluY2x1''@;'; put 'put ''ZGVzKG4pfWZ1bmN0aW9uIHY1ZShuKXtyZXR1cm5bbm8uQ09OVFJPTCxuby5DT01NQU5EX0xFRlQsbm8uQ09NTUFORF9SSUdIVCxuby5DT01NQU5EX0ZJUkVGT1hdLmluY2x1ZGVzKG4pfWZ1bmN0aW9uIGt2KG4sdCl7Y29uc3QgZT10LnNwbGl0KCJ8Iik7bGV0IHI9ITE7cmV0dXJuIFluKGUs''@;'; put 'put ''aT0+e2lmKG49PT1ub1tpXSlyZXR1cm4gcj0hMCwhMX0pLHJ9ZnVuY3Rpb24gQTIobil7bi5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZD0hMSxuLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiB0OChuKXtyZXR1cm4hMT09PW4uaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWR9ZnVu''@;'; put 'put ''Y3Rpb24gbjgobil7cmV0dXJuIDI9PT1uLmJ1dHRvbn1mdW5jdGlvbiBoTihuKXtyZXR1cm4gMD09PW4uYnV0dG9ufWZ1bmN0aW9uIHk1ZShuKXtyZXR1cm4gdHlwZW9mIFRvdWNoRXZlbnQ8InUiJiZuIGluc3RhbmNlb2YgVG91Y2hFdmVudH1mdW5jdGlvbiBfNWUobix0KXtjb25zdCBlPXt4''@;'; put 'put ''Om4ub2Zmc2V0WCx5Om4ub2Zmc2V0WX07bGV0IHI9bi50YXJnZXQ7aWYoIU00KHQpfHxyIT09dCYmci5jb250YWlucyh0KSlyZXR1cm4gZTtmb3IoO3IhPT10OyllLngrPXIub2Zmc2V0TGVmdCxlLnkrPXIub2Zmc2V0VG9wLHI9ci5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV9ZnVuY3Rpb24gb3Mo''@;'; put 'put ''KXt3YShjb25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gdzVlKG4pe3dhKGNvbnNvbGUpJiZjb25zb2xlLndhcm4oYERlcHJlY2F0ZWQ6ICR7bn1gKX1mdW5jdGlvbiBtSigpe3dhKGNvbnNvbGUpJiZjb25zb2xlLmVycm9yKC4uLmFyZ3VtZW50cyl9Y29uc3Qg''@;'; put 'put ''RHY9WyJhZnRlckNlbGxNZXRhUmVzZXQiLCJhZnRlckNoYW5nZSIsImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLCJh''@;'; put 'put ''ZnRlckNvbnRleHRNZW51SGlkZSIsImJlZm9yZUNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb3B5TGltaXQiLCJiZWZvcmVDcmVhdGVDb2wiLCJhZnRlckNvbHVtblNlcXVlbmNlQ2FjaGVVcGRhdGUiLCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIiwi''@;'; put 'put ''YWZ0ZXJDcmVhdGVDb2wiLCJiZWZvcmVDcmVhdGVSb3ciLCJhZnRlckNyZWF0ZVJvdyIsImFmdGVyRGVzZWxlY3QiLCJhZnRlckRlc3Ryb3kiLCJhZnRlckRvY3VtZW50S2V5RG93biIsImFmdGVyRHJhd1NlbGVjdGlvbiIsImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwiYmVmb3JlQ29t''@;'; put 'put ''cG9zaXRpb25TdGFydCIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdldENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0IiwiYWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENvcm5lck1vdXNl''@;'; put 'put ''RG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9uQ2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJlbW92ZUNvbCIs''@;'; put 'put ''ImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJlbmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNhY2hlVXBkYXRlIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpv''@;'; put 'put ''bnRhbGx5IiwiYmVmb3JlVmlld3BvcnRTY3JvbGwiLCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsImFmdGVyU2Nyb2xsVmVydGljYWxseSIsImFmdGVyU2Nyb2xsIiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxl''@;'; put 'put ''Y3Rpb25FbmRCeVByb3AiLCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IiwiYmVmb3JlU2VsZWN0Q29sdW1ucyIsImFmdGVyU2VsZWN0Q29sdW1ucyIsImJlZm9yZVNlbGVjdFJvd3MiLCJhZnRlclNlbGVjdFJvd3MiLCJiZWZvcmVTZWxlY3RBbGwiLCJhZnRlclNlbGVjdEFsbCIsImFmdGVyU2V0''@;'; put 'put ''Q2VsbE1ldGEiLCJhZnRlclJlbW92ZUNlbGxNZXRhIiwiYWZ0ZXJTZXREYXRhQXRDZWxsIiwiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIiwiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiwiYWZ0ZXJTZXRUaGVtZSIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRlIiwiYmVmb3Jl''@;'; put 'put ''TGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVmb3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNoYW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZUhlaWdodENoYW5nZSIsImJlZm9yZVdpZHRoQ2hh''@;'; put 'put ''bmdlIiwiYmVmb3JlRHJhd0JvcmRlcnMiLCJiZWZvcmVHZXRDZWxsTWV0YSIsImJlZm9yZVJlbW92ZUNlbGxNZXRhIiwiYmVmb3JlSW5pdCIsImJlZm9yZUluaXRXYWxrb250YWJsZSIsImJlZm9yZUxvYWREYXRhIiwiYmVmb3JlVXBkYXRlRGF0YSIsImJlZm9yZUtleURvd24iLCJiZWZvcmVP''@;'; put 'put ''bkNlbGxNb3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsImJlZm9yZVJlbW92ZUNvbCIsImJlZm9yZVJlbW92ZVJvdyIsImJlZm9yZVZpZXdSZW5kZXIi''@;'; put 'put ''LCJhZnRlclZpZXdSZW5kZXIiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImJlZm9yZVJvd1dyYXAiLCJiZWZvcmVDb2x1bW5XcmFwIiwiYmVmb3JlU2V0Q2VsbE1ldGEiLCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IiwiYmVmb3JlU2V0''@;'; put 'put ''UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNv''@;'; put 'put ''bFdpZHRoIiwibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLCJtb2RpZnlEYXRhIiwibW9kaWZ5U291cmNlRGF0YSIsIm1v''@;'; put 'put ''ZGlmeVJvd0RhdGEiLCJtb2RpZnlHZXRDZWxsQ29vcmRzIiwibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIiwiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwicGVyc2lzdGVudFN0''@;'; put 'put ''YXRlTG9hZCIsInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwicGVyc2lzdGVudFN0YXRlU2F2ZSIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRvZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1dCIsImFmdGVyQ3V0IiwiYmVmb3Jl''@;'; put 'put ''Q29weSIsImFmdGVyQ29weSIsImJlZm9yZVBhc3RlIiwiYWZ0ZXJQYXN0ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXplIiwiYWZ0ZXJDb2x1bW5VbmZyZWV6''@;'; put 'put ''ZSIsImJlZm9yZVJvd01vdmUiLCJhZnRlclJvd01vdmUiLCJiZWZvcmVDb2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJhZnRlckdldFJvd0hlYWRlclJlbmRl''@;'; put 'put ''cmVycyIsImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsImJlZm9yZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYmVmb3JlUGFnZUNoYW5nZSIsImFmdGVyUGFnZUNoYW5nZSIsImJlZm9yZVBhZ2VTaXplQ2hhbmdlIiwiYWZ0ZXJQYWdlU2l6ZUNoYW5nZSIsImFmdGVyUGFnZVNpemVWaXNp''@;'; put 'put ''YmlsaXR5Q2hhbmdlIiwiYWZ0ZXJQYWdlQ291bnRlclZpc2liaWxpdHlDaGFuZ2UiLCJhZnRlclBhZ2VOYXZpZ2F0aW9uVmlzaWJpbGl0eUNoYW5nZSIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25S''@;'; put 'put ''ZW1vdmVkIiwiYWZ0ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3ZlZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5k''@;'; put 'put ''byIsImFmdGVyVW5kb1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsIm1vZGlmeVRyYW5zZm9ybVN0YXJ0''@;'; put 'put ''IiwibW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2Fs''@;'; put 'put ''Y3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFmdGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRl''@;'; put 'put ''Q29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJiZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhp''@;'; put 'put ''ZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVyRGV0YWNoQ2hpbGQiLCJiZWZvcmVCZWdpbkVkaXRpbmciLCJhZnRlckRpYWxvZ0hpZGUiLCJhZnRlckRpYWxvZ1Nob3ciLCJiZWZvcmVEaWFsb2dIaWRlIiwiYmVmb3JlRGlhbG9n''@;'; put 'put ''U2hvdyIsImRpYWxvZ0ZvY3VzUHJldmlvdXNFbGVtZW50IiwiZGlhbG9nRm9jdXNOZXh0RWxlbWVudCIsImFmdGVyRGlhbG9nRm9jdXMiLCJiZWZvcmVMb2FkaW5nU2hvdyIsImFmdGVyTG9hZGluZ1Nob3ciLCJiZWZvcmVMb2FkaW5nSGlkZSIsImFmdGVyTG9hZGluZ0hpZGUiLCJiZWZvcmVF''@;'; put 'put ''bXB0eURhdGFTdGF0ZVNob3ciLCJhZnRlckVtcHR5RGF0YVN0YXRlU2hvdyIsImJlZm9yZUVtcHR5RGF0YVN0YXRlSGlkZSIsImFmdGVyRW1wdHlEYXRhU3RhdGVIaWRlIiwiYWZ0ZXJCZWdpbkVkaXRpbmciLCJiZWZvcmVNZXJnZUNlbGxzIiwiYWZ0ZXJNZXJnZUNlbGxzIiwiYmVmb3JlVW5t''@;'; put 'put ''ZXJnZUNlbGxzIiwiYWZ0ZXJVbm1lcmdlQ2VsbHMiLCJhZnRlckxpc3RlbiIsImFmdGVyVW5saXN0ZW4iLCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsImFmdGVyQ29sdW1uQ29sbGFwc2UiLCJiZWZvcmVD''@;'; put 'put ''b2x1bW5FeHBhbmQiLCJhZnRlckNvbHVtbkV4cGFuZCIsIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCJdLHZKPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIsIjguMC4wIl0s''@;'; put 'put ''WyJza2lwTGVuZ3RoQ2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSx5Sj1uZXcgTWFwKFtbXV0pO2Z1bmN0aW9uIF9KKG4sdCxlKXtDNWUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIEM1ZShuLHQpe2lmKHQuaGFzKG4pKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUzVlKG4sdCxlKXtyZXR1cm4gbi5zZXQoZk4obix0KSxlKSxlfWZ1bmN0aW9uIFQxKG4sdCl7cmV0dXJuIG4uZ2V0KGZOKG4s''@;'; put 'put ''dCkpfWZ1bmN0aW9uIGZOKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1kKDIz''@;'; put 'put ''MDEyKSxkKDgxMjYwKTt2YXIgazI9bmV3IFdlYWtNYXAsdkM9bmV3IFdlYWtNYXAsYko9bmV3IFdlYWtNYXAsd0o9bmV3IFdlYWtTZXQ7Y2xhc3MgTTVle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIGFvdChuLHQpe0M1ZShuLHQpLHQuYWRkKG4pfSkodGhpcyx3SiksX0oodGhpcyxrMixuZXcg''@;'; put 'put ''TWFwKSxfSih0aGlzLHZDLG5ldyBNYXApLF9KKHRoaXMsYkosbmV3IFNldCksRHYuZm9yRWFjaCh0PT5mTih3Six0aGlzLHg1ZSkuY2FsbCh0aGlzLHQpKX1nZXRIb29rcyh0KXt2YXIgZTtyZXR1cm4gbnVsbCE9PShlPVQxKGsyLHRoaXMpLmdldCh0KSkmJnZvaWQgMCE9PWU/ZTpbXX1hZGQo''@;'; put 'put ''dCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307VDEoazIsdGhpcykuaGFzKHQpfHwoZk4od0osdGhpcyx4NWUpLmNhbGwodGhpcyx0KSxEdi5wdXNoKHQpKTtjb25zdCBpPVQxKGsyLHRoaXMpLmdldCh0KSxhPWkuZmlu''@;'; put 'put ''ZChZPT5ZLmNhbGxiYWNrPT09ZSk7aWYoYSlyZXR1cm4gdm9pZCghMD09PWEuc2tpcCYmKGEuc2tpcD0hMSkpO2NvbnN0IGM9TnVtYmVyLmlzSW50ZWdlcihyLm9yZGVySW5kZXgpP3Iub3JkZXJJbmRleDowLG09ISFyLnJ1bk9uY2UsQz0hIXIuaW5pdGlhbEhvb2s7bGV0IFA9ITE7aWYoQyl7''@;'; put 'put ''Y29uc3QgWT1pLmZpbmQoSj0+Si5pbml0aWFsSG9vayk7WSYmKFkuY2FsbGJhY2s9ZSxQPSEwKX1pZighUCl7aS5wdXNoKHtjYWxsYmFjazplLG9yZGVySW5kZXg6YyxydW5PbmNlOm0saW5pdGlhbEhvb2s6Qyxza2lwOiExfSk7bGV0IFk9VDEoYkosdGhpcykuaGFzKHQpOyFZJiYwIT09YyYm''@;'; put 'put ''KFk9ITAsVDEoYkosdGhpcykuYWRkKHQpKSxZJiZpLmxlbmd0aD4xJiZUMShrMix0aGlzKS5zZXQodCxpLnRvU29ydGVkKChKLGNlKT0+Si5vcmRlckluZGV4LWNlLm9yZGVySW5kZXgpKX19aGFzKHQpe3JldHVybiBUMShrMix0aGlzKS5oYXModCkmJlQxKGsyLHRoaXMpLmdldCh0KS5sZW5n''@;'; put 'put ''dGg+MH1yZW1vdmUodCxlKXtpZighVDEoazIsdGhpcykuaGFzKHQpKXJldHVybiExO2NvbnN0IHI9VDEoazIsdGhpcykuZ2V0KHQpLGk9ci5maW5kKGE9PmEuY2FsbGJhY2s9PT1lKTtpZihpKXtsZXQgYT1UMSh2Qyx0aGlzKS5nZXQodCk7cmV0dXJuIGkuc2tpcD0hMCxhKz0xLGE+MTAwJiYo''@;'; put 'put ''VDEoazIsdGhpcykuc2V0KHQsci5maWx0ZXIoYz0+IWMuc2tpcCkpLGE9MCksVDEodkMsdGhpcykuc2V0KHQsYSksITB9cmV0dXJuITF9ZGVzdHJveSgpe1QxKGsyLHRoaXMpLmNsZWFyKCksVDEodkMsdGhpcykuY2xlYXIoKSxTNWUoazIsdGhpcyxudWxsKSxTNWUodkMsdGhpcyxudWxsKX19''@;'; put 'put ''ZnVuY3Rpb24geDVlKG4pe1QxKGsyLHRoaXMpLnNldChuLFtdKSxUMSh2Qyx0aGlzKS5zZXQobiwwKX1jb25zdCB1b3Q9ZWxgVGhlIHBsdWdpbiBob29rICJbaG9va05hbWVdIiB3YXMgcmVtb3ZlZCBpbiBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlx4MjAKICBQbGVhc2UgY29u''@;'; put 'put ''c3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3JlbGVhc2VzL3RhZy9bcmVtb3ZlZEluVmVyc2lvbl0gdG9ceDIwCiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLmA7Y2xhc3MgRWF7Y29uc3RydWN0b3IoKXshZnVu''@;'; put 'put ''Y3Rpb24gc290KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBsb3Qobil7dmFyIHQ9ZnVuY3Rpb24gY290KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywiZ2xvYmFsQnVja2V0IixuZXcgTTVlKX1zdGF0aWMgZ2V0U2lu''@;'; put 'put ''Z2xldG9uKCl7cmV0dXJuIGZ1bmN0aW9uIGhvdCgpe3JldHVybiBkb3R9KCl9Z2V0QnVja2V0KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIHQ/KHQucGx1Z2luSG9va0J1Y2tldHx8KHQucGx1Z2luSG9v''@;'; put 'put ''a0J1Y2tldD1uZXcgTTVlKSx0LnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZCh0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2''@;'; put 'put ''b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/WW4oZSxhPT50aGlzLmFkZCh0LGEscikpOih2Si5oYXModCkmJm9zKHFIKHVvdCx7aG9va05hbWU6dCxyZW1vdmVkSW5WZXJzaW9uOnZKLmdldCh0KX0pKSx5Si5oYXModCkmJm9zKHlKLmdldCh0KSksdGhpcy5nZXRCdWNrZXQocikuYWRk''@;'; put 'put ''KHQsZSx7b3JkZXJJbmRleDppLHJ1bk9uY2U6ITF9KSksdGhpc31vbmNlKHQsZSl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaT1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4gQXJy''@;'; put 'put ''YXkuaXNBcnJheShlKT9ZbihlLGE9PnRoaXMub25jZSh0LGEscikpOnRoaXMuZ2V0QnVja2V0KHIpLmFkZCh0LGUse29yZGVySW5kZXg6aSxydW5PbmNlOiEwfSksdGhpc31hZGRBc0ZpeGVkKHQsZSl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn''@;'; put 'put ''dW1lbnRzWzJdOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/WW4oZSxpPT50aGlzLmFkZEFzRml4ZWQodCxpLHIpKTp0aGlzLmdldEJ1Y2tldChyKS5hZGQodCxlLHtpbml0aWFsSG9vazohMH0pLHRoaXN9cmVtb3ZlKHQsZSl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKS5yZW1vdmUodCxlKX1oYXModCl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsKS5oYXModCl9cnVuKHQs''@;'; put 'put ''ZSxyLGksYSxjLG0sQyl7e2NvbnN0IFA9dGhpcy5nZXRCdWNrZXQoKS5nZXRIb29rcyhlKSxZPVA/UC5sZW5ndGg6MDtsZXQgSj0wO2lmKFkpZm9yKDtKPFk7KXtpZighUFtKXXx8UFtKXS5za2lwKXtKKz0xO2NvbnRpbnVlfWNvbnN0IGNlPWROKFBbSl0uY2FsbGJhY2ssdCxyLGksYSxjLG0s''@;'; put 'put ''Qyk7dm9pZCAwIT09Y2UmJihyPWNlKSxQW0pdJiZQW0pdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGUsUFtKXS5jYWxsYmFjayksSis9MX19e2NvbnN0IFA9dGhpcy5nZXRCdWNrZXQodCkuZ2V0SG9va3MoZSksWT1QP1AubGVuZ3RoOjA7bGV0IEo9MDtpZihZKWZvcig7SjxZOyl7aWYoIVBbSl18''@;'; put 'put ''fFBbSl0uc2tpcCl7Sis9MTtjb250aW51ZX1jb25zdCBjZT1kTihQW0pdLmNhbGxiYWNrLHQscixpLGEsYyxtLEMpO3ZvaWQgMCE9PWNlJiYocj1jZSksUFtKXSYmUFtKXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShlLFBbSl0uY2FsbGJhY2ssdCksSis9MX19cmV0dXJuIHJ9ZGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKS5kZXN0cm95KCl9cmVnaXN0ZXIodCl7dGhpcy5pc1JlZ2lzdGVyZWQodCl8fER2LnB1c2godCl9ZGVyZWdpc3Rlcih0KXt0aGlzLmlzUmVnaXN0ZXJlZCh0KSYm''@;'; put 'put ''RHYuc3BsaWNlKER2LmluZGV4T2YodCksMSl9aXNEZXByZWNhdGVkKHQpe3JldHVybiB5Si5oYXModCl8fHZKLmhhcyh0KX1pc1JlZ2lzdGVyZWQodCl7cmV0dXJuIER2LmluZGV4T2YodCk+PTB9Z2V0UmVnaXN0ZXJlZCgpe3JldHVybiBEdn19Y29uc3QgZG90PW5ldyBFYSxJdj1uZXcgTWFw''@;'; put 'put ''O2Z1bmN0aW9uIFdmKCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjb21tb24iO0l2LmhhcyhuKXx8SXYuc2V0KG4sbmV3IE1hcCk7Y29uc3QgdD1Jdi5nZXQobik7cmV0dXJue3JlZ2lzdGVyOmZ1bmN0aW9uIGUoQyxQKXt0''@;'; put 'put ''LnNldChDLFApfSxnZXRJdGVtOmZ1bmN0aW9uIHIoQyl7cmV0dXJuIHQuZ2V0KEMpfSxoYXNJdGVtOmZ1bmN0aW9uIGkoQyl7cmV0dXJuIHQuaGFzKEMpfSxnZXROYW1lczpmdW5jdGlvbiBhKCl7cmV0dXJuWy4uLnQua2V5cygpXX0sZ2V0VmFsdWVzOmZ1bmN0aW9uIGMoKXtyZXR1cm5bLi4u''@;'; put 'put ''dC52YWx1ZXMoKV19LGNsZWFyOmZ1bmN0aW9uIG0oKXtJdi5kZWxldGUobiksdC5jbGVhcigpfX19ZnVuY3Rpb24gZm90KG4sdCl7dmFyIGU7cmV0dXJuIG51bGw9PUl2fHxudWxsPT09KGU9SXYuZ2V0KG4uZ3VpZCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmdldCh0KX1jb25zdCBDSj1uZXcg''@;'; put 'put ''V2Vha01hcCx7cmVnaXN0ZXI6cG90LGdldEl0ZW06RTVlLGhhc0l0ZW06VDVlLGdldE5hbWVzOmdvdH09V2YoImVkaXRvcnMiKTtmdW5jdGlvbiBtb3Qobil7Y29uc3QgdD17fSxlPW47dGhpcy5nZXRDb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBufSx0aGlzLmdldEluc3RhbmNlPWZ1''@;'; put 'put ''bmN0aW9uKHIpe3JldHVybiByLmd1aWQgaW4gdHx8KHRbci5ndWlkXT1uZXcgZShyKSksdFtyLmd1aWRdfSxFYS5nZXRTaW5nbGV0b24oKS5hZGQoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXt0W3RoaXMuZ3VpZF09bnVsbH0pfWZ1bmN0aW9uIEE1ZShuLHQpe2xldCBlO2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBuKUNKLmdldChuKXx8a2gobnVsbCxuKSxlPUNKLmdldChuKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBFcnJvcignT25seSBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgY2FuIGJlIHBhc3NlZCBhcyAiZWRpdG9yIiBwYXJhbWV0ZXInKTtlPUU1ZShuKX1pZigh''@;'; put 'put ''ZSl0aHJvdyBFcnJvcihgTm8gZWRpdG9yIHJlZ2lzdGVyZWQgdW5kZXIgbmFtZSAiJHtufSJgKTtyZXR1cm4gZS5nZXRJbnN0YW5jZSh0KX1mdW5jdGlvbiBwTihuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbilyZXR1cm4gbjtpZighVDVlKG4pKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVk''@;'; put 'put ''IGVkaXRvciBmb3VuZCB1bmRlciAiJHtufSIgbmFtZWApO3JldHVybiBFNWUobikuZ2V0Q29uc3RydWN0b3IoKX1mdW5jdGlvbiBraChuLHQpe24mJiJzdHJpbmciIT10eXBlb2YgbiYmKG49KHQ9bikuRURJVE9SX1RZUEUpO2NvbnN0IGU9bmV3IG1vdCh0KTsic3RyaW5nIj09dHlwZW9mIG4m''@;'; put 'put ''JnBvdChuLGUpLENKLnNldCh0LGUpfWxldCBnTj0wO2NvbnN0IFpmPWNsYXNzIGJvdHtjb25zdHJ1Y3Rvcigpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsOyhmdW5jdGlvbiB2b3Qobix0LGUpe3JldHVybih0PWZ1bmN0''@;'; put 'put ''aW9uIHlvdChuKXt2YXIgdD1mdW5jdGlvbiBfb3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Ygcily''@;'; put 'put ''ZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWlu''@;'; put 'put ''IG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSkodGhpcywiY29udGV4dCIsdm9pZCAwKSx0aGlzLmNvbnRleHQ9dHx8dGhpcyx0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnN8''@;'; put 'put ''fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnM9W10pfWFkZEV2ZW50TGlzdGVuZXIodCxlLHIpe2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107ZnVuY3Rpb24gYShjKXtyLmNhbGwodGhpcyxmdW5jdGlvbiB3b3Qobil7Y29u''@;'; put 'put ''c3QgdD1uLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtyZXR1cm4gbi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMpLEEyKHRoaXMpfSxufShjKSl9cmV0dXJuIHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5wdXNoKHtlbGVtZW50OnQsZXZlbnQ6''@;'; put 'put ''ZSxjYWxsYmFjazpyLGNhbGxiYWNrUHJveHk6YSxvcHRpb25zOmksZXZlbnRNYW5hZ2VyOnRoaXN9KSx0LmFkZEV2ZW50TGlzdGVuZXIoZSxhLGkpLGdOKz0xLCgpPT57dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHQsZSxyKX19cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUscil7bGV0IGMsaT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGE9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2E7KWlmKGEtPTEsYz10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbYV0sYy5ldmVudD09PWUmJmMuZWxlbWVudD09''@;'; put 'put ''PXQpe2lmKHImJnIhPT1jLmNhbGxiYWNrfHxpJiZjLmV2ZW50TWFuYWdlciE9PXRoaXMpY29udGludWU7dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShhLDEpLGMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGMuZXZlbnQsYy5jYWxsYmFja1Byb3h5LGMub3B0aW9ucyks''@;'; put 'put ''Z04tPTF9fWNsZWFyRXZlbnRzKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5jb250ZXh0KXJldHVybjtsZXQgZT10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZTspe2UtPTE7Y29u''@;'; put 'put ''c3Qgcj10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbZV07dCYmci5ldmVudE1hbmFnZXIhPT10aGlzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShlLDEpLHIuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHIuZXZlbnQsci5jYWxsYmFja1Byb3h5LHIub3B0aW9u''@;'; put 'put ''cyksZ04tPTEpfX1jbGVhcigpe3RoaXMuY2xlYXJFdmVudHMoKX1kZXN0cm95KCl7dGhpcy5jbGVhckV2ZW50cygpLHRoaXMuY29udGV4dD1udWxsfWRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpe3RoaXMuY2xlYXJFdmVudHMoITApLHRoaXMuY29udGV4dD1udWxsfWZpcmVFdmVudCh0LGUp''@;'; put 'put ''e2xldCByPXQuZG9jdW1lbnQsaT10O3J8fChyPXQub3duZXJEb2N1bWVudD90Lm93bmVyRG9jdW1lbnQ6dCxpPXIuZGVmYXVsdFZpZXcpO2NvbnN0IGE9e2J1YmJsZXM6ITAsY2FuY2VsYWJsZToibW91c2Vtb3ZlIiE9PWUsdmlldzppLGRldGFpbDowLHNjcmVlblg6MCxzY3JlZW5ZOjAsY2xp''@;'; put 'put ''ZW50WDoxLGNsaWVudFk6MSxjdHJsS2V5OiExLGFsdEtleTohMSxzaGlmdEtleTohMSxtZXRhS2V5OiExLGJ1dHRvbjowLHJlbGF0ZWRUYXJnZXQ6dm9pZCAwfTtsZXQgYztyLmNyZWF0ZUV2ZW50PyhjPXIuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIiksYy5pbml0TW91c2VFdmVudChlLGEu''@;'; put 'put ''YnViYmxlcyxhLmNhbmNlbGFibGUsYS52aWV3LGEuZGV0YWlsLGEuc2NyZWVuWCxhLnNjcmVlblksYS5jbGllbnRYLGEuY2xpZW50WSxhLmN0cmxLZXksYS5hbHRLZXksYS5zaGlmdEtleSxhLm1ldGFLZXksYS5idXR0b24sYS5yZWxhdGVkVGFyZ2V0fHxyLmJvZHkucGFyZW50Tm9kZSkpOmM9''@;'; put 'put ''ci5jcmVhdGVFdmVudE9iamVjdCgpLHQuZGlzcGF0Y2hFdmVudD90LmRpc3BhdGNoRXZlbnQoYyk6dC5maXJlRXZlbnQoYG9uJHtlfWAsYyl9fTtmdW5jdGlvbiBSdihuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24geG90KG4pe3ZhciB0PWZ1bmN0aW9uIEVvdChuLHQpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6''@;'; put 'put ''ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gU0oobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu''@;'; put 'put ''dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBtTj1uZXcgV2Vha1NldDtjbGFzcyBNSntjb25zdHJ1Y3Rvcih0LGUscil7KGZ1bmN0aW9uIFNvdChuLHQpeyhmdW5jdGlvbiBNb3Qobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LmFkZChuKX0pKHRoaXMsbU4pLFJ2KHRoaXMsImhvdCIsdm9pZCAwKSxSdih0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCksUnYodGhpcywic2VsZWN0aW9uIix2b2lkIDApLFJ2KHRoaXMs''@;'; put 'put ''ImV2ZW50TWFuYWdlciIsdm9pZCAwKSxSdih0aGlzLCJkZXN0cm95ZWQiLCExKSxSdih0aGlzLCJhY3RpdmVFZGl0b3IiLHZvaWQgMCksUnYodGhpcywiY2VsbFByb3BlcnRpZXMiLHZvaWQgMCksdGhpcy5ob3Q9dCx0aGlzLnRhYmxlTWV0YT1lLHRoaXMuc2VsZWN0aW9uPXIsdGhpcy5ldmVu''@;'; put 'put ''dE1hbmFnZXI9bmV3IFpmKHQpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixpPT5TSihtTix0aGlzLGs1ZSkuY2FsbCh0aGlzLGkpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IixpPT5TSihtTix0aGlzLGs1ZSkuY2FsbCh0aGlzLGkp''@;'; put 'put ''KSx0aGlzLmhvdC52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoaSxhLGMpPT5TSihtTix0aGlzLFRvdCkuY2FsbCh0aGlzLGksYSxjKSl9Z2V0QWN0aXZlRWRpdG9yKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yfXByZXBhcmVFZGl0b3IoKXt2YXIgdDtpZih0aGlzLmFjdGl2''@;'; put 'put ''ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZUVkaXRvcighMSwhMSxQPT57UCYmdGhpcy5wcmVwYXJlRWRpdG9yKCl9KTtjb25zdCBlPW51bGw9PT0odD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9''@;'; put 'put ''PT10P3ZvaWQgMDp0LmhpZ2hsaWdodDtpZighZXx8ZS5pc0hlYWRlcigpKXJldHVybjtjb25zdHtyb3c6cixjb2w6aX09ZSxhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixyLGksITEsIm1ldGEiKTtsZXQgYz1yLG09aTtpZihBcnJheS5pc0FycmF5KGEpJiYoW2Ms''@;'; put 'put ''bV09YSksdGhpcy5jZWxsUHJvcGVydGllcz10aGlzLmhvdC5nZXRDZWxsTWV0YShjLG0pLCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IEM9dGhpcy5ob3QuZ2V0Q2VsbChyLGksITApO2lmKEMpe2NvbnN0IFA9dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSxZPXRoaXMuaG90LmNvbFRvUHJvcChtKSxKPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhjKSxtKTt0aGlzLmFjdGl2ZUVkaXRvcj1BNWUoUCx0aGlzLmhvdCksdGhpcy5hY3Rp''@;'; put 'put ''dmVFZGl0b3IucHJlcGFyZShyLGksWSxDLEosdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc09wZW5lZCgpfW9wZW5FZGl0b3IodCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IGk9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2xldCBhPXRoaXMuaG90LnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVCZWdpbkVkaXRpbmciLGkuaGlnaGxpZ2h0LnJvdyxpLmhpZ2hsaWdodC5jb2wsdCxlLHIpO2UgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYiYm9vbGVhbiIhPXR5cGVvZiBhJiYoYT0wPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaS5pc1NpbmdsZSgpKSwhMSE9''@;'; put 'put ''PWE/KHRoaXMuYWN0aXZlRWRpdG9yfHwodGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLHRoaXMucHJlcGFyZUVkaXRvcigpKSx0aGlzLmFjdGl2ZUVkaXRvciYmKHImJnRoaXMuYWN0aXZlRWRpdG9yLmVuYWJsZUZ1bGxFZGl0TW9kZSgpLHRoaXMuYWN0aXZlRWRpdG9yLmJlZ2luRWRp''@;'; put 'put ''dGluZyh0LGUpKSk6dGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfWNsb3NlRWRpdG9yKHQsZSxyKXt0aGlzLmFjdGl2ZUVkaXRvcj90aGlzLmFjdGl2ZUVkaXRvci5maW5pc2hFZGl0aW5nKHQsZSxyKTpyJiZyKCExKX1jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKHQpe3RoaXMuY2xvc2VFZGl0''@;'; put 'put ''b3IoITEsdCl9Y2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZSh0KXt0aGlzLmNsb3NlRWRpdG9yKCEwLHQpfWNsZWFyQWN0aXZlRWRpdG9yKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfWlzQ2VsbEVkaXRhYmxlKCl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''QWN0aXZlKCk7aWYoIXQpcmV0dXJuITE7Y29uc3QgZT10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHtyb3c6cixjb2w6aX09dC5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6Y309dGhpcy5ob3QsbT1hLmlzSGlkZGVuKHRo''@;'; put 'put ''aXMuaG90LnRvUGh5c2ljYWxSb3cocikpfHxjLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oaSkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWV8fG0pfW1vdmVTZWxlY3Rpb25BZnRlckVudGVyKHQpe2NvbnN0IGU9ey4uLiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzP3RoaXMudGFibGVNZXRhLmVudGVyTW92ZXModCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlc307dC5zaGlmdEtleSYmKGUucm93PS1lLnJvdyxlLmNvbD0tZS5jb2wpLHRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCk/dGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoZS5yb3csZS5jb2wpOnRoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGUucm93LGUuY29sLCEwKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBrNWUobil7Y29uc3QgdD10''@;'; put 'put ''aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fCF0fHx0LmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0OChuKSlyZXR1cm47Y29uc3R7a2V5Q29kZTplfT1uLHI9KG4uY3RybEtleXx8bi5tZXRhS2V5KSYmIW4uYWx0S2V5OyghdGhpcy5h''@;'; put 'put ''Y3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yJiYhdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpJiYhZ0ooZSkmJiF2NWUoZSkmJiFyJiYhdGhpcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsbil9ZnVuY3Rpb24gVG90KG4sdCl7dC5pc0NlbGwoKSYmKHRo''@;'; put 'put ''aXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT90aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk6dGhpcy5vcGVuRWRpdG9yKG51bGwsbiwhMCkpfWNvbnN0IEQ1ZT1uZXcgV2Vha01hcDtNSi5nZXRJbnN0YW5jZT1mdW5jdGlvbihuLHQsZSl7bGV0IHI9RDVlLmdldChu''@;'; put 'put ''KTtyZXR1cm4gcnx8KHI9bmV3IE1KKG4sdCxlKSxENWUuc2V0KG4scikpLHJ9O2NvbnN0IEFvdD1NSjtkKDE2MjI5KTtjb25zdCBJNWU9eyImbmJzcDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LGtvdD1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKEk1ZSkubWFwKG49''@;'; put 'put ''PmAoJHtufSlgKS5qb2luKCJ8IiksImdpIik7ZnVuY3Rpb24geEoobil7Y29uc3QgdD1uLmhhc0NvbEhlYWRlcnMoKSxlPW4uaGFzUm93SGVhZGVycygpLHI9W3Q/LTE6MCxlPy0xOjAsbi5jb3VudFJvd3MoKS0xLG4uY291bnRDb2xzKCktMV0saT1uLmdldERhdGEoLi4uciksYT1pLmxlbmd0''@;'; put 'put ''aCxjPWE+MD9pWzBdLmxlbmd0aDowLG09WyI8dGFibGU+IiwiPC90YWJsZT4iXSxDPXQ/WyI8dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxQPVsiPHRib2R5PiIsIjwvdGJvZHk+Il0sWT1lPzE6MCxKPXQ/MTowO2ZvcihsZXQgY2U9MDtjZTxhO2NlKz0xKXtjb25zdCBmZT10JiYwPT09Y2UsQWU9''@;'; put 'put ''W107Zm9yKGxldCBYZT0wO1hlPGM7WGUrPTEpe2NvbnN0IHJ0PSFmZSYmZSYmMD09PVhlO2xldCBkdD0iIjtpZihmZSlkdD1gPHRoPiR7bi5nZXRDb2xIZWFkZXIoWGUtWSl9PC90aD5gO2Vsc2UgaWYocnQpZHQ9YDx0aD4ke24uZ2V0Um93SGVhZGVyKGNlLUopfTwvdGg+YDtlbHNle2NvbnN0''@;'; put 'put ''IGp0PWlbY2VdW1hlXSx7aGlkZGVuOkZ0LHJvd3NwYW46cG4sY29sc3Bhbjpvbn09bi5nZXRDZWxsTWV0YShjZS1KLFhlLVkpO2lmKCFGdCl7Y29uc3QgZ249W107aWYocG4mJmduLnB1c2goYHJvd3NwYW49IiR7cG59ImApLG9uJiZnbi5wdXNoKGBjb2xzcGFuPSIke29ufSJgKSxHYyhqdCkp''@;'; put 'put ''ZHQ9YDx0ZCAke2duLmpvaW4oIiAiKX0+PC90ZD5gO2Vsc2V7Y29uc3QgWm49anQudG9TdHJpbmcoKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2Uo''@;'; put 'put ''L1x4MjAvZ2ksIiZuYnNwOyIpLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7ZHQ9YDx0ZCAke2duLmpvaW4oIiAiKX0+JHtabn08L3RkPmB9fX1BZS5wdXNoKGR0KX1jb25zdCBIZT1bIjx0cj4iLC4uLkFlLCI8L3RyPiJdLmpvaW4oIiIpO2ZlP0Muc3BsaWNlKDEsMCxIZSk6UC5zcGxpY2UoLTEs''@;'; put 'put ''MCxIZSl9cmV0dXJuIG0uc3BsaWNlKDEsMCxDLmpvaW4oIiIpLFAuam9pbigiIikpLG0uam9pbigiIil9ZnVuY3Rpb24gRUoobil7Y29uc3QgdD1uLmxlbmd0aCxlPVsiPHRhYmxlPiJdO2ZvcihsZXQgcj0wO3I8dDtyKz0xKXtjb25zdCBpPW5bcl0sYT1pLmxlbmd0aCxjPVtdOzA9PT1yJiZl''@;'; put 'put ''LnB1c2goIjx0Ym9keT4iKTtmb3IobGV0IG09MDttPGE7bSs9MSl7Y29uc3QgQz1pW21dLFA9R2MoQyk/IiI6Qy50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxy''@;'; put 'put ''XG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjB7Mix9L2dpLFk9PmA8c3BhbiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KFkubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtjLnB1c2goYDx0ZD4k''@;'; put 'put ''e1B9PC90ZD5gKX1lLnB1c2goIjx0cj4iLC4uLmMsIjwvdHI+IikscisxPT09dCYmZS5wdXNoKCI8L3Rib2R5PiIpfXJldHVybiBlLnB1c2goIjwvdGFibGU+IiksZS5qb2luKCIiKX1mdW5jdGlvbiBUSihuKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06ZG9jdW1lbnQ7Y29uc3QgZT17fSxyPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmFwcGVuZENoaWxkKGkpO2xldCBhPW47aWYoInN0cmluZyI9PXR5cGVvZiBhKXtjb25zdCBqdD1hLnJlcGxhY2UoLzx0ZFxiW14+''@;'; put 'put ''XSo/PihbXHNcU10qPyk8XC9ccyp0ZD4vZyxGdD0+e2NvbnN0IHBuPUZ0Lm1hdGNoKC88dGRcYltePl0qPz4vZylbMF07cmV0dXJuYCR7cG59JHtGdC5zdWJzdHJpbmcocG4ubGVuZ3RoLEZ0Lmxhc3RJbmRleE9mKCI8IikpLnRyaW0oKS5yZXBsYWNlQWxsKC9cblxzKy9nLCIgIikucmVwbGFj''@;'; put 'put ''ZUFsbCgvPHAuKj8+L2csIlxuIikucmVwbGFjZSgiXG4iLCIiKS5yZXBsYWNlQWxsKC88XC8oLiopPlxzKyQvZ20sIjwvJDE+IikucmVwbGFjZSgvKDwoPyFicikoW14+XSspPikvZ2ksIiIpLnJlcGxhY2VBbGwoL14mbmJzcDskL2dtLCIiKX08L3RkPmB9KTtpLmluc2VydEFkamFjZW50SFRN''@;'; put 'put ''TCgiYWZ0ZXJiZWdpbiIsYCR7anR9YCksYT1pLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIil9aWYoIWF8fCFmdW5jdGlvbiBEb3Qobil7cmV0dXJuIlRBQkxFIj09PShuJiZuLm5vZGVOYW1lfHwiIil9KGEpKXJldHVybjtjb25zdCBjPWkucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD0iZW5lcmF0''@;'; put 'put ''b3IiXScpLG09bnVsbCE9PWEucXVlcnlTZWxlY3RvcigidGJvZHkgdGgiKSxDPWEucXVlcnlTZWxlY3RvcigidHIiKSxQPUM/QXJyYXkuZnJvbShDLmNlbGxzKS5yZWR1Y2UoKGp0LEZ0KT0+anQrRnQuY29sU3BhbiwwKS0obT8xOjApOjAsWT1hLnRGb290JiZBcnJheS5mcm9tKGEudEZvb3Qu''@;'; put 'put ''cm93cyl8fFtdLEo9W107bGV0IGNlPSExLGZlPTAsQWU9MDtpZihhLnRIZWFkKXtjb25zdCBqdD1BcnJheS5mcm9tKGEudEhlYWQucm93cykuZmlsdGVyKEZ0PT57Y29uc3QgcG49bnVsbCE9PUZ0LnF1ZXJ5U2VsZWN0b3IoInRkIik7cmV0dXJuIHBuJiZKLnB1c2goRnQpLCFwbn0pO2ZlPWp0''@;'; put 'put ''Lmxlbmd0aCxjZT1mZT4wLGZlPjE/ZS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oanQpLnJlZHVjZSgoRnQscG4pPT57Y29uc3Qgb249QXJyYXkuZnJvbShwbi5jZWxscykucmVkdWNlKChnbixabixHcik9PntpZihtJiYwPT09R3IpcmV0dXJuIGduO2NvbnN0e2NvbFNwYW46RXIsaW5uZXJI''@;'; put 'put ''VE1MOlRyfT1abjtyZXR1cm4gZ24ucHVzaChFcj4xP3tsYWJlbDpUcixjb2xzcGFuOkVyfTpUciksZ259LFtdKTtyZXR1cm4gRnQucHVzaChvbiksRnR9LFtdKTpjZSYmKGUuY29sSGVhZGVycz1BcnJheS5mcm9tKGp0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKEZ0LHBuLG9uKT0+KG0mJjA9PT1v''@;'; put 'put ''bnx8RnQucHVzaChwbi5pbm5lckhUTUwpLEZ0KSxbXSkpfUoubGVuZ3RoJiYoZS5maXhlZFJvd3NUb3A9Si5sZW5ndGgpLFkubGVuZ3RoJiYoZS5maXhlZFJvd3NCb3R0b209WS5sZW5ndGgpO2NvbnN0IEhlPVsuLi5KLC4uLkFycmF5LmZyb20oYS50Qm9kaWVzKS5yZWR1Y2UoKGp0LEZ0KT0+''@;'; put 'put ''KGp0LnB1c2goLi4uQXJyYXkuZnJvbShGdC5yb3dzKSksanQpLFtdKSwuLi5ZXTtBZT1IZS5sZW5ndGg7Y29uc3QgWGU9bmV3IEFycmF5KEFlKTtmb3IobGV0IGp0PTA7anQ8QWU7anQrKylYZVtqdF09bmV3IEFycmF5KFApO2NvbnN0IHJ0PVtdLGR0PVtdO2ZvcihsZXQganQ9MDtqdDxBZTtq''@;'; put 'put ''dCsrKXtjb25zdCBwbj1BcnJheS5mcm9tKEhlW2p0XS5jZWxscyksb249cG4ubGVuZ3RoO2ZvcihsZXQgZ249MDtnbjxvbjtnbisrKXtjb25zdCBabj1wbltnbl0se25vZGVOYW1lOkdyLGlubmVySFRNTDpFcixyb3dTcGFuOlRyLGNvbFNwYW46aXJ9PVpuLHBpPVhlW2p0XS5maW5kSW5kZXgo''@;'; put 'put ''RG49PnZvaWQgMD09PURuKTtpZigiVEQiPT09R3Ipe2lmKFRyPjF8fGlyPjEpe2ZvcihsZXQgRHI9anQ7RHI8anQrVHI7RHIrKylpZihEcjxBZSlmb3IobGV0IFpyPXBpO1pyPHBpK2lyO1pyKyspWGVbRHJdW1pyXT1udWxsO2NvbnN0IEFyPVpuLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtBciYm''@;'; put 'put ''QXIuaW5jbHVkZXMoIm1zby1pZ25vcmU6Y29sc3BhbiIpfHxydC5wdXNoKHtjb2w6cGkscm93Omp0LHJvd3NwYW46VHIsY29sc3Bhbjppcn0pfWxldCBEbj0iIjtEbj1jJiYvZXhjZWwvZ2kudGVzdChjLmNvbnRlbnQpP0VyLnJlcGxhY2UoL1tcclxuXVtceDIwXXswLDJ9L2csIiAiKS5yZXBs''@;'; put 'put ''YWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/W1x4MjBdezAsM30vZ2ltLCJcclxuIik6RXIucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dPy9naW0sIlxyXG4iKSxYZVtqdF1bcGldPURuLnJlcGxhY2Uoa290LEFyPT5JNWVbQXJdKX1lbHNlIGR0LnB1c2goRXIpfX1yZXR1cm4gcnQubGVuZ3Ro''@;'; put 'put ''JiYoZS5tZXJnZUNlbGxzPXJ0KSxkdC5sZW5ndGgmJihlLnJvd0hlYWRlcnM9ZHQpLFhlLmxlbmd0aCYmKGUuZGF0YT1YZSksZX1mdW5jdGlvbiBuZChuKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgZT10eXBl''@;'; put 'put ''b2YgbjtpZigibnVtYmVyIj09PWUpcmV0dXJuIWlzTmFOKG4pJiZpc0Zpbml0ZShuKTtpZigic3RyaW5nIj09PWUpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTtpZigxPT09bi5sZW5ndGgpcmV0dXJuL1xkLy50ZXN0KG4pO2NvbnN0IHI9QXJyYXkuZnJvbShuZXcgU2V0KFsiLiIsLi4udF0p''@;'; put 'put ''KS5tYXAoaT0+YFxcJHtpfWApLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXlsrLV0/KCgoJHtyfSk/XFxkKygoJHtyfSlcXGQrKT8oZVsrLV0/XFxkKyk/KXwoMHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChuLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PT1lJiYhKCFufHwibnVtYmVy''@;'; put 'put ''IiE9dHlwZW9mIG4udmFsdWVPZigpfHxuIGluc3RhbmNlb2YgRGF0ZSl9ZnVuY3Rpb24gUjVlKG4pe3JldHVybiBuZChuLFsiLCJdKX1mdW5jdGlvbiBlbyhuLHQsZSl7bGV0IHI9LTE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlPXQsdD1uKTpyPW4tMTsrK3I8PXQmJiExIT09ZShyKTsp''@;'; put 'put ''O31mdW5jdGlvbiBBSihuLHQsZSl7bGV0IHI9bisxO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgdCYmKGU9dCx0PTApOy0tcj49dCYmITEhPT1lKHIpOyk7fWZ1bmN0aW9uIGtKKG4sdCl7cmV0dXJuIHQ9cGFyc2VJbnQodC50b1N0cmluZygpLnJlcGxhY2UoIiUiLCIiKSwxMCksdD1pc05hTih0''@;'; put 'put ''KT8wOnQscGFyc2VJbnQobip0LzEwMCwxMCl9ZnVuY3Rpb24gZ3Mobix0LGUpe3JldHVybiBNYXRoLm1pbihuLHQpPT09bj90Ok1hdGgubWF4KG4sZSk9PT1uP2U6bn1mdW5jdGlvbiBMNWUobil7Y29uc3QgdD1uLnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0''@;'; put 'put ''KHQpKT9wYXJzZUZsb2F0KHQpOm51bGx9ZnVuY3Rpb24gTHYobil7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobikmJm4+PTB9Y29uc3QgTzVlPW5ldyBNYXAoW1siYXNjIixbLTEsMV1dLFsiZGVzYyIsWzEsLTFdXV0pLFJvdD1uPT5gVGhlIHByaW9yaXR5ICcke259JyBpcyBhbHJlYWR5IGRl''@;'; put 'put ''Y2xhcmVkIGluIGEgbWFwLmAsTG90PW49PmBUaGUgcHJpb3JpdHkgJyR7bn0nIGlzIG5vdCBhIG51bWJlci5gLFBvdD1uPT5gVGhlIGlkICcke259JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmA7ZnVuY3Rpb24gbmsoKXtsZXR7ZXJyb3JJZEV4aXN0czpufT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgdD1uZXcgTWFwO2Z1bmN0aW9uIG0oKXtyZXR1cm5bLi4udF19ZnVuY3Rpb24gUChZKXtyZXR1cm4gdC5oYXMoWSl9cmV0dXJuIG49YWwobik/bjpQb3Qse2FkZEl0ZW06ZnVuY3Rpb24gZShZLEope2lm''@;'; put 'put ''KFAoWSkpdGhyb3cgbmV3IEVycm9yKG4oWSkpO3Quc2V0KFksSil9LGNsZWFyOmZ1bmN0aW9uIGkoKXt0LmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIGEoWSl7Y29uc3RbSl09bSgpLmZpbmQoY2U9PntsZXRbZmUsQWVdPWNlO3JldHVybiBZPT09QWUmJmZlfSl8fFtudWxsXTtyZXR1cm4gSn0s''@;'; put 'put ''Z2V0SXRlbTpmdW5jdGlvbiBjKFkpe3JldHVybiB0LmdldChZKX0sZ2V0SXRlbXM6bSxnZXRWYWx1ZXM6ZnVuY3Rpb24gQygpe3JldHVyblsuLi50LnZhbHVlcygpXX0saGFzSXRlbTpQLHJlbW92ZUl0ZW06ZnVuY3Rpb24gcihZKXtyZXR1cm4gdC5kZWxldGUoWSl9fX1jb25zdCBGb3Q9bj0+''@;'; put 'put ''YCcke259JyB2YWx1ZSBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgdW5pcXVlIHNldC5gLElKPW49PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgIiR7bn0iIHBsdWdpbi5gLFA1ZT1mdW5jdGlvbiBPb3QoKXtsZXR7ZXJyb3JQcmlvcml0eUV4aXN0czpuLGVycm9yUHJpb3JpdHlOYU46''@;'; put 'put ''dH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGU9bmV3IE1hcDtyZXR1cm4gbj1hbChuKT9uOlJvdCx0PWFsKHQpP3Q6TG90LHthZGRJdGVtOmZ1bmN0aW9uIHIoYSxjKXtpZighbmQoYSkpdGhyb3cgbmV3IEVycm9yKHQo''@;'; put 'put ''YSkpO2lmKGUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihuKGEpKTtlLnNldChhLGMpfSxnZXRJdGVtczpmdW5jdGlvbiBpKCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJhc2MiO2NvbnN0W2MsbV09TzVlLmdldChhKXx8TzVl''@;'; put 'put ''LmdldCgiYXNjIik7cmV0dXJuWy4uLmVdLnNvcnQoKEMsUCk9PkNbMF08UFswXT9jOm0pLm1hcChDPT5DWzFdKX19fSh7ZXJyb3JQcmlvcml0eUV4aXN0czpuPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHBsdWdpbiBvbiBwcmlvcml0eSAiJHtufSIuYCxlcnJvclByaW9yaXR5TmFO''@;'; put 'put ''Om49PmBUaGUgcHJpb3JpdHkgIiR7bn0iIGlzIG5vdCBhIG51bWJlci5gfSksRjVlPWZ1bmN0aW9uIEhvdCgpe2xldHtlcnJvckl0ZW1FeGlzdHM6bn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IHQ9bmV3IFNldDtyZXR1''@;'; put 'put ''cm4gbj1hbChuKT9uOkZvdCx7YWRkSXRlbTpmdW5jdGlvbiBlKGEpe2lmKHQuaGFzKGEpKXRocm93IG5ldyBFcnJvcihuKGEpKTt0LmFkZChhKX0sY2xlYXI6ZnVuY3Rpb24gaSgpe3QuY2xlYXIoKX0sZ2V0SXRlbXM6ZnVuY3Rpb24gcigpe3JldHVyblsuLi50XX19fSh7ZXJyb3JJdGVtRXhp''@;'; put 'put ''c3RzOklKfSksUko9bmsoe2Vycm9ySWRFeGlzdHM6SUp9KTtmdW5jdGlvbiBMSigpe3JldHVyblsuLi5QNWUuZ2V0SXRlbXMoKSwuLi5GNWUuZ2V0SXRlbXMoKV19ZnVuY3Rpb24gcmsobil7Y29uc3QgdD1lZChuKTtyZXR1cm4gUkouZ2V0SXRlbSh0KX1mdW5jdGlvbiBTcyhuLHQsZSl7W24s''@;'; put 'put ''dCxlXT1mdW5jdGlvbiBCb3Qobix0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobj0odD1uKS5QTFVHSU5fS0VZLGU9dC5QTFVHSU5fUFJJT1JJVFkpLFtuLHQsZV19KG4sdCxlKSx2b2lkIDA9PT1yayhuKSYmZnVuY3Rpb24gVm90KG4sdCxlKXtjb25zdCByPWVkKG4pO2lmKFJK''@;'; put 'put ''Lmhhc0l0ZW0ocikpdGhyb3cgbmV3IEVycm9yKElKKHIpKTt2b2lkIDA9PT1lP0Y1ZS5hZGRJdGVtKHIpOlA1ZS5hZGRJdGVtKGUsciksUkouYWRkSXRlbShyLHQpfShuLHQsZSl9Y29uc3R7cmVnaXN0ZXI6am90LGdldEl0ZW06em90LGhhc0l0ZW06SDVlLGdldE5hbWVzOlVvdH09V2YoInJl''@;'; put 'put ''bmRlcmVycyIpO2Z1bmN0aW9uIHZOKG4pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXJldHVybiBuO2lmKCFINWUobikpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgcmVuZGVyZXIgZm91bmQgdW5kZXIgIiR7bn0iIG5hbWVgKTtyZXR1cm4gem90KG4pfWZ1bmN0aW9uIEQyKG4sdCl7InN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBuJiYobj0odD1uKS5SRU5ERVJFUl9UWVBFKSxqb3Qobix0KX1jb25zdHtyZWdpc3RlcjpXb3QsZ2V0SXRlbTpab3QsaGFzSXRlbTpONWUsZ2V0TmFtZXM6WW90fT1XZigidmFsaWRhdG9ycyIpO2Z1bmN0aW9uIE9KKG4pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXJl''@;'; put 'put ''dHVybiBuO2lmKCFONWUobikpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvdW5kIHVuZGVyICIke259IiBuYW1lYCk7cmV0dXJuIFpvdChuKX1mdW5jdGlvbiBPdihuLHQpeyJzdHJpbmciIT10eXBlb2YgbiYmKG49KHQ9bikuVkFMSURBVE9SX1RZUEUpLFdvdChuLHQp''@;'; put 'put ''fWZ1bmN0aW9uIHg0KG4sdCxlKXsoZnVuY3Rpb24gR290KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBy''@;'; put 'put ''byhuLHQpe3JldHVybiBuLmdldChWNWUobix0KSl9ZnVuY3Rpb24gcjgobix0LGUpe3JldHVybiBuLnNldChWNWUobix0KSxlKSxlfWZ1bmN0aW9uIFY1ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFlmPW5ldyBXZWFrTWFwLFBKPW5ldyBXZWFrTWFwLEcwPW5ldyBXZWFrTWFwLHlDPW5ldyBXZWFrTWFwLHlOPW5ldyBXZWFrTWFwLGxwPW5ldyBXZWFrTWFwLEZK''@;'; put 'put ''PW5ldyBXZWFrTWFwLGlrPW5ldyBXZWFrTWFwLFB2PW5ldyBXZWFrTWFwLEU0PW5ldyBXZWFrTWFwO2NvbnN0IEI1ZT1jbGFzcyAkb3R7Y29uc3RydWN0b3IodCxlLHIsaSxhLGMpe2xldCBtPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpu''@;'; put 'put ''dWxsO3g0KHRoaXMsWWYsdm9pZCAwKSx4NCh0aGlzLFBKLHZvaWQgMCkseDQodGhpcyxHMCx2b2lkIDApLHg0KHRoaXMseUMsdm9pZCAwKSx4NCh0aGlzLHlOLHZvaWQgMCkseDQodGhpcyxscCx2b2lkIDApLHg0KHRoaXMsRkosdm9pZCAwKSx4NCh0aGlzLGlrLHZvaWQgMCkseDQodGhpcyxQ''@;'; put 'put ''dixbbnVsbCxudWxsXSkseDQodGhpcyxFNCxbbnVsbCxudWxsXSkscjgoWWYsdGhpcyxyKSxyOChQSix0aGlzLGUpLHI4KEcwLHRoaXMsYSkscjgoeUMsdGhpcyxjKSxyOCh5Tix0aGlzLG0pLHI4KGxwLHRoaXMsaSkscjgoRkosdGhpcyx0KSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCl9cmVnaXN0''@;'; put 'put ''ZXJFdmVudHMoKXtybyhscCx0aGlzKS5hZGRFdmVudExpc3RlbmVyKHJvKEcwLHRoaXMpLmhvbGRlciwiY29udGV4dG1lbnUiLHI9PnRoaXMub25Db250ZXh0TWVudShyKSkscm8obHAsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihybyhHMCx0aGlzKS5UQUJMRSwibW91c2VvdmVyIixyPT50aGlz''@;'; put 'put ''Lm9uTW91c2VPdmVyKHIpKSxybyhscCx0aGlzKS5hZGRFdmVudExpc3RlbmVyKHJvKEcwLHRoaXMpLlRBQkxFLCJtb3VzZW91dCIscj0+dGhpcy5vbk1vdXNlT3V0KHIpKTtjb25zdCB0PSgpPT57cm8obHAsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihybyhHMCx0aGlzKS5ob2xkZXIsInRvdWNo''@;'; put 'put ''c3RhcnQiLHI9PnRoaXMub25Ub3VjaFN0YXJ0KHIpKSxybyhscCx0aGlzKS5hZGRFdmVudExpc3RlbmVyKHJvKEcwLHRoaXMpLmhvbGRlciwidG91Y2hlbmQiLHI9PnRoaXMub25Ub3VjaEVuZChyKSksdGhpcy5tb21lbnR1bVNjcm9sbGluZ3x8KHRoaXMubW9tZW50dW1TY3JvbGxpbmc9e30p''@;'; put 'put ''LHJvKGxwLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIocm8oRzAsdGhpcykuaG9sZGVyLCJzY3JvbGwiLCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZ3x8cm8oWWYsdGhpcykuZ2V0U2V0dGluZygi''@;'; put 'put ''b25CZWZvcmVUb3VjaFNjcm9sbCIpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMCx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnRvdWNoQXBwbGllZHx8KHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMSxybyhZZix0''@;'; put 'put ''aGlzKS5nZXRTZXR0aW5nKCJvbkFmdGVyTW9tZW50dW1TY3JvbGwiKSl9LDIwMCl9KX07c3AoKT90KCk6KFFxKCkmJnQoKSwoKCk9PntybyhscCx0aGlzKS5hZGRFdmVudExpc3RlbmVyKHJvKEcwLHRoaXMpLmhvbGRlciwibW91c2V1cCIscj0+dGhpcy5vbk1vdXNlVXAocikpLHJvKGxwLHRo''@;'; put 'put ''aXMpLmFkZEV2ZW50TGlzdGVuZXIocm8oRzAsdGhpcykuaG9sZGVyLCJtb3VzZWRvd24iLHI9PnRoaXMub25Nb3VzZURvd24ocikpfSkoKSl9c2VsZWN0ZWRDZWxsV2FzVG91Y2hlZCh0KXtjb25zdCByPXRoaXMucGFyZW50Q2VsbCh0KS5jb29yZHM7aWYocm8oaWssdGhpcykmJnIpe2NvbnN0''@;'; put 'put ''W2ksYV09W3Iucm93LHJvKGlrLHRoaXMpLmZyb20ucm93XSxbYyxtXT1bci5jb2wscm8oaWssdGhpcykuZnJvbS5jb2xdO3JldHVybiBpPT09YSYmYz09PW19cmV0dXJuITF9cGFyZW50Q2VsbCh0KXtjb25zdCBlPXt9LGk9S0EodCxbIlREIiwiVEgiXSxybyhHMCx0aGlzKS5UQUJMRSk7cmV0''@;'; put 'put ''dXJuIGk/KGUuY29vcmRzPXJvKEcwLHRoaXMpLmdldENvb3JkcyhpKSxlLlREPWkpOnZvKHQsInd0Qm9yZGVyIikmJnZvKHQsImN1cnJlbnQiKT8oZS5jb29yZHM9cm8oeUMsdGhpcykuZ2V0Rm9jdXNTZWxlY3Rpb24oKS5jZWxsUmFuZ2UuaGlnaGxpZ2h0LGUuVEQ9cm8oRzAsdGhpcykuZ2V0''@;'; put 'put ''Q2VsbChlLmNvb3JkcykpOnZvKHQsInd0Qm9yZGVyIikmJnZvKHQsImFyZWEiKSYmcm8oeUMsdGhpcykuZ2V0QXJlYVNlbGVjdGlvbigpLmNlbGxSYW5nZSYmKGUuY29vcmRzPXJvKHlDLHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UudG8sZS5URD1ybyhHMCx0aGlzKS5nZXRD''@;'; put 'put ''ZWxsKGUuY29vcmRzKSksZX1vbk1vdXNlRG93bih0KXtjb25zdCBlPXJvKFBKLHRoaXMpLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LHI9cEooZTVlLHQudGFyZ2V0KSxpPXQudGFyZ2V0O2lmKCFbIlREIiwiVEgiXS5pbmNsdWRlcyhlLm5vZGVOYW1lKSYmKGk9PT1lfHxyKDApPT09ZXx8''@;'; put 'put ''cigxKT09PWUpKXJldHVybjtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChpKTt2byhpLCJjb3JuZXIiKT9ybyhZZix0aGlzKS5nZXRTZXR0aW5nKCJvbkNlbGxDb3JuZXJNb3VzZURvd24iLHQsaSk6YS5URCYmcm8oWWYsdGhpcykuaGFzKCJvbkNlbGxNb3VzZURvd24iKSYmdGhpcy5jYWxsTGlz''@;'; put 'put ''dGVuZXIoIm9uQ2VsbE1vdXNlRG93biIsdCxhLmNvb3JkcyxhLlREKSwoMD09PXQuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJmEuVEQmJihybyhFNCx0aGlzKVswXT1hLlRELGNsZWFyVGltZW91dChybyhQdix0aGlzKVswXSkscm8oUHYsdGhpcylbMF09c2V0VGltZW91dCgoKT0+e3Jv''@;'; put 'put ''KEU0LHRoaXMpWzBdPW51bGx9LDFlMykpfW9uQ29udGV4dE1lbnUodCl7aWYocm8oWWYsdGhpcykuaGFzKCJvbkNlbGxDb250ZXh0TWVudSIpKXtjb25zdCBlPXRoaXMucGFyZW50Q2VsbCh0LnRhcmdldCk7ZS5URCYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvbnRleHRNZW51Iix0LGUu''@;'; put 'put ''Y29vcmRzLGUuVEQpfX1vbk1vdXNlT3Zlcih0KXtpZighcm8oWWYsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU92ZXIiKSlyZXR1cm47Y29uc3QgZT1ybyhHMCx0aGlzKS5UQUJMRSxyPUtBKHQudGFyZ2V0LFsiVEQiLCJUSCJdLGUpLGk9cm8oeU4sdGhpcyl8fHRoaXM7ciYmciE9PWkubGFzdE1v''@;'; put 'put ''dXNlT3ZlciYmWDYocixlKSYmKGkubGFzdE1vdXNlT3Zlcj1yLHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU92ZXIiLHQscm8oRzAsdGhpcykuZ2V0Q29vcmRzKHIpLHIpKX1vbk1vdXNlT3V0KHQpe2lmKCFybyhZZix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlT3V0IikpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGU9cm8oRzAsdGhpcykuVEFCTEUscj1LQSh0LnRhcmdldCxbIlREIiwiVEgiXSxlKSxpPUtBKHQucmVsYXRlZFRhcmdldCxbIlREIiwiVEgiXSxlKSxhPXJvKHlOLHRoaXMpfHx0aGlzO3ImJnIhPT1pJiZYNihyLGUpJiYodGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3V0Iix0''@;'; put 'put ''LHJvKEcwLHRoaXMpLmdldENvb3JkcyhyKSxyKSxudWxsPT09aSYmKGEubGFzdE1vdXNlT3Zlcj1udWxsKSl9b25Nb3VzZVVwKHQpe2NvbnN0IGU9dGhpcy5wYXJlbnRDZWxsKHQudGFyZ2V0KTtlLlREJiZybyhZZix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlVXAiKSYmdGhpcy5jYWxsTGlzdGVu''@;'; put 'put ''ZXIoIm9uQ2VsbE1vdXNlVXAiLHQsZS5jb29yZHMsZS5URCksKDA9PT10LmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiYoZS5URD09PXJvKEU0LHRoaXMpWzBdJiZlLlREPT09cm8oRTQsdGhpcylbMV0/KHZvKHQudGFyZ2V0LCJjb3JuZXIiKT90aGlzLmNhbGxMaXN0ZW5lcigib25DZWxs''@;'; put 'put ''Q29ybmVyRGJsQ2xpY2siLHQsZS5jb29yZHMsZS5URCk6dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbERibENsaWNrIix0LGUuY29vcmRzLGUuVEQpLHJvKEU0LHRoaXMpWzBdPW51bGwscm8oRTQsdGhpcylbMV09bnVsbCk6ZS5URD09PXJvKEU0LHRoaXMpWzBdJiYocm8oRTQsdGhpcylbMV09''@;'; put 'put ''ZS5URCxjbGVhclRpbWVvdXQocm8oUHYsdGhpcylbMV0pLHJvKFB2LHRoaXMpWzFdPXNldFRpbWVvdXQoKCk9PntybyhFNCx0aGlzKVsxXT1udWxsfSw1MDApKSl9b25Ub3VjaFN0YXJ0KHQpe3I4KGlrLHRoaXMscm8oeUMsdGhpcykuZ2V0Rm9jdXNTZWxlY3Rpb24oKS5jZWxsUmFuZ2UpLHRo''@;'; put 'put ''aXMudG91Y2hBcHBsaWVkPSEwLHRoaXMub25Nb3VzZURvd24odCl9b25Ub3VjaEVuZCh0KXt2YXIgZTtjb25zdCByPXQudGFyZ2V0LGk9bnVsbD09PShlPXRoaXMucGFyZW50Q2VsbChyKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY29vcmRzLGE9d2EoaSkmJmkucm93Pj0wJiZpLmNvbD49MDtp''@;'; put 'put ''Zih0LmNhbmNlbGFibGUmJmEmJnJvKFlmLHRoaXMpLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpKXtjb25zdCBtPVsiQSIsIkJVVFRPTiIsIklOUFVUIl07dEooKSYmKHFnZSgpfHxKZ2UoKSkmJnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChyKSYmIW0uaW5jbHVkZXMoci50''@;'; put 'put ''YWdOYW1lKT90LnByZXZlbnREZWZhdWx0KCk6dGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKHIpfHx0LnByZXZlbnREZWZhdWx0KCl9dGhpcy5vbk1vdXNlVXAodCksdGhpcy50b3VjaEFwcGxpZWQ9ITF9Y2FsbExpc3RlbmVyKHQsZSxyLGkpe2NvbnN0IGE9cm8oWWYsdGhpcykuZ2V0U2V0''@;'; put 'put ''dGluZ1B1cmUodCk7YSYmYShlLHIsaSxybyhGSix0aGlzKS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7Y2xlYXJUaW1lb3V0KHJvKFB2LHRoaXMpWzBdKSxjbGVhclRpbWVvdXQocm8oUHYsdGhpcylbMV0pLHJvKGxwLHRoaXMpLmRlc3Ryb3koKX19O2Z1bmN0aW9uIEhKKG4sdCxlKXtyZXR1cm4o''@;'; put 'put ''dD1mdW5jdGlvbiBLb3Qobil7dmFyIHQ9ZnVuY3Rpb24gWG90KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIi''@;'; put 'put ''fSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jb25zdCBKb3Q9Y2xhc3MgcW90e2NvbnN0cnVjdG9yKHQsZSxyKXtISih0aGlzLCJvZmZzZXQiLHZvaWQgMCksSEoo''@;'; put 'put ''dGhpcywidG90YWwiLHZvaWQgMCksSEoodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlzLm9mZnNldD10LHRoaXMudG90YWw9ZSx0aGlzLmNvdW50VEg9cn1vZmZzZXR0ZWQodCl7cmV0dXJuIHQrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQodCl7cmV0dXJuIHQtdGhpcy5vZmZzZXR9cmVuZGVy''@;'; put 'put ''ZWRUb1NvdXJjZSh0KXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQodCl9c291cmNlVG9SZW5kZXJlZCh0KXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZCh0KX1vZmZzZXR0ZWRUSCh0KXtyZXR1cm4gdC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSCh0KXtyZXR1cm4gdCt0aGlzLmNvdW50VEh9dmlz''@;'; put 'put ''aWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKHQpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSCh0KSl9c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKHQpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VU''@;'; put 'put ''b1JlbmRlcmVkKHQpKX19O2Z1bmN0aW9uIE5KKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBRb3Qobil7dmFyIHQ9ZnVuY3Rpb24gZXN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFy''@;'; put 'put ''IHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShu''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jb25zdCBuc3Q9Y2xhc3MgdHN0e2NvbnN0''@;'; put 'put ''cnVjdG9yKHQsZSxyKXtOSih0aGlzLCJvZmZzZXQiLHZvaWQgMCksTkoodGhpcywidG90YWwiLHZvaWQgMCksTkoodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlzLm9mZnNldD10LHRoaXMudG90YWw9ZSx0aGlzLmNvdW50VEg9cn1vZmZzZXR0ZWQodCl7cmV0dXJuIHQrdGhpcy5vZmZzZXR9''@;'; put 'put ''dW5PZmZzZXR0ZWQodCl7cmV0dXJuIHQtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZSh0KXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQodCl9c291cmNlVG9SZW5kZXJlZCh0KXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZCh0KX1vZmZzZXR0ZWRUSCh0KXtyZXR1cm4gdC10aGlzLmNvdW50VEh9''@;'; put 'put ''dW5PZmZzZXR0ZWRUSCh0KXtyZXR1cm4gdCt0aGlzLmNvdW50VEh9dmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KHQpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSCh0KSl9c291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KHQpe3JldHVybiB0''@;'; put 'put ''aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKHQpKX19O2Z1bmN0aW9uIF9OKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiByc3Qobil7dmFyIHQ9ZnVuY3Rpb24gaXN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3Rd''@;'; put 'put ''PWUsbn1jbGFzcyBhc3R7Y29uc3RydWN0b3IoKXtfTih0aGlzLCJjdXJyZW50U2l6ZSIsMCksX04odGhpcywibmV4dFNpemUiLDApLF9OKHRoaXMsImN1cnJlbnRPZmZzZXQiLDApLF9OKHRoaXMsIm5leHRPZmZzZXQiLDApfXNldFNpemUodCl7dGhpcy5jdXJyZW50U2l6ZT10aGlzLm5leHRT''@;'; put 'put ''aXplLHRoaXMubmV4dFNpemU9dH1zZXRPZmZzZXQodCl7dGhpcy5jdXJyZW50T2Zmc2V0PXRoaXMubmV4dE9mZnNldCx0aGlzLm5leHRPZmZzZXQ9dH19ZnVuY3Rpb24gQkoobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIHNzdChuKXt2YXIgdD1mdW5jdGlvbiBsc3Qobix0KXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIGNzdHtjb25zdHJ1Y3Rvcigpe0JKKHRoaXMsInNpemUiLG5ldyBhc3QpLEJKKHRoaXMsIndvcmtpbmdTcGFjZSIsMCksQkoodGhpcywic2hhcmVkU2l6ZSIsbnVsbCl9c2V0U2l6ZSh0KXt0aGlzLnNp''@;'; put 'put ''emUuc2V0U2l6ZSh0KX1zZXRPZmZzZXQodCl7dGhpcy5zaXplLnNldE9mZnNldCh0KX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0aGlzLnNpemV9aXNTaGFyZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuc2hhcmVkU2l6ZX1pc1BsYWNlT24odCl7cmV0dXJuIHRoaXMud29ya2luZ1NwYWNlPT09dH1h''@;'; put 'put ''cHBlbmQodCl7dGhpcy53b3JraW5nU3BhY2U9MSx0LndvcmtpbmdTcGFjZT0yLHRoaXMuc2hhcmVkU2l6ZT10LmdldFZpZXdTaXplKCl9cHJlcGVuZCh0KXt0aGlzLndvcmtpbmdTcGFjZT0yLHQud29ya2luZ1NwYWNlPTEsdGhpcy5zaGFyZWRTaXplPXQuZ2V0Vmlld1NpemUoKX19ZCgyOTc2''@;'; put 'put ''MCk7Y2xhc3MgejVle2NvbnN0cnVjdG9yKHQsZSl7KGZ1bmN0aW9uIHVzdChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gZHN0KG4pe3ZhciB0PWZ1bmN0aW9uIGhzdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KSh0aGlzLCJv''@;'; put 'put ''cmRlciIsW10pLHRoaXMub3JkZXI9Wy4uLkFycmF5KGUpLmtleXMoKV0ubWFwKHI9PnQrcil9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyLmxlbmd0aH1oYXModCl7cmV0dXJuIHRoaXMub3JkZXIuaW5kZXhPZih0KT4tMX1nZXQodCl7cmV0dXJuIHQ8dGhpcy5vcmRlci5sZW5ndGg/''@;'; put 'put ''dGhpcy5vcmRlclt0XTotMX1yZW1vdmUodCl7dGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpfXByZXBlbmQodCl7cmV0dXJuIHRoaXMub3JkZXIudW5zaGlmdCh0KSx0aGlzLm9yZGVyLnBvcCgpfX1jbGFzcyBtc3R7Y29uc3RydWN0b3IodCl7KGZ1bmN0aW9uIGZz''@;'; put 'put ''dChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gcHN0KG4pe3ZhciB0PWZ1bmN0aW9uIGdzdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9''@;'; put 'put ''PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KSh0aGlzLCJzaXplU2V0Iix2b2lkIDApLHRoaXMuc2l6ZVNldD10fWRpZmYoKXtjb25z''@;'; put 'put ''dHtzaXplU2V0OnR9PXRoaXMse2N1cnJlbnRTaXplOmUsbmV4dFNpemU6cn09dC5nZXRWaWV3U2l6ZSgpO2xldCBpPU1hdGgubWF4KHIsZSk7aWYoMD09PWkpcmV0dXJuW107Y29uc3R7Y3VycmVudE9mZnNldDphLG5leHRPZmZzZXQ6Y309dC5nZXRWaWV3U2l6ZSgpLG09bmV3IHo1ZShhLGUp''@;'; put 'put ''LEM9bmV3IHo1ZShjLHIpLFA9W107Zm9yKGxldCBZPTA7WTxpO1krKyl7Y29uc3QgSj1tLmdldChZKSxjZT1DLmdldChZKTtpZigtMT09PWNlKVAucHVzaChbInJlbW92ZSIsSl0pO2Vsc2UgaWYoLTE9PT1KKSF0LmlzU2hhcmVkKCl8fHQuaXNTaGFyZWQoKSYmdC5pc1BsYWNlT24oMik/UC5w''@;'; put 'put ''dXNoKFsiYXBwZW5kIixjZV0pOlAucHVzaChbInByZXBlbmQiLGNlXSk7ZWxzZSBpZihjZT5KKW0uaGFzKGNlKSYmKG0ucmVtb3ZlKGNlKSxyPD1tLmxlbmd0aCYmKGktPTEpKSxQLnB1c2goWyJyZXBsYWNlIixjZSxKXSk7ZWxzZSBpZihjZTxKKXtjb25zdCBmZT1tLnByZXBlbmQoY2UpO1Au''@;'; put 'put ''cHVzaChbImluc2VydF9iZWZvcmUiLGNlLEosZmVdKX1lbHNlIFAucHVzaChbIm5vbmUiLGNlXSl9cmV0dXJuIFB9fWZ1bmN0aW9uIF9DKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiB2c3Qobil7dmFyIHQ9ZnVuY3Rpb24geXN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1''@;'; put 'put ''cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBVNWV7Y29uc3RydWN0b3IodCxlKXtfQyh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxfQyh0aGlzLCJub2Rlc1Bvb2wiLHZvaWQgMCksX0ModGhpcywic2l6ZVNldCIsbmV3IGNzdCksX0ModGhpcywiY29sbGVjdGVkTm9kZXMiLFtdKSxf''@;'; put 'put ''Qyh0aGlzLCJ2aWV3RGlmZmVyIixuZXcgbXN0KHRoaXMuc2l6ZVNldCkpLF9DKHRoaXMsImxlYWRzIixbXSksdGhpcy5yb290Tm9kZT10LHRoaXMubm9kZXNQb29sPWV9c2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUodCksdGhpc31zZXRPZmZzZXQodCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuc2l6ZVNldC5zZXRPZmZzZXQodCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZSh0KXtyZXR1cm4gdDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW3RdOm51bGx9Z2V0Q3VycmVudE5v''@;'; put 'put ''ZGUoKXtjb25zdCB0PXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiB0PjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1t0LTFdOm51bGx9YXBwbHlDb21tYW5kKHQpe2NvbnN0e3Jvb3ROb2RlOmV9PXRoaXMsW3IsaSxhLGNdPXQsbT10aGlzLm5vZGVzUG9vbChpKTtzd2l0Y2godGhpcy5j''@;'; put 'put ''b2xsZWN0ZWROb2Rlcy5wdXNoKG0pLHIpe2Nhc2UicHJlcGVuZCI6ZS5pbnNlcnRCZWZvcmUobSxlLmZpcnN0Q2hpbGQpO2JyZWFrO2Nhc2UiYXBwZW5kIjplLmFwcGVuZENoaWxkKG0pO2JyZWFrO2Nhc2UiaW5zZXJ0X2JlZm9yZSI6ZS5pbnNlcnRCZWZvcmUobSx0aGlzLm5vZGVzUG9vbChh''@;'; put 'put ''KSksZS5yZW1vdmVDaGlsZCh0aGlzLm5vZGVzUG9vbChjKSk7YnJlYWs7Y2FzZSJyZXBsYWNlIjplLnJlcGxhY2VDaGlsZChtLHRoaXMubm9kZXNQb29sKGEpKTticmVhaztjYXNlInJlbW92ZSI6ZS5yZW1vdmVDaGlsZChtKX19c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0w''@;'; put 'put ''LHRoaXMubGVhZHM9dGhpcy52aWV3RGlmZmVyLmRpZmYoKX1yZW5kZXIoKXt0aGlzLmxlYWRzLmxlbmd0aD4wJiZ0aGlzLmFwcGx5Q29tbWFuZCh0aGlzLmxlYWRzLnNoaWZ0KCkpfWVuZCgpe2Zvcig7dGhpcy5sZWFkcy5sZW5ndGg+MDspdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5z''@;'; put 'put ''aGlmdCgpKX19Y2xhc3MgVzVlIGV4dGVuZHMgVTVle3ByZXBlbmRWaWV3KHQpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZCh0LnNpemVTZXQpLHQuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZpZXcodCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQodC5z''@;'; put 'put ''aXplU2V0KSx0LnNpemVTZXQucHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWZ1bmN0aW9uIFo1ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gX3N0KG4pe3ZhciB0PWZ1bmN0aW9uIGJzdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0''@;'; put 'put ''XT1lLG59Y2xhc3Mgd3N0e2NvbnN0cnVjdG9yKHQpe1o1ZSh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxaNWUodGhpcywicG9vbCIsbmV3IE1hcCksdGhpcy5ub2RlVHlwZT10LnRvVXBwZXJDYXNlKCl9c2V0Um9vdERvY3VtZW50KHQpe3RoaXMucm9vdERvY3VtZW50PXR9b2J0YWluKHQsZSl7''@;'; put 'put ''Y29uc3QgaT0ibnVtYmVyIj09dHlwZW9mIGU/YCR7dH14JHtlfWA6dC50b1N0cmluZygpO2lmKHRoaXMucG9vbC5oYXMoaSkpcmV0dXJuIHRoaXMucG9vbC5nZXQoaSk7Y29uc3QgYT10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMubm9kZVR5cGUpO3JldHVybiB0aGlzLnBv''@;'; put 'put ''b2wuc2V0KGksYSksYX19ZnVuY3Rpb24gYWsobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIENzdChuKXt2YXIgdD1mdW5jdGlvbiBTc3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIg''@;'; put 'put ''cj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4s''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIG9re2NvbnN0cnVjdG9yKHQsZSl7''@;'; put 'put ''YWsodGhpcywibm9kZXNQb29sIixudWxsKSxhayh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxhayh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxhayh0aGlzLCJ0YWJsZSIsbnVsbCksYWsodGhpcywicmVuZGVyZWROb2RlcyIsMCksdGhpcy5ub2Rlc1Bvb2w9InN0cmluZyI9PXR5cGVvZiB0P25l''@;'; put 'put ''dyB3c3QodCk6bnVsbCx0aGlzLm5vZGVUeXBlPXQsdGhpcy5yb290Tm9kZT1lfXNldFRhYmxlKHQpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5vZGVzUG9vbC5zZXRSb290RG9jdW1lbnQodC5yb290RG9jdW1lbnQpLHRoaXMudGFibGU9dH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1mdW5jdGlvbiBZ''@;'; put 'put ''NWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIE1zdChuKXt2YXIgdD1mdW5jdGlvbiB4c3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIp''@;'; put 'put ''O2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIEVzdCBleHRlbmRzIG9re2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRIIiksWTVl''@;'; put 'put ''KHRoaXMsIm9yZGVyVmlld3MiLG5ldyBXZWFrTWFwKSxZNWUodGhpcywic291cmNlUm93SW5kZXgiLDApfW9idGFpbk9yZGVyVmlldyh0KXtsZXQgZTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyh0KT9lPXRoaXMub3JkZXJWaWV3cy5nZXQodCk6KGU9bmV3IFc1ZSh0LHI9PnRoaXMubm9k''@;'; put 'put ''ZXNQb29sLm9idGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LHIpKSx0aGlzLm9yZGVyVmlld3Muc2V0KHQsZSkpLGV9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOnQscm93SGVhZGVyRnVuY3Rpb25zOmUscm93SGVhZGVyc0NvdW50OnIscm93czppLGNlbGxzOmF9PXRoaXMudGFibGU7Zm9y''@;'; put 'put ''KGxldCBjPTA7Yzx0O2MrKyl7Y29uc3QgbT10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoYyksQz1pLmdldFJlbmRlcmVkTm9kZShjKTt0aGlzLnNvdXJjZVJvd0luZGV4PW07Y29uc3QgUD10aGlzLm9idGFpbk9yZGVyVmlldyhDKSxZPWEub2J0YWluT3JkZXJWaWV3KEMpO1AuYXBw''@;'; put 'put ''ZW5kVmlldyhZKS5zZXRTaXplKHIpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgSj1yLTE7Sj49MDtKLS0pe1AucmVuZGVyKCk7Y29uc3QgY2U9UC5nZXRDdXJyZW50Tm9kZSgpO2NlLmNsYXNzTmFtZT0iIixjZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksQzQoY2UsW25ldyBSZWdF''@;'; put 'put ''eHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZaYShjZSxbWyJyb2xlIiwicm93aGVhZGVyIl0sWyJzY29wZSIsInJvdyJdLHFxKEorMSksYXAoLTEpXSksZVtKXShtLGNlLEopfVAuZW5kKCl9fX1jbGFzcyBUc3QgZXh0ZW5k''@;'; put 'put ''cyBva3tjb25zdHJ1Y3Rvcih0KXtzdXBlcihudWxsLHQpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDp0LHJvd0hlYWRlcnNDb3VudDplfT10aGlzLnRhYmxlO2xldCByPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZih0KXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aX09dGhp''@;'; put 'put ''cy50YWJsZSxhPWkrZTtmb3IobGV0IG09MCxDPXQ7bTxDO20rKyl7Zm9yKHI9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW21dLHJ8fChyPXRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChyKSksdGhpcy5yZW5kZXJl''@;'; put 'put ''ZE5vZGVzPXIuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGE7KXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmE7KXIucmVtb3Zl''@;'; put 'put ''Q2hpbGQoci5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCBjPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYoYz50KWZvcihsZXQgbT10O208YzttKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBy''@;'; put 'put ''JiZTNChyKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6dH09dGhpcy50YWJsZTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEodGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0pO2ZvcihsZXQgZT0wO2U8dDtlKz0xKXtjb25zdHtjb2x1bW5IZWFkZXJG''@;'; put 'put ''dW5jdGlvbnM6cixjb2x1bW5zVG9SZW5kZXI6aSxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZSxjPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1tlXTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEoYyxbWyJyb2xlIiwicm93Il0semdlKGUrMSldKTtmb3IobGV0IG09LTEqYTtt''@;'; put 'put ''PGk7bSs9MSl7Y29uc3QgQz10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UobSksUD1jLmNoaWxkTm9kZXNbbSthXTtQLmNsYXNzTmFtZT0iIixQLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxDNChQLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIild''@;'; put 'put ''KSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEoUCxbcXEobSsxK3RoaXMudGFibGUucm93SGVhZGVyc0NvdW50KSxhcCgtMSksWyJyb2xlIiwiY29sdW1uaGVhZGVyIl0sLi4ubT49MD9bWyJzY29wZSIsImNvbCJdXTpbWyJyb2xlIiwiZ3JpZGNlbGwgYnV0dG9uIl0sVDIoIlNlbGVj''@;'; put 'put ''dCB3aG9sZSBncmlkIildXSkscltlXShDLFAsZSl9fX19bGV0IEc1ZT0hMTtjbGFzcyBBc3QgZXh0ZW5kcyBva3tjb25zdHJ1Y3Rvcih0KXtzdXBlcihudWxsLHQpfWFkanVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjp0LHJvd0hlYWRlcnNDb3VudDplfT10aGlzLnRhYmxlLHI9dCtlO2Zv''@;'; put 'put ''cig7dGhpcy5yZW5kZXJlZE5vZGVzPHI7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5yOyl0aGlzLnJvb3ROb2RlLnJlbW92''@;'; put 'put ''ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9cmVuZGVyKCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5kZXI6dCxyb3dIZWFkZXJzQ291bnQ6ZX09dGhpcy50YWJsZTshRzVlJiZ0PjFlMyYmKEc1ZT0hMCxvcyhlbGBQZXJmb3Jt''@;'; put 'put ''YW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIGNvbHVtbnMuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSB3aWR0aCBhbmQvb3JceDIw''@;'; put 'put ''CiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxDb2x1bW5zIiBvcHRpb24uYCkpO2ZvcihsZXQgaT0wO2k8ZTtpKyspe2NvbnN0IGE9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGkpLGM9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChhKTt0''@;'; put 'put ''aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaV0uc3R5bGUud2lkdGg9YCR7Y31weGB9Zm9yKGxldCBpPTA7aTx0O2krKyl7Y29uc3QgYT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaSksYz10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFdpZHRoKGEpO3RoaXMucm9vdE5vZGUu''@;'; put 'put ''Y2hpbGROb2Rlc1tpK2VdLnN0eWxlLndpZHRoPWAke2N9cHhgfWNvbnN0IHI9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO3ImJnRpKHIsInJvd0hlYWRlciIpfX1sZXQgJDVlPSExO2NsYXNzIFJzdCBleHRlbmRzIG9re2NvbnN0cnVjdG9yKHQpe3N1cGVyKCJUUiIsdCksZnVuY3Rpb24ga3N0''@;'; put 'put ''KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBEc3Qobil7dmFyIHQ9ZnVuY3Rpb24gSXN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywib3JkZXJWaWV3Iix2b2lkIDApLHRoaXMub3JkZXJWaWV3PW5ldyBVNWUodCxl''@;'; put 'put ''PT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oZSkpfWdldFJlbmRlcmVkTm9kZSh0KXtyZXR1cm4gdGhpcy5vcmRlclZpZXcuZ2V0Tm9kZSh0KX1oYXNTdGFsZUNvbnRlbnQodCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3Lmhhc1N0YWxlQ29udGVudCh0KX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5k''@;'; put 'put ''ZXI6dH09dGhpcy50YWJsZTshJDVlJiZ0PjFlMyYmKCQ1ZT0hMCxvcyhlbGBQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIHJvd3MuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQg''@;'; put 'put ''cm93cyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSBoZWlnaHQgYW5kL29yXHgyMAogICAgICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsUm93cyIgb3B0aW9uLmApKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEodGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3JvdXAiXV0p''@;'; put 'put ''LHRoaXMub3JkZXJWaWV3LnNldFNpemUodCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGk9MDtpPHQ7aSsrKXt0aGlzLm9yZGVyVmlldy5yZW5kZXIoKTtjb25zdCBhPXRoaXMub3JkZXJWaWV3LmdldEN1cnJlbnROb2RlKCks''@;'; put 'put ''Yz10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoaSk7dmFyIGUscjt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmWmEoYSxbWyJyb2xlIiwicm93Il0semdlKGMrKG51bGwhPT0oZT1udWxsPT09KHI9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PXJ8fG51bGw9PT0ocj1y''@;'; put 'put ''LmRhdGFBY2Nlc3NPYmplY3QpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmNvbHVtbkhlYWRlcnMubGVuZ3RoKSYmdm9pZCAwIT09ZT9lOjApKzEpXSksKGMrMSklMj09MD92byhhLCJodF9fcm93X2V2ZW4iKXx8KEhhKGEsImh0X19yb3dfb2RkIiksdGkoYSwiaHRfX3Jvd19ldmVuIikpOnZvKGEs''@;'; put 'put ''Imh0X19yb3dfb2RkIil8fChIYShhLCJodF9fcm93X2V2ZW4iKSx0aShhLCJodF9fcm93X29kZCIpKX10aGlzLm9yZGVyVmlldy5lbmQoKX19ZnVuY3Rpb24gSzVlKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBMc3Qobil7dmFyIHQ9ZnVuY3Rpb24gT3N0KG4sdCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBQc3QgZXh0ZW5kcyBva3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLEs1ZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksSzVlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZp''@;'; put 'put ''ZXcodCl7bGV0IGU7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXModCk/ZT10aGlzLm9yZGVyVmlld3MuZ2V0KHQpOihlPW5ldyBXNWUodCxyPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxyKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KHQs''@;'; put 'put ''ZSkpLGV9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOnQsY29sdW1uc1RvUmVuZGVyOmUscm93czpyLHJvd0hlYWRlcnM6aX09dGhpcy50YWJsZTtmb3IobGV0IG09MDttPHQ7bSsrKXtjb25zdCBDPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShtKSxQPXIuZ2V0UmVuZGVyZWRO''@;'; put 'put ''b2RlKG0pO3RoaXMuc291cmNlUm93SW5kZXg9Qztjb25zdCBZPXRoaXMub2J0YWluT3JkZXJWaWV3KFApLEo9aS5vYnRhaW5PcmRlclZpZXcoUCk7WS5wcmVwZW5kVmlldyhKKS5zZXRTaXplKGUpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgY2U9MDtjZTxlO2NlKyspe1kucmVuZGVy''@;'; put 'put ''KCk7Y29uc3QgZmU9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGNlKSxBZT1ZLmdldEN1cnJlbnROb2RlKCk7dmFyIGEsYzt2byhBZSwiaGlkZSIpfHwoQWUuY2xhc3NOYW1lPSIiKSxBZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksQWUucmVtb3ZlQXR0cmlidXRlKCJkaXIi''@;'; put 'put ''KSxDNChBZSxbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5jZWxsUmVuZGVyZXIoQyxmZSxBZSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJlphKEFlLFsuLi5BZS5oYXNBdHRyaWJ1dGUoInJvbGUiKT9bXTpbWyJyb2xlIiwiZ3Jp''@;'; put 'put ''ZGNlbGwiXV0sYXAoLTEpLHFxKGZlKyhudWxsIT09KGE9bnVsbD09PShjPXRoaXMudGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT1jfHxudWxsPT09KGM9Yy5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5yb3dIZWFkZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWE/YTowKSsx''@;'; put 'put ''KV0pfVkuZW5kKCl9fX1mdW5jdGlvbiBoMChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRnN0KG4pe3ZhciB0PWZ1bmN0aW9uIEhzdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciBy''@;'; put 'put ''PWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgTnN0e2NvbnN0cnVjdG9yKHQpe2xl''@;'; put 'put ''dHtjZWxsUmVuZGVyZXI6ZSxzdHlsZXNIYW5kbGVyOnJ9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtoMCh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxoMCh0aGlzLCJyb290RG9jdW1lbnQiLHZvaWQgMCksaDAodGhpcywicm93SGVh''@;'; put 'put ''ZGVycyIsbnVsbCksaDAodGhpcywiY29sdW1uSGVhZGVycyIsbnVsbCksaDAodGhpcywiY29sR3JvdXAiLG51bGwpLGgwKHRoaXMsInJvd3MiLG51bGwpLGgwKHRoaXMsImNlbGxzIixudWxsKSxoMCh0aGlzLCJyb3dGaWx0ZXIiLG51bGwpLGgwKHRoaXMsImNvbHVtbkZpbHRlciIsbnVsbCks''@;'; put 'put ''aDAodGhpcywicm93VXRpbHMiLG51bGwpLGgwKHRoaXMsImNvbHVtblV0aWxzIixudWxsKSxoMCh0aGlzLCJyb3dzVG9SZW5kZXIiLDApLGgwKHRoaXMsImNvbHVtbnNUb1JlbmRlciIsMCksaDAodGhpcywicm93SGVhZGVyRnVuY3Rpb25zIixbXSksaDAodGhpcywicm93SGVhZGVyc0NvdW50''@;'; put 'put ''IiwwKSxoMCh0aGlzLCJjb2x1bW5IZWFkZXJGdW5jdGlvbnMiLFtdKSxoMCh0aGlzLCJjb2x1bW5IZWFkZXJzQ291bnQiLDApLGgwKHRoaXMsImNlbGxSZW5kZXJlciIsdm9pZCAwKSxoMCh0aGlzLCJhY3RpdmVPdmVybGF5TmFtZSIsdm9pZCAwKSxoMCh0aGlzLCJzdHlsZXNIYW5kbGVyIix2''@;'; put 'put ''b2lkIDApLHRoaXMucm9vdE5vZGU9dCx0aGlzLnJvb3REb2N1bWVudD10aGlzLnJvb3ROb2RlLm93bmVyRG9jdW1lbnQsdGhpcy5jZWxsUmVuZGVyZXI9ZSx0aGlzLnN0eWxlc0hhbmRsZXI9cn1zZXRBY3RpdmVPdmVybGF5TmFtZSh0KXt0aGlzLmFjdGl2ZU92ZXJsYXlOYW1lPXR9c2V0QXhp''@;'; put 'put ''c1V0aWxzKHQsZSl7dGhpcy5yb3dVdGlscz10LHRoaXMuY29sdW1uVXRpbHM9ZX1zZXRWaWV3cG9ydFNpemUodCxlKXt0aGlzLnJvd3NUb1JlbmRlcj10LHRoaXMuY29sdW1uc1RvUmVuZGVyPWV9c2V0RmlsdGVycyh0LGUpe3RoaXMucm93RmlsdGVyPXQsdGhpcy5jb2x1bW5GaWx0ZXI9ZX1z''@;'; put 'put ''ZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKHQsZSl7dGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9dCx0aGlzLnJvd0hlYWRlcnNDb3VudD10Lmxlbmd0aCx0aGlzLmNvbHVtbkhlYWRlckZ1bmN0aW9ucz1lLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PWUubGVuZ3RofXNldFJlbmRlcmVycygpe2xl''@;'; put 'put ''dHtyb3dIZWFkZXJzOnQsY29sdW1uSGVhZGVyczplLGNvbEdyb3VwOnIscm93czppLGNlbGxzOmF9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0LnNldFRhYmxlKHRoaXMpLGUuc2V0VGFibGUodGhpcyksci5zZXRUYWJsZSh0aGlz''@;'; put 'put ''KSxpLnNldFRhYmxlKHRoaXMpLGEuc2V0VGFibGUodGhpcyksdGhpcy5yb3dIZWFkZXJzPXQsdGhpcy5jb2x1bW5IZWFkZXJzPWUsdGhpcy5jb2xHcm91cD1yLHRoaXMucm93cz1pLHRoaXMuY2VsbHM9YX1yZW5kZXJlZFJvd1RvU291cmNlKHQpe3JldHVybiB0aGlzLnJvd0ZpbHRlci5yZW5k''@;'; put 'put ''ZXJlZFRvU291cmNlKHQpfXJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UodCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UodCl9aXNBcmlhRW5hYmxlZCgpe3JldHVybiB0aGlzLnJvd1V0aWxzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKX1yZW5kZXIo''@;'; put 'put ''KXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5yb3dIZWFkZXJzLnJlbmRl''@;'; put 'put ''cigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhpcy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjp0LHJvd3M6ZX09dGhpcztmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCBpPWUuZ2V0UmVuZGVyZWROb2RlKHIp''@;'; put 'put ''LGE9dGhpcy5yb3dVdGlscztpZihpLmZpcnN0Q2hpbGQpe2NvbnN0IGM9dGhpcy5yZW5kZXJlZFJvd1RvU291cmNlKHIpLG09YS5nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKGMsdGhpcy5hY3RpdmVPdmVybGF5TmFtZSksUD10aGlzLnN0eWxlc0hhbmRsZXIuYXJlQ2VsbHNCb3JkZXJCb3goKT8w''@;'; put 'put ''OjE7aS5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1tP20tUCsicHgiOiIifX19fWNsYXNzIFZzdHtjb25zdHJ1Y3Rvcigpe2xldHtUQUJMRTp0LFRIRUFEOmUsQ09MR1JPVVA6cixUQk9EWTppLHJvd1V0aWxzOmEsY29sdW1uVXRpbHM6YyxjZWxsUmVuZGVyZXI6bSxzdHlsZXNIYW5kbGVyOkN9''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0aGlzLnJlbmRlcmVyPW5ldyBOc3QodCx7Y2VsbFJlbmRlcmVyOm0sc3R5bGVzSGFuZGxlcjpDfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMoe3Jvd0hlYWRlcnM6bmV3IEVzdCxj''@;'; put 'put ''b2x1bW5IZWFkZXJzOm5ldyBUc3QoZSksY29sR3JvdXA6bmV3IEFzdChyKSxyb3dzOm5ldyBSc3QoaSksY2VsbHM6bmV3IFBzdH0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxzKGEsYyl9c2V0QWN0aXZlT3ZlcmxheU5hbWUodCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0QWN0aXZlT3Zl''@;'; put 'put ''cmxheU5hbWUodCksdGhpc31zZXRGaWx0ZXJzKHQsZSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0RmlsdGVycyh0LGUpLHRoaXN9c2V0Vmlld3BvcnRTaXplKHQsZSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0Vmlld3BvcnRTaXplKHQsZSksdGhpc31zZXRIZWFkZXJDb250ZW50UmVuZGVy''@;'; put 'put ''ZXJzKHQsZSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyh0LGUpLHRoaXN9YWRqdXN0KCl7dGhpcy5yZW5kZXJlci5hZGp1c3QoKX1yZW5kZXIoKXt0aGlzLnJlbmRlcmVyLnJlbmRlcigpfX1mdW5jdGlvbiBqSihuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rp''@;'; put 'put ''b24gQnN0KG4pe3ZhciB0PWZ1bmN0aW9uIGpzdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJl''@;'; put 'put ''dHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4g''@;'; put 'put ''bj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgenN0e2NvbnN0cnVjdG9yKHQsZSl7akoodGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSxqSih0aGlzLCJ3dFNl''@;'; put 'put ''dHRpbmdzIix2b2lkIDApLGpKKHRoaXMsImhlYWRlcldpZHRocyIsbmV3IE1hcCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PXQsdGhpcy53dFNldHRpbmdzPWV9Z2V0V2lkdGgodCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5XaWR0aCIsdCl8fHRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKX1nZXRIZWFkZXJIZWlnaHQodCl7bGV0IGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7Y29uc3Qgcj10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3''@;'; put 'put ''cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW3RdO3JldHVybiB2b2lkIDAhPT1yJiYoZT1lP01hdGgubWF4KGUscik6ciksZX1nZXRIZWFkZXJXaWR0aCh0KXtyZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZpbHRlci5z''@;'; put 'put ''b3VyY2VUb1JlbmRlcmVkKHQpKX1jYWxjdWxhdGVXaWR0aHMoKXtjb25zdHt3dFNldHRpbmdzOnR9PXRoaXM7bGV0IGU9dC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGU9dC5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIixlKSxudWxsIT1lKXtjb25zdCByPXQu''@;'; put 'put ''Z2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxpPXQuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7Zm9yKGxldCBhPTA7YTxyO2ErKyl7bGV0IGM9QXJyYXkuaXNBcnJheShlKT9lW2FdOmU7Yz1jPz9pLHRoaXMuaGVhZGVyV2lkdGhzLnNldChhLGMpfX19fWZ1bmN0aW9u''@;'; put 'put ''IFg1ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gVXN0KG4pe3ZhciB0PWZ1bmN0aW9uIFdzdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgWnN0e2NvbnN0cnVjdG9yKHQsZSl7WDVlKHRoaXMsImRhdGFBY2Nlc3NP''@;'; put 'put ''YmplY3QiLHZvaWQgMCksWDVlKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PXQsdGhpcy53dFNldHRpbmdzPWV9Z2V0SGVpZ2h0KHQpe2xldCBlPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHQiLHQpO2NvbnN0IHI9dGhpcy5kYXRh''@;'; put 'put ''QWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1t0XTtyZXR1cm4gdm9pZCAwIT09ciYmKGU9dm9pZCAwPT09ZT9yOk1hdGgubWF4KGUscikpLGV9Z2V0SGVpZ2h0QnlPdmVybGF5TmFtZSh0LGUpe2xldCByPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHRC''@;'; put 'put ''eU92ZXJsYXlOYW1lIix0LGUpO2NvbnN0IGk9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1t0XTtyZXR1cm4gdm9pZCAwIT09aSYmKHI9dm9pZCAwPT09cj9pOk1hdGgubWF4KHIsaSkpLHJ9fWNvbnN0IEZ2PSJ0b3AiLFQ0PSJib3R0b20iLEh2PSJpbmxp''@;'; put 'put ''bmVfc3RhcnQiLE52PSJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsaTg9ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIixxNWU9W0Z2LFQ0LEh2LE52LGk4XSxZc3Q9bmV3IE1hcChbW0Z2LGBodF9jbG9uZV8ke0Z2fWBdLFtUNCxgaHRfY2xvbmVfJHtUNH1gXSxbSHYsYGh0X2Nsb25lXyR7''@;'; put 'put ''SHZ9IGh0X2Nsb25lX2xlZnRgXSxbTnYsYGh0X2Nsb25lXyR7TnZ9IGh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lcmBdLFtpOCxgaHRfY2xvbmVfJHtpOH0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTtmdW5jdGlvbiBBNChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gR3N0KG4pe3Zh''@;'; put 'put ''ciB0PWZ1bmN0aW9uICRzdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3Qgd0M9Y2xhc3MgS3N0e2NvbnN0cnVjdG9yKHQsZSxyLGksYSl7QTQodGhpcywid3RTZXR0aW5ncyIsbnVsbCksQTQodGhpcywiZG9tQmluZGlu''@;'; put 'put ''Z3MiLHZvaWQgMCksQTQodGhpcywiVEJPRFkiLG51bGwpLEE0KHRoaXMsIlRIRUFEIixudWxsKSxBNCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksQTQodGhpcywiaGFzVGFibGVIZWlnaHQiLCEwKSxBNCh0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksQTQodGhpcywiaXNUYWJsZVZpc2libGUiLCEx''@;'; put 'put ''KSxBNCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksQTQodGhpcywiaG9sZGVyT2Zmc2V0IiwwKSx0aGlzLmRvbUJpbmRpbmdzPXIsdGhpcy5pc01hc3Rlcj0ibWFzdGVyIj09PWEsdGhpcy5uYW1lPWEsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PXQsdGhpcy5mYWNhZGVHZXR0ZXI9ZSx0aGlzLnd0U2V0''@;'; put 'put ''dGluZ3M9aSx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxFPXIucm9vdFRhYmxlLG5KKHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxF''@;'; put 'put ''KSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5ob2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0''@;'; put 'put ''aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJvd0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldp''@;'; put 'put ''ZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aChjKSksdGhpcy5yb3dVdGlscz1uZXcgWnN0KHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IHpz''@;'; put 'put ''dCh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxlUmVuZGVyZXI9bmV3IFZzdCh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxz''@;'; put 'put ''LGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIiksc3R5bGVzSGFuZGxlcjp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpfSl9aXModCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubmFtZT09PXR9Zml4VGFibGVEb21UcmVlKCl7Y29uc3QgdD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZfHwodGhpcy5UQk9EWT10LmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdGhp''@;'; put 'put ''cy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9dC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhFQUQsdGhp''@;'; put 'put ''cy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIpLHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPXQuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLkNPTEdST1VQLHRoaXMuVEhF''@;'; put 'put ''QUQpKX1jcmVhdGVTcHJlYWRlcih0KXtjb25zdCBlPXQucGFyZW50Tm9kZTtsZXQgcjtyZXR1cm4oIWV8fGUubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXZvKGUsInd0SG9sZGVyIikpJiYocj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi''@;'; put 'put ''KSxyLmNsYXNzTmFtZT0id3RTcHJlYWRlciIsZSYmZS5pbnNlcnRCZWZvcmUocix0KSxyLmFwcGVuZENoaWxkKHQpKSxyLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJlphKHIsW1sicm9sZSIsInByZXNlbnRhdGlvbiJd''@;'; put 'put ''XSkscn1jcmVhdGVIaWRlcih0KXtjb25zdCBlPXQucGFyZW50Tm9kZTtsZXQgcjtyZXR1cm4oIWV8fGUubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXZvKGUsInd0SG9sZGVyIikpJiYocj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxy''@;'; put 'put ''LmNsYXNzTmFtZT0id3RIaWRlciIsZSYmZS5pbnNlcnRCZWZvcmUocix0KSxyLmFwcGVuZENoaWxkKHQpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmWmEocixbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxyfWNyZWF0ZUhvbGRlcih0KXtjb25zdCBlPXQucGFy''@;'; put 'put ''ZW50Tm9kZTtsZXQgcjtyZXR1cm4oIWV8fGUubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXZvKGUsInd0SG9sZGVyIikpJiYocj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxyLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsci5jbGFz''@;'; put 'put ''c05hbWU9Ind0SG9sZGVyIix0aGlzLmlzTWFzdGVyJiZaYShyLFthcCgtMSldKSxlJiZlLmluc2VydEJlZm9yZShyLHQpLHRoaXMuaXNNYXN0ZXImJihyLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iaHRfbWFzdGVyIGhhbmRzb250YWJsZSIsci5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiZGly''@;'; put 'put ''Iix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJ0bE1vZGUiKT8icnRsIjoibHRyIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJlphKHIucGFyZW50Tm9kZSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSksci5hcHBlbmRDaGlsZCh0KSksdGhpcy53''@;'; put 'put ''dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJlphKHIsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSkscn1kcmF3KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmV9PXRoaXMse3d0''@;'; put 'put ''T3ZlcmxheXM6cix3dFZpZXdwb3J0Oml9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxhPWUuZ2V0U2V0dGluZygidG90YWxSb3dzIiksYz1lLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLG09ZS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksQz1tLmxlbmd0aCxQPWUuZ2V0U2V0dGluZygiY29s''@;'; put 'put ''dW1uSGVhZGVycyIpLFk9UC5sZW5ndGg7bGV0IEo9dDtpZih0aGlzLmlzTWFzdGVyJiYoci5iZWZvcmVEcmF3KCksdGhpcy5ob2xkZXJPZmZzZXQ9RTEodGhpcy5ob2xkZXIpLEo9aS5jcmVhdGVDYWxjdWxhdG9ycyhKKSxDJiYhZS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKSl7''@;'; put 'put ''Y29uc3QgZmU9ci5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxBZT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09ZmUsQWUhPT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKEo9ITEpfWlmKEopdGhpcy5pc01hc3RlciYm''@;'; put 'put ''ci5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9FMSh0aGlzLlRBQkxFKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgZmU9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCksMCksQWU9TWF0aC5tYXgo''@;'; put 'put ''dGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCksMCk7dGhpcy5yb3dGaWx0ZXI9bmV3IG5zdChmZSxhLFkpLHRoaXMuY29sdW1uRmlsdGVyPW5ldyBKb3QoQWUsYyxDKTtsZXQgSGU9ITA7aWYodGhpcy5pc01hc3Rlcil7dGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVy''@;'; put 'put ''KCk7Y29uc3QgWGU9e307dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImJlZm9yZURyYXciLCEwLFhlKSxIZT0hMCE9PVhlLnNraXBSZW5kZXJ9SGUmJih0aGlzLnRhYmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhtLFApLCh0aGlzLmlzKFQ0KXx8dGhpcy5pcyhpOCkp''@;'; put 'put ''JiZ0aGlzLnRhYmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhtLFtdKSx0aGlzLnJlc2V0T3ZlcnNpemVkUm93cygpLHRoaXMudGFibGVSZW5kZXJlci5zZXRBY3RpdmVPdmVybGF5TmFtZSh0aGlzLm5hbWUpLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93''@;'; put 'put ''c0NvdW50KCksdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlzLmlzTWFzdGVyJiZ0aGlzLm1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCksdGhpcy5hZGp1c3RDb2x1bW5IZWFk''@;'; put 'put ''ZXJIZWlnaHRzKCksKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoVDQpKSYmdGhpcy5tYXJrT3ZlcnNpemVkUm93cygpLHRoaXMuaXNNYXN0ZXI/KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKXx8aS5jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKSxy''@;'; put 'put ''LnJlZnJlc2goITEpLHIuYXBwbHlUb0RPTSgpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkRyYXciLCEwKSk6dGhpcy5pcyhUNCkmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5jbG9uZVNvdXJjZS53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpKX1sZXQgY2U9ITE7cmV0dXJu''@;'; put 'put ''IHRoaXMuaXNNYXN0ZXImJihjZT1yLnRvcE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksci5ib3R0b21PdmVybGF5LmNsb25lJiYoY2U9ci5ib3R0b21PdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpfHxjZSksY2U9ci5pbmxpbmVTdGFydE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9u''@;'; put 'put ''KCl8fGNlLHIudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZyLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxyLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmci5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnIu''@;'; put 'put ''Ym90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpKSxjZT8oci5yZWZyZXNoQWxsKCksci5hZGp1c3RFbGVtZW50c1NpemUoKSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnNlbGVjdGlvbk1hbmFnZXIuc2V0QWN0aXZlT3ZlcmxheSh0aGlzLmZhY2FkZUdl''@;'; put 'put ''dHRlcigpKS5yZW5kZXIoSiksdGhpcy5pc01hc3RlciYmci5hZnRlckRyYXcoKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIodCl7Y29uc3QgZT10aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHQpO2xldCBy''@;'; put 'put ''PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2NvbnN0IGk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGEsYyxtO2NvbnN0IEM9dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoImNvbHVtbkhlYWRlckhlaWdodCIpfHxbXTtmb3IoO3I7KXItPTEsYT10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChyKSxjPXRoaXMuZ2V0Q29sdW1uSGVhZGVyKGUsciksYyYmKG09bUMoYyksKCFhJiZpPG18fGE8bSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9y''@;'; put 'put ''dC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW3JdPW0pLEFycmF5LmlzQXJyYXkoQyk/bnVsbCE9Q1tyXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbcl09Q1tyXSk6aXNOYU4oQyl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3''@;'; put 'put ''cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW3JdPUMpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbcl08KENbcl18fEMpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tyXT1D''@;'; put 'put ''W3JdfHxDKSl9YWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpe2NvbnN0e3d0U2V0dGluZ3M6dH09dGhpcyxlPXRoaXMuVEhFQUQuY2hpbGROb2RlcyxyPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBhPTAsYz10LmdldFNl''@;'; put 'put ''dHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7YTxjO2ErKylpZihyW2FdKXtpZighZVthXXx8MD09PWVbYV0uY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuO2VbYV0uY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9YCR7clthXX1weGB9fXJlc2V0T3ZlcnNpemVkUm93cygpe2NvbnN0e3d0''@;'; put 'put ''U2V0dGluZ3M6dH09dGhpcyx7d3RWaWV3cG9ydDplfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoVDQpKSYmIXQuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpe2NvbnN0IHI9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO2Zv''@;'; put 'put ''cihsZXQgaT0wO2k8cjtpKyspe2NvbnN0IGE9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShpKTtlLm92ZXJzaXplZFJvd3MmJmUub3ZlcnNpemVkUm93c1thXSYmKGUub3ZlcnNpemVkUm93c1thXT12b2lkIDApfX19Z2V0Q2VsbCh0KXtsZXQgZT10LnJvdyxyPXQuY29sO2NvbnN0''@;'; put 'put ''IGk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsZSxyLCF0aGlzLmlzTWFzdGVyLCJyZW5kZXIiKTtpZihpJiZBcnJheS5pc0FycmF5KGkpJiYoW2Uscl09aSksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhlKSlyZXR1cm4tMTtpZih0aGlz''@;'; put 'put ''LmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoZSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhyKSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMocikpcmV0dXJuLTQ7Y29uc3QgYT10aGlzLmdldFJvdyhlKTtpZighYSYm''@;'; put 'put ''ZT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3QgYz1hLmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKHIpXTtpZighYyYmcj49MCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIGN9Z2V0Um93KHQpe2xldCBlPW51bGwscj1udWxsO3ZhciBpLGE7cmV0dXJuIHQ8MD8oZT1udWxsPT09KGk9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1pP3ZvaWQgMDpp''@;'; put 'put ''LnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyh0KSxyPXRoaXMuVEhFQUQpOihlPW51bGw9PT0oYT10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09PWE/dm9pZCAwOmEuc291cmNlVG9SZW5kZXJlZCh0KSxyPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWUmJnZvaWQgMCE9PXImJiEoci5jaGls''@;'; put 'put ''ZE5vZGVzLmxlbmd0aDxlKzEpJiZyLmNoaWxkTm9kZXNbZV19Z2V0Q29sdW1uSGVhZGVyKHQpe2NvbnN0IHI9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gcj8uY2hpbGROb2Rlc1t0''@;'; put 'put ''aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4odCldfWdldENvbHVtbkhlYWRlcnModCl7Y29uc3QgZT1bXSxyPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbih0KTtyZXR1cm4gdGhpcy5USEVB''@;'; put 'put ''RC5jaGlsZE5vZGVzLmZvckVhY2goaT0+e2NvbnN0IGE9aS5jaGlsZE5vZGVzW3JdO2EmJmUucHVzaChhKX0pLGV9Z2V0Um93SGVhZGVyKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKGU+PXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBpPXRoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQodCksYT1pPDA/dGhpcy5yb3dGaWx0ZXIuc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KHQpOmksbT0oaTwwP3RoaXMuVEhFQUQ6dGhpcy5U''@;'; put 'put ''Qk9EWSkuY2hpbGROb2Rlc1thXTtyZXR1cm4gbT8uY2hpbGROb2Rlc1tlXX1nZXRSb3dIZWFkZXJzKHQpe2NvbnN0IGU9W10scj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGk9MDtpPHI7aSsrKXtjb25zdCBhPXRoaXMuVEJPRFkuY2hp''@;'; put 'put ''bGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKHQpXSxjPWE/LmNoaWxkTm9kZXNbaV07YyYmZS5wdXNoKGMpfXJldHVybiBlfWdldENvb3Jkcyh0KXtsZXQgZT10O2lmKCJURCIhPT1lLm5vZGVOYW1lJiYiVEgiIT09ZS5ub2RlTmFtZSYmKGU9SzYoZSxbIlREIiwiVEgi''@;'; put 'put ''XSkpLG51bGw9PT1lKXJldHVybiBudWxsO2NvbnN0IHI9ZS5wYXJlbnROb2RlO2lmKCFyKXJldHVybiBudWxsO2NvbnN0IGk9ci5wYXJlbnROb2RlO2xldCBhPXI1ZShyKSxjPWUuY2VsbEluZGV4O3E2KE52LGUsdGhpcy53dFJvb3RFbGVtZW50KXx8cTYoRnYsZSx0aGlzLnd0Um9vdEVsZW1l''@;'; put 'put ''bnQpPyJUSEVBRCI9PT1pLm5vZGVOYW1lJiYoYS09aS5jaGlsZE5vZGVzLmxlbmd0aCk6cTYoaTgsZSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxxNihUNCxlLHRoaXMud3RSb290RWxlbWVudCk/YT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaS5jaGlsZE5vZGVzLmxl''@;'; put 'put ''bmd0aCthOmk9PT10aGlzLlRIRUFEP2E9dGhpcy5yb3dGaWx0ZXIudmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGEpOnRoaXMucm93RmlsdGVyJiYoYT10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGEpKSxxNihOdixlLHRoaXMud3RSb290RWxlbWVudCl8fHE2KEh2LGUs''@;'; put 'put ''dGhpcy53dFJvb3RFbGVtZW50KXx8cTYoaTgsZSx0aGlzLnd0Um9vdEVsZW1lbnQpP2M9dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgoYyk6dGhpcy5jb2x1bW5GaWx0ZXImJihjPXRoaXMuY29sdW1uRmlsdGVyLnZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihjKSk7''@;'; put 'put ''Y29uc3QgbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDb29yZHNFbGVtZW50IixhLGMpO3JldHVybiBtJiZBcnJheS5pc0FycmF5KG0pJiYoW2EsY109bSksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhhLGMpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53''@;'; put 'put ''dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgdD10aGlzLlRCT0RZLmNoaWxkTm9kZXMubGVuZ3RoO2NvbnN0IGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKSxyPXQqZS5nZXREZWZhdWx0Um93SGVpZ2h0''@;'; put 'put ''KCksaT1tQyh0aGlzLlRCT0RZKS0xLGE9ZS5hcmVDZWxsc0JvcmRlckJveCgpLGM9YT9IdTptQyxtPWE/MDoxLEM9YT8xOjA7bGV0IFAsWSxKLGNlLGZlO2lmKHIhPT1pfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpZm9yKDt0Oyl7dC09MSxKPXRoaXMu''@;'; put 'put ''cm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UodCksUD10aGlzLmdldFJvd0hlaWdodChKKSxjZT10aGlzLmdldFRyRm9yUm93KEopLGZlPWNlLnF1ZXJ5U2VsZWN0b3IoInRoIik7Y29uc3QgQWU9MD09PUo/QzowO1k9ZmU/YyhmZSk6YyhjZSktbSwoIVAmJmUuZ2V0RGVmYXVsdFJvd0hlaWdo''@;'; put 'put ''dCgpPFktQWV8fFA8WSkmJihhfHwoWSs9MSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tKXT1ZKX19Z2V0VHJGb3JSb3codCl7cmV0dXJuIHRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKHQpXX1pc0Nv''@;'; put 'put ''bHVtbkhlYWRlclJlbmRlcmVkKHQpe2lmKHQ+PTApcmV0dXJuITE7Y29uc3Qgcj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnModCk8PXJ9aXNSb3dIZWFkZXJSZW5kZXJlZCh0KXtpZih0Pj0wKXJldHVybiExO2NvbnN0IHI9''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKHQpPD1yfWlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKHQpe2NvbnN0IGU9dGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCk7cmV0dXJuIHQ8MCYmZTw9MD8hdGhpcy5pc1Jvd0hl''@;'; put 'put ''YWRlclJlbmRlcmVkKHQpOnQ8ZX1pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKHQpe3JldHVybiB0PnRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnModCl7Y29uc3QgZT10aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtyZXR1cm4gdDwwJiZl''@;'; put 'put ''PD0wPyF0aGlzLmlzQ29sdW1uSGVhZGVyUmVuZGVyZWQodCk6dDxlfWlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnModCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0PnRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9aXNDb2x1bW5BZnRlclZpZXdwb3J0KHQpe3JldHVybiB0aGlz''@;'; put 'put ''LmNvbHVtbkZpbHRlciYmdD50aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCl9aXNSb3dBZnRlclZpZXdwb3J0KHQpe3JldHVybiB0aGlzLnJvd0ZpbHRlciYmdD50aGlzLmdldExhc3RWaXNpYmxlUm93KCl9aXNDb2x1bW5CZWZvcmVWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0''@;'; put 'put ''ZXImJnRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQodCk8MCYmdD49MH1pc0xhc3RSb3dGdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0xhc3RDb2x1bW5GdWxseVZpc2libGUoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1hbGxSb3dzSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik9PT10aGlzLmdldFZpc2libGVSb3dzQ291bnQoKX1hbGxDb2x1''@;'; put 'put ''bW5zSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik9PT10aGlzLmdldFZpc2libGVDb2x1bW5zQ291bnQoKX1nZXRSb3dIZWlnaHQodCl7cmV0dXJuIHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KHQpfWdldENvbHVtbkhlYWRlckhl''@;'; put 'put ''aWdodCh0KXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRIZWFkZXJIZWlnaHQodCl9Z2V0Q29sdW1uV2lkdGgodCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0V2lkdGgodCl9aGFzRGVmaW5lZFNpemUoKXtyZXR1cm4gdGhpcy5oYXNUYWJsZUhlaWdodCYmdGhpcy5oYXNUYWJsZVdp''@;'; put 'put ''ZHRofWdldFdpZHRoKCl7cmV0dXJuIHB1KHRoaXMuVEFCTEUpfWdldEhlaWdodCgpe3JldHVybiBIdSh0aGlzLlRBQkxFKX1nZXRUb3RhbFdpZHRoKCl7Y29uc3QgdD1wdSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PXQ/dDp0aGlzLmdldFdpZHRoKCl9Z2V0VG90YWxIZWlnaHQoKXtjb25zdCB0''@;'; put 'put ''PUh1KHRoaXMuaGlkZXIpO3JldHVybiAwIT09dD90OnRoaXMuZ2V0SGVpZ2h0KCl9aXNWaXNpYmxlKCl7cmV0dXJuIGU4KHRoaXMuVEFCTEUpfV9tb2RpZnlSb3dIZWFkZXJXaWR0aCh0KXtsZXQgZT1hbCh0KT90KCk6bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8oZT1bLi4uZV0sZVtl''@;'; put 'put ''Lmxlbmd0aC0xXT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoZVtlLmxlbmd0aC0xXSkpOmU9dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGUpLGV9X2NvcnJlY3RSb3dIZWFkZXJXaWR0aCh0KXtsZXQgZT10O3JldHVybiJudW1iZXIiIT10eXBlb2YgdCYmKGU9dGhpcy53dFNldHRp''@;'; put 'put ''bmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpKSx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKGUrPTEpLGV9fSxKNWU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVSb3co''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKS0xfSxnZXRM''@;'; put 'put ''YXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlz''@;'; put 'put ''LmRhdGFBY2Nlc3NPYmplY3QuY29sdW1uSGVhZGVycy5sZW5ndGh9fTt3NChKNWUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFE1ZT1KNWUsZW1lPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3Qgbj10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PW4/LTE6bn0sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3Qgbj10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRGaXJzdFBhcnRp''@;'; put 'put ''YWxseVZpc2libGVDb2x1bW4oKXtjb25zdCBuPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldExhc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblJl''@;'; put 'put ''bmRlcmVkO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3Qgbj10aGlz''@;'; put 'put ''LmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PW4/LTE6bn0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlfSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07dzQoZW1lLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMiLHt3''@;'; put 'put ''cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3Qgeko9ZW1lO2NsYXNzIFVKIGV4dGVuZHMgd0N7Y29uc3RydWN0b3IodCxlLHIsaSl7c3VwZXIodCxlLHIsaSxGdil9fXBsKFVKLFE1ZSkscGwoVUosekopO2NvbnN0IEpzdD1VSjtmdW5jdGlvbiBiTihuLHQsZSl7aWYoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHNrPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIHRtZShuKXtjb25z''@;'; put 'put ''dHt3dFNldHRpbmdzOnQsaW5saW5lU3RhcnRPdmVybGF5OmUsd3RUYWJsZTpyLHd0Vmlld3BvcnQ6aSx0b3RhbENvbHVtbnM6YSxyb290V2luZG93OmN9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihlLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Yyl7bGV0IEM9bnVsbDtpZih0Lmdl''@;'; put 'put ''dFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3QgWT1yLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0M9TWF0aC5hYnMoWS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgpfWVsc2UgQz1FMShyLnd0''@;'; put 'put ''Um9vdEVsZW1lbnQpLmxlZnQ7Y29uc3QgUD1NYXRoLmFicyhpSihjLGMpKTtpZihDPlApe2NvbnN0IFk9YUooYyk7bGV0IEo9aS5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgY2U9MTtjZTw9YTtjZSsrKWlmKEorPWUuc3VtQ2VsbFNpemVzKGNlLTEsY2UpLEMrSi1QPj1ZKXtuPWNlLTI7''@;'; put 'put ''YnJlYWt9fX1yZXR1cm4gbn1mdW5jdGlvbiBubWUobil7Y29uc3R7dG9wT3ZlcmxheTp0LHd0VGFibGU6ZSx3dFZpZXdwb3J0OnIsdG90YWxSb3dzOmkscm9vdFdpbmRvdzphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYodC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWEpe2NvbnN0''@;'; put 'put ''IGM9RTEoZS53dFJvb3RFbGVtZW50KSxtPWxOKGEsYSk7aWYoYy50b3A+bSl7Y29uc3QgQz1tQyhhKTtsZXQgUD1yLmdldENvbHVtbkhlYWRlckhlaWdodCgpO2ZvcihsZXQgWT0xO1k8PWk7WSsrKWlmKFArPXQuc3VtQ2VsbFNpemVzKFktMSxZKSxjLnRvcCtQLW0+PUMpe249WS0yO2JyZWFr''@;'; put 'put ''fX19cmV0dXJuIG59Y29uc3QgYWx0PWNsYXNzIGlsdHtjb25zdHJ1Y3Rvcih0KXsoZnVuY3Rpb24gUXN0KG4sdCl7KGZ1bmN0aW9uIGVsdChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdp''@;'; put 'put ''Y2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSkodGhpcyxzayksZnVuY3Rpb24gdGx0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBubHQobil7dmFyIHQ9ZnVuY3Rpb24gcmx0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3Rd''@;'; put 'put ''PWUsbn0odGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9dH1zY3JvbGxWaWV3cG9ydCh0LGUscil7aWYodC5jb2w8MHx8dC5yb3c8MClyZXR1cm4hMTtjb25zdCBpPXRoaXMuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkodC5jb2wsZSksYT10''@;'; put 'put ''aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseSh0LnJvdyxyKTtyZXR1cm4gaXx8YX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseSh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOnIsdG90''@;'; put 'put ''YWxDb2x1bW5zOml9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighcilyZXR1cm4hMTtjb25zdCBhPUFoKGUpO2lmKHQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsdCxhKSwhTnVtYmVyLmlz''@;'; put 'put ''SW50ZWdlcih0KXx8dDwwfHx0PmkpcmV0dXJuITE7ZT1hLnZhbHVlO2NvbnN0e2ZpeGVkQ29sdW1uc1N0YXJ0OmMsaW5saW5lU3RhcnRPdmVybGF5Om19PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxDPSJhdXRvIj09PWU7aWYoQyYmdDxjKXJldHVybiExO2NvbnN0IFA9dGhpcy5nZXRGaXJzdFZp''@;'; put 'put ''c2libGVDb2x1bW4oKSxZPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtsZXQgSj0hMTtyZXR1cm4oQyYmKHQ8UHx8dD5ZKXx8IUMpJiYoSj1tLnNjcm9sbFRvKHQsQz90Pj10aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCk6ImVuZCI9PT1lKSksSn1zY3JvbGxWaWV3cG9y''@;'; put 'put ''dFZlcnRpY2FsbHkodCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpyLHRvdGFsUm93czppfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIXIpcmV0dXJuITE7Y29uc3QgYT1BaChlKTtpZih0''@;'; put 'put ''PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5Iix0LGEpLCFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDB8fHQ+aSlyZXR1cm4hMTtlPWEudmFsdWU7Y29uc3R7Zml4ZWRSb3dzQm90dG9tOmMsZml4ZWRS''@;'; put 'put ''b3dzVG9wOm0sdG9wT3ZlcmxheTpDfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsUD0iYXV0byI9PT1lO2lmKFAmJih0PG18fHQ+aS1jLTEpKXJldHVybiExO2NvbnN0IFk9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxKPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTtsZXQgY2U9ITE7cmV0dXJu''@;'; put 'put ''KFAmJih0PFl8fHQ+Sil8fCFQKSYmKGNlPUMuc2Nyb2xsVG8odCxQP3Q+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKToiYm90dG9tIj09PWUpKSxjZX1nZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNp''@;'; put 'put ''YmxlUm93KCl9Z2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gYk4oc2ssdGhpcyxubWUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gYk4oc2ssdGhpcyxubWUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygp''@;'; put 'put ''KX1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gYk4oc2ssdGhpcyx0bWUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu''@;'; put 'put ''d3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4o''@;'; put 'put ''KXtyZXR1cm4gYk4oc2ssdGhpcyx0bWUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX19O2Z1bmN0aW9uIHJtZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gbGx0KG4pe3ZhciB0PWZ1bmN0aW9uIGNsdChu''@;'; put 'put ''LHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2''@;'; put 'put ''YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gQ0Mobix0KXtyZXR1cm4gbi5nZXQoYW1lKG4sdCkpfWZ1bmN0aW9uIGltZShuLHQsZSl7cmV0dXJuIG4uc2V0KGFtZShuLHQpLGUpLGV9ZnVuY3Rpb24gYW1lKG4sdCxl''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbTU9bmV3IFdlYWtNYXA7Y2xhc3Mg''@;'; put 'put ''d057Y29uc3RydWN0b3IodCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3JtZSh0aGlzLCJyb3ciLG51bGwpLHJtZSh0aGlzLCJjb2wiLG51bGwpLGZ1bmN0aW9uIG9sdChuLHQsZSl7KGZ1bmN0aW9uIHNsdChuLHQpe2lm''@;'; put 'put ''KHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuc2V0KG4sZSl9KHRoaXMsbTUsITEpLGltZShtNSx0aGlzLHIpLHR5cGVvZiB0PCJ1IiYmdHlwZW9mIGU8''@;'; put 'put ''InUiJiYodGhpcy5yb3c9dCx0aGlzLmNvbD1lKX1pc1ZhbGlkKHQpe2NvbnN0e2NvdW50Um93czplLGNvdW50Q29sczpyLGNvdW50Um93SGVhZGVyczppLGNvdW50Q29sSGVhZGVyczphfT17Y291bnRSb3dzOjAsY291bnRDb2xzOjAsY291bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJz''@;'; put 'put ''OjAsLi4udH07cmV0dXJuISghTnVtYmVyLmlzSW50ZWdlcih0aGlzLnJvdyl8fCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29sKXx8dGhpcy5yb3c8LWF8fHRoaXMuY29sPC1pfHx0aGlzLnJvdz49ZXx8dGhpcy5jb2w+PXIpfWlzRXF1YWwodCl7cmV0dXJuIHQ9PT10aGlzfHx0aGlzLnJvdz09''@;'; put 'put ''PXQucm93JiZ0aGlzLmNvbD09PXQuY29sfWlzSGVhZGVyKCl7cmV0dXJuIXRoaXMuaXNDZWxsKCl9aXNDZWxsKCl7cmV0dXJuIHRoaXMucm93Pj0wJiZ0aGlzLmNvbD49MH1pc1J0bCgpe3JldHVybiBDQyhtNSx0aGlzKX1pc1NvdXRoRWFzdE9mKHQpe3JldHVybiB0aGlzLnJvdz49dC5yb3cm''@;'; put 'put ''JihDQyhtNSx0aGlzKT90aGlzLmNvbDw9dC5jb2w6dGhpcy5jb2w+PXQuY29sKX1pc05vcnRoV2VzdE9mKHQpe3JldHVybiB0aGlzLnJvdzw9dC5yb3cmJihDQyhtNSx0aGlzKT90aGlzLmNvbD49dC5jb2w6dGhpcy5jb2w8PXQuY29sKX1pc1NvdXRoV2VzdE9mKHQpe3JldHVybiB0aGlzLnJv''@;'; put 'put ''dz49dC5yb3cmJihDQyhtNSx0aGlzKT90aGlzLmNvbD49dC5jb2w6dGhpcy5jb2w8PXQuY29sKX1pc05vcnRoRWFzdE9mKHQpe3JldHVybiB0aGlzLnJvdzw9dC5yb3cmJihDQyhtNSx0aGlzKT90aGlzLmNvbDw9dC5jb2w6dGhpcy5jb2w+PXQuY29sKX1ub3JtYWxpemUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yb3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRoaXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90aGlzLmNvbDpNYXRoLm1heCh0aGlzLmNvbCwwKSx0aGlzfWFzc2lnbih0KXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0Py5yb3cpJiYodGhpcy5yb3c9''@;'; put 'put ''dC5yb3cpLE51bWJlci5pc0ludGVnZXIodD8uY29sKSYmKHRoaXMuY29sPXQuY29sKSx0IGluc3RhbmNlb2Ygd04mJmltZShtNSx0aGlzLHQuaXNSdGwoKSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgd04odGhpcy5yb3csdGhpcy5jb2wsQ0MobTUsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJu''@;'; put 'put ''e3Jvdzp0aGlzLnJvdyxjb2w6dGhpcy5jb2x9fX1jb25zdCBDTj13TjtmdW5jdGlvbiBXSihuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gaGx0KG4pe3ZhciB0PWZ1bmN0aW9uIGZsdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59''@;'; put 'put ''ZnVuY3Rpb24gR2Yobix0KXtyZXR1cm4gbi5nZXQob21lKG4sdCkpfWZ1bmN0aW9uIG9tZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIERoPW5ldyBXZWFrTWFwO2NsYXNzIFpKe2NvbnN0cnVjdG9yKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0LHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQsaT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO1dKKHRoaXMsImhpZ2hsaWdodCIsbnVsbCksV0oodGhpcywiZnJvbSIsbnVsbCksV0oodGhpcywidG8iLG51bGwpLGZ1bmN0aW9u''@;'; put 'put ''IHVsdChuLHQsZSl7KGZ1bmN0aW9uIGRsdChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuc2V0KG4sZSl9KHRoaXMsRGgsITEpLHRoaXMu''@;'; put 'put ''aGlnaGxpZ2h0PXQuY2xvbmUoKSx0aGlzLmZyb209ZS5jbG9uZSgpLHRoaXMudG89ci5jbG9uZSgpLGZ1bmN0aW9uIHBsdChuLHQsZSl7bi5zZXQob21lKG4sdCksZSl9KERoLHRoaXMsaSl9c2V0SGlnaGxpZ2h0KHQpe3JldHVybiB0aGlzLmhpZ2hsaWdodD10LmNsb25lKCksdGhpc31zZXRG''@;'; put 'put ''cm9tKHQpe3JldHVybiB0aGlzLmZyb209dC5jbG9uZSgpLHRoaXN9c2V0VG8odCl7cmV0dXJuIHRoaXMudG89dC5jbG9uZSgpLHRoaXN9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLHRoaXMuZnJvbS5ub3JtYWxpemUoKSx0aGlzLnRvLm5vcm1hbGl6ZSgp''@;'; put 'put ''LHRoaXN9aXNWYWxpZCh0KXtyZXR1cm4gdGhpcy5mcm9tLmlzVmFsaWQodCkmJnRoaXMudG8uaXNWYWxpZCh0KX1pc1NpbmdsZSgpe3JldHVybiB0aGlzLmlzU2luZ2xlQ2VsbCgpfHx0aGlzLmlzU2luZ2xlSGVhZGVyKCl9aXNTaW5nbGVDZWxsKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAm''@;'; put 'put ''JnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlzU2luZ2xlSGVhZGVyKCl7cmV0dXJuKHRoaXMuZnJvbS5yb3c8MHx8dGhpcy5mcm9tLmNvbDwwKSYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0''@;'; put 'put ''aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hKCF0aGlzLmZyb20uaXNIZWFkZXIoKXx8IXRoaXMudG8uaXNIZWFkZXIoKSl8fHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MHx8dGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwfWNvbnRhaW5zSGVh''@;'; put 'put ''ZGVycygpe3JldHVybiB0aGlzLmZyb20uaXNIZWFkZXIoKXx8dGhpcy50by5pc0hlYWRlcigpfWdldE91dGVySGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9Z2V0T3V0ZXJXaWR0''@;'; put 'put ''aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSsxfWdldEhlaWdodCgpe2lmKHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MClyZXR1cm4gMDtjb25zdCB0PU1hdGgubWF4KHRoaXMuZnJv''@;'; put 'put ''bS5yb3csMCksZT1NYXRoLm1heCh0aGlzLnRvLnJvdywwKTtyZXR1cm4gTWF0aC5tYXgodCxlKS1NYXRoLm1pbih0LGUpKzF9Z2V0V2lkdGgoKXtpZih0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDApcmV0dXJuIDA7Y29uc3QgdD1NYXRoLm1heCh0aGlzLmZyb20uY29sLDApLGU9TWF0''@;'; put 'put ''aC5tYXgodGhpcy50by5jb2wsMCk7cmV0dXJuIE1hdGgubWF4KHQsZSktTWF0aC5taW4odCxlKSsxfWdldENlbGxzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRXaWR0aCgpKnRoaXMuZ2V0SGVpZ2h0KCl9aW5jbHVkZXModCl7Y29uc3R7cm93OmUsY29sOnJ9PXQsaT10aGlzLmdldE91dGVyVG9w''@;'; put 'put ''U3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaS5yb3c8PWUmJmEucm93Pj1lJiZpLmNvbDw9ciYmYS5jb2w+PXJ9aW5jbHVkZXNSYW5nZSh0KXtyZXR1cm4gdGhpcy5pbmNsdWRlcyh0LmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMu''@;'; put 'put ''aW5jbHVkZXModC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKX1pc0VxdWFsKHQpe3JldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWluKHQuZnJvbS5yb3csdC50by5yb3cpJiZNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1h''@;'; put 'put ''dGgubWF4KHQuZnJvbS5yb3csdC50by5yb3cpJiZNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWluKHQuZnJvbS5jb2wsdC50by5jb2wpJiZNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWF4KHQuZnJvbS5jb2wsdC50by5jb2wp''@;'; put 'put ''fW92ZXJsYXBzKHQpe3JldHVybiB0LmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJnQuaXNOb3J0aFdlc3RPZih0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9aXNTb3V0aEVhc3RPZih0KXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3Ju''@;'; put 'put ''ZXIoKS5pc1NvdXRoRWFzdE9mKHQpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKHQpfWlzTm9ydGhXZXN0T2YodCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZih0KXx8dGhpcy5nZXRPdXRlckJvdHRvbVJp''@;'; put 'put ''Z2h0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZih0KX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KHQpe3JldHVybiB0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPj10LmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w8PXQu''@;'; put 'put ''Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2x8fHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbDw9dC5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPj10LmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2x9aXNPdmVy''@;'; put 'put ''bGFwcGluZ1ZlcnRpY2FsbHkodCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdz49dC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3c8PXQuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigp''@;'; put 'put ''LnJvd3x8dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdzw9dC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93Pj10LmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3d9ZXhwYW5kKHQpe2NvbnN0IGU9dGhpcy5nZXRP''@;'; put 'put ''dXRlclRvcFN0YXJ0Q29ybmVyKCkscj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuKHQucm93PGUucm93fHx0LmNvbDxlLmNvbHx8dC5yb3c+ci5yb3d8fHQuY29sPnIuY29sKSYmKHRoaXMuZnJvbT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKGUucm93LHQu''@;'; put 'put ''cm93KSxNYXRoLm1pbihlLmNvbCx0LmNvbCkpLHRoaXMudG89dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChyLnJvdyx0LnJvdyksTWF0aC5tYXgoci5jb2wsdC5jb2wpKSwhMCl9ZXhwYW5kQnlSYW5nZSh0KXtsZXQgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2lmKHRoaXMuaW5jbHVkZXNSYW5nZSh0KXx8IXRoaXMub3ZlcmxhcHModCkpcmV0dXJuITE7Y29uc3Qgcj10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxpPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxhPXRoaXMuZ2V0RGlyZWN0''@;'; put 'put ''aW9uKCksYz10LmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxtPXQuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxDPU1hdGgubWluKHIucm93LGMucm93KSxQPU1hdGgubWluKHIuY29sLGMuY29sKSxZPU1hdGgubWF4KGkucm93LG0ucm93KSxKPU1hdGgubWF4KGkuY29sLG0uY29sKSxjZT10''@;'; put 'put ''aGlzLl9jcmVhdGVDZWxsQ29vcmRzKEMsUCksZmU9dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhZLEopO3JldHVybiB0aGlzLmZyb209Y2UsdGhpcy50bz1mZSx0aGlzLnNldERpcmVjdGlvbihhKSxlJiYodGhpcy5oaWdobGlnaHQucm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVy''@;'; put 'put ''KCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYmIlctRSI9PT10aGlzLmdldEhvcml6b250YWxEaXJlY3Rp''@;'; put 'put ''b24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCkpLCEwfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmZyb20uaXNOb3J0aFdlc3RPZih0aGlzLnRvKT8iTlctU0UiOnRoaXMuZnJvbS5pc05vcnRoRWFzdE9mKHRoaXMudG8pPyJORS1TVyI6dGhpcy5mcm9tLmlzU291dGhF''@;'; put 'put ''YXN0T2YodGhpcy50byk/IlNFLU5XIjp0aGlzLmZyb20uaXNTb3V0aFdlc3RPZih0aGlzLnRvKT8iU1ctTkUiOnZvaWQgMH1zZXREaXJlY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiTlctU0UiOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCksdGhpcy5n''@;'; put 'put ''ZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCldO2JyZWFrO2Nhc2UiTkUtU1ciOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCldO2JyZWFrO2Nhc2UiU0UtTlciOlt0aGlzLmZyb20sdGhpcy50''@;'; put 'put ''b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCldO2JyZWFrO2Nhc2UiU1ctTkUiOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVy''@;'; put 'put ''KCldfX1nZXRWZXJ0aWNhbERpcmVjdGlvbigpe3JldHVyblsiTkUtU1ciLCJOVy1TRSJdLmluZGV4T2YodGhpcy5nZXREaXJlY3Rpb24oKSk+LTE/Ik4tUyI6IlMtTiJ9Z2V0SG9yaXpvbnRhbERpcmVjdGlvbigpe3JldHVyblsiTlctU0UiLCJTVy1ORSJdLmluZGV4T2YodGhpcy5nZXREaXJl''@;'; put 'put ''Y3Rpb24oKSk+LTE/IlctRSI6IkUtVyJ9ZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIik7YnJl''@;'; put 'put ''YWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIil9fWZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXRE''@;'; put 'put ''aXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIik7YnJlYWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIil9fWdldFRvcFN0YXJ0''@;'; put 'put ''Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcExlZnRDb3JuZXIoKXtyZXR1cm4gR2YoRGgsdGhpcyk/dGhp''@;'; put 'put ''cy5nZXRUb3BFbmRDb3JuZXIoKTp0aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCl9Z2V0Qm90dG9tRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNv''@;'; put 'put ''bCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIEdmKERoLHRoaXMpP3RoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbUVuZENvcm5lcigpfWdldFRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgu''@;'; put 'put ''bWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BSaWdodENvcm5lcigpe3JldHVybiBHZihEaCx0aGlzKT90aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRUb3BFbmRDb3JuZXIo''@;'; put 'put ''KX1nZXRCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21MZWZ0Q29ybmVyKCl7cmV0''@;'; put 'put ''dXJuIEdmKERoLHRoaXMpP3RoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpfWdldE91dGVyVG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRo''@;'; put 'put ''Lm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIEdmKERoLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKX1nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpe3JldHVy''@;'; put 'put ''biB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIEdmKERoLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21T''@;'; put 'put ''dGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKX1nZXRPdXRlclRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5j''@;'; put 'put ''b2wpKX1nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIEdmKERoLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKX1nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tTGVmdENvcm5lcigpe3JldHVybiBHZihEaCx0aGlzKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlckJv''@;'; put 'put ''dHRvbVN0YXJ0Q29ybmVyKCl9aXNDb3JuZXIodCl7cmV0dXJuIHQuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8dC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8dC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCkpfHx0''@;'; put 'put ''LmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKHQpe3JldHVybiB0IGluc3RhbmNlb2YgQ04mJih0LmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0Lmlz''@;'; put 'put ''RXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTp0LmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0LmlzRXF1YWwodGhpcy5nZXRPdXRlckJv''@;'; put 'put ''dHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lkIDApfWdldEJvcmRlcnNTaGFyZWRXaXRoKHQpe2lmKCF0aGlzLmluY2x1ZGVzUmFuZ2UodCkpcmV0dXJuW107Y29uc3QgZV90b3A9TWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksZV9i''@;'; put 'put ''b3R0b209TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksZV9sZWZ0PU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGVfcmlnaHQ9TWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkscl90b3A9TWF0aC5taW4odC5mcm9tLnJvdyx0LnRvLnJvdyks''@;'; put 'put ''cl9ib3R0b209TWF0aC5tYXgodC5mcm9tLnJvdyx0LnRvLnJvdykscl9sZWZ0PU1hdGgubWluKHQuZnJvbS5jb2wsdC50by5jb2wpLHJfcmlnaHQ9TWF0aC5tYXgodC5mcm9tLmNvbCx0LnRvLmNvbCksaT1bXTtyZXR1cm4gZV90b3A9PT1yX3RvcCYmaS5wdXNoKCJ0b3AiKSxlX3JpZ2h0PT09''@;'; put 'put ''cl9yaWdodCYmaS5wdXNoKEdmKERoLHRoaXMpPyJsZWZ0IjoicmlnaHQiKSxlX2JvdHRvbT09PXJfYm90dG9tJiZpLnB1c2goImJvdHRvbSIpLGVfbGVmdD09PXJfbGVmdCYmaS5wdXNoKEdmKERoLHRoaXMpPyJyaWdodCI6ImxlZnQiKSxpfWdldElubmVyKCl7Y29uc3QgdD10aGlzLmdldE91''@;'; put 'put ''dGVyVG9wU3RhcnRDb3JuZXIoKSxlPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxyPVtdO2ZvcihsZXQgaT10LnJvdztpPD1lLnJvdztpKyspZm9yKGxldCBhPXQuY29sO2E8PWUuY29sO2ErKykodGhpcy5mcm9tLnJvdyE9PWl8fHRoaXMuZnJvbS5jb2whPT1hKSYmKHRoaXMudG8u''@;'; put 'put ''cm93IT09aXx8dGhpcy50by5jb2whPT1hKSYmci5wdXNoKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaSxhKSk7cmV0dXJuIHJ9Z2V0QWxsKCl7Y29uc3QgdD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxlPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxyPVtdO2ZvcihsZXQg''@;'; put 'put ''aT10LnJvdztpPD1lLnJvdztpKyspZm9yKGxldCBhPXQuY29sO2E8PWUuY29sO2ErKylyLnB1c2godC5yb3c9PT1pJiZ0LmNvbD09PWE/dDplLnJvdz09PWkmJmUuY29sPT09YT9lOnRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaSxhKSk7cmV0dXJuIHJ9Zm9yQWxsKHQpe2NvbnN0IGU9dGhpcy5n''@;'; put 'put ''ZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkscj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBpPWUucm93O2k8PXIucm93O2krKylmb3IobGV0IGE9ZS5jb2w7YTw9ci5jb2w7YSsrKWlmKCExPT09dChpLGEpKXJldHVybn1jbG9uZSgpe3JldHVybiBuZXcgWkoodGhpcy5o''@;'; put 'put ''aWdobGlnaHQsdGhpcy5mcm9tLHRoaXMudG8sR2YoRGgsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue2Zyb206dGhpcy5mcm9tLnRvT2JqZWN0KCksdG86dGhpcy50by50b09iamVjdCgpfX1fY3JlYXRlQ2VsbENvb3Jkcyh0LGUpe3JldHVybiBuZXcgQ04odCxlLEdmKERoLHRoaXMpKX19Y29u''@;'; put 'put ''c3QgU049Wko7ZnVuY3Rpb24gJGYobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIGdsdChuKXt2YXIgdD1mdW5jdGlvbiBtbHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNh''@;'; put 'put ''bGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmlu''@;'; put 'put ''ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIFlKe2dldCBldmVudE1hbmFnZXIoKXtyZXR1''@;'; put 'put ''cm4gbmV3IFpmKHRoaXMpfWNvbnN0cnVjdG9yKHQsZSl7JGYodGhpcywid3RUYWJsZSIsdm9pZCAwKSwkZih0aGlzLCJ3dFNjcm9sbCIsdm9pZCAwKSwkZih0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLCRmKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksJGYodGhpcywic2VsZWN0aW9uTWFu''@;'; put 'put ''YWdlciIsdm9pZCAwKSwkZih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLCRmKHRoaXMsImd1aWQiLGB3dF8ke0txKCl9YCksJGYodGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksJGYodGhpcywiZHJhd24iLCExKSwkZih0aGlzLCJhY3RpdmVPdmVybGF5TmFtZSIsIm1hc3RlciIpLCRmKHRoaXMs''@;'; put 'put ''ImRvbUJpbmRpbmdzIix2b2lkIDApLCRmKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5kb21CaW5kaW5ncz17cm9vdFRhYmxlOnQscm9vdERvY3VtZW50OnQub3duZXJEb2N1bWVudCxyb290V2luZG93OnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld30sdGhpcy53dFNldHRpbmdz''@;'; put 'put ''PWUsdGhpcy53dFNjcm9sbD1uZXcgYWx0KHRoaXMuY3JlYXRlU2Nyb2xsRGFvKCkpfWZpbmRPcmlnaW5hbEhlYWRlcnMoKXtjb25zdCB0PVtdO2lmKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzLmxlbmd0aCYmdGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rl''@;'; put 'put ''cy5sZW5ndGgpe2ZvcihsZXQgZT0wLHI9dGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGg7ZTxyO2UrKyl0LnB1c2godGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1tlXS5pbm5lckhUTUwpO3RoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJjb2x1bW5IZWFkZXJzIixbZnVuY3Rpb24oZSxyKXtRNihyLHRbZV0pfV0pfX1jcmVhdGVDZWxsQ29vcmRzKHQsZSl7cmV0dXJuIG5ldyBDTih0LGUsdGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInJ0bE1vZGUiKSl9Y3JlYXRlQ2VsbFJhbmdlKHQsZSxyKXtyZXR1cm4gbmV3IFNOKHQsZSxyLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWRyYXcoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRz''@;'; put 'put ''WzBdO3JldHVybiB0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMSwhdGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpfHxzNWUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSk/dGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITA6dGhpcy53dFRhYmxlLmRyYXcodCksdGhpc31nZXRDZWxsKHQp''@;'; put 'put ''e2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpcmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKHQpO2NvbnN0IHI9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGk9dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoImZpeGVkUm93c1RvcCIpLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYodC5yb3c8aSYmdC5jb2w8YylyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRv''@;'; put 'put ''cElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwodCk7aWYodC5yb3c8aSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKHQpO2lmKHQuY29sPGMmJnQucm93Pj1yLWEpe2lmKHRoaXMud3RPdmVybGF5cy5i''@;'; put 'put ''b3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKHQpfWVs''@;'; put 'put ''c2V7aWYodC5jb2w8YylyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwodCk7aWYodC5yb3c8ciYmdC5yb3c+PXItYSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5''@;'; put 'put ''LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwodCl9cmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKHQpfXNjcm9sbFZpZXdwb3J0KHQsZSxyKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydCh0LGUscil9''@;'; put 'put ''c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkodCxlKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseSh0LGUpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseSh0LGUpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseSh0LGUp''@;'; put 'put ''fWdldFZpZXdwb3J0KCl7cmV0dXJuW3RoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCldfWRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLnd0T3ZlcmxheXMuZGVzdHJveSgpLHRoaXMud3RFdmVudC5kZXN0cm95KCl9Y3JlYXRlU2Nyb2xsRGFvKCl7Y29uc3QgdD10aGlzO3JldHVybntnZXQgZHJhd24oKXtyZXR1cm4gdC5kcmF3bn0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gdC53dE92ZXJsYXlzLnRvcE92''@;'; put 'put ''ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gdC53dFRhYmxlfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiB0Lnd0Vmlld3BvcnR9LGdldCB3dFNldHRpbmdzKCl7cmV0dXJu''@;'; put 'put ''IHQud3RTZXR0aW5nc30sZ2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gdC5kb21CaW5kaW5ncy5yb290V2luZG93fSxnZXQgdG90YWxSb3dzKCl7cmV0dXJuIHQud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKX0sZ2V0IHRvdGFsQ29sdW1ucygpe3JldHVybiB0Lnd0U2V0dGluZ3Mu''@;'; put 'put ''Z2V0U2V0dGluZygidG90YWxDb2x1bW5zIil9LGdldCBmaXhlZFJvd3NUb3AoKXtyZXR1cm4gdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfSxnZXQgZml4ZWRSb3dzQm90dG9tKCl7cmV0dXJuIHQud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20i''@;'; put 'put ''KX0sZ2V0IGZpeGVkQ29sdW1uc1N0YXJ0KCl7cmV0dXJuIHQud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpfX19Z2V0VGFibGVEYW8oKXtjb25zdCB0PXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gdH0sZ2V0IHBhcmVudFRhYmxlT2Zmc2V0KCl7cmV0dXJu''@;'; put 'put ''IHQuY2xvbmVTb3VyY2Uud3RUYWJsZS50YWJsZU9mZnNldH0sZ2V0IGNsb25lU291cmNlKCl7cmV0dXJuIHQuY2xvbmVTb3VyY2V9LGdldCB3b3Jrc3BhY2VXaWR0aCgpe3JldHVybiB0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gdC53''@;'; put 'put ''dFZpZXdwb3J0fSxnZXQgd3RPdmVybGF5cygpe3JldHVybiB0Lnd0T3ZlcmxheXN9LGdldCBzZWxlY3Rpb25NYW5hZ2VyKCl7cmV0dXJuIHQuc2VsZWN0aW9uTWFuYWdlcn0sZ2V0IGRyYXduKCl7cmV0dXJuIHQuZHJhd259LHNldCBkcmF3bihlKXt0LmRyYXduPWV9LGdldCB3dFRhYmxlKCl7''@;'; put 'put ''cmV0dXJuIHQud3RUYWJsZX0sZ2V0IHN0YXJ0Q29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgc3RhcnRDb2x1bW5WaXNpYmxlKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1''@;'; put 'put ''bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gdC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IGVuZENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5j''@;'; put 'put ''b2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5WaXNpYmxlKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5kQ29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiB0Lnd0Vmlld3BvcnQu''@;'; put 'put ''Y29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGNvdW50Q29sdW1uc1JlbmRlcmVkKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Q29sdW1uc1Zpc2libGUoKXtyZXR1cm4gdC53dFZpZXdw''@;'; put 'put ''b3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH0sZ2V0IHN0YXJ0Um93UmVuZGVyZWQoKXtyZXR1cm4gdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgc3RhcnRSb3dWaXNpYmxlKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNh''@;'; put 'put ''bGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1BhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gdC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IGVuZFJvd1JlbmRlcmVkKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2Fs''@;'; put 'put ''Y3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dWaXNpYmxlKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fSxnZXQgZW5kUm93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiB0Lnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9y''@;'; put 'put ''LmVuZFJvd30sZ2V0IGNvdW50Um93c1JlbmRlcmVkKCl7cmV0dXJuIHQud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Um93c1Zpc2libGUoKXtyZXR1cm4gdC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvbHVtbkhl''@;'; put 'put ''YWRlcnMoKXtyZXR1cm4gdC53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKX0sZ2V0IHJvd0hlYWRlcnMoKXtyZXR1cm4gdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKX19fX1mdW5jdGlvbiBzbWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIHZsdChu''@;'; put 'put ''KXt2YXIgdD1mdW5jdGlvbiB5bHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIF9sdCBleHRlbmRzIFlKe2NvbnN0cnVjdG9yKHQsZSxyKXtzdXBlcih0LGUpLHNtZSh0aGlzLCJjbG9uZVNvdXJjZSIsdm9pZCAwKSxz''@;'; put 'put ''bWUodGhpcywiY2xvbmVPdmVybGF5Iix2b2lkIDApO2NvbnN0IGk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy5jbG9uZVNvdXJjZT1yLnNvdXJjZSx0aGlzLmNsb25lT3ZlcmxheT1yLm92ZXJsYXksdGhpcy53dFRhYmxlPXRoaXMuY2xvbmVPdmVybGF5''@;'; put 'put ''LmNyZWF0ZVRhYmxlKHRoaXMuZ2V0VGFibGVEYW8oKSxpLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9ci52aWV3cG9ydCx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9ci5zZWxlY3Rpb25NYW5hZ2VyLHRoaXMud3RFdmVudD1uZXcgQjVlKGksdGhpcy5k''@;'; put 'put ''b21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9uTWFuYWdlcixyLmV2ZW50KSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX19Y2xhc3MgbGt7Y29uc3RydWN0b3IodCxlLHIsaSxhKXsoZnVuY3Rpb24gYmx0KG4s''@;'; put 'put ''dCxlKXtyZXR1cm4odD1mdW5jdGlvbiB3bHQobil7dmFyIHQ9ZnVuY3Rpb24gQ2x0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0pKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLHc0KHRoaXMsIndvdCIsdCx7d3JpdGFibGU6ITF9''@;'; put 'put ''KSx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy5mYWNhZGVHZXR0ZXI9ZSx0aGlzLnd0U2V0dGluZ3M9aTtjb25zdHtUQUJMRTpjLGhpZGVyOm0sc3ByZWFkZXI6Qyxob2xkZXI6UCx3dFJvb3RFbGVtZW50Oll9PXRoaXMud290Lnd0VGFibGU7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLnR5''@;'; put 'put ''cGU9cix0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT1jLHRoaXMuaGlkZXI9bSx0aGlzLnNwcmVhZGVyPUMsdGhpcy5ob2xkZXI9UCx0aGlzLnd0Um9vdEVsZW1lbnQ9WSx0aGlzLnRyaW1taW5nQ29udGFpbmVyPWdDKHRoaXMuaGlkZXIucGFyZW50Tm9k''@;'; put 'put ''ZS5wYXJlbnROb2RlKSx0aGlzLm5lZWRGdWxsUmVuZGVyPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpLHRoaXMuY2xvbmU9dGhpcy5tYWtlQ2xvbmUoKX1oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKXtyZXR1cm4gdGhpcy5uZWVkRnVsbFJlbmRlciE9PXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgp''@;'; put 'put ''fXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcodCl7ImJlZm9yZSI9PT10JiZ0aGlzLnNob3VsZEJlUmVuZGVyZWQoKT90aGlzLm5lZWRGdWxsUmVuZGVyPSEwOiJhZnRlciI9PT10JiYhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCkmJih0aGlzLm5lZWRGdWxsUmVuZGVyPSExKX1zaG91bGRCZVJlbmRl''@;'; put 'put ''cmVkKCl7cmV0dXJuITB9dXBkYXRlVHJpbW1pbmdDb250YWluZXIoKXt0aGlzLnRyaW1taW5nQ29udGFpbmVyPWdDKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKXtjb25zdHt3dFRhYmxlOnR9PXRoaXMud290LHtyb290V2lu''@;'; put 'put ''ZG93OmV9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWUuZ2V0Q29tcHV0ZWRTdHlsZSh0Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90aGlzLndvdC53dFRhYmxlLmhvbGRl''@;'; put 'put ''cjpYQSh0LlRBQkxFKX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih0LGUscil7aWYoITE9PT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRhaW5zKHQpKXJldHVybiB2b2lkIG9zKGBUaGUgcHJvdmlkZWQgZWxlbWVudCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgJHt0aGlzLnR5cGV9IG92''@;'; put 'put ''ZXJsYXlgKTtjb25zdCBpPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csYT1yPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGM9ZTx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4''@;'; put 'put ''ZWRSb3dzVG9wIiksbT1lPj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLEM9dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLFA9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBv''@;'; put 'put ''c2l0aW9uKEMpLHRvcDpDLm9mZnNldFRvcH0sWT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24odCksdG9wOnQub2Zmc2V0VG9wfTtsZXQgSj1udWxsO3JldHVybiBKPWk/dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyhjLGEsWSxQKTp0aGlzLmdl''@;'; put 'put ''dFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGMsbSxhLFksUCksSn1nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24odCl7cmV0dXJuIHRoaXMuaXNSdGwoKT90Lm9mZnNldFBhcmVudC5vZmZzZXRXaWR0aC10Lm9mZnNldExlZnQtdC5vZmZzZXRXaWR0aDp0Lm9mZnNldExlZnR9Z2V0''@;'; put 'put ''UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3codCxlLHIsaSl7Y29uc3QgYT10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGM9MCxtPTA7aWYoZSl7bGV0IEM9YS5sZWZ0O3RoaXMuaXNSdGwoKSYmKEM9dGhpcy5kb21CaW5k''@;'; put 'put ''aW5ncy5yb290V2luZG93LmlubmVyV2lkdGgtKGEubGVmdCthLndpZHRoK2d1KCkpKSxjPUM8PTA/LTEqQzowfWVsc2UgYz1pLnN0YXJ0O3JldHVybiBtPXQ/dGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1hLnRvcDppLnRvcCx7c3RhcnQ6ci5z''@;'; put 'put ''dGFydCtjLHRvcDpyLnRvcCttfX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcih0LGUscixpLGEpe2NvbnN0IGNfaG9yaXpvbnRhbD10aGlzLndvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLGNfdmVydGljYWw9dGhpcy53b3Qu''@;'; put 'put ''d3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7bGV0IG09MCxDPTA7aWYocnx8KG09Y19ob3Jpem9udGFsLWEuc3RhcnQpLGUpe2NvbnN0IFA9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0M9LTEqdGhpcy5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtQLnRvcH1lbHNlIHR8fChDPWNfdmVydGljYWwtYS50b3ApO3JldHVybntzdGFydDppLnN0YXJ0LW0sdG9wOmkudG9wLUN9fW1ha2VDbG9uZSgpe2lmKC0xPT09cTVlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoYENsb25lIHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOnQsd3RTZXR0aW5nczplfT10aGlzLndvdCx7cm9vdERvY3VtZW50OnIscm9vdFdpbmRvdzppfT10aGlzLmRvbUJpbmRpbmdzLGE9ci5jcmVhdGVFbGVtZW50KCJkaXYi''@;'; put 'put ''KSxjPXIuY3JlYXRlRWxlbWVudCgidGFibGUiKSxtPXQud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2EuY2xhc3NOYW1lPWAke1lzdC5nZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxlYCxhLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLGEuc3R5bGUucG9z''@;'; put 'put ''aXRpb249ImFic29sdXRlIixhLnN0eWxlLnRvcD0wLGEuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMuaXNSdGwoKT9hLnN0eWxlLnJpZ2h0PTA6YS5zdHlsZS5sZWZ0PTAsZS5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZaYShhLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGMuY2xh''@;'; put 'put ''c3NOYW1lPXQuVEFCTEUuY2xhc3NOYW1lLHQuVEFCTEUuZ2V0QXR0cmlidXRlKCJyb2xlIikmJmMuc2V0QXR0cmlidXRlKCJyb2xlIix0LlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpKSxhLmFwcGVuZENoaWxkKGMpLG0uYXBwZW5kQ2hpbGQoYSk7Y29uc3QgUD10aGlzLnd0U2V0dGluZ3Mu''@;'; put 'put ''Z2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1QfHwiaG9yaXpvbnRhbCI9PT1QJiZ0aGlzLnR5cGU9PT1Gdnx8InZlcnRpY2FsIj09PVAmJnRoaXMudHlwZT09PUh2P2k6ImhpZGRlbiI9PT1pLmdldENvbXB1''@;'; put 'put ''dGVkU3R5bGUobSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90LmhvbGRlcjpYQSh0LlRBQkxFKSxuZXcgX2x0KGMsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RF''@;'; put 'put ''dmVudCxzZWxlY3Rpb25NYW5hZ2VyOnRoaXMud290LnNlbGVjdGlvbk1hbmFnZXJ9KX1yZWZyZXNoKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLm5lZWRGdWxsUmVuZGVyKXtjb25zdCBlPXRoaXMuY2xvbmUu''@;'; put 'put ''Y2xvbmVTb3VyY2U7ZS5hY3RpdmVPdmVybGF5TmFtZT10aGlzLmNsb25lLnd0VGFibGUubmFtZSx0aGlzLmNsb25lLmRyYXcodCksZS5hY3RpdmVPdmVybGF5TmFtZT0ibWFzdGVyIn19cmVzZXQoKXtjb25zdCB0PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7W3Quc3R5bGUsdGhpcy5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLmhpZGVyLnN0eWxlLHQucGFyZW50Tm9kZS5zdHlsZV0uZm9yRWFjaChjPT57Yy53aWR0aD0iIixjLmhlaWdodD0iIn0pfWlzUnRsKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIil9ZGVzdHJveSgpe3RoaXMuY2xvbmUuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LmRlc3Ryb3koKX19Y29uc3QgR0o9bj0+e2NvbnN0IHQ9bi53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKTtpZih0LmlzQ2xhc3NpY1RoZW1lKCkpcmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyV2lkdGg6MSxib3JkZXJTdHlsZToic29s''@;'; put 'put ''aWQiLGJvcmRlckNvbG9yOiIjRkZGIn0pO2NvbnN0IGU9dC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLXNpemUiKSxyPXQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItd2lkdGgiKSxpPXQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRv''@;'; put 'put ''ZmlsbC1ib3JkZXItY29sb3IiKTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6ZSxoZWlnaHQ6ZSxib3JkZXJXaWR0aDpyLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6aX0pfTtjbGFzcyBFbHQgZXh0ZW5kcyBsa3tjb25zdHJ1Y3Rvcih0LGUscixpKXtzdXBlcih0LGUsRnYs''@;'; put 'put ''cixpKSxmdW5jdGlvbiBTbHQobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIE1sdChuKXt2YXIgdD1mdW5jdGlvbiB4bHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwo''@;'; put 'put ''bix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NUb3AiLC0xKSx0aGlz''@;'; put 'put ''LmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gbmV3IEpzdCgu''@;'; put 'put ''Li5lKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXRoaXMud290''@;'; put 'put ''Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgdD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6ZX09dGhpcy5kb21CaW5kaW5ncyxyPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQg''@;'; put 'put ''aT0wLGE9ITE7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWV8fHImJiJ2ZXJ0aWNhbCI9PT1yKWk9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFFBKHQpO2Vsc2V7Y29uc3R7d3RUYWJsZTptfT10aGlzLndvdCxDPW0uaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YT1NYXRoLmNl''@;'; put 'put ''aWwoQy5ib3R0b20pPT09dC5vZmZzZXRIZWlnaHQsaT10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxjTih0LCIwcHgiLGAke2l9cHhgKX1jb25zdCBjPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGksYSk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksY31zZXRTY3Jv''@;'; put 'put ''bGxQb3NpdGlvbih0KXtjb25zdHtyb290V2luZG93OmV9PXRoaXMuZG9tQmluZGluZ3Mscj10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2xldCBpPSExO2lmKHI9PT1lJiZ0IT09ZS5zY3JvbGxZKXtjb25zdCBhPWUuc2Nyb2xsWTtlLnNjcm9sbFRvKHNOKGUpLHQpLGk9YSE9PWUu''@;'; put 'put ''c2Nyb2xsWX1lbHNlIGlmKHQhPT1yLnNjcm9sbFRvcCl7Y29uc3QgYT1yLnNjcm9sbFRvcDtyLnNjcm9sbFRvcD10LGk9YSE9PXIuc2Nyb2xsVG9wfXJldHVybiBpfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNp''@;'; put 'put ''emVzKHQsZSl7Y29uc3Qgcj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgaT10LGE9MDtmb3IoO2k8ZTspe2NvbnN0IGM9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaSk7YSs9dm9pZCAwPT09Yz9yOmMs''@;'; put 'put ''aSs9MX1yZXR1cm4gYX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50''@;'; put 'put ''U2l6ZSgpe2NvbnN0e3d0VGFibGU6dCx3dFZpZXdwb3J0OmV9PXRoaXMud290LHtyb290RG9jdW1lbnQ6cixyb290V2luZG93Oml9PXRoaXMuZG9tQmluZGluZ3MsYz10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu''@;'; put 'put ''ZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWl8fCJob3Jpem9udGFsIj09PW0pe2xldCBQPWUuZ2V0V29ya3NwYWNlV2lkdGgoKTtlLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihQLT1ndShyKSksUD1NYXRoLm1pbihQLHQud3RSb290RWxlbWVudC5zY3Jv''@;'; put 'put ''bGxXaWR0aCksYy53aWR0aD1gJHtQfXB4YH1lbHNlIGMud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD1jLndpZHRoO2xldCBDPUh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7dC5oYXNEZWZpbmVkU2l6ZSgpfHwoQz0wKSxjLmhlaWdodD1gJHtDfXB4''@;'; put 'put ''YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOnR9PXRoaXMuY2xvbmUud3RUYWJsZSxlPUdKKHRoaXMud290KSxyPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChlLmhlaWdodCwxMCkvMjowO3RoaXMuY2xvbmUud3RU''@;'; put 'put ''YWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLHQuc3R5bGUud2lkdGg9dC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLHQuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KHQucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK3J9cHhgfWFwcGx5VG9ET00oKXtjb25z''@;'; put 'put ''dCB0PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0''@;'; put 'put ''LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUu''@;'; put 'put ''Ym90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IHQ9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjplfT10aGlzLmNsb25lLnd0VGFibGU7ZS5zdHlsZVt0XT0ibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKHQsZSl7Y29uc3R7d290OnIsd3RTZXR0''@;'; put 'put ''aW5nczppfT10aGlzLGM9KHIuY2xvbmVTb3VyY2U/ci5jbG9uZVNvdXJjZTpyKS53dFRhYmxlLmhvbGRlcixtPWkuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLFA9MD09PWkuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikmJm0ubGVuZ3RoPjAmJiF2byhjLnBhcmVudE5vZGUsImlubmVy''@;'; put 'put ''Qm9yZGVyVG9wIik/MTowO2xldCBZPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxKPTA7aWYoZSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQodCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoZT0hMSksZSYmYy5vZmZzZXRIZWlnaHQhPT1jLmNs''@;'; put 'put ''aWVudEhlaWdodCYmKEo9Z3UodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxlKXtjb25zdCBjZT1pLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGZlPWkuZ2V0U2V0dGluZygidG90YWxSb3dzIik7WSs9dGhpcy5zdW1DZWxsU2l6ZXMoMCx0KzEpLFktPXIud3RWaWV3cG9y''@;'; put 'put ''dC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKGZlLWNlLGZlKSxZKz0xLFkrPVB9ZWxzZSBZKz10aGlzLnN1bUNlbGxTaXplcyhpLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLHQpO3JldHVybiBZKz1KLGw1ZSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50''@;'; put 'put ''KT09PVktUCYmUD4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVyVmVydGljYWxseUJ5KFApLHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24oWSl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGlu''@;'; put 'put ''Z3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsTih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0''@;'; put 'put ''e3Jvb3RXaW5kb3c6dH09dGhpcy5kb21CaW5kaW5ncyxlPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgcj0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT10JiYoIWV8fCJ2ZXJ0aWNhbCIhPT1lKSl7Y29uc3QgYz10aGlzLndvdC53dFRhYmxl''@;'; put 'put ''LmdldFRvdGFsSGVpZ2h0KCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7cj1NYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLHI+YyYmKHI9MCl9cmV0dXJuIHJ9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0''@;'; put 'put ''aW9uKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7d3RTZXR0aW5nczpyfT10aGlzLGk9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxhPXIuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksYz0i''@;'; put 'put ''aG9yaXpvbnRhbCI9PT1yLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2E/SGEoaSwiZW1wdHlDb2x1bW5zIik6dGkoaSwiZW1wdHlDb2x1bW5zIik7bGV0IG09ITE7aWYoIWUmJiFjKXtjb25zdCBDPXIuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksUD10aGlzLmNhY2hlZEZpeGVk''@;'; put 'put ''Um93c1RvcCE9PUMsWT1yLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtpZigoUHx8MD09PUMpJiZZLmxlbmd0aD4wKXtjb25zdCBKPXZvKGksImlubmVyQm9yZGVyVG9wIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9ci5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSx0fHwwPT09ci5n''@;'; put 'put ''ZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8odGkoaSwiaW5uZXJCb3JkZXJUb3AiKSxtPSFKKTooSGEoaSwiaW5uZXJCb3JkZXJUb3AiKSxtPUopfX1yZXR1cm4gbX19Y29uc3QgbG1lPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3Qgbj10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk7cmV0''@;'; put 'put ''dXJuIDA9PT1uPy0xOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1ufSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVu''@;'; put 'put ''ZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVk''@;'; put 'put ''Um93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSx0aGlzLnd0U2V0dGluZ3Mu''@;'; put 'put ''Z2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50OigpPT4wfTt3NChsbWUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzQm90dG9tIix7d3JpdGFi''@;'; put 'put ''bGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IGNtZT1sbWU7Y2xhc3MgJEogZXh0ZW5kcyB3Q3tjb25zdHJ1Y3Rvcih0LGUscixpKXtzdXBlcih0LGUscixpLFQ0KX19cGwoJEosY21lKSxwbCgkSix6Sik7Y29uc3QgQWx0PSRKO2NsYXNzIFJsdCBleHRlbmRzIGxre2NvbnN0cnVjdG9yKHQs''@;'; put 'put ''ZSxyLGkpe3N1cGVyKHQsZSxUNCxyLGkpLGZ1bmN0aW9uIGtsdChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRGx0KG4pe3ZhciB0PWZ1bmN0aW9uIElsdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KHRoaXMsImNhY2hlZEZp''@;'; put 'put ''eGVkUm93c0JvdHRvbSIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09''@;'; put 'put ''YXJndW1lbnRzW3JdO3JldHVybiBuZXcgQWx0KC4uLmUpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRo''@;'; put 'put ''aXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93OnR9PXRoaXMuZG9tQmluZGluZ3MsZT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7ZS5zdHlsZS50b3A9IiI7bGV0IHI9''@;'; put 'put ''MDtjb25zdCBpPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09dHx8aSYmInZlcnRpY2FsIj09PWk/KHI9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKSk6KHI9dGhpcy5n''@;'; put 'put ''ZXRPdmVybGF5T2Zmc2V0KCksZS5zdHlsZS5ib3R0b209YCR7cn1weGApO2NvbnN0IGE9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24ocik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksYX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6dCx3dFZpZXdw''@;'; put 'put ''b3J0OmV9PXRoaXMud290LHtyb290RG9jdW1lbnQ6cn09dGhpcy5kb21CaW5kaW5ncyxpPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgYT0wO2UuaGFzVmVydGljYWxTY3JvbGwoKXx8KGErPWUuZ2V0V29ya3NwYWNlSGVpZ2h0KCktdC5nZXRUb3RhbEhlaWdodCgp''@;'; put 'put ''KSxlLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmUuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoYSs9Z3UocikpLGkuc3R5bGUuYm90dG9tPWAke2F9cHhgfXNldFNjcm9sbFBvc2l0aW9uKHQpe2NvbnN0e3Jvb3RXaW5kb3c6ZX09dGhpcy5kb21CaW5kaW5ncyxyPXRoaXMubWFpblRhYmxlU2Nyb2xs''@;'; put 'put ''YWJsZUVsZW1lbnQ7bGV0IGk9ITE7aWYocj09PWUmJnQhPT1lLnNjcm9sbFkpe2NvbnN0IGE9ZS5zY3JvbGxZO2Uuc2Nyb2xsVG8oc04oZSksdG9wKSxpPWEhPT1lLnNjcm9sbFl9ZWxzZSBpZih0IT09ci5zY3JvbGxUb3Ape2NvbnN0IGE9ci5zY3JvbGxUb3A7ci5zY3JvbGxUb3A9dCxpPWEh''@;'; put 'put ''PT1yLnNjcm9sbFRvcH1yZXR1cm4gaX1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyh0LGUpe2NvbnN0e3d0VGFibGU6cix3dFNldHRpbmdzOml9PXRoaXMud290LGE9aS5nZXRTZXR0aW5nKCJzdHlsZXNI''@;'; put 'put ''YW5kbGVyIikuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBjPXQsbT0wO2Zvcig7YzxlOyl7Y29uc3QgQz1yLmdldFJvd0hlaWdodChjKTttKz12b2lkIDA9PT1DP2E6QyxjKz0xfXJldHVybiBtfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0''@;'; put 'put ''aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTp0LHd0Vmlld3BvcnQ6ZX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpyLHJvb3RX''@;'; put 'put ''aW5kb3c6aX09dGhpcy5kb21CaW5kaW5ncyxjPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxtPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aXx8Imhvcml6b250YWwiPT09''@;'; put 'put ''bSl7bGV0IFA9ZS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2UuaGFzVmVydGljYWxTY3JvbGwoKSYmKFAtPWd1KHIpKSxQPU1hdGgubWluKFAsdC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSxjLndpZHRoPWAke1B9cHhgfWVsc2UgYy53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVy''@;'; put 'put ''LnN0eWxlLndpZHRoPWMud2lkdGg7bGV0IEM9SHUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt0Lmhhc0RlZmluZWRTaXplKCl8fChDPTApLGMuaGVpZ2h0PWAke0N9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6dH09dGhpcy5jbG9uZS53dFRhYmxlO3RoaXMu''@;'; put 'put ''Y2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLHQuc3R5bGUud2lkdGg9dC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLHQuc3R5bGUuaGVpZ2h0PXQucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9YXBwbHlUb0RPTSgpe2NvbnN0IHQ9dGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNh''@;'; put 'put ''bGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09dCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhp''@;'; put 'put ''cy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgdD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmV9PXRoaXMuY2xvbmUud3RUYWJsZTtlLnN0eWxlW3RdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53''@;'; put 'put ''b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8odCxlKXtsZXQgcj10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0''@;'; put 'put ''KCk7Y29uc3QgYT0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCBjPTA7ZSYmYS5vZmZzZXRIZWlnaHQhPT1hLmNsaWVudEhlaWdodCYmKGM9Z3UodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxlPyhy''@;'; put 'put ''Kz10aGlzLnN1bUNlbGxTaXplcygwLHQrMSksci09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLHIrPTEpOnIrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx0KSxyKz1jLHRoaXMuc2V0U2Nyb2xs''@;'; put 'put ''UG9zaXRpb24ocil9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVy''@;'; put 'put ''biBsTih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6dH09dGhpcy5kb21CaW5kaW5ncyxlPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZs''@;'; put 'put ''b3ciKTtsZXQgcj0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT10JiYoIWV8fCJ2ZXJ0aWNhbCIhPT1lKSl7Y29uc3QgaT10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksYz1pLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLG09dGhpcy5kb21CaW5kaW5n''@;'; put 'put ''cy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtyPU1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktbStpLDApLHI+YyYmKHI9MCl9cmV0dXJuIHJ9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKHQp''@;'; put 'put ''e2NvbnN0IGU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHI9dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20hPT1lLGk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtsZXQgYT0hMTtpZigocnx8MD09PWUpJiZpLmxlbmd0''@;'; put 'put ''aD4wKXtjb25zdCBjPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsbT12byhjLCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx0fHwwPT09dGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyh0aShjLCJpbm5lckJvcmRlckJvdHRvbSIpLGE9IW0pOihIYShjLCJpbm5lckJvcmRlckJvdHRvbSIpLGE9bSl9cmV0dXJuIGF9fWNvbnN0IHVtZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNzT2Jq''@;'; put 'put ''ZWN0LnN0YXJ0Um93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93VmlzaWJsZTtyZXR1cm4gbnVsbD09PW4/LTE6bn0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7Y29u''@;'; put 'put ''c3Qgbj10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBuPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09PW4/LTE6bn0sZ2V0''@;'; put 'put ''TGFzdFZpc2libGVSb3coKXtjb25zdCBuPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09bj8tMTpufSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IG49dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1BhcnRpYWxseVZpc2libGU7''@;'; put 'put ''cmV0dXJuIG51bGw9PT1uPy0xOm59LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NSZW5kZXJlZH0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRSb3dzVmlzaWJsZX0sZ2V0''@;'; put 'put ''Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O3c0KHVtZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRSb3dzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IGRtZT11bWUsaG1lPXtnZXRGaXJz''@;'; put 'put ''dFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFz''@;'; put 'put ''dFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm93SGVhZGVycy5sZW5ndGh9''@;'; put 'put ''fTt3NChobWUsIk1JWElOX05BTUUiLCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgS0o9aG1lO2NsYXNzIFhKIGV4dGVuZHMgd0N7Y29uc3RydWN0b3IodCxlLHIsaSl7c3VwZXIodCxlLHIsaSxIdil9fXBsKFhKLGRtZSkscGwoWEosS0op''@;'; put 'put ''O2NvbnN0IFBsdD1YSjtjbGFzcyBGbHQgZXh0ZW5kcyBsa3tjb25zdHJ1Y3Rvcih0LGUscixpKXtzdXBlcih0LGUsSHYscixpKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO3JldHVy''@;'; put 'put ''biBuZXcgUGx0KC4uLmUpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6dH09dGhpcy53b3Q7aWYoIXRoaXMubmVlZEZ1''@;'; put 'put ''bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXQuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzplfT10aGlzLmRvbUJpbmRpbmdzLHI9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGk9dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBhPTA7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWV8fGkmJiJob3Jpem9udGFsIj09PWk/KGE9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFFBKHIpKTooYT10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpLGNO''@;'; put 'put ''KHIsYCR7YX1weGAsIjBweCIpKTtjb25zdCBjPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGEpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLGN9c2V0U2Nyb2xsUG9zaXRpb24odCl7Y29uc3R7cm9vdFdpbmRvdzplfT10aGlzLmRvbUJpbmRpbmdzO2xldCByPSEx''@;'; put 'put ''O3RoaXMuaXNSdGwoKSYmKHQ9LXQpO2NvbnN0IGk9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtpZihpPT09ZSYmdCE9PWUuc2Nyb2xsWCl7Y29uc3QgYT1lLnNjcm9sbFg7ZS5zY3JvbGxUbyh0LHJKKGUpKSxyPWEhPT1lLnNjcm9sbFh9ZWxzZSBpZih0IT09aS5zY3JvbGxMZWZ0''@;'; put 'put ''KXtjb25zdCBhPWkuc2Nyb2xsTGVmdDtpLnNjcm9sbExlZnQ9dCxyPWEhPT1pLnNjcm9sbExlZnR9cmV0dXJuIHJ9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVzKHQsZSl7Y29uc3Qgcj10aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7bGV0IGk9dCxhPTA7Zm9yKDtpPGU7KWErPXRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaSl8fHIsaSs9MTtyZXR1cm4gYX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCks''@;'; put 'put ''dGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6dCx3dFZpZXdwb3J0OmV9PXRoaXMud290LHtyb290RG9jdW1lbnQ6cixyb290''@;'; put 'put ''V2luZG93Oml9PXRoaXMuZG9tQmluZGluZ3MsYz10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWl8fCJ2ZXJ0aWNhbCI9PT1t''@;'; put 'put ''KXtsZXQgUD1lLmdldFdvcmtzcGFjZUhlaWdodCgpO2UuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoUC09Z3UocikpLFA9TWF0aC5taW4oUCx0Lnd0Um9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KSxjLmhlaWdodD1gJHtQfXB4YH1lbHNlIGMuaGVpZ2h0PSIiO3RoaXMuY2xvbmUud3RUYWJsZS5o''@;'; put 'put ''b2xkZXIuc3R5bGUuaGVpZ2h0PWMuaGVpZ2h0O2NvbnN0IEM9cHUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjLndpZHRoPWAke0N9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6dH09dGhpcy5jbG9uZS53dFRhYmxlLGU9R0oodGhpcy53b3QpLHI9dGhpcy53''@;'; put 'put ''b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpP3BhcnNlSW50KGUud2lkdGgsMTApLzI6MDt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LHQuc3R5bGUuaGVpZ2h0PXQucGFyZW50Tm9kZS5zdHlsZS5oZWln''@;'; put 'put ''aHQsdC5zdHlsZS53aWR0aD1gJHtwYXJzZUludCh0LnBhcmVudE5vZGUuc3R5bGUud2lkdGgsMTApK3J9cHhgfWFwcGx5VG9ET00oKXtjb25zdCB0PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxlPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0IjtpZigibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlW2VdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtp''@;'; put 'put ''ZigwIT09dCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlW2VdPSIwIn10aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0PSIiOnRoaXMuc3ByZWFkZXIuc3R5bGUucmln''@;'; put 'put ''aHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcD0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKHQsZSl7Y29uc3R7d3RTZXR0aW5nczpyfT10aGlzLGk9ci5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksYT1yLmdldFNldHRpbmco''@;'; put 'put ''ImZpeGVkQ29sdW1uc1N0YXJ0IiksbT0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyLEM9MD09PWEmJmkubGVuZ3RoPjAmJiF2byhtLnBhcmVudE5vZGUsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKT8xOjA7bGV0IFA9''@;'; put 'put ''dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLFk9MDtyZXR1cm4gZSYmdGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aCh0KT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSYmKGU9ITEpLGUmJm0ub2Zmc2V0V2lkdGghPT1tLmNsaWVudFdpZHRoJiYoWT1ndSh0''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGU/KFArPXRoaXMuc3VtQ2VsbFNpemVzKDAsdCsxKSxQLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSxQKz1DKTpQKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRD''@;'; put 'put ''b2x1bW5zU3RhcnQiKSx0KSxQKz1ZLGM1ZSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PVAtQyYmQz4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkoQyksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihQKX1nZXRUYWJsZVBhcmVudE9mZnNl''@;'; put 'put ''dCgpe2xldCBlPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGU9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQubGVmdCksZX1nZXRT''@;'; put 'put ''Y3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyhpSih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93OnR9PXRoaXMuZG9tQmluZGluZ3MsZT10aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IHI9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PXR8fGUmJiJob3Jpem9udGFsIj09PWV8fChyPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhp''@;'; put 'put ''cy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLHI+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsV2lkdGgoKSYmKHI9''@;'; put 'put ''MCkpLHJ9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKHQpe2NvbnN0e3d0U2V0dGluZ3M6ZX09dGhpcyxyPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaT1lLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxhPWUuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxj''@;'; put 'put ''PWUuZ2V0U2V0dGluZygidG90YWxSb3dzIiksbT0idmVydGljYWwiPT09ZS5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtjP0hhKHIsImVtcHR5Um93cyIpOnRpKHIsImVtcHR5Um93cyIpO2xldCBDPSExO2lmKCFtKWlmKGEmJiFpLmxlbmd0aCl0aShyLCJpbm5lckJvcmRlckxlZnQg''@;'; put 'put ''aW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2Vsc2UgaWYoIWEmJmkubGVuZ3RoKXtjb25zdCBQPXZvKHIsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKTt0Pyh0aShyLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEM9IVApOihIYShyLCJpbm5lckJvcmRlckxlZnQg''@;'; put 'put ''aW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEM9UCl9cmV0dXJuIEN9fWNsYXNzIHFKIGV4dGVuZHMgd0N7Y29uc3RydWN0b3IodCxlLHIsaSl7c3VwZXIodCxlLHIsaSxOdil9fXBsKHFKLFE1ZSkscGwocUosS0opO2NvbnN0IEhsdD1xSjtmdW5jdGlvbiBmbWUobix0LGUpe3JldHVybih0PWZ1''@;'; put 'put ''bmN0aW9uIE5sdChuKXt2YXIgdD1mdW5jdGlvbiBWbHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''cilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQp''@;'; put 'put ''KWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIEJsdCBleHRlbmRzIGxre2NvbnN0cnVjdG9yKHQsZSxyLGksYSxjKXtzdXBlcih0LGUsTnYscixpKSxmbWUodGhp''@;'; put 'put ''cywidG9wT3ZlcmxheSIsdm9pZCAwKSxmbWUodGhpcywiaW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1hLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PWN9Y3JlYXRlVGFibGUoKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxyPTA7''@;'; put 'put ''cjx0O3IrKyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gbmV3IEhsdCguLi5lKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5k''@;'; put 'put ''ZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgdD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5v''@;'; put 'put ''ZGU7dGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9jTih0LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhpcy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQo''@;'; put 'put ''KX1weGApOlFBKHQpO2xldCBlPUh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3Qgcj1wdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChlPTApLHQuc3R5bGUuaGVpZ2h0PWAke2V9cHhgLHQuc3R5bGUu''@;'; put 'put ''d2lkdGg9YCR7cn1weGAsITF9fWNsYXNzIEpKIGV4dGVuZHMgd0N7Y29uc3RydWN0b3IodCxlLHIsaSl7c3VwZXIodCxlLHIsaSxpOCl9fXBsKEpKLGNtZSkscGwoSkosS0opO2NvbnN0IGpsdD1KSjtjbGFzcyB6bHQgZXh0ZW5kcyBsa3tjb25zdHJ1Y3Rvcih0LGUscixpLGEsYyl7c3VwZXIo''@;'; put 'put ''dCxlLGk4LHIsaSksdGhpcy5ib3R0b21PdmVybGF5PWEsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9Y31jcmVhdGVUYWJsZSgpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO3JldHVybiBuZXcgamx0KC4uLmUp''@;'; put 'put ''fXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigp''@;'; put 'put ''e2NvbnN0e3dvdDp0fT10aGlzO2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGU9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2lmKGUuc3R5bGUudG9wPSIiLHRoaXMudHJpbW1p''@;'; put 'put ''bmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpe2NvbnN0IGE9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLGM9dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTtlLnN0eWxlW3RoaXMuaXNSdGwoKT8icmlnaHQiOiJs''@;'; put 'put ''ZWZ0Il09YCR7YX1weGAsZS5zdHlsZS5ib3R0b209YCR7Y31weGB9ZWxzZSBRQShlKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IHI9SHUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBpPXB1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0''@;'; put 'put ''VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KHI9MCksZS5zdHlsZS5oZWlnaHQ9YCR7cn1weGAsZS5zdHlsZS53aWR0aD1gJHtpfXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6dCx3dFZpZXdwb3J0OmV9PXRoaXMud290LHtyb290RG9jdW1lbnQ6cn09dGhpcy5kb21C''@;'; put 'put ''aW5kaW5ncyxpPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgYT0wO2UuaGFzVmVydGljYWxTY3JvbGwoKXx8KGErPWUuZ2V0V29ya3NwYWNlSGVpZ2h0KCktdC5nZXRUb3RhbEhlaWdodCgpKSxlLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmUuaGFzSG9yaXpvbnRhbFNj''@;'; put 'put ''cm9sbCgpJiYoYSs9Z3UocikpLGkuc3R5bGUuYm90dG9tPWAke2F9cHhgfX1mdW5jdGlvbiBNTihuLHQsZSl7KGZ1bmN0aW9uIFVsdChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ug''@;'; put 'put ''b24gYW4gb2JqZWN0Iil9KShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gdjUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIFdsdChuKXt2YXIgdD1mdW5jdGlvbiBabHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWZ1bmN0aW9u''@;'; put 'put ''IFZ2KG4sdCxlKXtyZXR1cm4gbi5zZXQocG1lKG4sdCksZSksZX1mdW5jdGlvbiB5NShuLHQpe3JldHVybiBuLmdldChwbWUobix0KSl9ZnVuY3Rpb24gcG1lKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6''@;'; put 'put ''ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgU0M9bmV3IFdlYWtNYXAseE49bmV3IFdlYWtNYXAsTUM9bmV3IFdlYWtNYXAsRU49bmV3IFdlYWtNYXA7Y29uc3QgR2x0PWNsYXNzIFlsdHtjb25zdHJ1Y3Rv''@;'; put 'put ''cih0LGUscixpLGEsYyl7djUodGhpcywid290IixudWxsKSxNTih0aGlzLFNDLFtdKSx2NSh0aGlzLCJ0b3BPdmVybGF5IixudWxsKSx2NSh0aGlzLCJib3R0b21PdmVybGF5IixudWxsKSx2NSh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLG51bGwpLHY1KHRoaXMsInRvcElubGluZVN0YXJ0''@;'; put 'put ''Q29ybmVyT3ZlcmxheSIsbnVsbCksdjUodGhpcywiYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSx2NSh0aGlzLCJicm93c2VyTGluZUhlaWdodCIsdm9pZCAwKSx2NSh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxNTih0aGlzLHhOLCExKSxNTih0aGlzLE1DLDApLE1OKHRo''@;'; put 'put ''aXMsRU4sbnVsbCksdjUodGhpcywicmVzaXplT2JzZXJ2ZXIiLG5ldyBSZXNpemVPYnNlcnZlcihZPT57WkEoKCk9PnshQXJyYXkuaXNBcnJheShZKXx8IVkubGVuZ3RofHwoVnYoTUMsdGhpcyx5NShNQyx0aGlzKSsxKSwzMDA9PT15NShNQyx0aGlzKSYmKG9zKCJUaGUgUmVzaXplT2JzZXJ2''@;'; put 'put ''ZXIgY2FsbGJhY2sgd2FzIGZpcmVkIHRvbyBtYW55IHRpbWVzIGluIGRpcmVjdCBzdWNjZXNzaW9uLlxuVGhpcyBtYXkgYmUgZHVlIHRvIGFuIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5IHNldHRpbmcgYSBkeW5hbWljIGhlaWdodC93aWR0aCAoZm9yIGV4YW1wbGUsIHdpdGggdGhlIGBkdmhg''@;'; put 'put ''IHVuaXRzKSB0byBhIEhhbmRzb250YWJsZSBjb250YWluZXIncyBwYXJlbnQuIFxuVGhlIG9ic2VydmVyIHdpbGwgYmUgZGlzY29ubmVjdGVkLiIpLHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKSxudWxsIT09eTUoRU4sdGhpcykmJmNsZWFyVGltZW91dCh5NShFTix0aGlzKSks''@;'; put 'put ''VnYoRU4sdGhpcyxzZXRUaW1lb3V0KCgpPT57VnYoTUMsdGhpcywwKX0sMTAwKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZSIpKX0pfSkpLHRoaXMud290PXQsdGhpcy53dFNldHRpbmdzPWksdGhpcy5kb21CaW5kaW5ncz1yLHRoaXMuZmFj''@;'; put 'put ''YWRlR2V0dGVyPWUsdGhpcy53dFRhYmxlPWM7Y29uc3R7cm9vdERvY3VtZW50Om0scm9vdFdpbmRvdzpDfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNjcm9sbGJhclNpemU9Z3UobSk7Y29uc3QgUD0iaGlkZGVuIj09''@;'; put 'put ''PUMuZ2V0Q29tcHV0ZWRTdHlsZShjLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50PVA/Yy5ob2xkZXI6WEEoYy5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMoKSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlz''@;'; put 'put ''LmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxhc3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2VyTGluZUhlaWdodCgpLHRoaXMucmVnaXN0ZXJMaXN0ZW5l''@;'; put 'put ''cnMoKSx0aGlzLmxhc3RTY3JvbGxYPUMuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPUMuc2Nyb2xsWX1nZXRPdmVybGF5cygpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgZT1bLi4ueTUoU0MsdGhpcyldO3JldHVy''@;'; put 'put ''biB0JiZlLnB1c2godGhpcy53dFRhYmxlKSxlfWluaXRCcm93c2VyTGluZUhlaWdodCgpe2NvbnN0e3Jvb3RXaW5kb3c6dCxyb290RG9jdW1lbnQ6ZX09dGhpcy5kb21CaW5kaW5ncyxyPXQuZ2V0Q29tcHV0ZWRTdHlsZShlLmJvZHkpLGk9cGFyc2VJbnQoci5saW5lSGVpZ2h0LDEwKSxhPTEu''@;'; put 'put ''MipwYXJzZUludChyLmZvbnRTaXplLDEwKTt0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0PWl8fGF9aW5pdE92ZXJsYXlzKCl7Y29uc3QgdD1bdGhpcy53b3QsdGhpcy5mYWNhZGVHZXR0ZXIsdGhpcy53dFNldHRpbmdzLHRoaXMuZG9tQmluZGluZ3NdO3RoaXMudG9wT3ZlcmxheT1uZXcgRWx0KC4u''@;'; put 'put ''LnQpLHRoaXMuYm90dG9tT3ZlcmxheT1uZXcgUmx0KC4uLnQpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PW5ldyBGbHQoLi4udCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IEJsdCguLi50LHRoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksdGhp''@;'; put 'put ''cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IHpsdCguLi50LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksVnYoU0MsdGhpcyxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlz''@;'; put 'put ''LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0pfWJlZm9yZURyYXcoKXtWdih4Tix0aGlzLHk1KFNDLHRoaXMpLnJlZHVjZSgodCxlKT0+ZS5oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKXx8dCwhMSkpLHk1KFNDLHRoaXMp''@;'; put 'put ''LmZvckVhY2godD0+dC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJiZWZvcmUiKSl9YWZ0ZXJEcmF3KCl7dGhpcy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpLHk1KFNDLHRoaXMpLmZvckVhY2godD0+e2NvbnN0IGU9dC5oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTt0LnVwZGF0ZVN0YXRlT2ZS''@;'; put 'put ''ZW5kZXJpbmcoImFmdGVyIiksZSYmIXQubmVlZEZ1bGxSZW5kZXImJnQucmVzZXQoKX0pfXJlZnJlc2hBbGwoKXtpZih0aGlzLndvdC5kcmF3bil7aWYoIXRoaXMud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4gdm9pZCB0aGlzLmRlc3Ryb3koKTt0aGlzLndvdC5kcmF3KCEwKSx0''@;'; put 'put ''aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmdGhpcy50b3BPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITF9''@;'; put 'put ''fXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50OnQscm9vdFdpbmRvdzplfT10aGlzLmRvbUJpbmRpbmdzLHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpyfT10aGlzLnRvcE92ZXJsYXkse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50Oml9PXRoaXMuaW5saW5lU3Rh''@;'; put 'put ''cnRPdmVybGF5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodC5kb2N1bWVudEVsZW1lbnQsImtleWRvd24iLEo9PnRoaXMub25LZXlEb3duKEopKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQuZG9jdW1lbnRFbGVtZW50LCJrZXl1cCIsKCk9PnRoaXMu''@;'; put 'put ''b25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsInZpc2liaWxpdHljaGFuZ2UiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyLCJzY3JvbGwiLEo9PnRoaXMub25UYWJsZVNjcm9sbChKKSx7cGFzc2l2''@;'; put 'put ''ZTohMH0pLHIhPT1pJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGksInNjcm9sbCIsSj0+dGhpcy5vblRhYmxlU2Nyb2xsKEopLHtwYXNzaXZlOiEwfSk7Y29uc3QgYT1lLmRldmljZVBpeGVsUmF0aW8mJmUuZGV2aWNlUGl4ZWxSYXRpbz4xLGM9dGhpcy5zY3JvbGxhYmxl''@;'; put 'put ''RWxlbWVudD09PWUsbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudFdoZWVsIiksQz17cGFzc2l2ZTpjfTtsZXQgWTsobXx8YXx8IWVKKCkpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LCJ3aGVlbCIsSj0+''@;'; put 'put ''dGhpcy5vbkNsb25lV2hlZWwoSixtKSxDKSxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0uZm9yRWFjaChK''@;'; put 'put ''PT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihKLmNsb25lLnd0VGFibGUuaG9sZGVyLCJ3aGVlbCIsY2U9PnRoaXMub25DbG9uZVdoZWVsKGNlLG0pLEMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJyZXNpemUiLCgpPT57WkEoKCk9PntjbGVh''@;'; put 'put ''clRpbWVvdXQoWSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uV2luZG93UmVzaXplIiksWT1zZXRUaW1lb3V0KCgpPT57VnYoTUMsdGhpcywwKX0sMjAwKX0pfSksY3x8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudEVs''@;'; put 'put ''ZW1lbnQpfW9uVGFibGVTY3JvbGwodCl7Y29uc3QgZT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cscj10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxpPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxhPXQudGFy''@;'; put 'put ''Z2V0O3RoaXMua2V5UHJlc3NlZCYmKGkhPT1lJiZhIT09ZSYmIXQudGFyZ2V0LmNvbnRhaW5zKGkpfHxyIT09ZSYmYSE9PWUmJiF0LnRhcmdldC5jb250YWlucyhyKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyh0KX1vbkNsb25lV2hlZWwodCxlKXtpZih0LmN0cmxLZXkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0e3Jvb3RXaW5kb3c6cn09dGhpcy5kb21CaW5kaW5ncyxpPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGE9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGM9dC50YXJnZXQsbT1hIT09ciYmYyE9PXImJiFjLmNv''@;'; put 'put ''bnRhaW5zKGEpLEM9aSE9PXImJmMhPT1yJiYhYy5jb250YWlucyhpKTtpZih0aGlzLmtleVByZXNzZWQmJihtfHxDKXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PXIpcmV0dXJuO2NvbnN0IFA9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwodCk7KGV8fHRoaXMuc2Nyb2xsYWJs''@;'; put 'put ''ZUVsZW1lbnQhPT1yJiZQKSYmdC5wcmV2ZW50RGVmYXVsdCgpfW9uS2V5RG93bih0KXt0aGlzLmtleVByZXNzZWQ9a3YodC5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19SSUdIVHxBUlJPV19ET1dOfEFSUk9XX0xFRlQiKX1vbktleVVwKCl7dGhpcy5rZXlQcmVzc2VkPSExfXRyYW5zbGF0ZU1v''@;'; put 'put ''dXNlV2hlZWxUb1Njcm9sbCh0KXtsZXQgZT1pc05hTih0LmRlbHRhWSk/LTEqdC53aGVlbERlbHRhWTp0LmRlbHRhWSxyPWlzTmFOKHQuZGVsdGFYKT8tMSp0LndoZWVsRGVsdGFYOnQuZGVsdGFYOzE9PT10LmRlbHRhTW9kZSYmKHIrPXIqdGhpcy5icm93c2VyTGluZUhlaWdodCxlKz1lKnRo''@;'; put 'put ''aXMuYnJvd3NlckxpbmVIZWlnaHQpO2NvbnN0IGk9dGhpcy5zY3JvbGxWZXJ0aWNhbGx5KGUpLGE9dGhpcy5zY3JvbGxIb3Jpem9udGFsbHkocik7cmV0dXJuIGl8fGF9c2Nyb2xsVmVydGljYWxseSh0KXtjb25zdCBlPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO3JldHVybiB0''@;'; put 'put ''aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCs9dCxlIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3B9c2Nyb2xsSG9yaXpvbnRhbGx5KHQpe2NvbnN0IGU9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50''@;'; put 'put ''LnNjcm9sbExlZnQrPXQsZSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdH1zeW5jU2Nyb2xsUG9zaXRpb25zKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IHQ9dGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLGU9dGhpcy5pbmxpbmVTdGFydE92''@;'; put 'put ''ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI7bGV0IHI9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LGk9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7aWYodGhpcy53b3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYocj10''@;'; put 'put ''aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFgpLHRoaXMud290Lnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJihpPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWSksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFghPT1y''@;'; put 'put ''LHRoaXMudmVydGljYWxTY3JvbGxpbmc9dGhpcy5sYXN0U2Nyb2xsWSE9PWksdGhpcy5sYXN0U2Nyb2xsWD1yLHRoaXMubGFzdFNjcm9sbFk9aSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe3Quc2Nyb2xsTGVmdD1yO2NvbnN0IGE9dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVy''@;'; put 'put ''P3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO2EmJihhLnNjcm9sbExlZnQ9cil9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGUuc2Nyb2xsVG9wPWkpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7aWYoIXk1KHhOLHRoaXMpKXJl''@;'; put 'put ''dHVybjtjb25zdCB0PXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx7c2Nyb2xsTGVmdDplLHNjcm9sbFRvcDpyfT10O3RoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0''@;'; put 'put ''PWUpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWUpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUu''@;'; put 'put ''d3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPXIpLFZ2KHhOLHRoaXMsITEpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhp''@;'; put 'put ''cy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6dH09dGhpcyx7cm9vdFdpbmRvdzplfT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1lLmdldENvbXB1dGVkU3R5bGUodC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dC5ob2xkZXI6WEEodC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3Rl''@;'; put 'put ''bmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5p''@;'; put 'put ''bmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRD''@;'; put 'put ''b3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRh''@;'; put 'put ''dGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaCh0KSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKHQpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKHQp''@;'; put 'put ''LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKHQpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5i''@;'; put 'put ''b3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaCh0KX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29uc3QgdD10aGlzLnd0VGFibGUuc3ByZWFkZXIsZT10LmNsaWVudFdpZHRoLHI9dC5jbGllbnRIZWlnaHQsaT1lIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxy''@;'; put 'put ''IT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaSYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aD1lLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ciksaX1hZGp1c3RFbGVtZW50c1NpemUoKXtjb25zdHt3dFZpZXdwb3J0OnR9PXRoaXMud290LHt3dFRhYmxl''@;'; put 'put ''OmV9PXRoaXMse3Jvb3RXaW5kb3c6cn09dGhpcy5kb21CaW5kaW5ncyxpPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1yLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLG09dC5nZXRS''@;'; put 'put ''b3dIZWFkZXJXaWR0aCgpLEM9dC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSxQPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKT8wOjEsWT1DK3RoaXMudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxjKStQLEo9bSt0aGlzLmlubGluZVN0YXJ0T3Zl''@;'; put 'put ''cmxheS5zdW1DZWxsU2l6ZXMoMCxhKSxmZT1lLmhpZGVyLnN0eWxlLFhlPSgoKT0+IWkmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPk1hdGgubWF4KDAsWS1lLmhvbGRlci5jbGllbnRIZWlnaHQpKSgpPzE6MCxydD0oKCk9PiFpJiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNj''@;'; put 'put ''cm9sbExlZnQ+TWF0aC5tYXgoMCxKLWUuaG9sZGVyLmNsaWVudFdpZHRoKSkoKT8xOjA7ZmUud2lkdGg9YCR7SitydH1weGAsZmUuaGVpZ2h0PWAke1krWGV9cHhgLHRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hZGp1c3RFbGVt''@;'; put 'put ''ZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCl9ZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkodCl7Y29uc3R7d3RUYWJsZTplfT10aGlzO2UuaGlkZXIuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGUuaGlkZXIuc3R5bGUuaGVpZ2h0LDEwKSt0fXB4YH1l''@;'; put 'put ''eHBhbmRIaWRlckhvcml6b250YWxseUJ5KHQpe2NvbnN0e3d0VGFibGU6ZX09dGhpcztlLmhpZGVyLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGUuaGlkZXIuc3R5bGUud2lkdGgsMTApK3R9cHhgfWFwcGx5VG9ET00oKXt0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLnRvcE92ZXJs''@;'; put 'put ''YXkuYXBwbHlUb0RPTSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hcHBseVRvRE9NKCkpfWdldFBhcmVudE92ZXJsYXkodCl7aWYoIXQpcmV0dXJuIG51bGw7bGV0IHI9bnVsbDtyZXR1''@;'; put 'put ''cm4gWW4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGk9PntpJiZpLmNsb25lJiZpLmNsb25lLnd0VGFi''@;'; put 'put ''bGUuVEFCTEUuY29udGFpbnModCkmJihyPWkuY2xvbmUpfSkscn1zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpe2NvbnN0IHQ9dGhpcy53dFRhYmxlLlRBQkxFO1luKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9w''@;'; put 'put ''SW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxyPT57ciYmKHIuY2xvbmUud3RUYWJsZS5UQUJMRS5jbGFzc05hbWU9dC5jbGFzc05hbWUpfSl9fTtmdW5jdGlvbiBnbWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uICRsdChuKXt2''@;'; put 'put ''YXIgdD1mdW5jdGlvbiBLbHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIFhsdHtjb25zdHJ1Y3Rvcih0KXtnbWUodGhpcywic2V0dGluZ3MiLHt9KSxnbWUodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhp''@;'; put 'put ''cy5nZXREZWZhdWx0cygpKSksYXModGhpcy5kZWZhdWx0cywoZSxyKT0+e2lmKHZvaWQgMCE9PXRbcl0pdGhpcy5zZXR0aW5nc1tyXT10W3JdO2Vsc2V7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtyfSIgd2FzIG5vdCBwcm92aWRlZGApO3Ro''@;'; put 'put ''aXMuc2V0dGluZ3Nbcl09ZX19KX1nZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOiExLGN1cnJlbnRSb3dDbGFzc05hbWU6bnVsbCxjdXJyZW50Q29sdW1uQ2xhc3NOYW1lOm51''@;'; put 'put ''bGwscHJldmVudE92ZXJmbG93OigpPT4hMSxwcmV2ZW50V2hlZWw6ITEsZGF0YTp2b2lkIDAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NUb3A6MCxmaXhlZFJvd3NCb3R0b206MCxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRD''@;'; put 'put ''b2x1bW5zU3RhcnQiKT4wfHx0aGlzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpPjB8fHRoaXMuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wLHNob3Vs''@;'; put 'put ''ZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik+MCxtaW5TcGFyZVJvd3M6MCxyb3dIZWFkZXJzOigpPT5bXSxjb2x1bW5IZWFkZXJzOigpPT5bXSx0b3RhbFJvd3M6dm9pZCAwLHRvdGFsQ29sdW1uczp2b2lkIDAsY2VsbFJlbmRlcmVy''@;'; put 'put ''Oih0LGUscik9PntRNihyLHRoaXMuZ2V0U2V0dGluZygiZGF0YSIsdCxlKT8/IiIpfSxjb2x1bW5XaWR0aCgpe30scm93SGVpZ2h0KCl7fSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lKCl7fSxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93''@;'; put 'put ''bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOm51bGwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCxvbkNlbGxNb3Vz''@;'; put 'put ''ZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1vdXNlT3V0Om51bGwsb25DZWxsTW91c2VVcDpudWxsLG9uQ2VsbERibENsaWNrOm51bGwsb25DZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVs''@;'; put 'put ''bCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczpudWxsLG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOm51bGwsb25CZWZvcmVEcmF3Qm9yZGVyczpudWxsLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6dD0+dCxvbkJlZm9yZVZp''@;'; put 'put ''ZXdwb3J0U2Nyb2xsVmVydGljYWxseTp0PT50LG9uU2Nyb2xsSG9yaXpvbnRhbGx5Om51bGwsb25TY3JvbGxWZXJ0aWNhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9sbDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6bnVsbCxvbk1vZGlm''@;'; put 'put ''eUdldENlbGxDb29yZHM6bnVsbCxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6bnVsbCxvbk1vZGlmeUdldENvb3JkczpudWxsLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOnQ9PnQsb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6dD0+dCxvbldpbmRvd1Jlc2l6ZTpudWxs''@;'; put 'put ''LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJlbmRlckFsbENvbHVtbnM6ITEscmVuZGVyQWxsUm93czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVsbCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExLGFyaWFUYWdzOiEw''@;'; put 'put ''LHN0eWxlc0hhbmRsZXI6bnVsbH19dXBkYXRlKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/YXModCwocixpKT0+e3RoaXMuc2V0dGluZ3NbaV09cn0pOnRoaXMuc2V0dGluZ3NbdF09ZSx0aGlzfWdldFNldHRpbmcodCxlLHIsaSxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0''@;'; put 'put ''aW5nc1t0XT90aGlzLnNldHRpbmdzW3RdKGUscixpLGEpOnZvaWQgMCE9PWUmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1t0XSk/dGhpcy5zZXR0aW5nc1t0XVtlXTp0aGlzLnNldHRpbmdzW3RdfWdldFNldHRpbmdQdXJlKHQpe3JldHVybiB0aGlzLnNldHRpbmdzW3RdfWhhcyh0KXty''@;'; put 'put ''ZXR1cm4hIXRoaXMuc2V0dGluZ3NbdF19fWNsYXNzIFFKIGV4dGVuZHMgd0N7Y29uc3RydWN0b3IodCxlLHIsaSl7c3VwZXIodCxlLHIsaSwibWFzdGVyIil9YWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IHQ9Z0ModGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdp''@;'; put 'put ''bmRvdzplfT10aGlzLmRvbUJpbmRpbmdzO2lmKHQ9PT1lKXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtl''@;'; put 'put ''bHNle2NvbnN0IHI9dC5wYXJlbnRFbGVtZW50LGk9cUEodCwiaGVpZ2h0IixlKSxhPXFBKHQsIm92ZXJmbG93IixlKSxjPXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0aDptLHNjcm9sbEhlaWdodDpDfT10O2xldCBQPXQub2Zmc2V0V2lkdGgsWT10Lm9mZnNldEhlaWdodDtpZihyJiZb''@;'; put 'put ''ImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiXS5pbmNsdWRlcyhhKSl7Y29uc3QgY2U9dC5jbG9uZU5vZGUoITEpO2NlLnN0eWxlLm92ZXJmbG93PSJhdXRvIixjZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQubmV4dEVsZW1lbnRTaWJsaW5nP3IuaW5zZXJ0QmVmb3JlKGNlLHQubmV4dEVs''@;'; put 'put ''ZW1lbnRTaWJsaW5nKTpyLmFwcGVuZENoaWxkKGNlKTtjb25zdCBmZT1wYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUoY2UpLmhlaWdodCwxMCk7ci5yZW1vdmVDaGlsZChjZSksMD09PWZlJiYoWT0wKX1ZPU1hdGgubWluKFksQyksYy5oZWlnaHQ9ImF1dG8iPT09aT8iYXV0byI6YCR7WX1w''@;'; put 'put ''eGAsUD1NYXRoLm1pbihQLG0pLGMud2lkdGg9YCR7UH1weGAsYy5vdmVyZmxvdz0iIix0aGlzLmhhc1RhYmxlSGVpZ2h0PSJhdXRvIj09PWMuaGVpZ2h0fHxZPjAsdGhpcy5oYXNUYWJsZVdpZHRoPVA+MH10aGlzLmlzVGFibGVWaXNpYmxlPWU4KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRD''@;'; put 'put ''b2x1bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0aW5nczp0fT10aGlzLHt3dFZpZXdwb3J0OmV9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxyPSJtYXN0ZXIiLGE9dC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGEmJiFlLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJr''@;'; put 'put ''ZWRbcl0pe2NvbnN0IG09dC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLEM9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgUD0wO1A8YTtQKyspZm9yKGxldCBZPS0xKm07WTxDO1krKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihZKTtlLmhh''@;'; put 'put ''c092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbcl09ITB9fX1wbChRSixkbWUpLHBsKFFKLHpKKTtjb25zdCBxbHQ9UUo7ZnVuY3Rpb24gY2sobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIEpsdChuKXt2YXIgdD1mdW5jdGlvbiBRbHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFu''@;'; put 'put ''KXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIGVjdHtjb25zdHJ1Y3Rvcigpe2NrKHRoaXMsImNvdW50IiwwKSxjayh0aGlzLCJzdGFydFJvdyIsMCksY2sodGhpcywiZW5kUm93IiwwKSxjayh0aGlzLCJzdGFydFBvc2l0aW9uIiwwKSxjayh0aGlzLCJpc1Zpc2libGVJblRy''@;'; put 'put ''aW1taW5nQ29udGFpbmVyIiwhMCl9aW5pdGlhbGl6ZSh0KXtsZXR7dG90YWxSb3dzOmV9PXQ7dGhpcy5jb3VudD1lLHRoaXMuZW5kUm93PXRoaXMuY291bnQtMX1wcm9jZXNzKCl7fWZpbmFsaXplKCl7fX1mdW5jdGlvbiB1ayhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gdGN0KG4pe3ZhciB0''@;'; put 'put ''PWZ1bmN0aW9uIG5jdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZCgzOTA5MiksZCgxNDM2MCk7Y2xhc3MgbW1le2NvbnN0cnVjdG9yKCl7dWsodGhpcywiY291bnQiLDApLHVrKHRoaXMsInN0YXJ0Um93IixudWxsKSx1ayh0''@;'; put 'put ''aGlzLCJlbmRSb3ciLG51bGwpLHVrKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLHVrKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3ModCxlKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRIZWlnaHQ6cix6ZXJvQmFzZWRTY3JvbGxP''@;'; put 'put ''ZmZzZXQ6aSxpbm5lclZpZXdwb3J0SGVpZ2h0OmF9PWU7cjw9aSYmKHRoaXMuc3RhcnRSb3c9dCkscj49aSYmcjw9YSYmbnVsbD09PXRoaXMuc3RhcnRSb3cmJih0aGlzLnN0YXJ0Um93PXQpLHRoaXMuZW5kUm93PXR9ZmluYWxpemUodCl7dmFyIGU7Y29uc3R7c2Nyb2xsT2Zmc2V0OnIsdmll''@;'; put 'put ''d3BvcnRIZWlnaHQ6aSxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmEsdG90YWxSb3dzOmMsbmVlZFJldmVyc2U6bSxzdGFydFBvc2l0aW9uczpDLHJvd0hlaWdodDpQfT10O2lmKHRoaXMuZW5kUm93PT09Yy0xJiZtKWZvcih0aGlzLnN0YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRS''@;'; put 'put ''b3c+MDspe2NvbnN0IEo9Q1t0aGlzLmVuZFJvd10rUC1DW3RoaXMuc3RhcnRSb3ctMV07aWYodGhpcy5zdGFydFJvdy09MSxKPj1pLWEpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oZT1DW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09ZT9lOm51bGwsdGhpcy5pc1Zpc2libGVJ''@;'; put 'put ''blRyaW1taW5nQ29udGFpbmVyPSEocitpLWE8MHx8cj5DLmF0KC0xKStQKSxjPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9Yy0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gdm1lKG4sdCxlKXtyZXR1''@;'; put 'put ''cm4odD1mdW5jdGlvbiByY3Qobil7dmFyIHQ9ZnVuY3Rpb24gaWN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0''@;'; put 'put ''KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBhY3QgZXh0ZW5kcyBtbWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHZtZSh0aGlz''@;'; put 'put ''LCJyb3dTdGFydE9mZnNldCIsMCksdm1lKHRoaXMsInJvd0VuZE9mZnNldCIsMCl9ZmluYWxpemUodCl7dmFyIGU7c3VwZXIuZmluYWxpemUodCk7Y29uc3R7b3ZlcnJpZGVGbjpyLHRvdGFsUm93czppLHN0YXJ0UG9zaXRpb25zOmF9PXQ7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiByKXtjb25zdCBjPXRoaXMuc3RhcnRSb3csbT10aGlzLmVuZFJvdztyKHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9Yy10aGlzLnN0YXJ0Um93LHRoaXMucm93RW5kT2Zmc2V0PXRoaXMuZW5kUm93LW19dGhpcy5zdGFydFJvdzwwJiYodGhpcy5zdGFydFJvdz0wKSx0''@;'; put 'put ''aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShlPWFbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1lP2U6bnVsbCxpPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9aS0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVu''@;'; put 'put ''Y3Rpb24gZGsobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIG9jdChuKXt2YXIgdD1mdW5jdGlvbiBzY3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVm''@;'; put 'put ''YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIGxjdHtjb25zdHJ1Y3Rvcigpe2RrKHRoaXMsImNvdW50IiwwKSxk''@;'; put 'put ''ayh0aGlzLCJzdGFydFJvdyIsbnVsbCksZGsodGhpcywiZW5kUm93IixudWxsKSxkayh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxkayh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKHQsZSl7Y29uc3R7dG90YWxDYWxjdWxh''@;'; put 'put ''dGVkSGVpZ2h0OnIsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmksaW5uZXJWaWV3cG9ydEhlaWdodDphLHJvd0hlaWdodDpjfT1lO3I+PWkmJnIrYzw9YSYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz10KSx0aGlzLmVuZFJvdz10KX1maW5hbGl6ZSh0KXt2YXIgZTtjb25z''@;'; put 'put ''dHtzY3JvbGxPZmZzZXQ6cix2aWV3cG9ydEhlaWdodDppLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6YSx0b3RhbFJvd3M6YyxuZWVkUmV2ZXJzZTptLHN0YXJ0UG9zaXRpb25zOkMscm93SGVpZ2h0OlB9PXQ7aWYodGhpcy5lbmRSb3c9PT1jLTEmJm0pZm9yKHRoaXMuc3RhcnRSb3c9dGhp''@;'; put 'put ''cy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3QgY2U9Q1t0aGlzLmVuZFJvd10rUC1DW3RoaXMuc3RhcnRSb3ctMV07aWYoY2U8PWktYSYmKHRoaXMuc3RhcnRSb3ctPTEpLGNlPj1pLWEpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oZT1DW3RoaXMuc3RhcnRSb3ddKSYm''@;'; put 'put ''dm9pZCAwIT09ZT9lOm51bGw7Y29uc3QgWT1yK2ktYSxKPW51bGw9PT10aGlzLnN0YXJ0Um93PzA6dC5nZXRSb3dIZWlnaHQodGhpcy5zdGFydFJvdyk7dGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoWTxKfHxyPkMuYXQoLTEpKSxjPHRoaXMuZW5kUm93JiYodGhpcy5lbmRS''@;'; put 'put ''b3c9Yy0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gaGsobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIGNjdChuKXt2YXIgdD1mdW5jdGlvbiB1Y3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFu''@;'; put 'put ''KXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIGRjdHtjb25zdHJ1Y3Rvcigpe2hrKHRoaXMsImNvdW50IiwwKSxoayh0aGlzLCJzdGFydENvbHVtbiIsMCksaGsodGhpcywiZW5kQ29sdW1uIiwwKSxoayh0aGlzLCJzdGFydFBvc2l0aW9uIiwwKSxoayh0aGlzLCJpc1Zpc2li''@;'; put 'put ''bGVJblRyaW1taW5nQ29udGFpbmVyIiwhMCl9aW5pdGlhbGl6ZSh0KXtsZXR7dG90YWxDb2x1bW5zOmV9PXQ7dGhpcy5jb3VudD1lLHRoaXMuZW5kQ29sdW1uPXRoaXMuY291bnQtMX1wcm9jZXNzKCl7fWZpbmFsaXplKCl7fX1mdW5jdGlvbiBmayhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24g''@;'; put 'put ''aGN0KG4pe3ZhciB0PWZ1bmN0aW9uIGZjdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVy''@;'; put 'put ''biByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgeW1le2NvbnN0cnVjdG9yKCl7ZmsodGhpcywiY291bnQiLDApLGZrKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSxmayh0aGlz''@;'; put 'put ''LCJlbmRDb2x1bW4iLG51bGwpLGZrKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLGZrKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3ModCxlKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpyLHplcm9CYXNlZFNjcm9sbE9m''@;'; put 'put ''ZnNldDppLHZpZXdwb3J0V2lkdGg6YX09ZTtyPD1pJiYodGhpcy5zdGFydENvbHVtbj10KSxyPj1pJiZyPD1pKyhpPjA/YSsxOmEpJiZudWxsPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5zdGFydENvbHVtbj10KSx0aGlzLmVuZENvbHVtbj10fWZpbmFsaXplKHQpe3ZhciBlO2NvbnN0e3Nj''@;'; put 'put ''cm9sbE9mZnNldDpyLHZpZXdwb3J0V2lkdGg6aSxpbmxpbmVTdGFydE9mZnNldDphLHplcm9CYXNlZFNjcm9sbE9mZnNldDpjLHRvdGFsQ29sdW1uczptLG5lZWRSZXZlcnNlOkMsc3RhcnRQb3NpdGlvbnM6UCxjb2x1bW5XaWR0aDpZfT10O2lmKHRoaXMuZW5kQ29sdW1uPT09bS0xJiZDKWZv''@;'; put 'put ''cih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IGZlPVBbdGhpcy5lbmRDb2x1bW5dK1ktUFt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKHRoaXMuc3RhcnRDb2x1bW4tPTEsZmU+aSlicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9''@;'; put 'put ''PShlPVBbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1lP2U6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShyK2ktKGM+MD9pKzE6aSk8LTEqYXx8cj5QLmF0KC0xKStZfHwtMSpyLWk+MCksbTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPW0tMSks''@;'; put 'put ''bnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIF9tZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gcGN0KG4pe3ZhciB0PWZ1bmN0aW9uIGdjdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8''@;'; put 'put ''IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgbWN0IGV4dGVuZHMgeW1le2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxfbWUodGhpcywiY29sdW1uU3RhcnRPZmZzZXQiLDApLF9tZSh0aGlzLCJjb2x1bW5FbmRPZmZzZXQiLDApfWZpbmFsaXplKHQpe3Zh''@;'; put 'put ''ciBlO3N1cGVyLmZpbmFsaXplKHQpO2NvbnN0e292ZXJyaWRlRm46cix0b3RhbENvbHVtbnM6aSxzdGFydFBvc2l0aW9uczphfT10O2lmKG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygcil7Y29uc3QgYz10aGlzLnN0YXJ0Q29sdW1uLG09dGhpcy5lbmRDb2x1''@;'; put 'put ''bW47cih0aGlzKSx0aGlzLmNvbHVtblN0YXJ0T2Zmc2V0PWMtdGhpcy5zdGFydENvbHVtbix0aGlzLmNvbHVtbkVuZE9mZnNldD10aGlzLmVuZENvbHVtbi1tfXRoaXMuc3RhcnRDb2x1bW48MCYmKHRoaXMuc3RhcnRDb2x1bW49MCksdGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oZT1hW3Ro''@;'; put 'put ''aXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09ZT9lOm51bGwsaTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPWktMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIHBrKG4sdCxl''@;'; put 'put ''KXtyZXR1cm4odD1mdW5jdGlvbiB2Y3Qobil7dmFyIHQ9ZnVuY3Rpb24geWN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBfY3R7Y29uc3RydWN0b3IoKXtwayh0aGlzLCJjb3VudCIsMCkscGsodGhpcywic3RhcnRD''@;'; put 'put ''b2x1bW4iLG51bGwpLHBrKHRoaXMsImVuZENvbHVtbiIsbnVsbCkscGsodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCkscGsodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2Vzcyh0LGUpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRo''@;'; put 'put ''OnIsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Omksdmlld3BvcnRXaWR0aDphLGNvbHVtbldpZHRoOmN9PWU7cj49aSYmcitjPD1pKyhpPjA/YSsxOmEpJiYobnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49dCksdGhpcy5lbmRDb2x1bW49dCl9ZmluYWxpemUodCl7dmFy''@;'; put 'put ''IGU7Y29uc3R7c2Nyb2xsT2Zmc2V0OnIsdmlld3BvcnRXaWR0aDppLGlubGluZVN0YXJ0T2Zmc2V0OmEsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmMsdG90YWxDb2x1bW5zOm0sbmVlZFJldmVyc2U6QyxzdGFydFBvc2l0aW9uczpQLGNvbHVtbldpZHRoOll9PXQ7aWYodGhpcy5lbmRDb2x1bW49''@;'; put 'put ''PT1tLTEmJkMpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgQWU9UFt0aGlzLmVuZENvbHVtbl0rWS1QW3RoaXMuc3RhcnRDb2x1bW4tMV07aWYoQWU8PWkmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxBZT49aSlicmVha310aGlz''@;'; put 'put ''LnN0YXJ0UG9zaXRpb249bnVsbCE9PShlPVBbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1lP2U6bnVsbDtjb25zdCBjZT1yK2ktKGM+MD9pKzE6aSksZmU9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/MDp0LmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4pO3RoaXMuaXNWaXNp''@;'; put 'put ''YmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGNlPC0xKmF8fHI+UC5hdCgtMSl8fC0xKnItaT4tMSpmZSksbTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPW0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1''@;'; put 'put ''bW4rMSl9fWZ1bmN0aW9uIGJtZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gYmN0KG4pe3ZhciB0PWZ1bmN0aW9uIHdjdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2Fs''@;'; put 'put ''bChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3Mgd21le2NvbnN0cnVjdG9yKHQpe2JtZSh0aGlz''@;'; put 'put ''LCJjYWxjdWxhdGlvblR5cGVzIixbXSksYm1lKHRoaXMsImNhbGN1bGF0aW9uUmVzdWx0cyIsbmV3IE1hcCksdGhpcy5jYWxjdWxhdGlvblR5cGVzPXR9X2luaXRpYWxpemUodCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goZT0+e2xldFtyLGldPWU7dGhpcy5jYWxjdWxhdGlvblJl''@;'; put 'put ''c3VsdHMuc2V0KHIsaSksaS5pbml0aWFsaXplKHQpfSl9X3Byb2Nlc3ModCxlKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChyPT57bGV0WyxpXT1yO3JldHVybiBpLnByb2Nlc3ModCxlKX0pfV9maW5hbGl6ZSh0KXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChlPT57bGV0''@;'; put 'put ''WyxyXT1lO3JldHVybiByLmZpbmFsaXplKHQpfSl9Z2V0UmVzdWx0c0Zvcih0KXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KHQpfX1mdW5jdGlvbiBLZihuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gQ2N0KG4pe3ZhciB0PWZ1bmN0aW9uIFNjdChuLHQpe2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz''@;'; put 'put ''dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgTWN0IGV4dGVuZHMgd21le2NvbnN0cnVjdG9yKHQpe2xldHtjYWxjdWxhdGlvblR5cGVzOmUsdmlld3BvcnRIZWlnaHQ6cixzY3JvbGxPZmZzZXQ6aSx0b3RhbFJvd3M6YSxkZWZhdWx0Um93SGVpZ2h0''@;'; put 'put ''OmMscm93SGVpZ2h0Rm46bSxvdmVycmlkZUZuOkMsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpQfT10O3N1cGVyKGUpLEtmKHRoaXMsInZpZXdwb3J0SGVpZ2h0IiwwKSxLZih0aGlzLCJzY3JvbGxPZmZzZXQiLDApLEtmKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksS2YodGhp''@;'; put 'put ''cywidG90YWxSb3dzIiwwKSxLZih0aGlzLCJyb3dIZWlnaHRGbiIsbnVsbCksS2YodGhpcywicm93SGVpZ2h0IiwwKSxLZih0aGlzLCJvdmVycmlkZUZuIixudWxsKSxLZih0aGlzLCJob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IiwwKSxLZih0aGlzLCJpbm5lclZpZXdwb3J0SGVpZ2h0Iiww''@;'; put 'put ''KSxLZih0aGlzLCJ0b3RhbENhbGN1bGF0ZWRIZWlnaHQiLDApLEtmKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksS2YodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLmRlZmF1bHRIZWlnaHQ9Yyx0aGlzLnZpZXdwb3J0SGVpZ2h0PXIsdGhpcy5zY3JvbGxPZmZzZXQ9aSx0aGlzLnplcm9C''@;'; put 'put ''YXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChpLDApLHRoaXMudG90YWxSb3dzPWEsdGhpcy5yb3dIZWlnaHRGbj1tLHRoaXMub3ZlcnJpZGVGbj1DLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodD1QPz8wLHRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodD10aGlzLnplcm9CYXNlZFNjcm9s''@;'; put 'put ''bE9mZnNldCt0aGlzLnZpZXdwb3J0SGVpZ2h0LXRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCB0PTA7dDx0aGlzLnRvdGFsUm93czt0KyspaWYodGhpcy5yb3dIZWlnaHQ9dGhp''@;'; put 'put ''cy5nZXRSb3dIZWlnaHQodCksdGhpcy5fcHJvY2Vzcyh0LHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCksdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQrPXRoaXMucm93SGVpZ2h0LHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Pj10''@;'; put 'put ''aGlzLmlubmVyVmlld3BvcnRIZWlnaHQpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Um93SGVpZ2h0KHQpe2NvbnN0IGU9dGhpcy5yb3dIZWlnaHRGbih0KTtyZXR1cm4gaXNOYU4oZSk/dGhpcy5kZWZhdWx0SGVpZ2h0OmV9fWZ1bmN0aW9uIGNw''@;'; put 'put ''KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiB4Y3Qobil7dmFyIHQ9ZnVuY3Rpb24gRWN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBUY3QgZXh0ZW5kcyB3bWV7Y29uc3RydWN0b3IodCl7bGV0e2NhbGN1bGF0aW9u''@;'; put 'put ''VHlwZXM6ZSx2aWV3cG9ydFdpZHRoOnIsc2Nyb2xsT2Zmc2V0OmksdG90YWxDb2x1bW5zOmEsY29sdW1uV2lkdGhGbjpjLG92ZXJyaWRlRm46bSxpbmxpbmVTdGFydE9mZnNldDpDfT10O3N1cGVyKGUpLGNwKHRoaXMsInZpZXdwb3J0V2lkdGgiLDApLGNwKHRoaXMsInNjcm9sbE9mZnNldCIs''@;'; put 'put ''MCksY3AodGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSxjcCh0aGlzLCJ0b3RhbENvbHVtbnMiLDApLGNwKHRoaXMsImNvbHVtbldpZHRoRm4iLG51bGwpLGNwKHRoaXMsImNvbHVtbldpZHRoIiwwKSxjcCh0aGlzLCJvdmVycmlkZUZuIixudWxsKSxjcCh0aGlzLCJpbmxpbmVTdGFy''@;'; put 'put ''dE9mZnNldCIsMCksY3AodGhpcywidG90YWxDYWxjdWxhdGVkV2lkdGgiLDApLGNwKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksY3AodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLnZpZXdwb3J0V2lkdGg9cix0aGlzLnNjcm9sbE9mZnNldD1pLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zm''@;'; put 'put ''c2V0PU1hdGgubWF4KGksMCksdGhpcy50b3RhbENvbHVtbnM9YSx0aGlzLmNvbHVtbldpZHRoRm49Yyx0aGlzLm92ZXJyaWRlRm49bSx0aGlzLmlubGluZVN0YXJ0T2Zmc2V0PUMsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgdD0w''@;'; put 'put ''O3Q8dGhpcy50b3RhbENvbHVtbnM7dCsrKWlmKHRoaXMuY29sdW1uV2lkdGg9dGhpcy5nZXRDb2x1bW5XaWR0aCh0KSx0aGlzLl9wcm9jZXNzKHQsdGhpcyksdGhpcy5zdGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgpLHRoaXMudG90YWxDYWxjdWxhdGVkV2lk''@;'; put 'put ''dGgrPXRoaXMuY29sdW1uV2lkdGgsdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aD49dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydFdpZHRoKXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldENvbHVtbldpZHRoKHQpe2NvbnN0''@;'; put 'put ''IGU9dGhpcy5jb2x1bW5XaWR0aEZuKHQpO3JldHVybiBpc05hTihlKT81MDplfX1jb25zdCBrY3Q9Y2xhc3MgQWN0e2NvbnN0cnVjdG9yKHQsZSxyLGksYSl7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PXQsdGhpcy53b3Q9dC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRp''@;'; put 'put ''bmdzPWUsdGhpcy53dFNldHRpbmdzPXIsdGhpcy53dFRhYmxlPWEsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLnJvd0hlYWRl''@;'; put 'put ''cldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxs''@;'; put 'put ''Um93cyIpP25ldyBlY3Q6bmV3IGFjdF0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgbGN0XSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5uZXcgbW1lXV0pLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInJlbmRlckFsbENvbHVtbnMiKT9uZXcgZGN0Om5ldyBtY3RdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IF9jdF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IHltZV1dKSx0aGlzLmV2ZW50TWFuYWdlcj1pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5k''@;'; put 'put ''b21CaW5kaW5ncy5yb290V2luZG93LCJyZXNpemUiLCgpPT57dGhpcy5jbGllbnRIZWlnaHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX0pfWdldFdvcmtzcGFjZUhlaWdodCgpe2NvbnN0IGU9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQg''@;'; put 'put ''cj0wO3JldHVybiByPWU9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDpIdShlKT4wJiZlLmNsaWVudEhlaWdodD4wP2UuY2xpZW50SGVpZ2h0OjEvMCxyfWdldFZpZXdwb3J0SGVp''@;'; put 'put ''Z2h0KCl7bGV0IHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZih0PT09MS8wKXJldHVybiB0O2NvbnN0IGU9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gZT4wJiYodC09ZSksdH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3Jvb3REb2N1bWVudDp0LHJvb3RXaW5k''@;'; put 'put ''b3c6ZX09dGhpcy5kb21CaW5kaW5ncyxyPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgaTtpZihyPT09ZSl7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7aT10aGlzLnd0VGFibGUu''@;'; put 'put ''aG9sZGVyLm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKSt0aGlzLnN1bUNvbHVtbldpZHRocygwLGEpPmkmJihpPXQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKX1lbHNlIGk9ci5jbGllbnRXaWR0aDtyZXR1cm4gaX1nZXRWaWV3cG9ydFdpZHRoKCl7Y29uc3QgdD10''@;'; put 'put ''aGlzLmdldFdvcmtzcGFjZVdpZHRoKCk7aWYodD09PTEvMClyZXR1cm4gdDtjb25zdCBlPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTtyZXR1cm4gZT4wP3QtZTp0fWhhc1ZlcnRpY2FsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgYT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGEuc2Nyb2xsSGVpZ2h0PmEuY2xpZW50SGVpZ2h0fWNvbnN0e2hvbGRlcjp0LGhpZGVyOmV9PXRoaXMud3RUYWJsZSxpPWUub2Zmc2V0SGVpZ2h0O3JldHVybiB0LmNsaWVudEhlaWdodDxpfHxpPnRo''@;'; put 'put ''aXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGk9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBpLnNjcm9sbFdpZHRoPmku''@;'; put 'put ''Y2xpZW50V2lkdGh9Y29uc3R7aGlkZXI6dH09dGhpcy53dFRhYmxlLGU9dC5vZmZzZXRXaWR0aCxyPXRoaXMuaGFzVmVydGljYWxTY3JvbGwoKT9ndSgpOjA7cmV0dXJuIGU+dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpLXJ9aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheVRy''@;'; put 'put ''aW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93fXN1bUNvbHVtbldpZHRocyh0LGUpe2xldCByPTAsaT10O2Zvcig7aTxlOylyKz10aGlzLnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaSksaSs9MTtyZXR1cm4gcn1nZXRXb3Jrc3BhY2VPZmZzZXQoKXtyZXR1cm4g''@;'; put 'put ''RTEodGhpcy53dFRhYmxlLmhvbGRlcil9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoP2lzTmFOKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0KSYmKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PUh1''@;'; put 'put ''KHRoaXMud3RUYWJsZS5USEVBRCkpOnRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PTAsdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHR9Z2V0Um93SGVhZGVyV2lkdGgoKXtjb25zdCB0PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpLGU9dGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoInJvd0hlYWRlcnMiKTtpZih0KXt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXRoaXMucm93SGVhZGVyV2lkdGgrPXRbcl18fHR9aWYoaXNOYU4odGhpcy5yb3dIZWFkZXJXaWR0aCkpaWYoZS5sZW5ndGgpe2xldCByPXRoaXMu''@;'; put 'put ''d3RUYWJsZS5UQUJMRS5xdWVyeVNlbGVjdG9yKCJUSCIpO3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspcj8odGhpcy5yb3dIZWFkZXJXaWR0aCs9cHUocikscj1yLm5leHRTaWJsaW5nKTp0aGlzLnJvd0hlYWRlcldpZHRoKz01MH1lbHNlIHRo''@;'; put 'put ''aXMucm93SGVhZGVyV2lkdGg9MDtyZXR1cm4gdGhpcy5yb3dIZWFkZXJXaWR0aD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsdGhpcy5yb3dIZWFkZXJXaWR0aCl8fHRoaXMucm93SGVhZGVyV2lkdGgsdGhpcy5yb3dIZWFkZXJXaWR0aH1jcmVh''@;'; put 'put ''dGVSb3dzQ2FsY3VsYXRvcigpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdO2NvbnN0e3d0U2V0dGluZ3M6ZSx3dFRhYmxlOnJ9PXRoaXM7bGV0''@;'; put 'put ''IGEsYyxpPXRoaXMuZ2V0Vmlld3BvcnRIZWlnaHQoKTt0aGlzLnJvd0hlYWRlcldpZHRoPU5hTjtsZXQgbT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wU2Nyb2xsUG9zaXRpb24tdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFBhcmVudE9mZnNldDtjb25zdCBDPWUuZ2V0U2V0dGluZygiZml4''@;'; put 'put ''ZWRSb3dzVG9wIiksUD1lLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLFk9ZS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gQyYmbT49MCYmKGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsQyksbSs9YyxpLT1jKSxQJiZ0aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5jbG9uZSYmKGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuc3VtQ2VsbFNpemVzKFktUCxZKSxpLT1jKSxhPXIuaG9sZGVyLmNsaWVudEhlaWdodD09PXIuaG9sZGVyLm9mZnNldEhlaWdodD8wOmd1KHRoaXMuZG9tQmlu''@;'; put 'put ''ZGluZ3Mucm9vdERvY3VtZW50KSxuZXcgTWN0KHtjYWxjdWxhdGlvblR5cGVzOnQubWFwKEo9PltKLHRoaXMucm93c0NhbGN1bGF0b3JUeXBlcy5nZXQoSikoKV0pLHZpZXdwb3J0SGVpZ2h0Omksc2Nyb2xsT2Zmc2V0Om0sdG90YWxSb3dzOmUuZ2V0U2V0dGluZygidG90YWxSb3dzIiksZGVm''@;'; put 'put ''YXVsdFJvd0hlaWdodDplLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCkscm93SGVpZ2h0Rm46Sj0+ci5nZXRSb3dIZWlnaHQoSiksb3ZlcnJpZGVGbjplLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIpLGhvcml6''@;'; put 'put ''b250YWxTY3JvbGxiYXJIZWlnaHQ6YX0pfWNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl07Y29uc3R7''@;'; put 'put ''d3RTZXR0aW5nczplLHd0VGFibGU6cn09dGhpcztsZXQgaT10aGlzLmdldFZpZXdwb3J0V2lkdGgoKSxhPU1hdGguYWJzKHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKS10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQ7''@;'; put 'put ''dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9TmFOO2NvbnN0IGM9ZS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO2lmKGMmJmE+PTApe2NvbnN0IG09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxjKTthKz1tLGktPW19cmV0dXJu''@;'; put 'put ''IHIuaG9sZGVyLmNsaWVudFdpZHRoIT09ci5ob2xkZXIub2Zmc2V0V2lkdGgmJihpLT1ndSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLG5ldyBUY3Qoe2NhbGN1bGF0aW9uVHlwZXM6dC5tYXAobT0+W20sdGhpcy5jb2x1bW5zQ2FsY3VsYXRvclR5cGVzLmdldChtKSgpXSksdmll''@;'; put 'put ''d3BvcnRXaWR0aDppLHNjcm9sbE9mZnNldDphLHRvdGFsQ29sdW1uczplLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGNvbHVtbldpZHRoRm46bT0+ci5nZXRDb2x1bW5XaWR0aChtKSxvdmVycmlkZUZuOmUuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJy''@;'; put 'put ''aWRlIiksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0fSl9Y3JlYXRlQ2FsY3VsYXRvcnMoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e3d0U2V0''@;'; put 'put ''dGluZ3M6ZX09dGhpcyxyPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoKSxpPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKTtpZih0JiYhZS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIikpe2NvbnN0IGE9ci5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSxjPXIuZ2V0UmVz''@;'; put 'put ''dWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpO3Q9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGEsYyl9aWYodCYmIWUuZ2V0U2V0dGluZygicmVuZGVyQWxsQ29sdW1ucyIpKXtjb25zdCBhPWkuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksYz1p''@;'; put 'put ''LmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKTt0PXRoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChhLGMpfXJldHVybiB0fHwodGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcj1yLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIiksdGhpcy5jb2x1''@;'; put 'put ''bW5zUmVuZGVyQ2FsY3VsYXRvcj1pLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIikpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPXIuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9aS5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2li''@;'; put 'put ''bGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1yLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1pLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0fWNyZWF0ZVZpc2li''@;'; put 'put ''bGVDYWxjdWxhdG9ycygpe2NvbnN0IHQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcihbImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXSksZT10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKTt0aGlzLnJvd3NW''@;'; put 'put ''aXNpYmxlQ2FsY3VsYXRvcj10LmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPWUuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9dC5nZXRSZXN1bHRzRm9yKCJw''@;'; put 'put ''YXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9ZS5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZCh0LGUpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3Vs''@;'; put 'put ''YXRvcilyZXR1cm4hMTtsZXR7c3RhcnRSb3c6cixlbmRSb3c6aX09dDtjb25zdHtzdGFydFJvdzphLGVuZFJvdzpjfT1lO2lmKG51bGw9PT1yJiZudWxsPT09aSl7aWYoIXQuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciYmIXRoaXMud3RUYWJsZS5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93''@;'; put 'put ''cyhhKSYmIXRoaXMud3RUYWJsZS5pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGMpKXJldHVybiEwO3I9YSxpPWN9Y29uc3R7c3RhcnRSb3c6bSxlbmRSb3c6Qyxyb3dTdGFydE9mZnNldDpQLHJvd0VuZE9mZnNldDpZfT10aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yLEo9dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEsY2U9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoY2UpJiZjZT4wPyhyPU1hdGgubWF4KDAsci1NYXRoLm1pbihQLGNlKSksaT1NYXRoLm1p''@;'; put 'put ''bihKLGkrTWF0aC5taW4oWSxjZSkpKToiYXV0byI9PT1jZSYmKHI9TWF0aC5tYXgoMCxyLU1hdGguY2VpbChQLzIpKSxpPU1hdGgubWluKEosaStNYXRoLmNlaWwoWS8yKSkpLCEocjxtfHxyPT09bSYmcj4wfHxpPkN8fGk9PT1DJiZpPEopfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNB''@;'; put 'put ''bHJlYWR5UmVuZGVyZWQodCxlKXtpZighdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Q29sdW1uOnIsZW5kQ29sdW1uOml9PXQ7Y29uc3R7c3RhcnRDb2x1bW46YSxlbmRDb2x1bW46Y309ZTtpZihudWxsPT09ciYmbnVsbD09PWkpe2lmKCF0LmlzVmlz''@;'; put 'put ''aWJsZUluVHJpbW1pbmdDb250YWluZXImJiF0aGlzLnd0VGFibGUuaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMoYSkmJiF0aGlzLnd0VGFibGUuaXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhjKSlyZXR1cm4hMDtyPWEsaT1jfWNvbnN0e3N0YXJ0Q29sdW1uOm0sZW5kQ29sdW1u''@;'; put 'put ''OkMsY29sdW1uU3RhcnRPZmZzZXQ6UCxjb2x1bW5FbmRPZmZzZXQ6WX09dGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcixKPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xLGNlPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydENvbHVtblJl''@;'; put 'put ''bmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGNlKSYmY2U+MD8ocj1NYXRoLm1heCgwLHItTWF0aC5taW4oUCxjZSkpLGk9TWF0aC5taW4oSixpK01hdGgubWluKFksY2UpKSk6ImF1dG8iPT09Y2UmJihyPU1hdGgubWF4KDAsci1NYXRoLmNlaWwoUC8yKSksaT1N''@;'; put 'put ''YXRoLm1pbihKLGkrTWF0aC5jZWlsKFkvMikpKSwhKHI8bXx8cj09PW0mJnI+MHx8aT5DfHxpPT09QyYmaTxKKX1yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKXthcyh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsKHQsZSxyKT0+e3JbZV09dm9pZCAw''@;'; put 'put ''fSl9fTtmdW5jdGlvbiBDbWUobix0LGUpe1NtZShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gU21lKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5j''@;'; put 'put ''dGlvbiBLYyhuLHQpe3JldHVybiBuLmdldChnayhuLHQpKX1mdW5jdGlvbiBNbWUobix0LGUpe3JldHVybiBuLnNldChnayhuLHQpLGUpLGV9ZnVuY3Rpb24gZ2sobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/''@;'; put 'put ''dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWQoOTM5MDkpO3ZhciB1cD1uZXcgV2Vha01hcCxyZD1uZXcgV2Vha01hcCxUTj1uZXcgV2Vha1NldDtjbGFzcyBJY3R7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24g''@;'; put 'put ''RGN0KG4sdCl7U21lKG4sdCksdC5hZGQobil9KSh0aGlzLFROKSxDbWUodGhpcyx1cCx2b2lkIDApLENtZSh0aGlzLHJkLHZvaWQgMCl9c2V0QWN0aXZlT3ZlcmxheSh0KXtyZXR1cm4gTW1lKHJkLHRoaXMsdCksdGhpc31zZXRBY3RpdmVTZWxlY3Rpb24odCl7cmV0dXJuIE1tZSh1cCx0aGlz''@;'; put 'put ''LHQpLHRoaXN9c2Nhbigpe2NvbnN0IHQ9S2ModXAsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxlPW5ldyBTZXQ7cmV0dXJuImFjdGl2ZS1oZWFkZXIiPT09dD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKHI9PmUuYWRkKHIpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFu''@;'; put 'put ''Z2Uocj0+ZS5hZGQocikpKToiYXJlYSI9PT10P3RoaXMuc2NhbkNlbGxzUmFuZ2Uocj0+ZS5hZGQocikpOiJmb2N1cyI9PT10Pyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2Uocj0+ZS5hZGQocikpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShyPT5lLmFkZChyKSksdGhpcy5z''@;'; put 'put ''Y2FuQ2VsbHNSYW5nZShyPT5lLmFkZChyKSkpOiJmaWxsIj09PXQ/dGhpcy5zY2FuQ2VsbHNSYW5nZShyPT5lLmFkZChyKSk6ImhlYWRlciI9PT10Pyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2Uocj0+ZS5hZGQocikpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShyPT5lLmFk''@;'; put 'put ''ZChyKSkpOiJyb3ciPT09dD8odGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKHI9PmUuYWRkKHIpKSx0aGlzLnNjYW5Sb3dzSW5DZWxsc1JhbmdlKHI9PmUuYWRkKHIpKSk6ImNvbHVtbiI9PT10JiYodGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKHI9PmUuYWRkKHIpKSx0aGlzLnNj''@;'; put 'put ''YW5Db2x1bW5zSW5DZWxsc1JhbmdlKHI9PmUuYWRkKHIpKSksZX1zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKHQpe2NvbnN0W2UscixpLGFdPUtjKHVwLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTpjfT1LYyhyZCx0aGlzKSxtPWMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxDPWMu''@;'; put 'put ''Z2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7bGV0IFA9MDtmb3IobGV0IFk9LWMuZ2V0Um93SGVhZGVyc0NvdW50KCk7WTxtO1krKyl7Y29uc3QgSj1jLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKFkpO2lmKCEoSjxyfHxKPmEpKXtmb3IobGV0IGNlPS1DO2NlPDA7Y2UrKyl7aWYoY2U8''@;'; put 'put ''ZXx8Y2U+aSljb250aW51ZTtjb25zdCBmZT1jZStDO2xldCBBZT1jLmdldENvbHVtbkhlYWRlcihKLGZlKTtjb25zdCBIZT1LYyhyZCx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsSixmZSx7c2VsZWN0aW9uVHlwZTpLYyh1cCx0aGlzKS5zZXR0''@;'; put 'put ''aW5ncy5zZWxlY3Rpb25UeXBlLGNvbHVtbkN1cnNvcjpQLHNlbGVjdGlvbldpZHRoOmEtcisxfSk7bnVsbCE9PUhlJiYoSGUhPT1KJiYoQWU9Yy5nZXRDb2x1bW5IZWFkZXIoSGUsZmUpKSx0KEFlKSl9UCs9MX19fXNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UodCl7Y29uc3RbZSxyLGksYV09S2Mo''@;'; put 'put ''dXAsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOmN9PUtjKHJkLHRoaXMpLG09Yy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLEM9Yy5nZXRSb3dIZWFkZXJzQ291bnQoKTtsZXQgUD0wO2ZvcihsZXQgWT0tYy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTtZPG07WSsrKXtjb25zdCBKPWMucm93''@;'; put 'put ''RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoWSk7aWYoIShKPGV8fEo+aSkpe2ZvcihsZXQgY2U9LUM7Y2U8MDtjZSsrKXtpZihjZTxyfHxjZT5hKWNvbnRpbnVlO2NvbnN0IGZlPWNlK0M7bGV0IEFlPWMuZ2V0Um93SGVhZGVyKEosZmUpO2NvbnN0IEhlPUtjKHJkLHRoaXMpLmdldFNldHRpbmco''@;'; put 'put ''Im9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixKLGZlLHtzZWxlY3Rpb25UeXBlOktjKHVwLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUscm93Q3Vyc29yOlAsc2VsZWN0aW9uSGVpZ2h0OmktZSsxfSk7bnVsbCE9PUhlJiYoSGUhPT1KJiYoQWU9Yy5nZXRSb3dIZWFkZXIoSGUs''@;'; put 'put ''ZmUpKSx0KEFlKSl9UCs9MX19fXNjYW5DZWxsc1JhbmdlKHQpe2NvbnN0e3d0VGFibGU6ZX09S2MocmQsdGhpcyk7Z2soVE4sdGhpcyxSY3QpLmNhbGwodGhpcywocixpKT0+e2NvbnN0IGE9ZS5nZXRDZWxsKEtjKHJkLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMocixpKSksYz1LYyhyZCx0aGlz''@;'; put 'put ''KS5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIscixpLEtjKHVwLHRoaXMpLnNldHRpbmdzLmxheWVyTGV2ZWwpOyJzdHJpbmciPT10eXBlb2YgYyYmdGkoYSxjKSx0KGEpfSl9c2NhblJvd3NJbkNlbGxzUmFuZ2UodCl7Y29uc3RbZSwscl09S2ModXAsdGhpcykuZ2V0Q29ybmVy''@;'; put 'put ''cygpLHt3dFRhYmxlOml9PUtjKHJkLHRoaXMpO2drKFROLHRoaXMseG1lKS5jYWxsKHRoaXMsKGEsYyk9PntpZihhPj1lJiZhPD1yKXtjb25zdCBtPWkuZ2V0Q2VsbChLYyhyZCx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGEsYykpO3QobSl9fSl9c2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UodCl7''@;'; put 'put ''Y29uc3RbLGUsLHJdPUtjKHVwLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTppfT1LYyhyZCx0aGlzKTtnayhUTix0aGlzLHhtZSkuY2FsbCh0aGlzLChhLGMpPT57aWYoYz49ZSYmYzw9cil7Y29uc3QgbT1pLmdldENlbGwoS2MocmQsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhhLGMpKTt0''@;'; put 'put ''KG0pfX0pfX1mdW5jdGlvbiBSY3Qobil7bGV0W3QsZSxyLGldPUtjKHVwLHRoaXMpLmdldENvcm5lcnMoKTtpZih0PDAmJnI8MHx8ZTwwJiZpPDApcmV0dXJuO2NvbnN0e3d0VGFibGU6YX09S2MocmQsdGhpcyksYz10IT09cnx8ZSE9PWk7aWYoZT1NYXRoLm1heChlLDApLGk9TWF0aC5tYXgo''@;'; put 'put ''aSwwKSx0PU1hdGgubWF4KHQsMCkscj1NYXRoLm1heChyLDApLGMpe2lmKGU9TWF0aC5tYXgoZSxhLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSksaT1NYXRoLm1pbihpLGEuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpLHQ9TWF0aC5tYXgodCxhLmdldEZpcnN0UmVuZGVyZWRSb3coKSkscj1N''@;'; put 'put ''YXRoLm1pbihyLGEuZ2V0TGFzdFJlbmRlcmVkUm93KCkpLGk8ZXx8cjx0KXJldHVybn1lbHNlIGlmKCFNNChhLmdldENlbGwoS2MocmQsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0LGUpKSkpcmV0dXJuO2ZvcihsZXQgbT10O208PXI7bSs9MSlmb3IobGV0IEM9ZTtDPD1pO0MrPTEpbihtLEMp''@;'; put 'put ''fWZ1bmN0aW9uIHhtZShuKXtjb25zdHt3dFRhYmxlOnR9PUtjKHJkLHRoaXMpLGU9dC5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLHI9dC5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgaT0wO2k8ZTtpKz0xKXtjb25zdCBhPXQucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoaSk7''@;'; put 'put ''Zm9yKGxldCBjPTA7YzxyO2MrPTEpbihhLHQuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoYykpfX1jb25zdCBFbWU9Imh0LWJvcmRlci1zdHlsZS0iLFRtZT1jbGFzcyBQY3R7Y29uc3RydWN0b3IodCxlKXtlJiYodGhpcy5ldmVudE1hbmFnZXI9dC5ldmVudE1hbmFnZXIsdGhpcy5p''@;'; put 'put ''bnN0YW5jZT10LHRoaXMud290PXQsdGhpcy5zZXR0aW5ncz1lLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVsbCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHls''@;'; put 'put ''ZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT1HSih0aGlzLmluc3RhbmNlKSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lk''@;'; put 'put ''dGgsMTApLzIpLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhlKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgdD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBlPTAscj10aGlzLm1haW4uY2hpbGROb2Rlcy5s''@;'; put 'put ''ZW5ndGg7ZTxyO2UrKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2VdLCJtb3VzZWVudGVyIixhPT50aGlzLm9uTW91c2VFbnRlcihhLHRoaXMubWFpbi5jaGlsZE5vZGVzW2VdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0h''@;'; put 'put ''MH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIodCxlKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyIikpcmV0dXJuO3QucHJldmVudERlZmF1bHQoKSxBMih0KTtjb25zdCByPXRoaXMs''@;'; put 'put ''aT10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxhPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGksIm1vdXNlbW92ZSIsZnVuY3Rpb24gbShDKXsoZnVuY3Rpb24gYyhDKXtpZihDLmNs''@;'; put 'put ''aWVudFk8TWF0aC5mbG9vcihhLnRvcCl8fEMuY2xpZW50WT5NYXRoLmNlaWwoYS50b3ArYS5oZWlnaHQpfHxDLmNsaWVudFg8TWF0aC5mbG9vcihhLmxlZnQpfHxDLmNsaWVudFg+TWF0aC5jZWlsKGEubGVmdCthLndpZHRoKSlyZXR1cm4hMH0pKEMpJiYoci5ldmVudE1hbmFnZXIucmVtb3Zl''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihpLCJtb3VzZW1vdmUiLG0pLGUuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnModCl7Y29uc3R7cm9vdERvY3VtZW50OmV9PXRoaXMud290O3RoaXMubWFpbj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IHI9WyJ0b3AiLCJzdGFydCIsImJv''@;'; put 'put ''dHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBpPXRoaXMubWFpbi5zdHlsZTtpLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS50b3A9MCxpLmxlZnQ9MDtmb3IobGV0IG09MDttPDU7bSsrKXtjb25zdCBDPXJbbV0sUD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFk9Y2U9PnRoaXMuc2V0dGluZ3NbQ10m''@;'; put 'put ''JnRoaXMuc2V0dGluZ3NbQ11bY2VdP3RoaXMuc2V0dGluZ3NbQ11bY2VdOnQuYm9yZGVyW2NlXTtQLmNsYXNzTmFtZT1gd3RCb3JkZXIgJHt0aGlzLnNldHRpbmdzLmNsYXNzTmFtZXx8IiJ9YCx0aGlzLnNldHRpbmdzW0NdJiZ0aGlzLnNldHRpbmdzW0NdLmhpZGUmJihQLmNsYXNzTmFtZSs9''@;'; put 'put ''IiBoaWRkZW4iKSxpPVAuc3R5bGU7Y29uc3QgSj1ZKCJzdHlsZSIpO0o/KFsic3RhcnQiLCJlbmQiXS5pbmNsdWRlcyhDKT9QLmNsYXNzTmFtZSs9YCAke0VtZX0ke0p9LXZlcnRpY2FsYDpQLmNsYXNzTmFtZSs9YCAke0VtZX0ke0p9LWhvcml6b250YWxgLGkuc2V0UHJvcGVydHkoIi0taHQt''@;'; put 'put ''Y3VzdG9tLWJvcmRlci1zaXplIixgJHtZKCJ3aWR0aCIpfXB4YCksaS5zZXRQcm9wZXJ0eSgiLS1odC1jdXN0b20tYm9yZGVyLWNvbG9yIixZKCJjb2xvciIpKSk6aS5iYWNrZ3JvdW5kQ29sb3I9WSgiY29sb3IiKSxpLmhlaWdodD1gJHtZKCJ3aWR0aCIpfXB4YCxpLndpZHRoPWAke1koIndp''@;'; put 'put ''ZHRoIil9cHhgLHRoaXMubWFpbi5hcHBlbmRDaGlsZChQKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5v''@;'; put 'put ''ZGVzWzNdLHRoaXMudG9wU3R5bGU9dGhpcy50b3Auc3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVz''@;'; put 'put ''WzRdLHRoaXMuY29ybmVyLmNsYXNzTmFtZSs9IiBjb3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9YCR7dGhpcy5j''@;'; put 'put ''b3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0fXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlcj1bYCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNv''@;'; put 'put ''bG9yXS5qb2luKCIgIiksc3AoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTphfT10aGlzLndvdDtsZXQgYz1hLmJvcmRlcnNI''@;'; put 'put ''b2xkZXI7Y3x8KGM9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLmNsYXNzTmFtZT0iaHRCb3JkZXJzIixhLmJvcmRlcnNIb2xkZXI9YyxhLnNwcmVhZGVyLmFwcGVuZENoaWxkKGMpKSxjLmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25z''@;'; put 'put ''dHtyb290RG9jdW1lbnQ6dCx3dFNldHRpbmdzOmV9PXRoaXMud290LHI9ZS5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVyIiksaT1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1zaXplIiksYT1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRs''@;'; put 'put ''ZS1ib3JkZXItcmFkaXVzIiksYz1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLWNvbG9yIiksbT1yLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItd2lkdGgiKSxDPXIuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgi''@;'; put 'put ''Y2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1jb2xvciIpO3RoaXMuc2VsZWN0aW9uSGFuZGxlcz17dG9wOnQuY3JlYXRlRWxlbWVudCgiRElWIiksdG9wSGl0QXJlYTp0LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbTp0LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbUhpdEFyZWE6dC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJESVYiKX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1I''@;'; put 'put ''aXRBcmVhIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEu''@;'; put 'put ''Y2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0''@;'; put 'put ''aW9uSGFuZGxlcy50b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9LGFzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiNDBweCIs''@;'; put 'put ''d2lkdGg6IjQwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCg0MC8xLjUsMTApfXB4YH0sKGZlLEFlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYVtBZV09ZmUsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhW0FlXT1mZX0p''@;'; put 'put ''LGFzKHIuaXNDbGFzc2ljVGhlbWUoKT97cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjEwcHgiLHdpZHRoOiIxMHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJbnQoMTAvMS41LDEwKX1weGAsYmFja2dyb3VuZDoiI0Y1RjVGRiIsYm9yZGVyOiIxcHggc29saWQgIzQyODVjOCJ9Ontw''@;'; put 'put ''b3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDpgJHtpfXB4YCx3aWR0aDpgJHtpfXB4YCwiYm9yZGVyLXJhZGl1cyI6YCR7YX1weGAsYmFja2dyb3VuZDpgJHtjfWAsYm9yZGVyOmAke219cHggc29saWQgJHtDfWB9LChmZSxBZSk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRv''@;'; put 'put ''bVtBZV09ZmUsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbQWVdPWZlfSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3ApLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tKSx0aGlzLm1haW4uYXBw''@;'; put 'put ''ZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEpLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYSl9aXNQYXJ0UmFuZ2UodCxlKXtjb25zdCByPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0QXJlYVNlbGVj''@;'; put 'put ''dGlvbigpO3JldHVybiEoIXIuY2VsbFJhbmdlfHx0PT09ci5jZWxsUmFuZ2UudG8ucm93JiZlPT09ci5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbih0LGUscixpLGEsYyl7Y29uc3QgQz10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOlAsdG9wSGl0QXJlYTpZLGJvdHRvbTpKLGJvdHRvbUhpdEFyZWE6Y2V9PXRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMsZmU9cGFyc2VJbnQoUC5ib3JkZXJXaWR0aCwxMCksQWU9cGFyc2VJbnQoUC53aWR0aCwxMCksSGU9cGFy''@;'; put 'put ''c2VJbnQoWS53aWR0aCwxMCksWGU9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLHJ0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7UC50b3A9YCR7cGFyc2VJbnQoci1BZS0xLDEwKX1weGAsUFtDXT1gJHtwYXJzZUludChpLUFlLTEsMTApfXB4YCxZLnRvcD1gJHtwYXJzZUludChy''@;'; put 'put ''LUhlLzQqMywxMCl9cHhgLFlbQ109YCR7cGFyc2VJbnQoaS1IZS80KjMsMTApfXB4YDtjb25zdCBkdD1NYXRoLm1pbihwYXJzZUludChpK2EsMTApLFhlLUFlLTIqZmUpLGp0PU1hdGgubWluKHBhcnNlSW50KGkrYS1IZS80LDEwKSxYZS1IZS0yKmZlKTtKW0NdPWAke2R0fXB4YCxjZVtDXT1g''@;'; put 'put ''JHtqdH1weGA7Y29uc3QgRnQ9TWF0aC5taW4ocGFyc2VJbnQocitjLDEwKSxydC1BZS0yKmZlKSxwbj1NYXRoLm1pbihwYXJzZUludChyK2MtSGUvNCwxMCkscnQtSGUtMipmZSk7Si50b3A9YCR7RnR9cHhgLGNlLnRvcD1gJHtwbn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlz''@;'; put 'put ''aWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhQLmRpc3BsYXk9ImJsb2NrIixZLmRpc3BsYXk9ImJsb2NrIix0aGlzLmlzUGFydFJhbmdlKHQsZSk/KEouZGlzcGxheT0ibm9uZSIsY2UuZGlzcGxheT0ibm9uZSIpOihKLmRpc3BsYXk9ImJsb2NrIixjZS5kaXNw''@;'; put 'put ''bGF5PSJibG9jayIpKTooUC5kaXNwbGF5PSJub25lIixKLmRpc3BsYXk9Im5vbmUiLFkuZGlzcGxheT0ibm9uZSIsY2UuZGlzcGxheT0ibm9uZSIpLHQ9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfHxlPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPyhQLnpJbmRleD0iOTk5OSIsWS56SW5kZXg9Ijk5OTkiKTooUC56SW5kZXg9IiIsWS56SW5kZXg9IiIpfWFwcGVhcih0KXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtsZXRbZSxyLGksYV09dDtpZihlPDAmJmk8MHx8cjwwJiZhPDApcmV0dXJu''@;'; put 'put ''IHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtjb25zdHt3dFRhYmxlOmMscm9vdERvY3VtZW50Om0scm9vdFdpbmRvdzpDfT10aGlzLndvdCxQPWUhPT1pfHxyIT09YSxZPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmlzQ2xhc3NpY1RoZW1lKCksSj1jLmdl''@;'; put 'put ''dEZpcnN0UmVuZGVyZWRSb3coKSxjZT1jLmdldExhc3RSZW5kZXJlZFJvdygpLGZlPWMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLEFlPWMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7aWYoZmU8MCYmQWU8MHx8SjwwJiZjZTwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7bGV0IEhl''@;'; put 'put ''O2lmKFApe2lmKHI9TWF0aC5tYXgocixmZSksYT1NYXRoLm1pbihhLEFlKSxlPU1hdGgubWF4KGUsSiksaT1NYXRoLm1pbihpLGNlKSxhPHJ8fGk8ZSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO0hlPWMuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGUscikpfWVsc2Ug''@;'; put 'put ''aWYoSGU9Yy5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoZSxyKSksIU00KEhlKSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0IFhlPVA/Yy5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoaSxhKSk6SGUscnQ9RTEoSGUpLGR0PVA/RTEoWGUpOnJ0''@;'; put 'put ''LGp0PUUxKGMuVEFCTEUpLEZ0PXJ0LnRvcCxwbj1ydC5sZWZ0LG9uPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCBnbj0wLFpuPTA7aWYob24pe2NvbnN0IFpyPXB1KGMuVEFCTEUpLGJpPXB1KEhlKTtabj1wbitiaS1kdC5sZWZ0LGduPUMuaW5uZXJXaWR0''@;'; put 'put ''aC1wbi1iaS0oQy5pbm5lcldpZHRoLWp0LmxlZnQtWnIpLTF9ZWxzZSBabj1kdC5sZWZ0K3B1KFhlKS1wbixnbj1wbi1qdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGUsaSkpe2NvbnN0IGJpPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMiLHIs''@;'; put 'put ''YSxlLGp0KTtsZXQgU2k9bnVsbDtiaSYmKFtTaSxnbixabl09YmkpLFNpJiYoSGU9U2kpfWxldCBHcj1GdC1qdC50b3AtMSxFcj1kdC50b3ArSHUoWGUpLUZ0O2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChyLGEpKXtjb25zdCBiaT10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJy''@;'; put 'put ''b3dzIixlLGkscixqdCk7bGV0IFNpPW51bGw7YmkmJihbU2ksR3IsRXJdPWJpKSxTaSYmKEhlPVNpKX1jb25zdCBUcj1DLmdldENvbXB1dGVkU3R5bGUoSGUpO3BhcnNlSW50KFRyLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoR3IrPTEsRXI9RXI+MD9Fci0xOjApLHBhcnNlSW50KFRyW29uPyJi''@;'; put 'put ''b3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJihnbis9MSxabj1abj4wP1puLTE6MCk7Y29uc3QgaXI9b24/InJpZ2h0IjoibGVmdCIscGk9TWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMudG9wU3R5bGUudG9wPWAke0dyfXB4YCx0''@;'; put 'put ''aGlzLnRvcFN0eWxlW2lyXT1gJHtnbn1weGAsdGhpcy50b3BTdHlsZS53aWR0aD1gJHtabitwaX1weGAsdGhpcy50b3BTdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRvcD1gJHtHcn1weGAsdGhpcy5zdGFydFN0eWxlW2lyXT1gJHtnbn1weGAsdGhpcy5zdGFydFN0eWxl''@;'; put 'put ''LmhlaWdodD1gJHtFcitwaX1weGAsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmJvdHRvbVN0eWxlLnRvcD1gJHtHcitFci1wYXJzZUludCh0aGlzLmJvdHRvbVN0eWxlLmhlaWdodCwxMCkrcGl9cHhgLHRoaXMuYm90dG9tU3R5bGVbaXJdPWAke2dufXB4YCx0aGlzLmJv''@;'; put 'put ''dHRvbVN0eWxlLndpZHRoPWAke1puK3BpfXB4YCx0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRvcD1gJHtHcn1weGAsdGhpcy5lbmRTdHlsZVtpcl09YCR7Z24rWm4tcGFyc2VJbnQodGhpcy5lbmRTdHlsZS53aWR0aCwxMCkrcGl9cHhgLHRoaXMuZW5k''@;'; put 'put ''U3R5bGUuaGVpZ2h0PWAke0VyK3BpfXB4YCx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgRG49dGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZTtEbj0iZnVuY3Rpb24iPT10eXBlb2YgRG4/RG4odGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTpEbjtjb25zdCBBcj10''@;'; put 'put ''aGlzLndvdC5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLGksYSwhMSwicmVuZGVyIik7bGV0W2VyLERyXT1baSxhXTtpZihBciYmQXJyYXkuaXNBcnJheShBcikmJihbLCxlcixEcl09QXIpLHNwKCl8fCFEbnx8dGhpcy5pc1BhcnRSYW5nZShlcixEcikpdGhpcy5jb3JuZXJT''@;'; put 'put ''dHlsZS5kaXNwbGF5PSJub25lIjtlbHNle3RoaXMuY29ybmVyU3R5bGUudG9wPUdyK0VyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5lclN0eWxlW2lyXT1nbitabit0aGlzLmNvcm5lckNlbnRl''@;'; put 'put ''clBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckxlZnRXaWR0aD1g''@;'; put 'put ''JHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHls''@;'; put 'put ''ZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBacj1nQyhjLlRBQkxFKTtjb25zdCBiaT1acj09PUM7YmkmJihacj1tLmRvY3VtZW50RWxlbWVudCk7Y29uc3QgU2k9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsMTApLTEsanI9''@;'; put 'put ''TWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSxUaT1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yKTtpZihhPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl7Y29u''@;'; put 'put ''c3QgbGE9Ymk/WGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDpYZS5vZmZzZXRMZWZ0O2xldCBGcj0hMSxvdD0wO2lmKG9uPyhvdD1sYS1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixGcj1vdDwwKToob3Q9bGErcHUoWGUpK3BhcnNlSW50KHRoaXMu''@;'; put 'put ''Y29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLEZyPW90Pj1hSihacikpLEZyKXtjb25zdCBJdD1NYXRoLmZsb29yKGduK1puK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtanItU2kpO1k/KHRoaXMuY29ybmVyU3R5bGVbaXJdPWAke0l0fXB4YCx0aGlzLmNvcm5lclN0eWxlW29u''@;'; put 'put ''PyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCk6dGhpcy5jb3JuZXJTdHlsZVtpcl09SXQtMSsicHgifX1pZihpPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSYmKGJpP1hlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDpYZS5vZmZzZXRUb3Ap''@;'; put 'put ''K0h1KFhlKStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzI+PW1DKFpyKSl7Y29uc3QgSXQ9TWF0aC5mbG9vcihHcitFcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LVRpLVNpKTtZPyh0aGlzLmNvcm5lclN0eWxlLnRvcD1gJHtJdH1weGAsdGhpcy5j''@;'; put 'put ''b3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD0wKTp0aGlzLmNvcm5lclN0eWxlLnRvcD1JdC0xKyJweCJ9dGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJibG9jayJ9c3AoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy51cGRhdGVNdWx0''@;'; put 'put ''aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbihpLGEsR3IsZ24sWm4sRXIpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQodCxlKXtyZXR1cm4gdD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpJiZlPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3co''@;'; put 'put ''KX1pc0VudGlyZVJvd1NlbGVjdGVkKHQsZSl7cmV0dXJuIHQ9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSYmZT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9Z2V0RGltZW5zaW9uc0Zyb21IZWFkZXIodCxlLHIsaSxhKXtjb25z''@;'; put 'put ''dHt3dFRhYmxlOmN9PXRoaXMud290LG09Yy53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bGV0IEM9bnVsbCxQPW51bGwsWT1udWxsLEo9bnVsbCxjZT1udWxsLGZlPW51bGwsQWU9bnVsbCxIZT1udWxsO3N3aXRjaCh0KXtjYXNlInJvd3MiOkM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRSb3dI''@;'; put 'put ''ZWFkZXIoLi4uYXJndW1lbnRzKX0sUD1mdW5jdGlvbigpe3JldHVybiBIdSguLi5hcmd1bWVudHMpfSxZPSJodF9fc2VsZWN0aW9uLS1yb3dzIixmZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOkM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRDb2x1bW5IZWFkZXIoLi4uYXJndW1lbnRzKX0s''@;'; put 'put ''UD1mdW5jdGlvbigpe3JldHVybiBwdSguLi5hcmd1bWVudHMpfSxZPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIixmZT0ibGVmdCJ9aWYobS5jbGFzc0xpc3QuY29udGFpbnMoWSkpe2NvbnN0IFhlPXRoaXMud290LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoQWU9Qyhl''@;'; put 'put ''LFhlLWkpLEhlPUMocixYZS1pKSwhQWV8fCFIZSlyZXR1cm4hMTtjb25zdCBydD1FMShBZSksZHQ9RTEoSGUpO3JldHVybiBBZSYmSGUmJihKPXJ0W2ZlXS1hW2ZlXS0xLGNlPWR0W2ZlXStQKEhlKS1ydFtmZV0pLFtBZSxKLGNlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZSh0LGUpe2Nv''@;'; put 'put ''bnN0IHI9dGhpc1t0XS5zdHlsZSxpPWVbdF07IWl8fGkuaGlkZT90aSh0aGlzW3RdLCJoaWRkZW4iKToodm8odGhpc1t0XSwiaGlkZGVuIikmJkhhKHRoaXNbdF0sImhpZGRlbiIpLHIuYmFja2dyb3VuZENvbG9yPWkuY29sb3IsKCJ0b3AiPT09dHx8ImJvdHRvbSI9PT10KSYmKHIuaGVpZ2h0''@;'; put 'put ''PWAke2kud2lkdGh9cHhgKSwoInN0YXJ0Ij09PXR8fCJlbmQiPT09dCkmJihyLndpZHRoPWAke2kud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUodCl7Y29uc3Qgcj10aGlzW3RdLnN0eWxlO3IuYmFja2dyb3VuZENvbG9yPSIjMDAwIixyLndpZHRoPSIxcHgiLHIuaGVp''@;'; put 'put ''Z2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKHQsZSl7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZSh0KSxlP3RpKHRoaXNbdF0sImhpZGRlbiIpOkhhKHRoaXNbdF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21T''@;'; put 'put ''dHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLHNwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikm''@;'; put 'put ''Jih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxl''@;'; put 'put ''Y3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19O2Z1bmN0aW9uIEVDKG4s''@;'; put 'put ''dCxlKXtBbWUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIEFtZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gbXMobix0KXtyZXR1cm4g''@;'; put 'put ''bi5nZXQoZVEobix0KSl9ZnVuY3Rpb24ga21lKG4sdCxlKXtyZXR1cm4gbi5zZXQoZVEobix0KSxlKSxlfWZ1bmN0aW9uIGVRKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgaWQ9bmV3IFdlYWtNYXAsSWg9bmV3IFdlYWtNYXAsdFE9bmV3IFdlYWtNYXAsbWs9bmV3IFdlYWtNYXAsblE9bmV3IFdlYWtNYXAsQnY9bmV3IFdlYWtNYXAsRG1lPW5ldyBXZWFrU2V0O2Ns''@;'; put 'put ''YXNzIEhjdHtjb25zdHJ1Y3Rvcih0KXsoZnVuY3Rpb24gRmN0KG4sdCl7QW1lKG4sdCksdC5hZGQobil9KSh0aGlzLERtZSksRUModGhpcyxpZCx2b2lkIDApLEVDKHRoaXMsSWgsdm9pZCAwKSxFQyh0aGlzLHRRLG5ldyBJY3QpLEVDKHRoaXMsbWssbmV3IFdlYWtNYXApLEVDKHRoaXMsblEs''@;'; put 'put ''bmV3IFdlYWtTZXQpLEVDKHRoaXMsQnYsbmV3IE1hcCksa21lKEloLHRoaXMsdCl9c2V0QWN0aXZlT3ZlcmxheSh0KXtyZXR1cm4ga21lKGlkLHRoaXMsdCksbXModFEsdGhpcykuc2V0QWN0aXZlT3ZlcmxheShtcyhpZCx0aGlzKSksbXMobWssdGhpcykuaGFzKG1zKGlkLHRoaXMpKXx8bXMo''@;'; put 'put ''bWssdGhpcykuc2V0KG1zKGlkLHRoaXMpLG5ldyBTZXQpLHRoaXN9Z2V0Rm9jdXNTZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW1zKEloLHRoaXMpP21zKEloLHRoaXMpLmdldEZvY3VzKCk6bnVsbH1nZXRBcmVhU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1tcyhJaCx0aGlzKT9tcyhJaCx0''@;'; put 'put ''aGlzKS5jcmVhdGVMYXllcmVkQXJlYSgpOm51bGx9Z2V0Qm9yZGVySW5zdGFuY2UodCl7aWYoIXQuc2V0dGluZ3MuYm9yZGVyKXJldHVybiBudWxsO2lmKG1zKEJ2LHRoaXMpLmhhcyh0KSl7Y29uc3Qgcj1tcyhCdix0aGlzKS5nZXQodCk7aWYoci5oYXMobXMoaWQsdGhpcykpKXJldHVybiBy''@;'; put 'put ''LmdldChtcyhpZCx0aGlzKSk7Y29uc3QgaT1uZXcgVG1lKG1zKGlkLHRoaXMpLHQuc2V0dGluZ3MpO3JldHVybiByLnNldChtcyhpZCx0aGlzKSxpKSxpfWNvbnN0IGU9bmV3IFRtZShtcyhpZCx0aGlzKSx0LnNldHRpbmdzKTtyZXR1cm4gbXMoQnYsdGhpcykuc2V0KHQsbmV3IE1hcChbW21z''@;'; put 'put ''KGlkLHRoaXMpLGVdXSkpLGV9Z2V0Qm9yZGVySW5zdGFuY2VzKHQpe3ZhciBlLHI7cmV0dXJuIEFycmF5LmZyb20obnVsbCE9PShlPW51bGw9PT0ocj1tcyhCdix0aGlzKS5nZXQodCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnZhbHVlcygpKSYmdm9pZCAwIT09ZT9lOltdKX1kZXN0cm95Qm9y''@;'; put 'put ''ZGVycyh0KXttcyhCdix0aGlzKS5nZXQodCkuZm9yRWFjaChlPT5lLmRlc3Ryb3koKSksbXMoQnYsdGhpcykuZGVsZXRlKHQpfXJlbmRlcih0KXtpZihudWxsPT09bXMoSWgsdGhpcykpcmV0dXJuO3QmJmVRKERtZSx0aGlzLE5jdCkuY2FsbCh0aGlzKTtjb25zdCBlPUFycmF5LmZyb20obXMo''@;'; put 'put ''SWgsdGhpcykpLHI9bmV3IE1hcCxpPW5ldyBNYXA7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspe2NvbnN0IGM9ZVthXSx7Y2xhc3NOYW1lOm0saGVhZGVyQXR0cmlidXRlczpDLGNyZWF0ZUxheWVyczpQLHNlbGVjdGlvblR5cGU6WX09Yy5zZXR0aW5nczttcyhuUSx0aGlzKS5oYXMoYyl8''@;'; put 'put ''fChtcyhuUSx0aGlzKS5hZGQoYyksYy5hZGRMb2NhbEhvb2soImRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3lCb3JkZXJzKGMpKSk7Y29uc3QgSj10aGlzLmdldEJvcmRlckluc3RhbmNlKGMpO2lmKGMuaXNFbXB0eSgpKXtKPy5kaXNhcHBlYXIoKTtjb250aW51ZX1tJiZtcyh0USx0aGlzKS5z''@;'; put 'put ''ZXRBY3RpdmVTZWxlY3Rpb24oYykuc2NhbigpLmZvckVhY2goQWU9PntpZihyLmhhcyhBZSkpe2NvbnN0IEhlPXIuZ2V0KEFlKTtIZS5oYXMobSkmJiEwPT09UD9IZS5zZXQobSxIZS5nZXQobSkrMSk6SGUuc2V0KG0sMSl9ZWxzZSByLnNldChBZSxuZXcgTWFwKFtbbSwxXV0pKTtDJiYoaS5o''@;'; put 'put ''YXMoQWUpfHxpLnNldChBZSxbXSksIlRIIj09PUFlLm5vZGVOYW1lJiZpLmdldChBZSkucHVzaCguLi5DKSl9KTtjb25zdCBjZT1jLmdldENvcm5lcnMoKTttcyhpZCx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIixjZSxZKSxKPy5hcHBlYXIoY2UpfXIuZm9yRWFjaCgo''@;'; put 'put ''YSxjKT0+e3ZhciBtO2NvbnN0IEM9QXJyYXkuZnJvbShhKS5tYXAoUD0+e2xldFtZLEpdPVA7cmV0dXJuIDE9PT1KP1k6W1ksLi4uQXJyYXkuZnJvbSh7bGVuZ3RoOkotMX0sKGNlLGZlKT0+YCR7WX0tJHtmZSsxfWApXX0pLmZsYXQoKTtDLmZvckVhY2goUD0+bXMobWssdGhpcykuZ2V0KG1z''@;'; put 'put ''KGlkLHRoaXMpKS5hZGQoUCkpLHRpKGMsQyksIlREIj09PWMubm9kZU5hbWUmJkFycmF5LmlzQXJyYXkobnVsbD09PShtPW1zKEloLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLmNlbGxBdHRyaWJ1dGVzKSYmWmEoYyxtcyhJaCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1''@;'; put 'put ''dGVzKX0pLEFycmF5LmZyb20oaS5rZXlzKCkpLmZvckVhY2goYT0+e1phKGEsWy4uLmkuZ2V0KGEpXSl9KX19ZnVuY3Rpb24gTmN0KCl7Y29uc3Qgbj1tcyhtayx0aGlzKS5nZXQobXMoaWQsdGhpcykpLHQ9bXMoaWQsdGhpcykud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92''@;'; put 'put ''ZUNlbGxDbGFzc05hbWVzIik7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyluLmFkZCh0W2VdKTtuLmZvckVhY2goZT0+e3ZhciByLGk7Y29uc3QgYT1tcyhpZCx0aGlzKS53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2V9YCk7bGV0IGM9''@;'; put 'put ''W107QXJyYXkuaXNBcnJheShudWxsPT09KHI9bXMoSWgsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2VsbEF0dHJpYnV0ZXMpJiYoYz1tcyhJaCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzLm1hcChtPT5tWzBdKSksQXJyYXkuaXNBcnJheShudWxsPT09KGk9bXMo''@;'; put 'put ''SWgsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaGVhZGVyQXR0cmlidXRlcykmJihjPVsuLi5jLC4uLm1zKEloLHRoaXMpLm9wdGlvbnMuaGVhZGVyQXR0cmlidXRlcy5tYXAobT0+bVswXSldKTtmb3IobGV0IG09MCxDPWEubGVuZ3RoO208QzttKyspSGEoYVttXSxlKSxD''@;'; put 'put ''NChhW21dLGMpfSksbi5jbGVhcigpfWNsYXNzIFZjdCBleHRlbmRzIFlKe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxuZXcgWGx0KGUpKTtjb25zdCByPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1uZXcgcWx0KHRoaXMuZ2V0VGFibGVE''@;'; put 'put ''YW8oKSxyLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9bmV3IGtjdCh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLnNlbGVjdGlv''@;'; put 'put ''bk1hbmFnZXI9bmV3IEhjdCh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpKSx0aGlzLnd0RXZlbnQ9bmV3IEI1ZShyLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFn''@;'; put 'put ''ZXIpLHRoaXMud3RPdmVybGF5cz1uZXcgR2x0KHRoaXMscix0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBv''@;'; put 'put ''cnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IGU9W10scj1bXTthcyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaSxhKT0+e3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGEpLmxlbmd0aCYmci5wdXNoKGkpLGUucHVz''@;'; put 'put ''aChpKX0pLEhhKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsZSksdGkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxyKX1nZXRPdmVybGF5QnlOYW1lKHQpe3ZhciBlO2lmKCFxNWUuaW5jbHVkZXModCkpcmV0dXJuIG51bGw7Y29uc3Qgcj10LnJl''@;'; put 'put ''cGxhY2UoL18oW2Etel0pL2csaT0+aVsxXS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gbnVsbCE9PShlPXRoaXMud3RPdmVybGF5c1tgJHtyfU92ZXJsYXlgXSkmJnZvaWQgMCE9PWU/ZTpudWxsfWdldFZpZXdwb3J0RGFvKCl7Y29uc3QgdD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIHR9''@;'; put 'put ''LGdldCB0b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gdC53dE92ZXJsYXlzLnRvcE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiB0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gdC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IHRvcFBhcmVudE9mZnNldCgpe3JldHVybiB0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRUYWJsZVBhcmVudE9m''@;'; put 'put ''ZnNldCgpfSxnZXQgaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiB0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCBpbmxpbmVTdGFydFBhcmVudE9mZnNldCgpe3JldHVybiB0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVy''@;'; put 'put ''bGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIHQud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIHQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCBib3R0b21PdmVybGF5KCl7cmV0''@;'; put 'put ''dXJuIHQud3RPdmVybGF5cy5ib3R0b21PdmVybGF5fX19fWNsYXNzIHJRe2NvbnN0cnVjdG9yKHQpe3QgaW5zdGFuY2VvZiBZSj90aGlzLl93b3Q9dDp0aGlzLl9pbml0RnJvbVNldHRpbmdzKHQpfV9pbml0RnJvbVNldHRpbmdzKHQpe3QuZmFjYWRlPWU9Pntjb25zdCByPW5ldyByUShlKTty''@;'; put 'put ''ZXR1cm4oKT0+cn0sdGhpcy5fd290PW5ldyBWY3QodC50YWJsZSx0KX1nZXQgZ3VpZCgpe3JldHVybiB0aGlzLl93b3QuZ3VpZH1nZXQgcm9vdERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290RG9jdW1lbnR9Z2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d290LmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9Z2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3N9Z2V0IGNsb25lU291cmNlKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZVNvdXJjZX1nZXQgY2xvbmVPdmVybGF5KCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJs''@;'; put 'put ''YXl9Z2V0IHNlbGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LnNlbGVjdGlvbk1hbmFnZXJ9Z2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0Vmlld3BvcnR9Z2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gdGhpcy5fd290Lnd0T3ZlcmxheXN9Z2V0IHd0VGFibGUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fd290Lnd0VGFibGV9Z2V0IHd0RXZlbnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0RXZlbnR9Z2V0IHd0U2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNjcm9sbH1nZXQgZHJhd24oKXtyZXR1cm4gdGhpcy5fd290LmRyYXdufXNldCBkcmF3bih0KXt0aGlzLl93b3QuZHJh''@;'; put 'put ''d249dH1nZXQgYWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmFjdGl2ZU92ZXJsYXlOYW1lfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKHQpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0''@;'; put 'put ''ZWQ9dH1nZXQgbGFzdE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3Zlcih0KXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj10fWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmd9c2V0''@;'; put 'put ''IG1vbWVudHVtU2Nyb2xsaW5nKHQpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz10fWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKHQpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9dH1nZXQgZG9tQmluZGluZ3MoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKHQpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz10fWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290''@;'; put 'put ''LmV2ZW50TWFuYWdlcn1jcmVhdGVDZWxsQ29vcmRzKHQsZSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29vcmRzKHQsZSl9Y3JlYXRlQ2VsbFJhbmdlKHQsZSxyKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZSh0LGUscil9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJh''@;'; put 'put ''dyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdldENlbGwodCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKHQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xs''@;'; put 'put ''Vmlld3BvcnQodCxlLHIpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnQodCxlLHIpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KHQsZSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseSh0LGUpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseSh0LGUp''@;'; put 'put ''e3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KHQsZSl9Z2V0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5''@;'; put 'put ''cGU6Im1hc3RlciJ9Z2V0T3ZlcmxheUJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5fd290LmdldE92ZXJsYXlCeU5hbWUodCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKHQsZSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZSh0LGUpLHRoaXN9Z2V0U2V0dGluZyh0LGUscixpLGEpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKHQsZSxyLGksYSl9aGFzU2V0dGluZyh0KXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyh0KX1k''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gSW1lKG4pe2xldHtpc1NoaWZ0S2V5OnQsaXNMZWZ0Q2xpY2s6ZSxpc1JpZ2h0Q2xpY2s6cixjb29yZHM6aSxzZWxlY3Rpb246YSxjb250cm9sbGVyOmMsY2VsbENvb3Jkc0ZhY3Rvcnk6bX09bjtjb25zdCBDPWEuaXNTZWxl''@;'; put 'put ''Y3RlZCgpP2EuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLFA9YS5pc1NlbGVjdGVkQnlDb3JuZXIoKSxZPWEuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoYS5tYXJrU291cmNlKCJtb3VzZSIpLHQmJkMpaS5yb3c+PTAmJmkuY29sPj0wJiYhYy5jZWxsP2Euc2V0UmFuZ2VF''@;'; put 'put ''bmQoaSk6KFB8fFkpJiZpLnJvdz49MCYmaS5jb2w+PTAmJiFjLmNlbGw/YS5zZXRSYW5nZUVuZChtKGkucm93LGkuY29sKSk6UCYmaS5yb3c8MCYmIWMuY29sdW1uP2Euc2V0UmFuZ2VFbmQobShDLnRvLnJvdyxpLmNvbCkpOlkmJmkuY29sPDAmJiFjLnJvdz9hLnNldFJhbmdlRW5kKG0oaS5y''@;'; put 'put ''b3csQy50by5jb2wpKTooIVAmJiFZJiZpLmNvbDwwfHxQJiZpLmNvbDwwKSYmIWMucm93P2Euc2VsZWN0Um93cyhNYXRoLm1heChDLmZyb20ucm93LDApLGkucm93LGkuY29sKTooIVAmJiFZJiZpLnJvdzwwfHxZJiZpLnJvdzwwKSYmIWMuY29sdW1uJiZhLnNlbGVjdENvbHVtbnMoTWF0aC5t''@;'; put 'put ''YXgoQy5mcm9tLmNvbCwwKSxpLmNvbCxpLnJvdyk7ZWxzZXtjb25zdCBKPSFhLmluSW5TZWxlY3Rpb24oaSksY2U9ZXx8ciYmSjtpLnJvdzwwJiZpLmNvbD49MCYmIWMuY29sdW1uP2NlJiZhLnNlbGVjdENvbHVtbnMoaS5jb2wsaS5jb2wsaS5yb3cpOmkuY29sPDAmJmkucm93Pj0wJiYhYy5y''@;'; put 'put ''b3c/Y2UmJmEuc2VsZWN0Um93cyhpLnJvdyxpLnJvdyxpLmNvbCk6aS5jb2w+PTAmJmkucm93Pj0wJiYhYy5jZWxsP2NlJiZhLnNldFJhbmdlU3RhcnQoaSk6aS5jb2w8MCYmaS5yb3c8MCYmYS5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwLGZvY3VzUG9zaXRp''@;'; put 'put ''b246e3JvdzowLGNvbDowfX0pfWEubWFya0VuZFNvdXJjZSgpfWZ1bmN0aW9uIFJtZShuKXtsZXR7aXNMZWZ0Q2xpY2s6dCxzZWxlY3Rpb246ZSxjZWxsUmFuZ2VNYXBwZXI6cn09bjtpZighdHx8Im11bHRpcGxlIiE9PWUuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSlyZXR1cm47Y29uc3QgaT1l''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2UoKSxhPWkuY2xvbmUoKS5tYXAobT0+ci50b1JlbmRlcmFibGUobSkpLGM9YS5jdXJyZW50KCk7aWYoYS5zaXplKCk+MSYmIWMuaXNIZWFkZXIoKSYmIWUuaXNNdWx0aXBsZShjKSl7Y29uc3QgbT1hLmZpbmRBbGwoYyk7bS5sZW5ndGg9PT1hLnNpemUoKT8oaS5w''@;'; put 'put ''b3AoKSxlLnJlZnJlc2goKSk6bS5sZW5ndGg+MSYmKGkucmVtb3ZlTGF5ZXJzKG0ubWFwKEM9PntsZXR7bGF5ZXI6UH09QztyZXR1cm4gUH0pKSxlLnJlZnJlc2goKSl9fWNvbnN0IGpjdD1uZXcgTWFwKFtbInRvdWNoc3RhcnQiLEltZV0sWyJ0b3VjaGVuZCIsUm1lXSxbIm1vdXNlZG93biIs''@;'; put 'put ''SW1lXSxbIm1vdXNlb3ZlciIsZnVuY3Rpb24gQmN0KG4pe2xldHtpc0xlZnRDbGljazp0LGNvb3JkczplLHNlbGVjdGlvbjpyLGNvbnRyb2xsZXI6aSxjZWxsQ29vcmRzRmFjdG9yeTphfT1uO2lmKCF0KXJldHVybjtjb25zdCBjPXIuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksbT1yLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvbHVtbkhlYWRlcigpLEM9ci50YWJsZVByb3BzLmNvdW50Q29scygpLFA9ci50YWJsZVByb3BzLmNvdW50Um93cygpO3IubWFya1NvdXJjZSgibW91c2UiKSxtJiYhaS5jb2x1bW4/ci5zZXRSYW5nZUVuZChhKFAtMSxlLmNvbCkpOmMmJiFpLnJvdz9yLnNldFJhbmdlRW5kKGEo''@;'; put 'put ''ZS5yb3csQy0xKSk6aS5jZWxsfHxyLnNldFJhbmdlRW5kKGUpLHIubWFya0VuZFNvdXJjZSgpfV0sWyJtb3VzZXVwIixSbWVdXSk7ZnVuY3Rpb24gaVEobix0KXtqY3QuZ2V0KG4udHlwZSkoe2lzU2hpZnRLZXk6bi5zaGlmdEtleSxpc0xlZnRDbGljazpoTihuKXx8InRvdWNoc3RhcnQiPT09''@;'; put 'put ''bi50eXBlLGlzUmlnaHRDbGljazpuOChuKSwuLi50fSl9Y29uc3QgTG1lPW5ldyBXZWFrTWFwLGFRPVN5bWJvbCgicm9vdEluc3RhbmNlIik7ZnVuY3Rpb24gazQobil7cmV0dXJuIExtZS5oYXMobil9ZnVuY3Rpb24gYTgobix0LGUpe09tZShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gT21l''@;'; put 'put ''KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBvOChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gWmN0KG4pe3ZhciB0PWZ1bmN0aW9uIFlj''@;'; put 'put ''dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0''@;'; put 'put ''LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gTnUobix0KXtyZXR1cm4gbi5nZXQoVEMobix0KSl9ZnVuY3Rpb24gUmgobix0LGUpe3JldHVybiBuLnNldChUQyhuLHQpLGUpLGV9ZnVuY3Rpb24gVEMobix0LGUp''@;'; put 'put ''e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBvUT1uZXcgV2Vha01hcCxBTj1uZXcg''@;'; put 'put ''V2Vha01hcCxrTj1uZXcgV2Vha01hcCxfNT1uZXcgV2Vha01hcCxkcD1uZXcgV2Vha01hcCxzUT1uZXcgV2Vha01hcCxsUT1uZXcgV2Vha01hcCxBQz1uZXcgV2Vha01hcCx2az1uZXcgV2Vha1NldDtmdW5jdGlvbiBQbWUoKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5ob3Qucm9vdEVsZW1lbnQu''@;'; put 'put ''Z2V0QXR0cmlidXRlKFFIKClbMF0pLDEwKX1mdW5jdGlvbiAkY3Qobil7Y29uc3QgdD1UQyh2ayx0aGlzLFBtZSkuY2FsbCh0aGlzKStuO1phKHRoaXMuaG90LnJvb3RFbGVtZW50LC4uLlFIKHQpKX1mdW5jdGlvbiBLY3QoKXtjb25zdCBuPXRoaXMuaG90LnJvb3RFbGVtZW50O3RoaXMuaGFz''@;'; put 'put ''VmVydGljYWxTY3JvbGwoKT90aShuLCJodEhhc1Njcm9sbFkiKTpIYShuLCJodEhhc1Njcm9sbFkiKSx0aGlzLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpP3RpKG4sImh0VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdyIpOkhhKG4sImh0VmVydGljYWxseVNjcm9sbGFibGVC''@;'; put 'put ''eVdpbmRvdyIpLHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbCgpP3RpKG4sImh0SGFzU2Nyb2xsWCIpOkhhKG4sImh0SGFzU2Nyb2xsWCIpLHRoaXMuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT90aShuLCJodEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdyIpOkhhKG4s''@;'; put 'put ''Imh0SG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93Iil9Y29uc3QgWGN0PWNsYXNzIEdjdHtjb25zdHJ1Y3Rvcih0KXsoZnVuY3Rpb24gV2N0KG4sdCl7T21lKG4sdCksdC5hZGQobil9KSh0aGlzLHZrKSxvOCh0aGlzLCJob3QiLHZvaWQgMCksbzgodGhpcywiZXZlbnRNYW5hZ2VyIix2''@;'; put 'put ''b2lkIDApLG84KHRoaXMsInNldHRpbmdzIix2b2lkIDApLG84KHRoaXMsIlRIRUFEIix2b2lkIDApLG84KHRoaXMsIlRCT0RZIix2b2lkIDApLG84KHRoaXMsIl93dCIsdm9pZCAwKSxvOCh0aGlzLCJhY3RpdmVXdCIsdm9pZCAwKSxhOCh0aGlzLG9RLDApLGE4KHRoaXMsQU4sMCksbzgodGhp''@;'; put 'put ''cywicG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplIiwhMSksYTgodGhpcyxrTiwhMSksYTgodGhpcyxfNSx2b2lkIDApLGE4KHRoaXMsZHAsdm9pZCAwKSxhOCh0aGlzLHNRLDApLGE4KHRoaXMsbFEsMCksYTgodGhpcyxBQyxudWxsKSx0aGlzLmhvdD10LHRoaXMuZXZlbnRNYW5hZ2VyPW5l''@;'; put 'put ''dyBaZih0aGlzLmhvdCksdGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5pbml0aWFsaXplV2Fsa29udGFibGUoKX1yZW5kZXIoKXtpZighdGhpcy5ob3QuaXNSZW5kZXJTdXNwZW5kZWQo''@;'; put 'put ''KSl7Y29uc3QgdD10aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlciIsdCksdGhpcy5fd3QuZHJhdyghdCksVEModmssdGhpcyxLY3QpLmNhbGwodGhpcyksdGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUmJih0aGlzLnBvc3Rwb25l''@;'; put 'put ''ZEFkanVzdEVsZW1lbnRzU2l6ZT0hMSx0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSghMCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbmRlciIsdCksdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSExfX1hZGp1c3RFbGVtZW50c1NpemUoKXthcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdP3RoaXMuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCk6dGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITB9Z2V0Q2VsbEF0Q29vcmRzKHQsZSl7Y29uc3Qgcj10aGlzLl93dC5nZXRDZWxsKHQsZSk7cmV0dXJuIHI8''@;'; put 'put ''MD9udWxsOnJ9c2Nyb2xsVmlld3BvcnQodCxlLHIpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydCh0LGUscil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkodCxlKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkodCxlKX1zY3JvbGxWaWV3cG9ydFZl''@;'; put 'put ''cnRpY2FsbHkodCxlKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KHQsZSl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RWxlbWVudDp0LHJvb3REb2N1bWVudDplfT10aGlzLmhvdCxyPXQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO3ImJnQuc2V0QXR0cmlidXRl''@;'; put 'put ''KCJkYXRhLW9yaWdpbmFsc3R5bGUiLHIpLHRpKHQsImhhbmRzb250YWJsZSIpLFJoKGRwLHRoaXMsZS5jcmVhdGVFbGVtZW50KCJUQUJMRSIpKSx0aShOdShkcCx0aGlzKSwiaHRDb3JlIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSYmdGkoTnUoZHAsdGhpcyksdGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSksdGhpcy5zZXR0aW5ncy5hcmlhVGFncyYmKFphKE51KGRwLHRoaXMpLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLFphKHQsW1sicm9sZSIsInRyZWVncmlkIl0samdlKC0xKSxRSCh0aGlzLmhvdC5jb3VudENvbHMoKSksWyJh''@;'; put 'put ''cmlhLW11bHRpc2VsZWN0YWJsZSIsInRydWUiXV0pKSx0aGlzLlRIRUFEPWUuY3JlYXRlRWxlbWVudCgiVEhFQUQiKSxOdShkcCx0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLlRIRUFEKSx0aGlzLlRCT0RZPWUuY3JlYXRlRWxlbWVudCgiVEJPRFkiKSxOdShkcCx0aGlzKS5hcHBlbmRDaGlsZCh0''@;'; put 'put ''aGlzLlRCT0RZKSx0aGlzLmhvdC50YWJsZT1OdShkcCx0aGlzKSx0aGlzLmhvdC5jb250YWluZXIuaW5zZXJ0QmVmb3JlKE51KGRwLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5maXJzdENoaWxkKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RXcmFwcGVyRWxlbWVudDp0LHJvb3RFbGVt''@;'; put 'put ''ZW50OmUscm9vdERvY3VtZW50OnIsc2VsZWN0aW9uOmkscm9vdFdpbmRvdzphfT10aGlzLmhvdCxjPXIuZG9jdW1lbnRFbGVtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwibW91c2Vkb3duIixDPT57Umgoa04sdGhpcywhMCksdGhpcy5pc1RleHRTZWxlY3Rpb25B''@;'; put 'put ''bGxvd2VkKEMudGFyZ2V0KXx8KHNKKGEpLEMucHJldmVudERlZmF1bHQoKSxhLmZvY3VzKCkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJtb3VzZXVwIiwoKT0+e1JoKGtOLHRoaXMsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJt''@;'; put 'put ''b3VzZW1vdmUiLEM9PntOdShrTix0aGlzKSYmIXRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChDLnRhcmdldCkmJih0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZzSihhKSxDLnByZXZlbnREZWZhdWx0KCkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihj''@;'; put 'put ''LCJrZXl1cCIsQz0+e2kuaXNJblByb2dyZXNzKCkmJiFDLnNoaWZ0S2V5JiZpLmZpbmlzaCgpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihjLCJtb3VzZXVwIixDPT57aS5pc0luUHJvZ3Jlc3MoKSYmaE4oQykmJmkuZmluaXNoKCksUmgoXzUsdGhpcywhMSk7Y29uc3Qg''@;'; put 'put ''UD11TihyLmFjdGl2ZUVsZW1lbnQpO2VrKHIuYWN0aXZlRWxlbWVudCkmJiFQfHwoUHx8IWkuaXNTZWxlY3RlZCgpJiYhaS5pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKSYmISh0Pz9lKS5jb250YWlucyhDLnRhcmdldCkmJiFuOChDKSkmJnRoaXMuaG90LnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGMsImNvbnRleHRtZW51IixDPT57aS5pc0luUHJvZ3Jlc3MoKSYmbjgoQykmJihpLmZpbmlzaCgpLFJoKF81LHRoaXMsITEpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYywidG91Y2hlbmQiLCgpPT57aS5pc0luUHJvZ3Jl''@;'; put 'put ''c3MoKSYmaS5maW5pc2goKSxSaChfNSx0aGlzLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYywibW91c2Vkb3duIixDPT57Y29uc3QgUD1DLnRhcmdldCxZPUMueHx8Qy5jbGllbnRYLEo9Qy55fHxDLmNsaWVudFk7bGV0IGNlPUMudGFyZ2V0O2lmKE51KF81LHRo''@;'; put 'put ''aXMpfHwhZXx8IXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e2hvbGRlcjpmZX09dGhpcy5fd3Qud3RUYWJsZTtpZihjZT09PWZlKXtjb25zdCBIZT1ndShyKTtpZihyLmVsZW1lbnRGcm9tUG9pbnQoWStIZSxKKSE9PWZlfHxyLmVsZW1lbnRGcm9tUG9pbnQoWSxKK0hlKSE9PWZlKXJldHVy''@;'; put 'put ''bn1lbHNlIGZvcig7Y2UhPT1jOyl7aWYobnVsbD09PWNlKXtpZihDLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZihjZT09PWUpcmV0dXJuO2NlPWNlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90''@;'; put 'put ''aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhQKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk6dGhpcy5ob3QuZGVzdHJveUVkaXRvcighMSwhMSl9KTtsZXQgbT1nNShhKTtmb3IoO251bGwhPT1tOyl0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKG0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLmhvdC51bmxpc3RlbigpfSksbT1nNShtKTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE51KGRwLHRoaXMpLCJzZWxlY3RzdGFydCIsQz0+e3Ro''@;'; put 'put ''aXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fGVrKEMudGFyZ2V0KXx8Qy5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0KXtsZXR7cm93OmUsY29sOnJ9PXQ7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKC4uLnRo''@;'; put 'put ''aXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGUscikpfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleCh0LGUpe2xldCByPXQ+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0KTp0LGk9ZT49MD90''@;'; put 'put ''aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGUpOmU7cmV0dXJuIG51bGw9PT1yJiYocj10KSxudWxsPT09aSYmKGk9ZSksW3IsaV19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyh0LGUpe2NvbnN0IHI9TWF0aC5taW4odC5nZXROb3RUcmltbWVk''@;'; put 'put ''SW5kZXhlc0xlbmd0aCgpLGUpLGk9dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoci0xLC0xKTtyZXR1cm4gbnVsbD09PWk/MDp0LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXhlcyh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Um93cyl9Y291bnRO''@;'; put 'put ''b3RIaWRkZW5Sb3dJbmRleGVzKHQsZSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKHQsZSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKHQsZSl7cmV0dXJuIHRoaXMuY291bnRO''@;'; put 'put ''b3RIaWRkZW5JbmRleGVzKHQsZSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKHQsZSxyLGkpe2lmKGlzTmFOKHQpfHx0PDApcmV0dXJuIDA7Y29uc3QgYT1yLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleCh0LGUpLGM9ci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGEpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXJldHVybiAwO2xldCBtPTA7cmV0dXJuIGU8MD9tPWMrMTplPjAmJihtPWktYyksbX1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgdD10aGlz''@;'; put 'put ''LmhvdC5jb3VudENvbHMoKSxlPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQsMTApLHQpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGUsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCl7Y29uc3QgdD10aGlz''@;'; put 'put ''LmhvdC5jb3VudFJvd3MoKSxlPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSx0KS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhlLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IHQ9dGhpcy5ob3Qu''@;'; put 'put ''Y291bnRSb3dzKCksZT1NYXRoLm1heCh0LXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoZSwxKX1jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSh0LGUpe2xldCByPTA7Zm9yKGxldCBp''@;'; put 'put ''PXQ7aTw9ZTtpKyspbnVsbCE9PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSkmJihyKz0xKTtyZXR1cm4gcn1jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSh0LGUpe2xldCByPTA7Zm9yKGxldCBpPXQ7aTw9ZTtpKyspbnVsbCE9PXRo''@;'; put 'put ''aXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSkmJihyKz0xKTtyZXR1cm4gcn1hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KHQpe3ZhciBlO2NvbnN0IHI9bnVsbD09PShlPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5vZGUpfHx2b2lk''@;'; put 'put ''IDA9PT1lP3ZvaWQgMDplLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtyJiZ0aShyLHQpfXJlbW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudCh0KXt2YXIgZTtjb25zdCByPW51bGw9PT0oZT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8''@;'; put 'put ''dm9pZCAwPT09ZT92b2lkIDA6ZS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ciYmSGEocix0KX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtjb25zdCB0PXRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50''@;'; put 'put ''Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksZT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5ob3QuY291bnRSZW5kZXJlZFJvd3MoKT50JiZ0aGlzLmhvdC5jb3VudFJlbmRlcmVkQ29scygpPmV9aW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl7Y29u''@;'; put 'put ''c3QgdD17YXJpYVRhZ3M6dGhpcy5zZXR0aW5ncy5hcmlhVGFncyxydGxNb2RlOnRoaXMuaG90LmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpLmlzRW5hYmxlZCgp''@;'; put 'put ''LHRhYmxlOk51KGRwLHRoaXMpLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+azQodGhpcy5ob3QpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cscHJldmVudFdoZWVsOigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCx2aWV3cG9ydENvbHVtblJl''@;'; put 'put ''bmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCxkYXRhOihhLGMpPT50aGlzLmhv''@;'; put 'put ''dC5nZXREYXRhQXRDZWxsKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGEsYykpLHRvdGFsUm93czooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksdG90YWxDb2x1bW5zOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxmaXhlZENvbHVt''@;'; put 'put ''bnNTdGFydDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCksZml4ZWRSb3dzVG9wOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCksZml4ZWRSb3dzQm90dG9tOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksc2hvdWxk''@;'; put 'put ''UmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0PjB8fHQucm93SGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wPjB8fHQuY29sdW1uSGVhZGVycygpLmxl''@;'; put 'put ''bmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tPjAsbWluU3BhcmVSb3dzOigpPT50aGlzLnNldHRpbmdzLm1pblNwYXJlUm93cyxyZW5kZXJBbGxSb3dzOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsUm93cyxyZW5kZXJBbGxD''@;'; put 'put ''b2x1bW5zOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsQ29sdW1ucyxyb3dIZWFkZXJzOigpPT57Y29uc3QgYT1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZhLnB1c2goKGMsbSk9Pntjb25zdCBDPWM+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJl''@;'; put 'put ''bmRlcmFibGVJbmRleChjKTpjO3RoaXMuYXBwZW5kUm93SGVhZGVyKEMsbSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGEpLFJoKEFOLHRoaXMsYS5sZW5ndGgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJlRDKHZrLHRoaXMsUG1l''@;'; put 'put ''KS5jYWxsKHRoaXMpPT09dGhpcy5ob3QuY291bnRDb2xzKCkmJlRDKHZrLHRoaXMsJGN0KS5jYWxsKHRoaXMsTnUoQU4sdGhpcykpLGF9LGNvbHVtbkhlYWRlcnM6KCk9Pntjb25zdCBhPVtdO3JldHVybiB0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCkmJmEucHVzaCgoYyxtKT0+e2NvbnN0IEM9''@;'; put 'put ''Yz49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGMpOmM7dGhpcy5hcHBlbmRDb2xIZWFkZXIoQyxtKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsYSksUmgob1EsdGhpcyxhLmxlbmd0''@;'; put 'put ''aCksYX0sY29sdW1uV2lkdGg6YT0+e2NvbnN0IGM9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sV2lkdGgobnVsbD09PWM/YTpjKX0scm93SGVpZ2h0OmE9Pntjb25zdCBjPXRoaXMuaG90LnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSk7cmV0dXJuIHRoaXMuaG90LmdldFJvd0hlaWdodChudWxsPT09Yz9hOmMpfSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lOihhLGMpPT57Y29uc3QgbT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9t''@;'; put 'put ''UmVuZGVyYWJsZUluZGV4KGEpLEM9bnVsbD09PW0/YTptO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KEMpLEMsYyl9LGNlbGxSZW5kZXJlcjooYSxjLG0pPT57Y29uc3RbQyxQXT10aGlzLnRyYW5z''@;'; put 'put ''bGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChhLGMpLFk9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLEMsUCwhMSwibWV0YSIpO2xldCBKPUMsY2U9UDtBcnJheS5pc0FycmF5KFkpJiYoW0osY2VdPVkpO2NvbnN0IGZlPXRoaXMuaG90LmdldENlbGxNZXRh''@;'; put 'put ''KEosY2UpLEFlPXRoaXMuaG90LmNvbFRvUHJvcChjZSk7bGV0IEhlPXRoaXMuaG90LmdldERhdGFBdFJvd1Byb3AoSixBZSk7dGhpcy5ob3QuaGFzSG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKEhlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWYWx1ZVJlbmRlciIsSGUsZmUpKSx0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLG0sQyxQLEFlLEhlLGZlKSx0aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoZmUpKHRoaXMuaG90LG0sQyxQLEFlLEhlLGZlKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXJlciIsbSxDLFAsQWUsSGUsZmUpfSxzZWxlY3Rpb25zOnRo''@;'; put 'put ''aXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjooKT0+dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixvbldpbmRvd1Jlc2l6ZTooKT0+e3RoaXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJnRoaXMuaG90LnJlZnJlc2hEaW1lbnNp''@;'; put 'put ''b25zKCl9LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTooKT0+e3RoaXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJmU4KHRoaXMuaG90LnJvb3RFbGVtZW50KSYmdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKX0sb25DZWxsTW91c2VEb3duOihhLGMsbSxDKT0+e2NvbnN0IFA9dGhp''@;'; put 'put ''cy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGMpLFk9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5ob3QubGlzdGVuKCksdGhpcy5hY3RpdmVXdD1DLFJoKF81LHRoaXMsITApLFJoKEFDLHRoaXMse3g6YS5jbGllbnRYLHk6YS5jbGllbnRZfSksdGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsYSxQLG0sWSksIXQ4KGEpJiYoaVEoYSx7Y29vcmRzOlAsc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjb250cm9sbGVyOlksY2VsbENvb3Jkc0ZhY3Rvcnk6KEosY2UpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhK''@;'; put 'put ''LGNlKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsYSxQLG0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudTooYSxjLG0sQyk9Pntjb25zdCBQPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhjKTt0''@;'; put 'put ''aGlzLmFjdGl2ZVd0PUMsUmgoXzUsdGhpcywhMSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzSW5Qcm9ncmVzcygpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixhLFAsbSksIXQ4KGEpJiYodGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGEsUCxtKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdXQ6KGEsYyxtLEMpPT57Y29uc3QgUD10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoYyk7dGhpcy5hY3RpdmVXdD1DLHRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYSxQLG0pLCF0OChhKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3V0IixhLFAsbSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjooYSxjLG0sQyk9Pntjb25zdCBQPXRoaXMu''@;'; put 'put ''dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhjKSxZPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuYWN0aXZlV3Q9Qyx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixhLFAsbSxZKSwhdDgoYSkmJihOdShfNSx0aGlzKSYmKCFOdShB''@;'; put 'put ''Qyx0aGlzKXx8TnUoQUMsdGhpcykueCE9PWEuY2xpZW50WHx8TnUoQUMsdGhpcykueSE9PWEuY2xpZW50WSkmJmlRKGEse2Nvb3JkczpQLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjpZLGNlbGxDb29yZHNGYWN0b3J5OihKLGNlKT0+dGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMoSixjZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLGEsUCxtKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0LFJoKEFDLHRoaXMsbnVsbCkpfSxvbkNlbGxNb3VzZVVwOihhLGMsbSxDKT0+e2NvbnN0IFA9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVy''@;'; put 'put ''YWJsZVRvVmlzdWFsQ29vcmRzKGMpO3RoaXMuYWN0aXZlV3Q9Qyx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VVcCIsYSxQLG0pLCF0OChhKSYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiYoaVEoYSx7Y29vcmRzOlAsc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjZWxs''@;'; put 'put ''UmFuZ2VNYXBwZXI6Zm90KHRoaXMuaG90LCJjZWxsUmFuZ2VNYXBwZXIiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlVXAiLGEsUCxtKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOmE9PnthLnByZXZlbnREZWZhdWx0KCksdGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixhKX0sb25DZWxsQ29ybmVyRGJsQ2xpY2s6YT0+e2EucHJldmVudERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsYSl9LGJlZm9yZURyYXc6KGEsYyk9PnRoaXMu''@;'; put 'put ''YmVmb3JlUmVuZGVyKGEsYyksb25EcmF3OmE9PnRoaXMuYWZ0ZXJSZW5kZXIoYSksb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6KGEsYyk9Pntjb25zdCBtPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEM9YTwwO2xldCBQPWE7cmV0dXJuIEN8fChQPW0uZ2V0VmlzdWFsRnJvbVJl''@;'; put 'put ''bmRlcmFibGVJbmRleChhKSxudWxsIT09UCk/KFA9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsUCxjKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxDP1A6bS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFAp''@;'; put 'put ''KTphfSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OihhLGMpPT57Y29uc3QgbT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixDPWE8MDtsZXQgUD1hO3JldHVybiBDfHwoUD1tLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSksbnVsbCE9PVApPyhQPXRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsUCxjKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxDP1A6bS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFApKTphfSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9Pnt0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy''@;'; put 'put ''U2Nyb2xsIil9LG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOihhLGMsbSk9Pntjb25zdCBDPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLFA9''@;'; put 'put ''YTwwO2xldCBZPWE7UHx8KFk9Qy5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpKTtjb25zdCBKPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLFksYyxtKTtyZXR1cm4gUD9KOkMuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChDLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChKLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6KGEsYyxtKT0+e2NvbnN0IEM9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsUD1hPDA7bGV0IFk9YTtQfHwoWT1DLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSkpO2NvbnN0''@;'; put 'put ''IEo9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsWSxjLG0pO3JldHVybiBQP0o6Qy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEosMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooYSxjLG0p''@;'; put 'put ''PT57bGV0IEM7Y29uc3RbUCxZXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChhLGMpLEo9dGhpcy5ob3Quc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihKLnNpemUoKT4wKXtjb25zdCBmZT1KLnBlZWtCeUluZGV4KG0/PzApO0M9W2ZlLmZyb20ucm93''@;'; put 'put ''LGZlLmZyb20uY29sLGZlLnRvLnJvdyxmZS50by5jb2xdfXJldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixQLFksQyxtKX0sb25CZWZvcmVEcmF3Qm9yZGVyczooYSxjKT0+e2NvbnN0W20sQyxQLFldPWEsSj1bdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChtKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEMpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoUCksdGhpcy5ob3QuY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChZKV07cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcmF3Qm9yZGVycyIsSixjKX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVu''@;'; put 'put ''dHVtU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIpLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6YT0+dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixhKSxvbk1vZGlmeUdldENlbGxDb29yZHM6KGEsYyxtLEMpPT57Y29uc3Qg''@;'; put 'put ''UD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixZPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLEo9Yz49MD9ZLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYyk6YyxjZT1hPj0wP1AuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphLGZlPXRoaXMuaG90LnJ1bkhvb2tzKCJt''@;'; put 'put ''b2RpZnlHZXRDZWxsQ29vcmRzIixjZSxKLG0sQyk7aWYoQXJyYXkuaXNBcnJheShmZSkpe2NvbnN0W0FlLEhlLFhlLHJ0XT1mZTtyZXR1cm5bQWU+PTA/UC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFAuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEFlLDEpKTpBZSxIZT49MD9ZLmdl''@;'; put 'put ''dFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoSGUsMSkpOkhlLFhlPj0wP1AuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChQLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChYZSwtMSkpOlhlLHJ0Pj0wP1kuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChZLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChydCwtMSkpOnJ0XX19LG9uTW9kaWZ5R2V0Q29vcmRzRWxlbWVudDooYSxjKT0+e2NvbnN0IG09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsQz10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixQPWM+PTA/Qy5nZXRWaXN1YWxG''@;'; put 'put ''cm9tUmVuZGVyYWJsZUluZGV4KGMpOmMsWT1hPj0wP20uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphLEo9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLFksUCk7aWYoQXJyYXkuaXNBcnJheShKKSl7Y29uc3RbY2UsZmVdPUo7cmV0dXJuW2NlPj0w''@;'; put 'put ''P20uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChtLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKSk6Y2UsZmU+PTA/Qy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZlLDEpKTpmZV19fSx2aWV3cG9ydFJvd0NhbGN1bGF0''@;'; put 'put ''b3JPdmVycmlkZTphPT57bGV0IGM9dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT1jJiZ0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCYmKGM9MTApLGM+MHx8ImF1dG8iPT09Yyl7Y29uc3QgbT10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxD''@;'; put 'put ''PWEuc3RhcnRSb3csUD1hLmVuZFJvdztpZigibnVtYmVyIj09dHlwZW9mIGMpYS5zdGFydFJvdz1NYXRoLm1heChDLWMsMCksYS5lbmRSb3c9TWF0aC5taW4oUCtjLG0tMSk7ZWxzZSBpZigiYXV0byI9PT1jKXtjb25zdCBZPU1hdGgubWF4KDEsTWF0aC5jZWlsKFAvbSoxMikpO2Euc3RhcnRS''@;'; put 'put ''b3c9TWF0aC5tYXgoQy1ZLDApLGEuZW5kUm93PU1hdGgubWluKFArWSxtLTEpfX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsYSl9LHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOmE9PntsZXQgYz10aGlzLnNldHRpbmdzLnZp''@;'; put 'put ''ZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PWMmJnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQmJihjPTEwKSxjPjB8fCJhdXRvIj09PWMpe2NvbnN0IG09dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksQz1hLnN0YXJ0Q29sdW1uLFA9YS5lbmRDb2x1''@;'; put 'put ''bW47aWYoIm51bWJlciI9PXR5cGVvZiBjJiYoYS5zdGFydENvbHVtbj1NYXRoLm1heChDLWMsMCksYS5lbmRDb2x1bW49TWF0aC5taW4oUCtjLG0tMSkpLCJhdXRvIj09PWMpe2NvbnN0IFk9TWF0aC5tYXgoMSxNYXRoLmNlaWwoUC9tKjYpKTthLnN0YXJ0Q29sdW1uPU1hdGgubWF4KEMtWSww''@;'; put 'put ''KSxhLmVuZENvbHVtbj1NYXRoLm1pbihQK1ksbS0xKX19dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGEpfSxyb3dIZWFkZXJXaWR0aDooKT0+dGhpcy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxjb2x1bW5IZWFkZXJIZWlnaHQ6KCk9''@;'; put 'put ''Pntjb25zdCBhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiKTtyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb2x1bW5IZWFkZXJIZWlnaHR8fGF9LHN0eWxlc0hhbmRsZXI6KCk9PnRoaXMuaG90LnN0eWxlc0hhbmRsZXJ9O3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVJbml0V2Fsa29udGFibGUiLHQpLHRoaXMuX3d0PW5ldyByUSh0KSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0O2NvbnN0IGU9dGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcix7d2lkdGg6cixoZWlnaHQ6aX09dGhpcy5ob3Qucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhp''@;'; put 'put ''cy5zZXRMYXN0U2l6ZShyLGkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwibW91c2Vkb3duIixhPT57YS50YXJnZXQ9PT1lJiYzPT09YS53aGljaCYmYS5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwiY29udGV4''@;'; put 'put ''dG1lbnUiLGE9PnthLnRhcmdldD09PWUmJjM9PT1hLndoaWNoJiZhLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLnNldHRpbmdzLm9ic2Vy''@;'; put 'put ''dmVET01WaXNpYmlsaXR5JiZ0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQmJnRoaXMuaG90LnJlbmRlcigpfSl9aXNUZXh0U2VsZWN0aW9uQWxsb3dlZCh0KXt2YXIgZSxyO2lmKGVrKHQpKXJldHVybiEwO2NvbnN0IGk9WDYodCx0aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyKTtpZighMD09PXRo''@;'; put 'put ''aXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmkpcmV0dXJuITA7Y29uc3QgYT1udWxsIT09KGU9bnVsbD09PShyPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaXNTaW5nbGVDZWxsKCkpJiZ2b2lkIDAhPT1lJiZlO3JldHVybiEh''@;'; put 'put ''KCJjZWxsIj09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmEmJml8fCF0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzQ2VsbEVkaXRlZCgpJiZhKX1pc01vdXNlRG93bigpe3JldHVybiBOdShfNSx0aGlzKX1pc0NlbGxFZGl0ZWQoKXtjb25zdCB0PXRo''@;'; put 'put ''aXMuaG90LmdldEFjdGl2ZUVkaXRvcigpO3JldHVybiB0JiZ0LmlzT3BlbmVkKCl9YmVmb3JlUmVuZGVyKHQsZSl7dCYmdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdSZW5kZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcixlKX1hZnRlclJlbmRlcih0KXt0JiZ0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWFwcGVuZFJvd0hlYWRlcih0LGUpe2lmKGUuZmlyc3RDaGlsZCl7Y29uc3Qgcj1lLmZpcnN0Q2hpbGQ7aWYoIXZvKHIsInJlbGF0aXZlIikpcmV0dXJuIFM0KGUpLHZvaWQgdGhpcy5hcHBlbmRSb3dIZWFk''@;'; put 'put ''ZXIodCxlKTt0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoci5xdWVyeVNlbGVjdG9yKCIucm93SGVhZGVyIiksdCx0aGlzLmhvdC5nZXRSb3dIZWFkZXIpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OnIsZ2V0Um93SGVhZGVyOml9PXRoaXMuaG90LGE9ci5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPXIu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgic3BhbiIpO2EuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsYy5jbGFzc05hbWU9InJvd0hlYWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKGMsdCxpKSxhLmFwcGVuZENoaWxkKGMpLGUuYXBwZW5kQ2hpbGQoYSl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Um93SGVh''@;'; put 'put ''ZGVyIix0LGUpfWFwcGVuZENvbEhlYWRlcih0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmhvdC5nZXRDb2xIZWFkZXIsaT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVu''@;'; put 'put ''dHNbM106MDtjb25zdCBhPSgpPT57Y29uc3QgYz10Pj0wP3RoaXMuaG90LmdldENvbHVtbk1ldGEodCkuaGVhZGVyQ2xhc3NOYW1lOm51bGw7cmV0dXJuIGM/Yy5zcGxpdCgiICIpOltdfTtpZihlLmZpcnN0Q2hpbGQpe2NvbnN0IGM9ZS5maXJzdENoaWxkO3ZvKGMsInJlbGF0aXZlIik/KHRo''@;'; put 'put ''aXMudXBkYXRlQ2VsbEhlYWRlcihjLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSx0LHIsaSksYy5jbGFzc05hbWU9IiIsdGkoYyxbInJlbGF0aXZlIiwuLi5hKCldKSk6KFM0KGUpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKHQsZSxyLGkpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpjfT10''@;'; put 'put ''aGlzLmhvdCxtPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksQz1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxQPWEoKTttLmNsYXNzTGlzdC5hZGQoInJlbGF0aXZlIiwuLi5QKSxDLmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYoWmEobSwicm9sZSIsInByZXNl''@;'; put 'put ''bnRhdGlvbiIpLFphKEMsInJvbGUiLCJwcmVzZW50YXRpb24iKSksdGhpcy51cGRhdGVDZWxsSGVhZGVyKEMsdCxyLGkpLG0uYXBwZW5kQ2hpbGQoQyksZS5hcHBlbmRDaGlsZChtKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRDb2xIZWFkZXIiLHQsZSxpKX11cGRhdGVDZWxsSGVhZGVy''@;'; put 'put ''KHQsZSxyKXtsZXQgaT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxhPWU7Y29uc3QgYz10aGlzLl93dC53dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkodCl8fHRoaXMuX3d0O3QucGFyZW50Tm9kZSYmKHZvKHQsImNvbEhlYWRlciIp''@;'; put 'put ''P2E9Yy53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGUpOnZvKHQsInJvd0hlYWRlciIpJiYoYT1jLnd0VGFibGUucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoZSkpKSxhPi0xP0o2KHQscihlLGkpKTooUTYodCwiXHhhMCIpLHRpKHQsImNvcm5lckhlYWRlciIpKX1t''@;'; put 'put ''YXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aCh0KXtjb25zdCByPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKS10O3JldHVybiByPjA/cjowfW1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodCh0KXtjb25zdCByPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNl''@;'; put 'put ''SGVpZ2h0KCktdDtyZXR1cm4gcj4wP3I6MH1zZXRMYXN0U2l6ZSh0LGUpe1JoKHNRLHRoaXMsdCksUmgobFEsdGhpcyxlKX1nZXRMYXN0U2l6ZSgpe3JldHVybnt3aWR0aDpOdShzUSx0aGlzKSxoZWlnaHQ6TnUobFEsdGhpcyl9fWdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCl7aWYoIXRo''@;'; put 'put ''aXMuX3d0Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixlPXQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSk7cmV0dXJuIHQu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGU/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IHQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsZT10LmdldFZpc3VhbEZy''@;'; put 'put ''b21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKSk7cmV0dXJuIHQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGU/P3RoaXMuaG90LmNvdW50Um93cygpLTEsLTEpfWdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl7aWYoIXRoaXMuX3d0''@;'; put 'put ''Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixlPXQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSk7cmV0dXJu''@;'; put 'put ''IHQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGU/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IHQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZT10''@;'; put 'put ''LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSk7cmV0dXJuIHQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGU/P3RoaXMuaG90LmNvdW50Q29scygpLTEsLTEpfWdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpfWdldExhc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJv''@;'; put 'put ''bVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xs''@;'; put 'put ''LmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmly''@;'; put 'put ''c3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4''@;'; put 'put ''TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZy''@;'; put 'put ''b21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9Z2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIE51KG9RLHRoaXMpfWdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiBOdShBTix0aGlzKX1nZXRWaWV3cG9ydFdp''@;'; put 'put ''ZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpfWdldFdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKX1nZXRWaWV3cG9ydEhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0''@;'; put 'put ''LmdldFZpZXdwb3J0SGVpZ2h0KCl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9Z2V0RWxlbWVudE92ZXJsYXlOYW1lKHQpe3ZhciBlO3JldHVybihudWxsIT09KGU9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJl''@;'; put 'put ''bnRPdmVybGF5KHQpKSYmdm9pZCAwIT09ZT9lOnRoaXMuX3d0KS53dFRhYmxlLm5hbWV9Z2V0T3ZlcmxheUJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5fd3QuZ2V0T3ZlcmxheUJ5TmFtZSh0KX1nZXRBY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93dC5hY3RpdmVPdmVybGF5TmFtZX1p''@;'; put 'put ''c1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5pc1Zpc2libGUoKX1oYXNWZXJ0aWNhbFNjcm9sbCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmhhc1ZlcnRpY2FsU2Nyb2xsKCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmhh''@;'; put 'put ''c0hvcml6b250YWxTY3JvbGwoKX1nZXRUYWJsZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0V2lkdGgoKX1nZXRUYWJsZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldEhlaWdodCgpfWdldFRvdGFsVGFibGVXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFRh''@;'; put 'put ''YmxlLmdldFRvdGFsV2lkdGgoKX1nZXRUb3RhbFRhYmxlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKX1nZXRUYWJsZU9mZnNldCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZU9mZnNldCgpfWdldFRhYmxlU2Nyb2xsUG9z''@;'; put 'put ''aXRpb24oKXtyZXR1cm57bGVmdDp0aGlzLl93dC53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0LHRvcDp0aGlzLl93dC53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3B9fXNldFRhYmxlU2Nyb2xsUG9zaXRpb24odCl7dGhpcy5fd3Qud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD10LmxlZnQsdGhp''@;'; put 'put ''cy5fd3Qud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPXQudG9wfWdldFJvd0hlYWRlcldpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRDb2x1bW5I''@;'; put 'put ''ZWFkZXJIZWlnaHQoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdw''@;'; put 'put ''b3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9ZGVzdHJveSgpe3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fTtkKDEzOTA4KTtmdW5jdGlvbiBETihuKXtsZXQgcix0PW4rMSxlPSIiO2Zvcig7dD4wOylyPSh0LTEpJTI2LGU9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSg2NStyKStlLHQ9cGFyc2VJbnQoKHQtcikvMjYsMTApO3JldHVybiBlfWZ1bmN0aW9uIHFjdChuKXtsZXQgdD0wO2lmKG4pZm9yKGxldCBlPTAscj1uLmxlbmd0aC0xO2U8bi5sZW5ndGg7ZSs9MSxyLT0xKXQrPTI2KipyKigiQUJDREVGR0hJSktMTU5PUFFSU1RV''@;'; put 'put ''VldYWVoiLmluZGV4T2YobltlXSkrMSk7cmV0dXJuIHQtPTEsdH1mdW5jdGlvbiBKY3QoKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOjQ7Y29uc3QgZT1bXTtsZXQgcixpO2ZvcihyPTA7cjxuO3IrKyl7Y29uc3QgYT1bXTtmb3IoaT0wO2k8dDtpKyspYS5wdXNoKEROKGkpKyhyKzEpKTtlLnB1c2goYSl9cmV0dXJuIGV9ZnVuY3Rpb24gUWN0KCl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGU9W107bGV0IHIsaTtmb3Iocj0wO3I8bjtyKyspe2NvbnN0IGE9e307Zm9yKGk9MDtpPHQ7aSsrKWFbYHByb3Ake2l9YF09''@;'; put 'put ''RE4oaSkrKHIrMSk7ZS5wdXNoKGEpfXJldHVybiBlfWZ1bmN0aW9uIGV1dChuLHQpe2NvbnN0IGU9W107bGV0IHI7Zm9yKGxldCBpPTA7aTxuO2krKyl7cj1bXTtmb3IobGV0IGE9MDthPHQ7YSsrKXIucHVzaCgiIik7ZS5wdXNoKHIpfXJldHVybiBlfWZ1bmN0aW9uIHVRKG4pe2xldCB0PWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGU9bjtjb25zdCByPVtdO3JldHVybighQXJyYXkuaXNBcnJheShuKXx8IUFycmF5LmlzQXJyYXkoblswXSkpJiYoZT1bbl0pLGUuZm9yRWFjaCgoaSxhKT0+e0FycmF5LmlzQXJyYXkoaSk/aS5m''@;'; put 'put ''b3JFYWNoKChjLG0pPT57ci5wdXNoKFthK3QsbSxjXSl9KTpPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGM9PntyLnB1c2goW2ErdCxjLGlbY11dKX0pfSkscn1mdW5jdGlvbiBkUShuKXtsZXQgdD0wO3JldHVybiBBcnJheS5pc0FycmF5KG4pJiYoblswXSYmQXJyYXkuaXNBcnJheShuWzBdKT90''@;'; put 'put ''PW5bMF0ubGVuZ3RoOm5bMF0mJmhvKG5bMF0pJiYodD1uTihuWzBdKSkpLHR9ZnVuY3Rpb24gSG1lKG4pe3JldHVybiEhKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoJiZuLmV2ZXJ5KHQ9PkFycmF5LmlzQXJyYXkodCkpKX1mdW5jdGlvbiBObWUobil7cmV0dXJuISEoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShuKSYmbi5sZW5ndGgmJm4uZXZlcnkodD0+Im9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSYmbnVsbCE9PXQpKX1mdW5jdGlvbiB5ayhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gdHV0KG4pe3ZhciB0PWZ1bmN0aW9uIG51dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''bnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4g''@;'; put 'put ''YSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgaXV0PWNsYXNzIHJ1dHtjb25zdHJ1Y3Rvcih0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107eWsodGhpcywiaG90Iix2b2lkIDApLHlrKHRoaXMs''@;'; put 'put ''ImRhdGEiLHZvaWQgMCkseWsodGhpcywiZGF0YVR5cGUiLCJhcnJheSIpLHlrKHRoaXMsImNvbFRvUHJvcCIsKCk9Pnt9KSx5ayh0aGlzLCJwcm9wVG9Db2wiLCgpPT57fSksdGhpcy5ob3Q9dCx0aGlzLmRhdGE9ZX1tb2RpZnlSb3dEYXRhKHQpe2xldCBlO3JldHVybiB0aGlzLmhvdC5oYXNI''@;'; put 'put ''b29rKCJtb2RpZnlSb3dEYXRhIikmJihlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIix0KSksdm9pZCAwPT09ZXx8TnVtYmVyLmlzSW50ZWdlcihlKT90aGlzLmRhdGFbdF06ZX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhpcy5n''@;'; put 'put ''ZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKTp0aGlzLmRhdGF9c2V0RGF0YSh0KXt0aGlzLmRhdGE9dH1nZXRBdENvbHVtbih0KXtjb25zdCBlPVtdO3JldHVybiBZbih0aGlzLmRhdGEsKHIsaSk9Pntj''@;'; put 'put ''b25zdCBhPXRoaXMuZ2V0QXRDZWxsKGksdCk7ZS5wdXNoKGEpfSksZX1nZXRBdFJvdyh0LGUscil7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBhPXZvaWQgMD09PWUmJnZvaWQgMD09PXIse2RhdGFEb3ROb3RhdGlv''@;'; put 'put ''bjpjfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBtPW51bGwsQz1udWxsO2lmKG09dGhpcy5tb2RpZnlSb3dEYXRhKHQpLEFycmF5LmlzQXJyYXkobSkpQz1bXSxhP20uZm9yRWFjaCgoUCxZKT0+e0NbWV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbCh0LFksbSl9KTplbyhlLHIsUD0+e0Nb''@;'; put 'put ''UC1lXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKHQsUCxtKX0pO2Vsc2UgaWYoaG8obSl8fGFsKG0pKWlmKEM9aT9bXTp7fSwhYXx8aSl7Y29uc3QgWT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTtlbygwLFksSj0+e2NvbnN0IGNlPXRoaXMuY29sVG9Qcm9wKEopO2lmKEo+PShlfHwwKSYm''@;'; put 'put ''Sjw9KHJ8fFkpJiYhTnVtYmVyLmlzSW50ZWdlcihjZSkpe2NvbnN0IGZlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwodCxjZSxtKTtpP0MucHVzaChmZSk6Yz90TihDLGNlLGZlKTpDW2NlXT1mZX19KX1lbHNlIGFzKG0sKFAsWSk9Pntjb25zdCBKPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwodCxZ''@;'; put 'put ''LG0pO2M/dE4oQyxZLEopOkNbWV09Sn0pO3JldHVybiBDfXNldEF0Q2VsbCh0LGUscil7aWYoISh0Pj10aGlzLmNvdW50Um93cygpfHxlPj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGk9QWgocik7dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLHQsZSxpLCJzZXQiKSxpLmlzVG91Y2hlZCgpJiYocj1pLnZhbHVlKX1bIl9fcHJvdG9fXyIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIl0uaW5jbHVkZXModCl8fChOdW1iZXIuaXNJbnRlZ2VyKGUpP3RoaXMuZGF0YVt0XVtlXT1y''@;'; put 'put ''OnROKHRoaXMuZGF0YVt0XSxlLHIpKX19Z2V0QXRQaHlzaWNhbENlbGwodCxlLHIpe2xldCBpPW51bGw7aWYocilpZigic3RyaW5nIj09dHlwZW9mIGUpe2NvbnN0e2RhdGFEb3ROb3RhdGlvbjphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2k9YT9lTihyLGUpOnJbZV19ZWxzZSBpPSJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBlP2Uocik6cltlXTtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGE9QWgoaSk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLHQsZSxhLCJnZXQiKSxhLmlzVG91Y2hlZCgpJiYoaT1hLnZhbHVlKX1yZXR1cm4g''@;'; put 'put ''aX1nZXRBdENlbGwodCxlKXtjb25zdCByPXRoaXMubW9kaWZ5Um93RGF0YSh0KTtyZXR1cm4gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbCh0LHRoaXMuY29sVG9Qcm9wKGUpLHIpfWdldEJ5UmFuZ2UoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1''@;'; put 'put ''bWVudHNbMF06bnVsbCxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxpPSExLGE9bnVsbCxjPW51bGwsbT1udWxsLEM9bnVs''@;'; put 'put ''bDtudWxsPT09dHx8bnVsbD09PWU/KGk9ITAsYT0wLG09dGhpcy5jb3VudFJvd3MoKS0xKTooYT1NYXRoLm1pbih0LnJvdyxlLnJvdyksYz1NYXRoLm1pbih0LmNvbCxlLmNvbCksbT1NYXRoLm1heCh0LnJvdyxlLnJvdyksQz1NYXRoLm1heCh0LmNvbCxlLmNvbCkpO2NvbnN0IFA9W107cmV0''@;'; put 'put ''dXJuIGVvKGEsbSxZPT57UC5wdXNoKGk/dGhpcy5nZXRBdFJvdyhZLHZvaWQgMCx2b2lkIDAscik6dGhpcy5nZXRBdFJvdyhZLGMsQyxyKSl9KSxQfWdldENvcHlhYmxlKHQsZSl7Y29uc3Qgcj10aGlzLnByb3BUb0NvbChlKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEodCxyKS5jb3B5''@;'; put 'put ''YWJsZT90aGlzLmdldEF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHQpLHIpOiIifWNvdW50Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCB0PXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VMZW5ndGgiKTtpZihOdW1iZXIu''@;'; put 'put ''aXNJbnRlZ2VyKHQpKXJldHVybiB0fXJldHVybiB0aGlzLmRhdGEubGVuZ3RofWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIGRRKHRoaXMuZGF0YSl9ZGVzdHJveSgpe3RoaXMuZGF0YT1udWxsLHRoaXMuaG90PW51bGx9fTtkKDIwMjkxKTtjb25zdCBWbWU9e19sb2NhbEhvb2tzOk9iamVj''@;'; put 'put ''dC5jcmVhdGUobnVsbCksYWRkTG9jYWxIb29rKG4sdCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3Nbbl18fCh0aGlzLl9sb2NhbEhvb2tzW25dPVtdKSx0aGlzLl9sb2NhbEhvb2tzW25dLnB1c2godCksdGhpc30scmVtb3ZlTG9jYWxIb29rKG4sdCl7aWYodGhpcy5fbG9jYWxIb29rc1tuXSl7''@;'; put 'put ''Y29uc3QgZT10aGlzLl9sb2NhbEhvb2tzW25dLmluZGV4T2YodCk7ZT4tMSYmdGhpcy5fbG9jYWxIb29rc1tuXS5zcGxpY2UoZSwxKX1yZXR1cm4gdGhpc30scnVuTG9jYWxIb29rcyhuLHQsZSxyLGksYSxjKXtpZih0aGlzLl9sb2NhbEhvb2tzW25dKXtjb25zdCBtPXRoaXMuX2xvY2FsSG9v''@;'; put 'put ''a3Nbbl0ubGVuZ3RoO2ZvcihsZXQgQz0wO0M8bTtDKyspZE4odGhpcy5fbG9jYWxIb29rc1tuXVtDXSx0aGlzLHQsZSxyLGksYSxjKX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9LHRoaXN9fTt3NChWbWUsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7''@;'; put 'put ''d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0ICQwPVZtZTtmdW5jdGlvbiBCbWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIG91dChuKXt2YXIgdD1mdW5jdGlvbiBzdXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxu''@;'; put 'put ''fWNsYXNzIGp2e2NvbnN0cnVjdG9yKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Qm1lKHRoaXMsImluZGV4ZWRWYWx1ZXMiLFtdKSxCbWUodGhpcywiaW5pdFZhbHVlT3JGbiIsdm9pZCAwKSx0aGlzLmluaXRWYWx1''@;'; put 'put ''ZU9yRm49dH1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRleGVkVmFsdWVzfWdldFZhbHVlQXRJbmRleCh0KXtjb25zdCBlPXRoaXMuaW5kZXhlZFZhbHVlcztpZih0PGUubGVuZ3RoKXJldHVybiBlW3RdfXNldFZhbHVlcyh0KXt0aGlzLmluZGV4ZWRWYWx1ZXM9dC5zbGljZSgpLHRoaXMu''@;'; put 'put ''cnVuTG9jYWxIb29rcygiY2hhbmdlIil9c2V0VmFsdWVBdEluZGV4KHQsZSl7cmV0dXJuIHQ8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1t0XT1lLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIiksITApfWNsZWFyKCl7dGhpcy5zZXREZWZhdWx0VmFs''@;'; put 'put ''dWVzKCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCkubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLmluZGV4''@;'; put 'put ''ZWRWYWx1ZXMubGVuZ3RoPTAsYWwodGhpcy5pbml0VmFsdWVPckZuKT9lbyh0LTEsZT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKGUpKSk6ZW8odC0xLCgpPT50aGlzLmluZGV4ZWRWYWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4pKSx0aGlzLnJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoImNoYW5nZSIpfWluaXQodCl7cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyh0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKSx0aGlzfWluc2VydCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9cmVtb3ZlKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2Ui''@;'; put 'put ''KX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1ZXM9bnVsbCx0aGlzLmluaXRWYWx1ZU9yRm49bnVsbH19ZnVuY3Rpb24gaFEobix0LGUpe3JldHVyblsuLi5uLnNsaWNlKDAsdCksLi4uZSwuLi5uLnNsaWNlKHQpXX1mdW5jdGlvbiBfayhuLHQpe3Jl''@;'; put 'put ''dHVybiAkNihuLGU9PiExPT09dC5pbmNsdWRlcyhlKSl9ZnVuY3Rpb24gZlEobix0KXtyZXR1cm4gV3MobixlPT5lLXQuZmlsdGVyKHI9PnI8ZSkubGVuZ3RoKX1mdW5jdGlvbiBwUShuLHQpe2NvbnN0IGU9dFswXSxyPXQubGVuZ3RoO3JldHVybiBXcyhuLGk9Pmk+PWU/aStyOmkpfXBsKGp2''@;'; put 'put ''LCQwKTtjbGFzcyBqbWUgZXh0ZW5kcyBqdntjb25zdHJ1Y3Rvcigpe3N1cGVyKHQ9PnQpfWluc2VydCh0LGUpe2NvbnN0IHI9cFEodGhpcy5pbmRleGVkVmFsdWVzLGUpO3RoaXMuaW5kZXhlZFZhbHVlcz1oUShyLHQsZSksc3VwZXIuaW5zZXJ0KHQsZSl9cmVtb3ZlKHQpe2NvbnN0IGU9X2so''@;'; put 'put ''dGhpcy5pbmRleGVkVmFsdWVzLHQpO3RoaXMuaW5kZXhlZFZhbHVlcz1mUShlLHQpLHN1cGVyLnJlbW92ZSh0KX19ZnVuY3Rpb24gZ1Eobix0LGUscil7Y29uc3QgaT1lLmxlbmd0aD9lWzBdOnZvaWQgMDtyZXR1cm5bLi4ubi5zbGljZSgwLGkpLC4uLmUubWFwKChhLGMpPT5hbChyKT9yKGEs''@;'; put 'put ''Yyk6ciksLi4udm9pZCAwPT09aT9bXTpuLnNsaWNlKGkpXX1mdW5jdGlvbiBtUShuLHQpe3JldHVybiAkNihuLChlLHIpPT4hMT09PXQuaW5jbHVkZXMocikpfWNsYXNzIHM4IGV4dGVuZHMganZ7aW5zZXJ0KHQsZSl7dGhpcy5pbmRleGVkVmFsdWVzPWdRKHRoaXMuaW5kZXhlZFZhbHVlcyww''@;'; put 'put ''LGUsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQodCxlKX1yZW1vdmUodCl7dGhpcy5pbmRleGVkVmFsdWVzPW1RKHRoaXMuaW5kZXhlZFZhbHVlcyx0KSxzdXBlci5yZW1vdmUodCl9fWNsYXNzIElOIGV4dGVuZHMgczh7Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIGQwKHRoaXMuZ2V0VmFsdWVzKCksKHQsZSxyKT0+KGUmJnQucHVzaChyKSx0KSxbXSl9fWNsYXNzIFJOIGV4dGVuZHMganZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h''@;'; put 'put ''cmd1bWVudHMpLGZ1bmN0aW9uIGx1dChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gY3V0KG4pe3ZhciB0PWZ1bmN0aW9uIHV1dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUu''@;'; put 'put ''Y2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KHRoaXMsIm9yZGVyT2ZJbmRleGVzIixbXSl9Z2V0''@;'; put 'put ''VmFsdWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKHQ9PnRoaXMuaW5kZXhlZFZhbHVlc1t0XSl9c2V0VmFsdWVzKHQpe3RoaXMub3JkZXJPZkluZGV4ZXM9Wy4uLkFycmF5KHQubGVuZ3RoKS5rZXlzKCldLHN1cGVyLnNldFZhbHVlcyh0KX1zZXRWYWx1ZUF0SW5kZXgodCxl''@;'; put 'put ''KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg7cmV0dXJuIHQ8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1t0XT1lLCExPT09dGhpcy5vcmRl''@;'; put 'put ''ck9mSW5kZXhlcy5pbmNsdWRlcyh0KSYmdGhpcy5vcmRlck9mSW5kZXhlcy5zcGxpY2UociwwLHQpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIiksITApfWNsZWFyVmFsdWUodCl7dGhpcy5vcmRlck9mSW5kZXhlcz1fayh0aGlzLm9yZGVyT2ZJbmRleGVzLFt0XSksYWwodGhpcy5pbml0''@;'; put 'put ''VmFsdWVPckZuKT9zdXBlci5zZXRWYWx1ZUF0SW5kZXgodCx0aGlzLmluaXRWYWx1ZU9yRm4odCkpOnN1cGVyLnNldFZhbHVlQXRJbmRleCh0LHRoaXMuaW5pdFZhbHVlT3JGbil9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMo''@;'; put 'put ''KXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aD0wLHN1cGVyLnNldERlZmF1bHRWYWx1ZXModCl9aW5zZXJ0KHQsZSl7dGhpcy5pbmRl''@;'; put 'put ''eGVkVmFsdWVzPWdRKHRoaXMuaW5kZXhlZFZhbHVlcywwLGUsdGhpcy5pbml0VmFsdWVPckZuKSx0aGlzLm9yZGVyT2ZJbmRleGVzPXBRKHRoaXMub3JkZXJPZkluZGV4ZXMsZSksc3VwZXIuaW5zZXJ0KHQsZSl9cmVtb3ZlKHQpe3RoaXMuaW5kZXhlZFZhbHVlcz1tUSh0aGlzLmluZGV4ZWRW''@;'; put 'put ''YWx1ZXMsdCksdGhpcy5vcmRlck9mSW5kZXhlcz1fayh0aGlzLm9yZGVyT2ZJbmRleGVzLHQpLHRoaXMub3JkZXJPZkluZGV4ZXM9ZlEodGhpcy5vcmRlck9mSW5kZXhlcyx0KSxzdXBlci5yZW1vdmUodCl9Z2V0RW50cmllcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcCh0PT5b''@;'; put 'put ''dCx0aGlzLmdldFZhbHVlQXRJbmRleCh0KV0pfX1jbGFzcyBiayBleHRlbmRzIHM4e2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4gZDAodGhpcy5nZXRW''@;'; put 'put ''YWx1ZXMoKSwodCxlLHIpPT4oZSYmdC5wdXNoKHIpLHQpLFtdKX19Y29uc3Qgem1lPW5ldyBNYXAoW1siaGlkaW5nIixJTl0sWyJpbmRleCIsanZdLFsibGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWUiLFJOXSxbInBoeXNpY2FsSW5kZXhUb1ZhbHVlIixzOF0sWyJ0cmltbWluZyIsYmtdXSk7''@;'; put 'put ''bGV0IHZRPTA7Y2xhc3MgeVF7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gaHV0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBmdXQobil7dmFyIHQ9ZnVuY3Rpb24gcHV0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywi''@;'; put 'put ''Y29sbGVjdGlvbiIsbmV3IE1hcCl9cmVnaXN0ZXIodCxlKXshMT09PXRoaXMuY29sbGVjdGlvbi5oYXModCkmJih0aGlzLmNvbGxlY3Rpb24uc2V0KHQsZSksZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixlKSksdlErPTEpfXVucmVnaXN0''@;'; put 'put ''ZXIodCl7Y29uc3QgZT10aGlzLmNvbGxlY3Rpb24uZ2V0KHQpO3dhKGUpJiYoZS5kZXN0cm95KCksdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZSh0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsZSksdlEtPTEpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgodCxl''@;'; put 'put ''KT0+dGhpcy51bnJlZ2lzdGVyKGUpKSx0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQodCl7cmV0dXJuIG1jKHQpP0FycmF5LmZyb20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KHQpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6''@;'; put 'put ''ZX1yZW1vdmVGcm9tRXZlcnkodCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goZT0+e2UucmVtb3ZlKHQpfSl9aW5zZXJ0VG9FdmVyeSh0LGUpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKHI9PntyLmluc2VydCh0LGUpfSl9aW5pdEV2ZXJ5KHQpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGU9''@;'; put 'put ''PntlLmluaXQodCl9KX19ZnVuY3Rpb24gX1Eobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIG11dChuKXt2YXIgdD1mdW5jdGlvbiB2dXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIg''@;'; put 'put ''cj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4s''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufXBsKHlRLCQwKTtjbGFzcyBVbWUgZXh0ZW5k''@;'; put 'put ''cyB5UXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksX1EodGhpcywibWVyZ2VkVmFsdWVzQ2FjaGUiLFtdKSxfUSh0aGlzLCJhZ2dyZWdhdGlvbkZ1bmN0aW9uIix2b2lkIDApLF9RKHRoaXMsImZhbGxiYWNrVmFsdWUiLHZvaWQgMCksdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uPXQsdGhpcy5m''@;'; put 'put ''YWxsYmFja1ZhbHVlPWV9Z2V0TWVyZ2VkVmFsdWVzKCl7aWYoITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMubWVyZ2VkVmFsdWVzQ2FjaGU7aWYoMD09PXRoaXMuZ2V0TGVuZ3RoKCkpcmV0dXJuW107''@;'; put 'put ''Y29uc3QgZT1Xcyh0aGlzLmdldCgpLGE9PmEuZ2V0VmFsdWVzKCkpLHI9W10saT13YShlWzBdKSYmZVswXS5sZW5ndGh8fDA7Zm9yKGxldCBhPTA7YTxpO2ErPTEpe2NvbnN0IGM9W107Zm9yKGxldCBtPTA7bTx0aGlzLmdldExlbmd0aCgpO20rPTEpYy5wdXNoKGVbbV1bYV0pO3IucHVzaChj''@;'; put 'put ''KX1yZXR1cm4gV3Mocix0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb24pfWdldE1lcmdlZFZhbHVlQXRJbmRleCh0LGUpe2NvbnN0IHI9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoZSlbdF07cmV0dXJuIHdhKHIpP3I6dGhpcy5mYWxsYmFja1ZhbHVlfXVwZGF0ZUNhY2hlKCl7dGhpcy5tZXJnZWRWYWx1''@;'; put 'put ''ZXNDYWNoZT10aGlzLmdldE1lcmdlZFZhbHVlcyghMSl9fWZ1bmN0aW9uIFdtZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v''@;'; put 'put ''dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGJRPW5ldyBXZWFrTWFwO2NsYXNzIFptZXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiB5dXQobix0LGUpeyhmdW5jdGlvbiBfdXQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LnNldChuLGUpfSh0aGlzLGJRLFtdKX1zdWJzY3JpYmUodCl7cmV0dXJuIHRoaXMuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLHQpLHRoaXMuX3dyaXRlKGZ1bmN0aW9uIHd1dChuLHQpe3JldHVybiBuLmdl''@;'; put 'put ''dChXbWUobix0KSl9KGJRLHRoaXMpKSx0aGlzfXVuc3Vic2NyaWJlKCl7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygidW5zdWJzY3JpYmUiKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXN9X3dyaXRlKHQpe3JldHVybiB0Lmxlbmd0aD4wJiZ0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5n''@;'; put 'put ''ZSIsdCksdGhpc31fd3JpdGVJbml0aWFsQ2hhbmdlcyh0KXshZnVuY3Rpb24gYnV0KG4sdCxlKXtuLnNldChXbWUobix0KSxlKX0oYlEsdGhpcyx0KX19ZnVuY3Rpb24gWW1lKG4sdCl7Y29uc3QgZT1bXTtsZXQgcj0wLGk9MDtmb3IoO3I8bi5sZW5ndGgmJmk8dC5sZW5ndGg7cisrLGkrKylu''@;'; put 'put ''W3JdIT09dFtpXSYmZS5wdXNoKHtvcDoicmVwbGFjZSIsaW5kZXg6aSxvbGRWYWx1ZTpuW3JdLG5ld1ZhbHVlOnRbaV19KTtmb3IoO3I8dC5sZW5ndGg7cisrKWUucHVzaCh7b3A6Imluc2VydCIsaW5kZXg6cixvbGRWYWx1ZTp2b2lkIDAsbmV3VmFsdWU6dFtyXX0pO2Zvcig7aTxuLmxlbmd0''@;'; put 'put ''aDtpKyspZS5wdXNoKHtvcDoicmVtb3ZlIixpbmRleDppLG9sZFZhbHVlOm5baV0sbmV3VmFsdWU6dm9pZCAwfSk7cmV0dXJuIGV9ZnVuY3Rpb24gd2sobix0LGUpeyhmdW5jdGlvbiBDdXQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0''@;'; put 'put ''aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIFhmKG4sdCl7cmV0dXJuIG4uZ2V0KEdtZShuLHQpKX1mdW5jdGlvbiBMTihuLHQsZSl7cmV0dXJuIG4uc2V0KEdtZShuLHQpLGUpLGV9ZnVuY3Rpb24gR21lKG4s''@;'; put 'put ''dCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1wbChabWUsJDApO3ZhciBPTj1uZXcg''@;'; put 'put ''V2Vha01hcCxDaz1uZXcgV2Vha01hcCxQTj1uZXcgV2Vha01hcCxGTj1uZXcgV2Vha01hcCxITj1uZXcgV2Vha01hcDtjbGFzcyBTdXR7Y29uc3RydWN0b3IoKXtsZXR7aW5pdGlhbEluZGV4VmFsdWU6dH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOnt9O3drKHRoaXMsT04sbmV3IFNldCksd2sodGhpcyxDayxbXSksd2sodGhpcyxQTixbXSksd2sodGhpcyxGTiwhMSksd2sodGhpcyxITiwhMSksTE4oSE4sdGhpcyx0Pz8hMSl9Y3JlYXRlT2JzZXJ2ZXIoKXtjb25zdCB0PW5ldyBabWU7cmV0dXJuIFhmKE9OLHRoaXMpLmFkZCh0''@;'; put 'put ''KSx0LmFkZExvY2FsSG9vaygidW5zdWJzY3JpYmUiLCgpPT57WGYoT04sdGhpcykuZGVsZXRlKHQpfSksdC5fd3JpdGVJbml0aWFsQ2hhbmdlcyhZbWUoWGYoQ2ssdGhpcyksWGYoUE4sdGhpcykpKSx0fWVtaXQodCl7bGV0IGU9WGYoUE4sdGhpcyk7KCFYZihGTix0aGlzKXx8WGYoQ2ssdGhp''@;'; put 'put ''cykubGVuZ3RoIT09dC5sZW5ndGgpJiYoMD09PXQubGVuZ3RoP3Q9bmV3IEFycmF5KGUubGVuZ3RoKS5maWxsKFhmKEhOLHRoaXMpKTpMTihDayx0aGlzLG5ldyBBcnJheSh0Lmxlbmd0aCkuZmlsbChYZihITix0aGlzKSkpLFhmKEZOLHRoaXMpfHwoTE4oRk4sdGhpcywhMCksZT1YZihDayx0''@;'; put 'put ''aGlzKSkpO2NvbnN0IHI9WW1lKGUsdCk7WGYoT04sdGhpcykuZm9yRWFjaChpPT5pLl93cml0ZShyKSksTE4oUE4sdGhpcyx0KX19ZnVuY3Rpb24gVmQobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIE11dChuKXt2YXIgdD1mdW5jdGlvbiB4dXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58''@;'; put 'put ''fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIHdRe2NvbnN0cnVjdG9yKCl7VmQodGhpcywiaW5kZXhlc1NlcXVlbmNlIixuZXcgam1lKSxWZCh0aGlzLCJ0cmltbWluZ01hcHNDb2xsZWN0aW9uIixuZXcgVW1lKHQ9PnQuc29tZShlPT4hMD09PWUpLCExKSksVmQodGhp''@;'; put 'put ''cywiaGlkaW5nTWFwc0NvbGxlY3Rpb24iLG5ldyBVbWUodD0+dC5zb21lKGU9PiEwPT09ZSksITEpKSxWZCh0aGlzLCJ2YXJpb3VzTWFwc0NvbGxlY3Rpb24iLG5ldyB5USksVmQodGhpcywiaGlkaW5nQ2hhbmdlc09ic2VydmFibGUiLG5ldyBTdXQoe2luaXRpYWxJbmRleFZhbHVlOiExfSkp''@;'; put 'put ''LFZkKHRoaXMsIm5vdFRyaW1tZWRJbmRleGVzQ2FjaGUiLFtdKSxWZCh0aGlzLCJub3RIaWRkZW5JbmRleGVzQ2FjaGUiLFtdKSxWZCh0aGlzLCJpc0JhdGNoZWQiLCExKSxWZCh0aGlzLCJpbmRleGVzU2VxdWVuY2VDaGFuZ2VkIiwhMSksVmQodGhpcywiaW5kZXhlc0NoYW5nZVNvdXJjZSIs''@;'; put 'put ''dm9pZCAwKSxWZCh0aGlzLCJ0cmltbWVkSW5kZXhlc0NoYW5nZWQiLCExKSxWZCh0aGlzLCJoaWRkZW5JbmRleGVzQ2hhbmdlZCIsITEpLFZkKHRoaXMsInJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZSIsW10pLFZkKHRoaXMsImZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hl''@;'; put 'put ''IixuZXcgTWFwKSxWZCh0aGlzLCJmcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlIixuZXcgTWFwKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9Pnt0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZSxudWxsKX0pLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2so''@;'; put 'put ''ImNoYW5nZSIsdD0+e3RoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNo''@;'; put 'put ''YW5nZSIsdD0+e3RoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0LHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2Ui''@;'; put 'put ''LHQ9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdCx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbil9KX1zdXNwZW5kT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSEwfXJlc3VtZU9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMSx0aGlzLnVwZGF0ZUNhY2hlKCl9Y3JlYXRl''@;'; put 'put ''Q2hhbmdlc09ic2VydmVyKHQpe2lmKCJoaWRpbmciIT09dCl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke3R9Ii5gKTtyZXR1cm4gdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5jcmVhdGVPYnNlcnZlcigpfWNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhN''@;'; put 'put ''YXAodCxlLHIpe3JldHVybiB0aGlzLnJlZ2lzdGVyTWFwKHQsZnVuY3Rpb24gZHV0KG4pe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKCF6bWUuaGFzKG4pKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIG1h''@;'; put 'put ''cCB0eXBlICgiJHtufSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBuZXcoem1lLmdldChuKSkodCl9KGUscikpfXJlZ2lzdGVyTWFwKHQsZSl7aWYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldCh0KXx8dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQodCl8fHRoaXMudmFy''@;'; put 'put ''aW91c01hcHNDb2xsZWN0aW9uLmdldCh0KSl0aHJvdyBFcnJvcihgTWFwIHdpdGggbmFtZSAiJHt0fSIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO2UgaW5zdGFuY2VvZiBiaz90aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIodCxlKTplIGluc3RhbmNlb2YgSU4/''@;'; put 'put ''dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3Rlcih0LGUpOnRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKHQsZSk7Y29uc3Qgcj10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiByPjAmJmUuaW5pdChyKSxlfXVucmVnaXN0ZXJNYXAodCl7dGhpcy50cmlt''@;'; put 'put ''bWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIodCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKHQpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIodCl9dW5yZWdpc3RlckFsbCgpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lz''@;'; put 'put ''dGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfWdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHQpe2NvbnN0IGU9dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlW3RdO3Jl''@;'; put 'put ''dHVybiB3YShlKT9lOm51bGx9Z2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KHQpe2NvbnN0IGU9dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGVbdF07cmV0dXJuIHdhKGUpP2U6bnVsbH1nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0KXtjb25zdCBlPXRoaXMuZnJv''@;'; put 'put ''bVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuZ2V0KHQpO3JldHVybiB3YShlKT9lOm51bGx9Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0KXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleCh0''@;'; put 'put ''KSl9Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0KXtjb25zdCBlPXRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5nZXQodCk7cmV0dXJuIHdhKGUpP2U6bnVsbH1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjIm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKG51bGw9PT10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHQpKXJldHVybiBudWxsO2lmKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5oYXModCkpcmV0dXJuIHQ7Y29uc3QgYT1BcnJh''@;'; put 'put ''eS5mcm9tKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5rZXlzKCkpO2xldCBjPS0xO3JldHVybiBjPWU+MD9hLmZpbmRJbmRleChtPT5tPnQpOmEucmV2ZXJzZSgpLmZpbmRJbmRleChtPT5tPHQpLC0xPT09Yz9yP3RoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KHQsLWUsITEpOm51bGw6YVtjXX1pbml0VG9MZW5ndGgoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTt0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheSh0''@;'; put 'put ''KS5rZXlzKCldLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkodCkua2V5cygpXSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbml0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbml0KHQpLHRoaXMuaW5kZXhlc0NoYW5n''@;'; put 'put ''ZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeSh0KSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkodCksdGhpcy52YXJpb3VzTWFwc0NvbGxl''@;'; put 'put ''Y3Rpb24uaW5pdEV2ZXJ5KHQpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpfWZpdFRvTGVuZ3RoKHQpe2NvbnN0IGU9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZih0PGUpe2NvbnN0IHI9Wy4uLkFycmF5KHRoaXMuZ2V0TnVtYmVyT2ZJbmRl''@;'; put 'put ''eGVzKCktdCkua2V5cygpXS5tYXAoaT0+aSt0KTt0aGlzLnJlbW92ZUluZGV4ZXMocil9ZWxzZSB0aGlzLmluc2VydEluZGV4ZXMoZSx0LWUpfWdldEluZGV4ZXNTZXF1ZW5jZSgpe3JldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5nZXRWYWx1ZXMoKX1zZXRJbmRleGVzU2VxdWVuY2UodCl7''@;'; put 'put ''dm9pZCAwPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJ1cGRhdGUiKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXModCksInVwZGF0ZSI9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3Vy''@;'; put 'put ''Y2U9dm9pZCAwKX1nZXROb3RUcmltbWVkSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRl''@;'; put 'put ''cihyPT4hMT09PXRoaXMuaXNUcmltbWVkKHIpKX1nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RofWdldE5vdEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihyPT4hMT09PXRoaXMuaXNIaWRkZW4ocikpfWdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RIaWRk''@;'; put 'put ''ZW5JbmRleGVzKCkubGVuZ3RofWdldFJlbmRlcmFibGVJbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU6dGhpcy5nZXROb3RUcmlt''@;'; put 'put ''bWVkSW5kZXhlcygpLmZpbHRlcihyPT4hMT09PXRoaXMuaXNIaWRkZW4ocikpfWdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5sZW5ndGh9Z2V0TnVtYmVyT2ZJbmRleGVzKCl7cmV0dXJuIHRoaXMuZ2V0SW5kZXhlc1NlcXVl''@;'; put 'put ''bmNlKCkubGVuZ3RofW1vdmVJbmRleGVzKHQsZSl7Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pO2NvbnN0IHI9V3ModCxQPT50aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KFApKSxpPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxhPXQubGVuZ3RoLGM9X2sodGhp''@;'; put 'put ''cy5nZXRJbmRleGVzU2VxdWVuY2UoKSxyKSxtPWMuZmlsdGVyKFA9PiExPT09dGhpcy5pc1RyaW1tZWQoUCkpO2xldCBDPWMuaW5kZXhPZihtW20ubGVuZ3RoLTFdKSsxO2UrYTxpJiYoQz1jLmluZGV4T2YobVtlXSkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0ibW92ZSIsdGhpcy5zZXRJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UoaFEoYyxDLHIpKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwfWlzVHJpbW1lZCh0KXtyZXR1cm4gdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleCh0KX1pc0hpZGRlbih0KXtyZXR1cm4gdGhpcy5oaWRpbmdNYXBz''@;'; put 'put ''Q29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgodCl9aW5zZXJ0SW5kZXhlcyh0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToic3RhcnQiO2NvbnN0IGk9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpW3RdLGE9''@;'; put 'put ''d2EoaSk/aTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLGM9dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5pbmNsdWRlcyhpKT90aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluZGV4T2YoaSk6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSxtPVdzKG5ldyBBcnJheShlKS5maWxsKGEpLChQ''@;'; put 'put ''LFkpPT5QK1kpO3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Imluc2VydCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5zZXJ0KGMsbSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMDtjb25zdCBDPSJlbmQiPT09cj9tLm1hcChQPT5QKzEp''@;'; put 'put ''Om07dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoYyxDKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoYyxDKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGMsQyksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9''@;'; put 'put ''cmVtb3ZlSW5kZXhlcyh0KXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZSh0KSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlv''@;'; put 'put ''bi5yZW1vdmVGcm9tRXZlcnkodCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkodCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KHQpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0''@;'; put 'put ''aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hl''@;'; put 'put ''PXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpLHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1''@;'; put 'put ''ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkfSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2Vk''@;'; put 'put ''PSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgdD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3Vh''@;'; put 'put ''bEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgZT0wO2U8dDtlKz0xKXtjb25zdCByPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoZSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQocixlKX19Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXhlcygpe2NvbnN0IHQ9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgZT0wO2U8dDtlKz0xKXtjb25zdCByPXRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGUp''@;'; put 'put ''LGk9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChyKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGksZSl9fX1mdW5jdGlvbiAkbWUobil7Y29uc3QgZT0vXihbYS16QS1aXXsyfSktKFthLXpBLVpdezJ9KSQvLmV4ZWMobik7cmV0dXJuIGU/YCR7''@;'; put 'put ''ZVsxXS50b0xvd2VyQ2FzZSgpfS0ke2VbMl0udG9VcHBlckNhc2UoKX1gOm59ZnVuY3Rpb24gS21lKG4pe3dhKG4pJiZtSihlbGBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7bn0iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVnaXN0ZXIgcGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJl''@;'; put 'put ''Zm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfXBsKHdRLCQwKTtjb25zdHtyZWdpc3RlcjpBdXQsZ2V0VmFsdWVzOmt1dH09V2YoInBocmFzZUZvcm1h''@;'; put 'put ''dHRlcnMiKTtmdW5jdGlvbiBxbWUobix0KXtBdXQobix0KX1xbWUoInBsdXJhbGl6ZSIsZnVuY3Rpb24gVHV0KG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJk51bWJlci5pc0ludGVnZXIodCk/blt0XTpufSkscW1lKCJzdWJzdGl0dXRlIixmdW5jdGlvbiBYbWUobix0KXtyZXR1cm4g''@;'; put 'put ''QXJyYXkuaXNBcnJheShuKT9uLm1hcChlPT5YbWUoZSx0KSk6cUgobix0KX0pO2NvbnN0IENRPSJDb21tb246IixOTj1gJHtDUX1va2AsU1E9YCR7Q1F9Y2FuY2VsYCxKbWU9IkNvbnRleHRNZW51Oml0ZW1zIixNUT1gJHtKbWV9Lm5vSXRlbXNgLHhRPWAke0ptZX0uaW5zZXJ0Um93QWJvdmVg''@;'; put 'put ''LEVRPWAke0ptZX0uaW5zZXJ0Um93QmVsb3dgLFRRPWAke0ptZX0uaW5zZXJ0Q29sdW1uT25UaGVMZWZ0YCxBUT1gJHtKbWV9Lmluc2VydENvbHVtbk9uVGhlUmlnaHRgLGtRPWAke0ptZX0ucmVtb3ZlUm93YCxEUT1gJHtKbWV9LnJlbW92ZUNvbHVtbmAsSVE9YCR7Sm1lfS51bmRvYCxSUT1g''@;'; put 'put ''JHtKbWV9LnJlZG9gLFZOPWAke0ptZX0ucmVhZE9ubHlgLExRPWAke0ptZX0uY2xlYXJDb2x1bW5gLE9RPWAke0ptZX0uY29weWAsUFE9YCR7Sm1lfS5jb3B5V2l0aEhlYWRlcnNgLEZRPWAke0ptZX0uY29weVdpdGhHcm91cEhlYWRlcnNgLEhRPWAke0ptZX0uY29weUhlYWRlcnNPbmx5YCxO''@;'; put 'put ''UT1gJHtKbWV9LmN1dGAsVlE9YCR7Sm1lfS5mcmVlemVDb2x1bW5gLEJRPWAke0ptZX0udW5mcmVlemVDb2x1bW5gLGpRPWAke0ptZX0ubWVyZ2VDZWxsc2AselE9YCR7Sm1lfS51bm1lcmdlQ2VsbHNgLFVRPWAke0ptZX0uYWRkQ29tbWVudGAsV1E9YCR7Sm1lfS5lZGl0Q29tbWVudGAsWlE9''@;'; put 'put ''YCR7Sm1lfS5yZW1vdmVDb21tZW50YCxZUT1gJHtKbWV9LnJlYWRPbmx5Q29tbWVudGAsR1E9YCR7Sm1lfS5hbGlnbmAsJFE9YCR7Sm1lfS5hbGlnbi5sZWZ0YCxLUT1gJHtKbWV9LmFsaWduLmNlbnRlcmAsWFE9YCR7Sm1lfS5hbGlnbi5yaWdodGAscVE9YCR7Sm1lfS5hbGlnbi5qdXN0aWZ5''@;'; put 'put ''YCxKUT1gJHtKbWV9LmFsaWduLnRvcGAsUVE9YCR7Sm1lfS5hbGlnbi5taWRkbGVgLGVlZT1gJHtKbWV9LmFsaWduLmJvdHRvbWAsdGVlPWAke0ptZX0uYm9yZGVyc2AsbmVlPWAke0ptZX0uYm9yZGVycy50b3BgLHJlZT1gJHtKbWV9LmJvcmRlcnMucmlnaHRgLGllZT1gJHtKbWV9LmJvcmRl''@;'; put 'put ''cnMuYm90dG9tYCxhZWU9YCR7Sm1lfS5ib3JkZXJzLmxlZnRgLG9lZT1gJHtKbWV9LmJvcmRlcnMucmVtb3ZlYCxzZWU9YCR7Sm1lfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93YCxsZWU9YCR7Sm1lfS5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnRgLGNlZT1gJHtKbWV9Lmhp''@;'; put 'put ''ZGVDb2x1bW5gLHVlZT1gJHtKbWV9LnNob3dDb2x1bW5gLGRlZT1gJHtKbWV9LmhpZGVSb3dgLGhlZT1gJHtKbWV9LnNob3dSb3dgLEJkPSJGaWx0ZXJzOiIsWGM9YCR7QmR9Y29uZGl0aW9uc2AsQk49YCR7WGN9Lm5vbmVgLGZlZT1gJHtYY30uaXNFbXB0eWAscGVlPWAke1hjfS5pc05vdEVt''@;'; put 'put ''cHR5YCxnZWU9YCR7WGN9LmlzRXF1YWxUb2AsbWVlPWAke1hjfS5pc05vdEVxdWFsVG9gLHZlZT1gJHtYY30uYmVnaW5zV2l0aGAseWVlPWAke1hjfS5lbmRzV2l0aGAsX2VlPWAke1hjfS5jb250YWluc2AsYmVlPWAke1hjfS5kb2VzTm90Q29udGFpbmAsSXV0PWAke1hjfS5ieVZhbHVlYCx3''@;'; put 'put ''ZWU9YCR7WGN9LmdyZWF0ZXJUaGFuYCxDZWU9YCR7WGN9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxTZWU9YCR7WGN9Lmxlc3NUaGFuYCxNZWU9YCR7WGN9Lmxlc3NUaGFuT3JFcXVhbFRvYCx4ZWU9YCR7WGN9LmlzQmV0d2VlbmAsRWVlPWAke1hjfS5pc05vdEJldHdlZW5gLFRlZT1gJHtYY30u''@;'; put 'put ''YWZ0ZXJgLEFlZT1gJHtYY30uYmVmb3JlYCxrZWU9YCR7WGN9LnRvZGF5YCxEZWU9YCR7WGN9LnRvbW9ycm93YCxJZWU9YCR7WGN9Lnllc3RlcmRheWAsUmVlPWAke0JkfWxhYmVscy5maWx0ZXJCeUNvbmRpdGlvbmAsTGVlPWAke0JkfWxhYmVscy5maWx0ZXJCeVZhbHVlYCxPZWU9YCR7QmR9''@;'; put 'put ''bGFiZWxzLmNvbmp1bmN0aW9uYCxqTj1gJHtCZH1sYWJlbHMuZGlzanVuY3Rpb25gLHpOPWAke0JkfXZhbHVlcy5ibGFua0NlbGxzYCxQZWU9YCR7QmR9YnV0dG9ucy5zZWxlY3RBbGxgLEZlZT1gJHtCZH1idXR0b25zLmNsZWFyYCxIZWU9YCR7QmR9YnV0dG9ucy5va2AsTmVlPWAke0JkfWJ1''@;'; put 'put ''dHRvbnMuY2FuY2VsYCxWZWU9YCR7QmR9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWFyY2hgLEJlZT1gJHtCZH1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCxqZWU9YCR7QmR9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWNvbmRWYWx1ZWAsRDQ9IlBhZ2luYXRpb246Iix6ZWU9YCR7RDR9c2VjdGlv''@;'; put 'put ''bi5wYWdpbmF0aW9uYCxVZWU9YCR7RDR9LnBhZ2VTaXplLmF1dG9gLFVOPWAke0Q0fXNlY3Rpb24ucGFnZVNpemVgLFdlZT1gJHtENH1zZWN0aW9uLmNvdW50ZXJgLFplZT1gJHtENH1zZWN0aW9uLm5hdmlnYXRpb25gLFllZT1gJHtENH1maXJzdFBhZ2VgLEdlZT1gJHtENH1wcmV2UGFnZWAs''@;'; put 'put ''JGVlPWAke0Q0fW5leHRQYWdlYCxLZWU9YCR7RDR9bGFzdFBhZ2VgLFhlZT0iQ2hlY2tib3hSZW5kZXJlcjoiLHFlZT1gJHtYZWV9Y2hlY2tlZGAsSmVlPWAke1hlZX11bmNoZWNrZWRgLFFtZT0iTG9hZGluZzoiLFFlZT1gJHtRbWV9dGl0bGVgLGtDPSJFbXB0eURhdGFTdGF0ZToiLGV0ZT1g''@;'; put 'put ''JHtrQ310aXRsZWAsdHRlPWAke2tDfWRlc2NyaXB0aW9uYCxudGU9YCR7a0N9dGl0bGUuZmlsdGVyc2AscnRlPWAke2tDfWRlc2NyaXB0aW9uLmZpbHRlcnNgLGl0ZT1gJHtrQ31idXR0b25zLmZpbHRlcnMucmVzZXRgLGU2ZT17bGFuZ3VhZ2VDb2RlOiJlbi1VUyIsW05OXToiT0siLFtTUV06''@;'; put 'put ''IkNhbmNlbCIsW01RXToiTm8gYXZhaWxhYmxlIG9wdGlvbnMiLFt4UV06Ikluc2VydCByb3cgYWJvdmUiLFtFUV06Ikluc2VydCByb3cgYmVsb3ciLFtUUV06Ikluc2VydCBjb2x1bW4gbGVmdCIsW0FRXToiSW5zZXJ0IGNvbHVtbiByaWdodCIsW2tRXTpbIlJlbW92ZSByb3ciLCJSZW1vdmUg''@;'; put 'put ''cm93cyJdLFtEUV06WyJSZW1vdmUgY29sdW1uIiwiUmVtb3ZlIGNvbHVtbnMiXSxbSVFdOiJVbmRvIixbUlFdOiJSZWRvIixbVk5dOiJSZWFkIG9ubHkiLFtMUV06IkNsZWFyIGNvbHVtbiIsW0dRXToiQWxpZ25tZW50IixbJFFdOiJMZWZ0IixbS1FdOiJDZW50ZXIiLFtYUV06IlJpZ2h0Iixb''@;'; put 'put ''cVFdOiJKdXN0aWZ5IixbSlFdOiJUb3AiLFtRUV06Ik1pZGRsZSIsW2VlZV06IkJvdHRvbSIsW1ZRXToiRnJlZXplIGNvbHVtbiIsW0JRXToiVW5mcmVlemUgY29sdW1uIixbdGVlXToiQm9yZGVycyIsW25lZV06IlRvcCIsW3JlZV06IlJpZ2h0IixbaWVlXToiQm90dG9tIixbYWVlXToiTGVm''@;'; put 'put ''dCIsW29lZV06IlJlbW92ZSBib3JkZXIocykiLFtVUV06IkFkZCBjb21tZW50IixbV1FdOiJFZGl0IGNvbW1lbnQiLFtaUV06IkRlbGV0ZSBjb21tZW50IixbWVFdOiJSZWFkLW9ubHkgY29tbWVudCIsW2pRXToiTWVyZ2UgY2VsbHMiLFt6UV06IlVubWVyZ2UgY2VsbHMiLFtPUV06IkNvcHki''@;'; put 'put ''LFtQUV06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhlYWRlcnMiXSxbRlFdOlsiQ29weSB3aXRoIGdyb3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJzIl0sW0hRXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtOUV06IkN1dCIsW3Nl''@;'; put 'put ''ZV06Ikluc2VydCBjaGlsZCByb3ciLFtsZWVdOiJEZXRhY2ggZnJvbSBwYXJlbnQiLFtjZWVdOlsiSGlkZSBjb2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbdWVlXTpbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW2RlZV06WyJIaWRlIHJvdyIsIkhpZGUgcm93cyJdLFtoZWVdOlsiU2hv''@;'; put 'put ''dyByb3ciLCJTaG93IHJvd3MiXSxbQk5dOiJOb25lIixbZmVlXToiSXMgZW1wdHkiLFtwZWVdOiJJcyBub3QgZW1wdHkiLFtnZWVdOiJJcyBlcXVhbCB0byIsW21lZV06IklzIG5vdCBlcXVhbCB0byIsW3ZlZV06IkJlZ2lucyB3aXRoIixbeWVlXToiRW5kcyB3aXRoIixbX2VlXToiQ29udGFp''@;'; put 'put ''bnMiLFtiZWVdOiJEb2VzIG5vdCBjb250YWluIixbd2VlXToiR3JlYXRlciB0aGFuIixbQ2VlXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbU2VlXToiTGVzcyB0aGFuIixbTWVlXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbeGVlXToiSXMgYmV0d2VlbiIsW0VlZV06IklzIG5vdCBi''@;'; put 'put ''ZXR3ZWVuIixbVGVlXToiQWZ0ZXIiLFtBZWVdOiJCZWZvcmUiLFtrZWVdOiJUb2RheSIsW0RlZV06IlRvbW9ycm93IixbSWVlXToiWWVzdGVyZGF5Iixbek5dOiJCbGFuayBjZWxscyIsW1JlZV06IkZpbHRlciBieSBjb25kaXRpb24iLFtMZWVdOiJGaWx0ZXIgYnkgdmFsdWUiLFtPZWVdOiJB''@;'; put 'put ''bmQiLFtqTl06Ik9yIixbUGVlXToiU2VsZWN0IGFsbCIsW0ZlZV06IkNsZWFyIixbSGVlXToiT0siLFtOZWVdOiJDYW5jZWwiLFtWZWVdOiJTZWFyY2giLFtCZWVdOiJWYWx1ZSIsW2plZV06IlNlY29uZCB2YWx1ZSIsW3plZV06IlBhZ2luYXRpb24iLFtVTl06IlBhZ2Ugc2l6ZSIsW1VlZV06''@;'; put 'put ''IkF1dG8iLFtXZWVdOiJbc3RhcnRdIC0gW2VuZF0gb2YgW3RvdGFsXSIsW1plZV06IlBhZ2UgW2N1cnJlbnRQYWdlXSBvZiBbdG90YWxQYWdlc10iLFtZZWVdOiJHbyB0byBmaXJzdCBwYWdlIixbR2VlXToiR28gdG8gcHJldmlvdXMgcGFnZSIsWyRlZV06IkdvIHRvIG5leHQgcGFnZSIsW0tl''@;'; put 'put ''ZV06IkdvIHRvIGxhc3QgcGFnZSIsW3FlZV06IkNoZWNrZWQiLFtKZWVdOiJVbmNoZWNrZWQiLFtRZWVdOiJMb2FkaW5nLi4uIixbZXRlXToiTm8gZGF0YSBhdmFpbGFibGUiLFt0dGVdOiJUaGVyZVx1MjAxOXMgbm90aGluZyB0byBkaXNwbGF5IHlldC4iLFtudGVdOiJObyByZXN1bHRzIGZv''@;'; put 'put ''dW5kIixbcnRlXToiSXQgbG9va3MgbGlrZSB5b3VyIGN1cnJlbnQgZmlsdGVycyBhcmUgaGlkaW5nIGFsbCByZXN1bHRzLiIsW2l0ZV06IlJlc2V0IGZpbHRlcnMifSxMdXQ9TixhdGU9ZTZlLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6T3V0LGdldEl0ZW06dDZlLGhhc0l0ZW06UHV0LGdldFZh''@;'; put 'put ''bHVlczpGdXR9PVdmKCJsYW5ndWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiBuNmUobix0KXtsZXQgZT1uLHI9dDtyZXR1cm4gaG8obikmJihyPW4sZT1yLmxhbmd1YWdlQ29kZSksZnVuY3Rpb24gSHV0KG4sdCl7biE9PWF0ZSYmZnVuY3Rpb24gRXV0KG4sdCl7YXModCwoZSxyKT0+e21j''@;'; put 'put ''KG5bcl0pJiYobltyXT1lKX0pfSh0LHQ2ZShhdGUpKX0oZSxyKSxPdXQoZSx0ZChyKSksdGQocil9ZnVuY3Rpb24gcjZlKG4pe3JldHVybiBvdGUobik/dGQodDZlKG4pKTpudWxsfWZ1bmN0aW9uIG90ZShuKXtyZXR1cm4gUHV0KG4pfWZ1bmN0aW9uIGk2ZShuLHQsZSl7Y29uc3Qgcj1yNmUo''@;'; put 'put ''bik7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7Y29uc3QgaT1yW3RdO2lmKG1jKGkpKXJldHVybiBudWxsO2NvbnN0IGE9ZnVuY3Rpb24gVnV0KG4sdCl7cmV0dXJuIGZ1bmN0aW9uIER1dCgpe3JldHVybiBrdXQoKX0oKS5yZWR1Y2UoKGUscik9PnIoZSx0KSxuKX0oaSxlKTtyZXR1cm4gQXJy''@;'; put 'put ''YXkuaXNBcnJheShhKT9hWzBdOmF9bjZlKGU2ZSk7Y29uc3QgYTZlPSJhY3RpdmUtaGVhZGVyIixzdGU9ImhlYWRlciIsV049ImZvY3VzIjtjbGFzcyBvNmV7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNldHRpbmdzPXQsdGhpcy5jZWxsUmFuZ2U9ZXx8bnVsbH1pc0VtcHR5KCl7cmV0dXJuIG51''@;'; put 'put ''bGw9PT10aGlzLmNlbGxSYW5nZX1hZGQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKHQpOnRoaXMuY2VsbFJhbmdlLmV4cGFuZCh0KSx0aGlzfXJlcGxhY2UodCxlKXtpZighdGhpcy5pc0VtcHR5KCkpe2lmKHRo''@;'; put 'put ''aXMuY2VsbFJhbmdlLmZyb20uaXNFcXVhbCh0KSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UuZnJvbT1lLCEwO2lmKHRoaXMuY2VsbFJhbmdlLnRvLmlzRXF1YWwodCkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLnRvPWUsITB9cmV0dXJuITF9Y2xlYXIoKXtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVs''@;'; put 'put ''bCx0aGlzfWdldENvcm5lcnMoKXtjb25zdCB0PXRoaXMuY2VsbFJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxlPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuW3Qucm93LHQuY29sLGUucm93LGUuY29sXX1kZXN0cm95KCl7dGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJkZXN0cm95Iil9fXBsKG82ZSwkMCk7Y29uc3QgWnV0PW82ZTtjb25zdCBiNT1jbGFzcyBLdXQgZXh0ZW5kcyBadXR7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LG51bGwpLGZ1bmN0aW9uIFl1dChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gR3V0KG4pe3ZhciB0PWZ1bmN0aW9u''@;'; put 'put ''ICR1dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''bix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KHRoaXMsInZpc3VhbENlbGxSYW5nZSIsbnVsbCksdGhpcy52aXN1YWxDZWxsUmFuZ2U9ZXx8bnVsbCx0aGlzLmNvbW1pdCgpfWFkZCh0KXtyZXR1cm4gbnVsbD09PXRoaXMu''@;'; put 'put ''dmlzdWFsQ2VsbFJhbmdlP3RoaXMudmlzdWFsQ2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKHQpOnRoaXMudmlzdWFsQ2VsbFJhbmdlLmV4cGFuZCh0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMudmlzdWFsQ2VsbFJhbmdlPW51bGwsc3VwZXIuY2xlYXIoKX10cmlt''@;'; put 'put ''VG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkodCl7bGV0e2Zyb206ZSx0bzpyfT10LGk9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGUsMSksYT10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMociwtMSk7cmV0dXJuIG51bGw9PT1pfHxudWxsPT09YT9udWxsOigoaS5yb3c+YS5y''@;'; put 'put ''b3d8fGkuY29sPmEuY29sKSYmKGk9ZSxhPXIpLHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGksaSxhKSl9Z2V0TmVhcmVzdE5vdEhpZGRlbkNvb3Jkcyh0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTplO2NvbnN0''@;'; put 'put ''IGk9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5yb3dJbmRleE1hcHBlcix0LnJvdyxlKTtpZihudWxsPT09aSlyZXR1cm4gbnVsbDtjb25zdCBhPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHRoaXMuc2V0dGluZ3MuY29sdW1uSW5kZXhNYXBwZXIs''@;'; put 'put ''dC5jb2wscik7cmV0dXJuIG51bGw9PT1hP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGksYSl9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHQsZSxyKXtyZXR1cm4gZTwwP2U6dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZSxyKX1jb21taXQoKXtpZihudWxsPT09dGhp''@;'; put 'put ''cy52aXN1YWxDZWxsUmFuZ2UpcmV0dXJuIHRoaXM7Y29uc3QgdD10aGlzLnRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seSh0aGlzLnZpc3VhbENlbGxSYW5nZSk7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGw9PT10P251bGw6dGhpcy5jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKHQuZnJv''@;'; put 'put ''bSx0LnRvKSx0aGlzfXN5bmNXaXRoKHQpe2NvbnN0IGU9dC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCkscj0iTi1TIj09PXQuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLGk9IlctRSI9PT10LmdldEhvcml6b250YWxEaXJlY3Rpb24oKT8xOi0xLGE9dGhpcy5zZXR0aW5ncy52aXN1YWxU''@;'; put 'put ''b1JlbmRlcmFibGVDb29yZHModGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KTtsZXQgYz1udWxsO2lmKChudWxsPT09YXx8bnVsbD09PWEuY29sfHxudWxsPT09YS5yb3cpJiYoYz10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoZSxyLGkpKSxudWxsIT09YyYmdC5vdmVybGFw''@;'; put 'put ''cyhjKSl7Y29uc3QgbT10LmhpZ2hsaWdodC5jbG9uZSgpO2lmKG0ucm93Pj0wJiYobS5yb3c9Yy5yb3cpLG0uY29sPj0wJiYobS5jb2w9Yy5jb2wpLG51bGw9PT10aGlzLmNlbGxSYW5nZSl7Y29uc3QgQz10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhtKTt0aGlzLmNl''@;'; put 'put ''bGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShDKX10LnNldEhpZ2hsaWdodChtKX1yZXR1cm4iZm9jdXMiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlJiZudWxsIT09YSYmbnVsbD09PWMmJnQuc2V0SGlnaGxpZ2h0KHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hs''@;'; put 'put ''aWdodCksdGhpc31nZXRDb3JuZXJzKCl7Y29uc3R7ZnJvbTp0LHRvOmV9PXRoaXMuY2VsbFJhbmdlO3JldHVybltNYXRoLm1pbih0LnJvdyxlLnJvdyksTWF0aC5taW4odC5jb2wsZS5jb2wpLE1hdGgubWF4KHQucm93LGUucm93KSxNYXRoLm1heCh0LmNvbCxlLmNvbCldfWdldFZpc3VhbENv''@;'; put 'put ''cm5lcnMoKXtjb25zdCB0PXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkpLGU9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVy''@;'; put 'put ''KCkpO3JldHVyblt0LnJvdyx0LmNvbCxlLnJvdyxlLmNvbF19Y3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZSh0LGUpe2NvbnN0IHI9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHModCksaT10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhlKTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PXIucm93fHxudWxsPT09ci5jb2x8fG51bGw9PT1pLnJvd3x8bnVsbD09PWkuY29sP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UocixyLGkpfX07ZnVuY3Rpb24gY3RlKG4pe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6dCwuLi5lfT1uO3JldHVybiBuZXcg''@;'; put 'put ''YjUoe2NsYXNzTmFtZTp0LC4uLmUsc2VsZWN0aW9uVHlwZTphNmV9KX1mdW5jdGlvbiBYdXQobil7bGV0e2FyZWFDb3JuZXJWaXNpYmxlOnQsLi4uZX09bjtyZXR1cm4gbmV3IGI1KHtjbGFzc05hbWU6ImFyZWEiLGNyZWF0ZUxheWVyczohMCxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiM0Yjg5''@;'; put 'put ''ZmYiLGNvcm5lclZpc2libGU6dH0sLi4uZSxzZWxlY3Rpb25UeXBlOiJhcmVhIn0pfWZ1bmN0aW9uIHF1dChuKXtsZXR7Li4udH09bjtyZXR1cm4gbmV3IGI1KHtjbGFzc05hbWU6ImhpZ2hsaWdodCIsLi4udCxzZWxlY3Rpb25UeXBlOiJhcmVhIn0pfWZ1bmN0aW9uIEp1dChuKXtsZXR7Y29s''@;'; put 'put ''dW1uQ2xhc3NOYW1lOnQsLi4uZX09bjtyZXR1cm4gbmV3IGI1KHtjbGFzc05hbWU6dCwuLi5lLHNlbGVjdGlvblR5cGU6ImNvbHVtbiJ9KX1mdW5jdGlvbiBzNmUobil7bGV0e2hlYWRlckNsYXNzTmFtZTp0LC4uLmV9PW47cmV0dXJuIG5ldyBiNSh7Y2xhc3NOYW1lOnQsLi4uZSxzZWxlY3Rp''@;'; put 'put ''b25UeXBlOnN0ZX0pfWZ1bmN0aW9uIG4wdChuKXtsZXR7cm93Q2xhc3NOYW1lOnQsLi4uZX09bjtyZXR1cm4gbmV3IGI1KHtjbGFzc05hbWU6dCwuLi5lLHNlbGVjdGlvblR5cGU6InJvdyJ9KX1mdW5jdGlvbiBMaChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gYTB0KG4pe3ZhciB0PWZ1bmN0''@;'; put 'put ''aW9uIG8wdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gdzUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBJND1uZXcgV2Vha1NldDtjbGFzcyBzMHR7Y29uc3RydWN0b3IodCl7KGZ1bmN0aW9uIHIwdChuLHQpeyhmdW5jdGlvbiBpMHQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LmFkZChuKX0pKHRoaXMsSTQpLExoKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksTGgodGhpcywibGF5ZXJMZXZlbCIsMCksTGgodGhpcywiZm9j''@;'; put 'put ''dXMiLHZvaWQgMCksTGgodGhpcywiZmlsbCIsdm9pZCAwKSxMaCh0aGlzLCJsYXllcmVkQXJlYXMiLG5ldyBNYXApLExoKHRoaXMsImFyZWFzIixuZXcgTWFwKSxMaCh0aGlzLCJyb3dIZWFkZXJzIixuZXcgTWFwKSxMaCh0aGlzLCJjb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxMaCh0aGlzLCJh''@;'; put 'put ''Y3RpdmVSb3dIZWFkZXJzIixuZXcgTWFwKSxMaCh0aGlzLCJhY3RpdmVDb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxMaCh0aGlzLCJhY3RpdmVDb3JuZXJIZWFkZXJzIixuZXcgTWFwKSxMaCh0aGlzLCJyb3dIaWdobGlnaHRzIixuZXcgTWFwKSxMaCh0aGlzLCJjb2x1bW5IaWdobGlnaHRzIixu''@;'; put 'put ''ZXcgTWFwKSxMaCh0aGlzLCJjdXN0b21TZWxlY3Rpb25zIixbXSksdGhpcy5vcHRpb25zPXQsdGhpcy5mb2N1cz1mdW5jdGlvbiBRdXQobil7bGV0e2NlbGxDb3JuZXJWaXNpYmxlOnQsLi4uZX09bjtyZXR1cm4gbmV3IGI1KHtjbGFzc05hbWU6ImN1cnJlbnQiLGhlYWRlckF0dHJpYnV0ZXM6''@;'; put 'put ''W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0sYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOnR9LC4uLmUsc2VsZWN0aW9uVHlwZTpXTn0pfSh0KSx0aGlzLmZpbGw9ZnVuY3Rpb24gdDB0KG4pe2xldHsuLi50fT1uO3JldHVybiBuZXcgYjUoe2NsYXNzTmFt''@;'; put 'put ''ZToiZmlsbCIsYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjZmYwMDAwIn0sLi4udCxzZWxlY3Rpb25UeXBlOiJmaWxsIn0pfSh0KX1pc0VuYWJsZWRGb3IodCxlKXtsZXQgcj10O3Q9PT1XTiYmKHI9ImN1cnJlbnQiKTtsZXQgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWRDZWxsU2VsZWN0aW9uKGUu''@;'; put 'put ''cm93LGUuY29sKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGkmJihpPVtpXSksITE9PT1pfHxBcnJheS5pc0FycmF5KGkpJiYhaS5pbmNsdWRlcyhyKX11c2VMYXllckxldmVsKCl7cmV0dXJuIHRoaXMubGF5ZXJMZXZlbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06MCx0aGlzfWdldEZvY3VzKCl7cmV0dXJuIHRoaXMuZm9jdXN9Z2V0RmlsbCgpe3JldHVybiB0aGlzLmZpbGx9Y3JlYXRlTGF5ZXJlZEFyZWEoKXtyZXR1cm4gdzUoSTQsdGhpcyxDNSkuY2FsbCh0aGlzLHRoaXMubGF5ZXJlZEFyZWFzLFh1dCl9Z2V0TGF5ZXJlZEFy''@;'; put 'put ''ZWFzKCl7cmV0dXJuWy4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpXX1jcmVhdGVBcmVhKCl7cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFyZWFzLHF1dCl9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMoKV19Y3JlYXRlUm93SGVhZGVyKCl7''@;'; put 'put ''cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLnJvd0hlYWRlcnMsczZlKX1nZXRSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmNv''@;'; put 'put ''bHVtbkhlYWRlcnMsczZlKX1nZXRDb2x1bW5IZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlUm93SGVhZGVyKCl7cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZVJvd0hlYWRlcnMsY3RlKX1nZXRBY3Rp''@;'; put 'put ''dmVSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMsY3RlKX1nZXRBY3RpdmVDb2x1bW5IZWFk''@;'; put 'put ''ZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCl7cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMsY3RlKX1nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCl7''@;'; put 'put ''cmV0dXJuWy4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlUm93SGlnaGxpZ2h0KCl7cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLnJvd0hpZ2hsaWdodHMsbjB0KX1nZXRSb3dIaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMucm93SGlnaGxp''@;'; put 'put ''Z2h0cy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCl7cmV0dXJuIHc1KEk0LHRoaXMsQzUpLmNhbGwodGhpcyx0aGlzLmNvbHVtbkhpZ2hsaWdodHMsSnV0KX1nZXRDb2x1bW5IaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKV19Z2V0''@;'; put 'put ''Q3VzdG9tU2VsZWN0aW9ucygpe3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVzKCldfWFkZEN1c3RvbVNlbGVjdGlvbih0KXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChmdW5jdGlvbiBlMHQobil7bGV0e2JvcmRlcjp0LHZpc3VhbENlbGxSYW5nZTplLC4uLnJ9PW47''@;'; put 'put ''cmV0dXJuIG5ldyBiNSh7Li4udCwuLi5yLHNlbGVjdGlvblR5cGU6ImN1c3RvbS1zZWxlY3Rpb24ifSxlKX0oey4uLnRoaXMub3B0aW9ucywuLi50fSkpfWNsZWFyKCl7dGhpcy5mb2N1cy5jbGVhcigpLHRoaXMuZmlsbC5jbGVhcigpLFluKHRoaXMuYXJlYXMudmFsdWVzKCksdD0+e3QuY2xl''@;'; put 'put ''YXIoKX0pLFluKHRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLHQ9Pnt0LmNsZWFyKCl9KSxZbih0aGlzLnJvd0hlYWRlcnMudmFsdWVzKCksdD0+e3QuY2xlYXIoKX0pLFluKHRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSx0PT57dC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVSb3dIZWFk''@;'; put 'put ''ZXJzLnZhbHVlcygpLHQ9Pnt0LmNsZWFyKCl9KSxZbih0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksdD0+e3QuY2xlYXIoKX0pLFluKHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSx0PT57dC5jbGVhcigpfSksWW4odGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygp''@;'; put 'put ''LHQ9Pnt0LmNsZWFyKCl9KSxZbih0aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksdD0+e3QuY2xlYXIoKX0pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuW3RoaXMuZm9jdXMsdGhpcy5maWxsLC4uLnRoaXMuYXJlYXMudmFsdWVzKCksLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVz''@;'; put 'put ''KCksLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1''@;'; put 'put ''ZXMoKSwuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY3VzdG9tU2VsZWN0aW9uc11bU3ltYm9sLml0ZXJhdG9yXSgpfX1mdW5jdGlvbiBDNShuLHQpe2NvbnN0IGU9dGhpcy5sYXllckxldmVsO2lmKG4uaGFz''@;'; put 'put ''KGUpKXJldHVybiBuLmdldChlKTtjb25zdCByPXQoe2xheWVyTGV2ZWw6ZSwuLi50aGlzLm9wdGlvbnN9KTtyZXR1cm4gbi5zZXQoZSxyKSxyfWNvbnN0IGwwdD1zMHQ7ZnVuY3Rpb24gbDZlKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBjMHQobil7dmFyIHQ9ZnVuY3Rpb24gdTB0KG4sdCl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By''@;'; put 'put ''aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVl''@;'; put 'put ''OmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyB1dGV7Y29uc3RydWN0b3IodCl7bDZlKHRoaXMsInJhbmdlcyIsW10pLGw2ZSh0aGlzLCJjcmVhdGVDZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jcmVhdGVDZWxsUmFuZ2U9dH1pc0Vt''@;'; put 'put ''cHR5KCl7cmV0dXJuIDA9PT10aGlzLnNpemUoKX1zZXQodCl7cmV0dXJuIHRoaXMuY2xlYXIoKSx0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKHQpKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZSh0KSksdGhpc31w''@;'; put 'put ''dXNoKHQpe3JldHVybiB0aGlzLnJhbmdlcy5wdXNoKHQpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpfWN1cnJlbnQoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKS0xKX1wcmV2aW91cygpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgp''@;'; put 'put ''LTIpfWluY2x1ZGVzKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTooKT0+ITA7cmV0dXJuIHRoaXMucmFuZ2VzLnNvbWUoKHIsaSk9PnIuaW5jbHVkZXModCkmJmUocixpKSl9ZmluZEFsbCh0KXtjb25zdCBlPVtdO3JldHVy''@;'; put 'put ''biB0aGlzLnJhbmdlcy5mb3JFYWNoKChyLGkpPT57ci5pc0VxdWFsKHQpJiZlLnB1c2goe3JhbmdlOnIsbGF5ZXI6aX0pfSksZX1yZW1vdmUodCl7cmV0dXJuIHRoaXMucmFuZ2VzPXRoaXMucmFuZ2VzLmZpbHRlcihlPT4hdC5zb21lKHI9PnIuaXNFcXVhbChlKSkpLHRoaXN9cmVtb3ZlTGF5''@;'; put 'put ''ZXJzKHQpe3JldHVybiB0aGlzLnJhbmdlcz10aGlzLnJhbmdlcy5maWx0ZXIoKGUscik9PiF0LmluY2x1ZGVzKHIpKSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9Y2xvbmUoKXtjb25zdCB0PW5l''@;'; put 'put ''dyB1dGUodGhpcy5jcmVhdGVDZWxsUmFuZ2UpO3JldHVybiB0LnJhbmdlcz10aGlzLnJhbmdlcy5tYXAoZT0+ZS5jbG9uZSgpKSx0fW1hcCh0KXtyZXR1cm4gdGhpcy5yYW5nZXM9dGhpcy5yYW5nZXMubWFwKChlLHIpPT50KGUscikpLHRoaXN9cGVla0J5SW5kZXgoKXtsZXQgZSx0PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiB0Pj0wJiZ0PHRoaXMuc2l6ZSgpJiYoZT10aGlzLnJhbmdlc1t0XSksZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLnJhbmdlc1tTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0''@;'; put 'put ''IGQwdD11dGU7ZnVuY3Rpb24gZHRlKG4sdCxlKXtjNmUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIGM2ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9''@;'; put 'put ''ZnVuY3Rpb24gZjAobix0KXtyZXR1cm4gbi5nZXQoQ2wobix0KSl9ZnVuY3Rpb24gREMobix0LGUpe3JldHVybiBuLnNldChDbChuLHQpLGUpLGV9ZnVuY3Rpb24gQ2wobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBTNT1uZXcgV2Vha01hcCx6dj1uZXcgV2Vha01hcCxJMj1uZXcgV2Vha01hcCxEbD1uZXcgV2Vha1NldDtjbGFzcyBodGV7Y29uc3RydWN0b3IodCxl''@;'; put 'put ''KXsoZnVuY3Rpb24gaDB0KG4sdCl7YzZlKG4sdCksdC5hZGQobil9KSh0aGlzLERsKSxkdGUodGhpcyxTNSx2b2lkIDApLGR0ZSh0aGlzLHp2LDApLGR0ZSh0aGlzLEkyLHt4OjAseTowfSksZnVuY3Rpb24gZjB0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBwMHQobil7dmFyIHQ9ZnVuY3Rp''@;'; put 'put ''b24gZzB0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywidGFibGVBcGkiLHZvaWQgMCksREMoUzUsdGhpcyx0KSx0aGlzLnRhYmxlQXBpPWV9c2V0QWN0aXZlTGF5ZXJJbmRleCh0KXtEQyh6dix0aGlzLHQpfWdldEN1''@;'; put 'put ''cnJlbnRTZWxlY3Rpb24oKXtyZXR1cm4gZjAoUzUsdGhpcykucGVla0J5SW5kZXgoZjAoenYsdGhpcykpfXRyYW5zZm9ybVN0YXJ0KHQsZSl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtEQyhJMix0aGlzLHRoaXMuY2FsY3Vs''@;'; put 'put ''YXRlT2Zmc2V0KCkpO2NvbnN0IGk9dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKHQsZSk7bGV0IGE9dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCkuaGlnaGxpZ2h0O2NvbnN0IGM9dGhpcy50YWJsZUFwaS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoYSk7bGV0IG09MCxDPTA7aWYo''@;'; put 'put ''dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsaSksbnVsbCE9PWMucm93JiZudWxsIT09Yy5jb2wpe2xldHt3aWR0aDpQLGhlaWdodDpZfT1DbChEbCx0aGlzLGZ0ZSkuY2FsbCh0aGlzKTtjb25zdHtyb3c6Sixjb2w6Y2V9PUNsKERsLHRoaXMsZjZlKS5jYWxsKHRo''@;'; put 'put ''aXMsYSksZmU9dGhpcy50YWJsZUFwaS5maXhlZFJvd3NCb3R0b20oKSxBZT10aGlzLnRhYmxlQXBpLm1pblNwYXJlUm93cygpLEhlPXRoaXMudGFibGVBcGkubWluU3BhcmVDb2xzKCksWGU9dGhpcy50YWJsZUFwaS5hdXRvV3JhcFJvdygpLHJ0PXRoaXMudGFibGVBcGkuYXV0b1dyYXBDb2wo''@;'; put 'put ''KSxkdD10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMoSitpLnJvdyxjZStpLmNvbCk7aWYoZHQucm93Pj1ZKXtjb25zdCBwbj1BaChyJiZBZT4wJiYwPT09ZmUpLG9uPWR0LmNvbCsxLGduPW9uPj1QLFpuPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhkdC5yb3ctWSxnbj9v''@;'; put 'put ''bi1QOm9uKTtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLHBuLENsKERsLHRoaXMsSUMpLmNhbGwodGhpcyxabiksZ24pLHBuLnZhbHVlKXRoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Um93UmVxdWlyZSIsdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCkpO2Vsc2Ug''@;'; put 'put ''aWYocnQpe2lmKHRoaXMuc2hvdWxkU3dpdGNoU2VsZWN0aW9uTGF5ZXIoKSYmZ24mJmYwKFM1LHRoaXMpLnNpemUoKT4xKXtDbChEbCx0aGlzLHU2ZSkuY2FsbCh0aGlzKTtjb25zdCBHcj1DbChEbCx0aGlzLFpOKS5jYWxsKHRoaXMsImZvcndhcmQiKTtudWxsIT09R3ImJlpuLmFzc2lnbihH''@;'; put 'put ''cil9ZHQuYXNzaWduKFpuKX19ZWxzZSBpZihkdC5yb3c8MCl7Y29uc3QgcG49QWgocnQpLG9uPWR0LmNvbC0xLGduPW9uPDAsWm49dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKFkrZHQucm93LGduP1Arb246b24pO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3Jh''@;'; put 'put ''cCIscG4sQ2woRGwsdGhpcyxJQykuY2FsbCh0aGlzLFpuKSxnbikscnQpe2lmKHRoaXMuc2hvdWxkU3dpdGNoU2VsZWN0aW9uTGF5ZXIoKSYmZ24mJmYwKFM1LHRoaXMpLnNpemUoKT4xKXtDbChEbCx0aGlzLGQ2ZSkuY2FsbCh0aGlzKTtjb25zdCBHcj1DbChEbCx0aGlzLFpOKS5jYWxsKHRo''@;'; put 'put ''aXMsImJhY2t3YXJkIik7bnVsbCE9PUdyJiZabi5hc3NpZ24oR3IpfWR0LmFzc2lnbihabil9fWlmKCh7d2lkdGg6UCxoZWlnaHQ6WX09Q2woRGwsdGhpcyxmdGUpLmNhbGwodGhpcykpLGR0LmNvbD49UCl7Y29uc3QgcG49QWgociYmSGU+MCksb249ZHQucm93KzEsZ249b24+PVksWm49dGhp''@;'; put 'put ''cy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKGduP29uLVk6b24sZHQuY29sLVApO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIscG4sQ2woRGwsdGhpcyxJQykuY2FsbCh0aGlzLFpuKSxnbikscG4udmFsdWUpdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1''@;'; put 'put ''aXJlIix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSk7ZWxzZSBpZihYZSl7aWYodGhpcy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpJiZnbiYmZjAoUzUsdGhpcykuc2l6ZSgpPjEpe0NsKERsLHRoaXMsdTZlKS5jYWxsKHRoaXMpO2NvbnN0IEdyPUNsKERsLHRoaXMsWk4pLmNh''@;'; put 'put ''bGwodGhpcywiZm9yd2FyZCIpO251bGwhPT1HciYmWm4uYXNzaWduKEdyKX1kdC5hc3NpZ24oWm4pfX1lbHNlIGlmKGR0LmNvbDwwKXtjb25zdCBwbj1BaChYZSksb249ZHQucm93LTEsZ249b248MCxabj10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMoZ24/WStvbjpvbixQK2R0LmNv''@;'; put 'put ''bCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIixwbixDbChEbCx0aGlzLElDKS5jYWxsKHRoaXMsWm4pLGduKSxYZSl7aWYodGhpcy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpJiZnbiYmZjAoUzUsdGhpcykuc2l6ZSgpPjEpe0NsKERsLHRoaXMsZDZlKS5jYWxs''@;'; put 'put ''KHRoaXMpO2NvbnN0IEdyPUNsKERsLHRoaXMsWk4pLmNhbGwodGhpcywiYmFja3dhcmQiKTtudWxsIT09R3ImJlpuLmFzc2lnbihHcil9ZHQuYXNzaWduKFpuKX19Y29uc3R7cm93RGlyOmp0LGNvbERpcjpGdH09Q2woRGwsdGhpcyxoNmUpLmNhbGwodGhpcyxkdCk7bT1qdCxDPUZ0LGE9Q2wo''@;'; put 'put ''RGwsdGhpcyxJQykuY2FsbCh0aGlzLGR0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixhLG0sQykse3NlbGVjdGlvbkxheWVyOmYwKHp2LHRoaXMpLHZpc3VhbENvb3JkczphfX10cmFuc2Zvcm1FbmQodCxlKXtEQyhJMix0aGlzLHRoaXMuY2FsY3Vs''@;'; put 'put ''YXRlT2Zmc2V0KCkpO2NvbnN0IHI9dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKHQsZSksaT10aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKSxhPXRoaXMudGFibGVBcGkudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGkuaGlnaGxpZ2h0KSxjPUNsKERsLHRoaXMsWU4pLmNhbGwodGhp''@;'; put 'put ''cyxpLnRvLnJvdyxpLmZyb20ucm93KSxtPUNsKERsLHRoaXMsR04pLmNhbGwodGhpcyxpLnRvLmNvbCxpLmZyb20uY29sKSxDPWkudG8uY2xvbmUoKTtsZXQgUD0wLFk9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsciksbnVsbCE9PWEucm93JiZudWxsIT09''@;'; put 'put ''YS5jb2wmJm51bGwhPT1jJiZudWxsIT09bSl7Y29uc3R7cm93OkosY29sOmNlfT1DbChEbCx0aGlzLGY2ZSkuY2FsbCh0aGlzLGkuaGlnaGxpZ2h0KSxmZT10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMoYytyLnJvdyxtK3IuY29sKSxBZT1pLmdldFRvcFN0YXJ0Q29ybmVyKCksSGU9''@;'; put 'put ''aS5nZXRUb3BFbmRDb3JuZXIoKSxYZT1pLmdldEJvdHRvbUVuZENvcm5lcigpO2lmKHIuY29sPDAmJm0+PWNlJiZmZS5jb2w8Y2Upe2NvbnN0IEZ0PWZlLmNvbC1jZTtmZS5jb2w9Q2woRGwsdGhpcyxHTikuY2FsbCh0aGlzLEFlLmNvbCxIZS5jb2wpK0Z0fWVsc2UgaWYoci5jb2w+MCYmbTw9''@;'; put 'put ''Y2UmJmZlLmNvbD5jZSl7Y29uc3QgRnQ9Q2woRGwsdGhpcyxHTikuY2FsbCh0aGlzLEhlLmNvbCxBZS5jb2wpLHBuPU1hdGgubWF4KGZlLmNvbC1GdCwxKTtmZS5jb2w9RnQrcG59aWYoci5yb3c8MCYmYz49SiYmZmUucm93PEope2NvbnN0IEZ0PWZlLnJvdy1KO2ZlLnJvdz1DbChEbCx0aGlz''@;'; put 'put ''LFlOKS5jYWxsKHRoaXMsQWUucm93LFhlLnJvdykrRnR9ZWxzZSBpZihyLnJvdz4wJiZjPD1KJiZmZS5yb3c+Sil7Y29uc3QgRnQ9Q2woRGwsdGhpcyxZTikuY2FsbCh0aGlzLFhlLnJvdyxBZS5yb3cpLHBuPU1hdGgubWF4KGZlLnJvdy1GdCwxKTtmZS5yb3c9RnQrcG59Y29uc3R7cm93RGly''@;'; put 'put ''OnJ0LGNvbERpcjpkdH09Q2woRGwsdGhpcyxoNmUpLmNhbGwodGhpcyxmZSk7UD1ydCxZPWR0O2NvbnN0IGp0PUNsKERsLHRoaXMsSUMpLmNhbGwodGhpcyxmZSk7MD09PXIucm93JiYwIT09ci5jb2w/Qy5jb2w9anQuY29sOjAhPT1yLnJvdyYmMD09PXIuY29sP0Mucm93PWp0LnJvdzooQy5y''@;'; put 'put ''b3c9anQucm93LEMuY29sPWp0LmNvbCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLEMsUCxZKSx7c2VsZWN0aW9uTGF5ZXI6ZjAoenYsdGhpcyksdmlzdWFsQ29vcmRzOkN9fWNhbGN1bGF0ZU9mZnNldCgpe3Rocm93IG5ldyBFcnJvcigiYGNhbGN1bGF0''@;'; put 'put ''ZU9mZnNldGAgaXMgbm90IGltcGxlbWVudGVkIil9Y291bnRSZW5kZXJhYmxlUm93cygpe3Rocm93IG5ldyBFcnJvcigiYGNvdW50UmVuZGVyYWJsZVJvd3NgIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKXt0aHJvdyBuZXcgRXJyb3IoImBjb3VudFJlbmRl''@;'; put 'put ''cmFibGVDb2x1bW5zYCBpcyBub3QgaW1wbGVtZW50ZWQiKX1zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpe3Rocm93IG5ldyBFcnJvcigiYHNob3VsZFN3aXRjaFNlbGVjdGlvbkxheWVyYCBpcyBub3QgaW1wbGVtZW50ZWQiKX19ZnVuY3Rpb24gdTZlKCl7Y29uc3Qgbj1mMCh6dix0aGlz''@;'; put 'put ''KSsxO3RoaXMuc2V0QWN0aXZlTGF5ZXJJbmRleChuPj1mMChTNSx0aGlzKS5zaXplKCk/MDpuKSxEQyhJMix0aGlzLHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCkpfWZ1bmN0aW9uIGQ2ZSgpe2NvbnN0IG49ZjAoenYsdGhpcyktMTt0aGlzLnNldEFjdGl2ZUxheWVySW5kZXgobjwwP2YwKFM1LHRo''@;'; put 'put ''aXMpLnNpemUoKS0xOm4pLERDKEkyLHRoaXMsdGhpcy5jYWxjdWxhdGVPZmZzZXQoKSl9ZnVuY3Rpb24gaDZlKG4pe2NvbnN0e3dpZHRoOnQsaGVpZ2h0OmV9PUNsKERsLHRoaXMsZnRlKS5jYWxsKHRoaXMpO2xldCByPTAsaT0wO3JldHVybiBuLnJvdzwwPyhyPS0xLG4ucm93PTApOm4ucm93''@;'; put 'put ''PjAmJm4ucm93Pj1lJiYocj0xLG4ucm93PWUtMSksbi5jb2w8MD8oaT0tMSxuLmNvbD0wKTpuLmNvbD4wJiZuLmNvbD49dCYmKGk9MSxuLmNvbD10LTEpLHtyb3dEaXI6cixjb2xEaXI6aX19ZnVuY3Rpb24gZnRlKCl7cmV0dXJue3dpZHRoOmYwKEkyLHRoaXMpLngrdGhpcy5jb3VudFJlbmRl''@;'; put 'put ''cmFibGVDb2x1bW5zKCksaGVpZ2h0OmYwKEkyLHRoaXMpLnkrdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCl9fWZ1bmN0aW9uIFpOKG4pe2lmKCFbImZvcndhcmQiLCJiYWNrd2FyZCJdLmluY2x1ZGVzKG4pKXJldHVybiBudWxsO2NvbnN0IHQ9dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCku''@;'; put 'put ''Z2V0VG9wU3RhcnRDb3JuZXIoKSxlPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpLmdldEJvdHRvbUVuZENvcm5lcigpLFtyLGksYSxjXT0iZm9yd2FyZCI9PT1uP1t0LnJvdyxlLnJvdyx0LmNvbCxlLmNvbF06W2Uucm93LHQucm93LGUuY29sLHQuY29sXSxtPUNsKERsLHRoaXMsWU4pLmNh''@;'; put 'put ''bGwodGhpcyxyLGkpLEM9Q2woRGwsdGhpcyxHTikuY2FsbCh0aGlzLGEsYyk7cmV0dXJuIG51bGw9PT1tfHxudWxsPT09Qz9udWxsOnRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhtLEMpfWZ1bmN0aW9uIFlOKG4sdCl7Y29uc3QgZT10aGlzLnRhYmxlQXBpLmZpbmRGaXJzdE5vbkhp''@;'; put 'put ''ZGRlblJlbmRlcmFibGVSb3cobix0KTtyZXR1cm4gbnVsbD09PWU/bnVsbDpmMChJMix0aGlzKS55K2V9ZnVuY3Rpb24gR04obix0KXtjb25zdCBlPXRoaXMudGFibGVBcGkuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbihuLHQpO3JldHVybiBudWxsPT09ZT9udWxsOmYwKEky''@;'; put 'put ''LHRoaXMpLngrZX1mdW5jdGlvbiBmNmUobil7Y29uc3R7cm93OnQsY29sOmV9PXRoaXMudGFibGVBcGkudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKG4pO2lmKG51bGw9PT10fHxudWxsPT09ZSl0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmFibGUgY29vcmRzIGFyZSBub3QgdmlzaWJsZS4iKTty''@;'; put 'put ''ZXR1cm4gdGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKGYwKEkyLHRoaXMpLnkrdCxmMChJMix0aGlzKS54K2UpfWZ1bmN0aW9uIElDKG4pe2NvbnN0IHQ9bi5jbG9uZSgpO3JldHVybiB0LmNvbD1uLmNvbC1mMChJMix0aGlzKS54LHQucm93PW4ucm93LWYwKEkyLHRoaXMpLnksdGhp''@;'; put 'put ''cy50YWJsZUFwaS5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModCl9cGwoaHRlLCQwKTtjbGFzcyBtMHQgZXh0ZW5kcyBodGV7Y2FsY3VsYXRlT2Zmc2V0KCl7cmV0dXJue3g6dGhpcy50YWJsZUFwaS5uYXZpZ2FibGVIZWFkZXJzKCk/dGhpcy50YWJsZUFwaS5jb3VudFJvd0hlYWRlcnMoKTow''@;'; put 'put ''LHk6dGhpcy50YWJsZUFwaS5uYXZpZ2FibGVIZWFkZXJzKCk/dGhpcy50YWJsZUFwaS5jb3VudENvbEhlYWRlcnMoKTowfX1jb3VudFJlbmRlcmFibGVSb3dzKCl7cmV0dXJuIHRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlUm93cygpfWNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy50YWJsZUFwaS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl9c2hvdWxkU3dpdGNoU2VsZWN0aW9uTGF5ZXIoKXtyZXR1cm4hMX19Y2xhc3MgdjB0IGV4dGVuZHMgaHRle2NhbGN1bGF0ZU9mZnNldCgpe2NvbnN0IHQ9dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCkse3JvdzplLGNv''@;'; put 'put ''bDpyfT10LmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxpPXRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxyLTEpLGE9dGhpcy50YWJsZUFwaS5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGUtMSksYz10LmhpZ2hsaWdodC5pc0hlYWRlcigpLG09Yz9N''@;'; put 'put ''YXRoLmFicyhyKTowLEM9Yz9NYXRoLmFicyhlKTowO3JldHVybnt4OnI8MD9tOi1pLHk6ZTwwP0M6LWF9fWNvdW50UmVuZGVyYWJsZVJvd3MoKXtjb25zdCB0PXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpO3JldHVybiB0aGlzLnRhYmxlQXBpLmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdl''@;'; put 'put ''KDAsdC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLnJvdyl9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe2NvbnN0IHQ9dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk7cmV0dXJuIHRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCx0LmdldE91dGVyQm90dG9t''@;'; put 'put ''RW5kQ29ybmVyKCkuY29sKX10cmFuc2Zvcm1FbmQoKXt0aHJvdyBuZXcgRXJyb3IoImB0cmFuc2Zvcm1FbmRgIGlzIG5vdCB2YWxpZCBmb3IgZm9jdXMgc2VsZWN0aW9uIHVzZSBgdHJhbnNmb3JtU3RhcnRgIGluc3RlYWQiKX1zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpe3JldHVybiEw''@;'; put 'put ''fX1jb25zdCB5MHQ9WzMsMl0sXzB0PVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5nIl0sWyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSxndGU9U3ltYm9sKCJyb290IiksZzZlPVN5bWJvbCgiY2hpbGQiKTtmdW5jdGlvbiBSQyhuKXts''@;'; put 'put ''ZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Z3RlO2lmKHQhPT1ndGUmJnQhPT1nNmUpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBjYW5ub3QgYmUgb3Zlcndy''@;'; put 'put ''aXR0ZW4uIik7Y29uc3QgZT1BcnJheS5pc0FycmF5KG4pLHI9dD09PWd0ZTtsZXQgaT0wO2lmKGUpe2NvbnN0IGE9blswXTswPT09bi5sZW5ndGg/aT0xOnImJmEgaW5zdGFuY2VvZiBTTj9pPTM6ciYmQXJyYXkuaXNBcnJheShhKT9pPVJDKGEsZzZlKTpuLmxlbmd0aD49MiYmbi5sZW5ndGg8''@;'; put 'put ''PTQmJiFuLnNvbWUoKG0sQyk9PiFfMHRbQ10uaW5jbHVkZXModHlwZW9mIG0pKSYmKGk9Mil9cmV0dXJuIGl9ZnVuY3Rpb24gU2sobil7bGV0e2NyZWF0ZUNlbGxDb29yZHM6dCxjcmVhdGVDZWxsUmFuZ2U6ZSxrZWVwRGlyZWN0aW9uOnI9ITEscHJvcFRvQ29sOml9PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZigheTB0LmluY2x1ZGVzKG4pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGEpe2NvbnN0IGM9''@;'; put 'put ''Mz09PW47bGV0IG09Yz9hLmZyb20ucm93OmFbMF0sQz1jP2EuZnJvbS5jb2w6YVsxXSxQPWM/YS50by5yb3c6YVsyXSxZPWM/YS50by5jb2w6YVszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKCJzdHJpbmciPT10eXBlb2YgQyYmKEM9aShDKSksInN0cmluZyI9PXR5cGVvZiBZJiYoWT1p''@;'; put 'put ''KFkpKSksbWMoUCkmJihQPW0pLG1jKFkpJiYoWT1DKSwhcil7Y29uc3QgQWU9bSxIZT1DLFhlPVAscnQ9WTttPU1hdGgubWluKEFlLFhlKSxDPU1hdGgubWluKEhlLHJ0KSxQPU1hdGgubWF4KEFlLFhlKSxZPU1hdGgubWF4KEhlLHJ0KX1jb25zdCBKPWM/YS5oaWdobGlnaHQuY2xvbmUoKTp0''@;'; put 'put ''KG0sQyksY2U9dChtLEMpLGZlPXQoUCxZKTtyZXR1cm4gZShKLGNlLGZlKX19ZnVuY3Rpb24gVXYobix0LGUpeyhmdW5jdGlvbiBDMHQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfSkobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIFd2KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBTMHQobil7dmFyIHQ9ZnVuY3Rpb24gTTB0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlv''@;'; put 'put ''biBQYyhuLHQpe3JldHVybiBuLmdldChtNmUobix0KSl9ZnVuY3Rpb24gUjIobix0LGUpe3JldHVybiBuLnNldChtNmUobix0KSxlKSxlfWZ1bmN0aW9uIG02ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90''@;'; put 'put ''OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEwyPW5ldyBXZWFrTWFwLExDPW5ldyBXZWFrTWFwLFhOPW5ldyBXZWFrTWFwLGw4PW5ldyBXZWFrTWFwLHFOPW5ldyBXZWFrTWFwLE1rPW5ldyBXZWFrTWFw''@;'; put 'put ''LEpOPW5ldyBXZWFrTWFwO2NsYXNzIHY2ZXtjb25zdHJ1Y3Rvcih0LGUpe3ZhciByPXRoaXM7V3YodGhpcywic2V0dGluZ3MiLHZvaWQgMCksV3YodGhpcywidGFibGVQcm9wcyIsdm9pZCAwKSxXdih0aGlzLCJpblByb2dyZXNzIiwhMSksV3YodGhpcywic2VsZWN0ZWRSYW5nZSIsbmV3IGQw''@;'; put 'put ''dCgoaSxhLGMpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGksYSxjKSkpLFd2KHRoaXMsImhpZ2hsaWdodCIsdm9pZCAwKSxVdih0aGlzLEwyLHZvaWQgMCksVXYodGhpcyxMQyx2b2lkIDApLFd2KHRoaXMsInNlbGVjdGVkQnlSb3dIZWFkZXIiLG5ldyBTZXQpLFd2KHRoaXMs''@;'; put 'put ''InNlbGVjdGVkQnlDb2x1bW5IZWFkZXIiLG5ldyBTZXQpLFV2KHRoaXMsWE4sITEpLFV2KHRoaXMsbDgsITEpLFV2KHRoaXMscU4sInVua25vd24iKSxVdih0aGlzLE1rLC0xKSxVdih0aGlzLEpOLDApLHRoaXMuc2V0dGluZ3M9dCx0aGlzLnRhYmxlUHJvcHM9ZSx0aGlzLmhpZ2hsaWdodD1u''@;'; put 'put ''ZXcgbDB0KHtoZWFkZXJDbGFzc05hbWU6dC5jdXJyZW50SGVhZGVyQ2xhc3NOYW1lLGFjdGl2ZUhlYWRlckNsYXNzTmFtZTp0LmFjdGl2ZUhlYWRlckNsYXNzTmFtZSxyb3dDbGFzc05hbWU6dC5jdXJyZW50Um93Q2xhc3NOYW1lLGNvbHVtbkNsYXNzTmFtZTp0LmN1cnJlbnRDb2xDbGFzc05h''@;'; put 'put ''bWUsY2VsbEF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0scm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixkaXNhYmxlZENlbGxTZWxlY3Rpb246''@;'; put 'put ''KGksYSk9PnRoaXMudGFibGVQcm9wcy5pc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbihpLGEpLGNlbGxDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHIuaXNDZWxsQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSxhcmVhQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiByLmlz''@;'; put 'put ''QXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmk9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaSkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmk9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1''@;'; put 'put ''YWxDb29yZHMoaSksY3JlYXRlQ2VsbENvb3JkczooaSxhKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaSxhKSxjcmVhdGVDZWxsUmFuZ2U6KGksYSxjKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShpLGEsYyl9KSxSMihMMix0aGlzLG5ldyBtMHQodGhpcy5z''@;'; put 'put ''ZWxlY3RlZFJhbmdlLHsuLi50aGlzLnRhYmxlUHJvcHMsbmF2aWdhYmxlSGVhZGVyczooKT0+dC5uYXZpZ2FibGVIZWFkZXJzLGZpeGVkUm93c0JvdHRvbTooKT0+dC5maXhlZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT50Lm1pblNwYXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PnQubWlu''@;'; put 'put ''U3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT50LmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT50LmF1dG9XcmFwQ29sfSkpLFIyKExDLHRoaXMsbmV3IHYwdCh0aGlzLnNlbGVjdGVkUmFuZ2Usey4uLnRoaXMudGFibGVQcm9wcyxuYXZpZ2FibGVIZWFkZXJzOigpPT50Lm5hdmlnYWJsZUhl''@;'; put 'put ''YWRlcnMsZml4ZWRSb3dzQm90dG9tOigpPT4wLG1pblNwYXJlUm93czooKT0+MCxtaW5TcGFyZUNvbHM6KCk9PjAsYXV0b1dyYXBSb3c6KCk9PiEwLGF1dG9XcmFwQ29sOigpPT4hMH0pKSxQYyhMMix0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiByLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5hKX0pLFBjKEwyLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJU''@;'; put 'put ''cmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gci5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5hKX0pLFBjKEwyLHRo''@;'; put 'put ''aXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiByLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9y''@;'; put 'put ''bUVuZCIsLi4uYSl9KSxQYyhMMix0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiByLnJ1bkxvY2FsSG9va3Mo''@;'; put 'put ''ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5hKX0pLFBjKEwyLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1''@;'; put 'put ''cm4gci5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIiwuLi5hKX0pLFBjKEwyLHRoaXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3Vt''@;'; put 'put ''ZW50c1tjXTtyZXR1cm4gci5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIiwuLi5hKX0pLFBjKEwyLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlUm93V3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylh''@;'; put 'put ''W2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gci5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5hKX0pLFBjKEwyLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7''@;'; put 'put ''YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gci5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5hKX0pLFBjKExDLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsYT1u''@;'; put 'put ''ZXcgQXJyYXkoaSksYz0wO2M8aTtjKyspYVtjXT1hcmd1bWVudHNbY107cmV0dXJuIHIucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmEpfSksUGMoTEMsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiByLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmEpfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVjdGVk''@;'; put 'put ''UmFuZ2V9Z2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgoUGMoSk4sdGhpcykpfWdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKXtyZXR1cm4gUGMoSk4sdGhpcyl9c2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCh0KXtS''@;'; put 'put ''MihKTix0aGlzLHQpfW1hcmtTb3VyY2UodCl7UjIocU4sdGhpcyx0KX1tYXJrRW5kU291cmNlKCl7UjIocU4sdGhpcywidW5rbm93biIpfWdldFNlbGVjdGlvblNvdXJjZSgpe3JldHVybiBQYyhxTix0aGlzKX1zZXRFeHBlY3RlZExheWVycyh0KXtSMihNayx0aGlzLHQpfWJlZ2luKCl7dGhp''@;'; put 'put ''cy5pblByb2dyZXNzPSEwfWZpbmlzaCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIsQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpKSx0aGlzLmluUHJvZ3Jlc3M9ITEsUjIoTWssdGhpcywtMSl9aXNJblByb2dyZXNzKCl7cmV0dXJuIHRoaXMuaW5Q''@;'; put 'put ''cm9ncmVzc31zZXRSYW5nZVN0YXJ0KHQsZSl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxpPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp0O2NvbnN0IGE9Im11bHRpcGxl''@;'; put 'put ''Ij09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSxjPW1jKGUpP3RoaXMudGFibGVQcm9wcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk6ZSxtPXQuY2xvbmUoKTtSMihsOCx0aGlzLCExKSxSMihYTix0aGlzLCExKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNl''@;'; put 'put ''dFJhbmdlU3RhcnQiKyhyPyJPbmx5IjoiIiksbSksKCFhfHxhJiYhYyYmbWMoZSkpJiYodGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksWW4odGhpcy5oaWdobGlnaHQuZ2V0QXJlYXMoKSxDPT57Qy5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0TGF5ZXJlZEFyZWFzKCksQz0+e0Mu''@;'; put 'put ''Y2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldFJvd0hlYWRlcnMoKSxDPT57Qy5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGVhZGVycygpLEM9PntDLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVSb3dIZWFkZXJzKCksQz0+e0MuY2xlYXIo''@;'; put 'put ''KX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKSxDPT57Qy5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29ybmVySGVhZGVycygpLEM9PntDLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIaWdobGlnaHRzKCksQz0+e0Mu''@;'; put 'put ''Y2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldENvbHVtbkhpZ2hsaWdodHMoKSxDPT57Qy5jbGVhcigpfSkpLHRoaXMuc2VsZWN0ZWRSYW5nZS5hZGQobSkuY3VycmVudCgpLnNldEhpZ2hsaWdodChpLmNsb25lKCkpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRCeVJvd0hlYWRlci5jbGVhcigpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5jbGVhcigpKSxyfHx0aGlzLnNldFJhbmdlRW5kKHQpfXNldFJhbmdlU3RhcnRPbmx5KHQsZSl7dGhpcy5zZXRSYW5nZVN0YXJ0KHQsZSwhMCxhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1syXT9hcmd1bWVudHNbMl06dCl9c2V0UmFuZ2VFbmQodCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO3RoaXMu''@;'; put 'put ''c2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleChlKTtjb25zdCByPXQuY2xvbmUoKSxpPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxhPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxjPXRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpLmNsb25lKCkuc2V0VG8odCkuaXNTaW5n''@;'; put 'put ''bGVIZWFkZXIoKTtpZigoaT4wfHxhPjApJiYoMD09PWkmJnIuY29sPDAmJiFjfHwwPT09YSYmci5yb3c8MCYmIWMpKXJldHVybjt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixyKSx0aGlzLmJlZ2luKCk7Y29uc3QgbT10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2Uo''@;'; put 'put ''KTtpZih0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnN8fG0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLCJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlKW0uc2V0RnJvbShtLmhpZ2hsaWdodCksbS5zZXRUbyhtLmhpZ2hsaWdodCk7ZWxzZXtjb25zdCBQPW0uZ2V0SG9y''@;'; put 'put ''aXpvbnRhbERpcmVjdGlvbigpLFk9bS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpLEo9dGhpcy5pc011bHRpcGxlKCk7bS5zZXRUbyhyKSxKJiYoUCE9PW0uZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpfHwxPT09bS5nZXRXaWR0aCgpJiYhbS5pbmNsdWRlcyhtLmhpZ2hsaWdodCkpJiZtLmZyb20u''@;'; put 'put ''YXNzaWduKHtjb2w6bS5oaWdobGlnaHQuY29sfSksSiYmKFkhPT1tLmdldFZlcnRpY2FsRGlyZWN0aW9uKCl8fDE9PT1tLmdldEhlaWdodCgpJiYhbS5pbmNsdWRlcyhtLmhpZ2hsaWdodCkpJiZtLmZyb20uYXNzaWduKHtyb3c6bS5oaWdobGlnaHQucm93fSl9aT4wJiZhPjAmJighdGhpcy5z''@;'; put 'put ''ZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzfHx0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMmJiFtLmlzU2luZ2xlSGVhZGVyKCkpJiZtLnRvLm5vcm1hbGl6ZSgpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhpcy5zZXRSYW5nZUZvY3VzKHRoaXMuZ2V0''@;'; put 'put ''QWN0aXZlU2VsZWN0ZWRSYW5nZSgpLmhpZ2hsaWdodCxlKSx0aGlzLmFwcGx5QW5kQ29tbWl0KHRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpLGUpO2NvbnN0IEM9LTE9PT1QYyhNayx0aGlzKXx8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKT09PVBjKE1rLHRoaXMpO3RoaXMucnVuTG9j''@;'; put 'put ''YWxIb29rcygiYWZ0ZXJTZXRSYW5nZUVuZCIsdCxDKX1hcHBseUFuZENvbW1pdCgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKSxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCByPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxpPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGUpO2NvbnN0IGE9dGhpcy5o''@;'; put 'put ''aWdobGlnaHQuY3JlYXRlQXJlYSgpLGM9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKSxtPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hlYWRlcigpLEM9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCksUD10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVSb3dI''@;'; put 'put ''ZWFkZXIoKSxZPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLEo9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksY2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksZmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1u''@;'; put 'put ''SGlnaGxpZ2h0KCk7aWYoYS5jbGVhcigpLGMuY2xlYXIoKSxtLmNsZWFyKCksQy5jbGVhcigpLFAuY2xlYXIoKSxZLmNsZWFyKCksSi5jbGVhcigpLGNlLmNsZWFyKCksZmUuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoImFyZWEiLHQuaGlnaGxpZ2h0KSYmKHRoaXMuaXNN''@;'; put 'put ''dWx0aXBsZSgpfHxlPj0xKSYmKGEuYWRkKHQuZnJvbSkuYWRkKHQudG8pLmNvbW1pdCgpLGMuYWRkKHQuZnJvbSkuYWRkKHQudG8pLmNvbW1pdCgpLDE9PT1lKSl7Y29uc3QgQWU9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGUtMSk7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZl''@;'; put 'put ''bChlLTEpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKS5hZGQoQWUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoQWUpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCkuYWRkKEFlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKEFlKSx0aGlzLmhpZ2hsaWdodC51c2VMYXllckxl''@;'; put 'put ''dmVsKGUpfWlmKHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihzdGUsdC5oaWdobGlnaHQpKXtpZighdC5pc1NpbmdsZUhlYWRlcigpKXtjb25zdCBYZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0LmZyb20ucm93LDApLC0xKSxydD10aGlzLnRhYmxlUHJv''@;'; put 'put ''cHMuY3JlYXRlQ2VsbENvb3Jkcyh0LnRvLnJvdywtMSksZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgodC5mcm9tLmNvbCwwKSksanQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsdC50by5jb2wpOyJzaW5nbGUiPT09dGhpcy5zZXR0''@;'; put 'put ''aW5ncy5zZWxlY3Rpb25Nb2RlPyhtLmFkZChYZSkuY29tbWl0KCksQy5hZGQoZHQpLmNvbW1pdCgpLGNlLmFkZChYZSkuY29tbWl0KCksZmUuYWRkKGR0KS5jb21taXQoKSk6KG0uYWRkKFhlKS5hZGQocnQpLmNvbW1pdCgpLEMuYWRkKGR0KS5hZGQoanQpLmNvbW1pdCgpLGNlLmFkZChYZSku''@;'; put 'put ''YWRkKHJ0KS5jb21taXQoKSxmZS5hZGQoZHQpLmFkZChqdCkuY29tbWl0KCkpfWNvbnN0IEFlPSFQYyhsOCx0aGlzKSYmdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJihpPjAmJmk9PT10LmdldFdpZHRoKCl8fDA9PT1pJiZ0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSxIZT0hUGMo''@;'; put 'put ''bDgsdGhpcykmJnRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiYocj4wJiZyPT09dC5nZXRIZWlnaHQoKXx8MD09PXImJnRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpO0FlJiZQLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0LmZyb20u''@;'; put 'put ''cm93LDApLE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksLTEpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHQudG8ucm93LDApLC0xKSkuY29tbWl0KCksSGUmJlkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLTEpLE1hdGgubWF4KHQuZnJvbS5jb2wsMCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgodC50by5jb2wsMCkpKS5jb21taXQoKSxBZSYmSGUmJkouYWRk''@;'; put 'put ''KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSwtMSkpLmNvbW1pdCgpfX1zZXRS''@;'; put 'put ''YW5nZUZvY3VzKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldExheWVyTGV2ZWwoKTtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjt0aGlzLnNldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5k''@;'; put 'put ''ZXgoZSksUGMoTDIsdGhpcykuc2V0QWN0aXZlTGF5ZXJJbmRleChlKSxQYyhMQyx0aGlzKS5zZXRBY3RpdmVMYXllckluZGV4KGUpO2NvbnN0IHI9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7dGhpcy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldEZvY3Vz''@;'; put 'put ''Iix0KTtjb25zdCBpPXRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCk7aS5jbGVhcigpLHIuc2V0SGlnaGxpZ2h0KHQpLHRoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoV04sci5oaWdobGln''@;'; put 'put ''aHQpJiZpLmFkZChyLmhpZ2hsaWdodCkuY29tbWl0KCkuc3luY1dpdGgociksdGhpcy5pblByb2dyZXNzfHwoUjIoWE4sdGhpcywhMCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldEZvY3VzIixyLmhpZ2hsaWdodCkpfXRyYW5zZm9ybVN0YXJ0KHQsZSl7bGV0IHI9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdHt2aXN1YWxDb29yZHM6aX09UGMoTDIsdGhpcykudHJhbnNmb3JtU3RhcnQodCxlLHIpO3RoaXMuc2V0UmFuZ2VTdGFydChpKX10cmFuc2Zvcm1FbmQodCxlKXtjb25zdHt2aXN1YWxDb29yZHM6cixzZWxl''@;'; put 'put ''Y3Rpb25MYXllcjppfT1QYyhMMix0aGlzKS50cmFuc2Zvcm1FbmQodCxlKTt0aGlzLnNldFJhbmdlRW5kKHIsaSl9dHJhbnNmb3JtRm9jdXModCxlKXtjb25zdHtzZWxlY3Rpb25MYXllcjpyLHZpc3VhbENvb3JkczppfT1QYyhMQyx0aGlzKS50cmFuc2Zvcm1TdGFydCh0LGUpO3RoaXMuc2V0''@;'; put 'put ''UmFuZ2VGb2N1cyhpLm5vcm1hbGl6ZSgpLHIpfXNoaWZ0Um93cyh0LGUpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3Qgcj10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKTtpZih0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKXRoaXMuc2VsZWN0QWxsKCEwLCEwLHtkaXNh''@;'; put 'put ''YmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pO2Vsc2UgaWYodGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8ci5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkucm93Pj10KXtjb25zdHtmcm9tOmksdG86YSxoaWdobGlnaHQ6Y309cixtPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxD''@;'; put 'put ''PXRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksUD10aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLFk9UD8tMTowLEo9UD8wOmU7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgY2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZ3MoaS5yb3crSixZ''@;'; put 'put ''LG0tMSksaS5jb2wpLGZlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGdzKGEucm93K2UsWSxtLTEpLGEuY29sKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0IiksYy5yb3c+PXQ/dGhpcy5zZXRSYW5nZVN0YXJ0T25seShjZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhncyhjLnJvdytlLDAsbS0xKSxjLmNvbCkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoY2UsITApLEMmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFAmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxl''@;'; put 'put ''dmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoZmUpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1zaGlmdENvbHVtbnModCxlKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IHI9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7aWYodGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSl0''@;'; put 'put ''aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHIuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbD49dCl7Y29uc3R7ZnJvbTppLHRvOmEsaGlnaGxpZ2h0OmN9PXIsbT10aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY291bnRDb2xzKCksQz10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFA9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxZPUM/LTE6MCxKPUM/MDplO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IGNlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKGkucm93LGdzKGkuY29sK0osWSxtLTEpKSxmZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxncyhhLmNvbCtlLFksbS0xKSk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLGMuY29sPj10P3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoY2UsITAsdGhpcy50''@;'; put 'put ''YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYy5yb3csZ3MoYy5jb2wrZSwwLG0tMSkpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGNlLCEwKSxDJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxQJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKGZlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNF''@;'; put 'put ''bXB0eSgpfWlzTXVsdGlwbGUoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybiExO2NvbnN0IGU9QWgoIXQuaXNTaW5nbGUo''@;'; put 'put ''KSk7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixlKSxlLnZhbHVlfWlzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCgpJiZQYyhYTix0aGlzKX1pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXtsZXQgdD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKHQpJiYoLTE9PT10P3RoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Um93''@;'; put 'put ''SGVhZGVyLmhhcyh0KSl9aXNFbnRpcmVSb3dTZWxlY3RlZCgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBlPWk9Pntjb25zdHtjb2w6YX09aS5nZXRPdXRlclRvcFN0YXJ0Q29y''@;'; put 'put ''bmVyKCksYz10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksbT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7cmV0dXJuKGM+MCYmYTwwfHwwPT09YykmJmkuZ2V0V2lkdGgoKT09PW19O2lmKC0xPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNv''@;'; put 'put ''bWUoaT0+ZShpKSk7Y29uc3Qgcj10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgodCk7cmV0dXJuISFyJiZlKHIpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdl''@;'; put 'put ''dExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKC0xPT09dD90aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXModCkpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXtsZXQgdD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgZT1pPT57Y29uc3R7cm93OmF9PWkuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGM9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLG09dGhpcy50''@;'; put 'put ''YWJsZVByb3BzLmNvdW50Um93cygpO3JldHVybihjPjAmJmE8MHx8MD09PWMpJiZpLmdldEhlaWdodCgpPT09bX07aWYoLTE9PT10KXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShpPT5lKGkpKTtjb25zdCByPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRl''@;'; put 'put ''eCh0KTtyZXR1cm4hIXImJmUocil9aXNTZWxlY3RlZEJ5QW55SGVhZGVyKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpfWlzU2VsZWN0ZWRCeUNvcm5lcigp''@;'; put 'put ''e3JldHVybiB0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyh0aGlzLmdldExheWVyTGV2ZWwoKSl9aW5JblNlbGVjdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLmluY2x1ZGVz''@;'; put 'put ''KHQpfWlzQ2VsbENvcm5lclZpc2libGUoKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJiF0aGlzLmlzTXVsdGlwbGUoKX1pc0NlbGxWaXNpYmxlKHQpe2NvbnN0IGU9dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVu''@;'; put 'put ''ZGVyYWJsZUNvb3Jkcyh0KTtyZXR1cm4gbnVsbCE9PWUucm93JiZudWxsIT09ZS5jb2x9aXNBcmVhQ29ybmVyVmlzaWJsZSh0KXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIodCl8fHQ9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFi''@;'; put 'put ''bGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmNsZWFyKCks''@;'; put 'put ''dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe3ZhciB0O2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0scj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJn''@;'; put 'put ''dW1lbnRzWzFdLGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOntmb2N1c1Bvc2l0aW9uOiExLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfTtjb25zdCBhPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxjPXRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5jb3VudENvbHMoKSxtPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxDPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxQPXI/LUM6MCxZPWU/LW06MDtpZigwPT09UCYmMD09PVkmJigwPT09YXx8MD09PWMpKXJldHVybjtsZXQgSj1udWxsPT09KHQ9dGhpcy5n''@;'; put 'put ''ZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhpZ2hsaWdodDtjb25zdHtmb2N1c1Bvc2l0aW9uOmNlLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OmZlfT1pO2NlJiZOdW1iZXIuaXNJbnRlZ2VyKGNlPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGNlPy5jb2wp''@;'; put 'put ''JiYoSj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhncyhjZS5yb3csUCxhLTEpLGdzKGNlLmNvbCxZLGMtMSkpKTtjb25zdCBBZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhQLFkpLEhlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEtMSxjLTEp''@;'; put 'put ''O3RoaXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdEFsbCIsQWUsSGUsSiksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShBZSx2b2lkIDAsSiksUjIobDgsdGhpcyxmZSksWTwwJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgp''@;'; put 'put ''KSxQPDAmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoSGUpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RBbGwiLEFlLEhlLEopLHRoaXMuZmluaXNoKCl9c2VsZWN0Q2VsbHModCl7dmFyIGU9dGhp''@;'; put 'put ''cztjb25zdCByPVJDKHQpO2lmKDE9PT1yKXJldHVybiExO2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcihlbGBVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVz''@;'; put 'put ''IGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAgIGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5kXV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGk9U2socix7''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkczpmdW5jdGlvbigpe3JldHVybiBlLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gZS50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZSguLi5hcmd1bWVudHMpfSxwcm9wVG9D''@;'; put 'put ''b2w6Qz0+dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChDKSxrZWVwRGlyZWN0aW9uOiEwfSksYT10aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMsYz17Y291bnRSb3dzOnRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxjb3VudENvbHM6dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygp''@;'; put 'put ''LGNvdW50Um93SGVhZGVyczphP3RoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKTowLGNvdW50Q29sSGVhZGVyczphP3RoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKTowfSxtPSF0LnNvbWUoQz0+e2NvbnN0IFA9aShDKSxZPVAuaXNWYWxpZChjKTtyZXR1cm4hKFkmJiFQ''@;'; put 'put ''LmNvbnRhaW5zSGVhZGVycygpfHxZJiZQLmNvbnRhaW5zSGVhZGVycygpJiZQLmlzU2luZ2xlSGVhZGVyKCkpfSk7cmV0dXJuIG0mJih0aGlzLmNsZWFyKCksdGhpcy5zZXRFeHBlY3RlZExheWVycyh0Lmxlbmd0aCksWW4odCxDPT57Y29uc3R7ZnJvbTpQLHRvOll9PWkoQyk7dGhpcy5zZXRS''@;'; put 'put ''YW5nZVN0YXJ0T25seShQLmNsb25lKCksITEpLHRoaXMuc2V0UmFuZ2VFbmQoWS5jbG9uZSgpKX0pLHRoaXMuZmluaXNoKCkpLG19c2VsZWN0Q29sdW1ucyh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dCxyPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGk9InN0cmluZyI9PXR5cGVvZiB0P3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2wodCk6dCxhPSJzdHJpbmciPT10eXBlb2YgZT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGUpOmUsYz10aGlz''@;'; put 'put ''LnRhYmxlUHJvcHMuY291bnRSb3dzKCksbT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksQz10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksUD0wPT09Qz8wOi1DLFk9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoUCxpKSxKPXRoaXMudGFibGVQcm9wcy5jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKGMtMSxhKSxjZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKFksWSxKKS5pc1ZhbGlkKHtjb3VudFJvd3M6Yyxjb3VudENvbHM6bSxjb3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6Q30pO2lmKGNlKXtsZXQgZmU9MCxBZT0wO051bWJlci5pc0lu''@;'; put 'put ''dGVnZXIocj8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihyPy5jb2wpPyhmZT1ncyhyLnJvdyxQLGMtMSksQWU9Z3Moci5jb2wsTWF0aC5taW4oaSxhKSxNYXRoLm1heChpLGEpKSk6KGZlPWdzKHIsUCxjLTEpLEFlPWkpO2NvbnN0IEhlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KGZlLEFlKSxYZT0wPT09Qz8wOmdzKEhlLnJvdyxQLC0xKSxydD1jLTEsZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoWGUsaSksanQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMocnQsYSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5z''@;'; put 'put ''IixkdCxqdCxIZSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShkdCx2b2lkIDAsSGUpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoanQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RDb2x1bW5zIixk''@;'; put 'put ''dCxqdCxIZSksdGhpcy5maW5pc2goKX1yZXR1cm4gY2V9c2VsZWN0Um93cyh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dCxyPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1sy''@;'; put 'put ''XTowO2NvbnN0IGk9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGE9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGM9dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLG09MD09PWM/MDotYyxDPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHQsbSksUD10aGlz''@;'; put 'put ''LnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhlLGEtMSksWT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKEMsQyxQKS5pc1ZhbGlkKHtjb3VudFJvd3M6aSxjb3VudENvbHM6YSxjb3VudFJvd0hlYWRlcnM6Yyxjb3VudENvbEhlYWRlcnM6MH0pO2lmKFkpe2xldCBKPTAsY2U9''@;'; put 'put ''MDtOdW1iZXIuaXNJbnRlZ2VyKHI/LnJvdykmJk51bWJlci5pc0ludGVnZXIocj8uY29sKT8oSj1ncyhyLnJvdyxNYXRoLm1pbih0LGUpLE1hdGgubWF4KHQsZSkpLGNlPWdzKHIuY29sLG0sYS0xKSk6KEo9dCxjZT1ncyhyLG0sYS0xKSk7Y29uc3QgZmU9dGhpcy50YWJsZVByb3BzLmNyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoSixjZSksQWU9MD09PWM/MDpncyhmZS5jb2wsbSwtMSksSGU9YS0xLFhlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHQsQWUpLHJ0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGUsSGUpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2Vs''@;'; put 'put ''ZWN0Um93cyIsWGUscnQsZmUpLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoWGUsdm9pZCAwLGZlKSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKHJ0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0Um93cyIs''@;'; put 'put ''WGUscnQsZmUpLHRoaXMuZmluaXNoKCl9cmV0dXJuIFl9aW1wb3J0U2VsZWN0aW9uKHQpe2xldHtyYW5nZXM6ZSxhY3RpdmVSYW5nZTpyLGFjdGl2ZVNlbGVjdGlvbkxheWVyOmksc2VsZWN0ZWRCeVJvd0hlYWRlcjphLHNlbGVjdGVkQnlDb2x1bW5IZWFkZXI6YyxkaXNhYmxlSGVhZGVyc0hp''@;'; put 'put ''Z2hsaWdodDptfT10OzAhPT1lLmxlbmd0aCYmKHRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCksdGhpcy5pblByb2dyZXNzPSExLFIyKGw4LHRoaXMsbSksdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyPW5ldyBTZXQoYSksdGhpcy5zZWxlY3RlZEJ5Q29s''@;'; put 'put ''dW1uSGVhZGVyPW5ldyBTZXQoYyksdGhpcy5zZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KDApLGUuZm9yRWFjaCgoQyxQKT0+e3RoaXMuc2VsZWN0ZWRSYW5nZS5wdXNoKEMpLHRoaXMuYXBwbHlBbmRDb21taXQoQyxQKX0pLHRoaXMuc2V0UmFuZ2VGb2N1cyhyLmhpZ2hsaWdodCxpKSxS''@;'; put 'put ''MihsOCx0aGlzLCExKSx0aGlzLmluUHJvZ3Jlc3M9ITEpfWV4cG9ydFNlbGVjdGlvbigpe3JldHVybntyYW5nZXM6QXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLm1hcCh0PT50LmNsb25lKCkpLGFjdGl2ZVJhbmdlOnRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpLGFjdGl2ZVNl''@;'; put 'put ''bGVjdGlvbkxheWVyOnRoaXMuZ2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgpLHNlbGVjdGVkQnlSb3dIZWFkZXI6QXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIpLHNlbGVjdGVkQnlDb2x1bW5IZWFkZXI6QXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIpLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OlBjKGw4LHRoaXMpfX1yZWZyZXNoKCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCB0PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxlPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtpZigwPT09dHx8MD09PWUpcmV0''@;'; put 'put ''dXJuIHZvaWQgdGhpcy5kZXNlbGVjdCgpO2NvbnN0IHI9dGhpcy5zZWxlY3RlZFJhbmdlLnJhbmdlcy5tYXAoYz0+Yy5jbG9uZSgpKTt0aGlzLm1hcmtTb3VyY2UoInJlZnJlc2giKTtjb25zdCBpPW5ldyBTZXQodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyKSxhPW5ldyBTZXQodGhpcy5zZWxl''@;'; put 'put ''Y3RlZEJ5Q29sdW1uSGVhZGVyKTt0aGlzLmNsZWFyKCksdGhpcy5zZXRFeHBlY3RlZExheWVycyhyLmxlbmd0aCksci5mb3JFYWNoKGM9Pntjb25zdHtmcm9tOm0sdG86QyxoaWdobGlnaHQ6UH09YyxZPXQtMSxKPWUtMTtQLmFzc2lnbih7cm93OmdzKFAucm93LHRoaXMuc2V0dGluZ3MubmF2''@;'; put 'put ''aWdhYmxlSGVhZGVycz8tMS8wOjAsWSksY29sOmdzKFAuY29sLHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz8tMS8wOjAsSil9KSxtLmFzc2lnbih7cm93OmdzKG0ucm93LC0xLzAsWSksY29sOmdzKG0uY29sLC0xLzAsSil9KSxDLmFzc2lnbih7cm93OmdzKEMucm93LC0xLzAsWSks''@;'; put 'put ''Y29sOmdzKEMuY29sLC0xLzAsSil9KSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KG0sITAsUCksdGhpcy5zZXRSYW5nZUVuZChDKX0pLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlcj1pLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcj1hLHRoaXMuZmluaXNoKCksdGhpcy5tYXJrRW5kU291cmNl''@;'; put 'put ''KCl9Y29tbWl0KCl7aWYodGhpcy5oaWdobGlnaHQuZ2V0Q3VzdG9tU2VsZWN0aW9ucygpLmZvckVhY2goaT0+e2kuY29tbWl0KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGU9dGhpcy5nZXRMYXllckxldmVsKCkscj10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKTt0''@;'; put 'put ''aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoV04sci5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpLmNvbW1pdCgpLnN5bmNXaXRoKHIpO2ZvcihsZXQgaT0wO2k8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKTtpKz0xKXt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVs''@;'; put 'put ''KGkpO2NvbnN0IGE9dGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLGM9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKSxtPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hlYWRlcigpLEM9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCksUD10aGlzLmhpZ2hsaWdo''@;'; put 'put ''dC5jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKSxZPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLEo9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksY2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksZmU9dGhpcy5oaWdo''@;'; put 'put ''bGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7YS5jb21taXQoKSxjLmNvbW1pdCgpLG0uY29tbWl0KCksQy5jb21taXQoKSxQLmNvbW1pdCgpLFkuY29tbWl0KCksSi5jb21taXQoKSxjZS5jb21taXQoKSxmZS5jb21taXQoKX10aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGUpfX1w''@;'; put 'put ''bCh2NmUsJDApO2NvbnN0IHgwdD12NmUse3JlZ2lzdGVyOkUwdCxnZXRJdGVtOlQwdCxoYXNJdGVtOnk2ZSxnZXROYW1lczpBMHR9PVdmKCJjZWxsVHlwZXMiKTtmdW5jdGlvbiBtdGUobil7aWYoIXk2ZShuKSl0aHJvdyBFcnJvcihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtufSIgYXMg''@;'; put 'put ''YSBzdHJpbmcgdGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29u''@;'; put 'put ''dGFibGUuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBUMHQobil9ZnVuY3Rpb24gcWYobix0KXsic3RyaW5nIiE9dHlwZW9mIG4mJihuPSh0PW4pLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmUscmVuZGVyZXI6cix2YWxpZGF0b3I6aX09dDtlJiZraChuLGUp''@;'; put 'put ''LHImJkQyKG4sciksaSYmT3YobixpKSxFMHQobix0KX1mdW5jdGlvbiBRTihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpuO2NvbnN0IHI9InN0cmluZyI9PXR5cGVvZiB0LnR5cGU/bXRlKHQudHlwZSk6dC50eXBlO2lm''@;'; put 'put ''KG4uX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmYXModCwoYSxjKT0+e24uX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxldGUoYyl9KSwhaG8ocikpcmV0dXJuO2U9PT1uJiYhbi5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiYobi5fYXV0b21hdGlj''@;'; put 'put ''YWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGk9e307YXMociwoYSxjKT0+e3ZhciBtOyhmdW5jdGlvbiBrMHQobix0KXt2YXIgZTtyZXR1cm4iQ0VMTF9UWVBFIiE9PW4mJigobnVsbD09PShlPXQuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09''@;'; put 'put ''PWU/dm9pZCAwOmUuaGFzKG4pKXx8ISRjKHQsbikpfSkoYyxlKSYmKGlbY109YSxudWxsPT09KG09bi5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09bXx8bS5hZGQoYykpfSksRnUobixpKX1mdW5jdGlvbiBlVihuLHQpe2lmKCFuKCkpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KGBBc3NlcnRpb24gZmFpbGVkOiAke3R9YCl9ZnVuY3Rpb24geGsobil7cmV0dXJuIG51bGw9PW59Y29uc3QgXzZlPSgpPT4oe19hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiaHRfX2FjdGl2ZV9oaWdobGlnaHQiLGFsbG93RW1w''@;'; put 'put ''dHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEwLGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1JlbW92ZUNvbHVtbjohMCxhbGxvd1JlbW92ZVJvdzohMCxhcmlhVGFnczohMCxhdXRvQ29sdW1uU2l6ZTp2b2lkIDAsYXV0b1Jvd1NpemU6dm9pZCAw''@;'; put 'put ''LGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1lOnZvaWQgMCxjb2xIZWFkZXJzOm51bGwsY29sbGFwc2libGVDb2x1bW5zOnZvaWQgMCxjb2x1''@;'; put 'put ''bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNvbHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNvbFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiaHRDb21tZW50Q2VsbCIsY29tbWVudHM6ITEsY29udGV4dE1lbnU6dm9pZCAw''@;'; put 'put ''LGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjb3JyZWN0Rm9ybWF0OiExLGN1cnJlbnRDb2xDbGFzc05hbWU6dm9pZCAwLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6Imh0X19oaWdobGlnaHQiLGN1cnJlbnRSb3dDbGFzc05hbWU6dm9pZCAwLGN1c3RvbUJvcmRlcnM6ITEsZGF0YTp2b2lkIDAs''@;'; put 'put ''ZGF0YURvdE5vdGF0aW9uOiEwLGRhdGFTY2hlbWE6dm9pZCAwLGRhdGVGb3JtYXQ6IkREL01NL1lZWVkiLHRpbWVGb3JtYXQ6Img6bW06c3MgYSIsZGF0ZVBpY2tlckNvbmZpZzp2b2lkIDAsZGVmYXVsdERhdGU6dm9pZCAwLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ITEsZGlhbG9nOiExLGRy''@;'; put 'put ''YWdUb1Njcm9sbDohMCxkcm9wZG93bk1lbnU6dm9pZCAwLGVkaXRvcjp2b2lkIDAsZW1wdHlEYXRhU3RhdGU6ITEsZW50ZXJCZWdpbnNFZGl0aW5nOiEwLGVudGVyTW92ZXM6e2NvbDowLHJvdzoxfSxmaWxsSGFuZGxlOnthdXRvSW5zZXJ0Um93OiExfSxmaWx0ZXI6ITAsZmlsdGVyaW5nQ2Fz''@;'; put 'put ''ZVNlbnNpdGl2ZTohMSxmaWx0ZXJzOnZvaWQgMCxmaXhlZENvbHVtbnNMZWZ0OjAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NCb3R0b206MCxmaXhlZFJvd3NUb3A6MCxmb3JtdWxhczp2b2lkIDAsZnJhZ21lbnRTZWxlY3Rpb246ITEsaGVhZGVyQ2xhc3NOYW1lOnZvaWQgMCxoZWln''@;'; put 'put ''aHQ6dm9pZCAwLGhpZGRlbkNvbHVtbnM6dm9pZCAwLGhpZGRlblJvd3M6dm9pZCAwLGluaXRpYWxTdGF0ZTp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsaW1lRmFzdEVkaXQ6ITEsaXNFbXB0eUNvbChuKXtsZXQgdCxlLHI7Zm9yKHQ9MCxlPXRoaXMuY291bnRSb3dz''@;'; put 'put ''KCk7dDxlO3QrKylpZihyPXRoaXMuZ2V0RGF0YUF0Q2VsbCh0LG4pLCExPT09R2MocikpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3cobil7bGV0IHQsZSxyLGk7Zm9yKHQ9MCxlPXRoaXMuY291bnRDb2xzKCk7dDxlO3QrKylpZihyPXRoaXMuZ2V0RGF0YUF0Q2VsbChuLHQpLCExPT09''@;'; put 'put ''R2MocikpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiByJiYoaT10aGlzLmdldENlbGxNZXRhKG4sdCksVUEodGhpcy5nZXRTY2hlbWEoKVtpLnByb3BdLHIpKTtyZXR1cm4hMH0sbGFiZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5''@;'; put 'put ''OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixsb2FkaW5nOiExLG1hbnVhbENvbHVtbkZyZWV6ZTp2b2lkIDAsbWFudWFsQ29sdW1uTW92ZTp2b2lkIDAsbWFudWFsQ29sdW1uUmVzaXplOnZvaWQgMCxtYW51YWxSb3dNb3ZlOnZvaWQgMCxtYW51YWxSb3dSZXNpemU6dm9pZCAwLG1heENvbHM6MS8w''@;'; put 'put ''LG1heFJvd3M6MS8wLG1lcmdlQ2VsbHM6ITEsbWluQ29sczowLG1pblJvd0hlaWdodHM6dm9pZCAwLG1pblJvd3M6MCxtaW5TcGFyZUNvbHM6MCxtaW5TcGFyZVJvd3M6MCxtdWx0aUNvbHVtblNvcnRpbmc6dm9pZCAwLG5hdmlnYWJsZUhlYWRlcnM6ITEsdGFiTmF2aWdhdGlvbjohMCxuZXN0''@;'; put 'put ''ZWRIZWFkZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBhZ2luYXRpb246dm9pZCAwLHBlcnNpc3RlbnRT''@;'; put 'put ''dGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dz''@;'; put 'put ''OiExLHJlbmRlckFsbENvbHVtbnM6ITEscmVuZGVyZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VsZWN0aW9uTW9kZToibXVsdGlwbGUiLHNlbGVjdE9wdGlvbnM6dm9pZCAwLHNraXBDb2x1bW5P''@;'; put 'put ''blBhc3RlOiExLHNraXBSb3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2U6dm9pZCAwLHN0YXJ0Q29sczo1LHN0YXJ0Um93czo1LHN0cmV0Y2hIOiJub25lIixzdHJpY3Q6dm9pZCAwLHRhYmxlQ2xhc3NOYW1lOnZvaWQgMCx0ZXh0RWxsaXBzaXM6ITEsdGhlbWVOYW1lOnZv''@;'; put 'put ''aWQgMCx0YWJNb3Zlczp7cm93OjAsY29sOjF9LHRpdGxlOnZvaWQgMCx0cmltRHJvcGRvd246ITAsdHJpbVJvd3M6dm9pZCAwLHRyaW1XaGl0ZXNwYWNlOiEwLHR5cGU6InRleHQiLHVuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCx1bmRvOiEwLHZhbGlkYXRvcjp2b2lkIDAsdmFsdWVHZXR0ZXI6''@;'; put 'put ''dm9pZCAwLHZhbHVlU2V0dGVyOnZvaWQgMCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOjAsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6MCx2''@;'; put 'put ''aXNpYmxlUm93czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtmdW5jdGlvbiBiNmUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIEkwdChuKXt2YXIgdD1mdW5jdGlvbiBSMHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxu''@;'; put 'put ''fWNsYXNzIE8wdHtjb25zdHJ1Y3Rvcih0KXtiNmUodGhpcywibWV0YUN0b3IiLGNsYXNze30pLGI2ZSh0aGlzLCJtZXRhIix2b2lkIDApLHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxGdSh0aGlzLm1ldGEsXzZlKCkpLHRoaXMubWV0YS5pbnN0YW5jZT10fWdldE1ldGFDb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEodCl7dmFyIGU7RnUodGhpcy5tZXRhLHQpLFFOKHRoaXMubWV0YSx7Li4udCx0eXBlOm51bGwhPT0oZT10LnR5cGUpJiZ2b2lkIDAhPT1lP2U6dGhpcy5tZXRhLnR5cGV9''@;'; put 'put ''LHQpfX1jbGFzcyBOMHR7Y29uc3RydWN0b3IodCl7IWZ1bmN0aW9uIFAwdChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRjB0KG4pe3ZhciB0PWZ1bmN0aW9uIEgwdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KHRoaXMsIm1l''@;'; put 'put ''dGEiLHZvaWQgMCk7Y29uc3QgZT10LmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgZX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKHQpe0Z1KHRoaXMubWV0YSx0KSxRTih0aGlzLm1ldGEsdCx0KX19ZnVuY3Rpb24gdFYobix0LGUpe3JldHVybih0PWZ1''@;'; put 'put ''bmN0aW9uIFYwdChuKXt2YXIgdD1mdW5jdGlvbiBCMHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''cilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQp''@;'; put 'put ''KWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIG5We2NvbnN0cnVjdG9yKHQpe3RWKHRoaXMsInZhbHVlRmFjdG9yeSIsdm9pZCAwKSx0Vih0aGlzLCJkYXRhIixb''@;'; put 'put ''XSksdFYodGhpcywiaW5kZXgiLFtdKSx0Vih0aGlzLCJob2xlcyIsbmV3IFNldCksdGhpcy52YWx1ZUZhY3Rvcnk9dH1vYnRhaW4odCl7ZVYoKCk9Pkx2KHQpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGU9dGhpcy5fZ2V0U3RvcmFnZUluZGV4QnlLZXkodCk7bGV0''@;'; put 'put ''IHI7aWYoZT49MClyPXRoaXMuZGF0YVtlXSx2b2lkIDA9PT1yJiYocj10aGlzLnZhbHVlRmFjdG9yeSh0KSx0aGlzLmRhdGFbZV09cik7ZWxzZSBpZihyPXRoaXMudmFsdWVGYWN0b3J5KHQpLHRoaXMuaG9sZXMuc2l6ZT4wKXtjb25zdCBpPXRoaXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZh''@;'; put 'put ''bHVlO3RoaXMuaG9sZXMuZGVsZXRlKGkpLHRoaXMuZGF0YVtpXT1yLHRoaXMuaW5kZXhbdF09aX1lbHNlIHRoaXMuZGF0YS5wdXNoKHIpLHRoaXMuaW5kZXhbdF09dGhpcy5kYXRhLmxlbmd0aC0xO3JldHVybiByfWluc2VydCh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtlVigoKT0+THYodCl8fHhrKHQpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IHI9W10saT10aGlzLmRhdGEubGVuZ3RoO2ZvcihsZXQgYz0wO2M8ZTtjKyspci5wdXNo''@;'; put 'put ''KGkrYyksdGhpcy5kYXRhLnB1c2godm9pZCAwKTtjb25zdCBhPXhrKHQpP3RoaXMuaW5kZXgubGVuZ3RoOnQ7dGhpcy5pbmRleD1bLi4udGhpcy5pbmRleC5zbGljZSgwLGEpLC4uLnIsLi4udGhpcy5pbmRleC5zbGljZShhKV19cmVtb3ZlKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO2VWKCgpPT5Mdih0KXx8eGsodCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3Qgcj10aGlzLmluZGV4LnNwbGljZSh4ayh0KT90aGlzLmluZGV4Lmxlbmd0''@;'; put 'put ''aC1lOnQsZSk7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2NvbnN0IGE9cltpXTsibnVtYmVyIj09dHlwZW9mIGEmJnRoaXMuaG9sZXMuYWRkKGEpfX1zaXplKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5zaXplfXZhbHVlcygpe3JldHVybiB0aGlzLmRhdGEuZmls''@;'; put 'put ''dGVyKCh0LGUpPT52b2lkIDAhPT10JiYhdGhpcy5ob2xlcy5oYXMoZSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgdD1bXTtmb3IobGV0IHI9MDtyPHRoaXMuZGF0YS5sZW5ndGg7cisrKXtjb25zdCBpPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KHIpOy0xIT09aSYm''@;'; put 'put ''dm9pZCAwIT09dGhpcy5kYXRhW3JdJiZ0LnB1c2goW2ksdGhpcy5kYXRhW3JdXSl9bGV0IGU9MDtyZXR1cm57bmV4dDooKT0+e2lmKGU8dC5sZW5ndGgpe2NvbnN0IHI9dFtlXTtyZXR1cm4gZSs9MSx7dmFsdWU6cixkb25lOiExfX1yZXR1cm57ZG9uZTohMH19fX1jbGVhcigpe3RoaXMuZGF0''@;'; put 'put ''YT1bXSx0aGlzLmluZGV4PVtdLHRoaXMuaG9sZXMuY2xlYXIoKX1fZ2V0U3RvcmFnZUluZGV4QnlLZXkodCl7cmV0dXJuIHRoaXMuaW5kZXgubGVuZ3RoPnQ/dGhpcy5pbmRleFt0XTotMX1fZ2V0S2V5QnlTdG9yYWdlSW5kZXgodCl7cmV0dXJuIHRoaXMuaW5kZXguaW5kZXhPZih0KX1bU3lt''@;'; put 'put ''Ym9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX19ZnVuY3Rpb24gdzZlKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBqMHQobil7dmFyIHQ9ZnVuY3Rpb24gejB0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1p''@;'; put 'put ''dGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9''@;'; put 'put ''PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1j''@;'; put 'put ''b25zdCBVMHQ9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBXMHR7Y29uc3RydWN0b3IodCl7dzZlKHRoaXMsImdsb2JhbE1ldGEiLHZvaWQgMCksdzZlKHRoaXMsIm1ldGFzIixuZXcgblYoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSkpLHRoaXMuZ2xvYmFsTWV0YT10LHRoaXMubWV0YXM9bmV3IG5W''@;'; put 'put ''KCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpfXVwZGF0ZU1ldGEodCxlKXtjb25zdCByPXRoaXMuZ2V0TWV0YSh0KTtGdShyLGUpLFFOKHIsZSl9Y3JlYXRlQ29sdW1uKHQsZSl7dGhpcy5tZXRhcy5pbnNlcnQodCxlKX1yZW1vdmVDb2x1bW4odCxlKXt0aGlzLm1ldGFzLnJlbW92ZSh0LGUpfWdl''@;'; put 'put ''dE1ldGEodCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKHQpfWdldE1ldGFDb25zdHJ1Y3Rvcih0KXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4odCkuY29uc3RydWN0b3J9Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlTWV0YSgpe3JldHVybiBmdW5jdGlvbiBEMHQo''@;'; put 'put ''bil7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2Z1bmN0aW9uIGUoKXt9WWdlKGUsbik7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wcm90b3R5cGVbdFtyXV09dm9pZCAwO3JldHVybiBlfSh0aGlzLmdsb2JhbE1l''@;'; put 'put ''dGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksVTB0KS5wcm90b3R5cGV9fWZ1bmN0aW9uIEM2ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gWjB0KG4pe3ZhciB0PWZ1bmN0aW9uIFkwdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59''@;'; put 'put ''Y2xhc3MgRzB0e2NvbnN0cnVjdG9yKHQpe0M2ZSh0aGlzLCJjb2x1bW5NZXRhIix2b2lkIDApLEM2ZSh0aGlzLCJtZXRhcyIsbmV3IG5WKCgpPT50aGlzLl9jcmVhdGVSb3coKSkpLHRoaXMuY29sdW1uTWV0YT10fXVwZGF0ZU1ldGEodCxlLHIpe2NvbnN0IGk9dGhpcy5nZXRNZXRhKHQsZSk7''@;'; put 'put ''RnUoaSxyKSxRTihpLHIpfWNyZWF0ZVJvdyh0LGUpe3RoaXMubWV0YXMuaW5zZXJ0KHQsZSl9Y3JlYXRlQ29sdW1uKHQsZSl7Zm9yKGxldCByPTA7cjx0aGlzLm1ldGFzLnNpemUoKTtyKyspdGhpcy5tZXRhcy5vYnRhaW4ocikuaW5zZXJ0KHQsZSl9cmVtb3ZlUm93KHQsZSl7dGhpcy5tZXRh''@;'; put 'put ''cy5yZW1vdmUodCxlKX1yZW1vdmVDb2x1bW4odCxlKXtmb3IobGV0IHI9MDtyPHRoaXMubWV0YXMuc2l6ZSgpO3IrKyl0aGlzLm1ldGFzLm9idGFpbihyKS5yZW1vdmUodCxlKX1nZXRNZXRhKHQsZSxyKXtjb25zdCBpPXRoaXMubWV0YXMub2J0YWluKHQpLm9idGFpbihlKTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwPT09cj9pOmlbcl19c2V0TWV0YSh0LGUscixpKXt2YXIgYTtjb25zdCBjPXRoaXMubWV0YXMub2J0YWluKHQpLm9idGFpbihlKTtudWxsPT09KGE9Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YXx8YS5kZWxldGUociksY1tyXT1pfXJlbW92ZU1ldGEo''@;'; put 'put ''dCxlLHIpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbih0KS5vYnRhaW4oZSlbcl19Z2V0TWV0YXMoKXtjb25zdCB0PVtdLGU9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl3YShlW3JdKSYmdC5wdXNoKC4uLmVbcl0udmFsdWVzKCkp''@;'; put 'put ''O3JldHVybiB0fWdldE1ldGFzQXRSb3codCl7ZVYoKCk9Pkx2KHQpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGU9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gZS5oYXModCk/QXJyYXkuZnJvbShlLmdldCh0KS52YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3Ro''@;'; put 'put ''aXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0dXJuIG5ldyBuVih0PT50aGlzLl9jcmVhdGVNZXRhKHQpKX1fY3JlYXRlTWV0YSh0KXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IodCkpfX1jbGFzcyBTNmV7Y29uc3RydWN0b3IodCl7bGV0IGU9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PXQsdGhpcy5nbG9iYWxNZXRhPW5ldyBPMHQodCksdGhpcy50YWJs''@;'; put 'put ''ZU1ldGE9bmV3IE4wdCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1uZXcgVzB0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgRzB0KHRoaXMuY29sdW1uTWV0YSksci5mb3JFYWNoKGk9Pm5ldyBpKHRoaXMpKSx0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShl''@;'; put 'put ''KX1nZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhKCl9dXBkYXRlR2xvYmFsTWV0YSh0KXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YSh0KX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YSh0''@;'; put 'put ''KXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKHQpfWdldENvbHVtbk1ldGEodCl7cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKHQpfXVwZGF0ZUNvbHVtbk1ldGEodCxlKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YSh0LGUpfWdldENlbGxNZXRhKHQsZSxyKXtjb25zdCBpPXRo''@;'; put 'put ''aXMuY2VsbE1ldGEuZ2V0TWV0YSh0LGUpO3JldHVybiBpLnZpc3VhbFJvdz1yLnZpc3VhbFJvdyxpLnZpc3VhbENvbD1yLnZpc3VhbENvbHVtbixpLnJvdz10LGkuY29sPWUsci5za2lwTWV0YUV4dGVuc2lvbnx8dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckdldENlbGxNZXRhIixpKSxpfWdl''@;'; put 'put ''dENlbGxNZXRhS2V5VmFsdWUodCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YSh0LGUscil9c2V0Q2VsbE1ldGEodCxl''@;'; put 'put ''LHIsaSl7dGhpcy5jZWxsTWV0YS5zZXRNZXRhKHQsZSxyLGkpfXVwZGF0ZUNlbGxNZXRhKHQsZSxyKXt0aGlzLmNlbGxNZXRhLnVwZGF0ZU1ldGEodCxlLHIpfXJlbW92ZUNlbGxNZXRhKHQsZSxyKXt0aGlzLmNlbGxNZXRhLnJlbW92ZU1ldGEodCxlLHIpfWdldENlbGxzTWV0YSgpe3JldHVy''@;'; put 'put ''biB0aGlzLmNlbGxNZXRhLmdldE1ldGFzKCl9Z2V0Q2VsbHNNZXRhQXRSb3codCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXNBdFJvdyh0KX1jcmVhdGVSb3codCl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3codCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06MSl9cmVtb3ZlUm93KHQpe3RoaXMuY2VsbE1ldGEucmVtb3ZlUm93KHQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfWNyZWF0ZUNvbHVtbih0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLmNyZWF0ZUNvbHVtbih0LGUpLHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4odCxlKX1yZW1vdmVDb2x1bW4odCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l''@;'; put 'put ''bnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5yZW1vdmVDb2x1bW4odCxlKSx0aGlzLmNvbHVtbk1ldGEucmVtb3ZlQ29sdW1uKHQsZSl9Y2xlYXJDZWxsc0NhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCl9Y2xlYXJDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpLHRoaXMu''@;'; put 'put ''Y29sdW1uTWV0YS5jbGVhckNhY2hlKCl9fWZ1bmN0aW9uIE02ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gJDB0KG4pe3ZhciB0PWZ1bmN0aW9uIEswdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59cGwoUzZlLCQwKTtjbGFz''@;'; put 'put ''cyBYMHR7Y29uc3RydWN0b3IodCl7dmFyIGU9dGhpcztNNmUodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksTTZlKHRoaXMsIm1ldGFTeW5jTWVtbyIsbmV3IE1hcCksdGhpcy5tZXRhTWFuYWdlcj10LHQuYWRkTG9jYWxIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBlLmV4dGVuZENlbGxNZXRhKC4uLmFyZ3VtZW50cyl9KSxFYS5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVJlbmRlciIscj0+e3ImJnRoaXMubWV0YVN5bmNNZW1vLmNsZWFyKCl9LHRoaXMubWV0YU1hbmFnZXIuaG90KX1leHRlbmRDZWxsTWV0YSh0KXt2YXIgZTtjb25zdHtyb3c6cixj''@;'; put 'put ''b2w6aX09dDtpZihudWxsIT09KGU9dGhpcy5tZXRhU3luY01lbW8uZ2V0KHIpKSYmdm9pZCAwIT09ZSYmZS5oYXMoaSkpcmV0dXJuO2NvbnN0e3Zpc3VhbFJvdzphLHZpc3VhbENvbDpjfT10LG09dGhpcy5tZXRhTWFuYWdlci5ob3QsQz1tLmNvbFRvUHJvcChjKTt0LnByb3A9QyxtLnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVHZXRDZWxsTWV0YSIsYSxjLHQpO2NvbnN0IFA9JGModCwidHlwZSIpP3QudHlwZTpudWxsO2xldCBZPWFsKHQuY2VsbHMpP3QuY2VsbHMocixpLEMpOm51bGw7aWYoUClpZihZKXt2YXIgSjtZLnR5cGU9bnVsbCE9PShKPVkudHlwZSkmJnZvaWQgMCE9PUo/SjpQfWVsc2Ug''@;'; put 'put ''WT17dHlwZTpQfTtZJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKHIsaSxZKSxtLnJ1bkhvb2tzKCJhZnRlckdldENlbGxNZXRhIixhLGMsdCksdGhpcy5tZXRhU3luY01lbW8uaGFzKHIpfHx0aGlzLm1ldGFTeW5jTWVtby5zZXQocixuZXcgU2V0KSx0aGlzLm1ldGFTeW5jTWVt''@;'; put 'put ''by5nZXQocikuYWRkKGkpfX1mdW5jdGlvbiB2dGUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIFEwdChuKXt2YXIgdD1mdW5jdGlvbiBlMXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2''@;'; put 'put ''YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9''@;'; put 'put ''KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufXZhciB4NmU9bmV3IFdlYWtNYXA7Y2xh''@;'; put 'put ''c3MgcjF0e2NvbnN0cnVjdG9yKHQpe3Z0ZSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSx2dGUodGhpcywidXNhZ2VUcmFja2VyIixuZXcgU2V0KSx2dGUodGhpcywicHJvcERlc2NyaXB0b3JzIixuZXcgTWFwKFtbImFyaWFUYWdzIix7aW5pdE9ubHk6ITB9XSxbImZpeGVkQ29sdW1uc0xl''@;'; put 'put ''ZnQiLHt0YXJnZXQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixvbkNoYW5nZShlKXtpZih0aGlzLm1ldGFNYW5hZ2VyLmhvdC5pc1J0bCgpJiYiZml4ZWRDb2x1bW5zTGVmdCI9PT1lKXRocm93IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBpcyBub3Qgc3VwcG9ydGVkIGZvciBSVEwu''@;'; put 'put ''IFBsZWFzZSB1c2Ugb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIik7aWYodGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNMZWZ0IikmJnRoaXMudXNhZ2VUcmFja2VyLmhhcygiZml4ZWRDb2x1bW5zU3RhcnQiKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5z''@;'; put 'put ''TGVmdGAgYW5kIGBmaXhlZENvbHVtbnNTdGFydGAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpfX1dLFsibGF5b3V0RGlyZWN0aW9uIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbENvbHVtbnMi''@;'; put 'put ''LHtpbml0T25seTohMH1dLFsicmVuZGVyQWxsUm93cyIse2luaXRPbmx5OiEwfV1dKSksZnVuY3Rpb24gcTB0KG4sdCxlKXsoZnVuY3Rpb24gSjB0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5zZXQobixlKX0odGhpcyx4NmUsKGUscixpKT0+e2lmKCFpKXRocm93IG5ldyBFcnJvcihgVGhlIFxgJHtlfVxgIG9wdGlvbiBjYW4gbm90IGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIEhhbmRzb250YWJsZSBpcyBpbml0aWFsaXplZC5gKX0p''@;'; put 'put ''LHRoaXMubWV0YU1hbmFnZXI9dCx0aGlzLmV4dGVuZE1ldGFQcm9wcygpfWV4dGVuZE1ldGFQcm9wcygpe3RoaXMucHJvcERlc2NyaXB0b3JzLmZvckVhY2goKHQsZSk9Pntjb25zdHtpbml0T25seTpyLHRhcmdldDppLG9uQ2hhbmdlOmF9PXQsYz0ic3RyaW5nIj09dHlwZW9mIGksbT1jP2k6''@;'; put 'put ''ZSxDPWBfJHttfWA7dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbQ109dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbbV0sYT8odGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoZSxDLGEpLGMmJnRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGksQyxhKSk6ciYmKHRoaXMuaW5z''@;'; put 'put ''dGFsbFByb3BXYXRjaGVyKGUsQyxmdW5jdGlvbiB0MXQobix0KXtyZXR1cm4gbi5nZXQoZnVuY3Rpb24gbjF0KG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2''@;'; put 'put ''YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0obix0KSl9KHg2ZSx0aGlzKSksdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3N8fCh0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5n''@;'; put 'put ''cz1bXSksdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3MucHVzaChlKSl9KX1pbnN0YWxsUHJvcFdhdGNoZXIodCxlLHIpe2NvbnN0IGk9dGhpcztPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEsdCx7''@;'; put 'put ''Z2V0KCl7cmV0dXJuIHRoaXNbZV19LHNldChhKXtjb25zdCBjPSFpLnVzYWdlVHJhY2tlci5oYXModCk7aS51c2FnZVRyYWNrZXIuYWRkKHQpLHIuY2FsbChpLHQsYSxjKSx0aGlzW2VdPWF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fWNvbnN0IEU2ZT0vXihcclxufFxuXHJ8''@;'; put 'put ''XHJ8XG4pLyxpMXQ9L15bXlx0XHJcbl0rLyxUNmU9L15cdC87ZnVuY3Rpb24gclYobil7bGV0IHQsZSxyLGksYyxhPSIiO2Zvcih0PTAsZT1uLmxlbmd0aDt0PGU7dCs9MSl7Zm9yKGk9blt0XS5sZW5ndGgscj0wO3I8aTtyKz0xKXI+MCYmKGErPSJcdCIpLGM9blt0XVtyXSwic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGM/Yy5pbmRleE9mKCJcbiIpPi0xP2ErPWAiJHtjLnJlcGxhY2UoLyIvZywnIiInKX0iYDphKz1jOmErPW51bGw9PWM/IiI6Yzt0IT09ZS0xJiYoYSs9IlxuIil9cmV0dXJuIGF9ZnVuY3Rpb24geXRlKG4sdCl7Y29uc3R7aW5zdGFuY2U6ZSx2aXN1YWxSb3c6cix2aXN1YWxDb2w6''@;'; put 'put ''aSx2YWx1ZVNldHRlcjphfT10O3JldHVybiBhbChhKT9hLmNhbGwoZSxuLHIsaSx0KTpufWZ1bmN0aW9uIFp2KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBzMXQobil7dmFyIHQ9ZnVuY3Rpb24gbDF0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1''@;'; put 'put ''cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpuW3RdPWUsbn1jbGFzcyBPQ3tzdGF0aWMgZ2V0IERFU1RJTkFUSU9OX1JFTkRFUkVSKCl7cmV0dXJuIDF9c3RhdGljIGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCl7cmV0dXJuIDJ9Y29uc3RydWN0b3IodCxlLHIpe1p2KHRoaXMsImhvdCIsdm9pZCAwKSxadih0aGlz''@;'; put 'put ''LCJtZXRhTWFuYWdlciIsdm9pZCAwKSxadih0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCksWnYodGhpcywiZGF0YVNvdXJjZSIsdm9pZCAwKSxadih0aGlzLCJkdWNrU2NoZW1hIix2b2lkIDApLFp2KHRoaXMsImNvbFRvUHJvcENhY2hlIix2b2lkIDApLFp2KHRoaXMsInByb3BUb0NvbENhY2hl''@;'; put 'put ''Iix2b2lkIDApLHRoaXMuaG90PXQsdGhpcy5tZXRhTWFuYWdlcj1yLHRoaXMudGFibGVNZXRhPXIuZ2V0VGFibGVNZXRhKCksdGhpcy5kYXRhU291cmNlPWUsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHRoaXMuY3JlYXRlTWFwKCl9Y3JlYXRlTWFwKCl7Y29uc3QgdD10aGlzLmdldFNjaGVt''@;'; put 'put ''YSgpO2lmKHR5cGVvZiB0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBjcmVhdGUgYGNvbHVtbnNgIGRlZmluaXRpb24gYnV0IHlvdSBkaWRuJ3QgcHJvdmlkZSBgc2NoZW1hYCBub3IgYGRhdGFgIik7Y29uc3QgZT10aGlzLnRhYmxlTWV0YS5jb2x1bW5zO2xldCByO2lmKHRoaXMu''@;'; put 'put ''Y29sVG9Qcm9wQ2FjaGU9W10sdGhpcy5wcm9wVG9Db2xDYWNoZT1uZXcgTWFwLGUpe2xldCBpPTAsYT0wLGM9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpe2NvbnN0IG09bk4odCk7aT1tPjA/bTp0aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCksYz0hMH1lbHNlIGk9TWF0aC5taW4odGhpcy50''@;'; put 'put ''YWJsZU1ldGEubWF4Q29scyxlLmxlbmd0aCk7Zm9yKHI9MDtyPGk7cisrKXtjb25zdCBtPWM/ZShyKTplW3JdO2lmKGhvKG0pKXtpZih0eXBlb2YgbS5kYXRhPCJ1Iil7Y29uc3QgQz1jP2E6cjt0aGlzLmNvbFRvUHJvcENhY2hlW0NdPW0uZGF0YSx0aGlzLnByb3BUb0NvbENhY2hlLnNldCht''@;'; put 'put ''LmRhdGEsQyl9YSs9MX19fWVsc2UgdGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyh0KX1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBkUSh0aGlzLmRhdGFTb3VyY2UpfXJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKHQsZSxyKXtsZXQgYyxpPWUsYT1yO3JldHVybiB0eXBlb2YgaT4idSImJihpPTAs''@;'; put 'put ''YT0iIiksIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSYmYXModCwobSxDKT0+e251bGw9PT1tPyhjPWErQyx0aGlzLmNvbFRvUHJvcENhY2hlLnB1c2goYyksdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoYyxpKSxpKz0xKTppPXRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMo''@;'; put 'put ''bSxpLGAke0N9LmApfSksaX1jb2xUb1Byb3AodCl7aWYoITE9PT1OdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0O2NvbnN0IGU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0KTtyZXR1cm4gbnVsbD09PWU/dDp0aGlzLmNvbFRvUHJvcENhY2hlJiZ3YSh0aGlzLmNvbFRvUHJvcENhY2hl''@;'; put 'put ''W2VdKT90aGlzLmNvbFRvUHJvcENhY2hlW2VdOmV9cHJvcFRvQ29sKHQpe2NvbnN0IGU9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQodCk7aWYod2EoZSkpcmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGUpO2NvbnN0IHI9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4odCk7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1yP3Q6cn1nZXRTY2hlbWEoKXtjb25zdCB0PXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE7cmV0dXJuIHQ/ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dCgpOnQ6dGhpcy5kdWNrU2NoZW1hfWNyZWF0ZUR1Y2tTY2hlbWEoKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlJiZ0aGlzLmRhdGFTb3Vy''@;'; put 'put ''Y2VbMF0/aEModGhpcy5kYXRhU291cmNlWzBdKTp7fX1yZWZyZXNoRHVja1NjaGVtYSgpe3RoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKX1jcmVhdGVSb3codCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''OjEse3NvdXJjZTpyLG1vZGU6aT0iYWJvdmUifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgYT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsZXQgYz1hLG09MCxDPXQ7aWYoKCJudW1iZXIiIT10eXBlb2YgQ3x8Qz49''@;'; put 'put ''YSkmJihDPWEpLEM8dGhpcy5ob3QuY291bnRSb3dzKCkmJihjPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coQykpLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsQyxlLHIpfHxudWxsPT09YylyZXR1cm57ZGVsdGE6MH07Y29uc3QgWT10aGlzLnRhYmxlTWV0YS5tYXhS''@;'; put 'put ''b3dzLEo9dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsY2U9W107Zm9yKDttPGUmJmErbTxZOyl7bGV0IEFlPW51bGw7ImFycmF5Ij09PXRoaXMuaG90LmRhdGFUeXBlP3RoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE/QWU9dGQodGhpcy5nZXRTY2hlbWEoKSk6KEFlPVtdLGVvKEotMSwoKT0+QWUu''@;'; put 'put ''cHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmhvdC5kYXRhVHlwZT9BZT10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKEMrbSk6KEFlPXt9LHpBKEFlLHRoaXMuZ2V0U2NoZW1hKCkpKSxjZS5wdXNoKEFlKSxtKz0xfXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMo''@;'; put 'put ''QyxtKSwiYmVsb3ciPT09aSYmKGM9TWF0aC5taW4oYysxLGEpKSx0aGlzLnNwbGljZURhdGEoYywwLGNlKTtjb25zdCBmZT10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKTtyZXR1cm4gdGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk9PT1jZS5sZW5ndGgmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLmluaXRUb0xlbmd0aCh0aGlzLmhvdC5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksbT4wJiYobnVsbD09dD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLG0pOiJhdXRvIiE9PXImJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KGMsZSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJh''@;'; put 'put ''ZnRlckNyZWF0ZVJvdyIsZmUsbSxyKSx7ZGVsdGE6bSxzdGFydFBoeXNpY2FsSW5kZXg6Y319Y3JlYXRlQ29sKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6cixtb2RlOmk9InN0YXJ0In09YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2lmKCF0aGlzLmhvdC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgbmV3IGNvbHVtbi4gV2hlbiBkYXRhIHNvdXJjZSBpbiBhbiBvYmplY3Qs''@;'; put 'put ''IHlvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEgcm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgJ2NvbHVtbnMnIHNldHRpbmcuSWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBhZGQgbmV3IGNvbHVtbnMsIHlvdSBoYXZlIHRvIHVzZSBh''@;'; put 'put ''cnJheSBkYXRhc291cmNlLiIpO2NvbnN0IGE9dGhpcy5kYXRhU291cmNlLGM9dGhpcy50YWJsZU1ldGEubWF4Q29scyxtPXRoaXMuaG90LmNvdW50U291cmNlQ29scygpLEM9dGhpcy5ob3QuY291bnRDb2xzKCksUD10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSxZPSJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgdCYmdDw9bT90OkM7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIixZLGUscikpcmV0dXJue2RlbHRhOjB9O2NvbnN0IEo9WTxDP3RoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oWSk6bSxjZT0iZW5kIj09PWk/TWF0aC5taW4oSisxLG0pOko7bGV0IGZlPTA7''@;'; put 'put ''Zm9yKGxldCBBZT1jZTtmZTxlJiZDK2ZlPGM7QWUrKyl7aWYoIm51bWJlciIhPXR5cGVvZiBZfHxZPj1DK2ZlKWlmKFA+MClmb3IobGV0IEhlPTA7SGU8UDtIZSs9MSl0eXBlb2YgYVtIZV0+InUiJiYoYVtIZV09W10pLGFbSGVdLnB1c2gobnVsbCk7ZWxzZSBhLnB1c2goW251bGxdKTtlbHNl''@;'; put 'put ''IGZvcihsZXQgSGU9MDtIZTxQO0hlKyspYVtIZV0uc3BsaWNlKEFlLDAsbnVsbCk7ZmUrPTF9cmV0dXJuIGZlPjAmJihudWxsPT10P3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsZmUpOiJhdXRvIiE9PXImJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKGNlLGUpKSx0''@;'; put 'put ''aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFksZmUsaSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlQ29sIix0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihjZSksZmUsciksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpmZSxzdGFydFBoeXNpY2Fs''@;'; put 'put ''SW5kZXg6Y2V9fXJlbW92ZVJvdyh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGk9TnVtYmVyLmlzSW50ZWdlcih0KT90Oi1lO2NvbnN0IGE9dGhp''@;'; put 'put ''cy52aXN1YWxSb3dzVG9QaHlzaWNhbChpLGUpLGM9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7aWYoaT0oYytpKSVjLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsaSxhLmxlbmd0aCxhLHIpKXJldHVybiExO2NvbnN0IEM9YS5sZW5ndGg7aWYodGhpcy5maWx0''@;'; put 'put ''ZXJEYXRhKGksQyxhKSxpPHRoaXMuaG90LmNvdW50Um93cygpKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGEpO2NvbnN0IFk9d2EodGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fHdhKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpfHx0aGlzLnRhYmxlTWV0YS5jb2xI''@;'; put 'put ''ZWFkZXJzOzA9PT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiYhWSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKX1yZXR1cm4gYS5zbGljZSgwKS5zb3J0KChZLEopPT5KLVkpLmZvckVhY2goWT0+''@;'; put 'put ''e3RoaXMubWV0YU1hbmFnZXIucmVtb3ZlUm93KFksMSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGksQyxhLHIpLCEwfXJlbW92ZUNvbCh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJvYmplY3QiPT09dGhpcy5ob3QuZGF0YVR5cGV8fHRoaXMudGFibGVNZXRhLmNvbHVtbnMpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgcmVtb3ZlIGNvbHVtbiB3aXRoIG9iamVjdCBkYXRhIHNvdXJjZSBvciBjb2x1bW5zIG9w''@;'; put 'put ''dGlvbiBzcGVjaWZpZWQiKTtsZXQgaT0ibnVtYmVyIiE9dHlwZW9mIHQ/LWU6dDtpPSh0aGlzLmhvdC5jb3VudENvbHMoKStpKSV0aGlzLmhvdC5jb3VudENvbHMoKTtjb25zdCBhPXRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaSxlKSxjPWEuc2xpY2UoMCkuc29ydCgoSixjZSk9PmNl''@;'; put 'put ''LUopO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZUNvbCIsaSxlLGEscikpcmV0dXJuITE7bGV0IEM9ITA7Y29uc3QgUD1jLmxlbmd0aCxZPXRoaXMuZGF0YVNvdXJjZTtmb3IobGV0IEo9MDtKPFA7SisrKUMmJmFbMF0hPT1hW0pdLUomJihDPSExKTtpZihDKWZvcihs''@;'; put 'put ''ZXQgSj0wLGNlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO0o8Y2U7SisrKVlbSl0uc3BsaWNlKGFbMF0sZSksMD09PUomJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKGFbMF0sZSk7ZWxzZSBmb3IobGV0IEo9MCxjZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtKPGNlO0or''@;'; put 'put ''Kylmb3IobGV0IGZlPTA7ZmU8UDtmZSsrKVlbSl0uc3BsaWNlKGNbZmVdLDEpLDA9PT1KJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihjW2ZlXSwxKTtyZXR1cm4gaTx0aGlzLmhvdC5jb3VudENvbHMoKSYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMo''@;'; put 'put ''YSksIXRoaXMudGFibGVNZXRhLnJvd0hlYWRlcnMmJjA9PT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJS''@;'; put 'put ''ZW1vdmVDb2wiLGksZSxhLHIpLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSwhMH1zcGxpY2VDb2wodCxlLHIpe2NvbnN0IGk9dGhpcy5ob3QuZ2V0RGF0YUF0Q29sKHQpLGE9aS5zbGljZShlLGUrciksYz1pLnNsaWNlKGUrcik7Zm9yKHZhciBtPWFyZ3VtZW50cy5sZW5ndGgsQz1uZXcgQXJy''@;'; put 'put ''YXkobT4zP20tMzowKSxQPTM7UDxtO1ArKylDW1AtM109YXJndW1lbnRzW1BdO1pxKEMsYyk7bGV0IFk9MDtmb3IoO1k8cjspQy5wdXNoKG51bGwpLFkrPTE7cmV0dXJuIEVnZShDKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShlLHQsQyxudWxsLG51bGwsInNwbGljZUNvbCIpLGF9c3Bs''@;'; put 'put ''aWNlUm93KHQsZSxyKXtjb25zdCBpPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdFJvdyh0KSxhPWkuc2xpY2UoZSxlK3IpLGM9aS5zbGljZShlK3IpO2Zvcih2YXIgbT1hcmd1bWVudHMubGVuZ3RoLEM9bmV3IEFycmF5KG0+Mz9tLTM6MCksUD0zO1A8bTtQKyspQ1tQLTNdPWFyZ3VtZW50c1tQ''@;'; put 'put ''XTtacShDLGMpO2xldCBZPTA7Zm9yKDtZPHI7KUMucHVzaChudWxsKSxZKz0xO3JldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh0LGUsW0NdLG51bGwsbnVsbCwic3BsaWNlUm93IiksYX1zcGxpY2VEYXRhKHQsZSxyKXtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVE''@;'; put 'put ''YXRhU3BsaWNlIix0LGUscikpe2NvbnN0IGE9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLHQpLC4uLnIsLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKHQpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsYS5mb3JFYWNoKGM9PnRoaXMuZGF0YVNvdXJjZS5wdXNoKGMpKX19ZmlsdGVyRGF0''@;'; put 'put ''YSh0LGUscil7bGV0IGk9dGhpcy5ob3QucnVuSG9va3MoImZpbHRlckRhdGEiLHQsZSxyKTshMT09PUFycmF5LmlzQXJyYXkoaSkmJihpPXRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGEsYyk9Pi0xPT09ci5pbmRleE9mKGMpKSksdGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLEFycmF5LnByb3Rv''@;'; put 'put ''dHlwZS5wdXNoLmFwcGx5KHRoaXMuZGF0YVNvdXJjZSxpKX1nZXQodCxlKXtjb25zdCByPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codCk7bGV0IGk9dGhpcy5kYXRhU291cmNlW3JdO2NvbnN0IGE9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLHIpO2k9aXNOYU4oYSk/YTppO2Nv''@;'; put 'put ''bnN0e2RhdGFEb3ROb3RhdGlvbjpjfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBtPW51bGw7aWYoaSYmaS5oYXNPd25Qcm9wZXJ0eSYmJGMoaSxlKSltPWlbZV07ZWxzZSBpZihjJiYic3RyaW5nIj09dHlwZW9mIGUmJmUuaW5kZXhPZigiLiIpPi0xKXtsZXQgWT1pO2lmKCFZKXJldHVy''@;'; put 'put ''biBudWxsO2NvbnN0IEo9ZS5zcGxpdCgiLiIpO2ZvcihsZXQgY2U9MCxmZT1KLmxlbmd0aDtjZTxmZTtjZSsrKWlmKFk9WVtKW2NlXV0sdHlwZW9mIFk+InUiKXJldHVybiBudWxsO209WX1lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGUmJihtPWUodGhpcy5kYXRhU291cmNlLnNsaWNlKHIscisx''@;'; put 'put ''KVswXSkpO2NvbnN0IEM9dGhpcy5wcm9wVG9Db2woZSksUD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEMpO2lmKEx2KHIpJiZMdihQKSYmKG09ZnVuY3Rpb24gbzF0KG4sdCl7Y29uc3R7aW5zdGFuY2U6ZSx2aXN1YWxSb3c6cix2aXN1YWxDb2w6aSx2YWx1ZUdldHRlcjphfT10O3JldHVy''@;'; put 'put ''biBhbChhKT9hLmNhbGwoZSxuLHIsaSx0KTpufShtLHRoaXMubWV0YU1hbmFnZXIuZ2V0Q2VsbE1ldGEocixQLHt2aXN1YWxSb3c6dCx2aXN1YWxDb2x1bW46Qyxza2lwTWV0YUV4dGVuc2lvbjohMH0pKSksdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBZPUFoKG0pO3Ro''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIix0LEMsWSwiZ2V0IiksWS5pc1RvdWNoZWQoKSYmKG09WS52YWx1ZSl9cmV0dXJuIG19Z2V0Q29weWFibGUodCxlKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEodCx0aGlzLnByb3BUb0NvbChlKSkuY29weWFibGU/dGhpcy5nZXQodCxl''@;'; put 'put ''KToiIn1zZXQodCxlLHIpe2NvbnN0IGk9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KTtsZXQgYT1yLGM9dGhpcy5kYXRhU291cmNlW2ldO2NvbnN0IG09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGkpO2lmKGM9aXNOYU4obSk/bTpjLHRoaXMuaG90Lmhhc0hvb2soIm1vZGlm''@;'; put 'put ''eURhdGEiKSl7Y29uc3QgUD1BaChhKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsdCx0aGlzLnByb3BUb0NvbChlKSxQLCJzZXQiKSxQLmlzVG91Y2hlZCgpJiYoYT1QLnZhbHVlKX1jb25zdHtkYXRhRG90Tm90YXRpb246Q309dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZihjJiZj''@;'; put 'put ''Lmhhc093blByb3BlcnR5JiYkYyhjLGUpKWNbZV09YTtlbHNlIGlmKEMmJiJzdHJpbmciPT10eXBlb2YgZSYmZS5pbmRleE9mKCIuIik+LTEpe2xldCBKLFA9YyxZPTA7Y29uc3QgY2U9ZS5zcGxpdCgiLiIpO2ZvcihZPTAsSj1jZS5sZW5ndGgtMTtZPEo7WSsrKXtpZigiX19wcm90b19fIj09''@;'; put 'put ''PWNlW1ldfHwiY29uc3RydWN0b3IiPT09Y2VbWV18fCJwcm90b3R5cGUiPT09Y2VbWV0pcmV0dXJuO3R5cGVvZiBQW2NlW1ldXT4idSImJihQW2NlW1ldXT17fSksUD1QW2NlW1ldXX1QW2NlW1ldXT1hfWVsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpZSh0aGlzLmRhdGFTb3VyY2Uuc2xp''@;'; put 'put ''Y2UoaSxpKzEpWzBdLGEpO2Vsc2V7aWYoIl9fcHJvdG9fXyI9PT1lfHwiY29uc3RydWN0b3IiPT09ZXx8InByb3RvdHlwZSI9PT1lKXJldHVybjtjW2VdPWF9fXZpc3VhbFJvd3NUb1BoeXNpY2FsKHQsZSl7Y29uc3Qgcj10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSxpPVtdO2xldCBtLGE9''@;'; put 'put ''KHIrdCklcixjPWU7Zm9yKDthPHImJmM7KW09dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxpLnB1c2gobSksYy09MSxhKz0xO3JldHVybiBpfXZpc3VhbENvbHVtbnNUb1BoeXNpY2FsKHQsZSl7Y29uc3Qgcj10aGlzLmhvdC5jb3VudENvbHMoKSxpPVtdO2xldCBhPShyK3QpJXIsYz1lO2Zv''@;'; put 'put ''cig7YTxyJiZjOyl7Y29uc3QgbT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO2kucHVzaChtKSxjLT0xLGErPTF9cmV0dXJuIGl9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuaG90LmNvdW50U291cmNlUm93cygpO3QrKylmb3IobGV0IGU9MDtlPHRoaXMuaG90LmNvdW50Q29scygp''@;'; put 'put ''O2UrKyl0aGlzLnNldCh0LHRoaXMuY29sVG9Qcm9wKGUpLCIiKX1nZXRMZW5ndGgoKXtjb25zdCB0PXRoaXMudGFibGVNZXRhLm1heFJvd3M7bGV0IGU7ZT10PDB8fDA9PT10PzA6dHx8MS8wO2NvbnN0IHI9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5n''@;'; put 'put ''dGgoKTtyZXR1cm4gTWF0aC5taW4ocixlKX1nZXRBbGwoKXtjb25zdCB0PXtyb3c6MCxjb2w6MH0sZT17cm93Ok1hdGgubWF4KHRoaXMuaG90LmNvdW50Um93cygpLTEsMCksY29sOk1hdGgubWF4KHRoaXMuaG90LmNvdW50Q29scygpLTEsMCl9O3JldHVybiB0LnJvdy1lLnJvdyE9MHx8dGhp''@;'; put 'put ''cy5ob3QuY291bnRTb3VyY2VSb3dzKCk/dGhpcy5nZXRSYW5nZSh0LGUsT0MuREVTVElOQVRJT05fUkVOREVSRVIpOltdfWNvdW50Q2FjaGVkQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aH1nZXRSYW5nZSh0LGUscil7Y29uc3QgaT1bXTtsZXQgYSxjLG07Y29u''@;'; put 'put ''c3QgQz10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLFA9dGhpcy50YWJsZU1ldGEubWF4Q29scztpZigwPT09Q3x8MD09PVApcmV0dXJuW107Y29uc3QgWT1yPT09T0MuREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUj90aGlzLmdldENvcHlhYmxlOnRoaXMuZ2V0LEo9TWF0aC5taW4oTWF0''@;'; put 'put ''aC5tYXgoQy0xLDApLE1hdGgubWF4KHQucm93LGUucm93KSksY2U9TWF0aC5taW4oTWF0aC5tYXgoUC0xLDApLE1hdGgubWF4KHQuY29sLGUuY29sKSk7Zm9yKGE9TWF0aC5taW4odC5yb3csZS5yb3cpO2E8PUo7YSsrKXttPVtdO2NvbnN0IGZlPWE+PTA/dGhpcy5ob3QudG9QaHlzaWNhbFJv''@;'; put 'put ''dyhhKTphO2ZvcihjPU1hdGgubWluKHQuY29sLGUuY29sKTtjPD1jZSYmbnVsbCE9PWZlO2MrKyltLnB1c2goWS5jYWxsKHRoaXMsYSx0aGlzLmNvbFRvUHJvcChjKSkpO251bGwhPT1mZSYmaS5wdXNoKG0pfXJldHVybiBpfWdldFRleHQodCxlKXtyZXR1cm4gclYodGhpcy5nZXRSYW5nZSh0''@;'; put 'put ''LGUsT0MuREVTVElOQVRJT05fUkVOREVSRVIpKX1nZXRDb3B5YWJsZVRleHQodCxlKXtyZXR1cm4gclYodGhpcy5nZXRSYW5nZSh0LGUsT0MuREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUikpfWRlc3Ryb3koKXt0aGlzLmhvdD1udWxsLHRoaXMubWV0YU1hbmFnZXI9bnVsbCx0aGlz''@;'; put 'put ''LmRhdGFTb3VyY2U9bnVsbCx0aGlzLmR1Y2tTY2hlbWE9bnVsbCx0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aD0wLHRoaXMucHJvcFRvQ29sQ2FjaGUuY2xlYXIoKSx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMH19Y29uc3QgYzF0PU9DO2Z1bmN0aW9uIEE2ZShuLHQsZSxyKXtjb25zdHto''@;'; put 'put ''b3RJbnN0YW5jZTppLGRhdGFNYXA6YSxkYXRhU291cmNlOmMsaW50ZXJuYWxTb3VyY2U6bSxzb3VyY2U6QyxtZXRhTWFuYWdlcjpQLGZpcnN0UnVuOll9PXIsSj1lZChtKSxjZT1pLmdldFNldHRpbmdzKCk7aS5kYXRhVHlwZT1BcnJheS5pc0FycmF5KGNlLmRhdGFTY2hlbWEpPyJhcnJheSI6''@;'; put 'put ''YWwoY2UuZGF0YVNjaGVtYSk/ImZ1bmN0aW9uIjoib2JqZWN0IixhJiZhLmRlc3Ryb3koKSxuPWkucnVuSG9va3MoYGJlZm9yZSR7Sn1gLG4sWSxDKTtjb25zdCBmZT1uZXcgYzF0KGksbixQKTtpZih0KGZlKSwib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uKW4ucHVzaCYmbi5zcGxpY2V8''@;'; put 'put ''fChuPVtuXSk7ZWxzZXtpZihudWxsIT09bil0aHJvdyBuZXcgRXJyb3IoYCR7bX0gb25seSBhY2NlcHRzIGFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXkgb2YgYXJyYXlzICgke3R5cGVvZiBufSBnaXZlbilgKTt7Y29uc3QgQWU9ZmUuZ2V0U2NoZW1hKCk7bj1bXTtsZXQgSGUsWGU9MCxydD0w''@;'; put 'put ''O2ZvcihYZT0wLHJ0PWNlLnN0YXJ0Um93cztYZTxydDtYZSsrKWlmKCJvYmplY3QiIT09aS5kYXRhVHlwZSYmImZ1bmN0aW9uIiE9PWkuZGF0YVR5cGV8fCFjZS5kYXRhU2NoZW1hKWlmKCJhcnJheSI9PT1pLmRhdGFUeXBlKUhlPXRkKEFlWzBdKSxuLnB1c2goSGUpO2Vsc2V7SGU9W107Zm9y''@;'; put 'put ''KGxldCBkdD0wLGp0PWNlLnN0YXJ0Q29scztkdDxqdDtkdCsrKUhlLnB1c2gobnVsbCk7bi5wdXNoKEhlKX1lbHNlIEhlPXRkKEFlKSxuLnB1c2goSGUpfX1BcnJheS5pc0FycmF5KG5bMF0pJiYoaS5kYXRhVHlwZT0iYXJyYXkiKSxjZS5kYXRhPW4sZmUuZGF0YVNvdXJjZT1uLGMuZGF0YT1u''@;'; put 'put ''LGMuZGF0YVR5cGU9aS5kYXRhVHlwZSxjLmNvbFRvUHJvcD1mZS5jb2xUb1Byb3AuYmluZChmZSksYy5wcm9wVG9Db2w9ZmUucHJvcFRvQ29sLmJpbmQoZmUpLGMuY291bnRDYWNoZWRDb2x1bW5zPWZlLmNvdW50Q2FjaGVkQ29sdW1ucy5iaW5kKGZlKSxlKGZlKSxpLnJ1bkhvb2tzKGBhZnRl''@;'; put 'put ''ciR7Sn1gLG4sWSxDKSxZfHwoaS5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLG51bGwsbSksaS52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGkucmVuZGVyKCkpLGkuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmWmEoaS5yb290RWxlbWVudCxbamdlKC0xKSxRSChpLmNvdW50Q29scygpKyhpLnZp''@;'; put 'put ''ZXc/aS5jb3VudFJvd0hlYWRlcnMoKTowKSldKX1mdW5jdGlvbiBrNmUobix0LGUpe0Q2ZShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gRDZlKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBJNmUobix0KXtyZXR1cm4gbi5nZXQoUEMobix0KSl9ZnVuY3Rpb24gUjZlKG4sdCxlKXtyZXR1cm4gbi5zZXQoUEMobix0KSxlKSxlfWZ1bmN0aW9uIFBDKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSly''@;'; put 'put ''ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgX3RlPW5ldyBXZWFrTWFwLGJ0ZT1uZXcgV2Vha01hcCxFaz1uZXcgV2Vha1NldDtjbGFzcyBkMXR7Y29uc3Ry''@;'; put 'put ''dWN0b3IodCl7bGV0e3Jvd0luZGV4TWFwcGVyOmUsY29sdW1uSW5kZXhNYXBwZXI6cn09dDsoZnVuY3Rpb24gdTF0KG4sdCl7RDZlKG4sdCksdC5hZGQobil9KSh0aGlzLEVrKSxrNmUodGhpcyxfdGUsdm9pZCAwKSxrNmUodGhpcyxidGUsdm9pZCAwKSxSNmUoX3RlLHRoaXMsZSksUjZlKGJ0''@;'; put 'put ''ZSx0aGlzLHIpfXRvUmVuZGVyYWJsZSh0KXtjb25zdCBlPSJOLVMiPT09dC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEscj0iVy1FIj09PXQuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsaT1QQyhFayx0aGlzLEw2ZSkuY2FsbCh0aGlzLHQuZnJvbSxlLHIpO2lmKG51bGw9PT1p''@;'; put 'put ''KXJldHVybiBudWxsO2NvbnN0IGE9UEMoRWssdGhpcyxMNmUpLmNhbGwodGhpcyx0LnRvLC1lLC1yKTtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtjb25zdCBjPXQuY2xvbmUoKTtyZXR1cm4gYy5mcm9tPWksYy50bz1hLGMuaW5jbHVkZXModC5oaWdobGlnaHQpfHwoYy5oaWdobGlnaHQ9aSks''@;'; put 'put ''Y319ZnVuY3Rpb24gTDZlKG4sdCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQ7Y29uc3Qgcj1QQyhFayx0aGlzLE82ZSkuY2FsbCh0aGlzLEk2ZShfdGUsdGhpcyksbi5yb3csdCk7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7''@;'; put 'put ''Y29uc3QgaT1QQyhFayx0aGlzLE82ZSkuY2FsbCh0aGlzLEk2ZShidGUsdGhpcyksbi5jb2wsZSk7cmV0dXJuIG51bGw9PT1pP251bGw6bi5jbG9uZSgpLmFzc2lnbih7cm93OnIsY29sOml9KX1mdW5jdGlvbiBPNmUobix0LGUpe3JldHVybiB0PDA/dDpuLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleCh0LGUpfWZ1bmN0aW9uIEZDKG4pe000KG4pJiZuLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pfWZ1bmN0aW9uIGlWKG4pe2NvbnN0e3NlbGVjdGlvbjp0LHZpZXc6ZX09bixyPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGk9dC5nZXRT''@;'; put 'put ''ZWxlY3Rpb25Tb3VyY2UoKSxhPWUuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKSxjPWUuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLG09ci5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxDPXIuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLFA9bTw9YSxZPUM+PWMsSj1lLmdldEZpcnN0''@;'; put 'put ''RnVsbHlWaXNpYmxlUm93KCksY2U9ZS5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksZmU9ci5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxBZT1yLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyxIZT1mZTw9SixYZT1BZT49Y2U7cmV0dXJue2dldENvbXB1dGVkQ29sdW1uVGFyZ2V0OnJ0PT4ibW91''@;'; put 'put ''c2UiPT09aXx8ImtleWJvYXJkIj09PWk/cnQuY29sOlAmJlk/ci5oaWdobGlnaHQuY29sOlA/bTpZP0M6cnQuY29sLGdldENvbXB1dGVkUm93VGFyZ2V0OnJ0PT4ibW91c2UiPT09aXx8ImtleWJvYXJkIj09PWk/cnQucm93OkhlJiZYZT9yLmhpZ2hsaWdodC5yb3c6SGU/ZmU6WGU/QWU6cnQu''@;'; put 'put ''cm93fX1mdW5jdGlvbiBIQyhuLHQsZSl7UDZlKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBQNmUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0''@;'; put 'put ''aW9uIFdsKG4sdCl7cmV0dXJuIG4uZ2V0KGhwKG4sdCkpfWZ1bmN0aW9uIFl2KG4sdCxlKXtyZXR1cm4gbi5zZXQoaHAobix0KSxlKSxlfWZ1bmN0aW9uIGhwKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6''@;'; put 'put ''ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBOQz1PYmplY3QuZnJlZXplKHtDRUxMOiJjZWxsIixNSVhFRDoibWl4ZWQifSk7dmFyIG11PW5ldyBXZWFrTWFwLGFWPW5ldyBXZWFrTWFwLG9WPW5ldyBX''@;'; put 'put ''ZWFrTWFwLHNWPW5ldyBXZWFrTWFwLGxWPW5ldyBXZWFrTWFwLGNWPW5ldyBXZWFrTWFwLFI0PW5ldyBXZWFrU2V0O2NsYXNzIHcxdHtjb25zdHJ1Y3Rvcih0KXsoZnVuY3Rpb24gYjF0KG4sdCl7UDZlKG4sdCksdC5hZGQobil9KSh0aGlzLFI0KSxIQyh0aGlzLG11LHZvaWQgMCksSEModGhp''@;'; put 'put ''cyxhVix2b2lkIDApLEhDKHRoaXMsb1YsMSksSEModGhpcyxzVixudWxsKSxIQyh0aGlzLGxWLG5ldyBNYXApLEhDKHRoaXMsY1YsITEpLFl2KG11LHRoaXMsdCl9aW5pdCgpe3ZhciB0PXRoaXM7Y29uc3QgZT1XbChtdSx0aGlzKS5nZXRTZXR0aW5ncygpO1l2KGFWLHRoaXMsZS5pbWVGYXN0''@;'; put 'put ''RWRpdD9OQy5NSVhFRDpOQy5DRUxMKSxXbChtdSx0aGlzKS5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBocChSNCx0LHgx''@;'; put 'put ''dCkuY2FsbCh0LC4uLmkpfSksV2wobXUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGhwKFI0LHQsRjZlKS5jYWxsKHQs''@;'; put 'put ''Li4uaSl9KSxXbChtdSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBocChSNCx0LEY2ZSkuY2FsbCh0LC4u''@;'; put 'put ''LmkpfSksV2wobXUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGhwKFI0LHQsUzF0KS5jYWxsKHQsLi4uaSl9KSxX''@;'; put 'put ''bChtdSx0aGlzKS5hZGRIb29rKCJhZnRlclJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gaHAoUjQsdCxNMXQpLmNhbGwodCwuLi5pKX0pfWdldEZvY3VzTW9kZSgp''@;'; put 'put ''e3JldHVybiBXbChhVix0aGlzKX1zZXRGb2N1c01vZGUodCl7T2JqZWN0LnZhbHVlcyhOQykuaW5jbHVkZXModCk/WXYoYVYsdGhpcyx0KTpvcyhgIiR7dH0iIGlzIG5vdCBhIHZhbGlkIGZvY3VzIG1vZGUuYCl9Z2V0UmVmb2N1c0RlbGF5KCl7cmV0dXJuIFdsKG9WLHRoaXMpfXNldFJlZm9j''@;'; put 'put ''dXNEZWxheSh0KXtZdihvVix0aGlzLHQpfXNldFJlZm9jdXNFbGVtZW50R2V0dGVyKHQpe1l2KHNWLHRoaXMsdCl9Z2V0UmVmb2N1c0VsZW1lbnQoKXt2YXIgdDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgV2woc1YsdGhpcyk/V2woc1YsdGhpcykuY2FsbCh0aGlzKTpudWxsPT09KHQ9V2wo''@;'; put 'put ''bXUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LlRFWFRBUkVBfWZvY3VzT25IaWdobGlnaHRlZENlbGwodCl7Y29uc3QgZT1yPT57dmFyIGksYTtjb25zdCBjPW51bGw9PT0oaT1XbChtdSx0aGlzKS5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lk''@;'; put 'put ''IDA9PT1pP3ZvaWQgMDppLmhpZ2hsaWdodDtpZighYylyZXR1cm47bGV0IG09V2wobXUsdGhpcykucnVuSG9va3MoIm1vZGlmeUZvY3VzZWRFbGVtZW50IixjLnJvdyxjLmNvbCxyKTtNNChtKXx8KG09ciksbSYmKG51bGw9PT0oYT1XbChtdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZv''@;'; put 'put ''aWQgMD09PWF8fCFhLmlzT3BlbmVkKCkpJiZtLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9O3Q/ZSh0KTpocChSNCx0aGlzLHd0ZSkuY2FsbCh0aGlzLHI9PmUocikpfXJlZm9jdXNUb0VkaXRvclRleHRhcmVhKCl7dmFyIHQ7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOldsKG9WLHRoaXMpO3ZhciByLGk7IVdsKG11LHRoaXMpLmdldFNldHRpbmdzKCkuaW1lRmFzdEVkaXR8fG51bGwhPT0odD1XbChtdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSkmJnZvaWQgMCE9PXQmJnQuaXNPcGVuZWQoKXx8KG51bGw9PT0ocj1X''@;'; put 'put ''bChtdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PXJ8fG51bGw9PT0oaT1yLnJlZnJlc2hWYWx1ZSl8fHZvaWQgMD09PWl8fGkuY2FsbChyKSxXbChsVix0aGlzKS5oYXMoZSl8fFdsKGxWLHRoaXMpLnNldChlLHRrKCgpPT57dmFyIGE7V2wobXUsdGhpcykuaXNEZXN0cm95''@;'; put 'put ''ZWR8fG51bGw9PT0oYT10aGlzLmdldFJlZm9jdXNFbGVtZW50KCkpfHx2b2lkIDA9PT1hfHxhLnNlbGVjdCgpfSxlKSksV2wobFYsdGhpcykuZ2V0KGUpKCkpfX1mdW5jdGlvbiB3dGUobil7dmFyIHQ7Y29uc3QgZT1udWxsPT09KHQ9V2wobXUsdGhpcykuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2''@;'; put 'put ''ZSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oaWdobGlnaHQ7aWYoIWV8fCFXbChtdSx0aGlzKS5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShlKSlyZXR1cm4gdm9pZCBuKG51bGwpO2NvbnN0IHI9V2wobXUsdGhpcykuZ2V0Q2VsbChlLnJvdyxlLmNvbCwhMCk7bnVsbD09PXI/V2wobXUsdGhp''@;'; put 'put ''cykuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIiwoKT0+e24oV2wobXUsdGhpcykuZ2V0Q2VsbChlLnJvdyxlLmNvbCwhMCkpfSk6bihyKX1mdW5jdGlvbiBDMXQoKXtocChSNCx0aGlzLHd0ZSkuY2FsbCh0aGlzLG49Pntjb25zdHthY3RpdmVFbGVtZW50OnR9PVdsKG11LHRoaXMpLnJvb3RE''@;'; put 'put ''b2N1bWVudDt0JiZ1Tih0KSYmdC5ibHVyKCksdGhpcy5mb2N1c09uSGlnaGxpZ2h0ZWRDZWxsKG4pfSl9ZnVuY3Rpb24gUzF0KCl7aHAoUjQsdGhpcyx3dGUpLmNhbGwodGhpcyxuPT57dGhpcy5nZXRGb2N1c01vZGUoKT09PU5DLk1JWEVEJiYiVEQiPT09bj8ubm9kZU5hbWUmJnRoaXMucmVm''@;'; put 'put ''b2N1c1RvRWRpdG9yVGV4dGFyZWEoKX0pfWZ1bmN0aW9uIEY2ZSgpe1l2KGNWLHRoaXMsITApfWZ1bmN0aW9uIE0xdCgpe1dsKGNWLHRoaXMpJiYoWXYoY1YsdGhpcywhMSksaHAoUjQsdGhpcyxDMXQpLmNhbGwodGhpcykpfWZ1bmN0aW9uIHgxdChuKXsiYm9vbGVhbiI9PXR5cGVvZiBuLmlt''@;'; put 'put ''ZUZhc3RFZGl0JiZ0aGlzLnNldEZvY3VzTW9kZShuLmltZUZhc3RFZGl0P05DLk1JWEVEOk5DLkNFTEwpfWNvbnN0IEUxdD1PYmplY3QuZnJlZXplKHtJTkxJTkU6ImlubGluZSIsTU9EQUw6Im1vZGFsIn0pLEd2PU9iamVjdC5mcmVlemUoe1VOS05PV046InVua25vd24iLENMSUNLOiJjbGlj''@;'; put 'put ''ayIsVEFCX0ZST01fQUJPVkU6InRhYl9mcm9tX2Fib3ZlIixUQUJfRlJPTV9CRUxPVzoidGFiX2Zyb21fYmVsb3cifSk7ZnVuY3Rpb24gSDZlKG4sdCl7Y29uc3Qgcj1uLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiByLnR5cGU9InRleHQiLHIubmFtZT0iaHRG''@;'; put 'put ''b2N1c0NhdGNoZXIiLHIuY2xhc3NMaXN0LmFkZCgiaHRGb2N1c0NhdGNoZXIiKSxyLmRhdGFzZXQuaHRGb2N1c1NvdXJjZT10LG4uZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmWmEocixbVDIoIkZvY3VzIGNhdGNoZXIiKV0pLHJ9ZnVuY3Rpb24gSTF0KG4pe2NvbnN0IHQ9bmsoe2Vycm9ySWRF''@;'; put 'put ''eGlzdHM6QWU9PmBUaGUgIiR7QWV9IiBmb2N1cyBzY29wZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pLGU9bi5nZXRTaG9ydGN1dE1hbmFnZXIoKTtsZXQgcj1udWxsO2Z1bmN0aW9uIFAoQWUpe2xldCBIZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06R3YuVU5LTk9XTjtyIT09QWUmJihudWxsIT09ciYmWShyKSxyPUFlLHIuYWN0aXZhdGUoSGUpLGUuc2V0QWN0aXZlQ29udGV4dE5hbWUoQWUuZ2V0U2hvcnRjdXRzQ29udGV4dE5hbWUoKSkpfWZ1bmN0aW9uIFkoQWUpe0ooKSxyPT09QWUmJihyPW51bGwsQWUuZGVhY3RpdmF0''@;'; put 'put ''ZSgpKX1mdW5jdGlvbiBKKCl7Y29uc3QgQWU9dC5nZXRWYWx1ZXMoKSxIZT1BZS5maWx0ZXIoWGU9PlhlLnJ1bk9ubHlJZigpJiYibW9kYWwiPT09WGUuZ2V0VHlwZSgpKTtBZS5mb3JFYWNoKFhlPT57SGUubGVuZ3RoPjAmJkhlLmluY2x1ZGVzKFhlKXx8MD09PUhlLmxlbmd0aHx8WGUuaGFz''@;'; put 'put ''Q29udGFpbmVyRGV0YWNoZWQoKT9YZS5lbmFibGUoKTpYZS5kaXNhYmxlKCksWGU9PT1yP1hlLmNvbnRhaW5zKG4ucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQpP1hlLmRlYWN0aXZhdGVGb2N1c0NhdGNoZXJzKCk6WGUuYWN0aXZhdGVGb2N1c0NhdGNoZXJzKCk6WGUucnVuT25seUlmKCk/''@;'; put 'put ''WGUuYWN0aXZhdGVGb2N1c0NhdGNoZXJzKCk6WGUuZGVhY3RpdmF0ZUZvY3VzQ2F0Y2hlcnMoKX0pfWZ1bmN0aW9uIGNlKEFlLEhlKXtpZighQWUuaXNDb25uZWN0ZWR8fCFlOChBZSkpcmV0dXJuO2NvbnN0IFhlPXQuZ2V0VmFsdWVzKCkuZmlsdGVyKGR0PT5kdC5ydW5Pbmx5SWYoKSk7bGV0''@;'; put 'put ''IHJ0PSExO1hlLmZvckVhY2goZHQ9PnshcnQmJmR0LmNvbnRhaW5zKEFlKSYmKHJ0PSEwLEhlIT09R3YuVU5LTk9XTiYmbi5saXN0ZW4oKSxQKGR0LEhlKSl9KSwhcnQmJnImJihZKHIpLG4udW5saXN0ZW4oKSl9Y29uc3QgZmU9ZnVuY3Rpb24gRDF0KG4pe2xldCB0PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxlPSExO2Z1bmN0aW9uIHIoWSl7dmFyIEo7ZXx8bnVsbD09PShKPXQub25Gb2N1cyl8fHZvaWQgMD09PUp8fEouY2FsbCh0LFkpfWZ1bmN0aW9uIGkoWSl7dmFyIEo7bnVsbD09PShKPXQub25DbGljayl8fHZvaWQg''@;'; put 'put ''MD09PUp8fEouY2FsbCh0LFkpfWZ1bmN0aW9uIGEoWSl7dmFyIEo7IlRhYiI9PT1ZLmtleSYmKG51bGw9PT0oSj10Lm9uVGFiS2V5RG93bil8fHZvaWQgMD09PUp8fEouY2FsbCh0LFkpKX1mdW5jdGlvbiBjKCl7ZT0hMH1mdW5jdGlvbiBtKCl7ZT0hMX1yZXR1cm57bW91bnQ6KCk9PntsZXQg''@;'; put 'put ''WT1uO2Zvcig7WTspe2NvbnN0e2RvY3VtZW50RWxlbWVudDpKfT1ZLmRvY3VtZW50O0ouYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsciksSi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsaSksSi5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixhKSxKLmFkZEV2ZW50TGlzdGVuZXIoIm1v''@;'; put 'put ''dXNlZG93biIsYyksSi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixtKSxZPWc1KFkpfX0sdW5tb3VudDooKT0+e2xldCBZPW47Zm9yKDtZOyl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Okp9PVkuZG9jdW1lbnQ7Si5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIixyKSxKLnJlbW92ZUV2''@;'; put 'put ''ZW50TGlzdGVuZXIoImNsaWNrIixpKSxKLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGEpLEoucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixjKSxKLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG0pLFk9ZzUoWSl9fX19KG4ucm9vdFdpbmRvdyx7b25Gb2N1czpB''@;'; put 'put ''ZT0+e3ZhciBIZTtjZShBZS50YXJnZXQsbnVsbCE9PShIZT1BZS50YXJnZXQuZGF0YXNldC5odEZvY3VzU291cmNlKSYmdm9pZCAwIT09SGU/SGU6R3YuVU5LTk9XTil9LG9uQ2xpY2s6QWU9PntjZShBZS50YXJnZXQsR3YuQ0xJQ0spfSxvblRhYktleURvd246KCk9PntKKCl9fSk7cmV0dXJu''@;'; put 'put ''IGZlLm1vdW50KCkse2dldEFjdGl2ZVNjb3BlSWQ6ZnVuY3Rpb24gaSgpe3JldHVybiByP3QuZ2V0SWQocik6bnVsbH0scmVnaXN0ZXJTY29wZTpmdW5jdGlvbiBhKEFlLEhlKXtsZXQgWGU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9''@;'; put 'put ''O2lmKHQuaGFzSXRlbShBZSkpdGhyb3cgbmV3IEVycm9yKGBTY29wZSB3aXRoIGlkICIke0FlfSIgYWxyZWFkeSByZWdpc3RlcmVkYCk7Y29uc3QgcnQ9ZnVuY3Rpb24gazF0KG4sdCl7Y29uc3Qgcj17c2hvcnRjdXRzQ29udGV4dE5hbWU6ImdyaWQiLHR5cGU6RTF0LklOTElORSxjb250YWlu''@;'; put 'put ''czpmZT0+ZmU9PT10fHx0LmNvbnRhaW5zKGZlKSxydW5Pbmx5SWY6KCk9PiEwLC4uLmFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fX0saT1mdW5jdGlvbiBBMXQobix0KXtjb25zdCBlPUg2ZShuLEd2LlRBQl9GUk9NX0FCT1ZFKSxyPUg2''@;'; put 'put ''ZShuLEd2LlRBQl9GUk9NX0JFTE9XKTtyZXR1cm4gdC5wcmVwZW5kKGUpLHQuYXBwZW5kKHIpLHthY3RpdmF0ZSgpe2UudGFiSW5kZXg9MCxyLnRhYkluZGV4PTB9LGRlYWN0aXZhdGUoKXtlLnRhYkluZGV4PS0xLHIudGFiSW5kZXg9LTF9LGRlc3Ryb3koKXtlLnJlbW92ZSgpLHIucmVtb3Zl''@;'; put 'put ''KCl9fX0obix0KTtyZXR1cm57Z2V0VHlwZTooKT0+ci50eXBlLGhhc0NvbnRhaW5lckRldGFjaGVkOigpPT4hbi5yb290V3JhcHBlckVsZW1lbnQuY29udGFpbnModCksZ2V0U2hvcnRjdXRzQ29udGV4dE5hbWU6KCk9PnIuc2hvcnRjdXRzQ29udGV4dE5hbWUscnVuT25seUlmOigpPT5yLnJ1''@;'; put 'put ''bk9ubHlJZigpLGNvbnRhaW5zOmZlPT5yLmNvbnRhaW5zKGZlKSxhY3RpdmF0ZTpmdW5jdGlvbigpe3ZhciBmZTtudWxsPT09KGZlPXIub25BY3RpdmF0ZSl8fHZvaWQgMD09PWZlfHxmZS5jYWxsKHIsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOkd2LlVOS05PV04pfSxkZWFjdGl2YXRlOigpPT57dmFyIGZlO251bGw9PT0oZmU9ci5vbkRlYWN0aXZhdGUpfHx2b2lkIDA9PT1mZXx8ZmUuY2FsbChyKX0sYWN0aXZhdGVGb2N1c0NhdGNoZXJzOigpPT57aT8uYWN0aXZhdGUoKX0sZGVhY3RpdmF0ZUZvY3VzQ2F0Y2hlcnM6KCk9Pntp''@;'; put 'put ''Py5kZWFjdGl2YXRlKCl9LGVuYWJsZTooKT0+e3QucmVtb3ZlQXR0cmlidXRlKCJpbmVydCIpfSxkaXNhYmxlOigpPT57dC5zZXRBdHRyaWJ1dGUoImluZXJ0IiwidHJ1ZSIpfSxkZXN0cm95OigpPT57aT8uZGVzdHJveSgpfX19KG4sSGUsWGUpO3QuYWRkSXRlbShBZSxydCksZS5nZXRPckNy''@;'; put 'put ''ZWF0ZUNvbnRleHQocnQuZ2V0U2hvcnRjdXRzQ29udGV4dE5hbWUoKSl9LHVucmVnaXN0ZXJTY29wZTpmdW5jdGlvbiBjKEFlKXtpZighdC5oYXNJdGVtKEFlKSl0aHJvdyBuZXcgRXJyb3IoYFNjb3BlIHdpdGggaWQgIiR7QWV9IiBub3QgZm91bmRgKTt0LmdldEl0ZW0oQWUpLmRlc3Ryb3ko''@;'; put 'put ''KSx0LnJlbW92ZUl0ZW0oQWUpfSxhY3RpdmF0ZVNjb3BlOkFlPT5mdW5jdGlvbiBtKEFlKXtpZighdC5oYXNJdGVtKEFlKSl0aHJvdyBuZXcgRXJyb3IoYFNjb3BlIHdpdGggaWQgIiR7QWV9IiBub3QgZm91bmRgKTtQKHQuZ2V0SXRlbShBZSkpfShBZSksZGVhY3RpdmF0ZVNjb3BlOkFlPT5m''@;'; put 'put ''dW5jdGlvbiBDKEFlKXtpZighdC5oYXNJdGVtKEFlKSl0aHJvdyBuZXcgRXJyb3IoYFNjb3BlIHdpdGggaWQgIiR7QWV9IiBub3QgZm91bmRgKTtZKHQuZ2V0SXRlbShBZSkpfShBZSksZGVzdHJveTooKT0+ZmUudW5tb3VudCgpfX1mdW5jdGlvbiBDdGUobil7Y29uc3R7cm93SW5kZXhNYXBw''@;'; put 'put ''ZXI6dCxjb2x1bW5JbmRleE1hcHBlcjplfT1uLHtuYXZpZ2FibGVIZWFkZXJzOnJ9PW4uZ2V0U2V0dGluZ3MoKTtsZXQgaT1yJiZuLmNvdW50Q29sSGVhZGVycygpPjA/LW4uY291bnRDb2xIZWFkZXJzKCk6MCxhPXImJm4uY291bnRSb3dIZWFkZXJzKCk+MD8tbi5jb3VudFJvd0hlYWRlcnMo''@;'; put 'put ''KTowO3JldHVybiAwPT09aSYmKGk9dC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGkpKSwwPT09YSYmKGE9ZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpKSxudWxsPT09aXx8bnVsbD09PWE/bnVsbDpuLl9jcmVhdGVDZWxsQ29vcmRzKGksYSl9ZnVuY3Rpb24gU3RlKG4p''@;'; put 'put ''e3ZhciB0LGU7Y29uc3R7cm93SW5kZXhNYXBwZXI6cixjb2x1bW5JbmRleE1hcHBlcjppfT1uLHtuYXZpZ2FibGVIZWFkZXJzOmF9PW4uZ2V0U2V0dGluZ3MoKTtsZXQgYz1yLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktMSxtPWkuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0x''@;'; put 'put ''O2lmKGM8MCl7aWYoIWF8fDA9PT1uLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO2M9LTF9aWYobTwwKXtpZighYXx8MD09PW4uY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7bT0tMX1yZXR1cm4gbi5fY3JlYXRlQ2VsbENvb3JkcyhudWxsIT09KHQ9ci5nZXRWaXN1YWxGcm9t''@;'; put 'put ''UmVuZGVyYWJsZUluZGV4KGMpKSYmdm9pZCAwIT09dD90OmMsbnVsbCE9PShlPWkuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChtKSkmJnZvaWQgMCE9PWU/ZTptKX1jb25zdCBUaz0iZ3JpZERlZmF1bHQiLHVWPSJncmlkLnRhYk5hdmlnYXRpb24iLGM4PSJlZGl0b3JNYW5hZ2VyLmhh''@;'; put 'put ''bmRsaW5nRWRpdG9yIjtmdW5jdGlvbiBPMXQobil7dmFyIHQ7Y29uc3QgZT1mdW5jdGlvbiBSMXQobil7cmV0dXJuIHQ9PntpZighdClyZXR1cm4gbnVsbDtjb25zdHtyb3dJbmRleE1hcHBlcjplLGNvbHVtbkluZGV4TWFwcGVyOnJ9PW47aWYoZS5pc0hpZGRlbih0LnJvdyl8fHIuaXNIaWRk''@;'; put 'put ''ZW4odC5jb2wpKXJldHVybiBudWxsO2NvbnN0IGk9Q3RlKG4pLGE9U3RlKG4pO3JldHVybiBudWxsPT09aXx8bnVsbD09PWE/bnVsbDoodC5yb3c9Z3ModC5yb3csaS5yb3csYS5yb3cpLHQuY29sPWdzKHQuY29sLGkuY29sLGEuY29sKSx0KX19KG4pLHI9e3dyYXBwZWQ6ITEsZmxpcHBlZDoh''@;'; put 'put ''MX07bGV0IGksYT0hMCxjPSExO24uYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT57dmFyIFA7YSYmKGk9bnVsbD09PShQPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09UD92b2lkIDA6UC5oaWdobGlnaHQpfSksbi5hZGRIb29rKCJiZWZvcmVSb3dXcmFwIiwoUCxZ''@;'; put 'put ''LEopPT57ci53cmFwcGVkPSEwLHIuZmxpcHBlZD1KfSksbi5hZGRIb29rKCJiZWZvcmVFbXB0eURhdGFTdGF0ZVNob3ciLCgpPT57Yz0hMH0pLG4uYWRkSG9vaygiYmVmb3JlRW1wdHlEYXRhU3RhdGVIaWRlIiwoKT0+e2M9ITF9KSxuLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQo''@;'; put 'put ''ImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsc3RvcFByb3BhZ2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDpUayxncm91cDp1Vixwb3NpdGlvbjoiYmVmb3JlIixjYWxsYmFjaygpe2NvbnN0e3RhYk5hdmlnYXRp''@;'; put 'put ''b246UH09bi5nZXRTZXR0aW5ncygpO24uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpJiYhUCYmKGE9ITEpfX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEscmVsYXRpdmVUb0dyb3VwOlRrLGdyb3VwOnVWLGNhbGxi''@;'; put 'put ''YWNrKFApe2NvbnN0e3RhYk5hdmlnYXRpb246WSxhdXRvV3JhcFJvdzpKfT1uLmdldFNldHRpbmdzKCk7YT0hMCwoIVl8fCFuLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCl8fEomJnIud3JhcHBlZCYmci5mbGlwcGVkfHwhSiYmci53cmFwcGVkKSYmKEomJnIud3JhcHBlZCYmci5mbGlwcGVkJiYo''@;'; put 'put ''aT1QLnNoaWZ0S2V5P0N0ZShuKTpTdGUobikpLHIud3JhcHBlZD0hMSxyLmZsaXBwZWQ9ITEpfSxwb3NpdGlvbjoiYWZ0ZXIifV0pO2NvbnN0IEM9bnVsbCE9PSh0PW4ucm9vdEdyaWRFbGVtZW50KSYmdm9pZCAwIT09dD90Om4ucm9vdEVsZW1lbnQ7bi5nZXRGb2N1c1Njb3BlTWFuYWdlcigp''@;'; put 'put ''LnJlZ2lzdGVyU2NvcGUoImdyaWQiLEMse2NvbnRhaW5zOlA9PiEoQyE9PVAmJiFDLmNvbnRhaW5zKFApKXx8bnVsbD09PVAuY2xvc2VzdCgiLmh0TWVudSIpJiZuLnJvb3RQb3J0YWxFbGVtZW50LmNvbnRhaW5zKFApLHJ1bk9ubHlJZjooKT0+e2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6UH09''@;'; put 'put ''bi5nZXRTZXR0aW5ncygpO3JldHVybiEoKGN8fCFQKSYmMD09PW4uY291bnRSZW5kZXJlZFJvd3MoKSYmMD09PW4uY291bnRSZW5kZXJlZENvbHMoKSYmbi5jb3VudFJvd0hlYWRlcnMoKT4wJiZuLmNvdW50Q29sSGVhZGVycygpPjApJiYoIVAmJm4uY291bnRSZW5kZXJlZFJvd3MoKT4wJiZu''@;'; put 'put ''LmNvdW50UmVuZGVyZWRDb2xzKCk+MHx8UCYmKG4uY291bnRSb3dIZWFkZXJzKCk+MHx8bi5jb3VudENvbEhlYWRlcnMoKT4wKSl9LG9uQWN0aXZhdGU6UD0+e2lmKCJ0YWJfZnJvbV9hYm92ZSI9PT1QKXt2YXIgWTtjb25zdCBjZT1udWxsIT09KFk9ZShpKSkmJnZvaWQgMCE9PVk/WTpDdGUo''@;'; put 'put ''bik7Y2UmJiExIT09bi5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2Fib3ZlIixjZSkmJm4uc2VsZWN0Q2VsbChjZS5yb3csY2UuY29sKX1lbHNlIGlmKCJ0YWJfZnJvbV9iZWxvdyI9PT1QKXt2YXIgSjtjb25zdCBjZT1udWxsIT09KEo9ZShpKSkmJnZvaWQg''@;'; put 'put ''MCE9PUo/SjpTdGUobik7Y2UmJiExIT09bi5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2JlbG93IixjZSkmJm4uc2VsZWN0Q2VsbChjZS5yb3csY2UuY29sKX19fSl9Y29uc3QgTjZlPW5ldyBNYXAoW1siICIsInNwYWNlIl0sWyJzcGFjZWJhciIsInNwYWNl''@;'; put 'put ''Il0sWyJzY3JvbGwiLCJzY3JvbGxsb2NrIl0sWyJkZWwiLCJkZWxldGUiXSxbImVzYyIsImVzY2FwZSJdLFsibWVkaWFuZXh0dHJhY2siLCJtZWRpYXRyYWNrbmV4dCJdLFsibWVkaWFwcmV2aW91c3RyYWNrIiwibWVkaWF0cmFja3ByZXZpb3VzIl0sWyJ2b2x1bWV1cCIsImF1ZGlvdm9sdW1l''@;'; put 'put ''dXAiXSxbInZvbHVtZWRvd24iLCJhdWRpb3ZvbHVtZWRvd24iXSxbInZvbHVtZW11dGUiLCJhdWRpb3ZvbHVtZW11dGUiXSxbIm11bHRpcGx5IiwiKiJdLFsiYWRkIiwiKyJdLFsiZGl2aWRlIiwiLyJdLFsic3VidHJhY3QiLCItIl0sWyJsZWZ0IiwiYXJyb3dsZWZ0Il0sWyJyaWdodCIsImFy''@;'; put 'put ''cm93cmlnaHQiXSxbInVwIiwiYXJyb3d1cCJdLFsiZG93biIsImFycm93ZG93biJdXSksZFY9bj0+bi5tYXAodD0+e2NvbnN0IGU9dC50b0xvd2VyQ2FzZSgpO3JldHVybiBONmUuaGFzKGUpP042ZS5nZXQoZSk6ZX0pLnNvcnQoKS5qb2luKCIrIiksVjZlPW5ldyBNYXAoW1s5NiwibnVtcGFk''@;'; put 'put ''MCJdLFs5NywibnVtcGFkMSJdLFs5OCwibnVtcGFkMiJdLFs5OSwibnVtcGFkMyJdLFsxMDAsIm51bXBhZDQiXSxbMTAxLCJudW1wYWQ1Il0sWzEwMiwibnVtcGFkNiJdLFsxMDMsIm51bXBhZDciXSxbMTA0LCJudW1wYWQ4Il0sWzEwNSwibnVtcGFkOSJdLFsxMDYsIm11bHRpcGx5Il0sWzEw''@;'; put 'put ''NywiYWRkIl0sWzEwOCwiZGVjaW1hbCJdLFsxMDksInN1YnRyYWN0Il0sWzExMCwiZGVjaW1hbCJdLFsxMTEsImRpdmlkZSJdLFsxMTIsImYxIl0sWzExMywiZjIiXSxbMTE0LCJmMyJdLFsxMTUsImY0Il0sWzExNiwiZjUiXSxbMTE3LCJmNiJdLFsxMTgsImY3Il0sWzExOSwiZjgiXSxbMTIw''@;'; put 'put ''LCJmOSJdLFsxMjEsImYxMCJdLFsxMjIsImYxMSJdLFsxMjMsImYxMiJdLFsxODYsInNlbWljb2xvbiJdLFsxODcsImVxdWFsIl0sWzE4OCwiY29tbWEiXSxbMTg5LCJtaW51cyJdLFsxOTAsInBlcmlvZCJdLFsxOTEsInNsYXNoIl0sWzE5MiwiYmFja3F1b3RlIl0sWzIxOSwiYnJhY2tldGxl''@;'; put 'put ''ZnQiXSxbMjIwLCJiYWNrc2xhc2giXSxbMjIxLCJicmFja2V0cmlnaHQiXSxbMjIyLCJxdW90ZSJdXSkseHRlPW49PntsZXR7d2hpY2g6dCxrZXk6ZX09bjtpZihWNmUuaGFzKHQpKXJldHVybiBWNmUuZ2V0KHQpO2NvbnN0IHI9U3RyaW5nLmZyb21DaGFyQ29kZSh0KS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''O3JldHVybi9eW2EtejAtOV0kLy50ZXN0KHIpP3I6ZS50b0xvd2VyQ2FzZSgpfSxCNmU9U3ltYm9sKCJzaG9ydGN1dC1jb250ZXh0Iik7ZnVuY3Rpb24gRXRlKG4pe3JldHVybiBobyhuKSYmbi5fX2tpbmRPZj09PUI2ZX1jb25zdCBWMXQ9WyJtZXRhIiwiYWx0Iiwic2hpZnQiLCJjb250cm9s''@;'; put 'put ''Il0sQWs9ZnVuY3Rpb24gTjF0KCl7Y29uc3Qgbj1uZXcgU2V0O3JldHVybntwcmVzcyh0KXtuLmFkZCh0KX0scmVsZWFzZSh0KXtuLmRlbGV0ZSh0KX0scmVsZWFzZUFsbCgpe24uY2xlYXIoKX0saXNQcmVzc2VkOnQ9Pm4uaGFzKHQpfX0oKSxraz1bXTtsZXQgaFY9MDtjb25zdCB6MXQ9e25h''@;'; put 'put ''bWU6ImVkaXRvckNsb3NlQW5kU2F2ZSIsY2FsbGJhY2sobil7bi5fZ2V0RWRpdG9yTWFuYWdlcigpLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKX19LGo2ZT17X2hvb2tzU3RvcmFnZTpPYmplY3QuY3JlYXRlKG51bGwpLGFkZEhvb2sobix0KXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdl''@;'; put 'put ''W25dfHwodGhpcy5faG9va3NTdG9yYWdlW25dPVtdKSx0aGlzLmhvdC5hZGRIb29rKG4sdCksdGhpcy5faG9va3NTdG9yYWdlW25dLnB1c2godCksdGhpc30scmVtb3ZlSG9va3NCeUtleShuKXtZbih0aGlzLl9ob29rc1N0b3JhZ2Vbbl18fFtdLHQ9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKG4s''@;'; put 'put ''dCl9KX0sY2xlYXJIb29rcygpe2FzKHRoaXMuX2hvb2tzU3RvcmFnZSwobix0KT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KHQpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTt3NChqNmUsIk1JWElOX05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiEx''@;'; put 'put ''fSk7Y29uc3QgVzF0PWo2ZTtmdW5jdGlvbiBmcChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gWjF0KG4pe3ZhciB0PWZ1bmN0aW9uIFkxdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3Zh''@;'; put 'put ''ciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0o''@;'; put 'put ''biwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgdnU9T2JqZWN0LmZyZWV6ZSh7''@;'; put 'put ''VklSR0lOOiJTVEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRFX0VESVRJTkciLFdBSVRJTkc6IlNUQVRFX1dBSVRJTkciLEZJTklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KTtjbGFzcyBWQ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKHQpe2ZwKHRo''@;'; put 'put ''aXMsImhvdCIsdm9pZCAwKSxmcCh0aGlzLCJzdGF0ZSIsdnUuVklSR0lOKSxmcCh0aGlzLCJfb3BlbmVkIiwhMSksZnAodGhpcywiX2Z1bGxFZGl0TW9kZSIsITEpLGZwKHRoaXMsIl9jbG9zZUNhbGxiYWNrIixudWxsKSxmcCh0aGlzLCJURCIsbnVsbCksZnAodGhpcywicm93IixudWxsKSxm''@;'; put 'put ''cCh0aGlzLCJjb2wiLG51bGwpLGZwKHRoaXMsInByb3AiLG51bGwpLGZwKHRoaXMsIm9yaWdpbmFsVmFsdWUiLG51bGwpLGZwKHRoaXMsImNlbGxQcm9wZXJ0aWVzIixudWxsKSx0aGlzLmhvdD10LHRoaXMuaW5pdCgpfV9maXJlQ2FsbGJhY2tzKHQpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0''@;'; put 'put ''aGlzLl9jbG9zZUNhbGxiYWNrKHQpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1l''@;'; put 'put ''dGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1wcmVwYXJlKHQsZSxyLGksYSxjKXt0aGlzLlRE''@;'; put 'put ''PWksdGhpcy5yb3c9dCx0aGlzLmNvbD1lLHRoaXMucHJvcD1yLHRoaXMub3JpZ2luYWxWYWx1ZT1hLHRoaXMuY2VsbFByb3BlcnRpZXM9Yyx0aGlzLnN0YXRlPXRoaXMuaXNPcGVuZWQoKT90aGlzLnN0YXRlOnZ1LlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0aGlzLmNv''@;'; put 'put ''bnN0cnVjdG9ye319c2F2ZVZhbHVlKHQsZSl7bGV0IHIsaSxhLGM7aWYoZSl7Y29uc3QgQz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksUD1DLmdldFRvcFN0YXJ0Q29ybmVyKCksWT1DLmdldEJvdHRvbUVuZENvcm5lcigpO3I9UC5yb3csaT1QLmNvbCxhPVkucm93LGM9WS5j''@;'; put 'put ''b2x9ZWxzZVtyLGksYSxjXT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBtPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixyLGksITEsIm1ldGEiKTtBcnJheS5pc0FycmF5KG0pJiYoW3IsaV09bSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXko''@;'; put 'put ''cixpLHQsYSxjLCJlZGl0Iil9YmVnaW5FZGl0aW5nKHQsZSl7aWYodGhpcy5zdGF0ZSE9PXZ1LlZJUkdJTilyZXR1cm47Y29uc3Qgcj10aGlzLmhvdCxpPXIucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksYT1yLmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLGM9KCk9PntpZih0aGlzLnN0YXRlPXZ1LkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IEM9dGhpcy5jZWxsUHJvcGVydGllcy52YWx1ZUdldHRlcj90aGlzLmNlbGxQcm9wZXJ0aWVzLnZhbHVlR2V0''@;'; put 'put ''dGVyKHRoaXMub3JpZ2luYWxWYWx1ZSk6dGhpcy5vcmlnaW5hbFZhbHVlLFA9InN0cmluZyI9PXR5cGVvZiB0P3Q6cWwoQyk7dGhpcy5zZXRWYWx1ZShQKX10aGlzLm9wZW4oZSksdGhpcy5fb3BlbmVkPSEwLHRoaXMuZm9jdXMoKSxyLnZpZXcucmVuZGVyKCksci5ydW5Ib29rcygiYWZ0ZXJC''@;'; put 'put ''ZWdpbkVkaXRpbmciLHRoaXMucm93LHRoaXMuY29sKX07dGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIixjKSxyLnZpZXcuc2Nyb2xsVmlld3BvcnQoci5fY3JlYXRlQ2VsbENvb3JkcyhpLGEpKXx8KHRoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsIixjKSxjKCkpLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlRGlhbG9nU2hvdyIsKCk9PnRoaXMuY2FuY2VsQ2hhbmdlcygpKX1maW5pc2hFZGl0aW5nKHQsZSxyKXtsZXQgaTtpZihyKXtjb25zdCBhPXRoaXMuX2Nsb3NlQ2FsbGJhY2s7dGhpcy5fY2xvc2VDYWxsYmFjaz1jPT57YSYmYShjKSxyKGMpLHRoaXMuaG90LnZp''@;'; put 'put ''ZXcucmVuZGVyKCl9fWlmKCF0aGlzLmlzV2FpdGluZygpKXtpZih0aGlzLnN0YXRlPT09dnUuVklSR0lOKXJldHVybiB2b2lkIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKX0pO2lmKHRoaXMuc3RhdGU9PT12dS5FRElUSU5HKXtpZih0KXJl''@;'; put 'put ''dHVybiB0aGlzLmNhbmNlbENoYW5nZXMoKSx2b2lkIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7Y29uc3QgYT10aGlzLmdldFZhbHVlKCk7aT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1XaGl0ZXNwYWNlP1tbInN0cmluZyI9PXR5cGVvZiBhP1N0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKGF8''@;'; put 'put ''fCIiKTphXV06W1thXV0sdGhpcy5zdGF0ZT12dS5XQUlUSU5HLHRoaXMuc2F2ZVZhbHVlKGksZSksdGhpcy5ob3QuZ2V0Q2VsbFZhbGlkYXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLGM9Pnt0aGlzLnN0YXRlPXZ1LkZJ''@;'; put 'put ''TklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcihjKX0pOih0aGlzLnN0YXRlPXZ1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcighMCkpfX19Y2FuY2VsQ2hhbmdlcygpe3RoaXMuc3RhdGU9dnUuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCl9ZGlzY2FyZEVkaXRvcih0KXt0aGlzLnN0''@;'; put 'put ''YXRlPT09dnUuRklOSVNIRUQmJighMT09PXQmJiEwIT09dGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQ/KHRoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPXZ1LkVESVRJTkcsdGhpcy5fZmlyZUNhbGxiYWNrcyghMSkp''@;'; put 'put ''Oih0aGlzLmNsb3NlKCksdGhpcy5fb3BlbmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9kZT0hMSx0aGlzLnN0YXRlPXZ1LlZJUkdJTix0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpKSl9ZW5hYmxl''@;'; put 'put ''RnVsbEVkaXRNb2RlKCl7dGhpcy5fZnVsbEVkaXRNb2RlPSEwfWlzSW5GdWxsRWRpdE1vZGUoKXtyZXR1cm4gdGhpcy5fZnVsbEVkaXRNb2RlfWlzT3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1pc1dhaXRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0ZT09PXZ1LldBSVRJTkd9Z2V0RWRpdGVk''@;'; put 'put ''Q2VsbFJlY3QoKXt2YXIgdDtjb25zdCBlPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpO2lmKCFlKXJldHVybjtjb25zdHt3dE92ZXJsYXlzOnIsd3RWaWV3cG9ydDppfT10aGlzLmhvdC52aWV3Ll93dCxhPXRoaXMuaG90LnJvb3RXaW5kb3csYz1FMShlKSxtPXB1KGUpLEM9RTEodGhpcy5ob3Qucm9v''@;'; put 'put ''dEVsZW1lbnQpLFA9cHUodGhpcy5ob3Qucm9vdEVsZW1lbnQpLFk9ci50b3BPdmVybGF5LmhvbGRlcixKPXIuaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcixjZT1ZIT09YT9ZLnNjcm9sbFRvcDowLGZlPUohPT1hP0ouc2Nyb2xsTGVmdDowLEFlPWEuaW5uZXJXaWR0aC1DLmxlZnQtUCx7d3RU''@;'; put 'put ''YWJsZTpIZX09bnVsbCE9PSh0PXIuZ2V0UGFyZW50T3ZlcmxheShlKSkmJnZvaWQgMCE9PXQ/dDp0aGlzLmhvdC52aWV3Ll93dCxYZT1IZS5uYW1lLHJ0PVsibWFzdGVyIiwiaW5saW5lX3N0YXJ0Il0uaW5jbHVkZXMoWGUpP2NlOjAsZHQ9WyJtYXN0ZXIiLCJ0b3AiLCJib3R0b20iXS5pbmNs''@;'; put 'put ''dWRlcyhYZSk/ZmU6MDtsZXQgRnQ9Yy50b3AtQy50b3AtKGMudG9wPT09Qy50b3A/MDoxKS1ydCxwbj0wO3BuPXRoaXMuaG90LmlzUnRsKCk/YS5pbm5lcldpZHRoLWMubGVmdC1tLUFlLTErZHQ6Yy5sZWZ0LUMubGVmdC0xLWR0LFsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5p''@;'; put 'put ''bmNsdWRlcyhYZSkmJihGdCs9ci50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKFhlKSYmKHBuKz1NYXRoLmFicyhyLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpKTtj''@;'; put 'put ''b25zdCBvbj10aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCksZ249dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksWm49dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNv''@;'; put 'put ''bCksRXI9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTsob24mJmduPD0wfHxnbj09PUVyKSYmKEZ0Kz0xKSxabjw9MCYmKHBuKz0xKTtjb25zdCBUcj1pLnJv''@;'; put 'put ''d3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24saXI9aS5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLHBpPU1hdGguYWJzKHIuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkpLERuPXIudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigp''@;'; put 'put ''LEFyPWd1KHRoaXMuaG90LnJvb3REb2N1bWVudCk7bGV0IGVyPWUub2Zmc2V0VG9wO2lmKFsiaW5saW5lX3N0YXJ0IiwibWFzdGVyIl0uaW5jbHVkZXMoWGUpJiYoZXIrPVRyLURuKSxbImJvdHRvbSIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoWGUpKXtjb25zdHt3''@;'; put 'put ''dFZpZXdwb3J0OkVuLHd0VGFibGU6YXJ9PXIuYm90dG9tT3ZlcmxheS5jbG9uZTtlcis9RW4uZ2V0V29ya3NwYWNlSGVpZ2h0KCktYXIuZ2V0SGVpZ2h0KCktQXJ9bGV0IERyPWUub2Zmc2V0TGVmdDt0aGlzLmhvdC5pc1J0bCgpPyhEcj1Ecj49MD9IZS5nZXRXaWR0aCgpLWUub2Zmc2V0TGVm''@;'; put 'put ''dDpNYXRoLmFicyhEciksRHIrPWlyLXBpLW0pOlsidG9wIiwibWFzdGVyIiwiYm90dG9tIl0uaW5jbHVkZXMoWGUpJiYoRHIrPWlyLXBpKTtjb25zdCBacj1hLmdldENvbXB1dGVkU3R5bGUodGhpcy5URCksYmk9dGhpcy5ob3QuaXNSdGwoKT8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxl''@;'; put 'put ''ZnRXaWR0aCIsU2k9cGFyc2VJbnQoWnJbYmldLDEwKT4wPzA6MSxqcj1wYXJzZUludChaci5ib3JkZXJUb3BXaWR0aCwxMCk+MD8wOjEsVGk9cHUoZSkrU2ksbGE9SHUoZSkranIsRnI9Y0ooWSk/QXI6MCxvdD11SihKKT9BcjowLEl0PXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVt''@;'; put 'put ''ZW50V2lkdGgoRHIpLUZyK1NpO3JldHVybnt0b3A6RnQsc3RhcnQ6cG4saGVpZ2h0OmxhLG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChlciktb3QranIsdGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0''@;'; put 'put ''KCkpLHdpZHRoOlRpLG1heFdpZHRoOkl0fX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJl''@;'; put 'put ''dHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2UidG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRv''@;'; put 'put ''cC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRDZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhp''@;'; put 'put ''cy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IHQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGU9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2U9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5m''@;'; put 'put ''aXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49dC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbT9lPXRoaXMuY29sPHRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoZT0iaW5saW5lLXN0YXJ0IiksZX19cGwoVkMsVzF0KTtjb25zdCAkMXQ9e25hbWU6''@;'; put 'put ''ImVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzIixjYWxsYmFjayhuLHQsZSl7Y29uc3Qgcj1uLl9nZXRFZGl0b3JNYW5hZ2VyKCksaT1yLmdldEFjdGl2ZUVkaXRvcigpO2kuaXNJbkZ1bGxFZGl0TW9kZSgpJiZpLnN0YXRlPT09dnUuRURJVElOR3x8KHIuY2xvc2VFZGl0b3JBbmRTYXZl''@;'; put 'put ''Q2hhbmdlcygpLG4uZ2V0U2VsZWN0ZWQoKSYmKGUuaW5jbHVkZXMoImFycm93ZG93biIpP24uc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCk6ZS5pbmNsdWRlcygiYXJyb3d1cCIpP24uc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApOmUuaW5jbHVkZXMoImFycm93bGVmdCIpP24u''@;'; put 'put ''c2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqbi5nZXREaXJlY3Rpb25GYWN0b3IoKSk6ZS5pbmNsdWRlcygiYXJyb3dyaWdodCIpJiZuLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLG4uZ2V0RGlyZWN0aW9uRmFjdG9yKCkpKSx0LnByZXZlbnREZWZhdWx0KCkpfX0sSzF0PXtuYW1l''@;'; put 'put ''OiJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIixjYWxsYmFjayhuLHQpe2NvbnN0IGU9bi5fZ2V0RWRpdG9yTWFuYWdlcigpO2UuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyh0LmN0cmxLZXl8fHQubWV0YUtleSksZS5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcih0KX19LFgxdD17bmFtZToi''@;'; put 'put ''ZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nIixjYWxsYmFjayhuKXtjb25zdCB0PW4uX2dldEVkaXRvck1hbmFnZXIoKTt0LmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobi5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpLHQuYWN0aXZlRWRpdG9yLmZvY3Vz''@;'; put 'put ''KCl9fSxxMXQ9e25hbWU6ImVkaXRvckZhc3RPcGVuIixjYWxsYmFjayhuLHQpe2NvbnN0e2hpZ2hsaWdodDplfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtlLmlzSGVhZGVyKCl8fG4uX2dldEVkaXRvck1hbmFnZXIoKS5vcGVuRWRpdG9yKG51bGwsdCwhMCl9fSxKMXQ9e25hbWU6ImVk''@;'; put 'put ''aXRvck9wZW4iLGNhbGxiYWNrKG4sdCxlKXtjb25zdHtzZWxlY3Rpb246cn09bixpPW4uX2dldEVkaXRvck1hbmFnZXIoKSxhPW4uZ2V0U2VsZWN0ZWRSYW5nZSgpLGM9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkse2hpZ2hsaWdodDptfT1jO2lmKChhLnNvbWUoQz0+ci5pc011bHRpcGxl''@;'; put 'put ''KEMpKXx8YS5sZW5ndGg+MSkmJiFjLmlzSGVhZGVyKCkmJm4uY291bnRSZW5kZXJlZENvbHMoKT4wJiZuLmNvdW50UmVuZGVyZWRSb3dzKCk+MCl7Y29uc3QgQz1uLmdldFNldHRpbmdzKCksUD0iZnVuY3Rpb24iPT10eXBlb2YgQy5lbnRlck1vdmVzP0MuZW50ZXJNb3Zlcyh0KTpDLmVudGVy''@;'; put 'put ''TW92ZXM7ZS5pbmNsdWRlcygic2hpZnQiKT9yLnRyYW5zZm9ybUZvY3VzKC1QLnJvdywtUC5jb2wpOnIudHJhbnNmb3JtRm9jdXMoUC5yb3csUC5jb2wpfWVsc2UgbS5pc0hlYWRlcigpfHwobi5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZz9pLmNlbGxQcm9wZXJ0aWVzLnJlYWRP''@;'; put 'put ''bmx5P2kubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIodCk6aS5vcGVuRWRpdG9yKG51bGwsdCwhMCk6aS5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcih0KSxBMih0KSl9fSxlZHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93biIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOnR9PW4s''@;'; put 'put ''e2hpZ2hsaWdodDplfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTshdC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXQuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihlLmlzQ2VsbCgpfHxlLmlzSGVhZGVyKCkmJnQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpJiYodC5tYXJrU291cmNl''@;'; put 'put ''KCJrZXlib2FyZCIpLHQudHJhbnNmb3JtRW5kKDEsMCksdC5tYXJrRW5kU291cmNlKCkpfX0sdGR0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dCxyb3dJbmRleE1hcHBlcjplfT1uLHt0bzpyfT1u''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxpPU1hdGgubWluKHIucm93K24uY291bnRWaXNpYmxlUm93cygpLG4uY291bnRSb3dzKCktMSksYT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChpLC0xKTtpZihudWxsIT09YSl7Y29uc3QgYz1uLl9jcmVhdGVDZWxsQ29vcmRzKGEsci5jb2wp''@;'; put 'put ''LG09ci5yb3ctbi5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEM9TWF0aC5taW4oYy5yb3ctbSxuLmNvdW50Um93cygpLTEpO3QubWFya1NvdXJjZSgia2V5Ym9hcmQiKSx0LnNldFJhbmdlRW5kKGMsbi5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KCkpLHQubWFya0VuZFNvdXJjZSgp''@;'; put 'put ''LG4uc2Nyb2xsVmlld3BvcnRUbyh7cm93OkMsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxuZHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOnR9PW4se2hpZ2hsaWdodDplfT1uLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VBY3RpdmUoKTshdC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXQuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihlLmlzQ2VsbCgpfHxlLmlzSGVhZGVyKCkmJnQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYodC5tYXJrU291cmNlKCJrZXlib2FyZCIpLHQudHJhbnNm''@;'; put 'put ''b3JtRW5kKDAsLTEqbi5nZXREaXJlY3Rpb25GYWN0b3IoKSksdC5tYXJrRW5kU291cmNlKCkpfX0scmR0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dH09bix7aGlnaGxpZ2h0OmV9PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2''@;'; put 'put ''ZSgpOyF0LmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhdC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGUuaXNDZWxsKCl8fGUuaXNIZWFkZXIoKSYmdC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkmJih0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC50cmFuc2Zvcm1FbmQoMCxuLmdldERp''@;'; put 'put ''cmVjdGlvbkZhY3RvcigpKSx0Lm1hcmtFbmRTb3VyY2UoKSl9fSxpZHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zIixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dH09bix7aGlnaGxpZ2h0OmUsZnJvbTpyLHRvOml9PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgp''@;'; put 'put ''O3QubWFya1NvdXJjZSgia2V5Ym9hcmQiKSx0LmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpP3Quc2VsZWN0QWxsKCEwLCEwKTpuLnNlbGVjdENvbHVtbnMoci5jb2wsaS5jb2wsZSksdC5tYXJrRW5kU291cmNlKCl9fSxhZHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9t''@;'; put 'put ''IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dCxyb3dJbmRleE1hcHBlcjplfT1uLHtoaWdobGlnaHQ6cixmcm9tOmksdG86YX09bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYz1yLmlzSGVhZGVyKCkmJnQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoci5pc0NlbGwoKXx8Yyl7''@;'; put 'put ''Y29uc3QgbT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuLmNvdW50Um93cygpLTEsLTEpLEM9aS5jbG9uZSgpO0Mucm93PXIucm93LHQubWFya1NvdXJjZSgia2V5Ym9hcmQiKSx0LnNldFJhbmdlU3RhcnQoQyx2b2lkIDAsITEsci5jbG9uZSgpKSxjJiZ0LnNlbGVjdGVkQnlSb3dIZWFk''@;'; put 'put ''ZXIuYWRkKHQuZ2V0TGF5ZXJMZXZlbCgpKSx0LnNldFJhbmdlRW5kKG4uX2NyZWF0ZUNlbGxDb29yZHMobSxhLmNvbCkpLHQubWFya0VuZFNvdXJjZSgpfX19LG9kdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlv''@;'; put 'put ''bjp0LGNvbHVtbkluZGV4TWFwcGVyOmV9PW4se2hpZ2hsaWdodDpyLGZyb206aSx0bzphfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighdC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXQuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJnIuaXNDZWxsKCkpe2NvbnN0IGM9ZS5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgobi5jb3VudENvbHMoKS0xLC0xKSxtPWkuY2xvbmUoKTttLmNvbD1yLmNvbCx0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC5zZXRSYW5nZVN0YXJ0KG0sdm9pZCAwLCExLHIuY2xvbmUoKSksdC5zZXRSYW5nZUVuZChuLl9jcmVhdGVDZWxsQ29vcmRzKGEucm93''@;'; put 'put ''LGMpKSx0Lm1hcmtFbmRTb3VyY2UoKX19fSxzZHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjp0LGNvbHVtbkluZGV4TWFwcGVyOmV9PW4se2hpZ2hsaWdodDpyLGZyb206aSx0bzphfT1uLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VBY3RpdmUoKTtpZighdC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXQuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJnIuaXNDZWxsKCkpe2NvbnN0IGM9cGFyc2VJbnQobi5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxtPWUuZ2V0TmVhcmVzdE5vdEhpZGRlbklu''@;'; put 'put ''ZGV4KGMsMSksQz1pLmNsb25lKCk7Qy5jb2w9ci5jb2wsdC5tYXJrU291cmNlKCJrZXlib2FyZCIpLHQuc2V0UmFuZ2VTdGFydChDLHZvaWQgMCwhMSxyLmNsb25lKCkpLHQuc2V0UmFuZ2VFbmQobi5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxtKSksdC5tYXJrRW5kU291cmNlKCl9fX0sbGR0''@;'; put 'put ''PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjp0LGNvbHVtbkluZGV4TWFwcGVyOmV9PW4se2hpZ2hsaWdodDpyLGZyb206aSx0bzphfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxjPXIuaXNIZWFkZXIoKSYmdC5p''@;'; put 'put ''c1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihyLmlzQ2VsbCgpfHxjKXtjb25zdCBtPWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLm4uaXNSdGwoKT9bbi5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSksQz1pLmNsb25lKCk7Qy5jb2w9ci5jb2wsdC5tYXJrU291cmNlKCJrZXlib2Fy''@;'; put 'put ''ZCIpLHQuc2V0UmFuZ2VTdGFydChDLHZvaWQgMCwhMSxyLmNsb25lKCkpLGMmJnQuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodC5nZXRMYXllckxldmVsKCkpLHQuc2V0UmFuZ2VFbmQobi5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxtKSksdC5tYXJrRW5kU291cmNlKCl9fX0sY2R0PXtu''@;'; put 'put ''YW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dCxjb2x1bW5JbmRleE1hcHBlcjplfT1uLHtoaWdobGlnaHQ6cixmcm9tOmksdG86YX09bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYz1yLmlzSGVhZGVyKCkmJnQuaXNT''@;'; put 'put ''ZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoci5pc0NlbGwoKXx8Yyl7Y29uc3QgbT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5uLmlzUnRsKCk/WzAsMV06W24uY291bnRDb2xzKCktMSwtMV0pLEM9aS5jbG9uZSgpO0MuY29sPXIuY29sLHQubWFya1NvdXJjZSgia2V5Ym9hcmQi''@;'; put 'put ''KSx0LnNldFJhbmdlU3RhcnQoQyx2b2lkIDAsITEsci5jbG9uZSgpKSxjJiZ0LnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHQuZ2V0TGF5ZXJMZXZlbCgpKSx0LnNldFJhbmdlRW5kKG4uX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csbSkpLHQubWFya0VuZFNvdXJjZSgpfX19LHVkdD17bmFt''@;'; put 'put ''ZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjp0LHJvd0luZGV4TWFwcGVyOmV9PW4se2hpZ2hsaWdodDpyLGZyb206aSx0bzphfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxjPXIuaXNIZWFkZXIoKSYmdC5pc1NlbGVjdGVk''@;'; put 'put ''QnlSb3dIZWFkZXIoKTtpZihyLmlzQ2VsbCgpfHxjKXtjb25zdCBtPWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSksQz1pLmNsb25lKCk7Qy5yb3c9ci5yb3csdC5tYXJrU291cmNlKCJrZXlib2FyZCIpLHQuc2V0UmFuZ2VTdGFydChDLHZvaWQgMCwhMSxyLmNsb25lKCkpLGMmJnQu''@;'; put 'put ''c2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodC5nZXRMYXllckxldmVsKCkpLHQuc2V0UmFuZ2VFbmQobi5fY3JlYXRlQ2VsbENvb3JkcyhtLGEuY29sKSksdC5tYXJrRW5kU291cmNlKCl9fX0sZGR0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvUm93cyIsY2FsbGJhY2sobil7Y29uc3R7''@;'; put 'put ''c2VsZWN0aW9uOnR9PW4se2hpZ2hsaWdodDplLGZyb206cix0bzppfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTt0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKT90LnNlbGVjdEFsbCghMCwhMCk6bi5zZWxlY3RSb3dzKHIucm93LGkucm93''@;'; put 'put ''LGUpLHQubWFya0VuZFNvdXJjZSgpfX0saGR0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwIixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dH09bix7aGlnaGxpZ2h0OmV9PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpOyF0LmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYh''@;'; put 'put ''dC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGUuaXNDZWxsKCl8fGUuaXNIZWFkZXIoKSYmdC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJih0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC50cmFuc2Zvcm1FbmQoLTEsMCksdC5tYXJrRW5kU291cmNlKCkpfX0sZmR0PXtuYW1lOiJleHRlbmRD''@;'; put 'put ''ZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOnQscm93SW5kZXhNYXBwZXI6ZX09bix7dG86cn09bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksaT1NYXRoLm1heChyLnJvdy1uLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxhPWUuZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KGksMSk7aWYobnVsbCE9PWEpe2NvbnN0IGM9bi5fY3JlYXRlQ2VsbENvb3JkcyhhLHIuY29sKSxtPXIucm93LW4uZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxDPU1hdGgubWF4KGMucm93LW0sMCk7dC5tYXJrU291cmNlKCJrZXlib2FyZCIpLHQuc2V0''@;'; put 'put ''UmFuZ2VFbmQoYyxuLmdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKSksdC5tYXJrRW5kU291cmNlKCksbi5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6Qyx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LGdkdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25E''@;'; put 'put ''b3duIixjYWxsYmFjayhuKXtsZXR7c2VsZWN0aW9uOnR9PW47dC5tYXJrU291cmNlKCJrZXlib2FyZCIpLHQudHJhbnNmb3JtU3RhcnQoMSwwKSx0Lm1hcmtFbmRTb3VyY2UoKX19LG1kdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2sobil7''@;'; put 'put ''Y29uc3R7c2VsZWN0aW9uOnR9PW4se25hdmlnYWJsZUhlYWRlcnM6ZX09bi5nZXRTZXR0aW5ncygpLHI9ZT9uLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzppfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQ7bGV0IGE9bi5jb3VudFZpc2libGVSb3dzKCkrcjthPTA9PT1h''@;'; put 'put ''PzE6YSxpPT09bi5jb3VudFJvd3MoKS0xP2E9MTppK2E+bi5jb3VudFJvd3MoKSYmKGE9bi5jb3VudFJvd3MoKS1pLTEpLHQubWFya1NvdXJjZSgia2V5Ym9hcmQiKSx0LnRyYW5zZm9ybVN0YXJ0KGEsMCksdC5tYXJrRW5kU291cmNlKCksbi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGln''@;'; put 'put ''aGxpZ2h0LnJvdzwwJiZuLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSl9fSx2ZHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kIixjYWxsYmFjayhuLHQpe2NvbnN0e3NlbGVjdGlvbjplfT1uLHI9bi5nZXRTZXR0aW5ncygpLGk9bi5nZXRTZWxlY3RlZFJhbmdlKCksYT1uLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxjPSJmdW5jdGlvbiI9PXR5cGVvZiByLnRhYk1vdmVzP3IudGFiTW92ZXModCk6ci50YWJNb3ZlcztlLm1hcmtTb3VyY2UoImtleWJvYXJkIiksKGkuc29tZShtPT5lLmlzTXVsdGlwbGUobSkpfHxpLmxlbmd0aD4xKSYmIWEuaXNIZWFkZXIoKSYmbi5j''@;'; put 'put ''b3VudFJlbmRlcmVkQ29scygpPjAmJm4uY291bnRSZW5kZXJlZFJvd3MoKT4wP2UudHJhbnNmb3JtRm9jdXMoLWMucm93LC1jLmNvbCk6ZS50cmFuc2Zvcm1TdGFydCgtYy5yb3csLWMuY29sKSxlLm1hcmtFbmRTb3VyY2UoKX19LHlkdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVT''@;'; put 'put ''dGFydCIsY2FsbGJhY2sobix0KXtjb25zdHtzZWxlY3Rpb246ZX09bixyPW4uZ2V0U2V0dGluZ3MoKSxpPW4uZ2V0U2VsZWN0ZWRSYW5nZSgpLGE9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYz0iZnVuY3Rpb24iPT10eXBlb2Ygci50YWJNb3Zlcz9yLnRhYk1vdmVzKHQpOnIudGFiTW92''@;'; put 'put ''ZXM7ZS5tYXJrU291cmNlKCJrZXlib2FyZCIpLChpLnNvbWUobT0+ZS5pc011bHRpcGxlKG0pKXx8aS5sZW5ndGg+MSkmJiFhLmlzSGVhZGVyKCkmJm4uY291bnRSZW5kZXJlZENvbHMoKT4wJiZuLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9lLnRyYW5zZm9ybUZvY3VzKGMucm93LGMuY29sKTpl''@;'; put 'put ''LnRyYW5zZm9ybVN0YXJ0KGMucm93LGMuY29sKSxlLm1hcmtFbmRTb3VyY2UoKX19LF9kdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dH09bjt0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC50cmFuc2Zvcm1TdGFydCgwLC0xKm4u''@;'; put 'put ''Z2V0RGlyZWN0aW9uRmFjdG9yKCkpLHQubWFya0VuZFNvdXJjZSgpfX0sYmR0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dH09bjt0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC50cmFuc2Zvcm1TdGFydCgwLG4uZ2V0RGlyZWN0''@;'; put 'put ''aW9uRmFjdG9yKCkpLHQubWFya0VuZFNvdXJjZSgpfX0sd2R0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOnR9PW4se2NvbDplfT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQ7bGV0IHI9bi5yb3dJ''@;'; put 'put ''bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobi5jb3VudFJvd3MoKS0xLC0xKTtudWxsPT09ciYmKHI9LTEpLHQuc2V0UmFuZ2VTdGFydChuLl9jcmVhdGVDZWxsQ29vcmRzKHIsZSkpfX0sQ2R0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVu''@;'; put 'put ''ZCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOnQscm93SW5kZXhNYXBwZXI6ZSxjb2x1bW5JbmRleE1hcHBlcjpyfT1uLGk9cGFyc2VJbnQobi5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSwxMCksYT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuLmNvdW50Um93cygpLWkt''@;'; put 'put ''MSwtMSksYz1yLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuLmNvdW50Q29scygpLTEsLTEpO3QubWFya1NvdXJjZSgia2V5Ym9hcmQiKSx0LnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3JkcyhhLGMpKSx0Lm1hcmtFbmRTb3VyY2UoKX19LFNkdD17bmFtZToibW92ZUNlbGxTZWxl''@;'; put 'put ''Y3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjp0LGNvbHVtbkluZGV4TWFwcGVyOmV9PW47dC5tYXJrU291cmNlKCJrZXlib2FyZCIpLHQuc2V0UmFuZ2VTdGFydChuLl9jcmVhdGVDZWxsQ29vcmRzKG4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhp''@;'; put 'put ''Z2hsaWdodC5yb3csZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobi5jb3VudENvbHMoKS0xLC0xKSkpLHQubWFya0VuZFNvdXJjZSgpfX0sTWR0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dCxjb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlcjplfT1uLHI9cGFyc2VJbnQobi5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxpPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodC5yb3csYT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChyLDEpO3QubWFya1NvdXJjZSgia2V5Ym9hcmQi''@;'; put 'put ''KSx0LnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3JkcyhpLGEpKSx0Lm1hcmtFbmRTb3VyY2UoKX19LHhkdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dCxjb2x1bW5JbmRleE1hcHBlcjplfT1uLHI9bi5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0LnJvdztsZXQgaT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5uLmlzUnRsKCk/W24uY291bnRDb2xzKCktMSwtMV06WzAsMV0pO251bGw9PT1pJiYoaT1uLmlzUnRsKCk/LTE6LW4uY291bnRSb3dIZWFkZXJzKCkpLHQubWFya1Nv''@;'; put 'put ''dXJjZSgia2V5Ym9hcmQiKSx0LnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3JkcyhyLGkpKSx0Lm1hcmtFbmRTb3VyY2UoKX19LEVkdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2sobil7Y29uc3R7c2VsZWN0aW9uOnQsY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXI6ZX09bix7cm93OnJ9PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDtsZXQgaT1lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5uLmlzUnRsKCk/WzAsMV06W24uY291bnRDb2xzKCktMSwtMV0pO251bGw9PT1pJiYoaT1uLmlzUnRsKCk/LW4uY291bnRSb3dIZWFk''@;'; put 'put ''ZXJzKCk6LTEpLHQubWFya1NvdXJjZSgia2V5Ym9hcmQiKSx0LnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3JkcyhyLGkpKSx0Lm1hcmtFbmRTb3VyY2UoKX19LFRkdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjp0''@;'; put 'put ''fT1uLHtjb2w6ZX09bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0O2xldCByPW4ucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk7bnVsbD09PXImJihyPS1uLmNvdW50Q29sSGVhZGVycygpKSx0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC5z''@;'; put 'put ''ZXRSYW5nZVN0YXJ0KG4uX2NyZWF0ZUNlbGxDb29yZHMocixlKSksdC5tYXJrRW5kU291cmNlKCl9fSxBZHQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQiLGNhbGxiYWNrKG4pe2NvbnN0e3NlbGVjdGlvbjp0LHJvd0luZGV4TWFwcGVyOmUsY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXI6cn09bixpPXBhcnNlSW50KG4uZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3AsMTApLGE9cGFyc2VJbnQobi5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxjPWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGksMSksbT1yLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleChhLDEpO3QubWFya1NvdXJjZSgia2V5Ym9hcmQiKSx0LnNldFJhbmdlU3RhcnQobi5fY3JlYXRlQ2VsbENvb3JkcyhjLG0pKSx0Lm1hcmtFbmRTb3VyY2UoKX19LGtkdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcCIsY2FsbGJhY2sobil7bGV0e3NlbGVjdGlvbjp0fT1uO3QubWFy''@;'; put 'put ''a1NvdXJjZSgia2V5Ym9hcmQiKSx0LnRyYW5zZm9ybVN0YXJ0KC0xLDApLHQubWFya0VuZFNvdXJjZSgpfX0sRGR0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblVwQnlWaWV3cG9ydEhpZ2h0IixjYWxsYmFjayhuKXtjb25zdHtzZWxlY3Rpb246dH09bix7bmF2aWdhYmxlSGVhZGVyczplfT1u''@;'; put 'put ''LmdldFNldHRpbmdzKCkscj1lP24uY291bnRDb2xIZWFkZXJzKCk6MCx7cm93Oml9PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDtsZXQgYT1uLmNvdW50VmlzaWJsZVJvd3MoKStyO2E9MD09PWE/LTE6LWEsaT09PS1yP2E9LTE6aSthPHImJihhPS0oaStyKSksdC5tYXJr''@;'; put 'put ''U291cmNlKCJrZXlib2FyZCIpLHQudHJhbnNmb3JtU3RhcnQoYSwwKSx0Lm1hcmtFbmRTb3VyY2UoKSxuLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQucm93PDAmJm4uc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LFJkdD17bmFtZToiZW1wdHlTZWxlY3RlZENlbGxzIixj''@;'; put 'put ''YWxsYmFjayhuKXtuLmVtcHR5U2VsZWN0ZWRDZWxscygpLG4uX2dldEVkaXRvck1hbmFnZXIoKS5wcmVwYXJlRWRpdG9yKCl9fSxMZHQ9e25hbWU6InNjcm9sbFRvRm9jdXNlZENlbGwiLGNhbGxiYWNrKG4pe2NvbnN0e2hpZ2hsaWdodDp0fT1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxl''@;'; put 'put ''PW4uZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKS0xLHI9bi5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLTEsaT1uLmdldExhc3RGdWxseVZpc2libGVSb3coKSsxLGE9bi5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCkrMSxjPW4uX2NyZWF0ZUNlbGxDb29yZHMoZSxyKSxtPW4uX2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoaSxhKTtpZighbi5fY3JlYXRlQ2VsbFJhbmdlKGMsYyxtKS5pbmNsdWRlcyh0KSYmKHQucm93Pj0wfHx0LmNvbD49MCkpe2NvbnN0IFA9e307aWYodC5jb2w+PTApe2NvbnN0IFk9TWF0aC5mbG9vcihuLmNvdW50VmlzaWJsZUNvbHMoKS8yKTtQLmNvbD1NYXRoLm1h''@;'; put 'put ''eCh0LmNvbC1ZLDApfWlmKHQucm93Pj0wKXtjb25zdCBZPU1hdGguZmxvb3Iobi5jb3VudFZpc2libGVSb3dzKCkvMik7UC5yb3c9TWF0aC5tYXgodC5yb3ctWSwwKX1uLnNjcm9sbFZpZXdwb3J0VG8oey4uLlAsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19''@;'; put 'put ''fSxPZHQ9e25hbWU6InNlbGVjdEFsbENlbGxzIixjYWxsYmFjayhuKXtsZXR7c2VsZWN0aW9uOnR9PW47dC5tYXJrU291cmNlKCJrZXlib2FyZCIpLHQuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pLHQubWFya0VuZFNvdXJjZSgpfX0sUGR0PXtuYW1lOiJz''@;'; put 'put ''ZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMiLGNhbGxiYWNrKG4pe2xldHtzZWxlY3Rpb246dH09bjt0Lm1hcmtTb3VyY2UoImtleWJvYXJkIiksdC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfSksdC5tYXJrRW5kU291cmNlKCl9fSxGZHQ9e25hbWU6InBvcHVs''@;'; put 'put ''YXRlU2VsZWN0ZWRDZWxsc0RhdGEiLGNhbGxiYWNrKG4pe2NvbnN0IHQ9bi5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzplLGNvbDpyfT10W3QubGVuZ3RoLTFdLmhpZ2hsaWdodC5ub3JtYWxpemUoKSxpPW4uZ2V0RGF0YUF0Q2VsbChlLHIpLGE9bmV3IE1hcDtmb3IobGV0IGM9MDtjPHQubGVu''@;'; put 'put ''Z3RoO2MrKyl0W2NdLmZvckFsbCgobSxDKT0+e2lmKG0+PTAmJkM+PTAmJihtIT09ZXx8QyE9PXIpKXtjb25zdHtyZWFkT25seTpQfT1uLmdldENlbGxNZXRhKG0sQyk7UHx8YS5zZXQoYCR7bX14JHtDfWAsW20sQyxpXSl9fSk7bi5zZXREYXRhQXRDZWxsKEFycmF5LmZyb20oYS52YWx1ZXMo''@;'; put 'put ''KSkpfX0sSGR0PXtuYW1lOiJ0YWJOYXZpZ2F0aW9uIixjYWxsYmFjayhuKXtjb25zdCB0PXt3cmFwcGVkOiExLGZsaXBwZWQ6ITF9O2xldCBlPSExLHI9ITE7cmV0dXJuIG4uYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChpLGEsYyxtLEMpPT57ZSYmKHQud3JhcHBlZCYmdC5mbGlwcGVkfHxy''@;'; put 'put ''KSYmKHI9ITEsQy52YWx1ZT0hMCl9KSxuLmFkZEhvb2soImJlZm9yZVJvd1dyYXAiLChpLGEsYyk9Pnt0LndyYXBwZWQ9ITAsdC5mbGlwcGVkPWN9KSx7YmVmb3JlKCl7Y29uc3R7dGFiTmF2aWdhdGlvbjppfT1uLmdldFNldHRpbmdzKCk7ZT0hMCxpfHwocj0hMCl9LGFmdGVyKGkpe2NvbnN0''@;'; put 'put ''e3RhYk5hdmlnYXRpb246YSxhdXRvV3JhcFJvdzpjfT1uLmdldFNldHRpbmdzKCk7aWYoZT0hMSwhYXx8IW4uc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKXx8YyYmdC53cmFwcGVkJiZ0LmZsaXBwZWR8fCFjJiZ0LndyYXBwZWQpcmV0dXJuIHQud3JhcHBlZD0hMSx0LmZsaXBwZWQ9ITEsbi5kZXNl''@;'; put 'put ''bGVjdENlbGwoKSwhMTtpLnByZXZlbnREZWZhdWx0KCl9fX19LE5kdD1bLi4uZnVuY3Rpb24gUTF0KCl7cmV0dXJuW3oxdCwkMXQsSzF0LFgxdCxxMXQsSjF0XX0oKSwuLi5mdW5jdGlvbiBwZHQoKXtyZXR1cm5bZWR0LHRkdCxuZHQscmR0LGlkdCxhZHQsb2R0LHNkdCxsZHQsY2R0LHVkdCxk''@;'; put 'put ''ZHQsaGR0LGZkdF19KCksLi4uZnVuY3Rpb24gSWR0KCl7cmV0dXJuW2dkdCxtZHQsdmR0LHlkdCxfZHQsYmR0LHdkdCxDZHQsU2R0LE1kdCx4ZHQsRWR0LFRkdCxBZHQsa2R0LERkdF19KCksUmR0LExkdCxPZHQsUGR0LEZkdCxIZHRdO2Z1bmN0aW9uIHo2ZShuKXtjb25zdCB0PXt9O3JldHVy''@;'; put 'put ''biBOZHQuZm9yRWFjaChlPT57bGV0e25hbWU6cixjYWxsYmFjazppfT1lO3Rbcl09ZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxjPW5ldyBBcnJheShhKSxtPTA7bTxhO20rKyljW21dPWFyZ3VtZW50c1ttXTtyZXR1cm4gaShuLC4uLmMpfX0pLHR9ZnVuY3Rpb24gVmR0''@;'; put 'put ''KG4pe2NvbnN0IHQ9bi5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJlZGl0b3IiKSxlPXo2ZShuKSxyPXtncm91cDpjOH07dC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihpLGEpPT5lLmVkaXRvckNsb3NlQW5kU2F2''@;'; put 'put ''ZUJ5RW50ZXIoaSxhKX0se2tleXM6W1siRW50ZXIiLCJDb250cm9sL01ldGEiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KGksYSk9PmUuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihpLGEpfSx7a2V5czpbWyJUYWIiXSxbIlRh''@;'; put 'put ''YiIsIlNoaWZ0Il0sWyJQYWdlRG93biJdLFsiUGFnZVVwIl1dLGZvcndhcmRUb0NvbnRleHQ6bi5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KGksYSk9PmUuZWRpdG9yQ2xvc2VBbmRTYXZlKGksYSl9LHtrZXlzOltbIkFycm93RG93biJdLFsiQXJy''@;'; put 'put ''b3dVcCJdLFsiQXJyb3dMZWZ0Il0sWyJBcnJvd1JpZ2h0Il1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOihpLGEpPT5lLmVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzKGksYSl9LHtrZXlzOltbIkVzY2FwZSJdLFsiRXNjYXBlIiwiQ29udHJvbC9NZXRhIl1dLGNhbGxiYWNrOigp''@;'; put 'put ''PT5lLmVkaXRvckNsb3NlV2l0aG91dFNhdmluZygpfV0scil9ZnVuY3Rpb24gQmR0KG4pe2NvbnN0IHQ9bi5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJncmlkIiksZT16NmUobikscj17cnVuT25seUlmOigpPT57Y29uc3R7bmF2aWdhYmxlSGVhZGVyczphfT1uLmdldFNldHRp''@;'; put 'put ''bmdzKCk7cmV0dXJuIHdhKG4uZ2V0U2VsZWN0ZWQoKSkmJihhfHwhYSYmbi5jb3VudFJlbmRlcmVkUm93cygpPjAmJm4uY291bnRSZW5kZXJlZENvbHMoKT4wKX0sZ3JvdXA6VGt9O3QuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJGMiJdXSxjYWxsYmFjazphPT5lLmVkaXRvckZhc3RPcGVuKGEp''@;'; put 'put ''fSx7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooYSxjKT0+ZS5lZGl0b3JPcGVuKGEsYyl9LHtrZXlzOltbIkJhY2tzcGFjZSJdLFsiRGVsZXRlIl1dLGNhbGxiYWNrOigpPT5lLmVtcHR5U2VsZWN0ZWRDZWxscygpfV0se2dyb3VwOmM4LHJ1bk9ubHlJZjoo''@;'; put 'put ''KT0+d2Eobi5nZXRTZWxlY3RlZCgpKX0pLHQuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT5lLnNlbGVjdEFsbENlbGxzKCkscnVuT25seUlmOigpPT57dmFyIGE7cmV0dXJuIShudWxsIT09KGE9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZl''@;'; put 'put ''KCkpJiZ2b2lkIDAhPT1hJiZhLmhpZ2hsaWdodC5pc0hlYWRlcigpKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9Pnt9LHJ1bk9ubHlJZjooKT0+e3ZhciBhO3JldHVybiBudWxsPT09KGE9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1h''@;'; put 'put ''P3ZvaWQgMDphLmhpZ2hsaWdodC5pc0hlYWRlcigpfSxwcmV2ZW50RGVmYXVsdDohMH0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJTcGFjZSJdXSxjYWxsYmFjazooKT0+ZS5zZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMoKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIi''@;'; put 'put ''XV0sY2FsbGJhY2s6KCk9PmUucG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSgpLHJ1bk9ubHlJZjooKT0+e3ZhciBhLGM7cmV0dXJuIShudWxsIT09KGE9bi5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpJiZ2b2lkIDAhPT1hJiZhLmhpZ2hsaWdodC5pc0hlYWRlcigpKSYmKG51bGw9PT0oYz1u''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWM/dm9pZCAwOmMuZ2V0Q2VsbHNDb3VudCgpKT4xfX0se2tleXM6W1siQ29udHJvbCIsIlNwYWNlIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5lLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zKCl9LHtrZXlz''@;'; put 'put ''OltbIlNoaWZ0IiwiU3BhY2UiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT5lLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzKCl9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9PmUubW92ZUNlbGxTZWxlY3Rpb25VcCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiQ29u''@;'; put 'put ''dHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5lLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wKCl9LHtrZXlzOltbIkFycm93VXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+ZS5leHRlbmRDZWxsc1NlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJTaGlm''@;'; put 'put ''dCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+ZS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCgpLHJ1bk9ubHlJZjooKT0+IShuLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8bi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVh''@;'; put 'put ''ZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9PmUubW92ZUNlbGxTZWxlY3Rpb25Eb3duKCl9LHtrZXlzOltbIkFycm93RG93biIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+ZS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRv''@;'; put 'put ''bSgpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+ZS5leHRlbmRDZWxsc1NlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmUuZXh0ZW5kQ2VsbHNT''@;'; put 'put ''ZWxlY3Rpb25Ub01vc3RCb3R0b20oKSxydW5Pbmx5SWY6KCk9PiEobi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fG4uc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT5lLm1vdmVDZWxsU2VsZWN0''@;'; put 'put ''aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmUubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5lLmV4dGVuZENlbGxz''@;'; put 'put ''U2VsZWN0aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+ZS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQoKSxydW5Pbmx5SWY6KCk9PiEobi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5''@;'; put 'put ''Q29ybmVyKCl8fG4uc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+ZS5tb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAs''@;'; put 'put ''Y2FsbGJhY2s6KCk9PmUubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmUuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiLCJDb250cm9sL01ldGEi''@;'; put 'put ''XV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmUuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCgpLHJ1bk9ubHlJZjooKT0+IShuLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8bi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJI''@;'; put 'put ''b21lIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5lLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9Pm4udmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siSG9tZSIsIlNoaWZ0Il1dLGNhbGxi''@;'; put 'put ''YWNrOigpPT5lLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKX0se2tleXM6W1siSG9tZSIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+ZS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0KCkscnVuT25seUlmOigp''@;'; put 'put ''PT5uLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+ZS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+bi52aWV3LmlzTWFpblRhYmxlTm90''@;'; put 'put ''RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+ZS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZUVuZCgpfSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmUu''@;'; put 'put ''bW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQoKSxydW5Pbmx5SWY6KCk9Pm4udmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT5lLm1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0''@;'; put 'put ''SGlnaHQoKX0se2tleXM6W1siUGFnZVVwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmUuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9PmUubW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdo''@;'; put 'put ''dCgpfSx7a2V5czpbWyJQYWdlRG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5lLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOmE9PmUubW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVT''@;'; put 'put ''dGFydChhKX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6YT0+ZS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZChhKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT5lLnNjcm9sbFRvRm9jdXNlZENl''@;'; put 'put ''bGwoKX1dLHIpO2NvbnN0IGk9ZS50YWJOYXZpZ2F0aW9uKCk7dC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsc3RvcFByb3BhZ2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDpUayxncm91cDp1Vixwb3NpdGlvbjoiYmVmb3Jl''@;'; put 'put ''IixjYWxsYmFjazphPT5pLmJlZm9yZShhKX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEscmVsYXRpdmVUb0dyb3VwOlRrLGdyb3VwOnVWLGNhbGxiYWNrOmE9PmkuYWZ0ZXIoYSkscG9zaXRpb246ImFmdGVyIn1d''@;'; put 'put ''KX1mdW5jdGlvbiBVNmUobil7Y29uc3R7Y2xhc3NOYW1lczp0fT1uNWUobiwvaHQtdGhlbWUtW2EtekEtWjAtOV8tXSsvKTtyZXR1cm4gdC5wb3AoKX1mdW5jdGlvbiBNNShuLHQsZSl7VzZlKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBXNmUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHFjKG4sdCl7cmV0dXJuIG4uZ2V0KHBwKG4sdCkpfWZ1bmN0aW9uIE9oKG4sdCxlKXtyZXR1cm4gbi5zZXQocHAobix0KSxlKSxlfWZ1bmN0''@;'; put 'put ''aW9uIHBwKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgVHRlPW5ldyBX''@;'; put 'put ''ZWFrTWFwLEw0PW5ldyBXZWFrTWFwLGZWPW5ldyBXZWFrTWFwLEF0ZT1uZXcgV2Vha01hcCxrdGU9bmV3IFdlYWtNYXAsdTg9bmV3IFdlYWtNYXAsRGs9bmV3IFdlYWtNYXAsSWs9bmV3IFdlYWtNYXAsUms9bmV3IFdlYWtNYXAsTzQ9bmV3IFdlYWtTZXQ7Y2xhc3MgVWR0e2NvbnN0cnVjdG9y''@;'; put 'put ''KHQpe2xldHtob3Q6ZSxyb290RWxlbWVudDpyLHJvb3REb2N1bWVudDppLG9uVGhlbWVDaGFuZ2U6YT0oKT0+e319PXQ7KGZ1bmN0aW9uIHpkdChuLHQpe1c2ZShuLHQpLHQuYWRkKG4pfSkodGhpcyxPNCksTTUodGhpcyxUdGUsdm9pZCAwKSxNNSh0aGlzLEw0LHZvaWQgMCksTTUodGhpcyxm''@;'; put 'put ''Vix2b2lkIDApLE01KHRoaXMsQXRlLHZvaWQgMCksTTUodGhpcyxrdGUsdm9pZCAwKSxNNSh0aGlzLHU4LCEwKSxNNSh0aGlzLERrLHt9KSxNNSh0aGlzLElrLHt9KSxNNSh0aGlzLFJrLHZvaWQgMCksT2goVHRlLHRoaXMsZSksT2goZlYsdGhpcyxyKSxPaChrdGUsdGhpcyxpKSxPaChSayx0''@;'; put 'put ''aGlzLGEpfWlzQ2xhc3NpY1RoZW1lKCl7cmV0dXJuIHFjKHU4LHRoaXMpfWdldENTU1ZhcmlhYmxlVmFsdWUodCl7dmFyIGU7aWYocWModTgsdGhpcykpcmV0dXJuIG51bGw7aWYocWMoRGssdGhpcylbYC0taHQtJHt0fWBdKXJldHVybiBxYyhEayx0aGlzKVtgLS1odC0ke3R9YF07Y29uc3Qg''@;'; put 'put ''cj1udWxsIT09KGU9cHAoTzQsdGhpcyxZZHQpLmNhbGwodGhpcyxgLS1odC0ke3R9YCkpJiZ2b2lkIDAhPT1lP2U6cHAoTzQsdGhpcyxZNmUpLmNhbGwodGhpcyxgLS1odC0ke3R9YCk7cmV0dXJuIG51bGwhPT1yPyhxYyhEayx0aGlzKVtgLS1odC0ke3R9YF09cixyKTp2b2lkIDB9Z2V0U3R5''@;'; put 'put ''bGVGb3JURCh0KXt2YXIgZTtyZXR1cm4gbnVsbD09PShlPXFjKElrLHRoaXMpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS50ZFt0XX1nZXREZWZhdWx0Um93SGVpZ2h0KHQpe2lmKHFjKHU4LHRoaXMpKXJldHVybiAyMztjb25zdCBlPXBwKE80LHRoaXMsV2R0KS5jYWxsKHRoaXMpO3JldHVybiBl''@;'; put 'put ''P3ZvaWQgMCE9PXQmJnQ9PT1xYyhUdGUsdGhpcykudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpP2UrMTplOjIzfWFyZUNlbGxzQm9yZGVyQm94KCl7cmV0dXJuImJvcmRlci1ib3giPT09dGhpcy5nZXRTdHlsZUZvclREKCJib3gtc2l6aW5nIil9dXNlVGhlbWUodCl7aWYoIXQp''@;'; put 'put ''cmV0dXJuIE9oKEw0LHRoaXMsdm9pZCAwKSxPaCh1OCx0aGlzLCEwKSxxYyhSayx0aGlzKS5jYWxsKHRoaXMscWMoTDQsdGhpcykpLHZvaWQgcHAoTzQsdGhpcyxEdGUpLmNhbGwodGhpcyk7aWYodCYmdCE9PXFjKEw0LHRoaXMpKXtpZighL2h0LXRoZW1lLS4qLy50ZXN0KHQpKXJldHVybiBv''@;'; put 'put ''cyhgSW52YWxpZCB0aGVtZSBuYW1lOiAke3R9LiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHRoZW1lIG5hbWUuYCksT2goTDQsdGhpcyx2b2lkIDApLE9oKHU4LHRoaXMsITEpLHFjKFJrLHRoaXMpLmNhbGwodGhpcyxxYyhMNCx0aGlzKSksdm9pZCBwcChPNCx0aGlzLER0ZSkuY2FsbCh0aGlz''@;'; put 'put ''KTtxYyhMNCx0aGlzKSYmcHAoTzQsdGhpcyxHZHQpLmNhbGwodGhpcyksT2goTDQsdGhpcyx0KSxPaCh1OCx0aGlzLCExKSxxYyhSayx0aGlzKS5jYWxsKHRoaXMscWMoTDQsdGhpcykpLHBwKE80LHRoaXMsRHRlKS5jYWxsKHRoaXMpfX1nZXRUaGVtZU5hbWUoKXtyZXR1cm4gcWMoTDQsdGhp''@;'; put 'put ''cyl9fWZ1bmN0aW9uIFdkdCgpe2NvbnN0IG49dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJsaW5lLWhlaWdodCIpLHQ9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLXZlcnRpY2FsLXBhZGRpbmciKSxlPU1hdGguY2VpbChwYXJzZUZsb2F0KHRoaXMuZ2V0U3R5bGVGb3JURCgiYm9y''@;'; put 'put ''ZGVyLWJvdHRvbS13aWR0aCIpKSk7cmV0dXJuIG51bGw9PT1ufHxudWxsPT09dHx8aXNOYU4oZSk/bnVsbDpuKzIqdCtlfWZ1bmN0aW9uIER0ZSgpe3RoaXMuaXNDbGFzc2ljVGhlbWUoKXx8T2goQXRlLHRoaXMsZ2V0Q29tcHV0ZWRTdHlsZShxYyhmVix0aGlzKSkpO2NvbnN0IG49cHAoTzQs''@;'; put 'put ''dGhpcyxaZHQpLmNhbGwodGhpcyxbImJveC1zaXppbmciLCJib3JkZXItYm90dG9tLXdpZHRoIl0pO3FjKElrLHRoaXMpLnRkPXsuLi5xYyhJayx0aGlzKS50ZCwiYm94LXNpemluZyI6blsiYm94LXNpemluZyJdLCJib3JkZXItYm90dG9tLXdpZHRoIjpuWyJib3JkZXItYm90dG9tLXdpZHRo''@;'; put 'put ''Il19fWZ1bmN0aW9uIFpkdChuKXtjb25zdCB0PXFjKGt0ZSx0aGlzKSxlPXFjKGZWLHRoaXMpLHI9dC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGk9dC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLGE9dC5jcmVhdGVFbGVtZW50KCJ0ciIpLGM9dC5jcmVhdGVFbGVtZW50KCJ0ciIpLG09dC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJ0ZCIpO2MuYXBwZW5kQ2hpbGQobSksaS5hcHBlbmRDaGlsZChhKSxpLmFwcGVuZENoaWxkKGMpLHIuYXBwZW5kQ2hpbGQoaSksZS5hcHBlbmRDaGlsZChyKTtjb25zdCBDPWdldENvbXB1dGVkU3R5bGUobSksUD17fTtyZXR1cm4gbi5mb3JFYWNoKFk9PntQW1ldPUMuZ2V0''@;'; put 'put ''UHJvcGVydHlWYWx1ZShZKX0pLGUucmVtb3ZlQ2hpbGQociksUH1mdW5jdGlvbiBZZHQobil7Y29uc3QgdD1NYXRoLmNlaWwocGFyc2VGbG9hdChwcChPNCx0aGlzLFk2ZSkuY2FsbCh0aGlzLG4pKSk7cmV0dXJuIE51bWJlci5pc05hTih0KT9udWxsOnR9ZnVuY3Rpb24gWTZlKG4pe2NvbnN0''@;'; put 'put ''IHQ9cWMoQXRlLHRoaXMpLmdldFByb3BlcnR5VmFsdWUobik7cmV0dXJuIiI9PT10P251bGw6dH1mdW5jdGlvbiBHZHQoKXtPaChJayx0aGlzLHt9KSxPaChEayx0aGlzLHt9KSxPaCh1OCx0aGlzLCEwKX1sZXQgTzI9bnVsbCxwVj0wLEl0ZT1udWxsO2NvbnN0IGdWPW5ldyBXZWFrU2V0LFJ0''@;'; put 'put ''ZT1uZXcgTWFwO2Z1bmN0aW9uIEc2ZShuLHQpe3ZhciBlLHIsaT10aGlzO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYz10aGlzO2NvbnN0IG09bmV3IFpmKGMpO2xldCBDLFAsWSxKLGNlLGZlLEFlPSEwO2NvbnN0IEhlPXsu''@;'; put 'put ''Li50LmluaXRpYWxTdGF0ZSwuLi50fTsoZnVuY3Rpb24gVWN0KG4pe3JldHVybiBuPT09YVF9KShhKSYmZnVuY3Rpb24gemN0KG4pe0xtZS5zZXQobiwhMCl9KHRoaXMpLHRoaXMucm9vdENvbnRhaW5lcj1uLHRoaXMucm9vdFdyYXBwZXJFbGVtZW50PXZvaWQgMCx0aGlzLnJvb3RHcmlkRWxl''@;'; put 'put ''bWVudD12b2lkIDAsdGhpcy5yb290UG9ydGFsRWxlbWVudD12b2lkIDAsdGhpcy5yb290RWxlbWVudD1rNCh0aGlzKT9uLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6bix0aGlzLnJvb3REb2N1bWVudD1uLm93bmVyRG9jdW1lbnQsdGhpcy5yb290V2luZG93PXRoaXMucm9v''@;'; put 'put ''dERvY3VtZW50LmRlZmF1bHRWaWV3LGs0KHRoaXMpJiYodGhpcy5yb290V3JhcHBlckVsZW1lbnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5yb290R3JpZEVsZW1lbnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5yb290''@;'; put 'put ''UG9ydGFsRWxlbWVudD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aSh0aGlzLnJvb3RFbGVtZW50LFsiaHQtd3JhcHBlciIsImhhbmRzb250YWJsZSJdKSx0aSh0aGlzLnJvb3RXcmFwcGVyRWxlbWVudCwiaHQtcm9vdC13cmFwcGVyIiksdGkodGhpcy5yb290R3Jp''@;'; put 'put ''ZEVsZW1lbnQsImh0LWdyaWQiKSx0aGlzLnJvb3RHcmlkRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJvb3RFbGVtZW50KSx0aGlzLnJvb3RXcmFwcGVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJvb3RHcmlkRWxlbWVudCksdGhpcy5yb290Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMu''@;'; put 'put ''cm9vdFdyYXBwZXJFbGVtZW50KSx0aSh0aGlzLnJvb3RQb3J0YWxFbGVtZW50LCJodC1wb3J0YWwiKSx0aGlzLnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQpKSx0aGlzLmlzRGVzdHJveWVkPSExLHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRl''@;'; put 'put ''cj0wLHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj0wO2NvbnN0IFhlPW51bGwhPT0oZT1IZT8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09ZT9lOiJpbmhlcml0IixydD1bInJ0bCIsImx0ciJdLmluY2x1ZGVzKFhlKT9YZTp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHls''@;'; put 'put ''ZSh0aGlzLnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpciIscnQpLG51bGw9PT0ocj10aGlzLnJvb3RXcmFwcGVyRWxlbWVudCl8fHZvaWQgMD09PXJ8fHIuc2V0QXR0cmlidXRlKCJkaXIiLHJ0KSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuInJ0bCI9PT1ydH0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiFjLmlzUnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGMuaXNMdHIoKT8xOi0xfSx0aGlzLnN0eWxlc0hhbmRsZXI9bmV3IFVkdCh7aG90OmMscm9vdEVsZW1lbnQ6Yy5y''@;'; put 'put ''b290RWxlbWVudCxyb290RG9jdW1lbnQ6Yy5yb290RG9jdW1lbnQsb25UaGVtZUNoYW5nZTpvdD0+e2s0KHRoaXMpJiYoSGEodGhpcy5yb290V3JhcHBlckVsZW1lbnQsL2h0LXRoZW1lLS4qL2cpLEhhKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQsL2h0LXRoZW1lLS4qL2cpLG90JiYodGkodGhp''@;'; put 'put ''cy5yb290V3JhcHBlckVsZW1lbnQsb3QpLHRpKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQsb3QpLGdldENvbXB1dGVkU3R5bGUodGhpcy5yb290V3JhcHBlckVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoIi0taHQtbGluZS1oZWlnaHQiKXx8b3MoYFRoZSAiJHtvdH0iIHRoZW1lIGlzIGVuYWJs''@;'; put 'put ''ZWQsIGJ1dCBpdHMgc3R5bGVzaGVldHMgYXJlIG1pc3Npbmcgb3Igbm90IGltcG9ydGVkIGNvcnJlY3RseS4gICAgICAgICAgICAgICBJbXBvcnQgdGhlIGNvcnJlY3QgQ1NTIGZpbGVzIGluIG9yZGVyIHRvIHVzZSB0aGF0IHRoZW1lLmApKSl9fSksSGUubGFuZ3VhZ2U9ZnVuY3Rpb24gQnV0''@;'; put 'put ''KG4pe2xldCB0PSRtZShuKTtyZXR1cm4gb3RlKHQpfHwodD1hdGUsS21lKG4pKSx0fShIZS5sYW5ndWFnZSk7Y29uc3QgZHQ9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKEhlKS5maWx0ZXIob3Q9PntsZXRbSXRdPW90O3JldHVybiEoRWEuZ2V0U2luZ2xldG9uKCkuaXNSZWdp''@;'; put 'put ''c3RlcmVkKEl0KXx8RWEuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKEl0KSl9KSksanQ9bmV3IFM2ZShjLGR0LFtYMHQscjF0XSksRnQ9anQuZ2V0VGFibGVNZXRhKCkscG49anQuZ2V0R2xvYmFsTWV0YSgpLG9uPW5rKCk7dGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiZGl2IiksdGhpcy5yb290RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsdGhpcy5yb290RWxlbWVudC5maXJzdENoaWxkKSx0aGlzLmd1aWQ9YGh0XyR7S3EoKX1gLFJ0ZS5zZXQodGhpcy5ndWlkLHRoaXMpLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9bmV3''@;'; put 'put ''IHdRLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IHdRLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLG90PT57Yy5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsb3QpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRM''@;'; put 'put ''b2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsb3Q9PntjLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIixvdCl9KSxtLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjb21wb3NpdGlvbnN0YXJ0IixvdD0+e2MucnVuSG9v''@;'; put 'put ''a3MoImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLG90KX0pLFA9bmV3IGl1dChjKTtjb25zdCBnbj1XZih0aGlzLmd1aWQpO2duLnJlZ2lzdGVyKCJjZWxsUmFuZ2VNYXBwZXIiLG5ldyBkMXQoe3Jvd0luZGV4TWFwcGVyOnRoaXMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhp''@;'; put 'put ''cy5jb2x1bW5JbmRleE1hcHBlcn0pKSwoIXRoaXMucm9vdEVsZW1lbnQuaWR8fCJodF8iPT09dGhpcy5yb290RWxlbWVudC5pZC5zdWJzdHJpbmcoMCwzKSkmJih0aGlzLnJvb3RFbGVtZW50LmlkPXRoaXMuZ3VpZCk7bGV0IGlyPW5ldyB4MHQoRnQse3Jvd0luZGV4TWFwcGVyOmMucm93SW5k''@;'; put 'put ''ZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6Yy5jb2x1bW5JbmRleE1hcHBlcixjb3VudENvbHM6KCk9PmMuY291bnRDb2xzKCksY291bnRSb3dzOigpPT5jLmNvdW50Um93cygpLHByb3BUb0NvbDpvdD0+Qy5wcm9wVG9Db2wob3QpLGlzRWRpdG9yT3BlbmVkOigpPT4hIWMuZ2V0QWN0aXZl''@;'; put 'put ''RWRpdG9yKCkmJmMuZ2V0QWN0aXZlRWRpdG9yKCkuaXNPcGVuZWQoKSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVSb3dzKCksY291bnRS''@;'; put 'put ''b3dIZWFkZXJzOigpPT50aGlzLmNvdW50Um93SGVhZGVycygpLGNvdW50Q29sSGVhZGVyczooKT0+dGhpcy5jb3VudENvbEhlYWRlcnMoKSxjb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBpLnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoLi4uYXJn''@;'; put 'put ''dW1lbnRzKX0sY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gaS52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKC4uLmFyZ3VtZW50cyl9LGdldFNob3J0Y3V0TWFuYWdlcjooKT0+Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKSxjcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzOihvdCxJdCk9PmMuX2NyZWF0ZUNlbGxDb29yZHMob3QsSXQpLGNyZWF0ZUNlbGxSYW5nZToob3QsSXQsVXQpPT5jLl9jcmVhdGVDZWxsUmFuZ2Uob3QsSXQsVXQpLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpvdD0+e2NvbnN0e3JvdzpJdCxjb2w6VXR9PW90O3JldHVybiBjLl9j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzKEl0Pj0wP2Mucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChJdCk6SXQsVXQ+PTA/Yy5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFV0KTpVdCl9LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczpv''@;'; put 'put ''dD0+e2NvbnN0e3JvdzpJdCxjb2w6VXR9PW90O3JldHVybiBjLl9jcmVhdGVDZWxsQ29vcmRzKEl0Pj0wP2Mucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChJdCk6SXQsVXQ+PTA/Yy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUlu''@;'; put 'put ''ZGV4KFV0KTpVdCl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6KG90LEl0KT0+e2NvbnN0IFV0PUl0Pm90PzE6LTEsRW49TWF0aC5taW4ob3QsSXQpLGFyPU1hdGgubWF4KG90LEl0KSxFdD1jLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChvdCxVdCk7''@;'; put 'put ''cmV0dXJuIG51bGw9PT1FdHx8MT09PVV0JiZFdD5hcnx8LTE9PT1VdCYmRXQ8RW4/bnVsbDpFdD49MD9jLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRXQpOkV0fSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOihvdCxJdCk9Pntjb25zdCBV''@;'; put 'put ''dD1JdD5vdD8xOi0xLEVuPU1hdGgubWluKG90LEl0KSxhcj1NYXRoLm1heChvdCxJdCksRXQ9Yy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgob3QsVXQpO3JldHVybiBudWxsPT09RXR8fDE9PT1VdCYmRXQ+YXJ8fC0xPT09VXQmJkV0PEVuP251bGw6RXQ+PTA/''@;'; put 'put ''Yy5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEV0KTpFdH0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KG90LEl0KT0+b3Q8MHx8SXQ8MD9jLmdldFNldHRpbmdzKCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjpjLmdldENlbGxNZXRhKG90LEl0KS5kaXNh''@;'; put 'put ''YmxlVmlzdWFsU2VsZWN0aW9ufSk7dGhpcy5zZWxlY3Rpb249aXI7Y29uc3QgcGk9b3Q9PntsZXR7aGlkZGVuSW5kZXhlc0NoYW5nZWQ6SXR9PW90O3RoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLEl0JiZ0aGlzLnNlbGVjdGlvbi5jb21taXQoKX07ZnVuY3Rpb24gQXIob3QsSXQpe2NvbnN0IFV0''@;'; put 'put ''PSJjbGFzc05hbWUiPT09b3Q/Yy5yb290RWxlbWVudDpjLnRhYmxlO2lmKEFlKXRpKFV0LEl0KTtlbHNle2xldCBFbj1bXSxhcj1bXTtwbltvdF0mJihFbj1BcnJheS5pc0FycmF5KHBuW290XSk/cG5bb3RdOkdxKHBuW290XSkpLEl0JiYoYXI9QXJyYXkuaXNBcnJheShJdCk/SXQ6R3EoSXQp''@;'; put 'put ''KTtjb25zdCBFdD1ZcShFbixhciksWnQ9WXEoYXIsRW4pO0V0Lmxlbmd0aCYmSGEoVXQsRXQpLFp0Lmxlbmd0aCYmdGkoVXQsWnQpfXBuW290XT1JdH1mdW5jdGlvbiBlcigpe2xldCBvdD0hMTtyZXR1cm57dmFsaWRhdG9yc0luUXVldWU6MCx2YWxpZDohMCxhZGRWYWxpZGF0b3JUb1F1ZXVl''@;'; put 'put ''KCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSs9MSxvdD0hMX0scmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTE8MD8wOnRoaXMudmFsaWRhdG9yc0luUXVldWUtMSx0aGlzLmNoZWNrSWZRdWV1ZUlzRW1wdHko''@;'; put 'put ''KX0sb25RdWV1ZUVtcHR5KCl7fSxjaGVja0lmUXVldWVJc0VtcHR5KCl7MD09PXRoaXMudmFsaWRhdG9yc0luUXVldWUmJiExPT09b3QmJihvdD0hMCx0aGlzLm9uUXVldWVFbXB0eSh0aGlzLnZhbGlkKSl9fX1mdW5jdGlvbiBEcihvdCxJdCxVdCl7aWYoIW90Lmxlbmd0aClyZXR1cm4gdm9p''@;'; put 'put ''ZCBVdCgpO2NvbnN0IEVuPWMuZ2V0QWN0aXZlRWRpdG9yKCksYXI9bmV3IGVyO2xldCBFdD0hMDthci5vblF1ZXVlRW1wdHk9KCk9PntFbiYmRXQmJkVuLmNhbmNlbENoYW5nZXMoKSxVdCgpfTtmb3IobGV0IFp0PW90Lmxlbmd0aC0xO1p0Pj0wO1p0LS0pe2NvbnN0W2ZuLFhuLCxrbl09b3Rb''@;'; put 'put ''WnRdLF9uPUMucHJvcFRvQ29sKFhuKTtsZXQgZ3I7Z3I9TnVtYmVyLmlzSW50ZWdlcihfbik/Yy5nZXRDZWxsTWV0YShmbixfbik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihGdCksLi4uRnR9LGMuZ2V0Q2VsbFZhbGlkYXRvcihncikmJihhci5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksYy52''@;'; put 'put ''YWxpZGF0ZUNlbGwoa24sZ3IsZnVuY3Rpb24oeG4sbnIpe3JldHVybiBmdW5jdGlvbih4cil7aWYoImJvb2xlYW4iIT10eXBlb2YgeHIpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTshMT09PXhyJiYhMT09PW5yLmFsbG93SW52YWxp''@;'; put 'put ''ZCYmKEV0PSExLG90LnNwbGljZSh4biwxKSxuci52YWxpZD0hMCksYXIucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9fShadCxnciksSXQpKX1hci5jaGVja0lmUXVldWVJc0VtcHR5KCl9ZnVuY3Rpb24gWnIob3QsSXQpe2ZvcihsZXQgRW49b3QubGVuZ3RoLTE7RW4+PTA7RW4tLSl7bGV0''@;'; put 'put ''IGFyPSExO2lmKG51bGwhPT1vdFtFbl0pe2lmKG51bGwhPW90W0VuXVsyXXx8bnVsbCE9b3RbRW5dWzNdKXtpZihGdC5hbGxvd0luc2VydFJvdylmb3IoO290W0VuXVswXT5jLmNvdW50Um93cygpLTE7KXtjb25zdHtkZWx0YTpFdH09Qy5jcmVhdGVSb3codm9pZCAwLHZvaWQgMCx7c291cmNl''@;'; put 'put ''OiJhdXRvIn0pO2lmKDA9PT1FdCl7YXI9ITA7YnJlYWt9fWlmKCJhcnJheSI9PT1jLmRhdGFUeXBlJiYoIUZ0LmNvbHVtbnN8fDA9PT1GdC5jb2x1bW5zLmxlbmd0aCkmJkZ0LmFsbG93SW5zZXJ0Q29sdW1uKWZvcig7Qy5wcm9wVG9Db2wob3RbRW5dWzFdKT5jLmNvdW50Q29scygpLTE7KXtj''@;'; put 'put ''b25zdHtkZWx0YTpFdH09Qy5jcmVhdGVDb2wodm9pZCAwLHZvaWQgMCx7c291cmNlOiJhdXRvIn0pO2lmKDA9PT1FdCl7YXI9ITA7YnJlYWt9fWFyfHxDLnNldChvdFtFbl1bMF0sb3RbRW5dWzFdLG90W0VuXVszXSl9fWVsc2Ugb3Quc3BsaWNlKEVuLDEpfWlmKG90Lmxlbmd0aD4wKXtZLmFk''@;'; put 'put ''anVzdFJvd3NBbmRDb2xzKCksYy5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIixvdCxJdCksSi5jbG9zZUVkaXRvcigpLGMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxjLnJlbmRlcigpLEoucHJlcGFyZUVkaXRvcigpLGMucnVuSG9va3MoImFmdGVyQ2hhbmdlIixvdCxJdHx8ImVk''@;'; put 'put ''aXQiKTtjb25zdCBFbj1jLmdldEFjdGl2ZUVkaXRvcigpO0VuJiZ3YShFbi5yZWZyZXNoVmFsdWUpJiZFbi5yZWZyZXNoVmFsdWUoKX1lbHNlIGMucmVuZGVyKCl9ZnVuY3Rpb24gYmkob3QsSXQsVXQpe3JldHVybiBBcnJheS5pc0FycmF5KG90KT9vdDpbW290LEl0LFV0XV19ZnVuY3Rpb24g''@;'; put 'put ''U2kob3QsSXQpe2NvbnN0IFV0PWMucnVuSG9va3MoImJlZm9yZUNoYW5nZSIsb3QsSXR8fCJlZGl0IiksRW49b3QuZmlsdGVyKEV0PT5udWxsIT09RXQpO3ZhciBhcjtpZighMT09PVV0fHwwPT09RW4ubGVuZ3RoKXJldHVybiBudWxsPT09KGFyPWMuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lk''@;'; put 'put ''IDA9PT1hcnx8YXIuY2FuY2VsQ2hhbmdlcygpLFtdO2ZvcihsZXQgRXQ9RW4ubGVuZ3RoLTE7RXQ+PTA7RXQtLSl7Y29uc3RbWnQsZm4sLFhuXT1FbltFdF0sa249Qy5wcm9wVG9Db2woZm4pO2xldCBfbjtfbj1OdW1iZXIuaXNJbnRlZ2VyKGtuKT9jLmdldENlbGxNZXRhKFp0LGtuKTp7Li4u''@;'; put 'put ''T2JqZWN0LmdldFByb3RvdHlwZU9mKEZ0KSwuLi5GdH0sRW5bRXRdWzNdPXl0ZShYbixfbil9cmV0dXJuIEVufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLG90PT57cGkob3QpLHRoaXMucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDYWNo''@;'; put 'put ''ZVVwZGF0ZSIsb3QpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsb3Q9PntwaShvdCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNhY2hlVXBkYXRlIixvdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0UmFu''@;'; put 'put ''Z2VFbmQiLChvdCxJdCk9Pntjb25zdCBVdD1BaCghMSksRW49dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOmFyLHRvOkV0fT1Fbi5jdXJyZW50KCksWnQ9RW4uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLGFyLnJvdyxhci5jb2wsRXQucm93''@;'; put 'put ''LEV0LmNvbCxVdCxadCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLGFyLnJvdyxjLmNvbFRvUHJvcChhci5jb2wpLEV0LnJvdyxjLmNvbFRvUHJvcChFdC5jb2wpLFV0LFp0KSxJdCYmKCFVdC5pc1RvdWNoZWQoKXx8VXQuaXNUb3VjaGVkKCkmJiFVdC52YWx1ZSkmJmZl''@;'; put 'put ''LnNjcm9sbFRvKG90KTtjb25zdCBmbj1pci5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxYbj1pci5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtmbiYmWG4/dGkodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pOmZuPyhI''@;'; put 'put ''YSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIiksdGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpKTpYbj8oSGEodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpLHRpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxl''@;'; put 'put ''Y3Rpb24tLWNvbHVtbnMiKSk6SGEodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLFsic2hpZnQiLCJyZWZyZXNoIl0uaW5jbHVkZXMoaXIuZ2V0U2VsZWN0aW9uU291cmNlKCkpfHxKLmNsb3NlRWRpdG9yKG51bGwpLCJy''@;'; put 'put ''ZWZyZXNoIiE9PWlyLmdldFNlbGVjdGlvblNvdXJjZSgpJiYoYy52aWV3LnJlbmRlcigpLEoucHJlcGFyZUVkaXRvcigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0Rm9jdXMiLG90PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLG90''@;'; put 'put ''LnJvdyxvdC5jb2wpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldEZvY3VzIixvdD0+e2NvbnN0IEl0PUFoKCExKTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixvdC5yb3csb3QuY29sLEl0KSwoIUl0LmlzVG91Y2hlZCgpfHxJdC5pc1RvdWNo''@;'; put 'put ''ZWQoKSYmIUl0LnZhbHVlKSYmZmUuc2Nyb2xsVG8ob3QpLEouY2xvc2VFZGl0b3IoKSxjLnZpZXcucmVuZGVyKCksSi5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLG90PT57Y29uc3QgSXQ9b3QubGVuZ3RoLTEs''@;'; put 'put ''e2Zyb206VXQsdG86RW59PW90W0l0XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZCIsVXQucm93LFV0LmNvbCxFbi5yb3csRW4uY29sLEl0KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsVXQucm93LGMuY29sVG9Qcm9wKFV0LmNvbCksRW4ucm93LGMu''@;'; put 'put ''Y29sVG9Qcm9wKEVuLmNvbCksSXQpLCJyZWZyZXNoIj09PWlyLmdldFNlbGVjdGlvblNvdXJjZSgpJiYoYy52aWV3LnJlbmRlcigpLEoucHJlcGFyZUVkaXRvcigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixvdD0+e2NvbnN0IEl0''@;'; put 'put ''PXRoaXMucnVuSG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsb3QudmFsdWUpO290LnZhbHVlJiYob3QudmFsdWU9SXQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IiwoKT0+e0ouY2xvc2VFZGl0b3IoKSxjLnZpZXcucmVuZGVyKCksSGEodGhp''@;'; put 'put ''cy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRoaXMucnVuSG9va3MoImFmdGVyRGVzZWxlY3QiKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlSGlnaGxpZ2h0U2V0IiwoKT0+dGhpcy5ydW5Ib29rcygi''@;'; put 'put ''YmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IikpLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIG90PWFyZ3VtZW50cy5sZW5ndGgsSXQ9bmV3IEFycmF5KG90KSxVdD0wO1V0PG90O1V0KyspSXRbVXRdPWFyZ3VtZW50c1tVdF07cmV0dXJu''@;'; put 'put ''IGkucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLC4uLkl0KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBvdD1hcmd1bWVudHMubGVuZ3RoLEl0PW5ldyBBcnJheShvdCksVXQ9MDtVdDxvdDtVdCsrKUl0W1V0XT1hcmd1''@;'; put 'put ''bWVudHNbVXRdO3JldHVybiBpLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsLi4uSXQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIG90PWFyZ3VtZW50cy5sZW5ndGgsSXQ9bmV3IEFycmF5KG90KSxVdD0wO1V0PG90O1V0''@;'; put 'put ''KyspSXRbVXRdPWFyZ3VtZW50c1tVdF07cmV0dXJuIGkucnVuSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIiwuLi5JdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBvdD1hcmd1bWVudHMubGVuZ3RoLEl0PW5ldyBBcnJheShvdCksVXQ9''@;'; put 'put ''MDtVdDxvdDtVdCsrKUl0W1V0XT1hcmd1bWVudHNbVXRdO3JldHVybiBpLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwuLi5JdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIG90PWFyZ3VtZW50cy5sZW5ndGgsSXQ9bmV3IEFy''@;'; put 'put ''cmF5KG90KSxVdD0wO1V0PG90O1V0KyspSXRbVXRdPWFyZ3VtZW50c1tVdF07cmV0dXJuIGkucnVuSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsLi4uSXQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgb3Q9YXJndW1lbnRzLmxlbmd0aCxJ''@;'; put 'put ''dD1uZXcgQXJyYXkob3QpLFV0PTA7VXQ8b3Q7VXQrKylJdFtVdF09YXJndW1lbnRzW1V0XTtyZXR1cm4gaS5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Um93cyIsLi4uSXQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBvdD1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLEl0PW5ldyBBcnJheShvdCksVXQ9MDtVdDxvdDtVdCsrKUl0W1V0XT1hcmd1bWVudHNbVXRdO3JldHVybiBpLnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLkl0KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2VsZWN0QWxsIixmdW5jdGlvbigpe2Zvcih2YXIgb3Q9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxJdD1uZXcgQXJyYXkob3QpLFV0PTA7VXQ8b3Q7VXQrKylJdFtVdF09YXJndW1lbnRzW1V0XTtyZXR1cm4gaS5ydW5Ib29rcygiYmVmb3JlU2VsZWN0QWxsIiwuLi5JdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0QWxsIixmdW5jdGlvbigpe2Zvcih2YXIgb3Q9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxJdD1uZXcgQXJyYXkob3QpLFV0PTA7VXQ8b3Q7VXQrKylJdFtVdF09YXJndW1lbnRzW1V0XTtyZXR1cm4gaS5ydW5Ib29rcygiYWZ0ZXJTZWxlY3RBbGwiLC4uLkl0KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBvdD1hcmd1bWVudHMubGVuZ3RoLEl0PW5ldyBBcnJheShvdCksVXQ9MDtVdDxvdDtVdCsrKUl0W1V0XT1hcmd1bWVudHNbVXRdO3JldHVybiBpLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uSXQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0''@;'; put 'put ''YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgb3Q9YXJndW1lbnRzLmxlbmd0aCxJdD1uZXcgQXJyYXkob3QpLFV0PTA7VXQ8b3Q7VXQrKylJdFtVdF09YXJndW1lbnRzW1V0XTtyZXR1cm4gaS5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uSXQpfSkuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIG90PWFyZ3VtZW50cy5sZW5ndGgsSXQ9bmV3IEFycmF5KG90KSxVdD0wO1V0PG90O1V0KyspSXRbVXRdPWFyZ3VtZW50c1tVdF07cmV0dXJuIGkucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwu''@;'; put 'put ''Li5JdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBvdD1hcmd1bWVudHMubGVuZ3RoLEl0PW5ldyBBcnJheShvdCksVXQ9MDtVdDxvdDtVdCsrKUl0W1V0XT1hcmd1bWVudHNbVXRdO3JldHVybiBpLnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''ck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5JdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIG90PWFyZ3VtZW50cy5sZW5ndGgsSXQ9bmV3IEFycmF5KG90KSxVdD0wO1V0PG90O1V0KyspSXRbVXRdPWFyZ3VtZW50c1tVdF07''@;'; put 'put ''cmV0dXJuIGkucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uSXQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIG90PWFyZ3VtZW50cy5sZW5ndGgsSXQ9bmV3IEFycmF5KG90KSxVdD0wO1V0PG90O1V0KyspSXRbVXRd''@;'; put 'put ''PWFyZ3VtZW50c1tVdF07cmV0dXJuIGkucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5JdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBvdD1hcmd1bWVudHMubGVuZ3RoLEl0PW5ldyBBcnJheShvdCksVXQ9MDtVdDxvdDtV''@;'; put 'put ''dCsrKUl0W1V0XT1hcmd1bWVudHNbVXRdO3JldHVybiBpLnJ1bkhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5JdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBvdD1hcmd1bWVudHMubGVuZ3RoLEl0PW5ldyBBcnJheShvdCksVXQ9MDtVdDxv''@;'; put 'put ''dDtVdCsrKUl0W1V0XT1hcmd1bWVudHNbVXRdO3JldHVybiBpLnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5JdCl9KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLG90PT50aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixvdCwxLCJhdXRvIikpLmFkZExvY2FsSG9v''@;'; put 'put ''aygiaW5zZXJ0Q29sUmVxdWlyZSIsb3Q9PnRoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLG90LDEsImF1dG8iKSksWT17YWx0ZXIob3QsSXQpe2xldCBVdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxFbj1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxhcj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBFdD1adD0+e2lmKDA9PT1adC5sZW5ndGgpcmV0dXJuW107Y29uc3QgZm49Wy4uLlp0XTtyZXR1cm4gZm4uc29ydCgoa24sX24pPT57bGV0W2dyXT1rbixbeG5d''@;'; put 'put ''PV9uO3JldHVybiBncj09PXhuPzA6Z3I+eG4/MTotMX0pLGQwKGZuLChrbixfbik9PntsZXRbZ3IseG5dPV9uO2NvbnN0IG5yPWtuW2tuLmxlbmd0aC0xXSxbeHIsX3JdPW5yLGZpPXhyK19yO2lmKGdyPD1maSl7Y29uc3QgQ2E9TWF0aC5tYXgoeG4tKGZpLWdyKSwwKTtuclsxXSs9Q2F9ZWxz''@;'; put 'put ''ZSBrbi5wdXNoKFtncix4bl0pO3JldHVybiBrbn0sW2ZuWzBdXSl9O3N3aXRjaChvdCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOmNvbnN0IFp0PWMuY291bnRTb3VyY2VSb3dzKCk7aWYoRnQubWF4Um93cz09PVp0KXJldHVybjtjb25zdCBmbj0iaW5z''@;'; put 'put ''ZXJ0X3Jvd19iZWxvdyI9PT1vdD8iYmVsb3ciOiJhYm92ZSI7SXQ9SXQ/PygiYmVsb3ciPT09Zm4/WnQ6MCk7Y29uc3R7ZGVsdGE6WG4sc3RhcnRQaHlzaWNhbEluZGV4OmtufT1DLmNyZWF0ZVJvdyhJdCxVdCx7c291cmNlOkVuLG1vZGU6Zm59KTtpci5zaGlmdFJvd3MoYy50b1Zpc3VhbFJv''@;'; put 'put ''dyhrbiksWG4pO2JyZWFrO2Nhc2UiaW5zZXJ0X2NvbF9zdGFydCI6Y2FzZSJpbnNlcnRfY29sX2VuZCI6Y29uc3QgX249Imluc2VydF9jb2xfZW5kIj09PW90PyJlbmQiOiJzdGFydCI7SXQ9SXQ/PygiZW5kIj09PV9uP2MuY291bnRTb3VyY2VDb2xzKCk6MCk7Y29uc3R7ZGVsdGE6Z3Isc3Rh''@;'; put 'put ''cnRQaHlzaWNhbEluZGV4OnhufT1DLmNyZWF0ZUNvbChJdCxVdCx7c291cmNlOkVuLG1vZGU6X259KTtpZihncil7aWYoQXJyYXkuaXNBcnJheShGdC5jb2xIZWFkZXJzKSl7Y29uc3QgX3I9W2MudG9WaXN1YWxDb2x1bW4oeG4pLDBdO19yLmxlbmd0aCs9Z3IsQXJyYXkucHJvdG90eXBlLnNw''@;'; put 'put ''bGljZS5hcHBseShGdC5jb2xIZWFkZXJzLF9yKX1pci5zaGlmdENvbHVtbnMoYy50b1Zpc3VhbENvbHVtbih4biksZ3IpfWJyZWFrO2Nhc2UicmVtb3ZlX3JvdyI6Y29uc3QgbnI9X3I9PntsZXQgZmk9MDtZbihfcixDYT0+e2xldFtjYSxmb109Q2E7Y29uc3QgY3M9R2MoY2EpP2MuY291bnRS''@;'; put 'put ''b3dzKCktMTpNYXRoLm1heChjYS1maSwwKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGNhKSYmKGNhPU1hdGgubWF4KGNhLWZpLDApKSwhQy5yZW1vdmVSb3coY2EsZm8sRW4pKXJldHVybjtpZihpci5pc1NlbGVjdGVkKCkpe2NvbnN0e3Jvdzp6YX09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCku''@;'; put 'put ''aGlnaGxpZ2h0O3phPj1jYSYmemE8PWNhK2ZvLTEmJkouY2xvc2VFZGl0b3IoITApfWNvbnN0IFNvPWMuY291bnRSb3dzKCksZXM9RnQuZml4ZWRSb3dzVG9wO2VzPj1jcysxJiYoRnQuZml4ZWRSb3dzVG9wLT1NYXRoLm1pbihmbyxlcy1jcykpO2NvbnN0IFpzPUZ0LmZpeGVkUm93c0JvdHRv''@;'; put 'put ''bTtpZihacyYmY3M+PVNvLVpzJiYoRnQuZml4ZWRSb3dzQm90dG9tLT1NYXRoLm1pbihmbyxacykpLDA9PT1Tbylpci5kZXNlbGVjdCgpO2Vsc2UgaWYoIkNvbnRleHRNZW51LnJlbW92ZVJvdyI9PT1Fbil7Y29uc3QgemE9aXIuZ2V0U2VsZWN0ZWRSYW5nZSgpLE8wPXphLnBvcCgpO3phLmNs''@;'; put 'put ''ZWFyKCkuc2V0KE8wLmZyb20pLmN1cnJlbnQoKS5zZXRUbyhPMC50byksaXIucmVmcmVzaCgpfWVsc2UgaXIuc2hpZnRSb3dzKGNhLC1mbyk7ZmkrPWZvfSl9O0FycmF5LmlzQXJyYXkoSXQpP25yKEV0KEl0KSk6bnIoW1tJdCxVdF1dKTticmVhaztjYXNlInJlbW92ZV9jb2wiOmNvbnN0IHhy''@;'; put 'put ''PV9yPT57bGV0IGZpPTA7WW4oX3IsQ2E9PntsZXRbY2EsZm9dPUNhO2NvbnN0IGNzPUdjKGNhKT9jLmNvdW50Q29scygpLTE6TWF0aC5tYXgoY2EtZmksMCk7bGV0IEdvPWMudG9QaHlzaWNhbENvbHVtbihjcyk7aWYoTnVtYmVyLmlzSW50ZWdlcihjYSkmJihjYT1NYXRoLm1heChjYS1maSww''@;'; put 'put ''KSksIUMucmVtb3ZlQ29sKGNhLGZvLEVuKSlyZXR1cm47aWYoaXIuaXNTZWxlY3RlZCgpKXtjb25zdHtjb2w6emF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDt6YT49Y2EmJnphPD1jYStmby0xJiZKLmNsb3NlRWRpdG9yKCEwKX1pZigwPT09Yy5jb3VudENvbHMoKSlp''@;'; put 'put ''ci5kZXNlbGVjdCgpO2Vsc2UgaWYoIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiI9PT1Fbil7Y29uc3QgemE9aXIuZ2V0U2VsZWN0ZWRSYW5nZSgpLE8wPXphLnBvcCgpO3phLmNsZWFyKCkuc2V0KE8wLmZyb20pLmN1cnJlbnQoKS5zZXRUbyhPMC50byksaXIucmVmcmVzaCgpfWVsc2UgaXIu''@;'; put 'put ''c2hpZnRDb2x1bW5zKGNhLC1mbyk7Y29uc3QgWnM9RnQuZml4ZWRDb2x1bW5zU3RhcnQ7WnM+PWNzKzEmJihGdC5maXhlZENvbHVtbnNTdGFydC09TWF0aC5taW4oZm8sWnMtY3MpKSxBcnJheS5pc0FycmF5KEZ0LmNvbEhlYWRlcnMpJiYodHlwZW9mIEdvPiJ1IiYmKEdvPS0xKSxGdC5jb2xI''@;'; put 'put ''ZWFkZXJzLnNwbGljZShHbyxmbykpLGZpKz1mb30pfTtBcnJheS5pc0FycmF5KEl0KT94cihFdChJdCkpOnhyKFtbSXQsVXRdXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke290fSJgKX1hcnx8WS5hZGp1c3RSb3dzQW5kQ29scygp''@;'; put 'put ''LGMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxjLnZpZXcucmVuZGVyKCl9LGFkanVzdFJvd3NBbmRDb2xzKCl7Y29uc3Qgb3Q9RnQubWluUm93cyxJdD1GdC5taW5TcGFyZVJvd3MsVXQ9RnQubWluQ29scyxFbj1GdC5taW5TcGFyZUNvbHM7aWYob3Qpe2NvbnN0IGFyPWMuY291bnRSb3dz''@;'; put 'put ''KCk7YXI8b3QmJkMuY3JlYXRlUm93KGFyLG90LWFyLHtzb3VyY2U6ImF1dG8ifSl9aWYoSXQpe2NvbnN0IGFyPWMuY291bnRFbXB0eVJvd3MoITApO2lmKGFyPEl0KXtjb25zdCBadD1NYXRoLm1pbihJdC1hcixGdC5tYXhSb3dzLWMuY291bnRTb3VyY2VSb3dzKCkpO0MuY3JlYXRlUm93KGMu''@;'; put 'put ''Y291bnRSb3dzKCksWnQse3NvdXJjZToiYXV0byJ9KX19e2xldCBhcjsoVXR8fEVuKSYmKGFyPWMuY291bnRFbXB0eUNvbHMoITApKTtsZXQgRXQ9Yy5jb3VudENvbHMoKTtpZihVdCYmIUZ0LmNvbHVtbnMmJkV0PFV0KXtjb25zdCBadD1VdC1FdDthcis9WnQsQy5jcmVhdGVDb2woRXQsWnQs''@;'; put 'put ''e3NvdXJjZToiYXV0byJ9KX1pZihFbiYmIUZ0LmNvbHVtbnMmJiJhcnJheSI9PT1jLmRhdGFUeXBlJiZhcjxFbil7RXQ9Yy5jb3VudENvbHMoKTtjb25zdCBmbj1NYXRoLm1pbihFbi1hcixGdC5tYXhDb2xzLUV0KTtDLmNyZWF0ZUNvbChFdCxmbix7c291cmNlOiJhdXRvIn0pfX19LHBvcHVs''@;'; put 'put ''YXRlRnJvbUFycmF5KG90LEl0LFV0LEVuLGFyKXtsZXQgRXQsWnQsZm4sWG47Y29uc3Qga249W10sX249e30sZ3I9W10seG49b3Qucm93LG5yPW90LmNvbDtpZihadD1JdC5sZW5ndGgsMD09PVp0KXJldHVybiExO2xldCB4cj0wLF9yPTA7c3dpdGNoKGhvKFV0KSYmKHhyPVV0LmNvbC1ucisx''@;'; put 'put ''LF9yPVV0LnJvdy14bisxKSxhcil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCBDYT1IQShJdCksY2E9Q2EubGVuZ3RoLGZvPU1hdGgubWF4KGNhLHhyKSxjcz1jLmdldERhdGEoKS5zbGljZSh4biksR289SEEoY3MpLnNsaWNlKG5yLG5yK2ZvKTtmb3IoZm49MDtmbjxmbztmbis9MSlpZihmbjxj''@;'; put 'put ''YSl7Zm9yKEV0PTAsWnQ9Q2FbZm5dLmxlbmd0aDtFdDxfci1adDtFdCs9MSlDYVtmbl0ucHVzaChDYVtmbl1bRXQlWnRdKTtnci5wdXNoKENhW2ZuXS5jb25jYXQoZm48R28ubGVuZ3RoP0dvW2ZuXTpuZXcgQXJyYXkoY3MubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBnci5wdXNoKENhW2Zu''@;'; put 'put ''JWNhXS5jb25jYXQoR29bZm5dKSk7Yy5wb3B1bGF0ZUZyb21BcnJheSh4bixucixIQShncikpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IFNvPUl0Lmxlbmd0aCxlcz1NYXRoLm1heChTbyxfciksWnM9Yy5nZXREYXRhKCkuc2xpY2UoeG4pLm1hcCh0cz0+dHMuc2xpY2UobnIpKTtm''@;'; put 'put ''b3IoRXQ9MDtFdDxlcztFdCs9MSlpZihFdDxTbyl7Zm9yKGZuPTAsWG49SXRbRXRdLmxlbmd0aDtmbjx4ci1Ybjtmbis9MSlJdFtFdF0ucHVzaChJdFtFdF1bZm4lWG5dKTtpZihFdDxacy5sZW5ndGgpZm9yKGxldCB0cz0wO3RzPFpzW0V0XS5sZW5ndGg7dHMrPTEpSXRbRXRdLnB1c2goWnNb''@;'; put 'put ''RXRdW3RzXSk7ZWxzZSBJdFtFdF0ucHVzaCguLi5uZXcgQXJyYXkoWnNbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIEl0LnB1c2goSXRbRXQlWnRdLnNsaWNlKDAsZXMpLmNvbmNhdChac1tFdF0pKTtjLnBvcHVsYXRlRnJvbUFycmF5KHhuLG5yLEl0KTticmVhaztkZWZhdWx0Ol9uLnJv''@;'; put 'put ''dz1vdC5yb3csX24uY29sPW90LmNvbDtsZXQgeWMsemE9MCxPMD0wLEpkPSEwO2NvbnN0IFFkPWZ1bmN0aW9uKFloKXtsZXQgaGc9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgRHA9SXRbWWglSXQubGVuZ3RoXTtyZXR1''@;'; put 'put ''cm4gbnVsbCE9PWhnP0RwW2hnJURwLmxlbmd0aF06RHB9LEpsPUl0Lmxlbmd0aCxRbD1VdD9VdC5yb3ctb3Qucm93KzE6MDtmb3IoWnQ9VXQ/UWw6TWF0aC5tYXgoSmwsUWwpLEV0PTA7RXQ8WnQmJiEoVXQmJl9uLnJvdz5VdC5yb3cmJlFsPkpsfHwhRnQuYWxsb3dJbnNlcnRSb3cmJl9uLnJv''@;'; put 'put ''dz5jLmNvdW50Um93cygpLTF8fF9uLnJvdz49RnQubWF4Um93cyk7RXQrKyl7Y29uc3QgdHM9RXQtemEsWWg9UWQodHMpLmxlbmd0aCxoZz1VdD9VdC5jb2wtb3QuY29sKzE6MDtpZihYbj1VdD9oZzpNYXRoLm1heChZaCxoZyksX24uY29sPW90LmNvbCx5Yz1jLmdldENlbGxNZXRhKF9uLnJv''@;'; put 'put ''dyxfbi5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09RW4mJiJBdXRvZmlsbC5maWxsIiE9PUVufHwheWMuc2tpcFJvd09uUGFzdGUpe2ZvcihPMD0wLGZuPTA7Zm48WG47Zm4rKyl7dmFyIGZpO2lmKFV0JiZfbi5jb2w+VXQuY29sJiZoZz5ZaHx8IUZ0LmFsbG93SW5zZXJ0Q29sdW1uJiZfbi5j''@;'; put 'put ''b2w+Yy5jb3VudENvbHMoKS0xfHxfbi5jb2w+PUZ0Lm1heENvbHMpYnJlYWs7aWYoeWM9Yy5nZXRDZWxsTWV0YShfbi5yb3csX24uY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Fbnx8IkF1dG9maWxsLmZpbGwiPT09RW4pJiZ5Yy5za2lwQ29sdW1uT25QYXN0ZSl7TzArPTEsX24uY29sKz0x''@;'; put 'put ''LFhuKz0xO2NvbnRpbnVlfWlmKHljLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Fbil7X24uY29sKz0xO2NvbnRpbnVlfWNvbnN0IFg1PSEheWMudmFsdWVTZXR0ZXI7bGV0IEdoPVFkKHRzLGZuLU8wKSxtMD1udWxsIT09KGZpPWMuZ2V0U291cmNlRGF0YUF0Q2VsbChfbi5yb3csX24u''@;'; put 'put ''Y29sKSkmJnZvaWQgMCE9PWZpP2ZpOm51bGw7aWYobnVsbCE9PUdoJiYib2JqZWN0Ij09dHlwZW9mIEdoKWlmKEFycmF5LmlzQXJyYXkoR2gpJiZudWxsPT09bTAmJihtMD1bXSksWDV8fCJvYmplY3QiPT10eXBlb2YgbTAmJm51bGwhPT1tMCl7aWYobnVsbCE9PW0wKXtjb25zdCBKUz1oQyhB''@;'; put 'put ''cnJheS5pc0FycmF5KG0wKT9tMDptMFswXXx8bTApLEJ0PWhDKEFycmF5LmlzQXJyYXkoR2gpP0doOkdoWzBdfHxHaCk7WDV8fFVBKEpTLEJ0KXx8QXJyYXkuaXNBcnJheShKUykmJkFycmF5LmlzQXJyYXkoQnQpP0doPXRkKEdoKTpKZD0hMX19ZWxzZSBKZD0hMTtlbHNlIVg1JiZudWxsIT09''@;'; put 'put ''bTAmJiJvYmplY3QiPT10eXBlb2YgbTAmJihKZD0hMSk7SmQmJmtuLnB1c2goW19uLnJvdyxfbi5jb2wsR2hdKSxKZD0hMCxfbi5jb2wrPTF9X24ucm93Kz0xfWVsc2UgemErPTEsX24ucm93Kz0xLFp0Kz0xfWMuc2V0RGF0YUF0Q2VsbChrbixudWxsLG51bGwsRW58fCJwb3B1bGF0ZUZyb21B''@;'; put 'put ''cnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe1Auc2V0RGF0YShGdC5kYXRhKSxjLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKHNwKCl8fGlOKCkpJiZ0aShjLnJvb3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKEhlLCEwKSx0aGlzLnZpZXc9bmV3IFhjdCh0aGlz''@;'; put 'put ''KSxKPUFvdC5nZXRJbnN0YW5jZShjLEZ0LGlyKSxmZT1mdW5jdGlvbiBfMXQobil7Y29uc3R7c2VsZWN0aW9uOnR9PW47bGV0IGU9ITEscj0hMTtyZXR1cm57cmVzdW1lKCl7cj0hMX0sc3VzcGVuZCgpe3I9ITB9LHNraXBOZXh0U2Nyb2xsQ3ljbGUoKXtlPSEwfSxzY3JvbGxUbyhpKXt2YXIg''@;'; put 'put ''YTtpZihlfHxyKXJldHVybiB2b2lkKGU9ITEpO2xldCBjO3QuaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKT9jPWZ1bmN0aW9uIHAxdChuKXtyZXR1cm4gdD0+e24uc2Nyb2xsVmlld3BvcnRUbyh0LnRvT2JqZWN0KCksKCk9Pntjb25zdCBlPW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lm''@;'; put 'put ''KCFlKXJldHVybjtjb25zdHtyb3c6cixjb2w6aX09ZS5oaWdobGlnaHQ7RkMobi5nZXRDZWxsKHIsaSwhMCkpfSl9fShuKTp0LmlzU2VsZWN0ZWRCeUNvcm5lcigpP2M9KCk9Pnt9OnQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/Yz1mdW5jdGlvbiB2MXQobil7cmV0dXJuIHQ9Pntjb25zdCBl''@;'; put 'put ''PWlWKG4pLmdldENvbXB1dGVkUm93VGFyZ2V0KHQpO24uc2Nyb2xsVmlld3BvcnRUbyh7cm93OmV9LCgpPT57Y29uc3Qgcj0hIW4uZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzO0ZDKG4uZ2V0Q2VsbChlLHI/LTE6MCwhMCkpfSl9fShuKTp0LmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP2M9''@;'; put 'put ''ZnVuY3Rpb24gaDF0KG4pe3JldHVybiB0PT57Y29uc3QgZT1pVihuKS5nZXRDb21wdXRlZENvbHVtblRhcmdldCh0KTtuLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDplfSwoKT0+e2NvbnN0IHI9ISFuLmdldFNldHRpbmdzKCkuY29sSGVhZGVycztGQyhuLmdldENlbGwocj8tMTowLGUsITApKX0p''@;'; put 'put ''fX0obik6MT09PXQuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKSYmdC5pc011bHRpcGxlKCk/Yz1mdW5jdGlvbiBnMXQobil7cmV0dXJuIHQ9Pntjb25zdCBlPWlWKG4pLHI9e3JvdzplLmdldENvbXB1dGVkUm93VGFyZ2V0KHQpLGNvbDplLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KHQpfTtu''@;'; put 'put ''LnNjcm9sbFZpZXdwb3J0VG8ociwoKT0+e2NvbnN0e3JvdzppLGNvbDphfT1yO0ZDKG4uZ2V0Q2VsbChpLGEsITApKX0pfX0obik6MSE9PXQuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKXx8dC5pc011bHRpcGxlKCk/dC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpPjEmJihjPWZ1bmN0aW9u''@;'; put 'put ''IG0xdChuKXtyZXR1cm4gdD0+e2NvbnN0IGU9aVYobikscj17cm93OmUuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQodCksY29sOmUuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQodCl9O24uc2Nyb2xsVmlld3BvcnRUbyhyLCgpPT57Y29uc3R7cm93OmksY29sOmF9PXI7RkMobi5nZXRDZWxsKGksYSwh''@;'; put 'put ''MCkpfSl9fShuKSk6Yz1mdW5jdGlvbiB5MXQobil7cmV0dXJuIHQ9Pntjb25zdCBlPW4uc2VsZWN0aW9uLmdldFNlbGVjdGlvblNvdXJjZSgpLHtyb3c6cixjb2w6aX09dCxhPSgpPT57RkMobi5nZXRDZWxsKHIsaSwhMCkpfTtpZihyPDAmJmk+PTApbi5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6''@;'; put 'put ''aX0sYSk7ZWxzZSBpZihpPDAmJnI+PTApbi5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6cn0sYSk7ZWxzZXtpZigibW91c2UiPT09ZSYmKGk9PT1uLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXx8cj09PW4udmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSlyZXR1''@;'; put 'put ''cm47bi5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6cixjb2w6aX0sYSl9fX0obiksbnVsbD09PShhPWMpfHx2b2lkIDA9PT1hfHxhKGkpfX19KGMpLGNlLmluaXQoKSxrNCh0aGlzKSYmKGZ1bmN0aW9uICRkdChuKXtpZighTzIpe08yPW4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi''@;'; put 'put ''KSxPMi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJzdGF0dXMiKSxPMi5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsImFzc2VydGl2ZSIpLE8yLnNldEF0dHJpYnV0ZSgiYXJpYS1hdG9taWMiLCJ0cnVlIik7Y29uc3QgZT1PMi5zdHlsZTtlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS53aWR0aD0iMXB4''@;'; put 'put ''IixlLmhlaWdodD0iMXB4IixlLm1hcmdpbj0iLTFweCIsZS5vdmVyZmxvdz0iaGlkZGVuIixlLmNsaXBQYXRoPSJyZWN0KDAgMCAwIDApIixlLndoaXRlU3BhY2U9Im5vd3JhcCIsbi5hcHBlbmRDaGlsZChPMil9cFYrPTF9KGMucm9vdFBvcnRhbEVsZW1lbnQpLFBnZShIZS5saWNlbnNlS2V5''@;'; put 'put ''LHRoaXMucm9vdFdyYXBwZXJFbGVtZW50KSksYy5ydW5Ib29rcygiaW5pdCIpLHRoaXMucmVuZGVyKCksQWUmJm51bGw9PT1jLnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmaDVlKGMucm9vdEVsZW1lbnQsKCk9PntjLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6''@;'; put 'put ''ZSgpLGMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxjLnJlbmRlcigpfSksIm9iamVjdCI9PXR5cGVvZiBBZSYmKGMucnVuSG9va3MoImFmdGVyQ2hhbmdlIixBZVswXSxBZVsxXSksQWU9ITEpLGMucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0''@;'; put 'put ''aW9uKG90LEl0KXtyZXR1cm4gYy52aWV3Ll93dC5jcmVhdGVDZWxsQ29vcmRzKG90LEl0KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKG90LEl0LFV0KXtyZXR1cm4gYy52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2Uob3QsSXQsVXQpfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlv''@;'; put 'put ''bihvdCxJdCxVdCxFbil7bGV0IGFyPWMuZ2V0Q2VsbFZhbGlkYXRvcihJdCk7ZnVuY3Rpb24gRXQoWnQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PUl0LmhpZGRlbilyZXR1cm4gdm9pZCBVdChadCk7Y29uc3QgWG49''@;'; put 'put ''SXQudmlzdWFsQ29sLGtuPUl0LnZpc3VhbFJvdyxfbj1jLmdldENlbGwoa24sWG4sITApO2lmKF9uJiYiVEgiIT09X24ubm9kZU5hbWUpe2NvbnN0IGdyPWMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChrbikseG49Yy5jb2x1bW5JbmRleE1hcHBlci5nZXRS''@;'; put 'put ''ZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFhuKTtjLnZpZXcuX3d0LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIsZ3IseG4sX24pfVV0KFp0KX1EZ2UoYXIpJiYoYXI9ZnVuY3Rpb24oWnQpe3JldHVybiBmdW5jdGlvbihmbixYbil7WG4oWnQudGVzdChmbikpfX0oYXIpKSxhbChhcik/KG90''@;'; put 'put ''PWMucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIixvdCxJdC52aXN1YWxSb3csSXQucHJvcCxFbiksYy5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnthci5jYWxsKEl0LG90LFp0PT57YyYmKFp0PWMucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLFp0LG90LEl0LnZpc3VhbFJvdyxJdC5wcm9wLEVu''@;'; put 'put ''KSxJdC52YWxpZD1adCxFdChadCksYy5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRhdGUiLFp0LG90LEl0LnZpc3VhbFJvdyxJdC5wcm9wLEVuKSl9KX0pKTpjLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e0l0LnZhbGlkPSEwLEV0KEl0LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9''@;'; put 'put ''ZnVuY3Rpb24ob3QsSXQsVXQsRW4pe2NvbnN0IGFyPWJpKG90LEl0LFV0KSxFdD1bXTtsZXQgZm4sWG4sa24sWnQ9RW47Zm9yKGZuPTAsWG49YXIubGVuZ3RoO2ZuPFhuO2ZuKyspe2NvbnN0W2dyLHhuLG5yXT1hcltmbl07aWYoIm9iamVjdCIhPXR5cGVvZiBhcltmbl0pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7aWYoIm51bWJlciIhPXR5cGVvZiB4bil0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNj''@;'; put 'put ''ZXB0cyByb3cgYW5kIGNvbHVtbiBudW1iZXIgYXMgaXRzIHBhcmFtZXRlcnMuIElmIHlvdSB3YW50IHRvIHVzZSBvYmplY3QgcHJvcGVydHkgbmFtZSwgdXNlIG1ldGhvZCBgc2V0RGF0YUF0Um93UHJvcGAiKTtrbj14bj49dGhpcy5jb3VudENvbHMoKT94bjpDLmNvbFRvUHJvcCh4biksRXQu''@;'; put 'put ''cHVzaChbZ3Isa24sUC5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KGdyKSx4biksbnJdKX0hWnQmJiJvYmplY3QiPT10eXBlb2Ygb3QmJihadD1JdCk7Y29uc3QgX249U2koRXQsWnQpO2MucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIsX24sWnQpLERyKF9uLFp0LCgpPT57WnIo''@;'; put 'put ''X24sWnQpfSl9LHRoaXMuc2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbihvdCxJdCxVdCxFbil7Y29uc3QgYXI9Ymkob3QsSXQsVXQpLEV0PVtdO2xldCBmbixYbixadD1Fbjtmb3IoZm49MCxYbj1hci5sZW5ndGg7Zm48WG47Zm4rKyl7Y29uc3RbX24sZ3IseG5dPWFyW2ZuXTtFdC5wdXNoKFtf''@;'; put 'put ''bixncixQLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coX24pLGdyKSx4bl0pfSFadCYmIm9iamVjdCI9PXR5cGVvZiBvdCYmKFp0PUl0KTtjb25zdCBrbj1TaShFdCxFbik7Yy5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixrbixadCksRHIoa24sWnQsKCk9Pntacihrbixa''@;'; put 'put ''dCl9KX0sdGhpcy5saXN0ZW49ZnVuY3Rpb24oKXtjJiYhYy5pc0xpc3RlbmluZygpJiYoUnRlLmZvckVhY2gob3Q9PntjIT09b3QmJm90LnVubGlzdGVuKCl9KSxJdGU9Yy5ndWlkLGMucnVuSG9va3MoImFmdGVyTGlzdGVuIikpfSx0aGlzLnVubGlzdGVuPWZ1bmN0aW9uKCl7dGhpcy5pc0xp''@;'; put 'put ''c3RlbmluZygpJiYoSXRlPW51bGwsYy5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlvbigpe3JldHVybiBJdGU9PT1jLmd1aWR9LHRoaXMuZGVzdHJveUVkaXRvcj1mdW5jdGlvbigpe2xldCBJdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO0ouY2xvc2VFZGl0b3IoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksYy52aWV3LnJlbmRlcigpLEl0JiZpci5pc1NlbGVjdGVkKCkmJkoucHJlcGFyZUVkaXRvcigpfSx0aGlzLnBv''@;'; put 'put ''cHVsYXRlRnJvbUFycmF5PWZ1bmN0aW9uKG90LEl0LFV0LEVuLGFyLEV0LFp0KXtpZigib2JqZWN0IiE9dHlwZW9mIFV0fHwib2JqZWN0IiE9dHlwZW9mIFV0WzBdKXRocm93IG5ldyBFcnJvcigicG9wdWxhdGVGcm9tQXJyYXkgcGFyYW1ldGVyIGBpbnB1dGAgbXVzdCBiZSBhbiBhcnJheSBv''@;'; put 'put ''ZiBhcnJheXMiKTtjb25zdCBmbj0ibnVtYmVyIj09dHlwZW9mIEVuP2MuX2NyZWF0ZUNlbGxDb29yZHMoRW4sYXIpOm51bGw7cmV0dXJuIFkucG9wdWxhdGVGcm9tQXJyYXkoYy5fY3JlYXRlQ2VsbENvb3JkcyhvdCxJdCksVXQsZm4sRXQsWnQpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbihv''@;'; put 'put ''dCxJdCxVdCl7Zm9yKHZhciBFbj1hcmd1bWVudHMubGVuZ3RoLGFyPW5ldyBBcnJheShFbj4zP0VuLTM6MCksRXQ9MztFdDxFbjtFdCsrKWFyW0V0LTNdPWFyZ3VtZW50c1tFdF07cmV0dXJuIEMuc3BsaWNlQ29sKG90LEl0LFV0LC4uLmFyKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24ob3Qs''@;'; put 'put ''SXQsVXQpe2Zvcih2YXIgRW49YXJndW1lbnRzLmxlbmd0aCxhcj1uZXcgQXJyYXkoRW4+Mz9Fbi0zOjApLEV0PTM7RXQ8RW47RXQrKylhcltFdC0zXT1hcmd1bWVudHNbRXRdO3JldHVybiBDLnNwbGljZVJvdyhvdCxJdCxVdCwuLi5hcil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtp''@;'; put 'put ''Zihpci5pc1NlbGVjdGVkKCkpcmV0dXJuIFdzKGlyLmdldFNlbGVjdGVkUmFuZ2UoKSxvdD0+e2xldHtmcm9tOkl0LHRvOlV0fT1vdDtyZXR1cm5bSXQucm93LEl0LmNvbCxVdC5yb3csVXQuY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IG90PXRoaXMuZ2V0''@;'; put 'put ''U2VsZWN0ZWQoKTtsZXQgSXQ7cmV0dXJuIG90JiZvdC5sZW5ndGg+MCYmKEl0PW90W290Lmxlbmd0aC0xXSksSXR9LHRoaXMuZ2V0U2VsZWN0ZWRBY3RpdmU9ZnVuY3Rpb24oKXtjb25zdCBvdD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighb3QpcmV0dXJuO2NvbnN0e2Zyb206''@;'; put 'put ''SXQsdG86VXR9PW90O3JldHVybltJdC5yb3csSXQuY29sLFV0LnJvdyxVdC5jb2xdfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2U9ZnVuY3Rpb24oKXtpZihpci5pc1NlbGVjdGVkKCkpcmV0dXJuIEFycmF5LmZyb20oaXIuZ2V0U2VsZWN0ZWRSYW5nZSgpKX0sdGhpcy5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdD1mdW5jdGlvbigpe2NvbnN0IG90PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBJdDtyZXR1cm4gb3QmJm90Lmxlbmd0aD4wJiYoSXQ9b3Rbb3QubGVuZ3RoLTFdKSxJdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIGlyLmdldEFjdGl2ZVNl''@;'; put 'put ''bGVjdGVkUmFuZ2UoKX0sdGhpcy5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGlyLmdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKX0sdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHM9ZnVuY3Rpb24ob3Qpe2lmKCFpci5pc1NlbGVjdGVkKCl8fDA9PT10''@;'; put 'put ''aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgSXQ9W107WW4oaXIuZ2V0U2VsZWN0ZWRSYW5nZSgpLFV0PT57aWYoVXQuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm47Y29uc3QgRW49VXQuZ2V0VG9wU3RhcnRDb3JuZXIoKSxhcj1VdC5nZXRCb3R0b21F''@;'; put 'put ''bmRDb3JuZXIoKTtlbyhFbi5yb3csYXIucm93LEV0PT57ZW8oRW4uY29sLGFyLmNvbCxadD0+e3RoaXMuZ2V0Q2VsbE1ldGEoRXQsWnQpLnJlYWRPbmx5fHxJdC5wdXNoKFtFdCxadCxudWxsXSl9KX0pfSksSXQubGVuZ3RoPjAmJnRoaXMuc2V0RGF0YUF0Q2VsbChJdCxvdCl9LHRoaXMuaXNS''@;'; put 'put ''ZW5kZXJTdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZFJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcis9MX0sdGhpcy5yZXN1bWVSZW5kZXI9ZnVuY3Rpb24oKXtjb25zdCBvdD10''@;'; put 'put ''aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXItMTt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9TWF0aC5tYXgob3QsMCksIXRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKSYmb3Q9PT10aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXImJmMudmlldy5yZW5kZXIoKX0sdGhpcy5yZW5kZXI9ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fGMudmlldy5yZW5kZXIoKSl9LHRoaXMuYmF0Y2hSZW5kZXI9ZnVuY3Rpb24ob3Qpe3RoaXMuc3VzcGVuZFJlbmRlcigpO2NvbnN0IEl0PW90KCk7cmV0dXJuIHRoaXMu''@;'; put 'put ''cmVzdW1lUmVuZGVyKCksSXR9LHRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZEV4ZWN1dGlvbj1mdW5jdGlvbigpe3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcis9MSx0''@;'; put 'put ''aGlzLmNvbHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpfSx0aGlzLnJlc3VtZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2xldCBvdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYm''@;'; put 'put ''YXJndW1lbnRzWzBdO2NvbnN0IEl0PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heChJdCwwKSwoIXRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQoKSYmSXQ9PT10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50''@;'; put 'put ''ZXJ8fG90KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpKX0sdGhpcy5iYXRjaEV4ZWN1dGlvbj1mdW5jdGlvbihvdCl7bGV0IEl0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgVXQ9b3QoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oSXQpLFV0fSx0aGlzLmJhdGNoPWZ1bmN0aW9uKG90KXt0aGlzLnN1c3BlbmRSZW5kZXIoKSx0aGlzLnN1c3BlbmRFeGVjdXRpb24o''@;'; put 'put ''KTtjb25zdCBJdD1vdCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbigpLHRoaXMucmVzdW1lUmVuZGVyKCksSXR9LHRoaXMucmVmcmVzaERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtpZighYy52aWV3KXJldHVybjtjb25zdCBvdD1jLnZpZXcse3dpZHRoOkl0LGhlaWdodDpVdH09b3QuZ2V0''@;'; put 'put ''TGFzdFNpemUoKSx7d2lkdGg6RW4saGVpZ2h0OmFyfT1jLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEV0PUVuIT09SXR8fGFyIT09VXQ7ITEhPT1jLnJ1bkhvb2tzKCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOkl0LGhlaWdodDpVdH0se3dpZHRoOkVuLGhl''@;'; put 'put ''aWdodDphcn0sRXQpJiYoKEV0fHxvdC5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudD09PWMucm9vdFdpbmRvdykmJihvdC5zZXRMYXN0U2l6ZShFbixhciksb3QuYWRqdXN0RWxlbWVudHNTaXplKCksYy5yZW5kZXIoKSksYy5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9u''@;'; put 'put ''cyIse3dpZHRoOkl0LGhlaWdodDpVdH0se3dpZHRoOkVuLGhlaWdodDphcn0sRXQpKX0sdGhpcy51cGRhdGVEYXRhPWZ1bmN0aW9uKG90LEl0KXtBNmUob3QsVXQ9PntDPVV0fSxVdD0+e0M9VXQsYy5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5D''@;'; put 'put ''b3VudCgpKSxjLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpLFkuYWRqdXN0Um93c0FuZENvbHMoKSxpci5yZWZyZXNoKCl9LHtob3RJbnN0YW5jZTpjLGRhdGFNYXA6QyxkYXRhU291cmNlOlAsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNv''@;'; put 'put ''dXJjZTpJdCxtZXRhTWFuYWdlcjpqdCxmaXJzdFJ1bjpBZX0pfSx0aGlzLmxvYWREYXRhPWZ1bmN0aW9uKG90LEl0KXtBNmUob3QsVXQ9PntDPVV0fSwoKT0+e2p0LmNsZWFyQ2VsbHNDYWNoZSgpLGMuaW5pdEluZGV4TWFwcGVycygpLFkuYWRqdXN0Um93c0FuZENvbHMoKSxpci5yZWZyZXNo''@;'; put 'put ''KCksQWUmJihBZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0YW5jZTpjLGRhdGFNYXA6QyxkYXRhU291cmNlOlAsaW50ZXJuYWxTb3VyY2U6ImxvYWREYXRhIixzb3VyY2U6SXQsbWV0YU1hbmFnZXI6anQsZmlyc3RSdW46QWV9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtjb25zdCBvdD1GdC5jb2x1bW5zO2xldCBJdD0wO2lmKEFycmF5LmlzQXJyYXkob3QpKUl0PW90Lmxlbmd0aDtlbHNlIGlmKGFsKG90KSlpZigiYXJyYXkiPT09Yy5kYXRhVHlwZSl7Y29uc3QgVXQ9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IEVuPTA7RW48VXQ7RW4r''@;'; put 'put ''PTEpb3QoRW4pJiYoSXQrPTEpfWVsc2UoIm9iamVjdCI9PT1jLmRhdGFUeXBlfHwiZnVuY3Rpb24iPT09Yy5kYXRhVHlwZSkmJihJdD1DLmNvbFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZih3YShGdC5kYXRhU2NoZW1hKSl7Y29uc3QgVXQ9Qy5nZXRTY2hlbWEoKTtJdD1BcnJheS5pc0Fy''@;'; put 'put ''cmF5KFV0KT9VdC5sZW5ndGg6bk4oVXQpfWVsc2UgSXQ9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gSXR9LHRoaXMuaW5pdEluZGV4TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkp''@;'; put 'put ''LHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24ob3QsSXQsVXQsRW4pe3JldHVybiBtYyhvdCk/Qy5nZXRBbGwoKTpDLmdldFJhbmdlKGMuX2NyZWF0ZUNlbGxDb29yZHMob3QsSXQpLGMuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoVXQsRW4pLEMuREVTVElOQVRJT05fUkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbihvdCxJdCxVdCxFbil7cmV0dXJuIEMuZ2V0Q29weWFibGVUZXh0KGMuX2NyZWF0ZUNlbGxDb29yZHMob3QsSXQpLGMuX2NyZWF0ZUNlbGxDb29yZHMoVXQsRW4p''@;'; put 'put ''KX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24ob3QsSXQpe3JldHVybiBDLmdldENvcHlhYmxlKG90LEMuY29sVG9Qcm9wKEl0KSl9LHRoaXMuZ2V0Q29weWFibGVTb3VyY2VEYXRhPWZ1bmN0aW9uKG90LEl0KXtyZXR1cm4gUC5nZXRDb3B5YWJsZShvdCxDLmNvbFRvUHJvcChJdCkp''@;'; put 'put ''fSx0aGlzLmdldFNjaGVtYT1mdW5jdGlvbigpe3JldHVybiBDLmdldFNjaGVtYSgpfSx0aGlzLnVwZGF0ZVNldHRpbmdzPWZ1bmN0aW9uKG90KXtsZXQgSXQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBVdD0oQWU/Yy5sb2Fk''@;'; put 'put ''RGF0YTpjLnVwZGF0ZURhdGEpLmJpbmQodGhpcyk7bGV0IGFyLEV0LEVuPSExO2lmKHdhKG90LnJvd3MpKXRocm93IG5ldyBFcnJvcignVGhlICJyb3dzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Um93cywgbWluUm93cyBvciBtYXhSb3dzPycp''@;'; put 'put ''O2lmKHdhKG90LmNvbHMpKXRocm93IG5ldyBFcnJvcignVGhlICJjb2xzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Q29scywgbWluQ29scyBvciBtYXhDb2xzPycpO2lmKHdhKG90LmdhbnR0Q2hhcnQpKXRocm93IG5ldyBFcnJvcignU2luY2Ug''@;'; put 'put ''OC4wLjAgdGhlICJnYW50dENoYXJ0IiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJyk7Zm9yKGFyIGluIHdhKG90LnJvd0hlaWdodHMpJiZ3YShvdC5taW5Sb3dIZWlnaHRzKSYmb3MoIkJvdGggYHJvd0hlaWdodHNgIGFuZCBgbWluUm93SGVpZ2h0c2AgYXJlIGRlZmluZWQgaW4g''@;'; put 'put ''eW91ciBjb25maWd1cmF0aW9uLiBBcyBvbmUgaXMgdGhlIGFsaWFzIG9mIHRoZSBvdGhlciwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgdXNlZCBhdCBhIHRpbWUuIGByb3dIZWlnaHRzYCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvdyBoZWlnaHQgY29uZmlndXJhdGlvbi4iKSxvdClpZigiZGF0''@;'; put 'put ''YSIhPT1hciYmImxhbmd1YWdlIiE9PWFyKWlmKCJjbGFzc05hbWUiPT09YXIpQXIoImNsYXNzTmFtZSIsb3QuY2xhc3NOYW1lKTtlbHNlIGlmKCJ0YWJsZUNsYXNzTmFtZSI9PT1hciYmYy50YWJsZSlBcigidGFibGVDbGFzc05hbWUiLG90LnRhYmxlQ2xhc3NOYW1lKSxjLnZpZXcuX3d0Lnd0''@;'; put 'put ''T3ZlcmxheXMuc3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKTtlbHNlIGlmKEVhLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZChhcil8fEVhLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZChhcikpe2NvbnN0IF9uPW90W2FyXTthbChfbik/KEVhLmdldFNpbmdsZXRvbigpLmFkZEFz''@;'; put 'put ''Rml4ZWQoYXIsX24sYyksRnRbYXJdPV9uKTpBcnJheS5pc0FycmF5KF9uKSYmKEVhLmdldFNpbmdsZXRvbigpLmFkZChhcixfbixjKSxGdFthcl09X24pfWVsc2UhSXQmJiRjKG90LGFyKSYmKHBuW2FyXT1vdFthcl0pO2lmKEl0KWMudXNlVGhlbWUoRnQudGhlbWVOYW1lfHxVNmUoYy5yb290''@;'; put 'put ''Q29udGFpbmVyKSk7ZWxzZXtjb25zdCBfbj1jLmdldEN1cnJlbnRUaGVtZU5hbWUoKTskYyhvdCwidGhlbWVOYW1lIikmJl9uIT09b3QudGhlbWVOYW1lJiZjLnVzZVRoZW1lKG90LnRoZW1lTmFtZSl9Z1YuaGFzKGMpJiZ2b2lkIDAhPT1jLnN0eWxlc0hhbmRsZXIuZ2V0VGhlbWVOYW1lKCkm''@;'; put 'put ''JmdWLmRlbGV0ZShjKSxrNChjKSYmIWdWLmhhcyhjKSYmYy5zdHlsZXNIYW5kbGVyLmlzQ2xhc3NpY1RoZW1lKCkmJih3NWUoIlRoZSBzdHlsZXNoZWV0IHlvdSBhcmUgdXNpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMTcuMC4gUGxlYXNlIHVwZGF0''@;'; put 'put ''ZSB5b3VyIHRoZW1lIGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBmdXR1cmUgcmVsZWFzZXMuIiksZ1YuYWRkKGMpKSx2b2lkIDA9PT1vdC5kYXRhJiZ2b2lkIDA9PT1GdC5kYXRhP1V0KG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09b3QuZGF0YT9V''@;'; put 'put ''dChvdC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PW90LmNvbHVtbnMmJihDLmNyZWF0ZU1hcCgpLGMuaW5pdEluZGV4TWFwcGVycygpKSwhQWUmJm90Lmxhbmd1YWdlJiZmdW5jdGlvbiBEbihvdCl7Y29uc3QgSXQ9JG1lKG90KTtvdGUoSXQpPyhjLnJ1bkhvb2tzKCJiZWZvcmVM''@;'; put 'put ''YW5ndWFnZUNoYW5nZSIsSXQpLHBuLmxhbmd1YWdlPUl0LGMucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLEl0KSk6S21lKG90KX0ob3QubGFuZ3VhZ2UpO2NvbnN0IFp0PWMuY291bnRDb2xzKCksZm49RnQuY29sdW1ucztpZihmbiYmYWwoZm4pJiYoRW49ITApLCh2b2lkIDAhPT1v''@;'; put 'put ''dC5jZWxsfHx2b2lkIDAhPT1vdC5jZWxsc3x8dm9pZCAwIT09b3QuY29sdW1ucykmJmp0LmNsZWFyQ2FjaGUoKSxadD4wKWZvcihhcj0wLEV0PTA7YXI8WnQ7YXIrKyl7aWYoZm4pe2NvbnN0IF9uPUVuP2ZuKGFyKTpmbltFdF07X24mJmp0LnVwZGF0ZUNvbHVtbk1ldGEoRXQsX24pfUV0Kz0x''@;'; put 'put ''fXdhKG90LmNlbGwpJiZhcyhvdC5jZWxsLF9uPT57Yy5zZXRDZWxsTWV0YU9iamVjdChfbi5yb3csX24uY29sLF9uKX0pLGMucnVuSG9va3MoImFmdGVyQ2VsbE1ldGFSZXNldCIpO2xldCBYbj1jLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodDsiIiE9PVhuJiYoWG49cGFyc2VJbnQoYy5yb290''@;'; put 'put ''RWxlbWVudC5zdHlsZS5oZWlnaHQsMTApKSxJdCYmYy5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsYy5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpO2xldCBrbj1vdC5oZWln''@;'; put 'put ''aHQ7aWYodHlwZW9mIG90LmhlaWdodDwidSIpaWYoYWwoa24pJiYoa249a24oKSksa249Yy5ydW5Ib29rcygiYmVmb3JlSGVpZ2h0Q2hhbmdlIixrbiksbnVsbD09PWtuKXtjb25zdCBfbj1jLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiKTtfbiYmKF9uLmlu''@;'; put 'put ''ZGV4T2YoImhlaWdodCIpPi0xfHxfbi5pbmRleE9mKCJvdmVyZmxvdyIpPi0xKT9jLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUiLF9uKTooYy5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9IiIsYy5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iIil9ZWxzZSB2b2lkIDAhPT1r''@;'; put 'put ''biYmKGMucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PWlzTmFOKGtuKT9gJHtrbn1gOmAke2tufXB4YCxjLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKTtpZih0eXBlb2Ygb3Qud2lkdGg8InUiKXtsZXQgX249b3Qud2lkdGg7YWwoX24pJiYoX249X24oKSksX249Yy5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlV2lkdGhDaGFuZ2UiLF9uKSxjLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKF9uKT9gJHtfbn1gOmAke19ufXB4YH1JdHx8KGMudmlldyYmKGMudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKSxjLnZpZXcu''@;'; put 'put ''X3d0LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCkpLGMucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0dGluZ3MiLG90KSksWS5hZGp1c3RSb3dzQW5kQ29scygpLGMudmlldyYmIUFlJiYoYy5yZW5kZXIoKSxjLnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLCFJ''@;'; put 'put ''dCYmYy52aWV3JiYoIiI9PT1Ybnx8IiI9PT1rbnx8dm9pZCAwPT09a24pJiZYbiE9PWtuJiZjLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7Y29uc3Qgb3Q9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZl''@;'; put 'put ''KCk7aWYoRnQuZ2V0VmFsdWUpe2lmKGFsKEZ0LmdldFZhbHVlKSlyZXR1cm4gRnQuZ2V0VmFsdWUuY2FsbChjKTtpZihvdClyZXR1cm4gYy5nZXREYXRhKClbb3QuaGlnaGxpZ2h0LnJvd11bRnQuZ2V0VmFsdWVdfWVsc2UgaWYob3QpcmV0dXJuIGMuZ2V0RGF0YUF0Q2VsbChvdC5oaWdobGln''@;'; put 'put ''aHQucm93LG90LmhpZ2hsaWdodC5jb2wpO3JldHVybiBudWxsfSx0aGlzLmdldFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIEZ0fSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RBbGwoKSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscygpfSx0aGlzLmFsdGVyPWZ1bmN0aW9uKG90''@;'; put 'put ''LEl0LFV0LEVuLGFyKXtZLmFsdGVyKG90LEl0LFV0LEVuLGFyKX0sdGhpcy5nZXRDZWxsPWZ1bmN0aW9uKG90LEl0KXtsZXQgVXQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxFbj1JdCxhcj1vdDtpZihJdD49MCl7aWYodGhpcy5jb2x1''@;'; put 'put ''bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxDb2x1bW4oSXQpKSlyZXR1cm4gbnVsbDtFbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSXQpfWlmKG90Pj0wKXtpZih0aGlzLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRo''@;'; put 'put ''aXMudG9QaHlzaWNhbFJvdyhvdCkpKXJldHVybiBudWxsO2FyPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChvdCl9cmV0dXJuIG51bGw9PT1hcnx8bnVsbD09PUVufHx2b2lkIDA9PT1hcnx8dm9pZCAwPT09RW4/bnVsbDpjLnZpZXcuZ2V0Q2VsbEF0''@;'; put 'put ''Q29vcmRzKGMuX2NyZWF0ZUNlbGxDb29yZHMoYXIsRW4pLFV0KX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rpb24ob3Qpe2NvbnN0IEl0PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHMob3QpO2lmKG51bGw9PT1JdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6VXQsY29sOkVufT1JdDtsZXQg''@;'; put 'put ''YXI9VXQsRXQ9RW47cmV0dXJuIFV0Pj0wJiYoYXI9dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFV0KSksRW4+PTAmJihFdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRW4pKSxjLl9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGFyLEV0KX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24ob3Qpe3JldHVybiBDLmNvbFRvUHJvcChvdCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKG90KXtyZXR1cm4gQy5wcm9wVG9Db2wob3QpfSx0aGlzLnRvVmlzdWFsUm93PW90PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZp''@;'; put 'put ''c3VhbEZyb21QaHlzaWNhbEluZGV4KG90KSx0aGlzLnRvVmlzdWFsQ29sdW1uPW90PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KG90KSx0aGlzLnRvUGh5c2ljYWxSb3c9b3Q9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlz''@;'; put 'put ''dWFsSW5kZXgob3QpLHRoaXMudG9QaHlzaWNhbENvbHVtbj1vdD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChvdCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKG90LEl0KXtyZXR1cm4gQy5nZXQob3QsQy5jb2xUb1Byb3AoSXQpKX0sdGhp''@;'; put 'put ''cy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKG90LEl0KXtyZXR1cm4gQy5nZXQob3QsSXQpfSx0aGlzLmdldERhdGFBdENvbD1mdW5jdGlvbihvdCl7Y29uc3QgSXQ9W10sVXQ9Qy5nZXRSYW5nZShjLl9jcmVhdGVDZWxsQ29vcmRzKDAsb3QpLGMuX2NyZWF0ZUNlbGxDb29yZHMoRnQuZGF0''@;'; put 'put ''YS5sZW5ndGgtMSxvdCksQy5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBFbj0wO0VuPFV0Lmxlbmd0aDtFbis9MSlmb3IobGV0IGFyPTA7YXI8VXRbRW5dLmxlbmd0aDthcis9MSlJdC5wdXNoKFV0W0VuXVthcl0pO3JldHVybiBJdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9u''@;'; put 'put ''KG90KXtjb25zdCBJdD1bXSxVdD1DLmdldFJhbmdlKGMuX2NyZWF0ZUNlbGxDb29yZHMoMCxDLnByb3BUb0NvbChvdCkpLGMuX2NyZWF0ZUNlbGxDb29yZHMoRnQuZGF0YS5sZW5ndGgtMSxDLnByb3BUb0NvbChvdCkpLEMuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgRW49MDtFbjxV''@;'; put 'put ''dC5sZW5ndGg7RW4rPTEpZm9yKGxldCBhcj0wO2FyPFV0W0VuXS5sZW5ndGg7YXIrPTEpSXQucHVzaChVdFtFbl1bYXJdKTtyZXR1cm4gSXR9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbihvdCxJdCxVdCxFbil7bGV0IGFyO3JldHVybiBhcj12b2lkIDA9PT1vdD9QLmdldERhdGEoKTpQ''@;'; put 'put ''LmdldEJ5UmFuZ2UoYy5fY3JlYXRlQ2VsbENvb3JkcyhvdCxJdCksYy5fY3JlYXRlQ2VsbENvb3JkcyhVdCxFbikpLGFyfSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbihvdCxJdCxVdCxFbil7bGV0IGFyO3JldHVybiBhcj12b2lkIDA9PT1vdD9QLmdldERhdGEoITApOlAuZ2V0''@;'; put 'put ''QnlSYW5nZShjLl9jcmVhdGVDZWxsQ29vcmRzKG90LEl0KSxjLl9jcmVhdGVDZWxsQ29vcmRzKFV0LEVuKSwhMCksYXJ9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKG90KXtyZXR1cm4gUC5nZXRBdENvbHVtbihvdCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlv''@;'; put 'put ''bihvdCxJdCxVdCxFbil7Y29uc3QgYXI9Ymkob3QsSXQsVXQpLEV0PXRoaXMuaGFzSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksWnQ9W10sZm49KGtuLF9uKT0+e2NvbnN0IGdyPXRoaXMudG9WaXN1YWxSb3coa24pLHhuPXRoaXMudG9WaXN1YWxDb2x1bW4oX24pO3JldHVybiBO''@;'; put 'put ''dW1iZXIuaXNJbnRlZ2VyKHhuKT90aGlzLmdldENlbGxNZXRhKGdyLHhuKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKEZ0KSwuLi5GdH19O0V0JiZZbihhcixrbj0+e2xldFtfbixncix4bl09a247Y29uc3QgbnI9eXRlKHhuLGZuKF9uLGdyKSk7WnQucHVzaChbX24sZ3IsUC5nZXRBdENl''@;'; put 'put ''bGwoX24sZ3IpLG5yXSl9KSxZbihhcixrbj0+e2xldFtfbixncix4bl09a247Y29uc3QgbnI9eXRlKHhuLGZuKF9uLGdyKSk7UC5zZXRBdENlbGwoX24sZ3IsbnIpfSksRXQmJnRoaXMucnVuSG9va3MoImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsWnQsRW4pLHRoaXMucmVuZGVyKCk7Y29u''@;'; put 'put ''c3QgWG49Yy5nZXRBY3RpdmVFZGl0b3IoKTtYbiYmd2EoWG4ucmVmcmVzaFZhbHVlKSYmWG4ucmVmcmVzaFZhbHVlKCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Um93PWZ1bmN0aW9uKG90KXtyZXR1cm4gUC5nZXRBdFJvdyhvdCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbihv''@;'; put 'put ''dCxJdCl7cmV0dXJuIFAuZ2V0QXRDZWxsKG90LEl0KX0sdGhpcy5nZXREYXRhQXRSb3c9ZnVuY3Rpb24ob3Qpe3JldHVybiBDLmdldFJhbmdlKGMuX2NyZWF0ZUNlbGxDb29yZHMob3QsMCksYy5fY3JlYXRlQ2VsbENvb3JkcyhvdCx0aGlzLmNvdW50Q29scygpLTEpLEMuREVTVElOQVRJT05f''@;'; put 'put ''UkVOREVSRVIpWzBdfHxbXX0sdGhpcy5nZXREYXRhVHlwZT1mdW5jdGlvbihvdCxJdCxVdCxFbil7Y29uc3QgYXI9dm9pZCAwPT09b3Q/WzAsMCx0aGlzLmNvdW50Um93cygpLHRoaXMuY291bnRDb2xzKCldOltvdCxJdCxVdCxFbl0sW0V0LFp0XT1hcjtsZXRbLCxmbixYbl09YXIsa249bnVs''@;'; put 'put ''bCxfbj1udWxsO3ZvaWQgMD09PWZuJiYoZm49RXQpLHZvaWQgMD09PVhuJiYoWG49WnQpO2xldCBncj0ibWl4ZWQiO3JldHVybiBlbyhNYXRoLm1heChNYXRoLm1pbihFdCxmbiksMCksTWF0aC5tYXgoRXQsZm4pLHhuPT57bGV0IG5yPSEwO3JldHVybiBlbyhNYXRoLm1heChNYXRoLm1pbiha''@;'; put 'put ''dCxYbiksMCksTWF0aC5tYXgoWnQsWG4pLHhyPT4oX249dGhpcy5nZXRDZWxsTWV0YSh4bix4cikudHlwZSxrbj9ucj1rbj09PV9uOmtuPV9uLG5yKSksZ3I9bnI/X246Im1peGVkIixucn0pLGdyfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKG90LEl0LFV0KXtjb25zdFtFbixhcl09''@;'; put 'put ''W3RoaXMudG9QaHlzaWNhbFJvdyhvdCksdGhpcy50b1BoeXNpY2FsQ29sdW1uKEl0KV07bGV0IEV0PWp0LmdldENlbGxNZXRhS2V5VmFsdWUoRW4sYXIsVXQpOyExIT09Yy5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLG90LEl0LFV0LEV0KSYmKGp0LnJlbW92ZUNlbGxNZXRhKEVu''@;'; put 'put ''LGFyLFV0KSxjLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNlbGxNZXRhIixvdCxJdCxVdCxFdCkpLEV0PW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNNZXRhPWZ1bmN0aW9uKG90KXtsZXQgSXQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Zm9y''@;'; put 'put ''KHZhciBVdD1hcmd1bWVudHMubGVuZ3RoLEVuPW5ldyBBcnJheShVdD4yP1V0LTI6MCksYXI9MjthcjxVdDthcisrKUVuW2FyLTJdPWFyZ3VtZW50c1thcl07aWYoRW4ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KEVuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNl''@;'; put 'put ''bGxNZXRhUm93cykgaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtJdD4wJiZqdC5yZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KG90KSxJdCksRW4ubGVuZ3RoPjAmJlluKEVuLnJldmVyc2UoKSxFdD0+e2p0LmNyZWF0ZVJvdyh0''@;'; put 'put ''aGlzLnRvUGh5c2ljYWxSb3cob3QpKSxZbihFdCwoWnQsZm4pPT50aGlzLnNldENlbGxNZXRhT2JqZWN0KG90LGZuLFp0KSl9KSxjLnJlbmRlcigpfSx0aGlzLnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKG90LEl0LFV0KXsib2JqZWN0Ij09dHlwZW9mIFV0JiZhcyhVdCwoRW4sYXIpPT57''@;'; put 'put ''dGhpcy5zZXRDZWxsTWV0YShvdCxJdCxhcixFbil9KX0sdGhpcy5zZXRDZWxsTWV0YT1mdW5jdGlvbihvdCxJdCxVdCxFbil7aWYoITE9PT1jLnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIsb3QsSXQsVXQsRW4pKXJldHVybjtsZXQgRXQ9b3QsWnQ9SXQ7b3Q8dGhpcy5jb3VudFJvd3Mo''@;'; put 'put ''KSYmKEV0PXRoaXMudG9QaHlzaWNhbFJvdyhvdCkpLEl0PHRoaXMuY291bnRDb2xzKCkmJihadD10aGlzLnRvUGh5c2ljYWxDb2x1bW4oSXQpKSxqdC5zZXRDZWxsTWV0YShFdCxadCxVdCxFbiksYy5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIsb3QsSXQsVXQsRW4pfSx0aGlzLmdldENl''@;'; put 'put ''bGxzTWV0YT1mdW5jdGlvbigpe3JldHVybiBqdC5nZXRDZWxsc01ldGEoKX0sdGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbihvdCxJdCl7bGV0IFV0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7c2tpcE1ldGFFeHRlbnNpb246ITF9LEVu''@;'; put 'put ''PXRoaXMudG9QaHlzaWNhbFJvdyhvdCksYXI9dGhpcy50b1BoeXNpY2FsQ29sdW1uKEl0KTtyZXR1cm4gbnVsbD09PUVuJiYoRW49b3QpLG51bGw9PT1hciYmKGFyPUl0KSxqdC5nZXRDZWxsTWV0YShFbixhcix7dmlzdWFsUm93Om90LHZpc3VhbENvbHVtbjpJdCwuLi5VdH0pfSx0aGlzLmdl''@;'; put 'put ''dENvbHVtbk1ldGE9ZnVuY3Rpb24ob3Qpe3JldHVybiBqdC5nZXRDb2x1bW5NZXRhKHRoaXMudG9QaHlzaWNhbENvbHVtbihvdCkpfSx0aGlzLmdldENlbGxNZXRhQXRSb3c9ZnVuY3Rpb24ob3Qpe3JldHVybiBqdC5nZXRDZWxsc01ldGFBdFJvdyhvdCl9LHRoaXMuaXNDb2x1bW5Nb2RpZmlj''@;'; put 'put ''YXRpb25BbGxvd2VkPWZ1bmN0aW9uKCl7cmV0dXJuISgib2JqZWN0Ij09PWMuZGF0YVR5cGV8fEZ0LmNvbHVtbnMpfSx0aGlzLmdldENlbGxSZW5kZXJlcj1mdW5jdGlvbihvdCxJdCl7Y29uc3QgVXQ9Im51bWJlciI9PXR5cGVvZiBvdD9jLmdldENlbGxNZXRhKG90LEl0KS5yZW5kZXJlcjpv''@;'; put 'put ''dC5yZW5kZXJlcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFV0P3ZOKFV0KTptYyhVdCk/dk4oInRleHQiKTpVdH0sdGhpcy5nZXRDZWxsRWRpdG9yPWZ1bmN0aW9uKG90LEl0KXtjb25zdCBVdD0ibnVtYmVyIj09dHlwZW9mIG90P2MuZ2V0Q2VsbE1ldGEob3QsSXQpLmVkaXRvcjpvdC5lZGl0''@;'; put 'put ''b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBVdD9wTihVdCk6bWMoVXQpP3BOKCJ0ZXh0Iik6VXR9LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1mdW5jdGlvbihvdCxJdCl7Y29uc3QgVXQ9Im51bWJlciI9PXR5cGVvZiBvdD9jLmdldENlbGxNZXRhKG90LEl0KS52YWxpZGF0b3I6b3QudmFsaWRh''@;'; put 'put ''dG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgVXQ/T0ooVXQpOlV0fSx0aGlzLnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24ob3Qpe3RoaXMuX3ZhbGlkYXRlQ2VsbHMob3QpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbihvdCxJdCl7aWYoIUFycmF5LmlzQXJyYXkob3QpKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigidmFsaWRhdGVSb3dzIHBhcmFtZXRlciBgcm93c2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoSXQsb3QpfSx0aGlzLnZhbGlkYXRlQ29sdW1ucz1mdW5jdGlvbihvdCxJdCl7aWYoIUFycmF5LmlzQXJyYXkob3QpKXRocm93IG5ldyBFcnJvcigidmFsaWRh''@;'; put 'put ''dGVDb2x1bW5zIHBhcmFtZXRlciBgY29sdW1uc2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoSXQsdm9pZCAwLG90KX0sdGhpcy5fdmFsaWRhdGVDZWxscz1mdW5jdGlvbihvdCxJdCxVdCl7Y29uc3QgRW49bmV3IGVyO290JiYoRW4ub25RdWV1ZUVtcHR5PW90KTts''@;'; put 'put ''ZXQgYXI9Yy5jb3VudFJvd3MoKS0xO2Zvcig7YXI+PTA7KXtpZih2b2lkIDAhPT1JdCYmLTE9PT1JdC5pbmRleE9mKGFyKSl7YXItPTE7Y29udGludWV9bGV0IEV0PWMuY291bnRDb2xzKCktMTtmb3IoO0V0Pj0wOyl2b2lkIDA9PT1VdHx8LTEhPT1VdC5pbmRleE9mKEV0KT8oRW4uYWRkVmFs''@;'; put 'put ''aWRhdG9yVG9RdWV1ZSgpLGMudmFsaWRhdGVDZWxsKGMuZ2V0RGF0YUF0Q2VsbChhcixFdCksYy5nZXRDZWxsTWV0YShhcixFdCksWnQ9PntpZigiYm9vbGVhbiIhPXR5cGVvZiBadCl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyEx''@;'; put 'put ''PT09WnQmJihFbi52YWxpZD0hMSksRW4ucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9LCJ2YWxpZGF0ZUNlbGxzIiksRXQtPTEpOkV0LT0xO2FyLT0xfUVuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24ob3Qpe2xldCBJdD1GdC5yb3dIZWFkZXJz''@;'; put 'put ''LFV0PW90O3JldHVybiB2b2lkIDAhPT1VdCYmKFV0PWMucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlciIsVXQpKSx2b2lkIDA9PT1VdD8oSXQ9W10sZW8oYy5jb3VudFJvd3MoKS0xLEVuPT57SXQucHVzaChjLmdldFJvd0hlYWRlcihFbikpfSkpOkFycmF5LmlzQXJyYXkoSXQpJiZ2b2lkIDAh''@;'; put 'put ''PT1JdFtVdF0/SXQ9SXRbVXRdOmFsKEl0KT9JdD1JdChVdCk6SXQmJiJzdHJpbmciIT10eXBlb2YgSXQmJiJudW1iZXIiIT10eXBlb2YgSXQmJihJdD1VdCsxKSxJdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFGdC5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRl''@;'; put 'put ''cnM9ZnVuY3Rpb24oKXtpZihudWxsIT1GdC5jb2xIZWFkZXJzKXJldHVybiEhRnQuY29sSGVhZGVycztmb3IobGV0IG90PTAsSXQ9Yy5jb3VudENvbHMoKTtvdDxJdDtvdCsrKWlmKGMuZ2V0Q29sSGVhZGVyKG90KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rp''@;'; put 'put ''b24ob3Qpe2xldCBJdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7Y29uc3QgVXQ9Yy5ydW5Ib29rcygibW9kaWZ5Q29sSGVhZGVyIixvdCk7aWYodm9pZCAwPT09VXQpe2NvbnN0IGZuPVtdLFhuPWMuY291bnRDb2xzKCk7Zm9yKGxl''@;'; put 'put ''dCBrbj0wO2tuPFhuO2tuKyspZm4ucHVzaChjLmdldENvbEhlYWRlcihrbikpO3JldHVybiBmbn1sZXQgRW49RnQuY29sSGVhZGVycztjb25zdCBFdD1jLnRvUGh5c2ljYWxDb2x1bW4oVXQpLFp0PWZ1bmN0aW9uKGZuKXtjb25zdCBYbj1bXSxrbj1jLmNvdW50Q29scygpO2xldCBfbj0wO2Zv''@;'; put 'put ''cig7X248a247X24rKylhbChGdC5jb2x1bW5zKSYmRnQuY29sdW1ucyhfbikmJlhuLnB1c2goX24pO3JldHVybiBYbltmbl19KEV0KTtyZXR1cm4hMT09PUZ0LmNvbEhlYWRlcnM/RW49bnVsbDpGdC5jb2x1bW5zJiZhbChGdC5jb2x1bW5zKSYmRnQuY29sdW1ucyhadCkmJkZ0LmNvbHVtbnMo''@;'; put 'put ''WnQpLnRpdGxlP0VuPUZ0LmNvbHVtbnMoWnQpLnRpdGxlOkZ0LmNvbHVtbnMmJkZ0LmNvbHVtbnNbRXRdJiZGdC5jb2x1bW5zW0V0XS50aXRsZT9Fbj1GdC5jb2x1bW5zW0V0XS50aXRsZTpBcnJheS5pc0FycmF5KEZ0LmNvbEhlYWRlcnMpJiZ2b2lkIDAhPT1GdC5jb2xIZWFkZXJzW0V0XT9F''@;'; put 'put ''bj1GdC5jb2xIZWFkZXJzW0V0XTphbChGdC5jb2xIZWFkZXJzKT9Fbj1GdC5jb2xIZWFkZXJzKEV0KTpGdC5jb2xIZWFkZXJzJiYic3RyaW5nIiE9dHlwZW9mIEZ0LmNvbEhlYWRlcnMmJiJudW1iZXIiIT10eXBlb2YgRnQuY29sSGVhZGVycyYmKEVuPUROKFV0KSksRW49Yy5ydW5Ib29rcygi''@;'; put 'put ''bW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLEVuLG90LEl0KSxFbn0sdGhpcy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3M9ZnVuY3Rpb24ob3Qpe2xldCBJdDtpZihvdD49MCYmKEl0PWMuZ2V0Q2VsbE1ldGEoMCxvdCkud2lkdGgpLCh2b2lkIDA9PT1JdHx8SXQ9PT1GdC53aWR0aCkmJihJdD1G''@;'; put 'put ''dC5jb2xXaWR0aHMpLG51bGwhPUl0KXtzd2l0Y2godHlwZW9mIEl0KXtjYXNlIm9iamVjdCI6SXQ9SXRbb3RdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOkl0PUl0KG90KX0ic3RyaW5nIj09dHlwZW9mIEl0JiYoSXQ9TnVtYmVyLnBhcnNlSW50KEl0LDEwKSl9cmV0dXJuIEl0fSx0aGlzLmdldENv''@;'; put 'put ''bFdpZHRoPWZ1bmN0aW9uKG90LEl0KXtsZXQgVXQ9Yy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3Mob3QpO3JldHVybiBVdD1jLnJ1bkhvb2tzKCJtb2RpZnlDb2xXaWR0aCIsVXQsb3QsSXQpLHZvaWQgMD09PVV0JiYoVXQ9NTApLFV0fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9''@;'; put 'put ''ZnVuY3Rpb24ob3Qpe3ZhciBJdDtjb25zdCBVdD1jLnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodChvdCk7bGV0IEVuPW51bGwhPT0oSXQ9RnQucm93SGVpZ2h0cykmJnZvaWQgMCE9PUl0P0l0OkZ0Lm1pblJvd0hlaWdodHM7aWYobnVsbCE9RW4pe3N3aXRjaCh0eXBlb2YgRW4p''@;'; put 'put ''e2Nhc2Uib2JqZWN0IjpFbj1FbltvdF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6RW49RW4ob3QpfSJzdHJpbmciPT10eXBlb2YgRW4mJihFbj1OdW1iZXIucGFyc2VJbnQoRW4sMTApKX1yZXR1cm4gbnVsbCE9RW4mJkVuPFV0P1V0OkVufSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbihvdCxJ''@;'; put 'put ''dCl7bGV0IFV0PWMuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyhvdCk7cmV0dXJuIFV0PWMucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsVXQsb3QsSXQpLFV0fSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBQLmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNl''@;'; put 'put ''Q29scz1mdW5jdGlvbigpe3JldHVybiBQLmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRoaXMuY291bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEMuZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3Qgb3Q9RnQubWF4Q29scyxJdD10aGlzLmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKG90LEl0KX0sdGhpcy5jb3VudFJlbmRlcmVkUm93cz1mdW5jdGlvbigpe3JldHVybiBjLnZpZXcuX3d0LmRyYXduP2Mudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpOi0xfSx0aGlzLmNv''@;'; put 'put ''dW50VmlzaWJsZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gYy52aWV3Ll93dC5kcmF3bj9jLnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZVJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50UmVuZGVyZWRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGMudmlldy5fd3QuZHJhd24/Yy52aWV3Ll93dC53''@;'; put 'put ''dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlQ29scz1mdW5jdGlvbigpe3JldHVybiBjLnZpZXcuX3d0LmRyYXduP2Mudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRSb3dIZWFkZXJzPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5nZXRSb3dIZWFkZXJzQ291bnQoKX0sdGhpcy5jb3VudENvbEhlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50RW1wdHlSb3dzPWZ1bmN0aW9uKCl7bGV0IG90PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sSXQ9MDtyZXR1cm4gQUooYy5jb3VudFJvd3MoKS0xLFV0PT57aWYoYy5pc0VtcHR5Um93KFV0KSlJdCs9MTtlbHNlIGlmKCEwPT09b3QpcmV0dXJuITF9KSxJdH0sdGhpcy5jb3VudEVtcHR5Q29scz1m''@;'; put 'put ''dW5jdGlvbigpe2xldCBvdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLEl0PTA7cmV0dXJuIEFKKGMuY291bnRDb2xzKCktMSxVdD0+e2lmKGMuaXNFbXB0eUNvbChVdCkpSXQrPTE7ZWxzZSBpZighMD09PW90KXJldHVybiExfSksSXR9''@;'; put 'put ''LHRoaXMuaXNFbXB0eVJvdz1mdW5jdGlvbihvdCl7cmV0dXJuIEZ0LmlzRW1wdHlSb3cuY2FsbChjLG90KX0sdGhpcy5pc0VtcHR5Q29sPWZ1bmN0aW9uKG90KXtyZXR1cm4gRnQuaXNFbXB0eUNvbC5jYWxsKGMsb3QpfSx0aGlzLnNlbGVjdENlbGw9ZnVuY3Rpb24ob3QsSXQsVXQsRW4pe2xl''@;'; put 'put ''dCBhcj0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdLEV0PSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07cmV0dXJuIW1jKG90KSYmIW1jKEl0KSYmdGhpcy5zZWxlY3RDZWxs''@;'; put 'put ''cyhbW290LEl0LFV0LEVuXV0sYXIsRXQpfSx0aGlzLnNlbGVjdENlbGxzPWZ1bmN0aW9uKCl7bGV0IG90PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbW11dLFV0PSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''Ml0pfHxhcmd1bWVudHNbMl07ITE9PT0oIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSkmJmZlLnN1c3BlbmQoKTtjb25zdCBFbj1pci5zZWxlY3RDZWxscyhvdCk7cmV0dXJuIEVuJiZVdCYmYy5saXN0ZW4oKSxmZS5yZXN1bWUoKSxF''@;'; put 'put ''bn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKG90KXtyZXR1cm4gaXIuc2VsZWN0Q29sdW1ucyhvdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06b3QsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlz''@;'; put 'put ''LnNlbGVjdFJvd3M9ZnVuY3Rpb24ob3Qpe3JldHVybiBpci5zZWxlY3RSb3dzKG90LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHRoaXMuZGVzZWxlY3RDZWxs''@;'; put 'put ''PWZ1bmN0aW9uKCl7aXIuZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgb3Q9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxJdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06b3QsVXQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7ZmUuc2tpcE5leHRTY3JvbGxDeWNsZSgpLGlyLnNlbGVjdEFsbChvdCxJdCxVdCl9O2NvbnN0IGpyPShvdCxJdCk9Pm90LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChJdCwxLCEwKTt0aGlz''@;'; put 'put ''LnNjcm9sbFZpZXdwb3J0VG89ZnVuY3Rpb24ob3QsSXQpe3ZhciBVdDsibnVtYmVyIj09dHlwZW9mIG90JiYob3Q9e3Jvdzphcmd1bWVudHNbMF0sY29sOmFyZ3VtZW50c1sxXSx2ZXJ0aWNhbFNuYXA6YXJndW1lbnRzWzJdPyJib3R0b20iOiJ0b3AiLGhvcml6b250YWxTbmFwOmFyZ3VtZW50''@;'; put 'put ''c1szXT8iZW5kIjoic3RhcnQiLGNvbnNpZGVySGlkZGVuSW5kZXhlczpudWxsPT09KFV0PWFyZ3VtZW50c1s0XSl8fHZvaWQgMD09PVV0fHxVdH0pO2NvbnN0e3JvdzpFbixjb2w6YXIsY29uc2lkZXJIaWRkZW5JbmRleGVzOkV0fT1vdD8/e307bGV0IFp0PUVuLGZuPWFyO2lmKGFsKEl0KSYm''@;'; put 'put ''dGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLEl0KSx2b2lkIDA9PT1FdHx8RXQpe2NvbnN0IGdyPU51bWJlci5pc0ludGVnZXIoRW4pJiZFbj49MCx4bj1OdW1iZXIuaXNJbnRlZ2VyKGFyKSYmYXI+PTAsbnI9Z3I/anIodGhpcy5yb3dJbmRleE1hcHBlcixFbik6dm9pZCAwLHhyPXhu''@;'; put 'put ''P2pyKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIsYXIpOnZvaWQgMDtpZihudWxsPT09bnJ8fG51bGw9PT14cilyZXR1cm4hMTtadD1ncj9jLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobnIpOkVuLGZuPXhuP2MuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVy''@;'; put 'put ''YWJsZUZyb21WaXN1YWxJbmRleCh4cik6YXJ9Y29uc3QgWG49TnVtYmVyLmlzSW50ZWdlcihadCksa249TnVtYmVyLmlzSW50ZWdlcihmbik7bGV0IF9uPSExO3JldHVybiBYbiYmWnQ+PTAmJmtuJiZmbj49MD9fbj1jLnZpZXcuc2Nyb2xsVmlld3BvcnQoYy5fY3JlYXRlQ2VsbENvb3Jkcyha''@;'; put 'put ''dCxmbiksb3QuaG9yaXpvbnRhbFNuYXAsb3QudmVydGljYWxTbmFwKTpYbiYmWnQ+PTAmJihrbiYmZm48MHx8IWtuKT9fbj1jLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KFp0LG90LnZlcnRpY2FsU25hcCk6a24mJmZuPj0wJiYoWG4mJlp0PDB8fCFYbikmJihfbj1jLnZpZXcuc2Ny''@;'; put 'put ''b2xsVmlld3BvcnRIb3Jpem9udGFsbHkoZm4sb3QuaG9yaXpvbnRhbFNuYXApKSxhbChJdCkmJihfbj90aGlzLnZpZXcucmVuZGVyKCk6KHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLEl0KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+SXQoKSkpKSxfbn0sdGhpcy5zY3JvbGxU''@;'; put 'put ''b0ZvY3VzZWRDZWxsPWZ1bmN0aW9uKG90KXtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpKXJldHVybiExO2FsKG90KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLG90KTtjb25zdHtoaWdobGlnaHQ6SXR9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLFV0PXRo''@;'; put 'put ''aXMuc2Nyb2xsVmlld3BvcnRUbyhJdC50b09iamVjdCgpKTtyZXR1cm4gVXQ/dGhpcy52aWV3LnJlbmRlcigpOmFsKG90KSYmKHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLG90KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+b3QoKSkpLFV0fSx0aGlzLmRlc3Ryb3k9ZnVuY3Rp''@;'; put 'put ''b24oKXtjLl9jbGVhclRpbWVvdXRzKCksYy5fY2xlYXJJbW1lZGlhdGVzKCksYy52aWV3JiZjLnZpZXcuZGVzdHJveSgpLFAmJlAuZGVzdHJveSgpLFA9bnVsbCxrNCh0aGlzKSYmKGZ1bmN0aW9uIEtkdCgpezAhPT1wViYmKDE9PT1wViYmKE8yLnJlbW92ZSgpLE8yPW51bGwpLHBWLT0xKX0o''@;'; put 'put ''KSx0aGlzLmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkuZGVzdHJveSgpKSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcigpLmRlc3Ryb3koKSxnbi5jbGVhcigpLGp0LmNsZWFyQ2FjaGUoKSxSdGUuZGVsZXRlKHRoaXMuZ3VpZCksbS5kZXN0cm95KCksSiYmSi5kZXN0cm95KCksYy5yb290Q29udGFp''@;'; put 'put ''bmVyJiZTNChjLnJvb3RDb250YWluZXIpLGMucm9vdFBvcnRhbEVsZW1lbnQmJmMucm9vdFBvcnRhbEVsZW1lbnQucmVtb3ZlKCksYy5iYXRjaEV4ZWN1dGlvbigoKT0+e2Mucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLGMuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgp''@;'; put 'put ''LG9uLmdldEl0ZW1zKCkuZm9yRWFjaChvdD0+e2xldFssSXRdPW90O0l0LmRlc3Ryb3koKX0pLG9uLmNsZWFyKCksYy5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxFYS5nZXRTaW5nbGV0b24oKS5kZXN0cm95KGMpLGFzKGMsKG90LEl0LFV0KT0+e2FsKG90KT9VdFtJdF09ZnVuY3Rp''@;'; put 'put ''b24gVGkob3Qpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7b3R9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApfX0oSXQpOiJndWlkIiE9PUl0JiYoVXRbSXRdPW51bGwpfSks''@;'; put 'put ''Yy5pc0Rlc3Ryb3llZD0hMCxDJiZDLmRlc3Ryb3koKSxDPW51bGwsWT1udWxsLGlyPW51bGwsSj1udWxsLGM9bnVsbH0sdGhpcy5nZXRBY3RpdmVFZGl0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gSi5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBjLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGMudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVD''@;'; put 'put ''b2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gYy52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBjLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZp''@;'; put 'put ''cnN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGMudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gYy52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdEZ1''@;'; put 'put ''bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBjLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGMudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0''@;'; put 'put ''Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGMudmlldy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBjLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3co''@;'; put 'put ''KX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gYy52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGMudmlldy5nZXRMYXN0''@;'; put 'put ''UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldFBsdWdpbj1mdW5jdGlvbihvdCl7cmV0dXJuIG9uLmdldEl0ZW0oZWQob3QpKX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKG90KXtyZXR1cm4gb3Q9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3Iu''@;'; put 'put ''UExVR0lOX0tFWTpvbi5nZXRJZChvdCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gY30sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKG90LEl0LFV0KXtFYS5nZXRTaW5nbGV0b24oKS5hZGQob3QsSXQsYyxVdCl9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbihvdCl7cmV0dXJuIEVh''@;'; put 'put ''LmdldFNpbmdsZXRvbigpLmhhcyhvdCxjKXx8RWEuZ2V0U2luZ2xldG9uKCkuaGFzKG90KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbihvdCxJdCxVdCl7RWEuZ2V0U2luZ2xldG9uKCkub25jZShvdCxJdCxjLFV0KX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKG90LEl0KXtFYS5nZXRT''@;'; put 'put ''aW5nbGV0b24oKS5yZW1vdmUob3QsSXQsYyl9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24ob3QsSXQsVXQsRW4sYXIsRXQsWnQpe3JldHVybiBFYS5nZXRTaW5nbGV0b24oKS5ydW4oYyxvdCxJdCxVdCxFbixhcixFdCxadCl9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbihvdCxJ''@;'; put 'put ''dCl7cmV0dXJuIGk2ZShGdC5sYW5ndWFnZSxvdCxJdCl9LHRoaXMudG9IVE1MPSgpPT54Sih0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3Qgb3Q9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIG90Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0''@;'; put 'put ''ZXJiZWdpbiIseEoodGhpcykpLG90LmZpcnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMudXNlVGhlbWU9b3Q9Pntjb25zdCBJdD0hIUFlO3RoaXMuc3R5bGVzSGFuZGxlci51c2VUaGVtZShvdCk7Y29uc3QgVXQ9dGhpcy5zdHlsZXNIYW5kbGVyLmdldFRoZW1lTmFtZSgp''@;'; put 'put ''O0l0fHwoYy5yZW5kZXIoKSxjLnNjcm9sbFZpZXdwb3J0VG8oMCwwKSxVNmUodGhpcy5yb290Q29udGFpbmVyKSYmKEhhKHRoaXMucm9vdENvbnRhaW5lciwvaHQtdGhlbWUtLiovZyksVXQmJnRpKHRoaXMucm9vdENvbnRhaW5lcixVdCkpKSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFRoZW1l''@;'; put 'put ''IixVdCxJdCl9LHRoaXMuZ2V0Q3VycmVudFRoZW1lTmFtZT0oKT0+dGhpcy5zdHlsZXNIYW5kbGVyLmdldFRoZW1lTmFtZSgpLHRoaXMuZ2V0VGFibGVIZWlnaHQ9KCk9PnRoaXMucm9vdEVsZW1lbnQub2Zmc2V0SGVpZ2h0LHRoaXMuZ2V0VGFibGVXaWR0aD0oKT0+dGhpcy5yb290RWxlbWVu''@;'; put 'put ''dC5vZmZzZXRXaWR0aCx0aGlzLl9yZWdpc3RlclRpbWVvdXQ9ZnVuY3Rpb24ob3Qpe2xldCBVdD1vdDsiZnVuY3Rpb24iPT10eXBlb2YgVXQmJihVdD1zZXRUaW1lb3V0KFV0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowKSksdGhpcy50''@;'; put 'put ''aW1lb3V0cy5wdXNoKFV0KX0sdGhpcy5fY2xlYXJUaW1lb3V0cz1mdW5jdGlvbigpe1luKHRoaXMudGltZW91dHMsb3Q9PntjbGVhclRpbWVvdXQob3QpfSl9LHRoaXMuaW1tZWRpYXRlcz1bXSx0aGlzLl9yZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbihvdCl7dGhpcy5pbW1lZGlhdGVzLnB1''@;'; put 'put ''c2goc2V0SW1tZWRpYXRlKG90KSl9LHRoaXMuX2NsZWFySW1tZWRpYXRlcz1mdW5jdGlvbigpe1luKHRoaXMuaW1tZWRpYXRlcyxvdD0+e2NsZWFySW1tZWRpYXRlKG90KX0pfSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaz1mdW5jdGlvbihvdCl7dGhpcy5yb290V2luZG93LnF1ZXVlTWljcm90''@;'; put 'put ''YXNrKCgpPT57dGhpcy5pc0Rlc3Ryb3llZHx8b3QoKX0pfSx0aGlzLl9nZXRFZGl0b3JNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIEp9O2NvbnN0IGxhPShuPT57bGV0e293bmVyV2luZG93OnQsaGFuZGxlRXZlbnQ6ZSxiZWZvcmVLZXlEb3duOnIsYWZ0ZXJLZXlEb3duOml9PW47Y29uc3Qg''@;'; put 'put ''YT1uayh7ZXJyb3JJZEV4aXN0czpYZT0+YFRoZSAiJHtYZX0iIGNvbnRleHQgbmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xldCBjPSJncmlkIjtjb25zdCBtPWZ1bmN0aW9uKFhlKXtjb25zdCBkdD1mdW5jdGlvbihuKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InRhYmxlIjtjb25zdCBlPW5rKHtlcnJvcklkRXhpc3RzOlA9PmBUaGUgIiR7UH0iIHNob3J0Y3V0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgIiR7bn0iIGNvbnRleHQuYH0pLHI9ZnVuY3Rpb24oKXtsZXR7a2V5czpQLGNhbGxiYWNr''@;'; put 'put ''OlksZ3JvdXA6SixydW5Pbmx5SWY6Y2U9KCk9PiEwLGNhcHR1cmVDdHJsOmZlPSExLHByZXZlbnREZWZhdWx0OkFlPSEwLHN0b3BQcm9wYWdhdGlvbjpIZT0hMSxyZWxhdGl2ZVRvR3JvdXA6WGUscG9zaXRpb246cnQsZm9yd2FyZFRvQ29udGV4dDpkdH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKG1jKEopKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIHRoZSBzaG9ydGN1dCdzIGdyb3VwLiIpO2lmKCExPT09YWwoWSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2hvcnRjdXQncyBjYWxsYmFjayBuZWVk''@;'; put 'put ''cyB0byBiZSBhIGZ1bmN0aW9uLiIpO2lmKCExPT09QXJyYXkuaXNBcnJheShQKSl0aHJvdyBuZXcgRXJyb3IoZWxgUGFzcyB0aGUgc2hvcnRjdXRcJ3Mga2V5cyBhcyBhbiBhcnJheSBvZiBhcnJheXMsXHgyMAogICAgICB1c2luZyB0aGUgS2V5Ym9hcmRFdmVudC5rZXkgcHJvcGVydGllczpc''@;'; put 'put ''eDIwCiAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzLmApO2NvbnN0IGp0PXtjYWxsYmFjazpZLGdyb3VwOkoscnVuT25seUlmOmNlLGNhcHR1cmVDdHJsOmZlLHByZXZlbnREZWZhdWx0OkFl''@;'; put 'put ''LHN0b3BQcm9wYWdhdGlvbjpIZX07d2EoWGUpJiYoanQucmVsYXRpdmVUb0dyb3VwPVhlLGp0LnBvc2l0aW9uPXJ0KSxFdGUoZHQpJiYoanQuZm9yd2FyZFRvQ29udGV4dD1kdCksUC5mb3JFYWNoKEZ0PT57Y29uc3QgcG49ZFYoRnQpO2lmKGUuaGFzSXRlbShwbikpe2NvbnN0IGduPWUuZ2V0''@;'; put 'put ''SXRlbShwbik7bGV0IFpuPWduLmZpbmRJbmRleChHcj0+R3IuZ3JvdXA9PT1YZSk7LTEhPT1abj8iYmVmb3JlIj09PXJ0P1puLT0xOlpuKz0xOlpuPWduLmxlbmd0aCxnbi5zcGxpY2UoWm4sMCxqdCl9ZWxzZSBlLmFkZEl0ZW0ocG4sW2p0XSl9KX0sYT1QPT57Y29uc3QgWT1kVihQKTtlLnJl''@;'; put 'put ''bW92ZUl0ZW0oWSl9O3JldHVybntfX2tpbmRPZjpCNmUsc2NvcGU6dCxhZGRTaG9ydGN1dDpyLGFkZFNob3J0Y3V0czpmdW5jdGlvbihQKXtsZXQgWT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307UC5mb3JFYWNoKEo9PnthcyhZLChj''@;'; put 'put ''ZSxmZSk9PnshMT09PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChKLGZlKSYmKEpbZmVdPVlbZmVdKX0pLHIoSil9KX0sZ2V0U2hvcnRjdXRzOlA9Pntjb25zdCBZPWRWKFApLEo9ZS5nZXRJdGVtKFkpO3JldHVybiB3YShKKT9KLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0''@;'; put 'put ''OlA9Pntjb25zdCBZPWRWKFApO3JldHVybiBlLmhhc0l0ZW0oWSl9LHJlbW92ZVNob3J0Y3V0c0J5S2V5czphLHJlbW92ZVNob3J0Y3V0c0J5R3JvdXA6UD0+e2UuZ2V0SXRlbXMoKS5mb3JFYWNoKEo9PntsZXRbY2UsZmVdPUo7Y29uc3QgQWU9ZmUuZmlsdGVyKEhlPT5IZS5ncm91cCE9PVAp''@;'; put 'put ''OzA9PT1BZS5sZW5ndGg/YSgobj0+bi5zcGxpdCgiKyIpKShjZSkpOihmZS5sZW5ndGg9MCxmZS5wdXNoKC4uLkFlKSl9KX19fShYZSxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InRhYmxlIik7cmV0dXJuIGEuYWRkSXRlbShYZSxkdCks''@;'; put 'put ''ZHR9LEM9KCk9PmMsUD1YZT0+YS5nZXRJdGVtKFhlKTtsZXQgY2U9ITE7Y29uc3QgZmU9ZnVuY3Rpb24oWGUscnQpe2xldCBkdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06QygpO2NvbnN0IGp0PUV0ZShkdCk/ZHQ6UChkdCk7bGV0IEZ0''@;'; put 'put ''PSExO2lmKCFqdC5oYXNTaG9ydGN1dChydCkpcmV0dXJuIEZ0O2NvbnN0IHBuPWp0LmdldFNob3J0Y3V0cyhydCk7Zm9yKGxldCBvbj0wO29uPHBuLmxlbmd0aDtvbisrKXtjb25zdHtjYWxsYmFjazpnbixydW5Pbmx5SWY6Wm4scHJldmVudERlZmF1bHQ6R3Isc3RvcFByb3BhZ2F0aW9uOkVy''@;'; put 'put ''LGNhcHR1cmVDdHJsOlRyLGZvcndhcmRUb0NvbnRleHQ6aXJ9PXBuW29uXTtpZighMD09PVpuKFhlKSl7aWYoY2U9VHIsRnQ9ITE9PT1nbihYZSxydCksY2U9ITEsR3ImJlhlLnByZXZlbnREZWZhdWx0KCksRXImJihBMihYZSksWGUuc3RvcFByb3BhZ2F0aW9uKCkpLEZ0KWJyZWFrO2lyJiZm''@;'; put 'put ''ZShYZSxydCxpcil9fXJldHVybiBGdH0sSGU9ZnVuY3Rpb24gQjF0KG4sdCxlLHIsaSl7Y29uc3QgYT1mZT0+VjF0LmluY2x1ZGVzKGZlKSxjPWZ1bmN0aW9uKGZlKXtsZXQgQWU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBI''@;'; put 'put ''ZT1bXTtyZXR1cm4gZmUuYWx0S2V5JiZIZS5wdXNoKCJhbHQiKSxBZSYmKGZlLmN0cmxLZXl8fGZlLm1ldGFLZXkpP0hlLnB1c2goImNvbnRyb2wvbWV0YSIpOihmZS5jdHJsS2V5JiZIZS5wdXNoKCJjb250cm9sIiksZmUubWV0YUtleSYmSGUucHVzaCgibWV0YSIpKSxmZS5zaGlmdEtleSYm''@;'; put 'put ''SGUucHVzaCgic2hpZnQiKSxIZX0sbT1mZT0+e2lmKCExPT09dChmZSl8fCExPT09ZShmZSl8fDIyOT09PWZlLmtleUNvZGV8fCJzdHJpbmciIT10eXBlb2YgZmUua2V5fHx0OChmZSkpcmV0dXJuO2NvbnN0IEhlPXh0ZShmZSk7bGV0IFhlPVtdO2EoSGUpfHwoWGU9YyhmZSkpO2NvbnN0IHJ0''@;'; put 'put ''PVtIZV0uY29uY2F0KFhlKTshaShmZSxydCkmJihvTigpJiZYZS5pbmNsdWRlcygibWV0YSIpfHwhb04oKSYmWGUuaW5jbHVkZXMoImNvbnRyb2wiKSkmJmkoZmUsW0hlXS5jb25jYXQoYyhmZSwhMCkpKSxyKGZlKX0sQz1mZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgZmUua2V5KXtjb25zdCBB''@;'; put 'put ''ZT14dGUoZmUpO2EoQWUpJiZBay5wcmVzcyhBZSl9fSxQPWZlPT57aWYoInN0cmluZyI9PXR5cGVvZiBmZS5rZXkpe2NvbnN0IEFlPXh0ZShmZSk7YShBZSkmJkFrLnJlbGVhc2UoQWUpfX0sWT0oKT0+e0FrLnJlbGVhc2VBbGwoKX07cmV0dXJue21vdW50OigpPT57bGV0IGZlPW47Zm9yKGhW''@;'; put 'put ''Kz0xO2ZlOykxPT09aFYmJihmZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsQyksa2sucHVzaCh7ZXZlbnQ6ImtleWRvd24iLGxpc3RlbmVyOkN9KSxmZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAi''@;'; put 'put ''LFApLGtrLnB1c2goe2V2ZW50OiJrZXl1cCIsbGlzdGVuZXI6UH0pKSxmZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbSksZmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFkpLGZlPWc1KGZlKX0s''@;'; put 'put ''dW5tb3VudDooKT0+e2xldCBmZT1uO2ZvcihoVi09MTtmZTspe2lmKDA9PT1oVil7Zm9yKGxldCBBZT0wO0FlPGtrLmxlbmd0aDtBZSsrKXtjb25zdHtldmVudDpIZSxsaXN0ZW5lcjpYZX09a2tbQWVdO2ZlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEhl''@;'; put 'put ''LFhlKX1ray5sZW5ndGg9MH1mZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbSksZmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLFkpLGZlPWc1KGZlKX19LGlzUHJlc3NlZDpmZT0+QWsu''@;'; put 'put ''aXNQcmVzc2VkKGZlKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PkFrLnJlbGVhc2VBbGwoKX19KHQsWGU9Pntjb25zdCBydD1DKCksZHQ9RXRlKHJ0KT9ydDpQKHJ0KTtyZXR1cm4gZShYZSxkdC5zY29wZSl9LHIsaSxmZSk7cmV0dXJuIEhlLm1vdW50KCkse2FkZENvbnRleHQ6bSxnZXRBY3Rp''@;'; put 'put ''dmVDb250ZXh0TmFtZTpDLGdldENvbnRleHQ6UCxnZXRPckNyZWF0ZUNvbnRleHQ6ZnVuY3Rpb24oWGUpe3ZhciBydDtsZXQgZHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ0YWJsZSI7cmV0dXJuIG51bGwhPT0ocnQ9UChYZSkpJiZ2''@;'; put 'put ''b2lkIDAhPT1ydD9ydDptKFhlLGR0KX0sc2V0QWN0aXZlQ29udGV4dE5hbWU6WGU9PntpZighYS5oYXNJdGVtKFhlKSl0aHJvdyBuZXcgRXJyb3IoZWxgWW91J3ZlIHRyaWVkIHRvIGFjdGl2YXRlIHRoZSAiJHtYZX0iIHNob3J0Y3V0IGNvbnRleHRceDIwCiAgICAgICAgdGhhdCBkb2VzIG5v''@;'; put 'put ''dCBleGlzdC4gQmVmb3JlIGFjdGl2YXRpb24sIHJlZ2lzdGVyIHRoZSBjb250ZXh0IHVzaW5nIHRoZSAiYWRkQ29udGV4dCIgbWV0aG9kLmApO2M9WGV9LGlzQ3RybFByZXNzZWQ6KCk9PiFjZSYmKEhlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxIZS5pc1ByZXNzZWQoIm1ldGEiKSkscmVsZWFz''@;'; put 'put ''ZVByZXNzZWRLZXlzOigpPT5IZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0cm95OigpPT5IZS51bm1vdW50KCl9fSkoe2hhbmRsZUV2ZW50OigpPT5jLmlzTGlzdGVuaW5nKCksYmVmb3JlS2V5RG93bjpvdD0+dGhpcy5ydW5Ib29rcygiYmVmb3JlS2V5RG93biIsb3QpLGFmdGVyS2V5RG93''@;'; put 'put ''bjpvdD0+e3RoaXMuaXNEZXN0cm95ZWR8fGMucnVuSG9va3MoImFmdGVyRG9jdW1lbnRLZXlEb3duIixvdCl9LG93bmVyV2luZG93OnRoaXMucm9vdFdpbmRvd30pO3RoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixvdD0+eyExPT09b3QuY3RybEtleSYmITE9PT1vdC5tZXRh''@;'; put 'put ''S2V5JiZsYS5yZWxlYXNlUHJlc3NlZEtleXMoKX0pLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIGxhfSxjZT1uZXcgdzF0KGMpO2NvbnN0IEZyPWs0KHRoaXMpP0kxdChjKTpudWxsO3RoaXMuZ2V0Rm9jdXNNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIGNlfSx0''@;'; put 'put ''aGlzLmdldEZvY3VzU2NvcGVNYW5hZ2VyPWZ1bmN0aW9uKCl7aWYoIWs0KGMpKXRocm93IG5ldyBFcnJvcigiVGhlIEZvY3VzU2NvcGVNYW5hZ2VyIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB0aGUgbWFpbiBIYW5kc29udGFibGUgaW5zdGFuY2UuIik7cmV0dXJuIEZyfSxMSigpLmZvckVhY2go''@;'; put 'put ''b3Q9Pntjb25zdCBJdD1yayhvdCk7b24uYWRkSXRlbShvdCxuZXcgSXQodGhpcykpfSksZnVuY3Rpb24gamR0KG4pe1tCZHQsVmR0XS5mb3JFYWNoKHQ9PnQobikpfShjKSxrNCh0aGlzKSYmZnVuY3Rpb24gUDF0KG4pe1tPMXRdLmZvckVhY2godD0+dChuKSl9KGMpLGxhLnNldEFjdGl2ZUNv''@;'; put 'put ''bnRleHROYW1lKCJncmlkIiksRWEuZ2V0U2luZ2xldG9uKCkucnVuKGMsImNvbnN0cnVjdCIpfWZ1bmN0aW9uICQ2ZShuLHQsZSl7bi5hZGRFdmVudExpc3RlbmVyKHQsZSwhMSl9ZnVuY3Rpb24gSzZlKG4sdCxlKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLCExKX1mdW5jdGlvbiBtVihu''@;'; put 'put ''KXtyZXR1cm4gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobil9ZnVuY3Rpb24gWDZlKG4pe2NvbnN0IGU9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwLHRleHRDb250ZW50Oko9PkoudmFsdWUsLi4uYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9fSxyPW4uYm9keSxpPW4uY3JlYXRlVGV4dE5vZGUoIiIpLGE9bi5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IGM7ZnVuY3Rpb24gbSgpe3ZhciBKLGNlO2kudGV4dENvbnRlbnQ9ZS50ZXh0Q29u''@;'; put 'put ''dGVudChjKSxhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS5mb250U2l6ZT1tVihjKS5mb250U2l6ZSxhLnN0eWxlLmZvbnRGYW1pbHk9bVYoYykuZm9udEZhbWlseSxhLnN0eWxlLndoaXRlU3BhY2U9InByZSIsci5hcHBlbmRDaGlsZChhKTtjb25zdCBmZT1wYXJzZUludCgo''@;'; put 'put ''bnVsbD09PShKPW1WKGMpKXx8dm9pZCAwPT09Sj92b2lkIDA6Si5wYWRkaW5nSW5saW5lU3RhcnQpfHwwLDEwKSxBZT1wYXJzZUludCgobnVsbD09PShjZT1tVihjKSl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5wYWRkaW5nSW5saW5lRW5kKXx8MCwxMCksSGU9YS5jbGllbnRXaWR0aCtmZStB''@;'; put 'put ''ZSsxO3IucmVtb3ZlQ2hpbGQoYSk7Y29uc3QgWGU9Yy5zdHlsZTtYZS5oZWlnaHQ9YCR7ZS5taW5IZWlnaHR9cHhgLFhlLndpZHRoPWUubWluV2lkdGg+SGU/YCR7ZS5taW5XaWR0aH1weGA6SGU+ZS5tYXhXaWR0aD9gJHtlLm1heFdpZHRofXB4YDpgJHtIZX1weGA7Y29uc3QgcnQ9Yy5zY3Jv''@;'; put 'put ''bGxIZWlnaHQ/Yy5zY3JvbGxIZWlnaHQtMTowO2UubWluSGVpZ2h0PnJ0P1hlLmhlaWdodD1gJHtlLm1pbkhlaWdodH1weGA6ZS5tYXhIZWlnaHQ8cnQ/KFhlLmhlaWdodD1gJHtlLm1heEhlaWdodH1weGAsWGUub3ZlcmZsb3dZPSJ2aXNpYmxlIik6WGUuaGVpZ2h0PWAke3J0fXB4YH1mdW5j''@;'; put 'put ''dGlvbiBDKCl7bi5kZWZhdWx0Vmlldy5zZXRUaW1lb3V0KG0sMCl9cmV0dXJue2luaXQ6ZnVuY3Rpb24gWShKLGNlKXtsZXQgZmU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjPUosZnVuY3Rpb24gUChKKXtpZihKJiZKLm1pbkhlaWdo''@;'; put 'put ''dClpZigiaW5oZXJpdCI9PT1KLm1pbkhlaWdodCllLm1pbkhlaWdodD1jLmNsaWVudEhlaWdodDtlbHNle2NvbnN0IGNlPXBhcnNlSW50KEoubWluSGVpZ2h0LDEwKTtpc05hTihjZSl8fChlLm1pbkhlaWdodD1jZSl9aWYoSiYmSi5tYXhIZWlnaHQpaWYoImluaGVyaXQiPT09Si5tYXhIZWln''@;'; put 'put ''aHQpZS5tYXhIZWlnaHQ9Yy5jbGllbnRIZWlnaHQ7ZWxzZXtjb25zdCBjZT1wYXJzZUludChKLm1heEhlaWdodCwxMCk7aXNOYU4oY2UpfHwoZS5tYXhIZWlnaHQ9Y2UpfWlmKEomJkoubWluV2lkdGgpaWYoImluaGVyaXQiPT09Si5taW5XaWR0aCllLm1pbldpZHRoPWMuY2xpZW50V2lkdGg7''@;'; put 'put ''ZWxzZXtjb25zdCBjZT1wYXJzZUludChKLm1pbldpZHRoLDEwKTtpc05hTihjZSl8fChlLm1pbldpZHRoPWNlKX1pZihKJiZKLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09PUoubWF4V2lkdGgpZS5tYXhXaWR0aD1jLmNsaWVudFdpZHRoO2Vsc2V7Y29uc3QgY2U9cGFyc2VJbnQoSi5tYXhXaWR0''@;'; put 'put ''aCwxMCk7aXNOYU4oY2UpfHwoZS5tYXhXaWR0aD1jZSl9YS5maXJzdENoaWxkfHwoYS5jbGFzc05hbWU9ImF1dG9SZXNpemUiLGEuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIixhLmFwcGVuZENoaWxkKGkpKX0oY2UpLCJURVhUQVJFQSI9PT1jLm5vZGVOYW1lJiYoYy5zdHlsZS5yZXNp''@;'; put 'put ''emU9Im5vbmUiLGMuc3R5bGUuaGVpZ2h0PWAke2UubWluSGVpZ2h0fXB4YCxjLnN0eWxlLm1pbldpZHRoPWAke2UubWluV2lkdGh9cHhgLGMuc3R5bGUubWF4V2lkdGg9YCR7ZS5tYXhXaWR0aH1weGAsYy5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLGZlJiYoJDZlKGMsImlucHV0IixtKSwk''@;'; put 'put ''NmUoYywia2V5ZG93biIsQykpLG0oKX0scmVzaXplOm0sdW5PYnNlcnZlKCl7SzZlKGMsImlucHV0IixtKSxLNmUoYywia2V5ZG93biIsQyl9fX1mdW5jdGlvbiBxNmUobix0KXtjb25zdCBlPW9KKHQpLHI9dC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaT1lLGE9MDtmb3IobGV0IGM9MDtjPHIu''@;'; put 'put ''bGVuZ3RoO2MrKyl7MCE9PWMmJihhKz1yW2MtMV0ubGVuZ3RoKzEpO2NvbnN0IEM9YStyW2NdLmxlbmd0aDtpZigiaG9tZSI9PT1uP2k9YToiZW5kIj09PW4mJihpPUMpLGU8PUMpYnJlYWt9SkEodCxpKX1mdW5jdGlvbiAkdihuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gcWR0KG4pe3ZhciB0''@;'; put 'put ''PWZ1bmN0aW9uIEpkdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgdlY9Imh0X2VkaXRvcl9oaWRkZW4iLEo2ZT0idGV4dEVkaXRvciI7Y2xhc3MgS3YgZXh0ZW5kcyBWQ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7''@;'; put 'put ''cmV0dXJuInRleHQifWNvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLCR2KHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IFpmKHRoaXMpKSwkdih0aGlzLCJhdXRvUmVzaXplIixYNmUodGhpcy5ob3Qucm9vdERvY3VtZW50KSksJHYodGhpcywiVEVYVEFSRUEiLHZvaWQgMCksJHYodGhpcywidGV4dGFy''@;'; put 'put ''ZWFTdHlsZSIsdm9pZCAwKSwkdih0aGlzLCJURVhUQVJFQV9QQVJFTlQiLHZvaWQgMCksJHYodGhpcywidGV4dGFyZWFQYXJlbnRTdHlsZSIsdm9pZCAwKSwkdih0aGlzLCJsYXllckNsYXNzIix2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBaZih0aGlzKSx0aGlzLmNyZWF0ZUVsZW1l''@;'; put 'put ''bnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKHQpe3RoaXMuVEVYVEFSRUEudmFsdWU9dH1vcGVuKCl7dGhpcy5f''@;'; put 'put ''b3BlbmVkPSEwLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3Bl''@;'; put 'put ''bmVkPSExLHRoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSwkQSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0''@;'; put 'put ''cygpfXByZXBhcmUodCxlLHIsaSxhLGMpe2NvbnN0IG09dGhpcy5zdGF0ZTtpZihzdXBlci5wcmVwYXJlKHQsZSxyLGksYSxjKSwhYy5yZWFkT25seSl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucyghMCk7Y29uc3R7YWxsb3dJbnZhbGlkOkN9PWM7QyYmIXRoaXMuaXNPcGVuZWQoKSYmKHRoaXMu''@;'; put 'put ''VEVYVEFSRUEudmFsdWU9IiIpLG0hPT12dS5GSU5JU0hFRCYmIXRoaXMuaXNPcGVuZWQoKSYmdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCl9fWJlZ2luRWRpdGluZyh0LGUpe3RoaXMuc3RhdGU9PT12dS5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHN1cGVyLmJlZ2luRWRpdGlu''@;'; put 'put ''Zyh0LGUpKX1mb2N1cygpe3RoaXMuVEVYVEFSRUEuc2VsZWN0KCksSkEodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RG9jdW1lbnQ6dH09dGhpcy5ob3Q7dGhpcy5URVhUQVJFQT10LmNyZWF0ZUVsZW1lbnQoIlRF''@;'; put 'put ''WFRBUkVBIiksWmEodGhpcy5URVhUQVJFQSxbWyJkYXRhLWhvdC1pbnB1dCIsIiJdLGFwKC0xKV0pLHRpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhp''@;'; put 'put ''cy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPXQuY3JlYXRlRWxlbWVudCgiRElWIiksdGkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIiksdm8odGhp''@;'; put 'put ''cy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYmSGEodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSx0aSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx2ViksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVY''@;'; put 'put ''VEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7UWdlKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iLTk5OTk5cHgi''@;'; put 'put ''KSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4IixIYSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLHRpKHRoaXMu''@;'; put 'put ''VEVYVEFSRUFfUEFSRU5ULHZWKX1zaG93RWRpdGFibGVFbGVtZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQ''@;'; put 'put ''YXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0IjoicmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiO2NvbnN0IHQ9dGhpcy5URVhUQVJFQV9QQVJFTlQuY2hpbGROb2RlcztsZXQg''@;'; put 'put ''ZT0hMTtlbyh0Lmxlbmd0aC0xLHI9PntpZih2byh0W3JdLCJoYW5kc29udGFibGVFZGl0b3IiKSlyZXR1cm4gZT0hMCwhMX0pLHZvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHZWKSYmSGEodGhpcy5URVhUQVJFQV9QQVJFTlQsdlYpLGU/KHRoaXMubGF5ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2li''@;'; put 'put ''bGUiLHRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpOih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSx0aSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKX1yZWZyZXNoVmFsdWUoKXtjb25zdCB0PXRoaXMu''@;'; put 'put ''aG90LnRvUGh5c2ljYWxSb3codGhpcy5yb3cpLGU9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0LHRoaXMuY29sKTt0aGlzLm9yaWdpbmFsVmFsdWU9ZSx0aGlzLnNldFZhbHVlKGUpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2xldCB0PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5zdGF0ZSE9PXZ1LkVESVRJTkcmJiF0KXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkKHR8fHRoaXMuY2xvc2UoKSk7Y29uc3R7''@;'; put 'put ''dG9wOmUsc3RhcnQ6cix3aWR0aDppLG1heFdpZHRoOmEsaGVpZ2h0OmMsbWF4SGVpZ2h0Om19PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUudG9wPWAke2V9cHhgLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdo''@;'; put 'put ''dCI6ImxlZnQiXT1gJHtyfXB4YCx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKTtjb25zdCBDPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLlREKTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPUMuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250''@;'; put 'put ''RmFtaWx5PUMuZm9udEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcix0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbihpLGEpLG1pbkhlaWdodDpNYXRoLm1pbihj''@;'; put 'put ''LG0pLG1heFdpZHRoOmEsbWF4SGVpZ2h0Om19LCEwKX1iaW5kRXZlbnRzKCl7dEooKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxI''@;'; put 'put ''b3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVu''@;'; put 'put ''c2lvbnMoKSx0aGlzLnN0YXRlPT09dnUuRURJVElORyYmdGhpcy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PXZ1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pfWRlc3Ryb3koKXt0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBlPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGk9KCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2Vy''@;'; put 'put ''dFRleHQiLCExLCJcbiIpfTtlLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaSgpLCExKSxydW5Pbmx5SWY6YT0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFhLmFsdEtleX0se2tleXM6W1siTWV0YSIsIkVudGVyIl1d''@;'; put 'put ''LGNhbGxiYWNrOigpPT4oaSgpLCExKSxydW5Pbmx5SWY6KCk9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpfSx7a2V5czpbWyJBbHQiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGkoKSwhMSl9LHtrZXlzOltbIkhvbWUiXV0sY2FsbGJhY2s6KGEsYyk9PntsZXRbbV09YztxNmUo''@;'; put 'put ''bSx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkVuZCJdXSxjYWxsYmFjazooYSxjKT0+e2xldFttXT1jO3E2ZShtLHRoaXMuVEVYVEFSRUEpfX1dLHtydW5Pbmx5SWY6KCk9PndhKHRoaXMuaG90LmdldFNlbGVjdGVkKCkpLGdyb3VwOko2ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlz''@;'; put 'put ''LmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEo2ZSl9fWZ1bmN0aW9uIExrKG4sdCxlLHIsaSxhLGMpe2NvbnN0IG09Yy5hcmlhVGFncyxDPVtdLFA9W10sWT1bXSxKPVtdO2MuY2xhc3NOYW1lJiZ0aSh0LGMuY2xh''@;'; put 'put ''c3NOYW1lKSxjLnJlYWRPbmx5PyhDLnB1c2goYy5yZWFkT25seUNlbGxDbGFzc05hbWUpLG0mJkoucHVzaChbImFyaWEtcmVhZG9ubHkiLCJ0cnVlIl0pKTptJiZZLnB1c2goImFyaWEtcmVhZG9ubHkiKSwhMT09PWMudmFsaWQmJmMuaW52YWxpZENlbGxDbGFzc05hbWU/KEMucHVzaChjLmlu''@;'; put 'put ''dmFsaWRDZWxsQ2xhc3NOYW1lKSxtJiZKLnB1c2goWyJhcmlhLWludmFsaWQiLCJ0cnVlIl0pKTooUC5wdXNoKGMuaW52YWxpZENlbGxDbGFzc05hbWUpLG0mJlkucHVzaCgiYXJpYS1pbnZhbGlkIikpLCExPT09Yy53b3JkV3JhcCYmYy5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZDLnB1c2goYy5u''@;'; put 'put ''b1dvcmRXcmFwQ2xhc3NOYW1lKSwhYSYmYy5wbGFjZWhvbGRlciYmQy5wdXNoKGMucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxjLnRleHRFbGxpcHNpcyYmQy5wdXNoKCJodFRleHRFbGxpcHNpcyIpLEhhKHQsUCksdGkodCxDKSxDNCh0LFkpLFphKHQsSil9ZnVuY3Rpb24geDUobix0LGUs''@;'; put 'put ''cixpLGEsYyl7TGsuYXBwbHkodGhpcyxbbix0LGUscixpLGEsY10pO2xldCBtPWE7IW0mJmMucGxhY2Vob2xkZXImJihtPWMucGxhY2Vob2xkZXIpLG09cWwobSksYy50cmltV2hpdGVzcGFjZSYmKG09bS50cmltKCkpLFE2KHQsbSl9TGsuUkVOREVSRVJfVFlQRT0iYmFzZSIseDUuUkVOREVS''@;'; put 'put ''RVJfVFlQRT0idGV4dCI7Y29uc3QgUTZlPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjpLdixyZW5kZXJlcjp4NX07ZnVuY3Rpb24gZ3Aobix0KXtjb25zdCBlPW5ldyBHNmUobix0fHx7fSxhUSk7cmV0dXJuIGUuaW5pdCgpLGV9cWYoUTZlKSxncC5lZGl0b3JzPXtCYXNlRWRpdG9yOlZDfSxn''@;'; put 'put ''cC5Db3JlPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgRzZlKG4sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGFRKX0sZ3AuRGVmYXVsdFNldHRpbmdzPV82ZSgpLGdwLmhvb2tzPUVhLmdldFNpbmdsZXRvbigpLGdwLkNlbGxDb29yZHM9''@;'; put 'put ''Q04sZ3AuQ2VsbFJhbmdlPVNOLGdwLnBhY2thZ2VOYW1lPSJoYW5kc29udGFibGUiLGdwLmJ1aWxkRGF0ZT0iMjAvMTEvMjAyNSAxMzoyNjo1NCIsZ3AudmVyc2lvbj0iMTYuMi4wIixncC5sYW5ndWFnZXM9e2RpY3Rpb25hcnlLZXlzOkx1dCxnZXRMYW5ndWFnZURpY3Rpb25hcnk6cjZlLGdl''@;'; put 'put ''dExhbmd1YWdlc0RpY3Rpb25hcmllczpmdW5jdGlvbiBOdXQoKXtyZXR1cm4gRnV0KCl9LHJlZ2lzdGVyTGFuZ3VhZ2VEaWN0aW9uYXJ5Om42ZSxnZXRUcmFuc2xhdGVkUGhyYXNlOmk2ZX07Y29uc3QgdnM9Z3A7ZnVuY3Rpb24gZThlKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBpaHQobil7''@;'; put 'put ''dmFyIHQ9ZnVuY3Rpb24gYWh0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jb25zdCB0OGU9ImhhbmRzb250YWJsZUVkaXRvciI7Y2xhc3MgTHRlIGV4dGVuZHMgS3Z7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMp''@;'; put 'put ''LGU4ZSh0aGlzLCJpc0ZsaXBwZWRWZXJ0aWNhbGx5IiwhMSksZThlKHRoaXMsImlzRmxpcHBlZEhvcml6b250YWxseSIsITEpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iaGFuZHNvbnRhYmxlIn1vcGVuKCl7c3VwZXIub3BlbigpO2NvbnN0IHQ9dGhpcy5odENvbnRhaW5lci5z''@;'; put 'put ''dHlsZTt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5kZXN0cm95KCksdC53aWR0aD0iIix0LmhlaWdodD0iIix0Lm92ZXJmbG93PSIiKSwibm9uZSI9PT10LmRpc3BsYXkmJih0LmRpc3BsYXk9IiIpLHRoaXMuaHRFZGl0b3I9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuaHRD''@;'; put 'put ''b250YWluZXIsdGhpcy5odE9wdGlvbnMpLHRoaXMuaHRFZGl0b3IuaW5pdCgpLHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIix0aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwoMCwwKTp0aGlzLmh0RWRpdG9yLmRlc2Vs''@;'; put 'put ''ZWN0Q2VsbCgpLEpBKHRoaXMuVEVYVEFSRUEsMCx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCksdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRUYXJnZXREcm9wZG93bldpZHRoKCksaGVpZ2h0OnRoaXMuZ2V0VGFyZ2V0RHJvcGRvd25IZWlnaHQoKX0pLHRo''@;'; put 'put ''aXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLmZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpLHRoaXMuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5SWZOZWVkZWQoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9''@;'; put 'put ''Im5vbmUiKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXByZXBhcmUodCxlLHIsaSxhLGMpe3N1cGVyLnByZXBhcmUodCxlLHIsaSxhLGMpO2NvbnN0IG09dGhpcyxDPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29s''@;'; put 'put ''czowLGNsYXNzTmFtZToibGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJl''@;'; put 'put ''bnRUaGVtZU5hbWUoKSxhZnRlck9uQ2VsbE1vdXNlRG93bihQLFkpe2NvbnN0IEo9dGhpcy5nZXRTb3VyY2VEYXRhKFkucm93LFkuY29sKTt2b2lkIDAhPT1KJiZtLnNldFZhbHVlKEopLG0uaG90LmRlc3Ryb3lFZGl0b3IoKX0scHJldmVudFdoZWVsOiEwLGxheW91dERpcmVjdGlvbjp0aGlz''@;'; put 'put ''LmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifTt0aGlzLmNlbGxQcm9wZXJ0aWVzLmhhbmRzb250YWJsZSYmRnUoQyxjLmhhbmRzb250YWJsZSksdGhpcy5odE9wdGlvbnM9Q31iZWdpbkVkaXRpbmcodCxlKXtjb25zdCByPXRoaXMuaG90LmdldFNldHRpbmdzKCkub25CZWdpbkVkaXRpbmc7ciYm''@;'; put 'put ''ITE9PT1yKCl8fHN1cGVyLmJlZ2luRWRpdGluZyh0LGUpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKTtjb25zdCB0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTt0LmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlRWRpdG9yIix0aGlzLlRF''@;'; put 'put ''WFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0KSx0aGlzLmh0Q29udGFpbmVyPXQsdGhpcy5hc3NpZ25Ib29rcygpfWZpbmlzaEVkaXRpbmcodCxlLHIpe2lmKHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuaXNMaXN0ZW5pbmcoKSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5odEVkaXRv''@;'; put 'put ''ciYmdGhpcy5odEVkaXRvci5nZXRTZWxlY3RlZEFjdGl2ZSgpKXtjb25zdCBpPXRoaXMuaHRFZGl0b3IuZ2V0VmFsdWUoKTt2b2lkIDAhPT1pJiZ0aGlzLnNldFZhbHVlKGkpfXN1cGVyLmZpbmlzaEVkaXRpbmcodCxlLHIpfWZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpe2NvbnN0''@;'; put 'put ''e3ZpZXc6dH09dGhpcy5ob3QsZT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7bGV0IHI9ZS50b3A7aWYodC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgbT10LmdldFRhYmxlT2Zmc2V0KCkudG9wLXRoaXMuaG90LnJvb3RXaW5kb3cuc2Nyb2xsWTtyPU1hdGgubWF4''@;'; put 'put ''KHIrbSwwKX1jb25zdCBpPXRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKSxhPXQuZ2V0V29ya3NwYWNlSGVpZ2h0KCktci1lLmhlaWdodCxjPWk+YSYmcj5hK2UuaGVpZ2h0O3JldHVybiBjP3RoaXMuZmxpcERyb3Bkb3duVmVydGljYWxseSgpOnRoaXMudW5mbGlwRHJvcGRvd25WZXJ0aWNhbGx5''@;'; put 'put ''KCkse2lzRmxpcHBlZDpjLHNwYWNlQWJvdmU6cixzcGFjZUJlbG93OmF9fWZsaXBEcm9wZG93blZlcnRpY2FsbHkoKXtjb25zdCB0PXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7dC5wb3NpdGlvbj0iYWJzb2x1dGUiLHQudG9wPS10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCkrInB4''@;'; put 'put ''Iix0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHk9ITB9dW5mbGlwRHJvcGRvd25WZXJ0aWNhbGx5KCl7Y29uc3QgdD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO3QucG9zaXRpb249ImFic29sdXRlIix0LnRvcD0iIix0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHk9ITF9ZmxpcERyb3Bk''@;'; put 'put ''b3duSG9yaXpvbnRhbGx5SWZOZWVkZWQoKXtjb25zdHt2aWV3OnR9PXRoaXMuaG90LGU9dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO2xldCByPWUuc3RhcnQrZS53aWR0aDtpZih0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IG09dC5nZXRUYWJsZU9mZnNldCgp''@;'; put 'put ''LmxlZnQtdGhpcy5ob3Qucm9vdFdpbmRvdy5zY3JvbGxYO3I9TWF0aC5tYXgocittLDApfWNvbnN0IGk9dGhpcy5nZXREcm9wZG93bldpZHRoKCksYT10LmdldFdvcmtzcGFjZVdpZHRoKCktcitlLndpZHRoLGM9aT5hJiZyPmE7cmV0dXJuIGM/dGhpcy5mbGlwRHJvcGRvd25Ib3Jpem9udGFs''@;'; put 'put ''bHkoKTp0aGlzLnVuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCkse2lzRmxpcHBlZDpjLHNwYWNlSW5saW5lU3RhcnQ6cixzcGFjZUlubGluZUVuZDphfX1mbGlwRHJvcGRvd25Ib3Jpem9udGFsbHkoKXtjb25zdCB0PXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUse3dpZHRoOmV9''@;'; put 'put ''PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0LnBvc2l0aW9uPSJhYnNvbHV0ZSIsdFt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT0tKHRoaXMuZ2V0RHJvcGRvd25XaWR0aCgpLWUpKyJweCIsdGhpcy5pc0ZsaXBwZWRIb3Jpem9udGFsbHk9ITB9dW5mbGlwRHJvcGRvd25Ib3Jp''@;'; put 'put ''em9udGFsbHkoKXtjb25zdCB0PXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7dC5wb3NpdGlvbj0iYWJzb2x1dGUiLHRbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09IiIsdGhpcy5pc0ZsaXBwZWRIb3Jpem9udGFsbHk9ITF9Z2V0RHJvcGRvd25IZWlnaHQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5odEVkaXRvci5nZXRUYWJsZUhlaWdodCgpfWdldERyb3Bkb3duV2lkdGgoKXtyZXR1cm4gdGhpcy5odEVkaXRvci5nZXRUYWJsZVdpZHRoKCl9Z2V0VGFyZ2V0RHJvcGRvd25XaWR0aCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVXaWR0aCgpfWdldFRhcmdl''@;'; put 'put ''dERyb3Bkb3duSGVpZ2h0KCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZUhlaWdodCgpKzF9YXNzaWduSG9va3MoKXt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dmFyIHQ7bnVsbD09PSh0PXRoaXMuaHRFZGl0b3IpfHx2b2lkIDA9PT10fHx0LmRlc3Ry''@;'; put 'put ''b3koKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLCh0LGUpPT57ZXx8dGhpcy5jbG9zZSgpfSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBlPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO3N1cGVyLnJlZ2lzdGVyU2hvcnRj''@;'; put 'put ''dXRzKCk7Y29uc3QgaT0oYSxjKT0+e2NvbnN0IG09dGhpcy5odEVkaXRvcjtpZih2b2lkIDAhPT1hJiYoYTwwfHx0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHkmJmE+bS5jb3VudFJvd3MoKS0xP20uZGVzZWxlY3RDZWxsKCk6bS5zZWxlY3RDZWxsKGEsMCksbS5nZXREYXRhKCkubGVuZ3RoKSly''@;'; put 'put ''ZXR1cm4gYy5wcmV2ZW50RGVmYXVsdCgpLEEyKGMpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuVEVYVEFSRUEuZm9jdXMoKSwhMX07ZS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6YT0+e2NvbnN0IGM9dGhpcy5odEVkaXRvcjtsZXQgbSxDO3JldHVybiFjLmdl''@;'; put 'put ''dFNlbGVjdGVkQWN0aXZlKCkmJnRoaXMuaXNGbGlwcGVkVmVydGljYWxseT9tPWMuY291bnRSb3dzKCktMTpjLmdldFNlbGVjdGVkQWN0aXZlKCkmJih0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHk/KEM9Yy5nZXRTZWxlY3RlZEFjdGl2ZSgpWzBdLG09TWF0aC5tYXgoMCxDLTEpKTooQz1jLmdl''@;'; put 'put ''dFNlbGVjdGVkQWN0aXZlKClbMF0sbT1DLTEpKSxpKG0sYSl9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6YT0+e2NvbnN0IGM9dGhpcy5odEVkaXRvcjtsZXQgbSxDO2lmKGMuZ2V0U2VsZWN0ZWRBY3RpdmUoKXx8dGhpcy5pc0ZsaXBwZWRWZXJ0''@;'; put 'put ''aWNhbGx5KXtpZihjLmdldFNlbGVjdGVkQWN0aXZlKCkpaWYodGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5KW09Yy5nZXRTZWxlY3RlZEFjdGl2ZSgpWzBdKzE7ZWxzZSBpZighdGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5KXtjb25zdCBQPWMuY291bnRSb3dzKCktMTtDPWMuZ2V0U2VsZWN0ZWRB''@;'; put 'put ''Y3RpdmUoKVswXSxtPU1hdGgubWluKFAsQysxKX19ZWxzZSBtPTA7cmV0dXJuIGkobSxhKX0scHJldmVudERlZmF1bHQ6ITF9XSx7Z3JvdXA6dDhlLHJlbGF0aXZlVG9Hcm91cDpjOCxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hv''@;'; put 'put ''cnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh0OGUpfX1mdW5jdGlvbiBuOGUobix0LGUpe3I4ZShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gcjhlKG4sdCl7aWYodC5oYXMobikpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBPdGUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIGxodChuKXt2YXIgdD1mdW5jdGlvbiBjaHQobix0KXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWZ1bmN0aW9uIFB0ZShuLHQpe3JldHVybiBuLmdldChkOChuLHQpKX1mdW5jdGlvbiBkOChuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90''@;'; put 'put ''OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEZ0ZT1uZXcgV2Vha01hcCxpOGU9bmV3IFdlYWtNYXAsaDg9bmV3IFdlYWtTZXQ7Y2xhc3MgSHRlIGV4dGVuZHMgTHRle2NvbnN0cnVjdG9yKCl7c3VwZXIo''@;'; put 'put ''Li4uYXJndW1lbnRzKSxmdW5jdGlvbiBzaHQobix0KXtyOGUobix0KSx0LmFkZChuKX0odGhpcyxoOCksT3RlKHRoaXMsInF1ZXJ5IixudWxsKSxPdGUodGhpcywic3RyaXBwZWRDaG9pY2VzIixbXSksT3RlKHRoaXMsInJhd0Nob2ljZXMiLFtdKSxuOGUodGhpcyxGdGUsdGhpcy5ob3QuZ3Vp''@;'; put 'put ''ZC5zbGljZSgwLDkpKSxuOGUodGhpcyxpOGUsdGsoKCk9Pnt0aGlzLmZvY3VzKCl9LDEwMCkpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iYXV0b2NvbXBsZXRlIn1nZXRWYWx1ZSgpe2NvbnN0IHQ9dGhpcy5yYXdDaG9pY2VzLmZpbmQoZT0+e2NvbnN0IHI9dGhpcy5zdHJpcFZh''@;'; put 'put ''bHVlSWZOZWVkZWQoZSk7cmV0dXJuKGQ4KGg4LHRoaXMsT2spLmNhbGwodGhpcyxyKT9yLnZhbHVlOnIpPT09dGhpcy5URVhUQVJFQS52YWx1ZX0pO3JldHVybiB3YSh0KT90OnRoaXMuVEVYVEFSRUEudmFsdWV9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRpKHRo''@;'; put 'put ''aXMuaHRDb250YWluZXIsImF1dG9jb21wbGV0ZUVkaXRvciIpLHRpKHRoaXMuaHRDb250YWluZXIsLTE9PT10aGlzLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCJNYWMiKT8iIjoiaHRNYWNTY3JvbGwiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdz''@;'; put 'put ''JiZaYSh0aGlzLlRFWFRBUkVBLFtbInR5cGUiLCJ0ZXh0Il0sWyJyb2xlIiwiY29tYm9ib3giXSxCZ2UoImxpc3Rib3giKSxbImFyaWEtYXV0b2NvbXBsZXRlIiwibGlzdCJdXSl9cHJlcGFyZSh0LGUscixpLGEsYyl7c3VwZXIucHJlcGFyZSh0LGUscixpLGEsYyksdGhpcy5ob3QuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKS5hcmlhVGFncyYmWmEodGhpcy5URVhUQVJFQSxbemYoImZhbHNlIiksSGF0KGAke1B0ZShGdGUsdGhpcyl9LWxpc3Rib3gtJHt0fS0ke2V9YCldKSx0aGlzLmh0T3B0aW9ucz17Li4udGhpcy5odE9wdGlvbnMsdmFsdWVHZXR0ZXI6bT0+ZDgoaDgsdGhpcyxPaykuY2FsbCh0aGlz''@;'; put 'put ''LG0pP20udmFsdWU6bX19b3Blbigpe3N1cGVyLm9wZW4oKTtjb25zdCB0PXZvaWQgMD09PXRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3dufHx0aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bixlPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mscj1BcnJheS5pc0Fy''@;'; put 'put ''cmF5KHRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlKT90aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTpudWxsLGk9cj8ubGVuZ3RoLHtyb3c6YSxjb2w6Y309dGhpczt0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzKCksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixt''@;'; put 'put ''PT50aGlzLm9uQmVmb3JlS2V5RG93bihtKSksdGhpcy5odEVkaXRvci5hZGRIb29rKCJhZnRlclNjcm9sbCIsUHRlKGk4ZSx0aGlzKSksdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7Y29sV2lkdGhzOnQ/W3B1KHRoaXMuVEVYVEFSRUEpLTJdOnZvaWQgMCxhdXRvQ29sdW1uU2l6ZToh''@;'; put 'put ''MCxyZW5kZXJlcjoobSxDLFAsWSxKLGNlLGZlKT0+e3g1KG0sQyxQLFksSixjZSxmZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpBZSxhbGxvd0h0bWw6SGUsbG9jYWxlOlhlfT10aGlzLmNlbGxQcm9wZXJ0aWVzLHJ0PXRoaXMucXVlcnk7bGV0IGp0LEZ0LGR0PXFsKGNlKTtkdCYm''@;'; put 'put ''IUhlJiYoanQ9ITA9PT1BZT9kdC5pbmRleE9mKHJ0KTpkdC50b0xvY2FsZUxvd2VyQ2FzZShYZSkuaW5kZXhPZihydC50b0xvY2FsZUxvd2VyQ2FzZShYZSkpLC0xIT09anQmJihGdD1kdC5zdWJzdHIoanQscnQubGVuZ3RoKSxkdD1kdC5yZXBsYWNlKEZ0LGA8c3Ryb25nPiR7RnR9PC9zdHJv''@;'; put 'put ''bmc+YCkpKSxlJiZaYShDLFtbInJvbGUiLCJvcHRpb24iXSwuLi5yP1tqYXQoaSldOltdLC4uLnI/W3phdChyLmluZGV4T2YoY2UpKzEpXTpbXSxbImlkIixgJHt0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LmlkfV8ke1B9LSR7WX1gXV0pLEMuaW5uZXJIVE1MPWR0fSxhZnRlclNlbGVjdGlv''@;'; put 'put ''bkVuZDoobSxDKT0+e2lmKGUpe2NvbnN0IFA9Sj0+e1phKEosW1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0pLFphKHRoaXMuVEVYVEFSRUEsLi4uKG49PlsiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixuXSkoSi5pZCkpfSxZPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChtLEMsITApO251bGwhPT1Z''@;'; put 'put ''P1AoWSk6dGhpcy5odEVkaXRvci5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+e2NvbnN0IEo9dGhpcy5odEVkaXRvci5nZXRDZWxsKG0sQywhMCk7UChKKX0pfX19KSxlJiYoWmEodGhpcy5odEVkaXRvci52aWV3Ll93dC53dE92ZXJsYXlzLnd0VGFibGUuVEFCTEUs''@;'; put 'put ''InJvbGUiLCJwcmVzZW50YXRpb24iKSxaYSh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il0sVmF0KCJwb2xpdGUiKSxCYXQoInRleHQiKSxbImlkIixgJHtQdGUoRnRlLHRoaXMpfS1saXN0Ym94LSR7YX0tJHtjfWBdXSksWmEodGhpcy5URVhUQVJFQSwuLi56''@;'; put 'put ''ZigidHJ1ZSIpKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSl9Y2xvc2UoKXt0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpLHRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KCkuYXJpYVRhZ3MmJlphKHRoaXMuVEVYVEFSRUEsW3pmKCJmYWxzZSIpXSl9ZGlzY2FyZEVkaXRvcih0KXtzdXBlci5kaXNjYXJkRWRpdG9yKHQpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9ZmluaXNoRWRpdGluZyh0LGUscil7aWYodGhpcy5pc09wZW5lZCgpKXtjb25zdCBpPXRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTsobWMoaSl8fHdhKGkpJiYhaS5pbmNsdWRlcyh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0aGlzLnJvdyx0aGlzLmNvbCkpKSYmKHQ9ITApfXN1cGVyLmZpbmlzaEVkaXRpbmcodCxlLHIpfXF1ZXJ5Q2hvaWNlcyh0KXtjb25zdCBlPXRoaXMu''@;'; put 'put ''Y2VsbFByb3BlcnRpZXMuc291cmNlO3RoaXMucXVlcnk9dCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmNhbGwodGhpcy5jZWxsUHJvcGVydGllcyx0LHI9Pnt0aGlzLnJhd0Nob2ljZXM9cix0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChyKSl9KTpBcnJh''@;'; put 'put ''eS5pc0FycmF5KGUpPyh0aGlzLnJhd0Nob2ljZXM9ZSx0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChlKSkpOnRoaXMudXBkYXRlQ2hvaWNlc0xpc3QoW10pfXVwZGF0ZUNob2ljZXNMaXN0KHQpe2NvbnN0IGU9b0oodGhpcy5URVhUQVJFQSkscj11NWUo''@;'; put 'put ''dGhpcy5URVhUQVJFQSksaT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvcnRCeVJlbGV2YW5jZSxhPXRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyLGM9dGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxtPWQ4KGg4LHRoaXMsT2spLmNhbGwodGhpcyxjKT9jLnZhbHVlOmM7''@;'; put 'put ''bGV0IEM9bnVsbCxQPXQ7aXx8KFA9UC50b1NvcnRlZCgpKTtjb25zdCBZPVtdLEo9dGhpcy5jZWxsUHJvcGVydGllcy5sb2NhbGUsY2U9dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXJpbmdDYXNlU2Vuc2l0aXZlLGZlPWNlP206bS50b0xvY2FsZUxvd2VyQ2FzZShKKTtmb3IobGV0IEFlPTA7''@;'; put 'put ''QWU8UC5sZW5ndGg7QWUrKyl7Y29uc3QgSGU9ZDgoaDgsdGhpcyxPaykuY2FsbCh0aGlzLFBbQWVdKT9iNChxbChQW0FlXS52YWx1ZSkpOmI0KHFsKFBbQWVdKSk7aWYoLTEhPT0oY2U/SGU6SGUudG9Mb2NhbGVMb3dlckNhc2UoSikpLmluZGV4T2YoZmUpJiYoWS5wdXNoKEFlKSwhMT09PWEp''@;'; put 'put ''KWJyZWFrfSExPT09YT9jLmxlbmd0aD4wJiYoQz1ZWzBdKTooUD1ZLm1hcChBZT0+UFtBZV0pLEM9UC5pbmRleE9mKGZlKT4tMT9QLmluZGV4T2YoZmUpOjApLHRoaXMuc3RyaXBwZWRDaG9pY2VzPVAsdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PTA9PT1QLmxlbmd0''@;'; put 'put ''aD8ibm9uZSI6IiIsdGhpcy5odEVkaXRvci5sb2FkRGF0YShIQShbUF0pKSxQLmxlbmd0aD4wJiYodGhpcy51cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKSx0aGlzLmZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpLCEwPT09dGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3QmJnRoaXMu''@;'; put 'put ''aGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKEMpKSx0aGlzLmhvdC5saXN0ZW4oKSxKQSh0aGlzLlRFWFRBUkVBLGUsZT09PXI/dm9pZCAwOnIpfWZsaXBEcm9wZG93blZlcnRpY2FsbHlJZk5lZWRlZCgpe2NvbnN0IHQ9c3VwZXIuZmxpcERyb3Bkb3duVmVydGljYWxseUlmTmVlZGVkKCks''@;'; put 'put ''e2lzRmxpcHBlZDplLHNwYWNlQWJvdmU6cixzcGFjZUJlbG93Oml9PXQ7cmV0dXJuIHRoaXMubGltaXREcm9wZG93bklmTmVlZGVkKGU/cjppKSx0fWxpbWl0RHJvcGRvd25JZk5lZWRlZCh0KXtjb25zdCBlPXRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKTtpZihlPnQpe2xldCByPTAsaT0wLGE9''@;'; put 'put ''bnVsbDtkb3tpPXRoaXMuaHRFZGl0b3Iuc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkscis9aX13aGlsZShyPHQpO2E9ci1pLHRoaXMuaXNGbGlwcGVkVmVydGljYWxseSYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0''@;'; put 'put ''b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKStlLWErInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChyLWkpfX11cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKXtjb25zdCB0PWQ1ZSgpLGU9dGhpcy5nZXRUYXJnZXRFZGl0b3JXaWR0aCgpK3Qscj10aGlzLmdldFRhcmdldEVkaXRvckhl''@;'; put 'put ''aWdodCgpK3Q7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6ZSxoZWlnaHQ6cn0pLGQ4KGg4LHRoaXMsYThlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9c2V0RHJvcGRvd25I''@;'; put 'put ''ZWlnaHQodCl7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnR9KSxkOChoOCx0aGlzLGE4ZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfWhpZ2hsaWdodEJlc3RNYXRjaGlu''@;'; put 'put ''Z0Nob2ljZSh0KXsibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKHQsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKX1nZXRUYXJnZXRFZGl0b3JIZWlnaHQoKXtsZXQgdD0wO2lmKCF0aGlzLmhvdC5nZXRDdXJy''@;'; put 'put ''ZW50VGhlbWVOYW1lKCkpe2NvbnN0IGk9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKTt0PXBhcnNlSW50KGkuYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KGkuYm9yZGVyQm90dG9tV2lkdGgs''@;'; put 'put ''MTApfWNvbnN0IGU9TWF0aC5taW4odGhpcy5jZWxsUHJvcGVydGllcy52aXNpYmxlUm93cyx0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGgpO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6ZX0sKGksYSk9PmEpLnJlZHVjZSgoaSxhKT0+aSsodGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXRE''@;'; put 'put ''ZWZhdWx0Um93SGVpZ2h0KCkrKDA9PT1hPzE6MCkpLDApK3R9Z2V0VGFyZ2V0RWRpdG9yV2lkdGgoKXtsZXQgdD0wO2lmKCF0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpe2NvbnN0IGU9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIu''@;'; put 'put ''cXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKTt0PXBhcnNlSW50KGUuYm9yZGVySW5saW5lU3RhcnRXaWR0aCwxMCkrcGFyc2VJbnQoZS5ib3JkZXJJbmxpbmVFbmRXaWR0aCwxMCl9cmV0dXJuIHRoaXMuaHRFZGl0b3IuZ2V0Q29sV2lkdGgoMCkrdH1zdHJpcFZhbHVlSWZOZWVkZWQodCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbdF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQodCl7Y29uc3R7YWxsb3dIdG1sOmV9PXRoaXMuY2VsbFByb3BlcnRpZXMscj1pPT5xbChlP2k6YjQoaSkpO3JldHVybiB0LmV2ZXJ5KGk9PmQ4KGg4LHRoaXMsT2spLmNhbGwodGhpcyxpKSk/''@;'; put 'put ''dC5tYXAoaT0+KHtrZXk6cihpLmtleSksdmFsdWU6cihpLnZhbHVlKX0pKTp0Lm1hcChpPT5yKGkpKX1vbkJlZm9yZUtleURvd24odCl7aWYobTVlKHQua2V5Q29kZSl8fHQua2V5Q29kZT09PW5vLkJBQ0tTUEFDRXx8dC5rZXlDb2RlPT09bm8uREVMRVRFfHx0LmtleUNvZGU9PT1uby5JTlNF''@;'; put 'put ''UlQpe2xldCBlPTEwO2lmKHQua2V5Q29kZT09PW5vLkMmJih0LmN0cmxLZXl8fHQubWV0YUtleSkpcmV0dXJuO3RoaXMuaXNPcGVuZWQoKXx8KGUrPTEwKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJF''@;'; put 'put ''QS52YWx1ZSl9LGUpfX19ZnVuY3Rpb24gYThlKCl7dGhpcy5odEVkaXRvci52aWV3Lmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJnRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0VGFyZ2V0RWRpdG9yV2lkdGgoKStndSh0aGlzLmhvdC5yb290RG9jdW1lbnQpfSl9ZnVu''@;'; put 'put ''Y3Rpb24gT2sobil7cmV0dXJuIGhvKG4pJiZ3YShuLmtleSkmJndhKG4udmFsdWUpfWNsYXNzIG84ZSBleHRlbmRzIFZDe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iY2hlY2tib3gifWJlZ2luRWRpdGluZyh0LGUpe2lmKGUmJiJtb3VzZXVwIj09PWUudHlwZSYmIlREIj09PWUu''@;'; put 'put ''dGFyZ2V0Lm5vZGVOYW1lKXtjb25zdCByPXRoaXMuVEQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iY2hlY2tib3giXScpO3ZvKHIsImh0QmFkVmFsdWUiKXx8ci5jbGljaygpfX1maW5pc2hFZGl0aW5nKCl7fWluaXQoKXt9b3Blbigpe31jbG9zZSgpe31nZXRWYWx1ZSgpe31zZXRWYWx1''@;'; put 'put ''ZSgpe31mb2N1cygpe319Y29uc3QgZjg9KCk9PndpbmRvdyxKZj0oKT0+d2luZG93LmRvY3VtZW50LE50ZT0obix0KT0+d2luZG93LnNldFRpbWVvdXQobix0KSxQND1mdW5jdGlvbihuLHQsZSxyKXtuLmFkZEV2ZW50TGlzdGVuZXIodCxlLCEhcil9LEU1PWZ1bmN0aW9uKG4sdCxlLHIpe24u''@;'; put 'put ''cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsISFyKX0sUDI9ZnVuY3Rpb24obix0KXtyZXR1cm4tMSE9PSgiICIrbi5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIit0KyIgIil9LFZ0ZT1mdW5jdGlvbihuLHQpe1AyKG4sdCl8fChuLmNsYXNzTmFtZT0iIj09PW4uY2xhc3NOYW1lP3Q6bi5jbGFz''@;'; put 'put ''c05hbWUrIiAiK3QpfSxCdGU9ZnVuY3Rpb24obix0KXtuLmNsYXNzTmFtZT1mdW5jdGlvbihuKXtyZXR1cm4gbi50cmltP24udHJpbSgpOm4ucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSgoIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZSgiICIrdCsiICIsIiAiKSl9LGp0ZT1mdW5jdGlv''@;'; put 'put ''bihuKXtyZXR1cm4vQXJyYXkvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKX0sRjI9ZnVuY3Rpb24obil7cmV0dXJuL0RhdGUvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKSYmIWlzTmFOKG4uZ2V0VGltZSgpKX0sZmh0PWZ1bmN0aW9uKG4p''@;'; put 'put ''e2xldCB0PW4uZ2V0RGF5KCk7cmV0dXJuIDA9PT10fHw2PT09dH0scGh0PWZ1bmN0aW9uKG4pe3JldHVybiBuJTQ9PTAmJm4lMTAwIT0wfHxuJTQwMD09MH0sczhlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuWzMxLHBodChuKT8yOToyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV1bdF19''@;'; put 'put ''LHlWPWZ1bmN0aW9uKG4pe0YyKG4pJiZuLnNldEhvdXJzKDAsMCwwLDApfSxfVj1mdW5jdGlvbihuLHQpe3JldHVybiBuLmdldFRpbWUoKT09PXQuZ2V0VGltZSgpfSxiVj1mdW5jdGlvbihuLHQsZSl7bGV0IHIsaTtmb3IociBpbiB0KWk9dm9pZCAwIT09bltyXSxpJiYib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIHRbcl0mJm51bGwhPT10W3JdJiZ2b2lkIDA9PT10W3JdLm5vZGVOYW1lP0YyKHRbcl0pP2UmJihuW3JdPW5ldyBEYXRlKHRbcl0uZ2V0VGltZSgpKSk6anRlKHRbcl0pP2UmJihuW3JdPXRbcl0uc2xpY2UoMCkpOm5bcl09YlYoe30sdFtyXSxlKTooZXx8IWkpJiYobltyXT10W3JdKTty''@;'; put 'put ''ZXR1cm4gbn0sbDhlPWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1KZigpLmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7ci5pbml0RXZlbnQodCwhMCwhMSkscj1iVihyLGUpLG4uZGlzcGF0Y2hFdmVudChyKX0sYzhlPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1vbnRoPDAmJihuLnllYXItPU1hdGgu''@;'; put 'put ''Y2VpbChNYXRoLmFicyhuLm1vbnRoKS8xMiksbi5tb250aCs9MTIpLG4ubW9udGg+MTEmJihuLnllYXIrPU1hdGguZmxvb3IoTWF0aC5hYnMobi5tb250aCkvMTIpLG4ubW9udGgtPTEyKSxufSxGND17ZmllbGQ6bnVsbCxib3VuZDp2b2lkIDAsYXJpYUxhYmVsOiJVc2UgdGhlIGFycm93IGtl''@;'; put 'put ''eXMgdG8gcGljayBhIGRhdGUiLHBvc2l0aW9uOiJib3R0b20gbGVmdCIscmVwb3NpdGlvbjohMCxmb3JtYXQ6IllZWVktTU0tREQiLHRvU3RyaW5nOm51bGwscGFyc2U6bnVsbCxkZWZhdWx0RGF0ZTpudWxsLHNldERlZmF1bHREYXRlOiExLGZpcnN0RGF5OjAsZmlyc3RXZWVrT2ZZZWFyTWlu''@;'; put 'put ''RGF5czo0LGZvcm1hdFN0cmljdDohMSxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLHllYXJSYW5nZToxMCxzaG93V2Vla051bWJlcjohMSxwaWNrV2hvbGVXZWVrOiExLG1pblllYXI6MCxtYXhZZWFyOjk5OTksbWluTW9udGg6dm9pZCAwLG1heE1vbnRoOnZvaWQgMCxzdGFydFJhbmdlOm51''@;'; put 'put ''bGwsZW5kUmFuZ2U6bnVsbCxpc1JUTDohMSx5ZWFyU3VmZml4OiIiLHNob3dNb250aEFmdGVyWWVhcjohMSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxudW1iZXJPZk1vbnRoczoxLG1haW5D''@;'; put 'put ''YWxlbmRhcjoibGVmdCIsY29udGFpbmVyOnZvaWQgMCxibHVyRmllbGRPblNlbGVjdDohMCxpMThuOntwcmV2aW91c01vbnRoOiJQcmV2aW91cyBNb250aCIsbmV4dE1vbnRoOiJOZXh0IE1vbnRoIixtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5Iiwi''@;'; put 'put ''SnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHdlZWtkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSx3ZWVrZGF5c1Nob3J0Olsi''@;'; put 'put ''U3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il19LHRoZW1lOm51bGwsZXZlbnRzOltdLG9uU2VsZWN0Om51bGwsb25PcGVuOm51bGwsb25DbG9zZTpudWxsLG9uRHJhdzpudWxsLGtleWJvYXJkSW5wdXQ6ITB9LHU4ZT1mdW5jdGlvbihuLHQsZSl7Zm9yKHQrPW4uZmly''@;'; put 'put ''c3REYXk7dD49NzspdC09NztyZXR1cm4gZT9uLmkxOG4ud2Vla2RheXNTaG9ydFt0XTpuLmkxOG4ud2Vla2RheXNbdF19LGdodD1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPSJmYWxzZSI7aWYobi5pc0VtcHR5KXtpZighbi5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKXJldHVybic8''@;'; put 'put ''dGQgY2xhc3M9ImlzLWVtcHR5Ij48L3RkPic7dC5wdXNoKCJpcy1vdXRzaWRlLWN1cnJlbnQtbW9udGgiKSxuLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc3x8dC5wdXNoKCJpcy1zZWxlY3Rpb24tZGlzYWJsZWQiKX1yZXR1cm4gbi5pc0Rpc2FibGVkJiZ0LnB1''@;'; put 'put ''c2goImlzLWRpc2FibGVkIiksbi5pc1RvZGF5JiZ0LnB1c2goImlzLXRvZGF5Iiksbi5pc1NlbGVjdGVkJiYodC5wdXNoKCJpcy1zZWxlY3RlZCIpLGU9InRydWUiKSxuLmhhc0V2ZW50JiZ0LnB1c2goImhhcy1ldmVudCIpLG4uaXNJblJhbmdlJiZ0LnB1c2goImlzLWlucmFuZ2UiKSxuLmlz''@;'; put 'put ''U3RhcnRSYW5nZSYmdC5wdXNoKCJpcy1zdGFydHJhbmdlIiksbi5pc0VuZFJhbmdlJiZ0LnB1c2goImlzLWVuZHJhbmdlIiksJzx0ZCBkYXRhLWRheT0iJytuLmRheSsnIiBjbGFzcz0iJyt0LmpvaW4oIiAiKSsnIiBhcmlhLXNlbGVjdGVkPSInK2UrJyI+PGJ1dHRvbiBjbGFzcz0icGlrYS1i''@;'; put 'put ''dXR0b24gcGlrYS1kYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1waWthLXllYXI9Iicrbi55ZWFyKyciIGRhdGEtcGlrYS1tb250aD0iJytuLm1vbnRoKyciIGRhdGEtcGlrYS1kYXk9Iicrbi5kYXkrJyI+JytuLmRheSsiPC9idXR0b24+PC90ZD4ifSx2aHQ9ZnVuY3Rpb24obix0LGUscixpKXts''@;'; put 'put ''ZXQgYT1uZXcgRGF0ZShyLGUsdCk7cmV0dXJuJzx0ZCBjbGFzcz0icGlrYS13ZWVrIj4nKyhuLmhhc01vbWVudD9uLm1vbWVudChhKS5pc29XZWVrKCk6ZnVuY3Rpb24obix0KXtuLnNldEhvdXJzKDAsMCwwLDApO2xldCBlPW4uZ2V0RGF0ZSgpLHI9bi5nZXREYXkoKSxpPXQsYT1pLTEsbT1m''@;'; put 'put ''dW5jdGlvbihjZSl7cmV0dXJuKGNlKzctMSklN307bi5zZXREYXRlKGUrYS1tKHIpKTtsZXQgQz1uZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksMCxpKSxZPShuLmdldFRpbWUoKS1DLmdldFRpbWUoKSkvODY0ZTU7cmV0dXJuIDErTWF0aC5yb3VuZCgoWS1hK20oQy5nZXREYXkoKSkpLzcpfShh''@;'; put 'put ''LGkpKSsiPC90ZD4ifSx5aHQ9ZnVuY3Rpb24obix0LGUscil7cmV0dXJuJzx0ciBjbGFzcz0icGlrYS1yb3cnKyhlPyIgcGljay13aG9sZS13ZWVrIjoiIikrKHI/IiBpcy1zZWxlY3RlZCI6IiIpKyciPicrKHQ/bi5yZXZlcnNlKCk6bikuam9pbigiIikrIjwvdHI+In0sd2h0PWZ1bmN0aW9u''@;'; put 'put ''KG4sdCxlLHIsaSxhKXtsZXQgYyxtLEMsZmUsQWUsUD1uLl9vLFk9ZT09PVAubWluWWVhcixKPWU9PT1QLm1heFllYXIsY2U9JzxkaXYgaWQ9IicrYSsnIiBjbGFzcz0icGlrYS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJwb2xpdGUiPicsSGU9ITAsWGU9ITA7Zm9yKEM9W10s''@;'; put 'put ''Yz0wO2M8MTI7YysrKUMucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJysoZT09PWk/Yy10OjEyK2MtdCkrJyInKyhjPT09cj8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsoWSYmYzxQLm1pbk1vbnRofHxKJiZjPlAubWF4TW9udGg/JyBkaXNhYmxlZD0iZGlzYWJsZWQiJzoiIikrIj4iK1AuaTE4''@;'; put 'put ''bi5tb250aHNbY10rIjwvb3B0aW9uPiIpO2ZvcihmZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JytQLmkxOG4ubW9udGhzW3JdKyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC1tb250aCIgdGFiaW5kZXg9Ii0xIj4nK0Muam9pbigiIikrIjwvc2VsZWN0PjwvZGl2''@;'; put 'put ''PiIsanRlKFAueWVhclJhbmdlKT8oYz1QLnllYXJSYW5nZVswXSxtPVAueWVhclJhbmdlWzFdKzEpOihjPWUtUC55ZWFyUmFuZ2UsbT0xK2UrUC55ZWFyUmFuZ2UpLEM9W107YzxtJiZjPD1QLm1heFllYXI7YysrKWM+PVAubWluWWVhciYmQy5wdXNoKCc8b3B0aW9uIHZhbHVlPSInK2MrJyIn''@;'; put 'put ''KyhjPT09ZT8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIrYysiPC9vcHRpb24+Iik7cmV0dXJuIEFlPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK2UrUC55ZWFyU3VmZml4Kyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyIiB0YWJpbmRleD0iLTEi''@;'; put 'put ''PicrQy5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IixjZSs9UC5zaG93TW9udGhBZnRlclllYXI/QWUrZmU6ZmUrQWUsWSYmKDA9PT1yfHxQLm1pbk1vbnRoPj1yKSYmKEhlPSExKSxKJiYoMTE9PT1yfHxQLm1heE1vbnRoPD1yKSYmKFhlPSExKSwwPT09dCYmKGNlKz0nPGJ1dHRvbiBjbGFz''@;'; put 'put ''cz0icGlrYS1wcmV2JysoSGU/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytQLmkxOG4ucHJldmlvdXNNb250aCsiPC9idXR0b24+IiksdD09PW4uX28ubnVtYmVyT2ZNb250aHMtMSYmKGNlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1uZXh0JysoWGU/IiI6IiBpcy1kaXNh''@;'; put 'put ''YmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytQLmkxOG4ubmV4dE1vbnRoKyI8L2J1dHRvbj4iKSxjZSsiPC9kaXY+In07ZnVuY3Rpb24genRlKG4pe2xldCB0PXRoaXMsZT10LmNvbmZpZyhuKTt0Ll9vbk1vdXNlRG93bj1mdW5jdGlvbihpKXtpZighdC5fdilyZXR1cm47bGV0IGE9KGk9aXx8''@;'; put 'put ''ZjgoKS5ldmVudCkudGFyZ2V0fHxpLnNyY0VsZW1lbnQ7aWYoYSlpZihQMihhLCJpcy1kaXNhYmxlZCIpfHwoIVAyKGEsInBpa2EtYnV0dG9uIil8fFAyKGEsImlzLWVtcHR5Iil8fFAyKGEucGFyZW50Tm9kZSwiaXMtZGlzYWJsZWQiKT9QMihhLCJwaWthLXByZXYiKT90LnByZXZNb250aCgp''@;'; put 'put ''OlAyKGEsInBpa2EtbmV4dCIpJiZ0Lm5leHRNb250aCgpOih0LnNldERhdGUobmV3IERhdGUoYS5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS15ZWFyIiksYS5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1tb250aCIpLGEuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtZGF5IikpKSxlLmJvdW5kJiZO''@;'; put 'put ''dGUoZnVuY3Rpb24oKXt0LmhpZGUoKSxlLmJsdXJGaWVsZE9uU2VsZWN0JiZlLmZpZWxkJiZlLmZpZWxkLmJsdXIoKX0sMTAwKSkpLFAyKGEsInBpa2Etc2VsZWN0IikpdC5fYz0hMDtlbHNle2lmKCFpLnByZXZlbnREZWZhdWx0KXJldHVybiBpLnJldHVyblZhbHVlPSExLCExO2kucHJldmVu''@;'; put 'put ''dERlZmF1bHQoKX19LHQuX29uQ2hhbmdlPWZ1bmN0aW9uKGkpe2xldCBhPShpPWl8fGY4KCkuZXZlbnQpLnRhcmdldHx8aS5zcmNFbGVtZW50O2EmJihQMihhLCJwaWthLXNlbGVjdC1tb250aCIpP3QuZ290b01vbnRoKGEudmFsdWUpOlAyKGEsInBpa2Etc2VsZWN0LXllYXIiKSYmdC5nb3Rv''@;'; put 'put ''WWVhcihhLnZhbHVlKSl9LHQuX29uS2V5Q2hhbmdlPWZ1bmN0aW9uKGkpe2lmKGk9aXx8ZjgoKS5ldmVudCx0LmlzVmlzaWJsZSgpKXN3aXRjaChpLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAyNzplLmZpZWxkJiZlLmZpZWxkLmJsdXIoKTticmVhaztjYXNlIDM3OnQuYWRqdXN0RGF0ZSgic3Vi''@;'; put 'put ''dHJhY3QiLDEpO2JyZWFrO2Nhc2UgMzg6dC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsNyk7YnJlYWs7Y2FzZSAzOTp0LmFkanVzdERhdGUoImFkZCIsMSk7YnJlYWs7Y2FzZSA0MDp0LmFkanVzdERhdGUoImFkZCIsNyk7YnJlYWs7Y2FzZSA4OmNhc2UgNDY6dC5zZXREYXRlKG51bGwpfX0sdC5f''@;'; put 'put ''cGFyc2VGaWVsZFZhbHVlPWZ1bmN0aW9uKCl7aWYoZS5wYXJzZSlyZXR1cm4gZS5wYXJzZShlLmZpZWxkLnZhbHVlLGUuZm9ybWF0KTtpZih0aGlzLmhhc01vbWVudCl7bGV0IGk9dGhpcy5tb21lbnQoZS5maWVsZC52YWx1ZSxlLmZvcm1hdCxlLmZvcm1hdFN0cmljdCk7cmV0dXJuIGkmJmku''@;'; put 'put ''aXNWYWxpZCgpP2kudG9EYXRlKCk6bnVsbH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShlLmZpZWxkLnZhbHVlKSl9LHQuX29uSW5wdXRDaGFuZ2U9ZnVuY3Rpb24oaSl7bGV0IGE7aS5maXJlZEJ5IT09dCYmKGE9dC5fcGFyc2VGaWVsZFZhbHVlKCksRjIoYSkmJnQuc2V0RGF0ZShhKSx0''@;'; put 'put ''Ll92fHx0LnNob3coKSl9LHQuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe3Quc2hvdygpfSx0Ll9vbklucHV0Q2xpY2s9ZnVuY3Rpb24oKXt0LnNob3coKX0sdC5fb25JbnB1dEJsdXI9ZnVuY3Rpb24oKXtsZXQgaT1KZigpLmFjdGl2ZUVsZW1lbnQ7ZG97aWYoUDIoaSwicGlrYS1zaW5nbGUi''@;'; put 'put ''KSlyZXR1cm59d2hpbGUoaT1pLnBhcmVudE5vZGUpO3QuX2N8fCh0Ll9iPU50ZShmdW5jdGlvbigpe3QuaGlkZSgpfSw1MCkpLHQuX2M9ITF9LHQuX29uQ2xpY2s9ZnVuY3Rpb24oaSl7bGV0IGE9KGk9aXx8ZjgoKS5ldmVudCkudGFyZ2V0fHxpLnNyY0VsZW1lbnQsYz1hO2lmKGEpeyFoYXNF''@;'; put 'put ''dmVudExpc3RlbmVycyYmUDIoYSwicGlrYS1zZWxlY3QiKSYmKGEub25jaGFuZ2V8fChhLnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCJyZXR1cm47IiksUDQoYSwiY2hhbmdlIix0Ll9vbkNoYW5nZSkpKTtkb3tpZihQMihjLCJwaWthLXNpbmdsZSIpfHxjPT09ZS50cmlnZ2VyKXJldHVybn13''@;'; put 'put ''aGlsZShjPWMucGFyZW50Tm9kZSk7dC5fdiYmYSE9PWUudHJpZ2dlciYmYyE9PWUudHJpZ2dlciYmdC5oaWRlKCl9fSx0LmVsPUpmKCkuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5lbC5jbGFzc05hbWU9InBpa2Etc2luZ2xlIisoZS5pc1JUTD8iIGlzLXJ0bCI6IiIpKyhlLnRoZW1lPyIgIitl''@;'; put 'put ''LnRoZW1lOiIiKSxQNCh0LmVsLCJtb3VzZWRvd24iLHQuX29uTW91c2VEb3duLCEwKSxQNCh0LmVsLCJ0b3VjaGVuZCIsdC5fb25Nb3VzZURvd24sITApLFA0KHQuZWwsImNoYW5nZSIsdC5fb25DaGFuZ2UpLGUua2V5Ym9hcmRJbnB1dCYmUDQoSmYoKSwia2V5ZG93biIsdC5fb25LZXlDaGFu''@;'; put 'put ''Z2UpLGUuZmllbGQmJihlLmNvbnRhaW5lcj9lLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmVsKTplLmJvdW5kP0pmKCkuYm9keS5hcHBlbmRDaGlsZCh0LmVsKTplLmZpZWxkLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuZWwsZS5maWVsZC5uZXh0U2libGluZyksUDQoZS5maWVsZCwiY2hh''@;'; put 'put ''bmdlIix0Ll9vbklucHV0Q2hhbmdlKSxlLmRlZmF1bHREYXRlfHwoZS5kZWZhdWx0RGF0ZT10Ll9wYXJzZUZpZWxkVmFsdWUoKSxlLnNldERlZmF1bHREYXRlPSEwKSk7bGV0IHI9ZS5kZWZhdWx0RGF0ZTtGMihyKT9lLnNldERlZmF1bHREYXRlP3Quc2V0RGF0ZShyLCEwKTp0LmdvdG9EYXRl''@;'; put 'put ''KHIpOnQuZ290b0RhdGUobmV3IERhdGUpLGUuYm91bmQ/KHRoaXMuaGlkZSgpLHQuZWwuY2xhc3NOYW1lKz0iIGlzLWJvdW5kIixQNChlLnRyaWdnZXIsImNsaWNrIix0Ll9vbklucHV0Q2xpY2spLFA0KGUudHJpZ2dlciwiZm9jdXMiLHQuX29uSW5wdXRGb2N1cyksUDQoZS50cmlnZ2VyLCJi''@;'; put 'put ''bHVyIix0Ll9vbklucHV0Qmx1cikpOnRoaXMuc2hvdygpfWZ1bmN0aW9uIGQ4ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24geGh0KG4pe3ZhciB0PWZ1bmN0aW9uIEVodChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVd''@;'; put 'put ''O2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9T''@;'; put 'put ''dHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rp''@;'; put 'put ''b24gVXRlKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX16dGUucHJvdG90eXBl''@;'; put 'put ''PXtjb25maWc6ZnVuY3Rpb24obil7dGhpcy5fb3x8KHRoaXMuX289YlYoe30sRjQsITApKTtsZXQgdD1iVih0aGlzLl9vLG4sITApO3QuaXNSVEw9ISF0LmlzUlRMLHQuZmllbGQ9dC5maWVsZCYmdC5maWVsZC5ub2RlTmFtZT90LmZpZWxkOm51bGwsdC50aGVtZT0ic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IHQudGhlbWUmJnQudGhlbWU/dC50aGVtZTpudWxsLHQuYm91bmQ9ISEodm9pZCAwIT09dC5ib3VuZD90LmZpZWxkJiZ0LmJvdW5kOnQuZmllbGQpLHQudHJpZ2dlcj10LnRyaWdnZXImJnQudHJpZ2dlci5ub2RlTmFtZT90LnRyaWdnZXI6dC5maWVsZCx0LmRpc2FibGVXZWVrZW5kcz0hIXQu''@;'; put 'put ''ZGlzYWJsZVdlZWtlbmRzLHQuZGlzYWJsZURheUZuPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmRpc2FibGVEYXlGbj90LmRpc2FibGVEYXlGbjpudWxsO2xldCBlPXBhcnNlSW50KHQubnVtYmVyT2ZNb250aHMsMTApfHwxO2lmKHQubnVtYmVyT2ZNb250aHM9ZT40PzQ6ZSxGMih0Lm1pbkRhdGUp''@;'; put 'put ''fHwodC5taW5EYXRlPSExKSxGMih0Lm1heERhdGUpfHwodC5tYXhEYXRlPSExKSx0Lm1pbkRhdGUmJnQubWF4RGF0ZSYmdC5tYXhEYXRlPHQubWluRGF0ZSYmKHQubWF4RGF0ZT10Lm1pbkRhdGU9ITEpLHQubWluRGF0ZSYmdGhpcy5zZXRNaW5EYXRlKHQubWluRGF0ZSksdC5tYXhEYXRlJiZ0''@;'; put 'put ''aGlzLnNldE1heERhdGUodC5tYXhEYXRlKSxqdGUodC55ZWFyUmFuZ2UpKXtsZXQgcj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktMTA7dC55ZWFyUmFuZ2VbMF09cGFyc2VJbnQodC55ZWFyUmFuZ2VbMF0sMTApfHxyLHQueWVhclJhbmdlWzFdPXBhcnNlSW50KHQueWVhclJhbmdlWzFdLDEw''@;'; put 'put ''KXx8cn1lbHNlIHQueWVhclJhbmdlPU1hdGguYWJzKHBhcnNlSW50KHQueWVhclJhbmdlLDEwKSl8fEY0LnllYXJSYW5nZSx0LnllYXJSYW5nZT4xMDAmJih0LnllYXJSYW5nZT0xMDApO3JldHVybiB0fSx0b1N0cmluZzpmdW5jdGlvbihuKXtyZXR1cm4gbj1ufHx0aGlzLl9vLmZvcm1hdCxG''@;'; put 'put ''Mih0aGlzLl9kKT90aGlzLl9vLnRvU3RyaW5nP3RoaXMuX28udG9TdHJpbmcodGhpcy5fZCxuKTp0aGlzLmhhc01vbWVudD90aGlzLm1vbWVudCh0aGlzLl9kKS5mb3JtYXQobik6dGhpcy5fZC50b0RhdGVTdHJpbmcoKToiIn0sZ2V0TW9tZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFz''@;'; put 'put ''TW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpOm51bGx9LHNldE1vbWVudDpmdW5jdGlvbihuLHQpe3RoaXMuaGFzTW9tZW50JiZ0aGlzLm1vbWVudC5pc01vbWVudChuKSYmdGhpcy5zZXREYXRlKG4udG9EYXRlKCksdCl9LHVzZU1vbWVudDpmdW5jdGlvbihuKXt0aGlzLmhhc01vbWVudD0h''@;'; put 'put ''MCx0aGlzLm1vbWVudD1ufSxnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIEYyKHRoaXMuX2QpP25ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKTpudWxsfSxzZXREYXRlOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIHRoaXMuX2Q9bnVsbCx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVs''@;'; put 'put ''ZC52YWx1ZT0iIixsOGUodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLHRoaXMuZHJhdygpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmKG49bmV3IERhdGUoRGF0ZS5wYXJzZShuKSkpLCFGMihuKSlyZXR1cm47bGV0IGU9dGhpcy5fby5taW5EYXRlLHI9dGhpcy5fby5t''@;'; put 'put ''YXhEYXRlO0YyKGUpJiZuPGU/bj1lOkYyKHIpJiZuPnImJihuPXIpLHRoaXMuX2Q9bmV3IERhdGUobi5nZXRUaW1lKCkpLHlWKHRoaXMuX2QpLHRoaXMuZ290b0RhdGUodGhpcy5fZCksdGhpcy5fby5maWVsZCYmKHRoaXMuX28uZmllbGQudmFsdWU9dGhpcy50b1N0cmluZygpLGw4ZSh0aGlz''@;'; put 'put ''Ll9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uU2VsZWN0JiZ0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcyx0aGlzLmdldERhdGUoKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5zZXREYXRlKG51bGwpfSxnb3RvRGF0''@;'; put 'put ''ZTpmdW5jdGlvbihuKXtsZXQgdD0hMDtpZihGMihuKSl7aWYodGhpcy5jYWxlbmRhcnMpe2xldCBlPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsMSkscj1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgt''@;'; put 'put ''MV0ueWVhcix0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ubW9udGgsMSksaT1uLmdldFRpbWUoKTtyLnNldE1vbnRoKHIuZ2V0TW9udGgoKSsxKSxyLnNldERhdGUoci5nZXREYXRlKCktMSksdD1pPGUuZ2V0VGltZSgpfHxyLmdldFRpbWUoKTxpfXQmJih0aGlzLmNh''@;'; put 'put ''bGVuZGFycz1be21vbnRoOm4uZ2V0TW9udGgoKSx5ZWFyOm4uZ2V0RnVsbFllYXIoKX1dLCJyaWdodCI9PT10aGlzLl9vLm1haW5DYWxlbmRhciYmKHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKz0xLXRoaXMuX28ubnVtYmVyT2ZNb250aHMpKSx0aGlzLmFkanVzdENhbGVuZGFycygpfX0sYWRq''@;'; put 'put ''dXN0RGF0ZTpmdW5jdGlvbihuLHQpe2xldCBpLGU9dGhpcy5nZXREYXRlKCl8fG5ldyBEYXRlLHI9MjQqcGFyc2VJbnQodCkqNjAqNjAqMWUzOyJhZGQiPT09bj9pPW5ldyBEYXRlKGUudmFsdWVPZigpK3IpOiJzdWJ0cmFjdCI9PT1uJiYoaT1uZXcgRGF0ZShlLnZhbHVlT2YoKS1yKSksdGhp''@;'; put 'put ''cy5zZXREYXRlKGkpfSxhZGp1c3RDYWxlbmRhcnM6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXT1jOGUodGhpcy5jYWxlbmRhcnNbMF0pO2ZvcihsZXQgbj0xO248dGhpcy5fby5udW1iZXJPZk1vbnRocztuKyspdGhpcy5jYWxlbmRhcnNbbl09YzhlKHttb250aDp0aGlzLmNhbGVuZGFy''@;'; put 'put ''c1swXS5tb250aCtuLHllYXI6dGhpcy5jYWxlbmRhcnNbMF0ueWVhcn0pO3RoaXMuZHJhdygpfSxnb3RvVG9kYXk6ZnVuY3Rpb24oKXt0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKX0sZ290b01vbnRoOmZ1bmN0aW9uKG4pe2lzTmFOKG4pfHwodGhpcy5jYWxlbmRhcnNbMF0ubW9udGg9cGFyc2VJ''@;'; put 'put ''bnQobiwxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LG5leHRNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKyssdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0scHJldk1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgtLSx0aGlzLmFkanVzdENh''@;'; put 'put ''bGVuZGFycygpfSxnb3RvWWVhcjpmdW5jdGlvbihuKXtpc05hTihuKXx8KHRoaXMuY2FsZW5kYXJzWzBdLnllYXI9cGFyc2VJbnQobiwxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LHNldE1pbkRhdGU6ZnVuY3Rpb24obil7biBpbnN0YW5jZW9mIERhdGU/KHlWKG4pLHRoaXMuX28ubWlu''@;'; put 'put ''RGF0ZT1uLHRoaXMuX28ubWluWWVhcj1uLmdldEZ1bGxZZWFyKCksdGhpcy5fby5taW5Nb250aD1uLmdldE1vbnRoKCkpOih0aGlzLl9vLm1pbkRhdGU9RjQubWluRGF0ZSx0aGlzLl9vLm1pblllYXI9RjQubWluWWVhcix0aGlzLl9vLm1pbk1vbnRoPUY0Lm1pbk1vbnRoLHRoaXMuX28uc3Rh''@;'; put 'put ''cnRSYW5nZT1GNC5zdGFydFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0TWF4RGF0ZTpmdW5jdGlvbihuKXtuIGluc3RhbmNlb2YgRGF0ZT8oeVYobiksdGhpcy5fby5tYXhEYXRlPW4sdGhpcy5fby5tYXhZZWFyPW4uZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1heE1vbnRoPW4uZ2V0TW9udGgoKSk6''@;'; put 'put ''KHRoaXMuX28ubWF4RGF0ZT1GNC5tYXhEYXRlLHRoaXMuX28ubWF4WWVhcj1GNC5tYXhZZWFyLHRoaXMuX28ubWF4TW9udGg9RjQubWF4TW9udGgsdGhpcy5fby5lbmRSYW5nZT1GNC5lbmRSYW5nZSksdGhpcy5kcmF3KCl9LHNldFN0YXJ0UmFuZ2U6ZnVuY3Rpb24obil7dGhpcy5fby5zdGFy''@;'; put 'put ''dFJhbmdlPW59LHNldEVuZFJhbmdlOmZ1bmN0aW9uKG4pe3RoaXMuX28uZW5kUmFuZ2U9bn0sZHJhdzpmdW5jdGlvbihuKXtpZighdGhpcy5fdiYmIW4pcmV0dXJuO2xldCBtLHQ9dGhpcy5fbyxlPXQubWluWWVhcixyPXQubWF4WWVhcixpPXQubWluTW9udGgsYT10Lm1heE1vbnRoLGM9IiI7''@;'; put 'put ''dGhpcy5feTw9ZSYmKHRoaXMuX3k9ZSwhaXNOYU4oaSkmJnRoaXMuX208aSYmKHRoaXMuX209aSkpLHRoaXMuX3k+PXImJih0aGlzLl95PXIsIWlzTmFOKGEpJiZ0aGlzLl9tPmEmJih0aGlzLl9tPWEpKTtmb3IobGV0IEM9MDtDPHQubnVtYmVyT2ZNb250aHM7QysrKW09InBpa2EtdGl0bGUt''@;'; put 'put ''IitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDIpLGMrPSc8ZGl2IGNsYXNzPSJwaWthLWxlbmRhciI+Jyt3aHQodGhpcyxDLHRoaXMuY2FsZW5kYXJzW0NdLnllYXIsdGhpcy5jYWxlbmRhcnNbQ10ubW9udGgsdGhpcy5jYWxlbmRh''@;'; put 'put ''cnNbMF0ueWVhcixtKSt0aGlzLnJlbmRlcih0aGlzLmNhbGVuZGFyc1tDXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0NdLm1vbnRoLG0pKyI8L2Rpdj4iO3RoaXMuZWwuaW5uZXJIVE1MPWMsdC5ib3VuZCYmImhpZGRlbiIhPT10LmZpZWxkLnR5cGUmJk50ZShmdW5jdGlvbigpe3QudHJpZ2dlci5m''@;'; put 'put ''b2N1cygpfSwxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkRyYXcmJnRoaXMuX28ub25EcmF3KHRoaXMpLHQuYm91bmQmJnQuZmllbGQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0LmFyaWFMYWJlbCl9LGFkanVzdFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IG4sdCxlLHIsaSxh''@;'; put 'put ''LGMsbSxDLFAsWTt0aGlzLl9vLmNvbnRhaW5lcnx8KHRoaXMuZWwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixuPXRoaXMuX28udHJpZ2dlcix0PXRoaXMuZWwub2Zmc2V0V2lkdGgsZT10aGlzLmVsLm9mZnNldEhlaWdodCxyPWY4KCkuaW5uZXJXaWR0aHx8SmYoKS5kb2N1bWVudEVsZW1l''@;'; put 'put ''bnQuY2xpZW50V2lkdGgsaT1mOCgpLmlubmVySGVpZ2h0fHxKZigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsYT1KZigpLmJvZHkuc2Nyb2xsVG9wfHxKZigpLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsUD0hMCxZPSEwLEM9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPUMu''@;'; put 'put ''bGVmdCtmOCgpLnBhZ2VYT2Zmc2V0LG09Qy5ib3R0b20rZjgoKS5wYWdlWU9mZnNldCwodGhpcy5fby5yZXBvc2l0aW9uJiZjK3Q+cnx8dGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpPi0xJiZjLXQrbi5vZmZzZXRXaWR0aD4wKSYmKGM9Yy10K24ub2Zmc2V0V2lkdGgsUD0hMSks''@;'; put 'put ''KHRoaXMuX28ucmVwb3NpdGlvbiYmbStlPmkrYXx8dGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJ0b3AiKT4tMSYmbS1lLW4ub2Zmc2V0SGVpZ2h0PjApJiYobT1tLWUtbi5vZmZzZXRIZWlnaHQsWT0hMSksYzwwJiYoYz0wKSxtPDAmJihtPTApLHRoaXMuZWwuc3R5bGUubGVmdD1jKyJweCIs''@;'; put 'put ''dGhpcy5lbC5zdHlsZS50b3A9bSsicHgiLFZ0ZSh0aGlzLmVsLFA/ImxlZnQtYWxpZ25lZCI6InJpZ2h0LWFsaWduZWQiKSxWdGUodGhpcy5lbCxZPyJib3R0b20tYWxpZ25lZCI6InRvcC1hbGlnbmVkIiksQnRlKHRoaXMuZWwsUD8icmlnaHQtYWxpZ25lZCI6ImxlZnQtYWxpZ25lZCIpLEJ0''@;'; put 'put ''ZSh0aGlzLmVsLFk/InRvcC1hbGlnbmVkIjoiYm90dG9tLWFsaWduZWQiKSl9LHJlbmRlcjpmdW5jdGlvbihuLHQsZSl7bGV0IHI9dGhpcy5fbyxpPW5ldyBEYXRlLGE9czhlKG4sdCksYz1uZXcgRGF0ZShuLHQsMSkuZ2V0RGF5KCksbT1bXSxDPVtdO3lWKGkpLHIuZmlyc3REYXk+MCYmKGMt''@;'; put 'put ''PXIuZmlyc3REYXksYzwwJiYoYys9NykpO2xldCBQPTA9PT10PzExOnQtMSxZPTExPT09dD8wOnQrMSxKPTA9PT10P24tMTpuLGNlPTExPT09dD9uKzE6bixmZT1zOGUoSixQKSxBZT1hK2MsSGU9QWU7Zm9yKDtIZT43OylIZS09NztBZSs9Ny1IZTtsZXQgWGU9ITE7Zm9yKGxldCBydD0wLGR0''@;'; put 'put ''PTA7cnQ8QWU7cnQrKyl7bGV0IGp0PW5ldyBEYXRlKG4sdCxydC1jKzEpLEZ0PSEhRjIodGhpcy5fZCkmJl9WKGp0LHRoaXMuX2QpLHBuPV9WKGp0LGkpLG9uPS0xIT09ci5ldmVudHMuaW5kZXhPZihqdC50b0RhdGVTdHJpbmcoKSksZ249cnQ8Y3x8cnQ+PWErYyxabj1ydC1jKzEsR3I9dCxF''@;'; put 'put ''cj1uLFRyPXIuc3RhcnRSYW5nZSYmX1Yoci5zdGFydFJhbmdlLGp0KSxpcj1yLmVuZFJhbmdlJiZfVihyLmVuZFJhbmdlLGp0KSxwaT1yLnN0YXJ0UmFuZ2UmJnIuZW5kUmFuZ2UmJnIuc3RhcnRSYW5nZTxqdCYmanQ8ci5lbmRSYW5nZSxEbj1yLm1pbkRhdGUmJmp0PHIubWluRGF0ZXx8ci5t''@;'; put 'put ''YXhEYXRlJiZqdD5yLm1heERhdGV8fHIuZGlzYWJsZVdlZWtlbmRzJiZmaHQoanQpfHxyLmRpc2FibGVEYXlGbiYmci5kaXNhYmxlRGF5Rm4oanQpO2duJiYocnQ8Yz8oWm49ZmUrWm4sR3I9UCxFcj1KKTooWm4tPWEsR3I9WSxFcj1jZSkpLHIucGlja1dob2xlV2VlayYmRnQmJihYZT0hMCks''@;'; put 'put ''Qy5wdXNoKGdodCh7ZGF5OlpuLG1vbnRoOkdyLHllYXI6RXIsaGFzRXZlbnQ6b24saXNTZWxlY3RlZDpGdCxpc1RvZGF5OnBuLGlzRGlzYWJsZWQ6RG4saXNFbXB0eTpnbixpc1N0YXJ0UmFuZ2U6VHIsaXNFbmRSYW5nZTppcixpc0luUmFuZ2U6cGksc2hvd0RheXNJbk5leHRBbmRQcmV2aW91''@;'; put 'put ''c01vbnRoczpyLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOnIuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfSkpLDc9PSsrZHQmJihyLnNob3dXZWVrTnVtYmVyJiZDLnVu''@;'; put 'put ''c2hpZnQodmh0KHRoaXMscnQtYyx0LG4sci5maXJzdFdlZWtPZlllYXJNaW5EYXlzKSksbS5wdXNoKHlodChDLHIuaXNSVEwsci5waWNrV2hvbGVXZWVrLFhlKSksQz1bXSxkdD0wLFhlPSExKX1yZXR1cm4gZnVuY3Rpb24obix0LGUpe3JldHVybic8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNl''@;'; put 'put ''bGxzcGFjaW5nPSIwIiBjbGFzcz0icGlrYS10YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSInK2UrJyI+JytmdW5jdGlvbihuKXtsZXQgdCxlPVtdO2ZvcihuLnNob3dXZWVrTnVtYmVyJiZlLnB1c2goIjx0aD48L3RoPiIpLHQ9MDt0PDc7dCsrKWUucHVzaCgnPHRoIHNjb3Bl''@;'; put 'put ''PSJjb2wiPjxhYmJyIHRpdGxlPSInK3U4ZShuLHQpKyciPicrdThlKG4sdCwhMCkrIjwvYWJicj48L3RoPiIpO3JldHVybiI8dGhlYWQ+PHRyPiIrKG4uaXNSVEw/ZS5yZXZlcnNlKCk6ZSkuam9pbigiIikrIjwvdHI+PC90aGVhZD4ifShuKStmdW5jdGlvbihuKXtyZXR1cm4iPHRib2R5PiIr''@;'; put 'put ''bi5qb2luKCIiKSsiPC90Ym9keT4ifSh0KSsiPC90YWJsZT4ifShyLG0sZSl9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5pc1Zpc2libGUoKXx8KHRoaXMuX3Y9ITAsdGhpcy5kcmF3KCksQnRlKHRoaXMuZWwsImlzLWhpZGRlbiIp''@;'; put 'put ''LHRoaXMuX28uYm91bmQmJihQNChKZigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5hZGp1c3RQb3NpdGlvbigpKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbk9wZW4mJnRoaXMuX28ub25PcGVuLmNhbGwodGhpcykpfSxoaWRlOmZ1bmN0aW9uKCl7bGV0IG49dGhpcy5fdjsh''@;'; put 'put ''MSE9PW4mJih0aGlzLl9vLmJvdW5kJiZFNShKZigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiLHRoaXMuZWwuc3R5bGUubGVmdD0iYXV0byIsdGhpcy5lbC5zdHlsZS50b3A9ImF1dG8iKSxWdGUodGhp''@;'; put 'put ''cy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fdj0hMSx2b2lkIDAhPT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkNsb3NlJiZ0aGlzLl9vLm9uQ2xvc2UuY2FsbCh0aGlzKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtsZXQgbj10aGlzLl9vO3RoaXMuaGlkZSgpLEU1KHRoaXMuZWwsIm1v''@;'; put 'put ''dXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sITApLEU1KHRoaXMuZWwsInRvdWNoZW5kIix0aGlzLl9vbk1vdXNlRG93biwhMCksRTUodGhpcy5lbCwiY2hhbmdlIix0aGlzLl9vbkNoYW5nZSksbi5rZXlib2FyZElucHV0JiZFNShKZigpLCJrZXlkb3duIix0aGlzLl9vbktleUNoYW5nZSks''@;'; put 'put ''bi5maWVsZCYmKEU1KG4uZmllbGQsImNoYW5nZSIsdGhpcy5fb25JbnB1dENoYW5nZSksbi5ib3VuZCYmKEU1KG4udHJpZ2dlciwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayksRTUobi50cmlnZ2VyLCJmb2N1cyIsdGhpcy5fb25JbnB1dEZvY3VzKSxFNShuLnRyaWdnZXIsImJsdXIiLHRo''@;'; put 'put ''aXMuX29uSW5wdXRCbHVyKSkpLHRoaXMuZWwucGFyZW50Tm9kZSYmdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpfX07Y29uc3QgZjhlPSJkYXRlRWRpdG9yIjt2YXIgd1Y9bmV3IFdlYWtTZXQ7Y2xhc3MgcDhlIGV4dGVuZHMgS3Z7Y29uc3RydWN0b3IoKXtzdXBlcigu''@;'; put 'put ''Li5hcmd1bWVudHMpLGZ1bmN0aW9uIFNodChuLHQpeyhmdW5jdGlvbiBNaHQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LmFkZChuKX0o''@;'; put 'put ''dGhpcyx3ViksZDhlKHRoaXMsInBhcmVudERlc3Ryb3llZCIsITEpLGQ4ZSh0aGlzLCIkZGF0ZVBpY2tlciIsbnVsbCl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJkYXRlIn1pbml0KCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHFzKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQg''@;'; put 'put ''dG8gaW5jbHVkZSBtb21lbnQuanMgdG8geW91ciBwcm9qZWN0LiIpO3N1cGVyLmluaXQoKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95RWxlbWVudHMoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0''@;'; put 'put ''VGhlbWUiLCh0LGUpPT57ZXx8dGhpcy5jbG9zZSgpfSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuZGF0ZVBpY2tlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5kYXRlUGlja2VyU3R5bGU9dGhpcy5kYXRlUGlj''@;'; put 'put ''a2VyLnN0eWxlLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPTAsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnpJbmRleD05OTk5LHRoaXMuZGF0ZVBpY2tlci5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoImRpciIsdGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIiksdGkodGhpcy5kYXRlUGlja2VyLCJodERhdGVwaWNrZXJIb2xkZXIiKSx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmRhdGVQaWNrZXIpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlz''@;'; put 'put ''dGVuZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLHQ9Pnt2byh0LnRhcmdldCwicGlrYS1kYXkiKSYmdGhpcy5oaWRlRGF0ZXBpY2tlcigpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX1kZXN0cm95RWxlbWVudHMoKXtjb25zdCB0PXRoaXMuZGF0ZVBpY2tlci5wYXJlbnROb2RlO3RoaXMu''@;'; put 'put ''JGRhdGVQaWNrZXImJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHQmJnQucmVtb3ZlQ2hpbGQodGhpcy5kYXRlUGlja2VyKX1wcmVwYXJlKHQsZSxyLGksYSxjKXtzdXBlci5wcmVwYXJlKHQsZSxyLGksYSxjKX1vcGVuKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Y29uc3Qgcj10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTt0aGlzLnNob3dEYXRlcGlja2VyKHQpLHN1cGVyLm9wZW4oKSxyLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dMZWZ0Il1dLGNh''@;'; put 'put ''bGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDEpfX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+''@;'; put 'put ''e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDcpfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDcpfX1dLHtncm91cDpmOGV9KX1jbG9zZSgpe3ZhciB0O251bGwhPT0odD10aGlzLiRk''@;'; put 'put ''YXRlUGlja2VyKSYmdm9pZCAwIT09dCYmdC5kZXN0cm95JiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57Y29uc3QgaT10aGlzLmhvdC5fZ2V0RWRpdG9yTWFuYWdlcigpO2kuY2xvc2VFZGl0b3IoKSx0aGlzLmhvdC52aWV3LnJlbmRl''@;'; put 'put ''cigpLGkucHJlcGFyZUVkaXRvcigpfSksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChmOGUpLHN1cGVyLmNsb3NlKCl9ZmluaXNoRWRpdGluZygpe3N1cGVyLmZpbmlzaEVkaXRpbmcoYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zaG93RGF0ZXBpY2tlcih0KXtjb25zdCBlPVV0ZSh3Vix0aGlzLFd0ZSkuY2FsbCh0aGlzKSxyPXRoaXMuaG90''@;'; put 'put ''LnZpZXcuaXNNb3VzZURvd24oKSxpPSEhdCYmZ0oodC5rZXlDb2RlKTtsZXQgYTt0aGlzLmRhdGVQaWNrZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuJGRhdGVQaWNrZXI9bmV3IHp0ZSh0aGlzLmdldERhdGVQaWNrZXJDb25maWcoKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuJGRh''@;'; put 'put ''dGVQaWNrZXIudXNlTW9tZW50JiZ0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudChxcyksdGhpcy4kZGF0ZVBpY2tlci5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7fSx0aGlzLm9yaWdpbmFsVmFsdWU/KGE9dGhpcy5vcmlnaW5hbFZhbHVlLHFzKGEsZSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRk''@;'; put 'put ''YXRlUGlja2VyLnNldE1vbWVudChxcyhhLGUpLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5hbFZhbHVlKSwhaSYmIXImJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhh''@;'; put 'put ''PXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUscXMoYSxlLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KHFzKGEsZSksITApLCFpJiYhciYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIo''@;'; put 'put ''KXt0aGlzLmRhdGVQaWNrZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRlUGlja2VyLmhpZGUoKX1nZXREYXRlUGlja2VyQ29uZmlnKCl7dmFyIHQ7Y29uc3QgZT10aGlzLlRFWFRBUkVBLHI9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlj''@;'; put 'put ''a2VyQ29uZmlnJiZ6QShyLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7Y29uc3QgaT1yLm9uU2VsZWN0LGE9ci5vbkNsb3NlO3JldHVybiByLmZpZWxkPWUsci50cmlnZ2VyPWUsci5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLHIuYm91bmQ9ITEsci5rZXlib2FyZElu''@;'; put 'put ''cHV0PSExLHIuZm9ybWF0PW51bGwhPT0odD1yLmZvcm1hdCkmJnZvaWQgMCE9PXQ/dDpVdGUod1YsdGhpcyxXdGUpLmNhbGwodGhpcyksci5yZXBvc2l0aW9uPXIucmVwb3NpdGlvbnx8ITEsci5pc1JUTD0hMSxyLm9uU2VsZWN0PWM9PntsZXQgbT1jO2lzTmFOKG0uZ2V0VGltZSgpKXx8KG09''@;'; put 'put ''cXMobSkuZm9ybWF0KFV0ZSh3Vix0aGlzLFd0ZSkuY2FsbCh0aGlzKSkpLHRoaXMuc2V0VmFsdWUobSksaSYmaSgpLHNwKCkmJnRoaXMuaGlkZURhdGVwaWNrZXIoKX0sci5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksYSYmYSgpfSxy''@;'; put 'put ''fXJlZnJlc2hEaW1lbnNpb25zKHQpe3ZhciBlO2lmKHN1cGVyLnJlZnJlc2hEaW1lbnNpb25zKHQpLHRoaXMuc3RhdGUhPT12dS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuaGlkZURhdGVwaWNrZXIoKTtj''@;'; put 'put ''b25zdHtyb3dJbmRleE1hcHBlcjpyLGNvbHVtbkluZGV4TWFwcGVyOml9PXRoaXMuaG90LHt3dE92ZXJsYXlzOmF9PXRoaXMuaG90LnZpZXcuX3d0LHt3dFRhYmxlOmN9PW51bGwhPT0oZT1hLmdldFBhcmVudE92ZXJsYXkodGhpcy5URCkpJiZ2b2lkIDAhPT1lP2U6dGhpcy5ob3Qudmlldy5f''@;'; put 'put ''d3QsbT1yLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSksQz1yLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSxQPWkuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRl''@;'; put 'put ''eChjLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKSxZPWkuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpO2lmKHRoaXMucm93Pj1tJiZ0aGlzLnJvdzw9QyYmdGhpcy5jb2w+PVAmJnRoaXMuY29sPD1ZKXtjb25z''@;'; put 'put ''dCBKPXRoaXMuVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXQrSi50b3ArSHUodGhpcy5URCl9cHhgO2xldCBjZT10aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0O3RoaXMuaG90''@;'; put 'put ''LmlzUnRsKCk/Y2UrPUoucmlnaHQtcHUodGhpcy5kYXRlUGlja2VyKTpjZSs9Si5sZWZ0LHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9YCR7Y2V9cHhgfWVsc2UgdGhpcy5oaWRlRGF0ZXBpY2tlcigpfX1mdW5jdGlvbiBXdGUoKXt2YXIgbjtyZXR1cm4gbnVsbCE9PShuPXRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXMuZGF0ZUZvcm1hdCkmJnZvaWQgMCE9PW4/bjoiREQvTU0vWVlZWSJ9Y2xhc3MgZzhlIGV4dGVuZHMgSHRle3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUodCxlLHIsaSxhLGMpe2MuZmlsdGVyPSExLGMuc3RyaWN0PSEwLHN1cGVyLnBy''@;'; put 'put ''ZXBhcmUodCxlLHIsaSxhLGMpfX1jbGFzcyBtOGUgZXh0ZW5kcyBLdntzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIm51bWVyaWMifX1jbGFzcyB2OGUgZXh0ZW5kcyBLdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRGh0KG4sdCxlKXtyZXR1cm4o''@;'; put 'put ''dD1mdW5jdGlvbiBJaHQobil7dmFyIHQ9ZnVuY3Rpb24gUmh0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIi''@;'; put 'put ''fSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywiYXV0b1Jlc2l6ZSIsWDZlKHRoaXMuaG90LnJvb3REb2N1bWVudCx7dGV4dENvbnRlbnQ6dD0+Ilx1MjAy''@;'; put 'put ''MiIucmVwZWF0KHQudmFsdWUubGVuZ3RoKX0pKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInBhc3N3b3JkIn1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5URVhUQVJFQT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5w''@;'; put 'put ''dXQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgidHlwZSIsInBhc3N3b3JkIiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwiIiksdGhpcy5URVhUQVJFQS5jbGFzc05hbWU9ImhhbmRzb250YWJsZUlucHV0Iix0aGlzLnRleHRhcmVhU3R5bGU9dGhp''@;'; put 'put ''cy5URVhUQVJFQS5zdHlsZSx0aGlzLnRleHRhcmVhU3R5bGUud2lkdGg9MCx0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PTAsUzQodGhpcy5URVhUQVJFQV9QQVJFTlQpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKC4uLmFwKC0xKSksdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hp''@;'; put 'put ''bGQodGhpcy5URVhUQVJFQSl9fWNvbnN0IFp0ZT0iaHRfZWRpdG9yX3Zpc2libGUiLHk4ZT0ic2VsZWN0RWRpdG9yIjtjbGFzcyBfOGUgZXh0ZW5kcyBWQ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInNlbGVjdCJ9aW5pdCgpe3RoaXMuc2VsZWN0V3JhcHBlcj10aGlzLmhvdC5y''@;'; put 'put ''b290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zZWxlY3Q9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCJ0cnVlIiksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxl''@;'; put 'put ''LmRpc3BsYXk9Im5vbmUiO2NvbnN0IHQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFnczt0LmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsZSYmdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVu''@;'; put 'put ''IiwidHJ1ZSIpLHQuYXBwZW5kQ2hpbGQodGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksdGkodGhpcy5zZWxlY3RXcmFwcGVyLCJodFNlbGVjdEVkaXRvciIpLHRoaXMuc2VsZWN0V3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdCksdGhpcy5zZWxl''@;'; put 'put ''Y3RXcmFwcGVyLmluc2VydEJlZm9yZSh0LHRoaXMuc2VsZWN0V3JhcHBlci5maXJzdENoaWxkKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdFdyYXBwZXIpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVl''@;'; put 'put ''fXNldFZhbHVlKHQpe3RoaXMuc2VsZWN0LnZhbHVlPXR9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5h''@;'; put 'put ''bWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29wZW5lZD0hMSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdm8odGhpcy5zZWxlY3RXcmFwcGVyLFp0ZSkmJkhhKHRoaXMuc2VsZWN0V3JhcHBlcixadGUpLHRoaXMudW5y''@;'; put 'put ''ZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1l''@;'; put 'put ''bnNpb25zKCkpfXByZXBhcmUodCxlLHIsaSxhLGMpe3N1cGVyLnByZXBhcmUodCxlLHIsaSxhLGMpO2NvbnN0IG09dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBDO0M9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgbT9tKHRoaXMucm93LHRoaXMu''@;'; put 'put ''Y29sLHRoaXMucHJvcCk6bSksUzQodGhpcy5zZWxlY3QpLGFzKEMsKFAsWSk9Pntjb25zdCBKPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTtKLnZhbHVlPVksSjYoSixQKSx0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZChKKX0pfXByZXBhcmVPcHRpb25zKHQp''@;'; put 'put ''e2xldCBlPXt9O2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCByPTAsaT10Lmxlbmd0aDtyPGk7cisrKWVbdFtyXV09dFtyXTtlbHNlIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10KTtyZXR1cm4gZX1yZWZyZXNoVmFsdWUoKXtjb25zdCB0PXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwo''@;'; put 'put ''dGhpcy5yb3csdGhpcy5wcm9wKTt0aGlzLm9yaWdpbmFsVmFsdWU9dCx0aGlzLnNldFZhbHVlKHQpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2lmKHRoaXMuc3RhdGUhPT12dS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2Vs''@;'; put 'put ''bCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuY2xvc2UoKTtjb25zdHt0b3A6dCxzdGFydDplLHdpZHRoOnIsaGVpZ2h0Oml9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxhPXRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZTthLmhlaWdodD1gJHtpfXB4YCxhLndpZHRoPWAke3J9cHhgLGEu''@;'; put 'put ''dG9wPWAke3R9cHhgLGFbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7ZX1weGAsYS5tYXJnaW49IjBweCIsdGkodGhpcy5zZWxlY3RXcmFwcGVyLFp0ZSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBlPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRl''@;'; put 'put ''eHQoImVkaXRvciIpLHI9e2dyb3VwOnk4ZX07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmUuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaT10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4LTE7aT49MCYmKHRoaXMuc2VsZWN0W2ldLnNlbGVj''@;'; put 'put ''dGVkPSEwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGk9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleCsxO2k8PXRoaXMuc2VsZWN0Lmxlbmd0aC0xJiYodGhpcy5zZWxlY3RbaV0uc2VsZWN0ZWQ9ITApfX1dLHIpfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0''@;'; put 'put ''aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHk4ZSl9fWNsYXNzIGI4ZSBleHRlbmRzIEt2e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGltZSJ9cHJlcGFyZSh0LGUscixpLGEsYyl7c3VwZXIu''@;'; put 'put ''cHJlcGFyZSh0LGUscixpLGEsYyksdGhpcy5URVhUQVJFQS5kaXI9Imx0ciJ9fWZ1bmN0aW9uIFl0ZShuLHQsZSxyLGksYSxjKXtMay5hcHBseSh0aGlzLFtuLHQsZSxyLGksYSxjXSksSjYodCxhPz8iIiwhMSl9ZnVuY3Rpb24gQkMobix0LGUscixpLGEsYyl7Y29uc3R7cm9vdERvY3VtZW50''@;'; put 'put ''Om19PW4sQz1jLmFsbG93SHRtbD9ZdGU6eDUsUD1tLmNyZWF0ZUVsZW1lbnQoIkRJViIpLFk9bi5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFAuY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixZJiZQLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksUC5hcHBlbmRD''@;'; put 'put ''aGlsZChtLmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksQy5hcHBseSh0aGlzLFtuLHQsZSxyLGksYSxjXSksdC5maXJzdENoaWxkfHx0LmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIlx4YTAiKSksdC5pbnNlcnRCZWZvcmUoUCx0LmZpcnN0Q2hpbGQpLHRpKHQsImh0QXV0b2NvbXBs''@;'; put 'put ''ZXRlIiksIW4uYWNBcnJvd0xpc3RlbmVyKXtjb25zdCBKPW5ldyBaZihuKTtuLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlvbihjZSl7dm8oY2UudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93IikmJm4udmlldy5fd3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsbi5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhlLHIpLHQpfSxKLmFkZEV2ZW50TGlzdGVuZXIobi5yb290RWxlbWVudCwibW91c2Vkb3duIixuLmFjQXJyb3dMaXN0ZW5lciksbi5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e0ouZGVzdHJveSgpfSl9fWZ1bmN0aW9uIEd0ZShuLHQsZSxyLGksYSxjKXtCQy5h''@;'; put 'put ''cHBseSh0aGlzLFtuLHQsZSxyLGksYSxjXSl9WXRlLlJFTkRFUkVSX1RZUEU9Imh0bWwiLEJDLlJFTkRFUkVSX1RZUEU9ImF1dG9jb21wbGV0ZSIsR3RlLlJFTkRFUkVSX1RZUEU9ImRyb3Bkb3duIjtjb25zdCB3OGU9bmV3IFdlYWtNYXAsQzhlPW5ldyBXZWFrTWFwLGpDPSJkYXRhLXJvdyIs''@;'; put 'put ''ekM9ImRhdGEtY29sIjtmdW5jdGlvbiAkdGUobix0LGUscixpLGEsYyl7Y29uc3R7cm9vdERvY3VtZW50Om19PW4sQz1uLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7TGsuYXBwbHkodGhpcyxbbix0LGUscixpLGEsY10pLGZ1bmN0aW9uIHpodChuKXtsZXQgdD1DOGUuZ2V0KG4pO2lmKCF0KXtj''@;'; put 'put ''b25zdHtyb290RWxlbWVudDplfT1uO3Q9bmV3IFpmKG4pLHQuYWRkRXZlbnRMaXN0ZW5lcihlLCJjbGljayIscj0+ZnVuY3Rpb24gWWh0KG4sdCl7Y29uc3R7dGFyZ2V0OmV9PW47aWYoIUt0ZShlKXx8IWUuaGFzQXR0cmlidXRlKGpDKXx8IWUuaGFzQXR0cmlidXRlKHpDKSlyZXR1cm47Y29u''@;'; put 'put ''c3Qgcj1wYXJzZUludChlLmdldEF0dHJpYnV0ZShqQyksMTApLGk9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoekMpLDEwKTt0LmdldENlbGxNZXRhKHIsaSkucmVhZE9ubHkmJm4ucHJldmVudERlZmF1bHQoKX0ocixuKSksdC5hZGRFdmVudExpc3RlbmVyKGUsIm1vdXNldXAiLHI9PmZ1bmN0''@;'; put 'put ''aW9uIFpodChuLHQpe2NvbnN0e3RhcmdldDplfT1uO0t0ZShlKSYmKCFlLmhhc0F0dHJpYnV0ZShqQyl8fCFlLmhhc0F0dHJpYnV0ZSh6Qyl8fHNldFRpbWVvdXQodC5saXN0ZW4sMTApKX0ocixuKSksdC5hZGRFdmVudExpc3RlbmVyKGUsImNoYW5nZSIscj0+ZnVuY3Rpb24gR2h0KG4sdCl7''@;'; put 'put ''Y29uc3R7dGFyZ2V0OmV9PW47aWYoIUt0ZShlKXx8IWUuaGFzQXR0cmlidXRlKGpDKXx8IWUuaGFzQXR0cmlidXRlKHpDKSlyZXR1cm47Y29uc3Qgcj1wYXJzZUludChlLmdldEF0dHJpYnV0ZShqQyksMTApLGk9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoekMpLDEwKSxhPXQuZ2V0Q2VsbE1l''@;'; put 'put ''dGEocixpKTtpZighYS5yZWFkT25seSl7bGV0IGM9bnVsbDtjPW4udGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09YS51bmNoZWNrZWRUZW1wbGF0ZXx8YS5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09YS51bmNoZWNrZWRUZW1wbGF0ZSYmYS51bmNoZWNrZWRUZW1wbGF0ZSx0LnNldERhdGFBdENl''@;'; put 'put ''bGwocixpLGMpfX0ocixuKSksQzhlLnNldChuLHQpfX0obik7bGV0IFA9ZnVuY3Rpb24gVWh0KG4pe2NvbnN0IHQ9bi5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiB0LmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLHQudHlwZT0iY2hlY2tib3giLHQuc2V0QXR0cmli''@;'; put 'put ''dXRlKCJ0YWJpbmRleCIsIi0xIiksdC5jbG9uZU5vZGUoITEpfShtKTtjb25zdCBZPWMubGFiZWw7bGV0IEo9ITE7aWYodHlwZW9mIGMuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKGMuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgYy51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihjLnVuY2hlY2tl''@;'; put 'put ''ZFRlbXBsYXRlPSExKSxTNCh0KSxhPT09Yy5jaGVja2VkVGVtcGxhdGV8fHFsKGEpLnRvTG9jYWxlTG93ZXJDYXNlKGMubG9jYWxlKT09PXFsKGMuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZShjLmxvY2FsZSk/UC5jaGVja2VkPSEwOmE9PT1jLnVuY2hlY2tlZFRlbXBsYXRl''@;'; put 'put ''fHxxbChhKS50b0xvY2FsZUxvd2VyQ2FzZShjLmxvY2FsZSk9PT1xbChjLnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZShjLmxvY2FsZSk/UC5jaGVja2VkPSExOkdjKGEpP3RpKFAsIm5vVmFsdWUiKTooUC5zdHlsZS5kaXNwbGF5PSJub25lIix0aShQLCJodEJhZFZhbHVl''@;'; put 'put ''IiksSj0hMCksWmEoUCxbW2pDLGVdLFt6QyxyXV0pLEMmJlphKFAsW1QyKG4uZ2V0VHJhbnNsYXRlZFBocmFzZShQLmNoZWNrZWQ/cWVlOkplZSkpLFpnZShQLmNoZWNrZWQpLFsicm9sZSIsImNoZWNrYm94Il1dKSwhSiYmWSl7bGV0IEhlPSIiO2lmKFkudmFsdWUpSGU9ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFkudmFsdWU/WS52YWx1ZS5jYWxsKHRoaXMsZSxyLGksYSk6WS52YWx1ZTtlbHNlIGlmKFkucHJvcGVydHkpe2NvbnN0IHJ0PW4uZ2V0RGF0YUF0Um93UHJvcChlLFkucHJvcGVydHkpO0hlPW51bGwhPT1ydD9ydDoiIn1jb25zdCBYZT1mdW5jdGlvbiBXaHQobix0LGUpe2NvbnN0''@;'; put 'put ''IHI9bi5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO3IuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJMYWJlbCAiKyhlPyJmdWxsV2lkdGgiOiIiKTtjb25zdCBpPW4uY3JlYXRlVGV4dE5vZGUodCk7aWYoZSl7Y29uc3QgYT1uLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTthLmFwcGVuZENoaWxk''@;'; put 'put ''KGkpLHIuYXBwZW5kQ2hpbGQoYSl9ZWxzZSByLmFwcGVuZENoaWxkKGkpO3JldHVybiByLmNsb25lTm9kZSghMCl9KG0sSGUsITAhPT1ZLnNlcGFyYXRlZCk7ImJlZm9yZSI9PT1ZLnBvc2l0aW9uP1kuc2VwYXJhdGVkPyh0LmFwcGVuZENoaWxkKFhlKSx0LmFwcGVuZENoaWxkKFApKTooWGUu''@;'; put 'put ''YXBwZW5kQ2hpbGQoUCksUD1YZSk6KCFZLnBvc2l0aW9ufHwiYWZ0ZXIiPT09WS5wb3NpdGlvbikmJihZLnNlcGFyYXRlZD8odC5hcHBlbmRDaGlsZChQKSx0LmFwcGVuZENoaWxkKFhlKSk6KFhlLmluc2VydEJlZm9yZShQLFhlLmZpcnN0Q2hpbGQpLFA9WGUpKX1mdW5jdGlvbiBmZSgpe2xl''@;'; put 'put ''dCBIZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IFhlPW4uZ2V0U2VsZWN0ZWRSYW5nZSgpLHJ0PVtdLGR0PW5ldyBNYXA7bGV0IGp0PVtdLEZ0PTA7aWYoWGUpe2ZvcihsZXQgcG49MDtwbjxYZS5sZW5ndGg7cG4rKyl7Y29u''@;'; put 'put ''c3R7cm93Om9uLGNvbDpnbn09WGVbcG5dLmdldFRvcFN0YXJ0Q29ybmVyKCkse3Jvdzpabixjb2w6R3J9PVhlW3BuXS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IEVyPW9uO0VyPD1abjtFcis9MSlmb3IobGV0IFRyPWduO1RyPD1HcjtUcis9MSl7Y29uc3QgaXI9bi5nZXRDZWxsTWV0''@;'; put 'put ''YShFcixUcik7aWYoaXIuaGlkZGVuKWNvbnRpbnVlO2NvbnN0IHBpPXtjaGVja2VkVGVtcGxhdGU6aXIuY2hlY2tlZFRlbXBsYXRlLHVuY2hlY2tlZFRlbXBsYXRlOmlyLnVuY2hlY2tlZFRlbXBsYXRlfTtpZigiY2hlY2tib3giIT09aXIudHlwZSl7ITA9PT1IZSYmIWlyLnJlYWRPbmx5JiYo''@;'; put 'put ''ZHQuaGFzKHJ0Lmxlbmd0aCk/ZHQuc2V0KHJ0Lmxlbmd0aCxbLi4uZHQuZ2V0KHJ0Lmxlbmd0aCksW0VyLFRyLG51bGxdXSk6ZHQuc2V0KHJ0Lmxlbmd0aCxbW0VyLFRyLG51bGxdXSkpO2NvbnRpbnVlfWlmKCEwPT09aXIucmVhZE9ubHkpY29udGludWU7dHlwZW9mIGlyLmNoZWNrZWRUZW1w''@;'; put 'put ''bGF0ZT4idSImJihpci5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBpci51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihpci51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3QgRG49bi5nZXREYXRhQXRDZWxsKEVyLFRyKTshMT09PUhlP1tpci5jaGVja2VkVGVtcGxhdGUsaXIuY2hlY2tlZFRl''@;'; put 'put ''bXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKERuKT9qdC5wdXNoKFtFcixUcixpci51bmNoZWNrZWRUZW1wbGF0ZSxwaV0pOltpci51bmNoZWNrZWRUZW1wbGF0ZSxpci51bmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhEbikmJmp0LnB1c2goW0Vy''@;'; put 'put ''LFRyLGlyLmNoZWNrZWRUZW1wbGF0ZSxwaV0pOmp0LnB1c2goW0VyLFRyLGlyLnVuY2hlY2tlZFRlbXBsYXRlLHBpXSksRnQrPTF9cnQucHVzaChGdCksRnQ9MH1qdD1qdC5ldmVyeShwbj0+e2xldFssLG9uXT1wbjtyZXR1cm4gb249PT1qdFswXVsyXX0pP2p0Lm1hcChwbj0+e2xldFtvbixn''@;'; put 'put ''bixabl09cG47cmV0dXJuW29uLGduLFpuXX0pOmp0Lm1hcChwbj0+e2xldFtvbixnbiwsWm5dPXBuO3JldHVybltvbixnbixabi5jaGVja2VkVGVtcGxhdGVdfSksanQubGVuZ3RoPjAmJnJ0LmZvckVhY2goKHBuLG9uKT0+e2xldCBnbj1qdC5zcGxpY2UoMCxwbik7ZHQuc2l6ZSYmZHQuaGFz''@;'; put 'put ''KG9uKSYmKGduPVsuLi5nbiwuLi5kdC5nZXQob24pXSksbi5zZXREYXRhQXRDZWxsKGduKX0pfX1mdW5jdGlvbiBBZSgpe2NvbnN0IEhlPW4uZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKEhlKXtmb3IobGV0IFhlPTA7WGU8SGUubGVuZ3RoO1hlKyspe2NvbnN0IHJ0PUhlW1hlXS5nZXRUb3BTdGFy''@;'; put 'put ''dENvcm5lcigpLGR0PUhlW1hlXS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGp0PXJ0LnJvdztqdDw9ZHQucm93O2p0KyspZm9yKGxldCBGdD1ydC5jb2w7RnQ8PWR0LmNvbDtGdCsrKXtpZihuLmdldENlbGxNZXRhKGp0LEZ0KS5yZWFkT25seSljb250aW51ZTtjb25zdCBvbj1uLmdl''@;'; put 'put ''dENlbGwoanQsRnQpO2lmKE00KG9uKSYmb24ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MClyZXR1cm4hMH19cmV0dXJuITF9fSghWXx8WSYmIVkuc2VwYXJhdGVkKSYmdC5hcHBlbmRDaGlsZChQKSxKJiZ0LmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4''@;'; put 'put ''dE5vZGUoIiNiYWQtdmFsdWUjIikpLHc4ZS5oYXMobil8fCh3OGUuc2V0KG4sITApLGZ1bmN0aW9uIGNlKCl7bi5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KGZlKCksIUFlKCkpLHJ1''@;'; put 'put ''bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWR0P3ZvaWQgMDpkdC5oaWdobGlnaHQuaXNDZWxsKCl9fSx7a2V5czpbWyJlbnRlciJdXSxjYWxsYmFjazooKT0+KGZlKCksIUFlKCkpLHJ1bk9ubHlJZjoo''@;'; put 'put ''KT0+e2NvbnN0IGR0PW4uZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiBuLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nJiZkdD8uaGlnaGxpZ2h0LmlzQ2VsbCgpJiYhbi5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpfX0se2tleXM6W1siZGVsZXRlIl0sWyJiYWNrc3BhY2Ui''@;'; put 'put ''XV0sY2FsbGJhY2s6KCk9PihmZSghMCksIUFlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1uLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWR0P3ZvaWQgMDpkdC5oaWdobGlnaHQuaXNDZWxsKCl9fV0se2dyb3VwOiJjaGVja2JveFJlbmRl''@;'; put 'put ''cmVyIixyZWxhdGl2ZVRvR3JvdXA6YzgscG9zaXRpb246ImJlZm9yZSJ9KX0oKSl9ZnVuY3Rpb24gS3RlKG4pe3JldHVybiJJTlBVVCI9PT1uLnRhZ05hbWUmJiJjaGVja2JveCI9PT1uLmdldEF0dHJpYnV0ZSgidHlwZSIpfWZ1bmN0aW9uIFh0ZShuLHQsZSxyLGksYSxjKXtCQy5hcHBseSh0''@;'; put 'put ''aGlzLFtuLHQsZSxyLGksYSxjXSl9RWEuZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1bmN0aW9uKG4sdCxlKXtjb25zdHtsYWJlbDpyLHR5cGU6aSxyb3c6YSxjb2x1bW46Yyxwcm9wOm19PXQ7aWYoImNoZWNrYm94IiE9PWl8fCFyKXJldHVybjtjb25z''@;'; put 'put ''dHt2YWx1ZTpDLHByb3BlcnR5OlB9PXI7bGV0IFk9ZTtpZihDKVk9ImZ1bmN0aW9uIj09dHlwZW9mIEM/QyhhLGMsbSxlKTpDO2Vsc2UgaWYoUCl7Y29uc3QgSj10aGlzLmdldERhdGFBdFJvd1Byb3AoYSxQKTtZPW51bGwhPT1KP0o6ZX1yZXR1cm5gJHtxbChZKS5sZW5ndGh9YH0pLCR0ZS5S''@;'; put 'put ''RU5ERVJFUl9UWVBFPSJjaGVja2JveCIsWHRlLlJFTkRFUkVSX1RZUEU9ImhhbmRzb250YWJsZSI7dmFyIHF0ZSxNOGUsSnRlLHg4ZSxRdGUsVDhlLEtodD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/''@;'; put 'put ''Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIFhodChuKXtyZXR1cm4gbiYmbi5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwiZGVmYXVsdCIpP24uZGVmYXVsdDpufWZ1bmN0aW9uIEU4ZSgpe2lmKHg4ZSlyZXR1cm4gSnRl''@;'; put 'put ''O3g4ZT0xO2NvbnN0IG49W3trZXk6IlppQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNyl9LHtrZXk6IlpCIixmYWN0b3I6TWF0aC5wb3coMWUzLDcpfSx7a2V5OiJZaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDgpfSx7a2V5OiJZQiIsZmFjdG9yOk1hdGgucG93KDFlMyw4KX0se2tleToiVGlC''@;'; put 'put ''IixmYWN0b3I6TWF0aC5wb3coMTAyNCw0KX0se2tleToiVEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNCl9LHtrZXk6IlBpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNSl9LHtrZXk6IlBCIixmYWN0b3I6TWF0aC5wb3coMWUzLDUpfSx7a2V5OiJNaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDIp''@;'; put 'put ''fSx7a2V5OiJNQiIsZmFjdG9yOk1hdGgucG93KDFlMywyKX0se2tleToiS2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwxKX0se2tleToiS0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMSl9LHtrZXk6IkdpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMyl9LHtrZXk6IkdCIixmYWN0b3I6TWF0aC5w''@;'; put 'put ''b3coMWUzLDMpfSx7a2V5OiJFaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDYpfSx7a2V5OiJFQiIsZmFjdG9yOk1hdGgucG93KDFlMyw2KX0se2tleToiQiIsZmFjdG9yOjF9XTtmdW5jdGlvbiB0KEMpe3JldHVybiBDLnJlcGxhY2UoL1stL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX1m''@;'; put 'put ''dW5jdGlvbiBlKEMsUCxZLEosY2UsZmUsQWUpe2lmKCFpc05hTigrQykpcmV0dXJuK0M7bGV0IEhlPSIiLFhlPUMucmVwbGFjZSgvKF5bXihdKilcKCguKilcKShbXildKiQpLywiJDEkMiQzIik7aWYoWGUhPT1DKXJldHVybi0xKmUoWGUsUCxZLEosY2UsZmUpO2ZvcihsZXQgb249MDtvbjxu''@;'; put 'put ''Lmxlbmd0aDtvbisrKXtsZXQgZ249bltvbl07aWYoSGU9Qy5yZXBsYWNlKFJlZ0V4cChgKFswLTkgXSkoJHtnbi5rZXl9KSRgKSwiJDEiKSxIZSE9PUMpcmV0dXJuIGUoSGUsUCxZLEosY2UsZmUpKmduLmZhY3Rvcn1pZihIZT1DLnJlcGxhY2UoIiUiLCIiKSxIZSE9PUMpcmV0dXJuIGUoSGUs''@;'; put 'put ''UCxZLEosY2UsZmUpLzEwMDtsZXQgcnQ9cGFyc2VGbG9hdChDKTtpZihpc05hTihydCkpcmV0dXJuO2xldCBkdD1KKHJ0KTtpZihkdCYmIi4iIT09ZHQmJihIZT1DLnJlcGxhY2UobmV3IFJlZ0V4cChgJHt0KGR0KX0kYCksIiIpLEhlIT09QykpcmV0dXJuIGUoSGUsUCxZLEosY2UsZmUpO2xl''@;'; put 'put ''dCBqdD17fTtPYmplY3Qua2V5cyhmZSkuZm9yRWFjaChvbj0+e2p0W2ZlW29uXV09b259KTtsZXQgRnQ9T2JqZWN0LmtleXMoanQpLnNvcnQoKS5yZXZlcnNlKCkscG49RnQubGVuZ3RoO2ZvcihsZXQgb249MDtvbjxwbjtvbisrKXtsZXQgZ249RnRbb25dLFpuPWp0W2duXTtpZihIZT1DLnJl''@;'; put 'put ''cGxhY2UoZ24sIiIpLEhlIT09Qyl7bGV0IEdyO3N3aXRjaChabil7Y2FzZSJ0aG91c2FuZCI6R3I9TWF0aC5wb3coMTAsMyk7YnJlYWs7Y2FzZSJtaWxsaW9uIjpHcj1NYXRoLnBvdygxMCw2KTticmVhaztjYXNlImJpbGxpb24iOkdyPU1hdGgucG93KDEwLDkpO2JyZWFrO2Nhc2UidHJpbGxp''@;'; put 'put ''b24iOkdyPU1hdGgucG93KDEwLDEyKX1yZXR1cm4gZShIZSxQLFksSixjZSxmZSkqR3J9fX1mdW5jdGlvbiBpKEMsUCxZPSIiLEosY2UsZmUsQWUpe2lmKCIiPT09QylyZXR1cm47aWYoQz09PWNlKXJldHVybiAwO2xldCBIZT1mdW5jdGlvbiByKEMsUCxZKXtsZXQgSj1DLnJlcGxhY2UoWSwi''@;'; put 'put ''Iik7cmV0dXJuIEo9Si5yZXBsYWNlKG5ldyBSZWdFeHAoYChbMC05XSkke3QoUC50aG91c2FuZHMpfShbMC05XSlgLCJnIiksIiQxJDIiKSxKPUoucmVwbGFjZShQLmRlY2ltYWwsIi4iKSxKfShDLFAsWSk7cmV0dXJuIGUoSGUsUCxZLEosY2UsZmUpfXJldHVybiBKdGU9e3VuZm9ybWF0OmZ1''@;'; put 'put ''bmN0aW9uIG0oQyxQKXtjb25zdCBZPXJuZSgpO2xldCBYZSxKPVkuY3VycmVudERlbGltaXRlcnMoKSxjZT1ZLmN1cnJlbnRDdXJyZW5jeSgpLnN5bWJvbCxmZT1ZLmN1cnJlbnRPcmRpbmFsKCksQWU9WS5nZXRaZXJvRm9ybWF0KCksSGU9WS5jdXJyZW50QWJicmV2aWF0aW9ucygpO2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgQylYZT1mdW5jdGlvbiBhKEMsUCl7aWYoIUMuaW5kZXhPZigiOiIpfHwiOiI9PT1QLnRob3VzYW5kcylyZXR1cm4hMTtsZXQgSj1DLnNwbGl0KCI6Iik7aWYoMyE9PUoubGVuZ3RoKXJldHVybiExO2xldCBmZT0rSlsxXSxBZT0rSlsyXTtyZXR1cm4haXNOYU4oK0pb''@;'; put 'put ''MF0pJiYhaXNOYU4oZmUpJiYhaXNOYU4oQWUpfShDLEopP2Z1bmN0aW9uIGMoQyl7bGV0IFA9Qy5zcGxpdCgiOiIpO3JldHVybitQWzJdKzYwKitQWzFdKzM2MDAqK1BbMF19KEMpOmkoQyxKLGNlLGZlLEFlLEhlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgQylyZXR1cm47WGU9Q31pZih2''@;'; put 'put ''b2lkIDAhPT1YZSlyZXR1cm4gWGV9fX1mdW5jdGlvbiBlbmUoKXtpZihUOGUpcmV0dXJuIFF0ZTtUOGU9MTtsZXQgbj1FOGUoKTtjb25zdCB0PS9eW2Etel17MiwzfSgtW2EtekEtWl17NH0pPygtKFtBLVpdezJ9fFswLTldezN9KSk/JC8sUD17b3V0cHV0Ont0eXBlOiJzdHJpbmciLHZhbGlk''@;'; put 'put ''VmFsdWVzOlsiY3VycmVuY3kiLCJwZXJjZW50IiwiYnl0ZSIsInRpbWUiLCJvcmRpbmFsIiwibnVtYmVyIl19LGJhc2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJkZWNpbWFsIiwiYmluYXJ5IiwiZ2VuZXJhbCJdLHJlc3RyaWN0aW9uOihYZSxydCk9PiJieXRlIj09PXJ0Lm91dHB1''@;'; put 'put ''dCxtZXNzYWdlOiJgYmFzZWAgbXVzdCBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgYnl0ZWAiLG1hbmRhdG9yeTpYZT0+ImJ5dGUiPT09WGUub3V0cHV0fSxjaGFyYWN0ZXJpc3RpYzp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpYZT0+WGU+PTAsbWVzc2FnZToidmFs''@;'; put 'put ''dWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHByZWZpeDoic3RyaW5nIixwb3N0Zml4OiJzdHJpbmciLGZvcmNlQXZlcmFnZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInRyaWxsaW9uIiwiYmlsbGlvbiIsIm1pbGxpb24iLCJ0aG91c2FuZCJdfSxhdmVyYWdlOiJib29sZWFuIixsb3dQcmVj''@;'; put 'put ''aXNpb246e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihYZSxydCk9PiEwPT09cnQuYXZlcmFnZSxtZXNzYWdlOiJgbG93UHJlY2lzaW9uYCBtdXN0IGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3B0aW9uIGBhdmVyYWdlYCBpcyBzZXQifSxjdXJyZW5jeVBvc2l0aW9uOnt0eXBlOiJz''@;'; put 'put ''dHJpbmciLHZhbGlkVmFsdWVzOlsicHJlZml4IiwiaW5maXgiLCJwb3N0Zml4Il19LGN1cnJlbmN5U3ltYm9sOiJzdHJpbmciLHRvdGFsTGVuZ3RoOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uczpbe3Jlc3RyaWN0aW9uOlhlPT5YZT49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0''@;'; put 'put ''aXZlIn0se3Jlc3RyaWN0aW9uOihYZSxydCk9PiFydC5leHBvbmVudGlhbCxtZXNzYWdlOiJgdG90YWxMZW5ndGhgIGlzIGluY29tcGF0aWJsZSB3aXRoIGBleHBvbmVudGlhbGAifV19LG1hbnRpc3NhOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uOlhlPT5YZT49MCxtZXNzYWdlOiJ2YWx1''@;'; put 'put ''ZSBtdXN0IGJlIHBvc2l0aXZlIn0sb3B0aW9uYWxNYW50aXNzYToiYm9vbGVhbiIsdHJpbU1hbnRpc3NhOiJib29sZWFuIixyb3VuZGluZ0Z1bmN0aW9uOiJmdW5jdGlvbiIsb3B0aW9uYWxDaGFyYWN0ZXJpc3RpYzoiYm9vbGVhbiIsdGhvdXNhbmRTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjoiYm9vbGVhbiIsYWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6InN0cmluZyIsbWlsbGlvbjoic3RyaW5nIixi''@;'; put 'put ''aWxsaW9uOiJzdHJpbmciLHRyaWxsaW9uOiJzdHJpbmcifX0sbmVnYXRpdmU6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJzaWduIiwicGFyZW50aGVzaXMiXX0sZm9yY2VTaWduOiJib29sZWFuIixleHBvbmVudGlhbDp7dHlwZToiYm9vbGVhbiJ9LHByZWZpeFN5bWJvbDp7dHlwZToi''@;'; put 'put ''Ym9vbGVhbiIscmVzdHJpY3Rpb246KFhlLHJ0KT0+InBlcmNlbnQiPT09cnQub3V0cHV0LG1lc3NhZ2U6ImBwcmVmaXhTeW1ib2xgIGNhbiBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgcGVyY2VudGAifX0sWT17bGFuZ3VhZ2VUYWc6e3R5cGU6InN0cmluZyIsbWFuZGF0''@;'; put 'put ''b3J5OiEwLHJlc3RyaWN0aW9uOlhlPT5YZS5tYXRjaCh0KSxtZXNzYWdlOiJ0aGUgbGFuZ3VhZ2UgdGFnIG11c3QgZm9sbG93IHRoZSBCQ1AgNDcgc3BlY2lmaWNhdGlvbiAoc2VlIGh0dHBzOi8vdG9vbHMuaWVmdC5vcmcvaHRtbC9iY3A0NykifSxkZWxpbWl0ZXJzOnt0eXBlOiJvYmplY3Qi''@;'; put 'put ''LGNoaWxkcmVuOnt0aG91c2FuZHM6InN0cmluZyIsZGVjaW1hbDoic3RyaW5nIix0aG91c2FuZHNTaXplOiJudW1iZXIifSxtYW5kYXRvcnk6ITB9LGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sbWls''@;'; put 'put ''bGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LGJpbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSx0cmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9fSxtYW5kYXRvcnk6ITB9LHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1''@;'; put 'put ''cnJlbmN5OiJib29sZWFuIixvcmRpbmFsOnt0eXBlOiJmdW5jdGlvbiIsbWFuZGF0b3J5OiEwfSxieXRlczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7YmluYXJ5U3VmZml4ZXM6Im9iamVjdCIsZGVjaW1hbFN1ZmZpeGVzOiJvYmplY3QifX0sY3VycmVuY3k6e3R5cGU6Im9iamVjdCIsY2hp''@;'; put 'put ''bGRyZW46e3N5bWJvbDoic3RyaW5nIixwb3NpdGlvbjoic3RyaW5nIixjb2RlOiJzdHJpbmcifSxtYW5kYXRvcnk6ITB9LGRlZmF1bHRzOiJmb3JtYXQiLG9yZGluYWxGb3JtYXQ6ImZvcm1hdCIsYnl0ZUZvcm1hdDoiZm9ybWF0IixwZXJjZW50YWdlRm9ybWF0OiJmb3JtYXQiLGN1cnJlbmN5''@;'; put 'put ''Rm9ybWF0OiJmb3JtYXQiLHRpbWVEZWZhdWx0czoiZm9ybWF0Iixmb3JtYXRzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntmb3VyRGlnaXRzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxX''@;'; put 'put ''aXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH19fX07ZnVuY3Rpb24gY2UoWGUpe3JldHVybiB2b2lkIDAhPT1uLnVuZm9ybWF0KFhlKX1mdW5jdGlvbiBmZShY''@;'; put 'put ''ZSxydCxkdCxqdD0hMSl7bGV0IEZ0PU9iamVjdC5rZXlzKFhlKS5tYXAocG49PntpZighcnRbcG5dKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSBJbnZhbGlkIGtleTogJHtwbn1gKSwhMTtsZXQgb249WGVbcG5dLGduPXJ0W3BuXTtpZigic3RyaW5nIj09dHlwZW9mIGduJiYoZ249e3R5''@;'; put 'put ''cGU6Z259KSwiZm9ybWF0Ij09PWduLnR5cGUpe2lmKCFmZShvbixQLGBbVmFsaWRhdGUgJHtwbn1dYCwhMCkpcmV0dXJuITF9ZWxzZSBpZih0eXBlb2Ygb24hPT1nbi50eXBlKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSAke3BufSB0eXBlIG1pc21hdGNoZWQ6ICIke2duLnR5cGV9IiBl''@;'; put 'put ''eHBlY3RlZCwgIiR7dHlwZW9mIG9ufSIgcHJvdmlkZWRgKSwhMTtpZihnbi5yZXN0cmljdGlvbnMmJmduLnJlc3RyaWN0aW9ucy5sZW5ndGgpe2xldCBabj1nbi5yZXN0cmljdGlvbnMubGVuZ3RoO2ZvcihsZXQgR3I9MDtHcjxabjtHcisrKXtsZXR7cmVzdHJpY3Rpb246RXIsbWVzc2FnZTpU''@;'; put 'put ''cn09Z24ucmVzdHJpY3Rpb25zW0dyXTtpZighRXIob24sWGUpKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSAke3BufSBpbnZhbGlkIHZhbHVlOiAke1RyfWApLCExfX1yZXR1cm4gZ24ucmVzdHJpY3Rpb24mJiFnbi5yZXN0cmljdGlvbihvbixYZSk/KGNvbnNvbGUuZXJyb3IoYCR7ZHR9''@;'; put 'put ''ICR7cG59IGludmFsaWQgdmFsdWU6ICR7Z24ubWVzc2FnZX1gKSwhMSk6Z24udmFsaWRWYWx1ZXMmJi0xPT09Z24udmFsaWRWYWx1ZXMuaW5kZXhPZihvbik/KGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7cG59IGludmFsaWQgdmFsdWU6IG11c3QgYmUgYW1vbmcgJHtKU09OLnN0cmluZ2lmeShn''@;'; put 'put ''bi52YWxpZFZhbHVlcyl9LCAiJHtvbn0iIHByb3ZpZGVkYCksITEpOiEoZ24uY2hpbGRyZW4mJiFmZShvbixnbi5jaGlsZHJlbixgW1ZhbGlkYXRlICR7cG59XWApKX0pO3JldHVybiBqdHx8RnQucHVzaCguLi5PYmplY3Qua2V5cyhydCkubWFwKHBuPT57bGV0IG9uPXJ0W3BuXTtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIG9uJiYob249e3R5cGU6b259KSxvbi5tYW5kYXRvcnkpe2xldCBnbj1vbi5tYW5kYXRvcnk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGduJiYoZ249Z24oWGUpKSxnbiYmdm9pZCAwPT09WGVbcG5dKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSBNaXNzaW5nIG1hbmRh''@;'; put 'put ''dG9yeSBrZXkgIiR7cG59ImApLCExfXJldHVybiEwfSkpLEZ0LnJlZHVjZSgocG4sb24pPT5wbiYmb24sITApfWZ1bmN0aW9uIEFlKFhlKXtyZXR1cm4gZmUoWGUsUCwiW1ZhbGlkYXRlIGZvcm1hdF0iKX1yZXR1cm4gUXRlPXt2YWxpZGF0ZTpmdW5jdGlvbiBKKFhlLHJ0KXtsZXQgZHQ9Y2Uo''@;'; put 'put ''WGUpLGp0PUFlKHJ0KTtyZXR1cm4gZHQmJmp0fSx2YWxpZGF0ZUZvcm1hdDpBZSx2YWxpZGF0ZUlucHV0OmNlLHZhbGlkYXRlTGFuZ3VhZ2U6ZnVuY3Rpb24gSGUoWGUpe3JldHVybiBmZShYZSxZLCJbVmFsaWRhdGUgbGFuZ3VhZ2VdIil9fX12YXIgbm5lLEE4ZSx0bmU9e3BhcnNlRm9ybWF0''@;'; put 'put ''OmZ1bmN0aW9uIGYydChuLHQ9e30pe3JldHVybiJzdHJpbmciIT10eXBlb2Ygbj9uOihuPWZ1bmN0aW9uIEpodChuLHQpe2xldCBlPW4ubWF0Y2goL157KFtefV0qKX0vKTtyZXR1cm4gZT8odC5wcmVmaXg9ZVsxXSxuLnNsaWNlKGVbMF0ubGVuZ3RoKSk6bn0obix0KSxuPWZ1bmN0aW9uIFFo''@;'; put 'put ''dChuLHQpe2xldCBlPW4ubWF0Y2goL3soW159XSopfSQvKTtyZXR1cm4gZT8odC5wb3N0Zml4PWVbMV0sbi5zbGljZSgwLC1lWzBdLmxlbmd0aCkpOm59KG4sdCksZnVuY3Rpb24gZTJ0KG4sdCl7aWYoLTE9PT1uLmluZGV4T2YoIiQiKSl7aWYoLTE9PT1uLmluZGV4T2YoIiUiKSlyZXR1cm4t''@;'; put 'put ''MSE9PW4uaW5kZXhPZigiYmQiKT8odC5vdXRwdXQ9ImJ5dGUiLHZvaWQodC5iYXNlPSJnZW5lcmFsIikpOi0xIT09bi5pbmRleE9mKCJiIik/KHQub3V0cHV0PSJieXRlIix2b2lkKHQuYmFzZT0iYmluYXJ5IikpOi0xIT09bi5pbmRleE9mKCJkIik/KHQub3V0cHV0PSJieXRlIix2b2lkKHQu''@;'; put 'put ''YmFzZT0iZGVjaW1hbCIpKTp2b2lkKC0xPT09bi5pbmRleE9mKCI6Iik/LTEhPT1uLmluZGV4T2YoIm8iKSYmKHQub3V0cHV0PSJvcmRpbmFsIik6dC5vdXRwdXQ9InRpbWUiKTt0Lm91dHB1dD0icGVyY2VudCJ9ZWxzZSB0Lm91dHB1dD0iY3VycmVuY3kifShuLHQpLGZ1bmN0aW9uIHIydChu''@;'; put 'put ''LHQpe2xldCBlPW4ubWF0Y2goL1sxLTldK1swLTldKi8pO2UmJih0LnRvdGFsTGVuZ3RoPStlWzBdKX0obix0KSxmdW5jdGlvbiBpMnQobix0KXtsZXQgcj1uLnNwbGl0KCIuIilbMF0ubWF0Y2goLzArLyk7ciYmKHQuY2hhcmFjdGVyaXN0aWM9clswXS5sZW5ndGgpfShuLHQpLGZ1bmN0aW9u''@;'; put 'put ''IHUydChuLHQpe2lmKC0xIT09bi5pbmRleE9mKCIuIikpe2xldCBlPW4uc3BsaXQoIi4iKVswXTt0Lm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM9LTE9PT1lLmluZGV4T2YoIjAiKX19KG4sdCksZnVuY3Rpb24gczJ0KG4sdCl7LTEhPT1uLmluZGV4T2YoImEiKSYmKHQuYXZlcmFnZT0hMCl9KG4s''@;'; put 'put ''dCksZnVuY3Rpb24gbDJ0KG4sdCl7LTEhPT1uLmluZGV4T2YoIksiKT90LmZvcmNlQXZlcmFnZT0idGhvdXNhbmQiOi0xIT09bi5pbmRleE9mKCJNIik/dC5mb3JjZUF2ZXJhZ2U9Im1pbGxpb24iOi0xIT09bi5pbmRleE9mKCJCIik/dC5mb3JjZUF2ZXJhZ2U9ImJpbGxpb24iOi0xIT09bi5p''@;'; put 'put ''bmRleE9mKCJUIikmJih0LmZvcmNlQXZlcmFnZT0idHJpbGxpb24iKX0obix0KSxmdW5jdGlvbiBhMnQobix0KXtsZXQgZT1uLnNwbGl0KCIuIilbMV07aWYoZSl7bGV0IHI9ZS5tYXRjaCgvMCsvKTtyJiYodC5tYW50aXNzYT1yWzBdLmxlbmd0aCl9fShuLHQpLGZ1bmN0aW9uIGMydChuLHQp''@;'; put 'put ''e24ubWF0Y2goL1xbXC5dLyk/dC5vcHRpb25hbE1hbnRpc3NhPSEwOm4ubWF0Y2goL1wuLykmJih0Lm9wdGlvbmFsTWFudGlzc2E9ITEpfShuLHQpLGZ1bmN0aW9uIG8ydChuLHQpe2NvbnN0IGU9bi5zcGxpdCgiLiIpWzFdO2UmJih0LnRyaW1NYW50aXNzYT0tMSE9PWUuaW5kZXhPZigiWyIp''@;'; put 'put ''KX0obix0KSxmdW5jdGlvbiB0MnQobix0KXstMSE9PW4uaW5kZXhPZigiLCIpJiYodC50aG91c2FuZFNlcGFyYXRlZD0hMCl9KG4sdCksZnVuY3Rpb24gbjJ0KG4sdCl7LTEhPT1uLmluZGV4T2YoIiAiKSYmKHQuc3BhY2VTZXBhcmF0ZWQ9ITAsdC5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5PSEw''@;'; put 'put ''LCh0LmF2ZXJhZ2V8fHQuZm9yY2VBdmVyYWdlKSYmKHQuc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb249ITApKX0obix0KSxmdW5jdGlvbiBkMnQobix0KXtuLm1hdGNoKC9eXCs/XChbXildKlwpJC8pJiYodC5uZWdhdGl2ZT0icGFyZW50aGVzaXMiKSxuLm1hdGNoKC9eXCs/LS8pJiYodC5u''@;'; put 'put ''ZWdhdGl2ZT0ic2lnbiIpfShuLHQpLGZ1bmN0aW9uIGgydChuLHQpe24ubWF0Y2goL15cKy8pJiYodC5mb3JjZVNpZ249ITApfShuLHQpLHQpfX07ZnVuY3Rpb24gcm5lKCl7aWYoQThlKXJldHVybiBubmU7QThlPTE7Y29uc3Qgbj1mdW5jdGlvbiBxaHQoKXtyZXR1cm4gTThlfHwoTThlPTEs''@;'; put 'put ''cXRlPXtsYW5ndWFnZVRhZzoiZW4tVVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LHNwYWNlU2VwYXJhdGVkOiExLG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''bil7bGV0IHQ9biUxMDtyZXR1cm4gMT09fn4obiUxMDAvMTApPyJ0aCI6MT09PXQ/InN0IjoyPT09dD8ibmQiOjM9PT10PyJyZCI6InRoIn0sYnl0ZXM6e2JpbmFyeVN1ZmZpeGVzOlsiQiIsIktpQiIsIk1pQiIsIkdpQiIsIlRpQiIsIlBpQiIsIkVpQiIsIlppQiIsIllpQiJdLGRlY2ltYWxT''@;'; put 'put ''dWZmaXhlczpbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiIsIlBCIiwiRUIiLCJaQiIsIllCIl19LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1''@;'; put 'put ''bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pLHF0ZX0oKSx0PWVuZSgpLGU9dG5lO2xldCBpLHI9''@;'; put 'put ''e30sYT17fSxjPW51bGwsbT17fTtmdW5jdGlvbiBDKFkpe2k9WX1mdW5jdGlvbiBQKCl7cmV0dXJuIGFbaV19cmV0dXJuIHIubGFuZ3VhZ2VzPSgpPT5PYmplY3QuYXNzaWduKHt9LGEpLHIuY3VycmVudExhbmd1YWdlPSgpPT5pLHIuY3VycmVudEJ5dGVzPSgpPT5QKCkuYnl0ZXN8fHt9LHIu''@;'; put 'put ''Y3VycmVudEN1cnJlbmN5PSgpPT5QKCkuY3VycmVuY3ksci5jdXJyZW50QWJicmV2aWF0aW9ucz0oKT0+UCgpLmFiYnJldmlhdGlvbnMsci5jdXJyZW50RGVsaW1pdGVycz0oKT0+UCgpLmRlbGltaXRlcnMsci5jdXJyZW50T3JkaW5hbD0oKT0+UCgpLm9yZGluYWwsci5jdXJyZW50RGVmYXVs''@;'; put 'put ''dHM9KCk9Pk9iamVjdC5hc3NpZ24oe30sUCgpLmRlZmF1bHRzLG0pLHIuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LHIuY3VycmVudERlZmF1bHRzKCksUCgpLm9yZGluYWxGb3JtYXQpLHIuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0PSgpPT5PYmpl''@;'; put 'put ''Y3QuYXNzaWduKHt9LHIuY3VycmVudERlZmF1bHRzKCksUCgpLmJ5dGVGb3JtYXQpLHIuY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LHIuY3VycmVudERlZmF1bHRzKCksUCgpLnBlcmNlbnRhZ2VGb3JtYXQpLHIuY3VycmVudEN1cnJlbmN5RGVm''@;'; put 'put ''YXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxyLmN1cnJlbnREZWZhdWx0cygpLFAoKS5jdXJyZW5jeUZvcm1hdCksci5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sci5jdXJyZW50RGVmYXVsdHMoKSxQKCkudGltZUZvcm1hdCksci5zZXREZWZh''@;'; put 'put ''dWx0cz1ZPT57WT1lLnBhcnNlRm9ybWF0KFkpLHQudmFsaWRhdGVGb3JtYXQoWSkmJihtPVkpfSxyLmdldFplcm9Gb3JtYXQ9KCk9PmMsci5zZXRaZXJvRm9ybWF0PVk9PmM9InN0cmluZyI9PXR5cGVvZiBZP1k6bnVsbCxyLmhhc1plcm9Gb3JtYXQ9KCk9Pm51bGwhPT1jLHIubGFuZ3VhZ2VE''@;'; put 'put ''YXRhPVk9PntpZihZKXtpZihhW1ldKXJldHVybiBhW1ldO3Rocm93IG5ldyBFcnJvcihgVW5rbm93biB0YWcgIiR7WX0iYCl9cmV0dXJuIFAoKX0sci5yZWdpc3Rlckxhbmd1YWdlPShZLEo9ITEpPT57aWYoIXQudmFsaWRhdGVMYW5ndWFnZShZKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg''@;'; put 'put ''bGFuZ3VhZ2UgZGF0YSIpO2FbWS5sYW5ndWFnZVRhZ109WSxKJiZDKFkubGFuZ3VhZ2VUYWcpfSxyLnNldExhbmd1YWdlPShZLEo9bi5sYW5ndWFnZVRhZyk9PntpZighYVtZXSl7bGV0IGNlPVkuc3BsaXQoIi0iKVswXSxmZT1PYmplY3Qua2V5cyhhKS5maW5kKEFlPT5BZS5zcGxpdCgiLSIp''@;'; put 'put ''WzBdPT09Y2UpO3JldHVybiBhW2ZlXT92b2lkIEMoZmUpOnZvaWQgQyhKKX1DKFkpfSxyLnJlZ2lzdGVyTGFuZ3VhZ2UobiksaT1uLmxhbmd1YWdlVGFnLG5uZT1yfXZhciBrOGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihuKXshZnVuY3Rpb24odCl7dmFyIGUscj0vXi0/KD86XGQrKD86XC5c''@;'; put 'put ''ZCopP3xcLlxkKykoPzplWystXT9cZCspPyQvaSxpPU1hdGguY2VpbCxhPU1hdGguZmxvb3IsYz0iW0JpZ051bWJlciBFcnJvcl0gIixtPWMrIk51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICIsQz0xZTE0LFA9MTQsWT05MDA3MTk5MjU0NzQw''@;'; put 'put ''OTkxLEo9WzEsMTAsMTAwLDFlMywxZTQsMWU1LDFlNiwxZTcsMWU4LDFlOSwxZTEwLDFlMTEsMWUxMiwxZTEzXSxjZT0xZTcsZmU9MWU5O2Z1bmN0aW9uIEhlKG9uKXt2YXIgZ249MHxvbjtyZXR1cm4gb24+MHx8b249PT1nbj9nbjpnbi0xfWZ1bmN0aW9uIFhlKG9uKXtmb3IodmFyIGduLFpu''@;'; put 'put ''LEdyPTEsRXI9b24ubGVuZ3RoLFRyPW9uWzBdKyIiO0dyPEVyOyl7Zm9yKGduPW9uW0dyKytdKyIiLFpuPVAtZ24ubGVuZ3RoO1puLS07Z249IjAiK2duKTtUcis9Z259Zm9yKEVyPVRyLmxlbmd0aDs0OD09PVRyLmNoYXJDb2RlQXQoLS1Fcik7KTtyZXR1cm4gVHIuc2xpY2UoMCxFcisxfHwx''@;'; put 'put ''KX1mdW5jdGlvbiBydChvbixnbil7dmFyIFpuLEdyLEVyPW9uLmMsVHI9Z24uYyxpcj1vbi5zLHBpPWduLnMsRG49b24uZSxBcj1nbi5lO2lmKCFpcnx8IXBpKXJldHVybiBudWxsO2lmKEdyPVRyJiYhVHJbMF0sKFpuPUVyJiYhRXJbMF0pfHxHcilyZXR1cm4gWm4/R3I/MDotcGk6aXI7aWYo''@;'; put 'put ''aXIhPXBpKXJldHVybiBpcjtpZihabj1pcjwwLEdyPURuPT1BciwhRXJ8fCFUcilyZXR1cm4gR3I/MDohRXJeWm4/MTotMTtpZighR3IpcmV0dXJuIERuPkFyXlpuPzE6LTE7Zm9yKHBpPShEbj1Fci5sZW5ndGgpPChBcj1Uci5sZW5ndGgpP0RuOkFyLGlyPTA7aXI8cGk7aXIrKylpZihFcltp''@;'; put 'put ''cl0hPVRyW2lyXSlyZXR1cm4gRXJbaXJdPlRyW2lyXV5abj8xOi0xO3JldHVybiBEbj09QXI/MDpEbj5Bcl5abj8xOi0xfWZ1bmN0aW9uIGR0KG9uLGduLFpuLEdyKXtpZihvbjxnbnx8b24+Wm58fG9uIT09YShvbikpdGhyb3cgRXJyb3IoYysoR3J8fCJBcmd1bWVudCIpKygibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIG9uP29uPGdufHxvbj5abj8iIG91dCBvZiByYW5nZTogIjoiIG5vdCBhbiBpbnRlZ2VyOiAiOiIgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogIikrU3RyaW5nKG9uKSl9ZnVuY3Rpb24ganQob24pe3ZhciBnbj1vbi5jLmxlbmd0aC0xO3JldHVybiBIZShvbi5lL1ApPT1nbiYmb24u''@;'; put 'put ''Y1tnbl0lMiE9MH1mdW5jdGlvbiBGdChvbixnbil7cmV0dXJuKG9uLmxlbmd0aD4xP29uLmNoYXJBdCgwKSsiLiIrb24uc2xpY2UoMSk6b24pKyhnbjwwPyJlIjoiZSsiKStnbn1mdW5jdGlvbiBwbihvbixnbixabil7dmFyIEdyLEVyO2lmKGduPDApe2ZvcihFcj1abisiLiI7KytnbjtFcis9''@;'; put 'put ''Wm4pO29uPUVyK29ufWVsc2UgaWYoKytnbj4oR3I9b24ubGVuZ3RoKSl7Zm9yKEVyPVpuLGduLT1HcjstLWduO0VyKz1abik7b24rPUVyfWVsc2UgZ248R3ImJihvbj1vbi5zbGljZSgwLGduKSsiLiIrb24uc2xpY2UoZ24pKTtyZXR1cm4gb259ZT1mdW5jdGlvbiBBZShvbil7dmFyIGduLFpu''@;'; put 'put ''LEdyLEV0LFp0LEVyPUZyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RnIsdG9TdHJpbmc6bnVsbCx2YWx1ZU9mOm51bGx9LFRyPW5ldyBGcigxKSxpcj0yMCxwaT00LERuPS03LEFyPTIxLGVyPS0xZTcsRHI9MWU3LFpyPSExLGJpPTEsU2k9MCxqcj17cHJlZml4OiIiLGdyb3VwU2l6ZTozLHNl''@;'; put 'put ''Y29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOiIsIixkZWNpbWFsU2VwYXJhdG9yOiIuIixmcmFjdGlvbkdyb3VwU2l6ZTowLGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6Ilx4YTAiLHN1ZmZpeDoiIn0sVGk9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsbGE9''@;'; put 'put ''ITA7ZnVuY3Rpb24gRnIoRXQsWnQpe3ZhciBmbixYbixrbixfbixncix4bixucix4cixfcj10aGlzO2lmKCEoX3IgaW5zdGFuY2VvZiBGcikpcmV0dXJuIG5ldyBGcihFdCxadCk7aWYobnVsbD09WnQpe2lmKEV0JiYhMD09PUV0Ll9pc0JpZ051bWJlcilyZXR1cm4gX3Iucz1FdC5zLHZvaWQo''@;'; put 'put ''IUV0LmN8fEV0LmU+RHI/X3IuYz1fci5lPW51bGw6RXQuZTxlcj9fci5jPVtfci5lPTBdOihfci5lPUV0LmUsX3IuYz1FdC5jLnNsaWNlKCkpKTtpZigoeG49Im51bWJlciI9PXR5cGVvZiBFdCkmJjAqRXQ9PTApe2lmKF9yLnM9MS9FdDwwPyhFdD0tRXQsLTEpOjEsRXQ9PT1+fkV0KXtmb3Io''@;'; put 'put ''X249MCxncj1FdDtncj49MTA7Z3IvPTEwLF9uKyspO3JldHVybiB2b2lkKF9uPkRyP19yLmM9X3IuZT1udWxsOihfci5lPV9uLF9yLmM9W0V0XSkpfXhyPVN0cmluZyhFdCl9ZWxzZXtpZighci50ZXN0KHhyPVN0cmluZyhFdCkpKXJldHVybiBHcihfcix4cix4bik7X3Iucz00NT09eHIuY2hh''@;'; put 'put ''ckNvZGVBdCgwKT8oeHI9eHIuc2xpY2UoMSksLTEpOjF9KF9uPXhyLmluZGV4T2YoIi4iKSk+LTEmJih4cj14ci5yZXBsYWNlKCIuIiwiIikpLChncj14ci5zZWFyY2goL2UvaSkpPjA/KF9uPDAmJihfbj1nciksX24rPSt4ci5zbGljZShncisxKSx4cj14ci5zdWJzdHJpbmcoMCxncikpOl9u''@;'; put 'put ''PDAmJihfbj14ci5sZW5ndGgpfWVsc2V7aWYoZHQoWnQsMixUaS5sZW5ndGgsIkJhc2UiKSwxMD09WnQmJmxhKXJldHVybiBFbihfcj1uZXcgRnIoRXQpLGlyK19yLmUrMSxwaSk7aWYoeHI9U3RyaW5nKEV0KSx4bj0ibnVtYmVyIj09dHlwZW9mIEV0KXtpZigwKkV0IT0wKXJldHVybiBHcihf''@;'; put 'put ''cix4cix4bixadCk7aWYoX3Iucz0xL0V0PDA/KHhyPXhyLnNsaWNlKDEpLC0xKToxLEZyLkRFQlVHJiZ4ci5yZXBsYWNlKC9eMFwuMCp8XC4vLCIiKS5sZW5ndGg+MTUpdGhyb3cgRXJyb3IobStFdCl9ZWxzZSBfci5zPTQ1PT09eHIuY2hhckNvZGVBdCgwKT8oeHI9eHIuc2xpY2UoMSksLTEp''@;'; put 'put ''OjE7Zm9yKGZuPVRpLnNsaWNlKDAsWnQpLF9uPWdyPTAsbnI9eHIubGVuZ3RoO2dyPG5yO2dyKyspaWYoZm4uaW5kZXhPZihYbj14ci5jaGFyQXQoZ3IpKTwwKXtpZigiLiI9PVhuKXtpZihncj5fbil7X249bnI7Y29udGludWV9fWVsc2UgaWYoIWtuJiYoeHI9PXhyLnRvVXBwZXJDYXNlKCkm''@;'; put 'put ''Jih4cj14ci50b0xvd2VyQ2FzZSgpKXx8eHI9PXhyLnRvTG93ZXJDYXNlKCkmJih4cj14ci50b1VwcGVyQ2FzZSgpKSkpe2tuPSEwLGdyPS0xLF9uPTA7Y29udGludWV9cmV0dXJuIEdyKF9yLFN0cmluZyhFdCkseG4sWnQpfXhuPSExLChfbj0oeHI9Wm4oeHIsWnQsMTAsX3IucykpLmluZGV4''@;'; put 'put ''T2YoIi4iKSk+LTE/eHI9eHIucmVwbGFjZSgiLiIsIiIpOl9uPXhyLmxlbmd0aH1mb3IoZ3I9MDs0OD09PXhyLmNoYXJDb2RlQXQoZ3IpO2dyKyspO2Zvcihucj14ci5sZW5ndGg7NDg9PT14ci5jaGFyQ29kZUF0KC0tbnIpOyk7aWYoeHI9eHIuc2xpY2UoZ3IsKytucikpe2lmKG5yLT1ncix4''@;'; put 'put ''biYmRnIuREVCVUcmJm5yPjE1JiYoRXQ+WXx8RXQhPT1hKEV0KSkpdGhyb3cgRXJyb3IobStfci5zKkV0KTtpZigoX249X24tZ3ItMSk+RHIpX3IuYz1fci5lPW51bGw7ZWxzZSBpZihfbjxlcilfci5jPVtfci5lPTBdO2Vsc2V7aWYoX3IuZT1fbixfci5jPVtdLGdyPShfbisxKSVQLF9uPDAm''@;'; put 'put ''Jihncis9UCksZ3I8bnIpe2ZvcihnciYmX3IuYy5wdXNoKCt4ci5zbGljZSgwLGdyKSksbnItPVA7Z3I8bnI7KV9yLmMucHVzaCgreHIuc2xpY2UoZ3IsZ3IrPVApKTtncj1QLSh4cj14ci5zbGljZShncikpLmxlbmd0aH1lbHNlIGdyLT1ucjtmb3IoO2dyLS07eHIrPSIwIik7X3IuYy5wdXNo''@;'; put 'put ''KCt4cil9fWVsc2UgX3IuYz1bX3IuZT0wXX1mdW5jdGlvbiBvdChFdCxadCxmbixYbil7dmFyIGtuLF9uLGdyLHhuLG5yO2lmKG51bGw9PWZuP2ZuPXBpOmR0KGZuLDAsOCksIUV0LmMpcmV0dXJuIEV0LnRvU3RyaW5nKCk7aWYoa249RXQuY1swXSxncj1FdC5lLG51bGw9PVp0KW5yPVhlKEV0''@;'; put 'put ''LmMpLG5yPTE9PVhufHwyPT1YbiYmKGdyPD1Ebnx8Z3I+PUFyKT9GdChucixncik6cG4obnIsZ3IsIjAiKTtlbHNlIGlmKF9uPShFdD1FbihuZXcgRnIoRXQpLFp0LGZuKSkuZSx4bj0obnI9WGUoRXQuYykpLmxlbmd0aCwxPT1Ybnx8Mj09WG4mJihadDw9X258fF9uPD1Ebikpe2Zvcig7eG48''@;'; put 'put ''WnQ7bnIrPSIwIix4bisrKTtucj1GdChucixfbil9ZWxzZSBpZihadC09Z3IsbnI9cG4obnIsX24sIjAiKSxfbisxPnhuKXtpZigtLVp0PjApZm9yKG5yKz0iLiI7WnQtLTtucis9IjAiKTt9ZWxzZSBpZigoWnQrPV9uLXhuKT4wKWZvcihfbisxPT14biYmKG5yKz0iLiIpO1p0LS07bnIrPSIw''@;'; put 'put ''Iik7cmV0dXJuIEV0LnM8MCYma24/Ii0iK25yOm5yfWZ1bmN0aW9uIEl0KEV0LFp0KXtmb3IodmFyIGZuLFhuLGtuPTEsX249bmV3IEZyKEV0WzBdKTtrbjxFdC5sZW5ndGg7a24rKykoIShYbj1uZXcgRnIoRXRba25dKSkuc3x8KGZuPXJ0KF9uLFhuKSk9PT1adHx8MD09PWZuJiZfbi5zPT09''@;'; put 'put ''WnQpJiYoX249WG4pO3JldHVybiBfbn1mdW5jdGlvbiBVdChFdCxadCxmbil7Zm9yKHZhciBYbj0xLGtuPVp0Lmxlbmd0aDshWnRbLS1rbl07WnQucG9wKCkpO2Zvcihrbj1adFswXTtrbj49MTA7a24vPTEwLFhuKyspO3JldHVybihmbj1YbitmbipQLTEpPkRyP0V0LmM9RXQuZT1udWxsOmZu''@;'; put 'put ''PGVyP0V0LmM9W0V0LmU9MF06KEV0LmU9Zm4sRXQuYz1adCksRXR9ZnVuY3Rpb24gRW4oRXQsWnQsZm4sWG4pe3ZhciBrbixfbixncix4bixucix4cixfcixmaT1FdC5jLENhPUo7aWYoZmkpe2U6e2Zvcihrbj0xLHhuPWZpWzBdO3huPj0xMDt4bi89MTAsa24rKyk7aWYoKF9uPVp0LWtuKTww''@;'; put 'put ''KV9uKz1QLG5yPWZpW3hyPTBdLF9yPWEobnIvQ2Fba24tKGdyPVp0KS0xXSUxMCk7ZWxzZSBpZigoeHI9aSgoX24rMSkvUCkpPj1maS5sZW5ndGgpe2lmKCFYbilicmVhayBlO2Zvcig7ZmkubGVuZ3RoPD14cjtmaS5wdXNoKDApKTtucj1fcj0wLGtuPTEsZ3I9KF9uJT1QKS1QKzF9ZWxzZXtm''@;'; put 'put ''b3IobnI9eG49ZmlbeHJdLGtuPTE7eG4+PTEwO3huLz0xMCxrbisrKTtfcj0oZ3I9KF9uJT1QKS1QK2tuKTwwPzA6YShuci9DYVtrbi1nci0xXSUxMCl9aWYoWG49WG58fFp0PDB8fG51bGwhPWZpW3hyKzFdfHwoZ3I8MD9ucjpuciVDYVtrbi1nci0xXSksWG49Zm48ND8oX3J8fFhuKSYmKDA9''@;'; put 'put ''PWZufHxmbj09KEV0LnM8MD8zOjIpKTpfcj41fHw1PT1fciYmKDQ9PWZufHxYbnx8Nj09Zm4mJihfbj4wP2dyPjA/bnIvQ2Fba24tZ3JdOjA6ZmlbeHItMV0pJTEwJjF8fGZuPT0oRXQuczwwPzg6NykpLFp0PDF8fCFmaVswXSlyZXR1cm4gZmkubGVuZ3RoPTAsWG4/KGZpWzBdPUNhWyhQLSha''@;'; put 'put ''dC09RXQuZSsxKSVQKSVQXSxFdC5lPS1adHx8MCk6ZmlbMF09RXQuZT0wLEV0O2lmKDA9PV9uPyhmaS5sZW5ndGg9eHIseG49MSx4ci0tKTooZmkubGVuZ3RoPXhyKzEseG49Q2FbUC1fbl0sZmlbeHJdPWdyPjA/YShuci9DYVtrbi1ncl0lQ2FbZ3JdKSp4bjowKSxYbilmb3IoOzspe2lmKDA9''@;'; put 'put ''PXhyKXtmb3IoX249MSxncj1maVswXTtncj49MTA7Z3IvPTEwLF9uKyspO2Zvcihncj1maVswXSs9eG4seG49MTtncj49MTA7Z3IvPTEwLHhuKyspO19uIT14biYmKEV0LmUrKyxmaVswXT09QyYmKGZpWzBdPTEpKTticmVha31pZihmaVt4cl0rPXhuLGZpW3hyXSE9QylicmVhaztmaVt4ci0t''@;'; put 'put ''XT0wLHhuPTF9Zm9yKF9uPWZpLmxlbmd0aDswPT09ZmlbLS1fbl07ZmkucG9wKCkpO31FdC5lPkRyP0V0LmM9RXQuZT1udWxsOkV0LmU8ZXImJihFdC5jPVtFdC5lPTBdKX1yZXR1cm4gRXR9ZnVuY3Rpb24gYXIoRXQpe3ZhciBadCxmbj1FdC5lO3JldHVybiBudWxsPT09Zm4/RXQudG9TdHJp''@;'; put 'put ''bmcoKTooWnQ9WGUoRXQuYyksWnQ9Zm48PURufHxmbj49QXI/RnQoWnQsZm4pOnBuKFp0LGZuLCIwIiksRXQuczwwPyItIitadDpadCl9cmV0dXJuIEZyLmNsb25lPUFlLEZyLlJPVU5EX1VQPTAsRnIuUk9VTkRfRE9XTj0xLEZyLlJPVU5EX0NFSUw9MixGci5ST1VORF9GTE9PUj0zLEZyLlJP''@;'; put 'put ''VU5EX0hBTEZfVVA9NCxGci5ST1VORF9IQUxGX0RPV049NSxGci5ST1VORF9IQUxGX0VWRU49NixGci5ST1VORF9IQUxGX0NFSUw9NyxGci5ST1VORF9IQUxGX0ZMT09SPTgsRnIuRVVDTElEPTksRnIuY29uZmlnPUZyLnNldD1mdW5jdGlvbihFdCl7dmFyIFp0LGZuO2lmKG51bGwhPUV0KXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIEV0KXRocm93IEVycm9yKGMrIk9iamVjdCBleHBlY3RlZDogIitFdCk7aWYoRXQuaGFzT3duUHJvcGVydHkoWnQ9IkRFQ0lNQUxfUExBQ0VTIikmJihkdChmbj1FdFtadF0sMCxmZSxadCksaXI9Zm4pLEV0Lmhhc093blByb3BlcnR5KFp0PSJST1VORElOR19N''@;'; put 'put ''T0RFIikmJihkdChmbj1FdFtadF0sMCw4LFp0KSxwaT1mbiksRXQuaGFzT3duUHJvcGVydHkoWnQ9IkVYUE9ORU5USUFMX0FUIikmJigoZm49RXRbWnRdKSYmZm4ucG9wPyhkdChmblswXSwtZmUsMCxadCksZHQoZm5bMV0sMCxmZSxadCksRG49Zm5bMF0sQXI9Zm5bMV0pOihkdChmbiwtZmUs''@;'; put 'put ''ZmUsWnQpLERuPS0oQXI9Zm48MD8tZm46Zm4pKSksRXQuaGFzT3duUHJvcGVydHkoWnQ9IlJBTkdFIikpaWYoKGZuPUV0W1p0XSkmJmZuLnBvcClkdChmblswXSwtZmUsLTEsWnQpLGR0KGZuWzFdLDEsZmUsWnQpLGVyPWZuWzBdLERyPWZuWzFdO2Vsc2V7aWYoZHQoZm4sLWZlLGZlLFp0KSwh''@;'; put 'put ''Zm4pdGhyb3cgRXJyb3IoYytadCsiIGNhbm5vdCBiZSB6ZXJvOiAiK2ZuKTtlcj0tKERyPWZuPDA/LWZuOmZuKX1pZihFdC5oYXNPd25Qcm9wZXJ0eShadD0iQ1JZUFRPIikpe2lmKChmbj1FdFtadF0pIT09ISFmbil0aHJvdyBFcnJvcihjK1p0KyIgbm90IHRydWUgb3IgZmFsc2U6ICIrZm4p''@;'; put 'put ''O2lmKGZuKXtpZighKHR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8mJihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzfHxjcnlwdG8ucmFuZG9tQnl0ZXMpKSl0aHJvdyBacj0hZm4sRXJyb3IoYysiY3J5cHRvIHVuYXZhaWxhYmxlIik7WnI9Zm59ZWxzZSBacj1mbn1pZihFdC5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShadD0iTU9EVUxPX01PREUiKSYmKGR0KGZuPUV0W1p0XSwwLDksWnQpLGJpPWZuKSxFdC5oYXNPd25Qcm9wZXJ0eShadD0iUE9XX1BSRUNJU0lPTiIpJiYoZHQoZm49RXRbWnRdLDAsZmUsWnQpLFNpPWZuKSxFdC5oYXNPd25Qcm9wZXJ0eShadD0iRk9STUFUIikpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YoZm49RXRbWnRdKSl0aHJvdyBFcnJvcihjK1p0KyIgbm90IGFuIG9iamVjdDogIitmbik7anI9Zm59aWYoRXQuaGFzT3duUHJvcGVydHkoWnQ9IkFMUEhBQkVUIikpe2lmKCJzdHJpbmciIT10eXBlb2YoZm49RXRbWnRdKXx8L14uPyR8WytcLS5cc118KC4pLipcMS8udGVzdChmbikp''@;'; put 'put ''dGhyb3cgRXJyb3IoYytadCsiIGludmFsaWQ6ICIrZm4pO2xhPSIwMTIzNDU2Nzg5Ij09Zm4uc2xpY2UoMCwxMCksVGk9Zm59fXJldHVybntERUNJTUFMX1BMQUNFUzppcixST1VORElOR19NT0RFOnBpLEVYUE9ORU5USUFMX0FUOltEbixBcl0sUkFOR0U6W2VyLERyXSxDUllQVE86WnIsTU9E''@;'; put 'put ''VUxPX01PREU6YmksUE9XX1BSRUNJU0lPTjpTaSxGT1JNQVQ6anIsQUxQSEFCRVQ6VGl9fSxGci5pc0JpZ051bWJlcj1mdW5jdGlvbihFdCl7aWYoIUV0fHwhMCE9PUV0Ll9pc0JpZ051bWJlcilyZXR1cm4hMTtpZighRnIuREVCVUcpcmV0dXJuITA7dmFyIFp0LGZuLFhuPUV0LmMsa249RXQu''@;'; put 'put ''ZSxfbj1FdC5zO2U6aWYoIltvYmplY3QgQXJyYXldIj09e30udG9TdHJpbmcuY2FsbChYbikpe2lmKCgxPT09X258fC0xPT09X24pJiZrbj49LWZlJiZrbjw9ZmUmJmtuPT09YShrbikpe2lmKDA9PT1YblswXSl7aWYoMD09PWtuJiYxPT09WG4ubGVuZ3RoKXJldHVybiEwO2JyZWFrIGV9aWYo''@;'; put 'put ''KFp0PShrbisxKSVQKTwxJiYoWnQrPVApLFN0cmluZyhYblswXSkubGVuZ3RoPT1adCl7Zm9yKFp0PTA7WnQ8WG4ubGVuZ3RoO1p0KyspaWYoKGZuPVhuW1p0XSk8MHx8Zm4+PUN8fGZuIT09YShmbikpYnJlYWsgZTtpZigwIT09Zm4pcmV0dXJuITB9fX1lbHNlIGlmKG51bGw9PT1YbiYmbnVs''@;'; put 'put ''bD09PWtuJiYobnVsbD09PV9ufHwxPT09X258fC0xPT09X24pKXJldHVybiEwO3Rocm93IEVycm9yKGMrIkludmFsaWQgQmlnTnVtYmVyOiAiK0V0KX0sRnIubWF4aW11bT1Gci5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gSXQoYXJndW1lbnRzLC0xKX0sRnIubWluaW11bT1Gci5taW49ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gSXQoYXJndW1lbnRzLDEpfSxGci5yYW5kb209KEV0PTkwMDcxOTkyNTQ3NDA5OTIsWnQ9TWF0aC5yYW5kb20oKSpFdCYyMDk3MTUxP2Z1bmN0aW9uKCl7cmV0dXJuIGEoTWF0aC5yYW5kb20oKSpFdCl9OmZ1bmN0aW9uKCl7cmV0dXJuIDgzODg2MDgqKDEwNzM3NDE4MjQq''@;'; put 'put ''TWF0aC5yYW5kb20oKXwwKSsoODM4ODYwOCpNYXRoLnJhbmRvbSgpfDApfSxmdW5jdGlvbihmbil7dmFyIFhuLGtuLF9uLGdyLHhuLG5yPTAseHI9W10sX3I9bmV3IEZyKFRyKTtpZihudWxsPT1mbj9mbj1pcjpkdChmbiwwLGZlKSxncj1pKGZuL1ApLFpyKWlmKGNyeXB0by5nZXRSYW5kb21W''@;'; put 'put ''YWx1ZXMpe2ZvcihYbj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShncio9MikpO25yPGdyOykoeG49MTMxMDcyKlhuW25yXSsoWG5bbnIrMV0+Pj4xMSkpPj05ZTE1Pyhrbj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSksWG5bbnJdPWtu''@;'; put 'put ''WzBdLFhuW25yKzFdPWtuWzFdKTooeHIucHVzaCh4biUxZTE0KSxucis9Mik7bnI9Z3IvMn1lbHNle2lmKCFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgWnI9ITEsRXJyb3IoYysiY3J5cHRvIHVuYXZhaWxhYmxlIik7Zm9yKFhuPWNyeXB0by5yYW5kb21CeXRlcyhncio9Nyk7bnI8Z3I7KSh4''@;'; put 'put ''bj0yODE0NzQ5NzY3MTA2NTYqKDMxJlhuW25yXSkrMTA5OTUxMTYyNzc3NipYbltucisxXSs0Mjk0OTY3Mjk2KlhuW25yKzJdKzE2Nzc3MjE2KlhuW25yKzNdKyhYbltucis0XTw8MTYpKyhYbltucis1XTw8OCkrWG5bbnIrNl0pPj05ZTE1P2NyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KFhu''@;'; put 'put ''LG5yKTooeHIucHVzaCh4biUxZTE0KSxucis9Nyk7bnI9Z3IvN31pZighWnIpZm9yKDtucjxncjspKHhuPVp0KCkpPDllMTUmJih4cltucisrXT14biUxZTE0KTtmb3IoZ3I9eHJbLS1ucl0sZm4lPVAsZ3ImJmZuJiYoeHJbbnJdPWEoZ3IvKHhuPUpbUC1mbl0pKSp4bik7MD09PXhyW25yXTt4''@;'; put 'put ''ci5wb3AoKSxuci0tKTtpZihucjwwKXhyPVtfbj0wXTtlbHNle2Zvcihfbj0tMTswPT09eHJbMF07eHIuc3BsaWNlKDAsMSksX24tPVApO2Zvcihucj0xLHhuPXhyWzBdO3huPj0xMDt4bi89MTAsbnIrKyk7bnI8UCYmKF9uLT1QLW5yKX1yZXR1cm4gX3IuZT1fbixfci5jPXhyLF9yfSksRnIu''@;'; put 'put ''c3VtPWZ1bmN0aW9uKCl7Zm9yKHZhciBFdD0xLFp0PWFyZ3VtZW50cyxmbj1uZXcgRnIoWnRbMF0pO0V0PFp0Lmxlbmd0aDspZm49Zm4ucGx1cyhadFtFdCsrXSk7cmV0dXJuIGZufSxabj1mdW5jdGlvbigpe3ZhciBFdD0iMDEyMzQ1Njc4OSI7ZnVuY3Rpb24gWnQoZm4sWG4sa24sX24pe2Zv''@;'; put 'put ''cih2YXIgZ3IsbnIseG49WzBdLHhyPTAsX3I9Zm4ubGVuZ3RoO3hyPF9yOyl7Zm9yKG5yPXhuLmxlbmd0aDtuci0tO3huW25yXSo9WG4pO2Zvcih4blswXSs9X24uaW5kZXhPZihmbi5jaGFyQXQoeHIrKykpLGdyPTA7Z3I8eG4ubGVuZ3RoO2dyKyspeG5bZ3JdPmtuLTEmJihudWxsPT14bltn''@;'; put 'put ''cisxXSYmKHhuW2dyKzFdPTApLHhuW2dyKzFdKz14bltncl0va258MCx4bltncl0lPWtuKX1yZXR1cm4geG4ucmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihmbixYbixrbixfbixncil7dmFyIHhuLG5yLHhyLF9yLGZpLENhLGNhLGZvLGNzPWZuLmluZGV4T2YoIi4iKSxHbz1pcixTbz1waTtm''@;'; put 'put ''b3IoY3M+PTAmJihfcj1TaSxTaT0wLGZuPWZuLnJlcGxhY2UoIi4iLCIiKSxDYT0oZm89bmV3IEZyKFhuKSkucG93KGZuLmxlbmd0aC1jcyksU2k9X3IsZm8uYz1adChwbihYZShDYS5jKSxDYS5lLCIwIiksMTAsa24sRXQpLGZvLmU9Zm8uYy5sZW5ndGgpLHhyPV9yPShjYT1adChmbixYbixr''@;'; put 'put ''bixncj8oeG49VGksRXQpOih4bj1FdCxUaSkpKS5sZW5ndGg7MD09Y2FbLS1fcl07Y2EucG9wKCkpO2lmKCFjYVswXSlyZXR1cm4geG4uY2hhckF0KDApO2lmKGNzPDA/LS14cjooQ2EuYz1jYSxDYS5lPXhyLENhLnM9X24sY2E9KENhPWduKENhLGZvLEdvLFNvLGtuKSkuYyxmaT1DYS5yLHhy''@;'; put 'put ''PUNhLmUpLGNzPWNhW25yPXhyK0dvKzFdLF9yPWtuLzIsZmk9Zml8fG5yPDB8fG51bGwhPWNhW25yKzFdLGZpPVNvPDQ/KG51bGwhPWNzfHxmaSkmJigwPT1Tb3x8U289PShDYS5zPDA/MzoyKSk6Y3M+X3J8fGNzPT1fciYmKDQ9PVNvfHxmaXx8Nj09U28mJjEmY2FbbnItMV18fFNvPT0oQ2Eu''@;'; put 'put ''czwwPzg6NykpLG5yPDF8fCFjYVswXSlmbj1maT9wbih4bi5jaGFyQXQoMSksLUdvLHhuLmNoYXJBdCgwKSk6eG4uY2hhckF0KDApO2Vsc2V7aWYoY2EubGVuZ3RoPW5yLGZpKWZvcigtLWtuOysrY2FbLS1ucl0+a247KWNhW25yXT0wLG5yfHwoKyt4cixjYT1bMV0uY29uY2F0KGNhKSk7Zm9y''@;'; put 'put ''KF9yPWNhLmxlbmd0aDshY2FbLS1fcl07KTtmb3IoY3M9MCxmbj0iIjtjczw9X3I7Zm4rPXhuLmNoYXJBdChjYVtjcysrXSkpO2ZuPXBuKGZuLHhyLHhuLmNoYXJBdCgwKSl9cmV0dXJuIGZufX0oKSxnbj1mdW5jdGlvbigpe2Z1bmN0aW9uIEV0KFhuLGtuLF9uKXt2YXIgZ3IseG4sbnIseHIs''@;'; put 'put ''X3I9MCxmaT1Ybi5sZW5ndGgsQ2E9a24lY2UsY2E9a24vY2V8MDtmb3IoWG49WG4uc2xpY2UoKTtmaS0tOylfcj0oKHhuPUNhKihucj1YbltmaV0lY2UpKyhncj1jYSpucisoeHI9WG5bZmldL2NlfDApKkNhKSVjZSpjZStfcikvX258MCkrKGdyL2NlfDApK2NhKnhyLFhuW2ZpXT14biVfbjty''@;'; put 'put ''ZXR1cm4gX3ImJihYbj1bX3JdLmNvbmNhdChYbikpLFhufWZ1bmN0aW9uIFp0KFhuLGtuLF9uLGdyKXt2YXIgeG4sbnI7aWYoX24hPWdyKW5yPV9uPmdyPzE6LTE7ZWxzZSBmb3IoeG49bnI9MDt4bjxfbjt4bisrKWlmKFhuW3huXSE9a25beG5dKXtucj1Yblt4bl0+a25beG5dPzE6LTE7YnJl''@;'; put 'put ''YWt9cmV0dXJuIG5yfWZ1bmN0aW9uIGZuKFhuLGtuLF9uLGdyKXtmb3IodmFyIHhuPTA7X24tLTspWG5bX25dLT14bixYbltfbl09KHhuPVhuW19uXTxrbltfbl0/MTowKSpncitYbltfbl0ta25bX25dO2Zvcig7IVhuWzBdJiZYbi5sZW5ndGg+MTtYbi5zcGxpY2UoMCwxKSk7fXJldHVybiBm''@;'; put 'put ''dW5jdGlvbihYbixrbixfbixncix4bil7dmFyIG5yLHhyLF9yLGZpLENhLGNhLGZvLGNzLEdvLFNvLGVzLFpzLHphLE8wLEpkLHljLFFkLEpsPVhuLnM9PWtuLnM/MTotMSxRbD1Ybi5jLHRzPWtuLmM7aWYoIShRbCYmUWxbMF0mJnRzJiZ0c1swXSkpcmV0dXJuIG5ldyBGcihYbi5zJiZrbi5z''@;'; put 'put ''JiYoUWw/IXRzfHxRbFswXSE9dHNbMF06dHMpP1FsJiYwPT1RbFswXXx8IXRzPzAqSmw6SmwvMDpOYU4pO2ZvcihHbz0oY3M9bmV3IEZyKEpsKSkuYz1bXSxKbD1fbisoeHI9WG4uZS1rbi5lKSsxLHhufHwoeG49Qyx4cj1IZShYbi5lL1ApLUhlKGtuLmUvUCksSmw9SmwvUHwwKSxfcj0wO3Rz''@;'; put 'put ''W19yXT09KFFsW19yXXx8MCk7X3IrKyk7aWYodHNbX3JdPihRbFtfcl18fDApJiZ4ci0tLEpsPDApR28ucHVzaCgxKSxmaT0hMDtlbHNle2ZvcihPMD1RbC5sZW5ndGgseWM9dHMubGVuZ3RoLF9yPTAsSmwrPTIsKENhPWEoeG4vKHRzWzBdKzEpKSk+MSYmKHRzPUV0KHRzLENhLHhuKSxRbD1F''@;'; put 'put ''dChRbCxDYSx4bikseWM9dHMubGVuZ3RoLE8wPVFsLmxlbmd0aCksemE9eWMsZXM9KFNvPVFsLnNsaWNlKDAseWMpKS5sZW5ndGg7ZXM8eWM7U29bZXMrK109MCk7UWQ9dHMuc2xpY2UoKSxRZD1bMF0uY29uY2F0KFFkKSxKZD10c1swXSx0c1sxXT49eG4vMiYmSmQrKztkb3tpZihDYT0wLChu''@;'; put 'put ''cj1adCh0cyxTbyx5YyxlcykpPDApe2lmKFpzPVNvWzBdLHljIT1lcyYmKFpzPVpzKnhuKyhTb1sxXXx8MCkpLChDYT1hKFpzL0pkKSk+MSlmb3IoQ2E+PXhuJiYoQ2E9eG4tMSksZm89KGNhPUV0KHRzLENhLHhuKSkubGVuZ3RoLGVzPVNvLmxlbmd0aDsxPT1adChjYSxTbyxmbyxlcyk7KUNh''@;'; put 'put ''LS0sZm4oY2EseWM8Zm8/UWQ6dHMsZm8seG4pLGZvPWNhLmxlbmd0aCxucj0xO2Vsc2UgMD09Q2EmJihucj1DYT0xKSxmbz0oY2E9dHMuc2xpY2UoKSkubGVuZ3RoO2lmKGZvPGVzJiYoY2E9WzBdLmNvbmNhdChjYSkpLGZuKFNvLGNhLGVzLHhuKSxlcz1Tby5sZW5ndGgsLTE9PW5yKWZvcig7''@;'; put 'put ''WnQodHMsU28seWMsZXMpPDE7KUNhKyssZm4oU28seWM8ZXM/UWQ6dHMsZXMseG4pLGVzPVNvLmxlbmd0aH1lbHNlIDA9PT1uciYmKENhKyssU289WzBdKTtHb1tfcisrXT1DYSxTb1swXT9Tb1tlcysrXT1RbFt6YV18fDA6KFNvPVtRbFt6YV1dLGVzPTEpfXdoaWxlKCh6YSsrPE8wfHxudWxs''@;'; put 'put ''IT1Tb1swXSkmJkpsLS0pO2ZpPW51bGwhPVNvWzBdLEdvWzBdfHxHby5zcGxpY2UoMCwxKX1pZih4bj09Qyl7Zm9yKF9yPTEsSmw9R29bMF07Smw+PTEwO0psLz0xMCxfcisrKTtFbihjcyxfbisoY3MuZT1fcit4cipQLTEpKzEsZ3IsZmkpfWVsc2UgY3MuZT14cixjcy5yPStmaTtyZXR1cm4g''@;'; put 'put ''Y3N9fSgpLEdyPWZ1bmN0aW9uKCl7dmFyIEV0PS9eKC0/KTAoW3hib10pKD89XHdbXHcuXSokKS9pLFp0PS9eKFteLl0rKVwuJC8sZm49L15cLihbXi5dKykkLyxYbj0vXi0/KEluZmluaXR5fE5hTikkLyxrbj0vXlxzKlwrKD89W1x3Ll0pfF5ccyt8XHMrJC9nO3JldHVybiBmdW5jdGlvbihf''@;'; put 'put ''bixncix4bixucil7dmFyIHhyLF9yPXhuP2dyOmdyLnJlcGxhY2Uoa24sIiIpO2lmKFhuLnRlc3QoX3IpKV9uLnM9aXNOYU4oX3IpP251bGw6X3I8MD8tMToxO2Vsc2V7aWYoIXhuJiYoX3I9X3IucmVwbGFjZShFdCxmdW5jdGlvbihmaSxDYSxjYSl7cmV0dXJuIHhyPSJ4Ij09KGNhPWNhLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpPzE2OiJiIj09Y2E/Mjo4LG5yJiZuciE9eHI/Zmk6Q2F9KSxuciYmKHhyPW5yLF9yPV9yLnJlcGxhY2UoWnQsIiQxIikucmVwbGFjZShmbiwiMC4kMSIpKSxnciE9X3IpKXJldHVybiBuZXcgRnIoX3IseHIpO2lmKEZyLkRFQlVHKXRocm93IEVycm9yKGMrIk5vdCBhIiso''@;'; put 'put ''bnI/IiBiYXNlICIrbnI6IiIpKyIgbnVtYmVyOiAiK2dyKTtfbi5zPW51bGx9X24uYz1fbi5lPW51bGx9fSgpLEVyLmFic29sdXRlVmFsdWU9RXIuYWJzPWZ1bmN0aW9uKCl7dmFyIEV0PW5ldyBGcih0aGlzKTtyZXR1cm4gRXQuczwwJiYoRXQucz0xKSxFdH0sRXIuY29tcGFyZWRUbz1mdW5j''@;'; put 'put ''dGlvbihFdCxadCl7cmV0dXJuIHJ0KHRoaXMsbmV3IEZyKEV0LFp0KSl9LEVyLmRlY2ltYWxQbGFjZXM9RXIuZHA9ZnVuY3Rpb24oRXQsWnQpe3ZhciBmbixYbixrbjtpZihudWxsIT1FdClyZXR1cm4gZHQoRXQsMCxmZSksbnVsbD09WnQ/WnQ9cGk6ZHQoWnQsMCw4KSxFbihuZXcgRnIodGhp''@;'; put 'put ''cyksRXQrdGhpcy5lKzEsWnQpO2lmKCEoZm49dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihYbj0oKGtuPWZuLmxlbmd0aC0xKS1IZSh0aGlzLmUvUCkpKlAsa249Zm5ba25dKWZvcig7a24lMTA9PTA7a24vPTEwLFhuLS0pO3JldHVybiBYbjwwJiYoWG49MCksWG59LEVyLmRpdmlkZWRCeT1Fci5k''@;'; put 'put ''aXY9ZnVuY3Rpb24oRXQsWnQpe3JldHVybiBnbih0aGlzLG5ldyBGcihFdCxadCksaXIscGkpfSxFci5kaXZpZGVkVG9JbnRlZ2VyQnk9RXIuaWRpdj1mdW5jdGlvbihFdCxadCl7cmV0dXJuIGduKHRoaXMsbmV3IEZyKEV0LFp0KSwwLDEpfSxFci5leHBvbmVudGlhdGVkQnk9RXIucG93PWZ1''@;'; put 'put ''bmN0aW9uKEV0LFp0KXt2YXIgZm4sWG4sa24sX24seG4sbnIseHIsX3IsZmk9dGhpcztpZigoRXQ9bmV3IEZyKEV0KSkuYyYmIUV0LmlzSW50ZWdlcigpKXRocm93IEVycm9yKGMrIkV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAiK2FyKEV0KSk7aWYobnVsbCE9WnQmJihadD1uZXcgRnIoWnQp''@;'; put 'put ''KSx4bj1FdC5lPjE0LCFmaS5jfHwhZmkuY1swXXx8MT09ZmkuY1swXSYmIWZpLmUmJjE9PWZpLmMubGVuZ3RofHwhRXQuY3x8IUV0LmNbMF0pcmV0dXJuIF9yPW5ldyBGcihNYXRoLnBvdygrYXIoZmkpLHhuP0V0LnMqKDItanQoRXQpKTorYXIoRXQpKSksWnQ/X3IubW9kKFp0KTpfcjtpZihu''@;'; put 'put ''cj1FdC5zPDAsWnQpe2lmKFp0LmM/IVp0LmNbMF06IVp0LnMpcmV0dXJuIG5ldyBGcihOYU4pOyhYbj0hbnImJmZpLmlzSW50ZWdlcigpJiZadC5pc0ludGVnZXIoKSkmJihmaT1maS5tb2QoWnQpKX1lbHNle2lmKEV0LmU+OSYmKGZpLmU+MHx8ZmkuZTwtMXx8KDA9PWZpLmU/ZmkuY1swXT4x''@;'; put 'put ''fHx4biYmZmkuY1sxXT49MjRlNzpmaS5jWzBdPDhlMTN8fHhuJiZmaS5jWzBdPD05OTk5OTc1ZTcpKSlyZXR1cm4gX249ZmkuczwwJiZqdChFdCk/LTA6MCxmaS5lPi0xJiYoX249MS9fbiksbmV3IEZyKG5yPzEvX246X24pO1NpJiYoX249aShTaS9QKzIpKX1mb3IoeG4/KGZuPW5ldyBGcigu''@;'; put 'put ''NSksbnImJihFdC5zPTEpLHhyPWp0KEV0KSk6eHI9KGtuPU1hdGguYWJzKCthcihFdCkpKSUyLF9yPW5ldyBGcihUcik7Oyl7aWYoeHIpe2lmKCEoX3I9X3IudGltZXMoZmkpKS5jKWJyZWFrO19uP19yLmMubGVuZ3RoPl9uJiYoX3IuYy5sZW5ndGg9X24pOlhuJiYoX3I9X3IubW9kKFp0KSl9''@;'; put 'put ''aWYoa24pe2lmKDA9PT0oa249YShrbi8yKSkpYnJlYWs7eHI9a24lMn1lbHNlIGlmKEVuKEV0PUV0LnRpbWVzKGZuKSxFdC5lKzEsMSksRXQuZT4xNCl4cj1qdChFdCk7ZWxzZXtpZigwPT0oa249K2FyKEV0KSkpYnJlYWs7eHI9a24lMn1maT1maS50aW1lcyhmaSksX24/ZmkuYyYmZmkuYy5s''@;'; put 'put ''ZW5ndGg+X24mJihmaS5jLmxlbmd0aD1fbik6WG4mJihmaT1maS5tb2QoWnQpKX1yZXR1cm4gWG4/X3I6KG5yJiYoX3I9VHIuZGl2KF9yKSksWnQ/X3IubW9kKFp0KTpfbj9FbihfcixTaSxwaSx2b2lkIDApOl9yKX0sRXIuaW50ZWdlclZhbHVlPWZ1bmN0aW9uKEV0KXt2YXIgWnQ9bmV3IEZy''@;'; put 'put ''KHRoaXMpO3JldHVybiBudWxsPT1FdD9FdD1waTpkdChFdCwwLDgpLEVuKFp0LFp0LmUrMSxFdCl9LEVyLmlzRXF1YWxUbz1Fci5lcT1mdW5jdGlvbihFdCxadCl7cmV0dXJuIDA9PT1ydCh0aGlzLG5ldyBGcihFdCxadCkpfSxFci5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5j''@;'; put 'put ''fSxFci5pc0dyZWF0ZXJUaGFuPUVyLmd0PWZ1bmN0aW9uKEV0LFp0KXtyZXR1cm4gcnQodGhpcyxuZXcgRnIoRXQsWnQpKT4wfSxFci5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvPUVyLmd0ZT1mdW5jdGlvbihFdCxadCl7cmV0dXJuIDE9PT0oWnQ9cnQodGhpcyxuZXcgRnIoRXQsWnQpKSl8fDA9''@;'; put 'put ''PT1adH0sRXIuaXNJbnRlZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJkhlKHRoaXMuZS9QKT50aGlzLmMubGVuZ3RoLTJ9LEVyLmlzTGVzc1RoYW49RXIubHQ9ZnVuY3Rpb24oRXQsWnQpe3JldHVybiBydCh0aGlzLG5ldyBGcihFdCxadCkpPDB9LEVyLmlzTGVzc1RoYW5PckVxdWFs''@;'; put 'put ''VG89RXIubHRlPWZ1bmN0aW9uKEV0LFp0KXtyZXR1cm4tMT09PShadD1ydCh0aGlzLG5ldyBGcihFdCxadCkpKXx8MD09PVp0fSxFci5pc05hTj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN9LEVyLmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPDB9LEVyLmlzUG9zaXRpdmU9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPjB9LEVyLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiYwPT10aGlzLmNbMF19LEVyLm1pbnVzPWZ1bmN0aW9uKEV0LFp0KXt2YXIgZm4sWG4sa24sX24sZ3I9dGhpcyx4bj1nci5zO2lmKFp0PShFdD1uZXcgRnIoRXQsWnQpKS5zLCF4''@;'; put 'put ''bnx8IVp0KXJldHVybiBuZXcgRnIoTmFOKTtpZih4biE9WnQpcmV0dXJuIEV0LnM9LVp0LGdyLnBsdXMoRXQpO3ZhciBucj1nci5lL1AseHI9RXQuZS9QLF9yPWdyLmMsZmk9RXQuYztpZighbnJ8fCF4cil7aWYoIV9yfHwhZmkpcmV0dXJuIF9yPyhFdC5zPS1adCxFdCk6bmV3IEZyKGZpP2dy''@;'; put 'put ''Ok5hTik7aWYoIV9yWzBdfHwhZmlbMF0pcmV0dXJuIGZpWzBdPyhFdC5zPS1adCxFdCk6bmV3IEZyKF9yWzBdP2dyOjM9PXBpPy0wOjApfWlmKG5yPUhlKG5yKSx4cj1IZSh4ciksX3I9X3Iuc2xpY2UoKSx4bj1uci14cil7Zm9yKChfbj14bjwwKT8oeG49LXhuLGtuPV9yKTooeHI9bnIsa249''@;'; put 'put ''ZmkpLGtuLnJldmVyc2UoKSxadD14bjtadC0tO2tuLnB1c2goMCkpO2tuLnJldmVyc2UoKX1lbHNlIGZvcihYbj0oX249KHhuPV9yLmxlbmd0aCk8KFp0PWZpLmxlbmd0aCkpP3huOlp0LHhuPVp0PTA7WnQ8WG47WnQrKylpZihfcltadF0hPWZpW1p0XSl7X249X3JbWnRdPGZpW1p0XTticmVh''@;'; put 'put ''a31pZihfbiYmKGtuPV9yLF9yPWZpLGZpPWtuLEV0LnM9LUV0LnMpLChadD0oWG49ZmkubGVuZ3RoKS0oZm49X3IubGVuZ3RoKSk+MClmb3IoO1p0LS07X3JbZm4rK109MCk7Zm9yKFp0PUMtMTtYbj54bjspe2lmKF9yWy0tWG5dPGZpW1huXSl7Zm9yKGZuPVhuO2ZuJiYhX3JbLS1mbl07X3Jb''@;'; put 'put ''Zm5dPVp0KTstLV9yW2ZuXSxfcltYbl0rPUN9X3JbWG5dLT1maVtYbl19Zm9yKDswPT1fclswXTtfci5zcGxpY2UoMCwxKSwtLXhyKTtyZXR1cm4gX3JbMF0/VXQoRXQsX3IseHIpOihFdC5zPTM9PXBpPy0xOjEsRXQuYz1bRXQuZT0wXSxFdCl9LEVyLm1vZHVsbz1Fci5tb2Q9ZnVuY3Rpb24o''@;'; put 'put ''RXQsWnQpe3ZhciBmbixYbixrbj10aGlzO3JldHVybiBFdD1uZXcgRnIoRXQsWnQpLCFrbi5jfHwhRXQuc3x8RXQuYyYmIUV0LmNbMF0/bmV3IEZyKE5hTik6IUV0LmN8fGtuLmMmJiFrbi5jWzBdP25ldyBGcihrbik6KDk9PWJpPyhYbj1FdC5zLEV0LnM9MSxmbj1nbihrbixFdCwwLDMpLEV0''@;'; put 'put ''LnM9WG4sZm4ucyo9WG4pOmZuPWduKGtuLEV0LDAsYmkpLCEoRXQ9a24ubWludXMoZm4udGltZXMoRXQpKSkuY1swXSYmMT09YmkmJihFdC5zPWtuLnMpLEV0KX0sRXIubXVsdGlwbGllZEJ5PUVyLnRpbWVzPWZ1bmN0aW9uKEV0LFp0KXt2YXIgZm4sWG4sa24sX24sZ3IseG4sbnIseHIsX3Is''@;'; put 'put ''ZmksQ2EsY2EsZm8sY3MsR28sU289dGhpcyxlcz1Tby5jLFpzPShFdD1uZXcgRnIoRXQsWnQpKS5jO2lmKCEoZXMmJlpzJiZlc1swXSYmWnNbMF0pKXJldHVybiFTby5zfHwhRXQuc3x8ZXMmJiFlc1swXSYmIVpzfHxacyYmIVpzWzBdJiYhZXM/RXQuYz1FdC5lPUV0LnM9bnVsbDooRXQucyo9''@;'; put 'put ''U28ucyxlcyYmWnM/KEV0LmM9WzBdLEV0LmU9MCk6RXQuYz1FdC5lPW51bGwpLEV0O2ZvcihYbj1IZShTby5lL1ApK0hlKEV0LmUvUCksRXQucyo9U28ucywobnI9ZXMubGVuZ3RoKTwoZmk9WnMubGVuZ3RoKSYmKGZvPWVzLGVzPVpzLFpzPWZvLGtuPW5yLG5yPWZpLGZpPWtuKSxrbj1ucitm''@;'; put 'put ''aSxmbz1bXTtrbi0tO2ZvLnB1c2goMCkpO2Zvcihjcz1DLEdvPWNlLGtuPWZpOy0ta24+PTA7KXtmb3IoZm49MCxDYT1ac1trbl0lR28sY2E9WnNba25dL0dvfDAsX249a24rKGdyPW5yKTtfbj5rbjspZm49KCh4cj1DYSooeHI9ZXNbLS1ncl0lR28pKyh4bj1jYSp4cisoX3I9ZXNbZ3JdL0dv''@;'; put 'put ''fDApKkNhKSVHbypHbytmb1tfbl0rZm4pL2NzfDApKyh4bi9Hb3wwKStjYSpfcixmb1tfbi0tXT14ciVjcztmb1tfbl09Zm59cmV0dXJuIGZuPysrWG46Zm8uc3BsaWNlKDAsMSksVXQoRXQsZm8sWG4pfSxFci5uZWdhdGVkPWZ1bmN0aW9uKCl7dmFyIEV0PW5ldyBGcih0aGlzKTtyZXR1cm4g''@;'; put 'put ''RXQucz0tRXQuc3x8bnVsbCxFdH0sRXIucGx1cz1mdW5jdGlvbihFdCxadCl7dmFyIGZuLFhuPXRoaXMsa249WG4ucztpZihadD0oRXQ9bmV3IEZyKEV0LFp0KSkucywha258fCFadClyZXR1cm4gbmV3IEZyKE5hTik7aWYoa24hPVp0KXJldHVybiBFdC5zPS1adCxYbi5taW51cyhFdCk7dmFy''@;'; put 'put ''IF9uPVhuLmUvUCxncj1FdC5lL1AseG49WG4uYyxucj1FdC5jO2lmKCFfbnx8IWdyKXtpZigheG58fCFucilyZXR1cm4gbmV3IEZyKGtuLzApO2lmKCF4blswXXx8IW5yWzBdKXJldHVybiBuclswXT9FdDpuZXcgRnIoeG5bMF0/WG46MCprbil9aWYoX249SGUoX24pLGdyPUhlKGdyKSx4bj14''@;'; put 'put ''bi5zbGljZSgpLGtuPV9uLWdyKXtmb3Ioa24+MD8oZ3I9X24sZm49bnIpOihrbj0ta24sZm49eG4pLGZuLnJldmVyc2UoKTtrbi0tO2ZuLnB1c2goMCkpO2ZuLnJldmVyc2UoKX1mb3IoKGtuPXhuLmxlbmd0aCktKFp0PW5yLmxlbmd0aCk8MCYmKGZuPW5yLG5yPXhuLHhuPWZuLFp0PWtuKSxr''@;'; put 'put ''bj0wO1p0Oylrbj0oeG5bLS1adF09eG5bWnRdK25yW1p0XStrbikvQ3wwLHhuW1p0XT1DPT09eG5bWnRdPzA6eG5bWnRdJUM7cmV0dXJuIGtuJiYoeG49W2tuXS5jb25jYXQoeG4pLCsrZ3IpLFV0KEV0LHhuLGdyKX0sRXIucHJlY2lzaW9uPUVyLnNkPWZ1bmN0aW9uKEV0LFp0KXt2YXIgZm4s''@;'; put 'put ''WG4sa247aWYobnVsbCE9RXQmJkV0IT09ISFFdClyZXR1cm4gZHQoRXQsMSxmZSksbnVsbD09WnQ/WnQ9cGk6ZHQoWnQsMCw4KSxFbihuZXcgRnIodGhpcyksRXQsWnQpO2lmKCEoZm49dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihYbj0oa249Zm4ubGVuZ3RoLTEpKlArMSxrbj1mbltrbl0pe2Zv''@;'; put 'put ''cig7a24lMTA9PTA7a24vPTEwLFhuLS0pO2Zvcihrbj1mblswXTtrbj49MTA7a24vPTEwLFhuKyspO31yZXR1cm4gRXQmJnRoaXMuZSsxPlhuJiYoWG49dGhpcy5lKzEpLFhufSxFci5zaGlmdGVkQnk9ZnVuY3Rpb24oRXQpe3JldHVybiBkdChFdCwtWSxZKSx0aGlzLnRpbWVzKCIxZSIrRXQp''@;'; put 'put ''fSxFci5zcXVhcmVSb290PUVyLnNxcnQ9ZnVuY3Rpb24oKXt2YXIgRXQsWnQsZm4sWG4sa24sX249dGhpcyxncj1fbi5jLHhuPV9uLnMsbnI9X24uZSx4cj1pcis0LF9yPW5ldyBGcigiMC41Iik7aWYoMSE9PXhufHwhZ3J8fCFnclswXSlyZXR1cm4gbmV3IEZyKCF4bnx8eG48MCYmKCFncnx8''@;'; put 'put ''Z3JbMF0pP05hTjpncj9fbjoxLzApO2lmKDA9PSh4bj1NYXRoLnNxcnQoK2FyKF9uKSkpfHx4bj09MS8wPygoKFp0PVhlKGdyKSkubGVuZ3RoK25yKSUyPT0wJiYoWnQrPSIwIikseG49TWF0aC5zcXJ0KCtadCksbnI9SGUoKG5yKzEpLzIpLShucjwwfHxuciUyKSxmbj1uZXcgRnIoWnQ9eG49''@;'; put 'put ''PTEvMD8iNWUiK25yOihadD14bi50b0V4cG9uZW50aWFsKCkpLnNsaWNlKDAsWnQuaW5kZXhPZigiZSIpKzEpK25yKSk6Zm49bmV3IEZyKHhuKyIiKSxmbi5jWzBdKWZvcigoeG49KG5yPWZuLmUpK3hyKTwzJiYoeG49MCk7OylpZihmbj1fci50aW1lcygoa249Zm4pLnBsdXMoZ24oX24sa24s''@;'; put 'put ''eHIsMSkpKSxYZShrbi5jKS5zbGljZSgwLHhuKT09PShadD1YZShmbi5jKSkuc2xpY2UoMCx4bikpe2lmKGZuLmU8bnImJi0teG4sIjk5OTkiIT0oWnQ9WnQuc2xpY2UoeG4tMyx4bisxKSkmJihYbnx8IjQ5OTkiIT1adCkpeyghK1p0fHwhK1p0LnNsaWNlKDEpJiYiNSI9PVp0LmNoYXJBdCgw''@;'; put 'put ''KSkmJihFbihmbixmbi5lK2lyKzIsMSksRXQ9IWZuLnRpbWVzKGZuKS5lcShfbikpO2JyZWFrfWlmKCFYbiYmKEVuKGtuLGtuLmUraXIrMiwwKSxrbi50aW1lcyhrbikuZXEoX24pKSl7Zm49a247YnJlYWt9eHIrPTQseG4rPTQsWG49MX1yZXR1cm4gRW4oZm4sZm4uZStpcisxLHBpLEV0KX0s''@;'; put 'put ''RXIudG9FeHBvbmVudGlhbD1mdW5jdGlvbihFdCxadCl7cmV0dXJuIG51bGwhPUV0JiYoZHQoRXQsMCxmZSksRXQrKyksb3QodGhpcyxFdCxadCwxKX0sRXIudG9GaXhlZD1mdW5jdGlvbihFdCxadCl7cmV0dXJuIG51bGwhPUV0JiYoZHQoRXQsMCxmZSksRXQ9RXQrdGhpcy5lKzEpLG90KHRo''@;'; put 'put ''aXMsRXQsWnQpfSxFci50b0Zvcm1hdD1mdW5jdGlvbihFdCxadCxmbil7dmFyIFhuO2lmKG51bGw9PWZuKW51bGwhPUV0JiZadCYmIm9iamVjdCI9PXR5cGVvZiBadD8oZm49WnQsWnQ9bnVsbCk6RXQmJiJvYmplY3QiPT10eXBlb2YgRXQ/KGZuPUV0LEV0PVp0PW51bGwpOmZuPWpyO2Vsc2Ug''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBmbil0aHJvdyBFcnJvcihjKyJBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAiK2ZuKTtpZihYbj10aGlzLnRvRml4ZWQoRXQsWnQpLHRoaXMuYyl7dmFyIF9uLGdyPVhuLnNwbGl0KCIuIikseG49K2ZuLmdyb3VwU2l6ZSxucj0rZm4uc2Vjb25kYXJ5R3JvdXBT''@;'; put 'put ''aXplLHhyPWZuLmdyb3VwU2VwYXJhdG9yfHwiIixfcj1nclswXSxmaT1nclsxXSxDYT10aGlzLnM8MCxjYT1DYT9fci5zbGljZSgxKTpfcixmbz1jYS5sZW5ndGg7aWYobnImJihfbj14bix4bj1ucixucj1fbixmby09X24pLHhuPjAmJmZvPjApe2Zvcihfcj1jYS5zdWJzdHIoMCxfbj1mbyV4''@;'; put 'put ''bnx8eG4pO19uPGZvO19uKz14bilfcis9eHIrY2Euc3Vic3RyKF9uLHhuKTtucj4wJiYoX3IrPXhyK2NhLnNsaWNlKF9uKSksQ2EmJihfcj0iLSIrX3IpfVhuPWZpP19yKyhmbi5kZWNpbWFsU2VwYXJhdG9yfHwiIikrKChucj0rZm4uZnJhY3Rpb25Hcm91cFNpemUpP2ZpLnJlcGxhY2UobmV3''@;'; put 'put ''IFJlZ0V4cCgiXFxkeyIrbnIrIn1cXEIiLCJnIiksIiQmIisoZm4uZnJhY3Rpb25Hcm91cFNlcGFyYXRvcnx8IiIpKTpmaSk6X3J9cmV0dXJuKGZuLnByZWZpeHx8IiIpK1huKyhmbi5zdWZmaXh8fCIiKX0sRXIudG9GcmFjdGlvbj1mdW5jdGlvbihFdCl7dmFyIFp0LGZuLFhuLGtuLF9uLGdy''@;'; put 'put ''LHhuLG5yLHhyLF9yLGZpLENhLGNhPXRoaXMsZm89Y2EuYztpZihudWxsIT1FdCYmKCEoeG49bmV3IEZyKEV0KSkuaXNJbnRlZ2VyKCkmJih4bi5jfHwxIT09eG4ucyl8fHhuLmx0KFRyKSkpdGhyb3cgRXJyb3IoYysiQXJndW1lbnQgIisoeG4uaXNJbnRlZ2VyKCk/Im91dCBvZiByYW5nZTog''@;'; put 'put ''Ijoibm90IGFuIGludGVnZXI6ICIpK2FyKHhuKSk7aWYoIWZvKXJldHVybiBuZXcgRnIoY2EpO2ZvcihadD1uZXcgRnIoVHIpLHhyPWZuPW5ldyBGcihUciksWG49bnI9bmV3IEZyKFRyKSxDYT1YZShmbyksX249WnQuZT1DYS5sZW5ndGgtY2EuZS0xLFp0LmNbMF09SlsoZ3I9X24lUCk8MD9Q''@;'; put 'put ''K2dyOmdyXSxFdD0hRXR8fHhuLmNvbXBhcmVkVG8oWnQpPjA/X24+MD9adDp4cjp4bixncj1EcixEcj0xLzAseG49bmV3IEZyKENhKSxuci5jWzBdPTA7X3I9Z24oeG4sWnQsMCwxKSwxIT0oa249Zm4ucGx1cyhfci50aW1lcyhYbikpKS5jb21wYXJlZFRvKEV0KTspZm49WG4sWG49a24seHI9''@;'; put 'put ''bnIucGx1cyhfci50aW1lcyhrbj14cikpLG5yPWtuLFp0PXhuLm1pbnVzKF9yLnRpbWVzKGtuPVp0KSkseG49a247cmV0dXJuIGtuPWduKEV0Lm1pbnVzKGZuKSxYbiwwLDEpLG5yPW5yLnBsdXMoa24udGltZXMoeHIpKSxmbj1mbi5wbHVzKGtuLnRpbWVzKFhuKSksbnIucz14ci5zPWNhLnMs''@;'; put 'put ''Zmk9Z24oeHIsWG4sX24qPTIscGkpLm1pbnVzKGNhKS5hYnMoKS5jb21wYXJlZFRvKGduKG5yLGZuLF9uLHBpKS5taW51cyhjYSkuYWJzKCkpPDE/W3hyLFhuXTpbbnIsZm5dLERyPWdyLGZpfSxFci50b051bWJlcj1mdW5jdGlvbigpe3JldHVybithcih0aGlzKX0sRXIudG9QcmVjaXNpb249''@;'; put 'put ''ZnVuY3Rpb24oRXQsWnQpe3JldHVybiBudWxsIT1FdCYmZHQoRXQsMSxmZSksb3QodGhpcyxFdCxadCwyKX0sRXIudG9TdHJpbmc9ZnVuY3Rpb24oRXQpe3ZhciBadCxmbj10aGlzLFhuPWZuLnMsa249Zm4uZTtyZXR1cm4gbnVsbD09PWtuP1huPyhadD0iSW5maW5pdHkiLFhuPDAmJihadD0i''@;'; put 'put ''LSIrWnQpKTpadD0iTmFOIjoobnVsbD09RXQ/WnQ9a248PURufHxrbj49QXI/RnQoWGUoZm4uYyksa24pOnBuKFhlKGZuLmMpLGtuLCIwIik6MTA9PT1FdCYmbGE/WnQ9cG4oWGUoKGZuPUVuKG5ldyBGcihmbiksaXIra24rMSxwaSkpLmMpLGZuLmUsIjAiKTooZHQoRXQsMixUaS5sZW5ndGgs''@;'; put 'put ''IkJhc2UiKSxadD1abihwbihYZShmbi5jKSxrbiwiMCIpLDEwLEV0LFhuLCEwKSksWG48MCYmZm4uY1swXSYmKFp0PSItIitadCkpLFp0fSxFci52YWx1ZU9mPUVyLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBhcih0aGlzKX0sRXIuX2lzQmlnTnVtYmVyPSEwLG51bGwhPW9uJiZGci5zZXQo''@;'; put 'put ''b24pLEZyfSgpLGUuZGVmYXVsdD1lLkJpZ051bWJlcj1lLG4uZXhwb3J0cz9uLmV4cG9ydHM9ZToodHx8KHQ9dHlwZW9mIHNlbGY8InUiJiZzZWxmP3NlbGY6d2luZG93KSx0LkJpZ051bWJlcj1lKX0oS2h0KX0oazhlKTt2YXIgRDhlPWs4ZS5leHBvcnRzO2NvbnN0IG1wPXJuZSgpLHYydD1l''@;'; put 'put ''bmUoKSx5MnQ9dG5lLF8ydD1EOGUsQTE9e3RyaWxsaW9uOk1hdGgucG93KDEwLDEyKSxiaWxsaW9uOk1hdGgucG93KDEwLDkpLG1pbGxpb246TWF0aC5wb3coMTAsNiksdGhvdXNhbmQ6TWF0aC5wb3coMTAsMyl9LFBrPXt0b3RhbExlbmd0aDowLGNoYXJhY3RlcmlzdGljOjAsZm9yY2VBdmVy''@;'; put 'put ''YWdlOiExLGF2ZXJhZ2U6ITEsbWFudGlzc2E6LTEsb3B0aW9uYWxNYW50aXNzYTohMCx0aG91c2FuZFNlcGFyYXRlZDohMSxzcGFjZVNlcGFyYXRlZDohMSxuZWdhdGl2ZToic2lnbiIsZm9yY2VTaWduOiExLHJvdW5kaW5nRnVuY3Rpb246TWF0aC5yb3VuZCxzcGFjZVNlcGFyYXRlZEFiYnJl''@;'; put 'put ''dmlhdGlvbjohMX0se2JpbmFyeVN1ZmZpeGVzOkk4ZSxkZWNpbWFsU3VmZml4ZXM6Q1Z9PW1wLmN1cnJlbnRCeXRlcygpLGluZT17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpDVixtYXJrZXI6ImJkIn0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOkk4ZSxtYXJrZXI6ImIifSxk''@;'; put 'put ''ZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6Q1YsbWFya2VyOiJkIn19O2Z1bmN0aW9uIFNWKG4sdCxlKXtsZXQgcj10WzBdLGk9TWF0aC5hYnMobik7aWYoaT49ZSl7Zm9yKGxldCBhPTE7YTx0Lmxlbmd0aDsrK2Epe2xldCBjPU1hdGgucG93KGUsYSksbT1NYXRoLnBvdyhlLGErMSk7aWYo''@;'; put 'put ''aT49YyYmaTxtKXtyPXRbYV0sbi89YzticmVha319cj09PXRbMF0mJihuLz1NYXRoLnBvdyhlLHQubGVuZ3RoLTEpLHI9dFt0Lmxlbmd0aC0xXSl9cmV0dXJue3ZhbHVlOm4sc3VmZml4OnJ9fWZ1bmN0aW9uIE1WKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bjtlKyspdCs9IjAiO3JldHVy''@;'; put 'put ''biB0fWZ1bmN0aW9uIEZrKHtpbnN0YW5jZTpuLHByb3ZpZGVkRm9ybWF0OnQsc3RhdGU6ZT1tcCxkZWNpbWFsU2VwYXJhdG9yOnIsZGVmYXVsdHM6aT1lLmN1cnJlbnREZWZhdWx0cygpfSl7bGV0IGE9bi5fdmFsdWU7aWYoMD09PWEmJmUuaGFzWmVyb0Zvcm1hdCgpKXJldHVybiBlLmdldFpl''@;'; put 'put ''cm9Gb3JtYXQoKTtpZighaXNGaW5pdGUoYSkpcmV0dXJuIGEudG9TdHJpbmcoKTtsZXQgYz1PYmplY3QuYXNzaWduKHt9LFBrLGksdCksbT1jLnRvdGFsTGVuZ3RoLEM9bT8wOmMuY2hhcmFjdGVyaXN0aWMsUD1jLm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWMsWT1jLmZvcmNlQXZlcmFnZSxjZT0h''@;'; put 'put ''IW18fCEhWXx8Yy5hdmVyYWdlLGZlPW0/LTE6Y2UmJnZvaWQgMD09PXQubWFudGlzc2E/MDpjLm1hbnRpc3NhLEFlPSFtJiYodm9pZCAwPT09dC5vcHRpb25hbE1hbnRpc3NhPy0xPT09ZmU6Yy5vcHRpb25hbE1hbnRpc3NhKSxIZT1jLnRyaW1NYW50aXNzYSxYZT1jLnRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkLHJ0PWMuc3BhY2VTZXBhcmF0ZWQsZHQ9Yy5uZWdhdGl2ZSxqdD1jLmZvcmNlU2lnbixGdD1jLmV4cG9uZW50aWFsLHBuPWMucm91bmRpbmdGdW5jdGlvbixvbj0iIjtpZihjZSl7bGV0IFpuPWZ1bmN0aW9uIEQydCh7dmFsdWU6bixmb3JjZUF2ZXJhZ2U6dCxsb3dQcmVjaXNpb246ZT0h''@;'; put 'put ''MCxhYmJyZXZpYXRpb25zOnIsc3BhY2VTZXBhcmF0ZWQ6aT0hMSx0b3RhbExlbmd0aDphPTAscm91bmRpbmdGdW5jdGlvbjpjPU1hdGgucm91bmR9KXtsZXQgbT0iIixDPU1hdGguYWJzKG4pLFA9LTE7aWYodCYmclt0XSYmQTFbdF0/KG09clt0XSxuLz1BMVt0XSk6Qz49QTEudHJpbGxpb258''@;'; put 'put ''fGUmJjE9PT1jKEMvQTEudHJpbGxpb24pPyhtPXIudHJpbGxpb24sbi89QTEudHJpbGxpb24pOkM8QTEudHJpbGxpb24mJkM+PUExLmJpbGxpb258fGUmJjE9PT1jKEMvQTEuYmlsbGlvbik/KG09ci5iaWxsaW9uLG4vPUExLmJpbGxpb24pOkM8QTEuYmlsbGlvbiYmQz49QTEubWlsbGlvbnx8''@;'; put 'put ''ZSYmMT09PWMoQy9BMS5taWxsaW9uKT8obT1yLm1pbGxpb24sbi89QTEubWlsbGlvbik6KEM8QTEubWlsbGlvbiYmQz49QTEudGhvdXNhbmR8fGUmJjE9PT1jKEMvQTEudGhvdXNhbmQpKSYmKG09ci50aG91c2FuZCxuLz1BMS50aG91c2FuZCksbSYmKG09KGk/IiAiOiIiKSttKSxhKXtsZXQg''@;'; put 'put ''Sj1uPDAsY2U9bi50b1N0cmluZygpLnNwbGl0KCIuIilbMF07UD1NYXRoLm1heChhLShKP2NlLmxlbmd0aC0xOmNlLmxlbmd0aCksMCl9cmV0dXJue3ZhbHVlOm4sYWJicmV2aWF0aW9uOm0sbWFudGlzc2FQcmVjaXNpb246UH19KHt2YWx1ZTphLGZvcmNlQXZlcmFnZTpZLGxvd1ByZWNpc2lv''@;'; put 'put ''bjpjLmxvd1ByZWNpc2lvbixhYmJyZXZpYXRpb25zOmUuY3VycmVudEFiYnJldmlhdGlvbnMoKSxzcGFjZVNlcGFyYXRlZDpydCxyb3VuZGluZ0Z1bmN0aW9uOnBuLHRvdGFsTGVuZ3RoOm19KTthPVpuLnZhbHVlLG9uKz1abi5hYmJyZXZpYXRpb24sbSYmKGZlPVpuLm1hbnRpc3NhUHJlY2lz''@;'; put 'put ''aW9uKX1pZihGdCl7bGV0IFpuPWZ1bmN0aW9uIEkydCh7dmFsdWU6bixjaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbjp0fSl7bGV0W2Uscl09bi50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUiKSxpPStlO3JldHVybiB0PygxPHQmJihpKj1NYXRoLnBvdygxMCx0LTEpLHI9K3ItKHQtMSkscj1yPj0w''@;'; put 'put ''P2ArJHtyfWA6cikse3ZhbHVlOmksYWJicmV2aWF0aW9uOmBlJHtyfWB9KTp7dmFsdWU6aSxhYmJyZXZpYXRpb246YGUke3J9YH19KHt2YWx1ZTphLGNoYXJhY3RlcmlzdGljUHJlY2lzaW9uOkN9KTthPVpuLnZhbHVlLG9uPVpuLmFiYnJldmlhdGlvbitvbn1sZXQgZ249ZnVuY3Rpb24gTzJ0''@;'; put 'put ''KG4sdCxlLHIsaSxhKXtpZigtMT09PXIpcmV0dXJuIG47bGV0IGM9ZnVuY3Rpb24gTDJ0KG4sdCxlPU1hdGgucm91bmQpe3JldHVybi0xIT09bi50b1N0cmluZygpLmluZGV4T2YoImUiKT9mdW5jdGlvbiBSMnQobix0KXtsZXQgZT1uLnRvU3RyaW5nKCksW3IsaV09ZS5zcGxpdCgiZSIpLFth''@;'; put 'put ''LGM9IiJdPXIuc3BsaXQoIi4iKTtpZigraT4wKWU9YStjK01WKGktYy5sZW5ndGgpO2Vsc2V7bGV0IG09Ii4iO209K2E8MD9gLTAke219YDpgMCR7bX1gO2xldCBDPShNVigtaS0xKStNYXRoLmFicyhhKStjKS5zdWJzdHIoMCx0KTtDLmxlbmd0aDx0JiYoQys9TVYodC1DLmxlbmd0aCkpLGU9''@;'; put 'put ''bStDfXJldHVybitpPjAmJnQ+MCYmKGUrPWAuJHtNVih0KX1gKSxlfShuLHQpOm5ldyBfMnQoZSgrYCR7bn1lKyR7dH1gKS9NYXRoLnBvdygxMCx0KSkudG9GaXhlZCh0KX0odCxyLGEpLFttLEM9IiJdPWMudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKEMubWF0Y2goL14wKyQvKSYmKGV8fGkp''@;'; put 'put ''KXJldHVybiBtO2xldCBQPUMubWF0Y2goLzArJC8pO3JldHVybiBpJiZQP2Ake219LiR7Qy50b1N0cmluZygpLnNsaWNlKDAsUC5pbmRleCl9YDpjLnRvU3RyaW5nKCl9KGEudG9TdHJpbmcoKSxhLEFlLGZlLEhlLHBuKTtyZXR1cm4gZ249ZnVuY3Rpb24gUDJ0KG4sdCxlLHIpe2xldCBpPW4s''@;'; put 'put ''W2EsY109aS50b1N0cmluZygpLnNwbGl0KCIuIik7aWYoYS5tYXRjaCgvXi0/MCQvKSYmZSlyZXR1cm4gYz9gJHthLnJlcGxhY2UoIjAiLCIiKX0uJHtjfWA6YS5yZXBsYWNlKCIwIiwiIik7Y29uc3QgbT10PDAmJjA9PT1hLmluZGV4T2YoIi0iKTtpZihtJiYoYT1hLnNsaWNlKDEpLGk9aS5z''@;'; put 'put ''bGljZSgxKSksYS5sZW5ndGg8cil7bGV0IEM9ci1hLmxlbmd0aDtmb3IobGV0IFA9MDtQPEM7UCsrKWk9YDAke2l9YH1yZXR1cm4gbSYmKGk9YC0ke2l9YCksaS50b1N0cmluZygpfShnbixhLFAsQyksZ249ZnVuY3Rpb24gSDJ0KG4sdCxlLHIsaSl7bGV0IGE9ci5jdXJyZW50RGVsaW1pdGVy''@;'; put 'put ''cygpLGM9YS50aG91c2FuZHM7aT1pfHxhLmRlY2ltYWw7bGV0IG09YS50aG91c2FuZHNTaXplfHwzLEM9bi50b1N0cmluZygpLFA9Qy5zcGxpdCgiLiIpWzBdLFk9Qy5zcGxpdCgiLiIpWzFdO2NvbnN0IEo9dDwwJiYwPT09UC5pbmRleE9mKCItIik7cmV0dXJuIGUmJihKJiYoUD1QLnNsaWNl''@;'; put 'put ''KDEpKSxmdW5jdGlvbiBGMnQobix0KXtsZXQgZT1bXSxyPTA7Zm9yKGxldCBpPW47aT4wO2ktLSlyPT09dCYmKGUudW5zaGlmdChpKSxyPTApLHIrKztyZXR1cm4gZX0oUC5sZW5ndGgsbSkuZm9yRWFjaCgoZmUsQWUpPT57UD1QLnNsaWNlKDAsZmUrQWUpK2MrUC5zbGljZShmZStBZSl9KSxK''@;'; put 'put ''JiYoUD1gLSR7UH1gKSksQz1ZP1AraStZOlAsQ30oZ24sYSxYZSxlLHIpLChjZXx8RnQpJiYoZ249ZnVuY3Rpb24gTjJ0KG4sdCl7cmV0dXJuIG4rdH0oZ24sb24pKSwoanR8fGE8MCkmJihnbj1mdW5jdGlvbiBWMnQobix0LGUpe3JldHVybiAwPT09dD9uOjA9PStuP24ucmVwbGFjZSgiLSIs''@;'; put 'put ''IiIpOnQ+MD9gKyR7bn1gOiJzaWduIj09PWU/bjpgKCR7bi5yZXBsYWNlKCItIiwiIil9KWB9KGduLGEsZHQpKSxnbn1mdW5jdGlvbiBVQyhuLHQpe2lmKCFuKXJldHVybiB0O2xldCBlPU9iamVjdC5rZXlzKG4pO3JldHVybiAxPT09ZS5sZW5ndGgmJiJvdXRwdXQiPT09ZVswXT90Om59Y29u''@;'; put 'put ''c3QgVDU9RDhlO2Z1bmN0aW9uIFI4ZShuLHQsZSl7bGV0IHI9bmV3IFQ1KG4uX3ZhbHVlKSxpPXQ7cmV0dXJuIGUuaXNOdW1icm8odCkmJihpPXQuX3ZhbHVlKSxpPW5ldyBUNShpKSxuLl92YWx1ZT1yLm1pbnVzKGkpLnRvTnVtYmVyKCksbn1jb25zdCBIND1ybmUoKSxYMnQ9ZW5lKCkscTJ0''@;'; put 'put ''PShuPT4oe2xvYWRMYW5ndWFnZXNJbk5vZGU6dD0+ZnVuY3Rpb24gZzJ0KG4sdCl7bi5mb3JFYWNoKGU9PntsZXQgcjt0cnl7cj1mdW5jdGlvbiBwMnQobil7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytuKyciLiBQbGVhc2UgY29uZmlndXJlIHRo''@;'; put 'put ''ZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX0oYC4uL2xhbmd1YWdlcy8ke2V9YCl9Y2F0Y2h7Y29u''@;'; put 'put ''c29sZS5lcnJvcihgVW5hYmxlIHRvIGxvYWQgIiR7ZX0iLiBObyBtYXRjaGluZyBsYW5ndWFnZSBmaWxlIGZvdW5kLmApfXImJnQucmVnaXN0ZXJMYW5ndWFnZShyKX0pfSh0LG4pfSkpKHl1KSxKMnQ9RThlKCk7bGV0IFh2PShuPT4oe2Zvcm1hdDooLi4udCk9PmZ1bmN0aW9uIGIydChuLHQ9''@;'; put 'put ''e30sZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD15MnQucGFyc2VGb3JtYXQodCkpLCF2MnQudmFsaWRhdGVGb3JtYXQodCkpcmV0dXJuIkVSUk9SOiBpbnZhbGlkIGZvcm1hdCI7bGV0IGk9dC5wcmVmaXh8fCIiLGE9dC5wb3N0Zml4fHwiIixjPWZ1bmN0aW9uIHcydChuLHQsZSl7c3dp''@;'; put 'put ''dGNoKHQub3V0cHV0KXtjYXNlImN1cnJlbmN5IjpyZXR1cm4gZnVuY3Rpb24gazJ0KG4sdCxlKXtjb25zdCByPWUuY3VycmVudEN1cnJlbmN5KCk7bGV0IGMsaT1PYmplY3QuYXNzaWduKHt9LHQpLGE9T2JqZWN0LmFzc2lnbih7fSxQayxpKSxtPSIiLEM9ISFhLnRvdGFsTGVuZ3RofHwhIWEu''@;'; put 'put ''Zm9yY2VBdmVyYWdlfHxhLmF2ZXJhZ2UsUD1pLmN1cnJlbmN5UG9zaXRpb258fHIucG9zaXRpb24sWT1pLmN1cnJlbmN5U3ltYm9sfHxyLnN5bWJvbDtjb25zdCBKPXZvaWQgMCE9PWEuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeT9hLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6YS5zcGFjZVNlcGFy''@;'; put 'put ''YXRlZDt2b2lkIDA9PT1pLmxvd1ByZWNpc2lvbiYmKGkubG93UHJlY2lzaW9uPSExKSxKJiYobT0iICIpLCJpbmZpeCI9PT1QJiYoYz1tK1krbSk7bGV0IGNlPUZrKHtpbnN0YW5jZTpuLHByb3ZpZGVkRm9ybWF0Omksc3RhdGU6ZSxkZWNpbWFsU2VwYXJhdG9yOmN9KTtyZXR1cm4icHJlZml4''@;'; put 'put ''Ij09PVAmJihjZT1uLl92YWx1ZTwwJiYic2lnbiI9PT1hLm5lZ2F0aXZlP2AtJHttfSR7WX0ke2NlLnNsaWNlKDEpfWA6bi5fdmFsdWU+MCYmYS5mb3JjZVNpZ24/YCske219JHtZfSR7Y2Uuc2xpY2UoMSl9YDpZK20rY2UpLCghUHx8InBvc3RmaXgiPT09UCkmJihtPSFhLnNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQWJicmV2aWF0aW9uJiZDPyIiOm0sY2U9Y2UrbStZKSxjZX0obix0PVVDKHQsbXAuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSxtcCk7Y2FzZSJwZXJjZW50IjpyZXR1cm4gZnVuY3Rpb24gQTJ0KG4sdCxlLHIpe2xldCBpPXQucHJlZml4U3ltYm9sLGE9Rmsoe2luc3RhbmNl''@;'; put 'put ''OnIoMTAwKm4uX3ZhbHVlKSxwcm92aWRlZEZvcm1hdDp0LHN0YXRlOmV9KSxjPU9iamVjdC5hc3NpZ24oe30sUGssdCk7cmV0dXJuIGk/YCUke2Muc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7YX1gOmAke2F9JHtjLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0lYH0obix0PVVDKHQsbXAuY3VycmVu''@;'; put 'put ''dFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0KCkpLG1wLGUpO2Nhc2UiYnl0ZSI6cmV0dXJuIGZ1bmN0aW9uIHgydChuLHQsZSxyKXtsZXQgaT10LmJhc2V8fCJiaW5hcnkiLGE9T2JqZWN0LmFzc2lnbih7fSxQayx0KTtjb25zdHtiaW5hcnlTdWZmaXhlczpjLGRlY2ltYWxTdWZmaXhlczptfT1l''@;'; put 'put ''LmN1cnJlbnRCeXRlcygpO2xldCBQPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVzOm18fENWLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6Y3x8SThlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczptfHxDVixtYXJrZXI6ImQifX1b''@;'; put 'put ''aV0se3ZhbHVlOlksc3VmZml4Okp9PVNWKG4uX3ZhbHVlLFAuc3VmZml4ZXMsUC5zY2FsZSk7cmV0dXJuYCR7Rmsoe2luc3RhbmNlOnIoWSkscHJvdmlkZWRGb3JtYXQ6dCxzdGF0ZTplLGRlZmF1bHRzOmUuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCl9KX0ke2Euc3BhY2VTZXBhcmF0ZWQ/''@;'; put 'put ''IiAiOiIifSR7Sn1gfShuLHQ9VUModCxtcC5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKSksbXAsZSk7Y2FzZSJ0aW1lIjpyZXR1cm4gdD1VQyh0LG1wLmN1cnJlbnRUaW1lRGVmYXVsdEZvcm1hdCgpKSxmdW5jdGlvbiBUMnQobil7bGV0IHQ9TWF0aC5mbG9vcihuLl92YWx1ZS82MC82MCks''@;'; put 'put ''ZT1NYXRoLmZsb29yKChuLl92YWx1ZS02MCp0KjYwKS82MCkscj1NYXRoLnJvdW5kKG4uX3ZhbHVlLTYwKnQqNjAtNjAqZSk7cmV0dXJuYCR7dH06JHtlPDEwPyIwIjoiIn0ke2V9OiR7cjwxMD8iMCI6IiJ9JHtyfWB9KG4pO2Nhc2Uib3JkaW5hbCI6cmV0dXJuIGZ1bmN0aW9uIEUydChuLHQs''@;'; put 'put ''ZSl7bGV0IHI9ZS5jdXJyZW50T3JkaW5hbCgpLGk9T2JqZWN0LmFzc2lnbih7fSxQayx0KSxhPUZrKHtpbnN0YW5jZTpuLHByb3ZpZGVkRm9ybWF0OnQsc3RhdGU6ZX0pLGM9cihuLl92YWx1ZSk7cmV0dXJuYCR7YX0ke2kuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7Y31gfShuLHQ9VUModCxt''@;'; put 'put ''cC5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQoKSksbXApO2RlZmF1bHQ6cmV0dXJuIEZrKHtpbnN0YW5jZTpuLHByb3ZpZGVkRm9ybWF0OnQsbnVtYnJvOmV9KX19KG4sdCxlKTtyZXR1cm4gYz1mdW5jdGlvbiBCMnQobix0KXtyZXR1cm4gdCtufShjLGkpLGM9ZnVuY3Rpb24gajJ0KG4s''@;'; put 'put ''dCl7cmV0dXJuIG4rdH0oYyxhKSxjfSguLi50LG4pLGdldEJ5dGVVbml0OiguLi50KT0+ZnVuY3Rpb24gTTJ0KG4pe2xldCB0PWluZS5nZW5lcmFsO3JldHVybiBTVihuLl92YWx1ZSx0LnN1ZmZpeGVzLHQuc2NhbGUpLnN1ZmZpeH0oLi4udCxuKSxnZXRCaW5hcnlCeXRlVW5pdDooLi4udCk9''@;'; put 'put ''PmZ1bmN0aW9uIFMydChuKXtsZXQgdD1pbmUuYmluYXJ5O3JldHVybiBTVihuLl92YWx1ZSx0LnN1ZmZpeGVzLHQuc2NhbGUpLnN1ZmZpeH0oLi4udCxuKSxnZXREZWNpbWFsQnl0ZVVuaXQ6KC4uLnQpPT5mdW5jdGlvbiBDMnQobil7bGV0IHQ9aW5lLmRlY2ltYWw7cmV0dXJuIFNWKG4uX3Zh''@;'; put 'put ''bHVlLHQuc3VmZml4ZXMsdC5zY2FsZSkuc3VmZml4fSguLi50LG4pLGZvcm1hdE9yRGVmYXVsdDpVQ30pKSh5dSkscXY9KG49Pih7YWRkOih0LGUpPT5mdW5jdGlvbiBVMnQobix0LGUpe2xldCByPW5ldyBUNShuLl92YWx1ZSksaT10O3JldHVybiBlLmlzTnVtYnJvKHQpJiYoaT10Ll92YWx1''@;'; put 'put ''ZSksaT1uZXcgVDUoaSksbi5fdmFsdWU9ci5wbHVzKGkpLnRvTnVtYmVyKCksbn0odCxlLG4pLHN1YnRyYWN0Oih0LGUpPT5SOGUodCxlLG4pLG11bHRpcGx5Oih0LGUpPT5mdW5jdGlvbiBXMnQobix0LGUpe2xldCByPW5ldyBUNShuLl92YWx1ZSksaT10O3JldHVybiBlLmlzTnVtYnJvKHQp''@;'; put 'put ''JiYoaT10Ll92YWx1ZSksaT1uZXcgVDUoaSksbi5fdmFsdWU9ci50aW1lcyhpKS50b051bWJlcigpLG59KHQsZSxuKSxkaXZpZGU6KHQsZSk9PmZ1bmN0aW9uIFoydChuLHQsZSl7bGV0IHI9bmV3IFQ1KG4uX3ZhbHVlKSxpPXQ7cmV0dXJuIGUuaXNOdW1icm8odCkmJihpPXQuX3ZhbHVlKSxp''@;'; put 'put ''PW5ldyBUNShpKSxuLl92YWx1ZT1yLmRpdmlkZWRCeShpKS50b051bWJlcigpLG59KHQsZSxuKSxzZXQ6KHQsZSk9PmZ1bmN0aW9uIFkydChuLHQsZSl7bGV0IHI9dDtyZXR1cm4gZS5pc051bWJybyh0KSYmKHI9dC5fdmFsdWUpLG4uX3ZhbHVlPXIsbn0odCxlLG4pLGRpZmZlcmVuY2U6KHQs''@;'; put 'put ''ZSk9PmZ1bmN0aW9uIEcydChuLHQsZSl7bGV0IHI9ZShuLl92YWx1ZSk7cmV0dXJuIFI4ZShyLHQsZSksTWF0aC5hYnMoci5fdmFsdWUpfSh0LGUsbiksQmlnTnVtYmVyOlQ1fSkpKHl1KTtjb25zdCBRMnQ9dG5lO2NsYXNzIEw4ZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl92YWx1ZT10fWNsb25l''@;'; put 'put ''KCl7cmV0dXJuIHl1KHRoaXMuX3ZhbHVlKX1mb3JtYXQodD17fSl7cmV0dXJuIFh2LmZvcm1hdCh0aGlzLHQpfWZvcm1hdEN1cnJlbmN5KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9UTJ0LnBhcnNlRm9ybWF0KHQpKSwodD1Ydi5mb3JtYXRPckRlZmF1bHQodCxINC5jdXJyZW50''@;'; put 'put ''Q3VycmVuY3lEZWZhdWx0Rm9ybWF0KCkpKS5vdXRwdXQ9ImN1cnJlbmN5IixYdi5mb3JtYXQodGhpcyx0KX1mb3JtYXRUaW1lKHQ9e30pe3JldHVybiB0Lm91dHB1dD0idGltZSIsWHYuZm9ybWF0KHRoaXMsdCl9YmluYXJ5Qnl0ZVVuaXRzKCl7cmV0dXJuIFh2LmdldEJpbmFyeUJ5dGVVbml0''@;'; put 'put ''KHRoaXMpfWRlY2ltYWxCeXRlVW5pdHMoKXtyZXR1cm4gWHYuZ2V0RGVjaW1hbEJ5dGVVbml0KHRoaXMpfWJ5dGVVbml0cygpe3JldHVybiBYdi5nZXRCeXRlVW5pdCh0aGlzKX1kaWZmZXJlbmNlKHQpe3JldHVybiBxdi5kaWZmZXJlbmNlKHRoaXMsdCl9YWRkKHQpe3JldHVybiBxdi5hZGQo''@;'; put 'put ''dGhpcyx0KX1zdWJ0cmFjdCh0KXtyZXR1cm4gcXYuc3VidHJhY3QodGhpcyx0KX1tdWx0aXBseSh0KXtyZXR1cm4gcXYubXVsdGlwbHkodGhpcyx0KX1kaXZpZGUodCl7cmV0dXJuIHF2LmRpdmlkZSh0aGlzLHQpfXNldCh0KXtyZXR1cm4gcXYuc2V0KHRoaXMsTzhlKHQpKX12YWx1ZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl92YWx1ZX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiBPOGUobil7bGV0IHQ9bjtyZXR1cm4geXUuaXNOdW1icm8obik/dD1uLl92YWx1ZToic3RyaW5nIj09dHlwZW9mIG4/dD15dS51bmZvcm1hdChuKTppc05hTihuKSYmKHQ9TmFOKSx0fWZ1bmN0''@;'; put 'put ''aW9uIHl1KG4pe3JldHVybiBuZXcgTDhlKE84ZShuKSl9eXUudmVyc2lvbj0iMi41LjAiLHl1LmlzTnVtYnJvPWZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgTDhlfSx5dS5sYW5ndWFnZT1INC5jdXJyZW50TGFuZ3VhZ2UseXUucmVnaXN0ZXJMYW5ndWFnZT1INC5yZWdpc3Rlckxh''@;'; put 'put ''bmd1YWdlLHl1LnNldExhbmd1YWdlPUg0LnNldExhbmd1YWdlLHl1Lmxhbmd1YWdlcz1INC5sYW5ndWFnZXMseXUubGFuZ3VhZ2VEYXRhPUg0Lmxhbmd1YWdlRGF0YSx5dS56ZXJvRm9ybWF0PUg0LnNldFplcm9Gb3JtYXQseXUuZGVmYXVsdEZvcm1hdD1INC5jdXJyZW50RGVmYXVsdHMseXUu''@;'; put 'put ''c2V0RGVmYXVsdHM9SDQuc2V0RGVmYXVsdHMseXUuZGVmYXVsdEN1cnJlbmN5Rm9ybWF0PUg0LmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQseXUudmFsaWRhdGU9WDJ0LnZhbGlkYXRlLHl1LmxvYWRMYW5ndWFnZXNJbk5vZGU9cTJ0LmxvYWRMYW5ndWFnZXNJbk5vZGUseXUudW5mb3Jt''@;'; put 'put ''YXQ9SjJ0LnVuZm9ybWF0LHl1LkJpZ051bWJlcj1xdi5CaWdOdW1iZXI7dmFyIHA4PVhodCh5dSk7ZnVuY3Rpb24gUDhlKG4sdCl7aWYobmQobikpe2NvbnN0IGU9dC5udW1lcmljRm9ybWF0LHI9ZSYmZS5jdWx0dXJlfHwiLSIsaT1lJiZlLnBhdHRlcm47aWYodHlwZW9mIHI8InUiJiYhcDgu''@;'; put 'put ''bGFuZ3VhZ2VzKClbcl0pe2NvbnN0IGE9ci5yZXBsYWNlKCItIiwiIiksYz1wOC5hbGxMYW5ndWFnZXM/cDguYWxsTGFuZ3VhZ2VzW3JdOnA4W2FdO2MmJnA4LnJlZ2lzdGVyTGFuZ3VhZ2UoYyl9cDguc2V0TGFuZ3VhZ2Uociksbj1wOChuKS5mb3JtYXQoaXx8IjAiKX1yZXR1cm4gbn1mdW5j''@;'; put 'put ''dGlvbiBhbmUobix0LGUscixpLGEsYyl7bGV0IG09YTtpZihuZChtKSl7bGV0IFA9W107aWYoQXJyYXkuaXNBcnJheShjLmNsYXNzTmFtZSkpUD1jLmNsYXNzTmFtZTtlbHNle3ZhciBDO2NvbnN0IFk9bnVsbCE9PShDPWMuY2xhc3NOYW1lKSYmdm9pZCAwIT09Qz9DOiIiO1kubGVuZ3RoJiYo''@;'; put 'put ''UD1ZLnNwbGl0KCIgIikpfW09UDhlKG0sYyksUC5pbmRleE9mKCJodExlZnQiKTwwJiZQLmluZGV4T2YoImh0Q2VudGVyIik8MCYmUC5pbmRleE9mKCJodFJpZ2h0Iik8MCYmUC5pbmRleE9mKCJodEp1c3RpZnkiKTwwJiZQLnB1c2goImh0UmlnaHQiKSxQLmluZGV4T2YoImh0TnVtZXJpYyIp''@;'; put 'put ''PDAmJlAucHVzaCgiaHROdW1lcmljIiksYy5jbGFzc05hbWU9UC5qb2luKCIgIiksdC5kaXI9Imx0ciJ9eDUobix0LGUscixpLG0sYyl9ZnVuY3Rpb24gb25lKG4sdCxlLHIsaSxhLGMpe3g1LmFwcGx5KHRoaXMsW24sdCxlLHIsaSxhLGNdKTtjb25zdCBDPWMuaGFzaFN5bWJvbHx8IioiO2xl''@;'; put 'put ''dCBQPSIiO2VvKChjLmhhc2hMZW5ndGh8fHQuaW5uZXJIVE1MLmxlbmd0aCktMSwoKT0+e1ArPUN9KSxKNih0LFApfWZ1bmN0aW9uIHNuZShuLHQsZSxyLGksYSxjKXt4NS5hcHBseSh0aGlzLFtuLHQsZSxyLGksYSxjXSl9ZnVuY3Rpb24gbG5lKG4sdCxlLHIsaSxhLGMpe3g1LmFwcGx5KHRo''@;'; put 'put ''aXMsW24sdCxlLHIsaSxhLGNdKSx0LmRpcj0ibHRyIn1mdW5jdGlvbiBIayhuLHQpe2xldCBlPW47bnVsbD09ZSYmKGU9IiIpLHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1lP3QoITApOnRoaXMuc3RyaWN0JiZ0aGlzLnNvdXJjZT8iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zb3VyY2U/dGhpcy5z''@;'; put 'put ''b3VyY2UoZSxGOGUoZSx0KSk6RjhlKGUsdCkodGhpcy5zb3VyY2UpOnQoITApfWZ1bmN0aW9uIEY4ZShuLHQpe2NvbnN0IGU9bjtyZXR1cm4gZnVuY3Rpb24ocil7bGV0IGk9ITE7Zm9yKGxldCBhPTAsYz1yLmxlbmd0aDthPGM7YSsrKWlmKFVBKGUsclthXSkpe2k9ITA7YnJlYWt9dChpKX19''@;'; put 'put ''ZnVuY3Rpb24gSDhlKG4pe2NvbnN0IHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFOKG5ldyBEYXRlKGAke259VDAwOjAwYCkuZ2V0RGF0ZSgpKT90Om5ldyBEYXRlKHQuZ2V0VGltZSgpKzZlNCp0LmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uIHhWKG4sdCl7Y29uc3QgZT1BNWUoImRh''@;'; put 'put ''dGUiLHRoaXMuaW5zdGFuY2UpO2xldCByPW4saT0hMDtudWxsPT1yJiYocj0iIik7bGV0IGE9cXMocix0aGlzLmRhdGVGb3JtYXR8fGUuZGVmYXVsdERhdGVGb3JtYXQsITApLmlzVmFsaWQoKSxjPXFzKG5ldyBEYXRlKHIpKS5pc1ZhbGlkKCl8fGE7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09''@;'; put 'put ''PXImJihjPSEwLGE9ITApLGN8fChpPSExKSwhYyYmYSYmKGk9ITApLGMmJiFhKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0KXtjb25zdCBtPWZ1bmN0aW9uIGxmdChuLHQpe2NvbnN0IGU9cXMoSDhlKG4pKSxyPXFzKG4sdCksaT1uLnNlYXJjaCgvW0EtWmEtel0vZyk+LTE7bGV0IGE7cmV0''@;'; put 'put ''dXJuIGE9ZS5pc1ZhbGlkKCkmJmUuZm9ybWF0KCJ4Iik9PT1yLmZvcm1hdCgieCIpfHwhci5pc1ZhbGlkKCl8fGk/ZTpyLGEuZm9ybWF0KHQpfShyLHRoaXMuZGF0ZUZvcm1hdCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlzdWFsUm93LHRoaXMudmlzdWFsQ29sLG0sImRh''@;'; put 'put ''dGVWYWxpZGF0b3IiKSxpPSEwfWVsc2UgaT0hMTt0KGkpfWZ1bmN0aW9uIGNuZShuLHQpe0hrLmFwcGx5KHRoaXMsW24sdF0pfWZ1bmN0aW9uIHVuZShuLHQpe2xldCBlPW47bnVsbD09ZSYmKGU9IiIpLHQoISghdGhpcy5hbGxvd0VtcHR5fHwiIiE9PWUpfHwiIiE9PWUmJm5kKG4pKX1hbmUu''@;'; put 'put ''UkVOREVSRVJfVFlQRT0ibnVtZXJpYyIsb25lLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixzbmUuUkVOREVSRVJfVFlQRT0ic2VsZWN0IixsbmUuUkVOREVSRVJfVFlQRT0idGltZSIsSGsuVkFMSURBVE9SX1RZUEU9ImF1dG9jb21wbGV0ZSIseFYuVkFMSURBVE9SX1RZUEU9ImRhdGUiLGNu''@;'; put 'put ''ZS5WQUxJREFUT1JfVFlQRT0iZHJvcGRvd24iLHVuZS5WQUxJREFUT1JfVFlQRT0ibnVtZXJpYyI7Y29uc3QgZGZ0PVsiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaIiwiWCIsIngiXTtmdW5jdGlvbiBFVihuLHQpe2NvbnN0IGU9dGhpcy50aW1lRm9ybWF0fHwiaDptbTpzcyBhIjtsZXQgcj0h''@;'; put 'put ''MCxpPW47bnVsbD09PWkmJihpPSIiKSxpPS9eXGR7Myx9JC8udGVzdChpKT9wYXJzZUludChpLDEwKTppO2NvbnN0IGE9L15cZHsxLDJ9JC8udGVzdChpKTthJiYoaSs9IjowMCIpO2NvbnN0IGM9cXMoaSxkZnQsITApLmlzVmFsaWQoKT9xcyhpKTpxcyhpLGUpO2xldCBtPWMuaXNWYWxpZCgp''@;'; put 'put ''LEM9cXMoaSxlLCEwKS5pc1ZhbGlkKCkmJiFhO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1pJiYobT0hMCxDPSEwKSxtfHwocj0hMSksIW0mJkMmJihyPSEwKSxtJiYhQylpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgUD1jLmZvcm1hdChlKTt0aGlzLmluc3RhbmNlLnNldERh''@;'; put 'put ''dGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1YWxDb2wsUCwidGltZVZhbGlkYXRvciIpLHI9ITB9ZWxzZSByPSExO3Qocil9ZnVuY3Rpb24gTjhlKG4pe3JldHVybiBobyhuKSYmdm9pZCAwIT09bi52YWx1ZT9uLnZhbHVlOm59ZnVuY3Rpb24gVjhlKG4sdCxlKXtjb25zdCBpPWE9''@;'; put 'put ''PmhvKGEpJiZ3YShhLmtleSkmJndhKGEudmFsdWUpO3JldHVybiBpKHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3codCksdGhpcy50b1BoeXNpY2FsQ29sdW1uKGUpKSk/aShuKT9uOntrZXk6bix2YWx1ZTpufTpufUVWLlZBTElEQVRPUl9UWVBFPSJ0aW1lIjtj''@;'; put 'put ''b25zdCBwZnQ9e0NFTExfVFlQRToiYXV0b2NvbXBsZXRlIixlZGl0b3I6SHRlLHJlbmRlcmVyOkJDLHZhbGlkYXRvcjpIayx2YWx1ZUdldHRlcjpOOGUsdmFsdWVTZXR0ZXI6VjhlfSxtZnQ9e0NFTExfVFlQRToiY2hlY2tib3giLGVkaXRvcjpvOGUscmVuZGVyZXI6JHRlLHZhbHVlU2V0dGVy''@;'; put 'put ''OmZ1bmN0aW9uIGdmdChuLHQsZSl7Y29uc3R7Y2hlY2tlZFRlbXBsYXRlOnIsdW5jaGVja2VkVGVtcGxhdGU6aX09dGhpcy5nZXRDZWxsTWV0YSh0LGUpLGE9cWwobiksYz1hPT09cWwociksbT1hPT09cWwoaSk7cmV0dXJuIGN8fG0/Yz9yOmk6bn19O2Z1bmN0aW9uIEI4ZShuLHQsZSxyLGks''@;'; put 'put ''YSxjKXtCQy5hcHBseSh0aGlzLFtuLHQsZSxyLGksYSxjXSl9QjhlLlJFTkRFUkVSX1RZUEU9ImRhdGUiO2NvbnN0IHlmdD17Q0VMTF9UWVBFOiJkYXRlIixlZGl0b3I6cDhlLHJlbmRlcmVyOkI4ZSx2YWxpZGF0b3I6eFZ9LHdmdD17Q0VMTF9UWVBFOiJkcm9wZG93biIsZWRpdG9yOmc4ZSxy''@;'; put 'put ''ZW5kZXJlcjpHdGUsdmFsaWRhdG9yOmNuZSxmaWx0ZXI6ITEsc3RyaWN0OiEwLHZhbHVlR2V0dGVyOmZ1bmN0aW9uIF9mdChuKXtyZXR1cm4gTjhlLmNhbGwodGhpcyxuKX0sdmFsdWVTZXR0ZXI6ZnVuY3Rpb24gYmZ0KG4sdCxlLHIpe3JldHVybiBWOGUuY2FsbCh0aGlzLG4sdCxlLHIpfX0s''@;'; put 'put ''Q2Z0PXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOkx0ZSxyZW5kZXJlcjpYdGV9LE1mdD17Q0VMTF9UWVBFOiJudW1lcmljIixlZGl0b3I6bThlLHJlbmRlcmVyOmFuZSx2YWxpZGF0b3I6dW5lLGRhdGFUeXBlOiJudW1iZXIiLHZhbHVlU2V0dGVyOmZ1bmN0aW9uIFNmdChuKXtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIG4mJlI1ZShuKSl7Y29uc3QgdD1MNWUobik7cmV0dXJuIHhrKHQpP246dH1yZXR1cm4gbn19LHhmdD17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOnY4ZSxyZW5kZXJlcjpvbmUsY29weWFibGU6ITF9LEVmdD17Q0VMTF9UWVBFOiJzZWxlY3QiLGVkaXRv''@;'; put 'put ''cjpfOGUscmVuZGVyZXI6c25lfSxUZnQ9e0NFTExfVFlQRToidGltZSIsZWRpdG9yOmI4ZSxyZW5kZXJlcjpsbmUsdmFsaWRhdG9yOkVWfTtmdW5jdGlvbiBXQyhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRGZ0KG4pe3ZhciB0PWZ1bmN0aW9uIElmdChuLHQpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gajhlKG4sdCxlKXt6OGUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIHo4ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUg''@;'; put 'put ''ZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gVFYobix0LGUpe3JldHVybiBuLnNldChkbmUobix0KSxlKSxlfWZ1bmN0aW9uIF91KG4sdCl7cmV0dXJuIG4uZ2V0KGRuZShuLHQpKX1mdW5jdGlvbiBkbmUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10''@;'; put 'put ''Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFU4ZT1uZXcgTWFwKFtbInBsdWdpbiIsZnVuY3Rpb24gTm90KG4pe3JldHVybiEhcmso''@;'; put 'put ''bil9XSxbImNlbGwtdHlwZSIseTZlXSxbImVkaXRvciIsVDVlXSxbInJlbmRlcmVyIixINWVdLFsidmFsaWRhdG9yIixONWVdXSksVzhlPVN5bWJvbCgibWFpblNldHRpbmciKSxBVj1bXTtsZXQgSnY9bnVsbDt2YXIgVnU9bmV3IFdlYWtNYXAsUXY9bmV3IFdlYWtNYXAsWjhlPW5ldyBXZWFr''@;'; put 'put ''U2V0O2NsYXNzIE1ze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJiYXNlIn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0aGlzLlBMVUdJTl9LRVldfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURB''@;'; put 'put ''VE9SUygpe3JldHVybiBudWxsfWNvbnN0cnVjdG9yKHQpeyhmdW5jdGlvbiBrZnQobix0KXt6OGUobix0KSx0LmFkZChuKX0pKHRoaXMsWjhlKSxqOGUodGhpcyxWdSxudWxsKSxXQyh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBaZih0aGlzKSksV0ModGhpcywicGx1Z2luTmFtZSIsbnVsbCks''@;'; put 'put ''V0ModGhpcywicGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzIixbXSksV0ModGhpcywiaXNQbHVnaW5zUmVhZHkiLCExKSxXQyh0aGlzLCJlbmFibGVkIiwhMSksV0ModGhpcywiaW5pdGlhbGl6ZWQiLCExKSxqOGUodGhpcyxRdix7fSksdzQodGhpcywiaG90Iix0LHt3cml0YWJsZTohMX0p''@;'; put 'put ''LEp2PW51bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT50aGlzLm9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZT0+dGhpcy5vblVwZGF0ZVNldHRpbmdzKGUpKSx0aGlzLmhv''@;'; put 'put ''dC5hZGRIb29rKCJiZWZvcmVJbml0IiwoKT0+dGhpcy5pbml0KCkpfWluaXQoKXt0aGlzLnBsdWdpbk5hbWU9dGhpcy5ob3QuZ2V0UGx1Z2luTmFtZSh0aGlzKSx0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKHRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5f''@;'; put 'put ''S0VZXSk7Y29uc3QgdD10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9ERVBTLGU9QXJyYXkuaXNBcnJheSh0KT90OltdO2lmKGUubGVuZ3RoPjApe2NvbnN0IGk9W107aWYoZS5mb3JFYWNoKGE9Pntjb25zdFtjLG1dPWEuc3BsaXQoIjoiKTtpZighVThlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''YFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHtjfSIgd2FzIGZvdW5kLmApO1U4ZS5nZXQoYykobSl8fGkucHVzaChgIC0gJHttfSAoJHtjfSlgKX0pLGkubGVuZ3RoPjApe2NvbnN0IGE9W2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdpbiByZXF1aXJlcyB0aGUgZm9sbG93''@;'; put 'put ''aW5nIG1vZHVsZXM6XG5gLGAke2kuam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO0FWLnB1c2goYSl9fWlmKEp2fHwoSnY9TEooKSksSnYuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpPj0wJiZKdi5zcGxpY2UoSnYuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpLDEpLHRoaXMuaG90LmFkZEhvb2tP''@;'; put 'put ''bmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9Pnt0aGlzLmlzRW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKX0pLDA9PT1Kdi5sZW5ndGgpe2lmKEFWLmxlbmd0aD4wKXtjb25zdCBpPVtgJHtBVi5qb2luKCJcbiIpfVxuYCwiWW91IGhhdmUgdG8g''@;'; put 'put ''aW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVhbGx5LiJdLmpvaW4oIiIpO3Rocm93IEFWLmxlbmd0aD0wLG5ldyBFcnJvcihpKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiKX10aGlzLmluaXRpYWxpemVkPSEwfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5h''@;'; put 'put ''YmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuZXZlbnRNYW5hZ2VyKXx8dm9pZCAwPT09dHx8dC5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX1nZXRTZXR0aW5nKHQpe3ZhciBlPXRoaXM7Y29uc3Qgcj10aGlzLmNvbnN0cnVjdG9y''@;'; put 'put ''LkRFRkFVTFRfU0VUVElOR1MsaT10aGlzLmNvbnN0cnVjdG9yLlNFVFRJTkdTX1ZBTElEQVRPUlM7aWYodm9pZCAwPT09dClyZXR1cm4gaG8oX3UoVnUsdGhpcykpP1dBKF91KFZ1LHRoaXMpLHIpOl91KFZ1LHRoaXMpO2xldCBhO2lmKChBcnJheS5pc0FycmF5KF91KFZ1LHRoaXMpKXx8aG8o''@;'; put 'put ''X3UoVnUsdGhpcykpKSYmcltXOGVdPT09dClpZihBcnJheS5pc0FycmF5KF91KFZ1LHRoaXMpKSlhPV91KFZ1LHRoaXMpO2Vsc2V7dmFyIGM7YT1udWxsIT09KGM9X3UoVnUsdGhpcylbdF0pJiZ2b2lkIDAhPT1jP2M6clt0XX1lbHNlIGlmKHQuaW5jbHVkZXMoIi4iKSl7Y29uc3QgbT1lTihf''@;'; put 'put ''dShWdSx0aGlzKSx0KSxDPWVOKHIsdCk7YT1obyhtKT9XQShtLEMpOnZvaWQgMCE9PW0/bTpDfWVsc2UgYT1obyhfdShWdSx0aGlzKSk/V0EoX3UoVnUsdGhpcykscilbdF06clt0XTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSYmaSYmIm9iamVjdCI9PXR5cGVvZiBpKXtjb25zdCBtPWlbdF07''@;'; put 'put ''aWYobSYmImZ1bmN0aW9uIj09dHlwZW9mIG0pcmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBDPWFyZ3VtZW50cy5sZW5ndGgsUD1uZXcgQXJyYXkoQyksWT0wO1k8QztZKyspUFtZXT1hcmd1bWVudHNbWV07Y29uc3QgSj1hKC4uLlApO2lmKCExIT09bShKKSlyZXR1cm4gSjt7Y29uc3QgZmU9''@;'; put 'put ''UC5tYXAoSGU9PiJzdHJpbmciPT10eXBlb2YgSGU/YCIke0hlfSJgOiIiKS5qb2luKCIsICIpO29zKGAke2UucGx1Z2luTmFtZX0gUGx1Z2luOiAiJHt0fSIgZnVuY3Rpb24gKCR7UC5sZW5ndGg+MD9mZToiIn0pIHJlc3VsdCAgICAgICAgICAgICAgICBpcyBub3QgdmFsaWQgYW5kIHdpbGwg''@;'; put 'put ''YmUgaWdub3JlZC5gKX19fXJldHVybiBhfXVwZGF0ZVBsdWdpblNldHRpbmdzKHQpe2NvbnN0IGU9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HU19WQUxJREFUT1JTO3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmIm9iamVjdCIhPXR5cGVvZiB0PyExPT09ZSh0KT92b2lkIG9zKGAk''@;'; put 'put ''e3RoaXMucGx1Z2luTmFtZX0gUGx1Z2luOiBvcHRpb24gaXMgbm90IHZhbGlkIGFuZCBpdCB3aWxsIGJlIGlnbm9yZWQuYCk6KFRWKFZ1LHRoaXMsdCksX3UoVnUsdGhpcykpOmUmJiJvYmplY3QiPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiB0PygobnVsbD09PV91KFZ1LHRoaXMpfHwi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIF91KFZ1LHRoaXMpKSYmVFYoVnUsdGhpcyx7Li4udGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX1NFVFRJTkdTfSksT2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57aWYoIShyIGluIHQpKXJldHVybjtjb25zdCBpPWVbcl07ITEhPT0oIWl8fGkodFtyXSkpP191KFZ1''@;'; put 'put ''LHRoaXMpW3JdPXRbcl06b3MoYCR7dGhpcy5wbHVnaW5OYW1lfSBQbHVnaW46ICIke3J9IiBvcHRpb24gaXMgbm90IHZhbGlkIGFuZCBpdCB3aWxsIGJlIGlnbm9yZWQuYCl9KSxfdShWdSx0aGlzKSk6KFRWKFZ1LHRoaXMsdCksdCl9YWRkSG9vayh0LGUscil7X3UoUXYsdGhpcylbdF09X3Uo''@;'; put 'put ''UXYsdGhpcylbdF18fFtdO2NvbnN0IGk9X3UoUXYsdGhpcylbdF07dGhpcy5ob3QuYWRkSG9vayh0LGUsciksaS5wdXNoKGUpLF91KFF2LHRoaXMpW3RdPWl9cmVtb3ZlSG9va3ModCl7WW4oX3UoUXYsdGhpcylbdF18fFtdLGU9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKHQsZSl9KX1jbGVhckhv''@;'; put 'put ''b2tzKCl7Y29uc3QgdD1fdShRdix0aGlzKTthcyh0LChlLHIpPT50aGlzLnJlbW92ZUhvb2tzKHIpKSx0Lmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeSh0KXt0aGlzLmlzUGx1Z2luc1JlYWR5P3QoKTp0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5wdXNoKHQpfW9uQWZ0ZXJQ''@;'; put 'put ''bHVnaW5zSW5pdGlhbGl6ZWQoKXtZbih0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyx0PT50KCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVhZHk9ITB9b25VcGRhdGVTZXR0aW5ncyh0KXtjb25zdCBlPWRuZShaOGUs''@;'; put 'put ''dGhpcyxMZnQpLmNhbGwodGhpcyx0KTt0aGlzLmlzRW5hYmxlZCYmKHRoaXMuZW5hYmxlZCYmIXRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZGlzYWJsZVBsdWdpbigpLCF0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmFibGVkJiZ0aGlz''@;'; put 'put ''LmlzRW5hYmxlZCgpJiZlJiYodGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyh0W3RoaXMuY29uc3RydWN0b3IuUExVR0lOX0tFWV0pLHRoaXMudXBkYXRlUGx1Z2luKHQpKSl9dXBkYXRlUGx1Z2luKCl7fWRlc3Ryb3koKXt2YXIgdDtUVihWdSx0aGlzLG51bGwpLG51bGw9PT0odD10aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlcil8fHZvaWQgMD09PXR8fHQuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpLGFzKHRoaXMsKGUscik9PnsiaG90IiE9PXImJih0aGlzW3JdPW51bGwpfSksZGVsZXRlIHRoaXMudCxkZWxldGUgdGhpcy5ob3R9fWZ1bmN0aW9uIExmdChuKXtpZighbilyZXR1cm4hMTtjb25z''@;'; put 'put ''dCB0PXRoaXMuY29uc3RydWN0b3IuU0VUVElOR19LRVlTO2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIHQ7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodm9pZCAwIT09blt0W2VdXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rp''@;'; put 'put ''b24gT2Z0KG4pe3ZhciB0PWZ1bmN0aW9uIFBmdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJl''@;'; put 'put ''dHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4g''@;'; put 'put ''bj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgaG5lPWNsYXNzIEZmdHtjb25zdHJ1Y3Rvcih0KXtleSh0aGlzLCJob3QiLG51bGwpLGV5KHRoaXMsImNvbnRhaW5lciIs''@;'; put 'put ''bnVsbCksZXkodGhpcywiaW5qZWN0ZWQiLCExKSxleSh0aGlzLCJyb3dzIixbXSksZXkodGhpcywiY29sdW1ucyIsW10pLGV5KHRoaXMsInNhbXBsZXMiLG51bGwpLGV5KHRoaXMsInNldHRpbmdzIix7dXNlSGVhZGVyczohMH0pLHRoaXMuaG90PXR9YWRkUm93KHQsZSl7aWYodGhpcy5jb2x1''@;'; put 'put ''bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBy''@;'; put 'put ''PXtyb3c6dH07dGhpcy5yb3dzLnB1c2gociksdGhpcy5zYW1wbGVzPWUsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCh0KSksdGhpcy50YWJs''@;'; put 'put ''ZS50ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyh0KSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLHIudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFkZXJzUm93KHQpe2lmKG51bGwhPXRoaXMuaG90LmdldENv''@;'; put 'put ''bEhlYWRlcigwKSl7Y29uc3Qgcj17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChyKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz10LHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhv''@;'; put 'put ''dC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQp''@;'; put 'put ''LHIudGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRkQ29sdW1uKHQsZSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNy''@;'; put 'put ''ZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCByPXtjb2w6dH07dGhpcy5jb2x1bW5zLnB1c2gociksdGhpcy5zYW1wbGVzPWUsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIodCkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKHQsdGhpcy50YWJsZS50aCx2b2lkIDAsLTEpLHRoaXMudGFibGUudEJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2wodCkpLHRoaXMuY29u''@;'; put 'put ''dGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxyLnRhYmxlPXRoaXMudGFibGUudGFibGV9Z2V0SGVpZ2h0cyh0KXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksWW4odGhpcy5yb3dzLGU9Pntjb25zdHtoZWlnaHQ6cn09ZS50YWJsZS5n''@;'; put 'put ''ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0KGUucm93LE1hdGguY2VpbChyKSl9KX1nZXRXaWR0aHModCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLFluKHRoaXMuY29sdW1ucyxlPT57Y29uc3R7d2lkdGg6cn09ZS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0KGUu''@;'; put 'put ''Y29sLE1hdGguY2VpbChyKSl9KX1zZXRTZXR0aW5ncyh0KXt0aGlzLnNldHRpbmdzPXR9c2V0U2V0dGluZyh0LGUpe3RoaXMuc2V0dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW3RdPWV9Z2V0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5n''@;'; put 'put ''KHQpe3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMuc2V0dGluZ3NbdF06bnVsbH1jcmVhdGVDb2xHcm91cHNDb2wodCl7Y29uc3QgZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmUuYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KC0xLC0xKSksdGhpcy5zYW1wbGVzLmZvckVhY2gocj0+e1luKHIuc3RyaW5ncyxpPT57ZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoaS5jb2wsdCkpfSl9KSxlfWNyZWF0ZVJvdyh0KXtjb25zdHtyb290RG9jdW1lbnQ6ZX09''@;'; put 'put ''dGhpcy5ob3Qscj1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpPWUuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIodCxpKSxyLmFwcGVuZENoaWxkKGkpKSx0aGlzLnNhbXBsZXMuZm9y''@;'; put 'put ''RWFjaChhPT57WW4oYS5zdHJpbmdzLGM9Pntjb25zdCBtPWMuY29sLEM9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodCxtKSxQPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihDKSxZPWUuY3JlYXRlRWxlbWVudCgidGQiKTtZLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLFAodGhpcy5ob3Qs''@;'; put 'put ''WSx0LG0sdGhpcy5ob3QuY29sVG9Qcm9wKG0pLGMudmFsdWUsQyksci5hcHBlbmRDaGlsZChZKX0pfSkscn1hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3R7cm9vdERvY3VtZW50OnR9PXRoaXMuaG90LGU9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscj1bXTtpZih0aGlzLmhvdC5o''@;'; put 'put ''YXNSb3dIZWFkZXJzKCkpe2NvbnN0IGk9dC5jcmVhdGVFbGVtZW50KCJ0aCIpO3IucHVzaChbLTEsaV0pLGUuYXBwZW5kQ2hpbGQoaSl9dGhpcy5zYW1wbGVzLmZvckVhY2goaT0+e1luKGkuc3RyaW5ncyxhPT57Y29uc3QgYz1hLmNvbCxtPXQuY3JlYXRlRWxlbWVudCgidGgiKTtyLnB1c2go''@;'; put 'put ''W2MsbV0pLGUuYXBwZW5kQ2hpbGQobSl9KX0pLHRoaXMudGFibGUudEhlYWQuYXBwZW5kQ2hpbGQoZSksWW4ocixpPT57Y29uc3RbYSxjXT1pO3RoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGEsYyl9KX1jcmVhdGVDb2wodCl7Y29uc3R7cm9vdERvY3VtZW50OmV9PXRoaXMuaG90LHI9''@;'; put 'put ''ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5mb3JFYWNoKGk9PntZbihpLnN0cmluZ3MsYT0+e2NvbnN0IGM9YS5yb3csbT10aGlzLmhvdC5nZXRDZWxsTWV0YShjLHQpLEM9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKG0pLFA9ZS5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJ0ZCIpLFk9ZS5jcmVhdGVFbGVtZW50KCJ0ciIpO1Auc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksQyh0aGlzLmhvdCxQLGMsdCx0aGlzLmhvdC5jb2xUb1Byb3AodCksYS52YWx1ZSxtKSxZLmFwcGVuZENoaWxkKFApLHIuYXBwZW5kQ2hpbGQoWSl9KX0pLHJ9Y2xlYW4oKXt0aGlz''@;'; put 'put ''LnJvd3MubGVuZ3RoPTAsdGhpcy5yb3dzWy0xXT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5yZW1vdmVUYWJsZSgpfWluamVjdFRhYmxlKCl7dGhpcy5pbmplY3RlZHx8KCgoYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQpLHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYm''@;'; put 'put ''dGhpcy5jb250YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVu''@;'; put 'put ''dCh0LGUpe2NvbnN0IHI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpO2xldCBpPTA7ZT49MCYmdD49MCYmKGk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZSx0KS5jb2xzcGFuKTtsZXQgYT10aGlzLmhvdC5nZXRDb2xXaWR0aCh0KTtpZihpPjEpZm9yKGxldCBjPXQr''@;'; put 'put ''MTtjPHQraTtjKyspYSs9dGhpcy5ob3QuZ2V0Q29sV2lkdGgoYyk7cmV0dXJuIHIuc3R5bGUud2lkdGg9YCR7YX1weGAscn1jcmVhdGVUYWJsZSgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1l''@;'; put 'put ''bnQ6ZX09dGhpcy5ob3Qscj1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpPWUuY3JlYXRlRWxlbWVudCgidGFibGUiKSxhPWUuY3JlYXRlRWxlbWVudCgidGhlYWQiKSxjPWUuY3JlYXRlRWxlbWVudCgidGJvZHkiKSxtPWUuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSxDPWUuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgidHIiKSxQPWUuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJmkuYXBwZW5kQ2hpbGQobSksdGhpcy5pc0hvcml6b250YWwoKSYmKEMuYXBwZW5kQ2hpbGQoUCksYS5hcHBlbmRDaGlsZChDKSxpLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixp''@;'; put 'put ''LnN0eWxlLndpZHRoPSJhdXRvIiksaS5hcHBlbmRDaGlsZChhKSx0aGlzLmlzVmVydGljYWwoKSYmYy5hcHBlbmRDaGlsZChDKSxpLmFwcGVuZENoaWxkKGMpLHRpKGksdCksci5hcHBlbmRDaGlsZChpKSx7ZnJhZ21lbnQ6cix0YWJsZTppLHRIZWFkOmEsdEJvZHk6Yyxjb2xHcm91cDptLHRy''@;'; put 'put ''OkMsdGg6UH19Y3JlYXRlQ29udGFpbmVyKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDplfT10aGlzLmhvdCxyPWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9ZS5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KCJkaXYiKTtyZXR1cm4gdGkoaSxgaHRHaG9zdFRhYmxlIGh0QXV0b1NpemUgJHt0LnRyaW0oKX1gKSxyLmFwcGVuZENoaWxkKGkpLHtmcmFnbWVudDpyLGNvbnRhaW5lcjppfX1pc1ZlcnRpY2FsKCl7cmV0dXJuISghdGhpcy5yb3dzLmxlbmd0aHx8dGhpcy5jb2x1bW5zLmxlbmd0aCl9''@;'; put 'put ''aXNIb3Jpem9udGFsKCl7cmV0dXJuISghdGhpcy5jb2x1bW5zLmxlbmd0aHx8dGhpcy5yb3dzLmxlbmd0aCl9fTtmdW5jdGlvbiBOayhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gSGZ0KG4pe3ZhciB0PWZ1bmN0aW9uIE5mdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJu''@;'; put 'put ''IG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgZm5le3N0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCl7cmV0dXJuIDN9Y29uc3RydWN0b3IodCl7TmsodGhpcywic2FtcGxlcyIsbnVsbCksTmsodGhpcywiZGF0YUZhY3RvcnkiLG51bGwpLE5rKHRoaXMsImN1c3RvbVNhbXBsZUNvdW50Iixu''@;'; put 'put ''dWxsKSxOayh0aGlzLCJhbGxvd0R1cGxpY2F0ZXMiLCExKSxOayh0aGlzLCJpbmNsdWRlSGlkZGVuIiwhMSksdGhpcy5kYXRhRmFjdG9yeT10fWdldFNhbXBsZUNvdW50KCl7cmV0dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/dGhpcy5jdXN0b21TYW1wbGVDb3VudDpmbmUuU0FNUExFX0NP''@;'; put 'put ''VU5UfXNldFNhbXBsZUNvdW50KHQpe3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ9dH1zZXRBbGxvd0R1cGxpY2F0ZXModCl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9dH1zZXRJbmNsdWRlSGlkZGVuKHQpe3RoaXMuaW5jbHVkZUhpZGRlbj10fWdlbmVyYXRlUm93U2FtcGxlcyh0LGUpe3JldHVybiB0''@;'; put 'put ''aGlzLmdlbmVyYXRlU2FtcGxlcygicm93IixlLHQpfWdlbmVyYXRlQ29sdW1uU2FtcGxlcyh0LGUpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixlLHQpfWdlbmVyYXRlU2FtcGxlcyh0LGUscil7Y29uc3QgaT1uZXcgTWFwLHtmcm9tOmEsdG86Y309Im51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiByP3tmcm9tOnIsdG86cn06cjtyZXR1cm4gZW8oYSxjLG09Pntjb25zdCBDPXRoaXMuZ2VuZXJhdGVTYW1wbGUodCxlLG0pO2kuc2V0KG0sQyl9KSxpfWdlbmVyYXRlU2FtcGxlKHQsZSxyKXtpZigicm93IiE9PXQmJiJjb2wiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNh''@;'; put 'put ''bXBsZSB0eXBlIik7Y29uc3QgaT1uZXcgTWFwLGE9InJvdyI9PT10PyJjb2wiOiJyb3ciLGM9W107cmV0dXJuIGVvKGUuZnJvbSxlLnRvLG09Pntjb25zdCBDPSJyb3ciPT09dD90aGlzLmRhdGFGYWN0b3J5KHIsbSx0aGlzKTp0aGlzLmRhdGFGYWN0b3J5KG0scix0aGlzKTtpZighMT09PUMp''@;'; put 'put ''cmV0dXJuO2NvbnN0e3ZhbHVlOlAsYnVuZGxlU2VlZDpZfT1DLEo9InN0cmluZyI9PXR5cGVvZiBZJiZZLmxlbmd0aD4wO2xldCBjZTtjZT1KP1k6aG8oUCk/YCR7T2JqZWN0LmtleXMoUCkubGVuZ3RofWA6QXJyYXkuaXNBcnJheShQKT9gJHtQLmxlbmd0aH1gOmAke3FsKFApLmxlbmd0aH1g''@;'; put 'put ''LGkuaGFzKGNlKXx8aS5zZXQoY2Use25lZWRlZDp0aGlzLmdldFNhbXBsZUNvdW50KCksc3RyaW5nczpbXX0pO2NvbnN0IGZlPWkuZ2V0KGNlKTtmZS5uZWVkZWQmJighKGMuaW5kZXhPZihQKT4tMSl8fHRoaXMuYWxsb3dEdXBsaWNhdGVzfHxKKSYmKGZlLnN0cmluZ3MucHVzaCh7dmFsdWU6''@;'; put 'put ''UCxbYV06bX0pLGMucHVzaChQKSxmZS5uZWVkZWQtPTEpfSksaX19Y29uc3QgWThlPWZuZTtmdW5jdGlvbiBwbmUobix0LGUpe0c4ZShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gRzhlKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBWayhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gQmZ0KG4pe3ZhciB0PWZ1bmN0aW9uIGpmdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1l''@;'; put 'put ''LG59ZnVuY3Rpb24gZzgobix0KXtyZXR1cm4gbi5nZXQoUGgobix0KSl9ZnVuY3Rpb24ga1Yobix0LGUpe3JldHVybiBuLnNldChQaChuLHQpLGUpLGV9ZnVuY3Rpb24gUGgobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtjb25zdCBnbmU9ImF1dG9Db2x1bW5TaXplIjt2YXIg''@;'; put 'put ''bW5lPW5ldyBXZWFrTWFwLFpDPW5ldyBXZWFrTWFwLFlDPW5ldyBXZWFrTWFwLEgyPW5ldyBXZWFrU2V0O2NsYXNzIEJrIGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGduZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0''@;'; put 'put ''IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEwLHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0''@;'; put 'put ''aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IodCl7c3VwZXIodCksZnVuY3Rpb24gVmZ0KG4sdCl7RzhlKG4sdCksdC5hZGQobil9KHRoaXMsSDIpLFZrKHRoaXMsImdob3N0VGFibGUiLG5ldyBobmUodGhpcy5ob3QpKSxWayh0aGlzLCJzYW1w''@;'; put 'put ''bGVzR2VuZXJhdG9yIixuZXcgWThlKChlLHIpPT57Y29uc3QgaT10aGlzLmhvdC50b1BoeXNpY2FsUm93KGUpLGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihyKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihpKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNI''@;'; put 'put ''aWRkZW4oYSkpcmV0dXJuITE7Y29uc3QgYz10aGlzLmhvdC5nZXRDZWxsTWV0YShlLHIpO2xldCBtPSIiO2Muc3Bhbm5lZHx8KG09dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChlLHIpKTtsZXQgQz0iIjtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIikm''@;'; put 'put ''JihDPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLEMsYyxtKSkse3ZhbHVlOm0sYnVuZGxlU2VlZDpDfX0pKSxWayh0aGlzLCJpblByb2dyZXNzIiwhMSksVmsodGhpcywibWVhc3VyZWRDb2x1bW5zIiwwKSxWayh0aGlzLCJjb2x1bW5XaWR0aHNNYXAiLG5l''@;'; put 'put ''dyBzOCkscG5lKHRoaXMsbW5lLCExKSxwbmUodGhpcyxaQyxbXSkscG5lKHRoaXMsWUMsW10pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIsdGhpcy5jb2x1bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXpl''@;'; put 'put ''IiwoZSxyLGkpPT5QaChIMix0aGlzLFg4ZSkuY2FsbCh0aGlzLGUscixpKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2duZV0mJiF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmNvbFdpZHRoc31lbmFibGVQbHVnaW4oKXt2YXIgdD10aGlzO2lmKHRoaXMu''@;'; put 'put ''ZW5hYmxlZClyZXR1cm47dGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhlYWRlcnMiLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpKSx0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVz''@;'; put 'put ''IikpO2NvbnN0IGU9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7ZSYmIWlzTmFOKGUpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoZSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gUGgoSDIsdCxZZnQpLmNhbGwodCwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBQaChIMix0LEdmdCkuY2FsbCh0LC4uLmkpfSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3''@;'; put 'put ''IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBQaChIMix0LEtmdCkuY2FsbCh0LC4uLmkpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT5QaChIMix0aGlzLFpmdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIs''@;'; put 'put ''KHIsaSk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaSxyKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+UGgoSDIsdGhpcywkZnQpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2tWKFlDLHRoaXMsdGhpcy5maW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hh''@;'; put 'put ''bmdlZCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwodCxlLHIpPT5QaChIMix0aGlzLFg4ZSkuY2FsbCh0aGlzLHQsZSxyKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVt''@;'; put 'put ''bnNXaWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgdD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLGU9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xIT09dCYmLTEhPT1lJiZ0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTp0LHRvOmV9''@;'; put 'put ''LHZvaWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZUNvbHVtbnNXaWR0aCgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGU9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0scj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGk9Im51bWJlciI9PXR5cGVvZiB0''@;'; put 'put ''P3tmcm9tOnQsdG86dH06dCxhPSJudW1iZXIiPT10eXBlb2YgZT97ZnJvbTplLHRvOmV9OmU7ZW8oaS5mcm9tLGkudG8sYz0+e2xldCBtPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYyk7bnVsbD09PW0mJihtPWMpLChyfHxudWxsPT09dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KG0pJiYhdGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKG0pKSYmUGgoSDIsdGhpcywkOGUpLmNhbGwodGhpcyxjLGEpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoUGgoSDIsdGhpcyxLOGUpLmNhbGwodGhpcyksdGhpcy5tZWFzdXJlZENvbHVtbnM9''@;'; put 'put ''aS50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxlPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj0wO2NvbnN0IGk9dGhpcy5ob3QuY291bnRDb2xzKCktMTtsZXQgYT1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCBjPSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBZQShhKSx2b2lkKHRoaXMuaW5Q''@;'; put 'put ''cm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206cix0bzpNYXRoLm1pbihyK0JrLkNBTENVTEFUSU9OX1NURVAsaSl9LHQsZSkscj1yK0JrLkNBTENVTEFUSU9OX1NURVArMSxyPGk/YT1aQShjKTooWUEoYSksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZp''@;'; put 'put ''ZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxtPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTttPj0wJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzptfSx0LGUpLHI9bSsxKSxyPGk/YygpOnRoaXMuaW5Qcm9ncmVzcz0hMX1yZWNhbGN1bGF0ZUFsbENvbHVt''@;'; put 'put ''bnNXaWR0aCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2du''@;'; put 'put ''ZV07bGV0IGU9QmsuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCByPXRoaXMuaG90LmNvdW50Q29scygpLTE7cmV0dXJuIGhvKHQpJiYoZT10LnN5bmNMaW1pdCxYcShlKT9lPWtKKHIsZSk6ZT4+PTApLE1hdGgubWluKGUscil9Z2V0Q29sdW1uV2lkdGgodCxlKXtsZXQgcj0hKGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLGk9ZTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCkpLHImJiJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''aSYmKGk9TWF0aC5tYXgoaSw1MCkpKSxpfWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PXQ/dDotMX1nZXRMYXN0VmlzaWJsZUNvbHVtbigpe3ZhciB0O3JldHVy''@;'; put 'put ''biBudWxsIT09KHQ9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSYmdm9pZCAwIT09dD90Oi0xfWZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaG90LmdldENvbEhlYWRlcigpLnJlZHVjZSgocixpLGEpPT57Y29uc3QgYz1nOCha''@;'; put 'put ''Qyx0aGlzKS5sZW5ndGg7cmV0dXJuKGMtMTxhfHxnOChaQyx0aGlzKVthXSE9PWkpJiZyLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSkpLGMtMTxhP2c4KFpDLHRoaXMpLnB1c2goaSk6ZzgoWkMsdGhpcylbYV09aSxyfSxbXSl9Y2xlYXJDYWNoZSh0KXtBcnJheS5pc0FycmF5KHQp''@;'; put 'put ''P3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dC5mb3JFYWNoKGU9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZSxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIoKX1pc05lZWRSZWNhbGN1bGF0ZSgpe3JldHVybiEhdGhpcy5jb2x1bW5X''@;'; put 'put ''aWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucykuZmlsdGVyKHQ9Pm51bGw9PT10KS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gV2Z0KG4pe2NvbnN0IHQ9e2Zyb206MCx0bzp0''@;'; put 'put ''aGlzLmhvdC5jb3VudFJvd3MoKS0xfTtuLmZvckVhY2goZT0+e2NvbnN0IHI9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKTtudWxsIT09ciYmKHRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhyKXx8UGgoSDIsdGhpcywkOGUpLmNhbGwodGhpcyxlLHQpKX0pLHRoaXMuZ2hv''@;'; put 'put ''c3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKFBoKEgyLHRoaXMsSzhlKS5jYWxsKHRoaXMpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiAkOGUobix0KXt0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKG4sdCkuZm9yRWFjaCgocixpKT0+dGhpcy5n''@;'; put 'put ''aG9zdFRhYmxlLmFkZENvbHVtbihpLHIpKX1mdW5jdGlvbiBLOGUoKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKG4sdCk9Pntjb25zdCBlPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obik7dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KGUsdCl9KX0sITApfWZ1bmN0aW9uIFpmdCgpe3RoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpLHRoaXMuaW5Qcm9ncmVzc3x8KFBoKEgyLHRoaXMsV2Z0KS5jYWxsKHRoaXMsZzgoWUMsdGhpcykpLGtWKFlDLHRoaXMsW10pKX1mdW5jdGlvbiBZZnQobix0''@;'; put 'put ''KXt0fHx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9ZnVuY3Rpb24gR2Z0KG4pe2NvbnN0IHQ9bi5yZWR1Y2UoKGUscik9PntsZXRbLGldPXI7Y29uc3QgYT10aGlzLmhvdC5wcm9wVG9Db2woaSk7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJi0xPT09ZS5pbmRleE9mKGEp''@;'; put 'put ''JiZlLnB1c2goYSksZX0sW10pO2c4KFlDLHRoaXMpLnB1c2goLi4udCl9ZnVuY3Rpb24gWDhlKG4sdCxlKXtsZXQgcj1uO3JldHVybiBlJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgodCx2b2lkIDAsITApLHI9dGhpcy5nZXRDb2x1bW5XaWR0aCh0LHZvaWQgMCwhMSkpLHJ9ZnVuY3Rp''@;'; put 'put ''b24gJGZ0KCl7a1YoWkMsdGhpcyx0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKSksdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpLGtWKG1uZSx0aGlzLCEwKX1mdW5jdGlvbiBLZnQobil7aWYoIWc4KG1uZSx0aGlzKSlyZXR1cm47Y29uc3QgdD1uLnJlZHVjZSgoZSxyKT0+e3ZhciBp''@;'; put 'put ''O2NvbnN0IGE9bnVsbD09PShpPXIuYWRkcmVzcyl8fHZvaWQgMD09PWk/dm9pZCAwOmkuY29sO2lmKE51bWJlci5pc0ludGVnZXIoYSkpe2NvbnN0IGM9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7LTE9PT1lLmluZGV4T2YoYykmJmUucHVzaChjKX1yZXR1cm4gZX0sW10pO2c4KFlDLHRo''@;'; put 'put ''aXMpLnB1c2goLi4udCl9Y29uc3QgdHk9e2hvcml6b250YWw6Imhvcml6b250YWwiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9O2Z1bmN0aW9uIEdDKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBlM3Qobil7dmFyIHQ9ZnVuY3Rpb24gdDN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbily''@;'; put 'put ''ZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p''@;'; put 'put ''dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFi''@;'; put 'put ''bGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiAkQyhuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVz''@;'; put 'put ''ZW50IG9uIHRoaXMgb2JqZWN0Iil9RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRvZmlsbCIpO2NvbnN0''@;'; put 'put ''IHIzdD1bImZpbGxIYW5kbGUiXTt2YXIgbnk9bmV3IFdlYWtTZXQ7Y2xhc3MgbzN0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEpmdChuLHQpeyhmdW5jdGlvbiBRZnQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LmFkZChuKX0odGhpcyxueSksR0ModGhpcywiYWRkaW5nU3RhcnRlZCIsITEpLEdDKHRoaXMsIm1vdXNlRG93bk9uQ2VsbENvcm5lciIsITEpLEdDKHRoaXMsIm1v''@;'; put 'put ''dXNlRHJhZ091dHNpZGUiLCExKSxHQyh0aGlzLCJoYW5kbGVEcmFnZ2VkQ2VsbHMiLDApLEdDKHRoaXMsImRpcmVjdGlvbnMiLFtdKSxHQyh0aGlzLCJhdXRvSW5zZXJ0Um93IiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImF1dG9maWxsIn1zdGF0aWMgZ2V0IFBMVUdJTl9Q''@;'; put 'put ''UklPUklUWSgpe3JldHVybiAyMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblsiYXV0b2ZpbGwiLC4uLnIzdF19aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLm1hcFNl''@;'; put 'put ''dHRpbmdzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLHQ9PiRDKG55LHRoaXMsYzN0KS5jYWxsKHRoaXMsdCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsdD0+JEMobnksdGhpcyxsM3Qp''@;'; put 'put ''LmNhbGwodGhpcyx0KSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCh0LGUpPT4kQyhueSx0aGlzLHUzdCkuY2FsbCh0aGlzLGUpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4o''@;'; put 'put ''KSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFNlbGVjdGlvbkRhdGEoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRz''@;'; put 'put ''WzBdO2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7cm93OnIsY29sOml9PWUuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmEsY29sOmN9PWUuZ2V0Qm90dG9tRW5kQ29ybmVyKCksbT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsW3tzdGFy''@;'; put 'put ''dFJvdzpyLHN0YXJ0Q29sOmksZW5kUm93OmEsZW5kQ29sOmN9XSksQz1bXSxQPVtdLFk9W107cmV0dXJuIFluKG0sSj0+e2ZvcihsZXQgY2U9Si5zdGFydFJvdztjZTw9Si5lbmRSb3c7Y2UrPTEpLTE9PT1DLmluZGV4T2YoY2UpJiZDLnB1c2goY2UpO2ZvcihsZXQgY2U9Si5zdGFydENvbDtj''@;'; put 'put ''ZTw9Si5lbmRDb2w7Y2UrPTEpLTE9PT1QLmluZGV4T2YoY2UpJiZQLnB1c2goY2UpfSksWW4oQyxKPT57Y29uc3QgY2U9W107WW4oUCxmZT0+e2NvbnN0IEFlPXQ/dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChKLGZlKTpudWxsO3QmJmhvKEFlKT9jZS5wdXNoKHRoaXMuaG90LmdldENv''@;'; put 'put ''cHlhYmxlU291cmNlRGF0YShKLGZlKSk6Y2UucHVzaCh0aGlzLmhvdC5nZXRDb3B5YWJsZURhdGEoSixmZSkpfSksWS5wdXNoKGNlKX0pLFl9ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0W3QsZSxyLGld''@;'; put 'put ''PXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYz1hLmdldFRvcFN0YXJ0Q29ybmVyKCksbT1hLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmVzZXRTZWxlY3Rpb25PZkRy''@;'; put 'put ''YWdnZWRBcmVhKCk7Y29uc3QgQz1bYy5yb3csYy5jb2wsbS5yb3csbS5jb2xdLFA9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9maWxsUmFuZ2UiLFtNYXRoLm1pbihjLnJvdyx0KSxNYXRoLm1pbihjLmNvbCxlKSxNYXRoLm1heChtLnJvdyxyKSxNYXRoLm1heChtLmNvbCxpKV0sQyks''@;'; put 'put ''e2RpcmVjdGlvbk9mRHJhZzpZLHN0YXJ0T2ZEcmFnQ29vcmRzOkosZW5kT2ZEcmFnQ29vcmRzOmNlfT1mdW5jdGlvbiBYZnQobix0LGUpe2xldCByLGksYTtyZXR1cm4gdFswXT09PW5bMF0mJnRbMV08blsxXT8oYT0ibGVmdCIscj1lKHRbMF0sdFsxXSksaT1lKHRbMl0sblsxXS0xKSk6dFsy''@;'; put 'put ''XT09PW5bMl0mJnRbMF09PT1uWzBdJiZ0WzNdPm5bM10/KGE9InJpZ2h0IixyPWUodFswXSxuWzNdKzEpLGk9ZSh0WzJdLHRbM10pKTp0WzBdPG5bMF0mJnRbMV09PT1uWzFdPyhhPSJ1cCIscj1lKHRbMF0sdFsxXSksaT1lKG5bMF0tMSx0WzNdKSk6dFsyXT5uWzJdJiZ0WzFdPT09blsxXSYm''@;'; put 'put ''KGE9ImRvd24iLHI9ZShuWzJdKzEsdFsxXSksaT1lKHRbMl0sdFszXSkpLHImJnIubm9ybWFsaXplKCksaSYmaS5ub3JtYWxpemUoKSx7ZGlyZWN0aW9uT2ZEcmFnOmEsc3RhcnRPZkRyYWdDb29yZHM6cixlbmRPZkRyYWdDb29yZHM6aX19KEMsUCwoZmUsQWUpPT50aGlzLmhvdC5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhmZSxBZSkpO2lmKEomJkoucm93Pi0xJiZKLmNvbD4tMSl7Y29uc3QgZmU9dGhpcy5nZXRTZWxlY3Rpb25EYXRhKCksQWU9dGhpcy5nZXRTZWxlY3Rpb25EYXRhKCEwKSxIZT1hLmNsb25lKCksWGU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShKLEosY2UpLHJ0PXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJiZWZvcmVBdXRvZmlsbCIsZmUsSGUsWGUsWSk7aWYoITE9PT1ydClyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKSx0aGlzLmhvdC5yZW5kZXIoKSwhMTtsZXQgZHQ9cnQ7Y29uc3QganQ9cnQ7aWYoWyJ1cCIsImxlZnQi''@;'; put 'put ''XS5pbmRleE9mKFkpPi0xJiYoMSE9PWp0Lmxlbmd0aHx8MCE9PWp0WzBdLmxlbmd0aCkpaWYoZHQ9W10sInVwIj09PVkpe2NvbnN0IEZ0PWNlLnJvdy1KLnJvdysxLHBuPUZ0JWp0Lmxlbmd0aDtmb3IobGV0IG9uPTA7b248RnQ7b24rKylkdC5wdXNoKGp0WyhvbisoanQubGVuZ3RoLXBuKSkl''@;'; put 'put ''anQubGVuZ3RoXSl9ZWxzZXtjb25zdCBGdD1jZS5jb2wtSi5jb2wrMSxwbj1GdCVqdFswXS5sZW5ndGg7Zm9yKGxldCBvbj0wO29uPGp0Lmxlbmd0aDtvbisrKXtkdC5wdXNoKFtdKTtmb3IobGV0IGduPTA7Z248RnQ7Z24rKylkdFtvbl0ucHVzaChqdFtvbl1bKGduKyhqdFtvbl0ubGVuZ3Ro''@;'; put 'put ''LXBuKSklanRbb25dLmxlbmd0aF0pfX1pZihBZS5zb21lKEZ0PT5GdC5zb21lKHBuPT5obyhwbikpKSl7Y29uc3QgRnQ9JEMobnksdGhpcyxzM3QpLmNhbGwodGhpcyxkdCxBZSxKLGNlLFkpO0Z0Lmxlbmd0aCYmKGR0PUZ0KX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShKLnJvdyxKLmNv''@;'; put 'put ''bCxkdCxjZS5yb3csY2UuY29sLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24oUCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQXV0b2ZpbGwiLGR0LEhlLFhlLFkpLHRoaXMuaG90LnJlbmRlcigpfWVsc2UgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTty''@;'; put 'put ''ZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQodCl7cmV0dXJuIHQucm93PDAmJih0LnJvdz0wKSx0LmNvbDwwJiYodC5jb2w9MCksdH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyh0KXtjb25zdCBlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkscj1lLmdl''@;'; put 'put ''dEJvdHRvbUVuZENvcm5lcigpO2xldCBpPXQ7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKHR5LnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKHR5Lmhvcml6b250YWwpKXtjb25zdCBhPWUuZ2V0VG9wU3RhcnRDb3JuZXIoKTsoci5jb2w8PXQuY29sfHxhLmNvbD49dC5j''@;'; put 'put ''b2wpJiYoaT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhyLnJvdyx0LmNvbCkpLChyLnJvdzx0LnJvd3x8YS5yb3c+dC5yb3cpJiYoaT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0LnJvdyxyLmNvbCkpfWVsc2UgaWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKHR5LnZlcnRpY2Fs''@;'; put 'put ''KSlpPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQucm93LHIuY29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXModHkuaG9yaXpvbnRhbCkpcmV0dXJuO2k9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoci5yb3csdC5jb2wpfXJldHVybiB0aGlzLnJlZHVjZVNlbGVj''@;'; put 'put ''dGlvbkFyZWFJZk5lZWRlZChpKX1zaG93Qm9yZGVyKHQpe2NvbnN0IGU9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyh0KTtlJiZ0aGlzLnJlZHJhd0JvcmRlcnMoZSl9YWRkUm93KCl7dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNl''@;'; put 'put ''cnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRk''@;'; put 'put ''aW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCB0PXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGU9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLHI9dGhpcy5ob3QuY291bnRSb3dzKCk7dFsyXTxyLTEmJmVbMl09''@;'; put 'put ''PT1yLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRSb3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyh0KXtjb25zdCBlPXRoaXMuaG90LmdldERhdGEoKSxyPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBpO2ZvcihsZXQgYT10WzJdKzE7YTxyO2ErKyl7''@;'; put 'put ''Zm9yKGxldCBDPXRbMV07Qzw9dFszXTtDKyspaWYoIUdjKGVbYV1bQ10pKXJldHVybi0xO2NvbnN0IG09ZVthXVt0WzNdKzFdOyghR2MoZVthXVt0WzFdLTFdKXx8IUdjKG0pKSYmKGk9YSl9cmV0dXJuIGl9YWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleCh0LGUp''@;'; put 'put ''e3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHRbMF0sdFsxXSkpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhlLHRbM10pKS5jb21taXQoKX1zZXRTZWxlY3Rpb24odCl7dGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0Q2VsbCguLi5Xcyh0LGU9Pk1hdGgubWF4KGUsMCkpLCExLCExKX1zZWxlY3RBZGphY2VudCgpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksZT10aGlzLmdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyh0KTtyZXR1cm4tMSE9PWUmJnZvaWQgMCE9PWUm''@;'; put 'put ''Jih0aGlzLmFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgodCxlKSwhMCl9cmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpfXJl''@;'; put 'put ''ZHJhd0JvcmRlcnModCl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mcm9tKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS50bykuYWRkKHQpLmNvbW1pdCgpLHRoaXMu''@;'; put 'put ''aG90LnZpZXcucmVuZGVyKCl9Z2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKHQpe2NvbnN0e2RvY3VtZW50RWxlbWVudDplfT10aGlzLmhvdC5yb290RG9jdW1lbnQscj1FMSh0aGlzLmhvdC50YWJsZSkudG9wLSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0fHxlLnNjcm9sbFRv''@;'; put 'put ''cCkrSHUodGhpcy5ob3QudGFibGUpLGk9RTEodGhpcy5ob3QudGFibGUpLmxlZnQtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXR8fGUuc2Nyb2xsTGVmdCkrcHUodGhpcy5ob3QudGFibGUpO3JldHVybiB0LmNsaWVudFk+ciYmdC5jbGllbnRYPD1pfXJlZ2lzdGVyRXZlbnRzKCl7''@;'; put 'put ''Y29uc3R7ZG9jdW1lbnRFbGVtZW50OnR9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNldXAiLCgpPT4kQyhueSx0aGlzLGQzdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJt''@;'; put 'put ''b3VzZW1vdmUiLGU9PiRDKG55LHRoaXMsaDN0KS5jYWxsKHRoaXMsZSkpfWNsZWFyTWFwcGVkU2V0dGluZ3MoKXt0aGlzLmRpcmVjdGlvbnMubGVuZ3RoPTAsdGhpcy5hdXRvSW5zZXJ0Um93PSExfW1hcFNldHRpbmdzKCl7Y29uc3QgdD1mdW5jdGlvbiBxZnQobil7Y29uc3QgdD17fTtyZXR1''@;'; put 'put ''cm4hMD09PW4/KHQuZGlyZWN0aW9ucz1PYmplY3Qua2V5cyh0eSksdC5hdXRvSW5zZXJ0Um93PSEwKTpobyhuKT8odC5hdXRvSW5zZXJ0Um93PSEhd2Eobi5hdXRvSW5zZXJ0Um93KSYmbi5kaXJlY3Rpb24hPT10eS5ob3Jpem9udGFsJiZuLmF1dG9JbnNlcnRSb3csdC5kaXJlY3Rpb25zPXdh''@;'; put 'put ''KG4uZGlyZWN0aW9uKT9bbi5kaXJlY3Rpb25dOk9iamVjdC5rZXlzKHR5KSk6InN0cmluZyI9PXR5cGVvZiBuPyh0LmRpcmVjdGlvbnM9W25dLHQuYXV0b0luc2VydFJvdz0hMCk6KHQuZGlyZWN0aW9ucz1bXSx0LmF1dG9JbnNlcnRSb3c9ITEpLHR9KHRoaXMuaG90LmdldFNldHRpbmdzKCku''@;'; put 'put ''ZmlsbEhhbmRsZSk7dGhpcy5kaXJlY3Rpb25zPXQuZGlyZWN0aW9ucyx0aGlzLmF1dG9JbnNlcnRSb3c9dC5hdXRvSW5zZXJ0Um93fWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHMzdChuLHQsZSxyKXtjb25zdCBpPVtdO2ZvcihsZXQgYT1NYXRoLm1pbihlLnJvdyxyLnJv''@;'; put 'put ''dyk7YTw9TWF0aC5tYXgoZS5yb3csci5yb3cpO2ErPTEpe2kucHVzaChbXSk7Zm9yKGxldCBjPU1hdGgubWluKGUuY29sLHIuY29sKTtjPD1NYXRoLm1heChlLmNvbCxyLmNvbCk7Yys9MSl7Y29uc3QgbT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGEsYyksQz1hLU1hdGgubWluKGUu''@;'; put 'put ''cm93LHIucm93KSxQPWMtTWF0aC5taW4oZS5jb2wsci5jb2wpLFk9QyV0Lmxlbmd0aCxKPVAldFswXS5sZW5ndGg7aVtDXVtQXT1obyhtKT90W1ldW0pdOm5bWV1bSl19fXJldHVybiBpfWZ1bmN0aW9uIGwzdCgpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1mdW5jdGlv''@;'; put 'put ''biBjM3QoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0xLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSEwfWZ1bmN0aW9uIHUzdChuKXt0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lciYmIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0''@;'; put 'put ''aGlzLmhhbmRsZURyYWdnZWRDZWxscys9MSx0aGlzLnNob3dCb3JkZXIobiksdGhpcy5hZGROZXdSb3dJZk5lZWRlZCgpKX1mdW5jdGlvbiBkM3QoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjEmJnRoaXMuZmlsbEluKCksdGhpcy5oYW5kbGVE''@;'; put 'put ''cmFnZ2VkQ2VsbHM9MCx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMSl9ZnVuY3Rpb24gaDN0KG4pe2NvbnN0IHQ9dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobik7ITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJnQ/KHRoaXMu''@;'; put 'put ''bW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITApOnRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhpcy5hZGRSb3coKX1mdW5jdGlvbiBKOGUobix0LGUpe1E4ZShuLHQpLHQuc2V0KG4sZSl9''@;'; put 'put ''ZnVuY3Rpb24gUThlKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBLQyhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gcDN0KG4pe3ZhciB0''@;'; put 'put ''PWZ1bmN0aW9uIGczdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gZTdlKG4sdCxlKXtyZXR1cm4gbi5zZXQoTjIobix0KSxlKSxlfWZ1bmN0aW9uIERWKG4sdCl7cmV0dXJuIG4uZ2V0KE4yKG4sdCkpfWZ1bmN0''@;'; put 'put ''aW9uIE4yKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB2bmU9ImF1''@;'; put 'put ''dG9Sb3dTaXplIix0N2U9Imh0Rmlyc3REYXRhc2V0Q29sdW1uTm90UmVuZGVyZWQiLG43ZT0iaHRBdXRvUm93U2l6ZSI7dmFyIGprPW5ldyBXZWFrTWFwLHluZT1uZXcgV2Vha01hcCxRZj1uZXcgV2Vha1NldDtjbGFzcyB6ayBleHRlbmRzIE1ze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3Jl''@;'; put 'put ''dHVybiB2bmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57dXNlSGVhZGVyczohMCxzYW1wbGluZ1JhdGlvOm51bGwsYWxsb3dTYW1wbGVE''@;'; put 'put ''dXBsaWNhdGVzOiExfX1zdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKXtyZXR1cm4gNTB9c3RhdGljIGdldCBTWU5DX0NBTENVTEFUSU9OX0xJTUlUKCl7cmV0dXJuIDUwMH1jb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSxmdW5jdGlvbiBmM3Qobix0KXtROGUobix0KSx0LmFkZChuKX0odGhp''@;'; put 'put ''cyxRZiksS0ModGhpcywiaGVhZGVySGVpZ2h0IixudWxsKSxLQyh0aGlzLCJnaG9zdFRhYmxlIixuZXcgaG5lKHRoaXMuaG90KSksS0ModGhpcywic2FtcGxlc0dlbmVyYXRvciIsbmV3IFk4ZSgoZSxyKT0+e2NvbnN0IGk9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihyKTtpZih0aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihpKXx8ZT49MCYmcj49MCYmdGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZSxyKS5oaWRkZW4pcmV0dXJuITE7bGV0IGE7cmV0dXJuIGU+PTA/YT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGUscik6LTE9PT1lJiYoYT10aGlzLmhvdC5nZXRDb2xIZWFk''@;'; put 'put ''ZXIocikpLHt2YWx1ZTphfX0pKSxLQyh0aGlzLCJpblByb2dyZXNzIiwhMSksS0ModGhpcywibWVhc3VyZWRSb3dzIiwwKSxLQyh0aGlzLCJyb3dIZWlnaHRzTWFwIixuZXcgczgpLEo4ZSh0aGlzLGprLFtdKSxKOGUodGhpcyx5bmUsITEpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lz''@;'; put 'put ''dGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGUscixpKT0+TjIoUWYsdGhpcyxpN2UpLmNhbGwodGhpcyxlLHIsaSkpfWlzRW5hYmxlZCgpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt2bmVdO3Jl''@;'; put 'put ''dHVybiEwPT09dHx8aG8odCl9ZW5hYmxlUGx1Z2luKCl7dmFyIHQ9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgZT10aGlzLmdl''@;'; put 'put ''dFNldHRpbmcoInNhbXBsaW5nUmF0aW8iKTtlJiYhaXNOYU4oZSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChlLDEwKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3''@;'; put 'put ''IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBOMihRZix0LHczdCkuY2FsbCh0LC4uLmkpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0w''@;'; put 'put ''O2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIE4yKFFmLHQsQzN0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKCk9PnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJGb3JtdWxhc1ZhbHVl''@;'; put 'put ''c1VwZGF0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gTjIoUWYsdCxNM3QpLmNhbGwodCwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsKCk9Pk4y''@;'; put 'put ''KFFmLHRoaXMsXzN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsKCk9Pk4yKFFmLHRoaXMsYjN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKHIsaSk9PnRoaXMuZ2V0Um93SGVpZ2h0KGkscikpLHRoaXMuYWRkSG9vaygiaW5p''@;'; put 'put ''dCIsKCk9Pk4yKFFmLHRoaXMsUzN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsKCk9PnRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkpLHRpKHRoaXMuaG90LnJvb3RFbGVtZW50LG43ZSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsSGEodGhpcy5ob3Qucm9vdEVsZW1lbnQsbjdlKSxzdXBlci5kaXNhYmxlUGx1Z2luKCksTjIoUWYsdGhpcyxyN2UpLmNhbGwodGhpcywhMSksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLCh0LGUscik9Pk4yKFFmLHRoaXMs''@;'; put 'put ''aTdlKS5jYWxsKHRoaXMsdCxlLHIpKX1jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgpe2lmKCF0aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgdD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGU9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpOy0xIT09dCYmLTEhPT1lJiZ0aGlz''@;'; put 'put ''LmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206dCx0bzplfSx2b2lkIDAsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1jYWxjdWxhdGVSb3dzSGVpZ2h0KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhp''@;'; put 'put ''cy5ob3QuY291bnRSb3dzKCktMX0sZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxyPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVu''@;'; put 'put ''dHNbMl07Y29uc3QgaT0ibnVtYmVyIj09dHlwZW9mIHQ/e2Zyb206dCx0bzp0fTp0LGE9Im51bWJlciI9PXR5cGVvZiBlP3tmcm9tOmUsdG86ZX06ZTtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCBjPXRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1Nh''@;'; put 'put ''bXBsZXMoLTEsYSk7dGhpcy5naG9zdFRhYmxlLmFkZENvbHVtbkhlYWRlcnNSb3coYy5nZXQoLTEpKX1lbyhpLmZyb20saS50byxjPT57bGV0IG09dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhjKTtudWxsPT09bSYmKG09YyksKHJ8fG51bGw9PT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KG0pKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhjLGEpLmZvckVhY2goKFAsWSk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3coWSxQKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3Ro''@;'; put 'put ''aXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKChjLG0pPT57YzwwP3RoaXMuaGVhZGVySGVpZ2h0PW06dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGMpLG0pfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1pLnRvKzEsdGhpcy5naG9zdFRh''@;'; put 'put ''YmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj0wO2NvbnN0IGk9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgYT1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCBjPSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBZQShhKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxj''@;'; put 'put ''dWxhdGVSb3dzSGVpZ2h0KHtmcm9tOnIsdG86TWF0aC5taW4ocit6ay5DQUxDVUxBVElPTl9TVEVQLGkpfSx0LGUpLHI9cit6ay5DQUxDVUxBVElPTl9TVEVQKzEscjxpP2E9WkEoYyk6KFlBKGEpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgp''@;'; put 'put ''KX0sbT10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7bT49MCYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTowLHRvOm19LHQsZSkscj1tKzEpLHI8aT9jKCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX1yZWNhbGN1''@;'; put 'put ''bGF0ZUFsbFJvd3NIZWlnaHQoKXt0aGlzLmhvdC52aWV3LmlzVmlzaWJsZSgpJiZ0aGlzLmNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoe2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSwhMCl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCB0PXRoaXMuaG90LmdldFNldHRp''@;'; put 'put ''bmdzKClbdm5lXTtsZXQgZT16ay5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IHI9dGhpcy5ob3QuY291bnRSb3dzKCktMTtyZXR1cm4gaG8odCkmJihlPXQuc3luY0xpbWl0LFhxKGUpP2U9a0oocixlKTplPj49MCksTWF0aC5taW4oZSxyKX1nZXRSb3dIZWlnaHQodCl7bGV0IGU9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCh0KTt2YXIgcjtpZih0PDApcmV0dXJuIG51bGwhPT0ocj10aGlzLmhlYWRlckhlaWdodCkmJnZvaWQgMCE9PXI/cjplO2Nv''@;'; put 'put ''bnN0IGk9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihpKSlyZXR1cm4gZTtjb25zdCBhPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoaSk7bGV0IGM9ZTtyZXR1cm4gbnVsbCE9PWEmJmE+ZSYmKGM9YSwhdGhp''@;'; put 'put ''cy5ob3Quc3R5bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgpJiZ0PT09dGhpcy5ob3Qudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpJiYoYys9MSkpLGN9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygp''@;'; put 'put ''e3ZhciB0O3JldHVybiBudWxsIT09KHQ9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9PXQ/dDotMX1nZXRMYXN0VmlzaWJsZVJvdygpe3ZhciB0O3JldHVybiBudWxsIT09KHQ9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9p''@;'; put 'put ''ZCAwIT09dD90Oi0xfWNsZWFyQ2FjaGUodCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxBcnJheS5pc0FycmF5KHQpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dC5mb3JFYWNoKGU9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGUsbnVsbCl9KX0sITApOnRoaXMu''@;'; put 'put ''cm93SGVpZ2h0c01hcC5jbGVhcigpfWNsZWFyQ2FjaGVCeVJhbmdlKHQpe2NvbnN0e2Zyb206ZSx0bzpyfT0ibnVtYmVyIj09dHlwZW9mIHQ/e2Zyb206dCx0bzp0fTp0O3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57ZW8oTWF0aC5taW4oZSxyKSxNYXRoLm1heChlLHIpLGk9Pnt0aGlz''@;'; put 'put ''LnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGksbnVsbCl9KX0sITApfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkUm93cykuZmlsdGVyKHQ9Pm51bGw9PT10KS5sZW5ndGh9ZGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24geTN0KG4pe2NvbnN0IHQ9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfTtuLmZvckVhY2goZT0+e3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoZSx0KS5m''@;'; put 'put ''b3JFYWNoKChpLGEpPT50aGlzLmdob3N0VGFibGUuYWRkUm93KGEsaSkpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygoZSxyKT0+e2NvbnN0IGk9dGhpcy5ob3QudG9QaHlzaWNh''@;'; put 'put ''bFJvdyhlKTt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGkscil9KX0sITApLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiByN2Uobil7Y29uc3QgdD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLGU9dGhpcy5ob3QuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodCk7ITE9PT1ufHxlPT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KDApP0hhKHRoaXMuaG90LnJvb3RFbGVtZW50LHQ3ZSk6dGkodGhpcy5ob3Qucm9vdEVsZW1lbnQs''@;'; put 'put ''dDdlKX1mdW5jdGlvbiBfM3QoKXtOMihRZix0aGlzLHI3ZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBiM3QoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCksdGhpcy5pblByb2dyZXNzfHwoTjIoUWYsdGhpcyx5M3QpLmNhbGwodGhpcyxEVihqayx0aGlzKSksZTdlKGprLHRoaXMs''@;'; put 'put ''W10pKX1mdW5jdGlvbiBpN2Uobix0LGUpe2xldCByPW47cmV0dXJuIGUmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQodCx2b2lkIDAsITApLHI9dGhpcy5nZXRSb3dIZWlnaHQodCkpLHJ9ZnVuY3Rpb24gdzN0KG4sdCl7dHx8dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX1mdW5j''@;'; put 'put ''dGlvbiBDM3Qobil7Y29uc3QgdD1uLnJlZHVjZSgoZSxyKT0+e2xldFtpXT1yO3JldHVybi0xPT09ZS5pbmRleE9mKGkpJiZlLnB1c2goaSksZX0sW10pO0RWKGprLHRoaXMpLnB1c2goLi4udCl9ZnVuY3Rpb24gUzN0KCl7dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSxlN2UoeW5l''@;'; put 'put ''LHRoaXMsITApfWZ1bmN0aW9uIE0zdChuKXtpZighRFYoeW5lLHRoaXMpKXJldHVybjtjb25zdCB0PW4ucmVkdWNlKChlLHIpPT57dmFyIGk7Y29uc3QgYT1udWxsPT09KGk9ci5hZGRyZXNzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5yb3c7aWYoTnVtYmVyLmlzSW50ZWdlcihhKSl7Y29uc3Qg''@;'; put 'put ''Yz10aGlzLmhvdC50b1Zpc3VhbFJvdyhhKTstMT09PWUuaW5kZXhPZihjKSYmZS5wdXNoKGMpfXJldHVybiBlfSxbXSk7RFYoamssdGhpcykucHVzaCguLi50KX1jb25zdCBhN2U9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6aFEsZ2V0TGlz''@;'; put 'put ''dFdpdGhSZW1vdmVkSXRlbXM6X2t9XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOmdRLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOm1RfV1dKSxvN2U9bj0+e2lmKCExPT09YTdlLmhhcyhuKSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0cmF0ZWd5IHdp''@;'; put 'put ''dGggSUQgJyR7bn0nIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBhN2UuZ2V0KG4pfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOngzdCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpFM3R9PW83ZSgicGh5c2ljYWxseUluZGV4ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOmszdCxn''@;'; put 'put ''ZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpEM3R9PW83ZSgicGh5c2ljYWxseUluZGV4ZWQiKTtjb25zdCBzN2U9ImJpbmRSb3dzV2l0aEhlYWRlcnMiLGw3ZT1uZXcgTWFwKFtbImxvb3NlIixjbGFzcyBUM3QgZXh0ZW5kcyBqdntjb25zdHJ1Y3Rvcigpe3N1cGVyKHQ9PnQpfWluc2VydCh0LGUp''@;'; put 'put ''e2NvbnN0IHI9cFEodGhpcy5pbmRleGVkVmFsdWVzLGUpO3RoaXMuaW5kZXhlZFZhbHVlcz14M3Qocix0LGUsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQodCxlKX1yZW1vdmUodCl7Y29uc3QgZT1FM3QodGhpcy5pbmRleGVkVmFsdWVzLHQpO3RoaXMuaW5kZXhlZFZhbHVlcz1m''@;'; put 'put ''UShlLHQpLHN1cGVyLnJlbW92ZSh0KX19XSxbInN0cmljdCIsY2xhc3MgSTN0IGV4dGVuZHMganZ7Y29uc3RydWN0b3IoKXtzdXBlcih0PT50KX1pbnNlcnQodCxlKXt0aGlzLmluZGV4ZWRWYWx1ZXM9azN0KHRoaXMuaW5kZXhlZFZhbHVlcyx0LGUsKHIsaSk9PnRoaXMuZ2V0TmV4dFZhbHVl''@;'; put 'put ''KGkpKSxzdXBlci5pbnNlcnQodCxlKX1yZW1vdmUodCl7dGhpcy5pbmRleGVkVmFsdWVzPUQzdCh0aGlzLmluZGV4ZWRWYWx1ZXMsdCksc3VwZXIucmVtb3ZlKHQpfWdldE5leHRWYWx1ZSh0KXtyZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5nZXRWYWx1ZXMoKSkrMSt0fX1dXSk7dmFyIGM3ZT1u''@;'; put 'put ''ZXcgV2Vha1NldDtjbGFzcyBqM3QgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gTDN0KG4sdCl7KGZ1bmN0aW9uIE8zdChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSh0aGlzLGM3ZSksZnVuY3Rpb24gUDN0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBGM3Qobil7dmFyIHQ9ZnVuY3Rpb24gSDN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4g''@;'; put 'put ''bjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2''@;'; put 'put ''YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs''@;'; put 'put ''d3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywiaGVhZGVySW5kZXhlcyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHM3ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5n''@;'; put 'put ''cygpW3M3ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIHQ7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBlPW51bGwhPT0odD1sN2UuZ2V0KHRoaXMuZ2V0U2V0dGluZygpKSkmJnZvaWQgMCE9PXQ/dDpsN2UuZ2V0KCJsb29zZSIpO3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhvdC5yb3dJbmRl''@;'; put 'put ''eE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIsbmV3IGUpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixyPT5mdW5jdGlvbiBOM3Qobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjN2UsdGhpcyx6M3QpLmNhbGwodGhpcyxyKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVy''@;'; put 'put ''LnVucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gejN0KG4pe3JldHVybiB0aGlzLmhlYWRlckluZGV4ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxS''@;'; put 'put ''b3cobikpfWZ1bmN0aW9uIHU3ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZDdlKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBaM3Qo''@;'; put 'put ''bil7dmFyIHQ9ZnVuY3Rpb24gWTN0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiBoN2Uobix0KXtyZXR1cm4gbi5nZXQoWEMobix0KSl9ZnVuY3Rpb24gX25lKG4sdCxlKXtyZXR1cm4gbi5zZXQoWEMobix0KSxl''@;'; put 'put ''KSxlfWZ1bmN0aW9uIFhDKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25z''@;'; put 'put ''dCBJVj0iY29sbGFwc2libGVDb2x1bW5zIiwkM3Q9WyJuZXN0ZWRIZWFkZXJzIl0scUM9ImNvbGxhcHNpYmxlSW5kaWNhdG9yIixmN2U9SVYscDdlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixhZnRlckhvb2s6''@;'; put 'put ''ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0sWyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBKQz1uZXcgV2Vha01hcCxVaz1uZXcgV2Vha1NldDtjbGFzcyBLM3QgZXh0ZW5k''@;'; put 'put ''cyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gVTN0KG4sdCl7dTdlKG4sdCksdC5hZGQobil9KHRoaXMsVWspLGQ3ZSh0aGlzLCJuZXN0ZWRIZWFkZXJzUGx1Z2luIixudWxsKSxkN2UodGhpcywiaGVhZGVyU3RhdGVNYW5hZ2VyIixudWxsKSxmdW5jdGlv''@;'; put 'put ''biBXM3Qobix0LGUpe3U3ZShuLHQpLHQuc2V0KG4sZSl9KHRoaXMsSkMsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIElWfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI5MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46TmVz''@;'; put 'put ''dGVkSGVhZGVycyJdfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW0lWLC4uLiQzdF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0lWXX1lbmFibGVQbHVnaW4oKXt2YXIgdD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVk''@;'; put 'put ''SGVhZGVyczplfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2V8fG9zKCJZb3UgbmVlZCB0byBjb25maWd1cmUgdGhlIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBpbiBvcmRlciB0byB1c2UgY29sbGFwc2libGUgaGVhZGVycy4iKSxfbmUoSkMsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4u''@;'; put 'put ''Z2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+WEMoVWssdGhpcyxKM3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylp''@;'; put 'put ''W2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gWEMoVWssdCxRM3QpLmNhbGwodCwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNb''@;'; put 'put ''YV07cmV0dXJuIFhDKFVrLHQsWDN0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsKHIsaSxhKT0+WEMoVWssdGhpcyxxM3QpLmNhbGwodGhpcyxyLGksYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0''@;'; put 'put ''aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOnR9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xl''@;'; put 'put ''YW4iPT10eXBlb2YgdD90aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZShlPT4oe2NvbGxhcHNpYmxlOmUub3JpZ0NvbHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KHQpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5o''@;'; put 'put ''ZWFkZXJTdGF0ZU1hbmFnZXIubWVyZ2VTdGF0ZVdpdGgodCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLF9uZShKQyx0aGlzLG51bGwpLHRoaXMubmVzdGVkSGVh''@;'; put 'put ''ZGVyc1BsdWdpbj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJCdXR0b25zKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0''@;'; put 'put ''KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dmFyIHQ7Y29uc3R7cm93OmUsY29sOnJ9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQse2NvbGxhcHNpYmxlOmksaXNDb2xsYXBzZWQ6YSxjb2x1bW5JbmRleDpjfT1udWxsIT09KHQ9dGhpcy5oZWFk''@;'; put 'put ''ZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGUscikpJiZ2b2lkIDAhPT10P3Q6e307aWYoaSlyZXR1cm4gYT90aGlzLmV4cGFuZFNlY3Rpb24oe3JvdzplLGNvbDpjfSk6dGhpcy5jb2xsYXBzZVNlY3Rpb24oe3JvdzplLGNvbDpjfSksITF9LHJ1bk9ubHlJZjooKT0+e3Zh''@;'; put 'put ''ciB0LGU7cmV0dXJuKG51bGw9PT0odD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmlzU2luZ2xlKCkpJiYobnVsbD09PShlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuaGlnaGxp''@;'; put 'put ''Z2h0LmlzSGVhZGVyKCkpfSxncm91cDpmN2UscmVsYXRpdmVUb0dyb3VwOmM4LHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGY3ZSl9''@;'; put 'put ''Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IHQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxlPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQscj10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlz''@;'; put 'put ''LnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxpPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhF''@;'; put 'put ''QUQ6bnVsbCxhPWZ1bmN0aW9uKGMpe2MmJmMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX07ZW8oMCx0LTEsYz0+e2NvbnN0IG09ZS5jaGlsZE5vZGVzW2NdLEM9ci5jaGlsZE5vZGVzW2NdLFA9aT9pLmNoaWxkTm9kZXNbY106bnVsbDtlbygwLG0uY2hpbGROb2Rlcy5sZW5ndGgtMSxZPT57''@;'; put 'put ''bGV0IEo9bS5jaGlsZE5vZGVzW1ldLnF1ZXJ5U2VsZWN0b3IoYC4ke3FDfWApO2EoSiksQyYmQy5jaGlsZE5vZGVzW1ldJiYoSj1DLmNoaWxkTm9kZXNbWV0ucXVlcnlTZWxlY3RvcihgLiR7cUN9YCksYShKKSksaSYmUCYmUC5jaGlsZE5vZGVzW1ldJiYoSj1QLmNoaWxkTm9kZXNbWV0ucXVl''@;'; put 'put ''cnlTZWxlY3RvcihgLiR7cUN9YCksYShKKSl9KX0pfWV4cGFuZFNlY3Rpb24odCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW3RdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24odCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW3RdLCJjb2xsYXBzZSIpfXRvZ2dsZUFs''@;'; put 'put ''bENvbGxhcHNpYmxlU2VjdGlvbnModCl7Y29uc3QgZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBOb2RlcyhyPT57Y29uc3R7Y29sbGFwc2libGU6aSxvcmlnQ29sc3BhbjphLGhlYWRlckxldmVsOmMsY29sdW1uSW5kZXg6bSxpc0NvbGxhcHNlZDpDfT1yO2lmKCEwPT09aSYmYT4xJiYo''@;'; put 'put ''QyYmImV4cGFuZCI9PT10fHwhQyYmImNvbGxhcHNlIj09PXQpKXJldHVybntyb3c6dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubGV2ZWxUb1Jvd0Nvb3JkcyhjKSxjb2w6bX19KTt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihlLHQpfWNvbGxhcHNlQWxsKCl7dGhpcy50b2dnbGVBbGxD''@;'; put 'put ''b2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKHQsZSl7aWYoIXA3ZS5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rp''@;'; put 'put ''b24gaXMgcGFzc2VkICgke2V9KS5gKTtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm47Y29uc3Qgcj0kNih0LGZlPT57bGV0e3JvdzpBZX09ZmU7cmV0dXJuIEFlPDB9KTtsZXQgaT1yLmxlbmd0aD4wO1luKHIsZmU9Pnt2YXIgQWU7bGV0e3JvdzpIZSxjb2w6WGV9PWZlO2NvbnN0e2NvbGxh''@;'; put 'put ''cHNpYmxlOnJ0LGlzQ29sbGFwc2VkOmR0fT1udWxsIT09KEFlPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKEhlLFhlKSkmJnZvaWQgMCE9PUFlP0FlOnt9O2lmKCFydHx8ZHQmJiJjb2xsYXBzZSI9PT1lfHwhZHQmJiJleHBhbmQiPT09ZSlyZXR1cm4gaT0hMSwh''@;'; put 'put ''MX0pO2NvbnN0IGE9W10sYz1bXTtpJiZZbihyLGZlPT57bGV0e3JvdzpBZSxjb2w6SGV9PWZlO2NvbnN0e2NvbHNwYW5Db21wZW5zYXRpb246WGUsYWZmZWN0ZWRDb2x1bW5zOnJ0LHJvbGxiYWNrTW9kaWZpY2F0aW9uOmR0fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50cmlnZ2VyTm9kZU1v''@;'; put 'put ''ZGlmaWNhdGlvbihlLEFlLEhlKTtYZT4wJiYoYy5wdXNoKC4uLnJ0KSxhLnB1c2goZHQpKX0pO2NvbnN0IG09dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCk7bGV0IEM9W107ImNvbGxhcHNlIj09PWU/Qz1rZ2UoWy4uLm0sLi4uY10pOiJleHBhbmQiPT09ZSYmKEM9JDYobSxmZT0+IWMuaW5j''@;'; put 'put ''bHVkZXMoZmUpKSk7Y29uc3QgUD1wN2UuZ2V0KGUpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoUC5iZWZvcmVIb29rLG0sQyxpKSlyZXR1cm4gdm9pZCBZbihhLGZlPT57ZmUoKX0pO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4oYyxmZT0+e2g3ZShKQyx0aGlzKS5zZXRWYWx1''@;'; put 'put ''ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmZSksUC5oaWRlQ29sdW1uKX0pfSwhMCk7Y29uc3QgSj10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT1tLmxlbmd0aCxjZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoImNvbGxhcHNlIj09''@;'; put 'put ''PWUmJkomJmNlKXtjb25zdHtyb3c6ZmUsY29sOkFlfT1jZS5oaWdobGlnaHQ7aWYoKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKGZlKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oQWUpKSYmYy5pbmNsdWRlcyhBZSkpe2NvbnN0IFhlPWZlPj0wP3RoaXMu''@;'; put 'put ''aG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmZSwxLCEwKTpmZSxydD1BZT49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQWUsMSwhMCk6QWU7bnVsbCE9PVhlJiZudWxsIT09cnQmJnRoaXMuaG90LnNlbGVj''@;'; put 'put ''dENlbGwoWGUscnQpfX10aGlzLmhvdC5ydW5Ib29rcyhQLmFmdGVySG9vayxtLEMsaSxKKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfWdldENvbGxhcHNlZENvbHVtbnMoKXtyZXR1cm4gaDdlKEpDLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMo''@;'; put 'put ''KX1kZXN0cm95KCl7X25lKEpDLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBYM3Qobix0LGUpe3ZhciByO2NvbnN0e2NvbGxhcHNpYmxlOmksb3JpZ0NvbHNwYW46YSxpc0NvbGxhcHNlZDpjfT1udWxsIT09KHI9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVy''@;'; put 'put ''U2V0dGluZ3MoZSxuKSkmJnZvaWQgMCE9PXI/cjp7fSxtPWkmJmE+MSYmbj49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxDPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bGV0IFA9dC5xdWVyeVNlbGVjdG9yKGAuJHtxQ31gKTt2YXIgWTtDNCh0LFt6''@;'; put 'put ''ZigiIilbMF1dKSxtPyhQfHwoUD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGkoUCxxQyksdC5xdWVyeVNlbGVjdG9yKCJkaXY6Zmlyc3QtY2hpbGQiKS5hcHBlbmRDaGlsZChQKSksSGEoUCxbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLGM/KHRpKFAsImNv''@;'; put 'put ''bGxhcHNlZCIpLFE2KFAsIisiKSxDJiZaYSh0LC4uLnpmKCExKSkpOih0aShQLCJleHBhbmRlZCIpLFE2KFAsIi0iKSxDJiZaYSh0LC4uLnpmKCEwKSkpLEMmJlphKFAsImFyaWEtaGlkZGVuIiwidHJ1ZSIpKTpudWxsPT09KFk9UCl8fHZvaWQgMD09PVl8fFkucmVtb3ZlKCl9ZnVuY3Rpb24g''@;'; put 'put ''cTN0KG4sdCl7dm8obi50YXJnZXQscUMpJiYodm8obi50YXJnZXQsImV4cGFuZGVkIik/KHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChuLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFt0XSwiY29sbGFwc2UiKSk6dm8obi50YXJnZXQsImNvbGxh''@;'; put 'put ''cHNlZCIpJiYodGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KG4udGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW3RdLCJleHBhbmQiKSksQTIobikpfWZ1bmN0aW9uIEozdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gUTN0KG4sdCl7dHx8''@;'; put 'put ''dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiByeShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gZXB0KG4pe3ZhciB0PWZ1bmN0aW9uIHRwdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUp''@;'; put 'put ''e3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShu''@;'; put 'put ''KX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgbnB0PVsic29ydEVtcHR5''@;'; put 'put ''Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Il07Y2xhc3Mgb3B0e2NvbnN0cnVjdG9yKHQsZSl7cnkodGhpcywiaG90Iix2b2lkIDApLHJ5KHRoaXMsInNvcnRpbmdTdGF0ZXMiLG5ldyBSTikscnkodGhpcywic29ydEVtcHR5Q2VsbHMi''@;'; put 'put ''LCExKSxyeSh0aGlzLCJpbmRpY2F0b3IiLCEwKSxyeSh0aGlzLCJoZWFkZXJBY3Rpb24iLCEwKSxyeSh0aGlzLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Iix2b2lkIDApLHJ5KHRoaXMsIm1hcE5hbWUiLHZvaWQgMCksdGhpcy5ob3Q9dCx0aGlzLm1hcE5hbWU9ZSx0aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5yZWdpc3Rlck1hcChlLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXModCl7aG8odCkmJmFzKHQsKGUscik9PntucHQuaW5jbHVkZXMocikmJih0aGlzW3JdPWUpfSl9Z2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKXtjb25zdCB0PXtzb3J0''@;'; put 'put ''RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rpb246dGhpcy5oZWFkZXJBY3Rpb259O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkmJih0LmNvbXBhcmVGdW5jdGlvbkZhY3Rv''@;'; put 'put ''cnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSx0fWdldFNvcnRPcmRlck9mQ29sdW1uKHQpe3ZhciBlO3JldHVybiBudWxsPT09KGU9dGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHQpKSl8fHZvaWQgMD09PWU/dm9pZCAw''@;'; put 'put ''OmUuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZSh0KXtyZXR1cm4gdD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHQpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkuZmluZEluZGV4KGU9PntsZXRbcl09ZTtyZXR1cm4gcj09PXR9KX1nZXROdW1iZXJPZlNv''@;'; put 'put ''cnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpfWlzQ29sdW1uU29ydGVkKHQpe3JldHVybiBobyh0aGlzLnNvcnRpbmdT''@;'; put 'put ''dGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCkpKX1nZXRTb3J0U3RhdGVzKCl7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoZT0+e2xldFtyLGldPWU7cmV0dXJue2Nv''@;'; put 'put ''bHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihyKSwuLi5pfX0pfWdldENvbHVtblNvcnRTdGF0ZSh0KXtjb25zdCBlPXRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4odCk7aWYod2EoZSkpcmV0dXJue2NvbHVtbjp0LHNvcnRPcmRlcjplfX1zZXRTb3J0U3RhdGVzKHQpe3RoaXMuc29ydGlu''@;'; put 'put ''Z1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odFtlXS5jb2x1bW4pLHtzb3J0T3JkZXI6dFtlXS5zb3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5ob3Qu''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1udWxsfX1mdW5jdGlvbiBnN2Uobix0LGUpe2NvbnN0IHI9dC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGksYSl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Y309ZTtyZXR1cm4ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGkmJihpPWkudG9Mb2NhbGVMb3dlckNhc2UocikpLCJzdHJpbmciPT10eXBlb2YgYSYmKGE9YS50b0xvY2FsZUxvd2VyQ2FzZShyKSksaT09PWE/TjQ6R2MoaSk/R2MoYSk/TjQ6YyYmImFzYyI9PT1uP0pjOlFjOkdjKGEpP2MmJiJhc2MiPT09bj9RYzpKYzppc05hTihp''@;'; put 'put ''KSYmIWlzTmFOKGEpPyJhc2MiPT09bj9RYzpKYzohaXNOYU4oaSkmJmlzTmFOKGEpfHwoaXNOYU4oaSl8fGlzTmFOKGEpfHwoaT1wYXJzZUZsb2F0KGkpLGE9cGFyc2VGbG9hdChhKSksaTxhKT8iYXNjIj09PW4/SmM6UWM6aT5hPyJhc2MiPT09bj9RYzpKYzpONH19Y29uc3R7cmVnaXN0ZXI6''@;'; put 'put ''V2ssZ2V0SXRlbTp2N2UsaGFzSXRlbTpncHR9PVdmKCJzb3J0aW5nLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiKSx7cmVnaXN0ZXI6eTdlLGdldEl0ZW06bXB0fT1XZigic29ydGluZy5tYWluU29ydENvbXBhcmF0b3IiKTtmdW5jdGlvbiBfN2Uobil7cmV0dXJuIGdwdChuKT92N2Uobik6djdl''@;'; put 'put ''KCJkZWZhdWx0Iil9V2soImNoZWNrYm94IixmdW5jdGlvbiBjcHQobix0LGUpe2NvbnN0IHI9dC5jaGVja2VkVGVtcGxhdGUsaT10LnVuY2hlY2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczphfT1lO3JldHVybiBmdW5jdGlvbihjLG0pe2NvbnN0IEM9R2MoYyksUD1HYyhtKSxZPUM/aTpj''@;'; put 'put ''LEo9UD9pOm0sY2U9WT09PWl8fFk9PT1yLGZlPUo9PT1pfHxKPT09cjtpZighMT09PWEpe2lmKEMmJiExPT09UClyZXR1cm4gUWM7aWYoITE9PT1DJiZQKXJldHVybiBKY31yZXR1cm4hMT09PWNlJiZmZT8iYXNjIj09PW4/SmM6UWM6Y2UmJiExPT09ZmU/ImFzYyI9PT1uP1FjOkpjOiExPT09''@;'; put 'put ''Y2UmJiExPT09ZmU/ZzdlKG4sdCxlKShjLG0pOlk9PT1pJiZKPT09cj8iYXNjIj09PW4/SmM6UWM6WT09PXImJko9PT1pPyJhc2MiPT09bj9RYzpKYzpONH19KSxXaygiZGF0ZSIsZnVuY3Rpb24gZHB0KG4sdCxlKXtyZXR1cm4gTTdlKG4sdC5kYXRlRm9ybWF0LGUpfSksV2soImRlZmF1bHQi''@;'; put 'put ''LGc3ZSksV2soIm51bWVyaWMiLGZ1bmN0aW9uIHNwdChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7Y29uc3QgYT1wYXJzZUZsb2F0KHIpLGM9cGFyc2VGbG9hdChpKSx7c29ydEVtcHR5Q2VsbHM6bX09ZTtpZihhPT09Y3x8aXNOYU4oYSkmJmlzTmFOKGMpKXJldHVybiBONDtpZihtKXtp''@;'; put 'put ''ZihHYyhyKSlyZXR1cm4iYXNjIj09PW4/SmM6UWM7aWYoR2MoaSkpcmV0dXJuImFzYyI9PT1uP1FjOkpjfXJldHVybiBpc05hTihhKT9RYzppc05hTihjKT9KYzphPGM/ImFzYyI9PT1uP0pjOlFjOmE+Yz8iYXNjIj09PW4/UWM6SmM6TjR9fSksV2soInRpbWUiLGZ1bmN0aW9uIGZwdChuLHQs''@;'; put 'put ''ZSl7cmV0dXJuIE03ZShuLHQudGltZUZvcm1hdCxlKX0pO2NvbnN0IE40PTAsSmM9LTEsUWM9MSxSVj0iYXNjIixMVj0iZGVzYyI7ZnVuY3Rpb24gdzdlKG4pe2lmKG4hPT1MVilyZXR1cm4gbj09PVJWP0xWOlJWfWZ1bmN0aW9uIEM3ZShuKXtyZXR1cm4gbi5xdWVyeVNlbGVjdG9yKCIuY29s''@;'; put 'put ''SGVhZGVyIil9ZnVuY3Rpb24gUzdlKG4sdCl7aWYobjwwfHwhdC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGU9dC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztyZXR1cm4gQXJyYXkuZnJvbShlKS5pbmRleE9mKHQucGFyZW50Tm9kZSktZS5sZW5ndGg9PS0xfWZ1bmN0aW9u''@;'; put 'put ''IGJuZShuLHQsZSl7cmV0dXJuLTE9PT1uJiZ0Pj0wJiYhMT09PW44KGUpfWZ1bmN0aW9uIE03ZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6YX09ZTtpZihyPT09aSlyZXR1cm4gTjQ7aWYoR2MocikpcmV0dXJuIEdjKGkpP040OmEmJiJhc2MiPT09''@;'; put 'put ''bj9KYzpRYztpZihHYyhpKSlyZXR1cm4gYSYmImFzYyI9PT1uP1FjOkpjO2NvbnN0IGM9cXMocix0KSxtPXFzKGksdCk7cmV0dXJuIGMuaXNWYWxpZCgpP20uaXNWYWxpZCgpP20uaXNBZnRlcihjKT8iYXNjIj09PW4/SmM6UWM6bS5pc0JlZm9yZShjKT8iYXNjIj09PW4/UWM6SmM6TjQ6SmM6''@;'; put 'put ''UWN9fWNvbnN0IHg3ZT0iaW5kaWNhdG9yRGlzYWJsZWQiLEU3ZT0iY29sdW1uU29ydGluZyIsVDdlPSJzb3J0QWN0aW9uIixBN2U9bmV3IE1hcChbW1JWLCJhc2NlbmRpbmciXSxbTFYsImRlc2NlbmRpbmciXV0pO2Z1bmN0aW9uIE9WKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBBcHQobil7''@;'; put 'put ''dmFyIHQ9ZnVuY3Rpb24ga3B0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiBRQyhuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90''@;'; put 'put ''OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgUFY9ImNvbHVtblNvcnRpbmciLEZWPSJhcHBlbmQiLGs3ZT1QVjt5N2UoUFYsZnVuY3Rpb24geHB0KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7Y29u''@;'; put 'put ''c3RbLC4uLmldPWUsWywuLi5hXT1yO3JldHVybiBmdW5jdGlvbigpe2NvbnN0IEM9blswXSxQPXRbMF0sWT1pWzBdLEo9YVswXSxjZT1QLmNvbHVtblNvcnRpbmc7cmV0dXJuKGNlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/Y2UuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpfN2UoUC50eXBlKSko''@;'; put 'put ''QyxQLGNlKShZLEopfSgpfX0pLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Tb3J0IiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29ydCIpO2NvbnN0IFprPW5ldyBXZWFrTWFwO3ZhciBpeT1uZXcgV2Vha1NldDtjbGFzcyBEN2UgZXh0''@;'; put 'put ''ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRXB0KG4sdCl7KGZ1bmN0aW9uIFRwdChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24g''@;'; put 'put ''YW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSh0aGlzLGl5KSxPVih0aGlzLCJjb2x1bW5TdGF0ZXNNYW5hZ2VyIixudWxsKSxPVih0aGlzLCJjb2x1bW5NZXRhQ2FjaGUiLG51bGwpLE9WKHRoaXMsInBsdWdpbktleSIsUFYpLE9WKHRoaXMsImluZGV4ZXNTZXF1ZW5jZUNhY2hlIixudWxs''@;'; put 'put ''KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUFZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXt2YXIgdD10aGlzO2lmKFpr''@;'; put 'put ''Lmhhcyh0aGlzLmhvdCkmJlprLmdldCh0aGlzLmhvdCkhPT10aGlzLnBsdWdpbktleSlyZXR1cm4gdGhpcy5ob3QudXBkYXRlU2V0dGluZ3Moe1t0aGlzLnBsdWdpbktleV06ITF9KSx2b2lkIGZ1bmN0aW9uIGJwdChuLHQpe29zKGVsYFBsdWdpbnMgXGBjb2x1bW5Tb3J0aW5nXGAgYW5kIFxg''@;'; put 'put ''bXVsdGlDb2x1bW5Tb3J0aW5nXGAgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHNpbXVsdGFuZW91c2x5Llx4MjAKICAgIE9ubHkgXGAke259XGAgd2lsbCB3b3JrLiBUaGUgXGAke3R9XGAgcGx1Z2luIHdpbGwgcmVtYWluIGRpc2FibGVkLmApfShaay5nZXQodGhpcy5ob3QpLHRoaXMucGx1Z2lu''@;'; put 'put ''S2V5KTt0aGlzLmVuYWJsZWR8fChaay5zZXQodGhpcy5ob3QsdGhpcy5wbHVnaW5LZXkpLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgb3B0KHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bmV3IHM4KGU9PntsZXQg''@;'; put 'put ''cj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihlKTtyZXR1cm4gbnVsbD09PXImJihyPWUpLHRoaXMuZ2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3Mocil9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWAsdGhpcy5jb2x1''@;'; put 'put ''bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChlLHIpPT5RQyhpeSx0aGlzLFJwdCkuY2FsbCh0aGlzLGUscikpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3''@;'; put 'put ''IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBRQyhpeSx0LE9wdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsKGUscik9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihlLHIpKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVySW5pdCIsKCk9PlFDKGl5LHRoaXMsd25lKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIFFD''@;'; put 'put ''KGl5LHQsTHB0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmhvdC52aWV3JiZRQyhpeSx0aGlzLHduZSkuY2FsbCh0aGlzKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtjb25zdCB0PShlLHIpPT57Y29uc3QgaT1DN2Uocik7ITE9''@;'; put 'put ''PT1TN2UoZSxyKXx8bnVsbD09PWl8fHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhpKX07WmsuZGVsZXRlKHRoaXMuaG90KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsdCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5y''@;'; put 'put ''ZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsdCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2Fj''@;'; put 'put ''aGUuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbCl9LCEwKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5''@;'; put 'put ''fS5jb2x1bW5NZXRhYCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNo''@;'; put 'put ''b3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDp0fT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuIHRo''@;'; put 'put ''aXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcodC5jb2wpKSwhMX0scnVuT25seUlmOigpPT57dmFyIHQsZTtjb25zdCByPW51bGw9PT0odD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhpZ2hsaWdodDtyZXR1cm4gciYmKG51''@;'; put 'put ''bGw9PT0oZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShyKSYmLTE9PT1yLnJvdyYmci5jb2w+PTB9LHJlbGF0aXZlVG9Hcm91cDpjOCxwb3NpdGlvbjoi''@;'; put 'put ''YmVmb3JlIixncm91cDprN2V9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoazdlKX1zb3J0KHQpe2NvbnN0IGU9dGhpcy5nZXRTb3J0Q29uZmlnKCkscj10aGlzLmdl''@;'; put 'put ''dE5vcm1hbGl6ZWRTb3J0Q29uZmlncyh0KSxpPXRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhyKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Tb3J0IixlLHIsaSkmJigwPT09ZS5sZW5ndGgmJm51bGw9PT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5pbmRl''@;'; put 'put ''eGVzU2VxdWVuY2VDYWNoZT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSxuZXcgam1lKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLnNldFZhbHVlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSkpLGkmJih0''@;'; put 'put ''aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhyKSx0aGlzLnNvcnRCeVByZXNldFNvcnRTdGF0ZXMociksdGhpcy5zYXZlQWxsU29ydFNldHRpbmdzKHIpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Tb3J0IixlLGk/cjplLGkpLGkmJnRoaXMuaG90LnJlbmRl''@;'; put 'put ''cigpKX1jbGVhclNvcnQoKXt0aGlzLnNvcnQoW10pfWlzU29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpfWdldFNvcnRDb25maWcodCl7cmV0dXJuIHdhKHQpP3RoaXMuY29sdW1uU3RhdGVz''@;'; put 'put ''TWFuYWdlci5nZXRDb2x1bW5Tb3J0U3RhdGUodCk6dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKX1zZXRTb3J0Q29uZmlnKHQpe2NvbnN0IGU9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3ModCk7dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGUpJiZ0aGlzLmNv''@;'; put 'put ''bHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhlKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5zbGljZSgwLDEpOlt0''@;'; put 'put ''XX1hcmVWYWxpZFNvcnRDb25maWdzKHQpe2NvbnN0IGU9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIF9wdChuKXtpZihuLnNvbWUoZT0+ITE9PT1mdW5jdGlvbiB5cHQobil7aWYoITE9PT1obyhuKSlyZXR1cm4hMTtjb25zdHtjb2x1bW46dCxzb3J0T3JkZXI6ZX09bjty''@;'; put 'put ''ZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0KSYmW1JWLExWXS5pbmNsdWRlcyhlKX0oZSkpKXJldHVybiExO2NvbnN0IHQ9bi5tYXAoZT0+e2xldHtjb2x1bW46cn09ZTtyZXR1cm4gcn0pO3JldHVybiBuZXcgU2V0KHQpLnNpemU9PT10Lmxlbmd0aH0odCkmJnQuZXZlcnkocj0+e2xldHtjb2x1''@;'; put 'put ''bW46aX09cjtyZXR1cm4gaTw9ZSYmaT49MH0pfXNhdmVBbGxTb3J0U2V0dGluZ3ModCl7Y29uc3QgZT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTtlLmluaXRpYWxDb25maWc9V3ModCxpPT57bGV0e2NvbHVtbjphLC4uLmN9PWk7cmV0dXJue2Nv''@;'; put 'put ''bHVtbjp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLC4uLmN9fSksdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJjb2x1bW5Tb3J0aW5nIixlKX1nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpe2NvbnN0IHQ9e307dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3Rl''@;'; put 'put ''bnRTdGF0ZUxvYWQiLCJjb2x1bW5Tb3J0aW5nIix0KTtjb25zdCBlPXQudmFsdWU7cmV0dXJuIHdhKGUpJiZBcnJheS5pc0FycmF5KGUuaW5pdGlhbENvbmZpZykmJihlLmluaXRpYWxDb25maWc9V3MoZS5pbml0aWFsQ29uZmlnLGk9PntsZXR7Y29sdW1uOmEsLi4uY309aTtyZXR1cm57Y29s''@;'; put 'put ''dW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpLC4uLmN9fSkpLGV9Z2V0Q29sdW1uTmV4dENvbmZpZyh0KXtjb25zdCBlPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbih0KTtpZih3YShlKSl7Y29uc3QgaT13N2UoZSk7cmV0dXJuIHdhKGkpP3tjb2x1''@;'; put 'put ''bW46dCxzb3J0T3JkZXI6aX06dm9pZCAwfWNvbnN0IHI9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCYmdDxyKXJldHVybntjb2x1bW46dCxzb3J0T3JkZXI6dzdlKCl9fWdldE5leHRTb3J0Q29uZmlnKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpGVjtjb25zdCByPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUodCksaT0tMSE9PXIsYT10aGlzLmdldFNvcnRDb25maWcoKSxjPXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyh0''@;'; put 'put ''KTtpZihpKXtpZihtYyhjKSlyZXR1cm5bLi4uYS5zbGljZSgwLHIpLC4uLmEuc2xpY2UocisxKV07aWYoZT09PUZWKXJldHVyblsuLi5hLnNsaWNlKDAsciksLi4uYS5zbGljZShyKzEpLGNdO2lmKCJyZXBsYWNlIj09PWUpcmV0dXJuWy4uLmEuc2xpY2UoMCxyKSxjLC4uLmEuc2xpY2Uocisx''@;'; put 'put ''KV19cmV0dXJuIHdhKGMpP2EuY29uY2F0KGMpOmF9Z2V0UGx1Z2luQ29sdW1uQ29uZmlnKHQpe2lmKGhvKHQpKXtjb25zdCBlPXRbdGhpcy5wbHVnaW5LZXldO2lmKGhvKGUpKXJldHVybiBlfXJldHVybnt9fWdldE1lcmdlZFBsdWdpblNldHRpbmdzKHQpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0scj10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKSxpPXRoaXMuaG90LmdldENlbGxNZXRhKDAsdCksYT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoYS5jb2x1bW5z''@;'; put 'put ''KT9PYmplY3QuYXNzaWduKHIsZSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhhLmNvbHVtbnNbdF0pKTphbChhLmNvbHVtbnMpP09iamVjdC5hc3NpZ24ocixlLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGEuY29sdW1ucyh0KSkpOk9iamVjdC5hc3NpZ24ocixlKX1nZXRGaXJzdENl''@;'; put 'put ''bGxTZXR0aW5ncyh0KXtjb25zdCBlPXRoaXMuaG90LmdldENlbGxNZXRhKDAsdCkscj1PYmplY3QuY3JlYXRlKGUpO3JldHVybiByW3RoaXMucGx1Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0KSkscn1nZXRO''@;'; put 'put ''dW1iZXJPZlJvd3NUb1NvcnQodCl7Y29uc3QgZT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3JldHVybiBlLm1heFJvd3M8PXQ/ZS5tYXhSb3dzOnQtZS5taW5TcGFyZVJvd3N9c29ydEJ5UHJlc2V0U29ydFN0YXRlcyh0KXtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2Vx''@;'; put 'put ''dWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSksMD09PXQubGVuZ3RoKXJldHVybjtjb25zdCBlPVtdLHI9dGhpcy5ob3QuY291bnRSb3dzKCksaT1QPT5Xcyh0LFk9PnRoaXMuaG90LmdldERhdGFBdENlbGwoUCxZLmNvbHVtbikpO2ZvcihsZXQgUD0wO1A8dGhp''@;'; put 'put ''cy5nZXROdW1iZXJPZlJvd3NUb1NvcnQocik7UCs9MSllLnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coUCldLmNvbmNhdChpKFApKSk7Y29uc3QgYT1XcyhlLFA9PlBbMF0pOyFmdW5jdGlvbiB2cHQobix0KXtjb25zdCBlPW1wdCh0KTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxp''@;'; put 'put ''PW5ldyBBcnJheShyPjI/ci0yOjApLGE9MjthPHI7YSsrKWlbYS0yXT1hcmd1bWVudHNbYV07bi5zb3J0KGUoLi4uaSkpfShlLHRoaXMucGx1Z2luS2V5LFdzKHQsUD0+UC5zb3J0T3JkZXIpLFdzKHQsUD0+dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhQLmNvbHVtbikpKTtmb3IobGV0IFA9''@;'; put 'put ''ZS5sZW5ndGg7UDxyO1ArPTEpZS5wdXNoKFtQXS5jb25jYXQoaShQKSkpO2NvbnN0IGM9V3MoZSxQPT5QWzBdKSxtPW5ldyBNYXAoV3MoYSwoUCxZKT0+W1AsY1tZXV0pKSxDPVdzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLFA9Pm0uaGFzKFApP20uZ2V0''@;'; put 'put ''KFApOlApO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShDKX1zb3J0QnlTZXR0aW5ncyh0KXtpZihobyh0KSl7dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKHQpO2NvbnN0IGU9dC5pbml0aWFsQ29uZmlnOyhBcnJh''@;'; put 'put ''eS5pc0FycmF5KGUpfHxobyhlKSkmJnRoaXMuc29ydChlKX1lbHNlIHRoaXMuaG90LnJlbmRlcigpfXVwZGF0ZUhlYWRlckNsYXNzZXModCl7aWYoSGEodCxmdW5jdGlvbiBNcHQoKXtyZXR1cm4gQXJyYXkuZnJvbShBN2UudmFsdWVzKCkpLmNvbmNhdChUN2UseDdlLEU3ZSl9KCkpLCExIT09''@;'; put 'put ''dGhpcy5lbmFibGVkKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlPjE/ZS0xOjApLGk9MTtpPGU7aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07dGkodCxmdW5jdGlvbiBTcHQobix0LGUscil7Y29uc3QgaT1bRTdlXTtpZihyJiZpLnB1c2goVDdlKSwhMT09PWUpcmV0''@;'; put 'put ''dXJuIGkucHVzaCh4N2UpLGk7Y29uc3QgYT1uLmdldFNvcnRPcmRlck9mQ29sdW1uKHQpO3JldHVybiB3YShhKSYmaS5wdXNoKEE3ZS5nZXQoYSkpLGl9KC4uLnIpKX19b25VcGRhdGVTZXR0aW5ncyh0KXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKHQpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFD''@;'; put 'put ''YWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksd2EodFt0aGlzLnBsdWdpbktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKHRbdGhpcy5wbHVnaW5LZXldKX13YXNDbGlja2FibGVIZWFkZXJDbGlj''@;'; put 'put ''a2VkKHQsZSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoZSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmdm8odC50YXJnZXQsImNvbEhlYWRlciIpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24odCxlKXtpZighMSE9PWJuZShlLnJvdyxlLmNvbCx0KSYmdGhpcy53YXND''@;'; put 'put ''bGlja2FibGVIZWFkZXJDbGlja2VkKHQsZS5jb2wpKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGUuY29sKSk7Y29uc3Qgcj10aGlzLmhvdC5nZXRBY3RpdmVFZGl0''@;'; put 'put ''b3IoKSxpPXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhlLmNvbCk7bnVsbCE9ciYmci5pc09wZW5lZCgpJiZ0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKHIucm93LHIuY29sKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLCgpPT57dGhpcy5zb3J0KGkpfSk6dGhp''@;'; put 'put ''cy5zb3J0KGkpfX1kZXN0cm95KCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PXR8fHQuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gd25lKCl7Y29uc3Qgbj10aGlzLmdldEFsbFNhdmVkU29ydFNldHRpbmdzKCk7aWYoaG8o''@;'; put 'put ''bikpdGhpcy5zb3J0QnlTZXR0aW5ncyhuKTtlbHNle2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV07dGhpcy5zb3J0QnlTZXR0aW5ncyh0KX19ZnVuY3Rpb24gUnB0KG4sdCl7Y29uc3QgZT1DN2UodCk7aWYoITE9PT1TN2Uobix0KXx8bnVsbD09PWUpcmV0''@;'; put 'put ''dXJuO2NvbnN0IHI9dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhuKVt0aGlzLnBsdWdpbktleV07aWYodGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGUsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLG4sci5pbmRpY2F0b3Isci5oZWFkZXJBY3Rpb24pLHRoaXMuaG90LmdldFNldHRpbmdzKCku''@;'; put 'put ''YXJpYVRhZ3Mpe2NvbnN0IGM9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9mQ29sdW1uKG4pO1phKHQsLi4uKG49PlsiYXJpYS1zb3J0IixuXSkoYz9gJHtjfWVuZGluZ2A6Im5vbmUiKSl9fWZ1bmN0aW9uIExwdChuKXshMD09PW4mJnRoaXMuaG90LnZpZXcmJlFDKGl5''@;'; put 'put ''LHRoaXMsd25lKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIE9wdChuLHQsZSxyKXshMSE9PWJuZSh0LnJvdyx0LmNvbCxuKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKG4sdC5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihyLmNvbHVt''@;'; put 'put ''bj0hMCl9ZnVuY3Rpb24gQ25lKG4pe3JldHVybiBudWxsPT1ufHxpc05hTihuKX1mdW5jdGlvbiBheShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRnB0KG4pe3ZhciB0PWZ1bmN0aW9uIEhwdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0''@;'; put 'put ''XT1lLG59Y29uc3QgVnB0PWNsYXNzIE5wdHtjb25zdHJ1Y3Rvcih0LGUpe2F5KHRoaXMsInBsdWdpbiIsdm9pZCAwKSxheSh0aGlzLCJob3QiLHZvaWQgMCksYXkodGhpcywiZW5kcG9pbnRzIixbXSksYXkodGhpcywic2V0dGluZ3MiLHZvaWQgMCksYXkodGhpcywic2V0dGluZ3NUeXBlIiwi''@;'; put 'put ''YXJyYXkiKSxheSh0aGlzLCJjdXJyZW50RW5kcG9pbnQiLG51bGwpLGF5KHRoaXMsImNlbGxzVG9TZXRDYWNoZSIsW10pLHRoaXMucGx1Z2luPXQsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuc2V0dGluZ3M9ZX1pbml0RW5kcG9pbnRzKCl7dGhpcy5lbmRwb2ludHM9dGhpcy5wYXJz''@;'; put 'put ''ZVNldHRpbmdzKCksdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Z2V0RW5kcG9pbnQodCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbdF06dGhpcy5lbmRwb2ludHNbdF19Z2V0QWxsRW5k''@;'; put 'put ''cG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyh0LmNhbGwo''@;'; put 'put ''dGhpcykpfXBhcnNlU2V0dGluZ3ModCl7Y29uc3QgZT1bXTtsZXQgcj10O2lmKHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiByfHwocj10aGlzLnNldHRpbmdzKSxZbihyLGk9Pntjb25zdCBhPXt9O3RoaXMuYXNzaWduU2V0dGluZyhpLGEsInJhbmdlcyIsW1sw''@;'; put 'put ''LHRoaXMuaG90LmNvdW50Um93cygpLTFdXSksdGhpcy5hc3NpZ25TZXR0aW5nKGksYSwicmV2ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaSxhLCJkZXN0aW5hdGlvblJvdyIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9u''@;'; put 'put ''IHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhpLGEsImRlc3RpbmF0aW9uQ29sdW1uIixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRp''@;'; put 'put ''b24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGksYSwic291cmNlQ29sdW1uIixpLmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaSxhLCJ0eXBl''@;'; put 'put ''Iiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5nKGksYSwiZm9yY2VOdW1lcmljIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGksYSwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhpLGEsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRp''@;'; put 'put ''bmcoaSxhLCJyZWFkT25seSIsITApLHRoaXMuYXNzaWduU2V0dGluZyhpLGEsInJvdW5kRmxvYXQiLCExKSxlLnB1c2goYSl9KSxlO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGluZyh0LGUscixpKXtpZigicmFuZ2VzIiE9PXJ8fHZvaWQgMCE9PXRbcl0pe2lmKCJy''@;'; put 'put ''YW5nZXMiIT09cnx8MCE9PXRbcl0ubGVuZ3RoKWlmKHZvaWQgMD09PXRbcl0pe2lmKGkgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBpO2Vbcl09aX1lbHNlIGVbcl09ImRlc3RpbmF0aW9uUm93Ij09PXImJmUucmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktdFtyXS0xOnRb''@;'; put 'put ''cl19ZWxzZSBlW3JdPWl9cmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24odCxlLHIpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaT10LmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLGE9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtZ''@;'; put 'put ''bihhLGM9Pnsicm93Ij09PWkmJmMuZGVzdGluYXRpb25Sb3c+PWUmJigiaW5zZXJ0X3JvdyI9PT10P2MuYWx0ZXJSb3dPZmZzZXQ9cjoicmVtb3ZlX3JvdyI9PT10JiYoYy5hbHRlclJvd09mZnNldD0tMSpyKSksImNvbCI9PT1pJiZjLmRlc3RpbmF0aW9uQ29sdW1uPj1lJiYoImluc2VydF9j''@;'; put 'put ''b2wiPT09dD9jLmFsdGVyQ29sdW1uT2Zmc2V0PXI6InJlbW92ZV9jb2wiPT09dCYmKGMuYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqcikpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhhLCExKX1yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKHQsZSxyLGksYSl7bGV0IGM9IShhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtpZigiYXV0byI9PT1hKXJldHVybjtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IGNlPSgpPT4odGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlVmlld1JlbmRlciIsY2Up''@;'; put 'put ''LHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhvdC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsY2UpfWNvbnN0IG09dC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixDPXQuaW5kZXhPZigicmVtb3ZlIik+LTE/LTE6MSxQPXRoaXMuZ2V0''@;'; put 'put ''QWxsRW5kcG9pbnRzKCksWT0wPT09dC5pbmRleE9mKCJtb3ZlX3JvdyIpLEo9ZTtZbihQLGNlPT57InJvdyI9PT1tJiZjZS5kZXN0aW5hdGlvblJvdz49SiYmKGNlLmFsdGVyUm93T2Zmc2V0PUMqciksImNvbCI9PT1tJiZjZS5kZXN0aW5hdGlvbkNvbHVtbj49SiYmKGNlLmFsdGVyQ29sdW1u''@;'; put 'put ''T2Zmc2V0PUMqcil9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKFAsIVkpLFluKFAsWT9jZT0+e3RoaXMuZXh0ZW5kRW5kcG9pbnRSYW5nZXMoY2UsSixpWzBdLGkubGVuZ3RoKSx0aGlzLnJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoY2UpLHRoaXMuY2xlYXJPZmZzZXRJbmZvcm1hdGlvbihjZSl9''@;'; put 'put ''OmNlPT57dGhpcy5zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoY2UsSil9KSxjJiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKHQpe3QuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLHQuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50''@;'; put 'put ''UmFuZ2VzKHQsZSxyLGkpe1luKHQucmFuZ2VzLGE9PnthWzFdJiYoZT49YVswXSYmZTw9YVsxXT9yPmFbMV0/YVsxXSs9aTpyPGFbMF0mJihhWzBdLT1pKTpyPj1hWzBdJiZyPD1hWzFdJiYoYVsxXS09aSxlPD1hWzBdJiYoYVswXSs9MSxhWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJh''@;'; put 'put ''bmdlcyh0KXtjb25zdCByPVtdLGk9W107WW4odC5yYW5nZXMsYT0+e2NvbnN0IGM9W107aWYoYVsxXSlmb3IobGV0IG09YVswXTttPD1hWzFdO20rKyljLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhtKSk7ZWxzZSBjLnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhWzBdKSk7aS5w''@;'; put 'put ''dXNoKGMpfSksWW4oaSxhPT57bGV0IGM9W107WW4oYSwobSxDKT0+ezA9PT1DP2MucHVzaChtKTphW0NdIT09YVtDLTFdKzEmJihjLnB1c2goYVtDLTFdKSxyLnB1c2goYyksYz1bXSxjLnB1c2gobSkpLEM9PT1hLmxlbmd0aC0xJiYoYy5wdXNoKG0pLHIucHVzaChjKSl9KX0pLHQucmFuZ2Vz''@;'; put 'put ''PXJ9c2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKHQsZSl7dC5hbHRlclJvd09mZnNldCYmMCE9PXQuYWx0ZXJSb3dPZmZzZXQ/KHQuZGVzdGluYXRpb25Sb3crPXQuYWx0ZXJSb3dPZmZzZXR8fDAsWW4odC5yYW5nZXMscj0+e1luKHIsKGksYSk9PntpPj1lJiYoclthXSs9dC5hbHRlclJvd09m''@;'; put 'put ''ZnNldHx8MCl9KX0pKTp0LmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09dC5hbHRlckNvbHVtbk9mZnNldCYmKHQuZGVzdGluYXRpb25Db2x1bW4rPXQuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsdC5zb3VyY2VDb2x1bW4rPXQuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7''@;'; put 'put ''bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3Quc29tZShpPT57Y29uc3QgYz1p''@;'; put 'put ''LmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3JldHVybiBpLmRlc3RpbmF0aW9uUm93KyhpLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGkuZGVzdGluYXRpb25Db2x1bW4rYz49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLFlu''@;'; put 'put ''KHQsaT0+e3RoaXMucmVzZXRFbmRwb2ludFZhbHVlKGksZSl9KSx0aGlzLmNlbGxzVG9TZXRDYWNoZS5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSl9cmVmcmVz''@;'; put 'put ''aEFsbEVuZHBvaW50cygpe3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLFluKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksdD0+e3RoaXMuY3VycmVudEVuZHBvaW50PXQsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKHQpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZSh0LCJpbml0Iil9KSx0aGlzLmN1cnJlbnRF''@;'; put 'put ''bmRwb2ludD1udWxsLHRoaXMuY2VsbHNUb1NldENhY2hlLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKHQpe2NvbnN0''@;'; put 'put ''IGU9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWW4odCwocixpLGEpPT57YCR7clsyXXx8IiJ9YCE9YCR7clszXX1gJiZZbih0aGlzLmdldEFsbEVuZHBvaW50cygpLChjLG0pPT57dGhpcy5ob3QucHJvcFRvQ29sKGFbaV1bMV0pPT09Yy5zb3VyY2VDb2x1bW4mJi0xPT09ZS5pbmRleE9m''@;'; put 'put ''KG0pJiZlLnB1c2gobSl9KX0pLFluKGUscj0+e3RoaXMucmVmcmVzaEVuZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQocikpfSksdGhpcy5jZWxsc1RvU2V0Q2FjaGUubGVuZ3RoJiZ0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0''@;'; put 'put ''IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENlbGxNZXRhcygpe3RoaXMuZW5kcG9pbnRzLmZvckVhY2godD0+e2NvbnN0IGU9dGhpcy5ob3QudG9WaXN1YWxSb3codC5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PWUpe2NvbnN0IHI9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZSx0''@;'; put 'put ''LmRlc3RpbmF0aW9uQ29sdW1uKTtyLnJlYWRPbmx5PXQucmVhZE9ubHksci5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQifX0pfXJlZnJlc2hFbmRwb2ludCh0KXt0aGlzLmN1cnJlbnRFbmRwb2ludD10LHRoaXMucGx1Z2luLmNhbGN1bGF0ZSh0KSx0aGlzLnNldEVuZHBvaW50VmFs''@;'; put 'put ''dWUodCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUodCl7bGV0IGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBpPXQuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0''@;'; put 'put ''Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3codC5kZXN0aW5hdGlvblJvdysoZSYmdC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHQuZGVzdGluYXRpb25Db2x1bW4rKGU/aTowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKHQsZSl7bGV0IHI9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBpPXRoaXMuaG90LnRvVmlzdWFsUm93KHQuZGVzdGluYXRpb25Sb3cpO2lmKHQuZGVzdGluYXRpb25Sb3c+PXRoaXMuaG90LmNvdW50Um93cygpfHx0LmRlc3RpbmF0aW9uQ29sdW1uPj10''@;'; put 'put ''aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbFJvdyh0LmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09YSl7Y29uc3QgYz10aGlzLmhvdC5nZXRDZWxsTWV0YShhLHQuZGVzdGluYXRp''@;'; put 'put ''b25Db2x1bW4pOygiaW5pdCI9PT1lfHxjLnJlYWRPbmx5IT09dC5yZWFkT25seSkmJihjLnJlYWRPbmx5PXQucmVhZE9ubHksYy5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQiKX10LnJlc3VsdD1mdW5jdGlvbiBQcHQobix0KXtpZigibnVtYmVyIiE9dHlwZW9mIG4pcmV0dXJuIG47''@;'; put 'put ''Y29uc3QgZT1yPT5yLnRvU3RyaW5nKCk7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIm51bWJlciI6cmV0dXJuIGUobi50b0ZpeGVkKE1hdGgubWluKE1hdGgubWF4KDAsdCksMTAwKSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIHQ/ZShNYXRoLnJvdW5kKG4pKTpuO2Nhc2Uic3RyaW5nIjppZigiYXV0''@;'; put 'put ''byI9PT10KXtjb25zdCByPU1hdGgucm91bmQobikudG9TdHJpbmcoKS5sZW5ndGg7cmV0dXJuIGUobi50b0ZpeGVkKDgtcikpfXJldHVybiBuO2RlZmF1bHQ6cmV0dXJuIG59fSh0LnJlc3VsdCx0LnJvdW5kRmxvYXQpLHI/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChpLHQuZGVzdGluYXRpb25D''@;'; put 'put ''b2x1bW4sdC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaSx0LmRlc3RpbmF0aW9uQ29sdW1uLHQucmVzdWx0XSksdC5hbHRlclJvd09mZnNldD12b2lkIDAsdC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dh''@;'; put 'put ''cm5pbmcoKXtvcygiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcyEiKX19O2Z1bmN0aW9uIGVTKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpu''@;'; put 'put ''Lmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBTbmU9ImNvbHVtblN1bW1hcnkiO3ZhciBveT1uZXcgV2Vha1NldDtjbGFzcyBZcHQgZXh0''@;'; put 'put ''ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gQnB0KG4sdCl7KGZ1bmN0aW9uIGpwdChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24g''@;'; put 'put ''YW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSh0aGlzLG95KSxmdW5jdGlvbiB6cHQobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIFVwdChuKXt2YXIgdD1mdW5jdGlvbiBXcHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0''@;'; put 'put ''aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09''@;'; put 'put ''PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSh0''@;'; put 'put ''aGlzLCJlbmRwb2ludHMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBTbmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtTbmVdfWVuYWJsZVBsdWdpbigpe3ZhciB0''@;'; put 'put ''PXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1NuZV0sdGhpcy5lbmRwb2ludHM9bmV3IFZwdCh0aGlzLHRoaXMuc2V0dGluZ3MpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBlUyhveSx0LEdwdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxp''@;'; put 'put ''PTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gZVMob3ksdCxLcHQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKyly''@;'; put 'put ''W2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gZVMob3ksdCwkcHQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTty''@;'; put 'put ''ZXR1cm4gZVMob3ksdCxYcHQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBlUyhveSx0LHFw''@;'; put 'put ''dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLChlLHIsaSk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixlLHIsbnVsbCxpKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wi''@;'; put 'put ''LChlLHIsaSk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixlLHIsbnVsbCxpKSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJy''@;'; put 'put ''YXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIHQuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiB0LmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4ucil9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93''@;'; put 'put ''IiwoZSxyLGkpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixlLHIsbnVsbCxpKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGUscixpKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJl''@;'; put 'put ''QWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsZSxyLG51bGwsaSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIHQuZW5kcG9p''@;'; put 'put ''bnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3Vt''@;'; put 'put ''ZW50c1tpXTtyZXR1cm4gdC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4ucil9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxp''@;'; put 'put ''PTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gZVMob3ksdCxKcHQpLmNhbGwodCwuLi5yKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5lbmRwb2ludHM9bnVsbCx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVs''@;'; put 'put ''bCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9Y2FsY3VsYXRlKHQpe3N3aXRjaCh0LnR5cGUudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSl7Y2FzZSJzdW0iOnQucmVzdWx0PXRoaXMuY2FsY3VsYXRlU3VtKHQpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6dC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgodCx0LnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOnQucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKHQpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiYXZlcmFnZSI6dC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKHQpO2JyZWFrO2Nhc2UiY3VzdG9tIjp0LnJlc3VsdD10LmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyx0KX19Y2FsY3VsYXRlU3VtKHQpe2xldCBlPTA7cmV0dXJuIGFzKHQucmFuZ2VzLHI9PntlKz10aGlz''@;'; put 'put ''LmdldFBhcnRpYWxTdW0ocix0LnNvdXJjZUNvbHVtbil9KSxlfWdldFBhcnRpYWxTdW0odCxlKXtsZXQgcj0wLGk9dFsxXXx8dFswXSxhPW51bGwsYz0wO2Rve2lmKGE9dGhpcy5nZXRDZWxsVmFsdWUoaSxlKSxhPUNuZShhKT9udWxsOmEsbnVsbCE9PWEpe2NvbnN0IG09KGAke2F9YC5zcGxp''@;'; put 'put ''dCgiLiIpWzFdfHxbXSkubGVuZ3RofHwxO20+YyYmKGM9bSl9cis9YXx8MCxpLT0xfXdoaWxlKGk+PXRbMF0pO3JldHVybiBNYXRoLnJvdW5kKHIqMTAqKmMpLzEwKipjfWNhbGN1bGF0ZU1pbk1heCh0LGUpe2xldCByPW51bGw7cmV0dXJuIGFzKHQucmFuZ2VzLGk9Pntjb25zdCBhPXRoaXMu''@;'; put 'put ''Z2V0UGFydGlhbE1pbk1heChpLHQuc291cmNlQ29sdW1uLGUpO2lmKG51bGw9PT1yJiZudWxsIT09YSYmKHI9YSksbnVsbCE9PWEpc3dpdGNoKGUpe2Nhc2UibWluIjpyPU1hdGgubWluKHIsYSk7YnJlYWs7Y2FzZSJtYXgiOnI9TWF0aC5tYXgocixhKX19KSxudWxsPT09cj8iTm90IGVub3Vn''@;'; put 'put ''aCBkYXRhIjpyfWdldFBhcnRpYWxNaW5NYXgodCxlLHIpe2xldCBjLGk9bnVsbCxhPXRbMV18fHRbMF07ZG97aWYoYz10aGlzLmdldENlbGxWYWx1ZShhLGUpLGM9Q25lKGMpP251bGw6YyxudWxsPT09aSlpPWM7ZWxzZSBpZihudWxsIT09Yylzd2l0Y2gocil7Y2FzZSJtaW4iOmk9TWF0aC5t''@;'; put 'put ''aW4oaSxjKTticmVhaztjYXNlIm1heCI6aT1NYXRoLm1heChpLGMpfWEtPTF9d2hpbGUoYT49dFswXSk7cmV0dXJuIGl9Y291bnRFbXB0eSh0LGUpe2xldCByLGk9MCxhPXRbMV18fHRbMF07ZG97cj10aGlzLmdldENlbGxWYWx1ZShhLGUpLHI9Q25lKHIpP251bGw6cixudWxsPT09ciYmKGkr''@;'; put 'put ''PTEpLGEtPTF9d2hpbGUoYT49dFswXSk7cmV0dXJuIGl9Y291bnRFbnRyaWVzKHQpe2xldCBlPTA7cmV0dXJuIGFzKHQucmFuZ2VzLGk9Pntjb25zdCBhPXZvaWQgMD09PWlbMV0/MTppWzFdLWlbMF0rMSxjPXRoaXMuY291bnRFbXB0eShpLHQuc291cmNlQ29sdW1uKTtlKz1hLGUtPWN9KSxl''@;'; put 'put ''fWNhbGN1bGF0ZUF2ZXJhZ2UodCl7cmV0dXJuIHRoaXMuY2FsY3VsYXRlU3VtKHQpL3RoaXMuY291bnRFbnRyaWVzKHQpfWdldENlbGxWYWx1ZSh0LGUpe2NvbnN0IHI9dGhpcy5ob3QudG9WaXN1YWxSb3codCksaT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihlKTtsZXQgYT10aGlzLmhvdC5n''@;'; put 'put ''ZXRTb3VyY2VEYXRhQXRDZWxsKHQsZSksYz0iIjtpZihudWxsIT09ciYmbnVsbCE9PWkmJihjPXRoaXMuaG90LmdldENlbGxNZXRhKHIsaSkuY2xhc3NOYW1lfHwiIiksYy5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3Vy''@;'; put 'put ''cmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYmKCJzdHJpbmciPT10eXBlb2YgYSYmKGE9YS5yZXBsYWNlKC8sLywiLiIpKSxhPXBhcnNlRmxvYXQoYSkpLGlzTmFOKGEpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKGVsYENvbHVtblN1bW1hcnkgcGx1Z2luOiBjZWxsIGF0ICgke3R9LCAke2V9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBhfX1mdW5jdGlvbiBHcHQoKXt0aGlzLmVuZHBvaW50cy5pbml0''@;'; put 'put ''RW5kcG9pbnRzKCl9ZnVuY3Rpb24gJHB0KG4pe3ZvaWQgMCE9PW4uY29sdW1ucyYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENlbGxNZXRhcygpfWZ1bmN0aW9uIEtwdChuLHQpe24mJiJDb2x1bW5TdW1tYXJ5LnJlc2V0IiE9PXQmJiJDb2x1bW5TdW1tYXJ5LnNldCIhPT10JiYibG9hZERhdGEi''@;'; put 'put ''IT09dCYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENoYW5nZWRFbmRwb2ludHMobil9ZnVuY3Rpb24gWHB0KG4sdCl7dHx8dGhpcy5lbmRwb2ludHMucmVmcmVzaEFsbEVuZHBvaW50cygpfWZ1bmN0aW9uIHFwdChuLHQpe3R8fHRoaXMuZW5kcG9pbnRzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1m''@;'; put 'put ''dW5jdGlvbiBKcHQobix0KXt0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLG5bMF0sbi5sZW5ndGgsbix0aGlzLnBsdWdpbk5hbWUpLHRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oIm1v''@;'; put 'put ''dmVfcm93Iix0LG4ubGVuZ3RoLG4sdGhpcy5wbHVnaW5OYW1lKX1mdW5jdGlvbiBNbmUobix0LGUpe0k3ZShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gSTdlKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBl''@;'; put 'put ''bGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB0UyhuLHQpe3JldHVybiBuLmdldChFbmUobix0KSl9ZnVuY3Rpb24geG5lKG4sdCxlKXtyZXR1cm4gbi5zZXQoRW5lKG4sdCksZSksZX1mdW5jdGlvbiBFbmUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10''@;'; put 'put ''Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBIVj1uZXcgV2Vha01hcCxOVj1uZXcgV2Vha01hcCxWVj1uZXcgV2Vha01hcCxSN2U9bmV3''@;'; put 'put ''IFdlYWtTZXQ7Y2xhc3MgTDdle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIFFwdChuLHQpe0k3ZShuLHQpLHQuYWRkKG4pfSkodGhpcyxSN2UpLE1uZSh0aGlzLEhWLCEwKSxNbmUodGhpcyxOVixudWxsKSxNbmUodGhpcyxWVixuZXcgUmVzaXplT2JzZXJ2ZXIodD0+RW5lKFI3ZSx0aGlzLGU0''@;'; put 'put ''dCkuY2FsbCh0aGlzLHQpKSl9c2V0T2JzZXJ2ZWRFbGVtZW50KHQpe3huZShOVix0aGlzLHQpfXVub2JzZXJ2ZSgpe3RTKFZWLHRoaXMpLnVub2JzZXJ2ZSh0UyhOVix0aGlzKSl9b2JzZXJ2ZSgpe3huZShIVix0aGlzLCEwKSx0UyhWVix0aGlzKS5vYnNlcnZlKHRTKE5WLHRoaXMpKX1kZXN0''@;'; put 'put ''cm95KCl7dFMoVlYsdGhpcykuZGlzY29ubmVjdCgpfX1mdW5jdGlvbiBlNHQobil7IXRTKEhWLHRoaXMpJiZBcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD9uLmZvckVhY2godD0+e2xldHtib3JkZXJCb3hTaXplOmV9PXQ7Y29uc3R7aW5saW5lU2l6ZTpyLGJsb2NrU2l6ZTppfT1lWzBdO3Ro''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygicmVzaXplIixyLGkpfSk6eG5lKEhWLHRoaXMsITEpfWZ1bmN0aW9uIG04KG4sdCxlKXsoZnVuY3Rpb24gdDR0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBabChuLHQpe3JldHVybiBuLmdldChPN2Uobix0KSl9ZnVuY3Rpb24gVjQobix0LGUpe3JldHVybiBuLnNldChPN2Uobix0KSxlKSxlfWZ1bmN0aW9uIE83ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9cGwoTDdlLCQwKTt2YXIgblM9bmV3IFdlYWtNYXAsVG5lPW5ldyBXZWFrTWFwLEFu''@;'; put 'put ''ZT1uZXcgV2Vha01hcCxBNT1uZXcgV2Vha01hcCx2OD1uZXcgV2Vha01hcCx5OD1uZXcgV2Vha01hcCxCVj1uZXcgV2Vha01hcCxyUz1uZXcgV2Vha01hcDtjbGFzcyBzeXtzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3Rh''@;'; put 'put ''dGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRDb21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKHQsZSxyKXt2YXIgaT10''@;'; put 'put ''aGlzO204KHRoaXMsblMsdm9pZCAwKSxtOCh0aGlzLFRuZSx2b2lkIDApLG04KHRoaXMsQW5lLCExKSxtOCh0aGlzLEE1LG51bGwpLG04KHRoaXMsdjgsdm9pZCAwKSxtOCh0aGlzLHk4LHZvaWQgMCksbTgodGhpcyxCViwhMCksbTgodGhpcyxyUyxuZXcgTDdlKSxWNChuUyx0aGlzLHQpLFY0''@;'; put 'put ''KFRuZSx0aGlzLHIpLFY0KEFuZSx0aGlzLGUpLFY0KHY4LHRoaXMsdGhpcy5jcmVhdGVFZGl0b3IoKSksVjQoeTgsdGhpcyxabCh2OCx0aGlzKS5zdHlsZSksWmwoclMsdGhpcykuc2V0T2JzZXJ2ZWRFbGVtZW50KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLFpsKHJTLHRoaXMpLmFkZExvY2Fs''@;'; put 'put ''SG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KGEpLG09MDttPGE7bSsrKWNbbV09YXJndW1lbnRzW21dO3JldHVybiBpLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsLi4uYyl9KSx0aGlzLmhpZGUoKX1zZXRQb3NpdGlvbih0LGUp''@;'; put 'put ''e1psKHk4LHRoaXMpLmxlZnQ9YCR7dH1weGAsWmwoeTgsdGhpcykudG9wPWAke2V9cHhgfXNldFNpemUodCxlKXtpZih0JiZlKXtjb25zdCByPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7ci5zdHlsZS53aWR0aD1gJHt0fXB4YCxyLnN0eWxlLmhlaWdodD1gJHtlfXB4YH19Z2V0U2l6ZSgpe3Jl''@;'; put 'put ''dHVybnt3aWR0aDpwdSh0aGlzLmdldElucHV0RWxlbWVudCgpKSxoZWlnaHQ6SHUodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9fW9ic2VydmVTaXplKCl7WmwoclMsdGhpcykub2JzZXJ2ZSgpfXJlc2V0U2l6ZSgpe2NvbnN0IHQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTt0LnN0eWxlLndpZHRo''@;'; put 'put ''PSIiLHQuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5U3RhdGUodCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT10fXNob3coKXtabCh5OCx0aGlzKS5kaXNwbGF5PSJibG9jayIsVjQoQlYsdGhpcywhMSl9aGlkZSgpe1psKHJTLHRoaXMpLnVub2JzZXJ2ZSgpLFpsKEJWLHRo''@;'; put 'put ''aXMpfHwoWmwoeTgsdGhpcykuZGlzcGxheT0ibm9uZSIpLFY0KEJWLHRoaXMsITApfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT1abCh5OCx0aGlzKS5kaXNwbGF5fXNldFZhbHVlKCl7Y29uc3QgZT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT1lfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0dXJuIFpsKG5TLHRoaXMpLmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZv''@;'; put 'put ''Y3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVkaXRvcigpe2NvbnN0IHQ9WmwoblMsdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1abChuUyx0aGlzKS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiB0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLFY0''@;'; put 'put ''KEE1LHRoaXMsWmwoblMsdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IikpLFpsKEE1LHRoaXMpLnNldEF0dHJpYnV0ZSgiZGlyIixabChBbmUsdGhpcyk/InJ0bCI6Imx0ciIpLHRpKFpsKEE1LHRoaXMpLHN5LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLFpsKFRuZSx0aGlzKS5hcHBlbmRDaGls''@;'; put 'put ''ZChabChBNSx0aGlzKSksdGkodCxzeS5DTEFTU19FRElUT1IpLHRpKGUsc3kuQ0xBU1NfSU5QVVQpLGUuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLHQuYXBwZW5kQ2hpbGQoZSksWmwoQTUsdGhpcykuYXBwZW5kQ2hpbGQodCksdH1nZXRJbnB1dEVsZW1lbnQoKXtyZXR1cm4g''@;'; put 'put ''WmwodjgsdGhpcykucXVlcnlTZWxlY3RvcihgLiR7c3kuQ0xBU1NfSU5QVVR9YCl9Z2V0RWRpdG9yRWxlbWVudCgpe3JldHVybiBabCh2OCx0aGlzKX1kZXN0cm95KCl7Y29uc3QgdD1abChBNSx0aGlzKT9abChBNSx0aGlzKS5wYXJlbnROb2RlOm51bGw7WmwodjgsdGhpcykucGFyZW50Tm9k''@;'; put 'put ''ZS5yZW1vdmVDaGlsZChabCh2OCx0aGlzKSksVjQodjgsdGhpcyxudWxsKSxWNCh5OCx0aGlzLG51bGwpLFpsKHJTLHRoaXMpLmRlc3Ryb3koKSx0JiZ0LnJlbW92ZUNoaWxkKFpsKEE1LHRoaXMpKX19cGwoc3ksJDApO2NvbnN0IG40dD1zeTtmdW5jdGlvbiBrbmUobix0LGUpe3JldHVybih0''@;'; put 'put ''PWZ1bmN0aW9uIHI0dChuKXt2YXIgdD1mdW5jdGlvbiBpNHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9''@;'; put 'put ''KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIFA3ZXtjb25zdHJ1Y3Rvcih0KXtrbmUodGhpcywid2FzTGFzdEFjdGlvblNob3ciLCEwKSxrbmUodGhpcywi''@;'; put 'put ''c2hvd0RlYm91bmNlZCIsbnVsbCksa25lKHRoaXMsImhpZGluZ1RpbWVyIixudWxsKSx0aGlzLnVwZGF0ZURlbGF5KHQpfWhpZGUoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSExLHRoaXMuaGlkaW5nVGltZXI9c2V0VGltZW91dCgoKT0+eyExPT09dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYm''@;'; put 'put ''dGhpcy5ydW5Mb2NhbEhvb2tzKCJoaWRlIil9LDI1MCl9c2hvdyh0KXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZCh0KX1jYW5jZWxIaWRpbmcoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyKSx0aGlz''@;'; put 'put ''LmhpZGluZ1RpbWVyPW51bGx9dXBkYXRlRGVsYXkoKXt0aGlzLnNob3dEZWJvdW5jZWQ9dGsoZT0+e3RoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29rcygic2hvdyIsZS5mcm9tLnJvdyxlLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0/YXJndW1lbnRzWzBdOjI1MCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fXBsKFA3ZSwkMCk7Y29uc3QgczR0PVA3ZSx5cz0iLS0tLS0tLS0tIjtmdW5jdGlvbiBseShuLHQpe2NvbnN0IGU9e307cmV0dXJuIFluKG4scj0+e3IuZm9yQWxsKChpLGEpPT57aT49''@;'; put 'put ''MCYmYT49MCYmKGVbaV18fChlW2ldPVtdKSxlW2ldW2FdPXQoaSxhKSl9KX0pLGV9ZnVuY3Rpb24gXzgobix0LGUscixpKXtZbihuLGE9PnthLmZvckFsbCgoYyxtKT0+e2M+PTAmJm0+PTAmJmZ1bmN0aW9uIGY0dChuLHQsZSxyLGksYSl7Y29uc3QgYz1pKG4sdCk7bGV0IG09cjtjLmNsYXNz''@;'; put 'put ''TmFtZSYmKG09InZlcnRpY2FsIj09PWU/ZnVuY3Rpb24gZDR0KG4sdCl7cmV0dXJuLTEhPT1uLmluZGV4T2YodCk/bjpgJHtuLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7dH1gfShj''@;'; put 'put ''LmNsYXNzTmFtZSxyKTpmdW5jdGlvbiBoNHQobix0KXtyZXR1cm4tMSE9PW4uaW5kZXhPZih0KT9uOmAke24ucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAi''@;'; put 'put ''LCIiKX0gJHt0fWB9KGMuY2xhc3NOYW1lLHIpKSxhKG4sdCwiY2xhc3NOYW1lIixtKX0oYyxtLHQsZSxyLGkpfSl9KX1mdW5jdGlvbiBGN2Uobil7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+XHUyNzEzPC9zcGFuPiR7bn1gfWZ1bmN0aW9uIGpWKG4sdCl7bGV0IGU9ITE7cmV0dXJu''@;'; put 'put ''IEFycmF5LmlzQXJyYXkobikmJlluKG4scj0+KHIuZm9yQWxsKChpLGEpPT57aWYoaT49MCYmYT49MCYmdChpLGEpKXJldHVybiBlPSEwLCExfSksZSkpLGV9ZnVuY3Rpb24gelYobix0KXtjb25zdCBlPXt0b3A6MCxsZWZ0OjB9O2lmKHQhPT1uLm93bmVyRG9jdW1lbnQpe2NvbnN0e2ZyYW1l''@;'; put 'put ''RWxlbWVudDpyfT10LmRlZmF1bHRWaWV3LHt0b3A6aSxsZWZ0OmF9PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS50b3A9aSxlLmxlZnQ9YX1yZXR1cm4gZX1mdW5jdGlvbiBjeShuLHQsZSl7SDdlKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBIN2Uobix0KXtpZih0LmhhcyhuKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEI0KG4sdCxlKXtyZXR1cm4gbi5zZXQoQTAobix0KSxlKSxlfWZ1bmN0aW9uIHNzKG4sdCl7cmV0dXJuIG4uZ2V0KEEwKG4sdCkp''@;'; put 'put ''fWZ1bmN0aW9uIEEwKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBV''@;'; put 'put ''Vj0iY29tbWVudHMiLGs1PSJjb21tZW50IixZaz0idmFsdWUiLE43ZT0ic3R5bGUiLFdWPSJyZWFkT25seSIsR2s9VVYsRG5lPWBwbHVnaW46JHtVVn1gO3ZhciBZbD1uZXcgV2Vha01hcCxqND1uZXcgV2Vha01hcCxaVj1uZXcgV2Vha01hcCxZVj1uZXcgV2Vha01hcCxHVj1uZXcgV2Vha01h''@;'; put 'put ''cCxJbmU9bmV3IFdlYWtNYXAsJFY9bmV3IFdlYWtNYXAsSzA9bmV3IFdlYWtTZXQ7Y2xhc3MgYjR0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGc0dChuLHQpe0g3ZShuLHQpLHQuYWRkKG4pfSh0aGlzLEswKSxmdW5jdGlvbiBtNHQobix0''@;'; put 'put ''LGUpe3JldHVybih0PWZ1bmN0aW9uIHY0dChuKXt2YXIgdD1mdW5jdGlvbiB5NHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSh0aGlzLCJyYW5nZSIse30pLGN5KHRoaXMsWWwsbnVsbCksY3kodGhpcyxqNCxudWxsKSxjeSh0''@;'; put 'put ''aGlzLFpWLCExKSxjeSh0aGlzLFlWLCExKSxjeSh0aGlzLEdWLCExKSxjeSh0aGlzLEluZSxudWxsKSxjeSh0aGlzLCRWLCIiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVVZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNjB9c3RhdGljIGdldCBERUZBVUxU''@;'; put 'put ''X1NFVFRJTkdTKCl7cmV0dXJue2Rpc3BsYXlEZWxheToyNTB9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtVVl19ZW5hYmxlUGx1Z2luKCl7dmFyIHQ9dGhpczt0aGlzLmVuYWJsZWR8fChzcyhZbCx0aGlzKXx8KEI0KFlsLHRoaXMsbmV3IG40dCh0aGlzLmhv''@;'; put 'put ''dC5yb290RG9jdW1lbnQsdGhpcy5ob3QuaXNSdGwoKSx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudCkpLHNzKFlsLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09''@;'; put 'put ''YXJndW1lbnRzW2ldO3JldHVybiBBMChLMCx0LEE0dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGUscik9PntyfHx0aGlzLmhpZGUoKX0pKSxzcyhqNCx0aGlzKXx8QjQoajQsdGhpcyxuZXcgczR0KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURl''@;'; put 'put ''bGF5IikpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZT0+dGhpcy5hZGRUb0NvbnRleHRNZW51KGUpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLChlLHIsaSxhLGMsbSk9PkEwKEswLHRoaXMseDR0KS5jYWxsKHRoaXMsZSxtKSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclNjcm9sbCIsKCk9PkEwKEswLHRoaXMsazR0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+dGhpcy5oaWRlKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGU9PkEwKEswLHRoaXMsVjdlKS5jYWxsKHRo''@;'; put 'put ''aXMsZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsZT0+QTAoSzAsdGhpcyxWN2UpLmNhbGwodGhpcyxlKSksc3MoajQsdGhpcykuYWRkTG9jYWxIb29rKCJoaWRlIiwoKT0+dGhpcy5oaWRlKCkpLHNzKGo0LHRoaXMpLmFkZExvY2FsSG9vaygic2hvdyIsKGUscik9''@;'; put 'put ''PnRoaXMuc2hvd0F0Q2VsbChlLHIpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtzcyhqNCx0aGlzKS51cGRhdGVEZWxheSh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIp''@;'; put 'put ''KSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgdD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKSxlPXQuZ2V0Q29udGV4dCgiZ3Jp''@;'; put 'put ''ZCIpLHI9dC5hZGRDb250ZXh0KERuZSk7ZS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwiQWx0IiwiTSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGk9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO0I0KFlWLHRoaXMsITApLHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENl''@;'; put 'put ''bGwoKCk9Pnt0aGlzLnNldFJhbmdlKGkpLHRoaXMuc2hvdygpLHRoaXMuZm9jdXNFZGl0b3IoKSx0LnNldEFjdGl2ZUNvbnRleHROYW1lKERuZSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e0I0KFlWLHRoaXMsITEpfSl9KX0sc3RvcFByb3BhZ2F0aW9uOiEwLHJ1bk9ubHlJZjoo''@;'; put 'put ''KT0+e3ZhciBpO3JldHVybiBudWxsPT09KGk9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09aT92b2lkIDA6aS5oaWdobGlnaHQuaXNDZWxsKCl9LGdyb3VwOkdrfSksci5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PntzcyhZ''@;'; put 'put ''bCx0aGlzKS5zZXRWYWx1ZShzcygkVix0aGlzKSksdGhpcy5oaWRlKCksdC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxydW5Pbmx5SWY6KCk9PnNzKFlsLHRoaXMpLmlzVmlzaWJsZSgpJiZzcyhZbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDpHa30pLHIuYWRkU2hvcnRjdXQoe2tl''@;'; put 'put ''eXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhpZGUoKSx0LnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+c3MoWWwsdGhpcykuaXNWaXNpYmxlKCkmJnNzKFlsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3VwOkdrfSksci5h''@;'; put 'put ''ZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIlRhYiJdLFsiVGFiIl1dLGZvcndhcmRUb0NvbnRleHQ6dC5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KCk9PntCNChHVix0aGlzLCEwKSxzcyhZbCx0aGlzKS5zZXRWYWx1ZShzcyhZbCx0aGlzKS5nZXRWYWx1ZSgpKSx0aGlzLnNldENv''@;'; put 'put ''bW1lbnQoKSx0aGlzLmhpZGUoKSx0LnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LGdyb3VwOkdrfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEdrKX1yZWdp''@;'; put 'put ''c3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3REb2N1bWVudDp0fT10aGlzLmhvdCxlPXRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZW92ZXIiLHI9PkEwKEswLHRoaXMsUzR0KS5jYWxsKHRoaXMscikpLHRoaXMu''@;'; put 'put ''ZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2Vkb3duIixyPT5BMChLMCx0aGlzLHc0dCkuY2FsbCh0aGlzLHIpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNldXAiLCgpPT5BMChLMCx0aGlzLE00dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVu''@;'; put 'put ''dE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlLCJmb2N1cyIsKCk9PkEwKEswLHRoaXMsVDR0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUsImJsdXIiLCgpPT5BMChLMCx0aGlzLEU0dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcih0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLHI9PkEwKEswLHRoaXMsQzR0KS5jYWxsKHRoaXMscikpfXNldFJhbmdlKHQpe3RoaXMucmFuZ2U9dH1jbGVhclJhbmdlKCl7dGhpcy5yYW5nZT17fX10YXJnZXRJc0NlbGxXaXRoQ29tbWVudCh0''@;'; put 'put ''KXtjb25zdCBlPUs2KHQudGFyZ2V0LCJURCIsIlRCT0RZIik7cmV0dXJuISEoZSYmdm8oZSwiaHRDb21tZW50Q2VsbCIpJiZLNihlLFt0aGlzLmhvdC5yb290RWxlbWVudF0pKX10YXJnZXRJc0NvbW1lbnRUZXh0QXJlYSh0KXtyZXR1cm4gdGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKT09''@;'; put 'put ''PXQudGFyZ2V0fXNldENvbW1lbnQodCl7aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0IGU9c3MoWWwsdGhp''@;'; put 'put ''cykuZ2V0VmFsdWUoKTtsZXQgcj0iIjtudWxsIT10P3I9dDpudWxsIT1lJiYocj1lKTtjb25zdHtyb3c6aSxjb2w6YX09QTAoSzAsdGhpcyxpUykuY2FsbCh0aGlzKTt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKGksYSx7W1lrXTpyfSksdGhpcy5ob3QucmVuZGVyKCl9c2V0Q29tbWVudEF0Q2Vs''@;'; put 'put ''bCh0LGUscil7dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0LGUpfSksdGhpcy5zZXRDb21tZW50KHIpfXJlbW92ZUNvbW1lbnQoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lm''@;'; put 'put ''KCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtyb3c6ZSxjb2w6cn09QTAoSzAsdGhpcyxpUykuY2FsbCh0aGlz''@;'; put 'put ''KTt0aGlzLmhvdC5zZXRDZWxsTWV0YShlLHIsazUpLHQmJnRoaXMuaG90LnJlbmRlcigpLHRoaXMuaGlkZSgpfXJlbW92ZUNvbW1lbnRBdENlbGwodCxlKXtsZXQgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3RoaXMuc2V0UmFu''@;'; put 'put ''Z2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModCxlKX0pLHRoaXMucmVtb3ZlQ29tbWVudChyKX1nZXRDb21tZW50KCl7Y29uc3R7cm93OnQsY29sOmV9PUEwKEswLHRoaXMsaVMpLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEodCxlLFlrKX1nZXRDb21t''@;'; put 'put ''ZW50QXRDZWxsKHQsZSl7cmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEodCxlLFlrKX1zaG93KCl7dmFyIHQ7aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNv''@;'; put 'put ''bW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0e3JvdzplLGNvbDpyfT1BMChLMCx0aGlzLGlTKS5jYWxsKHRoaXMpO2lmKGU8MHx8ZT50aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xfHxyPDB8fHI+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBpPXRoaXMu''@;'; put 'put ''aG90LmdldENlbGxNZXRhKGUscik7cmV0dXJuIHNzKGo0LHRoaXMpLmNhbmNlbEhpZGluZygpLHNzKFlsLHRoaXMpLnNldFZhbHVlKG51bGwhPT0odD1pW2s1XT9pW2s1XVtZa106bnVsbCkmJnZvaWQgMCE9PXQ/dDoiIiksc3MoWWwsdGhpcykuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcigh''@;'; put 'put ''MCksITB9c2hvd0F0Q2VsbCh0LGUpe3JldHVybiB0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQsZSl9KSx0aGlzLnNob3coKX1oaWRlKCl7c3MoWWwsdGhpcykuaGlkZSgpfXJlZnJlc2hFZGl0b3IoKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF18fHRoaXMucmFuZ2UuZnJvbSYmc3MoWWwsdGhpcykuaXNWaXNpYmxlKCkpKXJldHVybjtjb25zdHtyb3dJbmRleE1hcHBlcjplLGNvbHVtbkluZGV4TWFwcGVyOnJ9PXRoaXMuaG90LHtyb3c6aSxjb2w6YX09QTAoSzAsdGhpcyxpUyku''@;'; put 'put ''Y2FsbCh0aGlzKTtsZXQgYz1lLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSksbT1yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYSk7Y29uc3QgQz1udWxsPT09YztzcyhZbCx0aGlzKS5zZXRQb3NpdGlvbigwLDApLG51bGw9PT1jJiYoYz1lLmdldFJlbmRlcmFibGVGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgoZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaSwtMSkpKSxudWxsPT09bSYmKG09ci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEsLTEpKSk7Y29uc3QgUD1udWxsPT09YyxZPW51bGw9PT1tO2M9Yz8/MCxtPW0/''@;'; put 'put ''PzA7Y29uc3R7cm9vdFdpbmRvdzpKLHZpZXc6e193dDpjZX19PXRoaXMuaG90LHt3dFRhYmxlOmZlfT1jZSxBZT1jZS5nZXRDZWxsKHtyb3c6Yyxjb2w6bX0sITApLEhlPXRoaXMuZ2V0Q29tbWVudE1ldGEoaSxhLCJzdHlsZSIpO0hlP3NzKFlsLHRoaXMpLnNldFNpemUoSGUud2lkdGgsSGUu''@;'; put 'put ''aGVpZ2h0KTpzcyhZbCx0aGlzKS5yZXNldFNpemUoKTtjb25zdCBYZT1ZPzA6ZmUuZ2V0Q29sdW1uV2lkdGgobSkscnQ9QyYmIVA/SHUoQWUpOjAse2xlZnQ6ZHQsdG9wOmp0LHdpZHRoOkZ0LGhlaWdodDpwbn09QWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOm9uLGhlaWdodDpn''@;'; put 'put ''bn09c3MoWWwsdGhpcykuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOlpuLGlubmVySGVpZ2h0OkdyfT10aGlzLmhvdC5yb290V2luZG93LEVyPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsVHI9Z3UodGhpcy5ob3Qucm9vdERvY3VtZW50KSxpcj1jSih0aGlzLmhvdC5yb290''@;'; put 'put ''V2luZG93KT9UcjowLHBpPXVKKHRoaXMuaG90LnJvb3RXaW5kb3cpP1RyOjA7bGV0IERuPWR0K0ouc2Nyb2xsWCtYZSxBcj1qdCtKLnNjcm9sbFkrcnQ7dGhpcy5ob3QuaXNSdGwoKSYmKERuLT1vbitYZSksdGhpcy5ob3QuaXNMdHIoKSYmZHQrRnQrb24+Wm4taXI/RG49ZHQrSi5zY3JvbGxY''@;'; put 'put ''LW9uLTE6dGhpcy5ob3QuaXNSdGwoKSYmRG48LShFci5zY3JvbGxXaWR0aC1Fci5jbGllbnRXaWR0aCkmJihEbj1kdCtKLnNjcm9sbFgrWGUrMSksanQrZ24+R3ItcGkmJihBci09Z24tcG4rMSksc3MoWWwsdGhpcykuc2V0UG9zaXRpb24oRG4sQXIpLHNzKFlsLHRoaXMpLnNldFJlYWRPbmx5''@;'; put 'put ''U3RhdGUodGhpcy5nZXRDb21tZW50TWV0YShpLGEsV1YpKSxzcyhZbCx0aGlzKS5vYnNlcnZlU2l6ZSgpfWZvY3VzRWRpdG9yKCl7c3MoWWwsdGhpcykuZm9jdXMoKX11cGRhdGVDb21tZW50TWV0YSh0LGUscil7Y29uc3QgaT10aGlzLmhvdC5nZXRDZWxsTWV0YSh0LGUpW2s1XTtsZXQgYTtp''@;'; put 'put ''PyhhPXRkKGkpLHpBKGEscikpOmE9cix0aGlzLmhvdC5zZXRDZWxsTWV0YSh0LGUsazUsYSl9Z2V0Q29tbWVudE1ldGEodCxlLHIpe2NvbnN0IGk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodCxlKTtpZihpW2s1XSlyZXR1cm4gaVtrNV1bcl19YWRkVG9Db250ZXh0TWVudSh0KXt0Lml0ZW1zLnB1''@;'; put 'put ''c2goe25hbWU6eXN9LGZ1bmN0aW9uIGM0dChuKXtyZXR1cm57a2V5OiJjb21tZW50c0FkZEVkaXQiLG5hbWUoKXt2YXIgdDtjb25zdCBlPW51bGw9PT0odD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaGlnaGxpZ2h0O3JldHVybiBudWxsIT1l''@;'; put 'put ''JiZlLmlzQ2VsbCgpJiZuLmdldENvbW1lbnRBdENlbGwoZS5yb3csZS5jb2wpP3RoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShXUSk6dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFVRKX0sY2FsbGJhY2soKXtjb25zdCB0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO24uc2V0UmFuZ2Uo''@;'; put 'put ''dCksbi5zaG93KCksbi5mb2N1c0VkaXRvcigpfSxkaXNhYmxlZCgpe2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIXR8fHQuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiB1NHQobil7cmV0dXJue2tleToiY29tbWVudHNSZW1vdmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRU''@;'; put 'put ''cmFuc2xhdGVkUGhyYXNlKFpRKX0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5mb3JBbGwoKGUscik9PntlPj0wJiZyPj0wJiZuLnJlbW92ZUNvbW1lbnRBdENlbGwoZSxyLCExKX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgdD10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghdHx8dC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8''@;'; put 'put ''fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpLGZ1bmN0aW9uIHA0dChuKXtyZXR1cm57a2V5OiJjb21tZW50c1JlYWRPbmx5IixuYW1lKCl7Y29uc3QgdD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoWVEpO3JldHVybiBqVih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwo''@;'; put 'put ''cixpKT0+bi5nZXRDb21tZW50TWV0YShyLGksV1YpKT9GN2UodCk6dH0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5mb3JBbGwoKGUscik9PntpZihlPj0wJiZyPj0wKXtjb25zdCBpPSEhbi5nZXRDb21tZW50TWV0YShlLHIsV1YpO24udXBkYXRlQ29tbWVudE1l''@;'; put 'put ''dGEoZSxyLHtbV1ZdOiFpfSl9fSl9LGRpc2FibGVkKCl7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghdHx8dC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8IW4uZ2V0Q29tbWVudEF0Q2VsbCh0LmhpZ2hsaWdodC5yb3csdC5oaWdobGlnaHQuY29sKXx8dGhp''@;'; put 'put ''cy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpKX1nZXRFZGl0b3JJbnB1dEVsZW1l''@;'; put 'put ''bnQoKXtyZXR1cm4gc3MoWWwsdGhpcykuZ2V0SW5wdXRFbGVtZW50KCl9ZGVzdHJveSgpe3ZhciB0LGU7bnVsbD09PSh0PXNzKFlsLHRoaXMpKXx8dm9pZCAwPT09dHx8dC5kZXN0cm95KCksbnVsbD09PShlPXNzKGo0LHRoaXMpKXx8dm9pZCAwPT09ZXx8ZS5kZXN0cm95KCksc3VwZXIuZGVz''@;'; put 'put ''dHJveSgpfX1mdW5jdGlvbiB3NHQobil7aWYodGhpcy5ob3QudmlldyYmdGhpcy5ob3Qudmlldy5fd3QmJiFzcyhaVix0aGlzKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobikpe2NvbnN0IHQ9SzYobi50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQgZT1udWxsO3QmJihlPXRoaXMu''@;'; put 'put ''aG90LmdldENvb3Jkcyh0KSksKCF0fHx0aGlzLnJhbmdlLmZyb20mJmUmJih0aGlzLnJhbmdlLmZyb20ucm93IT09ZS5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1lLmNvbCkpJiZ0aGlzLmhpZGUoKX19ZnVuY3Rpb24gQzR0KG4pe24uc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gUzR0''@;'; put 'put ''KG4pe2NvbnN0e3Jvb3REb2N1bWVudDp0fT10aGlzLmhvdDtpZighKHNzKFpWLHRoaXMpfHxzcyhZbCx0aGlzKS5pc0ZvY3VzZWQoKXx8dm8obi50YXJnZXQsInd0Qm9yZGVyIil8fHNzKEluZSx0aGlzKT09PW4udGFyZ2V0KSYmc3MoWWwsdGhpcykpaWYoQjQoSW5lLHRoaXMsdC5lbGVtZW50''@;'; put 'put ''RnJvbVBvaW50KG4uY2xpZW50WCxuLmNsaWVudFkpKSx0aGlzLnRhcmdldElzQ2VsbFdpdGhDb21tZW50KG4pKXtjb25zdCBlPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuZ2V0Q29vcmRzKG4udGFyZ2V0KSk7c3MoajQsdGhpcykuc2hvdyhlKX1lbHNlIFg2KG4udGFyZ2V0''@;'; put 'put ''LHQpJiYhdGhpcy50YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShuKSYmc3MoajQsdGhpcykuaGlkZSgpfWZ1bmN0aW9uIE00dCgpe0I0KFpWLHRoaXMsITEpfWZ1bmN0aW9uIHg0dChuLHQpe3RbazVdJiZ0W2s1XVtZa10mJnRpKG4sdC5jb21tZW50ZWRDZWxsQ2xhc3NOYW1lKX1mdW5jdGlvbiBF''@;'; put 'put ''NHQoKXtzcyhHVix0aGlzKT9CNChHVix0aGlzLCExKTooQjQoJFYsdGhpcywiIiksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSx0aGlzLnNldENvbW1lbnQoKSl9ZnVuY3Rpb24gVDR0KCl7QjQoJFYsdGhpcyx0aGlzLmdldENvbW1l''@;'; put 'put ''bnQoKSksdGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoRG5lKX1mdW5jdGlvbiBBNHQobix0KXtjb25zdHtyb3c6ZSxjb2w6cn09QTAoSzAsdGhpcyxpUykuY2FsbCh0aGlzKTt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRh''@;'; put 'put ''KGUscix7W043ZV06e3dpZHRoOm4saGVpZ2h0OnR9fSl9ZnVuY3Rpb24gVjdlKG4pe3NzKFlsLHRoaXMpLmlzRm9jdXNlZCgpJiZBMihuKX1mdW5jdGlvbiBrNHQoKXtzcyhZVix0aGlzKXx8dGhpcy5oaWRlKCl9ZnVuY3Rpb24gaVMoKXtyZXR1cm4gdGhpcy5yYW5nZSBpbnN0YW5jZW9mIFNO''@;'; put 'put ''P3RoaXMucmFuZ2UuaGlnaGxpZ2h0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCl9ZnVuY3Rpb24gUm5lKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBENHQobil7dmFyIHQ9ZnVuY3Rpb24gSTR0KG4sdCl7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2''@;'; put 'put ''ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51''@;'; put 'put ''bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBCN2V7Y29uc3RydWN0b3IodCl7Um5lKHRoaXMsImhvdCIsdm9pZCAwKSxSbmUodGhpcywiY29tbWFuZHMiLHt9KSxSbmUodGhpcywiY29tbW9uQ2FsbGJhY2siLG51bGwpLHRoaXMuaG90PXR9''@;'; put 'put ''cmVnaXN0ZXJDb21tYW5kKHQsZSl7dGhpcy5jb21tYW5kc1t0XT1lfXNldENvbW1vbkNhbGxiYWNrKHQpe3RoaXMuY29tbW9uQ2FsbGJhY2s9dH1leGVjdXRlKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGU+MT9lLTE6MCksaT0xO2k8ZTtpKyspcltpLTFdPWFy''@;'; put 'put ''Z3VtZW50c1tpXTtjb25zdCBhPXQuc3BsaXQoIjoiKSxjPWFbMF0sbT0yPT09YS5sZW5ndGg/YVsxXTpudWxsO2xldCBDPXRoaXMuY29tbWFuZHNbY107aWYoIUMpdGhyb3cgbmV3IEVycm9yKGBNZW51IGNvbW1hbmQgJyR7Y30nIG5vdCBleGlzdHMuYCk7aWYobSYmQy5zdWJtZW51JiYoQz1m''@;'; put 'put ''dW5jdGlvbiBSNHQobix0KXtsZXQgZTtyZXR1cm4gWW4odCxyPT57Y29uc3QgaT1yLmtleT9yLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShpKSYmaVsxXT09PW4pcmV0dXJuIGU9ciwhMX0pLGV9KG0sQy5zdWJtZW51Lml0ZW1zKSksITA9PT1DLmRpc2FibGVkfHwiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgQy5kaXNhYmxlZCYmITA9PT1DLmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHwkYyhDLCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IFA9W107ImZ1bmN0aW9uIj09dHlwZW9mIEMuY2FsbGJhY2smJlAucHVzaChDLmNhbGxiYWNrKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhp''@;'; put 'put ''cy5jb21tb25DYWxsYmFjayYmUC5wdXNoKHRoaXMuY29tbW9uQ2FsbGJhY2spLHIudW5zaGlmdChhLmpvaW4oIjoiKSksWW4oUCxZPT5ZLmFwcGx5KHRoaXMuaG90LHIpKX19Y29uc3QgZTM9ImFsaWdubWVudCIsS1Y9ImNsZWFyX2NvbHVtbiIsJGs9ImNvbF9sZWZ0IixLaz0iY29sX3JpZ2h0''@;'; put 'put ''IixYaz0ibWFrZV9yZWFkX29ubHkiLFhWPSJyZWRvIixxaz0icmVtb3ZlX2NvbCIscVY9InJlbW92ZV9yb3ciLEpWPSJyb3dfYWJvdmUiLFFWPSJyb3dfYmVsb3ciLEprPSJub19pdGVtcyIsZUI9InVuZG8iLGo3ZT1bSlYsUVYsJGssS2ssS1YscVYscWssZUIsWFYsWGssZTMseXMsSmtdLHo3''@;'; put 'put ''ZT17W3lzXTpmdW5jdGlvbiBsNHQoKXtyZXR1cm57bmFtZTp5c319LFtKa106ZnVuY3Rpb24gVTR0KCl7cmV0dXJue2tleTpKayxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNUSl9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtKVl06ZnVuY3Rpb24gajR0KCl7''@;'; put 'put ''cmV0dXJue2tleTpKVixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh4USl9LGNhbGxiYWNrKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5nZXRUb3BMZWZ0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsbi5yb3csMSwi''@;'; put 'put ''Q29udGV4dE1lbnUucm93QWJvdmUiKX0sZGlzYWJsZWQoKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEhKCFufHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8bi5pc1NpbmdsZUhlYWRlcigpJiZuLmhpZ2hsaWdodC5yb3c8''@;'; put 'put ''MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfHwhIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwPT09dGhpcy5jb3VudFJvd3MoKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJv''@;'; put 'put ''d319fSxbUVZdOmZ1bmN0aW9uIHo0dCgpe3JldHVybntrZXk6UVYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRVEpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuZ2V0Qm90dG9tUmlnaHRDb3JuZXIoKTt0aGlzLmFsdGVy''@;'; put 'put ''KCJpbnNlcnRfcm93X2JlbG93IixuLnJvdywxLCJDb250ZXh0TWVudS5yb3dCZWxvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIW58fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxuLmlzU2lu''@;'; put 'put ''Z2xlSGVhZGVyKCkmJm4uaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sWyRrXTpmdW5jdGlvbiBQNHQoKXtyZXR1cm57''@;'; put 'put ''a2V5OiRrLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFRRKX0sY2FsbGJhY2soKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmdldFRvcExlZnRDb3JuZXIoKSx0PXRoaXMuaXNSdGwoKT8iaW5zZXJ0X2NvbF9lbmQiOiJpbnNlcnRfY29sX3N0''@;'; put 'put ''YXJ0Ijt0aGlzLmFsdGVyKHQsbi5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uTGVmdCIpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIW58fHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxuLmlzU2luZ2xlSGVhZGVyKCkmJm4uaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVy''@;'; put 'put ''KCkmJjA9PT10aGlzLmNvdW50Q29scygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1ufX19LFtLa106ZnVuY3Rpb24gRjR0KCl7cmV0dXJue2tleTpLayxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShBUSl9LGNhbGxi''@;'; put 'put ''YWNrKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5nZXRUb3BSaWdodENvcm5lcigpLHQ9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIodCxuLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxk''@;'; put 'put ''aXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIW58fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxuLmlzU2luZ2xlSGVhZGVy''@;'; put 'put ''KCkmJm4uaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW0tWXTpmdW5jdGlvbiBPNHQoKXtyZXR1cm57a2V5OktW''@;'; put 'put ''LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKExRKX0sY2FsbGJhY2sobix0KXtjb25zdCBlPXRbMF0uc3RhcnQuY29sLHI9dFswXS5lbmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCxlLFtbbnVsbF1dLE1hdGgubWF4KHRbMF0u''@;'; put 'put ''c3RhcnQucm93LHRbMF0uZW5kLnJvdyksciwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQoKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFufHxuLmlzU2luZ2xlSGVhZGVyKCkmJm4uaGlnaGxpZ2h0LmNvbDwwfHwhdGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpcmV0dXJuITA7bGV0IHQ9ITE7cmV0dXJuIG4uZm9yQWxsKChlLHIpPT57aWYoZTwwfHxyPDApcmV0dXJuITA7Y29uc3R7cmVhZE9ubHk6aX09dGhpcy5nZXRDZWxsTWV0YShlLHIpO3JldHVybiEhaXx8KHQ9ITAsITEpfSksIXR9fX0sW3FWXTpm''@;'; put 'put ''dW5jdGlvbiBCNHQoKXtyZXR1cm57a2V5OnFWLG5hbWUoKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgdD0wO2lmKG4paWYobi5sZW5ndGg+MSl0PTE7ZWxzZXtjb25zdFtlLCxyXT1uWzBdO2UtciE9MCYmKHQ9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShrUSx0''@;'; put 'put ''KX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfcm93IixmdW5jdGlvbiB3MHQobil7Y29uc3QgdD1SQyhuLmdldFNlbGVjdGVkKCkpO2lmKDA9PT10fHwxPT09dClyZXR1cm5bXTtjb25zdCBlPVNrKHQse2NyZWF0ZUNlbGxDb29yZHM6bi5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKG4p''@;'; put 'put ''LGNyZWF0ZUNlbGxSYW5nZTpuLl9jcmVhdGVDZWxsUmFuZ2UuYmluZChuKX0pLHI9bmV3IFNldDtyZXR1cm4gWW4obi5nZXRTZWxlY3RlZCgpLGM9Pntjb25zdHtmcm9tOm0sdG86Q309ZShjKSxQPU1hdGgubWF4KG0ucm93LDApO1luKEFycmF5LmZyb20obmV3IEFycmF5KEMucm93LVArMSks''@;'; put 'put ''KEosY2UpPT5QK2NlKSxKPT57ci5oYXMoSil8fHIuYWRkKEopfSl9KSxkMChBcnJheS5mcm9tKHIpLnNvcnQoKGMsbSk9PmMtbSksKGMsbSxDLFApPT4oMCE9PUMmJm09PT1QW0MtMV0rMT9jW2MubGVuZ3RoLTFdWzFdKz0xOmMucHVzaChbbSwxXSksYyksW10pfSh0aGlzKSwxLCJDb250ZXh0''@;'; put 'put ''TWVudS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQoKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFufHxuLmlzU2luZ2xlSGVhZGVyKCkmJm4uaGlnaGxpZ2h0LnJvdzwwKXJldHVybiEwO2NvbnN0IHQ9dGhpcy5jb3VudFJvd3MoKTtyZXR1cm4gdGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PXQ6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fDA9PT10fSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlUm93fX19LFtxa106ZnVuY3Rpb24gVjR0KCl7cmV0dXJue2tleTpx''@;'; put 'put ''ayxuYW1lKCl7Y29uc3Qgbj10aGlzLmdldFNlbGVjdGVkKCk7bGV0IHQ9MDtpZihuKWlmKG4ubGVuZ3RoPjEpdD0xO2Vsc2V7Y29uc3RbLGUsLHJdPW5bMF07ZS1yIT0wJiYodD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKERRLHQpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIo''@;'; put 'put ''InJlbW92ZV9jb2wiLGZ1bmN0aW9uIGIwdChuKXtjb25zdCB0PVJDKG4uZ2V0U2VsZWN0ZWQoKSk7aWYoMD09PXR8fDE9PT10KXJldHVybltdO2NvbnN0IGU9U2sodCx7Y3JlYXRlQ2VsbENvb3JkczpuLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQobiksY3JlYXRlQ2VsbFJhbmdlOm4uX2NyZWF0''@;'; put 'put ''ZUNlbGxSYW5nZS5iaW5kKG4pfSkscj1uZXcgU2V0O3JldHVybiBZbihuLmdldFNlbGVjdGVkKCksYz0+e2NvbnN0e2Zyb206bSx0bzpDfT1lKGMpLFA9TWF0aC5tYXgobS5jb2wsMCk7WW4oQXJyYXkuZnJvbShuZXcgQXJyYXkoQy5jb2wtUCsxKSwoSixjZSk9PlArY2UpLEo9PntyLmhhcyhK''@;'; put 'put ''KXx8ci5hZGQoSil9KX0pLGQwKEFycmF5LmZyb20ocikuc29ydCgoYyxtKT0+Yy1tKSwoYyxtLEMsUCk9PigwIT09QyYmbT09PVBbQy0xXSsxP2NbYy5sZW5ndGgtMV1bMV0rPTE6Yy5wdXNoKFttLDFdKSxjKSxbXSl9KHRoaXMpLG51bGwsIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiIpfSxk''@;'; put 'put ''aXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIW58fG4uaXNTaW5nbGVIZWFkZXIoKSYmbi5oaWdobGlnaHQuY29sPDApcmV0dXJuITA7Y29uc3QgdD10aGlzLmNv''@;'; put 'put ''dW50Q29scygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09dDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8MD09PXR9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVDb2x1bW59fX0sW2VC''@;'; put 'put ''XTpmdW5jdGlvbiBXNHQoKXtyZXR1cm57a2V5OmVCLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElRKX0sY2FsbGJhY2soKXt0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS51bmRvKCl9LGhpZGRlbigpe2NvbnN0IG49dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7''@;'; put 'put ''cmV0dXJuIW58fCFuLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1VuZG9BdmFpbGFibGUoKX19fSxbWFZdOmZ1bmN0aW9uIE40dCgpe3JldHVybntrZXk6WFYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uo''@;'; put 'put ''UlEpfSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnJlZG8oKX0saGlkZGVuKCl7Y29uc3Qgbj10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hbnx8IW4uaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIp''@;'; put 'put ''LmlzUmVkb0F2YWlsYWJsZSgpfX19LFtYa106ZnVuY3Rpb24gSDR0KCl7cmV0dXJue2tleTpYayxjaGVja2FibGU6ITAsYXJpYUNoZWNrZWQoKXtyZXR1cm4galYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKHQsZSk9PnRoaXMuZ2V0Q2VsbE1ldGEodCxlKS5yZWFkT25seSl9LGFyaWFMYWJl''@;'; put 'put ''bCgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVk4pfSxuYW1lKCl7bGV0IG49dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFZOKTtyZXR1cm4galYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGUscik9PnRoaXMuZ2V0Q2VsbE1ldGEoZSxyKS5yZWFkT25seSkmJihuPUY3ZShu''@;'; put 'put ''KSksbn0sY2FsbGJhY2soKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHQ9alYobiwoZSxyKT0+dGhpcy5nZXRDZWxsTWV0YShlLHIpLnJlYWRPbmx5KTtZbihuLGU9PntlLmZvckFsbCgocixpKT0+e3I+PTAmJmk+PTAmJnRoaXMuc2V0Q2VsbE1ldGEocixpLCJyZWFkT25seSIs''@;'; put 'put ''IXQpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuIShuJiYhbi5pc1NpbmdsZUhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjAhPT10aGlzLmNvdW50Um93cygpJiYw''@;'; put 'put ''IT09dGhpcy5jb3VudENvbHMoKSYmdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJjAhPT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5sZW5ndGgpfX19LFtlM106ZnVuY3Rpb24gTDR0KCl7cmV0dXJue2tleTplMyxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHUSl9LGRp''@;'; put 'put ''c2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEwO2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuIShuJiYhbi5pc1NpbmdsZUhlYWRlcigpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmIXRoaXMu''@;'; put 'put ''c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0sc3VibWVudTp7aXRlbXM6W3trZXk6YCR7ZTN9OmxlZnRgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRRKX0sY2FsbGJhY2soKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHQ9bHkobiwoaSxh''@;'; put 'put ''KT0+dGhpcy5nZXRDZWxsTWV0YShpLGEpLmNsYXNzTmFtZSksZT0iaG9yaXpvbnRhbCIscj0iaHRMZWZ0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iix0LG4sZSxyKSxfOChuLGUsciwoaSxhKT0+dGhpcy5nZXRDZWxsTWV0YShpLGEpLChpLGEsYyxtKT0+dGhpcy5zZXRD''@;'; put 'put ''ZWxsTWV0YShpLGEsYyxtKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7ZTN9OmNlbnRlcmAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoS1EpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksdD1seShuLChpLGEp''@;'; put 'put ''PT50aGlzLmdldENlbGxNZXRhKGksYSkuY2xhc3NOYW1lKSxlPSJob3Jpem9udGFsIixyPSJodENlbnRlciI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsdCxuLGUsciksXzgobixlLHIsKGksYSk9PnRoaXMuZ2V0Q2VsbE1ldGEoaSxhKSwoaSxhLGMsbSk9PnRoaXMuc2V0''@;'; put 'put ''Q2VsbE1ldGEoaSxhLGMsbSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke2UzfTpyaWdodGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoWFEpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksdD1seShuLChpLGEp''@;'; put 'put ''PT50aGlzLmdldENlbGxNZXRhKGksYSkuY2xhc3NOYW1lKSxlPSJob3Jpem9udGFsIixyPSJodFJpZ2h0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iix0LG4sZSxyKSxfOChuLGUsciwoaSxhKT0+dGhpcy5nZXRDZWxsTWV0YShpLGEpLChpLGEsYyxtKT0+dGhpcy5zZXRD''@;'; put 'put ''ZWxsTWV0YShpLGEsYyxtKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7ZTN9Omp1c3RpZnlgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHFRKX0sY2FsbGJhY2soKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHQ9bHkobiwoaSxh''@;'; put 'put ''KT0+dGhpcy5nZXRDZWxsTWV0YShpLGEpLmNsYXNzTmFtZSksZT0iaG9yaXpvbnRhbCIscj0iaHRKdXN0aWZ5Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iix0LG4sZSxyKSxfOChuLGUsciwoaSxhKT0+dGhpcy5nZXRDZWxsTWV0YShpLGEpLChpLGEsYyxtKT0+dGhpcy5z''@;'; put 'put ''ZXRDZWxsTWV0YShpLGEsYyxtKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtuYW1lOnlzfSx7a2V5OmAke2UzfTp0b3BgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEpRKX0sY2FsbGJhY2soKXtjb25zdCBuPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHQ9''@;'; put 'put ''bHkobiwoaSxhKT0+dGhpcy5nZXRDZWxsTWV0YShpLGEpLmNsYXNzTmFtZSksZT0idmVydGljYWwiLHI9Imh0VG9wIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50Iix0LG4sZSxyKSxfOChuLGUsciwoaSxhKT0+dGhpcy5nZXRDZWxsTWV0YShpLGEpLChpLGEsYyxtKT0+dGhp''@;'; put 'put ''cy5zZXRDZWxsTWV0YShpLGEsYyxtKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7ZTN9Om1pZGRsZWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUVEpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksdD1seShu''@;'; put 'put ''LChpLGEpPT50aGlzLmdldENlbGxNZXRhKGksYSkuY2xhc3NOYW1lKSxlPSJ2ZXJ0aWNhbCIscj0iaHRNaWRkbGUiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLHQsbixlLHIpLF84KG4sZSxyLChpLGEpPT50aGlzLmdldENlbGxNZXRhKGksYSksKGksYSxjLG0pPT50aGlz''@;'; put 'put ''LnNldENlbGxNZXRhKGksYSxjLG0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtlM306Ym90dG9tYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShlZWUpfSxjYWxsYmFjaygpe2NvbnN0IG49dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksdD1seShu''@;'; put 'put ''LChpLGEpPT50aGlzLmdldENlbGxNZXRhKGksYSkuY2xhc3NOYW1lKSxlPSJ2ZXJ0aWNhbCIscj0iaHRCb3R0b20iO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLHQsbixlLHIpLF84KG4sZSxyLChpLGEpPT50aGlzLmdldENlbGxNZXRhKGksYSksKGksYSxjLG0pPT50aGlz''@;'; put 'put ''LnNldENlbGxNZXRhKGksYSxjLG0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX1dfX19fTtmdW5jdGlvbiBVN2UoKXtjb25zdCBuPXt9O3JldHVybiBhcyh6N2UsKHQsZSk9PntuW2VdPXQoKX0pLG59ZnVuY3Rpb24gTG5lKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBaNHQobil7dmFy''@;'; put 'put ''IHQ9ZnVuY3Rpb24gWTR0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBXN2V7Y29uc3RydWN0b3IodCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51''@;'; put 'put ''bGw7TG5lKHRoaXMsImhvdCIsdm9pZCAwKSxMbmUodGhpcywicHJlZGVmaW5lZEl0ZW1zIixVN2UoKSksTG5lKHRoaXMsImRlZmF1bHRPcmRlclBhdHRlcm4iLHZvaWQgMCksdGhpcy5ob3Q9dCx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49ZX1zZXRQcmVkZWZpbmVkSXRlbXModCl7Y29uc3Qg''@;'; put 'put ''ZT17fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAsYXModCwocixpKT0+e2xldCBhPSIiO3IubmFtZT09PXlzPyhlW3lzXT1yLGE9eXMpOmlzTmFOKHBhcnNlSW50KGksMTApKT8oci5rZXk9dm9pZCAwPT09ci5rZXk/aTpyLmtleSxlW2ldPXIsYT1yLmtleSk6KGVbci5rZXld''@;'; put 'put ''PXIsYT1yLmtleSksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goYSl9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1lfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0aW9uIEc0dCgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpb''@;'; put 'put ''XSxlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCByPVtdO2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBpJiZpLml0ZW1zP2k9aS5pdGVt''@;'; put 'put ''czpBcnJheS5pc0FycmF5KGkpfHwoaT10KSxobyhpKT9hcyhpLChhLGMpPT57bGV0IG09ZVsic3RyaW5nIj09dHlwZW9mIGE/YTpjXTttfHwobT1hKSxobyhhKT9GdShtLGEpOiJzdHJpbmciPT10eXBlb2YgbSYmKG09e25hbWU6bX0pLHZvaWQgMD09PW0ua2V5JiYobS5rZXk9Yyksci5wdXNo''@;'; put 'put ''KG0pfSk6WW4oaSwoYSxjKT0+e2xldCBtPWVbYV07IW0mJmo3ZS5pbmRleE9mKGEpPj0wfHwobXx8KG09e25hbWU6YSxrZXk6YCR7Y31gfSksaG8oYSkmJkZ1KG0sYSksdm9pZCAwPT09bS5rZXkmJihtLmtleT1jKSxyLnB1c2gobSkpfSkscn0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19ZnVuY3Rpb24gYjgobix0LGUpe3JldHVybih0PWZ1bmN0aW9uICQ0dChuKXt2YXIgdD1mdW5jdGlvbiBLNHQobix0KXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIFg0dHtjb25zdHJ1Y3Rvcih0LGUpe2I4KHRoaXMsInRvcCIsdm9pZCAwKSxiOCh0aGlzLCJ0b3BSZWxhdGl2ZSIsdm9pZCAwKSxiOCh0aGlzLCJsZWZ0Iix2b2lkIDApLGI4KHRoaXMsImxlZnRSZWxhdGl2ZSIs''@;'; put 'put ''dm9pZCAwKSxiOCh0aGlzLCJzY3JvbGxUb3AiLHZvaWQgMCksYjgodGhpcywic2Nyb2xsTGVmdCIsdm9pZCAwKSxiOCh0aGlzLCJjZWxsSGVpZ2h0Iix2b2lkIDApLGI4KHRoaXMsImNlbGxXaWR0aCIsdm9pZCAwKTtjb25zdCByPWUuc2Nyb2xsWSxpPWUuc2Nyb2xsWDtsZXQgYSxjLG0sQyxQ''@;'; put 'put ''LFk7dGhpcy5yb290V2luZG93PWUsdGhpcy50eXBlPXRoaXMuZ2V0U291cmNlVHlwZSh0KSwibGl0ZXJhbCI9PT10aGlzLnR5cGU/KGE9cGFyc2VJbnQodC50b3AsMTApLG09cGFyc2VJbnQodC5sZWZ0LDEwKSxQPXQuaGVpZ2h0fHwwLFk9dC53aWR0aHx8MCxjPWEsQz1tLGErPXIsbSs9aSk6''@;'; put 'put ''ImV2ZW50Ij09PXRoaXMudHlwZSYmKGE9cGFyc2VJbnQodC5wYWdlWSwxMCksbT1wYXJzZUludCh0LnBhZ2VYLDEwKSxQPXQudGFyZ2V0LmNsaWVudEhlaWdodCxZPXQudGFyZ2V0LmNsaWVudFdpZHRoLGM9YS1yLEM9bS1pKSx0aGlzLnRvcD1hLHRoaXMudG9wUmVsYXRpdmU9Yyx0aGlzLmxl''@;'; put 'put ''ZnQ9bSx0aGlzLmxlZnRSZWxhdGl2ZT1DLHRoaXMuc2Nyb2xsVG9wPXIsdGhpcy5zY3JvbGxMZWZ0PWksdGhpcy5jZWxsSGVpZ2h0PVAsdGhpcy5jZWxsV2lkdGg9WX1nZXRTb3VyY2VUeXBlKHQpe2xldCBlPSJsaXRlcmFsIjtyZXR1cm4gdCBpbnN0YW5jZW9mIEV2ZW50JiYoZT0iZXZlbnQi''@;'; put 'put ''KSxlfWZpdHNBYm92ZSh0KXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZT49dC5vZmZzZXRIZWlnaHR9Zml0c0JlbG93KHQpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlK3Qub2Zmc2V0SGVpZ2h0PD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''OnRoaXMucm9vdFdpbmRvdy5pbm5lckhlaWdodCl9Zml0c09uUmlnaHQodCl7cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlK3RoaXMuY2VsbFdpZHRoK3Qub2Zmc2V0V2lkdGg8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290''@;'; put 'put ''V2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl9Zml0c09uTGVmdCh0KXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmU+PXQub2Zmc2V0V2lkdGh9fWZ1bmN0aW9uIFFrKG4sdCxlKXsoZnVuY3Rpb24gcTR0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBYbyhuLHQpe3JldHVybiBuLmdldChaN2Uobix0KSl9ZnVuY3Rpb24gdEIobix0LGUpe3JldHVybiBuLnNldChaN2Uo''@;'; put 'put ''bix0KSxlKSxlfWZ1bmN0aW9uIFo3ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0''@;'; put 'put ''Iil9dmFyIGpkPW5ldyBXZWFrTWFwLEZoPW5ldyBXZWFrTWFwLEhoPW5ldyBXZWFrTWFwLE9uZT1uZXcgV2Vha01hcCxhUz1uZXcgV2Vha01hcDtjbGFzcyBKNHR7Y29uc3RydWN0b3IodCl7UWsodGhpcyxqZCx2b2lkIDApLFFrKHRoaXMsRmgsdm9pZCAwKSxRayh0aGlzLEhoLHZvaWQgMCks''@;'; put 'put ''UWsodGhpcyxPbmUsITEpLFFrKHRoaXMsYVMse2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0pLHRCKE9uZSx0aGlzLHQpfXNldE9mZnNldCh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4gWG8oYVMs''@;'; put 'put ''dGhpcylbdF09ZSx0aGlzfXNldEVsZW1lbnQodCl7cmV0dXJuIHRCKGpkLHRoaXMsdCksdGhpc31zZXRQYXJlbnRFbGVtZW50KHQpe3JldHVybiB0QihGaCx0aGlzLHQpLHRoaXN9dXBkYXRlUG9zaXRpb24odCl7dEIoSGgsdGhpcyxuZXcgWDR0KHQsWG8oamQsdGhpcykub3duZXJEb2N1bWVu''@;'; put 'put ''dC5kZWZhdWx0VmlldykpLFhvKE9uZSx0aGlzKT8oWG8oSGgsdGhpcykuZml0c0JlbG93KFhvKGpkLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKTpYbyhIaCx0aGlzKS5maXRzQWJvdmUoWG8oamQsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcigpOnRoaXMu''@;'; put 'put ''c2V0UG9zaXRpb25CZWxvd0N1cnNvcigpLHRoaXMudXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCkpOih0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCkpfXVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpeyJydGwiPT09WG8oamQs''@;'; put 'put ''dGhpcykuZGlyP1hvKEhoLHRoaXMpLmZpdHNPbkxlZnQoWG8oamQsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTpYbyhIaCx0aGlzKS5maXRzT25SaWdodChYbyhqZCx0aGlzKSk/dGhpcy5zZXRQb3NpdGlv''@;'; put 'put ''bk9uUmlnaHRPZkN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpfXNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKXtsZXQgdD1YbyhhUyx0aGlzKS5hYm92ZStYbyhIaCx0aGlzKS50b3AtWG8oamQsdGhpcykub2Zmc2V0SGVpZ2h0O2lmKFhvKEZoLHRoaXMpKXtjb25zdCBy''@;'; put 'put ''PVhvKEZoLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShYbyhGaCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikpLGk9TnVtYmVyLnBhcnNlSW50KHIucGFkZGluZ1RvcCwxMCksYT1OdW1iZXIucGFyc2VJbnQoci5ib3JkZXJUb3AsMTAp''@;'; put 'put ''O3Q9WG8oSGgsdGhpcykudG9wK1hvKEhoLHRoaXMpLmNlbGxIZWlnaHQtWG8oamQsdGhpcykuc2Nyb2xsSGVpZ2h0K2krYX1YbyhqZCx0aGlzKS5zdHlsZS50b3A9YCR7dH1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcigpe2xldCB0PVhvKGFTLHRoaXMpLmJlbG93K1hvKEhoLHRoaXMpLnRv''@;'; put 'put ''cCsxO2lmKFhvKEZoLHRoaXMpKXtjb25zdCByPVhvKEZoLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShYbyhGaCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikpLGk9TnVtYmVyLnBhcnNlSW50KHIucGFkZGluZ1RvcCwxMCksYT1OdW1i''@;'; put 'put ''ZXIucGFyc2VJbnQoci5ib3JkZXJUb3AsMTApO3Q9WG8oSGgsdGhpcykudG9wLWktYX1YbyhqZCx0aGlzKS5zdHlsZS50b3A9YCR7dH1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKXtsZXQgdD1YbyhIaCx0aGlzKS5sZWZ0O2lmKFhvKEZoLHRoaXMpKXtjb25zdCBlPVhvKEZoLHRo''@;'; put 'put ''aXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcscj1OdW1iZXIucGFyc2VJbnQoZS5nZXRDb21wdXRlZFN0eWxlKFhvKEZoLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyUmlnaHRXaWR0aCwxMCk7dCs9WG8oSGgsdGhpcykuY2VsbFdpZHRoK3J9ZWxzZSB0Kz1Ybyhh''@;'; put 'put ''Uyx0aGlzKS5yaWdodDtYbyhqZCx0aGlzKS5zdHlsZS5sZWZ0PWAke3R9cHhgfXNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKXtsZXQgdD1YbyhhUyx0aGlzKS5sZWZ0K1hvKEhoLHRoaXMpLmxlZnQtWG8oamQsdGhpcykub2Zmc2V0V2lkdGg7aWYoWG8oRmgsdGhpcykpe2NvbnN0IGU9WG8o''@;'; put 'put ''RmgsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldzt0LT1OdW1iZXIucGFyc2VJbnQoZS5nZXRDb21wdXRlZFN0eWxlKFhvKEZoLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyTGVmdFdpZHRoLDEwKX1YbyhqZCx0aGlzKS5zdHlsZS5sZWZ0PWAke3R9cHhgfX1m''@;'; put 'put ''dW5jdGlvbiBZN2Uobil7bGV0e2luaXRpYWxQYWdlOnQ9LTEsc2l6ZTplPSgpPT4wLG9uSXRlbVNlbGVjdDpyPSgpPT57fSxvbkNsZWFyOmk9KCk9Pnt9fT1uO2NvbnN0IGE9bmV3IFNldDtsZXQgYz1ncyh0LC0xLEhlKCktMSk7ZnVuY3Rpb24gbShydCxkdCl7Y29uc3QganQ9SGUoKS0xO3Jl''@;'; put 'put ''dHVybiBydDwwJiYocnQ9anQpLHJ0Pmp0JiYocnQ9MCksYS5oYXMocnQpPy0xOihhLmFkZChydCksITE9PT1yKHJ0LCExKSYmKHJ0PW0oMT09PWR0PysrcnQ6LS1ydCxkdCkpLHJ0KX1mdW5jdGlvbiBIZSgpe3JldHVybiBNYXRoLm1heChlKCksMCl9cmV0dXJue3NldEN1cnJlbnRQYWdlOmZ1''@;'; put 'put ''bmN0aW9uIEMocnQpe3J0Pi0xJiZydDxIZSgpJiYhMSE9PXIocnQsITApJiYoYz1ydCl9LHNldFBhZ2VDdXJzb3JBdDpmdW5jdGlvbiBQKHJ0KXtydD4tMSYmcnQ8SGUoKSYmKGM9cnQpfSxnZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBZKCl7cmV0dXJuIGN9LHRvRmlyc3RJdGVtOmZ1bmN0aW9u''@;'; put 'put ''IEooKXtIZSgpPjAmJihhLmNsZWFyKCksYz1tKDAsMSkpfSx0b0xhc3RJdGVtOmZ1bmN0aW9uIGNlKCl7SGUoKT4wJiYoYS5jbGVhcigpLGM9bShIZSgpLTEsLTEpKX0sdG9OZXh0SXRlbTpmdW5jdGlvbiBmZSgpe0hlKCk+MCYmKGEuY2xlYXIoKSxjPW0oKytjLDEpKX0sdG9QcmV2aW91c0l0''@;'; put 'put ''ZW06ZnVuY3Rpb24gQWUoKXtIZSgpPjAmJihhLmNsZWFyKCksYz1tKC0tYywtMSkpfSxnZXRTaXplOkhlLGNsZWFyOmZ1bmN0aW9uIFhlKCl7YS5jbGVhcigpLGM9dCxpKCl9fX1mdW5jdGlvbiBQbmUobil7cmV0dXJuICRjKG4sInN1Ym1lbnUiKX1mdW5jdGlvbiBGbmUobil7cmV0dXJuIG5l''@;'; put 'put ''dyBSZWdFeHAoeXMsImkiKS50ZXN0KG4ubmFtZSl9ZnVuY3Rpb24gbkIobix0KXtyZXR1cm4hMD09PW4uZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmRpc2FibGVkJiYhMD09PW4uZGlzYWJsZWQuY2FsbCh0KX1mdW5jdGlvbiBHN2Uobil7cmV0dXJuICRjKG4sImRpc2FibGVTZWxl''@;'; put 'put ''Y3Rpb24iKX1mdW5jdGlvbiAkN2Uobix0KXtjb25zdCBlPW4uc2xpY2UoMCk7Zm9yKGxldCByPTA7cjxlLmxlbmd0aCYmZVtyXS5uYW1lPT09dDspZS5zaGlmdCgpO3JldHVybiBlfWZ1bmN0aW9uIGxndChuKXtyZXR1cm4hMD09PW4uY2hlY2thYmxlfWZ1bmN0aW9uIGhndChuKXtyZXR1cm4o''@;'; put 'put ''dCxlLHIsaSxhLGMpPT57Y29uc3QgbT10LmdldFNvdXJjZURhdGFBdFJvdyhyKSxDPW4ucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFA9ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5jYWxsKG4pOmMsWT0iZnVuY3Rpb24iPT10eXBlb2YgbS5hcmlhTGFiZWw/bS5hcmlhTGFiZWwu''@;'; put 'put ''Y2FsbChuKTptLmFyaWFMYWJlbCxKPSJmdW5jdGlvbiI9PXR5cGVvZiBtLmFyaWFDaGVja2VkP20uYXJpYUNoZWNrZWQuY2FsbChuKTptLmFyaWFDaGVja2VkO2lmKFM0KGUpLHRpKEMsImh0SXRlbVdyYXBwZXIiKSxuLmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGNlPSFuQihtLG4p''@;'; put 'put ''JiYhRzdlKG0pJiYhRm5lKG0pO1phKGUsWy4uLmxndChtKT9bWyJyb2xlIiwibWVudWl0ZW1jaGVja2JveCJdLFQyKFkpLFpnZShKKV06W1sicm9sZSIsIm1lbnVpdGVtIl0sVDIoUCldLC4uLmNlP1thcCgtMSldOltdLC4uLm5CKG0sbik/W2pBKCldOltdLC4uLlBuZShtKT9bemYoITEpXTpb''@;'; put 'put ''XV0pfWUuY2xhc3NOYW1lPSIiLGUuYXBwZW5kQ2hpbGQoQyksRm5lKG0pP3RpKGUsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIG0ucmVuZGVyZXI/KHRpKGUsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksZS5hcHBlbmRDaGlsZChtLnJlbmRlcmVyKHQsQyxyLGksYSxQKSkpOko2''@;'; put 'put ''KEMsUCksbkIobSxuKT90aShlLCJodERpc2FibGVkIik6RzdlKG0pP3RpKGUsImh0U2VsZWN0aW9uRGlzYWJsZWQiKTpQbmUobSkmJnRpKGUsImh0U3VibWVudSIpfX1mdW5jdGlvbiBIbmUobix0LGUpeyhmdW5jdGlvbiBmZ3Qobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIHo0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBwZ3Qobil7dmFyIHQ9ZnVuY3Rpb24gZ2d0KG4sdCl7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0''@;'; put 'put ''IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiBObmUobix0LGUpe3JldHVybiBuLnNldChxN2Uobix0KSxlKSxlfWZ1bmN0aW9uIHc4KG4sdCl7cmV0dXJuIG4uZ2V0KHE3ZShuLHQpKX1mdW5jdGlvbiBxN2Uobix0LGUpe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBvUz1uZXcgV2Vha01hcCxyQj1uZXcgV2Vha01hcCxpQj1uZXcg''@;'; put 'put ''V2Vha01hcDtjbGFzcyBzU3tnZXQgdGFibGVCb3JkZXJXaWR0aCgpe3JldHVybiB2b2lkIDA9PT13OChpQix0aGlzKSYmdGhpcy5ob3RNZW51JiZObmUoaUIsdGhpcyxwYXJzZUludCh0aGlzLmhvdE1lbnUucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaG90TWVudS52aWV3Ll93''@;'; put 'put ''dC53dFRhYmxlLlRBQkxFKS5ib3JkZXJXaWR0aCwxMCkpLHc4KGlCLHRoaXMpfWNvbnN0cnVjdG9yKHQsZSl7dmFyIHI9dGhpczt6NCh0aGlzLCJob3QiLHZvaWQgMCksejQodGhpcywib3B0aW9ucyIsdm9pZCAwKSx6NCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBaZih0aGlzKSksejQodGhp''@;'; put 'put ''cywiY29udGFpbmVyIix2b2lkIDApLHo0KHRoaXMsInBvc2l0aW9uZXIiLHZvaWQgMCksejQodGhpcywiaG90TWVudSIsbnVsbCksejQodGhpcywiaG90U3ViTWVudXMiLHt9KSx6NCh0aGlzLCJwYXJlbnRNZW51Iix2b2lkIDApLHo0KHRoaXMsIm1lbnVJdGVtcyIsbnVsbCksejQodGhpcywi''@;'; put 'put ''b3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyIsbnVsbCksSG5lKHRoaXMsb1Msdm9pZCAwKSxIbmUodGhpcyxyQix2b2lkIDApLEhuZSh0aGlzLGlCLHZvaWQgMCksdGhpcy5ob3Q9dCx0aGlzLm9wdGlvbnM9ZXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmll''@;'; put 'put ''d3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxtaW5XaWR0aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3RQb3J0YWxFbGVtZW50fSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5wb3NpdGlvbmVyPW5ldyBKNHQodGhpcy5vcHRpb25z''@;'; put 'put ''LmtlZXBJblZpZXdwb3J0KSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVudHx8bnVsbCx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiByLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLC4uLmEpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGksYSk9Pnt0''@;'; put 'put ''aGlzLm9wdGlvbnMuY29udGFpbmVyIT09dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnQmJihIYSh0aGlzLm9wdGlvbnMuY29udGFpbmVyLC9odC10aGVtZS0uKi9nKSx0aSh0aGlzLm9wdGlvbnMuY29udGFpbmVyLGkpKSxhfHx0aGlzLmNsb3NlKCl9KX1yZWdpc3RlckV2ZW50cygpe2xldCB0''@;'; put 'put ''PXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDt0Oyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQuZG9jdW1lbnQsIm1vdXNlZG93biIsZT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGUpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQuZG9jdW1lbnQs''@;'; put 'put ''InRvdWNoc3RhcnQiLGU9PnRoaXMub25Eb2N1bWVudE1vdXNlRG93bihlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LmRvY3VtZW50LCJjb250ZXh0bWVudSIsZT0+dGhpcy5vbkRvY3VtZW50Q29udGV4dE1lbnUoZSkpLHQ9ZzUodCl9c2V0TWVudUl0ZW1zKHQpe3Ro''@;'; put 'put ''aXMubWVudUl0ZW1zPXR9Z2V0TmF2aWdhdG9yKCl7cmV0dXJuIHc4KG9TLHRoaXMpfWdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpe3JldHVybiB3OChyQix0aGlzKX1nZXRTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKT90aGlzLmhvdE1lbnUuZ2V0U291cmNl''@;'; put 'put ''RGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZEFjdGl2ZSgpWzBdKTpudWxsfWhhc1NlbGVjdGVkSXRlbSgpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZEFjdGl2ZSgpKX1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVu''@;'; put 'put ''dX1vcGVuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVPcGVuIiksdGhpcy5jb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCB0PXRrKG09PnRoaXMub3BlblN1Yk1lbnUobSksMzAwKSxlPXRoaXMu''@;'; put 'put ''b3B0aW9ucy5taW5XaWR0aHx8MjE1O2xldCByPSExLGk9JDYodGhpcy5tZW51SXRlbXMsbT0+KG0ua2V5PT09SmsmJihyPSEwKSxmdW5jdGlvbiBpZ3Qobix0KXtyZXR1cm4hbi5oaWRkZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIG4uaGlkZGVuJiZuLmhpZGRlbi5jYWxsKHQpKX0obSx0aGlz''@;'; put 'put ''LmhvdCkpKTtpZihpLmxlbmd0aDwxJiYhcilpLnB1c2goVTdlKClbSmtdKTtlbHNlIGlmKDA9PT1pLmxlbmd0aClyZXR1cm47aT1mdW5jdGlvbiBzZ3Qobil7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnlzLGU9bi5zbGljZSgw''@;'; put 'put ''KTtyZXR1cm4gZT0kN2UoZSx0KSxlPWZ1bmN0aW9uIGFndChuLHQpe2xldCBlPW4uc2xpY2UoMCk7cmV0dXJuIGUucmV2ZXJzZSgpLGU9JDdlKGUsdCksZS5yZXZlcnNlKCksZX0oZSx0KSxlPWZ1bmN0aW9uIG9ndChuKXtjb25zdCB0PVtdO3JldHVybiBZbihuLChlLHIpPT57cj4wP3RbdC5s''@;'; put 'put ''ZW5ndGgtMV0ubmFtZSE9PWUubmFtZSYmdC5wdXNoKGUpOnQucHVzaChlKX0pLHR9KGUpLGV9KGkseXMpO2xldCBhPSExO2NvbnN0IGM9e2RhdGE6aSxjb2xIZWFkZXJzOiExLGF1dG9Db2x1bW5TaXplOiEwLGF1dG9XcmFwUm93OiExLG1vZGlmeUNvbFdpZHRoOm09PndhKG0pJiZtPGU/ZTpt''@;'; put 'put ''LGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGVkaXRvcjohMSxjb3B5UGFzdGU6ITEsaGlkZGVuUm93czohMCxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJlbmRlcmVyOmhndCh0aGlzLmhvdCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNp''@;'; put 'put ''ZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhcmlhVGFnczohMSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGJlZm9yZVJlZnJlc2hEaW1l''@;'; put 'put ''bnNpb25zOigpPT4hMSxiZWZvcmVPbkNlbGxNb3VzZU92ZXI6KG0sQyk9Pnt0aGlzLmhvdE1lbnUuc3R5bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgpP3c4KG9TLHRoaXMpLnNldEN1cnJlbnRQYWdlKEMucm93KTp3OChvUyx0aGlzKS5zZXRQYWdlQ3Vyc29yQXQoQy5yb3cpfSxhZnRlck9u''@;'; put 'put ''Q2VsbE1vdXNlT3ZlcjoobSxDKT0+e3RoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpP3QoQy5yb3cpOnRoaXMub3BlblN1Yk1lbnUoQy5yb3cpfSxhZnRlck9uQ2VsbENvbnRleHRNZW51Om09PnttLnByZXZlbnREZWZhdWx0KCksYU4oKSYmYSYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhp''@;'; put 'put ''cy5jbG9zZSghMCl9LGFmdGVyU2VsZWN0aW9uOihtLEMsUCxZLEopPT57dGhpcy5ob3RNZW51LnZpZXcuaXNNb3VzZURvd24oKSYmKEoudmFsdWU9ITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpfSxiZWZvcmVPbkNl''@;'; put 'put ''bGxNb3VzZVVwOm09Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoYT0hdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQobSkpfSxhZnRlck9uQ2VsbE1vdXNlVXA6bT0+eyghYU4oKXx8IW44KG0pKSYmYSYmdGhpcy5oYXNT''@;'; put 'put ''ZWxlY3RlZEl0ZW0oKSYmKHNwKCl8fGlOKCk/dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlzLmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1l''@;'; put 'put ''bnUubGlzdGVuKCl9fTt0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyB0aGlzLmhvdC5j''@;'; put 'put ''b25zdHJ1Y3Rvcih0aGlzLmNvbnRhaW5lcixjKSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSx0aGlzLmhvdE1lbnUuaW5pdCgpLE5uZShvUyx0aGlzLGZ1bmN0aW9uIGNndChuKXtyZXR1cm4gWTdlKHtzaXplOigpPT5uLmNvdW50Um93''@;'; put 'put ''cygpLG9uSXRlbVNlbGVjdCh0LGUpe2NvbnN0IHI9bi5nZXRDZWxsKHQsMCk7aWYoIXJ8fGZ1bmN0aW9uIGVndChuKXtyZXR1cm4gdm8obiwiaHRTZXBhcmF0b3IiKX0ocil8fGZ1bmN0aW9uIG5ndChuKXtyZXR1cm4gdm8obiwiaHREaXNhYmxlZCIpfShyKXx8ZnVuY3Rpb24gcmd0KG4pe3Jl''@;'; put 'put ''dHVybiB2byhuLCJodFNlbGVjdGlvbkRpc2FibGVkIil9KHIpKXJldHVybiExO24uc2VsZWN0Q2VsbCh0LDAsLi4uZT9bdCwwLCExLCExXTpbXSl9LG9uQ2xlYXIoKXtuLmRlc2VsZWN0Q2VsbCgpfX0pfSh0aGlzLmhvdE1lbnUpKSxObmUockIsdGhpcyxmdW5jdGlvbiBkZ3Qobil7bGV0IHQ9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGU9W107ZnVuY3Rpb24gcihQLFkpe20oWSkuYWRkU2hvcnRjdXRzKFAse2dyb3VwOiJtZW51In0pfWZ1bmN0aW9uIGkoUCxZKXtjb25zdCBKPW0oWSk7UC5mb3JFYWNoKGNlPT57''@;'; put 'put ''bGV0e2tleXM6ZmV9PWNlO2ZlLmZvckVhY2goQWU9PkoucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKEFlKSl9KSxlLnB1c2goe3Nob3J0Y3V0czpQLGNvbnRleHROYW1lOll9KSxyKFAsWSl9ZnVuY3Rpb24gYyhQKXtyZXR1cm4gUD9gbWVudToke1B9YDoibWVudSJ9ZnVuY3Rpb24gbShQKXt2YXIg''@;'; put 'put ''WTtjb25zdCBKPW4uaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKSxjZT1jKFApO3JldHVybiBudWxsIT09KFk9Si5nZXRDb250ZXh0KGNlKSkmJnZvaWQgMCE9PVk/WTpKLmFkZENvbnRleHQoY2UpfXJldHVybiByKGZ1bmN0aW9uIHVndChuKXtjb25zdHtob3Q6dCxob3RNZW51OmV9PW47''@;'; put 'put ''cmV0dXJuW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sZm9yd2FyZFRvQ29udGV4dDp0LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooKT0+bi5jbG9zZSghMCl9LHtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6KHIs''@;'; put 'put ''aSk9Pntjb25zdCBhPXQuZ2V0U2V0dGluZ3MoKSxjPSJmdW5jdGlvbiI9PXR5cGVvZiBhLnRhYk1vdmVzP2EudGFiTW92ZXMocik6YS50YWJNb3ZlcztpLmluY2x1ZGVzKCJzaGlmdCIpP3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1jLnJvdywtYy5jb2wpOnQuc2VsZWN0aW9uLnRyYW5z''@;'; put 'put ''Zm9ybVN0YXJ0KGMucm93LGMuY29sKSxuLmNsb3NlKCEwKX19LHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+bi5jbG9zZSgpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pm4uZ2V0TmF2aWdhdG9yKCkudG9OZXh0SXRlbSgpfSx7a2V5czpbWyJBcnJvd1VwIl1d''@;'; put 'put ''LGNhbGxiYWNrOigpPT5uLmdldE5hdmlnYXRvcigpLnRvUHJldmlvdXNJdGVtKCl9LHtrZXlzOltbdC5pc1J0bCgpPyJBcnJvd0xlZnQiOiJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57Y29uc3Qgcj1lLmdldFNlbGVjdGVkQWN0aXZlKCk7aWYocil7Y29uc3QgaT1uLm9wZW5TdWJNZW51''@;'; put 'put ''KHJbMF0pO2kmJmkuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19fSx7a2V5czpbW3QuaXNSdGwoKT8iQXJyb3dSaWdodCI6IkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2UuZ2V0U2VsZWN0ZWRBY3RpdmUoKSYmbi5pc1N1Yk1lbnUoKSYmKG4uY2xvc2UoKSxuLmlzU3ViTWVudSgp''@;'; put 'put ''JiZuLnBhcmVudE1lbnUuaG90TWVudS5saXN0ZW4oKSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd1VwIl0sWyJIb21lIl1dLGNhbGxiYWNrOigpPT5uLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkFycm93RG93biJdLFsiRW5k''@;'; put 'put ''Il1dLGNhbGxiYWNrOigpPT5uLmdldE5hdmlnYXRvcigpLnRvTGFzdEl0ZW0oKX0se2tleXM6W1siRW50ZXIiXSxbIlNwYWNlIl1dLGNhbGxiYWNrOnI9Pntjb25zdCBpPWUuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtpJiYoZS5nZXRTb3VyY2VEYXRhQXRSb3coaVswXSkuc3VibWVudT9uLm9wZW5T''@;'; put 'put ''dWJNZW51KGlbMF0pLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCk6KG4uZXhlY3V0ZUNvbW1hbmQociksbi5jbG9zZSghMCkpKX19LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e2UuZ2V0U2VsZWN0ZWRBY3RpdmUoKT9lLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtZS5j''@;'; put 'put ''b3VudFZpc2libGVSb3dzKCksMCk6bi5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9PntlLmdldFNlbGVjdGVkQWN0aXZlKCk/ZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoZS5jb3VudFZpc2libGVSb3dzKCksMCk6bi5n''@;'; put 'put ''ZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9fV19KG4pKSx0LmZvckVhY2goUD0+e2xldHtzaG9ydGN1dHM6WSxjb250ZXh0TmFtZTpKfT1QO2koWSxKKX0pLHthZGRDdXN0b21TaG9ydGN1dHM6aSxnZXRDdXN0b21TaG9ydGN1dHM6ZnVuY3Rpb24gYSgpe3JldHVyblsuLi5lXX0sZ2V0Q29u''@;'; put 'put ''dGV4dDptLGxpc3RlbjpmdW5jdGlvbiBDKFApe24uaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZShjKFApKX19fSh0aGlzKSksdzgockIsdGhpcykubGlzdGVuKCksdGhpcy5mb2N1cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJhZnRlck9wZW4iLCgpPT50aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0ZXJTdWJtZW51T3BlbiIsdGhpcykpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJPcGVuIix0aGlzKX1jbG9zZSgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''JiZhcmd1bWVudHNbMF07aWYodGhpcy5pc09wZW5lZCgpKWlmKHQmJnRoaXMuaXNTdWJNZW51KCkpdGhpcy5wYXJlbnRNZW51LmNsb3NlKCk7ZWxzZSBpZih3OChvUyx0aGlzKS5jbGVhcigpLHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMuaXNTdWJN''@;'; put 'put ''ZW51KCkpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGU9dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtlJiZaYSh0aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRDZWxsKGVbMF0sMCksW3pmKCExKV0pfXRoaXMucGFyZW50TWVu''@;'; put 'put ''dS5ob3RNZW51Lmxpc3RlbigpfX1vcGVuU3ViTWVudSh0KXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGU9dGhpcy5ob3RNZW51LmdldENlbGwodCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhZXx8IWZ1bmN0aW9uIHRndChuKXtyZXR1cm4gdm8obiwiaHRTdWJtZW51''@;'; put 'put ''Iil9KGUpKXJldHVybiExO2NvbnN0IHI9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0KSxpPW5ldyBzUyh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpyLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRo''@;'; put 'put ''aXMub3B0aW9ucy5jb250YWluZXJ9KTtyZXR1cm4gaS5zZXRNZW51SXRlbXMoci5zdWJtZW51Lml0ZW1zKSxpLm9wZW4oKSxpLnNldFBvc2l0aW9uKGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbci5rZXldPWksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlh''@;'; put 'put ''VGFncyYmWmEoZSxbemYoITApXSksaX1jbG9zZVN1Yk1lbnUodCl7Y29uc3QgZT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHQpLHI9dGhpcy5ob3RTdWJNZW51c1tlLmtleV07aWYocil7ci5kZXN0cm95KCksZGVsZXRlIHRoaXMuaG90U3ViTWVudXNbZS5rZXldO2NvbnN0IGk9''@;'; put 'put ''dGhpcy5ob3RNZW51LmdldENlbGwodCwwKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZaYShpLFt6ZighMSldKX19Y2xvc2VBbGxTdWJNZW51cygpe1luKHRoaXMuaG90TWVudS5nZXREYXRhKCksKHQsZSk9PnRoaXMuY2xvc2VTdWJNZW51KGUpKX1pc0FsbFN1Yk1lbnVzQ2xv''@;'; put 'put ''c2VkKCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9Zm9jdXMoKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxp''@;'; put 'put ''c3RlbigpLHRoaXMuaG90TWVudS5saXN0ZW4oKSl9ZGVzdHJveSgpe2NvbnN0IHQ9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdCYmdC5y''@;'; put 'put ''ZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZCh0KXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm47Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkSXRlbSgp''@;'; put 'put ''O2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixlLHQpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShlKSlyZXR1cm47Y29uc3Qgcj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaT1yP2Z1bmN0aW9uIFE0dChuKXtyZXR1cm4gV3Mobix0PT4oe3N0YXJ0OnQuZ2V0VG9wU3RhcnRDb3Ju''@;'; put 'put ''ZXIoKSxlbmQ6dC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0ocik6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsZS5rZXksaSx0KSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGUua2V5LGksdCl9''@;'; put 'put ''aXNDb21tYW5kUGFzc2l2ZSh0KXtyZXR1cm4hMT09PXQuaXNDb21tYW5kfHxGbmUodCl8fG5CKHQsdGhpcy5ob3QpfHxQbmUodCl9c2V0T2Zmc2V0KHQpe3RoaXMucG9zaXRpb25lci5zZXRPZmZzZXQodCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu''@;'; put 'put ''dHNbMV06MCl9c2V0UG9zaXRpb24odCl7dGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5wb3NpdGlvbmVyLnNldFBhcmVudEVsZW1lbnQodGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lciksdGhpcy5wb3NpdGlvbmVyLnNldEVsZW1lbnQodGhpcy5jb250YWluZXIpLnVwZGF0ZVBvc2l0aW9uKHQpfXVw''@;'; put 'put ''ZGF0ZU1lbnVEaW1lbnNpb25zKCl7Y29uc3R7d3RUYWJsZTp0fT10aGlzLmhvdE1lbnUudmlldy5fd3QsZT10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLHI9dC5oaWRlci5zdHlsZSxpPXQuaG9sZGVyLnN0eWxlLGE9cGFyc2VJbnQoci53aWR0aCwxMCksYz1kMChlLChtLEMsUCk9''@;'; put 'put ''Pntjb25zdCBKPXRoaXMuaG90TWVudS5nZXRDZWxsKFAsMCk/SHUodGhpcy5ob3RNZW51LmdldENlbGwoUCwwKSk6MDtyZXR1cm4gbSsoQy5uYW1lPT09eXM/MTpKKX0sMCk7dGhpcy5ob3RNZW51LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKT8oaS53aWR0aD1gJHthKzN9cHhgLGku''@;'; put 'put ''aGVpZ2h0PWAke2MrM31weGApOihpLndpZHRoPWAke2F9cHhgLGkuaGVpZ2h0PWAke2N9cHhgKSxyLmhlaWdodD1pLmhlaWdodH1jcmVhdGVDb250YWluZXIoKXtjb25zdCBlPXRoaXMub3B0aW9ucy5jb250YWluZXIub3duZXJEb2N1bWVudDtsZXQgaSxyPWFyZ3VtZW50cy5sZW5ndGg+MCYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiByJiYoYWwocikmJihyPXIuY2FsbCh0aGlzLmhvdCkscj1udWxsPT09cnx8bWMocik/IiI6ci50b1N0cmluZygpKSxyPXIucmVwbGFjZSgvW15BLVphLXowLTldL2csIl8iKSxyPWAke3RoaXMub3B0aW9ucy5j''@;'; put 'put ''bGFzc05hbWV9U3ViXyR7cn1gLGk9ZS5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfS4ke3J9YCkpLGl8fChpPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksdGkoaSxgaHRNZW51IGhhbmRzb250YWJsZSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksciYmdGkoaSxy''@;'; put 'put ''KSx0aGlzLm9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGkpKSxpfW9uQWZ0ZXJJbml0KCl7dGhpcy51cGRhdGVNZW51RGltZW5zaW9ucygpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJlphKHRoaXMuaG90TWVudS5yb290RWxlbWVudCxbWyJyb2xlIiwibWVudSJdLGFw''@;'; put 'put ''KC0xKV0pfW9uRG9jdW1lbnRNb3VzZURvd24odCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5vcHRpb25zLnN0YW5kYWxvbmUmJnRoaXMuaG90TWVudSYmIVg2KHQudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCl8fCh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKXx8dGhpcy5pc1N1''@;'; put 'put ''Yk1lbnUoKSkmJiFYNih0LnRhcmdldCwiLmh0TWVudSIpKSYmdGhpcy5jbG9zZSghMCl9b25Eb2N1bWVudENvbnRleHRNZW51KHQpe3RoaXMuaXNPcGVuZWQoKSYmdm8odC50YXJnZXQsImh0Q29yZSIpJiZYNih0LnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpJiZ0LnByZXZlbnRE''@;'; put 'put ''ZWZhdWx0KCl9fWZ1bmN0aW9uIFZuZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24geWd0KG4pe3ZhciB0PWZ1bmN0aW9uIF9ndChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUu''@;'; put 'put ''Y2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gYUIobix0LGUpe2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXBsKHNTLCQwKTtjb25zdCBlRD0iY29udGV4dE1lbnUiLFE3ZT1l''@;'; put 'put ''RDtFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbnRleHRNZW51U2hvdyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51U2hvdyIp''@;'; put 'put ''LEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51SGlkZSIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RXhlY3V0ZSIpO3ZhciB0RD1uZXcgV2Vha1NldDtjbGFzcyBvQiBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIo''@;'; put 'put ''Li4uYXJndW1lbnRzKSxmdW5jdGlvbiBtZ3Qobix0KXsoZnVuY3Rpb24gdmd0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5hZGQobil9''@;'; put 'put ''KHRoaXMsdEQpLFZuZSh0aGlzLCJjb21tYW5kRXhlY3V0b3IiLG5ldyBCN2UodGhpcy5ob3QpKSxWbmUodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxWbmUodGhpcywibWVudSIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGVEfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9S''@;'; put 'put ''SVRZKCl7cmV0dXJuIDcwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltKVixRVix5cywkayxLayx5cyxxVixxayx5cyxlQixYVix5cyxYayx5cyxlM119aXNFbmFibGVkKCl7''@;'; put 'put ''cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2VEXX1lbmFibGVQbHVnaW4oKXt2YXIgdD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgZT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2VEXTsiZnVuY3Rpb24iPT10eXBlb2YgZS5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhl''@;'; put 'put ''Y3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soZS5jYWxsYmFjayksdGhpcy5tZW51PW5ldyBzUyh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodENvbnRleHRNZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6ZS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnR9KSx0aGlz''@;'; put 'put ''Lm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+YUIodEQsdGhpcyxDZ3QpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PmFCKHRELHRoaXMsU2d0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3Nl''@;'; put 'put ''IiwoKT0+YUIodEQsdGhpcyxNZ3QpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiB0''@;'; put 'put ''LmV4ZWN1dGVDb21tYW5kLmNhbGwodCwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIscj0+YUIodEQsdGhpcyx3Z3QpLmNhbGwodGhpcyxyKSksdGhpcy5hZGRIb29rKCJiZWZvcmVEaWFsb2dTaG93IiwoKT0+dGhpcy5jbG9zZSgpKSx0aGlzLnJlZ2lzdGVy''@;'; put 'put ''U2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmKHRoaXMubWVudS5kZXN0''@;'; put 'put ''cm95KCksdGhpcy5tZW51PW51bGwpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250''@;'; put 'put ''cm9sL01ldGEiLCJTaGlmdCIsIkJhY2tzbGFzaCJdLFsiU2hpZnQiLCJGMTAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6dH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3RoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKTtjb25zdCBlPXRoaXMuaG90Lmdl''@;'; put 'put ''dENlbGwodC5yb3csdC5jb2wsITApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9elYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpO3RoaXMub3Blbih7bGVmdDplLmxlZnQrci5sZWZ0LHRvcDplLnRvcCtyLnRvcC0xK2UuaGVpZ2h0fSx7bGVmdDplLndpZHRo''@;'; put 'put ''LGFib3ZlOi1lLmhlaWdodH0pLHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSxydW5Pbmx5SWY6KCk9Pnt2YXIgdDtjb25zdCBlPW51bGw9PT0odD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmhpZ2hsaWdodDty''@;'; put 'put ''ZXR1cm4gZSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZSkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6UTdlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1''@;'; put 'put ''dHNCeUdyb3VwKFE3ZSl9b3Blbih0KXt2YXIgZTtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH07bnVsbCE9PShlPXRoaXMubWVudSkmJnZvaWQgMCE9PWUmJmUuaXNPcGVu''@;'; put 'put ''ZWQoKXx8KHRoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRoaXMubWVudS5vcGVuKCksYXMociwoaSxhKT0+e3RoaXMubWVudS5zZXRPZmZzZXQoYSxpKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbih0KSl9Y2xvc2UoKXt2YXIgdDtudWxsPT09KHQ9dGhpcy5tZW51KXx8dm9pZCAwPT09dHx8dC5j''@;'; put 'put ''bG9zZSgpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGx9ZXhlY3V0ZUNvbW1hbmQodCl7bnVsbD09PXRoaXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlPjE/ZS0xOjApLGk9MTtpPGU7aSsrKXJbaS0x''@;'; put 'put ''XT1hcmd1bWVudHNbaV07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZSh0LC4uLnIpfXByZXBhcmVNZW51SXRlbXMoKXt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgVzdlKHRoaXMuaG90LG9CLkRFRkFVTFRfSVRFTVMpO2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtlRF0sZT17aXRl''@;'; put 'put ''bXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXModCl9O3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGUpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhlLml0ZW1zKTtjb25zdCByPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0''@;'; put 'put ''ZW1zKHQpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixyKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKHIpLFluKHIsaT0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGkua2V5LGkpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMu''@;'; put 'put ''bWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHdndChuKXtjb25zdCB0PXRoaXMuaG90LmdldFNldHRpbmdzKCksZT10LnJvd0hlYWRlcnMscj10LmNvbEhlYWRlcnMsYT1uLnRhcmdldDtpZih0aGlzLmNsb3NlKCksdm8oYSwiaGFuZHNvbnRhYmxl''@;'; put 'put ''SW5wdXQiKXx8KG4ucHJldmVudERlZmF1bHQoKSxuLnN0b3BQcm9wYWdhdGlvbigpLCEoZXx8cnx8ZnVuY3Rpb24gaShtKXtyZXR1cm4iVEQiPT09bS5ub2RlTmFtZXx8IlREIj09PW0ucGFyZW50Tm9kZS5ub2RlTmFtZX0oYSl8fHZvKGEsImN1cnJlbnQiKSYmdm8oYSwid3RCb3JkZXIiKSkp''@;'; put 'put ''KXJldHVybjtjb25zdCBjPXpWKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe3RvcDpuLmNsaWVudFkrYy50b3AsbGVmdDpuLmNsaWVudFgrYy5sZWZ0fSl9ZnVuY3Rpb24gQ2d0KCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRN''@;'; put 'put ''ZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gU2d0KCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBNZ3QoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLHRoaXMpfW9CLlNFUEFS''@;'; put 'put ''QVRPUj17bmFtZTp5c307Y2xhc3MgRGd0e2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEodCxlKXt0aGlzLmRhdGFbdF09ZX1nZXREYXRhKHQpe3JldHVybiB0aGlzLmRhdGFbdF18fHZvaWQgMH19Y2xhc3MgSWd0e2NvbnN0cnVjdG9yKCl7dGhpcy5jbGlwYm9hcmREYXRhPW5l''@;'; put 'put ''dyBEZ3R9cHJldmVudERlZmF1bHQoKXt9Y29tcG9zZWRQYXRoKCl7cmV0dXJuW119fWZ1bmN0aW9uIGxTKG4sdCxlKXtlOWUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIGU5ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1l''@;'; put 'put ''IHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gemQobix0KXtyZXR1cm4gbi5nZXQodVMobix0KSl9ZnVuY3Rpb24gY1Mobix0LGUpe3JldHVybiBuLnNldCh1UyhuLHQpLGUpLGV9ZnVuY3Rpb24gdVMobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBu''@;'; put 'put ''P249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBDOD1uZXcgV2Vha01hcCxCbmU9bmV3IFdlYWtNYXAsbkQ9bmV3IFdlYWtNYXAs''@;'; put 'put ''am5lPW5ldyBXZWFrTWFwLHpuZT1uZXcgV2Vha01hcCxyRD1uZXcgV2Vha01hcCxpRD1uZXcgV2Vha1NldDtjbGFzcyBMZ3R7Y29uc3RydWN0b3IodCl7bGV0e2NvdW50Um93czplLGNvdW50Q29sdW1uczpyLHJvd3NMaW1pdDppLGNvbHVtbnNMaW1pdDphLGNvdW50Q29sdW1uSGVhZGVyczpj''@;'; put 'put ''fT10OyhmdW5jdGlvbiBSZ3Qobix0KXtlOWUobix0KSx0LmFkZChuKX0pKHRoaXMsaUQpLGxTKHRoaXMsQzgsdm9pZCAwKSxsUyh0aGlzLEJuZSx2b2lkIDApLGxTKHRoaXMsbkQsdm9pZCAwKSxsUyh0aGlzLGpuZSx2b2lkIDApLGxTKHRoaXMsem5lLHZvaWQgMCksbFModGhpcyxyRCx2b2lk''@;'; put 'put ''IDApLGNTKEJuZSx0aGlzLGUpLGNTKG5ELHRoaXMsciksY1Moam5lLHRoaXMsaSksY1Moem5lLHRoaXMsYSksY1MockQsdGhpcyxjKX1zZXRTZWxlY3RlZFJhbmdlKHQpe2NTKEM4LHRoaXMsdCl9Z2V0Q2VsbHNSYW5nZSgpe2lmKDA9PT16ZChCbmUsdGhpcykuY2FsbCh0aGlzKXx8MD09PXpk''@;'; put 'put ''KG5ELHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7cm93OnQsY29sOmV9PXpkKEM4LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpyLGNvbDppfT16ZChDOCx0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxhPXVTKGlELHRoaXMsT2d0KS5jYWxsKHRoaXMsdCxyKSxj''@;'; put 'put ''PXVTKGlELHRoaXMsVW5lKS5jYWxsKHRoaXMsZSxpKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6ciE9PWF8fGkhPT1jLHN0YXJ0Um93OnQsc3RhcnRDb2w6ZSxlbmRSb3c6YSxlbmRDb2w6Y319Z2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT16ZChuRCx0aGlzKS5jYWxs''@;'; put 'put ''KHRoaXMpfHwwPT09emQockQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6dH09emQoQzgsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmV9PXpkKEM4LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLHI9dVMoaUQsdGhpcyxVbmUpLmNhbGwodGhpcyx0LGUp''@;'; put 'put ''O3JldHVybntpc1JhbmdlVHJpbW1lZDplIT09cixzdGFydFJvdzotMSxzdGFydENvbDp0LGVuZFJvdzotMSxlbmRDb2w6cn19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PXpkKG5ELHRoaXMpLmNhbGwodGhpcyl8fDA9PT16ZChyRCx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBu''@;'; put 'put ''dWxsO2NvbnN0e2NvbDp0fT16ZChDOCx0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6ZX09emQoQzgsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCkscj11UyhpRCx0aGlzLFVuZSkuY2FsbCh0aGlzLHQsZSk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmUhPT1yLHN0YXJ0Um93Oi16ZChy''@;'; put 'put ''RCx0aGlzKS5jYWxsKHRoaXMpLHN0YXJ0Q29sOnQsZW5kUm93Oi0xLGVuZENvbDpyfX19ZnVuY3Rpb24gVW5lKG4sdCl7cmV0dXJuIE1hdGgubWluKHQsTWF0aC5tYXgobit6ZCh6bmUsdGhpcykuY2FsbCh0aGlzKS0xLG4pKX1mdW5jdGlvbiBPZ3Qobix0KXtyZXR1cm4gTWF0aC5taW4odCxN''@;'; put 'put ''YXRoLm1heChuK3pkKGpuZSx0aGlzKS5jYWxsKHRoaXMpLTEsbikpfWZ1bmN0aW9uIHQ5ZShuKXtjb25zdCB0PVtdLGU9W107cmV0dXJuIFluKG4scj0+e2VvKE1hdGgubWluKHIuc3RhcnRSb3csci5lbmRSb3cpLE1hdGgubWF4KHIuc3RhcnRSb3csci5lbmRSb3cpLEM9PnstMT09PXQuaW5k''@;'; put 'put ''ZXhPZihDKSYmdC5wdXNoKEMpfSksZW8oTWF0aC5taW4oci5zdGFydENvbCxyLmVuZENvbCksTWF0aC5tYXgoci5zdGFydENvbCxyLmVuZENvbCksQz0+ey0xPT09ZS5pbmRleE9mKEMpJiZlLnB1c2goQyl9KX0pLHtyb3dzOnQsY29sdW1uczplfX1mdW5jdGlvbiBTOChuLHQsZSl7bjllKG4s''@;'; put 'put ''dCksdC5zZXQobixlKX1mdW5jdGlvbiBuOWUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGFEKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlv''@;'; put 'put ''biBGZ3Qobil7dmFyIHQ9ZnVuY3Rpb24gSGd0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0''@;'; put 'put ''dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBu''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiBOaChuLHQpe3JldHVybiBuLmdldChhZChuLHQpKX1mdW5jdGlvbiB2cChuLHQsZSl7cmV0dXJuIG4uc2V0KGFkKG4s''@;'; put 'put ''dCksZSksZX1mdW5jdGlvbiBhZChuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9''@;'; put 'put ''RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weUxpbWl0IiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ3V0IiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFm''@;'; put 'put ''dGVyQ3V0IiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVBhc3RlIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUGFzdGUiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29weSIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRl''@;'; put 'put ''ckNvcHkiKTtjb25zdCBXbmU9ImNvcHlQYXN0ZSIsVmd0PVsiZnJhZ21lbnRTZWxlY3Rpb24iXSxyOWU9ImFwcGxpY2F0aW9uL2h0LXNvdXJjZS1kYXRhLWpzb24taHRtbCIsaTllPVsnPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJIYW5kc29udGFibGUiLz4nLCc8c3R5bGUgdHlw''@;'; put 'put ''ZT0idGV4dC9jc3MiPnRke3doaXRlLXNwYWNlOm5vcm1hbH1icnttc28tZGF0YS1wbGFjZW1lbnQ6c2FtZS1jZWxsfTwvc3R5bGU+J10uam9pbigiIik7dmFyIFpuZT1uZXcgV2Vha01hcCxZbmU9bmV3IFdlYWtNYXAsR25lPW5ldyBXZWFrTWFwLGRTPW5ldyBXZWFrTWFwLHNCPW5ldyBXZWFr''@;'; put 'put ''TWFwLGxCPW5ldyBXZWFrTWFwLGhTPW5ldyBXZWFrTWFwLGNCPW5ldyBXZWFrTWFwLFVkPW5ldyBXZWFrU2V0O2NsYXNzIEJndCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBQZ3Qobix0KXtuOWUobix0KSx0LmFkZChuKX0odGhpcyxVZCks''@;'; put 'put ''YUQodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLGFEKHRoaXMsInJvd3NMaW1pdCIsMS8wKSxhRCh0aGlzLCJwYXN0ZU1vZGUiLCJvdmVyd3JpdGUiKSxhRCh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLFM4KHRoaXMsWm5lLCExKSxTOCh0aGlzLFluZSwh''@;'; put 'put ''MSksUzgodGhpcyxHbmUsITEpLFM4KHRoaXMsZFMsImNlbGxzLW9ubHkiKSxTOCh0aGlzLHNCLCExKSxTOCh0aGlzLGxCLCExKSxTOCh0aGlzLGhTLG5ldyBMZ3Qoe2NvdW50Um93czooKT0+dGhpcy5ob3QuY291bnRSb3dzKCksY291bnRDb2x1bW5zOigpPT50aGlzLmhvdC5jb3VudENvbHMo''@;'; put 'put ''KSxyb3dzTGltaXQ6KCk9PnRoaXMucm93c0xpbWl0LGNvbHVtbnNMaW1pdDooKT0+dGhpcy5jb2x1bW5zTGltaXQsY291bnRDb2x1bW5IZWFkZXJzOigpPT50aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSkpLFM4KHRoaXMsY0IsITEpLGFEKHRoaXMsImNvcHlhYmxlUmFu''@;'; put 'put ''Z2VzIixbXSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFduZX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltXbmUsLi4uVmd0XX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA4MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57''@;'; put 'put ''cGFzdGVNb2RlOiJvdmVyd3JpdGUiLHJvd3NMaW1pdDoxLzAsY29sdW1uc0xpbWl0OjEvMCxjb3B5Q29sdW1uSGVhZGVyczohMSxjb3B5Q29sdW1uR3JvdXBIZWFkZXJzOiExLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5n''@;'; put 'put ''cygpW1duZV19ZW5hYmxlUGx1Z2luKCl7dmFyIHQsZSxyPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PSh0PXRoaXMuZ2V0U2V0dGluZygicGFzdGVNb2RlIikpJiZ2b2lkIDAhPT10P3Q6dGhpcy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4odGhpcy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJyb3dzTGltaXQiKSk/dGhpcy5yb3dzTGltaXQ6dGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpKT90aGlzLmNvbHVtbnNMaW1pdDp0aGlzLmdldFNldHRpbmcoImNvbHVt''@;'; put 'put ''bnNMaW1pdCIpLHZwKFpuZSx0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnMiKSksdnAoWW5lLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uR3JvdXBIZWFkZXJzIikpLHZwKEduZSx0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnNPbmx5''@;'; put 'put ''IikpLHRoaXMudWlDb250YWluZXI9bnVsbCE9PShlPXRoaXMuZ2V0U2V0dGluZygidWlDb250YWluZXIiKSkmJnZvaWQgMCE9PWU/ZTp0aGlzLnVpQ29udGFpbmVyLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixpPT5hZChVZCx0aGlzLFVndCkuY2FsbCh0''@;'; put 'put ''aGlzLGkpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiBhZChVZCxyLFdndCkuY2FsbChyLC4uLmEpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PmFkKFVkLHRoaXMsWmd0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY29weSIsZnVuY3Rpb24oKXtyZXR1cm4gci5vbkNvcHkoLi4uYXJndW1lbnRzKX0pLHRo''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJjdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHIub25DdXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJwYXN0''@;'; put 'put ''ZSIsZnVuY3Rpb24oKXtyZXR1cm4gci5vblBhc3RlKC4uLmFyZ3VtZW50cyl9KSxHQSgpJiYodGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VlbnRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gYWQoVWQscixZZ3QpLmNhbGwociwuLi5hKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksIm1vdXNlbGVhdmUiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkoaSksYz0wO2M8aTtjKyspYVtjXT1hcmd1bWVudHNbY107cmV0dXJuIGFkKFVkLHIsR2d0KS5jYWxsKHIsLi4uYSl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+YWQoVWQsdGhpcywkZ3QpLmNhbGwo''@;'; put 'put ''dGhpcykpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfWNvcHkoKXt2cChkUyx0aGlzLGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiY2VsbHMtb25seSIpLHZwKHNCLHRoaXMsITApLGFkKFVkLHRoaXMsYTllKS5jYWxsKHRoaXMsImNvcHkiKX1jb3B5Q2VsbHNPbmx5KCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9Y29weUNvbHVt''@;'; put 'put ''bkhlYWRlcnNPbmx5KCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVycy1vbmx5Iil9Y29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9Y29weVdpdGhDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1oZWFk''@;'; put 'put ''ZXJzIil9Y3V0KCl7dnAobEIsdGhpcywhMCksYWQoVWQsdGhpcyxhOWUpLmNhbGwodGhpcywiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKHQpe3JldHVybiByVih0aGlzLmdldFJhbmdlZERhdGEodCkpfWdldFJhbmdlZERhdGEodCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCByPVtdLHtyb3dzOmksY29sdW1uczphfT10OWUodCk7cmV0dXJuIFluKGksYz0+e2NvbnN0IG09W107WW4oYSxDPT57aWYoYzwwKW0ucHVzaCh0aGlzLmhvdC5nZXRDb2xIZWFkZXIoQyxjKSk7ZWxzZXtsZXQgUD1lP3RoaXMu''@;'; put 'put ''aG90LmdldENvcHlhYmxlU291cmNlRGF0YShjLEMpOnRoaXMuaG90LmdldENvcHlhYmxlRGF0YShjLEMpO2UmJmhvKFApJiYoUD1KU09OLnN0cmluZ2lmeShQKSksbS5wdXNoKFApfX0pLHIucHVzaChtKX0pLHJ9cGFzdGUoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIsZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dDtpZighdCYmIWUpcmV0dXJuO2NvbnN0IHI9bmV3IElndDt0JiZyLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsdCksZSYm''@;'; put 'put ''ci5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsZSksdGhpcy5vblBhc3RlKHIpfXNldENvcHlhYmxlVGV4dCgpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCF0KXJldHVybjtpZih0LmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuIHZvaWQodGhp''@;'; put 'put ''cy5jb3B5YWJsZVJhbmdlcz1bXSk7TmgoaFMsdGhpcykuc2V0U2VsZWN0ZWRSYW5nZSh0KTtjb25zdCBlPW5ldyBNYXAoW1siaGVhZGVycyIsbnVsbF0sWyJjZWxscyIsbnVsbF1dKTsiY29sdW1uLWhlYWRlcnMtb25seSI9PT1OaChkUyx0aGlzKT9lLnNldCgiaGVhZGVycyIsTmgoaFMsdGhp''@;'; put 'put ''cykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKTooIndpdGgtY29sdW1uLWhlYWRlcnMiPT09TmgoZFMsdGhpcyk/ZS5zZXQoImhlYWRlcnMiLE5oKGhTLHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6IndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMi''@;'; put 'put ''PT09TmgoZFMsdGhpcykmJmUuc2V0KCJoZWFkZXJzIixOaChoUyx0aGlzKS5nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKSksZS5zZXQoImNlbGxzIixOaChoUyx0aGlzKS5nZXRDZWxsc1JhbmdlKCkpKSx0aGlzLmNvcHlhYmxlUmFuZ2VzPUFycmF5LmZyb20oZS52YWx1ZXMoKSkuZmlsdGVy''@;'; put 'put ''KGk9Pm51bGwhPT1pKS5tYXAoaT0+e2xldHtzdGFydFJvdzphLHN0YXJ0Q29sOmMsZW5kUm93Om0sZW5kQ29sOkN9PWk7cmV0dXJue3N0YXJ0Um93OmEsc3RhcnRDb2w6YyxlbmRSb3c6bSxlbmRDb2w6Q319KSx0aGlzLmNvcHlhYmxlUmFuZ2VzPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlD''@;'; put 'put ''b3B5YWJsZVJhbmdlIix0aGlzLmNvcHlhYmxlUmFuZ2VzKTtjb25zdCByPWUuZ2V0KCJjZWxscyIpO2lmKG51bGwhPT1yJiZyLmlzUmFuZ2VUcmltbWVkKXtjb25zdHtzdGFydFJvdzppLHN0YXJ0Q29sOmEsZW5kUm93OmMsZW5kQ29sOm19PXI7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29w''@;'; put 'put ''eUxpbWl0IixjLWkrMSxtLWErMSx0aGlzLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdCl9fWlzRWRpdG9yT3BlbmVkKCl7dmFyIHQ7cmV0dXJuIG51bGw9PT0odD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaXNPcGVuZWQoKX1wb3B1bGF0ZVZh''@;'; put 'put ''bHVlcyh0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXQubGVuZ3RoKXJldHVybltudWxsLG51bGwsbnVsbCxudWxsXTtjb25zdCBpPXQubGVuZ3RoLGE9''@;'; put 'put ''dFswXS5sZW5ndGgsYz1bXSx7cm93Om0sY29sOkN9PXIuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OlAsY29sOll9PXIuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IEo9bSxjZT1DLGZlPW0sQWU9Qztmb3IoO2MubGVuZ3RoPGl8fEo8PVA7KXtjb25zdHtza2lwUm93T25QYXN0ZTpYZSx2aXN1''@;'; put 'put ''YWxSb3c6cnR9PXRoaXMuaG90LmdldENlbGxNZXRhKEosQyk7aWYoSj1ydCsxLCEwPT09WGUpY29udGludWU7ZmU9cnQsY2U9Qztjb25zdCBkdD1bXSxqdD1jLmxlbmd0aCVpO2Zvcig7ZHQubGVuZ3RoPGF8fGNlPD1ZOyl7dmFyIEhlO2NvbnN0e3NraXBDb2x1bW5PblBhc3RlOkZ0LHZpc3Vh''@;'; put 'put ''bENvbDpwbn09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEocnQsY2UpLG9uPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwocnQsY2UpLGduPWR0Lmxlbmd0aCVhO2lmKGNlPXBuKzEsITA9PT1GdCljb250aW51ZTtBZT1wbjtjb25zdCBabj1udWxsPT1lfHxudWxsPT09KEhlPWVbanRdKXx8dm9p''@;'; put 'put ''ZCAwPT09SGU/dm9pZCAwOkhlW2duXTtsZXQgR3I9dFtqdF1bZ25dO2lmKGUmJkZnZShabikpe2NvbnN0IEVyPUpTT04ucGFyc2UoWm4pOyhobyhvbil8fG51bGw9PT1vbikmJihHcj1Fcil9ZHQucHVzaChHcil9Yy5wdXNoKGR0KX1yZXR1cm4gdnAoY0IsdGhpcywhMCksdGhpcy5ob3QucG9w''@;'; put 'put ''dWxhdGVGcm9tQXJyYXkobSxDLGMsdm9pZCAwLHZvaWQgMCwiQ29weVBhc3RlLnBhc3RlIix0aGlzLnBhc3RlTW9kZSksW20sQyxmZSxBZV19b25Db3B5KHQpe2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKVswXSxyPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50''@;'; put 'put ''KCksaT1lPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFOaChzQix0aGlzKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHxNNChlKSYmKGkmJmUhPT1yfHwhaSYmZSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhJEEoZSx0''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSx2cChzQix0aGlzLCExKTtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSxjPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlh''@;'; put 'put ''YmxlUmFuZ2VzLCEwKSxtPWFkKFVkLHRoaXMsamd0KS5jYWxsKHRoaXMsdGhpcy5jb3B5YWJsZVJhbmdlcyk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvcHkiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyxtKSYmKGFkKFVkLHRoaXMsczllKS5jYWxsKHRoaXMsdCxhLGMpLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckNvcHkiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyxtKSksdnAoZFMsdGhpcywiY2VsbHMtb25seSIpfW9uQ3V0KHQpe2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKVswXSxyPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaT1lPy5oYXNB''@;'; put 'put ''dHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFOaChsQix0aGlzKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHxNNChlKSYmKGkmJmUhPT1yfHwhaSYmZSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhJEEoZSx0aGlzLmhvdC5yb290''@;'; put 'put ''RWxlbWVudCkpKXJldHVybjt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSx2cChsQix0aGlzLCExKTtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSxjPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzLCEw''@;'; put 'put ''KTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3V0IixhLHRoaXMuY29weWFibGVSYW5nZXMpJiYoYWQoVWQsdGhpcyxzOWUpLmNhbGwodGhpcyx0LGEsYyksdGhpcy5ob3QuZW1wdHlTZWxlY3RlZENlbGxzKCJDb3B5UGFzdGUuY3V0IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3V0Iixh''@;'; put 'put ''LHRoaXMuY29weWFibGVSYW5nZXMpKX1vblBhc3RlKHQpe2NvbnN0IGU9dC5jb21wb3NlZFBhdGgoKVswXSxyPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaT1lPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlz''@;'; put 'put ''dGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8IXRoaXMuaG90LmdldFNlbGVjdGVkKCl8fE00KGUpJiYoaSYmZSE9PXJ8fCFpJiZlIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiEkQShlLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2xldCBhLGM7aWYodC5wcmV2''@;'; put 'put ''ZW50RGVmYXVsdCgpLHQmJnR5cGVvZiB0LmNsaXBib2FyZERhdGE8InUiKXtjb25zdCBKPXQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKHI5ZSk7SiYmKGM9VEooSix0aGlzLmhvdC5yb290RG9jdW1lbnQpLmRhdGEpO2NvbnN0IGNlPUpIKHQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0''@;'; put 'put ''bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2E9Y2UmJi8oPHRhYmxlKXwoPFRBQkxFKS9nLnRlc3QoY2UpP1RKKGNlLHRoaXMuaG90LnJvb3REb2N1bWVudCkuZGF0YTp0LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFp''@;'; put 'put ''biIpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdHlwZW9mIHRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YTwidSImJihhPXRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0IikpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmKGE9ZnVu''@;'; put 'put ''Y3Rpb24gYTF0KG4pe2NvbnN0IHQ9W1siIl1dO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gdDtsZXQgaSxlPTAscj0wO2Zvcig7bi5sZW5ndGg+MCYmaSE9PW4ubGVuZ3RoOylpZihpPW4ubGVuZ3RoLG4ubWF0Y2goVDZlKSluPW4ucmVwbGFjZShUNmUsIiIpLGUrPTEsdFtyXVtlXT0iIjtlbHNl''@;'; put 'put ''IGlmKG4ubWF0Y2goRTZlKSluPW4ucmVwbGFjZShFNmUsIiIpLGU9MCxyKz0xLHRbcl09WyIiXTtlbHNle2xldCBhPSIiO2lmKG4uc3RhcnRzV2l0aCgnIicpKXtsZXQgYz0wLG09ITA7Zm9yKDttOyl7Y29uc3QgQz1uLnNsaWNlKDAsMSk7JyInPT09QyYmKGMrPTEpLGErPUMsKDA9PT0obj1u''@;'; put 'put ''LnNsaWNlKDEpKS5sZW5ndGh8fG4ubWF0Y2goL15bXHRcclxuXS8pJiZjJTI9PTApJiYobT0hMSl9YT1hLnJlcGxhY2UoL14iLywiIikucmVwbGFjZSgvIiQvLCIiKS5yZXBsYWNlKC9bIl0qL2csQz0+bmV3IEFycmF5KE1hdGguZmxvb3IoQy5sZW5ndGgvMikpLmZpbGwoJyInKS5qb2luKCIi''@;'; put 'put ''KSl9ZWxzZXtjb25zdCBjPW4ubWF0Y2goaTF0KTthPWM/Y1swXToiIixuPW4uc2xpY2UoYS5sZW5ndGgpfXRbcl1bZV09YX1yZXR1cm4gdH0oYSkpLHZvaWQgMD09PWF8fGEmJjA9PT1hLmxlbmd0aHx8ITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUGFzdGUiLGEsdGhpcy5jb3B5YWJs''@;'; put 'put ''ZVJhbmdlcykpcmV0dXJuO2NvbnN0W20sQyxQLFldPXRoaXMucG9wdWxhdGVWYWx1ZXMoYSxjKTtudWxsIT09bSYmbnVsbCE9PUMmJnRoaXMuaG90LnNlbGVjdENlbGwobSxDLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsUCksTWF0aC5taW4odGhpcy5ob3QuY291bnRDb2xzKCkt''@;'; put 'put ''MSxZKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gYTllKG4pe2lmKEdBKCkpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKHQpe2NvbnN0''@;'; put 'put ''e3JvdzplLGNvbDpyfT10LmhpZ2hsaWdodCxpPXRoaXMuaG90LmdldENlbGwoZSxyLCEwKTtpJiZmNWUoaSwoKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChuKX0pfX1lbHNlIHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChuKX1mdW5jdGlvbiBqZ3Qobil7''@;'; put 'put ''Y29uc3R7cm93czp0fT10OWUobik7bGV0IGU9MDtmb3IobGV0IHI9MDtyPHQubGVuZ3RoJiYhKHRbcl0+PTApO3IrKyllKz0xO3JldHVybntjb2x1bW5IZWFkZXJzQ291bnQ6ZX19ZnVuY3Rpb24gemd0KCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3Qgbj10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYobil7Y29uc3R7cm93OnQsY29sOmV9PW4uaGlnaGxpZ2h0LHI9dGhpcy5ob3QuZ2V0Q2VsbCh0LGUsITApO3ImJmhKKHIpfX19ZnVuY3Rpb24gbzllKCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3Qgbj10aGlzLmhvdC5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlQWN0aXZlKCk7aWYobil7Y29uc3R7cm93OnQsY29sOmV9PW4uaGlnaGxpZ2h0LHI9dGhpcy5ob3QuZ2V0Q2VsbCh0LGUsITApO251bGwhPXImJnIuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSYmZkoocil9fX1mdW5jdGlvbiBzOWUobix0LGUpe2NvbnN0IHI9clYodCk7''@;'; put 'put ''aWYobiYmbi5jbGlwYm9hcmREYXRhKXtjb25zdCBpPUVKKHQpLGE9RUooZSk7bi5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLHIpLG4uY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtpOWUsaV0uam9pbigiIikpLG4uY2xpcGJvYXJkRGF0YS5zZXREYXRhKHI5''@;'; put 'put ''ZSxbaTllLGFdLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixyKX1mdW5jdGlvbiBVZ3Qobil7bi5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiB4Z3Qo''@;'; put 'put ''bil7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoT1EpfSxjYWxsYmFjaygpe24uY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25z''@;'; put 'put ''dCB0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCF0fHx0LmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgZT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWV8fGUubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxOaChabmUsdGhpcykmJm4uaXRlbXMucHVzaChm''@;'; put 'put ''dW5jdGlvbiBBZ3Qobil7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIixuYW1lKCl7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxlPXQ/Z3ModC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUFEsZSl9''@;'; put 'put ''LGNhbGxiYWNrKCl7bi5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCkpcmV0dXJuITA7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighdHx8dC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGU9''@;'; put 'put ''dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFlfHxlLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksTmgoWW5lLHRoaXMpJiZuLml0ZW1zLnB1c2goZnVuY3Rpb24gVGd0KG4pe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5fZ3JvdXBfaGVhZGVycyIsbmFtZSgpe2NvbnN0IHQ9dGhp''@;'; put 'put ''cy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZT10P2dzKHQuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEZRLGUpfSxjYWxsYmFjaygpe24uY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVh''@;'; put 'put ''ZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRlcnMpcmV0dXJuITA7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighdHx8dC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFlfHxlLmxl''@;'; put 'put ''bmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksTmgoR25lLHRoaXMpJiZuLml0ZW1zLnB1c2goZnVuY3Rpb24gRWd0KG4pe3JldHVybntrZXk6ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSIsbmFtZSgpe2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZT10P2dzKHQuZ2V0''@;'; put 'put ''V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEhRLGUpfSxjYWxsYmFjaygpe24uY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlQWN0aXZlKCk7aWYoIXR8fHQuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBlPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hZXx8ZS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLG4uaXRlbXMucHVzaChmdW5jdGlvbiBrZ3Qobil7cmV0dXJue2tleToiY3V0IixuYW1l''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShOUSl9LGNhbGxiYWNrKCl7bi5jdXQoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtp''@;'; put 'put ''ZighdHx8dC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGU9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFlfHxlLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gV2d0KG4sdCxlLHIsaSl7TmgoY0IsdGhpcykmJihpLnZhbHVlPSEwKSx2cChjQix0aGlzLCEx''@;'; put 'put ''KX1mdW5jdGlvbiBaZ3QoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fHRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuc2V0Q29weWFibGVUZXh0KCl9ZnVuY3Rpb24gWWd0KCl7YWQoVWQsdGhpcyxvOWUpLmNhbGwodGhpcyl9ZnVuY3Rpb24gR2d0KCl7YWQo''@;'; put 'put ''VWQsdGhpcyx6Z3QpLmNhbGwodGhpcyl9ZnVuY3Rpb24gJGd0KCl7YWQoVWQsdGhpcyxvOWUpLmNhbGwodGhpcyl9ZnVuY3Rpb24gbDllKG4sdCl7cmV0dXJuYGJvcmRlcl9yb3cke259Y29sJHt0fWB9ZnVuY3Rpb24gJG5lKG4pe3ZhciB0LGU7cmV0dXJuKHdhKG4uc3RhcnQpfHx3YShuLmxl''@;'; put 'put ''ZnQpKSYmKG4uc3RhcnQ9bnVsbCE9PSh0PW4uc3RhcnQpJiZ2b2lkIDAhPT10P3Q6bi5sZWZ0KSwod2Eobi5lbmQpfHx3YShuLnJpZ2h0KSkmJihuLmVuZD1udWxsIT09KGU9bi5lbmQpJiZ2b2lkIDAhPT1lP2U6bi5yaWdodCksZGVsZXRlIG4ubGVmdCxkZWxldGUgbi5yaWdodCxufWZ1bmN0''@;'; put 'put ''aW9uIHNEKG4pe3JldHVybiB3YShuLnN0YXJ0KSYmKG4ubGVmdD1uLnN0YXJ0KSx3YShuLmVuZCkmJihuLnJpZ2h0PW4uZW5kKSxufWZ1bmN0aW9uIEtuZShuLHQpe3JldHVybntpZDpsOWUobix0KSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiMwMDAiLGNvcm5lclZpc2libGU6ITF9LHJvdzpu''@;'; put 'put ''LGNvbDp0LHRvcDp7aGlkZTohMH0sYm90dG9tOntoaWRlOiEwfSxzdGFydDp7aGlkZTohMH0sZW5kOntoaWRlOiEwfX19ZnVuY3Rpb24gSTUobix0KXtsZXQgZT0hMTtyZXR1cm4gWW4obi5nZXRTZWxlY3RlZFJhbmdlKCkscj0+e3IuZm9yQWxsKChpLGEpPT57aWYoaTwwfHxhPDApcmV0dXJu''@;'; put 'put ''O2NvbnN0IGM9bi5nZXRDZWxsTWV0YShpLGEpLmJvcmRlcnM7aWYoYyl7aWYoIXQpcmV0dXJuIGU9ITAsITE7aWYoISRjKGNbdF0sImhpZGUiKXx8ITE9PT1jW3RdLmhpZGUpcmV0dXJuIGU9ITAsITF9fSl9KSxlfWZ1bmN0aW9uIHVCKG4pe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQi''@;'; put 'put ''Plx1MjcxMzwvc3Bhbj4ke259YH1jb25zdCBRZ3Q9bmV3IE1hcChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5jdGlvbiB0NXQobil7cmV0dXJue2tleToiYm9yZGVyczp0b3AiLG5hbWUoKXtsZXQgdD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobmVlKTtyZXR1cm4g''@;'; put 'put ''STUodGhpcywidG9wIikmJih0PXVCKHQpKSx0fSxjYWxsYmFjayh0LGUpe2NvbnN0IHI9STUodGhpcywidG9wIik7bi5wcmVwYXJlQm9yZGVyKGUsInRvcCIscil9fX1mdW5jdGlvbiBuNXQobil7Y29uc3QgdD1uLmhvdC5pc1J0bCgpPyJzdGFydCI6ImVuZCI7cmV0dXJue2tleToiYm9yZGVy''@;'; put 'put ''czpyaWdodCIsbmFtZSgpe2xldCBlPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShyZWUpO3JldHVybiBJNSh0aGlzLHQpJiYoZT11QihlKSksZX0sY2FsbGJhY2soZSxyKXtjb25zdCBpPUk1KHRoaXMsdCk7bi5wcmVwYXJlQm9yZGVyKHIsdCxpKX19fWZ1bmN0aW9uIHI1dChuKXtyZXR1cm57''@;'; put 'put ''a2V5OiJib3JkZXJzOmJvdHRvbSIsbmFtZSgpe2xldCB0PXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpZWUpO3JldHVybiBJNSh0aGlzLCJib3R0b20iKSYmKHQ9dUIodCkpLHR9LGNhbGxiYWNrKHQsZSl7Y29uc3Qgcj1JNSh0aGlzLCJib3R0b20iKTtuLnByZXBhcmVCb3JkZXIoZSwiYm90''@;'; put 'put ''dG9tIixyKX19fWZ1bmN0aW9uIGk1dChuKXtjb25zdCB0PW4uaG90LmlzUnRsKCk/ImVuZCI6InN0YXJ0IjtyZXR1cm57a2V5OiJib3JkZXJzOmxlZnQiLG5hbWUoKXtsZXQgZT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYWVlKTtyZXR1cm4gSTUodGhpcyx0KSYmKGU9dUIoZSkpLGV9LGNh''@;'; put 'put ''bGxiYWNrKGUscil7Y29uc3QgaT1JNSh0aGlzLHQpO24ucHJlcGFyZUJvcmRlcihyLHQsaSl9fX1mdW5jdGlvbiBhNXQobil7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShvZWUpfSxjYWxsYmFjayh0LGUpe24u''@;'; put 'put ''cHJlcGFyZUJvcmRlcihlLCJub0JvcmRlcnMiKX0sZGlzYWJsZWQoKXtyZXR1cm4hSTUodGhpcyl9fX1mdW5jdGlvbiBYbmUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGRCPSJjdXN0b21Cb3JkZXJzIixjOWU9WyJkYXNoZWQiLCJkb3R0ZWQiLCJzb2xpZCJdO3ZhciBoQj1uZXcgV2Vha1NldDtjbGFzcyBoNXQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1''@;'; put 'put ''cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbzV0KG4sdCl7KGZ1bmN0aW9uIHM1dChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuYWRk''@;'; put 'put ''KG4pfSh0aGlzLGhCKSxmdW5jdGlvbiBsNXQobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIGM1dChuKXt2YXIgdD1mdW5jdGlvbiB1NXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIg''@;'; put 'put ''cj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4s''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1z''@;'; put 'put ''dGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZEJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RCXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsdD0+WG5lKGhCLHRoaXMscDV0KS5jYWxsKHRoaXMsdCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PlhuZShoQix0aGlzLGc1dCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGVC''@;'; put 'put ''b3JkZXJzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXNldEJvcmRlcnModCxlKXtsZXQgcj1bInRvcCIs''@;'; put 'put ''ImJvdHRvbSIsInN0YXJ0IiwiZW5kIl0saT1udWxsO2UmJih0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbZV0pLHI9T2JqZWN0LmtleXMoZSksaT0kbmUoZSkpO2NvbnN0IGM9U2soUkModCkse2NyZWF0ZUNlbGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlz''@;'; put 'put ''LmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KTtZbih0LG09PntjKG0pLmZvckFsbCgoQyxQKT0+e1luKHIsWT0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChDLFAsaSxmdW5jdGlvbiBlNXQobil7dmFyIHQ7''@;'; put 'put ''cmV0dXJuIG51bGwhPT0odD1RZ3QuZ2V0KG4pKSYmdm9pZCAwIT09dD90Om59KFkpKX0pfSl9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldEJvcmRlcnModCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2NvbnN0IHI9U2soUkModCkse2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KSxpPVtdO3JldHVybiBZbih0LGE9PntyKGEpLmZvckFsbCgoYyxtKT0+e1luKHRoaXMuc2F2ZWRC''@;'; put 'put ''b3JkZXJzLEM9PntDLnJvdz09PWMmJkMuY29sPT09bSYmaS5wdXNoKHNEKEMpKX0pfSl9KSxpfWNsZWFyQm9yZGVycyh0KXt0P3RoaXMuc2V0Qm9yZGVycyh0KTooWW4odGhpcy5zYXZlZEJvcmRlcnMsZT0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGUuaWQpLHRo''@;'; put 'put ''aXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoZS5yb3csZS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3ModCxlKXt0aGlzLmNoZWNrU2F2ZWRCb3JkZXJzKHQpfHx0aGlzLnNh''@;'; put 'put ''dmVkQm9yZGVycy5wdXNoKHQpO2NvbnN0IGk9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0LnJvdyx0LmNvbCkpO3RoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zKHQsaSxlKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5hZGRDdXN0''@;'; put 'put ''b21TZWxlY3Rpb24oe2JvcmRlcjp0LHZpc3VhbENlbGxSYW5nZTppfSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZCh0LGUscixpKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Um93cygpLGM9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYodD49YXx8ZT49YylyZXR1cm47bGV0IG09S25lKHQs''@;'; put 'put ''ZSk7ciYmKG09ZnVuY3Rpb24gWGd0KG4sdCl7cmV0dXJuICRjKHQsImJvcmRlciIpJiZ0LmJvcmRlciYmKG4uYm9yZGVyPXQuYm9yZGVyKSwkYyh0LCJ0b3AiKSYmd2EodC50b3ApJiYodC50b3A/KGhvKHQudG9wKXx8KHQudG9wPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLG4udG9wPXQudG9w''@;'; put 'put ''KToodC50b3A9e2hpZGU6ITB9LG4udG9wPXQudG9wKSksJGModCwiYm90dG9tIikmJndhKHQuYm90dG9tKSYmKHQuYm90dG9tPyhobyh0LmJvdHRvbSl8fCh0LmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxuLmJvdHRvbT10LmJvdHRvbSk6KHQuYm90dG9tPXtoaWRlOiEwfSxuLmJv''@;'; put 'put ''dHRvbT10LmJvdHRvbSkpLCRjKHQsInN0YXJ0IikmJndhKHQuc3RhcnQpJiYodC5zdGFydD8oaG8odC5zdGFydCl8fCh0LnN0YXJ0PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLG4uc3RhcnQ9dC5zdGFydCk6KHQuc3RhcnQ9e2hpZGU6ITB9LG4uc3RhcnQ9dC5zdGFydCkpLCRjKHQsImVuZCIp''@;'; put 'put ''JiZ3YSh0LmVuZCkmJih0LmVuZD8oaG8odC5lbmQpfHwodC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksbi5lbmQ9dC5lbmQpOih0LmVuZD17aGlkZTohMH0sbi5lbmQ9dC5lbmQpKSxufShtLHIpLFluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxD''@;'; put 'put ''PT57aWYobS5pZD09PUMuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24oQy5zZXR0aW5ncyxyKSxtLmlkPUMuc2V0dGluZ3MuaWQsbS50b3A9Qy5zZXR0aW5ncy50b3AsbS5ib3R0b209Qy5zZXR0aW5ncy5ib3R0b20sbS5zdGFydD1DLnNldHRpbmdzLnN0YXJ0LG0uZW5kPUMuc2V0''@;'; put 'put ''dGluZ3MuZW5kLCExfSkpLHRoaXMuaG90LnNldENlbGxNZXRhKHQsZSwiYm9yZGVycyIsc0QobSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKG0saSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKHQsZSl7Y29uc3Qgcj1NYXRoLm1pbih0LnRvLnJvdyx0aGlzLmhv''@;'; put 'put ''dC5jb3VudFJvd3MoKS0xKSxpPU1hdGgubWluKHQudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpO2VvKHQuZnJvbS5yb3cscixhPT57ZW8odC5mcm9tLmNvbCxpLGM9Pntjb25zdCBtPUtuZShhLGMpO2xldCBDPTA7YT09PXQuZnJvbS5yb3cmJiRjKGUsInRvcCIpJiYoQys9MSxtLnRv''@;'; put 'put ''cD1lLnRvcCksYT09PXQudG8ucm93JiYkYyhlLCJib3R0b20iKSYmKEMrPTEsbS5ib3R0b209ZS5ib3R0b20pLGM9PT10LmZyb20uY29sJiYkYyhlLCJzdGFydCIpJiYoQys9MSxtLnN0YXJ0PWUuc3RhcnQpLGM9PT10LnRvLmNvbCYmJGMoZSwiZW5kIikmJihDKz0xLG0uZW5kPWUuZW5kKSxD''@;'; put 'put ''PjAmJih0aGlzLmhvdC5zZXRDZWxsTWV0YShhLGMsImJvcmRlcnMiLHNEKG0pKSx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhtKSl9KX0pfXJlbW92ZUFsbEJvcmRlcnModCxlKXtjb25zdCByPWw5ZSh0LGUpO3RoaXMuc3BsaWNlQm9yZGVyKHIpLHRoaXMuY2xlYXJCb3JkZXJzRnJv''@;'; put 'put ''bVNlbGVjdGlvblNldHRpbmdzKHIpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEodCxlLCJib3JkZXJzIil9c2V0Qm9yZGVyKHQsZSxyLGkpe2xldCBhPXRoaXMuaG90LmdldENlbGxNZXRhKHQsZSkuYm9yZGVyczthPWEmJnZvaWQgMCE9PWEuYm9y''@;'; put 'put ''ZGVyPyRuZShhKTpLbmUodCxlKSxpPyhhW3JdPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoYSk/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKHQsZSk6KHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGEscixpKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGlu''@;'; put 'put ''Z3MoYSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEodCxlLCJib3JkZXJzIixzRChhKSkpKTooYVtyXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGEscixpKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoYSksdGhp''@;'; put 'put ''cy5ob3Quc2V0Q2VsbE1ldGEodCxlLCJib3JkZXJzIixzRChhKSkpfXByZXBhcmVCb3JkZXIodCxlLHIpe1luKHQsaT0+e2xldHtzdGFydDphLGVuZDpjfT1pO2lmKGEucm93PT09Yy5yb3cmJmEuY29sPT09Yy5jb2wpIm5vQm9yZGVycyI9PT1lP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhhLnJv''@;'; put 'put ''dyxhLmNvbCk6dGhpcy5zZXRCb3JkZXIoYS5yb3csYS5jb2wsZSxyKTtlbHNlIHN3aXRjaChlKXtjYXNlIm5vQm9yZGVycyI6ZW8oYS5jb2wsYy5jb2wsbT0+e2VvKGEucm93LGMucm93LEM9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMoQyxtKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOmVvKGEuY29s''@;'; put 'put ''LGMuY29sLG09Pnt0aGlzLnNldEJvcmRlcihhLnJvdyxtLGUscil9KTticmVhaztjYXNlImJvdHRvbSI6ZW8oYS5jb2wsYy5jb2wsbT0+e3RoaXMuc2V0Qm9yZGVyKGMucm93LG0sZSxyKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOmVvKGEucm93LGMucm93LG09Pnt0aGlzLnNldEJvcmRlcihtLGEu''@;'; put 'put ''Y29sLGUscil9KTticmVhaztjYXNlImVuZCI6ZW8oYS5yb3csYy5yb3csbT0+e3RoaXMuc2V0Qm9yZGVyKG0sYy5jb2wsZSxyKX0pfX0pfWNyZWF0ZUN1c3RvbUJvcmRlcnModCl7WW4odCxlPT57Y29uc3Qgcj0kbmUoZSk7ZS5yYW5nZT90aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRk''@;'; put 'put ''ZWRSYW5nZShlLnJhbmdlLHIpOnRoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChlLnJvdyxlLmNvbCxyKX0pfWNvdW50SGlkZSh0KXtjb25zdHt0b3A6ZSxib3R0b206cixzdGFydDppLGVuZDphfT10O3JldHVybiBkMChbZSxyLGksYV0sKG0sQyk9PntsZXQgUD1tO3JldHVybiBD''@;'; put 'put ''JiZDLmhpZGUmJihQKz0xKSxQfSwwKX1jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3ModCl7Y29uc3QgZT1Xcyh0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMscj0+ci5zZXR0aW5ncy5pZCkuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLmhvdC5zZWxl''@;'; put 'put ''Y3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbZV0uY2xlYXIoKX1jbGVhck51bGxDZWxsUmFuZ2UoKXtZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsKHQsZSk9PntpZihudWxsPT09dC5jZWxsUmFuZ2UpcmV0dXJuIHRoaXMuaG90LnNlbGVj''@;'; put 'put ''dGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1tlXS5kZXN0cm95KCksdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLnNwbGljZShlLDEpLCExfSl9aGlkZUJvcmRlcnMoKXtZbih0aGlzLnNhdmVkQm9yZGVycyx0PT57dGhpcy5jbGVhckJvcmRlcnNG''@;'; put 'put ''cm9tU2VsZWN0aW9uU2V0dGluZ3ModC5pZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKX0pfXNwbGljZUJvcmRlcih0KXtjb25zdCBlPVdzKHRoaXMuc2F2ZWRCb3JkZXJzLHI9PnIuaWQpLmluZGV4T2YodCk7ZT4tMSYmdGhpcy5zYXZlZEJvcmRlcnMuc3BsaWNlKGUsMSl9Y2hlY2tTYXZl''@;'; put 'put ''ZEJvcmRlcnModCl7bGV0IGU9ITE7cmV0dXJuIDQ9PT10aGlzLmNvdW50SGlkZSh0KT8odGhpcy5zcGxpY2VCb3JkZXIodC5pZCksZT0hMCk6WW4odGhpcy5zYXZlZEJvcmRlcnMsKGksYSk9PntpZih0LmlkPT09aS5pZClyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnNbYV09dCxlPSEwLCExfSks''@;'; put 'put ''ZX1jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUodCxlLHIpe2xldCBpPSExO3JldHVybiBZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsYT0+e2lmKHQuaWQ9PT1hLnNldHRpbmdzLmlkKXJldHVybiBZbih0aGlzLmhvdC52aWV3Ll93''@;'; put 'put ''dC5zZWxlY3Rpb25NYW5hZ2VyLmdldEJvcmRlckluc3RhbmNlcyhhKSxtPT57bS50b2dnbGVIaWRkZW5DbGFzcyhlLHIpfSksaT0hMCwhMX0pLGl9Y2hlY2tDdXN0b21TZWxlY3Rpb25zKHQsZSxyKXtjb25zdCBpPXRoaXMuY291bnRIaWRlKHQpO2xldCBhPSExO3JldHVybiA0PT09aT8odGhp''@;'; put 'put ''cy5yZW1vdmVBbGxCb3JkZXJzKHQucm93LHQuY29sKSxhPSEwKTpZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsYz0+e2lmKHQuaWQ9PT1jLnNldHRpbmdzLmlkKXJldHVybiBjLnZpc3VhbENlbGxSYW5nZT1lLGMuY29tbWl0KCksciYmWW4odGhpcy5o''@;'; put 'put ''b3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXMoYyksQz0+e0MuY2hhbmdlQm9yZGVyU3R5bGUocix0KX0pLGE9ITAsITF9KSxhfWNoYW5nZUJvcmRlclNldHRpbmdzKCl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RCXTtpZihBcnJheS5pc0Fy''@;'; put 'put ''cmF5KHQpKXtjb25zdCBlPXRkKHQpO3RoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKGUpLGUubGVuZ3RofHwodGhpcy5zYXZlZEJvcmRlcnM9ZSksdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKGUpfWVsc2Ugdm9pZCAwIT09dCYmdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKHRoaXMuc2F2ZWRC''@;'; put 'put ''b3JkZXJzKX1jaGVja1NldHRpbmdzQ29oZXNpb24odCl7Y29uc3QgZT1mdW5jdGlvbiBxZ3Qobil7cmV0dXJuIG4uc29tZSh0PT53YSh0LmxlZnQpfHx3YSh0LnJpZ2h0KSl9KHQpLHI9ZnVuY3Rpb24gSmd0KG4pe3JldHVybiBuLnNvbWUodD0+d2EodC5zdGFydCl8fHdhKHQuZW5kKSl9KHQp''@;'; put 'put ''O2lmKGUmJnIpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgYW5kICJzdGFydCIvImVuZCIgb3B0aW9ucyBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uICJzdGFydCIvImVuZCIuJyk7aWYodGhpcy5ob3QuaXNSdGwoKSYm''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBwcm9wZXJ0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBsZWFzZSB1c2Ugb3B0aW9uICJzdGFydCIvImVuZCIuJyk7WG5lKGhCLHRoaXMsZjV0KS5jYWxsKHRoaXMsdCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3ko''@;'; put 'put ''KX19ZnVuY3Rpb24gZjV0KG4pe24uZm9yRWFjaCh0PT57T2JqZWN0LmtleXModCkuZm9yRWFjaChlPT57Y29uc3Qgcj10W2VdLnN0eWxlO3dhKHIpJiYhYzllLmluY2x1ZGVzKHIpPyhvcyhgVGhlICIke3J9IiBib3JkZXIgc3R5bGUgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBvbmUg''@;'; put 'put ''b2YgdGhlIGZvbGxvd2luZyBzdHlsZXM6ICR7YzllLmpvaW4oIiwgIil9LlxuVGhlIGJvcmRlciBzdHlsZSB3aWxsIGJlIGlnbm9yZWQuYCksZGVsZXRlIHRbZV0uc3R5bGUpOndhKHIpJiYic29saWQiPT09ciYmZGVsZXRlIHRbZV0uc3R5bGV9KX0pfWZ1bmN0aW9uIHA1dChuKXt0aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpW2RCXSYmbi5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7a2V5OiJib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh0ZWUpfSxkaXNhYmxlZCgpe2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0''@;'; put 'put ''dXJuISh0JiYhdC5pc1NpbmdsZUhlYWRlcigpKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOlt0NXQodGhpcyksbjV0KHRoaXMpLHI1dCh0aGlzKSxpNXQodGhpcyksYTV0KHRoaXMpXX19KX1mdW5jdGlvbiBnNXQoKXt0aGlzLmNoYW5nZUJv''@;'; put 'put ''cmRlclNldHRpbmdzKCl9ZnVuY3Rpb24gcW5lKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiB5NXQobil7dmFyIHQ9ZnVuY3Rpb24gXzV0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFy''@;'; put 'put ''IHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShu''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiB1OWUobix0LGUpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGQ5ZT0iZHJhZ1RvU2Nyb2xsIjt2YXIgSm5l''@;'; put 'put ''PW5ldyBXZWFrU2V0O2NsYXNzIHc1dCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBtNXQobix0KXsoZnVuY3Rpb24gdjV0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUg''@;'; put 'put ''cHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5hZGQobil9KHRoaXMsSm5lKSxxbmUodGhpcywiYm91bmRhcmllcyIsbnVsbCkscW5lKHRoaXMsImNhbGxiYWNrIixudWxsKSxxbmUodGhpcywibGlzdGVuaW5nIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZ''@;'; put 'put ''KCl7cmV0dXJuIGQ5ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2Q5ZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93''@;'; put 'put ''biIsdD0+dTllKEpuZSx0aGlzLGg5ZSkuY2FsbCh0aGlzLHQpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIix0PT51OWUoSm5lLHRoaXMsaDllKS5jYWxsKHRoaXMsdCkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRl''@;'; put 'put ''UGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNldEJvdW5kYXJpZXMoKXt0aGlzLmJvdW5kYXJpZXM9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntsZWZ0OjAscmlnaHQ6dGhpcy5ob3Qucm9vdFdpbmRvdy5pbm5lcldpZHRoLHRvcDowLGJvdHRvbTp0aGlzLmhvdC5yb290V2luZG93LmlubmVySGVpZ2h0fX1zZXRDYWxsYmFjayh0KXt0aGlz''@;'; put 'put ''LmNhbGxiYWNrPXR9Y2hlY2sodCxlKXtsZXQgcj0wLGk9MDtlPHRoaXMuYm91bmRhcmllcy50b3A/aT1lLXRoaXMuYm91bmRhcmllcy50b3A6ZT50aGlzLmJvdW5kYXJpZXMuYm90dG9tJiYoaT1lLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLHQ8dGhpcy5ib3VuZGFyaWVzLmxlZnQ/cj10LXRo''@;'; put 'put ''aXMuYm91bmRhcmllcy5sZWZ0OnQ+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYocj10LXRoaXMuYm91bmRhcmllcy5yaWdodCksdGhpcy5jYWxsYmFjayhyLGkpfWxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITF9aXNMaXN0ZW5pbmcoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93OnR9PXRoaXMuaG90O2xldCBlPXQ7Zm9yKDtlOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUuZG9jdW1lbnQsImNvbnRleHRtZW51IiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZS5kb2N1bWVudCwibW91c2Vtb3ZlIixyPT50aGlzLm9uTW91c2VNb3ZlKHIpKSxlPWc1KGUpfXVu''@;'; put 'put ''cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfW9uTW91c2VNb3ZlKHQpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5jaGVjayh0LmNsaWVudFgsdC5jbGllbnRZKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBoOWUobil7aWYobjgobikpcmV0''@;'; put 'put ''dXJuO2NvbnN0IHQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O3RoaXMuc2V0Qm91bmRhcmllcyh0IT09dGhpcy5ob3Qucm9vdFdpbmRvdz90LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnZvaWQgMCksdGhpcy5zZXRD''@;'; put 'put ''YWxsYmFjaygoZSxyKT0+e3ZhciBpLGE7Y29uc3QgYz1udWxsIT09KGk9dC5zY3JvbGxMZWZ0KSYmdm9pZCAwIT09aT9pOnQuc2Nyb2xsWCxtPW51bGwhPT0oYT10LnNjcm9sbFRvcCkmJnZvaWQgMCE9PWE/YTp0LnNjcm9sbFk7dC5zY3JvbGwoYys1MCpNYXRoLnNpZ24oZSksbSsyMCpNYXRo''@;'; put 'put ''LnNpZ24ocikpfSksdGhpcy5saXN0ZW4oKX1mdW5jdGlvbiBmOWUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFFuZShuLHQsZSl7cmV0''@;'; put 'put ''dXJuKHQ9ZnVuY3Rpb24gTTV0KG4pe3ZhciB0PWZ1bmN0aW9uIHg1dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6''@;'; put 'put ''dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gcDllKG4sdCxlKXtyZXR1cm4gbi5zZXQodDMobix0KSxlKSxlfWZ1bmN0aW9uIHQzKG4sdCxl''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5nZXRTaW5nbGV0b24oKS5yZWdpc3Rl''@;'; put 'put ''cigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51U2hvdyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lz''@;'; put 'put ''dGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgZkI9ImRyb3Bkb3duTWVudSIsbEQ9ImNoYW5nZVR5cGUiLGVyZT1mQjt2YXIgcEI9bmV3IFdlYWtNYXAseXA9bmV3IFdlYWtTZXQ7''@;'; put 'put ''Y2xhc3MgZ0IgZXh0ZW5kcyBNc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZkJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVG''@;'; put 'put ''QVVMVF9JVEVNUygpe3JldHVyblskayxLayx5cyxxayx5cyxLVix5cyxYayx5cyxlM119Y29uc3RydWN0b3IodCl7c3VwZXIodCksZnVuY3Rpb24gQzV0KG4sdCl7ZjllKG4sdCksdC5hZGQobil9KHRoaXMseXApLFFuZSh0aGlzLCJjb21tYW5kRXhlY3V0b3IiLG5ldyBCN2UodGhpcy5ob3Qp''@;'; put 'put ''KSxRbmUodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxRbmUodGhpcywibWVudSIsbnVsbCksZnVuY3Rpb24gUzV0KG4sdCxlKXtmOWUobix0KSx0LnNldChuLGUpfSh0aGlzLHBCLCExKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGUscik9PnQzKHlwLHRoaXMsazV0''@;'; put 'put ''KS5jYWxsKHRoaXMsZSxyKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbZkJdfWVuYWJsZVBsdWdpbigpe3ZhciB0PXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgVzdlKHRoaXMuaG90LGdCLkRFRkFVTFRfSVRFTVMp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiB0Myh5cCx0LFA1dCkuY2FsbCh0LC4uLmEpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdDMoeXAsdCxPNXQpLmNhbGwodCwuLi5hKX0pLHRoaXMuYWRk''@;'; put 'put ''SG9vaygiYmVmb3JlRGlhbG9nU2hvdyIsKCk9PnRoaXMuY2xvc2UoKSk7Y29uc3QgZT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2ZCXSxyPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhlKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmNhbGxi''@;'; put 'put ''YWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhlLmNhbGxiYWNrKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy5jYWxsT25QbHVnaW5zUmVhZHkoKCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1l''@;'; put 'put ''bnVEZWZhdWx0T3B0aW9ucyIsciksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKHIuaXRlbXMpO2NvbnN0IGk9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoZSk7dGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1uZXcgc1ModGhpcy5ob3Qse2Ns''@;'; put 'put ''YXNzTmFtZToiaHREcm9wZG93bk1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjplLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudH0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsaSksdGhpcy5tZW51LnNldE1lbnVJ''@;'; put 'put ''dGVtcyhpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+dDMoeXAsdGhpcyxENXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnQzKHlwLHRoaXMsSTV0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJhZnRlclN1Ym1lbnVPcGVuIixhPT50Myh5cCx0aGlzLFI1dCkuY2FsbCh0aGlzLGEpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dDMoeXAsdGhpcyxMNXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KGEpLG09MDttPGE7bSsrKWNbbV09YXJndW1lbnRzW21dO3JldHVybiB0LmV4ZWN1dGVDb21tYW5kLmNhbGwodCwuLi5jKX0pLFluKGksYT0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGEu''@;'; put 'put ''a2V5LGEpKX0pfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksdGhpcy51bnJlZ2lzdGVyU2hv''@;'; put 'put ''cnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgZT0oKT0+e2NvbnN0e2hpZ2hsaWdodDpyfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoKHIuaXNIZWFkZXIoKSYmLTE9PT1yLnJvd3x8ci5pc0NlbGwoKSkmJnIuY29s''@;'; put 'put ''Pj0wKXt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKHIuY29sLHIuY29sLC0xKTtjb25zdHtmcm9tOml9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxhPXpWKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSxjPXRoaXMuaG90LmdldENlbGwoLTEsaS5j''@;'; put 'put ''b2wsITApLnF1ZXJ5U2VsZWN0b3IoYC4ke2xEfWApLG09Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6bS5sZWZ0K2EubGVmdCx0b3A6bS50b3ArYy5vZmZzZXRIZWlnaHQrYS50b3B9LHtsZWZ0Om0ud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KSx0aGlz''@;'; put 'put ''Lm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19O3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl0sWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxs''@;'; put 'put ''YmFjazplLHJ1bk9ubHlJZjooKT0+e3ZhciByO2NvbnN0IGk9bnVsbD09PShyPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaGlnaGxpZ2h0O3JldHVybiBpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShpKSYmaS5pc0hl''@;'; put 'put ''YWRlcigpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGNhcHR1cmVDdHJsOiEwLGdyb3VwOmVyZX0se2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6ZSxydW5Pbmx5SWY6KCk9Pnt2YXIgcjtjb25zdCBpPW51bGw9PT0ocj10aGlzLmhvdC5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmhpZ2hsaWdodDtyZXR1cm4gaSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaSkmJmkuaXNDZWxsKCkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6ZXJlfV0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlz''@;'; put 'put ''LmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChlcmUpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVudCwiY2xpY2siLHQ9PnQzKHlwLHRo''@;'; put 'put ''aXMsQTV0KS5jYWxsKHRoaXMsdCkpfW9wZW4odCl7dmFyIGU7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9O251bGwhPT0oZT10aGlzLm1lbnUpJiZ2b2lkIDAhPT1lJiZl''@;'; put 'put ''LmlzT3BlbmVkKCl8fCh0aGlzLm1lbnUub3BlbigpLGFzKHIsKGksYSk9Pnt0aGlzLm1lbnUuc2V0T2Zmc2V0KGEsaSl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24odCkpfWNsb3NlKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMubWVudSl8fHZvaWQgMD09PXR8fHQuY2xvc2UoKX1leGVjdXRlQ29t''@;'; put 'put ''bWFuZCh0KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlPjE/ZS0xOjApLGk9MTtpPGU7aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZSh0LC4uLnIpfXNldExpc3RlbmluZygpe2xldCB0PSEoYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5tZW51LmlzT3BlbmVkKCkmJih0P3RoaXMubWVudS5ob3RNZW51Lmxpc3RlbigpOnRoaXMubWVudS5ob3RNZW51LnVubGlzdGVuKCkpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1l''@;'; put 'put ''bnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZzllKG4pe24uZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT4hMX1dKX1mdW5jdGlvbiBBNXQobil7aWYodm8o''@;'; put 'put ''bi50YXJnZXQsbEQpKXtjb25zdCB0PXpWKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSxlPW4udGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO24uc3RvcFByb3BhZ2F0aW9uKCkscDllKHBCLHRoaXMsITEpLHRoaXMub3Blbih7bGVmdDplLmxlZnQrdC5s''@;'; put 'put ''ZWZ0LHRvcDplLnRvcCtuLnRhcmdldC5vZmZzZXRIZWlnaHQrdC50b3B9LHtsZWZ0OmUud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KX19ZnVuY3Rpb24gazV0KG4sdCl7Y29uc3QgZT10LnBhcmVudE5vZGU7aWYoIWUpcmV0dXJuO2NvbnN0IHI9ZS5wYXJlbnROb2RlLmNoaWxkTm9k''@;'; put 'put ''ZXMsaT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHIsZSk7aWYobjwwfHxpIT09ci5sZW5ndGgtMSlyZXR1cm47Y29uc3QgYT10LnF1ZXJ5U2VsZWN0b3IoYC4ke2xEfWApO2lmKHRoaXMuZW5hYmxlZCYmYSlyZXR1cm47aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZChhJiZhLnBh''@;'; put 'put ''cmVudE5vZGUucmVtb3ZlQ2hpbGQoYSkpO2NvbnN0IGM9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO2MuY2xhc3NOYW1lPWxELGMudHlwZT0iYnV0dG9uIixjLnRhYkluZGV4PS0xLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJihaYShjLFtb''@;'; put 'put ''ImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFQyKCIgIildKSxaYSh0LFtCZ2UoIm1lbnUiKV0pKSxjLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdC5maXJzdENoaWxkLmluc2VydEJlZm9yZShjLHQuZmlyc3RDaGlsZC5maXJzdENoaWxkKX1mdW5jdGlvbiBENXQoKXt0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gSTV0KCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51U2hvdyIsdGhpcyksdDMoeXAsdGhpcyxnOWUpLmNhbGwodGhpcyx0aGlzLm1lbnUpfWZ1bmN0aW9uIFI1dChuKXt0Myh5cCx0aGlzLGc5''@;'; put 'put ''ZSkuY2FsbCh0aGlzLG4pfWZ1bmN0aW9uIEw1dCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLHRoaXMpfWZ1bmN0aW9uIE81dChuKXtyZXR1cm4gZnVuY3Rpb24gRTV0KG4sdCl7cmV0dXJuIG4uZ2V0KHQzKG4sdCkpfShwQix0''@;'; put 'put ''aGlzKT9udWxsOm59ZnVuY3Rpb24gUDV0KG4pe3ZvKG4udGFyZ2V0LGxEKSYmcDllKHBCLHRoaXMsITApfWZ1bmN0aW9uIG05ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRjV0KG4pe3ZhciB0PWZ1bmN0aW9uIEg1dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47''@;'; put 'put ''dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs''@;'; put 'put ''dWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdy''@;'; put 'put ''aXRhYmxlOiEwfSk6blt0XT1lLG59Z0IuU0VQQVJBVE9SPXtuYW1lOnlzfTtjb25zdCBWNXQ9Y2xhc3MgTjV0e2NvbnN0cnVjdG9yKHQpe205ZSh0aGlzLCJob3QiLHZvaWQgMCksbTllKHRoaXMsIm9wdGlvbnMiLHt9KSx0aGlzLmhvdD10fXNldE9wdGlvbnModCl7dGhpcy5vcHRpb25zPXR9''@;'; put 'put ''Z2V0RGF0YSgpe2NvbnN0e3N0YXJ0Um93OnQsc3RhcnRDb2w6ZSxlbmRSb3c6cixlbmRDb2w6aX09dGhpcy5fZ2V0RGF0YVJhbmdlKCksYT10aGlzLm9wdGlvbnMsYz1bXTtyZXR1cm4gZW8odCxyLG09Pntjb25zdCBDPVtdOyFhLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93''@;'; put 'put ''KG0pfHwoZW8oZSxpLFA9PnshYS5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihQKXx8Qy5wdXNoKHRoaXMuaG90LmdldERhdGFBdENlbGwobSxQKSl9KSxjLnB1c2goQykpfSksY31nZXRSb3dIZWFkZXJzKCl7Y29uc3QgdD1bXTtpZih0aGlzLm9wdGlvbnMucm93''@;'; put 'put ''SGVhZGVycyl7Y29uc3R7c3RhcnRSb3c6ZSxlbmRSb3c6cn09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaT10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTtlbyhlLHIsYT0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coYSl8fHQucHVzaChpW2FdKX0pfXJl''@;'; put 'put ''dHVybiB0fWdldENvbHVtbkhlYWRlcnMoKXtjb25zdCB0PVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDplLGVuZENvbDpyfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxpPXRoaXMuaG90LmdldENvbEhlYWRlcigpO2VvKGUscixhPT57IXRoaXMub3B0aW9u''@;'; put 'put ''cy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihhKXx8dC5wdXNoKGlbYV0pfSl9cmV0dXJuIHR9X2dldERhdGFSYW5nZSgpe2NvbnN0IHQ9dGhpcy5ob3QuY291bnRDb2xzKCktMSxlPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W3I9MCxpPTAsYT1lLGM9dF09''@;'; put 'put ''dGhpcy5vcHRpb25zLnJhbmdlO3JldHVybiByPU1hdGgubWF4KHIsMCksaT1NYXRoLm1heChpLDApLGE9TWF0aC5taW4oYSxlKSxjPU1hdGgubWluKGMsdCkse3N0YXJ0Um93OnIsc3RhcnRDb2w6aSxlbmRSb3c6YSxlbmRDb2w6Y319X2lzSGlkZGVuUm93KHQpe3JldHVybiB0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KHQpKX1faXNIaWRkZW5Db2x1bW4odCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCkpfX07ZnVuY3Rpb24gdjllKG4sdCxlKXty''@;'; put 'put ''ZXR1cm4odD1mdW5jdGlvbiBCNXQobil7dmFyIHQ9ZnVuY3Rpb24gajV0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/''@;'; put 'put ''dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyB0cmV7c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQv''@;'; put 'put ''cGxhaW4iLGZpbGVFeHRlbnNpb246InR4dCIsZmlsZW5hbWU6IkhhbmRzb250YWJsZSBbWVlZWV0tW01NXS1bRERdIixlbmNvZGluZzoidXRmLTgiLGJvbTohMSxjb2x1bW5IZWFkZXJzOiExLHJvd0hlYWRlcnM6ITEsZXhwb3J0SGlkZGVuQ29sdW1uczohMSxleHBvcnRIaWRkZW5Sb3dzOiEx''@;'; put 'put ''LHJhbmdlOltdfX1jb25zdHJ1Y3Rvcih0LGUpe3Y5ZSh0aGlzLCJkYXRhUHJvdmlkZXIiLHZvaWQgMCksdjllKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksdGhpcy5kYXRhUHJvdmlkZXI9dCx0aGlzLm9wdGlvbnM9dGhpcy5fbWVyZ2VPcHRpb25zKGUpLHRoaXMuZGF0YVByb3ZpZGVyLnNldE9w''@;'; put 'put ''dGlvbnModGhpcy5vcHRpb25zKX1fbWVyZ2VPcHRpb25zKHQpe2xldCBlPW9wKHRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtjb25zdCByPW5ldyBEYXRlO3JldHVybiBlPUZ1KG9wKHRyZS5ERUZBVUxUX09QVElPTlMpLGUpLGU9RnUoZSx0KSxlLmZpbGVuYW1lPXFIKGUuZmls''@;'; put 'put ''ZW5hbWUse1lZWVk6ci5nZXRGdWxsWWVhcigpLE1NOmAke3IuZ2V0TW9udGgoKSsxfWAucGFkU3RhcnQoMiwiMCIpLEREOmAke3IuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwiMCIpfSksZX19Y29uc3QgejV0PXRyZTtmdW5jdGlvbiB5OWUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBu''@;'; put 'put ''P249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBucmU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gUTV0KG4pe3JldHVybiBuLnN0YXJ0''@;'; put 'put ''c1dpdGgoIj0iKXx8bi5zdGFydHNXaXRoKCIrIil8fG4uc3RhcnRzV2l0aCgiLSIpfHxuLnN0YXJ0c1dpdGgoIkAiKXx8bi5zdGFydHNXaXRoKCJcdCIpfHxuLnN0YXJ0c1dpdGgoIlxyIik/YCcke259YDpufWZ1bmN0aW9uIGVtdChuLHQpe3JldHVybiB0LnRlc3Qobik/YCcke259YDpufWNv''@;'; put 'put ''bnN0IG5tdD0iY3N2IixycmU9e1tubXRdOmNsYXNzIEo1dCBleHRlbmRzIHo1dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gVTV0KG4sdCl7KGZ1bmN0aW9uIFc1dChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSh0aGlzLG5yZSl9c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvY3N2IixmaWxlRXh0ZW5zaW9uOiJjc3YiLGJvbTohMCxjb2x1''@;'; put 'put ''bW5EZWxpbWl0ZXI6IiwiLHJvd0RlbGltaXRlcjoiXHJcbiIsc2FuaXRpemVWYWx1ZXM6ITF9fWV4cG9ydCgpe2NvbnN0IHQ9dGhpcy5vcHRpb25zLGU9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0RGF0YSgpO2xldCByPXRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKTtjb25zdCBp''@;'; put 'put ''PXIubGVuZ3RoPjAsYT10aGlzLmRhdGFQcm92aWRlci5nZXRSb3dIZWFkZXJzKCksYz1hLmxlbmd0aD4wO2xldCBtPXQuYm9tPyJcdWZlZmYiOiIiO3JldHVybiBpJiYocj1XcyhyLEM9PnRoaXMuX2VzY2FwZUNlbGwoQyx7Zm9yY2U6ITAsc2FuaXRpemVWYWx1ZTp0LnNhbml0aXplVmFsdWVz''@;'; put 'put ''fSkpLGMmJihtKz10LmNvbHVtbkRlbGltaXRlciksbSs9ci5qb2luKHQuY29sdW1uRGVsaW1pdGVyKSxtKz10LnJvd0RlbGltaXRlciksWW4oZSwoQyxQKT0+e1A+MCYmKG0rPXQucm93RGVsaW1pdGVyKSxjJiYobSs9dGhpcy5fZXNjYXBlQ2VsbChhW1BdLHtzYW5pdGl6ZVZhbHVlOnQuc2Fu''@;'; put 'put ''aXRpemVWYWx1ZXN9KSxtKz10LmNvbHVtbkRlbGltaXRlcik7Y29uc3QgWT1DLm1hcChKPT50aGlzLl9lc2NhcGVDZWxsKEose3Nhbml0aXplVmFsdWU6dC5zYW5pdGl6ZVZhbHVlc30pKS5qb2luKHQuY29sdW1uRGVsaW1pdGVyKTttKz1ZfSksbX1fZXNjYXBlQ2VsbCh0KXtsZXR7Zm9yY2U6''@;'; put 'put ''ZT0hMSxzYW5pdGl6ZVZhbHVlOnI9ITF9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxpPXFsKHQpO3JldHVybiIiPT09aXx8KHImJihlPSEwKSxyIGluc3RhbmNlb2YgUmVnRXhwP2k9eTllKG5yZSx0aGlzLGVtdCkuY2FsbCh0aGlz''@;'; put 'put ''LGkscik6ImZ1bmN0aW9uIj09dHlwZW9mIHI/aT1yKGkpOnImJihpPXk5ZShucmUsdGhpcyxRNXQpLmNhbGwodGhpcyxpKSksKGV8fGkuaW5kZXhPZigiXHIiKT49MHx8aS5pbmRleE9mKCciJyk+PTB8fGkuaW5kZXhPZigiXG4iKT49MHx8aS5pbmRleE9mKHRoaXMub3B0aW9ucy5jb2x1bW5E''@;'; put 'put ''ZWxpbWl0ZXIpPj0wKSYmKGk9aS5yZXBsYWNlKG5ldyBSZWdFeHAoJyInLCJnIiksJyIiJyksaT1gIiR7aX0iYCkpLGl9fX07Y2xhc3Mgb210IGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImV4cG9ydEZpbGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7''@;'; put 'put ''cmV0dXJuIDI0MH1pc0VuYWJsZWQoKXtyZXR1cm4hMH1leHBvcnRBc1N0cmluZyh0KXtyZXR1cm4gdGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcih0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9i''@;'; put 'put ''KHQpe3JldHVybiB0aGlzLl9jcmVhdGVCbG9iKHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIodCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pKX1kb3dubG9hZEZpbGUodCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0e3Jvb3REb2N1bWVudDpyLHJvb3RXaW5kb3c6aX09dGhpcy5ob3QsYT10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKHQsZSksYz10aGlzLl9jcmVhdGVCbG9iKGEpLG09aS5VUkx8fGkud2Via2l0VVJMLEM9ci5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KCJhIiksUD1gJHthLm9wdGlvbnMuZmlsZW5hbWV9LiR7YS5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lkIDAhPT1DLmRvd25sb2FkKXtjb25zdCBZPW0uY3JlYXRlT2JqZWN0VVJMKGMpO0Muc3R5bGUuZGlzcGxheT0ibm9uZSIsQy5zZXRBdHRyaWJ1dGUoImhyZWYiLFkpLEMu''@;'; put 'put ''c2V0QXR0cmlidXRlKCJkb3dubG9hZCIsUCksci5ib2R5LmFwcGVuZENoaWxkKEMpLEMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksci5ib2R5LnJlbW92ZUNoaWxkKEMpLHNldFRpbWVvdXQoKCk9PnttLnJldm9rZU9iamVjdFVSTChZKX0sMTAwKX1lbHNlIG5hdmln''@;'; put 'put ''YXRvci5tc1NhdmVPck9wZW5CbG9iJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihjLFApfV9jcmVhdGVUeXBlRm9ybWF0dGVyKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighcnJlW3RdKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihgRXhwb3J0IGZvcm1hdCB0eXBlICIke3R9IiBpcyBub3Qgc3VwcG9ydGVkLmApO3JldHVybiBmdW5jdGlvbiBybXQobix0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBycmVbbl0/bmV3IHJyZVtuXSh0LGUpOm51bGx9KHQsbmV3IFY1dCh0aGlzLmhvdCksZSl9X2NyZWF0ZUJs''@;'; put 'put ''b2IodCl7bGV0IGU9bnVsbDtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiYoZT1uZXcgQmxvYihbdC5leHBvcnQoKV0se3R5cGU6YCR7dC5vcHRpb25zLm1pbWVUeXBlfTtjaGFyc2V0PSR7dC5vcHRpb25zLmVuY29kaW5nfWB9KSksZX19ZnVuY3Rpb24gZlMobix0LGUpe3JldHVybih0PWZ1bmN0''@;'; put 'put ''aW9uIHNtdChuKXt2YXIgdD1mdW5jdGlvbiBsbXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Ygcily''@;'; put 'put ''ZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWlu''@;'; put 'put ''IG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIGNEe2NvbnN0cnVjdG9yKHQsZSl7bGV0e2lkOnIsc3RhdGVsZXNzOmk9ITB9PWU7ZlModGhpcywiaG90Iix2b2lkIDAp''@;'; put 'put ''LGZTKHRoaXMsImlkIix2b2lkIDApLGZTKHRoaXMsImVsZW1lbnRzIixbXSksZlModGhpcywiaGlkZGVuIiwhMSksZlModGhpcywic3RhdGVJZCIsIiIpLGZTKHRoaXMsInN0YXRlIix2b2lkIDApLHRoaXMuaG90PXQsdGhpcy5pZD1yLHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQu''@;'; put 'put ''JHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1pP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkLG5ldyBSTil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50c31yZXNldCgpe1luKHRoaXMuZWxlbWVudHMsdD0+dC5yZXNldCgpKX1o''@;'; put 'put ''aWRlKCl7dGhpcy5oaWRkZW49ITB9c2hvdygpe3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9yZVN0YXRlKHQpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgodCkpfXNl''@;'; put 'put ''dFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1zYXZlU3RhdGUodCl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgodCx0aGlzLmdldFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJUaGUgc3RhdGUgZ2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxZbih0aGlzLmVsZW1lbnRzLHQ9PnQuZGVz''@;'; put 'put ''dHJveSgpKSx0aGlzLnN0YXRlPW51bGwsdGhpcy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fXBsKGNELCQwKTtjb25zdCB1RD17fTtmdW5jdGlvbiBNOChuLHQpe2lmKCF1RFtuXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtufSIgZG9lcyBub3QgZXhpc3QuYCk7Y29u''@;'; put 'put ''c3R7Y29uZGl0aW9uOmUsZGVzY3JpcHRvcjpyfT11RFtuXTtsZXQgaT10O3JldHVybiByLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaT1yLmlucHV0VmFsdWVzRGVjb3JhdG9yKGkpKSxmdW5jdGlvbihhKXtyZXR1cm4gZS5hcHBseShhLm1ldGEuaW5zdGFuY2UsW10uY29uY2F0KFthXSxbaV0p''@;'; put 'put ''KX19ZnVuY3Rpb24gdXkobil7aWYoIXVEW25dKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke259IiBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gdURbbl0uZGVzY3JpcHRvcn1mdW5jdGlvbiBCdShuLHQsZSl7ZS5rZXk9bix1RFtuXT17Y29uZGl0aW9uOnQsZGVzY3JpcHRvcjpl''@;'; put 'put ''fX1jb25zdCBYMD0ibm9uZSI7QnUoWDAsZnVuY3Rpb24gY210KCl7cmV0dXJuITB9LHtuYW1lOkJOLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IGREPSJlbXB0eSI7QnUoZEQsZnVuY3Rpb24gdW10KG4pe3JldHVybiBHYyhuLnZhbHVlKX0se25hbWU6ZmVlLGlucHV0''@;'; put 'put ''c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IG1CPSJub3RfZW1wdHkiO0J1KG1CLGZ1bmN0aW9uIGRtdChuLHQpe3JldHVybiFNOChkRCx0KShuKX0se25hbWU6cGVlLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGhEPSJlcSI7QnUoaEQsZnVuY3Rpb24g''@;'; put 'put ''aG10KG4sdCl7bGV0W2VdPXQ7cmV0dXJuIHFsKG4udmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKG4ubWV0YS5sb2NhbGUpPT09cWwoZSl9LHtuYW1lOmdlZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB2Qj0ibmVxIjtCdSh2QixmdW5jdGlvbiBmbXQobix0KXtyZXR1''@;'; put 'put ''cm4hTTgoaEQsdCkobil9LHtuYW1lOm1lZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxCdSgiZ3QiLGZ1bmN0aW9uIHBtdChuLHQpe2xldFtlXT10LHI9ZTtyZXR1cm4ibnVtZXJpYyI9PT1uLm1ldGEudHlwZSYmKHI9cGFyc2VGbG9hdChyLDEwKSksbi52YWx1ZT5yfSx7bmFt''@;'; put 'put ''ZTp3ZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksQnUoImd0ZSIsZnVuY3Rpb24gZ210KG4sdCl7bGV0W2VdPXQscj1lO3JldHVybiJudW1lcmljIj09PW4ubWV0YS50eXBlJiYocj1wYXJzZUZsb2F0KHIsMTApKSxuLnZhbHVlPj1yfSx7bmFtZTpDZWUsaW5wdXRzQ291bnQ6''@;'; put 'put ''MSxzaG93T3BlcmF0b3JzOiEwfSksQnUoImx0IixmdW5jdGlvbiBtbXQobix0KXtsZXRbZV09dCxyPWU7cmV0dXJuIm51bWVyaWMiPT09bi5tZXRhLnR5cGUmJihyPXBhcnNlRmxvYXQociwxMCkpLG4udmFsdWU8cn0se25hbWU6U2VlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0p''@;'; put 'put ''LEJ1KCJsdGUiLGZ1bmN0aW9uIHZtdChuLHQpe2xldFtlXT10LHI9ZTtyZXR1cm4ibnVtZXJpYyI9PT1uLm1ldGEudHlwZSYmKHI9cGFyc2VGbG9hdChyLDEwKSksbi52YWx1ZTw9cn0se25hbWU6TWVlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGlyZT0iZGF0ZV9h''@;'; put 'put ''ZnRlciI7QnUoaXJlLGZ1bmN0aW9uIHltdChuLHQpe2xldFtlXT10O2NvbnN0IHI9cXMobi52YWx1ZSxuLm1ldGEuZGF0ZUZvcm1hdCksaT1xcyhlLG4ubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFyLmlzVmFsaWQoKXx8IWkuaXNWYWxpZCgpKSYmci5kaWZmKGkpPj0wfSx7bmFtZTpUZWUs''@;'; put 'put ''aW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgYXJlPSJkYXRlX2JlZm9yZSI7QnUoYXJlLGZ1bmN0aW9uIF9tdChuLHQpe2xldFtlXT10O2NvbnN0IHI9cXMobi52YWx1ZSxuLm1ldGEuZGF0ZUZvcm1hdCksaT1xcyhlLG4ubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFy''@;'; put 'put ''LmlzVmFsaWQoKXx8IWkuaXNWYWxpZCgpKSYmci5kaWZmKGkpPD0wfSx7bmFtZTpBZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgeUI9ImJldHdlZW4iO0J1KHlCLGZ1bmN0aW9uIGJtdChuLHQpe2xldFtlLHJdPXQsaT1lLGE9cjtpZigibnVtZXJpYyI9PT1uLm1l''@;'; put 'put ''dGEudHlwZSl7Y29uc3QgYz1wYXJzZUZsb2F0KGksMTApLG09cGFyc2VGbG9hdChhLDEwKTtpPU1hdGgubWluKGMsbSksYT1NYXRoLm1heChjLG0pfWVsc2UgaWYoImRhdGUiPT09bi5tZXRhLnR5cGUpe2NvbnN0IGM9TTgoYXJlLFthXSksbT1NOChpcmUsW2ldKTtyZXR1cm4gYyhuKSYmbShu''@;'; put 'put ''KX1yZXR1cm4gbi52YWx1ZT49aSYmbi52YWx1ZTw9YX0se25hbWU6eGVlLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IE05ZT0ibm90X2JldHdlZW4iO0J1KE05ZSxmdW5jdGlvbiB3bXQobix0KXtyZXR1cm4hTTgoeUIsdCkobil9LHtuYW1lOkVlZSxpbnB1dHNDb3Vu''@;'; put 'put ''dDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB4OWU9ImJlZ2luc193aXRoIjtCdSh4OWUsZnVuY3Rpb24gQ210KG4sdCl7bGV0W2VdPXQ7cmV0dXJuIHFsKG4udmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKG4ubWV0YS5sb2NhbGUpLnN0YXJ0c1dpdGgocWwoZSkpfSx7bmFtZTp2ZWUsaW5w''@;'; put 'put ''dXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksQnUoImVuZHNfd2l0aCIsZnVuY3Rpb24gU210KG4sdCl7bGV0W2VdPXQ7cmV0dXJuIHFsKG4udmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKG4ubWV0YS5sb2NhbGUpLmVuZHNXaXRoKHFsKGUpKX0se25hbWU6eWVlLGlucHV0c0NvdW50OjEs''@;'; put 'put ''c2hvd09wZXJhdG9yczohMH0pO2NvbnN0IG9yZT0iY29udGFpbnMiO0J1KG9yZSxmdW5jdGlvbiBNbXQobix0KXtsZXRbZV09dDtyZXR1cm4gcWwobi52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2Uobi5tZXRhLmxvY2FsZSkuaW5kZXhPZihxbChlKSk+PTB9LHtuYW1lOl9lZSxpbnB1dHNDb3Vu''@;'; put 'put ''dDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBUOWU9Im5vdF9jb250YWlucyI7QnUoVDllLGZ1bmN0aW9uIHhtdChuLHQpe3JldHVybiFNOChvcmUsdCkobil9LHtuYW1lOmJlZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBBOWU9ImRhdGVfdG9tb3Jyb3ciO0J1''@;'; put 'put ''KEE5ZSxmdW5jdGlvbiBFbXQobil7Y29uc3QgdD1xcyhuLnZhbHVlLG4ubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIXQuaXNWYWxpZCgpJiZ0LmlzU2FtZShxcygpLnN1YnRyYWN0KC0xLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6RGVlLGlucHV0c0NvdW50OjB9KTtjb25z''@;'; put 'put ''dCBrOWU9ImRhdGVfdG9kYXkiO0J1KGs5ZSxmdW5jdGlvbiBUbXQobil7Y29uc3QgdD1xcyhuLnZhbHVlLG4ubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIXQuaXNWYWxpZCgpJiZ0LmlzU2FtZShxcygpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOmtlZSxpbnB1dHNDb3VudDowfSk7Y29u''@;'; put 'put ''c3QgRDllPSJkYXRlX3llc3RlcmRheSI7QnUoRDllLGZ1bmN0aW9uIEFtdChuKXtjb25zdCB0PXFzKG4udmFsdWUsbi5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhdC5pc1ZhbGlkKCkmJnQuaXNTYW1lKHFzKCkuc3VidHJhY3QoMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1l''@;'; put 'put ''OkllZSxpbnB1dHNDb3VudDowfSk7Y29uc3Qga210PSJudW1lcmljIixJOWU9InRleHQiLERtdD0iZGF0ZSIsUjllPXtba210XTpbWDAseXMsZEQsbUIseXMsaEQsdkIseXMsImd0IiwiZ3RlIiwibHQiLCJsdGUiLHlCLE05ZV0sW0k5ZV06W1gwLHlzLGRELG1CLHlzLGhELHZCLHlzLHg5ZSwi''@;'; put 'put ''ZW5kc193aXRoIix5cyxvcmUsVDllXSxbRG10XTpbWDAseXMsZEQsbUIseXMsaEQsdkIseXMsYXJlLGlyZSx5Qix5cyxBOWUsazllLEQ5ZV19O2Z1bmN0aW9uIGZEKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBSbXQobil7dmFyIHQ9ZnVuY3Rpb24gTG10KG4sdCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jb25zdCBscmU9ImJ1aWxkaW5nIixMOWU9WyJjbGljayIsImlucHV0Iiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIiLCJjaGFuZ2UiXTtjbGFzcyBWMntzdGF0aWMgZ2V0IERFRkFVTFRT''@;'; put 'put ''KCl7cmV0dXJuIG9wKHtjbGFzc05hbWU6IiIsdmFsdWU6IiIsdGFnTmFtZToiZGl2IixjaGlsZHJlbjpbXSx3cmFwSXQ6ITB9KX1jb25zdHJ1Y3Rvcih0LGUpe2ZEKHRoaXMsImhvdCIsdm9pZCAwKSxmRCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBaZih0aGlzKSksZkQodGhpcywib3B0aW9u''@;'; put 'put ''cyIsdm9pZCAwKSxmRCh0aGlzLCJfZWxlbWVudCIsdm9pZCAwKSxmRCh0aGlzLCJidWlsZFN0YXRlIix2b2lkIDApLHRoaXMuaG90PXQsdGhpcy5vcHRpb25zPUZ1KFYyLkRFRkFVTFRTLGUpLHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5v''@;'; put 'put ''cHRpb25zLndyYXBJdD8iZGl2Ijp0aGlzLm9wdGlvbnMudGFnTmFtZSl9c2V0VmFsdWUodCl7dGhpcy5vcHRpb25zLnZhbHVlPXQsdGhpcy51cGRhdGUoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09''@;'; put 'put ''bHJlP3RoaXMuX2VsZW1lbnQ6ImJ1aWx0Ij09PXRoaXMuYnVpbGRTdGF0ZT8odGhpcy51cGRhdGUoKSx0aGlzLl9lbGVtZW50KToodGhpcy5idWlsZFN0YXRlPWxyZSx0aGlzLmJ1aWxkKCksdGhpcy5idWlsZFN0YXRlPSJidWlsdCIsdGhpcy5fZWxlbWVudCl9aXNCdWlsdCgpe3JldHVybiJi''@;'; put 'put ''dWlsdCI9PT10aGlzLmJ1aWxkU3RhdGV9dHJhbnNsYXRlSWZQb3NzaWJsZSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJnQuc3RhcnRzV2l0aChCZCk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh0KTp0fWJ1aWxkKCl7Y29uc3QgdD0oZSxyKT0+e3RoaXMuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIoZSxyLGk9PnRoaXMucnVuTG9jYWxIb29rcyhyLGksdGhpcykpfTtpZih0aGlzLmJ1aWxkU3RhdGV8fCh0aGlzLmJ1aWxkU3RhdGU9bHJlKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCEwKSx2b2lkIDAhPT10aGlzLm9wdGlv''@;'; put 'put ''bnMudGFiSW5kZXgmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5vcHRpb25zLnRhYkluZGV4KSx2b2lkIDAhPT10aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInJvbGUiLHRoaXMub3B0aW9ucy5yb2xlKSx0aGlzLm9wdGlv''@;'; put 'put ''bnMuY2xhc3NOYW1lJiZ0aSh0aGlzLl9lbGVtZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpWW4odGhpcy5vcHRpb25zLmNoaWxkcmVuLGU9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZS5lbGVtZW50KSk7ZWxzZSBpZih0aGlzLm9w''@;'; put 'put ''dGlvbnMud3JhcEl0KXtjb25zdCBlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTtlLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCEwKSxhcyh0aGlzLm9wdGlvbnMsKHIsaSk9Pnt2b2lkIDAhPT1lW2ldJiYiY2xhc3NOYW1l''@;'; put 'put ''IiE9PWkmJiJ0YWdOYW1lIiE9PWkmJiJjaGlsZHJlbiIhPT1pJiYoZVtpXT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUocikpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChlKSxZbihMOWUscj0+dChlLHIpKX1lbHNlIFluKEw5ZSxlPT50KHRoaXMuX2VsZW1lbnQsZSkpfXVwZGF0ZSgp''@;'; put 'put ''e31yZXNldCgpe3RoaXMub3B0aW9ucy52YWx1ZT0iIix0aGlzLnVwZGF0ZSgpfXNob3coKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIn1oaWRlKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUifWZvY3VzKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0''@;'; put 'put ''cm95KCksdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmhvdD1udWxsLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH19ZnVuY3Rpb24gTzllKG4sdCl7aWYodC5o''@;'; put 'put ''YXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBfQihuLHQpe3JldHVybiBuLmdldChjcmUobix0KSl9ZnVuY3Rpb24gY3JlKG4sdCxlKXtpZigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1wbChWMiwkMCk7dmFyIHBTPW5ldyBXZWFrTWFwLFA5ZT1uZXcgV2Vh''@;'; put 'put ''a1NldDtjbGFzcyB4OCBleHRlbmRzIFYye3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gb3Aoe3BsYWNlaG9sZGVyOiIiLHR5cGU6InRleHQiLHRhZ05hbWU6ImlucHV0Iix0YWJJbmRleDotMX0pfWNvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxGdSh4OC5ERUZBVUxUUyxlKSksZnVuY3Rp''@;'; put 'put ''b24gT210KG4sdCl7TzllKG4sdCksdC5hZGQobil9KHRoaXMsUDllKSxmdW5jdGlvbiBQbXQobix0LGUpe085ZShuLHQpLHQuc2V0KG4sZSl9KHRoaXMscFMsdm9pZCAwKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImtleXVwIix0PT5j''@;'; put 'put ''cmUoUDllLHRoaXMsSG10KS5jYWxsKHRoaXMsdCkpfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCB0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsoZnVuY3Rpb24gRm10KG4sdCxlKXtuLnNldChjcmUobix0KSxlKX0pKHBTLHRoaXMsdGhpcy5fZWxlbWVu''@;'; put 'put ''dC5maXJzdENoaWxkKSx0aSh0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSx0aSh0LCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoX0IocFMsdGhpcykudHlwZT10aGlzLm9wdGlvbnMu''@;'; put 'put ''dHlwZSxfQihwUyx0aGlzKS5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSxfQihwUyx0aGlzKS52YWx1ZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnZhbHVlKSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQo''@;'; put 'put ''KSYmX0IocFMsdGhpcykuZm9jdXMoKX19ZnVuY3Rpb24gSG10KG4pe3RoaXMub3B0aW9ucy52YWx1ZT1uLnRhcmdldC52YWx1ZX1mdW5jdGlvbiBwRChuLHQsZSl7RjllKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBGOWUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGdTKG4sdCxlKXtyZXR1cm4gbi5zZXQoZ0Qobix0KSxlKSxlfWZ1bmN0aW9uIGV1KG4sdCl7cmV0dXJuIG4uZ2V0KGdEKG4sdCkpfWZ1bmN0aW9uIGdEKG4sdCxl''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgazA9bmV3IFdlYWtNYXAsYkI9bmV3''@;'; put 'put ''IFdlYWtNYXAsd0I9bmV3IFdlYWtNYXAsdXJlPW5ldyBXZWFrTWFwLENCPW5ldyBXZWFrTWFwLFNCPW5ldyBXZWFrU2V0O2NsYXNzIG1EIGV4dGVuZHMgVjJ7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBvcCh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITEsdGFiSW5kZXg6''@;'; put 'put ''LTF9KX1jb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsRnUobUQuREVGQVVMVFMsZSkpLGZ1bmN0aW9uIE5tdChuLHQpe0Y5ZShuLHQpLHQuYWRkKG4pfSh0aGlzLFNCKSxwRCh0aGlzLGswLG51bGwpLHBEKHRoaXMsYkIsW10pLHBEKHRoaXMsd0Isdm9pZCAwKSxwRCh0aGlzLHVyZSx2b2lkIDAp''@;'; put 'put ''LHBEKHRoaXMsQ0Isdm9pZCAwKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRNZW51KCl7cmV0dXJuIGV1KGswLHRoaXMpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT5nRChTQix0aGlzLGptdCkuY2FsbCh0aGlzKSl9c2V0SXRlbXModCl7Z1MoYkIsdGhp''@;'; put 'put ''cyx0aGlzLnRyYW5zbGF0ZU5hbWVzKHQpKSxldShrMCx0aGlzKSYmZXUoazAsdGhpcykuc2V0TWVudUl0ZW1zKGV1KGJCLHRoaXMpKX10cmFuc2xhdGVOYW1lcyh0KXtyZXR1cm4gWW4odCxlPT57ZS5uYW1lPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShlLm5hbWUpfSksdH1idWlsZCgpe3N1''@;'; put 'put ''cGVyLmJ1aWxkKCksZ1MoazAsdGhpcyxuZXcgc1ModGhpcy5ob3Qse2NsYXNzTmFtZToiaHRTZWxlY3RVSSBodEZpbHRlcnNDb25kaXRpb25zTWVudSIsa2VlcEluVmlld3BvcnQ6ITEsc3RhbmRhbG9uZTohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLm1lbnVDb250YWluZXJ9KSksZXUoazAs''@;'; put 'put ''dGhpcykuc2V0TWVudUl0ZW1zKGV1KGJCLHRoaXMpKTtjb25zdCB0PW5ldyBWMih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Q2FwdGlvbiJ9KSxlPW5ldyBWMih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0RHJvcGRvd24ifSk7Z1Mod0IsdGhpcyx0KSxnUyh1cmUsdGhp''@;'; put 'put ''cyx0LmVsZW1lbnQpLGdTKENCLHRoaXMsZSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKFphKGUuZWxlbWVudCxbWyJhcmlhLWhpZGRlbiIsInRydWUiXV0pLFphKHRoaXMuX2VsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXV0pKSxZbihbdCxlXSxyPT50aGlzLl9lbGVtZW50''@;'; put 'put ''LmFwcGVuZENoaWxkKHIuZWxlbWVudCkpLGV1KGswLHRoaXMpLmFkZExvY2FsSG9vaygic2VsZWN0IixyPT5nRChTQix0aGlzLFZtdCkuY2FsbCh0aGlzLHIpKSxldShrMCx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5nRChTQix0aGlzLEJtdCkuY2FsbCh0aGlzKSksdGhp''@;'; put 'put ''cy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhpcy5pc0J1aWx0KCkpcmV0dXJuO2xldCB0O3Q9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOmV1KGswLHRoaXMpLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKEJOKSxldSh1cmUsdGhpcykudGV4dENvbnRlbnQ9dCxz''@;'; put 'put ''dXBlci51cGRhdGUoKX1vcGVuT3B0aW9ucygpe2NvbnN0IHQ9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V1KGswLHRoaXMpJiYoZXUoazAsdGhpcykub3BlbigpLGV1KGswLHRoaXMpLnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90LmlzTHRyKCk/dC5sZWZ0LTU6dC5s''@;'; put 'put ''ZWZ0LTMxLHRvcDp0LnRvcC0xLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fSksZXUoazAsdGhpcykuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKSxldShrMCx0aGlzKS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJd''@;'; put 'put ''LFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6ZT0+e3RoaXMuY2xvc2VPcHRpb25zKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJ0YWJLZXlkb3duIixlKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pKX1jbG9zZU9wdGlvbnMoKXtldShrMCx0aGlzKSYm''@;'; put 'put ''ZXUoazAsdGhpcykuY2xvc2UoKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKX1kZXN0cm95KCl7ZXUoazAsdGhpcykmJihldShrMCx0aGlzKS5kZXN0cm95KCksZ1MoazAsdGhpcyxudWxsKSksZXUod0IsdGhpcykmJmV1KHdCLHRoaXMpLmRlc3Ryb3koKSxl''@;'; put 'put ''dShDQix0aGlzKSYmZXUoQ0IsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVm10KG4pe24ubmFtZSE9PXlzJiYodGhpcy5vcHRpb25zLnZhbHVlPW4sdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsdGhpcy5vcHRpb25zLnZhbHVlKSl9''@;'; put 'put ''ZnVuY3Rpb24gQm10KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9ZnVuY3Rpb24gam10KCl7dGhpcy5vcGVuT3B0aW9ucygpfWZ1bmN0aW9uIEg5ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gV210KG4pe3ZhciB0PWZ1bmN0aW9uIFptdChuLHQpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6''@;'; put 'put ''ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gTjllKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZHJlPW5ldyBXZWFrU2V0O2NsYXNzIGhyZSBleHRlbmRzIGNEe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCx7aWQ6ZS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiB6bXQobix0KXsoZnVuY3Rpb24gVW10KG4sdCl7aWYo''@;'; put 'put ''dC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5hZGQobil9KHRoaXMsZHJlKSxIOWUodGhpcywibmFtZSIsIiIpLEg5ZSh0aGlzLCJhZGRTZXBhcmF0b3Ii''@;'; put 'put ''LCExKSx0aGlzLm5hbWU9ZS5uYW1lLHRoaXMuYWRkU2VwYXJhdG9yPWUuYWRkU2VwYXJhdG9yLHRoaXMuZWxlbWVudHMucHVzaChuZXcgbUQodGhpcy5ob3Qse21lbnVDb250YWluZXI6ZS5tZW51Q29udGFpbmVyfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgeDgodGhpcy5ob3Qse3BsYWNl''@;'; put 'put ''aG9sZGVyOkJlZX0pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHg4KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpqZWV9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0Iix0PT5OOWUoZHJlLHRo''@;'; put 'put ''aXMsWW10KS5jYWxsKHRoaXMsdCkpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpKS5hZGRMb2NhbEhvb2soInRhYktleWRvd24iLHQ9PnRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0VGFiS2V5ZG93biIsdCkpLFluKHRoaXMu''@;'; put 'put ''Z2V0SW5wdXRFbGVtZW50cygpLHQ9Pnt0LmFkZExvY2FsSG9vaygia2V5ZG93biIsZT0+TjllKGRyZSx0aGlzLEdtdCkuY2FsbCh0aGlzLGUpKX0pfXNldFN0YXRlKHQpe2lmKHRoaXMucmVzZXQoKSwhdClyZXR1cm47Y29uc3QgZT1vcCh0LmNvbW1hbmQpO2UubmFtZS5zdGFydHNXaXRoKFhj''@;'; put 'put ''KSYmKGUubmFtZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGUubmFtZSkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGUpLFluKHQuYXJncywocixpKT0+e2lmKGk+ZS5pbnB1dHNDb3VudC0xKXJldHVybiExO2NvbnN0IGE9dGhpcy5nZXRJbnB1dEVsZW1lbnQoaSk7''@;'; put 'put ''YS5zZXRWYWx1ZShyKSxhW2UuaW5wdXRzQ291bnQ+aT8ic2hvdyI6ImhpZGUiXSgpLGl8fHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmEuZm9jdXMoKSwxMCl9KX1nZXRTdGF0ZSgpe2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuZ2V0VmFsdWUoKXx8dXkoWDApLGU9W107''@;'; put 'put ''cmV0dXJuIFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLChyLGkpPT57dC5pbnB1dHNDb3VudD5pJiZlLnB1c2goci5nZXRWYWx1ZSgpKX0pLHtjb21tYW5kOnQsYXJnczplfX11cGRhdGVTdGF0ZSh0LGUpe2NvbnN0IHI9dXkodD90Lm5hbWU6WDApO3RoaXMuc3RhdGUuc2V0VmFsdWVBdElu''@;'; put 'put ''ZGV4KGUse2NvbW1hbmQ6cixhcmdzOnQ/dC5hcmdzOltdfSksdHx8WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksaT0+aS5zZXRWYWx1ZShudWxsKSl9Z2V0U2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcih0PT50IGluc3RhbmNlb2YgbUQpWzBdfWdldElucHV0''@;'; put 'put ''RWxlbWVudCgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudHMoKVt0XX1nZXRJbnB1dEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKHQ9PnQgaW5zdGFu''@;'; put 'put ''Y2VvZiB4OCl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOih0LGUscixpLGEsYyk9Pnt0aShlLnBhcmVudE5v''@;'; put 'put ''ZGUsImh0RmlsdGVyc01lbnVDb25kaXRpb24iKSx0aGlzLmFkZFNlcGFyYXRvciYmdGkoZS5wYXJlbnROb2RlLCJib3JkZXIiKTtjb25zdCBtPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGkobSwiaHRGaWx0ZXJzTWVudUxhYmVsIiksbS50ZXh0''@;'; put 'put ''Q29udGVudD1jLGUuYXBwZW5kQ2hpbGQobSksZS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8WW4odGhpcy5lbGVtZW50cyxDPT5lLmFwcGVuZENoaWxkKEMuZWxlbWVudCkpLGV9fX1yZXNldCgpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJz''@;'; put 'put ''IikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtsZXQgZT1bdXkoWDApXTtpZihudWxsIT09dCl7Y29uc3R7dmlzdWFsSW5kZXg6cn09dDtlPWZ1bmN0aW9uIEltdChuKXtjb25zdCB0PVtdO2xldCBlPW47cmV0dXJuIFI5ZVtlXXx8KGU9InRleHQiKSxZbihSOWVbZV0scj0+e2xldCBpO2k9cj09PXlz''@;'; put 'put ''P3tuYW1lOnlzfTpvcCh1eShyKSksdC5wdXNoKGkpfSksdH0odGhpcy5ob3QuZ2V0RGF0YVR5cGUoMCxyLHRoaXMuaG90LmNvdW50Um93cygpLHIpKX1Zbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxyPT5yLmhpZGUoKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoZSksc3Vw''@;'; put 'put ''ZXIucmVzZXQoKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShlWzBdKX19ZnVuY3Rpb24gWW10KG4pe1luKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLCh0LGUpPT57dFtuLmlucHV0c0NvdW50PmU/InNob3ciOiJoaWRlIl0oKSwwPT09ZSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGlt''@;'; put 'put ''ZW91dCgoKT0+dC5mb2N1cygpLDEwKX0pLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixuKX1mdW5jdGlvbiBHbXQobil7a3Yobi5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksQTIobikpfWNvbnN0IHZEPXt9O2Z1bmN0aW9uIEttdChuKXtyZXR1''@;'; put 'put ''cm4gdkRbbl0ubmFtZX1mdW5jdGlvbiBmcmUobix0LGUpe3ZEW25dPXtuYW1lOnQsZnVuYzplfX1jb25zdCBFOD0iY29uanVuY3Rpb24iO2ZyZShFOCxPZWUsZnVuY3Rpb24gcW10KG4sdCl7cmV0dXJuIG4uZXZlcnkoZT0+ZS5mdW5jKHQpKX0pO2NvbnN0IE1CPSJkaXNqdW5jdGlvbiI7ZnJl''@;'; put 'put ''KE1CLGpOLGZ1bmN0aW9uIFFtdChuLHQpe3JldHVybiBuLnNvbWUoZT0+ZS5mdW5jKHQpKX0pO2NvbnN0IHByZT0iZGlzanVuY3Rpb25XaXRoRXh0cmFDb25kaXRpb24iO2Z1bmN0aW9uIFY5ZShuLHQsZSl7KGZ1bmN0aW9uIG42dChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24geUQobix0KXtyZXR1cm4gbi5nZXQoajllKG4sdCkpfWZ1bmN0aW9uIEI5ZShuLHQsZSl7cmV0dXJuIG4uc2V0KGo5ZShu''@;'; put 'put ''LHQpLGUpLGV9ZnVuY3Rpb24gajllKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3Qi''@;'; put 'put ''KX1mcmUocHJlLGpOLGZ1bmN0aW9uIHQ2dChuLHQpe2lmKG4ubGVuZ3RoPDMpdGhyb3cgRXJyb3IoIk9wZXJhdGlvbiBkb2Vzbid0IHdvcmsgb24gbGVzcyB0aGVuIHRocmVlIGNvbmRpdGlvbnMuIik7cmV0dXJuIG4uc2xpY2UoMCxuLmxlbmd0aC0xKS5zb21lKGU9PmUuZnVuYyh0KSkmJm5b''@;'; put 'put ''bi5sZW5ndGgtMV0uZnVuYyh0KX0pO3ZhciBtUz1uZXcgV2Vha01hcCxncmU9bmV3IFdlYWtNYXA7Y2xhc3MgeEIgZXh0ZW5kcyBWMntzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG9wKHt0eXBlOiJyYWRpbyIsdGFnTmFtZToiaW5wdXQiLGNsYXNzTmFtZToiaHRVSVJhZGlvIixsYWJl''@;'; put 'put ''bDp7fX0pfWNvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxGdSh4Qi5ERUZBVUxUUyxlKSksVjllKHRoaXMsbVMsdm9pZCAwKSxWOWUodGhpcyxncmUsdm9pZCAwKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwi''@;'; put 'put ''KTt0LnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpLHQuaHRtbEZvcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLmh0bWxGb3IpLEI5ZShncmUsdGhpcyx0KSxCOWUobVMsdGhpcyx0''@;'; put 'put ''aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpLHlEKG1TLHRoaXMpLmNoZWNrZWQ9dGhpcy5vcHRpb25zLmNoZWNrZWQsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoeUQoZ3JlLHRoaXMpLnRleHRDb250ZW50PXRoaXMu''@;'; put 'put ''dHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpKX1pc0NoZWNrZWQoKXtyZXR1cm4hIXRoaXMuaXNCdWlsdCgpJiZ5RChtUyx0aGlzKS5jaGVja2VkfXNldENoZWNrZWQoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMuaXNCdWlsdCgpJiYoeUQobVMsdGhpcykuY2hlY2tlZD10KX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZ5RChtUyx0aGlzKS5mb2N1cygpfX12YXIgVTllPW5ldyBXZWFrU2V0O2NsYXNzIGM2dCBleHRlbmRzIGNEe2NvbnN0cnVjdG9yKHQsZSl7''@;'; put 'put ''c3VwZXIodCx7aWQ6ZS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiByNnQobix0KXsoZnVuY3Rpb24gaTZ0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX0pKG4sdCksdC5hZGQobil9KHRoaXMsVTllKSxmdW5jdGlvbiBhNnQobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIG82dChuKXt2YXIgdD1mdW5jdGlvbiBzNnQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSh0aGlzLCJuYW1l''@;'; put 'put ''IiwiIiksdGhpcy5uYW1lPWUubmFtZSx0aGlzLmJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRk''@;'; put 'put ''ZW4oKSxyZW5kZXJlcjoodCxlKT0+KHRpKGUucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudU9wZXJhdG9ycyIpLFluKHRoaXMuZWxlbWVudHMscj0+ZS5hcHBlbmRDaGlsZChyLmVsZW1lbnQpKSxlKX19YnVpbGRPcGVyYXRvcnNFbGVtZW50KCl7Y29uc3QgdD1bRTgsTUJdO1luKHQsZT0+e2Nv''@;'; put 'put ''bnN0IHI9bmV3IHhCKHRoaXMuaG90LHtuYW1lOiJvcGVyYXRvciIsbGFiZWw6e2h0bWxGb3I6ZSx0ZXh0Q29udGVudDpLbXQoZSl9LHZhbHVlOmUsY2hlY2tlZDplPT09dFswXSxpZDplfSk7ci5hZGRMb2NhbEhvb2soImNoYW5nZSIsaT0+ZnVuY3Rpb24gbDZ0KG4sdCxlKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oVTllLHRoaXMsdTZ0KS5jYWxsKHRoaXMsaSkpLHRoaXMuZWxl''@;'; put 'put ''bWVudHMucHVzaChyKX0pfXNldENoZWNrZWQodCl7aWYodGhpcy5lbGVtZW50cy5sZW5ndGg8dCl0aHJvdyBFcnJvcihlbGBSYWRpbyBidXR0b24gd2l0aCBpbmRleCAke3R9IGRvZXNuJ3QgZXhpc3QuYCk7WW4odGhpcy5lbGVtZW50cywoZSxyKT0+e2Uuc2V0Q2hlY2tlZChyPT09dCl9KX1n''@;'; put 'put ''ZXRBY3RpdmVPcGVyYXRpb25JZCgpe2NvbnN0IHQ9dGhpcy5lbGVtZW50cy5maW5kKGU9PmUgaW5zdGFuY2VvZiB4QiYmZS5pc0NoZWNrZWQoKSk7cmV0dXJuIHQ/dC5nZXRWYWx1ZSgpOkU4fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKX1zZXRTdGF0ZSh0''@;'; put 'put ''KXt0aGlzLnJlc2V0KCksdCYmdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpIT09dCYmWW4odGhpcy5lbGVtZW50cyxlPT57ZS5zZXRDaGVja2VkKGUuZ2V0VmFsdWUoKT09PXQpfSl9dXBkYXRlU3RhdGUoKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06RTg7cj09PXByZSYmKHI9TUIpLHRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHIpfXJlc2V0KCl7dGhpcy5zZXRDaGVja2VkKDApfX1mdW5jdGlvbiB1NnQobil7dGhpcy5zZXRTdGF0ZShuLnRh''@;'; put 'put ''cmdldC52YWx1ZSl9ZnVuY3Rpb24gaDZ0KG4sdCl7bGV0IGU9bjtyZXR1cm4iIj09PWUmJihlPWAoJHt0fSlgKSxlfWZ1bmN0aW9uIF9EKG4pe2NvbnN0IHQ9bmV3IFNldChuKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFzKGUpfX1mdW5jdGlvbiBtcmUobil7cmV0dXJuIG4/PyIi''@;'; put 'put ''fWZ1bmN0aW9uIHZyZShuKXtyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KG4pKS5tYXAodD0+bXJlKHQpKS5zb3J0KCh0LGUpPT4ibnVtYmVyIj09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgZT90LWU6dD09PWU/MDp0PmU/MTotMSl9ZnVuY3Rpb24gVzllKG4sdCxlLHIpe2NvbnN0IGk9''@;'; put 'put ''W10sYT1uPT09dDtsZXQgYztyZXR1cm4gYXx8KGM9X0QodCkpLG4uZm9yRWFjaChtPT57bGV0IEM9ITE7KGF8fGMobSkpJiYoQz0hMCk7Y29uc3QgUD17Y2hlY2tlZDpDLHZhbHVlOm0sdmlzdWFsVmFsdWU6aDZ0KG0sZSl9O3ImJnIoUCksaS5wdXNoKFApfSksaX1mdW5jdGlvbiB5cmUobix0''@;'; put 'put ''KXtyZXR1cm4gbi5nZXQoWjllKG4sdCkpfWZ1bmN0aW9uIFo5ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50''@;'; put 'put ''IG9uIHRoaXMgb2JqZWN0Iil9JGdlKCk7dmFyIGJEPW5ldyBXZWFrTWFwO2NsYXNzIHdEIGV4dGVuZHMgVjJ7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBvcCh7aHJlZjoiIyIsdGFnTmFtZToiYSIsdGFiSW5kZXg6LTEscm9sZToiYnV0dG9uIn0pfWNvbnN0cnVjdG9yKHQsZSl7c3Vw''@;'; put 'put ''ZXIodCxGdSh3RC5ERUZBVUxUUyxlKSksZnVuY3Rpb24gZjZ0KG4sdCxlKXsoZnVuY3Rpb24gcDZ0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4s''@;'; put 'put ''dCksdC5zZXQobixlKX0odGhpcyxiRCx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxmdW5jdGlvbiBnNnQobix0LGUpe24uc2V0KFo5ZShuLHQpLGUpfShiRCx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJih5cmUoYkQsdGhpcyku''@;'; put 'put ''dGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy50ZXh0Q29udGVudCkpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnlyZShiRCx0aGlzKS5mb2N1cygpfWFjdGl2YXRlKCl7eXJlKGJELHRoaXMpLmNsaWNrKCl9fWZ1bmN0aW9uIHZTKG4sdCxlKXtZOWUo''@;'; put 'put ''bix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIFk5ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUG8obix0KXtyZXR1cm4gbi5nZXQoeVMo''@;'; put 'put ''bix0KSl9ZnVuY3Rpb24gX3Aobix0LGUpe3JldHVybiBuLnNldCh5UyhuLHQpLGUpLGV9ZnVuY3Rpb24geVMobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZh''@;'; put 'put ''dGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IEc5ZT0ibXVsdGlwbGVTZWxlY3QuaXRlbUJveCI7dmFyIGJwPW5ldyBXZWFrTWFwLEVjPW5ldyBXZWFrTWFwLF9yZT1uZXcgV2Vha01hcCxSNT1uZXcgV2Vha01hcCxUOD1uZXcgV2Vha01hcCxBOD1uZXcg''@;'; put 'put ''V2Vha01hcCxDRD1uZXcgV2Vha1NldDtjbGFzcyBTRCBleHRlbmRzIFYye3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gb3Aoe2NsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0Iix2YWx1ZTpbXX0pfWNvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxGdShTRC5ERUZBVUxUUyxlKSksZnVu''@;'; put 'put ''Y3Rpb24gbTZ0KG4sdCl7WTllKG4sdCksdC5hZGQobil9KHRoaXMsQ0QpLHZTKHRoaXMsYnAsW10pLHZTKHRoaXMsRWMsdm9pZCAwKSx2Uyh0aGlzLF9yZSx2b2lkIDApLHZTKHRoaXMsUjUsdm9pZCAwKSx2Uyh0aGlzLFQ4LHZvaWQgMCksdlModGhpcyxBOCx2b2lkIDApLF9wKFI1LHRoaXMs''@;'; put 'put ''bmV3IHg4KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpWZWUsY2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3RTZWFyY2gifSkpLF9wKFQ4LHRoaXMsbmV3IHdEKHRoaXMuaG90LHt0ZXh0Q29udGVudDpQZWUsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pKSxfcChBOCx0aGlzLG5ldyB3RCh0''@;'; put 'put ''aGlzLmhvdCx7dGV4dENvbnRlbnQ6RmVlLGNsYXNzTmFtZToiaHRVSUNsZWFyQWxsIn0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRJdGVtc0JveCgpe3JldHVybiBQbyhFYyx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7UG8oUjUsdGhpcykuYWRkTG9jYWxIb29rKCJrZXlkb3duIix0PT55UyhD''@;'; put 'put ''RCx0aGlzLHk2dCkuY2FsbCh0aGlzLHQpKSxQbyhSNSx0aGlzKS5hZGRMb2NhbEhvb2soImlucHV0Iix0PT55UyhDRCx0aGlzLHY2dCkuY2FsbCh0aGlzLHQpKSxQbyhUOCx0aGlzKS5hZGRMb2NhbEhvb2soImNsaWNrIix0PT55UyhDRCx0aGlzLF82dCkuY2FsbCh0aGlzLHQpKSxQbyhBOCx0''@;'; put 'put ''aGlzKS5hZGRMb2NhbEhvb2soImNsaWNrIix0PT55UyhDRCx0aGlzLGI2dCkuY2FsbCh0aGlzLHQpKX1zZXRJdGVtcyh0KXt2YXIgZTtfcChicCx0aGlzLHQpLG51bGw9PT0oZT1QbyhFYyx0aGlzKSl8fHZvaWQgMD09PWV8fGUubG9hZERhdGEoUG8oYnAsdGhpcykpfXNldExvY2FsZSh0KXtf''@;'; put 'put ''cChfcmUsdGhpcyx0KX1nZXRMb2NhbGUoKXtyZXR1cm4gUG8oX3JlLHRoaXMpfWdldEl0ZW1zKCl7cmV0dXJuWy4uLlBvKGJwLHRoaXMpXX1nZXRWYWx1ZSgpe3JldHVybiBmdW5jdGlvbiBDNnQobil7Y29uc3QgdD1bXTtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmNoZWNrZWQmJnQucHVzaChl''@;'; put 'put ''LnZhbHVlKX0pLHR9KFBvKGJwLHRoaXMpKX1nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKXtyZXR1cm4gUG8oUjUsdGhpcyl9Z2V0U2VsZWN0QWxsRWxlbWVudCgpe3JldHVybiBQbyhUOCx0aGlzKX1nZXRDbGVhckFsbEVsZW1lbnQoKXtyZXR1cm4gUG8oQTgsdGhpcyl9aXNTZWxlY3RlZEFsbFZh''@;'; put 'put ''bHVlcygpe3JldHVybiBQbyhicCx0aGlzKS5sZW5ndGg9PT10aGlzLmdldFZhbHVlKCkubGVuZ3RofWJ1aWxkKCl7dmFyIHQ7c3VwZXIuYnVpbGQoKTtjb25zdHtyb290RG9jdW1lbnQ6ZX09dGhpcy5ob3Qscj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGk9bmV3IFYyKHRoaXMuaG90LHtjbGFz''@;'; put 'put ''c05hbWU6Imh0VUlTZWxlY3Rpb25Db250cm9scyIsY2hpbGRyZW46W1BvKFQ4LHRoaXMpLFBvKEE4LHRoaXMpXX0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoUG8oUjUsdGhpcykuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChpLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQu''@;'; put 'put ''YXBwZW5kQ2hpbGQociksbnVsbD09PSh0PVBvKEVjLHRoaXMpKXx8dm9pZCAwPT09dHx8dC5kZXN0cm95KCksdGkociwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksX3AoRWMsdGhpcyxuZXcgdGhpcy5ob3QuY29uc3RydWN0b3Iocix7ZGF0YTpbW11dLGNvbHVtbnM6W3tkYXRhOiJjaGVja2Vk''@;'; put 'put ''Iix0eXBlOiJjaGVja2JveCIsbGFiZWw6e3Byb3BlcnR5OiJ2aXN1YWxWYWx1ZSIscG9zaXRpb246ImFmdGVyIn19XSxiZWZvcmVSZW5kZXJlcjoobSxDLFAsWSxKLGNlKT0+e20udGl0bGU9Y2UuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChDLGNlLmxhYmVsLnByb3BlcnR5KX0sYWZ0ZXJM''@;'; put 'put ''aXN0ZW46KCk9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImZvY3VzIix0aGlzKX0sYmVmb3JlT25DZWxsTW91c2VVcDooKT0+e1BvKEVjLHRoaXMpLmxpc3RlbigpfSxtb2RpZnlDb2xXaWR0aDptPT57Y29uc3QgQz1QbyhFYyx0aGlzKS5jb250YWluZXIuc2Nyb2xsV2lkdGgtZ3UoZSk7cmV0dXJu''@;'; put 'put ''IHZvaWQgMCE9PW0mJm08Qz9DOm19LGF1dG9Db2x1bW5TaXplOiEwLGF1dG9Sb3dTaXplOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGF1dG9XcmFwQ29sOiEwLGhlaWdodDoxMTAsY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxIYW5kbGU6ITEsZnJh''@;'; put 'put ''Z21lbnRTZWxlY3Rpb246ImNlbGwiLHRhYk1vdmVzOntyb3c6MSxjb2w6MH0sdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn0pKSxQbyhFYyx0aGlzKS5pbml0KCk7Y29uc3QgYz1QbyhF''@;'; put 'put ''Yyx0aGlzKS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik7Yy5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJUYWIiXSksYy5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJTaGlmdCIsIlRhYiJdKSxjLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazpt''@;'; put 'put ''PT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixtLHRoaXMpfSxncm91cDpHOWV9KSxjLmFkZFNob3J0Y3V0KHtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6bT0+e1BvKEVjLHRoaXMpLmRlc2VsZWN0Q2VsbCgpLHRoaXMucnVuTG9jYWxIb29rcygia2V5ZG93''@;'; put 'put ''biIsbSx0aGlzKSx0aGlzLnJ1bkxvY2FsSG9va3MoImxpc3RUYWJLZXlkb3duIixtLHRoaXMpfSxncm91cDpHOWV9KX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZQbyhFYyx0aGlzKS5saXN0ZW4oKX1yZXNldCgpe1BvKFI1LHRoaXMpLnJlc2V0KCksUG8oVDgsdGhpcykucmVzZXQoKSxQbyhB''@;'; put 'put ''OCx0aGlzKS5yZXNldCgpfXVwZGF0ZSgpeyF0aGlzLmlzQnVpbHQoKXx8MD09PVBvKEVjLHRoaXMpLnJvb3RFbGVtZW50Lm9mZnNldEhlaWdodHx8KFBvKEVjLHRoaXMpLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnc2dChQbyhicCx0aGlzKSx0aGlzLm9wdGlvbnMudmFsdWUpfSksc3VwZXIudXBk''@;'; put 'put ''YXRlKCkpfWRlc3Ryb3koKXt2YXIgdDtudWxsPT09KHQ9UG8oRWMsdGhpcykpfHx2b2lkIDA9PT10fHx0LmRlc3Ryb3koKSxQbyhSNSx0aGlzKS5kZXN0cm95KCksUG8oQTgsdGhpcykuZGVzdHJveSgpLFBvKFQ4LHRoaXMpLmRlc3Ryb3koKSxfcChSNSx0aGlzLG51bGwpLF9wKEE4LHRoaXMs''@;'; put 'put ''bnVsbCksX3AoVDgsdGhpcyxudWxsKSxfcChFYyx0aGlzLG51bGwpLF9wKGJwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB2NnQobil7Y29uc3QgdD1uLnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKTtpZigiYXBwbHkiPT09dGhp''@;'; put 'put ''cy5vcHRpb25zLnNlYXJjaE1vZGUpe2NvbnN0IGU9UG8oRWMsdGhpcykuZ2V0UGx1Z2luKCJoaWRkZW5Sb3dzIik7ZS5zaG93Um93cyhlLmdldEhpZGRlblJvd3MoKSksUG8oYnAsdGhpcykuZm9yRWFjaCgocixpKT0+e3IuY2hlY2tlZD1gJHtyLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNhc2Uo''@;'; put 'put ''dGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZih0KT49MCxyLmNoZWNrZWR8fGUuaGlkZVJvdyhpKX0pLFBvKEVjLHRoaXMpLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksUG8oRWMsdGhpcykucmVuZGVyKCl9ZWxzZXtsZXQgZTtlPSIiPT09dD9bLi4uUG8oYnAsdGhpcyldOlBvKGJwLHRoaXMp''@;'; put 'put ''LmZpbHRlcihyPT5gJHtyLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZih0KT49MCksUG8oRWMsdGhpcykubG9hZERhdGEoZSl9fWZ1bmN0aW9uIHk2dChuKXt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLG4sdGhpcykscEooa3Ysbi5rZXlD''@;'; put 'put ''b2RlKSgiQVJST1dfRE9XTiIpJiYobi5wcmV2ZW50RGVmYXVsdCgpLEEyKG4pLFBvKEVjLHRoaXMpLmxpc3RlbigpLFBvKEVjLHRoaXMpLnNlbGVjdENlbGwoMCwwKSl9ZnVuY3Rpb24gXzZ0KG4pe2NvbnN0IHQ9W107bi5wcmV2ZW50RGVmYXVsdCgpLFBvKEVjLHRoaXMpLmdldFNvdXJjZURh''@;'; put 'put ''dGEoKS5mb3JFYWNoKChlLHIpPT57ZS5jaGVja2VkPSEwLHQucHVzaCh1UShlLHIpWzBdKX0pLFBvKEVjLHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwodCl9ZnVuY3Rpb24gYjZ0KG4pe2NvbnN0IHQ9W107bi5wcmV2ZW50RGVmYXVsdCgpLFBvKEVjLHRoaXMpLmdldFNvdXJjZURhdGEoKS5m''@;'; put 'put ''b3JFYWNoKChlLHIpPT57ZS5jaGVja2VkPSExLHQucHVzaCh1UShlLHIpWzBdKX0pLFBvKEVjLHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwodCl9ZnVuY3Rpb24gdzZ0KG4sdCl7Y29uc3QgZT1fRCh0KTtyZXR1cm4gbi5tYXAocj0+KHIuY2hlY2tlZD1lKHIudmFsdWUpLHIpKX1jb25zdCBk''@;'; put 'put ''eT0iYnlfdmFsdWUiO2Z1bmN0aW9uICQ5ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRTZ0KG4pe3ZhciB0PWZ1bmN0aW9uIFQ2dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciBy''@;'; put 'put ''PWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gRUIobix0LGUpe2lmKCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUJ1KGR5LGZ1bmN0aW9uIFM2dChuLHQpe2xldFtlXT10O3Jl''@;'; put 'put ''dHVybiBlKG4udmFsdWUpfSx7bmFtZToiQnkgdmFsdWUiLGlucHV0c0NvdW50OjAsaW5wdXRWYWx1ZXNEZWNvcmF0b3Iobil7bGV0W3RdPW47cmV0dXJuW19EKHQpXX0sc2hvd09wZXJhdG9yczohMX0pO3ZhciBYOWUsTUQ9bmV3IFdlYWtTZXQ7Y2xhc3MgQTZ0IGV4dGVuZHMgY0R7Y29uc3Ry''@;'; put 'put ''dWN0b3IodCxlKXtzdXBlcih0LHtpZDplLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIE02dChuLHQpeyhmdW5jdGlvbiB4NnQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u''@;'; put 'put ''IGFuIG9iamVjdCIpfSkobix0KSx0LmFkZChuKX0odGhpcyxNRCksJDllKHRoaXMsIm5hbWUiLCIiKSwkOWUodGhpcywic2VhcmNoTW9kZSIsdm9pZCAwKSx0aGlzLm5hbWU9ZS5uYW1lLHRoaXMuc2VhcmNoTW9kZT1lLnNlYXJjaE1vZGUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBTRCh0aGlz''@;'; put 'put ''LmhvdCx7c2VhcmNoTW9kZTp0aGlzLnNlYXJjaE1vZGV9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJrZXlkb3duIix0PT5FQihNRCx0aGlzLGs2dCkuY2FsbCh0aGlzLHQpKS5hZGRM''@;'; put 'put ''b2NhbEhvb2soImxpc3RUYWJLZXlkb3duIix0PT50aGlzLnJ1bkxvY2FsSG9va3MoImxpc3RUYWJLZXlkb3duIix0KSksdGhpcy5ob3QuYWRkSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLCh0LGUpPT5FQihNRCx0aGlzLEQ2dCkuY2FsbCh0aGlzLHQsZSkpfWdldEVsZW1l''@;'; put 'put ''bnRzKCl7Y29uc3QgdD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO3JldHVyblt0LmdldFNlYXJjaElucHV0RWxlbWVudCgpLHQuZ2V0U2VsZWN0QWxsRWxlbWVudCgpLHQuZ2V0Q2xlYXJBbGxFbGVtZW50KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKV19c2V0U3Rh''@;'; put 'put ''dGUodCl7aWYodGhpcy5yZXNldCgpLHQmJnQuY29tbWFuZC5rZXk9PT1keSl7Y29uc3QgZT10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO2Uuc2V0SXRlbXModC5pdGVtc1NuYXBzaG90KSxlLnNldFZhbHVlKHQuYXJnc1swXSksZS5zZXRMb2NhbGUodC5sb2NhbGUpfX1nZXRTdGF0''@;'; put 'put ''ZSgpe2NvbnN0IHQ9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKSxlPXQuZ2V0SXRlbXMoKTtyZXR1cm57Y29tbWFuZDp7a2V5OnQuaXNTZWxlY3RlZEFsbFZhbHVlcygpfHwhZS5sZW5ndGg/WDA6ZHl9LGFyZ3M6W3QuZ2V0VmFsdWUoKV0saXRlbXNTbmFwc2hvdDplfX11cGRhdGVT''@;'; put 'put ''dGF0ZSh0KXtjb25zdCBlPShyLGksYSxjLG0pPT57Y29uc3RbQ109JDYoaSxKPT5KLm5hbWU9PT1keSksUD17fSxZPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2Uoek4pO2lmKEMpe2NvbnN0IEo9YyhyLG0pLGNlPVdzKEosZHQ9PmR0LnZhbHVlKSxmZT1uZXcgTWFwKEoubWFwKGR0PT5b''@;'; put 'put ''ZHQudmFsdWUsdGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZHQubWV0YS52aXN1YWxSb3csZHQubWV0YS52aXN1YWxDb2wpXSkpLEFlPXZyZShjZSk7YSYmKEMuYXJnc1swXT1hKTtjb25zdCBIZT1bXSxYZT1XOWUoQWUsQy5hcmdzWzBdLFksZHQ9PntkdC5jaGVja2VkJiZIZS5wdXNoKGR0LnZhbHVl''@;'; put 'put ''KSxFQihNRCx0aGlzLEs5ZSkuY2FsbCh0aGlzLGR0LGZlKX0pO1AubG9jYWxlPXRoaXMuaG90LmdldENlbGxNZXRhKDAsdC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4pLmxvY2FsZSxQLmFyZ3M9W0hlXSxQLmNvbW1hbmQ9dXkoZHkpLFAuaXRlbXNTbmFwc2hvdD1YZX1lbHNlIFAuYXJn''@;'; put 'put ''cz1bXSxQLmNvbW1hbmQ9dXkoWDApO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KHIsUCl9O2UodC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sdC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLHQuY29uZGl0aW9uQXJnc0NoYW5nZSx0LmZpbHRlcmVkUm93c0ZhY3Rvcnkp''@;'; put 'put ''LHQuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzLmxlbmd0aCYmZSh0LmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb2x1bW4sdC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29uZGl0aW9ucyx0LmNvbmRpdGlvbkFyZ3NDaGFuZ2UsdC5maWx0ZXJlZFJvd3NGYWN0b3J5LHQuZWRp''@;'; put 'put ''dGVkQ29uZGl0aW9uU3RhY2spfWdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcih0PT50IGluc3RhbmNlb2YgU0QpWzBdfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6''@;'; put 'put ''ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoodCxlLHIsaSxhLGMpPT57dGkoZS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51VmFsdWUiKTtjb25zdCBtPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTty''@;'; put 'put ''ZXR1cm4gdGkobSwiaHRGaWx0ZXJzTWVudUxhYmVsIiksbS50ZXh0Q29udGVudD1jLGUuYXBwZW5kQ2hpbGQobSksZS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8WW4odGhpcy5lbGVtZW50cyxDPT5lLmFwcGVuZENoaWxkKEMuZWxlbWVudCkpLGV9fX1yZXNl''@;'; put 'put ''dCgpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh6TiksZT10aGlzLl9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCkscj1lLm1hcChDPT5DLnZhbHVlKSxpPW5ldyBNYXAoZS5tYXAoQz0+W0MudmFsdWUsQy5tZXRhXSkpLGE9dnJlKHIpLGM9VzllKGEsYSx0LEM9PntFQihN''@;'; put 'put ''RCx0aGlzLEs5ZSkuY2FsbCh0aGlzLEMsaSl9KTt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGMpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKTtjb25zdCBtPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVy''@;'; put 'put ''cyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bnVsbCE9PW0mJnRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0TG9jYWxlKHRoaXMuaG90LmdldENlbGxNZXRhKDAsbS52aXN1YWxJbmRleCkubG9jYWxlKX1fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpe2NvbnN0IHQ9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtyZXR1cm4gbnVsbD09PXQ/W106V3ModGhpcy5ob3QuZ2V0RGF0YUF0Q29sKHQudmlzdWFsSW5kZXgpLChlLHIpPT4oe3ZhbHVlOm1yZShlKSxtZXRhOnRoaXMuaG90LmdldENlbGxNZXRhKHIsdC52aXN1YWxJbmRleCl9''@;'; put 'put ''KSl9fWZ1bmN0aW9uIGs2dChuKXtrdihuLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxBMihuKSksa3Yobi5rZXlDb2RlLCJFTlRFUiIpJiYoImFwcGx5Ij09PXRoaXMuc2VhcmNoTW9kZSYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJhY2NlcHQiKSxBMihu''@;'; put 'put ''KSl9ZnVuY3Rpb24gSzllKG4sdCl7dGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiKSYmKG4udmlzdWFsVmFsdWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixuLnZpc3VhbFZhbHVlLHQuZ2V0KG4udmFsdWUp''@;'; put 'put ''KSl9ZnVuY3Rpb24gRDZ0KG4sdCl7cmV0dXJuIm51bWVyaWMiPT09dC50eXBlP1A4ZShuLHQpOm59dmFyIHE5ZT1uZXcgV2Vha1NldDtjbGFzcyB4RCBleHRlbmRzIGNEe3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4i''@;'; put 'put ''Y2FuY2VsIn1jb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQse2lkOmUuaWQsc3RhdGVsZXNzOiEwfSksZnVuY3Rpb24gSTZ0KG4sdCl7KGZ1bmN0aW9uIFI2dChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxl''@;'; put 'put ''bWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSh0aGlzLHE5ZSksZnVuY3Rpb24gTDZ0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBPNnQobil7dmFyIHQ9ZnVuY3Rpb24gUDZ0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1u''@;'; put 'put ''W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y''@;'; put 'put ''ZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpuW3RdPWUsbn0odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1lLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyB4OCh0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpIZWUsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25PSyIsaWRlbnRpZmllcjp4RC5CVVRUT05f''@;'; put 'put ''T0t9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyB4OCh0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpOZWUsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25DYW5jZWwiLGlkZW50aWZpZXI6eEQuQlVUVE9OX0NBTkNFTH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rl''@;'; put 'put ''ckhvb2tzKCl7WW4odGhpcy5lbGVtZW50cyx0PT57dC5hZGRMb2NhbEhvb2soImNsaWNrIiwoZSxyKT0+ZnVuY3Rpb24gRjZ0KG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0ocTllLHRoaXMsSDZ0KS5jYWxsKHRoaXMsZSxyKSl9KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVT''@;'; put 'put ''ZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KHQsZSk9Pih0aShlLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVBY3Rpb25CYXIiKSxZbih0aGlzLmVsZW1lbnRzLHI9PmUuYXBwZW5kQ2hpbGQoci5lbGVtZW50KSksZSl9fWFjY2VwdCgpe3RoaXMucnVu''@;'; put 'put ''TG9jYWxIb29rcygiYWNjZXB0Iil9Y2FuY2VsKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX19ZnVuY3Rpb24gSDZ0KG4sdCl7dC5vcHRpb25zLmlkZW50aWZpZXI9PT1YOWUuQlVUVE9OX09LP3RoaXMuYWNjZXB0KCk6dGhpcy5jYW5jZWwoKX1mdW5jdGlvbiBicmUobix0LGUpe3Jl''@;'; put 'put ''dHVybih0PWZ1bmN0aW9uIE42dChuKXt2YXIgdD1mdW5jdGlvbiBWNnQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90''@;'; put 'put ''OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufVg5ZT14RDtjb25zdCBKOWU9IkNvbmRpdGlvbkNvbGxlY3Rpb24uZmlsdGVyaW5nU3RhdGVzIjtjbGFzcyBR''@;'; put 'put ''OWV7Y29uc3RydWN0b3IodCl7bGV0IGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTticmUodGhpcywiaG90Iix2b2lkIDApLGJyZSh0aGlzLCJpc01hcFJlZ2lzdHJhYmxlIix2b2lkIDApLGJyZSh0aGlzLCJmaWx0ZXJpbmdTdGF0''@;'; put 'put ''ZXMiLG5ldyBSTiksdGhpcy5ob3Q9dCx0aGlzLmlzTWFwUmVnaXN0cmFibGU9ZSwhMD09PXRoaXMuaXNNYXBSZWdpc3RyYWJsZT90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChKOWUsdGhpcy5maWx0ZXJpbmdTdGF0ZXMpOnRoaXMuZmlsdGVyaW5nU3RhdGVzLmluaXQo''@;'; put 'put ''dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVuZ3RofWlzTWF0Y2godCxlKXt2YXIgcjtjb25zdCBpPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRl''@;'; put 'put ''eChlKSxhPW51bGwhPT0ocj1pPy5jb25kaXRpb25zKSYmdm9pZCAwIT09cj9yOltdLGM9aT8ub3BlcmF0aW9uO3JldHVybiB0aGlzLmlzTWF0Y2hJbkNvbmRpdGlvbnMoYSx0LGMpfWlzTWF0Y2hJbkNvbmRpdGlvbnModCxlKXtyZXR1cm4hdC5sZW5ndGh8fGZ1bmN0aW9uICRtdChuKXtpZigh''@;'; put 'put ''dkRbbl0pdGhyb3cgRXJyb3IoYE9wZXJhdGlvbiB3aXRoIGlkICIke259IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdCB0PXZEW25dLmZ1bmM7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIHQoZSxyKX19KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3Vt''@;'; put 'put ''ZW50c1syXTpFOCkodCxlKX1hZGRDb25kaXRpb24odCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06RTgsaT1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtjb25zdCBhPXRoaXMuaG90LmdldENlbGxN''@;'; put 'put ''ZXRhKDAsdCkubG9jYWxlLGM9ZS5hcmdzLm1hcChZPT4ic3RyaW5nIj09dHlwZW9mIFk/WS50b0xvY2FsZUxvd2VyQ2FzZShhKTpZKSxtPWUubmFtZXx8ZS5jb21tYW5kLmtleTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUFkZCIsdCk7Y29uc3QgQz10aGlzLmdldE9wZXJhdGlvbih0KTtp''@;'; put 'put ''ZihDKXtpZihDIT09cil0aHJvdyBFcnJvcihlbGBUaGUgY29sdW1uIG9mIGluZGV4ICR7dH0gaGFzIGJlZW4gYWxyZWFkeSBhcHBsaWVkIHdpdGggYSBcYCR7Q31cYFx4MjAKICAgICAgICBmaWx0ZXIgb3BlcmF0aW9uLiBVc2UgXGByZW1vdmVDb25kaXRpb25zXGAgdG8gY2xlYXIgdGhlIGN1''@;'; put 'put ''cnJlbnQgY29uZGl0aW9ucyBhbmQgdGhlbiBhZGQgbmV3IG9uZXMuXHgyMAogICAgICAgIE1pbmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBpZiB5b3UgdXNlIFxgY29uanVuY3Rpb25cYCxceDIwCiAgICAgICAgdXNl''@;'; put 'put ''IGl0IGNvbnNlcXVlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbikuYCl9ZWxzZSBpZihtYyh2RFtyXSkpdGhyb3cgbmV3IEVycm9yKGVsYFVuZXhwZWN0ZWQgb3BlcmF0aW9uIG5hbWVkIFxgJHtyfVxgLiBQb3NzaWJsZSBvbmVzIGFyZVx4MjAKICAgICAgICBcYGRpc2p1bmN0aW9uXGAg''@;'; put 'put ''YW5kIFxgY29uanVuY3Rpb25cYC5gKTtjb25zdCBQPXRoaXMuZ2V0Q29uZGl0aW9ucyh0KTswPT09UC5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHQse29wZXJhdGlvbjpyLGNvbmRpdGlvbnM6W3tuYW1lOm0sYXJnczpjLGZ1bmM6TTgobSxjKX1dfSxpKTpQ''@;'; put 'put ''LnB1c2goe25hbWU6bSxhcmdzOmMsZnVuYzpNOChtLGMpfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckFkZCIsdCl9Z2V0Q29uZGl0aW9ucyh0KXt2YXIgZSxyO3JldHVybiBudWxsIT09KGU9bnVsbD09PShyPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0KSl8fHZv''@;'; put 'put ''aWQgMD09PXI/dm9pZCAwOnIuY29uZGl0aW9ucykmJnZvaWQgMCE9PWU/ZTpbXX1nZXRPcGVyYXRpb24odCl7dmFyIGU7cmV0dXJuIG51bGw9PT0oZT10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm9wZXJhdGlvbn1nZXRGaWx0''@;'; put 'put ''ZXJlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcCh0PT57bGV0W2VdPXQ7cmV0dXJuIGV9KX1nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmluZGV4T2YodCl9ZXhwb3J0QWxsQ29u''@;'; put 'put ''ZGl0aW9ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkucmVkdWNlKCh0LGUpPT57bGV0W3Ise29wZXJhdGlvbjppLGNvbmRpdGlvbnM6YX1dPWU7cmV0dXJuIHQucHVzaCh7Y29sdW1uOnIsb3BlcmF0aW9uOmksY29uZGl0aW9uczphLm1hcChjPT57bGV0e25h''@;'; put 'put ''bWU6bSxhcmdzOkN9PWM7cmV0dXJue25hbWU6bSxhcmdzOlsuLi5DXX19KX0pLHR9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKHQpe3RoaXMuY2xlYW4oKSx0LmZvckVhY2goZT0+e2UuY29uZGl0aW9ucy5mb3JFYWNoKHI9PnRoaXMuYWRkQ29uZGl0aW9uKGUuY29sdW1uLHIpKX0pfXJlbW92''@;'; put 'put ''ZUNvbmRpdGlvbnModCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSZW1vdmUiLHQpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyVmFsdWUodCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclJlbW92ZSIsdCl9Y2xlYW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNsZWFuIiks''@;'; put 'put ''dGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xlYW4iKX1oYXNDb25kaXRpb25zKHQsZSl7Y29uc3Qgcj10aGlzLmdldENvbmRpdGlvbnModCk7cmV0dXJuIGU/ci5zb21lKGk9PmkubmFtZT09PWUpOnIubGVuZ3RoPjB9ZGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuaXNNYXBSZWdpc3RyYWJsZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChKOWUpLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW51bGwsdGhpcy5jbGVhckxvY2FsSG9va3MoKX19cGwoUTllLCQwKTtjb25zdCBldmU9UTllO2Z1bmN0aW9uIHR2ZShuLHQsZSl7cmV0''@;'; put 'put ''dXJuKHQ9ZnVuY3Rpb24gQjZ0KG4pe3ZhciB0PWZ1bmN0aW9uIGo2dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6''@;'; put 'put ''dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgbnZlPWNsYXNzIHo2dHtjb25zdHJ1Y3Rvcih0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KCk9PltdO3R2ZSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLHR2ZSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249dCx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5''@;'; put 'put ''PWV9ZmlsdGVyKCl7bGV0IHQ9W107cmV0dXJuIFluKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwoZSxyKT0+e2xldCBpPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoZSk7ciYmKGk9dGhpcy5fZ2V0SW50ZXJzZWN0RGF0YShpLHQpKSx0PXRoaXMuZmlsdGVy''@;'; put 'put ''QnlDb2x1bW4oZSxpKX0pLHR9ZmlsdGVyQnlDb2x1bW4odCl7Y29uc3Qgcj1bXTtyZXR1cm4gWW4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGk9Pnt2b2lkIDAhPT1pJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNNYXRjaChp''@;'; put 'put ''LHQpJiZyLnB1c2goaSl9KSxyfV9nZXRJbnRlcnNlY3REYXRhKHQsZSl7Y29uc3Qgcj1bXTtyZXR1cm4gWW4oZSxpPT57Y29uc3QgYT1pLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PXRbYV0mJihyW2FdPXRbYV0pfSkscn19O2Z1bmN0aW9uIGh5KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBa''@;'; put 'put ''NnQobil7dmFyIHQ9ZnVuY3Rpb24gWTZ0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJu''@;'; put 'put ''IHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiB3cmUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBUQj1uZXcgV2Vha1NldDtjbGFzcyBydmV7Y29uc3RydWN0b3IodCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1syXT9hcmd1bWVudHNbMl06KCk9PltdOyhmdW5jdGlvbiBVNnQobix0KXsoZnVuY3Rpb24gVzZ0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0p''@;'; put 'put ''KG4sdCksdC5hZGQobil9KSh0aGlzLFRCKSxoeSh0aGlzLCJob3QiLHZvaWQgMCksaHkodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxoeSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSxoeSh0aGlzLCJjaGFuZ2VzIixbXSksaHkodGhpcywiZ3JvdXBpbmciLCEx''@;'; put 'put ''KSxoeSh0aGlzLCJsYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbiIsLTEpLGh5KHRoaXMsImxhdGVzdE9yZGVyU3RhY2siLFtdKSx0aGlzLmhvdD10LHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1lLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9cix0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRk''@;'; put 'put ''TG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGk9PndyZShUQix0aGlzLEc2dCkuY2FsbCh0aGlzLGkpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclJlbW92ZSIsaT0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihpKSksdGhpcy5jb25kaXRpb25Db2xsZWN0''@;'; put 'put ''aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGk9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUNsZWFuIiwoKT0+d3JlKFRCLHRoaXMsJDZ0KS5jYWxsKHRoaXMpKSx0aGlzLmNvbmRpdGlvbkNvbGxl''@;'; put 'put ''Y3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckNsZWFuIiwoKT0+d3JlKFRCLHRoaXMsSzZ0KS5jYWxsKHRoaXMpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZsdXNoKCl7dGhpcy5ncm91cGluZz0hMSxZbih0aGlzLmNoYW5nZXMsdD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1''@;'; put 'put ''bW4odCl9KSx0aGlzLmNoYW5nZXMubGVuZ3RoPTB9dXBkYXRlU3RhdGVzQXRDb2x1bW4odCxlKXt2YXIgcj10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9PT10aGlzLmNoYW5nZXMuaW5kZXhPZih0KSYmdGhpcy5jaGFuZ2VzLnB1c2godCkpO2NvbnN0IGk9dGhpcy5jb25k''@;'; put 'put ''aXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtsZXQgYT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbih0KTstMT09PWEmJihhPXRoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO2NvbnN0IGM9aS5zbGljZSgwLGEpLG09aS5z''@;'; put 'put ''bGljZShhKTttLmxlbmd0aCYmbVswXS5jb2x1bW49PT10JiZtLnNoaWZ0KCk7Y29uc3QgQz1nNWUoZnVuY3Rpb24oWSxKKXtsZXQgY2U9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO2NvbnN0IGZlPW5ldyBldmUoci5ob3QsITEpLEFl''@;'; put 'put ''PVtdLmNvbmNhdChZLGNlKTtmZS5pbXBvcnRBbGxDb25kaXRpb25zKEFlKTtjb25zdCBIZT1yLmNvbHVtbkRhdGFGYWN0b3J5KEopO2xldCBYZTtYZT1mZS5pc0VtcHR5KCk/SGU6bmV3IG52ZShmZSxkdD0+ci5jb2x1bW5EYXRhRmFjdG9yeShkdCkpLmZpbHRlcigpLFhlPVdzKFhlLGR0PT5k''@;'; put 'put ''dC5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgcnQ9X0QoWGUpO3JldHVybiBmZS5kZXN0cm95KCksJDYoSGUsZHQ9PnJ0KGR0Lm1ldGEudmlzdWFsUm93KSl9KShjKSxQPVtdLmNvbmNhdCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29uZGl0aW9ucyh0KSk7dGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJ1cGRhdGUiLHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29sdW1uOnQsY29uZGl0aW9uczpQfSxkZXBlbmRlbnRDb25kaXRpb25TdGFja3M6bSxmaWx0ZXJlZFJvd3NGYWN0b3J5OkMsY29uZGl0aW9uQXJnc0NoYW5nZTplfSl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksYXMo''@;'; put 'put ''dGhpcywodCxlKT0+e3RoaXNbZV09bnVsbH0pfX1mdW5jdGlvbiBHNnQobil7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihuKX1mdW5jdGlvbiAkNnQoKXt0aGlzLmxhdGVzdE9yZGVyU3RhY2s9''@;'; put 'put ''dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfWZ1bmN0aW9uIEs2dCgpe1luKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxuPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihuKX0pfXBsKHJ2ZSwkMCk7Y29uc3QgWDZ0PXJ2ZSxFRD0iZmlsdGVycyI7ZnVuY3Rp''@;'; put 'put ''b24gQ3JlKG4sdCxlKXtpdmUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIGl2ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gVEQobix0''@;'; put 'put ''LGUpe3JldHVybih0PWZ1bmN0aW9uIGU4dChuKXt2YXIgdD1mdW5jdGlvbiB0OHQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWZ1bmN0aW9uIEFCKG4sdCxlKXtyZXR1cm4gbi5zZXQoVmgobix0KSxlKSxlfWZ1bmN0aW9uIG4z''@;'; put 'put ''KG4sdCl7cmV0dXJuIG4uZ2V0KFZoKG4sdCkpfWZ1bmN0aW9uIFZoKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNl''@;'; put 'put ''bnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBTcmU9ImZpbHRlcnMiLGF2ZT1TcmU7dmFyIEw1PW5ldyBXZWFrTWFwLE1yZT1uZXcgV2Vha01hcCxmeT1uZXcgV2Vha01hcCxCMj1uZXcgV2Vha1NldDtjbGFzcyByOHQgZXh0ZW5kcyBNc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4g''@;'; put 'put ''U3JlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI1MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57c2VhcmNoTW9kZToic2hvdyJ9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURBVE9SUygpe3JldHVybntzZWFyY2hNb2RlOnQ9PiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgdCYmWyJzaG93IiwiYXBwbHkiXS5pbmNsdWRlcyh0KX19c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19Y29uc3RydWN0b3IodCl7dmFyIGU7c3VwZXIodCks''@;'; put 'put ''ZT10aGlzLGZ1bmN0aW9uIFE2dChuLHQpe2l2ZShuLHQpLHQuYWRkKG4pfSh0aGlzLEIyKSxURCh0aGlzLCJkcm9wZG93bk1lbnVQbHVnaW4iLG51bGwpLFREKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLG51bGwpLFREKHRoaXMsImNvbmRpdGlvblVwZGF0ZU9ic2VydmVyIixudWxsKSxU''@;'; put 'put ''RCh0aGlzLCJjb21wb25lbnRzIixuZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24iLG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJfYnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2FjdGlvbl9iYXIiLG51bGxd''@;'; put 'put ''XSkpLFREKHRoaXMsImZpbHRlcnNSb3dzTWFwIixudWxsKSxDcmUodGhpcyxMNSx2b2lkIDApLENyZSh0aGlzLE1yZSxuZXcgV2Vha1NldCksQ3JlKHRoaXMsZnksW10pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBWaChCMixlLHU4dCkuY2FsbChlLC4uLmkpfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1NyZV19ZW5hYmxlUGx1Z2luKCl7dmFyIHQ9dGhpcztpZih0''@;'; put 'put ''aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuZmlsdGVyc1Jvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLG5ldyBiayksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJkcm9wZG93bk1lbnUiKTtjb25zdCBl''@;'; put 'put ''PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LHI9ZSYmZS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnQsaT1tPT4obS5hZGRMb2NhbEhvb2soImFjY2VwdCIsKCk9PlZoKEIyLHRoaXMsb3ZlKS5jYWxsKHRoaXMsImFjY2VwdCIpKSxtLmFkZExvY2Fs''@;'; put 'put ''SG9vaygiY2FuY2VsIiwoKT0+VmgoQjIsdGhpcyxvdmUpLmNhbGwodGhpcywiY2FuY2VsIikpLG0uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLEM9PlZoKEIyLHRoaXMsYzh0KS5jYWxsKHRoaXMsbSxDKSksbSksYT0oKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShSZWUpfTpgLGM9''@;'; put 'put ''KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoTGVlKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBtPW5ldyBocmUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uIixuYW1lOmEsYWRkU2VwYXJhdG9yOiEx''@;'; put 'put ''LG1lbnVDb250YWluZXI6cn0pO20uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+VmgoQjIsdGhpcyxzdmUpLmNhbGwodGhpcykpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24iLGkobSkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRv''@;'; put 'put ''cnMiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX29wZXJhdG9ycyIsbmV3IGM2dCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9vcGVyYXRvcnMiLG5hbWU6Ik9wZXJhdG9ycyJ9KSksIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikpe2NvbnN0IG09bmV3IGhy''@;'; put 'put ''ZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24yIixuYW1lOiIiLGFkZFNlcGFyYXRvcjohMCxtZW51Q29udGFpbmVyOnJ9KTttLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PlZoKEIyLHRoaXMsc3ZlKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0''@;'; put 'put ''ZXJfYnlfY29uZGl0aW9uMiIsaShtKSl9aWYoIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpKXtjb25zdCBtPXRoaXMuZ2V0U2V0dGluZygic2VhcmNoTW9kZSIpO3RoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV92YWx1ZSIsaShuZXcgQTZ0KHRoaXMuaG90LHtp''@;'; put 'put ''ZDoiZmlsdGVyX2J5X3ZhbHVlIixuYW1lOmMsc2VhcmNoTW9kZTptfSkpKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIsaShuZXcgeEQodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYWN0aW9u''@;'; put 'put ''X2JhciIsbmFtZToiQWN0aW9uIGJhciJ9KSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbnx8KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1uZXcgZXZlKHRoaXMuaG90KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcnx8KHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bmV3IFg2''@;'; put 'put ''dCh0aGlzLmhvdCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sbT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4obSkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLG09PlZoKEIyLHRoaXMsZDh0KS5jYWxsKHRoaXMsbSkpKSx0aGlzLmNvbXBvbmVu''@;'; put 'put ''dHMuZm9yRWFjaChtPT5tLnNob3coKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgbT1hcmd1bWVudHMubGVuZ3RoLEM9bmV3IEFycmF5KG0pLFA9MDtQPG07UCsrKUNbUF09YXJndW1lbnRzW1BdO3JldHVybiBWaChC''@;'; put 'put ''Mix0LGw4dCkuY2FsbCh0LC4uLkMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwoKT0+VmgoQjIsdGhpcyxzOHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwoKT0+VmgoQjIsdGhpcyxhOHQpLmNhbGwodGhpcykpLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwoKT0+VmgoQjIsdGhpcyxvOHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLG09PlZoKEIyLHRoaXMsaTh0KS5jYWxsKHRoaXMsbSkpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51JiZ0''@;'; put 'put ''aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmKHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmRpc2FibGVQbHVnaW4oKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVQbHVnaW4oKSksIW4zKEw1LHRoaXMpJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVkKXtjb25zdCBtPVt7Zm9j''@;'; put 'put ''dXM6KCk9Pntjb25zdCBQPW4zKEw1LHRoaXMpLmdldE1lbnUoKSxZPVAuZ2V0TmF2aWdhdG9yKCksSj1uMyhMNSx0aGlzKS5nZXRMYXN0TWVudVBhZ2UoKTtQLmZvY3VzKCksSj4wP1kuc2V0Q3VycmVudFBhZ2UoSik6WS50b0ZpcnN0SXRlbSgpfX0sLi4uQXJyYXkuZnJvbSh0aGlzLmNvbXBv''@;'; put 'put ''bmVudHMpLm1hcChQPT57bGV0WyxZXT1QO3JldHVybiBZLmdldEVsZW1lbnRzKCl9KS5mbGF0KCldO0FCKEw1LHRoaXMsZnVuY3Rpb24gSjZ0KG4sdCl7bGV0IHIsZT0tMTtjb25zdCBpPWZ1bmN0aW9uIHE2dChuKXtyZXR1cm4gWTdlKHtpbml0aWFsUGFnZTowLHNpemU6KCk9Pm4ubGVuZ3Ro''@;'; put 'put ''LG9uSXRlbVNlbGVjdDooZSxyKT0+e2NvbnN0IGk9bltlXTtyZXR1cm4gaSBpbnN0YW5jZW9mIFNEP3I6IShpLmVsZW1lbnQmJiFlOChpLmVsZW1lbnQpKSYmdm9pZCBpLmZvY3VzKCl9fSl9KHQpLGE9Sj0+KCk9PntyLmlzT3BlbmVkKCkmJnIuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCku''@;'; put 'put ''bGlzdGVuKEVEKSxpLnNldEN1cnJlbnRQYWdlKHQuaW5kZXhPZihKKSl9O2Z1bmN0aW9uIGMoSil7Y29uc3QgY2U9ci5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKSxmZT1KLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpO2kuY2xlYXIoKSxmZS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlz''@;'; put 'put ''OltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDpjZS5nZXRDb250ZXh0KEVEKSxjYWxsYmFjazooKT0+e0ouaXNTdWJNZW51KCkmJkouY2xvc2UoKSxjZS5saXN0ZW4oRUQpfX1dKSwhSi5pc1N1Yk1lbnUoKSYmY2UuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpb''@;'; put 'put ''WyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOkFlPT57Y29uc3QgSGU9ci5nZXROYXZpZ2F0b3IoKTtIZS5nZXRDdXJyZW50UGFnZSgpPi0xJiYoZT1IZS5nZXRDdXJyZW50UGFnZSgpKSxIZS5jbGVhcigpLEFlLnNoaWZ0S2V5P2kudG9QcmV2aW91c0l0ZW0oKTppLnRvTmV4dEl0''@;'; put 'put ''ZW0oKX19LHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e3IuY2xvc2UoKX19LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpBZT0+e2NvbnN0IEhlPXRbaS5nZXRDdXJyZW50UGFnZSgpXTtIZSBpbnN0YW5jZW9mIG1EJiYoSGUu''@;'; put 'put ''b3Blbk9wdGlvbnMoKSxBZS5wcmV2ZW50RGVmYXVsdCgpKSxIZSBpbnN0YW5jZW9mIHdEJiYoSGUuYWN0aXZhdGUoKSxBZS5wcmV2ZW50RGVmYXVsdCgpKSxIZSBpbnN0YW5jZW9mIFYyfHxBZS5wcmV2ZW50RGVmYXVsdCgpfX1dLEVEKX1mdW5jdGlvbiBDKEope0ouYWRkTG9jYWxIb29rKCJh''@;'; put 'put ''ZnRlclNlbGVjdGlvbkNoYW5nZSIsY2U9PntjZS5rZXkuc3RhcnRzV2l0aCgiZmlsdGVyXyIpfHxpLmNsZWFyKCl9KSxKLmFkZExvY2FsSG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsYyksSi5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsYykscj1KfXJldHVybiB0LmZvckVhY2goSj0+e0ogaW5z''@;'; put 'put ''dGFuY2VvZiBWMiYmKEouYWRkTG9jYWxIb29rKCJjbGljayIsYShKKSksSi5hZGRMb2NhbEhvb2soImZvY3VzIixhKEopKSxKLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsYShKKSkpfSksQyhuKSx7Li4uaSxsaXN0ZW46ZnVuY3Rpb24gbSgpe3IuZm9jdXMoKSxyLmdldEtleWJvYXJkU2hv''@;'; put 'put ''cnRjdXRzQ3RybCgpLmxpc3RlbihFRCl9LHNldE1lbnU6QyxnZXRNZW51OmZ1bmN0aW9uIFAoKXtyZXR1cm4gcn0sZ2V0TGFzdE1lbnVQYWdlOmZ1bmN0aW9uIFkoKXtyZXR1cm4gZX19fSh0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LG0pKTtjb25zdCBDPVA9PntuMyhMNSx0aGlzKS5s''@;'; put 'put ''aXN0ZW4oKSxQLnByZXZlbnREZWZhdWx0KCksa3YoUC5rZXlDb2RlLCJUQUIiKSYmKFAuc2hpZnRLZXk/bjMoTDUsdGhpcykudG9QcmV2aW91c0l0ZW0oKTpuMyhMNSx0aGlzKS50b05leHRJdGVtKCkpfTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5hZGRMb2NhbEhv''@;'; put 'put ''b2soImxpc3RUYWJLZXlkb3duIixDKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuYWRkTG9jYWxIb29rKCJzZWxlY3RUYWJLZXlkb3duIixDKX10aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhp''@;'; put 'put ''cy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIHQ7dGhpcy5lbmFibGVkJiYobnVsbCE9PSh0PXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAwIT09dCYmdC5lbmFibGVkJiZ0aGlzLmRyb3Bk''@;'; put 'put ''b3duTWVudVBsdWdpbi5tZW51LmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChlLHIpPT57ZS5kZXN0cm95KCksdGhpcy5jb21wb25lbnRzLnNldChyLG51bGwpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvbkNvbGxl''@;'; put 'put ''Y3Rpb249bnVsbCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigp''@;'; put 'put ''LmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJBbHQiLCJBIl1dLHN0b3BQcm9wYWdhdGlvbjohMCxjYWxsYmFjazooKT0+e2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKTt0aGlzLmNsZWFyQ29uZGl0aW9ucygpLHRoaXMuZmlsdGVyKCksdCYmdGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0Q2VsbHModCl9LGdyb3VwOmF2ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChhdmUpfWFkZENvbmRpdGlvbih0LGUscil7bGV0IGk9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOkU4O2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0KTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGEse2NvbW1hbmQ6e2tleTplfSxhcmdzOnJ9LGkpfXJlbW92ZUNvbmRpdGlv''@;'; put 'put ''bnModCl7Y29uc3QgZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHQpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGUpfWNsZWFyQ29uZGl0aW9ucyh0KXtpZih2b2lkIDA9PT10KXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5jbGVhbigpO2Vsc2V7Y29uc3Qg''@;'; put 'put ''ZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHQpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGUpfX1pbXBvcnRDb25kaXRpb25zKHQpe3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKHQpfWV4cG9ydENvbmRpdGlvbnMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKX1maWx0ZXIoKXtjb25zdHtuYXZpZ2FibGVIZWFkZXJzOnR9PXRoaXMuaG90LmdldFNldHRpbmdzKCksZT10aGlzLl9jcmVhdGVEYXRhRmlsdGVyKCkscj0hdGhpcy5jb25kaXRpb25Db2xsZWN0aW9u''@;'; put 'put ''LmlzRW1wdHkoKTtsZXQgaT1bXTtjb25zdCBhPXRoaXMuZXhwb3J0Q29uZGl0aW9ucygpLGM9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUZpbHRlciIsYSxuMyhmeSx0aGlzKSk7aWYoITEhPT1jJiZyKXtjb25zdCBtPVtdO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5maWx0''@;'; put 'put ''ZXJzUm93c01hcC5jbGVhcigpLGk9V3MoZS5maWx0ZXIoKSxQPT5QLm1ldGEudmlzdWFsUm93KTtjb25zdCBDPV9EKGkpO2VvKHRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTEsUD0+e0MoUCl8fG0ucHVzaChQKX0pLFluKG0sUD0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuc2V0VmFsdWVBdElu''@;'; put 'put ''ZGV4KFAsITApfSl9LCEwKSwhdCYmIWkubGVuZ3RoJiZ0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSxBQihmeSx0aGlzLHRoaXMuZXhwb3J0Q29uZGl0aW9ucygpKX1lbHNlITE9PT1jfHxyP3RoaXMuaW1wb3J0Q29uZGl0aW9ucyhuMyhmeSx0aGlzKSk6KEFCKGZ5LHRoaXMsdGhpcy5leHBvcnRD''@;'; put 'put ''b25kaXRpb25zKCkpLHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmdGhpcy5ob3Quc2VsZWN0Q2VsbCh0Py0xOjAsdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodC5jb2wpLCExIT09YyYmKHRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlckZpbHRlciIsYSksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgdDtjb25zdCBlPW51bGw9PT0odD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2''@;'; put 'put ''b2lkIDA9PT10P3ZvaWQgMDp0LmhpZ2hsaWdodDtyZXR1cm4gZT97dmlzdWFsSW5kZXg6ZS5jb2wscGh5c2ljYWxJbmRleDp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGUuY29sKX06bnVsbH1nZXREYXRhTWFwQXRDb2x1bW4odCl7Y29uc3QgZT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbih0''@;'; put 'put ''KSxyPVtdO3JldHVybiBZbih0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDb2woZSksKGksYSk9Pnt2YXIgYztjb25zdHtyb3c6bSxjb2w6Qyx2aXN1YWxDb2w6UCx2aXN1YWxSb3c6WSx0eXBlOkosaW5zdGFuY2U6Y2UsZGF0ZUZvcm1hdDpmZSxsb2NhbGU6QWV9PXRoaXMuaG90LmdldENlbGxN''@;'; put 'put ''ZXRhKGEsZSksSGU9bnVsbCE9PShjPXRoaXMuaG90LmdldERhdGFBdENlbGwodGhpcy5ob3QudG9WaXN1YWxSb3coYSksZSkpJiZ2b2lkIDAhPT1jP2M6aTtyLnB1c2goe21ldGE6e3JvdzptLGNvbDpDLHZpc3VhbENvbDpQLHZpc3VhbFJvdzpZLHR5cGU6SixpbnN0YW5jZTpjZSxkYXRlRm9y''@;'; put 'put ''bWF0OmZlLGxvY2FsZTpBZX0sdmFsdWU6bXJlKEhlKX0pfSkscn11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbih0KXtjb25zdCByPXZyZSh0aGlzLmhvdC5nZXREYXRhQXRDb2wodCkpO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIudXBkYXRlU3RhdGVzQXRDb2x1bW4odCxyKX1y''@;'; put 'put ''ZXN0b3JlQ29tcG9uZW50cyh0KXt2YXIgZTtjb25zdCByPW51bGw9PT0oZT10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnBoeXNpY2FsSW5kZXg7dC5mb3JFYWNoKGk9PntpLmlzSGlkZGVuKCl8fGkucmVzdG9yZVN0YXRlKHIpfSksdGhpcy51cGRhdGVE''@;'; put 'put ''ZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpfWdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHModCxlLHIsaSl7bGV0IGE9dDtyZXR1cm4gYT09PU1CJiZlLmNvbW1hbmQua2V5IT09WDAmJnIuY29tbWFuZC5rZXkhPT1YMCYmaS5jb21tYW5kLmtleSE9PVgwP2E9cHJlOmkuY29tbWFu''@;'; put 'put ''ZC5rZXkhPT1YMCYmKGUuY29tbWFuZC5rZXk9PT1YMHx8ci5jb21tYW5kLmtleT09PVgwKSYmKGE9RTgpLGF9c2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLnNldExpc3RlbmluZygpfXVwZGF0ZURlcGVu''@;'; put 'put ''ZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl7Y29uc3QgdD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikse2NvbW1hbmQ6ZX09dC5nZXRTdGF0ZSgpLHI9W3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRz''@;'; put 'put ''LmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTtlLnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5yKTp0aGlzLmhpZGVDb21wb25lbnRzKC4uLnIpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5ldyBudmUoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixlPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihlKSl9Z2V0SW5kZXhlc09mQ29tcG9uZW50cygpe2NvbnN0IHQ9W107aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybiB0O2NvbnN0IGU9dGhpcy5kcm9w''@;'; put 'put ''ZG93bk1lbnVQbHVnaW4ubWVudTtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gWW4oaSxjPT57WW4oZS5tZW51SXRlbXMsKG0sQyk9PnttLmtleT09PWMuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCku''@;'; put 'put ''a2V5JiZ0LnB1c2goQyl9KX0pLHR9Y2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm47Y29uc3Qgcj10aGlzLmRy''@;'; put 'put ''b3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUsaT1yLmdldFBsdWdpbigiaGlkZGVuUm93cyIpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KGE+MT9hLTE6MCksbT0xO208YTttKyspY1ttLTFdPWFyZ3VtZW50c1ttXTtjb25zdCBDPXRoaXMuZ2V0SW5kZXhlc09m''@;'; put 'put ''Q29tcG9uZW50cyguLi5jKTt0P2kuc2hvd1Jvd3MoQyk6aS5oaWRlUm93cyhDKSxyLnJlbmRlcigpfWhpZGVDb21wb25lbnRzKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07dGhpcy5jaGFuZ2VDb21wb25l''@;'; put 'put ''bnRzVmlzaWJpbGl0eSghMSwuLi5lKX1zaG93Q29tcG9uZW50cygpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITAsLi4uZSl9ZGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuZW5hYmxlZCYmKHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKCh0LGUpPT57bnVsbCE9PXQmJih0LmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGUsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRl''@;'; put 'put ''c3Ryb3koKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaTh0KG4pe24mJlluKG4sdD0+e2NvbnN0WyxlXT10LHI9dGhpcy5ob3QucHJvcFRvQ29sKGUpO3RoaXMuY29uZGl0aW9uQ29sbGVj''@;'; put 'put ''dGlvbi5oYXNDb25kaXRpb25zKHIpJiZ0aGlzLnVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKHIpfSl9ZnVuY3Rpb24gYTh0KCl7Y29uc3Qgbj10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O3RoaXMucmVzdG9yZUNvbXBvbmVudHMoQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMu''@;'; put 'put ''dmFsdWVzKCkpKSxuLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCl9ZnVuY3Rpb24gbzh0KCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0''@;'; put 'put ''aW9uMiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKX1mdW5jdGlvbiBzOHQoKXtjb25zdCBuPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7bjMoTXJlLHRoaXMpLmhhcyhuKXx8bjMoTDUsdGhpcykuc2V0TWVudShuKSxuMyhNcmUsdGhpcykuYWRkKG4pfWZ1bmN0aW9u''@;'; put 'put ''IGw4dChuKXtuLml0ZW1zLnB1c2goe25hbWU6eXN9KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCh0PT57bi5pdGVtcy5wdXNoKHQuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9ZnVuY3Rpb24gb3ZlKG4pe3ZhciB0O2lmKCJhY2NlcHQiPT09bil7Y29uc3Qgcj10aGlzLmdldFNlbGVjdGVk''@;'; put 'put ''Q29sdW1uKCk7dmFyIGU7aWYobnVsbD09PXIpcmV0dXJuIHZvaWQobnVsbD09PShlPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09ZXx8ZS5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4Oml9PXIsYT10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9u''@;'; put 'put ''IikuZ2V0U3RhdGUoKSxjPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUoKSxtPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCksQz10aGlzLmdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHModGhpcy5j''@;'; put 'put ''b21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLmdldEFjdGl2ZU9wZXJhdGlvbklkKCksYSxjLG0pO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZ3JvdXBDaGFuZ2VzKCk7bGV0IFA9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oaSk7''@;'; put 'put ''LTE9PT1QJiYoUD12b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGkpLGEuY29tbWFuZC5rZXkhPT1YMCYmKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaSxhLEMsUCksYy5jb21tYW5kLmtleSE9PVgwJiZ0aGlzLmNvbmRpdGlv''@;'; put 'put ''bkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGksYyxDLFApKSxtLmNvbW1hbmQua2V5IT09WDAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaSxtLEMsUCksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5mbHVzaCgpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKFk9''@;'; put 'put ''Plkuc2F2ZVN0YXRlKGkpKSx0aGlzLmZpbHRlcigpfW51bGw9PT0odD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PXR8fHQuY2xvc2UoKX1mdW5jdGlvbiBjOHQobix0KXtjb25zdCBlPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7dGhpcy51cGRhdGVEZXBlbmRlbnRD''@;'; put 'put ''b21wb25lbnRzVmlzaWJpbGl0eSgpLG4uY29uc3RydWN0b3I9PT1ocmUmJiF0LmlucHV0c0NvdW50JiZ0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpLGUudXBkYXRlTWVudURpbWVuc2lvbnMoKX1mdW5jdGlvbiBzdmUoKXt0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpfWZ1''@;'; put 'put ''bmN0aW9uIHU4dChuLHQsZSl7Y29uc3Qgcj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKG4pO3RoaXMuZW5hYmxlZCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMocikmJmU9PT10aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpLTE/dGkodCwiaHRG''@;'; put 'put ''aWx0ZXJzQWN0aXZlIik6SGEodCwiaHRGaWx0ZXJzQWN0aXZlIil9ZnVuY3Rpb24gZDh0KG4pe3ZhciB0O2lmKG51bGw9PT0odD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PXR8fCF0LmVuYWJsZWQpcmV0dXJuO2NvbnN0e2VkaXRlZENvbmRpdGlvblN0YWNrOntjb25kaXRp''@;'; put 'put ''b25zOmUsY29sdW1uOnJ9LGNvbmRpdGlvbkFyZ3NDaGFuZ2U6aX09bjtBcnJheS5pc0FycmF5KGkpJiZBQihmeSx0aGlzLG4zKGZ5LHRoaXMpLm1hcChtPT4obS5jb2x1bW49PT1yJiZlLmxlbmd0aD4wJiZtLmNvbmRpdGlvbnMuZm9yRWFjaChDPT57ImJ5X3ZhbHVlIj09PUMubmFtZSYmKEMu''@;'; put 'put ''YXJncz1bWy4uLmldXSl9KSxtKSkpO2NvbnN0IGE9ZS5maWx0ZXIobT0+bS5uYW1lPT09ZHkpLGM9ZS5maWx0ZXIobT0+bS5uYW1lIT09ZHkpO2lmKGEubGVuZ3RoPj0yfHxjLmxlbmd0aD49MylvcyhlbGBUaGUgZmlsdGVyIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQgcHJvcGVybHks''@;'; put 'put ''IGJ1dCBjb3VsZG7igJl0IGJlIGRpc3BsYXllZCB2aXN1YWxseS5ceDIwCiAgICAgICAgVGhlIG92ZXJhbGwgYW1vdW50IG9mIGNvbmRpdGlvbnMgZXhjZWVkIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSBkcm9wZG93biBtZW51Llx4MjAKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUg''@;'; put 'put ''ZG9jdW1lbnRhdGlvbi5gKTtlbHNle2NvbnN0IG09dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldE9wZXJhdGlvbihyKTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikudXBkYXRlU3RhdGUoY1swXSxyKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlf''@;'; put 'put ''Y29uZGl0aW9uMiIpLnVwZGF0ZVN0YXRlKGNbMV0sciksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLnVwZGF0ZVN0YXRlKG0sciksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikudXBkYXRlU3RhdGUobil9fWNvbnN0IGx2ZT0iaW50ZXJuYWwt''@;'; put 'put ''dXNlLWluLWhhbmRzb250YWJsZSIseHJlPXtsaWNlbnNlS2V5Omx2ZSx1c2VBcnJheUFyaXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJvOiEwLHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJlY2lzaW9uUm91bmRpbmc6MTQsc21hcnRS''@;'; put 'put ''b3VuZGluZzohMCxsZWFwWWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZIl0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1tOnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxs''@;'; put 'put ''OiEwLHVzZVJlZ3VsYXJFeHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rpb25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGxhbmd1YWdlOiJlbkdCIn07ZnVuY3Rpb24gY3ZlKG4pe3ZhciB0O3JldHVybnttYXhDb2x1''@;'; put 'put ''bW5zOm4ubWF4Q29sdW1ucyxtYXhSb3dzOm4ubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KHQ9bltvZF0pfHx2b2lkIDA9PT10fHxudWxsPT09KHQ9dC5sYW5ndWFnZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGFuZ0NvZGV9fWZ1bmN0aW9uIHV2ZShuKXtyZXR1cm4gT2JqZWN0LmtleXMobiku''@;'; put 'put ''cmVkdWNlKCh0LGUpPT4oImh5cGVyZm9ybXVsYSIhPT1lJiYodFtlXT1uW2VdKSx0KSx7fSl9ZnVuY3Rpb24ga0IoKXtjb25zdCBuPSJlbmdpbmVfcmVsYXRpb25zaGlwIix0PVdmKG9kKTtyZXR1cm4gdC5oYXNJdGVtKG4pfHx0LnJlZ2lzdGVyKG4sbmV3IE1hcCksdC5nZXRJdGVtKG4pfWZ1''@;'; put 'put ''bmN0aW9uIEVyZSgpe2NvbnN0IG49InNoYXJlZF9lbmdpbmVfdXNhZ2UiLHQ9V2Yob2QpO3JldHVybiB0Lmhhc0l0ZW0obil8fHQucmVnaXN0ZXIobixuZXcgTWFwKSx0LmdldEl0ZW0obil9ZnVuY3Rpb24gZHZlKG4pe3ZhciB0O2NvbnN0IGU9a0IoKSxyPTA9PT1lLnNpemU/W106QXJyYXku''@;'; put 'put ''ZnJvbShudWxsIT09KHQ9ZS5nZXQobikpJiZ2b2lkIDAhPT10P3Q6W10pO3JldHVybiBuZXcgTWFwKHIubWFwKGk9PltpLmdldFBsdWdpbigiZm9ybXVsYXMiKS5zaGVldElkLGldKSl9ZnVuY3Rpb24gaHZlKG4sdCl7aWYobil7Y29uc3QgZT1rQigpLHI9ZS5nZXQobiksaT1FcmUoKSxhPWku''@;'; put 'put ''Z2V0KG4pO3ImJnIuaW5jbHVkZXModCkmJihyLnNwbGljZShyLmluZGV4T2YodCksMSksMD09PXIubGVuZ3RoJiZlLmRlbGV0ZShuKSksYSYmYS5pbmNsdWRlcyh0Lmd1aWQpJiYoYS5zcGxpY2UoYS5pbmRleE9mKHQuZ3VpZCksMSksMD09PWEubGVuZ3RoJiYoaS5kZWxldGUobiksbi5kZXN0''@;'; put 'put ''cm95KCkpKX19Y29uc3QgZnZlPSJERC9NTS9ZWVlZIjtmdW5jdGlvbiBUcmUobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4mJiJkYXRlIj09PXR9ZnVuY3Rpb24gcHZlKG4sdCl7cmV0dXJuIHFzKG4sdCwhMCkuaXNWYWxpZCgpfWZ1bmN0aW9uIGd2ZShuLHQpe3JldHVybiBxcyhuLHQs''@;'; put 'put ''ITApLmZvcm1hdChmdmUpfWZ1bmN0aW9uIE04dChuLHQpe3JldHVybiBxcyhuLGZ2ZSwhMCkuZm9ybWF0KHQpfWZ1bmN0aW9uIG12ZShuLHQpe2NvbnN0IHI9bmV3IERhdGUoRGF0ZS5VVEMoMCwwLG4rLTEpKTtyZXR1cm4gcXMocikuZm9ybWF0KHQpfWZ1bmN0aW9uIEFyZShuLHQsZSl7Y29u''@;'; put 'put ''c3Qgcj1mdW5jdGlvbiBFOHQobix0KXtjb25zdCBlPVtdO3JldHVybiBuLmZvckVhY2gocj0+e2NvbnN0IGk9e2Zyb206cix0bzp0fTtlLmZvckVhY2goYT0+e2EuZnJvbT5pLmZyb20mJmEudG88PWkuZnJvbSYmYS5mcm9tPmEudG8mJihpLmZyb20rPTEpfSksaS5mcm9tPj10JiYodCs9MSks''@;'; put 'put ''ZS5wdXNoKGkpfSksZX0obixmdW5jdGlvbiB4OHQobix0LGUpe2NvbnN0IHI9QXJyYXkuZnJvbShBcnJheShlKS5rZXlzKCkpLmZpbHRlcihhPT4hMT09PW4uaW5jbHVkZXMoYSkpO3ZhciBpO3JldHVybiAwPT09dD9udWxsIT09KGk9clt0XSkmJnZvaWQgMCE9PWk/aTowOnJbdC0xXSsxfShu''@;'; put 'put ''LHQsZSkpO3JldHVybiBmdW5jdGlvbiBUOHQobil7cmV0dXJuIG4uZm9yRWFjaCgodCxlKT0+e24uc2xpY2UoZSsxKS5mb3JFYWNoKGk9PntpLmZyb20+dC5mcm9tJiZpLmZyb208aS50byYmKGkuZnJvbS09MSl9KX0pLG59KHIpfWZ1bmN0aW9uIHB5KG4sdCxlKXsoZnVuY3Rpb24gQTh0KG4s''@;'; put 'put ''dCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBUYyhuLHQpe3JldHVybiBuLmdldCh2dmUobix0KSl9ZnVuY3Rp''@;'; put 'put ''b24gazgobix0LGUpe3JldHVybiBuLnNldCh2dmUobix0KSxlKSxlfWZ1bmN0aW9uIHZ2ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEFEPW5ldyBXZWFrTWFwLEQ4PW5ldyBXZWFrTWFwLGoyPW5ldyBXZWFrTWFwLERCPW5ldyBXZWFrTWFwLGtyZT1uZXcgV2Vha01hcCxEcmU9bmV3IFdlYWtNYXAsSUI9bmV3IFdlYWtNYXA7Y29uc3QgeXZlPWNsYXNzIGs4dHtj''@;'; put 'put ''b25zdHJ1Y3Rvcih0LGUscil7cHkodGhpcyxBRCx2b2lkIDApLHB5KHRoaXMsRDgsdm9pZCAwKSxweSh0aGlzLGoyLHZvaWQgMCkscHkodGhpcyxEQixbXSkscHkodGhpcyxrcmUsW10pLHB5KHRoaXMsRHJlLHZvaWQgMCkscHkodGhpcyxJQixbXSksazgoQUQsdGhpcyx0KSxrOChEOCx0aGlz''@;'; put 'put ''LGUpLGs4KGoyLHRoaXMscil9c2V0UmVtb3ZlZEhmSW5kZXhlcyh0KXtyZXR1cm4gazgoSUIsdGhpcyx0Lm1hcChlPT57Y29uc3Qgcj1UYyhEOCx0aGlzKS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChlKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHIpfSkpLFRj''@;'; put 'put ''KElCLHRoaXMpfWdldFJlbW92ZWRIZkluZGV4ZXMoKXtyZXR1cm4gVGMoSUIsdGhpcyl9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh0KXtjb25zdCBlPVRjKEQ4LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHI9VGMoRDgsdGhpcykuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtyZXR1cm4g''@;'; put 'put ''ZS5pbmRleE9mKHJbdF0sdCl9c3luY01vdmVzKHQpe2NvbnN0IHI9YG1vdmUke2VkKFRjKEFELHRoaXMpKX1zYDtUYyhqMix0aGlzKS5nZXRFbmdpbmUoKS5iYXRjaCgoKT0+e3QuZm9yRWFjaChpPT57aS5mcm9tIT09aS50byYmaS5mcm9tKzEhPT1pLnRvJiZUYyhqMix0aGlzKS5nZXRFbmdp''@;'; put 'put ''bmUoKVtyXShUYyhqMix0aGlzKS5nZXRTaGVldElkKCksaS5mcm9tLDEsaS50byl9KX0pfXN0b3JlTW92ZXNJbmZvcm1hdGlvbih0LGUscil7ITEhPT1yJiYoazgoa3JlLHRoaXMsdC5tYXAoaT0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGkpKSksazgoRHJlLHRoaXMsdGhpcy5n''@;'; put 'put ''ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGUpKSl9Y2FsY3VsYXRlQW5kU3luY01vdmVzKHQsZSl7aWYoVGMoajIsdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKXx8ITE9PT10fHwhMT09PWUpcmV0dXJuO2NvbnN0IHI9QXJlKFRjKGtyZSx0aGlzKSxUYyhEcmUsdGhpcyksVGMoRDgsdGhp''@;'; put 'put ''cykuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpO251bGw9PT1UYyhqMix0aGlzKS5nZXRTaGVldElkKCk/VGMoajIsdGhpcykuZ2V0UG9zdHBvbmVBY3Rpb24oKCk9PnRoaXMuc3luY01vdmVzKHIpKTp0aGlzLnN5bmNNb3ZlcyhyKX1nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpe2NvbnN0IHQ9''@;'; put 'put ''YHNldCR7ZWQoVGMoQUQsdGhpcykpfU9yZGVyYDtyZXR1cm4gZT0+e2lmKFRjKGoyLHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpcmV0dXJuO2NvbnN0IHI9VGMoRDgsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7aWYoInVwZGF0ZSI9PT1lJiZyLmxlbmd0aD4wKXtjb25zdCBpPVRj''@;'; put 'put ''KERCLHRoaXMpLm1hcChDPT5yLmluZGV4T2YoQykpLGE9VGMoajIsdGhpcykuZ2V0RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKFRjKGoyLHRoaXMpLmdldFNoZWV0SWQoKSk7bGV0IGM7Yz0icm93Ij09PVRjKEFELHRoaXMpP2EuaGVpZ2h0OmEud2lkdGg7Zm9yKGxldCBDPWkubGVuZ3Ro''@;'; put 'put ''O0M8YztDKz0xKWkucHVzaChDKTtUYyhqMix0aGlzKS5nZXRFbmdpbmUoKVt0XShUYyhqMix0aGlzKS5nZXRTaGVldElkKCksaSl9azgoREIsdGhpcyxyKX19aW5pdCgpe2s4KERCLHRoaXMsVGMoRDgsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfX07ZnVuY3Rpb24gZ3kobix0LGUpeyhm''@;'; put 'put ''dW5jdGlvbiBEOHQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIE81KG4sdCl7cmV0dXJuIG4uZ2V0KF92''@;'; put 'put ''ZShuLHQpKX1mdW5jdGlvbiBteShuLHQsZSl7cmV0dXJuIG4uc2V0KF92ZShuLHQpLGUpLGV9ZnVuY3Rpb24gX3ZlKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQ''@;'; put 'put ''cml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUkI9bmV3IFdlYWtNYXAsTEI9bmV3IFdlYWtNYXAsSXJlPW5ldyBXZWFrTWFwLFJyZT1uZXcgV2Vha01hcCxMcmU9bmV3IFdlYWtNYXAsT3JlPW5ldyBXZWFrTWFwLFByZT1uZXcgV2Vha01hcDtjb25z''@;'; put 'put ''dCBSOHQ9Y2xhc3MgSTh0e2NvbnN0cnVjdG9yKHQsZSxyKXtneSh0aGlzLFJCLHZvaWQgMCksZ3kodGhpcyxMQix2b2lkIDApLGd5KHRoaXMsSXJlLHZvaWQgMCksZ3kodGhpcyxScmUsITEpLGd5KHRoaXMsTHJlLCExKSxneSh0aGlzLE9yZSxudWxsKSxneSh0aGlzLFByZSxudWxsKSxteShS''@;'; put 'put ''Qix0aGlzLG5ldyB5dmUoInJvdyIsdCx0aGlzKSksbXkoTEIsdGhpcyxuZXcgeXZlKCJjb2x1bW4iLGUsdGhpcykpLG15KElyZSx0aGlzLHIpfWdldEZvckF4aXModCl7cmV0dXJuIE81KCJyb3ciPT09dD9SQjpMQix0aGlzKX1zZXRQZXJmb3JtVW5kbyh0KXtteShScmUsdGhpcyx0KX1zZXRQ''@;'; put 'put ''ZXJmb3JtUmVkbyh0KXtteShMcmUsdGhpcyx0KX1pc1BlcmZvcm1pbmdVbmRvUmVkbygpe3JldHVybiBPNShScmUsdGhpcyl8fE81KExyZSx0aGlzKX1nZXRTaGVldElkKCl7cmV0dXJuIE81KFByZSx0aGlzKX1nZXRFbmdpbmUoKXtyZXR1cm4gTzUoT3JlLHRoaXMpfWdldFBvc3Rwb25lQWN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIE81KElyZSx0aGlzKX1zZXR1cFN5bmNFbmRwb2ludCh0LGUpe215KE9yZSx0aGlzLHQpLG15KFByZSx0aGlzLGUpLE81KFJCLHRoaXMpLmluaXQoKSxPNShMQix0aGlzKS5pbml0KCl9fTtmdW5jdGlvbiB2eShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gTzh0KG4pe3Zh''@;'; put 'put ''ciB0PWZ1bmN0aW9uIFA4dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gRnJlKG4sdCxlKXtidmUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIGJ2ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSTgobix0LGUpe3JldHVybiBuLnNldChscyhuLHQpLGUpLGV9ZnVuY3Rpb24geXkobix0KXtyZXR1cm4gbi5nZXQobHMobix0KSl9ZnVuY3Rpb24gbHMo''@;'; put 'put ''bix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IG9kPSJmb3JtdWxhcyIs''@;'; put 'put ''Rjh0PVsibWF4Um93cyIsIm1heENvbHVtbnMiLCJsYW5ndWFnZSJdO0VhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIpLEVhLmdldFNpbmds''@;'; put 'put ''ZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0QWRkZWQiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbW92ZWQiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbmFtZWQiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJG''@;'; put 'put ''b3JtdWxhc1ZhbHVlc1VwZGF0ZSIpO2NvbnN0IF9TPW49PiJVbmRvUmVkby51bmRvIj09PW58fCJVbmRvUmVkby5yZWRvIj09PW58fCJhdXRvIj09PW47dmFyIFA1PW5ldyBXZWFrTWFwLE9CPW5ldyBXZWFrTWFwLGtEPW5ldyBXZWFrTWFwLF9zPW5ldyBXZWFrU2V0O2NsYXNzIE44dCBleHRl''@;'; put 'put ''bmRzIE1ze2NvbnN0cnVjdG9yKCl7dmFyIHQ7c3VwZXIoLi4uYXJndW1lbnRzKSx0PXRoaXMsZnVuY3Rpb24gTDh0KG4sdCl7YnZlKG4sdCksdC5hZGQobil9KHRoaXMsX3MpLEZyZSh0aGlzLFA1LCExKSxGcmUodGhpcyxPQiwhMSksRnJlKHRoaXMsa0QsW1sidmFsdWVzVXBkYXRlZCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gbHMoX3MsdCxlN3QpLmNhbGwodCwuLi5yKX1dLFsibmFtZWRFeHByZXNzaW9uQWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIGxzKF9zLHQsdDd0KS5jYWxsKHQsLi4ucil9XSxbIm5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJy''@;'; put 'put ''YXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIGxzKF9zLHQsbjd0KS5jYWxsKHQsLi4ucil9XSxbInNoZWV0QWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNb''@;'; put 'put ''aV07cmV0dXJuIGxzKF9zLHQscjd0KS5jYWxsKHQsLi4ucil9XSxbInNoZWV0UmVuYW1lZCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gbHMoX3MsdCxpN3QpLmNhbGwodCwu''@;'; put 'put ''Li5yKX1dLFsic2hlZXRSZW1vdmVkIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBscyhfcyx0LGE3dCkuY2FsbCh0LC4uLnIpfV1dKSx2eSh0aGlzLCJzdGF0aWNSZWdpc3Rl''@;'; put 'put ''ciIsV2YoImZvcm11bGFzIikpLHZ5KHRoaXMsImVuZ2luZSIsbnVsbCksdnkodGhpcywic2hlZXRJZCIsbnVsbCksdnkodGhpcywic2hlZXROYW1lIixudWxsKSx2eSh0aGlzLCJpbmRleFN5bmNlciIsbnVsbCksdnkodGhpcywicm93QXhpc1N5bmNlciIsbnVsbCksdnkodGhpcywiY29sdW1u''@;'; put 'put ''QXhpc1N5bmNlciIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIG9kfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltvZCwuLi5GOHRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVtvZF19ZW5hYmxlUGx1Z2luKCl7dmFyIHQsZT10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe2lmKHRoaXMuZW5naW5lPW51bGwhPT0odD1mdW5jdGlvbiBnOHQobil7Y29uc3QgdD1uLmdldFNldHRpbmdzKCksZT10W29kXSxyPWU/LmVuZ2luZTtpZighMD09PWV8fG1jKHIp''@;'; put 'put ''KXJldHVybiBudWxsO3ZhciBpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByLmh5cGVyZm9ybXVsYXx8ImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIGZ1bmN0aW9uIG04dChuLHQsZSl7Y29uc3Qgcj10W29kXSxpPWZ1bmN0aW9uIGg4dChuKXt2YXIgdDtjb25zdCBlPW5bb2RdLHI9dXZlKG51''@;'; put 'put ''bGwhPWUmJm51bGwhPT0odD1lLmVuZ2luZSkmJnZvaWQgMCE9PXQmJnQuaHlwZXJmb3JtdWxhP2UuZW5naW5lOnt9KSxpPWN2ZShuKTtyZXR1cm57Li4ueHJlLC4uLnIsLi4uaX19KHQpLGE9a0IoKSxjPUVyZSgpOyhmdW5jdGlvbiB2OHQobix0KXt0JiZ0LmZvckVhY2goZT0+e2NvbnN0e25h''@;'; put 'put ''bWU6cixwbHVnaW46aSx0cmFuc2xhdGlvbnM6YX09ZTt0cnl7bi5yZWdpc3RlckZ1bmN0aW9uKHIsaSxhKX1jYXRjaChjKXtvcyhjLm1lc3NhZ2UpfX0pfSkobixyLmZ1bmN0aW9ucyksZnVuY3Rpb24geTh0KG4sdCl7aWYodCl7Y29uc3R7bGFuZ0NvZGU6ZX09dDt0cnl7bi5yZWdpc3Rlckxh''@;'; put 'put ''bmd1YWdlKGUsdCl9Y2F0Y2gocil7b3Moci5tZXNzYWdlKX19fShuLHIubGFuZ3VhZ2UpO2NvbnN0IG09bi5idWlsZEVtcHR5KGkpO3JldHVybiBhLnNldChtLFtlXSksYy5zZXQobSxbZS5ndWlkXSksZnVuY3Rpb24gXzh0KG4sdCl7dCYmKG4uc3VzcGVuZEV2YWx1YXRpb24oKSx0LmZvckVh''@;'; put 'put ''Y2goZT0+e2NvbnN0e25hbWU6cixleHByZXNzaW9uOmksc2NvcGU6YSxvcHRpb25zOmN9PWU7dHJ5e24uYWRkTmFtZWRFeHByZXNzaW9uKHIsaSxhLGMpfWNhdGNoKG0pe29zKG0ubWVzc2FnZSl9fSksbi5yZXN1bWVFdmFsdWF0aW9uKCkpfShtLHIubmFtZWRFeHByZXNzaW9ucyksbS5vbigi''@;'; put 'put ''c2hlZXRBZGRlZCIsKCk9PnttLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksbS5vbigic2hlZXRSZW1vdmVkIiwoKT0+e20ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxtfShudWxsIT09KGk9ci5oeXBlcmZvcm11bGEpJiZ2b2lkIDAhPT1pP2k6cix0LG4pO2lmKCJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgciYmbWMoci5oeXBlcmZvcm11bGEpKXtjb25zdCBhPWtCKCksYz1FcmUoKS5nZXQocik7cmV0dXJuIGEuaGFzKHIpfHxhLnNldChyLFtdKSxhLmdldChyKS5wdXNoKG4pLGMmJmMucHVzaChuLmd1aWQpLHIuZ2V0Q29uZmlnKCkubGljZW5zZUtleXx8ci51cGRhdGVDb25maWcoe2xpY2Vu''@;'; put 'put ''c2VLZXk6bHZlfSksKHIuZ2V0Q29uZmlnKCkubGVhcFllYXIxOTAwIT09eHJlLmxlYXBZZWFyMTkwMHx8ITE9PT1VQShyLmdldENvbmZpZygpLm51bGxEYXRlLHhyZS5udWxsRGF0ZSkpJiZvcyhlbGBJZiB5b3UgdXNlIEh5cGVyRm9ybXVsYSB3aXRoIEhhbmRzb250YWJsZSwga2VlcCB0aGUg''@;'; put 'put ''ZGVmYXVsdCBcYGxlYXBZZWFyMTkwMFxgIGFuZCBcYG51bGxEYXRlXGAgCiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1heSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy5gKSxyfXJldHVybiBudWxsfSh0aGlzLmhv''@;'; put 'put ''dCkpJiZ2b2lkIDAhPT10P3Q6dGhpcy5lbmdpbmUsIXRoaXMuZW5naW5lKXJldHVybiB2b2lkIG9zKCJNaXNzaW5nIHRoZSByZXF1aXJlZCBgZW5naW5lYCBrZXkgaW4gdGhlIEZvcm11bGFzIHNldHRpbmdzLiBQbGVhc2UgZmlsbCBpdCB3aXRoIGVpdGhlciBhbiBlbmdpbmUgY2xhc3Mgb3Ig''@;'; put 'put ''YW4gZW5naW5lIGluc3RhbmNlLiIpO2lmKG51bGwhPT10aGlzLnNoZWV0TmFtZSYmIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7Y29uc3Qgcj10aGlzLmFkZFNoZWV0KHRoaXMuc2hlZXROYW1lLGxzKF9zLHRoaXMsSUQpLmNhbGwodGhpcykpOyExIT09ciYm''@;'; put 'put ''bHMoX3MsdGhpcyxERCkuY2FsbCh0aGlzLHIpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsQ3ZlKS5jYWxs''@;'; put 'put ''KGUsLi4uaSl9KSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsU3ZlKS5jYWxsKGUsLi4uaSl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsQ3ZlKS5jYWxsKGUsLi4uaSl9KSx0aGlzLmFkZEhvb2soImFmdGVyVXBk''@;'; put 'put ''YXRlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbHMoX3MsZSxTdmUpLmNhbGwoZSwuLi5pKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5RGF0YSIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbHMoX3MsZSx6OHQpLmNhbGwoZSwuLi5pKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbHMoX3MsZSxVOHQpLmNhbGwoZSwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmFsaWRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcg''@;'; put 'put ''QXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsVjh0KS5jYWxsKGUsLi4uaSl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShy''@;'; put 'put ''KSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbHMoX3MsZSxXOHQpLmNhbGwoZSwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRDZWxsIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsr''@;'; put 'put ''KWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBscyhfcyxlLE12ZSkuY2FsbChlLC4uLmkpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1''@;'; put 'put ''bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsTXZlKS5jYWxsKGUsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4g''@;'; put 'put ''bHMoX3MsZSxaOHQpLmNhbGwoZSwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBscyhfcyxlLFk4dCkuY2Fs''@;'; put 'put ''bChlLC4uLmkpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbHMoX3MsZSxLOHQpLmNhbGwoZSwuLi5pKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsWDh0KS5jYWxsKGUsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJl''@;'; put 'put ''bW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbHMoX3MsZSxHOHQpLmNhbGwoZSwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBscyhfcyxlLCQ4dCkuY2FsbChlLC4uLmkpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbHMoX3MsZSxxOHQpLmNhbGwoZSwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1u''@;'; put 'put ''ZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsSjh0KS5jYWxsKGUsLi4uaSl9KSx0aGlzLmluZGV4U3luY2VyPW5ldyBSOHQodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIscj0+e3RoaXMuaG90''@;'; put 'put ''LmFkZEhvb2tPbmNlKCJpbml0IiwoKT0+e3IoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhv''@;'; put 'put ''ZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwocixpLGEsYyk9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKHIsaSxjKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChyLGksYSxjKT0+e3RoaXMuY29sdW1uQXhpc1N5''@;'; put 'put ''bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24ocixpLGMpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwocixpLGEsYyxtKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoYyxtKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIs''@;'; put 'put ''KHIsaSxhLGMsbSk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGMsbSl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChyLGkpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbcl0sdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxpKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwocixpKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaSxpKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVt''@;'; put 'put ''blVuZnJlZXplIiwocixpKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW3JdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxpKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uVW5mcmVlemUiLChyLGkpPT57dGhp''@;'; put 'put ''cy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhpLGkpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07''@;'; put 'put ''cmV0dXJuIGxzKF9zLGUsajh0KS5jYWxsKGUsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMCksdGhpcy5lbmdpbmUudW5kbygpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZWRvIiwoKT0+e3RoaXMuaW5kZXhT''@;'; put 'put ''eW5jZXIuc2V0UGVyZm9ybVJlZG8oITApLHRoaXMuZW5naW5lLnJlZG8oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQ''@;'; put 'put ''ZXJmb3JtUmVkbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIGxzKF9zLGUsUTh0KS5jYWxsKGUsLi4uaSl9''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImJlZm9yZUF1dG9maWxsIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBscyhfcyxlLEI4dCkuY2FsbChlLC4uLmkpfSkseXkoa0QsdGhpcykuZm9y''@;'; put 'put ''RWFjaChyPT57bGV0W2ksYV09cjtyZXR1cm4gdGhpcy5lbmdpbmUub24oaSxhKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7eXkoa0QsdGhpcykuZm9yRWFjaCh0PT57bGV0W2Uscl09dDtyZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGUscil9KSxodmUodGhpcy5lbmdp''@;'; put 'put ''bmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbih0KXtjb25zdCBlPWZ1bmN0aW9uIGY4dChuKXt2YXIgdDtjb25zdCBlPW5bb2RdO3JldHVybnsuLi51dmUobnVsbCE9ZSYmbnVsbCE9PSh0PWUuZW5naW5lKSYmdm9pZCAwIT09''@;'; put 'put ''dCYmdC5oeXBlcmZvcm11bGE/ZS5lbmdpbmU6e30pLC4uLmN2ZShuKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBwOHQobix0KXtyZXR1cm4gT2JqZWN0LmtleXModCkuc29tZShlPT52b2lkIDAhPT10W2VdJiZ0W2VdIT09bltlXSl9KSh0aGlzLmVuZ2luZS5nZXRDb25m''@;'; put 'put ''aWcoKSxlKSYmdGhpcy5lbmdpbmUudXBkYXRlQ29uZmlnKGUpO2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtvZF07aWYod2EocikmJndhKHIuc2hlZXROYW1lKSYmci5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChyLnNoZWV0TmFtZSksIXQuZGF0''@;'; put 'put ''YSYmbnVsbD09PXRoaXMuc2hlZXROYW1lKXtjb25zdCBpPXRoaXMuaG90LmdldFNldHRpbmdzKClbb2RdLnNoZWV0TmFtZTtpZihpJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChpKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGE9dGhpcy5hZGRTaGVl''@;'; put 'put ''dChpPz92b2lkIDAsbHMoX3MsdGhpcyxJRCkuY2FsbCh0aGlzKSk7bHMoX3MsdGhpcyxERCkuY2FsbCh0aGlzLGEpfX1zdXBlci51cGRhdGVQbHVnaW4odCl9ZGVzdHJveSgpe3l5KGtELHRoaXMpLmZvckVhY2godD0+e3ZhciBlO2xldFtyLGldPXQ7cmV0dXJuIG51bGw9PT0oZT10aGlzLmVu''@;'; put 'put ''Z2luZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUub2ZmKHIsaSl9KSxJOChrRCx0aGlzLG51bGwpLGh2ZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kZXN0cm95KCl9YWRkU2hlZXQodCxlKXtpZih3YShlKSYmIUhtZShlKSlyZXR1cm4gb3MoIlRoZSBwcm92''@;'; put 'put ''aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9dCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodCkpcmV0dXJuIG9zKCJTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCByPXRoaXMu''@;'; put 'put ''ZW5naW5lLmFkZFNoZWV0KHQ/P3ZvaWQgMCk7cmV0dXJuIGUmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHIpLGUpLHJ9Y2F0Y2gocil7cmV0dXJuIG9zKHIubWVzc2FnZSksITF9fXN3aXRjaFNoZWV0KHQpe2lmKCF0aGlzLmVuZ2luZS5kb2Vz''@;'; put 'put ''U2hlZXRFeGlzdCh0KSlyZXR1cm4gdm9pZCBtSihgVGhlIHNoZWV0IG5hbWVkIFxgJHt0fVxgIGRvZXMgbm90IGV4aXN0LCBzd2l0Y2ggYWJvcnRlZC5gKTtscyhfcyx0aGlzLEREKS5jYWxsKHRoaXMsdCk7Y29uc3QgZT10aGlzLmVuZ2luZS5nZXRTaGVldFNlcmlhbGl6ZWQodGhpcy5zaGVl''@;'; put 'put ''dElkKTtlLmxlbmd0aD4wJiZ0aGlzLmhvdC5sb2FkRGF0YShlLGAke2VkKG9kKX0uc3dpdGNoU2hlZXRgKX1nZXRDZWxsVHlwZSh0LGUpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQ7Y29uc3QgaT10aGlz''@;'; put 'put ''LmhvdC50b1BoeXNpY2FsUm93KHQpLGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKTtyZXR1cm4gbnVsbCE9PWkmJm51bGwhPT1hP3RoaXMuZW5naW5lLmdldENlbGxUeXBlKHtzaGVldDpyLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh0KSxj''@;'; put 'put ''b2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZSl9KToiRU1QVFkifWlzRm9ybXVsYUNlbGxUeXBlKHQsZSl7cmV0dXJuIHRoaXMuZW5naW5lLmRvZXNDZWxsSGF2ZUZvcm11bGEoe3NoZWV0OmFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChlKX0pfXJlbmRlckRlcGVuZGVudFNoZWV0''@;'; put 'put ''cyh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IHI9bmV3IFNldDt0LmZvckVhY2goaT0+e3ZhciBhO2NvbnN0IGM9bnVsbD09aXx8bnVsbD09PShhPWkuYWRkcmVzcyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc2hl''@;'; put 'put ''ZXQ7dm9pZCAwIT09YyYmKHIuaGFzKGMpfHxyLmFkZChjKSl9KSxkdmUodGhpcy5lbmdpbmUpLmZvckVhY2goKGksYSk9Pnt2YXIgYzsoZXx8YSE9PXRoaXMuc2hlZXRJZCkmJnIuaGFzKGEpJiYoaS5yZW5kZXIoKSxudWxsPT09KGM9aS52aWV3KXx8dm9pZCAwPT09Y3x8Yy5hZGp1c3RFbGVt''@;'; put 'put ''ZW50c1NpemUoKSl9KX12YWxpZGF0ZURlcGVuZGVudENlbGxzKHQpe2NvbnN0IHI9YT0+e3ZhciBjO2NvbnN0e3JvdzptLGNvbDpDLHNoZWV0OlB9PW51bGwhPT0oYz1hPy5hZGRyZXNzKSYmdm9pZCAwIT09Yz9jOnt9O3JldHVybiB3YShQKT9gJHtQfToke219eCR7Q31gOiIifSxpPW5ldyBT''@;'; put 'put ''ZXQoKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSkubWFwKGE9PnIoYSkpKTt0LmZvckVhY2goYT0+e3ZhciBjLG07Y29uc3R7cm93OkMsY29sOlB9PW51bGwhPT0oYz1hLmFkZHJlc3MpJiZ2b2lkIDAhPT1jP2M6e307aWYoITE9PT13''@;'; put 'put ''YShDKXx8ITE9PT13YShQKXx8Qz49dGhpcy5ob3QuY291bnRSb3dzKCl8fFA+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCBZPW51bGw9PWF8fG51bGw9PT0obT1hLmFkZHJlc3MpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLnNoZWV0LEo9cihhKTtpZih2b2lkIDAhPT1ZJiYhaS5o''@;'; put 'put ''YXMoSikpe2NvbnN0IGNlPWR2ZSh0aGlzLmVuZ2luZSkuZ2V0KFkpO2lmKCFjZSlyZXR1cm47Y2UudmFsaWRhdGVDZWxsKGNlLmdldERhdGFBdENlbGwoQyxQKSxjZS5nZXRDZWxsTWV0YShDLFApLCgpPT57fSl9fSl9c3luY0NoYW5nZVdpdGhFbmdpbmUodCxlLHIpe2NvbnN0IGk9e3Jvdzp0''@;'; put 'put ''aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh0KSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZSksc2hlZXQ6dGhpcy5zaGVldElkfTtpZighdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVu''@;'; put 'put ''dHMoaSkpcmV0dXJuIHZvaWQgb3MoYE5vdCBwb3NzaWJsZSB0byBzZXQgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoaSl9YCk7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsTWV0YSh0LGUpO3JldHVybiBUcmUocixhLnR5cGUpJiYocHZlKHIsYS5kYXRlRm9ybWF0KT9yPWd2ZShyLGEu''@;'; put 'put ''ZGF0ZUZvcm1hdCk6ITE9PT1mdW5jdGlvbiBTOHQobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuJiZuLnN0YXJ0c1dpdGgoIj0iKX0ocikmJihyPWAnJHtyfWApKSx0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoaSxyKX19ZnVuY3Rpb24gREQobil7dGhpcy5zaGVldE5hbWU9bix0aGlz''@;'; put 'put ''LnNoZWV0SWQ9dGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSl9ZnVuY3Rpb24gd3ZlKG4sdCxlKXtpZihobyhlKSYmbnVsbCE9PWUpe2NvbnN0IHI9dGhpcy5ob3QudG9WaXN1YWxSb3cobiksaT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbih0KSxhPXRoaXMuaG90LmdldENl''@;'; put 'put ''bGxNZXRhKHIsaSkudmFsdWVHZXR0ZXI7cmV0dXJuIGE/YS5jYWxsKHRoaXMuaG90LGUpOmUudG9TdHJpbmcoKX1yZXR1cm4gZX1mdW5jdGlvbiBJRChuLHQsZSxyKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KG4sdCxlLHIpLm1hcCgoaSxhKT0+aS5tYXAoKGMsbSk9Pmxz''@;'; put 'put ''KF9zLHRoaXMsd3ZlKS5jYWxsKHRoaXMsYSxtLGMpKSl9ZnVuY3Rpb24gVjh0KG4sdCxlKXtjb25zdCByPXRoaXMuaG90LnByb3BUb0NvbChlKTtpZih0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKHQscikpe2NvbnN0IGk9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1''@;'; put 'put ''YWxJbmRleCh0KSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgociksc2hlZXQ6dGhpcy5zaGVldElkfSxhPXRoaXMuaG90LmdldENlbGxNZXRhKHQscik7bGV0IGM9dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKGkpO3JldHVybiJkYXRlIj09PWEu''@;'; put 'put ''dHlwZSYmbmQoYykmJihjPW12ZShjLGEuZGF0ZUZvcm1hdCkpLCJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWM/Yy52YWx1ZTpjfXJldHVybiBufWZ1bmN0aW9uIEI4dChuLHQsZSl7Y29uc3R7cm93OnIsY29sOml9PXQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmEsY29sOmN9PXQuZ2V0''@;'; put 'put ''Qm90dG9tRW5kQ29ybmVyKCkse3JvdzptLGNvbDpDfT1lLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpQLGNvbDpZfT1lLmdldEJvdHRvbUVuZENvcm5lcigpLEo9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgociksY29sOnRoaXMuY29s''@;'; put 'put ''dW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGkpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3Vh''@;'; put 'put ''bEluZGV4KGMpLHNoZWV0OnRoaXMuc2hlZXRJZH19LGNlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KG0pLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChDKSxzaGVldDp0aGlzLnNoZWV0''@;'; put 'put ''SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFApLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChZKSxzaGVldDp0aGlzLnNoZWV0SWR9fTtpZighMT09PXRoaXMuZW5naW5lLmlzSXRQb3Nz''@;'; put 'put ''aWJsZVRvU2V0Q2VsbENvbnRlbnRzKGNlKSlyZXR1cm4hMTtjb25zdCBmZT10aGlzLmVuZ2luZS5nZXRGaWxsUmFuZ2VEYXRhKEosY2UpLHtyb3c6QWUsY29sOkhlfT1KLnN0YXJ0LHtyb3c6WGUsY29sOnJ0fT1KLmVuZCxkdD1YZS1BZSsxLGp0PXJ0LUhlKzE7Zm9yKGxldCBGdD0wO0Z0PGZl''@;'; put 'put ''Lmxlbmd0aDtGdCs9MSlmb3IobGV0IHBuPTA7cG48ZmVbRnRdLmxlbmd0aDtwbis9MSl7Y29uc3Qgb249ZmVbRnRdW3BuXSxnbj1BZStGdCVkdCxabj1IZStwbiVqdCxHcj10aGlzLmhvdC5nZXRDZWxsTWV0YShnbixabik7VHJlKG9uLEdyLnR5cGUpJiYob24uc3RhcnRzV2l0aCgiJyIpP2Zl''@;'; put 'put ''W0Z0XVtwbl09b24uc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGduLFpuLHRoaXMuc2hlZXRJZCkmJihmZVtGdF1bcG5dPU04dChvbixHci5kYXRlRm9ybWF0KSkpfXJldHVybiBmZX1mdW5jdGlvbiBDdmUobix0KXsoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhlZChvZCkpfHxJOChPQix0aGlzLG1jKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfWZ1bmN0aW9uIGo4dCgpe2lmKHl5KE9CLHRoaXMpKXJldHVybiB2b2lkIHRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUp''@;'; put 'put ''O2NvbnN0IG49bHMoX3MsdGhpcyxJRCkuY2FsbCh0aGlzKTtuLmZvckVhY2goKGUscik9PntlLmZvckVhY2goKGksYSk9Pntjb25zdCBjPXRoaXMuaG90LmdldENlbGxNZXRhKHIsYSx7c2tpcE1ldGFFeHRlbnNpb246ITB9KSxtPWMuZGF0ZUZvcm1hdDtUcmUoaSxjLnR5cGUpJiYocHZlKGks''@;'; put 'put ''bSk/bltyXVthXT1ndmUoaSxtKTppLnN0YXJ0c1dpdGgoIj0iKXx8KG5bcl1bYV09YCcke2l9YCkpfSl9KSxJOChQNSx0aGlzLCEwKTtjb25zdCB0PXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsbik7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0''@;'; put 'put ''aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKHQpLEk4KFA1LHRoaXMsITEpfWZ1bmN0aW9uIFN2ZShuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIjtpZihlLmluY2x1ZGVz''@;'; put 'put ''KGVkKG9kKSkpcmV0dXJuO2NvbnN0IHI9ZnVuY3Rpb24gYjh0KG4sdCl7cmV0dXJuKG1jKHQpfHwhbi5kb2VzU2hlZXRFeGlzdCh0KSkmJih0PW4uYWRkU2hlZXQodCkpLHR9KHRoaXMuZW5naW5lLHRoaXMuaG90LmdldFNldHRpbmdzKClbb2RdLnNoZWV0TmFtZSk7aWYobHMoX3MsdGhpcyxE''@;'; put 'put ''RCkuY2FsbCh0aGlzLHIpLCJ1cGRhdGVTZXR0aW5ncyIhPT1lKWlmKHl5KE9CLHRoaXMpKXRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgaT1scyhfcyx0aGlzLElEKS5jYWxsKHRoaXMpO2lmKHRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVwbGFjZVNoZWV0''@;'; put 'put ''Q29udGVudCh0aGlzLnNoZWV0SWQsaSkpe0k4KFA1LHRoaXMsITApO2NvbnN0IGE9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxpKTt0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJE''@;'; put 'put ''ZXBlbmRlbnRTaGVldHMoYSksSTgoUDUsdGhpcywhMSl9fX1mdW5jdGlvbiB6OHQobix0LGUscil7aWYoImdldCIhPT1yfHx5eShQNSx0aGlzKXx8bnVsbD09PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHxudWxsPT09bnx8bnVs''@;'; put 'put ''bD09PXQpcmV0dXJuO2NvbnN0IGk9dGhpcy5nZXRDZWxsVHlwZShuLHQpO2lmKCJWQUxVRSI9PT1pfHwiRU1QVFkiPT09aSlyZXR1cm4gdm9pZChlLnZhbHVlPWZ1bmN0aW9uIEM4dChuKXtyZXR1cm4gZnVuY3Rpb24gdzh0KG4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmIiciPT09bi5j''@;'; put 'put ''aGFyQXQoMCkmJiI9Ij09PW4uY2hhckF0KDEpfShuKT9uLnN1YnN0cigxKTpufShlLnZhbHVlKSk7Y29uc3QgYT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KG4pLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJ''@;'; put 'put ''bmRleCh0KSxzaGVldDp0aGlzLnNoZWV0SWR9O2xldCBjPXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShhKTtjb25zdCBtPXRoaXMuaG90LmdldENlbGxNZXRhKG4sdCx7c2tpcE1ldGFFeHRlbnNpb246ITB9KTsiZGF0ZSI9PT1tLnR5cGUmJm5kKGMpJiYoYz1tdmUoYyxtLmRhdGVGb3JtYXQp''@;'; put 'put ''KSxlLnZhbHVlPSJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWM/Yy52YWx1ZTpjfWZ1bmN0aW9uIFU4dChuLHQsZSxyKXtpZigiZ2V0IiE9PXJ8fHl5KFA1LHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGk9dGhpcy5ob3QudG9WaXN1YWxSb3cobiksYT10aGlzLmhvdC5wcm9wVG9Db2wodCk7aWYobnVsbD09PWl8fG51bGw9PT1hKXJldHVybjtjb25zdCBjPXRoaXMuZ2V0Q2VsbFR5cGUoaSxhKTtpZigiVkFMVUUiPT09Y3x8IkVNUFRZIj09PWMpcmV0dXJuO2NvbnN0IG09''@;'; put 'put ''dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1lbnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09bS53aWR0aCYmMD09PW0uaGVpZ2h0KXJldHVybjtjb25zdCBDPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgo''@;'; put 'put ''aSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hlZXRJZH07ZS52YWx1ZT10aGlzLmVuZ2luZS5nZXRDZWxsU2VyaWFsaXplZChDKX1mdW5jdGlvbiBNdmUobix0KXtpZihfUyh0KSlyZXR1cm47Y29uc3QgZT1bXSxy''@;'; put 'put ''PVtdLGk9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntuLmZvckVhY2goYT0+e2xldFtjLG0sLENdPWE7Y29uc3QgUD10aGlzLmhvdC5wcm9wVG9Db2wobSksWT10aGlzLmhvdC50b1BoeXNpY2FsUm93KGMpLEo9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihQKSxjZT17cm93OnRoaXMucm93QXhp''@;'; put 'put ''c1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChQKSxzaGVldDp0aGlzLnNoZWV0SWR9O0M9bHMoX3MsdGhpcyx3dmUpLmNhbGwodGhpcyxZLEosQyksbnVsbCE9PVkmJm51bGwhPT1K''@;'; put 'put ''P3RoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUoYyxQLEMpOmUucHVzaChbYyxQLENdKSxyLnB1c2goe2FkZHJlc3M6Y2V9KX0pfSk7ZS5sZW5ndGgmJnRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pntjb25zdCBhPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57ZS5mb3JFYWNo''@;'; put 'put ''KGM9PntsZXRbbSxDLFBdPWM7dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZShtLEMsUCl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGEsITApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoaSksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGkscil9ZnVuY3Rpb24gVzh0''@;'; put 'put ''KG4sdCl7aWYoX1ModCkpcmV0dXJuO2NvbnN0IGU9W10scj1bXTtuLmZvckVhY2goaT0+e2xldFthLGMsLG1dPWk7Y29uc3QgQz10aGlzLmhvdC5wcm9wVG9Db2woYyk7aWYoIW5kKEMpKXJldHVybjtjb25zdCBQPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFs''@;'; put 'put ''SW5kZXgoYSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KEMpLHNoZWV0OnRoaXMuc2hlZXRJZH07dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoUCk/KHIucHVzaCh7YWRkcmVzczpQfSksZS5wdXNoKC4uLnRoaXMu''@;'; put 'put ''ZW5naW5lLnNldENlbGxDb250ZW50cyhQLG0pKSk6b3MoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KFApfWApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZSksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGUscil9ZnVu''@;'; put 'put ''Y3Rpb24gWjh0KG4sdCl7bGV0IGU9dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobik7aWYobj49dGhpcy5ob3QuY291bnRSb3dzKCkmJihlPW4pLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFt''@;'; put 'put ''ZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFtlLHRdKSlyZXR1cm4hMX1mdW5jdGlvbiBZOHQobix0KXtsZXQgZT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChuKTtpZihuPj10aGlzLmhvdC5jb3VudENv''@;'; put 'put ''bHMoKSYmKGU9biksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2UsdF0pKXJldHVybiExfWZ1bmN0aW9uIEc4dChuLHQsZSl7''@;'; put 'put ''cmV0dXJuITEhPT10aGlzLnJvd0F4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhlKS5ldmVyeShhPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZVJvd3ModGhpcy5zaGVldElkLFthLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiAkOHQobix0LGUpe3JldHVybiExIT09dGhpcy5j''@;'; put 'put ''b2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoZSkuZXZlcnkoYT0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbYSwxXSkpJiZ2b2lkIDB9ZnVuY3Rpb24gSzh0KG4sdCxlKXtpZihfUyhlKSlyZXR1cm47Y29uc3Qgcj10aGlz''@;'; put 'put ''LmVuZ2luZS5hZGRSb3dzKHRoaXMuc2hlZXRJZCxbdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobiksdF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKHIpfWZ1bmN0aW9uIFg4dChuLHQsZSl7aWYoX1MoZSkpcmV0dXJuO2NvbnN0IHI9dGhpcy5lbmdp''@;'; put 'put ''bmUuYWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KG4pLHRdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhyKX1mdW5jdGlvbiBxOHQobix0LGUscil7aWYoX1MocikpcmV0dXJuO2NvbnN0IGk9dGhpcy5y''@;'; put 'put ''b3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KChjLG0pPT5tLWMpLGE9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntpLmZvckVhY2goYz0+e3RoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFtjLDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMo''@;'; put 'put ''YSl9ZnVuY3Rpb24gSjh0KG4sdCxlLHIpe2lmKF9TKHIpKXJldHVybjtjb25zdCBpPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgoYyxtKT0+bS1jKSxhPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57aS5mb3JFYWNoKGM9Pnt0aGlzLmVuZ2luZS5yZW1v''@;'; put 'put ''dmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbYywxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGEpfWZ1bmN0aW9uIFE4dChuLHQsZSl7dmFyIHI7STgoUDUsdGhpcywhMCk7Y29uc3QgaT1scyhfcyx0aGlzLElEKS5jYWxsKHRoaXMsZSwwLGUrKChudWxsPT09KHI9dC5fX2NoaWxk''@;'; put 'put ''cmVuKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sZW5ndGgpfHwwKSx0aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKSk7STgoUDUsdGhpcywhMSksaS5mb3JFYWNoKChhLGMpPT57YS5mb3JFYWNoKChtLEMpPT57dGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtjb2w6Qyxyb3c6ZStjLHNoZWV0''@;'; put 'put ''OnRoaXMuc2hlZXRJZH0sW1ttXV0pfSl9KX1mdW5jdGlvbiBlN3Qobil7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLG4pfWZ1bmN0aW9uIHQ3dChuLHQpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixuLHQpfWZ1bmN0''@;'; put 'put ''aW9uIG43dChuLHQpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLG4sdCl9ZnVuY3Rpb24gcjd0KG4pe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0QWRkZWQiLG4pfWZ1bmN0aW9uIGk3dChuLHQpe2xzKF9zLHRoaXMsREQpLmNhbGwodGhpcyx0''@;'; put 'put ''KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldFJlbmFtZWQiLG4sdCl9ZnVuY3Rpb24gYTd0KG4sdCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW1vdmVkIixuLHQpfWZ1bmN0aW9uIHh2ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp''@;'; put 'put ''bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gX3kobix0KXtyZXR1cm4gbi5nZXQoUjgobix0KSl9ZnVuY3Rpb24gRXZlKG4sdCxlKXtyZXR1cm4gbi5zZXQoUjgobix0KSxlKSxlfWZ1bmN0aW9uIFI4KG4sdCxlKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVm''@;'; put 'put ''b3JlSGlkZUNvbHVtbnMiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlQ29sdW1ucyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2Nv''@;'; put 'put ''bnN0IFR2ZT0iaGlkZGVuQ29sdW1ucyI7dmFyIFU0PW5ldyBXZWFrTWFwLGJ5PW5ldyBXZWFrU2V0O2NsYXNzIGQ3dCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBsN3Qobix0KXt4dmUobix0KSx0LmFkZChuKX0odGhpcyxieSksZnVuY3Rp''@;'; put 'put ''b24gYzd0KG4sdCxlKXt4dmUobix0KSx0LnNldChuLGUpfSh0aGlzLFU0LG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBUdmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5''@;'; put 'put ''UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEsY29sdW1uczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1R2ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIHQ9dGhpczt0aGlzLmVuYWJsZWR8fChFdmUoVTQsdGhpcyxuZXcgSU4pLF95KFU0LHRoaXMpLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiaW5pdCIsKCk9PlI4KGJ5LHRoaXMsdjd0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsX3koVTQsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBSOChieSx0LG03dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoZSxyLGkpPT5SOChieSx0''@;'; put 'put ''aGlzLGY3dCkuY2FsbCh0aGlzLGUscixpKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGUscik9PlI4KGJ5LHRoaXMsaDd0KS5jYWxsKHRoaXMsZSxyKSwyKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBSOChieSx0LGc3dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixlPT5SOChieSx0aGlzLHA3dCkuY2FsbCh0aGlzLGUpKSxzdXBlci5lbmFibGVQ''@;'; put 'put ''bHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAo''@;'; put 'put ''dGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnModCl7Y29uc3QgZT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxyPXRoaXMuaXNWYWxpZENvbmZpZyh0KTtsZXQgaT1lO2NvbnN0IGE9X3koVTQsdGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSxjPXQubGVu''@;'; put 'put ''Z3RoPjA7ciYmYyYmKFluKHQubWFwKFA9PnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oUCkpLFA9PnthW1BdPSExfSksaT1kMChhLChQLFksSik9PihZJiZQLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oSikpLFApLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5o''@;'; put 'put ''aWRlQ29sdW1ucyIsZSxpLHImJmMpJiYociYmYyYmX3koVTQsdGhpcykuc2V0VmFsdWVzKGEpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1ucyIsZSxpLHImJmMsciYmaS5sZW5ndGg8ZS5sZW5ndGgpKX1zaG93''@;'; put 'put ''Q29sdW1uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07dGhpcy5zaG93Q29sdW1ucyhlKX1oaWRlQ29sdW1ucyh0KXtjb25zdCBlPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLHI9dGhpcy5pc1ZhbGlkQ29u''@;'; put 'put ''ZmlnKHQpO2xldCBpPWU7ciYmKGk9QXJyYXkuZnJvbShuZXcgU2V0KGUuY29uY2F0KHQpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixlLGkscikmJihyJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKHQsYz0+e195KFU0LHRoaXMpLnNldFZh''@;'; put 'put ''bHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZUNvbHVtbnMiLGUsaSxyLHImJmkubGVuZ3RoPmUubGVuZ3RoKSl9aGlkZUNvbHVtbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFy''@;'; put 'put ''cmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO3RoaXMuaGlkZUNvbHVtbnMoZSl9Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiBXcyhfeShVNCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksdD0+dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4odCkpfWlzSGlkZGVuKHQpe3JldHVy''@;'; put 'put ''biBfeShVNCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0KSl8fCExfWlzVmFsaWRDb25maWcodCl7Y29uc3QgZT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wKSYmdC5ldmVyeShyPT5OdW1i''@;'; put 'put ''ZXIuaXNJbnRlZ2VyKHIpJiZyPj0wJiZyPGUpfXJlc2V0Q2VsbHNNZXRhKCl7WW4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksdD0+e3Quc2tpcENvbHVtbk9uUGFzdGU9ITF9KX1kZXN0cm95KCl7RXZlKFU0LHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBoN3Qobix0KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc0hpZGRlbih0KT8wOnRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpJiYodGhpcy5pc0hpZGRlbih0KzEpfHx0aGlzLmlzSGlkZGVuKHQtMSkpJiYibnVtYmVyIj09dHlwZW9mIG4mJnRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKT9uKzE1OnZvaWQgMH1mdW5jdGlvbiBm''@;'; put 'put ''N3Qobix0LGUpe2lmKCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4odCkmJihlLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKHQtMSkpZS5jbGFzc05hbWU9ZS5jbGFzc05hbWV8fCIiLC0xPT09ZS5jbGFzc05hbWUuaW5k''@;'; put 'put ''ZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGUuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBpZihlLmNsYXNzTmFtZSl7Y29uc3Qgcj1lLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKHIubGVuZ3RoPjApe2NvbnN0IGk9ci5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVt''@;'; put 'put ''biIpO2k+LTEmJnIuc3BsaWNlKGksMSksZS5jbGFzc05hbWU9ci5qb2luKCIgIil9fX1mdW5jdGlvbiBwN3Qobil7aWYodGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIG47Y29uc3QgdD1bXSxlPShyLGksYSxjKT0+e3QucHVzaCh7c3RhcnRSb3c6cixlbmRSb3c6''@;'; put 'put ''aSxzdGFydENvbDphLGVuZENvbDpjfSl9O3JldHVybiBZbihuLHI9PntsZXQgaT0hMCxhPTA7ZW8oci5zdGFydENvbCxyLmVuZENvbCxjPT57dGhpcy5pc0hpZGRlbihjKT8oaXx8ZShyLnN0YXJ0Um93LHIuZW5kUm93LGEsYy0xKSxpPSEwKTooaSYmKGE9YyksYz09PXIuZW5kQ29sJiZlKHIu''@;'; put 'put ''c3RhcnRSb3csci5lbmRSb3csYSxjKSxpPSExKX0pfSksdH1mdW5jdGlvbiBnN3Qobix0KXtpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fG48MClyZXR1cm47Y29uc3QgZT1bXTtuPj0xJiZ0aGlzLmlzSGlkZGVuKG4tMSkmJmUucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1bW4iKSxu''@;'; put 'put ''PHRoaXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4obisxKSYmZS5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSx0aSh0LGUpfWZ1bmN0aW9uIG03dChuKXtuLml0ZW1zLnB1c2goe25hbWU6eXN9LGZ1bmN0aW9uIG83dChuKXtyZXR1cm57a2V5OiJoaWRkZW5fY29sdW1uc19o''@;'; put 'put ''aWRlIixuYW1lKCl7Y29uc3QgdD10aGlzLmdldFNlbGVjdGVkQWN0aXZlKCk7bGV0IGU9MDtpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdFssciwsaV09dDtyLWkhPTAmJihlPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoY2VlLGUpfSxjYWxsYmFjaygpe2NvbnN0e2Zyb206''@;'; put 'put ''dCx0bzplfT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxyPU1hdGgubWF4KE1hdGgubWluKHQuY29sLGUuY29sKSwwKSxpPU1hdGgubWF4KHQuY29sLGUuY29sKSxhPVtdO2ZvcihsZXQgQz1yO0M8PWk7Qys9MSlhLnB1c2goQyk7bi5oaWRlQ29sdW1ucyhhKTtjb25zdCBtPXRoaXMu''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGFbYS5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihtKSYmbT49MD90aGlzLnNlbGVjdENvbHVtbnMobSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhp''@;'; put 'put ''cy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIHM3dChuKXtjb25zdCB0PVtdO3JldHVybntr''@;'; put 'put ''ZXk6ImhpZGRlbl9jb2x1bW5zX3Nob3ciLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHVlZSx0Lmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGUscjtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2xldCBpPXRbMF0sYT10W3QubGVuZ3RoLTFdO2k9bnVsbCE9PShl''@;'; put 'put ''PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGktMSwtMSkpJiZ2b2lkIDAhPT1lP2U6MCxhPW51bGwhPT0ocj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhKzEsMSkpJiZ2b2lkIDAhPT1yP3I6dGhpcy5jb3Vu''@;'; put 'put ''dENvbHMoKS0xLG4uc2hvd0NvbHVtbnModCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMucmVuZGVyKCksYS1pKzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnMoaSxhKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgZT1XcyhuLmdldEhpZGRl''@;'; put 'put ''bkNvbHVtbnMoKSxKPT50aGlzLnRvUGh5c2ljYWxDb2x1bW4oSikpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxlLmxlbmd0aDwxKXJldHVybiEwO3QubGVuZ3RoPTA7Y29uc3Qgcj10''@;'; put 'put ''aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxpPXIuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsYT1yLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxjPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIsbT1jLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSksQz1jLmdldFJlbmRlcmFibGVG''@;'; put 'put ''cm9tVmlzdWFsSW5kZXgoYSksUD1jLmdldE5vdFRyaW1tZWRJbmRleGVzKCksWT1bXTtpZihpIT09YSl7aWYoYS1pKzE+Qy1tKzEpe2NvbnN0IGZlPVAuc2xpY2UoaSxhKzEpO1kucHVzaCguLi5mZS5maWx0ZXIoQWU9PmUuaW5jbHVkZXMoQWUpKSl9fWVsc2UgaWYoMD09PW0mJm08aSlZLnB1''@;'; put 'put ''c2goLi4uUC5zbGljZSgwLGkpKTtlbHNlIGlmKG51bGw9PT1tKVkucHVzaCguLi5QLnNsaWNlKDAsdGhpcy5jb3VudENvbHMoKSkpO2Vsc2V7Y29uc3QgSj10aGlzLmNvdW50Q29scygpLTE7Qz09PWMuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChjLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleChKLC0xKSkmJko+YSYmWS5wdXNoKC4uLlAuc2xpY2UoYSsxKSl9cmV0dXJuIFluKFksSj0+e3QucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKEopKX0pLDA9PT10Lmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gdjd0KCl7Y29uc3Qgbj10aGlzLmdldFNldHRpbmcoImNvbHVtbnMiKTtB''@;'; put 'put ''cnJheS5pc0FycmF5KG4pJiZ0aGlzLmhpZGVDb2x1bW5zKG4pfWZ1bmN0aW9uIEF2ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gd3ko''@;'; put 'put ''bix0KXtyZXR1cm4gbi5nZXQoTDgobix0KSl9ZnVuY3Rpb24ga3ZlKG4sdCxlKXtyZXR1cm4gbi5zZXQoTDgobix0KSxlKSxlfWZ1bmN0aW9uIEw4KG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZVJvd3MiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlUm93cyIpLEVhLmdldFNpbmds''@;'; put 'put ''ZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVSb3dzIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlUm93cyIpO2NvbnN0IER2ZT0iaGlkZGVuUm93cyI7dmFyIFc0PW5ldyBXZWFrTWFwLEN5PW5ldyBXZWFrU2V0O2NsYXNzIFM3dCBleHRlbmRzIE1ze2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBiN3Qobix0KXtBdmUobix0KSx0LmFkZChuKX0odGhpcyxDeSksZnVuY3Rpb24gdzd0KG4sdCxlKXtBdmUobix0KSx0LnNldChuLGUpfSh0aGlzLFc0LG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBEdmV9''@;'; put 'put ''c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEscm93czpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0R2''@;'; put 'put ''ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIHQ9dGhpczt0aGlzLmVuYWJsZWR8fChrdmUoVzQsdGhpcyxuZXcgSU4pLHd5KFc0LHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9Pkw4KEN5LHRoaXMsazd0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0''@;'; put 'put ''aGlzLnBsdWdpbk5hbWUsd3koVzQsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBM''@;'; put 'put ''OChDeSx0LEE3dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoZSxyLGkpPT5MOChDeSx0aGlzLHg3dCkuY2FsbCh0aGlzLGUscixpKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChlLHIpPT5MOChDeSx0aGlzLE03dCkuY2FsbCh0aGlz''@;'; put 'put ''LGUscikpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIEw4KEN5LHQsVDd0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGU9Pkw4KEN5LHRoaXMsRTd0KS5jYWxsKHRoaXMsZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2Fi''@;'; put 'put ''bGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Um93cyh0KXtjb25zdCBlPXRoaXMuZ2V0SGlkZGVuUm93cygpLHI9dGhpcy5pc1ZhbGlk''@;'; put 'put ''Q29uZmlnKHQpO2xldCBpPWU7Y29uc3QgYT13eShXNCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLGM9dC5sZW5ndGg+MDtyJiZjJiYoWW4odC5tYXAoUD0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhQKSksUD0+e2FbUF09ITF9KSxpPWQwKGEsKFAsWSxKKT0+KFkmJlAucHVzaCh0aGlzLmhv''@;'; put 'put ''dC50b1Zpc3VhbFJvdyhKKSksUCksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVSb3dzIixlLGksciYmYykmJihyJiZjJiZ3eShXNCx0aGlzKS5zZXRWYWx1ZXMoYSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlUm93cyIsZSxpLHImJmMsciYmaS5sZW5n''@;'; put 'put ''dGg8ZS5sZW5ndGgpKX1zaG93Um93KCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07dGhpcy5zaG93Um93cyhlKX1oaWRlUm93cyh0KXtjb25zdCBlPXRoaXMuZ2V0SGlkZGVuUm93cygpLHI9dGhpcy5pc1Zh''@;'; put 'put ''bGlkQ29uZmlnKHQpO2xldCBpPWU7ciYmKGk9QXJyYXkuZnJvbShuZXcgU2V0KGUuY29uY2F0KHQpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVSb3dzIixlLGkscikmJihyJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKHQsYz0+e3d5KFc0LHRoaXMpLnNl''@;'; put 'put ''dFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGMpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZVJvd3MiLGUsaSxyLHImJmkubGVuZ3RoPmUubGVuZ3RoKSl9aGlkZVJvdygpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQp''@;'; put 'put ''LHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO3RoaXMuaGlkZVJvd3MoZSl9Z2V0SGlkZGVuUm93cygpe3JldHVybiBXcyh3eShXNCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksdD0+dGhpcy5ob3QudG9WaXN1YWxSb3codCkpfWlzSGlkZGVuKHQpe3JldHVybiB3eShXNCx0aGlzKS5n''@;'; put 'put ''ZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KSl8fCExfWlzVmFsaWRDb25maWcodCl7Y29uc3QgZT10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wKSYmdC5ldmVyeShyPT5OdW1iZXIuaXNJbnRlZ2VyKHIpJiZy''@;'; put 'put ''Pj0wJiZyPGUpfXJlc2V0Q2VsbHNNZXRhKCl7WW4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksdD0+e3Quc2tpcFJvd09uUGFzdGU9ITF9KX1kZXN0cm95KCl7a3ZlKFc0LHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBNN3Qobix0KXtyZXR1cm4gdGhpcy5pc0hpZGRlbih0''@;'; put 'put ''KT8wOm59ZnVuY3Rpb24geDd0KG4sdCxlKXtpZighMT09PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpJiZ0aGlzLmlzSGlkZGVuKG4pJiYoZS5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihuLTEpKWUuY2xhc3NOYW1lPWUuY2xhc3NOYW1lfHwiIiwtMT09PWUu''@;'; put 'put ''Y2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuUm93IikmJihlLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlblJvdyIpO2Vsc2UgaWYoZS5jbGFzc05hbWUpe2NvbnN0IHI9ZS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihyLmxlbmd0aD4wKXtjb25zdCBpPXIuaW5kZXhPZigiYWZ0ZXJIaWRk''@;'; put 'put ''ZW5Sb3ciKTtpPi0xJiZyLnNwbGljZShpLDEpLGUuY2xhc3NOYW1lPXIuam9pbigiICIpfX19ZnVuY3Rpb24gRTd0KG4pe2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiBuO2NvbnN0IHQ9W10sZT0ocixpLGEsYyk9Pnt0LnB1c2goe3N0YXJ0Um93OnIsZW5k''@;'; put 'put ''Um93Omksc3RhcnRDb2w6YSxlbmRDb2w6Y30pfTtyZXR1cm4gWW4obixyPT57bGV0IGk9ITAsYT0wO2VvKHIuc3RhcnRSb3csci5lbmRSb3csYz0+e3RoaXMuaXNIaWRkZW4oYyk/KGl8fGUoYSxjLTEsci5zdGFydENvbCxyLmVuZENvbCksaT0hMCk6KGkmJihhPWMpLGM9PT1yLmVuZFJvdyYm''@;'; put 'put ''ZShhLGMsci5zdGFydENvbCxyLmVuZENvbCksaT0hMSl9KX0pLHR9ZnVuY3Rpb24gVDd0KG4sdCl7aWYoIXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHxuPDApcmV0dXJuO2NvbnN0IGU9W107bj49MSYmdGhpcy5pc0hpZGRlbihuLTEpJiZlLnB1c2goImFmdGVySGlkZGVuUm93Iiks''@;'; put 'put ''bjx0aGlzLmhvdC5jb3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKG4rMSkmJmUucHVzaCgiYmVmb3JlSGlkZGVuUm93IiksdGkodCxlKX1mdW5jdGlvbiBBN3Qobil7bi5pdGVtcy5wdXNoKHtuYW1lOnlzfSxmdW5jdGlvbiB5N3Qobil7cmV0dXJue2tleToiaGlkZGVuX3Jvd3NfaGlkZSIs''@;'; put 'put ''bmFtZSgpe2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZEFjdGl2ZSgpO2xldCBlPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3RbciwsaV09dDtyLWkhPTAmJihlPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZGVlLGUpfSxjYWxsYmFjaygpe2NvbnN0e2Zyb206dCx0bzpl''@;'; put 'put ''fT10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxyPU1hdGgubWF4KE1hdGgubWluKHQucm93LGUucm93KSwwKSxpPU1hdGgubWF4KHQucm93LGUucm93KSxhPVtdO2ZvcihsZXQgQz1yO0M8PWk7Qys9MSlhLnB1c2goQyk7bi5oaWRlUm93cyhhKTtjb25zdCBtPXRoaXMucm93SW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGFbYS5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihtKSYmbT49MD90aGlzLnNlbGVjdFJvd3MobSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5yZW5kZXIoKX0sZGlz''@;'; put 'put ''YWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIF83dChuKXtjb25zdCB0PVtdO3JldHVybntrZXk6ImhpZGRlbl9yb3dzX3No''@;'; put 'put ''b3ciLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGhlZSx0Lmxlbmd0aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGUscjtpZigwPT09dC5sZW5ndGgpcmV0dXJuO2xldCBpPXRbMF0sYT10W3QubGVuZ3RoLTFdO2k9bnVsbCE9PShlPXRoaXMucm93SW5kZXhNYXBwZXIu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGktMSwtMSkpJiZ2b2lkIDAhPT1lP2U6MCxhPW51bGwhPT0ocj10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhKzEsMSkpJiZ2b2lkIDAhPT1yP3I6dGhpcy5jb3VudFJvd3MoKS0xLG4uc2hvd1Jvd3ModCksdGhp''@;'; put 'put ''cy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMucmVuZGVyKCksYS1pKzE9PT10aGlzLmNvdW50Um93cygpfHx0aGlzLnNlbGVjdFJvd3MoaSxhKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgZT1XcyhuLmdldEhpZGRlblJvd3MoKSxKPT50aGlzLnRvUGh5c2ljYWxSb3coSikp''@;'; put 'put ''O2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxlLmxlbmd0aDwxKXJldHVybiEwO3QubGVuZ3RoPTA7Y29uc3Qgcj10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxpPXIuZ2V0VG9wU3Rh''@;'; put 'put ''cnRDb3JuZXIoKS5yb3csYT1yLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyxjPXRoaXMucm93SW5kZXhNYXBwZXIsbT1jLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaSksQz1jLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYSksUD1jLmdldE5vdFRyaW1tZWRJbmRleGVzKCks''@;'; put 'put ''WT1bXTtpZihpIT09YSl7aWYoYS1pKzE+Qy1tKzEpe2NvbnN0IGZlPVAuc2xpY2UoaSxhKzEpO1kucHVzaCguLi5mZS5maWx0ZXIoQWU9PmUuaW5jbHVkZXMoQWUpKSl9fWVsc2UgaWYoMD09PW0mJm08aSlZLnB1c2goLi4uUC5zbGljZSgwLGkpKTtlbHNlIGlmKG51bGw9PT1tKVkucHVzaCgu''@;'; put 'put ''Li5QLnNsaWNlKDAsdGhpcy5jb3VudFJvd3MoKSkpO2Vsc2V7Y29uc3QgSj10aGlzLmNvdW50Um93cygpLTE7Qz09PWMuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChjLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChKLC0xKSkmJko+YSYmWS5wdXNoKC4uLlAuc2xpY2UoYSsxKSl9cmV0''@;'; put 'put ''dXJuIFluKFksSj0+e3QucHVzaCh0aGlzLnRvVmlzdWFsUm93KEopKX0pLDA9PT10Lmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gazd0KCl7Y29uc3Qgbj10aGlzLmdldFNldHRpbmcoInJvd3MiKTtBcnJheS5pc0FycmF5KG4pJiZ0aGlzLmhpZGVSb3dzKG4pfWZ1bmN0aW9uIEl2ZShuLHQp''@;'; put 'put ''e2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSHJlKG4sdCl7cmV0dXJuIG4uZ2V0KFBCKG4sdCkpfWZ1bmN0aW9uIE5yZShuLHQsZSl7cmV0dXJu''@;'; put 'put ''IG4uc2V0KFBCKG4sdCksZSksZX1mdW5jdGlvbiBQQihuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRo''@;'; put 'put ''aXMgb2JqZWN0Iil9RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6ZSIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLEVhLmdl''@;'; put 'put ''dFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3QgUnZlPSJtYW51YWxDb2x1bW5GcmVlemUiO3ZhciBTeT1uZXcgV2Vha01hcCxWcmU9bmV3IFdlYWtTZXQ7Y2xhc3MgUDd0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMp''@;'; put 'put ''LGZ1bmN0aW9uIFI3dChuLHQpe0l2ZShuLHQpLHQuYWRkKG4pfSh0aGlzLFZyZSksZnVuY3Rpb24gTDd0KG4sdCxlKXtJdmUobix0KSx0LnNldChuLGUpfSh0aGlzLFN5LCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUnZlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7''@;'; put 'put ''cmV0dXJuIDExMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUnZlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsdD0+UEIoVnJlLHRoaXMsRjd0KS5jYWxsKHRoaXMs''@;'; put 'put ''dCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKHQsZSk9PlBCKFZyZSx0aGlzLEg3dCkuY2FsbCh0aGlzLHQsZSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7TnJlKFN5LHRoaXMsITEpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4o''@;'; put 'put ''KXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWZyZWV6ZUNvbHVtbih0KXtjb25zdCBlPXRoaXMuaG90LmdldFNldHRpbmdzKCkscj1lLmZpeGVkQ29sdW1uc1N0YXJ0PHRoaXMuaG90LmNvdW50Q29scygpJiZ0PmUuZml4ZWRD''@;'; put 'put ''b2x1bW5zU3RhcnQtMTtIcmUoU3ksdGhpcyl8fE5yZShTeSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLHQscikmJihyJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXModCxlLmZpeGVkQ29sdW1uc1N0YXJ0KSxlLl9m''@;'; put 'put ''aXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uRnJlZXplIix0LHIpKX11bmZyZWV6ZUNvbHVtbih0KXtjb25zdCBlPXRoaXMuaG90LmdldFNldHRpbmdzKCkscj1lLmZpeGVkQ29sdW1uc1N0YXJ0PjAmJnQ8PWUuZml4ZWRDb2x1bW5zU3RhcnQtMTtI''@;'; put 'put ''cmUoU3ksdGhpcyl8fE5yZShTeSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsdCxyKSYmKHImJihlLl9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyh0LGUuZml4ZWRDb2x1bW5z''@;'; put 'put ''U3RhcnQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsdCxyKSl9fWZ1bmN0aW9uIEY3dChuKXtuLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIEQ3dChuKXtyZXR1cm57a2V5OiJmcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Z2V0VHJhbnNsYXRlZFBocmFzZShWUSl9LGNhbGxiYWNrKHQsZSl7Y29uc3Rbe3N0YXJ0Ontjb2w6cn19XT1lO24uZnJlZXplQ29sdW1uKHIpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpfSxoaWRkZW4oKXtjb25zdCB0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZSgpO2xldCBlPSExO3JldHVybih2b2lkIDA9PT10fHx0Lmxlbmd0aD4xfHx0WzBdLmZyb20uY29sIT09dFswXS50by5jb2x8fHRbMF0uZnJvbS5jb2w8PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xKSYmKGU9ITApLGV9fX0odGhpcyksZnVuY3Rpb24gSTd0KG4pe3Jl''@;'; put 'put ''dHVybntrZXk6InVuZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQlEpfSxjYWxsYmFjayh0LGUpe2NvbnN0W3tzdGFydDp7Y29sOnJ9fV09ZTtuLnVuZnJlZXplQ29sdW1uKHIpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlz''@;'; put 'put ''LnJlbmRlcigpfSxoaWRkZW4oKXtjb25zdCB0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBlPSExO3JldHVybih2b2lkIDA9PT10fHx0Lmxlbmd0aD4xfHx0WzBdLmZyb20uY29sIT09dFswXS50by5jb2x8fHRbMF0uZnJvbS5jb2w+PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVt''@;'; put 'put ''bnNTdGFydCkmJihlPSEwKSxlfX19KHRoaXMpKX1mdW5jdGlvbiBIN3Qobix0KXtpZihIcmUoU3ksdGhpcykpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZih0PGV8fG4uc29tZShyPT5yPGUpKXJldHVybiExfX1mdW5jdGlvbiBGQihuLHQsZSl7''@;'; put 'put ''cmV0dXJuKHQ9ZnVuY3Rpb24gTjd0KG4pe3ZhciB0PWZ1bmN0aW9uIFY3dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0''@;'; put 'put ''P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgYlM9InB4IixQdmU9Y2xhc3MgQjd0e2NvbnN0cnVjdG9yKHQpe0ZCKHRoaXMsImhvdCIsdm9p''@;'; put 'put ''ZCAwKSxGQih0aGlzLCJfZWxlbWVudCIsbnVsbCksRkIodGhpcywic3RhdGUiLDApLEZCKHRoaXMsImlubGluZVByb3BlcnR5Iix2b2lkIDApLHRoaXMuaG90PXQsdGhpcy5pbmxpbmVQcm9wZXJ0eT10LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9YXBwZW5kVG8odCl7dC5hcHBlbmRDaGlsZCh0''@;'; put 'put ''aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50''@;'; put 'put ''LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbih0LGUpe25kKHQpJiYo''@;'; put 'put ''dGhpcy5fZWxlbWVudC5zdHlsZS50b3A9dCtiUyksbmQoZSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldPWUrYlMpfWdldFBvc2l0aW9uKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50LnN0eWxlO3JldHVybnt0b3A6dC50b3A/cGFyc2VJbnQodC50b3AsMTApOjAs''@;'; put 'put ''c3RhcnQ6dFt0aGlzLmlubGluZVByb3BlcnR5XT9wYXJzZUludCh0W3RoaXMuaW5saW5lUHJvcGVydHldLDEwKTowfX1zZXRTaXplKHQsZSl7bmQodCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPXQrYlMpLG5kKGUpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9ZStiUyl9Z2V0''@;'; put 'put ''U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1z''@;'; put 'put ''ZXRPZmZzZXQodCxlKXtuZCh0KSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPXQrYlMpLG5kKGUpJiYodGhpcy5fZWxlbWVudC5zdHlsZVtgbWFyZ2luJHtlZCh0aGlzLmlubGluZVByb3BlcnR5KX1gXT1lK2JTKX1nZXRPZmZzZXQoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQuc3R5''@;'; put 'put ''bGUsZT1gbWFyZ2luJHtlZCh0aGlzLmlubGluZVByb3BlcnR5KX1gO3JldHVybnt0b3A6dC5tYXJnaW5Ub3A/cGFyc2VJbnQodC5tYXJnaW5Ub3AsMTApOjAsc3RhcnQ6dFtlXT9wYXJzZUludCh0W2VdLDEwKTowfX19LFU3dD1jbGFzcyB6N3QgZXh0ZW5kcyBQdmV7YnVpbGQoKXtzdXBlci5i''@;'; put 'put ''dWlsZCgpLHRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHQiKX19LFk3dD1jbGFzcyBaN3QgZXh0ZW5kcyBQdmV7YnVpbGQoKXtzdXBlci5idWlsZCgpLHRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUiKX19O2Z1''@;'; put 'put ''bmN0aW9uIHdwKG4sdCxlKXtGdmUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIEZ2ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQmgo''@;'; put 'put ''bix0LGUpe3JldHVybiBuLnNldChPOChuLHQpLGUpLGV9ZnVuY3Rpb24gcWEobix0KXtyZXR1cm4gbi5nZXQoTzgobix0KSl9ZnVuY3Rpb24gTzgobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Nb3ZlIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uTW92ZSIpO2NvbnN0IGpy''@;'; put 'put ''ZT0ibWFudWFsQ29sdW1uTW92ZSIsSHZlPSJodF9fbWFudWFsQ29sdW1uTW92ZSIsSEI9InNob3ctdWkiLHpyZT0ib24tbW92aW5nLS1jb2x1bW5zIixVcmU9ImFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyI7dmFyIFdkPW5ldyBXZWFrTWFwLFA4PW5ldyBXZWFrTWFwLEY1PW5ldyBXZWFrTWFw''@;'; put 'put ''LE5CPW5ldyBXZWFrTWFwLEY4PW5ldyBXZWFrTWFwLFpkPW5ldyBXZWFrTWFwLFZCPW5ldyBXZWFrTWFwLHIzPW5ldyBXZWFrTWFwLHdTPW5ldyBXZWFrTWFwLEJCPW5ldyBXZWFrTWFwLFJEPW5ldyBXZWFrTWFwLE15PW5ldyBXZWFrU2V0O2NsYXNzIEs3dCBleHRlbmRzIE1ze2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBHN3Qobix0KXtGdmUobix0KSx0LmFkZChuKX0odGhpcyxNeSksd3AodGhpcyxXZCxuZXcgVTd0KHRoaXMuaG90KSksd3AodGhpcyxQOCxuZXcgWTd0KHRoaXMuaG90KSksd3AodGhpcyxGNSxbXSksd3AodGhpcyxOQiwwKSx3cCh0''@;'; put 'put ''aGlzLEY4LCExKSx3cCh0aGlzLFpkLHt9KSx3cCh0aGlzLFZCLHZvaWQgMCksd3AodGhpcyxyMyx2b2lkIDApLHdwKHRoaXMsd1Msdm9pZCAwKSx3cCh0aGlzLEJCLHZvaWQgMCksd3AodGhpcyxSRCx2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBqcmV9c3RhdGljIGdl''@;'; put 'put ''dCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqcmVdfWVuYWJsZVBsdWdpbigpe3ZhciB0PXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIE84KE15LHQsWDd0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gTzgoTXksdCxKN3QpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+TzgoTXksdGhpcyxlOXQpLmNhbGwodGhp''@;'; put 'put ''cykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gTzgoTXksdCx0OXQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYnVpbGRQbHVn''@;'; put 'put ''aW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aSh0aGlzLmhvdC5yb290RWxlbWVudCxIdmUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxz''@;'; put 'put ''dXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7SGEodGhpcy5ob3Qucm9vdEVsZW1lbnQsSHZlKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxxYShXZCx0aGlzKS5kZXN0cm95KCkscWEoUDgsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlQ29sdW1u''@;'; put 'put ''KHQsZSl7cmV0dXJuIHRoaXMubW92ZUNvbHVtbnMoW3RdLGUpfW1vdmVDb2x1bW5zKHQsZSl7Y29uc3Qgcj1xYShWQix0aGlzKSxpPXRoaXMuaXNNb3ZlUG9zc2libGUodCxlKSxhPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIix0LGUscixpKTtpZihCaChWQix0aGlzLHZv''@;'; put 'put ''aWQgMCksITE9PT1hKXJldHVybjtpJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyh0LGUpO2NvbnN0IGM9aSYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZCh0LGUpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIix0LGUscixpLGMpLGN9''@;'; put 'put ''ZHJhZ0NvbHVtbih0LGUpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFt0XSxlKX1kcmFnQ29sdW1ucyh0LGUpe2NvbnN0IHI9dGhpcy5jb3VudEZpbmFsSW5kZXgodCxlKTtyZXR1cm4gQmgoVkIsdGhpcyxlKSx0aGlzLm1vdmVDb2x1bW5zKHQscil9aXNNb3ZlUG9zc2libGUodCxlKXtjb25z''@;'; put 'put ''dCByPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaT10Lmxlbmd0aCtlPnIsYT1lPDAsYz10LnNvbWUoQz0+QzwwKSxtPXQuc29tZShDPT5DPj1yKTtyZXR1cm4hKGl8fGF8fGN8fG0pfWlzQ29sdW1uT3JkZXJDaGFuZ2VkKHQsZSl7cmV0''@;'; put 'put ''dXJuIHQuc29tZSgocixpKT0+ci1pIT09ZSl9Y291bnRGaW5hbEluZGV4KHQsZSl7Y29uc3Qgcj1kMCh0LChpLGEpPT4oYTxlJiYoaSs9MSksaSksMCk7cmV0dXJuIGUtcn1nZXRDb2x1bW5zV2lkdGgodCxlKXtjb25zdCByPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyO2xldCBpPTA7Zm9y''@;'; put 'put ''KGxldCBhPXQ7YTw9ZTthKz0xKXtjb25zdCBjPXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhKTthPDA/aSs9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfHwwOm51bGwhPT1jJiYoaSs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRD''@;'; put 'put ''b2x1bW5XaWR0aChjKXx8MCl9cmV0dXJuIGl9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCB0PXRoaXMuaG90LmdldFNldHRpbmdzKClbanJlXTtpZihBcnJheS5pc0FycmF5KHQpKXRoaXMubW92ZUNvbHVtbnModCwwKTtlbHNlIGlmKHZvaWQgMCE9PXQpe2NvbnN0IGU9dGhpcy5wZXJz''@;'; put 'put ''aXN0ZW50U3RhdGVMb2FkKCk7ZS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoZSwwKX19aXNGaXhlZENvbHVtbnNTdGFydCh0KXtyZXR1cm4gdDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''cGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgdD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxv''@;'; put 'put ''YWQiLCJtYW51YWxDb2x1bW5Nb3ZlIix0KSx0LnZhbHVlP3QudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmluZyh0LGUpe2NvbnN0IHI9W107cmV0dXJuIGVvKHQsZSxpPT57ci5wdXNoKGkpfSkscn1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgdD10aGlzLmhvdC52aWV3LmdldEZpcnN0''@;'; put 'put ''RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KHFhKHIzLHRoaXMpKSYmdD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHQtMSwtMSl9KTtjb25zdCBl''@;'; put 'put ''PXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUscj10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGk9Im51bWJlciI9PXR5cGVvZiByLnNjcm9sbFg/ci5zY3JvbGxYOnIuc2Nyb2xsTGVmdDtsZXQgYT10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQr''@;'; put 'put ''dGhpcy5nZXRDb2x1bW5zV2lkdGgoMCxxYShyMyx0aGlzKS0xKTtjb25zdCBjPWUuaGlkZXIub2Zmc2V0V2lkdGgsbT1lLlRCT0RZLm9mZnNldExlZnQsQz1xYShXZCx0aGlzKS5nZXRPZmZzZXQoKS5zdGFydCxQPXFhKFdkLHRoaXMpLmdldFNpemUoKS53aWR0aDtsZXQgWT0wLEo9MDtpZih0''@;'; put 'put ''aGlzLmhvdC5pc1J0bCgpKXtjb25zdCBBZT10aGlzLmhvdC5yb290V2luZG93LEhlPXB1KHRoaXMuaG90LnJvb3RFbGVtZW50KSxYZT1BZS5pbm5lcldpZHRoLXFhKHdTLHRoaXMpLUhlO0o9QWUuaW5uZXJXaWR0aC1xYShaZCx0aGlzKS5ldmVudFBhZ2VYLVhlLSh2b2lkIDA9PT1yLnNjcm9s''@;'; put 'put ''bFg/aTowKX1lbHNlIEo9cWEoWmQsdGhpcykuZXZlbnRQYWdlWC0ocWEod1MsdGhpcyktKHZvaWQgMD09PXIuc2Nyb2xsWD9pOjApKTtpZihxYShCQix0aGlzKSYmKFk9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDb2x1''@;'; put 'put ''bW5IZWFkZXIoLTEpLm9mZnNldFdpZHRoKSx0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQocWEocjMsdGhpcykpJiYoYSs9aSksYSs9WSxxYShyMyx0aGlzKTwwKXFhKFJELHRoaXMpPjA/cWEoWmQsdGhpcykuY29sPTA6cWEoWmQsdGhpcykuY29sPXQ+MD90LTE6dDtlbHNlIGlmKHFhKFpkLHRo''@;'; put 'put ''aXMpLlRELm9mZnNldFdpZHRoLzIrYTw9Sil7Y29uc3QgQWU9cWEocjMsdGhpcyk+PXFhKE5CLHRoaXMpP3FhKE5CLHRoaXMpLTE6cWEocjMsdGhpcyk7cWEoWmQsdGhpcykuY29sPUFlKzEsYSs9cWEoWmQsdGhpcykuVEQub2Zmc2V0V2lkdGh9ZWxzZSBxYShaZCx0aGlzKS5jb2w9cWEocjMs''@;'; put 'put ''dGhpcyk7bGV0IGNlPUosZmU9YTtKK1ArQz49Yz9jZT1jLVAtQzpKK0M8bStZJiYoY2U9bStZK01hdGguYWJzKEMpKSxhPj1jLTE/ZmU9Yy0xOjA9PT1mZT9mZT0xOnZvaWQgMCE9PXIuc2Nyb2xsWCYmcWEocjMsdGhpcyk8cWEoUkQsdGhpcykmJihmZS09cWEod1MsdGhpcyk8PXIuc2Nyb2xs''@;'; put 'put ''WD9xYSh3Uyx0aGlzKTowKSxxYShXZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGNlKSxxYShQOCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGZlKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDp0fT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZW1vdmUiLGU9Pk84KE15LHRoaXMscTd0KS5jYWxsKHRoaXMsZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2V1cCIsKCk9Pk84KE15LHRoaXMsUTd0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhp''@;'; put 'put ''cy5ldmVudE1hbmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7cWEoV2QsdGhpcykuYnVpbGQoKSxxYShQOCx0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXtxYShXZCx0aGlzKS5kZXN0cm95KCkscWEoUDgsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gWDd0KG4s''@;'; put 'put ''dCxlLHIpe2NvbnN0IGk9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxhPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxtPXZvKG4udGFyZ2V0LCJzb3J0QWN0aW9uIik7aWYoIWN8fCFhfHxx''@;'; put 'put ''YShGOCx0aGlzKXx8MCE9PW4uYnV0dG9ufHxtKXJldHVybiBCaChGOCx0aGlzLCExKSxxYShGNSx0aGlzKS5sZW5ndGg9MCx2b2lkIEhhKHRoaXMuaG90LnJvb3RFbGVtZW50LFt6cmUsSEJdKTtjb25zdCBDPXFhKFA4LHRoaXMpLmlzQnVpbHQoKSYmIXFhKFA4LHRoaXMpLmlzQXBwZW5kZWQo''@;'; put 'put ''KSxQPXFhKFdkLHRoaXMpLmlzQnVpbHQoKSYmIXFhKFdkLHRoaXMpLmlzQXBwZW5kZWQoKTtDJiZQJiYocWEoUDgsdGhpcykuYXBwZW5kVG8oaS5oaWRlcikscWEoV2QsdGhpcykuYXBwZW5kVG8oaS5oaWRlcikpO2NvbnN0e2Zyb206WSx0bzpKfT1jLGNlPU1hdGgubWluKFkuY29sLEouY29s''@;'; put 'put ''KSxmZT1NYXRoLm1heChZLmNvbCxKLmNvbCk7aWYodC5yb3c8MCYmdC5jb2w+PWNlJiZ0LmNvbDw9ZmUpe3IuY29sdW1uPSEwLEJoKEY4LHRoaXMsITApO2NvbnN0IEFlPWUuZmlyc3RDaGlsZD9fNWUobixlLmZpcnN0Q2hpbGQpLng6bi5vZmZzZXRYO3FhKFpkLHRoaXMpLmV2ZW50UGFnZVg9''@;'; put 'put ''bi5wYWdlWCxCaChyMyx0aGlzLHQuY29sKSxxYShaZCx0aGlzKS5URD1lLHFhKFpkLHRoaXMpLmNvbD10LmNvbCxCaChGNSx0aGlzLHRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyhjZSxmZSkpLEJoKEJCLHRoaXMsISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpLEJoKE5C''@;'; put 'put ''LHRoaXMsdGhpcy5ob3QuY291bnRDb2xzKCkpLEJoKFJELHRoaXMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCksQmgod1MsdGhpcyxFMSh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdCk7Y29uc3QgSGU9cWEoQkIsdGhpcyk/LTE6MCxYZT1pLmhvbGRlci5zY3Jv''@;'; put 'put ''bGxUb3AraS5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxydD10LmNvbDxxYShSRCx0aGlzKSxkdD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksanQ9TWF0aC5hYnMoQWUtKHRoaXMuaG90LmlzUnRsKCk/ZS5vZmZz''@;'; put 'put ''ZXRXaWR0aDowKSksRnQ9dGhpcy5nZXRDb2x1bW5zV2lkdGgoY2UsdC5jb2wtMSkranQscG49dGhpcy5nZXRDb2x1bW5zV2lkdGgoSGUsY2UtMSkrKHJ0P2R0OjApK0Z0O3FhKFdkLHRoaXMpLnNldFBvc2l0aW9uKFhlLHBuKSxxYShXZCx0aGlzKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dp''@;'; put 'put ''ZHRoKGNlLGZlKSxpLmhpZGVyLm9mZnNldEhlaWdodC1YZSkscWEoV2QsdGhpcykuc2V0T2Zmc2V0KG51bGwsLUZ0KSx0aSh0aGlzLmhvdC5yb290RWxlbWVudCx6cmUpfWVsc2UgSGEodGhpcy5ob3Qucm9vdEVsZW1lbnQsVXJlKSxCaChGOCx0aGlzLCExKSxxYShGNSx0aGlzKS5sZW5ndGg9''@;'; put 'put ''MH1mdW5jdGlvbiBxN3Qobil7cWEoRjgsdGhpcykmJihxYShaZCx0aGlzKS5ldmVudFBhZ2VYPW4ucGFnZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIEo3dChuLHQsZSxyKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpfHwhcWEoRjgsdGhpcyl8fChxYShG''@;'; put 'put ''NSx0aGlzKS5pbmRleE9mKHQuY29sKT4tMT9IYSh0aGlzLmhvdC5yb290RWxlbWVudCxIQik6dGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsSEIpLHIucm93PSEwLHIuY29sdW1uPSEwLHIuY2VsbD0hMCxCaChyMyx0aGlzLHQuY29sKSxxYShaZCx0aGlzKS5URD1lKX1mdW5jdGlvbiBRN3QoKXtj''@;'; put 'put ''b25zdCBuPXFhKFpkLHRoaXMpLmNvbCx0PXFhKEY1LHRoaXMpLmxlbmd0aDtpZihCaChyMyx0aGlzLHZvaWQgMCksQmgoRjgsdGhpcywhMSksSGEodGhpcy5ob3Qucm9vdEVsZW1lbnQsW3pyZSxIQixVcmVdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkm''@;'; put 'put ''JnRpKHRoaXMuaG90LnJvb3RFbGVtZW50LFVyZSksdDwxfHx2b2lkIDA9PT1uKXJldHVybjtjb25zdCBlPXFhKEY1LHRoaXMpWzBdLHI9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihlKSxpPXRoaXMuZHJhZ0NvbHVtbnMocWEoRjUsdGhpcyksbik7aWYocWEoRjUsdGhpcykubGVuZ3RoPTAs''@;'; put 'put ''ITA9PT1pKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpO2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4ocik7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLGErdC0xKX19ZnVuY3Rpb24g''@;'; put 'put ''ZTl0KCl7Y29uc3Qgbj10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLHI9bi5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMStuLmhvbGRlci5zY3JvbGxUb3A7cWEoV2QsdGhpcykuc2V0UG9zaXRpb24ocikscWEoV2QsdGhpcykuc2V0U2l6ZShudWxsLG4uaGlkZXIub2Zmc2V0SGVpZ2h0LXIp''@;'; put 'put ''fWZ1bmN0aW9uIHQ5dCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBzZChuLHQsZSl7TnZlKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBOdmUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2''@;'; put 'put ''YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGJ1KG4sdCxlKXtyZXR1cm4gbi5zZXQoQ3Aobix0KSxlKSxlfWZ1bmN0aW9uIFRhKG4sdCl7cmV0dXJuIG4uZ2V0KENwKG4sdCkpfWZ1bmN0aW9uIENwKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09''@;'; put 'put ''dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBqQj0ibWFudWFsQ29sdW1uUmVzaXplIixWdmU9Im1hbnVhbENvbHVtbldpZHRocyI7''@;'; put 'put ''dmFyIEg1PW5ldyBXZWFrTWFwLHpCPW5ldyBXZWFrTWFwLHoyPW5ldyBXZWFrTWFwLFVCPW5ldyBXZWFrTWFwLFo0PW5ldyBXZWFrTWFwLGk5dD1uZXcgV2Vha01hcCxDUz1uZXcgV2Vha01hcCxXQj1uZXcgV2Vha01hcCxqaD1uZXcgV2Vha01hcCxONT1uZXcgV2Vha01hcCx4eT1uZXcgV2Vh''@;'; put 'put ''a01hcCxaQj1uZXcgV2Vha01hcCxTUz1uZXcgV2Vha01hcCxMRD1uZXcgV2Vha01hcCxVMj1uZXcgV2Vha01hcCxPRD1uZXcgV2Vha01hcCxZND1uZXcgV2Vha1NldDtjbGFzcyBhOXQgZXh0ZW5kcyBNc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gakJ9c3RhdGljIGdldCBQTFVH''@;'; put 'put ''SU5fUFJJT1JJVFkoKXtyZXR1cm4gMTMwfWNvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLGZ1bmN0aW9uIG45dChuLHQpe052ZShuLHQpLHQuYWRkKG4pfSh0aGlzLFk0KSxzZCh0aGlzLEg1LG51bGwpLHNkKHRoaXMsekIsbnVsbCksc2QodGhpcyx6MixbXSksc2QodGhpcyxVQixudWxsKSxzZCh0''@;'; put 'put ''aGlzLFo0LG51bGwpLHNkKHRoaXMsaTl0LG51bGwpLHNkKHRoaXMsQ1MsbnVsbCksc2QodGhpcyxXQixudWxsKSxzZCh0aGlzLGpoLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksc2QodGhpcyxONSx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgiRElWIikpLHNkKHRoaXMseHksbnVsbCksc2QodGhpcyxaQiwhMSksc2QodGhpcyxTUywwKSxzZCh0aGlzLExELG51bGwpLHNkKHRoaXMsVTIsdm9pZCAwKSxzZCh0aGlzLE9ELHZvaWQgMCksdGkoVGEoamgsdGhpcyksIm1hbnVhbENvbHVtblJlc2l6ZXIiKSx0aShUYShONSx0aGlzKSwi''@;'; put 'put ''bWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2pCXX1lbmFibGVQbHVnaW4oKXt2YXIgdD10aGlzO3RoaXMuZW5hYmxl''@;'; put 'put ''ZHx8KGJ1KFUyLHRoaXMsbmV3IHM4KSxUYShVMix0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5DcChZNCx0aGlzLG85dCkuY2FsbCh0aGlzKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLFRhKFUyLHRoaXMpKSx0aGlzLmFkZEhv''@;'; put 'put ''b2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBDcChZNCx0LGg5dCkuY2FsbCh0LC4uLnIpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0''@;'; put 'put ''Y2hpbmdDb2x1bW5XaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gQ3AoWTQsdCxmOXQpLmNhbGwodCwuLi5yKX0sMSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5S''@;'; put 'put ''ZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIENwKFk0LHQscDl0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9''@;'; put 'put ''dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7YnUoT0QsdGhpcyxUYShVMix0aGlzKS5nZXRWYWx1ZXMoKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rl''@;'; put 'put ''ck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLFZ2ZSxUYShVMix0aGlzKS5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbENvbHVtbldpZHRocygpe2Nv''@;'; put 'put ''bnN0IHQ9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIixWdmUsdCksdC52YWx1ZX1zZXRNYW51YWxTaXplKHQsZSl7Y29uc3Qgcj1NYXRoLm1heChlLDIwKSxpPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCk7cmV0dXJuIFRhKFUyLHRoaXMpLnNl''@;'; put 'put ''dFZhbHVlQXRJbmRleChpLHIpLHJ9Y2xlYXJNYW51YWxTaXplKHQpe2NvbnN0IGU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0KTtUYShVMix0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZSxudWxsKX1zZXR1cEhhbmRsZVBvc2l0aW9uKHQpe2lmKCF0LnBhcmVudE5vZGV8fFRhKFNTLHRoaXMp''@;'; put 'put ''PjEpcmV0dXJuO2J1KEg1LHRoaXMsdCk7Y29uc3R7X3d0OmV9PXRoaXMuaG90LnZpZXcscj1lLnd0VGFibGUuZ2V0Q29vcmRzKFRhKEg1LHRoaXMpKSxpPXIuY29sO2lmKGk8MClyZXR1cm47Y29uc3QgYT1IdShUYShINSx0aGlzKSksYz1UYShINSx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJl''@;'; put 'put ''Y3QoKTtsZXQgQztpPGUuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSYmKEM9ZS53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihUYShINSx0aGlzKSxyLnJvdyxyLmNvbCkpLEN8fChDPWUud3RPdmVybGF5cy50b3BP''@;'; put 'put ''dmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKFRhKEg1LHRoaXMpLHIucm93LHIuY29sKSksYnUoekIsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGkpKSxidSh6Mix0aGlzLFtdKTtjb25zdCBQPXRoaXMuaG90LnNlbGVj''@;'; put 'put ''dGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJlAmJlluKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxKPT57ZW8oSi5nZXRUb3BTdGFydENvcm5l''@;'; put 'put ''cigpLmNvbCxKLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxBZT0+e1RhKHoyLHRoaXMpLmluY2x1ZGVzKEFlKXx8VGEoejIsdGhpcykucHVzaChBZSl9KX0pLFRhKHoyLHRoaXMpLmluY2x1ZGVzKFRhKHpCLHRoaXMpKXx8YnUoejIsdGhpcyxbVGEoekIsdGhpcyldKSxidShXQix0aGlzLEMu''@;'; put 'put ''c3RhcnQtNiksYnUoQ1MsdGhpcyxwYXJzZUludChjLndpZHRoLDEwKSksVGEoamgsdGhpcykuc3R5bGUudG9wPWAke0MudG9wfXB4YCxUYShqaCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7VGEoV0IsdGhpcykrVGEoQ1MsdGhpcyl9cHhgLFRhKGpoLHRoaXMpLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1gJHthfXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChUYShqaCx0aGlzKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7VGEoamgsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke1RhKFdCLHRoaXMpK1RhKFVCLHRoaXMpfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24o''@;'; put 'put ''KXtjb25zdCB0PXBhcnNlSW50KEh1KFRhKGpoLHRoaXMpKSwxMCksZT1wYXJzZUludChUYShqaCx0aGlzKS5zdHlsZS50b3AsMTApK3Qscj10aGlzLmhvdC52aWV3LmdldFRhYmxlSGVpZ2h0KCk7dGkoVGEoamgsdGhpcyksImFjdGl2ZSIpLHRpKFRhKE41LHRoaXMpLCJhY3RpdmUiKSxUYShO''@;'; put 'put ''NSx0aGlzKS5zdHlsZS50b3A9YCR7ZX1weGAsdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpLFRhKE41LHRoaXMpLnN0eWxlLmhlaWdodD1yLXQrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChUYShONSx0aGlzKSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXtUYShONSx0''@;'; put 'put ''aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09VGEoamgsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlkZSgpe0hhKFRhKGpoLHRoaXMpLCJhY3RpdmUiKSxIYShUYShONSx0aGlzKSwiYWN0aXZlIil9Y2hlY2tJZkNvbHVtbkhlYWRlcih0KXtjb25zdCBlPUs2''@;'; put 'put ''KHQsWyJUSEVBRCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7dG9wT3ZlcmxheTpyLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTppfT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltyLmNsb25lLnd0VGFibGUuVEhFQUQsaS5jbG9uZS53dFRhYmxlLlRIRUFEXS5pbmNs''@;'; put 'put ''dWRlcyhlKX1nZXRDbG9zZXN0VEhQYXJlbnQodCl7cmV0dXJuIlRBQkxFIiE9PXQudGFnTmFtZT8iVEgiPT09dC50YWdOYW1lP3Q6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQodC5wYXJlbnROb2RlKTpudWxsfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IHQ9KCk9Pnt0aGlzLmhvdC52''@;'; put 'put ''aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfSxlPShyLGkpPT57Y29uc3QgYT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixUYShaNCx0aGlzKSxyLCEwKTt2b2lkIDAhPT1hJiZidShaNCx0aGlzLGEpLHRoaXMuc2V0TWFudWFsU2l6ZShy''@;'; put 'put ''LFRhKFo0LHRoaXMpKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLFRhKFo0LHRoaXMpLHIsITApLGkmJnQoKX07VGEoU1MsdGhpcyk+PTImJihUYSh6Mix0aGlzKS5sZW5ndGg+MT8oWW4oVGEoejIsdGhpcyksaT0+''@;'; put 'put ''e2UoaSl9KSx0KCkpOlluKFRhKHoyLHRoaXMpLGk9PntlKGksITApfSkpLGJ1KFNTLHRoaXMsMCksYnUoTEQsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzp0LHJvb3RFbGVtZW50OmV9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''ZSwibW91c2VvdmVyIixyPT5DcChZNCx0aGlzLHM5dCkuY2FsbCh0aGlzLHIpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUsIm1vdXNlZG93biIscj0+Q3AoWTQsdGhpcyxsOXQpLmNhbGwodGhpcyxyKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0''@;'; put 'put ''LCJtb3VzZW1vdmUiLHI9PkNwKFk0LHRoaXMsYzl0KS5jYWxsKHRoaXMscikpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2V1cCIsKCk9PkNwKFk0LHRoaXMsdTl0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFRhKGpo''@;'; put 'put ''LHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PkNwKFk0LHRoaXMsZDl0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBvOXQoKXtjb25zdCBuPXRoaXMuaG90LmdldFNldHRpbmdzKClbakJdLHQ9dGhpcy5sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCk7dHlw''@;'; put 'put ''ZW9mIHQ8InUiP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dC5mb3JFYWNoKChlLHIpPT57VGEoVTIsdGhpcykuc2V0VmFsdWVBdEluZGV4KHIsZSl9KX0sITApOkFycmF5LmlzQXJyYXkobik/KHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bi5mb3JFYWNoKChlLHIpPT57VGEo''@;'; put 'put ''VTIsdGhpcykuc2V0VmFsdWVBdEluZGV4KHIsZSl9KX0sITApLGJ1KE9ELHRoaXMsbikpOiEwPT09biYmQXJyYXkuaXNBcnJheShUYShPRCx0aGlzKSkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57VGEoT0QsdGhpcykuZm9yRWFjaCgoZSxyKT0+e1RhKFUyLHRoaXMpLnNldFZhbHVl''@;'; put 'put ''QXRJbmRleChyLGUpfSl9LCEwKX1mdW5jdGlvbiBzOXQobil7aWYoIWRKKG4udGFyZ2V0KSYmITAhPT1UYShaQix0aGlzKSYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKG4udGFyZ2V0KSl7Y29uc3QgdD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChuLnRhcmdldCk7aWYoIXQpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGU9dC5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTt0JiYobnVsbD09PWV8fCIxIj09PWUpJiYoVGEoeHksdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0KSl9fWZ1bmN0aW9uIGw5dChuKXtuLnRhcmdldC5wYXJlbnROb2RlPT09dGhpcy5ob3Qucm9vdEVsZW1lbnQmJnZvKG4u''@;'; put 'put ''dGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oVGEoSDUsdGhpcykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksYnUoeHksdGhpcywhMCksbnVsbD09PVRhKExELHRoaXMpJiYoYnUoTEQsdGhpcyxzZXRUaW1lb3V0KCgpPT50aGlzLmFm''@;'; put 'put ''dGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoVGEoTEQsdGhpcykpKSxidShTUyx0aGlzLFRhKFNTLHRoaXMpKzEpLHRoaXMuc3RhcnRYPW4ucGFnZVgsYnUoWjQsdGhpcyxUYShDUyx0aGlzKSkpfWZ1bmN0aW9uIGM5dChuKXtpZihUYSh4eSx0''@;'; put 'put ''aGlzKSl7Y29uc3QgdD0obi5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCk7YnUoVUIsdGhpcyxUYShDUyx0aGlzKSt0KSxZbihUYSh6Mix0aGlzKSxlPT57YnUoWjQsdGhpcyx0aGlzLnNldE1hbnVhbFNpemUoZSxUYShVQix0aGlzKSkpfSksdGhpcy5y''@;'; put 'put ''ZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCl9fWZ1bmN0aW9uIHU5dCgpe2NvbnN0IG49KCk9Pnt0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfSx0PShlLHIpPT57dGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZUNvbHVtblJlc2l6ZSIsVGEoWjQsdGhpcyksZSwhMSksciYmbigpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6ZSIsVGEoWjQsdGhpcyksZSwhMSl9O1RhKHh5LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3Vp''@;'; put 'put ''ZGUoKSxidSh4eSx0aGlzLCExKSxUYShaNCx0aGlzKSE9PVRhKENTLHRoaXMpJiYoVGEoejIsdGhpcykubGVuZ3RoPjE/KFluKFRhKHoyLHRoaXMpLHI9Pnt0KHIpfSksbigpKTpZbihUYSh6Mix0aGlzKSxyPT57dChyLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oVGEoSDUsdGhp''@;'; put 'put ''cykpKX1mdW5jdGlvbiBkOXQoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKFRhKGpoLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChUYShONSx0aGlzKSksYnUoeHksdGhpcywhMSksYnUoWkIsdGhpcywh''@;'; put 'put ''MCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57YnUoWkIsdGhpcywhMSl9KX1mdW5jdGlvbiBoOXQobix0KXtsZXQgZT1uO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3Qgcj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHQpLGk9VGEoVTIsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHIp''@;'; put 'put ''O3RoaXMuaG90LmdldFNldHRpbmdzKClbakJdJiZpJiYoZT1pKX1yZXR1cm4gZX1mdW5jdGlvbiBmOXQobix0KXtjb25zdCBlPVRhKFUyLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHQpKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/ZTpufWZ1bmN0''@;'; put 'put ''aW9uIHA5dCgpe3RoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCl9ZnVuY3Rpb24gV3JlKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBnOXQobil7dmFyIHQ9ZnVuY3Rpb24gbTl0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jb25zdCBNUz0icHgiLHp2ZT1jbGFzcyB2OXR7Y29uc3RydWN0b3IodCl7V3JlKHRoaXMsImhvdCIsdm9pZCAwKSxXcmUodGhpcywiX2VsZW1lbnQiLG51bGwpLFdyZSh0aGlzLCJzdGF0ZSIsMCksdGhpcy5ob3Q9dH1hcHBl''@;'; put 'put ''bmRUbyh0KXt0LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0Fw''@;'; put 'put ''cGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNl''@;'; put 'put ''dFBvc2l0aW9uKHQsZSl7dm9pZCAwIT09dCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wPXQrTVMpLHZvaWQgMCE9PWUmJih0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ9ZStNUyl9Z2V0UG9zaXRpb24oKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUudG9wP3BhcnNlSW50KHRoaXMu''@;'; put 'put ''X2VsZW1lbnQuc3R5bGUudG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdCwxMCk6MH19c2V0U2l6ZSh0LGUpe3QmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPXQrTVMpLGUmJih0aGlzLl9lbGVtZW50LnN0''@;'; put 'put ''eWxlLmhlaWdodD1lK01TKX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5z''@;'; put 'put ''dHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldCh0LGUpe3QmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD10K01TKSxlJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0PWUrTVMpfWdldE9mZnNldCgpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5U''@;'; put 'put ''b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0LDEwKTowfX19LGI5dD1jbGFzcyBfOXQgZXh0ZW5kcyB6dmV7YnVpbGQo''@;'; put 'put ''KXtzdXBlci5idWlsZCgpLHRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQiKX19LFM5dD1jbGFzcyBDOXQgZXh0ZW5kcyB6dmV7YnVpbGQoKXtzdXBlci5idWlsZCgpLHRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUiKX19''@;'; put 'put ''O2Z1bmN0aW9uIHhTKG4sdCxlKXtVdmUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIFV2ZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24g''@;'; put 'put ''RXkobix0LGUpe3JldHVybiBuLnNldChIOChuLHQpLGUpLGV9ZnVuY3Rpb24gam8obix0KXtyZXR1cm4gbi5nZXQoSDgobix0KSl9ZnVuY3Rpb24gSDgobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVSb3dNb3ZlIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUm93TW92ZSIpO2NvbnN0IFlyZT0i''@;'; put 'put ''bWFudWFsUm93TW92ZSIsV3ZlPSJodF9fbWFudWFsUm93TW92ZSIsWUI9InNob3ctdWkiLEdyZT0ib24tbW92aW5nLS1yb3dzIiwkcmU9ImFmdGVyLXNlbGVjdGlvbi0tcm93cyI7dmFyIFlkPW5ldyBXZWFrTWFwLE44PW5ldyBXZWFrTWFwLFY1PW5ldyBXZWFrTWFwLFY4PW5ldyBXZWFrTWFw''@;'; put 'put ''LHpoPW5ldyBXZWFrTWFwLEdCPW5ldyBXZWFrTWFwLFR5PW5ldyBXZWFrU2V0O2NsYXNzIEU5dCBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBNOXQobix0KXtVdmUobix0KSx0LmFkZChuKX0odGhpcyxUeSkseFModGhpcyxZZCxuZXcgYjl0''@;'; put 'put ''KHRoaXMuaG90KSkseFModGhpcyxOOCxuZXcgUzl0KHRoaXMuaG90KSkseFModGhpcyxWNSxbXSkseFModGhpcyxWOCx2b2lkIDApLHhTKHRoaXMsemgse30pLHhTKHRoaXMsR0Isdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWXJlfXN0YXRpYyBnZXQgUExVR0lOX1BS''@;'; put 'put ''SU9SSVRZKCl7cmV0dXJuIDE0MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbWXJlXX1lbmFibGVQbHVnaW4oKXt2YXIgdD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''ZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBIOChUeSx0LFQ5dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIEg4KFR5LHQsazl0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+SDgoVHksdGhpcyxJOXQpLmNhbGwodGhpcykpLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSDgoVHksdCxSOXQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRo''@;'; put 'put ''aXMucmVnaXN0ZXJFdmVudHMoKSx0aSh0aGlzLmhvdC5yb290RWxlbWVudCxXdmUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRh''@;'; put 'put ''dGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7SGEodGhpcy5ob3Qucm9vdEVsZW1lbnQsV3ZlKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxqbyhZZCx0aGlzKS5kZXN0cm95KCksam8oTjgsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlUm93KHQsZSl7cmV0dXJu''@;'; put 'put ''IHRoaXMubW92ZVJvd3MoW3RdLGUpfW1vdmVSb3dzKHQsZSl7Y29uc3Qgcj1qbyhHQix0aGlzKSxpPXRoaXMuaXNNb3ZlUG9zc2libGUodCxlKSxhPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dNb3ZlIix0LGUscixpKTtpZihFeShHQix0aGlzLHZvaWQgMCksITE9PT1hKXJldHVybjtp''@;'; put 'put ''JiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyh0LGUpO2NvbnN0IGM9aSYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZCh0LGUpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIix0LGUscixpLGMpLGN9ZHJhZ1Jvdyh0LGUpe3JldHVybiB0aGlzLmRyYWdS''@;'; put 'put ''b3dzKFt0XSxlKX1kcmFnUm93cyh0LGUpe2NvbnN0IHI9dGhpcy5jb3VudEZpbmFsSW5kZXgodCxlKTtyZXR1cm4gRXkoR0IsdGhpcyxlKSx0aGlzLm1vdmVSb3dzKHQscil9aXNNb3ZlUG9zc2libGUodCxlKXtjb25zdCByPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJ''@;'; put 'put ''bmRleGVzTGVuZ3RoKCksaT10Lmxlbmd0aCtlPnIsYT1lPDAsYz10LnNvbWUoQz0+QzwwKSxtPXQuc29tZShDPT5DPj1yKTtyZXR1cm4hKGl8fGF8fGN8fG0pfWlzUm93T3JkZXJDaGFuZ2VkKHQsZSl7cmV0dXJuIHQuc29tZSgocixpKT0+ci1pIT09ZSl9Y291bnRGaW5hbEluZGV4KHQsZSl7''@;'; put 'put ''Y29uc3Qgcj1kMCh0LChpLGEpPT4oYTxlJiYoaSs9MSksaSksMCk7cmV0dXJuIGUtcn1nZXRSb3dzSGVpZ2h0KHQsZSl7Y29uc3Qgcj10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtsZXQgaT0wO2ZvcihsZXQgYT10O2E8PWU7YSsrKXtjb25zdCBjPXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChhKTtudWxsIT09YyYmKGkrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGMpfHx0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKSl9cmV0dXJuIGl9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCB0PXRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKClbWXJlXTtpZihBcnJheS5pc0FycmF5KHQpKXRoaXMubW92ZVJvd3ModCwwKTtlbHNlIGlmKHZvaWQgMCE9PXQpe2NvbnN0IGU9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7ZS5sZW5ndGgmJnRoaXMubW92ZVJvd3MoZSwwKX19aXNGaXhlZFJvd1RvcCh0KXtyZXR1cm4gdDx0''@;'; put 'put ''aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcH1pc0ZpeGVkUm93Qm90dG9tKHQpe3JldHVybiB0PnRoaXMuaG90LmNvdW50Um93cygpLTEtdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b219cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsUm93TW92ZSIsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtjb25zdCB0PXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIs''@;'; put 'put ''Im1hbnVhbFJvd01vdmUiLHQpLHQudmFsdWU/dC52YWx1ZTpbXX1wcmVwYXJlUm93c1RvTW92aW5nKCl7Y29uc3QgdD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZT1bXTtpZighdClyZXR1cm4gZTtjb25zdHtmcm9tOnIsdG86aX09dDtyZXR1cm4gZW8oTWF0aC5taW4oci5y''@;'; put 'put ''b3csaS5yb3cpLE1hdGgubWF4KHIucm93LGkucm93KSxtPT57ZS5wdXNoKG0pfSksZX1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgdD1qbyh6aCx0aGlzKS5jb29yZHMsZT10aGlzLmhvdC5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLHI9dGhpcy5ob3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJv''@;'; put 'put ''dygpLGk9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5pc0ZpeGVkUm93VG9wKHQucm93KSYmZT4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChlLTEsLTEpKSx0aGlzLmlzRml4ZWRSb3dCb3R0b20o''@;'; put 'put ''dC5yb3cpJiZyPGkmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHIrMSwxKSx2b2lkIDAsITApO2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxjPWpvKHpoLHRoaXMpLlRELG09dGhpcy5o''@;'; put 'put ''b3Qucm9vdEVsZW1lbnQsQz1FMShtKSxQPWdDKG0pLFk9YS5ob2xkZXIuc2Nyb2xsVG9wLGNlPUMudG9wLSh0aGlzLmhvdC5yb290V2luZG93IT09UD9QLnNjcm9sbFRvcDowKSxmZT1qbyh6aCx0aGlzKS5ldmVudFBhZ2VZLWNlK1ksQWU9YS5oaWRlci5vZmZzZXRIZWlnaHQsSGU9YS5UQk9E''@;'; put 'put ''WS5vZmZzZXRUb3AsWGU9am8oWWQsdGhpcykuZ2V0T2Zmc2V0KCkudG9wLHJ0PWpvKFlkLHRoaXMpLmdldFNpemUoKS5oZWlnaHQsZHQ9Yy5vZmZzZXRIZWlnaHQvMixqdD1jLm9mZnNldEhlaWdodDtsZXQgRnQ9dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRIZWlnaHQrdGhpcy5nZXRSb3dz''@;'; put 'put ''SGVpZ2h0KDAsdC5yb3ctMSk7Y29uc3QgcG49ZmU+PUZ0K2R0O3RoaXMuaXNGaXhlZFJvd1RvcCh0LnJvdykmJihGdCs9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksdC5yb3c8MD9qbyh6aCx0aGlzKS5yb3c9ZT4wP2UtMTplOnBu''@;'; put 'put ''Pyhqbyh6aCx0aGlzKS5yb3c9dC5yb3crMSxGdCs9MD09PXQucm93P2p0LTE6anQpOmpvKHpoLHRoaXMpLnJvdz10LnJvdztsZXQgb249ZmUsZ249RnQ7ZmUrcnQrWGU+PUFlP29uPUFlLXJ0LVhlOmZlK1hlPEhlJiYob249SGUrTWF0aC5hYnMoWGUpKSxGdD49QWUtMSYmKGduPUFlLTEpLGpv''@;'; put 'put ''KFlkLHRoaXMpLnNldFBvc2l0aW9uKG9uKSxqbyhOOCx0aGlzKS5zZXRQb3NpdGlvbihnbil9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6dH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCwibW91c2Vtb3Zl''@;'; put 'put ''IixlPT5IOChUeSx0aGlzLEE5dCkuY2FsbCh0aGlzLGUpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsIm1vdXNldXAiLCgpPT5IOChUeSx0aGlzLEQ5dCkuY2FsbCh0aGlzKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9YnVpbGRQ''@;'; put 'put ''bHVnaW5VSSgpe2pvKFlkLHRoaXMpLmJ1aWxkKCksam8oTjgsdGhpcykuYnVpbGQoKX1kZXN0cm95KCl7am8oWWQsdGhpcykuZGVzdHJveSgpLGpvKE44LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFQ5dChuLHQsZSxyKXtjb25zdHt3dFRhYmxlOmksd3RWaWV3''@;'; put 'put ''cG9ydDphfT10aGlzLmhvdC52aWV3Ll93dCxjPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxtPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbXx8IWN8fGpvKFY4LHRoaXMpfHwwIT09bi5idXR0b24pcmV0dXJuIEV5KFY4LHRoaXMsITEp''@;'; put 'put ''LGpvKFY1LHRoaXMpLmxlbmd0aD0wLHZvaWQgSGEodGhpcy5ob3Qucm9vdEVsZW1lbnQsW0dyZSxZQl0pO2NvbnN0IEM9am8oTjgsdGhpcykuaXNCdWlsdCgpJiYham8oTjgsdGhpcykuaXNBcHBlbmRlZCgpLFA9am8oWWQsdGhpcykuaXNCdWlsdCgpJiYham8oWWQsdGhpcykuaXNBcHBlbmRl''@;'; put 'put ''ZCgpO0MmJlAmJihqbyhOOCx0aGlzKS5hcHBlbmRUbyhpLmhpZGVyKSxqbyhZZCx0aGlzKS5hcHBlbmRUbyhpLmhpZGVyKSk7Y29uc3R7ZnJvbTpZLHRvOkp9PW0sY2U9TWF0aC5taW4oWS5yb3csSi5yb3cpLGZlPU1hdGgubWF4KFkucm93LEoucm93KTtpZih0LmNvbDwwJiZ0LnJvdz49Y2Um''@;'; put 'put ''JnQucm93PD1mZSl7ci5yb3c9ITAsRXkoVjgsdGhpcywhMCksam8oemgsdGhpcykuZXZlbnRQYWdlWT1uLnBhZ2VZLGpvKHpoLHRoaXMpLmNvb3Jkcz10LGpvKHpoLHRoaXMpLlREPWUsRXkoVjUsdGhpcyx0aGlzLnByZXBhcmVSb3dzVG9Nb3ZpbmcoKSk7Y29uc3QgQWU9aS5ob2xkZXIuc2Ny''@;'; put 'put ''b2xsTGVmdCthLmdldFJvd0hlYWRlcldpZHRoKCksSGU9dGhpcy5nZXRSb3dzSGVpZ2h0KGNlLHQucm93LTEpKyhuLmNsaWVudFktZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApO2pvKFlkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsQWUpLGpvKFlkLHRoaXMpLnNldFNpemUoaS5oaWRl''@;'; put 'put ''ci5vZmZzZXRXaWR0aC1BZSx0aGlzLmdldFJvd3NIZWlnaHQoY2UsZmUpKSxqbyhZZCx0aGlzKS5zZXRPZmZzZXQoLUhlLG51bGwpLHRpKHRoaXMuaG90LnJvb3RFbGVtZW50LEdyZSksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9ZWxzZSBIYSh0aGlzLmhvdC5yb290RWxlbWVudCwkcmUpLEV5''@;'; put 'put ''KFY4LHRoaXMsITEpLGpvKFY1LHRoaXMpLmxlbmd0aD0wfWZ1bmN0aW9uIEE5dChuKXtqbyhWOCx0aGlzKSYmKGpvKHpoLHRoaXMpLmV2ZW50UGFnZVk9bi5wYWdlWSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSl9ZnVuY3Rpb24gazl0KG4sdCxlLHIpeyF0aGlzLmhvdC5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlQWN0aXZlKCl8fCFqbyhWOCx0aGlzKXx8KGpvKFY1LHRoaXMpLmluZGV4T2YodC5yb3cpPi0xP0hhKHRoaXMuaG90LnJvb3RFbGVtZW50LFlCKTp0aSh0aGlzLmhvdC5yb290RWxlbWVudCxZQiksci5yb3c9ITAsci5jb2x1bW49ITAsci5jZWxsPSEwLGpvKHpoLHRoaXMpLmNvb3Jkcz10''@;'; put 'put ''LGpvKHpoLHRoaXMpLlREPWUpfWZ1bmN0aW9uIEQ5dCgpe2NvbnN0IG49am8oemgsdGhpcykucm93LHQ9am8oVjUsdGhpcykubGVuZ3RoO2lmKEV5KFY4LHRoaXMsITEpLEhhKHRoaXMuaG90LnJvb3RFbGVtZW50LFtHcmUsWUIsJHJlXSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRC''@;'; put 'put ''eVJvd0hlYWRlcigpJiZ0aSh0aGlzLmhvdC5yb290RWxlbWVudCwkcmUpLHQ8MXx8dm9pZCAwPT09bilyZXR1cm47Y29uc3QgZT1qbyhWNSx0aGlzKVswXSxyPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coZSksaT10aGlzLmRyYWdSb3dzKGpvKFY1LHRoaXMpLG4pO2lmKGpvKFY1LHRoaXMpLmxl''@;'; put 'put ''bmd0aD0wLCEwPT09aSl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKTtjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsUm93KHIpO3RoaXMuaG90LnNlbGVjdFJvd3MoYSxhK3QtMSl9fWZ1bmN0aW9u''@;'; put 'put ''IEk5dCgpe2NvbnN0IG49dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxyPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKStuLmhvbGRlci5zY3JvbGxMZWZ0O2pvKFlkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsciksam8oWWQsdGhpcykuc2V0U2l6ZShu''@;'; put 'put ''LmhpZGVyLm9mZnNldFdpZHRoLXIpfWZ1bmN0aW9uIFI5dCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBsZChuLHQsZSl7WnZlKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBadmUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p''@;'; put 'put ''dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHR1KG4sdCxlKXtyZXR1cm4gbi5zZXQoQjUobix0KSxlKSxlfWZ1bmN0aW9uIE1hKG4sdCl7cmV0dXJuIG4uZ2V0KEI1KG4sdCkpfWZ1bmN0aW9uIEI1KG4sdCxlKXtpZigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCAkQj0ibWFudWFsUm93UmVzaXplIixZdmU9Im1h''@;'; put 'put ''bnVhbFJvd0hlaWdodHMiO3ZhciBHND1uZXcgV2Vha01hcCxLQj1uZXcgV2Vha01hcCxXMj1uZXcgV2Vha01hcCxQRD1uZXcgV2Vha01hcCxCOD1uZXcgV2Vha01hcCxLcmU9bmV3IFdlYWtNYXAsRVM9bmV3IFdlYWtNYXAsWEI9bmV3IFdlYWtNYXAsR2Q9bmV3IFdlYWtNYXAsJDQ9bmV3IFdl''@;'; put 'put ''YWtNYXAsQXk9bmV3IFdlYWtNYXAscUI9bmV3IFdlYWtNYXAsVFM9bmV3IFdlYWtNYXAsRkQ9bmV3IFdlYWtNYXAsU3A9bmV3IFdlYWtNYXAsSEQ9bmV3IFdlYWtNYXAsajg9bmV3IFdlYWtTZXQ7Y2xhc3MgUDl0IGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuICRC''@;'; put 'put ''fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwfWNvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLGZ1bmN0aW9uIEw5dChuLHQpe1p2ZShuLHQpLHQuYWRkKG4pfSh0aGlzLGo4KSxsZCh0aGlzLEc0LG51bGwpLGxkKHRoaXMsS0IsbnVsbCksbGQodGhpcyxXMixbXSksbGQodGhp''@;'; put 'put ''cyxQRCxudWxsKSxsZCh0aGlzLEI4LG51bGwpLGxkKHRoaXMsS3JlLG51bGwpLGxkKHRoaXMsRVMsbnVsbCksbGQodGhpcyxYQixudWxsKSxsZCh0aGlzLEdkLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksbGQodGhpcywkNCx0aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCgiRElWIikpLGxkKHRoaXMsQXksITEpLGxkKHRoaXMscUIsITEpLGxkKHRoaXMsVFMsMCksbGQodGhpcyxGRCxudWxsKSxsZCh0aGlzLFNwLHZvaWQgMCksbGQodGhpcyxIRCx2b2lkIDApLHRpKE1hKEdkLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyIiksdGkoTWEo''@;'; put 'put ''JDQsdGhpcyksIm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVskQl19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwo''@;'; put 'put ''dHUoU3AsdGhpcyxuZXcgczgpLE1hKFNwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PkI1KGo4LHRoaXMsejl0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsTWEoU3AsdGhpcykpLHRoaXMuYWRkSG9vaygibW9k''@;'; put 'put ''aWZ5Um93SGVpZ2h0IiwodCxlKT0+QjUoajgsdGhpcyxqOXQpLmNhbGwodGhpcyx0LGUpKSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVn''@;'; put 'put ''aW4oKX1kaXNhYmxlUGx1Z2luKCl7dHUoSEQsdGhpcyxNYShTcCx0aGlzKS5nZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsUm93SGVpZ2h0cygpe3RoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIixZdmUsTWEoU3AsdGhpcykuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxSb3dIZWlnaHRzKCl7Y29uc3QgdD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLFl2ZSx0KSx0LnZhbHVlfXNldE1hbnVh''@;'; put 'put ''bFNpemUodCxlKXtjb25zdCByPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codCksaT1NYXRoLm1heChlLHRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKTtyZXR1cm4gTWEoU3AsdGhpcykuc2V0VmFsdWVBdEluZGV4KHIsaSksaX1nZXRMYXN0RGVzaXJlZFJvd0hl''@;'; put 'put ''aWdodCgpe3JldHVybiBNYShQRCx0aGlzKX1zZXR1cEhhbmRsZVBvc2l0aW9uKHQpe2lmKE1hKFRTLHRoaXMpPjEpcmV0dXJuO3R1KEc0LHRoaXMsdCk7Y29uc3R7dmlldzplfT10aGlzLmhvdCx7X3d0OnJ9PWUsaT1yLnd0VGFibGUuZ2V0Q29vcmRzKE1hKEc0LHRoaXMpKSxhPWkucm93O2lm''@;'; put 'put ''KGE8MClyZXR1cm47Y29uc3QgYz1wdShNYShHNCx0aGlzKSksbT1NYShHNCx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxDPWE8ci5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxQPWE+PWUuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKDAsMSktci5nZXRTZXR0aW5nKCJmaXhlZFJv''@;'; put 'put ''d3NCb3R0b20iKTtsZXQgWTtDP1k9ci53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihNYShHNCx0aGlzKSxpLnJvdyxpLmNvbCk6UCYmKFk9ci53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRS''@;'; put 'put ''ZWxhdGl2ZUNlbGxQb3NpdGlvbihNYShHNCx0aGlzKSxpLnJvdyxpLmNvbCkpLFl8fChZPXIud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoRzQsdGhpcyksaS5yb3csaS5jb2wpKSx0dShLQix0aGlzLHRoaXMuaG90LnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSkpLHR1KFcyLHRoaXMsW10pO2NvbnN0IEo9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlz''@;'; put 'put ''U2VsZWN0ZWQoKSYmSiYmWW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLGZlPT57ZW8oZmUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZmUuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3csWGU9PntNYShXMix0aGlzKS5pbmNsdWRlcyhYZSl8fE1hKFcyLHRoaXMpLnB1c2goWGUpfSl9''@;'; put 'put ''KSxNYShXMix0aGlzKS5pbmNsdWRlcyhNYShLQix0aGlzKSl8fHR1KFcyLHRoaXMsW01hKEtCLHRoaXMpXSksdHUoWEIsdGhpcyxZLnRvcC02KSx0dShFUyx0aGlzLHBhcnNlSW50KG0uaGVpZ2h0LDEwKSksTWEoR2QsdGhpcykuc3R5bGUudG9wPWAke01hKFhCLHRoaXMpK01hKEVTLHRoaXMp''@;'; put 'put ''fXB4YCxNYShHZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7WS5zdGFydH1weGAsTWEoR2QsdGhpcykuc3R5bGUud2lkdGg9YCR7Y31weGAsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoTWEoR2QsdGhpcykpfXJlZnJlc2hIYW5kbGVQb3NpdGlvbigpe01hKEdkLHRo''@;'; put 'put ''aXMpLnN0eWxlLnRvcD1gJHtNYShYQix0aGlzKStNYShQRCx0aGlzKX1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgdD1wYXJzZUludChwdShNYShHZCx0aGlzKSksMTApLGU9cGFyc2VJbnQoTWEoR2QsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdLDEwKSt0LHI9dGhpcy5ob3Qu''@;'; put 'put ''dmlldy5nZXRUYWJsZVdpZHRoKCk7dGkoTWEoR2QsdGhpcyksImFjdGl2ZSIpLHRpKE1hKCQ0LHRoaXMpLCJhY3RpdmUiKSxNYSgkNCx0aGlzKS5zdHlsZS50b3A9TWEoR2QsdGhpcykuc3R5bGUudG9wLE1hKCQ0LHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtlfXB4YCxNYSgkNCx0''@;'; put 'put ''aGlzKS5zdHlsZS53aWR0aD1yLXQrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChNYSgkNCx0aGlzKSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXtNYSgkNCx0aGlzKS5zdHlsZS50b3A9TWEoR2QsdGhpcykuc3R5bGUudG9wfWhpZGVIYW5kbGVBbmRHdWlkZSgpe0hhKE1h''@;'; put 'put ''KEdkLHRoaXMpLCJhY3RpdmUiKSxIYShNYSgkNCx0aGlzKSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcih0KXtjb25zdCBlPUs2KHQsWyJUQk9EWSJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7aW5saW5lU3RhcnRPdmVybGF5OnIsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmksYm90''@;'; put 'put ''dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmF9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW3IuY2xvbmUud3RUYWJsZS5UQk9EWSxpLmNsb25lLnd0VGFibGUuVEJPRFksYS5jbG9uZS53dFRhYmxlLlRCT0RZXS5pbmNsdWRlcyhlKX1nZXRDbG9zZXN0VEhQYXJlbnQo''@;'; put 'put ''dCl7cmV0dXJuIlRBQkxFIiE9PXQudGFnTmFtZT8iVEgiPT09dC50YWdOYW1lP3Q6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQodC5wYXJlbnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodCh0KXtjb25zdCBlPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KHQpO3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT1lJiZNYShCOCx0aGlzKTxlP2U6TWEoQjgsdGhpcyl9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgdD0oKT0+e3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9LGU9KHIsaSk9Pntjb25zdCBhPXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KHIpLHIsITApO3ZvaWQgMCE9PWEmJnR1KEI4LHRoaXMsYSksdGhpcy5zZXRNYW51YWxTaXplKHIsTWEoQjgsdGhpcykpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1''@;'; put 'put ''YWxSb3dIZWlnaHQociksciwhMCksaSYmdCgpfTtNYShUUyx0aGlzKT49MiYmKE1hKFcyLHRoaXMpLmxlbmd0aD4xPyhZbihNYShXMix0aGlzKSxpPT57ZShpKX0pLHQoKSk6WW4oTWEoVzIsdGhpcyksaT0+e2UoaSwhMCl9KSksdHUoVFMsdGhpcywwKSx0dShGRCx0aGlzLG51bGwpfWJpbmRF''@;'; put 'put ''dmVudHMoKXtjb25zdHtyb290RWxlbWVudDp0LHJvb3RXaW5kb3c6ZX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LCJtb3VzZW92ZXIiLHI9PkI1KGo4LHRoaXMsRjl0KS5jYWxsKHRoaXMscikpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIodCwibW91c2Vkb3duIixyPT5CNShqOCx0aGlzLEg5dCkuY2FsbCh0aGlzLHIpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGUsIm1vdXNlbW92ZSIscj0+QjUoajgsdGhpcyxOOXQpLmNhbGwodGhpcyxyKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihlLCJtb3VzZXVwIiwoKT0+QjUoajgsdGhpcyxWOXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoTWEoR2QsdGhpcyksImNvbnRleHRtZW51IiwoKT0+QjUoajgsdGhpcyxCOXQpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9''@;'; put 'put ''fWZ1bmN0aW9uIEY5dChuKXtpZighZEoobi50YXJnZXQpJiYhMCE9PU1hKHFCLHRoaXMpJiZ0aGlzLmNoZWNrSWZSb3dIZWFkZXIobi50YXJnZXQpKXtjb25zdCB0PXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KG4udGFyZ2V0KTt0JiYoTWEoQXksdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3Np''@;'; put 'put ''dGlvbih0KSl9fWZ1bmN0aW9uIEg5dChuKXt2byhuLnRhcmdldCwibWFudWFsUm93UmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKE1hKEc0LHRoaXMpKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLHR1KEF5LHRoaXMsITApLG51bGw9PT1NYShGRCx0aGlzKSYmKHR1KEZE''@;'; put 'put ''LHRoaXMsc2V0VGltZW91dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KE1hKEZELHRoaXMpKSksdHUoVFMsdGhpcyxNYShUUyx0aGlzKSsxKSx0dShLcmUsdGhpcyxuLnBhZ2VZKSx0dShCOCx0aGlzLE1hKEVTLHRoaXMp''@;'; put 'put ''KSl9ZnVuY3Rpb24gTjl0KG4pe01hKEF5LHRoaXMpJiYodHUoUEQsdGhpcyxNYShFUyx0aGlzKSsobi5wYWdlWS1NYShLcmUsdGhpcykpKSxZbihNYShXMix0aGlzKSx0PT57dHUoQjgsdGhpcyx0aGlzLnNldE1hbnVhbFNpemUodCxNYShQRCx0aGlzKSkpfSksdGhpcy5yZWZyZXNoSGFuZGxl''@;'; put 'put ''UG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCkpfWZ1bmN0aW9uIFY5dCgpe2NvbnN0IG49KCk9Pnt0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfSx0PShlLHIpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6''@;'; put 'put ''ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZSksZSwhMSksciYmbigpLHRoaXMuc2F2ZU1hbnVhbFJvd0hlaWdodHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGUpLGUsITEpfTtNYShBeSx0aGlzKSYmKHRoaXMuaGlkZUhh''@;'; put 'put ''bmRsZUFuZEd1aWRlKCksdHUoQXksdGhpcywhMSksTWEoQjgsdGhpcykhPT1NYShFUyx0aGlzKSYmKE1hKFcyLHRoaXMpLmxlbmd0aD4xPyhZbihNYShXMix0aGlzKSxyPT57dChyKX0pLG4oKSk6WW4oTWEoVzIsdGhpcykscj0+e3QociwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9u''@;'; put 'put ''KE1hKEc0LHRoaXMpKSl9ZnVuY3Rpb24gQjl0KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChNYShHZCx0aGlzKSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoTWEoJDQsdGhpcykpLHR1KEF5LHRoaXMsITEpLHR1''@;'; put 'put ''KHFCLHRoaXMsITApLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3R1KHFCLHRoaXMsITEpfSl9ZnVuY3Rpb24gajl0KG4sdCl7bGV0IGU9bjtpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGk9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KSxhPU1hKFNwLHRoaXMpLmdldFZhbHVlQXRJ''@;'; put 'put ''bmRleChpKTt2YXIgcjt0aGlzLmhvdC5nZXRTZXR0aW5ncygpWyRCXSYmYSYmKGU9bnVsbCE9PShyPXRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSkmJnZvaWQgMCE9PXImJnIuaXNFbmFibGVkKCk/TWF0aC5tYXgoYSxlPz8wKTphKX1yZXR1cm4gZX1mdW5jdGlvbiB6OXQoKXtj''@;'; put 'put ''b25zdCBuPXRoaXMuaG90LmdldFNldHRpbmdzKClbJEJdLHQ9dGhpcy5sb2FkTWFudWFsUm93SGVpZ2h0cygpO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dHlwZW9mIHQ8InUiP3QuZm9yRWFjaCgoZSxyKT0+e01hKFNwLHRoaXMpLnNldFZhbHVlQXRJbmRleChyLGUpfSk6QXJyYXku''@;'; put 'put ''aXNBcnJheShuKT8obi5mb3JFYWNoKChlLHIpPT57TWEoU3AsdGhpcykuc2V0VmFsdWVBdEluZGV4KHIsZSl9KSx0dShIRCx0aGlzLG4pKTohMD09PW4mJkFycmF5LmlzQXJyYXkoTWEoSEQsdGhpcykpJiZNYShIRCx0aGlzKS5mb3JFYWNoKChlLHIpPT57TWEoU3AsdGhpcykuc2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KHIsZSl9KX0sITApfWZ1bmN0aW9uIGt5KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBaOXQobil7dmFyIHQ9ZnVuY3Rpb24gWTl0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7''@;'; put 'put ''dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4p''@;'; put 'put ''fShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5jdGlvbiBHdmUobix0KXtyZXR1''@;'; put 'put ''cm4gbi5nZXQoJHZlKG4sdCkpfWZ1bmN0aW9uIEpCKG4sdCxlKXtyZXR1cm4gbi5zZXQoJHZlKG4sdCksZSksZX1mdW5jdGlvbiAkdmUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWQoNjgxNDYpLGQoNzQ5OSk7dmFyIER5PW5ldyBXZWFrTWFwO2NvbnN0IEs0PWNsYXNzIEc5dHtjb25zdHJ1Y3Rvcih0LGUscixpLGEsYyl7a3kodGhpcywicm93Iix2b2lkIDApLGt5KHRo''@;'; put 'put ''aXMsImNvbCIsdm9pZCAwKSxreSh0aGlzLCJyb3dzcGFuIix2b2lkIDApLGt5KHRoaXMsImNvbHNwYW4iLHZvaWQgMCksa3kodGhpcywicmVtb3ZlZCIsITEpLGt5KHRoaXMsImNlbGxDb29yZHNGYWN0b3J5Iix2b2lkIDApLGt5KHRoaXMsImNlbGxSYW5nZUZhY3RvcnkiLHZvaWQgMCksZnVu''@;'; put 'put ''Y3Rpb24gVTl0KG4sdCxlKXsoZnVuY3Rpb24gVzl0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5zZXQobixlKX0odGhpcyxEeSxudWxs''@;'; put 'put ''KSx0aGlzLnJvdz10LHRoaXMuY29sPWUsdGhpcy5yb3dzcGFuPXIsdGhpcy5jb2xzcGFuPWksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1hLHRoaXMuY2VsbFJhbmdlRmFjdG9yeT1jfXN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyh0KXtsZXR7cm93OmUsY29sOnIscm93c3BhbjppLGNv''@;'; put 'put ''bHNwYW46YX09dDtyZXR1cm4gZWxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIHdpdGgge3JvdzogJHtlfSwgY29sOiAke3J9LFx4MjAKICAgICAgcm93c3BhbjogJHtpfSwgY29sc3BhbjogJHthfX0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4MjAKICAgICAgbm90IHN1''@;'; put 'put ''cHBvcnRlZC4gSXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKHQpe2xldHtyb3c6ZSxjb2w6cn09dDtyZXR1cm4gZWxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2V9LCAke3J9XSBpcyBwb3NpdGlv''@;'; put 'put ''bmVkXHgyMAogICAgICAob3IgcG9zaXRpb25lZCBwYXJ0aWFsbHkpIG91dHNpZGUgb2YgdGhlIHRhYmxlIHJhbmdlLiBJdCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlIGZpeCB5b3VyIHNldHVwLmB9c3RhdGljIElTX1NJTkdMRV9DRUxMKHQpe2xldHtyb3c6ZSxjb2w6cn09''@;'; put 'put ''dDtyZXR1cm4gZWxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2V9LCAke3J9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8g''@;'; put 'put ''dGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcodCl7bGV0e3JvdzplLGNvbDpyfT10O3JldHVybiBlbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7ZX0sICR7cn1dIGhhcyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAi''@;'; put 'put ''MCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKHQpe2xldHtyb3c6ZSxjb2w6cixyb3dzcGFuOmksY29sc3BhbjphfT10O3JldHVybiBlPDB8fHI8MHx8aTwwfHxhPDB9''@;'; put 'put ''c3RhdGljIGlzU2luZ2xlQ2VsbCh0KXtsZXR7cm93c3BhbjplLGNvbHNwYW46cn09dDtyZXR1cm4gMT09PXImJjE9PT1lfXN0YXRpYyBjb250YWluc1plcm9TcGFuKHQpe2xldHtyb3dzcGFuOmUsY29sc3BhbjpyfT10O3JldHVybiAwPT09cnx8MD09PWV9c3RhdGljIGlzT3V0T2ZCb3VuZHMo''@;'; put 'put ''dCxlLHIpe3JldHVybiB0LnJvdzwwfHx0LmNvbDwwfHx0LnJvdz49ZXx8dC5yb3crdC5yb3dzcGFuLTE+PWV8fHQuY29sPj1yfHx0LmNvbCt0LmNvbHNwYW4tMT49cn1ub3JtYWxpemUodCl7Y29uc3QgZT10LmNvdW50Um93cygpLHI9dC5jb3VudENvbHMoKTt0aGlzLnJvdzwwP3RoaXMucm93''@;'; put 'put ''PTA6dGhpcy5yb3c+ZS0xJiYodGhpcy5yb3c9ZS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6dGhpcy5jb2w+ci0xJiYodGhpcy5jb2w9ci0xKSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+ZS0xJiYodGhpcy5yb3dzcGFuPWUtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMuY29sc3Bhbj5yLTEmJih0''@;'; put 'put ''aGlzLmNvbHNwYW49ci10aGlzLmNvbCksSkIoRHksdGhpcyxudWxsKX1pbmNsdWRlcyh0LGUpe3JldHVybiB0aGlzLnJvdzw9dCYmdGhpcy5jb2w8PWUmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj10JiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49ZX1pbmNsdWRlc0hvcml6b250YWxseSh0''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jb2w8PXQmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj10fWluY2x1ZGVzVmVydGljYWxseSh0KXtyZXR1cm4gdGhpcy5yb3c8PXQmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj10fXNoaWZ0KHQsZSl7Y29uc3Qgcj10WzBdfHx0WzFdLGk9ZStNYXRoLmFicyh0WzBd''@;'; put 'put ''fHx0WzFdKS0xLGE9dFswXT8iY29sc3BhbiI6InJvd3NwYW4iLGM9dFswXT8iY29sIjoicm93IixtPU1hdGgubWluKGUsaSksQz1NYXRoLm1heChlLGkpLFA9dGhpc1tjXSxZPXRoaXNbY10rdGhpc1thXS0xO2lmKFA+PWUmJih0aGlzW2NdKz1yKSxyPjApZTw9WSYmZT5QJiYodGhpc1thXSs9''@;'; put 'put ''cik7ZWxzZSBpZihyPDApe2lmKG08PVAmJkM+PVkpcmV0dXJuIHRoaXMucmVtb3ZlZD0hMCxKQihEeSx0aGlzLG51bGwpLCExO2lmKFA+PW0mJlA8PUMpe2NvbnN0IEo9Qy1QKzEsY2U9TWF0aC5hYnMociktSjt0aGlzW2NdLT1jZStyLHRoaXNbYV0tPUp9ZWxzZSBQPD1tJiZZPj1DP3RoaXNb''@;'; put 'put ''YV0rPXI6UDw9bSYmWT49bSYmWTxDJiYodGhpc1thXS09WS1tKzEpfXJldHVybiBKQihEeSx0aGlzLG51bGwpLCEwfWlzRmFydGhlcih0LGUpe3JldHVybiF0fHwoImRvd24iPT09ZT90LnJvdyt0LnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09ZT90LnJvdz50aGlz''@;'; put 'put ''LnJvdzoicmlnaHQiPT09ZT90LmNvbCt0LmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT1lP3QuY29sPnRoaXMuY29sOm51bGwpfWdldExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNv''@;'; put 'put ''bCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiBHdmUoRHksdGhpcyl8fEpCKER5LHRoaXMsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wp''@;'; put 'put ''LHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5nZXRMYXN0Um93KCksdGhpcy5nZXRMYXN0Q29sdW1uKCkpKSksR3ZlKER5LHRoaXMpfX07ZnVuY3Rpb24gUUIobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIFg5dChuKXt2YXIgdD1mdW5jdGlvbiBxOXQobix0KXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWZ1bmN0aW9uIEl5KG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgejg9bmV3IFdlYWtTZXQ7Y2xhc3MgZWp7Y29uc3RydWN0b3IodCl7KGZ1bmN0aW9uICQ5dChuLHQpeyhmdW5jdGlvbiBLOXQobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0''@;'; put 'put ''aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LmFkZChuKX0pKHRoaXMsejgpLFFCKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxRQih0aGlzLCJtZXJnZWRDZWxscyIsW10pLFFCKHRoaXMsIm1lcmdlZENlbGxzTWF0cml4IixuZXcgTWFwKSxRQih0''@;'; put 'put ''aGlzLCJob3QiLHZvaWQgMCksdGhpcy5wbHVnaW49dCx0aGlzLmhvdD10LmhvdH1zdGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyh0KXtsZXR7cm93OmUsY29sOnJ9PXQ7cmV0dXJuIGVsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtlfSwgJHtyfV0sIG92ZXJsYXBzXHgyMAog''@;'; put 'put ''ICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJnZWQgY2VsbC4gVGhlIG92ZXJsYXBwaW5nIG1lcmdlZCBjZWxsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2VceDIwCiAgICAgIGZpeCB5b3VyIHNldHVwLmB9Z2V0KHQsZSl7dmFyIHI7cmV0dXJuISghdGhpcy5tZXJn''@;'; put 'put ''ZWRDZWxsc01hdHJpeC5oYXModCl8fG51bGw9PT0ocj10aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldCh0KS5nZXQoZSkpfHx2b2lkIDA9PT1yKSYmcn1nZXRCeVJhbmdlKHQpe2NvbnN0e3JvdzplLGNvbDpyfT10LmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzppLGNvbDphfT10LmdldEJvdHRv''@;'; put 'put ''bUVuZENvcm5lcigpLGM9dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7bGV0IG09ITE7Zm9yKGxldCBDPTA7QzxjO0MrKyl7Y29uc3QgUD10aGlzLm1lcmdlZENlbGxzW0NdLHtyb3c6WSxjb2w6Sixyb3dzcGFuOmNlLGNvbHNwYW46ZmV9PVA7aWYoWT49ZSYmWStjZS0xPD1pJiZKPj1yJiZKK2Zl''@;'; put 'put ''LTE8PWEpe209UDticmVha319cmV0dXJuIG19ZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKHQpe2NvbnN0IGU9bmV3IFNldDtyZXR1cm4gdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKGk9Pntjb25zdHtyb3c6YSxjb2w6Yyxjb2xzcGFuOm0scm93c3BhbjpDfT1pO2ZvcihsZXQgUD1hO1A8''@;'; put 'put ''YStDO1ArKylmb3IobGV0IFk9YztZPGMrbTtZKyspZS5hZGQoYHIke1B9LGMke1l9YCl9KSx0LmZpbHRlcihpPT57Y29uc3R7cm93OmEsY29sOmMsY29sc3BhbjptLHJvd3NwYW46Q309aSxQPW5ldyBTZXQ7bGV0IFk9ITE7Zm9yKGxldCBKPWE7SjxhK0M7SisrKXtmb3IobGV0IGNlPWM7Y2U8''@;'; put 'put ''YyttO2NlKyspe2NvbnN0IGZlPWByJHtKfSxjJHtjZX1gO2lmKGUuaGFzKGZlKSl7b3MoZWouSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhpKSksWT0hMDticmVha31QLmFkZChmZSl9aWYoWSlicmVha31yZXR1cm4gWXx8ZS5hZGQoLi4uUCksIVl9KX1nZXRXaXRoaW5SYW5nZSh0KXtsZXQgZT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0e3JvdzpyLGNvbDppfT10LmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzphLGNvbDpjfT10LmdldEJvdHRvbUVuZENvcm5lcigpLG09W107Zm9yKGxldCBDPXI7Qzw9YTtDKyspZm9yKGxl''@;'; put 'put ''dCBQPWk7UDw9YztQKyspe2NvbnN0IFk9dGhpcy5nZXQoQyxQKTtZJiYoZXx8IWUmJlkucm93PT09QyYmWS5jb2w9PT1QKSYmbS5wdXNoKFkpfXJldHVybiBtfWFkZCh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0''@;'; put 'put ''IHI9dC5yb3csaT10LmNvbCxtPW5ldyBLNChyLGksdC5yb3dzcGFuLHQuY29sc3Bhbix0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKSxDPXRoaXMuZ2V0KHIsaSksUD0hZSYmdGhpcy5pc092ZXJsYXBwaW5nKG0pO3JldHVybiBDfHxQPyhQJiZv''@;'; put 'put ''cyhlai5JU19PVkVSTEFQUElOR19XQVJOSU5HKG0pKSwhMSk6KHRoaXMuaG90JiZtLm5vcm1hbGl6ZSh0aGlzLmhvdCksdGhpcy5tZXJnZWRDZWxscy5wdXNoKG0pLEl5KHo4LHRoaXMsS3ZlKS5jYWxsKHRoaXMsbSksbSl9cmVtb3ZlKHQsZSl7Y29uc3Qgcj10aGlzLmdldCh0LGUpLGk9cj90''@;'; put 'put ''aGlzLm1lcmdlZENlbGxzLmluZGV4T2Yocik6LTE7cmV0dXJuISghcnx8LTE9PT1pKSYmKHRoaXMubWVyZ2VkQ2VsbHMuc3BsaWNlKGksMSksSXkoejgsdGhpcyxKOXQpLmNhbGwodGhpcyxyKSxyKX1jbGVhcigpe1luKHRoaXMubWVyZ2VkQ2VsbHMsdD0+e2xldHtyb3c6ZSxjb2w6cixyb3dz''@;'; put 'put ''cGFuOmksY29sc3BhbjphfT10O2VvKGUsZStpLGM9PntlbyhyLHIrYSxtPT57Y29uc3QgQz10aGlzLmhvdC5nZXRDZWxsKGMsbSk7QyYmKEMucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksQy5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxDLnN0eWxlLmRpc3BsYXk9IiIpfSl9KX0pLHRo''@;'; put 'put ''aXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAsdGhpcy5tZXJnZWRDZWxsc01hdHJpeD1uZXcgTWFwfWlzT3ZlcmxhcHBpbmcodCl7Y29uc3QgZT10LmdldFJhbmdlKCk7Zm9yKGxldCByPTA7cjx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtyKyspaWYodGhpcy5tZXJnZWRDZWxsc1tyXS5nZXRSYW5n''@;'; put 'put ''ZSgpLm92ZXJsYXBzKGUpKXJldHVybiEwO3JldHVybiExfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbCh0LGUpe2NvbnN0IHI9dGhpcy5nZXQodCxlKTtpZighcilyZXR1cm4hMTtjb25zdHtyb3c6aSxjb2w6YSxyb3dzcGFuOmMsY29sc3BhbjptfT1yLEM9dGhpcy5ob3Qudmlldy5nZXRB''@;'; put 'put ''Y3RpdmVPdmVybGF5TmFtZSgpLFA9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEMpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSxZPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5l''@;'; put 'put ''X3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEMpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxKPWdzKFAsaSxpK2MtMSksY2U9Z3MoWSxhLGErbS0xKTtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEosMSk9''@;'; put 'put ''PT10JiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSk9PT1lfWdldEZpcnN0UmVuZGVyYWJsZUNvb3Jkcyh0LGUpe2NvbnN0IHI9dGhpcy5nZXQodCxlKTtpZighcnx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwodCxlKSly''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModCxlKTtjb25zdCBpPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChyLnJvdywxKSxhPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChyLmNvbCwx''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaSxhKX1nZXRTdGFydE1vc3RDb2x1bW5JbmRleCh0LGUpe2NvbnN0IHI9SXkoejgsdGhpcyx0aikuY2FsbCh0aGlzLHQsImNvbCIsLTEpO2xldCBpPWU7Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspaWYoclthXTw9ZSl7aT1y''@;'; put 'put ''W2FdO2JyZWFrfXJldHVybiBpfWdldEVuZE1vc3RDb2x1bW5JbmRleCh0LGUpe2NvbnN0IHI9SXkoejgsdGhpcyx0aikuY2FsbCh0aGlzLHQsImNvbCIsMSk7bGV0IGk9ZTtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKylpZihyW2FdPj1lKXtpPXJbYV07YnJlYWt9cmV0dXJuIGl9Z2V0VG9w''@;'; put 'put ''TW9zdFJvd0luZGV4KHQsZSl7Y29uc3Qgcj1JeSh6OCx0aGlzLHRqKS5jYWxsKHRoaXMsdCwicm93IiwtMSk7bGV0IGk9ZTtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKylpZihyW2FdPD1lKXtpPXJbYV07YnJlYWt9cmV0dXJuIGl9Z2V0Qm90dG9tTW9zdFJvd0luZGV4KHQsZSl7Y29uc3Qg''@;'; put 'put ''cj1JeSh6OCx0aGlzLHRqKS5jYWxsKHRoaXMsdCwicm93IiwxKTtsZXQgaT1lO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHJbYV0+PWUpe2k9clthXTticmVha31yZXR1cm4gaX1zaGlmdENvbGxlY3Rpb25zKHQsZSxyKXtjb25zdCBpPVswLDBdO3N3aXRjaCh0KXtjYXNlInJpZ2h0''@;'; put 'put ''IjppWzBdKz1yO2JyZWFrO2Nhc2UibGVmdCI6aVswXS09cjticmVhaztjYXNlImRvd24iOmlbMV0rPXI7YnJlYWs7Y2FzZSJ1cCI6aVsxXS09cn1jb25zdCBhPVtdO3RoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaChjPT57Yy5zaGlmdChpLGUpLGMucmVtb3ZlZCYmYS5wdXNoKGMpfSksYS5mb3JF''@;'; put 'put ''YWNoKGM9Pnt0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoYyksMSl9KSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmNsZWFyKCksdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKGM9PntJeSh6OCx0aGlzLEt2ZSkuY2FsbCh0aGlzLGMpfSl9fWZ1bmN0aW9u''@;'; put 'put ''IHRqKG4sdCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7Y29uc3Qgcj1uZXcgTWFwLGk9MT09PWU/bi5nZXRUb3BTdGFydENvcm5lcigpOm4uZ2V0Qm90dG9tRW5kQ29ybmVyKCksYT0xPT09ZT9uLmdldEJvdHRvbUVuZENv''@;'; put 'put ''cm5lcigpOm4uZ2V0VG9wU3RhcnRDb3JuZXIoKTtmb3IobGV0IGM9aS5yb3c7MT09PWU/Yzw9YS5yb3c6Yz49YS5yb3c7Yys9ZSlmb3IobGV0IG09aS5jb2w7MT09PWU/bTw9YS5jb2w6bT49YS5jb2w7bSs9ZSl7Y29uc3QgQz0icm93Ij09PXQ/YzptLFA9dGhpcy5nZXQoYyxtKTtsZXQgWT1D''@;'; put 'put ''O1AmJihZPTE9PT1lP1BbdF0rUFtgJHt0fXNwYW5gXS0xOlBbdF0pLHIuaGFzKEMpfHxyLnNldChDLG5ldyBTZXQpLHIuZ2V0KEMpLmFkZChZKX1yZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KEFycmF5LmZyb20oci5lbnRyaWVzKCkpLmZpbHRlcihjPT57bGV0WyxtXT1jO3JldHVybiAxPT09''@;'; put 'put ''bS5zaXplfSkuZmxhdE1hcChjPT57bGV0WyxtXT1jO3JldHVybiBBcnJheS5mcm9tKG0pfSkpKX1mdW5jdGlvbiBLdmUobil7Zm9yKGxldCB0PW4ucm93O3Q8bi5yb3crbi5yb3dzcGFuO3QrKylmb3IobGV0IGU9bi5jb2w7ZTxuLmNvbCtuLmNvbHNwYW47ZSsrKXRoaXMubWVyZ2VkQ2VsbHNN''@;'; put 'put ''YXRyaXguaGFzKHQpfHx0aGlzLm1lcmdlZENlbGxzTWF0cml4LnNldCh0LG5ldyBNYXApLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KHQpLnNldChlLG4pfWZ1bmN0aW9uIEo5dChuKXtmb3IobGV0IHQ9bi5yb3c7dDxuLnJvdytuLnJvd3NwYW47dCsrKWZvcihsZXQgZT1uLmNvbDtlPG4u''@;'; put 'put ''Y29sK24uY29sc3BhbjtlKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQodCkuZGVsZXRlKGUpfWNvbnN0IFE5dD1lajtmdW5jdGlvbiBYcmUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIGV2dChuKXt2YXIgdD1mdW5jdGlvbiB0dnQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFu''@;'; put 'put ''KXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNvbnN0IHJ2dD1jbGFzcyBudnR7Y29uc3RydWN0b3IodCl7WHJlKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxYcmUodGhpcywibWVyZ2VkQ2VsbHNDb2xsZWN0aW9uIix2b2lkIDApLFhyZSh0aGlzLCJjdXJyZW50RmlsbERhdGEiLG51bGwp''@;'; put 'put ''LHRoaXMucGx1Z2luPXQsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9ufWdldERpcmVjdGlvbih0LGUpe2xldCByPW51bGw7cmV0dXJuIHI9ZVswXT09PXRbMF0mJmVbMV09PT10WzFdJiZlWzNdPT09dFszXT8iZG93biI6ZVsyXT09''@;'; put 'put ''PXRbMl0mJmVbMV09PT10WzFdJiZlWzNdPT09dFszXT8idXAiOmVbMV09PT10WzFdJiZlWzJdPT09dFsyXT8icmlnaHQiOiJsZWZ0IixyfXNuYXBEcmFnQXJlYSh0LGUscixpKXtjb25zdCBhPWUuc2xpY2UoMCksYz10aGlzLmdldEF1dG9maWxsU2l6ZSh0LGUsciksW20sQyxQLFldPXQsY2U9''@;'; put 'put ''WyJ1cCIsImRvd24iXS5pbmRleE9mKHIpPi0xP1AtbSsxOlktQysxLEFlPWMtTWF0aC5mbG9vcihjL2NlKSpjZSxIZT10aGlzLmdldEZhcnRoZXN0Q29sbGVjdGlvbih0LGUscixpKTtpZihIZSlpZigiZG93biI9PT1yKXtjb25zdCBYZT1IZS5yb3crSGUucm93c3Bhbi1tLUFlO2FbMl0rWGU+''@;'; put 'put ''PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9hWzJdLT1BZTphWzJdKz1BZT9YZTowfWVsc2UgaWYoInJpZ2h0Ij09PXIpe2NvbnN0IFhlPUhlLmNvbCtIZS5jb2xzcGFuLUMtQWU7YVszXStYZT49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2FbM10tPUFlOmFbM10rPUFlP1hlOjB9''@;'; put 'put ''ZWxzZSBpZigidXAiPT09cil7Y29uc3QgWGU9UC1BZS1IZS5yb3crMTthWzBdK1hlPDA/YVswXSs9QWU6YVswXS09QWU/WGU6MH1lbHNlIGlmKCJsZWZ0Ij09PXIpe2NvbnN0IFhlPVktQWUtSGUuY29sKzE7YVsxXStYZTwwP2FbMV0rPUFlOmFbMV0tPUFlP1hlOjB9cmV0dXJuIHRoaXMudXBk''@;'; put 'put ''YXRlQ3VycmVudEZpbGxDYWNoZSh7YmFzZUFyZWE6dCxkcmFnRGlyZWN0aW9uOnIsZm91bmRNZXJnZWRDZWxsczppLGZpbGxTaXplOmMsZHJhZ0FyZWE6YSxjeWNsZUxlbmd0aDpjZX0pLGF9dXBkYXRlQ3VycmVudEZpbGxDYWNoZSh0KXt0aGlzLmN1cnJlbnRGaWxsRGF0YXx8KHRoaXMuY3Vy''@;'; put 'put ''cmVudEZpbGxEYXRhPXt9KSxGdSh0aGlzLmN1cnJlbnRGaWxsRGF0YSx0KX1nZXRBdXRvZmlsbFNpemUodCxlLHIpe2NvbnN0W2ksYSxjLG1dPXQsW0MsUCxZLEpdPWU7c3dpdGNoKHIpe2Nhc2UidXAiOnJldHVybiBpLUM7Y2FzZSJkb3duIjpyZXR1cm4gWS1jO2Nhc2UibGVmdCI6cmV0dXJu''@;'; put 'put ''IGEtUDtjYXNlInJpZ2h0IjpyZXR1cm4gSi1tO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWdldERyYWdBcmVhKHQsZSxyKXtjb25zdFtpLGEsYyxtXT10LFtDLFAsWSxKXT1lO3N3aXRjaChyKXtjYXNlInVwIjpyZXR1cm5bQyxQLGktMSxtXTtjYXNlImRvd24iOntjb25zdCBjZT10aGlzLm1lcmdl''@;'; put 'put ''ZENlbGxzQ29sbGVjdGlvbi5nZXQoWSxtKTtyZXR1cm5bYysxLGEsWSsoY2U/Y2Uucm93c3Bhbi0xOjApLG1dfWNhc2UibGVmdCI6cmV0dXJuW0MsUCxjLGEtMV07Y2FzZSJyaWdodCI6e2NvbnN0IGNlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChZLG0pO3JldHVybltpLG0rKGNl''@;'; put 'put ''P2NlLmNvbHNwYW4tMTowKSxZLEpdfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbih0LGUscixpKXtjb25zdFthLGMsbSxDXT10LFA9WyJ1cCIsImRvd24iXS5pbmRleE9mKHIpPi0xLFk9UD9tOkMsSj1QP2E6YyxjZT10aGlzLmdldEF1dG9maWxsU2l6ZSh0LGUs''@;'; put 'put ''ciksZmU9UD9tLWErMTpDLWMrMSxIZT1jZS1NYXRoLmZsb29yKGNlL2ZlKSpmZTtsZXQgWGU9bnVsbCxydD1udWxsLGR0PW51bGw7c3dpdGNoKHIpe2Nhc2UidXAiOlhlPSJpbmNsdWRlc1ZlcnRpY2FsbHkiLGR0PVktSGUrMTticmVhaztjYXNlImxlZnQiOlhlPSJpbmNsdWRlc0hvcml6b250''@;'; put 'put ''YWxseSIsZHQ9WS1IZSsxO2JyZWFrO2Nhc2UiZG93biI6WGU9ImluY2x1ZGVzVmVydGljYWxseSIsZHQ9SitIZS0xO2JyZWFrO2Nhc2UicmlnaHQiOlhlPSJpbmNsdWRlc0hvcml6b250YWxseSIsZHQ9SitIZS0xfXJldHVybiBZbihpLGp0PT57anRbWGVdKGR0KSYmanQuaXNGYXJ0aGVyKHJ0''@;'; put 'put ''LHIpJiYocnQ9anQpfSkscnR9cmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKHQpe2lmKCF0aGlzLmN1cnJlbnRGaWxsRGF0YSlyZXR1cm47Y29uc3QgZT10aGlzLmdldFJhbmdlRnJvbUNoYW5nZXModCkscj10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGk9dGhpcy5j''@;'; put 'put ''dXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbixhPShQLFkpPT57c3dpdGNoKGkpe2Nhc2UidXAiOnJldHVybiBQLnJvdy1ZPj1lLmZyb20ucm93O2Nhc2UiZG93biI6cmV0dXJuIFAucm93K1Aucm93c3Bhbi0xK1k8PWUudG8ucm93O2Nhc2UibGVmdCI6cmV0dXJuIFAuY29sLVk+PWUuZnJv''@;'; put 'put ''bS5jb2x1bW47Y2FzZSJyaWdodCI6cmV0dXJuIFAuY29sK1AuY29sc3Bhbi0xK1k8PWUudG8uY29sdW1uO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTtsZXQgYz0wLG09bnVsbCxDPTE7ZG97Zm9yKGxldCBQPTA7UDxyLmxlbmd0aDtQKz0xKXtpZihtPXJbUF0sYz1DKnRoaXMuY3VycmVudEZpbGxE''@;'; put 'put ''YXRhLmN5Y2xlTGVuZ3RoLGEobSxjKSlzd2l0Y2goaSl7Y2FzZSJ1cCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Om0ucm93LWMscm93c3BhbjptLnJvd3NwYW4sY29sOm0uY29sLGNvbHNwYW46bS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJkb3duIjp0aGlz''@;'; put 'put ''LnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6bS5yb3crYyxyb3dzcGFuOm0ucm93c3Bhbixjb2w6bS5jb2wsY29sc3BhbjptLmNvbHNwYW59LCEwKTticmVhaztjYXNlImxlZnQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzptLnJvdyxy''@;'; put 'put ''b3dzcGFuOm0ucm93c3Bhbixjb2w6bS5jb2wtYyxjb2xzcGFuOm0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzptLnJvdyxyb3dzcGFuOm0ucm93c3Bhbixjb2w6bS5jb2wrYyxjb2xzcGFuOm0uY29sc3Bh''@;'; put 'put ''bn0sITApfVA9PT1yLmxlbmd0aC0xJiYoQys9MSl9fXdoaWxlKGEobSxjKSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksci5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKHQp''@;'; put 'put ''e2NvbnN0IGU9e21pbjpudWxsLG1heDpudWxsfSxyPXttaW46bnVsbCxtYXg6bnVsbH07cmV0dXJuIFluKHQsaT0+e2NvbnN0IGE9aVswXSxjPXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woaVsxXSk7KG51bGw9PT1lLm1pbnx8YTxlLm1pbikmJihlLm1pbj1hKSwobnVsbD09PWUubWF4fHxh''@;'; put 'put ''PmUubWF4KSYmKGUubWF4PWEpLChudWxsPT09ci5taW58fGM8ci5taW4pJiYoci5taW49YyksKG51bGw9PT1yLm1heHx8Yz5yLm1heCkmJihyLm1heD1jKX0pLHtmcm9tOntyb3c6ZS5taW4sY29sdW1uOnIubWlufSx0bzp7cm93OmUubWF4LGNvbHVtbjpyLm1heH19fWRyYWdBcmVhT3Zlcmxh''@;'; put 'put ''cHNDb2xsZWN0aW9ucyh0LGUscil7Y29uc3QgaT10aGlzLmdldERyYWdBcmVhKHQsZSxyKSxbYSxjLG0sQ109aSxQPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLGMpLFk9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG0sQyksSj10aGlzLnBsdWdpbi5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxSYW5nZShQLFAsWSk7aWYoMD09PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKEosITApLmxlbmd0aClyZXR1cm4hMTtjb25zdCBmZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShKLCExKTtyZXR1cm4gMD09PWZl''@;'; put 'put ''Lmxlbmd0aHx8KCJ1cCI9PT1yfHwiZG93biI9PT1yPyFmZS5ldmVyeShBZT0+e2xldHtjb2xzcGFuOkhlfT1BZTtyZXR1cm4gSGU9PT1KLmdldFdpZHRoKCl9KTohZmUuZXZlcnkoQWU9PntsZXR7cm93c3BhbjpIZX09QWU7cmV0dXJuIEhlPT09Si5nZXRIZWlnaHQoKX0pKX19O2Z1bmN0aW9u''@;'; put 'put ''IHFyZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gaXZ0KG4pe3ZhciB0PWZ1bmN0aW9uIGF2dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3Qgc3Z0PWNsYXNzIG92dHtjb25zdHJ1Y3Rvcih0KXtxcmUodGhpcywicGx1''@;'; put 'put ''Z2luIix2b2lkIDApLHFyZSh0aGlzLCJob3QiLHZvaWQgMCkscXJlKHRoaXMsImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lIiwiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwiKSx0aGlzLnBsdWdpbj10LHRoaXMuaG90PXQuaG90fWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFt''@;'; put 'put ''ZSh0LGUscixpKXtjb25zdCBhPU1hdGgubWluKHJbMF0sclsyXSksYz1NYXRoLm1pbihyWzFdLHJbM10pLG09TWF0aC5tYXgoclswXSxyWzJdKSxDPU1hdGgubWF4KHJbMV0sclszXSk7aWYodm9pZCAwPT09aXx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVu''@;'; put 'put ''ZGVyYWJsZU1lcmdlZENlbGwodCxlKSlyZXR1cm47Y29uc3QgWT10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHQsZSk7aWYoIVkpcmV0dXJuO2NvbnN0IEo9WS5nZXRMYXN0Um93KCksY2U9WS5nZXRMYXN0Q29sdW1uKCk7cmV0dXJuIGE8PVkucm93JiZjPD1ZLmNvbCYm''@;'; put 'put ''bT49SiYmQz49Y2U/YCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHtpfWA6dGhpcy5pc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQoWSx0aGlzLnBsdWdpbi5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpKT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NO''@;'; put 'put ''YW1lfS1tdWx0aXBsZWA6dm9pZCAwfWlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZCh0LGUpe2NvbnN0IHI9W107aWYoIWV8fCF0KXJldHVybiExO2ZvcihsZXQgaT0wO2k8dC5yb3dzcGFuO2krPTEpZm9yKGxldCBhPTA7YTx0LmNvbHNwYW47YSs9MSlyLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHModC5yb3craSx0LmNvbCthKSk7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKz0xKXtjb25zdCBhPVtdO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7Yys9MSlhW2NdPWVbY10uaW5jbHVkZXMocltpXSk7aWYoIWEuaW5jbHVkZXMoITApKXJldHVybiExfXJldHVybiEwfWdldFNlbGVj''@;'; put 'put ''dGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl7Y29uc3QgdD1bXTtmb3IobGV0IGU9MDtlPD03O2UrPTEpdC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7ZX1gKTtyZXR1cm4gdC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENl''@;'; put 'put ''bGxDbGFzc05hbWV9LW11bHRpcGxlYCksdH19O2Z1bmN0aW9uIE5EKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBjdnQobil7dmFyIHQ9ZnVuY3Rpb24gdXZ0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p''@;'; put 'put ''ZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpO''@;'; put 'put ''dW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBYdmV7Y29u''@;'; put 'put ''c3RydWN0b3IodCl7TkQodGhpcywiZGF0YSIsdm9pZCAwKSxORCh0aGlzLCJuZXh0IixudWxsKSxORCh0aGlzLCJwcmV2IixudWxsKSx0aGlzLmRhdGE9dH19Y29uc3Qgbmo9Y2xhc3MgZHZ0e2NvbnN0cnVjdG9yKCl7TkQodGhpcywiZmlyc3QiLG51bGwpLE5EKHRoaXMsImxhc3QiLG51bGwp''@;'; put 'put ''fXB1c2godCl7Y29uc3QgZT1uZXcgWHZlKHQpO2lmKG51bGw9PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9ZSx0aGlzLmxhc3Q9ZTtlbHNle2NvbnN0IHI9dGhpcy5sYXN0O3RoaXMubGFzdD1lLGUucHJldj1yLHIubmV4dD1lfXJldHVybiBlfXVuc2hpZnQodCl7Y29uc3QgZT1uZXcgWHZlKHQp''@;'; put 'put ''O2lmKG51bGw9PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9ZSx0aGlzLmxhc3Q9ZTtlbHNle2NvbnN0IHI9dGhpcy5maXJzdDt0aGlzLmZpcnN0PWUsZS5uZXh0PXIsci5wcmV2PWV9fWlub3JkZXIodCl7bGV0IGU9dGhpcy5maXJzdDtmb3IoO2U7KXtjb25zdCByPXQoZSk7aWYoZT09PXRoaXMu''@;'; put 'put ''bGFzdHx8ITA9PT1yKWJyZWFrO2U9ZS5uZXh0fX1yZW1vdmUodCl7aWYobnVsbD09PXRoaXMuZmlyc3QpcmV0dXJuITE7bGV0IHIsaSxlPXRoaXMuZmlyc3Q7Zm9yKDtlOyl7aWYoZS5kYXRhPT09dClyZXR1cm4gcj1lLm5leHQsaT1lLnByZXYsciYmKHIucHJldj1pKSxpJiYoaS5uZXh0PXIp''@;'; put 'put ''LGU9PT10aGlzLmZpcnN0JiYodGhpcy5maXJzdD1yKSxlPT09dGhpcy5sYXN0JiYodGhpcy5sYXN0PWkpLCEwO2U9ZS5uZXh0fXJldHVybiExfWhhc0N5Y2xlKCl7bGV0IHQ9dGhpcy5maXJzdCxlPXRoaXMuZmlyc3Q7Zm9yKDs7KXtpZihudWxsPT09dHx8KHQ9dC5uZXh0LG51bGw9PT10KSly''@;'; put 'put ''ZXR1cm4hMTtpZih0PXQubmV4dCxlPWUubmV4dCx0PT09ZSlyZXR1cm4hMH19cG9wKCl7aWYobnVsbD09PXRoaXMubGFzdClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMubGFzdDtyZXR1cm4gdGhpcy5sYXN0PXRoaXMubGFzdC5wcmV2LHR9c2hpZnQoKXtpZihudWxsPT09dGhpcy5maXJzdCly''@;'; put 'put ''ZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMuZmlyc3Q9dGhpcy5maXJzdC5uZXh0LHR9cmVjdXJzaXZlUmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0KXJldHVybjsoZnVuY3Rpb24gdChyLGkpe2kmJih0KGksaS5uZXh0KSxpLm5leHQ9cil9KSh0aGlzLmZpcnN0LHRo''@;'; put 'put ''aXMuZmlyc3QubmV4dCksdGhpcy5maXJzdC5uZXh0PW51bGw7Y29uc3QgZT10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9dGhpcy5sYXN0LHRoaXMubGFzdD1lfXJldmVyc2UoKXtpZighdGhpcy5maXJzdHx8IXRoaXMuZmlyc3QubmV4dClyZXR1cm47bGV0IHIsdD10aGlzLmZpcnN0Lm5leHQsZT10''@;'; put 'put ''aGlzLmZpcnN0O2Zvcig7dDspcj10Lm5leHQsdC5uZXh0PWUsZS5wcmV2PXQsZT10LHQ9cjt0aGlzLmZpcnN0Lm5leHQ9bnVsbCx0aGlzLmxhc3QucHJldj1udWxsLHI9dGhpcy5maXJzdCx0aGlzLmZpcnN0PWUsdGhpcy5sYXN0PXJ9fTtmdW5jdGlvbiBSeShuLHQsZSl7cXZlKG4sdCksdC5z''@;'; put 'put ''ZXQobixlKX1mdW5jdGlvbiBxdmUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFNsKG4sdCl7cmV0dXJuIG4uZ2V0KHJqKG4sdCkpfWZ1''@;'; put 'put ''bmN0aW9uIFoyKG4sdCxlKXtyZXR1cm4gbi5zZXQocmoobix0KSxlKSxlfWZ1bmN0aW9uIHJqKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgWDQ9bmV3IFdlYWtNYXAscTQ9bmV3IFdlYWtNYXAsSjQ9bmV3IFdlYWtNYXAsUTQ9bmV3IFdlYWtNYXAsSnJlPW5ldyBXZWFrTWFwLGlqPW5ldyBXZWFrTWFwLGFqPW5ldyBXZWFrTWFwLFFyZT1uZXcgV2Vha1NldDtjbGFz''@;'; put 'put ''cyBmdnR7Y29uc3RydWN0b3IodCl7bGV0e21lcmdlZENlbGxzR2V0dGVyOmUscm93SW5kZXhNYXBwZXI6cixjb2x1bW5JbmRleE1hcHBlcjppfT10OyhmdW5jdGlvbiBodnQobix0KXtxdmUobix0KSx0LmFkZChuKX0pKHRoaXMsUXJlKSxSeSh0aGlzLFg0LG5ldyBuaiksUnkodGhpcyxxNCxu''@;'; put 'put ''ZXcgbmopLFJ5KHRoaXMsSjQsbnVsbCksUnkodGhpcyxRNCxudWxsKSxSeSh0aGlzLEpyZSxudWxsKSxSeSh0aGlzLGlqLG51bGwpLFJ5KHRoaXMsYWosbnVsbCksWjIoSnJlLHRoaXMsZSksWjIoaWosdGhpcyxyKSxaMihhaix0aGlzLGkpfWdldEN1cnJlbnRWZXJ0aWNhbE5vZGUoKXtyZXR1''@;'; put 'put ''cm4gU2woUTQsdGhpcykuZGF0YX1nZXRGaXJzdFZlcnRpY2FsTm9kZSgpe3JldHVybiBTbChxNCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gU2woUTQsdGhpcykubmV4dC5kYXRhfWdldFByZXZWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gU2woUTQsdGhpcyku''@;'; put 'put ''cHJldi5kYXRhfWdldEN1cnJlbnRIb3Jpem9udGFsTm9kZSgpe3JldHVybiBTbChKNCx0aGlzKS5kYXRhfWdldEZpcnN0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gU2woWDQsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gU2woSjQsdGhpcykubmV4dC5k''@;'; put 'put ''YXRhfWdldFByZXZIb3Jpem9udGFsTm9kZSgpe3JldHVybiBTbChKNCx0aGlzKS5wcmV2LmRhdGF9c2V0UHJldk5vZGVBc0FjdGl2ZSgpe1oyKFE0LHRoaXMsU2woUTQsdGhpcykucHJldiksWjIoSjQsdGhpcyxTbChKNCx0aGlzKS5wcmV2KX1zZXROZXh0Tm9kZUFzQWN0aXZlKCl7WjIoUTQs''@;'; put 'put ''dGhpcyxTbChRNCx0aGlzKS5uZXh0KSxaMihKNCx0aGlzLFNsKEo0LHRoaXMpLm5leHQpfWJ1aWxkRm9jdXNPcmRlcih0KXtaMihYNCx0aGlzLG5ldyBuaiksdC5mb3JFYWNoKChlLHIpPT57Y29uc3QgaT1uZXcgV2Vha1NldCxhPWUuZ2V0VG9wU3RhcnRDb3JuZXIoKSxjPWUuZ2V0Qm90dG9t''@;'; put 'put ''RW5kQ29ybmVyKCk7Zm9yKGxldCBtPWEucm93O208PWMucm93O20rKylpZighU2woaWosdGhpcykuaXNIaWRkZW4obSkpZm9yKGxldCBDPWEuY29sO0M8PWMuY29sO0MrKyl7aWYoU2woYWosdGhpcykuaXNIaWRkZW4oQykpY29udGludWU7Y29uc3QgUD1yaihRcmUsdGhpcyxKdmUpLmNhbGwo''@;'; put 'put ''dGhpcyx7c2VsZWN0ZWRSYW5nZTplLHNlbGVjdGlvbkxheWVyOnIsbGlzdE9yZGVyOlNsKFg0LHRoaXMpLG1lcmdlQ2VsbHNWaXNpdG9yOmkscm93Om0sY29sdW1uOkN9KTtQJiZaMihKNCx0aGlzLFApfX0pLFNsKFg0LHRoaXMpLmZpcnN0JiYoU2woWDQsdGhpcykuZmlyc3QucHJldj1TbChY''@;'; put 'put ''NCx0aGlzKS5sYXN0LFNsKFg0LHRoaXMpLmxhc3QubmV4dD1TbChYNCx0aGlzKS5maXJzdCksWjIocTQsdGhpcyxuZXcgbmopLHQuZm9yRWFjaCgoZSxyKT0+e2NvbnN0IGk9bmV3IFdlYWtTZXQsYT1lLmdldFRvcFN0YXJ0Q29ybmVyKCksYz1lLmdldEJvdHRvbUVuZENvcm5lcigpO2Zvcihs''@;'; put 'put ''ZXQgbT1hLmNvbDttPD1jLmNvbDttKyspaWYoIVNsKGFqLHRoaXMpLmlzSGlkZGVuKG0pKWZvcihsZXQgQz1hLnJvdztDPD1jLnJvdztDKyspe2lmKFNsKGlqLHRoaXMpLmlzSGlkZGVuKEMpKWNvbnRpbnVlO2NvbnN0IFA9cmooUXJlLHRoaXMsSnZlKS5jYWxsKHRoaXMse3NlbGVjdGVkUmFu''@;'; put 'put ''Z2U6ZSxzZWxlY3Rpb25MYXllcjpyLGxpc3RPcmRlcjpTbChxNCx0aGlzKSxtZXJnZUNlbGxzVmlzaXRvcjppLHJvdzpDLGNvbHVtbjptfSk7UCYmWjIoUTQsdGhpcyxQKX19KSxTbChxNCx0aGlzKS5maXJzdCYmKFNsKHE0LHRoaXMpLmZpcnN0LnByZXY9U2wocTQsdGhpcykubGFzdCxTbChx''@;'; put 'put ''NCx0aGlzKS5sYXN0Lm5leHQ9U2wocTQsdGhpcykuZmlyc3QpfXNldEFjdGl2ZU5vZGUodCxlLHIpe3JldHVybiBTbChYNCx0aGlzKS5pbm9yZGVyKGk9Pntjb25zdHtzZWxlY3Rpb25MYXllcjphLHJvd1N0YXJ0OmMscm93RW5kOm0sY29sU3RhcnQ6Qyxjb2xFbmQ6UH09aS5kYXRhO2lmKGE9''@;'; put 'put ''PT1yJiZ0Pj1jJiZ0PD1tJiZlPj1DJiZlPD1QKXJldHVybiBaMihKNCx0aGlzLGkpLCEwfSksU2wocTQsdGhpcykuaW5vcmRlcihpPT57Y29uc3R7c2VsZWN0aW9uTGF5ZXI6YSxyb3dTdGFydDpjLHJvd0VuZDptLGNvbFN0YXJ0OkMsY29sRW5kOlB9PWkuZGF0YTtpZihhPT09ciYmdD49YyYm''@;'; put 'put ''dDw9bSYmZT49QyYmZTw9UClyZXR1cm4gWjIoUTQsdGhpcyxpKSwhMH0pLHRoaXN9fWZ1bmN0aW9uIEp2ZShuKXtsZXR7c2VsZWN0ZWRSYW5nZTp0LHNlbGVjdGlvbkxheWVyOmUsbGlzdE9yZGVyOnIsbWVyZ2VDZWxsc1Zpc2l0b3I6aSxyb3c6YSxjb2x1bW46Y309bjtjb25zdCBtPXQuZ2V0''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKSxDPXQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksUD10LmhpZ2hsaWdodC5jbG9uZSgpLm5vcm1hbGl6ZSgpLFk9U2woSnJlLHRoaXMpLmNhbGwodGhpcyxhLGMpO2lmKFkmJmkuaGFzKFkpKXJldHVybiBudWxsO2NvbnN0IEo9e3NlbGVjdGlvbkxheWVyOmUsY29sU3Rh''@;'; put 'put ''cnQ6Yyxjb2xFbmQ6Yyxyb3dTdGFydDphLHJvd0VuZDphfTtpZihZKXtpZihpLmFkZChZKSxZLnJvdzxtLnJvd3x8WS5yb3crWS5yb3dzcGFuLTE+Qy5yb3d8fFkuY29sPG0uY29sfHxZLmNvbCtZLmNvbHNwYW4tMT5DLmNvbClyZXR1cm4gbnVsbDtKLmNvbFN0YXJ0PVkuY29sLEouY29sRW5k''@;'; put 'put ''PVkuY29sK1kuY29sc3Bhbi0xLEoucm93U3RhcnQ9WS5yb3csSi5yb3dFbmQ9WS5yb3crWS5yb3dzcGFuLTF9Y29uc3QgY2U9ci5wdXNoKEopO3JldHVybiBhPT09UC5yb3cmJmM9PT1QLmNvbHx8WSYmUC5yb3c+PVkucm93JiZQLnJvdzw9WS5yb3crWS5yb3dzcGFuLTEmJlAuY29sPj1ZLmNv''@;'; put 'put ''bCYmUC5jb2w8PVkuY29sK1kuY29sc3Bhbi0xP2NlOm51bGx9ZnVuY3Rpb24gUXZlKG4sdCxlKXtjb25zdHtyb3dJbmRleE1hcHBlcjpyLHN0eWxlc0hhbmRsZXI6aX09bjtsZXQgYT0wO2ZvcihsZXQgbT10O208dCtlO20rKylpZighci5pc0hpZGRlbihtKSl7dmFyIGM7YSs9bnVsbCE9PShj''@;'; put 'put ''PW4uZ2V0Um93SGVpZ2h0KG0pKSYmdm9pZCAwIT09Yz9jOmkuZ2V0RGVmYXVsdFJvd0hlaWdodChtKX1yZXR1cm4gYX1mdW5jdGlvbiBvaihuLHQsZSl7ZXllKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBleWUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg''@;'; put 'put ''aW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGVpZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gbXZ0KG4pe3ZhciB0PWZ1bmN0aW9uIHZ2dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFy''@;'; put 'put ''IGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gVkQobix0LGUpe3JldHVybiBuLnNldChJbChuLHQpLGUpLGV9ZnVuY3Rpb24gYWMobix0KXtyZXR1cm4gbi5nZXQoSWwobix0KSl9ZnVuY3Rpb24gSWwobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVy''@;'; put 'put ''biBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0''@;'; put 'put ''ZXIoImFmdGVyTWVyZ2VDZWxscyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCB0aWU9Im1lcmdlQ2VsbHMiLHR5ZT10aWU7dmFyIGkzPW5ldyBXZWFr''@;'; put 'put ''TWFwLGEzPW5ldyBXZWFrTWFwLGVnPW5ldyBXZWFrTWFwLG55ZT1uZXcgV2Vha01hcCxHbD1uZXcgV2Vha1NldDtjbGFzcyBfdnQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZ3Z0KG4sdCl7ZXllKG4sdCksdC5hZGQobil9KHRoaXMsR2wp''@;'; put 'put ''LGVpZSh0aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLG51bGwpLGVpZSh0aGlzLCJhdXRvZmlsbENhbGN1bGF0aW9ucyIsbnVsbCksZWllKHRoaXMsInNlbGVjdGlvbkNhbGN1bGF0aW9ucyIsbnVsbCksb2oodGhpcyxpMyxudWxsKSxvaih0aGlzLGEzLHtyb3c6MCxjb2w6MH0pLG9qKHRo''@;'; put 'put ''aXMsZWcsbmV3IGZ2dCh7bWVyZ2VkQ2VsbHNHZXR0ZXI6KHQsZSk9PnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldCh0LGUpLHJvd0luZGV4TWFwcGVyOnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyfSkpLG9q''@;'; put 'put ''KHRoaXMsbnllLGZ1bmN0aW9uIHB2dChuKXtjb25zdHtob3Q6dH09bix7cm93SW5kZXhNYXBwZXI6ZSxjb2x1bW5JbmRleE1hcHBlcjpyfT10LGk9bmV3IE1hcDtyZXR1cm57YmVmb3JlOmZ1bmN0aW9uIGEoKXt9LGFmdGVyOmZ1bmN0aW9uIGMobSxDLFApe2NvbnN0IFk9bi5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24uZ2V0KEMsUCk7aWYoIWhvKFkpKXJldHVybiBtLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLG0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksaS5oYXMoQykmJiF0LmdldFNldHRpbmdzKCkucm93SGVhZGVycyYmKG0uc3R5bGUuaGVpZ2h0PWAke2kuZ2V0KEMpfXB4''@;'; put 'put ''YCxpLmRlbGV0ZShDKSksdm9pZChtLnN0eWxlLmRpc3BsYXk9IiIpO2NvbnN0e3JvdzpKLGNvbDpjZSxjb2xzcGFuOmZlLHJvd3NwYW46QWV9PVksW0hlLFhlXT1uLnRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUoSixBZSxjZSxmZSkscnQ9bi5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXpl''@;'; put 'put ''ZCIpO2lmKDA9PT1jZSYmIXQuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzKXtjb25zdCBFcj10Ll9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3MoQyk7aWYodm9pZCAwIT09RXIpe2NvbnN0IGlyPXQuc3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpPzA6MTtpLnNldChDLEVyLWlyKX1l''@;'; put 'put ''bHNlIGlmKEdBKCkpe2NvbnN0IFRyPVF2ZSh0LEosQWUpO2kuc2V0KEMsVHIvQWUpfX1jb25zdCBGdD1IZS1lLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoQykrMSxwbj1YZS1yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoUCkrMTtsZXQgb249ZS5nZXROZWFyZXN0Tm90SGlk''@;'; put 'put ''ZGVuSW5kZXgoSiwxKSxnbj1yLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKTtpZihydCl7Y29uc3QgRXI9dC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCk7WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVyKXx8KG9uPU1hdGgubWF4KG9uLHQuZ2V0''@;'; put 'put ''Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVyKXx8KGduPU1hdGgubWF4KGduLHQuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkp''@;'; put 'put ''fWNvbnN0IFpuPU1hdGgubWluKEFlLEZ0KSxHcj1NYXRoLm1pbihmZSxwbik7b249PT1DJiZnbj09PVA/KG0uc2V0QXR0cmlidXRlKCJyb3dzcGFuIixabiksbS5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLEdyKSk6KG0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksbS5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUoImNvbHNwYW4iKSxtLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX19fSh0aGlzKSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHRpZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue1tXOGVd''@;'; put 'put ''OiJjZWxscyIsdmlydHVhbGl6ZWQ6ITEsY2VsbHM6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aWVdfWVuYWJsZVBsdWdpbigpe3ZhciB0PXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3IFE5dCh0aGlzKSx0''@;'; put 'put ''aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyBydnQodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IHN2dCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxl''@;'; put 'put ''O2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCxidnQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1h''@;'; put 'put ''cmd1bWVudHNbaV07cmV0dXJuIElsKEdsLHQsQ3Z0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ld''@;'; put 'put ''O3JldHVybiBJbChHbCx0LFN2dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIElsKEds''@;'; put 'put ''LHQsTXZ0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCx4''@;'; put 'put ''dnQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCxpeWUpLmNhbGwodCwu''@;'; put 'put ''Li5yKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIElsKEdsLHQsaXllKS5jYWxsKHQsLi4ucil9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LFR2dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LEF2dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''clNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCxrdnQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3Jk''@;'; put 'put ''cyIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCxyeWUpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCxyeWUpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LHd2dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBhYyhueWUsdCkuYWZ0''@;'; put 'put ''ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LEV2''@;'; put 'put ''dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LER2dCkuY2FsbCh0LC4uLnIp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LEl2dCkuY2FsbCh0LC4u''@;'; put 'put ''LnIpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LFJ2dCkuY2Fs''@;'; put 'put ''bCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LEx2dCkuY2FsbCh0LC4uLnIpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCxPdnQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIElsKEdsLHQsUHZ0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LEZ2dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGU9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSWwoR2wsdCxIdnQpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1u''@;'; put 'put ''ZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIElsKEdsLHQsTnZ0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9''@;'; put 'put ''MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJbChHbCx0LFZ2dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltp''@;'; put 'put ''XT1hcmd1bWVudHNbaV07cmV0dXJuIElsKEdsLHQsQnZ0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJn''@;'; put 'put ''dW1lbnRzW2ldO3JldHVybiBJbChHbCx0LGp2dCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVCZWdpbkVkaXRpbmciLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0''@;'; put 'put ''dXJuIElsKEdsLHQsenZ0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJu''@;'; put 'put ''IElsKEdsLHQsVXZ0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGUscik9PntpZigiTWVyZ2VDZWxscyI9PT1yKXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5jbGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZy''@;'; put 'put ''b21TZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIWVKKCkpcmV0dXJuO2NvbnN0IHQ9W107bGV0IGU9W107dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChyPT57Y29uc3R7cm93Omkscm93c3Bhbjph''@;'; put 'put ''fT1yO2ZvcihsZXQgYz1pKzE7YzxpK2E7YysrKWUucHVzaChjKX0pLGU9Wy4uLm5ldyBTZXQoZSldLGUuZm9yRWFjaChyPT57Y29uc3QgaT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHIpO3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMu''@;'; put 'put ''Z2V0T3ZlcmxheXMoITApLm1hcChhPT4ibWFzdGVyIj09PWE/Lm5hbWU/YTphLmNsb25lLnd0VGFibGUpLmZvckVhY2goYT0+e2NvbnN0IGM9YS5nZXRSb3coaSk7YyYmKGMuc3R5bGUuYmFja2dyb3VuZD1xQShjLCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwiLCAwLjk5KSIpLHQu''@;'; put 'put ''cHVzaChjKSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0LmZvckVhY2gocj0+e3ZhciBpO3Iuc3R5bGUuYmFja2dyb3VuZD1udWxsPT09KGk9cUEociwiYmFja2dyb3VuZENvbG9yIikpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0s''@;'; put 'put ''MSl9dmFsaWRhdGVTZXR0aW5nKHQpe3JldHVybiEoIXR8fChLNC5jb250YWluc05lZ2F0aXZlVmFsdWVzKHQpPyhvcyhLNC5ORUdBVElWRV9WQUxVRVNfV0FSTklORyh0KSksMSk6SzQuaXNPdXRPZkJvdW5kcyh0LHRoaXMuaG90LmNvdW50Um93cygpLHRoaXMuaG90LmNvdW50Q29scygpKT8o''@;'; put 'put ''b3MoSzQuSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKHQpKSwxKTpLNC5pc1NpbmdsZUNlbGwodCk/KG9zKEs0LklTX1NJTkdMRV9DRUxMKHQpKSwxKTpLNC5jb250YWluc1plcm9TcGFuKHQpJiYob3MoSzQuWkVST19TUEFOX1dBUk5JTkcodCkpLDEpKSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3Mo''@;'; put 'put ''KXtjb25zdCB0PXRoaXMuZ2V0U2V0dGluZygiY2VsbHMiKS5maWx0ZXIoaT0+dGhpcy52YWxpZGF0ZVNldHRpbmcoaSkpLGU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKHQpLHI9W107ZS5mb3JFYWNoKGk9Pntjb25zdHtyb3c6YSxjb2w6''@;'; put 'put ''Yyxyb3dzcGFuOm0sY29sc3BhbjpDfT1pLFA9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxjKSxZPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGErbS0xLGMrQy0xKSxKPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoUCxQLFkpO3RoaXMubWVyZ2VSYW5nZShKLCEwLCEwKTtmb3Io''@;'; put 'put ''bGV0IGNlPWE7Y2U8YSttO2NlKyspZm9yKGxldCBmZT1jO2ZlPGMrQztmZSsrKShjZSE9PWF8fGZlIT09YykmJnIucHVzaChbY2UsZmUsbnVsbF0pfSksMCE9PXIubGVuZ3RoJiZ0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHIsdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWUpfWNsZWFyQ29s''@;'; put 'put ''bGVjdGlvbnMoKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5jbGVhcigpfWNhbk1lcmdlUmFuZ2UodCl7cmV0dXJuISEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl8fHRoaXMudmFsaWRhdGVTZXR0aW5nKHQpfW1lcmdlU2VsZWN0''@;'; put 'put ''aW9uKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighdClyZXR1cm47dC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2Nv''@;'; put 'put ''bnN0e2Zyb206ZSx0bzpyfT10O3RoaXMudW5tZXJnZVJhbmdlKHQsITApLHRoaXMubWVyZ2VSYW5nZSh0KSx0aGlzLmhvdC5zZWxlY3RDZWxsKGUucm93LGUuY29sLHIucm93LHIuY29sLCExKX11bm1lcmdlU2VsZWN0aW9uKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighdClyZXR1cm47Y29uc3R7ZnJvbTplLHRvOnJ9PXQ7dGhpcy51bm1lcmdlUmFuZ2UodCwhMCksdGhpcy5ob3Quc2VsZWN0Q2VsbChlLnJvdyxlLmNvbCxyLnJvdyxyLmNvbCwhMSl9''@;'; put 'put ''bWVyZ2VSYW5nZSh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBpPXQuZ2V0VG9wU3RhcnRDb3JuZXIoKSxh''@;'; put 'put ''PXQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksYz17cm93Omkucm93LGNvbDppLmNvbCxyb3dzcGFuOmEucm93LWkucm93KzEsY29sc3BhbjphLmNvbC1pLmNvbCsxfSxtPVtdO2xldCBDPW51bGw7cmV0dXJuISF0aGlzLmNhbk1lcmdlUmFuZ2UoYyxlKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVNZXJnZUNlbGxzIix0LGUpLGVvKDAsYy5yb3dzcGFuLTEsWT0+e2VvKDAsYy5jb2xzcGFuLTEsSj0+e2xldCBjZT1udWxsO21bWV18fChtW1ldPVtdKSwwPT09WSYmMD09PUo/Y2U9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGMucm93KSx0''@;'; put 'put ''aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMuY29sKSk6dGhpcy5ob3Quc2V0Q2VsbE1ldGEoYy5yb3crWSxjLmNvbCtKLCJoaWRkZW4iLCEwKSxtW1ldW0pdPWNlfSl9KSx0aGlzLmhvdC5zZXRDZWxsTWV0YShjLnJvdyxjLmNvbCwic3Bhbm5lZCIsITApLCF0aGlzLm1lcmdlZENlbGxzQ29s''@;'; put 'put ''bGVjdGlvbi5hZGQoYyxlKXx8KHI/Qz1bYy5yb3csYy5jb2wsbV06dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoYy5yb3csYy5jb2wsbSx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSksZXx8dGhpcy5pZkNocm9tZUZvcmNlUmVwYWludCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''ck1lcmdlQ2VsbHMiLHQsYyxlKSxDKSl9dW5tZXJnZVJhbmdlKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3Qgcj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh0KTswIT09ci5sZW5n''@;'; put 'put ''dGgmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5tZXJnZUNlbGxzIix0LGUpLFluKHIsaT0+e3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnJlbW92ZShpLnJvdyxpLmNvbCksZW8oMCxpLnJvd3NwYW4tMSxhPT57ZW8oMCxpLmNvbHNwYW4tMSxjPT57dGhpcy5ob3QucmVtb3ZlQ2Vs''@;'; put 'put ''bE1ldGEoaS5yb3crYSxpLmNvbCtjLCJoaWRkZW4iKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShpLnJvdythLGkuY29sK2MsImNvcHlhYmxlIil9KX0pLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGkucm93LGkuY29sLCJzcGFubmVkIil9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbm1l''@;'; put 'put ''cmdlQ2VsbHMiLHQsZSksdGhpcy5ob3QucmVuZGVyKCkpfXRvZ2dsZU1lcmdlKHQpe2NvbnN0e2Zyb206ZSx0bzpyfT10LmNsb25lKCkubm9ybWFsaXplKCksaT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZS5yb3csZS5jb2wpO2kucm93PT09ZS5yb3cmJmkuY29sPT09ZS5jb2wm''@;'; put 'put ''Jmkucm93K2kucm93c3Bhbi0xPT09ci5yb3cmJmkuY29sK2kuY29sc3Bhbi0xPT09ci5jb2w/dGhpcy51bm1lcmdlUmFuZ2UodCk6dGhpcy5tZXJnZVNlbGVjdGlvbih0KX1tZXJnZSh0LGUscixpKXtjb25zdCBhPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQsZSksYz10aGlzLmhvdC5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhyLGkpO3RoaXMubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGEsYSxjKSl9dW5tZXJnZSh0LGUscixpKXtjb25zdCBhPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQsZSksYz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhyLGkpO3Ro''@;'; put 'put ''aXMudW5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoYSxhLGMpKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazoo''@;'; put 'put ''KT0+e2NvbnN0IHI9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3ImJiFyLmlzU2luZ2xlSGVhZGVyKCkmJih0aGlzLnRvZ2dsZU1lcmdlKHIpLHRoaXMuaG90LnJlbmRlcigpKX0scnVuT25seUlmOnI9PiFyLmFsdEtleSxncm91cDp0eWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRz''@;'; put 'put ''KCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAodHllKX1tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KHQsZSl7Y29uc3Qgcj10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixpPXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleCh0LnN0YXJ0Um93KTtmb3IobGV0IGE9MDthPGU7YSs9MSl7Y29uc3QgYz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaSxhKTtpZihobyhjKSl7Y29uc3QgbT1yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5y''@;'; put 'put ''b3csMSkpO2lmKG08dC5zdGFydFJvdylyZXR1cm4gdC5zdGFydFJvdz1tLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KHQsZSl9fX1tb2RpZnlWaWV3cG9ydFJvd0VuZCh0LGUpe2NvbnN0IHI9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaT1yLmdldFZpc3VhbEZyb21SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXgodC5lbmRSb3cpO2ZvcihsZXQgYT0wO2E8ZTthKz0xKXtjb25zdCBjPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChpLGEpO2lmKGhvKGMpKXtjb25zdCBDPXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLnJv''@;'; put 'put ''dytjLnJvd3NwYW4tMSwtMSkpO2lmKEM+dC5lbmRSb3cpcmV0dXJuIHQuZW5kUm93PUMsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKHQsZSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KHQsZSl7Y29uc3Qgcj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixpPXIuZ2V0Vmlz''@;'; put 'put ''dWFsRnJvbVJlbmRlcmFibGVJbmRleCh0LnN0YXJ0Q29sdW1uKTtmb3IobGV0IGE9MDthPGU7YSs9MSl7Y29uc3QgYz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYSxpKTtpZihobyhjKSl7Y29uc3QgbT1yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoci5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuSW5kZXgoYy5jb2wsMSkpO2lmKG08dC5zdGFydENvbHVtbilyZXR1cm4gdC5zdGFydENvbHVtbj1tLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KHQsZSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtbkVuZCh0LGUpe2NvbnN0IHI9dGhpcy5ob3QuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIsaT1yLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodC5lbmRDb2x1bW4pO2ZvcihsZXQgYT0wO2E8ZTthKz0xKXtjb25zdCBjPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLGkpO2lmKGhvKGMpKXtjb25zdCBDPXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvbCtjLmNvbHNwYW4tMSwtMSkpO2lmKEM+dC5lbmRDb2x1bW4pcmV0dXJuIHQuZW5kQ29sdW1uPUMsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKHQsZSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxl''@;'; put 'put ''KHQsZSxyLGkpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6Y309dGhpcy5ob3Q7bGV0IG0sQztyZXR1cm4gbT0wPT09ZT9hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0LDEpOmEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHQrZS0xLC0xKSxDPTA9PT1pP2Mu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHIsMSk6Yy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocitpLTEsLTEpLFt0Pj0wP2EuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChtKTp0LHI+PTA/Yy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEMpOnJdfX1mdW5jdGlvbiBidnQo''@;'; put 'put ''KXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKCksdGhpcy5ob3QucmVuZGVyKCl9ZnVuY3Rpb24gd3Z0KG4pe2lmKG4pe2NvbnN0IHQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkscj1lLmdldFRvcFN0''@;'; put 'put ''YXJ0Q29ybmVyKCksaT1lLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSs9MSlpZihyLnJvdz09PXRbYV0ucm93JiZyLmNvbD09PXRbYV0uY29sJiZpLnJvdz09PXRbYV0ucm93K3RbYV0ucm93c3Bhbi0xJiZpLmNvbD09PXRbYV0uY29sK3RbYV0uY29sc3Bh''@;'; put 'put ''bi0xKXJldHVybiExfXJldHVybiBufWZ1bmN0aW9uIEN2dChuKXthYyhhMyx0aGlzKS5yb3c9bi5yb3csYWMoYTMsdGhpcykuY29sPW4uY29sfWZ1bmN0aW9uIFN2dChuKXtjb25zdCB0PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSx7aGlnaGxpZ2h0OmV9PXQse2NvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyOnIscm93SW5kZXhNYXBwZXI6aX09dGhpcy5ob3Q7YWMoaTMsdGhpcykmJihudWxsIT09aS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGFjKGkzLHRoaXMpLnJvdykmJihlLnJvdz1hYyhpMyx0aGlzKS5yb3cpLG51bGwhPT1yLmdldFJlbmRlcmFibGVGcm9tVmlzdWFs''@;'; put 'put ''SW5kZXgoYWMoaTMsdGhpcykuY29sKSYmKGUuY29sPWFjKGkzLHRoaXMpLmNvbCksVkQoaTMsdGhpcyxudWxsKSk7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZS5yb3csZS5jb2wpO2lmKCFhKXJldHVybjtjb25zdCBjPWEuY29sLG09YS5jb2wrYS5jb2xzcGFuLTE7''@;'; put 'put ''aWYobi5jb2w8MCl7Y29uc3QgSj1yLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChlLmNvbD49YyYmZS5jb2w8PW0/Yy0xOm0sLTEpO24uY29sPW51bGw9PT1KPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsZS5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52''@;'; put 'put ''aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKEosZS5jb2wpLTEsMSl9ZWxzZSBpZihuLmNvbD4wKXtjb25zdCBKPXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGUuY29sPj1jJiZlLmNvbDw9bT9tKzE6YywxKTtuLmNvbD1udWxsPT09Sj90aGlzLmhvdC52aWV3LmNvdW50UmVu''@;'; put 'put ''ZGVyYWJsZUNvbHVtbnNJblJhbmdlKGUuY29sLHRoaXMuaG90LmNvdW50Q29scygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGUuY29sLEopLTEsMSl9Y29uc3QgQz1hLnJvdyxQPWEucm93K2Eucm93c3Bhbi0xO2lmKG4ucm93PDApe2Nv''@;'; put 'put ''bnN0IEo9aS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZS5yb3c+PUMmJmUucm93PD1QP0MtMTpQLC0xKTtuLnJvdz1udWxsPT09Sj8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGUucm93KTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFi''@;'; put 'put ''bGVSb3dzSW5SYW5nZShKLGUucm93KS0xLDEpfWVsc2UgaWYobi5yb3c+MCl7Y29uc3QgSj1pLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChlLnJvdz49QyYmZS5yb3c8PVA/UCsxOkMsMSk7bi5yb3c9bnVsbD09PUo/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShl''@;'; put 'put ''LnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShlLnJvdyxKKS0xLDEpfX1mdW5jdGlvbiBNdnQobil7Y29uc3QgdD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZT10LmNsb25lKCkse3Rv''@;'; put 'put ''OnJ9PXQse2NvbHVtbkluZGV4TWFwcGVyOmkscm93SW5kZXhNYXBwZXI6YX09dGhpcy5ob3QsYz0obSxDKT0+e2UuZXhwYW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG0sQykpO2ZvcihsZXQgUD0wO1A8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3Ro''@;'; put 'put ''O1ArPTEpZS5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW1BdLmdldFJhbmdlKCkpfTtpZihuLmNvbDwwKXtsZXQgbT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRTdGFydE1vc3RDb2x1bW5JbmRleCh0LHIuY29sKStuLmNvbDtjKHIu''@;'; put 'put ''cm93LG0pLCJFLVciPT09dC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJiJFLVciPT09ZS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJihtPWUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wpO2NvbnN0IEM9aS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobSwxKTtudWxsIT09QyYmKG4uY29s''@;'; put 'put ''PS1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKEMsci5jb2wpLTEsMSkpfWVsc2UgaWYobi5jb2w+MCl7bGV0IG09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0RW5kTW9zdENvbHVtbkluZGV4KHQsci5jb2wpK24uY29sO2Moci5yb3cs''@;'; put 'put ''bSksIlctRSI9PT10LmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIlctRSI9PT1lLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKG09ZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wpO2NvbnN0IEM9aS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobSwtMSk7bnVsbCE9PUMmJihuLmNvbD1N''@;'; put 'put ''YXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKHIuY29sLEMpLTEsMSkpfWlmKG4ucm93PDApe2xldCBtPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFRvcE1vc3RSb3dJbmRleCh0LHIucm93KStuLnJvdztjKG0sci5jb2wpLCJTLU4iPT09''@;'; put 'put ''dC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiUy1OIj09PWUuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKG09ZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyk7Y29uc3QgQz1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtLDEpO251bGwhPT1DJiYobi5yb3c9LU1hdGgubWF4KHRoaXMuaG90''@;'; put 'put ''LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoQyxyLnJvdyktMSwxKSl9ZWxzZSBpZihuLnJvdz4wKXtsZXQgbT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCb3R0b21Nb3N0Um93SW5kZXgodCxyLnJvdykrbi5yb3c7YyhtLHIuY29sKSwiTi1TIj09PXQuZ2V0VmVydGlj''@;'; put 'put ''YWxEaXJlY3Rpb24oKSYmIk4tUyI9PT1lLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJihtPWUuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cpO2NvbnN0IEM9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobSwtMSk7bnVsbCE9PUMmJihuLnJvdz1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNv''@;'; put 'put ''dW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKHIucm93LEMpLTEsMSkpfX1mdW5jdGlvbiB4dnQoKXtjb25zdCBuPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDp0fT1uO2lmKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhp''@;'; put 'put ''cy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKXJldHVybiB2b2lkIFZEKGkzLHRoaXMsdC5jbG9uZSgpKTtmb3IobGV0IHI9MDtyPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtyKz0xKW4uZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdl''@;'; put 'put ''ZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tyXS5nZXRSYW5nZSgpLCExKTtmb3IobGV0IHI9MDtyPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtyKz0xKW4uZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxs''@;'; put 'put ''c1tyXS5nZXRSYW5nZSgpLCExKTtjb25zdCBlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldCh0LnJvdyx0LmNvbCk7VkQoaTMsdGhpcyx0LmNsb25lKCkpLGUmJnQuYXNzaWduKGUpfWZ1bmN0aW9uIHJ5ZShuLHQsZSxyKXtpZihuPDB8fHQ8MClyZXR1cm47Y29uc3QgaT10aGlzLm1l''@;'; put 'put ''cmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobix0KTtpZighaSlyZXR1cm47Y29uc3R7cm93OmEsY29sOmMsY29sc3BhbjptLHJvd3NwYW46Q309aSxQPWEsWT1jLEo9YStDLTEsY2U9YyttLTE7aWYoInJlbmRlciI9PT1yJiZ0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpe2NvbnN0IGZl''@;'; put 'put ''PXRoaXMuaG90LnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKSxBZT1bInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoZmUpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSxIZT1bImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRf''@;'; put 'put ''Y29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhmZSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpO3JldHVybltncyhBZSxQLEopLGdzKEhlLFksY2UpLGdzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSxQ''@;'; put 'put ''LEopLGdzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxZLGNlKV19cmV0dXJuW1AsWSxKLGNlXX1mdW5jdGlvbiBFdnQobil7bi5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBsdnQobil7cmV0dXJue2tleToibWVyZ2VDZWxscyIsbmFtZSgp''@;'; put 'put ''e2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZEFjdGl2ZSgpO2lmKHQpe2NvbnN0IGU9bi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHRbMF0sdFsxXSk7aWYoZS5yb3c9PT10WzBdJiZlLmNvbD09PXRbMV0mJmUucm93K2Uucm93c3Bhbi0xPT09dFsyXSYmZS5jb2wrZS5jb2xzcGFuLTE9PT10''@;'; put 'put ''WzNdKXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoelEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoalEpfSxjYWxsYmFjaygpe2NvbnN0IHQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXQpcmV0dXJuO3Quc2V0RGlyZWN0aW9uKHRoaXMuaXNSdGwo''@;'; put 'put ''KT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206ZSx0bzpyfT10O24udG9nZ2xlTWVyZ2UodCksdGhpcy5zZWxlY3RDZWxsKGUucm93LGUuY29sLHIucm93LHIuY29sLCExKX0sZGlzYWJsZWQoKXtjb25zdCB0PXRoaXMuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtyZXR1cm4hdHx8SzQuaXNTaW5n''@;'; put 'put ''bGVDZWxsKHtyb3c6dFswXSxjb2w6dFsxXSxyb3dzcGFuOnRbMl0tdFswXSsxLGNvbHNwYW46dFszXS10WzFdKzF9KXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LGhpZGRlbjohMX19KHRoaXMpKX1mdW5jdGlvbiBpeWUoKXtWRChpMyx0aGlzLG51bGwpfWZ1bmN0aW9u''@;'; put 'put ''IFR2dCgpe2lmKGFjKGkzLHRoaXMpLmlzQ2VsbCgpKXJldHVybjtjb25zdCBuPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSx0PW4uZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxlPW4uZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLHI9YWMoaTMsdGhpcykuY2xvbmUoKS5ub3JtYWxp''@;'; put 'put ''emUoKTthYyhlZyx0aGlzKS5zZXRBY3RpdmVOb2RlKHIucm93LHIuY29sKSxhYyhhMyx0aGlzKS5yb3c+MHx8YWMoYTMsdGhpcykuY29sPjA/YWMoZWcsdGhpcykuc2V0UHJldk5vZGVBc0FjdGl2ZSgpOigiRS1XIj09PWUmJmFjKGEzLHRoaXMpLmNvbDwwfHwiUy1OIj09PXQmJmFjKGEzLHRo''@;'; put 'put ''aXMpLnJvdzwwKSYmYWMoZWcsdGhpcykuc2V0TmV4dE5vZGVBc0FjdGl2ZSgpfWZ1bmN0aW9uIEF2dChuLHQpe2NvbnN0e2NvbHVtbkluZGV4TWFwcGVyOmUscm93SW5kZXhNYXBwZXI6cn09dGhpcy5ob3Q7bGV0IGk9dGhpcy5ob3QuZ2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgpLGE9''@;'; put 'put ''bnVsbCxjPW51bGw7aWYoYWMoYTMsdGhpcykuY29sPDApe2NvbnN0e3Jvd0VuZDptLGNvbEVuZDpDLHNlbGVjdGlvbkxheWVyOlB9PWFjKGVnLHRoaXMpLmdldFByZXZIb3Jpem9udGFsTm9kZSgpO2M9ZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQywtMSksYT1yLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChtLC0xKSxpPVB9ZWxzZSBpZihhYyhhMyx0aGlzKS5jb2w+MCl7Y29uc3R7cm93U3RhcnQ6bSxjb2xTdGFydDpDLHNlbGVjdGlvbkxheWVyOlB9PWFjKGVnLHRoaXMpLmdldE5leHRIb3Jpem9udGFsTm9kZSgpO2M9ZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQywxKSxh''@;'; put 'put ''PXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG0sMSksaT1QfWVsc2UgaWYoYWMoYTMsdGhpcykucm93PDApe2NvbnN0e3Jvd0VuZDptLGNvbEVuZDpDLHNlbGVjdGlvbkxheWVyOlB9PWFjKGVnLHRoaXMpLmdldFByZXZWZXJ0aWNhbE5vZGUoKTtjPWUuZ2V0TmVhcmVzdE5vdEhpZGRlbklu''@;'; put 'put ''ZGV4KEMsLTEpLGE9ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobSwtMSksaT1QfWVsc2UgaWYoYWMoYTMsdGhpcykucm93PjApe2NvbnN0e3Jvd1N0YXJ0Om0sY29sU3RhcnQ6QyxzZWxlY3Rpb25MYXllcjpQfT1hYyhlZyx0aGlzKS5nZXROZXh0VmVydGljYWxOb2RlKCk7Yz1lLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChDLDEpLGE9ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobSwxKSxpPVB9aWYobnVsbCE9PWF8fG51bGwhPT1jKXt0aGlzLmhvdC5zZWxlY3Rpb24uc2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleChpKTtjb25zdCBtPXRoaXMuaG90LmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VBY3RpdmUoKSxDPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEsYyksUD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoQy5yb3csQy5jb2wpLFk9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO249Qy5yb3csdD1DLmNvbCxtLmhpZ2hsaWdodC5h''@;'; put 'put ''c3NpZ24oUD97cm93OnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChQLnJvdywxKSxjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KFAuY29sLDEpfTpDKSxZLmNsZWFyKCksWS5hZGQoQykuY29tbWl0''@;'; put 'put ''KCl9YWMoZWcsdGhpcykuc2V0QWN0aXZlTm9kZShuLHQsaSksVkQoYTMsdGhpcyx7cm93OjAsY29sOjB9KX1mdW5jdGlvbiBrdnQoKXthYyhlZyx0aGlzKS5idWlsZEZvY3VzT3JkZXIodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpKX1mdW5jdGlvbiBEdnQobix0LGUpe2NvbnN0IHI9dGhp''@;'; put 'put ''cy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KG4sdCk7ciYmKHIucm93IT09bnx8ci5jb2whPT10P2UuY29weWFibGU9ITE6KGUucm93c3Bhbj1yLnJvd3NwYW4sZS5jb2xzcGFuPXIuY29sc3BhbikpfWZ1bmN0aW9uIEl2dChuKXtpZih0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikp''@;'; put 'put ''cmV0dXJuO2NvbnN0IHQ9dGhpcy5ob3QuY291bnRDb2xzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KG4sdCksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChuLHQpfWZ1bmN0aW9uIFJ2dChuKXtpZih0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpcmV0dXJuO2NvbnN0IHQ9''@;'; put 'put ''dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KG4sdCksdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChuLHQpfWZ1bmN0aW9uIEx2dChuLHQpe2NvbnN0IGU9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5nZXREaXJlY3Rpb24odCxuKTtpZih0''@;'; put 'put ''aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyh0LG4sZSkpcmV0dXJuIHQ7Y29uc3Qgcj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0WzBdLHRbMV0pLGk9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModFsyXSx0WzNdKSxhPXRoaXMuaG90''@;'; put 'put ''Ll9jcmVhdGVDZWxsUmFuZ2UocixyLGkpLGM9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoYSk7cmV0dXJuIDA9PT1jLmxlbmd0aD9uOnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuc25hcERyYWdBcmVhKHQsbixlLGMpfWZ1bmN0aW9uIE92dChuLHQpe3RoaXMu''@;'; put 'put ''bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInJpZ2h0IixuLHQpfWZ1bmN0aW9uIFB2dChuLHQpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImxlZnQiLG4sdCl9ZnVuY3Rpb24gRnZ0KG4sdCxlKXsiYXV0byIhPT1lJiZ0aGlzLm1l''@;'; put 'put ''cmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJkb3duIixuLHQpfWZ1bmN0aW9uIEh2dChuLHQpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInVwIixuLHQpfWZ1bmN0aW9uIE52dChuLHQpeyJBdXRvZmlsbC5maWxsIj09PXQmJnRoaXMu''@;'; put 'put ''YXV0b2ZpbGxDYWxjdWxhdGlvbnMucmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKG4pfWZ1bmN0aW9uIFZ2dChuLHQpe2lmKHQmJiJhcmVhIj09PXQpe2NvbnN0IGU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO1luKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdp''@;'; put 'put ''dGhpblJhbmdlKGUpLGk9PntlLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz09PWkuZ2V0TGFzdFJvdygpJiZlLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbD09PWkuZ2V0TGFzdENvbHVtbigpJiYoblsyXT1pLnJvdyxuWzNdPWkuY29sKX0pfX1mdW5jdGlvbiBCdnQobix0LGUscil7aWYoZSly''@;'; put 'put ''ZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKG4sdCxlLHIpfWZ1bmN0aW9uIGp2dCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgpfWZ1''@;'; put 'put ''bmN0aW9uIHp2dChuLHQsZSxyKXtpZighKHIgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSlyZXR1cm47Y29uc3QgaT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCeVJhbmdlKGkpO2lmKCFhKXJldHVybjtjb25zdCBjPXRo''@;'; put 'put ''aXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LGEuY29sKSxtPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93K2Eucm93c3Bhbi0xLGEuY29sK2EuY29sc3Bhbi0xKTtyZXR1cm4gMD09PXRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmkuaXNFcXVhbCh0aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGMsYyxtKSl9ZnVuY3Rpb24gVXZ0KG4sdCxlKXtpZih0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnN8fCJib3R0b20iPT09ZXx8ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIj09PWUpcmV0dXJuIG47bGV0IHIsaTtpZigibWFzdGVyIj09''@;'; put 'put ''PWUpcj10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLGk9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpO2Vsc2V7Y29uc3QgY2U9dGhpcy5ob3Qudmlldy5nZXRPdmVybGF5QnlOYW1lKGUpO3I9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjZS5jbG9uZS53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSksaT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGNlLmNsb25lLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29s''@;'; put 'put ''dW1uKCkpfWlmKCF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQodCxyKSlyZXR1cm4gbjtjb25zdCBjPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHQsciksbT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0LGkpLEM9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShjLGMsbSks''@;'; put 'put ''UD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShDLCEwKSxZPVAucmVkdWNlKChjZSxmZSk9PntsZXR7cm93c3BhbjpBZX09ZmU7cmV0dXJuIE1hdGgubWF4KGNlLEFlKX0sMSk7bGV0IEo9MDtyZXR1cm4gUC5sZW5ndGg+MSYmUFswXS5yb3dzcGFuPFkmJihKPVkt''@;'; put 'put ''UFswXS5yb3dzcGFuKSxQLmZvckVhY2goY2U9PntsZXR7cm93c3BhbjpmZX09Y2UsQWU9MDtBZT0idG9wIj09PWV8fCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1lP01hdGgubWluKFksdGhpcy5ob3Qudmlldy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLXQpOmZlLUosbj1NYXRo''@;'; put 'put ''Lm1heChuPz8wLFF2ZSh0aGlzLmhvdCx0LEFlKSl9KSxufWNvbnN0IHNqPSJtdWx0aUNvbHVtblNvcnRpbmciLG95ZT1zajt5N2Uoc2osZnVuY3Rpb24gV3Z0KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7Y29uc3RbLC4uLmldPWUsWywuLi5hXT1yO3JldHVybiBmdW5jdGlvbiBjKG0pe2Nv''@;'; put 'put ''bnN0IEM9blttXSxQPXRbbV0sWT1pW21dLEo9YVttXSxjZT1QLm11bHRpQ29sdW1uU29ydGluZyxBZT0oY2UuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9jZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5Ol83ZShQLnR5cGUpKShDLFAsY2UpKFksSik7aWYoQWU9PT1ONCl7Y29uc3QgSGU9bSsxO2lm''@;'; put 'put ''KHR5cGVvZiB0W0hlXTwidSIpcmV0dXJuIGMoSGUpfXJldHVybiBBZX0oMCl9fSk7Y2xhc3MgcXZ0IGV4dGVuZHMgRDdle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBHdnQobix0LGUpe3JldHVybih0PWZ1bmN0aW9uICR2dChuKXt2YXIgdD1mdW5jdGlvbiBL''@;'; put 'put ''dnQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4s''@;'; put 'put ''dCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSh0aGlzLCJwbHVnaW5LZXkiLHNqKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gc2p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfWlzRW5h''@;'; put 'put ''YmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5hYmxlUGx1Z2luKCl7c3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnJlZ2lzdGVyU2hv''@;'; put 'put ''cnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6dH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3Jl''@;'; put 'put ''dHVybi0xPT09dC5yb3cmJnQuY29sPj0wJiZ0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyh0LmNvbCxGVikpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgdCxlO2NvbnN0IHI9bnVsbD09PSh0PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PXQ/dm9p''@;'; put 'put ''ZCAwOnQuaGlnaGxpZ2h0O3JldHVybiByJiYobnVsbD09PShlPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKHIpJiZyLmlzSGVhZGVyKCl9LHJlbGF0aXZl''@;'; put 'put ''VG9Hcm91cDpjOCxwb3NpdGlvbjoiYmVmb3JlIixncm91cDpveWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKG95''@;'; put 'put ''ZSl9c29ydCh0KXtzdXBlci5zb3J0KHQpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZpZyh0KXtyZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyh0KX1zZXRTb3J0Q29uZmlnKHQpe3N1cGVyLnNldFNv''@;'; put 'put ''cnRDb25maWcodCl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Q6W3RdfXVwZGF0ZUhlYWRlckNsYXNzZXModCl7Zm9yKHZhciBl''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZT4xP2UtMTowKSxpPTE7aTxlO2krKylyW2ktMV09YXJndW1lbnRzW2ldO3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXModCwuLi5yKSxIYSh0LGZ1bmN0aW9uIFl2dChuKXtjb25zdCB0PW4uY2xhc3NOYW1lLnNwbGl0KCIgIiksZT1uZXcg''@;'; put 'put ''UmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiB0LmZpbHRlcihyPT5lLnRlc3QocikpfSh0KSksITEhPT10aGlzLmVuYWJsZWQmJnRpKHQsZnVuY3Rpb24gWnZ0KG4sdCxlKXtjb25zdCByPVtdO3JldHVybiExPT09ZXx8bi5pc0NvbHVtblNvcnRlZCh0KSYmbi5nZXROdW1iZXJP''@;'; put 'put ''ZlNvcnRlZENvbHVtbnMoKT4xJiZyLnB1c2goYHNvcnQtJHtuLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZSh0KSsxfWApLHJ9KC4uLnIpKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKHQsZSl7ITEhPT1ibmUoZS5yb3csZS5jb2wsdCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tl''@;'; put 'put ''ZCh0LGUuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT8odGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhlLmNvbCksdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWcoZS5jb2wsRlYpKSk6dGhpcy5z''@;'; put 'put ''b3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhlLmNvbCkpKX19ZnVuY3Rpb24gc3llKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBKdnQobil7dmFyIHQ9ZnVuY3Rpb24gUXZ0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1p''@;'; put 'put ''dGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9''@;'; put 'put ''PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1j''@;'; put 'put ''bGFzcyBueXQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksc3llKHRoaXMsImRyYWdnZWQiLFtdKSxzeWUodGhpcywibGFzdFNldENlbGwiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJtdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMifXN0''@;'; put 'put ''YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE2MH1pc0VuYWJsZWQoKXtyZXR1cm4gc3AoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3Qg''@;'; put 'put ''dD10aGlzLHtyb290RWxlbWVudDplfT10aGlzLmhvdDtmdW5jdGlvbiByKGkpe2lmKDE9PT10LmRyYWdnZWQubGVuZ3RoKXJldHVybiB0LmRyYWdnZWQuc3BsaWNlKDAsdC5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgYT10LmRyYWdnZWQuaW5kZXhPZihpKTtpZigtMT09PWEpcmV0dXJuITE7''@;'; put 'put ''MD09PWE/dC5kcmFnZ2VkPXQuZHJhZ2dlZC5zbGljZSgwLDEpOjE9PT1hJiYodC5kcmFnZ2VkPXQuZHJhZ2dlZC5zbGljZSgtMSkpfXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwidG91Y2hzdGFydCIsaT0+e2xldCBhO3JldHVybiB2byhpLnRhcmdldCwidG9wU2VsZWN0''@;'; put 'put ''aW9uSGFuZGxlLUhpdEFyZWEiKT8oYT10LmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksdC5kcmFnZ2VkLnB1c2goInRvcCIpLHQudG91Y2hTdGFydFJhbmdlPXt3aWR0aDphLmdldFdpZHRoKCksaGVpZ2h0OmEuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmEuZ2V0RGlyZWN0aW9uKCl9LGku''@;'; put 'put ''cHJldmVudERlZmF1bHQoKSwhMSk6dm8oaS50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGE9dC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLHQuZHJhZ2dlZC5wdXNoKCJib3R0b20iKSx0LnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6YS5nZXRXaWR0aCgpLGhl''@;'; put 'put ''aWdodDphLmdldEhlaWdodCgpLGRpcmVjdGlvbjphLmdldERpcmVjdGlvbigpfSxpLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwidG91Y2hlbmQiLGk9PnZvKGkudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0''@;'; put 'put ''QXJlYSIpPyhyLmNhbGwodCwidG9wIiksdC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGkucHJldmVudERlZmF1bHQoKSwhMSk6dm8oaS50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KHIuY2FsbCh0LCJib3R0b20iKSx0LnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaS5w''@;'; put 'put ''cmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZSwidG91Y2htb3ZlIixpPT57Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90O2xldCBjLG0sQyxQLFksSjtpZigwPT09dC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3Qg''@;'; put 'put ''Y2U9YS5lbGVtZW50RnJvbVBvaW50KGkudG91Y2hlc1swXS5jbGllbnRYLGkudG91Y2hlc1swXS5jbGllbnRZKTshY2V8fGNlPT09dC5sYXN0U2V0Q2VsbHx8KCgiVEQiPT09Y2Uubm9kZU5hbWV8fCJUSCI9PT1jZS5ub2RlTmFtZSkmJihjPXQuaG90LmdldENvb3JkcyhjZSksLTE9PT1jLmNv''@;'; put 'put ''bCYmKGMuY29sPTApLG09dC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLEM9bS5nZXRXaWR0aCgpLFA9bS5nZXRIZWlnaHQoKSxZPW0uZ2V0RGlyZWN0aW9uKCksMT09PUMmJjE9PT1QJiZ0LmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoYyksSj10LmdldEN1cnJlbnRSYW5nZUNvb3Jk''@;'; put 'put ''cyhtLGMsdC50b3VjaFN0YXJ0UmFuZ2UuZGlyZWN0aW9uLFksdC5kcmFnZ2VkWzBdKSxudWxsIT09Si5zdGFydCYmdC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlU3RhcnQoSi5zdGFydCksdC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKEouZW5kKSx0Lmxhc3RTZXRDZWxsPWNlKSxpLnByZXZl''@;'; put 'put ''bnREZWZhdWx0KCkpfSl9Z2V0Q3VycmVudFJhbmdlQ29vcmRzKHQsZSxyLGksYSl7Y29uc3QgYz10LmdldFRvcFN0YXJ0Q29ybmVyKCksbT10LmdldEJvdHRvbUVuZENvcm5lcigpLEM9dC5nZXRCb3R0b21TdGFydENvcm5lcigpLFA9dC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgWT17c3RhcnQ6''@;'; put 'put ''bnVsbCxlbmQ6bnVsbH07c3dpdGNoKHIpe2Nhc2UiTkUtU1ciOnN3aXRjaChpKXtjYXNlIk5FLVNXIjpjYXNlIk5XLVNFIjpZPSJ0b3AiPT09YT97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZS5yb3csdC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMoQy5yb3csZS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModC5oaWdobGlnaHQucm93LGUuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZS5yb3csYy5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWEmJihZPXtzdGFydDp0''@;'; put 'put ''aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhtLnJvdyxlLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGUucm93LGMuY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChpKXtjYXNlIk5FLVNXIjoidG9wIj09PWE/WT17c3RhcnQ6ZSxlbmQ6Q306WS5lbmQ9ZTticmVh''@;'; put 'put ''aztjYXNlIk5XLVNFIjoidG9wIj09PWE/WT17c3RhcnQ6ZSxlbmQ6bX06WS5lbmQ9ZTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWE/WT17c3RhcnQ6ZSxlbmQ6Y306WS5lbmQ9ZTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWE/WT17c3RhcnQ6ZSxlbmQ6UH06WS5lbmQ9ZX1icmVhaztj''@;'; put 'put ''YXNlIlNXLU5FIjpzd2l0Y2goaSl7Y2FzZSJOVy1TRSI6WT0iYm90dG9tIj09PWE/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGUucm93LGMuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoQy5yb3csZS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMoYy5yb3csZS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhlLnJvdyxtLmNvbCl9O2JyZWFrO2Nhc2UiU1ctTkUiOlk9InRvcCI9PT1hP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0LmhpZ2hsaWdodC5yb3csZS5jb2wpLGVuZDp0aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhlLnJvdyxtLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhlLnJvdyxjLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGMucm93LGUuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1hP1k9e3N0YXJ0''@;'; put 'put ''OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGUucm93LFAuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYy5yb3csZS5jb2wpfToidG9wIj09PWEmJihZPXtzdGFydDpDLGVuZDplfSl9YnJlYWs7Y2FzZSJTRS1OVyI6c3dpdGNoKGkpe2Nhc2UiTlctU0UiOmNhc2UiTkUt''@;'; put 'put ''U1ciOmNhc2UiU1ctTkUiOiJ0b3AiPT09YSYmKFkuZW5kPWUpO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09YT9ZLmVuZD1lOlk9e3N0YXJ0OmUsZW5kOmN9fX1yZXR1cm4gWX1pc0RyYWdnZWQoKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1mdW5jdGlvbiBuaWUoKXtsZXR7bGFi''@;'; put 'put ''ZWw6bj0iIixjb2xzcGFuOnQ9MSxvcmlnQ29sc3BhbjplPTEsY29sbGFwc2libGU6cj0hMSxjcm9zc0hpZGRlbkNvbHVtbnM6aT1bXSxpc0NvbGxhcHNlZDphPSExLGlzSGlkZGVuOmM9ITEsaXNSb290Om09ITEsaXNQbGFjZWhvbGRlcjpDPSExLGhlYWRlckNsYXNzTmFtZXM6UD1bXX09YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybntsYWJlbDpuLGNvbHNwYW46dCxvcmlnQ29sc3BhbjplLGNvbGxhcHNpYmxlOnIsaXNDb2xsYXBzZWQ6YSxjcm9zc0hpZGRlbkNvbHVtbnM6aSxpc0hpZGRlbjpjLGlzUm9vdDptLGlz''@;'; put 'put ''UGxhY2Vob2xkZXI6QyxoZWFkZXJDbGFzc05hbWVzOlB9fWZ1bmN0aW9uIHJpZShuLHQsZSl7KGZ1bmN0aW9uIGl5dChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2Jq''@;'; put 'put ''ZWN0Iil9KShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gTXAobix0KXtyZXR1cm4gbi5nZXQoY3llKG4sdCkpfWZ1bmN0aW9uIEJEKG4sdCxlKXtyZXR1cm4gbi5zZXQoY3llKG4sdCksZSksZX1mdW5jdGlvbiBjeWUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFz''@;'; put 'put ''KHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHV5ZT1bImxhYmVsIiwiY29sbGFwc2libGUiXTt2YXIgajU9bmV3IFdlYWtNYXAsTHk9bmV3IFdl''@;'; put 'put ''YWtNYXAsaWllPW5ldyBXZWFrTWFwO2NsYXNzIGF5dHtjb25zdHJ1Y3Rvcigpe3JpZSh0aGlzLGo1LFtdKSxyaWUodGhpcyxMeSwwKSxyaWUodGhpcyxpaWUsMS8wKX1zZXRDb2x1bW5zTGltaXQodCl7QkQoaWllLHRoaXMsdCl9c2V0RGF0YSgpe0JEKGo1LHRoaXMsZnVuY3Rpb24gcnl0KG4p''@;'; put 'put ''e2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzA7Y29uc3QgZT1bXTtpZigwPT09dClyZXR1cm4gZTtZbihuLGk9Pntjb25zdCBhPVtdO2xldCBjPTA7ZS5wdXNoKGEpLFluKGksbT0+e2NvbnN0IEM9bmllKCk7aWYoaG8obSkp''@;'; put 'put ''e2NvbnN0e2xhYmVsOlksY29sc3BhbjpKLGhlYWRlckNsYXNzTmFtZTpjZX09bTtDLmxhYmVsPXFsKFkpLCJudW1iZXIiPT10eXBlb2YgSiYmSj4xJiYoQy5jb2xzcGFuPUosQy5vcmlnQ29sc3Bhbj1KKSwic3RyaW5nIj09dHlwZW9mIGNlJiYoQy5oZWFkZXJDbGFzc05hbWVzPVsuLi5jZS5z''@;'; put 'put ''cGxpdCgiICIpXSl9ZWxzZSBDLmxhYmVsPXFsKG0pO2MrPUMub3JpZ0NvbHNwYW47bGV0IFA9ITE7aWYoYz49dCYmKEMuY29sc3Bhbj1DLm9yaWdDb2xzcGFuLShjLXQpLEMub3JpZ0NvbHNwYW49Qy5jb2xzcGFuLFA9ITApLGEucHVzaChDKSxDLmNvbHNwYW4+MSlmb3IobGV0IFk9MDtZPEMu''@;'; put 'put ''Y29sc3Bhbi0xO1krKylhLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtyZXR1cm4hUH0pfSk7Y29uc3Qgcj1NYXRoLm1heCguLi5XcyhlLGk9PmkubGVuZ3RoKSk7cmV0dXJuIFluKGUsaT0+e2lmKGkubGVuZ3RoPHIpe2NvbnN0IGE9V3MobmV3IEFycmF5KHItaS5sZW5ndGgp''@;'; put 'put ''LCgpPT5uaWUoKSk7aS5zcGxpY2UoaS5sZW5ndGgsMCwuLi5hKX19KSxlfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sTXAoaWllLHRoaXMpKSksQkQoTHksdGhpcyxNcChqNSx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4g''@;'; put 'put ''TXAoajUsdGhpcyl9bWVyZ2VXaXRoKHQpe1luKHQsZT0+e2xldHtyb3c6cixjb2w6aSwuLi5hfT1lO2NvbnN0IGM9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhyLGkpO251bGwhPT1jJiZGdShjLGEsdXllKX0pfW1hcCh0KXtZbihNcChqNSx0aGlzKSxlPT57WW4oZSxyPT57Y29uc3QgaT10KHsu''@;'; put 'put ''Li5yfSk7aG8oaSkmJkZ1KHIsaSx1eWUpfSl9KX1nZXRIZWFkZXJTZXR0aW5ncyh0LGUpe3ZhciByO2lmKHQ+PU1wKEx5LHRoaXMpfHx0PDApcmV0dXJuIG51bGw7Y29uc3QgaT1NcChqNSx0aGlzKVt0XTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaSl8fGU+PWkubGVuZ3RoP251bGw6bnVs''@;'; put 'put ''bCE9PShyPWlbZV0pJiZ2b2lkIDAhPT1yP3I6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3ModCxlKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBpPVtdO2lmKHQ+PU1wKEx5LHRoaXMpfHx0PDApcmV0dXJuIGk7Y29u''@;'; put 'put ''c3QgYT1NcChqNSx0aGlzKVt0XTtsZXQgYz0wO2ZvcihsZXQgbT1lO208YS5sZW5ndGg7bSsrKXtjb25zdCBDPWFbbV07aWYoQy5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxh''@;'; put 'put ''eWVycyIpO2lmKGMrPUMuY29sc3BhbixpLnB1c2goQyksQy5jb2xzcGFuPjEmJihtKz1DLmNvbHNwYW4tMSksYz09PXIpYnJlYWs7aWYoYz5yKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9''@;'; put 'put ''cmV0dXJuIGl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gTXAoTHksdGhpcyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIE1wKEx5LHRoaXMpPjA/TXAoajUsdGhpcylbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtCRChqNSx0aGlzLFtdKSxCRChMeSx0aGlzLDApfX1mdW5jdGlvbiBhaWUobix0LGUp''@;'; put 'put ''e3JldHVybih0PWZ1bmN0aW9uIG95dChuKXt2YXIgdD1mdW5jdGlvbiBzeXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''dD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNvbnN0IGR5ZT0iREYtcHJlLW9yZGVyIixneWU9bmV3IE1hcChbW2R5ZSxmdW5jdGlvbiBoeWUobix0''@;'; put 'put ''KXtsZXQgZT1uLmNhbGwodCx0aGlzKTtmb3IobGV0IHI9MDtyPHRoaXMuY2hpbGRzLmxlbmd0aDtyKyspe2lmKCExPT09ZSlyZXR1cm4hMTtlPWh5ZS5jYWxsKHRoaXMuY2hpbGRzW3JdLG4sdCl9cmV0dXJuIGV9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uIGZ5ZShuLHQpe2ZvcihsZXQg''@;'; put 'put ''ZT0wO2U8dGhpcy5jaGlsZHMubGVuZ3RoO2UrKylpZighMT09PWZ5ZS5jYWxsKHRoaXMuY2hpbGRzW2VdLG4sdCkpcmV0dXJuITE7cmV0dXJuIG4uY2FsbCh0LHRoaXMpfV0sWyJCRiIsZnVuY3Rpb24gY3l0KG4sdCl7Y29uc3QgZT1bdGhpc107IWZ1bmN0aW9uIHIoKXtpZigwPT09ZS5sZW5n''@;'; put 'put ''dGgpcmV0dXJuO2NvbnN0IGk9ZS5zaGlmdCgpO2UucHVzaCguLi5pLmNoaWxkcyksITEhPT1uLmNhbGwodCxpKSYmcigpfSgpfV1dKTtjbGFzcyBsantjb25zdHJ1Y3Rvcih0KXthaWUodGhpcywiZGF0YSIse30pLGFpZSh0aGlzLCJwYXJlbnQiLG51bGwpLGFpZSh0aGlzLCJjaGlsZHMiLFtd''@;'; put 'put ''KSx0aGlzLmRhdGE9dH1hZGRDaGlsZCh0KXt0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRzLnB1c2godCl9Y2xvbmVUcmVlKCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXM7Y29uc3QgZT1uZXcgbGooey4uLnQuZGF0YX0p''@;'; put 'put ''O2ZvcihsZXQgcj0wO3I8dC5jaGlsZHMubGVuZ3RoO3IrKyllLmFkZENoaWxkKHRoaXMuY2xvbmVUcmVlKHQuY2hpbGRzW3JdKSk7cmV0dXJuIGV9cmVwbGFjZVRyZWVXaXRoKHQpe3RoaXMuZGF0YT17Li4udC5kYXRhfSx0aGlzLmNoaWxkcz1bXTtmb3IobGV0IGU9MDtlPHQuY2hpbGRzLmxl''@;'; put 'put ''bmd0aDtlKyspdGhpcy5hZGRDaGlsZCh0LmNoaWxkc1tlXSl9d2Fsa0Rvd24odCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJCRiI7aWYoIWd5ZS5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kg''@;'; put 'put ''IiR7ZX0iIGRvZXMgbm90IGV4aXN0YCk7Z3llLmdldChlKS5jYWxsKHRoaXMsdCx0aGlzKX13YWxrVXAodCl7Y29uc3QgZT10aGlzLHI9aT0+eyExIT09dC5jYWxsKGUsaSkmJm51bGwhPT1pLnBhcmVudCYmcihpLnBhcmVudCl9O3IodGhpcyl9fWZ1bmN0aW9uIG9pZShuLHQsZSl7KGZ1bmN0''@;'; put 'put ''aW9uIGR5dChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gJGQobix0KXtyZXR1cm4gbi5nZXQobXllKG4s''@;'; put 'put ''dCkpfWZ1bmN0aW9uIG15ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFy''@;'; put 'put ''IEFTPW5ldyBXZWFrTWFwLE95PW5ldyBXZWFrTWFwLGtTPW5ldyBXZWFrTWFwO2NsYXNzIGZ5dHtjb25zdHJ1Y3Rvcih0KXtvaWUodGhpcyxBUyxuZXcgTWFwKSxvaWUodGhpcyxPeSxuZXcgTWFwKSxvaWUodGhpcyxrUyxudWxsKSxmdW5jdGlvbiBoeXQobix0LGUpe24uc2V0KG15ZShuLHQp''@;'; put 'put ''LGUpfShrUyx0aGlzLHQpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20oJGQoQVMsdGhpcykudmFsdWVzKCkpfWdldFJvb3RCeUNvbHVtbih0KXtsZXQgZTtyZXR1cm4gJGQoT3ksdGhpcykuaGFzKHQpJiYoZT0kZChBUyx0aGlzKS5nZXQoJGQoT3ksdGhpcykuZ2V0KHQpKSksZX1nZXRO''@;'; put 'put ''b2RlKHQsZSl7Y29uc3Qgcj10aGlzLmdldFJvb3RCeUNvbHVtbihlKTtpZighcilyZXR1cm47Y29uc3QgaT1lLSRkKE95LHRoaXMpLmdldChlKTtsZXQgYyxhPTA7cmV0dXJuIHIud2Fsa0Rvd24obT0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOkMsaGVhZGVyTGV2ZWw6UH19PW07aWYodD09''@;'; put 'put ''PVApe2lmKGk+PWEmJmk8PWErQy0xKXJldHVybiBjPW0sYy5kYXRhLmlzUm9vdD1lPT09Yy5kYXRhLmNvbHVtbkluZGV4LCExO2ErPUN9fSksY31yZWJ1aWxkVHJlZUluZGV4KCl7bGV0IHQ9MDskZChPeSx0aGlzKS5jbGVhcigpLFluKCRkKEFTLHRoaXMpLGU9PntsZXRbLHtkYXRhOntjb2xz''@;'; put 'put ''cGFuOnJ9fV09ZTtmb3IobGV0IGk9dDtpPHQrcjtpKyspJGQoT3ksdGhpcykuc2V0KGksdCk7dCs9cn0pfWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25zdCB0PSRkKGtTLHRoaXMpLmdldENvbHVtbnNDb3VudCgpO2xldCBlPTA7Zm9yKDtlPHQ7KXtjb25zdCByPSRkKGtTLHRoaXMpLmdl''@;'; put 'put ''dEhlYWRlclNldHRpbmdzKDAsZSksaT1uZXcgbGo7JGQoQVMsdGhpcykuc2V0KGUsaSksdGhpcy5idWlsZExlYXZlcyhpLGUsMCxyLm9yaWdDb2xzcGFuKSxlKz1yLm9yaWdDb2xzcGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKHQsZSxyKXtsZXQgaT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MTtjb25zdCBhPSRkKGtTLHRoaXMpLmdldEhlYWRlcnNTZXR0aW5ncyhyLGUsaSk7cis9MSxZbihhLGM9Pntjb25zdCBtPXsuLi5jLGhlYWRlckxldmVsOnItMSxjb2x1bW5JbmRleDplfTtsZXQgQzsxPT09cj8o''@;'; put 'put ''dC5kYXRhPW0sQz10KTooQz1uZXcgbGoobSksdC5hZGRDaGlsZChDKSkscjwkZChrUyx0aGlzKS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKEMsZSxyLGMub3JpZ0NvbHNwYW4pLGUrPWMub3JpZ0NvbHNwYW59KX1jbGVhcigpeyRkKEFTLHRoaXMpLmNsZWFyKCksJGQoT3ks''@;'; put 'put ''dGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gdnllKG4sdCl7bi53YWxrRG93bihlPT57bGV0e2RhdGE6cixjaGlsZHM6aX09ZTtpZighci5pc0hpZGRlbiYmKHQoci5jb2x1bW5JbmRleCksMD09PWkubGVuZ3RoKSlmb3IobGV0IGE9MTthPHIuY29sc3BhbjthKyspdChyLmNvbHVtbkluZGV4K2Ep''@;'; put 'put ''fSl9ZnVuY3Rpb24gY2oobix0KXtsZXR7Y2hpbGRzOmV9PW47aWYoMCE9PWUubGVuZ3RoKXJldHVybiBlWzBdLmRhdGFbdF19ZnVuY3Rpb24gdWoobil7cmV0dXJuIGNqKG4sIm9yaWdDb2xzcGFuIik9PT1uLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gc2llKG4pe2NvbnN0e2RhdGE6dCxj''@;'; put 'put ''aGlsZHM6ZX09bjtpZighdC5pc0NvbGxhcHNlZHx8dC5pc0hpZGRlbnx8dC5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKHVqKG4pKXJldHVybiBzaWUoZVswXSk7dC5p''@;'; put 'put ''c0NvbGxhcHNlZD0hMTtjb25zdCBpPWUuc2xpY2UoMSksYT1uZXcgU2V0O2xldCBjPTA7aWYoaS5sZW5ndGg+MClZbihpLG09PnttLnJlcGxhY2VUcmVlV2l0aChtLmRhdGEuY2xvbmVkVHJlZSksbS5kYXRhLmNsb25lZFRyZWU9bnVsbCxjKz1tLmRhdGEuY29sc3Bhbix2eWUobSxQPT57YS5h''@;'; put 'put ''ZGQoUCl9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjptLG9yaWdDb2xzcGFuOkMsY29sdW1uSW5kZXg6UH09dDtjPUMtbTtmb3IobGV0IFk9MTtZPEM7WSsrKWEuYWRkKFArWSl9cmV0dXJuIG4ud2Fsa1VwKG09Pntjb25zdHtkYXRhOkN9PW07Qy5jb2xzcGFuKz1jLEMuY29sc3Bhbj49Qy5vcmln''@;'; put 'put ''Q29sc3Bhbj8oQy5jb2xzcGFuPUMub3JpZ0NvbHNwYW4sQy5pc0NvbGxhcHNlZD0hMSk6dWoobSkmJihDLmlzQ29sbGFwc2VkPWNqKG0sImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5saWUobiksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20oYSksY29sc3Bh''@;'; put 'put ''bkNvbXBlbnNhdGlvbjpjfX1mdW5jdGlvbiBsaWUobil7dmFyIHQ7Y29uc3R7ZGF0YTplLGNoaWxkczpyfT1uO2lmKGUuaXNDb2xsYXBzZWR8fGUuaXNIaWRkZW58fGUub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10s''@;'; put 'put ''Y29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZih1aihuKSlyZXR1cm4gbGllKHJbMF0pO2UuaXNDb2xsYXBzZWQ9ITA7Y29uc3QgYT1yLnNsaWNlKDEpLGM9bmV3IFNldDtpZihhLmxlbmd0aD4wKVluKGEsQz0+e3Z5ZShDLFA9PntjLmFkZChQKX0pLEMuZGF0YS5jbG9uZWRUcmVlPUMuY2xvbmVU''@;'; put 'put ''cmVlKCksQy53YWxrRG93bihQPT57bGV0e2RhdGE6WX09UDtZLmlzSGlkZGVuPSEwfSl9KTtlbHNle2NvbnN0e29yaWdDb2xzcGFuOkMsY29sdW1uSW5kZXg6UH09ZTtmb3IobGV0IFk9MTtZPEM7WSsrKWMuYWRkKFArWSl9Y29uc3QgbT1lLmNvbHNwYW4tKG51bGwhPT0odD1jaihuLCJjb2xz''@;'; put 'put ''cGFuIikpJiZ2b2lkIDAhPT10P3Q6MSk7cmV0dXJuIG4ud2Fsa1VwKEM9Pntjb25zdHtkYXRhOlB9PUM7UC5jb2xzcGFuLT1tLFAuY29sc3Bhbjw9MT8oUC5jb2xzcGFuPTEsUC5pc0NvbGxhcHNlZD0hMCk6dWooQykmJihQLmlzQ29sbGFwc2VkPWNqKEMsImlzQ29sbGFwc2VkIikpfSkse3Jv''@;'; put 'put ''bGxiYWNrTW9kaWZpY2F0aW9uOigpPT5zaWUobiksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20oYyksY29sc3BhbkNvbXBlbnNhdGlvbjptfX1jb25zdCB5eWU9bmV3IE1hcChbWyJjb2xsYXBzZSIsbGllXSxbImV4cGFuZCIsc2llXSxbImhpZGUtY29sdW1uIixmdW5jdGlvbiBweXQobix0''@;'; put 'put ''KXtpZighTnVtYmVyLmlzSW50ZWdlcih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYobi5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGVsYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhl''@;'; put 'put ''IGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBoaWRlIGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmV9PW4uZGF0YTtpZihlLmluY2x1ZGVzKHQpKXJldHVybjtsZXQgcj0h''@;'; put 'put ''MTtuLndhbGtVcChpPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6YX19PWk7aWYoYSlyZXR1cm4gcj0hMCwhMX0pLCFyJiZuLndhbGtVcChpPT57Y29uc3R7ZGF0YTphfT1pO2EuY3Jvc3NIaWRkZW5Db2x1bW5zLnB1c2godCksYS5jb2xzcGFuPjE/YS5jb2xzcGFuLT0xOmEuaXNIaWRkZW49''@;'; put 'put ''ITB9KX1dLFsic2hvdy1jb2x1bW4iLGZ1bmN0aW9uIGd5dChuLHQpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHQpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihuLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoZWxgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6ZX09''@;'; put 'put ''bi5kYXRhO2lmKCFlLmluY2x1ZGVzKHQpKXJldHVybjtsZXQgcj0hMTtuLndhbGtVcChpPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6YX19PWk7aWYoYSlyZXR1cm4gcj0hMCwhMX0pLCFyJiZuLndhbGtVcChpPT57Y29uc3R7ZGF0YTphfT1pO2EuY3Jvc3NIaWRkZW5Db2x1bW5zLnNwbGlj''@;'; put 'put ''ZShhLmNyb3NzSGlkZGVuQ29sdW1ucy5pbmRleE9mKHQpLDEpLCFhLmlzSGlkZGVuJiZhLmNvbHNwYW48YS5vcmlnQ29sc3BhbiYmKGEuY29sc3Bhbis9MSksYS5pc0hpZGRlbj0hMX0pfV1dKTtmdW5jdGlvbiBkaihuKXtjb25zdCB0PVtdO3JldHVybiBZbihuLGU9PntlLndhbGtEb3duKHI9''@;'; put 'put ''Pntjb25zdCBpPXIuZGF0YSx7b3JpZ0NvbHNwYW46YSxjb2x1bW5JbmRleDpjLGhlYWRlckxldmVsOm0sY3Jvc3NIaWRkZW5Db2x1bW5zOkN9PWksUD1mdW5jdGlvbiB5eXQobix0KXtsZXQgZTtyZXR1cm4gQXJyYXkuaXNBcnJheShuW3RdKT9lPW5bdF06KGU9W10sblt0XT1lKSxlfSh0LG0p''@;'; put 'put ''O2xldCBZPSExO2ZvcihsZXQgSj1jO0o8YythO0orKylpZihDLmluY2x1ZGVzKEopfHxZKVAucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO2Vsc2V7Y29uc3QgZmU9dnl0KGkpO2ZlLmlzUm9vdD0hMCxQLnB1c2goZmUpLFk9ITB9fSl9KSx0fWZ1bmN0aW9uIHZ5dChuKXtjb25z''@;'; put 'put ''dHtjcm9zc0hpZGRlbkNvbHVtbnM6dCwuLi5lfT1uaWUobik7cmV0dXJuIGV9ZnVuY3Rpb24gY2llKG4sdCxlKXsoZnVuY3Rpb24gX3l0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBqRChuLHQsZSl7cmV0dXJuIG4uc2V0KF95ZShuLHQpLGUpLGV9ZnVuY3Rpb24gbnUobix0KXtyZXR1cm4gbi5nZXQoX3llKG4sdCkpfWZ1bmN0aW9uIF95ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/''@;'; put 'put ''bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHRnPW5ldyBXZWFrTWFwLFVoPW5ldyBXZWFrTWFwLFB5PW5ldyBXZWFrTWFwO2Ns''@;'; put 'put ''YXNzIGJ5dHtjb25zdHJ1Y3Rvcigpe2NpZSh0aGlzLHRnLG5ldyBheXQpLGNpZSh0aGlzLFVoLG5ldyBmeXQobnUodGcsdGhpcykpKSxjaWUodGhpcyxQeSxbW11dKX1zZXRTdGF0ZSh0KXtudSh0Zyx0aGlzKS5zZXREYXRhKHQpO2xldCBlPSExO3RyeXtudShVaCx0aGlzKS5idWlsZFRyZWUo''@;'; put 'put ''KX1jYXRjaHtudShVaCx0aGlzKS5jbGVhcigpLG51KHRnLHRoaXMpLmNsZWFyKCksZT0hMH1yZXR1cm4gakQoUHksdGhpcyxkaihudShVaCx0aGlzKS5nZXRSb290cygpKSksZX1zZXRDb2x1bW5zTGltaXQodCl7bnUodGcsdGhpcykuc2V0Q29sdW1uc0xpbWl0KHQpfW1lcmdlU3RhdGVXaXRo''@;'; put 'put ''KHQpe2NvbnN0IGU9V3ModCxyPT57bGV0e3JvdzppLC4uLmF9PXI7cmV0dXJue3JvdzppPDA/dGhpcy5yb3dDb29yZHNUb0xldmVsKGkpOmksLi4uYX19KTtudSh0Zyx0aGlzKS5tZXJnZVdpdGgoZSksbnUoVWgsdGhpcykuYnVpbGRUcmVlKCksakQoUHksdGhpcyxkaihudShVaCx0aGlzKS5n''@;'; put 'put ''ZXRSb290cygpKSl9bWFwU3RhdGUodCl7bnUodGcsdGhpcykubWFwKHQpLG51KFVoLHRoaXMpLmJ1aWxkVHJlZSgpLGpEKFB5LHRoaXMsZGoobnUoVWgsdGhpcykuZ2V0Um9vdHMoKSkpfW1hcE5vZGVzKHQpe3JldHVybiBkMChudShVaCx0aGlzKS5nZXRSb290cygpLChlLHIpPT4oci53YWxr''@;'; put 'put ''RG93bihpPT57Y29uc3QgYT10KGkuZGF0YSk7dm9pZCAwIT09YSYmZS5wdXNoKGEpfSksZSksW10pfXRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKHQsZSxyKXtlPDAmJihlPXRoaXMucm93Q29vcmRzVG9MZXZlbChlKSk7Y29uc3QgaT1udShVaCx0aGlzKS5nZXROb2RlKGUscik7bGV0IGE7cmV0''@;'; put 'put ''dXJuIGkmJihhPWZ1bmN0aW9uIG15dChuLHQsZSl7aWYoIXl5ZS5oYXMobikpdGhyb3cgbmV3IEVycm9yKGBUaGUgbm9kZSBtb2RpZmllciBhY3Rpb24gKCIke259IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIHl5ZS5nZXQobikodCxlKX0odCxpLHIpLGpEKFB5LHRoaXMsZGoobnUoVWgs''@;'; put 'put ''dGhpcykuZ2V0Um9vdHMoKSkpKSxhfXRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24odCxlKXtyZXR1cm4gdGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbih0LC0xLGUpfXJvd0Nvb3Jkc1RvTGV2ZWwodCl7aWYodD49MClyZXR1cm4gbnVsbDtjb25zdCBlPXQrTWF0aC5tYXgodGhpcy5nZXRM''@;'; put 'put ''YXllcnNDb3VudCgpLDEpO3JldHVybiBlPDA/bnVsbDplfWxldmVsVG9Sb3dDb29yZHModCl7aWYodDwwKXJldHVybiBudWxsO2NvbnN0IGU9dC1NYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGU+PTA/bnVsbDplfWdldEhlYWRlclNldHRpbmdzKHQsZSl7dmFyIHIs''@;'; put 'put ''aTtyZXR1cm4gdDwwJiYodD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwodCkpLG51bGw9PT10fHx0Pj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpudWxsIT09KHI9bnVsbD09PShpPW51KFB5LHRoaXMpW3RdKXx8dm9pZCAwPT09aT92b2lkIDA6aVtlXSkmJnZvaWQgMCE9PXI/cjpudWxsfWdl''@;'; put 'put ''dEhlYWRlclRyZWVOb2RlRGF0YSh0LGUpe2NvbnN0IHI9dGhpcy5nZXRIZWFkZXJUcmVlTm9kZSh0LGUpO3JldHVybiByP3suLi5yLmRhdGF9Om51bGx9Z2V0SGVhZGVyVHJlZU5vZGUodCxlKXtyZXR1cm4gdDwwJiYodD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwodCkpLG51bGw9PT10fHx0Pj10''@;'; put 'put ''aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpudShVaCx0aGlzKS5nZXROb2RlKHQsZSl8fG51bGx9ZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbCh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dDtjb25zdCByPWUtdCsx''@;'; put 'put ''O2xldCBpPSExLGE9bnVsbDtmb3IobGV0IGM9dDtjPD1lO2MrKyl7Y29uc3QgbT1udShVaCx0aGlzKS5nZXRSb290QnlDb2x1bW4oYyk7aWYoIW0pYnJlYWs7aT0hMCxtLndhbGtEb3duKEM9Pntjb25zdHtjb2x1bW5JbmRleDpQLGhlYWRlckxldmVsOlksb3JpZ0NvbHNwYW46Sixpc0hpZGRl''@;'; put 'put ''bjpjZX09Qy5kYXRhO2NlfHxKPD1yJiZQPj10JiZQK0otMTw9ZSYmKG51bGw9PT1hfHxZPGEpJiYoYT1ZKX0sZHllKX1yZXR1cm4gaSYmbnVsbD09PWE/LTE6dGhpcy5sZXZlbFRvUm93Q29vcmRzKGE/PzApfWZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KHQsZSl7dmFyIHI7Y29uc3R7aXNSb290''@;'; put 'put ''Oml9PW51bGwhPT0ocj10aGlzLmdldEhlYWRlclNldHRpbmdzKHQsZSkpJiZ2b2lkIDAhPT1yP3I6e2lzUm9vdDohMH07aWYoaSlyZXR1cm4gZTtsZXQgYT1lLTE7Zm9yKDthPj0wOyl7dmFyIGM7Y29uc3R7aXNSb290Om19PW51bGwhPT0oYz10aGlzLmdldEhlYWRlclNldHRpbmdzKHQsYSkp''@;'; put 'put ''JiZ2b2lkIDAhPT1jP2M6e2lzUm9vdDohMH07aWYobSlicmVhazthLT0xfXJldHVybiBhfWZpbmRSaWdodE1vc3RDb2x1bW5JbmRleCh0LGUpe3ZhciByO2NvbnN0e2lzUm9vdDppLG9yaWdDb2xzcGFuOmF9PW51bGwhPT0ocj10aGlzLmdldEhlYWRlclNldHRpbmdzKHQsZSkpJiZ2b2lkIDAh''@;'; put 'put ''PT1yP3I6e2lzUm9vdDohMCxvcmlnQ29sc3BhbjoxfTtpZihpKXJldHVybiBlK2EtMTtsZXQgYz1lKzE7Zm9yKDtjPHRoaXMuZ2V0Q29sdW1uc0NvdW50KCk7KXt2YXIgbTtjb25zdHtpc1Jvb3Q6Q309bnVsbCE9PShtPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3ModCxjKSkmJnZvaWQgMCE9PW0/''@;'; put 'put ''bTp7aXNSb290OiEwfTtpZihDKWJyZWFrO2MrPTF9cmV0dXJuIGMtMX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBudSh0Zyx0aGlzKS5nZXRMYXllcnNDb3VudCgpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiBudSh0Zyx0aGlzKS5nZXRDb2x1bW5zQ291bnQoKX1jbGVhcigpe2pEKFB5LHRo''@;'; put 'put ''aXMsW10pLG51KHRnLHRoaXMpLmNsZWFyKCksbnUoVWgsdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gekQobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIHd5dChuKXt2YXIgdD1mdW5jdGlvbiBDeXQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5b''@;'; put 'put ''dF09ZSxufWNvbnN0IE15dD1jbGFzcyBTeXR7Y29uc3RydWN0b3IodCxlKXt6RCh0aGlzLCJob3QiLHZvaWQgMCksekQodGhpcywibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLHZvaWQgMCksekQodGhpcywibGF5ZXJzQ291bnQiLDApLHpEKHRoaXMsImNvbnRhaW5lciIsdm9pZCAwKSx6''@;'; put 'put ''RCh0aGlzLCJ3aWR0aHNNYXAiLHZvaWQgMCksdGhpcy5ob3Q9dCx0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyPWUsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgibmVzdGVkSGVhZGVycy53aWR0aHNNYXAi''@;'; put 'put ''LCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfXNldExheWVyc0NvdW50KHQpe3JldHVybiB0aGlzLmxheWVyc0NvdW50PXQsdGhpc31nZXRXaWR0aCh0KXtyZXR1cm4gdGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odCkpfWJ1aWxkV2lkdGhz''@;'; put 'put ''TWFwKCl7Y29uc3QgdD10aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCk7dGhpcy5jb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhhbmRzb250YWJsZSIsImh0R2hvc3RUYWJsZSIsImh0''@;'; put 'put ''QXV0b1NpemUiKSx0JiZ0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHQpLHRoaXMuX2J1aWxkR2hvc3RUYWJsZSh0aGlzLmNvbnRhaW5lciksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO2NvbnN0IGU9dGhpcy5jb250YWluZXIucXVl''@;'; put 'put ''cnlTZWxlY3RvckFsbCgidHI6bGFzdC1vZi10eXBlIHRoIikscj1lLmxlbmd0aDt0aGlzLndpZHRoc01hcC5jbGVhcigpO2ZvcihsZXQgaT0wO2k8cjtpKyspe2NvbnN0IGE9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChpKSxjPXRoaXMu''@;'; put 'put ''aG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7dGhpcy53aWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGMsZVtpXS5vZmZzZXRXaWR0aCl9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbH1fYnVpbGRHaG9zdFRhYmxl''@;'; put 'put ''KHQpe2NvbnN0e3Jvb3REb2N1bWVudDplLGNvbHVtbkluZGV4TWFwcGVyOnJ9PXRoaXMuaG90LGk9ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYT1lLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksYz0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LG09ci5nZXRSZW5kZXJh''@;'; put 'put ''YmxlSW5kZXhlc0xlbmd0aCgpO2ZvcihsZXQgQz0wO0M8dGhpcy5sYXllcnNDb3VudDtDKyspe2NvbnN0IFA9ZS5jcmVhdGVFbGVtZW50KCJ0ciIpO2ZvcihsZXQgWT0wO1k8bTtZKyspe2xldCBKPXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChZKTtudWxsPT09SiYmKEo9WSk7Y29u''@;'; put 'put ''c3QgY2U9ZS5jcmVhdGVFbGVtZW50KCJ0aCIpLGZlPXRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIoQyxKKTtpZihmZSYmKCFmZS5pc1BsYWNlaG9sZGVyfHxmZS5pc0hpZGRlbikpe2xldCBBZT1mZS5sYWJlbDtjJiYoQWUrPSc8YnV0dG9uIGNsYXNzPSJjaGFuZ2VUeXBlIj48L2J1''@;'; put 'put ''dHRvbj4nKSxKNihjZSxBZSksY2UuY29sU3Bhbj1mZS5jb2xzcGFuLFAuYXBwZW5kQ2hpbGQoY2UpfX1hLmFwcGVuZENoaWxkKFApfWkuYXBwZW5kQ2hpbGQoYSksdC5hcHBlbmRDaGlsZChpKX1jbGVhcigpe3RoaXMud2lkdGhzTWFwLmNsZWFyKCksdGhpcy5jb250YWluZXI9bnVsbH19O2Z1''@;'; put 'put ''bmN0aW9uIGJ5ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRXl0KG4pe3ZhciB0PWZ1bmN0aW9uIFR5dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gRFMobix0LGUpe3d5ZShuLHQpLHQuc2V0KG4sZSl9ZnVu''@;'; put 'put ''Y3Rpb24gd3llKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB6NShuLHQsZSl7cmV0dXJuIG4uc2V0KEQwKG4sdCksZSksZX1mdW5jdGlv''@;'; put 'put ''biBxbyhuLHQpe3JldHVybiBuLmdldChEMChuLHQpKX1mdW5jdGlvbiBEMChuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBw''@;'; put 'put ''cmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQ3llPSJuZXN0ZWRIZWFkZXJzIjt2YXIgUmw9bmV3IFdlYWtNYXAsVTg9bmV3IFdlYWtNYXAsVUQ9bmV3IFdlYWtNYXAsaGo9bmV3IFdlYWtNYXAsZmo9bmV3IFdlYWtNYXAsRnk9bmV3IFdlYWtNYXAscTA9bmV3IFdlYWtTZXQ7Y2xhc3Mg''@;'; put 'put ''a3l0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHh5dChuLHQpe3d5ZShuLHQpLHQuYWRkKG4pfSh0aGlzLHEwKSxEUyh0aGlzLFJsLG5ldyBieXQpLERTKHRoaXMsVTgsbnVsbCksRFModGhpcyxVRCxudWxsKSxEUyh0aGlzLGhqLCExKSxE''@;'; put 'put ''Uyh0aGlzLGZqLG51bGwpLGJ5ZSh0aGlzLCJnaG9zdFRhYmxlIixuZXcgTXl0KHRoaXMuaG90LCh0LGUpPT50aGlzLmdldEhlYWRlclNldHRpbmdzKHQsZSkpKSxieWUodGhpcywiZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyIsITEpLERTKHRoaXMsRnksKCk9Pnt2YXIgdDtjb25zdCBlPW51''@;'; put 'put ''bGw9PT0odD10aGlzLmhvdCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFlKXJldHVybjtjb25zdHtoaWdobGlnaHQ6cn09ZTtpZihyLmlzSGVhZGVyKCkmJnIuY29sPj0wKXtjb25zdCBhPXFvKFJsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbklu''@;'; put 'put ''ZGV4KHIucm93LHIuY29sKSxjPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtjLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQuY29sPWEsYy52aXN1YWxDZWxsUmFuZ2UuZnJvbS5jb2w9YSxjLnZpc3VhbENlbGxSYW5nZS50by5jb2w9YSxjLmNvbW1pdCgpfX0pfXN0''@;'; put 'put ''YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBDeWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDeWVdfWVuYWJsZVBsdWdpbigpe3ZhciB0PXRoaXM7aWYodGhpcy5lbmFibGVkKXJl''@;'; put 'put ''dHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmV9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7KCFBcnJheS5pc0FycmF5KGUpfHwhQXJyYXkuaXNBcnJheShlWzBdKSkmJm9zKGVsYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gVGhlIHNldHRpbmdz''@;'; put 'put ''IGhhcyB0byBiZVx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBlLnEuIFtbJ0ExJywgeyBsYWJlbDogJ0EyJywgY29sc3BhbjogMiB9XV1gKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5EMChxMCx0aGlzLFp5dCkuY2FsbCh0aGlzKSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBEMChxMCx0LFl5dCkuY2FsbCh0LC4uLmkpfSksdGhpcy5hZGRIb29rKCJiZWZv''@;'; put 'put ''cmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsTHl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91''@;'; put 'put ''c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBEMChxMCx0LE95dCkuY2FsbCh0LC4uLmkpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsUHl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsRnl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gRDAocTAsdCxIeXQpLmNhbGwodCwuLi5pKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsTnl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+cW8oRnksdGhpcykuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''clNlbGVjdGlvbkZvY3VzU2V0IiwoKT0+cW8oRnksdGhpcykuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2Fd''@;'; put 'put ''PWFyZ3VtZW50c1thXTtyZXR1cm4gRDAocTAsdCxEeXQpLmNhbGwodCwuLi5pKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLHI9PkQwKHEwLHRoaXMsQnl0KS5jYWxsKHRoaXMscikpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsenl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBEMChxMCx0LFV5dCkuY2FsbCh0LC4uLmkpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsSXl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''aT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsUnl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXko''@;'; put 'put ''ciksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsVnl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcg''@;'; put 'put ''QXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEQwKHEwLHQsanl0KS5jYWxsKHQsLi4uaSl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUZvY3VzZWRFbGVtZW50IixmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9''@;'; put 'put ''MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBEMChxMCx0LFd5dCkuY2FsbCh0LC4uLmkpfSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHFvKEZ5LHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhv''@;'; put 'put ''b2soImNhY2hlVXBkYXRlZCIscW8oRnksdGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6dH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtxbyhSbCx0''@;'; put 'put ''aGlzKS5zZXRDb2x1bW5zTGltaXQodGhpcy5ob3QuY291bnRDb2xzKCkpLEFycmF5LmlzQXJyYXkodCkmJih0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnM9cW8oUmwsdGhpcykuc2V0U3RhdGUodCkpLHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyYmb3MoZWxgWW91ciBOZXN0''@;'; put 'put ''ZWQgSGVhZGVycyBwbHVnaW4gc2V0dXAgY29udGFpbnMgb3ZlcmxhcHBpbmcgaGVhZGVycy4gVGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb25ceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLmApLHRoaXMuZW5hYmxlZCYmdGhpcy5ob3QuY29s''@;'; put 'put ''dW1uSW5kZXhNYXBwZXIuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVzKCkuZm9yRWFjaCgoZSxyKT0+e2NvbnN0IGk9ITA9PT1lPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjtxbyhSbCx0aGlzKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGkscil9KSwhcW8oVTgs''@;'; put 'put ''dGhpcykmJnRoaXMuZW5hYmxlZCYmejUoVTgsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVDaGFuZ2VzT2JzZXJ2ZXIoImhpZGluZyIpLnN1YnNjcmliZShlPT57ZS5mb3JFYWNoKHI9PntsZXR7b3A6aSxpbmRleDphLG5ld1ZhbHVlOmN9PXI7aWYoInJlcGxhY2UiPT09''@;'; put 'put ''aSl7Y29uc3QgbT0hMD09PWM/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO3FvKFJsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24obSxhKX19KSx0aGlzLmdob3N0VGFibGUuYnVpbGRXaWR0aHNNYXAoKX0pKSx0aGlzLmdob3N0VGFibGUuc2V0TGF5ZXJzQ291bnQodGhpcy5n''@;'; put 'put ''ZXRMYXllcnNDb3VudCgpKS5idWlsZFdpZHRoc01hcCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIscW8oRnksdGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LnJlbW92ZUxvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixxbyhGeSx0aGlzKSksdGhpcy5jbGVhckNvbHNwYW5zKCkscW8oUmwsdGhpcykuY2xlYXIoKSxxbyhVOCx0aGlzKS51bnN1YnNjcmliZSgpLHo1KFU4LHRoaXMsbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpfWdldFN0YXRlTWFuYWdlcigpe3JldHVybiBxbyhSbCx0aGlzKX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBxbyhSbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpfWdldEhlYWRlclNldHRpbmdzKHQsZSl7cmV0dXJuIHFvKFJsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKHQsZSl9''@;'; put 'put ''Y2xlYXJDb2xzcGFucygpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtfd3Q6dH09dGhpcy5ob3QudmlldyxlPXQuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxyPXQud3RUYWJsZS5USEVBRCxpPXQud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUu''@;'; put 'put ''VEhFQUQsYT10Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsO2ZvcihsZXQgYz0wO2M8ZTtjKyspe2NvbnN0IG09ci5jaGlsZE5vZGVzW2NdO2lmKCFt''@;'; put 'put ''KWJyZWFrO2NvbnN0IEM9aS5jaGlsZE5vZGVzW2NdLFA9YT9hLmNoaWxkTm9kZXNbY106bnVsbDtmb3IobGV0IFk9MCxKPW0uY2hpbGROb2Rlcy5sZW5ndGg7WTxKO1krKyltLmNoaWxkTm9kZXNbWV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksSGEobS5jaGlsZE5vZGVzW1ldLCJoaWRk''@;'; put 'put ''ZW5IZWFkZXIiKSxDJiZDLmNoaWxkTm9kZXNbWV0mJihDLmNoaWxkTm9kZXNbWV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksSGEoQy5jaGlsZE5vZGVzW1ldLCJoaWRkZW5IZWFkZXIiKSksYSYmUCYmUC5jaGlsZE5vZGVzW1ldJiYoUC5jaGlsZE5vZGVzW1ldLnJlbW92ZUF0dHJpYnV0''@;'; put 'put ''ZSgiY29sc3BhbiIpLEhhKFAuY2hpbGROb2Rlc1tZXSwiaGlkZGVuSGVhZGVyIikpfX1oZWFkZXJSZW5kZXJlckZhY3RvcnkodCl7dmFyIGU9dGhpcztjb25zdCByPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJuKGksYSk9Pnt2YXIgYztj''@;'; put 'put ''b25zdHtjb2x1bW5JbmRleE1hcHBlcjptLHZpZXc6Q309dGhpcy5ob3Q7bGV0IFA9bS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGkpO251bGw9PT1QJiYoUD1pKSxhLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLEhhKGEsImhpZGRlbkhlYWRlciIpLEhhKGEsImhpZGRlbkhlYWRl''@;'; put 'put ''clRleHQiKTtjb25zdHtjb2xzcGFuOlksaXNIaWRkZW46Sixpc1BsYWNlaG9sZGVyOmNlLGhlYWRlckNsYXNzTmFtZXM6ZmV9PW51bGwhPT0oYz1xbyhSbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyh0LFApKSYmdm9pZCAwIT09Yz9jOntsYWJlbDoiIn07aWYoY2V8fEopdGkoYSwiaGlkZGVu''@;'; put 'put ''SGVhZGVyIik7ZWxzZSBpZihZPjEpe3ZhciBBZSxIZSxYZTtjb25zdHt3dE92ZXJsYXlzOnJ0fT1DLl93dCxkdD1udWxsPT09KEFlPXJ0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PUFlP3ZvaWQgMDpBZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGEpLGp0''@;'; put 'put ''PW51bGw9PT0oSGU9cnQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09SGU/dm9pZCAwOkhlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoYSk7bnVsbCE9PShYZT1ydC50b3BPdmVybGF5KSYmdm9pZCAwIT09WGUmJlhlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoYSkm''@;'; put 'put ''JlA8ciYmdGkoYSwiaGlkZGVuSGVhZGVyVGV4dCIpO2NvbnN0IHBuPWR0fHxqdD9NYXRoLm1pbihZLHItaSk6WTtwbj4xJiZhLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIscG4pfWlmKHRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKFAsYSxmdW5jdGlvbigpe3JldHVybiBlLmdldENvbHVt''@;'; put 'put ''bkhlYWRlclZhbHVlKC4uLmFyZ3VtZW50cyl9LHQpLCFjZSYmIUope2NvbnN0IHJ0PWEucXVlcnlTZWxlY3RvcigiZGl2LnJlbGF0aXZlIik7cnQmJmZlJiZmZS5sZW5ndGg+MCYmKEhhKHJ0LHRoaXMuaG90LmdldENvbHVtbk1ldGEoUCkuaGVhZGVyQ2xhc3NOYW1lKSx0aShydCxmZSkpfX19''@;'; put 'put ''Z2V0Q29sdW1uSGVhZGVyVmFsdWUodCxlKXt2YXIgcjtjb25zdHtpc0hpZGRlbjppLGlzUGxhY2Vob2xkZXI6YX09bnVsbCE9PShyPXFvKFJsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGUsdCkpJiZ2b2lkIDAhPT1yP3I6e307cmV0dXJuIGF8fGk/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVy''@;'; put 'put ''KHQsZSl9ZGVzdHJveSgpe3o1KFJsLHRoaXMsbnVsbCksbnVsbCE9PXFvKFU4LHRoaXMpJiYocW8oVTgsdGhpcykudW5zdWJzY3JpYmUoKSx6NShVOCx0aGlzLG51bGwpKSxzdXBlci5kZXN0cm95KCl9X2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKHQpe2lmKCEodC5yb3c+PTB8fHQu''@;'; put 'put ''Y29sPDApKXJldHVybiBxbyhSbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEodC5yb3csdC5jb2wpfX1mdW5jdGlvbiBEeXQobix0KXt2YXIgZTtjb25zdCByPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighcilyZXR1cm4gbjtjb25zdHtoaWdobGlnaHQ6aX09cix7''@;'; put 'put ''bmF2aWdhYmxlSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGM9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLG09YT9pLnJvdzpudWxsPT09KGU9cW8oZmosdGhpcykpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnJvdyxDPWM/bjppLmNvbCxQPW08''@;'; put 'put ''MCYmQz49MDtpZih6NShmaix0aGlzLG51bGwpLCFQKXJldHVybiBuO2NvbnN0IFk9dGhpcy5ob3QuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKSxKPXRoaXMuaG90LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSxjZT1KLVkrMSxmZT1xbyhSbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1''@;'; put 'put ''bW5JbmRleChtLEMpLEFlPXFvKFJsLHRoaXMpLmZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChtLEMpLEhlPUFlLWZlKzE7aWYoZmU8WSYmQWU+SilyZXR1cm4gZmU7aWYoYyl7bGV0IFhlPW51bGw7cmV0dXJuIGZlPj1ZJiZBZT5KP0hlPmNlPyh0LnZhbHVlPSJzdGFydCIsWGU9ZmUpOih0LnZh''@;'; put 'put ''bHVlPSJlbmQiLFhlPUFlKTpmZTxZJiZBZTw9SiYmKEhlPmNlPyh0LnZhbHVlPSJlbmQiLFhlPUFlKToodC52YWx1ZT0ic3RhcnQiLFhlPWZlKSksWGV9cmV0dXJuIGZlPD1ZP2ZlOkFlfWZ1bmN0aW9uIEl5dChuLHQsZSl7Y29uc3Qgcj1xbyhSbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURh''@;'; put 'put ''dGEodCxuKTtpZighcilyZXR1cm4gbjtjb25zdHtjb2x1bW5DdXJzb3I6aSxzZWxlY3Rpb25UeXBlOmEsc2VsZWN0aW9uV2lkdGg6Y309ZSx7aXNSb290Om0sY29sc3BhbjpDfT1xbyhSbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyh0LG4pO2lmKGE9PT1zdGUpe2lmKCFtKXJldHVybiByLmNv''@;'; put 'put ''bHVtbkluZGV4fWVsc2UgaWYoYT09PWE2ZSYmKEM+Yy1pfHwhbSkpcmV0dXJuIG51bGw7cmV0dXJuIG59ZnVuY3Rpb24gUnl0KG4sdCxlKXtsZXR7Y29sdW1uSGVhZGVyc0NvdW50OnJ9PWU7aWYoMCE9PXIpZm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2NvbnN0e3N0YXJ0Um93OmMsc3Rh''@;'; put 'put ''cnRDb2w6bSxlbmRSb3c6QyxlbmRDb2w6UH09dFthXSxZPUMtYysxO2lmKGM+PTB8fDE9PW0tUCsxKWJyZWFrO2ZvcihsZXQgY2U9bTtjZTw9UDtjZSsrKWZvcihsZXQgZmU9YztmZTw9QztmZSsrKXt2YXIgaTtjb25zdCBBZT1ZK2ZlLEhlPWNlLW07MCE9PUhlJiYhMT09PShudWxsPT09KGk9''@;'; put 'put ''cW8oUmwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGZlLGNlKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaXNSb290KSYmKG5bQWVdW0hlXT0iIil9fX1mdW5jdGlvbiBMeXQobix0LGUscil7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHModCkmJihyLmNvbHVtbj0hMCl9''@;'; put 'put ''ZnVuY3Rpb24gT3l0KG4sdCl7Y29uc3QgZT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh0KTtpZighZSlyZXR1cm47ejUoVUQsdGhpcyx0LmNsb25lKCkpLHo1KGhqLHRoaXMsITApO2NvbnN0e3NlbGVjdGlvbjpyfT10aGlzLmhvdCxpPXIuaXNTZWxlY3RlZCgpP3IuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGE9W10se2NvbHVtbkluZGV4OmMsb3JpZ0NvbHNwYW46bX09ZSxDPSFyLmluSW5TZWxlY3Rpb24odCk7bi5zaGlmdEtleSYmaT90LmNvbDxpLmZyb20uY29sP2EucHVzaChpLmdldFRvcEVuZENvcm5lcigpLmNvbCxjLHQucm93KTphLnB1''@;'; put 'put ''c2godC5jb2w+aS5mcm9tLmNvbD9pLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sOmMsYyttLTEsdC5yb3cpOihoTihuKXx8bjgobikmJkN8fHk1ZShuKSkmJmEucHVzaChjLGMrbS0xLHQucm93KSxyLnNlbGVjdENvbHVtbnMoLi4uYSl9ZnVuY3Rpb24gUHl0KG4sdCxlLHIpe2lmKCF0aGlzLmhv''@;'; put 'put ''dC52aWV3LmlzTW91c2VEb3duKCl8fHIuY29sdW1uKXJldHVybjtjb25zdCBpPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKHQpO2lmKCFpKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDphLG9yaWdDb2xzcGFuOmN9PWksbT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0''@;'; put 'put ''aXZlKCksQz1tLmdldFRvcFN0YXJ0Q29ybmVyKCksUD1tLmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOll9PW07ci5jb2x1bW49ITAsci5jZWxsPSEwO2NvbnN0IEo9W10sY2U9Z3ModC5yb3csLTEvMCwtMSk7dC5jb2w8WS5jb2w/Si5wdXNoKFAuY29sLGEsY2UpOkoucHVzaCh0LmNvbD5Z''@;'; put 'put ''LmNvbD9DLmNvbDphLGErYy0xLGNlKSx0aGlzLmhvdC5zZWxlY3Rpb24uc2VsZWN0Q29sdW1ucyguLi5KKX1mdW5jdGlvbiBGeXQoKXt6NShoaix0aGlzLCExKX1mdW5jdGlvbiBIeXQoKXtjb25zdHtuYXZpZ2FibGVIZWFkZXJzOm59PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aWYoIXRoaXMu''@;'; put 'put ''aG90LnZpZXcuaXNNb3VzZURvd24oKXx8IXFvKGhqLHRoaXMpfHwhbilyZXR1cm47Y29uc3QgdD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGU9dC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxyPXQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLHtjb2x1bW5JbmRleDppLG9yaWdD''@;'; put 'put ''b2xzcGFuOmF9PXFvKFJsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShxbyhVRCx0aGlzKS5yb3cscW8oVUQsdGhpcykuY29sKTtpZih0LnNldEhpZ2hsaWdodChxbyhVRCx0aGlzKSksYT50LmdldFdpZHRoKCl8fGk8ZXx8aSthLTE+cil7Y29uc3QgYz1xbyhSbCx0aGlzKS5maW5kVG9w''@;'; put 'put ''TW9zdEVudGlyZUhlYWRlckxldmVsKGdzKGUsaSxpK2EtMSksZ3MocixpLGkrYS0xKSk7dC5oaWdobGlnaHQucm93PWMsdC5oaWdobGlnaHQuY29sPXQuZnJvbS5jb2x9fWZ1bmN0aW9uIE55dChuKXtjb25zdHtoaWdobGlnaHQ6dH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgp''@;'; put 'put ''LGU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModC5yb3crbi5yb3csdC5jb2wrbi5jb2wpO2lmKCEoZS5pc0hlYWRlcigpJiZlLmNvbD49MCkpcmV0dXJuO2NvbnN0IGk9cW8oUmwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoZS5yb3csZS5jb2wpLGE9cW8oUmwsdGhpcykuZmlu''@;'; put 'put ''ZFJpZ2h0TW9zdENvbHVtbkluZGV4KGUucm93LGUuY29sKTtpZihuLmNvbDwwKXtjb25zdCBtPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0LmNvbD49aSYmdC5jb2w8PWE/aS0xOmEsLTEpO24uY29sPW51bGw9PT1tPy10aGlzLmhvdC52aWV3''@;'; put 'put ''LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsdC5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKG0sdC5jb2wpLTEsMSl9ZWxzZSBpZihuLmNvbD4wKXtjb25zdCBtPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleCh0LmNvbD49aSYmdC5jb2w8PWE/YSsxOmksMSk7bi5jb2w9bnVsbD09PW0/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSh0LmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJl''@;'; put 'put ''bmRlcmFibGVDb2x1bW5zSW5SYW5nZSh0LmNvbCxtKS0xLDEpfX1mdW5jdGlvbiBWeXQobix0LGUpe2NvbnN0IHI9bi5yb3csaT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OnIsY29sOm4uY29sfSksYT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jk''@;'; put 'put ''cyh7cm93OnIsY29sOnQuY29sfSk7ejUoZmosdGhpcyxlLmNsb25lKCkpLHQuY29sPG4uY29sPyhpJiYobi5jb2w9aS5jb2x1bW5JbmRleCtpLm9yaWdDb2xzcGFuLTEpLGEmJih0LmNvbD1hLmNvbHVtbkluZGV4KSk6dC5jb2w+PW4uY29sJiYoaSYmKG4uY29sPWkuY29sdW1uSW5kZXgpLGEm''@;'; put 'put ''Jih0LmNvbD1hLmNvbHVtbkluZGV4K2Eub3JpZ0NvbHNwYW4tMSkpfWZ1bmN0aW9uIEJ5dChuKXtpZihxbyhSbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpPjApe24ubGVuZ3RoPTA7Zm9yKGxldCB0PTA7dDxxbyhSbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO3QrKyluLnB1c2godGhpcy5oZWFk''@;'; put 'put ''ZXJSZW5kZXJlckZhY3RvcnkodCkpfX1mdW5jdGlvbiBqeXQobil7Y29uc3QgdD1xbyhSbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2xldCBlPW4uc3RhcnRDb2x1bW4scj0hIXQ7Zm9yKGxldCBpPTA7aTx0O2krKyl7Y29uc3QgYT1xbyhSbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRl''@;'; put 'put ''eChpLG4uc3RhcnRDb2x1bW4pLGM9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhKTtpZihhPj0wJiYocj0hMSksbmQoYykmJmM8bi5zdGFydENvbHVtbil7ZT1jO2JyZWFrfX1uLnN0YXJ0Q29sdW1uPXI/cW8oUmwsdGhpcykuZ2V0SGVh''@;'; put 'put ''ZGVyVHJlZU5vZGVEYXRhKDAsZSkuY29sdW1uSW5kZXg6ZX1mdW5jdGlvbiB6eXQobix0KXtjb25zdCBlPXRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aCh0KTtyZXR1cm4gbj5lP246ZX1mdW5jdGlvbiBVeXQobix0LGUpe3ZhciByO2NvbnN0e2xhYmVsOml9PW51bGwhPT0ocj1xbyhSbCx0aGlz''@;'; put 'put ''KS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoZSx0KSkmJnZvaWQgMCE9PXI/cjp7bGFiZWw6IiJ9O3JldHVybiBpfWZ1bmN0aW9uIFd5dChuLHQpe2lmKG48MClyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbChuLHFvKFJsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KG4sdCksITApfWZ1bmN0''@;'; put 'put ''aW9uIFp5dCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gWXl0KG4sdCl7dHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBXRChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gR3l0KG4pe3ZhciB0PWZ1bmN0aW9uICR5dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4p''@;'; put 'put ''cmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y29uc3QgWHl0PWNsYXNzIEt5dHtjb25zdHJ1Y3Rvcih0LGUpe1dEKHRoaXMsImhvdCIsdm9pZCAwKSxXRCh0aGlzLCJkYXRhIixudWxsKSxXRCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksV0QodGhpcywicGFyZW50UmVmZXJlbmNlIixuZXcg''@;'; put 'put ''V2Vha01hcCksV0QodGhpcywiY2FjaGUiLHtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9KSx0aGlzLmhvdD1lLHRoaXMucGx1Z2luPXR9c2V0RGF0YSh0KXt0aGlzLmRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3Vy''@;'; put 'put ''Y2VEYXRhKCl7bGV0IHQ9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0PXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdH11cGRhdGVXaXRoRGF0YSh0KXt0aGlzLnNldERhdGEodCks''@;'; put 'put ''dGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LGVvKDAsdGhpcy5kYXRhLmxlbmd0aC0xLHQ9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbdF0sMCxudWxsKX0p''@;'; put 'put ''fWNhY2hlTm9kZSh0LGUscil7dGhpcy5jYWNoZS5sZXZlbHNbZV18fCh0aGlzLmNhY2hlLmxldmVsc1tlXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2VdLnB1c2godCksdGhpcy5jYWNoZS5yb3dzLnB1c2godCksdGhpcy5jYWNoZS5ub2RlSW5mby5z''@;'; put 'put ''ZXQodCx7cGFyZW50OnIscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDplfSksdGhpcy5oYXNDaGlsZHJlbih0KSYmWW4odC5fX2NoaWxkcmVuLGk9Pnt0aGlzLmNhY2hlTm9kZShpLGUrMSx0KX0pfWdldERhdGFPYmplY3QodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDp0aGlzLmNh''@;'; put 'put ''Y2hlLnJvd3NbdF19cmVhZFRyZWVOb2Rlcyh0LGUscixpKXtsZXQgYT0hMSxjPWU7aWYoaXNOYU4oYykmJmMuZW5kKXJldHVybiBjO2xldCBtPXQ7cmV0dXJuIG18fChtPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sYT0hMCxjLT0xKSxudWxsIT1yJiZjPT09cj97cmVzdWx0Om0sZW5kOiEwfTpu''@;'; put 'put ''dWxsIT1pJiZtPT09aT97cmVzdWx0OmMsZW5kOiEwfTooYys9MSxtLl9fY2hpbGRyZW4mJlluKG0uX19jaGlsZHJlbixDPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KEMsYT9udWxsOm0pLGM9dGhpcy5yZWFkVHJlZU5vZGVzKEMsYyxyLGkpLGlzTmFOKGMpJiZjLmVuZClyZXR1cm4h''@;'; put 'put ''MX0pLGMpfW1vY2tQYXJlbnQoKXtjb25zdCB0PXRoaXMubW9ja05vZGUoKTtyZXR1cm4gdC5fX2NoaWxkcmVuPXRoaXMuZGF0YSx0fW1vY2tOb2RlKCl7Y29uc3QgdD17fTtyZXR1cm4gYXModGhpcy5kYXRhWzBdLChlLHIpPT57dFtyXT1udWxsfSksdH1nZXRSb3dJbmRleCh0KXtyZXR1cm4g''@;'; put 'put ''bnVsbD09dD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KHQpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudCh0KXtsZXQgZT1udWxsO2U9aXNOYU4odCk/dDp0aGlzLmdldERhdGFPYmplY3QodCk7Y29uc3Qgcj10aGlzLmdldFJvd1BhcmVudCh0KTtyZXR1cm4gbnVsbD09cj90aGlz''@;'; put 'put ''LmRhdGEuaW5kZXhPZihlKTpyLl9fY2hpbGRyZW4uaW5kZXhPZihlKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4odCl7bGV0IGU9MCxyPXQ7cmV0dXJuIGlzTmFOKHIpfHwocj10aGlzLmdldERh''@;'; put 'put ''dGFPYmplY3QocikpLHImJnIuX19jaGlsZHJlbj8oWW4oci5fX2NoaWxkcmVuLGk9PntlKz0xLGkuX19jaGlsZHJlbiYmKGUrPXRoaXMuY291bnRDaGlsZHJlbihpKSl9KSxlKTowfWdldFJvd1BhcmVudCh0KXtsZXQgZTtyZXR1cm4gZT1pc05hTih0KT90OnRoaXMuZ2V0RGF0YU9iamVjdCh0''@;'; put 'put ''KSx0aGlzLmdldFJvd09iamVjdFBhcmVudChlKX1nZXRSb3dPYmplY3RQYXJlbnQodCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldCh0KS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbCh0KXtsZXQgZT1udWxsO3JldHVybiBlPWlzTmFOKHQpP3Q6''@;'; put 'put ''dGhpcy5nZXREYXRhT2JqZWN0KHQpLGU/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChlKTpudWxsfWdldFJvd09iamVjdExldmVsKHQpe3JldHVybiBudWxsPT10P251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQodCkubGV2ZWx9aGFzQ2hpbGRyZW4odCl7bGV0IGU9dDtyZXR1cm4gaXNOYU4o''@;'; put 'put ''ZSl8fChlPXRoaXMuZ2V0RGF0YU9iamVjdChlKSksISghZS5fX2NoaWxkcmVufHwhZS5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZCh0KXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KHQpfWdldENoaWxkKHQsZSl7dmFyIHI7cmV0dXJuKG51bGw9PT0ocj10Ll9fY2hpbGRyZW4p''@;'; put 'put ''fHx2b2lkIDA9PT1yP3ZvaWQgMDpyW2VdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbCh0KXtyZXR1cm4hdGhpcy5pc0NoaWxkKHQpfWlzUGFyZW50KHQpe3ZhciBlO2xldCByPXQ7cmV0dXJuIGlzTmFOKHIpfHwocj10aGlzLmdldERhdGFPYmplY3QocikpLHImJiEhci5fX2NoaWxkcmVuJiYw''@;'; put 'put ''IT09KG51bGw9PT0oZT1yLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmxlbmd0aCl9YWRkQ2hpbGQodCxlKXtsZXQgcj1lO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsdCxyKTtsZXQgaT1udWxsO3QmJihpPXRoaXMuZ2V0Um93SW5kZXgodCkpLHRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGkrdGhpcy5jb3VudENoaWxkcmVuKHQpKzEsMSk7bGV0IGE9dDt0fHwoYT10aGlzLm1vY2tQYXJlbnQoKSksYS5fX2NoaWxkcmVufHwoYS5fX2NoaWxkcmVuPVtdKSxyfHwocj10aGlzLm1vY2tOb2RlKCkpLGEuX19jaGlsZHJlbi5wdXNoKHIp''@;'; put 'put ''LHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3QgYz10aGlzLmdldFJvd0luZGV4KHIpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoYywxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLGMsMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQi''@;'; put 'put ''LHQscil9YWRkQ2hpbGRBdEluZGV4KHQsZSxyKXtsZXQgYSxpPXI7aWYoaXx8KGk9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLHQsaSxlKSx0KXtjb25zdCBtPXRoaXMuZ2V0Um93SW5kZXgodCkrZSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVDcmVhdGVSb3ciLG0sMSksdC5fX2NoaWxkcmVuLnNwbGljZShlLG51bGwsaSksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudCh0''@;'; put 'put ''KSwiX19jaGlsZHJlbiIsdC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMobSwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3Jl''@;'; put 'put ''YXRlUm93IixtLDEpLGE9bX1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGUsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCks''@;'; put 'put ''YT10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVtlXSk7aT10aGlzLmdldERhdGFPYmplY3QoYSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLHQsaSxlKX1hZGRTaWJsaW5nKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt''@;'; put 'put ''ZW50c1sxXToiYmVsb3ciO2NvbnN0IHI9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KHQpLGk9dGhpcy5nZXRSb3dQYXJlbnQociksYT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KHIpO3N3aXRjaChlKXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChpLGErMSxudWxsKTti''@;'; put 'put ''cmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChpLGEsbnVsbCl9fWRldGFjaEZyb21QYXJlbnQodCl7bGV0IGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxyPW51bGw7Y29uc3QgaT1bXTtBcnJheS5pc0FycmF5''@;'; put 'put ''KHQpPyhlbyh0WzBdLHRbMl0sY2U9Pntjb25zdCBmZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coY2UpO2kucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZmUpKX0pLGVvKDAsaS5sZW5ndGgtMixjZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChpW2NlXSwhMSl9KSxyPWlbaS5sZW5ndGgtMV0p''@;'; put 'put ''OnI9dDtjb25zdCBhPXRoaXMuZ2V0Um93SW5kZXgociksYz10aGlzLmNvdW50Q2hpbGRyZW4ociksbT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KHIpLEM9dGhpcy5nZXRSb3dQYXJlbnQociksUD10aGlzLmdldFJvd1BhcmVudChDKSxZPXRoaXMuZ2V0Um93SW5kZXgoUCk7bGV0IEo9''@;'; put 'put ''bnVsbDtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGV0YWNoQ2hpbGQiLEMsciksbnVsbCE9bSl7Y29uc3QgY2U9QXJyYXkuZnJvbShuZXcgQXJyYXkoYStjKzEpLmtleXMoKSkuc3BsaWNlKC0xKihjKzEpKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixhLGMr''@;'; put 'put ''MSxjZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxDLl9fY2hpbGRyZW4uc3BsaWNlKG0sMSksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGEsYysxLGNlLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLFApe0o9WSt0aGlzLmNvdW50Q2hpbGRy''@;'; put 'put ''ZW4oUCk7Y29uc3QgZmU9dGhpcy5nZXRDaGlsZChQLHRoaXMuY291bnRDaGlsZHJlbihQKS0xKSxBZT10aGlzLmdldFJvd0luZGV4KGZlKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixBZSsxLGMrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxQLl9fY2hpbGRyZW4ucHVz''@;'; put 'put ''aChyKX1lbHNlIEo9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixKLTIsYysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuZGF0YS5wdXNoKHIpfXRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy''@;'; put 'put ''Q3JlYXRlUm93IixKLTIsYysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRldGFjaENoaWxkIixDLHIsdGhpcy5nZXRSb3dJbmRleChyKSksZSYmdGhpcy5ob3QucmVuZGVyKCl9ZmlsdGVyRGF0YSh0LGUscil7Y29uc3QgaT1bXTtZbihyLGE9Pntp''@;'; put 'put ''LnB1c2godGhpcy5nZXREYXRhT2JqZWN0KGEpKX0pLFluKGksYT0+e2NvbnN0IGM9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChhKSxtPXRoaXMuZ2V0Um93UGFyZW50KGEpO251bGw9PT1tP3RoaXMuZGF0YS5zcGxpY2UoYywxKTptLl9fY2hpbGRyZW4uc3BsaWNlKGMsMSl9KSx0aGlz''@;'; put 'put ''LnJld3JpdGVDYWNoZSgpfXNwbGljZURhdGEodCxlLHIpe2NvbnN0IGk9dGhpcy5nZXREYXRhT2JqZWN0KHQtMSk7bGV0IGE9bnVsbCxjPXQ7aSYmaS5fX2NoaWxkcmVuJiYwPT09aS5fX2NoaWxkcmVuLmxlbmd0aD8oYT1pLGM9MCk6dDx0aGlzLmNvdW50QWxsUm93cygpJiYoYT10aGlzLmdl''@;'; put 'put ''dFJvd1BhcmVudCh0KSxjPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQodCkpLGE/cj9hLl9fY2hpbGRyZW4uc3BsaWNlKGMsZSwuLi5yKTphLl9fY2hpbGRyZW4uc3BsaWNlKGMsZSk6cj90aGlzLmRhdGEuc3BsaWNlKGMsZSwuLi5yKTp0aGlzLmRhdGEuc3BsaWNlKGMsZSksdGhpcy5y''@;'; put 'put ''ZXdyaXRlQ2FjaGUoKX1zeW5jUm93V2l0aFJhd1NvdXJjZSh0KXtsZXQgZT10LHI9ZTtkb3tyPXRoaXMuZ2V0Um93UGFyZW50KHIpLG51bGwhPT1yJiYoZT1yKX13aGlsZShudWxsIT09cik7dGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VE''@;'; put 'put ''YXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZSksIl9fY2hpbGRyZW4iLGUuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5zeW5jUm93V2l0aFJhd1NvdXJjZSIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKX1tb3ZlUm93KHQsZSxyLGkpe2NvbnN0IGE9''@;'; put 'put ''ZT09PXRoaXMuaG90LmNvdW50Um93cygpLGM9dGhpcy5nZXRSb3dQYXJlbnQodCksbT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KHQpLEM9Yy5fX2NoaWxkcmVuLnNsaWNlKG0sbSsxKSxQPXQ+ZTtsZXQgWT10aGlzLmdldFJvd1BhcmVudChhP2UtMTplKTtudWxsPT1ZJiYoWT10aGlz''@;'; put 'put ''LmdldFJvd1BhcmVudChlLTEpKSxudWxsPT1ZJiYoWT10aGlzLmdldERhdGFPYmplY3QoZS0xKSksWT9ZLl9fY2hpbGRyZW58fChZLl9fY2hpbGRyZW49W10pOihZPXRoaXMuZ2V0RGF0YU9iamVjdChlKSxZLl9fY2hpbGRyZW49W10pO2NvbnN0IEo9YXx8cnx8aT9ZLl9fY2hpbGRyZW4ubGVu''@;'; put 'put ''Z3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZSksY2U9Yz09PVk7WS5fX2NoaWxkcmVuLnNwbGljZShKLDAsQ1swXSksYy5fX2NoaWxkcmVuLnNwbGljZShtKyhQJiZjZT8xOjApLDEpLHRoaXMuc3luY1Jvd1dpdGhSYXdTb3VyY2UoYyksY2V8fHRoaXMuc3luY1Jvd1dpdGhSYXdT''@;'; put 'put ''b3VyY2UoWSl9dHJhbnNsYXRlVHJpbW1lZFJvdyh0KXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KHQpOnR9dW50cmFuc2xhdGVUcmltbWVkUm93KHQpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBz''@;'; put 'put ''aW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnVudHJhbnNsYXRlVHJpbW1lZFJvdyh0KTp0fX07ZnVuY3Rpb24gU3llKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBxeXQobil7dmFyIHQ9ZnVuY3Rpb24gSnl0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2''@;'; put 'put ''YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1''@;'; put 'put ''ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITB9KTpuW3RdPWUsbn1jb25zdCB1aWU9Y2xhc3MgUXl0e2NvbnN0cnVjdG9yKHQsZSl7U3llKHRoaXMsImhvdCIsdm9pZCAwKSxTeWUodGhpcywicGx1Z2luIix2b2lkIDApLHRoaXMuaG90PWUsdGhpcy5wbHVnaW49dH19O2NsYXNzIFU1IGV4dGVuZHMgdWlle3N0YXRpYyBnZXQg''@;'; put 'put ''Q1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNhdG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3RpbmdQYXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixlbXB0eUluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25l''@;'; put 'put ''c3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoiaHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xsYXBzZSJ9fWNvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2lu''@;'; put 'put ''Z1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGljYXRvcnModCxlKXtjb25zdCByPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codCksaT10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3Qocik7aWYoIWkpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGE9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dMZXZlbChyKSxjPWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkRJViIpWzBdLG09Yy5xdWVyeVNlbGVjdG9yKCJzcGFuLnJvd0hlYWRlciIpLEM9Yy5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePSJodF9uZXN0aW5nIl0nKSxQPXRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7aWYoWW4oQyxZPT57WSYmYy5yZW1vdmVDaGlsZChZKX0pLHRpKGUsVTUuQ1NTX0NMQVNTRVMuaW5kaWNhdG9yQ29udGFpbmVyKSxhKXtjb25zdHtyb290RG9jdW1lbnQ6WX09dGhpcy5ob3QsSj1tLmNsb25lTm9kZSghMCk7Yy5pbm5lckhU''@;'; put 'put ''TUw9IiIsZW8oMCxhLTEsKCk9Pntjb25zdCBjZT1ZLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTt0aShjZSxVNS5DU1NfQ0xBU1NFUy5lbXB0eUluZGljYXRvciksYy5hcHBlbmRDaGlsZChjZSl9KSxjLmFwcGVuZENoaWxkKEopfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oaSkpe2Nv''@;'; put 'put ''bnN0IFk9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO1AmJlphKFksW1siYXJpYS1oaWRkZW4iLCJ0cnVlIl1dKSx0aShlLFU1LkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQocik/KHRpKFksYCR7VTUu''@;'; put 'put ''Q1NTX0NMQVNTRVMuYnV0dG9ufSAke1U1LkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKSxQJiZaYShlLFt6ZighMSldKSk6KHRpKFksYCR7VTUuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1U1LkNTU19DTEFTU0VTLmNvbGxhcHNlQnV0dG9ufWApLFAmJlphKGUsW3pmKCEwKV0pKSxjLmFwcGVu''@;'; put 'put ''ZENoaWxkKFkpfX11cGRhdGVSb3dIZWFkZXJXaWR0aCh0KXtsZXQgZT10O2V8fChlPXRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxDb3VudCk7bGV0IHI9MTE7dGhpcy5ob3Quc3R5bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgpfHwocj0yKnRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0''@;'; put 'put ''Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1ob3Jpem9udGFsLXBhZGRpbmciKSksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLHIrMTAqZSsyNSksdGhpcy5ob3QucmVuZGVyKCl9fWNvbnN0IE15ZT1VNSx0X3Q9Y2xhc3MgZV90IGV4dGVuZHMgdWlle2NvbnN0cnVjdG9yKHQs''@;'; put 'put ''ZSl7dmFyIHI7c3VwZXIodCxlKSxyPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dzU3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyLmxhc3RDb2xsYXBzZWRSb3dzPXIuY29sbGFwc2VkUm93cy5zbGljZSgwKSxyLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oci5sYXN0Q29sbGFwc2VkUm93cyxpKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihpLGEpe2xldCBjPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWEmJihhPTEvMCksWW4oci5sYXN0Q29sbGFwc2VkUm93cywobSxDKT0+e20+PWkmJm08YSYmKHIubGFzdENvbGxhcHNlZFJvd3NbQ109bStjKX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ci5jb2xs''@;'; put 'put ''YXBzZU11bHRpcGxlQ2hpbGRyZW4oci5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxyLmxhc3RDb2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihpLGEpPT57ZW8oaSxpK2EtMSxjPT57Y29u''@;'; put 'put ''c3QgbT10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2YoYyk7bT4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UobSwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbih0KXtsZXQgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRz''@;'; put 'put ''WzFdLHI9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBpPVtdO2xldCBhPW51bGwsYz1udWxsLG09bnVsbDtyZXR1cm4gaXNOYU4odCk/KGE9dCxjPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoYSkpOihhPXRoaXMu''@;'; put 'put ''ZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdCh0KSxjPXQpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oYSkmJlluKGEuX19jaGlsZHJlbixDPT57aS5wdXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoQykpfSksbT10aGlzLmNvbGxhcHNlUm93cyhpLCEwLCExKSxyJiZ0aGlz''@;'; put 'put ''LnRyaW1Sb3dzKG0pLGUmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihjKSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2goYyksbX1jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4odCl7bGV0IGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxyPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaT1bXTtZbih0LGE9PntpLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGEsITEsITEpKX0pLHImJnRoaXMu''@;'; put 'put ''dHJpbVJvd3MoaSksZSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyh0KXt0aGlzLmNvbGxhcHNlUm93cyhbdF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKHQpe2xldCBlPSEoYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0scj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGk9W107cmV0dXJuIFluKHQsYT0+e2kucHVzaChhKSxlJiZ0aGlzLmNvbGxhcHNlQ2hp''@;'; put 'put ''bGRSb3dzKGEsaSl9KSxyJiZ0aGlzLnRyaW1Sb3dzKGkpLGl9Y29sbGFwc2VDaGlsZFJvd3ModCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGk9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10m''@;'; put 'put ''JmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKHQpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QodCkuX19jaGlsZHJlbixjPT57Y29uc3QgbT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGMpO2UucHVzaChtKSx0aGlzLmNvbGxhcHNlQ2hp''@;'; put 'put ''bGRSb3dzKG0sZSl9KSxpJiZ0aGlzLnRyaW1Sb3dzKGUpfWV4cGFuZFJvdyh0KXt0aGlzLmV4cGFuZFJvd3MoW3RdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3ModCl7bGV0IGU9IShhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxyPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaT1bXTtyZXR1cm4gWW4odCxhPT57aS5wdXNoKGEpLGUmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGEsaSl9''@;'; put 'put ''KSxyJiZ0aGlzLnVudHJpbVJvd3MoaSksaX1leHBhbmRDaGlsZFJvd3ModCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGk9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1sz''@;'; put 'put ''XTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKHQpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QodCkuX19jaGlsZHJlbixjPT57aWYoIXRoaXMuaXNBbnlQYXJlbnRDb2xsYXBzZWQoYykpe2NvbnN0IG09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChjKTtlLnB1''@;'; put 'put ''c2gobSksdGhpcy5leHBhbmRDaGlsZFJvd3MobSxlKX19KSxpJiZ0aGlzLnVudHJpbVJvd3MoZSl9ZXhwYW5kQ2hpbGRyZW4odCl7bGV0IGU9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxyPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaT1bXTtsZXQgYT1udWxsLGM9bnVsbCxtPW51bGw7cmV0dXJuIGlzTmFOKHQpPyhhPXQsYz10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHQpKTooYT10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QodCks''@;'; put 'put ''Yz10KSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGMpLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oYSkmJlluKGEuX19jaGlsZHJlbixDPT57Y29uc3QgUD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KEMpO2kucHVzaChQ''@;'; put 'put ''KX0pLG09dGhpcy5leHBhbmRSb3dzKGksITAsITEpLHImJnRoaXMudW50cmltUm93cyhtKSxlJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLG19ZXhwYW5kTXVsdGlwbGVDaGlsZHJlbih0KXtsZXQgZT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1l''@;'; put 'put ''bnRzWzFdLHI9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBpPVtdO1luKHQsYT0+e2kucHVzaCguLi50aGlzLmV4cGFuZENoaWxkcmVuKGEsITEsITEpKX0pLHImJnRoaXMudW50cmltUm93cyhpKSxlJiZ0aGlzLnJlbmRl''@;'; put 'put ''ckFuZEFkanVzdCgpfWNvbGxhcHNlQWxsKCl7Y29uc3QgdD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxlPVtdO1luKHQscj0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4ocikmJmUucHVzaChyKX0pLHRoaXMuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGUpLHRoaXMucmVuZGVy''@;'; put 'put ''QW5kQWRqdXN0KCl9ZXhwYW5kQWxsKCl7Y29uc3QgdD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxlPVtdO1luKHQscj0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4ocikmJmUucHVzaChyKX0pLHRoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihlKSx0aGlzLnJlbmRlckFuZEFk''@;'; put 'put ''anVzdCgpfXRyaW1Sb3dzKHQpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4odCxlPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoZSwhMCl9KX0sITApfXVudHJpbVJvd3ModCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbih0LGU9''@;'; put 'put ''Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChlLCExKX0pfSwhMCl9YXJlQ2hpbGRyZW5Db2xsYXBzZWQodCl7bGV0IGU9aXNOYU4odCk/dDp0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QodCkscj0hMDtyZXR1cm4gbnVsbD09PWUmJihlPXtfX2No''@;'; put 'put ''aWxkcmVuOnRoaXMuZGF0YU1hbmFnZXIuZGF0YX0pLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZSkmJlluKGUuX19jaGlsZHJlbixpPT57Y29uc3QgYT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGkpO2lmKCF0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLmdldFZhbHVl''@;'; put 'put ''QXRJbmRleChhKSlyZXR1cm4gcj0hMSwhMX0pLHJ9aXNBbnlQYXJlbnRDb2xsYXBzZWQodCl7bGV0IGU9dDtmb3IoO251bGwhPT1lOyl7ZT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChlKTtjb25zdCByPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZSk7aWYodGhpcy5jb2xs''@;'; put 'put ''YXBzZWRSb3dzLmluZGV4T2Yocik+LTEpcmV0dXJuITB9cmV0dXJuITF9dG9nZ2xlU3RhdGUodCxlKXtpZihlLmNvbD49MClyZXR1cm47Y29uc3Qgcj10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coZS5yb3cpO3ZvKHQudGFyZ2V0LE15ZS5DU1NfQ0xBU1NFUy5idXR0b24pJiYodGhpcy5hcmVD''@;'; put 'put ''aGlsZHJlbkNvbGxhcHNlZChyKT90aGlzLmV4cGFuZENoaWxkcmVuKHIpOnRoaXMuY29sbGFwc2VDaGlsZHJlbihyKSxBMih0KSl9dHJhbnNsYXRlVHJpbW1lZFJvdyh0KXtyZXR1cm4gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0KX11bnRyYW5zbGF0ZVRyaW1tZWRSb3codCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaG90LnRvVmlzdWFsUm93KHQpfXJlbmRlckFuZEFkanVzdCgpe3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9fTt2YXIgeHllPW5ldyBXZWFrTWFwO2NvbnN0IHVfdD1jbGFzcyBjX3QgZXh0ZW5kcyB1aWV7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGlfdChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gYV90KG4pe3ZhciB0PWZ1bmN0aW9uIG9fdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3Zh''@;'; put 'put ''ciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0o''@;'; put 'put ''biwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KHRoaXMsImRhdGFNYW5hZ2VyIix0aGlz''@;'; put 'put ''LnBsdWdpbi5kYXRhTWFuYWdlciksZnVuY3Rpb24gbl90KG4sdCxlKXsoZnVuY3Rpb24gcl90KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCks''@;'; put 'put ''dC5zZXQobixlKX0odGhpcyx4eWUse3Jvd19hYm92ZToodCxlKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhlW2UubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYWJvdmUiKX0scm93X2JlbG93Oih0LGUpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGVbZS5sZW5ndGgtMV0uc3Rh''@;'; put 'put ''cnQucm93LCJiZWxvdyIpfX0pfWFwcGVuZE9wdGlvbnModCl7Y29uc3QgZT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShzZWUpfSxjYWxsYmFjazooKT0+e2NvbnN0IHI9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93''@;'; put 'put ''KHRoaXMuaG90LmdldFNlbGVjdGVkQWN0aXZlKClbMF0pLGk9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KHIpO3RoaXMuZGF0YU1hbmFnZXIuYWRkQ2hpbGQoaSl9LGRpc2FibGVkOigpPT57Y29uc3Qgcj10aGlzLmhvdC5nZXRTZWxlY3RlZEFjdGl2ZSgpO3JldHVybiFyfHxyWzBd''@;'; put 'put ''PDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtrZXk6ImRldGFjaF9mcm9tX3BhcmVudCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQ''@;'; put 'put ''aHJhc2UobGVlKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRBY3RpdmUoKSl9LGRpc2FibGVkOigpPT57Y29uc3Qgcj10aGlzLmhvdC5nZXRTZWxlY3RlZEFjdGl2ZSgpLGk9dGhpcy5kYXRhTWFuYWdlci50cmFu''@;'; put 'put ''c2xhdGVUcmltbWVkUm93KHJbMF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChpKXx8IXJ8fHJbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5tYXhSb3dzfX0se25hbWU6Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gZW8oMCx0Lml0ZW1zLmxlbmd0aC0xLHI9PntpZigwPT09cilyZXR1cm4gWW4oZSwoaSxhKT0+e3QuaXRlbXMuc3BsaWNlKHIrYSwwLGkpfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnModCl9bW9kaWZ5''@;'; put 'put ''Um93SW5zZXJ0aW5nT3B0aW9ucyh0KXtyZXR1cm4gZW8oMCx0Lml0ZW1zLmxlbmd0aC0xLGU9Pntjb25zdCByPWZ1bmN0aW9uIHNfdChuLHQpe3JldHVybiBuLmdldChmdW5jdGlvbiBsX3Qobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShuLHQpKX0oeHllLHRoaXMpW3QuaXRlbXNbZV0ua2V5XTtudWxsIT1yJiYodC5pdGVtc1tlXS5jYWxsYmFjaz1yKX0pLHR9fTtmdW5j''@;'; put 'put ''dGlvbiBwaihuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gZF90KG4pe3ZhciB0PWZ1bmN0aW9uIGhfdChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgZl90e2NvbnN0cnVjdG9yKHQpe3BqKHRoaXMsInBsdWdpbiIsdm9p''@;'; put 'put ''ZCAwKSxwaih0aGlzLCJob3QiLHZvaWQgMCkscGoodGhpcywiZGF0YU1hbmFnZXIiLHZvaWQgMCkscGoodGhpcywiY29sbGFwc2luZ1VJIix2b2lkIDApLHRoaXMucGx1Z2luPXQsdGhpcy5ob3Q9dC5ob3QsdGhpcy5kYXRhTWFuYWdlcj10LmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJ''@;'; put 'put ''PXQuY29sbGFwc2luZ1VJfW9uQmVmb3JlUm93TW92ZSh0LGUscixpKXtpZih0aGlzLmRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyh7cm93czp0LGZpbmFsSW5kZXg6ZSxkcm9wSW5kZXg6cixtb3ZlUG9zc2libGU6aX0pKXJldHVybiExO3RoaXMubW92ZWRUb0NvbGxhcHNlZD0hMTtj''@;'; put 'put ''b25zdCBjPXI9PT10aGlzLmhvdC5jb3VudFJvd3MoKSxtPWM/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk6dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHIpO2xldCBDPSEwO2NvbnN0IFA9dC5tYXAoQWU9PntpZighQylyZXR1cm4hMTtjb25zdCBIZT10aGlzLmRhdGFN''@;'; put 'put ''YW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coQWUpO3JldHVybiBDPXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcoSGUsbSksSGV9KSxZPS0xPT09UC5pbmRleE9mKG0pO2lmKCFDfHwhWSlyZXR1cm4hMTtjb25zdCBKPXRoaXMuZ2V0QmFzZVBhcmVudChQKSxjZT10aGlzLmdldFRhcmdldFBhcmVu''@;'; put 'put ''dChjLG0pLGZlPUo9PT1jZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGNlKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9j''@;'; put 'put ''YXRpb25zKFAsbSxmZSksdGhpcy5tb3ZlUm93cyhQLG0sY2UpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCksdGhpcy5tb3ZlQ2VsbHNNZXRhKFAsbSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJh''@;'; put 'put ''ZnRlclJvd01vdmUiLHQsZSxyLGksaSYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZCh0LGUpKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxzKHQsciksITF9ZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHQpe2NvbnN0e3Jvd3M6ZSxmaW5hbEluZGV4OnIsZHJvcEluZGV4''@;'; put 'put ''OmksbW92ZVBvc3NpYmxlOmF9PXQ7bGV0IGM9ITE7cmV0dXJuIG1jKGkpJiYob3MoZWxgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAgd2hlbiB0aGUgTmVzdGVk''@;'; put 'put ''Um93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2QgaW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixlLHIsaSxhLCExKSxjPSEwKSxjfXNob3VsZEFsbG93TW92aW5nKHQsZSl7cmV0dXJuISh0aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmlzUGFyZW50KHQpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKHQpfHx0PT09ZXx8MD09PWUpfWdldEJhc2VQYXJlbnQodCl7cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KHRbMF0pfWdldFRhcmdldFBhcmVudCh0LGUpe2xldCByPXRoaXMuZGF0''@;'; put 'put ''YU1hbmFnZXIuZ2V0Um93UGFyZW50KHQ/ZS0xOmUpO3JldHVybiBudWxsPT1yJiYocj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChlLTEpKSxyfXNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKHQsZSxyKXtyfHwoTWF0aC5tYXgoLi4udCk8PWU/dGhpcy5jb2xsYXBzaW5n''@;'; put 'put ''VUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godFswXSxlLC0xKnQubGVuZ3RoKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChlLHRbMF0sdC5sZW5ndGgpKX1tb3ZlUm93cyh0LGUscil7Y29uc3QgaT1lPT09dGhpcy5kYXRhTWFuYWdlci5n''@;'; put 'put ''ZXRSb3dJbmRleChyKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4ocikrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcigoKT0+e3QuZm9yRWFjaChhPT57dGhpcy5kYXRhTWFuYWdlci5tb3ZlUm93KGEsZSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaSl9KX0pfW1vdmVDZWxsc01ldGEodCxl''@;'; put 'put ''KXtjb25zdCByPVtdLGk9TWF0aC5tYXgoLi4udCk8ZTt0LmZvckVhY2goYT0+e3IucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGEpKX0pLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YSh0WzBdLHQubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEoZS0oaT9yLmxlbmd0aDow''@;'; put 'put ''KSwwLC4uLnIpfXNlbGVjdENlbGxzKHQsZSl7Y29uc3Qgcj10Lmxlbmd0aDtsZXQgaT0wLGE9MDtpZih0aGlzLm1vdmVkVG9Db2xsYXBzZWQpe2xldCBjPW51bGw7Yz10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codFtyLTFdPGU/ZS1yOmUpO2NvbnN0IG09dGhpcy5kYXRh''@;'; put 'put ''TWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PWM/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMTpjLTEpLEM9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChtKTtpPXRoaXMuZGF0YU1hbmFnZXIudW50cmFuc2xhdGVUcmltbWVkUm93KEMpLGE9aX1lbHNlIHRbci0xXTxlPyhhPWUt''@;'; put 'put ''MSxpPWEtcisxKTooaT1lLGE9aStyLTEpO3RoaXMuaG90LnNlbGVjdENlbGxzKFtbaSwwLGEsdGhpcy5ob3QuY291bnRDb2xzKCktMV1dLCExKX1pc1Jvd09yZGVyQ2hhbmdlZCh0LGUpe3JldHVybiB0LnNvbWUoKHIsaSk9PnItaSE9PWUpfX1mdW5jdGlvbiBFeWUobix0LGUpe1R5ZShuLHQp''@;'; put 'put ''LHQuc2V0KG4sZSl9ZnVuY3Rpb24gVHllKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBkaWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9u''@;'; put 'put ''IGdfdChuKXt2YXIgdD1mdW5jdGlvbiBtX3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1''@;'; put 'put ''cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWZ1bmN0aW9uIGdqKG4sdCl7cmV0dXJuIG4uZ2V0KEkwKG4sdCkpfWZ1bmN0aW9uIG1qKG4sdCxlKXtyZXR1cm4gbi5zZXQoSTAobix0''@;'; put 'put ''KSxlKSxlfWZ1bmN0aW9uIEkwKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1j''@;'; put 'put ''b25zdCB2aj0ibmVzdGVkUm93cyIsQXllPXZqO3ZhciB5aj1uZXcgV2Vha01hcCxJUz1uZXcgV2Vha01hcCxKMD1uZXcgV2Vha1NldDtjbGFzcyBfX3QgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gcF90KG4sdCl7VHllKG4sdCksdC5hZGQo''@;'; put 'put ''bil9KHRoaXMsSjApLGRpZSh0aGlzLCJkYXRhTWFuYWdlciIsbnVsbCksZGllKHRoaXMsImhlYWRlcnNVSSIsbnVsbCksZGllKHRoaXMsImNvbGxhcHNlZFJvd3NNYXAiLG51bGwpLEV5ZSh0aGlzLHlqLCExKSxFeWUodGhpcyxJUywhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu''@;'; put 'put ''IHZqfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdmpdfWVuYWJsZVBsdWdpbigpe3ZhciB0PXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dzTWFwPXRoaXMuaG90LnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgYmspLHRoaXMuZGF0YU1hbmFnZXI9bmV3IFh5dCh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbGxhcHNpbmdVST1uZXcgdF90KHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBNeWUodGhpcyx0aGlzLmhvdCks''@;'; put 'put ''dGhpcy5jb250ZXh0TWVudVVJPW5ldyB1X3QodGhpcyx0aGlzLmhvdCksdGhpcy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgZl90KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7''@;'; put 'put ''aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJMChKMCx0LExfdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1l''@;'; put 'put ''bnRzW2ldO3JldHVybiBJMChKMCx0LE9fdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dEYXRhIixmdW5jdGlvbigpe3JldHVybiB0Lm9uTW9kaWZ5Um93RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHQub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGF0YVNwbGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gdC5vbkJlZm9yZURhdGFTcGxpY2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiZmlsdGVyRGF0YSIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSTAoSjAsdCxDX3QpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJMChKMCx0LFNfdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSTAoSjAsdCxNX3QpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJMChKMCx0LHdfdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcg''@;'; put 'put ''QXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIEkwKEowLHQsVF90KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7''@;'; put 'put ''aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJMChKMCx0LEVfdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50''@;'; put 'put ''c1tpXTtyZXR1cm4gSTAoSjAsdCxBX3QpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSTAoSjAs''@;'; put 'put ''dCxrX3QpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIEkwKEowLHQsRF90KS5jYWxsKHQs''@;'; put 'put ''Li4ucil9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT1hcmd1bWVudHNbaV07cmV0dXJuIEkwKEowLHQsSV90KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBJMChKMCx0LHhfdCkuY2FsbCh0LC4uLnIpfSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''ckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSTAoSjAsdCxSX3QpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gSTAoSjAsdCxiX3QpLmNhbGwodCwuLi5yKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGU9PkkwKEowLHRoaXMsa3llKS5jYWxs''@;'; put 'put ''KHRoaXMsZSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsZT0+STAoSjAsdGhpcyxreWUpLmNhbGwodGhpcyxlKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5y''@;'; put 'put ''ZWdpc3Rlck1hcCgibmVzdGVkUm93cyIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25zdCB0PXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMuZW5hYmxlUGx1Z2luKCks''@;'; put 'put ''dGhpcy5kYXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YSh0KSxzdXBlci51cGRhdGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazoo''@;'; put 'put ''KT0+e2NvbnN0e2hpZ2hsaWdodDp0fT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZT10aGlzLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KHQucm93KTtyZXR1cm4gdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZSk/dGhpcy5jb2xsYXBz''@;'; put 'put ''aW5nVUkuZXhwYW5kQ2hpbGRyZW4oZSk6dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VDaGlsZHJlbihlKSwhMX0scnVuT25seUlmOigpPT57dmFyIHQsZTtjb25zdCByPW51bGw9PT0odD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lmhp''@;'; put 'put ''Z2hsaWdodDtyZXR1cm4gciYmKG51bGw9PT0oZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShyKSYmLTE9PT1yLmNvbCYmci5yb3c+PTB9LGdyb3VwOkF5''@;'; put 'put ''ZSxyZWxhdGl2ZVRvR3JvdXA6YzgscG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoQXllKX1kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygp''@;'; put 'put ''e21qKElTLHRoaXMsITApfWVuYWJsZUNvcmVBUElNb2RpZmllcnMoKXttaihJUyx0aGlzLCExKX1vbk1vZGlmeVJvd0RhdGEodCl7aWYoIWdqKElTLHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QodCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtpZighZ2ooSVMs''@;'; put 'put ''dGhpcykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuY291bnRBbGxSb3dzKCl9b25CZWZvcmVEYXRhU3BsaWNlKHQsZSxyKXtyZXR1cm4hKCFnaihJUyx0aGlzKSYmIXRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwodCkmJih0aGlzLmRhdGFNYW5hZ2VyLnNwbGljZURhdGEodCxl''@;'; put 'put ''LHIpLDEpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBiX3Qobix0LGUscil7cmV0dXJuIHRoaXMucm93TW92ZUNvbnRyb2xsZXIub25CZWZvcmVSb3dNb3ZlKG4sdCxlLHIpfWZ1bmN0aW9uIHdfdChuLHQsZSl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUobix0''@;'; put 'put ''LGUpfWZ1bmN0aW9uIENfdChuLHQsZSl7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goZVswXSx0KSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rh''@;'; put 'put ''c2guc2hpZnRTdGFzaChlWzBdLG51bGwsLTEqdCksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKG4sdCxlKSxtaih5aix0aGlzLCEwKSx0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKS5zbGljZSgpfWZ1bmN0aW9uIFNfdChuKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9w''@;'; put 'put ''dGlvbnMobil9ZnVuY3Rpb24gTV90KG4sdCl7dGhpcy5oZWFkZXJzVUkuYXBwZW5kTGV2ZWxJbmRpY2F0b3JzKG4sdCl9ZnVuY3Rpb24geF90KG4pe3JldHVybiBNYXRoLm1heCh0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hlLG4pfWZ1bmN0aW9uIEVfdChuLHQsZSxyKXtyIT09''@;'; put 'put ''dGhpcy5wbHVnaW5OYW1lJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bWooeWosdGhpcywhMSksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpfSl9ZnVuY3Rpb24gVF90''@;'; put 'put ''KG4sdCxlKXtjb25zdCByPUFycmF5LmZyb20oZS5yZWR1Y2UoKGksYSk9PntpZih0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGEpKXtjb25zdCBjPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChhKS5fX2NoaWxkcmVuO3JldHVybiBpLmFkZChhKSxBcnJheS5pc0FycmF5KGMpJiZj''@;'; put 'put ''LmZvckVhY2gobT0+aS5hZGQodGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChtKSkpLGl9cmV0dXJuIGkuYWRkKGEpfSxuZXcgU2V0KSk7ZS5sZW5ndGg9MCxlLnB1c2goLi4ucil9ZnVuY3Rpb24gQV90KCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9''@;'; put 'put ''ZnVuY3Rpb24ga190KG4sdCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh0KSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51''@;'; put 'put ''cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIERfdCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIElfdChuLHQsZSl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goZSxudWxsLC0xKSx0aGlz''@;'; put 'put ''LmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24gUl90KCl7dGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiBMX3QoKXt0aGlzLmhlYWRlcnNVSS51cGRh''@;'; put 'put ''dGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIE9fdChuLHQpe2dqKHlqLHRoaXMpJiYodC5za2lwUmVuZGVyPSEwKX1mdW5jdGlvbiBreWUobil7aWYoIU5tZShuKSlyZXR1cm4gbUooIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRh''@;'; put 'put ''dGFzZXQgdG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt2al09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEobiksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2Fj''@;'; put 'put ''aGUoKX1mdW5jdGlvbiBXOChuLHQsZSl7RHllKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBEeWUobix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0''@;'; put 'put ''aW9uIEFzKG4sdCl7cmV0dXJuIG4uZ2V0KFpEKG4sdCkpfWZ1bmN0aW9uIG5nKG4sdCxlKXtyZXR1cm4gbi5zZXQoWkQobix0KSxlKSxlfWZ1bmN0aW9uIFpEKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6''@;'; put 'put ''ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUlM9bmV3IFdlYWtNYXAsSHk9bmV3IFdlYWtNYXAsaGllPW5ldyBXZWFrTWFwLGNkPW5ldyBXZWFrTWFwLExTPW5ldyBXZWFrTWFwLG8zPW5ldyBXZWFrTWFw''@;'; put 'put ''LGZpZT1uZXcgV2Vha01hcCxwaWU9bmV3IFdlYWtNYXAsX2o9bmV3IFdlYWtTZXQ7Y2xhc3MgSXlle2NvbnN0cnVjdG9yKHQpe2xldHtyb290RWxlbWVudDplLHVpQ29udGFpbmVyOnIsaXNSdGw6aSx0aGVtZU5hbWU6YSxwaHJhc2VUcmFuc2xhdG9yOmMsc2hvdWxkSGF2ZUJvcmRlcjptLGEx''@;'; put 'put ''MXlBbm5vdW5jZXI6Q309dDsoZnVuY3Rpb24gUF90KG4sdCl7RHllKG4sdCksdC5hZGQobil9KSh0aGlzLF9qKSxXOCh0aGlzLFJTLHZvaWQgMCksVzgodGhpcyxIeSx2b2lkIDApLFc4KHRoaXMsaGllLCExKSxXOCh0aGlzLGNkLHZvaWQgMCksVzgodGhpcyxMUyx2b2lkIDApLFc4KHRoaXMs''@;'; put 'put ''bzMsdm9pZCAwKSxXOCh0aGlzLGZpZSx2b2lkIDApLFc4KHRoaXMscGllLHZvaWQgMCksbmcoUlMsdGhpcyxlKSxuZyhIeSx0aGlzLHIpLG5nKGhpZSx0aGlzLGkpLG5nKExTLHRoaXMsYSksbmcobzMsdGhpcyxjKSxuZyhmaWUsdGhpcyxtKSxuZyhwaWUsdGhpcyxDKSx0aGlzLmluc3RhbGwo''@;'; put 'put ''KX1pbnN0YWxsKCl7dmFyIHQ7aWYobnVsbCE9PSh0PUFzKGNkLHRoaXMpKSYmdm9pZCAwIT09dCYmdC5jb250YWluZXIpcmV0dXJuO2NvbnN0IGU9ZENgJHsnXG48ZGl2IGRhdGEtcmVmPSJjb250YWluZXIiIGNsYXNzPSJodC1wYWdpbmF0aW9uIGhhbmRzb250YWJsZSI+XG4gIDxkaXYgY2xh''@;'; put 'put ''c3M9Imh0LXBhZ2luYXRpb25fX2lubmVyIj5cbiAgICA8ZGl2IGRhdGEtcmVmPSJwYWdlU2l6ZVNlY3Rpb24iIGNsYXNzPSJodC1wYWdlLXNpemUtc2VjdGlvbiI+XG4gICAgICA8c3BhbiBkYXRhLXJlZj0icGFnZVNpemVMYWJlbCIgY2xhc3M9Imh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19sYWJl''@;'; put 'put ''bCI+PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz0iaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIj5cbiAgICAgICAgPHNlbGVjdCBkYXRhLXJlZj0icGFnZVNpemVTZWxlY3QiIG5hbWU9InBhZ2VTaXplIiBkYXRhLWhvdC1pbnB1dD48L3NlbGVjdD5cbiAgICAgIDwvZGl2''@;'; put 'put ''PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZGF0YS1yZWY9InBhZ2VDb3VudGVyU2VjdGlvbiIgY2xhc3M9Imh0LXBhZ2UtY291bnRlci1zZWN0aW9uIj48L2Rpdj5cbiAgICA8bmF2IGRhdGEtcmVmPSJwYWdlTmF2U2VjdGlvbiIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIj5c''@;'; put 'put ''biAgICAgIDxidXR0b24gZGF0YS1yZWY9ImZpcnN0IiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbiBodC1wYWdlLWZpcnN0Ij48L2J1dHRvbj5cbiAgICAgIDxidXR0b24gZGF0YS1yZWY9InByZXYiIGNsYXNzPSJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9f''@;'; put 'put ''YnV0dG9uIGh0LXBhZ2UtcHJldiI+PC9idXR0b24+XG4gICAgICA8c3BhbiBkYXRhLXJlZj0icGFnZU5hdkxhYmVsIiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2xhYmVsIj48L3NwYW4+XG4gICAgICA8YnV0dG9uIGRhdGEtcmVmPSJuZXh0IiBjbGFzcz0iaHQtcGFnZS1u''@;'; put 'put ''YXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbiBodC1wYWdlLW5leHQiPjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBkYXRhLXJlZj0ibGFzdCIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24gaHQtcGFnZS1sYXN0Ij48L2J1dHRvbj5cbiAgICA8L25hdj5cbiAgPC9k''@;'; put 'put ''aXY+XG48L2Rpdj5cbid9YCx7Y29udGFpbmVyOnIsZmlyc3Q6aSxwcmV2OmEsbmV4dDpjLGxhc3Q6bSxwYWdlU2l6ZVNlbGVjdDpDfT1lLnJlZnM7bmcoY2QsdGhpcyxlLnJlZnMpLHIuc2V0QXR0cmlidXRlKCJkaXIiLEFzKGhpZSx0aGlzKT8icnRsIjoibHRyIiksci50YWJJbmRleD0tMTtj''@;'; put 'put ''b25zdCBZPShKLGNlLGZlKT0+e2NlLmFkZEV2ZW50TGlzdGVuZXIoSixBZT0+eyhKPT5KLmN1cnJlbnRUYXJnZXQuZGlzYWJsZWQpKEFlKXx8ZmUoKX0pfTtZKCJjbGljayIsaSwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJmaXJzdFBhZ2VDbGljayIpKSxZKCJjbGljayIsYSwoKT0+dGhpcy5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJwcmV2UGFnZUNsaWNrIikpLFkoImNsaWNrIixjLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoIm5leHRQYWdlQ2xpY2siKSksWSgiY2xpY2siLG0sKCk9PnRoaXMucnVuTG9jYWxIb29rcygibGFzdFBhZ2VDbGljayIpKSxDLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIs''@;'; put 'put ''KCk9Pntjb25zdCBKPSJhdXRvIj09PUMudmFsdWU/ImF1dG8iOk51bWJlci5wYXJzZUludChDLnZhbHVlLDEwKTt0aGlzLnJ1bkxvY2FsSG9va3MoInBhZ2VTaXplQ2hhbmdlIixKKX0pLHRoaXMuc2V0Q291bnRlclNlY3Rpb25WaXNpYmlsaXR5KCExKSx0aGlzLnNldE5hdmlnYXRpb25TZWN0''@;'; put 'put ''aW9uVmlzaWJpbGl0eSghMSksdGhpcy5zZXRQYWdlU2l6ZVNlY3Rpb25WaXNpYmlsaXR5KCExKSxBcyhIeSx0aGlzKT8oQXMoSHksdGhpcykuYXBwZW5kQ2hpbGQoZS5mcmFnbWVudCksdGkocixbQXMoTFMsdGhpcyksImhhbmRzb250YWJsZSJdKSk6QXMoUlMsdGhpcykuYWZ0ZXIoZS5mcmFn''@;'; put 'put ''bWVudCl9Z2V0Q29udGFpbmVyKCl7cmV0dXJuIEFzKGNkLHRoaXMpLmNvbnRhaW5lcn1nZXRGb2N1c2FibGVFbGVtZW50cygpe2NvbnN0e2ZpcnN0OnQscHJldjplLG5leHQ6cixsYXN0OmkscGFnZVNpemVTZWxlY3Q6YX09QXMoY2QsdGhpcyk7cmV0dXJuW2EsdCxlLHIsaV0uZmlsdGVyKGM9''@;'; put 'put ''PiFjLmRpc2FibGVkKX11cGRhdGVXaWR0aCh0KXtyZXR1cm4gQXMoY2QsdGhpcykuY29udGFpbmVyLnN0eWxlLndpZHRoPWAke3R9cHhgLHRoaXN9dXBkYXRlVGhlbWUodCl7aWYobmcoTFMsdGhpcyx0KSxBcyhIeSx0aGlzKSl7Y29uc3R7Y29udGFpbmVyOmV9PUFzKGNkLHRoaXMpO0hhKGUs''@;'; put 'put ''L2h0LXRoZW1lLS4qL2cpLEFzKExTLHRoaXMpJiZ0aShlLEFzKExTLHRoaXMpKX1yZXR1cm4gdGhpc31nZXRIZWlnaHQoKXtyZXR1cm4gQXMoY2QsdGhpcykuY29udGFpbmVyLm9mZnNldEhlaWdodH1yZWZyZXNoQm9yZGVyU3RhdGUoKXtjb25zdHtjb250YWluZXI6dH09QXMoY2QsdGhpcyk7''@;'; put 'put ''cmV0dXJuIEFzKEh5LHRoaXMpfHxBcyhmaWUsdGhpcykuY2FsbCh0aGlzKT90aSh0LCJodC1wYWdpbmF0aW9uLS1ib3JkZXJlZCIpOkhhKHQsImh0LXBhZ2luYXRpb24tLWJvcmRlcmVkIiksdGhpc311cGRhdGVTdGF0ZSh0KXtsZXR7Y3VycmVudFBhZ2U6ZSx0b3RhbFBhZ2VzOnIsZmlyc3RW''@;'; put 'put ''aXNpYmxlUm93SW5kZXg6aSxsYXN0VmlzaWJsZVJvd0luZGV4OmEsdG90YWxSZW5kZXJlZFJvd3M6YyxwYWdlU2l6ZUxpc3Q6bSxwYWdlU2l6ZTpDLGF1dG9QYWdlU2l6ZTpQfT10O2NvbnN0e2ZpcnN0OlkscHJldjpKLG5leHQ6Y2UsbGFzdDpmZSxwYWdlQ291bnRlclNlY3Rpb246QWUscGFn''@;'; put 'put ''ZU5hdlNlY3Rpb246SGUscGFnZU5hdkxhYmVsOlhlLHBhZ2VTaXplU2VsZWN0OnJ0LHBhZ2VTaXplTGFiZWw6ZHR9PUFzKGNkLHRoaXMpLGp0PUFzKG8zLHRoaXMpLmNhbGwodGhpcyxXZWUse3N0YXJ0OmkrMSxlbmQ6YSsxLHRvdGFsOmN9KSxGdD1BcyhvMyx0aGlzKS5jYWxsKHRoaXMsWmVl''@;'; put 'put ''LHtjdXJyZW50UGFnZTplLHRvdGFsUGFnZXM6cn0pLHBuPUFzKG8zLHRoaXMpLmNhbGwodGhpcyxVTik7QWUudGV4dENvbnRlbnQ9anQsWGUudGV4dENvbnRlbnQ9RnQscnQudGV4dENvbnRlbnQ9IiIsZHQudGV4dENvbnRlbnQ9YCR7cG59OmAsWmEoSGUsW1QyKEFzKG8zLHRoaXMpLmNhbGwo''@;'; put 'put ''dGhpcyx6ZWUpKV0pLFphKHJ0LFtUMihBcyhvMyx0aGlzKS5jYWxsKHRoaXMsVU4pKV0pLEFzKHBpZSx0aGlzKS5jYWxsKHRoaXMsRnQpLHRoaXMucmVmcmVzaEJvcmRlclN0YXRlKCksbS5mb3JFYWNoKFpuPT57Y29uc3QgR3I9ImF1dG8iPT09Wm4/QXMobzMsdGhpcykuY2FsbCh0aGlzLFVl''@;'; put 'put ''ZSk6Wm4sRXI9bmV3IE9wdGlvbihHcixabik7KFAmJiJhdXRvIj09PVpufHwhUCYmWm49PT1DKSYmKEVyLnNlbGVjdGVkPSEwKSxydC5hZGQoRXIpfSk7Y29uc3Qgb249MT09PWUsZ249ZT09PXI7aWYoIm5vbmUiIT09SGUuc3R5bGUuZGlzcGxheSl7Y29uc3QgWm49QXMoUlMsdGhpcykub3du''@;'; put 'put ''ZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O29uPyh0aShZLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLHRpKEosImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksWS5kaXNhYmxlZD0hMCxKLmRpc2FibGVkPSEwKToo''@;'; put 'put ''SGEoWSwiaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbi0tZGlzYWJsZWQiKSxIYShKLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLFkuZGlzYWJsZWQ9ITEsSi5kaXNhYmxlZD0hMSksZ24/KHRpKGNlLCJodC1wYWdlLW5hdmlnYXRpb24t''@;'; put 'put ''c2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLHRpKGZlLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLGNlLmRpc2FibGVkPSEwLGZlLmRpc2FibGVkPSEwKTooSGEoY2UsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVk''@;'; put 'put ''IiksSGEoZmUsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksY2UuZGlzYWJsZWQ9ITEsZmUuZGlzYWJsZWQ9ITEpLFtZLEosY2UsZmVdLmluY2x1ZGVzKFpuKSYmKEouZGlzYWJsZWQ/Y2UuZm9jdXMoKTpjZS5kaXNhYmxlZCYmSi5mb2N1cygpKX1yZXR1''@;'; put 'put ''cm4gWmEoWSxbVDIoQXMobzMsdGhpcykuY2FsbCh0aGlzLFllZSkpLGpBKG9uKV0pLFphKEosW1QyKEFzKG8zLHRoaXMpLmNhbGwodGhpcyxHZWUpKSxqQShvbildKSxaYShjZSxbVDIoQXMobzMsdGhpcykuY2FsbCh0aGlzLCRlZSkpLGpBKGduKV0pLFphKGZlLFtUMihBcyhvMyx0aGlzKS5j''@;'; put 'put ''YWxsKHRoaXMsS2VlKSksakEoZ24pXSksdGhpc31zZXRQYWdlU2l6ZVNlY3Rpb25WaXNpYmlsaXR5KHQpe2NvbnN0e3BhZ2VTaXplU2VjdGlvbjplLHBhZ2VTaXplU2VsZWN0OnJ9PUFzKGNkLHRoaXMpO3JldHVybiBlLnN0eWxlLmRpc3BsYXk9dD8iIjoibm9uZSIsci5kaXNhYmxlZD0hdCxa''@;'; put 'put ''RChfaix0aGlzLGdpZSkuY2FsbCh0aGlzKSx0aGlzfXNldENvdW50ZXJTZWN0aW9uVmlzaWJpbGl0eSh0KXtyZXR1cm4gQXMoY2QsdGhpcykucGFnZUNvdW50ZXJTZWN0aW9uLnN0eWxlLmRpc3BsYXk9dD8iIjoibm9uZSIsWkQoX2osdGhpcyxnaWUpLmNhbGwodGhpcyksdGhpc31zZXROYXZp''@;'; put 'put ''Z2F0aW9uU2VjdGlvblZpc2liaWxpdHkodCl7Y29uc3R7cGFnZU5hdlNlY3Rpb246ZSxmaXJzdDpyLHByZXY6aSxuZXh0OmEsbGFzdDpjfT1BcyhjZCx0aGlzKTtyZXR1cm4gZS5zdHlsZS5kaXNwbGF5PXQ/IiI6Im5vbmUiLHIuZGlzYWJsZWQ9IXQsaS5kaXNhYmxlZD0hdCxhLmRpc2FibGVk''@;'; put 'put ''PSF0LGMuZGlzYWJsZWQ9IXQsWkQoX2osdGhpcyxnaWUpLmNhbGwodGhpcyksdGhpc31kZXN0cm95KCl7dmFyIHQ7bnVsbD09PSh0PUFzKGNkLHRoaXMpKXx8dm9pZCAwPT09dHx8dC5jb250YWluZXIucmVtb3ZlKCksbmcoY2QsdGhpcyxudWxsKX19ZnVuY3Rpb24gZ2llKCl7Y29uc3R7Y29u''@;'; put 'put ''dGFpbmVyOm4scGFnZVNpemVTZWN0aW9uOnQscGFnZUNvdW50ZXJTZWN0aW9uOmUscGFnZU5hdlNlY3Rpb246cn09QXMoY2QsdGhpcyksaT0ibm9uZSIhPT10LnN0eWxlLmRpc3BsYXl8fCJub25lIiE9PWUuc3R5bGUuZGlzcGxheXx8Im5vbmUiIT09ci5zdHlsZS5kaXNwbGF5O0FzKEh5LHRo''@;'; put 'put ''aXMpfHwoaT90aShBcyhSUyx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHQtd3JhcHBlciIpLCJodFBhZ2luYXRpb24iKTpIYShBcyhSUyx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHQtd3JhcHBlciIpLCJodFBhZ2luYXRpb24iKSksbi5zdHlsZS5kaXNwbGF5PWk/IiI6Im5vbmUifXBsKEl5ZSwk''@;'; put 'put ''MCk7Y29uc3QgSF90PVsibmVzdGVkUm93cyIsIm1lcmdlQ2VsbHMiLCJmaXhlZFJvd3NUb3AiLCJmaXhlZFJvd3NCb3R0b20iXTtmdW5jdGlvbiBtaWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIFZfdChuKXt2YXIgdD1mdW5jdGlvbiBCX3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58''@;'; put 'put ''fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNvbnN0IFJ5ZT1uZXcgTWFwKFtbImZpeGVkIixjbGFzcyBqX3R7Y29uc3RydWN0b3IoKXttaWUodGhpcywicGFnZVNpemUiLDEpLG1pZSh0aGlzLCJ0b3RhbEl0ZW1zIiwwKSxtaWUodGhpcywidG90YWxQYWdlcyIsMCl9Y2FsY3Vs''@;'; put 'put ''YXRlKHQpe2xldHtwYWdlU2l6ZTplLHRvdGFsSXRlbXM6cn09dDt0aGlzLnBhZ2VTaXplPU1hdGgubWF4KGUsMSksdGhpcy50b3RhbEl0ZW1zPXIsdGhpcy50b3RhbFBhZ2VzPU1hdGgubWF4KDEsTWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcy90aGlzLnBhZ2VTaXplKSl9Z2V0VG90YWxQYWdl''@;'; put 'put ''cygpe3JldHVybiB0aGlzLnRvdGFsUGFnZXN9Z2V0U3RhdGUodCl7aWYoKHQtPTEpPDB8fHQ+PXRoaXMuZ2V0VG90YWxQYWdlcygpKXJldHVybjtjb25zdCBlPXQqdGhpcy5wYWdlU2l6ZTtyZXR1cm57c3RhcnRJbmRleDplLGVuZEluZGV4Ok1hdGgubWF4KDAsTWF0aC5taW4oZSt0aGlzLnBh''@;'; put 'put ''Z2VTaXplLTEsdGhpcy50b3RhbEl0ZW1zLTEpKSxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplfX19XSxbImF1dG8iLGNsYXNzIFpfdHtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiB6X3Qobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIFVfdChuKXt2YXIgdD1mdW5jdGlvbiBXX3Qobix0KXtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl''@;'; put 'put ''IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVt''@;'; put 'put ''ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufSh0aGlzLCJwYWdlcyIsW10pfWNhbGN1bGF0ZSh0KXtsZXR7aXRlbXNTaXplUHJvdmlkZXI6ZSx2aWV3cG9ydFNpemVQcm92aWRlcjpyfT10O2NvbnN0IGk9ZSgpLGE9cigpLGM9W107bGV0IG09MCxDPTAs''@;'; put 'put ''UD0wO2ZvcihsZXQgWT0wO1k8aS5sZW5ndGg7WSsrKXtjb25zdCBKPWlbWV07UD4wJiZDK0o+PWEmJihjLnB1c2goe3N0YXJ0SW5kZXg6bSxlbmRJbmRleDpZLTEscGFnZVNpemU6UH0pLG09WSxDPTAsUD0wKSxDKz1KLFArPTF9Yy5wdXNoKHtzdGFydEluZGV4Om0sZW5kSW5kZXg6TWF0aC5t''@;'; put 'put ''YXgoMCxpLmxlbmd0aC0xKSxwYWdlU2l6ZTpQfSksdGhpcy5wYWdlcz1jfWdldFRvdGFsUGFnZXMoKXtyZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGh9Z2V0U3RhdGUodCl7aWYoISgodC09MSk8MHx8dD49dGhpcy5nZXRUb3RhbFBhZ2VzKCkpKXJldHVybiB0aGlzLnBhZ2VzW3RdfX1dXSk7ZnVu''@;'; put 'put ''Y3Rpb24gTHllKG4pe2lmKCFSeWUuaGFzKG4pKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYWdpbmF0aW9uIHN0cmF0ZWd5IHR5cGU6ICR7bn1gKTtyZXR1cm4gbmV3KFJ5ZS5nZXQobikpfWZ1bmN0aW9uIFo4KG4sdCxlKXtPeWUobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIE95ZShuLHQp''@;'; put 'put ''e2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQW8obix0KXtyZXR1cm4gbi5nZXQodmMobix0KSl9ZnVuY3Rpb24gazEobix0LGUpe3JldHVybiBu''@;'; put 'put ''LnNldCh2YyhuLHQpLGUpLGV9ZnVuY3Rpb24gdmMobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlz''@;'; put 'put ''IG9iamVjdCIpfWNvbnN0IE55PSJwYWdpbmF0aW9uIiwkX3Q9YHBsdWdpbjoke055fWAsUHllPWVsYFRoZSBcYGF1dG9cYCBwYWdlIHNpemUgc2V0dGluZyByZXF1aXJlcyB0aGUgXGBhdXRvUm93U2l6ZVxgXHgyMAogIHBsdWdpbiB0byBiZSBlbmFibGVkLiBTZXQgdGhlIFxgYXV0b1Jvd1Np''@;'; put 'put ''emU6IHRydWVcYCBpbiB0aGUgY29uZmlndXJhdGlvbiB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvci5gO3ZhciBZRD1uZXcgV2Vha01hcCxLZD1uZXcgV2Vha01hcCx4cD1uZXcgV2Vha01hcCx3dT1uZXcgV2Vha01hcCxFcD1uZXcgV2Vha01hcCxiaj1uZXcgV2Vha01hcCx3aj1uZXcgV2Vh''@;'; put 'put ''a01hcCxBYz1uZXcgV2Vha1NldCx2aWU9bmV3IFdlYWtNYXA7Y2xhc3MgS190IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFlfdChuLHQpe095ZShuLHQpLHQuYWRkKG4pfSh0aGlzLEFjKSxaOCh0aGlzLFlELG51bGwpLFo4KHRoaXMsS2Qs''@;'; put 'put ''MSksWjgodGhpcyx4cCwxMCksWjgodGhpcyx3dSxudWxsKSxaOCh0aGlzLEVwLG51bGwpLFo4KHRoaXMsYmosITEpLFo4KHRoaXMsd2osITEpLFo4KHRoaXMsdmllLCgpPT57dmFyIHQ7IUFvKGJqLHRoaXMpJiZudWxsIT09KHQ9dGhpcy5ob3QpJiZ2b2lkIDAhPT10JiZ0LnZpZXcmJnZjKEFj''@;'; put 'put ''LHRoaXMsVnkpLmNhbGwodGhpcyl9KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTnl9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTAwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntwYWdlU2l6ZToxMCxwYWdlU2l6ZUxpc3Q6WyJhdXRv''@;'; put 'put ''Iiw1LDEwLDIwLDUwLDEwMF0saW5pdGlhbFBhZ2U6MSxzaG93UGFnZVNpemU6ITAsc2hvd0NvdW50ZXI6ITAsc2hvd05hdmlnYXRpb246ITAsdWlDb250YWluZXI6bnVsbH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW055XX1lbmFibGVQbHVnaW4oKXt2YXIg''@;'; put 'put ''dCxlPXRoaXM7aWYoZnVuY3Rpb24gTl90KG4pe3JldHVybiBIX3Quc29tZSh0PT57Y29uc3QgZT0hIW5bdF07cmV0dXJuIGUmJm9zKGVsYFRoZSBcYHBhZ2luYXRpb25cYCBwbHVnaW4gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgXGAke3R9XGAgb3B0aW9uLlx4MjAKICAgICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgICAgVGhpcyBjb21iaW5hdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBUaGUgcGx1Z2luIHdpbGwgcmVtYWluIGRpc2FibGVkLmApLGV9KX0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSkpcmV0dXJuIHZvaWQodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtOeV09ITEpO2lmKHRoaXMuZW5hYmxl''@;'; put 'put ''ZClyZXR1cm47Y29uc3Qgcj10aGlzLmhvdC5nZXRTZXR0aW5ncygpW055XTt2b2lkIDAhPT1yPy5pbml0aWFsUGFnZSYmazEoS2QsdGhpcyx0aGlzLmdldFNldHRpbmcoImluaXRpYWxQYWdlIikpLHZvaWQgMCE9PXI/LnBhZ2VTaXplJiZrMSh4cCx0aGlzLHRoaXMuZ2V0U2V0dGluZygicGFn''@;'; put 'put ''ZVNpemUiKSksazEoWUQsdGhpcyx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIiwhMSkpLCJhdXRvIj09PUFvKHhwLHRoaXMpJiYhKG51bGwhPT0odD10aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXpl''@;'; put 'put ''IikpJiZ2b2lkIDAhPT10JiZ0LmVuYWJsZWQpJiZvcyhQeWUpLGsxKEVwLHRoaXMsTHllKCJhdXRvIj09PUFvKHhwLHRoaXMpPyJhdXRvIjoiZml4ZWQiKSksQW8od3UsdGhpcyl8fChrMSh3dSx0aGlzLG5ldyBJeWUoe3Jvb3RFbGVtZW50OnRoaXMuaG90LnJvb3RHcmlkRWxlbWVudCx1aUNv''@;'; put 'put ''bnRhaW5lcjp0aGlzLmdldFNldHRpbmcoInVpQ29udGFpbmVyIiksaXNSdGw6dGhpcy5ob3QuaXNSdGwoKSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50aGVtZU5hbWUscGhyYXNlVHJhbnNsYXRvcjpmdW5jdGlvbigpe3JldHVybiBlLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNl''@;'; put 'put ''KC4uLmFyZ3VtZW50cyl9LHNob3VsZEhhdmVCb3JkZXI6KCk9PnZjKEFjLHRoaXMsWF90KS5jYWxsKHRoaXMpLGExMXlBbm5vdW5jZXI6aT0+ZnVuY3Rpb24gWGR0KG4pe08yJiYoTzIudGV4dENvbnRlbnQ9IiIsc2V0VGltZW91dCgoKT0+e08yJiYoTzIudGV4dENvbnRlbnQ9bil9LDEwMCkp''@;'; put 'put ''fShpKX0pKSx2YyhBYyx0aGlzLEZ5ZSkuY2FsbCh0aGlzKSxBbyh3dSx0aGlzKS5hZGRMb2NhbEhvb2soImZpcnN0UGFnZUNsaWNrIiwoKT0+dGhpcy5maXJzdFBhZ2UoKSkuYWRkTG9jYWxIb29rKCJwcmV2UGFnZUNsaWNrIiwoKT0+dGhpcy5wcmV2UGFnZSgpKS5hZGRMb2NhbEhvb2soIm5l''@;'; put 'put ''eHRQYWdlQ2xpY2siLCgpPT50aGlzLm5leHRQYWdlKCkpLmFkZExvY2FsSG9vaygibGFzdFBhZ2VDbGljayIsKCk9PnRoaXMubGFzdFBhZ2UoKSkuYWRkTG9jYWxIb29rKCJwYWdlU2l6ZUNoYW5nZSIsaT0+dGhpcy5zZXRQYWdlU2l6ZShpKSkpLHRoaXMuYWRkSG9vaygiaW5pdCIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdmMoQWMsZSxhYnQpLmNhbGwoZSwuLi5hKX0sLTEpLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0QWxsIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''aT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiB2YyhBYyxlLEh5ZSkuY2FsbChlLC4uLmEpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiB2YyhBYyxlLEh5ZSkuY2FsbChlLC4uLmEpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBB''@;'; put 'put ''cnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdmMoQWMsZSxRX3QpLmNhbGwoZSwuLi5hKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5''@;'; put 'put ''KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiB2YyhBYyxlLGVidCkuY2FsbChlLC4uLmEpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2Nd''@;'; put 'put ''PWFyZ3VtZW50c1tjXTtyZXR1cm4gdmMoQWMsZSx0YnQpLmNhbGwoZSwuLi5hKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3UmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3Jl''@;'; put 'put ''dHVybiB2YyhBYyxlLG5idCkuY2FsbChlLC4uLmEpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpO2MrKylhW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdmMoQWMsZSxyYnQpLmNh''@;'; put 'put ''bGwoZSwuLi5hKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiB2YyhBYyxlLG9idCkuY2FsbChlLC4uLmEp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJhZnRlckxhbmd1YWdlQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWFbY109YXJndW1lbnRzW2NdO3JldHVybiB2YyhBYyxlLHNidCkuY2FsbChlLC4uLmEpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJiZWZvcmVIZWlnaHRDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkoaSksYz0wO2M8aTtjKyspYVtjXT1hcmd1bWVudHNbY107cmV0dXJuIHZjKEFjLGUsaWJ0KS5jYWxsKGUsLi4uYSl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0''@;'; put 'put ''VGhlbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkoaSksYz0wO2M8aTtjKyspYVtjXT1hcmd1bWVudHNbY107cmV0dXJuIHZjKEFjLGUsbGJ0KS5jYWxsKGUsLi4uYSl9KSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNh''@;'; put 'put ''Y2hlVXBkYXRlZCIsQW8odmllLHRoaXMpKSx2YyhBYyx0aGlzLHFfdCkuY2FsbCh0aGlzKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHZjKEFjLHRoaXMsVnkpLmNhbGwodGhpcyksc3VwZXIudXBk''@;'; put 'put ''YXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlbW92ZUxvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixBbyh2aWUsdGhpcykpLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx2YyhBYyx0aGlzLEpfdCkuY2FsbCh0aGlzKSxBbyh3dSx0aGlz''@;'; put 'put ''KS5kZXN0cm95KCksazEod3UsdGhpcyxudWxsKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0UGFnaW5hdGlvbkRhdGEoKXtjb25zdCB0PUFvKEVwLHRoaXMpLmdldFRvdGFsUGFnZXMoKTtsZXQgZT0tMSxyPS0xO2NvbnN0e3BhZ2VTaXplOmksc3RhcnRJbmRleDphfT1BbyhFcCx0aGlzKS5n''@;'; put 'put ''ZXRTdGF0ZShBbyhLZCx0aGlzKSksYz10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgbT0wO2ZvcihsZXQgQz1hO208aSYmIShDPj1jKTtDKyspdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhDKSl8fCgtMT09PWUmJihlPUMpLHI9QyxtKz0x''@;'; put 'put ''KTtyZXR1cm57Y3VycmVudFBhZ2U6QW8oS2QsdGhpcyksdG90YWxQYWdlczp0LHBhZ2VTaXplOmkscGFnZVNpemVMaXN0OlsuLi50aGlzLmdldFNldHRpbmcoInBhZ2VTaXplTGlzdCIpXSxhdXRvUGFnZVNpemU6ImF1dG8iPT09QW8oeHAsdGhpcyksbnVtYmVyT2ZSZW5kZXJlZFJvd3M6dGhp''@;'; put 'put ''cy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKSxmaXJzdFZpc2libGVSb3dJbmRleDplLGxhc3RWaXNpYmxlUm93SW5kZXg6cn19c2V0UGFnZSh0KXtjb25zdCBlPUFvKEtkLHRoaXMpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhZ2VDaGFu''@;'; put 'put ''Z2UiLGUsdCkmJihrMShLZCx0aGlzLHQpLHZjKEFjLHRoaXMsVnkpLmNhbGwodGhpcyksdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlQ2hhbmdlIixlLEFvKEtkLHRoaXMpKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRz''@;'; put 'put ''U2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1yZXNldFBhZ2UoKXt0aGlzLnNldFBhZ2UodGhpcy5nZXRTZXR0aW5nKCJpbml0aWFsUGFnZSIpKX1zZXRQYWdlU2l6ZSh0KXt2YXIgZTtjb25zdCByPUFvKHhwLHRoaXMpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhZ2VTaXplQ2hh''@;'; put 'put ''bmdlIixyLHQpJiYoImF1dG8iPT09dCYmIShudWxsIT09KGU9dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpKSYmdm9pZCAwIT09ZSYmZS5lbmFibGVkKSYmb3MoUHllKSxrMShFcCx0aGlzLEx5ZSgiYXV0byI9PT10PyJhdXRvIjoiZml4ZWQiKSksazEoeHAsdGhpcyx0KSx2YyhB''@;'; put 'put ''Yyx0aGlzLFZ5KS5jYWxsKHRoaXMpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VTaXplQ2hhbmdlIixyLEFvKHhwLHRoaXMpKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1yZXNldFBhZ2VTaXplKCl7dGhpcy5zZXRQYWdlU2l6ZSh0''@;'; put 'put ''aGlzLmdldFNldHRpbmcoInBhZ2VTaXplIikpfXJlc2V0UGFnaW5hdGlvbigpe3RoaXMucmVzZXRQYWdlKCksdGhpcy5yZXNldFBhZ2VTaXplKCksdmMoQWMsdGhpcyxGeWUpLmNhbGwodGhpcyl9bmV4dFBhZ2UoKXt0aGlzLnNldFBhZ2UoQW8oS2QsdGhpcykrMSl9cHJldlBhZ2UoKXt0aGlz''@;'; put 'put ''LnNldFBhZ2UoQW8oS2QsdGhpcyktMSl9Zmlyc3RQYWdlKCl7dGhpcy5zZXRQYWdlKDEpfWxhc3RQYWdlKCl7dGhpcy5zZXRQYWdlKEFvKEVwLHRoaXMpLmdldFRvdGFsUGFnZXMoKSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIEFvKEtkLHRoaXMpPjF9aGFzTmV4dFBhZ2UoKXtyZXR1cm4g''@;'; put 'put ''QW8oS2QsdGhpcyk8QW8oRXAsdGhpcykuZ2V0VG90YWxQYWdlcygpfWdldEN1cnJlbnRQYWdlRGF0YSgpe2NvbnN0e2ZpcnN0VmlzaWJsZVJvd0luZGV4OnQsbGFzdFZpc2libGVSb3dJbmRleDplfT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7cmV0dXJuLTE9PT10fHwtMT09PWU/W106dGhp''@;'; put 'put ''cy5ob3QuZ2V0RGF0YSh0LDAsZSx0aGlzLmhvdC5jb3VudENvbHMoKS0xKX1zaG93UGFnZVNpemVTZWN0aW9uKCl7QW8od3UsdGhpcykuc2V0UGFnZVNpemVTZWN0aW9uVmlzaWJpbGl0eSghMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFnZVNpemVWaXNpYmlsaXR5Q2hhbmdlIiwhMCl9''@;'; put 'put ''aGlkZVBhZ2VTaXplU2VjdGlvbigpe0FvKHd1LHRoaXMpLnNldFBhZ2VTaXplU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VTaXplVmlzaWJpbGl0eUNoYW5nZSIsITEpfXNob3dQYWdlQ291bnRlclNlY3Rpb24oKXtBbyh3dSx0aGlzKS5zZXRDb3Vu''@;'; put 'put ''dGVyU2VjdGlvblZpc2liaWxpdHkoITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VDb3VudGVyVmlzaWJpbGl0eUNoYW5nZSIsITApfWhpZGVQYWdlQ291bnRlclNlY3Rpb24oKXtBbyh3dSx0aGlzKS5zZXRDb3VudGVyU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlclBhZ2VDb3VudGVyVmlzaWJpbGl0eUNoYW5nZSIsITEpfXNob3dQYWdlTmF2aWdhdGlvblNlY3Rpb24oKXtBbyh3dSx0aGlzKS5zZXROYXZpZ2F0aW9uU2VjdGlvblZpc2liaWxpdHkoITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VOYXZpZ2F0aW9uVmlzaWJpbGl0''@;'; put 'put ''eUNoYW5nZSIsITApfWhpZGVQYWdlTmF2aWdhdGlvblNlY3Rpb24oKXtBbyh3dSx0aGlzKS5zZXROYXZpZ2F0aW9uU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VOYXZpZ2F0aW9uVmlzaWJpbGl0eUNoYW5nZSIsITEpfWRlc3Ryb3koKXt2YXIgdDtr''@;'; put 'put ''MShZRCx0aGlzLG51bGwpLGsxKEVwLHRoaXMsbnVsbCksbnVsbD09PSh0PUFvKHd1LHRoaXMpKXx8dm9pZCAwPT09dHx8dC5kZXN0cm95KCksazEod3UsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEZ5ZSgpe3RoaXMuZ2V0U2V0dGluZygic2hvd1BhZ2VTaXplIik/dGhp''@;'; put 'put ''cy5zaG93UGFnZVNpemVTZWN0aW9uKCk6dGhpcy5oaWRlUGFnZVNpemVTZWN0aW9uKCksdGhpcy5nZXRTZXR0aW5nKCJzaG93Q291bnRlciIpP3RoaXMuc2hvd1BhZ2VDb3VudGVyU2VjdGlvbigpOnRoaXMuaGlkZVBhZ2VDb3VudGVyU2VjdGlvbigpLHRoaXMuZ2V0U2V0dGluZygic2hvd05h''@;'; put 'put ''dmlnYXRpb24iKT90aGlzLnNob3dQYWdlTmF2aWdhdGlvblNlY3Rpb24oKTp0aGlzLmhpZGVQYWdlTmF2aWdhdGlvblNlY3Rpb24oKX1mdW5jdGlvbiBWeSgpe2sxKGJqLHRoaXMsITApLEFvKFlELHRoaXMpLmNsZWFyKCk7Y29uc3Qgbj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXhlcygpLHQ9bi5sZW5ndGgse3N0eWxlc0hhbmRsZXI6ZX09dGhpcy5ob3Q7QW8oRXAsdGhpcykuY2FsY3VsYXRlKHtwYWdlU2l6ZTpBbyh4cCx0aGlzKSx0b3RhbEl0ZW1zOnQsdmlld3BvcnRTaXplUHJvdmlkZXI6KCk9Pntjb25zdHt2aWV3OmF9PXRoaXMuaG90O2lmKGEu''@;'; put 'put ''aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IG09Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSksQz1OdW1iZXIucGFyc2VJbnQobS5tYXJnaW5Ub3AsMTApK051bWJlci5wYXJzZUludChtLm1hcmdpbkJvdHRvbSwxMCksUD10aGlzLmhv''@;'; put 'put ''dC5oYXNDb2xIZWFkZXJzKCk/YS5fd3Qud3RUYWJsZS5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTowLFk9QW8od3UsdGhpcykuZ2V0SGVpZ2h0KCk7cmV0dXJuIGEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktWS1QLUN9Y29uc3QgYz1hLmhhc0hvcml6b250YWxTY3JvbGwoKT9ndSgpOjA7cmV0dXJu''@;'; put 'put ''IGEuZ2V0Vmlld3BvcnRIZWlnaHQoKS1jfSxpdGVtc1NpemVQcm92aWRlcjooKT0+dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5tYXAoYz0+e3ZhciBtO2NvbnN0IEM9dGhpcy5ob3QudG9WaXN1YWxSb3coYyk7cmV0dXJuIG51bGwhPT0obT10aGlzLmhv''@;'; put 'put ''dC5nZXRSb3dIZWlnaHQoQykpJiZ2b2lkIDAhPT1tP206ZS5nZXREZWZhdWx0Um93SGVpZ2h0KEMpfSl9KTtjb25zdCByPUFvKEVwLHRoaXMpLmdldFRvdGFsUGFnZXMoKTtpZihrMShLZCx0aGlzLGdzKEFvKEtkLHRoaXMpLDEscikpLG4ubGVuZ3RoPjApe2NvbnN0e3N0YXJ0SW5kZXg6YSxw''@;'; put 'put ''YWdlU2l6ZTpjfT1BbyhFcCx0aGlzKS5nZXRTdGF0ZShBbyhLZCx0aGlzKSk7bi5zcGxpY2UoYSxjKX1uLmxlbmd0aD4wP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bi5mb3JFYWNoKGE9PkFvKFlELHRoaXMpLnNldFZhbHVlQXRJbmRleChhLCEwKSl9LCEwKTp0aGlzLmhvdC5yb3dJ''@;'; put 'put ''bmRleE1hcHBlci51cGRhdGVDYWNoZSghMCksazEoYmosdGhpcywhMSk7Y29uc3QgaT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7QW8od3UsdGhpcykudXBkYXRlU3RhdGUoey4uLmksdG90YWxSZW5kZXJlZFJvd3M6dH0pfWZ1bmN0aW9uIFhfdCgpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVy''@;'; put 'put ''biEwO2NvbnN0e3ZpZXc6bn09dGhpcy5ob3Q7aWYobi5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSlyZXR1cm4hMTtpZihuLmhhc0hvcml6b250YWxTY3JvbGwoKXx8bi5nZXRUYWJsZUhlaWdodCgpPG4uZ2V0V29ya3NwYWNlSGVpZ2h0KCkpcmV0dXJuITA7Y29uc3R7bGFzdFZp''@;'; put 'put ''c2libGVSb3dJbmRleDp0fT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7cmV0dXJuIG4uZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpIT09dH1mdW5jdGlvbiBxX3QoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnJlZ2lzdGVyU2NvcGUoTnksQW8od3UsdGhpcykuZ2V0Q29udGFp''@;'; put 'put ''bmVyKCkse3Nob3J0Y3V0c0NvbnRleHROYW1lOiRfdCxydW5Pbmx5SWY6KCk9PnRoaXMuZ2V0U2V0dGluZygic2hvd1BhZ2VTaXplIil8fHRoaXMuZ2V0U2V0dGluZygic2hvd05hdmlnYXRpb24iKSxvbkFjdGl2YXRlOm49Pntjb25zdCB0PUFvKHd1LHRoaXMpLmdldEZvY3VzYWJsZUVsZW1l''@;'; put 'put ''bnRzKCk7dC5sZW5ndGg+MCYmKCJ0YWJfZnJvbV9hYm92ZSI9PT1uP3QuYXQoMCkuZm9jdXMoKToidGFiX2Zyb21fYmVsb3ciPT09biYmdC5hdCgtMSkuZm9jdXMoKSl9fSl9ZnVuY3Rpb24gSl90KCl7dGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS51bnJlZ2lzdGVyU2NvcGUoTnkp''@;'; put 'put ''fWZ1bmN0aW9uIEh5ZShuLHQpe2NvbnN0e2ZpcnN0VmlzaWJsZVJvd0luZGV4OmUsbGFzdFZpc2libGVSb3dJbmRleDpyfT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7KEFvKEtkLHRoaXMpPjF8fG4ucm93Pj0wKSYmKG4ucm93PWUpLHQucm93PXJ9ZnVuY3Rpb24gUV90KG4pe2lmKHRoaXMu''@;'; put 'put ''aG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl7Y29uc3R7bGFzdFZpc2libGVSb3dJbmRleDp0fT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7bi5yb3c9dH19ZnVuY3Rpb24gZWJ0KCl7aWYoIXRoaXMuaG90LmdldFNldHRpbmdzKCkubmF2aWdhYmxlSGVhZGVycyly''@;'; put 'put ''ZXR1cm47Y29uc3Qgbj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFuLmlzU2luZ2xlKCkpe2NvbnN0e2hpZ2hsaWdodDp0fT1uO3Qucm93PWdzKHQucm93LG4uZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csbi5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3cpfX1mdW5jdGlvbiB0''@;'; put 'put ''YnQobix0KXtjb25zdHtmaXJzdFZpc2libGVSb3dJbmRleDplLGxhc3RWaXNpYmxlUm93SW5kZXg6cn09dGhpcy5nZXRQYWdpbmF0aW9uRGF0YSgpO2lmKC0xPT09ZXx8LTE9PT1yKXJldHVybiExO3QuZm9yRWFjaChpPT57bGV0e3N0YXJ0Um93OmF9PWk7aWYoMD09PW4ubGVuZ3RoKXJldHVy''@;'; put 'put ''bjtjb25zdCBjPU1hdGgubWluKG4ubGVuZ3RoLShyLWErMSksbi5sZW5ndGgpO24uc3BsaWNlKDAsYyl9KX1mdW5jdGlvbiBuYnQoKXsiYXV0byIhPT1Bbyh4cCx0aGlzKXx8QW8od2osdGhpcyk/azEod2osdGhpcywhMSk6KHZjKEFjLHRoaXMsVnkpLmNhbGwodGhpcyksazEod2osdGhpcywh''@;'; put 'put ''MCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9ZnVuY3Rpb24gcmJ0KCl7Y29uc3R7dmlldzpufT10aGlzLmhvdCx0PW4uaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9uLmdldFRvdGFsVGFibGVXaWR0aCgpOm4uZ2V0V29y''@;'; put 'put ''a3NwYWNlV2lkdGgoKTtBbyh3dSx0aGlzKS51cGRhdGVXaWR0aCh0KS5yZWZyZXNoQm9yZGVyU3RhdGUoKX1mdW5jdGlvbiBpYnQobil7cmV0dXJuIHRoaXMuZ2V0U2V0dGluZygidWlDb250YWluZXIiKXx8ISgibnVtYmVyIj09dHlwZW9mIG58fCJzdHJpbmciPT10eXBlb2YgbiYmL15cZCsk''@;'; put 'put ''Ly50ZXN0KG4pfHwic3RyaW5nIj09dHlwZW9mIG4mJm4uZW5kc1dpdGgoInB4IikpP246YGNhbGMoJHsic3RyaW5nIj09dHlwZW9mIG4mJm4uZW5kc1dpdGgoInB4Iik/bjpgJHtufXB4YH0gLSAke0FvKHd1LHRoaXMpLmdldEhlaWdodCgpfXB4KWB9ZnVuY3Rpb24gYWJ0KCl7ImF1dG8iIT09''@;'; put 'put ''QW8oeHAsdGhpcykmJnZjKEFjLHRoaXMsVnkpLmNhbGwodGhpcyl9ZnVuY3Rpb24gb2J0KCl7QW8od3UsdGhpcykucmVmcmVzaEJvcmRlclN0YXRlKCl9ZnVuY3Rpb24gc2J0KCl7dmMoQWMsdGhpcyxWeSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBsYnQobil7QW8od3UsdGhpcykudXBkYXRlVGhl''@;'; put 'put ''bWUobil9ZnVuY3Rpb24geWllKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBjYnQobil7dmFyIHQ9ZnVuY3Rpb24gdWJ0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxs''@;'; put 'put ''KG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jb25zdCBoYnQ9Y2xhc3MgZGJ0e2NvbnN0cnVjdG9yKHQp''@;'; put 'put ''e2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7eWllKHRoaXMsInJvb3RXaW5kb3ciLHZvaWQgMCkseWllKHRoaXMsInByZWZpeCIsdm9pZCAwKSx5aWUodGhpcywic2F2ZWRLZXlzIixbXSksdGhpcy5yb290V2luZG93''@;'; put 'put ''PWUsdGhpcy5wcmVmaXg9dCx0aGlzLmxvYWRTYXZlZEtleXMoKX1zYXZlVmFsdWUodCxlKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dH1gLEpTT04uc3RyaW5naWZ5KGUpKSwtMT09PXRoaXMuc2F2ZWRLZXlzLmluZGV4T2YodCkmJih0''@;'; put 'put ''aGlzLnNhdmVkS2V5cy5wdXNoKHQpLHRoaXMuc2F2ZVNhdmVkS2V5cygpKX1sb2FkVmFsdWUodCxlKXtjb25zdCBpPXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHt0eXBlb2YgdD4idSI/ZTp0fWApO3JldHVybiBudWxsPT09aT92b2lkIDA6''@;'; put 'put ''SlNPTi5wYXJzZShpKX1yZXNldCh0KXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dH1gKX1yZXNldEFsbCgpe1luKHRoaXMuc2F2ZWRLZXlzLCh0LGUpPT57dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAk''@;'; put 'put ''e3RoaXMucHJlZml4fV8ke3RoaXMuc2F2ZWRLZXlzW2VdfWApfSksdGhpcy5jbGVhclNhdmVkS2V5cygpfWxvYWRTYXZlZEtleXMoKXtjb25zdCB0PXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgKSxlPSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgdD9KU09OLnBhcnNlKHQpOnZvaWQgMDt0aGlzLnNhdmVkS2V5cz1lfHxbXX1zYXZlU2F2ZWRLZXlzKCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2AsSlNPTi5zdHJpbmdpZnko''@;'; put 'put ''dGhpcy5zYXZlZEtleXMpKX1jbGVhclNhdmVkS2V5cygpe3RoaXMuc2F2ZWRLZXlzLmxlbmd0aD0wLHRoaXMuc2F2ZVNhdmVkS2V5cygpfX07RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVNhdmUiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lz''@;'; put 'put ''dGVudFN0YXRlTG9hZCIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIpO2NvbnN0IE55ZT0icGVyc2lzdGVudFN0YXRlIixWeWU9bmV3IFdlYWtTZXQ7Y2xhc3MgdmJ0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMp''@;'; put 'put ''LGZ1bmN0aW9uIGZidChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gcGJ0KG4pe3ZhciB0PWZ1bmN0aW9uIGdidChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KHRoaXMsInN0b3JhZ2UiLHZvaWQgMCl9c3RhdGljIGdldCBQTFVH''@;'; put 'put ''SU5fS0VZKCl7cmV0dXJuIE55ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtOeWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KFZ5ZS5oYXModGhpcy5ob3QpfHwoVnllLmFkZCh0''@;'; put 'put ''aGlzLmhvdCksdzVlKCJUaGUgUGVyc2lzdGVudFN0YXRlIHBsdWdpbiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAxNy4wLiBQbGVhc2UgdXBkYXRlIHlvdXIgc2V0dGluZ3MgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBmdXR1cmUgdmVyc2lvbnMu''@;'; put 'put ''IikpLHRoaXMuc3RvcmFnZXx8KHRoaXMuc3RvcmFnZT1uZXcgaGJ0KHRoaXMuaG90LnJvb3RDb250YWluZXIuaWR8fHRoaXMuaG90LnJvb3RFbGVtZW50LmlkLHRoaXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCh0LGUpPT50aGlzLnNhdmVW''@;'; put 'put ''YWx1ZSh0LGUpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCh0LGUpPT50aGlzLmxvYWRWYWx1ZSh0LGUpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwoKT0+dGhpcy5yZXNldFZhbHVlKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1''@;'; put 'put ''Z2luKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1sb2FkVmFsdWUodCxlKXtlLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2Fk''@;'; put 'put ''VmFsdWUodCl9c2F2ZVZhbHVlKHQsZSl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZSh0LGUpfXJlc2V0VmFsdWUodCl7dHlwZW9mIHQ+InUiP3RoaXMuc3RvcmFnZS5yZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldCh0KX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBfaWUo''@;'; put 'put ''bix0LGUpe3JldHVybih0PWZ1bmN0aW9uIGJidChuKXt2YXIgdD1mdW5jdGlvbiB3YnQobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWZ1bmN0aW9uIEJ5ZShuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5o''@;'; put 'put ''YXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgYmllPSJzZWFyY2giLE1idD1mdW5jdGlvbihuLHQsZSxyLGkpe24uZ2V0Q2VsbE1ldGEodCxl''@;'; put 'put ''KS5pc1NlYXJjaFJlc3VsdD1pfSx4YnQ9ZnVuY3Rpb24obix0LGUpe3JldHVybiEobWMobil8fG51bGw9PT1ufHwhbi50b0xvY2FsZUxvd2VyQ2FzZXx8MD09PW4ubGVuZ3RofHxtYyh0KXx8bnVsbD09PXQpJiYtMSE9PXQudG9TdHJpbmcoKS50b0xvY2FsZUxvd2VyQ2FzZShlLmxvY2FsZSku''@;'; put 'put ''aW5kZXhPZihuLnRvTG9jYWxlTG93ZXJDYXNlKGUubG9jYWxlKSl9O3ZhciB3aWU9bmV3IFdlYWtTZXQ7Y2xhc3MgRWJ0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHlidChuLHQpeyhmdW5jdGlvbiBfYnQobix0KXtpZih0LmhhcyhuKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LmFkZChuKX0odGhpcyx3aWUpLF9pZSh0aGlzLCJjYWxsYmFjayIsTWJ0KSxfaWUodGhpcywicXVlcnlNZXRob2QiLHhidCks''@;'; put 'put ''X2llKHRoaXMsInNlYXJjaFJlc3VsdENsYXNzIiwiaHRTZWFyY2hSZXN1bHQiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYmllfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE5MH1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVti''@;'; put 'put ''aWVdfWVuYWJsZVBsdWdpbigpe3ZhciB0PXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBlPXRoaXMuaG90LmdldFNldHRpbmdzKClbYmllXTt0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKGUpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIEJ5ZSh3aWUsdCxqeWUpLmNhbGwodCwuLi5pKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgdD10aGlzO2NvbnN0IGU9ZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gQnllKHdpZSx0LGp5ZSkuY2FsbCh0LC4uLmkpfTt0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsZSksdGhpcy5ob3QuYWRkSG9v''@;'; put 'put ''a09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJiZWZvcmVSZW5kZXJlciIsZSl9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVn''@;'; put 'put ''aW4oKX1xdWVyeSh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRDYWxsYmFjaygpLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuZ2V0UXVlcnlN''@;'; put 'put ''ZXRob2QoKTtjb25zdCBpPXRoaXMuaG90LmNvdW50Um93cygpLGE9dGhpcy5ob3QuY291bnRDb2xzKCksYz1bXSxtPXRoaXMuaG90O3JldHVybiBlbygwLGktMSxDPT57ZW8oMCxhLTEsUD0+e2NvbnN0IFk9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChDLFApLEo9dGhpcy5ob3QuZ2V0Q2VsbE1l''@;'; put 'put ''dGEoQyxQKSxjZT1KLnNlYXJjaC5jYWxsYmFja3x8ZSxBZT0oSi5zZWFyY2gucXVlcnlNZXRob2R8fHIpKHQsWSxKKTtBZSYmYy5wdXNoKHtyb3c6Qyxjb2w6UCxkYXRhOll9KSxjZSYmY2UobSxDLFAsWSxBZSl9KX0pLGN9Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31zZXRD''@;'; put 'put ''YWxsYmFjayh0KXt0aGlzLmNhbGxiYWNrPXR9Z2V0UXVlcnlNZXRob2QoKXtyZXR1cm4gdGhpcy5xdWVyeU1ldGhvZH1zZXRRdWVyeU1ldGhvZCh0KXt0aGlzLnF1ZXJ5TWV0aG9kPXR9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRTZWFy''@;'; put 'put ''Y2hSZXN1bHRDbGFzcyh0KXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPXR9dXBkYXRlUGx1Z2luU2V0dGluZ3ModCl7aG8odCkmJih0LnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKHQuc2VhcmNoUmVzdWx0Q2xhc3MpLHQucXVlcnlNZXRob2QmJnRoaXMuc2V0''@;'; put 'put ''UXVlcnlNZXRob2QodC5xdWVyeU1ldGhvZCksdC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFjayh0LmNhbGxiYWNrKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24ganllKG4sdCxlLHIsaSxhKXtjb25zdCBjPWEuY2xhc3NOYW1lfHxbXTtsZXQgbT1bXTsic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGM/bT1jLnNwbGl0KCIgIik6bS5wdXNoKC4uLmMpLHRoaXMuaXNFbmFibGVkKCkmJmEuaXNTZWFyY2hSZXN1bHQ/bS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKXx8bS5wdXNoKGAke3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9YCk6bS5pbmNsdWRlcyh0aGlzLnNlYXJj''@;'; put 'put ''aFJlc3VsdENsYXNzKSYmbS5zcGxpY2UobS5pbmRleE9mKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpLDEpLGEuY2xhc3NOYW1lPW0uam9pbigiICIpfWZ1bmN0aW9uIENqKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBUYnQobil7dmFyIHQ9ZnVuY3Rpb24gQWJ0KG4sdCl7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0''@;'; put 'put ''IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyB6eWV7Y29uc3RydWN0b3IodCl7Q2oodGhpcywidmlld3BvcnRXaWR0aCIsdm9pZCAwKSxDaih0aGlzLCJvdmVyd3JpdGVDb2x1bW5XaWR0aEZuIix2b2lkIDApLENqKHRoaXMsImJhc2VXaWR0aHMiLG5l''@;'; put 'put ''dyBNYXApLENqKHRoaXMsInN0cmV0Y2hlZFdpZHRocyIsbmV3IE1hcCksdGhpcy5vdmVyd3JpdGVDb2x1bW5XaWR0aEZuPXR9cHJlcGFyZSh0KXtsZXR7dmlld3BvcnRXaWR0aDplfT10O3RoaXMudmlld3BvcnRXaWR0aD1lLHRoaXMuYmFzZVdpZHRocy5jbGVhcigpLHRoaXMuc3RyZXRjaGVk''@;'; put 'put ''V2lkdGhzLmNsZWFyKCl9c2V0Q29sdW1uQmFzZVdpZHRoKHQsZSl7dGhpcy5iYXNlV2lkdGhzLnNldCh0LGUpfWNhbGN1bGF0ZSgpe31nZXRXaWR0aHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnN0cmV0Y2hlZFdpZHRocyl9fWNsYXNzIGtidCBleHRlbmRzIHp5ZXtjYWxjdWxhdGUoKXtj''@;'; put 'put ''b25zdCB0PUFycmF5LmZyb20odGhpcy5iYXNlV2lkdGhzKS5yZWR1Y2UoKEosY2UpPT57bGV0WyxmZV09Y2U7cmV0dXJuIEorZmV9LDApO2lmKHRoaXMudmlld3BvcnRXaWR0aC10PDApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCByPXRoaXMudmlld3Bv''@;'; put 'put ''cnRXaWR0aC90LGk9W10sYT1bXTtsZXQgYz10aGlzLnZpZXdwb3J0V2lkdGgsbT0wO2lmKHRoaXMuYmFzZVdpZHRocy5mb3JFYWNoKChKLGNlKT0+e2NvbnN0IGZlPU1hdGgucm91bmQoSipyKSxBZT10aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRoRm4oZmUsY2UpO2ZlPT09QWUmJmZlPj01MD8o''@;'; put 'put ''aS5wdXNoKFtjZSxBZV0pLG0rPUFlKTpmZSE9PUFlJiYoaS5wdXNoKFtjZSxBZV0pLGEucHVzaChjZSksYy09QWUpfSksYzw9NTApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCBDPWMvbTtsZXQgUD0tMSxZPTA7aS5mb3JFYWNoKChKLGNlKT0+e2xldFtm''@;'; put 'put ''ZSxBZV09SixIZT1BZTthLmluY2x1ZGVzKGZlKXx8KEhlPU1hdGgucm91bmQoQWUqQykpLHRoaXMuc3RyZXRjaGVkV2lkdGhzLnNldChmZSxIZSksUD1mZSxjZTxpLmxlbmd0aC0xJiYoWSs9SGUpfSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2l6ZT4xJiZ0aGlzLnN0cmV0Y2hlZFdpZHRocy5z''@;'; put 'put ''ZXQoUCxNYXRoLnJvdW5kKHRoaXMudmlld3BvcnRXaWR0aC1ZKSl9fWZ1bmN0aW9uIFV5ZShuLHQsZSl7KGZ1bmN0aW9uIERidChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24g''@;'; put 'put ''YW4gb2JqZWN0Iil9KShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gQ2llKG4sdCl7cmV0dXJuIG4uZ2V0KFd5ZShuLHQpKX1mdW5jdGlvbiBTaihuLHQsZSl7cmV0dXJuIG4uc2V0KFd5ZShuLHQpLGUpLGV9ZnVuY3Rpb24gV3llKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09''@;'; put 'put ''dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTWo9bmV3IFdlYWtNYXAsR0Q9bmV3IFdlYWtNYXA7Y2xhc3MgSWJ0IGV4dGVuZHMgenll''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxVeWUodGhpcyxNaiwwKSxVeWUodGhpcyxHRCwtMSl9cHJlcGFyZSh0KXtzdXBlci5wcmVwYXJlKHQpLFNqKE1qLHRoaXMsMCksU2ooR0QsdGhpcywtMSl9c2V0Q29sdW1uQmFzZVdpZHRoKHQsZSl7c3VwZXIuc2V0Q29sdW1uQmFz''@;'; put 'put ''ZVdpZHRoKHQsZSksU2ooR0QsdGhpcyx0KSxTaihNaix0aGlzLGUpfWNhbGN1bGF0ZSgpe2lmKC0xPT09Q2llKEdELHRoaXMpKXJldHVybjtjb25zdCB0PUFycmF5LmZyb20odGhpcy5iYXNlV2lkdGhzKS5yZWR1Y2UoKHIsaSk9PntsZXRbLGFdPWk7cmV0dXJuIHIrYX0sMCksZT1NYXRoLm1h''@;'; put 'put ''eCh0aGlzLnZpZXdwb3J0V2lkdGgtdCtDaWUoTWosdGhpcyksMCk7dGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KENpZShHRCx0aGlzKSxlKX19ZnVuY3Rpb24geGoobix0LGUpe1p5ZShuLHQpLHQuc2V0KG4sZSl9ZnVuY3Rpb24gWnllKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBGYyhuLHQpe3JldHVybiBuLmdldChPUyhuLHQpKX1mdW5jdGlvbiBTaWUobix0LGUpe3JldHVybiBuLnNldChPUyhuLHQpLGUpLGV9ZnVuY3Rpb24g''@;'; put 'put ''T1Mobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBRMD1uZXcgV2Vha01h''@;'; put 'put ''cCxQUz1uZXcgV2Vha01hcCxNaWU9bmV3IFdlYWtNYXAsRWo9bmV3IFdlYWtNYXAsJEQ9bmV3IFdlYWtTZXQ7Y2xhc3MgT2J0e2NvbnN0cnVjdG9yKHQpeyhmdW5jdGlvbiBSYnQobix0KXtaeWUobix0KSx0LmFkZChuKX0pKHRoaXMsJEQpLHhqKHRoaXMsUTAsdm9pZCAwKSx4aih0aGlzLFBT''@;'; put 'put ''LHZvaWQgMCkseGoodGhpcyxNaWUsbmV3IE1hcChbWyJhbGwiLG5ldyBrYnQoT1MoJEQsdGhpcyxZeWUpLmJpbmQodGhpcykpXSxbImxhc3QiLG5ldyBJYnQoT1MoJEQsdGhpcyxZeWUpLmJpbmQodGhpcykpXV0pKSx4aih0aGlzLEVqLCJub25lIiksU2llKFEwLHRoaXMsdCksU2llKFBTLHRo''@;'; put 'put ''aXMsRmMoUTAsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgic3RyZXRjaENvbHVtbnMiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpKX11c2VTdHJhdGVneSh0KXtTaWUoRWosdGhpcyxGYyhNaWUsdGhpcykuaGFzKHQpP3Q6Im5vbmUiKX1yZWZyZXNo''@;'; put 'put ''U3RyZXRjaGluZygpeyJub25lIiE9PUZjKEVqLHRoaXMpP0ZjKFEwLHRoaXMpLmJhdGNoRXhlY3V0aW9uKCgpPT57RmMoUFMsdGhpcykuY2xlYXIoKTtjb25zdCB0PUZjKE1pZSx0aGlzKS5nZXQoRmMoRWosdGhpcykpO2xldCByPUZjKFEwLHRoaXMpLnZpZXcuZ2V0Vmlld3BvcnRXaWR0aCgp''@;'; put 'put ''O09TKCRELHRoaXMsUGJ0KS5jYWxsKHRoaXMpJiYoci09Z3UoRmMoUTAsdGhpcykucm9vdERvY3VtZW50KSksdC5wcmVwYXJlKHt2aWV3cG9ydFdpZHRoOnJ9KTtmb3IobGV0IGk9MDtpPEZjKFEwLHRoaXMpLmNvdW50Q29scygpO2krKylGYyhRMCx0aGlzKS5jb2x1bW5JbmRleE1hcHBlci5p''@;'; put 'put ''c0hpZGRlbihGYyhRMCx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGkpKXx8dC5zZXRDb2x1bW5CYXNlV2lkdGgoaSxPUygkRCx0aGlzLEZidCkuY2FsbCh0aGlzLGkpKTt0LmNhbGN1bGF0ZSgpLHQuZ2V0V2lkdGhzKCkuZm9yRWFjaChpPT57bGV0W2EsY109aTtGYyhQUyx0aGlzKS5zZXRWYWx1''@;'; put 'put ''ZUF0SW5kZXgoRmMoUTAsdGhpcykudG9QaHlzaWNhbENvbHVtbihhKSxjKX0pfSwhMCk6RmMoUFMsdGhpcykuY2xlYXIoKX1nZXRTdHJldGNoZWRXaWR0aCh0KXtyZXR1cm4gRmMoUFMsdGhpcykuZ2V0VmFsdWVBdEluZGV4KEZjKFEwLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4odCkpfX1mdW5j''@;'; put 'put ''dGlvbiBQYnQoKXtjb25zdHt2aWV3Om4sc3R5bGVzSGFuZGxlcjp0fT1GYyhRMCx0aGlzKTtpZihuLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXJldHVybiExO2NvbnN0IGU9bi5nZXRWaWV3cG9ydEhlaWdodCgpLHI9RmMoUTAsdGhpcykuY291bnRSb3dzKCksaT10LmdldERl''@;'; put 'put ''ZmF1bHRSb3dIZWlnaHQoKSxhPXQuaXNDbGFzc2ljVGhlbWUoKSxjPVk9PmEmJjA9PT1ZPzE6MDtsZXQgbT0wLEM9ITE7Zm9yKGxldCBZPTA7WTxyO1krKyl7dmFyIFA7aWYoIUZjKFEwLHRoaXMpLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKEZjKFEwLHRoaXMpLnRvUGh5c2ljYWxSb3coWSkp''@;'; put 'put ''JiYobSs9KG51bGwhPT0oUD1GYyhRMCx0aGlzKS5nZXRSb3dIZWlnaHQoWSkpJiZ2b2lkIDAhPT1QP1A6aSkrYyhZKSxtPmUpKXtDPSEwO2JyZWFrfX1yZXR1cm4gQ31mdW5jdGlvbiBGYnQobil7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1GYyhRMCx0aGlzKS5nZXRDb2xXaWR0aChuLCJTdHJl''@;'; put 'put ''dGNoQ29sdW1ucyIpKSYmdm9pZCAwIT09dD90OjUwfWZ1bmN0aW9uIFl5ZShuLHQpe3JldHVybiBGYyhRMCx0aGlzKS5ydW5Ib29rcygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixuLHQpfWZ1bmN0aW9uIHhpZShuLHQsZSl7R3llKG4sdCksdC5zZXQobixlKX1mdW5jdGlvbiBHeWUo''@;'; put 'put ''bix0KXtpZih0LmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEVpZShuLHQsZSl7cmV0dXJuIG4uc2V0KFRqKG4sdCksZSksZX1mdW5jdGlvbiBXNShuLHQp''@;'; put 'put ''e3JldHVybiBuLmdldChUaihuLHQpKX1mdW5jdGlvbiBUaihuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9u''@;'; put 'put ''IHRoaXMgb2JqZWN0Iil9dmFyIEZTPW5ldyBXZWFrTWFwLEFqPW5ldyBXZWFrTWFwLEtEPW5ldyBXZWFrTWFwLFRpZT1uZXcgV2Vha1NldDtjbGFzcyBCYnQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gSGJ0KG4sdCl7R3llKG4sdCksdC5h''@;'; put 'put ''ZGQobil9KHRoaXMsVGllKSx4aWUodGhpcyxGUyxuZXcgT2J0KHRoaXMuaG90KSkseGllKHRoaXMsQWosbnVsbCkseGllKHRoaXMsS0QsbmV3IFJlc2l6ZU9ic2VydmVyKHQ9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgZTtudWxsIT09KGU9dGhpcy5ob3QpJiZ2b2lkIDAhPT1l''@;'; put 'put ''JiZlLnZpZXcuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmdC5mb3JFYWNoKHI9PntsZXR7Y29udGVudFJlY3Q6aX09cjtudWxsIT09VzUoQWosdGhpcykmJlc1KEFqLHRoaXMpIT09aS53aWR0aCYmKHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5o''@;'; put 'put ''b3QucmVmcmVzaERpbWVuc2lvbnMoKSksRWllKEFqLHRoaXMsaS53aWR0aCl9KX0pfSkpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJzdHJldGNoQ29sdW1ucyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTU1fXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7''@;'; put 'put ''cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuWyJhbGwiLCJsYXN0Il0uaW5jbHVkZXModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCl9ZW5hYmxlUGx1Z2luKCl7dmFyIHQ9dGhpczt0aGlzLmVuYWJsZWR8fChXNShGUyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpLnN0cmV0Y2hIKSxXNShLRCx0aGlzKS5vYnNlcnZlKHRoaXMuaG90LnJvb3RFbGVtZW50KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50''@;'; put 'put ''c1tpXTtyZXR1cm4gVGooVGllLHQsemJ0KS5jYWxsKHQsLi4ucil9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09YXJndW1lbnRzW2ldO3JldHVybiBUaihU''@;'; put 'put ''aWUsdCxqYnQpLmNhbGwodCwuLi5yKX0sMTApLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtXNShGUyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpLFc1KEtELHRoaXMpLnVub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCl9Z2V0Q29sdW1uV2lkdGgodCl7cmV0dXJuIFc1KEZTLHRoaXMpLmdldFN0cmV0Y2hlZFdpZHRoKHQpfWRlc3Ryb3koKXtXNShLRCx0aGlzKS5kaXNjb25uZWN0KCksRWllKEtELHRoaXMs''@;'; put 'put ''bnVsbCksRWllKEZTLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBqYnQobix0LGUpe2lmKGU9PT10aGlzLnBsdWdpbk5hbWUpcmV0dXJuO2NvbnN0IHI9dGhpcy5nZXRDb2x1bW5XaWR0aCh0KTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHI/cjpufWZ1bmN0aW9uIHpidChu''@;'; put 'put ''KXtuJiZXNShGUyx0aGlzKS5yZWZyZXNoU3RyZXRjaGluZygpfWZ1bmN0aW9uIGtqKG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBaYnQobil7dmFyIHQ9ZnVuY3Rpb24gWWJ0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1mdW5j''@;'; put 'put ''dGlvbiBBaWUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBEaj1uZXcg''@;'; put 'put ''V2Vha1NldDtjbGFzcyBLYnQgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gVWJ0KG4sdCl7KGZ1bmN0aW9uIFdidChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZh''@;'; put 'put ''dGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSh0aGlzLERqKSxraih0aGlzLCJzY3JvbGxiYXJzIixbXSksa2oodGhpcywiY2xvbmVzIixbXSksa2oodGhpcywibG9ja2VkQ29sbGVjdGlvbiIsITEpLGtqKHRoaXMsImZyZWV6ZU92ZXJsYXlzIiwhMSl9''@;'; put 'put ''c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm4gUXEoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVu''@;'; put 'put ''YWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9PkFpZShEaix0aGlzLFhidCkuY2FsbCh0aGlzKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsc3VwZXIudXBk''@;'; put 'put ''YXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3JlVG91Y2hTY3JvbGwiLCgpPT5BaWUoRGosdGhpcyxxYnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJNb21lbnR1bVNjcm9s''@;'; put 'put ''bCIsKCk9PkFpZShEaix0aGlzLEpidCkuY2FsbCh0aGlzKSl9fWZ1bmN0aW9uIFhidCgpe2lmKHRoaXMubG9ja2VkQ29sbGVjdGlvbilyZXR1cm47Y29uc3R7dG9wT3ZlcmxheTpuLGJvdHRvbU92ZXJsYXk6dCxpbmxpbmVTdGFydE92ZXJsYXk6ZSx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJs''@;'; put 'put ''YXk6cixib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aX09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5czt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITAsdGhpcy5zY3JvbGxiYXJzLmxlbmd0aD0wLHRoaXMuc2Nyb2xsYmFycy5wdXNoKG4pLHQuY2xvbmUmJnRoaXMuc2Nyb2xsYmFy''@;'; put 'put ''cy5wdXNoKHQpLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGUpLHImJnRoaXMuc2Nyb2xsYmFycy5wdXNoKHIpLGkmJmkuY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGkpLHRoaXMuY2xvbmVzPVtdLG4ubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2gobi5jbG9uZS53dFRhYmxlLmhv''@;'; put 'put ''bGRlci5wYXJlbnROb2RlKSx0Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKHQuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksZS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChlLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLHImJnRoaXMu''@;'; put 'put ''Y2xvbmVzLnB1c2goci5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxpJiZpLmNsb25lJiZ0aGlzLmNsb25lcy5wdXNoKGkuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSl9ZnVuY3Rpb24gcWJ0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMCxZbih0aGlzLmNsb25lcyxu''@;'; put 'put ''PT57dGkobiwiaGlkZS10d2VlbiIpfSl9ZnVuY3Rpb24gSmJ0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMSxZbih0aGlzLmNsb25lcyxuPT57SGEobiwiaGlkZS10d2VlbiIpLHRpKG4sInNob3ctdHdlZW4iKX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntZbih0aGlzLmNsb25l''@;'; put 'put ''cyxuPT57SGEobiwic2hvdy10d2VlbiIpfSl9LDQwMCksWW4odGhpcy5zY3JvbGxiYXJzLG49PntuLnJlZnJlc2goKSxuLnJlc2V0Rml4ZWRQb3NpdGlvbigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpfWNvbnN0IElqPSJ0cmltUm93cyI7''@;'; put 'put ''dmFyICR5ZT1uZXcgV2Vha1NldDtjbGFzcyBvd3QgZXh0ZW5kcyBNc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUWJ0KG4sdCl7KGZ1bmN0aW9uIGV3dChuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo''@;'; put 'put ''ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShuLHQpLHQuYWRkKG4pfSh0aGlzLCR5ZSksZnVuY3Rpb24gdHd0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBud3Qobil7dmFyIHQ9ZnVuY3Rpb24gcnd0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwh''@;'; put 'put ''bilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy''@;'; put 'put ''aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1''@;'; put 'put ''cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywidHJpbW1lZFJvd3NNYXAiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBJan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMzB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpW0lqXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IGJrKSx0aGlzLnRyaW1tZWRSb3dzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9''@;'; put 'put ''PmZ1bmN0aW9uIGl3dChuLHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4/bj09PXQ6bi5oYXModCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz90OmU7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KCR5ZSx0''@;'; put 'put ''aGlzLHN3dCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IHQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtJal07QXJyYXkuaXNBcnJheSh0KSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLmNsZWFy''@;'; put 'put ''KCksWW4odCxlPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoZSwhMCl9KX0sITApLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIpLHN1cGVyLmRpc2FibGVQbHVn''@;'; put 'put ''aW4oKX1nZXRUcmltbWVkUm93cygpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFRyaW1tZWRJbmRleGVzKCl9dHJpbVJvd3ModCl7Y29uc3QgZT10aGlzLmdldFRyaW1tZWRSb3dzKCkscj10aGlzLmlzVmFsaWRDb25maWcodCk7bGV0IGk9ZTtyJiYoaT1BcnJheS5mcm9tKG5ldyBT''@;'; put 'put ''ZXQoZS5jb25jYXQodCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVHJpbVJvdyIsZSxpLHIpJiYociYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbih0LGM9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChjLCEwKX0pfSwhMCksdGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyVHJpbVJvdyIsZSxpLHIsciYmaS5sZW5ndGg+ZS5sZW5ndGgpKX10cmltUm93KCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07dGhpcy50cmltUm93cyhlKX11bnRyaW1Sb3dzKHQp''@;'; put 'put ''e2NvbnN0IGU9dGhpcy5nZXRUcmltbWVkUm93cygpLHI9dGhpcy5pc1ZhbGlkQ29uZmlnKHQpO2xldCBpPWU7Y29uc3QgYT10aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlcygpLnNsaWNlKCksYz10Lmxlbmd0aD4wO3ImJmMmJihZbih0LEM9PnthW0NdPSExfSksaT1kMChhLChDLFAsWSk9''@;'; put 'put ''PihQJiZDLnB1c2goWSksQyksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbnRyaW1Sb3ciLGUsaSxyJiZjKSYmKHImJmMmJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVzKGEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsZSxpLHImJmMsciYmaS5s''@;'; put 'put ''ZW5ndGg8ZS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPWFyZ3VtZW50c1tyXTt0aGlzLnVudHJpbVJvd3MoZSl9aXNUcmltbWVkKHQpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZh''@;'; put 'put ''bHVlQXRJbmRleCh0KXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyh0KXtjb25zdCBlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO3JldHVybiB0LmV2ZXJ5KHI9Pk51bWJlci5pc0ludGVnZXIocikmJnI+PTAm''@;'; put 'put ''JnI8ZSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gc3d0KCl7Y29uc3Qgbj10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0lqXTtBcnJheS5pc0FycmF5KG4pJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKG4sdD0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFs''@;'; put 'put ''dWVBdEluZGV4KHQsITApfSl9LCEwKX1jbGFzcyBzM3tjb25zdHJ1Y3Rvcih0KXsoZnVuY3Rpb24gbHd0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBjd3Qobil7dmFyIHQ9ZnVuY3Rpb24gdXd0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJv''@;'; put 'put ''bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o''@;'; put 'put ''InN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpu''@;'; put 'put ''W3RdPWUsbn0pKHRoaXMsImFjdGlvblR5cGUiLCIiKSx0aGlzLmFjdGlvblR5cGU9dH11bmRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX1yZWRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19ZnVuY3Rpb24gUmoobix0LGUpe3JldHVybih0PWZ1''@;'; put 'put ''bmN0aW9uIGR3dChuKXt2YXIgdD1mdW5jdGlvbiBod3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''cilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQp''@;'; put 'put ''KWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIGtpZSBleHRlbmRzIHMze2NvbnN0cnVjdG9yKHQpe2xldHtzdGF0ZUJlZm9yZTplLHJhbmdlOnIsdHlwZTppLGFs''@;'; put 'put ''aWdubWVudDphfT10O3N1cGVyKCJjZWxsX2FsaWdubWVudCIpLFJqKHRoaXMsInN0YXRlQmVmb3JlIix2b2lkIDApLFJqKHRoaXMsInJhbmdlIix2b2lkIDApLFJqKHRoaXMsInR5cGUiLHZvaWQgMCksUmoodGhpcywiYWxpZ25tZW50Iix2b2lkIDApLHRoaXMuc3RhdGVCZWZvcmU9ZSx0aGlz''@;'; put 'put ''LnJhbmdlPXIsdGhpcy50eXBlPWksdGhpcy5hbGlnbm1lbnQ9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyh0LGUpe3QuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKHIsaSxhLGMpPT57ZS5kb25lKCgpPT5uZXcga2llKHtzdGF0ZUJlZm9yZTpyLHJhbmdlOmksdHlwZTph''@;'; put 'put ''LGFsaWdubWVudDpjfSkpfSl9dW5kbyh0LGUpe1luKHRoaXMucmFuZ2Uscj0+e3IuZm9yQWxsKChpLGEpPT57aT49MCYmYT49MCYmdC5zZXRDZWxsTWV0YShpLGEsImNsYXNzTmFtZSIsdGhpcy5zdGF0ZUJlZm9yZVtpXVthXXx8IiBodExlZnQiKX0pfSksdC5hZGRIb29rT25jZSgiYWZ0ZXJW''@;'; put 'put ''aWV3UmVuZGVyIixlKSx0LnJlbmRlcigpfXJlZG8odCxlKXtfOCh0aGlzLnJhbmdlLHRoaXMudHlwZSx0aGlzLmFsaWdubWVudCwocixpKT0+dC5nZXRDZWxsTWV0YShyLGkpLChyLGksYSxjKT0+dC5zZXRDZWxsTWV0YShyLGksYSxjKSksdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVy''@;'; put 'put ''IixlKSx0LnJlbmRlcigpfX1mdW5jdGlvbiBLeWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIGZ3dChuKXt2YXIgdD1mdW5jdGlvbiBwd3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2''@;'; put 'put ''YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9''@;'; put 'put ''KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIERpZSBleHRlbmRzIHMze2Nv''@;'; put 'put ''bnN0cnVjdG9yKHQpe2xldHtjb2x1bW5zOmUsZmluYWxJbmRleDpyfT10O3N1cGVyKCJjb2xfbW92ZSIpLEt5ZSh0aGlzLCJjb2x1bW5zIix2b2lkIDApLEt5ZSh0aGlzLCJmaW5hbENvbHVtbkluZGV4Iix2b2lkIDApLHRoaXMuY29sdW1ucz1lLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbklu''@;'; put 'put ''ZGV4PXJ9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHModCxlKXt0LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChyLGkpPT57ITEhPT1yJiZlLmRvbmUoKCk9Pm5ldyBEaWUoe2NvbHVtbnM6cixmaW5hbEluZGV4Oml9KSl9KX11bmRvKHQsZSl7Y29uc3Qgcj10LmdldFBsdWdpbigi''@;'; put 'put ''bWFudWFsQ29sdW1uTW92ZSIpO3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsZSksQXJlKHRoaXMuY29sdW1ucyx0aGlzLmZpbmFsQ29sdW1uSW5kZXgsdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSkucmV2ZXJzZSgpLmZvckVhY2goYT0+e2xldHtmcm9t''@;'; put 'put ''OmMsdG86bX09YTtjPG0mJihtLT0xKSxyLm1vdmVDb2x1bW4obSxjKX0pLHQucmVuZGVyKCksdC5kZXNlbGVjdENlbGwoKSx0LnNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zWzBdLHRoaXMuY29sdW1uc1swXSt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfXJlZG8odCxlKXtjb25zdCByPXQuZ2V0''@;'; put 'put ''UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7dC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixlKSxyLm1vdmVDb2x1bW5zKHRoaXMuY29sdW1ucy5zbGljZSgpLHRoaXMuZmluYWxDb2x1bW5JbmRleCksdC5yZW5kZXIoKSx0LmRlc2VsZWN0Q2VsbCgpLHQuc2VsZWN0Q29sdW1ucyh0''@;'; put 'put ''aGlzLmZpbmFsQ29sdW1uSW5kZXgsdGhpcy5maW5hbENvbHVtbkluZGV4K3RoaXMuY29sdW1ucy5sZW5ndGgtMSl9fWZ1bmN0aW9uIFh5ZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gZ3d0KG4pe3ZhciB0PWZ1bmN0aW9uIG13dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0''@;'; put 'put ''dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgSWllIGV4dGVuZHMgczN7Y29uc3RydWN0b3IodCl7bGV0e2N1cnJlbnRTb3J0U3RhdGU6ZSxuZXdTb3J0U3RhdGU6cn09dDtzdXBlcigiY29sX3NvcnQiKSxYeWUodGhpcywicHJldmlvdXNTb3J0U3RhdGUiLHZvaWQgMCksWHllKHRo''@;'; put 'put ''aXMsIm5leHRTb3J0U3RhdGUiLHZvaWQgMCksdGhpcy5wcmV2aW91c1NvcnRTdGF0ZT1lLHRoaXMubmV4dFNvcnRTdGF0ZT1yfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKHQsZSl7dC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Tb3J0IiwocixpLGEpPT57YSYmZS5kb25lKCgpPT5uZXcg''@;'; put 'put ''SWllKHtjdXJyZW50U29ydFN0YXRlOnIsbmV3U29ydFN0YXRlOml9KSl9KX11bmRvKHQsZSl7Y29uc3Qgcj10LmdldFBsdWdpbigiY29sdW1uU29ydGluZyIpLGk9dC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGE9aS5pc0VuYWJsZWQoKT9pOnI7dGhpcy5wcmV2aW91c1NvcnRT''@;'; put 'put ''dGF0ZS5sZW5ndGg/YS5zb3J0KHRoaXMucHJldmlvdXNTb3J0U3RhdGUpOmEuY2xlYXJTb3J0KCksZSgpfXJlZG8odCxlKXtjb25zdCByPXQuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaT10LmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIik7KGkuaXNFbmFibGVkKCk/aTpyKS5z''@;'; put 'put ''b3J0KHRoaXMubmV4dFNvcnRTdGF0ZSksZSgpfX1mdW5jdGlvbiBxeWUobix0LGUpe3JldHVybih0PWZ1bmN0aW9uIHZ3dChuKXt2YXIgdD1mdW5jdGlvbiB5d3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQrIiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIFJpZSBl''@;'; put 'put ''eHRlbmRzIHMze2NvbnN0cnVjdG9yKHQpe2xldHtpbmRleDplLGFtb3VudDpyfT10O3N1cGVyKCJpbnNlcnRfY29sIikscXllKHRoaXMsImluZGV4Iix2b2lkIDApLHF5ZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1lLHRoaXMuYW1vdW50PXJ9c3RhdGljIHN0YXJ0UmVnaXN0''@;'; put 'put ''ZXJpbmdFdmVudHModCxlKXt0LmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwocixpLGEpPT57ZS5kb25lKCgpPT5uZXcgUmllKHtpbmRleDpyLGFtb3VudDppfSksYSl9KX11bmRvKHQsZSl7dC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGUpLHQuYWx0ZXIoInJlbW92ZV9jb2wiLHRo''@;'; put 'put ''aXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKHQsZSl7dC5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLGUpLHQuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gSnllKG4s''@;'; put 'put ''dCxlKXtyZXR1cm4odD1mdW5jdGlvbiBfd3Qobil7dmFyIHQ9ZnVuY3Rpb24gYnd0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn1jbGFzcyBMaWUgZXh0ZW5kcyBzM3tjb25zdHJ1Y3Rvcih0KXtsZXR7aW5kZXg6ZSxhbW91bnQ6''@;'; put 'put ''cn09dDtzdXBlcigiaW5zZXJ0X3JvdyIpLEp5ZSh0aGlzLCJpbmRleCIsdm9pZCAwKSxKeWUodGhpcywiYW1vdW50Iix2b2lkIDApLHRoaXMuaW5kZXg9ZSx0aGlzLmFtb3VudD1yfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKHQsZSl7dC5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIs''@;'; put 'put ''KHIsaSxhKT0+e2UuZG9uZSgoKT0+bmV3IExpZSh7aW5kZXg6cixhbW91bnQ6aX0pLGEpfSl9dW5kbyh0LGUpe2NvbnN0IHI9dC5jb3VudFJvd3MoKSxpPXQuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3M7dGhpcy5pbmRleD49ciYmdGhpcy5pbmRleC1pPHImJih0aGlzLmluZGV4LT1pKSx0''@;'; put 'put ''LmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsZSksdC5hbHRlcigicmVtb3ZlX3JvdyIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8odCxlKXt0LmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZVJvdyIsZSksdC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIs''@;'; put 'put ''dGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBMaihuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gd3d0KG4pe3ZhciB0PWZ1bmN0aW9uIEN3dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59''@;'; put 'put ''Y2xhc3MgT2llIGV4dGVuZHMgczN7Y29uc3RydWN0b3IodCl7bGV0e2NoYW5nZXM6ZSxzZWxlY3RlZDpyLGNvdW50Q29sczppLGNvdW50Um93czphfT10O3N1cGVyKCJjaGFuZ2UiKSxMaih0aGlzLCJjaGFuZ2VzIix2b2lkIDApLExqKHRoaXMsInNlbGVjdGVkIix2b2lkIDApLExqKHRoaXMs''@;'; put 'put ''ImNvdW50Q29scyIsdm9pZCAwKSxMaih0aGlzLCJjb3VudFJvd3MiLHZvaWQgMCksdGhpcy5jaGFuZ2VzPWUsdGhpcy5zZWxlY3RlZD1yLHRoaXMuY291bnRDb2xzPWksdGhpcy5jb3VudFJvd3M9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyh0LGUpe3QuYWRkSG9vaygiYmVmb3Jl''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihyLGkpe2NvbnN0IGE9ciYmci5sZW5ndGg7YSYmci5maW5kKEM9Pntjb25zdFssLFAsWV09QztyZXR1cm4gUCE9PVl9KSYmZS5kb25lKCgpPT57Y29uc3QgQz1yLnJlZHVjZSgoWSxKKT0+KFkucHVzaChbLi4uSl0pLFkpLFtdKTtDLmZvckVhY2goWT0+e1lbMV09''@;'; put 'put ''dC5wcm9wVG9Db2woWVsxXSl9KTtjb25zdCBQPWE+MT90aGlzLmdldFNlbGVjdGVkKCk6W1tDWzBdWzBdLENbMF1bMV1dXTtyZXR1cm4gbmV3IE9pZSh7Y2hhbmdlczpDLHNlbGVjdGVkOlAsY291bnRDb2xzOnQuY291bnRDb2xzKCksY291bnRSb3dzOnQuY291bnRSb3dzKCl9KX0saSl9KX11''@;'; put 'put ''bmRvKHQsZSl7Y29uc3Qgcj10ZCh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgaT0wLGE9ci5sZW5ndGg7aTxhO2krKylyW2ldLnNwbGljZSgzLDEpO3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IGk9dC5jb3VudFJvd3MoKS10aGlzLmNvdW50Um93cztpPjAmJnQuYWx0ZXIo''@;'; put 'put ''InJlbW92ZV9yb3ciLG51bGwsaSwiVW5kb1JlZG8udW5kbyIpO2NvbnN0IGE9dC5jb3VudENvbHMoKS10aGlzLmNvdW50Q29sczthPjAmJnQuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkmJnQuYWx0ZXIoInJlbW92ZV9jb2wiLG51bGwsYSwiVW5kb1JlZG8udW5kbyIpLHQuc2Nyb2xs''@;'; put 'put ''VG9Gb2N1c2VkQ2VsbCgpLHQuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSksZSgpfSksdC5zZXREYXRhQXRDZWxsKHIsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyh0LGUpe2NvbnN0IHI9dGQodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGk9MCxhPXIubGVuZ3RoO2k8YTtp''@;'; put 'put ''KyspcltpXS5zcGxpY2UoMiwxKTt0LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pnt0LnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpLGUoKX0pLHQuc2V0RGF0YUF0Q2VsbChyLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBReWUobix0LGUpe3JldHVy''@;'; put 'put ''bih0PWZ1bmN0aW9uIFN3dChuKXt2YXIgdD1mdW5jdGlvbiBNd3Qobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIG58fCFuKXJldHVybiBuO3ZhciBlPW5bU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lKXt2YXIgcj1lLmNhbGwobix0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikobil9KG4sInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OnQr''@;'; put 'put ''IiJ9KHQpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bdF09ZSxufWNsYXNzIFBpZSBleHRlbmRzIHMze2NvbnN0cnVjdG9yKHQpe2xldHtjb25kaXRpb25zU3RhY2s6ZSxwcmV2aW91''@;'; put 'put ''c0NvbmRpdGlvbnNTdGFjazpyfT10O3N1cGVyKCJmaWx0ZXIiKSxReWUodGhpcywiY29uZGl0aW9uc1N0YWNrIix2b2lkIDApLFF5ZSh0aGlzLCJwcmV2aW91c0NvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbnNTdGFjaz1lLHRoaXMucHJldmlvdXNDb25kaXRpb25zU3Rh''@;'; put 'put ''Y2s9cn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyh0LGUpe3QuYWRkSG9vaygiYmVmb3JlRmlsdGVyIiwocixpKT0+e2UuZG9uZSgoKT0+bmV3IFBpZSh7Y29uZGl0aW9uc1N0YWNrOnIscHJldmlvdXNDb25kaXRpb25zU3RhY2s6aX0pKX0pfXVuZG8odCxlKXtjb25zdCByPXQuZ2V0''@;'; put 'put ''UGx1Z2luKCJmaWx0ZXJzIik7dC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixlKSxyLmltcG9ydENvbmRpdGlvbnModGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjayksci5maWx0ZXIoKX1yZWRvKHQsZSl7Y29uc3Qgcj10LmdldFBsdWdpbigiZmlsdGVycyIpO3QuYWRkSG9va09u''@;'; put 'put ''Y2UoImFmdGVyVmlld1JlbmRlciIsZSksci5pbXBvcnRDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrKSxyLmZpbHRlcigpfX1jbGFzcyBGaWUgZXh0ZW5kcyBzM3tjb25zdHJ1Y3Rvcih0KXtsZXR7ZGF0YTplLGNlbGxSYW5nZTpyfT10O3N1cGVyKCJtZXJnZV9jZWxscyIpLGZ1bmN0''@;'; put 'put ''aW9uIHh3dChuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRXd0KG4pe3ZhciB0PWZ1bmN0aW9uIFR3dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59KHRoaXMsImNlbGxSYW5nZSIsdm9pZCAwKSx0aGlzLmNlbGxSYW5nZT1yLHRo''@;'; put 'put ''aXMuZGF0YT1lfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKHQsZSl7dC5hZGRIb29rKCJiZWZvcmVNZXJnZUNlbGxzIiwocixpKT0+e2lmKGkpcmV0dXJuO2NvbnN0IGE9ci5nZXRUb3BTdGFydENvcm5lcigpLGM9ci5nZXRCb3R0b21FbmRDb3JuZXIoKSxtPXQuZ2V0RGF0YShhLnJv''@;'; put 'put ''dyxhLmNvbCxjLnJvdyxjLmNvbCk7ZS5kb25lKCgpPT5uZXcgRmllKHtkYXRhOm0sY2VsbFJhbmdlOnJ9KSl9KX11bmRvKHQsZSl7Y29uc3Qgcj10LmdldFBsdWdpbigibWVyZ2VDZWxscyIpO3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsZSksci51bm1lcmdlUmFuZ2UodGhpcy5j''@;'; put 'put ''ZWxsUmFuZ2UsITApO2NvbnN0IGk9dGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTt0LnBvcHVsYXRlRnJvbUFycmF5KGkucm93LGkuY29sLHRoaXMuZGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9cmVkbyh0LGUpe2NvbnN0IHI9dC5nZXRQbHVnaW4oIm1lcmdlQ2Vs''@;'; put 'put ''bHMiKTt0LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGUpLHIubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSl9fWZ1bmN0aW9uIGVfZShuLHQsZSxyLGkpe2NvbnN0IGE9WyJ2aXN1YWxSb3ciLCJ2aXN1YWxDb2wiLCJyb3ciLCJjb2wiLCJwcm9wIl0sYz1hLmxlbmd0aCxtPVtdO3Jl''@;'; put 'put ''dHVybiBlbyhyLGksQz0+e2VvKHQsZSxQPT57Y29uc3QgWT1uLmdldENlbGxNZXRhKFAsQyk7aWYoT2JqZWN0LmtleXMoWSkubGVuZ3RoIT09Yyl7Y29uc3QgSj1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoWSkuZmlsdGVyKGNlPT57bGV0W2ZlXT1jZTtyZXR1cm4hMT09PWEu''@;'; put 'put ''aW5jbHVkZXMoZmUpfSkpO20ucHVzaChbWS52aXN1YWxSb3csWS52aXN1YWxDb2wsSl0pfX0pfSksbX1mdW5jdGlvbiBaNShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gQXd0KG4pe3ZhciB0PWZ1bmN0aW9uIGt3dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFy''@;'; put 'put ''IGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgSGllIGV4dGVuZHMgczN7Y29uc3RydWN0b3IodCl7bGV0e2luZGV4OmUsaW5kZXhlczpyLGRhdGE6aSxhbW91bnQ6YSxoZWFkZXJzOmMsY29sdW1uUG9zaXRpb25zOm0scm93UG9zaXRpb25zOkMsZml4ZWRDb2x1bW5zU3RhcnQ6UCxyZW1vdmVkQ2Vs''@;'; put 'put ''bE1ldGFzOll9PXQ7c3VwZXIoInJlbW92ZV9jb2wiKSxaNSh0aGlzLCJpbmRleCIsdm9pZCAwKSxaNSh0aGlzLCJpbmRleGVzIix2b2lkIDApLFo1KHRoaXMsImRhdGEiLHZvaWQgMCksWjUodGhpcywiYW1vdW50Iix2b2lkIDApLFo1KHRoaXMsImhlYWRlcnMiLHZvaWQgMCksWjUodGhpcywi''@;'; put 'put ''Y29sdW1uUG9zaXRpb25zIix2b2lkIDApLFo1KHRoaXMsInJvd1Bvc2l0aW9ucyIsdm9pZCAwKSxaNSh0aGlzLCJmaXhlZENvbHVtbnNTdGFydCIsdm9pZCAwKSxaNSh0aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5kZXg9ZSx0aGlzLmluZGV4ZXM9cix0aGlzLmRhdGE9''@;'; put 'put ''aSx0aGlzLmFtb3VudD1hLHRoaXMuaGVhZGVycz1jLHRoaXMuY29sdW1uUG9zaXRpb25zPW0uc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9Qy5zbGljZSgwKSx0aGlzLmZpeGVkQ29sdW1uc1N0YXJ0PVAsdGhpcy5yZW1vdmVkQ2VsbE1ldGFzPVl9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdF''@;'; put 'put ''dmVudHModCxlKXt0LmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsKHIsaSxhLGMpPT57ZS5kb25lKCgpPT57Y29uc3QgQz10LmdldFNvdXJjZURhdGFBcnJheSgpLFA9KHQuY291bnRDb2xzKCkrcikldC5jb3VudENvbHMoKSxZPVAraS0xLEo9W10sY2U9W10sZmU9W107cmV0dXJuIGVvKEMu''@;'; put 'put ''bGVuZ3RoLTEsQWU9Pntjb25zdCBIZT1bXSxYZT1DW0FlXTtlbyhQLFkscnQ9PntIZS5wdXNoKFhlW3QudG9QaHlzaWNhbENvbHVtbihydCldKX0pLEoucHVzaChIZSl9KSxlbyhpLTEsQWU9PntmZS5wdXNoKHQudG9QaHlzaWNhbENvbHVtbihQK0FlKSl9KSxBcnJheS5pc0FycmF5KHQuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKS5jb2xIZWFkZXJzKSYmZW8oaS0xLEFlPT57Y2UucHVzaCh0LmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1t0LnRvUGh5c2ljYWxDb2x1bW4oUCtBZSldfHxudWxsKX0pLG5ldyBIaWUoe2luZGV4OlAsaW5kZXhlczpmZSxkYXRhOkosYW1vdW50OmksaGVhZGVyczpjZSxjb2x1''@;'; put 'put ''bW5Qb3NpdGlvbnM6dC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyb3dQb3NpdGlvbnM6dC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxmaXhlZENvbHVtbnNTdGFydDp0LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQscmVtb3ZlZENl''@;'; put 'put ''bGxNZXRhczplX2UodCwwLHQuY291bnRSb3dzKCksUCxZKX0pfSxjKX0pfXVuZG8odCxlKXt0LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBpPXRoaXMuaW5kZXhlcy5zbGljZSgwKS5zb3J0KCksYT0oWSxKLGNlKT0+Y2VbdGhp''@;'; put 'put ''cy5pbmRleGVzLmluZGV4T2YoaVtKXSldLGM9dGhpcy5kYXRhLmxlbmd0aCxtPVtdO2ZvcihsZXQgWT0wO1k8YztZKyspbS5wdXNoKFdzKHRoaXMuZGF0YVtZXSxhKSk7Y29uc3QgQz1Xcyh0aGlzLmhlYWRlcnMsYSksUD1bXTt0LmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZSh0aGlzLmNvbHVtblBvc2l0aW9ucyksdC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdC50b1Zpc3VhbENvbHVtbih0aGlzLmluZGV4ZXNbMF0pLHRoaXMuaW5kZXhlcy5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSx0LmJhdGNoRXhlY3V0aW9uKCgpPT57dC5yb3dJbmRleE1hcHBlci5zZXRJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UodGhpcy5yb3dQb3NpdGlvbnMpLHQuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9zaXRpb25zKX0sITApLFluKHQuZ2V0U291cmNlRGF0YUFycmF5KCksKFksSik9PntZbihpLChjZSxmZSk9PntZW2NlXT1tW0pdW2ZlXSxQ''@;'; put 'put ''LnB1c2goW0osY2UsWVtjZV1dKX0pfSksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJlluKEMsKFksSik9Pnt0LmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1tpW0pdXT1ZfSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVhY2goWT0+e2xldFtKLGNlLGZlXT1ZO3Quc2V0Q2VsbE1ldGFPYmpl''@;'; put 'put ''Y3QoSixjZSxmZSl9KSx0LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGUpLHQuc2V0U291cmNlRGF0YUF0Q2VsbChQLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8odCxlKXt0LmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsZSksdC5hbHRlcigicmVtb3ZlX2NvbCIs''@;'; put 'put ''dGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBIUyhuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gRHd0KG4pe3ZhciB0PWZ1bmN0aW9uIEl3dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59''@;'; put 'put ''Y2xhc3MgTmllIGV4dGVuZHMgczN7Y29uc3RydWN0b3IodCl7bGV0e2luZGV4OmUsZGF0YTpyLGZpeGVkUm93c0JvdHRvbTppLGZpeGVkUm93c1RvcDphLHJvd0luZGV4ZXNTZXF1ZW5jZTpjLHJlbW92ZWRDZWxsTWV0YXM6bX09dDtzdXBlcigicmVtb3ZlX3JvdyIpLEhTKHRoaXMsImluZGV4''@;'; put 'put ''Iix2b2lkIDApLEhTKHRoaXMsImRhdGEiLHZvaWQgMCksSFModGhpcywiZml4ZWRSb3dzQm90dG9tIix2b2lkIDApLEhTKHRoaXMsImZpeGVkUm93c1RvcCIsdm9pZCAwKSxIUyh0aGlzLCJyb3dJbmRleGVzU2VxdWVuY2UiLHZvaWQgMCksSFModGhpcywicmVtb3ZlZENlbGxNZXRhcyIsdm9p''@;'; put 'put ''ZCAwKSx0aGlzLmluZGV4PWUsdGhpcy5kYXRhPXIsdGhpcy5maXhlZFJvd3NCb3R0b209aSx0aGlzLmZpeGVkUm93c1RvcD1hLHRoaXMucm93SW5kZXhlc1NlcXVlbmNlPWMsdGhpcy5yZW1vdmVkQ2VsbE1ldGFzPW19c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHModCxlKXt0LmFkZEhv''@;'; put 'put ''b2soImJlZm9yZVJlbW92ZVJvdyIsKHIsaSxhLGMpPT57ZS5kb25lKCgpPT57Y29uc3QgQz10LnRvUGh5c2ljYWxSb3cociksUD1DK2ktMSxZPXRkKHQuZ2V0U291cmNlRGF0YShDLDAsQytpLTEsdC5jb3VudFNvdXJjZUNvbHMoKS0xKSk7cmV0dXJuIG5ldyBOaWUoe2luZGV4OkMsZGF0YTpZ''@;'; put 'put ''LGZpeGVkUm93c0JvdHRvbTp0LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGZpeGVkUm93c1RvcDp0LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLHJvd0luZGV4ZXNTZXF1ZW5jZTp0LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJlbW92ZWRDZWxsTWV0YXM6''@;'; put 'put ''ZV9lKHQsQyxQLDAsdC5jb3VudENvbHMoKS0xKX0pfSxjKX0pfXVuZG8odCxlKXtjb25zdCByPXQuZ2V0U2V0dGluZ3MoKSxpPVtdO3IuZml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLHIuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNo''@;'; put 'put ''KChhLGMpPT57T2JqZWN0LmtleXMoYSkuZm9yRWFjaChtPT57Y29uc3QgQz1wYXJzZUludChtLDEwKTtpLnB1c2goW3RoaXMuaW5kZXgrYyxpc05hTihDKT9tOkMsYVttXV0pfSl9KSx0LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSks''@;'; put 'put ''dC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLHRoaXMucmVtb3ZlZENlbGxN''@;'; put 'put ''ZXRhcy5mb3JFYWNoKGE9PntsZXRbYyxtLENdPWE7dC5zZXRDZWxsTWV0YU9iamVjdChjLG0sQyl9KSx0LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGUpLHQuc2V0U291cmNlRGF0YUF0Q2VsbChpLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8odCxlKXt0LmFkZEhvb2tP''@;'; put 'put ''bmNlKCJhZnRlclJlbW92ZVJvdyIsZSksdC5hbHRlcigicmVtb3ZlX3JvdyIsdC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHRfZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gUnd0KG4pe3ZhciB0PWZ1bmN0aW9u''@;'; put 'put ''IEx3dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUpe3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShuKX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''bix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59Y2xhc3MgVmllIGV4dGVuZHMgczN7Y29uc3RydWN0b3IodCl7bGV0e3Jvd3M6ZSxmaW5hbEluZGV4OnJ9PXQ7c3VwZXIoInJvd19tb3ZlIiksdF9lKHRoaXMsInJvd3MiLHZv''@;'; put 'put ''aWQgMCksdF9lKHRoaXMsImZpbmFsUm93SW5kZXgiLHZvaWQgMCksdGhpcy5yb3dzPWUuc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXg9cn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyh0LGUpe3QuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKHIsaSk9PnshMSE9PXImJmUuZG9uZSgo''@;'; put 'put ''KT0+bmV3IFZpZSh7cm93czpyLGZpbmFsSW5kZXg6aX0pKX0pfXVuZG8odCxlKXtjb25zdCByPXQuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7dC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixlKSxBcmUodGhpcy5yb3dzLHRoaXMuZmluYWxSb3dJbmRleCx0LnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChhPT57bGV0e2Zyb206Yyx0bzptfT1hO2M8bSYmKG0tPTEpLHIubW92ZVJvdyhtLGMpfSksdC5yZW5kZXIoKSx0LmRlc2VsZWN0Q2VsbCgpLHQuc2VsZWN0Um93cyh0aGlzLnJvd3NbMF0sdGhpcy5yb3dzWzBdK3Ro''@;'; put 'put ''aXMucm93cy5sZW5ndGgtMSl9cmVkbyh0LGUpe2NvbnN0IHI9dC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKTt0LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGUpLHIubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4KSx0LnJlbmRlcigpLHQuZGVz''@;'; put 'put ''ZWxlY3RDZWxsKCksdC5zZWxlY3RSb3dzKHRoaXMuZmluYWxSb3dJbmRleCx0aGlzLmZpbmFsUm93SW5kZXgrdGhpcy5yb3dzLmxlbmd0aC0xKX19Y2xhc3MgQmllIGV4dGVuZHMgczN7Y29uc3RydWN0b3IodCl7bGV0e2NlbGxSYW5nZTplfT10O3N1cGVyKCJ1bm1lcmdlX2NlbGxzIiksZnVu''@;'; put 'put ''Y3Rpb24gT3d0KG4sdCxlKXtyZXR1cm4odD1mdW5jdGlvbiBQd3Qobil7dmFyIHQ9ZnVuY3Rpb24gRnd0KG4sdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBufHwhbilyZXR1cm4gbjt2YXIgZT1uW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZSl7dmFyIHI9ZS5jYWxsKG4sdHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKG4pfShuLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIHQ/dDp0KyIifSh0KSlpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWUsbn0odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWV9''@;'; put 'put ''c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHModCxlKXt0LmFkZEhvb2soImFmdGVyVW5tZXJnZUNlbGxzIiwocixpKT0+e2l8fGUuZG9uZSgoKT0+bmV3IEJpZSh7Y2VsbFJhbmdlOnJ9KSl9KX11bmRvKHQsZSl7Y29uc3Qgcj10LmdldFBsdWdpbigibWVyZ2VDZWxscyIpO3QuYWRkSG9v''@;'; put 'put ''a09uY2UoImFmdGVyVmlld1JlbmRlciIsZSksci5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX1yZWRvKHQsZSl7Y29uc3Qgcj10LmdldFBsdWdpbigibWVyZ2VDZWxscyIpO3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsZSksci51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFu''@;'; put 'put ''Z2UsITApLHQucmVuZGVyKCl9fWZ1bmN0aW9uIGppZShuLHQsZSl7cmV0dXJuKHQ9ZnVuY3Rpb24gQnd0KG4pe3ZhciB0PWZ1bmN0aW9uIGp3dChuLHQpe2lmKCJvYmplY3QiIT10eXBlb2Ygbnx8IW4pcmV0dXJuIG47dmFyIGU9bltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWUp''@;'; put 'put ''e3ZhciByPWUuY2FsbChuLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShu''@;'; put 'put ''KX0obiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dCsiIn0odCkpaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6blt0XT1lLG59ZnVuY3Rpb24gemllKG4sdCxlKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5nZXRTaW5nbGV0b24oKS5yZWdpc3Rlcigi''@;'; put 'put ''YmVmb3JlVW5kbyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuZG8iKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJlZG8iKTtjb25zdCByX2U9bmV3IFNldDt2YXIgT2o9bmV3IFdl''@;'; put 'put ''YWtTZXQ7Y2xhc3MgV3d0IGV4dGVuZHMgTXN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInVuZG9SZWRvIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxZTN9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1jb25zdHJ1Y3Rvcih0KXtzdXBlcih0''@;'; put 'put ''KSxmdW5jdGlvbiBOd3Qobix0KXsoZnVuY3Rpb24gVnd0KG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKG4sdCksdC5hZGQobil9KHRoaXMsT2opLGpp''@;'; put 'put ''ZSh0aGlzLCJkb25lQWN0aW9ucyIsW10pLGppZSh0aGlzLCJ1bmRvbmVBY3Rpb25zIixbXSksamllKHRoaXMsImlnbm9yZU5ld0FjdGlvbnMiLCExKSxmdW5jdGlvbiBId3Qobix0KXtba2llLERpZSxJaWUsUmllLExpZSxPaWUsUGllLEZpZSxIaWUsTmllLFZpZSxCaWVdLmZvckVhY2goZT0+''@;'; put 'put ''ZS5zdGFydFJlZ2lzdGVyaW5nRXZlbnRzKG4sdCkpfSh0LHRoaXMpfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS51bmRvfWVuYWJsZVBsdWdpbigpe3ZhciB0PXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gemllKE9qLHQsWnd0KS5jYWxsKHQsLi4ucil9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksemllKE9qLHRoaXMsWXd0KS5jYWxsKHRoaXMpLHN1''@;'; put 'put ''cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuY2xlYXIoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx6aWUoT2osdGhpcyxHd3QpLmNhbGwodGhpcyl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1''@;'; put 'put ''dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy51bmRvKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJ5Il0sWyJDb250cm9sL01ldGEiLCJTaGlmdCIsInoiXV0sY2FsbGJh''@;'; put 'put ''Y2s6KCk9Pnt0aGlzLnJlZG8oKX19XSx7cnVuT25seUlmOmE9PiFhLmFsdEtleSxncm91cDoidW5kb1JlZG8ifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRv''@;'; put 'put ''UmVkbyIpfWRvbmUodCxlKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJVbmRvUmVkby51bmRvIj09PWV8fCJVbmRvUmVkby5yZWRvIj09PWV8fCJhdXRvIj09PWUpcmV0dXJuO2NvbnN0IGk9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZVVuZG9TdGFja0NoYW5nZSIsaSxlKSlyZXR1cm47Y29uc3QgYz10KCksbT10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2goYyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixpLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2Uo''@;'; put 'put ''KSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsbSksdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsbSx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9dW5kbygpe2lmKCF0aGlzLmlz''@;'; put 'put ''VW5kb0F2YWlsYWJsZSgpKXJldHVybjtjb25zdCB0PXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIix0KTtjb25zdCBlPXRoaXMuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNr''@;'; put 'put ''Q2hhbmdlIix0LHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSk7Y29uc3Qgcj10ZChlKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixyKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGE9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsYSksZS51bmRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMudW5kb25lQWN0aW9ucy5wdXNoKGUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixhLHRoaXMudW5k''@;'; put 'put ''b25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvIixyKX1yZWRvKCl7aWYoIXRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IHQ9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0No''@;'; put 'put ''YW5nZSIsdCk7Y29uc3QgZT10aGlzLnVuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIix0LHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCByPXRkKGUpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG8i''@;'; put 'put ''LHIpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgYT10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsYSksZS5yZWRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMu''@;'; put 'put ''ZG9uZUFjdGlvbnMucHVzaChlKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsYSx0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG8iLHIpfWlzVW5kb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLmRvbmVBY3Rpb25z''@;'; put 'put ''Lmxlbmd0aD4wfWlzUmVkb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPjB9Y2xlYXIoKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH1kZXN0cm95KCl7dGhpcy5jbGVhcigpLHRoaXMuZG9uZUFjdGlvbnM9''@;'; put 'put ''bnVsbCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbCxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFp3dChuLHQpeyJsb2FkRGF0YSI9PT10JiZ0aGlzLmNsZWFyKCl9ZnVuY3Rpb24gWXd0KCl7Y29uc3Qgbj10PT57cl9lLmhhcyh0KXx8KG9zKGVsYFRoZSAiJHt0fSIgbWV0aG9kIGlzIGRlcHJl''@;'; put 'put ''Y2F0ZWQgYW5kIGl0IHdpbGwgYmUgcmVtb3ZlZFx4MjAKICAgICAgICAgIGZyb20gdGhlIENvcmUgQVBJIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCBmcm9tIHRoZSBVbmRvUmVkbyBwbHVnaW5ceDIwCiAgICAgICAgICAoZS5nLiBcYGhvdEluc3RhbmNlLmdldFBsdWdp''@;'; put 'put ''bigidW5kb1JlZG8iKS4ke3R9KClcYCkuYCkscl9lLmFkZCh0KSl9O3RoaXMuaG90LnVuZG89KCk9PntuKCJ1bmRvIiksdGhpcy51bmRvKCl9LHRoaXMuaG90LnJlZG89KCk9PntuKCJyZWRvIiksdGhpcy5yZWRvKCl9LHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZT0oKT0+KG4oImlzVW5kb0F2''@;'; put 'put ''YWlsYWJsZSIpLHRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZT0oKT0+KG4oImlzUmVkb0F2YWlsYWJsZSIpLHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmNsZWFyVW5kbz0oKT0+e24oImNsZWFyIiksdGhpcy5jbGVhcigpfSx0aGlzLmhv''@;'; put 'put ''dC51bmRvUmVkbz10aGlzfWZ1bmN0aW9uIEd3dCgpe2RlbGV0ZSB0aGlzLmhvdC51bmRvLGRlbGV0ZSB0aGlzLmhvdC5yZWRvLGRlbGV0ZSB0aGlzLmhvdC5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuY2xlYXJVbmRvLGRl''@;'; put 'put ''bGV0ZSB0aGlzLmhvdC51bmRvUmVkb31jb25zdCBlMT0iaHQtZGlhbG9nIixYRD1uZXcgTWFwKFtbImJhc2UiLGZ1bmN0aW9uICR3dCgpe2xldCB0PW51bGw7Y29uc3QgZT17fTtyZXR1cm57VEVNUExBVEVfTkFNRToiYmFzZSIsZGlhbG9nQTExWU9wdGlvbnM6KCk9Pih7cm9sZToiZGlhbG9n''@;'; put 'put ''In0pLGNvbXBpbGU6ZnVuY3Rpb24gcigpe2NvbnN0IGE9ZENgJHtmdW5jdGlvbiBuKCl7cmV0dXJuYFxuICAgICAgPGRpdiBkYXRhLXJlZj0iY29udGVudEVsZW1lbnQiIGNsYXNzPSIke2UxfV9fY29udGVudCI+PC9kaXY+XG4gICAgYH0oKX1gO3JldHVybiBPYmplY3QuYXNzaWduKGUsYS5y''@;'; put 'put ''ZWZzKSx0PWEuZnJhZ21lbnQsYX0sZm9jdXNhYmxlRWxlbWVudHM6ZnVuY3Rpb24gaSgpe2lmKG51bGw9PT10KXRocm93IG5ldyBFcnJvcigiQ29tcGlsZSB0aGUgdGVtcGxhdGUgZmlyc3QuIik7cmV0dXJuW119fX1dLFsiY29uZmlybSIsZnVuY3Rpb24gS3d0KG4pe2xldHtpZDp0PSIiLHRp''@;'; put 'put ''dGxlOmU9IiIsZGVzY3JpcHRpb246cj0iIixidXR0b25zOmk9W119PW4sYz1udWxsO2NvbnN0IG09e307cmV0dXJue1RFTVBMQVRFX05BTUU6ImNvbmZpcm0iLGRpYWxvZ0ExMVlPcHRpb25zOigpPT4oe3JvbGU6ImFsZXJ0ZGlhbG9nIixhcmlhTGFiZWxsZWRieTpgJHt0fS1kaWFsb2ctY29u''@;'; put 'put ''ZmlybS10aXRsZWAsYXJpYURlc2NyaWJlZGJ5OnI/YCR7dH0tZGlhbG9nLWNvbmZpcm0tZGVzY3JpcHRpb25gOnZvaWQgMH0pLGNvbXBpbGU6ZnVuY3Rpb24gQygpe2NvbnN0IFk9ZENgJHtmdW5jdGlvbiBhKCl7cmV0dXJuYFxuICAgICAgPGRpdiB0YWJpbmRleD0iLTEiIGRhdGEtcmVmPSJj''@;'; put 'put ''b250ZW50RWxlbWVudCIgY2xhc3M9IiR7ZTF9X19jb250ZW50LXdyYXBwZXItaW5uZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSIke2UxfV9fY29udGVudCI+XG4gICAgICAgICAgPGgyXG4gICAgICAgICAgICBpZD0iJHt0fS1kaWFsb2ctY29uZmlybS10aXRsZSJcbiAgICAgICAgICAgIGNs''@;'; put 'put ''YXNzPSIke2UxfV9fdGl0bGUiPiR7YjQoZSl9PC9oMj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgaWQ9IiR7dH0tZGlhbG9nLWNvbmZpcm0tZGVzY3JpcHRpb24iXG4gICAgICAgICAgICBjbGFzcz0iJHtlMX1fX2Rlc2NyaXB0aW9uIj4ke2I0KHIpfTwvcD5cbiAgICAgICAgPC9kaXY+''@;'; put 'put ''XG4gICAgICAgICR7aS5sZW5ndGg+MD9gXG4gICAgICAgICAgPGRpdiBkYXRhLXJlZj0iYnV0dG9uc0NvbnRhaW5lciIgY2xhc3M9IiR7ZTF9X19idXR0b25zIj5cbiAgICAgICAgICAgICR7aS5tYXAoWT0+YFxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJodC1idXR0b24gaHQtYnV0''@;'; put 'put ''dG9uLS0ke1kudHlwZX0iPiR7YjQoWS50ZXh0KX08L2J1dHRvbj5cbiAgICAgICAgICAgIGApLmpvaW4oIiIpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICBgOiIifVxuICAgICAgPC9kaXY+XG4gICAgYH0oKX1gO3JldHVybiBPYmplY3QuYXNzaWduKG0sWS5yZWZzKSxjPVkuZnJhZ21l''@;'; put 'put ''bnQsWX0sZm9jdXNhYmxlRWxlbWVudHM6ZnVuY3Rpb24gUCgpe2lmKG51bGw9PT1jKXRocm93IG5ldyBFcnJvcigiQ29tcGlsZSB0aGUgdGVtcGxhdGUgZmlyc3QuIik7Y29uc3R7Y29udGVudEVsZW1lbnQ6WSxidXR0b25zQ29udGFpbmVyOkp9PW0sY2U9W107cmV0dXJuIEo/Y2UucHVzaCgu''@;'; put 'put ''Li5BcnJheS5mcm9tKEouY2hpbGRyZW4pKTpjZS5wdXNoKFkpLGNlfX19XV0pO2Z1bmN0aW9uIE5TKG4sdCxlKXtpX2Uobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIGlfZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSGMobix0KXtyZXR1cm4gbi5nZXQoUGoobix0KSl9ZnVuY3Rpb24gVHAobix0LGUpe3JldHVybiBuLnNldChQaihuLHQpLGUpLGV9ZnVuY3Rpb24gUGoobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249''@;'; put 'put ''PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHF3dD1gXG48ZGl2IGRhdGEtcmVmPSJkaWFsb2dFbGVtZW50IiBjbGFzcz0iJHtl''@;'; put 'put ''MX0iPlxuICA8ZGl2IGRhdGEtcmVmPSJkaWFsb2dXcmFwcGVyRWxlbWVudCIgY2xhc3M9IiR7ZTF9X19jb250ZW50LXdyYXBwZXIiPlxuPC9kaXY+XG5gO3ZhciBVaWU9bmV3IFdlYWtNYXAsdWQ9bmV3IFdlYWtNYXAsV2llPW5ldyBXZWFrTWFwLHFEPW5ldyBXZWFrTWFwLHJnPW5ldyBXZWFr''@;'; put 'put ''TWFwLEZqPW5ldyBXZWFrTWFwLFppZT1uZXcgV2Vha1NldDtjbGFzcyBhX2V7Y29uc3RydWN0b3IodCl7bGV0e3Jvb3RFbGVtZW50OmUsaXNSdGw6cn09dDsoZnVuY3Rpb24gWHd0KG4sdCl7aV9lKG4sdCksdC5hZGQobil9KSh0aGlzLFppZSksTlModGhpcyxVaWUsdm9pZCAwKSxOUyh0aGlz''@;'; put 'put ''LHVkLHZvaWQgMCksTlModGhpcyxXaWUsITEpLE5TKHRoaXMscUQsITEpLE5TKHRoaXMscmcsWEQuZ2V0KCJiYXNlIikpLE5TKHRoaXMsRmosW10pLFRwKFVpZSx0aGlzLGUpLFRwKFdpZSx0aGlzLHIpLHRoaXMuaW5zdGFsbCgpfXVzZVRlbXBsYXRlKHQpe3ZhciBlO2xldCByPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighWEQuaGFzKHQpfHwiYmFzZSI9PT10KXtjb25zdCBpPUFycmF5LmZyb20oWEQua2V5cygpKS5maWx0ZXIoYT0+ImJhc2UiIT09YSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoZWxgSW52YWxp''@;'; put 'put ''ZCB0ZW1wbGF0ZTogJHt0fS5ceDIwCiAgICAgICAgVmFsaWQgdGVtcGxhdGVzIGFyZTogJHtpfS5gKX1UcChyZyx0aGlzLFhELmdldCh0KShyKSksVHAoRmosdGhpcywobnVsbCE9PShlPXIuYnV0dG9ucykmJnZvaWQgMCE9PWU/ZTpbXSkubWFwKGk9PmkuY2FsbGJhY2spKX11c2VEZWZhdWx0''@;'; put 'put ''VGVtcGxhdGUoKXtUcChyZyx0aGlzLFhELmdldCgiYmFzZSIpKCkpLFRwKEZqLHRoaXMsW10pfWluc3RhbGwoKXt2YXIgdDtpZihudWxsIT09KHQ9SGModWQsdGhpcykpJiZ2b2lkIDAhPT10JiZ0LmRpYWxvZ0VsZW1lbnQpcmV0dXJuO2NvbnN0IGU9ZENgJHtxd3R9YDtUcCh1ZCx0aGlzLGUu''@;'; put 'put ''cmVmcyk7Y29uc3R7ZGlhbG9nRWxlbWVudDpyfT1IYyh1ZCx0aGlzKTtaYShyLFtbImFyaWEtbW9kYWwiLCJ0cnVlIl0sWyJkaXIiLEhjKFdpZSx0aGlzKT8icnRsIjoibHRyIl1dKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25zdGFydCIsKCk9PlBqKFppZSx0aGlzLFF3dCkuY2Fs''@;'; put 'put ''bCh0aGlzKSksci5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwoKT0+UGooWmllLHRoaXMsSnd0KS5jYWxsKHRoaXMpKSxIYyhVaWUsdGhpcykuYWZ0ZXIoZS5mcmFnbWVudCl9Z2V0Q29udGFpbmVyKCl7cmV0dXJuIEhjKHVkLHRoaXMpLmRpYWxvZ0VsZW1lbnR9Z2V0Rm9jdXNh''@;'; put 'put ''YmxlRWxlbWVudHMoKXtyZXR1cm4gSGMocmcsdGhpcykuZm9jdXNhYmxlRWxlbWVudHMoKX11cGRhdGVEaWFsb2codCl7bGV0e2lzVmlzaWJsZTplLGNvbnRlbnQ6cixjdXN0b21DbGFzc05hbWU6aSxiYWNrZ3JvdW5kOmEsY29udGVudEJhY2tncm91bmQ6YyxhbmltYXRpb246bSxhMTF5OkN9''@;'; put 'put ''PXQ7Y29uc3QgUD1IYyhyZyx0aGlzKS5jb21waWxlKCkse2RpYWxvZ0VsZW1lbnQ6WSxkaWFsb2dXcmFwcGVyRWxlbWVudDpKfT1IYyh1ZCx0aGlzKTtKLmlubmVySFRNTD0iIixKLmFwcGVuZENoaWxkKFAuZnJhZ21lbnQpLE9iamVjdC5hc3NpZ24oSGModWQsdGhpcyksUC5yZWZzKTtjb25z''@;'; put 'put ''dHtjb250ZW50RWxlbWVudDpjZSxidXR0b25zQ29udGFpbmVyOmZlfT1IYyh1ZCx0aGlzKTsiYmFzZSIhPT1IYyhyZyx0aGlzKS5URU1QTEFURV9OQU1FJiZPYmplY3QuYXNzaWduKEMsSGMocmcsdGhpcykuZGlhbG9nQTExWU9wdGlvbnMoKSk7Y29uc3QgQWU9aT9gICR7aX1gOiIiLEhlPWE/''@;'; put 'put ''YCAke2UxfS0tYmFja2dyb3VuZC0ke2F9YDoiIixYZT1tP2AgJHtlMX0tLWFuaW1hdGlvbmA6IiIscnQ9ZT9gICR7ZTF9LS1zaG93YDoiIjtyZXR1cm4gWS5jbGFzc05hbWU9W2UxLGAke2UxfS0tJHtIYyhyZyx0aGlzKS5URU1QTEFURV9OQU1FfWAsImhhbmRzb250YWJsZSIsQWUsSGUsWGUs''@;'; put 'put ''cnRdLmpvaW4oIiAiKSxaYShZLFsiYmFzZSI9PT1IYyhyZyx0aGlzKS5URU1QTEFURV9OQU1FP2FwKC0xKTp2b2lkIDBdKSxaYShZLFsiYWxlcnRkaWFsb2ciPT09Qy5yb2xlP1sicm9sZSIsImFsZXJ0ZGlhbG9nIl06WyJyb2xlIiwiZGlhbG9nIl1dKSxDLmFyaWFMYWJlbCYmIUMuYXJpYUxh''@;'; put 'put ''YmVsbGVkYnk/WmEoWSxbQy5hcmlhTGFiZWw/VDIoQy5hcmlhTGFiZWwpOnZvaWQgMF0pOkM0KFksImFyaWEtbGFiZWwiKSxDLmFyaWFMYWJlbGxlZGJ5P1phKFksW1JhdChDLmFyaWFMYWJlbGxlZGJ5KV0pOkM0KFksImFyaWEtbGFiZWxsZWRieSIpLEMuYXJpYURlc2NyaWJlZGJ5P1phKFks''@;'; put 'put ''W0xhdChDLmFyaWFEZXNjcmliZWRieSldKTpDNChZLCJhcmlhLWRlc2NyaWJlZGJ5IiksdGkoY2UsYCR7ZTF9X19jb250ZW50JHtjP2AgJHtlMX1fX2NvbnRlbnQtLWJhY2tncm91bmRgOiIifWApLCJiYXNlIj09PUhjKHJnLHRoaXMpLlRFTVBMQVRFX05BTUU/KGNlLmlubmVySFRNTD0iIiwi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIHI/SjYoY2Uscik6KHIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ciBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpJiZjZS5hcHBlbmRDaGlsZChyKSk6ZmUmJkFycmF5LmZyb20oZmUuY2hpbGRyZW4pLmZvckVhY2goKGp0LEZ0KT0+e2NvbnN0IHBuPUhjKEZq''@;'; put 'put ''LHRoaXMpW0Z0XTtwbiYmanQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHBuKX0pLHRoaXN9c2hvd0RpYWxvZyh0KXtjb25zdHtkaWFsb2dFbGVtZW50OmV9PUhjKHVkLHRoaXMpO3JldHVybiBlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aShlLGAke2UxfS0tc2hvd2ApLFRwKHFELHRoaXMs''@;'; put 'put ''ITEpLHRoaXN9aGlkZURpYWxvZyh0KXtjb25zdHtkaWFsb2dFbGVtZW50OmV9PUhjKHVkLHRoaXMpO3JldHVybiBIYShlLGAke2UxfS0tc2hvd2ApLCh0JiYhSGMocUQsdGhpcyl8fCF0KSYmKGUuc3R5bGUuZGlzcGxheT0ibm9uZSIpLFRwKHFELHRoaXMsITEpLHRoaXN9Zm9jdXNEaWFsb2co''@;'; put 'put ''KXtIYyh1ZCx0aGlzKS5kaWFsb2dFbGVtZW50LmZvY3VzKCl9dXBkYXRlV2lkdGgodCl7cmV0dXJuIEhjKHVkLHRoaXMpLmRpYWxvZ0VsZW1lbnQuc3R5bGUud2lkdGg9YCR7dH1weGAsdGhpc311cGRhdGVIZWlnaHQodCl7cmV0dXJuIEhjKHVkLHRoaXMpLmRpYWxvZ0VsZW1lbnQuc3R5bGUu''@;'; put 'put ''aGVpZ2h0PWBjYWxjKDEwMCUgLSAke3R9cHgpYCx0aGlzfWRlc3Ryb3lEaWFsb2coKXt2YXIgdDtudWxsPT09KHQ9SGModWQsdGhpcykpfHx2b2lkIDA9PT10fHx0LmRpYWxvZ0VsZW1lbnQucmVtb3ZlKCksVHAodWQsdGhpcyxudWxsKX19ZnVuY3Rpb24gSnd0KCl7Y29uc3R7ZGlhbG9nRWxl''@;'; put 'put ''bWVudDpufT1IYyh1ZCx0aGlzKTt2byhuLGAke2UxfS0tc2hvd2ApfHwobi5zdHlsZS5kaXNwbGF5PSJub25lIil9ZnVuY3Rpb24gUXd0KCl7VHAocUQsdGhpcywhMCl9ZnVuY3Rpb24gWWllKG4sdCxlKXtvX2Uobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIG9fZShuLHQpe2lmKHQuaGFzKG4p''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWTgobix0LGUpe3JldHVybiBuLnNldChCeShuLHQpLGUpLGV9ZnVuY3Rpb24gdDEobix0KXtyZXR1cm4gbi5nZXQoQnko''@;'; put 'put ''bix0KSl9ZnVuY3Rpb24gQnkobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXBs''@;'; put 'put ''KGFfZSwkMCk7Y29uc3QgRzg9ImRpYWxvZyIsR2llPUc4LEhqPWBwbHVnaW46JHtHOH1gO3ZhciBEMT1uZXcgV2Vha01hcCxWUz1uZXcgV2Vha01hcCxCUz1uZXcgV2Vha01hcCxqUz1uZXcgV2Vha1NldDtjbGFzcyBOaiBleHRlbmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1l''@;'; put 'put ''bnRzKSxmdW5jdGlvbiBlQ3Qobix0KXtvX2Uobix0KSx0LmFkZChuKX0odGhpcyxqUyksWWllKHRoaXMsRDEsbnVsbCksWWllKHRoaXMsVlMsITEpLFlpZSh0aGlzLEJTLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBHOH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgp''@;'; put 'put ''e3JldHVybiAzNjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3RlbXBsYXRlOm51bGwsY29udGVudDoiIixjdXN0b21DbGFzc05hbWU6IiIsYmFja2dyb3VuZDoic29saWQiLGNvbnRlbnRCYWNrZ3JvdW5kOiExLGFuaW1hdGlvbjohMCxjbG9zYWJsZTohMSxhMTF5Onty''@;'; put 'put ''b2xlOiJkaWFsb2ciLGFyaWFMYWJlbDoiRGlhbG9nIixhcmlhTGFiZWxsZWRieToiIixhcmlhRGVzY3JpYmVkYnk6IiJ9fX1zdGF0aWMgZ2V0IFNFVFRJTkdTX1ZBTElEQVRPUlMoKXtyZXR1cm57dGVtcGxhdGU6dD0+aG8odCkmJnR5cGVvZlsiYWxlcnQiLCJjb25maXJtIl0uaW5jbHVkZXMo''@;'; put 'put ''dC50eXBlKSYmInN0cmluZyI9PXR5cGVvZiB0LnRpdGxlJiYodHlwZW9mIHQ/LmRlc2NyaXB0aW9uPiJ1Inx8InN0cmluZyI9PXR5cGVvZiB0Py5kZXNjcmlwdGlvbikmJih0eXBlb2YgdD8uYnV0dG9ucz4idSJ8fEFycmF5LmlzQXJyYXkodD8uYnV0dG9ucykmJnQuYnV0dG9ucy5ldmVyeShl''@;'; put 'put ''PT4ib2JqZWN0Ij09dHlwZW9mIGUmJiJzdHJpbmciPT10eXBlb2YgZS50ZXh0JiZbInByaW1hcnkiLCJzZWNvbmRhcnkiXS5pbmNsdWRlcyhlLnR5cGUpJiYodHlwZW9mIGUuY2FsbGJhY2s+InUifHwiZnVuY3Rpb24iPT10eXBlb2YgZS5jYWxsYmFjaykpKSxjb250ZW50OnQ9PiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgdHx8dHlwZW9mIEhUTUxFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHx0eXBlb2YgRG9jdW1lbnRGcmFnbWVudDwidSImJnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50LGN1c3RvbUNsYXNzTmFtZTp0PT4ic3RyaW5nIj09dHlwZW9mIHQsYmFja2dy''@;'; put 'put ''b3VuZDp0PT5bInNvbGlkIiwic2VtaS10cmFuc3BhcmVudCJdLmluY2x1ZGVzKHQpLGNvbnRlbnRCYWNrZ3JvdW5kOnQ9PiJib29sZWFuIj09dHlwZW9mIHQsYW5pbWF0aW9uOnQ9PiJib29sZWFuIj09dHlwZW9mIHQsY2xvc2FibGU6dD0+ImJvb2xlYW4iPT10eXBlb2YgdCxhMTF5OnQ9Pmhv''@;'; put 'put ''KHQpJiYodHlwZW9mIHQ/LnJvbGU+InUifHxbImRpYWxvZyIsImFsZXJ0ZGlhbG9nIl0uaW5jbHVkZXModD8ucm9sZSkpJiYodHlwZW9mIHQ/LmFyaWFMYWJlbD4idSJ8fCJzdHJpbmciPT10eXBlb2YgdD8uYXJpYUxhYmVsKSYmKHR5cGVvZiB0Py5hcmlhTGFiZWxsZWRieT4idSJ8fCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgdD8uYXJpYUxhYmVsbGVkYnkpJiYodHlwZW9mIHQ/LmFyaWFEZXNjcmliZWRieT4idSJ8fCJzdHJpbmciPT10eXBlb2YgdD8uYXJpYURlc2NyaWJlZGJ5KX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0c4XX1lbmFibGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLmVuYWJsZWR8fCh0MShEMSx0aGlzKXx8WTgoRDEsdGhpcyxuZXcgYV9lKHtyb290RWxlbWVudDp0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQsaXNSdGw6dGhpcy5ob3QuaXNSdGwoKX0pKSxCeShqUyx0aGlzLG5DdCkuY2FsbCh0aGlzKSxCeShqUyx0aGlzLGlDdCkuY2FsbCh0aGlzKSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9PkJ5KGpTLHRoaXMsb0N0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNh''@;'; put 'put ''YmxlUGx1Z2luKCl7dGhpcy5oaWRlKCksQnkoalMsdGhpcyxyQ3QpLmNhbGwodGhpcyksQnkoalMsdGhpcyxhQ3QpLmNhbGwodGhpcyksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWlzVmlzaWJsZSgpe3JldHVybiB0MShWUyx0aGlzKX1zaG93KCl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKHRoaXMuZW5hYmxlZCl7aWYodGhpcy5pc1Zpc2libGUoKSlyZXR1cm4gdm9pZCB0aGlzLnVwZGF0ZSh0KTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGlhbG9nU2hvdyIpLHRoaXMudXBkYXRlKHQpLHQxKEQxLHRoaXMp''@;'; put 'put ''LnNob3dEaWFsb2codGhpcy5nZXRTZXR0aW5nKCJhbmltYXRpb24iKSksWTgoVlMsdGhpcywhMCksdGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS5hY3RpdmF0ZVNjb3BlKEc4KSxZOChCUyx0aGlzLHRoaXMuaG90LnNlbGVjdGlvbi5leHBvcnRTZWxlY3Rpb24oKSksdGhpcy5ob3Qu''@;'; put 'put ''ZGVzZWxlY3RDZWxsKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nU2hvdyIpfX1oaWRlKCl7dmFyIHQ7dGhpcy5pc1Zpc2libGUoKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEaWFsb2dIaWRlIiksdDEoRDEsdGhpcykuaGlkZURpYWxvZyh0aGlzLmdldFNldHRpbmcoImFu''@;'; put 'put ''aW1hdGlvbiIpKSxZOChWUyx0aGlzLCExKSx0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmRlYWN0aXZhdGVTY29wZShHOCksKG51bGw9PT0odD10MShCUyx0aGlzKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQucmFuZ2VzLmxlbmd0aCk+MD8odGhpcy5ob3Quc2VsZWN0aW9uLmltcG9y''@;'; put 'put ''dFNlbGVjdGlvbih0MShCUyx0aGlzKSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKSxZOChCUyx0aGlzLG51bGwpKTp0aGlzLmhvdC5zZWxlY3RDZWxsKDAsMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nSGlkZSIpKX11cGRhdGUodCl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm47dGhp''@;'; put 'put ''cy51cGRhdGVQbHVnaW5TZXR0aW5ncyh0KTtjb25zdCBlPXRoaXMuZ2V0U2V0dGluZygidGVtcGxhdGUiKTtpZihlIT09TmouREVGQVVMVF9TRVRUSU5HUy50ZW1wbGF0ZSYmdGhpcy5nZXRTZXR0aW5nKCJjb250ZW50IikhPT1Oai5ERUZBVUxUX1NFVFRJTkdTLmNvbnRlbnQpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJUaGUgYHRlbXBsYXRlYCBvcHRpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgYGNvbnRlbnRgIG9wdGlvbi4iKTtlP3QxKEQxLHRoaXMpLnVzZVRlbXBsYXRlKGUudHlwZSx7aWQ6dGhpcy5ob3QuZ3VpZCwuLi5lfSk6dDEoRDEsdGhpcykudXNlRGVmYXVsdFRl''@;'; put 'put ''bXBsYXRlKCksdDEoRDEsdGhpcykudXBkYXRlRGlhbG9nKHtpc1Zpc2libGU6dGhpcy5pc1Zpc2libGUoKSxjb250ZW50OnRoaXMuZ2V0U2V0dGluZygiY29udGVudCIpLGN1c3RvbUNsYXNzTmFtZTp0aGlzLmdldFNldHRpbmcoImN1c3RvbUNsYXNzTmFtZSIpLGJhY2tncm91bmQ6dGhpcy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJiYWNrZ3JvdW5kIiksY29udGVudEJhY2tncm91bmQ6dGhpcy5nZXRTZXR0aW5nKCJjb250ZW50QmFja2dyb3VuZCIpLGFuaW1hdGlvbjp0aGlzLmdldFNldHRpbmcoImFuaW1hdGlvbiIpLGExMXk6dGhpcy5nZXRTZXR0aW5nKCJhMTF5Iil9KX1zaG93QWxlcnQodCxlKXtj''@;'; put 'put ''b25zdHt0aXRsZTpyPSJBbGVydCIsZGVzY3JpcHRpb246aX09aG8odCk/dDp7dGl0bGU6dH07dGhpcy5zaG93KHt0ZW1wbGF0ZTp7dHlwZToiY29uZmlybSIsdGl0bGU6cixkZXNjcmlwdGlvbjppLGJ1dHRvbnM6W3t0ZXh0OnRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoTk4pLHR5cGU6''@;'; put 'put ''InByaW1hcnkiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkoYSksbT0wO208YTttKyspY1ttXT1hcmd1bWVudHNbbV07cmV0dXJuIGU/LiguLi5jKX19XX0sY29udGVudEJhY2tncm91bmQ6ITEsYmFja2dyb3VuZDoic29saWQiLGFu''@;'; put 'put ''aW1hdGlvbjohMCxjbG9zYWJsZTohMX0pfXNob3dDb25maXJtKHQsZSxyKXtjb25zdHt0aXRsZTppPSJDb25maXJtIixkZXNjcmlwdGlvbjphfT1obyh0KT90Ont0aXRsZTp0fTt0aGlzLnNob3coe3RlbXBsYXRlOnt0eXBlOiJjb25maXJtIix0aXRsZTppLGRlc2NyaXB0aW9uOmEsYnV0dG9u''@;'; put 'put ''czpbe3RleHQ6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShTUSksdHlwZToic2Vjb25kYXJ5IixjYWxsYmFjazpmdW5jdGlvbigpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLG09bmV3IEFycmF5KGMpLEM9MDtDPGM7QysrKW1bQ109YXJndW1lbnRzW0NdO3JldHVybiByPy4oLi4u''@;'; put 'put ''bSl9fSx7dGV4dDp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKE5OKSx0eXBlOiJwcmltYXJ5IixjYWxsYmFjazpmdW5jdGlvbigpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLG09bmV3IEFycmF5KGMpLEM9MDtDPGM7QysrKW1bQ109YXJndW1lbnRzW0NdO3JldHVybiBlPy4oLi4u''@;'; put 'put ''bSl9fV19LGNvbnRlbnRCYWNrZ3JvdW5kOiEwLGJhY2tncm91bmQ6InNlbWktdHJhbnNwYXJlbnQiLGFuaW1hdGlvbjohMCxjbG9zYWJsZTohMX0pfWZvY3VzKCl7dDEoRDEsdGhpcykuZm9jdXNEaWFsb2coKX1kZXN0cm95KCl7dmFyIHQ7bnVsbD09PSh0PXQxKEQxLHRoaXMpKXx8dm9pZCAw''@;'; put 'put ''PT09dHx8dC5kZXN0cm95RGlhbG9nKCksWTgoRDEsdGhpcyxudWxsKSxZOChWUyx0aGlzLCExKSxZOChCUyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbkN0KCl7dmFyIG47Y29uc3QgdD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKSxlPW51bGwhPT0obj10Lmdl''@;'; put 'put ''dENvbnRleHQoSGopKSYmdm9pZCAwIT09bj9uOnQuYWRkQ29udGV4dChIaik7ZS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhpZGUoKX0scnVuT25seUlmOigpPT50MShWUyx0aGlzKSYmdGhpcy5nZXRTZXR0aW5nKCJjbG9zYWJsZSIpLGdyb3Vw''@;'; put 'put ''OkdpZX0pLGUuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxbIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpyPT57dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LnJ1bkhvb2tzKHIuc2hpZnRLZXk/ImRpYWxvZ0ZvY3VzUHJldmlvdXNF''@;'; put 'put ''bGVtZW50IjoiZGlhbG9nRm9jdXNOZXh0RWxlbWVudCIpfSl9LGdyb3VwOkdpZX0pfWZ1bmN0aW9uIHJDdCgpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoSGopLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR2llKX1mdW5jdGlvbiBpQ3QoKXt0aGlzLmhvdC5nZXRG''@;'; put 'put ''b2N1c1Njb3BlTWFuYWdlcigpLnJlZ2lzdGVyU2NvcGUoRzgsdDEoRDEsdGhpcykuZ2V0Q29udGFpbmVyKCkse3Nob3J0Y3V0c0NvbnRleHROYW1lOkhqLHR5cGU6Im1vZGFsIixydW5Pbmx5SWY6KCk9PnRoaXMuaXNWaXNpYmxlKCksb25BY3RpdmF0ZTpuPT57Y29uc3QgdD10aGlzLmhvdC5p''@;'; put 'put ''c0xpc3RlbmluZygpLGU9dDEoRDEsdGhpcykuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKTtlLmxlbmd0aD4wPyJ0YWJfZnJvbV9hYm92ZSI9PT1uP2UuYXQoMCkuZm9jdXMoKToidGFiX2Zyb21fYmVsb3ciPT09biYmZS5hdCgtMSkuZm9jdXMoKToidGFiX2Zyb21fYWJvdmUiIT09biYmInRhYl9m''@;'; put 'put ''cm9tX2JlbG93IiE9PW4mJnQmJiF0MShEMSx0aGlzKS5nZXRDb250YWluZXIoKS5jb250YWlucyh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJnQxKEQxLHRoaXMpLmdldENvbnRhaW5lcigpLmZvY3VzKCksdCYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nRm9j''@;'; put 'put ''dXMiLCJ1bmtub3duIj09PW4/InNob3ciOm4pfX0pfWZ1bmN0aW9uIGFDdCgpe3RoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkudW5yZWdpc3RlclNjb3BlKEc4KX1mdW5jdGlvbiBvQ3QoKXtjb25zdHt2aWV3Om4scm9vdFdyYXBwZXJFbGVtZW50OnQscm9vdFdpbmRvdzplfT10aGlz''@;'; put 'put ''LmhvdCxyPW4uaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9uLmdldFRvdGFsVGFibGVXaWR0aCgpOm4uZ2V0V29ya3NwYWNlV2lkdGgoKTt0MShEMSx0aGlzKS51cGRhdGVXaWR0aChyKTtjb25zdCBpPXQucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5m''@;'; put 'put ''byIpO2lmKGkpe2NvbnN0IGE9aS5vZmZzZXRIZWlnaHQsYz1OdW1iZXIucGFyc2VGbG9hdChlLmdldENvbXB1dGVkU3R5bGUoaSkubWFyZ2luVG9wKTt0MShEMSx0aGlzKS51cGRhdGVIZWlnaHQoYStjKX19ZnVuY3Rpb24gc19lKG4sdCl7aWYodC5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBsX2Uobix0LGUpe3JldHVybiBuLnNldCgkaWUobix0KSxlKSxlfWZ1bmN0aW9uIFkyKG4sdCl7cmV0dXJuIG4uZ2V0KCRpZShuLHQpKX1mdW5jdGlvbiAk''@;'; put 'put ''aWUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGp5PSJsb2FkaW5n''@;'; put 'put ''Iix6eT1gaHQtJHtqeX1gO3ZhciBkZD1uZXcgV2Vha01hcCxjX2U9bmV3IFdlYWtTZXQ7Y2xhc3MgZEN0IGV4dGVuZHMgTXN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGxDdChuLHQpe3NfZShuLHQpLHQuYWRkKG4pfSh0aGlzLGNfZSksZnVuY3Rpb24gY0N0''@;'; put 'put ''KG4sdCxlKXtzX2Uobix0KSx0LnNldChuLGUpfSh0aGlzLGRkLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBqeX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2ljb246YDxzdmcg''@;'; put 'put ''Y2xhc3M9IiR7enl9X19pY29uLXN2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xNSA4YTcgNyAwIDEgMS0zLjUtNi4wNjIi''@;'; put 'put ''PjwvcGF0aD48L3N2Zz5gLHRpdGxlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIn19c3RhdGljIGdldCBTRVRUSU5HU19WQUxJREFUT1JTKCl7cmV0dXJue2ljb246dD0+InN0cmluZyI9PXR5cGVvZiB0LHRpdGxlOnQ9PiJzdHJpbmciPT10eXBlb2YgdCxkZXNjcmlwdGlvbjp0PT4ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIHR9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqeV19ZW5hYmxlUGx1Z2luKCl7dmFyIHQ7dGhpcy5lbmFibGVkfHwobnVsbD09PVkyKGRkLHRoaXMpJiYobF9lKGRkLHRoaXMsdGhpcy5ob3QuZ2V0UGx1Z2luKCJkaWFsb2ciKSksbnVsbCE9PSh0''@;'; put 'put ''PVkyKGRkLHRoaXMpKSYmdm9pZCAwIT09dCYmdC5pc0VuYWJsZWQoKXx8KHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGlhbG9nPSEwKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRpYWxvZ0ZvY3VzIiwoKT0+JGllKGNfZSx0aGlzLGhDdCkuY2FsbCh0aGlzKSkpLHN1cGVyLmVuYWJsZVBsdWdp''@;'; put 'put ''bigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGUoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9aXNWaXNpYmxlKCl7dmFyIHQsZTtyZXR1cm4gbnVsbCE9''@;'; put 'put ''PSh0PW51bGw9PT0oZT1ZMihkZCx0aGlzKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuaXNWaXNpYmxlKCkpJiZ2b2lkIDAhPT10JiZ0fXNob3coKXt2YXIgdDtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5pc0VuYWJs''@;'; put 'put ''ZWQoKSYmWTIoZGQsdGhpcykmJm51bGwhPT0odD1ZMihkZCx0aGlzKSkmJnZvaWQgMCE9PXQmJnQuaXNFbmFibGVkKCkmJih0aGlzLmlzVmlzaWJsZSgpP3RoaXMudXBkYXRlKGUpOiExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUxvYWRpbmdTaG93IikmJih0aGlzLnVwZGF0ZShlKSxZ''@;'; put 'put ''MihkZCx0aGlzKS5zaG93KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTG9hZGluZ1Nob3ciKSkpfWhpZGUoKXt2YXIgdDshWTIoZGQsdGhpcyl8fG51bGw9PT0odD1ZMihkZCx0aGlzKSl8fHZvaWQgMD09PXR8fCF0LmlzRW5hYmxlZCgpfHwhdGhpcy5pc1Zpc2libGUoKXx8ITE9PT10aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYmVmb3JlTG9hZGluZ0hpZGUiKXx8KFkyKGRkLHRoaXMpLmhpZGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJMb2FkaW5nSGlkZSIpKX11cGRhdGUodCl7dmFyIGUscjtpZighdGhpcy5pc0VuYWJsZWQoKXx8IVkyKGRkLHRoaXMpfHxudWxsPT09KGU9WTIoZGQs''@;'; put 'put ''dGhpcykpfHx2b2lkIDA9PT1lfHwhZS5pc0VuYWJsZWQoKSlyZXR1cm47dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyh0KTtjb25zdCBpPXRoaXMuaG90Lmd1aWQsYT10aGlzLmdldFNldHRpbmcoImljb24iKSxjPW51bGwhPT0ocj10aGlzLmdldFNldHRpbmcoInRpdGxlIikpJiZ2b2lkIDAh''@;'; put 'put ''PT1yP3I6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShRZWUpLG09dGhpcy5nZXRTZXR0aW5nKCJkZXNjcmlwdGlvbiIpLEM9ZnVuY3Rpb24gc0N0KG4pe2xldHtpZDp0LGljb246ZSx0aXRsZTpyLGRlc2NyaXB0aW9uOml9PW47cmV0dXJuYFxuICAgIDxkaXYgY2xhc3M9IiR7enl9X19j''@;'; put 'put ''b250ZW50Ij5cbiAgICAgIDxpIGNsYXNzPSIke3p5fV9faWNvbiI+JHtlfTwvaT5cbiAgICAgIDxkaXYgY2xhc3M9IiR7enl9X190ZXh0Ij5cbiAgICAgICAgPGgyIGlkPSIke3R9LSR7anl9LXRpdGxlIiBjbGFzcz0iJHt6eX1fX3RpdGxlIj4ke3J9PC9oMj5cbiAgICAgICAgJHtpP2A8cCBp''@;'; put 'put ''ZD0iJHt0fS0ke2p5fS1kZXNjcmlwdGlvbiIgY2xhc3M9IiR7enl9X19kZXNjcmlwdGlvbiI+JHtpfTwvcD5gOiIifVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGB9KHtpZDppLGljb246YSx0aXRsZTpjLGRlc2NyaXB0aW9uOm19KTtZMihkZCx0aGlzKS51cGRhdGUoe2NvbnRlbnQ6''@;'; put 'put ''QyxjdXN0b21DbGFzc05hbWU6enksYmFja2dyb3VuZDowPT09dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk/InNvbGlkIjoic2VtaS10cmFuc3BhcmVudCIsYTExeTp7cm9sZToiYWxlcnRkaWFsb2ciLGFyaWFMYWJlbGxlZGJ5OmAke2l9LSR7anl9LXRpdGxlYCxhcmlhRGVzY3JpYmVkYnk6''@;'; put 'put ''bT9gJHtpfS0ke2p5fS1kZXNjcmlwdGlvbmA6dm9pZCAwfX0pfWRlc3Ryb3koKXtsX2UoZGQsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGhDdCgpe1kyKGRkLHRoaXMpLmZvY3VzKCl9ZnVuY3Rpb24gVmoobix0LGUpeyhmdW5jdGlvbiBmQ3Qobix0KXtpZih0Lmhhcyhu''@;'; put 'put ''KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIE5jKG4sdCl7cmV0dXJuIG4uZ2V0KHVfZShuLHQpKX1mdW5jdGlvbiBZNShuLHQsZSl7''@;'; put 'put ''cmV0dXJuIG4uc2V0KHVfZShuLHQpLGUpLGV9ZnVuY3Rpb24gdV9lKG4sdCxlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbj9uPT09dDpuLmhhcyh0KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP3Q6ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNl''@;'; put 'put ''bnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBYZD0iaHQtZW1wdHktZGF0YS1zdGF0ZSIsZ0N0PWA8ZGl2IGRhdGEtcmVmPSJlbXB0eURhdGFTdGF0ZUVsZW1lbnQiIGNsYXNzPSIke1hkfSBoYW5kc29udGFibGUiPlxuICA8ZGl2IGNsYXNzPSIke1hkfV9fY29udGVudC13cmFwcGVyIj5cbiAg''@;'; put 'put ''ICA8ZGl2IGRhdGEtcmVmPSJlbXB0eURhdGFTdGF0ZUlubmVyIiBjbGFzcz0iJHtYZH1fX2NvbnRlbnQtd3JhcHBlci1pbm5lciI+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+YDt2YXIgS2llPW5ldyBXZWFrTWFwLFhpZT1uZXcgV2Vha01hcCxuMT1uZXcgV2Vha01hcCxHMj1uZXcgV2Vha01h''@;'; put 'put ''cDtjbGFzcyB2Q3R7Y29uc3RydWN0b3IodCl7bGV0e3Jvb3RFbGVtZW50OmUscm9vdERvY3VtZW50OnJ9PXQ7VmoodGhpcyxLaWUsdm9pZCAwKSxWaih0aGlzLFhpZSx2b2lkIDApLFZqKHRoaXMsbjEsdm9pZCAwKSxWaih0aGlzLEcyLHZvaWQgMCksWTUoS2llLHRoaXMsZSksWTUoWGllLHRo''@;'; put 'put ''aXMsciksdGhpcy5pbnN0YWxsKCl9aW5zdGFsbCgpe3ZhciB0O2lmKG51bGwhPT0odD1OYyhuMSx0aGlzKSkmJnZvaWQgMCE9PXQmJnQuZW1wdHlEYXRhU3RhdGVFbGVtZW50KXJldHVybjtjb25zdCBlPWRDYCR7Z0N0fWA7WTUobjEsdGhpcyxlLnJlZnMpO2NvbnN0e2VtcHR5RGF0YVN0YXRl''@;'; put 'put ''SW5uZXI6cixlbXB0eURhdGFTdGF0ZUVsZW1lbnQ6aX09TmMobjEsdGhpcyk7WmEocixbYXAoLTEpXSksWmEoaSxbYXAoLTEpXSksTmMoS2llLHRoaXMpLmFmdGVyKGUuZnJhZ21lbnQpfWdldEVsZW1lbnQoKXt2YXIgdDtyZXR1cm4gbnVsbD09PSh0PU5jKG4xLHRoaXMpKXx8dm9pZCAwPT09''@;'; put 'put ''dD92b2lkIDA6dC5lbXB0eURhdGFTdGF0ZUVsZW1lbnR9Z2V0Rm9jdXNhYmxlRWxlbWVudHMoKXtjb25zdHtlbXB0eURhdGFTdGF0ZUJ1dHRvbnM6dCxlbXB0eURhdGFTdGF0ZUlubmVyOmV9PU5jKG4xLHRoaXMpLHI9QXJyYXkuZnJvbSh0Py5jaGlsZHJlbik7cmV0dXJuIDA9PT1yLmxlbmd0''@;'; put 'put ''aD9bZV06cn1zaG93KCl7dmFyIHQ7bnVsbCE9PSh0PU5jKG4xLHRoaXMpKSYmdm9pZCAwIT09dCYmdC5lbXB0eURhdGFTdGF0ZUVsZW1lbnQmJihOYyhuMSx0aGlzKS5lbXB0eURhdGFTdGF0ZUVsZW1lbnQuc3R5bGUuZGlzcGxheT0iYmxvY2siKX1oaWRlKCl7dmFyIHQsZTtudWxsIT09KHQ9''@;'; put 'put ''TmMobjEsdGhpcykpJiZ2b2lkIDAhPT10JiZ0LmVtcHR5RGF0YVN0YXRlRWxlbWVudCYmKG51bGw9PT0oZT1OYyhHMix0aGlzKSl8fHZvaWQgMD09PWV8fGUucmVtb3ZlKCksWTUoRzIsdGhpcyxudWxsKSxOYyhuMSx0aGlzKS5lbXB0eURhdGFTdGF0ZUVsZW1lbnQuc3R5bGUuZGlzcGxheT0i''@;'; put 'put ''bm9uZSIpfXVwZGF0ZUNvbnRlbnQodCl7dmFyIGU7Y29uc3R7ZW1wdHlEYXRhU3RhdGVJbm5lcjpyfT1OYyhuMSx0aGlzKTtsZXQgaT0iIjtpPSJzdHJpbmciPT10eXBlb2YgdD97dGl0bGU6dH06e3RpdGxlOnQ/LnRpdGxlLGRlc2NyaXB0aW9uOnQ/LmRlc2NyaXB0aW9uLGJ1dHRvbnM6dD8u''@;'; put 'put ''YnV0dG9uc307Y29uc3QgYT1kQ2AkeyhuPT57bGV0e3RpdGxlOnQsZGVzY3JpcHRpb246ZSxidXR0b25zOnJ9PW47cmV0dXJuYFxuICA8ZGl2IGNsYXNzPSIke1hkfV9fY29udGVudCI+XG4gICAgJHt0P2A8aDIgY2xhc3M9IiR7WGR9X190aXRsZSI+JHtiNCh0KX08L2gyPmA6IiJ9XG4gICAg''@;'; put 'put ''JHtlP2A8cCBjbGFzcz0iJHtYZH1fX2Rlc2NyaXB0aW9uIj4ke2I0KGUpfTwvcD5gOiIifVxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGRhdGEtcmVmPSJlbXB0eURhdGFTdGF0ZUJ1dHRvbnMiXG4gICAgY2xhc3M9IiR7WGR9X19idXR0b25zJHtyPy5sZW5ndGg+MD9gICR7WGR9X19idXR0b25z''@;'; put 'put ''LS1oYXMtYnV0dG9uc2A6IiJ9IlxuICA+JHtyPy5sZW5ndGg+MD9yLm1hcChpPT5gPGJ1dHRvbiBjbGFzcz0iaHQtYnV0dG9uIGh0LWJ1dHRvbi0tJHtpLnR5cGV9Ij4ke2I0KGkudGV4dCl9PC9idXR0b24+YCkuam9pbigiIik6IiJ9PC9kaXY+YH0pKGkpfWA7WTUobjEsdGhpcyx7Li4uTmMo''@;'; put 'put ''bjEsdGhpcyksLi4uYS5yZWZzfSksci5pbm5lckhUTUw9IiIsci5hcHBlbmRDaGlsZChhLmZyYWdtZW50KSwobnVsbD09PShlPWkuYnV0dG9ucyl8fHZvaWQgMD09PWU/dm9pZCAwOmUubGVuZ3RoKT4wJiZBcnJheS5mcm9tKE5jKG4xLHRoaXMpLmVtcHR5RGF0YVN0YXRlQnV0dG9ucy5jaGls''@;'; put 'put ''ZHJlbikuZm9yRWFjaCgoYyxtKT0+e2MuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGkuYnV0dG9uc1ttXS5jYWxsYmFjayl9KX11cGRhdGVDbGFzc05hbWVzKHQpe2NvbnN0e2VtcHR5RGF0YVN0YXRlRWxlbWVudDplfT1OYyhuMSx0aGlzKTt0LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKT4w''@;'; put 'put ''JiZ0LmdldENvbHVtbkhlYWRlcnNDb3VudCgpPjA/dGkoZSxgJHtYZH0tLWRpc2FibGUtdG9wLWJvcmRlcmApOkhhKGUsYCR7WGR9LS1kaXNhYmxlLXRvcC1ib3JkZXJgKSx0LmNvdW50UmVuZGVyYWJsZVJvd3MoKT4wJiZ0LmdldFJvd0hlYWRlcnNDb3VudCgpPjA/dGkoZSxgJHtYZH0tLWRp''@;'; put 'put ''c2FibGUtaW5saW5lLWJvcmRlcmApOkhhKGUsYCR7WGR9LS1kaXNhYmxlLWlubGluZS1ib3JkZXJgKSx0Lmhhc0hvcml6b250YWxTY3JvbGwoKSYmIXQuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT90aShlLGAke1hkfS0tZGlzYWJsZS1ib3R0b20tYm9yZGVyYCk6SGEoZSxg''@;'; put 'put ''JHtYZH0tLWRpc2FibGUtYm90dG9tLWJvcmRlcmApfXVwZGF0ZVNpemUodCl7Y29uc3R7ZW1wdHlEYXRhU3RhdGVFbGVtZW50OmV9PU5jKG4xLHRoaXMpLHI9dC5oYXNIb3Jpem9udGFsU2Nyb2xsKCk/Z3UodC5ob3Qucm9vdERvY3VtZW50KTowLGk9dC5jb3VudFJlbmRlcmFibGVSb3dzKCks''@;'; put 'put ''YT10LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxjPXQuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7dmFyIG07ZS5zdHlsZS50b3A9YT4wP2Ake3QuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl9cHhgOiIwcHgiLGUuc3R5bGUuaW5zZXRJbmxpbmVTdGFydD1pPjA/YCR7dC5nZXRSb3dIZWFkZXJX''@;'; put 'put ''aWR0aCgpfXB4YDoiMHB4IiwwPT09aT8oTmMoRzIsdGhpcyl8fChZNShHMix0aGlzLE5jKFhpZSx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYiKSksTmMoRzIsdGhpcykuY2xhc3NMaXN0LmFkZChgJHtYZH0tcGxhY2Vob2xkZXJgKSx0Ll93dC53dFRhYmxlLmhvbGRlci5hcHBlbmRDaGlsZChO''@;'; put 'put ''YyhHMix0aGlzKSkpLE5jKEcyLHRoaXMpLnN0eWxlLndpZHRoPSIxMDAlIixOYyhHMix0aGlzKS5zdHlsZS5oZWlnaHQ9IjE1MHB4Iik6KG51bGw9PT0obT1OYyhHMix0aGlzKSl8fHZvaWQgMD09PW18fG0ucmVtb3ZlKCksWTUoRzIsdGhpcyxudWxsKSk7bGV0IEM9dC5nZXRXb3Jrc3BhY2VX''@;'; put 'put ''aWR0aCgpLFA9dC5nZXRUYWJsZUhlaWdodCgpO3QuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9hPjA/Qz10LmdldFRvdGFsVGFibGVXaWR0aCgpOmk+MCYmKEM9dC5nZXRWaWV3cG9ydFdpZHRoKCkpOmk+MD9DPXQuZ2V0Vmlld3BvcnRXaWR0aCgpOnQuZ2V0VGFibGVXaWR0''@;'; put 'put ''aCgpLXQuZ2V0Um93SGVhZGVyV2lkdGgoKTx0LmdldFZpZXdwb3J0V2lkdGgoKSYmYT4wJiYoQz10LmdldFRhYmxlV2lkdGgoKSksdC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXx8dC5oYXNWZXJ0aWNhbFNjcm9sbCgpP1A9YT4wP3QuaG90LmdldFRhYmxlSGVpZ2h0KCktdC5n''@;'; put 'put ''ZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTp0LmhvdC5nZXRUYWJsZUhlaWdodCgpOmM+MCYmYT4wP1A9dC5nZXRWaWV3cG9ydEhlaWdodCgpLXI6Yz4wJiYwPT09YSYmKFA9dC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1yKSxlLnN0eWxlLndpZHRoPWAke0N9cHhgLGUuc3R5bGUuaGVpZ2h0PWAke1B9''@;'; put 'put ''cHhgfWRlc3Ryb3koKXt2YXIgdCxlO251bGw9PT0odD1OYyhuMSx0aGlzKSl8fHZvaWQgMD09PXR8fG51bGw9PT0odD10LmVtcHR5RGF0YVN0YXRlRWxlbWVudCl8fHZvaWQgMD09PXR8fHQucmVtb3ZlKCksbnVsbD09PShlPU5jKEcyLHRoaXMpKXx8dm9pZCAwPT09ZXx8ZS5yZW1vdmUoKSxZ''@;'; put 'put ''NShHMix0aGlzLG51bGwpLFk1KG4xLHRoaXMsbnVsbCl9fWZ1bmN0aW9uIEpEKG4sdCxlKXtkX2Uobix0KSx0LnNldChuLGUpfWZ1bmN0aW9uIGRfZShuLHQpe2lmKHQuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gV2gobix0LGUpe3JldHVybiBuLnNldChqdShuLHQpLGUpLGV9ZnVuY3Rpb24gcnUobix0KXtyZXR1cm4gbi5nZXQoanUobix0KSl9ZnVuY3Rpb24ganUobix0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuP249PT10Om4uaGFzKHQp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/dDplO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFV5PSJlbXB0eURhdGFTdGF0ZSIscWllPU9iamVjdC5mcmVlemUoe1VOS05PV046InVua25vd24iLEZJ''@;'; put 'put ''TFRFUlM6ImZpbHRlcnMifSksYkN0PWBwbHVnaW46JHtVeX1gO3ZhciBlYWUsdGFlLG5hZSxyYWUsaWFlLFd5PW5ldyBXZWFrTWFwLFIwPW5ldyBXZWFrTWFwLHpTPW5ldyBXZWFrTWFwLEJqPW5ldyBXZWFrTWFwLFVTPW5ldyBXZWFrTWFwLHAwPW5ldyBXZWFrU2V0O2NsYXNzIHdDdCBleHRl''@;'; put 'put ''bmRzIE1ze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB5Q3Qobix0KXtkX2Uobix0KSx0LmFkZChuKX0odGhpcyxwMCksSkQodGhpcyxXeSwhMSksSkQodGhpcyxSMCxudWxsKSxKRCh0aGlzLHpTLG51bGwpLEpEKHRoaXMsQmosITEpLEpEKHRoaXMsVVMsbnVs''@;'; put 'put ''bCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFV5fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDM3MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57bWVzc2FnZTp2b2lkIDB9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURBVE9SUygpe3Jl''@;'; put 'put ''dHVybnttZXNzYWdlOnQ9PiJzdHJpbmciPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHR8fGhvKHQpJiYodHlwZW9mIHQ/LnRpdGxlPiJ1Inx8InN0cmluZyI9PXR5cGVvZiB0Py50aXRsZSkmJih0eXBlb2YgdD8uZGVzY3JpcHRpb24+InUifHwic3RyaW5nIj09dHlwZW9mIHQ/LmRl''@;'; put 'put ''c2NyaXB0aW9uKSYmKHR5cGVvZiB0Py5idXR0b25zPiJ1Inx8QXJyYXkuaXNBcnJheSh0Py5idXR0b25zKSYmdD8uYnV0dG9ucy5ldmVyeShlPT4ib2JqZWN0Ij09dHlwZW9mIGUmJiJzdHJpbmciPT10eXBlb2YgZS50ZXh0JiYic3RyaW5nIj09dHlwZW9mIGUudHlwZSYmWyJwcmltYXJ5Iiwi''@;'; put 'put ''c2Vjb25kYXJ5Il0uaW5jbHVkZXMoZS50eXBlKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY2FsbGJhY2spKXx8dm9pZCAwPT09dH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1V5XX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChydShSMCx0aGlzKXx8''@;'; put 'put ''KFdoKFIwLHRoaXMsbmV3IHZDdCh7cm9vdEVsZW1lbnQ6dGhpcy5ob3Qucm9vdEdyaWRFbGVtZW50LHJvb3REb2N1bWVudDp0aGlzLmhvdC5yb290RG9jdW1lbnR9KSksanUocDAsdGhpcyx4Q3QpLmNhbGwodGhpcyksanUocDAsdGhpcyxDQ3QpLmNhbGwodGhpcyksanUocDAsdGhpcyxTQ3Qp''@;'; put 'put ''LmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+anUocDAsdGhpcyxEQ3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXIiLCgpPT5qdShwMCx0aGlzLElDdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2FjaGVV''@;'; put 'put ''cGRhdGUiLCgpPT5qdShwMCx0aGlzLEppZSkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblNlcXVlbmNlQ2FjaGVVcGRhdGUiLCgpPT5qdShwMCx0aGlzLEppZSkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLHQ9Pmp1KHAwLHRoaXMsUkN0KS5j''@;'; put 'put ''YWxsKHRoaXMsdCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLGp1KHAwLHRoaXMsUWllKS5jYWxsKHRoaXMpLHRoaXMuaXNWaXNpYmxlKCkmJnJ1KFIwLHRoaXMpLnNob3coKSxzdXBlci51cGRh''@;'; put 'put ''dGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7anUocDAsdGhpcyxFQ3QpLmNhbGwodGhpcyksanUocDAsdGhpcyxNQ3QpLmNhbGwodGhpcykscnUoUjAsdGhpcykuZGVzdHJveSgpLFdoKFIwLHRoaXMsbnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWlzVmlzaWJsZSgpe3JldHVybiBydShX''@;'; put 'put ''eSx0aGlzKX1kZXN0cm95KCl7dmFyIHQ7V2goV3ksdGhpcywhMSksbnVsbD09PSh0PXJ1KFIwLHRoaXMpKXx8dm9pZCAwPT09dHx8dC5kZXN0cm95KCksV2goUjAsdGhpcyxudWxsKSxXaCh6Uyx0aGlzLG51bGwpLFdoKEJqLHRoaXMsITEpLFdoKFVTLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJv''@;'; put 'put ''eSgpfX1mdW5jdGlvbiBDQ3QoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJ1KFIwLHRoaXMpLmdldEVsZW1lbnQoKSwid2hlZWwiLG49Pmp1KHAwLHRoaXMsa0N0KS5jYWxsKHRoaXMsbikpfWZ1bmN0aW9uIFNDdCgpe1doKHpTLHRoaXMsbmV3IE11dGF0aW9uT2JzZXJ2''@;'; put 'put ''ZXIoKCk9PntpZighdGhpcy5ob3QpcmV0dXJuO2NvbnN0IG49cnUoUjAsdGhpcykuZ2V0RWxlbWVudCgpO3RoaXMuaG90LnJvb3RHcmlkRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmchPT1uJiZ0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQuYWZ0ZXIobil9KSkscnUoelMsdGhpcykub2JzZXJ2''@;'; put 'put ''ZSh0aGlzLmhvdC5yb290V3JhcHBlckVsZW1lbnQse2NoaWxkTGlzdDohMH0pfWZ1bmN0aW9uIE1DdCgpe3J1KHpTLHRoaXMpLmRpc2Nvbm5lY3QoKSxXaCh6Uyx0aGlzLG51bGwpfWZ1bmN0aW9uIHhDdCgpe3RoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkucmVnaXN0ZXJTY29wZShV''@;'; put 'put ''eSxydShSMCx0aGlzKS5nZXRFbGVtZW50KCkse3Nob3J0Y3V0c0NvbnRleHROYW1lOmJDdCxydW5Pbmx5SWY6KCk9PnRoaXMuaXNWaXNpYmxlKCksb25BY3RpdmF0ZTpuPT57dmFyIHQ7Y29uc3QgZT1udWxsPT09KHQ9cnUoUjAsdGhpcykpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmdldEZvY3Vz''@;'; put 'put ''YWJsZUVsZW1lbnRzKCk7ZS5sZW5ndGg+MCYmKCJ0YWJfZnJvbV9hYm92ZSI9PT1uP2UuYXQoMCkuZm9jdXMoKToidGFiX2Zyb21fYmVsb3ciPT09biYmZS5hdCgtMSkuZm9jdXMoKSl9fSl9ZnVuY3Rpb24gRUN0KCl7dGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS51bnJlZ2lzdGVy''@;'; put 'put ''U2NvcGUoVXkpfWZ1bmN0aW9uIGhfZShuKXt2YXIgdCxlLHI7bGV0IGk7cmV0dXJuIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZ2V0U2V0dGluZygibWVzc2FnZSIpP3RoaXMuZ2V0U2V0dGluZygibWVzc2FnZSIpKG4pOnRoaXMuZ2V0U2V0dGluZygibWVzc2FnZSIpLCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgaSYmKGk9e3RpdGxlOml9KSwhKG51bGwhPT0odD1pKSYmdm9pZCAwIT09dCYmdC50aXRsZSkmJiEobnVsbCE9PShlPWkpJiZ2b2lkIDAhPT1lJiZlLmRlc2NyaXB0aW9uKSYmIShudWxsIT09KHI9aSkmJnZvaWQgMCE9PXImJnIuYnV0dG9ucykmJihpPXt9LG49PT1xaWUuRklMVEVS''@;'; put 'put ''Uz8oaS50aXRsZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKG50ZSksaS5kZXNjcmlwdGlvbj10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHJ0ZSksaS5idXR0b25zPVt7dGV4dDp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGl0ZSksdHlwZToic2Vjb25kYXJ5IixjYWxs''@;'; put 'put ''YmFjazooKT0+e2NvbnN0IGE9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7YSYmKGEuY2xlYXJDb25kaXRpb25zKCksYS5maWx0ZXIoKSl9fV0pOihpLnRpdGxlPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoZXRlKSxpLmRlc2NyaXB0aW9uPXRoaXMuaG90LmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UodHRlKSkpLGl9ZnVuY3Rpb24gSmllKCl7dGhpcy5ob3QudmlldyYmKDA9PT10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKXx8MD09PXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpP2p1KHAwLHRoaXMsVEN0KS5jYWxsKHRoaXMpOmp1KHAw''@;'; put 'put ''LHRoaXMsQUN0KS5jYWxsKHRoaXMpKX1mdW5jdGlvbiBUQ3QoKXtydShXeSx0aGlzKXx8KHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVFbXB0eURhdGFTdGF0ZVNob3ciKSxqdShwMCx0aGlzLFFpZSkuY2FsbCh0aGlzKSxydShSMCx0aGlzKS5zaG93KCksV2goV3ksdGhpcywhMCksV2goVVMs''@;'; put 'put ''dGhpcyx0aGlzLmhvdC5zZWxlY3Rpb24uZXhwb3J0U2VsZWN0aW9uKCkpLHRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkuYWN0aXZhdGVTY29wZShVeSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRW1wdHlEYXRhU3RhdGVTaG93IikpfWZ1bmN0aW9uIFFpZSgpe3J1KEJqLHRoaXMp''@;'; put 'put ''P3J1KFIwLHRoaXMpLnVwZGF0ZUNvbnRlbnQoanUocDAsdGhpcyxoX2UpLmNhbGwodGhpcyxxaWUuRklMVEVSUykpOnJ1KFIwLHRoaXMpLnVwZGF0ZUNvbnRlbnQoanUocDAsdGhpcyxoX2UpLmNhbGwodGhpcyxxaWUuVU5LTk9XTikpfWZ1bmN0aW9uIEFDdCgpe3ZhciBuO3J1KFd5LHRoaXMp''@;'; put 'put ''JiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUVtcHR5RGF0YVN0YXRlSGlkZSIpLHJ1KFIwLHRoaXMpLmhpZGUoKSxXaChXeSx0aGlzLCExKSx0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmRlYWN0aXZhdGVTY29wZShVeSksKG51bGw9PT0obj1ydShVUyx0aGlzKSl8fHZvaWQg''@;'; put 'put ''MD09PW4/dm9pZCAwOm4ucmFuZ2VzLmxlbmd0aCk+MD8odGhpcy5ob3Quc2VsZWN0aW9uLmltcG9ydFNlbGVjdGlvbihydShVUyx0aGlzKSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKSxXaChVUyx0aGlzLG51bGwpKTp0aGlzLmhvdC5zZWxlY3RDZWxsKDAsMCksdGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''ImFmdGVyRW1wdHlEYXRhU3RhdGVIaWRlIikpfWZ1bmN0aW9uIGtDdChuKXtjb25zdCB0PU51bWJlci5pc05hTihuLmRlbHRhWCk/LTEqbi53aGVlbERlbHRhWDpuLmRlbHRhWDswIT09dCYmdGhpcy5ob3Qudmlldy5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJiF0aGlzLmhvdC52aWV3LmlzSG9y''@;'; put 'put ''aXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJih0aGlzLmhvdC52aWV3LnNldFRhYmxlU2Nyb2xsUG9zaXRpb24oe2xlZnQ6dGhpcy5ob3Qudmlldy5nZXRUYWJsZVNjcm9sbFBvc2l0aW9uKCkubGVmdCt0fSksbi5wcmV2ZW50RGVmYXVsdCgpKX1mdW5jdGlvbiBEQ3QoKXtqdShwMCx0''@;'; put 'put ''aGlzLEppZSkuY2FsbCh0aGlzKSx0aGlzLmhvdC5yZW5kZXIoKX1mdW5jdGlvbiBJQ3QoKXt2YXIgbjtudWxsIT09KG49cnUoUjAsdGhpcykpJiZ2b2lkIDAhPT1uJiZuLmdldEVsZW1lbnQoKSYmdGhpcy5pc1Zpc2libGUoKSYmKHJ1KFIwLHRoaXMpLnVwZGF0ZVNpemUodGhpcy5ob3Qudmll''@;'; put 'put ''dykscnUoUjAsdGhpcykudXBkYXRlQ2xhc3NOYW1lcyh0aGlzLmhvdC52aWV3KSl9ZnVuY3Rpb24gUkN0KG4pe1doKEJqLHRoaXMsbj8ubGVuZ3RoPjApLHRoaXMuaXNWaXNpYmxlKCkmJmp1KHAwLHRoaXMsUWllKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFFEKCl7KGZ1bmN0aW9uIEZodCgpe2to''@;'; put 'put ''KFZDKSxraChIdGUpLGtoKG84ZSksa2gocDhlKSxraChnOGUpLGtoKEx0ZSksa2gobThlKSxraCh2OGUpLGtoKF84ZSksa2goS3YpLGtoKGI4ZSl9KSgpLGZ1bmN0aW9uIGFmdCgpe0QyKEJDKSxEMihMayksRDIoJHRlKSxEMihHdGUpLEQyKFh0ZSksRDIoWXRlKSxEMihhbmUpLEQyKG9uZSks''@;'; put 'put ''RDIoc25lKSxEMih4NSksRDIobG5lKX0oKSxmdW5jdGlvbiBmZnQoKXtPdihIayksT3YoY25lKSxPdih4ViksT3YodW5lKSxPdihFVil9KCksZnVuY3Rpb24gQWZ0KCl7cWYocGZ0KSxxZihtZnQpLHFmKHlmdCkscWYod2Z0KSxxZihDZnQpLHFmKE1mdCkscWYoeGZ0KSxxZihFZnQpLHFmKFE2''@;'; put 'put ''ZSkscWYoVGZ0KX0oKSxmdW5jdGlvbiBMQ3QoKXtTcyhCayksU3MobzN0KSxTcyh6ayksU3MoajN0KSxTcyhLM3QpLFNzKEQ3ZSksU3MoWXB0KSxTcyhiNHQpLFNzKG9CKSxTcyhCZ3QpLFNzKGg1dCksU3ModzV0KSxTcyhnQiksU3Mob210KSxTcyhyOHQpLFNzKE44dCksU3MoZDd0KSxTcyhT''@;'; put 'put ''N3QpLFNzKFA3dCksU3MoSzd0KSxTcyhhOXQpLFNzKEU5dCksU3MoUDl0KSxTcyhfdnQpLFNzKHF2dCksU3Mobnl0KSxTcyhreXQpLFNzKF9fdCksU3MoS190KSxTcyh2YnQpLFNzKEVidCksU3MoQmJ0KSxTcyhLYnQpLFNzKG93dCksU3MoV3d0KSxTcyhOaiksU3MoZEN0KSxTcyh3Q3QpfSgp''@;'; put 'put ''fVFEKCksZnVuY3Rpb24gT0N0KG4pe2NvbnN0IHQ9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7dCYmKHQuZm4uaGFuZHNvbnRhYmxlPWZ1bmN0aW9uKGUpe2NvbnN0IHI9dGhpcy5maXJzdCgpO2xldCBhLGk9ci5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9''@;'; put 'put ''dHlwZW9mIGUpe2NvbnN0IFA9ZXx8e307cmV0dXJuIGk/aS51cGRhdGVTZXR0aW5ncyhQKTooaT1uZXcgbi5Db3JlKHJbMF0sUCksci5kYXRhKCJoYW5kc29udGFibGUiLGkpLGkuaW5pdCgpKSxyfWlmKGkpe2lmKCEodHlwZW9mIGlbZV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250''@;'; put 'put ''YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7ZX1gKTtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxtPW5ldyBBcnJheShjPjE/Yy0xOjApLEM9MTtDPGM7QysrKW1bQy0xXT1hcmd1bWVudHNbQ107YT1pW2VdLmNhbGwoaSwuLi5tKSwiZGVzdHJveSI9PT1lJiZyLnJlbW92ZURhdGEo''@;'; put 'put ''KX1yZXR1cm4gYX0pfSh2cyksdnMuX19HaG9zdFRhYmxlPWhuZSx2cy5fZ2V0TGlzdGVuZXJzQ291bnRlcj1mdW5jdGlvbiBDb3QoKXtyZXR1cm4gZ059LHZzLl9nZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXI9ZnVuY3Rpb24gZ3V0KCl7cmV0dXJuIHZRfSx2cy5FdmVudE1hbmFnZXI9WmY7Y29u''@;'; put 'put ''c3QgUEN0PVtTLFQsRixILGYsTSxoLEIsSSxvLE8sRV0sRkN0PVtBLERdO3ZzLmhlbHBlcj17fSx2cy5kb209e30sWW4oUEN0LG49PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSx0PT57Il8iIT09dC5jaGFyQXQoMCkmJih2cy5oZWxwZXJbdF09blt0XSl9KX0pLFluKEZDdCxu''@;'; put 'put ''PT57WW4oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobiksdD0+eyJfIiE9PXQuY2hhckF0KDApJiYodnMuZG9tW3RdPW5bdF0pfSl9KSx2cy5jZWxsVHlwZXM9bnVsbCE9PShlYWU9dnMuY2VsbFR5cGVzKSYmdm9pZCAwIT09ZWFlP2VhZTp7fSxZbihBMHQoKSxuPT57dnMuY2VsbFR5cGVz''@;'; put 'put ''W25dPW10ZShuKX0pLHZzLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlPXFmLHZzLmNlbGxUeXBlcy5nZXRDZWxsVHlwZT1tdGUsdnMuZWRpdG9ycz1udWxsIT09KHRhZT12cy5lZGl0b3JzKSYmdm9pZCAwIT09dGFlP3RhZTp7fSxZbihnb3QoKSxuPT57dnMuZWRpdG9yc1tgJHtlZChuKX1F''@;'; put 'put ''ZGl0b3JgXT1wTihuKX0pLHZzLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9a2gsdnMuZWRpdG9ycy5nZXRFZGl0b3I9cE4sdnMucmVuZGVyZXJzPW51bGwhPT0obmFlPXZzLnJlbmRlcmVycykmJnZvaWQgMCE9PW5hZT9uYWU6e30sWW4oVW90KCksbj0+e2NvbnN0IHQ9dk4obik7ImJhc2UiPT09''@;'; put 'put ''biYmKHZzLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPXQpLHZzLnJlbmRlcmVyc1tgJHtlZChuKX1SZW5kZXJlcmBdPXR9KSx2cy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1EMix2cy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9dk4sdnMudmFsaWRhdG9ycz1udWxsIT09KHJhZT12cy52YWxp''@;'; put 'put ''ZGF0b3JzKSYmdm9pZCAwIT09cmFlP3JhZTp7fSxZbihZb3QoKSxuPT57dnMudmFsaWRhdG9yc1tgJHtlZChuKX1WYWxpZGF0b3JgXT1PSihuKX0pLHZzLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9T3YsdnMudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9T0osdnMucGx1Z2lucz1udWxs''@;'; put 'put ''IT09KGlhZT12cy5wbHVnaW5zKSYmdm9pZCAwIT09aWFlP2lhZTp7fSxZbihMSigpLG49Pnt2cy5wbHVnaW5zW25dPXJrKG4pfSksdnMucGx1Z2luc1tgJHtlZChNcy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1Ncyx2cy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPVNzLHZzLnBsdWdpbnMuZ2V0UGx1''@;'; put 'put ''Z2luPXJrO2NvbnN0IFdTPXZzLEhDdD1bImlucHV0UGxhY2Vob2xkZXIiXTtmdW5jdGlvbiBOQ3Qobix0KXt9Y29uc3QgVkN0PVsiY29udGFpbmVyIl07bGV0IEJDdD0oKCk9PntjbGFzcyBue3RvcDtsZWZ0O2hlaWdodDt3aWR0aDtzZXQgaXNWaXNpYmxlKGUpe3RoaXMuX2lzVmlzaWJsZT1l''@;'; put 'put ''fXNldCBjb21wb25lbnRSZWYoZSl7ZSYmdGhpcy5jb250YWluZXIuaW5zZXJ0KGUuaG9zdFZpZXcpfWNvbnRhaW5lcjtnZXQgZGlzcGxheSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9X2lzVmlzaWJsZT0hMTtkZXRhY2hFZGl0b3IoKXt0aGlzLmNvbnRhaW5lci5k''@;'; put 'put ''ZXRhY2goKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9O3N0YXRpYyBcdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihyLGkpe2lmKDEmciYmV2EoSEN0LDcsTm4pLDImcil7bGV0''@;'; put 'put ''IGE7ZGkoYT1oaSgpKSYmKGkuY29udGFpbmVyPWEuZmlyc3QpfX0saW5wdXRzOnt0b3A6InRvcCIsbGVmdDoibGVmdCIsaGVpZ2h0OiJoZWlnaHQiLHdpZHRoOiJ3aWR0aCIsaXNWaXNpYmxlOiJpc1Zpc2libGUiLGNvbXBvbmVudFJlZjoiY29tcG9uZW50UmVmIn0sc3RhbmRhbG9uZTohMSxk''@;'; put 'put ''ZWNsczozLHZhcnM6MTQsY29uc3RzOltbImlucHV0UGxhY2Vob2xkZXIiLCIiXSxbMSwiaGFuZHNvbnRhYmxlSW5wdXRIb2xkZXIiLCJodF9jbG9uZV9tYXN0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihyZSgwLCJkaXYiLDEpLGN0KDEsTkN0LDAsMCwibmctdGVtcGxhdGUi''@;'; put 'put ''LG51bGwsMCxDYyksaWUoKSksMiZyJiZUZCgiZGlzcGxheSIsaS5kaXNwbGF5KSgid2lkdGgiLGkud2lkdGgsInB4IikoImhlaWdodCIsaS5oZWlnaHQsInB4IikoIm1heC13aWR0aCIsaS53aWR0aCwicHgiKSgibWF4LWhlaWdodCIsaS5oZWlnaHQsInB4IikoInRvcCIsaS50b3AsInB4Iiko''@;'; put 'put ''ImxlZnQiLGkubGVmdCwicHgiKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9cmV0dXJuIG59KSgpO2NsYXNzIGpDdCBleHRlbmRzIFdTLmVkaXRvcnMuQmFzZUVkaXRvcntfY29tcG9uZW50UmVmO19lZGl0b3JQbGFjZUhvbGRlclJlZjtfaXNQbGFjZWhvbGRlclJlYWR5''@;'; put 'put ''PSExO19maW5pc2hFZGl0U3Vic2NyaXB0aW9uO19jYW5jZWxFZGl0U3Vic2NyaXB0aW9uO2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93UmVzaXplIix0aGlzLm9uQWZ0ZXJSb3dSZXNpemUuYmluZCh0aGlzKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJDb2x1bW5SZXNpemUiLHRoaXMub25BZnRlckNvbHVtblJlc2l6ZS5iaW5kKHRoaXMpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLHRoaXMub25BZnRlckRlc3Ryb3kuYmluZCh0aGlzKSl9cHJlcGFyZSh0LGUscixpLGEsYyl7aWYoIXRoaXMuaXNPcGVuZWQoKSl7c3VwZXIu''@;'; put 'put ''cHJlcGFyZSh0LGUscixpLGEsYyk7Y29uc3QgbT10aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGUpO3RoaXMuX2lzUGxhY2Vob2xkZXJSZWFkeXx8KHRoaXMuY3JlYXRlRWRpdG9yUGxhY2Vob2xkZXIobS5fZW52aXJvbm1lbnRJbmplY3RvciksdGhpcy5faXNQbGFjZWhvbGRlclJlYWR5PSEwKSx0''@;'; put 'put ''aGlzLl9jb21wb25lbnRSZWY9bS5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlLHRoaXMuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb24mJih0aGlzLl9maW5pc2hFZGl0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuX2Nh''@;'; put 'put ''bmNlbEVkaXRTdWJzY3JpcHRpb24mJih0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2FuY2VsRWRpdFN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb249dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmZpbmlz''@;'; put 'put ''aEVkaXQucGlwZShHMygxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5maW5pc2hFZGl0aW5nKCl9KSx0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uPXRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5jYW5jZWxFZGl0LnBpcGUoRzMoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2FuY2VsQ2hh''@;'; put 'put ''bmdlcygpfSl9fWNsb3NlKCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5yZXNldEVkaXRvclN0YXRlKCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLmluc3RhbmNlLmRldGFjaEVk''@;'; put 'put ''aXRvcigpLHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5vbkNsb3NlKCkpfWZvY3VzKCl7dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLm9uRm9jdXMoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2U/LmdldFZhbHVlKCl9b3Blbih0KXt0aGlzLmhv''@;'; put 'put ''dC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5hcHBseVByb3BzVG9FZGl0b3IoKSx0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2Uub25PcGVuKHQpfXNldFZhbHVlKHQpe3RoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZT8uc2V0VmFs''@;'; put 'put ''dWUodCksdGhpcy5fY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX1hcHBseVByb3BzVG9FZGl0b3IoKXtjb25zdCB0PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKXx8dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNl''@;'; put 'put ''LnNldFZhbHVlKG51bGwpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgib3JpZ2luYWxWYWx1ZSIsdGhpcy5vcmlnaW5hbFZhbHVlKSx0aGlzLl9jb21wb25lbnRSZWYuc2V0SW5wdXQoInJvdyIsdGhpcy5yb3cpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgiY29sdW1uIix0aGlz''@;'; put 'put ''LmNvbCksdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCJwcm9wIix0aGlzLnByb3ApLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgiY2VsbFByb3BlcnRpZXMiLHRoaXMuY2VsbFByb3BlcnRpZXMpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ0b3AiLHQudG9w''@;'; put 'put ''KSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgibGVmdCIsdC5zdGFydCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImhlaWdodCIsdC5oZWlnaHQpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ3aWR0aCIsdC53aWR0aCksdGhp''@;'; put 'put ''cy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImlzVmlzaWJsZSIsITApLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJjb21wb25lbnRSZWYiLHRoaXMuX2NvbXBvbmVudFJlZiksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuY2hhbmdlRGV0ZWN0b3JSZWYu''@;'; put 'put ''ZGV0ZWN0Q2hhbmdlcygpfWNyZWF0ZUVkaXRvclBsYWNlaG9sZGVyKHQpe3RoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmPUNQKEJDdCx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0fSksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYubG9j''@;'; put 'put ''YXRpb24ubmF0aXZlRWxlbWVudCl9b25BZnRlckNvbHVtblJlc2l6ZSgpe3RoaXMuaXNPcGVuZWQoKSYmdGhpcy5hcHBseVByb3BzVG9FZGl0b3IoKX1vbkFmdGVyUm93UmVzaXplKCl7dGhpcy5pc09wZW5lZCgpJiZ0aGlzLmFwcGx5UHJvcHNUb0VkaXRvcigpfW9uQWZ0ZXJEZXN0cm95KCl7''@;'; put 'put ''dGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWY/LmRlc3Ryb3koKX1yZXNldEVkaXRvclN0YXRlKCl7dGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoInRvcCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgibGVmdCIsdm9pZCAwKSx0aGlzLl9l''@;'; put 'put ''ZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaGVpZ2h0Iix2b2lkIDApLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ3aWR0aCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaXNWaXNpYmxlIiwhMSksdGhpcy5fZWRpdG9yUGxh''@;'; put 'put ''Y2VIb2xkZXJSZWYuc2V0SW5wdXQoImNvbXBvbmVudFJlZiIsdm9pZCAwKX19Y2xhc3Mgamp7c3RhdGljIFJFTkRFUkVSX01BUktFUj1TeW1ib2woIkhvdENlbGxSZW5kZXJlckNvbXBvbmVudCIpO3ZhbHVlPSIiO2luc3RhbmNlO3RkO3Jvdztjb2w7cHJvcDtjZWxsUHJvcGVydGllcztnZXRQ''@;'; put 'put ''cm9wcygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5yZW5kZXJlclByb3BzPz97fX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8amopfTtzdGF0aWMgXHUwMjc1Y21wPVZyKHt0eXBlOmpqLHNlbGVjdG9yczpbWyJob3QtY2VsbC1yZW5kZXJlciJdXSxp''@;'; put 'put ''bnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsaW5zdGFuY2U6Imluc3RhbmNlIix0ZDoidGQiLHJvdzoicm93Iixjb2w6ImNvbCIscHJvcDoicHJvcCIsY2VsbFByb3BlcnRpZXM6ImNlbGxQcm9wZXJ0aWVzIn0sc3RhbmRhbG9uZTohMSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLHIp''@;'; put 'put ''e30sZW5jYXBzdWxhdGlvbjoyfSl9ZnVuY3Rpb24gZl9lKG4pe3JldHVybiBuPy5SRU5ERVJFUl9NQVJLRVI9PT1qai5SRU5ERVJFUl9NQVJLRVJ9bGV0IFdDdD0oKCk9PntjbGFzcyBue2FwcFJlZjtlbnZpcm9ubWVudEluamVjdG9yO2NvbnN0cnVjdG9yKGUscil7dGhpcy5hcHBSZWY9ZSx0''@;'; put 'put ''aGlzLmVudmlyb25tZW50SW5qZWN0b3I9cn1jcmVhdGVSZW5kZXJlckZyb21Db21wb25lbnQoZSxyPXt9LGk9ITEpe3JldHVybihhLGMsbSxDLFAsWSxKKT0+e2NvbnN0IGNlPXt2YWx1ZTpZLGluc3RhbmNlOmEsdGQ6Yyxyb3c6bSxjb2w6Qyxwcm9wOlAsY2VsbFByb3BlcnRpZXM6Sn07aWYo''@;'; put 'put ''ciYmT2JqZWN0LmFzc2lnbihKLHtyZW5kZXJlclByb3BzOnJ9KSxXUy5yZW5kZXJlcnMuQmFzZVJlbmRlcmVyLmFwcGx5KHRoaXMsW2EsYyxtLEMsUCxZLEpdKSxjLmlubmVySFRNTD0iIixmdW5jdGlvbiBVQ3Qobil7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNyZWF0ZUVtYmVk''@;'; put 'put ''ZGVkVmlld30oZSkpdGhpcy5hdHRhY2hUZW1wbGF0ZVRvRWxlbWVudChlLGMsY2UpO2Vsc2UgaWYoZl9lKGUpKXtjb25zdCBBZT10aGlzLmNyZWF0ZUNvbXBvbmVudChlLGNlKTt0aGlzLmF0dGFjaENvbXBvbmVudFRvRWxlbWVudChBZSxjKX1lbHNlIGNvbnNvbGUud2FybigiVGhlIHByb3Zp''@;'; put 'put ''ZGVkIHJlbmRlcmVyIGNvbXBvbmVudCB3YXMgbm90IHJlY29nbml6ZWQgYXMgYSB2YWxpZCBjdXN0b20gcmVuZGVyZXIuIEl0IG11c3QgZWl0aGVyIGV4dGVuZCBIb3RDZWxsUmVuZGVyZXJDb21wb25lbnQgb3IgYmUgYSB2YWxpZCBUZW1wbGF0ZVJlZi4gUGxlYXNlIGVuc3VyZSB0aGF0IHlv''@;'; put 'put ''dXIgY3VzdG9tIHJlbmRlcmVyIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSBhbmQgaW1wb3J0ZWQgZnJvbSB0aGUgcHJvcGVyIHNvdXJjZS4iKTtyZXR1cm4gaSYmZl9lKGUpJiZXUy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcihlLmNvbnN0cnVjdG9yLm5hbWUsZSksY319YXR0YWNoVGVt''@;'; put 'put ''cGxhdGVUb0VsZW1lbnQoZSxyLGkpe2NvbnN0IGE9ZS5jcmVhdGVFbWJlZGRlZFZpZXcoeyRpbXBsaWNpdDppLnZhbHVlLC4uLml9KTthLmRldGVjdENoYW5nZXMoKSxhLnJvb3ROb2Rlcy5mb3JFYWNoKGM9PntyLmFwcGVuZENoaWxkKGMpfSl9Y3JlYXRlQ29tcG9uZW50KGUscil7Y29uc3Qg''@;'; put 'put ''aT1DUChlLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcn0pO3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGE9PntyLmhhc093blByb3BlcnR5KGEpP2kuc2V0SW5wdXQoYSxyW2FdKTpjb25zb2xlLndhcm4oYElucHV0IHByb3BlcnR5ICIke2F9IiBk''@;'; put 'put ''b2VzIG5vdCBleGlzdCBvbiBjb21wb25lbnQgaW5zdGFuY2U6ICR7ZT8ubmFtZX0uYCl9KSxpLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGkuaG9zdFZpZXcpLGl9YXR0YWNoQ29tcG9uZW50VG9FbGVtZW50KGUscil7ci5hcHBlbmRD''@;'; put 'put ''aGlsZChlLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSl9ZGVzdHJveUNvbXBvbmVudChlKXt0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KGUuaG9zdFZpZXcpLGUuZGVzdHJveSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihFZCksT3IodWMpKX07c3RhdGlj''@;'; put 'put ''IFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKTtjb25zdCBaQ3Q9T2JqZWN0LmtleXModnMuRGVmYXVsdFNldHRpbmdzKSxwX2U9dnMuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO2xldCBnX2U9KCgpPT57Y2xh''@;'; put 'put ''c3MgbntkeW5hbWljQ29tcG9uZW50U2VydmljZTtlbnZpcm9ubWVudEluamVjdG9yO2NvbnN0cnVjdG9yKGUscil7dGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZT1lLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1yfWFwcGx5Q3VzdG9tU2V0dGluZ3MoZSxyKXtjb25zdCBpPWU7cmV0dXJu''@;'; put 'put ''IHRoaXMudXBkYXRlQ29sdW1uUmVuZGVyZXJGb3JHaXZlbkN1c3RvbVJlbmRlcmVyKGkpLHRoaXMudXBkYXRlQ29sdW1uRWRpdG9yRm9yR2l2ZW5DdXN0b21FZGl0b3IoaSksdGhpcy51cGRhdGVDb2x1bW5WYWxpZGF0b3JGb3JHaXZlbkN1c3RvbVZhbGlkYXRvcihpKSx0aGlzLndyYXBIb29r''@;'; put 'put ''c0luTmdab25lKGksciksaT8/e319d3JhcEhvb2tzSW5OZ1pvbmUoZSxyKXtwX2UuY29uY2F0KFpDdCkuZm9yRWFjaChhPT57Y29uc3QgYz1wX2UuaW5kZXhPZihhKT4tMTtsZXQgbTtjJiYobT1lW2FdKSx2b2lkIDAhPT1tJiYoZVthXT1yJiYiZnVuY3Rpb24iPT10eXBlb2YgbSYmYz9mdW5j''@;'; put 'put ''dGlvbiguLi5DKXtyZXR1cm4gci5ydW4oKCk9Pm0uYXBwbHkodGhpcyxDKSl9Om0pfSl9dXBkYXRlQ29sdW1uUmVuZGVyZXJGb3JHaXZlbkN1c3RvbVJlbmRlcmVyKGUpe0FycmF5LmlzQXJyYXkoZT8uY29sdW1ucykmJmU/LmNvbHVtbnM/LmZpbHRlcihyPT50aGlzLmlzUmVuZGVyZXJDb21w''@;'; put 'put ''b25lbnRSZWZUeXBlKHIucmVuZGVyZXIpfHx0aGlzLmlzVGVtcGxhdGVSZWYoci5yZW5kZXJlcikpPy5mb3JFYWNoKHI9Pntjb25zdCBpPSh0aGlzLmlzVGVtcGxhdGVSZWYoci5yZW5kZXJlciksci5yZW5kZXJlcik7ci5yZW5kZXJlcj10aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNy''@;'; put 'put ''ZWF0ZVJlbmRlcmVyRnJvbUNvbXBvbmVudChpLHIucmVuZGVyZXJQcm9wcz8/e30pfSl9dXBkYXRlQ29sdW1uRWRpdG9yRm9yR2l2ZW5DdXN0b21FZGl0b3IoZSl7QXJyYXkuaXNBcnJheShlPy5jb2x1bW5zKSYmZT8uY29sdW1ucz8uZmlsdGVyKHI9PnRoaXMuaXNFZGl0b3JDb21wb25lbnRS''@;'; put 'put ''ZWZUeXBlKHIuZWRpdG9yKSk/LmZvckVhY2gocj0+e3IuX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZT1DUChyLmVkaXRvcix7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlzLmVudmlyb25tZW50SW5qZWN0b3J9KSxyLl9lbnZpcm9ubWVudEluamVjdG9yPXRoaXMuZW52aXJvbm1lbnRJbmplY3Rv''@;'; put 'put ''cixyLmVkaXRvcj1qQ3R9KX11cGRhdGVDb2x1bW5WYWxpZGF0b3JGb3JHaXZlbkN1c3RvbVZhbGlkYXRvcihlKXtBcnJheS5pc0FycmF5KGU/LmNvbHVtbnMpJiZlPy5jb2x1bW5zPy5maWx0ZXIocj0+dGhpcy5pc0N1c3RvbVZhbGlkYXRvckZuKHIudmFsaWRhdG9yKSk/LmZvckVhY2gocj0+''@;'; put 'put ''e2NvbnN0IGk9ci52YWxpZGF0b3I7ci52YWxpZGF0b3I9KGEsYyk9PntjKGkoYSkpfX0pfWlzQ3VzdG9tVmFsaWRhdG9yRm4oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJjE9PT1lLmxlbmd0aH1pc0VkaXRvckNvbXBvbmVudFJlZlR5cGUoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGUmJiEhZT8uXHUwMjc1Y21wfWlzUmVuZGVyZXJDb21wb25lbnRSZWZUeXBlKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYhIWU/Llx1MDI3NWNtcH1pc1RlbXBsYXRlUmVmKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jcmVhdGVFbWJlZGRlZFZpZXd9c3Rh''@;'; put 'put ''dGljIFx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKE9yKFdDdCksT3IodWMpKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pfXJldHVybiBufSkoKTtjb25zdCBHQ3Q9bmV3IHdyKCJIT1RfR0xPQkFMX0NPTkZJRyIse3By''@;'; put 'put ''b3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KTtsZXQgJEN0PSgoKT0+e2NsYXNzIG57ZGVmYXVsdENvbmZpZz17bGljZW5zZTp2b2lkIDAsdGhlbWVOYW1lOiIifTtjb25maWdTdWJqZWN0PW5ldyB4aSh0aGlzLmRlZmF1bHRDb25maWcpO2dldCBjb25maWckKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29uZmlnU3ViamVjdC5hc09ic2VydmFibGUoKX1jb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRDb25maWc9ey4uLnRoaXMuZGVmYXVsdENvbmZpZywuLi5lfSx0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLmRlZmF1bHRDb25maWcpfXNldENvbmZpZyhlKXt0aGlzLmNvbmZpZ1N1''@;'; put 'put ''YmplY3QubmV4dCh7Li4udGhpcy5kZWZhdWx0Q29uZmlnLC4uLmV9KX1nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5jb25maWdTdWJqZWN0LnZhbHVlfXJlc2V0Q29uZmlnKCl7dGhpcy5jb25maWdTdWJqZWN0Lm5leHQoey4uLnRoaXMuZGVmYXVsdENvbmZpZ30pfXN0YXRpYyBcdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihHQ3QpKX07c3RhdGljIFx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBufSkoKSxHNT0oKCk9PntjbGFzcyBue19ob3RTZXR0aW5nc1Jlc29sdmVyO19ob3RD''@;'; put 'put ''b25maWc7bmdab25lO2RhdGE9bnVsbDtzZXR0aW5ncz17fTtjb250YWluZXI7X19ob3RJbnN0YW5jZT1udWxsO2NvbmZpZ1N1YnNjcmlwdGlvbjtjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlcj1lLHRoaXMuX2hvdENvbmZpZz1yLHRoaXMubmdab25lPWl9Z2V0''@;'; put 'put ''IGhvdEluc3RhbmNlKCl7cmV0dXJuIXRoaXMuX19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlJiYhdGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkP3RoaXMuX19ob3RJbnN0YW5jZTooY29uc29sZS53YXJuKCJUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5kIHRvIHRo''@;'; put 'put ''aXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHByb3Blcmx5LiIpLG51bGwpfXNldCBob3RJbnN0YW5jZShlKXt0aGlzLl9faG90SW5zdGFuY2U9ZX1uZ0FmdGVyVmlld0luaXQoKXtsZXQgZT10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLmFwcGx5Q3VzdG9t''@;'; put 'put ''U2V0dGluZ3ModGhpcy5zZXR0aW5ncyx0aGlzLm5nWm9uZSk7Y29uc3Qgcj10aGlzLmdldE5lZ290aWF0ZWRTZXR0aW5ncyhlKTtlPXsuLi5lLC4uLnIsZGF0YTp0aGlzLmRhdGF9LHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZT1uZXcgdnMuQ29y''@;'; put 'put ''ZSh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LGUpLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSksdGhpcy5jb25maWdTdWJzY3JpcHRpb249dGhpcy5faG90Q29uZmlnLmNvbmZpZyQuc3Vic2NyaWJlKGk9PntpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBhPXRoaXMuZ2V0TmVnb3Rp''@;'; put 'put ''YXRlZFNldHRpbmdzKHRoaXMuc2V0dGluZ3MpO3RoaXMudXBkYXRlSG90VGFibGUoYSl9fSl9bmdPbkNoYW5nZXMoZSl7aWYobnVsbCE9PXRoaXMuaG90SW5zdGFuY2Upe2lmKGUuc2V0dGluZ3MmJiFlLnNldHRpbmdzLmZpcnN0Q2hhbmdlKXtjb25zdCByPXRoaXMuX2hvdFNldHRpbmdzUmVz''@;'; put 'put ''b2x2ZXIuYXBwbHlDdXN0b21TZXR0aW5ncyhlLnNldHRpbmdzLmN1cnJlbnRWYWx1ZSx0aGlzLm5nWm9uZSk7dGhpcy51cGRhdGVIb3RUYWJsZShyKX1lLmRhdGEmJiFlLmRhdGEuZmlyc3RDaGFuZ2UmJnRoaXMuaG90SW5zdGFuY2U/LnVwZGF0ZURhdGEoZS5kYXRhLmN1cnJlbnRWYWx1ZSl9''@;'; put 'put ''fW5nT25EZXN0cm95KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZighdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm47Y29uc3QgZT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY29sdW1ucztlJiZBcnJheS5pc0FycmF5KGUpJiZlLmZvckVhY2gocj0+e3IuX2Vk''@;'; put 'put ''aXRvckNvbXBvbmVudFJlZmVyZW5jZSYmci5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlLmRlc3Ryb3koKX0pLHRoaXMuaG90SW5zdGFuY2UuZGVzdHJveSgpfSksdGhpcy5jb25maWdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVIb3RUYWJsZShlKXt0aGlzLmhvdEluc3RhbmNl''@;'; put 'put ''JiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2U/LnVwZGF0ZVNldHRpbmdzKGUsITEpfSl9Z2V0TmVnb3RpYXRlZFNldHRpbmdzKGUpe2NvbnN0IHI9dGhpcy5faG90Q29uZmlnLmdldENvbmZpZygpLGk9e307cmV0dXJuIGkubGljZW5zZUtleT1l''@;'; put 'put ''LmxpY2Vuc2VLZXk/P3IubGljZW5zZSxpLnRoZW1lTmFtZT1lLnRoZW1lTmFtZT8/ci50aGVtZU5hbWUsaS5sYW5ndWFnZT1lLmxhbmd1YWdlPz9yLmxhbmd1YWdlLHRoaXMuX19ob3RJbnN0YW5jZXx8KGkubGF5b3V0RGlyZWN0aW9uPWUubGF5b3V0RGlyZWN0aW9uPz9yLmxheW91dERpcmVj''@;'; put 'put ''dGlvbiksaX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoZ19lKSxXZSgkQ3QpLFdlKEphKSl9O3N0YXRpYyBcdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihyLGkpe2lmKDEmciYm''@;'; put 'put ''V2EoVkN0LDUpLDImcil7bGV0IGE7ZGkoYT1oaSgpKSYmKGkuY29udGFpbmVyPWEuZmlyc3QpfX0saW5wdXRzOntkYXRhOiJkYXRhIixzZXR0aW5nczoic2V0dGluZ3MifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltzYShbZ19lXSksV3RdLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb250''@;'; put 'put ''YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJlZ0KDAsImRpdiIsbnVsbCwwKX0sc3R5bGVzOlsiOmhvc3R7ZGlzcGxheTpibG9ja31cbiJdLGVuY2Fwc3VsYXRpb246Mn0pfXJldHVybiBufSkoKSxaeT0oKCk9PntjbGFzcyBue3N0YXRpYyB2ZXJzaW9uPSIxNi4wLjEi''@;'; put 'put ''O2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBmb3JSb290KCl7cmV0dXJue25nTW9kdWxlOm59fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX07c3RhdGljIFx1MDI3NW1vZD1HaSh7dHlwZTpufSk7c3RhdGljIFx1MDI3NWluaj16bih7fSl9cmV0dXJuIG59KSgp''@;'; put 'put ''LGwzPSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYV19KX19cmV0dXJuIG59KSgpLFpTPSgo''@;'; put 'put ''KT0+e2NsYXNzIG57bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtwcm92aWRlcnM6W1UkLF80ZV0saW1wb3J0czpb''@;'; put 'put ''RmEsT2MsWWMsTTEsbDNdfSl9fXJldHVybiBufSkoKSxlST0oKCk9PntjbGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj16bih7aW1w''@;'; put 'put ''b3J0czpbRmFdfSl9fXJldHVybiBufSkoKSxtX2U9KCgpPT57Y2xhc3MgbntzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOm59KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9em4oe2ltcG9ydHM6''@;'; put 'put ''W0ZhLE0xLEZhLE9jXX0pfX1yZXR1cm4gbn0pKCksWXk9KCgpPT57Y2xhc3MgbntzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOm59KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9em4oe2ltcG9y''@;'; put 'put ''dHM6W0ZhLE9jLE0xLFljLFpTLGVJLGwzLG1fZV19KX19cmV0dXJuIG59KSgpO2Z1bmN0aW9uIHZfZShuKXtyZXR1cm4gbi5yZXBsYWNlKC9bJSY7XS9nLCIiKX1jbGFzcyBhYWV7Y29uc3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdfWFkZFRvUXVldWUodCl7dGhpcy5xdWV1ZS5wdXNoKC4uLnQp''@;'; put 'put ''fX1mdW5jdGlvbiB5X2Uobix0LGUpe2NvbnN0IHI9dC5maW5kKGk9PmkuQkFTRV9DT0w9PT1uJiYiTk9UTlVMTCI9PT1pLlJVTEVfVFlQRSk7aWYocj8uUlVMRV9WQUxVRSYmMCE9PXIuUlVMRV9WQUxVRS50cmltKCkubGVuZ3RoKXJldHVybiJudW1lcmljIiE9PWV8fGlzTmFOKE51bWJlcihy''@;'; put 'put ''LlJVTEVfVkFMVUUpKT9yLlJVTEVfVkFMVUU6TnVtYmVyKHIuUlVMRV9WQUxVRSl9Y29uc3Qgb2FlPShuLHQsZSk9Pntmb3IobGV0IHIgb2Ygbil7Y29uc3QgaT10LmZpbmQoYz0+Yy5kYXRhPT09ci5OQU1FKSxhPWUudmFyc1tyLk5BTUVdO2EmJihyLlRZUEU9WyJEQVRFIiwiREFURVRJTUUi''@;'; put 'put ''LCJUSU1FIl0uaW5jbHVkZXMoci5ERFRZUEUpPyJudW0iOmEudHlwZSksaSYmci5ERVNDJiYoaS5kZXNjPXIuREVTQyksaSYmYS5sZW5ndGgmJihpLmxlbmd0aD1wYXJzZUludChhLmxlbmd0aCkpLGkmJnIuQ0xTX1JVTEUmJihpLmNsc1J1bGU9ci5DTFNfUlVMRSksaSYmYT8udHlwZSYmKGku''@;'; put 'put ''c2FzVHlwZT1hLnR5cGUpfXJldHVybiB0fTtmdW5jdGlvbiBzYWUobix0KXtpZihudWxsPT1ufHwhaXNOYU4obikmJmlzRmluaXRlKG4pKXJldHVybiB0JiZ0KCEwKSwhMDtjb25zdCBlPSgwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKG4pO3JldHVybiB0JiZ0KGUpLGV9Y29uc3QgX19lPXtDQVNF''@;'; put 'put ''OihuLHQpPT57c3dpdGNoKHQpe2Nhc2UiVVBDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0uaW5jbHVkZXMobil8fCJzdHJpbmciPT10eXBlb2YgbiYmbi50b1N0cmluZygpPT09bi50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7Y2FzZSJMT1dDQVNFIjpyZXR1cm4hIVt2b2lkIDAsbnVsbF0u''@;'; put 'put ''aW5jbHVkZXMobil8fCJzdHJpbmciPT10eXBlb2YgbiYmbi50b1N0cmluZygpPT09bi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCl9cmV0dXJuITB9LE1JTlZBTDoobix0KT0+e2NvbnN0IGU9c2FlKG4pLHI9cGFyc2VGbG9hdChuKTtyZXR1cm4oIWV8fCFpc05hTihyKSkmJnI+PU51bWJlcih0''@;'; put 'put ''LnRvU3RyaW5nKCkpfSxNQVhWQUw6KG4sdCk9Pntjb25zdCBlPXNhZShuKSxyPXBhcnNlRmxvYXQobik7cmV0dXJuISghZXx8IWlzTmFOKHIpKXx8cjw9TnVtYmVyKHQudG9TdHJpbmcoKSl9LE5PVE5VTEw6KG4sdCk9Pm51bGwhPW4mJm4udG9TdHJpbmcoKS5sZW5ndGg+MH07dmFyIGxhZT1k''@;'; put 'put ''KDc4Mzc1KTtjbGFzcyBlU3QgZXh0ZW5kcyBXUy5lZGl0b3JzLkF1dG9jb21wbGV0ZUVkaXRvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCl9b3Blbih0KXtzdXBlci5vcGVuKHQpLHRoaXMuaXNDZWxsTnVtZXJpYygpP3Ro''@;'; put 'put ''aXMuaHRDb250YWluZXIuY2xhc3NMaXN0LmFkZCgibnVtZXJpY0xpc3Rib3giKTp0aGlzLmh0Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm51bWVyaWNMaXN0Ym94Iil9aXNDZWxsTnVtZXJpYygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5jbGFzc05hbWU/LmluY2x1ZGVzKCJo''@;'; put 'put ''dE51bWVyaWMiKX19Y2xhc3MgYl9le2NvbnN0cnVjdG9yKHQsZSxyLGksYSxjKXt0aGlzLnJ1bGVzPVtdLHRoaXMuZHFydWxlcz1bXSx0aGlzLmRxZGF0YT1bXSx0aGlzLmhpZGRlbkNvbHVtbnM9W10sdGhpcy5wcmltYXJ5S2V5cz1bXSx0aGlzLmV4ZWN1dGVIb3RWYWxpZGF0b3I9KG0sQyxQ''@;'; put 'put ''KT0+e2NvbnN0IFk9ey4uLm0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBXUyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1DJiYoQz0iIiksbSYm''@;'; put 'put ''bS52YWxpZGF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBtLnZhbGlkYXRvcj9tLnZhbGlkYXRvci5jYWxsKFksQyxKPT57UCYmUChKKX0pOlAmJlAoITEpfSx0aGlzLnJlZ2lzdGVyQ3VzdG9tRWRpdG9ycygpLHRoaXMuc2FzcGFyYW1zPXQsdGhpcy5ob3RJbnN0YW5jZT1jLHRoaXMucnVsZXM9''@;'; put 'put ''KG49Pnt0cnl7cmV0dXJuIEpTT04ucGFyc2UoYFske259XWApfWNhdGNoe3JldHVybltdfX0pKHQuQ09MVFlQRSksdGhpcy5ydWxlcz1vYWUocix0aGlzLnJ1bGVzLGUpLHRoaXMucnVsZXM9KG49PntpZighbGFlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKXJldHVybiBuO2ZvcihsZXQg''@;'; put 'put ''ZSBvZiBuKSJudW1lcmljIj09PWUudHlwZSYmKGUubnVtZXJpY0Zvcm1hdD17cGF0dGVybjoiMCwwIixjdWx0dXJlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9KTtyZXR1cm4gbn0pKHRoaXMucnVsZXMpLHRoaXMuZHFydWxlcz1pLHRoaXMuZHFkYXRhPWEsdGhpcy5wcmltYXJ5S2V5cz10''@;'; put 'put ''LlBLLnNwbGl0KCIgIiksdGhpcy51cGRhdGVEcURhdGEoKSx0aGlzLnNldHVwVmFsaWRhdGlvbnMoKX1yZWdpc3RlckN1c3RvbUVkaXRvcnMoKXtXUy5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yKCJhdXRvY29tcGxldGUuY3VzdG9tIixlU3QpfWdldFJ1bGVzKCl7cmV0dXJuIHRoaXMucnVsZXN9''@;'; put 'put ''Z2V0UnVsZSh0KXtjb25zdCBlPXRoaXMuZ2V0UnVsZUluZGV4KHQpO3JldHVybiB0aGlzLnJ1bGVzW2VdfWdldEhpZGRlbkNvbHVtbnMoKXtyZXR1cm4gdGhpcy5oaWRkZW5Db2x1bW5zfXVwZGF0ZVJ1bGUodCxlKXtsZXQgcj10aGlzLmdldFJ1bGVJbmRleCh0KTt0aGlzLnJ1bGVzW3JdPXsu''@;'; put 'put ''Li50aGlzLnJ1bGVzW3JdLC4uLmV9fXJlbW92ZVJ1bGUodCl7Y29uc3QgZT10aGlzLmdldFJ1bGVJbmRleCh0KTt0aGlzLnJ1bGVzLnNwbGljZShlLDEpfWdldERxRGV0YWlscyh0KXtyZXR1cm4gdD90aGlzLmRxcnVsZXMuZmlsdGVyKGU9PmUuQkFTRV9DT0w9PT10KTp0aGlzLmRxcnVsZXN9''@;'; put 'put ''aXNEcUNvbCh0KXtyZXR1cm4hIXRoaXMuZHFydWxlcy5maW5kKGU9PmUuQkFTRV9DT0w9PT10KX1oYXNEcVJ1bGVzKHQsZSxyPSExKXtyZXR1cm4gcj90aGlzLmRxcnVsZXMuZmlsdGVyKGk9PmkuQkFTRV9DT0w9PT10JiZlLmluY2x1ZGVzKGkuUlVMRV9UWVBFKSkubGVuZ3RoPT09ZS5sZW5n''@;'; put 'put ''dGg6ISF0aGlzLmRxcnVsZXMuZmluZChpPT5pLkJBU0VfQ09MPT09dCYmZS5pbmNsdWRlcyhpLlJVTEVfVFlQRSkpfWdldE5vdE51bGxEZWZhdWx0VmFsdWUodCl7Y29uc3QgZT10aGlzLmdldFJ1bGUodCk7cmV0dXJuIHlfZSh0LHRoaXMuZHFydWxlcyxlPy50eXBlKX1nZXREcURyb3Bkb3du''@;'; put 'put ''U291cmNlKHQpe2xldCBlPVtdO3JldHVybiB0aGlzLmRxcnVsZXMuZm9yRWFjaChyPT57ci5CQVNFX0NPTC50b1N0cmluZygpPT09dC5kYXRhJiZ0LmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwiU09GVFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIsIlNPRlRTRUxFQ1RfSE9PSyJd''@;'; put 'put ''LmluY2x1ZGVzKHIuUlVMRV9UWVBFLnRvU3RyaW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoaT0+aS5CQVNFX0NPTD09PXIuQkFTRV9DT0wpLmZvckVhY2goaT0+e2UucHVzaCh0LnR5cGUmJiJudW1lcmljIj09PXQudHlwZT9OdW1iZXIoaS5SVUxFX0RBVEEpOmkuUlVMRV9EQVRBKX0pfSks''@;'; put 'put ''ZX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0YS5sZW5ndGg+MCYmKCgpPT57Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChlPT57dC5pbmNsdWRlcyhlLkJBU0VfQ09MKXx8dC5wdXNoKGUuQkFTRV9DT0wpfSksdH0pKCkuZm9yRWFjaChlPT57bGV0IHI9ITE7dGhpcy5k''@;'; put 'put ''cXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFjaChpPT57aS5CQVNFX0NPTD09PWUmJigiU09GVFNFTEVDVCI9PT1pLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aS5SVUxFX1RZUEUpJiYocj0hMCl9KSxyfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6ZSxSVUxFX1RZ''@;'; put 'put ''UEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6ZSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IHQ9MDt0PHRoaXMucnVsZXMubGVuZ3RoO3QrKyl7Y29uc3QgZT10aGlzLnJ1bGVzW3RdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09ZSl7''@;'; put 'put ''aWYodGhpcy5pc0RxQ29sKGUpKXtsZXQgaT10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1t0XSk7aS5sZW5ndGg+MCYmKHRoaXMucnVsZXNbdF0uc291cmNlPWksdGhpcy5ydWxlc1t0XS5lZGl0b3I9ImF1dG9jb21wbGV0ZS5jdXN0b20iLHRoaXMucnVsZXNbdF0ucmVuZGVy''@;'; put 'put ''ZXI9ImF1dG9jb21wbGV0ZSIsdGhpcy5ydWxlc1t0XS5maWx0ZXI9ITEsIm51bSIhPT10aGlzLnJ1bGVzW3RdLnNhc1R5cGUmJih0aGlzLnJ1bGVzW3RdLnR5cGU9ImF1dG9jb21wbGV0ZSIpKSx0aGlzLmhhc0RxUnVsZXMoZSxbIlNPRlRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW3RdLnN0cmlj''@;'; put 'put ''dD0hMSksdGhpcy5oYXNEcVJ1bGVzKGUsWyJIQVJEU0VMRUNUIl0pJiYodGhpcy5ydWxlc1t0XS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhlLFsiU09GVFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1t0XS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhlLFsiSEFSRFNFTEVDVF9I''@;'; put 'put ''T09LIl0pJiYodGhpcy5ydWxlc1t0XS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhlLFsiTk9UTlVMTCJdKSYmKHRoaXMucnVsZXNbdF0uYWxsb3dFbXB0eT0hMSl9InRydWUiPT09dGhpcy5ydWxlc1t0XS5jb3JyZWN0Rm9ybWF0JiYodGhpcy5ydWxlc1t0XS5jb3JyZWN0Rm9ybWF0PSEw''@;'; put 'put ''KSx0aGlzLnNldERlZmF1bHRWYWxpZGF0b3IodGhpcyx0KSx0aGlzLnNldENvbHVtbkxldmVsU2VjdXJpdHkodCl9fXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRyYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goMCl9c2V0RGVmYXVsdFZhbGlkYXRvcih0LGUpe3RoaXMucnVsZXNbZV0udmFsaWRh''@;'; put 'put ''dG9yPWZ1bmN0aW9uKHIsaSl7Y29uc3QgYT10LnJ1bGVzW2VdLmRhdGE/LnRvU3RyaW5nKCksYz10LnJ1bGVzW2VdLnR5cGV8fCIiO2xldCBtPW51bGw7cmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlzLmVkaXRvciYmImF1dG9jb21wbGV0ZS5jdXN0b20iIT09dGhpcy5lZGl0b3J8fCh0Lmdl''@;'; put 'put ''dEhhbmRzb250YWJsZVZhbGlkYXRvcigiYXV0b2NvbXBsZXRlIikuY2FsbCh0aGlzLHIsQz0+e209Q30pLG0pPyh0LmdldEhhbmRzb250YWJsZVZhbGlkYXRvcihjKS5jYWxsKHRoaXMscixDPT57bT1DfSksbT90Lmxlbmd0aENoZWNrKHIsdC5ydWxlc1tlXS5sZW5ndGgsYyk/dC5pc0RxQ29s''@;'; put 'put ''KGF8fCIiKSYmISgobix0KT0+e2ZvcihsZXQgZSBvZiBuKWlmKF9fZVtlLlJVTEVfVFlQRV0mJiFfX2VbZS5SVUxFX1RZUEVdKHQsZS5SVUxFX1ZBTFVFKSlyZXR1cm4gY29uc29sZS53YXJuKGBEUSBJbnZhbGlkIFJlYXNvbjogJHtlLlJVTEVfVFlQRX1cblZhbHVlOiAke3R9KVxuUnVsZSBW''@;'; put 'put ''YWx1ZTogJHtlLlJVTEVfVkFMVUUubGVuZ3RoPjAmJiIgIiE9PWUuUlVMRV9WQUxVRT9lLlJVTEVfVkFMVUU6Ik5vdCBkZWZpbmVkIn1gKSwhMTtyZXR1cm4hMH0pKHQuZ2V0RHFEZXRhaWxzKGF8fCIiKSxyKT8oY29uc29sZS53YXJuKGBEUSBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6''@;'; put 'put ''ICR7cn0pYCksdm9pZCBpKCExKSk6dm9pZCBpKCEwKTooY29uc29sZS53YXJuKGBMZW5ndGggVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke3J9KWApLHZvaWQgaSghMSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke3J9KWAp''@;'; put 'put ''LHZvaWQgaSghMSkpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gKGF1dG9jb21wbGV0ZSkgLSBpbnZhbGlkIChWYWx1ZTogJHtyfSlgKSx2b2lkIGkoITEpKX19bGVuZ3RoQ2hlY2sodCxlLHIpe2lmKCgwLGg1LmlzU3BlY2lhbE1pc3NpbmcpKHQpfHxudWxsPT10fHxu''@;'; put 'put ''dWxsPT1lKXJldHVybiEwO2lmKCJudW1lcmljIj09PXIpe2lmKDg9PT1lKXJldHVybiEwO2lmKGU8M3x8ZT44fHwhTnVtYmVyLmlzSW50ZWdlcihlKSlyZXR1cm4gY29uc29sZS53YXJuKCJpbnZhbGlkIGxlbmd0aCBmcm9tIFNBUywgcnVsZSBsZW5ndGggY2FuIG9ubHkgYmUgYW4gaW50ZWdl''@;'; put 'put ''ciBiZXR3ZWVuIDMtOCIpLCExO2NvbnN0IGk9TnVtYmVyKHQpPT09dCYmdCUxIT0wO2lmKGU8OCYmaSlyZXR1cm4gY29uc29sZS53YXJuKCJyZWR1Y2VkIGxlbmd0aCBudW1lcmljcyBjYW5ub3QgY29udGFpbiBkZWNpbWFscyBlbHNlIHByZWNpc2lvbiB3aWxsIGJlIGFmZmVjdGVkIiksITE7''@;'; put 'put ''c3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4gdDw9ODE5MjtjYXNlIDQ6cmV0dXJuIHQ8PTIwOTcxNTI7Y2FzZSA1OnJldHVybiB0PD01MzY4NzA5MTI7Y2FzZSA2OnJldHVybiB0PD0xMzc0Mzg5NTM0NzI7Y2FzZSA3OnJldHVybiB0PD0zNTE4NDM3MjA4ODgzMn19cmV0dXJuIHQudG9TdHJpbmco''@;'; put 'put ''KS5sZW5ndGg8PWV9Z2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKHQpe3N3aXRjaCh0KXtjYXNlImF1dG9jb21wbGV0ZSI6cmV0dXJuIEhrO2Nhc2UibnVtZXJpYyI6cmV0dXJuIHNhZTtjYXNlImRhdGUiOnJldHVybiB4VjtjYXNlInRpbWUiOnJldHVybiBFVjtkZWZhdWx0OnJldHVybihlLHIp''@;'; put 'put ''PT5yP3IoITApOm51bGx9fWdldFJ1bGVJbmRleCh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dDp0aGlzLnJ1bGVzLmZpbmRJbmRleChlPT5lLmRhdGE9PT10KX1zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KHQpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGU9''@;'; put 'put ''dGhpcy5ydWxlc1t0XTtpZih0aGlzLnByaW1hcnlLZXlzLmluY2x1ZGVzKGUuZGF0YSkmJihlLmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1lLmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKHQpLCJSRUFEIj09PWUuY2xzUnVsZSYmKGUucmVhZE9ubHk9ITApLCJFRElUIj09PWUu''@;'; put 'put ''Y2xzUnVsZSl7ZS5yZWFkT25seT0hMTtjb25zdCByPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRleE9mKHQpO3RoaXMuaGlkZGVuQ29sdW1ucy5zcGxpY2UociwxKX19fWNvbnN0IHpqPXtudW1lcmljOiIiLGRlZmF1bHQ6IiJ9O2Z1bmN0aW9uIHRTdChuLHQsZSl7aWYoZSYmdD8uZGF0YSl7Y29u''@;'; put 'put ''c3Qgcj15X2UodC5kYXRhLGUsbik7aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZighbilyZXR1cm4gemouZGVmYXVsdDtzd2l0Y2gobil7Y2FzZSJkcm9wZG93biI6Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiB0JiZ0LnNvdXJjZT90LnNvdXJjZVswXTpbXTtkZWZhdWx0OnJldHVybiB6ai5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eShuKT96altuXTp6ai5kZWZhdWx0fX1mdW5jdGlvbiBjYWUobil7cmV0dXJuIG51bGw9PW58fDA9PT1uLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aH1jb25zdCB1YWU9bj0+bmV3IERhdGUoTWF0aC5yb3VuZCg4NjQwMCoobi0yNTU2OSkqMWUzKSksclN0PShuLHQsZSxy''@;'; put 'put ''LGksYSxjKT0+KGhhZSh0KSx0LmlubmVySFRNTD1gJHthP2EudG9TdHJpbmcoKToiIn0gPGNkcy1pY29uIHNoYXBlPSJleGNsYW1hdGlvbi10cmlhbmdsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nkcy1pY29uPmAsdCksZGFlPShuLHQsZSxyLGksYSxjKT0+KGhhZSh0KSx0LmlubmVySFRNTD1h''@;'; put 'put ''fHwiIix0KSxpU3Q9KG4sdCxlLHIsaSxhLGMpPT4oaGFlKHQpLHQuaW5uZXJIVE1MPWAke2E/YS50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+PC9zcGFuPmAsdCksaGFlPW49PntuLmNsYXNzTGlzdC5jb250YWlu''@;'; put 'put ''cygiaHREYXJrIil8fG4uY2xhc3NMaXN0LmFkZCgiaHREYXJrIil9LHdfZT1uPT57bGV0IHQ9KCIwIituLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIHQ9dCsoIjAiK24uZ2V0VVRDTWludXRlcygpKS5zbGljZSgtMikrIjoiLHQrPSgiMCIrbi5nZXRVVENTZWNvbmRzKCkp''@;'; put 'put ''LnNsaWNlKC0yKSx0fSxmYWU9bj0+bi5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhuLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIituLmdldERhdGUoKSkuc2xpY2UoLTIpLHBhZT1uPT4hIS9eLXswLDF9XGQrJC8udGVzdChuKSxDX2U9bj0+ISEvXlxkK1wuXGQrJC8udGVzdChu''@;'; put 'put ''KSxnYWU9KG4sdCk9Pm5ldyBGaWxlKFtuXSx0LHtsYXN0TW9kaWZpZWQ6KG5ldyBEYXRlKS5nZXRUaW1lKCl9KTt2YXIgTDA9ZCg2MzU3OCksU19lPWQoOTQyNDgpLHNTdD1kKDgzODM4KTtjbGFzcyBNX2V7Y29uc3RydWN0b3IodCl7dGhpcy5saWNlbmNlU3RhdGU9dC5saWNlbmNlU3RhdGV9''@;'; put 'put ''cGFyc2VTcHJlYWRzaGVldEZpbGUodCxlLHIsaSl7dmFyIGE9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGMsbSk9Pntjb25zdCBDPXQudXBsb2FkZXJ8fG5ldyBhYWU7aWYodC53b3JrYm9vayl0aGlzLnBhcnNlRXhjZWxGaWxlKHQsdC53b3JrYm9vayxDLGkpLnRoZW4oUD0+e2MoUCl9KS5j''@;'; put 'put ''YXRjaChQPT57bShQKX0pO2Vsc2V7Y29uc3QgWT10LmZpbGU7dC5lbmNvZGluZ3x8KHQuZW5jb2Rpbmc9IlVURi04IiksciYmcihgTG9hZGluZyAke1kubmFtZX0gaW50byB0aGUgYnJvd3NlcmApO2xldCBKPVkubmFtZS5zbGljZShZLm5hbWUubGFzdEluZGV4T2YoIi4iKSsxLFkubmFtZS5s''@;'; put 'put ''YXN0SW5kZXhPZigiLiIpKzQpO2lmKCJ4bHMiIT09Si50b0xvd2VyQ2FzZSgpKXtpZigiY3N2Ij09PUoudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5wYXJzZUNzdkZpbGUodCxDLEopLnRoZW4oY2U9PmMoY2UpKS5jYXRjaChjZT0+bShjZSkpO3tsZXQgY2U9J0ludmFsaWQgZmlsZSB0eXBl''@;'; put 'put ''ICI8Yj4nK3QuZmlsZS5uYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nO3JldHVybiBDLnF1ZXVlLnBvcCgpLG0oY2UpfX17bGV0IGNlPW5ldyBGaWxlUmVhZGVyO2NlLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBBZT1aKGZ1bmN0aW9uKihIZSl7Y29uc3QgWGU9''@;'; put 'put ''eWllbGQgYS54c2x4U3RhcnRSZWFkaW5nKEhlLGUsdC5wYXNzd29yZCk7aWYoIVhlKXJldHVybiBtKCJObyB3b3JrYm9vayBmb3VuZC4iKTthLnBhcnNlRXhjZWxGaWxlKHQsWGUsQyxpKS50aGVuKHJ0PT57YyhydCl9KS5jYXRjaChydD0+e20ocnQpfSl9KTtyZXR1cm4gZnVuY3Rpb24oSGUp''@;'; put 'put ''e3JldHVybiBBZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGNlLnJlYWRBc0FycmF5QnVmZmVyKFkpfX19KX1wYXJzZUV4Y2VsRmlsZSh0LGUscixpKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsYyk9PntsZXQgbT0hMSxDPVtdO2NvbnN0IFA9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JE''@;'; put 'put ''X19fX18iLC4uLnQuaGVhZGVyQXJyYXldLFk9dGhpcy5zZWFyY2hEYXRhSW5FeGNlbChlLHQpO2xldCBKPVtdO2lmKFkuZm91bmQ/KG09ITAsSj1ZLmZvdW5kLmFycmF5RGF0YSxZLmZvdW5kLmhlYWRlcnMuaW5jbHVkZXMoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpfHwoSj1K''@;'; put 'put ''Lm1hcChBZT0+KEFlLnVuc2hpZnQoe3Y6IiJ9KSxBZSkpKSxpJiZpKGBTaGVldDogJHtZLmZvdW5kLnNoZWV0TmFtZX1cblJhbmdlOiAke1kuZm91bmQuc3RhcnRBZGRyZXNzfToke1kuZm91bmQuZW5kQWRkcmVzc31gKSk6Qz1ZLm1pc3Npbmd8fFtdLEMubGVuZ3RoPjApe2xldCBBZT1DLm1h''@;'; put 'put ''cChIZT0+YFNoZWV0OiAke0hlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7SGUubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKTtyZXR1cm4gci5xdWV1ZS5wb3AoKSxjKEFlKX1pZigwPT09Si5sZW5ndGh8fDA9PT1KWzBdLmxlbmd0aCl7bGV0IEFlPSJO''@;'; put 'put ''byByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI7cmV0dXJuIHIucXVldWUucG9wKCksYyhBZSl9aWYoKHQuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wfHx0LmRhdGVIZWFkZXJzLmxlbmd0aD4wfHx0LnRpbWVIZWFkZXJzLmxlbmd0aD4wKSYmKEo9dGhpcy51cGRhdGVEYXRlVGltZUNv''@;'; put 'put ''bHMoUCxKLHQpKSx0LnhsUnVsZXMubGVuZ3RoPjAmJihKPXRoaXMudXBkYXRlWExSdWxlQ29scyhQLEosdCkpLCFtKXtsZXQgQWU9IiI7cmV0dXJuIEFlPTA9PT1DLmxlbmd0aD8iTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiOkMubWFwKEhlPT5gU2hlZXQ6ICR7SGUuc2hlZXRO''@;'; put 'put ''YW1lfS5cbk1pc3NpbmcgY29sdW1uczogJHtIZS5taXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpLHIucXVldWUucG9wKCksYyhBZSl9e3QuaGVhZGVyU2hvdz1QLEo9Si5tYXAoanQ9Pmp0Lm1hcChGdD0+Im4iPT09RnQudHx8RnQudz9GdC52OiJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgRnQudj9GdC52LnRyaW0oKTpGdC52KSksSj1KLm1hcChqdD0+anQubWFwKChGdCxwbik9PnshRnQmJjAhPT1GdCYmKEZ0PSIiKTtjb25zdCBvbj10LmhlYWRlclNob3dbcG5dO3JldHVybiJudW1lcmljIj09PXQuZGNWYWxpZGF0b3I/LmdldFJ1bGUob24pPy50eXBlJiYoMCxoNS5pc1Nw''@;'; put 'put ''ZWNpYWxNaXNzaW5nKShGdCkmJiFGdC5pbmNsdWRlcygiLiIpJiYoRnQ9Ii4iK0Z0KSxGdH0pKTtjb25zdCBBZT1KLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2xldCBydCxIZT1MMC51dGlscy5qc29uX3RvX3NoZWV0KEFlLHtza2lwSGVhZGVy''@;'; put 'put ''OiEwfSksWGU9TDAudXRpbHMuc2hlZXRfdG9fY3N2KEhlKTtpZihYZT1QLmpvaW4oIiwiKSsiXG4iK1hlLCJXTEFUSU4xIj09PXQuZW5jb2Rpbmcpe2xldCBqdD1TX2UuZGVjb2RlKHNTdC5CdWZmZXIuZnJvbShYZSksIkNQLTEyNTIiKTtydD1uZXcgQmxvYihbanRdLHt0eXBlOiJhcHBsaWNh''@;'; put 'put ''dGlvbi9jc3YifSl9ZWxzZSBydD1uZXcgQmxvYihbWGVdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7bGV0IGR0PWdhZShydCx0LmZpbGUubmFtZSsiLmNzdiIpO3IuYWRkVG9RdWV1ZShbZHRdKX1pZigwPT09Si5sZW5ndGgpcmV0dXJuIGMoYFRhYmxlIGluIHRoZSBmaWxlIGlzIGVtcHR5''@;'; put 'put ''LiBEYXRhIGZvdW5kIG9uIHNoZWV0OiAke1kuZm91bmQ/LnNoZWV0TmFtZXx8IiJ9YCk7aWYoIVkuZm91bmQpcmV0dXJuIGMoIk5vIHJlbGV2YW50IGRhdGEgZm91bmQuICdmb3VuZCcgb2JqZWN0IGlzIGVtcHR5LCB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiIpO2NvbnN0IGNlPVkuZm91''@;'; put 'put ''bmQuc3RhcnRBZGRyZXNzfHwiIixmZT1ZLmZvdW5kLmVuZEFkZHJlc3N8fCIiO3JldHVybiBhKHt1cGxvYWRlcjpyLGRhdGE6SixyYW5nZVNoZWV0UmVzOntmb3VuZDohIVkuZm91bmQsc2hlZXROYW1lOlkuZm91bmQuc2hlZXROYW1lLHJhbmdlU3RhcnRBZGRyZXNzOmNlLHJhbmdlRW5kQWRk''@;'; put 'put ''cmVzczpmZSxyYW5nZUFkZHJlc3M6YCR7Y2V9OiR7ZmV9YCxtaXNzaW5nSGVhZGVyczpDfSxoZWFkZXJTaG93OnQuaGVhZGVyU2hvd30pfSl9cGFyc2VDc3ZGaWxlKHQsZSxyKXtyZXR1cm4gbmV3IFByb21pc2UoKGksYSk9PntpZighdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9h''@;'; put 'put ''ZClyZXR1cm4gZS5xdWV1ZS5wb3AoKSxhKCJGaWxlIHVwbG9hZHMgYXJlIG5vdCBlbmFibGVkIGZvciB0aGlzIGxpY2VuY2UuIFBsZWFzZSBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKTtpZigiV0xBVElOMSIhPT10LmVuY29kaW5nKXJldHVybiBpKHt1cGxvYWRlcjplfSk7''@;'; put 'put ''Y29uc3QgYz1uZXcgRmlsZVJlYWRlcjtjLm9ubG9hZD1tPT57aWYoIW0udGFyZ2V0Py5yZXN1bHQpcmV0dXJuIGkoe3VwbG9hZGVyOmV9KTtjb25zdCBQPVNfZS5lbmNvZGUobS50YXJnZXQucmVzdWx0LCJDUC0xMjUyIiksWT1uZXcgQmxvYihbUF0se3R5cGU6cn0pLEo9Z2FlKFksdC5maWxl''@;'; put 'put ''Lm5hbWUpO3JldHVybiBlLnF1ZXVlLnBvcCgpLGUuYWRkVG9RdWV1ZShbSl0pLGkoe3VwbG9hZGVyOmV9KX0sYy5yZWFkQXNUZXh0KHQuZmlsZSl9KX1ieXRlc1RvTUIodCl7cmV0dXJuIHBhcnNlRmxvYXQoKHQvMTA0ODU3NikudG9GaXhlZCgyKSl9eHNseFN0YXJ0UmVhZGluZyh0LGUscil7''@;'; put 'put ''dmFyIGk9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgYT1aKGZ1bmN0aW9uKihjLG0pe2NvbnN0IEM9aS50b0JzdHIodC50YXJnZXQucmVzdWx0KTtsZXQgUCxZPSExO2NvbnN0IEo9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxT''@;'; put 'put ''dHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExLHBhc3N3b3JkOnJ9O3RyeXtQPXlpZWxkIGkueGxzeFJlYWQoQyx7Li4uSn0pfWNhdGNoKGNlKXtpZighY2UubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKXJldHVybiBtKCJFcnJvciByZWFkaW5nIHRoZSBm''@;'; put 'put ''aWxlIik7e1k9ITA7bGV0IGZlPSExO2Zvcig7WTspe2NvbnN0IEFlPXlpZWxkIGUoe2Vycm9yOmZlfSk7aWYoQWUpdHJ5e1A9eWllbGQgaS54bHN4UmVhZChDLHsuLi5KLHBhc3N3b3JkOkFlfSksWT0hMSxmZT0hMX1jYXRjaChIZSl7ZmU9ITAsSGUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmlu''@;'; put 'put ''Y2x1ZGVzKCJwYXNzd29yZCIpfHwoWT0hMSl9ZWxzZSBZPSExfX19cmV0dXJuIFA/YyhQKTptKCJGYWlsZWQgdG8gcGFyc2UgYSB3b3JrYm9vayIpfSk7cmV0dXJuIGZ1bmN0aW9uKGMsbSl7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9eGxzeFJlYWQodCxlKXtyZXR1cm4g''@;'; put 'put ''bmV3IFByb21pc2UoKHIsaSk9PihlJiZlLnBhc3N3b3JkJiZjb25zb2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1ggLSBoYXMgcGFzc3dvcmQiKSxyKEwwLnJlYWQodCxlKSkpKX1zZWFyY2hEYXRhSW5FeGNlbCh0LGUpe2xldCByLGksYSxjLG09IiIsQz1bXSxZ''@;'; put 'put ''PVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5lLmhlYWRlckFycmF5XS5tYXAoY2U9PmNlLnRvTG93ZXJDYXNlKCkpLEo9WS5yZWR1Y2UoKGNlLGZlKT0+KGNlW2ZlXT0tMSxjZSkse30pO2ZvcihsZXQgY2Ugb2YgdC5TaGVldE5hbWVzKXtyPXZvaWQgMCxpPXZvaWQgMCxK''@;'; put 'put ''PVkucmVkdWNlKChvbixnbik9Pihvbltnbl09LTEsb24pLHt9KTtsZXQgZmU9W107bT1jZTtjb25zdCBBZT10LlNoZWV0c1ttXTtpZihPYmplY3Qua2V5cyhBZSkuZm9yRWFjaChvbj0+e2NvbnN0IGduPUFlW29uXS52O2lmKGduJiYic3RyaW5nIj09dHlwZW9mIGduKXtjb25zdCBabj1nbi50''@;'; put 'put ''b0xvd2VyQ2FzZSgpO1kuaW5kZXhPZihabik+LTEmJihKW1puXT1vbixyfHwocj1vbiksaT1vbil9fSksLTE9PT1KLl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyYmZGVsZXRlIEouX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fLGZlPU9iamVjdC5rZXlzKEopLmZpbHRlcihv''@;'; put 'put ''bj0+LTE9PT1KW29uXSksZmUubGVuZ3RoPjApe0MucHVzaCh7c2hlZXROYW1lOm0sbWlzc2luZ0hlYWRlcnM6ZmUubWFwKG9uPT5vbi50b1VwcGVyQ2FzZSgpKX0pO2NvbnRpbnVlfWNvbnN0IEhlPU9iamVjdC5rZXlzKEopO2xldCBkdCxYZT1bXSxydD1bXTtIZS5zb3J0KChvbixnbik9Pntj''@;'; put 'put ''b25zdCBabj1lLmhlYWRlclBrcy5pbmNsdWRlcyhvbik/MTowO3JldHVybihlLmhlYWRlclBrcy5pbmNsdWRlcyhnbik/MTowKS1abn0pLmZvckVhY2gob249Pntjb25zdCBnbj1KW29uXSxabj1nbi5tYXRjaCgvXEQrLyksR3I9Z24ubWF0Y2goL1xkKy8pLEVyPShabj9ablswXTotMSl8fC0x''@;'; put 'put ''LGlyPXBhcnNlSW50KChHcj9HclswXTotMSl8fC0xKSsxO2xldCBwaT0wO2lmKGR0KWZvcihsZXQgRG49aXI7RG48PWR0O0RuKyspe2NvbnN0IGVyPUFlW2Ake0VyfSR7RG59YF07aWYoZS5oZWFkZXJQa3MuaW5jbHVkZXMob24pJiYodm9pZCAwPT09ZXJ8fHZvaWQgMD09PWVyLnYpKXtkdD1E''@;'; put 'put ''bjticmVha31YZVtwaV18fFhlLnB1c2goe30pLGVyJiYoWGVbcGldW29uXT0ic3RyaW5nIj09dHlwZW9mIGVyLnY/ZXIudi50cmltKCk6ZXIudikscnRbcGldfHxydC5wdXNoKFtdKSxydFtwaV0ucHVzaChlcj8/e3Y6IiJ9KSxwaSsrfWVsc2V7bGV0IERuPWlyO2Zvcig7dm9pZCAwPT09ZHQ7''@;'; put 'put ''KXtjb25zdCBBcj1gJHtFcn0ke0RufWAsZXI9QWVbQXJdO2lmKCFlcnx8dm9pZCAwPT09ZXIudil7ZHQ9RG4tMTticmVha31YZVtwaV18fFhlLnB1c2goe30pLFhlW3BpXVtvbl09Im4iPT09QWVbQXJdLnQ/QWVbQXJdLnY6QWVbQXJdLnc/QWVbQXJdLnc6InN0cmluZyI9PXR5cGVvZiBBZVtB''@;'; put 'put ''cl0udj9BZVtBcl0udi50cmltKCk6QWVbQXJdLnYscnRbcGldfHxydC5wdXNoKFtdKSxydFtwaV0ucHVzaChlcj8/e3Y6IiJ9KSxEbisrLHBpKyt9fWlmKHImJmkpe2NvbnN0IERuPWkubWF0Y2goL1xEKy8pO2E9cixjPWAke0RufSR7ZHR9YH19KTtjb25zdCBGdD1bXTtsZXQgcG47cmV0dXJu''@;'; put 'put ''IFhlLmZvckVhY2goKG9uLGduKT0+e2xldCBabj0hMTtlLmhlYWRlclBrcy5mb3JFYWNoKEdyPT57dm9pZCAwPT09b25bR3IudG9Mb3dlckNhc2UoKV0mJihabj0hMCl9KSxabiYmKEZ0LnB1c2goZ24pLHBufHwocG49Z24pKX0pLHBuPyhYZS5zcGxpY2UocG4sMS8wKSxydC5zcGxpY2UocG4s''@;'; put 'put ''MS8wKSk6RnQuc29ydCgob24sZ24pPT5nbi1vbikuZm9yRWFjaChvbj0+e1hlLnNwbGljZShvbiwxKSxydC5zcGxpY2Uob24sMSl9KSxydC5sZW5ndGg/e2ZvdW5kOntkYXRhOlhlLGFycmF5RGF0YTpydCxzaGVldE5hbWU6bSxzdGFydEFkZHJlc3M6YSxlbmRBZGRyZXNzOmMsaGVhZGVyczpI''@;'; put 'put ''ZX19Ont9fXJldHVybnttaXNzaW5nOkN9fXVwZGF0ZURhdGVUaW1lQ29scyh0LGUscil7aWYoci5kYXRlSGVhZGVycy5sZW5ndGg+MCl7Y29uc3QgaT1bXTtyLmRhdGVIZWFkZXJzLmZvckVhY2goYT0+ey0xIT09dC5pbmRleE9mKGEpJiZpLnB1c2godC5pbmRleE9mKGEpKX0pLGUuZm9yRWFj''@;'; put 'put ''aChhPT57aS5mb3JFYWNoKGM9Pntjb25zdCBtPWFbY107aWYocGFlKG0udikpe2NvbnN0IEM9dWFlKE51bWJlcihtLnYpKTttLnY9Qy5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhDLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitDLmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2Ug''@;'; put 'put ''aWYobSYmbS52JiYtMT09PW0udi50b1N0cmluZygpLmluZGV4T2YoIjoiKSl7Y29uc3QgQz1uZXcgRGF0ZShtLnYpOyJJbnZhbGlkIERhdGUiIT09Qy50b1VUQ1N0cmluZygpJiYobS52PWZhZShDKSl9YVtjXT1tfSl9KX1pZihyLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaT1bXTtyLnRp''@;'; put 'put ''bWVIZWFkZXJzLmZvckVhY2goYT0+ey0xIT09dC5pbmRleE9mKGEpJiZpLnB1c2godC5pbmRleE9mKGEpKX0pLGUuZm9yRWFjaChhPT57aS5mb3JFYWNoKGM9Pntjb25zdCBtPWFbY107aWYocGFlKG0udil8fENfZShtLnYpfHxtLnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IEM9dWFlKE51bWJl''@;'; put 'put ''cihtLnYpKTttLnY9d19lKEMpfWFbY109bX0pfSl9aWYoci5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBpPVtdO3IuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2goYT0+ey0xIT09dC5pbmRleE9mKGEpJiZpLnB1c2godC5pbmRleE9mKGEpKX0pLGUuZm9yRWFjaChhPT57aS5mb3JFYWNo''@;'; put 'put ''KGM9Pntjb25zdCBtPWFbY107aWYocGFlKG0udil8fENfZShtLnYpKXtjb25zdCBDPXVhZShOdW1iZXIobS52KSk7bS52PWZhZShDKSsiICIrd19lKEMpfWVsc2V7aWYoLTE9PT1tLnYuaW5kZXhPZigiICIpJiYtMSE9PW0udi5pbmRleE9mKCI6Iikpe2xldCBQPW0udi5zdWJzdHJpbmcoMCxt''@;'; put 'put ''LnYuaW5kZXhPZigiOiIpKTtQPVArIiAiK20udi5zdWJzdHJpbmcobS52LmluZGV4T2YoIjoiKSsxKSxtLnY9UH1jb25zdCBDPW5ldyBEYXRlKG0udik7IkludmFsaWQgRGF0ZSIhPT1DLnRvVVRDU3RyaW5nKCkmJihtLnY9ZmFlKEMpKyIgIisobj0+e2xldCB0PSgiMCIrbi5nZXRIb3Vycygp''@;'; put 'put ''KS5zbGljZSgtMikrIjoiO3JldHVybiB0PXQrKCIwIituLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6Iix0Kz0oIjAiK24uZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksdH0pKEMpKX1hW2NdPW19KX0pfXJldHVybiBlfXVwZGF0ZVhMUnVsZUNvbHModCxlLHIpe2lmKHIueGxSdWxlcy5sZW5n''@;'; put 'put ''dGg+MCl7Y29uc3QgaT1bXTtyLnhsUnVsZXMuZm9yRWFjaChhPT57LTEhPT10LmluZGV4T2YoYS5YTF9DT0xVTU4pJiYoYS5pbmRleD10LmluZGV4T2YoYS5YTF9DT0xVTU4pLGkucHVzaChhKSl9KSxlLmZvckVhY2goYT0+e2kuZm9yRWFjaChjPT57Y29uc3QgbT1hW2MuaW5kZXhdOyJGT1JN''@;'; put 'put ''VUxBIj09PWMuWExfUlVMRSYmImYiaW4gbSYmKCJuIj09PW0udD9tLnY9Ij0iK20uZjptLnc9Ij0iK20uZiksYVtjXT1tfSl9KX1yZXR1cm4gZX10b0JzdHIodCl7bGV0IGU9bmV3IFVpbnQ4QXJyYXkodCkscj0iIixpPWUuYnl0ZUxlbmd0aDtmb3IobGV0IGE9MDthPGk7YSsrKXIrPVN0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUoZVthXSk7cmV0dXJuIHJ9fWxldCB4X2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWUsdGhpcy5ldmVudFNlcnZpY2U9cix0aGlzLmxpY2VuY2VTZXJ2aWNlPWksdGhpcy5saWNlbmNlU3RhdGU9''@;'; put 'put ''dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkPWE9Pm5ldyBQcm9taXNlKChjLG0pPT57dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wZW4oYSkuc3Vic2NyaWJlKEM9PntjKEMucGFzc3dvcmQpfSl9KX1wYXJzZUV4Y2VsRmls''@;'; put 'put ''ZShlLHIsaSl7cmV0dXJuIG5ldyBNX2Uoe2xpY2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pLnBhcnNlU3ByZWFkc2hlZXRGaWxlKGUsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkLHIsaSl9eGxzeFJlYWRGaWxlKGUpe3JldHVybiBuZXcgUHJvbWlzZSgocixpKT0+e2NvbnN0IGE9bmV3''@;'; put 'put ''IE1fZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSk7bGV0IGM9bmV3IEZpbGVSZWFkZXI7Yy5vbmxvYWQ9bT0+e2EueHNseFN0YXJ0UmVhZGluZyhtLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCkudGhlbihDPT57cihDKX0pLmNhdGNoKEM9PntpKEMpfSl9LGMucmVhZEFzQXJy''@;'; put 'put ''YXlCdWZmZXIoZSl9KX1wYXJzZUV4Y2VsU2hlZXROYW1lcyhlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxhKT0+e2NvbnN0IGM9bmV3IEZpbGVSZWFkZXI7aWYoIWUpcmV0dXJuIGNvbnNvbGUud2FybigiZmlsZSBpcyBtaXNzaW5nIiks''@;'; put 'put ''aSh7c2hlZXROYW1lczpbXX0pO2Mub25sb2FkPWZ1bmN0aW9uKCl7dmFyIG09WihmdW5jdGlvbiooQyl7aWYoIUM/LnRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIkZpbGUgcmVhZGVyIGV2ZW50LnRhcmdldCBpcyBtaXNzaW5nIik7bGV0IFAsSixZPSExO2NvbnN0IGNlPUMudGFy''@;'; put 'put ''Z2V0LnJlc3VsdDt0cnl7UD1MMC5yZWFkKGNlLHtib29rU2hlZXRzOiEwLHR5cGU6ImJpbmFyeSJ9KX1jYXRjaChmZSl7aWYoIWZlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSlyZXR1cm4gYSgiRXJyb3IgcmVhZGluZyB0aGUgZmlsZSIpO3tZPSEwO2xldCBB''@;'; put 'put ''ZT0hMTtmb3IoO1k7KXtpZihKPXlpZWxkIHIucHJvbXB0RXhjZWxQYXNzd29yZCh7ZXJyb3I6QWV9KSwhSilyZXR1cm4gWT0hMSxhKCJObyBwYXNzd29yZCBwcm92aWRlZCIpO3RyeXtQPUwwLnJlYWQoY2Use2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5IixwYXNzd29yZDpKfSksWT0hMSxB''@;'; put 'put ''ZT0hMX1jYXRjaChIZSl7QWU9ITAsSGUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpfHwoWT0hMSl9aWYoIUopcmV0dXJuIGEoIkludmFsaWQgcGFzc3dvcmQsIGZhaWxlZCB0byBkZWNyeXB0IHRoZSBmaWxlIil9fX1pZighUClyZXR1cm4gYSgiRXJyb3IgcGFy''@;'; put 'put ''c2luZyB0aGUgd29ya2Jvb2siKTt0cnl7cmV0dXJuIGkoe3NoZWV0TmFtZXM6UC5TaGVldE5hbWVzLHBhc3N3b3JkOkp9KX1jYXRjaChmZSl7Y29uc29sZS5lcnJvcihmZSl9fSk7cmV0dXJuIGZ1bmN0aW9uKEMpe3JldHVybiBtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksYy5vbmVycm9y''@;'; put 'put ''PWZ1bmN0aW9uKG0pe2NvbnNvbGUubG9nKG0pfSxjLnJlYWRBc0JpbmFyeVN0cmluZyhlKX0pfSkoKX1ieXRlc1RvTUIoZSl7cmV0dXJuIHBhcnNlRmxvYXQoKGUvMTA0ODU3NikudG9GaXhlZCgyKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8biko''@;'; put 'put ''T3IoYjRlKSxPcihTYyksT3IoSzEpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBufSkoKTtjb25zdCBHeT12b2lkIDAsY1N0PVsiZW4tR0IiLFtbImEiLCJwIl0sWyJhbSIsInBtIl0s''@;'; put 'put ''R3ldLFtbImFtIiwicG0iXSxHeSxHeV0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1''@;'; put 'put ''cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sR3ksW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXB0IiwiT2N0IiwiTm92''@;'; put 'put ''IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxHeSxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIs''@;'; put 'put ''IkFubm8gRG9taW5pIl1dLDEsWzYsMF0sWyJkZC9NTS95IiwiZCBNTU0geSIsImQgTU1NTSB5IiwiRUVFRSwgZCBNTU1NIHkiXSxbIkhIOm1tIiwiSEg6bW06c3MiLCJISDptbTpzcyB6IiwiSEg6bW06c3Mgenp6eiJdLFsiezF9LCB7MH0iLEd5LCJ7MX0gJ2F0JyB7MH0iLEd5XSxbIi4iLCIs''@;'; put 'put ''IiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIkdCUCIsIlx4YTMiLCJCcml0aXNoIFBvdW5kIix7SlBZOlsiSlBceGE1IiwiXHhhNSJdLFVTRDpbIlVTJCIs''@;'; put 'put ''IiQiXX0sImx0ciIsZnVuY3Rpb24gbFN0KG4pe2NvbnN0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSkscj1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PXI/MTo1fV0sdVN0PVsiaW5wdXQiXSxkU3Q9WyIqIl0saFN0PShuLHQp''@;'; put 'put ''PT4oeyJ3aWR0aC5weCI6biwibWF4LWhlaWdodC5weCI6dH0pO2Z1bmN0aW9uIGZTdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIsNyksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSxNcigiICIsZS5sb2FkaW5nTW9yZT8iTG9hZGluZy4uLiI6IkxPQUQgTU9SRSIsIiAi''@;'; put 'put ''KX19bGV0IEVfZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2RyPWUsdGhpcy5pbnB1dElkPSIiLHRoaXMucGxhY2Vob2xkZXI9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5hdXRvY29tcGxldGU9Im9mZiIsdGhpcy50''@;'; put 'put ''YWJpbmRleD0iIix0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLm9uSW5wdXRLZXlkb3duPW5ldyBZcix0aGlzLm9uSW5wdXRDaGFuZ2U9bmV3IFlyLHRoaXMudmFsdWVDaGFuZ2U9bmV3IFlyLHRoaXMub25Mb2FkaW5nTW9yZT1uZXcgWXIsdGhp''@;'; put 'put ''cy5kYXRhbGlzdE9wZW49ITEsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXk9MTUwLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLmlucHV0Q2xpZW50UmVjdD17fSx0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMubG9hZGluZ01vcmU9ITF9bmdP''@;'; put 'put ''bkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfSw1MDApfW9uSW5wdXRGaXJlZChlLHIsaSl7dGhpcy5vcGVuRGF0YWxpc3QoImNsaWNrIiE9PWkpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5maWx0''@;'; put 'put ''ZXJPcHRpb25zTGlzdCgpLCghdGhpcy5lbWl0T25seVNlbGVjdGVkfHxyKSYmKHRoaXMub25JbnB1dENoYW5nZS5lbWl0KHt0YXJnZXQ6e3ZhbHVlOnRoaXMudmFsdWV9fSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpKX1vbklucHV0Q2xpY2soZSl7dGhpcy5vcGVuRGF0YWxp''@;'; put 'put ''c3QoKX1vcGVuRGF0YWxpc3QoZT0hMCl7dGhpcy5kYXRhbGlzdE9wZW49ITAsZSYmKHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMCx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuYWZ0ZXJPcGVuTG9jaz0hMX0sdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXkp''@;'; put 'put ''KX1jbG9zZURhdGFsaXN0KCl7Y2xlYXJUaW1lb3V0KHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dCksdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuZGF0YWxpc3RPcGVuPSExfXJlc2V0RGF0YWxpc3RGaWx0ZXIoKXt0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCEwKX1vbklucHV0Rm9j''@;'; put 'put ''dXNpbihlKXt0aGlzLmlucHV0Rm9jdXNlZD0hMH1vbklucHV0Rm9jdXNvdXQoZSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbklucHV0TW91c2VlbnRlcihlKXt0aGlzLmlucHV0Q2xpZW50UmVjdC53aWR0aHx8dGhpcy5jYWxjdWxhdGVJbnB1dFBv''@;'; put 'put ''c2l0aW9uKCl9ZmlsdGVyT3B0aW9uc0xpc3QoZSl7Y29uc3Qgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPXJbaV07aWYoMD09PXRoaXMudmFsdWUubGVuZ3Ro''@;'; put 'put ''KXthLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWlmKGUpe2EuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9Y29uc3QgYz1hLmlubmVyVGV4dHx8IiIsbT1hLnZhbHVlfHwiIjsoYyttKT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnZhbHVlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpP2EuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik6YS5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX19c2V0VG9DbG9zZURhdGFsaXN0KCl7dGhpcy5kYXRhbGlzdENsb3NlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZXx8dGhpcy5h''@;'; put 'put ''ZnRlck9wZW5Mb2NrfHwodGhpcy5jbG9zZURhdGFsaXN0KCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLnJlc2V0RGF0YWxpc3RGaWx0ZXIoKSl9LDEwMCl9Y2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpe2NvbnN0IHI9dGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudD8uZ2V0''@;'; put 'put ''Qm91bmRpbmdDbGllbnRSZWN0KCk7ci53aWR0aD4wJiZyLmhlaWdodD4wJiYodGhpcy5pbnB1dENsaWVudFJlY3Q9e3dpZHRoOnIud2lkdGgsYm90dG9tOnIuYm90dG9tfSksdGhpcy5pbm5lckhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHR9b25EYXRhTGlzdE1vdXNlRW50ZXIoZSl7dGhpcy5w''@;'; put 'put ''cmV2ZW50RGF0YWxpc3RDbG9zZT0hMH1vbkRhdGFMaXN0TW91c2VMZWF2ZShlKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkRhdGFMaXN0U2Nyb2xsKGUpe3RoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25E''@;'; put 'put ''YXRhTGlzdENsaWNrKGUpe2NvbnN0IHI9ZS50YXJnZXQ7ImxvYWQtbW9yZSIhPT1yLmRhdGFzZXQ/LnR5cGU/Ik9QVElPTiIhPT1yLnRhZ05hbWV8fHRoaXMuc2V0T3B0aW9uVmFsdWUoci5pbm5lclRleHQsci52YWx1ZSk6dGhpcy5sb2FkTW9yZSgpfWxvYWRNb3JlKCl7dGhpcy5vbkxvYWRp''@;'; put 'put ''bmdNb3JlLmVtaXQoe2xvYWRNb3JlRmluaXNoZWQ6ZT0+e3RoaXMubG9hZGluZ01vcmU9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT1lfX0pLHRoaXMubG9hZGluZ01vcmU9ITB9c2V0T3B0aW9uVmFsdWUoZSxyKXsoZXx8cikmJihyfHwocj1lKSksciYmKHRoaXMucHJldmVudERhdGFsaXN0Q2xv''@;'; put 'put ''c2U9ITEsdGhpcy52YWx1ZT1yLHRoaXMub25JbnB1dEZpcmVkKG51bGwsITAsImNsaWNrIiksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSl9b25NYWluS2V5ZG93bihlKXtzd2l0Y2goZS5rZXkpe2Nhc2UiQXJyb3dVcCI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJ1cCIpO2JyZWFrO2Nh''@;'; put 'put ''c2UiQXJyb3dEb3duIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoImRvd24iKTticmVhaztjYXNlIkVudGVyIjp0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKX19b25JbnB1dEtleXVwKGUpe3JldHVybiF0aGlzLmRhdGFsaXN0T3Blbnx8KCJFc2NhcGUiPT09ZS5rZXk/KGUuc3RvcFByb3Bh''@;'; put 'put ''Z2F0aW9uKCksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpLCExKTp2b2lkIDApfXVuc2VsZWN0QWxsT3B0aW9ucygpe2NvbnN0IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25g''@;'; put 'put ''KTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmNsYXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKX1zZWxlY3RGb2N1c2VkT3B0aW9uKCl7Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbi5mb2N1c2VkYCk7ZSYmdGhp''@;'; put 'put ''cy5vbkRhdGFMaXN0Q2xpY2soe3RhcmdldDplfSksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1nZXRPcHRpb25zTW92ZUZvY3VzKGUpe2NvbnN0IHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb246bm90KC5oaWRkZW4pYCk7bGV0''@;'; put 'put ''IGk9MDtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7Y29uc3QgYz1yW2FdO2lmKGMuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb2N1c2VkIikpe2k9ImRvd24iPT09ZT9hKzE6YS0xLGk8MCYmKGk9ci5sZW5ndGgtMSksaT5yLmxlbmd0aC0xJiYoaT0wKSxjLmNsYXNzTGlzdC5yZW1vdmUoImZv''@;'; put 'put ''Y3VzZWQiKTticmVha319cltpXS5jbGFzc0xpc3QuYWRkKCJmb2N1c2VkIil9b25SZXNpemUoZSl7dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoRnMpKX19c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1hdXRvY29tcGxldGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHIsaSl7aWYoMSZyJiZXYSh1U3QsNSksMiZyKXtsZXQgYTtkaShhPWhpKCkpJiYoaS5pbnB1dEVsZW1lbnQ9YS5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixp''@;'; put 'put ''KXsxJnImJmt0KCJyZXNpemUiLGZ1bmN0aW9uKGMpe3JldHVybiBpLm9uUmVzaXplKGMpfSwwLE54KX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixhdXRvY29t''@;'; put 'put ''cGxldGU6ImF1dG9jb21wbGV0ZSIsdGFiaW5kZXg6InRhYmluZGV4IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOntvbklucHV0S2V5ZG93bjoib25JbnB1dEtleWRvd24iLG9uSW5wdXRDaGFuZ2U6''@;'; put 'put ''Im9uSW5wdXRDaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25Mb2FkaW5nTW9yZToib25Mb2FkaW5nTW9yZSJ9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOmRTdCxkZWNsczo5LHZhcnM6MTUsY29uc3RzOltbImlucHV0IiwiIl0sWyJvcHRpb25zIiwiIl0sWzEs''@;'; put 'put ''ImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInRhYmluZGV4IiwiMCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwiZm9jdXMiLCJm''@;'; put 'put ''b2N1c291dCIsImtleXVwIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il0sWzEsImRhdGFsaXN0IiwzLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwic2Nyb2xsIiwibmdTdHlsZSIsImlkIl0sWyJkYXRhLXR5cGUiLCJsb2Fk''@;'; put 'put ''LW1vcmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwxLCJsb2FkLW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXtpZigxJnIpe2NvbnN0IGE9SW4oKTtuYSgpLHJlKDAsImRpdiIsMiksa3QoImtleWRvd24iLGZ1bmN0aW9uKG0p''@;'; put 'put ''e3JldHVybiBndChhKSxtdChpLm9uTWFpbktleWRvd24obSkpfSkscmUoMSwiaW5wdXQiLDMsMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLnZhbHVlLG0pfHwoaS52YWx1ZT1tKSxtdChtKX0pLGt0KCJjbGljayIsZnVuY3Rpb24obSl7cmV0dXJu''@;'; put 'put ''IGd0KGEpLG10KGkub25JbnB1dENsaWNrKG0pKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksbXQoaS5vbklucHV0RmlyZWQobSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLm9uSW5wdXRNb3VzZWVudGVyKG0pKX0pKCJm''@;'; put 'put ''b2N1cyIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLG10KGkub25JbnB1dEZvY3VzaW4obSkpfSkoImZvY3Vzb3V0IixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksbXQoaS5vbklucHV0Rm9jdXNvdXQobSkpfSkoImtleXVwIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksbXQoaS5vbklucHV0''@;'; put 'put ''S2V5dXAobSkpfSksaWUoKSxWdCgzLCJkaXYiLDQpLHJlKDQsImRpdiIsNSksa3QoImNsaWNrIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksbXQoaS5vbkRhdGFMaXN0Q2xpY2sobSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLm9uRGF0YUxpc3RNb3Vz''@;'; put 'put ''ZUVudGVyKG0pKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksbXQoaS5vbkRhdGFMaXN0TW91c2VMZWF2ZShtKSl9KSgic2Nyb2xsIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksbXQoaS5vbkRhdGFMaXN0U2Nyb2xsKG0pKX0pLHJlKDUsImRpdiIsbnVsbCwxKSxC''@;'; put 'put ''cig3KSxpZSgpLGN0KDgsZlN0LDIsMSwib3B0aW9uIiw2KSxpZSgpKCl9aWYoMiZyKXtjb25zdCBhPWRhKDYpO2FlKCkseWUoImlkIixpLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlciksbGkoIm5nTW9kZWwiLGkudmFsdWUpLHllKCJkaXNhYmxlZCIsaS5kaXNhYmxlZCks''@;'; put 'put ''UnIoImxpc3QiLCJkYXRhbGlzdF8iK2kuaW5wdXRJZCksYWUoMiksYnIoImhpZGRlbiIsIWkuZGF0YWxpc3RPcGVuKSxhZSgpLGJyKCJoaWRkZW4iLCFpLmRhdGFsaXN0T3BlbikseWUoIm5nU3R5bGUiLGk0KDEyLGhTdCxpLmlucHV0Q2xpZW50UmVjdC53aWR0aCxpLmlubmVySGVpZ2h0JiZp''@;'; put 'put ''LmlucHV0Q2xpZW50UmVjdC5ib3R0b20/aS5pbm5lckhlaWdodC1pLmlucHV0Q2xpZW50UmVjdC5ib3R0b206dm9pZCAwKSkoImlkIiwiZGF0YWxpc3RfIitpLmlucHV0SWQpLGFlKDQpLHllKCJuZ0lmIixhLmNoaWxkcmVuLmxlbmd0aD4wJiZpLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVu''@;'; put 'put ''Y2llczpbbWEsbDBlLFJmLExmLHpsLGlsLFFzXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpLHBTdD0oKCk9PntjbGFzcyBue3RyYW5zZm9ybShlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg8MSlyZXR1cm4gZTtzd2l0Y2gocil7Y2FzZSJkYXRlIjpyZXR1cm4g''@;'; put 'put ''Z2goKShlLCJERE1NTVlZWVk6aGg6bW06c3MiKS5mb3JtYXQoIkREL01NL1lZWVkiKTtjYXNlInRpbWUiOntpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIHRpbWUuIFZhbHVlIGlzIG5vdCBzdHJpbmcuIik7Y29uc3QgaT1wYXJzZUludChlLnNw''@;'; put 'put ''bGl0KCI6IilbMF0pLGE9cGFyc2VJbnQoZS5zcGxpdCgiOiIpWzFdKSxjPXBhcnNlSW50KGUuc3BsaXQoIjoiKVsyXSk7cmV0dXJuYCR7aTwxMD8iMCIraTppfToke2E8MTA/IjAiK2E6YX06JHtjPDEwPyIwIitjOmN9YH19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZS50b1N0cmluZygp''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPXN1KHtuYW1lOiJkYXRlVGltZUZvcm1hdHRlciIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gbn0pKCk7Y29uc3QgZ1N0PVsiaW5w''@;'; put 'put ''dXQiXSxtU3Q9WyIqIl07ZnVuY3Rpb24gdlN0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCksVGUoMSwiIC8gIikscmUoMiwic3BhbiIsNSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5vbkNoYW5nZUxhYmVsKCJzZWNvbmQiKSl9KSxUZSgzKSxp''@;'; put 'put ''ZSgpLGlpKCl9aWYoMiZuKXtjb25zdCBlPUVlKDIpO2FlKDIpLGJyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwic2Vjb25kIj09PWUubGFiZWxTZWxlY3RlZCksYWUoKSx2cihlLnNlY29uZExhYmVsKX19ZnVuY3Rpb24geVN0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwibGFiZWwi''@;'; put 'put ''LDQpKDEsInNwYW4iLDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5vbkNoYW5nZUxhYmVsKCJmaXJzdCIpKX0pLFRlKDIpLGllKCksY3QoMyx2U3QsNCwzLCJuZy1jb250YWluZXIiLDYpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7YnIoInNlY29uZExh''@;'; put 'put ''YmVsQWN0aXZlIixlLnNlY29uZExhYmVsJiZlLnNlY29uZExhYmVsLmxlbmd0aD4wKSxhZSgpLGJyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09ZS5sYWJlbFNlbGVjdGVkKSxhZSgpLHZyKGUubGFiZWwpLGFlKCkseWUoIm5nSWYiLGUuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBf''@;'; put 'put ''U3Qobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyaSgwKSxyZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJpbnB1dCIsNyksaGwoMywiZGF0ZVRpbWVGb3JtYXR0ZXIiKSxrdCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKCkub25EYXRlSW5wdXRG''@;'; put 'put ''aXJlZChpKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGkpe3JldHVybiBndChl''@;'; put 'put ''KSxtdChFZSgpLm9uRm9jdXNpbklucHV0KGkpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5vbklucHV0TW91c2VPdXQoKSl9KSxpZSgp''@;'; put 'put ''KCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSgyKSx5ZSgiaWQiLGUuaW5wdXRJZCkoInBsYWNlaG9sZGVyIixJOSgzLDUsZS50ZW1wLCJkYXRlIikpKCJjbHJEYXRlIixlLnZhbHVlKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpLFJyKCJsaXN0IiwiZGF0YWxpc3RfIitlLmlucHV0SWQp''@;'; put 'put ''fX1mdW5jdGlvbiBiU3Qobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyaSgwKSxyZSgxLCJpbnB1dCIsOCksa3QoImlucHV0IixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5vbklucHV0RmlyZWQoaSkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgp''@;'; put 'put ''LmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5vbkZvY3VzaW5JbnB1dChpKSl9KSgibW91c2VvdmVyIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBndChlKSxtdChFZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksaWUoKSxpaSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoInZhbHVlIixlLnZhbHVl''@;'; put 'put ''KSgiaWQiLGUuaW5wdXRJZCkoImRpc2FibGVkIixlLmRpc2FibGVkKSxScigibGlzdCIsImRhdGFsaXN0XyIrZS5pbnB1dElkKX19ZnVuY3Rpb24gd1N0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwiYXBwLWF1dG9jb21wbGV0ZSIsOSwwKSxrdCgib25JbnB1dENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKCkub25JbnB1dEZpcmVkKGkpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5hdXRvY29tcGxldGVMb2FkaW5nTW9yZShpKSl9KSxCcigzKSxpZSgpLGlpKCl9aWYoMiZuKXtjb25zdCBl''@;'; put 'put ''PUVlKCk7YWUoKSx5ZSgiaW5wdXRJZCIsZS5pbnB1dElkKSgidmFsdWUiLChudWxsPT1lLnZhbHVlP251bGw6ZS52YWx1ZS50b1N0cmluZygpKXx8IiIpKCJlbmFibGVMb2FkTW9yZSIsZS5lbmFibGVMb2FkTW9yZSkoImVtaXRPbmx5U2VsZWN0ZWQiLGUuZW1pdE9ubHlTZWxlY3RlZCkoImRp''@;'; put 'put ''c2FibGVkIixlLmRpc2FibGVkKX19bGV0IFRfZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25seVNlbGVj''@;'; put 'put ''dGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgWXIsdGhpcy5vbklucHV0RXZlbnQ9bmV3IFlyLHRoaXMuZm9jdXNpbklucHV0PW5ldyBZcix0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU9bmV3IFlyLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5n''@;'; put 'put ''ZT1uZXcgWXIsdGhpcy50ZW1wPSIiLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMubGFiZWxTZWxlY3RlZD0iZmlyc3QifW5nT25DaGFuZ2VzKGUpe2UudmFsdWUmJmUudmFsdWUuY3VycmVudFZhbHVlIT09ZS52YWx1ZS5wcmV2aW91c1ZhbHVlJiZ0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZS52''@;'; put 'put ''YWx1ZS5jdXJyZW50VmFsdWUpfW5nT25Jbml0KCl7fWF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGUpe3RoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZS5lbWl0KGUpfW9uSW5wdXRGaXJlZChlKXtjb25zdCByPWUudGFyZ2V0LnZhbHVlO3RoaXMudGVtcD1yLHRoaXMudmFsdWVDaGFuZ2Uu''@;'; put 'put ''ZW1pdChyKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGUpfW9uRGF0ZUlucHV0RmlyZWQoZSl7dGhpcy50ZW1wPWUsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGUpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoZSl9b25JbnB1dE1vdXNlT3V0KCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMu''@;'; put 'put ''dmFsdWU9dGhpcy50ZW1wLHRoaXMudGVtcD0iIil9b25JbnB1dE1vdXNlT3Zlcigpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnRlbXA9dGhpcy52YWx1ZT90aGlzLnZhbHVlOiIiLHRoaXMudmFsdWU9IiIpfW9uRm9jdXNpbklucHV0KGUpe3RoaXMuZm9jdXNpbklucHV0LmVtaXQo''@;'; put 'put ''ZSl9b25DaGFuZ2VMYWJlbChlKXt0aGlzLmxhYmVsU2VsZWN0ZWQ9ZSx0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdCgiZmlyc3QiPT09ZT90aGlzLmxhYmVsOnRoaXMuc2Vjb25kTGFiZWwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihyLGkpe2lmKDEmciYmV2EoZ1N0LDUpLDImcil7bGV0IGE7ZGkoYT1oaSgpKSYmKGkuaW5wdXRFbGVtZW50PWEuZmlyc3QpfX0saW5wdXRzOntp''@;'; put 'put ''bnB1dElkOiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHNlY29uZExhYmVsOiJzZWNvbmRMYWJlbCIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGRpc2FibGVTb2Z0c2VsZWN0OiJkaXNhYmxlU29mdHNlbGVjdCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9u''@;'; put 'put ''bHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbklucHV0RXZlbnQ6Im9uSW5wdXRFdmVudCIsZm9jdXNpbklucHV0OiJmb2N1c2luSW5wdXQiLG9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU6Im9u''@;'; put 'put ''QXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLHNlbGVjdGVkTGFiZWxDaGFuZ2U6InNlbGVjdGVkTGFiZWxDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltXdF0sbmdDb250ZW50U2VsZWN0b3JzOm1TdCxkZWNsczo1LHZhcnM6NSxjb25zdHM6W1siaW5wdXQiLCIiXSxbImNsYXNzIiwi''@;'; put 'put ''Y2xyLWNvbnRyb2wtbGFiZWwiLDMsInNlY29uZExhYmVsQWN0aXZlIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFszLCJjbGljayJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiZGF0ZSIsImNsckRhdGUiLCIiLDMsImNs''@;'; put 'put ''ckRhdGVDaGFuZ2UiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiaWQiLCJwbGFjZWhvbGRlciIsImNsckRhdGUiLCJkaXNhYmxlZCJdLFsidHlwZSIsInRpbWUiLCJzdGVwIiwiMSIsMSwiaW5wdXQtdmFsIiwzLCJpbnB1dCIsImZvY3VzIiwi''@;'; put 'put ''Zm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwxLCJpbnB1dC12YWwiLDMsIm9uSW5wdXRDaGFuZ2UiLCJvbkxvYWRpbmdNb3Jl''@;'; put 'put ''IiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJlbWl0T25seVNlbGVjdGVkIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihuYSgpLGN0KDAseVN0LDQsNiwibGFiZWwiLDEpLHJpKDEsMiksY3QoMixfU3QsNCw4LCJuZy1jb250YWluZXIiLDMp''@;'; put 'put ''KDMsYlN0LDIsNCwibmctY29udGFpbmVyIiwzKSg0LHdTdCw0LDUsIm5nLWNvbnRhaW5lciIsMyksaWkoKSksMiZyJiYoeWUoIm5nSWYiLGkubGFiZWwpLGFlKCkseWUoIm5nU3dpdGNoIixpLnR5cGUpLGFlKCkseWUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxhZSgpLHllKCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiLCJ0aW1lIiksYWUoKSx5ZSgibmdTd2l0Y2hDYXNlIiwidGV4dCIpKX0sZGVwZW5kZW5jaWVzOlttYSxBZixvNCxwcyx5QSxiSCxXWCxFX2UscFN0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpLFlTPSgoKT0+e2NsYXNzIG57c2V0IG5nVmFyKGUpe3RoaXMuY29udGV4dC4k''@;'; put 'put ''aW1wbGljaXQ9dGhpcy5jb250ZXh0Lm5nVmFyPWUsdGhpcy5oYXNWaWV3fHwodGhpcy52Y1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZix0aGlzLmNvbnRleHQpLHRoaXMuaGFzVmlldz0hMCl9Y29uc3RydWN0b3IoZSxyKXt0aGlzLnRlbXBsYXRlUmVmPWUsdGhpcy52''@;'; put 'put ''Y1JlZj1yLHRoaXMuY29udGV4dD17JGltcGxpY2l0Om51bGwsbmdWYXI6bnVsbH0sdGhpcy5oYXNWaWV3PSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEFsKSxXZShObikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9V3Ioe3R5cGU6bixz''@;'; put 'put ''ZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1ZhcjoibmdWYXIifSxzdGFuZGFsb25lOiExfSl9fXJldHVybiBufSkoKSxDU3Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhlbHBlclNlcnZpY2U9ZX10cmFuc2Zvcm0oZSxyPSJkYXlzIixpPSExKXtpZih2''@;'; put 'put ''b2lkIDA9PT1lJiYoZT0iIiksInN0cmluZyIhPXR5cGVvZiBlJiYoZT1lLnRvU3RyaW5nKCkpLDA9PT1lLmxlbmd0aCl7aWYoImRheXMiPT09cilyZXR1cm4gbnVsbDtpZigic2Vjb25kcyI9PT1yKXJldHVybiBpPyIxMTowMDowMCI6bnVsbH1sZXQgYT10aGlzLmhlbHBlclNlcnZpY2UuY29u''@;'; put 'put ''dmVydFNhc0RheXNUb0pzRGF0ZShlLHIpO2lmKDQ9PT1lLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCBtPWUuc3BsaXQoIjoiKTthPW5ldyBEYXRlKG1bMF0pLGEuc2V0SG91cnMocGFyc2VJbnQobVsxXSkpLGEuc2V0TWludXRlcyhwYXJzZUludChtWzJdKSksYS5zZXRTZWNvbmRzKHBhcnNl''@;'; put 'put ''SW50KG1bM10pKX1lbHNlIGlzTmFOKE51bWJlcihlKSkmJihhPW5ldyBEYXRlKGUpKTtsZXQgYz1gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oYS5nZXRIb3VycygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhhLmdldE1pbnV0''@;'; put 'put ''ZXMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oYS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSl9YDtyZXR1cm4gaT9jOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoTHUsMTYpKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1cGlwZT1zdSh7bmFtZToic2FzVG9Kc0RhdGUiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIG59KSgpLFNTdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaGVscGVyU2VydmljZT1lfXRyYW5zZm9ybShlKXtpZihudWxsPT1lfHwi''@;'; put 'put ''Ij09PWUpcmV0dXJuIiI7bGV0IHIsaSxhO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmMz09PWUuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IGM9ZS5zcGxpdCgiOiIpO3I9Y1swXSxpPWNbMV0sYT1jWzJdfWVsc2UibnVtYmVyIiE9dHlwZW9mIGUmJihlPXBhcnNlSW50KGUpKSxyPU1hdGguZmxv''@;'; put 'put ''b3IoZS8zNjAwKSxpPU1hdGguZmxvb3IoZSUzNjAwLzYwKSxhPU1hdGguZmxvb3IoZSUzNjAwJTYwKTtyZXR1cm5gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8ocil9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGkpfToke3RoaXMuaGVscGVyU2Vydmlj''@;'; put 'put ''ZS5hZGRMZWFkaW5nWmVybyhhKX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEx1LDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9c3Uoe25hbWU6InNlY29uZHNQYXJzZXIiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19''@;'; put 'put ''cmV0dXJuIG59KSgpO2NvbnN0IE1TdD0obix0LGUpPT4oe3F1ZXJ5Om4scXVlcnlJbmRleDp0LGNsYXVzZUluZGV4OmV9KSx4U3Q9KG4sdCxlLHIpPT4oe3F1ZXJ5Om4scXVlcnlJbmRleDp0LGNsYXVzZUluZGV4OmUsaXNEYXRlVGltZTpyfSksRVN0PShuLHQsZSxyKT0+KHtyYW5nZToic3Rh''@;'; put 'put ''cnQiLHF1ZXJ5Om4scXVlcnlWYWx1ZUluZGV4OjAscXVlcnlJbmRleDp0LGNsYXVzZUluZGV4OmUsaXNEYXRlVGltZTpyfSksVFN0PShuLHQsZSxyKT0+KHtyYW5nZToiZW5kIixxdWVyeTpuLHF1ZXJ5VmFsdWVJbmRleDoxLHF1ZXJ5SW5kZXg6dCxjbGF1c2VJbmRleDplLGlzRGF0ZVRpbWU6''@;'; put 'put ''cn0pO2Z1bmN0aW9uIEFTdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIsMjIpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgic2VsZWN0ZWQiLEVlKCkubG9naWNPcGVyYXRvcnNbMF0pLGFlKCksTXIoIiAiLGUsIiAiKX19ZnVuY3Rpb24ga1N0KG4sdCl7MSZu''@;'; put 'put ''JiYocmUoMCwiZGl2IiwyMyksVGUoMSwiXG4gICAgICAgICIpLFZ0KDIsInByb2dyZXNzIiksVGUoMywiXG4gICAgICAiKSxpZSgpKX1mdW5jdGlvbiBEU3Qobix0KXsxJm4mJlZ0KDAsImRpdiIpfWZ1bmN0aW9uIElTdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIsMjIpLFRlKDEpLGll''@;'; put 'put ''KCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgic2VsZWN0ZWQiLEVlKDIpLmxvZ2ljT3BlcmF0b3JzWzBdKSxhZSgpLE1yKCIgIixlLCIgIil9fWZ1bmN0aW9uIFJTdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsMzIpLGt0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuYWRkR3JvdXBDbGF1c2UoKSl9KSxWdCgxLCJjbHItaWNvbiIsMzMpLHJlKDIsInNwYW4iKSxUZSgzLCJHcm91cCIpLGllKCkoKX19ZnVuY3Rpb24gTFN0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWljb24iLDM0KSxrdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpLmluZGV4O3JldHVybiBtdChFZSgpLnJlbW92ZUdyb3VwQ2xhdXNlKGkpKX0pLGllKCl9fWZ1bmN0aW9uIE9TdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDth''@;'; put 'put ''ZSgpLE1yKCIgIixlLk5BTUUsIiAiKX19ZnVuY3Rpb24gUFN0KG4sdCl7aWYoMSZuJiYocmUoMCwib3B0aW9uIiksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCksdnIoZSl9fWZ1bmN0aW9uIEZTdChuLHQpezEmbiYmamwoMCl9ZnVuY3Rpb24gSFN0KG4sdCl7aWYo''@;'; put 'put ''MSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1Miksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMikuaW5kZXgsYT1FZSgpLmluZGV4LGM9RWUoKTtyZXR1cm4gYy5jdXJyZW50UXVlcnlJbmRleD1pLG10KGMuY3VycmVudENsYXVzZUlu''@;'; put 'put ''ZGV4PWEpfSksVGUoMiwiIENob29zZSB2YWx1ZXMgIiksaWUoKSxjdCgzLEZTdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKDIpLHI9ZS4kaW1wbGljaXQsaT1lLmluZGV4LGE9RWUoKS5pbmRleDtFZSgpO2NvbnN0IGM9ZGEoMzcpO2FlKDMpLHllKCJu''@;'; put 'put ''Z1RlbXBsYXRlT3V0bGV0IixjKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLEZFKDIsTVN0LHIsaSxhKSl9fWZ1bmN0aW9uIE5TdChuLHQpezEmbiYmamwoMCl9ZnVuY3Rpb24gVlN0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw1NCksY3QoMSxOU3QsMSwwLCJuZy1jb250YWluZXIiLDUz''@;'; put 'put ''KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKS5uZ1ZhcixyPUVlKCksaT1yLiRpbXBsaWNpdCxhPXIuaW5kZXgsYz1FZSgpLmluZGV4LG09RWUoKSxDPWRhKDMxKSxQPWRhKDMzKTthZSgpLHllKCJuZ1RlbXBsYXRlT3V0bGV0IixlJiZtLnVzZVBpY2tlcnM/QzpQKSgibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dENvbnRleHQiLGNQKDIseFN0LGksYSxjLGUpKX19ZnVuY3Rpb24gQlN0KG4sdCl7MSZuJiZqbCgwKX1mdW5jdGlvbiBqU3Qobix0KXsxJm4mJmpsKDApfWZ1bmN0aW9uIHpTdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsNTUpKDEsImRpdiIsNTYpLGN0KDIsQlN0LDEsMCwibmctY29udGFp''@;'; put 'put ''bmVyIiw1MyksaWUoKSxyZSgzLCJkaXYiLDU3KSxjdCg0LGpTdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKCkubmdWYXIscj1FZSgpLGk9ci4kaW1wbGljaXQsYT1yLmluZGV4LGM9RWUoKS5pbmRleCxtPUVlKCksQz1kYSgzMSksUD1kYSgzNSk7YWUo''@;'; put 'put ''MikseWUoIm5nVGVtcGxhdGVPdXRsZXQiLGUmJm0udXNlUGlja2Vycz9DOlApKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsY1AoNCxFU3QsaSxhLGMsZSkpLGFlKDIpLHllKCJuZ1RlbXBsYXRlT3V0bGV0IixlJiZtLnVzZVBpY2tlcnM/QzpQKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQi''@;'; put 'put ''LGNQKDksVFN0LGksYSxjLGUpKX19ZnVuY3Rpb24gVVN0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDcpLFRlKDIsIlZhbHVlIiksaWUoKSxyZSgzLCJpbnB1dCIsNTkpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25z''@;'; put 'put ''dCBhPUVlKDIpLiRpbXBsaWNpdDtyZXR1cm4gdWkoYS52YWx1ZSxpKXx8KGEudmFsdWU9aSksbXQoaSl9KSxrdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgyKS5pbmRleCxjPUVlKCkuaW5kZXg7cmV0dXJuIG10KEVlKCkuc2V0VmFyaWFibGVWYWx1ZXMo''@;'; put 'put ''aSxhLGMpKX0pLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMikuJGltcGxpY2l0O2FlKDMpLGxpKCJuZ01vZGVsIixlLnZhbHVlKX19ZnVuY3Rpb24gV1N0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw0NiksY3QoMSxIU3QsNCw2LCJkaXYiLDQ3KSgyLFZTdCwyLDcsImRpdiIsNDgpKDMs''@;'; put 'put ''elN0LDUsMTQsImRpdiIsNDkpKDQsVVN0LDQsMSwiZGl2Iiw1MCksaWUoKSksMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLCJJTiI9PT1lLm9wZXJhdG9yfHwiTk9UIElOIj09PWUub3BlcmF0b3IpLGFlKCkseWUoIm5nSWYiLCJCRVRXRUVOIiE9PWUub3BlcmF0''@;'; put 'put ''b3ImJiJJTiIhPT1lLm9wZXJhdG9yJiYiTk9UIElOIiE9PWUub3BlcmF0b3ImJiJMSUtFIiE9PWUub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1lLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09ZS5vcGVyYXRvciksYWUoKSx5ZSgibmdJZiIsIkJFVFdFRU4iPT09ZS5vcGVyYXRvciksYWUoKSx5''@;'; put 'put ''ZSgibmdJZiIsIkxJS0UiPT09ZS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWUub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1lLm9wZXJhdG9yKX19ZnVuY3Rpb24gWlN0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IiwxMCkoMSwiZGl2IiwzNSkoMiwiZGl2IiwzNikoMywi''@;'; put 'put ''YXBwLXNvZnQtc2VsZWN0IiwzNyksY2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gdWkoYS52YXJpYWJsZSxpKXx8KGEudmFyaWFibGU9aSksbXQoaSl9KSxrdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUp''@;'; put 'put ''LGM9YS4kaW1wbGljaXQsbT1hLmluZGV4LEM9RWUoKS5pbmRleDtyZXR1cm4gbXQoRWUoKS52YXJpYWJsZUlucHV0Q2hhbmdlKGMudmFyaWFibGUsbSxDLGkpKX0pLGN0KDQsT1N0LDIsMSwib3B0aW9uIiwzOCksaWUoKSgpKCkscmUoNSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVjdC1jb250YWlu''@;'; put 'put ''ZXIiKSg3LCJsYWJlbCIpLFRlKDgsIk9wZXJhdG9yIiksaWUoKSxyZSg5LCJzZWxlY3QiLDQwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3QgYT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIHVpKGEub3BlcmF0b3IsaSl8fChhLm9wZXJhdG9yPWkpLG10KGkpfSksa3QoIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKSxhPWkuJGltcGxpY2l0LGM9aS5pbmRleCxtPUVlKCkuaW5kZXg7cmV0dXJuIG10KEVlKCkuc2V0VmFyaWFibGVPcGVyYXRvcihjLGEub3BlcmF0b3IsbSkpfSksY3QoMTAsUFN0LDIsMSwib3B0aW9uIiwzOCksaWUoKSgpKCks''@;'; put 'put ''Y3QoMTEsV1N0LDUsNCwiZGl2Iiw0MSkscmUoMTIsImRpdiIsNDIpKDEzLCJidXR0b24iLDQzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS5pbmRleCxhPUVlKCkuaW5kZXg7cmV0dXJuIG10KEVlKCkucmVtb3ZlQ2xhdXNlKGksYSkpfSksVnQoMTQsImNsci1pY29uIiw0''@;'; put 'put ''NCkoMTUsInNwYW4iKSxpZSgpLHJlKDE2LCJidXR0b24iLDQ1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpLmluZGV4O3JldHVybiBtdChFZSgpLmFkZENsYXVzZShpKSl9KSxWdCgxNywiY2xyLWljb24iLDMzKSgxOCwic3BhbiIpLGllKCkoKSgpfWlmKDImbil7''@;'; put 'put ''Y29uc3QgZT10LiRpbXBsaWNpdCxyPXQuaW5kZXgsaT1FZSgpLmluZGV4LGE9RWUoKTticigiaW52YWxpZC1jbGF1c2UiLGUuaW52YWxpZENsYXVzZSksYWUoMykseWUoImlkIiwic2VsZWN0X3ZhbHNfdmFyX2lkIityKyJfIitpKSgiaW5wdXRJZCIsInZhbHNfdmFyX2lkIityKyJfIitpKSgi''@;'; put 'put ''ZW1pdE9ubHlTZWxlY3RlZCIsITApLGxpKCJ2YWx1ZSIsZS52YXJpYWJsZSksYWUoKSx5ZSgibmdGb3JPZiIsYS5jb2xzKSxhZSg1KSxsaSgibmdNb2RlbCIsZS5vcGVyYXRvciksYWUoKSx5ZSgibmdGb3JPZiIsZS5vcGVyYXRvcnMpLGFlKCkseWUoIm5nVmFyIiwiREFURSI9PT1lLmRkdHlw''@;'; put 'put ''ZXx8IkRBVEVUSU1FIj09PWUuZGR0eXBlfHwiVElNRSI9PT1lLmRkdHlwZSksYWUoMikseWUoImRpc2FibGVkIiwxPT09YS5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzLmxlbmd0aCl9fWZ1bmN0aW9uIFlTdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMjQpKDEs''@;'; put 'put ''ImRpdiIsMTApKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVyIikoNSwibGFiZWwiKSxUZSg2LCJMb2dpYyIpLGllKCkscmUoNywic2VsZWN0IiwyNyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSkuJGltcGxpY2l0O3Jl''@;'; put 'put ''dHVybiB1aShhLmNsYXVzZUxvZ2ljLGkpfHwoYS5jbGF1c2VMb2dpYz1pKSxtdChpKX0pLGt0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLnNldExvZ2ljKCkpfSksY3QoOCxJU3QsMiwyLCJvcHRpb24iLDEzKSxpZSgpKCkoKSxWdCg5LCJiciIpLGN0''@;'; put 'put ''KDEwLFJTdCw0LDAsImJ1dHRvbiIsMjgpLGllKCkscmUoMTEsImRpdiIsMjkpLGN0KDEyLExTdCwxLDAsImNsci1pY29uIiwzMCkoMTMsWlN0LDE5LDExLCJkaXYiLDMxKSxpZSgpKCksVnQoMTQsImJyIiksaWUoKX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQscj1FZSgpO2FlKCksYnIo''@;'; put 'put ''ImludmFsaWQtY2xhdXNlIixlLmludmFsaWRDbGF1c2UpLGFlKDYpLGxpKCJuZ01vZGVsIixlLmNsYXVzZUxvZ2ljKSx5ZSgiZGlzYWJsZWQiLGUuZWxlbWVudHMubGVuZ3RoPDIpLGFlKCkseWUoIm5nRm9yT2YiLHIubG9naWNPcGVyYXRvcnMpLGFlKDIpLHllKCJuZ0lmIixyLmlubmVyV2lk''@;'; put 'put ''dGg+NzY4KSxhZSgyKSx5ZSgibmdJZiIsci5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xKSxhZSgpLHllKCJuZ0Zvck9mIixlLmVsZW1lbnRzKX19ZnVuY3Rpb24gR1N0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MiksaGwoMiwic2Fz''@;'; put 'put ''VG9Kc0RhdGUiKSxobCgzLCJzYXNUb0pzRGF0ZSIpLGt0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpLGM9YS5xdWVyeSxtPWEucXVlcnlWYWx1ZUluZGV4LEM9YS5xdWVyeUluZGV4LFA9YS5jbGF1c2VJbmRleDtyZXR1cm4gbXQoRWUoKS5kYXRlQ2hhbmdl''@;'; put 'put ''KGksYyxDLFAsbSkpfSksaWUoKSxpaSgpfWlmKDImbil7Y29uc3QgZT1FZSgpLHI9ZS5xdWVyeSxpPWUucXVlcnlWYWx1ZUluZGV4LGE9ZS5xdWVyeUluZGV4LGM9ZS5jbGF1c2VJbmRleDthZSgpLHllKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIithKyJf''@;'; put 'put ''IitjKSgidmFsdWUiLHZvaWQgMCE9PWk/UmMoMiwzLHIudmFsdWVbaV0pOlJjKDMsNSxyLnZhbHVlKSl9fWZ1bmN0aW9uICRTdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLGhsKDIsInNhc1RvSnNEYXRlIiksaGwoMywic2FzVG9K''@;'; put 'put ''c0RhdGUiKSxrdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKSxjPWEucXVlcnlJbmRleCxtPWEuY2xhdXNlSW5kZXg7cmV0dXJuIG10KEVlKCkuZ2V0UXVlcnlEYXRlVGltZShtLGMpLmRhdGU9aSl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2d0KGUp''@;'; put 'put ''O2NvbnN0IGk9RWUoKSxhPWkucXVlcnksYz1pLnF1ZXJ5VmFsdWVJbmRleCxtPWkucXVlcnlJbmRleCxDPWkuY2xhdXNlSW5kZXg7cmV0dXJuIG10KEVlKCkuZGF0ZVRpbWVDaGFuZ2UoYSxtLEMsYykpfSksaWUoKSxyZSg0LCJhcHAtc29mdC1zZWxlY3QiLDY0KSxobCg1LCJzYXNUb0pzRGF0''@;'; put 'put ''ZSIpLGhsKDYsInNhc1RvSnNEYXRlIiksa3QoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCksYz1hLnF1ZXJ5SW5kZXgsbT1hLmNsYXVzZUluZGV4O3JldHVybiBtdChFZSgpLmdldFF1ZXJ5RGF0ZVRpbWUobSxjKS50aW1lPWkpfSkoIm9uSW5wdXRFdmVudCIs''@;'; put 'put ''ZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCksYT1pLnF1ZXJ5LGM9aS5xdWVyeVZhbHVlSW5kZXgsbT1pLnF1ZXJ5SW5kZXgsQz1pLmNsYXVzZUluZGV4O3JldHVybiBtdChFZSgpLmRhdGVUaW1lQ2hhbmdlKGEsbSxDLGMpKX0pLGllKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKSxy''@;'; put 'put ''PWUucXVlcnksaT1lLnF1ZXJ5VmFsdWVJbmRleCxhPWUucXVlcnlJbmRleCxjPWUuY2xhdXNlSW5kZXg7YWUoKSx5ZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrYSsiXyIrYykoInZhbHVlIix2b2lkIDAhPT1pP0k5KDIsNixyLnZhbHVlW2ldLCJzZWNv''@;'; put 'put ''bmRzIik6STkoMyw5LHIudmFsdWUsInNlY29uZHMiKSksYWUoMykseWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX3RpbWUiK2ErIl8iK2MpKCJ2YWx1ZSIsdm9pZCAwIT09aT9RWSg1LDEyLHIudmFsdWVbaV0sInNlY29uZHMiLCEwKTpRWSg2LDE2LHIudmFsdWUs''@;'; put 'put ''InNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIEtTdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjUpLGhsKDIsInNlY29uZHNQYXJzZXIiKSxobCgzLCJzZWNvbmRzUGFyc2VyIiksa3QoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaSl7Z3Qo''@;'; put 'put ''ZSk7Y29uc3QgYT1FZSgpLGM9YS5xdWVyeSxtPWEucXVlcnlWYWx1ZUluZGV4LEM9YS5xdWVyeUluZGV4LFA9YS5jbGF1c2VJbmRleDtyZXR1cm4gbXQoRWUoKS50aW1lQ2hhbmdlKGksYyxDLFAsbSkpfSksaWUoKSxpaSgpfWlmKDImbil7Y29uc3QgZT1FZSgpLHI9ZS5xdWVyeSxpPWUucXVl''@;'; put 'put ''cnlWYWx1ZUluZGV4LGE9ZS5xdWVyeUluZGV4LGM9ZS5jbGF1c2VJbmRleDthZSgpLHllKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2ErIl8iK2MpKCJ2YWx1ZSIsdm9pZCAwIT09aT9SYygyLDMsci52YWx1ZVtpXSk6UmMoMyw1LHIudmFsdWUpKX19ZnVuY3Rp''@;'; put 'put ''b24gWFN0KG4sdCl7MSZuJiYocmkoMCw2MCksY3QoMSxHU3QsNCw3LCJuZy1jb250YWluZXIiLDYxKSgyLCRTdCw3LDIwLCJuZy1jb250YWluZXIiLDYxKSgzLEtTdCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpLGlpKCkpLDImbiYmKHllKCJuZ1N3aXRjaCIsdC5xdWVyeS5kZHR5cGUpLGFlKCks''@;'; put 'put ''eWUoIm5nU3dpdGNoQ2FzZSIsIkRBVEUiKSxhZSgpLHllKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLGFlKCkseWUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rpb24gcVN0KG4sdCl7aWYoMSZuJiYocmUoMCwib3B0aW9uIiw2OCksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPXQu''@;'; put 'put ''JGltcGxpY2l0O3llKCJ2YWx1ZSIsZS51bmZvcm1hdHRlZCksYWUoKSxNcigiICIsZS5mb3JtYXR0ZWQudHJpbSgpLCIgIil9fWZ1bmN0aW9uIEpTdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIpLGN0KDEscVN0LDIsMiwib3B0aW9uIiw2NyksaWUoKSksMiZuKXtjb25zdCBlPUVlKCkucXVl''@;'; put 'put ''cnk7YWUoKSx5ZSgibmdGb3JPZiIsZS52YWx1ZXMpfX1mdW5jdGlvbiBRU3Qobix0KXtpZigxJm4mJihyZSgwLCJvcHRpb24iLDY4KSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQ7eWUoInZhbHVlIixlLk5BTUUpLGFlKCksTXIoIiAiLGUuTkFNRSwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBlTXQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLFFTdCwyLDIsIm9wdGlvbiIsNjkpLGlpKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKDIpLnF1ZXJ5O2FlKCkseWUoIm5nSWYiLGUuVFlQRT09PXIudHlwZSl9fWZ1bmN0aW9uIHRNdChuLHQpe2lmKDEmbiYmKHJlKDAs''@;'; put 'put ''ImRpdiIpLGN0KDEsZU10LDIsMSwibmctY29udGFpbmVyIiwzOCksaWUoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKCkseWUoIm5nRm9yT2YiLGUuY29scyl9fWZ1bmN0aW9uIG5NdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjYpLGt0KCJzZWxl''@;'; put 'put ''Y3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLnF1ZXJ5O3JldHVybiBtdChFZSgpLnNlbGVjdGVkTGFiZWxDaGFuZ2UoaSxhKSl9KSxjaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSkucXVlcnk7cmV0dXJuIHVpKGEudmFsdWUsaSl8fChh''@;'; put 'put ''LnZhbHVlPWkpLG10KGkpfSksa3QoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaSl7Y29uc3QgYT1ndChlKSxjPWEucXVlcnlJbmRleCxtPWEuY2xhdXNlSW5kZXg7cmV0dXJuIG10KEVlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaS50YXJnZXQudmFsdWUsYyxtKSl9KSgib25BdXRvY29tcGxldGVM''@;'; put 'put ''b2FkaW5nTW9yZSIsZnVuY3Rpb24oaSl7Y29uc3QgYT1ndChlKSxjPWEucXVlcnksbT1hLnF1ZXJ5SW5kZXgsQz1hLmNsYXVzZUluZGV4O3JldHVybiBtdChFZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaSxjLnZhcmlhYmxlLG0sQykpfSksY3QoMSxKU3QsMiwxLCJkaXYiLDIwKSgy''@;'; put 'put ''LHRNdCwyLDEsImRpdiIsMjApLGllKCl9aWYoMiZuKXtjb25zdCBlPXQucXVlcnkscj10LnF1ZXJ5SW5kZXgsaT10LmNsYXVzZUluZGV4O3llKCJzZWNvbmRMYWJlbCIsIlZhcmlhYmxlIikoImVtaXRPbmx5U2VsZWN0ZWQiLGUudmFsdWVWYXJpYWJsZSkoImlucHV0SWQiLCJ2YWxzXyIrcisi''@;'; put 'put ''XyIraSksbGkoInZhbHVlIixlLnZhbHVlKSx5ZSgiZW5hYmxlTG9hZE1vcmUiLGUubm9icz5lLnZhbHVlcy5sZW5ndGgpLGFlKCkseWUoIm5nSWYiLCFlLnZhbHVlVmFyaWFibGUpLGFlKCkseWUoIm5nSWYiLGUudmFsdWVWYXJpYWJsZSl9fWZ1bmN0aW9uIHJNdChuLHQpe2lmKDEmbiYmKHJl''@;'; put 'put ''KDAsIm9wdGlvbiIsNjgpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgidmFsdWUiLGUuZm9ybWF0dGVkKSxhZSgpLE1yKCIgIixlLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBpTXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJhcHAtc29mdC1zZWxl''@;'; put 'put ''Y3QiLDcwKSxjaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSksYz1hLnF1ZXJ5LG09YS5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIHVpKGMudmFsdWVbbV0saSl8fChjLnZhbHVlW21dPWkpLG10KGkpfSksa3QoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXtjb25zdCBp''@;'; put 'put ''PWd0KGUpLGE9aS5xdWVyeSxjPWkucXVlcnlJbmRleCxtPWkuY2xhdXNlSW5kZXg7cmV0dXJuIG10KEVlKCkuc2V0VmFyaWFibGVWYWx1ZXMoYS52YWx1ZSxjLG0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLGM9YS5xdWVyeSxtPWEu''@;'; put 'put ''cXVlcnlJbmRleCxDPWEuY2xhdXNlSW5kZXg7cmV0dXJuIG10KEVlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShpLGMudmFyaWFibGUsbSxDKSl9KSxjdCgxLHJNdCwyLDIsIm9wdGlvbiIsNjcpLGllKCl9aWYoMiZuKXtjb25zdCBlPXQucmFuZ2Uscj10LnF1ZXJ5LGk9dC5xdWVyeVZh''@;'; put 'put ''bHVlSW5kZXg7eWUoImlucHV0SWQiLCJ2YWxzLSIrZSsiXyIrdC5xdWVyeUluZGV4KyJfIit0LmNsYXVzZUluZGV4KSxsaSgidmFsdWUiLHIudmFsdWVbaV0pLHllKCJlbmFibGVMb2FkTW9yZSIsci5ub2JzPnIudmFsdWVzLmxlbmd0aCkoImRpc2FibGVkIix2b2lkIDAhPT1pJiYic3RhcnQi''@;'; put 'put ''IT09ZSYmIXIudmFsdWVbMF0pLGFlKCkseWUoIm5nRm9yT2YiLHIudmFsdWVzKX19ZnVuY3Rpb24gYU10KG4sdCl7MSZuJiYocmUoMCwiaDUiLDc4KSxUZSgxLCIgTm8gdmFsdWVzIGF2YWlsYWJsZS4gIiksaWUoKSl9ZnVuY3Rpb24gb010KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUo''@;'; put 'put ''MCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxLCJpbnB1dCIsODApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLmluZGV4LGM9RWUoMikucXVlcnk7cmV0dXJuIHVpKGMudmFsdWVbYV0uY2hlY2tlZCxpKXx8KGMudmFsdWVbYV0uY2hlY2tlZD1pKSxtdChp''@;'; put 'put ''KX0pLGt0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDIpLGM9YS5xdWVyeUluZGV4LG09YS5jbGF1c2VJbmRleDtyZXR1cm4gbXQoRWUoKS5zZXRWYXJpYWJsZVZhbHVlcyhpLGMsbSkpfSksaWUoKSxyZSgyLCJsYWJlbCIpLFRlKDMpLGllKCkoKX1pZigy''@;'; put 'put ''Jm4pe2NvbnN0IGU9dC4kaW1wbGljaXQscj10LmluZGV4LGk9RWUoMikucXVlcnk7YWUoKSxsaSgibmdNb2RlbCIsaS52YWx1ZVtyXS5jaGVja2VkKSxhZSgyKSxNcigiICIsZS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gc010KG4sdCl7aWYoMSZuJiYocmUoMCwic2VjdGlvbiIsNzkpKDEs''@;'; put 'put ''ImNsci1jaGVja2JveC1jb250YWluZXIiKSxjdCgyLG9NdCw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIiwzOCksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoKS5xdWVyeTthZSgyKSx5ZSgibmdGb3JPZiIsZS52YWx1ZXMpfX1mdW5jdGlvbiBsTXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4o''@;'; put 'put ''KTtyZSgwLCJjbHItbW9kYWwiLDcxKSgxLCJoMyIsNzIpLFRlKDIsIlNlbGVjdCB2YWx1ZXMiKSxpZSgpLHJlKDMsImRpdiIsNzMpLGN0KDQsYU10LDIsMCwiaDUiLDc0KSg1LHNNdCwzLDEsInNlY3Rpb24iLDc1KSxpZSgpLHJlKDYsImRpdiIsNzYpKDcsImJ1dHRvbiIsNzcpLGt0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCk7cmV0dXJuIGkuY3VycmVudFF1ZXJ5SW5kZXg9LTEsbXQoaS5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksVGUoOCwiIEFwcGx5ICIpLGllKCkoKSgpfWlmKDImbil7Y29uc3QgZT10LnF1ZXJ5LHI9dC5xdWVyeUluZGV4LGk9dC5jbGF1''@;'; put 'put ''c2VJbmRleCxhPUVlKCk7eWUoImNsck1vZGFsT3BlbiIsYS5jdXJyZW50UXVlcnlJbmRleD09PXImJmEuY3VycmVudENsYXVzZUluZGV4PT09aSkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxhZSg0KSx5ZSgibmdJZiIsIWEuaXNBcnIoZS52YWx1ZSkpLGFlKCkseWUoIm5nSWYiLGEuaXNBcnIo''@;'; put 'put ''ZS52YWx1ZSkpfX0hZnVuY3Rpb24gYmplKG4sdCxlKXsoZnVuY3Rpb24gWE1lKG4sdCxlKXsic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD1uW25jLkxvY2FsZUlkXSksdD10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksUWJbdF09bixlJiYoUWJbdF1bbmMuRXh0cmFEYXRhXT1l''@;'; put 'put ''KX0pKG4sdCxlKX0oY1N0KTtsZXQgbWFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9ZSx0aGlzLmV2ZW50U2VydmljZT1yLHRoaXMuaGVscGVyU2VydmljZT1pLHRoaXMuY2RmPWEsdGhpcy5jYWNoaW5nPSEwLHRoaXMucm93c19pbmNy''@;'; put 'put ''ZW1lbnQ9MTAwLHRoaXMuaW5pdGlhbF9yb3dzPTFlMyx0aGlzLmNsYXVzZUFtdD1bIiJdLHRoaXMubnVtT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5jaGFyT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIs''@;'; put 'put ''IkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMubm90SW49ITEsdGhpcy5ub3RBcnI9ITAsdGhpcy53YXNCZXR3ZWVuPSExLHRoaXMud2hlcmVDbGF1c2VMb2FkaW5nPSExLHRoaXMuZHluYW1pY1doZXJlQ2xhdXNlPSEwLHRoaXMudXNlUGlja2Vycz0hMSx0aGlzLnF1ZXJ5T2Jq''@;'; put 'put ''PXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlVmFyaWFibGU6ITEsc3RhcnRyb3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XSxjbGF1c2VMb2dpYzoi''@;'; put 'put ''IixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxmb3JtYXQ6bnVsbCx0eXBlOm51bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlzLmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0s''@;'; put 'put ''Y2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMubG9naWNPcGVyYXRvcnM9WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJlbnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PS0xLHRoaXMucGVuZGluZ0lO''@;'; put 'put ''VmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4ud2lkdGgsdGhpcy5pbm5lcldpZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1lKGUscil7bGV0IGk9dGhpcy5xdWVyeURhdGVUaW1l''@;'; put 'put ''LmZpbmQoYT0+YS5jbGF1c2VJbmRleD09PWUmJmEucXVlcnlJbmRleD09PXIpO2lmKCFpKXtjb25zdCBhPXRoaXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDplLHF1ZXJ5SW5kZXg6cixkYXRlOiIiLHRpbWU6IiJ9KS0xO2k9dGhpcy5xdWVyeURhdGVUaW1lW2FdfXJldHVybiBp''@;'; put 'put ''fXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy51c2VQaWNrZXJzJiZ0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChlPT57ZS5lbGVtZW50cy5mb3JFYWNoKHI9PntbIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhyLmRkdHlwZSkmJnIu''@;'; put 'put ''dmFsdWVWYXJpYWJsZSYmKHIudmFsdWU9IiIsci52YWx1ZVZhcmlhYmxlPSExKX0pfSl9cmVzZXRGaWx0ZXIoKXt0aGlzLndoZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZvaWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlw''@;'; put 'put ''ZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0sdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMud2hlcmVD''@;'; put 'put ''bGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGU9IiI7ImhvbWUiPT09V24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PVduLnJvb3RQYXJhbT9lPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2''@;'; put 'put ''aWV3Ij09PVduLnJvb3RQYXJhbSYmKGU9InZpZXdlciIpLHhjKFduLGUpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJih4YyhXbixlKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhpcy53aGVyZUNsYXVzZSksInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYoeGMoV24sZSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLHhjKFduLGUpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlc31nZXRGcm9tR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBlPSIiOyJob21lIj09PVduLnJvb3RQYXJh''@;'; put 'put ''bXx8ImVkaXRvciI9PT1Xbi5yb290UGFyYW0/ZT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Xbi5yb290UGFyYW0mJihlPSJ2aWV3ZXIiKSx4YyhXbixlKS5maWx0ZXIuY29scy5sZW5ndGg+MCYmKHRoaXMuY29scz1KU09O''@;'; put 'put ''LnBhcnNlKEpTT04uc3RyaW5naWZ5KHhjKFduLGUpLmZpbHRlci5jb2xzKSkpLHhjKFduLGUpLmZpbHRlci52YWxzLmxlbmd0aD4wJiYodGhpcy52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoeGMoV24sZSkuZmlsdGVyLnZhbHMpKSksIiIhPT14YyhXbixlKS5maWx0ZXIuZ3JvdXBM''@;'; put 'put ''b2dpYyYmKHRoaXMuZ3JvdXBMb2dpYz14YyhXbixlKS5maWx0ZXIuZ3JvdXBMb2dpYyx0aGlzLndoZXJlQ2xhdXNlPXhjKFduLGUpLmZpbHRlci53aGVyZUNsYXVzZSx0aGlzLmxpYmRzPXhjKFduLGUpLmZpbHRlci5saWJkcyx0aGlzLmNsYXVzZXM9eGMoV24sZSkuZmlsdGVyLmNsYXVzZXMs''@;'; put 'put ''dGhpcy53aGVyZUNsYXVzZUZuKCkpfXNldEdyb3VwTG9naWMoZSl7dGhpcy5ncm91cExvZ2ljPWUsdGhpcy5jbGF1c2VzLmdyb3VwTG9naWM9ZSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWRhdGVDaGFuZ2UoZSxyLGksYSxjKXtsZXQgbT10aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShlKTsiQkVUV0VFTiI9PT1yLm9wZXJhdG9yJiZ2b2lkIDAhPT1jJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2ldLnZhbHVlW2NdPW0pLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMobSxpLGEpfWRhdGVUaW1lQ2hhbmdlKGUs''@;'; put 'put ''cixpLGEpe2NvbnN0IGM9dGhpcy5nZXRRdWVyeURhdGVUaW1lKGkscik7aWYoIiI9PT1jLmRhdGUpe2lmKCIiPT09ZS52YWx1ZSlyZXR1cm47Yy5kYXRlPWUudmFsdWUuc3BsaXQoIjoiKVswXX1jb25zdCBtPXBhcnNlSW50KGMudGltZS5zcGxpdCgiOiIpWzBdKSxDPXBhcnNlSW50KGMudGlt''@;'; put 'put ''ZS5zcGxpdCgiOiIpWzFdKSxQPXBhcnNlSW50KGMudGltZS5zcGxpdCgiOiIpWzJdKXx8MDtsZXQgWT1uZXcgRGF0ZShjLmRhdGUpLEo9bmV3IERhdGUoWS5nZXRGdWxsWWVhcigpLFkuZ2V0TW9udGgoKSxZLmdldERhdGUoKSxtLEMsUCksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRK''@;'; put 'put ''c0RhdGVUb1Nhc0RhdGUoSiwic2Vjb25kcyIpOyJCRVRXRUVOIj09PWUub3BlcmF0b3ImJnZvaWQgMCE9PWEmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbcl0udmFsdWVbYV09Y2UpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoY2UscixpKX10aW1lQ2hhbmdlKGUscixpLGEs''@;'; put 'put ''Yyl7ZT1lLnRhcmdldC52YWx1ZTtsZXQgY2U9NjAqcGFyc2VJbnQoZS5zcGxpdCgiOiIpWzBdKSo2MCs2MCpwYXJzZUludChlLnNwbGl0KCI6IilbMV0pKyhwYXJzZUludChlLnNwbGl0KCI6IilbMl0pfHwwKTsiQkVUV0VFTiI9PT1yLm9wZXJhdG9yJiZ2b2lkIDAhPT1jJiYodGhpcy5jbGF1''@;'; put 'put ''c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2ldLnZhbHVlW2NdPWNlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKGNlLGksYSl9ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihlLHIpe2xldCBpPVtdO2lmKHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MXx8dGhpcy5jbGF1c2VzLnF1ZXJ5''@;'; put 'put ''T2JqW2VdLmVsZW1lbnRzLmxlbmd0aD4xKWZvcihsZXQgYT0wO2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspZm9yKGxldCBjPTA7Yzx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoO2MrKyl7aWYoYT09PWUmJmM9PT1yfHxbbnVsbCx2b2lkIDBdLmlu''@;'; put 'put ''Y2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tjXS52YXJpYWJsZSl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2NdLm9wZXJhdG9yKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVl''@;'; put 'put ''cnlPYmpbYV0uZWxlbWVudHNbY10udmFsdWUpKWNvbnRpbnVlO2xldCBtPSIiO2NvbnN0IEM9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2NdLm9wZXJhdG9yLFA9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2NdLnZhcmlhYmxlOyJCRVRXRUVOIj09PUM/bT1g''@;'; put 'put ''JHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbY10udmFsdWVbMF19IEFORCAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXVtjXS52YWx1ZVsxXX1gOiJJTiI9PT1DfHwiTk9UIElOIj09PUM/KHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXVtjXS52YWx1ZS5mb3JFYWNoKFk9Pntp''@;'; put 'put ''ZihZLmNoZWNrZWQpe2xldCBKPVkudmFsOyJzdHJpbmciIT10eXBlb2YgSnx8KDAsaDUuaXNTcGVjaWFsTWlzc2luZykoSik/bS5sZW5ndGg+MD9tKz1gLCR7Sn1gOm09YCgke0p9YDptLmxlbmd0aD4wP20rPWAsJyR7Sn0nYDptPWAoJyR7Sn0nYH19KSxtLmxlbmd0aD4wJiYobSs9IikiKSk6''@;'; put 'put ''IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbY10udmFsdWU/bT0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbY10udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2NdLnR5cGUmJiht''@;'; put 'put ''PWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbY10udmFsdWV9J2ApLGkucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9J''@;'; put 'put ''RDphLFZBUklBQkxFX05NOlAsT1BFUkFUT1JfTk06QyxSQVdfVkFMVUU6bXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2NdLnZhbHVlfSl9cmV0dXJuIGl9Z2V0VmFsdWVzTG9hZE1vcmUoZSxyLGksYSl7dmFyIGM9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtjb25zdCBt''@;'; put 'put ''PWMubGliZHN8fCIiO3RyeXtpZih2b2lkIDAhPT1jLmNvbHMpe2ZvcihsZXQgSGU9MDtIZTxjLmNvbHMubGVuZ3RoO0hlKyspYy5jb2xzW0hlXS5OQU1FPT09ciYmKGMuc2VsVmFyLmluZGV4PUhlKTtjb25zdCBDPWMuY29sc1tjLnNlbFZhci5pbmRleF0uRERUWVBFLHtzdGFydHJvdzpQLHJv''@;'; put 'put ''d3M6WX09Yy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2ldLEo9Yy5yb3dzX2luY3JlbWVudCxjZT1QK1k7bGV0IGZlPVtdO2MuZHluYW1pY1doZXJlQ2xhdXNlJiYoZmU9Yy5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsaSkpO2NvbnN0IEFlPVsiREFURVRJTUUiLCJUSU1FIiwi''@;'; put 'put ''REFURSJdLmluY2x1ZGVzKEMpO2Muc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKHIsbSxmZSxjZSxKKS50aGVuKEhlPT57Y29uc3QgWGU9SGUudmFscyx7U1RBUlRST1c6cnQsUk9XUzpkdCxOT0JTOmp0fT1IZS5tZXRhWzBdO2lmKGMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50''@;'; put 'put ''c1tpXS5zdGFydHJvdz1ydCxjLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbaV0ucm93cz1kdCxjLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbaV0ubm9icz1qdCwxPT09WGUubGVuZ3RoJiYiIj09PVhlWzBdLkZPUk1BVFRFRCYmIiI9PT1YZVswXS5VTkZPUk1BVFRFRD9lLmxv''@;'; put 'put ''YWRNb3JlRmluaXNoZWQoITEpOihjLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbaV0udmFsdWVzLnB1c2goLi4uWGUubWFwKG9uPT57Y29uc3QgZ249Im51bSI9PT1IZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IEdyPWduJiYoMCxoNS5pc1NwZWNpYWxNaXNzaW5nKShv''@;'; put 'put ''bi5VTkZPUk1BVFRFRCk/Ii4iK29uLlVORk9STUFUVEVEOm9uLlVORk9STUFUVEVEO3JldHVybiBnbiYmbnVsbD09PUdyJiYoR3I9Ii4iKSx7Zm9ybWF0dGVkOkFlP29uLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOm9uLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpHcn19KSksZS5sb2FkTW9yZUZp''@;'; put 'put ''bmlzaGVkKGp0LWMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tpXS52YWx1ZXMubGVuZ3RoPjApKSxjLndoZXJlQ2xhdXNlRm4oKSxjLnNldFRvR2xvYmFscygpLGMud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1jLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5k''@;'; put 'put ''ZXg6RnQscXVlcnlJbmRleDpwbn09Yy5wZW5kaW5nSU5WYWx1ZXNTZXQ7Yy5zZXRJTlZhbHVlcyhGdCxwbiksYy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1jLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChIZT0+e2Mud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKEMpe2MuZXZl''@;'; put 'put ''bnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLEMpfX0pKCl9Z2V0VmFsdWVzKGUscixpKXt2YXIgYT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2Eud2hlcmVDbGF1c2VMb2FkaW5nPSEwO2xldCBjPSIiO3ZvaWQgMCE9PWEubGliZHMmJihjPWEubGli''@;'; put 'put ''ZHMpLGEuY2xlYXJWYWx1ZXMocixpKSxhLmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbcl0udmFsdWVzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialtpXS5lbGVtZW50c1tyXS52YWx1ZT0iIixhLmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbcl0ub3BlcmF0b3I9Ij0iLGEuY2xhdXNl''@;'; put 'put ''cy5xdWVyeU9ialtpXS5lbGVtZW50c1tyXS52YXJpYWJsZT1lO3RyeXtpZih2b2lkIDAhPT1hLmNvbHMpe2ZvcihsZXQgWT0wO1k8YS5jb2xzLmxlbmd0aDtZKyspYS5jb2xzW1ldLk5BTUU9PT1lJiYoYS5zZWxWYXIuaW5kZXg9WSk7Y29uc3QgbT1hLmNvbHNbYS5zZWxWYXIuaW5kZXhdLkRE''@;'; put 'put ''VFlQRTthLmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbcl0uZGR0eXBlPW0sYS5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW3JdLnR5cGU9YS5jb2xzW2Euc2VsVmFyLmluZGV4XS5UWVBFLGEuY2xhdXNlcy5xdWVyeU9ialtpXS5lbGVtZW50c1tyXS5vcGVyYXRvcnM9Im51bSI9''@;'; put 'put ''PT1hLmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbcl0udHlwZT9hLm51bU9wZXJhdG9yczphLmNoYXJPcGVyYXRvcnM7bGV0IEM9W107YS5keW5hbWljV2hlcmVDbGF1c2UmJihDPWEuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihpLHIpKTtjb25zdCBQPVsiREFURVRJTUUiLCJUSU1F''@;'; put 'put ''IiwiREFURSJdLmluY2x1ZGVzKG0pO2Euc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGUsYyxDLDEsYS5pbml0aWFsX3Jvd3MpLnRoZW4oWT0+e2NvbnN0IEo9WS52YWxzLHtTVEFSVFJPVzpjZSxST1dTOmZlLE5PQlM6QWV9PVkubWV0YVswXTtpZihhLmNsYXVzZXMucXVlcnlPYmpb''@;'; put 'put ''aV0uZWxlbWVudHNbcl0uc3RhcnRyb3c9Y2UsYS5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW3JdLnJvd3M9ZmUsYS5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW3JdLm5vYnM9QWUsYS5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW3JdLnZhbHVlcz1KLm1hcChIZT0+e2Nv''@;'; put 'put ''bnN0IFhlPSJudW0iPT09WS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IGR0PVhlJiYoMCxoNS5pc1NwZWNpYWxNaXNzaW5nKShIZS5VTkZPUk1BVFRFRCk/Ii4iK0hlLlVORk9STUFUVEVEOkhlLlVORk9STUFUVEVEO3JldHVybiBYZSYmbnVsbD09PWR0JiYoZHQ9Ii4iKSx7Zm9y''@;'; put 'put ''bWF0dGVkOlA/SGUuRk9STUFUVEVELnNwbGl0KCIuIilbMF06SGUuRk9STUFUVEVELHVuZm9ybWF0dGVkOmR0fX0pLnNsaWNlKDAsMmUzKSxhLndoZXJlQ2xhdXNlRm4oKSxhLnNldFRvR2xvYmFscygpLGEud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1hLnBlbmRpbmdJTlZhbHVlc1Nl''@;'; put 'put ''dCl7Y29uc3R7Y2xhdXNlSW5kZXg6SGUscXVlcnlJbmRleDpYZX09YS5wZW5kaW5nSU5WYWx1ZXNTZXQ7YS5zZXRJTlZhbHVlcyhIZSxYZSksYS5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1hLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChZPT57YS53aGVyZUNsYXVzZUxvYWRpbmc9ITF9''@;'; put 'put ''KX19Y2F0Y2gobSl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsbSl9fSkoKX1nZXRsb2dpYyhlKXt0aGlzLmxvZ2ljPWUsdGhpcy53aGVyZUNsYXVzZUZuKCl9c2V0TG9naWMoKXt0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xv''@;'; put 'put ''YmFscygpfWlzQXJyKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQXJyYXkmJmUubGVuZ3RoPjAmJnR5cGVvZiBlWzBdLmNoZWNrZWQ8InUifXNlbGVjdGVkTGFiZWxDaGFuZ2UoZSxyKXtyLnZhbHVlVmFyaWFibGU9IlZhcmlhYmxlIj09PWUsci52YWx1ZT0iIix0aGlzLndoZXJlQ2xhdXNlRm4o''@;'; put 'put ''KX12YXJpYWJsZUlucHV0Q2hhbmdlKGUscixpLGEpe3RoaXMuZ2V0VmFsdWVzKGUscixpKX1zZXRWYXJpYWJsZVZhbHVlcyhlLHIsaSl7bGV0IGE9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW3JdLm9wZXJhdG9yOyJCRVRXRUVOIiE9PWEmJiJJTiIhPT1hJiYiTk9UIElOIiE9''@;'; put 'put ''PWEmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbcl0udmFsdWU9ZS50b1N0cmluZygpKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldFZhcmlhYmxlT3BlcmF0b3IoZSxyLGkpe2xldCBhPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtpXS5lbGVt''@;'; put 'put ''ZW50c1tlXS52YWx1ZTthIGluc3RhbmNlb2YgQXJyYXkmJiJJTiIhPT1yJiYiTk9UIElOIiE9PXImJihhPWEgaW5zdGFuY2VvZiBBcnJheSYmMj09PWEubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGFbMF0/YVswXToiIiksdGhpcy5jbGVhclZhbHVlc09wZXJhdG9yKGUsaSksdGhpcy5jbGF1''@;'; put 'put ''c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW2VdLm9wZXJhdG9yPXIsKCI9Ij09PXJ8fCI+Ij09PXJ8fCI8Ij09PXJ8fCI8PSI9PT1yfHwiPj0iPT09cnx8Ik5FIj09PXIpJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW2VdLnZhbHVlPWEpLCJCRVRXRUVOIj09PXImJih0aGlz''@;'; put 'put ''LmNsYXVzZXMucXVlcnlPYmpbaV0uZWxlbWVudHNbZV0udmFsdWU9W10sdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW2VdLnZhbHVlLnB1c2goYSksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ldLmVsZW1lbnRzW2VdLnZhbHVlLnB1c2goIiIpKSwoIklOIj09PXJ8fCJOT1QgSU4i''@;'; put 'put ''PT09cikmJnRoaXMuc2V0SU5WYWx1ZXMoaSxlKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldElOVmFsdWVzKGUscil7Y29uc3QgaT1bXSxhPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtlXS5lbGVtZW50c1tyXS52YWx1ZXM7YS5sZW5ndGg8MSYmKHRoaXMucGVu''@;'; put 'put ''ZGluZ0lOVmFsdWVzU2V0PXtjbGF1c2VJbmRleDplLHF1ZXJ5SW5kZXg6cn0pO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKWkucHVzaCh7Y2hlY2tlZDohMSx2YWw6YVtjXS5mb3JtYXR0ZWR9KTt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZV0uZWxlbWVudHNbcl0udmFsdWU9aX1jbGVhclZh''@;'; put 'put ''bHVlcyhlLHIpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtyXS5lbGVtZW50c1tlXS52YWx1ZT0iIn1jbGVhclZhbHVlc09wZXJhdG9yKGUscil7bGV0IGk9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW3JdLmVsZW1lbnRzW2VdLm9wZXJhdG9yOygiQkVUV0VFTiI9PT1pfHwiSU4iPT09aXx8Ik5PVCBJ''@;'; put 'put ''TiI9PT1pfHwiQ09OVEFJTlMiPT09aSkmJnRoaXMuY2xlYXJWYWx1ZXMoZSxyKX1oYXNJbnZhbGlkQ2x1YXNlKGUpe2ZvcihsZXQgciBvZiBlKWlmKHIuaW52YWxpZENsYXVzZT0hMSwiIj09PXIudmFsdWUmJiJORSIhPT1yLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09ci5vcGVyYXRvcnx8bnVs''@;'; put 'put ''bD09PXIudmFyaWFibGV8fG51bGw9PT1yLm9wZXJhdG9yfHxudWxsPT09ci52YWx1ZSlyZXR1cm4gci5pbnZhbGlkQ2xhdXNlPSEwLCEwO3JldHVybiBlLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBlPTA7ZTx0aGlzLmNsYXVzZXMucXVlcnlP''@;'; put 'put ''YmoubGVuZ3RoO2UrKyl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtlXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialtlXS5pbnZhbGlkQ2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialtlXS5pbnZhbGlkQ2xhdXNl''@;'; put 'put ''PSExfXJldHVybiExfWFkZENsYXVzZShlKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2VdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hl''@;'; put 'put ''biBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtlXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6''@;'; put 'put ''bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSk7bGV0IHI9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2VdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialtlXS5jbGF1c2VMb2dpYz10eXBlb2Ygcj4idSI/IkFORCI6Ik9SIj09PXI/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNl''@;'; put 'put ''Rm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBp''@;'; put 'put ''bnZhbGlkIG9yIGVtcHR5LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygp''@;'; put 'put ''KX1pc0luSHRtbENvbGxlY3Rpb24oZSxyKXtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKylpZihyW2ldLnZhbHVlPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShlKXt0aGlzLmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGUsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9''@;'; put 'put ''cmVtb3ZlQ2xhdXNlKGUscil7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW3JdLmVsZW1lbnRzLnNwbGljZShlLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihlPSExKXtjb25zdCByPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhp''@;'; put 'put ''cy5jbGF1c2VzKTtpZihlJiYoci5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGk9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKHIsdGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2V8fCh0aGlzLndoZXJlQ2xhdXNlPWku''@;'; put 'put ''d2hlcmVDbGF1c2UsdGhpcy53aGVyZVN0cmluZz1pLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7ZS5fcmVtb3ZlUXJ5PWUuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZVF1ZXJ5LnN1YnNjcmliZShyPT57ZS5jbGF1c2VzLnF1ZXJ5T2Jq''@;'; put 'put ''Lmxlbmd0aD49MSYmKGUuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg9MSxlLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPj0xJiYoZS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD0xLGUuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cz1bXSxlLmNsYXVz''@;'; put 'put ''ZXMucXVlcnlPYmpbMF0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pLGUud2hlcmVDbGF1c2VGbigpKSl9KSxlLmNvbHVtbnNTdWI9ZS5zYXNTdG9yZVNlcnZp''@;'; put 'put ''Y2UuY29sdW1ucy5zdWJzY3JpYmUocj0+e2xldCBpPXIuZGF0YS5jb2xzOyJob21lIiE9PVduLnJvb3RQYXJhbSYmImVkaXRvciIhPT1Xbi5yb290UGFyYW18fChlLmNvbHM9aSxlLmxpYmRzPXIubGliZHMsV24uZWRpdG9yLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnko''@;'; put 'put ''aSkpKSwidmlldyI9PT1Xbi5yb290UGFyYW0mJlduLnZpZXdlci5maWx0ZXIuY29scy5sZW5ndGg8MSYmKGUuY29scz1pLGUubGliZHM9ci5saWJkcyxXbi52aWV3ZXIuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpKSkpLGUubGliZHN8fChlLmxpYmRzPXIubGliZHMp''@;'; put 'put ''fSksZS52YWx1ZXNTdWI9ZS5zYXNTdG9yZVNlcnZpY2UudmFsdWVzLnN1YnNjcmliZShyPT57KCJob21lIj09PVduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Xbi5yb290UGFyYW0pJiZXbi5lZGl0b3IuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihlLnZhbHM9ci52YWxzLFduLmVkaXRvci5maWx0''@;'; put 'put ''ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHIudmFscykpKSwidmlldyI9PT1Xbi5yb290UGFyYW0mJlduLnZpZXdlci5maWx0ZXIudmFscy5sZW5ndGg8MSYmKGUudmFscz1yLnZhbHMsV24udmlld2VyLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoci52''@;'; put 'put ''YWxzKSkpfSl9KSgpfW9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoZSxyLGksYSl7dGhpcy5nZXRWYWx1ZXNMb2FkTW9yZShlLHIsaSxhKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmdldEZyb21HbG9iYWxzKCksc2V0VGltZW91dCgoKT0+e2xldCBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0''@;'; put 'put ''b3IoIiN2YWxzX3Zhcl9pZDBfMCIpO2UmJmUuZm9jdXMoKX0sNTAwKX1uZ09uRGVzdHJveSgpe3RoaXMuY29sdW1uc1N1YiYmdGhpcy5jb2x1bW5zU3ViLnVuc3Vic2NyaWJlKCksdGhpcy52YWx1ZXNTdWImJnRoaXMudmFsdWVzU3ViLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoRTIpLFdlKFNjKSxXZShMdSksV2UoRnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1xdWVyeSJdXSxpbnB1dHM6e2NhY2hpbmc6ImNhY2hpbmciLHZpZXdib3hJZDoidmlld2Jv''@;'; put 'put ''eElkIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbc2EoW3twcm92aWRlOmE0LHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbInBpY2tlciIsIiJdLFsibm90UGlja2VyIiwiIl0sWyJub3RQaWNrZXJSYW5nZSIsIiJdLFsiY2hlY2tib3hWYWx1ZXMiLCIi''@;'; put 'put ''XSxbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsx''@;'; put 'put ''LCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVzZVBpY2tlcnMiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1yb3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0y''@;'; put 'put ''IiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJzZWxlY3RlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAi''@;'; put 'put ''XSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250ZW50Il0sWzEsImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9y''@;'; put 'put ''IiwibmdGb3JPZiJdLFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwi''@;'; put 'put ''bmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1n''@;'; put 'put ''cm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwibXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBs''@;'; put 'put ''dXMiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUi''@;'; put 'put ''LDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMs''@;'; put 'put ''ImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNzIiwiY2hlY2tib3gtdmFscyIsNCwibmdJZiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNs''@;'; put 'put ''aWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJdLFsidHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIs''@;'; put 'put ''MywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUi''@;'; put 'put ''LCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsidHlwZSIsInRpbWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFs''@;'; put 'put ''dWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlbGVjdGVkTGFiZWxDaGFuZ2UiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9u''@;'; put 'put ''QXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJzZWNvbmRMYWJlbCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJsYWJl''@;'; put 'put ''bCIsIlZhbHVlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIl0sWzEsImluLXZhbHVlcy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxD''@;'; put 'put ''bG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmb3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUi''@;'; put 'put ''LDMsImNsaWNrIl0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXtpZigxJnIpe2NvbnN0IGE9SW4oKTtyZSgwLCJkaXYi''@;'; put 'put ''LDQpKDEsImRpdiIsNSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsNiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLmR5bmFtaWNXaGVyZUNsYXVzZSxtKXx8KGkuZHluYW1pY1doZXJlQ2xhdXNlPW0pLG10KG0pfSksaWUoKSxy''@;'; put 'put ''ZSg0LCJsYWJlbCIsNyksVGUoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSxpZSgpKCkoKSxyZSg2LCJkaXYiLDgpKDcsImNsci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDkpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksdWkoaS51c2VQaWNrZXJz''@;'; put 'put ''LG0pfHwoaS51c2VQaWNrZXJzPW0pLG10KG0pfSksa3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS51c2VQaWNrZXJzQ2hhbmdlKCkpfSksaWUoKSxyZSg5LCJsYWJlbCIsNyksVGUoMTAsIiBVc2UgcGlja2VycyAiKSxpZSgpKCkoKSgpLHJlKDExLCJkaXYiLDEwKSgx''@;'; put 'put ''MiwiZGl2IiwxMSkoMTMsImNsci1zZWxlY3QtY29udGFpbmVyIikoMTQsImxhYmVsIiksVGUoMTUsIkdyb3VwIGxvZ2ljIiksaWUoKSxyZSgxNiwic2VsZWN0IiwxMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLmdyb3VwTG9naWMsbSl8fChpLmdy''@;'; put 'put ''b3VwTG9naWM9bSksbXQobSl9KSxrdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5zZXRHcm91cExvZ2ljKGkuZ3JvdXBMb2dpYykpfSksY3QoMTcsQVN0LDIsMiwib3B0aW9uIiwxMyksaWUoKSgpKCkscmUoMTgsImRpdiIsMTQpKDE5LCJwcmUiLDE1KSxU''@;'; put 'put ''ZSgyMCwiICAgICAgIiksY3QoMjEsa1N0LDQsMCwiZGl2IiwxNiksVGUoMjIsIlxuXG4gICAgICAiKSxyZSgyMywiY29kZSIsMTcpLFRlKDI0KSxpZSgpLFRlKDI1LCJcbiAgICAiKSxpZSgpKCkoKSxyZSgyNiwiZGl2IiwxOCkoMjcsImRpdiIsMTkpLGN0KDI4LERTdCwxLDAsImRpdiIsMjAp''@;'; put 'put ''KDI5LFlTdCwxNSw4LCJkaXYiLDIxKSxpZSgpKCksY3QoMzAsWFN0LDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxDYykoMzIsbk10LDMsNywibmctdGVtcGxhdGUiLG51bGwsMSxDYykoMzQsaU10LDIsNSwibmctdGVtcGxhdGUiLG51bGwsMixDYykoMzYsbE10LDksNCwibmctdGVtcGxhdGUi''@;'; put 'put ''LG51bGwsMyxDYyl9MiZyJiYoYWUoMyksbGkoIm5nTW9kZWwiLGkuZHluYW1pY1doZXJlQ2xhdXNlKSxhZSg1KSxsaSgibmdNb2RlbCIsaS51c2VQaWNrZXJzKSxhZSg4KSx5ZSgiZGlzYWJsZWQiLChudWxsPT1pLmNsYXVzZXN8fG51bGw9PWkuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmkuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9iai5sZW5ndGgpPDEpLGxpKCJuZ01vZGVsIixpLmdyb3VwTG9naWMpLGFlKCkseWUoIm5nRm9yT2YiLGkubG9naWNPcGVyYXRvcnMpLGFlKDQpLHllKCJuZ0lmIixpLndoZXJlQ2xhdXNlTG9hZGluZyksYWUoMyksdnIoaS53aGVyZUNsYXVzZSksYWUoMyksYnIoImNsci1j''@;'; put 'put ''b2wtbWQtMTAiLChudWxsPT1pLmNsYXVzZXN8fG51bGw9PWkuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmkuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGFlKCkseWUoIm5nSWYiLChudWxsPT1pLmNsYXVzZXN8fG51bGw9PWkuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmkuY2xhdXNlcy5xdWVy''@;'; put 'put ''eU9iai5sZW5ndGgpPjEpLGFlKCkseWUoIm5nRm9yT2YiLGkuY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLGtkLEFmLG80LFVsLGh1LGMwLHBzLENoLHp3LGIyLG12LFh3LFJmLExmLHpsLHZoLElmLGlsLFFzLFRfZSxZUyxDU3QsU1N0XSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KX19cmV0dXJuIG59KSgpLGlnPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt9b25DbGljayhlKXtlLnRhcmdldC5mb2N1cygpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9V3Ioe3R5cGU6bixzZWxl''@;'; put 'put ''Y3RvcnM6W1siIiwiYXBwU3RlYWxGb2N1cyIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJjbGljayIsZnVuY3Rpb24oYyl7cmV0dXJuIGkub25DbGljayhjKX0pfSxzdGFuZGFsb25lOiExfSl9fXJldHVybiBufSkoKTtjb25zdCBjTXQ9WyJzZWFyY2hMaWJUcmVl''@;'; put 'put ''SW5wdXQiXTtmdW5jdGlvbiB1TXQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gZE10KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWljb24iLDEyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gaS5saWJy''@;'; put 'put ''YXJpZXNTZWFyY2g9IiIsbXQoaS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxpZSgpfX1mdW5jdGlvbiBoTXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihp''@;'; put 'put ''KXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEubGlicmFyaWVzU2VhcmNoLGkpfHwoYS5saWJyYXJpZXNTZWFyY2g9aSksbXQoaSl9KSxrdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksaWUoKSxjdCg0LHVNdCwxLDAs''@;'; put 'put ''ImNsci1pY29uIiw5KSg1LGRNdCwxLDAsImNsci1pY29uIiwxMCksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1kYSgzKSxyPUVlKCk7YWUoMiksbGkoIm5nTW9kZWwiLHIubGlicmFyaWVzU2VhcmNoKSxhZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS52''@;'; put 'put ''YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGZNdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBwTXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItaWNvbiIsMTIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKSxFZSgpO2NvbnN0IGk9ZGEoMyks''@;'; put 'put ''YT1FZSgyKS4kaW1wbGljaXQsYz1FZSgpO3JldHVybiBpLnZhbHVlPSIiLGEuc2VhcmNoU3RyaW5nPSIiLG10KGMudHJlZU9uRmlsdGVyKGEsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxpZSgpfX1mdW5jdGlvbiBnTXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1u''@;'; put 'put ''b2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwxOCwyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgyKS4kaW1wbGljaXQ7cmV0dXJuIHVpKGEuc2VhcmNoU3RyaW5nLGkpfHwoYS5zZWFyY2hTdHJpbmc9aSksbXQoaSl9KSxrdCgia2V5dXAiLGZ1''@;'; put 'put ''bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkudHJlZU9uRmlsdGVyKGksInRhYmxlcyIpKX0pLGllKCksY3QoNCxmTXQsMSwwLCJjbHItaWNvbiIsOSkoNSxwTXQsMSwwLCJjbHItaWNvbiIsMTApLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9ZGEo''@;'; put 'put ''Mykscj1FZSgyKS4kaW1wbGljaXQ7YWUoMiksbGkoIm5nTW9kZWwiLHIuc2VhcmNoU3RyaW5nKSxhZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIG1NdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDI2''@;'; put 'put ''KX1mdW5jdGlvbiB2TXQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24geU10KG4sdCl7MSZuJiYocmUoMCwic3BhbiIpLFRlKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGllKCkpfWZ1bmN0aW9uIF9N''@;'; put 'put ''dChuLHQpe2lmKDEmbiYmKHJlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxjdCgxLHlNdCwyLDAsInNwYW4iLDI1KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKS5uZ1ZhcjthZSgpLHllKCJuZ0lmIixlKX19ZnVuY3Rpb24gYk10KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMTEpfWZ1''@;'; put 'put ''bmN0aW9uIHdNdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pY29uIiwxMiksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpLEVlKCk7Y29uc3QgaT1kYSgzKSxhPUVlKDMpLiRpbXBsaWNpdCxjPUVlKDMpO3JldHVybiBpLnZhbHVlPSIiLGEuc2VhcmNoU3RyaW5nPSIi''@;'; put 'put ''LG10KGMudHJlZU9uRmlsdGVyKGEsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGllKCl9fWZ1bmN0aW9uIENNdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDI5LDIpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihpKXtndChlKTtjb25zdCBhPUVlKDMpLiRpbXBsaWNpdDtyZXR1cm4gdWkoYS5zZWFyY2hTdHJpbmcsaSl8fChhLnNlYXJjaFN0cmluZz1pKSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDMpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoMykudHJlZU9u''@;'; put 'put ''RmlsdGVyKGksImNvbHVtbnMuQ09MTkFNRSIpKX0pLGllKCksY3QoNCxiTXQsMSwwLCJjbHItaWNvbiIsOSkoNSx3TXQsMSwwLCJjbHItaWNvbiIsMTApLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9ZGEoMykscj1FZSgzKS4kaW1wbGljaXQ7YWUoMiksbGkoIm5nTW9kZWwiLHIuc2VhcmNoU3Ry''@;'; put 'put ''aW5nKSxhZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFNNdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMwKSxrdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQsYT1FZSgzKS4kaW1wbGljaXQsYz1FZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkuY29sdW1uT25DbGljayhpLGMsYSkpfSksVnQoMiwiY2xyLWljb24iLDMxKSxUZSgzKSxpZSgpKCl9aWYoMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0''@;'; put 'put ''LHI9RWUoNik7YWUoKSxicigiY29sdW1uLWFjdGl2ZSIsci5saWJDb2x1bW5BY3RpdmUoZS5DT0xVUkkpKSxhZSgyKSxNcigiICIsZS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIE1NdChuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsQ010LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMixTTXQsNCwz''@;'; put 'put ''LCJjbHItdHJlZS1ub2RlIiw0KSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoMikuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLGUuY29sdW1ucyksYWUoKSx5ZSgibmdGb3JPZiIsZS5jb2x1bW5zKX19ZnVuY3Rpb24geE10KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRvb2x0''@;'; put 'put ''aXAiKSgxLCJidXR0b24iLDIwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS5uZ1ZhcixhPUVlKCkuJGltcGxpY2l0LGM9RWUoMikuJGltcGxpY2l0LG09RWUoKTtyZXR1cm4gbXQoaT8iIjptLnRhYmxlT25DbGljayhhLlRBQkxFVVJJLGEsYykpfSkscmkoMiwyMSksY3Qo''@;'; put 'put ''MyxtTXQsMSwwLCJjbHItaWNvbiIsMjIpKDQsdk10LDEsMCwiY2xyLWljb24iLDIzKSxpaSgpLFRlKDUpLGllKCksY3QoNixfTXQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNCkoNyxNTXQsMywyLCJuZy1jb250YWluZXIiLDI1KSxpZSgpfWlmKDImbil7Y29uc3QgZT10Lm5nVmFyLHI9''@;'; put 'put ''RWUoKS4kaW1wbGljaXQsaT1FZSgyKS4kaW1wbGljaXQsYT1FZSgpO2FlKCksYnIoImRjLWxvY2tlZC1jb250cm9sIixlKSgiYWN0aXZlIixhLmxpYlRhYkFjdGl2ZShpLkxJQlJBUllSRUYscikpLGFlKCkseWUoIm5nU3dpdGNoIixyLmluY2x1ZGVzKCItRkMiKSksYWUoKSx5ZSgibmdTd2l0''@;'; put 'put ''Y2hDYXNlIiwhMCksYWUoKSx5ZSgibmdTd2l0Y2hDYXNlIiwhMSksYWUoKSxNcigiICIsci5yZXBsYWNlKCItRkMiLCIiKSwiICIpLGFlKDIpLHllKCJuZ0lmIixhLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBFTXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''IiwxNCksa3QoImNsaWNrIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLiRpbXBsaWNpdCxjPUVlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS50cmVlTm9kZUNsaWNrZWQoaSxhLGMudGFibGVzKSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3Qo''@;'; put 'put ''ZSkuJGltcGxpY2l0O3JldHVybiB1aShhLmV4cGFuZGVkLGkpfHwoYS5leHBhbmRlZD1pKSxtdChpKX0pLGN0KDEseE10LDgsOSwiY2xyLXRvb2x0aXAiLDE5KSxpZSgpfWlmKDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPXQuaW5kZXgsaT1FZSgzKTticigiY2xyLWV4cGFuZGVkIixlLmV4''@;'; put 'put ''cGFuZGVkKSxsaSgiY2xyRXhwYW5kZWQiLGUuZXhwYW5kZWQpLHllKCJjbHJMb2FkaW5nIixlLmxvYWRpbmdDb2x1bW5zJiYhZS5jb2x1bW5zKSxhZSgpLHllKCJuZ1ZhciIscisxPmkubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gVE10KG4s''@;'; put 'put ''dCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsMTQsMSksa3QoImNsaWNrIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCkuJGltcGxpY2l0LGM9RWUoKTtyZXR1cm4gbXQoYy50cmVlTm9kZUNsaWNrZWQoaSxhLGMubGlicmFyeUxpc3QpKX0pLGNpKCJj''@;'; put 'put ''bHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpLiRpbXBsaWNpdDtyZXR1cm4gdWkoYS5leHBhbmRlZCxpKXx8KGEuZXhwYW5kZWQ9aSksbXQoaSl9KSxyZSgyLCJwIiwxNSksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9ZGEoMSksYT1F''@;'; put 'put ''ZSgpLiRpbXBsaWNpdCxjPUVlKCk7cmV0dXJuIGMubGliPWEuTElCUkFSWUlELG10KGMubGlicmFyeU9uQ2xpY2soYy5saWJ8fCIiLGEsaSkpfSksVnQoMywiY2xyLWljb24iLDE2KSxUZSg0KSxpZSgpLGN0KDUsZ010LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoNixFTXQsMiw1LCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiwxNyksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQ7YnIoImNsci1leHBhbmRlZCIsZS5leHBhbmRlZCksbGkoImNsckV4cGFuZGVkIixlLmV4cGFuZGVkKSx5ZSgiY2xyTG9hZGluZyIsZS5sb2FkaW5nVGFibGVzJiYhZS50YWJsZXMpLGFlKDQpLE1yKCIgIixl''@;'; put 'put ''LkxJQlJBUllOQU1FLCIgIiksYWUoKSx5ZSgibmdJZiIsZS50YWJsZXMpLGFlKCkseWUoIm5nRm9yT2YiLGUudGFibGVzKX19ZnVuY3Rpb24gQU10KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxUTXQsNyw3LCJjbHItdHJlZS1ub2RlIiwxMyksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxp''@;'; put 'put ''Y2l0O2FlKCkseWUoIm5nSWYiLCFlLmhpZGRlbiYmZS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBrTXQobix0KXsxJm4mJihyZSgwLCJkaXYiLDMyKSgxLCJzcGFuIiwzMyksVGUoMiwiIExvYWRpbmcuLi4gIiksaWUoKSgpKX1sZXQgRE10PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxy''@;'; put 'put ''KXt0aGlzLmhlbHBlclNlcnZpY2U9ZSx0aGlzLmxpY2VuY2VTZXJ2aWNlPXIsdGhpcy5zZWFyY2hMaWJJbnB1dExpc3Q9bmV3IEhnLHRoaXMudGFibGVPbkNsaWNrRW1pdHRlcj1uZXcgWXIsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXI9bmV3IFlyLHRoaXMuaGFzQ29sdW1ucz0hMSx0aGlz''@;'; put 'put ''LnBhZ2luZz0hMCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgp''@;'; put 'put ''e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNlYXJjaExpYklucHV0TGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1uZ09uQ2hhbmdlcyhlKXtlLmxpYnJhcnlMaXN0Py5jdXJyZW50VmFsdWUmJnRoaXMubGlicmFyeUxpc3QmJnRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFy''@;'; put 'put ''aWVzKHRoaXMubGlicmFyeUxpc3QpfXRyZWVPbkZpbHRlcihlLHIpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoZSxyKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFy''@;'; put 'put ''Y2gsIkxJQlJBUllOQU1FIiksV24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9dHJlZU5vZGVDbGlja2VkKGUscixpKXsiQ29sbGFwc2UiPT09ZS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaSxyKX1saWJyYXJ5T25DbGljayhlLHIs''@;'; put 'put ''aSl7ci5pbkZvcmVncm91bmQ9ITA7Y29uc3QgYT0oKT0+c2V0VGltZW91dCgoKT0+aS5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCkpO2lmKHIudGFibGVzKXIuZXhwYW5kZWQ9IXIuZXhwYW5kZWQsdGhp''@;'; put 'put ''cy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6ZSxsaWJyYXJ5OnIsdGFibGVzTG9hZGVkOiEwfSk7ZWxzZXtyLmxvYWRpbmdUYWJsZXM9ITAsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6ZSxsaWJyYXJ5OnIsdGFibGVzTG9hZGVkOiExfSk7Y29uc3Qg''@;'; put 'put ''Yz1zZXRJbnRlcnZhbCgoKT0+e3IubG9hZGluZ1RhYmxlc3x8KGEoKSxjbGVhckludGVydmFsKGMpKX0sNTAwKX1yLmV4cGFuZGVkJiZhKCksdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyh0aGlzLmxpYnJhcnlMaXN0LHIpfXRhYmxlT25DbGljayhlLHIsaSl7dmFyIGE9dGhpcztyZXR1cm4gWihm''@;'; put 'put ''dW5jdGlvbiooKXthLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57YS5oYXNDb2x1bW5zPyhyLmNvbHVtbnM/KHIuZXhwYW5kZWQ9IXIuZXhwYW5kZWQsITA9PT1yLmV4cGFuZGVkJiYoYS50YWJsZT1lLGEudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTplLGxp''@;'; put 'put ''YlRhYmxlOnIsbGlicmFyeTppLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihyLmV4cGFuZGVkPSFyLmV4cGFuZGVkLHIubG9hZGluZ0NvbHVtbnM9ITAsYS50YWJsZT1lLGEudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTplLGxpYlRhYmxlOnIsbGlicmFyeTppLGNvbHVtbnNMb2Fk''@;'; put 'put ''ZWQ6ITF9KSksYS5jb2xsYXBzZVRyZWVJdGVtcyhpLnRhYmxlcyxyKSk6YS50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmUsbGliVGFibGU6cixsaWJyYXJ5OmksY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soZSxyLGkpe3RoaXMubGliPXIuTElCUkFS''@;'; put 'put ''WUlELHRoaXMudGFibGU9aS5UQUJMRVVSSSx0aGlzLmNvbHVtbj1lLkNPTFVSSX1saWJUYWJBY3RpdmUoZSxyKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZlPT09dGhpcy5saWImJnI9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShlKXtpZighdGhpcy5jb2x1bW4pcmV0''@;'; put 'put ''dXJuITE7bGV0IHI9ZS5zcGxpdCgiXFwiKSxpPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiByW3IubGVuZ3RoLTFdPT1pW2kubGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGUscil7ZS5mb3JFYWNoKGk9PntKU09OLnN0cmluZ2lmeShpKSE9PUpTT04uc3RyaW5naWZ5KHIpJiYo''@;'; put 'put ''aS5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEp''@;'; put 'put ''fWhhbmRsZVNjcm9sbChlKXtsZXQgcj1lLnRhcmdldDtyJiZyLnNjcm9sbFRvcD49ci5zY3JvbGxIZWlnaHQtci5vZmZzZXRIZWlnaHQtMTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShMdSks''@;'; put 'put ''V2UoSzEpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHIsaSl7aWYoMSZyJiZXYShjTXQsNSksMiZyKXtsZXQgYTtkaShhPWhpKCkpJiYoaS5zZWFyY2hMaWJJbnB1dExpc3Q9YSl9fSxob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJzY3JvbGwiLGZ1bmN0aW9uKGMpe3JldHVybiBpLmhhbmRsZVNjcm9sbChjKX0pfSxpbnB1dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJs''@;'; put 'put ''ZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1pdHRlciJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W1d0XSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJs''@;'; put 'put ''aWJUcmVlTm9kZSIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJj''@;'; put 'put ''aC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQs''@;'; put 'put ''Im5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIs''@;'; put 'put ''NCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHIt''@;'; put 'put ''ZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdT''@;'; put 'put ''d2l0Y2hDYXNlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxb''@;'; put 'put ''ImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxb''@;'; put 'put ''InNoYXBlIiwib2JqZWN0cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiY2xyLXRyZWUiKSxjdCgxLGhNdCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDIsQU10LDIsMSwibmct''@;'; put 'put ''Y29udGFpbmVyIiw0KSxpZSgpLGN0KDMsa010LDMsMCwiZGl2Iiw1KSksMiZyJiYoYWUoKSx5ZSgibmdJZiIsaS5saWJyYXJ5TGlzdCksYWUoKSx5ZSgibmdGb3JPZiIsaS5saWJyYXJ5TGlzdCksYWUoKSx5ZSgibmdJZiIsaS5saWJyYXJpZXNQYWdpbmcpKX0sZGVwZW5kZW5jaWVzOltocyxt''@;'; put 'put ''YSxBZixvNCxTMixFaCx1NSxVbCxTMSx5MixQZCxSNixPNixMNix6bCxpbCxRcyxZUyxpZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtjb25zdCBJTXQ9WyJyZXNpemVCb3giXSxSTXQ9WyJkcmFnSGFuZGxlQ29ybmVyIl0sTE10PShuLHQsZSk9Pih7Y29sSGVhZGVyc0hpZGRl''@;'; put 'put ''bjpuLGNvbEhlYWRlcnNWaXNpYmxlOnQsaGVhZGVyUGtzOmV9KSxPTXQ9KG4sdCk9Pih7eDpuLHk6dH0pLFBNdD0oKT0+KHt9KTtmdW5jdGlvbiBGTXQobix0KXtpZigxJm4mJihyZSgwLCJzcGFuIiwzNyksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSxuMCgiVG8gdW5sb2Nr''@;'; put 'put ''IG1vcmUgdGhlbiAiLGUubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQsIiAiLDE9PT1lLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PyJ2aWV3Ym94Ijoidmlld2JveGVzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gSE10''@;'; put 'put ''KG4sdCl7MSZuJiYocmUoMCwiZGl2IiwzOCksVnQoMSwiY2xyLXNwaW5uZXIiLDM5KSxpZSgpKX1mdW5jdGlvbiBOTXQobix0KXsxJm4mJihyZSgwLCJwIiw0MCksVGUoMSwiIFZpZXdib3ggb3BlbiBsaW1pdCByZWFjaGVkICIpLGllKCkpfWZ1bmN0aW9uIFZNdChuLHQpe2lmKDEmbil7Y29u''@;'; put 'put ''c3QgZT1JbigpO3JlKDAsImRjLXRyZWUiLDQxKSxrdCgibGlicmFyeU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5saWJyYXJ5T25DbGljayhpKSl9KSgidGFibGVPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKCku''@;'; put 'put ''dGFibGVPbkNsaWNrKGkpKX0pLGllKCl9MiZuJiZ5ZSgibGlicmFyeUxpc3QiLEVlKCkubGlicmFyaWVzKX1mdW5jdGlvbiBCTXQobix0KXsxJm4mJihyZSgwLCJwIiw0MiksVGUoMSwiIFBpY2sgdGFibGUgZnJvbSB0aGUgbGlzdCBvbiB0aGUgbGVmdCAiKSxpZSgpKX1mdW5jdGlvbiBqTXQo''@;'; put 'put ''bix0KXsxJm4mJlZ0KDAsImNsci1zcGlubmVyIiw1MCl9ZnVuY3Rpb24gek10KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYSIsMTcpLGt0KCJjbGljayIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpLiRpbXBsaWNpdCxjPUVlKCk7cmV0dXJuIGMubWluaW1pemUoYSks''@;'; put 'put ''bXQoYy5zdG9wUHJvcGFnYXRpb24oaSkpfSksVnQoMSwiY2xyLWljb24iLDIwKSxyZSgyLCJzcGFuIiwxOSksVGUoMywiTWluaW1pemUgdmlld2JveCIpLGllKCkoKX19ZnVuY3Rpb24gVU10KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYSIsMTcpLGt0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpLiRpbXBsaWNpdCxjPUVlKCk7cmV0dXJuIGMucmVzdG9yZShhKSxtdChjLnN0b3BQcm9wYWdhdGlvbihpKSl9KSxWdCgxLCJjbHItaWNvbiIsMjEpLHJlKDIsInNwYW4iLDE5KSxUZSgzLCJSZXN0b3JlIHZpZXdib3giKSxpZSgpKCl9fWZ1bmN0aW9u''@;'; put 'put ''IFdNdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsNDMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS5zZWxlY3RWaWV3Ym94KGkpKX0pLHJlKDEsImRpdiIsNDQpLFRlKDIpLGN0KDMsak10LDEsMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDQ1KSxpZSgpLHJlKDQsImRpdiIpKDUsImEiLDQ2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSkuJGltcGxpY2l0LGM9RWUoKTtyZXR1cm4gYy5yZXNldFBvc1NpemUoYSksbXQoYy5zdG9wUHJvcGFnYXRpb24oaSkpfSksVnQoNiwiY2xyLWljb24iLDQ3''@;'; put 'put ''KSxyZSg3LCJzcGFuIiwxOSksVGUoOCwiUmVzZXQgcG9zaXRpb24gYW5kIHNpemUiKSxpZSgpKCksY3QoOSx6TXQsNCwwLCJhIiw0OCkoMTAsVU10LDQsMCwiYSIsNDgpLHJlKDExLCJhIiwxNyksa3QoImNsaWNrIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLiRpbXBsaWNpdCxjPUVlKCk7''@;'; put 'put ''cmV0dXJuIGMuY2xvc2UoYSksbXQoYy5zdG9wUHJvcGFnYXRpb24oaSkpfSksVnQoMTIsImNsci1pY29uIiw0OSkscmUoMTMsInNwYW4iLDE5KSxUZSgxNCwiQ2xvc2Ugdmlld2JveCIpLGllKCkoKSgpKCl9aWYoMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoKTticigic2VsZWN0ZWQi''@;'; put 'put ''LChudWxsPT1yLnNlbGVjdGVkVmlld2JveD9udWxsOnIuc2VsZWN0ZWRWaWV3Ym94LmlkKT09PWUuaWQpLGFlKDIpLGozKCIgIyIsZS5pZCwiICIsZS5saWJyYXJ5LCIuIixlLnRhYmxlLCIgIiksYWUoKSx5ZSgibmdJZiIsZS5sb2FkaW5nRGF0YSksYWUoMiksYnIoImRpc2FibGVkIiwwPT09''@;'; put 'put ''ZS54JiYwPT09ZS55KSxhZSg0KSx5ZSgibmdJZiIsIWUubWluaW1pemVkKSxhZSgpLHllKCJuZ0lmIixlLm1pbmltaXplZCl9fWZ1bmN0aW9uIFpNdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDthZSgpLE1yKCIgIixl''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIFlNdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImRpdiIsNTMpKDIsImFwcC1hdXRvY29tcGxldGUiLDU0LDApLGt0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1kYSgzKSxjPUVlKCkubmdWYXI7cmV0dXJuIG10''@;'; put 'put ''KEVlKCkub25Db2xzZWFyY2hDaGFuZ2UoYSxpLGMuY29sSGVhZGVyc0hpZGRlbikpfSksY3QoNCxaTXQsMiwxLCJvcHRpb24iLDU1KSxpZSgpKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS5uZ1ZhcjthZSgyKSx5ZSgiaW5wdXRJZCIsInZpZXdib3gtY29sdW1uLXNlYXJjaCIpKCJlbWl0''@;'; put 'put ''T25seVNlbGVjdGVkIiwhMCksYWUoMikseWUoIm5nRm9yT2YiLGUuY29sSGVhZGVyc0hpZGRlbil9fWZ1bmN0aW9uIEdNdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiAkTXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItaWNvbiIsNjIpLGt0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCkuJGltcGxpY2l0O3JldHVybiBtdChFZSgzKS5vbkNvbFJlbW92ZShpKSl9KSxpZSgpfX1mdW5jdGlvbiBLTXQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDU4KSgxLCJzcGFuIiksVGUoMiksY3QoMyxHTXQsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsNTkpLGllKCksY3QoNCwkTXQsMSwwLCJjbHItaWNvbiIsNjApLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKDIpLm5nVmFyLGk9RWUoKTtJbGUoImNvbC1ib3ggY29sdW1uLSIsZSwiIiksYnIoImN1cnNvci1kZWZhdWx0LWkiLHIuaGVhZGVyUGtzLmluY2x1ZGVzKGUp''@;'; put 'put ''KSgicHJpbWFyeUtleUhlYWRlclN0eWxlIixyLmhlYWRlclBrcy5pbmNsdWRlcyhlKSkseWUoImNka0RyYWdEYXRhIixlKSgiY2RrRHJhZ0Rpc2FibGVkIixyLmhlYWRlclBrcy5pbmNsdWRlcyhlKSksYWUoMiksbjAoIiAiLGUsIiAiLCJudW0iPT09KG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94''@;'; put 'put ''VGFibGV8fG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDppLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLiRkYXRhZm9ybWF0cy52YXJzW2VdLnR5cGUpPyIobnVtZXJpYykiOiIiLCIgIiksYWUoKSx5ZSgibmdJZiIsci5oZWFkZXJQa3MuaW5jbHVkZXMo''@;'; put 'put ''ZSkpLGFlKCkseWUoIm5nSWYiLCFyLmhlYWRlclBrcy5pbmNsdWRlcyhlKSl9fWZ1bmN0aW9uIFhNdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsInAiLDEwKSxUZSgyLCJDb2x1bW5zIFRvIERpc3BsYXkgKGRyYWcgYW5kIHJlLW9yZGVyKSIpLGllKCkscmUoMywiZGl2''@;'; put 'put ''Iiw1Niksa3QoImNka0Ryb3BMaXN0RHJvcHBlZCIsZnVuY3Rpb24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLmNvbHVtbnNEcm9wKGkpKX0pLGN0KDQsS010LDUsMTMsImRpdiIsNTcpLGllKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS5uZ1ZhcjthZSgzKSx5ZSgiY2RrRHJvcExpc3RE''@;'; put 'put ''YXRhIixlLmNvbEhlYWRlcnNWaXNpYmxlKSxhZSgpLHllKCJuZ0Zvck9mIixlLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gcU10KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw1MSksY3QoMSxZTXQsNSwzLCJuZy1jb250YWluZXIiLDUyKSgyLFhNdCw1LDIsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''NTIpLGllKCkpLDImbil7Y29uc3QgZT10Lm5nVmFyO2FlKCkseWUoIm5nSWYiLGUuY29sSGVhZGVyc0hpZGRlbiksYWUoKSx5ZSgibmdJZiIsZS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIEpNdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pY29uIiw4Niksa3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkuY29sbGFwc2UoaSkpfSksaWUoKX19ZnVuY3Rpb24gUU10KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWljb24iLDg3KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''Z3QoZSk7Y29uc3QgaT1FZSgpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS5leHBhbmQoaSkpfSksaWUoKX19ZnVuY3Rpb24gZXh0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWljb24iLDg4KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxhPWRhKDE2KTtyZXR1cm4gbXQoRWUoKS5zZWFyY2hUYWJsZShhLGkpKX0pLGllKCl9fWZ1bmN0aW9uIHR4dChuLHQpezEmbiYmKHJlKDAsInNwYW4iLDg5KSxUZSgxLCIgTG9hZGluZy4uLiAiKSxpZSgpKX1mdW5jdGlvbiBueHQobix0KXsxJm4mJihyZSgwLCJzcGFuIiw5MCks''@;'; put 'put ''VGUoMSwiTG9hZGluZy4uLiIpLGllKCkpfWZ1bmN0aW9uIHJ4dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pY29uIiw5MSksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKS4kaW1wbGljaXQsYT1kYSgxNik7cmV0dXJuIEVlKCkucmVsb2FkVGFi''@;'; put 'put ''bGVEYXRhKGkpLG10KGEudmFsdWU9IiIpfSksaWUoKX19ZnVuY3Rpb24gaXh0KG4sdCl7MSZuJiYocmUoMCwiZGl2Iiw5NSksVnQoMSwiY2xyLXNwaW5uZXIiLDM5KSxpZSgpKX1mdW5jdGlvbiBheHQobix0KXtpZigxJm4mJlZ0KDAsImhvdC10YWJsZSIsOTYpLDImbil7Y29uc3QgZT1FZSgy''@;'; put 'put ''KS4kaW1wbGljaXQ7eWUoInNldHRpbmdzIixFZSgpLnZpZXdib3hIb3RTZXR0aW5ncy5nZXQoZS5pZCl8fG5sKDIsUE10KSkoImlkIiwiaG90VGFibGVfIitlLmlkKX19ZnVuY3Rpb24gb3h0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw5MiksY3QoMSxpeHQsMiwwLCJkaXYiLDkzKSgyLGF4''@;'; put 'put ''dCwxLDMsImhvdC10YWJsZSIsOTQpLGllKCkpLDImbil7Y29uc3QgZT10Lm5nVmFyLHI9RWUoKS4kaW1wbGljaXQsaT1FZSgpO1RkKCJkaXNwbGF5IixyLmNvbGxhcHNlZD8ibm9uZSI6IiIpLGFlKCkseWUoIm5nSWYiLHIubG9hZGluZ0RhdGEmJmU8MCksYWUoKSx5ZSgibmdJZiIsZT4tMSYm''@;'; put 'put ''aS52aWV3Ym94SG90U2V0dGluZ3MuZ2V0KHIuaWQpKX19ZnVuY3Rpb24gc3h0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw2MywxKSxrdCgibW91c2Vkb3duIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLmZvY3VzVmlld2Jv''@;'; put 'put ''eChpKSl9KSgiY2RrRHJhZ0VuZGVkIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS52aWV3Ym94RHJhZ0VuZGVkKGksYSkpfSkscmUoMiwiZGl2Iiw2NCkoMywic3BhbiIsNjUpLFRlKDQpLGllKCkscmUoNSwiZGl2Iiw2NiksY3QoNixKTXQsMSww''@;'; put 'put ''LCJjbHItaWNvbiIsNjcpKDcsUU10LDEsMCwiY2xyLWljb24iLDY4KSxyZSg4LCJjbHItaWNvbiIsNjkpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS5taW5pbWl6ZShpKSl9KSxpZSgpLHJlKDksImNsci1pY29uIiw3MCksa3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLmNsb3NlKGkpKX0pLGllKCkoKSgpLHJlKDEwLCJzcGFuIiw3MSwyKSxrdCgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLiRpbXBsaWNpdCxjPWRhKDEpLG09ZGEo''@;'; put 'put ''MTEpO3JldHVybiBtdChFZSgpLmRyYWdNb3ZlKG0sYyxhLGkpKX0pLGllKCkscmUoMTIsImZvcm0iLDcyKSgxMywiZGl2Iiw3MykoMTQsImRpdiIsNzQpKDE1LCJpbnB1dCIsNzUsMyksa3QoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0LGE9ZGEoMTYp''@;'; put 'put ''O3JldHVybiBtdChFZSgpLnNlYXJjaFRhYmxlKGEsaSkpfSksaWUoKSxjdCgxNyxleHQsMSwwLCJjbHItaWNvbiIsNzYpKDE4LHR4dCwyLDAsInNwYW4iLDc3KSxpZSgpLHJlKDE5LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoMjAsImNsci1jaGVja2JveC13cmFwcGVyIikoMjEsImlucHV0''@;'; put 'put ''Iiw3OCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSkuJGltcGxpY2l0O3JldHVybiB1aShhLnNlYXJjaE51bWVyaWMsaSl8fChhLnNlYXJjaE51bWVyaWM9aSksbXQoaSl9KSxpZSgpLHJlKDIyLCJsYWJlbCIpLFRlKDIzLCJOdW1lcmljIiksaWUoKSgpKCko''@;'; put 'put ''KSxyZSgyNCwiZGl2Iiw0NCksY3QoMjUsbnh0LDIsMCwic3BhbiIsNzkpKDI2LHJ4dCwxLDAsImNsci1pY29uIiw4MCkscmUoMjcsImEiLDgxKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQsYT1kYSgxNik7cmV0dXJuIEVlKCkub3BlbkZpbHRlcihpKSxt''@;'; put 'put ''dChhLnZhbHVlPSIiKX0pLFZ0KDI4LCJjbHItaWNvbiIsODIpLHJlKDI5LCJzcGFuIiw4MyksVGUoMzApLGllKCkoKSxyZSgzMSwiY2xyLWljb24iLDg0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkub3BlblRhYmxlRWRpdChp''@;'; put 'put ''KSl9KSxpZSgpKCkoKSxjdCgzMixveHQsMyw0LCJkaXYiLDg1KSxpZSgpfWlmKDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKCk7VGQoImRpc3BsYXkiLGUubWluaW1pemVkPyJub25lIjoiIikoIndpZHRoIixlLndpZHRoLCJweCIpKCJoZWlnaHQiLGUuaGVpZ2h0LCJweCIpKCJwb2lu''@;'; put 'put ''dGVyLWV2ZW50cyIsZS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSgiYm94LXNoYWRvdyIsZS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxicigiZm9jdXNlZCIsZS5mb2N1c2VkKSx5ZSgiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLGk0KDM0LE9NdCxlLngsZS55KSkoImlkIiwidmlld2JveF8iK2UuaWQp''@;'; put 'put ''LGFlKDQpLGozKCIgIyIsZS5pZCwiICIsZS5saWJyYXJ5LCIuIixlLnRhYmxlLCIgIiksYWUoMikseWUoIm5nSWYiLCFlLmNvbGxhcHNlZCksYWUoKSx5ZSgibmdJZiIsZS5jb2xsYXBzZWQpLGFlKDMpLHllKCJpZCIsImhhbmRsZV92aWV3Ym94XyIrZS5pZCksYWUoMiksVGQoImRpc3BsYXki''@;'; put 'put ''LGUuY29sbGFwc2VkPyJub25lIjoiIiksYWUoMykseWUoInR5cGUiLGUuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLGFlKDIpLHllKCJuZ0lmIiwhZS5zZWFyY2hMb2FkaW5nKSxhZSgpLHllKCJuZ0lmIixlLnNlYXJjaExvYWRpbmcpLGFlKDMpLGxpKCJuZ01vZGVsIixlLnNlYXJj''@;'; put 'put ''aE51bWVyaWMpLGFlKDQpLHllKCJuZ0lmIixlLmxvYWRpbmdEYXRhKSxhZSgpLHllKCJuZ0lmIiwhZS5sb2FkaW5nRGF0YSksYWUoMiksYnIoImZpbHRlci1hY3RpdmUiLCIwIiE9PWUuZmlsdGVyX3BrKSxhZSgyKSx2cihlLmZpbHRlclRleHQpLGFlKCksYnIoImRpc2FibGVkIiwhci50YWJs''@;'; put 'put ''ZUVkaXRFeGlzdHMoZSkpLGFlKCkseWUoIm5nVmFyIixyLmdldFZpZXdib3hUYWJsZUluZGV4KGUpKX19ZnVuY3Rpb24gbHh0KG4sdCl7aWYoMSZuJiZWdCgwLCJhcHAtcXVlcnkiLDk3LDQpLDImbil7Y29uc3QgZT1FZSgpO3llKCJ2aWV3Ym94SWQiLG51bGw9PWUuZmlsdGVyaW5nVmlld2Jv''@;'; put 'put ''eD9udWxsOmUuZmlsdGVyaW5nVmlld2JveC5pZCl9fWxldCBBX2U9KCgpPT57Y2xhc3MgbntnZXQgdmlld2JveE1vZGFsKCl7cmV0dXJuIHRoaXMuX3ZpZXdib3hNb2RhbH1zZXQgdmlld2JveE1vZGFsKGUpe2lmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveCYmZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJWaWV3Ym94ZXMiKSx2b2lkIHRoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoITEpO3RoaXMuX3ZpZXdib3hNb2RhbD1lLGUmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKX1jb25zdHJ1Y3RvcihlLHIsaSxhLGMs''@;'; put 'put ''bSxDLFAsWSxKKXt0aGlzLm5nWm9uZT1lLHRoaXMubGljZW5jZVNlcnZpY2U9cix0aGlzLnNhc1NlcnZpY2U9aSx0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWMsdGhpcy5sb2dnZXJTZXJ2aWNlPW0sdGhpcy5oZWxwZXJTZXJ2aWNlPUMsdGhpcy5yb3V0ZXI9UCx0''@;'; put 'put ''aGlzLmFjdGl2YXRlZFJvdXRlPVksdGhpcy5jZGY9Six0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IFlyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9''@;'; put 'put ''e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IGgyLlNBU2pzQ29uZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30s''@;'; put 'put ''YWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFk''@;'; put 'put ''ZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoyMDAsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1l''@;'; put 'put ''bnU6dm9pZCAwfSx0aGlzLnZpZXdib3hIb3RTZXR0aW5ncz1uZXcgTWFwLHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGlj''@;'; put 'put ''ZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0fHw2fW5nT25Jbml0KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uu''@;'; put 'put ''dmlld0xpYnMoKS50aGVuKHI9Pnt0aGlzLmxpYnJhcmllcz1yLnNhc2xpYnN9KS5jYXRjaChyPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKHIpfSkuZmluYWxseSgoKT0+e3RoaXMubGlicmFyaWVzTG9hZGluZz0hMX0pLHRoaXMuX3F1ZXJ5PXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5''@;'; put 'put ''LnN1YnNjcmliZShyPT57dGhpcy5jbGF1c2VzPXIub2JqLHRoaXMuZmlsdGVyTGliZHM9ci5saWJkc30pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKHI9Pnt0aGlz''@;'; put 'put ''LmhvdFRhYmxlRGVmYXVsdC5saWNlbnNlS2V5PXJ9KTtjb25zdCBlPXRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudmlld2JveGVzO2UmJighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/KHNldFRpbWVvdXQoKCk9PnRoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LnNob3dEZW1vTGltaXRNb2RhbCgiTGlua2luZyBWaWV3Ym94ZXMiKSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczp7fX0pKToodGhpcy52aWV3Ym94ZXM9dGhpcy5kZWNvZGVVcmxEYXRhKGUpLHNldFRpbWVvdXQo''@;'; put 'put ''KCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSkpKSx0aGlzLnJlTG9hZFZpZXdib3h0YWJsZXModGhpcy52aWV3Ym94ZXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMudmlld2JveGVzLmZvckVhY2go''@;'; put 'put ''ZT0+e3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoZSk+LTEmJnRoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoZSl9KX0sMWUzKX1nZXQgdmlld2JveExpbWl0UmVhY2hlZCgpe3JldHVybiB0aGlzLnZpZXdib3hlcy5sZW5ndGg+PXRoaXMubWF4Vmlld2JveGVzfWNsck1vZGFsT3BlbkNo''@;'; put 'put ''YW5nZShlKXt0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KGUpfWxpYnJhcnlPbkNsaWNrKGUpe2UudGFibGVzTG9hZGVkfHx0aGlzLmxvYWRUYWJsZXMoZS5saWJyYXJ5LkxJQlJBUllSRUYsZS5saWJyYXJ5KX10YWJsZU9uQ2xpY2soZSl7dmFyIHI9dGhpcztyZXR1cm4gWihmdW5jdGlv''@;'; put 'put ''biooKXtpZihyLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGk9ey4uLnIuZGVmYXVsdENvbmZpZyx0YWJsZTplLmxpYlRhYmxlLGxpYnJhcnk6ZS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6ci52aWV3Ym94ZXMubGVuZ3RoKzEs''@;'; put 'put ''eDp3aW5kb3cuaW5uZXJXaWR0aC1yLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O3Iudmlld2JveGVzLnB1c2goaSksc2V0VGltZW91dCgoKT0+e3Iuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBhPWAke2UubGlicmFyeS5MSUJSQVJZUkVGfS4ke2UubGliVGFibGV9YDt5aWVs''@;'; put 'put ''ZCByLmxvYWREYXRhKGEsaSksaS5sb2FkaW5nRGF0YT0hMSxyLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxyLnNuYXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhlLHIpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZSkudGhlbihpPT57bGV0IGE9aS5tcHRh''@;'; put 'put ''Ymxlcy5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuTUVNTkFNRX0pO3RoaXMubGliaW5mbz1pLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWEsciYmKHIudGFibGVzPWEsci5saWJpbmZvPXRoaXMubGliaW5mbyxyLmxvYWRpbmdUYWJsZXM9ITEsYS5sZW5ndGg+MCYmKHIuZXhwYW5kZWQ9ITAp''@;'; put 'put ''KX0pLmNhdGNoKGk9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaSl9KX1yZWxvYWREYXRhKGUscil7dmFyIGk9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsYyk9PntsZXQgbT1pLnZpZXdib3hUYWJsZXMuZmluZChDPT5DLnZpZXdib3hJZD09PXIu''@;'; put 'put ''aWQpO2kuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGUscGFyc2VJbnQoci5maWx0ZXJfcGt8fCIwIikpLnRoZW4oQz0+e20mJihtLmhvdFRhYmxlLmRhdGE9Qy52aWV3ZGF0YSxpLmNyZWF0ZVZpZXdib3hUYWJsZVNldHRpbmdzKHIpKSxhKG51bGwpfSkuY2F0Y2goKCk9PntjKCl9KX0pfSko''@;'; put 'put ''KX1sb2FkRGF0YShlLHIpe3ZhciBpPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGMpPT57bGV0IG09ITEsQz1pLnZpZXdib3hUYWJsZXMuZmluZChQPT5QLnZpZXdib3hJZD09PXIuaWQpO0MmJigiMCI9PT1yLmZpbHRlcl9wa3x8IXIuZmlsdGVyX3Br''@;'; put 'put ''KSYmYSgpLGkuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGUscGFyc2VJbnQoci5maWx0ZXJfcGt8fCIwIikpLnRoZW4oUD0+e0M/bT0hMDpDPXt2aWV3Ym94SWQ6ci5pZCx2aWV3Ym94TGliRGF0YXNldDplLGhvdFRhYmxlOlNGKGkuaG90VGFibGVEZWZhdWx0KX0sQy5ob3RUYWJsZS5kYXRh''@;'; put 'put ''PVAudmlld2RhdGEsQy5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9UC4kdmlld2RhdGEsQy5ob3RUYWJsZS5jb2xzPVAuY29scyxvYWUoQy5ob3RUYWJsZS5jb2xzLFtdLFAuJHZpZXdkYXRhKTtsZXQgWT1bXSxKPVtdO2ZvcihsZXQgY2UgaW4gUC52aWV3ZGF0YVswXSljZSYmSi5wdXNoKGNlKTtm''@;'; put 'put ''b3IobGV0IGNlPTA7Y2U8Si5sZW5ndGg7Y2UrKylZLnB1c2goe2RhdGE6SltjZV19KTtDLmhvdFRhYmxlLmhlYWRlclBrcz1TRihQLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksQy5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPUouZmlsdGVyKGNlPT4hQy5ob3RUYWJsZS5oZWFk''@;'; put 'put ''ZXJQa3MuaW5jbHVkZXMoY2UpKSxDLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW49U0YoQy5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzKSxDLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPUouZmlsdGVyKGNlPT5DLmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhjZSkpLEMuaG90VGFibGUu''@;'; put 'put ''Y29sSGVhZGVycz1KLEMuaG90VGFibGUuY29sdW1ucz1ZLHIuY29sdW1ucyYmci5jb2x1bW5zLmxlbmd0aD4wPyhDLmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmU9ci5jb2x1bW5zLHIuY29sdW1ucz8ubWFwKChjZSxmZSk9Pntjb25zdCBBZT1KW2NlXSxIZT1DLmhvdFRhYmxlLmNvbEhlYWRl''@;'; put 'put ''cnNIaWRkZW4uaW5kZXhPZihBZSk7SGU+LTEmJihDLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKEhlLDEpLEMuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGVbZmVdPUFlKX0pKTpDLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goLi4uQy5ob3RUYWJsZS5jb2xIZWFk''@;'; put 'put ''ZXJzSGlkZGVuLnNwbGljZSgwLDEwKSksQy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1DLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmZpbHRlcihjZT0+Y2UpLG18fGkudmlld2JveFRhYmxlcy5wdXNoKEMpLHIucXVlcnk9aS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQLnF1ZXJ5''@;'; put 'put ''KSxyLmZpbHRlclRleHQ9UC5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsaS5jcmVhdGVWaWV3Ym94VGFibGVTZXR0aW5ncyhyKSxzZXRUaW1lb3V0KCgpPT57aS51cGRhdGVIb3RDb2x1bW5zKEMuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10sci5pZCksc2V0VGltZW91dCgoKT0+e2Nv''@;'; put 'put ''bnN0IGNlPWkuZ2V0Vmlld2JveEhvdEluc3RhbmNlKHIuaWQpO2NlJiYoY2UudXBkYXRlU2V0dGluZ3Moe21hbnVhbENvbHVtbk1vdmU6Qy5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlLGFmdGVyR2V0Q29sSGVhZGVyOihmZSxBZSk9Pntjb25zdCBIZT1jZT8uY29sVG9Qcm9wKGZlKTtIZSYm''@;'; put 'put ''Qy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5kZXhPZihIZSk+LTEmJkFlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLEFlLmNsYXNzTGlzdC5hZGQoV24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSxjZS5yZW5kZXIoKSksaS5zZWxlY3RlZFZpZXdi''@;'; put 'put ''b3gmJmkucmVzZXRTZWxlY3RlZFZpZXdib3gocil9LDUwMCl9LDEwMCksYSgpfSkuY2F0Y2goUD0+e2kubG9nZ2VyU2VydmljZS5lcnJvcihQKSxjKCl9KX0pfSkoKX1yZUxvYWRWaWV3Ym94dGFibGVzKGUpe2UubWFwKHI9Pntjb25zdCBpPWAke3IubGlicmFyeX0uJHtyLnRhYmxlfWA7ci5s''@;'; put 'put ''b2FkaW5nRGF0YT0hMCx0aGlzLmxvYWREYXRhKGkscikudGhlbigoKT0+e3IubG9hZGluZ0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGUscil7cmV0dXJuIGU+MjAwPzIwMDplfWdldFZpZXdib3hUYWJsZUluZGV4KGUpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGk9''@;'; put 'put ''Pmkudmlld2JveElkPT09ZS5pZCl9Y3JlYXRlVmlld2JveFRhYmxlU2V0dGluZ3MoZSl7Y29uc3Qgcj10aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KGUpO2lmKC0xPT09cilyZXR1cm4gdm9pZCB0aGlzLnZpZXdib3hIb3RTZXR0aW5ncy5zZXQoZS5pZCx7fSk7Y29uc3QgaT10aGlzLnZpZXdi''@;'; put 'put ''b3hUYWJsZXNbcl0sYT10aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0KGUpO3RoaXMudmlld2JveEhvdFNldHRpbmdzLnNldChlLmlkLHtjb2xIZWFkZXJzOmkuaG90VGFibGUuY29sSGVhZGVycyxjb2x1bW5zOmkuaG90VGFibGUuY29sdW1ucyxoZWlnaHQ6YSxyZWFkT25seTohMCxtb2RpZnlD''@;'; put 'put ''b2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hla2VyLGNvcHlQYXN0ZTppLmhvdFRhYmxlLmNvcHlQYXN0ZSxjb250ZXh0TWVudTppLmhvdFRhYmxlLmNvbnRleHRNZW51LG11bHRpQ29sdW1uU29ydGluZzohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxmaWx0ZXJzOiEwLGRyb3Bkb3du''@;'; put 'put ''TWVudTppLmhvdFRhYmxlLmRyb3Bkb3duTWVudSxzdHJldGNoSDoiYWxsIixjZWxsczppLmhvdFRhYmxlLmNlbGxzLG1heFJvd3M6aS5ob3RUYWJsZS5tYXhSb3dzfHwxLzAsbWFudWFsQ29sdW1uUmVzaXplOiEwLHJvd0hlYWRlcnM6ITAsbGljZW5zZUtleTppLmhvdFRhYmxlLmxpY2Vuc2VL''@;'; put 'put ''ZXl9KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHNldFRpbWVvdXQoKCk9Pntjb25zdCBtPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGUuaWQpO20mJihtLmxvYWREYXRhKGkuaG90VGFibGUuZGF0YSksbS5yZW5kZXIoKSl9LDUwMCl9KX1nZXRWaWV3Ym94''@;'; put 'put ''VGFibGVTZXR0aW5ncyhlKXtyZXR1cm4gdGhpcy52aWV3Ym94SG90U2V0dGluZ3MuZ2V0KGUuaWQpfHx7fX1yZXNpemUoZSxyKXtjb25zdCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9aS5sZWZ0LWEubGVmdCtpLndpZHRoLG09aS50''@;'; put 'put ''b3AtYS50b3AraS5oZWlnaHQ7cmV0dXJuIHIuc3R5bGUud2lkdGg9YysicHgiLHIuc3R5bGUuaGVpZ2h0PW0rInB4Iix0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMWUzLCgpPT57dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHRoaXMu''@;'; put 'put ''ZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLHRoaXMudmlld2JveGVzLmZvckVhY2goQz0+e3RoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoQyl9KX0pLHt3aWR0aDpjLGhlaWdodDptfX1kcmFnTW92ZShlLHIsaSxhKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxh''@;'; put 'put ''cigoKT0+e2NvbnN0IGM9dGhpcy5yZXNpemUoZSxyKTtpLndpZHRoPWMud2lkdGgsaS5oZWlnaHQ9Yy5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKXt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2goZT0+e2NvbnN0IHI9ZS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50''@;'; put 'put ''UmVjdCgpLGk9YGhhbmRsZV8ke2UubmF0aXZlRWxlbWVudC5pZH1gLGE9dGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnkuZmluZCgoYyxtKT0+Yy5uYXRpdmVFbGVtZW50LmlkPT09aSk7dGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oYT8ubmF0aXZlRWxlbWVudCxyLCJib3RoIil9KX1zZXRIYW5k''@;'; put 'put ''bGVUcmFuc2Zvcm0oZSxyLGkpe2NvbnN0IGE9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgYz1yLndpZHRoLWEud2lkdGgsbT1yLmhlaWdodC1hLmhlaWdodDtjKz01LG0rPTUsIngiPT09aSYmKGUuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHtjfXB4LCAwKWApLCJ5Ij09PWkm''@;'; put 'put ''JihlLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKDAsICR7bX1weClgKSwiYm90aCI9PT1pJiYoZS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke2N9cHgsICR7bX1weClgKX1mb2N1c1ZpZXdib3goZSl7dGhpcy52aWV3Ym94ZXMubWFwKHI9PntyLmZvY3VzZWQ9ITF9KSxlLmZvY3Vz''@;'; put 'put ''ZWQ9ITB9dmlld2JveERyYWdFbmRlZChlLHIpe2xldCBhPWUuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ci54PWEubGVmdCxyLnk9YS50b3AsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNuYXBUb0dyaWQoKXtjb25zdCBlPXdpbmRvdy5pbm5lcldpZHRo''@;'; put 'put ''LHI9d2luZG93LmlubmVySGVpZ2h0LG09TWF0aC5jZWlsKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxDPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLEo9KGUtNSoobSsxKSkvbSxjZT0oZS01KihDKzEpKS9DO2xldCBBZT0wLFhlPShyLTI1MC02MCkvMixydD0wLGR0PTA7''@;'; put 'put ''Zm9yKGxldCBqdD0wO2p0PHRoaXMudmlld2JveGVzLmxlbmd0aDtqdCsrKXtsZXQgRnQ9dGhpcy52aWV3Ym94ZXNbanRdLHBuPSEoanQ+bS0xKTtjb25zdCBvbj1wbj9KOmNlOyFwbiYmMD09PWR0JiYocnQ9MCxkdCsrLEFlPTApLEZ0Lng9NStBZStydCoob24rNSksRnQueT0yNTArZHQqKFhl''@;'; put 'put ''KzUpLEZ0LndpZHRoPW9uLEZ0LmhlaWdodD1YZSxydCsrfXRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGp0PT57dGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShqdCl9KX0p''@;'; put 'put ''fW1pbmltaXplQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChlPT57ZS5taW5pbWl6ZWQ9ITB9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goZT0+e2UubWluaW1pemVkPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc2V0''@;'; put 'put ''UG9zU2l6ZShlKXtlLng9d2luZG93LmlubmVyV2lkdGgtdGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGUueT10aGlzLmRlZmF1bHRDb25maWcueSxlLndpZHRoPXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxlLmhlaWdodD10aGlzLmRlZmF1bHRDb25maWcuaGVpZ2h0LHRoaXMudmlld2JveENo''@;'; put 'put ''YW5nZWQoKX1taW5pbWl6ZShlKXtlLm1pbmltaXplZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZShlKXtlLm1pbmltaXplZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoZSl9LDEwMCl9Y29sbGFw''@;'; put 'put ''c2UoZSl7ZS5jb2xsYXBzZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWV4cGFuZChlKXtlLmNvbGxhcHNlZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoZSl9LDEwMCl9Y2xvc2UoZSl7Y29uc3Qgcj10aGlz''@;'; put 'put ''LnZpZXdib3hlcy5maW5kSW5kZXgoYT0+YS5pZD09PWUuaWQpLGk9dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChhPT5hLnZpZXdib3hJZD09PWUuaWQpO3I+LTEmJnRoaXMudmlld2JveGVzLnNwbGljZShyLDEpLGk+LTEmJnRoaXMudmlld2JveFRhYmxlcy5zcGxpY2UoaSwxKSx0aGlz''@;'; put 'put ''LnZpZXdib3hIb3RTZXR0aW5ncy5kZWxldGUoZS5pZCksdGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkPT09ZS5pZCYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpLFduLnZpZXdib3hlc1tlLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFZHKSx0aGlzLnZpZXdib3hDaGFuZ2Vk''@;'; put 'put ''KCl9c2VsZWN0Vmlld2JveChlKXt2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlJiZ2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveD90aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGUpOmUuaWQ9PT10aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ/dGhpcy51bnNldFNlbGVjdGVk''@;'; put 'put ''Vmlld2JveCgpOnRoaXMucmVzZXRTZWxlY3RlZFZpZXdib3goZSl9Y29sdW1uc0Ryb3AoZSl7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbiYmKGUucHJldmlvdXNDb250YWluZXI9PT1lLmNvbnRhaW5lcj9hWChlLmNvbnRhaW5lci5kYXRhLGUu''@;'; put 'put ''cHJldmlvdXNJbmRleCxlLmN1cnJlbnRJbmRleCk6ZnVuY3Rpb24gc1plKG4sdCxlLHIpe2NvbnN0IGk9SlQoZSxuLmxlbmd0aC0xKSxhPUpUKHIsdC5sZW5ndGgpO24ubGVuZ3RoJiZ0LnNwbGljZShhLDAsbi5zcGxpY2UoaSwxKVswXSl9KGUucHJldmlvdXNDb250YWluZXIuZGF0YSxlLmNv''@;'; put 'put ''bnRhaW5lci5kYXRhLGUucHJldmlvdXNJbmRleCxlLmN1cnJlbnRJbmRleCksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZSYmIm9iamVjdCI9PXR5cGVvZiB0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnMpJiZ0aGlzLnVwZGF0ZUNvbHVtbk9y''@;'; put 'put ''ZGVySG90KGUuaXRlbS5kYXRhLGUuY3VycmVudEluZGV4LHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX1vbkNvbHNlYXJjaENoYW5nZShlLHIsaSl7Y29uc3QgYT1pLmluZGV4T2Yocik7aS5zcGxpY2UoYSwxKSxlLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFi''@;'; put 'put ''bGU/LmhvdFRhYmxlJiYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKHIpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRW''@;'; put 'put ''aWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KHIsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgtMSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkpfW9uQ29sUmVtb3ZlKGUp''@;'; put 'put ''e2lmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlKXtjb25zdCByPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuaW5kZXhPZihlKTt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxl''@;'; put 'put ''LnNwbGljZShyLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5wdXNoKGUpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3''@;'; put 'put ''Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGUsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfX1yZXNldFNlbGVjdGVkVmlld2Jv''@;'; put 'put ''eChlKXt0aGlzLnNlbGVjdGVkVmlld2JveD1lLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQocj0+ci52aWV3Ym94SWQ9PT1lLmlkKX11bnNldFNlbGVjdGVkVmlld2JveCgpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PXZvaWQgMCx0aGlzLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveFRhYmxlPXZvaWQgMH1zdG9wUHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX1vcGVuRmlsdGVyKGUpe3RoaXMuc2VsZWN0Vmlld2JveChlKTtjb25zdCByPXRoaXMudmlld2JveFRhYmxlc1t0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KGUpXTt0aGlzLmZpbHRlckxp''@;'; put 'put ''YmRzPWAke2UubGlicmFyeX0uJHtlLnRhYmxlfWAsdGhpcy5maWx0ZXJpbmdWaWV3Ym94PWUsdGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMuZmlsdGVyTGliZHMsci5ob3RUYWJsZS5jb2xz''@;'; put 'put ''KX1vcGVuVGFibGVFZGl0KGUpe2NvbnN0IHI9ZS5saWJyYXJ5KyIuIitlLnRhYmxlO2xldCBpPWxvY2F0aW9uLmhyZWYuc2xpY2UoMCxsb2NhdGlvbi5ocmVmLmluZGV4T2YoIiMiKSk7aT1gJHtpfSMvZWRpdG9yLyR7cn1gLHdpbmRvdy5vcGVuKGksIl9ibGFuayIpfXJlc2V0RmlsdGVyKCl7''@;'; put 'put ''dGhpcy5maWx0ZXJpbmdWaWV3Ym94JiYodGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz0iMCIsdGhpcy5yZWxvYWRUYWJsZURhdGEodGhpcy5maWx0ZXJpbmdWaWV3Ym94KSx0aGlzLmZpbHRlcj0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksV24udmlld2JveGVzW3RoaXMuZmlsdGVy''@;'; put 'put ''aW5nVmlld2JveC5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShWRykpfXNlbmRDbGF1c2UoKXt0aGlzLmZpbHRlckxvYWRpbmc9ITA7bGV0IGU9W10scj1bXTtpZih0eXBlb2YgdGhpcy5jbGF1c2VzPiJ1IilyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5m''@;'; put 'put ''aWx0ZXJMb2FkaW5nPSExKTt7bGV0IGk9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXtjb25zdCBjPWlbYV0uZWxlbWVudHM7ZT1jLmZpbHRlcihmdW5jdGlvbihtKXtyZXR1cm4gbnVsbD09PW0udmFyaWFibGV9KSxlLmxlbmd0aCYmci5wdXNoKGMp''@;'; put 'put ''fX1pZihyLmxlbmd0aClyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09dGhpcy5jbGF1c2VzJiZ0aGlzLmZpbHRlckxpYmRzKXtjb25zdCBpPXtncm91cExvZ2ljOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLGZp''@;'; put 'put ''bHRlckdyb3VwczpbXX07dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goYz0+e2NvbnN0IG09e2ZpbHRlckNsYXVzZXM6W119O2MuZWxlbWVudHMuZm9yRWFjaChDPT57bS5maWx0ZXJDbGF1c2VzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShDKSl9KSxtLmNsYXVzZUxv''@;'; put 'put ''Z2ljPWMuY2xhdXNlTG9naWMsaS5maWx0ZXJHcm91cHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKG0pKX0pO2NvbnN0IGE9dGhpcy5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShpKTt0aGlzLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkodGhpcy5m''@;'; put 'put ''aWx0ZXJMaWJkcyxhKS50aGVuKGM9Pnt0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPWMucmVzdWx0WzBdLkZJTFRFUl9SSyx0aGlzLmxvYWREYXRhKHRoaXMuZmlsdGVyTGliZHMsdGhpcy5maWx0ZXJpbmdWaWV3Ym94KS50aGVuKCgpPT57dGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0''@;'; put 'put ''ZXJMb2FkaW5nPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfSkuY2F0Y2goYz0+e3RoaXMuZmlsdGVyTG9hZGluZz0hMX0pfX1jYXRjaHt0aGlzLmZpbHRlckxvYWRpbmc9ITF9fXNlYXJjaFRhYmxlKGUscil7dmFyIGk9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtyLnNlYXJjaExvYWRp''@;'; put 'put ''bmc9ITA7bGV0IGE9ZS52YWx1ZSxjPXIubGlicmFyeSsiLiIrci50YWJsZSxtPXBhcnNlSW50KHIuZmlsdGVyX3BrfHwiMCIpO2NvbnN0IEM9aS52aWV3Ym94VGFibGVzLmZpbmQoUD0+UC52aWV3Ym94SWQ9PT1yLmlkKTtDJiYoeWllbGQgaS5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFy''@;'; put 'put ''Y2goYSxyLnNlYXJjaE51bWVyaWMsYyxtKS50aGVuKFA9PntQLnNhc3BhcmFtc3x8UC52aWV3RGF0YT8oQy5ob3RUYWJsZS5kYXRhPVAudmlld2RhdGEsaS5jcmVhdGVWaWV3Ym94VGFibGVTZXR0aW5ncyhyKSk6ci5zZWFyY2hMb2FkaW5nPSEwfSkuY2F0Y2goUD0+e2kubG9nZ2VyU2Vydmlj''@;'; put 'put ''ZS5lcnJvcihQKX0pLHIuc2VhcmNoTG9hZGluZz0hMSl9KSgpfXJlbG9hZFRhYmxlRGF0YShlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2NvbnN0IGk9YCR7ZS5saWJyYXJ5fS4ke2UudGFibGV9YDtlLmxvYWRpbmdEYXRhPSEwLHlpZWxkIHIucmVsb2FkRGF0YShpLGUpLGUu''@;'; put 'put ''bG9hZGluZ0RhdGE9ITEsci5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoZSxyKXt0aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoZSxyKSx0aGlzLnNldENvbHVtbk9yZGVyKHIpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGUscixpKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGkpO2lmKGEpe2NvbnN0IGM9YS5wcm9wVG9Db2woZSk7YS5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKGMsciksYS5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGkpfX10YWJsZUVkaXRFeGlzdHMo''@;'; put 'put ''ZSl7Y29uc3Qgcj1Xbi5lZGl0b3IubGlic0FuZFRhYmxlcyxpPWUubGlicmFyeTtyZXR1cm4hIXJbaV0mJnJbaV0uaW5jbHVkZXMoZS50YWJsZSl9c2V0Q29sdW1uT3JkZXIoZSl7Y29uc3Qgcj10aGlzLnZpZXdib3hlcy5maW5kKGk9PmkuaWQ9PT1lKTtpZihyKXtjb25zdCBpPXRoaXMuY3Jl''@;'; put 'put ''YXRlQ29sdW1uT3JkZXIoZSk7ci5jb2x1bW5zPWkubGVuZ3RoPjA/aTpyLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGUpe2NvbnN0IHI9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZSk7aWYoIXIpcmV0dXJuW107Y29uc3QgaT1yLmdldENvbEhl''@;'; put 'put ''YWRlcigpLGE9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighYSlyZXR1cm5bXTtjb25zdCBjPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsbT1bXTtyZXR1cm4gaS5tYXAoKEMs''@;'; put 'put ''UCk9PntpZihQPGMpe2NvbnN0IFk9YS5pbmRleE9mKEMpO1k+LTEmJm0ucHVzaChZKX19KSxtfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoZSxyKXtjb25zdCBpPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKHIpO2lmKGkpe2NvbnN0IGE9ZS5tYXAoYz0+aS5wcm9wVG9Db2woYykpO2kudXBk''@;'; put 'put ''YXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6YX19KSxpLnJlbmRlcigpfX1jYWxjdWxhdGVUYWJsZUhlaWdodChlKXtyZXR1cm4gZS5oZWlnaHQtMjAtMzYtMn1yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShlKXtjb25zdCByPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGUu''@;'; put 'put ''aWQpO3ImJnNldFRpbWVvdXQoKCk9Pnt0cnl7ci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoZSl9KSxyLnJlZnJlc2hEaW1lbnNpb25zKCksci5yZW5kZXIoKX1jYXRjaHtzZXRUaW1lb3V0KCgpPT57dHJ5e3IudXBkYXRlU2V0dGluZ3Moe2hlaWdo''@;'; put 'put ''dDp0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0KGUpfSksci5yZWZyZXNoRGltZW5zaW9ucygpfWNhdGNoKGEpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIHJlZnJlc2ggSE9UIGRpbWVuc2lvbnMgZm9yIHZpZXdib3giLGUuaWQsYSl9fSw1MDApfX0sMTAwKX1nZXRWaWV3Ym94SG90SW5zdGFu''@;'; put 'put ''Y2UoZSl7aWYoIWV8fCF0aGlzLmhvdFRhYmxlQ29tcG9uZW50cylyZXR1cm47Y29uc3Qgcj10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgobT0+bS5pZD09PWUpO2lmKC0xPT09cilyZXR1cm47Y29uc3QgaT10aGlzLmhvdFRhYmxlQ29tcG9uZW50cy50b0FycmF5KCk7bGV0IGE9MDtmb3IobGV0''@;'; put 'put ''IG09MDttPHI7bSsrKXRoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgodGhpcy52aWV3Ym94ZXNbbV0pPi0xJiZhKys7cmV0dXJuIGlbYV0/LmhvdEluc3RhbmNlfHx2b2lkIDB9dmlld2JveENoYW5nZWQoKXtsZXQgZTtjb25zdCByPXRoaXMuZW5jb2RlVXJsRGF0YSh0aGlzLnZpZXdib3hlcyk7''@;'; put 'put ''ci5sZW5ndGg+MCYmKGU9e3ZpZXdib3hlczpyfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczplfSksdGhpcy5wcmVwYXJlRmlsdGVyQ2FjaGUoKX1wcmVwYXJlRmlsdGVyQ2FjaGUoKXtmb3IobGV0IGUgb2YgdGhp''@;'; put 'put ''cy52aWV3Ym94ZXMpaWYoV24udmlld2JveGVzW2UuaWRdfHwoV24udmlld2JveGVzW2UuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVkcpKSxlLnF1ZXJ5JiZlLnF1ZXJ5Lmxlbmd0aD4wKXtjb25zdCByPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGE9PmEudmlld2JveElkPT09''@;'; put 'put ''ZS5pZCksaT1gdmlld2JveGVzLiR7ZS5pZH1gO1duLnZpZXdib3hlc1tlLmlkXS5maWx0ZXIucXVlcnk9ZS5xdWVyeSxXbi52aWV3Ym94ZXNbZS5pZF0uZmlsdGVyLmxpYmRzPWUubGlicmFyeSsiLiIrZS50YWJsZSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVy''@;'; put 'put ''Q2xhdXNlKGkscj8uaG90VGFibGUuY29scyl9fWVuY29kZVVybERhdGEoZSl7bGV0IHI9IiI7cmV0dXJuIGUubWFwKChpLGEpPT57cis9YCR7aS5pZH0tJHtpLmxpYnJhcnl9LSR7aS50YWJsZX0tJHtpLndpZHRofS0ke2kuaGVpZ2h0fS0ke2kueH0tJHtpLnl9LSR7aS5jb2xsYXBzZWQ/MTow''@;'; put 'put ''fS0ke2kubWluaW1pemVkPzE6MH0tJHtpLmZpbHRlcl9wa3x8MH0ke2kuY29sdW1ucyYmaS5jb2x1bW5zLmxlbmd0aD4wPyItIitpLmNvbHVtbnM/LmpvaW4oIiwiKToiIn1gLGEhPT1lLmxlbmd0aC0xJiYocis9IjsiKX0pLHJ9ZGVjb2RlVXJsRGF0YShlKXtsZXQgaT1bXTtyZXR1cm4gZS5z''@;'; put 'put ''cGxpdCgiOyIpLm1hcChjPT57Y29uc3QgbT1jLnNwbGl0KCItIik7aS5wdXNoKHtpZDpwYXJzZUludChtWzBdKSxsaWJyYXJ5Om1bMV0sdGFibGU6bVsyXSx3aWR0aDpwYXJzZUludChtWzNdKSxoZWlnaHQ6cGFyc2VJbnQobVs0XSkseDpwYXJzZUludChtWzVdKSx5OnBhcnNlSW50KG1bNl0p''@;'; put 'put ''LGNvbGxhcHNlZDohIXBhcnNlSW50KG1bN10pLG1pbmltaXplZDohIXBhcnNlSW50KG1bOF0pLGNvbHVtbnM6bVsxMF0/LnNwbGl0KCIsIikubWFwKEM9PnBhcnNlSW50KEMpKXx8W10sZmlsdGVyX3BrOm1bOV19KX0pLGl9bmdPbkRlc3Ryb3koKXt0aGlzLl9xdWVyeT8udW5zdWJzY3JpYmUo''@;'; put 'put ''KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShKYSksV2UoSzEpLFdlKEpzKSxXZShTYyksV2UoRTIpLFdlKG1oKSxXZShMdSksV2UocmwpLFdlKHMwKSxXZShGcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3Rv''@;'; put 'put ''cnM6W1siYXBwLXZpZXdib3hlcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24ocixpKXtpZigxJnImJihXYShJTXQsNSksV2EoUk10LDUpLFdhKEc1LDUpKSwyJnIpe2xldCBhO2RpKGE9aGkoKSkmJihpLnJlc2l6ZUJveFF1ZXJ5PWEpLGRpKGE9aGkoKSkmJihpLmRyYWdIYW5kbGVDb3JuZXJRdWVy''@;'; put 'put ''eT1hKSxkaShhPWhpKCkpJiYoaS5ob3RUYWJsZUNvbXBvbmVudHM9YSl9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1vZGFsIn0sb3V0cHV0czp7dmlld2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxzdGFuZGFsb25lOiExLGRlY2xzOjU2LHZhcnM6MjMsY29u''@;'; put 'put ''c3RzOltbImlucHV0IiwiIl0sWyJyZXNpemVCb3giLCIiXSxbImRyYWdIYW5kbGVDb3JuZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNo''@;'; put 'put ''YW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwibGljZW5jZS1ub3RpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJdLFsxLCJhZGQtbmV3IiwiZC1mbGV4IiwiY2xyLWZs''@;'; put 'put ''ZXgtY29sdW1uIl0sWzEsIm10LTAiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtLTAgdmlld2JveC1saW1pdC1ub3RpY2UiLDQsIm5nSWYiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25DbGlja0VtaXR0''@;'; put 'put ''ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiw0LCJuZ0lmIl0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQi''@;'; put 'put ''LCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCIxOSJdLFsic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIsInNpemUiLCIxOSJd''@;'; put 'put ''LFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwib3Blbi12aWV3Ym94IGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0xMCJdLFsxLCJtLTAiXSxbImNsYXNzIiwiY29uZmlndXJhdGlvbi13cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdWYXIiXSxbMSwibW9kYWwt''@;'; put 'put ''Zm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmlld2JveGVzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ2aWV3Ym94IiwiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwi''@;'; put 'put ''IiwidGFiaW5kZXgiLCIwIiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJib3gtc2hhZG93IiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0s''@;'; put 'put ''WzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9k''@;'; put 'put ''eSJdLFszLCJ2aWV3Ym94SWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0s''@;'; put 'put ''WzEsImxpY2VuY2Utbm90aWNlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsIm0tMCIsInZpZXdib3gtbGltaXQtbm90aWNlIl0sWzMsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLCJsaWJyYXJ5TGlz''@;'; put 'put ''dCJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIi''@;'; put 'put ''XSxbImNsclNtYWxsIiwiIiwiY2xhc3MiLCJtbC0zIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImN1cnNvci1tb3ZlIiwi''@;'; put 'put ''c2l6ZSIsIjEzIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwiY2xhc3MiLCJ0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC1ib3R0b20tbGVmdCBtbC0zIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIxOSJdLFsiY2xyU21h''@;'; put 'put ''bGwiLCIiLDEsIm1sLTMiXSxbImNka0Ryb3BMaXN0R3JvdXAiLCIiLDEsImNvbmZpZ3VyYXRpb24td3JhcHBlciJdLFs0LCJuZ0lmIl0sWzEsImNvbHMtc2VhcmNoIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiU2Vh''@;'; put 'put ''cmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMsInZhbHVlQ2hhbmdlIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcm9wTGlzdCIsIiIsMSwiY29scy1saXN0IiwzLCJjZGtEcm9wTGlzdERyb3BwZWQiLCJjZGtEcm9wTGlzdERh''@;'; put 'put ''dGEiXSxbImNka0RyYWciLCIiLDMsImNsYXNzIiwiY3Vyc29yLWRlZmF1bHQtaSIsInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0RyYWciLCIiLDMsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rp''@;'; put 'put ''c2FibGVkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0cmFzaCIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImtleSJdLFsic2hhcGUiLCJ0cmFzaCIsMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZGtE''@;'; put 'put ''cmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDEsInZpZXdib3giLDMsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiXSxbImNka0RyYWdIYW5kbGUiLCIiLDEsImRyYWct''@;'; put 'put ''aGFuZGxlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZS10aXRsZSJdLFsxLCJhY3Rpb25zIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUgZG93''@;'; put 'put ''biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwibWludXMiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsiY2RrRHJhZyIsIiIsMSwiZHJhZ0hhbmRsZSIsImNvcm5lciIsMywiY2RrRHJhZ01vdmVkIiwiaWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIs''@;'; put 'put ''ImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNs''@;'; put 'put ''cklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0''@;'; put 'put ''eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbInNoYXBlIiwicmVmcmVzaCIsImNsYXNzIiwiY2xpY2staWNvbiIs''@;'; put 'put ''MywiY2xpY2siLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLWxnIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciIsMSwiY2xpY2staWNvbiJdLFsxLCJ0''@;'; put 'put ''b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbInNoYXBlIiwicGVuY2lsIiwxLCJjbGljay1pY29uIiwibWwtNSIsMywiY2xpY2siXSxbImNsYXNzIiwiY29udGVudCIsMywiZGlzcGxheSIsNCwibmdWYXIiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayJdLFsic2hhcGUi''@;'; put 'put ''LCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGljayJdLFsxLCJjb250''@;'; put 'put ''ZW50Il0sWyJjbGFzcyIsImhvdC1zcGlubmVyIG15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMywic2V0dGluZ3MiLCJpZCIsNCwibmdJZiJdLFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFszLCJzZXR0aW5ncyIsImlkIl0sWzMs''@;'; put 'put ''InZpZXdib3hJZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImNsci1tb2RhbCIsNSksa3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGkuY2xyTW9kYWxPcGVuQ2hhbmdlKGMpfSkscmUoMSwiaDMiLDYpLFRlKDIsIiBWaWV3Ym94ZXMgIiks''@;'; put 'put ''Y3QoMyxGTXQsMiwyLCJzcGFuIiw3KSxpZSgpLHJlKDQsImRpdiIsOCkoNSwiZGl2Iiw5KSg2LCJwIiwxMCksVGUoNywiQWRkIG5ldyIpLGllKCksVnQoOCwiaHIiLDExKSxjdCg5LEhNdCwyLDAsImRpdiIsMTIpKDEwLE5NdCwyLDAsInAiLDEzKSgxMSxWTXQsMSwxLCJkYy10cmVlIiwxNCks''@;'; put 'put ''aWUoKSxyZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYpKDE0LCJwIiwxMCksVGUoMTUsIkN1cnJlbnRseSBvcGVuIiksaWUoKSxyZSgxNiwiZGl2IikoMTcsImEiLDE3KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc25hcFRvR3JpZCgpfSksVnQoMTgsImNsci1pY29uIiwxOCks''@;'; put 'put ''cmUoMTksInNwYW4iLDE5KSxUZSgyMCwiU25hcCB2aWV3Ym94ZXMgdG8gZ3JpZCIpLGllKCkoKSxyZSgyMSwiYSIsMTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5taW5pbWl6ZUFsbCgpfSksVnQoMjIsImNsci1pY29uIiwyMCkscmUoMjMsInNwYW4iLDE5KSxUZSgyNCwiTWlu''@;'; put 'put ''aW1pemUgYWxsIHZpZXdib3hlcyIpLGllKCkoKSxyZSgyNSwiYSIsMTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yZXN0b3JlQWxsKCl9KSxWdCgyNiwiY2xyLWljb24iLDIxKSxyZSgyNywic3BhbiIsMTkpLFRlKDI4LCJSZXN0b3JlIGFsbCB2aWV3Ym94ZXMiKSxpZSgpKCko''@;'; put 'put ''KSgpLFZ0KDI5LCJociIpLGN0KDMwLEJNdCwyLDAsInAiLDIyKSgzMSxXTXQsMTUsMTAsImRpdiIsMjMpLHJlKDMyLCJkaXYiLDI0KSgzMywicCIsMjUpLFRlKDM0KSxpZSgpKCksVnQoMzUsImhyIiksY3QoMzYscU10LDMsMiwiZGl2IiwyNiksaWUoKSgpLHJlKDM3LCJkaXYiLDI3KSgzOCwi''@;'; put 'put ''YnV0dG9uIiwyOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnZpZXdib3hNb2RhbD0hMX0pLFRlKDM5LCIgT2sgIiksaWUoKSgpKCkscmUoNDAsImRpdiIsMjkpLGN0KDQxLHN4dCwzMywzNywiZGl2IiwzMCksaWUoKSxyZSg0MiwiY2xyLW1vZGFsIiwzMSksY2koImNsck1vZGFs''@;'; put 'put ''T3BlbkNoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGkuZmlsdGVyLGMpfHwoaS5maWx0ZXI9YyksY30pLHJlKDQzLCJoMyIsMzIpLFRlKDQ0LCIgRmlsdGVyIGZvciB2aWV3Ym94IHRhYmxlOiAiKSxyZSg0NSwic3BhbiIpLFRlKDQ2KSxpZSgpKCkscmUoNDcsImRpdiIsMzMpLGN0KDQ4''@;'; put 'put ''LGx4dCwyLDEsImFwcC1xdWVyeSIsMzQpLGllKCkscmUoNDksImRpdiIsMjcpKDUwLCJidXR0b24iLDM1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzZXRGaWx0ZXIoKX0pLFRlKDUxLCIgcmVzZXQgZmlsdGVyICIpLGllKCkscmUoNTIsImJ1dHRvbiIsMjgpLGt0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5maWx0ZXI9ITF9KSxUZSg1MywiIENhbmNlbCAiKSxpZSgpLHJlKDU0LCJidXR0b24iLDM2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2VuZENsYXVzZSgpfSksVGUoNTUsIiBPayAiKSxpZSgpKCkoKSksMiZyJiYoeWUoImNsck1vZGFs''@;'; put 'put ''T3BlbiIsaS52aWV3Ym94TW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksYWUoMykseWUoIm5nSWYiLGkubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1pLkluZmluaXR5KSxhZSg2KSx5ZSgibmdJZiIsaS5saWJyYXJpZXNMb2FkaW5n''@;'; put 'put ''KSxhZSgpLHllKCJuZ0lmIixpLnZpZXdib3hMaW1pdFJlYWNoZWQpLGFlKCkseWUoIm5nSWYiLGkudmlld2JveE1vZGFsKSxhZSgxOSkseWUoIm5nSWYiLGkudmlld2JveGVzLmxlbmd0aDwxKSxhZSgpLHllKCJuZ0Zvck9mIixpLnZpZXdib3hlcyksYWUoMyksTXIoIiBDb25maWd1cmF0aW9u''@;'; put 'put ''ICgiLG51bGwhPWkuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJmkuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQ/IiMiKyhudWxsPT1pLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6aS5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKyIgIisobnVsbD09aS5zZWxl''@;'; put 'put ''Y3RlZFZpZXdib3hUYWJsZT9udWxsOmkuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQpOiJzZWxlY3Qgdmlld2JveCBmcm9tIGFib3ZlIiwiKSAiKSxhZSgyKSx5ZSgibmdWYXIiLEZFKDE5LExNdCxudWxsPT1pLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1pLnNl''@;'; put 'put ''bGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aS5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDppLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWkuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDppLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmhlYWRlclBrcykpLGFlKDUpLHll''@;'; put 'put ''KCJuZ0Zvck9mIixpLnZpZXdib3hlcyksYWUoKSxsaSgiY2xyTW9kYWxPcGVuIixpLmZpbHRlcikseWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxhZSg0KSxuMCgiICMiLG51bGw9PWkuZmlsdGVyaW5nVmlld2JveD9udWxsOmkuZmlsdGVyaW5nVmlld2Jv''@;'; put 'put ''eC5pZCwiICIsaS5maWx0ZXJMaWJkcywiICIpLGFlKDIpLHllKCJuZ0lmIixpLmZpbHRlciksYWUoNikseWUoImNsckxvYWRpbmciLGkuZmlsdGVyTG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLFVsLGh1LGMwLFMxLFZmLHBzLHNwZSxDaCx6dyxiMixQZCxTaCxROSxSZixMZix2aCxp''@;'; put 'put ''bCxxOSxRcyxxMyxtYWUsRzUsVDNlLEUzZSx1WCx4M2UsRV9lLERNdCxZUyxUQV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKSxrX2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmZpbGVPdmVyPW5ldyBZcix0aGlzLmZpbGVEcm9wPW5ldyBZcix0aGlzLmVsZW1l''@;'; put 'put ''bnQ9ZX1vbkRyb3AoZSl7dGhpcy5fcHJldmVudEFuZFN0b3AoZSk7Y29uc3Qgcj1lLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaT1bXTtpZihyKWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKWkucHVzaChyW2FdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGkpLHRoaXMuZmlsZU92ZXIuZW1p''@;'; put 'put ''dCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGkpfW9uRHJhZ092ZXIoZSl7dGhpcy5fcHJldmVudEFuZFN0b3AoZSk7Y29uc3Qgcj1lLmRhdGFUcmFuc2ZlcjtpZihyKXtpZigtMT09PXIudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ci5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVP''@;'; put 'put ''dmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGUpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGUpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihy''@;'; put 'put ''KXtyZXR1cm4gbmV3KHJ8fG4pKFdlKHppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsxJnImJmt0KCJkcm9wIixmdW5jdGlvbihjKXtyZXR1cm4gaS5vbkRyb3Ao''@;'; put 'put ''Yyl9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKGMpe3JldHVybiBpLm9uRHJhZ092ZXIoYyl9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbihjKXtyZXR1cm4gaS5vbkRyYWdMZWF2ZShjKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmls''@;'; put 'put ''ZURyb3A6ImZpbGVEcm9wIn0sc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gbn0pKCksRF9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5maWxlU2VsZWN0ZWQ9bmV3IFlyLHRoaXMuZWxlbWVudD1lfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEhdGhpcy5lbGVtZW50''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGU9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlsZXM7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShlKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGUpLHRoaXMuaXNFbXB0eUFmdGVyU2VsZWN0''@;'; put 'put ''aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoemkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPVdyKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImFwcEZpbGVTZWxl''@;'; put 'put ''Y3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHIsaSl7MSZyJiZrdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9LHN0YW5kYWxvbmU6''@;'; put 'put ''ITF9KX19cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGN4dChuLHQpezEmbiYmKHJlKDAsInAiLDgpLFRlKDEsIiBObyBkYXRhc2V0IG1ldGEgdG8gc2hvdy4gIiksaWUoKSl9ZnVuY3Rpb24gdXh0KG4sdCl7aWYoMSZuJiYocmkoMCkscmUoMSwiY2xyLWRnLWNvbHVtbiIpLFRlKDIpLGllKCksaWko''@;'; put 'put ''KSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKDIpLHZyKGUuY29sTmFtZXx8ZS5jb2xLZXkpfX1mdW5jdGlvbiBkeHQobix0KXtpZigxJm4mJihyaSgwKSxyZSgxLCJjbHItZGctY2VsbCIpLFRlKDIpLGllKCksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoKS4kaW1w''@;'; put 'put ''bGljaXQ7YWUoMiksdnIocltlLmNvbEtleV0pfX1mdW5jdGlvbiBoeHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItZGctcm93IiwxMyksa3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0LGE9RWUoMikuJGltcGxpY2l0O3JldHVybiBtdChh''@;'; put 'put ''Lm9uUm93Q2xpY2s/YS5vblJvd0NsaWNrKGkpOiIiKX0pLGN0KDEsZHh0LDMsMSwibmctY29udGFpbmVyIiw1KSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgyKS4kaW1wbGljaXQ7YWUoKSx5ZSgibmdGb3JPZiIsZS5jb2xzVG9EaXNwbGF5KX19ZnVuY3Rpb24gZnh0KG4sdCl7aWYoMSZuJiYo''@;'; put 'put ''cmUoMCwiY2xyLXRhYi1jb250ZW50IiwxMSkoMSwiY2xyLWRhdGFncmlkIiksY3QoMix1eHQsMywxLCJuZy1jb250YWluZXIiLDUpKDMsaHh0LDIsMSwiY2xyLWRnLXJvdyIsMTIpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2FlKDIpLHllKCJuZ0Zvck9mIixlLmNvbHNU''@;'; put 'put ''b0Rpc3BsYXkpLGFlKCkseWUoIm5nRm9yT2YiLGUubWV0YSl9fWZ1bmN0aW9uIHB4dChuLHQpe2lmKDEmbiYmKHJlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLFRlKDIpLGllKCksY3QoMyxmeHQsNCwyLCJjbHItdGFiLWNvbnRlbnQiLDEwKSxpZSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1w''@;'; put 'put ''bGljaXQscj10LmluZGV4O2FlKDIpLHZyKGUubmFtZSksYWUoKSx5ZSgiY2xySWZBY3RpdmUiLDA9PT1yKX19bGV0IElfZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyBZ''@;'; put 'put ''cix0aGlzLnJvd0NsaWNrZWQ9bmV3IFlyLHRoaXMuZHNtZXRhVGFicz1bXSx0aGlzLnZlcnNpb25zVGFicz1bXSx0aGlzLnRhYnM9W119bmdPbkluaXQoKXt9bmdPbkNoYW5nZXMoZSl7ZS5kc21ldGE/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoPjAmJih0aGlzLnBhcnNlRFNNZXRhKCksdGhpcy5w''@;'; put 'put ''YXJzZVZlcnNpb25zKCksdGhpcy50YWJzPVsuLi50aGlzLmRzbWV0YVRhYnMsLi4udGhpcy52ZXJzaW9uc1RhYnNdKX1wYXJzZURTTWV0YSgpe3RoaXMuZHNtZXRhVGFicz1bXTtmb3IobGV0IGUgb2YgdGhpcy5kc21ldGEpe2xldCByPXRoaXMuZHNtZXRhVGFicy5maW5kSW5kZXgoaT0+aS5u''@;'; put 'put ''YW1lPT09ZS5PRFNfVEFCTEUpO3I8MCYmKHI9dGhpcy5kc21ldGFUYWJzLnB1c2goe25hbWU6ZS5PRFNfVEFCTEUsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTkFNRSJ9LHtjb2xLZXk6IlZBTFVFIn1dLG1ldGE6W10sb25Sb3dDbGljazppPT57dGhpcy5y''@;'; put 'put ''b3dDbGlja2VkLmVtaXQoaSl9fSktMSksdGhpcy5kc21ldGFUYWJzW3JdLm1ldGEucHVzaChlKX19cGFyc2VWZXJzaW9ucygpe3RoaXMudmVyc2lvbnNUYWJzPVt7bmFtZToiVkVSU0lPTlMiLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6IkxPQURfUkVGIn0s''@;'; put 'put ''e2NvbEtleToiVVNFUl9OTSJ9LHtjb2xLZXk6IlZFUlNJT05fRFRUTSJ9LHtjb2xLZXk6Ik5FV19SRUNPUkRTIixjb2xOYW1lOiJBREQifSx7Y29sS2V5OiJDSEFOR0VEX1JFQ09SRFMiLGNvbE5hbWU6Ik1PRCJ9LHtjb2xLZXk6IkRFTEVURURfUkVDT1JEUyIsY29sTmFtZToiREVMIn0se2Nv''@;'; put 'put ''bEtleToiVkVSU0lPTl9ERVNDIn1dLG1ldGE6dGhpcy52ZXJzaW9ucyxvblJvd0NsaWNrOmU9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChlKX19XX1vbk9wZW5DaGFuZ2UoZSl7dGhpcy5vcGVuPWUsdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZSl9b25DbG9zZUNsaWNrKCl7dGhpcy5vbk9wZW5DaGFu''@;'; put 'put ''Z2UoITEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWRhdGFzZXQtaW5mbyJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRzbWV0YToiZHNtZXRhIix2ZXJz''@;'; put 'put ''aW9uczoidmVyc2lvbnMifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIixyb3dDbGlja2VkOiJyb3dDbGlja2VkIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbV3RdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4i''@;'; put 'put ''LCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0''@;'; put 'put ''aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlk''@;'; put 'put ''IiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXSxbImNsYXNzIiwiY2xpY2thYmxl''@;'; put 'put ''LXJvdyIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbGlja2FibGUtcm93IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImNsci1tb2RhbCIsMCksa3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGkub25P''@;'; put 'put ''cGVuQ2hhbmdlKGMpfSkscmUoMSwiaDMiLDEpLFRlKDIsIkRhdGFzZXQgTWV0YSIpLGllKCkscmUoMywiZGl2IiwyKSxjdCg0LGN4dCwyLDAsInAiLDMpLHJlKDUsImNsci10YWJzIiw0KSxjdCg2LHB4dCw0LDIsImNsci10YWIiLDUpLGllKCkoKSxyZSg3LCJkaXYiLDYpKDgsImJ1dHRvbiIs''@;'; put 'put ''Nyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VDbGljaygpfSksVGUoOSwiIENsb3NlICIpLGllKCkoKSgpKSwyJnImJih5ZSgiY2xyTW9kYWxPcGVuIixpLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCksYWUoNCkseWUoIm5n''@;'; put 'put ''SWYiLGkuZHNtZXRhVGFicy5sZW5ndGg8MSksYWUoMikseWUoIm5nRm9yT2YiLGkudGFicykpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLFo2LHJwLEN2LFU2LHk0LFN2LGlDLFc2LF92LHo2LGJ2LGh1LGMwLFZ3LEg2LFY2LGd2LE42LEY2LGZ2XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59''@;'; put 'put ''KSgpO2NvbnN0IGd4dD0oKT0+WyJudW1lcmljIix2b2lkIDBdLFJfZT0oKT0+WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUuY3VzdG9tIl0sdmFlPShuLHQpPT4oe2NvbDpuLGNvbEluZGV4OnR9KSxteHQ9KCk9Plt2b2lkIDBdLHZ4dD0oKT0+WyJTT0ZUU0VMRUNUIiwiU09GVFNFTEVD''@;'; put 'put ''VF9IT09LIl07ZnVuY3Rpb24geXh0KG4sdCl7aWYoMSZuJiYocmUoMCwic3BhbiIsMTUpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHZyKGUuZ2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24gX3h0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYnV0dG9u''@;'; put 'put ''IiwxNiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKSl9KSxUZSgxKSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgyKTt5ZSgiZGlzYWJsZWQiLGUuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZyksYWUoKSxNcigi''@;'; put 'put ''ICIsZS5nZW5lcmF0ZWRSZWNvcmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjplLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4uIjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVuY3Rpb24gYnh0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSx5eHQs''@;'; put 'put ''MiwxLCJzcGFuIiwxMykoMixfeHQsMiwyLCJidXR0b24iLDE0KSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHllKCJuZ0lmIiwhKG51bGwhPWUuY3VycmVudFJlY29yZCYmZS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLGFlKCkseWUoIm5nSWYiLCEobnVsbCE9ZS5jdXJyZW50''@;'; put 'put ''UmVjb3JkJiZlLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSl9fWZ1bmN0aW9uIHd4dChuLHQpezEmbiYmKHJlKDAsImRpdiIsMTcpKDEsInNwYW4iLDE4KSxUZSgyLCIgTG9hZGluZy4uLiAiKSxpZSgpKCkpfWZ1bmN0aW9uIEN4dChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDMxKX1m''@;'; put 'put ''dW5jdGlvbiBTeHQobix0KXsxJm4mJihyZSgwLCJzcGFuIiwzMiksVGUoMSwiIExvYWRpbmcuLi4gIiksaWUoKSl9ZnVuY3Rpb24gTXh0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIHh4dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pbnB1dC1j''@;'; put 'put ''b250YWluZXIiLDM1KSgxLCJpbnB1dCIsMzYpLGt0KCJmb2N1c2luIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDMpLmluZGV4O3JldHVybiBtdChFZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaSxhKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSg1KS5y''@;'; put 'put ''ZWNvcmRJbnB1dFBhc3RlKGkpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgzKS4kaW1wbGljaXQsYz1FZSgyKTtyZXR1cm4gYy5yZWNvcmRJbnB1dENoYW5nZShpLGEua2V5KSxtdChjLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0pLGNpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDMpLiRpbXBsaWNpdCxjPUVlKDIpO3JldHVybiB1aShjLmN1cnJlbnRSZWNvcmRbYS5rZXldLGkpfHwoYy5jdXJyZW50UmVjb3JkW2Eua2V5XT1pKSxtdChpKX0pLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMykuJGltcGxp''@;'; put 'put ''Y2l0LHI9RWUoMik7YnIoImludmFsaWQtZGF0YSIsci5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZS5rZXkpKSxhZSgpLGxpKCJuZ01vZGVsIixyLmN1cnJlbnRSZWNvcmRbZS5rZXldKX19ZnVuY3Rpb24gRXh0KG4sdCl7MSZuJiZqbCgwKX1mdW5jdGlvbiBUeHQobix0KXtp''@;'; put 'put ''ZigxJm4mJihyZSgwLCJkaXYiKSxjdCgxLEV4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGllKCkpLDImbil7Y29uc3QgZT1FZSgzKSxyPWUuJGltcGxpY2l0LGk9ZS5pbmRleDtFZSgyKTtjb25zdCBhPWRhKDE2KTthZSgpLHllKCJuZ1RlbXBsYXRlT3V0bGV0IixhKSgibmdUZW1wbGF0ZU91''@;'; put 'put ''dGxldENvbnRleHQiLGk0KDIsdmFlLHIsaSkpfX1mdW5jdGlvbiBBeHQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLHh4dCwyLDMsImNsci1pbnB1dC1jb250YWluZXIiLDM0KSgyLFR4dCwyLDUsImRpdiIsNSksaWkoKSksMiZuKXtsZXQgZSxyO2NvbnN0IGk9RWUoMikuJGltcGxpY2l0LGE9''@;'; put 'put ''RWUoMik7YWUoKSx5ZSgibmdJZiIsbmwoMixneHQpLmluY2x1ZGVzKG51bGw9PWEuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGU9YS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaS5rZXkpKT9udWxsOmUuZWRpdG9yKSksYWUoKSx5ZSgibmdJZiIsbmwoMyxSX2UpLmlu''@;'; put 'put ''Y2x1ZGVzKG51bGw9PWEuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KHI9YS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaS5rZXkpKT9udWxsOnIuZWRpdG9yKSl9fWZ1bmN0aW9uIGt4dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10ZXh0YXJlYS1j''@;'; put 'put ''b250YWluZXIiKSgxLCJ0ZXh0YXJlYSIsMzgsMSksa3QoImZvY3VzaW4iLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMykuaW5kZXg7cmV0dXJuIG10KEVlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhpLGEpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKDUp''@;'; put 'put ''LnJlY29yZElucHV0UGFzdGUoaSkpfSkoImlucHV0IixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDMpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaSxhLmtleSkpfSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9''@;'; put 'put ''RWUoMykuJGltcGxpY2l0LGM9RWUoMik7cmV0dXJuIHVpKGMuY3VycmVudFJlY29yZFthLmtleV0saSl8fChjLmN1cnJlbnRSZWNvcmRbYS5rZXldPWkpLG10KGkpfSksVGUoMywiICAgICAgICAgICAgICAgICAgIiksaWUoKSxyZSg0LCJjbHItY29udHJvbC1oZWxwZXIiKSxUZSg1KSxpZSgp''@;'; put 'put ''KCl9aWYoMiZuKXtsZXQgZSxyLGk7Y29uc3QgYT1kYSgyKSxjPUVlKDMpLiRpbXBsaWNpdCxtPUVlKDIpO2FlKCksYnIoImludmFsaWQtZGF0YSIsbS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYy5rZXkpKSgibm90LWNoYXIiLG51bGw9PW0uY3VycmVudFJlY29yZFZhbGlk''@;'; put 'put ''YXRvcnx8bnVsbD09KGU9bS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYy5rZXkpKT9udWxsOmUudHlwZSkseWUoInJvd3MiLGMudmFsdWUubGVuZ3RoPjgwPzY6MSksbGkoIm5nTW9kZWwiLG0uY3VycmVudFJlY29yZFtjLmtleV0pLHllKCJtYXhMZW5ndGgiLG51bGw9PW0uY3Vy''@;'; put 'put ''cmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KHI9bS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYy5rZXkpKT9udWxsOnIubGVuZ3RoKSxhZSg0KSxuMCgiIixhLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1tLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShpPW0uY3Vy''@;'; put 'put ''cmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGMua2V5KSk/bnVsbDppLmxlbmd0aCwiIil9fWZ1bmN0aW9uIER4dChuLHQpezEmbiYmamwoMCl9ZnVuY3Rpb24gSXh0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiksY3QoMSxEeHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxpZSgpKSwyJm4p''@;'; put 'put ''e2NvbnN0IGU9RWUoMykscj1lLiRpbXBsaWNpdCxpPWUuaW5kZXg7RWUoMik7Y29uc3QgYT1kYSgxNik7YWUoKSx5ZSgibmdUZW1wbGF0ZU91dGxldCIsYSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixpNCgyLHZhZSxyLGkpKX19ZnVuY3Rpb24gUnh0KG4sdCl7aWYoMSZuJiYocmkoMCks''@;'; put 'put ''Y3QoMSxreHQsNiw5LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiw1KSgyLEl4dCwyLDUsImRpdiIsNSksaWkoKSksMiZuKXtsZXQgZSxyO2NvbnN0IGk9RWUoMikuJGltcGxpY2l0LGE9RWUoMik7YWUoKSx5ZSgibmdJZiIsbmwoMixteHQpLmluY2x1ZGVzKG51bGw9PWEuY3VycmVudFJlY29y''@;'; put 'put ''ZFZhbGlkYXRvcnx8bnVsbD09KGU9YS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaS5rZXkpKT9udWxsOmUuZWRpdG9yKSksYWUoKSx5ZSgibmdJZiIsbmwoMyxSX2UpLmluY2x1ZGVzKG51bGw9PWEuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KHI9YS5jdXJyZW50UmVj''@;'; put 'put ''b3JkVmFsaWRhdG9yLmdldFJ1bGUoaS5rZXkpKT9udWxsOnIuZWRpdG9yKSl9fWZ1bmN0aW9uIEx4dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDM5KSgxLCJ0ZXh0YXJlYSIsNDApLGt0KCJwYXN0ZSIsZnVuY3Rpb24oaSl7cmV0dXJu''@;'; put 'put ''IGd0KGUpLG10KEVlKDQpLnJlY29yZElucHV0UGFzdGUoaSkpfSkoImlucHV0IixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaSxhLmtleSkpfSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkp''@;'; put 'put ''e2d0KGUpO2NvbnN0IGE9RWUoMikuJGltcGxpY2l0LGM9RWUoMik7cmV0dXJuIHVpKGMuY3VycmVudFJlY29yZFthLmtleV0saSl8fChjLmN1cnJlbnRSZWNvcmRbYS5rZXldPWkpLG10KGkpfSksaWUoKSxyZSgyLCJjbHItY29udHJvbC1oZWxwZXIiKSxUZSgzLCJISDptbTpzcyIpLGllKCko''@;'; put 'put ''KX1pZigyJm4pe2xldCBlO2NvbnN0IHI9RWUoMikuJGltcGxpY2l0LGk9RWUoMik7YWUoKSxicigiaW52YWxpZC1kYXRhIixpLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhyLmtleSkpKCJub3QtY2hhciIsbnVsbD09aS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0o''@;'; put 'put ''ZT1pLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShyLmtleSkpP251bGw6ZS50eXBlKSx5ZSgicm93cyIsci52YWx1ZS5sZW5ndGg+ODA/NjoxKSxsaSgibmdNb2RlbCIsaS5jdXJyZW50UmVjb3JkW3Iua2V5XSl9fWZ1bmN0aW9uIE94dChuLHQpe2lmKDEmbil7Y29uc3QgZT1Jbigp''@;'; put 'put ''O3JlKDAsImRpdiIsMzkpKDEsInRleHRhcmVhIiw0MSksa3QoInBhc3RlIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoNCkucmVjb3JkSW5wdXRQYXN0ZShpKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMikuJGltcGxpY2l0O3JldHVybiBtdChFZSgy''@;'; put 'put ''KS5yZWNvcmRJbnB1dENoYW5nZShpLGEua2V5KSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgyKS4kaW1wbGljaXQsYz1FZSgyKTtyZXR1cm4gdWkoYy5jdXJyZW50UmVjb3JkW2Eua2V5XSxpKXx8KGMuY3VycmVudFJlY29yZFthLmtleV09aSks''@;'; put 'put ''bXQoaSl9KSxpZSgpLHJlKDIsImNsci1kYXRlLWNvbnRhaW5lciIsNDIpKDMsImlucHV0Iiw0Myksa3QoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMikuJGltcGxpY2l0O3JldHVybiBtdChFZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGksYS5rZXkpKX0pLGll''@;'; put 'put ''KCkoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgyKS4kaW1wbGljaXQscj1FZSgyKTthZSgpLGJyKCJpbnZhbGlkLWRhdGEiLHIuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGUua2V5KSksbGkoIm5nTW9kZWwiLHIuY3VycmVudFJlY29yZFtlLmtleV0pfX1mdW5jdGlvbiBQeHQo''@;'; put 'put ''bix0KXsxJm4mJmpsKDApfWZ1bmN0aW9uIEZ4dChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIpLGN0KDEsUHh0LDEsMCwibmctY29udGFpbmVyIiwzNyksaWUoKSksMiZuKXtjb25zdCBlPUVlKDIpLHI9ZS4kaW1wbGljaXQsaT1lLmluZGV4O0VlKDIpO2NvbnN0IGE9ZGEoMTYpO2FlKCkseWUo''@;'; put 'put ''Im5nVGVtcGxhdGVPdXRsZXQiLGEpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsaTQoMix2YWUscixpKSl9fWZ1bmN0aW9uIEh4dChuLHQpe2lmKDEmbiYmKHJpKDApLHJlKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInAiLDIyKSxUZSg0KSxjdCg1LEN4dCwxLDAsImNsci1pY29uIiwy''@;'; put 'put ''MyksaWUoKSxyZSg2LCJwIiwyNCksVGUoNyksaWUoKSgpLHJlKDgsImRpdiIsMjUpLGN0KDksU3h0LDIsMCwic3BhbiIsMjYpKDEwLE14dCwxLDAsImNsci1pY29uIiwyNykoMTEsQXh0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTIsUnh0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTMsTHh0''@;'; put 'put ''LDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjkpKDE0LE94dCw0LDMsImRpdiIsMjkpKDE1LEZ4dCwyLDUsImRpdiIsMjgpLGllKCkoKSxWdCgxNiwiaHIiLDMwKSxpaSgpKSwyJm4pe2xldCBlLHI7Y29uc3QgaT1FZSgpLGE9aS4kaW1wbGljaXQsYz1pLmluZGV4LG09RWUoMik7YWUo''@;'; put 'put ''NCksTXIoIiAiLGEua2V5LCIgIiksYWUoKSx5ZSgibmdJZiIsbS5pc0NvbFBrKGEua2V5KSksYWUoMiksTXIoIiAiLG51bGw9PW0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGU9bS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmUuZGVzYywiICIp''@;'; put 'put ''LGFlKCkseWUoIm5nU3dpdGNoIixudWxsPT1tLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShyPW0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpyLnR5cGUpLGFlKCkseWUoIm5nSWYiLG0uY3VycmVudFJlY29yZExvYWRpbmdzLmluY2x1ZGVzKGMp''@;'; put 'put ''KSxhZSgpLHllKCJuZ0lmIixtLmN1cnJlbnRSZWNvcmRFcnJvcnMuaW5jbHVkZXMoYykpLGFlKCkseWUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxhZSgpLHllKCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksYWUoKSx5ZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLGFlKCkseWUoIm5nU3dpdGNo''@;'; put 'put ''Q2FzZSIsImRhdGUiKSxhZSgpLHllKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gTnh0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxIeHQsMTcsMTEsIm5nLWNvbnRhaW5lciIsNSksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYi''@;'; put 'put ''LCJBY3Rpb24iIT09ZS5rZXkmJiJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09ZS5rZXkmJiJub0xpbmtPcHRpb24iIT09ZS5rZXkpfX1mdW5jdGlvbiBWeHQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLE54dCwyLDEsIm5nLWNvbnRhaW5lciIsMTkpLGhsKDIsImtleXZhbHVl''@;'; put 'put ''IiksaWkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdGb3JPZiIsSTkoMiwyLGUuY3VycmVudFJlY29yZCxlLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlGbil9fWZ1bmN0aW9uIEJ4dChuLHQpezEmbiYmKHJlKDAsImNsci1hbGVydCIsNDQpKDEsImNs''@;'; put 'put ''ci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDUpLFRlKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSxpZSgpKCkoKSksMiZuJiYoVGQoInZpc2liaWxpdHkiLEVlKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVu''@;'; put 'put ''IikseWUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIGp4dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsNDYpKDEsImJ1dHRvbiIsNDcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUo''@;'; put 'put ''KS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxWdCgyLCJjbHItaWNvbiIsNDgpLGllKCkscmUoMywicCIpLFRlKDQsIiBDdXJyZW50IHJvdzogIikscmUoNSwic3Ryb25nIiksVGUoNiksaWUoKSgpLHJlKDcsImJ1dHRvbiIsNDcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3Qo''@;'; put 'put ''ZSksbXQoRWUoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLFZ0KDgsImNsci1pY29uIiw0OSksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoImRpc2FibGVkIixlLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksYWUoNSksTXIoIiAiLGUuY3VycmVudFJlY29y''@;'; put 'put ''ZEluZGV4KzEsIiAiKSxhZSgpLHllKCJkaXNhYmxlZCIsZS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1mdW5jdGlvbiB6eHQobix0KXtpZigxJm4mJihyZSgwLCJvcHRpb24iLDUzKSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7eWUoIm5nVmFsdWUi''@;'; put 'put ''LGUpLGFlKCksTXIoIiAiLGUsIiAiKX19ZnVuY3Rpb24gVXh0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0Iiw1MSksa3QoImZvY3VzaW4iLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS5jb2xJbmRleDtyZXR1cm4gbXQoRWUo''@;'; put 'put ''KS5vblJlY29yZElucHV0Rm9jdXMoaSxhKSl9KSxjaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS5jb2wsYz1FZSgpO3JldHVybiB1aShjLmN1cnJlbnRSZWNvcmRbYS5rZXldLGkpfHwoYy5jdXJyZW50UmVjb3JkW2Eua2V5XT1pKSxtdChpKX0pLGt0KCJv''@;'; put 'put ''bklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpLGE9aS5jb2wsYz1pLmNvbEluZGV4O3JldHVybiBtdChFZSgpLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoYS5rZXksYykpfSksY3QoMix6eHQsMiwyLCJvcHRpb24iLDUyKSxpZSgpKCl9aWYoMiZuKXtsZXQgZTtjb25z''@;'; put 'put ''dCByPUVlKCkuY29sLGk9RWUoKTthZSgpLGxpKCJ2YWx1ZSIsaS5jdXJyZW50UmVjb3JkW3Iua2V5XSkseWUoImlucHV0SWQiLHIua2V5KSxhZSgpLHllKCJuZ0Zvck9mIixudWxsPT1pLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShlPWkuY3VycmVudFJlY29yZFZhbGlkYXRvci5n''@;'; put 'put ''ZXRSdWxlKHIua2V5KSk/bnVsbDplLnNvdXJjZSl9fWZ1bmN0aW9uIFd4dChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIsNTYpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgidmFsdWUiLGUpLGFlKCksTXIoIiAiLGUsIiAiKX19ZnVuY3Rpb24gWnh0KG4sdCl7''@;'; put 'put ''aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwic2VsZWN0Iiw1NCksa3QoImZvY3VzaW4iLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS5jb2xJbmRleDtyZXR1cm4gbXQoRWUoKS5vblJlY29yZElucHV0Rm9jdXMoaSxhKSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7''@;'; put 'put ''Z3QoZSk7Y29uc3QgYT1FZSgpLmNvbCxjPUVlKCk7cmV0dXJuIHVpKGMuY3VycmVudFJlY29yZFthLmtleV0saSl8fChjLmN1cnJlbnRSZWNvcmRbYS5rZXldPWkpLG10KGkpfSksY3QoMSxXeHQsMiwyLCJvcHRpb24iLDU1KSxpZSgpfWlmKDImbil7bGV0IGU7Y29uc3Qgcj1FZSgpLmNvbCxp''@;'; put 'put ''PUVlKCk7bGkoIm5nTW9kZWwiLGkuY3VycmVudFJlY29yZFtyLmtleV0pLGFlKCkseWUoIm5nRm9yT2YiLG51bGw9PWkuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGU9aS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoci5rZXkpKT9udWxsOmUuc291cmNlKX19ZnVuY3Rp''@;'; put 'put ''b24gWXh0KG4sdCl7aWYoMSZuJiZjdCgwLFV4dCwzLDMsImRpdiIsNTApKDEsWnh0LDIsMiwibmctdGVtcGxhdGUiLG51bGwsMixDYyksMiZuKXtjb25zdCBlPXQuY29sLHI9ZGEoMiksaT1FZSgpO3llKCJuZ0lmIixudWxsPT1pLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/bnVsbDppLmN1cnJl''@;'; put 'put ''bnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhlLmtleSxubCgyLHZ4dCkpKSgibmdJZkVsc2UiLHIpfX1sZXQgR3h0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyKXt0aGlzLnNhc1N0b3JlU2VydmljZT1lLHRoaXMuaGVscGVyU2VydmljZT1yLHRoaXMucmVjb3JkQWN0aW9uPW51''@;'; put 'put ''bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50UmVjb3JkRXJyb3JzPVtd''@;'; put 'put ''LHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IFlyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IFlyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IFlyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IFlyLHRoaXMub25SZWNvcmRFZGl0Q29uZmlybT1uZXcgWXIsdGhpcy5v''@;'; put 'put ''bk5leHRSZWNvcmQ9bmV3IFlyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgWXIsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9''@;'; put 'put ''bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShpLGEpPT4wfW5nT25Jbml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGUscil7dmFyIGk9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtyZXR1cm4gbmV3''@;'; put 'put ''IFByb21pc2UoKGEsYyk9PntpLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmV4ZWN1dGVIb3RWYWxpZGF0b3IoZSxyLG09PnthKG0pfSl9KX0pKCl9cmVjb3JkRGF0ZUNoYW5nZShlLHIpe2xldCBpPXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShyKSxhPWk/aS5kYXRlRm9y''@;'; put 'put ''bWF0OiIiO3RoaXMuY3VycmVudFJlY29yZCYmKHRoaXMuY3VycmVudFJlY29yZFtyXT1naCgpKGUpLmZvcm1hdChhKSl9Y29uZmlybVJlY29yZEVkaXQoKXt0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSYmdGhpcy5vblJlY29yZENoYW5nZS5lbWl0KHRoaXMuY3VycmVu''@;'; put 'put ''dFJlY29yZCl9Y2xvc2VSZWNvcmRFZGl0KCl7dGhpcy5vblJlY29yZEVkaXRDbG9zZS5lbWl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShlLHIpe3RoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQuZW1pdCh7Y29sTmFtZTplLGNvbDpyfSl9b25SZWNvcmRJbnB1dEZvY3VzKGUscil7dGhp''@;'; put 'put ''cy5vblJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDplLGNvbE5hbWU6cn0pfXJlY29yZElucHV0UGFzdGUoZSl7c2V0VGltZW91dCgoKT0+e2UudGFyZ2V0LnZhbHVlPWUudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xzKyQvLCIiKX0sMCl9cmVjb3JkSW5wdXRDaGFuZ2UoZSxyKXt2YXIg''@;'; put 'put ''aT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2NvbnN0IGE9aS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKHIpLGM9ZS50YXJnZXQudmFsdWU7aS5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgzMDAsKCk9PntpLnZhbGlkYXRlUmVjb3JkQ29sKGEsYykudGhlbihtPT57aS51''@;'; put 'put ''cGRhdGVWYWxpZGF0aW9uU3RhdGUocixtKSxtfHxpLnRyeUF1dG9Qb3B1bGF0ZU5vdE51bGwoZSxyLGEsYyl9KX0pfSkoKX11cGRhdGVWYWxpZGF0aW9uU3RhdGUoZSxyKXtjb25zdCBpPXRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluZGV4T2YoZSk7ciYmaT4tMT90aGlzLmN1cnJl''@;'; put 'put ''bnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UoaSwxKTohciYmaTwwJiZ0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5wdXNoKGUpfXRyeUF1dG9Qb3B1bGF0ZU5vdE51bGwoZSxyLGksYSl7aWYoIWNhZShhKXx8IXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8IXRoaXMuY3VycmVu''@;'; put 'put ''dFJlY29yZClyZXR1cm47Y29uc3QgYz10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0Tm90TnVsbERlZmF1bHRWYWx1ZShyKTt2b2lkIDAhPT1jJiYodGhpcy5jdXJyZW50UmVjb3JkW3JdPWMsZS50YXJnZXQudmFsdWU9Yyx0aGlzLnZhbGlkYXRlUmVjb3JkQ29sKGksYykudGhlbiht''@;'; put 'put ''PT57dGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUocixtKX0pKX1vbk5leHRSZWNvcmRDbGljaygpe3RoaXMub25OZXh0UmVjb3JkLmVtaXQoKX1vblByZXZpb3VzUmVjb3JkQ2xpY2soKXt0aGlzLm9uUHJldmlvdXNSZWNvcmQuZW1pdCgpfWNvcHlUb0NsaXAoZSl7bmF2aWdhdG9yLmNsaXBi''@;'; put 'put ''b2FyZC53cml0ZVRleHQoZSksdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9ZX1nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2lmKGUuZ2VuZXJhdGVkUmVjb3JkVXJsKWUuY29weVRvQ2xpcChlLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXtl''@;'; put 'put ''LmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITA7Y29uc3Qgcj1bXTtlLmhlYWRlclBrcy5mb3JFYWNoKGk9PntsZXQgYT0iQyIsYz0iIjtmb3IobGV0IG09MDttPGUuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO20rKyl7Y29uc3QgQz1lLmNlbGxWYWxpZGF0aW9uW21dO2lmKEMuZGF0YT09''@;'; put 'put ''PWkpeygibnVtZXJpYyI9PT1DLnR5cGV8fCJkYXRlIj09PUMudHlwZXx8InRpbWUiPT09Qy50eXBlKSYmKGE9Ik4iKTticmVha319Yz0iQyI9PT1hP2AnJHtlLmN1cnJlbnRSZWNvcmRbaV19J2A6ZS5jdXJyZW50UmVjb3JkW2ldLnRvU3RyaW5nKCksci5wdXNoKHtHUk9VUF9MT0dJQzoiQU5E''@;'; put 'put ''IixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOmksT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxVRTpjfSl9KSxyLmxlbmd0aD4wJiZlLmxpYmRzJiYoeWllbGQgZS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGUubGliZHMscikudGhlbihpPT57ZS5xdWVy''@;'; put 'put ''eUZpbHRlcj17aWQ6aS5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOmkucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgbT1sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrZS5xdWVyeUZpbHRlci50YWJsZSsiLyIrZS5xdWVyeUZpbHRlci5p''@;'; put 'put ''ZDtlLmNvcHlUb0NsaXAobSksZS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLGUuZmlsdGVyPSExfSkuY2F0Y2goaT0+e2Uuc3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsoZSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoZSk+LTF9dHJhY2tCeUZuKGUscil7''@;'; put 'put ''cmV0dXJuIGV9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoRTIpLFdlKEx1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJj''@;'; put 'put ''dXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIsbGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0ZXIiLGZpbHRlcjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246''@;'; put 'put ''ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJlbnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdzOiJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0''@;'; put 'put ''b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJlY29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3JkSW5wdXRGb2N1c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixv''@;'; put 'put ''blJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVjb3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0iLG9uTmV4dFJlY29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sc3RhbmRhbG9uZTohMSxkZWNsczox''@;'; put 'put ''Nyx2YXJzOjExLGNvbnN0czpbWyJhdXRvY29tcGxldGUiLCIiXSxbImNoYXJUZXh0YXJlYSIsIiJdLFsib3RoZXJfdGhhbl9zb2Z0X3NlbGVjdCIsIiJdLFsiaWQiLCJyZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxP''@;'; put 'put ''cGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZv''@;'; put 'put ''b3RlciIsInAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJjbGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLCJtci01aSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZm9jdXNhYmxlIiwzLCJjbGljayIs''@;'; put 'put ''ImRpc2FibGVkIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1j''@;'; put 'put ''b250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWzEsIm5h''@;'; put 'put ''bWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBlciIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5l''@;'; put 'put ''IGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3''@;'; put 'put ''YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBlIiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0''@;'; put 'put ''ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1dCIsMywi''@;'; put 'put ''aW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJu''@;'; put 'put ''Z1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIl0sWzEsImRhdGUtZmllbGQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJwYXN0ZSIsImlu''@;'; put 'put ''cHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJuZ01vZGVsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCIxIiwiY29scyIsImF1dG8iLDEsIm5vdC1jaGFyIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZGF0ZS1waWNrZXIiXSxbInR5cGUi''@;'; put 'put ''LCJkYXRlIiwibmFtZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwxLCJkLW5vbmUiLDMsImNsckRhdGVDaGFuZ2UiXSxbMSwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIl0sWzEsImFsZXJ0LXRleHQiXSxbMSwicHJldi1uZXh0Il0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSBsZWZ0Iiwic2l6ZSIsIjIzIl0sWyJzaGFwZSIsImFuZ2xlIHJpZ2h0Iiwic2l6ZSIsIjIzIl0sWzQsIm5nSWYi''@;'; put 'put ''LCJuZ0lmRWxzZSJdLFszLCJmb2N1c2luIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJ2YWx1ZSIsImlucHV0SWQiXSxbMywibmdWYWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXSxbImNsclNlbGVjdCIsIiIsMywiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXtpZigxJnIpe2NvbnN0IGE9SW4oKTtyZSgwLCJjbHItbW9kYWwiLDMpKDEsImgzIiw0KSxUZSgyKSxjdCgzLGJ4dCwzLDIsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''NSksaWUoKSxyZSg0LCJkaXYiLDYpLGN0KDUsd3h0LDMsMCwiZGl2Iiw3KSg2LFZ4dCwzLDUsIm5nLWNvbnRhaW5lciIsNSksaWUoKSxyZSg3LCJkaXYiLDgpLGN0KDgsQnh0LDQsNCwiY2xyLWFsZXJ0Iiw5KSg5LGp4dCw5LDMsImRpdiIsMTApLHJlKDEwLCJkaXYiKSgxMSwiYnV0dG9uIiwx''@;'; put 'put ''MSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxpLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLG10KGkuY2xvc2VSZWNvcmRFZGl0KCkpfSksVGUoMTIsIiBDYW5jZWwgIiksaWUoKSxyZSgxMywiYnV0dG9uIiwxMiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBndChhKSxtdChpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSksVGUoMTQsIiBDb25maXJtICIpLGllKCkoKSgpLGN0KDE1LFl4dCwzLDMsIm5nLXRlbXBsYXRlIixudWxsLDAsQ2MpLGllKCl9MiZyJiYoeWUoImNsck1vZGFsT3BlbiIsITApKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksYWUoMiks''@;'; put 'put ''ajMoIiAiLCJBREQiPT09aS5yZWNvcmRBY3Rpb24/IkFkZCI6IkVkaXQiLCIgcmVjb3JkIGluICIsbnVsbD09aS5saWJkcz9udWxsOmkubGliZHMuc3BsaXQoIi4iKVswXSwiLiIsbnVsbD09aS5saWJkcz9udWxsOmkubGliZHMuc3BsaXQoIi4iKVsxXSwiICIpLGFlKCkseWUoIm5nSWYiLCJF''@;'; put 'put ''RElUIj09PWkucmVjb3JkQWN0aW9uKSxhZSgyKSx5ZSgibmdJZiIsaS5hZGRSZWNvcmRMb2FkaW5nKSxhZSgpLHllKCJuZ0lmIiwhaS5hZGRSZWNvcmRMb2FkaW5nKSxhZSgyKSx5ZSgibmdJZiIsaS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGFlKCkseWUoIm5nSWYiLGku''@;'; put 'put ''Y3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxKSxhZSg0KSx5ZSgiZGlzYWJsZWQiLGkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbaHMsbWEsa2QsQWYsbzQsUmYsTGYsemwsSWYsaWwsUXMsTUEsZTRlLHhBLFVsLGh1LGMwLGNILHlB''@;'; put 'put ''LGJILFdYLFBkLGdILG12LHdILGtwZSxUX2UsUFBdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gJHh0KG4sdCl7aWYoMSZuJiYocmUoMCwicCIsMyksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCksTXIoIiAiLGUsIiAiKX19bGV0IEt4''@;'; put 'put ''dD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShlKXtpZigie2ZpbmlzaH0iPT09ZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGUpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goZSl9cmVwbGFjZUxhc3RTdGF0ZShlKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/''@;'; put 'put ''KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChlKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPWV9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVy''@;'; put 'put ''SW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJv''@;'; put 'put ''Y2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAt''@;'; put 'put ''dXBsb2FkLXN0YXRlciJdXSxzdGFuZGFsb25lOiExLGRlY2xzOjUsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsIm0tMCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwidmVydGljYWwtYWxpZ24tbWlkZGxlIl0sWzEsIm0t''@;'; put 'put ''MCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImRpdiIpLGN0KDEsJHh0LDIsMSwicCIsMCksaWUoKSxyZSgyLCJkaXYiLDEpKDMsInNwYW4iLDIpLFRlKDQsIkxvYWRpbmcuLi4iKSxpZSgpKCkpLDImciYmKGFlKCkseWUoIm5nRm9yT2YiLGkucHJvY2Vzc2VkU3RhdGVz''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbaHNdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCksWHh0PSgoKT0+e2NsYXNzIG57dHJhbnNmb3JtKGUpe3JldHVybiBlLnJlcGxhY2UoL1x8L2csIiB8ICIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4p''@;'; put 'put ''fX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPXN1KHtuYW1lOiJwa1NwYWNlU2VwYXJhdGUiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIG59KSgpLExfZT0oKCk9PntjbGFzcyBue3RyYW5zZm9ybShlLHIpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoZS50b1N0cmlu''@;'; put 'put ''ZygpLHIpfWFkZFNlcGFyYXRvcnMoZSxyPSIgIil7Y29uc3QgaT0oZSs9IiIpLnNwbGl0KCIuIik7bGV0IGE9aVswXTtjb25zdCBjPWkubGVuZ3RoPjE/Ii4iK2lbMV06IiIsbT0vKFxkKykoXGR7M30pLztmb3IoO20udGVzdChhKTspYT1hLnJlcGxhY2UobSwiJDEiK3IrIiQyIik7cmV0dXJu''@;'; put 'put ''IGErY31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1zdSh7bmFtZToidGhvdXNhbmRTZXBhcmF0b3IiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIG59KSgpO2NvbnN0IHF4dD1b''@;'; put 'put ''Imh0Il0sSnh0PVsidXBsb2FkU3RhdGVyIl0sUXh0PVsicXVlcnlGaWx0ZXIiXSxlRXQ9WyJmaWxlVXBsb2FkSW5wdXQiXSx0RXQ9KG4sdCk9Pih7bGliTmFtZTpuLHRhYmxlTmFtZTp0fSksT19lPSgpPT5bIiIsIiAiXSxuRXQ9bj0+KHtoZWFkZXJCYXJGaWx0ZXI6bn0pLHJFdD0oKT0+WyIv''@;'; put 'put ''aG9tZSJdO2Z1bmN0aW9uIGlFdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsNjQpKDEsInNwYW4iLDY1KSgyLCJsYWJlbCIsNjYpLFRlKDMsIiBCcm93c2UgIiksaWUoKSgpLHJlKDQsImlucHV0Iiw2NywzKSxrdCgiY2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gZ3Qo''@;'; put 'put ''ZSksbXQoRWUoKS5hdHRhY2hGaWxlKGkpKX0pLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSg0KSx5ZSgidXBsb2FkZXIiLGUudXBsb2FkZXIpfX1mdW5jdGlvbiBhRXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDY4KSgxLCJidXR0b24iLDY5KSxrdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkudXBsb2FkUGFyc2VkRmlsZXMoKSl9KSxUZSgyLCIgVXBsb2FkICIpLGllKCkoKX0yJm4mJihhZSgpLHllKCJkaXNhYmxlZCIsITApKX1mdW5jdGlvbiBvRXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24i''@;'; put 'put ''LDcwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLFRlKDEsIiBDbG9zZSAiKSxpZSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO3llKCJkaXNhYmxlZCIsZS5leGNlbEZpbGVQYXJzaW5nfHxlLnVwbG9hZExvYWRpbmcpfX1m''@;'; put 'put ''dW5jdGlvbiBzRXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24iLDcxKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLFRlKDEsIiBTa2lwICIpLGllKCl9fWZ1bmN0aW9uIGxFdChuLHQpezEmbiYm''@;'; put 'put ''KHJlKDAsImRpdiIsNzIpLFZ0KDEsImFwcC11cGxvYWQtc3RhdGVyIixudWxsLDQpLGllKCkpfWZ1bmN0aW9uIGNFdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImFwcC1lZGl0LXJlY29yZCIsNzMpLGt0KCJvblJlY29yZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSks''@;'; put 'put ''bXQoRWUoKS5jb25maXJtUmVjb3JkRWRpdCgpKX0pKCJvblJlY29yZElucHV0Rm9jdXNlZCIsZnVuY3Rpb24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKCkub25SZWNvcmRJbnB1dEZvY3VzKGkpKX0pKCJvblJlY29yZEVkaXRDbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5j''@;'; put 'put ''bG9zZVJlY29yZEVkaXQoKSl9KSgib25OZXh0UmVjb3JkIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLm9uTmV4dFJlY29yZCgpKX0pKCJvblByZXZpb3VzUmVjb3JkIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLm9uUHJldmlvdXNSZWNvcmQoKSl9KSxpZSgpfWlm''@;'; put 'put ''KDImbil7Y29uc3QgZT1FZSgpO3llKCJjdXJyZW50UmVjb3JkIixlLmN1cnJlbnRFZGl0UmVjb3JkKSgicmVjb3JkQWN0aW9uIixlLnJlY29yZEFjdGlvbikoImxpYmRzIixlLmxpYmRzKSgicXVlcnlGaWx0ZXIiLGUucXVlcnlGaWx0ZXIpKCJmaWx0ZXIiLGUuZmlsdGVyKSgic3VibWl0TG9h''@;'; put 'put ''ZGluZyIsZS5zdWJtaXRMb2FkaW5nKSgiaGVhZGVyUGtzIixlLmhlYWRlclBrcykoImNlbGxWYWxpZGF0aW9uIixlLmNlbGxWYWxpZGF0aW9uKSgiY3VycmVudFJlY29yZEluZGV4IixlLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpKCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGUuY3VycmVudEVk''@;'; put 'put ''aXRSZWNvcmRMb2FkaW5ncykoImN1cnJlbnRSZWNvcmRFcnJvcnMiLGUuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMpKCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIixlLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yKX19ZnVuY3Rpb24gdUV0KG4sdCl7MSZuJiYocmUoMCwiZGl2Iiw3NCksVnQo''@;'; put 'put ''MSwicHJvZ3Jlc3MiKSxpZSgpKX1mdW5jdGlvbiBkRXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDc1KSgxLCJzcGFuIiw3NiksVnQoMiwiY2xyLWljb24iLDc3KSxyZSgzLCJzcGFuIiw3OCksVGUoNCwiQmFjayB0byB0YWJsZSBzZWxlY3Rpb24iKSxpZSgpKCkscmUo''@;'; put 'put ''NSwic3BhbiIsNzkpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS52aWV3Ym94TWFuYWdlcigpKX0pLFZ0KDYsImNsci1pY29uIiw4MCkscmUoNywic3BhbiIsNzgpLFRlKDgsIlZpZXdib3hlcyIpLGllKCkoKSgpfTImbiYmKGFlKCkseWUoInJvdXRlckxpbmsi''@;'; put 'put ''LG5sKDEsckV0KSkpfWZ1bmN0aW9uIGhFdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDg2KX1mdW5jdGlvbiBmRXQobix0KXtpZigxJm4mJihyZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKCksTXIoIiAiLGUuZHNOb3Rl''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIHBFdChuLHQpezEmbiYmKHJpKDApLGN0KDEsZkV0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLGlpKCkpfWZ1bmN0aW9uIGdFdChuLHQpe2lmKDEmbiYmKHJpKDApLFRlKDEpLGhsKDIsInRob3VzYW5kU2VwYXJhdG9yIiksaWkoKSksMiZuKXtjb25zdCBl''@;'; put 'put ''PUVlKDMpO2FlKCksc1AoIiAoIixJOSgyLDQsZS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09ZS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93cyIsIiwgIixlLmNvbHMubGVuZ3RoLCIiLDE9PT1lLmNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBt''@;'; put 'put ''RXQobix0KXsxJm4mJihyaSgwKSxUZSgxLCIgKDAgcm93cykgIiksaWkoKSl9ZnVuY3Rpb24gdkV0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxnRXQsMyw3LCJuZy1jb250YWluZXIiLDM5KSgyLG1FdCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgyKTth''@;'; put 'put ''ZSgpLHllKCJuZ0lmIiwhZS56ZXJvRmlsdGVyUm93cyksYWUoKSx5ZSgibmdJZiIsZS56ZXJvRmlsdGVyUm93cyl9fWZ1bmN0aW9uIHlFdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImg0Iiw4MSkoMSwiY2xyLXRvb2x0aXAiKSgyLCJjbHItaWNvbiIsODIpLGt0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5kYXRhc2V0SW5mbz0hMCl9KSxpZSgpLGN0KDMsaEV0LDEsMCwiY2xyLWljb24iLDgzKSxyZSg0LCJzcGFuIiw4NCksVGUoNSkscmUoNiwiYSIsODUpLFRlKDcpLGllKCkoKSxjdCg4LHBFdCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLGll''@;'; put 'put ''KCksY3QoOSx2RXQsMywyLCJuZy1jb250YWluZXIiLDM5KSxpZSgpfWlmKDImbil7Y29uc3QgZT10Lm5nVmFyLHI9RWUoKTthZSgzKSx5ZSgibmdJZiIsZS50YWJsZU5hbWUuaW5jbHVkZXMoIi1GQyIpKSxhZSgyKSxNcigiICIsZS5saWJOYW1lLCIuIiksYWUoKSx5ZSgicm91dGVyTGluayIs''@;'; put 'put ''Ii92aWV3L2RhdGEvIityLmxpYmRzKSxhZSgpLHZyKGUudGFibGVOYW1lLnJlcGxhY2UoIi1GQyIsIiIpKSxhZSgpLHllKCJuZ0lmIixyLmRzTm90ZSYmci5kc05vdGUubGVuZ3RoPjApLGFlKCkseWUoIm5nSWYiLHIuZGF0YVNvdXJjZSl9fWZ1bmN0aW9uIF9FdChuLHQpe2lmKDEmbil7Y29u''@;'; put 'put ''c3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsOTUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykub25TaG93VXBsb2FkTW9kYWwoKSl9KSxWdCgxLCJjbHItaWNvbiIsOTYpLHJlKDIsInNwYW4iLDc4KSxUZSgzLCJVcGxvYWQiKSxpZSgpKCl9fWZ1bmN0aW9uIGJF''@;'; put 'put ''dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImJ1dHRvbiIsOTApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikub3BlblFiKCkpfSksVnQoMiwiY2xyLWljb24iLDkxKSxyZSgzLCJzcGFuIiw3OCksVGUoNCwiRmlsdGVyIiksaWUoKSgp''@;'; put 'put ''LHJlKDUsImJ1dHRvbiIsOTIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuZWRpdFRhYmxlKCkpfSksVnQoNiwiY2xyLWljb24iLDkzKSxyZSg3LCJzcGFuIiw3OCksVGUoOCwiRWRpdCIpLGllKCkoKSxjdCg5LF9FdCw0LDAsImJ1dHRvbiIsOTQpLGlpKCl9''@;'; put 'put ''aWYoMiZuKXtjb25zdCBlPUVlKDIpO2FlKDkpLHllKCJuZ0lmIiwhZS5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyl9fWZ1bmN0aW9uIHdFdChuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iKSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoNCk7YWUoKSxuMCgiVG8gdW5sb2NrIG1vcmUgdGhh''@;'; put 'put ''biAiLGUubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1lLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gQ0V0KG4sdCl7''@;'; put 'put ''aWYoMSZuJiYocmUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODgpLGN0KDEsd0V0LDIsMiwic3BhbiIsMzkpLGllKCkpLDImbil7Y29uc3QgZT1FZSgzKTthZSgpLHllKCJuZ0lmIixlLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIFNFdChuLHQpe2lmKDEmbil7Y29u''@;'; put 'put ''c3QgZT1JbigpO3JpKDApLHJlKDEsImJ1dHRvbiIsOTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuY2FuY2VsRWRpdCgpKX0pLFZ0KDIsImNsci1pY29uIiw5OCkscmUoMywic3BhbiIpLFRlKDQsIkNhbmNlbCIpLGllKCkoKSxyZSg1LCJjbHItdG9vbHRp''@;'; put 'put ''cCIpKDYsImJ1dHRvbiIsOTkpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVybiBtdChpLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjppLmFkZFJvdygpKX0pLFZ0KDcsImNsci1pY29uIiwxMDApLFRlKDgsIkFkZCBSb3cgIiksaWUoKSxjdCg5''@;'; put 'put ''LENFdCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxpZSgpLHJlKDEwLCJidXR0b24iLDQ0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLmNoZWNrU2F2ZSgpKX0pLFZ0KDExLCJjbHItaWNvbiIsMTAxKSxUZSgxMiwiU3VibWl0ICIpLGllKCksaWko''@;'; put 'put ''KX1pZigyJm4pe2NvbnN0IGU9RWUoMik7YWUoNiksYnIoImRjLWxvY2tlZC1jb250cm9sIixlLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdykseWUoImNsckxvYWRpbmciLGUuYWRkaW5nTmV3Um93KX19ZnVuY3Rpb24gTUV0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYnV0''@;'; put 'put ''dG9uIiwxMDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSxWdCgxLCJjbHItaWNvbiIsOTMpLHJlKDIsInNwYW4iKSxUZSgzLCJFZGl0IiksaWUoKSgpfX1mdW5jdGlvbiB4RXQobix0KXtpZigxJm4pe2NvbnN0''@;'; put 'put ''IGU9SW4oKTtyaSgwKSxyZSgxLCJidXR0b24iLDEwMiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5kaXNjYXJkU291cmNlRmlsZT0hMCl9KSxWdCgyLCJjbHItaWNvbiIsOTgpLHJlKDMsInNwYW4iKSxUZSg0LCJEaXNjYXJkIGZpbGUiKSxpZSgpKCksY3Qo''@;'; put 'put ''NSxNRXQsNCwwLCJidXR0b24iLDEwMykscmUoNiwiYnV0dG9uIiwxMDQpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuc3VibWl0RXhjZWwoKSl9KSxWdCg3LCJjbHItaWNvbiIsMTAxKSxUZSg4LCIgU3VibWl0ICIpLGllKCksaWkoKX1pZigyJm4pe2NvbnN0''@;'; put 'put ''IGU9RWUoMik7YWUoNSkseWUoIm5nSWYiLGUuaG90VGFibGUucmVhZE9ubHkpLGFlKCkseWUoImNsckxvYWRpbmciLGUudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIEVFdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsODkpLGN0KDEsYkV0LDEwLDEsIm5nLWNvbnRhaW5lciIsMzkpKDIsU0V0''@;'; put 'put ''LDEzLDMsIm5nLWNvbnRhaW5lciIsMzkpKDMseEV0LDksMiwibmctY29udGFpbmVyIiwzOSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsZS5ob3RUYWJsZS5yZWFkT25seSYmIWUudXBsb2FkUHJldmlldyksYWUoKSx5ZSgibmdJZiIsIWUuaG90VGFibGUucmVhZE9u''@;'; put 'put ''bHkmJiFlLnVwbG9hZFByZXZpZXcpLGFlKCkseWUoIm5nSWYiLGUudXBsb2FkUHJldmlldyl9fWZ1bmN0aW9uIFRFdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMTA2KSgxLCJzcGFuIiksVGUoMiwiRklMVEVSIDogIikscmUoMywiYiIpLFRlKDQpLGllKCkoKSgpKSwyJm4pe2NvbnN0IGU9''@;'; put 'put ''RWUoKTthZSg0KSx2cihlLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIEFFdChuLHQpezEmbiYmKHJpKDApLHJlKDEsInNwYW4iLDEwOSksVGUoMiwiIExvYWRpbmcuLi4gIiksaWUoKSxyZSgzLCJkaXYiLDExMCkoNCwicCIsMTExKSxUZSg1LCJMb2FkaW5nIHRhYmxlIiksaWUoKSgpLGlpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIGtFdChuLHQpezEmbiYmKHJpKDApLHJlKDEsInNwYW4iKSxWdCgyLCJjbHItaWNvbiIsMTEyKSxpZSgpLHJlKDMsImRpdiIsMTEwKSg0LCJwIiwxMTEpLFRlKDUsIkxvYWRpbmcgdGFibGUgZXJyb3IiKSxpZSgpKCksaWkoKSl9ZnVuY3Rpb24gREV0KG4sdCl7aWYoMSZuJiYocmUo''@;'; put 'put ''MCwiZGl2IiwxMDcpKDEsImRpdiIsMTA4KSxjdCgyLEFFdCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpKDMsa0V0LDYsMCwibmctY29udGFpbmVyIiwzOSksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgyKSx5ZSgibmdJZiIsIWUuZ2V0ZGF0YUVycm9yKSxhZSgpLHllKCJuZ0lmIixlLmdl''@;'; put 'put ''dGRhdGFFcnJvcil9fWZ1bmN0aW9uIElFdChuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iKSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSxuMCgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGUubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1l''@;'; put 'put ''LmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gUkV0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE1KSxjdCgxLElFdCwyLDIs''@;'; put 'put ''InNwYW4iLDM5KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoKSx5ZSgibmdJZiIsZS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBMRXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTEzKSxrdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpO3JldHVybiBtdChpLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjppLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkpfSksVnQoMiwiY2xyLWljb24iLDEwMCksVGUoMywiIEFkZCBSZWNvcmQgIiksaWUoKSxjdCg0LFJFdCwyLDEs''@;'; put 'put ''ImNsci10b29sdGlwLWNvbnRlbnQiLDExNCksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSgpLGJyKCJkYy1sb2NrZWQtY29udHJvbCIsZS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBPRXQobix0KXtpZigxJm4mJihyZSgwLCJwIiwxMTYpLFRlKDEpLFZ0KDIs''@;'; put 'put ''ImNvbnRhY3QtbGluayIpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCksTXIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGUubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBQRXQobix0KXtpZigxJm4mJihyZSgw''@;'; put 'put ''LCJzcGFuIiwxMjgpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLG4wKCJPbmx5ICIsZS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiAiLDE9PT1lLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD8icm93Ijoicm93cyIsIiB3aWxs''@;'; put 'put ''IGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEZFdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMTI5KSgxLCJkaXYiLDEzMCkoMiwibGFiZWwiLDEzMSksVGUo''@;'; put 'put ''MywiTWVzc2FnZSIpLGllKCkscmUoNCwidGV4dGFyZWEiLDEzMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMik7cmV0dXJuIHVpKGEubWVzc2FnZSxpKXx8KGEubWVzc2FnZT1pKSxtdChpKX0pLGllKCkoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgy''@;'; put 'put ''KTthZSg0KSxsaSgibmdNb2RlbCIsZS5tZXNzYWdlKSx5ZSgiZGlzYWJsZWQiLCFlLnZhbGlkYXRpb25Eb25lKSgidmFsdWUiLGUudmFsaWRhdGlvbkRvbmU/IiI6IlBsZWFzZSB3YWl0IHdoaWxlIHdlIHZhbGlkYXRlICIrZS5jb2xzLmxlbmd0aCplLm1vZGlmZWRSb3dzSW5kZXhlcy5sZW5n''@;'; put 'put ''dGgrIiBjZWxscy4iKX19ZnVuY3Rpb24gSEV0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IiwxMTcpKDEsImRpdiIsMTE4KSgyLCJkaXYiLDExOSkoMywiZGl2IiwxMjApKDQsImJ1dHRvbiIsMTIxKSxWdCg1LCJjbHItaWNvbiIsMTIyKSxpZSgpLHJlKDYsImgzIiw4KSxU''@;'; put 'put ''ZSg3KSxpZSgpKCkscmUoOCwiZGl2Iiw5KSxjdCg5LFBFdCwyLDIsInNwYW4iLDEyMykoMTAsRkV0LDUsMywiZGl2IiwxMjQpLGllKCkscmUoMTEsImRpdiIsMTI1KSgxMiwiYnV0dG9uIiwxMjYpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCk7cmV0dXJuIG10KGku''@;'; put 'put ''c2F2ZVRhYmxlKGkuaG90VGFibGUuZGF0YSkpfSksVGUoMTMsIiBTdWJtaXQgIiksaWUoKSxyZSgxNCwiYnV0dG9uIiwxMjcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCk7cmV0dXJuIGkuY2FuY2VsU3VibWl0KCksaS5zdWJtaXQ9ITEsbXQoaS52YWxpZGF0aW9u''@;'; put 'put ''RG9uZT0wKX0pLFRlKDE1LCIgQ2FuY2VsICIpLGllKCkoKSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSg3KSxqMygiIFN1Ym1pdCBmb3IgQXBwcm92YWwgKCIsZS5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQsIiBhZGRlZCwgIixlLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkLCIgdXBkYXRl''@;'; put 'put ''ZCwgIixlLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksYWUoMikseWUoIm5nSWYiLGUudG90YWxSb3dzQ2hhbmdlZD5lLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCYmZS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1lLklu''@;'; put 'put ''ZmluaXR5KSxhZSgpLHllKCJuZ0lmIixlLnRhYmxlVHJ1ZSksYWUoMikseWUoImRpc2FibGVkIiwhZS52YWxpZGF0aW9uRG9uZSl9fWZ1bmN0aW9uIE5FdChuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iLDEzMyksVGUoMSksaGwoMiwicGtTcGFjZVNlcGFyYXRlIiksaWUoKSksMiZuKXtjb25z''@;'; put 'put ''dCBlPXQuJGltcGxpY2l0LHI9RWUoKTthZSgpLG4wKCIgT24gcm93ICIsZSsxLCI6ICIsUmMoMiwyLHIucGtGaWVsZHNbZV0ucmVwbGFjZSgifCIsIiIpKSwiICIpfX1mdW5jdGlvbiBWRXQobix0KXtpZigxJm4mJihyZSgwLCJwIiksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPXQuJGltcGxp''@;'; put 'put ''Y2l0O2FlKCksajMoIiAiLGUuY29sLCIoIixlLmxlbiwiKSwgIixlLnZhbCwiICIpfX1mdW5jdGlvbiBCRXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDEzNCkoMSwiZGl2IiwxMzUpKDIsImRpdiIsMTE5KSgzLCJkaXYiLDEyMCkoNCwiYnV0dG9uIiwxMjEpLFZ0KDUs''@;'; put 'put ''ImNsci1pY29uIiwxMjIpLGllKCkscmUoNiwiaDMiLDgpLFRlKDcsIkVycm9yIiksaWUoKSgpLHJlKDgsImRpdiIsOSkoOSwicCIpLFRlKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaWUoKSgpLHJlKDExLCJkaXYiLDIzKSgxMiwiYnV0dG9uIiw0NCksa3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksVGUoMTMsIiBPayAiKSxpZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIGpFdChuLHQpezEmbiYmVnQoMCwiYXBwLXF1ZXJ5IixudWxsLDUpfWZ1bmN0aW9uIHpFdChuLHQpezEmbiYmKHJlKDAsInAiLDEz''@;'; put 'put ''NiksVGUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIiksaWUoKSl9bGV0IFVqPSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuY250PTB9c3RhdGlje3RoaXMubm9uUGtDbnQ9MH1zdGF0aWN7dGhpcy5sYXN0Q2VsbD0wfXVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKXt0''@;'; put 'put ''aGlzLmhvdFRhYmxlU2V0dGluZ3M9e2NvbEhlYWRlcnM6dGhpcy5ob3RUYWJsZS5jb2xIZWFkZXJzLGNvbHVtbnM6dGhpcy5ob3RUYWJsZS5jb2x1bW5zLGhlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGUubGljZW5zZUtleSxyZWFkT25seTp0aGlz''@;'; put 'put ''LmhvdFRhYmxlLnJlYWRPbmx5LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxjb250ZXh0TWVudTohMH19Z2V0IGVtYmVkKCl7cmV0dXJuIFduLmVtYmVkfWNvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMsUCxZLEope3RoaXMubGljZW5jZVNlcnZpY2U9ZSx0aGlzLmV2ZW50U2Vy''@;'; put 'put ''dmljZT1yLHRoaXMubG9nZ2VyU2VydmljZT1pLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWMsdGhpcy5yb3V0ZXI9bSx0aGlzLnJvdXRlPUMsdGhpcy5zYXNTZXJ2aWNlPVAsdGhpcy5jZGY9WSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZT1KLHRoaXMudXBsb2Fk''@;'; put 'put ''U3RhdGVyQ29tcExpc3Q9bmV3IEhnLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgSGcsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgSGcsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9LHRo''@;'; put 'put ''aXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlU2V0dGluZ3M9e30sdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGhp''@;'; put 'put ''ZGRlbjohMCxjb2x1bW5zOltdLGhlaWdodDoiY2FsYygxMDB2aCAtIDE2MHB4KSIsbGljZW5zZUtleTp2b2lkIDAscmVhZE9ubHk6ITAsY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6''@;'; put 'put ''e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7Y29uc3QgQWU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoIUFlKXJldHVybiExO2NvbnN0IEhlPUFlWzBdO3JldHVybiBIZS5mcm9tLnJvdyE9PUhlLnRvLnJvd30sY2FsbGJhY2s6KGZlLEFlLEhlKT0+e2NvbnN0IFhlPUFl''@;'; put 'put ''WzBdO1hlLnN0YXJ0LnJvdz09PVhlLmVuZC5yb3cmJnRoaXMuZWRpdFJlY29yZChudWxsLFhlLnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUiLGNhbGxiYWNrOihmZSxBZSxIZSk9Pnt0aGlzLmluc2VydFJvd0F0UG9zaXRpb24oQWVbMF0uc3RhcnQucm93''@;'; put 'put ''KX19LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyIsY2FsbGJhY2s6KGZlLEFlLEhlKT0+e3RoaXMuaW5zZXJ0Um93QXRQb3NpdGlvbihBZVswXS5zdGFydC5yb3crMSl9fSxyZW1vdmVfcm93OntuYW1lOiJJZ25vcmUgcm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0IGhl''@;'; put 'put ''YWRlcnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJzIn0sY29weV9jb2x1bW5faGVhZGVyc19vbmx5OntuYW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25hbWU6''@;'; put 'put ''IlJlZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOjAscm93c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5tb2Rp''@;'; put 'put ''ZmVkUm93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtGaWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNhdmVM''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBrTnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSExLHRo''@;'; put 'put ''aXMucGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlzLnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0hMSx0aGlzLmV4Y2VlZENlbGxzPVtdLHRoaXMudXBsb2FkZXI9bmV3IGFhZSx0aGlzLnVw''@;'; put 'put ''bG9hZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5kYXRhPVtdLHRoaXMuaGVhZGVyQXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9LHRo''@;'; put 'put ''aXMuaGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Bab25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVIZWFk''@;'; put 'put ''ZXJzPVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVsZXM9W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgdXIsdGhp''@;'; put 'put ''cy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3VyY2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVkaXRNb2RhbD0hMSx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVkaXRS''@;'; put 'put ''ZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1u''@;'; put 'put ''dWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0ZGF0YUVycm9yPSExLHRoaXMuemVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZpbGVE''@;'; put 'put ''cmFnT3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRVhUUkFfQ09MX05BTUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9UWVBF''@;'; put 'put ''OjMsUkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRElTUExBWV9WQUxVRToxLFJBV19WQUxVRToyfSx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXA9''@;'; put 'put ''W10sdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy50aW1lc0NsaWNrZWQ9MCxsYWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0mJnA4LnJlZ2lzdGVyTGFuZ3VhZ2UobGFlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKSx0aGlzLnBh''@;'; put 'put ''cnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRp''@;'; put 'put ''dFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoZSl7ZSYmKHRoaXMucmVzdHJpY3Rpb25z''@;'; put 'put ''PXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5lfSksdGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cm''@;'; put 'put ''JihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1l''@;'; put 'put ''bnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291''@;'; put 'put ''cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2Rh''@;'; put 'put ''bCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlv''@;'; put 'put ''biIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVkIHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2FkTW9kYWw9ITApfWZpbGVPdmVyQmFzZShlKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9''@;'; put 'put ''ZX1hdHRhY2hGaWxlKGUscj0hMSl7dmFyIGk9dGhpcztjb25zdCBhPXI/ZVswXTplLnRhcmdldC5maWxlc1swXTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IkxvYWRpbmciLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMCx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMuZmlsZW5hbWU9YS5uYW1l''@;'; put 'put ''LHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmEsdXBsb2FkZXI6dGhpcy51cGxvYWRlcixkY1ZhbGlkYXRvcjp0aGlzLmRjVmFsaWRhdG9yLGhlYWRlclBrczp0aGlzLmhlYWRlclBrcyxoZWFkZXJBcnJheTp0aGlzLmhlYWRlckFycmF5LGhlYWRlclNob3c6''@;'; put 'put ''dGhpcy5oZWFkZXJTaG93LHRpbWVIZWFkZXJzOnRoaXMudGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6dGhpcy5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6dGhpcy5kYXRlVGltZUhlYWRlcnMseGxSdWxlczp0aGlzLnhsUnVsZXMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ30sYz0+e3RoaXMu''@;'; put 'put ''YXBwZW5kVXBsb2FkU3RhdGUoYyl9LGM9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJUYWJsZSBGb3VuZCIsYyl9KS50aGVuKGZ1bmN0aW9uKCl7dmFyIGM9WihmdW5jdGlvbioobSl7bSYmKGkuZXhjZWxGaWxlUmVhZHk9ITAsaS51cGxvYWRlcj1tLnVwbG9hZGVyLG0uZGF0''@;'; put 'put ''YSYmbS5oZWFkZXJTaG93PyhpLmRhdGE9bS5kYXRhLGkuaGVhZGVyU2hvdz1tLmhlYWRlclNob3csaS5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCkpOnlpZWxkIGkudXBsb2FkUGFyc2VkRmlsZXMoKSl9KTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGMuYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''fX0oKSkuY2F0Y2goYz0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsYyxudWxsKSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsc2V0VGltZW91dCgoKT0+e3RoaXMuZmlsZW5hbWU9IiJ9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmV4''@;'; put 'put ''Y2VsRmlsZVBhcnNpbmc9ITF9KX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMudXBsb2FkUGFyc2VkRmlsZXMoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXVwbG9hZFBhcnNlZEZpbGVzKCl7dmFyIGU9dGhpczty''@;'; put 'put ''ZXR1cm4gWihmdW5jdGlvbiooKXtpZihlLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIGUuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGUudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT1lLmR1cGxpY2F0ZVBrSW5k''@;'; put 'put ''ZXhlcy5sZW5ndGgpcmV0dXJuIGUucGtEdXBzPSEwLHZvaWQoZS5zdWJtaXQ9ITEpO2UucGtEdXBzPSExLGUudXBsb2FkTG9hZGluZz0hMDtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIGUudXBsb2FkZXIucXVldWUpci5wdXNoKHtmaWxlOmksZmlsZU5hbWU6aS5uYW1lfSk7eWllbGQgZS5z''@;'; put 'put ''YXNTZXJ2aWNlLnVwbG9hZEZpbGUoZS51cGxvYWRVcmwscix7dGFibGU6ZS5saWJkc30pLnRoZW4oaT0+e2lmKHR5cGVvZiBpLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGkuYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcz4idSIpcmV0dXJuO3tlLnVwbG9hZExv''@;'; put 'put ''YWRpbmc9ITE7Y29uc3QgYT1pLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF07ZS5zdWNjZXNzRW5hYmxlPSEwLGUudGFibGVJZD1hLkRTSUQsZS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrZS50YWJsZUlkKX19ZWxzZXtjb25zdCBhPWkuYWRhcHRlclJlc3BvbnNlLGM9YS5z''@;'; put 'put ''YXNqc0Fib3J0WzBdLk1TRyxtPWEuc2FzanNBYm9ydFswXS5NQUM7ZS51cGxvYWRMb2FkaW5nPSExLGUuZmlsZW5hbWU9IiIsZS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGUuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksZS51''@;'; put 'put ''cGxvYWRlci5xdWV1ZT1bXSxlLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixjLHtTWVNXQVJOSU5HVEVYVDphLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDphLlNZU0VSUk9SVEVYVCxNQUM6bX0pfX0saT0+e2UudXBsb2FkTG9hZGluZz0hMSxlLmZpbGVVcGxvYWRJbnB1dENv''@;'; put 'put ''bXBMaXN0LmZpcnN0JiYoZS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxlLnVwbG9hZGVyLnF1ZXVlPVtdLGUuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLGkuYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1n''@;'; put 'put ''ZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IGU9W107dGhpcy5k''@;'; put 'put ''YXRhLm1hcChpPT57Y29uc3QgYT17fTt0aGlzLmhlYWRlclNob3cubWFwKChjLG0pPT57YVtjXT1pW21dfSksYS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChhLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxlLnB1c2goYSl9KSx0aGlzLmRhdGFTb3VyY2VV''@;'; put 'put ''bmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1lLHRoaXMuaG90VGFibGUuZGF0YT1lO2NvbnN0IHI9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixyLnVwZGF0''@;'; put 'put ''ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLHIucmVuZGVyKCksdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksci52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3''@;'; put 'put ''PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5nRXhjZWwoZSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2Vk''@;'; put 'put ''fSksZSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEs''@;'; put 'put ''dGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZlZD0i''@;'; put 'put ''Iil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShlLHI9ITEpe3RoaXMuY2RmLmRldGVjdENoYW5n''@;'; put 'put ''ZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0JiYocj90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoZSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShlKSl9aXNDb2xQayhlKXtyZXR1cm4gdGhpcy5o''@;'; put 'put ''ZWFkZXJQa3MuaW5kZXhPZihlKT4tMX1pc1JlYWRvbmx5Q29sKGUpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGUpPy5yZWFkT25seX1pc0NvbEhlYWRlcihlKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGUudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnko''@;'; put 'put ''KXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtlLnN1Ym1pdExvYWRpbmc9ITA7bGV0IHI9W107Y29uc3QgaT1bXTtpZih0eXBlb2YgZS5jbGF1c2VzPiJ1IilyZXR1cm4gZS5udWxsVmFyaWFi''@;'; put 'put ''bGVzPSEwLHZvaWQoZS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgYT1lLmNsYXVzZXMucXVlcnlPYmo7aWYoYVswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09V24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PVduLnJvb3RQYXJhbSkmJihXbi5lZGl0b3IuZmlsdGVyLmNsYXVz''@;'; put 'put ''ZXM9W10sV24uZWRpdG9yLmZpbHRlci5xdWVyeT1bXSxXbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgZS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrZS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7''@;'; put 'put ''YysrKXtjb25zdCBtPWFbY10uZWxlbWVudHM7cj1tLmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gbnVsbD09PUMudmFyaWFibGV9KSxyLmxlbmd0aCYmaS5wdXNoKG0pfX1pZihpLmxlbmd0aClyZXR1cm4gZS5udWxsVmFyaWFibGVzPSEwLHZvaWQoZS5zdWJtaXRMb2FkaW5nPSExKTt0cnl7''@;'; put 'put ''aWYodm9pZCAwIT09ZS5jbGF1c2VzJiZlLmxpYmRzKXtjb25zdCBhPXtncm91cExvZ2ljOmUuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07ZS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2gobT0+e2NvbnN0IEM9e2ZpbHRlckNsYXVzZXM6W119O20uZWxlbWVudHMuZm9yRWFj''@;'; put 'put ''aChQPT57Qy5maWx0ZXJDbGF1c2VzLnB1c2goZS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQKSl9KSxDLmNsYXVzZUxvZ2ljPW0uY2xhdXNlTG9naWMsYS5maWx0ZXJHcm91cHMucHVzaChlLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEMpKX0pO2NvbnN0IGM9ZS5zYXNTdG9yZVNlcnZpY2Uu''@;'; put 'put ''Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShhKTt5aWVsZCBlLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoZS5saWJkcyxjKS50aGVuKG09PntlLnF1ZXJ5RmlsdGVyPXtpZDptLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6bS5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfSxlLnJvdXRlci5uYXZp''@;'; put 'put ''Z2F0ZShbIi8iXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmUucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2UucXVlcnlGaWx0ZXIudGFibGUrIi8iK2UucXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hhbmRs''@;'; put 'put ''aW5nOiJwcmVzZXJ2ZSJ9KSksZS5maWx0ZXI9ITF9KS5jYXRjaChtPT57ZS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGEpe2UucXVlcnlFcnI9ITAsZS5zdWJtaXRMb2FkaW5nPSExLGUucXVlcnlFcnJNZXNzYWdlPWF9fSkoKX1vcGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0ZXI9''@;'; put 'put ''ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYmRzLHRoaXMuY29scykpfWVkaXRUYWJsZShlLHIpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITAp''@;'; put 'put ''O2NvbnN0IGk9dGhpcy5ob3RJbnN0YW5jZSxhPWkuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxjPWEuZ2V0U29ydENvbmZpZygpLG09QXJyYXkuaXNBcnJheShjKT9jOltjXTtzZXRUaW1lb3V0KCgpPT57ZXx8KHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksciYmdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsaS51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RU''@;'; put 'put ''YWJsZS5yZWFkT25seX0sITEpLGkucmVuZGVyKCk7Zm9yKGNvbnN0IEMgb2YgbSlhLnNvcnQoQyk7dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMTAwKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5cGVz''@;'; put 'put ''KGUpe2Zvcihjb25zdCByIG9mIGUpZm9yKGNvbnN0IGkgaW4gcil7Y29uc3QgYT10aGlzLmNvbHMuZmluZChjPT5jLk5BTUU9PT1pKTthJiYiIiE9PXJbaV0mJiJudW0iPT09YS5UWVBFJiYhYS5ERFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWEuRERUWVBFLmluY2x1ZGVzKCJEQVRFIikmJihy''@;'; put 'put ''W2ldPXBhcnNlSW50KHJbaV0pKX19Y2FuY2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy5jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKTtjb25zdCBlPXRoaXMuaG90SW5zdGFuY2Uscj1lLmdl''@;'; put 'put ''dFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaT1yLmdldFNvcnRDb25maWcoKSxhPUFycmF5LmlzQXJyYXkoaSk/aTpbaV07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlVW5j''@;'; put 'put ''aGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGUudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxlLnZhbGlkYXRlUm93cyh0aGlz''@;'; put 'put ''Lm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGNvbnN0IGMgb2YgYSlyLnNvcnQoYyk7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNr''@;'; put 'put ''ZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93''@;'; put 'put ''KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGU9dGhpcy5ob3RJbnN0YW5jZSxyPXRoaXMuY3JlYXRlRW1wdHlSb3coKTt0aGlzLmRhdGFTb3VyY2UucHVzaChyKSxlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGUuc2VsZWN0''@;'; put 'put ''Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksZS5yZW5kZXIoKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNyZWF0ZUVtcHR5Um93KCl7Y29uc3QgZT17fTtyZXR1cm4gdGhpcy5jZWxsVmFsaWRhdGlvbi5mb3JFYWNoKHI9''@;'; put 'put ''Pntjb25zdCBpPXIuZGF0YTtlW2ldPXRoaXMuaG90RGF0YVNjaGVtYS5oYXNPd25Qcm9wZXJ0eShpKT90aGlzLmhvdERhdGFTY2hlbWFbaV06IiJ9KSxlLm5vTGlua09wdGlvbj0hMCxlfWluc2VydFJvd0F0UG9zaXRpb24oZSl7Y29uc3Qgcj10aGlzLmNyZWF0ZUVtcHR5Um93KCk7dGhpcy5k''@;'; put 'put ''YXRhU291cmNlLnNwbGljZShlLDAscik7Y29uc3QgaT10aGlzLmhvdEluc3RhbmNlO2kudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksaS5yZW5kZXIoKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1jYW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3Vy''@;'; put 'put ''Y2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlO2NvbnN0IGU9dGhpcy5ob3RJbnN0YW5jZTtlLnVwZGF0ZVNldHRp''@;'; put 'put ''bmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24ocixpKXtyZXR1cm4gMD09PWk/NjA6cj41MDA/NTAwOnJ9fSwhMSksZS5zZWxlY3RDZWxsKDAsMCks''@;'; put 'put ''ZS5yZW5kZXIoKSxlLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2''@;'; put 'put ''aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IGU9MCxyPTAsaT0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgYT0wO2E8dGhpcy5kYXRhU291''@;'; put 'put ''cmNlLmxlbmd0aDthKyspe2NvbnN0IGM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pO2lmKCJZZXMiPT09Yy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaChjKSxyKys7ZWxzZXtjb25zdCBtPXRoaXMu''@;'; put 'put ''ZGF0YVNvdXJjZVVuY2hhbmdlZC5maW5kKEM9Pntmb3IoY29uc3QgUCBvZiB0aGlzLmhlYWRlclBrcylpZihDW1BdIT09Y1tQXSlyZXR1cm4hMTtyZXR1cm4hMH0pO20/SlNPTi5zdHJpbmdpZnkoYykhPT1KU09OLnN0cmluZ2lmeShtKSYmKHRoaXMuZGF0YU1vZGlmaWVkLnB1c2goYyksdGhp''@;'; put 'put ''cy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChhKSxlKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKGMpLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goYSksaSsrKX19dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6ZSxyb3dzRGVsZXRlZDpyLHJvd3NBZGRlZDppfX1jbGVhckR1''@;'; put 'put ''cGxpY2F0ZVZhbGlkYXRpb24oKXtjb25zdCBlPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IHIgb2YgdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMpZm9yKGxldCBpPTE7aTw9dGhpcy5yZWFkT25seUZpZWxkcztpKyspe2UucmVtb3ZlQ2VsbE1ldGEocixpLCJ2YWxpZCIpLGUucmVtb3ZlQ2Vs''@;'; put 'put ''bE1ldGEocixpLCJkdXBLZXkiKTtjb25zdCBhPWUuZ2V0Q2VsbE1ldGEocixpKTtpZihhLmNsYXNzTmFtZSl7bGV0IGM7Yz1BcnJheS5pc0FycmF5KGEuY2xhc3NOYW1lKT9hLmNsYXNzTmFtZS5maWx0ZXIobT0+ImRjLWludmFsaWQtY2VsbCIhPT1tKS5qb2luKCIgIik6YS5jbGFzc05hbWUu''@;'; put 'put ''cmVwbGFjZSgiZGMtaW52YWxpZC1jZWxsIiwiIikudHJpbSgpLGUuc2V0Q2VsbE1ldGEocixpLCJjbGFzc05hbWUiLGMpfX10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSxlLnJlbmRlcigpfXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBlPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5jbGVh''@;'; put 'put ''ckR1cGxpY2F0ZVZhbGlkYXRpb24oKTtjb25zdCByPXRoaXMuZGF0YVNvdXJjZTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgbT0iIjtmb3IobGV0IEM9MTtDPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtDKyspbT1tKyJ8IisocltjXVt0aGlzLmhlYWRl''@;'; put 'put ''ckNvbHVtbnNbQ11dfHwiIik7dGhpcy5wa0ZpZWxkcy5wdXNoKG0pfWNvbnN0IGk9W107aWYodGhpcy5wa0ZpZWxkcy5sZW5ndGg+MClmb3IobGV0IGM9MDtjPHRoaXMucGtGaWVsZHMubGVuZ3RoO2MrKylmb3IobGV0IG09MDttPHRoaXMucGtGaWVsZHMubGVuZ3RoO20rKyl0aGlzLnBrRmll''@;'; put 'put ''bGRzW2NdPT09dGhpcy5wa0ZpZWxkc1ttXSYmbSE9PWMmJiJ8IiE9PXRoaXMucGtGaWVsZHNbY10mJmkucHVzaChtKTtmb3IobGV0IGM9MDtjPHIubGVuZ3RoO2MrKylmb3IobGV0IG09MDttPHRoaXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7bSsrKXtjb25zdCBDPWUuZ2V0Q2VsbE1ldGEoYyxt''@;'; put 'put ''KTtDJiYoQy52YWxpZD0hMCxDLmR1cEtleT0hMSl9Zm9yKGxldCBjPTA7YzxpLmxlbmd0aDtjKyspZm9yKGxldCBtPTE7bTx0aGlzLnJlYWRPbmx5RmllbGRzKzE7bSsrKWUuc2V0Q2VsbE1ldGEoaVtjXSxtLCJ2YWxpZCIsITEpLGUuc2V0Q2VsbE1ldGEoaVtjXSxtLCJkdXBLZXkiLCEwKSxl''@;'; put 'put ''LnNldENlbGxNZXRhKGlbY10sbSwiY2xhc3NOYW1lIiwiZGMtaW52YWxpZC1jZWxsIik7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5ldyBTZXQoaS5zb3J0KCkpXSxlLnJlbmRlcigpfXJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoZT0hMSxyKXtjb25zdCBpPXRoaXMuaG90SW5zdGFu''@;'; put 'put ''Y2U7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgYz1hLnZhbHVlcy5tYXAobT0+bVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2kuYmF0Y2goKCk9Pntjb25zdCBtPWkuZ2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wpLEM9dGhpcy5k''@;'; put 'put ''Y1ZhbGlkYXRvcj8uZ2V0UnVsZShtLmRhdGF8fCIiKTtsZXQgUDtDJiYoUD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKEMpKSxQfHwoUD1bXSk7Y29uc3QgWT1bLi4ubmV3IFNldChbLi4uUCwuLi5jXSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVw''@;'; put 'put ''ZGF0ZVJ1bGUoYS5jb2wse3NvdXJjZTpZfSksaS5zZXRDZWxsTWV0YShhLnJvdyxhLmNvbCwic291cmNlIixZKSxhLnZhbHVlcy5sZW5ndGg+MCYmKGkuc2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaS5zZXRDZWxsTWV0YShhLnJvdyxhLmNvbCwi''@;'; put 'put ''ZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGkuc2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wsInN0cmljdCIsYS5zdHJpY3QpLGkuc2V0Q2VsbE1ldGEoYS5yb3csYS5jb2wsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoYS5jb2ws''@;'; put 'put ''e3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhhLHZvaWQgMCxlLHIpLGkucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRlZENl''@;'; put 'put ''bGxWYWxpZGF0aW9uVmFsdWVzKGUscixpPSExLGEpe2lmKGUpe3J8fChyPWUucm93KTtjb25zdCBtPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShlKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhlLHIsbSxpLGEpfWVsc2UgZm9yKGNvbnN0IG0gb2YgdGhpcy5jZWxs''@;'; put 'put ''VmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgQz10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUobSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMobSxtLnJvdyxDLGksYSl9fXNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhlLHIsaSxhPSExLGMpe2NvbnN0IG09dGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZSxDPVtdO2Zvcihjb25zdCBQIG9mIGkpQy5pbmRleE9mKFAuRVhUUkFfQ09MX05BTUUpPDAmJkMucHVzaChQLkVYVFJBX0NPTF9OQU1FKTtmb3IoY29uc3QgUCBvZiBDKXtjb25zdCBZPWkuZmlsdGVyKGR0PT5kdC5FWFRSQV9DT0xfTkFNRT09PVApO2xldCBKPVkubWFwKGR0PT4i''@;'; put 'put ''QyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSk7Y29uc3QgY2U9bS5wcm9wVG9Db2woUCk7dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZHQ9PmR0LnJvdz09PXImJmR0LmNvbD09PWNlKXx8dGhpcy5k''@;'; put 'put ''aXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2goe3JvdzpyLGNvbDpjZSxhY3RpdmU6ITF9KSxtLnNldENlbGxNZXRhKHIsY2UsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksbS5zZXRDZWxsTWV0YShyLGNlLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiks''@;'; put 'put ''bS5zZXRDZWxsTWV0YShyLGNlLCJzdHJpY3QiLGUuc3RyaWN0KSxtLnNldENlbGxNZXRhKHIsY2UsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoY2Use3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1''@;'; put 'put ''c3RvbSIsc3RyaWN0OmUuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IEFlPW0uZ2V0Q2VsbE1ldGEocixjZSksSGU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShBZS5kYXRhfHwiIik7bGV0IFhlO0hlJiYoWGU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShIZSkpLFhl''@;'; put 'put ''fHwoWGU9W10pLCJudW1lcmljIj09PUhlPy50eXBlPyhYZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKFhlLCJudW1iZXIiKSxKPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoSiwibnVtYmVyIikpOihYZT10aGlzLmhlbHBlclNlcnZpY2UuY29u''@;'; put 'put ''dmVydEFycmF5VmFsdWVzKFhlLCJzdHJpbmciKSxKPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoSiwic3RyaW5nIikpO2NvbnN0IHJ0PVsuLi5uZXcgU2V0KFsuLi5YZSwuLi5KXSldO2lmKG0uc2V0Q2VsbE1ldGEocixjZSwic291cmNlIixydCksdGhpcy5jdXJyZW50''@;'; put 'put ''RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShjZSx7c291cmNlOnJ0fSksYSl7aWYoYyYmYyE9PXIpcmV0dXJuO2NvbnN0IGR0PVkuZmluZChqdD0+MT09PWp0LkZPUkNFX0ZMQUcpO2R0JiZzZXRUaW1lb3V0KCgpPT57bS5zZXREYXRhQXRDZWxsKHIsY2UsIkMiPT09ZHQuRElTUExB''@;'; put 'put ''WV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD09PXImJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVtQXT0iQyI9PT1kdC5E''@;'; put 'put ''SVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoZSxyKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChyfHxlLnJvdyxlLmNvbCksYz0oZS52YWx1ZXMuZmluZChZPT5ZW3Ro''@;'; put 'put ''aXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXT09PWEpfHxbXSlbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5ESVNQTEFZX0lOREVYXSxtPWUuZXh0ZW5kZWRfdmFsdWVzPy5maWx0ZXIoWT0+WVswXT09PWMpLEM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmV4''@;'; put 'put ''dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHMpLFA9W107Zm9yKGNvbnN0IFkgb2YgbXx8W10pe2NvbnN0IEo9e307Zm9yKGNvbnN0IGNlIG9mIE9iamVjdC5rZXlzKEMpKUpbY2VdPVlbQ1tjZV1dO1AucHVzaChKKX1yZXR1cm4gUH1jaGVja1NhdmUoKXtpZih0aGlzLmdldFJvd3NTdWJtaXR0''@;'; put 'put ''aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMgdG8gc3VibWl0Iix0aGlzLmJh''@;'; put 'put ''ZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGU9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRh''@;'; put 'put ''dGFTb3VyY2UpO2ZvcihsZXQgcj0wO3I8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtyKyspZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtyXS5ub0xpbmtPcHRpb247Zm9yKDt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPjA7KXtjb25zdCByPXRoaXMuZGF0YVNvdXJjZVt0aGlzLmRhdGFTb3VyY2UubGVu''@;'; put 'put ''Z3RoLTFdO2lmKCFPYmplY3Qua2V5cyhyKS5ldmVyeShhPT4iX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIj09PWF8fCFyW2FdfHwiIj09PXJbYV0pKWJyZWFrO3RoaXMuZGF0YVNvdXJjZS5wb3AoKX1pZihlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xI''@;'; put 'put ''ZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24ocixpKXtyZXR1cm4gcj41MDA/NTAwOnJ9fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksbi5jbnQ9MCxuLm5vblBrQ250PTAsdGhp''@;'; put 'put ''cy52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5zdWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGUudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJv''@;'; put 'put ''d3NJbmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQo''@;'; put 'put ''KCk9Pntjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JtRmllbGRzXzgiKTtyJiZyLmZvY3VzKCl9LDIwMCkpfSl9c2F2ZVRhYmxlKGUpe3ZhciByPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7aWYoci5ob3RJbnN0YW5jZS5nZXREYXRhKCksZT0oZT1lLmZpbHRlcihjPT4h''@;'; put 'put ''IXIuZGF0YU1vZGlmaWVkLmZpbmQoQz0+e2Zvcihjb25zdCBQIG9mIHIuaGVhZGVyUGtzKWlmKENbUF0hPT1jW1BdKXJldHVybiExO3JldHVybiEwfSkpKS5tYXAoYz0+e2NvbnN0IG09Yy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSBjLl9fX19fREVMRVRF''@;'; put 'put ''X19USElTX19SRUNPUkRfX19fXyxjLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1tLE9iamVjdC5rZXlzKGMpLm1hcChDPT57Im51bWVyaWMiPT09ci5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShDKT8udHlwZSYmIi4iPT09Y1tDXSYmKGNbQ109bnVsbCl9KSxjfSksci5sb2dnZXJTZXJ2''@;'; put 'put ''aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQiLGUpLHIuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIHIuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLHIuY2FuY2VsU3VibWl0KCksdm9pZChyLnN1Ym1pdD0hMSk7''@;'; put 'put ''aWYoci52YWxpZGF0aW9uRG9uZT0wLHIuc2F2ZUxvYWRpbmc9ITAsbi5jbnQ8MSYmMD09PXIuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aCYmbi5ub25Qa0NudDwxKXtyLnNhdmVMb2FkaW5nPSEwLHIuZGlzYWJsZVN1Ym1pdD0hMSxyLnN1Ym1pdD0hMDtjb25zdCBjPXtBQ1RJT046IkxPQUQi''@;'; put 'put ''fTtpZihyLm1lc3NhZ2U9dl9lKHIubWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpKSxjLk1FU1NBR0U9ci5tZXNzYWdlLGMuTElCRFM9ci5saWJkcyxyLmNvbHMpe2NvbnN0IG09ZS5zbGljZSgwLHIubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCByLnNh''@;'; put 'put ''c1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShjLG0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixyLiRkYXRhRm9ybWF0cykudGhlbihQPT57aWYodHlwZW9mIFAuYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtczwidSIpcmV0dXJuIHIucm91dGVyLm5hdmlnYXRlQnlVcmwo''@;'; put 'put ''Ii9zdGFnZS8iK1AuYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgWT0iU3VibWl0IHJlcXVlc3QgZmFpbGVkIjtQJiYoWSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIFA/UDpKU09OLnN0cmluZ2lmeShQKX1gKSxyLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgi''@;'; put 'put ''ZWRpdG9ycy9zdGFnZWRhdGEiLFksbnVsbCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChQPT57Y29uc29sZS5sb2coImVyciIsUCksbi5jbnQ9MCxuLm5vblBrQ250PTAsci5kaXNhYmxlU3VibWl0PSEwLHIuc3VibWl0PSExO2NvbnN0IFk9InN0cmluZyI9PXR5cGVvZiBQLmFkYXB0ZXJSZXNw''@;'; put 'put ''bnNlP1AuYWRhcHRlclJlc3Buc2U6SlNPTi5zdHJpbmdpZnkoUC5hZGFwdGVyUmVzcG5zZSk7cmV0dXJuIHIuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsYFN1Ym1pdCByZXF1ZXN0IGZhaWxlZFxuJHtZfWAsbnVsbCwiU3VibWl0IGVycm9yIiksITF9''@;'; put 'put ''KSlyZXR1cm59fW4uY250Pj0xPyhyLnBrTnVsbD0hMCxyLnN1Ym1pdD0hMCk6ci5zdWJtaXQ9ITEsbi5ub25Qa0NudD49MT8oci5ub1BrTnVsbD0hMCxyLnN1Ym1pdD0hMCk6ci5zdWJtaXQ9ITEsci5jYW5jZWxTdWJtaXQoKSxuLmNudD0wLG4ubm9uUGtDbnQ9MCxyLmRpc2FibGVTdWJtaXQ9''@;'; put 'put ''ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3VyY2UoZSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoZSl9Y2hlY2tJbnZhbGlkKCl7aWYoIXRoaXMuaG90VGFibGVDb21wb25lbnR8fCF0aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlKXJldHVybiExO2NvbnN0IGU9dGhp''@;'; put 'put ''cy5ob3RUYWJsZUNvbXBvbmVudC5ob3RJbnN0YW5jZS5yb290RWxlbWVudDtpZighZSlyZXR1cm4hMTtjb25zdCByPWUucXVlcnlTZWxlY3RvckFsbCgiLmh0SW52YWxpZCIpLGk9ZS5xdWVyeVNlbGVjdG9yQWxsKCIuZGMtaW52YWxpZC1jZWxsIik7cmV0dXJuIHIubGVuZ3RoPjB8fGkubGVu''@;'; put 'put ''Z3RoPjB9Z29Ub0VkaXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1jbG9zZVJlY29yZEVkaXQoZSl7dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dm9p''@;'; put 'put ''ZCAwLCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24mJiFlJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSl9Y29u''@;'; put 'put ''ZmlybVJlY29yZEVkaXQoZT0hMCl7Y29uc3Qgcj10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg7ZSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGE9Pntjb25zdCBjPXRoaXMuY3VycmVudEVkaXRSZWNvcmRbYV0sbT0ibnVtIj09PXRo''@;'; put 'put ''aXMuJGRhdGFGb3JtYXRzPy52YXJzW2FdPy50eXBlLEM9KDAsaDUuaXNTcGVjaWFsTWlzc2luZykoYyk7bSYmIWlzTmFOKGMpJiYhQyYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbYV09MSpjKX0pLHRoaXMuZGF0YVNvdXJjZVtyXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90VGFi''@;'; put 'put ''bGUuZGF0YVtyXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksZSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0''@;'; put 'put ''KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5k''@;'; put 'put ''ZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0''@;'; put 'put ''aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5h''@;'; put 'put ''ZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKGUs''@;'; put 'put ''cixpKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1yfHxyPDB8fHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lm''@;'; put 'put ''KHRoaXMucmVjb3JkQWN0aW9uPWk/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCExLGkpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRjVmFsaWRhdG9yKSxpKXRoaXMu''@;'; put 'put ''cHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KHIp''@;'; put 'put ''KTtmb3IoY29uc3QgYyBvZiBhKWlmKGMpe2NvbnN0IG09Yy5wcm9wPy50b1N0cmluZygpO2RlbGV0ZSBjLnByb3AsZGVsZXRlIGMuZGF0YSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGMuY29sLHsuLi5jLGRhdGE6bX0pfX10aGlzLmN1cnJlbnRFZGl0UmVj''@;'; put 'put ''b3JkSW5kZXg9cix0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW3JdKX19dG9nZ2xlSG90UGx1Z2luKGUscil7Y29uc3QgaT10aGlzLmhvdEluc3RhbmNlO2kuYmF0Y2goKCk9Pntjb25zdCBhPWkuZ2V0UGx1Z2luKGUp''@;'; put 'put ''O2E/KHNldFRpbWVvdXQoKCk9PntyP2EuZW5hYmxlUGx1Z2luKCk6YS5kaXNhYmxlUGx1Z2luKCl9LDEwMCksaS5yZW5kZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUgSG90IFBsdWdpbiBmYWlsZWQgLSBQbHVnaW4gbmFtZWQ6ICIrZSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHlu''@;'; put 'put ''YW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoZSxyKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGE9PmEucm93PT09ZSYmYS5jb2w9PT1yJiYhYS5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihlLHIpe2lmKHRoaXMuZHluYW1p''@;'; put 'put ''Y0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoZSxyKSlyZXR1cm47Y29uc3QgaT10aGlzLmhvdEluc3RhbmNlO2lmKGkuZ2V0Q2VsbE1ldGEoZSxyKS5yZWFkT25seSlyZXR1cm47Y29uc3QgYz1pLmdldERhdGFBdENlbGwoZSxyKSxtPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5k''@;'; put 'put ''YXRhU291cmNlW2VdKSxDPU9iamVjdC5rZXlzKG0pW3JdLFA9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKG0sW0MsIm5vTGlua09wdGlvbiJdLCExKSxZPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KEo9PkouaGFzaD09PVApO2lmKFk+LTEpe2xldCBK''@;'; put 'put ''PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbWV0udmFsdWVzLm1hcChBZT0+QWVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25zdCBjZT0oaS5nZXRDZWxsTWV0YShlLHIpLnNvdXJjZXx8W10pLmxlbmd0aDwxLGZlPSIgIiE9PWM7aS5iYXRjaCgoKT0+e2NvbnN0''@;'; put 'put ''IEFlPWkuZ2V0Q2VsbE1ldGEoZSxyKSxIZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEFlLmRhdGF8fCIiKTtsZXQgWGU7SGUmJihYZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKEhlKSksWGV8fChYZT1bXSksIm51bWVyaWMiPT09SGU/LnR5cGU/KFhlPXRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoWGUsIm51bWJlciIpLEo9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhKLCJudW1iZXIiKSk6KFhlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoWGUsInN0cmluZyIpLEo9dGhpcy5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhKLCJzdHJpbmciKSk7Y29uc3QgcnQ9Wy4uLm5ldyBTZXQoWy4uLlhlLC4uLkpdKV07aWYoaS5zZXRDZWxsTWV0YShlLHIsInNvdXJjZSIscnQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUocix7c291cmNl''@;'; put 'put ''OnJ0fSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtZXS52YWx1ZXMubGVuZ3RoPjApe2NvbnN0IGR0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbWV0uc3RyaWN0O2kuc2V0Q2VsbE1ldGEoZSxyLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGkuc2V0Q2VsbE1ldGEoZSxyLCJlZGl0''@;'; put 'put ''b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaS5zZXRDZWxsTWV0YShlLHIsInN0cmljdCIsZHQpLGkuc2V0Q2VsbE1ldGEoZSxyLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHIse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRv''@;'; put 'put ''cjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmR0LGZpbHRlcjohMX0pfXRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbWV0sZSxjZSYmZmUpLGkucmVuZGVyKCl9KX1pZihZPDApe2NvbnN0IEo9e1NBU0NvbnRyb2xU''@;'; put 'put ''YWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06Q31dLHNvdXJjZV9yb3c6W21dfSxjZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoQykuZmluZChmZT0+IlNPRlRTRUxFQ1RfSE9PSyI9PT1mZS5SVUxFX1RZUEV8fCJIQVJEU0VMRUNUX0hPT0siPT09ZmUuUlVMRV9U''@;'; put 'put ''WVBFKTtjZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmUsY29sOnIsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09Y2UuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNoOlAsY291bnQ6dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGgrMX0pLGkuc2V0Q2VsbE1l''@;'; put 'put ''dGEoZSxyLCJyZW5kZXJlciIsaVN0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MucHVzaChyKSxpLnJlbmRlcigpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIixKLHZvaWQgMCx7c3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDohMCxz''@;'; put 'put ''dXBwcmVzc0Vycm9yQWJvcnRNb2RhbDohMH0pLnRoZW4oZmU9PntpZihmZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY192YWx1ZXMubWFwKEhlPT5IZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pLmxlbmd0aD4wKXtjb25zdCBIZT10aGlzLmNlbGxWYWxpZGF0aW9uU291''@;'; put 'put ''cmNlLmZpbmRJbmRleChYZT0+WGUuaGFzaD09PVApO0hlPi0xJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtIZV09ey4uLnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbSGVdLHJvdzplLGNvbDpyLHZhbHVlczpmZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY192YWx1ZXMsZXh0ZW5kZWRf''@;'; put 'put ''dmFsdWVzOmZlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX2V4dGVuZGVkX3ZhbHVlc30pLGkuc2V0Q2VsbE1ldGEoZSxyLCJyZW5kZXJlciIsZGFlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKHIp''@;'; put 'put ''LDEpLGkuZGVzZWxlY3RDZWxsKCksaS5yZW5kZXIoKSxpLmJhdGNoKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyghMCxlKSxpLnJlbmRlcigpLGkudmFsaWRhdGVSb3dzKFtlXSl9LDEwMCl9KX1pZihpLnNldENlbGxNZXRhKGUsciwicmVuZGVy''@;'; put 'put ''ZXIiLGRhZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihyKSwxKSxpLmRlc2VsZWN0Q2VsbCgpLGkucmVuZGVyKCksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGg+dGhpcy52YWxpZGF0''@;'; put 'put ''aW9uVGFibGVMaW1pdCl7Y29uc3QgSGU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5yZWR1Y2UoKHJ0LGR0KT0+cnQuY291bnQ8ZHQuY291bnQ/cnQ6ZHQpLFhlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuaW5kZXhPZihIZSk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2Uo''@;'; put 'put ''WGUsMSl9fSkuY2F0Y2goZmU9Pntjb25zdCBBZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChIZT0+SGUuaGFzaD09PVApO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKEFlLDEpLGkuYmF0Y2goKCk9PntpLnNldENlbGxNZXRhKGUsciwicmVuZGVyZXIiLHJT''@;'; put 'put ''dCksaS5yZW5kZXIoKX0pLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YociksMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5wdXNoKHIpLHNldFRpbWVvdXQoKCk9PntpLnNldENlbGxNZXRh''@;'; put 'put ''KGUsciwicmVuZGVyZXIiLGRhZSksaS5yZW5kZXIoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLmluZGV4T2YociksMSl9LDNlMyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksdGhpcy5sb2dnZXJTZXJ2''@;'; put 'put ''aWNlLmxvZygiZ2V0ZHluYW1pY2NvbHZhbHMgZXJyb3I6IixmZSl9KSl9fWNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCl7dGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0eXBlb2YgdGhpcy5maWx0ZXJfcGs8InUiJiYxPT09dGhpcy5ob3RUYWJsZS5kYXRhLmxlbmd0aCYmW251bGwsIiJdLmluY2x1''@;'; put 'put ''ZGVzKHRoaXMuaG90VGFibGUuZGF0YVswXVt0aGlzLmhlYWRlclBrc1swXV0pJiYodGhpcy56ZXJvRmlsdGVyUm93cz0hMCl9b25SZWNvcmRJbnB1dEZvY3VzKGUpe3RoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCxlLmNvbE5hbWUpfWV4ZWN1''@;'; put 'put ''dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoZSxyLGkpe2NvbnN0IGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKHRoaXMuZGF0YVNvdXJjZVtpXSxbZSwibm9MaW5rT3B0aW9uIl0pLGM9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kKG09Pm0u''@;'; put 'put ''aGFzaD09PWEmJnI9PT1tLmNvbCk7aWYoYyYmYy5leHRlbmRlZF92YWx1ZXMmJmMuZXh0ZW5kZWRfdmFsdWVzLmxlbmd0aD4wKXtjb25zdCBtPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShjLGkpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGMsaSxtLCEwKX19ZGF0''@;'; put 'put ''YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoZSl7dm9pZCAwIT09ZS5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHtlLkxPQURfUkVGfWBdKX12aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdldCB0b3RhbFJvd3NDaGFuZ2VkKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cm93c0NoYW5nZWQucm93c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZH1zZXRDZWxsRmlsdGVyKGUpe2NvbnN0IHI9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpO2lmKCFyKXJldHVybjtjb25zdCBpPXImJnJbMF07''@;'; put 'put ''aWYoaSl7Y29uc3QgYT1pWzBdLG09aVsxXTtpZihhPT09aVsyXSYmbT09PWlbM10pe2NvbnN0IFA9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShhLG0pO1AmJlAuZmlsdGVyPT09IWUmJnRoaXMuaG90SW5zdGFuY2Uuc2V0Q2VsbE1ldGEoYSxtLCJmaWx0ZXIiLGUpfX19bmdPbkluaXQo''@;'; put 'put ''KXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2UudXBkYXRlSG90VGFibGVTZXR0aW5ncygpLGUubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShpPT57ZS5ob3RUYWJsZS5saWNlbnNlS2V5PWksZS51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl9KSxlLl9x''@;'; put 'put ''dWVyeT1lLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoaT0+e2kubGliZHM9PT1lLmxpYmRzJiYoZS53aGVyZVN0cmluZz1pLnN0cmluZyxlLmNsYXVzZXM9aS5vYmopfSk7Y29uc3Qgcj17fTt0eXBlb2YgZS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1IiYmKGUubGli''@;'; put 'put ''ZHM9ZS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGUuZmlsdGVyX3BrPWUucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkLCJlZGl0LXJlY29yZCI9PT1lLnJvdXRlLnNuYXBzaG90LnVybFswXS5wYXRoJiYoZS5yZWNvcmRBY3Rpb249dHlwZW9mIGUuZmlsdGVyX3BrPCJ1Ij8i''@;'; put 'put ''RURJVCI6IkFERCIpLHIuTElCRFM9ZS5saWJkcyx0eXBlb2YgZS5maWx0ZXJfcGs8InUiJiYoci5GSUxURVJfUks9cGFyc2VJbnQoZS5maWx0ZXJfcGspKSxyLk9VVERFU1Q9IldFQiIsZS5saWJkcyYmKFduLmVkaXRvci5saWJyYXJ5PWUubGliZHMuc3BsaXQoIi4iKVswXSxXbi5lZGl0b3Iu''@;'; put 'put ''dGFibGU9ZS5saWJkcy5zcGxpdCgiLiIpWzFdKSksZS5saWJkcyYmKGUuZ2V0ZGF0YUVycm9yPSExLHlpZWxkIGUuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKHIsIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsZS5saWJkcykudGhlbihpPT57ZS5pbml0U2V0dXAoaSl9''@;'; put 'put ''KS5jYXRjaChpPT57ZS5nZXRkYXRhRXJyb3I9ITAsZS50YWJsZVRydWU9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9LDFlMyksc2V0VGltZW91dCgoKT0+e2lmKHRoaXMuaG90VGFibGVDb21wb25lbnQmJnRo''@;'; put 'put ''aXMuaG90VGFibGVDb21wb25lbnQuaG90SW5zdGFuY2Upe2NvbnN0IGU9dGhpcy5ob3RUYWJsZUNvbXBvbmVudC5ob3RJbnN0YW5jZS5yb290RWxlbWVudDtlJiZlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIscj0+e3RoaXMudXBsb2FkUHJldmlld3x8dGhpcy5ob3RDbGlja2VkKCks''@;'; put 'put ''c2V0VGltZW91dCgoKT0+e2NvbnN0IGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtpJiZpLmNsaWNrKCl9LDEwMCl9KX19LDEwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmFyaWFPYnNlcnZlciYmKHRoaXMuYXJpYU9ic2VydmVyLmRpc2Nvbm5l''@;'; put 'put ''Y3QoKSx0aGlzLmFyaWFPYnNlcnZlcj12b2lkIDApLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwpLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWw9dm9pZCAwKX1maXhBcmlhQWNjZXNzaWJpbGl0eSgpe2NvbnN0IGU9KCk9Pntkb2N1''@;'; put 'put ''bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaHQtd3JhcHBlciwgLnd0SG9sZGVyLCBbaWRePSJodF8iXScpLmZvckVhY2goUD0+e1AucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksUC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxQLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3Vu''@;'; put 'put ''dCIpLFAucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSk7Y29uc3QgaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0idHJlZWdyaWQiXScpLGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9InByZXNlbnRhdGlvbiJdJyk7aS5mb3JFYWNo''@;'; put 'put ''KFA9PntQLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLFAucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IiksUC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY29sY291bnQiKSxQLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiKX0pLGEuZm9yRWFjaChQPT57UC5xdWVy''@;'; put 'put ''eVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdLCBbb25jbGlja10sIFtjb250ZW50ZWRpdGFibGVdIikubGVuZ3RoPjAmJlAucmVtb3ZlQXR0cmlidXRlKCJyb2xlIil9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYXJpYS1yb3dj''@;'; put 'put ''b3VudD0iLTEiXScpLmZvckVhY2goUD0+e1AucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50Iil9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJ0YWJsZSIpLmZvckVhY2goUD0+e1AuZ2V0QXR0cmlidXRlKCJyb2xlIil8fFAuc2V0QXR0cmlidXRlKCJyb2xlIiwidGFibGUiKSxQ''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3JBbGwoInRoIikuZm9yRWFjaChKPT57Si5nZXRBdHRyaWJ1dGUoInNjb3BlIil8fEouc2V0QXR0cmlidXRlKCJzY29wZSIsImNvbCIpfSl9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbY29udGVudGVk''@;'; put 'put ''aXRhYmxlXSIpLmZvckVhY2goUD0+e2lmKCFQLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpJiYhUC5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpKXtjb25zdCBZPVAudGV4dENvbnRlbnQ/LnRyaW0oKTtZJiZQLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsWSl9fSl9O2UoKSxz''@;'; put 'put ''ZXRUaW1lb3V0KGUsMTAwKSxzZXRUaW1lb3V0KGUsNTAwKSxzZXRUaW1lb3V0KGUsMWUzKSxzZXRUaW1lb3V0KGUsMmUzKSx0aGlzLmFyaWFDaGVja0ludGVydmFsfHwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD1zZXRJbnRlcnZhbChlLDNlMykpLHRoaXMuYXJpYU9ic2VydmVyfHwodGhpcy5h''@;'; put 'put ''cmlhT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2xldCBpPSExO3IuZm9yRWFjaChhPT57ImF0dHJpYnV0ZXMiPT09YS50eXBlJiYoInJvbGUiPT09YS5hdHRyaWJ1dGVOYW1lfHwiYXJpYS1yb3djb3VudCI9PT1hLmF0dHJpYnV0ZU5hbWUpJiYoaT0hMCksImNoaWxkTGlzdCI9''@;'; put 'put ''PT1hLnR5cGUmJmEuYWRkZWROb2Rlcy5mb3JFYWNoKGM9PntpZihjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2NvbnN0IG09YzsobS5oYXNBdHRyaWJ1dGUoInJvbGUiKXx8bS5oYXNBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSkmJihpPSEwKX19KX0pLGkmJnNldFRpbWVvdXQo''@;'; put 'put ''ZSw1MCl9KSx0aGlzLmFyaWFPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwLGF0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsicm9sZSIsImFyaWEtcm93Y291bnQiLCJhcmlhLWNvbGNvdW50IiwiYXJpYS1tdWx0aXNlbGVjdGFibGUi''@;'; put 'put ''XX0pKX1pbml0U2V0dXAoZSl7aWYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlLHRoaXMuZ2V0ZGF0YUVycm9yfHwhZXx8IWUuZGF0YXx8IXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuO3RoaXMuY29scz1lLmRhdGEuY29scyx0aGlzLmRzbWV0YT1l''@;'; put 'put ''LmRhdGEuZHNtZXRhLHRoaXMudmVyc2lvbnM9ZS5kYXRhLnZlcnNpb25zfHxbXTtjb25zdCByPXRoaXMuZHNtZXRhLmZpbmQoQz0+Ik5PVEVTIj09PUMuTkFNRSksaT10aGlzLmRzbWV0YS5maW5kKEM9PiJERF9MT05HREVTQyI9PT1DLk5BTUUpLGE9dGhpcy5kc21ldGEuZmluZChDPT4iRERf''@;'; put 'put ''U0hPUlRERVNDIj09PUMuTkFNRSk7dGhpcy5kc05vdGU9ciYmci5WQUxVRT9yLlZBTFVFOmkmJmkuVkFMVUU/aS5WQUxVRTphJiZhLlZBTFVFP2EuVkFMVUU6IiI7Y29uc3QgYz10aGlzLmhvdEluc3RhbmNlLG09ZS5kYXRhLmFwcHJvdmVyczt0aGlzLmNvbHMmJih0aGlzLmhlYWRlckFycmF5''@;'; put 'put ''PShuPT57Y29uc3QgdD1bXTtmb3IobGV0IGUgb2YgbikiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWUuTkFNRSYmdC5wdXNoKGUuTkFNRSk7cmV0dXJuIHR9KSh0aGlzLmNvbHMpKSxtLmZvckVhY2goQz0+e3RoaXMuYXBwcm92ZXJzLnB1c2goQy5QRVJTT05OQU1FKX0pLHRo''@;'; put 'put ''aXMudGFibGVUcnVlPSEwLHRoaXMubGliZHM9ZS5saWJkcyx0aGlzLmhvdFRhYmxlLmRhdGE9ZS5kYXRhLnNhc2RhdGEsdGhpcy5oZWFkZXJDb2x1bW5zPWUuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuaGVhZGVyUGtzPWUuZGF0YS5zYXNwYXJhbXNbMF0u''@;'; put 'put ''UEsuc3BsaXQoIiAiKSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSEhZS5kYXRhLnNhc3BhcmFtc1swXS5DTFNfRkxBRyx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnJiZ0aGlzLnNldFJlc3RyaWN0aW9ucyh7cmVzdHJpY3RBZGRSb3c6ITAscmVtb3ZlRWRpdFJlY29yZEJ1dHRv''@;'; put 'put ''bjohMCxyZW1vdmVBZGRSZWNvcmRCdXR0b246ITB9KSx0aGlzLmNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCksLTEhPT10aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJih0aGlzLmhlYWRlckNvbHVtbnNbdGhpcy5oZWFkZXJDb2x1''@;'; put 'put ''bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLHRoaXMuaGVhZGVyQXJyYXk9dGhpcy5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09ZS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJih0aGlzLmRhdGVIZWFkZXJzPWUuZGF0YS5zYXNw''@;'; put 'put ''YXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09ZS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJih0aGlzLnRpbWVIZWFkZXJzPWUuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09ZS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKHRoaXMuZGF0ZVRp''@;'; put 'put ''bWVIZWFkZXJzPWUuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksZS5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYodGhpcy54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoZS5kYXRhLnhsX3J1bGVzKSksdGhpcy5kY1ZhbGlkYXRvcj1uZXcgYl9lKGUu''@;'; put 'put ''ZGF0YS5zYXNwYXJhbXNbMF0sZS5kYXRhLiRzYXNkYXRhLHRoaXMuY29scyxlLmRhdGEuZHFydWxlcyxlLmRhdGEuZHFkYXRhKSx0aGlzLmNlbGxWYWxpZGF0aW9uPXRoaXMuZGNWYWxpZGF0b3IuZ2V0UnVsZXMoKSx0aGlzLmRhdGFTb3VyY2U9ZS5kYXRhLnNhc2RhdGEsdGhpcy4kZGF0YUZv''@;'; put 'put ''cm1hdHM9ZS5kYXRhLiRzYXNkYXRhO2ZvcihsZXQgQz0wO0M8dGhpcy5oZWFkZXJDb2x1bW5zLmxlbmd0aDtDKyspdGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25bQ10uZGF0YV09dFN0KHRoaXMuY2VsbFZhbGlkYXRpb25bQ10udHlwZSx0aGlzLmNlbGxWYWxpZGF0aW9u''@;'; put 'put ''W0NdLHRoaXMuZGNWYWxpZGF0b3I/LmdldERxRGV0YWlscygpKTt0aGlzLmNoZWNrUm93TGltaXQoKSxjLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24saGVpZ2h0OnRo''@;'; put 'put ''aXMuaG90VGFibGUuaGVpZ2h0LGZvcm11bGFzOnRoaXMuaG90VGFibGUuZm9ybXVsYXMsc3RyZXRjaEg6ImFsbCIscmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxoaWRkZW5Db2x1bW5zOntpbmRpY2F0b3JzOiEwLGNvbHVtbnM6dGhpcy5kY1ZhbGlkYXRvci5nZXRIaWRkZW5Db2x1''@;'; put 'put ''bW5zKCl9LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKEMsUCl7cmV0dXJuIDA9PT1QPzYwOkM+NTAwPzUwMDpDfSxjb3B5UGFzdGU6dGhpcy5ob3RUYWJsZS5jb3B5UGFzdGUsbWFudWFsQ29sdW1uRnJlZXplOiExLG11bHRpQ29sdW1uU29ydGluZzohMCxtYW51YWxDb2x1bW5SZXNpemU6ITAs''@;'; put 'put ''ZmlsdGVyczohMSxtYW51YWxSb3dSZXNpemU6ITAsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6NTAscm93SGVhZGVyczpDPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyNCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR8fDEv''@;'; put 'put ''MCxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJbnZhbGlkIixhdXRvV3JhcFJvdzohMSxhdXRvV3JhcENvbDohMSxiaW5kUm93c1dpdGhIZWFkZXJzOiExLGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToi''@;'; put 'put ''YWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihDLFAsWSxKLGNlLGZlKT0+e2NvbnN0IEFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgSGUsWGU9Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5z''@;'; put 'put ''dGFuY2Upe2NvbnN0IHJ0PXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sZHQ9cnQ/cnRbMF1bMV06LTEsanQ9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKGR0KTtIZT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tqdF0sSGUmJihYZT1gTEFCRUw6ICR7SGU/LmxhYmVsfTxi''@;'; put 'put ''cj5UWVBFOiAke0hlPy50eXBlfTxicj5MRU5HVEg6ICR7SGU/Lmxlbmd0aH08YnI+Rk9STUFUOiAke0hlPy5mb3JtYXR9YCl9cmV0dXJuIEFlLmlubmVySFRNTD1YZSxBZX19fX0sZGF0YVNjaGVtYTp0aGlzLmhvdERhdGFTY2hlbWEsY29udGV4dE1lbnU6dGhpcy5ob3RUYWJsZS5zZXR0aW5n''@;'; put 'put ''cy5jb250ZXh0TWVudSxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXN0b21IIixhZnRlckdldENvbEhlYWRlcjooQyxQKT0+e2NvbnN0IFk9dGhpcy5jb2x1bW5IZWFkZXJbQ10sSj1ZJiZ0aGlzLmlzQ29sUGsoWSksY2U9WSYmdGhpcy5pc1JlYWRvbmx5Q29sKFkpO0omJlAuY2xhc3NMaXN0''@;'; put 'put ''LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksY2UmJiFKJiZQLmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1DJiZQLmNsYXNzTGlzdC5hZGQoImZpcnN0Q29sdW1uSGVhZGVyU3R5bGUiKSxQLmNsYXNzTGlzdC5hZGQoV24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRl''@;'; put 'put ''ckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooQyxQLFkpPT57Y29uc3QgSj1QJiZ0aGlzLmlzUmVhZG9ubHlDb2woUCksY2U9dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMuaW5jbHVkZXMoQykmJlA+PTEmJlA8PXRoaXMucmVhZE9ubHlGaWVsZHMsZmU9WS5jbGFzc05hbWV8fCIiO2xldCBBZTtB''@;'; put 'put ''ZT1BcnJheS5pc0FycmF5KGZlKT9bLi4uZmVdOmZlLnNwbGl0KCIgIikuZmlsdGVyKEhlPT5IZS5sZW5ndGg+MCksSiYmIUFlLmluY2x1ZGVzKCJyZWFkb25seUNlbGwiKSYmQWUucHVzaCgicmVhZG9ubHlDZWxsIiksY2UmJihBZS5pbmNsdWRlcygiZGMtaW52YWxpZC1jZWxsIil8fEFlLnB1''@;'; put 'put ''c2goImRjLWludmFsaWQtY2VsbCIpLFkudmFsaWQ9ITEsWS5kdXBLZXk9ITApLEFlLmxlbmd0aD4wJiYoWS5jbGFzc05hbWU9QWUuam9pbigiICIpKX19LCExKSx0aGlzLmhvdFRhYmxlLmhpZGRlbj0hMSx0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKSx0aGlzLnF1ZXJ5''@;'; put 'put ''VGV4dD1lLmRhdGEuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHRoaXMuY29sdW1uSGVhZGVyPWUuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuY29sdW1uSGVhZGVyWzBdPSJEZWxldGU/Iix0aGlzLnJlYWRPbmx5RmllbGRzPWUuZGF0YS5zYXNwYXJhbXNb''@;'; put 'put ''MF0uUEtDTlQsYy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKEMsUCxZLEosY2UsZmUpPT57Qz09PVkmJlA9PT1KJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKEMsUCl9KSxjLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+''@;'; put 'put ''e3RoaXMuc2V0Q2VsbEZpbHRlcighMSl9KSxjLmFkZEhvb2soImJlZm9yZUtleURvd24iLCgpPT57dGhpcy5zZXRDZWxsRmlsdGVyKCEwKX0pLGMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLChDLFApPT57aWYoImVkaXQiPT09UCl7Y29uc3QgWT10aGlzLmhvdEluc3RhbmNlLEo9Q1swXVswXSxj''@;'; put 'put ''ZT1DWzBdWzFdLGZlPVkucHJvcFRvQ29sKGNlKSxBZT1ZLmdldENlbGxNZXRhKEosZmUpO0FlJiYhMT09PUFlLmZpbHRlciYmWS5zZXRDZWxsTWV0YShKLGZlLCJmaWx0ZXIiLCEwKSx0aGlzLmV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoY2UsZmUsSil9fSksYy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclJlbmRlciIsQz0+e3RoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLHRoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0pLGMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxp''@;'; put 'put ''dHkoKX0sNTApfSksYy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKEMsUCk9PntpZihDPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2NvbnN0IFk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnd0SG9sZGVyIik7c2V0VGltZW91dCgoKT0+e1kmJihZLnNjcm9sbFRvcD1ZLnNjcm9sbEhlaWdo''@;'; put 'put ''dCl9KX19KSxjLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsKEMsUCxZKT0+e2lmKCF0aGlzLmFkZGluZ05ld1JvdyYmIkNvbnRleHRNZW51Lmluc2VydF9yb3dfYWJvdmUiIT09WSYmIkNvbnRleHRNZW51Lmluc2VydF9yb3dfYmVsb3ciIT09WSlyZXR1cm4hMX0pLGMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJWYWxpZGF0ZSIsKEMsUCxZLEopPT57aWYoQ3x8IWNhZShQKSlyZXR1cm47Y29uc3QgY2U9InN0cmluZyI9PXR5cGVvZiBKP0o6Yy5jb2xUb1Byb3AoSiksZmU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0Tm90TnVsbERlZmF1bHRWYWx1ZShjZSk7dm9pZCAwIT09ZmUmJnNldFRpbWVvdXQoKCk9''@;'; put 'put ''PntjYWUoYy5nZXREYXRhQXRSb3dQcm9wKFksY2UpKSYmYy5zZXREYXRhQXRSb3dQcm9wKFksY2UsZmUsImF1dG9Qb3B1bGF0ZSIpfSwwKX0pLGMuYWRkSG9vaygiYmVmb3JlUGFzdGUiLChDLFApPT57Y29uc3QgWT1QWzBdLnN0YXJ0Q29sO0NbMF09Q1swXS5tYXAoKEosY2UpPT57Y29uc3Qg''@;'; put 'put ''ZmU9dGhpcy5jb2x1bW5IZWFkZXJbWStjZV0sQWU9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tmZV0/LnR5cGUsSGU9KDAsaDUuaXNTcGVjaWFsTWlzc2luZykoSik7cmV0dXJuIEFlJiYhaXNOYU4oSikmJiFIZSYmKEoqPTEpLEp9KX0pLGMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVS''@;'; put 'put ''b3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSxjLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09''@;'; put 'put ''dGhpcy5yZWNvcmRBY3Rpb24/KHRoaXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxlLmRhdGEucXVlcnkubGVuZ3RoPjAmJigi''@;'; put 'put ''aG9tZSI9PT1Xbi5yb290UGFyYW18fCJlZGl0b3IiPT09V24ucm9vdFBhcmFtKSYmMD09PVduLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihXbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoZS5kYXRhLnF1ZXJ5KSxXbi5lZGl0b3IuZmls''@;'; put 'put ''dGVyLmxpYmRzPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLGMucmVuZGVyKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxp''@;'; put 'put ''dHkoKX0sNTAwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShLMSksV2UoU2MpLFdlKG1oKSxXZShFMiksV2UoTHUpLFdlKHJsKSxXZShzMCksV2UoSnMpLFdlKEZzKSxXZSh4X2UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBl''@;'; put 'put ''Om4sc2VsZWN0b3JzOltbImFwcC1lZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHIsaSl7aWYoMSZyJiYoV2EoRzUsNSksV2EocXh0LDcpLFdhKEp4dCw1KSxXYShReHQsNSksV2EoZUV0LDUpKSwyJnIpe2xldCBhO2RpKGE9aGkoKSkmJihpLmhvdFRhYmxlQ29tcG9uZW50PWEuZmlyc3Qp''@;'; put 'put ''LGRpKGE9aGkoKSkmJihpLmh0PWEuZmlyc3QpLGRpKGE9aGkoKSkmJihpLnVwbG9hZFN0YXRlckNvbXBMaXN0PWEpLGRpKGE9aGkoKSkmJihpLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9YSksZGkoYT1oaSgpKSYmKGkuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9YSl9fSxob3N0QXR0cnM6WzEsImNv''@;'; put 'put ''bnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxNzcsdmFyczo3NSxjb25zdHM6W1siaHQiLCIiXSxbImhvdEluc3RhbmNlIiwiIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbInF1ZXJ5Rmls''@;'; put 'put ''dGVyIiwiIl0sWzEsImNvbnRlbnQtYXJlYSIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2Rh''@;'; put 'put ''bFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgi''@;'; put 'put ''LCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLWF1dG8iXSxbMSwiZW5jb2RpbmctYmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMCJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMg''@;'; put 'put ''ZmlsdGVyQnRuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBlZGl0QnRuIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNz''@;'; put 'put ''IiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0''@;'; put 'put ''ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdl''@;'; put 'put ''Iiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbImFwcERyYWdO''@;'; put 'put ''ZHJvcCIsIiIsMSwiY2FyZCIsImJvcmRlci0wIiwiYm94LXNoYWRvdy1ub25lLWkiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywiZmlsZURyYWdnZWRPdmVyIl0sWzEsImNhcmQtaGVhZGVy''@;'; put 'put ''IiwiY2xyLXJvdyIsImJ1dHRvbkJhciIsImhlYWRlckJhciIsImNsci1mbGV4LW1kLXJvdyIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmQiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLW1kLTMgY2xyLWNvbC1sZy00IGJhY2tC''@;'; put 'put ''dG4iLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtNSIsImNsci1jb2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImVkaXRvci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wIiw0LCJuZ1ZhciJdLFsiY2xhc3Mi''@;'; put 'put ''LCJjbHItY29sLTEyIGNsci1jb2wtbWQtNCBjbHItY29sLWxnLTQgYnRuQ3RybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJu''@;'; put 'put ''Z0NsYXNzIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJkLXRleHQiLCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJpZCIs''@;'; put 'put ''ImhvdFRhYmxlIiwxLCJlZGl0LWhvdCIsMywiZGF0YSIsInNldHRpbmdzIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3Bl''@;'; put 'put ''biJdLFsxLCJtLTAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5D''@;'; put 'put ''aGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbImNsYXNzIiwiZC1ibG9jayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFu''@;'; put 'put ''Z2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNs''@;'; put 'put ''aWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwi''@;'; put 'put ''YnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNs''@;'; put 'put ''aWNrIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2Fi''@;'; put 'put ''bGUtcGFzc3dvcmQtbWFuYWdlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwi''@;'; put 'put ''b3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4t''@;'; put 'put ''b3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFsxLCJjbHItY29sLW1kLTMiLCJlZGl0QnRuIl0sWzEsImJ0blZpZXci''@;'; put 'put ''LCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEs''@;'; put 'put ''ImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siXSxbMSwiZXhjZWwtcGFyc2luZyIsImNsci1jb2wtbWQtMTIiXSxbMywib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1Jl''@;'; put 'put ''Y29yZCIsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVu''@;'; put 'put ''dFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC0zIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRu''@;'; put 'put ''LXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJ0ZXh0Il0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1kaW1tZWQiLCJ2aWV3Ym94''@;'; put 'put ''LW9wZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiLCJzaXplIiwiMjAiXSxbMSwiZWRpdG9yLXRpdGxlIiwidGV4dC1jZW50ZXIiLCJtdC0wIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0''@;'; put 'put ''IG1ldGEgaW5mbyIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbMSwibXItMTAiLCJ2aWV3LXRhYmxl''@;'; put 'put ''IiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWzEsImNsci1j''@;'; put 'put ''b2wtMTIiLCJjbHItY29sLW1kLTQiLCJjbHItY29sLWxnLTQiLCJidG5DdHJsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG5WaWV3IiwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWJsb2NrIiwiYnRuLWRpbW1lZCIsMywiY2xpY2siXSxbInNoYXBlIiwi''@;'; put 'put ''ZmlsdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsIm5vdGUiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBpY29uLWNvbGxhcHNlIGJ0bi1zbSBi''@;'; put 'put ''dG4tc3VjY2VzcyBidG4tYmxvY2sgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlw''@;'; put 'put ''ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJj''@;'; put 'put ''bGljayIsImNsckxvYWRpbmciXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCIxNiJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tdXBsb2FkLXByZXZpZXci''@;'; put 'put ''LDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJldmlldy1zdWJtaXQi''@;'; put 'put ''LDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJoLTcwdmgiLCJk''@;'; put 'put ''LWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwxLCJlcnJvci1pY29uIl0sWyJjbHJU''@;'; put 'put ''b29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXQtNS1pIiwzLCJjbGljayJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJ0b3Atcmln''@;'; put 'put ''aHQiLCJjbHJTaXplIiwibGciXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwtbGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1o''@;'; put 'put ''ZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJjbGFzcyIsImQtYmxvY2sgdy0xMDAgdGV4dC1jZW50ZXIgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNs''@;'; put 'put ''ci1vZmZzZXQtbWQtMiBjbHItY29sLW1kLTgiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwianVzdGlmeS1jb250ZW50LWNlbnRlci1pIl0sWyJpZCIsInN1Ym1pdEJ0biIsInR5cGUiLCJzdWJtaXQiLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91''@;'; put 'put ''dGxpbmUiLCJtLTAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImlkIiwiY2FuY2VsU3VibWl0QnRuIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQtY2VudGVy''@;'; put 'put ''IiwiY29sb3ItcmVkIl0sWzEsImNsci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJdLFsxLCJ0ZXh0LWFyZWEtZnVsbC13aWR0aCJdLFsiZm9yIiwiZm9ybUZpZWxkc184IiwxLCJtYi01IiwiZC1ibG9jayJdLFsiY2xyVGV4dGFyZWEiLCIiLCJ0YWJpbmRleCIsIjAiLCJ0eXBlIiwidGV4''@;'; put 'put ''dCIsImlkIiwiZm9ybUZpZWxkc184IiwxLCJzdWJtaXQtcmVhc29uIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIiwidmFsdWUiXSxbMSwiZC1ibG9jayJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwi''@;'; put 'put ''dHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpe2lmKDEmcil7Y29uc3QgYT1JbigpO3JlKDAsImRpdiIsNikoMSwiY2xyLW1vZGFsIiw3KSxrdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChp''@;'; put 'put ''LmZpbGVPdmVyQmFzZShtKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLmF0dGFjaEZpbGUobSwhMCkpfSksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkuc2hvd1VwbG9hZE1vZGFsLG0pfHwoaS5zaG93VXBs''@;'; put 'put ''b2FkTW9kYWw9bSksbXQobSl9KSxyZSgyLCJoMyIsOCksVGUoMywiVXBsb2FkIEZpbGUiKSxpZSgpLHJlKDQsImRpdiIsOSkoNSwiZGl2IiwxMCkoNiwic3BhbiIpLFRlKDcsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksaWUoKSgpLHJlKDgsImRpdiIsMTEpKDksImRpdiIsMTIp''@;'; put 'put ''KDEwLCJkaXYiLDEzKSgxMSwiZGl2IiwxNCkoMTIsImNsci1yYWRpby1jb250YWluZXIiLDE1KSgxMywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxNCwiaW5wdXQiLDE2KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkuZW5jb2RpbmcsbSl8fChpLmVuY29k''@;'; put 'put ''aW5nPW0pLG10KG0pfSksaWUoKSxyZSgxNSwibGFiZWwiKSxUZSgxNiwiVVRGLTgiKSxpZSgpKCkscmUoMTcsImNsci1yYWRpby13cmFwcGVyIikoMTgsImlucHV0IiwxNyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLmVuY29kaW5nLG0pfHwoaS5l''@;'; put 'put ''bmNvZGluZz1tKSxtdChtKX0pLGllKCkscmUoMTksImxhYmVsIiksVGUoMjAsIldMQVRJTjEiKSxpZSgpKCkoKSgpKCksY3QoMjEsaUV0LDYsMSwiZGl2IiwxOCkoMjIsYUV0LDMsMSwiZGl2IiwxOSkscmUoMjMsImRpdiIsMTMpLGN0KDI0LG9FdCwyLDEsImJ1dHRvbiIsMjApKDI1LHNFdCwy''@;'; put 'put ''LDAsImJ1dHRvbiIsMjEpLGllKCksY3QoMjYsbEV0LDMsMCwiZGl2IiwyMiksaWUoKSgpKCksVnQoMjcsImRpdiIsMjMpLGllKCksY3QoMjgsY0V0LDEsMTIsImFwcC1lZGl0LXJlY29yZCIsMjQpLHJlKDI5LCJkaXYiLDI1LDApLGN0KDMxLHVFdCwyLDAsImRpdiIsMjYpLHJlKDMyLCJkaXYi''@;'; put 'put ''LDI3KSxrdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSkscmUoMzMsImRpdiIsMjgpLGN0KDM0LGRFdCw5LDIsImRpdiIsMjkpLHJlKDM1LCJkaXYiLDMwKSxjdCgzNix5RXQsMTAsNiwiaDQiLDMxKSxpZSgpLGN0''@;'; put 'put ''KDM3LEVFdCw0LDMsImRpdiIsMzIpKDM4LFRFdCw1LDEsImRpdiIsMzMpLGllKCkscmUoMzksImRpdiIsMzQpLGN0KDQwLERFdCw0LDIsImRpdiIsMzUpLHJlKDQxLCJkaXYiLDM2KSg0MiwiZGl2IiwzNyksVnQoNDMsImhvdC10YWJsZSIsMzgsMSksaWUoKSxyZSg0NSwiZGl2IiksY3QoNDYs''@;'; put 'put ''TEV0LDUsMiwiY2xyLXRvb2x0aXAiLDM5KSg0NyxPRXQsMywxLCJwIiw0MCksaWUoKSxjdCg0OCxIRXQsMTYsNiwiZGl2Iiw0MSkscmUoNDksImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLnN1Ym1pdExpbWl0Tm90''@;'; put 'put ''aWNlLG0pfHwoaS5zdWJtaXRMaW1pdE5vdGljZT1tKSxtdChtKX0pLHJlKDUwLCJoMyIsOCksVGUoNTEsIk5vdGljZSIpLGllKCkscmUoNTIsImRpdiIsOSkoNTMsInAiLDQzKSxUZSg1NCksaWUoKSgpLHJlKDU1LCJkaXYiLDIzKSg1NiwiYnV0dG9uIiw0NCksa3QoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBndChhKSxtdChpLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLFRlKDU3LCIgQ2FuY2VsICIpLGllKCkscmUoNTgsImJ1dHRvbiIsNDQpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksaS51cGxvYWRQYXJzZWRGaWxlcygpLG10KGkuc3VibWl0TGltaXROb3Rp''@;'; put 'put ''Y2U9ITEpfSksVGUoNTksIiBTdWJtaXQgIiksaWUoKSgpKCkscmUoNjAsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLmJhZEVkaXQsbSl8fChpLmJhZEVkaXQ9bSksbXQobSl9KSxyZSg2MSwiaDMiLDgpLFRlKDYy''@;'; put 'put ''KSxpZSgpLHJlKDYzLCJkaXYiLDkpKDY0LCJwIiksVGUoNjUpLGllKCkoKSxyZSg2NiwiZGl2IiwyMykoNjcsImJ1dHRvbiIsNDQpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5iYWRFZGl0PSExKX0pLFRlKDY4LCIgT2sgIiksaWUoKSgpKCkscmUoNjksImNsci1t''@;'; put 'put ''b2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLnBrTnVsbCxtKXx8KGkucGtOdWxsPW0pLG10KG0pfSkscmUoNzAsImgzIiw4KSxUZSg3MSwiRXJyb3IiKSxpZSgpLHJlKDcyLCJkaXYiLDkpKDczLCJwIiksVGUoNzQsIiBOdWxs''@;'; put 'put ''IHZhbHVlcyBvciBpbmNvcnJlY3QgZGF0YSB0eXBlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLGllKCkoKSxyZSg3NSwiZGl2IiwyMykoNzYsImJ1dHRvbiIsNDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksaS5wa051bGw9ITEs''@;'; put 'put ''bXQoaS5iYWRFZGl0PSExKX0pLFRlKDc3LCIgT2sgIiksaWUoKSgpKCkscmUoNzgsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLm5vUGtOdWxsLG0pfHwoaS5ub1BrTnVsbD1tKSxtdChtKX0pLHJlKDc5LCJoMyIs''@;'; put 'put ''OCksVGUoODAsIkVycm9yIiksaWUoKSxyZSg4MSwiZGl2Iiw5KSg4MiwicCIpLFRlKDgzLCJJbmNvcnJlY3QgZGF0YSB0eXBlcyBpbiBub24tUHJpbWFyeSBLZXkgY29sdW1ucyIpLGllKCkoKSxyZSg4NCwiZGl2IiwyMykoODUsImJ1dHRvbiIsNDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZ3QoYSksaS5ub1BrTnVsbD0hMSxtdChpLmJhZEVkaXQ9ITEpfSksVGUoODYsIiBPayAiKSxpZSgpKCkoKSxyZSg4NywiY2xyLW1vZGFsIiw0NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkucGtEdXBzLG0pfHwoaS5wa0R1cHM9''@;'; put 'put ''bSksbXQobSl9KSxyZSg4OCwiaDMiLDgpLFRlKDg5LCJFcnJvciIpLGllKCkscmUoOTAsImRpdiIsOSkoOTEsInAiKSxUZSg5MiwiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxpZSgpLHJlKDkzLCJwIiksVGUoOTQsIkR1''@;'; put 'put ''cGxpY2F0ZXMgZm91bmQ6IiksaWUoKSxjdCg5NSxORXQsMyw0LCJzcGFuIiw0NyksaWUoKSxyZSg5NiwiZGl2IiwyMykoOTcsImJ1dHRvbiIsNDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5wa0R1cHM9ITEpfSksVGUoOTgsIiBPayAiKSxpZSgpKCkoKSxyZSg5''@;'; put 'put ''OSwiY2xyLW1vZGFsIiw0MiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkudG9vTG9uZyxtKXx8KGkudG9vTG9uZz1tKSxtdChtKX0pLHJlKDEwMCwiaDMiLDgpLFRlKDEwMSwiRXJyb3IiKSxpZSgpLHJlKDEwMiwiZGl2Iiw5KSgxMDMsInAi''@;'; put 'put ''KSxUZSgxMDQsIiBUaGUgZm9sbG93aW5nIGNvbHVtbnMgaGF2ZSB2YWx1ZXMgdGhhdCBleGNlZWQgbGVuZ3RoIGxpbWl0czogIiksaWUoKSxjdCgxMDUsVkV0LDIsMywicCIsNDgpLGllKCkscmUoMTA2LCJkaXYiLDIzKSgxMDcsImJ1dHRvbiIsNDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZ3QoYSksaS50b29Mb25nPSExLG10KGkuY2xlYW5FeGNlZWQoKSl9KSxUZSgxMDgsIiBPayAiKSxpZSgpKCkoKSgpKCkoKSgpKCksY3QoMTA5LEJFdCwxNCwwLCJkaXYiLDQ5KSxyZSgxMTAsImNsci1tb2RhbCIsNTApLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0p''@;'; put 'put ''e3JldHVybiBndChhKSx1aShpLmZpbHRlcixtKXx8KGkuZmlsdGVyPW0pLG10KG0pfSkscmUoMTExLCJoMyIsNTEpLFRlKDExMiwiIEZpbHRlciBmb3IgdGFibGU6ICIpLHJlKDExMywic3BhbiIpLFRlKDExNCksaWUoKSgpLHJlKDExNSwiZGl2Iiw5KSxjdCgxMTYsakV0LDIsMCwiYXBwLXF1''@;'; put 'put ''ZXJ5IiwzOSksaWUoKSxyZSgxMTcsImRpdiIsMjMpKDExOCwiYnV0dG9uIiw1Miksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLnJlc2V0RmlsdGVyKCkpfSksVGUoMTE5LCIgcmVzZXQgZmlsdGVyICIpLGllKCkscmUoMTIwLCJidXR0b24iLDUzKSxrdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGEpLG10KGkuZmlsdGVyPSExKX0pLFRlKDEyMSwiIENhbmNlbCAiKSxpZSgpLHJlKDEyMiwiYnV0dG9uIiw1NCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLnNlbmRDbGF1c2UoKSl9KSxUZSgxMjMsIiBPayAiKSxpZSgpKCko''@;'; put 'put ''KSxyZSgxMjQsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLnF1ZXJ5RXJyLG0pfHwoaS5xdWVyeUVycj1tKSxtdChtKX0pLHJlKDEyNSwiaDMiLDgpLFRlKDEyNiwiRXJyb3IiKSxpZSgpLHJlKDEyNywiZGl2Iiw5''@;'; put 'put ''KSgxMjgsInAiKSxUZSgxMjkpLGllKCkoKSxyZSgxMzAsImRpdiIsMjMpKDEzMSwiYnV0dG9uIiw1NSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLnF1ZXJ5RXJyPSExKX0pLFRlKDEzMiwiIENhbmNlbCAiKSxpZSgpLHJlKDEzMywiYnV0dG9uIiw0NSksa3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLnF1ZXJ5RXJyPSExKX0pLFRlKDEzNCwiIE9rICIpLGllKCkoKSgpLHJlKDEzNSwiY2xyLW1vZGFsIiw1NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkuZGlzY2FyZFNvdXJjZUZp''@;'; put 'put ''bGUsbSl8fChpLmRpc2NhcmRTb3VyY2VGaWxlPW0pLG10KG0pfSkscmUoMTM2LCJoMyIsNTEpLFRlKDEzNywiV2FybmluZyIpLGllKCkscmUoMTM4LCJkaXYiLDkpLFRlKDEzOSwiIFRoaXMgYWN0aW9uIHdpbGwgZGlzY2FyZCB0aGUgc291cmNlIGZpbGUgYW5kIGl0J3MgbG9hZGVkIGRhdGEg''@;'; put 'put ''IikscmUoMTQwLCJiIiksVGUoMTQxKSxpZSgpLFRlKDE0MiwiIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLGllKCkscmUoMTQzLCJkaXYiLDIzKSgxNDQsImJ1dHRvbiIsNTMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5kaXNjYXJkU291cmNlRmlsZT0hMSl9''@;'; put 'put ''KSxUZSgxNDUsIiBDYW5jZWwgIiksaWUoKSxyZSgxNDYsImJ1dHRvbiIsNTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksaS5kaXNjYXJkU291cmNlRmlsZT0hMSxtdChpLmRpc2NhcmRQZW5kaW5nRXhjZWwoITApKX0pLFRlKDE0NywiIE9rICIpLGllKCkoKSgpLHJlKDE0''@;'; put 'put ''OCwiY2xyLW1vZGFsIiw1NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkuZmlsZVBhc3N3b3JkTW9kYWwsbSl8fChpLmZpbGVQYXNzd29yZE1vZGFsPW0pLG10KG0pfSkscmUoMTQ5LCJoMyIsNTEpLFRlKDE1MCwiIFBhc3N3b3JkIFByb3Rl''@;'; put 'put ''Y3RlZCBGaWxlICIpLGllKCkscmUoMTUxLCJkaXYiLDU4KSgxNTIsInAiLDQzKSxUZSgxNTMsIlBsZWFzZSBlbnRlciBwYXNzd29yZDoiKSxpZSgpLFZ0KDE1NCwiaW5wdXQiLDU5LDIpLGllKCkscmUoMTU2LCJkaXYiLDIzKSxjdCgxNTcsekV0LDIsMCwicCIsNjApLHJlKDE1OCwiYnV0dG9u''@;'; put 'put ''Iiw1Myksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxpLmZpbGVQYXNzd29yZE1vZGFsPSExLG10KGkuZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KHZvaWQgMCkpfSksVGUoMTU5LCIgQ2FuY2VsIHVwbG9hZCAiKSxpZSgpLHJlKDE2MCwiYnV0dG9uIiw2MSksa3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe2d0KGEpO2NvbnN0IG09ZGEoMTU1KTtyZXR1cm4gaS5maWxlUGFzc3dvcmRNb2RhbD0hMSxtdChpLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dChtLnZhbHVlKSl9KSxUZSgxNjEsIiBVbmxvY2sgIiksaWUoKSgpKCkscmUoMTYyLCJjbHItbW9kYWwiLDU2KSxjaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksdWkoaS5tYW51YWxGaWxlRWRpdE1vZGFsLG0pfHwoaS5tYW51YWxGaWxlRWRpdE1vZGFsPW0pLG10KG0pfSkscmUoMTYzLCJoMyIsNTEpLFRlKDE2NCwiV2FybmluZyIpLGllKCkscmUoMTY1LCJkaXYiLDkpLFRlKDE2''@;'; put 'put ''NiwiIE1hbnVhbGx5IGVkaXRpbmcgdGhpcyBkYXRhIHdpbGwgbWVhbiB0aGUgc291cmNlIGZpbGUgIikscmUoMTY3LCJiIiksVGUoMTY4KSxpZSgpLFRlKDE2OSwiIHdpbGwgYmUgZGlzY2FyZGVkLiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxpZSgpLHJlKDE3MCwiZGl2IiwyMykoMTcx''@;'; put 'put ''LCJidXR0b24iLDUzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGEpLG10KGkubWFudWFsRmlsZUVkaXRNb2RhbD0hMSl9KSxUZSgxNzIsIiBDYW5jZWwgIiksaWUoKSxyZSgxNzMsImJ1dHRvbiIsNTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksaS5tYW51''@;'; put 'put ''YWxGaWxlRWRpdE1vZGFsPSExLG10KGkucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKSl9KSxUZSgxNzQsIiBPayAiKSxpZSgpKCkoKSxyZSgxNzUsImFwcC1kYXRhc2V0LWluZm8iLDYyKSxjaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkuZGF0YXNldEluZm8s''@;'; put 'put ''bSl8fChpLmRhdGFzZXRJbmZvPW0pLG10KG0pfSksa3QoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKG0pKX0pLGllKCkscmUoMTc2LCJhcHAtdmlld2JveGVzIiw2MyksY2koInZpZXdib3hNb2RhbENoYW5nZSIs''@;'; put 'put ''ZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkudmlld2JveGVzLG0pfHwoaS52aWV3Ym94ZXM9bSksbXQobSl9KSxpZSgpfWlmKDImcil7Y29uc3QgYT1kYSgxNTUpO2FlKCkseWUoInVwbG9hZGVyIixpLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNC''@;'; put 'put ''YWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwiVmFsaWRhdGluZy1EUSI9PT1pLmV4Y2VsVXBsb2FkU3RhdGUpLGxpKCJjbHJNb2RhbE9wZW4iLGkuc2hvd1VwbG9hZE1vZGFsKSxhZSgxMyksbGkoIm5nTW9kZWwiLGkuZW5jb2RpbmcpLHllKCJkaXNhYmxlZCIsIiIhPWkuZmlsZW5h''@;'; put 'put ''bWUpLGFlKDQpLGxpKCJuZ01vZGVsIixpLmVuY29kaW5nKSx5ZSgiZGlzYWJsZWQiLCIiIT1pLmZpbGVuYW1lKSxhZSgzKSx5ZSgibmdJZiIsIWkuZXhjZWxGaWxlUGFyc2luZyYmIWkudXBsb2FkTG9hZGluZyksYWUoKSx5ZSgibmdJZiIsIWkuZXhjZWxGaWxlUGFyc2luZyYmIWkudXBsb2Fk''@;'; put 'put ''TG9hZGluZyksYWUoMikseWUoIm5nSWYiLCJWYWxpZGF0aW5nIiE9PWkuZXhjZWxVcGxvYWRTdGF0ZSksYWUoKSx5ZSgibmdJZiIsIlZhbGlkYXRpbmctRFEiPT09aS5leGNlbFVwbG9hZFN0YXRlKSxhZSgpLHllKCJuZ0lmIixpLmV4Y2VsRmlsZVBhcnNpbmcpLGFlKDIpLHllKCJuZ0lmIixp''@;'; put 'put ''LmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+LTEpLGFlKDMpLHllKCJuZ0lmIiwhaS52YWxpZGF0aW9uRG9uZSYmaS5zdWJtaXQpLGFlKDMpLHllKCJuZ0lmIixpLnRhYmxlVHJ1ZSYmIWkuZW1iZWQpLGFlKCksYnIoImNsci1jb2wtbGctMTIiLCFpLnRhYmxlVHJ1ZSksYWUoKSx5ZSgibmdWYXIi''@;'; put 'put ''LGk0KDY4LHRFdCxudWxsPT1pLmxpYmRzP251bGw6aS5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWkubGliZHM/bnVsbDppLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxhZSgpLHllKCJuZ0lmIixpLnRhYmxlVHJ1ZSksYWUoKSx5ZSgibmdJZiIsIW5sKDcxLE9fZSkuaW5jbHVkZXMoaS5xdWVy''@;'; put 'put ''eVRleHQpKSxhZSgpLHllKCJuZ0NsYXNzIixyNCg3MyxuRXQsIW5sKDcyLE9fZSkuaW5jbHVkZXMoaS5xdWVyeVRleHQpKSksYWUoKSx5ZSgibmdJZiIsIWkudGFibGVUcnVlKSxhZSgzKSxicigiaGlkZGVuIixpLmhvdFRhYmxlLmhpZGRlbikseWUoImRhdGEiLGkuaG90VGFibGUuZGF0YSko''@;'; put 'put ''InNldHRpbmdzIixpLmhvdFRhYmxlU2V0dGluZ3MpLGFlKDMpLHllKCJuZ0lmIixpLnRhYmxlVHJ1ZSYmIWkucmVzdHJpY3Rpb25zLnJlbW92ZUFkZFJlY29yZEJ1dHRvbiksYWUoKSx5ZSgibmdJZiIsaS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWkuSW5maW5p''@;'; put 'put ''dHkmJmkuZGF0YVNvdXJjZSYmaS5kYXRhU291cmNlLmxlbmd0aD5pLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKSxhZSgpLHllKCJuZ0lmIixpLnN1Ym1pdCksYWUoKSxsaSgiY2xyTW9kYWxPcGVuIixpLnN1Ym1pdExpbWl0Tm90aWNlKSxhZSg1KSxNcigiIER1ZSB0''@;'; put 'put ''byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixpLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiks''@;'; put 'put ''YWUoNiksbGkoImNsck1vZGFsT3BlbiIsaS5iYWRFZGl0KSxhZSgyKSx2cihpLmJhZEVkaXRUaXRsZXx8IkVycm9yIiksYWUoMyksdnIoaS5iYWRFZGl0Q2F1c2UpLGFlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGkucGtOdWxsKSxhZSg5KSxsaSgiY2xyTW9kYWxPcGVuIixpLm5vUGtOdWxsKSxh''@;'; put 'put ''ZSg5KSxsaSgiY2xyTW9kYWxPcGVuIixpLnBrRHVwcyksYWUoOCkseWUoIm5nRm9yT2YiLGkuZHVwbGljYXRlUGtJbmRleGVzKSxhZSg0KSxsaSgiY2xyTW9kYWxPcGVuIixpLnRvb0xvbmcpLGFlKDYpLHllKCJuZ0Zvck9mIixpLmV4Y2VlZENlbGxzKSxhZSg0KSx5ZSgibmdJZiIsaS5udWxs''@;'; put 'put ''VmFyaWFibGVzKSxhZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGkuZmlsdGVyKSx5ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGFlKDQpLE1yKCIgIixpLmxpYmRzLCIgIiksYWUoMikseWUoIm5nSWYiLGkuZmlsdGVyKSxhZSg2KSx5ZSgiY2xyTG9hZGluZyIs''@;'; put 'put ''aS5zdWJtaXRMb2FkaW5nKSxhZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixpLnF1ZXJ5RXJyKSxhZSg1KSx2cihpLnF1ZXJ5RXJyTWVzc2FnZSksYWUoNiksbGkoImNsck1vZGFsT3BlbiIsaS5kaXNjYXJkU291cmNlRmlsZSkseWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2Fi''@;'; put 'put ''bGUiLCExKSxhZSg2KSx2cihpLmZpbGVuYW1lKSxhZSg3KSxsaSgiY2xyTW9kYWxPcGVuIixpLmZpbGVQYXNzd29yZE1vZGFsKSx5ZSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGFlKDkpLHllKCJuZ0lmIixpLmZpbGVVbmxvY2tFcnJvciksYWUoMykseWUo''@;'; put 'put ''ImRpc2FibGVkIixhLnZhbHVlLmxlbmd0aDwxKSxhZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixpLm1hbnVhbEZpbGVFZGl0TW9kYWwpLHllKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksYWUoNiksdnIoaS5maWxlbmFtZSksYWUoNyksbGkoIm9wZW4iLGkuZGF0''@;'; put 'put ''YXNldEluZm8pLHllKCJkc21ldGEiLGkuZHNtZXRhKSgidmVyc2lvbnMiLGkudmVyc2lvbnMpLGFlKCksbGkoInZpZXdib3hNb2RhbCIsaS52aWV3Ym94ZXMpfX0sZGVwZW5kZW5jaWVzOltBX2UsUnUsaHMsbWEsemwsekYsaWwsUXMsWDEsVWwsaHUsYzAsUzEseTIsVmYscHMsWVgsWUplLFpY''@;'; put 'put ''LHdILFI2LE82LEw2LEc1LFlTLFRBLGtfZSxEX2UsSV9lLEZILG1hZSxHeHQsS3h0LFh4dCxMX2VdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCk7Y29uc3QgVUV0PVt7cGF0aDoiOmxpYk1lbSIsY29tcG9uZW50OlVqfSx7cGF0aDoiOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVu''@;'; put 'put ''dDpVan0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0iLGNvbXBvbmVudDpVan0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6VWp9XTtsZXQgV0V0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBu''@;'; put 'put ''ZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxZYy5mb3JDaGlsZChVRXQpLFljXX0pfX1yZXR1cm4gbn0pKCksdEk9KCgpPT57Y2xhc3MgbntzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOm59KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLE0xLEZhLE9jLGwzXX0pfX1yZXR1cm4gbn0pKCkseWFlPSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxNMSxGYSxPYyxZeSxlSSxsM119KX19cmV0dXJuIG59KSgpO1FEKCk7bGV0IFBfZT0oKCk9PntjbGFzcyBu''@;'; put 'put ''e3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsTTEsRmEsT2MseWFlLFp5LEEzZSxtX2UsdEksbDNdfSl9fXJldHVy''@;'; put 'put ''biBufSkoKTtRRCgpO2xldCBaRXQ9KCgpPT57Y2xhc3MgbntzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOm59KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W1BfZSxGYSxP''@;'; put 'put ''YyxXRXQsTTEsWnksWXksbDMsWlMsZUksdEksQTNlLHlhZV19KX19cmV0dXJuIG59KSgpLFlFdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJlZ0KDAsInJvdXRl''@;'; put 'put ''ci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtjb25zdCBHRXQ9WyJzaWRlYmFyTmF2Il0sJEV0PVsiKiJdLEtFdD0oKT0+WyIvdmlldy91c2VybmF2L3VzZXJzIl0sWEV0PSgpPT5bIi92aWV3L3VzZXJuYXYvZ3JvdXBzIl0scUV0''@;'; put 'put ''PSgpPT5bIi92aWV3L3VzZXJuYXYvcm9sZXMiXTtmdW5jdGlvbiBKRXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJhIiwxOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgzKS5uYXZpZ2F0ZVRvVmlld2VyKCkpfSksVGUoMSwiRGF0YSIpLGllKCl9''@;'; put 'put ''fWZ1bmN0aW9uIFFFdChuLHQpezEmbiYmKHJlKDAsImEiLDE5KSxUZSgxLCJBUEkgRXhwbG9yZXIiKSxpZSgpKX1mdW5jdGlvbiBlVHQobix0KXsxJm4mJihyZSgwLCJhIiwyMCksVGUoMSwiTGluZWFnZSIpLGllKCkpfWZ1bmN0aW9uIHRUdChuLHQpezEmbiYmKHJlKDAsImEiLDIxKSxUZSgx''@;'; put 'put ''LCJNZXRhZGF0YSIpLGllKCkpfWZ1bmN0aW9uIG5UdChuLHQpezEmbiYmKHJlKDAsImEiLDIyKSxUZSgxLCIgVXNlcnMiKSxpZSgpKX1mdW5jdGlvbiByVHQobix0KXsxJm4mJihyZSgwLCJhIiwyMyksVGUoMSwiU3VibWl0dGVkIiksaWUoKSl9ZnVuY3Rpb24gaVR0KG4sdCl7MSZuJiYocmUo''@;'; put 'put ''MCwiYSIsMjQpLFRlKDEsIlRvIEFwcHJvdmUiKSxpZSgpKX1mdW5jdGlvbiBhVHQobix0KXtpZigxJm4mJihyZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGN0KDEsSkV0LDIsMCwiYSIsMTEpKDIsUUV0LDIsMCwiYSIsMTIpKDMsZVR0LDIsMCwiYSIsMTMpKDQsdFR0LDIsMCwiYSIsMTQpKDUs''@;'; put 'put ''blR0LDIsMCwiYSIsMTUpKDYsclR0LDIsMCwiYSIsMTYpKDcsaVR0LDIsMCwiYSIsMTcpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIixlLmlzTWFpblJvdXRlKCJ2aWV3IikpLGFlKCkseWUoIm5nSWYiLGUuaXNNYWluUm91dGUoInZpZXciKSYmIlNBU1ZJWUEiPT09''@;'; put 'put ''ZS5zZXJ2ZXJUeXBlKSxhZSgpLHllKCJuZ0lmIixlLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWUuc2VydmVyVHlwZSksYWUoKSx5ZSgibmdJZiIsZS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1lLnNlcnZlclR5cGUpLGFlKCkseWUoIm5nSWYiLGUuaXNNYWluUm91dGUo''@;'; put 'put ''InZpZXciKSksYWUoKSx5ZSgibmdJZiIsZS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKSxhZSgpLHllKCJuZ0lmIixlLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpfX1mdW5jdGlvbiBvVHQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCks''@;'; put 'put ''VGUoMyksVnQoNCwiY2xyLWljb24iLDkpLGllKCksY3QoNSxhVHQsOCw3LCJjbHItZHJvcGRvd24tbWVudSIsMTApLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoMyksTXIoIiAiLGUuZ2V0U3ViUGFnZSgpLCIgIil9fWZ1bmN0aW9uIHNUdChuLHQpezEmbiYmVnQoMCwiY2xyLXRhYi1j''@;'; put 'put ''b250ZW50Iil9ZnVuY3Rpb24gbFR0KG4sdCl7MSZuJiZWdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBjVHQobix0KXtpZigxJm4mJihyZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiwyNikoMiwicCIsMjcpLFZ0KDMsImNsci1pY29uIiwzMiksVGUoNCwiIFJvbGVzICIpLGllKCko''@;'; put 'put ''KSxjdCg1LGxUdCwxLDAsImNsci10YWItY29udGVudCIsMzApLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJyb3V0ZXJMaW5rIixubCgyLHFFdCkpLGFlKDQpLHllKCJjbHJJZkFjdGl2ZSIsZS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9yb2xlcyIpKX19ZnVuY3Rpb24g''@;'; put 'put ''dVR0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRhYnMiLDI1KSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyNikoMywicCIsMjcpLFZ0KDQsImNsci1pY29uIiwyOCksVGUoNSwiIFVzZXJzIiksaWUoKSgpLFZ0KDYsImNsci10YWItY29udGVudCIpLGllKCkscmUoNywiY2xyLXRhYiIpKDgs''@;'; put 'put ''ImJ1dHRvbiIsMjYpKDksInAiLDI3KSxWdCgxMCwiY2xyLWljb24iLDI5KSxUZSgxMSwiIEdyb3VwcyIpLGllKCkoKSxjdCgxMixzVHQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSxpZSgpLGN0KDEzLGNUdCw2LDMsImNsci10YWIiLDMxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgy''@;'; put 'put ''KSx5ZSgicm91dGVyTGluayIsbmwoNCxLRXQpKSxhZSg2KSx5ZSgicm91dGVyTGluayIsbmwoNSxYRXQpKSxhZSg0KSx5ZSgiY2xySWZBY3RpdmUiLGUuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvZ3JvdXBzIikpLGFlKCkseWUoIm5nSWYiLCJTQVM5Ij09PWUuc2VydmVyVHlwZSl9fWZ1''@;'; put 'put ''bmN0aW9uIGRUdChuLHQpezEmbiYmKHJlKDAsImNsci1kcm9wZG93bi1tZW51IikoMSwiYSIsMzMpLFRlKDIsIlRhYmxlcyIpLGllKCkscmUoMywiYSIsMzQpLFRlKDQsIkV4Y2VsIE1hcHMiKSxpZSgpLHJlKDUsImEiLDM1KSxUZSg2LCJNdWx0aSBMb2FkIiksaWUoKSgpKX1mdW5jdGlvbiBo''@;'; put 'put ''VHQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCksVGUoMyksVnQoNCwiY2xyLWljb24iLDkpLGllKCksY3QoNSxkVHQsNywwLCJjbHItZHJvcGRvd24tbWVudSIsMTApLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoMyksTXIo''@;'; put 'put ''IiAiLGUuZ2V0U3ViUGFnZSgpLCIgIil9fWxldCBhZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLl9yb3V0ZXI9ZSx0aGlzLmV2ZW50U2VydmljZT1yLHRoaXMuX3Nhc1NlcnZpY2U9aSx0aGlzLnNjcm9sbGVkVG9Cb3R0b209bmV3IFlyLHRoaXMuc2lkZWJhck9wZW49''@;'; put 'put ''ITAsdGhpcy5zaWRlYmFyV2lkdGg9bnVsbCx0aGlzLnNpZGViYXJNYXhXaWR0aD1udWxsLHRoaXMucmVzaXppbmc9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgaDIuU0FTanNDb25maWcsdGhpcy5zYXNqc0NvbmZpZz10aGlzLl9zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2''@;'; put 'put ''ZXJUeXBlPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaWRlYmFyVG9nZ2xlLnN1YnNjcmliZShlPT57dGhpcy5zaWRlYmFyT3Blbj1lP2Uub3BlbjohdGhpcy5zaWRlYmFyT3Blbix0aGlzLmV2ZW50U2VydmljZS5kaXNw''@;'; put 'put ''YXRjaEV2ZW50KCJyZXNpemUiKX0pfW9uVHJlZVNjcm9sbChlKXtsZXQgcj1lLnRhcmdldDtyLnNjcm9sbFRvcD49ci5zY3JvbGxIZWlnaHQtci5vZmZzZXRIZWlnaHQtMTAmJnRoaXMuc2Nyb2xsZWRUb0JvdHRvbS5lbWl0KCl9aXNNYWluUm91dGUoZSl7cmV0dXJuIHRoaXMuX3JvdXRlci51''@;'; put 'put ''cmwuaW5jbHVkZXMoZSl9Z2V0U3ViUGFnZSgpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLnNwbGl0KCIvIilbMl19bmF2aWdhdGVUb1ZpZXdlcigpe1duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSIiLHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9cmVzaXplU3Rh''@;'; put 'put ''cnQoKXt0aGlzLnJlc2l6aW5nPSEwLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgic2VsZWN0LW5vbmUiKX1yZXNpemVFbmQoKXt0aGlzLnJlc2l6aW5nPSExLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0LW5vbmUiKX1vbk1vdXNlTW92ZShlKXtpZih0aGlzLnJl''@;'; put 'put ''c2l6aW5nKXt0aGlzLnNpZGViYXJXaWR0aD1lLmNsaWVudFg7bGV0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibmF2LXRyZWUiKVswXTt0aGlzLnNpZGViYXJXaWR0aCYmdGhpcy5pc092ZXJmbG93bihyKSYmKHRoaXMuc2lkZWJhck1heFdpZHRoPXRoaXMuc2lkZWJhcldp''@;'; put 'put ''ZHRoPj0zNzU/dGhpcy5zaWRlYmFyV2lkdGgrMTA6dGhpcy5zaWRlYmFyTWF4V2lkdGgpfX1vbk1vdXNlVXAoZSl7dGhpcy5yZXNpemluZyYmdGhpcy5yZXNpemVFbmQoKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5zY3JvbGxXaWR0aD5lLmNsaWVudFdpZHRofXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKHJsKSxXZShTYyksV2UoSnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihyLGkpe2lmKDEmciYmV2EoR0V0LDUpLDImcil7''@;'; put 'put ''bGV0IGE7ZGkoYT1oaSgpKSYmKGkuc2lkZWJhck5hdj1hLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihyLGkpezEmciYma3QoIm1vdXNlbW92ZSIsZnVuY3Rpb24oYyl7cmV0dXJuIGkub25Nb3VzZU1vdmUoYyl9LDAsWG0pKCJtb3VzZXVwIixmdW5jdGlvbihjKXtyZXR1cm4gaS5v''@;'; put 'put ''bk1vdXNlVXAoYyl9LCExLFhtKX0sb3V0cHV0czp7c2Nyb2xsZWRUb0JvdHRvbToic2Nyb2xsZWRUb0JvdHRvbSJ9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOiRFdCxkZWNsczo5LHZhcnM6MTMsY29uc3RzOltbInNpZGViYXJOYXYiLCIiXSxbImlkIiwic2lkZWJhck5hdiJd''@;'; put 'put ''LFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBzdWItZHJvcGRvd24iLDQsIm5nSWYiXSxbImNsYXNzIiwicC0xMCIsNCwibmdJZiJdLFsxLCJuYXYtZGl2aWRlciJdLFsxLCJuYXYtdHJlZSIsMywic2Nyb2xsIl0sWzEsInJlc2l6ZS1oYW5kbGUiLDMsIm1vdXNlZG93''@;'; put 'put ''biJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic3ViLWRyb3Bkb3duIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImRyb3Bkb3duLXRvZ2dsZSIsImJ0biIsImJ0bi1wcmltYXJ5Il0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJj''@;'; put 'put ''bHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3ZpeWEtYXBpLWV4cGxvcmVyIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwi''@;'; put 'put ''bmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEiLCJyb3V0ZXJMaW5r''@;'; put 'put ''QWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3''@;'; put 'put ''L2FwcHJvdmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3ZpeWEtYXBpLWV4cGxvcmVyIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGlj''@;'; put 'put ''YWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0''@;'; put 'put ''aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2''@;'; put 'put ''ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWzEsInAtMTAiXSxbImNsclRhYkxpbmsiLCIiLDEsInVzZXItbmF2LWJ0biIsMywicm91dGVyTGluayJdLFsxLCJ6''@;'; put 'put ''ZXJvLW1hcmdpbiJdLFsic2hhcGUiLCJ1c2VyIl0sWyJzaGFwZSIsInVzZXJzIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvdGFibGVzIiwicm91dGVyTGlu''@;'; put 'put ''a0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL2V4Y2VsLW1hcHMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvbXVsdGktbG9hZCIsInJv''@;'; put 'put ''dXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXtpZigxJnIpe2NvbnN0IGE9SW4oKTtuYSgpLHJlKDAsImNsci12ZXJ0aWNhbC1uYXYiLDEsMCksY3QoMixvVHQsNiwxLCJkaXYiLDIpKDMsdVR0LDE0LDYsImNsci10YWJzIiwzKSg0LGhUdCw2LDEsImRp''@;'; put 'put ''diIsMiksVnQoNSwiZGl2Iiw0KSxyZSg2LCJkaXYiLDUpLGt0KCJzY3JvbGwiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLm9uVHJlZVNjcm9sbChtKSl9KSxCcig3KSxpZSgpLHJlKDgsInNwYW4iLDYpLGt0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGEpLG10KGku''@;'; put 'put ''cmVzaXplU3RhcnQoKSl9KSxpZSgpKCl9MiZyJiYoVGQoIndpZHRoIixpLnNpZGViYXJXaWR0aCwicHgiKSgibWF4LXdpZHRoIixpLnNpZGViYXJNYXhXaWR0aCwicHgiKSxicigiY2xvc2VkIiwhaS5zaWRlYmFyT3BlbikoInJlc2l6aW5nIixpLnJlc2l6aW5nKSxhZSgyKSx5ZSgibmdJZiIs''@;'; put 'put ''aS5pc01haW5Sb3V0ZSgidmlldyIpKSxhZSgpLHllKCJuZ0lmIixpLmlzTWFpblJvdXRlKCJ2aWV3L3VzZXJuYXYiKSksYWUoKSx5ZSgibmdJZiIsaS5pc01haW5Sb3V0ZSgiaG9tZSIpKSxhZSg0KSxicigicmVzaXppbmciLGkucmVzaXppbmcpKX0sZGVwZW5kZW5jaWVzOlttYSxVbCxWdyx5''@;'; put 'put ''MixINixWNixndixONixGNixmdixGWCxOWCxpNSxsdixjdixYMSxFd10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtmdW5jdGlvbiBmVHQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwxMyl9ZnVuY3Rpb24gcFR0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xy''@;'; put 'put ''LWljb24iLDE0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gaS5saWJyYXJpZXNTZWFyY2g9IiIsbXQoaS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxpZSgpfX1mdW5jdGlvbiBnVHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiw4KSgxLCJkaXYiLDkpKDIsImlucHV0IiwxMCwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVybiB1aShhLmxpYnJhcmllc1NlYXJjaCxpKXx8KGEubGlicmFyaWVzU2VhcmNoPWkpLG10KGkpfSksa3QoImtleXVwIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGllKCksY3QoNCxmVHQsMSwwLCJjbHItaWNvbiIsMTEpKDUscFR0LDEsMCwiY2xyLWljb24iLDEyKSxpZSgpKCl9aWYoMiZuKXtjb25zdCBlPWRhKDMpLHI9RWUoKTthZSgyKSxsaSgibmdNb2RlbCIsci5s''@;'; put 'put ''aWJyYXJpZXNTZWFyY2gpLGFlKDIpLHllKCJuZ0lmIixlLnZhbHVlLmxlbmd0aDwxKSxhZSgpLHllKCJuZ0lmIixlLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gbVR0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIHZUdChuLHQpe2lmKDEmbil7Y29uc3QgZT1Jbigp''@;'; put 'put ''O3JlKDAsImNsci1pY29uIiwxNCksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpLEVlKCk7Y29uc3QgaT1kYSgzKSxhPUVlKDIpLiRpbXBsaWNpdCxjPUVlKCk7cmV0dXJuIGkudmFsdWU9IiIsYS5zZWFyY2hTdHJpbmc9IiIsbXQoYy50cmVlT25GaWx0ZXIoYSwidGFibGVzIikpfSksaWUo''@;'; put 'put ''KX19ZnVuY3Rpb24geVR0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTksMSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMikuJGltcGxpY2l0O3JldHVybiB1aShh''@;'; put 'put ''LnNlYXJjaFN0cmluZyxpKXx8KGEuc2VhcmNoU3RyaW5nPWkpLG10KGkpfSksa3QoImtleXVwIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMikuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLnRyZWVPbkZpbHRlcihpLCJ0YWJsZXMiKSl9KSxpZSgpLGN0KDQsbVR0LDEsMCwiY2xyLWlj''@;'; put 'put ''b24iLDExKSg1LHZUdCwxLDAsImNsci1pY29uIiwxMiksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1kYSgzKSxyPUVlKDIpLiRpbXBsaWNpdDthZSgyKSxsaSgibmdNb2RlbCIsci5zZWFyY2hTdHJpbmcpLGFlKDIpLHllKCJuZ0lmIixlLnZhbHVlLmxlbmd0aDwxKSxhZSgpLHllKCJuZ0lmIixl''@;'; put 'put ''LnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gX1R0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIGJUdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiB3VHQobix0KXsxJm4mJihyZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOSkoMSwic3Bh''@;'; put 'put ''biIpLFRlKDIsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGllKCkoKSl9ZnVuY3Rpb24gQ1R0KG4sdCl7MSZuJiYocmkoMCksY3QoMSx3VHQsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksaWkoKSl9ZnVuY3Rpb24gU1R0''@;'; put 'put ''KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIxKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS5uZ1ZhcixhPUVlKCkuJGltcGxpY2l0LGM9RWUoMikuJGltcGxpY2l0LG09RWUoKTtyZXR1cm4gbXQoaT8iIjptLm9u''@;'; put 'put ''VGFibGVDbGljayhhLGMpKX0pLHJpKDIsMjIpLGN0KDMsX1R0LDEsMCwiY2xyLWljb24iLDIzKSg0LGJUdCwxLDAsImNsci1pY29uIiwyNCksaWkoKSxUZSg1KSxpZSgpLGN0KDYsQ1R0LDIsMCwibmctY29udGFpbmVyIiwyNSksaWUoKX1pZigyJm4pe2NvbnN0IGU9dC5uZ1ZhcixyPUVlKCku''@;'; put 'put ''JGltcGxpY2l0LGk9RWUoMikuJGltcGxpY2l0LGE9RWUoKTthZSgpLGJyKCJkYy1sb2NrZWQtY29udHJvbCIsZSkoImFjdGl2ZSIsYS5saWJUYWJBY3RpdmUoaS5MSUJSQVJZUkVGLHIpKSxhZSgpLHllKCJuZ1N3aXRjaCIsci5pbmNsdWRlcygiLUZDIikpLGFlKCkseWUoIm5nU3dpdGNoQ2Fz''@;'; put 'put ''ZSIsITApLGFlKCkseWUoIm5nU3dpdGNoQ2FzZSIsITEpLGFlKCksTXIoIiAiLHIucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxhZSgpLHllKCJuZ0lmIixlKX19ZnVuY3Rpb24gTVR0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRyZWUtbm9kZSIpLGN0KDEsU1R0LDcsOSwiY2xyLXRvb2x0aXAi''@;'; put 'put ''LDIwKSxpZSgpKSwyJm4pe2NvbnN0IGU9dC5pbmRleCxyPUVlKDMpO2FlKCkseWUoIm5nVmFyIixlKzE+ci5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiB4VHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''IiwxNiksa3QoImNsaWNrIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCkuJGltcGxpY2l0LGM9RWUoKTtyZXR1cm4gYy50cmVlTm9kZUNsaWNrZWQoaSxhKSxtdChjLmxpYj1hLkxJQlJBUllSRUYpfSksY2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25z''@;'; put 'put ''dCBhPUVlKCkuJGltcGxpY2l0O3JldHVybiB1aShhLmV4cGFuZGVkLGkpfHwoYS5leHBhbmRlZD1pKSxtdChpKX0pLHJlKDEsInAiLDE3KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpLiRpbXBsaWNpdCxhPUVlKCk7cmV0dXJuIGEubGliPWkuTElCUkFSWVJFRixt''@;'; put 'put ''dChhLmxpYnJhcnlPbkNsaWNrKGkuTElCUkFSWVJFRixpKSl9KSxWdCgyLCJjbHItaWNvbiIsMTgpLFRlKDMpLGllKCksY3QoNCx5VHQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSg1LE1UdCwyLDEsImNsci10cmVlLW5vZGUiLDMpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0''@;'; put 'put ''O2JyKCJjbHItZXhwYW5kZWQiLGUuZXhwYW5kZWQpLGxpKCJjbHJFeHBhbmRlZCIsZS5leHBhbmRlZCkseWUoImNsckxvYWRpbmciLGUubG9hZGluZ1RhYmxlcyYmIWUudGFibGVzKSxhZSgzKSxNcigiICIsZS5MSUJSQVJZUkVGLCIgIiksYWUoKSx5ZSgibmdJZiIsZS50YWJsZXMpLGFlKCks''@;'; put 'put ''eWUoIm5nRm9yT2YiLGUudGFibGVzKX19ZnVuY3Rpb24gRVR0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSx4VHQsNiw3LCJjbHItdHJlZS1ub2RlIiwxNSksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLCFlLmhpZGRlbil9fWZ1bmN0aW9uIFRUdChuLHQp''@;'; put 'put ''ezEmbiYmKHJlKDAsImRpdiIsMzApKDEsImRpdiIsMzEpKDIsInNwYW4iLDMyKSxUZSgzLCIgTG9hZGluZy4uLiAiKSxpZSgpKCkoKSl9ZnVuY3Rpb24gQVR0KG4sdCl7MSZuJiYocmUoMCwicCIsMzYpLFRlKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaWUoKSl9ZnVuY3Rpb24ga1R0''@;'; put 'put ''KG4sdCl7MSZuJiYocmUoMCwicCIsMzYpLFRlKDEsIiBObyBFZGl0YWJsZSBUYWJsZXMgQ29uZmlndXJlZCAiKSxpZSgpKX1mdW5jdGlvbiBEVHQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDMzKSxWdCgxLCJpbWciLDM0KSxjdCgyLEFUdCwyLDAsInAiLDM1KSgzLGtUdCwyLDAsInAiLDM1''@;'; put 'put ''KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgyKSx5ZSgibmdJZiIsKG51bGw9PWUudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDplLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksYWUoKSx5ZSgibmdJZiIsKG51bGw9PWUudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDplLnRyZWVOb2RlTGli''@;'; put 'put ''cmFyaWVzLmxlbmd0aCk8MSl9fWxldCBJVHQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7dGhpcy5yb3V0ZT1lLHRoaXMucm91dGVyPXIsdGhpcy5saWNlbmNlU2VydmljZT1pLHRoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWMsdGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlPW0sdGhpcy50cmVlTm9kZUxpYnJhcmllcz1udWxsLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMubG9hZGluZz0hMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZX1jb2xsYXBzZUxpYnJhcnlJdGVtcyhlLHIpe2UuZm9yRWFjaChpPT57aS5MSUJSQVJZSUQhPT1yLkxJQlJBUllJRCYmKGkuZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGUscil7IkNvbGxhcHNlIj09PWUudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFy''@;'; put 'put ''eUl0ZW1zKHRoaXMubGlicmFyaWVzLHIpfWxpYnJhcnlPbkNsaWNrKGUscil7ci5leHBhbmRlZD0hci5leHBhbmRlZCxyLmV4cGFuZGVkJiYhdGhpcy50YWJsZSYmdGhpcy5zZWxlY3RMaWJyYXJ5KGUsITEsciksdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxyKX1z''@;'; put 'put ''ZWxlY3RMaWJyYXJ5KGUscixpKXtpLmxvYWRpbmdUYWJsZXM9ITA7bGV0IGEsYz1bXTtpZih0aGlzLmxpYnNBbmRUYWJsZXMmJihhPXRoaXMubGlic0FuZFRhYmxlc1tlXSx0aGlzLnRhYmxlPXZvaWQgMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWUpKXtsZXQgbT1hLmZpbHRlcihmdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4tMT09PWMuaW5kZXhPZihDKSYmKGMucHVzaChDKSwhMCl9KTt0aGlzLnRhYmxlcz1tLFduLmVkaXRvci5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXN9V24uZWRpdG9yLmxpYnJhcnk9ZSxyfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGkubG9hZGluZ1RhYmxlcz0h''@;'; put 'put ''MSxpLmV4cGFuZGVkPSEwfXNlbGVjdFRhYmxlKGUscil7dmFyIGk9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtpLmxpYlRhYj1pLmxpYisiLiIraS50YWJsZSxpLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxXbi5lZGl0b3IudGFibGU9ZSxyfHxpLmNsZWFyR2xvYmFsc0ZpbHRlcigp''@;'; put 'put ''fSkoKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtXbi5lZGl0b3IuZmlsdGVyLmxpYmRzPSIiLFduLmVkaXRvci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsV24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiLFduLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxXbi5lZGl0b3IuZmlsdGVyLnZhbHM9''@;'; put 'put ''W10sV24uZWRpdG9yLmZpbHRlci5jb2xzPVtdfWxpYlRhYkFjdGl2ZShlLHIpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmU9PT10aGlzLmxpYiYmcj09PXRoaXMudGFibGV9dHJlZU9uRmlsdGVyKGUscil7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihlLHIpfWxp''@;'; put 'put ''YnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy50cmVlTm9kZUxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWVJFRiIpLFduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofW9uVGFibGVD''@;'; put 'put ''bGljayhlLHIpe3RoaXMudGFibGU9ZSx0aGlzLmxpYj1yLkxJQlJBUllSRUYsdGhpcy5zZWxlY3RUYWJsZShlKSx0aGlzLmVkaXRUYWJsZSgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliKyIuIit0aGlzLnRhYmxlKX1nZXRMaWJyYXJ5''@;'; put 'put ''VGFibGVTdGF0ZSgpe2lmKG51bGwhPT1Xbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMmJih0aGlzLnRyZWVOb2RlTGlicmFyaWVzPVduLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyksIiIhPT1Xbi5lZGl0b3IubGlicmFyeSl7dGhpcy5saWI9V24uZWRpdG9yLmxpYnJhcnk7bGV0IGU9bnVs''@;'; put 'put ''bDt0aGlzLnRyZWVOb2RlTGlicmFyaWVzJiYoZT10aGlzLnRyZWVOb2RlTGlicmFyaWVzLmZpbmQocj0+ci5MSUJSQVJZUkVGPT09dGhpcy5saWIpKSx0aGlzLnNlbGVjdExpYnJhcnkoV24uZWRpdG9yLmxpYnJhcnksITAsZSl9fWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVz''@;'; put 'put ''PVduLmVkaXRvci5saWJzQW5kVGFibGVzLHRoaXMubGlicmFyaWVzPVduLmVkaXRvci5saWJyYXJpZXMsdGhpcy5nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpLHRoaXMubG9hZGluZz0hMX1uZ0FmdGVyQ29udGVudEluaXQoKXtXbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxz''@;'; put 'put ''KCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShybCksV2UoczApLFdlKEsxKSxXZShMdSksV2UoU2Mp''@;'; put 'put ''LFdlKEpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJob21lLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0''@;'; put 'put ''IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkLWJsb2NrIl0sWyJjbGFzcyIsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSIsNCwibmdJZiJd''@;'; put 'put ''LFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsImFwcFN0ZWFsRm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9j''@;'; put 'put ''b21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxb''@;'; put 'put ''MywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVy''@;'; put 'put ''IiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwi''@;'; put 'put ''XSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdJZiJd''@;'; put 'put ''LFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJzcGlubmVyLXdyYXBwZXItZnVs''@;'; put 'put ''bHBhZ2UiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwi''@;'; put 'put ''c2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkgbXQtMTAiLCJjZHMtdGV4dCIsInNlY3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Iiwi''@;'; put 'put ''bXQtMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihyZSgwLCJhcHAtc2lkZWJhciIpKDEsImNsci10cmVlIiksY3QoMixnVHQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLEVUdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaWUoKSgpLHJlKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxj''@;'; put 'put ''dCg2LFRUdCw0LDAsImRpdiIsNikoNyxEVHQsNCwyLCJkaXYiLDcpLGllKCkoKSksMiZyJiYoYWUoMikseWUoIm5nSWYiLChudWxsPT1pLnRyZWVOb2RlTGlicmFyaWVzP251bGw6aS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGFlKCkseWUoIm5nRm9yT2YiLGkudHJlZU5vZGVMaWJy''@;'; put 'put ''YXJpZXMpLGFlKDMpLHllKCJuZ0lmIixpLmxvYWRpbmcpLGFlKCkseWUoIm5nSWYiLCFpLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt6bCxpbCxRcyxTMixFaCx1NSxVbCxTMSx5MixQZCxSNixPNixMNixhZyxocyxtYSxBZixvNCxZUyxpZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBu''@;'; put 'put ''fSkoKTtjb25zdCBSVHQ9bj0+e2Zvcihjb25zdCB0IGluIG4paWYoIl9fcm93TnVtX18iIT09dClyZXR1cm4hMTtyZXR1cm4hMH0sX2FlPW49Pntjb25zdCBlPW4ubWF0Y2goL1JcWyhcZCspXF1DXFsoXGQrKVxdLyk7cmV0dXJuIGU/e3JvdzpwYXJzZUludChlWzFdLDEwKSxjb2x1bW46cGFy''@;'; put 'put ''c2VJbnQoZVsyXSwxMCl9Om51bGx9LEZfZT0obix0KT0+e2lmKG4uc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihuPW4ucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLG4uc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGU9X2FlKG4pO2lmKGUpe2NvbnN0e3JvdzpyLGNvbHVtbjppfT1l''@;'; put 'put ''O249TDAudXRpbHMuZW5jb2RlX2NlbGwoe3I6ci0xLGM6aS0xfSl9fWlmKG4uc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBlPSIiO2NvbnN0IHI9bi5tYXRjaCgvQ1xbXGQrXF06KC4rKS8pO3ImJihlPXJbMV0pO2NvbnN0IGE9bi5zcGxpdCgiICIpWzFdO2xldCBjPSIiLG09LTEsQz0iIjtp''@;'; put 'put ''Zihpc05hTihOdW1iZXIoYSkpP2M9YTptPXBhcnNlSW50KGEpLC0xIT09bSl7Y29uc3QgSj10W20tMV07Zm9yKGNvbnN0IGNlIGluIEopaWYoIl9fcm93TnVtX18iIT09Y2UmJkpbY2VdPT09ZSl7Qz1jZSttO2JyZWFrfX1lbHNlIGZvcihsZXQgSj0wO0o8dC5sZW5ndGg7SisrKWlmKHRbSl1b''@;'; put 'put ''Y109PT1lKXtDPWMrKEorMSk7YnJlYWt9Y29uc3QgUD1MMC51dGlscy5kZWNvZGVfY2VsbChDKSxZPV9hZShuKTtpZihZKXtjb25zdHtyb3c6Sixjb2x1bW46Y2V9PVk7bj1MMC51dGlscy5lbmNvZGVfY2VsbCh7cjpQLnIrSixjOlAuYytjZX0pfX1yZXR1cm4gbn0sT1R0PVsiZmlsZVVwbG9h''@;'; put 'put ''ZElucHV0Il07ZnVuY3Rpb24gUFR0KG4sdCl7MSZuJiYocmUoMCwiZGl2IiwyOCksVnQoMSwiY2xyLXNwaW5uZXIiLDI5KSxpZSgpKX1mdW5jdGlvbiBGVHQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24gSFR0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwi''@;'; put 'put ''Y2xyLWljb24iLDMxKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpO3JldHVybiBpLnNlYXJjaFN0cmluZz0iIixtdChpLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaWUoKX19ZnVuY3Rpb24gTlR0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIsMzIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS54bG1hcE9uQ2xpY2soaSkpfSksVnQoMywiY2xyLWljb24iLDMzKSxUZSg0KSxpZSgpKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9''@;'; put 'put ''dC4kaW1wbGljaXQscj1FZSgpO2FlKDIpLGJyKCJhY3RpdmUiLHIuaXNBY3RpdmVYTE1hcChlLmlkKSksYWUoMiksTXIoIiAiLGUuaWQsIiAiKX19ZnVuY3Rpb24gVlR0KG4sdCl7MSZuJiYocmUoMCwicCIsMzcpLFRlKDEsIiBQbGVhc2Ugc2VsZWN0IGEgbWFwICIpLGllKCkpfWZ1bmN0aW9u''@;'; put 'put ''IEJUdChuLHQpezEmbiYmKHJlKDAsInAiLDM3KSxUZSgxLCIgTm8gZXhjZWwgbWFwIGlzIGZvdW5kICIpLGllKCkpfWZ1bmN0aW9uIGpUdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMzQpLFZ0KDEsImltZyIsMzUpLGN0KDIsVlR0LDIsMCwicCIsMzYpKDMsQlR0LDIsMCwicCIsMzYpLGll''@;'; put 'put ''KCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDIpLHllKCJuZ0lmIixlLnhsbWFwcy5sZW5ndGg+MCksYWUoKSx5ZSgibmdJZiIsZS54bG1hcHMubGVuZ3RoPDEpfX1mdW5jdGlvbiB6VHQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDM4KSgxLCJzcGFuIiwzOSksVGUoMiwiIExvYWRpbmcuLi4g''@;'; put 'put ''IiksaWUoKSxyZSgzLCJkaXYiKSg0LCJoNCIpLFRlKDUpLGllKCkoKSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSg1KSx2cihlLmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiBVVHQobix0KXsxJm4mJlZ0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIFdUdChuLHQpezEmbiYmVnQoMCwi''@;'; put 'put ''Y2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gWlR0KG4sdCl7MSZuJiZqbCgwKX1mdW5jdGlvbiBZVHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDQwKSxrdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLm9uU2hvd1VwbG9h''@;'; put 'put ''ZE1vZGFsKCkpfSkscmUoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIikoMywiYnV0dG9uIiw0MSksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKTtyZXR1cm4gbXQoaS5zZWxlY3RlZFRhYj1pLlRhYnNFbnVtLlJ1bGVzKX0pLFRlKDQsIlJ1bGVzIiksaWUoKSxjdCg1''@;'; put 'put ''LFVUdCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGllKCkscmUoNiwiY2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCk7cmV0dXJuIG10KGkuc2VsZWN0ZWRUYWI9aS5UYWJzRW51bS5EYXRhKX0pLFRlKDgsIkRhdGEiKSxp''@;'; put 'put ''ZSgpLGN0KDksV1R0LDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MiksaWUoKSgpLGN0KDEwLFpUdCwxLDAsIm5nLWNvbnRhaW5lciIsNDMpLHJlKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSxUZSgxMyksaWUoKSxyZSgxNCwiaSIsNDUpLFRlKDE1KSxpZSgpLHJlKDE2LCJwIiw0NSksVGUoMTcs''@;'; put 'put ''IiBSdWxlcyBTb3VyY2U6ICIpLHJlKDE4LCJhIiw0NiksVGUoMTkpLGllKCkoKSxyZSgyMCwicCIsNDUpLFRlKDIxLCIgVGFyZ2V0IGRhdGFzZXQ6ICIpLHJlKDIyLCJhIiw0NiksVGUoMjMpLGllKCkoKSgpLHJlKDI0LCJkaXYiLDQ3KSxWdCgyNSwiaG90LXRhYmxlIiw0OCksaWUoKSgpfWlm''@;'; put 'put ''KDImbil7Y29uc3QgZT1FZSgpLHI9ZGEoNDEpO2FlKDUpLHllKCJjbHJJZkFjdGl2ZSIsZS5zZWxlY3RlZFRhYj09PWUuVGFic0VudW0uUnVsZXMpLGFlKDQpLHllKCJjbHJJZkFjdGl2ZSIsZS5zZWxlY3RlZFRhYj09PWUuVGFic0VudW0uRGF0YSksYWUoKSx5ZSgibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dCIsciksYWUoMyksTXIoIiAiLGUuc2VsZWN0ZWRYTE1hcC5pZCwiICIpLGFlKDIpLHZyKGUuc2VsZWN0ZWRYTE1hcC5kZXNjcmlwdGlvbiksYWUoMykseWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrZS5ydWxlc1NvdXJjZSksYWUoKSxNcigiICIsZS5ydWxlc1NvdXJjZSwiICIpLGFl''@;'; put 'put ''KDMpLHllKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Uuc2VsZWN0ZWRYTE1hcC50YXJnZXREUyksYWUoKSxNcigiICIsZS5zZWxlY3RlZFhMTWFwLnRhcmdldERTLCIgIiksYWUoMikseWUoImRhdGEiLGUuc2VsZWN0ZWRUYWI9PT1lLlRhYnNFbnVtLlJ1bGVzP2UueGxtYXBSdWxlczpl''@;'; put 'put ''LnhsRGF0YSkoInNldHRpbmdzIixlLmhvdFRhYmxlU2V0dGluZ3MpfX1mdW5jdGlvbiBHVHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLm9uU2hvd1VwbG9h''@;'; put 'put ''ZE1vZGFsKCkpfSksVnQoMiwiY2xyLWljb24iLDUzKSxyZSgzLCJzcGFuIiksVGUoNCwiVXBsb2FkIiksaWUoKSgpKCl9fWZ1bmN0aW9uICRUdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZ3QoZSksbXQoRWUoMikuc3VibWl0RXhjZWwoKSl9KSxWdCgyLCJjbHItaWNvbiIsNTMpLHJlKDMsInNwYW4iKSxUZSg0LCJTdWJtaXQiKSxpZSgpKCkoKX19ZnVuY3Rpb24gS1R0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCksa3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLFZ0KDIsImNsci1pY29uIiw1NSkscmUoMywic3BhbiIpLFRlKDQsIkRpc2NhcmQiKSxpZSgpKCkoKX19ZnVuY3Rpb24gWFR0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw0''@;'; put 'put ''OSksY3QoMSxHVHQsNSwwLCJkaXYiLDUwKSgyLCRUdCw1LDAsImRpdiIsNTApKDMsS1R0LDUsMCwiZGl2Iiw1MCksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsZS5zdGF0dXM9PT1lLlN0YXR1c0VudW0uUmVhZHlUb1VwbG9hZCksYWUoKSx5ZSgibmdJZiIsZS5zdGF0''@;'; put 'put ''dXM9PT1lLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCksYWUoKSx5ZSgibmdJZiIsZS5zdGF0dXM9PT1lLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciBjMz1mdW5jdGlvbihuKXtyZXR1cm4gbltuLk5vTWFwU2VsZWN0ZWQ9MF09Ik5vTWFwU2VsZWN0ZWQiLG5bbi5GZXRjaGluZ1J1''@;'; put 'put ''bGVzPTFdPSJGZXRjaGluZ1J1bGVzIixuW24uUmVhZHlUb1VwbG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsbltuLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5nRGF0YSIsbltuLlJlYWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJtaXQiLG5bbi5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01''@;'; put 'put ''XT0iU3VibWl0dGluZ0V4dHJhY3RlZERhdGEiLG5bbi5TdWJtaXR0aW5nPTZdPSJTdWJtaXR0aW5nIixufShjM3x8e30pLEdTPWZ1bmN0aW9uKG4pe3JldHVybiBuW24uUnVsZXM9MF09IlJ1bGVzIixuW24uRGF0YT0xXT0iRGF0YSIsbn0oR1N8fHt9KTtsZXQgSF9lPSgoKT0+e2NsYXNzIG57''@;'; put 'put ''Z2V0IGhvdFRhYmxlU2V0dGluZ3MoKXtyZXR1cm57bXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLGNvbEhlYWRlcnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/dGhpcy54bG1hcFJ1bGVzSGVhZGVyczp0aGlzLnhsVXBs''@;'; put 'put ''b2FkSGVhZGVyLGNvbHVtbnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/dGhpcy54bG1hcFJ1bGVzQ29sdW1uczp0aGlzLnhsVXBsb2FkQ29sdW1ucyxmaWx0ZXJzOiEwLGhlaWdodDoiMTAwJSIsc3RyZXRjaEg6ImFsbCIsYWZ0ZXJHZXRDb2xIZWFkZXI6dGhpcy5h''@;'; put 'put ''ZnRlckdldENvbEhlYWRlcixtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hlY2tlcixjZWxsczp0aGlzLmdldENlbGxDb25maWd1cmF0aW9uLG1heFJvd3M6dGhpcy5ob3RUYWJsZU1heFJvd3MsbWFudWFsQ29sdW1uUmVzaXplOiEwLHJvd0hlYWRlcnM6dGhpcy5yb3dIZWFkZXJzLHJv''@;'; put 'put ''d0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlTGljZW5zZUtleSxjbGFzc05hbWU6Imh0RGFyayJ9fWNvbnN0cnVjdG9yKGUscixpLGEsYyxtLEMpe3RoaXMuZXZlbnRTZXJ2aWNlPWUsdGhpcy5saWNlbmNlU2VydmljZT1yLHRoaXMubG9nZ2Vy''@;'; put 'put ''U2VydmljZT1pLHRoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1jLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPW0sdGhpcy5zYXNTZXJ2aWNlPUMsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgSGcsdGhpcy5TdGF0dXNFbnVtPWMzLHRo''@;'; put 'put ''aXMuVGFic0VudW09R1MsdGhpcy5zZWxlY3RlZFRhYj1HUy5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPVduLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFwcz1bXSx0aGlzLnNlbGVjdGVkWExNYXA9dm9pZCAwLHRoaXMuc2VhcmNoU3RyaW5nPSIiLHRoaXMueGxtYXBzTG9hZGlu''@;'; put 'put ''Zz0hMCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9YzMuTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJzPVsiWExNQVBfU0hFRVQiLCJYTE1BUF9SQU5HRV9JRCIsIlhMTUFQX1NUQVJUIiwiWExNQVBfRklOSVNIIl0sdGhpcy54''@;'; put 'put ''bG1hcFJ1bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQX0ZJTklTSCJ9XSx0aGlzLnhsbWFwUnVsZXM9W10sdGhpcy54bFVwbG9hZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lEIiwi''@;'; put 'put ''Uk9XX05PIiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0YToiQ09MX05PIn0se2RhdGE6IlZBTFVFX1RYVCJ9XSx0aGlzLnhsRGF0YT1bXSx0aGlzLnNob3dVcGxvYWRNb2RhbD0h''@;'; put 'put ''MSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IGFhZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGljZW5z''@;'; put 'put ''ZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfWFmdGVyR2V0Q29sSGVhZGVyKGUscil7ci5jbGFzc0xpc3QuYWRkKFduLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9eGxtYXBP''@;'; put 'put ''bkNsaWNrKGUpe2UuaWQhPT10aGlzLnNlbGVjdGVkWExNYXA/LmlkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWUsdGhpcy54bERhdGE9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVV''@;'; put 'put ''cGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMuc2VsZWN0ZWRUYWI9R1MuUnVsZXMsdGhpcy52aWV3WExNYXBSdWxlcygpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIitlLmlkKSl9eGxtYXBMaXN0T25GaWx0''@;'; put 'put ''ZXIoKXt0aGlzLnhsbWFwcz10aGlzLnNlYXJjaFN0cmluZy5sZW5ndGg+MD9Xbi54bG1hcHMuZmlsdGVyKHI9PnIuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk6V24ueGxtYXBzfWlzQWN0aXZlWExNYXAoZSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''c2VsZWN0ZWRYTE1hcD8uaWQ9PT1lfW1heFdpZHRoQ2hlY2tlcihlLHIpe3JldHVybiBlPjIwMD8yMDA6ZX1nZXRDZWxsQ29uZmlndXJhdGlvbigpe3JldHVybntyZWFkT25seTohMH19cm93SGVhZGVycygpe3JldHVybiIgIn1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMuc2hvd1VwbG9hZE1v''@;'; put 'put ''ZGFsPSEwfWZpbGVPdmVyQmFzZShlKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ZX1nZXRGaWxlRGVzYyhlLHI9ITEpe3ZhciBpPXRoaXM7Y29uc3QgYT1yP2VbMF06ZS50YXJnZXQuZmlsZXNbMF07aWYoIWEpcmV0dXJuO2NvbnN0IGM9YS5uYW1lO2lmKHRoaXMuZmlsZW5hbWU9YywieGxz''@;'; put 'put ''Ij09PWMuc2xpY2UoYy5sYXN0SW5kZXhPZigiLiIpKzEsYy5sYXN0SW5kZXhPZigiLiIpKzQpLnRvTG93ZXJDYXNlKCkpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iRXh0cmFjdGluZyBEYXRhIix0aGlzLnN0YXR1cz1jMy5F''@;'; put 'put ''eHRyYWN0aW5nRGF0YTtjb25zdCBDPW5ldyBGaWxlUmVhZGVyO0Mub25sb2FkPWZ1bmN0aW9uKCl7dmFyIFA9WihmdW5jdGlvbiooWSl7Y29uc3QgSj0obj0+e2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkobik7bGV0IGU9IiI7Y29uc3Qgcj10LmJ5dGVMZW5ndGg7Zm9yKGxldCBpPTA7aTxyO2kr''@;'; put 'put ''KyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBlfSkoWS50YXJnZXQucmVzdWx0KTtsZXQgY2U7Y29uc3QgZmU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7Y2U9TDAu''@;'; put 'put ''cmVhZChKLHsuLi5mZX0pfWNhdGNoKEFlKXtpLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLEFlLHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYoIWNlKXJldHVybiBpLmlzTG9hZGluZz0hMSxpLmlzTG9hZGluZ0Rlc2M9IiIsaS5zdGF0dXM9YzMuUmVhZHlUb1VwbG9h''@;'; put 'put ''ZCx2b2lkIGkudXBsb2FkZXIucXVldWUucG9wKCk7aS5leHRyYWN0RGF0YShjZSl9KTtyZXR1cm4gZnVuY3Rpb24oWSl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxDLnJlYWRBc0FycmF5QnVmZmVyKGEpfWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdE''@;'; put 'put ''ZXNjPSIiLHRoaXMuc3RhdHVzPWMzLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8''@;'; put 'put ''L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPWMzLlJlYWR5VG9VcGxvYWQsdGhpcy54bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1HUy5SdWxl''@;'; put 'put ''cyx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VT''@;'; put 'put ''dGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0aClyZXR1cm47dGhpcy5zdGF0dXM9YzMuU3VibWl0dGluZyx0aGlz''@;'; put 'put ''LmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGU9W107Zm9yKGNvbnN0IG0gb2YgdGhpcy51cGxvYWRlci5xdWV1ZSllLnB1c2goe2ZpbGU6bSxmaWxlTmFtZTptLm5hbWV9KTtjb25zdCByPU9iamVjdC5rZXlzKHRoaXMu''@;'; put 'put ''eGxEYXRhWzBdKS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAobT0+T2JqZWN0LnZhbHVlcyhtKS5qb2luKCIsIikpLmpvaW4oIlxuIiksaT1uZXcgQmxvYihbcl0se3R5cGU6ImFwcGxpY2F0''@;'; put 'put ''aW9uL2NzdiJ9KSxhPWdhZShpLHRoaXMuZmlsZW5hbWUrIi5jc3YiKTtlLnB1c2goe2ZpbGU6YSxmaWxlTmFtZTphLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsZSx7dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERT''@;'; put 'put ''fSkudGhlbihtPT57aWYobS5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydCl7Y29uc3QgQz1tLmFkYXB0ZXJSZXNwb25zZTt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixDLnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpDLlNZU1dBUk5JTkdURVhULFNZU0VS''@;'; put 'put ''Uk9SVEVYVDpDLlNZU0VSUk9SVEVYVCxNQUM6Qy5zYXNqc0Fib3J0WzBdLk1BQ30pfWVsc2UgbS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIittLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF0uRFNJRCl9KS5jYXRjaCht''@;'; put 'put ''PT57dGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsbS5yZXNwb25zZSl9KS5maW5hbGx5KCgpPT57dGhpcy5zdGF0dXM9YzMuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiJ9KX1leHRyYWN0RGF0YShl''@;'; put 'put ''KXtjb25zdCByPVtdO3RoaXMueGxtYXBSdWxlcy5mb3JFYWNoKGk9PntsZXQgYT1pLlhMTUFQX1NIRUVUO2lmKGEuc3RhcnRzV2l0aCgiLyIpKXtjb25zdCBmZT1hLnNwbGl0KCIvIilbMV0sQWU9cGFyc2VJbnQoZmUpLTE7YT1lLlNoZWV0TmFtZXNbQWVdfWNvbnN0IGM9ZS5TaGVldHNbYV0s''@;'; put 'put ''bT1MMC51dGlscy5zaGVldF90b19qc29uKGMse3JhdzohMCxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pLEM9Rl9lKGkuWExNQVBfU1RBUlQsbSksUD0oKG4sdCxlKT0+e2lmKCIiPT09dClyZXR1cm4gbjtpZih0LnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYodD10LnJlcGxhY2UoIkFCU09M''@;'; put 'put ''VVRFICIsIiIpKSx0LnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCByPV9hZSh0KTtpZihyKXtjb25zdHtyb3c6aSxjb2x1bW46YX09cix7cjpjLGM6bX09TDAudXRpbHMuZGVjb2RlX2NlbGwobik7dD1MMC51dGlscy5lbmNvZGVfY2VsbCh7cjpjK2ksYzptK2F9KX19aWYodC5zdGFy''@;'; put 'put ''dHNXaXRoKCJNQVRDSCAiKSYmKHQ9Rl9lKHQsZSkpLCJMQVNURE9XTiI9PT10KXtjb25zdHtyLGM6aX09TDAudXRpbHMuZGVjb2RlX2NlbGwobiksYT1MMC51dGlscy5lbmNvZGVfY29sKGkpO2xldCBjPXI7Zm9yKGxldCBtPXIrMTttPGUubGVuZ3RoJiZlW21dW2FdO20rKyljPW07dD1hKyhj''@;'; put 'put ''KzEpfWlmKCJCTEFOS1JPVyI9PT10KXtjb25zdHtyfT1MMC51dGlscy5kZWNvZGVfY2VsbChuKTtsZXQgaT1yO2ZvcihsZXQgQz1yKzE7QzxlLmxlbmd0aCYmIVJUdChlW0NdKTtDKyspaT1DO3Q9T2JqZWN0LmtleXMoZVtpXSkuZmlsdGVyKEM9PiJfX3Jvd051bV9fIiE9PUMpLnJlZHVjZSgo''@;'; put 'put ''QyxQKT0+UD5DP1A6QywiIikrKGkrMSl9cmV0dXJuIHR9KShDLGkuWExNQVBfRklOSVNILG0pLFk9YCR7Q306JHtQfWAsSj1MMC51dGlscy5kZWNvZGVfcmFuZ2UoWSksY2U9TDAudXRpbHMuc2hlZXRfdG9fanNvbihjLHtyYXc6ITAscmFuZ2U6WSxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0p''@;'; put 'put ''O2ZvcihsZXQgZmU9MDtmZTxjZS5sZW5ndGg7ZmUrKyl7Y29uc3QgQWU9Y2VbZmVdO2ZvcihsZXQgSGU9Si5zLmMsWGU9MDtIZTw9Si5lLmM7SGUrKyxYZSsrKXtjb25zdCBydD1MMC51dGlscy5lbmNvZGVfY29sKEhlKTtydCBpbiBBZSYmci5wdXNoKHtMT0FEX1JFRjoiMCIsWExNQVBfSUQ6''@;'; put 'put ''aS5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDppLlhMTUFQX1JBTkdFX0lELFJPV19OTzpmZSsxLENPTF9OTzpYZSsxLFZBTFVFX1RYVDpBZVtydF19KX19fSksdGhpcy5zdGF0dXM9YzMuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy54''@;'; put 'put ''bERhdGE9cix0aGlzLnNlbGVjdGVkVGFiPUdTLkRhdGF9dmlld1hMTWFwUnVsZXMoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2Uuc2VsZWN0ZWRYTE1hcCYmKGUuaXNMb2FkaW5nPSEwLGUuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsZS5zdGF0dXM9YzMu''@;'; put 'put ''RmV0Y2hpbmdSdWxlcyx5aWVsZCBlLnNhc1N0b3JlU2VydmljZS5nZXRYTE1hcFJ1bGVzKGUuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihyPT57ZS54bG1hcFJ1bGVzPXIueGxtYXBydWxlcyxlLnN0YXR1cz1jMy5SZWFkeVRvVXBsb2FkfSkuY2F0Y2gocj0+e2UubG9nZ2VyU2VydmljZS5lcnJv''@;'; put 'put ''cihyKX0pLGUuaXNMb2FkaW5nPSExLGUuaXNMb2FkaW5nRGVzYz0iIil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Xbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGU9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoZSl7Y29uc3Qgcj10aGlzLnhsbWFwcy5maW5k''@;'; put 'put ''KGk9PmkuaWQ9PT1lKTtyJiYodGhpcy5zZWxlY3RlZFhMTWFwPXIsdGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWV9KX1uZ0FmdGVyVmlld0lu''@;'; put 'put ''aXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7V24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1''@;'; put 'put ''cm4gbmV3KHJ8fG4pKFdlKFNjKSxXZShLMSksV2UobWgpLFdlKHMwKSxXZShybCksV2UoRTIpLFdlKEpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHIsaSl7aWYoMSZyJiZXYShPVHQsNSks''@;'; put 'put ''MiZyKXtsZXQgYTtkaShhPWhpKCkpJiYoaS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1hKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKHIsaSl7MiZyJiZicigiY29udGVudC1jb250YWluZXIiLGkuY29udGVudENvbnRhaW5lckNsYXNzKX0sc3RhbmRhbG9uZTohMSxkZWNs''@;'; put 'put ''czo0Mix2YXJzOjE2LGNvbnN0czpbWyJzZWFyY2hYTE1hcFRyZWVJbnB1dCIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJhY3Rpb25CdXR0b25zIiwiIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJl''@;'; put 'put ''ZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgSWQiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwi''@;'; put 'put ''c2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLCJjbGFzcyIsImNhcmQgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIiw0LCJuZ0lmIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9w''@;'; put 'put ''ZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIi''@;'; put 'put ''XSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIs''@;'; put 'put ''ImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsImNoYW5nZSIsInVwbG9hZGVyIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3Bl''@;'; put 'put ''biJdLFsxLCJtLTAiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJz''@;'; put 'put ''aGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsZSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5''@;'; put 'put ''L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkgbXQtMTAiLCJjZHMtdGV4dCIsInNlY3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlv''@;'; put 'put ''biIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsiY2xy''@;'; put 'put ''VGFiTGluayIsIiIsMywiY2xpY2siXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJjbHItcm93IiwibS0wIiwibWItMTAtaSIsInZpZXdlclRpdGxlIl0sWzEsImQtZmxleCIsImNsci1jb2wtMTIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10''@;'; put 'put ''LTUtaSJdLFsiY2RzLXRleHQiLCJsYWJlbExpbmsiLDEsIm1sLTEwIiwzLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1mbGV4LTEiXSxbImlkIiwiaG90LXRhYmxlIiwzLCJkYXRhIiwic2V0dGluZ3MiXSxbMSwiY2xyLXJvdyIsIm0tMCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJj''@;'; put 'put ''bGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItY29sLTEyIGNsci1jb2wtbGctNCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiXSxbInR5cGUiLCJidXR0b24iLDEs''@;'; put 'put ''ImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsi''@;'; put 'put ''c2hhcGUiLCJ0aW1lcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpe2lmKDEmcil7Y29uc3QgYT1JbigpO3JlKDAsImFwcC1zaWRlYmFyIiksY3QoMSxQVHQsMiwwLCJkaXYiLDMpLHJlKDIsImNsci10cmVlIikoMywiY2xyLXRyZWUtbm9kZSIsNCkoNCwiZGl2Iiw1KSg1LCJpbnB1dCIsNiww''@;'; put 'put ''KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkuc2VhcmNoU3RyaW5nLG0pfHwoaS5zZWFyY2hTdHJpbmc9bSksbXQobSl9KSxrdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGEpLG10KGkueGxtYXBMaXN0T25GaWx0ZXIoKSl9KSxpZSgpLGN0''@;'; put 'put ''KDcsRlR0LDEsMCwiY2xyLWljb24iLDcpKDgsSFR0LDEsMCwiY2xyLWljb24iLDgpLGllKCkoKSxjdCg5LE5UdCw1LDMsIm5nLWNvbnRhaW5lciIsOSksaWUoKSgpLHJlKDEwLCJkaXYiLDEwKSxjdCgxMSxqVHQsNCwyLCJkaXYiLDExKSgxMix6VHQsNiwxLCJkaXYiLDEyKSgxMyxZVHQsMjYs''@;'; put 'put ''MTEsImRpdiIsMTMpLHJlKDE0LCJjbHItbW9kYWwiLDE0KSxrdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLmZpbGVPdmVyQmFzZShtKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLmdldEZpbGVEZXNjKG0sITApKX0pLGNpKCJj''@;'; put 'put ''bHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLnNob3dVcGxvYWRNb2RhbCxtKXx8KGkuc2hvd1VwbG9hZE1vZGFsPW0pLG10KG0pfSkscmUoMTUsImgzIiwxNSksVGUoMTYsIlVwbG9hZCBGaWxlIiksaWUoKSxyZSgxNywiZGl2IiwxNikoMTgsImRpdiIs''@;'; put 'put ''MTcpKDE5LCJzcGFuIiksVGUoMjAsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksaWUoKSgpLHJlKDIxLCJkaXYiLDE4KSgyMiwiZGl2IiwxOSkoMjMsImRpdiIsMjApKDI0LCJzcGFuIiwyMSkoMjUsImxhYmVsIiwyMiksVGUoMjYsIiBCcm93c2UgIiksaWUoKSgpLHJlKDI3LCJp''@;'; put 'put ''bnB1dCIsMjMsMSksa3QoImNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLG10KGkuZ2V0RmlsZURlc2MobSkpfSksaWUoKSgpKCkoKSgpKCkscmUoMjksImNsci1tb2RhbCIsMjQpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLnN1''@;'; put 'put ''Ym1pdExpbWl0Tm90aWNlLG0pfHwoaS5zdWJtaXRMaW1pdE5vdGljZT1tKSxtdChtKX0pLHJlKDMwLCJoMyIsMTUpLFRlKDMxLCJOb3RpY2UiKSxpZSgpLHJlKDMyLCJkaXYiLDE2KSgzMywicCIsMjUpLFRlKDM0KSxpZSgpKCkscmUoMzUsImRpdiIsMjYpKDM2LCJidXR0b24iLDI3KSxrdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGEpLG10KGkuc3VibWl0TGltaXROb3RpY2U9ITEpfSksVGUoMzcsIiBDYW5jZWwgIiksaWUoKSxyZSgzOCwiYnV0dG9uIiwyNyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxpLnN1Ym1pdCgpLG10KGkuc3VibWl0TGltaXRO''@;'; put 'put ''b3RpY2U9ITEpfSksVGUoMzksIiBTdWJtaXQgIiksaWUoKSgpKCkoKSxjdCg0MCxYVHQsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLENjKX1pZigyJnIpe2NvbnN0IGE9ZGEoNik7YWUoKSx5ZSgibmdJZiIsaS54bG1hcHNMb2FkaW5nKSxhZSg0KSxsaSgibmdNb2RlbCIsaS5zZWFyY2hTdHJp''@;'; put 'put ''bmcpLGFlKDIpLHllKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxhZSgpLHllKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKSxhZSgpLHllKCJuZ0Zvck9mIixpLnhsbWFwcyksYWUoMikseWUoIm5nSWYiLCFpLnNlbGVjdGVkWExNYXApLGFlKCkseWUoIm5nSWYiLGkuaXNMb2FkaW5nKSxhZSgp''@;'; put 'put ''LHllKCJuZ0lmIiwhaS5pc0xvYWRpbmcmJmkuc2VsZWN0ZWRYTE1hcCksYWUoKSx5ZSgidXBsb2FkZXIiLGkudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxsaSgiY2xyTW9kYWxPcGVuIixp''@;'; put 'put ''LnNob3dVcGxvYWRNb2RhbCksYWUoMTMpLHllKCJ1cGxvYWRlciIsaS51cGxvYWRlciksYWUoMiksbGkoImNsck1vZGFsT3BlbiIsaS5zdWJtaXRMaW1pdE5vdGljZSksYWUoNSksTXIoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsaS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0''@;'; put 'put ''X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX0sZGVwZW5kZW5jaWVzOltHNSxYMSx6bCxpbCxRcyxTMixFaCx1NSxVbCxodSxjMCxWdyxw''@;'; put 'put ''cyxQZCxINixWNixndixONixGNixmdixTaCxhZyxocyxtYSxrZCxUQSxrX2UsRF9lLGlnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpO2NvbnN0IHFUdD1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ry''@;'; put 'put ''b3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAteGxtYXAtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxv''@;'; put 'put ''bmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJlZ0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKSxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OkhfZX0se3BhdGg6Ijpp''@;'; put 'put ''ZCIsY29tcG9uZW50OkhfZX1dfV07bGV0IEpUdD0oKCk9PntjbGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj16bih7aW1wb3J0czpb''@;'; put 'put ''WWMuZm9yQ2hpbGQocVR0KSxZY119KX19cmV0dXJuIG59KSgpO1FEKCk7bGV0IFFUdD0oKCk9PntjbGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWluaj16bih7aW1wb3J0czpbWnksSlR0LE9jLE0xLFl5LEZhLHRJLGwzXX0pfX1yZXR1cm4gbn0pKCksZUF0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBu''@;'; put 'put ''ZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihy''@;'; put 'put ''LGkpezEmciYmVnQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2U1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpO2NvbnN0IGJhZT0obix0LGUpPT57dC5jbGFzc0xpc3QuYWRkKFduLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LHRBdD1bImNv''@;'; put 'put ''bnRlbnRBcmVhIl0sbkF0PVsiaG90SW5zdGFuY2VNYWluIl0sckF0PVsiaG90SW5zdGFuY2VVc2VyRGF0YXNldCJdO2Z1bmN0aW9uIGlBdChuLHQpezEmbiYmKHJlKDAsImRpdiIsMjYpLFZ0KDEsImNsci1zcGlubmVyIiwyNCksaWUoKSl9ZnVuY3Rpb24gYUF0KG4sdCl7aWYoMSZuKXtjb25z''@;'; put 'put ''dCBlPUluKCk7cmUoMCwiZGl2IiwyNykoMSwiYnV0dG9uIiwyOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChkYSg0KS5jbGljaygpKX0pLFRlKDIsIiBCcm93c2UgZmlsZSAiKSxpZSgpLHJlKDMsImlucHV0IiwyOSwxKSxrdCgiY2hhbmdlIixmdW5jdGlvbihpKXty''@;'; put 'put ''ZXR1cm4gZ3QoZSksbXQoRWUoKS5vbkZpbGVDaGFuZ2UoaSkpfSksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoImRpc2FibGVkIixudWxsIT09ZS5zZWxlY3RlZEZpbGV8fGUuc3VibWl0dGluZ0Nzdil9fWZ1bmN0aW9uIG9BdChuLHQpe2lmKDEmbil7Y29uc3QgZT1Jbigp''@;'; put 'put ''O3JlKDAsImRpdiIsMjcpKDEsImJ1dHRvbiIsMzIpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikub25EaXNjYXJkKCkpfSksVGUoMiwiIERpc2NhcmQgIiksaWUoKSxyZSgzLCJidXR0b24iLDMzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUp''@;'; put 'put ''LG10KEVlKDIpLm9uU3VibWl0QWxsKCkpfSksVGUoNCwiIFN1Ym1pdCBBbGwgIiksaWUoKSgpfX1mdW5jdGlvbiBzQXQobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiwzOCl9ZnVuY3Rpb24gbEF0KG4sdCl7MSZuJiZWdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIGNBdChuLHQpe2lmKDEm''@;'; put 'put ''biYmKHJpKDApLGN0KDEsc0F0LDEsMCwiY2RzLWljb24iLDM2KSgyLGxBdCwxLDAsImNkcy1pY29uIiwzNyksaWkoKSksMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLGUuc3VibWl0UmVzdWx0LmVycm9yKSxhZSgpLHllKCJuZ0lmIixlLnN1Ym1pdFJlc3VsdC5z''@;'; put 'put ''dWNjZXNzKX19ZnVuY3Rpb24gdUF0KG4sdCl7MSZuJiZWdCgwLCJjZHMtaWNvbiIsMzgpfWZ1bmN0aW9uIGRBdChuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDQxKX1mdW5jdGlvbiBoQXQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLHVBdCwxLDAsImNkcy1pY29uIiwzNikoMixkQXQsMSww''@;'; put 'put ''LCJjZHMtaWNvbiIsNDApLGlpKCkpLDImbil7Y29uc3QgZT1FZSgyKS4kaW1wbGljaXQ7YWUoKSx5ZSgibmdJZiIsIShlLmRhdGFzb3VyY2UubGVuZ3RoJiZlLnBhcnNlUmVzdWx0KSksYWUoKSx5ZSgibmdJZiIsZS5kYXRhc291cmNlLmxlbmd0aCYmZS5wYXJzZVJlc3VsdCl9fWZ1bmN0aW9u''@;'; put 'put ''IGZBdChuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDQxKX1mdW5jdGlvbiBwQXQobix0KXsxJm4mJlZ0KDAsImNsci1zcGlubmVyIiw0Myl9ZnVuY3Rpb24gZ0F0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxmQXQsMSwwLCJjZHMtaWNvbiIsNDApKDIscEF0LDEsMCwiY2xyLXNwaW5uZXIi''@;'; put 'put ''LDQyKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoMikuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLCFlLnBhcnNpbmdUYWJsZSksYWUoKSx5ZSgibmdJZiIsZS5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBtQXQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLGhBdCwzLDIsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''NikoMixnQXQsMywyLCJuZy1jb250YWluZXIiLDYpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdDthZSgpLHllKCJuZ0lmIixlLmRhdGFzb3VyY2UpLGFlKCkseWUoIm5nSWYiLCFlLmRhdGFzb3VyY2UpfX1mdW5jdGlvbiB2QXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTty''@;'; put 'put ''ZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzNCksa3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0O3JldHVybiBtdChFZSgyKS5vblBhcnNlZERhdGFzZXRDbGljayhpKSl9KSxjdCgyLGNBdCwzLDIsIm5nLWNvbnRhaW5lciIsNikoMyxtQXQsMywy''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDYpLHJlKDQsInNwYW4iLDM1KSxUZSg1KSxpZSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoKSxicigiYWN0aXZlIixlLmFjdGl2ZSksYWUoKSx5ZSgibmdJZiIsZS5zdWJtaXRSZXN1bHQpLGFlKCkseWUoIm5nSWYiLCFlLnN1Ym1pdFJlc3Vs''@;'; put 'put ''dCksYWUoMiksTXIoIiAiLGUubGliZHMsIiAiKX19ZnVuY3Rpb24geUF0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxvQXQsNSwwLCJkaXYiLDUpLHJlKDIsInAiLDMwKSxUZSgzLCJGb3VuZCB0YWJsZXM6IiksaWUoKSxyZSg0LCJjbHItdHJlZSIpLGN0KDUsdkF0LDYsNSwiY2xyLXRyZWUt''@;'; put 'put ''bm9kZSIsMzEpLGllKCksaWkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsIWUuZXhjZWxzU3VibWl0dGVkKSxhZSg0KSx5ZSgibmdGb3JPZiIsZS5wYXJzZWREYXRhc2V0cyl9fWZ1bmN0aW9uIF9BdChuLHQpezEmbiYmVnQoMCwiY2RzLWljb24iLDM4KX1mdW5jdGlvbiBi''@;'; put 'put ''QXQobix0KXsxJm4mJlZ0KDAsImNkcy1pY29uIiwzOSl9ZnVuY3Rpb24gd0F0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQo''@;'; put 'put ''RWUoMikub25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xpY2soaSkpfSksY3QoMixfQXQsMSwwLCJjZHMtaWNvbiIsMzYpKDMsYkF0LDEsMCwiY2RzLWljb24iLDM3KSxWdCg0LCJjZHMtaWNvbiIsNDEpLFRlKDUpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoKSxicigiYWN0''@;'; put 'put ''aXZlIixlLmFjdGl2ZSksYWUoKSx5ZSgibmdJZiIsZS5lcnJvciksYWUoKSx5ZSgibmdJZiIsZS5zdWNjZXNzKSxhZSgyKSxNcigiICIsZS5saWJkcywiICIpfX1mdW5jdGlvbiBDQXQobix0KXtpZigxJm4mJihyaSgwKSxyZSgxLCJwIiw0NCksVGUoMiwiU3VibWl0dGVkIHRhYmxlczoiKSxp''@;'; put 'put ''ZSgpLHJlKDMsImNsci10cmVlIiksY3QoNCx3QXQsNiw1LCJjbHItdHJlZS1ub2RlIiwzMSksaWUoKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSg0KSx5ZSgibmdGb3JPZiIsZS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cyl9fWZ1bmN0aW9uIFNBdChuLHQpezEmbiYmKHJlKDAsImRpdiIsNDYp''@;'; put 'put ''LFZ0KDEsImNsci1pY29uIiw0NykscmUoMiwicCIsNDgpLFRlKDMsIiBQbGVhc2UgdXBsb2FkIGEgZmlsZSAiKSxpZSgpKCkpfWZ1bmN0aW9uIE1BdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImRpdiIsNDkpKDIsImRpdiIsNTApKDMsInAiLDUxKSxUZSg0LCIgU2Vs''@;'; put 'put ''ZWN0ZWQgZmlsZTogIikscmUoNSwic3Ryb25nIiksVGUoNiksaWUoKSxyZSg3LCJjbHItdG9vbHRpcCIpKDgsImNkcy1pY29uIiw1Miksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgyKS5vbkRpc2NhcmRGaWxlKCkpfSksaWUoKSxyZSg5LCJjbHItdG9vbHRpcC1j''@;'; put 'put ''b250ZW50IiksVGUoMTAsIiBEaXNjYXJkIHRoZSBmaWxlICIpLGllKCkoKSgpLHJlKDExLCJwIiw1MyksVGUoMTIsIiBGaWxlIHNpemU6ICIpLHJlKDEzLCJzdHJvbmciKSxUZSgxNCksaWUoKSgpLHJlKDE1LCJwIiw1NCksVGUoMTYsIiBQYXN0ZSBvciB0eXBlIHRoZSBsaXN0IG9mIGRhdGFz''@;'; put 'put ''ZXRzIHRvIHVwbG9hZDogIiksaWUoKSxyZSgxNywiY2xyLWNvbnRyb2wtaGVscGVyIiw1NSksVGUoMTgsIkVhY2ggcm93IGlzIG9uZSBkYXRhc2V0LiBXZSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRhYmxlcyBieSB0aGUgc2hlZXRuYW1lIGFuZCBwb3B1bGF0ZSBpZiBhbnkuIiksaWUo''@;'; put 'put ''KSxWdCgxOSwiaG90LXRhYmxlIiw1NiwyKSxyZSgyMSwiZGl2Iiw1NykoMjIsImJ1dHRvbiIsNTgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikub25TdGFydFBhcnNpbmdGaWxlKCkpfSksVGUoMjMsIiBDb250aW51ZSAiKSxpZSgpKCkoKSgpLGlpKCl9aWYo''@;'; put 'put ''MiZuKXtjb25zdCBlPUVlKDIpO2FlKDYpLHZyKGUuc2VsZWN0ZWRGaWxlLm5hbWUpLGFlKDgpLE1yKCIiLGUuc2VsZWN0ZWRGaWxlLnNpemVNQiwiIE1CIiksYWUoNSkseWUoInNldHRpbmdzIixlLmhvdFVzZXJEYXRhc2V0c1NldHRpbmdzKSxhZSgzKSx5ZSgiZGlzYWJsZWQiLCFlLm1hdGNo''@;'; put 'put ''ZWREYXRhc2V0cy5sZW5ndGgpKCJjbHJMb2FkaW5nIixlLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiB4QXQobix0KXtpZigxJm4mJihyaSgwKSxWdCgxLCJjbHItaWNvbiIsNTkpLHJlKDIsInAiLDQ4KSxUZSgzKSxpZSgpLGlpKCkpLDImbil7Y29uc3QgZT1FZSg0KTthZSgzKSxNcigiICIs''@;'; put 'put ''ZS5maWxlTG9hZGluZ1N0YXRlLCIuLi4gIil9fWZ1bmN0aW9uIEVBdChuLHQpezEmbiYmKHJpKDApLFZ0KDEsImNsci1pY29uIiw2MCkscmUoMiwicCIsNDgpLFRlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIGRhdGEgIiksaWUoKSxpaSgp''@;'; put 'put ''KX1mdW5jdGlvbiBUQXQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDQ2KSxjdCgxLHhBdCw0LDEsIm5nLWNvbnRhaW5lciIsNikoMixFQXQsNCwwLCJuZy1jb250YWluZXIiLDYpLGllKCkpLDImbil7Y29uc3QgZT1FZSgzKTthZSgpLHllKCJuZ0lmIixlLmZpbGVMb2FkaW5nU3RhdGUhPT1l''@;'; put 'put ''LkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKSxhZSgpLHllKCJuZ0lmIixlLmZpbGVMb2FkaW5nU3RhdGU9PT1lLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKX19ZnVuY3Rpb24gQUF0KG4sdCl7MSZuJiYocmUoMCwic3BhbiIsNzcpKDEsInN0cm9uZyIpLFRlKDIsIlNVQ0NFU1MiKSxpZSgpKCkp''@;'; put 'put ''fWZ1bmN0aW9uIGtBdChuLHQpezEmbiYmKHJlKDAsInNwYW4iLDc4KSgxLCJzdHJvbmciKSxUZSgyLCJFUlJPUiIpLGllKCkoKSl9ZnVuY3Rpb24gREF0KG4sdCl7MSZuJiYocmUoMCwicCIsNjUpLFRlKDEsIiBFcnJvciBkZXRhaWxzOiAiKSxpZSgpKX1mdW5jdGlvbiBJQXQobix0KXtpZigx''@;'; put 'put ''Jm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24iLDc5KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSg1KTtyZXR1cm4gbXQoaS5yZVN1Ym1pdFRhYmxlKGkuYWN0aXZlUGFyc2VkRGF0YXNldCkpfSksVGUoMSwiIFJlc3VibWl0ICIpLGllKCl9MiZuJiZ5ZSgiY2xy''@;'; put 'put ''TG9hZGluZyIsRWUoNSkuc3VibWl0TG9hZGluZyl9ZnVuY3Rpb24gUkF0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw3MSkoMSwiZGl2IikoMiwicCIsNjQpLFRlKDMsIiBTdWJtaXQgU3RhdHVzOiAiKSxjdCg0LEFBdCwzLDAsInNwYW4iLDcyKSg1LGtBdCwzLDAsInNw''@;'; put 'put ''YW4iLDczKSxpZSgpLGN0KDYsREF0LDIsMCwicCIsNzQpLGllKCkscmUoNywiZGl2IiksY3QoOCxJQXQsMiwxLCJidXR0b24iLDc1KSxyZSg5LCJidXR0b24iLDc2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSg0KTtyZXR1cm4gbXQoaS5kb3dubG9hZEZpbGUoaS5h''@;'; put 'put ''Y3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5sb2d8fGkuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuc3VjY2Vzc3x8aS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfSksVGUoMTAsIiBEb3dubG9hZCBsb2cgIiksaWUoKSgpKCl9aWYoMiZu''@;'; put 'put ''KXtjb25zdCBlPUVlKDQpO2FlKDQpLHllKCJuZ0lmIixudWxsPT1lLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6ZS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzKSxhZSgpLHllKCJuZ0lmIixudWxsPT1lLmFjdGl2ZVBhcnNlZERhdGFzZXQu''@;'; put 'put ''c3VibWl0UmVzdWx0P251bGw6ZS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksYWUoKSx5ZSgibmdJZiIsbnVsbD09ZS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmUuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLGFl''@;'; put 'put ''KDIpLHllKCJuZ0lmIiwhZS5zdWJtaXR0aW5nQ3N2JiYobnVsbD09ZS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmUuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpKX19ZnVuY3Rpb24gTEF0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw4MCko''@;'; put 'put ''MSwiZGl2Iiw4MSksVGUoMiksaGwoMywianNvbiIpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDQpO2FlKDIpLE1yKCIgIixSYygzLDEsbnVsbD09ZS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmUuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3Ip''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIE9BdChuLHQpe2lmKDEmbiYmKHJpKDApLHJlKDEsInN0cm9uZyIpLFRlKDIpLGllKCksaWkoKSksMiZuKXtjb25zdCBlPUVlKDQpO2FlKDIpLG4wKCciJyxudWxsPT1lLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcz9udWxsOmUu''@;'; put 'put ''YWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzLnNoZWV0TmFtZSwnIiEnLG51bGw9PWUuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6ZS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRS''@;'; put 'put ''ZXMucmFuZ2VBZGRyZXNzLCIiKX19ZnVuY3Rpb24gUEF0KG4sdCl7MSZuJiYocmUoMCwic3Ryb25nIiksVGUoMSwiTm8gZGF0YSBmb3VuZCIpLGllKCkpfWZ1bmN0aW9uIEZBdChuLHQpezEmbiYmKHJlKDAsInNwYW4iLDgzKSgxLCJzdHJvbmciKSxUZSgyLCJTZWFyY2hpbmcgZm9yIHRoZSBk''@;'; put 'put ''YXRhLi4uIiksaWUoKSxWdCgzLCJjbHItc3Bpbm5lciIsODQpLGllKCkpfWZ1bmN0aW9uIEhBdChuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsUEF0LDIsMCwic3Ryb25nIiw2KSgyLEZBdCw0LDAsInNwYW4iLDgyKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoNCk7YWUoKSx5ZSgibmdJZiIsIWUu''@;'; put 'put ''YWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpLGFlKCkseWUoIm5nSWYiLGUuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBOQXQobix0KXsxJm4mJihyZSgwLCJkaXYiLDg1KSxWdCgxLCJjbHItc3Bpbm5lciIsODYpLGllKCkpfWZ1bmN0aW9uIFZB''@;'; put 'put ''dChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLGN0KDEsUkF0LDExLDQsImRpdiIsNjEpKDIsTEF0LDQsMywiZGl2Iiw2MikscmUoMywiZGl2Iiw2MykoNCwiZGl2IikoNSwicCIsNjQpLFRlKDYsIiBGb3VuZCBpbiByYW5nZTogIiksY3QoNyxPQXQsMywyLCJuZy1jb250YWluZXIi''@;'; put 'put ''LDYpKDgsSEF0LDMsMiwibmctY29udGFpbmVyIiw2KSxpZSgpLHJlKDksInAiLDY1KSxUZSgxMCwiIERhdGFzZXQ6ICIpLHJlKDExLCJzdHJvbmciKSgxMiwiY2xyLXRvb2x0aXAiKSgxMywiYSIsNjYpLFRlKDE0KSxpZSgpLHJlKDE1LCJjbHItdG9vbHRpcC1jb250ZW50Iiw2NyksVGUoMTYs''@;'; put 'put ''IiBDbGljayB0byBlZGl0IHRoZSB0YWJsZSAiKSxpZSgpKCkoKSgpKCkscmUoMTcsImRpdiIpKDE4LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgxOSwiaW5wdXQiLDY4KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgzKTtyZXR1cm4gdWkoYS5hY3RpdmVQ''@;'; put 'put ''YXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24saSl8fChhLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbj1pKSxtdChpKX0pLGllKCkscmUoMjAsImxhYmVsIiksVGUoMjEsIkluY2x1ZGUgaW4gc3VibWlzc2lvbiIpLGllKCkoKSgpKCksY3QoMjIsTkF0LDIs''@;'; put 'put ''MCwiZGl2Iiw2OSksVnQoMjMsImhvdC10YWJsZSIsNzAsMyksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSx5ZSgibmdJZiIsZS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdCksYWUoKSx5ZSgibmdJZiIsbnVsbD09ZS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJl''@;'; put 'put ''c3VsdD9udWxsOmUuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLGFlKDUpLHllKCJuZ0lmIixlLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGFlKCkseWUoIm5nSWYiLCFlLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGFlKDUpLHllKCJy''@;'; put 'put ''b3V0ZXJMaW5rIiwiL2VkaXRvci8iK2UuYWN0aXZlUGFyc2VkRGF0YXNldC5saWJkcyksYWUoKSx2cihlLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMpLGFlKCkseWUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGFlKDQpLGxpKCJuZ01vZGVsIixlLmFjdGl2''@;'; put 'put ''ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbikseWUoImRpc2FibGVkIiwhKGUuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNlJiZlLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpKSxhZSgzKSx5ZSgibmdJZiIsZS5pc0hvdEhpZGRlbiksYWUoKSx5ZSgic2V0''@;'; put 'put ''dGluZ3MiLGUuaG90TWFpblRhYmxlU2V0dGluZ3MpfX1mdW5jdGlvbiBCQXQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLFRBdCwzLDIsImRpdiIsMTEpKDIsVkF0LDI1LDEyLCJuZy1jb250YWluZXIiLDYpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIiwhZS5hY3Rp''@;'; put 'put ''dmVQYXJzZWREYXRhc2V0KSxhZSgpLHllKCJuZ0lmIixlLmFjdGl2ZVBhcnNlZERhdGFzZXQpfX1mdW5jdGlvbiBqQXQobix0KXsxJm4mJihyZSgwLCJkaXYiLDQ2KSxWdCgxLCJjbHItaWNvbiIsNjApLHJlKDIsInAiLDQ4KSxUZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGRhdGFzZXQgb24gdGhl''@;'; put 'put ''IGxlZnQgdG8gcmV2aWV3IHRoZSBzdWJtaXQgcmVzdWx0cyAiKSxpZSgpKCkpfWZ1bmN0aW9uIHpBdChuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsakF0LDQsMCwiZGl2IiwxMSksaWkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKCkseWUoIm5nSWYiLCFlLmFjdGl2ZVN1Ym1pdHRlZENzdkRh''@;'; put 'put ''dGFzZXQpfX1mdW5jdGlvbiBVQXQobix0KXsxJm4mJihyZSgwLCJzcGFuIiw3NykoMSwic3Ryb25nIiksVGUoMiwiU1VDQ0VTUyIpLGllKCkoKSl9ZnVuY3Rpb24gV0F0KG4sdCl7MSZuJiYocmUoMCwic3BhbiIsNzgpKDEsInN0cm9uZyIpLFRlKDIsIkVSUk9SIiksaWUoKSgpKX1mdW5jdGlv''@;'; put 'put ''biBaQXQobix0KXsxJm4mJihyZSgwLCJwIiw2NSksVGUoMSwiIEVycm9yIGRldGFpbHM6ICIpLGllKCkpfWZ1bmN0aW9uIFlBdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsODApKDEsImRpdiIsODEpLFRlKDIpLGhsKDMsImpzb24iKSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgzKTthZSgy''@;'; put 'put ''KSxNcigiICIsUmMoMywxLGUuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvciksIiAiKX19ZnVuY3Rpb24gR0F0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwiZGl2Iiw4NykoMiwiZGl2IikoMywicCIsNjQpLFRlKDQsIiBNYXRjaGVkIHdpdGggZGF0YXNldDog''@;'; put 'put ''IikscmUoNSwic3Ryb25nIikoNiwiY2xyLXRvb2x0aXAiKSg3LCJhIiw2NiksVGUoOCksaWUoKSxyZSg5LCJjbHItdG9vbHRpcC1jb250ZW50Iiw2NyksVGUoMTAsIiBDbGljayB0byBlZGl0IHRoZSB0YWJsZSAiKSxpZSgpKCkoKSgpLHJlKDExLCJwIiw2NCksVGUoMTIsIiBTdGF0dXM6ICIp''@;'; put 'put ''LGN0KDEzLFVBdCwzLDAsInNwYW4iLDcyKSgxNCxXQXQsMywwLCJzcGFuIiw3MyksaWUoKSxjdCgxNSxaQXQsMiwwLCJwIiw3NCksaWUoKSxyZSgxNiwiZGl2IikoMTcsImJ1dHRvbiIsNzYpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVybiBtdChpLmRv''@;'; put 'put ''d25sb2FkRmlsZShpLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2Vzc3x8aS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSl9KSxUZSgxOCwiIERvd25sb2FkIGxvZyAiKSxpZSgpKCkoKSxjdCgxOSxZQXQsNCwzLCJkaXYiLDYyKSxpaSgpfWlmKDImbil7Y29uc3QgZT1F''@;'; put 'put ''ZSgyKTthZSg3KSx5ZSgicm91dGVyTGluayIsIi9lZGl0b3IvIitlLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMpLGFlKCksdnIoZS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmxpYmRzKSxhZSgpLHllKCJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIpKCJjbHJTaXplIiwic20i''@;'; put 'put ''KSxhZSg0KSx5ZSgibmdJZiIsZS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LnN1Y2Nlc3MpLGFlKCkseWUoIm5nSWYiLGUuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvciksYWUoKSx5ZSgibmdJZiIsZS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxhZSg0KSx5ZSgi''@;'; put 'put ''bmdJZiIsZS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKX19ZnVuY3Rpb24gJEF0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxNQXQsMjQsNSwibmctY29udGFpbmVyIiw2KSgyLEJBdCwzLDIsIm5nLWNvbnRhaW5lciIsNikoMyx6QXQsMiwxLCJuZy1jb250YWluZXIiLDYpKDQs''@;'; put 'put ''R0F0LDIwLDgsIm5nLWNvbnRhaW5lciIsNiksaWkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsIWUucGFyc2VkRGF0YXNldHMubGVuZ3RoJiZudWxsIT09ZS5zZWxlY3RlZEZpbGUpLGFlKCkseWUoIm5nSWYiLGUucGFyc2VkRGF0YXNldHMubGVuZ3RoJiYhZS5zdWJtaXR0''@;'; put 'put ''ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGFlKCkseWUoIm5nSWYiLGUuc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxhZSgpLHllKCJuZ0lmIixlLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQpfX1mdW5jdGlvbiBLQXQobix0KXtpZigxJm4mJihyZSgwLCJwIiw4OCksVGUoMSksaWUoKSks''@;'; put 'put ''MiZuKXtjb25zdCBlPUVlKCk7YWUoKSxNcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixlLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gZWFjaCBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBj''@;'; put 'put ''b250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8uICIpfX12YXIgJFM9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZGluZz0iUmVhZGluZyB0aGUgZmlsZSIsbi5wYXJzaW5nPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGluIHRoZSBmaWxlIixuLnBhcnNlZD0iU2VhcmNoaW5nIGZvciB0''@;'; put 'put ''aGUgZGF0YSBmaW5pc2hlZCIsbi5ub3RTZWxlY3RlZD0iRmlsZSBub3Qgc2VsZWN0ZWQiLG59KCRTfHx7fSk7Y29uc3QgWEF0PVt7cGF0aDoiIixjb21wb25lbnQ6ZUF0LGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57Y2xhc3Mgbntpbml0aWFsaXplSG90U2V0dGluZ3MoKXt0''@;'; put 'put ''aGlzLmhvdE1haW5UYWJsZVNldHRpbmdzPXtjbGFzc05hbWU6WyJodERhcmsiXSxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGVMaWNlbnNlS2V5LG11bHRpQ29sdW1uU29ydGluZzohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxtYW51YWxDb2x1bW5SZXNpemU6ITAsYXV0b0NvbHVt''@;'; put 'put ''blNpemU6ITAsZmlsdGVyczohMCxzdHJldGNoSDoiYWxsIixhZnRlckdldENvbEhlYWRlcjpiYWUsbW9kaWZ5Q29sV2lkdGg6dGhpcy5tYXhXaWR0aENoZWtlcn07Y29uc3R7ZGF0YTplLC4uLnJ9PXRoaXMuaG90VXNlckRhdGFzZXRzO3RoaXMuaG90VXNlckRhdGFzZXRzU2V0dGluZ3M9ey4u''@;'; put 'put ''LnIsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlTGljZW5zZUtleX19bWF4V2lkdGhDaGVrZXIoZSxyKXtyZXR1cm4gZT4yMDA/MjAwOmV9Y29uc3RydWN0b3IoZSxyLGksYSxjLG0sQyl7dGhpcy5ldmVudFNlcnZpY2U9ZSx0aGlzLmxpY2VuY2VTZXJ2aWNlPXIsdGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''PWksdGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZT1jLHRoaXMuc2FzU2VydmljZT1tLHRoaXMuY2RyPUMsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhp''@;'; put 'put ''cy5JbmZpbml0eT0xLzAsdGhpcy5maWxlTG9hZGluZ1N0YXRlPSRTLm5vdFNlbGVjdGVkLHRoaXMuRmlsZUxvYWRpbmdTdGF0ZT0kUyx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3Nf''@;'; put 'put ''YWxsb3dlZHx8MS8wLHRoaXMuY3N2RmlsZXM9W10sdGhpcy5jc3ZTdWJtaXR0aW5nPSExLHRoaXMuYXV0b0RldGVjdGluZ0NvbHVtbnM9ITEsdGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHM9W10sdGhpcy5kYXRh''@;'; put 'put ''c2V0c0xvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSx0aGlzLnNoZWV0TmFtZXM9W10sdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLmxpYnNBbmRUYWJsZXM9e30sdGhpcy5ob3RNYWluVGFi''@;'; put 'put ''bGVTZXR0aW5ncz17fSx0aGlzLmhvdFVzZXJEYXRhc2V0c1NldHRpbmdzPXt9LHRoaXMuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIix0aGlzLmhvdFVzZXJEYXRhc2V0cz17Y29sSGVhZGVyczpbIkxpYnJhcnkiLCJUYWJsZSJdLGRhdGE6W1si''@;'; put 'put ''IiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdXSxjb2x1bW5zOlt7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfSx7dHlwZToiYXV0b2NvbXBsZXRl''@;'; put 'put ''IixmaWx0ZXI6ITEsc291cmNlOltdfV0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMzA1cHgiLGNsYXNzTmFtZTpbImh0RGFyayJdLGNvbnRleHRNZW51OntpdGVtczp7cm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In19''@;'; put 'put ''fSxtYW51YWxSb3dNb3ZlOiEwLGNvbHVtblNvcnRpbmc6ITAsYWZ0ZXJHZXRDb2xIZWFkZXI6YmFlLHN0cmV0Y2hIOiJhbGwifSx0aGlzLmFmdGVyR2V0Q29sSGVhZGVyPWJhZX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShlPT57dGhp''@;'; put 'put ''cy5ob3RUYWJsZUxpY2Vuc2VLZXk9ZSx0aGlzLmluaXRpYWxpemVIb3RTZXR0aW5ncygpfSksdGhpcy5pbml0aWFsaXplSG90U2V0dGluZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RUYWJsZVVzZXJEYXRhc2V0Q29tcG9uZW50JiYhdGhpcy5ob3RJbnN0''@;'; put 'put ''YW5jZVVzZXJEYXRhc2V0JiZ0aGlzLmluaXRVc2VySW5wdXRIb3QoKSx0aGlzLmhvdFRhYmxlTWFpbkNvbXBvbmVudCYmIXRoaXMuaG90SW5zdGFuY2UmJnRoaXMuaW5pdEhvdCgpfSw1MCl9bmdBZnRlckNvbnRlbnRJbml0KCl7V24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xv''@;'; put 'put ''YmFscygpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5nZXRGcm9tR2xvYmFscygpfSl9Z2V0RnJvbUdsb2JhbHMoKXt0aGlzLmxpYnNBbmRUYWJsZXM9V24uZWRpdG9yLmxpYnNBbmRUYWJsZXM7Y29uc3QgZT1PYmplY3Qua2V5cyh0''@;'; put 'put ''aGlzLmxpYnNBbmRUYWJsZXMpO3RoaXMuaG90VXNlckRhdGFzZXRzPy5jb2x1bW5zJiYodGhpcy5ob3RVc2VyRGF0YXNldHMuY29sdW1uc1swXS5zb3VyY2U9ZSl9b25GaWxlQ2hhbmdlKGUpe3ZhciByPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7Y29uc3QgaT1lPy50YXJnZXQ/LmZpbGVz''@;'; put 'put ''fHxbXTtpZihpLmxlbmd0aDwxKXJldHVybiB2b2lkIHIuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIGZpbGUgZm91bmQuIixudWxsLCJGaWxlIFVwbG9hZCIpO2xldCBhPSIiO2ZvcihsZXQgYyBvZiBpKXtjb25zdCBtPWMubmFtZS5zcGxpdCgiLiIpLnBvcCgpO2lmKGF8''@;'; put 'put ''fChhPW0pLGEhPT1tKXJldHVybiB2b2lkIHIuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk1peGVkIGV4dGVuc2lvbnMgZXJyb3IiLCJQbGVhc2Ugc2VsZWN0IGZpbGVzIHdpdGggc2FtZSBleHRlbnNpb24uIik7YT1tfWlmKFsieGxzeCIsInhsc20iLCJ4bG0iXS5pbmNsdWRlcyhhKSly''@;'; put 'put ''LnNlbGVjdGVkRmlsZT1lLnRhcmdldC5maWxlc1swXSxyLnNlbGVjdGVkRmlsZSYmKHIuZmlsZUxvYWRpbmdTdGF0ZT0kUy5yZWFkaW5nLHIuc2VsZWN0ZWRGaWxlLnNpemVNQj1yLnNwcmVhZHNoZWV0U2VydmljZS5ieXRlc1RvTUIoci5zZWxlY3RlZEZpbGUuc2l6ZSksci5zcHJlYWRzaGVl''@;'; put 'put ''dFNlcnZpY2UueGxzeFJlYWRGaWxlKHIuc2VsZWN0ZWRGaWxlKS50aGVuKGM9PntyLmZpbGVMb2FkaW5nU3RhdGU9JFMucGFyc2luZyxyLnNlbGVjdGVkRmlsZS53b3JrYm9vaz1jfSkpLHIuaW5pdFVzZXJJbnB1dEhvdCgpLHNldFRpbWVvdXQoKCk9PntyLm9uQXV0b0RldGVjdENvbHVtbnMo''@;'; put 'put ''KX0sMTAwKTtlbHNle2lmKCJjc3YiIT09YSlyZXR1cm4gdm9pZCByLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJPbmx5IGV4Y2VsIGV4dGVuc2lvbnMgYXJlIGFsbG93ZWQuICh4bHN4KSIsbnVsbCwiRXh0ZW5zaW9uIEVycm9yIik7ci5vbk11bHRpQ3N2RmlsZXMoZS50YXJn''@;'; put 'put ''ZXQuZmlsZXMpfWUudGFyZ2V0LnZhbHVlPSIifSkoKX1vbk11bHRpQ3N2RmlsZXMoZSl7dmFyIHI9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtmb3IobGV0IGkgb2YgZSl7Y29uc3QgYT1yLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGkubmFtZSk7ci5pc1ZhbGlkRGF0YXNldEZvcm1hdChh''@;'; put 'put ''KSYmci5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShhKSYmci5jc3ZGaWxlcy5wdXNoKHtmaWxlOmksZmlsZU5hbWU6aS5uYW1lfSl9ci5jc3ZGaWxlcy5sZW5ndGg/KHIuY3N2U3VibWl0dGluZz0hMCx5aWVsZCByLnN1Ym1pdENzdkZpbGVzKCksci5jc3ZTdWJtaXR0aW5nPSExKTpyLmV2ZW50''@;'; put 'put ''U2VydmljZS5zaG93SW5mb01vZGFsKCJDU1YgVXBsb2FkIiwiTm9uZSBvZiB0aGUgYXR0YWNoZWQgQ1NWIGZpbGUgbmFtZXMgbWF0Y2hlZCBhbiBhY3R1YWwgZGF0YXNldC4iKX0pKCl9b25EaXNjYXJkRmlsZSgpe3RoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0''@;'; put 'put ''cz0iIn1vblN0YXJ0UGFyc2luZ0ZpbGUoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2UudXBsb2FkTG9hZGluZz0hMDtjb25zdCByPVtdO2xldCBpPVtdO2ZvcihsZXQgYSBvZiBlLm1hdGNoZWREYXRhc2V0cyl7Y29uc3QgYz1lLmZldGNoRGF0YXNldChhKTtyLnB1c2goYyl9''@;'; put 'put ''UHJvbWlzZS5hbGxTZXR0bGVkKHIpLnRoZW4oYT0+e2EuZm9yRWFjaChtPT57ImZ1bGZpbGxlZCI9PT1tLnN0YXR1cyYmbS52YWx1ZSYmaS5wdXNoKG0udmFsdWUpfSksZS51cGxvYWRMb2FkaW5nPSExLGUuYnVpbGREYXRhc2V0c09iamVjdHMoaSkuZm9yRWFjaChtPT57ZS5wYXJzZWREYXRh''@;'; put 'put ''c2V0cy5wdXNoKHtsaWJkczptLmxpYmRzLGluY2x1ZGVJblN1Ym1pc3Npb246ITAsZGF0YXNldEluZm86bSxwYXJzaW5nVGFibGU6ITB9KX0pLGUud29ya2Jvb2tMb2FkZWQoKS50aGVuKG09Pntmb3IobGV0IEMgb2YgZS5wYXJzZWREYXRhc2V0cyllLnNwcmVhZHNoZWV0U2VydmljZS5wYXJz''@;'; put 'put ''ZUV4Y2VsRmlsZSh7ZmlsZTplLnNlbGVjdGVkRmlsZSx3b3JrYm9vazptLHBhc3N3b3JkOmUuc2VsZWN0ZWRGaWxlLnBhc3N3b3JkfHx2b2lkIDAsZGNWYWxpZGF0b3I6Qy5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6Qy5kYXRhc2V0SW5mby5oZWFkZXJQa3MsaGVhZGVyQXJy''@;'; put 'put ''YXk6Qy5kYXRhc2V0SW5mby5oZWFkZXJBcnJheSxoZWFkZXJTaG93OltdLHRpbWVIZWFkZXJzOkMuZGF0YXNldEluZm8udGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6Qy5kYXRhc2V0SW5mby5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6Qy5kYXRhc2V0SW5mby5kYXRlVGltZUhlYWRlcnMs''@;'; put 'put ''eGxSdWxlczpDLmRhdGFzZXRJbmZvLnhsUnVsZXN9KS50aGVuKFA9PntpZihlLmZpbGVMb2FkaW5nU3RhdGU9JFMucGFyc2VkLFAmJlAuZGF0YSl7bGV0IFk9W107UC5kYXRhLm1hcChKPT57bGV0IGNlPXt9O1AuaGVhZGVyU2hvdy5tYXAoKGZlLEFlKT0+e2NlW2ZlXT1KW0FlXX0pLGNlLl9f''@;'; put 'put ''X19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGNlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxZLnB1c2goY2UpfSksQy5kYXRhc291cmNlPVksQy5wYXJzZVJlc3VsdD1QLEMucGFyc2luZ1RhYmxlPSExfX0pLmNhdGNoKFA9Pntjb25zb2xlLndhcm4oIlBhcnNp''@;'; put 'put ''bmcgZXhjZWwgZmlsZSBlcnJvci4iLFApLEMuZGF0YXNvdXJjZT1bXSxDLmluY2x1ZGVJblN1Ym1pc3Npb249ITEsQy5wYXJzaW5nVGFibGU9ITF9KX0pfSl9KSgpfW9uU3VibWl0QWxsKCl7dGhpcy50YWJsZXNUb1N1Ym1pdC5sZW5ndGg/dGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITA6''@;'; put 'put ''dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm8gdGFibGVzIHRvIHN1Ym1pdCIsIlBsZWFzZSBpbmNsdWRlIGF0IGxlYXN0IG9uZSB0YWJsZSB0byBwcm9jZWVkLiIpfW9uRGlzY2FyZCgpe3RoaXMucGFyc2VkRGF0YXNldHM9W10sdGhpcy5tYXRjaGVkRGF0YXNldHM9W10sdGhp''@;'; put 'put ''cy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIiLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIn1pbml0SG90KCl7c2V0VGltZW91dCgoKT0+e2lmKHRoaXMuaG90VGFibGVNYWluQ29tcG9uZW50Py5ob3RJbnN0YW5jZSl7dGhpcy5ob3RJbnN0YW5jZT10aGlz''@;'; put 'put ''LmhvdFRhYmxlTWFpbkNvbXBvbmVudC5ob3RJbnN0YW5jZTtjb25zdCByPXRoaXMuY29udGVudEFyZWFSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQtMTYwKyJweCI7dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0JiYodGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7Y29sSGVh''@;'; put 'put ''ZGVyczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZXMoKSxyZWFkT25seTohMCxoZWlnaHQ6cnx8IjMwMHB4IixjbGFzc05hbWU6''@;'; put 'put ''WyJodERhcmsiXX0pLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0JiZ0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZSYmKHRoaXMuaG90SW5zdGFuY2UubG9hZERhdGEodGhpcy5hY3RpdmVQYXJzZWREYXRh''@;'; put 'put ''c2V0LmRhdGFzb3VyY2UpLHRoaXMuaG90SW5zdGFuY2UucmVuZGVyKCkpfSwxMDApKX19LDEwMCl9aW5pdFVzZXJJbnB1dEhvdCgpe3ZhciBlPXRoaXM7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudD8uaG90SW5zdGFuY2UmJih0aGlzLmhvdEluc3Rh''@;'; put 'put ''bmNlVXNlckRhdGFzZXQ9dGhpcy5ob3RUYWJsZVVzZXJEYXRhc2V0Q29tcG9uZW50LmhvdEluc3RhbmNlLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFVzZXJEYXRhc2V0cy5kYXRhJiYodGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmxvYWREYXRhKHRoaXMuaG90VXNlckRhdGFzZXRzLmRh''@;'; put 'put ''dGEpLHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5yZW5kZXIoKSl9LDUwKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYmVmb3JlQ2hhbmdlIiwocixpKT0+e2lmKHIpZm9yKGxldCBhIG9mIHIpYSYmYVszXSYmKGFbM109YVszXS50b1VwcGVyQ2FzZSgpKX0pLHRo''@;'; put 'put ''aXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXt2YXIgcj1aKGZ1bmN0aW9uKihpLGEpe2lmKGkpeyJlZGl0Ij09PWEmJih5aWVsZCBlLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKSk7Zm9yKGxldCBjIG9mIGkpZS5tYXJrVW5tYXRj''@;'; put 'put ''aGVkUm93cyhjWzBdKTtlLmR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKSxlLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKGksYSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFk''@;'; put 'put ''ZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3ZhciByPVooZnVuY3Rpb24qKGksYSxjLG0pe3lpZWxkIGUub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpO2ZvcihsZXQgQyBvZiBjKWUubWFya1VubWF0Y2hlZFJvd3MoQyl9KTtyZXR1cm4gZnVuY3Rpb24oaSxhLGMsbSl7cmV0''@;'; put 'put ''dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpfSwxMDApfWR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKXt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJnRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgocixpKT0+e2NvbnN0IGE9clswXTthJiZh''@;'; put 'put ''Lmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGksMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbYV0pfSl9bWFya1VubWF0Y2hlZFJvd3MoZSl7aWYoIXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm47Y29uc3Qgcj10aGlzLmhvdElu''@;'; put 'put ''c3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGUpLGk9YCR7clswXX0uJHtyWzFdfWAsYT10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhlKTtyJiZyWzBdJiZyWzFdP3RoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGkpP2EuZm9yRWFjaChjPT57''@;'; put 'put ''dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGUsYy5jb2wsImNsYXNzTmFtZSIsIiIpfSk6YS5mb3JFYWNoKGM9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoZSxjLmNvbCwiY2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmEuZm9yRWFj''@;'; put 'put ''aChjPT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGUsYy5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoZSxyKT0+e3RoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgp''@;'; put 'put ''PT57Y29uc3QgaT10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLGkuZm9yRWFjaChhPT57Y29uc3QgYz1hLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0Rm9ybWF0KGMpJiZ0aGlzLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKGMpJiYhdGhpcy5tYXRj''@;'; put 'put ''aGVkRGF0YXNldHMuaW5jbHVkZXMoYyk/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaChjKTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7Y30gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSxlKHZvaWQgMCl9KX0pfW9u''@;'; put 'put ''QXV0b0RldGVjdENvbHVtbnMoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2lmKCFlLmhvdEluc3RhbmNlVXNlckRhdGFzZXQpe2xldCBjPTA7Y29uc3QgbT0yMDtmb3IoOyFlLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJmM8bTspeWllbGQgbmV3IFByb21pc2UoQz0+c2V0VGlt''@;'; put 'put ''ZW91dChDLDEwMCkpLGMrKztpZighZS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiaG90SW5zdGFuY2VVc2VyRGF0YXNldCBub3QgcmVhZHkgYWZ0ZXIgd2FpdGluZyIpfWxldCByPSExO2lmKHlpZWxkIGUucGFyc2VFeGNlbFNoZWV0TmFtZXMoKS50''@;'; put 'put ''aGVuKGM9PntlLnNoZWV0TmFtZXM9Y30pLmNhdGNoKGM9PntjLmluY2x1ZGVzKCJwYXNzd29yZCIpJiYocj0hMCl9KSxyKXJldHVybiBlLm9uRGlzY2FyZEZpbGUoKSx2b2lkIGUuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkxvY2tlZCBmaWxlIiwiV2UgZmFpbGVkIHRvIHVubG9jayB0''@;'; put 'put ''aGUgZmlsZS4iKTtlLnNoZWV0TmFtZXMmJihlLm1hdGNoZWREYXRhc2V0cz1bXSxlLnVzZXJJbnB1dERhdGFzZXRzPSIiLGUuc2hlZXROYW1lcy5mb3JFYWNoKChjLG0pPT57Y29uc3QgQz1jLnRyaW0oKTtlLmlzVmFsaWREYXRhc2V0Rm9ybWF0KEMpJiZlLmlzVmFsaWREYXRhc2V0UmVmZXJl''@;'; put 'put ''bmNlKEMpP2UubWF0Y2hlZERhdGFzZXRzLnB1c2goQyk6Y29uc29sZS53YXJuKGBTaGVldCBuYW1lOiAke0N9IGlzIG5vdCBhbiBhY3R1YWwgZGF0YXNldCByZWZlcmVuY2UuYCl9KSksZS51c2VySW5wdXREYXRhc2V0cz1lLm1hdGNoZWREYXRhc2V0cy5qb2luKCJcbiIpO2NvbnN0IGk9ZS5t''@;'; put 'put ''YXRjaGVkRGF0YXNldHMubWFwKGM9PltjLnNwbGl0KCIuIilbMF0sYy5zcGxpdCgiLiIpWzFdXSksYT1lLmhvdFVzZXJEYXRhc2V0cy5kYXRhLmxlbmd0aDtpZihpLmxlbmd0aDxhKXtjb25zdCBjPWEtaS5sZW5ndGg7Zm9yKGxldCBtPTA7bTxjO20rKylpLnB1c2goWyIiLCIiXSl9ZS5ob3RJ''@;'; put 'put ''bnN0YW5jZVVzZXJEYXRhc2V0JiZzZXRUaW1lb3V0KCgpPT57ZS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmxvYWREYXRhKGkpLGUuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5yZW5kZXIoKX0sMTAwKSxlLmR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKX0pKCl9b25QYXJzZWREYXRhc2V0Q2xpY2so''@;'; put 'put ''ZSl7dGhpcy5kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCksZS5hY3RpdmU9ITAsdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuaW5pdEhvdCgpfW9uU3VibWl0dGVkQ3N2RGF0YXNldENsaWNrKGUpe3RoaXMuZGVzZWxlY3RBbGxTdWJtaXR0ZWRDc3ZEYXRhc2V0cygpLGUuYWN0aXZl''@;'; put 'put ''PSEwfWdldCBhY3RpdmVQYXJzZWREYXRhc2V0KCl7cmV0dXJuIHRoaXMucGFyc2VkRGF0YXNldHMuZmluZChlPT5lLmFjdGl2ZSl9Z2V0IGFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQoKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5maW5kKGU9PmUuYWN0aXZlKX1nZXQgbm90''@;'; put 'put ''Rm91bmREYXRhc2V0cygpe3JldHVybiB0aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpLmZpbHRlcihyPT4hdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXMoci50cmltKCkpKS5maWx0ZXIocj0+ci5sZW5ndGgpfWdldCBpc0hvdEhpZGRlbigpe2lmKCF0aGlzLmhvdEluc3RhbmNlKXJldHVy''@;'; put 'put ''biEwO3RyeXtjb25zdCBlPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5jbGFzc05hbWU7cmV0dXJuISFlJiZlLmluY2x1ZGVzKCJodEN1c3RvbUhpZGRlbiIpfWNhdGNoe3JldHVybiEwfX1nZXQgdGFibGVzVG9TdWJtaXQoKXtyZXR1cm4gdGhpcy5wYXJzZWREYXRhc2V0cy5maWx0''@;'; put 'put ''ZXIoZT0+ZS5kYXRhc291cmNlJiZlLnBhcnNlUmVzdWx0JiZlLmluY2x1ZGVJblN1Ym1pc3Npb24pfWdldCBzdWJtaXR0aW5nQ3N2KCl7cmV0dXJuIHRoaXMuY3N2RmlsZXMubGVuZ3RoPjB9Z2V0IGV4Y2Vsc1N1Ym1pdHRlZCgpe3JldHVybiEhdGhpcy5wYXJzZWREYXRhc2V0cy5maWx0ZXIo''@;'; put 'put ''ZT0+ZS5zdWJtaXRSZXN1bHQpLmxlbmd0aH1kb3dubG9hZEZpbGUoZSl7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYHN0YWdlZGF0YS0ke3RoaXMuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldD8ubGliZHN9LWxvZ2AsSlNPTi5zdHJpbmdpZnkoZSkpfXN1Ym1pdENzdkZp''@;'; put 'put ''bGVzKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtsZXQgcj1bXTtmb3IobGV0IGkgb2YgZS5jc3ZGaWxlcyl7Y29uc3QgYT1lLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGkuZmlsZU5hbWUpO2xldCBjLG07eWllbGQgZS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2Vz''@;'; put 'put ''L2VkaXRvcnMvbG9hZGZpbGUiLFtpXSx7dGFibGU6YX0pLnRoZW4oQz0+e3R5cGVvZiBDLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PCJ1Ij9jPUMuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ6bT1DLmFkYXB0ZXJSZXNwb25zZX0sQz0+e2NvbnNvbGUuZXJyb3IoImVyciIsQyksYz1D''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZX0pLHIucHVzaCh7c3VjY2VzczptLGVycm9yOmMsbGliZHM6YX0pfWUuc3VibWl0dGVkQ3N2RGF0YXNldHM9cn0pKCl9ZmV0Y2hEYXRhc2V0KGUpe3ZhciByPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7aWYoZSlyZXR1cm4gci5zYXNTdG9yZVNlcnZpY2UuY2Fs''@;'; put 'put ''bFNlcnZpY2Uoe0xJQkRTOmUsT1VUREVTVDoiV0VCIn0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsZSkudGhlbihhPT5hKS5jYXRjaChhPT57Y29uc29sZS53YXJuKGBFcnJvciBmZXRjaGluZyAke2V9YCxhKX0pfSkoKX1zdWJtaXRUYWJsZXMoZSl7dmFyIHI9dGhpczty''@;'; put 'put ''ZXR1cm4gWihmdW5jdGlvbiooKXtjb25zb2xlLmluZm8oIlN1Ym1pdHRpbmcgbXVsdGlwbGUgdGFibGVzIixyLnBhcnNlZERhdGFzZXRzKSxyLnN1Ym1pdExvYWRpbmc9ITA7Zm9yKGxldCBpIG9mIHIucGFyc2VkRGF0YXNldHMpe2lmKCFpLnBhcnNlUmVzdWx0fHwhaS5kYXRhc291cmNlfHwh''@;'; put 'put ''aS5pbmNsdWRlSW5TdWJtaXNzaW9ufHxlJiYhZS5pbmNsdWRlcyhpLmxpYmRzKSljb250aW51ZTtsZXQgYT17fTtyLnN1Ym1pdFJlYXNvbk1lc3NhZ2U9ci5zdWJtaXRSZWFzb25NZXNzYWdlLnJlcGxhY2UoL1xuL2csIi4gIiksYS5BQ1RJT049IkxPQUQiLGEuTUVTU0FHRT1yLnN1Ym1pdFJl''@;'; put 'put ''YXNvbk1lc3NhZ2UsYS5MSUJEUz1pLmxpYmRzO2xldCBjPWkuZGF0YXNvdXJjZTtpZihjKXtjPWMubWFwKGNlPT57bGV0IGZlPWNlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRlIGNlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyxjZS5fX19fX0RF''@;'; put 'put ''TEVURV9fVEhJU19fUkVDT1JEX19fX189ZmUsT2JqZWN0LmtleXMoY2UpLm1hcChBZT0+eyJudW1lcmljIj09PWkuZGF0YXNldEluZm8uZGNWYWxpZGF0b3I/LmdldFJ1bGUoQWUpPy50eXBlJiYiLiI9PT1jZVtBZV0mJihjZVtBZV09bnVsbCl9KSxjZX0pO2NvbnN0IG09Yy5zbGljZSgwLHIu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtsZXQgQyxQLFk7eWllbGQgci5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUoYSxtLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsaS5kYXRhc2V0SW5mby5kYXRhLiRzYXNkYXRhLCEwLHtkZWJ1Zzoh''@;'; put 'put ''MH0pLnRoZW4oY2U9PntQPWNlLmFkYXB0ZXJSZXNwb25zZSxZPWNlLmxvZ30pLmNhdGNoKGNlPT57Y29uc29sZS5lcnJvcigiZXJyIixjZSksQz1jZS5hZGFwdGVyUmVzcG9uc2UsWT1jZS5sb2d9KSxpLnN1Ym1pdFJlc3VsdD17c3VjY2VzczpQLGVycm9yOkMsbG9nOlkscGFyc2VSZXN1bHQ6''@;'; put 'put ''aS5wYXJzZVJlc3VsdCxsaWJkczppLmxpYmRzfX19ci5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsci5zdWJtaXRMb2FkaW5nPSExLHIuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpfSkoKX1yZVN1Ym1pdFRhYmxlKGUpe3ZhciByPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7eWllbGQg''@;'; put 'put ''ci5zdWJtaXRUYWJsZXMoW2UubGliZHNdKTtjb25zdCBpPXIucGFyc2VkRGF0YXNldHMuZmluZChhPT5hLmxpYmRzPT09ZS5saWJkcyk7aSYmKGkuYWN0aXZlPSEwKX0pKCl9d29ya2Jvb2tMb2FkZWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGUscik9Pnt0aGlzLnNlbGVjdGVkRmlsZXx8cigi''@;'; put 'put ''Tm8gZmlsZSBzZWxlY3RlZCIpLHRoaXMud29ya2Jvb2tJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rJiYoY2xlYXJJbnRlcnZhbCh0aGlzLndvcmtib29rSW50ZXJ2YWwpLGUodGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2spKX0sNTAwKX0pfXBh''@;'; put 'put ''cnNlRGF0YXNldEZyb21Dc3ZOYW1lKGUpe2NvbnN0IHI9ZS5zcGxpdCgiLiIpO3JldHVybiByLnBvcCgpLHIuam9pbigiLiIpfWdldERhdGFzZXRzRnJvbUhvdCgpe3JldHVybiB0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ/dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEo''@;'; put 'put ''KS5maWx0ZXIocj0+clswXT8ubGVuZ3RoJiZyWzFdPy5sZW5ndGgpLm1hcChyPT5yP2Ake3JbMF19LiR7clsxXX1gOiIiKTpbXX1wYXJzZUV4Y2VsU2hlZXROYW1lcygpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChyLGkpPT57aWYoIWUuc2Vs''@;'; put 'put ''ZWN0ZWRGaWxlKXJldHVybiByKFtdKTtlLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsU2hlZXROYW1lcyhlLnNlbGVjdGVkRmlsZSkudGhlbihhPT4oYS5wYXNzd29yZCYmKGUuc2VsZWN0ZWRGaWxlLnBhc3N3b3JkPWEucGFzc3dvcmQpLHIoYS5zaGVldE5hbWVzKSkpLmNhdGNoKGE9''@;'; put 'put ''PmkoYSkpfSl9KSgpfWlzVmFsaWREYXRhc2V0Rm9ybWF0KGUpe3JldHVybi9eXHd7MSw4fVwuXHd7MSwzMn0kL2dpbS50ZXN0KGUpfWlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKGUpe2NvbnN0IHI9ZS5zcGxpdCgiLiIpWzBdLGk9ZS5zcGxpdCgiLiIpWzFdO3JldHVybiEhdGhpcy5saWJzQW5k''@;'; put 'put ''VGFibGVzW3JdPy5pbmNsdWRlcyhpKX1idWlsZERhdGFzZXRzT2JqZWN0cyhlKXtpZighZSlyZXR1cm5bXTtjb25zdCByPVtdO2ZvcihsZXQgaSBvZiBlKWlmKGkuZGF0YSl7Y29uc3QgYT17Li4uaSxob3RUYWJsZTp7ZGF0YTppLmRhdGEuc2FzZGF0YSxzZXR0aW5nczp7fX0sY29sczpbXSxo''@;'; put 'put ''ZWFkZXJDb2x1bW5zOltdLGhlYWRlclBrczpbXSxoZWFkZXJBcnJheTpbXSxkYXRlSGVhZGVyczpbXSx0aW1lSGVhZGVyczpbXSxkYXRlVGltZUhlYWRlcnM6W10seGxSdWxlczpbXSxjb2x1bW5IZWFkZXI6W119O2EuY29scz1pLmRhdGEuY29scyxhLmhlYWRlckNvbHVtbnM9aS5kYXRhLnNh''@;'; put 'put ''c3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksYS5oZWFkZXJQa3M9aS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLC0xIT09YS5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpJiYoYS5oZWFkZXJDb2x1bW5zW2EuaGVh''@;'; put 'put ''ZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKV09IkRlbGV0ZT8iKSxhLmhlYWRlckFycmF5PWEuaGVhZGVyQ29sdW1ucy5zbGljZSgxKSwiIiE9PWkuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTJiYoYS5kYXRlSGVhZGVycz1pLmRhdGEuc2FzcGFy''@;'; put 'put ''YW1zWzBdLkRUVkFSUy5zcGxpdCgiICIpKSwiIiE9PWkuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTJiYoYS50aW1lSGVhZGVycz1pLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUy5zcGxpdCgiICIpKSwiIiE9PWkuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMmJihhLmRhdGVUaW1lSGVhZGVy''@;'; put 'put ''cz1pLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTLnNwbGl0KCIgIikpLGkuZGF0YS54bF9ydWxlcy5sZW5ndGg+MCYmKGEueGxSdWxlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGkuZGF0YS54bF9ydWxlcykpLGEuZGNWYWxpZGF0b3I9bmV3IGJfZShpLmRhdGEuc2FzcGFyYW1z''@;'; put 'put ''WzBdLGkuZGF0YS4kc2FzZGF0YSxpLmRhdGEuY29scyxpLmRhdGEuZHFydWxlcyxpLmRhdGEuZHFkYXRhKSxhLmNvbHVtbkhlYWRlcj1pLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSxyLnB1c2goYSl9cmV0dXJuIHJ9ZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygp''@;'; put 'put ''e2ZvcihsZXQgZSBvZiB0aGlzLnBhcnNlZERhdGFzZXRzKWUuYWN0aXZlPSExfWRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNldHMoKXtmb3IobGV0IGUgb2YgdGhpcy5zdWJtaXR0ZWRDc3ZEYXRhc2V0cyllLmFjdGl2ZT0hMX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7''@;'; put 'put ''cmV0dXJuIG5ldyhyfHxuKShXZShTYyksV2UoSzEpLFdlKEx1KSxXZShFMiksV2UoeF9lKSxXZShKcyksV2UoRnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1tdWx0aS1kYXRhc2V0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihyLGkpe2lmKDEm''@;'; put 'put ''ciYmKFdhKHRBdCw3KSxXYShuQXQsNSksV2EockF0LDUpKSwyJnIpe2xldCBhO2RpKGE9aGkoKSkmJihpLmNvbnRlbnRBcmVhUmVmPWEuZmlyc3QpLGRpKGE9aGkoKSkmJihpLmhvdFRhYmxlTWFpbkNvbXBvbmVudD1hLmZpcnN0KSxkaShhPWhpKCkpJiYoaS5ob3RUYWJsZVVzZXJEYXRhc2V0''@;'; put 'put ''Q29tcG9uZW50PWEuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24ocixpKXsyJnImJmJyKCJjb250ZW50LWNvbnRhaW5lciIsaS5jb250ZW50Q29udGFpbmVyQ2xhc3MpfSxzdGFuZGFsb25lOiExLGRlY2xzOjM3LHZhcnM6MTgsY29uc3RzOltbImNvbnRlbnRBcmVh''@;'; put 'put ''IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImhvdEluc3RhbmNlVXNlckRhdGFzZXQiLCIiXSxbImhvdEluc3RhbmNlTWFpbiIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIG1iLTEwIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQt''@;'; put 'put ''Y2VudGVyIiwidy0xMDAiLCJtLTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxb''@;'; put 'put ''MSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2RzLXRleHQiLCJib2R5IiwiY2xhc3MiLCJsaWNlbmNlLWxpbWl0LW5vdGljZSBtdC0wIG1iLTE1Iiw0LCJuZ0lmIl0sWzEsInRleHQtYXJlYS1mdWxsLXdpZHRoIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJk''@;'; put 'put ''LWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIl0sWzEs''@;'; put 'put ''Im1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsInN1Ym1pdC10YWJsZXMiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwi''@;'; put 'put ''dGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCIsInRleHQtY2VudGVyIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm1iLTEwIl0sWyJpZCIsImJyb3dzZS1maWxlIiwx''@;'; put 'put ''LCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwibXVsdGlwbGUiLCIiLDMsImNoYW5nZSJdLFsiY2RzLXRleHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIl0s''@;'; put 'put ''WzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwiYnRuLXNtIiwibXItMTAiLDMsImNsaWNrIl0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3Bh''@;'; put 'put ''Y2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwibWwtNSJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDQsIm5nSWYiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNs''@;'; put 'put ''ZSIsNCwibmdJZiJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyU21hbGwiLCIi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiLCJtdC0xMCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwzLCJjbGljayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCIsInBvaW50ZXItZXZl''@;'; put 'put ''bnRzLW5vbmUiXSxbInNoYXBlIiwidXBsb2FkLWNsb3VkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtY2VudGVyIiwibXQtMTUiXSxbMSwiZGF0YXNldC1pbnB1dC13cmFwcGVyIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwidHJhc2giLCJzdGF0dXMiLCJkYW5nZXIiLDEsIm1sLTUiLCJjdXJzb3It''@;'; put 'put ''cG9pbnRlciIsMywiY2xpY2siXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTIwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xNSJdLFsxLCJtYi01Il0sWyJpZCIsImhvdFRhYmxlVXNlckRhdGFzZXQiLDEsIm10LTE1IiwzLCJzZXR0aW5n''@;'; put 'put ''cyJdLFsxLCJkYXRhc2V0LXNlbGVjdGlvbi1hY3Rpb25zIiwidGV4dC1yaWdodCIsIm10LTEwIl0sWyJpZCIsImNvbnRpbnVlLWJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiLCJjbHJMb2FkaW5nIl0sWyJzaGFwZSIsInByb2Nlc3Mtb24t''@;'; put 'put ''dm0iLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIHAtMTAgbXQt''@;'; put 'put ''MTUgc3VibWlzc2lvbi1yZXN1bHRzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVycm9yLWZpZWxkIG10LTE1Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwi''@;'; put 'put ''bWItMTAiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzMsImNsclBvc2l0aW9uIiwiY2xyU2l6ZSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwibmFtZSIsIm9wdGlvbnMiLCJyZXF1''@;'; put 'put ''aXJlZCIsIiIsInZhbHVlIiwib3B0aW9uMSIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCIsNCwibmdJZiJdLFsiaWQiLCJob3RUYWJsZSIsMSwibXQtMTUiLDMsInNldHRpbmdzIl0sWzEsImQtZmxleCIsImNsci1q''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSIsInN1Ym1pc3Npb24tcmVzdWx0cyJdLFsiY2xhc3MiLCJjb2xvci1ncmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDQsIm5nSWYi''@;'; put 'put ''XSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTEwIiwzLCJjbGljayJdLFsxLCJjb2xvci1ncmVlbiJdLFsxLCJjb2xvci1yZWQiXSxbMSwiYnRuIiwiYnRu''@;'; put 'put ''LXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImVycm9yLWZpZWxkIiwibXQtMTUiXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1z''@;'; put 'put ''LWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTUiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCJdLFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiXSxbImNkcy10ZXh0IiwiYm9keSIsMSwibGljZW5jZS1saW1pdC1u''@;'; put 'put ''b3RpY2UiLCJtdC0wIiwibWItMTUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXtpZigxJnIpe2NvbnN0IGE9SW4oKTtyZSgwLCJhcHAtc2lkZWJhciIpLGN0KDEsaUF0LDIsMCwiZGl2Iiw0KSgyLGFBdCw1LDEsImRpdiIsNSkoMyx5QXQsNiwyLCJuZy1jb250YWluZXIiLDYpKDQsQ0F0LDUs''@;'; put 'put ''MSwibmctY29udGFpbmVyIiw2KSxpZSgpLHJlKDUsImRpdiIsNywwKSg3LCJkaXYiLDgpKDgsImRpdiIsOSkoOSwicCIsMTApLFRlKDEwLCJNdWx0aSBEYXRhc2V0IExvYWQiKSxpZSgpKCksY3QoMTEsU0F0LDQsMCwiZGl2IiwxMSkoMTIsJEF0LDUsNCwibmctY29udGFpbmVyIiw2KSxpZSgp''@;'; put 'put ''KCkscmUoMTMsImNsci1tb2RhbCIsMTIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLnNob3dTdWJtaXRSZWFzb25Nb2RhbCxtKXx8KGkuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPW0pLG10KG0pfSkscmUoMTQsImgzIiwxMyksVGUoMTUpLGll''@;'; put 'put ''KCkscmUoMTYsImRpdiIsMTQpLGN0KDE3LEtBdCwyLDEsInAiLDE1KSxyZSgxOCwiZGl2IiwxNikoMTksImxhYmVsIiwxNyksVGUoMjAsIk1lc3NhZ2UiKSxpZSgpLHJlKDIxLCJ0ZXh0YXJlYSIsMTgpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksdWkoaS5z''@;'; put 'put ''dWJtaXRSZWFzb25NZXNzYWdlLG0pfHwoaS5zdWJtaXRSZWFzb25NZXNzYWdlPW0pLG10KG0pfSksaWUoKSgpLHJlKDIyLCJwIiwxOSksVGUoMjMsIiBUYWJsZXMgd2lsbCBiZSBzZW50IHNlcXVlbnRpYWxseSwgbG9ncyB3aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBhbGwgdGFibGVzIGFyZSBz''@;'; put 'put ''dWJtaXR0ZWQuICIpLGllKCkoKSxyZSgyNCwiZGl2IiwyMCkoMjUsImJ1dHRvbiIsMjEpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEpfSksVGUoMjYsIiBDYW5jZWwgIiksaWUoKSxyZSgyNywiYnV0dG9uIiwyMiksa3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLnN1Ym1pdFRhYmxlcygpKX0pLFRlKDI4LCIgU3VibWl0ICIpLGllKCkoKSgpLHJlKDI5LCJjbHItbW9kYWwiLDEyKSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksdWkoaS5jc3ZTdWJt''@;'; put 'put ''aXR0aW5nLG0pfHwoaS5jc3ZTdWJtaXR0aW5nPW0pLG10KG0pfSkscmUoMzAsImgzIiwxMyksVGUoMzEpLGllKCkscmUoMzIsImRpdiIsMTQpKDMzLCJkaXYiLDIzKSxWdCgzNCwiY2xyLXNwaW5uZXIiLDI0KSxpZSgpLHJlKDM1LCJwIiwyNSksVGUoMzYsIiBUaGlzIHdpbGwgdGFrZSBmZXcg''@;'; put 'put ''bW9tZW50cyAiKSxpZSgpKCkoKX0yJnImJihhZSgpLHllKCJuZ0lmIixpLmRhdGFzZXRzTG9hZGluZyksYWUoKSx5ZSgibmdJZiIsIWkucGFyc2VkRGF0YXNldHMubGVuZ3RoKSxhZSgpLHllKCJuZ0lmIixpLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWkuc3VibWl0dGVkQ3N2RGF0YXNldHMu''@;'; put 'put ''bGVuZ3RoKSxhZSgpLHllKCJuZ0lmIixpLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksYWUoNykseWUoIm5nSWYiLG51bGw9PT1pLnNlbGVjdGVkRmlsZSYmIWkuc3VibWl0dGluZ0NzdiksYWUoKSx5ZSgibmdJZiIsbnVsbCE9PWkuc2VsZWN0ZWRGaWxlfHxpLnN1Ym1pdHRpbmdDc3Yp''@;'; put 'put ''LGFlKCksbGkoImNsck1vZGFsT3BlbiIsaS5zaG93U3VibWl0UmVhc29uTW9kYWwpLHllKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksYWUoMiksbjAoIiBTdWJtaXQgIixpLnRhYmxlc1RvU3VibWl0Lmxlbmd0aCwiICIsMT09PWkudGFibGVzVG9TdWJtaXQubGVuZ3RoPyJ0YWJsZSI6InRhYmxl''@;'; put 'put ''cyIsIiBmb3IgYXBwcm92YWwgIiksYWUoMikseWUoIm5nSWYiLGkubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aS5JbmZpbml0eSksYWUoNCksbGkoIm5nTW9kZWwiLGkuc3VibWl0UmVhc29uTWVzc2FnZSksYWUoNCkseWUoImRpc2FibGVkIixpLnN1Ym1pdExvYWRp''@;'; put 'put ''bmcpLGFlKDIpLHllKCJjbHJMb2FkaW5nIixpLnN1Ym1pdExvYWRpbmcpLGFlKDIpLGxpKCJjbHJNb2RhbE9wZW4iLGkuY3N2U3VibWl0dGluZykseWUoImNsck1vZGFsQ2xvc2FibGUiLCExKSxhZSgyKSxuMCgiIFN1Ym1pdHRpbmcgIixpLmNzdkZpbGVzLmxlbmd0aCwiIENTViAiLDE9PT1p''@;'; put 'put ''LmNzdkZpbGVzLmxlbmd0aD8iZmlsZSI6ImZpbGVzIiwiICIpKX0sZGVwZW5kZW5jaWVzOltHNSxYMSx6bCx2aCxpbCxISyxRcyxTMixFaCx1NSxVbCxycyxodSxjMCxTMSxWZixwcyxjSCxDaCxiMix3SCxSNixPNixMNixTaCxhZyxocyxtYSxBR10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVy''@;'; put 'put ''biBufSkoKX1dfV07bGV0IHFBdD0oKCk9PntjbGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj16bih7aW1wb3J0czpbWWMuZm9yQ2hp''@;'; put 'put ''bGQoWEF0KSxZY119KX19cmV0dXJuIG59KSgpO1FEKCk7bGV0IEpBdD0oKCk9PntjbGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj16''@;'; put 'put ''bih7aW1wb3J0czpbWnkscUF0LE9jLE0xLFl5LEZhLHRJLGwzXX0pfX1yZXR1cm4gbn0pKCk7Y29uc3QgUUF0PVt7cGF0aDoiIixjb21wb25lbnQ6WUV0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRhYmxlcyJ9LHtwYXRoOiJ0YWJsZXMiLGNvbXBv''@;'; put 'put ''bmVudDpJVHR9LHtwYXRoOiJleGNlbC1tYXBzIixsb2FkQ2hpbGRyZW46KCk9PlFUdH0se3BhdGg6Im11bHRpLWxvYWQiLGxvYWRDaGlsZHJlbjooKT0+SkF0fV19XTtsZXQgZWt0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8''@;'; put 'put ''bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltZYy5mb3JDaGlsZChRQXQpLFljXX0pfX1yZXR1cm4gbn0pKCksdGt0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3Jl''@;'; put 'put ''dHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltla3QsT2MsTTEsWXksRmEsdEksbDNdfSl9fXJldHVybiBufSkoKSx3YWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIpe3RoaXMu''@;'; put 'put ''bGljZW5jZVNlcnZpY2U9ZSx0aGlzLnJvdXRlcj1yfWNhbkFjdGl2YXRlKGUscil7cmV0dXJuISEodm9pZCAwIT09cj8ucm9vdC5xdWVyeVBhcmFtcy5mb3JjZXx8cj8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWR8''@;'; put 'put ''fG51bGwhPT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhMT09PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3RpdmF0ZShlLHIsaSxhKXtyZXR1''@;'; put 'put ''cm4hKGk/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3JlZ2lzdGVyIil8fHRoaXMubGljZW5jZVNlcnZpY2UuYXBwTG9ja2VkLnZhbHVlKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShPcihLMSksT3IocmwpKX19c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''cHJvdj11bih7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSl9fXJldHVybiBufSkoKTtsZXQgJDg9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tz''@;'; put 'put ''Om51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtmdW5jdGlv''@;'; put 'put ''biBOX2Uobil7JDg9bn1jb25zdCBWX2U9L1smPD4iJ10vLG5rdD1uZXcgUmVnRXhwKFZfZS5zb3VyY2UsImciKSxCX2U9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLHJrdD1uZXcgUmVnRXhwKEJfZS5zb3VyY2UsImciKSxpa3Q9eyImIjoiJmFt''@;'; put 'put ''cDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LGpfZT1uPT5pa3Rbbl07ZnVuY3Rpb24gaGQobix0KXtpZih0KXtpZihWX2UudGVzdChuKSlyZXR1cm4gbi5yZXBsYWNlKG5rdCxqX2UpfWVsc2UgaWYoQl9lLnRlc3QobikpcmV0dXJuIG4ucmVwbGFj''@;'; put 'put ''ZShya3Qsal9lKTtyZXR1cm4gbn1jb25zdCBha3Q9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vZ2k7ZnVuY3Rpb24gel9lKG4pe3JldHVybiBuLnJlcGxhY2UoYWt0LCh0LGUpPT4iY29sb24iPT09KGU9ZS50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09ZS5jaGFy''@;'; put 'put ''QXQoMCk/IngiPT09ZS5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK2Uuc3Vic3RyaW5nKDEpKToiIil9Y29uc3Qgb2t0PS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIExsKG4sdCl7bj0ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIG4/bjpuLnNvdXJjZSx0PXR8fCIiO2NvbnN0IGU9e3JlcGxhY2U6KHIsaSk9PihpPShpPWkuc291cmNlfHxpKS5yZXBsYWNlKG9rdCwiJDEiKSxuPW4ucmVwbGFjZShyLGkpLGUpLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKG4sdCl9O3JldHVybiBlfWNvbnN0IHNrdD0vW15c''@;'; put 'put ''dzpdL2csbGt0PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gVV9lKG4sdCxlKXtpZihuKXtsZXQgcjt0cnl7cj1kZWNvZGVVUklDb21wb25lbnQoel9lKGUpKS5yZXBsYWNlKHNrdCwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ci5p''@;'; put 'put ''bmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ci5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PXIuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH10JiYhbGt0LnRlc3QoZSkmJihlPWZ1bmN0aW9uIGhrdChuLHQpe1dqWyIgIituXXx8KFdqWyIgIituXT1ja3QudGVzdChuKT9uKyIvIjpZ''@;'; put 'put ''aihuLCIvIiwhMCkpO2NvbnN0IGU9LTE9PT0obj1XalsiICIrbl0pLmluZGV4T2YoIjoiKTtyZXR1cm4iLy8iPT09dC5zdWJzdHJpbmcoMCwyKT9lP3Q6bi5yZXBsYWNlKHVrdCwiJDEiKSt0OiIvIj09PXQuY2hhckF0KDApP2U/dDpuLnJlcGxhY2UoZGt0LCIkMSIpK3Q6bit0fSh0LGUpKTt0''@;'; put 'put ''cnl7ZT1lbmNvZGVVUkkoZSkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZX1jb25zdCBXaj17fSxja3Q9L15bXjpdKzpcLypbXi9dKiQvLHVrdD0vXihbXjpdKzopW1xzXFNdKiQvLGRrdD0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sWmo9e2V4ZWM6''@;'; put 'put ''ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBXX2Uobix0KXtjb25zdCByPW4ucmVwbGFjZSgvXHwvZywoYSxjLG0pPT57bGV0IEM9ITEsUD1jO2Zvcig7LS1QPj0wJiYiXFwiPT09bVtQXTspQz0hQztyZXR1cm4gQz8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQgaT0wO2lmKHJbMF0udHJpbSgp''@;'; put 'put ''fHxyLnNoaWZ0KCksci5sZW5ndGg+MCYmIXJbci5sZW5ndGgtMV0udHJpbSgpJiZyLnBvcCgpLHIubGVuZ3RoPnQpci5zcGxpY2UodCk7ZWxzZSBmb3IoO3IubGVuZ3RoPHQ7KXIucHVzaCgiIik7Zm9yKDtpPHIubGVuZ3RoO2krKylyW2ldPXJbaV0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywi''@;'; put 'put ''fCIpO3JldHVybiByfWZ1bmN0aW9uIFlqKG4sdCxlKXtjb25zdCByPW4ubGVuZ3RoO2lmKDA9PT1yKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPHI7KXtjb25zdCBhPW4uY2hhckF0KHItaS0xKTtpZihhIT09dHx8ZSl7aWYoYT09PXR8fCFlKWJyZWFrO2krK31lbHNlIGkrK31yZXR1cm4gbi5z''@;'; put 'put ''bGljZSgwLHItaSl9ZnVuY3Rpb24gWl9lKG4sdCxlLHIpe2NvbnN0IGk9dC5ocmVmLGE9dC50aXRsZT9oZCh0LnRpdGxlKTpudWxsLGM9blsxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYoIiEiIT09blswXS5jaGFyQXQoMCkpe3Iuc3RhdGUuaW5MaW5rPSEwO2NvbnN0IG09e3R5''@;'; put 'put ''cGU6ImxpbmsiLHJhdzplLGhyZWY6aSx0aXRsZTphLHRleHQ6Yyx0b2tlbnM6ci5pbmxpbmVUb2tlbnMoYyl9O3JldHVybiByLnN0YXRlLmluTGluaz0hMSxtfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OmUsaHJlZjppLHRpdGxlOmEsdGV4dDpoZChjKX19Y2xhc3MgR2p7Y29uc3RydWN0b3Io''@;'; put 'put ''dCl7dGhpcy5vcHRpb25zPXR8fCQ4fXNwYWNlKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWModCk7aWYoZSYmZVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzplWzBdfX1jb2RlKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMo''@;'; put 'put ''dCk7aWYoZSl7Y29uc3Qgcj1lWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6ZVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3I6WWoociwiXG4iKX19fWZlbmNlcyh0KXtjb25zdCBlPXRoaXMu''@;'; put 'put ''cnVsZXMuYmxvY2suZmVuY2VzLmV4ZWModCk7aWYoZSl7Y29uc3Qgcj1lWzBdLGk9ZnVuY3Rpb24gZ2t0KG4sdCl7Y29uc3QgZT1uLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobnVsbD09PWUpcmV0dXJuIHQ7Y29uc3Qgcj1lWzFdO3JldHVybiB0LnNwbGl0KCJcbiIpLm1hcChpPT57Y29u''@;'; put 'put ''c3QgYT1pLm1hdGNoKC9eXHMrLyk7aWYobnVsbD09PWEpcmV0dXJuIGk7Y29uc3RbY109YTtyZXR1cm4gYy5sZW5ndGg+PXIubGVuZ3RoP2kuc2xpY2Uoci5sZW5ndGgpOml9KS5qb2luKCJcbiIpfShyLGVbM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OnIsbGFuZzplWzJdP2VbMl0u''@;'; put 'put ''dHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6ZVsyXSx0ZXh0Oml9fX1oZWFkaW5nKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWModCk7aWYoZSl7bGV0IHI9ZVsyXS50cmltKCk7aWYoLyMkLy50ZXN0KHIpKXtjb25zdCBpPVlq''@;'; put 'put ''KHIsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaXx8LyAkLy50ZXN0KGkpKSYmKHI9aS50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6ZVswXSxkZXB0aDplWzFdLmxlbmd0aCx0ZXh0OnIsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHIpfX19aHIodCl7Y29uc3QgZT10''@;'; put 'put ''aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWModCk7aWYoZSlyZXR1cm57dHlwZToiaHIiLHJhdzplWzBdfX1ibG9ja3F1b3RlKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWModCk7aWYoZSl7Y29uc3Qgcj1lWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGk9''@;'; put 'put ''dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgYT10aGlzLmxleGVyLmJsb2NrVG9rZW5zKHIpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1pLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6ZVswXSx0b2tlbnM6YSx0ZXh0OnJ9fX1saXN0KHQpe2xl''@;'; put 'put ''dCBlPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHQpO2lmKGUpe2xldCByLGksYSxjLG0sQyxQLFksSixjZSxmZSxBZSxIZT1lWzFdLnRyaW0oKTtjb25zdCBYZT1IZS5sZW5ndGg+MSxydD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6WGUsc3RhcnQ6WGU/K0hlLnNsaWNlKDAsLTEp''@;'; put 'put ''OiIiLGxvb3NlOiExLGl0ZW1zOltdfTtIZT1YZT9gXFxkezEsOX1cXCR7SGUuc2xpY2UoLTEpfWA6YFxcJHtIZX1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKEhlPVhlP0hlOiJbKistXSIpO2NvbnN0IGR0PW5ldyBSZWdFeHAoYF4oIHswLDN9JHtIZX0pKCg/OltcdCBdW15cXG5dKik/KD86''@;'; put 'put ''XFxufCQpKWApO2Zvcig7dCYmKEFlPSExLChlPWR0LmV4ZWModCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KHQpKTspe2lmKHI9ZVswXSx0PXQuc3Vic3RyaW5nKHIubGVuZ3RoKSxZPWVbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyxGdD0+IiAiLnJlcGVhdCgzKkZ0''@;'; put 'put ''Lmxlbmd0aCkpLEo9dC5zcGxpdCgiXG4iLDEpWzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oYz0yLGZlPVkudHJpbUxlZnQoKSk6KGM9ZVsyXS5zZWFyY2goL1teIF0vKSxjPWM+ND8xOmMsZmU9WS5zbGljZShjKSxjKz1lWzFdLmxlbmd0aCksQz0hMSwhWSYmL14gKiQvLnRlc3QoSikmJihy''@;'; put 'put ''Kz1KKyJcbiIsdD10LnN1YnN0cmluZyhKLmxlbmd0aCsxKSxBZT0hMCksIUFlKXtjb25zdCBGdD1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxjLTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxufCQpKWApLHBuPW5ldyBSZWdFeHAoYF4gezAs''@;'; put 'put ''JHtNYXRoLm1pbigzLGMtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSxvbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxjLTEpfX0oPzpcYFxgXGB8fn5+KWApLGduPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGMtMSl9''@;'; put 'put ''fSNgKTtmb3IoO3QmJihjZT10LnNwbGl0KCJcbiIsMSlbMF0sSj1jZSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihKPUoucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhKG9uLnRlc3QoSil8fGduLnRlc3QoSil8fEZ0LnRlc3QoSil8fHBuLnRlc3QodCkpKTspe2lm''@;'; put 'put ''KEouc2VhcmNoKC9bXiBdLyk+PWN8fCFKLnRyaW0oKSlmZSs9IlxuIitKLnNsaWNlKGMpO2Vsc2V7aWYoQ3x8WS5zZWFyY2goL1teIF0vKT49NHx8b24udGVzdChZKXx8Z24udGVzdChZKXx8cG4udGVzdChZKSlicmVhaztmZSs9IlxuIitKfSFDJiYhSi50cmltKCkmJihDPSEwKSxyKz1jZSsi''@;'; put 'put ''XG4iLHQ9dC5zdWJzdHJpbmcoY2UubGVuZ3RoKzEpLFk9Si5zbGljZShjKX19cnQubG9vc2V8fChQP3J0Lmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QocikmJihQPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKGk9L15cW1sgeFhdXF0gLy5leGVjKGZlKSxpJiYoYT0iWyBdICIhPT1pWzBdLGZl''@;'; put 'put ''PWZlLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSkscnQuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6cix0YXNrOiEhaSxjaGVja2VkOmEsbG9vc2U6ITEsdGV4dDpmZX0pLHJ0LnJhdys9cn1ydC5pdGVtc1tydC5pdGVtcy5sZW5ndGgtMV0ucmF3PXIudHJpbVJpZ2h0KCks''@;'; put 'put ''cnQuaXRlbXNbcnQuaXRlbXMubGVuZ3RoLTFdLnRleHQ9ZmUudHJpbVJpZ2h0KCkscnQucmF3PXJ0LnJhdy50cmltUmlnaHQoKTtjb25zdCBqdD1ydC5pdGVtcy5sZW5ndGg7Zm9yKG09MDttPGp0O20rKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxydC5pdGVtc1ttXS50b2tlbnM9dGhp''@;'; put 'put ''cy5sZXhlci5ibG9ja1Rva2VucyhydC5pdGVtc1ttXS50ZXh0LFtdKSwhcnQubG9vc2Upe2NvbnN0IEZ0PXJ0Lml0ZW1zW21dLnRva2Vucy5maWx0ZXIob249PiJzcGFjZSI9PT1vbi50eXBlKSxwbj1GdC5sZW5ndGg+MCYmRnQuc29tZShvbj0+L1xuLipcbi8udGVzdChvbi5yYXcpKTtydC5s''@;'; put 'put ''b29zZT1wbn1pZihydC5sb29zZSlmb3IobT0wO208anQ7bSsrKXJ0Lml0ZW1zW21dLmxvb3NlPSEwO3JldHVybiBydH19aHRtbCh0KXtjb25zdCBlPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKHQpO2lmKGUpe2NvbnN0IHI9e3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzplWzBdLHByZToh''@;'; put 'put ''dGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09ZVsxXXx8InNjcmlwdCI9PT1lWzFdfHwic3R5bGUiPT09ZVsxXSksdGV4dDplWzBdfTtpZih0aGlzLm9wdGlvbnMuc2FuaXRpemUpe2NvbnN0IGk9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGVb''@;'; put 'put ''MF0pOmhkKGVbMF0pO3IudHlwZT0icGFyYWdyYXBoIixyLnRleHQ9aSxyLnRva2Vucz10aGlzLmxleGVyLmlubGluZShpKX1yZXR1cm4gcn19ZGVmKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyh0KTtpZihlKXtjb25zdCByPWVbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNl''@;'; put 'put ''KC9ccysvZywiICIpLGk9ZVsyXT9lWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLGE9ZVszXT9lWzNdLnN1YnN0cmluZygxLGVbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2Fw''@;'; put 'put ''ZXMsIiQxIik6ZVszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6cixyYXc6ZVswXSxocmVmOmksdGl0bGU6YX19fXRhYmxlKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKHQpO2lmKGUpe2NvbnN0IHI9e3R5cGU6InRhYmxlIixoZWFkZXI6V19lKGVbMV0pLm1hcChpPT4o''@;'; put 'put ''e3RleHQ6aX0pKSxhbGlnbjplWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czplWzNdJiZlWzNdLnRyaW0oKT9lWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZihyLmhlYWRlci5sZW5ndGg9PT1yLmFsaWduLmxlbmd0''@;'; put 'put ''aCl7ci5yYXc9ZVswXTtsZXQgYSxjLG0sQyxpPXIuYWxpZ24ubGVuZ3RoO2ZvcihhPTA7YTxpO2ErKylyLmFsaWduW2FdPS9eICotKzogKiQvLnRlc3Qoci5hbGlnblthXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChyLmFsaWduW2FdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KHIu''@;'; put 'put ''YWxpZ25bYV0pPyJsZWZ0IjpudWxsO2ZvcihpPXIucm93cy5sZW5ndGgsYT0wO2E8aTthKyspci5yb3dzW2FdPVdfZShyLnJvd3NbYV0sci5oZWFkZXIubGVuZ3RoKS5tYXAoUD0+KHt0ZXh0OlB9KSk7Zm9yKGk9ci5oZWFkZXIubGVuZ3RoLGM9MDtjPGk7YysrKXIuaGVhZGVyW2NdLnRva2Vu''@;'; put 'put ''cz10aGlzLmxleGVyLmlubGluZShyLmhlYWRlcltjXS50ZXh0KTtmb3IoaT1yLnJvd3MubGVuZ3RoLGM9MDtjPGk7YysrKWZvcihDPXIucm93c1tjXSxtPTA7bTxDLmxlbmd0aDttKyspQ1ttXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoQ1ttXS50ZXh0KTtyZXR1cm4gcn19fWxoZWFkaW5n''@;'; put 'put ''KHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzplWzBdLGRlcHRoOiI9Ij09PWVbMl0uY2hhckF0KDApPzE6Mix0ZXh0OmVbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGVbMV0pfX1wYXJhZ3JhcGgo''@;'; put 'put ''dCl7Y29uc3QgZT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKHQpO2lmKGUpe2NvbnN0IHI9IlxuIj09PWVbMV0uY2hhckF0KGVbMV0ubGVuZ3RoLTEpP2VbMV0uc2xpY2UoMCwtMSk6ZVsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6ZVswXSx0ZXh0OnIsdG9rZW5zOnRo''@;'; put 'put ''aXMubGV4ZXIuaW5saW5lKHIpfX19dGV4dCh0KXtjb25zdCBlPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6InRleHQiLHJhdzplWzBdLHRleHQ6ZVswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZVswXSl9fWVzY2FwZSh0KXtjb25zdCBlPXRoaXMu''@;'; put 'put ''cnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OmVbMF0sdGV4dDpoZChlWzFdKX19dGFnKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWModCk7aWYoZSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEg''@;'; put 'put ''L2kudGVzdChlWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoZVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxz''@;'; put 'put ''Y3JpcHQpKFxzfD4pL2kudGVzdChlWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoZVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEp''@;'; put 'put ''LHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzplWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9w''@;'; put 'put ''dGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZVswXSk6aGQoZVswXSk6ZVswXX19bGluayh0KXtjb25zdCBlPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyh0KTtpZihlKXtjb25zdCByPWVbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8u''@;'; put 'put ''dGVzdChyKSl7aWYoIS8+JC8udGVzdChyKSlyZXR1cm47Y29uc3QgYz1ZaihyLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChyLmxlbmd0aC1jLmxlbmd0aCklMj09MClyZXR1cm59ZWxzZXtjb25zdCBjPWZ1bmN0aW9uIGZrdChuLHQpe2lmKC0xPT09bi5pbmRleE9mKHRbMV0pKXJldHVybi0xO2Nv''@;'; put 'put ''bnN0IGU9bi5sZW5ndGg7bGV0IHI9MCxpPTA7Zm9yKDtpPGU7aSsrKWlmKCJcXCI9PT1uW2ldKWkrKztlbHNlIGlmKG5baV09PT10WzBdKXIrKztlbHNlIGlmKG5baV09PT10WzFdJiYoci0tLHI8MCkpcmV0dXJuIGk7cmV0dXJuLTF9KGVbMl0sIigpIik7aWYoYz4tMSl7Y29uc3QgQz0oMD09''@;'; put 'put ''PWVbMF0uaW5kZXhPZigiISIpPzU6NCkrZVsxXS5sZW5ndGgrYztlWzJdPWVbMl0uc3Vic3RyaW5nKDAsYyksZVswXT1lWzBdLnN1YnN0cmluZygwLEMpLnRyaW0oKSxlWzNdPSIifX1sZXQgaT1lWzJdLGE9IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCBjPS9eKFteJyJdKlte''@;'; put 'put ''XHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhpKTtjJiYoaT1jWzFdLGE9Y1szXSl9ZWxzZSBhPWVbM10/ZVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaT1pLnRyaW0oKSwvXjwvLnRlc3QoaSkmJihpPXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdChyKT9pLnNsaWNlKDEpOmku''@;'; put 'put ''c2xpY2UoMSwtMSkpLFpfZShlLHtocmVmOmkmJmkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTphJiZhLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LGVbMF0sdGhpcy5sZXhlcil9fXJlZmxpbmsodCxlKXtsZXQgcjtpZigo''@;'; put 'put ''cj10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWModCkpfHwocj10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyh0KSkpe2xldCBpPShyWzJdfHxyWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lmKGk9ZVtpLnRvTG93ZXJDYXNlKCldLCFpKXtjb25zdCBhPXJbMF0uY2hhckF0KDAp''@;'; put 'put ''O3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6YSx0ZXh0OmF9fXJldHVybiBaX2UocixpLHJbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKHQsZSxyPSIiKXtsZXQgaT10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5sRGVsaW0uZXhlYyh0KTtpZighKCFpfHxpWzNdJiZyLm1hdGNoKC9bXHB7TH1c''@;'; put 'put ''cHtOfV0vdSkpJiYoIWlbMV0mJiFpWzJdfHwhcnx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhyKSkpe2NvbnN0IGM9aVswXS5sZW5ndGgtMTtsZXQgbSxDLFA9YyxZPTA7Y29uc3QgSj0iKiI9PT1pWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFz''@;'; put 'put ''dDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKEoubGFzdEluZGV4PTAsZT1lLnNsaWNlKC0xKnQubGVuZ3RoK2MpO251bGwhPShpPUouZXhlYyhlKSk7KXtpZihtPWlbMV18fGlbMl18fGlbM118fGlbNF18fGlbNV18fGlbNl0sIW0pY29udGludWU7aWYoQz1tLmxl''@;'; put 'put ''bmd0aCxpWzNdfHxpWzRdKXtQKz1DO2NvbnRpbnVlfWlmKChpWzVdfHxpWzZdKSYmYyUzJiYhKChjK0MpJTMpKXtZKz1DO2NvbnRpbnVlfWlmKFAtPUMsUD4wKWNvbnRpbnVlO0M9TWF0aC5taW4oQyxDK1ArWSk7Y29uc3QgY2U9dC5zbGljZSgwLGMraS5pbmRleCtDKzEpO2lmKE1hdGgubWlu''@;'; put 'put ''KGMsQyklMil7Y29uc3QgQWU9Y2Uuc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6Y2UsdGV4dDpBZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoQWUpfX1jb25zdCBmZT1jZS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6Y2UsdGV4dDpmZSx0b2tl''@;'; put 'put ''bnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoZmUpfX19fWNvZGVzcGFuKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKHQpO2lmKGUpe2xldCByPWVbMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IGk9L1teIF0vLnRlc3QociksYT0vXiAvLnRlc3QocikmJi8gJC8u''@;'; put 'put ''dGVzdChyKTtyZXR1cm4gaSYmYSYmKHI9ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKSkscj1oZChyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzplWzBdLHRleHQ6cn19fWJyKHQpe2NvbnN0IGU9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyh0KTtpZihlKXJldHVybnt0eXBlOiJiciIscmF3''@;'; put 'put ''OmVbMF19fWRlbCh0KXtjb25zdCBlPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpO2lmKGUpcmV0dXJue3R5cGU6ImRlbCIscmF3OmVbMF0sdGV4dDplWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhlWzJdKX19YXV0b2xpbmsodCxlKXtjb25zdCByPXRoaXMucnVsZXMu''@;'; put 'put ''aW5saW5lLmF1dG9saW5rLmV4ZWModCk7aWYocil7bGV0IGksYTtyZXR1cm4iQCI9PT1yWzJdPyhpPWhkKHRoaXMub3B0aW9ucy5tYW5nbGU/ZShyWzFdKTpyWzFdKSxhPSJtYWlsdG86IitpKTooaT1oZChyWzFdKSxhPWkpLHt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0OmksaHJlZjphLHRv''@;'; put 'put ''a2Vuczpbe3R5cGU6InRleHQiLHJhdzppLHRleHQ6aX1dfX19dXJsKHQsZSl7bGV0IHI7aWYocj10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyh0KSl7bGV0IGksYTtpZigiQCI9PT1yWzJdKWk9aGQodGhpcy5vcHRpb25zLm1hbmdsZT9lKHJbMF0pOnJbMF0pLGE9Im1haWx0bzoiK2k7ZWxz''@;'; put 'put ''ZXtsZXQgYztkb3tjPXJbMF0sclswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoclswXSlbMF19d2hpbGUoYyE9PXJbMF0pO2k9aGQoclswXSksYT0id3d3LiI9PT1yWzFdPyJodHRwOi8vIityWzBdOnJbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6aSxo''@;'; put 'put ''cmVmOmEsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmksdGV4dDppfV19fX1pbmxpbmVUZXh0KHQsZSl7Y29uc3Qgcj10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWModCk7aWYocil7bGV0IGk7cmV0dXJuIGk9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5p''@;'; put 'put ''dGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoclswXSk6aGQoclswXSk6clswXTpoZCh0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/ZShyWzBdKTpyWzBdKSx7dHlwZToidGV4dCIscmF3OnJbMF0sdGV4dDppfX19fWNvbnN0IHlvPXtuZXdsaW5lOi9e''@;'; put 'put ''KD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAq''@;'; put 'put ''KD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBo''@;'; put 'put ''fFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxc''@;'; put 'put ''bit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3Jp''@;'; put 'put ''cHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSoo''@;'; put 'put ''PzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTpaaixsaGVhZGluZzovXigo''@;'; put 'put ''PzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9e''@;'; put 'put ''W15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvfTt5by5kZWY9TGwoeW8uZGVmKS5yZXBsYWNlKCJsYWJlbCIseW8uX2xhYmVsKS5yZXBs''@;'; put 'put ''YWNlKCJ0aXRsZSIseW8uX3RpdGxlKS5nZXRSZWdleCgpLHlvLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyx5by5saXN0SXRlbVN0YXJ0PUxsKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIseW8uYnVsbGV0KS5nZXRSZWdleCgpLHlvLmxpc3Q9TGwoeW8ubGlzdCkucmVw''@;'; put 'put ''bGFjZSgvYnVsbC9nLHlvLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89Iit5by5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSx5by5fdGFn''@;'; put 'put ''PSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVz''@;'; put 'put ''ZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRo''@;'; put 'put ''ZWFkfHRpdGxlfHRyfHRyYWNrfHVsIix5by5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8seW8uaHRtbD1MbCh5by5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIseW8uX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIseW8uX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwv''@;'; put 'put ''ICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSx5by5saGVhZGluZz1MbCh5by5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLHlvLmJ1bGxldCkuZ2V0UmVnZXgoKSx5by5wYXJhZ3JhcGg9''@;'; put 'put ''TGwoeW8uX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLHlvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2Vz''@;'; put 'put ''IiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwh''@;'; put 'put ''LS0pIikucmVwbGFjZSgidGFnIix5by5fdGFnKS5nZXRSZWdleCgpLHlvLmJsb2NrcXVvdGU9TGwoeW8uYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIix5by5wYXJhZ3JhcGgpLmdldFJlZ2V4KCkseW8ubm9ybWFsPXsuLi55b30seW8uZ2ZtPXsuLi55by5ub3JtYWwsdGFibGU6Il4g''@;'; put 'put ''KihbXlxcbiBdLipcXHwuKilcXG4gezAsM30oPzpcXHwgKik/KDo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifSx5by5n''@;'; put 'put ''Zm0udGFibGU9TGwoeW8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIseW8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwz''@;'; put 'put ''fSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJl''@;'; put 'put ''cGxhY2UoInRhZyIseW8uX3RhZykuZ2V0UmVnZXgoKSx5by5nZm0ucGFyYWdyYXBoPUxsKHlvLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIix5by5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIseW8u''@;'; put 'put ''Z2ZtLnRhYmxlKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwi''@;'; put 'put ''LCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIseW8uX3RhZykuZ2V0UmVnZXgoKSx5by5wZWRhbnRpYz17Li4ueW8ubm9ybWFsLGh0bWw6TGwoIl4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0''@;'; put 'put ''YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLHlvLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxl''@;'; put 'put ''bXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgp''@;'; put 'put ''LGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpaaixsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFn''@;'; put 'put ''cmFwaDpMbCh5by5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLHlvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLHlvLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5j''@;'; put 'put ''ZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3QgT2E9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFp''@;'; put 'put ''bCk+Lyx1cmw6WmosdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxd''@;'; put 'put ''XFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1T''@;'; put 'put ''dHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNd''@;'; put 'put ''fCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rc''@;'; put 'put ''c10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNd''@;'; put 'put ''KF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOlpqLHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxb''@;'; put 'put ''XHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307ZnVuY3Rpb24gbWt0KG4pe3JldHVybiBuLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQiKS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMi''@;'; put 'put ''KS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQxXHUyMDE4IikucmVwbGFjZSgvJy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1''@;'; put 'put ''MjAyNiIpfWZ1bmN0aW9uIFlfZShuKXtsZXQgZSxyLHQ9IiI7Y29uc3QgaT1uLmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspcj1uLmNoYXJDb2RlQXQoZSksTWF0aC5yYW5kb20oKT4uNSYmKHI9IngiK3IudG9TdHJpbmcoMTYpKSx0Kz0iJiMiK3IrIjsiO3JldHVybiB0fU9hLl9wdW5jdHVhdGlv''@;'; put 'put ''bj0iXFxwe1B9JCs8PT5gXnx+IixPYS5wdW5jdHVhdGlvbj1MbChPYS5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csT2EuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLE9hLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0q''@;'; put 'put ''Pz4vZyxPYS5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2csT2EuX2VzY2FwZXM9L1xcKFtwdW5jdF0pL2csT2EuX2NvbW1lbnQ9TGwoeW8uX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIsIi0tXHgzZSIpLmdldFJlZ2V4KCksT2EuZW1TdHJvbmcubERlbGltPUxsKE9hLmVtU3Ry''@;'; put 'put ''b25nLmxEZWxpbSwidSIpLnJlcGxhY2UoL3B1bmN0L2csT2EuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLE9hLmVtU3Ryb25nLnJEZWxpbUFzdD1MbChPYS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxPYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksT2EuZW1T''@;'; put 'put ''dHJvbmcuckRlbGltVW5kPUxsKE9hLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLE9hLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxPYS5hbnlQdW5jdHVhdGlvbj1MbChPYS5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLE9hLl9wdW5jdHVh''@;'; put 'put ''dGlvbikuZ2V0UmVnZXgoKSxPYS5fZXNjYXBlcz1MbChPYS5fZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLE9hLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxPYS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LyxPYS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYn''@;'; put 'put ''KisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxPYS5hdXRvbGluaz1MbChPYS5hdXRvbGluaykucmVwbGFjZSgic2No''@;'; put 'put ''ZW1lIixPYS5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsT2EuX2VtYWlsKS5nZXRSZWdleCgpLE9hLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sT2EudGFnPUxsKE9hLnRhZyku''@;'; put 'put ''cmVwbGFjZSgiY29tbWVudCIsT2EuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsT2EuX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKSxPYS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sT2EuX2hyZWY9LzwoPzpcXC58W15cbjw+''@;'; put 'put ''XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sT2EuX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8sT2EubGluaz1MbChPYS5saW5rKS5yZXBsYWNlKCJsYWJlbCIsT2EuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixPYS5faHJl''@;'; put 'put ''ZikucmVwbGFjZSgidGl0bGUiLE9hLl90aXRsZSkuZ2V0UmVnZXgoKSxPYS5yZWZsaW5rPUxsKE9hLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixPYS5fbGFiZWwpLnJlcGxhY2UoInJlZiIseW8uX2xhYmVsKS5nZXRSZWdleCgpLE9hLm5vbGluaz1MbChPYS5ub2xpbmspLnJlcGxhY2UoInJl''@;'; put 'put ''ZiIseW8uX2xhYmVsKS5nZXRSZWdleCgpLE9hLnJlZmxpbmtTZWFyY2g9TGwoT2EucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLE9hLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsT2Eubm9saW5rKS5nZXRSZWdleCgpLE9hLm5vcm1hbD17Li4uT2F9LE9hLnBlZGFudGlj''@;'; put 'put ''PXsuLi5PYS5ub3JtYWwsc3Ryb25nOntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15f''@;'; put 'put ''fFwqLyxtaWRkbGU6L14oKVwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOkxsKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixPYS5f''@;'; put 'put ''bGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpMbCgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsT2EuX2xhYmVsKS5nZXRSZWdleCgpfSxPYS5nZm09ey4uLk9hLm5vcm1hbCxlc2NhcGU6TGwoT2EuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5n''@;'; put 'put ''ZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8''@;'; put 'put ''XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+''@;'; put 'put ''XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4t''@;'; put 'put ''XSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSxPYS5nZm0udXJsPUxsKE9hLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsT2EuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxPYS5icmVha3M9ey4uLk9hLmdmbSxicjpMbChPYS5icikucmVwbGFj''@;'; put 'put ''ZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6TGwoT2EuZ2ZtLnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyBvZ3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5s''@;'; put 'put ''aW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz10fHwkOCx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBHaix0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5v''@;'; put 'put ''cHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IGU9e2Jsb2NrOnlvLm5vcm1hbCxpbmxpbmU6T2Eubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGUu''@;'; put 'put ''YmxvY2s9eW8ucGVkYW50aWMsZS5pbmxpbmU9T2EucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihlLmJsb2NrPXlvLmdmbSxlLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP09hLmJyZWFrczpPYS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWV9c3RhdGljIGdldCBydWxlcygpe3Jl''@;'; put 'put ''dHVybntibG9jazp5byxpbmxpbmU6T2F9fXN0YXRpYyBsZXgodCxlKXtyZXR1cm4gbmV3IG9nKGUpLmxleCh0KX1zdGF0aWMgbGV4SW5saW5lKHQsZSl7cmV0dXJuIG5ldyBvZyhlKS5pbmxpbmVUb2tlbnModCl9bGV4KHQpe2xldCBlO2Zvcih0PXQucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIp''@;'; put 'put ''LHRoaXMuYmxvY2tUb2tlbnModCx0aGlzLnRva2Vucyk7ZT10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKGUuc3JjLGUudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnModCxlPVtdKXtsZXQgcixpLGEsYztmb3IodD10aGlzLm9wdGlvbnMu''@;'; put 'put ''cGVkYW50aWM/dC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6dC5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChtLEMsUCk9PkMrIiAgICAiLnJlcGVhdChQLmxlbmd0aCkpO3Q7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRl''@;'; put 'put ''bnNpb25zLmJsb2NrJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKG09PiEhKHI9bS5jYWxsKHtsZXhlcjp0aGlzfSx0LGUpKSYmKHQ9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxlLnB1c2gociksITApKSkpe2lmKHI9dGhpcy50b2tlbml6ZXIuc3BhY2UodCkpe3Q9dC5z''@;'; put 'put ''dWJzdHJpbmcoci5yYXcubGVuZ3RoKSwxPT09ci5yYXcubGVuZ3RoJiZlLmxlbmd0aD4wP2VbZS5sZW5ndGgtMV0ucmF3Kz0iXG4iOmUucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmNvZGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxpPWVbZS5sZW5ndGgt''@;'; put 'put ''MV0sIWl8fCJwYXJhZ3JhcGgiIT09aS50eXBlJiYidGV4dCIhPT1pLnR5cGU/ZS5wdXNoKHIpOihpLnJhdys9IlxuIityLnJhdyxpLnRleHQrPSJcbiIrci50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWkudGV4dCk7Y29udGludWV9aWYocj10''@;'; put 'put ''aGlzLnRva2VuaXplci5mZW5jZXModCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxlLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5oZWFkaW5nKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksZS5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tl''@;'; put 'put ''bml6ZXIuaHIodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxlLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKHQpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksZS5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGlz''@;'; put 'put ''dCh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGUucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmh0bWwodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxlLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5kZWYodCkpe3Q9dC5zdWJz''@;'; put 'put ''dHJpbmcoci5yYXcubGVuZ3RoKSxpPWVbZS5sZW5ndGgtMV0sIWl8fCJwYXJhZ3JhcGgiIT09aS50eXBlJiYidGV4dCIhPT1pLnR5cGU/dGhpcy50b2tlbnMubGlua3Nbci50YWddfHwodGhpcy50b2tlbnMubGlua3Nbci50YWddPXtocmVmOnIuaHJlZix0aXRsZTpyLnRpdGxlfSk6KGkucmF3''@;'; put 'put ''Kz0iXG4iK3IucmF3LGkudGV4dCs9IlxuIityLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1pLnRleHQpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIudGFibGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxlLnB1c2gocik7''@;'; put 'put ''Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5saGVhZGluZyh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGUucHVzaChyKTtjb250aW51ZX1pZihhPXQsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2spe2xldCBtPTEv''@;'; put 'put ''MDtjb25zdCBDPXQuc2xpY2UoMSk7bGV0IFA7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGZ1bmN0aW9uKFkpe1A9WS5jYWxsKHtsZXhlcjp0aGlzfSxDKSwibnVtYmVyIj09dHlwZW9mIFAmJlA+PTAmJihtPU1hdGgubWluKG0sUCkpfSksbTwxLzAmJm0+PTAm''@;'; put 'put ''JihhPXQuc3Vic3RyaW5nKDAsbSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihyPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChhKSkpe2k9ZVtlLmxlbmd0aC0xXSxjJiYicGFyYWdyYXBoIj09PWkudHlwZT8oaS5yYXcrPSJcbiIrci5yYXcsaS50ZXh0Kz0iXG4iK3IudGV4dCx0aGlzLmlubGlu''@;'; put 'put ''ZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWkudGV4dCk6ZS5wdXNoKHIpLGM9YS5sZW5ndGghPT10Lmxlbmd0aCx0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCk7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50ZXh0KHQp''@;'; put 'put ''KXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksaT1lW2UubGVuZ3RoLTFdLGkmJiJ0ZXh0Ij09PWkudHlwZT8oaS5yYXcrPSJcbiIrci5yYXcsaS50ZXh0Kz0iXG4iK3IudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5n''@;'; put 'put ''dGgtMV0uc3JjPWkudGV4dCk6ZS5wdXNoKHIpO2NvbnRpbnVlfWlmKHQpe2NvbnN0IG09IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIit0LmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihtKTticmVha310aHJvdyBuZXcgRXJyb3IobSl9fXJldHVy''@;'; put 'put ''biB0aGlzLnN0YXRlLnRvcD0hMCxlfWlubGluZSh0LGU9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzp0LHRva2VuczplfSksZX1pbmxpbmVUb2tlbnModCxlPVtdKXtsZXQgcixpLGEsbSxDLFAsYz10O2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCBZPU9iamVjdC5r''@;'; put 'put ''ZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihZLmxlbmd0aD4wKWZvcig7bnVsbCE9KG09dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhjKSk7KVkuaW5jbHVkZXMobVswXS5zbGljZShtWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYoYz1jLnNsaWNl''@;'; put 'put ''KDAsbS5pbmRleCkrIlsiKyJhIi5yZXBlYXQobVswXS5sZW5ndGgtMikrIl0iK2Muc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0obT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMo''@;'; put 'put ''YykpOyljPWMuc2xpY2UoMCxtLmluZGV4KSsiWyIrImEiLnJlcGVhdChtWzBdLmxlbmd0aC0yKSsiXSIrYy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0obT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVu''@;'; put 'put ''Y3R1YXRpb24uZXhlYyhjKSk7KWM9Yy5zbGljZSgwLG0uaW5kZXgpKyIrKyIrYy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO3Q7KWlmKEN8fChQPSIiKSxDPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMu''@;'; put 'put ''b3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUoWT0+ISEocj1ZLmNhbGwoe2xleGVyOnRoaXN9LHQsZSkpJiYodD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGUucHVzaChyKSwhMCkpKSl7aWYocj10aGlzLnRva2VuaXplci5l''@;'; put 'put ''c2NhcGUodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxlLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50YWcodCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxpPWVbZS5sZW5ndGgtMV0saSYmInRleHQiPT09ci50eXBlJiYidGV4dCI9PT1pLnR5cGU/''@;'; put 'put ''KGkucmF3Kz1yLnJhdyxpLnRleHQrPXIudGV4dCk6ZS5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGluayh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGUucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLnJlZmxpbmsodCx0aGlzLnRva2Vu''@;'; put 'put ''cy5saW5rcykpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxpPWVbZS5sZW5ndGgtMV0saSYmInRleHQiPT09ci50eXBlJiYidGV4dCI9PT1pLnR5cGU/KGkucmF3Kz1yLnJhdyxpLnRleHQrPXIudGV4dCk6ZS5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuZW1TdHJv''@;'; put 'put ''bmcodCxjLFApKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksZS5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4odCkpe3Q9dC5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxlLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5icih0KSl7''@;'; put 'put ''dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGUucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmRlbCh0KSl7dD10LnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGUucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKHQsWV9lKSl7dD10LnN1''@;'; put 'put ''YnN0cmluZyhyLnJhdy5sZW5ndGgpLGUucHVzaChyKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihyPXRoaXMudG9rZW5pemVyLnVybCh0LFlfZSkpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksZS5wdXNoKHIpO2NvbnRpbnVlfWlmKGE9dCx0aGlzLm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBZPTEvMDtjb25zdCBKPXQuc2xpY2UoMSk7bGV0IGNlO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goZnVuY3Rpb24oZmUpe2NlPWZlLmNhbGwoe2xleGVyOnRoaXN9LEop''@;'; put 'put ''LCJudW1iZXIiPT10eXBlb2YgY2UmJmNlPj0wJiYoWT1NYXRoLm1pbihZLGNlKSl9KSxZPDEvMCYmWT49MCYmKGE9dC5zdWJzdHJpbmcoMCxZKzEpKX1pZihyPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoYSxta3QpKXt0PXQuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksIl8iIT09ci5yYXcu''@;'; put 'put ''c2xpY2UoLTEpJiYoUD1yLnJhdy5zbGljZSgtMSkpLEM9ITAsaT1lW2UubGVuZ3RoLTFdLGkmJiJ0ZXh0Ij09PWkudHlwZT8oaS5yYXcrPXIucmF3LGkudGV4dCs9ci50ZXh0KTplLnB1c2gocik7Y29udGludWV9aWYodCl7Y29uc3QgWT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK3QuY2hh''@;'; put 'put ''ckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKFkpO2JyZWFrfXRocm93IG5ldyBFcnJvcihZKX19cmV0dXJuIGV9fWNsYXNzICRqe2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10fHwkOH1jb2RlKHQsZSxyKXtjb25zdCBpPShlfHwiIikubWF0Y2go''@;'; put 'put ''L1xTKi8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2NvbnN0IGE9dGhpcy5vcHRpb25zLmhpZ2hsaWdodCh0LGkpO251bGwhPWEmJmEhPT10JiYocj0hMCx0PWEpfXJldHVybiB0PXQucmVwbGFjZSgvXG4kLywiIikrIlxuIixpPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0''@;'; put 'put ''aW9ucy5sYW5nUHJlZml4K2hkKGkpKyciPicrKHI/dDpoZCh0LCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+Iisocj90OmhkKHQsITApKSsiPC9jb2RlPjwvcHJlPlxuIn1ibG9ja3F1b3RlKHQpe3JldHVybmA8YmxvY2txdW90ZT5cbiR7dH08L2Jsb2NrcXVvdGU+XG5gfWh0''@;'; put 'put ''bWwodCxlKXtyZXR1cm4gdH1oZWFkaW5nKHQsZSxyLGkpe3JldHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzP2A8aCR7ZX0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtpLnNsdWcocil9Ij4ke3R9PC9oJHtlfT5cbmA6YDxoJHtlfT4ke3R9PC9oJHtlfT5cbmB9aHIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn1saXN0KHQsZSxyKXtjb25zdCBpPWU/Im9sIjoidWwiO3JldHVybiI8IitpKyhlJiYxIT09cj8nIHN0YXJ0PSInK3IrJyInOiIiKSsiPlxuIit0KyI8LyIraSsiPlxuIn1saXN0aXRlbSh0KXtyZXR1cm5gPGxpPiR7dH08''@;'; put 'put ''L2xpPlxuYH1jaGVja2JveCh0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifXBhcmFncmFwaCh0KXtyZXR1cm5gPHA+JHt0fTwvcD5cbmB9dGFibGUodCxl''@;'; put 'put ''KXtyZXR1cm4gZSYmKGU9YDx0Ym9keT4ke2V9PC90Ym9keT5gKSwiPHRhYmxlPlxuPHRoZWFkPlxuIit0KyI8L3RoZWFkPlxuIitlKyI8L3RhYmxlPlxuIn10YWJsZXJvdyh0KXtyZXR1cm5gPHRyPlxuJHt0fTwvdHI+XG5gfXRhYmxlY2VsbCh0LGUpe2NvbnN0IHI9ZS5oZWFkZXI/InRoIjoi''@;'; put 'put ''dGQiO3JldHVybihlLmFsaWduP2A8JHtyfSBhbGlnbj0iJHtlLmFsaWdufSI+YDpgPCR7cn0+YCkrdCtgPC8ke3J9PlxuYH1zdHJvbmcodCl7cmV0dXJuYDxzdHJvbmc+JHt0fTwvc3Ryb25nPmB9ZW0odCl7cmV0dXJuYDxlbT4ke3R9PC9lbT5gfWNvZGVzcGFuKHQpe3JldHVybmA8Y29kZT4k''@;'; put 'put ''e3R9PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8YnIvPiI6Ijxicj4ifWRlbCh0KXtyZXR1cm5gPGRlbD4ke3R9PC9kZWw+YH1saW5rKHQsZSxyKXtpZihudWxsPT09KHQ9VV9lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSkp''@;'; put 'put ''cmV0dXJuIHI7bGV0IGk9JzxhIGhyZWY9IicrdCsnIic7cmV0dXJuIGUmJihpKz0nIHRpdGxlPSInK2UrJyInKSxpKz0iPiIrcisiPC9hPiIsaX1pbWFnZSh0LGUscil7aWYobnVsbD09PSh0PVVfZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsdCkpKXJldHVy''@;'; put 'put ''biByO2xldCBpPWA8aW1nIHNyYz0iJHt0fSIgYWx0PSIke3J9ImA7cmV0dXJuIGUmJihpKz1gIHRpdGxlPSIke2V9ImApLGkrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IixpfXRleHQodCl7cmV0dXJuIHR9fWNsYXNzIFNhZXtzdHJvbmcodCl7cmV0dXJuIHR9ZW0odCl7cmV0dXJuIHR9''@;'; put 'put ''Y29kZXNwYW4odCl7cmV0dXJuIHR9ZGVsKHQpe3JldHVybiB0fWh0bWwodCl7cmV0dXJuIHR9dGV4dCh0KXtyZXR1cm4gdH1saW5rKHQsZSxyKXtyZXR1cm4iIityfWltYWdlKHQsZSxyKXtyZXR1cm4iIityfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIE1hZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vl''@;'; put 'put ''bj17fX1zZXJpYWxpemUodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xz''@;'; put 'put ''L2csIi0iKX1nZXROZXh0U2FmZVNsdWcodCxlKXtsZXQgcj10LGk9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkocikpe2k9dGhpcy5zZWVuW3RdO2Rve2krKyxyPXQrIi0iK2l9d2hpbGUodGhpcy5zZWVuLmhhc093blByb3BlcnR5KHIpKX1yZXR1cm4gZXx8KHRoaXMuc2Vlblt0XT1p''@;'; put 'put ''LHRoaXMuc2VlbltyXT0wKSxyfXNsdWcodCxlPXt9KXtjb25zdCByPXRoaXMuc2VyaWFsaXplKHQpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhyLGUuZHJ5cnVuKX19Y2xhc3Mgc2d7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXR8fCQ4LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10''@;'; put 'put ''aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyAkaix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyBTYWUsdGhpcy5zbHVnZ2VyPW5ldyBNYWV9c3RhdGljIHBhcnNlKHQsZSl7''@;'; put 'put ''cmV0dXJuIG5ldyBzZyhlKS5wYXJzZSh0KX1zdGF0aWMgcGFyc2VJbmxpbmUodCxlKXtyZXR1cm4gbmV3IHNnKGUpLnBhcnNlSW5saW5lKHQpfXBhcnNlKHQsZT0hMCl7bGV0IGksYSxjLG0sQyxQLFksSixjZSxmZSxBZSxIZSxYZSxydCxkdCxqdCxGdCxwbixvbixyPSIiO2NvbnN0IGduPXQu''@;'; put 'put ''bGVuZ3RoO2ZvcihpPTA7aTxnbjtpKyspaWYoZmU9dFtpXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZmUudHlwZV0mJihvbj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5yZW5kZXJlcnNbZmUudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGZlKSwhMSE9PW9ufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhmZS50eXBlKSkpcis9b258''@;'; put 'put ''fCIiO2Vsc2Ugc3dpdGNoKGZlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOnIrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOnIrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKGZlLnRva2VucyksZmUuZGVwdGgsel9l''@;'; put 'put ''KHRoaXMucGFyc2VJbmxpbmUoZmUudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOnIrPXRoaXMucmVuZGVyZXIuY29kZShmZS50ZXh0LGZlLmxhbmcsZmUuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKEo9IiIsWT0i''@;'; put 'put ''IixtPWZlLmhlYWRlci5sZW5ndGgsYT0wO2E8bTthKyspWSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShmZS5oZWFkZXJbYV0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOmZlLmFsaWduW2FdfSk7Zm9yKEorPXRoaXMucmVuZGVyZXIudGFibGVyb3coWSksY2U9''@;'; put 'put ''IiIsbT1mZS5yb3dzLmxlbmd0aCxhPTA7YTxtO2ErKyl7Zm9yKFA9ZmUucm93c1thXSxZPSIiLEM9UC5sZW5ndGgsYz0wO2M8QztjKyspWSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShQW2NdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpmZS5hbGlnbltjXX0p''@;'; put 'put ''O2NlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KFkpfXIrPXRoaXMucmVuZGVyZXIudGFibGUoSixjZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpjZT10aGlzLnBhcnNlKGZlLnRva2Vucykscis9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGNlKTtjb250aW51ZTtjYXNlImxpc3QiOmZv''@;'; put 'put ''cihBZT1mZS5vcmRlcmVkLEhlPWZlLnN0YXJ0LFhlPWZlLmxvb3NlLG09ZmUuaXRlbXMubGVuZ3RoLGNlPSIiLGE9MDthPG07YSsrKWR0PWZlLml0ZW1zW2FdLGp0PWR0LmNoZWNrZWQsRnQ9ZHQudGFzayxydD0iIixkdC50YXNrJiYocG49dGhpcy5yZW5kZXJlci5jaGVja2JveChqdCksWGU/''@;'; put 'put ''ZHQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PWR0LnRva2Vuc1swXS50eXBlPyhkdC50b2tlbnNbMF0udGV4dD1wbisiICIrZHQudG9rZW5zWzBdLnRleHQsZHQudG9rZW5zWzBdLnRva2VucyYmZHQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09ZHQudG9rZW5z''@;'; put 'put ''WzBdLnRva2Vuc1swXS50eXBlJiYoZHQudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PXBuKyIgIitkdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpkdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDpwbn0pOnJ0Kz1wbikscnQrPXRoaXMucGFyc2UoZHQudG9rZW5zLFhlKSxj''@;'; put 'put ''ZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShydCxGdCxqdCk7cis9dGhpcy5yZW5kZXJlci5saXN0KGNlLEFlLEhlKTtjb250aW51ZTtjYXNlImh0bWwiOnIrPXRoaXMucmVuZGVyZXIuaHRtbChmZS50ZXh0LGZlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6cis9dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShmZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihjZT1mZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShmZS50b2tlbnMpOmZlLnRleHQ7aSsxPGduJiYidGV4dCI9PT10W2krMV0udHlwZTspZmU9dFsrK2ldLGNlKz0iXG4i''@;'; put 'put ''KyhmZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShmZS50b2tlbnMpOmZlLnRleHQpO3IrPWU/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoY2UpOmNlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IFpuPSdUb2tlbiB3aXRoICInK2ZlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhp''@;'; put 'put ''cy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFpuKTt0aHJvdyBuZXcgRXJyb3IoWm4pfX1yZXR1cm4gcn1wYXJzZUlubGluZSh0LGUpe2U9ZXx8dGhpcy5yZW5kZXJlcjtsZXQgaSxhLGMscj0iIjtjb25zdCBtPXQubGVuZ3RoO2ZvcihpPTA7aTxtO2krKylpZihh''@;'; put 'put ''PXRbaV0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2EudHlwZV0mJihjPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1thLnR5cGVdLmNhbGwoe3BhcnNl''@;'; put 'put ''cjp0aGlzfSxhKSwhMSE9PWN8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoYS50eXBlKSkpcis9Y3x8IiI7ZWxzZSBzd2l0Y2goYS50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0''@;'; put 'put ''IjpyKz1lLnRleHQoYS50ZXh0KTticmVhaztjYXNlImh0bWwiOnIrPWUuaHRtbChhLnRleHQpO2JyZWFrO2Nhc2UibGluayI6cis9ZS5saW5rKGEuaHJlZixhLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoYS50b2tlbnMsZSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOnIrPWUuaW1hZ2UoYS5ocmVmLGEu''@;'; put 'put ''dGl0bGUsYS50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6cis9ZS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShhLnRva2VucyxlKSk7YnJlYWs7Y2FzZSJlbSI6cis9ZS5lbSh0aGlzLnBhcnNlSW5saW5lKGEudG9rZW5zLGUpKTticmVhaztjYXNlImNvZGVzcGFuIjpyKz1lLmNvZGVzcGFuKGEu''@;'; put 'put ''dGV4dCk7YnJlYWs7Y2FzZSJiciI6cis9ZS5icigpO2JyZWFrO2Nhc2UiZGVsIjpyKz1lLmRlbCh0aGlzLnBhcnNlSW5saW5lKGEudG9rZW5zLGUpKTticmVhaztkZWZhdWx0Ontjb25zdCBDPSdUb2tlbiB3aXRoICInK2EudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9w''@;'; put 'put ''dGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoQyk7dGhyb3cgbmV3IEVycm9yKEMpfX1yZXR1cm4gcn19Y2xhc3MgS2p7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXR8fCQ4fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9z''@;'; put 'put ''dHByb2Nlc3MiXSk7cHJlcHJvY2Vzcyh0KXtyZXR1cm4gdH1wb3N0cHJvY2Vzcyh0KXtyZXR1cm4gdH19Y29uc3QgJHk9bmV3IGNsYXNzIHZrdHtkZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFk''@;'; put 'put ''ZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3''@;'; put 'put ''YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2Uob2cubGV4LHNnLnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKG9nLmxleElubGluZSxzZy5wYXJzZUlubGluZSk7UGFyc2VyPXNnO3BhcnNlcj1zZy5wYXJzZTtSZW5kZXJlcj0k''@;'; put 'put ''ajtUZXh0UmVuZGVyZXI9U2FlO0xleGVyPW9nO2xleGVyPW9nLmxleDtUb2tlbml6ZXI9R2o7U2x1Z2dlcj1NYWU7SG9va3M9S2o7Y29uc3RydWN0b3IoLi4udCl7dGhpcy51c2UoLi4udCl9d2Fsa1Rva2Vucyh0LGUpe2xldCByPVtdO2Zvcihjb25zdCBpIG9mIHQpc3dpdGNoKHI9ci5jb25j''@;'; put 'put ''YXQoZS5jYWxsKHRoaXMsaSkpLGkudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGEgb2YgaS5oZWFkZXIpcj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS50b2tlbnMsZSkpO2Zvcihjb25zdCBhIG9mIGkucm93cylmb3IoY29uc3QgYyBvZiBhKXI9ci5jb25jYXQodGhpcy53YWxrVG9r''@;'; put 'put ''ZW5zKGMudG9rZW5zLGUpKTticmVhaztjYXNlImxpc3QiOnI9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKGkuaXRlbXMsZSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMu''@;'; put 'put ''ZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tpLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tpLnR5cGVdLmZvckVhY2goYT0+e3I9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKGlbYV0sZSkpfSk6aS50b2tlbnMmJihyPXIuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyhp''@;'; put 'put ''LnRva2VucyxlKSkpfXJldHVybiByfXVzZSguLi50KXtjb25zdCBlPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIHQuZm9yRWFjaChyPT57Y29uc3QgaT17Li4ucn07aWYoaS5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxp''@;'; put 'put ''LmFzeW5jfHwhMSxyLmV4dGVuc2lvbnMmJihyLmV4dGVuc2lvbnMuZm9yRWFjaChhPT57aWYoIWEubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoYS5yZW5kZXJlcil7Y29uc3QgYz1lLnJlbmRlcmVyc1thLm5hbWVdO2UucmVuZGVyZXJzW2EubmFt''@;'; put 'put ''ZV09Yz9mdW5jdGlvbiguLi5tKXtsZXQgQz1hLnJlbmRlcmVyLmFwcGx5KHRoaXMsbSk7cmV0dXJuITE9PT1DJiYoQz1jLmFwcGx5KHRoaXMsbSkpLEN9OmEucmVuZGVyZXJ9aWYoYS50b2tlbml6ZXIpe2lmKCFhLmxldmVsfHwiYmxvY2siIT09YS5sZXZlbCYmImlubGluZSIhPT1hLmxldmVs''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2VbYS5sZXZlbF0/ZVthLmxldmVsXS51bnNoaWZ0KGEudG9rZW5pemVyKTplW2EubGV2ZWxdPVthLnRva2VuaXplcl0sYS5zdGFydCYmKCJibG9jayI9PT1hLmxldmVsP2Uuc3Rh''@;'; put 'put ''cnRCbG9jaz9lLnN0YXJ0QmxvY2sucHVzaChhLnN0YXJ0KTplLnN0YXJ0QmxvY2s9W2Euc3RhcnRdOiJpbmxpbmUiPT09YS5sZXZlbCYmKGUuc3RhcnRJbmxpbmU/ZS5zdGFydElubGluZS5wdXNoKGEuc3RhcnQpOmUuc3RhcnRJbmxpbmU9W2Euc3RhcnRdKSl9YS5jaGlsZFRva2VucyYmKGUu''@;'; put 'put ''Y2hpbGRUb2tlbnNbYS5uYW1lXT1hLmNoaWxkVG9rZW5zKX0pLGkuZXh0ZW5zaW9ucz1lKSxyLnJlbmRlcmVyKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyAkaih0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgYyBpbiByLnJlbmRlcmVyKXtjb25zdCBtPWFbY107YVtjXT0o''@;'; put 'put ''Li4uQyk9PntsZXQgUD1yLnJlbmRlcmVyW2NdLmFwcGx5KGEsQyk7cmV0dXJuITE9PT1QJiYoUD1tLmFwcGx5KGEsQykpLFB9fWkucmVuZGVyZXI9YX1pZihyLnRva2VuaXplcil7Y29uc3QgYT10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IEdqKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25z''@;'; put 'put ''dCBjIGluIHIudG9rZW5pemVyKXtjb25zdCBtPWFbY107YVtjXT0oLi4uQyk9PntsZXQgUD1yLnRva2VuaXplcltjXS5hcHBseShhLEMpO3JldHVybiExPT09UCYmKFA9bS5hcHBseShhLEMpKSxQfX1pLnRva2VuaXplcj1hfWlmKHIuaG9va3Mpe2NvbnN0IGE9dGhpcy5kZWZhdWx0cy5ob29r''@;'; put 'put ''c3x8bmV3IEtqO2Zvcihjb25zdCBjIGluIHIuaG9va3Mpe2NvbnN0IG09YVtjXTthW2NdPUtqLnBhc3NUaHJvdWdoSG9va3MuaGFzKGMpP0M9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoci5ob29rc1tjXS5jYWxsKGEsQykpLnRoZW4oWT0+bS5jYWxs''@;'; put 'put ''KGEsWSkpO2NvbnN0IFA9ci5ob29rc1tjXS5jYWxsKGEsQyk7cmV0dXJuIG0uY2FsbChhLFApfTooLi4uQyk9PntsZXQgUD1yLmhvb2tzW2NdLmFwcGx5KGEsQyk7cmV0dXJuITE9PT1QJiYoUD1tLmFwcGx5KGEsQykpLFB9fWkuaG9va3M9YX1pZihyLndhbGtUb2tlbnMpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5kZWZhdWx0cy53YWxrVG9rZW5zO2kud2Fsa1Rva2Vucz1mdW5jdGlvbihjKXtsZXQgbT1bXTtyZXR1cm4gbS5wdXNoKHIud2Fsa1Rva2Vucy5jYWxsKHRoaXMsYykpLGEmJihtPW0uY29uY2F0KGEuY2FsbCh0aGlzLGMpKSksbX19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywu''@;'; put 'put ''Li5pfX0pLHRoaXN9c2V0T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi50fSx0aGlzfSNlKHQsZSl7cmV0dXJuKHIsaSxhKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoYT1pLGk9bnVsbCk7Y29uc3QgYz17Li4uaX07aT17Li4udGhpcy5kZWZh''@;'; put 'put ''dWx0cywuLi5jfTtjb25zdCBtPXRoaXMuI3QoaS5zaWxlbnQsaS5hc3luYyxhKTtpZih0eXBlb2Ygcj4idSJ8fG51bGw9PT1yKXJldHVybiBtKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIHIp''@;'; put 'put ''cmV0dXJuIG0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKGZ1bmN0aW9uIHBrdChuLHQpeyFufHxuLnNpbGVudHx8KHQmJmNvbnNvbGUud2Fy''@;'; put 'put ''bigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMi''@;'; put 'put ''KSwobi5zYW5pdGl6ZXx8bi5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g''@;'; put 'put ''dGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwobi5oaWdobGlnaHR8fCJsYW5ndWFnZS0iIT09bi5sYW5nUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGlnaGxpZ2h0IGFuZCBsYW5n''@;'; put 'put ''UHJlZml4IHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWhpZ2hsaWdo''@;'; put 'put ''dC4iKSxuLm1hbmdsZSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogbWFuZ2xlIHBhcmFtZXRlciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhp''@;'; put 'put ''cyB3YXJuaW5nLCBpbnN0YWxsIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1tYW5nbGUsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge21hbmdsZTogZmFsc2V9YC4iKSxuLmJhc2VVcmwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGJhc2VVcmwgcGFyYW1ldGVyIGlzIGRl''@;'; put 'put ''cHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWJhc2UtdXJsLiIpLG4uc21hcnR5cGFudHMmJmNvbnNv''@;'; put 'put ''bGUud2FybigibWFya2VkKCk6IHNtYXJ0eXBhbnRzIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9w''@;'; put 'put ''YWNrYWdlL21hcmtlZC1zbWFydHlwYW50cy4iKSxuLnhodG1sJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiB4aHRtbCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJl''@;'; put 'put ''LiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQteGh0bWwuIiksKG4uaGVhZGVySWRzfHxuLmhlYWRlclByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBk''@;'; put 'put ''ZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1p''@;'; put 'put ''ZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpKX0oaSxhKSxpLmhvb2tzJiYoaS5ob29rcy5vcHRpb25zPWkpLGEpe2NvbnN0IEM9aS5oaWdobGlnaHQ7bGV0IFA7dHJ5e2kuaG9va3MmJihyPWkuaG9va3MucHJlcHJvY2VzcyhyKSksUD10KHIsaSl9Y2F0''@;'; put 'put ''Y2goY2Upe3JldHVybiBtKGNlKX1jb25zdCBZPWNlPT57bGV0IGZlO2lmKCFjZSl0cnl7aS53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoUCxpLndhbGtUb2tlbnMpLGZlPWUoUCxpKSxpLmhvb2tzJiYoZmU9aS5ob29rcy5wb3N0cHJvY2VzcyhmZSkpfWNhdGNoKEFlKXtjZT1BZX1yZXR1''@;'; put 'put ''cm4gaS5oaWdobGlnaHQ9QyxjZT9tKGNlKTphKG51bGwsZmUpfTtpZighQ3x8Qy5sZW5ndGg8M3x8KGRlbGV0ZSBpLmhpZ2hsaWdodCwhUC5sZW5ndGgpKXJldHVybiBZKCk7bGV0IEo9MDtyZXR1cm4gdGhpcy53YWxrVG9rZW5zKFAsY2U9PnsiY29kZSI9PT1jZS50eXBlJiYoSisrLHNldFRp''@;'; put 'put ''bWVvdXQoKCk9PntDKGNlLnRleHQsY2UubGFuZywoZmUsQWUpPT57aWYoZmUpcmV0dXJuIFkoZmUpO251bGwhPUFlJiZBZSE9PWNlLnRleHQmJihjZS50ZXh0PUFlLGNlLmVzY2FwZWQ9ITApLEotLSwwPT09SiYmWSgpfSl9LDApKX0pLHZvaWQoMD09PUomJlkoKSl9aWYoaS5hc3luYylyZXR1''@;'; put 'put ''cm4gUHJvbWlzZS5yZXNvbHZlKGkuaG9va3M/aS5ob29rcy5wcmVwcm9jZXNzKHIpOnIpLnRoZW4oQz0+dChDLGkpKS50aGVuKEM9Pmkud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoQyxpLndhbGtUb2tlbnMpKS50aGVuKCgpPT5DKTpDKS50aGVuKEM9PmUoQyxpKSku''@;'; put 'put ''dGhlbihDPT5pLmhvb2tzP2kuaG9va3MucG9zdHByb2Nlc3MoQyk6QykuY2F0Y2gobSk7dHJ5e2kuaG9va3MmJihyPWkuaG9va3MucHJlcHJvY2VzcyhyKSk7Y29uc3QgQz10KHIsaSk7aS53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoQyxpLndhbGtUb2tlbnMpO2xldCBQPWUoQyxpKTty''@;'; put 'put ''ZXR1cm4gaS5ob29rcyYmKFA9aS5ob29rcy5wb3N0cHJvY2VzcyhQKSksUH1jYXRjaChDKXtyZXR1cm4gbShDKX19fSN0KHQsZSxyKXtyZXR1cm4gaT0+e2lmKGkubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIix0''@;'; put 'put ''KXtjb25zdCBhPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK2hkKGkubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIGU/UHJvbWlzZS5yZXNvbHZlKGEpOnI/dm9pZCByKG51bGwsYSk6YX1pZihlKXJldHVybiBQcm9taXNlLnJlamVjdChpKTtpZighcil0aHJvdyBpO3Io''@;'; put 'put ''aSl9fX0oJDgpO2Z1bmN0aW9uIE9sKG4sdCxlKXtyZXR1cm4gJHkucGFyc2Uobix0LGUpfU9sLm9wdGlvbnM9T2wuc2V0T3B0aW9ucz1mdW5jdGlvbihuKXtyZXR1cm4gJHkuc2V0T3B0aW9ucyhuKSxOX2UoT2wuZGVmYXVsdHM9JHkuZGVmYXVsdHMpLE9sfSxPbC5nZXREZWZhdWx0cz1mdW5j''@;'; put 'put ''dGlvbiBDYWUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRh''@;'; put 'put ''bnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxPbC5kZWZhdWx0cz0kOCxPbC51c2U9ZnVuY3Rpb24oLi4ubil7cmV0dXJuICR5LnVz''@;'; put 'put ''ZSguLi5uKSxOX2UoT2wuZGVmYXVsdHM9JHkuZGVmYXVsdHMpLE9sfSxPbC53YWxrVG9rZW5zPWZ1bmN0aW9uKG4sdCl7cmV0dXJuICR5LndhbGtUb2tlbnMobix0KX0sT2wucGFyc2VJbmxpbmU9JHkucGFyc2VJbmxpbmUsT2wuUGFyc2VyPXNnLE9sLnBhcnNlcj1zZy5wYXJzZSxPbC5SZW5k''@;'; put 'put ''ZXJlcj0kaixPbC5UZXh0UmVuZGVyZXI9U2FlLE9sLkxleGVyPW9nLE9sLmxleGVyPW9nLmxleCxPbC5Ub2tlbml6ZXI9R2osT2wuU2x1Z2dlcj1NYWUsT2wuSG9va3M9S2osT2wucGFyc2U9T2w7Y29uc3QgX2t0PVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24gYmt0KG4sdCl7MSZuJiZWdCgw''@;'; put 'put ''LCJjbHItc3Bpbm5lciIsOCl9bGV0IHdrdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc2FzU2VydmljZT1lLHRoaXMuYWdyZWVDaGVja2VkPSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxhX21hcmtkb3duPSdcbkxpY2Vu''@;'; put 'put ''Y2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBBcHBzLCBhIGJyYW5kIG93bmVk''@;'; put 'put ''IGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJlcjogMjAzOTE0MjQwXG5cblRo''@;'; put 'put ''aXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9z''@;'; put 'put ''ZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1cnBvc2Vz''@;'; put 'put ''LCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUg''@;'; put 'put ''dGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0''@;'; put 'put ''YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90''@;'; put 'put ''IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgNEdMIEFQUFMgUFJP''@;'; put 'put ''VklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJFIExJQUJMRSBUTyBZT1UgRk9S''@;'; put 'put ''IERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuXG5cblxuJ31u''@;'; put 'put ''Z09uSW5pdCgpe2NvbnN0IGU9T2wuc2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWUucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rvd25DYXJkLm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWdp''@;'; put 'put ''c3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihyPT57ci5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZyLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PXIuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9u''@;'; put 'put ''LnJlbG9hZCgpfSkuY2F0Y2gocj0+cikuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Nyb2xsKGUpe2lmKCF0aGlzLmFncmVlQ2xp''@;'; put 'put ''Y2tlZCl7bGV0IHI9ZS50YXJnZXQ7ciYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShyLnNjcm9sbFRvcCtyLm9mZnNldEhlaWdodD49ci5zY3JvbGxIZWlnaHQtMjApKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoSnMpKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24ocixpKXtpZigxJnImJldhKF9rdCw1KSwyJnIpe2xldCBhO2RpKGE9aGkoKSkmJihpLm1hcmtkb3duQ2FyZD1hLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTMs''@;'; put 'put ''dmFyczo2LGNvbnN0czpbWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3JvbGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxb''@;'; put 'put ''ImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXtpZigx''@;'; put 'put ''JnIpe2NvbnN0IGE9SW4oKTtyZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksVGUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLHJlKDMsInAiKSxUZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVu''@;'; put 'put ''dCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSxpZSgpKCkscmUoNSwiZGl2IiwzLDApLGt0KCJzY3JvbGwiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLm9uQ2FyZEJsb2NrU2Nyb2xsKG0pKX0pLGllKCkscmUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIs''@;'; put 'put ''NSkoOSwiaW5wdXQiLDYpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksdWkoaS5hZ3JlZUNoZWNrZWQsbSl8fChpLmFncmVlQ2hlY2tlZD1tKSxtdChtKX0pLGt0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGEpLG10KGkudGVybXNBZ3JlZUNoYW5n''@;'; put 'put ''ZSgpKX0pLGllKCkscmUoMTAsImxhYmVsIiksVGUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksaWUoKSgpLGN0KDEyLGJrdCwxLDAsImNsci1zcGlubmVyIiw3KSxpZSgpKCl9MiZyJiYoYWUoNSkseWUoImlubmVySFRNTCIsaS5ldWxhX21hcmtk''@;'; put 'put ''b3duLHpnKSxhZSgzKSxicigiZGlzYWJsZWQiLGkuYWdyZWVCb3hMb2NrZWQpLGFlKCksbGkoIm5nTW9kZWwiLGkuYWdyZWVDaGVja2VkKSx5ZSgiZGlzYWJsZWQiLGkuYWdyZWVCb3hMb2NrZWQpLGFlKDMpLHllKCJuZ0lmIixpLmFncmVlQm94TG9ja2VkJiZpLmFncmVlQ2xpY2tlZCkpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W21hLHZoLGlsLFFzLHBzLENoLGIyLFNoXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpO2Z1bmN0aW9uIENrdChuLHQpezEmbiYmKHJlKDAsInAiLDI5KSxUZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3UgbW9yZSBk''@;'; put 'put ''ZXRhaWxzIGF0IHRoZSBtb21lbnQgIiksaWUoKSl9ZnVuY3Rpb24gU2t0KG4sdCl7aWYoMSZuJiZWdCgwLCJwIiwzMCksMiZuKXtjb25zdCBlPUVlKDMpO3llKCJpbm5lckhUTUwiLGUubGljZW5zZUVycm9yc1tlLmtleUVycm9yXSx6Zyl9fWZ1bmN0aW9uIE1rdChuLHQpe2lmKDEmbiYmKHJl''@;'; put 'put ''KDAsInAiKSgxLCJzdHJvbmciKSxUZSgyLCJEZXRhaWxzOiIpLGllKCksVGUoMyksaWUoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKDMpLE1yKCIgIixlLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIHhrdChuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsQ2t0LDIsMCwicCIsMjcpKDIsU2t0''@;'; put 'put ''LDEsMSwicCIsMjgpKDMsTWt0LDQsMSwicCIsNCksaWkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKCkseWUoIm5nSWYiLCFlLmtleUVycm9yKSxhZSgpLHllKCJuZ0lmIixlLmtleUVycm9yKSxhZSgpLHllKCJuZ0lmIixlLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIEVrdChuLHQpezEmbiYm''@;'; put 'put ''KHJpKDApLHJlKDEsInAiLDI5KSxUZSgyLCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxWdCgzLCJjb250YWN0LWxpbmsiLDMxKSxUZSg0LCIgb3IgeW91ciByZXNl''@;'; put 'put ''bGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIiksaWUoKSxpaSgpKX1mdW5jdGlvbiBUa3Qobix0KXsxJm4mJihyaSgwKSxyZSgxLCJwIiwyOSksVGUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNlbmNl''@;'; put 'put ''IGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vuc2Uga2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSxpZSgpLGlpKCkpfWZ1bmN0aW9uIEFrdChuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iKSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQs''@;'; put 'put ''cj10LmluZGV4LGk9RWUoMik7YnIoIm1pc3NrZXkiLGkubWlzc21hdGNoZWRLZXkmJmkubWlzc21hdGNoZWRLZXk9PT1lKSxhZSgpLG4wKCIgIixlLCIiLHI9PT0obnVsbD09aS5zeXNzaXRlLnZhbHVlP251bGw6aS5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19ZnVuY3Rp''@;'; put 'put ''b24ga2t0KG4sdCl7aWYoMSZuJiYocmUoMCwicCIsMzIpKDEsInN0cm9uZyIpLFRlKDIsIkFsbG93ZWQgdXNlcnM6IiksaWUoKSxUZSgzKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoMyksTXIoIiAiLGUubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpfX1mdW5jdGlvbiBE''@;'; put 'put ''a3Qobix0KXsxJm4mJlZ0KDAsImNsci1zcGlubmVyIiwzMyl9ZnVuY3Rpb24gSWt0KG4sdCl7MSZuJiYocmUoMCwiZGl2IiksVGUoMSwiIERyb3AgLyBCcm93c2UgbGljZW5jZSBmaWxlICIpLGllKCkpfWZ1bmN0aW9uIFJrdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIpLFRlKDEsIiBTZWxl''@;'; put 'put ''Y3RlZCBmaWxlOiAiKSxyZSgyLCJzdHJvbmciKSxUZSgzKSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgzKTthZSgzKSx2cihlLmxpY2VuY2VmaWxlLmZpbGVuYW1lKX19ZnVuY3Rpb24gTGt0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IikoMSwic3Ryb25nIiksVGUoMiksaWUoKSgpKSwyJm4p''@;'; put 'put ''e2NvbnN0IGU9RWUoMyk7YWUoMiksdnIoZS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gT2t0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxJa3QsMiwwLCJkaXYiLDQpKDIsUmt0LDQsMSwiZGl2Iiw0KSgzLExrdCwzLDEsImRpdiIsNCksaWkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2Fl''@;'; put 'put ''KCkseWUoIm5nSWYiLCIiPT09ZS5saWNlbmNlZmlsZS5maWxlbmFtZSksYWUoKSx5ZSgibmdJZiIsIiIhPT1lLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxhZSgpLHllKCJuZ0lmIixlLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBQa3Qobix0KXsxJm4mJihyZSgwLCJidXR0b24iLDM0KSxU''@;'; put 'put ''ZSgxLCIgQ29udGludWUgd2l0aCBmcmVlIHRpZXIgIiksaWUoKSl9ZnVuY3Rpb24gRmt0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw1KSgxLCJkaXYiLDYpLFRlKDIsIkxpY2VuY2luZyIpLGllKCkscmUoMywiZGl2Iiw3KSg0LCJkaXYiLDgpLGN0KDUseGt0LDQsMywi''@;'; put 'put ''bmctY29udGFpbmVyIiw5KSg2LEVrdCw1LDAsIm5nLWNvbnRhaW5lciIsOSkoNyxUa3QsMywwLCJuZy1jb250YWluZXIiLDkpLHJlKDgsInAiKSg5LCJzdHJvbmciKSxUZSgxMCwiU1lTU0lURToiKSxpZSgpLGN0KDExLEFrdCwyLDQsInNwYW4iLDEwKSxyZSgxMiwiYSIsMTEpLGt0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPWRhKDE0KSxhPWRhKDE2KSxjPUVlKCk7cmV0dXJuIG10KGMuY29weVN5c3NpdGUoaSxhLGMuc3lzc2l0ZS52YWx1ZXx8W10pKX0pLFZ0KDEzLCJjbHItaWNvbiIsMTIsMCkscmUoMTUsInNwYW4iLDEzLDEpLFRlKDE3LCJDb3B5IHRvIGNsaXBi''@;'; put 'put ''b2FyZCIpLGllKCkoKSgpLGN0KDE4LGtrdCw0LDEsInAiLDE0KSxyZSgxOSwiY2xyLXRhYnMiKSgyMCwiY2xyLXRhYiIpKDIxLCJidXR0b24iLDE1KSxUZSgyMiwiVXBsb2FkIGxpY2VuY2UiKSxpZSgpLHJlKDIzLCJjbHItdGFiLWNvbnRlbnQiKSgyNCwiaW5wdXQiLDE2LDIpLGt0KCJjaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgpLm9uRmlsZUNhcHR1cmUoaSkpfSksaWUoKSxyZSgyNiwiZGl2IiwxNyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChkYSgyNSkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGkpe3JldHVybiBn''@;'; put 'put ''dChlKSxtdChFZSgpLm9uRmlsZUNhcHR1cmUoaSwhMCkpfSksY3QoMjcsRGt0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSgyOCxPa3QsNCwzLCJuZy1jb250YWluZXIiLDQpLGllKCkoKSgpLHJlKDI5LCJjbHItdGFiIikoMzAsImJ1dHRvbiIsMTUpLFRlKDMxLCJQYXN0ZSBsaWNlbmNlIiksaWUo''@;'; put 'put ''KSxyZSgzMiwiY2xyLXRhYi1jb250ZW50IikoMzMsImZvcm0iLDE5KSgzNCwicCIpLFRlKDM1LCJMaWNlbmNlIGtleToiKSxpZSgpLHJlKDM2LCJkaXYiLDIwKSgzNywidGV4dGFyZWEiLDIxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVy''@;'; put 'put ''biB1aShhLmxpY2VuY2VLZXlWYWx1ZSxpKXx8KGEubGljZW5jZUtleVZhbHVlPWkpLG10KGkpfSksa3QoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkudHJpbUtleXMoKSl9KSxpZSgpKCkoKSxyZSgzOCwiZm9ybSIsMjIpKDM5LCJwIiksVGUoNDAsIkFjdGl2''@;'; put 'put ''YXRpb24ga2V5OiIpLGllKCkscmUoNDEsImRpdiIsMjApKDQyLCJ0ZXh0YXJlYSIsMjMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEuYWN0aXZhdGlvbktleVZhbHVlLGkpfHwoYS5hY3RpdmF0aW9uS2V5VmFsdWU9aSksbXQo''@;'; put 'put ''aSl9KSxrdCgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS50cmltS2V5cygpKX0pLGllKCkoKSgpKCkoKSgpKCkscmUoNDMsImRpdiIsMjQpKDQ0LCJidXR0b24iLDI1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuYXBwbHlL''@;'; put 'put ''ZXlzKCkpfSksVGUoNDUsIiBBcHBseSBsaWNlbmNlIGtleXMgIiksaWUoKSxjdCg0NixQa3QsMiwwLCJidXR0b24iLDI2KSxpZSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKTthZSgzKSx5ZSgibmdTd2l0Y2giLGUuYWN0aW9uKSxhZSgyKSx5ZSgibmdTd2l0Y2hDYXNlIiwia2V5IiksYWUo''@;'; put 'put ''KSx5ZSgibmdTd2l0Y2hDYXNlIiwibGltaXQiKSxhZSgpLHllKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxhZSg0KSx5ZSgibmdGb3JPZiIsZS5zeXNzaXRlLnZhbHVlKSxhZSg3KSx5ZSgibmdJZiIsZS5saWNlbnNlS2V5RGF0YSYmZS51c2VyQ291bnRMaW1pdGF0aW9uKSxhZSg5KSx5ZSgi''@;'; put 'put ''bmdJZiIsZS5saWNlbmNlRmlsZUxvYWRpbmcpLGFlKCkseWUoIm5nSWYiLCFlLmxpY2VuY2VGaWxlTG9hZGluZyksYWUoOSksbGkoIm5nTW9kZWwiLGUubGljZW5jZUtleVZhbHVlKSxhZSg1KSxsaSgibmdNb2RlbCIsZS5hY3RpdmF0aW9uS2V5VmFsdWUpLGFlKDIpLHllKCJjbHJMb2FkaW5n''@;'; put 'put ''IixlLmFwcGx5aW5nS2V5cykoImRpc2FibGVkIixlLmRpc2FibGVBcHBseUJ1dHRvbiksYWUoMikseWUoIm5nSWYiLGUuaXNBcHBGcmVlVGllci52YWx1ZSl9fWZ1bmN0aW9uIEhrdChuLHQpezEmbiYmVnQoMCwiYXBwLXRlcm1zIil9dmFyIEdfZT1mdW5jdGlvbihuKXtyZXR1cm4gbi5rZXk9''@;'; put 'put ''ImtleSIsbi5yZWdpc3Rlcj0icmVnaXN0ZXIiLG4ubGltaXQ9ImxpbWl0IixuLnVwZGF0ZT0idXBkYXRlIixufShHX2V8fHt9KTtjb25zdCBOa3Q9W3twYXRoOiI6YWN0aW9uIixjb21wb25lbnQ6KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMpe3RoaXMucm91dGU9ZSx0aGlz''@;'; put 'put ''LnJvdXRlcj1yLHRoaXMubGljZW5jZVNlcnZpY2U9aSx0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmFwcFNlcnZpY2U9Yyx0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJj''@;'; put 'put ''b2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBj''@;'; put 'put ''bGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRh''@;'; put 'put ''Y3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3Qg''@;'; put 'put ''Zm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9''@;'; put 'put ''LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0''@;'; put 'put ''aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3Vu''@;'; put 'put ''dExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNl''@;'; put 'put ''bmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShlPT57dGhpcy5rZXlFcnJvcj1lLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9ZS5taXNzbWF0Y2hJZCxlLmRldGFp''@;'; put 'put ''bHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9iKGUuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGU9PntsZXQgcj1lLmFjdGlvbjtyJiZPYmplY3QudmFsdWVzKEdfZSkuaW5jbHVkZXMocikmJih0aGlzLmFjdGlvbj1yKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhp''@;'; put 'put ''cy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShl''@;'; put 'put ''LHIsaSl7Y29uc3QgYT1pLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoYSkudGhlbigoKT0+e2Uuc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLHIuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRU''@;'; put 'put ''aW1lb3V0KCgpPT57ZS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGUucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLHIuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVz''@;'; put 'put ''dCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihyPT57ci5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZyLmFkYXB0ZXJSZXNwb25zZS5y''@;'; put 'put ''ZXR1cm5bMF0mJiJTVUNDRVNTIj09PXIuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKS50aGVuKCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWluZ0tleXM9ITF9KX1vbkZp''@;'; put 'put ''bGVDYXB0dXJlKGUscj0hMSl7bGV0IGk9cj9lWzBdOmUudGFyZ2V0LmZpbGVzWzBdO2lmKHRoaXMubGljZW5jZWZpbGUuZmlsZW5hbWU9aS5uYW1lLCFpKXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMDtjb25zdCBhPW5ldyBGaWxlUmVhZGVyO2Eub25sb2FkPWM9PntpZih0aGlz''@;'; put 'put ''LmxpY2VuY2VGaWxlRXJyb3I9IkVycm9yIHJlYWRpbmcgZmlsZS4iLCFjfHwhYy50YXJnZXR8fDIhPWMudGFyZ2V0LnJlYWR5U3RhdGV8fGMudGFyZ2V0LmVycm9yfHwhYy50YXJnZXQucmVzdWx0KXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VGaWxlRXJy''@;'; put 'put ''b3I9dm9pZCAwO2NvbnN0IG09Yy50YXJnZXQucmVzdWx0LnRvU3RyaW5nKCkuc3BsaXQoIlxuIik7dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9bVsxXSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT1tWzBdfSxhLnJlYWRBc1RleHQoaSl9c3dpdGNoVHlwZShlKXt0aGlzLmlucHV0VHlwZT1lfWdldCBk''@;'; put 'put ''aXNhYmxlQXBwbHlCdXR0b24oKXtyZXR1cm4gdGhpcy5saWNlbmNlS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMuYWN0aXZhdGlvbktleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmxpY2VuY2VLZXlWYWx1ZT09PXRoaXMuY3VycmVudExpY2VuY2VLZXkmJnRoaXMuYWN0aXZhdGlvbktleVZhbHVlPT09''@;'; put 'put ''dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShzMCksV2UocmwpLFdlKEsxKSxXZShKcyksV2UoTUYpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1s''@;'; put 'put ''aWNlbnNpbmciXV0sc3RhbmRhbG9uZTohMSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siY29weUljb24iLCIiXSxbImNvcHlUb29sdGlwIiwiIl0sWyJsaWNlbmNlRmlsZSIsIiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRl''@;'; put 'put ''ciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJuZ1N3aXRjaCJdLFsxLCJjYXJkLXRleHQiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1pc3NrZXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtdG9wLXJpZ2h0IiwzLCJjbGljayJdLFsic2hh''@;'; put 'put ''cGUiLCJjb3B5Iiwic2l6ZSIsIjE1IiwxLCJjdXJzb3ItcG9pbnRlciJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWyJjbHJUYWJMaW5rIiwiIl0sWyJ0eXBlIiwiZmlsZSIsImhpZGRlbiIsIiIsMywiY2hhbmdlIl0sWyJhcHBGaWxlRHJvcCIsIiIs''@;'; put 'put ''MSwiZHJvcC1hcmVhIiwzLCJjbGljayIsImZpbGVEcm9wIl0sWyJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbMSwiY2xyLWZvcm0iLCJsaWNlbnNlLWtleS1mb3JtIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsibmFtZSIsImxpY2Vuc2Uta2V5LWFyZWEiLCJwbGFjZWhv''@;'; put 'put ''bGRlciIsIlBhc3RlIGxpY2VuY2Uga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNsci1mb3JtIiwiYWN0aXZhdGlvbi1rZXktZm9ybSJdLFsibmFtZSIsImFjdGl2YXRpb24ta2V5LWFyZWEiLCJwbGFjZWhv''@;'; put 'put ''bGRlciIsIlBhc3RlIGFjdGl2YXRpb24ga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJidG4iLCJidG4tcHJpbWFy''@;'; put 'put ''eSIsImFwcGx5LWtleXMiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJyb3V0ZXJMaW5rIiwiLyIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tbGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiwzLCJp''@;'; put 'put ''bm5lckhUTUwiLDQsIm5nSWYiXSxbMSwia2V5LWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29sb3ItZ3JlZW4iXSxbMSwibS0wIl0sWzEsInNwaW5uZXItc20iXSxbInJvdXRlckxpbmsiLCIvIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayJd''@;'; put 'put ''XSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmY3QoMCxGa3QsNDcsMTMsImRpdiIsMykoMSxIa3QsMSwwLCJhcHAtdGVybXMiLDQpLDImciYmKHllKCJuZ0lmIiwicmVnaXN0ZXIiIT09aS5hY3Rpb24pLGFlKCkseWUoIm5nSWYiLCJyZWdpc3RlciI9PT1pLmFjdGlvbikpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W2hzLG1hLEFmLG80LFE5LHpsLGlsLHE5LFFzLHEzLFVsLFMxLFZmLEg2LFY2LGd2LE42LEY2LGZ2LFNoLFgxLHdrdCxGSF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKSxjYW5BY3RpdmF0ZTpbd2FlXSxjYW5EZWFjdGl2YXRlOlt3YWVdfV07bGV0IFZrdD0oKCk9Pntj''@;'; put 'put ''bGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj16bih7aW1wb3J0czpbWWMuZm9yQ2hpbGQoTmt0KSxZY119KX19cmV0dXJuIG59KSgp''@;'; put 'put ''LEJrdD0oKCk9PntjbGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj16bih7aW1wb3J0czpbRmEsT2MsTTEsVmt0LFpTXX0pfX1yZXR1''@;'; put 'put ''cm4gbn0pKCk7Y29uc3Qgamt0PSgpPT4oe3N0YW5kYWxvbmU6ITB9KSwkX2U9KG4sdCxlKT0+KHthZGRlZFJvdzpuLGRlbGV0ZWRSb3c6dCx1cGRhdGVkUm93OmV9KSxLX2U9bj0+KHsiY2ggdG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpufSk7ZnVuY3Rpb24gemt0KG4s''@;'; put 'put ''dCl7aWYoMSZuJiYocmUoMCwidGQiLDE5KSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQscj1FZSgpO3llKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrci5qc1BhcmFtc1tlXSksYWUoKSxNcigiICIsci5qc1BhcmFtc1tlXSwiICIpfX1mdW5jdGlvbiBVa3Qobix0KXtp''@;'; put 'put ''ZigxJm4mJihyZSgwLCJ0ZCIsNCksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0LHI9RWUoKTthZSgpLE1yKCIgIixyLmpzUGFyYW1zW2VdLCIgIil9fWZ1bmN0aW9uIFdrdChuLHQpe2lmKDEmbiYmKHJlKDAsInRyIikoMSwidGQiLDQpLFRlKDIpLGllKCksY3QoMyx6''@;'; put 'put ''a3QsMiwyLCJ0ZCIsMTcpKDQsVWt0LDIsMSwidGQiLDE4KSxpZSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoMiksdnIoZSksYWUoKSx5ZSgibmdJZiIsZS5pbmNsdWRlcygiVEFCTEVfSUQiKSksYWUoKSx5ZSgibmdJZiIsIWUuaW5jbHVkZXMoIlRBQkxFX0lEIikpfX1mdW5jdGlv''@;'; put 'put ''biBaa3Qobix0KXtpZigxJm4mJihyZSgwLCJ0ciIpKDEsInRkIiw0KSxUZSgyKSxpZSgpLHJlKDMsInRkIiw0KSxUZSg0KSxpZSgpKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKDMpO2FlKDIpLHZyKGUpLGFlKDIpLHZyKHIuc3VibWl0RGV0YWlsc1tlXSl9fWZ1bmN0aW9uIFlr''@;'; put 'put ''dChuLHQpe2lmKDEmbiYmKHJlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwzKSgzLCJ0aGVhZCIpKDQsInRyIikoNSwidGgiLDQpLFRlKDYsIk5hbWUiKSxpZSgpLHJlKDcsInRoIiw0KSxUZSg4LCJWYWx1ZSIpLGllKCkoKSgpLHJlKDksInRib2R5IiksY3Qo''@;'; put 'put ''MTAsWmt0LDUsMiwidHIiLDUpLGllKCkoKSgpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgxMCkseWUoIm5nRm9yT2YiLGUuc3VibWl0QXJyKX19ZnVuY3Rpb24gR2t0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiKSgxLCJ0ZCIsNCksVGUoMiksaWUoKSxyZSgzLCJ0ZCIsNCksVGUoNCksaWUo''@;'; put 'put ''KSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQscj1FZSgyKTthZSgyKSx2cihlKSxhZSgyKSx2cihyLmpzUGFyYW1zW2VdKX19ZnVuY3Rpb24gJGt0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRhYnMiKSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyMCksVGUoMywiU3VibWl0dGVkIFRh''@;'; put 'put ''YmxlIERldGFpbHMiKSxpZSgpLGN0KDQsWWt0LDExLDEsImNsci10YWItY29udGVudCIsMjEpLGllKCkscmUoNSwiY2xyLXRhYiIpKDYsImJ1dHRvbiIsMjApLFRlKDcsIkJhc2UgVGFibGUgRGV0YWlscyIpLGllKCkscmUoOCwiY2xyLXRhYi1jb250ZW50IikoOSwiZGl2IiwyMikoMTAsInRh''@;'; put 'put ''YmxlIiwzKSgxMSwidGhlYWQiKSgxMiwidHIiKSgxMywidGgiLDQpLFRlKDE0LCJOYW1lIiksaWUoKSxyZSgxNSwidGgiLDQpLFRlKDE2LCJWYWx1ZSIpLGllKCkoKSgpLHJlKDE3LCJ0Ym9keSIpLGN0KDE4LEdrdCw1LDIsInRyIiw1KSxpZSgpKCkoKSgpKCkoKSksMiZuKXtjb25zdCBlPUVl''@;'; put 'put ''KCk7YWUoNCkseWUoImNscklmQWN0aXZlIiwhMCksYWUoMTQpLHllKCJuZ0Zvck9mIixlLmtleXNBcnJheSl9fWZ1bmN0aW9uIEtrdChuLHQpezEmbiYmKHJlKDAsInAiLDcyKSxUZSgxLCIgVGhlcmUgYXJlIG5vIGRldGFpbHMgdG8gc2hvdyAiKSxpZSgpKX1mdW5jdGlvbiBYa3Qobix0KXtp''@;'; put 'put ''ZigxJm4mJihyaSgwKSxyZSgxLCJkaXYiLDczKSgyLCJzcGFuIiksVGUoMywiVGFibGUgSWQ6IiksaWUoKSxyZSg0LCJzdHJvbmciLDc0KSxUZSg1KSxpZSgpKCkscmUoNiwiZGl2IikoNywic3BhbiIpLFRlKDgsIlN1Ym1pdHRlcjoiKSxpZSgpLHJlKDksInNwYW4iLDc1KSxUZSgxMCksaWUo''@;'; put 'put ''KSgpLHJlKDExLCJkaXYiKSgxMiwic3BhbiIpLFRlKDEzLCJTdWJtaXR0ZWQgb246IiksaWUoKSxyZSgxNCwic3BhbiIsNzUpLFRlKDE1KSxpZSgpKCkscmUoMTYsImRpdiIpKDE3LCJzcGFuIiksVGUoMTgsIlN1Ym1pdHRlZCBSZWFzb246IiksaWUoKSxyZSgxOSwic3BhbiIsNzUpLFRlKDIw''@;'; put 'put ''KSxpZSgpKCksaWkoKSksMiZuKXtjb25zdCBlPUVlKDUpO2FlKDQpLHllKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrKG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuVEFCTEVfSUQpKSxhZSgpLE1yKCIgIixudWxsPT1lLnRhYmxlRGV0YWlscz9udWxsOmUudGFibGVE''@;'; put 'put ''ZXRhaWxzLlRBQkxFX0lELCIgIiksYWUoNSksTXIoIiAiLG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksYWUoNSksTXIoIiAiLG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RU''@;'; put 'put ''VE0sIiAiKSxhZSg1KSxNcigiICIsbnVsbD09ZS50YWJsZURldGFpbHM/bnVsbDplLnRhYmxlRGV0YWlscy5TVUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiBxa3Qobix0KXsxJm4mJihyZSgwLCJzcGFuIiw3NiksVnQoMSwiY2xyLWljb24iLDc3KSxUZSgyLCIgT25seSB0aGUg''@;'; put 'put ''Zmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGllKCkpfWZ1bmN0aW9uIEprdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIsNTEpLGN0KDMsS2t0LDIsMCwicCIsNDUpKDQsWGt0''@;'; put 'put ''LDIxLDUsIm5nLWNvbnRhaW5lciIsOCksaWUoKSxyZSg1LCJkaXYiLDUyKSg2LCJkaXYiLDUzKSg3LCJkaXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSg0KTtyZXR1cm4gbXQoaS5nb1RvQmFzZShudWxsPT1p''@;'; put 'put ''LmpzUGFyYW1zP251bGw6aS5qc1BhcmFtcy5UQUJMRV9OTSkpfSksVGUoMTAsIiBWaWV3IGJhc2UgdGFibGUgIiksaWUoKSxyZSgxMSwiYnV0dG9uIiw1Nyksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoNCk7cmV0dXJuIG10KGkuZ2V0VGFibGUoaS50YWJsZUlkKSl9''@;'; put 'put ''KSxUZSgxMiwiIFZpZXcgc3RhZ2VkIGRhdGEgIiksaWUoKSxyZSgxMywiYnV0dG9uIiw1OCksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoNCk7cmV0dXJuIG10KGkuZ29CYWNrKG51bGw9PWkuanNQYXJhbXM/bnVsbDppLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxUZSgx''@;'; put 'put ''NCwiIEVkaXQgYmFzZSB0YWJsZSAiKSxpZSgpKCkoKSgpLHJlKDE1LCJkaXYiLDU5KSgxNiwiYnV0dG9uIiw2MCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSg0KS5hcHByb3ZlVGFibGUoKSl9KSxUZSgxNywiIEFDQ0VQVCAiKSxpZSgpLHJlKDE4LCJidXR0b24i''@;'; put 'put ''LDYxKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDQpLnJlamVjdE9wZW49ITApfSksVGUoMTksIiBSRUpFQ1QgIiksaWUoKSxyZSgyMCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MyksY2ko''@;'; put 'put ''Im5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoNCk7cmV0dXJuIHVpKGEuZm9ybWF0dGVkVmFsdWVzLGkpfHwoYS5mb3JtYXR0ZWRWYWx1ZXM9aSksbXQoaSl9KSxrdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSg0KS5mb3JtYXR0aW5n''@;'; put 'put ''Q2hhbmdlZCgpKX0pLGllKCkscmUoMjMsImxhYmVsIiw2NCksVGUoMjQpLGllKCkoKSgpKCkscmUoMjUsImRpdiIsNjUpLGN0KDI2LHFrdCwzLDAsInNwYW4iLDY2KSxyZSgyNywiZGl2IiwzMSkoMjgsImRpdiIsNjcpKDI5LCJzcGFuIiw2OCksVGUoMzAsIiBDaGFuZ2VkIFJvd3MgIikscmUo''@;'; put 'put ''MzEsInNwYW4iLDY5KSxUZSgzMiksaWUoKSgpLHJlKDMzLCJzcGFuIiw3MCksVGUoMzQsIiBBZGRlZCBSb3dzICIpLHJlKDM1LCJzcGFuIiw2OSksVGUoMzYpLGllKCkoKSxyZSgzNywic3BhbiIsNzEpLFRlKDM4LCIgRGVsZXRlZCBSb3dzICIpLHJlKDM5LCJzcGFuIiw2OSksVGUoNDApLGll''@;'; put 'put ''KCkoKSgpKCkoKSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoNCk7YWUoMykseWUoIm5nSWYiLCFlLnRhYmxlRGV0YWlscyksYWUoKSx5ZSgibmdJZiIsZS50YWJsZURldGFpbHMpLGFlKDEyKSx5ZSgiY2xyTG9hZGluZyIsZS5hY2NlcHRMb2FkaW5nKSgiZGlzYWJsZWQiLCFlLmxvYWRpbmdU''@;'; put 'put ''YWJsZXx8Ik5PIj09PShudWxsPT1lLnBhcmFtcz9udWxsOmUucGFyYW1zLklTQVBQUk9WRVIpfHxlLm5vQ2hhbmdlcyksYWUoMikseWUoImRpc2FibGVkIiwhZS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09ZS5wYXJhbXM/bnVsbDplLnBhcmFtcy5JU0FQUFJPVkVSKXx8ZS5ub0NoYW5n''@;'; put 'put ''ZXMpLGFlKDQpLGxpKCJuZ01vZGVsIixlLmZvcm1hdHRlZFZhbHVlcyksYWUoMiksdnIoZS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksYWUoMikseWUoIm5nSWYiLGUuZGlmZnNMaW1pdCksYWUoNiksdnIoZS5sZW5zLnVwZGF0ZWQpLGFlKDQpLHZyKGUubGVu''@;'; put 'put ''cy5uZXcpLGFlKDQpLHZyKGUubGVucy5kZWxldGVkKX19ZnVuY3Rpb24gUWt0KG4sdCl7MSZuJiYocmUoMCwiZGl2Iiw3NSkoMSwicCIsODEpLFRlKDIsIkxvYWRpbmcgdGFibGUiKSxpZSgpKCkpfWZ1bmN0aW9uIGVEdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsNzgpKDEsInNwYW4iLDc5''@;'; put 'put ''KSxUZSgyLCIgTG9hZGluZy4uLiAiKSxpZSgpLGN0KDMsUWt0LDMsMCwiZGl2Iiw4MCksaWUoKSksMiZuKXtjb25zdCBlPUVlKDQpO2FlKDMpLHllKCJuZ0lmIiwhZS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiB0RHQobix0KXsxJm4mJihyZSgwLCJwIiw3MiksVGUoMSwiIFRoZXJlIGFyZSBu''@;'; put 'put ''byBjaGFuZ2VzIHRvIHNob3cgIiksaWUoKSl9ZnVuY3Rpb24gbkR0KG4sdCl7aWYoMSZuJiYocmUoMCwidGgiLDQpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDthZSgpLHZyKGUpfX1mdW5jdGlvbiByRHQobix0KXtpZigxJm4mJihyZSgwLCJzcGFuIiw4NiksVGUoMSks''@;'; put 'put ''aWUoKSksMiZuKXtjb25zdCBlPUVlKCkuaW5kZXgscj1FZSgyKS5pbmRleCxpPUVlKDQpO2FlKCksTXIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGkuYXJyT2ZDaGFuZ2VzW3JdW2VdLCIiKX19ZnVuY3Rpb24gaUR0KG4sdCl7aWYoMSZuJiYocmUoMCwidGQiLDg0KSxUZSgxKSxjdCgyLHJEdCwy''@;'; put 'put ''LDEsInNwYW4iLDg1KSxpZSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQscj10LmluZGV4LGk9RWUoMikuaW5kZXgsYT1FZSg0KTt5ZSgibmdDbGFzcyIscjQoMyxLX2UsMT09YS5hcnJDaGFuZ2VkW2ldW3JdJiYidXBkYXRlZCI9PWEuY2hBcnJbaV0pKSxhZSgpLE1yKCIgIixhLmRpZmZU''@;'; put 'put ''YWJsZS5kYXRhW2ldW2VdLCIgIiksYWUoKSx5ZSgibmdJZiIsMT09YS5hcnJDaGFuZ2VkW2ldW3JdJiYidXBkYXRlZCI9PWEuY2hBcnJbaV0pfX1mdW5jdGlvbiBhRHQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLGlEdCwzLDUsInRkIiw4MyksaWkoKSksMiZuKXtjb25zdCBlPUVlKCkuaW5k''@;'; put 'put ''ZXgscj1FZSg0KTthZSgpLHllKCJuZ0Zvck9mIixyLnJvd0tleXNbZV0pfX1mdW5jdGlvbiBvRHQobix0KXtpZigxJm4mJihyZSgwLCJ0ZCIsNCksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoMikuaW5kZXgsaT1FZSg0KTthZSgpLE1yKCIgIixpLmRpZmZUYWJs''@;'; put 'put ''ZS5kYXRhW3JdW2VdLCIgIil9fWZ1bmN0aW9uIHNEdChuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsb0R0LDIsMSwidGQiLDQ3KSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoKS5pbmRleCxyPUVlKDQpO2FlKCkseWUoIm5nRm9yT2YiLHIucm93S2V5c1tlXSl9fWZ1bmN0aW9uIGxEdChuLHQpe2lm''@;'; put 'put ''KDEmbiYmKHJlKDAsInRyIiw4MiksY3QoMSxhRHQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsc0R0LDIsMSwibmctY29udGFpbmVyIiw4KSxpZSgpKSwyJm4pe2NvbnN0IGU9dC5pbmRleCxyPUVlKDQpO3llKCJuZ0NsYXNzIixGRSgzLCRfZSwiYWRkZWQiPT1yLmNoQXJyW2VdLCJkZWxldGVk''@;'; put 'put ''Ij09ci5jaEFycltlXSwidXBkYXRlZCI9PXIuY2hBcnJbZV0pKSxhZSgpLHllKCJuZ0lmIiwidXBkYXRlZCI9PT1yLmNoQXJyW2VdKSxhZSgpLHllKCJuZ0lmIiwidXBkYXRlZCIhPT1yLmNoQXJyW2VdKX19ZnVuY3Rpb24gY0R0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2''@;'; put 'put ''IiwyOSkoMSwiZGl2IiwzMCkoMiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsMzMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykuZ29Ub0FwcHJvdmFsc0xpc3QoKSl9KSxWdCg1LCJjbHItaWNvbiIsMzQpLFRlKDYsIkJhY2sgdG8gYXBwcm92YWxz''@;'; put 'put ''IGxpc3QgIiksaWUoKSgpLHJlKDcsImRpdiIsMzUpKDgsImgzIiwzNiksVGUoOSksaWUoKSgpLHJlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykuZ2V0RGV0YWlscygpKX0pLFZ0KDEyLCJjbHItaWNvbiIsMzkpLGll''@;'; put 'put ''KCkoKSgpLHJlKDEzLCJwIiw0MCksVGUoMTQpLGllKCkoKSxyZSgxNSwiZGl2Iiw0MSksY3QoMTYsSmt0LDQxLDExLCJkaXYiLDQyKSxpZSgpLGN0KDE3LGVEdCw0LDEsImRpdiIsNDMpLHJlKDE4LCJkaXYiLDQ0KSxjdCgxOSx0RHQsMiwwLCJwIiw0NSkscmUoMjAsInRhYmxlIiwzKSgyMSwi''@;'; put 'put ''dGhlYWQiKSgyMiwidHIiLDQ2KSxjdCgyMyxuRHQsMiwxLCJ0aCIsNDcpLGllKCkoKSxyZSgyNCwidGJvZHkiKSxjdCgyNSxsRHQsMyw3LCJ0ciIsNDgpLGllKCkoKSgpKCl9aWYoMiZuKXtjb25zdCBlPUVlKDMpO2FlKDkpLE1yKCIgIixudWxsPT1lLmpzUGFyYW1zP251bGw6ZS5qc1BhcmFt''@;'; put 'put ''cy5UQUJMRV9OTSwiICIpLGFlKDUpLE1yKCIgIixudWxsPT1lLmpzUGFyYW1zP251bGw6ZS5qc1BhcmFtcy5UQUJMRV9ERVNDLCIgIiksYWUoMikseWUoIm5nSWYiLGUubG9hZGVkKSxhZSgpLHllKCJuZ0lmIiwhZS5sb2FkaW5nVGFibGUpLGFlKDIpLHllKCJuZ0lmIixlLmxvYWRpbmdUYWJs''@;'; put 'put ''ZSYmZS5ub0NoYW5nZXMpLGFlKDQpLHllKCJuZ0Zvck9mIixlLnJvd0hlYWRlciksYWUoMikseWUoIm5nRm9yT2YiLGUucm93S2V5cyl9fWZ1bmN0aW9uIHVEdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMjcpLGN0KDEsY0R0LDI2LDcsImRpdiIsMjgpLGllKCkpLDImbil7Y29uc3QgZT1F''@;'; put 'put ''ZSgyKTthZSgpLHllKCJuZ0lmIixlLmxvYWRlZCl9fWZ1bmN0aW9uIGREdChuLHQpezEmbiYmKHJlKDAsInNwYW4iLDc5KSxUZSgxLCIgTG9hZGluZy4uLiAiKSxpZSgpKX1mdW5jdGlvbiBoRHQobix0KXsxJm4mJihyZSgwLCJkaXYiKSgxLCJoMyIpLFRlKDIsIkxvYWRpbmcgcHJldmlldyIp''@;'; put 'put ''LGllKCkoKSl9ZnVuY3Rpb24gZkR0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw4NyksY3QoMSxkRHQsMiwwLCJzcGFuIiw4OCkoMixoRHQsMywwLCJkaXYiLDgpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIiwhZS5sb2FkZWQpLGFlKCkseWUoIm5nSWYiLCFlLmxv''@;'; put 'put ''YWRlZCl9fWZ1bmN0aW9uIHBEdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMjMpLGN0KDEsdUR0LDIsMSwiZGl2IiwyNCkscmUoMiwiZGl2IiwyNSksY3QoMyxmRHQsMywyLCJkaXYiLDI2KSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLGUubG9hZGVkKSxhZSgy''@;'; put 'put ''KSx5ZSgibmdJZiIsIWUubG9hZGVkKX19ZnVuY3Rpb24gZ0R0KG4sdCl7MSZuJiYocmUoMCwic3BhbiIsNzYpLFZ0KDEsImNsci1pY29uIiw3NyksVGUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxpZSgpKX1mdW5j''@;'; put 'put ''dGlvbiBtRHQobix0KXsxJm4mJlZ0KDAsImRpdiIsNDkpfWZ1bmN0aW9uIHZEdChuLHQpezEmbiYmKHJlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxUZSgyLCJMb2FkaW5nIHRhYmxlIiksaWUoKSgpKX1mdW5jdGlvbiB5RHQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDEwNCkoMSwic3BhbiIs''@;'; put 'put ''NzkpLFRlKDIsIiBMb2FkaW5nLi4uICIpLGllKCksY3QoMyx2RHQsMywwLCJkaXYiLDgwKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoNCk7YWUoMykseWUoIm5nSWYiLCFlLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIF9EdChuLHQpe2lmKDEmbiYmKHJlKDAsInRoIiw0KSxUZSgxKSxpZSgpKSwy''@;'; put 'put ''Jm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoKSx2cihlKX19ZnVuY3Rpb24gYkR0KG4sdCl7aWYoMSZuJiYocmUoMCwic3BhbiIsODYpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpLmluZGV4LHI9RWUoMikuaW5kZXgsaT1FZSg0KTthZSgpLE1yKCJPcmlnaW5hbCB2YWx1ZSBpczog''@;'; put 'put ''IixpLmFyck9mQ2hhbmdlc1tyXVtlXSwiIil9fWZ1bmN0aW9uIHdEdChuLHQpe2lmKDEmbiYmKHJlKDAsInRkIiw4NCksVGUoMSksY3QoMixiRHQsMiwxLCJzcGFuIiw4NSksaWUoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9dC5pbmRleCxpPUVlKDIpLmluZGV4LGE9RWUoNCk7eWUo''@;'; put 'put ''Im5nQ2xhc3MiLHI0KDMsS19lLDE9PWEuYXJyQ2hhbmdlZFtpXVtyXSYmInVwZGF0ZWQiPT1hLmNoQXJyW2ldKSksYWUoKSxNcigiICIsYS5kaWZmVGFibGUuZGF0YVtpXVtlXSwiICIpLGFlKCkseWUoIm5nSWYiLDE9PWEuYXJyQ2hhbmdlZFtpXVtyXSYmInVwZGF0ZWQiPT1hLmNoQXJyW2ld''@;'; put 'put ''KX19ZnVuY3Rpb24gQ0R0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSx3RHQsMyw1LCJ0ZCIsODMpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgpLmluZGV4LHI9RWUoNCk7YWUoKSx5ZSgibmdGb3JPZiIsci5yb3dLZXlzW2VdKX19ZnVuY3Rpb24gU0R0KG4sdCl7aWYoMSZuJiYocmUoMCwidGQi''@;'; put 'put ''LDQpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKDIpLmluZGV4LGk9RWUoNCk7YWUoKSxNcigiICIsaS5kaWZmVGFibGUuZGF0YVtyXVtlXSwiICIpfX1mdW5jdGlvbiBNRHQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLFNEdCwyLDEsInRkIiw0NyksaWkoKSks''@;'; put 'put ''MiZuKXtjb25zdCBlPUVlKCkuaW5kZXgscj1FZSg0KTthZSgpLHllKCJuZ0Zvck9mIixyLnJvd0tleXNbZV0pfX1mdW5jdGlvbiB4RHQobix0KXtpZigxJm4mJihyZSgwLCJ0ciIsODIpLGN0KDEsQ0R0LDIsMSwibmctY29udGFpbmVyIiw4KSgyLE1EdCwyLDEsIm5nLWNvbnRhaW5lciIsOCks''@;'; put 'put ''aWUoKSksMiZuKXtjb25zdCBlPXQuaW5kZXgscj1FZSg0KTt5ZSgibmdDbGFzcyIsRkUoMywkX2UsImFkZGVkIj09ci5jaEFycltlXSwiZGVsZXRlZCI9PXIuY2hBcnJbZV0sInVwZGF0ZWQiPT1yLmNoQXJyW2VdKSksYWUoKSx5ZSgibmdJZiIsInVwZGF0ZWQiPT09ci5jaEFycltlXSksYWUo''@;'; put 'put ''KSx5ZSgibmdJZiIsInVwZGF0ZWQiIT09ci5jaEFycltlXSl9fWZ1bmN0aW9uIEVEdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsOTMpKDEsImRpdiIsOTQpKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGd0KGUpLG10KEVlKDMpLmdvVG9TdWJtaXRMaXN0KCkpfSksVnQoNSwiY2RzLWljb24iLDk2KSxUZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIpLGllKCkoKSxyZSg3LCJkaXYiLDk3KSg4LCJoMyIsOTgpLFRlKDkpLGllKCkoKSxyZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxr''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDMpLnRhYmxlRmxhZz0hMCl9KSxWdCgxMiwiY2xyLWljb24iLDM5KSxpZSgpKCkoKSxyZSgxMywicCIsOTkpLFRlKDE0KSxpZSgpKCkscmUoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2Iiw3MykoMTgsInNw''@;'; put 'put ''YW4iKSxUZSgxOSwiVGFibGUgSWQ6IiksaWUoKSxyZSgyMCwic3Ryb25nIiw3NCkoMjEsInNwYW4iKSxUZSgyMiksaWUoKSgpKCkscmUoMjMsImRpdiIpKDI0LCJzcGFuIiksVGUoMjUsIlN1Ym1pdHRlZCBvbjoiKSxpZSgpLHJlKDI2LCJzcGFuIiw3NSksVGUoMjcpLGllKCkoKSxyZSgyOCwi''@;'; put 'put ''ZGl2IikoMjksInNwYW4iKSxUZSgzMCwiU3VibWl0IE1lc3NhZ2U6IiksaWUoKSxyZSgzMSwic3BhbiIpLFRlKDMyKSxpZSgpKCkoKSxyZSgzMywiZGl2Iiw1MikoMzQsImRpdiIsNTMpKDM1LCJkaXYiLDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLGt0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtndChlKTtjb25zdCBpPUVlKDMpO3JldHVybiBtdChpLmdvVG9CYXNlKGkuc3ViT2JqLmJhc2UpKX0pLFRlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGllKCkscmUoMzksImJ1dHRvbiIsNTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDMpO3JldHVybiBt''@;'; put 'put ''dChpLmdldFRhYmxlKGkuc3ViT2JqLnRhYmxlSWQpKX0pLFRlKDQwLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxpZSgpLHJlKDQxLCJidXR0b24iLDU4KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgzKTtyZXR1cm4gbXQoaS5nb0JhY2soaS5zdWJPYmouYmFzZSkpfSks''@;'; put 'put ''VGUoNDIsIiBFZGl0IGJhc2UgdGFibGUgIiksaWUoKSgpKCkoKSxyZSg0MywiZGl2Iiw2NSksY3QoNDQsZ0R0LDMsMCwic3BhbiIsNjYpLHJlKDQ1LCJkaXYiLDMxKSg0NiwiZGl2Iiw2NykoNDcsInNwYW4iLDY4KSxUZSg0OCwiIENoYW5nZWQgUm93cyAiKSxyZSg0OSwic3BhbiIsNjkpLFRl''@;'; put 'put ''KDUwKSxpZSgpKCkscmUoNTEsInNwYW4iLDcwKSxUZSg1MiwiIEFkZGVkIFJvd3MgIikscmUoNTMsInNwYW4iLDY5KSxUZSg1NCksaWUoKSgpLHJlKDU1LCJzcGFuIiw3MSksVGUoNTYsIiBEZWxldGVkIFJvd3MgIikscmUoNTcsInNwYW4iLDY5KSxUZSg1OCksaWUoKSgpKCkoKSgpLHJlKDU5''@;'; put 'put ''LCJkaXYiLDUzKSg2MCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDEwMCkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIsNjMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDMpO3JldHVybiB1aShhLmZvcm1hdHRlZFZhbHVlcyxpKXx8''@;'; put 'put ''KGEuZm9ybWF0dGVkVmFsdWVzPWkpLG10KGkpfSksa3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxpZSgpLHJlKDYzLCJsYWJlbCIpLFRlKDY0KSxpZSgpKCkoKSgpKCkoKSxyZSg2NSwiZGl2IiwxMDEpLGN0KDY2LG1E''@;'; put 'put ''dCwxLDAsImRpdiIsNDIpLGllKCksY3QoNjcseUR0LDQsMSwiZGl2IiwxMDIpLHJlKDY4LCJkaXYiLDEwMykoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxjdCg3MixfRHQsMiwxLCJ0aCIsNDcpLGllKCkoKSxyZSg3MywidGJvZHkiKSxjdCg3NCx4RHQsMyw3LCJ0ciIs''@;'; put 'put ''NDgpLGllKCkoKSgpKCl9aWYoMiZuKXtjb25zdCBlPUVlKDMpO2FlKDkpLE1yKCIgIixlLnN1Yk9iai5iYXNlLCIgIiksYWUoNSksTXIoIiAiLGUudGFibGVEZXNjcmlwdGlvbiwiICIpLGFlKDYpLHllKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrZS5zdWJPYmoudGFibGVJZCksYWUoMiksTXIo''@;'; put 'put ''IiAiLGUuc3ViT2JqLnRhYmxlSWQsIiIpLGFlKDUpLE1yKCIgIixlLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxhZSg1KSxNcigiICIsZS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksYWUoMTIpLHllKCJuZ0lmIixlLmRpZmZzTGltaXQpLGFlKDYpLHZyKGUubGVucy51cGRhdGVkKSxhZSg0KSx2''@;'; put 'put ''cihlLmxlbnMubmV3KSxhZSg0KSx2cihlLmxlbnMuZGVsZXRlZCksYWUoNCksbGkoIm5nTW9kZWwiLGUuZm9ybWF0dGVkVmFsdWVzKSxhZSgyKSx2cihlLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxhZSgyKSx5ZSgibmdJZiIsZS5sb2FkZWQpLGFlKCkseWUo''@;'; put 'put ''Im5nSWYiLCFlLmxvYWRpbmdUYWJsZSksYWUoNSkseWUoIm5nRm9yT2YiLGUucm93SGVhZGVyKSxhZSgyKSx5ZSgibmdGb3JPZiIsZS5yb3dLZXlzKX19ZnVuY3Rpb24gVER0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw5MSksY3QoMSxFRHQsNzUsMTYsImRpdiIsOTIpLGllKCkpLDImbil7''@;'; put 'put ''Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIixlLmxvYWRlZCl9fWZ1bmN0aW9uIEFEdChuLHQpezEmbiYmKHJlKDAsImRpdiIpKDEsImgzIiksVGUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxpZSgpKCkpfWZ1bmN0aW9uIGtEdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMTA1''@;'; put 'put ''KSgxLCJkaXYiLDEwNikoMiwic3BhbiIsNzkpLFRlKDMsIiBMb2FkaW5nLi4uICIpLGllKCksY3QoNCxBRHQsMywwLCJkaXYiLDgpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKDQpLHllKCJuZ0lmIiwhZS5sb2FkZWQpfX1mdW5jdGlvbiBERHQobix0KXtpZigxJm4mJihyZSgwLCJk''@;'; put 'put ''aXYiKSxjdCgxLFREdCwyLDEsImRpdiIsODkpKDIsa0R0LDUsMSwiZGl2Iiw5MCksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsZS5sb2FkZWQpLGFlKCkseWUoIm5nSWYiLCFlLmxvYWRlZCl9fWxldCBYX2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxh''@;'; put 'put ''LGMpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWUsdGhpcy5zYXNTZXJ2aWNlPXIsdGhpcy5ldmVudFNlcnZpY2U9aSx0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9Yyx0aGlzLmRldGFpbHNPcGVuPSExLHRoaXMucmVqZWN0T3Blbj0hMSx0aGlzLmxlbnM9e25ldzowLHVwZGF0ZWQ6MCxkZWxldGVk''@;'; put 'put ''OjB9LHRoaXMubG9hZGVkPSExLHRoaXMubG9hZGluZ1RhYmxlPSExLHRoaXMuc3VibWl0UmVhc29uPSIiLHRoaXMuaW5zdGFuY2U9ImhvdEluc3RhbmNlIix0aGlzLmFjY2VwdExvYWRpbmc9ITEsdGhpcy5yZWplY3RMb2FkaW5nPSExLHRoaXMuc3VibWl0dGVkPSExLHRoaXMudGFibGVGbGFn''@;'; put 'put ''PSExLHRoaXMucm93S2V5cz1bXSx0aGlzLmNoQXJyPVtdLHRoaXMuc2Vjb25kT3Blbj0hMSx0aGlzLmZvcm1hdHRlZFZhbHVlcz0hMCx0aGlzLmNoYW5nZXNBcnI9W10sdGhpcy5kaWZmVGFibGU9e2RhdGE6W119LHRoaXMuZGlmZnNMaW1pdD0hMSx0aGlzLnJlY29yZHNMaW1pdD0xMDAsdGhp''@;'; put 'put ''cy5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmU9ITF9Z2V0IG5vQ2hhbmdlcygpe3JldHVybiAwPT09dGhpcy5sZW5zLm5ldyYmMD09PXRoaXMubGVucy51cGRhdGVkJiYwPT09dGhpcy5sZW5zLmRlbGV0ZWR9Z29Ub0Jhc2UoZSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIv''@;'; put 'put ''dmlldy9kYXRhLyIrZSl9Z29Ub0FwcHJvdmFsc0xpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZSIpfWdldFRhYmxlKGUpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrZSl9Z29CYWNrKGUpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgi''@;'; put 'put ''L2VkaXRvci8iK2UpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93RGV0YWlsc1NlbGVjdChlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWdldERldGFpbHMoKXt0aGlzLmRldGFpbHNPcGVu''@;'; put 'put ''PSEwfW9uSG90U2VsZWN0aW9uKGUpe3RoaXMuaG90U2VsZWN0aW9uPWUuc2xpY2UoMCw0KX1vbkhvdERlc2VsZWN0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90U2VsZWN0aW9uPW51bGx9LDEwMCl9cmVqZWN0aW5nKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtlLnJlamVj''@;'; put 'put ''dExvYWRpbmc9ITAsZS5zdWJtaXRSZWFzb249dl9lKGUuc3VibWl0UmVhc29uLnJlcGxhY2UoL1xuL2csIi4gIikpO2xldCByPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmUudGFibGVJZCxTVFBfUkVBU09OOmUuc3VibWl0UmVhc29ufTt5aWVsZCBlLnNhc1N0b3JlU2Vydmlj''@;'; put 'put ''ZS5yZWplY3RpbmcociwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGk9PntlLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaT0+e2UuYWNjZXB0TG9hZGluZz0hMSxlLnJlamVjdExvYWRpbmc9ITF9KX0pKCl9YXBwcm92''@;'; put 'put ''ZVRhYmxlKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtlLmFjY2VwdExvYWRpbmc9ITA7bGV0IHI9e0FDVElPTjoiQVBQUk9WRV9UQUJMRSIsVEFCTEU6ZS50YWJsZUlkLERJRkZUSU1FOmUucGFyYW1zPy5ESUZGVElNRSxMSUJEUzplLnBhcmFtcz8uTElCRFN9O3lpZWxkIGUu''@;'; put 'put ''c2FzU3RvcmVTZXJ2aWNlLmFwcHJvdmVUYWJsZShyLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaT0+e2UucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlJiZlLnNhc1NlcnZpY2UucmVsb2FkU3RhcnR1cERhdGEoKSxlLnJvdXRlLm5hdmlnYXRl''@;'; put 'put ''QnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaT0+e2UuYWNjZXB0TG9hZGluZz0hMX0pfSkoKX1nb1RvU3VibWl0TGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oZSl7dmFyIHI9dGhpcztyZXR1cm4gWihm''@;'; put 'put ''dW5jdGlvbiooKXt5aWVsZCByLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGUpLnRoZW4oaT0+e3IudGFibGVEZXRhaWxzPWkuanNwYXJhbXNbMF0sci5qc1BhcmFtcz1pLmpzcGFyYW1zWzBdO2xldCBhPVtdO2Zvcihjb25zdCBjIGluIHIuanNQYXJhbXMpci5qc1BhcmFtcy5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eShjKSYmYS5wdXNoKGMpO3Iua2V5c0FycmF5PWEsIk1QRV9UQUJMRVMiPT09aS5qc3BhcmFtc1swXS5CQVNFX0RTJiYoci5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmU9ITApfSkuY2F0Y2goaT0+e3IuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9Pnty''@;'; put 'put ''LmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgZT10aGlzLnJlc3BvbnNlLm5ldyxyPXRoaXMucmVzcG9uc2UudXBkYXRlcyxpPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxhPXRo''@;'; put 'put ''aXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoZT10aGlzLnJlc3BvbnNlLmZtdF9uZXcscj10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGk9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxhPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmln''@;'; put 'put ''aW5hbHM9YSx0aGlzLnJvd0tleXM9W107Zm9yKGxldCBkdD0wO2R0PHIubGVuZ3RoO2R0Kyspe2xldCBqdD1PYmplY3Qua2V5cyhyW2R0XSk7Zm9yKGxldCBGdD0wO0Z0PGp0Lmxlbmd0aDtGdCsrKXJbZHRdW2p0W0Z0XV0hPT1hW2R0XVtqdFtGdF1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7''@;'; put 'put ''aW5kOmR0LGZpZWxkOmp0W0Z0XSxwcm9wOnJbZHRdW2p0W0Z0XV0sb3JpZ2luYWw6YVtkdF1banRbRnRdXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVN''@;'; put 'put ''X0RFTEVURUR8fDB9O2xldCBQPVtdLFk9ci5jb25jYXQoZSxpKTtmb3IobGV0IGR0PTA7ZHQ8dGhpcy5yZXNwb25zZS5jb2xzLmxlbmd0aDtkdCsrKVAucHVzaCh0aGlzLnJlc3BvbnNlLmNvbHNbZHRdLk5BTUUpO2xldCBKPXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5y''@;'; put 'put ''ZWNvcmRzTGltaXQ6dGhpcy5sZW5zLm5ldyxjZT10aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMudXBkYXRlZDt0aGlzLmRpZmZzTGltaXQ9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLnVwZGF0''@;'; put 'put ''ZWQ+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy5kZWxldGVkPnRoaXMucmVjb3Jkc0xpbWl0LHRoaXMuYWRkQ291bnQ9SjtsZXQgQWU9W10sSGU9W107Zm9yKGxldCBkdD0wO2R0PFAubGVuZ3RoO2R0KyspSGUucHVzaCh7ZGF0YTpQW2R0XSxyZWFkT25seTohMH0pO3RoaXMuZGlmZlRh''@;'; put 'put ''YmxlLmRhdGE9WTtmb3IobGV0IGR0PTA7ZHQ8WS5sZW5ndGg7ZHQrKyl7bGV0IEZ0PU9iamVjdC5rZXlzKFlbZHRdKTt0aGlzLnJvd0tleXMucHVzaChGdCl9bGV0IFhlPVtdLHJ0PVtdO2ZvcihsZXQgZHQ9MDtkdDx0aGlzLmRpZmZUYWJsZS5kYXRhLmxlbmd0aDtkdCsrKXtpZihkdDxjZSYm''@;'; put 'put ''MCE9PWNlKXtYZS5wdXNoKFtdKSxydC5wdXNoKFtdKSxBZS5wdXNoKCJ1cGRhdGVkIik7bGV0IGp0PU9iamVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbZHRdKTtmb3IobGV0IEZ0PTA7RnQ8anQubGVuZ3RoO0Z0Kyspe2xldCBwbj1qdFtGdF07YVtkdF1bcG5dIT09cltkdF1bcG5dPyhY''@;'; put 'put ''ZVtkdF0ucHVzaCghMCkscnRbZHRdLnB1c2goYVtkdF1bcG5dKSk6KFhlW2R0XS5wdXNoKCExKSxydFtkdF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPVhlLHRoaXMuYXJyT2ZDaGFuZ2VzPXJ0fWR0Pj1jZSYmZHQ8Y2UrSiYmQWUucHVzaCgiYWRkZWQiKSxkdD5KK2NlLTEmJkFlLnB1''@;'; put 'put ''c2goImRlbGV0ZWQiKX10aGlzLmNoQXJyPUFlLHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPVl9bmdBZnRlclZpZXdJbml0KCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtpZihlLl9kZXRhaWxzU3ViPWUuc2FzU3RvcmVTZXJ2aWNl''@;'; put 'put ''LnN1Ym1pdHREZXRhaWwuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGk9WihmdW5jdGlvbiooYSl7ZS5zdWJPYmo9YS52aWV3RGF0YSxlLnRhYmxlSWQ9YS52aWV3RGF0YS50YWJsZUlkLGUuc3VibWl0dGVkPWEudmlld0RhdGEuc3ViLGUuc3VibWl0RGV0YWlscz1hLmRhdGEsZS5zdWJtaXRB''@;'; put 'put ''cnI9W107Zm9yKGxldCBtIGluIGUuc3VibWl0RGV0YWlscykic3ViIiE9PW0mJmUuc3VibWl0QXJyLnB1c2gobSk7bGV0IGM9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6ZS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07ZS5zYXNTdG9yZVNlcnZpY2Uuc2hv''@;'; put 'put ''d0RpZmZzKGMsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihtPT57ZS5wYXJhbXM9bS5wYXJhbXNbMF0sZS5yZXNwb25zZT1tLGUuY2FsY0RpZmYoKSxlLmNhbGxDaGFuZ2VzSW5mbyhlLnRhYmxlSWQpfSkuY2F0Y2gobT0+bSkuZmluYWxseSgoKT0+e2UubG9h''@;'; put 'put ''ZGluZ1RhYmxlPSEwfSl9KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGUucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47ZS50YWJsZUlkPWUucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlk''@;'; put 'put ''O2xldCByPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmUudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Uuc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhyLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaT0+e2UucGFyYW1z''@;'; put 'put ''PWkucGFyYW1zWzBdLGUucmVzcG9uc2U9aSxlLmNhbGNEaWZmKCksZS5jYWxsQ2hhbmdlc0luZm8oZS50YWJsZUlkKX0pLmNhdGNoKGk9PntlLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57ZS5sb2FkaW5nVGFibGU9ITAsZS5zZXRGb2N1cygpfSl9KSgpfW5nT25EZXN0cm95KCl7''@;'; put 'put ''dGhpcy5fZGV0YWlsc1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBlPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7ZSYmZS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEUyKSxXZShKcyksV2UoU2MpLFdlKHMwKSxXZShybCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUtZGV0YWlscyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFp''@;'; put 'put ''bmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0s''@;'; put 'put ''WzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184''@;'; put 'put ''Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNj''@;'; put 'put ''ZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0''@;'; put 'put ''IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5n''@;'; put 'put ''SWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1''@;'; put 'put ''c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJj''@;'; put 'put ''bGljayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJd''@;'; put 'put ''LFsxLCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIs''@;'; put 'put ''NCwibmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01''@;'; put 'put ''Il0sWzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0''@;'; put 'put ''biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwi''@;'; put 'put ''YnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJj''@;'; put 'put ''bHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNt''@;'; put 'put ''IiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZm9ybWF0''@;'; put 'put ''dGVkLXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01Iiwi''@;'; put 'put ''Y2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUtMTgiXSxbMSwi''@;'; put 'put ''bXQtMTUiXSxbMSwibGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3Rp''@;'; put 'put ''ZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0Zv''@;'; put 'put ''ciIsIm5nRm9yT2YiXSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0''@;'; put 'put ''ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCIsInNpemUi''@;'; put 'put ''LCIyMCJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZsb3ct''@;'; put 'put ''YXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1j''@;'; put 'put ''b250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGku''@;'; put 'put ''ZGV0YWlsc09wZW4sYyl8fChpLmRldGFpbHNPcGVuPWMpLGN9KSxyZSgxLCJoMyIsMSksVGUoMiwiQXBwcm92YWwgRGV0YWlscyIpLGllKCkscmUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxUZSg4LCJOYW1lIiksaWUoKSxyZSg5LCJ0aCIs''@;'; put 'put ''NCksVGUoMTAsIlZhbHVlIiksaWUoKSgpKCkscmUoMTEsInRib2R5IiksY3QoMTIsV2t0LDUsMywidHIiLDUpLGllKCkoKSgpLHJlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXRhaWxzT3Blbj0hMX0pLFRlKDE1LCIgT2sgIiks''@;'; put 'put ''aWUoKSgpKCkscmUoMTYsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGkudGFibGVGbGFnLGMpfHwoaS50YWJsZUZsYWc9YyksY30pLHJlKDE3LCJoMyIsMSksVGUoMTgsIkFsbCBEZXRhaWxzIiksaWUoKSxyZSgxOSwiZGl2Iiwy''@;'; put 'put ''KSxjdCgyMCwka3QsMTksMiwiY2xyLXRhYnMiLDgpLGllKCkscmUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRhYmxlRmxhZz0hMX0pLFRlKDIzLCIgT2sgIiksaWUoKSgpKCkscmUoMjQsImNsci1tb2RhbCIsMCksY2koImNsck1v''@;'; put 'put ''ZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGkucmVqZWN0T3BlbixjKXx8KGkucmVqZWN0T3Blbj1jKSxjfSkscmUoMjUsImgzIiwxKSxUZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxpZSgpLHJlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24iLDkpKDMwLCJk''@;'; put 'put ''aXYiLDEwKSgzMSwibGFiZWwiLDExKSxUZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksaWUoKSxyZSgzMywidGV4dGFyZWEiLDEyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGkuc3VibWl0UmVhc29uLGMpfHwoaS5zdWJtaXRSZWFzb249YyksY30pLGll''@;'; put 'put ''KCkoKSgpKCkoKSxyZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnJlamVjdE9wZW49ITF9KSxUZSgzNiwiIENhbmNlbCAiKSxpZSgpLHJlKDM3LCJidXR0b24iLDE0KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVq''@;'; put 'put ''ZWN0aW5nKCl9KSxUZSgzOCwiIE9LICIpLGllKCkoKSgpLHJlKDM5LCJkaXYiLDE1KSxjdCg0MCxwRHQsNCwyLCJkaXYiLDE2KSg0MSxERHQsMywyLCJkaXYiLDgpLGllKCkpLDImciYmKGxpKCJjbHJNb2RhbE9wZW4iLGkuZGV0YWlsc09wZW4pLGFlKDEyKSx5ZSgibmdGb3JPZiIsaS5rZXlz''@;'; put 'put ''QXJyYXkpLGFlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGkudGFibGVGbGFnKSxhZSg0KSx5ZSgibmdJZiIsaS50YWJsZUZsYWcpLGFlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGkucmVqZWN0T3BlbiksYWUoOSksbGkoIm5nTW9kZWwiLGkuc3VibWl0UmVhc29uKSx5ZSgibmdNb2RlbE9wdGlvbnMi''@;'; put 'put ''LG5sKDExLGprdCkpKCJpbm5lckhUTUwiLGkuc3VibWl0UmVhc29uLHpnKSxhZSg0KSx5ZSgiY2xyTG9hZGluZyIsaS5yZWplY3RMb2FkaW5nKSxhZSgzKSx5ZSgibmdJZiIsIWkuc3VibWl0dGVkKSxhZSgpLHllKCJuZ0lmIixpLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W1J1LGhzLG1h''@;'; put 'put ''LFE5LHpsLHZoLGlsLHE5LFFzLHEzLFgxLFVsLHJzLGh1LGMwLFMxLFZ3LFZmLHBzLENoLHp3LGIyLEg2LFY2LGd2LE42LEY2LGZ2XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpO2NvbnN0IElEdD1uPT4oe25vQm9yZGVyOm59KSxSRHQ9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9u''@;'; put 'put ''IExEdChuLHQpezEmbiYmKHJlKDAsImRpdiIsMTApKDEsImRpdiIsMTEpLFZ0KDIsImNsci1pY29uIiwxMikscmUoMywiaDMiLDEzKSxUZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGllKCkoKSgpKX1mdW5jdGlvbiBPRHQobix0KXsxJm4mJihyZSgwLCJoMyIsMTQp''@;'; put 'put ''LFRlKDEsIiBSRVZJRVcgIiksaWUoKSl9ZnVuY3Rpb24gUER0KG4sdCl7aWYoMSZuJiYocmUoMCwicCIsMTUpLFRlKDEsIiBZb3UgaGF2ZSAiKSxyZSgyLCJzcGFuIiksVGUoMyksaWUoKSxUZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDMp''@;'; put 'put ''LE1yKCIiLGUucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gRkR0KG4sdCl7MSZuJiYocmUoMCwic3BhbiIsMTgpLFRlKDEsIiBMb2FkaW5nLi4uICIpLGllKCkpfWZ1bmN0aW9uIEhEdChuLHQpezEmbiYmKHJlKDAsImRpdiIpKDEsImgzIiksVGUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIp''@;'; put 'put ''LGllKCkoKSl9ZnVuY3Rpb24gTkR0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwxNiksY3QoMSxGRHQsMiwwLCJzcGFuIiwxNykoMixIRHQsMywwLCJkaXYiLDkpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLCFlLmxvYWRlZCksYWUoKSx5ZSgibmdJZiIsIWUubG9h''@;'; put 'put ''ZGVkKX19ZnVuY3Rpb24gVkR0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsNDApfWZ1bmN0aW9uIEJEdChuLHQpezEmbiYmVnQoMCwiY2xyLXNwaW5uZXIiLDQxKSwyJm4mJnllKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIGpEdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNs''@;'; put 'put ''ci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLFRlKDIpLGllKCkscmUoMywiY2xyLWRnLWNlbGwiKSxUZSg0KSxpZSgpLHJlKDUsImNsci1kZy1jZWxsIiksVGUoNiksaWUoKSxyZSg3LCJjbHItZGctY2VsbCIpLFRlKDgpLGllKCkscmUoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyOCko''@;'; put 'put ''MTEsImEiLDI5KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS5pbmRleDtyZXR1cm4gbXQoRWUoMikuZ2V0Q2xpY2tlZChpKSl9KSxWdCgxMiwiY2xyLWljb24iLDMwKSxyZSgxMywic3BhbiIsMzEpLFRlKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxpZSgpKCks''@;'; put 'put ''cmUoMTUsImEiLDMyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKSxhPWkuJGltcGxpY2l0LGM9aS5pbmRleCxtPUVlKDIpO3JldHVybiBtdChhLnJlamVjdExvYWRpbmc/IiI6bS5yZWplY3RpbmcoYykpfSksY3QoMTYsVkR0LDEsMCwiY2xyLWljb24iLDMzKSgxNyxCRHQs''@;'; put 'put ''MSwxLCJjbHItc3Bpbm5lciIsMzQpLHJlKDE4LCJzcGFuIiwzMSksVGUoMTksIlJlamVjdCIpLGllKCkoKSxyZSgyMCwiYSIsMzUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoMikuZ2V0VGFibGUoaS50YWJsZUlkKSl9KSxWdCgy''@;'; put 'put ''MSwiY2xyLWljb24iLDM2KSxyZSgyMiwic3BhbiIsMzEpLFRlKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxpZSgpKCkoKSgpLHJlKDI0LCJjbHItZGctY2VsbCIsMzcpKDI1LCJidXR0b24iLDM4KSxrdCgiY2xpY2siLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSkuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBFZSgyKS5kb3dubG9hZChhLnRhYmxlSWQpLG10KGkuc3RvcFByb3BhZ2F0aW9uKCkpfSksVnQoMjYsImNsci1pY29uIiwzOSksaWUoKSgpKCl9aWYoMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKDIpLHZyKGUuc3VibWl0dGVyKSxhZSgyKSx2cihlLmJhc2VUYWJsZSksYWUo''@;'; put 'put ''MiksdnIoZS5zdWJtaXR0ZWQpLGFlKDIpLHZyKGUuc3VibWl0UmVhc29uKSxhZSg4KSx5ZSgibmdJZiIsIWUucmVqZWN0TG9hZGluZyksYWUoKSx5ZSgibmdJZiIsZS5yZWplY3RMb2FkaW5nKSxhZSg4KSx5ZSgiaWQiLGUudGFibGVJZCl9fWZ1bmN0aW9uIHpEdChuLHQpe2lmKDEmbiYmKHJl''@;'; put 'put ''KDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxUZSgzLCIgU1VCTUlUVEVSICIpLFZ0KDQsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyMSksaWUoKSxyZSg1LCJjbHItZGctY29sdW1uIiwyMCksVGUoNiwiIEJBU0UgVEFCTEUgIiksVnQoNywiY2xy''@;'; put 'put ''LWRnLXN0cmluZy1maWx0ZXIiLDIyKSxpZSgpLHJlKDgsImNsci1kZy1jb2x1bW4iLDIwKSxUZSg5LCIgU1VCTUlUVEVEICIpLFZ0KDEwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjMpLGllKCkscmUoMTEsImNsci1kZy1jb2x1bW4iLDIwKSxUZSgxMiwiIFNVQk1JVCBSRUFTT04gIiksVnQo''@;'; put 'put ''MTMsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyNCksaWUoKSxyZSgxNCwiY2xyLWRnLWNvbHVtbiIpLFRlKDE1LCJBQ1RJT04iKSxpZSgpLHJlKDE2LCJjbHItZGctY29sdW1uIiksVGUoMTcsIkRPV05MT0FEIiksaWUoKSxjdCgxOCxqRHQsMjcsNywiY2xyLWRnLXJvdyIsMjUpLHJlKDE5LCJj''@;'; put 'put ''bHItZGctZm9vdGVyIikoMjAsImNsci1kZy1wYWdpbmF0aW9uIiwyNiwwKSgyMiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjcpLFRlKDIzLCJJdGVtcyBwZXIgcGFnZSIpLGllKCksVGUoMjQpLGllKCkoKSgpKCkpLDImbil7Y29uc3QgZT1kYSgyMSkscj1FZSgpO2FlKDIpLHllKCJjbHJEZ0ZpZWxk''@;'; put 'put ''Iiwic3VibWl0dGVyIiksYWUoMikseWUoImNsckRnU3RyaW5nRmlsdGVyIixyLnN1Ym1pdHRlckZpbHRlciksYWUoKSx5ZSgiY2xyRGdGaWVsZCIsImJhc2VUYWJsZSIpLGFlKDIpLHllKCJjbHJEZ1N0cmluZ0ZpbHRlciIsci5iYXNlVGFibGVGaWx0ZXIpLGFlKCkseWUoImNsckRnRmllbGQi''@;'; put 'put ''LCJzdWJtaXR0ZWQiKSxhZSgyKSx5ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLHIuc3VibWl0dGVkRmlsdGVyKSxhZSgpLHllKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksYWUoMikseWUoImNsckRnU3RyaW5nRmlsdGVyIixyLnN1Ym1pdFJlYXNvbkZpbHRlciksYWUoNSkseWUoImNsckRn''@;'; put 'put ''SXRlbXNPZiIsci5hcHByb3ZlTGlzdCksYWUoMikseWUoImNsckRnUGFnZVNpemUiLDEwKSxhZSgyKSx5ZSgiY2xyUGFnZVNpemVPcHRpb25zIixubCgxNCxSRHQpKSxhZSgyKSxqMygiICIsZS5maXJzdEl0ZW0rMSwiIC0gIixlLmxhc3RJdGVtKzEsIiBvZiAiLGUudG90YWxJdGVtcywiIGFw''@;'; put 'put ''cHJvdmFscyAiKX19Y2xhc3MgVUR0e2FjY2VwdHModCxlKXtyZXR1cm4gdC5zdWJtaXR0ZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIFdEdHthY2NlcHRzKHQsZSl7cmV0dXJuIHQuYmFzZVRhYmxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBaRHR7YWNjZXB0cyh0LGUpe3JldHVybiB0LnN1Ym1pdHRlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZS50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3MgWUR0e2FjY2VwdHModCxlKXtyZXR1cm4gdC5zdWJtaXRSZWFzb24udG9Mb3dlckNhc2UoKS5pbmRl''@;'; put 'put ''eE9mKGUudG9Mb3dlckNhc2UoKSk+PTB9fWxldCBHRHQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhLGMpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWUsdGhpcy5ldmVudFNlcnZpY2U9cix0aGlzLnJvdXRlPWksdGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5jZHI9Yyx0aGlzLmxvYWRl''@;'; put 'put ''ZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMuc3VibWl0dGVyRmlsdGVyPW5ldyBVRHQsdGhpcy5iYXNlVGFibGVGaWx0ZXI9bmV3IFdEdCx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgWkR0LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBZRHR9Z2V0VGFibGUoZSl7dGhpcy5yb3V0ZS5u''@;'; put 'put ''YXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitlKX1nZXRDbGlja2VkKGUpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxlSWQ9dGhpcy5hcHByb3ZlTGlzdFtlXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLmFwcHJv''@;'; put 'put ''dmVMaXN0W2VdLnRhYmxlSWQpKX1yZWplY3RpbmcoZSl7dmFyIHI9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXt2b2lkIDAhPT1yLmFwcHJvdmVMaXN0JiYoci50YWJsZUlkPXIuYXBwcm92ZUxpc3RbZV0udGFibGVJZCk7bGV0IGk9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6''@;'; put 'put ''ci50YWJsZUlkLFNUUF9SRUFTT046InF1aWNrIHJlamVjdGlvbiJ9O3RyeXsoci5hcHByb3ZlTGlzdHx8W10pW2VdLnJlamVjdExvYWRpbmc9ITAsKHlpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhpLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpKS5mcm9t''@;'; put 'put ''c2FzWzBdLlJFU1BPTlNFLmluY2x1ZGVzKCJTVUNDRVNTIikmJigoci5hcHByb3ZlTGlzdHx8W10pW2VdLnJlamVjdExvYWRpbmc9ITEsci5hcHByb3ZlTGlzdD8uc3BsaWNlKGUsMSksci5yZW1haW5lZC0tLHIuY2RyLmRldGVjdENoYW5nZXMoKSl9Y2F0Y2goYSl7ci5ldmVudFNlcnZpY2Uu''@;'; put 'put ''Y2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvcmVqZWN0aW9uIixhKX19KSgpfW5nT25Jbml0KCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtlLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtl''@;'; put 'put ''Lml0ZW1zTnVtPTEwO2xldCByPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgaT15aWVsZCBlLnNhc1N0b3JlU2VydmljZS5nZXRBcHByb3ZhbHMociwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiKTtlLnJlbWFpbmVkPWkuZnJvbXNhcy5sZW5n''@;'; put 'put ''dGg7bGV0IGE9aS5mcm9tc2FzLm1hcChmdW5jdGlvbihjKXtyZXR1cm57dGFibGVJZDpjLlRBQkxFX0lELHN1Ym1pdHRlcjpjLlNVQk1JVFRFRF9CWV9OTSxzdWJtaXR0ZWQ6Yy5TVUJNSVRURURfT05fRFRUTSxiYXNlVGFibGU6Yy5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjpjLlNVQk1JVFRF''@;'; put 'put ''RF9SRUFTT05fVFhUfX0pO2UuYXBwcm92ZUxpc3Q9YSxlLmxvYWRlZD0hMH1jYXRjaChpKXtlLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLGkpfX0pKCl9ZG93bmxvYWQoZSl7bGV0IHI9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29u''@;'; put 'put ''ZmlnKCksaT1yLnNlcnZlclVybCxhPXIuYXBwTG9jLGM9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihpK2MrIi8/X3Byb2dyYW09IithKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoRTIpLFdlKFNjKSxXZShybCksV2UoSnMpLFdlKEZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3Rh''@;'; put 'put ''bmRhbG9uZTohMSxkZWNsczo5LHZhcnM6OCxjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsi''@;'; put 'put ''Y2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiLDQsIm5nSWYiXSxbIm5n''@;'; put 'put ''LWlmIiwibG9hZGVkIiwxLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIiwibm9hcHByb3ZhbHMtaW5mby13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAi''@;'; put 'put ''LDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJhcHBy''@;'; put 'put ''b3ZhbHMtbGlzdC13cmFwcGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlciIsMywi''@;'; put 'put ''Y2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgYmFzZSB0YWJsZSIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1p''@;'; put 'put ''dCByZWFzb24iLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbInJvbGUiLCJ0b29sYmFyIiwiYXJpYS1sYWJlbCIsIlRhYmxlIGFjdGlvbnMiLDEsImNsci1y''@;'; put 'put ''b3ciLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCIs''@;'; put 'put ''ImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIi''@;'; put 'put ''LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywi''@;'; put 'put ''Y2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNs''@;'; put 'put ''aWNrIiwiaWQiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDMsImNsclNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiZGl2IiwxKSgxLCJk''@;'; put 'put ''aXYiLDIpLGN0KDIsTER0LDUsMCwiZGl2IiwzKSxyZSgzLCJkaXYiLDQpLGN0KDQsT0R0LDIsMCwiaDMiLDUpKDUsUER0LDUsMSwicCIsNiksaWUoKSxjdCg2LE5EdCwzLDIsImRpdiIsNykscmUoNywiZGl2Iiw4KSxjdCg4LHpEdCwyNSwxNSwiZGl2Iiw5KSxpZSgpKCkoKSksMiZyJiYoYWUo''@;'; put 'put ''MikseWUoIm5nSWYiLDA9PT1pLnJlbWFpbmVkKSxhZSgpLHllKCJuZ0NsYXNzIixyNCg2LElEdCwhaS5sb2FkZWQpKSxhZSgpLHllKCJuZ0lmIixpLmxvYWRlZCYmMCE9PWkucmVtYWluZWQpLGFlKCkseWUoIm5nSWYiLGkubG9hZGVkJiYwIT09aS5yZW1haW5lZCksYWUoKSx5ZSgibmdJZiIs''@;'; put 'put ''IWkubG9hZGVkKSxhZSgyKSx5ZSgibmdJZiIsaS5hcHByb3ZlTGlzdCYmMCE9PWkucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOltSdSxtYSxaNixycCxDdixJSCx0QyxTQSxSSCxVNix5NCxTdixpQyxXNixfdix6NixidixxdyxVbCxTaF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSko''@;'; put 'put ''KTtjb25zdCAkRHQ9bj0+KHtub0JvcmRlcjpufSksS0R0PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiBYRHQobix0KXsxJm4mJihyZSgwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxWdCgyLCJjbHItaWNvbiIsMTUpLHJlKDMsImgzIiwxNiksVGUoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQg''@;'; put 'put ''YW55IHRhYmxlcyAiKSxpZSgpKCkoKSl9ZnVuY3Rpb24gcUR0KG4sdCl7MSZuJiYocmUoMCwiaDMiLDE3KSxUZSgxLCIgU1VCTUlUIFFVRVVFICIpLGllKCkpfWZ1bmN0aW9uIEpEdChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDE4KSxUZSgxLCIgWW91IGhhdmUgIikscmUoMiwic3BhbiIpLFRl''@;'; put 'put ''KDMpLGllKCksVGUoNCwic3VibWlzc2lvbnMgd2FpdGluZyB0byBiZSBhcHByb3ZlZCAiKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoMyksTXIoIiIsZS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBRRHQobix0KXsxJm4mJihyZSgwLCJzcGFuIiwyMSksVGUoMSwiIExvYWRpbmcuLi4g''@;'; put 'put ''IiksaWUoKSl9ZnVuY3Rpb24gZUl0KG4sdCl7MSZuJiYocmUoMCwiZGl2IikoMSwiaDMiKSxUZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBsaXN0IiksaWUoKSgpKX1mdW5jdGlvbiB0SXQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDE5KSxjdCgxLFFEdCwyLDAsInNwYW4iLDIwKSgyLGVJdCwz''@;'; put 'put ''LDAsImRpdiIsMyksaWUoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKCkseWUoIm5nSWYiLCFlLmxvYWRlZCksYWUoKSx5ZSgibmdJZiIsIWUubG9hZGVkKX19ZnVuY3Rpb24gbkl0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWRnLXJvdyIsMzApLGt0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoNSkuZ29Ub0RldGFpbHMoaS50YWJsZUlkKSl9KSxyZSgxLCJjbHItZGctY2VsbCIpLFRlKDIpLGllKCkscmUoMywiY2xyLWRnLWNlbGwiKSxUZSg0KSxpZSgpLHJlKDUsImNsci1kZy1jZWxsIiksVGUoNiksaWUo''@;'; put 'put ''KSxyZSg3LCJjbHItZGctY2VsbCIpKDgsImRpdiIsMzEpKDksImEiLDMyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKDUpLmdvVG9TdGFnZShpLnRhYmxlSWQpKX0pLFZ0KDEwLCJjbHItaWNvbiIsMzMpLHJlKDExLCJzcGFuIiwz''@;'; put 'put ''NCksVGUoMTIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLGllKCkoKSgpKCkscmUoMTMsImNsci1kZy1jZWxsIiwzNSkoMTQsImJ1dHRvbiIsMzYpLGt0KCJjbGljayIsZnVuY3Rpb24oaSl7Y29uc3QgYT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIEVlKDUpLmRvd25sb2FkKGEudGFibGVJ''@;'; put 'put ''ZCksbXQoaS5zdG9wUHJvcGFnYXRpb24oKSl9KSxWdCgxNSwiY2xyLWljb24iLDM3KSxpZSgpKCkoKX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoMiksdnIoZS5iYXNlKSxhZSgyKSx2cihlLnN1Ym1pdHRlZCksYWUoMiksdnIoZS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiBySXQo''@;'; put 'put ''bix0KXtpZigxJm4mJihyZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDIzKSgyLCJjbHItZGctY29sdW1uIiksVGUoMywiQkFTRSBUQUJMRSIpLGllKCkscmUoNCwiY2xyLWRnLWNvbHVtbiIsMjQpLFRlKDUsIiBTVUJNSVRURUQgIiksVnQoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDI1''@;'; put 'put ''KSxpZSgpLHJlKDcsImNsci1kZy1jb2x1bW4iLDI0KSxUZSg4LCIgU1VCTUlUIFJFQVNPTiAiKSxWdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjYpLGllKCkscmUoMTAsImNsci1kZy1jb2x1bW4iLDEzKSxUZSgxMSwiQUNUSU9OIiksaWUoKSxyZSgxMiwiY2xyLWRnLWNvbHVtbiIsMTMp''@;'; put 'put ''LFRlKDEzLCJET1dOTE9BRCIpLGllKCksY3QoMTQsbkl0LDE2LDMsImNsci1kZy1yb3ciLDI3KSxyZSgxNSwiY2xyLWRnLWZvb3RlciIpKDE2LCJjbHItZGctcGFnaW5hdGlvbiIsMjgsMCkoMTgsImNsci1kZy1wYWdlLXNpemUiLDI5KSxUZSgxOSwiSXRlbXMgcGVyIHBhZ2UiKSxpZSgpLFRl''@;'; put 'put ''KDIwKSxpZSgpKCkoKSgpKSwyJm4pe2NvbnN0IGU9ZGEoMTcpLHI9RWUoNCk7YWUoNCkseWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxhZSgyKSx5ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLHIuc3VibWl0dGVkRmlsdGVyKSxhZSgpLHllKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiks''@;'; put 'put ''YWUoMikseWUoImNsckRnU3RyaW5nRmlsdGVyIixyLnN1Ym1pdFJlYXNvbkZpbHRlciksYWUoNSkseWUoImNsckRnSXRlbXNPZiIsci5zdWJtaXR0ZXJMaXN0KSxhZSgyKSx5ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGFlKDIpLHllKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLG5sKDEwLEtEdCkpLGFl''@;'; put 'put ''KDIpLGozKCIgIixlLmZpcnN0SXRlbSsxLCIgLSAiLGUubGFzdEl0ZW0rMSwiIG9mICIsZS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uIGlJdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMjIpLGN0KDEsckl0LDIxLDExLCJkaXYiLDMpLGllKCkpLDImbil7Y29uc3Qg''@;'; put 'put ''ZT1FZSgzKTthZSgpLHllKCJuZ0lmIixlLnN1Ym1pdHRlckxpc3QmJjAhPT1lLnJlbWFpbmVkKX19ZnVuY3Rpb24gYUl0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw2KSxjdCgxLFhEdCw1LDAsImRpdiIsNykscmUoMiwiZGl2Iiw4KSxjdCgzLHFEdCwyLDAsImgzIiw5KSg0LEpEdCw1LDEs''@;'; put 'put ''InAiLDEwKSxpZSgpLGN0KDUsdEl0LDMsMiwiZGl2IiwxMSkoNixpSXQsMiwxLCJkaXYiLDEyKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoKSx5ZSgibmdJZiIsMD09PWUucmVtYWluZWQmJmUubG9hZGVkKSxhZSgpLHllKCJuZ0NsYXNzIixyNCg2LCREdCwhZS5sb2FkZWQpKSxhZSgp''@;'; put 'put ''LHllKCJuZ0lmIiwwIT09ZS5yZW1haW5lZCksYWUoKSx5ZSgibmdJZiIsZS5sb2FkZWQmJjAhPT1lLnJlbWFpbmVkKSxhZSgpLHllKCJuZ0lmIiwhZS5sb2FkZWQpLGFlKCkseWUoIm5nSWYiLGUubG9hZGVkKX19ZnVuY3Rpb24gb0l0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw0KSxjdCgx''@;'; put 'put ''LGFJdCw3LDgsImRpdiIsNSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsIWUuc3ViUmVhZHkpfX1mdW5jdGlvbiBzSXQobix0KXsxJm4mJihyZSgwLCJkaXYiKSxWdCgxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIiksaWUoKSl9Y2xhc3MgbEl0e2FjY2VwdHModCxlKXty''@;'; put 'put ''ZXR1cm4gdC5zdWJtaXR0ZWQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIGNJdHthY2NlcHRzKHQsZSl7cmV0dXJuIHQuc3VibWl0UmVhc29uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpPj0wfX1sZXQgcV9lPSgoKT0+e2Ns''@;'; put 'put ''YXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjKXt0aGlzLnNhc1N0b3JlU2VydmljZT1lLHRoaXMuZXZlbnRTZXJ2aWNlPXIsdGhpcy5yb3V0ZXI9aSx0aGlzLnJvdXRlPWEsdGhpcy5zYXNTZXJ2aWNlPWMsdGhpcy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMuc3ViUmVhZHk9ITEs''@;'; put 'put ''dGhpcy5kZXRhaWxzT3Blbj0hMSx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgbEl0LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBjSXR9Z29Ub1N0YWdlKGUpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2UpfWdvVG9EZXRhaWxzKGUpe3RoaXMucm91dGVyLm5hdmln''@;'; put 'put ''YXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkLyIrZSl9Z2V0RGV0YWlscyhlLHIpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNlbmREZXRhaWxzKGUscix0aGlzLnN1Ym1pdERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciBlPXRoaXM7cmV0''@;'; put 'put ''dXJuIFooZnVuY3Rpb24qKCl7Y29uc3Qgcj1lLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2UuaXRlbXNOdW09MTA7dHJ5e2xldCBpPXlpZWxkIGUuc2FzU3RvcmVTZXJ2aWNlLmdldFN1Ym1pdHRzKCk7aWYoZS5yZW1haW5lZD1pLmZyb21zYXMubGVuZ3RoLGUucmVtYWluZWQ+MCl7''@;'; put 'put ''ZS5zdWJtaXR0ZXI9aS5mcm9tc2FzWzBdLlNVQk1JVFRFRF9CWV9OTTtsZXQgYT1pLmZyb21zYXMubWFwKGZ1bmN0aW9uKGMpe3JldHVybnt0YWJsZUlkOmMuVEFCTEVfSUQsYmFzZTpjLkJBU0VfVEFCTEUsc3VibWl0dGVkOmMuU1VCTUlUVEVEX09OX0RUVE0sc3VibWl0dGVyOmMuU1VCTUlU''@;'; put 'put ''VEVEX0JZX05NLHN1Ym1pdFJlYXNvbjpjLlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2lmKGUuc3VibWl0dGVyTGlzdD1hLGUuc3VibWl0RGF0YT1pLmZyb21zYXMsdHlwZW9mIHI8InUiKXtjb25zdCBjPWUuc3VibWl0dGVyTGlzdC5maW5kSW5kZXgobT0+bS50YWJsZUlkPT09cik7Yz4tMSYm''@;'; put 'put ''ZS5nZXREZXRhaWxzKGUuc3VibWl0dGVyTGlzdFtjXSxjKX19ZS5sb2FkZWQ9ITB9Y2F0Y2goaSl7ZS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJlZGl0b3JzL2dldHN1Ym1pdHMiLGkpfX0pKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcmVhZHlTdWI9dGhpcy5zYXNTdG9y''@;'; put 'put ''ZVNlcnZpY2Uuc2V0U3VibWl0LnN1YnNjcmliZShlPT57dGhpcy5zdWJSZWFkeT1lfSksdGhpcy5fYmFja1RvU3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdExpc3Quc3Vic2NyaWJlKGU9Pnt0aGlzLnN1YlJlYWR5PSF0aGlzLnN1YlJlYWR5LHRoaXMuZGV0YWlsc09wZW49ITF9''@;'; put 'put ''KX1kb3dubG9hZChlKXtsZXQgcj10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxpPXIuc2VydmVyVXJsLGE9ci5hcHBMb2MsYz10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGkrYysiLz9fcHJvZ3JhbT0iK2ErIi9zZXJ2aWNlcy9hdWRpdG9y''@;'; put 'put ''cy9nZXRhdWRpdGZpbGUmdGFibGU9IitlKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShFMiksV2UoU2MpLFdlKHJsKSxXZShzMCksV2UoSnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1z''@;'; put 'put ''dWJtaXR0ZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInBhZ2luYXRpb24iLCIiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29u''@;'; put 'put ''dGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0''@;'; put 'put ''LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQs''@;'; put 'put ''Im5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5vLXN1Ym1pdHRlZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1u''@;'; put 'put ''IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRl''@;'; put 'put ''ciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0s''@;'; put 'put ''WzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdWJtaXR0ZWQgZGF0ZSIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0''@;'; put 'put ''ZXIgc3VibWl0IHJlYXNvbiIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl0sWzEsImN1cnNvci1w''@;'; put 'put ''b2ludGVyIiwzLCJjbGljayJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWxhYmVsIiwiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiwxLCJyb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9v''@;'; put 'put ''bHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRp''@;'; put 'put ''dCBmaWxlIGZvciB0YWJsZSByZWNvcmQiLDEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImRpdiIsMSksY3QoMSxvSXQsMiwxLCJkaXYiLDIpKDIsc0l0LDIsMCwiZGl2IiwzKSxp''@;'; put 'put ''ZSgpKSwyJnImJihhZSgpLHllKCJuZ0lmIiwhaS5zdWJSZWFkeSksYWUoKSx5ZSgibmdJZiIsaS5zdWJSZWFkeSkpfSxkZXBlbmRlbmNpZXM6W1J1LG1hLFo2LHJwLEN2LElILHRDLFNBLFJILFU2LHk0LFN2LGlDLFc2LF92LHo2LGJ2LHF3LFVsLFhfZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJl''@;'; put 'put ''dHVybiBufSkoKTtjb25zdCB1SXQ9KG4sdCk9Pih7cmVqZWN0ZWQ6bixhY2NlcHRlZDp0fSk7ZnVuY3Rpb24gZEl0KG4sdCl7MSZuJiYocmUoMCwiZGl2IiwxMiksVnQoMSwiY2xyLWljb24iLDEzKSxyZSgyLCJoMyIsMTQpLFRlKDMsIlRoZXJlIGlzIG5vIGhpc3RvcnkgdG8gc2hvdyIpLGll''@;'; put 'put ''KCkoKSl9ZnVuY3Rpb24gaEl0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiYSIsMTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCkuJGltcGxpY2l0LGE9RWUoKTtyZXR1cm4gbXQoYS5nZXRUYWJsZShhLmFwcHJvdmVEYXRhW2ldKSl9KSxUZSgxKSxp''@;'; put 'put ''ZSgpfWlmKDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdCxyPUVlKCk7YWUoKSx2cihyLmFwcHJvdmVEYXRhW2VdKX19ZnVuY3Rpb24gZkl0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IikoMSwiYSIsMTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBp''@;'; put 'put ''PUVlKCkuJGltcGxpY2l0LGE9RWUoKTtyZXR1cm4gbXQoYS5nZXRCYXNlVGFibGUoYS5hcHByb3ZlRGF0YVtpXSkpfSksVGUoMiwiVklFVyIpLGllKCkscmUoMywic3BhbiIpLFRlKDQsIiAvICIpLGllKCkscmUoNSwiYSIsMTcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBp''@;'; put 'put ''PUVlKCkuJGltcGxpY2l0LGE9RWUoKTtyZXR1cm4gbXQoYS5nZXRFZGl0VGFibGUoYS5hcHByb3ZlRGF0YVtpXSkpfSksVGUoNiwiRURJVCIpLGllKCkoKX19ZnVuY3Rpb24gcEl0KG4sdCl7aWYoMSZuJiYocmUoMCwic3BhbiIpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpLiRpbXBs''@;'; put 'put ''aWNpdCxyPUVlKCk7YWUoKSx2cihyLmFwcHJvdmVEYXRhW2VdKX19ZnVuY3Rpb24gZ0l0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiKSgxLCJ0ZCIsNiksVGUoMiksaWUoKSxyZSgzLCJ0ZCIsNiksY3QoNCxoSXQsMiwxLCJhIiwxNSkoNSxmSXQsNywwLCJkaXYiLDE2KSg2LHBJdCwyLDEsInNw''@;'; put 'put ''YW4iLDE2KSxpZSgpKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPXQuaW5kZXg7YWUoMiksdnIoZSksYWUoMikseWUoIm5nSWYiLHI8MSksYWUoKSx5ZSgibmdJZiIscjwyJiZyPj0xKSxhZSgpLHllKCJuZ0lmIixyPj0yKX19ZnVuY3Rpb24gbUl0KG4sdCl7MSZuJiYocmUoMCwic3Bh''@;'; put 'put ''biIsMjApLFRlKDEsIiBMb2FkaW5nLi4uICIpLGllKCkpfWZ1bmN0aW9uIHZJdChuLHQpezEmbiYmKHJlKDAsImRpdiIpKDEsImgzIiksVGUoMiwiTG9hZGluZyBoaXN0b3J5IiksaWUoKSgpKX1mdW5jdGlvbiB5SXQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDE4KSxjdCgxLG1JdCwyLDAs''@;'; put 'put ''InNwYW4iLDE5KSgyLHZJdCwzLDAsImRpdiIsMTYpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLCFlLmxvYWRlZCksYWUoKSx5ZSgibmdJZiIsIWUubG9hZGVkKX19ZnVuY3Rpb24gX0l0KG4sdCl7MSZuJiYocmUoMCwiaDMiLDI4KSxUZSgxLCJISVNUT1JZIiksaWUo''@;'; put 'put ''KSl9ZnVuY3Rpb24gYkl0KG4sdCl7aWYoMSZuJiYocmUoMCwicCIsMjkpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLE1yKCIgVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGUubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkLCIgcmVjb3JkcywgY29udGFj''@;'; put 'put ''dCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX1mdW5jdGlvbiB3SXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItZGctcm93IiwzOSksa3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0O3JldHVybiBtdChFZSgzKS5nZXRBcHBySW5k''@;'; put 'put ''ZXgoaSkpfSkscmUoMSwiY2xyLWRnLWNlbGwiLDQwKSgyLCJhIiw0MSksa3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0O3JldHVybiBtdChFZSgzKS5nZXRCYXNlVGFibGUoaS5iYXNldGFibGUpKX0pLFRlKDMpLGllKCkoKSxyZSg0LCJjbHItZGctY2VsbCIs''@;'; put 'put ''NDIpLFRlKDUpLGllKCkscmUoNiwiY2xyLWRnLWNlbGwiLDQwKSxUZSg3KSxpZSgpLHJlKDgsImNsci1kZy1jZWxsIiw0MCksVGUoOSksaWUoKSxyZSgxMCwiY2xyLWRnLWNlbGwiLDQwKSxUZSgxMSksaWUoKSxyZSgxMiwiY2xyLWRnLWNlbGwiLDQwKSxUZSgxMyksaWUoKSxyZSgxNCwiY2xy''@;'; put 'put ''LWRnLWNlbGwiLDQzKSgxNSwiYnV0dG9uIiw0NCksa3QoImNsaWNrIixmdW5jdGlvbihpKXtjb25zdCBhPWd0KGUpLiRpbXBsaWNpdDtyZXR1cm4gRWUoMykuZG93bmxvYWQoYS50YWJsZUlkKSxtdChpLnN0b3BQcm9wYWdhdGlvbigpKX0pLFZ0KDE2LCJjbHItaWNvbiIsNDUpLGllKCkoKSgp''@;'; put 'put ''fWlmKDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDthZSgzKSx2cihlLmJhc2V0YWJsZSksYWUoKSx5ZSgibmdDbGFzcyIsaTQoNyx1SXQsIlJFSkVDVEVEIj09PWUuc3RhdHVzLCJBUFBST1ZFRCI9PT1lLnN0YXR1cykpLGFlKCksdnIoZS5zdGF0dXMpLGFlKDIpLHZyKGUuc3VibWl0dGVyKSxh''@;'; put 'put ''ZSgyKSx2cihlLnN1Ym1pdHRlZFJlYXNvbiksYWUoMiksdnIoZS5zdWJtaXR0ZWQpLGFlKDIpLHZyKGUucmV2aWV3ZWQpfX1mdW5jdGlvbiBDSXQobix0KXtpZigxJm4mJihyZSgwLCJjbHItZGF0YWdyaWQiLDMwKSgxLCJjbHItZGctY29sdW1uIiwzMSksVGUoMiwiIEJBU0VfVEFCTEUgIiks''@;'; put 'put ''VnQoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDMyKSxpZSgpLHJlKDQsImNsci1kZy1jb2x1bW4iLDMxKSxUZSg1LCIgU1RBVFVTICIpLFZ0KDYsImNsci1kZy1zdHJpbmctZmlsdGVyIiwzMyksaWUoKSxyZSg3LCJjbHItZGctY29sdW1uIiwzMSksVGUoOCwiIFNVQk1JVFRFUiAiKSxWdCg5''@;'; put 'put ''LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzQpLGllKCkscmUoMTAsImNsci1kZy1jb2x1bW4iLDMxKSxUZSgxMSwiIFNVQk1JVCBSRUFTT04gIiksVnQoMTIsImNsci1kZy1zdHJpbmctZmlsdGVyIiwzNSksaWUoKSxyZSgxMywiY2xyLWRnLWNvbHVtbiIsMzEpLFRlKDE0LCIgU1VCTUlUVEVE''@;'; put 'put ''ICIpLFZ0KDE1LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzYpLGllKCkscmUoMTYsImNsci1kZy1jb2x1bW4iLDMxKSxUZSgxNywiIEFQUFJPVkVEIC8gUkVKRUNURUQgIiksVnQoMTgsImNsci1kZy1zdHJpbmctZmlsdGVyIiwzNyksaWUoKSxyZSgxOSwiY2xyLWRnLWNvbHVtbiIpLFRlKDIw''@;'; put 'put ''LCJET1dOTE9BRCIpLGllKCksY3QoMjEsd0l0LDE3LDEwLCJjbHItZGctcm93IiwzOCksaWUoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKCkseWUoImNsckRnRmllbGQiLCJiYXNldGFibGUiKSxhZSgyKSx5ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGUuYmFzZVRhYmxlRmlsdGVyKSxhZSgpLHll''@;'; put 'put ''KCJjbHJEZ0ZpZWxkIiwic3RhdHVzIiksYWUoMikseWUoImNsckRnU3RyaW5nRmlsdGVyIixlLnN0YXR1c0ZpbHRlciksYWUoKSx5ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGFlKDIpLHllKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZS5zdWJtaXR0ZXJGaWx0ZXIpLGFlKCkseWUoImNsckRn''@;'; put 'put ''RmllbGQiLCJzdWJtaXR0ZWRSZWFzb24iKSxhZSgyKSx5ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGUuc3VibWl0UmVhc29uRmlsdGVyKSxhZSgpLHllKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksYWUoMikseWUoImNsckRnU3RyaW5nRmlsdGVyIixlLnN1Ym1pdHRlZEZpbHRlciksYWUoKSx5''@;'; put 'put ''ZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksYWUoMikseWUoImNsckRnU3RyaW5nRmlsdGVyIixlLnJldmlld2VkRmlsdGVyKSxhZSgzKSx5ZSgiY2xyRGdJdGVtc09mIixlLmhpc3RvcnkpfX1mdW5jdGlvbiBTSXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJidXR0b24iLDQ2''@;'; put 'put ''KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDIpLmxvYWREYXRhKCkpfSksVGUoMSksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoMik7eWUoImNsckxvYWRpbmciLGUubG9hZGluZ01vcmUpLGFlKCksTXIoIiBMb2FkICIsZS5yb3dzTGVmdFRvTG9hZCwiIG1vcmUg''@;'; put 'put ''Iil9fWZ1bmN0aW9uIE1JdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpLGN0KDIsX0l0LDIsMCwiaDMiLDIzKSgzLGJJdCwyLDEsInAiLDI0KSxpZSgpLGN0KDQsQ0l0LDIyLDEzLCJjbHItZGF0YWdyaWQiLDI1KSxyZSg1LCJkaXYiLDI2KSxjdCg2LFNJdCwyLDIs''@;'; put 'put ''ImJ1dHRvbiIsMjcpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoMikseWUoIm5nSWYiLGUubG9hZGVkKSxhZSgpLHllKCJuZ0lmIixlLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWUuSW5maW5pdHkpLGFlKCkseWUoIm5nSWYiLGUubG9hZGVkKSxhZSgy''@;'; put 'put ''KSx5ZSgibmdJZiIsZS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1lLkluZmluaXR5JiZlLnJvd3NMZWZ0VG9Mb2FkPjApfX1jbGFzcyB4SXR7YWNjZXB0cyh0LGUpe3JldHVybiB0LmJhc2V0YWJsZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpKT49MH19Y2xhc3MgRUl0e2FjY2VwdHModCxlKXtyZXR1cm4gdC5zdGF0dXMudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIFRJdHthY2NlcHRzKHQsZSl7cmV0dXJuIHQuc3VibWl0dGVyLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihlLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkpPj0wfX1jbGFzcyBBSXR7YWNjZXB0cyh0LGUpe3JldHVybiB0LnN1Ym1pdHRlZFJlYXNvbi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZS50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3Mga0l0e2FjY2VwdHModCxlKXtyZXR1cm4gdC5zdWJtaXR0ZWQudG9Mb3dlckNhc2UoKS5pbmRleE9m''@;'; put 'put ''KGUudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIERJdHthY2NlcHRzKHQsZSl7cmV0dXJuIHQucmV2aWV3ZWQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSk+PTB9fWNvbnN0IElJdD1be3BhdGg6ImFwcHJvdmUiLGNvbXBvbmVudDpHRHR9LHtwYXRoOiJhcHByb3ZlRGV0''@;'; put 'put ''Lzp0YWJsZUlkIixjb21wb25lbnQ6WF9lfSx7cGF0aDoic3VibWl0dGVkIixjb21wb25lbnQ6cV9lfSx7cGF0aDoic3VibWl0dGVkLzp0YWJsZUlkIixjb21wb25lbnQ6cV9lfSx7cGF0aDoiaGlzdG9yeSIsY29tcG9uZW50OigoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjKXt0''@;'; put 'put ''aGlzLmxpY2VuY2VTZXJ2aWNlPWUsdGhpcy5zYXNTdG9yZVNlcnZpY2U9cix0aGlzLmV2ZW50U2VydmljZT1pLHRoaXMucm91dGVyPWEsdGhpcy5zYXNTZXJ2aWNlPWMsdGhpcy5oaXN0b3J5PVtdLHRoaXMudGFibGVUaXRsZXM9W10sdGhpcy5oaXN0b3J5QXJyPVtdLHRoaXMubG9hZGVkPSEx''@;'; put 'put ''LHRoaXMuaXRlbXNOdW09MTAsdGhpcy5vcGVuTW9kYWw9ITEsdGhpcy5ub0RhdGE9ITEsdGhpcy5hcHByb3ZlRGF0YT17fSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBoMi5TQVNqc0NvbmZpZyx0aGlzLmJhc2VUYWJsZUZpbHRlcj1uZXcgeEl0LHRoaXMuc3RhdHVzRmlsdGVyPW5ldyBFSXQsdGhp''@;'; put 'put ''cy5zdWJtaXR0ZXJGaWx0ZXI9bmV3IFRJdCx0aGlzLnN1Ym1pdFJlYXNvbkZpbHRlcj1uZXcgQUl0LHRoaXMuc3VibWl0dGVkRmlsdGVyPW5ldyBrSXQsdGhpcy5yZXZpZXdlZEZpbHRlcj1uZXcgREl0LHRoaXMuaGlzdFBhcmFtcz17SElTVDowLFNUQVJUUk9XOjEsTk9CUzotMX0sdGhpcy5s''@;'; put 'put ''b2FkaW5nTW9yZT0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfWdldFRhYmxlKGUpe3RoaXMucm91dGVyLm5hdmlnYXRl''@;'; put 'put ''QnlVcmwoIi9zdGFnZS8iK2UpfWdldEJhc2VUYWJsZShlKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrZSl9Z2V0RWRpdFRhYmxlKGUpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIitlKX1nZXRBcHBySW5kZXgoZSl7Y29uc3Qgcj10aGlzLmhp''@;'; put 'put ''c3RvcnlBcnIuZmluZEluZGV4KGk9PmkuVEFCTEVfSUQ9PT1lLnRhYmxlSWQpO3I+LTEmJih0aGlzLmFwcHJvdmVEYXRhPXRoaXMuaGlzdG9yeUFycltyXSx0aGlzLm9wZW5Nb2RhbD0hMCl9Z2V0IHJvd3NMZWZ0VG9Mb2FkKCl7Y29uc3QgZT10aGlzLmhpc3RQYXJhbXMuTk9CUy10aGlzLmhp''@;'; put 'put ''c3RvcnkubGVuZ3RoLHI9dGhpcy5oaXN0UGFyYW1zLkhJU1Q7cmV0dXJuIGU8PTA/MDplPnI/cjplfWRvd25sb2FkKGUpe2xldCByPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGk9ci5zZXJ2ZXJVcmwsYT1yLmFwcExvYyxjPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25Q''@;'; put 'put ''YXRoKCk7d2luZG93Lm9wZW4oaStjKyIvP19wcm9ncmFtPSIrYSsiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2UrIiZfY29udGV4dG5hbWU9Iit0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKX1sb2FkRGF0YSgpe3ZhciBlPXRoaXM7cmV0dXJuIFooZnVuY3Rp''@;'; put 'put ''b24qKCl7bGV0IHI9e1NUQVJUUk9XOmUuaGlzdFBhcmFtcy5ISVNUK2UuaGlzdFBhcmFtcy5TVEFSVFJPV307ZS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGEsaT15aWVsZCBlLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KHIsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9y''@;'; put 'put ''eSIpO2UubG9hZGluZ01vcmU9ITEsZS5oaXN0UGFyYW1zPWkuaGlzdHBhcmFtc1swXTtjb25zdCBjPWkuZnJvbXNhcy5zbGljZSgwLGUubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZihjLmxlbmd0aD4wKXtjb25zdCBtPWM7ZS5oaXN0b3J5QXJyPWMsYT1PYmpl''@;'; put 'put ''Y3Qua2V5cyhtWzBdKSxlLnRhYmxlVGl0bGVzPWE7bGV0IEM9Yy5tYXAoZnVuY3Rpb24oUCl7cmV0dXJue3RhYmxlSWQ6UC5UQUJMRV9JRCxzdWJtaXR0ZXI6UC5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOlAuU1VCTUlUVEVEX1JFQVNPTl9UWFQsc3VibWl0dGVkOlAuU1VCTUlUVEVELHN0''@;'; put 'put ''YXR1czpQLlNUQVRVUyxyZXZpZXdSZWFzb246UC5SRVZJRVdfUkVBU09OX1RYVCxyZXZpZXdlcjpQLlJFVklFV0VSLHJldmlld2VkOlAuUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6UC5OVU1fT0ZfQVBQUk9WQUxTX1JFUVVJUkVELGJhc2V0YWJsZTpQLkJBU0VfVEFCTEV9fSk7ZS5oaXN0b3J5''@;'; put 'put ''LnB1c2goLi4uQyksZS5sb2FkZWQ9ITB9ZWxzZSBlLmxvYWRlZD0hMCwwPT09ZS5oaXN0b3J5Lmxlbmd0aCYmKGUubm9EYXRhPSEwKX1jYXRjaChpKXtlLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRoaXN0b3J5IixpKSxlLmxvYWRpbmdNb3JlPSExfX0p''@;'; put 'put ''KCl9bmdPbkluaXQoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2UubG9hZERhdGEoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoSzEpLFdlKEUyKSxXZShTYyksV2UocmwpLFdlKEpzKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNs''@;'; put 'put ''YXNzIiwiY2FyZC1ibG9jayBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEs''@;'; put 'put ''Im1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsIkNsb3NlIG1vZGFsIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNzIiwi''@;'; put 'put ''aC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29u''@;'; put 'put ''dGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciB0YWJsZS1s''@;'; put 'put ''aW5rIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNvci1wb2ludGVyIiwidGFibGUtbGluayIsMywiY2xpY2siXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJj''@;'; put 'put ''bGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xv''@;'; put 'put ''ci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtaGlzdG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsi''@;'; put 'put ''Y2xhc3MiLCJidG4gYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdy''@;'; put 'put ''aWQtaGlzdG9yeSIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBiYXNlIHRhYmxlIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdGF0dXMiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0s''@;'; put 'put ''WyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlciIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0IHJlYXNvbiIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3Ry''@;'; put 'put ''aW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHJldmlld2VkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4t''@;'; put 'put ''bGluayIsIm0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIs''@;'; put 'put ''MywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImRpdiIsMCksY3QoMSxkSXQsNCwwLCJkaXYiLDEpLHJlKDIsImNsci1tb2RhbCIsMiks''@;'; put 'put ''Y2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGkub3Blbk1vZGFsLGMpfHwoaS5vcGVuTW9kYWw9YyksY30pLHJlKDMsImg0IiwzKSxUZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaWUoKSxyZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgs''@;'; put 'put ''InRyIikoOSwidGgiLDYpLFRlKDEwLCJOYW1lIiksaWUoKSxyZSgxMSwidGgiLDYpLFRlKDEyLCJWYWx1ZSIpLGllKCkoKSgpLHJlKDEzLCJ0Ym9keSIpLGN0KDE0LGdJdCw3LDQsInRyIiw3KSxpZSgpKCkoKSxyZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSxrdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGkub3Blbk1vZGFsPSExfSksVGUoMTcsIiBPSyAiKSxpZSgpKCkoKSxjdCgxOCx5SXQsMywyLCJkaXYiLDEwKSgxOSxNSXQsNyw0LCJkaXYiLDExKSxpZSgpKSwyJnImJihhZSgpLHllKCJuZ0lmIixpLm5vRGF0YSksYWUoKSxsaSgiY2xyTW9kYWxPcGVuIixpLm9wZW5N''@;'; put 'put ''b2RhbCkseWUoImNsck1vZGFsU2l6ZSIsInhsIiksYWUoMTIpLHllKCJuZ0Zvck9mIixpLnRhYmxlVGl0bGVzKSxhZSg0KSx5ZSgibmdJZiIsIWkubG9hZGVkKSxhZSgpLHllKCJuZ0lmIiwhaS5ub0RhdGEmJmkubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbUnUsaHMsbWEsWjYscnAsQ3YsdEMs''@;'; put 'put ''VTYseTQsU3YsaUMsVzYsX3YsejYsYnYscXcsVWwsaHUsYzAsUzEsVmZdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCl9XTtsZXQgUkl0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxZYy5mb3JDaGlsZChJSXQpLFljXX0pfX1yZXR1cm4gbn0pKCksTEl0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxPYyxSSXQsTTEsWnksbDMsWlNdfSl9fXJldHVybiBufSkoKSxPSXQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2''@;'; put 'put ''YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJlZ0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtjb25zdCBQSXQ9KG4sdCk9Pih7cmVqZWN0ZWQ6bixhY2NlcHRlZDp0fSk7ZnVuY3Rpb24gRkl0KG4s''@;'; put 'put ''dCl7MSZuJiYocmUoMCwic3BhbiIsNiksVGUoMSwiIExvYWRpbmcuLi4gIiksaWUoKSl9ZnVuY3Rpb24gSEl0KG4sdCl7MSZuJiYocmUoMCwiZGl2IikoMSwiaDMiKSxUZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGllKCkoKSl9ZnVuY3Rpb24gTkl0KG4sdCl7aWYoMSZuJiYocmUo''@;'; put 'put ''MCwiZGl2Iiw0KSxjdCgxLEZJdCwyLDAsInNwYW4iLDUpKDIsSEl0LDMsMCwiZGl2IiwzKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgpLHllKCJuZ0lmIiwhZS5sb2FkZWQpLGFlKCkseWUoIm5nSWYiLCFlLmxvYWRlZCl9fWZ1bmN0aW9uIFZJdChuLHQpe2lmKDEmbil7Y29uc3QgZT1J''@;'; put 'put ''bigpO3JlKDAsImJ1dHRvbiIsMjgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuYXBwcm92ZVRhYmxlU2NyZWVuKCkpfSksVGUoMSwiIEFwcHJvdmUgIiksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoMik7eWUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51''@;'; put 'put ''bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9PT0obnVsbD09ZS50YWJsZURldGFpbHM/bnVsbDplLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkoImRpc2FibGVkIixlLnJldmVydGluZ0NoYW5nZXMpfX1m''@;'; put 'put ''dW5jdGlvbiBCSXQobix0KXsxJm4mJihyZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMSkoMSwic3BhbiIpLFRlKDIsIiBSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hhbmdlcyAiKSxpZSgpKCkpfWZ1bmN0aW9uIGpJdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAs''@;'; put 'put ''ImJ1dHRvbiIsMjkpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikucmV2ZXJ0Q2hhbmdlcygpKX0pLFRlKDEsIiBSRVZFUlQgIiksY3QoMixCSXQsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMCksaWUoKX0yJm4mJnllKCJjbHJMb2FkaW5nIixFZSgyKS5y''@;'; put 'put ''ZXZlcnRpbmdDaGFuZ2VzKX1mdW5jdGlvbiB6SXQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiKSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiaDQiLDkpLFRlKDQsIlN0YWdlZCBEYXRhIiksaWUoKSgpKCkscmUoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSkoNywiZGl2Iiwx''@;'; put 'put ''MikoOCwiZGl2Iiw4KSxUZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLGllKCkoKSxyZSgxMCwiZGl2IikoMTEsInNwYW4iKSxUZSgxMiwiVGFibGUgSWQ6IiksaWUoKSxyZSgxMywic3Ryb25nIikoMTQsInNwYW4iKSxUZSgxNSksaWUoKSgpKCkscmUoMTYsImRpdiIpKDE3LCJzcGFu''@;'; put 'put ''IiksVGUoMTgsIkJhc2UgVGFibGU6IiksaWUoKSxyZSgxOSwiYSIsMTMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLFRlKDIwKSxpZSgpKCkscmUoMjEsImRpdiIpKDIyLCJzcGFuIiksVGUoMjMsIlN1Ym1pdCBEYXRl''@;'; put 'put ''OiIpLGllKCkscmUoMjQsInNwYW4iLDE0KSxUZSgyNSksaWUoKSgpLHJlKDI2LCJkaXYiKSgyNywic3BhbiIpLFRlKDI4LCJSZXZpZXcgU3RhdHVzOiIpLGllKCkscmUoMjksInNwYW4iLDE1KSxUZSgzMCksaWUoKSgpKCkscmUoMzEsImRpdiIsMTYpKDMyLCJkaXYiLDEyKSgzMywiZGl2Iiw4''@;'; put 'put ''KSxUZSgzNCwiQWN0aW9ucyIpLGllKCkoKSxyZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxUZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxp''@;'; put 'put ''ZSgpLGN0KDM5LFZJdCwyLDIsImJ1dHRvbiIsMjApLHJlKDQwLCJidXR0b24iLDIxKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkuZ29CYWNrKCkpfSksVGUoNDEsIiBFZGl0IGJhc2UgdGFibGUgIiksaWUoKSxyZSg0MiwiYnV0dG9uIiwyMiksa3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKTtyZXR1cm4gbXQoaS5kb3dubG9hZChudWxsPT1pLnRhYmxlRGV0YWlscz9udWxsOmkudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxWdCg0MywiY2xyLWljb24iLDIzKSxpZSgpLHJlKDQ0LCJjbHItdG9vbHRpcCIpLGN0KDQ1LGpJdCwz''@;'; put 'put ''LDEsImJ1dHRvbiIsMjQpLGllKCkoKSgpKCkoKSxyZSg0NiwiZGl2IiwyNSksVnQoNDcsImhvdC10YWJsZSIsMjYpLGllKCksVnQoNDgsImRpdiIsMjcpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7YWUoMTUpLE1yKCIgIixudWxsPT1lLnRhYmxlRGV0YWlscz9udWxsOmUudGFibGVEZXRh''@;'; put 'put ''aWxzLlRBQkxFX0lELCIiKSxhZSg1KSxNcigiICIsbnVsbD09ZS50YWJsZURldGFpbHM/bnVsbDplLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksYWUoNSksTXIoIiAiLG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxh''@;'; put 'put ''ZSg0KSx5ZSgibmdDbGFzcyIsaTQoMTIsUEl0LCJSRUpFQ1RFRCI9PT0obnVsbD09ZS50YWJsZURldGFpbHM/bnVsbDplLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuUkVWSUVXX1NU''@;'; put 'put ''QVRVU19JRCkpKSxScigiYXJpYS1sYWJlbCIsIlJldmlldyBzdGF0dXM6ICIrKG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpLGFlKCksTXIoIiAiLG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuUkVWSUVX''@;'; put 'put ''X1NUQVRVU19JRCwiICIpLGFlKDcpLHllKCJkaXNhYmxlZCIsZS5yZXZlcnRpbmdDaGFuZ2VzKSxhZSgyKSx5ZSgibmdJZiIsIllFUyIhPT0obnVsbD09ZS50YWJsZURldGFpbHM/bnVsbDplLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksYWUoKSx5ZSgiZGlzYWJsZWQiLGUucmV2ZXJ0''@;'; put 'put ''aW5nQ2hhbmdlcyksYWUoNSkseWUoIm5nSWYiLCJZRVMiPT09KG51bGw9PWUudGFibGVEZXRhaWxzP251bGw6ZS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGFlKDIpLHllKCJkYXRhIixlLmhvdFRhYmxlLmRhdGEpKCJzZXR0aW5ncyIsZS5ob3RUYWJsZVNldHRpbmdzKX19Y29uc3Qg''@;'; put 'put ''VUl0PVt7cGF0aDoiOnRhYmxlSWQiLGNvbXBvbmVudDooKCk9PntjbGFzcyBue2dldCBob3RUYWJsZVNldHRpbmdzKCl7cmV0dXJuey4uLnRoaXMuaG90VGFibGUuc2V0dGluZ3MsY29sSGVhZGVyczp0aGlzLmhvdFRhYmxlLmNvbEhlYWRlcnMsY29sdW1uczp0aGlzLmhvdFRhYmxlLmNvbHVt''@;'; put 'put ''bnMsbWF4Um93czp0aGlzLmhvdFRhYmxlLm1heFJvd3MsaGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5LGFmdGVyR2V0Q29sSGVhZGVyOnRoaXMuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIsYWZ0ZXJJbml0OnRoaXMuaG90''@;'; put 'put ''VGFibGUuYWZ0ZXJJbml0LHN0cmV0Y2hIOiJhbGwiLGNlbGxzOnRoaXMuaG90VGFibGUuY2VsbHMsY2xhc3NOYW1lOiJodERhcmsifX1jb25zdHJ1Y3RvcihlLHIsaSxhLGMsbSl7dGhpcy5saWNlbmNlU2VydmljZT1lLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPXIsdGhpcy5ldmVudFNlcnZpY2U9''@;'; put 'put ''aSx0aGlzLnJvdXRlPWEsdGhpcy5yb3V0ZXI9Yyx0aGlzLnNhc1NlcnZpY2U9bSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJldmVydGluZ0NoYW5nZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xI''@;'; put 'put ''ZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7YXJpYVRhZ3M6ITEsdGFibGVDbGFzc05hbWU6Imh0Q2VudGVyIixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsYXV0b1dyYXBSb3c6ITEsYXV0b1dyYXBDb2w6ITF9LGxpY2Vuc2VLZXk6dm9pZCAwLG1heFJvd3M6dGhp''@;'; put 'put ''cy5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkfHwxLzAsYWZ0ZXJHZXRDb2xIZWFkZXI6KEMsUCxZKT0+e1AuY2xhc3NMaXN0LmFkZChXbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxhZnRlckluaXQ6KCk9Pnt0aGlzLmZpeEZvY3VzQ2F0Y2hlckFj''@;'; put 'put ''Y2Vzc2liaWxpdHkoKX19fXN1Ym1pdHRlZFRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit0aGlzLnRhYmxlX2lkKX1hcHByb3ZlVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZURldC8iK3RoaXMudGFi''@;'; put 'put ''bGVfaWQpfXZpZXdlclRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9Z29CYWNrKCl7V24ueGxtYXBzLmZpbmQocj0+ci50YXJnZXREUz09PXRoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUp''@;'; put 'put ''P3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2hvbWUvZXhjZWwtbWFwcy8iK3RoaXMuaG90VGFibGUuZGF0YVswXS5YTE1BUF9JRCk6dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9ZG93bmxvYWQoZSl7bGV0IHI9dGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaT1yLnNlcnZlclVybCxhPXIuYXBwTG9jLGM9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihpK2MrIi8/X3Byb2dyYW09IithKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIr''@;'; put 'put ''ZSl9bmdPbkluaXQoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2lmKGUubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShyPT57ZS5ob3RUYWJsZS5saWNlbnNlS2V5PXJ9KSx0eXBlb2YgZS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ8InUi''@;'; put 'put ''KXtlLnRhYmxlX2lkPWUucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO3RyeXtsZXQgcj15aWVsZCBlLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGUudGFibGVfaWQpO2lmKCFyfHwhci5qc3BhcmFtcyl0aHJvdyBuZXcgRXJyb3IoImpzcGFyYW1zIHByb3BlcnR5IGlzIG1p''@;'; put 'put ''c3NpbmcgZnJvbSByZXNwb25zZS4iKTtlLnRhYmxlRGV0YWlscz1yLmpzcGFyYW1zWzBdfWNhdGNoKHIpe2xldCBpPXt9O3IuTUVTU0FHRT9pPXI6aS5NRVNTQUdFPXIsZS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsaSl9dHJ5e2xldCBy''@;'; put 'put ''PXlpZWxkIGUuc2FzU3RvcmVTZXJ2aWNlLm9wZW5UYWJsZShlLnRhYmxlX2lkKTtpZighcnx8IXIuc3RhZ2V0YWJsZSl0aHJvdyBuZXcgRXJyb3IoIlN0YWdldGFibGUgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2xldCBpPXIuc3RhZ2V0YWJsZVswXSxhPVtdLGM9W107''@;'; put 'put ''Zm9yKGxldCBDIGluIGkpaSYmYS5wdXNoKEMpO2ZvcihsZXQgQz0wO0M8YS5sZW5ndGg7QysrKWMucHVzaCh7ZGF0YTphW0NdfSk7bGV0IG09ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fTtlLmhvdFRhYmxlLmRhdGE9ci5zdGFnZXRhYmxlLGUuaG90VGFibGUuY29sSGVhZGVycz1h''@;'; put 'put ''LGUuaG90VGFibGUuY29sdW1ucz1jLGUuaG90VGFibGUuY2VsbHM9bSxlLmxvYWRlZD0hMCxlLnNldEZvY3VzKCl9Y2F0Y2gocil7bGV0IGk9e307ci5NRVNTQUdFfHwoaS5NRVNTQUdFPXIpLGUuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJs''@;'; put 'put ''ZSIsaSksZS5sb2FkZWQ9ITF9fX0pKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuZml4Rm9jdXNDYXRjaGVyQWNjZXNzaWJpbGl0eSgpfSw1MDApfXJldmVydENoYW5nZXMoKXt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3Qo''@;'; put 'put ''ImVkaXRvcnMvcmVzdG9yZSIse3Jlc3RvcmVfaW46W3tsb2FkX3JlZjp0aGlzLnRhYmxlX2lkfV19KS50aGVuKHI9PntyLmFkYXB0ZXJSZXNwb25zZS5yZXN0b3JlX291dCYmdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbIi9zdGFnZSJdKS50aGVuKCgpPT57dGhpcy5yb3V0ZS5uYXZpZ2F0ZShbYC9z''@;'; put 'put ''dGFnZS8ke3IuYWRhcHRlclJlc3BvbnNlLnJlc3RvcmVfb3V0WzBdLkxPQURSRUZ9YF0pfSl9KS5maW5hbGx5KCgpPT57dGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSExfSl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGU9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHBy''@;'; put 'put ''b3ZhbC1idG4iKTtlJiZlLmZvY3VzKCl9LDIwMCl9Zml4Rm9jdXNDYXRjaGVyQWNjZXNzaWJpbGl0eSgpe3NldFRpbWVvdXQoKCk9Pntkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuaHRGb2N1c0NhdGNoZXIiKS5mb3JFYWNoKChyLGkpPT57aWYocil7ci5zZXRBdHRyaWJ1dGUoImFyaWEt''@;'; put 'put ''bGFiZWwiLGBUYWJsZSBmb2N1cyBjYXRjaGVyICR7aSsxfWApLHIuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIik7Y29uc3QgYT1kb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJsYWJlbCIpO2Euc2V0QXR0cmlidXRlKCJmb3IiLHIuaWR8fGBodEZvY3VzQ2F0Y2hlciR7aX1gKSxhLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksYS5zdHlsZS5kaXNwbGF5PSJub25lIixhLnRleHRDb250ZW50PWBUYWJsZSBmb2N1cyBjYXRjaGVyICR7''@;'; put 'put ''aSsxfWAsci5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoYSxyKX19KX0sMTAwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShLMSksV2UoRTIpLFdlKFNjKSxXZShybCksV2UoczApLFdlKEpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1W''@;'; put 'put ''cih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtc3RhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgt''@;'; put 'put ''ODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50''@;'; put 'put ''ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQt''@;'; put 'put ''YmxvY2siLCJjbHItY29sLW1kLTYiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsicm9sZSIsInN0YXR1cyIsMSwibXQtMTAiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNvbC1tZC02IiwiY2Fy''@;'; put 'put ''ZC1ibG9jayIsIm5vLWJvcmRlcnMiXSxbMSwibXQtMjAiXSxbMSwicm93Il0sWyJhcmlhLWxhYmVsIiwiVmlldyBiYXNlIHRhYmxlIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImlkIiwiYXBwcm92''@;'; put 'put ''YWwtYnRuIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzLW91dGxpbmUgdGV4dC1jZW50ZXIgbXItNWkiLCJhcmlhLWxhYmVsIiwiQXBwcm92ZSB0YWJsZSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkVkaXQgYmFzZSB0YWJsZSIsMSwiYnRu''@;'; put 'put ''IiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInRleHQtY2VudGVyIiwibXItNWkiLCJt''@;'; put 'put ''aW4tdy0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWRhbmdlciB0ZXh0LWNlbnRlciBtdC0yMCIsImFyaWEtbGFiZWwiLCJSZXZlcnQgdGhpcyBhbmQg''@;'; put 'put ''YWxsIHN1YnNlcXVlbnQgY2hhbmdlcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbImlkIiwiaG90VGFibGUiLCJhcmlhLWxhYmVsIiwiU3RhZ2VkIGRhdGEgdGFibGUiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFsxLCJjYXJkLWZvb3RlciIsImQt''@;'; put 'put ''ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwiYXJpYS1sYWJlbCIsIkFwcHJvdmUgdGFibGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0s''@;'; put 'put ''WyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hhbmdlcyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xyUG9zaXRp''@;'; put 'put ''b24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGN0KDIsTkl0LDMsMiwiZGl2''@;'; put 'put ''IiwyKSgzLHpJdCw0OSwxNSwiZGl2IiwzKSxpZSgpKCkpLDImciYmKGFlKDIpLHllKCJuZ0lmIiwhaS5sb2FkZWQpLGFlKCkseWUoIm5nSWYiLGkubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbUnUsbWEsVWwsUzEseTIsVmYsUjYsTzYsTDYsRzVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4g''@;'; put 'put ''bn0pKCl9XTtsZXQgV0l0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYSxNMSxZYy5mb3JD''@;'; put 'put ''aGlsZChVSXQpLFp5LmZvclJvb3QoKV19KX19cmV0dXJuIG59KSgpO2Z1bmN0aW9uIFpJdChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDE3KSxUZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLHJlKDIsInNwYW4iLDcpLFRlKDMpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoMyksdnIo''@;'; put 'put ''ZS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFlJdChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDE3KSxUZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIpLHJlKDIsInNwYW4iLDcpLFRlKDMpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoMyks''@;'; put 'put ''dnIoZS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEdJdChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDE3KSxUZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIikscmUoMiwic3BhbiIsNyksVGUoMyksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSgz''@;'; put 'put ''KSx2cihlLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiAkSXQobix0KXtpZigxJm4mJihyZSgwLCJwIiwxNyksVGUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIikscmUoMiwic3BhbiIsNyksVGUoMyksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoKTth''@;'; put 'put ''ZSgzKSx2cihlLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEtJdChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDE3KSxUZSgxLCIgU3VibWl0IHJvd3MgbGltaXQ6ICIpLHJlKDIsInNwYW4iLDcpLFRlKDMpLGllKCkoKSksMiZuKXtjb25zdCBlPUVl''@;'; put 'put ''KCk7YWUoMyksdnIoZS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBYSXQobix0KXtpZigxJm4mJihyZSgwLCJwIiwxNyksVGUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxyZSgyLCJzcGFuIiw3KSxUZSgzKSxpZSgpKCkpLDImbil7Y29u''@;'; put 'put ''c3QgZT1FZSgpO2FlKDMpLHZyKGUubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gcUl0KG4sdCl7aWYoMSZuJiYocmUoMCwicCIsMTcpLFRlKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLHJlKDIsInNwYW4iLDcpLFRlKDMpLGllKCkoKSksMiZu''@;'; put 'put ''KXtjb25zdCBlPUVlKCk7YWUoMyksdnIoZS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIEpJdChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDE3KSxUZSgxLCIgTGluZWFnZSBkYWlseSBsaW1pdDogIikscmUoMiwic3BhbiIsNyksVGUoMyksaWUoKSgpKSwyJm4p''@;'; put 'put ''e2NvbnN0IGU9RWUoKTthZSgzKSx2cihlLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gUUl0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IiwxOSksVGUoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLHJlKDIsImJ1dHRvbiIs''@;'; put 'put ''MjApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksVGUoMywiIFJFRlJFU0ggIiksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgyKTthZSgyKSx5ZSgiY2xyTG9hZGluZyIsZS5yZWZyZXNoaW5nRGF0YUxpbmVhZ2Up''@;'; put 'put ''fX1mdW5jdGlvbiBlUnQobix0KXsxJm4mJihyZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOSksVGUoMSwiIEVudGVyIHRoZSB0YXJnZXQgREMgbGlicmFyeSBhbmQgdGhlIGRvd25sb2FkZWQgZmlsZXMgd2lsbCBjb250YWluIHRoaXMsIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsLiAiKSxp''@;'; put 'put ''ZSgpKX1mdW5jdGlvbiB0UnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyaSgwKSxjdCgxLFFJdCw0LDEsImRpdiIsMTgpLHJlKDIsImRpdiIsMTkpLFRlKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxvZyAiKSxyZSg0LCJidXR0b24iLDIwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGd0KGUpLG10KEVlKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSksVGUoNSwiIFJFRlJFU0ggIiksaWUoKSgpLHJlKDYsImRpdiIsMTkpLFRlKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLHJlKDgsImRpdiIsMjEpKDksImNsci10b29sdGlwIiwyMikoMTAsImxhYmVsIiwyMyksVGUo''@;'; put 'put ''MTEsIiBUYXJnZXQgREMgTGlicmFyeSAiKSxWdCgxMiwiY2RzLWljb24iLDI0KSxpZSgpLGN0KDEzLGVSdCwyLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI1KSxpZSgpLHJlKDE0LCJpbnB1dCIsMjYpLGt0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUo''@;'; put 'put ''KS50YXJnZXRMaWJyZWY9aS50b1VwcGVyQ2FzZSgpKX0pLGllKCkoKSxyZSgxNSwiYnV0dG9uIiwyNyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmRvd25sb2FkQ29uZmlndXJhdGlvbigpKX0pLFRlKDE2LCIgRE9XTkxPQUQgIiksaWUoKSgpLHJlKDE3LCJk''@;'; put 'put ''aXYiLDE5KSxUZSgxOCwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxyZSgxOSwiYnV0dG9uIiwyOCksVGUoMjAsIiBVUERBVEUgIiksaWUoKSgpLGlpKCl9aWYoMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsIlNBUzkiPT09ZS5zZXJ2ZXJUeXBlKSxhZSgzKSx5ZSgiY2xyTG9hZGlu''@;'; put 'put ''ZyIsZS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpLGFlKDEwKSx5ZSgibmdNb2RlbCIsZS5kY0xpYiksYWUoKSx5ZSgiZGlzYWJsZWQiLGUudGFyZ2V0TGlicmVmIT09ZS5kY0xpYiYmIWUuaXNWYWxpZExpYnJlZihlLnRhcmdldExpYnJlZikpfX1jb25zdCBuUnQ9W3twYXRoOiIiLGNvbXBvbmVu''@;'; put 'put ''dDooKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEpe3RoaXMuYXBwU2VydmljZT1lLHRoaXMuc2FzU2VydmljZT1yLHRoaXMubGljZW5jZVNlcnZpY2U9aSx0aGlzLmFwcFNldHRpbmdzU2VydmljZT1hLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQuMTYuNyIsYXBwVmVy''@;'; put 'put ''c2lvbjoidjcuNy4zIi5yZXBsYWNlKCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6Z2goKShwYXJzZUludCgiMTc3ODYxMTM5MTc4MiIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIil9LHRoaXMuaHR0cD0iaHR0cDoiPT09bG9jYXRpb24ucHJvdG9jb2wsdGhpcy5yZWZyZXNoaW5nRGF0YUNh''@;'; put 'put ''dGFsb2c9ITEsdGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITEsdGhpcy5yZXNwb25zZT0iTm8gcmVzcG9uc2UiLHRoaXMucmVzcG9uc2VNb2RhbD0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmRjTGliPVduLmRjTGliLHRoaXMudGFyZ2V0TGlicmVmPVduLmRjTGliLHRoaXMubGljZW5j''@;'; put 'put ''ZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMubGljZW5jZUluZm89dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpLHRoaXMuZW52aXJvbm1lbnRJbmZv''@;'; put 'put ''PXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9ubWVudEluZm8oKSx0aGlzLnNldHRpbmdzPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlLHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29t''@;'; put 'put ''cG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSksdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc3Vic2NyaWJlKGM9Pnt0aGlzLnNldHRpbmdzPWN9KX1uZ09uSW5pdCgpe31zZXR0aW5nQ2hhbmdlKGUpe3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNl''@;'; put 'put ''dHRpbmdzKHRoaXMuc2V0dGluZ3MpfWlzVmFsaWRMaWJyZWYoZSl7cmV0dXJuL15bQS1aYS16X11cd3swLDd9JC8udGVzdChlLnRyaW0oKSl9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0IGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkscj1lLnNlcnZlclVybCxpPWUuYXBw''@;'; put 'put ''TG9jLGE9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKSxjPXRoaXMudGFyZ2V0TGlicmVmLnRvVXBwZXJDYXNlKCkudHJpbSgpLG09cithKyIvP19wcm9ncmFtPSIraSsiL3NlcnZpY2VzL2FkbWluL2V4cG9ydGNvbmZpZyI7YyYmYyE9PXRoaXMuZGNMaWImJnRoaXMuaXNWYWxp''@;'; put 'put ''ZExpYnJlZihjKSYmKG0rPSImZGNsaWI9IitlbmNvZGVVUklDb21wb25lbnQoYykpLHdpbmRvdy5vcGVuKG0pfXJlZnJlc2hEYXRhQ2F0YWxvZygpe3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0YWxvZyIsbnVs''@;'; put 'put ''bCkudGhlbihlPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoZS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGU9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShlLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1v''@;'; put 'put ''ZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRo''@;'; put 'put ''ZW4oZT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGUuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChlPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoZS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0h''@;'; put 'put ''MH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMX0pfXBhcnNlUmVzcG9uc2UoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP0pTT04uc3RyaW5naWZ5KGUpOmV9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2Uo''@;'; put 'put ''TUYpLFdlKEpzKSxXZShLMSksV2UoaEYpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MTM4LHZhcnM6MzYsY29uc3RzOltbMSwi''@;'; put 'put ''Y29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29u''@;'; put 'put ''dGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsx''@;'; put 'put ''LCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1v''@;'; put 'put ''ZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rp''@;'; put 'put ''b24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJsaWJyZWYtZ3JvdXAiXSxbMSwibGlicmVmLXRvb2x0aXAiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJsaWJyZWYtbGFiZWwiXSxbInNoYXBlIiwiaW5mby1jaXJjbGUiLCJz''@;'; put 'put ''aXplIiwiMTYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibWQiLDQsImNscklmT3BlbiJdLFsidHlwZSIsInRleHQiLCJtYXhsZW5ndGgiLCI4IiwicGxhY2Vob2xkZXIiLCJlLmcuIE1ZTElCIiwxLCJjbHItaW5wdXQiLCJsaWJyZWYtaW5wdXQiLDMsIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLDEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiwi''@;'; put 'put ''Y2xyU2l6ZSIsIm1kIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImg0IiwyKSxUZSgzLCJTeXN0ZW0gaW5mb3JtYXRpb24iKSxpZSgpLFZ0KDQsImhyIiwzKSxyZSg1LCJkaXYiLDQpKDYsImRpdiIsNSkoNywiZGl2IikoOCwiaDYi''@;'; put 'put ''LDYpLFRlKDksIiBFbnZpcm9ubWVudCBEZXRhaWxzICIpLFZ0KDEwLCJzcGFuIiw3KSxpZSgpLHJlKDExLCJwIiw4KSxUZSgxMiwiIFNZU1NJVEU6ICIpLHJlKDEzLCJzcGFuIiw3KSxUZSgxNCksaWUoKSgpLHJlKDE1LCJwIiw4KSxUZSgxNiwiIFNZU1NDUEw6ICIpLHJlKDE3LCJzcGFuIiw3''@;'; put 'put ''KSxUZSgxOCksaWUoKSgpLHJlKDE5LCJwIiw4KSxUZSgyMCwiIFNZU1RDUElQSE9TVE5BTUU6ICIpLHJlKDIxLCJzcGFuIiw3KSxUZSgyMiksaWUoKSgpLHJlKDIzLCJwIiw4KSxUZSgyNCwiIFNZU1ZMT05HOiAiKSxyZSgyNSwic3BhbiIsNyksVGUoMjYpLGllKCkoKSxyZSgyNywicCIsOCks''@;'; put 'put ''VGUoMjgsIiBNRU1TSVpFOiAiKSxyZSgyOSwic3BhbiIsNyksVGUoMzApLGllKCkoKSxyZSgzMSwicCIsOCksVGUoMzIsIiBTWVNQUk9DRVNTTU9ERTogIikscmUoMzMsInNwYW4iLDcpLFRlKDM0KSxpZSgpKCkscmUoMzUsInAiLDgpLFRlKDM2LCIgU1lTSE9TVE5BTUU6ICIpLHJlKDM3LCJz''@;'; put 'put ''cGFuIiw3KSxUZSgzOCksaWUoKSgpLHJlKDM5LCJwIiw4KSxUZSg0MCwiIFNZU1VTRVJJRDogIikscmUoNDEsInNwYW4iLDcpLFRlKDQyKSxpZSgpKCkscmUoNDMsInAiLDgpLFRlKDQ0LCIgU1lTSE9TVElORk9MT05HOiAiKSxyZSg0NSwic3BhbiIsNyksVGUoNDYpLGllKCkoKSxyZSg0Nywi''@;'; put 'put ''cCIsOCksVGUoNDgsIiBTWVNFTkNPRElORzogIikscmUoNDksInNwYW4iLDcpLFRlKDUwKSxpZSgpKCkscmUoNTEsInAiLDgpLFRlKDUyLCIgQVVUT0VYRUM6ICIpLHJlKDUzLCJzcGFuIiw3KSxUZSg1NCksaWUoKSgpKCkscmUoNTUsImRpdiIsOSkoNTYsImRpdiIpKDU3LCJoNiIsNiksVGUo''@;'; put 'put ''NTgsIiBEYXRhIENvbnRyb2xsZXIgRGV0YWlscyAiKSxWdCg1OSwic3BhbiIsNyksaWUoKSxyZSg2MCwicCIsOCksVGUoNjEsIiBBcHBsaWNhdGlvbiB2ZXJzaW9uOiAiKSxyZSg2Miwic3BhbiIsNyksVGUoNjMpLGllKCkoKSxyZSg2NCwicCIsOCksVGUoNjUsIiBCdWlsZCB0aW1lc3RhbXA6''@;'; put 'put ''ICIpLHJlKDY2LCJzcGFuIiw3KSxUZSg2NyksaWUoKSgpLHJlKDY4LCJwIiw4KSxUZSg2OSwiIEFkYXB0ZXIgdmVyc2lvbjogIikscmUoNzAsInNwYW4iLDcpLFRlKDcxKSxpZSgpKCkscmUoNzIsInAiLDgpLFRlKDczLCIgSFRUUDogIikscmUoNzQsInNwYW4iLDcpLFRlKDc1KSxpZSgpKCks''@;'; put 'put ''cmUoNzYsInAiLDgpLFRlKDc3LCIgREMgQWRtaW4gR3JvdXA6ICIpLHJlKDc4LCJzcGFuIiw3KSxUZSg3OSksaWUoKSgpLHJlKDgwLCJwIiw4KSxUZSg4MSwiIEFwcCBMb2NhdGlvbjogIikscmUoODIsInNwYW4iLDcpLFRlKDgzKSxpZSgpKCkoKSgpLHJlKDg0LCJkaXYiKSg4NSwiaDYiLDYp''@;'; put 'put ''LFRlKDg2LCIgTGljZW5jZSBkZXRhaWxzICIpLFZ0KDg3LCJzcGFuIiw3KSxpZSgpLHJlKDg4LCJwIiw4KSxUZSg4OSwiIFZhbGlkIHVudGlsOiAiKSxyZSg5MCwic3BhbiIsNyksVGUoOTEpLGllKCkoKSxyZSg5MiwicCIsOCksVGUoOTMsIiBVc2VycyBhbGxvd2VkOiAiKSxyZSg5NCwic3Bh''@;'; put 'put ''biIsNyksVGUoOTUpLGllKCkoKSxyZSg5NiwicCIsOCksVGUoOTcsIiBTaXRlIElEczogIikscmUoOTgsInNwYW4iLDcpLFRlKDk5KSxpZSgpKCkscmUoMTAwLCJwIiw4KSxUZSgxMDEsIiBGcmVlIFRpZXI6ICIpLHJlKDEwMiwic3BhbiIsNyksVGUoMTAzKSxpZSgpKCksY3QoMTA0LFpJdCw0''@;'; put 'put ''LDEsInAiLDEwKSgxMDUsWUl0LDQsMSwicCIsMTApKDEwNixHSXQsNCwxLCJwIiwxMCkoMTA3LCRJdCw0LDEsInAiLDEwKSgxMDgsS0l0LDQsMSwicCIsMTApKDEwOSxYSXQsNCwxLCJwIiwxMCkoMTEwLHFJdCw0LDEsInAiLDEwKSgxMTEsSkl0LDQsMSwicCIsMTApLHJlKDExMiwicCIsOCks''@;'; put 'put ''VGUoMTEzLCIgVmlld2JveGVzOiAiKSxyZSgxMTQsInNwYW4iLDcpLFRlKDExNSksaWUoKSgpLHJlKDExNiwicCIsOCksVGUoMTE3LCIgRmlsZSBVcGxvYWQ6ICIpLHJlKDExOCwic3BhbiIsNyksVGUoMTE5KSxpZSgpKCkscmUoMTIwLCJwIiw4KSxUZSgxMjEsIiBFZGl0IHJlY29yZDogIiks''@;'; put 'put ''cmUoMTIyLCJzcGFuIiw3KSxUZSgxMjMpLGllKCkoKSxyZSgxMjQsInAiLDgpLFRlKDEyNSwiIEFkZCByZWNvcmQ6ICIpLHJlKDEyNiwic3BhbiIsNyksVGUoMTI3KSxpZSgpKCkoKSgpLFZ0KDEyOCwiaHIiLDMpLGN0KDEyOSx0UnQsMjEsNCwibmctY29udGFpbmVyIiwxMSksaWUoKSgpKCks''@;'; put 'put ''cmUoMTMwLCJjbHItbW9kYWwiLDEyKSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gdWkoaS5yZXNwb25zZU1vZGFsLGMpfHwoaS5yZXNwb25zZU1vZGFsPWMpLGN9KSxyZSgxMzEsImgzIiwxMyksVGUoMTMyLCJSZXNwb25zZSIpLGllKCkscmUoMTMzLCJkaXYi''@;'; put 'put ''LDE0KSxUZSgxMzQpLGllKCkscmUoMTM1LCJkaXYiLDE1KSgxMzYsImJ1dHRvbiIsMTYpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yZXNwb25zZU1vZGFsPSExfSksVGUoMTM3LCIgT2sgIiksaWUoKSgpKCkpLDImciYmKGFlKDE0KSx2cihudWxsPT1pLmVudmlyb25tZW50SW5m''@;'; put 'put ''bz9udWxsOmkuZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUpLGFlKDQpLHZyKG51bGw9PWkuZW52aXJvbm1lbnRJbmZvP251bGw6aS5lbnZpcm9ubWVudEluZm8uU1lTU0NQTCksYWUoNCksdnIobnVsbD09aS5lbnZpcm9ubWVudEluZm8/bnVsbDppLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhP''@;'; put 'put ''U1ROQU1FKSxhZSg0KSx2cihudWxsPT1pLmVudmlyb25tZW50SW5mbz9udWxsOmkuZW52aXJvbm1lbnRJbmZvLlNZU1ZMT05HKSxhZSg0KSx2cihudWxsPT1pLmVudmlyb25tZW50SW5mbz9udWxsOmkuZW52aXJvbm1lbnRJbmZvLk1FTVNJWkUpLGFlKDQpLHZyKG51bGw9PWkuZW52aXJvbm1l''@;'; put 'put ''bnRJbmZvP251bGw6aS5lbnZpcm9ubWVudEluZm8uU1lTUFJPQ0VTU01PREUpLGFlKDQpLHZyKG51bGw9PWkuZW52aXJvbm1lbnRJbmZvP251bGw6aS5lbnZpcm9ubWVudEluZm8uU1lTSE9TVE5BTUUpLGFlKDQpLHZyKG51bGw9PWkuZW52aXJvbm1lbnRJbmZvP251bGw6aS5lbnZpcm9ubWVu''@;'; put 'put ''dEluZm8uU1lTVVNFUklEKSxhZSg0KSx2cihudWxsPT1pLmVudmlyb25tZW50SW5mbz9udWxsOmkuZW52aXJvbm1lbnRJbmZvLlNZU0hPU1RJTkZPTE9ORyksYWUoNCksdnIobnVsbD09aS5lbnZpcm9ubWVudEluZm8/bnVsbDppLmVudmlyb25tZW50SW5mby5TWVNFTkNPRElORyksYWUoNCks''@;'; put 'put ''dnIobnVsbD09aS5lbnZpcm9ubWVudEluZm8/bnVsbDppLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyksYWUoOSksdnIoaS5hcHBJbmZvLmFwcFZlcnNpb24pLGFlKDQpLHZyKGkuYXBwSW5mby5idWlsZFRpbWVzdGFtcCksYWUoNCksdnIoaS5hcHBJbmZvLmFkYXB0ZXJWZXJzaW9uKSxhZSg0''@;'; put 'put ''KSx2cihpLmh0dHA/IllFUyI6Ik5PIiksYWUoNCksdnIobnVsbD09aS5lbnZpcm9ubWVudEluZm8/bnVsbDppLmVudmlyb25tZW50SW5mby5EQ19BRE1JTl9HUk9VUCksYWUoNCksdnIobnVsbD09aS5lbnZpcm9ubWVudEluZm8/bnVsbDppLmVudmlyb25tZW50SW5mby5BUFBfTE9DKSxhZSg4''@;'; put 'put ''KSx2cihudWxsPT1pLmxpY2VuY2VJbmZvP251bGw6aS5saWNlbmNlSW5mby52YWxpZF91bnRpbCksYWUoNCksdnIobnVsbD09aS5saWNlbmNlSW5mbz9udWxsOmkubGljZW5jZUluZm8udXNlcnNfYWxsb3dlZCksYWUoNCksdnIobnVsbD09aS5saWNlbmNlSW5mbz9udWxsOmkubGljZW5jZUlu''@;'; put 'put ''Zm8uc2l0ZV9pZF9tdWx0aXBsZSksYWUoNCksdnIobnVsbCE9aS5saWNlbmNlSW5mbyYmaS5saWNlbmNlSW5mby5kZW1vPyJZRVMiOiJOTyIpLGFlKCkseWUoIm5nSWYiLGkubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1pLkluZmluaXR5KSxhZSgpLHllKCJuZ0lm''@;'; put 'put ''IixpLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aS5JbmZpbml0eSksYWUoKSx5ZSgibmdJZiIsaS5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkIT09aS5JbmZpbml0eSksYWUoKSx5ZSgibmdJZiIsaS5saWNlbmNlU3RhdGUudmFsdWUuaGlz''@;'; put 'put ''dG9yeV9yb3dzX2FsbG93ZWQhPT1pLkluZmluaXR5KSxhZSgpLHllKCJuZ0lmIixpLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWkuSW5maW5pdHkpLGFlKCkseWUoIm5nSWYiLGkubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IT09aS5J''@;'; put 'put ''bmZpbml0eSksYWUoKSx5ZSgibmdJZiIsaS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWkuSW5maW5pdHkpLGFlKCkseWUoIm5nSWYiLGkubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQhPT1pLkluZmluaXR5KSxhZSg0KSx2cihpLmxpY2VuY2VTdGF0''@;'; put 'put ''ZS52YWx1ZS52aWV3Ym94PyJZRVMiOiJOTyIpLGFlKDQpLHZyKGkubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWQ/IllFUyI6Ik5PIiksYWUoNCksdnIoaS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZD8iWUVTIjoiTk8iKSxhZSg0KSx2cihpLmxpY2VuY2VTdGF0ZS52YWx1ZS5h''@;'; put 'put ''ZGRSZWNvcmQ/IllFUyI6Ik5PIiksYWUoMikseWUoIm5nSWYiLDE9PT0obnVsbD09aS5lbnZpcm9ubWVudEluZm8/bnVsbDppLmVudmlyb25tZW50SW5mby5JU0FETUlOKSksYWUoKSxsaSgiY2xyTW9kYWxPcGVuIixpLnJlc3BvbnNlTW9kYWwpLGFlKDQpLE1yKCIgIixpLnJlc3BvbnNlLCIg''@;'; put 'put ''IikpfSxkZXBlbmRlbmNpZXM6W21hLFgxLHJzLGh1LGMwLFMxLHkyLFZmLHBzLFI2LE82LEw2LHpsLGlsLE5LLFFzXSxzdHlsZXM6WyIubGlicmVmLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHg7bWFyZ2luOjAgOHB4fS5saWJyZWYtbGFiZWx7''@;'; put 'put ''Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi41NXJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY2xyLXA0LWNvbG9yLCAjNTY1NjU2KTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4fS5saWJyZWYtaW5wdXR7d2lkdGg6MTAwcHg7dGV4dC10cmFu''@;'; put 'put ''c2Zvcm06dXBwZXJjYXNlfVxuIl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKX1dO2xldCByUnQ9KCgpPT57Y2xhc3MgbntzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUdpKHt0eXBlOm59KX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W1ljLmZvckNoaWxkKG5SdCksWWNdfSl9fXJldHVybiBufSkoKSxpUnQ9KCgpPT57Y2xhc3MgbntzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPUdp''@;'; put 'put ''KHt0eXBlOm59KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhLHJSdCxNMSxPY119KX19cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGFSdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBvUnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJj''@;'; put 'put ''bHItaWNvbiIsMTMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVybiBpLmdyb3VwU2VhcmNoPSIiLG10KGkuZ3JvdXBMaXN0T25GaWx0ZXIoKSl9KSxpZSgpfX1mdW5jdGlvbiBzUnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEuZ3JvdXBTZWFyY2gsaSl8fChhLmdyb3VwU2VhcmNoPWkpLG10KGkpfSksa3QoImtleXVwIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBndChlKSxtdChFZSgpLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaWUoKSxjdCg0LGFSdCwxLDAsImNsci1pY29uIiwxMCkoNSxvUnQsMSwwLCJjbHItaWNvbiIsMTEpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9ZGEoMykscj1FZSgpO2FlKDIpLGxpKCJuZ01vZGVsIixyLmdyb3VwU2Vh''@;'; put 'put ''cmNoKSxhZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGxSdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDE1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7''@;'; put 'put ''Y29uc3QgaT1FZSgpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS5ncm91cE9uQ2xpY2soaSkpfSkscmUoMSwicCIsMTYpLFZ0KDIsImNsci1pY29uIiwxNyksVGUoMyksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdCxyPUVlKCk7YnIoImFjdGl2ZSIsZS5HUk9VUFVSST09''@;'; put 'put ''PXIuZ3JvdXBVcmkpLGFlKDMpLE1yKCIgIixlLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBjUnQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLGxSdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxpaSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoKSx5ZSgibmdJZiIsIWUuaGlkZGVu''@;'; put 'put ''KX19ZnVuY3Rpb24gdVJ0KG4sdCl7MSZuJiYocmUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLFRlKDIsIiBMb2FkaW5nLi4uICIpLGllKCkoKSl9ZnVuY3Rpb24gZFJ0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI0KSgzLCJ0Ym9keSIpKDQs''@;'; put 'put ''InRyIikoNSwidGQiLDI1KSg2LCJwIiwyNikoNywiYiIpLFRlKDgpLGllKCkoKSgpKCkscmUoOSwidHIiKSgxMCwidGQiLDI1KSgxMSwiaSIpLFRlKDEyKSxpZSgpKCkoKSgpKCkoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoOCksdnIoZS5ncm91cE5hbWUpLGFlKDQpLHZyKGUuZ3JvdXBE''@;'; put 'put ''ZXNjfHwibm8gZGVzY3JpcHRpb24iKX19ZnVuY3Rpb24gaFJ0KG4sdCl7MSZuJiYocmUoMCwiaDUiKSxUZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxpZSgpKX1mdW5jdGlvbiBmUnQobix0KXsxJm4mJihyaSgwKSxyZSgxLCJ0ZCIsMzEpKDIsImIiKSxUZSgzLCJOQU1FIiksaWUoKSgpLHJl''@;'; put 'put ''KDQsInRkIiwzMSkoNSwiYiIpLFRlKDYsIkVNQUlMIiksaWUoKSgpLHJlKDcsInRkIiwzMSkoOCwiYiIpLFRlKDksIkNSRUFURUQiKSxpZSgpKCkscmUoMTAsInRkIiwzMikoMTEsImIiKSxUZSgxMiwiVVBEQVRFRCIpLGllKCkoKSxpaSgpKX1mdW5jdGlvbiBwUnQobix0KXsxJm4mJihyaSgw''@;'; put 'put ''KSxyZSgxLCJ0ZCIsMzEpKDIsImIiKSxUZSgzLCJJRCIpLGllKCkoKSxyZSg0LCJ0ZCIsMzEpKDUsImIiKSxUZSg2LCJESVNQTEFZIE5BTUUiKSxpZSgpKCkscmUoNywidGQiLDMxKSg4LCJiIiksVGUoOSwiVVNFUiBOQU1FIiksaWUoKSgpLGlpKCkpfWZ1bmN0aW9uIGdSdChuLHQpe2lmKDEm''@;'; put 'put ''biYmKHJpKDApLHJlKDEsInRkIiwzMiksVGUoMiksaWUoKSxyZSgzLCJ0ZCIsMzIpLFRlKDQpLGllKCkscmUoNSwidGQiLDMyKSxUZSg2KSxpZSgpLHJlKDcsInRkIiwzMiksVGUoOCksaWUoKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQ7YWUoMiksdnIoZS5NRU1CRVJOQU1F''@;'; put 'put ''KSxhZSgyKSx2cihlLkVNQUlMKSxhZSgyKSx2cihlLk1FTUJFUkNSRUFURUQpLGFlKDIpLHZyKGUuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIG1SdChuLHQpe2lmKDEmbiYmKHJpKDApLHJlKDEsInRkIiwzMiksVGUoMiksaWUoKSxyZSgzLCJ0ZCIsMzIpLFRlKDQpLGllKCkscmUoNSwidGQi''@;'; put 'put ''LDMyKSxUZSg2KSxpZSgpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdDthZSgyKSx2cihlLklEKSxhZSgyKSx2cihlLkRJU1BMQVlOQU1FKSxhZSgyKSx2cihlLlVTRVJOQU1FKX19ZnVuY3Rpb24gdlJ0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiLDMzKSxjdCgxLGdSdCw5LDQs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsNikoMixtUnQsNywzLCJuZy1jb250YWluZXIiLDYpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKDQpO3llKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iKyhlLlVSSU1FTXx8ZS5JRCkpLGFlKCkseWUoIm5nSWYiLHIuc2VydmVy''@;'; put 'put ''VHlwZT09PXIuU2VydmVyVHlwZS5TYXM5KSxhZSgpLHllKCJuZ0lmIixyLnNlcnZlclR5cGU9PT1yLlNlcnZlclR5cGUuU2FzanMpfX1mdW5jdGlvbiB5UnQobix0KXtpZigxJm4mJihyZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSxjdCgzLGZSdCwxMywwLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDYpKDQscFJ0LDEwLDAsIm5nLWNvbnRhaW5lciIsNiksaWUoKSgpLHJlKDUsInRib2R5IiksY3QoNix2UnQsMywzLCJ0ciIsMzApLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKDMpLHllKCJuZ0lmIixlLnNlcnZlclR5cGU9PT1lLlNlcnZlclR5cGUuU2FzOSksYWUoKSx5ZSgi''@;'; put 'put ''bmdJZiIsZS5zZXJ2ZXJUeXBlPT09ZS5TZXJ2ZXJUeXBlLlNhc2pzKSxhZSgyKSx5ZSgibmdGb3JPZiIsZS5ncm91cE1lbWJlcnMpfX1mdW5jdGlvbiBfUnQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiKSgxLCJoMyIpLFRlKDIpLGllKCksY3QoMyxoUnQsMiwwLCJoNSIsNikscmUoNCwiZGl2''@;'; put 'put ''IiwyNyksY3QoNSx5UnQsNywzLCJ0YWJsZSIsMjgpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKDIpLE1yKCJNRU1CRVJTICgiLGUuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGFlKCkseWUoIm5nSWYiLDA9PWUuZ3JvdXBNZW1iZXJDb3VudCksYWUoMikseWUoIm5nSWYiLDAhPWUuZ3Jv''@;'; put 'put ''dXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIGJSdChuLHQpezEmbiYmKHJlKDAsImg1IiksVGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaWUoKSl9ZnVuY3Rpb24gd1J0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLFRlKDIpLGllKCkoKSksMiZuKXtjb25zdCBlPXQu''@;'; put 'put ''JGltcGxpY2l0O3llKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2UuTUVNQkVSSUQpLGFlKDIpLHZyKGUuTUVNQkVSTkFNRSl9fWZ1bmN0aW9uIENSdChuLHQpe2lmKDEmbiYmKHJlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIikoNCwiYiIpLFRl''@;'; put 'put ''KDUpLGllKCkoKSgpKCkscmUoNiwidGJvZHkiKSxjdCg3LHdSdCwzLDIsInRyIiwzMCksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoNSksTXIoIk1FTUJFUlMgKCIsZS5ncm91cE1lbWJlckNvdW50LCIpIiksYWUoMikseWUoIm5nRm9yT2YiLGUuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rp''@;'; put 'put ''b24gU1J0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IikoMSwiaDMiKSxUZSgyKSxpZSgpLGN0KDMsYlJ0LDIsMCwiaDUiLDYpLHJlKDQsImRpdiIsMjcpLGN0KDUsQ1J0LDgsMiwidGFibGUiLDI4KSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgyKSx2cihlLmdyb3VwTmFtZSksYWUo''@;'; put 'put ''KSx5ZSgibmdJZiIsMD09ZS5ncm91cE1lbWJlckNvdW50KSxhZSgyKSx5ZSgibmdJZiIsMCE9ZS5ncm91cE1lbWJlckNvdW50KX19ZnVuY3Rpb24gTVJ0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiksY3QoMSxkUnQsMTMsMiwiZGl2IiwyMCkscmUoMiwiZGl2IiwyMSkoMywiZGl2IiwyMiko''@;'; put 'put ''NCwiZGl2IiwyMyksY3QoNSxfUnQsNiwzLCJkaXYiLDYpKDYsU1J0LDYsMywiZGl2Iiw2KSxWdCg3LCJiciIpLGllKCkoKSgpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLGUuc2VydmVyVHlwZSE9PWUuU2VydmVyVHlwZS5TYXNWaXlhKSxhZSg0KSx5ZSgibmdJZiIsZS5z''@;'; put 'put ''ZXJ2ZXJUeXBlIT09ZS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGFlKCkseWUoIm5nSWYiLGUuc2VydmVyVHlwZT09PWUuU2VydmVyVHlwZS5TYXNWaXlhKX19bGV0IEpfZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyl7dGhpcy5zYXNTZXJ2aWNlPWUsdGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlPXIsdGhpcy5yb3V0ZXI9aSx0aGlzLmxvY2F0aW9uPWEsdGhpcy5yb3V0ZT1jLHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRoaXMuZ3JvdXBEZXNjPSIiLHRoaXMu''@;'; put 'put ''c2FzanNDb25maWc9bmV3IGgyLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9QzEuWSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2Uu''@;'; put 'put ''Z2V0U2VydmVyVHlwZSgpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe1duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBh''@;'; put 'put ''cmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksV24udXNlcm5hdi5ncm91cExpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9V24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNl''@;'; put 'put ''YXJjaD1Xbi51c2VybmF2Lmdyb3VwU2VhcmNoKToodm9pZCAwPT09V24udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntB''@;'; put 'put ''Y2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZT0+ZS50ZXh0KCkpLnRoZW4oZT0+e2xldCBpPUpTT04ucGFyc2UoZSkuaXRlbXMubWFwKGE9Pih7R1JPVVBVUkk6YS5pZCxHUk9VUE5BTUU6YS5uYW1lLEdST1VQREVTQzphLmRlc2NyaXB0aW9ufSkpO3RoaXMubG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLmdyb3Vwcz1pLFduLnVzZXJuYXYuZ3JvdXBMaXN0PWl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIsbnVsbCkudGhlbihlPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWUuYWRhcHRlclJlc3BvbnNlLmdyb3VwcyxXbi51c2VybmF2Lmdyb3Vw''@;'; put 'put ''TGlzdD1lLmFkYXB0ZXJSZXNwb25zZS5ncm91cHN9KSk6KHRoaXMuZ3JvdXBzPVduLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9V24udXNlcm5hdi5ncm91cFNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhp''@;'; put 'put ''cy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcy8iK3RoaXMucGFyYW1VUkkrIi9tZW1iZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZT0+ZS50ZXh0KCkpLnRoZW4oZT0+e2xldCByPUpTT04ucGFyc2Uo''@;'; put 'put ''ZSk7dGhpcy5sb2FkaW5nPSExO2xldCBpPXIuaXRlbXMubWFwKGE9Pih7TUVNQkVSTkFNRTphLm5hbWUsTUVNQkVSSUQ6YS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1pLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1pLmxlbmd0aCx0aGlzLmdyb3VwVXJpPXRoaXMucGFyYW1VUkksdGhpcy5ncm91''@;'; put 'put ''cE5hbWU9dGhpcy5wYXJhbVVSSX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKHI9Pnt0aGlzLmdyb3VwTWVtYmVycz1yLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJz''@;'; put 'put ''LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1yLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx2b2lkIDAhPT1yLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdJiYodGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9ci5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5V''@;'; put 'put ''UklNRU18fHRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9ci5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9ci5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5HUk9VUERFU0MsdGhpcy5ncm91cE5hbWV8fCh0aGlzLmdyb3VwTmFt''@;'; put 'put ''ZT10aGlzLnBhcmFtVVJJKSl9KSkpfWdyb3VwTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmdyb3Vwcyx0aGlzLmdyb3VwU2VhcmNoLCJHUk9VUE5BTUUiKSxXbi51c2VybmF2Lmdyb3VwU2VhcmNoPXRoaXMuZ3JvdXBTZWFyY2h9Z3JvdXBP''@;'; put 'put ''bkNsaWNrKGUpe3RoaXMubG9hZGluZz0hMDtsZXQgcj10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ci5zbGljZSgwLHIubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShlLkdST1VQVVJJKTpyKyIvIitlbmNvZGVVUkko''@;'; put 'put ''ZS5HUk9VUFVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIitlLkdST1VQVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGk9PmkudGV4''@;'; put 'put ''dCgpKS50aGVuKGk9PntsZXQgYT1KU09OLnBhcnNlKGkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWUuR1JPVVBVUkksdGhpcy5ncm91cE5hbWU9ZS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9ZS5HUk9VUERFU0M7bGV0IGM9YS5pdGVtcy5tYXAobT0+KHtNRU1CRVJOQU1FOm0u''@;'; put 'put ''bmFtZSxNRU1CRVJJRDptLmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPWMsdGhpcy5ncm91cE1lbWJlckNvdW50PWMubGVuZ3RofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7aXdhbnQ6W3tncm91cGlkOmUuR1JPVVBVUkl9XX0pLnRoZW4o''@;'; put 'put ''YT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWUuR1JPVVBVUkksdGhpcy5ncm91cE5hbWU9ZS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9ZS5HUk9VUERFU0MsdGhpcy5ncm91cE1lbWJlcnM9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291''@;'; put 'put ''bnQ9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGh9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShKcyksV2UoTHUpLFdlKHJsKSxXZShsMiksV2UoczApKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2Vs''@;'; put 'put ''ZWN0b3JzOltbImFwcC1ncm91cCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xy''@;'; put 'put ''SW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJj''@;'; put 'put ''bGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXJzIl0s''@;'; put 'put ''WzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwiZ3JvdXAtZGF0YSJdLFsxLCJ0YWJsZSIsImdyb3VwLWluZm8iXSxbMSwibGVmdCJdLFsxLCJncm91cC1p''@;'; put 'put ''bmZvLXRleHQiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJv''@;'; put 'put ''dXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXsxJnImJihyZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxjdCgyLHNSdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsY1J0LDIsMSwibmctY29udGFpbmVyIiwzKSxpZSgpKCkscmUoNCwiZGl2Iiw0KSxjdCg1LHVS''@;'; put 'put ''dCwzLDAsImRpdiIsNSkoNixNUnQsOCwzLCJkaXYiLDYpLGllKCkpLDImciYmKGFlKDIpLHllKCJuZ0lmIixpLmdyb3VwcyksYWUoKSx5ZSgibmdGb3JPZiIsaS5ncm91cHMpLGFlKDIpLHllKCJuZ0lmIixpLmxvYWRpbmcpLGFlKCkseWUoIm5nSWYiLGkuZ3JvdXBNZW1iZXJzJiYhaS5sb2Fk''@;'; put 'put ''aW5nKSl9LGRlcGVuZGVuY2llczpbaHMsbWEsWDEsemwsaWwsUXMsUzIsRWgsVWwsUGQsYWcsaWddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24geFJ0KCl7fWZ1bmN0aW9uIHhhZShuKXtyZXR1cm4gbnVsbD09bj94UnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKG4pfX1mdW5jdGlvbiBRX2Uobil7cmV0dXJuIG51bGw9PW4/W106QXJyYXkuaXNBcnJheShuKT9uOkFycmF5LmZyb20obil9ZnVuY3Rpb24gVFJ0KCl7cmV0dXJuW119ZnVuY3Rpb24gZWJlKG4pe3JldHVybiBudWxsPT1uP1RSdDpmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIHRiZShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKG4pfX1mdW5jdGlvbiBuYmUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hdGNoZXMobil9fXZhciBEUnQ9QXJyYXkucHJvdG90eXBlLmZpbmQ7''@;'; put 'put ''ZnVuY3Rpb24gUlJ0KCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9dmFyIE9SdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIFBSdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIHJiZShuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3Ro''@;'; put 'put ''KX1mdW5jdGlvbiBYaihuLHQpe3RoaXMub3duZXJEb2N1bWVudD1uLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9bi5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1uLHRoaXMuX19kYXRhX189dH1mdW5jdGlvbiBqUnQobix0LGUscixpLGEpe2Zvcih2''@;'; put 'put ''YXIgbSxjPTAsQz10Lmxlbmd0aCxQPWEubGVuZ3RoO2M8UDsrK2MpKG09dFtjXSk/KG0uX19kYXRhX189YVtjXSxyW2NdPW0pOmVbY109bmV3IFhqKG4sYVtjXSk7Zm9yKDtjPEM7KytjKShtPXRbY10pJiYoaVtjXT1tKX1mdW5jdGlvbiB6UnQobix0LGUscixpLGEsYyl7dmFyIG0sQyxmZSxQ''@;'; put 'put ''PW5ldyBNYXAsWT10Lmxlbmd0aCxKPWEubGVuZ3RoLGNlPW5ldyBBcnJheShZKTtmb3IobT0wO208WTsrK20pKEM9dFttXSkmJihjZVttXT1mZT1jLmNhbGwoQyxDLl9fZGF0YV9fLG0sdCkrIiIsUC5oYXMoZmUpP2lbbV09QzpQLnNldChmZSxDKSk7Zm9yKG09MDttPEo7KyttKWZlPWMuY2Fs''@;'; put 'put ''bChuLGFbbV0sbSxhKSsiIiwoQz1QLmdldChmZSkpPyhyW21dPUMsQy5fX2RhdGFfXz1hW21dLFAuZGVsZXRlKGZlKSk6ZVttXT1uZXcgWGoobixhW21dKTtmb3IobT0wO208WTsrK20pKEM9dFttXSkmJlAuZ2V0KGNlW21dKT09PUMmJihpW21dPUMpfWZ1bmN0aW9uIFVSdChuKXtyZXR1cm4g''@;'; put 'put ''bi5fX2RhdGFfX31mdW5jdGlvbiBaUnQobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiYibGVuZ3RoImluIG4/bjpBcnJheS5mcm9tKG4pfWZ1bmN0aW9uIHFSdChuLHQpe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1Yai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhqLGFwcGVu''@;'; put 'put ''ZENoaWxkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKG4sdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKG4sdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24obil7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKG4pfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChuKX19O3ZhciBFYWU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IGliZT17c3ZnOiJodHRwOi8v''@;'; put 'put ''d3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6RWFlLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gcWoobil7''@;'; put 'put ''dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksaWJlLmhhc093blByb3BlcnR5KHQpP3tzcGFjZTppYmVbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBpTHQobil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGFMdChuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9fWZ1bmN0aW9uIG9MdChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9fWZ1''@;'; put 'put ''bmN0aW9uIHNMdChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBsTHQobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmli''@;'; put 'put ''dXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9fWZ1bmN0aW9uIGNMdChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMo''@;'; put 'put ''bi5zcGFjZSxuLmxvY2FsLGUpfX1mdW5jdGlvbiBhYmUobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGRMdChuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJl''@;'; put 'put ''bW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBoTHQobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBmTHQobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhp''@;'; put 'put ''cy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scixlKX19ZnVuY3Rpb24gS1Mobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxhYmUobikuZ2V0Q29tcHV0ZWRTdHlsZShuLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9ZnVu''@;'; put 'put ''Y3Rpb24gZ0x0KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBtTHQobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW25dPXR9fWZ1bmN0aW9uIHZMdChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9''@;'; put 'put ''PWU/ZGVsZXRlIHRoaXNbbl06dGhpc1tuXT1lfX1mdW5jdGlvbiBvYmUobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFRhZShuKXtyZXR1cm4gbi5jbGFzc0xpc3R8fG5ldyBzYmUobil9ZnVuY3Rpb24gc2JlKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1v''@;'; put 'put ''YmUobi5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBsYmUobix0KXtmb3IodmFyIGU9VGFlKG4pLHI9LTEsaT10Lmxlbmd0aDsrK3I8aTspZS5hZGQodFtyXSl9ZnVuY3Rpb24gY2JlKG4sdCl7Zm9yKHZhciBlPVRhZShuKSxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KWUucmVt''@;'; put 'put ''b3ZlKHRbcl0pfWZ1bmN0aW9uIF9MdChuKXtyZXR1cm4gZnVuY3Rpb24oKXtsYmUodGhpcyxuKX19ZnVuY3Rpb24gYkx0KG4pe3JldHVybiBmdW5jdGlvbigpe2NiZSh0aGlzLG4pfX1mdW5jdGlvbiB3THQobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/''@;'; put 'put ''bGJlOmNiZSkodGhpcyxuKX19ZnVuY3Rpb24gU0x0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBNTHQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1ufX1mdW5jdGlvbiB4THQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19ZnVuY3Rpb24gVEx0KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gQUx0KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPW59fWZ1bmN0aW9uIGtMdChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10Pz8iIn19ZnVuY3Rpb24gSUx0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIExMdCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVm''@;'; put 'put ''b3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFBMdChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PUVhZSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09''@;'; put 'put ''RWFlP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBGTHQobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gdWJlKG4pe3ZhciB0PXFq''@;'; put 'put ''KG4pO3JldHVybih0LmxvY2FsP0ZMdDpQTHQpKHQpfWZ1bmN0aW9uIE5MdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEJMdCgpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHpMdCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMu''@;'; put 'put ''cGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gVUx0KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5j''@;'; put 'put ''dGlvbiAkTHQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKHQpe2Zvcih2YXIgYSxlPTAscj0tMSxpPXQubGVuZ3RoO2U8aTsrK2UpYT10W2VdLG4udHlwZSYmYS50eXBlIT09bi50eXBlfHxhLm5hbWUhPT1uLm5hbWU/dFsrK3JdPWE6dGhpcy5yZW1vdmVFdmVudExp''@;'; put 'put ''c3RlbmVyKGEudHlwZSxhLmxpc3RlbmVyLGEub3B0aW9ucyk7KytyP3QubGVuZ3RoPXI6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEtMdChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGkscj10aGlzLl9fb24sYT1mdW5jdGlvbiBZTHQobil7cmV0dXJuIGZ1bmN0aW9uKHQpe24u''@;'; put 'put ''Y2FsbCh0aGlzLHQsdGhpcy5fX2RhdGFfXyl9fSh0KTtpZihyKWZvcih2YXIgYz0wLG09ci5sZW5ndGg7YzxtOysrYylpZigoaT1yW2NdKS50eXBlPT09bi50eXBlJiZpLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcixpLm9w''@;'; put 'put ''dGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihpLnR5cGUsaS5saXN0ZW5lcj1hLGkub3B0aW9ucz1lKSx2b2lkKGkudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxhLGUpLGk9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YSxvcHRpb25z''@;'; put 'put ''OmV9LHI/ci5wdXNoKGkpOnRoaXMuX19vbj1baV19fWZ1bmN0aW9uIGRiZShuLHQsZSl7dmFyIHI9YWJlKG4pLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKHQsZSk6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxlPyhpLmluaXRFdmVudCh0''@;'; put 'put ''LGUuYnViYmxlcyxlLmNhbmNlbGFibGUpLGkuZGV0YWlsPWUuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksbi5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHFMdChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBkYmUodGhpcyxuLHQpfX1mdW5jdGlvbiBKTHQobix0KXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oKXtyZXR1cm4gZGJlKHRoaXMsbix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXNiZS5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihuKXt0aGlzLl9uYW1lcy5pbmRleE9mKG4pPDAmJih0aGlzLl9uYW1lcy5wdXNoKG4pLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFz''@;'; put 'put ''cyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKG4pO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxj''@;'; put 'put ''b250YWluczpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuKT49MH19O3ZhciBBYWU9W251bGxdO2Z1bmN0aW9uIHFkKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIGhiZSgpe3JldHVybiBuZXcgcWQoW1tkb2N1bWVudC5kb2N1bWVu''@;'; put 'put ''dEVsZW1lbnRdXSxBYWUpfXFkLnByb3RvdHlwZT1oYmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxZCxzZWxlY3Q6ZnVuY3Rpb24gRVJ0KG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj14YWUobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxp''@;'; put 'put ''PTA7aTxlOysraSlmb3IodmFyIEMsUCxhPXRbaV0sYz1hLmxlbmd0aCxtPXJbaV09bmV3IEFycmF5KGMpLFk9MDtZPGM7KytZKShDPWFbWV0pJiYoUD1uLmNhbGwoQyxDLl9fZGF0YV9fLFksYSkpJiYoIl9fZGF0YV9fImluIEMmJihQLl9fZGF0YV9fPUMuX19kYXRhX18pLG1bWV09UCk7cmV0''@;'; put 'put ''dXJuIG5ldyBxZChyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24ga1J0KG4pe249ImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24gQVJ0KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRX2Uobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0obik6ZWJlKG4pO2Zvcih2''@;'; put 'put ''YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8ZTsrK2EpZm9yKHZhciBDLGM9dFthXSxtPWMubGVuZ3RoLFA9MDtQPG07KytQKShDPWNbUF0pJiYoci5wdXNoKG4uY2FsbChDLEMuX19kYXRhX18sUCxjKSksaS5wdXNoKEMpKTtyZXR1cm4gbmV3IHFkKHIsaSl9''@;'; put 'put ''LHNlbGVjdENoaWxkOmZ1bmN0aW9uIExSdChuKXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09bj9SUnQ6ZnVuY3Rpb24gSVJ0KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBEUnQuY2FsbCh0aGlzLmNoaWxkcmVuLG4pfX0oImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpuYmUobikpKX0sc2Vs''@;'; put 'put ''ZWN0Q2hpbGRyZW46ZnVuY3Rpb24gSFJ0KG4pe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT1uP1BSdDpmdW5jdGlvbiBGUnQobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE9SdC5jYWxsKHRoaXMuY2hpbGRyZW4sbil9fSgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOm5iZShuKSkpfSxm''@;'; put 'put ''aWx0ZXI6ZnVuY3Rpb24gTlJ0KG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj10YmUobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIEMsYT10W2ldLGM9YS5sZW5ndGgsbT1yW2ldPVtdLFA9MDtQPGM7KytQ''@;'; put 'put ''KShDPWFbUF0pJiZuLmNhbGwoQyxDLl9fZGF0YV9fLFAsYSkmJm0ucHVzaChDKTtyZXR1cm4gbmV3IHFkKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gV1J0KG4sdCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxVUnQpO3ZhciBlPXQ/elJ0OmpS''@;'; put 'put ''dCxyPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWZ1bmN0aW9uIEJSdChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KG4pKTtmb3IodmFyIGE9aS5sZW5ndGgsYz1uZXcgQXJyYXkoYSksbT1uZXcgQXJyYXkoYSksQz1uZXcgQXJy''@;'; put 'put ''YXkoYSksUD0wO1A8YTsrK1Ape3ZhciBZPXJbUF0sSj1pW1BdLGNlPUoubGVuZ3RoLGZlPVpSdChuLmNhbGwoWSxZJiZZLl9fZGF0YV9fLFAscikpLEFlPWZlLmxlbmd0aCxIZT1tW1BdPW5ldyBBcnJheShBZSksWGU9Y1tQXT1uZXcgQXJyYXkoQWUpO2UoWSxKLEhlLFhlLENbUF09bmV3IEFy''@;'; put 'put ''cmF5KGNlKSxmZSx0KTtmb3IodmFyIEZ0LHBuLGR0PTAsanQ9MDtkdDxBZTsrK2R0KWlmKEZ0PUhlW2R0XSl7Zm9yKGR0Pj1qdCYmKGp0PWR0KzEpOyEocG49WGVbanRdKSYmKytqdDxBZTspO0Z0Ll9uZXh0PXBufHxudWxsfX1yZXR1cm4oYz1uZXcgcWQoYyxyKSkuX2VudGVyPW0sYy5fZXhp''@;'; put 'put ''dD1DLGN9LGVudGVyOmZ1bmN0aW9uIFZSdCgpe3JldHVybiBuZXcgcWQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAocmJlKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBZUnQoKXtyZXR1cm4gbmV3IHFkKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAocmJlKSx0aGlz''@;'; put 'put ''Ll9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBHUnQobix0LGUpe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj8ocj1uKHIpKSYmKHI9ci5zZWxlY3Rpb24oKSk6cj1yLmFwcGVuZChuKyIiKSxudWxsIT10JiYoaT10KGkp''@;'; put 'put ''KSYmKGk9aS5zZWxlY3Rpb24oKSksbnVsbD09ZT9hLnJlbW92ZSgpOmUoYSksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24gJFJ0KG4pe2Zvcih2YXIgdD1uLnNlbGVjdGlvbj9uLnNlbGVjdGlvbigpOm4sZT10aGlzLl9ncm91cHMscj10Ll9ncm91cHMsaT1lLmxl''@;'; put 'put ''bmd0aCxjPU1hdGgubWluKGksci5sZW5ndGgpLG09bmV3IEFycmF5KGkpLEM9MDtDPGM7KytDKWZvcih2YXIgZmUsUD1lW0NdLFk9cltDXSxKPVAubGVuZ3RoLGNlPW1bQ109bmV3IEFycmF5KEopLEFlPTA7QWU8SjsrK0FlKShmZT1QW0FlXXx8WVtBZV0pJiYoY2VbQWVdPWZlKTtmb3IoO0M8''@;'; put 'put ''aTsrK0MpbVtDXT1lW0NdO3JldHVybiBuZXcgcWQobSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIHRPdCgpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbiBLUnQoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9LTEsZT1uLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciBjLHI9''@;'; put 'put ''blt0XSxpPXIubGVuZ3RoLTEsYT1yW2ldOy0taT49MDspKGM9cltpXSkmJihhJiY0XmMuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyxhKSxhPWMpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIFhSdChuKXtmdW5jdGlvbiB0KEosY2Up''@;'; put 'put ''e3JldHVybiBKJiZjZT9uKEouX19kYXRhX18sY2UuX19kYXRhX18pOiFKLSFjZX1ufHwobj1xUnQpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSl7Zm9yKHZhciBQLGM9ZVthXSxtPWMubGVuZ3RoLEM9aVthXT1uZXcgQXJyYXko''@;'; put 'put ''bSksWT0wO1k8bTsrK1kpKFA9Y1tZXSkmJihDW1ldPVApO0Muc29ydCh0KX1yZXR1cm4gbmV3IHFkKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBKUnQoKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1''@;'; put 'put ''bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIFFSdCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIGVMdCgpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0wLGU9bi5sZW5ndGg7dDxlOysrdClmb3IodmFyIHI9blt0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXt2''@;'; put 'put ''YXIgYz1yW2ldO2lmKGMpcmV0dXJuIGN9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gdEx0KCl7bGV0IG49MDtmb3IoY29uc3QgdCBvZiB0aGlzKSsrbjtyZXR1cm4gbn0sZW1wdHk6ZnVuY3Rpb24gbkx0KCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIHJMdChuKXtmb3Io''@;'; put 'put ''dmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpZm9yKHZhciBtLGk9dFtlXSxhPTAsYz1pLmxlbmd0aDthPGM7KythKShtPWlbYV0pJiZuLmNhbGwobSxtLl9fZGF0YV9fLGEsaSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gdUx0KG4sdCl7dmFyIGU9cWoobik7''@;'; put 'put ''aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9lLmxvY2FsP2FMdDppTHQ6ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIHQ/ZS5sb2NhbD9jTHQ6bEx0OmUubG9jYWw/c0x0Om9MdCkoZSx0KSl9LHN0eWxlOmZ1bmN0aW9uIHBMdChuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/ZEx0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P2ZMdDpoTHQpKG4sdCxlPz8iIikpOktT''@;'; put 'put ''KHRoaXMubm9kZSgpLG4pfSxwcm9wZXJ0eTpmdW5jdGlvbiB5THQobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9nTHQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dkx0Om1MdCkobix0KSk6dGhpcy5ub2RlKClbbl19LGNsYXNzZWQ6ZnVuY3Rpb24gQ0x0''@;'; put 'put ''KG4sdCl7dmFyIGU9b2JlKG4rIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPVRhZSh0aGlzLm5vZGUoKSksaT0tMSxhPWUubGVuZ3RoOysraTxhOylpZighci5jb250YWlucyhlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgdD93THQ6dD9fTHQ6Ykx0KShlLHQpKX0sdGV4dDpmdW5jdGlvbiBFTHQobil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PW4/U0x0OigiZnVuY3Rpb24iPT10eXBlb2Ygbj94THQ6TUx0KShuKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVu''@;'; put 'put ''Y3Rpb24gREx0KG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP1RMdDooImZ1bmN0aW9uIj09dHlwZW9mIG4/a0x0OkFMdCkobikpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gUkx0KCl7cmV0dXJuIHRoaXMuZWFjaChJTHQpfSxsb3dl''@;'; put 'put ''cjpmdW5jdGlvbiBPTHQoKXtyZXR1cm4gdGhpcy5lYWNoKExMdCl9LGFwcGVuZDpmdW5jdGlvbiBITHQobil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp1YmUobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBWTHQobix0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnViZShuKSxyPW51bGw9PXQ/Tkx0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eGFlKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmlu''@;'; put 'put ''c2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIGpMdCgpe3JldHVybiB0aGlzLmVhY2goQkx0KX0sY2xvbmU6ZnVuY3Rpb24gV0x0KG4pe3JldHVybiB0aGlzLnNlbGVjdChuP1VMdDp6THQp''@;'; put 'put ''fSxkYXR1bTpmdW5jdGlvbiBaTHQobil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBYTHQobix0LGUpe3ZhciBpLGMscj1mdW5jdGlvbiBHTHQobil7cmV0dXJuIG4udHJpbSgpLnNw''@;'; put 'put ''bGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixyPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYoZT10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHt0eXBlOnQsbmFtZTplfX0pfShuKyIiKSxhPXIubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9y''@;'; put 'put ''KG09dD9LTHQ6JEx0LGk9MDtpPGE7KytpKXRoaXMuZWFjaChtKHJbaV0sdCxlKSk7cmV0dXJuIHRoaXN9dmFyIG09dGhpcy5ub2RlKCkuX19vbjtpZihtKWZvcih2YXIgWSxDPTAsUD1tLmxlbmd0aDtDPFA7KytDKWZvcihpPTAsWT1tW0NdO2k8YTsrK2kpaWYoKGM9cltpXSkudHlwZT09PVku''@;'; put 'put ''dHlwZSYmYy5uYW1lPT09WS5uYW1lKXJldHVybiBZLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiBRTHQobix0KXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9KTHQ6cUx0KShuLHQpKX0sW1N5bWJvbC5pdGVyYXRvcl06ZnVuY3Rpb24qZU90KCl7Zm9yKHZhciBuPXRo''@;'; put 'put ''aXMuX2dyb3Vwcyx0PTAsZT1uLmxlbmd0aDt0PGU7Kyt0KWZvcih2YXIgYyxyPW5bdF0saT0wLGE9ci5sZW5ndGg7aTxhOysraSkoYz1yW2ldKSYmKHlpZWxkIGMpfX07Y29uc3QgS3k9aGJlO2Z1bmN0aW9uIGthZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bmV3IHFkKFtkb2N1bWVu''@;'; put 'put ''dC5xdWVyeVNlbGVjdG9yQWxsKG4pXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHFkKFtRX2UobildLEFhZSl9ZnVuY3Rpb24gTHMobil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP25ldyBxZChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobildXSxbZG9jdW1lbnQuZG9jdW1l''@;'; put 'put ''bnRFbGVtZW50XSk6bmV3IHFkKFtbbl1dLEFhZSl9dmFyIG5PdD17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBmYmUoKXtmb3IodmFyIHIsbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9O248dDsrK24pe2lmKCEocj1hcmd1bWVudHNbbl0rIiIpfHxyIGluIGV8fC9bXHMuXS8udGVzdChyKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIityKTtlW3JdPVtdfXJldHVybiBuZXcgSmooZSl9ZnVuY3Rpb24gSmoobil7dGhpcy5fPW59ZnVuY3Rpb24gaU90KG4sdCl7Zm9yKHZhciBpLGU9MCxyPW4ubGVuZ3RoO2U8cjsrK2UpaWYoKGk9bltlXSkubmFtZT09PXQpcmV0dXJuIGku''@;'; put 'put ''dmFsdWV9ZnVuY3Rpb24gcGJlKG4sdCxlKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTsrK3IpaWYobltyXS5uYW1lPT09dCl7bltyXT1uT3Qsbj1uLnNsaWNlKDAscikuY29uY2F0KG4uc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJm4ucHVzaCh7bmFtZTp0LHZhbHVlOmV9''@;'; put 'put ''KSxufUpqLnByb3RvdHlwZT1mYmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKaixvbjpmdW5jdGlvbihuLHQpe3ZhciBpLGU9dGhpcy5fLHI9ZnVuY3Rpb24gck90KG4sdCl7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihlKXt2YXIgcj0iIixpPWUuaW5kZXhP''@;'; put 'put ''ZigiLiIpO2lmKGk+PTAmJihyPWUuc2xpY2UoaSsxKSxlPWUuc2xpY2UoMCxpKSksZSYmIXQuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7cmV0dXJue3R5cGU6ZSxuYW1lOnJ9fSl9KG4rIiIsZSksYT0tMSxjPXIubGVuZ3RoO2lmKCEoYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KythPGM7KWlmKGk9KG49clthXSkudHlwZSllW2ldPXBiZShlW2ldLG4ubmFtZSx0KTtlbHNlIGlmKG51bGw9PXQpZm9y''@;'; put 'put ''KGkgaW4gZSllW2ldPXBiZShlW2ldLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxjOylpZigoaT0obj1yW2FdKS50eXBlKSYmKGk9aU90KGVbaV0sbi5uYW1lKSkpcmV0dXJuIGl9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgbj17fSx0PXRoaXMuXztmb3IodmFyIGUgaW4gdCluW2Vd''@;'; put 'put ''PXRbZV0uc2xpY2UoKTtyZXR1cm4gbmV3IEpqKG4pfSxjYWxsOmZ1bmN0aW9uKG4sdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgaSxhLGU9bmV3IEFycmF5KGkpLHI9MDtyPGk7KytyKWVbcl09YXJndW1lbnRzW3IrMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShu''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3Iocj0wLGk9KGE9dGhpcy5fW25dKS5sZW5ndGg7cjxpOysrcilhW3JdLnZhbHVlLmFwcGx5KHQsZSl9LGFwcGx5OmZ1bmN0aW9uKG4sdCxlKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigidW5rbm93biB0eXBlOiAiK24pO2Zvcih2YXIgcj10aGlzLl9bbl0saT0wLGE9ci5sZW5ndGg7aTxhOysraSlyW2ldLnZhbHVlLmFwcGx5KHQsZSl9fTtjb25zdCBEYWU9ZmJlO3ZhciBRaixpSSxYUz0wLG5JPTAsckk9MCxlej0wLFh5PTAsdHo9MCxhST0ib2JqZWN0Ij09dHlwZW9mIHBl''@;'; put 'put ''cmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxtYmU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91''@;'; put 'put ''dChuLDE3KX07ZnVuY3Rpb24gSWFlKCl7cmV0dXJuIFh5fHwobWJlKGFPdCksWHk9YUkubm93KCkrdHopfWZ1bmN0aW9uIGFPdCgpe1h5PTB9ZnVuY3Rpb24gbnooKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIHZiZShuLHQsZSl7dmFyIHI9bmV3IG56''@;'; put 'put ''O3JldHVybiByLnJlc3RhcnQobix0LGUpLHJ9ZnVuY3Rpb24geWJlKCl7WHk9KGV6PWFJLm5vdygpKSt0eixYUz1uST0wO3RyeXshZnVuY3Rpb24gb090KCl7SWFlKCksKytYUztmb3IodmFyIHQsbj1RajtuOykodD1YeS1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKHZvaWQgMCx0KSxuPW4u''@;'; put 'put ''X25leHQ7LS1YU30oKX1maW5hbGx5e1hTPTAsZnVuY3Rpb24gbE90KCl7Zm9yKHZhciBuLGUsdD1RaixyPTEvMDt0Oyl0Ll9jYWxsPyhyPnQuX3RpbWUmJihyPXQuX3RpbWUpLG49dCx0PXQuX25leHQpOihlPXQuX25leHQsdC5fbmV4dD1udWxsLHQ9bj9uLl9uZXh0PWU6UWo9ZSk7aUk9bixS''@;'; put 'put ''YWUocil9KCksWHk9MH19ZnVuY3Rpb24gc090KCl7dmFyIG49YUkubm93KCksdD1uLWV6O3Q+MWUzJiYodHotPXQsZXo9bil9ZnVuY3Rpb24gUmFlKG4pe1hTfHwobkkmJihuST1jbGVhclRpbWVvdXQobkkpKSxuLVh5PjI0PyhuPDEvMCYmKG5JPXNldFRpbWVvdXQoeWJlLG4tYUkubm93KCkt''@;'; put 'put ''dHopKSxySSYmKHJJPWNsZWFySW50ZXJ2YWwockkpKSk6KHJJfHwoZXo9YUkubm93KCksckk9c2V0SW50ZXJ2YWwoc090LDFlMykpLFhTPTEsbWJlKHliZSkpKX1mdW5jdGlvbiByeihuLHQsZSl7dmFyIHI9bmV3IG56O3JldHVybiByLnJlc3RhcnQoaT0+e3Iuc3RvcCgpLG4oaSt0KX0sdD1u''@;'; put 'put ''dWxsPT10PzA6K3QsZSkscn1uei5wcm90b3R5cGU9dmJlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bnoscmVzdGFydDpmdW5jdGlvbihuLHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtlPShudWxs''@;'; put 'put ''PT1lP0lhZSgpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmaUkhPT10aGlzJiYoaUk/aUkuX25leHQ9dGhpczpRaj10aGlzLGlJPXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsUmFlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxs''@;'; put 'put ''LHRoaXMuX3RpbWU9MS8wLFJhZSgpKX19O3ZhciBjT3Q9RGFlKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLHVPdD1bXTtmdW5jdGlvbiBveihuLHQsZSxyLGksYSl7dmFyIGM9bi5fX3RyYW5zaXRpb247aWYoYyl7aWYoZSBpbiBjKXJldHVybn1lbHNlIG4uX190cmFuc2l0''@;'; put 'put ''aW9uPXt9OyFmdW5jdGlvbiBkT3Qobix0LGUpe3ZhciBpLHI9bi5fX3RyYW5zaXRpb247ZnVuY3Rpb24gYyhQKXt2YXIgWSxKLGNlLGZlO2lmKDEhPT1lLnN0YXRlKXJldHVybiBDKCk7Zm9yKFkgaW4gcilpZigoZmU9cltZXSkubmFtZT09PWUubmFtZSl7aWYoMz09PWZlLnN0YXRlKXJldHVy''@;'; put 'put ''biByeihjKTs0PT09ZmUuc3RhdGU/KGZlLnN0YXRlPTYsZmUudGltZXIuc3RvcCgpLGZlLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGZlLmluZGV4LGZlLmdyb3VwKSxkZWxldGUgcltZXSk6K1k8dCYmKGZlLnN0YXRlPTYsZmUudGltZXIuc3RvcCgpLGZlLm9uLmNhbGwoImNh''@;'; put 'put ''bmNlbCIsbixuLl9fZGF0YV9fLGZlLmluZGV4LGZlLmdyb3VwKSxkZWxldGUgcltZXSl9aWYocnooZnVuY3Rpb24oKXszPT09ZS5zdGF0ZSYmKGUuc3RhdGU9NCxlLnRpbWVyLnJlc3RhcnQobSxlLmRlbGF5LGUudGltZSksbShQKSl9KSxlLnN0YXRlPTIsZS5vbi5jYWxsKCJzdGFydCIsbixu''@;'; put 'put ''Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksMj09PWUuc3RhdGUpe2ZvcihlLnN0YXRlPTMsaT1uZXcgQXJyYXkoY2U9ZS50d2Vlbi5sZW5ndGgpLFk9MCxKPS0xO1k8Y2U7KytZKShmZT1lLnR3ZWVuW1ldLnZhbHVlLmNhbGwobixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCkpJiYoaVsr''@;'; put 'put ''K0pdPWZlKTtpLmxlbmd0aD1KKzF9fWZ1bmN0aW9uIG0oUCl7Zm9yKHZhciBZPVA8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLFAvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChDKSxlLnN0YXRlPTUsMSksSj0tMSxjZT1pLmxlbmd0aDsrK0o8Y2U7KWlbSl0uY2FsbChuLFkpOzU9''@;'; put 'put ''PT1lLnN0YXRlJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLEMoKSl9ZnVuY3Rpb24gQygpe2Zvcih2YXIgUCBpbiBlLnN0YXRlPTYsZS50aW1lci5zdG9wKCksZGVsZXRlIHJbdF0scilyZXR1cm47ZGVsZXRlIG4uX190cmFuc2l0aW9ufXJbdF09ZSxl''@;'; put 'put ''LnRpbWVyPXZiZShmdW5jdGlvbiBhKFApe2Uuc3RhdGU9MSxlLnRpbWVyLnJlc3RhcnQoYyxlLmRlbGF5LGUudGltZSksZS5kZWxheTw9UCYmYyhQLWUuZGVsYXkpfSwwLGUudGltZSl9KG4sZSx7bmFtZTp0LGluZGV4OnIsZ3JvdXA6aSxvbjpjT3QsdHdlZW46dU90LHRpbWU6YS50aW1lLGRl''@;'; put 'put ''bGF5OmEuZGVsYXksZHVyYXRpb246YS5kdXJhdGlvbixlYXNlOmEuZWFzZSx0aW1lcjpudWxsLHN0YXRlOjB9KX1mdW5jdGlvbiBGYWUobix0KXt2YXIgZT1BcChuLHQpO2lmKGUuc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBl''@;'; put 'put ''fWZ1bmN0aW9uIGxnKG4sdCl7dmFyIGU9QXAobix0KTtpZihlLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIGV9ZnVuY3Rpb24gQXAobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbdF0pKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gZX1mdW5jdGlvbiBzeihuLHQpe3ZhciByLGksYyxlPW4uX190cmFuc2l0aW9uLGE9ITA7aWYoZSl7Zm9yKGMgaW4gdD1udWxsPT10P251bGw6dCsiIixlKShyPWVbY10pLm5hbWU9PT10PyhpPXIuc3RhdGU+MiYmci5zdGF0ZTw1''@;'; put 'put ''LHIuc3RhdGU9NixyLnRpbWVyLnN0b3AoKSxyLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxkZWxldGUgZVtjXSk6YT0hMTthJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGNnKG4sdCl7cmV0dXJuIG49K24sdD0r''@;'; put 'put ''dCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fXZhciBseix3YmU9MTgwL01hdGguUEksSGFlPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIENiZShuLHQsZSxyLGksYSl7dmFyIGMsbSxDO3JldHVy''@;'; put 'put ''bihjPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1jLHQvPWMpLChDPW4qZSt0KnIpJiYoZS09bipDLHItPXQqQyksKG09TWF0aC5zcXJ0KGUqZStyKnIpKSYmKGUvPW0sci89bSxDLz1tKSxuKnI8dCplJiYobj0tbix0PS10LEM9LUMsYz0tYykse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOmEs''@;'; put 'put ''cm90YXRlOk1hdGguYXRhbjIodCxuKSp3YmUsc2tld1g6TWF0aC5hdGFuKEMpKndiZSxzY2FsZVg6YyxzY2FsZVk6bX19ZnVuY3Rpb24gU2JlKG4sdCxlLHIpe2Z1bmN0aW9uIGkoUCl7cmV0dXJuIFAubGVuZ3RoP1AucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihQLFkpe3ZhciBKPVtd''@;'; put 'put ''LGNlPVtdO3JldHVybiBQPW4oUCksWT1uKFkpLGZ1bmN0aW9uIGEoUCxZLEosY2UsZmUsQWUpe2lmKFAhPT1KfHxZIT09Y2Upe3ZhciBIZT1mZS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTtBZS5wdXNoKHtpOkhlLTQseDpjZyhQLEopfSx7aTpIZS0yLHg6Y2coWSxjZSl9KX1l''@;'; put 'put ''bHNlKEp8fGNlKSYmZmUucHVzaCgidHJhbnNsYXRlKCIrSit0K2NlK2UpfShQLnRyYW5zbGF0ZVgsUC50cmFuc2xhdGVZLFkudHJhbnNsYXRlWCxZLnRyYW5zbGF0ZVksSixjZSksZnVuY3Rpb24gYyhQLFksSixjZSl7UCE9PVk/KFAtWT4xODA/WSs9MzYwOlktUD4xODAmJihQKz0zNjApLGNl''@;'; put 'put ''LnB1c2goe2k6Si5wdXNoKGkoSikrInJvdGF0ZSgiLG51bGwsciktMix4OmNnKFAsWSl9KSk6WSYmSi5wdXNoKGkoSikrInJvdGF0ZSgiK1krcil9KFAucm90YXRlLFkucm90YXRlLEosY2UpLGZ1bmN0aW9uIG0oUCxZLEosY2Upe1AhPT1ZP2NlLnB1c2goe2k6Si5wdXNoKGkoSikrInNrZXdY''@;'; put 'put ''KCIsbnVsbCxyKS0yLHg6Y2coUCxZKX0pOlkmJkoucHVzaChpKEopKyJza2V3WCgiK1krcil9KFAuc2tld1gsWS5za2V3WCxKLGNlKSxmdW5jdGlvbiBDKFAsWSxKLGNlLGZlLEFlKXtpZihQIT09Snx8WSE9PWNlKXt2YXIgSGU9ZmUucHVzaChpKGZlKSsic2NhbGUoIixudWxsLCIsIixudWxs''@;'; put 'put ''LCIpIik7QWUucHVzaCh7aTpIZS00LHg6Y2coUCxKKX0se2k6SGUtMix4OmNnKFksY2UpfSl9ZWxzZSgxIT09Snx8MSE9PWNlKSYmZmUucHVzaChpKGZlKSsic2NhbGUoIitKKyIsIitjZSsiKSIpfShQLnNjYWxlWCxQLnNjYWxlWSxZLnNjYWxlWCxZLnNjYWxlWSxKLGNlKSxQPVk9bnVsbCxm''@;'; put 'put ''dW5jdGlvbihmZSl7Zm9yKHZhciBYZSxBZT0tMSxIZT1jZS5sZW5ndGg7KytBZTxIZTspSlsoWGU9Y2VbQWVdKS5pXT1YZS54KGZlKTtyZXR1cm4gSi5qb2luKCIiKX19fXZhciBnT3Q9U2JlKGZ1bmN0aW9uIGZPdChuKXtjb25zdCB0PW5ldygiZnVuY3Rpb24iPT10eXBlb2YgRE9NTWF0cml4''@;'; put 'put ''P0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKG4rIiIpO3JldHVybiB0LmlzSWRlbnRpdHk/SGFlOkNiZSh0LmEsdC5iLHQuYyx0LmQsdC5lLHQuZil9LCJweCwgIiwicHgpIiwiZGVnKSIpLE1iZT1TYmUoZnVuY3Rpb24gcE90KG4pe3JldHVybiBudWxsIT1uJiYobHp8fChsej1kb2N1bWVu''@;'; put 'put ''dC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxsei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksbj1sei50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9DYmUoKG49bi5tYXRyaXgpLmEsbi5iLG4uYyxuLmQsbi5lLG4uZik6SGFl''@;'; put 'put ''fSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIG1PdChuLHQpe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9bGcodGhpcyxuKSxhPWkudHdlZW47aWYoYSE9PWUpZm9yKHZhciBjPTAsbT0ocj1lPWEpLmxlbmd0aDtjPG07KytjKWlmKHJbY10ubmFtZT09PXQpeyhyPXIuc2xpY2UoKSku''@;'; put 'put ''c3BsaWNlKGMsMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiB2T3Qobix0LGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWxnKHRoaXMsbiksYz1hLnR3ZWVuO2lmKGMhPT1yKXtpPShyPWMpLnNsaWNl''@;'; put 'put ''KCk7Zm9yKHZhciBtPXtuYW1lOnQsdmFsdWU6ZX0sQz0wLFA9aS5sZW5ndGg7QzxQOysrQylpZihpW0NdLm5hbWU9PT10KXtpW0NdPW07YnJlYWt9Qz09PVAmJmkucHVzaChtKX1hLnR3ZWVuPWl9fWZ1bmN0aW9uIE5hZShuLHQsZSl7dmFyIHI9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBpPWxnKHRoaXMscik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gQXAoaSxyKS52YWx1ZVt0XX19ZnVuY3Rpb24gVmFlKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3Ry''@;'; put 'put ''dWN0b3I9bn1mdW5jdGlvbiB4YmUobix0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl07cmV0dXJuIGV9ZnVuY3Rpb24gb0koKXt9dmFyIGN6PTEvLjcscVM9IlxccyooWystXT9cXGQrKVxccyoiLGxJPSJcXHMqKFsrLV0/KD86XFxk''@;'; put 'put ''KlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIix1Zz0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLF9PdD0vXiMoWzAtOWEtZl17Myw4fSkkLyxiT3Q9bmV3IFJlZ0V4cChgXnJnYlxcKCR7cVN9LCR7cVN9LCR7cVN9XFwpJGApLHdP''@;'; put 'put ''dD1uZXcgUmVnRXhwKGBecmdiXFwoJHt1Z30sJHt1Z30sJHt1Z31cXCkkYCksQ090PW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtxU30sJHtxU30sJHtxU30sJHtsSX1cXCkkYCksU090PW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHt1Z30sJHt1Z30sJHt1Z30sJHtsSX1cXCkkYCksTU90PW5ldyBSZWdF''@;'; put 'put ''eHAoYF5oc2xcXCgke2xJfSwke3VnfSwke3VnfVxcKSRgKSx4T3Q9bmV3IFJlZ0V4cChgXmhzbGFcXCgke2xJfSwke3VnfSwke3VnfSwke2xJfVxcKSRgKSxFYmU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQs''@;'; put 'put ''YXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJl''@;'; put 'put ''dXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5''@;'; put 'put ''LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkx''@;'; put 'put ''MDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcx''@;'; put 'put ''Njk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3''@;'; put 'put ''NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0''@;'; put 'put ''NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3''@;'; put 'put ''NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVu''@;'; put 'put ''OjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAs''@;'; put 'put ''bWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVk''@;'; put 'put ''aXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2''@;'; put 'put ''ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9p''@;'; put 'put ''c2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6''@;'; put 'put ''NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcs''@;'; put 'put ''c2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0''@;'; put 'put ''bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gVGJlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gQWJlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gcXkobil7dmFyIHQsZTtyZXR1cm4gbj0obisiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9X090LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3Ro''@;'; put 'put ''LHQ9cGFyc2VJbnQodFsxXSwxNiksNj09PWU/a2JlKHQpOjM9PT1lP25ldyBaaCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKDE1JnQpPDw0fDE1JnQsMSk6OD09PWU/dXoodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwoMjU1JnQpLzI1NSk6ND09PWU/dXoodD4+MTImMTV8''@;'; put 'put ''dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgoMTUmdCk8PDR8MTUmdCkvMjU1KTpudWxsKToodD1iT3QuZXhlYyhuKSk/bmV3IFpoKHRbMV0sdFsyXSx0WzNdLDEpOih0PXdPdC5leGVjKG4pKT9uZXcgWmgoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFsz''@;'; put 'put ''XS8xMDAsMSk6KHQ9Q090LmV4ZWMobikpP3V6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PVNPdC5leGVjKG4pKT91eigyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCx0WzRdKToodD1NT3QuZXhlYyhuKSk/UmJlKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9eE90''@;'; put 'put ''LmV4ZWMobikpP1JiZSh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkViZS5oYXNPd25Qcm9wZXJ0eShuKT9rYmUoRWJlW25dKToidHJhbnNwYXJlbnQiPT09bj9uZXcgWmgoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBrYmUobil7cmV0dXJuIG5ldyBaaChuPj4xNiYyNTUsbj4+''@;'; put 'put ''OCYyNTUsMjU1Jm4sMSl9ZnVuY3Rpb24gdXoobix0LGUscil7cmV0dXJuIHI8PTAmJihuPXQ9ZT1OYU4pLG5ldyBaaChuLHQsZSxyKX1mdW5jdGlvbiBkeihuLHQsZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24gQU90KG4pe3JldHVybiBuIGluc3RhbmNlb2Ygb0l8''@;'; put 'put ''fChuPXF5KG4pKSxuP25ldyBaaCgobj1uLnJnYigpKS5yLG4uZyxuLmIsbi5vcGFjaXR5KTpuZXcgWmh9KG4pOm5ldyBaaChuLHQsZSxyPz8xKX1mdW5jdGlvbiBaaChuLHQsZSxyKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gRGJlKCl7''@;'; put 'put ''cmV0dXJuYCMke1F5KHRoaXMucil9JHtReSh0aGlzLmcpfSR7UXkodGhpcy5iKX1gfWZ1bmN0aW9uIEliZSgpe2NvbnN0IG49aHoodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09bj8icmdiKCI6InJnYmEoIn0ke0p5KHRoaXMucil9LCAke0p5KHRoaXMuZyl9LCAke0p5KHRoaXMuYil9JHsx''@;'; put 'put ''PT09bj8iKSI6YCwgJHtufSlgfWB9ZnVuY3Rpb24gaHoobil7cmV0dXJuIGlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKX1mdW5jdGlvbiBKeShuKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpfWZ1bmN0aW9uIFF5KG4pe3JldHVy''@;'; put 'put ''bigobj1KeShuKSk8MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSYmUobix0LGUscil7cmV0dXJuIHI8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBrcChuLHQsZSxyKX1mdW5jdGlvbiBMYmUobil7aWYobiBpbnN0YW5jZW9mIGtw''@;'; put 'put ''KXJldHVybiBuZXcga3Aobi5oLG4ucyxuLmwsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2Ygb0l8fChuPXF5KG4pKSwhbilyZXR1cm4gbmV3IGtwO2lmKG4gaW5zdGFuY2VvZiBrcClyZXR1cm4gbjt2YXIgdD0obj1uLnJnYigpKS5yLzI1NSxlPW4uZy8yNTUscj1uLmIvMjU1LGk9TWF0aC5t''@;'; put 'put ''aW4odCxlLHIpLGE9TWF0aC5tYXgodCxlLHIpLGM9TmFOLG09YS1pLEM9KGEraSkvMjtyZXR1cm4gbT8oYz10PT09YT8oZS1yKS9tKzYqKGU8cik6ZT09PWE/KHItdCkvbSsyOih0LWUpL20rNCxtLz1DPC41P2EraToyLWEtaSxjKj02MCk6bT1DPjAmJkM8MT8wOmMsbmV3IGtwKGMsbSxDLG4u''@;'; put 'put ''b3BhY2l0eSl9ZnVuY3Rpb24ga3Aobix0LGUscil7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIE9iZShuKXtyZXR1cm4obj0obnx8MCklMzYwKTwwP24rMzYwOm59ZnVuY3Rpb24gZnoobil7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4o''@;'; put 'put ''MSxufHwwKSl9ZnVuY3Rpb24gQmFlKG4sdCxlKXtyZXR1cm4gMjU1KihuPDYwP3QrKGUtdCkqbi82MDpuPDE4MD9lOm48MjQwP3QrKGUtdCkqKDI0MC1uKS82MDp0KX1mdW5jdGlvbiBQYmUobix0LGUscixpKXt2YXIgYT1uKm4sYz1hKm47cmV0dXJuKCgxLTMqbiszKmEtYykqdCsoNC02KmEr''@;'; put 'put ''MypjKSplKygxKzMqbiszKmEtMypjKSpyK2MqaSkvNn1WYWUob0kscXkse2NvcHkobil7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxuKX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6VGJlLGZvcm1hdEhl''@;'; put 'put ''eDpUYmUsZm9ybWF0SGV4ODpmdW5jdGlvbiBFT3QoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9LGZvcm1hdEhzbDpmdW5jdGlvbiBUT3QoKXtyZXR1cm4gTGJlKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6QWJlLHRvU3RyaW5nOkFiZX0pLFZhZShaaCxkeix4YmUob0ks''@;'; put 'put ''e2JyaWdodGVyKG4pe3JldHVybiBuPW51bGw9PW4/Y3o6TWF0aC5wb3coY3osbiksbmV3IFpoKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBaaCh0aGlzLnIqbix0aGlzLmcq''@;'; put 'put ''bix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IFpoKEp5KHRoaXMuciksSnkodGhpcy5nKSxKeSh0aGlzLmIpLGh6KHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUm''@;'; put 'put ''Ji0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6RGJlLGZvcm1hdEhleDpEYmUsZm9ybWF0SGV4ODpmdW5jdGlvbiBrT3QoKXtyZXR1cm5gIyR7UXkodGhpcy5yKX0ke1F5KHRo''@;'; put 'put ''aXMuZyl9JHtReSh0aGlzLmIpfSR7UXkoMjU1Kihpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSl9YH0sZm9ybWF0UmdiOkliZSx0b1N0cmluZzpJYmV9KSksVmFlKGtwLGZ1bmN0aW9uIERPdChuLHQsZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TGJlKG4pOm5l''@;'; put 'put ''dyBrcChuLHQsZSxyPz8xKX0seGJlKG9JLHticmlnaHRlcihuKXtyZXR1cm4gbj1udWxsPT1uP2N6Ok1hdGgucG93KGN6LG4pLG5ldyBrcCh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5l''@;'; put 'put ''dyBrcCh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBuPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxyPWUrKGU8LjU/ZToxLWUpKnQsaT0yKmUtcjtyZXR1cm4gbmV3IFpo''@;'; put 'put ''KEJhZShuPj0yNDA/bi0yNDA6bisxMjAsaSxyKSxCYWUobixpLHIpLEJhZShuPDEyMD9uKzI0MDpuLTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGNsYW1wKCl7cmV0dXJuIG5ldyBrcChPYmUodGhpcy5oKSxmeih0aGlzLnMpLGZ6KHRoaXMubCksaHoodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlh''@;'; put 'put ''YmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtjb25zdCBuPWh6KHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PW4/ImhzbCgi''@;'; put 'put ''OiJoc2xhKCJ9JHtPYmUodGhpcy5oKX0sICR7MTAwKmZ6KHRoaXMucyl9JSwgJHsxMDAqZnoodGhpcy5sKX0lJHsxPT09bj8iKSI6YCwgJHtufSlgfWB9fSkpO2NvbnN0IGphZT1uPT4oKT0+bjtmdW5jdGlvbiBIYmUobix0KXt2YXIgZT10LW47cmV0dXJuIGU/ZnVuY3Rpb24gRmJlKG4sdCl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuK2UqdH19KG4sZSk6amFlKGlzTmFOKG4pP3Q6bil9Y29uc3QgcHo9ZnVuY3Rpb24gbih0KXt2YXIgZT1mdW5jdGlvbiBQT3Qobil7cmV0dXJuIDE9PShuPStuKT9IYmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10P2Z1bmN0aW9uIE9PdChuLHQs''@;'; put 'put ''ZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3cobityKnQsZSl9fSh0LGUsbik6amFlKGlzTmFOKHQpP2U6dCl9fSh0KTtmdW5jdGlvbiByKGksYSl7dmFyIGM9ZSgoaT1keihpKSkuciwoYT1keihhKSku''@;'; put 'put ''ciksbT1lKGkuZyxhLmcpLEM9ZShpLmIsYS5iKSxQPUhiZShpLm9wYWNpdHksYS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oWSl7cmV0dXJuIGkucj1jKFkpLGkuZz1tKFkpLGkuYj1DKFkpLGkub3BhY2l0eT1QKFkpLGkrIiJ9fXJldHVybiByLmdhbW1hPW4scn0oMSk7ZnVuY3Rpb24gTmJl''@;'; put 'put ''KG4pe3JldHVybiBmdW5jdGlvbih0KXt2YXIgYyxtLGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSksYT1uZXcgQXJyYXkoZSk7Zm9yKGM9MDtjPGU7KytjKW09ZHoodFtjXSkscltjXT1tLnJ8fDAsaVtjXT1tLmd8fDAsYVtjXT1tLmJ8fDA7cmV0dXJuIHI9bihyKSxp''@;'; put 'put ''PW4oaSksYT1uKGEpLG0ub3BhY2l0eT0xLGZ1bmN0aW9uKEMpe3JldHVybiBtLnI9cihDKSxtLmc9aShDKSxtLmI9YShDKSxtKyIifX19TmJlKGZ1bmN0aW9uIElPdChuKXt2YXIgdD1uLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lPD0wP2U9MDplPj0xPyhlPTEsdC0xKTpN''@;'; put 'put ''YXRoLmZsb29yKGUqdCksaT1uW3JdLGE9bltyKzFdO3JldHVybiBQYmUoKGUtci90KSp0LHI+MD9uW3ItMV06MippLWEsaSxhLHI8dC0xP25bcisyXToyKmEtaSl9fSksTmJlKGZ1bmN0aW9uIFJPdChuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9TWF0aC5mbG9v''@;'; put 'put ''cigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBQYmUoKGUtci90KSp0LG5bKHIrdC0xKSV0XSxuW3IldF0sblsocisxKSV0XSxuWyhyKzIpJXRdKX19KTt2YXIgemFlPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxVYWU9bmV3IFJlZ0V4cCh6YWUuc291''@;'; put 'put ''cmNlLCJnIik7ZnVuY3Rpb24gVmJlKG4sdCl7dmFyIHIsaSxhLGU9emFlLmxhc3RJbmRleD1VYWUubGFzdEluZGV4PTAsYz0tMSxtPVtdLEM9W107Zm9yKG4rPSIiLHQrPSIiOyhyPXphZS5leGVjKG4pKSYmKGk9VWFlLmV4ZWModCkpOykoYT1pLmluZGV4KT5lJiYoYT10LnNsaWNlKGUsYSks''@;'; put 'put ''bVtjXT9tW2NdKz1hOm1bKytjXT1hKSwocj1yWzBdKT09PShpPWlbMF0pP21bY10/bVtjXSs9aTptWysrY109aToobVsrK2NdPW51bGwsQy5wdXNoKHtpOmMseDpjZyhyLGkpfSkpLGU9VWFlLmxhc3RJbmRleDtyZXR1cm4gZTx0Lmxlbmd0aCYmKGE9dC5zbGljZShlKSxtW2NdP21bY10rPWE6''@;'; put 'put ''bVsrK2NdPWEpLG0ubGVuZ3RoPDI/Q1swXT9mdW5jdGlvbiBIT3Qobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpKyIifX0oQ1swXS54KTpmdW5jdGlvbiBGT3Qobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1DLmxlbmd0aCxmdW5jdGlvbihQKXtmb3IodmFy''@;'; put 'put ''IEosWT0wO1k8dDsrK1kpbVsoSj1DW1ldKS5pXT1KLngoUCk7cmV0dXJuIG0uam9pbigiIil9KX1mdW5jdGlvbiBCYmUobix0KXt2YXIgZTtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiB0P2NnOnQgaW5zdGFuY2VvZiBxeT9wejooZT1xeSh0KSk/KHQ9ZSxweik6VmJlKShuLHQpfWZ1bmN0aW9u''@;'; put 'put ''IE5PdChuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gVk90KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQk90KG4sdCxlKXt2YXIgcixhLGk9ZSsiIjtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldEF0dHJpYnV0ZShuKTtyZXR1cm4gYz09PWk/bnVsbDpjPT09cj9hOmE9dChyPWMsZSl9fWZ1bmN0aW9uIGpPdChuLHQsZSl7dmFyIHIsYSxpPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNl''@;'; put 'put ''LG4ubG9jYWwpO3JldHVybiBjPT09aT9udWxsOmM9PT1yP2E6YT10KHI9YyxlKX19ZnVuY3Rpb24gek90KG4sdCxlKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGMsQyxtPWUodGhpcyk7cmV0dXJuIG51bGw9PW0/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTooYz10aGlz''@;'; put 'put ''LmdldEF0dHJpYnV0ZShuKSk9PT0oQz1tKyIiKT9udWxsOmM9PT1yJiZDPT09aT9hOihpPUMsYT10KHI9YyxtKSl9fWZ1bmN0aW9uIFVPdChuLHQsZSl7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBjLEMsbT1lKHRoaXMpO3JldHVybiBudWxsPT1tP3ZvaWQgdGhpcy5yZW1vdmVB''@;'; put 'put ''dHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOihjPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk9PT0oQz1tKyIiKT9udWxsOmM9PT1yJiZDPT09aT9hOihpPUMsYT10KHI9YyxtKSl9fWZ1bmN0aW9uIEdPdChuLHQpe3ZhciBlLHI7ZnVuY3Rpb24gaSgpe3ZhciBhPXQu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09ciYmKGU9KHI9YSkmJmZ1bmN0aW9uIFlPdChuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0LmNhbGwodGhpcyxlKSl9fShuLGEpKSxlfXJldHVybiBpLl92YWx1ZT10LGl9''@;'; put 'put ''ZnVuY3Rpb24gJE90KG4sdCl7dmFyIGUscjtmdW5jdGlvbiBpKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1yJiYoZT0ocj1hKSYmZnVuY3Rpb24gWk90KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKG4sdC5jYWxsKHRoaXMsZSkp''@;'; put 'put ''fX0obixhKSksZX1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIFhPdChuLHQpe3JldHVybiBmdW5jdGlvbigpe0ZhZSh0aGlzLG4pLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gcU90KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtGYWUodGhpcyxuKS5k''@;'; put 'put ''ZWxheT10fX1mdW5jdGlvbiBRT3Qobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtsZyh0aGlzLG4pLmR1cmF0aW9uPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZVB0KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtsZyh0aGlzLG4pLmR1cmF0aW9uPXR9fXZhciBnUHQ9S3ku''@;'; put 'put ''cHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGpiZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX12YXIgTFB0PTA7ZnVuY3Rpb24gZGcobix0LGUscil7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlz''@;'; put 'put ''Ll9pZD1yfWZ1bmN0aW9uIFdhZShuKXtyZXR1cm4gS3koKS50cmFuc2l0aW9uKG4pfWZ1bmN0aW9uIHpiZSgpe3JldHVybisrTFB0fXZhciAkNT1LeS5wcm90b3R5cGU7ZGcucHJvdG90eXBlPVdhZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRnLHNlbGVjdDpmdW5jdGlvbiBmUHQobil7dmFy''@;'; put 'put ''IHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj14YWUobikpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxjPTA7YzxpOysrYylmb3IodmFyIFksSixtPXJbY10sQz1tLmxlbmd0aCxQPWFbY109bmV3IEFycmF5''@;'; put 'put ''KEMpLGNlPTA7Y2U8QzsrK2NlKShZPW1bY2VdKSYmKEo9bi5jYWxsKFksWS5fX2RhdGFfXyxjZSxtKSkmJigiX19kYXRhX18iaW4gWSYmKEouX19kYXRhX189WS5fX2RhdGFfXyksUFtjZV09SixveihQW2NlXSx0LGUsY2UsUCxBcChZLGUpKSk7cmV0dXJuIG5ldyBkZyhhLHRoaXMuX3BhcmVu''@;'; put 'put ''dHMsdCxlKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHBQdChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWViZShuKSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLGE9W10sYz1bXSxtPTA7bTxpOysrbSlmb3IodmFyIFksQz1y''@;'; put 'put ''W21dLFA9Qy5sZW5ndGgsSj0wO0o8UDsrK0opaWYoWT1DW0pdKXtmb3IodmFyIGZlLGNlPW4uY2FsbChZLFkuX19kYXRhX18sSixDKSxBZT1BcChZLGUpLEhlPTAsWGU9Y2UubGVuZ3RoO0hlPFhlOysrSGUpKGZlPWNlW0hlXSkmJm96KGZlLHQsZSxIZSxjZSxBZSk7YS5wdXNoKGNlKSxjLnB1''@;'; put 'put ''c2goWSl9cmV0dXJuIG5ldyBkZyhhLGMsdCxlKX0sc2VsZWN0Q2hpbGQ6JDUuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46JDUuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIG9QdChuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49dGJlKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3Jv''@;'; put 'put ''dXBzLGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBDLGE9dFtpXSxjPWEubGVuZ3RoLG09cltpXT1bXSxQPTA7UDxjOysrUCkoQz1hW1BdKSYmbi5jYWxsKEMsQy5fX2RhdGFfXyxQLGEpJiZtLnB1c2goQyk7cmV0dXJuIG5ldyBkZyhyLHRoaXMuX3BhcmVu''@;'; put 'put ''dHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIHNQdChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLHI9dC5sZW5ndGgsYT1NYXRoLm1pbihyLGUubGVuZ3RoKSxjPW5ldyBBcnJheShy''@;'; put 'put ''KSxtPTA7bTxhOysrbSlmb3IodmFyIGNlLEM9dFttXSxQPWVbbV0sWT1DLmxlbmd0aCxKPWNbbV09bmV3IEFycmF5KFkpLGZlPTA7ZmU8WTsrK2ZlKShjZT1DW2ZlXXx8UFtmZV0pJiYoSltmZV09Y2UpO2Zvcig7bTxyOysrbSljW21dPXRbbV07cmV0dXJuIG5ldyBkZyhjLHRoaXMuX3BhcmVu''@;'; put 'put ''dHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBtUHQoKXtyZXR1cm4gbmV3IGdQdCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gSVB0KCl7Zm9yKHZhciBuPXRoaXMuX25hbWUsdD10aGlzLl9pZCxlPXpiZSgpLHI9dGhp''@;'; put 'put ''cy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBDLGM9clthXSxtPWMubGVuZ3RoLFA9MDtQPG07KytQKWlmKEM9Y1tQXSl7dmFyIFk9QXAoQyx0KTtveihDLG4sZSxQLGMse3RpbWU6WS50aW1lK1kuZGVsYXkrWS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOlkuZHVy''@;'; put 'put ''YXRpb24sZWFzZTpZLmVhc2V9KX1yZXR1cm4gbmV3IGRnKHIsdGhpcy5fcGFyZW50cyxuLGUpfSxjYWxsOiQ1LmNhbGwsbm9kZXM6JDUubm9kZXMsbm9kZTokNS5ub2RlLHNpemU6JDUuc2l6ZSxlbXB0eTokNS5lbXB0eSxlYWNoOiQ1LmVhY2gsb246ZnVuY3Rpb24gdVB0KG4sdCl7dmFyIGU9''@;'; put 'put ''dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9BcCh0aGlzLm5vZGUoKSxlKS5vbi5vbihuKTp0aGlzLmVhY2goZnVuY3Rpb24gY1B0KG4sdCxlKXt2YXIgcixpLGE9ZnVuY3Rpb24gbFB0KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rp''@;'; put 'put ''b24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KHQpP0ZhZTpsZztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMsbiksbT1jLm9uO20hPT1yJiYoaT0ocj1tKS5jb3B5KCkpLm9uKHQsZSksYy5vbj1p''@;'; put 'put ''fX0oZSxuLHQpKX0sYXR0cjpmdW5jdGlvbiBXT3Qobix0KXt2YXIgZT1xaihuKSxyPSJ0cmFuc2Zvcm0iPT09ZT9NYmU6QmJlO3JldHVybiB0aGlzLmF0dHJUd2VlbihuLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlLmxvY2FsP1VPdDp6T3QpKGUscixOYWUodGhpcywiYXR0ci4iK24sdCkpOm51''@;'; put 'put ''bGw9PXQ/KGUubG9jYWw/Vk90Ok5PdCkoZSk6KGUubG9jYWw/ak90OkJPdCkoZSxyLHQpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIEtPdChuLHQpe3ZhciBlPSJhdHRyLiIrbjtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQp''@;'; put 'put ''cmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9cWoobik7cmV0dXJuIHRoaXMudHdlZW4oZSwoci5sb2NhbD9HT3Q6JE90KShyLHQpKX0sc3R5bGU6ZnVuY3Rpb24gd1B0KG4sdCxlKXt2YXIgcj0idHJhbnNmb3Jt''@;'; put 'put ''Ij09KG4rPSIiKT9nT3Q6QmJlO3JldHVybiBudWxsPT10P3RoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uIHZQdChuLHQpe3ZhciBlLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1LUyh0aGlzLG4pLGM9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobiksS1ModGhpcyxuKSk7cmV0dXJu''@;'; put 'put ''IGE9PT1jP251bGw6YT09PWUmJmM9PT1yP2k6aT10KGU9YSxyPWMpfX0obixyKSkub24oImVuZC5zdHlsZS4iK24samJlKG4pKToiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbiBfUHQobix0LGUpe3ZhciByLGksYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Yz1LUyh0aGlzLG4pLG09ZSh0aGlzKSxDPW0rIiI7cmV0dXJuIG51bGw9PW0mJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLEM9bT1LUyh0aGlzLG4pKSxjPT09Qz9udWxsOmM9PT1yJiZDPT09aT9hOihpPUMsYT10KHI9YyxtKSl9fShuLHIsTmFlKHRoaXMsInN0eWxlLiIrbix0KSkp''@;'; put 'put ''LmVhY2goZnVuY3Rpb24gYlB0KG4sdCl7dmFyIGUscixpLG0sYT0ic3R5bGUuIit0LGM9ImVuZC4iK2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEM9bGcodGhpcyxuKSxQPUMub24sWT1udWxsPT1DLnZhbHVlW2FdP218fChtPWpiZSh0KSk6dm9pZCAwOyhQIT09ZXx8aSE9PVkpJiYocj0oZT1Q''@;'; put 'put ''KS5jb3B5KCkpLm9uKGMsaT1ZKSxDLm9uPXJ9fSh0aGlzLl9pZCxuKSk6dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24geVB0KG4sdCxlKXt2YXIgcixhLGk9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1LUyh0aGlzLG4pO3JldHVybiBjPT09aT9udWxsOmM9PT1yP2E6YT10KHI9Yyxl''@;'; put 'put ''KX19KG4scix0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiBNUHQobix0LGUpe3ZhciByPSJzdHlsZS4iKyhuKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT10KXJldHVy''@;'; put 'put ''biB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsZnVuY3Rpb24gU1B0KG4sdCxlKXt2YXIgcixpO2Z1bmN0aW9uIGEoKXt2YXIgYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYyE9PWkm''@;'; put 'put ''JihyPShpPWMpJiZmdW5jdGlvbiBDUHQobix0LGUpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdC5jYWxsKHRoaXMsciksZSl9fShuLGMsZSkpLHJ9cmV0dXJuIGEuX3ZhbHVlPXQsYX0obix0LGU/PyIiKSl9LHRleHQ6ZnVuY3Rpb24gVFB0KG4pe3JldHVy''@;'; put 'put ''biB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbiBFUHQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX0oTmFlKHRoaXMsInRleHQiLG4pKTpmdW5jdGlvbiB4UHQobil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy50ZXh0Q29udGVudD1ufX0obnVsbD09bj8iIjpuKyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbiBEUHQobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2Vl''@;'; put 'put ''bih0LG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LGZ1bmN0aW9uIGtQdChuKXt2YXIgdCxlO2Z1bmN0aW9uIHIoKXt2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PWUmJih0PShlPWkpJiZmdW5j''@;'; put 'put ''dGlvbiBBUHQobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fShpKSksdH1yZXR1cm4gci5fdmFsdWU9bixyfShuKSl9LHJlbW92ZTpmdW5jdGlvbiBoUHQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24gZFB0KG4pe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT1uKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24geU90KG4sdCl7dmFyIGU9dGhpcy5faWQ7aWYo''@;'; put 'put ''bis9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGMscj1BcCh0aGlzLm5vZGUoKSxlKS50d2VlbixpPTAsYT1yLmxlbmd0aDtpPGE7KytpKWlmKChjPXJbaV0pLm5hbWU9PT1uKXJldHVybiBjLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PXQ/bU90OnZP''@;'; put 'put ''dCkoZSxuLHQpKX0sZGVsYXk6ZnVuY3Rpb24gSk90KG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/WE90OnFPdCkodCxuKSk6QXAodGhpcy5ub2RlKCksdCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIHRQ''@;'; put 'put ''dChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP1FPdDplUHQpKHQsbikpOkFwKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uIHJQdChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24gblB0KG4sdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe2xnKHRoaXMsbikuZWFzZT10fX0odCxuKSk6QXAodGhpcy5ub2RlKCksdCkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVu''@;'; put 'put ''Y3Rpb24gYVB0KG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIGlQdChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcjtsZyh0aGlzLG4pLmVhc2U9ZX19KHRoaXMuX2lkLG4pKX0sZW5kOmZ1bmN0aW9uIFJQdCgpe3ZhciBuLHQsZT10aGlzLHI9ZS5faWQsaT1lLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYSxjKXt2YXIgbT17dmFsdWU6Y30sQz17dmFsdWU6ZnVuY3Rpb24o''@;'; put 'put ''KXswPT0tLWkmJmEoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBQPWxnKHRoaXMsciksWT1QLm9uO1khPT1uJiYoKHQ9KG49WSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKG0pLHQuXy5pbnRlcnJ1cHQucHVzaChtKSx0Ll8uZW5kLnB1c2goQykpLFAub249dH0pLDA9PT1pJiZhKCl9KX0sW1N5''@;'; put 'put ''bWJvbC5pdGVyYXRvcl06JDVbU3ltYm9sLml0ZXJhdG9yXX07dmFyIFBQdD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24gT1B0KG4pe3JldHVybigobio9Mik8PTE/bipuKm46KG4tPTIpKm4qbisyKS8yfX07ZnVuY3Rpb24gRlB0KG4sdCl7Zm9yKHZhciBl''@;'; put 'put ''OyEoZT1uLl9fdHJhbnNpdGlvbil8fCEoZT1lW3RdKTspaWYoIShuPW4ucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7dH0gbm90IGZvdW5kYCk7cmV0dXJuIGV9S3kucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbiBoT3Qobil7cmV0dXJuIHRoaXMuZWFjaChm''@;'; put 'put ''dW5jdGlvbigpe3N6KHRoaXMsbil9KX0sS3kucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24gSFB0KG4pe3ZhciB0LGU7biBpbnN0YW5jZW9mIGRnPyh0PW4uX2lkLG49bi5fbmFtZSk6KHQ9emJlKCksKGU9UFB0KS50aW1lPUlhZSgpLG49bnVsbD09bj9udWxsOm4rIiIpO2Zvcih2YXIg''@;'; put 'put ''cj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIEMsYz1yW2FdLG09Yy5sZW5ndGgsUD0wO1A8bTsrK1ApKEM9Y1tQXSkmJm96KEMsbix0LFAsYyxlfHxGUHQoQyx0KSk7cmV0dXJuIG5ldyBkZyhyLHRoaXMuX3BhcmVudHMsbix0KX07dmFyIE5QdD1bbnVsbF07''@;'; put 'put ''Y29uc3QgWmFlPXtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9O2Z1bmN0aW9uIFlhZShuKXtuLnByZXZlbnREZWZhdWx0KCksbi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBVYmUobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKSsxL24pLzJ9Y29uc3QgWlB0PWZ1bmN0aW9uIG4o''@;'; put 'put ''dCxlLHIpe2Z1bmN0aW9uIGkoYSxjKXt2YXIgWGUscnQsbT1hWzBdLEM9YVsxXSxQPWFbMl0sY2U9Y1syXSxmZT1jWzBdLW0sQWU9Y1sxXS1DLEhlPWZlKmZlK0FlKkFlO2lmKEhlPDFlLTEyKXJ0PU1hdGgubG9nKGNlL1ApL3QsWGU9ZnVuY3Rpb24oZ24pe3JldHVyblttK2duKmZlLEMrZ24q''@;'; put 'put ''QWUsUCpNYXRoLmV4cCh0KmduKnJ0KV19O2Vsc2V7dmFyIGR0PU1hdGguc3FydChIZSksanQ9KGNlKmNlLVAqUCtyKkhlKS8oMipQKmUqZHQpLEZ0PShjZSpjZS1QKlAtcipIZSkvKDIqY2UqZSpkdCkscG49TWF0aC5sb2coTWF0aC5zcXJ0KGp0Kmp0KzEpLWp0KSxvbj1NYXRoLmxvZyhNYXRo''@;'; put 'put ''LnNxcnQoRnQqRnQrMSktRnQpO3J0PShvbi1wbikvdCxYZT1mdW5jdGlvbihnbil7dmFyIFpuPWduKnJ0LEdyPVViZShwbiksRXI9UC8oZSpkdCkqKEdyKmZ1bmN0aW9uIFdQdChuKXtyZXR1cm4oKG49TWF0aC5leHAoMipuKSktMSkvKG4rMSl9KHQqWm4rcG4pLWZ1bmN0aW9uIFVQdChuKXty''@;'; put 'put ''ZXR1cm4oKG49TWF0aC5leHAobikpLTEvbikvMn0ocG4pKTtyZXR1cm5bbStFcipmZSxDK0VyKkFlLFAqR3IvVWJlKHQqWm4rcG4pXX19cmV0dXJuIFhlLmR1cmF0aW9uPTFlMypydCp0L01hdGguU1FSVDIsWGV9cmV0dXJuIGkucmhvPWZ1bmN0aW9uKGEpe3ZhciBjPU1hdGgubWF4KC4wMDEs''@;'; put 'put ''K2EpLG09YypjO3JldHVybiBuKGMsbSxtKm0pfSxpfShNYXRoLlNRUlQyLDIsNCk7ZnVuY3Rpb24gZV8obix0KXtpZihuPWZ1bmN0aW9uIFlQdChuKXtsZXQgdDtmb3IoO3Q9bi5zb3VyY2VFdmVudDspbj10O3JldHVybiBufShuKSx2b2lkIDA9PT10JiYodD1uLmN1cnJlbnRUYXJnZXQpLHQp''@;'; put 'put ''e3ZhciBlPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKGUuY3JlYXRlU1ZHUG9pbnQpe3ZhciByPWUuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PW4uY2xpZW50WCxyLnk9bi5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55''@;'; put 'put ''XX1pZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bbi5jbGllbnRYLWkubGVmdC10LmNsaWVudExlZnQsbi5jbGllbnRZLWkudG9wLXQuY2xpZW50VG9wXX19cmV0dXJuW24ucGFnZVgsbi5wYWdlWV19Y29uc3QgZ3o9bj0+''@;'; put 'put ''KCk9Pm47ZnVuY3Rpb24gR1B0KG4se3NvdXJjZUV2ZW50OnQsdGFyZ2V0OmUsdHJhbnNmb3JtOnIsZGlzcGF0Y2g6aX0pe09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3R5cGU6e3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNvdXJjZUV2ZW50Ont2YWx1ZTp0''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0YXJnZXQ6e3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRyYW5zZm9ybTp7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sXzp7dmFsdWU6aX19KX1mdW5jdGlvbiBLNShuLHQsZSl7dGhp''@;'; put 'put ''cy5rPW4sdGhpcy54PXQsdGhpcy55PWV9SzUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpLNSxzY2FsZTpmdW5jdGlvbihuKXtyZXR1cm4gMT09PW4/dGhpczpuZXcgSzUodGhpcy5rKm4sdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihuLHQpe3JldHVybiAwPT09biYwPT09dD90''@;'; put 'put ''aGlzOm5ldyBLNSh0aGlzLmssdGhpcy54K3RoaXMuaypuLHRoaXMueSt0aGlzLmsqdCl9LGFwcGx5OmZ1bmN0aW9uKG4pe3JldHVybltuWzBdKnRoaXMuayt0aGlzLngsblsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnh9LGFwcGx5''@;'; put 'put ''WTpmdW5jdGlvbihuKXtyZXR1cm4gbip0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24obil7cmV0dXJuWyhuWzBdLXRoaXMueCkvdGhpcy5rLChuWzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbihuKXtyZXR1cm4obi10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5j''@;'; put 'put ''dGlvbihuKXtyZXR1cm4obi10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24obil7cmV0dXJuIG4uY29weSgpLmRvbWFpbihuLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAobi5pbnZlcnQsbikpfSxyZXNjYWxlWTpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCku''@;'; put 'put ''ZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBtej1uZXcgSzUoMSwwLDApO2Z1bmN0''@;'; put 'put ''aW9uIHZ6KG4pe2Zvcig7IW4uX196b29tOylpZighKG49bi5wYXJlbnROb2RlKSlyZXR1cm4gbXo7cmV0dXJuIG4uX196b29tfWZ1bmN0aW9uIEdhZShuKXtuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGNJKG4pe24ucHJldmVudERlZmF1bHQoKSxuLnN0b3BJbW1lZGlh''@;'; put 'put ''dGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uICRQdChuKXtyZXR1cm4hKG4uY3RybEtleSYmIndoZWVsIiE9PW4udHlwZXx8bi5idXR0b24pfWZ1bmN0aW9uIEtQdCgpe3ZhciBuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhuPW4ub3duZXJTVkdFbGVtZW50fHxuKS5oYXNB''@;'; put 'put ''dHRyaWJ1dGUoInZpZXdCb3giKT9bWyhuPW4udmlld0JveC5iYXNlVmFsKS54LG4ueV0sW24ueCtuLndpZHRoLG4ueStuLmhlaWdodF1dOltbMCwwXSxbbi53aWR0aC5iYXNlVmFsLnZhbHVlLG4uaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW24uY2xpZW50V2lkdGgsbi5jbGllbnRI''@;'; put 'put ''ZWlnaHRdXX1mdW5jdGlvbiBXYmUoKXtyZXR1cm4gdGhpcy5fX3pvb218fG16fWZ1bmN0aW9uIFhQdChuKXtyZXR1cm4tbi5kZWx0YVkqKDE9PT1uLmRlbHRhTW9kZT8uMDU6bi5kZWx0YU1vZGU/MTouMDAyKSoobi5jdHJsS2V5PzEwOjEpfWZ1bmN0aW9uIHFQdCgpe3JldHVybiBuYXZpZ2F0''@;'; put 'put ''b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBKUHQobix0LGUpe3ZhciByPW4uaW52ZXJ0WCh0WzBdWzBdKS1lWzBdWzBdLGk9bi5pbnZlcnRYKHRbMV1bMF0pLWVbMV1bMF0sYT1uLmludmVydFkodFswXVsxXSktZVswXVsxXSxjPW4uaW52ZXJ0WSh0''@;'; put 'put ''WzFdWzFdKS1lWzFdWzFdO3JldHVybiBuLnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLGM+YT8oYStjKS8yOk1hdGgubWluKDAsYSl8fE1hdGgubWF4KDAsYykpfWZ1bmN0aW9uIFpiZShuKXt2YXIgdD17fSxlPW4ubm9kZSgpLm5vZGVOYW1lO3Qu''@;'; put 'put ''dGFnPWUsIiN0ZXh0Ij09ZT90LnRleHQ9bi50ZXh0KCk6IiNjb21tZW50Ij09ZSYmKHQuY29tbWVudD1uLnRleHQoKSksdC5hdHRyaWJ1dGVzPXt9O3ZhciByPW4ubm9kZSgpLmF0dHJpYnV0ZXM7aWYocilmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTt0LmF0dHJpYnV0''@;'; put 'put ''ZXNbYS5uYW1lXT1hLnZhbHVlfXZhciBZLEM9bi5ub2RlKCkudHJhbnNmb3JtO2lmKEMmJjAhPUMuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgUD1DLmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7dC50cmFuc2xhdGlvbj17eDpQLmUseTpQLmZ9LHQuc2NhbGU9UC5hfWlmKCJlbGxp''@;'; put 'put ''cHNlIj09ZSYmKHQuY2VudGVyPXt4OnQuYXR0cmlidXRlcy5jeCx5OnQuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09ZSl7dmFyIEo9KFk9bi5hdHRyKCJwb2ludHMiKS5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24oanQpe3JldHVybiBqdC5zcGxpdCgiLCIpWzBdfSksY2U9WS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oanQpe3JldHVybiBqdC5zcGxpdCgiLCIpWzFdfSksZmU9TWF0aC5taW4uYXBwbHkobnVsbCxKKSxBZT1NYXRoLm1heC5hcHBseShudWxsLEopLEhlPU1hdGgubWluLmFwcGx5KG51bGwsY2UpLFhlPU1hdGgubWF4LmFwcGx5KG51bGwsY2UpO3QuYmJveD17eDpmZSx5OkhlLHdpZHRo''@;'; put 'put ''OkFlLWZlLGhlaWdodDpYZS1IZX0sdC5jZW50ZXI9e3g6KGZlK0FlKS8yLHk6KEhlK1hlKS8yfX0icGF0aCI9PWUmJigoWT1uLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksSj1ZLm1hcChmdW5jdGlvbihUcil7cmV0dXJuK1RyLnNwbGl0KCIsIilbMF19KSxjZT1ZLm1hcChm''@;'; put 'put ''dW5jdGlvbihUcil7cmV0dXJuK1RyLnNwbGl0KCIsIilbMV19KSxmZT1NYXRoLm1pbi5hcHBseShudWxsLEopLEFlPU1hdGgubWF4LmFwcGx5KG51bGwsSiksSGU9TWF0aC5taW4uYXBwbHkobnVsbCxjZSksWGU9TWF0aC5tYXguYXBwbHkobnVsbCxjZSksdC5iYm94PXt4OmZlLHk6SGUsd2lk''@;'; put 'put ''dGg6QWUtZmUsaGVpZ2h0OlhlLUhlfSx0LmNlbnRlcj17eDooZmUrQWUpLzIseTooSGUrWGUpLzJ9LHQudG90YWxMZW5ndGg9bi5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSk7cmV0dXJuInRleHQiPT1lJiYodC5jZW50ZXI9e3g6bi5hdHRyKCJ4IikseTpuLmF0dHIoInkiKX0pLCIjdGV4dCI9''@;'; put 'put ''PWU/dC50ZXh0PW4udGV4dCgpOiIjY29tbWVudCI9PWUmJih0LmNvbW1lbnQ9bi50ZXh0KCkpLHR9ZnVuY3Rpb24gdF8obil7dmFyIHQ9WmJlKG4pO3JldHVybiB0LmNoaWxkcmVuPVtdLGthZShuLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dF8oTHModGhpcykp''@;'; put 'put ''O3IucGFyZW50PXQsdC5jaGlsZHJlbi5wdXNoKHIpfSksdH1mdW5jdGlvbiAkYWUobil7cmV0dXJuIiN0ZXh0Ij09bi50YWc/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOiIjY29tbWVudCI9PW4udGFnP2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQobi5jb21tZW50KTpkb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixuLnRhZyl9ZnVuY3Rpb24gS2FlKG4pe3ZhciB0PSRhZShuKSxlPUxzKHQpLHI9bi5hdHRyaWJ1dGVzO2Zvcih2YXIgaSBvZiBPYmplY3Qua2V5cyhyKSllLmF0dHIoaSxyW2ldKTtyZXR1cm4gdH1mdW5jdGlvbiBZYmUo''@;'; put 'put ''bix0KXt2YXIgZT1McyhuLm5vZGUoKS5wYXJlbnROb2RlKSxyPUthZSh0KSxpPWUuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZSgpfSk7cmV0dXJuIG4ucmVtb3ZlKCksaX1mdW5jdGlvbiBYYWUobix0KXshZnVuY3Rpb24gZUZ0KG4sdCl7bi5k''@;'; put 'put ''YXR1bSh0KSxuLmRhdGEoW3RdLGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pfShuLHQpLGthZShuLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKHIsaSl7WGFlKExzKHRoaXMpLHQuY2hpbGRyZW5baV0pfSl9ZnVuY3Rpb24gdUkobix0PTApe3ZhciBlPUxzKHRoaXMpLGk9bi5h''@;'; put 'put ''dHRyaWJ1dGVzLGE9ZS5ub2RlKCkuYXR0cmlidXRlcztpZihhKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgbT1hW2NdLEM9bS5uYW1lO2lmKCJ4bWxucyIhPUMuc3BsaXQoIjoiKVswXSYmbS5uYW1lc3BhY2VVUkkpe3ZhciBQPW0ubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7Qz1Q''@;'; put 'put ''W1AubGVuZ3RoLTFdKyI6IitDfUMgaW4gaXx8KGlbQ109bnVsbCl9Zm9yKHZhciBKIG9mIE9iamVjdC5rZXlzKGkpKWUuYXR0cihKLGlbSl0pO24udGV4dCYmZS50ZXh0KG4udGV4dCksZnVuY3Rpb24gdEZ0KG4sdCl7dmFyIGU9bi5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2Rl''@;'; put 'put ''KCkuY2hpbGROb2Rlc30pLHI9KGU9ZS5kYXRhKGZ1bmN0aW9uKGMpe3JldHVybiBjLmNoaWxkcmVufSxmdW5jdGlvbihjKXtyZXR1cm4gYy50YWcrIi0iK3R9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oYyl7cmV0dXJuICRhZShjKX0pLGk9ZS5leGl0KCk7aT1pLnJlbW92ZSgpLGU9ci5t''@;'; put 'put ''ZXJnZShlKTt2YXIgYT17fTtlLmVhY2goZnVuY3Rpb24oYyl7dmFyIG09Yy50YWc7bnVsbD09YVttXSYmKGFbbV09MCk7dmFyIEM9YVttXSsrO3VJLmNhbGwodGhpcyxjLEMpfSl9KGUsdCl9ZnVuY3Rpb24gR2JlKG4sdCl7dmFyIGMsZT10P3QubGVuZ3RoOjAscj1uP01hdGgubWluKGUsbi5s''@;'; put 'put ''ZW5ndGgpOjAsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkoZSk7Zm9yKGM9MDtjPHI7KytjKWlbY109eXoobltjXSx0W2NdKTtmb3IoO2M8ZTsrK2MpYVtjXT10W2NdO3JldHVybiBmdW5jdGlvbihtKXtmb3IoYz0wO2M8cjsrK2MpYVtjXT1pW2NdKG0pO3JldHVybiBhfX1mdW5jdGlvbiBp''@;'; put 'put ''RnQobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlLnNldFRpbWUobiooMS1yKSt0KnIpLGV9fWZ1bmN0aW9uIGFGdChuLHQpe3ZhciBpLGU9e30scj17fTtmb3IoaSBpbihudWxsPT09bnx8Im9iamVjdCIhPXR5cGVvZiBuKSYmKG49e30p''@;'; put 'put ''LChudWxsPT09dHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKHQ9e30pLHQpaSBpbiBuP2VbaV09eXoobltpXSx0W2ldKTpyW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihpIGluIGUpcltpXT1lW2ldKGEpO3JldHVybiByfX1mdW5jdGlvbiBvRnQobix0KXt0fHwodD1bXSk7dmFyIGks''@;'; put 'put ''ZT1uP01hdGgubWluKHQubGVuZ3RoLG4ubGVuZ3RoKTowLHI9dC5zbGljZSgpO3JldHVybiBmdW5jdGlvbihhKXtmb3IoaT0wO2k8ZTsrK2kpcltpXT1uW2ldKigxLWEpK3RbaV0qYTtyZXR1cm4gcn19ZnVuY3Rpb24geXoobix0KXt2YXIgcixlPXR5cGVvZiB0O3JldHVybiBudWxsPT10fHwi''@;'; put 'put ''Ym9vbGVhbiI9PT1lP2phZSh0KTooIm51bWJlciI9PT1lP2NnOiJzdHJpbmciPT09ZT8ocj1xeSh0KSk/KHQ9cixweik6VmJlOnQgaW5zdGFuY2VvZiBxeT9wejp0IGluc3RhbmNlb2YgRGF0ZT9pRnQ6ZnVuY3Rpb24gc0Z0KG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBp''@;'; put 'put ''bnN0YW5jZW9mIERhdGFWaWV3KX0odCk/b0Z0OkFycmF5LmlzQXJyYXkodCk/R2JlOiJmdW5jdGlvbiIhPXR5cGVvZiB0LnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiB0LnRvU3RyaW5nfHxpc05hTih0KT9hRnQ6Y2cpKG4sdCl9ZnVuY3Rpb24gJGJlKCl7dmFyIG49dGhpcyxyPUxzKHRo''@;'; put 'put ''aXMuX3NlbGVjdGlvbi5ub2RlKCkucXVlcnlTZWxlY3Rvcigic3ZnIikpO2lmKDA9PXIuc2l6ZSgpKXJldHVybiB0aGlzO3RoaXMuX3pvb21TZWxlY3Rpb249cjt2YXIgaT1mdW5jdGlvbiBRUHQoKXt2YXIgWSxKLGNlLG49JFB0LHQ9S1B0LGU9SlB0LHI9WFB0LGk9cVB0LGE9WzAsMS8wXSxj''@;'; put 'put ''PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLG09MjUwLEM9WlB0LFA9RGFlKCJzdGFydCIsInpvb20iLCJlbmQiKSxIZT0wLFhlPTEwO2Z1bmN0aW9uIHJ0KERuKXtEbi5wcm9wZXJ0eSgiX196b29tIixXYmUpLm9uKCJ3aGVlbC56b29tIixabix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24u''@;'; put 'put ''em9vbSIsR3IpLm9uKCJkYmxjbGljay56b29tIixFcikuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLFRyKS5vbigidG91Y2htb3ZlLnpvb20iLGlyKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixwaSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xv''@;'; put 'put ''ciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkdChEbixBcil7cmV0dXJuKEFyPU1hdGgubWF4KGFbMF0sTWF0aC5taW4oYVsxXSxBcikpKT09PURuLms/RG46bmV3IEs1KEFyLERuLngsRG4ueSl9ZnVuY3Rpb24ganQoRG4sQXIsZXIpe3ZhciBEcj1BclswXS1lclswXSpEbi5rLFpyPUFy''@;'; put 'put ''WzFdLWVyWzFdKkRuLms7cmV0dXJuIERyPT09RG4ueCYmWnI9PT1Ebi55P0RuOm5ldyBLNShEbi5rLERyLFpyKX1mdW5jdGlvbiBGdChEbil7cmV0dXJuWygrRG5bMF1bMF0rICtEblsxXVswXSkvMiwoK0RuWzBdWzFdKyArRG5bMV1bMV0pLzJdfWZ1bmN0aW9uIHBuKERuLEFyLGVyLERyKXtE''@;'; put 'put ''bi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtvbih0aGlzLGFyZ3VtZW50cykuZXZlbnQoRHIpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7b24odGhpcyxhcmd1bWVudHMpLmV2ZW50KERyKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBacj10aGlzLGJpPWFyZ3VtZW50cyxTaT1vbihacixiaSkuZXZlbnQoRHIpLGpyPXQuYXBwbHkoWnIsYmkpLFRpPW51bGw9PWVyP0Z0KGpyKToiZnVuY3Rpb24iPT10eXBlb2YgZXI/ZXIuYXBwbHkoWnIsYmkpOmVyLGxhPU1hdGgubWF4KGpyWzFdWzBdLWpyWzBdWzBdLGpyWzFd''@;'; put 'put ''WzFdLWpyWzBdWzFdKSxGcj1aci5fX3pvb20sb3Q9ImZ1bmN0aW9uIj09dHlwZW9mIEFyP0FyLmFwcGx5KFpyLGJpKTpBcixJdD1DKEZyLmludmVydChUaSkuY29uY2F0KGxhL0ZyLmspLG90LmludmVydChUaSkuY29uY2F0KGxhL290LmspKTtyZXR1cm4gZnVuY3Rpb24oVXQpe2lmKDE9PT1V''@;'; put 'put ''dClVdD1vdDtlbHNle3ZhciBFbj1JdChVdCksYXI9bGEvRW5bMl07VXQ9bmV3IEs1KGFyLFRpWzBdLUVuWzBdKmFyLFRpWzFdLUVuWzFdKmFyKX1TaS56b29tKG51bGwsVXQpfX0pfWZ1bmN0aW9uIG9uKERuLEFyLGVyKXtyZXR1cm4hZXImJkRuLl9fem9vbWluZ3x8bmV3IGduKERuLEFyKX1m''@;'; put 'put ''dW5jdGlvbiBnbihEbixBcil7dGhpcy50aGF0PURuLHRoaXMuYXJncz1Bcix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD10LmFwcGx5KERuLEFyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBabihEbiwuLi5Bcil7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50''@;'; put 'put ''cykpe3ZhciBlcj1vbih0aGlzLEFyKS5ldmVudChEbiksRHI9dGhpcy5fX3pvb20sWnI9TWF0aC5tYXgoYVswXSxNYXRoLm1pbihhWzFdLERyLmsqTWF0aC5wb3coMixyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxiaT1lXyhEbik7aWYoZXIud2hlZWwpKGVyLm1vdXNlWzBdWzBdIT09Ymlb''@;'; put 'put ''MF18fGVyLm1vdXNlWzBdWzFdIT09YmlbMV0pJiYoZXIubW91c2VbMV09RHIuaW52ZXJ0KGVyLm1vdXNlWzBdPWJpKSksY2xlYXJUaW1lb3V0KGVyLndoZWVsKTtlbHNle2lmKERyLms9PT1acilyZXR1cm47ZXIubW91c2U9W2JpLERyLmludmVydChiaSldLHN6KHRoaXMpLGVyLnN0YXJ0KCl9''@;'; put 'put ''Y0koRG4pLGVyLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gU2koKXtlci53aGVlbD1udWxsLGVyLmVuZCgpfSwxNTApLGVyLnpvb20oIm1vdXNlIixlKGp0KGR0KERyLFpyKSxlci5tb3VzZVswXSxlci5tb3VzZVsxXSksZXIuZXh0ZW50LGMpKX19ZnVuY3Rpb24gR3IoRG4sLi4uQXIpe2lm''@;'; put 'put ''KCFjZSYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlcj1Ebi5jdXJyZW50VGFyZ2V0LERyPW9uKHRoaXMsQXIsITApLmV2ZW50KERuKSxacj1McyhEbi52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIFRpKEZyKXtpZihjSShGciksIURyLm1vdmVkKXt2YXIgb3Q9RnIu''@;'; put 'put ''Y2xpZW50WC1TaSxJdD1Gci5jbGllbnRZLWpyO0RyLm1vdmVkPW90Km90K0l0Kkl0PkhlfURyLmV2ZW50KEZyKS56b29tKCJtb3VzZSIsZShqdChEci50aGF0Ll9fem9vbSxEci5tb3VzZVswXT1lXyhGcixlciksRHIubW91c2VbMV0pLERyLmV4dGVudCxjKSl9LCEwKS5vbigibW91c2V1cC56''@;'; put 'put ''b29tIixmdW5jdGlvbiBsYShGcil7WnIub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZnVuY3Rpb24galB0KG4sdCl7dmFyIGU9bi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1McyhuKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihyLm9uKCJjbGljay5k''@;'; put 'put ''cmFnIixZYWUsWmFlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBlP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihlLnN0eWxlLk1velVzZXJTZWxlY3Q9ZS5fX25vc2VsZWN0LGRlbGV0ZSBlLl9fbm9z''@;'; put 'put ''ZWxlY3QpfShGci52aWV3LERyLm1vdmVkKSxjSShGciksRHIuZXZlbnQoRnIpLmVuZCgpfSwhMCksYmk9ZV8oRG4sZXIpLFNpPURuLmNsaWVudFgsanI9RG4uY2xpZW50WTsoZnVuY3Rpb24gQlB0KG4pe3ZhciB0PW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9THMobikub24oImRyYWdz''@;'; put 'put ''dGFydC5kcmFnIixZYWUsWmFlKTsib25zZWxlY3RzdGFydCJpbiB0P2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLFlhZSxaYWUpOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoRG4udmlldyksR2FlKERuKSxEci5tb3Vz''@;'; put 'put ''ZT1bYmksdGhpcy5fX3pvb20uaW52ZXJ0KGJpKV0sc3oodGhpcyksRHIuc3RhcnQoKX19ZnVuY3Rpb24gRXIoRG4sLi4uQXIpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZXI9dGhpcy5fX3pvb20sRHI9ZV8oRG4uY2hhbmdlZFRvdWNoZXM/RG4uY2hhbmdlZFRvdWNoZXNbMF06''@;'; put 'put ''RG4sdGhpcyksWnI9ZXIuaW52ZXJ0KERyKSxTaT1lKGp0KGR0KGVyLGVyLmsqKERuLnNoaWZ0S2V5Py41OjIpKSxEcixaciksdC5hcHBseSh0aGlzLEFyKSxjKTtjSShEbiksbT4wP0xzKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihtKS5jYWxsKHBuLFNpLERyLERuKTpMcyh0aGlzKS5j''@;'; put 'put ''YWxsKHJ0LnRyYW5zZm9ybSxTaSxEcixEbil9fWZ1bmN0aW9uIFRyKERuLC4uLkFyKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGJpLFNpLGpyLFRpLGVyPURuLnRvdWNoZXMsRHI9ZXIubGVuZ3RoLFpyPW9uKHRoaXMsQXIsRG4uY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09RHIp''@;'; put 'put ''LmV2ZW50KERuKTtmb3IoR2FlKERuKSxTaT0wO1NpPERyOysrU2kpVGk9W1RpPWVfKGpyPWVyW1NpXSx0aGlzKSx0aGlzLl9fem9vbS5pbnZlcnQoVGkpLGpyLmlkZW50aWZpZXJdLFpyLnRvdWNoMD8hWnIudG91Y2gxJiZaci50b3VjaDBbMl0hPT1UaVsyXSYmKFpyLnRvdWNoMT1UaSxaci50''@;'; put 'put ''YXBzPTApOihaci50b3VjaDA9VGksYmk9ITAsWnIudGFwcz0xKyEhWSk7WSYmKFk9Y2xlYXJUaW1lb3V0KFkpKSxiaSYmKFpyLnRhcHM8MiYmKEo9VGlbMF0sWT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WT1udWxsfSw1MDApKSxzeih0aGlzKSxaci5zdGFydCgpKX19ZnVuY3Rpb24gaXIoRG4s''@;'; put 'put ''Li4uQXIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgYmksU2ksanIsVGksZXI9b24odGhpcyxBcikuZXZlbnQoRG4pLERyPURuLmNoYW5nZWRUb3VjaGVzLFpyPURyLmxlbmd0aDtmb3IoY0koRG4pLGJpPTA7Ymk8WnI7KytiaSlqcj1lXyhTaT1EcltiaV0sdGhpcyksZXIudG91Y2gwJiZlci50''@;'; put 'put ''b3VjaDBbMl09PT1TaS5pZGVudGlmaWVyP2VyLnRvdWNoMFswXT1qcjplci50b3VjaDEmJmVyLnRvdWNoMVsyXT09PVNpLmlkZW50aWZpZXImJihlci50b3VjaDFbMF09anIpO2lmKFNpPWVyLnRoYXQuX196b29tLGVyLnRvdWNoMSl7dmFyIGxhPWVyLnRvdWNoMFswXSxGcj1lci50b3VjaDBb''@;'; put 'put ''MV0sb3Q9ZXIudG91Y2gxWzBdLEl0PWVyLnRvdWNoMVsxXSxVdD0oVXQ9b3RbMF0tbGFbMF0pKlV0KyhVdD1vdFsxXS1sYVsxXSkqVXQsRW49KEVuPUl0WzBdLUZyWzBdKSpFbisoRW49SXRbMV0tRnJbMV0pKkVuO1NpPWR0KFNpLE1hdGguc3FydChVdC9FbikpLGpyPVsobGFbMF0rb3RbMF0p''@;'; put 'put ''LzIsKGxhWzFdK290WzFdKS8yXSxUaT1bKEZyWzBdK0l0WzBdKS8yLChGclsxXStJdFsxXSkvMl19ZWxzZXtpZighZXIudG91Y2gwKXJldHVybjtqcj1lci50b3VjaDBbMF0sVGk9ZXIudG91Y2gwWzFdfWVyLnpvb20oInRvdWNoIixlKGp0KFNpLGpyLFRpKSxlci5leHRlbnQsYykpfX1mdW5j''@;'; put 'put ''dGlvbiBwaShEbiwuLi5Bcil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBiaSxTaSxlcj1vbih0aGlzLEFyKS5ldmVudChEbiksRHI9RG4uY2hhbmdlZFRvdWNoZXMsWnI9RHIubGVuZ3RoO2ZvcihHYWUoRG4pLGNlJiZjbGVhclRpbWVvdXQoY2UpLGNlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtj''@;'; put 'put ''ZT1udWxsfSw1MDApLGJpPTA7Ymk8WnI7KytiaSlTaT1EcltiaV0sZXIudG91Y2gwJiZlci50b3VjaDBbMl09PT1TaS5pZGVudGlmaWVyP2RlbGV0ZSBlci50b3VjaDA6ZXIudG91Y2gxJiZlci50b3VjaDFbMl09PT1TaS5pZGVudGlmaWVyJiZkZWxldGUgZXIudG91Y2gxO2lmKGVyLnRvdWNo''@;'; put 'put ''MSYmIWVyLnRvdWNoMCYmKGVyLnRvdWNoMD1lci50b3VjaDEsZGVsZXRlIGVyLnRvdWNoMSksZXIudG91Y2gwKWVyLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoZXIudG91Y2gwWzBdKTtlbHNlIGlmKGVyLmVuZCgpLDI9PT1lci50YXBzJiYoU2k9ZV8oU2ksdGhpcyksTWF0aC5oeXBv''@;'; put 'put ''dChKWzBdLVNpWzBdLEpbMV0tU2lbMV0pPFhlKSl7dmFyIGpyPUxzKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7anImJmpyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBydC50cmFuc2Zvcm09ZnVuY3Rpb24oRG4sQXIsZXIsRHIpe3ZhciBacj1Ebi5zZWxlY3Rpb24/RG4uc2Vs''@;'; put 'put ''ZWN0aW9uKCk6RG47WnIucHJvcGVydHkoIl9fem9vbSIsV2JlKSxEbiE9PVpyP3BuKERuLEFyLGVyLERyKTpaci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7b24odGhpcyxhcmd1bWVudHMpLmV2ZW50KERyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgQXI/QXIu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpOkFyKS5lbmQoKX0pfSxydC5zY2FsZUJ5PWZ1bmN0aW9uKERuLEFyLGVyLERyKXtydC5zY2FsZVRvKERuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBBcj9Bci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6QXIp''@;'; put 'put ''fSxlcixEcil9LHJ0LnNjYWxlVG89ZnVuY3Rpb24oRG4sQXIsZXIsRHIpe3J0LnRyYW5zZm9ybShEbixmdW5jdGlvbigpe3ZhciBacj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxiaT10aGlzLl9fem9vbSxTaT1udWxsPT1lcj9GdChacik6ImZ1bmN0aW9uIj09dHlwZW9mIGVyP2VyLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKTplcixqcj1iaS5pbnZlcnQoU2kpLFRpPSJmdW5jdGlvbiI9PXR5cGVvZiBBcj9Bci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6QXI7cmV0dXJuIGUoanQoZHQoYmksVGkpLFNpLGpyKSxacixjKX0sZXIsRHIpfSxydC50cmFuc2xhdGVCeT1mdW5jdGlvbihEbixBcixl''@;'; put 'put ''cixEcil7cnQudHJhbnNmb3JtKERuLGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBBcj9Bci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6QXIsImZ1bmN0aW9uIj09dHlwZW9mIGVyP2VyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplciks''@;'; put 'put ''dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyl9LG51bGwsRHIpfSxydC50cmFuc2xhdGVUbz1mdW5jdGlvbihEbixBcixlcixEcixacil7cnQudHJhbnNmb3JtKERuLGZ1bmN0aW9uKCl7dmFyIGJpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFNpPXRoaXMuX196b29tLGpyPW51bGw9PURyP0Z0''@;'; put 'put ''KGJpKToiZnVuY3Rpb24iPT10eXBlb2YgRHI/RHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkRyO3JldHVybiBlKG16LnRyYW5zbGF0ZShqclswXSxqclsxXSkuc2NhbGUoU2kuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBBcj8tQXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1Bciwi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgZXI/LWVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZXIpLGJpLGMpfSxEcixacil9LGduLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24oRG4pe3JldHVybiBEbiYmKHRoaXMuc291cmNlRXZlbnQ9RG4pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9''@;'; put 'put ''PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKERuLEFyKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PURuJiYodGhpcy5tb3VzZVsxXT1Bci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRo''@;'; put 'put ''aXMudG91Y2gwJiYidG91Y2giIT09RG4mJih0aGlzLnRvdWNoMFsxXT1Bci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PURuJiYodGhpcy50b3VjaDFbMV09QXIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1Bcix0aGlzLmVt''@;'; put 'put ''aXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oRG4pe3ZhciBBcj1Mcyh0aGlzLnRoYXQpLmRhdHVtKCk7UC5jYWxsKERu''@;'; put 'put ''LHRoaXMudGhhdCxuZXcgR1B0KERuLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDpydCx0eXBlOkRuLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOlB9KSxBcil9fSxydC53aGVlbERlbHRhPWZ1bmN0aW9uKERuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgRG4/RG46Z3ooK0RuKSxydCk6cn0scnQuZmlsdGVyPWZ1bmN0aW9uKERuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgRG4/RG46Z3ooISFEbikscnQpOm59LHJ0LnRvdWNoYWJsZT1mdW5jdGlvbihEbil7cmV0''@;'; put 'put ''dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIERuP0RuOmd6KCEhRG4pLHJ0KTppfSxydC5leHRlbnQ9ZnVuY3Rpb24oRG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBEbj9EbjpneihbWytEblswXVswXSwrRG5bMF1bMV1d''@;'; put 'put ''LFsrRG5bMV1bMF0sK0RuWzFdWzFdXV0pLHJ0KTp0fSxydC5zY2FsZUV4dGVudD1mdW5jdGlvbihEbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGFbMF09K0RuWzBdLGFbMV09K0RuWzFdLHJ0KTpbYVswXSxhWzFdXX0scnQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKERuKXtyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD8oY1swXVswXT0rRG5bMF1bMF0sY1sxXVswXT0rRG5bMV1bMF0sY1swXVsxXT0rRG5bMF1bMV0sY1sxXVsxXT0rRG5bMV1bMV0scnQpOltbY1swXVswXSxjWzBdWzFdXSxbY1sxXVswXSxjWzFdWzFdXV19LHJ0LmNvbnN0cmFpbj1mdW5jdGlvbihEbil7cmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg/KGU9RG4scnQpOmV9LHJ0LmR1cmF0aW9uPWZ1bmN0aW9uKERuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0rRG4scnQpOm19LHJ0LmludGVycG9sYXRlPWZ1bmN0aW9uKERuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQz1EbixydCk6Q30scnQub249''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgRG49UC5vbi5hcHBseShQLGFyZ3VtZW50cyk7cmV0dXJuIERuPT09UD9ydDpEbn0scnQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihEbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEhlPShEbj0rRG4pKkRuLHJ0KTpNYXRoLnNxcnQoSGUpfSxydC50YXBEaXN0YW5j''@;'; put 'put ''ZT1mdW5jdGlvbihEbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFhlPStEbixydCk6WGV9LHJ0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0''@;'; put 'put ''ZSh5eikub24oInpvb20iLGZ1bmN0aW9uIHQoYyl7THMoci5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLGMudHJhbnNmb3JtKSxuLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixuKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1pO3ZhciBhPUxzKHIubm9kZSgpLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IoImciKSk7cmV0dXJuIHIuY2FsbChpKSx0aGlzLl9hY3RpdmV8fEphZS5jYWxsKHRoaXMsYSksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09dnooci5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24gcWFlKG4pe3ZhciB0PXRoaXMuX3RyYW5zbGF0aW9uLGU9dGhpcy5fc2NhbGUscj1uLmRh''@;'; put 'put ''dHVtKCkudHJhbnNsYXRpb24saT1uLmRhdHVtKCkuc2NhbGUsYT12eih0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJuIHQmJihhPShhPWEuc2NhbGUoMS9lKSkudHJhbnNsYXRlKC10LngsLXQueSkpLChhPWEudHJhbnNsYXRlKHIueCxyLnkpKS5zY2FsZShpKX1mdW5jdGlvbiBK''@;'; put 'put ''YWUobil7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLHFhZS5jYWxsKHRoaXMsbikpLHRoaXMuX3RyYW5zbGF0aW9uPW4uZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1uLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09''@;'; put 'put ''bXoudHJhbnNsYXRlKG4uZGF0dW0oKS50cmFuc2xhdGlvbi54LG4uZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShuLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9uIHBGdChuLHQpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGU9bi5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIHl6KFtyWzBdWzBd''@;'; put 'put ''LHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gcjwxPyJNIitlLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaShyKX0pLmpvaW4oIkwiKTp0fX19ZnVuY3Rpb24gS2JlKG4pe3JldHVybiJlZGdlIj09bi5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9''@;'; put 'put ''PW4udGFnJiYiZyI9PW4ucGFyZW50LnRhZyYmImVkZ2UiPT1uLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBYYmUobil7cmV0dXJuIG4ucGFyZW50JiZLYmUobi5wYXJlbnQpfWZ1bmN0aW9uIHFiZShuKXt2YXIgdD10aGlzLl90cmFuc2l0aW9uLGU9dGhpcy5fb3B0''@;'; put 'put ''aW9ucy5mYWRlJiZudWxsIT10LHI9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGk9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxhPXRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyxjPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51bGwhPXQsbT10aGlz''@;'; put 'put ''Ll9hdHRyaWJ1dGVyLEM9dGhpczt2YXIgSj10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9dCl7dmFyIGNlPXRoaXMuX2pvYnM7aWYoQy5fYWN0aXZlKXJldHVybiBjZS5wdXNoKG51bGwpLHRoaXM7Si50cmFuc2l0aW9uKHQpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigiZW5kIixmdW5j''@;'; put 'put ''dGlvbigpe0MuX2FjdGl2ZT0hMSwwIT1jZS5sZW5ndGgmJihjZS5zaGlmdCgpLEMucmVuZGVyKCkpfSksdGhpcy5fYWN0aXZlPSEwfW51bGwhPXQmJkoudHJhbnNpdGlvbih0KS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Qy5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvblN0YXJ0IixDKX0pLm9u''@;'; put 'put ''KCJlbmQiLGZ1bmN0aW9uKCl7Qy5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsQyl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0IixmdW5jdGlvbigpe0MuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEMpLEMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsQyksbiYm''@;'; put 'put ''bi5jYWxsKEMpfSk7dmFyIGZlPXRoaXMuX2RhdGEsQWU9Si5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoW2ZlXSxmdW5jdGlvbihIZSl7cmV0dXJuIEhlLmtleX0pO3JldHVybiBBZT1BZS5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2UoQWUpLGZ1bmN0aW9uIFkoSGUpe3ZhciBYZT1Mcyh0aGlz''@;'; put 'put ''KTtpZigic3ZnIj09SGUudGFnKXt2YXIgcnQ9Qy5fb3B0aW9ucztpZihudWxsIT1ydC53aWR0aHx8bnVsbCE9cnQuaGVpZ2h0KXt2YXIgZHQ9cnQud2lkdGgsanQ9cnQuaGVpZ2h0O251bGw9PWR0P2R0PTQqSGUuYXR0cmlidXRlcy53aWR0aC5yZXBsYWNlKCJwdCIsIiIpLzM6KFhlLmF0dHIo''@;'; put 'put ''IndpZHRoIixkdCksSGUuYXR0cmlidXRlcy53aWR0aD1kdCksbnVsbD09anQ/anQ9NCpIZS5hdHRyaWJ1dGVzLmhlaWdodC5yZXBsYWNlKCJwdCIsIiIpLzM6KFhlLmF0dHIoImhlaWdodCIsanQpLEhlLmF0dHJpYnV0ZXMuaGVpZ2h0PWp0KSxydC5maXR8fChYZS5hdHRyKCJ2aWV3Qm94Iixg''@;'; put 'put ''MCAwICR7MypkdC80L3J0LnNjYWxlfSAkezMqanQvNC9ydC5zY2FsZX1gKSxIZS5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAkezMqZHQvNC9ydC5zY2FsZX0gJHszKmp0LzQvcnQuc2NhbGV9YCl9MSE9cnQuc2NhbGUmJihydC5maXR8fG51bGw9PXJ0LndpZHRoJiZudWxsPT1ydC5oZWlnaHQp''@;'; put 'put ''JiYoZHQ9SGUuYXR0cmlidXRlcy52aWV3Qm94LnNwbGl0KCIgIilbMl0sanQ9SGUuYXR0cmlidXRlcy52aWV3Qm94LnNwbGl0KCIgIilbM10sWGUuYXR0cigidmlld0JveCIsYDAgMCAke2R0L3J0LnNjYWxlfSAke2p0L3J0LnNjYWxlfWApLEhlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7''@;'; put 'put ''ZHQvcnQuc2NhbGV9ICR7anQvcnQuc2NhbGV9YCl9bSYmWGUuZWFjaChtKTt2YXIgRnQ9SGUudGFnLHBuPUhlLmF0dHJpYnV0ZXMsb249WGUubm9kZSgpLmF0dHJpYnV0ZXM7aWYob24pZm9yKHZhciBnbj0wO2duPG9uLmxlbmd0aDtnbisrKXt2YXIgWm49b25bZ25dLEdyPVpuLm5hbWU7aWYo''@;'; put 'put ''InhtbG5zIiE9R3Iuc3BsaXQoIjoiKVswXSYmWm4ubmFtZXNwYWNlVVJJKXt2YXIgRXI9Wm4ubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7R3I9RXJbRXIubGVuZ3RoLTFdKyI6IitHcn1HciBpbiBwbnx8KHBuW0dyXT1udWxsKX12YXIgaXI9ITEscGk9ITE7aWYoaSYmdCl7aWYoKCJwb2x5Z29u''@;'; put 'put ''Ij09dGhpcy5ub2RlTmFtZXx8ImVsbGlwc2UiPT10aGlzLm5vZGVOYW1lKSYmSGUuYWx0ZXJuYXRpdmVPbGQmJihwaT0hMCksKCJwb2x5Z29uIj09RnR8fCJlbGxpcHNlIj09RnQpJiZIZS5hbHRlcm5hdGl2ZU5ldyYmKGlyPSEwKSwicG9seWdvbiI9PXRoaXMubm9kZU5hbWUmJiJwb2x5Z29u''@;'; put 'put ''Ij09RnQmJkhlLmFsdGVybmF0aXZlT2xkKXt2YXIgRG49WmJlKFhlKTtpZighYSl7dmFyIGVyPURuLmF0dHJpYnV0ZXMucG9pbnRzLnNwbGl0KCIgIikubGVuZ3RoOyhEcj1IZS5hdHRyaWJ1dGVzLnBvaW50cykuc3BsaXQoIiAiKS5sZW5ndGg9PWVyJiYoaXI9ITEscGk9ITEpfX1pZihwaSl7''@;'; put 'put ''dmFyIFNpPVliZShYZSxIZS5hbHRlcm5hdGl2ZU9sZCk7U2kuZGF0YShbSGVdLGZ1bmN0aW9uKCl7cmV0dXJuIEhlLmtleX0pLFhlPVNpfWlyJiYoRnQ9InBhdGgiLHBuPUhlLmFsdGVybmF0aXZlTmV3LmF0dHJpYnV0ZXMpfXZhciBUaT1YZTtpZih0JiYoVGk9VGkudHJhbnNpdGlvbih0KSxl''@;'; put 'put ''JiZUaS5maWx0ZXIoZnVuY3Rpb24oeG4pe3JldHVybiIjIj09eG4udGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwxKSxUaS5maWx0ZXIoZnVuY3Rpb24oeG4pe3JldHVybiIjIj09eG4udGFnWzBdP251bGw6dGhpc30pLm9uKCJlbmQiLGZ1bmN0aW9uKHhuKXtMcyh0aGlzKS5h''@;'; put 'put ''dHRyKCJzdHlsZSIseG4mJnhuLmF0dHJpYnV0ZXMmJnhuLmF0dHJpYnV0ZXMuc3R5bGV8fG51bGwpfSkpLGMmJiJwYXRoIj09RnQmJkhlLm9mZnNldCl7dmFyIEZyPUhlLnRvdGFsTGVuZ3RoO1hlLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLEZyKyIgIitGcikuYXR0cigic3Ryb2tlLWRhc2hv''@;'; put 'put ''ZmZzZXQiLEZyKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitIZS5vZmZzZXQueCsiLCIrSGUub2Zmc2V0LnkrIikiKSxwblsic3Ryb2tlLWRhc2hvZmZzZXQiXT0wLHBuLnRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiLFRpLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0Iixwblsic3Ry''@;'; put 'put ''b2tlLWRhc2hvZmZzZXQiXSkuYXR0cigidHJhbnNmb3JtIixwbi50cmFuc2Zvcm0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtMcyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe0xzKHRoaXMpLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixudWxsKS5h''@;'; put 'put ''dHRyKCJzdHJva2UtZGFzaGFycmF5IixudWxsKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpfSl9aWYoYyYmInBvbHlnb24iPT1GdCYmWGJlKEhlKSYmSGUub2Zmc2V0JiYicGF0aCI9PUhlLnBhcmVudC5jaGlsZHJlblszXS50YWcpe3ZhciBJdD1McyhYZS5ub2RlKCkucGFyZW50Tm9kZS5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKCJwYXRoIikpLFV0PUl0Lm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKDApLEVuPUl0Lm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKEhlLnRvdGFsTGVuZ3RoKSxhcj1JdC5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChIZS50b3RhbExlbmd0aC0xKSxFdD0xODAqTWF0aC5hdGFuMihF''@;'; put 'put ''bi55LWFyLnksRW4ueC1hci54KS9NYXRoLlBJLFp0PVV0LngtRW4ueCtIZS5vZmZzZXQueCxmbj1VdC55LUVuLnkrSGUub2Zmc2V0Lnk7WGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrWnQrIiwiK2ZuKyIpIiksVGkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKHhuKXt2YXIgbnI9SXQubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoSGUudG90YWxMZW5ndGgqeG4pLHhyPUl0Lm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKEhlLnRvdGFsTGVuZ3RoKnhuKzEpLF9yPTE4MCpNYXRoLmF0YW4yKHhyLnktbnIueSx4ci54LW5yLngpL01hdGgu''@;'; put 'put ''UEktRXQ7cmV0dXJuInRyYW5zbGF0ZSgiKyhadD1uci54LUVuLngrSGUub2Zmc2V0LngqKDEteG4pKSsiLCIrKGZuPW5yLnktRW4ueStIZS5vZmZzZXQueSooMS14bikpKyIpIHJvdGF0ZSgiK19yKyIgIitFbi54KyIgIitFbi55KyIpIn19KS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7THModGhp''@;'; put 'put ''cykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtMcyh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpfSl9dmFyIFhuPXImJnQmJiJwYXRoIj09RnQmJm51bGwhPVhlLmF0dHIoImQiKTtmb3IodmFyIGtuIG9mIE9iamVjdC5rZXlzKHBuKSl7dmFyIF9uPXBu''@;'; put 'put ''W2tuXTtpZihYbiYmImQiPT1rbil7dmFyIERyOyhEcj0oSGUuYWx0ZXJuYXRpdmVPbGR8fEhlKS5wb2ludHMpJiZUaS5hdHRyVHdlZW4oImQiLHBGdChEcixfbikpfWVsc2V7aWYoInRyYW5zZm9ybSI9PWtuJiZIZS50cmFuc2xhdGlvbilpZih0KXt2YXIgZ3I9VGkub24oImVuZCIpO1RpLm9u''@;'; put 'put ''KCJzdGFydCIsZnVuY3Rpb24oKXtDLl96b29tQmVoYXZpb3ImJlRpLnR3ZWVuKCJhdHRyLnRyYW5zZm9ybSIsZnVuY3Rpb24oKXt2YXIgeG49dGhpcztyZXR1cm4gZnVuY3Rpb24obnIpe3huLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixNYmUodnooQy5fem9vbVNlbGVjdGlvbi5ub2RlKCkp''@;'; put 'put ''LnRvU3RyaW5nKCkscWFlLmNhbGwoQyxYZSkudG9TdHJpbmcoKSkobnIpKX19KX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Z3IuY2FsbCh0aGlzKSxDLl96b29tQmVoYXZpb3ImJkphZS5jYWxsKEMsWGUpfSl9ZWxzZSBDLl96b29tQmVoYXZpb3ImJihKYWUuY2FsbChDLFhlKSxfbj1xYWUuY2Fs''@;'; put 'put ''bChDLFhlKS50b1N0cmluZygpKTtUaS5hdHRyKGtuLF9uKX19aXImJlRpLm9uKCJlbmQiLGZ1bmN0aW9uKHhuLG5yLHhyKXtZYmUoU2k9THModGhpcykseG4pLmRhdGEoW3huXSxmdW5jdGlvbigpe3JldHVybiB4bi5rZXl9KX0pLEhlLnRleHQmJlRpLnRleHQoSGUudGV4dCksZnVuY3Rpb24g''@;'; put 'put ''UChIZSl7dmFyIFhlPUhlLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBIZS5ub2RlKCkuY2hpbGROb2Rlc30pLHJ0PShYZT1YZS5kYXRhKGZ1bmN0aW9uKEZ0KXtyZXR1cm4gRnQuY2hpbGRyZW59LGZ1bmN0aW9uKEZ0KXtyZXR1cm4gRnQua2V5fSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0''@;'; put 'put ''aW9uKEZ0KXt2YXIgcG49JGFlKEZ0KTtyZXR1cm4iI3RleHQiPT1GdC50YWcmJmUmJihwbi5ub2RlVmFsdWU9RnQudGV4dCkscG59KTsoZXx8YyYmS2JlKEhlLmRhdHVtKCkpKSYmcnQuZmlsdGVyKGZ1bmN0aW9uKEZ0KXtyZXR1cm4iIyI9PUZ0LnRhZ1swXT9udWxsOnRoaXN9KS5lYWNoKGZ1''@;'; put 'put ''bmN0aW9uKEZ0KXt2YXIgcG49THModGhpcyk7Zm9yKHZhciBvbiBvZiBPYmplY3Qua2V5cyhGdC5hdHRyaWJ1dGVzKSlwbi5hdHRyKG9uLEZ0LmF0dHJpYnV0ZXNbb25dKX0pLmZpbHRlcihmdW5jdGlvbihGdCl7cmV0dXJuInN2ZyI9PUZ0LnRhZ3x8ImciPT1GdC50YWc/bnVsbDp0aGlzfSku''@;'; put 'put ''c3R5bGUoIm9wYWNpdHkiLDApO3ZhciBqdD1YZS5leGl0KCk7bSYmanQuZWFjaChtKSx0JiYoanQ9anQudHJhbnNpdGlvbih0KSxlJiZqdC5maWx0ZXIoZnVuY3Rpb24oRnQpe3JldHVybiIjIj09RnQudGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKSksanQ9anQucmVtb3Zl''@;'; put 'put ''KCksKFhlPXJ0Lm1lcmdlKFhlKS5vcmRlcigpKS5lYWNoKFkpfShYZSl9LmNhbGwoQWUubm9kZSgpLGZlKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3ImJiRiZS5jYWxsKHRoaXMpLEMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsQyksbnVsbD09dCYmKHRoaXMu''@;'; put 'put ''X2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksbiYmbi5jYWxsKHRoaXMpKSx0aGlzfXZ6LnByb3RvdHlwZT1LNS5wcm90b3R5cGU7dmFyIHdGdD1BcnJheUJ1ZmZlcix6dT1VaW50OEFycmF5LF96PVVpbnQxNkFycmF5LENGdD1JbnQxNkFycmF5LGJ6PUludDMyQXJyYXksUWFlPWZ1bmN0aW9u''@;'; put 'put ''KG4sdCxlKXtpZih6dS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIHp1LnByb3RvdHlwZS5zbGljZS5jYWxsKG4sdCxlKTsobnVsbD09dHx8dDwwKSYmKHQ9MCksKG51bGw9PWV8fGU+bi5sZW5ndGgpJiYoZT1uLmxlbmd0aCk7dmFyIHI9bmV3IHp1KGUtdCk7cmV0dXJuIHIuc2V0KG4uc3ViYXJy''@;'; put 'put ''YXkodCxlKSkscn0sZEk9ZnVuY3Rpb24obix0LGUscil7aWYoenUucHJvdG90eXBlLmZpbGwpcmV0dXJuIHp1LnByb3RvdHlwZS5maWxsLmNhbGwobix0LGUscik7Zm9yKChudWxsPT1lfHxlPDApJiYoZT0wKSwobnVsbD09cnx8cj5uLmxlbmd0aCkmJihyPW4ubGVuZ3RoKTtlPHI7KytlKW5b''@;'; put 'put ''ZV09dDtyZXR1cm4gbn0sU0Z0PWZ1bmN0aW9uKG4sdCxlLHIpe2lmKHp1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiB6dS5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKG4sdCxlLHIpO2ZvcigobnVsbD09ZXx8ZTwwKSYmKGU9MCksKG51bGw9PXJ8fHI+bi5sZW5ndGgpJiYocj1uLmxl''@;'; put 'put ''bmd0aCk7ZTxyOyluW3QrK109bltlKytdfSxNRnQ9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4''@;'; put 'put ''cGVjdGVkIEVPRiJdLGcwPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1uZXcgRXJyb3IodHx8TUZ0W25dKTtpZihyLmNvZGU9bixFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocixnMCksIWUpdGhyb3cgcjtyZXR1cm4gcn0sSmJlPWZ1bmN0aW9uKG4sdCxl''@;'; put 'put ''KXtmb3IodmFyIHI9MCxpPTA7cjxlOysrcilpfD1uW3QrK108PChyPDwzKTtyZXR1cm4gaX0sRUZ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9blswXXxuWzFdPDw4fG5bMl08PDE2O2lmKDMxMjY1Njg9PWUmJjI1Mz09blszXSl7dmFyIHI9bls0XSxpPXI+PjUmMSxhPXI+PjImMSxjPTMmcixtPXI+''@;'; put 'put ''PjY7OCZyJiZnMCgwKTt2YXIgQz02LWksUD0zPT1jPzQ6YyxZPUpiZShuLEMsUCksSj1tPzE8PG06aSxjZT1KYmUobixDKz1QLEopKygxPT1tJiYyNTYpLGZlPWNlO2lmKCFpKXt2YXIgQWU9MTw8MTArKG5bNV0+PjMpO2ZlPUFlKyhBZT4+MykqKDcmbls1XSl9ZmU+MjE0NTM4NjQ5NiYmZzAo''@;'; put 'put ''MSk7dmFyIEhlPW5ldyB6dSgoMT09dD9jZXx8ZmU6dD8wOmZlKSsxMik7cmV0dXJuIEhlWzBdPTEsSGVbNF09NCxIZVs4XT04LHtiOkMrSix5OjAsbDowLGQ6WSx3OnQmJjEhPXQ/dDpIZS5zdWJhcnJheSgxMiksZTpmZSxvOm5ldyBieihIZS5idWZmZXIsMCwzKSx1OmNlLGM6YSxtOk1hdGgu''@;'; put 'put ''bWluKDEzMTA3MixmZSl9fWlmKDI1NDgxODkzPT0oZT4+NHxuWzNdPDwyMCkpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybihuWzRdfG5bNV08PDh8bls2XTw8MTZ8bls3XTw8MjQpPj4+MH0obikrODtnMCgwKX0sbl89ZnVuY3Rpb24obil7Zm9yKHZhciB0PTA7MTw8dDw9bjsrK3QpO3JldHVy''@;'; put 'put ''biB0LTF9LGhJPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj00Kyh0PDwzKSxpPTUrKDE1Jm5bdF0pO2k+ZSYmZzAoMyk7Zm9yKHZhciBhPTE8PGksYz1hLG09LTEsQz0tMSxQPS0xLFk9YSxKPW5ldyB3RnQoNTEyKyhhPDwyKSksY2U9bmV3IENGdChKLDAsMjU2KSxmZT1uZXcgX3ooSiwwLDI1Niks''@;'; put 'put ''QWU9bmV3IF96KEosNTEyLGEpLEhlPTUxMisoYTw8MSksWGU9bmV3IHp1KEosSGUsYSkscnQ9bmV3IHp1KEosSGUrYSk7bTwyNTUmJmM+MDspe3ZhciBkdD1uXyhjKzEpLGp0PXI+PjMsRnQ9KDE8PGR0KzEpLTEscG49KG5banRdfG5banQrMV08PDh8bltqdCsyXTw8MTYpPj4oNyZyKSZGdCxv''@;'; put 'put ''bj0oMTw8ZHQpLTEsZ249RnQtYy0xLFpuPXBuJm9uO2lmKFpuPGduPyhyKz1kdCxwbj1abik6KHIrPWR0KzEscG4+b24mJihwbi09Z24pKSxjZVsrK21dPS0tcG4sLTE9PXBuPyhjKz1wbixYZVstLVldPW0pOmMtPXBuLCFwbilkb3t2YXIgR3I9cj4+MztDPShuW0dyXXxuW0dyKzFdPDw4KT4+''@;'; put 'put ''KDcmcikmMyxyKz0yLG0rPUN9d2hpbGUoMz09Qyl9KG0+MjU1fHxjKSYmZzAoMCk7Zm9yKHZhciBFcj0wLFRyPShhPj4xKSsoYT4+MykrMyxpcj1hLTEscGk9MDtwaTw9bTsrK3BpKXt2YXIgRG49Y2VbcGldO2lmKERuPDEpZmVbcGldPS1EbjtlbHNlIGZvcihQPTA7UDxEbjsrK1Ape1hlW0Vy''@;'; put 'put ''XT1waTtkb3tFcj1FcitUciZpcn13aGlsZShFcj49WSl9fWZvcihFciYmZzAoMCksUD0wO1A8YTsrK1Ape3ZhciBBcj1mZVtYZVtQXV0rKyxlcj1ydFtQXT1pLW5fKEFyKTtBZVtQXT0oQXI8PGVyKS1hfXJldHVybltyKzc+PjMse2I6aSxzOlhlLG46cnQsdDpBZX1dfSxBRnQ9aEkobmV3IHp1''@;'; put 'put ''KFs4MSwxNiw5OSwxNDAsNDksMTk4LDI0LDk5LDEyLDMzLDE5NiwyNCw5OSwxMDIsMTAyLDEzNCw3MCwxNDYsNF0pLDAsNilbMV0sa0Z0PWhJKG5ldyB6dShbMzMsMjAsMTk2LDI0LDk5LDE0MCwzMywxMzIsMTYsNjYsOCwzMywxMzIsMTYsNjYsOCwzMyw2OCw2OCw2OCw2OCw2OCw2OCw2OCw2''@;'; put 'put ''OCwzNiw5XSksMCw2KVsxXSxERnQ9aEkobmV3IHp1KFszMiwxMzIsMTYsNjYsMTAyLDcwLDY4LDY4LDY4LDY4LDM2LDczLDJdKSwwLDUpWzFdLFFiZT1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmxlbmd0aCxyPW5ldyBieihlKSxpPTA7aTxlOysraSlyW2ldPXQsdCs9MTw8bltpXTtyZXR1''@;'; put 'put ''cm4gcn0sZW9lPW5ldyB6dShuZXcgYnooWzAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTM0Njc4MDIwLDIwMjA1MDA1NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksSUZ0PVFiZShlb2UsMCksdG9lPW5ldyB6dShuZXcgYnooWzAsMCwwLDAsMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwx''@;'; put 'put ''MTc3NjkyMjAsMTg1MjA3MDQ4LDI1MjU3OTA4NCwxNl0pLmJ1ZmZlciwwLDUzKSxSRnQ9UWJlKHRvZSwzKSxmST1mdW5jdGlvbihuLHQsZSl7dmFyIHI9bi5sZW5ndGgsaT10Lmxlbmd0aCxhPW5bci0xXSxjPSgxPDxlLmIpLTEsbT0tZS5iO2F8fGcwKDApO2Zvcih2YXIgQz0wLFA9ZS5iLFk9''@;'; put 'put ''KHI8PDMpLTgrbl8oYSktUCxKPS0xO1k+bSYmSjxpOyl7dmFyIGNlPVk+PjM7dFsrK0pdPWUuc1tDPShDPDxQfChuW2NlXXxuW2NlKzFdPDw4fG5bY2UrMl08PDE2KT4+KDcmWSkpJmNdLFktPVA9ZS5uW0NdfShZIT1tfHxKKzEhPWkpJiZnMCgwKX0sTEZ0PWZ1bmN0aW9uKG4sdCxlKXt2YXIg''@;'; put 'put ''cj02LGE9dC5sZW5ndGgrMz4+MixjPWE8PDEsbT1hK2M7Zkkobi5zdWJhcnJheShyLHIrPW5bMF18blsxXTw8OCksdC5zdWJhcnJheSgwLGEpLGUpLGZJKG4uc3ViYXJyYXkocixyKz1uWzJdfG5bM108PDgpLHQuc3ViYXJyYXkoYSxjKSxlKSxmSShuLnN1YmFycmF5KHIscis9bls0XXxuWzVd''@;'; put 'put ''PDw4KSx0LnN1YmFycmF5KGMsbSksZSksZkkobi5zdWJhcnJheShyKSx0LnN1YmFycmF5KG0pLGUpfSxPRnQ9ZnVuY3Rpb24obix0LGUpe3ZhciByLGk9dC5iLGE9bltpXSxjPWE+PjEmMzt0Lmw9MSZhO3ZhciBtPWE+PjN8bltpKzFdPDw1fG5baSsyXTw8MTMsQz0oaSs9MykrbTtpZigxPT1j''@;'; put 'put ''KXJldHVybiBpPj1uLmxlbmd0aD92b2lkIDA6KHQuYj1pKzEsZT8oZEkoZSxuW2ldLHQueSx0LnkrPW0pLGUpOmRJKG5ldyB6dShtKSxuW2ldKSk7aWYoIShDPm4ubGVuZ3RoKSl7aWYoMD09YylyZXR1cm4gdC5iPUMsZT8oZS5zZXQobi5zdWJhcnJheShpLEMpLHQueSksdC55Kz1tLGUpOlFh''@;'; put 'put ''ZShuLGksQyk7aWYoMj09Yyl7dmFyIFA9bltpXSxZPTMmUCxKPVA+PjImMyxjZT1QPj40LGZlPTAsQWU9MDtZPDI/MSZKP2NlfD1uWysraV08PDR8KDImSiYmblsrK2ldPDwxMik6Y2U9UD4+MzooQWU9SixKPDI/KGNlfD0oNjMmblsrK2ldKTw8NCxmZT1uW2ldPj42fG5bKytpXTw8Mik6Mj09''@;'; put 'put ''Sj8oY2V8PW5bKytpXTw8NHwoMyZuWysraV0pPDwxMixmZT1uW2ldPj4yfG5bKytpXTw8Nik6KGNlfD1uWysraV08PDR8KDYzJm5bKytpXSk8PDEyLGZlPW5baV0+PjZ8blsrK2ldPDwyfG5bKytpXTw8MTApKSwrK2k7dmFyIEhlPWU/ZS5zdWJhcnJheSh0LnksdC55K3QubSk6bmV3IHp1KHQu''@;'; put 'put ''bSksWGU9SGUubGVuZ3RoLWNlO2lmKDA9PVkpSGUuc2V0KG4uc3ViYXJyYXkoaSxpKz1jZSksWGUpO2Vsc2UgaWYoMT09WSlkSShIZSxuW2krK10sWGUpO2Vsc2V7dmFyIHJ0PXQuaDtpZigyPT1ZKXt2YXIgZHQ9ZnVuY3Rpb24obix0KXt2YXIgZT0wLHI9LTEsaT1uZXcgenUoMjkyKSxhPW5b''@;'; put 'put ''dF0sYz1pLnN1YmFycmF5KDAsMjU2KSxtPWkuc3ViYXJyYXkoMjU2LDI2OCksQz1uZXcgX3ooaS5idWZmZXIsMjY4KTtpZihhPDEyOCl7dmFyIFA9aEkobix0KzEsNiksSj1QWzFdLGNlPVBbMF08PDMsZmU9blt0Kz1hXTtmZXx8ZzAoMCk7Zm9yKHZhciBBZT0wLEhlPTAsWGU9Si5iLHJ0PVhl''@;'; put 'put ''LGR0PSgrK3Q8PDMpLTgrbl8oZmUpOyEoKGR0LT1YZSk8Y2UpOyl7dmFyIGp0PWR0Pj4zO2lmKGNbKytyXT1KLnNbQWUrPShuW2p0XXxuW2p0KzFdPDw4KT4+KDcmZHQpJigxPDxYZSktMV0sKGR0LT1ydCk8Y2UpYnJlYWs7Y1srK3JdPUouc1tIZSs9KG5banQ9ZHQ+PjNdfG5banQrMV08PDgp''@;'; put 'put ''Pj4oNyZkdCkmKDE8PHJ0KS0xXSxYZT1KLm5bQWVdLEFlPUoudFtBZV0scnQ9Si5uW0hlXSxIZT1KLnRbSGVdfSsrcj4yNTUmJmcwKDApfWVsc2V7Zm9yKHI9YS0xMjc7ZTxyO2UrPTIpe3ZhciBGdD1uWysrdF07Y1tlXT1GdD4+NCxjW2UrMV09MTUmRnR9Kyt0fXZhciBwbj0wO2ZvcihlPTA7''@;'; put 'put ''ZTxyOysrZSkob249Y1tlXSk+MTEmJmcwKDApLHBuKz1vbiYmMTw8b24tMTt2YXIgZ249bl8ocG4pKzEsWm49MTw8Z24sR3I9Wm4tcG47Zm9yKEdyJkdyLTEmJmcwKDApLGNbcisrXT1uXyhHcikrMSxlPTA7ZTxyOysrZSl7dmFyIG9uOysrbVtjW2VdPShvbj1jW2VdKSYmZ24rMS1vbl19dmFy''@;'; put 'put ''IEVyPW5ldyB6dShabjw8MSksVHI9RXIuc3ViYXJyYXkoMCxabiksaXI9RXIuc3ViYXJyYXkoWm4pO2ZvcihDW2duXT0wLGU9Z247ZT4wOy0tZSl7dmFyIHBpPUNbZV07ZEkoaXIsZSxwaSxDW2UtMV09cGkrbVtlXSooMTw8Z24tZSkpfWZvcihDWzBdIT1abiYmZzAoMCksZT0wO2U8cjsrK2Up''@;'; put 'put ''e3ZhciBEbj1jW2VdO2lmKERuKXt2YXIgQXI9Q1tEbl07ZEkoVHIsZSxBcixDW0RuXT1BcisoMTw8Z24tRG4pKX19cmV0dXJuW3Qse246aXIsYjpnbixzOlRyfV19KG4saSk7ZmUrPWktKGk9ZHRbMF0pLHQuaD1ydD1kdFsxXX1lbHNlIHJ0fHxnMCgwKTsoQWU/TEZ0OmZJKShuLnN1YmFycmF5''@;'; put 'put ''KGksaSs9ZmUpLEhlLnN1YmFycmF5KFhlKSxydCl9dmFyIGp0PW5baSsrXTtpZihqdCl7MjU1PT1qdD9qdD0zMjUxMisobltpKytdfG5baSsrXTw8OCk6anQ+MTI3JiYoanQ9anQtMTI4PDw4fG5baSsrXSk7dmFyIEZ0PW5baSsrXTszJkZ0JiZnMCgwKTtmb3IodmFyIHBuPVtrRnQsREZ0LEFG''@;'; put 'put ''dF0sb249Mjtvbj4tMTstLW9uKXt2YXIgZ249RnQ+PjIrKG9uPDwxKSYzO2lmKDE9PWduKXt2YXIgWm49bmV3IHp1KFswLDAsbltpKytdXSk7cG5bb25dPXtzOlpuLnN1YmFycmF5KDIsMyksbjpabi5zdWJhcnJheSgwLDEpLHQ6bmV3IF96KFpuLmJ1ZmZlciwwLDEpLGI6MH19ZWxzZSAyPT1n''@;'; put 'put ''bj8oaT0ocj1oSShuLGksOS0oMSZvbikpKVswXSxwbltvbl09clsxXSk6Mz09Z24mJih0LnR8fGcwKDApLHBuW29uXT10LnRbb25dKX12YXIgR3I9dC50PXBuLEVyPUdyWzBdLFRyPUdyWzFdLGlyPUdyWzJdLHBpPW5bQy0xXTtwaXx8ZzAoMCk7dmFyIERuPShDPDwzKS04K25fKHBpKS1pci5i''@;'; put 'put ''LEFyPURuPj4zLGVyPTAsRHI9KG5bQXJdfG5bQXIrMV08PDgpPj4oNyZEbikmKDE8PGlyLmIpLTEsWnI9KG5bQXI9KERuLT1Uci5iKT4+M118bltBcisxXTw8OCk+Pig3JkRuKSYoMTw8VHIuYiktMSxiaT0obltBcj0oRG4tPUVyLmIpPj4zXXxuW0FyKzFdPDw4KT4+KDcmRG4pJigxPDxFci5i''@;'; put 'put ''KS0xO2ZvcigrK2p0Oy0tanQ7KXt2YXIgU2k9aXIuc1tEcl0sanI9aXIubltEcl0sVGk9RXIuc1tiaV0sbGE9RXIubltiaV0sRnI9VHIuc1tacl0sb3Q9VHIubltacl0sSXQ9MTw8RnIsVXQ9SXQrKChuW0FyPShEbi09RnIpPj4zXXxuW0FyKzFdPDw4fG5bQXIrMl08PDE2fG5bQXIrM108PDI0''@;'; put 'put ''KT4+Pig3JkRuKSZJdC0xKTtBcj0oRG4tPXRvZVtUaV0pPj4zO3ZhciBFbj1SRnRbVGldKygobltBcl18bltBcisxXTw8OHxuW0FyKzJdPDwxNik+Pig3JkRuKSYoMTw8dG9lW1RpXSktMSk7QXI9KERuLT1lb2VbU2ldKT4+Mzt2YXIgYXI9SUZ0W1NpXSsoKG5bQXJdfG5bQXIrMV08PDh8bltB''@;'; put 'put ''cisyXTw8MTYpPj4oNyZEbikmKDE8PGVvZVtTaV0pLTEpO2lmKEFyPShEbi09anIpPj4zLERyPWlyLnRbRHJdKygobltBcl18bltBcisxXTw8OCk+Pig3JkRuKSYoMTw8anIpLTEpLEFyPShEbi09bGEpPj4zLGJpPUVyLnRbYmldKygobltBcl18bltBcisxXTw8OCk+Pig3JkRuKSYoMTw8bGEp''@;'; put 'put ''LTEpLEFyPShEbi09b3QpPj4zLFpyPVRyLnRbWnJdKygobltBcl18bltBcisxXTw8OCk+Pig3JkRuKSYoMTw8b3QpLTEpLFV0PjMpdC5vWzJdPXQub1sxXSx0Lm9bMV09dC5vWzBdLHQub1swXT1VdC09MztlbHNle3ZhciBFdD1VdC0oMCE9YXIpO0V0PyhVdD0zPT1FdD90Lm9bMF0tMTp0Lm9b''@;'; put 'put ''RXRdLEV0PjEmJih0Lm9bMl09dC5vWzFdKSx0Lm9bMV09dC5vWzBdLHQub1swXT1VdCk6VXQ9dC5vWzBdfWZvcihvbj0wO29uPGFyOysrb24pSGVbZXIrb25dPUhlW1hlK29uXTtYZSs9YXI7dmFyIFp0PShlcis9YXIpLVV0O2lmKFp0PDApe3ZhciBmbj0tWnQsWG49dC5lK1p0O2Zvcihmbj5F''@;'; put 'put ''biYmKGZuPUVuKSxvbj0wO29uPGZuOysrb24pSGVbZXIrb25dPXQud1tYbitvbl07ZXIrPWZuLEVuLT1mbixadD0wfWZvcihvbj0wO29uPEVuOysrb24pSGVbZXIrb25dPUhlW1p0K29uXTtlcis9RW59aWYoZXIhPVhlKWZvcig7WGU8SGUubGVuZ3RoOylIZVtlcisrXT1IZVtYZSsrXTtlbHNl''@;'; put 'put ''IGVyPUhlLmxlbmd0aDtlP3QueSs9ZXI6SGU9UWFlKEhlLDAsZXIpfWVsc2UgaWYoZSl7aWYodC55Kz1jZSxYZSlmb3Iob249MDtvbjxjZTsrK29uKUhlW29uXT1IZVtYZStvbl19ZWxzZSBYZSYmKEhlPVFhZShIZSxYZSkpO3JldHVybiB0LmI9QyxIZX1nMCgyKX19O2Z1bmN0aW9uIG5vZSgp''@;'; put 'put ''e3JldHVybiBub2U9WihmdW5jdGlvbioobj17fSl7dmFyIFAsZmUsSGUscnQsZHQsR3IsanIsVGksZT1uLGE9KFNlLEJlKT0+e3Rocm93IEJlfSxKPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksY2U9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpLEFlPSExLGp0PSExO2Z1bmN0aW9uIEZ0''@;'; put 'put ''KCl7dmFyIFNlPVp6LmJ1ZmZlcjtJdD1uZXcgSW50OEFycmF5KFNlKSxGcj1uZXcgSW50MTZBcnJheShTZSksZS5IRUFQVTg9WnQ9bmV3IFVpbnQ4QXJyYXkoU2UpLGFyPW5ldyBVaW50MTZBcnJheShTZSksb3Q9bmV3IEludDMyQXJyYXkoU2UpLEV0PW5ldyBVaW50MzJBcnJheShTZSksVXQ9''@;'; put 'put ''bmV3IEZsb2F0MzJBcnJheShTZSksRW49bmV3IEZsb2F0NjRBcnJheShTZSl9ZnVuY3Rpb24gWm4oU2Upe2NlKFNlPWBBYm9ydGVkKCR7U2V9KWApLEFlPSEwLFNlKz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIsanQmJnp3ZSgpO3ZhciBCZT1uZXcgV2ViQXNz''@;'; put 'put ''ZW1ibHkuUnVudGltZUVycm9yKFNlKTt0aHJvdyBkdD8uKEJlKSxCZX1mdW5jdGlvbiBwaSgpe3JldHVybihwaT1aKGZ1bmN0aW9uKihTZSl7aWYoIWZlKXRyeXt2YXIgQmU9eWllbGQgUChTZSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KEJlKX1jYXRjaHt9cmV0dXJuIGZ1bmN0aW9uIFRyKFNl''@;'; put 'put ''KXtpZihTZT09R3ImJmZlKXJldHVybiBuZXcgVWludDhBcnJheShmZSk7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifShTZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEFyKCl7cmV0dXJuIEFyPVooZnVuY3Rpb24qKFNl''@;'; put 'put ''LEJlKXt0cnl7dmFyIHN0PXlpZWxkIGZ1bmN0aW9uIGlyKFNlKXtyZXR1cm4gcGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfShTZSk7cmV0dXJuIHlpZWxkIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHN0LEJlKX1jYXRjaCh0bil7Y2UoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJl''@;'; put 'put ''IHdhc206ICR7dG59YCksWm4odG4pfX0pLEFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBEcigpe3JldHVybiBEcj1aKGZ1bmN0aW9uKihTZSxCZSxzdCl7aWYoIVNlJiYhKFNlPT5TZS5zdGFydHNXaXRoKCJmaWxlOi8vIikpKEJlKSl0cnl7dmFyIER0PWZldGNoKEJlLHtjcmVk''@;'; put 'put ''ZW50aWFsczoic2FtZS1vcmlnaW4ifSk7cmV0dXJuIHlpZWxkIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKER0LHN0KX1jYXRjaChibil7Y2UoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke2JufWApLGNlKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5z''@;'; put 'put ''dGFudGlhdGlvbiIpfXJldHVybiBmdW5jdGlvbiBEbihTZSxCZSl7cmV0dXJuIEFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oQmUsc3QpfSksRHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFNpKCl7cmV0dXJuIFNpPVooZnVuY3Rpb24qKCl7dmFyIHN0PWZ1bmN0aW9uIFpyKCl7''@;'; put 'put ''cmV0dXJue2E6TVV0fX0oKTtHcj8/PSIiO3ZhciBEdD15aWVsZCBmdW5jdGlvbiBlcihTZSxCZSxzdCl7cmV0dXJuIERyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oZmUsR3Isc3QpO3JldHVybiBmdW5jdGlvbiBCZShibil7cmV0dXJuIGZ1bmN0aW9uIFNlKGJuLEJuKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gU1V0KFNlKXtWd2U9U2UuVCx3b2U9ZS5fbWFsbG9jPVNlLlUsUnA9ZS5fZnJlZT1TZS5WLEJ3ZT1TZS5YLGp3ZT1TZS5ZLHp3ZT1TZS5aLFV3ZT1TZS5fLFd3ZT1TZS4kLFp3ZT1TZS5hYSxZd2U9U2UuY2EsR3dlPVNlLmRhLHE4Lmppamk9U2UuZWEscTgudmlpamlpPVNlLmZhLHE4Lmlp''@;'; put 'put ''aWlpaj1TZS5nYSxxOC5paWlpaWpqPVNlLmhhLHE4LmlpaWlpaWpqPVNlLmlhLHE4LnZpaWo9U2UuamEscTguaWlpaj1TZS5rYSxaej1TZS5SLEt3ZT1TZS5XLCR3ZT1TZS5iYX0oU0k9Ym4uZXhwb3J0cyksRnQoKSxTSX0oYm4uaW5zdGFuY2UpfShEdCl9KSxTaS5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9Y2xhc3MgbGF7bmFtZT0iRXhpdFN0YXR1cyI7Y29uc3RydWN0b3IoQmUpe3RoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke0JlfSlgLHRoaXMuc3RhdHVzPUJlfX12YXIgRnIsb3QsSXQsVXQsRW4sYXIsRXQsWnQsZm49Z2xvYmFsVGhpcy5UZXh0RGVj''@;'; put 'put ''b2RlciYmbmV3IFRleHREZWNvZGVyLFhuPShTZSxCZSxzdCxEdCk9Pnt2YXIgdG49QmUrc3Q7aWYoRHQpcmV0dXJuIHRuO2Zvcig7U2VbQmVdJiYhKEJlPj10bik7KSsrQmU7cmV0dXJuIEJlfSxrbj0oU2UsQmU9MCxzdCxEdCk9Pnt2YXIgdG49WG4oU2UsQmUsc3QsRHQpO2lmKHRuLUJlPjE2''@;'; put 'put ''JiZTZS5idWZmZXImJmZuKXJldHVybiBmbi5kZWNvZGUoU2Uuc3ViYXJyYXkoQmUsdG4pKTtmb3IodmFyIGJuPSIiO0JlPHRuOyl7dmFyIEJuPVNlW0JlKytdO2lmKDEyOCZCbil7dmFyIFFuPTYzJlNlW0JlKytdO2lmKDE5MiE9KDIyNCZCbikpe3ZhciBhaT02MyZTZVtCZSsrXTtpZigoQm49''@;'; put 'put ''MjI0PT0oMjQwJkJuKT8oMTUmQm4pPDwxMnxRbjw8NnxhaTooNyZCbik8PDE4fFFuPDwxMnxhaTw8Nnw2MyZTZVtCZSsrXSk8NjU1MzYpYm4rPVN0cmluZy5mcm9tQ2hhckNvZGUoQm4pO2Vsc2V7dmFyIGFhPUJuLTY1NTM2O2JuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGFhPj4xMCw1''@;'; put 'put ''NjMyMHwxMDIzJmFhKX19ZWxzZSBibis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmQm4pPDw2fFFuKX1lbHNlIGJuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEJuKX1yZXR1cm4gYm59LF9uPShTZSxCZSxzdCk9PlNlP2tuKFp0LFNlLEJlLHN0KToiIix4bj17aXNBYnM6U2U9PiIvIj09PVNlLmNo''@;'; put 'put ''YXJBdCgwKSxzcGxpdFBhdGg6U2U9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKFNlKS5zbGljZSgxKSxub3JtYWxpemVBcnJheTooU2UsQmUpPT57Zm9yKHZhciBzdD0wLER0PVNlLmxlbmd0aC0xO0R0Pj0wO0R0''@;'; put 'put ''LS0pe3ZhciB0bj1TZVtEdF07Ii4iPT09dG4/U2Uuc3BsaWNlKER0LDEpOiIuLiI9PT10bj8oU2Uuc3BsaWNlKER0LDEpLHN0KyspOnN0JiYoU2Uuc3BsaWNlKER0LDEpLHN0LS0pfWlmKEJlKWZvcig7c3Q7c3QtLSlTZS51bnNoaWZ0KCIuLiIpO3JldHVybiBTZX0sbm9ybWFsaXplOlNlPT57''@;'; put 'put ''dmFyIEJlPXhuLmlzQWJzKFNlKSxzdD0iLyI9PT1TZS5zbGljZSgtMSk7cmV0dXJuIShTZT14bi5ub3JtYWxpemVBcnJheShTZS5zcGxpdCgiLyIpLmZpbHRlcihEdD0+ISFEdCksIUJlKS5qb2luKCIvIikpJiYhQmUmJihTZT0iLiIpLFNlJiZzdCYmKFNlKz0iLyIpLChCZT8iLyI6IiIpK1Nl''@;'; put 'put ''fSxkaXJuYW1lOlNlPT57dmFyIEJlPXhuLnNwbGl0UGF0aChTZSksc3Q9QmVbMF0sRHQ9QmVbMV07cmV0dXJuIHN0fHxEdD8oRHQmJihEdD1EdC5zbGljZSgwLC0xKSksc3QrRHQpOiIuIn0sYmFzZW5hbWU6U2U9PlNlJiZTZS5tYXRjaCgvKFteXC9dK3xcLylcLyokLylbMV0sam9pbjooLi4u''@;'; put 'put ''U2UpPT54bi5ub3JtYWxpemUoU2Uuam9pbigiLyIpKSxqb2luMjooU2UsQmUpPT54bi5ub3JtYWxpemUoU2UrIi8iK0JlKX0seHI9U2U9Pih4cj1TZT0+KGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoU2UpLDApKShTZSksX3I9e3Jlc29sdmU6KC4uLlNlKT0+e2Zvcih2YXIgQmU9IiIsc3Q9ITEs''@;'; put 'put ''RHQ9U2UubGVuZ3RoLTE7RHQ+PS0xJiYhc3Q7RHQtLSl7dmFyIHRuPUR0Pj0wP1NlW0R0XTpCdC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIHRuKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIXRuKXJldHVybiIi''@;'; put 'put ''O0JlPXRuKyIvIitCZSxzdD14bi5pc0Ficyh0bil9cmV0dXJuKHN0PyIvIjoiIikrKEJlPXhuLm5vcm1hbGl6ZUFycmF5KEJlLnNwbGl0KCIvIikuZmlsdGVyKGJuPT4hIWJuKSwhc3QpLmpvaW4oIi8iKSl8fCIuIn0scmVsYXRpdmU6KFNlLEJlKT0+e2Z1bmN0aW9uIHN0KGFhKXtmb3IodmFy''@;'; put 'put ''IFlhPTA7WWE8YWEubGVuZ3RoJiYiIj09PWFhW1lhXTtZYSsrKTtmb3IodmFyIGlvPWFhLmxlbmd0aC0xO2lvPj0wJiYiIj09PWFhW2lvXTtpby0tKTtyZXR1cm4gWWE+aW8/W106YWEuc2xpY2UoWWEsaW8tWWErMSl9U2U9X3IucmVzb2x2ZShTZSkuc2xpY2UoMSksQmU9X3IucmVzb2x2ZShC''@;'; put 'put ''ZSkuc2xpY2UoMSk7Zm9yKHZhciBEdD1zdChTZS5zcGxpdCgiLyIpKSx0bj1zdChCZS5zcGxpdCgiLyIpKSxibj1NYXRoLm1pbihEdC5sZW5ndGgsdG4ubGVuZ3RoKSxCbj1ibixRbj0wO1FuPGJuO1FuKyspaWYoRHRbUW5dIT09dG5bUW5dKXtCbj1RbjticmVha312YXIgYWk9W107Zm9yKFFu''@;'; put 'put ''PUJuO1FuPER0Lmxlbmd0aDtRbisrKWFpLnB1c2goIi4uIik7cmV0dXJuKGFpPWFpLmNvbmNhdCh0bi5zbGljZShCbikpKS5qb2luKCIvIil9fSxmaT1bXSxDYT1TZT0+e2Zvcih2YXIgQmU9MCxzdD0wO3N0PFNlLmxlbmd0aDsrK3N0KXt2YXIgRHQ9U2UuY2hhckNvZGVBdChzdCk7RHQ8PTEy''@;'; put 'put ''Nz9CZSsrOkR0PD0yMDQ3P0JlKz0yOkR0Pj01NTI5NiYmRHQ8PTU3MzQzPyhCZSs9NCwrK3N0KTpCZSs9M31yZXR1cm4gQmV9LGNhPShTZSxCZSxzdCxEdCk9PntpZighKER0PjApKXJldHVybiAwO2Zvcih2YXIgdG49c3QsYm49c3QrRHQtMSxCbj0wO0JuPFNlLmxlbmd0aDsrK0JuKXt2YXIg''@;'; put 'put ''UW49U2UuY29kZVBvaW50QXQoQm4pO2lmKFFuPD0xMjcpe2lmKHN0Pj1ibilicmVhaztCZVtzdCsrXT1Rbn1lbHNlIGlmKFFuPD0yMDQ3KXtpZihzdCsxPj1ibilicmVhaztCZVtzdCsrXT0xOTJ8UW4+PjYsQmVbc3QrK109MTI4fDYzJlFufWVsc2UgaWYoUW48PTY1NTM1KXtpZihzdCsyPj1i''@;'; put 'put ''bilicmVhaztCZVtzdCsrXT0yMjR8UW4+PjEyLEJlW3N0KytdPTEyOHxRbj4+NiY2MyxCZVtzdCsrXT0xMjh8NjMmUW59ZWxzZXtpZihzdCszPj1ibilicmVhaztCZVtzdCsrXT0yNDB8UW4+PjE4LEJlW3N0KytdPTEyOHxRbj4+MTImNjMsQmVbc3QrK109MTI4fFFuPj42JjYzLEJlW3N0Kytd''@;'; put 'put ''PTEyOHw2MyZRbixCbisrfX1yZXR1cm4gQmVbc3RdPTAsc3QtdG59LGZvPShTZSxCZSxzdCk9Pnt2YXIgRHQ9c3Q+MD9zdDpDYShTZSkrMSx0bj1uZXcgQXJyYXkoRHQpLGJuPWNhKFNlLHRuLDAsdG4ubGVuZ3RoKTtyZXR1cm4gQmUmJih0bi5sZW5ndGg9Ym4pLHRufSxHbz17dHR5czpbXSxp''@;'; put 'put ''bml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoU2UsQmUpe0dvLnR0eXNbU2VdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOkJlfSxCdC5yZWdpc3RlckRldmljZShTZSxHby5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihTZSl7dmFyIEJlPUdvLnR0eXNbU2Uubm9kZS5yZGV2XTtp''@;'; put 'put ''ZighQmUpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNDMpO1NlLnR0eT1CZSxTZS5zZWVrYWJsZT0hMX0sY2xvc2UoU2Upe1NlLnR0eS5vcHMuZnN5bmMoU2UudHR5KX0sZnN5bmMoU2Upe1NlLnR0eS5vcHMuZnN5bmMoU2UudHR5KX0scmVhZChTZSxCZSxzdCxEdCx0bil7aWYoIVNlLnR0eXx8''@;'; put 'put ''IVNlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNjApO2Zvcih2YXIgYm49MCxCbj0wO0JuPER0O0JuKyspe3ZhciBRbjt0cnl7UW49U2UudHR5Lm9wcy5nZXRfY2hhcihTZS50dHkpfWNhdGNoe3Rocm93IG5ldyBCdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9''@;'; put 'put ''PT1RbiYmMD09PWJuKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PVFuKWJyZWFrO2JuKyssQmVbc3QrQm5dPVFufXJldHVybiBibiYmKFNlLm5vZGUuYXRpbWU9RGF0ZS5ub3coKSksYm59LHdyaXRlKFNlLEJlLHN0LER0LHRuKXtpZighU2UudHR5fHwhU2UudHR5Lm9wcy5w''@;'; put 'put ''dXRfY2hhcil0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgYm49MDtibjxEdDtibisrKVNlLnR0eS5vcHMucHV0X2NoYXIoU2UudHR5LEJlW3N0K2JuXSl9Y2F0Y2h7dGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoMjkpfXJldHVybiBEdCYmKFNlLm5vZGUubXRpbWU9U2Uu''@;'; put 'put ''bm9kZS5jdGltZT1EYXRlLm5vdygpKSxibn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6U2U9PmZpLmxlbmd0aD9maS5zaGlmdCgpOm51bGwscHV0X2NoYXIoU2UsQmUpe251bGw9PT1CZXx8MTA9PT1CZT8oSihrbihTZS5vdXRwdXQpKSxTZS5vdXRwdXQ9W10pOjAhPUJlJiZTZS5vdXRw''@;'; put 'put ''dXQucHVzaChCZSl9LGZzeW5jKFNlKXtTZS5vdXRwdXQ/Lmxlbmd0aD4wJiYoSihrbihTZS5vdXRwdXQpKSxTZS5vdXRwdXQ9W10pfSxpb2N0bF90Y2dldHM6U2U9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0''@;'; put 'put ''LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KFNlLEJlLHN0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OlNlPT5bMjQsODBdfSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihTZSxCZSl7bnVsbD09PUJl''@;'; put 'put ''fHwxMD09PUJlPyhjZShrbihTZS5vdXRwdXQpKSxTZS5vdXRwdXQ9W10pOjAhPUJlJiZTZS5vdXRwdXQucHVzaChCZSl9LGZzeW5jKFNlKXtTZS5vdXRwdXQ/Lmxlbmd0aD4wJiYoY2Uoa24oU2Uub3V0cHV0KSksU2Uub3V0cHV0PVtdKX19fSxlcz0oU2UsQmUpPT5NYXRoLmNlaWwoU2UvQmUp''@;'; put 'put ''KkJlLFpzPVNlPT57U2U9ZXMoU2UsNjU1MzYpO3ZhciBCZT1Cd2UoNjU1MzYsU2UpO3JldHVybiBCZSYmKChTZSxCZSk9PntadC5maWxsKDAsU2UsU2UrQmUpfSkoQmUsU2UpLEJlfSx6YT17b3BzX3RhYmxlOm51bGwsbW91bnQ6U2U9PnphLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCks''@;'; put 'put ''Y3JlYXRlTm9kZShTZSxCZSxzdCxEdCl7aWYoQnQuaXNCbGtkZXYoc3QpfHxCdC5pc0ZJRk8oc3QpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDYzKTt6YS5vcHNfdGFibGV8fD17ZGlyOntub2RlOntnZXRhdHRyOnphLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp6YS5ub2RlX29wcy5zZXRh''@;'; put 'put ''dHRyLGxvb2t1cDp6YS5ub2RlX29wcy5sb29rdXAsbWtub2Q6emEubm9kZV9vcHMubWtub2QscmVuYW1lOnphLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6emEubm9kZV9vcHMudW5saW5rLHJtZGlyOnphLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6emEubm9kZV9vcHMucmVhZGRpcixzeW1saW5r''@;'; put 'put ''OnphLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOnphLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjp6YS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6emEubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6emEuc3RyZWFtX29wcy5sbHNlZWss''@;'; put 'put ''cmVhZDp6YS5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6emEuc3RyZWFtX29wcy53cml0ZSxtbWFwOnphLnN0cmVhbV9vcHMubW1hcCxtc3luYzp6YS5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjp6YS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6emEubm9kZV9vcHMuc2V0''@;'; put 'put ''YXR0cixyZWFkbGluazp6YS5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6emEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnphLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpCdC5jaHJkZXZfc3RyZWFtX29wc319O3ZhciB0bj1CdC5jcmVhdGVO''@;'; put 'put ''b2RlKFNlLEJlLHN0LER0KTtyZXR1cm4gQnQuaXNEaXIodG4ubW9kZSk/KHRuLm5vZGVfb3BzPXphLm9wc190YWJsZS5kaXIubm9kZSx0bi5zdHJlYW1fb3BzPXphLm9wc190YWJsZS5kaXIuc3RyZWFtLHRuLmNvbnRlbnRzPXt9KTpCdC5pc0ZpbGUodG4ubW9kZSk/KHRuLm5vZGVfb3BzPXph''@;'; put 'put ''Lm9wc190YWJsZS5maWxlLm5vZGUsdG4uc3RyZWFtX29wcz16YS5vcHNfdGFibGUuZmlsZS5zdHJlYW0sdG4udXNlZEJ5dGVzPTAsdG4uY29udGVudHM9emEuZW1wdHlGaWxlQ29udGVudHM/Pz1uZXcgVWludDhBcnJheSgwKSk6QnQuaXNMaW5rKHRuLm1vZGUpPyh0bi5ub2RlX29wcz16YS5v''@;'; put 'put ''cHNfdGFibGUubGluay5ub2RlLHRuLnN0cmVhbV9vcHM9emEub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpCdC5pc0NocmRldih0bi5tb2RlKSYmKHRuLm5vZGVfb3BzPXphLm9wc190YWJsZS5jaHJkZXYubm9kZSx0bi5zdHJlYW1fb3BzPXphLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSx0bi5h''@;'; put 'put ''dGltZT10bi5tdGltZT10bi5jdGltZT1EYXRlLm5vdygpLFNlJiYoU2UuY29udGVudHNbQmVdPXRuLFNlLmF0aW1lPVNlLm10aW1lPVNlLmN0aW1lPXRuLmF0aW1lKSx0bn0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6U2U9PlNlLmNvbnRlbnRzLnN1YmFycmF5KDAsU2UudXNlZEJ5dGVzKSxl''@;'; put 'put ''eHBhbmRGaWxlU3RvcmFnZShTZSxCZSl7dmFyIHN0PVNlLmNvbnRlbnRzLmxlbmd0aDtpZighKHN0Pj1CZSkpe0JlPU1hdGgubWF4KEJlLHN0KihzdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksc3QmJihCZT1NYXRoLm1heChCZSwyNTYpKTt2YXIgdG49emEuZ2V0RmlsZURhdGFBc1R5cGVkQXJy''@;'; put 'put ''YXkoU2UpO1NlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KEJlKSxTZS5jb250ZW50cy5zZXQodG4pfX0scmVzaXplRmlsZVN0b3JhZ2UoU2UsQmUpe2lmKFNlLnVzZWRCeXRlcyE9QmUpe3ZhciBzdD1TZS5jb250ZW50cztTZS5jb250ZW50cz1uZXcgVWludDhBcnJheShCZSksU2UuY29udGVu''@;'; put 'put ''dHMuc2V0KHN0LnN1YmFycmF5KDAsTWF0aC5taW4oQmUsU2UudXNlZEJ5dGVzKSkpLFNlLnVzZWRCeXRlcz1CZX19LG5vZGVfb3BzOntnZXRhdHRyKFNlKXt2YXIgQmU9e307cmV0dXJuIEJlLmRldj1CdC5pc0NocmRldihTZS5tb2RlKT9TZS5pZDoxLEJlLmlubz1TZS5pZCxCZS5tb2RlPVNl''@;'; put 'put ''Lm1vZGUsQmUubmxpbms9MSxCZS51aWQ9MCxCZS5naWQ9MCxCZS5yZGV2PVNlLnJkZXYsQmUuc2l6ZT1CdC5pc0RpcihTZS5tb2RlKT80MDk2OkJ0LmlzRmlsZShTZS5tb2RlKT9TZS51c2VkQnl0ZXM6QnQuaXNMaW5rKFNlLm1vZGUpP1NlLmxpbmsubGVuZ3RoOjAsQmUuYXRpbWU9bmV3IERh''@;'; put 'put ''dGUoU2UuYXRpbWUpLEJlLm10aW1lPW5ldyBEYXRlKFNlLm10aW1lKSxCZS5jdGltZT1uZXcgRGF0ZShTZS5jdGltZSksQmUuYmxrc2l6ZT00MDk2LEJlLmJsb2Nrcz1NYXRoLmNlaWwoQmUuc2l6ZS9CZS5ibGtzaXplKSxCZX0sc2V0YXR0cihTZSxCZSl7Zm9yKGxldCBzdCBvZlsibW9kZSIs''@;'; put 'put ''ImF0aW1lIiwibXRpbWUiLCJjdGltZSJdKW51bGwhPUJlW3N0XSYmKFNlW3N0XT1CZVtzdF0pO3ZvaWQgMCE9PUJlLnNpemUmJnphLnJlc2l6ZUZpbGVTdG9yYWdlKFNlLEJlLnNpemUpfSxsb29rdXAoU2UsQmUpe3Rocm93IHphLmRvZXNOb3RFeGlzdEVycm9yfHwoemEuZG9lc05vdEV4aXN0''@;'; put 'put ''RXJyb3I9bmV3IEJ0LkVycm5vRXJyb3IoNDQpLHphLmRvZXNOb3RFeGlzdEVycm9yLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+IiksemEuZG9lc05vdEV4aXN0RXJyb3J9LG1rbm9kOihTZSxCZSxzdCxEdCk9PnphLmNyZWF0ZU5vZGUoU2UsQmUsc3QsRHQpLHJlbmFtZShTZSxC''@;'; put 'put ''ZSxzdCl7dmFyIER0O3RyeXtEdD1CdC5sb29rdXBOb2RlKEJlLHN0KX1jYXRjaHt9aWYoRHQpe2lmKEJ0LmlzRGlyKFNlLm1vZGUpKWZvcih2YXIgdG4gaW4gRHQuY29udGVudHMpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNTUpO0J0Lmhhc2hSZW1vdmVOb2RlKER0KX1kZWxldGUgU2UucGFy''@;'; put 'put ''ZW50LmNvbnRlbnRzW1NlLm5hbWVdLEJlLmNvbnRlbnRzW3N0XT1TZSxTZS5uYW1lPXN0LEJlLmN0aW1lPUJlLm10aW1lPVNlLnBhcmVudC5jdGltZT1TZS5wYXJlbnQubXRpbWU9RGF0ZS5ub3coKX0sdW5saW5rKFNlLEJlKXtkZWxldGUgU2UuY29udGVudHNbQmVdLFNlLmN0aW1lPVNlLm10''@;'; put 'put ''aW1lPURhdGUubm93KCl9LHJtZGlyKFNlLEJlKXt2YXIgc3Q9QnQubG9va3VwTm9kZShTZSxCZSk7Zm9yKHZhciBEdCBpbiBzdC5jb250ZW50cyl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig1NSk7ZGVsZXRlIFNlLmNvbnRlbnRzW0JlXSxTZS5jdGltZT1TZS5tdGltZT1EYXRlLm5vdygpfSxy''@;'; put 'put ''ZWFkZGlyOlNlPT5bIi4iLCIuLiIsLi4uT2JqZWN0LmtleXMoU2UuY29udGVudHMpXSxzeW1saW5rKFNlLEJlLHN0KXt2YXIgRHQ9emEuY3JlYXRlTm9kZShTZSxCZSw0MTQ3MSwwKTtyZXR1cm4gRHQubGluaz1zdCxEdH0scmVhZGxpbmsoU2Upe2lmKCFCdC5pc0xpbmsoU2UubW9kZSkpdGhy''@;'; put 'put ''b3cgbmV3IEJ0LkVycm5vRXJyb3IoMjgpO3JldHVybiBTZS5saW5rfX0sc3RyZWFtX29wczp7cmVhZChTZSxCZSxzdCxEdCx0bil7dmFyIGJuPVNlLm5vZGUuY29udGVudHM7aWYodG4+PVNlLm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciBCbj1NYXRoLm1pbihTZS5ub2RlLnVzZWRCeXRl''@;'; put 'put ''cy10bixEdCk7cmV0dXJuIEJlLnNldChibi5zdWJhcnJheSh0bix0bitCbiksc3QpLEJufSx3cml0ZShTZSxCZSxzdCxEdCx0bixibil7aWYoQmUuYnVmZmVyPT09SXQuYnVmZmVyJiYoYm49ITEpLCFEdClyZXR1cm4gMDt2YXIgQm49U2Uubm9kZTtyZXR1cm4gQm4ubXRpbWU9Qm4uY3RpbWU9''@;'; put 'put ''RGF0ZS5ub3coKSxibj8oQm4uY29udGVudHM9QmUuc3ViYXJyYXkoc3Qsc3QrRHQpLEJuLnVzZWRCeXRlcz1EdCk6MD09PUJuLnVzZWRCeXRlcyYmMD09PXRuPyhCbi5jb250ZW50cz1CZS5zbGljZShzdCxzdCtEdCksQm4udXNlZEJ5dGVzPUR0KTooemEuZXhwYW5kRmlsZVN0b3JhZ2UoQm4s''@;'; put 'put ''dG4rRHQpLEJuLmNvbnRlbnRzLnNldChCZS5zdWJhcnJheShzdCxzdCtEdCksdG4pLEJuLnVzZWRCeXRlcz1NYXRoLm1heChCbi51c2VkQnl0ZXMsdG4rRHQpKSxEdH0sbGxzZWVrKFNlLEJlLHN0KXt2YXIgRHQ9QmU7aWYoMT09PXN0P0R0Kz1TZS5wb3NpdGlvbjoyPT09c3QmJkJ0LmlzRmls''@;'; put 'put ''ZShTZS5ub2RlLm1vZGUpJiYoRHQrPVNlLm5vZGUudXNlZEJ5dGVzKSxEdDwwKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gRHR9LG1tYXAoU2UsQmUsc3QsRHQsdG4pe2lmKCFCdC5pc0ZpbGUoU2Uubm9kZS5tb2RlKSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig0Myk7dmFy''@;'; put 'put ''IGJuLEJuLFFuPVNlLm5vZGUuY29udGVudHM7aWYoMiZ0bnx8UW4uYnVmZmVyIT09SXQuYnVmZmVyKXtpZihCbj0hMCwhKGJuPVpzKEJlKSkpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNDgpO1FuJiYoKHN0PjB8fHN0K0JlPFFuLmxlbmd0aCkmJihRbj1Rbi5zdWJhcnJheT9Rbi5zdWJhcnJh''@;'; put 'put ''eShzdCxzdCtCZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUW4sc3Qsc3QrQmUpKSxJdC5zZXQoUW4sYm4pKX1lbHNlIEJuPSExLGJuPVFuLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpibixhbGxvY2F0ZWQ6Qm59fSxtc3luYzooU2UsQmUsc3QsRHQsdG4pPT4oemEuc3RyZWFtX29wcy53''@;'; put 'put ''cml0ZShTZSxCZSwwLER0LHN0LCExKSwwKX19LEpkPVNlPT4oInN0cmluZyI9PXR5cGVvZiBTZSYmKFNlPWZvKFNlLCEwKSksU2Uuc3ViYXJyYXl8fChTZT1uZXcgVWludDhBcnJheShTZSkpLFNlKSx5Yz0oU2UsQmUpPT57dmFyIHN0PTA7cmV0dXJuIFNlJiYoc3R8PTM2NSksQmUmJihzdHw9''@;'; put 'put ''MTQ2KSxzdH0sUWQ9ZnVuY3Rpb24oKXt2YXIgU2U9WihmdW5jdGlvbiooQmUpe3ZhciBzdD15aWVsZCBQKEJlKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc3QpfSk7cmV0dXJuIGZ1bmN0aW9uKHN0KXtyZXR1cm4gU2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx0cz0wLFloPW51bGwsWDU9''@;'; put 'put ''W10sR2g9ZnVuY3Rpb24oKXt2YXIgU2U9WihmdW5jdGlvbiooQmUsc3Qpe2Zvcih2YXIgRHQgb2YodHlwZW9mIEJyb3dzZXI8InUiJiZCcm93c2VyLmluaXQoKSxYNSkpaWYoRHQuY2FuSGFuZGxlKHN0KSlyZXR1cm4gRHQuaGFuZGxlKEJlLHN0KTtyZXR1cm4gQmV9KTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oc3QsRHQpe3JldHVybiBTZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLG0wPWZ1bmN0aW9uKCl7dmFyIFNlPVooZnVuY3Rpb24qKEJlLHN0LER0LHRuLGJuLEJuLFFuLGFpKXt2YXIgYWE9c3Q/X3IucmVzb2x2ZSh4bi5qb2luMihCZSxzdCkpOkJlO3RzKys7dHJ5e3ZhciBpbz1EdDsi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIER0JiYoaW89eWllbGQgUWQoRHQpKSxpbz15aWVsZCBHaChpbyxhYSksYWk/LigpLEJufHwoKC4uLlNlKT0+e0J0LmNyZWF0ZURhdGFGaWxlKC4uLlNlKX0pKEJlLHN0LGlvLHRuLGJuLFFuKX1maW5hbGx5eygoKT0+e2lmKDA9PS0tdHMmJlloKXt2YXIgQmU9WWg7''@;'; put 'put ''WWg9bnVsbCxCZSgpfX0pKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKHN0LER0LHRuLGJuLEJuLFFuLGFpLGFhKXtyZXR1cm4gU2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxCdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxl''@;'; put 'put ''Om51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxFcnJub0Vycm9yOmNsYXNze25hbWU9IkVycm5vRXJyb3IiO2NvbnN0cnVjdG9yKFNlKXt0aGlzLmVycm5vPVNlfX0sRlNTdHJl''@;'; put 'put ''YW06Y2xhc3N7c2hhcmVkPXt9O2dldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5ub2RlfXNldCBvYmplY3QoU2Upe3RoaXMubm9kZT1TZX1nZXQgaXNSZWFkKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc1dyaXRlKCl7cmV0dXJuISEoMjA5NzE1NSZ0aGlzLmZsYWdzKX1n''@;'; put 'put ''ZXQgaXNBcHBlbmQoKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfWdldCBmbGFncygpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc31zZXQgZmxhZ3MoU2Upe3RoaXMuc2hhcmVkLmZsYWdzPVNlfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24o''@;'; put 'put ''U2Upe3RoaXMuc2hhcmVkLnBvc2l0aW9uPVNlfX0sRlNOb2RlOmNsYXNze25vZGVfb3BzPXt9O3N0cmVhbV9vcHM9e307cmVhZE1vZGU9MzY1O3dyaXRlTW9kZT0xNDY7bW91bnRlZD1udWxsO2NvbnN0cnVjdG9yKFNlLEJlLHN0LER0KXtTZXx8KFNlPXRoaXMpLHRoaXMucGFyZW50PVNlLHRo''@;'; put 'put ''aXMubW91bnQ9U2UubW91bnQsdGhpcy5pZD1CdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9QmUsdGhpcy5tb2RlPXN0LHRoaXMucmRldj1EdCx0aGlzLmF0aW1lPXRoaXMubXRpbWU9dGhpcy5jdGltZT1EYXRlLm5vdygpfWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2Rl''@;'; put 'put ''KT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoU2Upe1NlP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUpPT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKFNlKXtTZT90''@;'; put 'put ''aGlzLm1vZGV8PXRoaXMud3JpdGVNb2RlOnRoaXMubW9kZSY9fnRoaXMud3JpdGVNb2RlfWdldCBpc0ZvbGRlcigpe3JldHVybiBCdC5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBCdC5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChTZSxCZT17fSl7aWYo''@;'; put 'put ''IVNlKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDQ0KTtCZS5mb2xsb3dfbW91bnQ/Pz0hMCx4bi5pc0FicyhTZSl8fChTZT1CdC5jd2QoKSsiLyIrU2UpO2U6Zm9yKHZhciBzdD0wO3N0PDQwO3N0Kyspe2Zvcih2YXIgRHQ9U2Uuc3BsaXQoIi8iKS5maWx0ZXIoYWE9PiEhYWEpLHRuPUJ0LnJv''@;'; put 'put ''b3QsYm49Ii8iLEJuPTA7Qm48RHQubGVuZ3RoO0JuKyspe3ZhciBRbj1Cbj09PUR0Lmxlbmd0aC0xO2lmKFFuJiZCZS5wYXJlbnQpYnJlYWs7aWYoIi4iIT09RHRbQm5dKXtpZigiLi4iPT09RHRbQm5dKXtpZihibj14bi5kaXJuYW1lKGJuKSxCdC5pc1Jvb3QodG4pKXtTZT1ibisiLyIrRHQu''@;'; put 'put ''c2xpY2UoQm4rMSkuam9pbigiLyIpLHN0LS07Y29udGludWUgZX10bj10bi5wYXJlbnQ7Y29udGludWV9Ym49eG4uam9pbjIoYm4sRHRbQm5dKTt0cnl7dG49QnQubG9va3VwTm9kZSh0bixEdFtCbl0pfWNhdGNoKGFhKXtpZig0ND09PWFhPy5lcnJubyYmUW4mJkJlLm5vZW50X29rYXkpcmV0''@;'; put 'put ''dXJue3BhdGg6Ym59O3Rocm93IGFhfWlmKEJ0LmlzTW91bnRwb2ludCh0bikmJighUW58fEJlLmZvbGxvd19tb3VudCkmJih0bj10bi5tb3VudGVkLnJvb3QpLEJ0LmlzTGluayh0bi5tb2RlKSYmKCFRbnx8QmUuZm9sbG93KSl7aWYoIXRuLm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBC''@;'; put 'put ''dC5FcnJub0Vycm9yKDUyKTt2YXIgYWk9dG4ubm9kZV9vcHMucmVhZGxpbmsodG4pO3huLmlzQWJzKGFpKXx8KGFpPXhuLmRpcm5hbWUoYm4pKyIvIithaSksU2U9YWkrIi8iK0R0LnNsaWNlKEJuKzEpLmpvaW4oIi8iKTtjb250aW51ZSBlfX19cmV0dXJue3BhdGg6Ym4sbm9kZTp0bn19dGhy''@;'; put 'put ''b3cgbmV3IEJ0LkVycm5vRXJyb3IoMzIpfSxnZXRQYXRoKFNlKXtmb3IodmFyIEJlOzspe2lmKEJ0LmlzUm9vdChTZSkpe3ZhciBzdD1TZS5tb3VudC5tb3VudHBvaW50O3JldHVybiBCZT8iLyIhPT1zdFtzdC5sZW5ndGgtMV0/YCR7c3R9LyR7QmV9YDpzdCtCZTpzdH1CZT1CZT9gJHtTZS5u''@;'; put 'put ''YW1lfS8ke0JlfWA6U2UubmFtZSxTZT1TZS5wYXJlbnR9fSxoYXNoTmFtZShTZSxCZSl7Zm9yKHZhciBzdD0wLER0PTA7RHQ8QmUubGVuZ3RoO0R0Kyspc3Q9KHN0PDw1KS1zdCtCZS5jaGFyQ29kZUF0KER0KXwwO3JldHVybihTZStzdD4+PjApJUJ0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hB''@;'; put 'put ''ZGROb2RlKFNlKXt2YXIgQmU9QnQuaGFzaE5hbWUoU2UucGFyZW50LmlkLFNlLm5hbWUpO1NlLm5hbWVfbmV4dD1CdC5uYW1lVGFibGVbQmVdLEJ0Lm5hbWVUYWJsZVtCZV09U2V9LGhhc2hSZW1vdmVOb2RlKFNlKXt2YXIgQmU9QnQuaGFzaE5hbWUoU2UucGFyZW50LmlkLFNlLm5hbWUpO2lm''@;'; put 'put ''KEJ0Lm5hbWVUYWJsZVtCZV09PT1TZSlCdC5uYW1lVGFibGVbQmVdPVNlLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgc3Q9QnQubmFtZVRhYmxlW0JlXTtzdDspe2lmKHN0Lm5hbWVfbmV4dD09PVNlKXtzdC5uYW1lX25leHQ9U2UubmFtZV9uZXh0O2JyZWFrfXN0PXN0Lm5hbWVfbmV4dH19LGxv''@;'; put 'put ''b2t1cE5vZGUoU2UsQmUpe3ZhciBzdD1CdC5tYXlMb29rdXAoU2UpO2lmKHN0KXRocm93IG5ldyBCdC5FcnJub0Vycm9yKHN0KTtmb3IodmFyIER0PUJ0Lmhhc2hOYW1lKFNlLmlkLEJlKSx0bj1CdC5uYW1lVGFibGVbRHRdO3RuO3RuPXRuLm5hbWVfbmV4dClpZih0bi5wYXJlbnQuaWQ9PT1T''@;'; put 'put ''ZS5pZCYmdG4ubmFtZT09PUJlKXJldHVybiB0bjtyZXR1cm4gQnQubG9va3VwKFNlLEJlKX0sY3JlYXRlTm9kZShTZSxCZSxzdCxEdCl7dmFyIHRuPW5ldyBCdC5GU05vZGUoU2UsQmUsc3QsRHQpO3JldHVybiBCdC5oYXNoQWRkTm9kZSh0biksdG59LGRlc3Ryb3lOb2RlKFNlKXtCdC5oYXNo''@;'; put 'put ''UmVtb3ZlTm9kZShTZSl9LGlzUm9vdDpTZT0+U2U9PT1TZS5wYXJlbnQsaXNNb3VudHBvaW50OlNlPT4hIVNlLm1vdW50ZWQsaXNGaWxlOlNlPT4zMjc2OD09KDYxNDQwJlNlKSxpc0RpcjpTZT0+MTYzODQ9PSg2MTQ0MCZTZSksaXNMaW5rOlNlPT40MDk2MD09KDYxNDQwJlNlKSxpc0NocmRl''@;'; put 'put ''djpTZT0+ODE5Mj09KDYxNDQwJlNlKSxpc0Jsa2RldjpTZT0+MjQ1NzY9PSg2MTQ0MCZTZSksaXNGSUZPOlNlPT40MDk2PT0oNjE0NDAmU2UpLGlzU29ja2V0OlNlPT4hKDQ5MTUyJn5TZSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoU2Upe3ZhciBCZT1bInIiLCJ3IiwicnciXVszJlNlXTty''@;'; put 'put ''ZXR1cm4gNTEyJlNlJiYoQmUrPSJ3IiksQmV9LG5vZGVQZXJtaXNzaW9uczooU2UsQmUpPT5CdC5pZ25vcmVQZXJtaXNzaW9ucz8wOkJlLmluY2x1ZGVzKCJyIikmJiEoMjkyJlNlLm1vZGUpfHxCZS5pbmNsdWRlcygidyIpJiYhKDE0NiZTZS5tb2RlKXx8QmUuaW5jbHVkZXMoIngiKSYmISg3''@;'; put 'put ''MyZTZS5tb2RlKT8yOjAsbWF5TG9va3VwOlNlPT5CdC5pc0RpcihTZS5tb2RlKT9CdC5ub2RlUGVybWlzc2lvbnMoU2UsIngiKXx8KFNlLm5vZGVfb3BzLmxvb2t1cD8wOjIpOjU0LG1heUNyZWF0ZShTZSxCZSl7aWYoIUJ0LmlzRGlyKFNlLm1vZGUpKXJldHVybiA1NDt0cnl7cmV0dXJuIEJ0''@;'; put 'put ''Lmxvb2t1cE5vZGUoU2UsQmUpLDIwfWNhdGNoe31yZXR1cm4gQnQubm9kZVBlcm1pc3Npb25zKFNlLCJ3eCIpfSxtYXlEZWxldGUoU2UsQmUsc3Qpe3ZhciBEdDt0cnl7RHQ9QnQubG9va3VwTm9kZShTZSxCZSl9Y2F0Y2goYm4pe3JldHVybiBibi5lcnJub312YXIgdG49QnQubm9kZVBlcm1p''@;'; put 'put ''c3Npb25zKFNlLCJ3eCIpO2lmKHRuKXJldHVybiB0bjtpZihzdCl7aWYoIUJ0LmlzRGlyKER0Lm1vZGUpKXJldHVybiA1NDtpZihCdC5pc1Jvb3QoRHQpfHxCdC5nZXRQYXRoKER0KT09PUJ0LmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKEJ0LmlzRGlyKER0Lm1vZGUpKXJldHVybiAzMTtyZXR1''@;'; put 'put ''cm4gMH0sbWF5T3BlbihTZSxCZSl7aWYoIVNlKXJldHVybiA0NDtpZihCdC5pc0xpbmsoU2UubW9kZSkpcmV0dXJuIDMyO3ZhciBzdD1CdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhCZSk7cmV0dXJuIEJ0LmlzRGlyKFNlLm1vZGUpJiYoInIiIT09c3R8fDU3NiZCZSk/MzE6QnQubm9kZVBl''@;'; put 'put ''cm1pc3Npb25zKFNlLHN0KX0sY2hlY2tPcEV4aXN0cyhTZSxCZSl7aWYoIVNlKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKEJlKTtyZXR1cm4gU2V9LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgU2U9MDtTZTw9QnQuTUFYX09QRU5fRkRTO1NlKyspaWYoIUJ0LnN0cmVhbXNb''@;'; put 'put ''U2VdKXJldHVybiBTZTt0aHJvdyBuZXcgQnQuRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoU2Upe3ZhciBCZT1CdC5nZXRTdHJlYW0oU2UpO2lmKCFCZSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig4KTtyZXR1cm4gQmV9LGdldFN0cmVhbTpTZT0+QnQuc3RyZWFtc1tTZV0sY3Jl''@;'; put 'put ''YXRlU3RyZWFtOihTZSxCZT0tMSk9PihTZT1PYmplY3QuYXNzaWduKG5ldyBCdC5GU1N0cmVhbSxTZSksLTE9PUJlJiYoQmU9QnQubmV4dGZkKCkpLFNlLmZkPUJlLEJ0LnN0cmVhbXNbQmVdPVNlLFNlKSxjbG9zZVN0cmVhbShTZSl7QnQuc3RyZWFtc1tTZV09bnVsbH0sZHVwU3RyZWFtKFNl''@;'; put 'put ''LEJlPS0xKXt2YXIgc3Q9QnQuY3JlYXRlU3RyZWFtKFNlLEJlKTtyZXR1cm4gc3Quc3RyZWFtX29wcz8uZHVwPy4oc3QpLHN0fSxkb1NldEF0dHIoU2UsQmUsc3Qpe3ZhciBEdD1TZT8uc3RyZWFtX29wcy5zZXRhdHRyLHRuPUR0P1NlOkJlO0R0Pz89QmUubm9kZV9vcHMuc2V0YXR0cixCdC5j''@;'; put 'put ''aGVja09wRXhpc3RzKER0LDYzKSxEdCh0bixzdCl9LGNocmRldl9zdHJlYW1fb3BzOntvcGVuKFNlKXt2YXIgQmU9QnQuZ2V0RGV2aWNlKFNlLm5vZGUucmRldik7U2Uuc3RyZWFtX29wcz1CZS5zdHJlYW1fb3BzLFNlLnN0cmVhbV9vcHMub3Blbj8uKFNlKX0sbGxzZWVrKCl7dGhyb3cgbmV3''@;'; put 'put ''IEJ0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6U2U9PlNlPj44LG1pbm9yOlNlPT4yNTUmU2UsbWFrZWRldjooU2UsQmUpPT5TZTw8OHxCZSxyZWdpc3RlckRldmljZShTZSxCZSl7QnQuZGV2aWNlc1tTZV09e3N0cmVhbV9vcHM6QmV9fSxnZXREZXZpY2U6U2U9PkJ0LmRldmljZXNbU2VdLGdl''@;'; put 'put ''dE1vdW50cyhTZSl7Zm9yKHZhciBCZT1bXSxzdD1bU2VdO3N0Lmxlbmd0aDspe3ZhciBEdD1zdC5wb3AoKTtCZS5wdXNoKER0KSxzdC5wdXNoKC4uLkR0Lm1vdW50cyl9cmV0dXJuIEJlfSxzeW5jZnMoU2UsQmUpeyJmdW5jdGlvbiI9PXR5cGVvZiBTZSYmKEJlPVNlLFNlPSExKSxCdC5zeW5j''@;'; put 'put ''RlNSZXF1ZXN0cysrLEJ0LnN5bmNGU1JlcXVlc3RzPjEmJmNlKGB3YXJuaW5nOiAke0J0LnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrYCk7dmFyIHN0PUJ0LmdldE1vdW50cyhCdC5y''@;'; put 'put ''b290Lm1vdW50KSxEdD0wO2Z1bmN0aW9uIHRuKFFuKXtyZXR1cm4gQnQuc3luY0ZTUmVxdWVzdHMtLSxCZShRbil9ZnVuY3Rpb24gYm4oUW4pe2lmKFFuKXJldHVybiBibi5lcnJvcmVkP3ZvaWQgMDooYm4uZXJyb3JlZD0hMCx0bihRbikpOysrRHQ+PXN0Lmxlbmd0aCYmdG4obnVsbCl9Zm9y''@;'; put 'put ''KHZhciBCbiBvZiBzdClCbi50eXBlLnN5bmNmcz9Cbi50eXBlLnN5bmNmcyhCbixTZSxibik6Ym4obnVsbCl9LG1vdW50KFNlLEJlLHN0KXt2YXIgYm4sRHQ9Ii8iPT09c3QsdG49IXN0O2lmKER0JiZCdC5yb290KXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDEwKTtpZighRHQmJiF0bil7dmFy''@;'; put 'put ''IEJuPUJ0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvd19tb3VudDohMX0pO2lmKHN0PUJuLnBhdGgsQnQuaXNNb3VudHBvaW50KGJuPUJuLm5vZGUpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDEwKTtpZighQnQuaXNEaXIoYm4ubW9kZSkpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNTQpfXZhciBR''@;'; put 'put ''bj17dHlwZTpTZSxvcHRzOkJlLG1vdW50cG9pbnQ6c3QsbW91bnRzOltdfSxhaT1TZS5tb3VudChRbik7cmV0dXJuIGFpLm1vdW50PVFuLFFuLnJvb3Q9YWksRHQ/QnQucm9vdD1haTpibiYmKGJuLm1vdW50ZWQ9UW4sYm4ubW91bnQmJmJuLm1vdW50Lm1vdW50cy5wdXNoKFFuKSksYWl9LHVu''@;'; put 'put ''bW91bnQoU2Upe3ZhciBCZT1CdC5sb29rdXBQYXRoKFNlLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighQnQuaXNNb3VudHBvaW50KEJlLm5vZGUpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDI4KTt2YXIgc3Q9QmUubm9kZSxEdD1zdC5tb3VudGVkLHRuPUJ0LmdldE1vdW50cyhEdCk7Zm9yKHZh''@;'; put 'put ''cltibixCbl1vZiBPYmplY3QuZW50cmllcyhCdC5uYW1lVGFibGUpKWZvcig7Qm47KXt2YXIgUW49Qm4ubmFtZV9uZXh0O3RuLmluY2x1ZGVzKEJuLm1vdW50KSYmQnQuZGVzdHJveU5vZGUoQm4pLEJuPVFufXN0Lm1vdW50ZWQ9bnVsbDt2YXIgYWk9c3QubW91bnQubW91bnRzLmluZGV4T2Yo''@;'; put 'put ''RHQpO3N0Lm1vdW50Lm1vdW50cy5zcGxpY2UoYWksMSl9LGxvb2t1cDooU2UsQmUpPT5TZS5ub2RlX29wcy5sb29rdXAoU2UsQmUpLG1rbm9kKFNlLEJlLHN0KXt2YXIgdG49QnQubG9va3VwUGF0aChTZSx7cGFyZW50OiEwfSkubm9kZSxibj14bi5iYXNlbmFtZShTZSk7aWYoIWJuKXRocm93''@;'; put 'put ''IG5ldyBCdC5FcnJub0Vycm9yKDI4KTtpZigiLiI9PT1ibnx8Ii4uIj09PWJuKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDIwKTt2YXIgQm49QnQubWF5Q3JlYXRlKHRuLGJuKTtpZihCbil0aHJvdyBuZXcgQnQuRXJybm9FcnJvcihCbik7aWYoIXRuLm5vZGVfb3BzLm1rbm9kKXRocm93IG5l''@;'; put 'put ''dyBCdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gdG4ubm9kZV9vcHMubWtub2QodG4sYm4sQmUsc3QpfSxzdGF0ZnM6U2U9PkJ0LnN0YXRmc05vZGUoQnQubG9va3VwUGF0aChTZSx7Zm9sbG93OiEwfSkubm9kZSksc3RhdGZzU3RyZWFtOlNlPT5CdC5zdGF0ZnNOb2RlKFNlLm5vZGUpLHN0YXRm''@;'; put 'put ''c05vZGUoU2Upe3ZhciBCZT17YnNpemU6NDA5NixmcnNpemU6NDA5NixibG9ja3M6MWU2LGJmcmVlOjVlNSxiYXZhaWw6NWU1LGZpbGVzOkJ0Lm5leHRJbm9kZSxmZnJlZTpCdC5uZXh0SW5vZGUtMSxmc2lkOjQyLGZsYWdzOjIsbmFtZWxlbjoyNTV9O3JldHVybiBTZS5ub2RlX29wcy5zdGF0''@;'; put 'put ''ZnMmJk9iamVjdC5hc3NpZ24oQmUsU2Uubm9kZV9vcHMuc3RhdGZzKFNlLm1vdW50Lm9wdHMucm9vdCkpLEJlfSxjcmVhdGU6KFNlLEJlPTQzOCk9PihCZSY9NDA5NSxCdC5ta25vZChTZSxCZXw9MzI3NjgsMCkpLG1rZGlyOihTZSxCZT01MTEpPT4oQmUmPTEwMjMsQnQubWtub2QoU2UsQmV8''@;'; put 'put ''PTE2Mzg0LDApKSxta2RpclRyZWUoU2UsQmUpe3ZhciBzdD1TZS5zcGxpdCgiLyIpLER0PSIiO2Zvcih2YXIgdG4gb2Ygc3QpaWYodG4peyhEdHx8eG4uaXNBYnMoU2UpKSYmKER0Kz0iLyIpLER0Kz10bjt0cnl7QnQubWtkaXIoRHQsQmUpfWNhdGNoKGJuKXtpZigyMCE9Ym4uZXJybm8pdGhy''@;'; put 'put ''b3cgYm59fX0sbWtkZXY6KFNlLEJlLHN0KT0+KHR5cGVvZiBzdD4idSImJihzdD1CZSxCZT00MzgpLEJ0Lm1rbm9kKFNlLEJlfD04MTkyLHN0KSksc3ltbGluayhTZSxCZSl7aWYoIV9yLnJlc29sdmUoU2UpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDQ0KTt2YXIgRHQ9QnQubG9va3VwUGF0''@;'; put 'put ''aChCZSx7cGFyZW50OiEwfSkubm9kZTtpZighRHQpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNDQpO3ZhciB0bj14bi5iYXNlbmFtZShCZSksYm49QnQubWF5Q3JlYXRlKER0LHRuKTtpZihibil0aHJvdyBuZXcgQnQuRXJybm9FcnJvcihibik7aWYoIUR0Lm5vZGVfb3BzLnN5bWxpbmspdGhy''@;'; put 'put ''b3cgbmV3IEJ0LkVycm5vRXJyb3IoNjMpO3JldHVybiBEdC5ub2RlX29wcy5zeW1saW5rKER0LHRuLFNlKX0scmVuYW1lKFNlLEJlKXt2YXIgUW4sYWksc3Q9eG4uZGlybmFtZShTZSksRHQ9eG4uZGlybmFtZShCZSksdG49eG4uYmFzZW5hbWUoU2UpLGJuPXhuLmJhc2VuYW1lKEJlKTtpZihR''@;'; put 'put ''bj1CdC5sb29rdXBQYXRoKFNlLHtwYXJlbnQ6ITB9KS5ub2RlLGFpPUJ0Lmxvb2t1cFBhdGgoQmUse3BhcmVudDohMH0pLm5vZGUsIVFufHwhYWkpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNDQpO2lmKFFuLm1vdW50IT09YWkubW91bnQpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNzUpO3Zh''@;'; put 'put ''ciBpbyxhYT1CdC5sb29rdXBOb2RlKFFuLHRuKSxZYT1fci5yZWxhdGl2ZShTZSxEdCk7aWYoIi4iIT09WWEuY2hhckF0KDApKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oWWE9X3IucmVsYXRpdmUoQmUsc3QpKS5jaGFyQXQoMCkpdGhyb3cgbmV3IEJ0LkVycm5vRXJy''@;'; put 'put ''b3IoNTUpO3RyeXtpbz1CdC5sb29rdXBOb2RlKGFpLGJuKX1jYXRjaHt9aWYoYWEhPT1pbyl7dmFyIE5hPUJ0LmlzRGlyKGFhLm1vZGUpLEthPUJ0Lm1heURlbGV0ZShRbix0bixOYSk7aWYoS2EpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoS2EpO2lmKEthPWlvP0J0Lm1heURlbGV0ZShhaSxi''@;'; put 'put ''bixOYSk6QnQubWF5Q3JlYXRlKGFpLGJuKSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcihLYSk7aWYoIVFuLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig2Myk7aWYoQnQuaXNNb3VudHBvaW50KGFhKXx8aW8mJkJ0LmlzTW91bnRwb2ludChpbykpdGhyb3cgbmV3IEJ0''@;'; put 'put ''LkVycm5vRXJyb3IoMTApO2lmKGFpIT09UW4mJihLYT1CdC5ub2RlUGVybWlzc2lvbnMoUW4sInciKSkpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoS2EpO0J0Lmhhc2hSZW1vdmVOb2RlKGFhKTt0cnl7UW4ubm9kZV9vcHMucmVuYW1lKGFhLGFpLGJuKSxhYS5wYXJlbnQ9YWl9Y2F0Y2goeHMp''@;'; put 'put ''e3Rocm93IHhzfWZpbmFsbHl7QnQuaGFzaEFkZE5vZGUoYWEpfX19LHJtZGlyKFNlKXt2YXIgc3Q9QnQubG9va3VwUGF0aChTZSx7cGFyZW50OiEwfSkubm9kZSxEdD14bi5iYXNlbmFtZShTZSksdG49QnQubG9va3VwTm9kZShzdCxEdCksYm49QnQubWF5RGVsZXRlKHN0LER0LCEwKTtpZihi''@;'; put 'put ''bil0aHJvdyBuZXcgQnQuRXJybm9FcnJvcihibik7aWYoIXN0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDYzKTtpZihCdC5pc01vdW50cG9pbnQodG4pKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDEwKTtzdC5ub2RlX29wcy5ybWRpcihzdCxEdCksQnQuZGVzdHJv''@;'; put 'put ''eU5vZGUodG4pfSxyZWFkZGlyKFNlKXt2YXIgc3Q9QnQubG9va3VwUGF0aChTZSx7Zm9sbG93OiEwfSkubm9kZTtyZXR1cm4gQnQuY2hlY2tPcEV4aXN0cyhzdC5ub2RlX29wcy5yZWFkZGlyLDU0KShzdCl9LHVubGluayhTZSl7dmFyIHN0PUJ0Lmxvb2t1cFBhdGgoU2Use3BhcmVudDohMH0p''@;'; put 'put ''Lm5vZGU7aWYoIXN0KXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDQ0KTt2YXIgRHQ9eG4uYmFzZW5hbWUoU2UpLHRuPUJ0Lmxvb2t1cE5vZGUoc3QsRHQpLGJuPUJ0Lm1heURlbGV0ZShzdCxEdCwhMSk7aWYoYm4pdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoYm4pO2lmKCFzdC5ub2RlX29wcy51''@;'; put 'put ''bmxpbmspdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNjMpO2lmKEJ0LmlzTW91bnRwb2ludCh0bikpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoMTApO3N0Lm5vZGVfb3BzLnVubGluayhzdCxEdCksQnQuZGVzdHJveU5vZGUodG4pfSxyZWFkbGluayhTZSl7dmFyIHN0PUJ0Lmxvb2t1cFBhdGgo''@;'; put 'put ''U2UpLm5vZGU7aWYoIXN0KXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDQ0KTtpZighc3Qubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoMjgpO3JldHVybiBzdC5ub2RlX29wcy5yZWFkbGluayhzdCl9LHN0YXQoU2UsQmUpe3ZhciBEdD1CdC5sb29rdXBQYXRoKFNl''@;'; put 'put ''LHtmb2xsb3c6IUJlfSkubm9kZTtyZXR1cm4gQnQuY2hlY2tPcEV4aXN0cyhEdC5ub2RlX29wcy5nZXRhdHRyLDYzKShEdCl9LGZzdGF0KFNlKXt2YXIgQmU9QnQuZ2V0U3RyZWFtQ2hlY2tlZChTZSksc3Q9QmUubm9kZSxEdD1CZS5zdHJlYW1fb3BzLmdldGF0dHIsdG49RHQ/QmU6c3Q7cmV0''@;'; put 'put ''dXJuIER0Pz89c3Qubm9kZV9vcHMuZ2V0YXR0cixCdC5jaGVja09wRXhpc3RzKER0LDYzKSxEdCh0bil9LGxzdGF0OlNlPT5CdC5zdGF0KFNlLCEwKSxkb0NobW9kKFNlLEJlLHN0LER0KXtCdC5kb1NldEF0dHIoU2UsQmUse21vZGU6NDA5NSZzdHwtNDA5NiZCZS5tb2RlLGN0aW1lOkRhdGUu''@;'; put 'put ''bm93KCksZG9udEZvbGxvdzpEdH0pfSxjaG1vZChTZSxCZSxzdCl7dmFyIER0O0R0PSJzdHJpbmciPT10eXBlb2YgU2U/QnQubG9va3VwUGF0aChTZSx7Zm9sbG93OiFzdH0pLm5vZGU6U2UsQnQuZG9DaG1vZChudWxsLER0LEJlLHN0KX0sbGNobW9kKFNlLEJlKXtCdC5jaG1vZChTZSxCZSwh''@;'; put 'put ''MCl9LGZjaG1vZChTZSxCZSl7dmFyIHN0PUJ0LmdldFN0cmVhbUNoZWNrZWQoU2UpO0J0LmRvQ2htb2Qoc3Qsc3Qubm9kZSxCZSwhMSl9LGRvQ2hvd24oU2UsQmUsc3Qpe0J0LmRvU2V0QXR0cihTZSxCZSx7dGltZXN0YW1wOkRhdGUubm93KCksZG9udEZvbGxvdzpzdH0pfSxjaG93bihTZSxC''@;'; put 'put ''ZSxzdCxEdCl7dmFyIHRuO3RuPSJzdHJpbmciPT10eXBlb2YgU2U/QnQubG9va3VwUGF0aChTZSx7Zm9sbG93OiFEdH0pLm5vZGU6U2UsQnQuZG9DaG93bihudWxsLHRuLER0KX0sbGNob3duKFNlLEJlLHN0KXtCdC5jaG93bihTZSxCZSxzdCwhMCl9LGZjaG93bihTZSxCZSxzdCl7dmFyIER0''@;'; put 'put ''PUJ0LmdldFN0cmVhbUNoZWNrZWQoU2UpO0J0LmRvQ2hvd24oRHQsRHQubm9kZSwhMSl9LGRvVHJ1bmNhdGUoU2UsQmUsc3Qpe2lmKEJ0LmlzRGlyKEJlLm1vZGUpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDMxKTtpZighQnQuaXNGaWxlKEJlLm1vZGUpKXRocm93IG5ldyBCdC5FcnJub0Vy''@;'; put 'put ''cm9yKDI4KTt2YXIgRHQ9QnQubm9kZVBlcm1pc3Npb25zKEJlLCJ3Iik7aWYoRHQpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoRHQpO0J0LmRvU2V0QXR0cihTZSxCZSx7c2l6ZTpzdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSx0cnVuY2F0ZShTZSxCZSl7aWYoQmU8MCl0aHJvdyBuZXcgQnQu''@;'; put 'put ''RXJybm9FcnJvcigyOCk7dmFyIHN0O3N0PSJzdHJpbmciPT10eXBlb2YgU2U/QnQubG9va3VwUGF0aChTZSx7Zm9sbG93OiEwfSkubm9kZTpTZSxCdC5kb1RydW5jYXRlKG51bGwsc3QsQmUpfSxmdHJ1bmNhdGUoU2UsQmUpe3ZhciBzdD1CdC5nZXRTdHJlYW1DaGVja2VkKFNlKTtpZihCZTww''@;'; put 'put ''fHwhKDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDI4KTtCdC5kb1RydW5jYXRlKHN0LHN0Lm5vZGUsQmUpfSx1dGltZShTZSxCZSxzdCl7dmFyIHRuPUJ0Lmxvb2t1cFBhdGgoU2Use2ZvbGxvdzohMH0pLm5vZGU7QnQuY2hlY2tPcEV4aXN0cyh0bi5ub2RlX29w''@;'; put 'put ''cy5zZXRhdHRyLDYzKSh0bix7YXRpbWU6QmUsbXRpbWU6c3R9KX0sb3BlbihTZSxCZSxzdD00Mzgpe2lmKCIiPT09U2UpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNDQpO3ZhciBEdCx0bjtpZihCZT0oU2U9PntpZigic3RyaW5nIiE9dHlwZW9mIFNlKXJldHVybiBTZTt2YXIgc3Q9e3I6MCwi''@;'; put 'put ''cisiOjIsdzo1NzcsIncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH1bU2VdO2lmKHR5cGVvZiBzdD4idSIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAke1NlfWApO3JldHVybiBzdH0pKEJlKSxzdD02NCZCZT80MDk1JnN0fDMyNzY4OjAsIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBTZSlEdD1TZTtlbHNle3RuPVNlLmVuZHNXaXRoKCIvIik7dmFyIGJuPUJ0Lmxvb2t1cFBhdGgoU2Use2ZvbGxvdzohKDEzMTA3MiZCZSksbm9lbnRfb2theTohMH0pO0R0PWJuLm5vZGUsU2U9Ym4ucGF0aH12YXIgQm49ITE7aWYoNjQmQmUpaWYoRHQpe2lmKDEyOCZCZSl0aHJvdyBuZXcg''@;'; put 'put ''QnQuRXJybm9FcnJvcigyMCl9ZWxzZXtpZih0bil0aHJvdyBuZXcgQnQuRXJybm9FcnJvcigzMSk7RHQ9QnQubWtub2QoU2UsNTExfHN0LDApLEJuPSEwfWlmKCFEdCl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig0NCk7aWYoQnQuaXNDaHJkZXYoRHQubW9kZSkmJihCZSY9LTUxMyksNjU1MzYm''@;'; put 'put ''QmUmJiFCdC5pc0RpcihEdC5tb2RlKSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig1NCk7aWYoIUJuKXt2YXIgUW49QnQubWF5T3BlbihEdCxCZSk7aWYoUW4pdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoUW4pfTUxMiZCZSYmIUJuJiZCdC50cnVuY2F0ZShEdCwwKSxCZSY9LTEzMTcxMzt2YXIg''@;'; put 'put ''YWk9QnQuY3JlYXRlU3RyZWFtKHtub2RlOkR0LHBhdGg6QnQuZ2V0UGF0aChEdCksZmxhZ3M6QmUsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOkR0LnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gYWkuc3RyZWFtX29wcy5vcGVuJiZhaS5zdHJlYW1f''@;'; put 'put ''b3BzLm9wZW4oYWkpLEJuJiZCdC5jaG1vZChEdCw1MTEmc3QpLGFpfSxjbG9zZShTZSl7aWYoQnQuaXNDbG9zZWQoU2UpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDgpO1NlLmdldGRlbnRzJiYoU2UuZ2V0ZGVudHM9bnVsbCk7dHJ5e1NlLnN0cmVhbV9vcHMuY2xvc2UmJlNlLnN0cmVhbV9v''@;'; put 'put ''cHMuY2xvc2UoU2UpfWNhdGNoKEJlKXt0aHJvdyBCZX1maW5hbGx5e0J0LmNsb3NlU3RyZWFtKFNlLmZkKX1TZS5mZD1udWxsfSxpc0Nsb3NlZDpTZT0+bnVsbD09PVNlLmZkLGxsc2VlayhTZSxCZSxzdCl7aWYoQnQuaXNDbG9zZWQoU2UpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDgpO2lm''@;'; put 'put ''KCFTZS5zZWVrYWJsZXx8IVNlLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDcwKTtpZigwIT1zdCYmMSE9c3QmJjIhPXN0KXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gU2UucG9zaXRpb249U2Uuc3RyZWFtX29wcy5sbHNlZWsoU2UsQmUsc3Qp''@;'; put 'put ''LFNlLnVuZ290dGVuPVtdLFNlLnBvc2l0aW9ufSxyZWFkKFNlLEJlLHN0LER0LHRuKXtpZihEdDwwfHx0bjwwKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDI4KTtpZihCdC5pc0Nsb3NlZChTZSkpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoOCk7aWYoMT09KDIwOTcxNTUmU2UuZmxhZ3MpKXRo''@;'; put 'put ''cm93IG5ldyBCdC5FcnJub0Vycm9yKDgpO2lmKEJ0LmlzRGlyKFNlLm5vZGUubW9kZSkpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoMzEpO2lmKCFTZS5zdHJlYW1fb3BzLnJlYWQpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoMjgpO3ZhciBibj10eXBlb2YgdG48InUiO2lmKGJuKXtpZighU2Uu''@;'; put 'put ''c2Vla2FibGUpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNzApfWVsc2UgdG49U2UucG9zaXRpb247dmFyIEJuPVNlLnN0cmVhbV9vcHMucmVhZChTZSxCZSxzdCxEdCx0bik7cmV0dXJuIGJufHwoU2UucG9zaXRpb24rPUJuKSxCbn0sd3JpdGUoU2UsQmUsc3QsRHQsdG4sYm4pe2lmKER0PDB8''@;'; put 'put ''fHRuPDApdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoMjgpO2lmKEJ0LmlzQ2xvc2VkKFNlKSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmU2UuZmxhZ3MpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDgpO2lmKEJ0LmlzRGlyKFNlLm5vZGUubW9kZSkpdGhyb3cgbmV3''@;'; put 'put ''IEJ0LkVycm5vRXJyb3IoMzEpO2lmKCFTZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDI4KTtTZS5zZWVrYWJsZSYmMTAyNCZTZS5mbGFncyYmQnQubGxzZWVrKFNlLDAsMik7dmFyIEJuPXR5cGVvZiB0bjwidSI7aWYoQm4pe2lmKCFTZS5zZWVrYWJsZSl0aHJv''@;'; put 'put ''dyBuZXcgQnQuRXJybm9FcnJvcig3MCl9ZWxzZSB0bj1TZS5wb3NpdGlvbjt2YXIgUW49U2Uuc3RyZWFtX29wcy53cml0ZShTZSxCZSxzdCxEdCx0bixibik7cmV0dXJuIEJufHwoU2UucG9zaXRpb24rPVFuKSxRbn0sbW1hcChTZSxCZSxzdCxEdCx0bil7aWYoMiZEdCYmISgyJnRuKSYmMiE9''@;'; put 'put ''KDIwOTcxNTUmU2UuZmxhZ3MpKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JlNlLmZsYWdzKSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcigyKTtpZighU2Uuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDQzKTtpZighQmUpdGhyb3cgbmV3''@;'; put 'put ''IEJ0LkVycm5vRXJyb3IoMjgpO3JldHVybiBTZS5zdHJlYW1fb3BzLm1tYXAoU2UsQmUsc3QsRHQsdG4pfSxtc3luYzooU2UsQmUsc3QsRHQsdG4pPT5TZS5zdHJlYW1fb3BzLm1zeW5jP1NlLnN0cmVhbV9vcHMubXN5bmMoU2UsQmUsc3QsRHQsdG4pOjAsaW9jdGwoU2UsQmUsc3Qpe2lmKCFT''@;'; put 'put ''ZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBCdC5FcnJub0Vycm9yKDU5KTtyZXR1cm4gU2Uuc3RyZWFtX29wcy5pb2N0bChTZSxCZSxzdCl9LHJlYWRGaWxlKFNlLEJlPXt9KXtCZS5mbGFncz1CZS5mbGFnc3x8MCxCZS5lbmNvZGluZz1CZS5lbmNvZGluZ3x8ImJpbmFyeSIsInV0Zjgi''@;'; put 'put ''IT09QmUuZW5jb2RpbmcmJiJiaW5hcnkiIT09QmUuZW5jb2RpbmcmJlpuKGBJbnZhbGlkIGVuY29kaW5nIHR5cGUgIiR7QmUuZW5jb2Rpbmd9ImApO3ZhciBzdD1CdC5vcGVuKFNlLEJlLmZsYWdzKSx0bj1CdC5zdGF0KFNlKS5zaXplLGJuPW5ldyBVaW50OEFycmF5KHRuKTtyZXR1cm4gQnQu''@;'; put 'put ''cmVhZChzdCxibiwwLHRuLDApLCJ1dGY4Ij09PUJlLmVuY29kaW5nJiYoYm49a24oYm4pKSxCdC5jbG9zZShzdCksYm59LHdyaXRlRmlsZShTZSxCZSxzdD17fSl7c3QuZmxhZ3M9c3QuZmxhZ3N8fDU3Nzt2YXIgRHQ9QnQub3BlbihTZSxzdC5mbGFncyxzdC5tb2RlKTtCZT1KZChCZSksQnQu''@;'; put 'put ''d3JpdGUoRHQsQmUsMCxCZS5ieXRlTGVuZ3RoLHZvaWQgMCxzdC5jYW5Pd24pLEJ0LmNsb3NlKER0KX0sY3dkOigpPT5CdC5jdXJyZW50UGF0aCxjaGRpcihTZSl7dmFyIEJlPUJ0Lmxvb2t1cFBhdGgoU2Use2ZvbGxvdzohMH0pO2lmKG51bGw9PT1CZS5ub2RlKXRocm93IG5ldyBCdC5FcnJu''@;'; put 'put ''b0Vycm9yKDQ0KTtpZighQnQuaXNEaXIoQmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig1NCk7dmFyIHN0PUJ0Lm5vZGVQZXJtaXNzaW9ucyhCZS5ub2RlLCJ4Iik7aWYoc3QpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3Ioc3QpO0J0LmN1cnJlbnRQYXRoPUJlLnBhdGh9LGNy''@;'; put 'put ''ZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe0J0Lm1rZGlyKCIvdG1wIiksQnQubWtkaXIoIi9ob21lIiksQnQubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7QnQubWtkaXIoIi9kZXYiKSxCdC5yZWdpc3RlckRldmljZShCdC5tYWtlZGV2KDEsMykse3Jl''@;'; put 'put ''YWQ6KCk9PjAsd3JpdGU6KER0LHRuLGJuLEJuLFFuKT0+Qm4sbGxzZWVrOigpPT4wfSksQnQubWtkZXYoIi9kZXYvbnVsbCIsQnQubWFrZWRldigxLDMpKSxHby5yZWdpc3RlcihCdC5tYWtlZGV2KDUsMCksR28uZGVmYXVsdF90dHlfb3BzKSxHby5yZWdpc3RlcihCdC5tYWtlZGV2KDYsMCks''@;'; put 'put ''R28uZGVmYXVsdF90dHkxX29wcyksQnQubWtkZXYoIi9kZXYvdHR5IixCdC5tYWtlZGV2KDUsMCkpLEJ0Lm1rZGV2KCIvZGV2L3R0eTEiLEJ0Lm1ha2VkZXYoNiwwKSk7dmFyIFNlPW5ldyBVaW50OEFycmF5KDEwMjQpLEJlPTAsc3Q9KCk9PigwPT09QmUmJih4cihTZSksQmU9U2UuYnl0ZUxl''@;'; put 'put ''bmd0aCksU2VbLS1CZV0pO0J0LmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRvbSIsc3QpLEJ0LmNyZWF0ZURldmljZSgiL2RldiIsInVyYW5kb20iLHN0KSxCdC5ta2RpcigiL2Rldi9zaG0iKSxCdC5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3Rvcmllcygpe0J0''@;'; put 'put ''Lm1rZGlyKCIvcHJvYyIpO3ZhciBTZT1CdC5ta2RpcigiL3Byb2Mvc2VsZiIpO0J0Lm1rZGlyKCIvcHJvYy9zZWxmL2ZkIiksQnQubW91bnQoe21vdW50KCl7dmFyIEJlPUJ0LmNyZWF0ZU5vZGUoU2UsImZkIiwxNjg5NSw3Myk7cmV0dXJuIEJlLnN0cmVhbV9vcHM9e2xsc2Vlazp6YS5zdHJl''@;'; put 'put ''YW1fb3BzLmxsc2Vla30sQmUubm9kZV9vcHM9e2xvb2t1cChzdCxEdCl7dmFyIHRuPStEdCxibj1CdC5nZXRTdHJlYW1DaGVja2VkKHRuKSxCbj17cGFyZW50Om51bGwsbW91bnQ6e21vdW50cG9pbnQ6ImZha2UifSxub2RlX29wczp7cmVhZGxpbms6KCk9PmJuLnBhdGh9LGlkOnRuKzF9O3Jl''@;'; put 'put ''dHVybiBCbi5wYXJlbnQ9Qm4sQm59LHJlYWRkaXI6KCk9PkFycmF5LmZyb20oQnQuc3RyZWFtcy5lbnRyaWVzKCkpLmZpbHRlcigoW3N0LER0XSk9PkR0KS5tYXAoKFtzdCxEdF0pPT5zdC50b1N0cmluZygpKX0sQmV9fSx7fSwiL3Byb2Mvc2VsZi9mZCIpfSxjcmVhdGVTdGFuZGFyZFN0cmVh''@;'; put 'put ''bXMoU2UsQmUsc3Qpe1NlP0J0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixTZSk6QnQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZGluIiksQmU/QnQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLEJlKTpCdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0''@;'; put 'put ''Iiksc3Q/QnQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLHN0KTpCdC5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpLEJ0Lm9wZW4oIi9kZXYvc3RkaW4iLDApLEJ0Lm9wZW4oIi9kZXYvc3Rkb3V0IiwxKSxCdC5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LHN0YXRp''@;'; put 'put ''Y0luaXQoKXtCdC5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYpLEJ0Lm1vdW50KHphLHt9LCIvIiksQnQuY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCksQnQuY3JlYXRlRGVmYXVsdERldmljZXMoKSxCdC5jcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKSxCdC5maWxlc3lzdGVtcz17TUVNRlM6''@;'; put 'put ''emF9fSxpbml0KFNlLEJlLHN0KXtCdC5pbml0aWFsaXplZD0hMCxCdC5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoU2UsQmUsc3QpfSxxdWl0KCl7Zm9yKHZhciBTZSBvZihCdC5pbml0aWFsaXplZD0hMSxCdC5zdHJlYW1zKSlTZSYmQnQuY2xvc2UoU2UpfSxmaW5kT2JqZWN0KFNlLEJlKXt2YXIg''@;'; put 'put ''c3Q9QnQuYW5hbHl6ZVBhdGgoU2UsQmUpO3JldHVybiBzdC5leGlzdHM/c3Qub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoKFNlLEJlKXt0cnl7U2U9KHN0PUJ0Lmxvb2t1cFBhdGgoU2Use2ZvbGxvdzohQmV9KSkucGF0aH1jYXRjaHt9dmFyIER0PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9y''@;'; put 'put ''OjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIHN0PUJ0Lmxvb2t1cFBhdGgoU2Use3BhcmVudDohMH0pO0R0LnBhcmVudEV4aXN0cz0hMCxEdC5wYXJlbnRQYXRoPXN0LnBh''@;'; put 'put ''dGgsRHQucGFyZW50T2JqZWN0PXN0Lm5vZGUsRHQubmFtZT14bi5iYXNlbmFtZShTZSksc3Q9QnQubG9va3VwUGF0aChTZSx7Zm9sbG93OiFCZX0pLER0LmV4aXN0cz0hMCxEdC5wYXRoPXN0LnBhdGgsRHQub2JqZWN0PXN0Lm5vZGUsRHQubmFtZT1zdC5ub2RlLm5hbWUsRHQuaXNSb290PSIv''@;'; put 'put ''Ij09PXN0LnBhdGh9Y2F0Y2godG4pe0R0LmVycm9yPXRuLmVycm5vfXJldHVybiBEdH0sY3JlYXRlUGF0aChTZSxCZSxzdCxEdCl7U2U9InN0cmluZyI9PXR5cGVvZiBTZT9TZTpCdC5nZXRQYXRoKFNlKTtmb3IodmFyIHRuPUJlLnNwbGl0KCIvIikucmV2ZXJzZSgpO3RuLmxlbmd0aDspe3Zh''@;'; put 'put ''ciBibj10bi5wb3AoKTtpZihibil7dmFyIEJuPXhuLmpvaW4yKFNlLGJuKTt0cnl7QnQubWtkaXIoQm4pfWNhdGNoKFFuKXtpZigyMCE9UW4uZXJybm8pdGhyb3cgUW59U2U9Qm59fXJldHVybiBCbn0sY3JlYXRlRmlsZShTZSxCZSxzdCxEdCx0bil7dmFyIGJuPXhuLmpvaW4yKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgU2U/U2U6QnQuZ2V0UGF0aChTZSksQmUpLEJuPXljKER0LHRuKTtyZXR1cm4gQnQuY3JlYXRlKGJuLEJuKX0sY3JlYXRlRGF0YUZpbGUoU2UsQmUsc3QsRHQsdG4sYm4pe3ZhciBCbj1CZTtTZSYmKFNlPSJzdHJpbmciPT10eXBlb2YgU2U/U2U6QnQuZ2V0UGF0aChTZSksQm49''@;'; put 'put ''QmU/eG4uam9pbjIoU2UsQmUpOlNlKTt2YXIgUW49eWMoRHQsdG4pLGFpPUJ0LmNyZWF0ZShCbixRbik7aWYoc3Qpe3N0PUpkKHN0KSxCdC5jaG1vZChhaSwxNDZ8UW4pO3ZhciBhYT1CdC5vcGVuKGFpLDU3Nyk7QnQud3JpdGUoYWEsc3QsMCxzdC5sZW5ndGgsMCxibiksQnQuY2xvc2UoYWEp''@;'; put 'put ''LEJ0LmNobW9kKGFpLFFuKX19LGNyZWF0ZURldmljZShTZSxCZSxzdCxEdCl7dmFyIHRuPXhuLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgU2U/U2U6QnQuZ2V0UGF0aChTZSksQmUpLGJuPXljKCEhc3QsISFEdCk7QnQuY3JlYXRlRGV2aWNlLm1ham9yPz89NjQ7dmFyIEJuPUJ0Lm1ha2VkZXYo''@;'; put 'put ''QnQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIEJ0LnJlZ2lzdGVyRGV2aWNlKEJuLHtvcGVuKFFuKXtRbi5zZWVrYWJsZT0hMX0sY2xvc2UoUW4pe0R0Py5idWZmZXI/Lmxlbmd0aCYmRHQoMTApfSxyZWFkKFFuLGFpLGFhLFlhLGlvKXtmb3IodmFyIE5hPTAsS2E9MDtLYTxZYTtL''@;'; put 'put ''YSsrKXt2YXIgeHM7dHJ5e3hzPXN0KCl9Y2F0Y2h7dGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PXhzJiYwPT09TmEpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNik7aWYobnVsbD09eHMpYnJlYWs7TmErKyxhaVthYStLYV09eHN9cmV0dXJuIE5hJiYoUW4ubm9kZS5h''@;'; put 'put ''dGltZT1EYXRlLm5vdygpKSxOYX0sd3JpdGUoUW4sYWksYWEsWWEsaW8pe2Zvcih2YXIgTmE9MDtOYTxZYTtOYSsrKXRyeXtEdChhaVthYStOYV0pfWNhdGNoe3Rocm93IG5ldyBCdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gWWEmJihRbi5ub2RlLm10aW1lPVFuLm5vZGUuY3RpbWU9RGF0ZS5u''@;'; put 'put ''b3coKSksTmF9fSksQnQubWtkZXYodG4sYm4sQm4pfSxmb3JjZUxvYWRGaWxlKFNlKXtpZihTZS5pc0RldmljZXx8U2UuaXNGb2xkZXJ8fFNlLmxpbmt8fFNlLmNvbnRlbnRzKXJldHVybiEwO2lmKGdsb2JhbFRoaXMuWE1MSHR0cFJlcXVlc3QpWm4oIkxhenkgbG9hZGluZyBzaG91bGQgaGF2''@;'; put 'put ''ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhy''@;'; put 'put ''ZWFkLiIpO2Vsc2UgdHJ5e1NlLmNvbnRlbnRzPXVuZGVmaW5lZChTZS51cmwpfWNhdGNoe3Rocm93IG5ldyBCdC5FcnJub0Vycm9yKDI5KX19LGNyZWF0ZUxhenlGaWxlKFNlLEJlLHN0LER0LHRuKXtjbGFzcyBibntsZW5ndGhLbm93bj0hMTtjaHVua3M9W107Z2V0KE5hKXtpZighKE5hPnRo''@;'; put 'put ''aXMubGVuZ3RoLTF8fE5hPDApKXt2YXIgS2E9TmEldGhpcy5jaHVua1NpemU7cmV0dXJuIHRoaXMuZ2V0dGVyKE5hL3RoaXMuY2h1bmtTaXplfDApW0thXX19c2V0RGF0YUdldHRlcihOYSl7dGhpcy5nZXR0ZXI9TmF9Y2FjaGVMZW5ndGgoKXt2YXIgTmE9bmV3IFhNTEh0dHBSZXF1ZXN0O05h''@;'; put 'put ''Lm9wZW4oIkhFQUQiLHN0LCExKSxOYS5zZW5kKG51bGwpLE5hLnN0YXR1cz49MjAwJiZOYS5zdGF0dXM8MzAwfHwzMDQ9PT1OYS5zdGF0dXN8fFpuKCJDb3VsZG4ndCBsb2FkICIrc3QrIi4gU3RhdHVzOiAiK05hLnN0YXR1cyk7dmFyIHhzLEthPU51bWJlcihOYS5nZXRSZXNwb25zZUhlYWRl''@;'; put 'put ''cigiQ29udGVudC1sZW5ndGgiKSksZWM9KHhzPU5hLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09eHMsUGw9KHhzPU5hLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LUVuY29kaW5nIikpJiYiZ3ppcCI9PT14cyxWcz0xMDQ4NTc2O2VjfHwoVnM9S2Ep''@;'; put 'put ''O3ZhciBVdT10aGlzO1V1LnNldERhdGFHZXR0ZXIoJGg9Pnt2YXIgcGQ9JGgqVnMseHU9KCRoKzEpKlZzLTE7cmV0dXJuIHh1PU1hdGgubWluKHh1LEthLTEpLHR5cGVvZiBVdS5jaHVua3NbJGhdPiJ1IiYmKFV1LmNodW5rc1skaF09KCgkaCxwZCk9PnskaD5wZCYmWm4oImludmFsaWQgcmFu''@;'; put 'put ''Z2UgKCIrJGgrIiwgIitwZCsiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIikscGQ+S2EtMSYmWm4oIm9ubHkgIitLYSsiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgeHU9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiB4dS5vcGVuKCJHRVQiLHN0LCExKSxLYSE9''@;'; put 'put ''PVZzJiZ4dS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrJGgrIi0iK3BkKSx4dS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIix4dS5vdmVycmlkZU1pbWVUeXBlJiZ4dS5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIikseHUu''@;'; put 'put ''c2VuZChudWxsKSx4dS5zdGF0dXM+PTIwMCYmeHUuc3RhdHVzPDMwMHx8MzA0PT09eHUuc3RhdHVzfHxabigiQ291bGRuJ3QgbG9hZCAiK3N0KyIuIFN0YXR1czogIit4dS5zdGF0dXMpLHZvaWQgMCE9PXh1LnJlc3BvbnNlP25ldyBVaW50OEFycmF5KHh1LnJlc3BvbnNlfHxbXSk6Zm8oeHUu''@;'; put 'put ''cmVzcG9uc2VUZXh0fHwiIiwhMCl9KShwZCx4dSkpLHR5cGVvZiBVdS5jaHVua3NbJGhdPiJ1IiYmWm4oImRvWEhSIGZhaWxlZCEiKSxVdS5jaHVua3NbJGhdfSksKFBsfHwhS2EpJiYoVnM9S2E9MSxLYT10aGlzLmdldHRlcigwKS5sZW5ndGgsVnM9S2EsSigiTGF6eUZpbGVzIG9uIGd6aXAg''@;'; put 'put ''Zm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD1LYSx0aGlzLl9jaHVua1NpemU9VnMsdGhpcy5sZW5ndGhLbm93bj0hMH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGVuZ3RoS25vd258fHRoaXMuY2FjaGVM''@;'; put 'put ''ZW5ndGgoKSx0aGlzLl9sZW5ndGh9Z2V0IGNodW5rU2l6ZSgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fY2h1bmtTaXplfX1pZihnbG9iYWxUaGlzLlhNTEh0dHBSZXF1ZXN0KXtabigiQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJz''@;'; put 'put ''IG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyIpO3ZhciBRbj17aXNEZXZpY2U6ITEsY29udGVudHM6bmV3IGJufX1lbHNlIFFuPXtpc0RldmljZTohMSx1cmw6c3R9O3ZhciBhaT1CdC5jcmVh''@;'; put 'put ''dGVGaWxlKFNlLEJlLFFuLER0LHRuKTtRbi5jb250ZW50cz9haS5jb250ZW50cz1Rbi5jb250ZW50czpRbi51cmwmJihhaS5jb250ZW50cz1udWxsLGFpLnVybD1Rbi51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFpLHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIGFhPXt9O2ZvcihsZXRbaW8sTmFdb2YgT2JqZWN0LmVudHJpZXMoYWkuc3RyZWFtX29wcykpYWFbaW9dPSguLi5LYSk9PihCdC5mb3JjZUxvYWRGaWxlKGFpKSxOYSguLi5LYSkpO2Z1bmN0aW9uIFlhKGlvLE5hLEthLHhzLGVjKXt2YXIgUGw9aW8u''@;'; put 'put ''bm9kZS5jb250ZW50cztpZihlYz49UGwubGVuZ3RoKXJldHVybiAwO3ZhciBWcz1NYXRoLm1pbihQbC5sZW5ndGgtZWMseHMpO2lmKFBsLnNsaWNlKWZvcih2YXIgUDA9MDtQMDxWcztQMCsrKU5hW0thK1AwXT1QbFtlYytQMF07ZWxzZSBmb3IoUDA9MDtQMDxWcztQMCsrKU5hW0thK1AwXT1Q''@;'; put 'put ''bC5nZXQoZWMrUDApO3JldHVybiBWc31yZXR1cm4gYWEucmVhZD0oaW8sTmEsS2EseHMsZWMpPT4oQnQuZm9yY2VMb2FkRmlsZShhaSksWWEoaW8sTmEsS2EseHMsZWMpKSxhYS5tbWFwPShpbyxOYSxLYSx4cyxlYyk9PntCdC5mb3JjZUxvYWRGaWxlKGFpKTt2YXIgUGw9WnMoTmEpO2lmKCFQ''@;'; put 'put ''bCl0aHJvdyBuZXcgQnQuRXJybm9FcnJvcig0OCk7cmV0dXJuIFlhKGlvLEl0LFBsLE5hLEthKSx7cHRyOlBsLGFsbG9jYXRlZDohMH19LGFpLnN0cmVhbV9vcHM9YWEsYWl9fSx6bz17Y2FsY3VsYXRlQXQoU2UsQmUsc3Qpe2lmKHhuLmlzQWJzKEJlKSlyZXR1cm4gQmU7dmFyIER0O2lmKER0''@;'; put 'put ''PS0xMDA9PT1TZT9CdC5jd2QoKTp6by5nZXRTdHJlYW1Gcm9tRkQoU2UpLnBhdGgsMD09QmUubGVuZ3RoKXtpZighc3QpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNDQpO3JldHVybiBEdH1yZXR1cm4gRHQrIi8iK0JlfSx3cml0ZVN0YXQoU2UsQmUpe0V0W1NlPj4yXT1CZS5kZXYsRXRbU2Ur''@;'; put 'put ''ND4+Ml09QmUubW9kZSxFdFtTZSs4Pj4yXT1CZS5ubGluayxFdFtTZSsxMj4+Ml09QmUudWlkLEV0W1NlKzE2Pj4yXT1CZS5naWQsRXRbU2UrMjA+PjJdPUJlLnJkZXYsVGk9W0JlLnNpemU+Pj4wLChqcj1CZS5zaXplLCtNYXRoLmFicyhqcik+PTE/anI+MD8rTWF0aC5mbG9vcihqci80Mjk0''@;'; put 'put ''OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxvdFtTZSsyND4+Ml09VGlbMF0sb3RbU2UrMjg+PjJdPVRpWzFdLG90W1NlKzMyPj4yXT00MDk2LG90W1NlKzM2Pj4yXT1CZS5ibG9ja3M7dmFyIHN0PUJlLmF0aW1lLmdldFRpbWUo''@;'; put 'put ''KSxEdD1CZS5tdGltZS5nZXRUaW1lKCksdG49QmUuY3RpbWUuZ2V0VGltZSgpO3JldHVybiBUaT1bTWF0aC5mbG9vcihzdC8xZTMpPj4+MCwoanI9TWF0aC5mbG9vcihzdC8xZTMpLCtNYXRoLmFicyhqcik+PTE/anI+MD8rTWF0aC5mbG9vcihqci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5j''@;'; put 'put ''ZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxvdFtTZSs0MD4+Ml09VGlbMF0sb3RbU2UrNDQ+PjJdPVRpWzFdLEV0W1NlKzQ4Pj4yXT1zdCUxZTMqMWUzKjFlMyxUaT1bTWF0aC5mbG9vcihEdC8xZTMpPj4+MCwoanI9TWF0aC5mbG9vcihEdC8xZTMpLCtNYXRoLmFi''@;'; put 'put ''cyhqcik+PTE/anI+MD8rTWF0aC5mbG9vcihqci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxvdFtTZSs1Nj4+Ml09VGlbMF0sb3RbU2UrNjA+PjJdPVRpWzFdLEV0W1NlKzY0Pj4yXT1EdCUxZTMqMWUzKjFlMyxUaT1b''@;'; put 'put ''TWF0aC5mbG9vcih0bi8xZTMpPj4+MCwoanI9TWF0aC5mbG9vcih0bi8xZTMpLCtNYXRoLmFicyhqcik+PTE/anI+MD8rTWF0aC5mbG9vcihqci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxvdFtTZSs3Mj4+Ml09VGlb''@;'; put 'put ''MF0sb3RbU2UrNzY+PjJdPVRpWzFdLEV0W1NlKzgwPj4yXT10biUxZTMqMWUzKjFlMyxUaT1bQmUuaW5vPj4+MCwoanI9QmUuaW5vLCtNYXRoLmFicyhqcik+PTE/anI+MD8rTWF0aC5mbG9vcihqci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2''@;'; put 'put ''NzI5Nik+Pj4wOjApXSxvdFtTZSs4OD4+Ml09VGlbMF0sb3RbU2UrOTI+PjJdPVRpWzFdLDB9LHdyaXRlU3RhdEZzKFNlLEJlKXtFdFtTZSs0Pj4yXT1CZS5ic2l6ZSxFdFtTZSs2MD4+Ml09QmUuYnNpemUsVGk9W0JlLmJsb2Nrcz4+PjAsKGpyPUJlLmJsb2NrcywrTWF0aC5hYnMoanIpPj0x''@;'; put 'put ''P2pyPjA/K01hdGguZmxvb3IoanIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoanItKyh+fmpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sb3RbU2UrOD4+Ml09VGlbMF0sb3RbU2UrMTI+PjJdPVRpWzFdLFRpPVtCZS5iZnJlZT4+PjAsKGpyPUJlLmJmcmVlLCtNYXRoLmFicyhq''@;'; put 'put ''cik+PTE/anI+MD8rTWF0aC5mbG9vcihqci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqci0rKH5+anI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxvdFtTZSsxNj4+Ml09VGlbMF0sb3RbU2UrMjA+PjJdPVRpWzFdLFRpPVtCZS5iYXZhaWw+Pj4wLChqcj1CZS5iYXZhaWwsK01h''@;'; put 'put ''dGguYWJzKGpyKT49MT9qcj4wPytNYXRoLmZsb29yKGpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG90W1NlKzI0Pj4yXT1UaVswXSxvdFtTZSsyOD4+Ml09VGlbMV0sVGk9W0JlLmZpbGVzPj4+MCwoanI9QmUuZmls''@;'; put 'put ''ZXMsK01hdGguYWJzKGpyKT49MT9qcj4wPytNYXRoLmZsb29yKGpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG90W1NlKzMyPj4yXT1UaVswXSxvdFtTZSszNj4+Ml09VGlbMV0sVGk9W0JlLmZmcmVlPj4+MCwoanI9''@;'; put 'put ''QmUuZmZyZWUsK01hdGguYWJzKGpyKT49MT9qcj4wPytNYXRoLmZsb29yKGpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG90W1NlKzQwPj4yXT1UaVswXSxvdFtTZSs0ND4+Ml09VGlbMV0sRXRbU2UrNDg+PjJdPUJl''@;'; put 'put ''LmZzaWQsRXRbU2UrNjQ+PjJdPUJlLmZsYWdzLEV0W1NlKzU2Pj4yXT1CZS5uYW1lbGVufSxkb01zeW5jKFNlLEJlLHN0LER0LHRuKXtpZighQnQuaXNGaWxlKEJlLm5vZGUubW9kZSkpdGhyb3cgbmV3IEJ0LkVycm5vRXJyb3IoNDMpO2lmKDImRHQpcmV0dXJuIDA7dmFyIGJuPVp0LnNsaWNl''@;'; put 'put ''KFNlLFNlK3N0KTtCdC5tc3luYyhCZSxibix0bixzdCxEdCl9LGdldFN0cmVhbUZyb21GRDpTZT0+QnQuZ2V0U3RyZWFtQ2hlY2tlZChTZSksdmFyYXJnczp2b2lkIDAsZ2V0U3RyOlNlPT5fbihTZSl9LFFTPSgpPT57dmFyIFNlPW90Wyt6by52YXJhcmdzPj4yXTtyZXR1cm4gem8udmFyYXJn''@;'; put 'put ''cys9NCxTZX0scTU9UVMsdjA9KFNlLEJlLHN0KT0+Y2EoU2UsWnQsQmUsc3QpLGVNPSgpPT4kd2UsbUk9U2U9Pld3ZShTZSksUHo9U2U9Pnt2YXIgQmU9KFNlPT57dmFyIEJlPVNlLmdldEFyZyhlTSgpLDApO3JldHVybiBZd2UoQmUpfSkoU2UpO3JldHVybihTZT0+e3ZhciBCZT1ad2UoKSxz''@;'; put 'put ''dD1tSSg0KSxEdD1tSSg0KTtHd2UoU2Usc3QsRHQpO3ZhciBRbix0bj1FdFtzdD4+Ml0sYm49RXRbRHQ+PjJdLEJuPV9uKHRuKTtyZXR1cm4gUnAodG4pLGJuJiYoUW49X24oYm4pLFJwKGJuKSksKFNlPT57VXdlKFNlKX0pKEJlKSxbQm4sUW5dfSkoQmUpfSxWbj1TZT0+e2Zvcih2YXIgQmU9''@;'; put 'put ''IiI7Oyl7dmFyIHN0PVp0W1NlKytdO2lmKCFzdClyZXR1cm4gQmU7QmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoc3QpfX0sQWk9e30sVWE9e30sTWw9e30sQ3U9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihTZSl7c3VwZXIoU2UpLHRoaXMubmFtZT0iQmluZGluZ0Vycm9yIn19LF9v''@;'; put 'put ''PVNlPT57dGhyb3cgbmV3IEN1KFNlKX07ZnVuY3Rpb24gU3UoU2UsQmUsc3Q9e30pe3JldHVybiBmdW5jdGlvbiBmZChTZSxCZSxzdD17fSl7dmFyIER0PUJlLm5hbWU7aWYoU2V8fF9vKGB0eXBlICIke0R0fSIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmAp''@;'; put 'put ''LFVhLmhhc093blByb3BlcnR5KFNlKSl7aWYoc3QuaWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9ucylyZXR1cm47X28oYENhbm5vdCByZWdpc3RlciB0eXBlICcke0R0fScgdHdpY2VgKX1pZihVYVtTZV09QmUsZGVsZXRlIE1sW1NlXSxBaS5oYXNPd25Qcm9wZXJ0eShTZSkpe3ZhciB0bj1B''@;'; put 'put ''aVtTZV07ZGVsZXRlIEFpW1NlXSx0bi5mb3JFYWNoKGJuPT5ibigpKX19KFNlLEJlLHN0KX12YXIgdkk9U2U9Pih7Y291bnQ6U2UuY291bnQsZGVsZXRlU2NoZWR1bGVkOlNlLmRlbGV0ZVNjaGVkdWxlZCxwcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZTpTZS5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0''@;'; put 'put ''ZSxwdHI6U2UucHRyLHB0clR5cGU6U2UucHRyVHlwZSxzbWFydFB0cjpTZS5zbWFydFB0cixzbWFydFB0clR5cGU6U2Uuc21hcnRQdHJUeXBlfSksTXU9U2U9PntfbyhmdW5jdGlvbiBCZShzdCl7cmV0dXJuIHN0LiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWV9KFNlKSsiIGluc3Rh''@;'; put 'put ''bmNlIGFscmVhZHkgZGVsZXRlZCIpfSx0TT0hMSx5ST1TZT0+e30sd3dlPVNlPT57U2UuY291bnQudmFsdWUtPTEsMD09PVNlLmNvdW50LnZhbHVlJiYoU2U9PntTZS5zbWFydFB0cj9TZS5zbWFydFB0clR5cGUucmF3RGVzdHJ1Y3RvcihTZS5zbWFydFB0cik6U2UucHRyVHlwZS5yZWdpc3Rl''@;'; put 'put ''cmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihTZS5wdHIpfSkoU2UpfSxfST1TZT0+Z2xvYmFsVGhpcy5GaW5hbGl6YXRpb25SZWdpc3RyeT8odE09bmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEJlPT57d3dlKEJlLiQkKX0pLHlJPUJlPT50TS51bnJlZ2lzdGVyKEJlKSwoX0k9QmU9Pnt2YXIgc3Q9''@;'; put 'put ''QmUuJCQ7cmV0dXJuIXN0LnNtYXJ0UHRyfHx0TS5yZWdpc3RlcihCZSx7JCQ6c3R9LEJlKSxCZX0pKFNlKSk6KF9JPUJlPT5CZSxTZSksTno9W107ZnVuY3Rpb24gVnooKXt9dmFyIFN3ZT0oU2UsQmUpPT5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmUsIm5hbWUiLHt2YWx1ZTpTZX0pLE13ZT17''@;'; put 'put ''fSxwb2U9KFNlLEJlLHN0KT0+e2lmKHZvaWQgMD09PVNlW0JlXS5vdmVybG9hZFRhYmxlKXt2YXIgRHQ9U2VbQmVdO1NlW0JlXT1mdW5jdGlvbiguLi50bil7cmV0dXJuIFNlW0JlXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KHRuLmxlbmd0aCl8fF9vKGBGdW5jdGlvbiAnJHtzdH0n''@;'; put 'put ''IGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHt0bi5sZW5ndGh9KSAtIGV4cGVjdHMgb25lIG9mICgke1NlW0JlXS5vdmVybG9hZFRhYmxlfSkhYCksU2VbQmVdLm92ZXJsb2FkVGFibGVbdG4ubGVuZ3RoXS5hcHBseSh0aGlzLHRuKX0sU2VbQmVdLm92ZXJs''@;'; put 'put ''b2FkVGFibGU9W10sU2VbQmVdLm92ZXJsb2FkVGFibGVbRHQuYXJnQ291bnRdPUR0fX07ZnVuY3Rpb24gWGp0KFNlLEJlLHN0LER0LHRuLGJuLEJuLFFuKXt0aGlzLm5hbWU9U2UsdGhpcy5jb25zdHJ1Y3Rvcj1CZSx0aGlzLmluc3RhbmNlUHJvdG90eXBlPXN0LHRoaXMucmF3RGVzdHJ1Y3Rv''@;'; put 'put ''cj1EdCx0aGlzLmJhc2VDbGFzcz10bix0aGlzLmdldEFjdHVhbFR5cGU9Ym4sdGhpcy51cGNhc3Q9Qm4sdGhpcy5kb3duY2FzdD1Rbix0aGlzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zPVtdfXZhciBCej0oU2UsQmUsc3QpPT57Zm9yKDtCZSE9PXN0OylCZS51cGNhc3R8fF9vKGBFeHBlY3RlZCBu''@;'; put 'put ''dWxsIG9yIGluc3RhbmNlIG9mICR7c3QubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke0JlLm5hbWV9YCksU2U9QmUudXBjYXN0KFNlKSxCZT1CZS5iYXNlQ2xhc3M7cmV0dXJuIFNlfSxnb2U9U2U9PntpZihudWxsPT09U2UpcmV0dXJuIm51bGwiO3ZhciBCZT10eXBlb2YgU2U7cmV0dXJu''@;'; put 'put ''Im9iamVjdCI9PT1CZXx8ImFycmF5Ij09PUJlfHwiZnVuY3Rpb24iPT09QmU/U2UudG9TdHJpbmcoKToiIitTZX07ZnVuY3Rpb24gcWp0KFNlLEJlKXtyZXR1cm4gbnVsbD09PUJlPyh0aGlzLmlzUmVmZXJlbmNlJiZfbyhgbnVsbCBpcyBub3QgYSB2YWxpZCAke3RoaXMubmFtZX1gKSwwKToo''@;'; put 'put ''QmUuJCR8fF9vKGBDYW5ub3QgcGFzcyAiJHtnb2UoQmUpfSIgYXMgYSAke3RoaXMubmFtZX1gKSxCZS4kJC5wdHJ8fF9vKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSxCeihCZS4kJC5wdHIsQmUuJCQucHRyVHlwZS5yZWdp''@;'; put 'put ''c3RlcmVkQ2xhc3MsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpKX1mdW5jdGlvbiBKanQoU2UsQmUpe3ZhciBzdDtpZihudWxsPT09QmUpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJl9vKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLHRoaXMuaXNTbWFydFBvaW50ZXI/KHN0PXRo''@;'; put 'put ''aXMucmF3Q29uc3RydWN0b3IoKSxudWxsIT09U2UmJlNlLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHN0KSxzdCk6MDtpZigoIUJlfHwhQmUuJCQpJiZfbyhgQ2Fubm90IHBhc3MgIiR7Z29lKEJlKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksQmUuJCQucHRyfHxfbyhgQ2Fubm90IHBhc3MgZGVs''@;'; put 'put ''ZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCksIXRoaXMuaXNDb25zdCYmQmUuJCQucHRyVHlwZS5pc0NvbnN0JiZfbyhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke0JlLiQkLnNtYXJ0UHRyVHlwZT9CZS4kJC5zbWFydFB0clR5cGUubmFt''@;'; put 'put ''ZTpCZS4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApLHN0PUJ6KEJlLiQkLnB0cixCZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyx0aGlzLnJlZ2lzdGVyZWRDbGFzcyksdGhpcy5pc1NtYXJ0UG9pbnRlcilzd2l0Y2godm9pZCAwPT09QmUuJCQu''@;'; put 'put ''c21hcnRQdHImJl9vKCJQYXNzaW5nIHJhdyBwb2ludGVyIHRvIHNtYXJ0IHBvaW50ZXIgaXMgaWxsZWdhbCIpLHRoaXMuc2hhcmluZ1BvbGljeSl7Y2FzZSAwOkJlLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/c3Q9QmUuJCQuc21hcnRQdHI6X28oYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9m''@;'; put 'put ''IHR5cGUgJHtCZS4kJC5zbWFydFB0clR5cGU/QmUuJCQuc21hcnRQdHJUeXBlLm5hbWU6QmUuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTticmVhaztjYXNlIDE6c3Q9QmUuJCQuc21hcnRQdHI7YnJlYWs7Y2FzZSAyOmlmKEJlLiQkLnNtYXJ0UHRy''@;'; put 'put ''VHlwZT09PXRoaXMpc3Q9QmUuJCQuc21hcnRQdHI7ZWxzZXt2YXIgdG49QmUuY2xvbmUoKTtzdD10aGlzLnJhd1NoYXJlKHN0LHlvZS50b0hhbmRsZSgoKT0+dG4uZGVsZXRlKCkpKSxudWxsIT09U2UmJlNlLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHN0KX1icmVhaztkZWZhdWx0Ol9vKCJV''@;'; put 'put ''bnN1cHBvcnRlZCBzaGFyaW5nIHBvbGljeSIpfXJldHVybiBzdH1mdW5jdGlvbiBRanQoU2UsQmUpe3JldHVybiBudWxsPT09QmU/KHRoaXMuaXNSZWZlcmVuY2UmJl9vKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLDApOihCZS4kJHx8X28oYENhbm5vdCBwYXNzICIke2dv''@;'; put 'put ''ZShCZSl9IiBhcyBhICR7dGhpcy5uYW1lfWApLEJlLiQkLnB0cnx8X28oYENhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApLEJlLiQkLnB0clR5cGUuaXNDb25zdCYmX28oYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUg''@;'; put 'put ''JHtCZS4kJC5wdHJUeXBlLm5hbWV9IHRvIHBhcmFtZXRlciB0eXBlICR7dGhpcy5uYW1lfWApLEJ6KEJlLiQkLnB0cixCZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyx0aGlzLnJlZ2lzdGVyZWRDbGFzcykpfWZ1bmN0aW9uIGp6KFNlKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoRXRb''@;'; put 'put ''U2U+PjJdKX12YXIgeHdlPShTZSxCZSxzdCk9PntpZihCZT09PXN0KXJldHVybiBTZTtpZih2b2lkIDA9PT1zdC5iYXNlQ2xhc3MpcmV0dXJuIG51bGw7dmFyIER0PXh3ZShTZSxCZSxzdC5iYXNlQ2xhc3MpO3JldHVybiBudWxsPT09RHQ/bnVsbDpzdC5kb3duY2FzdChEdCl9LGV6dD17fSxy''@;'; put 'put ''enQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihTZSl7c3VwZXIoU2UpLHRoaXMubmFtZT0iSW50ZXJuYWxFcnJvciJ9fSx6ej1TZT0+e3Rocm93IG5ldyByenQoU2UpfSxVej0oU2UsQmUpPT4oKCFCZS5wdHJUeXBlfHwhQmUucHRyKSYmenooIm1ha2VDbGFzc0hhbmRsZSByZXF1''@;'; put 'put ''aXJlcyBwdHIgYW5kIHB0clR5cGUiKSwhIUJlLnNtYXJ0UHRyVHlwZSE9ISFCZS5zbWFydFB0ciYmenooIkJvdGggc21hcnRQdHJUeXBlIGFuZCBzbWFydFB0ciBtdXN0IGJlIHNwZWNpZmllZCIpLEJlLmNvdW50PXt2YWx1ZToxfSxfSShPYmplY3QuY3JlYXRlKFNlLHskJDp7dmFsdWU6QmUs''@;'; put 'put ''d3JpdGFibGU6ITB9fSkpKTtmdW5jdGlvbiBXeihTZSxCZSxzdCxEdCx0bixibixCbixRbixhaSxhYSxZYSl7dGhpcy5uYW1lPVNlLHRoaXMucmVnaXN0ZXJlZENsYXNzPUJlLHRoaXMuaXNSZWZlcmVuY2U9c3QsdGhpcy5pc0NvbnN0PUR0LHRoaXMuaXNTbWFydFBvaW50ZXI9dG4sdGhpcy5w''@;'; put 'put ''b2ludGVlVHlwZT1ibix0aGlzLnNoYXJpbmdQb2xpY3k9Qm4sdGhpcy5yYXdHZXRQb2ludGVlPVFuLHRoaXMucmF3Q29uc3RydWN0b3I9YWksdGhpcy5yYXdTaGFyZT1hYSx0aGlzLnJhd0Rlc3RydWN0b3I9WWEsdG58fHZvaWQgMCE9PUJlLmJhc2VDbGFzcz90aGlzLnRvV2lyZVR5cGU9Smp0''@;'; put 'put ''OkR0Pyh0aGlzLnRvV2lyZVR5cGU9cWp0LHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOih0aGlzLnRvV2lyZVR5cGU9UWp0LHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpfXZhciBxOD17fSxFd2U9U2U9Pkt3ZS5nZXQoU2UpLFE1PShTZSxCZSxzdD0hMSk9PntTZT1WbihTZSk7''@;'; put 'put ''dmFyIHRuPWZ1bmN0aW9uIER0KCl7cmV0dXJuIFNlLmluY2x1ZGVzKCJqIik/KChTZSxCZSxzdD0hMSk9PiguLi5EdCk9PigoU2UsQmUsc3Q9W10pPT5TZS5pbmNsdWRlcygiaiIpPygoU2UsQmUsc3QpPT4oU2U9U2UucmVwbGFjZSgvcC9nLCJpIiksKDAscThbU2VdKShCZSwuLi5zdCkpKShT''@;'; put 'put ''ZSxCZSxzdCk6RXdlKEJlKSguLi5zdCkpKFNlLEJlLER0LHN0KSkoU2UsQmUpOkV3ZShCZSl9KCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHRuJiZfbyhgdW5rbm93biBmdW5jdGlvbiBwb2ludGVyIHdpdGggc2lnbmF0dXJlICR7U2V9OiAke0JlfWApLHRufTtjbGFzcyB1enQgZXh0ZW5k''@;'; put 'put ''cyBFcnJvcnt9dmFyIGR6dD1TZT0+e3ZhciBCZT1Wd2UoU2UpLHN0PVZuKEJlKTtyZXR1cm4gUnAoQmUpLHN0fSxuTT0oU2UsQmUpPT57dmFyIHN0PVtdLER0PXt9O3Rocm93IEJlLmZvckVhY2goZnVuY3Rpb24gdG4oYm4pe2lmKCFEdFtibl0mJiFVYVtibl0pe2lmKE1sW2JuXSlyZXR1cm4g''@;'; put 'put ''dm9pZCBNbFtibl0uZm9yRWFjaCh0bik7c3QucHVzaChibiksRHRbYm5dPSEwfX0pLG5ldyB1enQoYCR7U2V9OiBgK3N0Lm1hcChkenQpLmpvaW4oWyIsICJdKSl9LGVtPShTZSxCZSxzdCk9PntmdW5jdGlvbiBEdChRbil7dmFyIGFpPXN0KFFuKTthaS5sZW5ndGghPT1TZS5sZW5ndGgmJnp6''@;'; put 'put ''KCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50Iik7Zm9yKHZhciBhYT0wO2FhPFNlLmxlbmd0aDsrK2FhKVN1KFNlW2FhXSxhaVthYV0pfVNlLmZvckVhY2goUW49Pk1sW1FuXT1CZSk7dmFyIHRuPW5ldyBBcnJheShCZS5sZW5ndGgpLGJuPVtdLEJuPTA7Zm9yKGxldFtRbixhaV1v''@;'; put 'put ''ZiBCZS5lbnRyaWVzKCkpVWEuaGFzT3duUHJvcGVydHkoYWkpP3RuW1FuXT1VYVthaV06KGJuLnB1c2goYWkpLEFpLmhhc093blByb3BlcnR5KGFpKXx8KEFpW2FpXT1bXSksQWlbYWldLnB1c2goKCk9Pnt0bltRbl09VWFbYWldLCsrQm49PT1ibi5sZW5ndGgmJkR0KHRuKX0pKTswPT09Ym4u''@;'; put 'put ''bGVuZ3RoJiZEdCh0bil9LFR3ZT1TZT0+e2Zvcig7U2UubGVuZ3RoOyl7dmFyIEJlPVNlLnBvcCgpO1NlLnBvcCgpKEJlKX19O2Z1bmN0aW9uIG1vZShTZSxCZSxzdCxEdCx0bixibil7dmFyIEJuPUJlLmxlbmd0aDtCbjwyJiZfbygiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVz''@;'; put 'put ''dCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhIik7dmFyIFFuPW51bGwhPT1CZVsxXSYmbnVsbCE9PXN0LGFpPWZ1bmN0aW9uIGZ6dChTZSl7Zm9yKHZhciBCZT0xO0JlPFNlLmxlbmd0aDsrK0JlKWlmKG51bGwhPT1TZVtCZV0mJnZvaWQgMD09PVNlW0JlXS5k''@;'; put 'put ''ZXN0cnVjdG9yRnVuY3Rpb24pcmV0dXJuITA7cmV0dXJuITF9KEJlKSxhYT0hQmVbMF0uaXNWb2lkLFlhPUJuLTIsaW89bmV3IEFycmF5KFlhKSxOYT1bXSxLYT1bXTtyZXR1cm4gU3dlKFNlLGZ1bmN0aW9uKC4uLmVjKXt2YXIgUGw7S2EubGVuZ3RoPTAsTmEubGVuZ3RoPVFuPzI6MSxOYVsw''@;'; put 'put ''XT10bixRbiYmKFBsPUJlWzFdLnRvV2lyZVR5cGUoS2EsdGhpcyksTmFbMV09UGwpO2Zvcih2YXIgVnM9MDtWczxZYTsrK1ZzKWlvW1ZzXT1CZVtWcysyXS50b1dpcmVUeXBlKEthLGVjW1ZzXSksTmEucHVzaChpb1tWc10pO3JldHVybiBmdW5jdGlvbiBVdSgkaCl7aWYoYWkpVHdlKEthKTtl''@;'; put 'put ''bHNlIGZvcih2YXIgcGQ9UW4/MToyO3BkPEJlLmxlbmd0aDtwZCsrKW51bGwhPT1CZVtwZF0uZGVzdHJ1Y3RvckZ1bmN0aW9uJiZCZVtwZF0uZGVzdHJ1Y3RvckZ1bmN0aW9uKDE9PT1wZD9QbDppb1twZC0yXSk7aWYoYWEpcmV0dXJuIEJlWzBdLmZyb21XaXJlVHlwZSgkaCl9KER0KC4uLk5h''@;'; put 'put ''KSl9KX12YXIgdm9lPShTZSxCZSk9Pntmb3IodmFyIHN0PVtdLER0PTA7RHQ8U2U7RHQrKylzdC5wdXNoKEV0W0JlKzQqRHQ+PjJdKTtyZXR1cm4gc3R9LEF3ZT1TZT0+e2xldCBCZT0oU2U9U2UudHJpbSgpKS5pbmRleE9mKCIoIik7cmV0dXJuLTE9PT1CZT9TZTpTZS5zbGljZSgwLEJlKX0s''@;'; put 'put ''a3dlPShTZSxCZSxzdCk9PihTZSBpbnN0YW5jZW9mIE9iamVjdHx8X28oYCR7c3R9IHdpdGggaW52YWxpZCAidGhpcyI6ICR7U2V9YCksU2UgaW5zdGFuY2VvZiBCZS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3J8fF9vKGAke3N0fSBpbmNvbXBhdGlibGUgd2l0aCAidGhpcyIgb2YgdHlw''@;'; put 'put ''ZSAke1NlLmNvbnN0cnVjdG9yLm5hbWV9YCksU2UuJCQucHRyfHxfbyhgY2Fubm90IGNhbGwgZW1zY3JpcHRlbiBiaW5kaW5nIG1ldGhvZCAke3N0fSBvbiBkZWxldGVkIG9iamVjdGApLEJ6KFNlLiQkLnB0cixTZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxCZS5yZWdpc3RlcmVkQ2xh''@;'; put 'put ''c3MpKSxEd2U9W10saV89WzAsMSwsMSxudWxsLDEsITAsMSwhMSwxXSxJd2U9W10seW9lPXt0b1ZhbHVlOlNlPT4oU2V8fF9vKGBDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAke1NlfWApLGlfW1NlXSksdG9IYW5kbGU6U2U9Pntzd2l0Y2goU2Upe2Nhc2Ugdm9pZCAwOnJldHVy''@;'; put 'put ''biAyO2Nhc2UgbnVsbDpyZXR1cm4gNDtjYXNlITA6cmV0dXJuIDY7Y2FzZSExOnJldHVybiA4O2RlZmF1bHQ6e2xldCBCZT1Ed2UucG9wKCl8fGlfLmxlbmd0aDtyZXR1cm4gaV9bQmVdPVNlLGlfW0JlKzFdPTEsQmV9fX19LF96dD17bmFtZToiZW1zY3JpcHRlbjo6dmFsIixmcm9tV2lyZVR5''@;'; put 'put ''cGU6U2U9Pnt2YXIgQmU9eW9lLnRvVmFsdWUoU2UpO3JldHVybihTZT0+e2lmKFNlPjkmJjA9PS0taV9bU2UrMV0pe3ZhciBCZT1pX1tTZV07aV9bU2VdPXZvaWQgMDt2YXIgc3Q9SXdlW1NlXTtzdCYmKEl3ZVtTZV09dm9pZCAwLHN0KEJlKSksRHdlLnB1c2goU2UpfX0pKFNlKSxCZX0sdG9X''@;'; put 'put ''aXJlVHlwZTooU2UsQmUpPT55b2UudG9IYW5kbGUoQmUpLHJlYWRWYWx1ZUZyb21Qb2ludGVyOmp6LGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSx3enQ9KFNlLEJlKT0+e3N3aXRjaChCZSl7Y2FzZSA0OnJldHVybiBmdW5jdGlvbihzdCl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKFV0W3N0''@;'; put 'put ''Pj4yXSl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oc3Qpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShFbltzdD4+M10pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7QmV9KTogJHtTZX1gKX19LFN6dD0oU2UsQmUsc3QpPT57c3dpdGNoKEJl''@;'; put 'put ''KXtjYXNlIDE6cmV0dXJuIHN0P0R0PT5JdFtEdF06RHQ9Plp0W0R0XTtjYXNlIDI6cmV0dXJuIHN0P0R0PT5GcltEdD4+MV06RHQ9PmFyW0R0Pj4xXTtjYXNlIDQ6cmV0dXJuIHN0P0R0PT5vdFtEdD4+Ml06RHQ9PkV0W0R0Pj4yXTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFs''@;'; put 'put ''aWQgaW50ZWdlciB3aWR0aCAoJHtCZX0pOiAke1NlfWApfX0sUndlPWdsb2JhbFRoaXMuVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMCxUenQ9KFNlLEJlLHN0KT0+e3ZhciBEdD1TZT4+MSx0bj1YbihhcixEdCxCZS8yLHN0KTtpZih0bi1EdD4xNiYmUndl''@;'; put 'put ''KXJldHVybiBSd2UuZGVjb2RlKGFyLnN1YmFycmF5KER0LHRuKSk7Zm9yKHZhciBibj0iIixCbj1EdDtCbjx0bjsrK0JuKWJuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFyW0JuXSk7cmV0dXJuIGJufSxBenQ9KFNlLEJlLHN0KT0+e2lmKHN0Pz89MjE0NzQ4MzY0NyxzdDwyKXJldHVybiAwO2Zv''@;'; put 'put ''cih2YXIgRHQ9QmUsdG49KHN0LT0yKTwyKlNlLmxlbmd0aD9zdC8yOlNlLmxlbmd0aCxibj0wO2JuPHRuOysrYm4pe3ZhciBCbj1TZS5jaGFyQ29kZUF0KGJuKTtGcltCZT4+MV09Qm4sQmUrPTJ9cmV0dXJuIEZyW0JlPj4xXT0wLEJlLUR0fSxrenQ9U2U9PjIqU2UubGVuZ3RoLER6dD0oU2Us''@;'; put 'put ''QmUsc3QpPT57Zm9yKHZhciBEdD0iIix0bj1TZT4+Mixibj0wOyEoYm4+PUJlLzQpO2JuKyspe3ZhciBCbj1FdFt0bitibl07aWYoIUJuJiYhc3QpYnJlYWs7RHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KEJuKX1yZXR1cm4gRHR9LEl6dD0oU2UsQmUsc3QpPT57aWYoc3Q/Pz0yMTQ3NDgzNjQ3''@;'; put 'put ''LHN0PDQpcmV0dXJuIDA7Zm9yKHZhciBEdD1CZSx0bj1EdCtzdC00LGJuPTA7Ym48U2UubGVuZ3RoOysrYm4pe3ZhciBCbj1TZS5jb2RlUG9pbnRBdChibik7aWYoQm4+NjU1MzUmJmJuKyssb3RbQmU+PjJdPUJuLChCZSs9NCkrND50bilicmVha31yZXR1cm4gb3RbQmU+PjJdPTAsQmUtRHR9''@;'; put 'put ''LFJ6dD1TZT0+e2Zvcih2YXIgQmU9MCxzdD0wO3N0PFNlLmxlbmd0aDsrK3N0KVNlLmNvZGVQb2ludEF0KHN0KT42NTUzNSYmc3QrKyxCZSs9NDtyZXR1cm4gQmV9LE56dD1bMCwzMSw2MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSxWenQ9WzAsMzEsNTksOTAsMTIwLDE1''@;'; put 'put ''MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNF0sYkk9KFNlLEJlKT0+QmUrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIVNlPyhTZT4+PjApKzQyOTQ5NjcyOTYqQmU6TmFOLHdJPXt9LFB3ZT1TZT0+e0hlPVNlLGEoMCxuZXcgbGEoU2UpKX0sSHdlPSgpPT5wZXJmb3JtYW5jZS5ub3coKSxOd2U9KCk9''@;'; put 'put ''PkRhdGUubm93KCksX29lPVtdLG5VdD1TZT0+e3ZhciBzdD0oU2UtWnouYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2fDA7dHJ5e3JldHVybiBaei5ncm93KHN0KSxGdCgpLDF9Y2F0Y2h7fX0sYm9lPXt9LENJPSgpPT57aWYoIUNJLnN0cmluZ3Mpe3ZhciBCZT17VVNFUjoid2ViX3Vz''@;'; put 'put ''ZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOihnbG9iYWxUaGlzLm5hdmlnYXRvcj8ubGFuZ3VhZ2U/PyJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOiIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgc3QgaW4g''@;'; put 'put ''Ym9lKXZvaWQgMD09PWJvZVtzdF0/ZGVsZXRlIEJlW3N0XTpCZVtzdF09Ym9lW3N0XTt2YXIgRHQ9W107Zm9yKHZhciBzdCBpbiBCZSlEdC5wdXNoKGAke3N0fT0ke0JlW3N0XX1gKTtDSS5zdHJpbmdzPUR0fXJldHVybiBDSS5zdHJpbmdzfTtCdC5jcmVhdGVQcmVsb2FkZWRGaWxlPShTZSxC''@;'; put 'put ''ZSxzdCxEdCx0bixibixCbixRbixhaSxhYSk9PnttMChTZSxCZSxzdCxEdCx0bixRbixhaSxhYSkudGhlbihibikuY2F0Y2goQm4pfSxCdC5wcmVsb2FkRmlsZT1tMCxCdC5zdGF0aWNJbml0KCksKCgpPT57bGV0IFNlPVZ6LnByb3RvdHlwZTtPYmplY3QuYXNzaWduKFNlLHtpc0FsaWFzT2Yo''@;'; put 'put ''c3Qpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFZ6JiZzdCBpbnN0YW5jZW9mIFZ6KSlyZXR1cm4hMTt2YXIgRHQ9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyx0bj10aGlzLiQkLnB0cjtzdC4kJD1zdC4kJDtmb3IodmFyIGJuPXN0LiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLEJu''@;'; put 'put ''PXN0LiQkLnB0cjtEdC5iYXNlQ2xhc3M7KXRuPUR0LnVwY2FzdCh0biksRHQ9RHQuYmFzZUNsYXNzO2Zvcig7Ym4uYmFzZUNsYXNzOylCbj1ibi51cGNhc3QoQm4pLGJuPWJuLmJhc2VDbGFzcztyZXR1cm4gRHQ9PT1ibiYmdG49PT1Cbn0sY2xvbmUoKXtpZih0aGlzLiQkLnB0cnx8TXUodGhp''@;'; put 'put ''cyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSlyZXR1cm4gdGhpcy4kJC5jb3VudC52YWx1ZSs9MSx0aGlzO3ZhciBzdD1fSShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOnZJKHRoaXMuJCQpfX0pKTtyZXR1cm4gc3QuJCQuY291''@;'; put 'put ''bnQudmFsdWUrPTEsc3QuJCQuZGVsZXRlU2NoZWR1bGVkPSExLHN0fSxkZWxldGUoKXt0aGlzLiQkLnB0cnx8TXUodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZfbygiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBk''@;'; put 'put ''ZWxldGlvbiIpLHlJKHRoaXMpLHd3ZSh0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX0saXNEZWxldGVkKCl7cmV0dXJuIXRoaXMuJCQucHRyfSxkZWxldGVMYXRlcigpe3JldHVybiB0''@;'; put 'put ''aGlzLiQkLnB0cnx8TXUodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZfbygiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLE56LnB1c2godGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQ9ITAs''@;'; put 'put ''dGhpc319KTtsZXQgQmU9U3ltYm9sLmRpc3Bvc2U7QmUmJihTZVtCZV09U2UuZGVsZXRlKX0pKCksT2JqZWN0LmFzc2lnbihXei5wcm90b3R5cGUse2dldFBvaW50ZWUoU2Upe3JldHVybiB0aGlzLnJhd0dldFBvaW50ZWUmJihTZT10aGlzLnJhd0dldFBvaW50ZWUoU2UpKSxTZX0sZGVzdHJ1''@;'; put 'put ''Y3RvcihTZSl7dGhpcy5yYXdEZXN0cnVjdG9yPy4oU2UpfSxyZWFkVmFsdWVGcm9tUG9pbnRlcjpqeixmcm9tV2lyZVR5cGU6ZnVuY3Rpb24gaXp0KFNlKXt2YXIgQmU9dGhpcy5nZXRQb2ludGVlKFNlKTtpZighQmUpcmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihTZSksbnVsbDt2YXIgc3Q9KChT''@;'; put 'put ''ZSxCZSk9PihCZT0oKFNlLEJlKT0+e2Zvcih2b2lkIDA9PT1CZSYmX28oInB0ciBzaG91bGQgbm90IGJlIHVuZGVmaW5lZCIpO1NlLmJhc2VDbGFzczspQmU9U2UudXBjYXN0KEJlKSxTZT1TZS5iYXNlQ2xhc3M7cmV0dXJuIEJlfSkoU2UsQmUpLGV6dFtCZV0pKSh0aGlzLnJlZ2lzdGVyZWRD''@;'; put 'put ''bGFzcyxCZSk7aWYodm9pZCAwIT09c3Qpe2lmKDA9PT1zdC4kJC5jb3VudC52YWx1ZSlyZXR1cm4gc3QuJCQucHRyPUJlLHN0LiQkLnNtYXJ0UHRyPVNlLHN0LmNsb25lKCk7dmFyIER0PXN0LmNsb25lKCk7cmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihTZSksRHR9ZnVuY3Rpb24gdG4oKXtyZXR1''@;'; put 'put ''cm4gVXoodGhpcy5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsdGhpcy5pc1NtYXJ0UG9pbnRlcj97cHRyVHlwZTp0aGlzLnBvaW50ZWVUeXBlLHB0cjpCZSxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjpTZX06e3B0clR5cGU6dGhpcyxwdHI6U2V9KX12YXIgUW4sYm49dGhp''@;'; put 'put ''cy5yZWdpc3RlcmVkQ2xhc3MuZ2V0QWN0dWFsVHlwZShCZSksQm49TXdlW2JuXTtpZighQm4pcmV0dXJuIHRuLmNhbGwodGhpcyk7dmFyIGFpPXh3ZShCZSx0aGlzLnJlZ2lzdGVyZWRDbGFzcywoUW49dGhpcy5pc0NvbnN0P0JuLmNvbnN0UG9pbnRlclR5cGU6Qm4ucG9pbnRlclR5cGUpLnJl''@;'; put 'put ''Z2lzdGVyZWRDbGFzcyk7cmV0dXJuIG51bGw9PT1haT90bi5jYWxsKHRoaXMpOlV6KFFuLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx0aGlzLmlzU21hcnRQb2ludGVyP3twdHJUeXBlOlFuLHB0cjphaSxzbWFydFB0clR5cGU6dGhpcyxzbWFydFB0cjpTZX06e3B0clR5cGU6''@;'; put 'put ''UW4scHRyOmFpfSl9fSksZS53YXNtQmluYXJ5JiYoZmU9ZS53YXNtQmluYXJ5KSxlLlVURjhUb1N0cmluZz1fbixlLnN0cmluZ1RvVVRGOD12MCxlLmxlbmd0aEJ5dGVzVVRGOD1DYTt2YXIgVndlLHdvZSxScCxCd2UsandlLHp3ZSxVd2UsV3dlLFp3ZSxZd2UsR3dlLCR3ZSxaeixLd2UsU0ks''@;'; put 'put ''ZlV0PXsxOTA5MDQ6KFNlLEJlKT0+e3ZhciBzdD1fbihTZSksRHQ9X24oQmUpO0J0LmNyZWF0ZVBhdGgoIi8iLHhuLmRpcm5hbWUoc3QpKSxCdC53cml0ZUZpbGUoeG4uam9pbigiLyIsc3QpLER0KX19LE1VdD17aDooU2UsQmUsc3QsRHQpPT5abihgQXNzZXJ0aW9uIGZhaWxlZDogJHtfbihT''@;'; put 'put ''ZSl9LCBhdDogYCtbQmU/X24oQmUpOiJ1bmtub3duIGZpbGVuYW1lIixzdCxEdD9fbihEdCk6InVua25vd24gZnVuY3Rpb24iXSksTDpmdW5jdGlvbiBYOChTZSxCZSxzdCxEdCl7dHJ5e2lmKEJlPXpvLmdldFN0cihCZSksQmU9em8uY2FsY3VsYXRlQXQoU2UsQmUpLC04JnN0KXJldHVybi0y''@;'; put 'put ''ODt2YXIgYm49QnQubG9va3VwUGF0aChCZSx7Zm9sbG93OiEwfSkubm9kZTtpZighYm4pcmV0dXJuLTQ0O3ZhciBCbj0iIjtyZXR1cm4gNCZzdCYmKEJuKz0iciIpLDImc3QmJihCbis9InciKSwxJnN0JiYoQm4rPSJ4IiksQm4mJkJ0Lm5vZGVQZXJtaXNzaW9ucyhibixCbik/LTI6MH1jYXRj''@;'; put 'put ''aChRbil7aWYodHlwZW9mIEJ0PiJ1Inx8IkVycm5vRXJyb3IiIT09UW4ubmFtZSl0aHJvdyBRbjtyZXR1cm4tUW4uZXJybm99fSxuOmZ1bmN0aW9uIHBJKFNlLEJlLHN0KXt6by52YXJhcmdzPXN0O3RyeXt2YXIgRHQ9em8uZ2V0U3RyZWFtRnJvbUZEKFNlKTtzd2l0Y2goQmUpe2Nhc2UgMDpp''@;'; put 'put ''ZigodG49UVMoKSk8MClyZXR1cm4tMjg7Zm9yKDtCdC5zdHJlYW1zW3RuXTspdG4rKztyZXR1cm4gQnQuZHVwU3RyZWFtKER0LHRuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIER0LmZsYWdzO2Nhc2UgNDp2YXIgdG49UVMoKTtyZXR1''@;'; put 'put ''cm4gRHQuZmxhZ3N8PXRuLDA7Y2FzZSAxMjpyZXR1cm4gdG49cTUoKSxGclt0biswPj4xXT0yLDB9cmV0dXJuLTI4fWNhdGNoKFFuKXtpZih0eXBlb2YgQnQ+InUifHwiRXJybm9FcnJvciIhPT1Rbi5uYW1lKXRocm93IFFuO3JldHVybi1Rbi5lcnJub319LEs6ZnVuY3Rpb24gRHooU2UsQmUp''@;'; put 'put ''e3RyeXtyZXR1cm4gem8ud3JpdGVTdGF0KEJlLEJ0LmZzdGF0KFNlKSl9Y2F0Y2goc3Qpe2lmKHR5cGVvZiBCdD4idSJ8fCJFcnJub0Vycm9yIiE9PXN0Lm5hbWUpdGhyb3cgc3Q7cmV0dXJuLXN0LmVycm5vfX0sTzpmdW5jdGlvbiBJeihTZSxCZSxzdCl7em8udmFyYXJncz1zdDt0cnl7dmFy''@;'; put 'put ''IER0PXpvLmdldFN0cmVhbUZyb21GRChTZSk7c3dpdGNoKEJlKXtjYXNlIDIxNTA5OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MjQ6Y2FzZSAyMTUxNTpyZXR1cm4gRHQudHR5PzA6LTU5O2Nhc2UgMjE1MDU6aWYoIUR0LnR0eSlyZXR1cm4tNTk7aWYoRHQudHR5''@;'; put 'put ''Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciB0bj1EdC50dHkub3BzLmlvY3RsX3RjZ2V0cyhEdCksYm49cTUoKTtvdFtibj4+Ml09dG4uY19pZmxhZ3x8MCxvdFtibis0Pj4yXT10bi5jX29mbGFnfHwwLG90W2JuKzg+PjJdPXRuLmNfY2ZsYWd8fDAsb3RbYm4rMTI+PjJdPXRuLmNfbGZsYWd8fDA7''@;'; put 'put ''Zm9yKHZhciBCbj0wO0JuPDMyO0JuKyspSXRbYm4rQm4rMTddPXRuLmNfY2NbQm5dfHwwO3JldHVybiAwfXJldHVybiAwO2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OmlmKCFEdC50dHkpcmV0dXJuLTU5O2lmKER0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtibj1xNSgpO3ZhciBR''@;'; put 'put ''bj1vdFtibj4+Ml0sYWk9b3RbYm4rND4+Ml0sYWE9b3RbYm4rOD4+Ml0sWWE9b3RbYm4rMTI+PjJdLGlvPVtdO2ZvcihCbj0wO0JuPDMyO0JuKyspaW8ucHVzaChJdFtibitCbisxN10pO3JldHVybiBEdC50dHkub3BzLmlvY3RsX3Rjc2V0cyhEdC50dHksQmUse2NfaWZsYWc6UW4sY19vZmxh''@;'; put 'put ''ZzphaSxjX2NmbGFnOmFhLGNfbGZsYWc6WWEsY19jYzppb30pfXJldHVybiAwO2Nhc2UgMjE1MTk6cmV0dXJuIER0LnR0eT8oYm49cTUoKSxvdFtibj4+Ml09MCwwKTotNTk7Y2FzZSAyMTUyMDpyZXR1cm4gRHQudHR5Py0yODotNTk7Y2FzZSAyMTUzNzpjYXNlIDIxNTMxOnJldHVybiBibj1x''@;'; put 'put ''NSgpLEJ0LmlvY3RsKER0LEJlLGJuKTtjYXNlIDIxNTIzOmlmKCFEdC50dHkpcmV0dXJuLTU5O2lmKER0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeil7dmFyIE5hPUR0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihEdC50dHkpO2JuPXE1KCksRnJbYm4+PjFdPU5hWzBdLEZyW2JuKzI+PjFd''@;'; put 'put ''PU5hWzFdfXJldHVybiAwO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaChLYSl7aWYodHlwZW9mIEJ0PiJ1Inx8IkVycm5vRXJyb3IiIT09S2EubmFtZSl0aHJvdyBLYTtyZXR1cm4tS2EuZXJybm99fSxqOmZ1bmN0aW9uIGhvZShTZSxCZSxzdCxEdCl7em8udmFyYXJncz1EdDt0cnl7QmU9em8u''@;'; put 'put ''Z2V0U3RyKEJlKSxCZT16by5jYWxjdWxhdGVBdChTZSxCZSk7dmFyIHRuPUR0P1FTKCk6MDtyZXR1cm4gQnQub3BlbihCZSxzdCx0bikuZmR9Y2F0Y2goYm4pe2lmKHR5cGVvZiBCdD4idSJ8fCJFcnJub0Vycm9yIiE9PWJuLm5hbWUpdGhyb3cgYm47cmV0dXJuLWJuLmVycm5vfX0sRTpmdW5j''@;'; put 'put ''dGlvbiBKNShTZSxCZSxzdCxEdCl7dHJ5e2lmKEJlPXpvLmdldFN0cihCZSksQmU9em8uY2FsY3VsYXRlQXQoU2UsQmUpLER0PD0wKXJldHVybi0yODt2YXIgdG49QnQucmVhZGxpbmsoQmUpLGJuPU1hdGgubWluKER0LENhKHRuKSksQm49SXRbc3QrYm5dO3JldHVybiB2MCh0bixzdCxEdCsx''@;'; put 'put ''KSxJdFtzdCtibl09Qm4sYm59Y2F0Y2goUW4pe2lmKHR5cGVvZiBCdD4idSJ8fCJFcnJub0Vycm9yIiE9PVFuLm5hbWUpdGhyb3cgUW47cmV0dXJuLVFuLmVycm5vfX0sRjpmdW5jdGlvbiBSeihTZSl7dHJ5e3JldHVybiBTZT16by5nZXRTdHIoU2UpLEJ0LnJtZGlyKFNlKSwwfWNhdGNoKEJl''@;'; put 'put ''KXtpZih0eXBlb2YgQnQ+InUifHwiRXJybm9FcnJvciIhPT1CZS5uYW1lKXRocm93IEJlO3JldHVybi1CZS5lcnJub319LEc6ZnVuY3Rpb24gTHooU2UsQmUsc3Qpe3RyeXtpZihCZT16by5nZXRTdHIoQmUpLEJlPXpvLmNhbGN1bGF0ZUF0KFNlLEJlKSxzdCl7aWYoNTEyIT09c3QpcmV0dXJu''@;'; put 'put ''LTI4O0J0LnJtZGlyKEJlKX1lbHNlIEJ0LnVubGluayhCZSk7cmV0dXJuIDB9Y2F0Y2goRHQpe2lmKHR5cGVvZiBCdD4idSJ8fCJFcnJub0Vycm9yIiE9PUR0Lm5hbWUpdGhyb3cgRHQ7cmV0dXJuLUR0LmVycm5vfX0saTpTZT0+e3ZhciBCZT1uZXcgV2ViQXNzZW1ibHkuRXhjZXB0aW9uKGVN''@;'; put 'put ''KCksW1NlXSx7dHJhY2VTdGFjazohMH0pO3Rocm93IEJlLm1lc3NhZ2U9UHooQmUpLEJlfSxNOigpPT5abigiIiksejooU2UsQmUsc3QsRHQsdG4pPT57fSxyOihTZSxCZSxzdCxEdCk9PntTdShTZSx7bmFtZTpCZT1WbihCZSksZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHRuKXtyZXR1cm4hIXRu''@;'; put 'put ''fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKHRuLGJuKXtyZXR1cm4gYm4/c3Q6RHR9LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKHRuKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoWnRbdG5dKX0sZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX0sUTooU2UsQmUsc3QsRHQsdG4sYm4sQm4s''@;'; put 'put ''UW4sYWksYWEsWWEsaW8sTmEpPT57WWE9Vm4oWWEpLGJuPVE1KHRuLGJuKSxRbiYmPVE1KEJuLFFuKSxhYSYmPVE1KGFpLGFhKSxOYT1RNShpbyxOYSk7dmFyIEthPShTZT0+e3ZhciBCZT0oU2U9U2UucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCIkIikpLmNoYXJDb2RlQXQoMCk7cmV0dXJu''@;'; put 'put ''IEJlPj00OCYmQmU8PTU3P2BfJHtTZX1gOlNlfSkoWWEpOygoU2UsQmUsc3QpPT57ZS5oYXNPd25Qcm9wZXJ0eShTZSk/KF9vKGBDYW5ub3QgcmVnaXN0ZXIgcHVibGljIG5hbWUgJyR7U2V9JyB0d2ljZWApLHBvZShlLFNlLFNlKSxlW1NlXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5''@;'; put 'put ''KHN0KSYmX28oYENhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBvdmVybG9hZHMgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgKCR7c3R9KSFgKSxlW1NlXS5vdmVybG9hZFRhYmxlW3N0XT1CZSk6KGVbU2VdPUJlLGVbU2VdLmFyZ0NvdW50PXN0KX0pKEth''@;'; put 'put ''LGZ1bmN0aW9uKCl7bk0oYENhbm5vdCBjb25zdHJ1Y3QgJHtZYX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFtEdF0pfSksZW0oW1NlLEJlLHN0XSxEdD9bRHRdOltdLHhzPT57dmFyIGVjLFBsO3hzPXhzWzBdLFBsPUR0PyhlYz14cy5yZWdpc3RlcmVkQ2xhc3MpLmluc3RhbmNlUHJvdG90eXBl''@;'; put 'put ''OlZ6LnByb3RvdHlwZTt2YXIgVnM9U3dlKFlhLGZ1bmN0aW9uKC4uLlNvZSl7aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpIT09UDApdGhyb3cgbmV3IEN1KGBVc2UgJ25ldycgdG8gY29uc3RydWN0ICR7WWF9YCk7aWYodm9pZCAwPT09VXUuY29uc3RydWN0b3JfYm9keSl0aHJvdyBu''@;'; put 'put ''ZXcgQ3UoYCR7WWF9IGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yYCk7dmFyIFh3ZT1VdS5jb25zdHJ1Y3Rvcl9ib2R5W1NvZS5sZW5ndGhdO2lmKHZvaWQgMD09PVh3ZSl0aHJvdyBuZXcgQ3UoYFRyaWVkIHRvIGludm9rZSBjdG9yIG9mICR7WWF9IHdpdGggaW52YWxpZCBudW1iZXIg''@;'; put 'put ''b2YgcGFyYW1ldGVycyAoJHtTb2UubGVuZ3RofSkgLSBleHBlY3RlZCAoJHtPYmplY3Qua2V5cyhVdS5jb25zdHJ1Y3Rvcl9ib2R5KS50b1N0cmluZygpfSkgcGFyYW1ldGVycyBpbnN0ZWFkIWApO3JldHVybiBYd2UuYXBwbHkodGhpcyxTb2UpfSksUDA9T2JqZWN0LmNyZWF0ZShQbCx7Y29u''@;'; put 'put ''c3RydWN0b3I6e3ZhbHVlOlZzfX0pO1ZzLnByb3RvdHlwZT1QMDt2YXIgVXU9bmV3IFhqdChZYSxWcyxQMCxOYSxlYyxibixRbixhYSk7VXUuYmFzZUNsYXNzJiYoVXUuYmFzZUNsYXNzLl9fZGVyaXZlZENsYXNzZXM/Pz1bXSxVdS5iYXNlQ2xhc3MuX19kZXJpdmVkQ2xhc3Nlcy5wdXNoKFV1''@;'; put 'put ''KSk7dmFyICRoPW5ldyBXeihZYSxVdSwhMCwhMSwhMSkscGQ9bmV3IFd6KFlhKyIqIixVdSwhMSwhMSwhMSkseHU9bmV3IFd6KFlhKyIgY29uc3QqIixVdSwhMSwhMCwhMSk7cmV0dXJuIE13ZVtTZV09e3BvaW50ZXJUeXBlOnBkLGNvbnN0UG9pbnRlclR5cGU6eHV9LCgoU2UsQmUsc3QpPT57''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eShTZSl8fHp6KCJSZXBsYWNpbmcgbm9uZXhpc3RlbnQgcHVibGljIHN5bWJvbCIpLGVbU2VdPUJlLGVbU2VdLmFyZ0NvdW50PXN0fSkoS2EsVnMpLFskaCxwZCx4dV19KX0sbDooU2UsQmUsc3QsRHQsdG4sYm4sQm4sUW4sYWkpPT57dmFyIGFhPXZvZShzdCxEdCk7''@;'; put 'put ''QmU9Vm4oQmUpLEJlPUF3ZShCZSksYm49UTUodG4sYm4sUW4pLGVtKFtdLFtTZV0sWWE9Pnt2YXIgaW89YCR7KFlhPVlhWzBdKS5uYW1lfS4ke0JlfWA7ZnVuY3Rpb24gTmEoKXtuTShgQ2Fubm90IGNhbGwgJHtpb30gZHVlIHRvIHVuYm91bmQgdHlwZXNgLGFhKX1CZS5zdGFydHNXaXRoKCJA''@;'; put 'put ''QCIpJiYoQmU9U3ltYm9sW0JlLnN1YnN0cmluZygyKV0pO3ZhciBLYT1ZYS5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PUthW0JlXT8oTmEuYXJnQ291bnQ9c3QtMSxLYVtCZV09TmEpOihwb2UoS2EsQmUsaW8pLEthW0JlXS5vdmVybG9hZFRhYmxlW3N0LTFd''@;'; put 'put ''PU5hKSxlbShbXSxhYSx4cz0+e3ZhciBlYz1beHNbMF0sbnVsbF0uY29uY2F0KHhzLnNsaWNlKDEpKSxQbD1tb2UoaW8sZWMsbnVsbCxibixCbik7aWYodm9pZCAwPT09S2FbQmVdLm92ZXJsb2FkVGFibGU/KFBsLmFyZ0NvdW50PXN0LTEsS2FbQmVdPVBsKTpLYVtCZV0ub3ZlcmxvYWRUYWJs''@;'; put 'put ''ZVtzdC0xXT1QbCxZYS5yZWdpc3RlcmVkQ2xhc3MuX19kZXJpdmVkQ2xhc3Nlcylmb3IobGV0IFZzIG9mIFlhLnJlZ2lzdGVyZWRDbGFzcy5fX2Rlcml2ZWRDbGFzc2VzKVZzLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KEJlKXx8KFZzLmNvbnN0cnVjdG9yW0JlXT1QbCk7cmV0dXJuW119''@;'; put 'put ''KSxbXX0pfSxwOihTZSxCZSxzdCxEdCx0bixibik9Pnt2YXIgQm49dm9lKEJlLHN0KTt0bj1RNShEdCx0biksZW0oW10sW1NlXSxRbj0+e3ZhciBhaT1gY29uc3RydWN0b3IgJHsoUW49UW5bMF0pLm5hbWV9YDtpZih2b2lkIDA9PT1Rbi5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9k''@;'; put 'put ''eSYmKFFuLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5PVtdKSx2b2lkIDAhPT1Rbi5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtCZS0xXSl0aHJvdyBuZXcgQ3UoYENhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMgd2l0aCBpZGVudGljYWwgbnVt''@;'; put 'put ''YmVyIG9mIHBhcmFtZXRlcnMgKCR7QmUtMX0pIGZvciBjbGFzcyAnJHtRbi5uYW1lfSchIE92ZXJsb2FkIHJlc29sdXRpb24gaXMgY3VycmVudGx5IG9ubHkgcGVyZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXIgY291bnQsIG5vdCBhY3R1YWwgdHlwZSBpbmZvIWApO3JldHVybiBRbi5yZWdp''@;'; put 'put ''c3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtCZS0xXT0oKT0+e25NKGBDYW5ub3QgY29uc3RydWN0ICR7UW4ubmFtZX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLEJuKX0sZW0oW10sQm4sYWE9PihhYS5zcGxpY2UoMSwwLG51bGwpLFFuLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9i''@;'; put 'put ''b2R5W0JlLTFdPW1vZShhaSxhYSxudWxsLHRuLGJuKSxbXSkpLFtdfSl9LGQ6KFNlLEJlLHN0LER0LHRuLGJuLEJuLFFuLGFpLGFhKT0+e3ZhciBZYT12b2Uoc3QsRHQpO0JlPVZuKEJlKSxCZT1Bd2UoQmUpLGJuPVE1KHRuLGJuLGFpKSxlbShbXSxbU2VdLGlvPT57dmFyIE5hPWAkeyhpbz1p''@;'; put 'put ''b1swXSkubmFtZX0uJHtCZX1gO2Z1bmN0aW9uIEthKCl7bk0oYENhbm5vdCBjYWxsICR7TmF9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxZYSl9QmUuc3RhcnRzV2l0aCgiQEAiKSYmKEJlPVN5bWJvbFtCZS5zdWJzdHJpbmcoMildKSxRbiYmaW8ucmVnaXN0ZXJlZENsYXNzLnB1cmVWaXJ0dWFs''@;'; put 'put ''RnVuY3Rpb25zLnB1c2goQmUpO3ZhciB4cz1pby5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsZWM9eHNbQmVdO3JldHVybiB2b2lkIDA9PT1lY3x8dm9pZCAwPT09ZWMub3ZlcmxvYWRUYWJsZSYmZWMuY2xhc3NOYW1lIT09aW8ubmFtZSYmZWMuYXJnQ291bnQ9PT1zdC0yPyhL''@;'; put 'put ''YS5hcmdDb3VudD1zdC0yLEthLmNsYXNzTmFtZT1pby5uYW1lLHhzW0JlXT1LYSk6KHBvZSh4cyxCZSxOYSkseHNbQmVdLm92ZXJsb2FkVGFibGVbc3QtMl09S2EpLGVtKFtdLFlhLFBsPT57dmFyIFZzPW1vZShOYSxQbCxpbyxibixCbik7cmV0dXJuIHZvaWQgMD09PXhzW0JlXS5vdmVybG9h''@;'; put 'put ''ZFRhYmxlPyhWcy5hcmdDb3VudD1zdC0yLHhzW0JlXT1Wcyk6eHNbQmVdLm92ZXJsb2FkVGFibGVbc3QtMl09VnMsW119KSxbXX0pfSxjOihTZSxCZSxzdCxEdCx0bixibixCbixRbixhaSxhYSk9PntCZT1WbihCZSksdG49UTUoRHQsdG4pLGVtKFtdLFtTZV0sWWE9Pnt2YXIgaW89YCR7KFlh''@;'; put 'put ''PVlhWzBdKS5uYW1lfS4ke0JlfWAsTmE9e2dldCgpe25NKGBDYW5ub3QgYWNjZXNzICR7aW99IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxbc3QsQm5dKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O3JldHVybiBOYS5zZXQ9YWk/KCk9Pm5NKGBDYW5ub3QgYWNjZXNzICR7aW99IGR1''@;'; put 'put ''ZSB0byB1bmJvdW5kIHR5cGVzYCxbc3QsQm5dKTpLYT0+X28oaW8rIiBpcyBhIHJlYWQtb25seSBwcm9wZXJ0eSIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZYS5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsQmUsTmEpLGVtKFtdLGFpP1tzdCxCbl06W3N0XSxLYT0+e3ZhciB4''@;'; put 'put ''cz1LYVswXSxlYz17Z2V0KCl7dmFyIFZzPWt3ZSh0aGlzLFlhLGlvKyIgZ2V0dGVyIik7cmV0dXJuIHhzLmZyb21XaXJlVHlwZSh0bihibixWcykpfSxlbnVtZXJhYmxlOiEwfTtpZihhaSl7YWk9UTUoUW4sYWkpO3ZhciBQbD1LYVsxXTtlYy5zZXQ9ZnVuY3Rpb24oVnMpe3ZhciBQMD1rd2Uo''@;'; put 'put ''dGhpcyxZYSxpbysiIHNldHRlciIpLFV1PVtdO2FpKGFhLFAwLFBsLnRvV2lyZVR5cGUoVXUsVnMpKSxUd2UoVXUpfX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFlhLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSxCZSxlYyksW119KSxbXX0pfSxQOlNlPT5TdShTZSxf''@;'; put 'put ''enQpLG86KFNlLEJlLHN0KT0+e1N1KFNlLHtuYW1lOkJlPVZuKEJlKSxmcm9tV2lyZVR5cGU6RHQ9PkR0LHRvV2lyZVR5cGU6KER0LHRuKT0+dG4scmVhZFZhbHVlRnJvbVBvaW50ZXI6d3p0KEJlLHN0KSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxiOihTZSxCZSxzdCxEdCx0bik9PntC''@;'; put 'put ''ZT1WbihCZSk7bGV0IEJuPWFpPT5haTtpZigwPT09RHQpe3ZhciBRbj0zMi04KnN0O0JuPWFpPT5haTw8UW4+Pj5Rbix0bj1Cbih0bil9U3UoU2Use25hbWU6QmUsZnJvbVdpcmVUeXBlOkJuLHRvV2lyZVR5cGU6KGFpLGFhKT0+YWEscmVhZFZhbHVlRnJvbVBvaW50ZXI6U3p0KEJlLHN0LDAh''@;'; put 'put ''PT1EdCksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX0sYTooU2UsQmUsc3QpPT57dmFyIHRuPVtJbnQ4QXJyYXksVWludDhBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheV1bQmVdO2Z1bmN0aW9uIGJu''@;'; put 'put ''KEJuKXtyZXR1cm4gbmV3IHRuKEl0LmJ1ZmZlcixFdFtCbis0Pj4yXSxFdFtCbj4+Ml0pfVN1KFNlLHtuYW1lOnN0PVZuKHN0KSxmcm9tV2lyZVR5cGU6Ym4scmVhZFZhbHVlRnJvbVBvaW50ZXI6Ym59LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9LHE6KFNlLEJlKT0+e1N1''@;'; put 'put ''KFNlLHtuYW1lOkJlPVZuKEJlKSxmcm9tV2lyZVR5cGUoRHQpe3ZhciBCbjtyZXR1cm4gQm49X24oRHQrNCxFdFtEdD4+Ml0sITApLFJwKER0KSxCbn0sdG9XaXJlVHlwZShEdCx0bil7dG4gaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKHRuPW5ldyBVaW50OEFycmF5KHRuKSk7dmFyIGJuLEJu''@;'; put 'put ''PSJzdHJpbmciPT10eXBlb2YgdG47Qm58fEFycmF5QnVmZmVyLmlzVmlldyh0bikmJjE9PXRuLkJZVEVTX1BFUl9FTEVNRU5UfHxfbygiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBzdGQ6OnN0cmluZyIpLGJuPUJuP0NhKHRuKTp0bi5sZW5ndGg7dmFyIFFuPXdvZSg0K2JuKzEpLGFpPVFu''@;'; put 'put ''KzQ7cmV0dXJuIEV0W1FuPj4yXT1ibixCbj92MCh0bixhaSxibisxKTpadC5zZXQodG4sYWkpLG51bGwhPT1EdCYmRHQucHVzaChScCxRbiksUW59LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmp6LGRlc3RydWN0b3JGdW5jdGlvbihEdCl7UnAoRHQpfX0pfSxlOihTZSxCZSxzdCk9Pnt2YXIgRHQs''@;'; put 'put ''dG4sYm47c3Q9Vm4oc3QpLDI9PT1CZT8oRHQ9VHp0LHRuPUF6dCxibj1renQpOihEdD1EenQsdG49SXp0LGJuPVJ6dCksU3UoU2Use25hbWU6c3QsZnJvbVdpcmVUeXBlOkJuPT57dmFyIGFpPUR0KEJuKzQsRXRbQm4+PjJdKkJlLCEwKTtyZXR1cm4gUnAoQm4pLGFpfSx0b1dpcmVUeXBlOihC''@;'; put 'put ''bixRbik9Pnsic3RyaW5nIiE9dHlwZW9mIFFuJiZfbyhgQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgJHtzdH1gKTt2YXIgYWk9Ym4oUW4pLGFhPXdvZSg0K2FpK0JlKTtyZXR1cm4gRXRbYWE+PjJdPWFpL0JlLHRuKFFuLGFhKzQsYWkrQmUpLG51bGwhPT1CbiYm''@;'; put 'put ''Qm4ucHVzaChScCxhYSksYWF9LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmp6LGRlc3RydWN0b3JGdW5jdGlvbihCbil7UnAoQm4pfX0pfSxzOihTZSxCZSk9PntTdShTZSx7aXNWb2lkOiEwLG5hbWU6QmU9Vm4oQmUpLGZyb21XaXJlVHlwZTooKT0+e30sdG9XaXJlVHlwZTooc3QsRHQpPT57fX0p''@;'; put 'put ''fSxCOigpPT57fSx2OmZ1bmN0aW9uIGp6dChTZSxCZSxzdCl7dmFyIER0PWJJKFNlLEJlKSx0bj1uZXcgRGF0ZSgxZTMqRHQpO290W3N0Pj4yXT10bi5nZXRTZWNvbmRzKCksb3Rbc3QrND4+Ml09dG4uZ2V0TWludXRlcygpLG90W3N0Kzg+PjJdPXRuLmdldEhvdXJzKCksb3Rbc3QrMTI+PjJd''@;'; put 'put ''PXRuLmdldERhdGUoKSxvdFtzdCsxNj4+Ml09dG4uZ2V0TW9udGgoKSxvdFtzdCsyMD4+Ml09dG4uZ2V0RnVsbFllYXIoKS0xOTAwLG90W3N0KzI0Pj4yXT10bi5nZXREYXkoKTt2YXIgYm49MHwoU2U9PigoU2U9PlNlJTQ9PTAmJihTZSUxMDAhPTB8fFNlJTQwMD09MCkpKFNlLmdldEZ1bGxZ''@;'; put 'put ''ZWFyKCkpP056dDpWenQpW1NlLmdldE1vbnRoKCldK1NlLmdldERhdGUoKS0xKSh0bik7b3Rbc3QrMjg+PjJdPWJuLG90W3N0KzM2Pj4yXT0tNjAqdG4uZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgQm49bmV3IERhdGUodG4uZ2V0RnVsbFllYXIoKSwwLDEpLFFuPW5ldyBEYXRlKHRuLmdldEZ1''@;'; put 'put ''bGxZZWFyKCksNiwxKS5nZXRUaW1lem9uZU9mZnNldCgpLGFpPUJuLmdldFRpbWV6b25lT2Zmc2V0KCksYWE9MHwoUW4hPWFpJiZ0bi5nZXRUaW1lem9uZU9mZnNldCgpPT1NYXRoLm1pbihhaSxRbikpO290W3N0KzMyPj4yXT1hYX0sdDpmdW5jdGlvbiB6enQoU2UsQmUsc3QsRHQsdG4sYm4s''@;'; put 'put ''Qm4sUW4pe3ZhciBhaT1iSSh0bixibik7dHJ5e3ZhciBhYT16by5nZXRTdHJlYW1Gcm9tRkQoRHQpLFlhPUJ0Lm1tYXAoYWEsU2UsYWksQmUsc3QpLGlvPVlhLnB0cjtyZXR1cm4gb3RbQm4+PjJdPVlhLmFsbG9jYXRlZCxFdFtRbj4+Ml09aW8sMH1jYXRjaChOYSl7aWYodHlwZW9mIEJ0PiJ1''@;'; put 'put ''Inx8IkVycm5vRXJyb3IiIT09TmEubmFtZSl0aHJvdyBOYTtyZXR1cm4tTmEuZXJybm99fSx1OmZ1bmN0aW9uIFV6dChTZSxCZSxzdCxEdCx0bixibixCbil7dmFyIFFuPWJJKGJuLEJuKTt0cnl7dmFyIGFpPXpvLmdldFN0cmVhbUZyb21GRCh0bik7MiZzdCYmem8uZG9Nc3luYyhTZSxhaSxC''@;'; put 'put ''ZSxEdCxRbil9Y2F0Y2goYWEpe2lmKHR5cGVvZiBCdD4idSJ8fCJFcnJub0Vycm9yIiE9PWFhLm5hbWUpdGhyb3cgYWE7cmV0dXJuLWFhLmVycm5vfX0sQzooU2UsQmUpPT57aWYod0lbU2VdJiYoY2xlYXJUaW1lb3V0KHdJW1NlXS5pZCksZGVsZXRlIHdJW1NlXSksIUJlKXJldHVybiAwO3Zh''@;'; put 'put ''ciBzdD1zZXRUaW1lb3V0KCgpPT57ZGVsZXRlIHdJW1NlXSwoU2U9PntpZighQWUpdHJ5e3JldHVybiBTZSgpfWNhdGNoKEJlKXsoU2U9PntpZihTZSBpbnN0YW5jZW9mIGxhfHwidW53aW5kIj09U2UpcmV0dXJuIEhlO2EoMCxTZSl9KShCZSl9fSkoKCk9Pmp3ZShTZSxId2UoKSkpfSxCZSk7''@;'; put 'put ''cmV0dXJuIHdJW1NlXT17aWQ6c3QsdGltZW91dF9tczpCZX0sMH0sSDooU2UsQmUsc3QsRHQpPT57dmFyIHRuPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxibj1uZXcgRGF0ZSh0biwwLDEpLEJuPW5ldyBEYXRlKHRuLDYsMSksUW49Ym4uZ2V0VGltZXpvbmVPZmZzZXQoKSxhaT1Cbi5nZXRU''@;'; put 'put ''aW1lem9uZU9mZnNldCgpLGFhPU1hdGgubWF4KFFuLGFpKTtFdFtTZT4+Ml09NjAqYWEsb3RbQmU+PjJdPSsoUW4hPWFpKTt2YXIgWWE9S2E9Pnt2YXIgeHM9S2E+PTA/Ii0iOiIrIixlYz1NYXRoLmFicyhLYSk7cmV0dXJuYFVUQyR7eHN9JHtTdHJpbmcoTWF0aC5mbG9vcihlYy82MCkpLnBh''@;'; put 'put ''ZFN0YXJ0KDIsIjAiKX0ke1N0cmluZyhlYyU2MCkucGFkU3RhcnQoMiwiMCIpfWB9LGlvPVlhKFFuKSxOYT1ZYShhaSk7YWk8UW4/KHYwKGlvLHN0LDE3KSx2MChOYSxEdCwxNykpOih2MChpbyxEdCwxNyksdjAoTmEsc3QsMTcpKX0seTpmdW5jdGlvbiBxenQoU2UsQmUsc3QsRHQpe3ZhciBi''@;'; put 'put ''bjtpZihiSShCZSxzdCksIShTZT0+U2U+PTAmJlNlPD0zKShTZSkpcmV0dXJuIDI4O2JuPTA9PT1TZT9Od2UoKTpId2UoKTt2YXIgQm49TWF0aC5yb3VuZCgxZTMqYm4qMWUzKTtyZXR1cm4gVGk9W0JuPj4+MCwoanI9Qm4sK01hdGguYWJzKGpyKT49MT9qcj4wPytNYXRoLmZsb29yKGpyLzQy''@;'; put 'put ''OTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG90W0R0Pj4yXT1UaVswXSxvdFtEdCs0Pj4yXT1UaVsxXSwwfSx3OihTZSxCZSxzdCk9PigoU2UsQmUsc3QpPT57dmFyIER0PSgoU2UsQmUpPT57X29lLmxlbmd0aD0wO2Zvcih2''@;'; put 'put ''YXIgc3Q7c3Q9WnRbU2UrK107KXt2YXIgRHQ9MTA1IT1zdDtCZSs9KER0Jj0xMTIhPXN0KSYmQmUlOD80OjAsX29lLnB1c2goMTEyPT1zdD9FdFtCZT4+Ml06MTA1PT1zdD9vdFtCZT4+Ml06RW5bQmU+PjNdKSxCZSs9RHQ/ODo0fXJldHVybiBfb2V9KShCZSxzdCk7cmV0dXJuIGZVdFtTZV0o''@;'; put 'put ''Li4uRHQpfSkoU2UsQmUsc3QpLGs6TndlLEQ6U2U9Pnt2YXIgQmU9WnQubGVuZ3RoLHN0PTIxNDc0ODM2NDg7aWYoKFNlPj4+PTApPnN0KXJldHVybiExO2Zvcih2YXIgRHQ9MTtEdDw9NDtEdCo9Mil7dmFyIHRuPUJlKigxKy4yL0R0KTt0bj1NYXRoLm1pbih0bixTZSsxMDA2NjMyOTYpO3Zh''@;'; put 'put ''ciBibj1NYXRoLm1pbihzdCxlcyhNYXRoLm1heChTZSx0biksNjU1MzYpKTtpZihuVXQoYm4pKXJldHVybiEwfXJldHVybiExfSxJOihTZSxCZSk9Pnt2YXIgc3Q9MCxEdD0wO2Zvcih2YXIgdG4gb2YgQ0koKSl7dmFyIGJuPUJlK3N0O0V0W1NlK0R0Pj4yXT1ibixzdCs9djAodG4sYm4sMS8w''@;'; put 'put ''KSsxLER0Kz00fXJldHVybiAwfSxKOihTZSxCZSk9Pnt2YXIgc3Q9Q0koKTtFdFtTZT4+Ml09c3QubGVuZ3RoO3ZhciBEdD0wO2Zvcih2YXIgdG4gb2Ygc3QpRHQrPUNhKHRuKSsxO3JldHVybiBFdFtCZT4+Ml09RHQsMH0sZzooU2UsQmUpPT57SGU9U2UsUHdlKFNlKX0sZjpmdW5jdGlvbiBz''@;'; put 'put ''VXQoU2Upe3RyeXt2YXIgQmU9em8uZ2V0U3RyZWFtRnJvbUZEKFNlKTtyZXR1cm4gQnQuY2xvc2UoQmUpLDB9Y2F0Y2goc3Qpe2lmKHR5cGVvZiBCdD4idSJ8fCJFcnJub0Vycm9yIiE9PXN0Lm5hbWUpdGhyb3cgc3Q7cmV0dXJuIHN0LmVycm5vfX0sbTpmdW5jdGlvbiBjVXQoU2UsQmUsc3Qs''@;'; put 'put ''RHQpe3RyeXt2YXIgYm49KChTZSxCZSxzdCxEdCk9Pntmb3IodmFyIHRuPTAsYm49MDtibjxzdDtibisrKXt2YXIgQm49RXRbQmU+PjJdLFFuPUV0W0JlKzQ+PjJdO0JlKz04O3ZhciBhaT1CdC5yZWFkKFNlLEl0LEJuLFFuLER0KTtpZihhaTwwKXJldHVybi0xO2lmKHRuKz1haSxhaTxRbili''@;'; put 'put ''cmVhazt0eXBlb2YgRHQ8InUiJiYoRHQrPWFpKX1yZXR1cm4gdG59KSh6by5nZXRTdHJlYW1Gcm9tRkQoU2UpLEJlLHN0KTtyZXR1cm4gRXRbRHQ+PjJdPWJuLDB9Y2F0Y2goQm4pe2lmKHR5cGVvZiBCdD4idSJ8fCJFcnJub0Vycm9yIiE9PUJuLm5hbWUpdGhyb3cgQm47cmV0dXJuIEJuLmVy''@;'; put 'put ''cm5vfX0seDpmdW5jdGlvbiB1VXQoU2UsQmUsc3QsRHQsdG4pe3ZhciBibj1iSShCZSxzdCk7dHJ5e2lmKGlzTmFOKGJuKSlyZXR1cm4gNjE7dmFyIEJuPXpvLmdldFN0cmVhbUZyb21GRChTZSk7cmV0dXJuIEJ0Lmxsc2VlayhCbixibixEdCksVGk9W0JuLnBvc2l0aW9uPj4+MCwoanI9Qm4u''@;'; put 'put ''cG9zaXRpb24sK01hdGguYWJzKGpyKT49MT9qcj4wPytNYXRoLmZsb29yKGpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGpyLSsofn5qcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG90W3RuPj4yXT1UaVswXSxvdFt0bis0Pj4yXT1UaVsxXSxCbi5nZXRkZW50cyYmMD09PWJu''@;'; put 'put ''JiYwPT09RHQmJihCbi5nZXRkZW50cz1udWxsKSwwfWNhdGNoKFFuKXtpZih0eXBlb2YgQnQ+InUifHwiRXJybm9FcnJvciIhPT1Rbi5uYW1lKXRocm93IFFuO3JldHVybiBRbi5lcnJub319LE46ZnVuY3Rpb24gaFV0KFNlLEJlLHN0LER0KXt0cnl7dmFyIGJuPSgoU2UsQmUsc3QsRHQpPT57''@;'; put 'put ''Zm9yKHZhciB0bj0wLGJuPTA7Ym48c3Q7Ym4rKyl7dmFyIEJuPUV0W0JlPj4yXSxRbj1FdFtCZSs0Pj4yXTtCZSs9ODt2YXIgYWk9QnQud3JpdGUoU2UsSXQsQm4sUW4sRHQpO2lmKGFpPDApcmV0dXJuLTE7aWYodG4rPWFpLGFpPFFuKWJyZWFrO3R5cGVvZiBEdDwidSImJihEdCs9YWkpfXJl''@;'; put 'put ''dHVybiB0bn0pKHpvLmdldFN0cmVhbUZyb21GRChTZSksQmUsc3QpO3JldHVybiBFdFtEdD4+Ml09Ym4sMH1jYXRjaChCbil7aWYodHlwZW9mIEJ0PiJ1Inx8IkVycm5vRXJyb3IiIT09Qm4ubmFtZSl0aHJvdyBCbjtyZXR1cm4gQm4uZXJybm99fSxBOlB3ZX07cmV0dXJuIFNJPXlpZWxkIGZ1''@;'; put 'put ''bmN0aW9uIGJpKCl7cmV0dXJuIFNpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oKSxmdW5jdGlvbiBDb2UoKXt0cz4wfHx0cz4wP1loPUNvZTpmdW5jdGlvbiBTZSgpe2UuY2FsbGVkUnVuPSEwLCFBZSYmKGZ1bmN0aW9uIG9uKCl7anQ9ITAsIWUubm9GU0luaXQmJiFCdC5pbml0aWFsaXplZCYm''@;'; put 'put ''QnQuaW5pdCgpLEdvLmluaXQoKSxTSS5TKCksQnQuaWdub3JlUGVybWlzc2lvbnM9ITF9KCkscnQ/LihlKSl9KCl9KCksanQ/ZTpuZXcgUHJvbWlzZSgoU2UsQmUpPT57cnQ9U2UsZHQ9QmV9KX0pLG5vZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIHJvZSxWRnQ9bmV3IEludDhBcnJheShb''@;'; put 'put ''LTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsNjIsOTAsNjMsNjQsNjUsNjYsLTEsNjcsNjgsNjksNzAsNzEsLTEsNzIsNzMsNTIsNTMsNTQsNTUsNTYsNTcsNTgs''@;'; put 'put ''NTksNjAsNjEsNzQsNzUsNzYsNzcsNzgsNzksODAsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSw4MSwtMSw4Miw4Myw4NCw4NSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0''@;'; put 'put ''Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw4Niw4Nyw4OCw4OSwtMV0pO2Z1bmN0aW9uIHpGdCgpe3JldHVybiByb2U/Pz1mdW5jdGlvbiBGRnQobix0KXtmb3IodmFyIGU9W10scj0rIXQsaT0wLGE9MDtuLmxlbmd0aDspe3ZhciBjPUVGdChuLHJ8fHQpO2lmKCJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgYyl7Zm9yKHI/KHQ9bnVsbCxjLncubGVuZ3RoPT1jLnUmJihlLnB1c2godD1jLncpLGErPWMudSkpOihlLnB1c2godCksYy5lPTApOyFjLmw7KXt2YXIgbT1PRnQobixjLHQpO218fGcwKDUpLHQ/Yy5lPWMueTooZS5wdXNoKG0pLGErPW0ubGVuZ3RoLFNGdChjLncsMCxtLmxlbmd0aCks''@;'; put 'put ''Yy53LnNldChtLGMudy5sZW5ndGgtbS5sZW5ndGgpKX1pPWMuYis0KmMuY31lbHNlIGk9YztuPW4uc3ViYXJyYXkoaSl9cmV0dXJuIGZ1bmN0aW9uKG4sdCl7aWYoMT09bi5sZW5ndGgpcmV0dXJuIG5bMF07Zm9yKHZhciBlPW5ldyB6dSh0KSxyPTAsaT0wO3I8bi5sZW5ndGg7KytyKXt2YXIg''@;'; put 'put ''YT1uW3JdO2Uuc2V0KGEsaSksaSs9YS5sZW5ndGh9cmV0dXJuIGV9KGUsYSl9KGZ1bmN0aW9uIEJGdChuKXtsZXQgdD1uZXcgVWludDhBcnJheSg1OTM2MjkpLGU9MCxyPTAsaT0wLGE9LTE7Zm9yKGxldCBjPTAsbT1uLmxlbmd0aDtjPG07YysrKXtsZXQgQz1uLmNoYXJDb2RlQXQoYyk7aWYo''@;'; put 'put ''Qz4xMjcpY29udGludWU7bGV0IFA9VkZ0W0NdO2lmKCEoUDwwKSlpZihhPDApYT1QO2Vsc2V7YSs9OTEqUCxyfD1hPDxpLGkrPSg4MTkxJmEpPjg4PzEzOjE0O2Rve3RbZSsrXT1yLHI+Pj49OCxpLT04fXdoaWxlKGk+Nyk7YT0tMX19cmV0dXJuIGE+PTAmJih0W2UrK109MjU1JihyfGE8PGkp''@;'; put 'put ''KSx0fSgndjcjYSNBJmluNj5KZXhVa1dWJUEmUHVVSW8vL1Zbd1RscD5kXipjXUpTQUVRMkI8fn0iJT4ubl5sIUE0T0BVfl5tWjR4QkQsdXlwXntIYTp9W29NZkBvbVI8PldeaS9gcHUrQmoxVGp5LCwmWjZ7YXZPI3kpRTtrU2UpTmVnQWRjJVVKPDdqbTMoWjo+ZGFPaG55NWNSKXJbOkx6OVAv''@;'; put 'put ''N2FUeUJeVXRKT1guOmpPSXJnZU5zP0h4N2Ikenl5bn0hYWFkJH5jb3czR2ZsWWtjNTJvclFfamwwO2RWXVNWZixeP2J0UXA5NmMrPTRTcDFhMDZITCFqMzxRfEY3a352VixPOTg4dzZ9bVRKaDg7ZjZPcVF+bCYwOz1TY1hsVSlyOXMvXitWJX00fmBVYl9pb0RwfjptRGl9JCU3YklzRyg5Pmgw''@;'; put 'put ''cH0kLGRbbUtaYV9SbDgkN3EobX4zNmh+XTBdfiRESVZrcHIkQFNZYGtIK04lJW5zWTQ3KjIlMGxDWzElaW9+KHFkKkZJejIlPlQiNy47XiUoST5mclp3UyRoQDUxN0hvLlY1KSlPbDYwP3glRH1GM3RARGN+aFhIWCo+dm07QEdeaXZsMSFCXy8zPD1+OkEsOk87YyI+aShyVmV+Zn5YPT9tZ0JE''@;'; put 'put ''b09zOVRFLDN7U0x9UjxlcCNxWV1zezdaK3IhTjdsUU9seEppWDs6VCZVXWh9bT9ZR2BkN2FHXTJfblopemEhOnNAVmhdZiF6aFBGe3hRcGFmTjF5dVtGMj5IbzxJaG5bVSpvPy8lYUxZUnFZQGJaIz0lPU9XQn5oYEh7Y1p1a3AoTEpSfHVqKHtDUFNAS2N7OmMrLzp2akxPYnd5bFN0eV8uPjkr''@;'; put 'put ''T1ladjIweDQvOmtrVmhGIypjQHdEbWZ7V10kLiVgTF81c0NqQSQ5ZDI2TX1PJTcvI0w/Sl5vTF46I210UTlvZGp+JkU8ayxUL2s9RmBFV0sqYUA/TVloeE9MJl5ea0E/MDUjaWVIKzlkS0tAcTopIy9xQCRoUj8/L05aeyV+emcwfWJiL2YzMVd3MH09KjRifm1rYVJvZEo7PS9+UDFJVUd5fnop''@;'; put 'put ''PXZHOGJOVzdHSzdzKDkuIT1EPiwuRGV0KGN7PV5xJGpXOyZKZXAuTyV3IWR7X15nOlcxeGZzYUxldTN+Km93Sm9RJU83d1cwfWJuJHA/SWtjansyWlpvMmpRKmVwQHNJfjZlOylLckpEfjduMSZGMj5zWlhveX5FcmpkaTExTUolaWttJCM4MTdsUUVEZF96PUNEV1Nqb0UlZjlEVj1tXUIobzI4''@;'; put 'put ''JGxCb1I7aUFmIW9mfDBgQylCb1UlPiolV3ZaOU9+fSE8K0ZPWnt4QHg2c1NyfU4+UkBfQzg6TW03MnhHX1Y9cmxmOEZ8PDRfZF8lX0svKlg3WmljaF8+UVA6OWpYdGY6dSM7KC5scWkmTF5HbVlac1txbERGM0NlXnNCb1ReIzRRND1nNGFRcUQwWSxuLnJLMCVld2tuN0d5M3lAMGVtam9yKmZj''@;'; put 'put ''YmRfODZHVjFwaFh4eDV+NlkpLzQrR34vfXM1Ti4lfU5VKE1TYkdtZjpGek1gRShSazp7ZD17N2E1K1BwNzB2YSh6YyM2V3tnfipTVlNoYjtncX1HRmJxIjp8OjRvNSVidHY7KDw2IS5dIjA/YylOOSpyV2lWQHd3fmRnVDZmVzkhN3kyaFJMQSJseFhpLG4jZmJIZ31qVWVzVnRuL2chJjNBSzVr''@;'; put 'put ''a0JuY0svaVR3ODM0VV0rWTo3eEd9WGk6RGphVylecWBqM3ZZMHciQl9Qc1VJbHJWImJ+SCo9PiNgWzleIzs+djF5U3pYOCw8cUtQfiN5PEVeTmorKlAicTwvNDJvXSxAYk5LSzJ7Kzs7djR5aiUhJVpodmBBJkImcTx9ezkkPCEpJj1tKkB4ZkIle2I7Z3QsbX1OcS4ldFBAM0lsInEsT1Z+JWxG''@;'; put 'put ''PVlKYTldTzpMKFhUVyszPTdhKzdTTVMiMFFacl1WVzRKIn1mblJVYDdqeit8eWVeflAxbDZoREdfe34zamRuQTdNXSV9bWxQXXFhV251TDkjOzxuLjVlNy4zMXtHc0xwX25tIXNIM3V3QD5XLF9OXjxIM1c5P1ZKQElnYyUuOEozSDNUWS9+aysoU3l+bVJ5T0J+NDVRN3QySkVbOkcuRnZwXWRi''@;'; put 'put ''XjQkPjViZ2AxbHklQnREfUhAPX0yZ0hrUzBuJGtsfC9RZXQoXypHRUkoSHdfb3wjY35JUHAlXXs9ek9dX3slb2NkN1UwQDU9KyRpUE5jaT5ob0UlO0c0cz1sZCZTNEwqWnskNyx6V3tRfDZkMXd4ci5gM29Sb0o7a15ifmlUUXk5PnJkbHxFLzI1RzVsT144P3VXYSh6UjFRU0k3N2ddMEgsKjZ9''@;'; put 'put ''ZCNoOX03Z2BoM3cvcjp7Qkkwc1RARSQ9Zk5AW0dtYTh6KlskezcmJSgyfTk4eyV5Oy5+bDxjfm1tTjRHIyNPND5pb0Q1L3tEeGlHOSRmbHk7MWp0MjBdJmh+Qk9sLyFke1svTCUwXWZNdm9SVWIyeG1aPnZAKWc5JjhoUlVyPCteMSN7Ti5+cTh8Qzk6dSVTfVFfaW9sN3crITp1JWV9YyVQU1df''@;'; put 'put ''YyVyalkxcy5AVkhgUi4/Yjx3NU0mdSlFRElNZ3A5QHdkLmVIXmNqKGVnNGAiMHZjZmd5YnVyfCl0ZU4rQW01JGRFMU5xZTJMZWRWYWJ7azN1YHgxdjJYc15QfHc8RFtbRjNnOGFXLF4uNlY5Xj1sPkpRYSxDeE5mWGlSVGYrWEx9Uk5gZmYxJlBFJjReJVgsdnV8TzhObjdEV2gsNGVdanApXSw0''@;'; put 'put ''ZWl6c1d9R0coTm0lRSxyYlFNb3c/O1tWOV9VcVcsJnkzbi45QE1IV1ReR2N7I09KTCpAKi9eUFpMX2pLd31vTT8oOEMxLmFkOipnVFVTJWEmVXREKFVbOG8iWlA6ZW5TeHBaL34yfV59ezBdallLZFA0Smd6an03JjtPOXxNfkBQL2FXXjA2cDkveDwrdSVNKzg5dHsxMCNdbnB+PFlNbm0zNShM''@;'; put 'put ''KVArI3dTZigmSUI5VDBrUWV+YmhuZmwsL2pnLDxnRT96O0NMNmo0NzpLelJrfUgocyh1JGt4Yjw+I0dpZ2Q0YSNVW2pgPCV+TWorO0NAbGJiWEZKbHtQYUdLKnNiOUUjZERKZSFWY1liIzpXUkwyKTw7anNWVGV+P11pbDtZfl1Wa0JaYGthWl10NmVaV2RuU1V+cm9tY2JpT2N9InwufjxTRDlk''@;'; put 'put ''PnMseFlsTSE1PF1XMk5iLGtPbzsyKEglXSh0SWVKc3kuKD1JXSpOVn0zamIwWSNkRGJ+dDpqaGRiJTleZVZ5SHNWPX5rRSU2ZzhCZnUvcCo8LiV0UFZnM287cSxJYk15dVViO185c08jJk12UT4vXnNROTBSaXNoeFF6M3BTMT01SUtSMHVkNkhPTSRnJlkqQDxjXUNBWDhkYD8yOzdDeD1aKHEu''@;'; put 'put ''MSVzcX5gSE84b3ZLOD5CNz48IV05czhOKlNRLmZ7aV9jJVVabF1ZPltTPCgzfXF+XTgkbFJgOHoxJGVneDJvcCtwdF8zXTBQJCM+KVlkUVRrKFYjPH1WJVJkaCQpP019UHF0X1EoVSQpP2NzK3lsRFc5MyEwZlc2ZEROajt5OkQ9MlZ5MiZ3U0hMbHVzd3VkMSZYMCZjSFc7R3I4ZkB2biRdfT5+''@;'; put 'put ''QjJqL3FWWSY+d0RxJCUhR0kiWnFVRihUcGpdYDs5LFFdUXxdZi5bY305PmQ4OmtMXjQ4IVpdc095bCsoR1E2PSNtJlVbVH1CazohLDxdLDhMV356b2Q2cTpnYXR3NSViPCRiezpKcldeNjRscE1obHtlLm5XVTZGJXtOUkhNOy5sb0t1YUNaUVRdJXkrVGpgOHE4SF00YStwQVFoOC9zT24lZGFP''@;'; put 'put ''NjBSO3FWPWRLKzV4PEVrOixZLlNQP2EqPFkwe0ZGbk1rMVBsbWZoR3FjKi55dlRHdlZkODdNVmElX3tPXV43dm1NKWh1WlZiPUVFfHd8KjNgOkdGYGNVO09TNWpNS3dTKT5hZ1BvTkxCfltrS09vWno3KT5kdHVlfnEmeH1Qfk1mLlhbV2R5ey9RQ0Qzdnh2eW5WKn1DW2lITD0+OH5fZWtufjRJ''@;'; put 'put ''fUhWMmxOSmA/T0FtcDErME9ZcDkiTjd0TWluSVllXnxvX3lpVzxDd0xQOnNXUiNxSnc7bXxsXSR7ZDpiUik3M317JXldV1dMY1Nfbi5qV2hiXlBrfiQjd2JOWSkmU3wpNVZvYE4zVlZzKVpMY1tXQjtvOzJhU0xpUSw6a156Kj0ybDp4L2pteSNAZC5sVyQ1ZVBlLkBbWkd9TyNLYDk9Wk15QDh+''@;'; put 'put ''fSRIcCY+eTM6bkxXJjM4MDs4LDY3cUUjSDRlNiF+cmhVYkoqe3A5KTh+MlN0UWIyWXREdnlnTmU0cz42MyFKJjA5ZDZFLHlOUG1nTzVPYWBCYDtzKVNTOFZ3dHlvbDNfZSg7NlJsezdmKDR7fiFvP18kcXQ8RX43cSssYGRXbENpZGpqM11USFp1OSo3MiIhQGRPZF8kQXkiJHg/Lz05N3F9O30k''@;'; put 'put ''aCsqc15WOD9OKFNSez5iY3A7fSJadTA8enI4dmdIeTNwc0hXbFk5KFYycnBEKntqLi5uY2xmZ055VTFGcGNOYl86TkZYRUtpfTZIV05eI3RXfXtIVUplIno2ZUB8Njs8MDg6Qn05MGFkTzlzbFJdKWc7UWFUfUprQjMyZV9iPHZNcEZjYiZ1IXw7KTNhWiptSzJHd10hQS89VVt+WD00MUVfXnJr''@;'; put 'put ''Vjd0TXBtamBwVzUycihiOFdgKX4rWTtnIXNZayY+OTdxPWRXO1VsXW1hXV1qJSwvaTI+YjpsT3lzS1FLIiVEVXpseWlhfmw+eXIvUDg+OT55cjgyNmIqPlZsSVZKNX5iKT4mYzY7MUooKTN4dCZlSj9ZaTdkSltUV2xYNlg5PFBXPTV8Z1tvPy89L3BrOCwrcSgsI3t5XyEzaT48WHwzeXxQRX4l''@;'; put 'put ''UUUzSiRHfmYoVF0xcHRfcyhFanBhdGdlZmxmLn5kYnJXSGEuYjs9M29EYFQwMTMyYSQ6dSU0T35gdCw1fTszb0ooLk5ATV9+PDFOJSU7c1dUPzZyMGpfMW0yc3BKcTVfUy5fc0shaiU7diZ9YE49a21ie0NkKXsvU0NzUzFlXz1iMjdRLDRsWH5ecHxfZmZoX2lvL2Q0YSJzeCZNfTNAR3tWUUs7''@;'; put 'put ''Ol9sVzUySC9xZXE/cjdVYCtyWiQvPFlEOHVnYH42KHgiJGQ7bW1xWmo3bFFvKD0yX0ZfNG5+Ry5iTmluclp+fmddYz5hZ2tbJX12azpae2dxZyVtNFVJLDh+fFA7VWcsVzs6KT19VH0kM0RwL2EvUjpwUE84JVs2amZ0fXtQZn0jVWB3OFY9azhXYVMoSGNRXm9xRXErTnZ7aSRZVmpyTWpJaXcv''@;'; put 'put ''SVk8S1dlZVZqNVhRUzNYcklianhNd0orRXlgYDAya2hYfkdaYysuXkhmUypXV0hoN21lZlMpNDxEYld+LFEkM2tYTVUvZVlNRmAxRHFnUzMvaVljRml7TzIvayN0Tkx4YHBiVC8idXRMPFRhQ2dTP1dfRlNHUDJsL1R2ITRvWkVrTT5tLzNCJWtJZ2NTPTRnRG8yMEU6VHVuai8oQlpjUSRnUz40''@;'; put 'put ''MER7PDlwNWt+dFtQQCFlbVkvbnZXUSZdY1NEKVVESigwRVovTUN3bitHZSNFWERJOGp3WTRrQ0A6STw6O1BhL3h2QFNVOFFKejR3RH1QUSQya081TEMpaUhiVC88dVRKVThjIy9XLEV+QnhRc2dRNThEIixuOzZraEc6QnA3fEwhTH1HcDRbYHxYc3QwY3VpX1h1dDBjWUA9dkRCPjV0WnI9e3ZI''@;'; put 'put ''QmZJJCsjXn1YbilJdkNTbnIiRmtMIUVCNSI0Vj9pWWZQWSkiNChMK0VwJV9YZEdlWnM0SVoxNWBYdVhbSk0wPnZlWVVRWy9fWDh0LmdBWUJNPFcrS1hqQk09V0xMWUB9WHlYYkxMSD92TnZiWClrJUZBRFN3dS9bRkVEQnpBeklZNFh3TVhqflg2WCRNTTA/dm1ZRk51dX5YPHRobEIqKSQ9bmRv''@;'; put 'put ''dEVmMn5GR3clQikzfkZyTG5KbGVXT2NxfHRfY1QjYFhWTWRIQjVgWCRYUFB2WGBYfnQoZkgsYFhBdUlnQXcpRkpFMHF+ND5MaUlJOHhCQzVEWF9RdEIiWEp1SWc6T3tYTXVja0F3KkZ+RXxRanpBNUBMZkpCNUE1SVg0VXVpe1hUdTdYMnxRMFh4YHRFMz1bfDJqeHx0TzV4Ql1KN246aSxIITpY''@;'; put 'put ''eGIqWVE9WyokQHU+NTFaJllFKWRSMVorJEB1ejY8a3VJYkNgOmNNZlJ0SGVmUEchSW5DQX5uI1l4eioyVy5COjU5WShpeEpuIzlZTSlNVUl3Z3hhdVk3OWRoTTI0QEdSe2NNXkkoQy5CZE1sUjtGfnwhPHg0IngkZVU4NllYKUFZMVpoeCMqZ1lJd2h4ZVNdSTtJZTVOaX5ScVVnNU9pZlBwT2RN''@;'; put 'put ''cFI0R0lhZk1xUiRHZmw2WT1SQEd9cTZZayklbEYqIVlsKV9jZU8oWV90ckl4XUl3eUkpRCEjZDheaEEpZWU1Klh4fXVzIzkvTFIjSituZTVKaWJMITo5fU9HTlJpSSp4dDhFPGxofmwzKHV1eF8wKGIjfCFdOUZpcHV+OykocCp4UF5vai9+QUJQZ2khaWQmQVQySjt6fig/MUFtdy8hL1EhRypi''@;'; put 'put ''eGtDT09dY0QkR1tYVFhKbHoza1hUfEpeWTYpVUdPUkQxZzM9b0xSJkk7eFB2WmNKVDtIJClxdTBiRGZVPCh8cDFUPE1zVkUzKG5CW2g4MCJsRzx2WFY1WS5ydXNEUiFRaWtORG1oWEwzKUVRQzIraUM7dT9ITzNHIXIhSHVCVDBQYiVvIUV2MTlpQyJ0Ii9JbUllO3ohaSM4QVRXSjt6SClLVUVU''@;'; put 'put ''W0k7ekYpVkRCbThjXlpsPEc2anZjLHk4RDxsUnVKd1MzNypFeEcuNCpFcEdAZ2pDOkJoR2dpTEJJSlIhTmlaZUZUVlZqdlksYnhKVDxnJCljdTFJVDwkc18rQmlBcEFUZk9fK0FpaWpBVFBPXytrPHwzNU53ajpyWmJxd0lmRlJqIUM9cUlQdHZDNjYhR1pUbi9BXVJHWTxIOyksP2hYQk5LOjpZ''@;'; put 'put ''Lm8qY2tbKlpCd0pmN3FdOiRgPiN0KkNLOnM4NyhUdmRRc24vQSFIYWl1Sk1GUG4kKUlDW2hySDpoR0JiUiQpUnZJZlk8LjRxMWF0Q3hlRFIhZz9dQmFQWyouKW5ZX0lyZi98RncsQXAsOmt4P1Y8Qno1MUNtVGFBWURnNkdfOlFJPmVLU3AuQ20oTyhPLFBxJjomVnxAPiIoJEI9R2t7Q3szblh0''@;'; put 'put ''REI+RG5QJTlEbk0mRjx3MjFbeVcjTFtEXUc0NCJDd2lJd1dYQ0diKmBKWiFedmhYSEg1O1hqWVJgdl1BcUUpMUdZYndSWDFGcyYkfUFHXnZVWEAwPk9hZVghRlkmTD1EI2pbKndNc2E/SDkjQCR9WFZHRXY0UT4mQlFTRXtodXV2Y3x2Mlg8SWwsKWtFbWxrZHhCR312dU1IRk1Vd0A1ZCJMTnd4''@;'; put 'put ''TStFKmlfRkwwIk42RDU3am5ybms8aWp2el1CVzV2LFlZL0g5bEFUWUtXNX1AUmpEKW82VTlkTEY/QSl0KTpCNkdTOk5bUEIyRVtILFBOZFFRW1FMbS5TI3pvLkAybGc1KHN0ZSk4ZV5RPz5BKXQpOkIjSEpOMG9ZRz91TUZaSzBPYXlTcUNtOWNwJSlfR3RaWFhIQ2RNaVdPfClIR051VkpiO0I9''@;'; put 'put ''bzZ2Y112T1hVSSZkTzhOYDZ5X3Z4d1dNRHhgSnJiWkBPY0cqSUddQnx3elB9IWojcz8rRmtCM3UvTmAzWFhiU3Q/RHd+V1EwO0hFJFs5RVlaWVZBJVk7T0FlckMzZFNNK0g/IXJIPjFePkp2WVdXdHcpe083M1VqYjVDSXBQTCguLjQhMkxtSEY4fGo3IUQpInRyWV1KWCwuNywrX3VqSVNlSFQ3''@;'; put 'put ''IXg0TzBtU1d1YDpgT0YlLjQpeXtEViRXdTIzVWp4ekxDKGkjRE83WXUlUld1PFZTalk1aFliTzQpMyEsK0MwSE9YY1dRclJrN2dZQVA7KFQsWmpPWG1RMCZSOVZqUVhkTCIhOVBtK2l1V2lMI1VrbXgjUjI0ZEgmSEY4enplPEQ/QF97QU55UVVTOm14bStxdSNYcE44ITVMO0kjdTIwfE80KHN1''@;'; put 'put ''KkVfPCY2OXJvKylZUVMvTGNmPHlmYUhOM1hmPDx5NnhsbD5pNCE5TCwwemIye1RqalhAU28hOFBvKzp1bmZaYi9JP3kpRGoyZl4jayV0TFIveD04Vi9WdmlNPFVkIzs0UURyOVpkZCM8NG9EfDUxeG8rQlphVTU3L0k3K2h2cW15NjJraVhdRCEmTzIuazB0UlAoajFFVkprL0Z2UlBhOmQjPzRs''@;'; put 'put ''RUMuPntiU0hYVksxfHRCfVh4dGVlKjV9WFJNcUk6SX40O0x2Sl5kfjR+V2pUaUd7WE91Qmw9W2V4bipaZFBgZjVsUmdHciU2WXMpKGZQYDZZfmkvUjlkWEBoTG51LENSKj9qL2g7QStIQ2U/ajpoQXUvRW5maTY6aEFCMlEpVV5RWUdeQSpUNjRkeF05Smk2QT8wXmI2XXQ/Rnd3d01YbEYudXRa''@;'; put 'put ''RDU6RlFON3hwTj1WKW5gdnJYVUkyKUAkYVJ9dlFCV0siVk0zNEA1Ukl6ZkN8bXw3aitaQjJUenQ6bHVnd1hpTSg3N2YpV04lX1lHUXRtWk5WailpKFpOKm5KSCVwZitFPSFXaXlCZDN9RG5Nb11NZ2xKcUZPU3QhYSk0W3NnbEpLRlAjWWl5QlUvaiY6U3ZKXWl9aXlCK2tzZ2xKdE1fXXl1VC8q''@;'; put 'put ''ODpTNllQI1ZpcHVkaXYya25WVFpIYXlOdiZCRzJVbXw+bmFKVi54I1Q8SC4+SloyRyowOTxJdDJeQFFwWntPNHtUWEkzQ2c2Jig7SVdYbFNpY3tEO044RSF9PnhiN0A0Q1teQWVvTmJSYmkpRk80MSF5cHUsZiY/RSg8IS9qeCY8QGpsVHh7cHV3LCVqRlFyLEo7Wz0ibWk7cVQxKn4mQl9reyRf''@;'; put 'put ''M2g2JXhlQiY7Z1F8bmZHO1cjbGZAPVFoenMwLkJBQmB9UzU+Qm1tK2hbTyFoLl4sRyE6MV55bD5DXkVlIjF7UFVaOVd0VFRqfUBCIzRSfTFdbFhlc0w/Z2hpQiZWSEtabmdgJGloWiV0cj8hfntzKiplaHMwMGdQcW8sRjslRFJFKEd2XiUuXUtLaW1eU3JyPz1UbjNnOyE2MHUqYWlndkE4QWU1''@;'; put 'put ''XVlKfjdOdjEpR2VSWV5kXmRTdzs3TXVYQzM4LCVlOCYuIj1zOTZvPWVnLEBmXUNRO2FJYThFZV5TLzwrdyZQaTs3JW4qZFtYcHxnWSxUZUI4L15COCldMj1CZXpoRGNvJCNmYl9jL35eVF9DSi4mI2BBJjFDUyE6SkBdQEs5Mn1eWF1MdjtKbyZ3R0hBNXZLImVRQTxxQltqZGs+UnVXZyRVbWE9''@;'; put 'put ''Jj1iJChvNnAvYSokR2ZYaTEhKUp8PVtFIl5xcEYyVzNsdTplfXBBVU9nblFoZWF1YiUvIy97Kl4zYGhXLG9pW1dbM2dqb3QkQV8rbCkxNls+RTZuXWxJUDNyRGUjS1EpamdsVW15SWkrbSNvMl9OKENFQHp6PjU6cn00aHtWNGZPOVIlcEtBJmduMDV2eSEoLmgrXn1nXnBKQ2YlQVZhOGQoSSZa''@;'; put 'put ''cG8uLENZQiUidSRBXiRBVyJFIlBSX0hxVDd4fjwwVGtuLjhpc30mQUV2V2lBSXd3LnlRaEA4OEtYcW09aiFvNnA0Z2ZVMnt1X2ZMWXFCWksiaDtJdXJGdiVxcSEqVEk8b0FGPV5yQ19wVSwmQ3N8ZXs/bHteIW9wZkJQaGVQZXtJeyNpXnM9JEVIRFQkQi48QFVyPGJwMWNVdmAzUjRSMzxCajwl''@;'; put 'put ''ZT8van59ZzNNQnYsTFF7VUNtTmpneEtWSTxjRjFyOHVLIjU2NiZ7LnByeG5HZkw7TigsNyVYcU1mXkRbPjs5XjM5SnU3QmUreHgxJmpXTmpNdFMzUiIxKndKSmleT34qSytXIiRIcHB4PEZJcHZHP0tJbkR9Z0w/aHNOJGNAQD87PW92WTEkJXB7KCVlaGhpOyV5ci84Ql08dzRvey5QZTIuY14z''@;'; put 'put ''LnMlTVMocFRPfGVhKz9eZV9uKztvU24vOGc0NHdXZSQ5aTFseW5GfUBEbV4ue0ZBdV58KGlRPWNVXlVZIWVLc1EzLiRiciZ4fUBRbTMlMnUuOWd4LygrOSh1VSE7QFtMMVIjam83JCE9cDkqXXA4Ri47cEo/aT44KHlwNT1rYGppKFtwSm97UlcjQCpMUyoyLks5KkNGW3dYVThqRnlhWzNhW1Jo''@;'; put 'put ''LGR0dlsyfEVWPlssJTk/ZSF2LD43KGlvSnd8dnYoVz1sVTllJCQ0STFZXyE8OVVWTlh4UnVyZVpbXldnJVh7JnReZm5zZn5wcGZfK1l2WDEjWVJDcmwlLk44Sl5GdDdRQEVpRV0yYmh9XUlpcHc5fD8kY1tdXVM+V2dNOSslLClrcH5hJGwjJSMuZSVCI2JbLHxjRnYsOG5FdGk7T1FeJkE6Yz0q''@;'; put 'put ''UVl+Uj1ieTNTP0AhLm0lXmdSJU1MO3BVKTFDKF5iK2V8InhSL05FemV3UkI+fjJWXWNVZUExNyZvWk1AcHEsMmhdTF89cTsueV5qT2p6c1lpc2giVVVaWXsoZj8qPUtIeStbbFs1SlJOZSlVRTRMeyl4KCx0LDJ5V1F3V29qQktETy5xQVVHcW1pZFtZJEAoQm8ieUJdZnljdFBBVHRQNXp+bChU''@;'; put 'put ''I1VJRCR1eUJOcUZtKFR5MCJDQFlDcShBMygsdE1qNEJLRFhGT0hLRG49QlciU0FtMlYiU2o9VUYqeColdkMyQXxoXSh1PF0oLHRBOTEoLHQyO345fD4wIy5bXyRdQG5qdDopZHkub2o9KSYhV2xyVldwbUwhUGhxfHpwcnkhIXVvPSszR0BeXUBid1pLYHs6ME5zOkIrRj0pJHdWdU44TnJsaTxB''@;'; put 'put ''NihWTDY2UyZffjEhcXx6UmopSyF3ezVHXndpKGQ+VDNLTXtoZHJxfHopYV1OK2RiOT0pfi8pJGpTKEteUmFGcjB8cEdyOT9FblRWWF1NLHsxZGRYe28wSmpWSGdkPzNNe28wUFpSPy5ieUlDM0okd1ZYXWpdZ0Q0MVFWdU49Om1Obz9McjwpKWRFeWBjO2omQC5ieS5OVmZIaHFJQCF1Oixdalpi''@;'; put 'put ''OHZxSFNeP1p9Mk4sJXo5d1ZhMlJxOWxdMUBuaiE/OTFJVCtkWytmKnVOPG54N0gzWDIpd1RxNiw/KD1oRFQ5JSQzOWxYeER3NztMNGwrL0coP1svSkU1b1NybiRJdWFiV0BXc1s4SnwoblRATDtmSklWcWR9WCVWY2BuRHUuKVZFSD1iJFBTZFRSdj1wNk1AezM+aCIzZ3NBMHpjWzJydEBOSTJS''@;'; put 'put ''c0U6Y1Y/ZVdCYFRBZExJRm5MeltNJUM8eTUjOjcxaGxLezhwVCFMNUgxclp6YlVIdGhTYE5AdGo6JjNAdCopKztGT3xUU18iYnlAcm41fn5RK316QHJuaSZyYl11YUs8Yj5GIX4xajkzenh7fUZ9MktCeX1kQVkwUjhLP2QiRmU+M3llNT5xUl5MVzhLQnlfNkNmLFlDfFA1Z2RuVnxHQksmXyhE''@;'; put 'put ''ditifm9YZiM5e3pHVXxsVzhLdWJyOjIzSWkpeHFrOztiNTtfdEdmeU0xQ0hDMyVMK1V1UWRWQSxifk9YNDVhfnFkREdBdzl2fWRrIjBAaUY1Pm9gVShgdnosfGNNe1hySnFnXjN7dmNjUm1jRz9gS0IlMFk4L2A2KDxQNH1kQio0UXlAQGJWXj86ZXhXWXV5KUtBQDwvK0Q7eWRHPGJwU0FPfFZT''@;'; put 'put ''KT5bIS82cUIlflZQRyt9fmtCS2Y6ZCF5QHRNfnJlTUdpbl5idltiVV8lMnArS2olV31NM2MuS09RPkg3R215UUxHOWV3cCtKR1pPaDEyPWdaPFk/eTlEZWo4c00jVylnREpCUzFuLHt9XVBaSGZtJW82YCQ8TDRnc29raCVvd3xVO0xwPEYxc3dvMXJENF8lPnNyJHJCLDNvWXpPQldZM3YmTTV4''@;'; put 'put ''cXdxL2J2XU1bYH5ONltyeVdjOD8xRWFoISZVOXt4MXlqNUVvIy9jKzpOYmBxRl8kZFdRXX54JGsrbVg2YnBALiw6YGloWCRzR0twTURGMDdQbUg7S1R5bWhsNEx1eFljSzZJXWZlTU9GZGlUR0h4N3g0dHgiZ08/dUUrPCgsK3UrPE4xalpoU0J2V3NCXVljXVkqLjFJZTVbI1MhXnlgZCFPRDco''@;'; put 'put ''VmopVT9VcDIsRUhMbypdcERBLF1vUHVweHhLVzwuTyRbUDdKVSQ7LDYuMi9dKi80YVpvL3hpLlcxeWMma1FiRm9QRXB9YFNmfkZLXkBmeiVNUWF7YWJeQD1vYT0pU11Oa0pJUkIkOGdUQFluYylUVEl2Wi4sZUo/dSpjPykoTDAsVE1NMXFCfVQ7bEhrOGdOMnpjQTpNO11Me0ZNeTxTRXp3ejlY''@;'; put 'put ''UUpjS19eKXpvX2hfc1ovQSomJU9XL3Z5XzpWPU4rcU08JlpMbj5eQzhLT1FlYiR2c0peRUdSRiJxXW1CRDBiVC9zJnZiTTM2V0hARnxIeUtDXnpMYXUyLkB6fUkrLzA2Ry98biZmTjNqbGNXWHNMO1NwXUw+W31HQDg6OlFvbWQ8UH17VWR8a0hVbkp3OzN5PllLe1Y5UHFKcWZVX3AsLzA2TGNV''@;'; put 'put ''MD9OQU13O0B5eWVsenplZHsyZzwwbD9UNGByUWFiPl5lPlMyZ2tzRls0VWZuZSRsWkwob3RSMWcubz9aaGMlQXdyPXZbX1tSSF9adj1Ud1J7SDN3ZDEucj9rKyV9dF0lSHlaTlc2MTFYODZtfE43U18kYSM1M2l5NyFRJDwqZHR9NTh1UFNwZEtuWjYwfH13YTUpQ0hsQ1B5eDo4WTE+QTpbTS85''@;'; put 'put ''dlpDJV5zVT57Iy8hO057b3MqY0w8O0J5S3NxWzdzSXxJc0hxfSpWO1l+aTtgSiNsQyQ9MFhzQ1pncDs2KjN5cmQvKD4yZn0layFMfiJ6VChUVCxdP10xb295TjhBZSZHX3UvJGtLQD1BZTs9JE1yKGR7MG5qJUZtRFVVU2YuRGVFYDg6QF5MOFA7RndMU2xYVCMsfix5TC9Rb10wSDthUiRaWXtt''@;'; put 'put ''cDthbE1KZT89PGdEN3gzSWVNP2FfL19iamFIRTkxaWVZbCU3O2JjciN2WDBHWkAuTT0yeD1+alAlSlBEbz0qTkJgLGNRayQxaS4leGtBU09UVklZNSVYO3Z4WiZ5M0N3NSFZOXllLD5TU3pSZ1RrayQyP2MiaSR8QyRBW2N8WCo1JFNoRzxGMnt9bzthcUImfkp+R3B4MTZ+djkmcndyLCJTV1Av''@;'; put 'put ''VndmenRXZy5zL2teJnYvISwvXXYyeUZDK113JVpoMyV5KyZIOmdXJCtmVDFYdFViRDJvdls+WHhnZy50MmNSYCx3S29xUGZNM0gpSWxEUylaKyU0ODtoV0FKY2IuKWFoJmB0a0pKdHokZ2ghaTYhOk40XTlPPnFLKjNAazQ0eihTbEJvR0skb15ffUVxNllHPF1iaHRHZlB1Xy4/OzUxIXg6Q0Bh''@;'; put 'put ''UCJnO3RRcDZYKEprQ09zb19ecH08SylbOCVZUjlGVy9hWHk5WilUTFp4PWM6MEJFSkhlNz5wNjFkXl5wWml0Xj5GPWFWUUpGPkJbX044VzxTZzwpY0VwMG9lTihmIiU0WHJlaDBiKE1LV2U6SSYlYSYyO1gxRXBOX0lsZSUxSiV5T3VfT2tSVzkvUmhFOWoyKHFdL082QXBQXmtHaGoobHU1Y2Vu''@;'; put 'put ''Pmxya2FEVlgwbnkoeXxXZT9YQFNdQWY3ak52REpHNlk7OURLMVJvZ0M4T11NfWMrMDclaW1Pd1h7dVB4TTptOkdLbEo/dEhyclBCRWB2bTtnR1FxNWd6TXp5NU0sOj5wcDh+X2ZKZEd8MCh3RmNdU2okenApKEFUSGxCb0RGfjF8Nyo2S1skaWlvdXFQVC51eXlJM3FdRSVMekY1Qkg4I281JE81''@;'; put 'put ''Q2VrKUNSQihNYFspS0l0IUYkVCxNQFJUVCwyOCNvej1saEN2WG8rT3twXn5FT2NjSCskZU1KeFtMLFk1RTN7OWQlJUkzWEI0TzhFVVlId0NnMFpgW31HfWlAPmFXazJ0UD81VEdeTTpDRUk3MS4qc1d9VCFPdEMqQGhkeG4sbG5haEdDdF1iOSRQbXxwOVFMeHFdZmhFaWlvOGMoTWMpcFRJJUNv''@;'; put 'put ''KDJwSjZuNm1RLHo2OUhORkcmKUJqS1Z8fTgoeWU6bl4hYlB9LjoxalNIRXZmel5pYG84I3AkNCN9a25wb3JSNCV4W35QQDolS1VGJV5FUzQleEU0Yix7R2paZEQ+Z2R8S0tuYHJFLnUyUWZzcyxeaUYpai9HLm5JYmZJJXt9aGljam5nbVBYLEdiZjBiOGduekQ4e0tsNnRHS35gXilMSkI/KkVw''@;'; put 'put ''dVdbWlhmeHs1c0VxamBmWmpJeiJAbm1uY3ArXyhbTVt5KDg9MDJlXnM0cjl8PHpjYklVIlpjV0lwQyhxIWR6cFlCLj9CUzNeVUNEVzlmNmk9Py9TND83SUYoeU1bTVk/MmduWlY4OjBwa196cHxKMmtwYiJ6SlY6Rit9M2NhZG80LEp9SGJMQkNBVSYlUF46I25aZ0A6ZG5DUXJBQnV+eyV4P1NI''@;'; put 'put ''YURTfEVwUlYyTzdOfVkldTRLdS5aK0NkfGEybTtYTE8hJGY0bD10N29UWUV1ZVZ7JUwxRzE1XzR6ZE1GI0cqTE5xUzMubldhRHYuc357bGRTayNMWlg/VzNoan5xeU1xUk9kRHNdcShxS0k+SVdAPy9SYko6WFZUOn0jVVQrY1E6SUxsVDtqJW1JdHxRe297YDw6X096Pll7cyF0YmJ6fiE4bzli''@;'; put 'put ''S2RfYSIoQFdNM0QzIyUreng8NEtAKCgsWVEybk5qWmtuTkw2Qjljb2YsY1hpRXhBdlNXb0slLjRBVy9jNz1OX1ZgIkFmL118LygjUiU/Zi5NVlNLUWAiMF86PkU0bStndGNdNjxZSUwjMGhSQDZNdm9KOjFkdUBMelo8VTA7Tk44VWQ3SmN7ZTlSZmYydThQaiY2bS5vSFgqazQ7PitdVSojbV1t''@;'; put 'put ''dWcpRTA8XzFeeyxlV3lDK15QO1VsaW88QFBlO2NDOVRaYUVGbilJenR9dDtJJDcqVSxZSlpDfFErZmJKMWFTIW1ZOjBAP24rVkAocC9mT0hETnFyRy5ILFQjWUJvVHswQVpRUng9QT5RXnZ3ZllJUCowNUUvJFM0RmwsOXMsYWRTSFd+YWE3LkdFUzxIeDw8OzQ9OyYjMnByWCMmfDk+R05RaHEm''@;'; put 'put ''M0FkRnlsYV9WW3RweDJ3eCEsVX15aSE+RylwITdbcWNdKVVHQEY8bTBVQkhZJW4lcTgsbSNBVX56OC5bRFN+NlZ7X2w9UkAqYVp4M18zS1Y3ZmpaNmVfbDY+KWE6Yjo0Ml9GM0EoSyIpbTFpIzhnSmBOQEFKMkMwPHxvfkA1Qld+OktyWVVFR3dVLG4yN1djXSZFNmNBIzRVUVI1JW03VjthLEpS''@;'; put 'put ''JFheJWt2ODRAbHlDMFJJWnU2O0hMbF45ZGBlLD5ZUCNaWHNyZ0xJb2UjbFZ+elUkXUwxPjM0eUljRSsrK2g7SDwoZEthdWIvbFVnVWV0NSF6SGw5XjV2VyJBNmssRyMqMix5OXAoPD10Q3FaKmome2ZjPTp4U3QoT0ohOH4kOGYib3k1S1g3LnxFeXp2OCMsLz1VSjZ0cStwbz5DVnVoWjFCKHlQ''@;'; put 'put ''SUlVdnY8X0gpRkZEIyZLenYlY11mXXVYfnFLd30vcENxRUdpfTM6PlEqfVJXYiQ6TmNwbVZyNHAwMWVWN143PDE6fjxMKGkkXnhLaCsrYEB5ZGF2QDh5fl80RGt1MXRaPnlBMTplZDZMIWt8eT5vRkNaWDJiUFlIbUdeaUt3NVQhe1htP1dfRltWJDUhSGlmZV9VM3ZySzopLEY0dlQhd3BSPSpV''@;'; put 'put ''MkM4OXA9JmsjIWNsQng0P2koNkBDMzJnPj5gNmVAaTtTSlJeZzdaPzJAOTUmTU1OZGxDbzcvW3pRRDJfKmdteiZLbk1OdGFGaXUodXVMNltwNjUxPTRqKz8/M1EwNG4wMDVBMj12XiRSUV9FSEIseU4mWjFDMU9SKXNvRTE0b0JSSV40I31BQSwjVlJEdChTTix8emxaQ0VJdX1HNnZ3VSVsRjM8''@;'; put 'put ''KHM0W3YrIzFjJFIvUnR3fXBBQWxpWk1yO3hCejZ7OkI2XmcmJFVTcXhOVFI3ZDZUXVg6ZzlxSiQ8KWtkM0NKaX1Ic2JeQXpLa1RmJnBSLCwhb3dEdV1uYnkkbjlUQVZfQFFqIkAvLC4xZlV2b0FBQlcpKSYrQVltbWc3In5zJTJPMiYoJEhec3gpISIsMV87c2dKenFnZTdzV156TGF1Mi5GNC9Z''@;'; put 'put ''VkZuUTNldCFQPlZ7PlYzfmsoaG1uZERjOyV2ZzpaVWtvMWliUUZRMzNhQWFKb3d4YiwwUm9wZntYfXIvX3AiQj1NfjxlNit+eHZ1dzU7fj4oY1Bxd1Z+QCZvRWJaO3krTCZ4VnRAKmJBKTNZSShNWCJnSXt2a3kzWnxyUXNyNSNXe2g2ZG5FJl9SU2BMNWNaUjpqbTVNPml9PSkzfTxdPSFedF0s''@;'; put 'put ''X1JlOC4rVX4oT0ZtcHtbUlMoJEl0VVBddTJETl9FL2NecCRoWj5RUSROUXg9JjR2YGhkUmtxIUxkSnNbW085dz1RMUVwSz1vWDVbLENQfEgvXSxwUkhNTmUkaX10VHtvUChTN2IyXXkrM30mdzIybVczWmJgXm51UWh+X09hZVtPZm88TTVtbk9FOVVdPCVnO1E6K2dfW2k+eXIyLkNoey5lJSRJ''@;'; put 'put ''P2c0eCY8RDE2aFVie00jfTE8I2UifGh2MH0kSD4/P3d4c1ZpWXxoRH47T3JuI1l7bSEmfTBgbStdXVUmejk1TGJAXXhVIXVEJEpHVlpMcSUxeV9ZKjs3T1krYCs1bW4oS1dkWEdeXSNZZTxqYFhVKzVmVCtNc3d2cC42TDBMYXUyLnBvOnBASEQ+eEImZyVyZj5aQiZncDd9L0NAYTxHVFRnLmla''@;'; put 'put ''Y3p9eSNBO0Z1MF8iKGIoUWZGXihHZiM5e1EhXjB5UnNFcTgxTU9pKURUNTclaFpiQCpnb3tbY2FsRkwyVjxeKkAzdlohaVBUNEh+Pyk6R1c5ZjcybixTZllxTTxjOWxYWDsvNmdVbk85KitIU2FnYk07R1BRPmtzI0MyMmwzbUQ1aVFJX1MlfnosIzQmWW5SVWU3O3c1NTVSMSN2WENlW25QOk99''@;'; put 'put ''ajhsUS9jV1JvcFBdM3YoVlo4ZEtzOlRpMUlPR1RTYSZCN1p3UStRKEVWaUxpbGBrI19pKD1XN054Wjx6OUNMdm4jMEtWQC9EREVKJTQmX3BCNzVHfSFlMGhKPHkrckh+YyNrWHRUeThWd3ZFVDVJPF06YyVNPyM8IllsSmQzUWFkViwqR1dHciQ1a1ZRazZMUSskKjJEXT9bJm9eRXZncCpUKTU8''@;'; put 'put ''dGRtclpiME1qKDAxTENHOktWfHMmJGh4I19JQTA0NDZFLyNDL2JydXMpaiQiTGJfViphMXlpdzRNMDxzO2xTKTVUbyIkeFA4YTF7ITVSeHo1YzEhcktwans9ckM8a2B+JFlzPEBBX19rS3NXUX5yUG96L3V5RF0kLzwyRUZKNWVydzUxcnQyRE17YlVGZjprYj9JKzFwPSEsOU52UDNhQFlGTyhf''@;'; put 'put ''M3V8OD0yQ3pXUzFaSDRbQFI/Y2xaIW1MbG9MK2RdWUBYJXg6UWhHcTgsJDs8YDM6X2JBTUROKUtROV9mKWtfOlUoPUV5TmlZfDE7bldGW0w3RUleT2d2YT8pXmsxZjZifnZxVSlnQ3c9aCx6ezYkQzF3d2hEI3Fkc0hrRlMxOyNHJkYye2xiTi48fWA6c1tBa1AhJE8sQ19VYjlqPVdScj87RFpV''@;'; put 'put ''PVkzMiZVMVU0JDMqNWF9L3FSYnp7Wy9QaXNKXyRyWkF7KXcwY0hQcmE3R0lxbCZWPU1ZVD0vL0czKyY5MjU/NVRUMkh0XWVqJjllUz9OfHYvPGcjfkVOY25PQDdSc346fWJSc350fE90P3w9aUNzfXNyel5ScGVfQFFqOnd5fHcuUGpZKyJqVkhqJHlkWUxCNHh9MzRENDI1SU5OTVc9UGk4fnFG''@;'; put 'put ''b3R+aEJmV1JmQilfZ1pZX0gpTVcjO3ZvIThnT31xb0dtUFhhW2AqKytyYyhIcTo1fDJYcj89Ti5wV3M6ISxgYDFzbm9UbFU9Lm43Rz1bYDd0fGQ2e1ppTUdNfjVudixZM0AhfWZlZnk4NWYpbk0wci9tJEpvJFVqb1ZgWGE3O25OQHh3NHVDbCwxSEdAbGN9PGwuVV40bXNXVGZXWCoyXVAzVUNH''@;'; put 'put ''bWhjU3w5Pm9SS0V2fmJabTFuN3lAJTZNXWRlOD90M2t5Y2EwVF5NT3FeMTtCQ2dqPjFVfEBkd21Sb3BwfSNAWHckODl3R1B8fWJvfitpfVFMXWZdJG5+bXs0XkYzWG97MDZeSUZsTVckR3xvXnFFPGldT35Xa1ddZ143fldRXTMyZ10qRGI2UShEZyEhYEtuL2J2XjF6MW0wP3VSMTk3dW93X2s+''@;'; put 'put ''MUpMN2J7NjVWPUlZVD0mPmVkLitlZCk5Uz1Fd3ArPDkiS2pNSHNvLCJ0SDtpcmgmJWg/Wyt9dGg4VEVbT0spN0UmZ0ZRMU5RcmRdZnVUcF0wQzRMLH03PmExKXg/ZG8/Uit8cTpvNj0+JG1TOSxFM0ozUGhob34uMTRdOn5TODJ1Y1Q9Ois1bV8pQV04T0B7SiVkQDVtPk8zbX1TODImdzJtYD90''@;'; put 'put ''P0I1RG9fXkh6UjFhaWxtKkV8dV0mUWp2WnZWaWQkM3B9bXJhU2lONSU2O2AzVlBnSUQyb0okaiUreTNaemd7KzZQcCpPLE5xPXZXUnJmSWB0XiQyc09uYX5tI1g7eyMjIUAhR29QYEtKbVVya3RrTzh8WX56KWBgJl1zQm8iVSszZ1VkOFFEJXZ7Nl91SDRVcH5VNE48XW1EMUhIb3p5IjxbJlUo''@;'; put 'put ''Vy9tO1lkPUBfYCg6WDoiLlI1TFU7TkY7Wi5MeyZ7NnZAJTg+ITs3PkQzaVVXU1NMeFVILkYlNnFGa0Qzbnw2eyYvfkhILjZNOjV5R3ZGOjU9PWkuLDZmZ2slRj1xZGhRcU5oUSNPLGhtWzt1TUw2aWMkLjVSODI/V1I/PT4xcV1KZld7I3ExfiJnWnAoU1VfRXV5SVd+alovWzhkVFtBX1E5Ilsh''@;'; put 'put ''UkkyVl1DJUpxZVFaSyVNKj4sYzNaIjg4b0Q+TitZJT54OTgjK0hxN2J6LkYoNEB8TTReW2x9fFlLNn5AQ1RqM0k8aTNUVTAmRnlbWUZhN20xVHlXVGE3KDdwMmp6eEtMVzksLzFhfjkmWyY+LG5gZ0dubXd7R0xvaE1zJXM/ZyMmd3smOTVAMWxGfVBaZl9xOzNvQmVEOFE6L3RzemM2XS5CZWRt''@;'; put 'put ''LEJJYF9mJSg8NWlmeEt5Y1M7L2dtam4yfDw7fj9dTztiNyIwb183bWRgVlQ6Plk1aWYhXiJvelZ3YEZYcChXO2ZvbzkoIVU5L0tFPj4jRHo4Yl10REVQOWo4Qzl8Q1M/TkhjZ10zbDt2QD81dWRRKFd9cm08Xmd3UHh4anFOemkmfjMxeFZiZSUsO2RCeWFVaDw5fEFaRk1SNFpqN1FNMDUuSGwj''@;'; put 'put ''biUqKF5YUWRDJDJ7LHs+QT5SKix5RkpkX3BMPlQ4TUZWUCVjeSx5M3lBLGE7ISEyTE87SURSWE1eIlc4NkpzVSEuImN+QyhNQ359ZERCfHhxSzppNm52KXN3RWlRIWRzZGs1YzZtaU9CTS9Wc34lQyx7PWF+SjVfOENfYEs4JTFyYjw9XmhPb2QkOG0oKEA7eypjY1RRXkdiYjdXWHV6NV83c1RA''@;'; put 'put ''aVt1aF5LKT5UbyglY09VdWx4YW12WV8mYmJrTzhSRVFnKUBWKjc2fmp7RCV6cGZGVFFeSSRdTiN3UztabGQ7ZnVgVEd1YUBwR2wuODZ4U0Q1dWM+S1EiSnN9MytIJmt2UkRaNlM4ISIvN3JPfk5wa2NpXz9sT2w2fFs1PzQmanYoN357azcicXR9WUtVWDJsMGZSVT1ycSQhb29FZ0BLVmtNUXBb''@;'; put 'put ''QlJ0ZEY8XU03MiV9U2Z+JmduSm1KWy4hITJnRSU8Mi48JDp0Wj06ZjVYfmlNezFxeCh5SSRicDRrO0koNTdleFBlWGtnb0sxfSI9MGgsX1lHbUs4flIxSSp3bXw0Lzx6N1ldLFsxczZPPC8vQFYyNzY2ezUubCYuRmwjODY0RU9jUnQiIXdMKEspPDpqQEN7V1ZIPWhGbFJ5RTRVLFZCOSFeVzRa''@;'; put 'put ''N01AUnxxZWRMTDl3PDJsQ0EmI1UkPjBgcERjbi9YIWU3VCZnKUhfeHhQTTJAX3FqXlR+RjFNNno+ViNzZn10NX1ZUFd+Lk99dDI5ODo4eEE6I1FAPiV8OmZnVC83IyNoemdOWWBUKUgvbk9WeXcyTnUseXJDSCJEIWxVIz5RLDZ7OjQqYzpxQF46dy5TLnFsOWxsP3tbOWQ7OG5ZNWFRWlguNks1''@;'; put 'put ''aikvWjNtezdsUzF9czxmd05hO3pQOjRTNEx+MTh8OlI2UjtweFp2Xl5NfSl4NTZJLEpCQXh3K2h+czB8WW5AfTE/NzFLI3h4cTU8YG9tfkxbPG1fRDNtZGojZENsK0pxbWBXSTgiOnFlO014V3ElXUwxeXBmWHZBfXghQWdFQ2ljLGMsWlNNS3ZVKDgsdGZme2xnMyg6N2QpaFNYLGY1PHR3O3M1''@;'; put 'put ''fXwkfCghZSg2PltgRE9jbklAU0xkLmRtZilXKGlvMHVUSi94QkF7YDc8cGh6UlQuMltJTE1gblFbS21MOn54bSUvX2BzZiVFJEkicmMvLkxmQjIqMVFebD9mSytnWjJZJjMrWUF2WChHSEFZVXdMLDYsfWAifXQsZkcifUxbS2wqZ2goRCNsKzFMVSh5YT1bOn1FNSlpQ0RWTkMhOF9BZTU+eXdO''@;'; put 'put ''fnF8TWlZRSEvJFNJKF4kYzZoUkoqSDZ7c2pzfXtLZDg2Mi98ZHYkdjldWTpzW0cmZ3Yic3d3ZHMoWVIvPX0qRzpaM3Vld1lxaikzOWhCeDk3clYqKUVjSns/YmhSezhiYl80LH5QOzlgX144Tnk+TVFoOF85ey8kczI4PTRlZUw1Ujs+cnJAaX1LWG1PKVNoJTMldGRddkxBXXshKl0leV1GM0w1''@;'; put 'put ''I25uMF5TcH1HV3w9dWtKM1tlKFMxPn1wQiY/ZzdVc3t3aFE5KGcyN3lwOFpRbTA9RDhHc2dgV3dBaD9xYH1DdH17KFVjWzRze1VlfnNWYX4qM20+KDx1OTc+VXgjXTxwOkEyclc4Q25IUUNMTSxGfklMbzE0Ly4jWlpzalhnOUFfOD1uUzhBZUpjYj5wOjNhfGA+XU0oalZWfT8lciRvcHgsWSYr''@;'; put 'put ''fT59Xj1tJj1eYm9EfVhoYFpAezRtQXxNWzMxSzZCM1tFa2VWc2x3azojOCFySyx3Tm08clZgZ1E9aTIiJHw5PFlUcyRYZH5TJE9qYiVzO1M4fit4fldsMHo3TnNbaz42Rz80OD5DfDdNUygjbzdiRC93ZkMmQj5qQjcjK1hqZXVmQz4rb259dF1WZ3hVe1BQPmtbYTk7flE4QzhHejl8OTYoUFY1''@;'; put 'put ''bzJtMHVYfSFAd14xczY/Wlt6TmRtcXhWPzZpWVpzTWNsPlZleit2ZXF6cyU9RTlze29SVXghRiNOLlteKUYudnc7bi4lOjwydUB6fko1YCM7NkpxY35XJFA4I2xwTEove0xbUjljNjtCMSU7cTBbYn5zYU8sPSJkcl0qRzNhfE82JTRsUmAzYWY8TTBRXUB8Zjx8elFdUXw6fHBdZGI6bEd5NG1F''@;'; put 'put ''ZD5SZWw/SDJjYFlTW3VNOkxSTF4hNDZsOlFwLDF4Y3BUXk0xeXNdZj0wan16dHwuRWlkc0h3Szw3M306Zm5FdX44VDRiWHBRTE42RSQmTUE7YlptO3J9KnJrKyw9b0Ree2huP1tne3N9c2xWPz1TIjVpfW4yMWJ9VSxLZTE7U35bUjpMSio9clVVYj81ZV8idi45P2I7fm45fENLcV9bPWJmVVpz''@;'; put 'put ''O2NoX2EjNTteem9tSVdUQDclXU1NJVghb1J0Ni89aT51Z3RRM2l6Wjo9RGBwOyVaTH4wRjddOC9jc01AKUA5a1c7NnY2ZHhdJUg5PSJkM10+KTI+IUNgJFIoankmblEoOCxYc1p+d1g7Slk+Q25oc2BLLDRbcTgsV1MuKylLJldHYCp8eHw5ZFc2TH4/VnB0bmBJYGc3dWFWfXFaaVcsNCZ0ZUJi''@;'; put 'put ''K1orWitrNXhUbU10TjdFfCVgQTUoIUtLRmlZYzdeZChEP190aW9afGo/RHgjK1pfc3FHL308LGgrZCtWK0NHUUx2fnI+SF9+IWwrPig5dFlzO2pkci59T1s2Nz5RRzpZZDxqVFJyWVdTLjN2ZnszWHsxUn1SVWA6ZFZMNU8mbmhXWGRgTFhVK0s1T2NpV1c2IUp8bTpKVGVmcCVATVN6IjRUb3tQ''@;'; put 'put ''bUh6N1N6WDEpbC5vdnJbKHZVKjVrPW1wan0vSzE3LFY+UTh+VmFCY2RuI3x0PXVrW1srWiwjdGw2UCgyNTJUfXU8cm9UNi5dN0t8OmQ2OWR1WTQjUTZjNmJudCp3QzR3d04mfXRiLzBqfjM2W01Mcmgve1t0IyxZQWY+VVVKL3NjZClLOSJgb2ZtOlkvIz5dPEU2WTxPWjVQPTguM2o5OncuJFlp''@;'; put 'put ''N1UxXWB0Zn4xK05KUGFnX1sqODB4eXtTemQ+TDRFPFdBOm4qbTUwaCsle1s3U1p8aVIoOCxTciEoaDpHbiUwMjI2JnZ5MU90a0lzXSxwJiVoJWxXUyt3RmxJc1omIUs1SX1aRHQ9TkpBeUZ5Ul17YE9AZkp5Nn1pbX1Ca2EwWWJiMmx3M3ltYFRTTVprOWNBKiQsUig3MHM5KV01MSEqL3IqXlhT''@;'; put 'put ''b3lMeytNRGZ6RS4vaDJXfVBMODZ+cU85SElsTUo4Mm46W3tmRFJYPnxxM1o4JSExTEhITmVfbyNeSEd1UjpQaU5tZXpsWnRpOEUpR0UmRT4obHNuX2YzUF9YIUdTWVZKMVg4KHxQOjB8TDV4VGIlNV9IaXp8ODk0OncuM3Y4XV12YTI6WXA4fiJxNTtXK3BKOEYzWCM1ZilbWF5YM1dHJkReWC48''@;'; put 'put ''YXs3dzdDcnN9NiVTfX4wV0tXfjVeRHp6UkdYZ2hyYEhlIzFBenMmVEVYPmNiODd+cjQwTjBkbHs4O2tmaUc6aHNAVkk8Oncxfllyb0ZtTT44cWI8Y09+LjZXfEFzVSoyTDtHQjtXcm4xUFJCOik5bllvcDRrKUZebj1WelJ+Jj0lK31UdiI7PUlFNV5XTktBUX45KX4ial0sQy82PntqXVZ2c0Eu''@;'; put 'put ''RS9HcVA7KkBvb3pOXVZ3L3tqYXNENUlsbE1OfF15PHNwN15gO1NzO1tTREd8O1JGLnUidzghfToudXN9Yip3MXguakBKQ0tgZG9UaEpNMGdUJjV2NzNgZkh+YFlySFc2YFlyQGJOXlpqW2w8KiYubEhwdnI8Sz5ReFU8d2NtJWNrVV1laXpQRj0zbF5fV141SXNEflEsbVg0YV1CNzNhZ0h+eypM''@;'; put 'put ''blsuUShqeV5zL0h+WjJsd1IiWXYqW2BWWm5GVDFgM2p5aTE1YTM+PEBaczdyeiw1RnBDNUYuLE9XKXdqY1NIMHhjTFhvQGRpbm0vMTpJJjs8Xnozd0JhSXAwYT54LlVSUWw5dlMvJW5wYTlpNSVwNXQ7SGY1VVQiMTRefTw2b3YkQ3xmJEpnMCMiL2coe2ZILzI8SkRIZ2pWLzY8ITZ4ISNEOUBU''@;'; put 'put ''cSR3aUAwKmNBI09kZkhnWUEzSjc9Kn0oamxmSHZkPlhgakxLbWQ8dSNlcStUUiROVTZUVHVVXWd+clMxcmRPTCI3cFosYERpYl0+dns7NGpqai5WKlEiTG9IRUNIZEkvRGQ3VTlsXVRlIVkreW9AYndoO05UPlFqQ0E6N1gpdzlzZ0cmYiFIMDg+My9QfWtzYC52JDZSXTkvNzImOjwzPmlqYFgo''@;'; put 'put ''e01VOV9wPThLQX48eXhLaCZxKHlqSlg6c083QXB9I2xRYTdNSExrPC82R31maG9SXkorM29ubDRVO05mPlksVkRoVElrMkwqWCpZQGJlYUcxIX1yZX1aKFpIWlQwcSUxSzp9W2xsRHteLkA4QnFnRzFfMjFLU3xlPjBRNThoeU9oWW1nNkBqN3ttYmMlMTpYKFM1Niw2R3NMKi42OjhhQT54d3tQ''@;'; put 'put ''SlhkOyN7Oj1la3d2Y0IhQnFDMF5mc34yaGpYVG0weD1JI1l+VVghcj02SS8wfUsydSw4LCpuRVYydUx1dD1yZ2srYS9dQnhJQ1RUQFt2IyRyPTEmZ1piLCR5V2A1anBDbFh8SV9yV0ZkYS4jOWxrZ2toSF5yZU1gJDgic2cuOiVkWkZ7UHlXfUNSW0xOMCVtNSUzWVMsOmdIXjlQbDR1bG5wank1''@;'; put 'put ''IzdHbGZaTSE1cFAsXilCXSNqODRJJGBZamxCImNwP3xHSilzSE19SFdKWEowP3l7dnFEY2I4dD5RYDc2T0h+W1d5ekVVa1FGcihWdUcjc15+PlBaI3JzKkIvc28oMkxMRVtwY1orQFZXZEdbV1dJS11EIUhYRTVDWitAcEksQ2d9dkR8JTFSfXd2KEFncXlBZHFdVHVXQS9NaUQ/bnAoeEBjYCNL''@;'; put 'put ''eXsmREEpU3wsU2l9V3JIWiJvdjF8Sj0vXTNnI25PMSpxKVBqYWkqUiYpUHVzd11iNyR5PTdzcVZ5eVBrfilgWDJ4a1pfRyoia1orPiFbPF8oVDZrYl0md18rNTJCdXk0Mm85PSlBN0c6RjNZJn4qN0EpeE5ydmM/bis0QDZYeElyIUU5SE5HKDBebEY3ZiJmKjlpTVFdbUlvRloxKC9xeVZvKDJP''@;'; put 'put ''IVd3JmxUWD85I316I0ozXSl1IzpzViJ2O3NHLCNYMiVsVjM2SjE8dnshIVM1c0pRVE5lPzA1TTBsfU8/a0h8TCM/Ty5rfiw7al5SM0FkY3I7NmVkbSZeXSNxYmJwfVUxbG1aaV47aykmI3dUW3BnWmlFaH1bM31VPG9ffCl2XUdvVkR3XTBjODdML21wWnNvMjpuantMU2U7JStbZj1tZGN3PE5u''@;'; put 'put ''VnxsaUEkcEQpI0lWISFyWHR9fk0zR2JPcTdLY3tFUjVNZS89VENIfnVkLz1oPjpwXyVkIk9PIyVZSkQ7Nzs6XzVUNj9OfCZdZ3FDeTB6SmRoXShwYDY2TkpjOll6Nl5+bUY3ZjAjXWdTSzI2d2luZnpEWGZFWFA3MlA7UlNANWZuRUY+NjdRfmtweDY4cS92OTdRI0dIIzcpPVBSJH1QVy9STG83''@;'; put 'put ''d29KYVgoJllsX2xUJCZNcW1OPmZIP0RNenFsYkh0fXRxSFVIN09wQzt2V1U3KFpaSC5yUVdvWm5wPG5eL214fGFvRVJePUNtfiQjeT0hO2JOc2J7JWBrM0NSYXU9KEp0ZnkjYVhsTGpne0p7dEg1XUtBVShLSz89KlVqWDZKRElsPSM6TjFHJnZKOWJ2YEY6NCM5cnwsVjY/TnxIZ3lYLl0jZEtj''@;'; put 'put ''KFkvJV5sN1BEV15TVCtTT2hURU1lSylpV0hRUjkwL31tUi9KVXd2SGhadzpEVGZ6dlFUSFYscENHQ1U2WCF2TVluPSlOL30iZmFdW11VTGsyc2Y0XiVAJUEmP2w7cTZgbjg+X34hMzw5XzAjTmh3dVclXS5dSGJ4MTA3Tl4pKSVrTE5dQjMiTSNNJCVgZEZ3aGlpU044RlQ1YVYzWzdiZEAwfTQ0''@;'; put 'put ''UWRuQFMobHpgXVBfej89YTF9cG1SJEVHbSJCQGN5NXs3NSZnOWM5R1RkOntkeEs9U2VkYUV9IW5CSXExfmZmNmpXNVpFXWohKnxET3ZPOSRJMDlUST5salF4eTU2VTE4JlUxazozWGJyJUNDZypxfkorXzZ+IV0xbWMxTjsyQX1ESSh4RztzcHJNQkwsXUlzWztOcFM5eWUuIll7SnRZcF1ZRzpw''@;'; put 'put ''L2dtYXY2Q2g/YiJmeiFCfX1XK0QxZkI/QEJEZV8wX0RVZW1lZElyLEUmImY0SFtCZTVRXT0velJKQGNiUD87LmRTSjdrfj0uOmIqLD9AMTokNVI0T3sqQmpGa2NPe01FUy9RaExqUGBlRytMUUxIai4iZiMiQSpNUz5NaGlMLnImYHFDREhkMXh5LkZEcnB+PkNKSH1RLDQldDgjV1NiPiIuWXMs''@;'; put 'put ''cl0iTUBGV1d8UFh5ZE1qS1lBRGc/Jk9NSCowNG1MWSElMUp3ZjtrbjB8USVjV3Y1VzJJNV9MaX44Pzk9dG0qdiVIfHBZNCIzejVMIXw/dzI2SnBQTG5hfHNbeXVWWnNMemg7MnU3OiozVGJUXVhQcEg1L2JSO1shOF1Lfmx1MVFWIUFjUWhWLmNtSnNLeGM0L1BhJXhjOCVhcVliYmU1O2wvPDE5''@;'; put 'put ''SEZ9djM9RH5sPUxZc0g8fSp1PzglXiJONkBGOUBleFZSaF0kSm9pfUlFK35odD9wZDwqN2Uobi5VbFUwVDp9a0BkIyQmMy9GfmI+bDM0PT9iKmg4QHZ5SldBcVdxWlltW0Z1M04lMnM6cWAsOmMpUCFGR1AvWzJdRiZmJE5VMT8wY0Y7dktBe1ZDMlUpX0M0fj0+OWNSe0BvRDo5fGMwfT5lZytj''@;'; put 'put ''Kyx+bT5aRTtFMH1WK0FELzkuZzduKW4hTD5uIlQ+bjwrYzYkV05MdzZGdmM2QGhHQW9icWckfW1CS3FqNUgiYGVCRylldlgxRjdxMCZGRENhL1QmOi93e3ZxUEZQJDpBWm5AVztgWFZjX2Z8fDszbmVtZTt+JipIXl8ifH5MNGgiNnNiI3N+YWRMS109ZjwzUlVZXlYqN2p2K3lFeGxgcUt0TXAp''@;'; put 'put ''X1A5M2Y8cTRUVGd9T2FVMlh6azxGMW5EX1Y3ZzU/cDI+cWNTaj9zSC9zKD5gJEtJUl4kYDxEMHwlUnQzUiRaNWc1bSpSZlZVX3VnOU0wWH50L3x9d2tYNmdXTG4vUiFGPTIvdmA4O0hzdFNwNU1YNjxjKElUZ3tYZ2sjLytvRWc+TXBHOiE0OUpvQS8uQy9SUGgjTVpMUCYhfTVbMVdMSikzU1gu''@;'; put 'put ''Qyl5a3hRfEB0LGBYVVF1dGRPTGZQSCxzTDdlakg7ZUVjbkNTbHs+cnN5OmlXNn5WY0NLRzFXc19+eUZEM2MrM31HfUZxcnVfMzc6SkxVSl17ODw/SUYoKnMkWUNLSCYmJH0uaH5RKy5HP3RjfFF9cCZ+V1tWd1p0QF9eM3Y8NnpEd240JjVfPTcmRE1QfkY4Z2JiNithdENee2V8fEphXzJbKk55''@;'; put 'put ''S2szX3l8ZTZJb0Q0ZkBfbXJaeyk3WHhNUll9WXh2QT9oeXxPIlg+U09sUTlBVyo3NW9rNV46OXhlb1NAcj5wN318ZWpzTnAqeSo1MHFMTHNROSp+X3tzOD4xU3RIXlEkISJ0LnVGUVddIztoaSNIYX5WNipme1hYPmhBY15uS3MpbGB4R3luVkNRLjN5cV5lVnlZT2tIUjVUSiN4MkxVU2kybjI9''@;'; put 'put ''aXs7KUlKL3ljK3d7T0U1e1NSYHVickpde0tYZV02YGtVc084WTc0MWUsOl4hMDFVQ3J4UU9aW1AzbkVjJlRfZkRpX2s4NTIxTF57TStDTGY6RTdEJWZDeVBBcXxDOn1VKVQ9JiJsSlNGRnlzL104UWJuR2dtKWlDRipxN296JTNhIS9QajpHfVk6R31ZZkNrJFVdcCxTQiE9Qj5fRkBGTztSKF0k''@;'; put 'put ''VVhSdlNCK1NwSCJoRnVvbFZUO0NJXnZfNUBWZjNTbEomSjV4dVd1IT5WKU5WTGoiNk1IdFhCWTRTcXtCSH5OfmplYVdfUz9nL1s7dHZIV015OCZaTGNHTHRbTl9Zd1Q0TVchPG4qb0w7KGAzP0dsR2FucVpKLHZ7SFkyMVFCa3xiU0J+c3MzXUVkQ2gyTnhHQ1poZEx5TnN0JWs5PSJqZyh5QzdF''@;'; put 'put ''ZC9jeVV4Y0NVOltEP0JLLnYzWUF3Ij5Sc0skVm8+VFpveXxMLzs4fXY8fShvSX5bU2pFVF9ZZ31NTU5iN1dJUUU2dFt+WlZ4SWV1eUk2Y1trQUUidE1rXVc4JXopX0JqX0RAVjtPeXg1e1d+eih3bXNxNDNjJDooKn0/InBVfm8laHAlRUBAT0sidXJpTlJyNyVieS9IQ0ZzLDRAZTU8KCZsUWsz''@;'; put 'put ''N28vNE1gaFp7OzJhL35RSWhaRi9Bayp1K3ZfTm43Rkw2WmYmfEEmZ31tPjtwZ2gwTFRjUFgsW01lYkosOCpSd2skJjU3ZTMmTSYhcVtwLltkfitvUkw+UGhdKjslPmRuTzlFOEAlPU4zbXxbMFZTeCljNkhsc1dSUm96cWBkO2c8XTN2OSxAdnZtaFo/VVd7S1B0YzJhQTpTTzlSNy4xcFIuT3Fx''@;'; put 'put ''aSpMW2cqMG5+R1RjfX1eU3koPk5eSXk4UVZkYzwkOGZaaG42ODFBQmVee3hrUHEuIzo8KkVwfT5aIWEmXjVFekAwJkE+YyVBKjZUZWxjbDdALEE7R09jaW1JR3trRHcyNl83XnlQbEthZWR8Vzg2YFtUdDJhfWNRKk96N0dTcns2RTsoK1I3NXZ+Oj9ZMk1ZfSg3an1ibz9scmkuc11PfldXc18u''@;'; put 'put ''MS5aQzFzaTFIbHUlaH50VEoyKll6O1c9c11kXnBkREdoZD9kJkZje3xdKT0iZEo2TGMlaDY1QW8/MyIzMHcqNkxja0FLeyYrcUJmTk9fQTdwYzByPlRyflszNjV3eDcqcH19TnRHYXh3fjpuKFRTX3NJITs6Iy5uKzBWT2hxYDNWZUIqWW44Sy5zRD5HXStWJUMxSDtPZTNeTlNfYXNYWm5iVFl2''@;'; put 'put ''U2V+Y182TjNWWm52YShCMT9LTEEhdHsyb0JAIShBKzkkRlQqdXRDWisiTnxWfF9LdEVFNX1kUW9fY2RVUSF5Z0I2ZHBrQGRSfCEjb1glQnJdSX42VEFIQUtTfGA9QTAqWmpuTn4ybjhnJjM2PyJNb0c9SnRXIiowUFNRb18qb0A3NmRlMUxlKndkRDc8IX5nKFk5Jm8wfXB4SHFhPmhlO3pwZz4+''@;'; put 'put ''dDJmdHAreXIyYT5nT146ZjA3czxsMiZkZDtEMlUsUX1bSThkNkV1e0ZXeChgO0NELmA1Pm44Wms4M1RyYEcxYnFLcCp9elBfOzM7ODsrJVdsRXY9fCwoZ15OXSJ0diJZLjAyPkFEWlltT3l8XnZtd3EvMnVkdCJ4ZUR8Tm9PeXxqRG15ZERScXxjS3MmeEBJal8xe3JEaX5sdF9eQCReMV5kVyxG''@;'; put 'put ''PmQ8fWBJI3h1dUVAKnM7cVhNXTV2dlRTLHRFRXpWVll6Q2BbSjh7SzNeWEsqSFcxVFh2OkBiTDhLZn0lQnlPR3IiWWQkQ3RdeDA3WWAySz9va1FiQVBuNEU0LEZBLkp5NVpyRGdocmkmQjU8eTNzMmolTGZfdXpNWmRYLl1mYEg0JGI5PUJ5Pz8/OTVeZShpfHJlQXZ5LHdYVkZ3UTNZWz5JInJy''@;'; put 'put ''LE8mJmkuY2NwKzExX0g+VTgjSE5qNTwqQ3Akcn5rYmIyUz5lODYkYWhuQSw3U10yNDA5UnVgQ3AlfVMwO1lGez9iODd0Okp8XiRNUTlSY2NRKExQdH04IWtROiV7W2JkMC5XUlV1PX5IJC4/Yk43M2RLYiU8e14zTnx+dFd7U192Qn16N2ppJHdybjQ1eitfP2J9ZmhvVVdxO15mQEYrZyI+UH1X''@;'; put 'put ''MUUpRGNUVC5uU3w0S3xWQ1hGTGJnaXxjKGp5dUR6fU1+UFZFT0RMVmVkbmxgOzN8M3tkdHhyXiJqTXdnZWJRRWBsMTwyV2goZCR8ZEBMNG5vSixRd3h8eHw5K3B5XmtRKzhSZ0BSKzBwLks8LzJ5KmBibnJadmJYbUpgfnFyS2dfdXA9OH4uSTQ4W3VrSzpPfmVuR0BQVlpmKDpSW0pffVM8Mlg+''@;'; put 'put ''U3hibnhqSiohM2t+WFElS21MZ1Z6X3ZnSFYwITkmWlolVyV8d3w8XkheNyxVW0YqITM2M21edVEuUmN0bnNHcXp5T3V6Qjs1clM6WTNaY2wrQzI0LDRPWG5NJDtYOnwiU1dzc358d3FkX3l5bnR+fHh8PF5bYGNfJWBlaUhONCwwcHYxUUxxJm1pbnR9cXdxPHxjMV0oSF80Pnh4aXlaeSYscHhw''@;'; put 'put ''aW5gVjJgbkRGPEBaUz4pWlpsOWZaYFB4ZnpURWMsfVhWWiY5S1k6YEFdLHR8dD06aktzKl5Lakd3LipQcSxmTEolXWliSio+KTMuQHFlVSghPlM2PnYmeD52JjtkYWZncCV8LFE3M3JwOWcpb18xTyteXWMlZkh+LiE+Ii5uKD9WW3sjS2A8MV9YZTFCQ2BhTGNFQylpfDEwanV+fFhPXzBpMD9D''@;'; put 'put ''KGZLaE1GWEA/KjBgYVleXVl8IkRAIUgxWkNYNUFXVnExfUl7MlBkI2M2bEZyWiI4RnNHKHJWXWx5cFNOOFR4VFFwPV9VYHd4cHRSYFMqTkcweFtzU3w0WmhMQjQrNX5fVWZgTjpuTTsxd2U4czJHejk3cChPejdXL1p7aGJGWEQvU3xnKzBMZE1eeWdtal5lRnllbGV+dCxbWU9wSDdnKGg4Wld5''@;'; put 'put ''OlFIYD9sUzdjOWd8Oi8wdHxhVldkQHwyVmcwaFlYQUp5Ky9fKGx7QVVjNjdkQXlkREhsWGZ4R1oyIT5IUHJOYzYoZjhUL1N4eXwmRFhBT3NuLjpnZi5LL2Y6als6T0Z5IW0pcVF1TSp8NWdiYmwxenR+UnRvaFE4Nzc7dEArcjpzfl5ifigjQioje181VG91Y0tPK1t6PWIwbUJZXio1L3kzZEBX''@;'; put 'put ''cCVWTk9kJHljI0lyfFJDUG14MXkid3Q1bD9GVSZDST9AVipGPyljR1M4OmlVXllAWy5pbkxZPH4qZikhZEckTGc1TGwvPDN8ZT5JYHRCO1BbYjJQN3hRVyU/S2c5JFE2Vn1xYWQ2TDpIYCZZV3F1JWpUdUIlUH5lSFVmVy8+bHtNJVlsIT0+amR+TyVQP0phS19AM1JWZDNbaF8/O2NMRzh6XllT''@;'; put 'put ''fSxEQzhTZUI4aiphaEI4VD1SYkJEIVZgOkpfbiVfPU0/Snk0SlB5YjFFd3gwLlI7Xl00M2QwR3x0P1tpPC9ZfEZpdTYkN0dpamRmJGd2NTY2IVJLTXc7UDpgYDg9TTA/Ny56ejdxekx5V3J4Q1tpPzc1LkdoYDY7ZGJaQVNmbXtNal1rcWNOLnpFQDMvYToyeCo0bzJJTXVhVVRzWDlKZG9RKy9G''@;'; put 'put ''ZyFxTj8vXzg+STlka0hYYHs+MTorRm9sLjBxWHNRKllnW3BMUDo7TjBrSCVxYlZVKUheSmorSjk0djIqfV5AJXlYIjA0Ul17UDRDQHBDTFNeRlNMJHNGJXZ0KmdtYWsvaVF8Ki46SS4yJTJMWiMpRlc+MStgM2Z7XXFGdW1TJk45QmwoNHlBIXNrMiZSXTF1ekgiQ0UhODU5UExKOTpwZyouKDpa''@;'; put 'put ''d3lBV3VRVHRNNyl4PDh9W2loWkk3e0pfI0pvc19idns4bEdyLy46VCFnQzN2IllzO3g9eHhpeT1tJHdiRnZhantMNHx9OkNFTyFlfXsxOm1Mal84W15jaCo/JFYvcnNPNk1PITosQ2FaJlMhZXEkMkVRV3tMSy8zRTB5b2xuO3dgSk47dE91ZzA7VENOIyp2fmx4SF0qTGhKKDxTQmRqdWduLkVE''@;'; put 'put ''QzBFPypUR1VhdURpYlF2UlpuamVbdDRzelVgQDVAJmtpYT5sbDNpZkhlbVFhNWgpRFJjKTllXyRfOj19fmB4cnZMbntPOVBsTDdmbjFwNjU8flRQTj83TDgwXWZjMk19X1dUOVNINCh5cWhqIVRIfntmKllnPCs8LCxTekl+cisrc0llYH1xWjNWRjgrfUtGalphKEJjVmM1R3RZdXpfXmw5UHxE''@;'; put 'put ''WGk4RktYe1VXPn5SVVB5e1AzKGx1ezY/PEB1aXxoOXdoUiUxSUNmTChxQ2h6RWxjS21MI1N6QltrVCtdOH1gaHlUR2tGQmUvQzB4RyR8N2xRdHc9T2ZuZUhVKjJwXl5YLEooTmwoTnpdK1lzOzhaKi4oOlE6a3cmKHQzb2NLfkl5PSoxb3h1Lzsmdls2RCtwPkdbZDFDPHl2dj5fb1RHYnFSPntq''@;'; put 'put ''UF07I15edyREKD47KThieDF2MmQ7KUxkTyhjZEJVbXA/U0dCTWVmO0VaWitwSHl+SysuN2VEP0FwbnRDZGNXbXFdT15oQDl1MGNLLzRTODBsMFA6LFk4bHk2WUIxTjthZWwoWWkvMklHZkVCfExVJHtDdEBEUClTOS48XnMrajdXYCMmJS9eOk59MzZZQjRVUjsvIy4lcn0iRktBMSUvUzVpR1s4''@;'; put 'put ''NzxeXzxkOD05Rk4/PT1iWCp1dmpfYW4zbXtHZnlsNlddWFdbcXlANmBGfnxHZnkjc017biguVjNWdE5zP2pacDMhJXh+RH5HRDpCV35NVURaMmw7cWxPeT9uXmUlaXx0d0xkfmhKK2N+QHFbekMwRGdsZnhHIVRwSl82YXs4NTkmbitWalJzYE13ckBNMztkWWMoeX0uNnMuQFY5L0gpU2kmeSRn''@;'; put 'put ''SXJLUCNkZllvKGhfckJ5MzNCPEQxYzpUQkxHMUw5WSVzdDBSVV0kckp6U0lfcyElOWxdY0BveG8hIV85MEFIT3d9QWtjK2YyRS9oPj5EaFRFTXpzRkl9fmcwZCVdZG5KMmY1NjsvUjVSOykzI3pnODJyUnIsbkM5IVo1OEBgTzt5fFozTUZgeGIqeX52Xkw/NX52K1ooNlhjNzFdS1hsZnMkc2l2''@;'; put 'put ''eXI/eyl6fXNwTnE4LFdDdnA8MmJvajJTclFEL2c0ZWluO31dUj81STkhclBfVz04Xko4Zl9Yc04pXnVVaCs5WFF8fCQqLk1lW0coI2hoLCouczNNaE8hdUhFQCl5Q2A0IzpXfmpqcDh5MnNHZyVQPixCeGohNzxKOC5tV350JkBvJX1rMyw6SlVUV2ZqNi5vdSxLcFAicUBHWS9FJjFNP1BTI0VJ''@;'; put 'put ''dEt0JXBbW25uPjEkbipAbHYhIWV3QlZKLF1uNXI/L1NVd3pbdk5zYTpKQjVQO3loLHlmSmZDbDxIbDhIeCg+PCxJZ0o9azFxITgjL1FibWR1U3I3bm0wV1EiWVdMYWQ8LlY6N0pOLDcrM1BQPTJAYVhHeT8qTjtIMnVacXdEW1hBPy5IcCx+RkokKDl4PXVXaTQ/VzNqelEuQTEsLyw2U1ZxdiRz''@;'; put 'put ''cVpWRjgrQz9uQk5gO3J1QkkpYmpXZ1A1TkxvSDVMRDU/WH1LW3JQKSE5V0d+PTlPSXlVO2dGbkF8UDE9KW8/SDNKOiZAXVdBeT9sS08+THkyQTg8I0JhIUUla1FvLDNXIW96U2VsOVdzbiY4NXAiImd2eD0vOkomay9nbH1ENz1UJkcxJW4/WSNLeUhySWVRdnY3RTNkRUNkPTo1RXF9Om18TE9j''@;'; put 'put ''cUwvUz8/Xn5HVEojKm8rcDpOX35IbHtmXz5MWzNHJjo4VH1vIjkjRjs9WXdgUyZALEFZKVN2c0JROyRBQ0QrcHV1TlJ+RkolfDM4NjBJPlNvNGRueVV+YD4mckIhJHdDTl99b1p1Q3EsVDFwMldzTS94PEVRbUo4LiVlK11nUUBZKzd2IStPTTs6Zk1NPXt5UjklIWM5KXVuaXd5YnNDTCJ6SG9H''@;'; put 'put ''OFZifWREISNlfmF9ZjZialdRO3BjdGVqezJqfThjfG1kbz9sbnRBbX4rRi5+Njt4SktgNmVpUiN5RGtjYnJpMGYmPVN3PH4/OXZuSn1rPiZ4dTZifmhGVyNAeUoofSF5RFd+UDpja18vUHEqPUhnXjp2cS9XPE9BY2YuJHxeXlpCOjdfMHBdclphVnRkfHF4eVRsWzo8KHt9W1NYb2o5eEdmeSQv''@;'; put 'put ''Vl1weGhuUEFpbSlLKjd2L1NSZGNmN1Juem08TzVVYVcxI3RYPnU0VVc9fm9bNmkrS0ouL1khO3Esfjo2PC9NLzNhJT5ML2VAR340JXdkOHhYfjowOTc7WXkjeTc2aC9GWGs7YjJaIjBXZThUXnYyMnpWR0R2fiY4S05uTTFdM2RdWCZmJTIhOFhPTDomJjQ1KC94VT1+NUJkLnAoUExudFIxLFBi''@;'; put 'put ''fGhkQDdNfGtYWUl9SUJnYk5CXVc4LDxhcEFYcHxKbzEmfGA3I3o9KFYwcWhqdXBjPEQpbDUoc19PQ0dvPzBCLFJVWCN2c1pwTW1oOzs8MiV7cVBqKnZ9YGtrOXZ9ViRXM1crX0taKzF7blFCUzR1XkYzMjgmakklQUdKUWpEVHBNNC9eJG5+LjYkWlMsVFI/MHo2VTIhY2o5NnEmflRCIjQ9a3E3''@;'; put 'put ''aX43PnNxJiU/YioxZ3Y4WSkhOG0qWTRaTX0sSV9rXVcyU3JCQTU2W2QvYT1IdTBfVi4jODwlRzs6cHVyc3AkbDtoXzFFK3twSjtze0BLUyM3KHIwSHMzVUM4Jm9KeSFKfHRGUkQqMis6cDB7Y19hfjpjQExHLk1DZF9yS0ZeaSVNRlMxRkR4RmtYKSZZMWsiXSxzUzo7dnV5fXw+d3pFVU19dEtQ''@;'; put 'put ''IVVYa2lXcHhxezBMTkBLVzlNJUp9K0kjblFwOTZBS1luYko9L1ksL1Y3VTNlVytydiooJERSSUgqZUpXI0d+YG94LnN2JnNGYWNnYUs9VD5XMD5EK0hbKjU/RTBjeHV9KjUoQz5md30qZHxDJiRGR0JON2J7KU1PITtPIyFUKHFGY1t+aVI+OXh3P0FgOHZpfE5BQVMvdnQxPStaOkNMb1JGWilA''@;'; put 'put ''MFJwbSxnX35ySXk0MXFILmJgOmVbMiJ0W3B8I3xSQUoxVzEvT0xed2xSWSV1OGF3d29jWT5qNnJULGhaYmJ1Tj8zT2JPTXRzUF1XZW10ZWxZaz8sJHIqYGhaNHd7YT1NWmpCK3x9Qng9emA1JSE5L1o+VUJiTCIoQHI1NVJQZmBtPSl5TGokYVB+IyNiWDNSKyxjR2JpKjA8TH5dL3FwP2BLdFEr''@;'; put 'put ''LFV3RGMpYG53XTBSN0ovcWAiak9kYn1hIV9BOD0lO11ndlowd2VmXztrXVF5Tm9hTHlxaFY4NTVfcnl4I313QFtZdFhueFU8UT51Lns5I1gyNyF0a3E6YiFTPjYzbnVLcz4ufTFue29qWk0hOiJLQDU6LDNISGB+LnZLQiFKVSkwSStKYEtsOHIjRFI8ZTd+MXUmakhLYmthMzpDMDU1YnxdaHt9''@;'; put 'put ''Mz80dC9RMz4/dk5XMkBUXn43PSxSaF5FYFZUSUdCQVM6dz1mL0ckXy8oMm8vOThOVGNPUkYjKkxoSklKey9qTWxZXVZwPmFnSyxpLHU3VChGY0c1WWkjU04jPigvKm1pN1pJWVJASDAjZlooVVspfjN5W312ZSt8eV5aLiRudyxPV197OSFBLiliMi8sWWF9OTAzflR5WnkzfTFwQ3wvPmxoK118''@;'; put 'put ''eXFGLFp5fT14R3k7LF5AMlg1d25XTUhSRFt9WiYka11WV3xTWENIZF0sS2ZGQjYwdkUoJH0/VkFDTndAeVcybENzczdQLmZAc1dfcHpjNUI8RHF7ZENYJU1DZFh5OT5EOnlyRWk6NzJmPzUyN2JSP00uMU0uRVM8MHFfcl8vN1pMKi5ASUh+NSIyPl9AN3M1dyFHbjR5JWlfTFllSHEvQUlDX3N5''@;'; put 'put ''WUQyfHhBe1tnOUM4OUNqWFNbTVlUcXVUJHlxXUw7eWV5LykrMnJBbCRwJj5qd18rTF8qYzdUSGB8Lnwubyk0YEUrcHx0PV1qJD5AfStbfkdFVlJVOyFwN1tIJn0yWlE0eGdJelBVdngicjg4MG5nbjdKOl9nZ1JWWUtuYVt7QG1iLn4pU0JLPnJuJitTdzkxOD4mQyN5W2N3eTZOREU1SGk0eHF2''@;'; put 'put ''PjosWW56TnN6YWBwfFFpfihuKVpqUmA8ZC87bWE6KlV8Qk5gQFNgOmRHRj01PjltbW8hNGc2Si59bj4qaCJNWU9gaGBwP1MwLGZ9c15WOi5HamM1SCgqJmc+c0lSPFtaN0wsXSxTS2UvLH1faDpvI2ZBfXl8d31GL0FCWURmLl0kQCQ5d3F5bXYuVHI9NEtXR2cpXT9iTVdTUiFnb1Ihdmd7MmMq''@;'; put 'put ''filoYTJhRFJZcyYrNGApOVE6VUJ0MWR7eU8jP25nQjk/ajtaPXJ8ZDEhVVtgSWcrWlc3PSgxd0ZPX1l+ZnAjZXI3USxqZmRSblBLYjBUO01jYnpzcVIzOy9dXklMZVF+NmhSMVV4WUszYHl5Ky5EZzNfbU8sTlp7MzoiUkBdZGI7Snl8LChkPXI+bV5IP2dlJmc3RjwvKiZLeTwyJVNqVkY4JHVH''@;'; put 'put ''c3FHVjB4fTwpcUcvfTh2WCtxR2ImXktfTnJHMkJeTl5lWkcqfGZBPSlwflcrUz5EfDNPNT5XeXF5OixBWyF9NnledWBrc1M7OUozWTFIfihZemdfUiohOmd1UWkyJF0jeTdFRnN1XnxzJkBEenwvUzhLOSIxfSV2PFcjPStlZEdFZmVqUW8sbip3Lm8yTlR4eXh9KEgldH16YEIsckxqYn4kaV04''@;'; put 'put ''S3xNV1M4VFZyMlFdNz4qQERqdE5YcDVjfDpVTG1gO100UTwvMH1WUixBK3JJcUxLaGduVkZaajMkKC9VPF9ibix9ImpveHBWdVElSyROQToqUUBOZiw7b25nUSpoZSZobSRGdmQxfXo2PCg7SjRTS2AwaSZwQz9gJn14W04+NUtVVzlIayVQVzhhbWJTT1dBW0BOQH5xOn0mTTFQLm8zaz8jITMj''@;'; put 'put ''RiwvWit8LCYrWjpXTD1TZWRpcmFXPVhSVXZjNCtwNyUlbDh8R112VXs3dGxnRnkpb2lManVsRjYuQFZbe2lVV1NNPFsmNTJTV1A5Xlp1eXl8WU9Tfk5pblhWSmkxdjdVfU5pY29SX3FieXExMExDXnk8azFSeEQrN3pzNW17MEl4V3dEejQrOH1dbU56MmQ3VWZyYDpDaFBmUTUleDY+dktQZiV7''@;'; put 'put ''IkleREFBOFkwOy4sNWh+LiVWYjpWQHtuR0xOeT5WW3siMUpCUiZ0eWxDVGNdSEBGbiQ6bDxIXzYySTkucyp9P2IqcUJEfSpmYUshfSg1XkVvVCZxKUp5fFUqQz56WXNINExxdXxiVDRfS0RoPkgvNnFDQSo2RkEqI0leazs1Jjg3I0F2Ymdmdmc+JHtsMH17bGtJdEYmTTxWcDxuJTQ+Yzs9ZyUm''@;'; put 'put ''bmpxQEdmdm8pO2Rfc0k0VD1kRHNMNG5QS3crJFQpbyRnOldTJSFXIiQ3RyQ4MF9zbEpxUEFCXzA+fH5tZ3syRXh7dkEvSklYW01ALCl1Wz0kQTNRJDJtdDlmLHBiaFhyZTY4dFk6bzo2fi9eV1hadE1TKCx8PHpZfEVXZjtJJFN9bHBgeUEpLEA+TDsmakc1UWFMNDEleXhxeXwzNGV6e348RS4x''@;'; put 'put ''XkVpV0pgaT9zYH5fZCJ2djUra0UkXz45Uz11Q0w5ayRgRXNZdlhEbk9AbFRzcyJbVVg4K013eHF2fjYzI3ZkMFhHKXFpJiFLS188VjxXKXNPQCgpWit7alVDTCJMajxXKXN0YEpgKHFucztJeXFSemZzXSI6byNmdGpydjpXUm9pdDV0diUjKDg9SExKYHw6NXkqOCZySn1YNm5aOiVFd01qeHZW''@;'; put 'put ''LHBZckYhcDdUXk1FYHJTVTY5fFViNER7T2R2amNZYjQrc10vM2A3SFY/YktbeUooZn5VWUpCUnNDeDFrLCpuTHZtbl4/VUUyKVIqeFcmZ1lXUl48YiZnInc4MCxnTCpLUVV5ckhZWlckT2QvSFJ4PUg6ZEM1bT9TaXIvZGA+RU1JRTxZJmtXVElIZEBsc0lXRldUazs/JlZwcylPUGRJKkc0TGlA''@;'; put 'put ''OnwjKzcpNV1KOjcpQVUlSCgrXT9jJUdZJHZtTDpfc3xnfmBMTV4+LzxTZks3XWRNN1BjaT8id3VhdlNGYC9DYGA2YSMudkokenx+MGtOZlJzNjEzV31eTzNaNiF5fVBEVztVfShyVTBmRyxLan5TQ053Nl9bWzk/VTVVNnZ7S1s7PEBWQ15Cc3YxQi8wbz9bck9hIWxXZzVfNXE2dmhKLGo1N3dk''@;'; put 'put ''VlpzO3w2TFZNV1N0KEs2LioqTzVLKXA/TFtjZVkkQj5Ce3xefC9WMzJNOFRIXTFnbUAyJUQ5cyY0bUgqWGM2T19PREJfWjVmfmAjPWRPUU9RQ1U3TlRQMmdyZ3M9byNXL083Mj5JS2BUP25vNT50WSk4TDoxWio+dWUobCpfJjIySS51e0w0Ni9gKCNjbj5fPzxyLk9ISFY/WWxfblAwP3psRCpE''@;'; put 'put ''NV99UngvYCgmY15LQGlecE9KdjxTNzFoZWxdfEJJO0dFSTk4Yiw7a3FMbGM4I013YEJpOzIyTD8xWm0jTHYzIT9FKyR3JHckQUAyMmckaUtIYH16bER+RC8vKi5IaGNZP2hFe0YvUCQyMkM2I0RkR2NlOEBtI35RUjdITDVNI0VzIyI5UTdITCo8W1gkQiN1Yjw4TGdtemRZUn50IWxiYiNqJFlt''@;'; put 'put ''Iz14bERfQ08+M01pVDJtUz1LSSg8c0lwbnF5JjNiYmBodnZLfG91YUhdMWdtdTgqfEw0Ni9fVyY0Mi5KRUhpYmUyWSRCdlkiQ24rbiNWYzhkeXk5IkFmPlkkQjBkUFdFIkRKO0c4SVY/YnN+YF5RUikiQWBZSSp9QE9WXX1pbUAydnBTQ29nS3ViYkxmSG5fRVR3OlF3KGcvZy9BSjtHU0dWP0Rr''@;'; put 'put ''NSIiTFtQKj8mPEtPL2hrP3FmU05+S35LfU47R2RGVj9jYHE4In43cmtYKnxgT0ZWW2s2fWxtRm43U1Y/NyQyMihuI0QoVVRQR2xIcDI7cXsyTlg0SUtSYnU3MF0uWH4zMTtQI01OSn54SSxIN0dFLi8/UHF9diU8O0xdMy9mUWFvQFRibWp6IUw6MDZ7O3F7P3JpXXswRH5nPjh8ZTNPc11edi5x''@;'; put 'put ''Z2NicnE4T3d+cDcyV29IKlhiTih4eTdXNikjW24qNylRXTUpQy5gSVhtbDpRRlFAPEBIVFEmPCRzQ0ZXWFA6X1QkW2xRPkplZHtoVWlpJFl6TilBZHJAcjwlI3tPSGN9NXV1Q25SNmklKXtMW2MyO0l7SHQjWiVKfmUoZWxkMjZFd2ghVGdIXy9AfCEmVWE6ZyhCIzUqcHVYIkdec15OUXUjcztf''@;'; put 'put ''P0J2XSNvMHdwVD5YbFlnKjVbOj9kMWlXKXE3WDpxPENuYmJzbWt5dnluZ19qNWNVZDVNP2N3M1UhL3puLnVybk4oeCZdM0w1MzVKdTxKYDlZOWdiI3JiPH1fbz8zbzRwNmApNTx0an1mX1Z4Z1M8NGdeSlpMN2pmLlhiTmp4JkQ6ZHhNQncieGJEX15bSEAsTmA6WUR5PiZISX16dl1sYiIhZXdM''@;'; put 'put ''WTgyay5BOHtEOn0iYyNOJUZvMDVFR21sWT5gQElJImFTJnloY3RRNnAoI2FnblhiT05DMjAkTjdqbzRiWUhuIWxkVVVEdzBsT11kdn03TFMsVVN4PT5idGwlO31YMTtnZkZ7amYsNSR4eWxjWGkwWTs1JU4yRUkpNlN1NSVaNFhyPzBrKEhsSC5TY0VvUigsdXVuS3MwQG1wTlE5M09IaTRFRTRp''@;'; put 'put ''THheTmxYRUg5blFXJGgpeHl3SSxKT0NVZk9XN0hIIXRed3hEPnl1IW1JZnkwREpfPy9reG1AVyldRGZZdlh8fjA/dDIxN0UmWC4+Yy9fdndOV3s3b14xPUhsLlFjVCshVEJuI3JTT3V6QWpncmlgeGw0fD94Rjx1ZFJuYT5HLyphdENecmtvSXwiLDUlTmVDLldtbjluZHhwQUU1S1NXQ3FNNigq''@;'; put 'put ''c1BhU349UUFteVkySjomIXR9KChKV1JsRGVbS1E5eH5zLlhucHRVVE80MmV9SDNIWWcwI0xAMm4hc3BMU19hKTZVVXBUYTNhWlN3WVgiIXQlOElIWGxIYUQze1ZhIUkqIT85WXswPkFaOzd2WXgpPmVsRXE/LyZmfGFkWWQ5Z0ksb1s9R3wiYjd5MCZ2PzlWO1R9OmR4eSslJEZQJTwlblklb0VE''@;'; put 'put ''KlpXW1BwJT90P0dJeDA4aFBhSC89RzZbcVFKXVVhYFtYST03T2J0JCU8Ok9GUGlmYk92MCwuUGhDKFVbck1YRio9Y2AsOXQvbFozY2hiekliMD51UzA6ZzlRRkNXVW1NT1RQVzNFfGhVMDQrb3hrKzhjYlVaSHMmZz15L3QkUWJ+NUlWPGM5dSp7cShhOG0/T21ROjlKXnY8V2VIZDJmfj16S3RX''@;'; put 'put ''Y2VYTTdUcDZobFd4RCs5dmtufCxBUTU5NT5naGxdSUUqT09MZDY7eCk/QFdHMElfNi5IfEhrbCVDcX1AL0BRQjNaRig2Ozg+fndQWllrbHs/VEVDKDBvN1d4R1dSUnZ9QmguYUZmcGw6U0ZwZ0x4VTFrOiMma3dBUmB0VXlBSjYlcUhrI1BgdVEsL0g/JHZuQXtCJDRvMihhcCojQS8kSHBOeEM0''@;'; put 'put ''NDdRXjF2ZlpuXjc4djtpb3VtSjgrW1pvIlpUJFpYZTM2X3JMKzQmZWZpVmp+WFg3MXYrcjRNWnxRQixgIkN0eVN6aCVmaG8kQ3IkanA4cSNNdVBqKD49Q3V3eWl1Xjw/bWJCemNoMCRkcixyO3M2ISNnPC9tRGYvOX5CKkdUZnBIdShQO3opTVB2UXJlOmwrWS9FJjd+OmEyTENYVVpCc1BWfj9g''@;'; put 'put ''fFt7JXxaKGVkWVZ5VnQlM31pIjd+ZkJ7YEFNbWgxeWRyQ0tOQHQyQU1xaD5dUkxRXnM3L3llenhLJE5iWEBbSFlAKX5TanVWRlRsdGtJQGpNLis8YGNOfXlmR2I+cldpLmkiPksjdDNWeGc4Vk5odCZNX2RyMnU+VD9bMVFCTDE5ZEciVkthYyVXbilDUjReb2Z1XiVpR3pfRnBQX0Fldl89aCVL''@;'; put 'put ''LlJiKUUmJC5kQkVmOiJVTFg2M0N8czlsTzMrW3h8fjBxTFoyWTEweUBDIjo8Vlc+RHdycjp+ZHIscnl8P3o/NztLUTg5e3w4WDJQREEoUkxRXm83L3kkdE9eJEI5a2NaanVpe0RNeDMveWY3fTNqeWAyM3xEckM+dEZnV0FXKktFeEtzdlYsVip+MVF8MD55KHxRKmJFUmhkbjlWIzNUKFk3JH1D''@;'; put 'put ''TUJMJHNBKWBsN1RoNy95Nzw6LG5AYCtFczg4KlplKCs1UlhPKX5aW0tgTnReXktgTmN7MmgsTVBVeT8lXSpxP2UqZVRhSC4hMzBwWFNGYE5LPHlMSnh8MzYxS3s2d2NwXj5+Vl8uMXJRd3ZlXW5gQk9JdkkmbixLWHpYOzxTUyhseVhsZHxreEJFNE9fRXVoTGhzdnlMdGZQKHRNc3ZdQXJfeCw5''@;'; put 'put ''Zk5tYjw7TCV3aUxbUm9uUSF8I1EifEpxfU9hLCsvUlt0e2QiaXUua1VCal41WWtxSmJmOmtaODkkXSE4cDdebTZNN0Y8Ml5reSx2b3A4XmtLc0Q1flEsOT50ajZzaWghVFYwTypwWipkQVdfLCZ+eTkyUTo1fEw5fitvN3xmalFXKyo8WWt+TCVofkJSfERfJHlRXXswOV1bdV03JT1YYyFaUTQ4''@;'; put 'put ''flMwXi98fTw8XlR3SEMwUjMsLm1MImM9UChMQ058S3l8Kk51QHZSbl50TypeKXFIKD5eayV2LDIockZjc1pDRmdFUzZxKyx2OG1ULGQ9PCs7UHFpbz1yfmxxL2p8am43ZGUxJkZfVVNrVFJYcGBOckVJbSE1STVdYnlFa11FMCtjR1hQK1VIIjZNdTJVcFQyVDVqTzRoa3o7aFJCOEYlcWZjZH4h''@;'; put 'put ''QXVMLGtdfGxiZGA6cDBvemdqckJHKFlse0IuTEVtaytzbGl9Olo4NSM1O349PCRjZ0g8OyxPK002Yz08eTclT2M3Q0o3P2ZsTU9yNWYqWHZZTzBOKSU/QFhPVzNkUn5aVFd3ZH1uOE4+W2BkUXZ1N0Q/PDBpLkVMQEpLZGtobylEWDUoI1RkZnR5U1cobkhvUSJmek4zODAwWjlsTjImbVBrdE1b''@;'; put 'put ''e0tYPDxyaGJOeC8oNWtsYFtKck5ocVVwSiMjISZ2WDZBbk0xbD1TK2xQWTFYQVhNdHAlSHZKY2ltJl4sQS58ZGpJaHhKbyF+fXNtR0VPfjFEREhzKH40QmZOeS8yeiVmPC9dZk0jSDYuST06UiFEcEhOTSFiYGFidSx0NkcjK3N0S3c5XTcjSSYmTSJUfGYib3Y6azp5U3EvNSVNYjBSPH42akM8''@;'; put 'put ''WE18SFI3Yk9CO3p4VD5QLlU4fXFTPGtbKU9jMTVFNDhYJTBuXnVFZyM+cWYuV18oTilJengmMU5LYDhUPj5jWiVdIXgzfTtMKGl4UVt1fWluPlVAUkBLYzI3SEw4anREfHVDRzEsQWY8SFdfVDdkNjNldlNtVl1ZTG9pcjtsbTlfMElLYyttPD4qKUBJNComS01VJFE3Uzs5YGFLS3xyPWBTaGN9''@;'; put 'put ''ZmJRdkw7bD1wSTdNfTp2ZHhoXm9RdVRwZSIueT5ye0x8UERgS1tLbWF6UloyU3xZXj5qb1Z7Z2s6ZSg9TF9vPCw+U0pMank4WnNHKk14Q3hvUD8xPlZRRzVDcnhLbT8lJENDSV5GcDAsTitOXiN6SV1RRHpfJT1XJUxKRDRuU0JZTStEd2RGX2JOYC9VLFZSYE54dVE4VmhsW0twaCgjb3ouKm9W''@;'; put 'put ''SFZJNi4qQGIvM08laW9HNSUjSmohXkwqfm82PXJ5JEVJXkMmM2JMSyEvan1XaC5CUHhHeWl5MjRbcX16WigzaEczV1VMYCMmYGwmV00yaWpIcG5ndEAuWj19KzRdcm49clBmcVtaaUdSVj5RPC95YkJ6YV1EcTgsKF8wRVlHWT8uO2I1Wnk7SyRzZ3U3Wzwwc2tlX1BKTjE+YkxwR35dbkkjYnxF''@;'; put 'put ''fUlqaXd4Nl4hRmsva3J4L0wsKWM1Mj87YXVgNS5geDtWTzJNNC91PSkhJGtGYFtYRiVyMiU0OHJaS3QoMm8vTCFqdmEvKDVyXSVLM0p5fnEySSxFP3BUSzN5V1NnRVVjSzw9N3oyXTgjJSM4fld6Q3QsOlF8Mzs/XW5wTkAuTT05TklEIVl7NnMkczAkT0BhSU5RczpWeUI7eXJhelFyP31BNEwr''@;'; put 'put ''aXsmZ2NZIn1FTWp2Zz4hdDwrfmc1dH0lPWZWLiFYfmBxI2MkWlYmZDVzfildIUwkO0E7U3pOdXpMZnN8eGlXSjhiIzZTPnhpfXoqdn5rRChKdzxia009ZVAlLGxZWWk7XUdeNCpfXm44Jk5xS0VwWiZ2VWhucDUrTTRAenN5dz1vTi5yTFpsTVE7bE1ue3s4MHFeLHo5OSVOfTU0NGw2SD1eUTNa''@;'; put 'put ''Ky9senxGYmptOkksSyQ+UkU2NGJ+bF5JWSVpMFhRSmYvOnNldS9TQm5HR2NCbHglK3BDfCtsV31bTCUkcTtsQGxhRFF0JX1hRVlySTZmYzcmdDlKfE48bHVnLnt7OlNbY2FMSlhiM0pxJF5YVT8wbywlanE5TCtnbkcoS1BDTiEiZUxmeUFFVDt0XUhWfTw+cj17VGVPfHAxdFJyXT45Ok9uKk5x''@;'; put 'put ''RztTV1thRC81XzMyL1prSHJYcWdjfEJJQ3VRPnlycHlhdltbMykzdFtbSGV5Ny92NERddT11aTdXMyp0ISN5fX51N04lSGZYald3eF8rUjZTNHx1P1lVKmJUNHFkLDJAITN6fD9iL1A3SixGQn4yWkNLb1BSVUUzQjhIP1d5JCpzLC5qMUV9eit2ISgxQkAvfHdlamAweUlTNGgmWjRrL2kibmBH''@;'; put 'put ''YGZsPE9NZCNjQzFpLmU1IWNzXWlWazsjLz4jYmIkcWEjP2tPZnNgTVZ4JDguSD5hSShtfVt0P2oke0I5YSFWQXg/PWtlOn4rdlg2VkBJYGo6PnModDEjMjsmNylTazs9JF9ISWBqP0xza30/cj0pNnshPih8JEosYD9+cnldLEJ7aWkuQyFyciNNa1QrQnswUl1YMkVZRyR8RmNSdFFATEBOQG9C''@;'; put 'put ''K0tKUi4xLkZgaDxXPlE+XSt8cl0lRyp6fDN4fUEuQy8qVldNYzZ4PnxIUjFMfmA+OUpecCVhMUs6XSlxNGU2bklMcEg5PyQvLFZoWiZISC4pfWNKUmpofGNaLig4fit9ZjBue2UoMDlRLGJyYyg7Li5SJCtQLD0vNkw/czgsJWhDXX5+YzB4WUkqLH1vfmt+PmAqc2FzUCxoNWIpa35KXyR+YHxp''@;'; put 'put ''VyFUUCxBWUkqZ3w/fWd8ay9KNkFXbEtCYSR8NXBsNVQwOj19TmQ+Jks4Ljl9VldGNXBQLzQqTGZBT3A+XzV0XUAiUkQwPSZPNyMsS3YzW1VSWG56aDdnJGV9WzAlb3wpfSwpI3ZfM2coTksuZiw/I2NlL2s1ZFAqUVpPT3I0e3d4ZSluXn5JQGB5OmNGdHl+MVFYazY8aGRyLHJNfGBbY0Y/c2p5''@;'; put 'put ''cXw0Z0guQ3dVfXpiKjhEKHMzQDp4TzhffWc3NkphbkBpejJYIWljO3BMWWArK1h7Q2Q7QnJaY0hlZHNMN0g6W1MuQDlIIVdIXzZ+N1Q0b1d6bWxnVn5eI0lWPCRjajt3XyokYEZkNjVUSXQxWCppM0I7MlIwfTsjInVtaXxTLFptWFZZQSs+KSVaPHVFa0NTe01YTFZ4QEFYTGR0eWl+WXxFKTVl''@;'; put 'put ''S1Vadyg8PnlJeDduTEosMkI/eW1SflhFQUFBQUFBQWxCU0NlWSlvI1soPWsmdClTdj9wN2ZtKWZlQitdZypsanp2WFVIPUpaOXZJeiZsP0E/XmZQXjdhPCEiKTxsOTQpT2J8ai9DLC84LHZGS3YsYEElaj1OI3YjQHhZeSZUS0E4Y1RMSkhNXiowVTg1b0BibDpdYXMuZ1UqSj9NN0spaGVHSjhk''@;'; put 'put ''ZEBgVDJGK0Y2b04obV94WlF+VFljW1YjTjJxaEQ5ZT8wdk94JXxzaGM+RHt3WTVAMVMsTEkmWEpLVy9qVyFXYzZlOmVjMEEhWldZZF9pOFFASzlqZnEqRWhJRXJ6a3hpWlhDeVhkOWFIbEtWNXR5O2FSRWJJN3M9SWZmTkZoO3phJWRzJixmanUhTUMjaWBKNyIoeXFla2BqZlY8K2MpXSg3RWQx''@;'; put 'put ''PU1hSzB4ZXpiTUBsUXYvIWQzQUAzPjxaREdwYGhqdE1zWShJMyRsMUo5QGxWIiopRDkmYTZNUlRHZyNUYzYvJVgwfkM4LiNiKyErclhaQnB3UWZDeHVNclU6d3hiJT5POHo7M3xGNT1nbnFyPW0wQGU9WmZdaX1XP2g4fXloam1wQ2NLXUNZIUt3c2I7LmtQSTBiNnQpbHo4blc6b28uckcvdFpK''@;'; put 'put ''c3lEJktgYkd2WkMkYDdLdGs2dExjXm5ba1UuVlJJTGVMNUEwfURgTUo6OlElTyQ2XTtPJC9XfEEyaTkxT1IkPnxoMnwrN3FkcDJXL3UkO01OYmFKPlVDIXBEKEtHfUIkcH1zOEdpYiNuZUY9UihTVClXYy8xZ18hfkp6aC9NdkJLS3h+Z15RQEhWXkVSalVMZ3BzajlKJmY4OitjRzhQcEdENF4s''@;'; put 'put ''YkhKP25qek00RCk4b3xjfngxKWlIaGQoV0w9Sz9IYC5pTXVqOjl4OC9oa14oP3V+PG95PkVDaz1eaDFid3twSypsQmRsRD40XiRXR2BwWCR9ZGEzQUBHaF96cyNjbz04YT9ucUVyYEZaeU81JGpbZzVAejRpa3RTMF5lIzo4ckRNMjF+UFEsKCpMZD4+VHBoRkshb3dXeCxsL0p+dGcyXnleSHwp''@;'; put 'put ''QFdhLF5aXT9sejldanUoQUJ4Xjp6ZmhSR18/KEYoIzJBSiM/P0JLbm1MdiM2LGJoKXdza2RERkV4MTBzeD9JR306NltPZFs9cEVxSjRBZ0IhNmlfIyJTR11Rejw6O1JsX3UieG14V0N5Qm8rYWsrUHY3RnJ8fjNyRTErSTA3d24pbVdTJnplQEFqV1EyciFrb2ZTYm0wPGtsTmlDPldfL3kkR1Jm''@;'; put 'put ''ZlJ5SDYmWVskOW4pNVtjcSQjfE41P2hkNVYxdTBEUz9ZcXxCNzt1YkZJWDcieXR+dS5MOipsXilxRW12KHMmTUl9WStrTF1xeUVQLDl0SDkqc0lHVkYoP25zRUEsUkJUXmowOTVZIXlwXld7PX1pLkhbO1k6VWRpT2JJKWFNWHk7dkxnalNPSzxzYlRhI202VDtqISpROld3NTcscGZULEpAIkdm''@;'; put 'put ''X0xONW13Im99amI2VFI2KFtiNmMyNE82dUc0b3l6PndMIVpQcFhlN1QlKHcpdlpuL2Y0UG1pfHFFLkFtI0t3OGBbOTZ9fWhkY35MSEA9VSZ0SiNAUWBvZ2wxcHc2Jm51QmVUcTBOS1NCPWUjRF1Fb3dLYkwsSmU3S1paQld0LDNNQHJuXnx+NUA2eXc4KUFLJXY9azs8M2FyPWk0WyU4QH5eNzZJ''@;'; put 'put ''OzwuKUBmWmhEL2x+QF51a1VdNVdWaVokJD17e3k/MFl+bWdwOS5DXlRgeCohX3BaJjopQTwxa1s9WGsvbCF1JT92RVZLMTNTcikrLmdAXyIhYnpZMjUhYWVvSzkwWkw2MEx2JGppWWhKZV1LMGV2RTFIJGtbLGwoT3VpRVUvOXsyd0pSZG9ffSQ/NmxCRm1mNCwlczFnWXArUCI0T1JjdV4lRCQ4''@;'; put 'put ''NHQrcFRZL3xGMDpCa199UEhwSy89IzZmeE5AbnNYRVoudUgmS2orZ1YoQn1yZzxsYUVrOFs1XSRKaHt4RzRLO2tOO2IqfjdQanYrMzIlfWY/N3p3NElZdjlMR2Z9cCVRblpyWFAiczpnJXUmc0I3QzdiTFlpdkQpI2MjRGIyWVFCYVojKlM/WzQjQC5lRyxRME96bXpecyYhQjhfbD45RX5OK0sp''@;'; put 'put ''TCI9PEx2Vz1FflI/MCxGI3BSZF5SdXt2RT12MHRZeEB7Ul9hOjAhc15McDJ+MzthKy8xXUVMJSg5Rl0pb3o+Zj47eWdqLkEzWSQmTyZRVCs3dEZgQ250TGxBVVJDYWoxPHxmO2Y1ZSJCMTdAVkooRDViSkhATW5COSpNPC49T0VuT2Z6dmY5OSJDMnV7SEVlK1YpNUFqRExUaHlHUXJ+bzkiQyhj''@;'; put 'put ''InMlMHskJm4+UT4+OXl6bWxmZztde0FSa2pBLH5fJTFPcEtpKzJMTm1vYXh3bmM4YEtzWGhXY2Rtcnt7OnF5UF9iZyRbO3ZxTiZMdW5oP2JDQ0dJN2t3OC9sRjl+Wjc6fW1KWlc5Wy90MXxELGslVjMybnE0b2BHMmtmJiNpIUtMTykzYGV2dk9laWAybGxnVStSJCYvQiQxTGhpZzA8T0p7YCEq''@;'; put 'put ''a0FtSl1GWClRYWYxUTUzIjpQNEglZi81KTd0OSwuQSE6RlN4PHgiInJIYjpqQXo/SHMrRX08SCZwP11GRFBERSw9ZGdNaW1DNEpDS0dzSEV9bjtCPD4rTERkOmdddyRCKmlIdWd5Pj5KRSsqNj8wPUVfZzAlejs6THdea3R+T3tKRHUxdmEoO2hWZ1RqVXx2ZTlSYz9RIUgpM1MzKlYhQjkoRHI9''@;'; put 'put ''bTBmX3xnaEk4elpbTmlLcEo+IkNMcVB9YC9BPjgjflNKamVUJDA3IUE7Xj1WVmRkMDlAV1IqblhwOz5yZFZ9d3MsNV5IQCwzSmZeY2ErLll1O1U3JjtBLH40YnQ/eH4majY5JT06MlNJKmtWaXBmRyFOKGZxXjxmVFJ+bHBbX1psK0dpR1tFKVhmSUU4KHZJY1pZako4Rj0iSGYlR0JxZWg8Nmo6''@;'; put 'put ''czNzO1hoPFdGO3FxYH5FJTFMdjNvY0kxKFFBI0goQm5+a3tTNzYyTVJXRkl5SXhJdTF8dGF3WE1qQi87MGRafW9TXVcme3ZtSyJ9TCtSX05ROCFtWEpiZnFnZDkyVV9+PFo9NlYrd0d5PVhTPzZVMERoe0JZQjkhOEglPnRzM1E+IWVIWEc2VXIiSUUsaVpKazU4VG93N0lGey9iPWpDIn1leXh0''@;'; put 'put ''KDN1ZlR9QCxpISljI0diKSt0ViRtTDBxJThvJjM2ayIvQ2t2b2xpKzJgKX4mazByRzNiX3BwIk9rWnBIe3RKL09gaS5CNFJFKF4yWFZhUSEsSU0sK1dtT2pkZUVGXVF0OjZjZGQqMWhUVmU1NXlgdmhxYVE3Qy59JVJfTl8vLkV0PmBTVGBVdSMyXmxBYE1eQ3kxTmpYen4qTkpbQUJ4THx5Y0k+''@;'; put 'put ''cGFXN2pOemQhe3V4OClZW0lqaXVZN3BNO0lOaEUqUHYlPkswcW9pYldwfUBHXkIoUyxTMFQwLDdNRHg9YzoyXU42YX1SSER3RFYhQkYmM1FhPSQuUFslJkZ8d3AoODNjM31TYm5xb0heeENQdVdPL2VYZU5PdFJpampFdTxCUCF5O2Z5NC8xS1JmaXQ+ImcvRU8sOVsmLzlQVGZISyY1SCtERzhh''@;'; put 'put ''OjtXOEB+eEYhUnlTYGhNTyFgITo9U0pFVHp2dnspRF1aZzsxcHM2fERPXXYjUXh4YDA8X1krOTMxOmdSJWtnWG5kaHltJWcuMjBIZlp+elQoUnd0WUs6Myp+eXRsWn1pIUAjYVluKlgzPVJgZyIsYzFjSFdmSHRgRzI8KHU1LlE3YXV7bmkiPFo2NipwcHtZN05GQDgmVTJiVXBycUEwcVJdM1lu''@;'; put 'put ''UjV5WlByRj5nbF9sLlolUDwlUHc8d1pkWk81MG0wLi9VW2Bqd1Bva1NjNyROZjhXNm02SFI+UnBCUnpRVi9sVjoiMH09ZG1jRmRQNDNjYiQmKmNqcm08ME0mRXkpcSFKSzA8Sjg6Wl8kVV5zcnhaPWBRWWNXZUVeO2J3R3xqcyFOVioraEouTG0vTEpWcH0hMWsqWkNmWnNbPmVGVFhCOVtbTHBM''@;'; put 'put ''KnBjcThYImo0VSlxby55Tj4/QyY6LmtmL35taS9QOS47TmYjQGk1MCVnZXpRN0tFN2tSU2spR0hLeHR4XjZZWFB6Ukd+U0s8PCh3IWkmXjtNKG1vSjYxSihtdztpRXV6QXs+VzB9PVc3OHtAUVs8NiUwJHs9eD5XR0QoIStDbjtNfStRO1hEIVFfRHNAcFsjVjdVTlJ4VnNERWUuOC9CJSo3Ynxa''@;'; put 'put ''IzwpLCEsP2IjbFVzUSt4KjZBfDFkRj5vUDcwTHp3KEVCPXEsVjkwYWN+dU9FMDplJX5SQ19TaFo0UWxAR0dkYSVkbjIqRXhMZ1V8fShgaHpePnozaS5ZMD10Yz5NZ1YzbmN4SFg3RkI4cVRePSpDUCwzLjs6UF9TO0YlKSQ5RUchOiEkQzsvaFRJKzhKW3E1YF0zcDomeDYvY20ya1psOzV8UmlA''@;'; put 'put ''bF5ReEdKUH1UUmp0YjtWNWJRU2MlY0wyaURVJj1vRExxUF9rNn5tLkF+L1U+ZnQsLikiY0M4IUxtTWxgSU4jZ0tReD5NOmVHLl17PD1EMzB5eHpgRCFte31WJGU2amRySks/SFhFInI8O1I7Z1FzUGpUKWo9UW9jNVsmYHVnZ09ZUnw1Qi93c0FiMDx1RCQ1WjxGZXxmfipeLm5iWG10KmB7dlQs''@;'; put 'put ''XllIKHJnZlY3SmE2Q1RXITcwM11HfEtdbzxtXXAqYCUpPXVxRz1VUC5UeitKJCw0IjA3d0JPe35ibk8iLCYjRG50THx1JSVaUHpIMH1GaElXeHU5KXVGa1VUb0BdKkhIP35HM3JyfGZgSHpnLGE3ZF1QYXpVZjFteCtDeV81bj9YNVpMNFZxImBlPnZhS29UZDllKz17YHRHQW0wMFdEZVFFJHNL''@;'; put 'put ''M1Npb3kpLE1tbXhIUjQwdH5xVH0ub3lyNS9TIzl0QUJUeCxkKztZNkRWQEpRZldoWipdZmU8LEYsLHR+YDxYOFR4Ky5sZHFUKmxzVCJ3WCMyYnJlYmYuRkQhWTphNHohajBEWjpsNENGR2FBflc9aSp8cFgjRyFhXT10akZxXm09SlB2PCpVMGBGYzFVcWdCZjMxaFhXMCNscDVfZGM2PTRtWF96''@;'; put 'put ''cHtAbnZAYCNmUUh2bkNma0A9IiQhNTZlNEA5dzM5MlJrKENieWpLfnd+Tl88Jjx+aUJPW1UsR2Y1Ykd8SHZCOTlPLF8mSCl1bTY9NVZCIz13Km09JVJRTnpDeD9PKHhEdnp3d1Z9fks4RG5CbnhFRiQ5Oy5vUjtqfEcqUjBQTk9RY2wqSS4jXTNDRmJPfiIiNE5URndWMDcoa2thMjQ4UFghWTp1''@;'; put 'put ''Z0haR3A9SFEyQzYmfT4xJlI8Vy9ddlFafCIveys6dEJeMmN1NUdzW3IrcHV9OHUwez02N0R2d117KHBjSUlLMihMbCk9d1MwUnlDJCphYnBDOGdRWz9uJnR8c1pNTTpZRTEuQWdKYE97Kn1APT9SO25UIXx1JVU0dl08S3NrflB3QnElODs9Llk1WG8zMj9pVUd5TFk2ITFyZUV2MkxEWUB9bFRH''@;'; put 'put ''RTJhdSU4dFZJPytWPyxHXWNqKkx3Xjk2OnJmZHRUaVZ7O2dZIl82PXREJFkiPFRYMkpXbC9gJSxjVyJDQD9sYVNBTl5TSyxJRUdVL1VfMEBiaS5QWUh0YlRJWFR4SlFZQlddI1lVQGJGWkJ9MncpMUYhbXZ7WyxvTEF+ZHhMTyZ2VmVKdU4vPDEiX1ZJYDsldl5yRUI9RVZddDV5PGxWRm5vNEBO''@;'; put 'put ''Lkk6eTJrXy4lL09sOU1aJjRGZTt2IWIzbHhNZz11X1F+Pi5uW2QlY3pYQVhgcTAxeFVbUTpZTXhya0Fhe2RlMmJVPG9tTDYoIyFGJmZ5YCF1bSVva10qOyUrdGtiKzYqLG85S3ZON29lV0VbQkkkZT5FMkM6RXNjRkNyWz08cjgjRFRISXE4IjxKdl0ucjdlajtUXzBwLko6eVdTbDghaWk7IWVs''@;'; put 'put ''WGpITzE7XjRkJSZXWylefnRDVyYwa2FUdEJ9SWNpfmkmKV9pYnopLHg4b1NsYVNiYGIvV3JSb2IzXWxvdiFseUI4KmtTfXFBZ2UhWjQuXU4mZ001Izt2RnV2cjgmdDhSd3Z5YXAkTTczUEJndnEuPVEwfmpgRGdeKWsjKXkkO24rI1pwWiNNODtaRDtlKEJNOFd2eSpEZCleeUY3MDouUCN+dnx6''@;'; put 'put ''d1VGaElyeEU0VDUudHx8SlVzJlUyPFt9S2dLYVNEPkJHbDxTdTYkc0hzWnQhWVlAL2F4Uz9yPVApeFswUWdhWDdjWnZyIV5SdC88LmVdSmN8cUFkdWE6YTNBbHdJOVQlRE44djlWSzhlYS5xPDRrMUJdekpZMGMzKlBYXltISkl1KmxfOXBlbk5DS0lkLFcpeXdZSjRgaH1yN35CfCVEUktdeWxW''@;'; put 'put ''cXVVOV1VYCJ1LmZsajFZa3F3dWZ6PExfXnspSj59Q2AwLy4/TlZoMnFqXT5TKUA0WUIpZU5PaSYlVCpdRERoWG0qZGZkdjNJMF94fmolLGldNng1bHUyLE1uSDdQRGx9SjFSaSptPClPVEFgLmN+QTFSJW8uaXc/Inw2Q08yaXQlUzQ/QUc8YSlyTF08I2dRUmMrYkpnI2MoN0RkPGRkbilAcE1j''@;'; put 'put ''STIve3hWJUdYO19NO1ZafWxBflRpOEVYT3w7bWY6c0dRfEU7QVJzQGdTOFdve3I8dH1Qb09AcyhkRz5yKE03ej1MYyl4Mit3MX5DcV84Pj5aTHowWnJrTU5afDUxSmtUfnZ4VHIycVZKXSZTRlh9LiosJmZMVkpxOHVGZ0VfKHxpTFplX3NMKEQvOTExUXl0Y1RSfSU+IWIsSENwc1NbVFI3bSlE''@;'; put 'put ''SmJuJCEuXWFOYlc+a3BPJTI7PXhxKFNeQEAuYTZfSk5PXiQ2Wzlqc2t0QixCSmkzSG9PcGVBKkt4KmhiQEFLPiJCbDFXSkpIL3BPeV9WYHJFPHRPPDRaX3NPeHMkPT5dLF9fXXY3b3tHO3soSllUb2QrbTExfmdnI2FhSFcoe2Avc1l5S0RjK1dlb11jSCQuMVBSNGV2eH08InpdOGkrS1dXdT4o''@;'; put 'put ''MEx1dyUpNHV1THpYTXAxRUFHem1uUjpMTlA7aTZCKFNdKT4vaEh3Sk03TWhBWSxMIyp8fHBDKi9AemNFY1oqL1tLUyFOSTlUNVNUd1RZVWk4OmZKPUooNjBxUD0pbF59P0tJMUdjMTVVJWxnYD4jYT83XU5QKj1NQT4ub0JQYSllMmFiViVzOjJxX1clVWNIXXtSKkAlSyUoMzNLYWgsUVkrKipO''@;'; put 'put ''dX1zSHczNjR2NWt4LFAlYUIjYzMxWX5HYTd7PU5mWTZPKFcyJWtZeS4rYDpTLE4zc0JPTyJMIVtEJHE9dlQ8IlB8QXpnYil1W1BLdnlIQVEqVTl7Ri4sTiYvdjRNb0F5Oz1XZVI3cy9GRGlVPVksRH4zU3pta2JWbl95dlVsTlNvXm5wbl5ieWhTeHxRZXRAKTRGKmJ6aWdFcCR+WVRvbmokfCV4''@;'; put 'put ''XyphNFI9MmlFe2ksb0ZQbk8qWztAbFZpciZfPEtGfU03SXNqaVRdU1p1WGNRNXA2KiVHWnhARTJqUlFyViNMZm9IV3tlUX0odjEjVWVBbWxRRVtvK1NDRVZ3VT1wTClJKF4vRmY+U0Ndc0tNUWUsbGBAOSMlV18+W3lMTjEzcHZ9eHk7YXF3KmAoTUxnTj9keSVqWlM8Jj9wJTQ3cy40SkMkT2po''@;'; put 'put ''NVE3M2N6XyR9OTMjVm8yZUFpdl11MEw0aSI5UH10fSR5TFNaVV8lO1lIP3lKdHIrZFV6V05HT3plI0pBcndPaUR+eilkTFp6eT9tYHNWZEhWXX1kXTZXP1lXOkQxK3pGNFZNT05JQ25MWyxYbnZncDBrZEJ7LlF1O3hFcVUlfiZeWFZ5WWQ3bDg9KHt4VkZPdCVmKSRIJDJEQ1RXaXJaQEhPVUVA''@;'; put 'put ''NF43YDJPezxicVcuIVpNbC9bVTB4MWVfNm1QI2RSYjJwOFArI3xiUzhPRV00Ty5GPnJgQTpKZHlTU3E8Mi4uQTV4WEskMlVadURAISl9bDJdZk97a11hRFFgdGAoTjY0PGFRL3wqUG1hdUA7dVdIUEw4U1JMN11EfWNQMEclWTlOUG9pRWlvKl41VS56YjIsXWc+IytybmZVe1N0YVFtMkVjWE9M''@;'; put 'put ''dlB2aCxrNSMyZCNTYGsxIX1nUFolRlYvSSs2OEwodENAV0hpIXghSjRuSiU2e08zTFdAPz9kPjl3OWtFWVpBdSFhJGprZ1hELzhSX3hwRmdpNkI1fiFlTTUxKDBiKXVORGc9W2VUNUtXd2tkZltQPXVdKW8mNkQpWV8jRXA7NEFten5iW0U7W1B+Ym53JWc2WWNwa1VEclthJEo0Um03Kn43KS9p''@;'; put 'put ''RUBJezNyKmhDSzA2eiI5YVd8dy8sNVVXMTZ7RU80fXJWYVEySTIufC9gYz1OYXpIWkJDS2p2L11GMlJDfVQrfShDYCZhWi5tc2QvS0E0WDxBXm12QzJNTklgYD59KHFDOnEibnhkPkNBaCh2KkhUX293dTUuaS5XeXkpVntTMHkzLEdqdjJkRnJPeiNVRF0zbHtwbjc6MVswbytINUlqUCgkIXc6''@;'; put 'put ''UCM8NE0pMkhNXVEsNn1oZ0EhWF9VMkRXUm86aCw6YkVkIz52N3t4TWx9ImA3SndXOmdGNkZvN1hdNFUpIWdDQ0UpWyExViUoJi5AbzFpUyR4cD1NYE5kYmZxTXEvZyZTSnV8YHhOO25hd0RgJGpTWCFnbmMoTzBNQj9UIiFaRTZwImtlYXtgbC9CTkc9bHQ2cWArKipsIytrREBIPmshWHZVcSUp''@;'; put 'put ''PTV2XlFrJTJ6MW97d3lLfDtjXmBuZSgwQ05pZFR7OG5ENTUrUT1nalI9Ymt4YyhIR1tOc3JffGMrdGomfSZaI3lDSih2VUl8V0d7Zl85Xzl9alt6eFs0OSVpX2JDT0lQODE8KGdoejcrSShGPnVeV2R1ODBoWz5KVGY+PTM8JD9rOG9IOFI1PCxPPzNSSWc5bGxLQ1R8ME8/VGhqTEw0Xk51WXxl''@;'; put 'put ''ODpLZVNOMXhNWnl2YEJuOWUjOFpGNzxAUHBEKGlna1MuPm09cS9oWVV8JTM9MUVmcV5tMnlnUj8+cDY1JkBqQHZvTnQsOyNiQ2VWXXZGbn11ekAiNzB5KCxvdFluSzdYeD5KJm9UUX5XKWtoLEReIUZmTSJbV3xsYC8wUHVSfXElSCQ/PVB+TmJ0cE42MzBsX1heO3U8KzNvU2pIWWR7LHkpLkFL''@;'; put 'put ''U01vITB2dkQhLHchNiVjX31pTSRifE1KTHh2RmZAN3Z0V3k6dD1AZ1BVRTU2fUAucUM5RDtUKj9MaEQvYygzV09SYFIxS1tkXUplKyJkRXlrV0o8ZThJYDB5NVBMMV01aXIsT0ArS055L057OnN0bFBYLEtsTGRoXTtXUUZyUEFWTF5YJlgqQ3M0VDoiRzJXeShjeS9gPGRKQFV9JGx9L3Y6RHhu''@;'; put 'put ''OXxAbCozZ15xdVh6Nll5KF5rckVEXkAhSHovW2ozcz97cD0+MD19aHAjaUspJFBXMlg8YkxHLk5nfG5uNFZza19JIlRIKlE6ekJSUG95d3pbKSh9d1B+aD4yUTxNRVBdNko6M0FOLHJlSkJaVGIvaklmZUg2ZHtfKUVfeiVSIzlpTkZYbVJ7PSpFbUZGSSlRZ1NMPj5OZG5NT18zJEJKdm1uPE48''@;'; put 'put ''eGg+XWI5ZVI7RGB4Zm1zY1RWe244Lz5weCFUbTdPVWEpdkZxUyJrUmYoaEtoI05nYVt4QFYhQHZdLFNiJCFXLD9CTnhAUENwTEt8X3k9b1liIWdedFcjejY+ZyUmS0RWTzM/UkwoeDZWa2ZLR0trOn5yTHxMPjxCaDM0XnwuQEhmPWVjKV9qSDlafl5WW1t0RzdhWCopOSxRMSM9WmY3TmN6M1BD''@;'; put 'put ''TG5GOkpjQltRYjIrX1JDYj1PenMmRDo8Z3VGcWYlc1I8fXVVcTFEXWpXamMzbyVNXlNiLER8XlYkL1YvPXdjKHJXKn1PdlN9Pzx4VHp6U11zbnpiTGMwJmppM319KiZILFZMN1VtSUJVQUlPaDkzZCRLIm5RI25HNzZZd1AlaDlgS2YieDE2KlQxK35lbGtdUHIwJG5IST5scnZXI11PISY4M1pA''@;'; put 'put ''eCFnNTdQd1F2aHc5ZGRDeyUzYyw+b1tbT2AyMTNCKnZDVGAoXkZ+TTw7XXx5JmFsI2VHa0BZb14se19lQCh+N1s8K1dUK2F5dzt9a3dhTy9KUHxkMVN5WVleJF0+fUosPmVxbzpIU3lfSE06TjxnTEs4aG1MR3JfbHRGZ35LaHNKSnM4JHhwWi9FTWAsK1R7MjF+LzF6Kl5md1FHc2YmXXora3xB''@;'; put 'put ''XTA5PDdASj55cCp9OHJkaTREeyIzPG1JPXhGY2JLNytkRz5wZF8hbkVSJlUwfkFiZihsV3Z7RE9tNm5jQDV8aV5JLnZAUGIsbipkIzsme1U2aXUwLiNwdzZTLnJsc0xuckdoImIzUTFXdnFwSz9mP1s7TGlre1NvZCFCcjdVdjB+USxtLE1pTlVFLFBYenNlNHt6dztNLGU1dz9HRz9KOSZVVWps''@;'; put 'put ''ejp0UUl5IlVOemxLWnhmX21WU3Qve3l9WW12d2w+cHZZaG5DQ014TWljZThIa1pjWHA1aWhXbVAySCo9Y3JvTmcxWy8vXT1KLkkqNSQmUkBYe3JRc0BMRGR5InJKe2tmaE14Jl9rJDtGVVNgdXpNRXBvTiwvMDpWdn5FUTllMj53Lk88ek9UXyFpNn1+VWorYm0wQWs3Rk9qbTU0fkRjWGtkZX1f''@;'; put 'put ''a3RwS3d+ZF0+aSl0Xi5XW2ZeUlUmfntORTRpbFdeO29RbzRlJFEsfUBmJVopPDs0RnNGfihXVlRhOHhfayU7Jkc+LkhQaXolR2BMPCIlfX5MWmJOZXIsYjJjWikxWjFrc2sjPH5wQF53fkk+TkQwVDtIImglPV4vditicmIkbztIWmsvUW9YKDtgTV4xai8qekQrdUA1TEFFK0JOYXhfI29hQkt+''@;'; put 'put ''Sihycltfb00rKilIfW1MSjk0UGc7PCRXPXg1W3UuW1d9dm1YXSxlIV90VXEpd1Q7OWx3aVNfc3o0JVBrL0hDQy9sPX07fShXOD1KfGc0KX5MSl1PQ28iaUdvd1tpVzgwI2k0KWxZOERiX3M3RyMrTF4ofEpkY31mNlhhLE4wVTYyQlppNGM+aEMwbWFQUzZaS3pCQ3VZYU0hc0gvd3ldcXJPXUE4''@;'; put 'put ''UFMmMlZZS2NOUy5LKEQyMyxPLFI4NntNQytgM3NEYUhQTSV0UTpKQk0mOTEvJFhkVkBEfUZ8ejxLNE5GSzA2IVgjfVJjKm0+UzVBOjB5KSxieFMlO0ZCKHV4S1VJRFlRS3hbc0Q1JHlRTGBJcSRNVz1GSCI3Pi9HKnMlXVNuX1N3dmRpQ0RFaioubUYoVTVPOn1VYCFePWRdYCw3YUNmSlpOUyl1''@;'; put 'put ''QUEkak1LSkt+N31we0xDW0lNQ3h9dlMkNEt5LkFiQVNrRCFUQUx8Oy5hd3N7KSV5RUkrVksxJkVFKEYjYWg6Mm4lMGs8JGlofW0+UGtXTi8ifSUwLG5dQzpYNyRgQzxNMGtUSG82cXU9LHNIMCpeNF4jOSRJaFNSYCplOz1GYWUxRThPVyV6WnQ5O00jKFk+JCY3dikqQTM6YX0ueDFuTEBCUV84''@;'; put 'put ''OGpjfDNfWSJgM199YG9JdnlTXzlvKnxsTlBYeXo9dGJodCkySEchKFVOL15wSnEqMShIXUwuLF4lY0BYZGdnOGMiS3EyJHJicTRvZ2ZweShoRihzQlFHSD9sVFROWTwreiU/SGwrLCZvVkkkM0B3ZG5rTk9JaF91JXBzM000JHNIakRaM3Fnej5TP1dJTG53VVsoK3BXOl8zS0coUUFiJC9vOWt7''@;'; put 'put ''QTRJbzJ3bXpCTj9JSER2QW5sXzl1Qyx9WSIpWiIoSiVhYmJ6di9eN15dcn1sKyZJaj05OXJKTiksbDxpXUdXQEt1SkBzQWBtdnZuO31vMj5QMUpAJlF7VT9mUEliLHApPmNja0FLbWE9TjtnenZwMD06IkBNST9dWmkqLzpzNS4rZiw1I2JLd3hyUGRQZX00Ik9PdSJPXix2fkp0KSxYXjE5JTBN''@;'; put 'put ''YEhQU0tIS2MuQXpWcVVqR2hiQWZ2fnxqfCR0bmBUWHVDdW07d25bfVdkMTV2Z3F3NE5iQkZ5VildeF1BTVFmMy9XdldPemxZQFQ9Tyl4YFEmX29+WmQ4WltFM35AKyZrIVQ4YCRzSCxTYkBCW2Bbc09PVTx2aDxoMFcxLENPfFdkPk0+ZEc2dEZZNWxaPHRPbyo+U2FxMmJ1e0Y7UEklfDJYWHNC''@;'; put 'put ''MU1kLyQjW013R01RY15JQ0VpaTtULH5UYkNlL0RmYE47XklTIzdnMVZ8Zix+eTZkNHU0WCV3P0owMnBxUXk9SHZDZj5JVFY7I1I9aC9mMkZtNS9ZI1suUSo6TjFtcDlBcmNtYm5rKGRJeDVuUmEoR3FDUChCKltRYnBnXmRGKlp4QXgxRGpfKy5bXW8ke2plfENBNWE9ITFSUFBlfF5lWjExZSJs''@;'; put 'put ''RDVeflFlQilCRnh3WlFvRVFxdlI5WlEpVjtfLyheXXAmPCNdPmMqcW17Smk+KjEqUnpFSXQse0goaEMrYHZOISZmMUFxbFFrayt4dmF1WyR2VkNEbCVCR0s9UWQpWktvRz5sYClbdCl+RHNoW2B+Mjo7NndpQVh4fmlVNCpzLCJ2ciMobyZnTjY1dEJJdlNMMXs5bWdNImVYajczS0tOQFN2Y3sp''@;'; put 'put ''a2RjNi4jWD4hTV0xKWZxZkE0InhbPmliLjRzTCx7RjV5TjdmRGclOXZJR3tSRHhAe1ZSaUVNa01Ba1lCNn5YODppJmk/JTBkNUJ9c0JQbWJ7bUgwNCRONXk0TCQmL1hrVUx1STUsNVMxdkd9WVdlSVB8PG98aGh6c0VkJE0rPCZnfENgUmAoTysvKyhgM1tob2V0cC5td1M1SkFJeGhTMlVVIkJi''@;'; put 'put ''SSpRLkgmYVVIQnw0W0wqT1ZNa10lP3pmaHdFRF52WFJJPmk5dUNRVnhGaiRsUE9hTSlvVVR0dylEU3wvZmBoLFVpP20mNDduLiQ1c2tHSGhJRiUmNVNGLkVuSElhfEdqXXFFekZSMio4Mlt3Rz0lWFNgeSRmdzdNKTJONmRtcUJQRkJIciI4aHdbW21dfXQ/MGwrdU59MHV8Lz1TXVI1XklPY0Ux''@;'; put 'put ''PndqdTxdR01nOzJdcyZ1bTg/PUtqJDNlT2RuWCEmPztja110P3ZYP3V1SHN2ZzNKSntUbzssNz9nJTVDQkpOKThCYTpIWyRfIkoyNmd8WjhCMi9xRT0jVEJ8U2BnQHNvKVNnOkY3VzI+ZTBAIl1pMHlpIk1yIW9qJVM3LEwsKmk/SU1yOjBpMXdGJihUNlo1JWhbalhONDA6fS9kaVNFdXIrJlpQ''@;'; put 'put ''YyhyIkdEWzkqWT85X1g2e018MSVwIkllVF8kaGMvIjgqb3RRbVYlIT9bXnltbGc+dDRRSFd0S3EybyN1PjU1L3dAUiNUZXt9dnJEQXJsdk8wWlpWeDEqQGEmbn1QbyhUJD07NGBeek53bUNfQl8qfTMlPEZnUls5dWBVN2ZZcmh6VjZKc0A0a1FFPVErLDdUeHk7UiJta2Z8PDBrOXA9Ol1iRylS''@;'; put 'put ''cWMsQj55Z2J6eihQRygoeV5qMzI3c1s3Olg8SUZqUT9bcVcsQ3QsflVfYjRJYj9USmBsdzFESChIIStXZEkoYn5rSGJ9VTVCRixKN04pVmwqakBpOSUoVXNFXilsfn0pVVBeLiIhYy5nWEEkWCpabFE0clY8d3QkNz9VIi5Bc14hW0lhWis5My8qUSsmeXBqdntBST9rR050S0FLd0ckSmhseSUl''@;'; put 'put ''Zj5qM2NAJXd+e3RHSVd0OzFCdTtjOyJnKHAmcTpnL3o3W1lAaFVuJEs6XSlfLHBed3A5REJPdWdmSzNGOTFMamQvRm8qOl5CQGtqU15HOnA9bTV2e142eTxtYTdbeSFrfGRMdjR0W1R2Oj4oNWpMLndNKig8PExAaUZiT1dzYTM5Rn5UP1R1Xy5wQF9jIiNmWy5MMlk7O0h5ZCEuTDM5aHpURUpD''@;'; put 'put ''Mi51STBSMSxEI3VeME98blF5RTgyYWtCSWk6ck1FW2wxeTdQJlp7aTtpe1Y6cXZJY19uKmhXIilZTGNbKS83YkpOKExHSno2RStiNE9YTXhAVjB4P2d7c31qLjF7Qng+SXZTblovRS80bGBVTkVOQmNTUjVOZVs4aS8rKHxjXShQYThQI0RWVHw7PzhVQzgrfDkyaGE+ZldqeE01JTUuXno1YntU''@;'; put 'put ''USlSN2BVe3BsLkwkbGR0UllKdT5sOFdHTVdPR345ZXVlPUIlb3pfaWMzYjBkYEJZSmphPHYrPEAldltFdlJPV2h2UnoraXNhLGMsQURwUFdAeG5Cc0J4YkBfR1lNfUopblA9eDI0IyIvL2ZTVltPbWpDd2QjeTluMjZIbTsuXyskL2xRQF8kXm1WeyNbSFZddDxIKSZgblZpUWZUIW9OdGA8UVtp''@;'; put 'put ''e0pua0ZwSV1qIkZ6Xm4rOEhsaDg2VztfW1o+WlhyWSkwfUxpRSRDI2RPaXZsTmU3KCo5X3BBL1EyNVtOIi53Zj9uIl1JUjo9TVMxP1tFNTsqIV9RNGciYTtdcjMvMUZfd1E4T2wmaGVFLl42Rjx9eEE3QXJGWkpbJkNEZEs+R1RNVnYscV98JFVZL0YpMTB0TFtObFF1OlsuMEZwfCk/dF1xNCJF''@;'; put 'put ''THZaezNGPXFxa1dIPCJYN3ZbcUM6PTRqS3BjdTxiPlRQJiV9TiFVdm9gPjdjX1dfX0BDeXFEcz5zRVhMZlolMzR4bzZ8PUcqXmt3cTQ3XjVMVl1lIWBvfGQ9ST9ER1ElTiosPmNHZW8ueHE6NExyZDxLTHV6Z2ZEQEpVXy9udWpGcC8hbDspXWMvMEBwTFJCeFhQdmREdD9Vc1dTe3Mze3o5ZWxx''@;'; put 'put ''P0tre09UU0V6dX05JHckal1kR1Fefm9FNk5QXSJVflk2e1M/W1JiX2dWTjZfMSNrT1NgNzNYcXBpTWlSQDQubnpoK3lFdl82ck4ycVVpfHF2OHZ3Xng7MHFbLiQlIlImTj9hQl1UbDFTN2o7fHZocDVxYnhyWy8pW3RFbGo+eCVSOUMxSFNvVlZQbURMRkVlIzpkMXJNIyhNVDciRzluSlU5dVtG''@;'; put 'put ''V3t1RCF0emV3PVJPbnFLLDAzfHk0YUJoOXppL0VRNWRuWCJxRkdPVyJ8TTQzeHR6a0Fzbm40PW1reiw7XX0zfDAlZnQpL008ZylKI2Z2Kmx7ezUxXThMbEhNYitpcCw7eFA1eTh4XW1eV3hJS3hSLDBpJH1pJEU9eERIaX0xRFcqJGk1emc6JE5JKytRZTFoLFBTOVA/OEF6dTA3fTxiL2kpJHA8''@;'; put 'put ''WFoscU45WXNtNHUrRTlnKzB8RFM0fDtfVkVoSz1GQmkjLksudkFGWnY3NkN9WTE9W1h0TyRpPWY+PCZsKUtoTU5eUWZSTXltI11jMDNQVCE3KmdYdENyS1FiWHd8JkB6VjRhSWNMRXNIfHZMPGh8KWBxLldiZjklJnNQW1VMM11SUi9WPkA9QTokNElta2V7Tm5zUChHLHV3YUlHcGJOPTRgdlF7''@;'; put 'put ''XWtOJmJDPFJtP142KV92YkRGSDFxImJSa1d7WDBdYGw0WTomajh7SzBlQkRaX0t3V2J7eGgiTHsyalFkTS8rZjMoUyl3QDAvb3hHT3c8VSVKNzNIaW1mM3ZfQyZybVlxT35HXjokVG1KOyo1OERuc05OSCh9bzspKlNydyVsWkg3Lm1zQDxEbzA8LDpOeEVZNF0qVyJfOUU6ejlXcj1RZy9iJENf''@;'; put 'put ''cXJOTnJmMkZvXmYhKllDRlZrRHdNaTNKeU1iRzArRCYpKWllZ046aDtZSVFgPUZuZm1TJVR6THtkPTdEPXhWQGgmUSRPajpwXmN6VUp8PDhQQ0R8JGM4Y3Z8PHQ2UzNxSm87TT46eDdgQmosY0xoYE87e0Z6ckFYS09vd3d3fVZNMF8pVUIqT2IlKn0wb25XP1dbSFFMaXY4LFlsIzFPZDIrZ2M4''@;'; put 'put ''LmZVQT9SIWI+ak0iLCIyTks6UV5bUl5mVlBIcFFvX3o9JHR1UTM2cGB4cjB2ImQ7WUQ1fUY0MEN2JUlALjJLKzJtOV8/ZGM/QmcwKU1LaExhUXE+T2wuYFsmS1smbSVCOX41LyVBcD0oQnZPIWhTXzgyazNjZDNVKE0jaVRURy5bYS5SUDhZMz1PMCY3P2ZjbzVye244SG5KVypuLEdoK15gIz0s''@;'; put 'put ''V3g+LGFGVEg9PCZ5VjMqPDN7PkkmSy46OTx+fHhbIiR3OW17TTcoJkNWeWE5P0B6Mj9ifk18JEoxZllASyZIO291KTZgZHlOQThQeENeQVB8OV1fQXsmZTtWMmhOaEZlKVNwQlhuMzExY0RIQj18Ni86bng9fFBTUUZDbHQifmpSImU9PlFhPkpgTXBVLiFlUVdBRT9KZCVRTVk4bSsxUz16L2wx''@;'; put 'put ''dG4xZFY2cVo6Q0FtbjpOOkB1L2khIzk4WT08UUBSY3R4b3U8fn07K1V8clJaTCw0XltjbUIwPmR5MGZoV1dKQiNYTnhCIXV3JE11QVZGeHtpNHMqdipKaXZbdWVpdVtUbyNXL1VUfjhYNz19O21xR0laLyNLYllmXXMvcFlQU2Bvc21McT5QXSVFbVkia1o2TUZRdip8ITRidDx3TzFIQjh1bDwu''@;'; put 'put ''ZFowKXFTODhuJVp+bU1aLiI+LE1DODk4cClaW0l6R0Y4fHN0S3Q3dFU/aiZbKUo9PkxTZWEpKCxgdy8rPiJtXWVbZEAuKzhKe1drRV4meUdrIX4xO2IqUmM/SjJBKXE2MVdKMWZPNjt1PndGOWlORiFDTF5YRTNIQ1VdKnRJbDEkOCtAYUBITERGTmZ3X0xvRSJmWj1YW2MlUE9AM09yI05aRkdv''@;'; put 'put ''Qk5LPUppQEdUNioyPjNtR24jX2RCPCYvLnIqZXN5SzxTfV59TX5GW2prNT88IjY6bX1Nc256aG9qIXQ0Tlg5fGhgUnVHS05BaFNPMl0pRDs8T21Tam9raFI0IjdpYXQ9cmkzLkR7KUMiZlJ9KUlAfSM9Zm5ifkNlXVBFbndzcCNVYTRiOH03X0RpM2NHeitJcVl6QUJfVTY8ZVprPSVQWFtWLkJK''@;'; put 'put ''MnVzPXZ4W1JCUlt8NkIqVS5laXlibFBofm5gdiliKGdtPjhIMUNBNDVee00uMkZJSE04Oy5OSXlUVCE/XUlDbS91WCRkMm9BbDQkKWVXXVklemVjIWUqe1YsdihyJjA/T3dxYWhEc2EyYmhTSyVrcCZRP09oS3xBM2VBKiI5cjdBbEBIKFZmRTd0bHh7I1lqaGMod3NZNTlbPV9uRTpKTGVCekBM''@;'; put 'put ''OV1mbnVSLGs+YntnPkw0S2xQQjVeOHF0KSp5NCJ0dHdVdj45bzAjU2okOHF4W0lgRWRiZjlYI3ApIiQkXzsvRDd9TWpGO0ojSnhKX2NDR3U5fiszXVI3Lnpsekd4Nil9SWhFVSo9N0o/SFdmQF9tZnAweT1XdUI1blAifWtMaTFqfC5VQntXREVPdChral85YEE/LG5JZzx3P1ZUMDcmailqYU90''@;'; put 'put ''PGpqUEUsRGJdWTttMUNYfCE1Knc0YWc2TX03bE8/VlVHSnNwMC5vKHpZTCgiZlo5TmR9b0JFI2lPeSp3RzI0ekZiRmUvISN5JntKSFYqdW0lflJFQCFMcldwW3hGeGslY11ba34oczA7T1YlIkNbW0cyc05WPz0wZixRRzd8IUcjJSVwQmtfeVBeN2diQjI8YiZWSkhYNDwmPEN0Ui9hYyhGNF1W''@;'; put 'put ''Y251M209Tno7aDp0OHc4cWhoYTBzPGZEW2hHeD0sPXA2NGlhS2d5eXZ8NTxeVWRLLGhBXktTOl0xeDFFWmlCSHJ2VSV1aW9fVlM+OGx2YSVfMmJwfUsuK04sQG84Rz1GfjZkVUx6RXJjYkR3WjNCPlMjX2xFR1VPVH5lU2U7SFRhWV5beW82T3dIJGcrYTY5ey9YLCoiKTsvKDZxRUQ4fXNfcihH''@;'; put 'put ''S3gsYnh5VHx5MWNdMXhJdkdPYzpaUD8vLzFhTDF6bWwyTD8hVmVmYGpQQGIzMD99PyhWSVFBYlYzXXRqY0pCMlNIaCM4Rl5pLEk0fWp+KW9DRjt4dUsqeWZvXjxGIkRYcVdhVGBfT3d5IXRSOklBanlkQG4qVyhkfF9iPnt5cjhRfEUsPjwjWmpeTjxNX258ZTRVekdTJUpYQnRRVCR2MEEidjUq''@;'; put 'put ''QixPSl4mdyZ7Xj5XOyw1OCR8emElN3RpIyltZyRhP2l9O0xpSWJ7Z1RyWGFiNz04JiRPOXQib1N6YUdCXVgzUiFzZ2IxQUdtQk9lXWJaWng9QGFAU2t2YzBJQiMwTndDRT1aVS87Ly9TNmguejQzaz9YUCMkSns/SkojNjpgLmt8fFI3Ti5yLiMjSWg0SVRNX0hHVFBxOSVTT1p5bjheTygkeXwh''@;'; put 'put ''ISxbP1JfS1d3NUVbQ2h4P15vbz5AVW1YaF9Sfm1kY2NOaFZhPDU+YU4iJls4ZlZSKChTN0l8MXpPY0FLOD5BLGZBd00oPShxbihLR1tAQzU1dlQwTlREJTVFUng4OHAjUS5SQFtQPDQkTkNgMyNrWmBUVkY/W3Y2fn5oPiREK0YiT21eMENgMWg9e2NgblBIcTE4e3NJQ2EyNywoWz44V31Jfk0/''@;'; put 'put ''fXU8U01zRSliTmJeVSNoWjVTPXptYHRbfHEzJW5vdldRREVVKnxLZkMwI2l5K05SekROeXl9R00xR3pAITg3O05eWEpNTXM/NWIxLDt5eT1KdVomcjJNKUxWWSVSI24kLEUuVVp4Ind8KWc4Qyg8WFswaCshbWE1fVQpe1FsbiVsOjdIfVg6Z0NJeWMiVCxbKXxHKCZxJFtnIipzRyFpfSpJVl1u''@;'; put 'put ''KHJ5eFZDVm9MWitaImZFb0c1ZnUpQ3wvam1YJlshKV9wcGMwKmwjRUQmYmw+KkhMcndMZSYpXmlaVXxhPS8/MiJEbTddfVFqdyh8aDVITXNLRz1XdXhAczZsJUJrPGNgeXx6dGsudnVXQiVaM2kmbHpNMjt8JGZzUFhoby9sY2kyQkx+Tis+Q196KmZDQ1hNPnErRGllcm1Ve2JeTlIqWSN7NXc8''@;'; put 'put ''a31wcSlQSD9aWkxNfFtGfnQ+I2lYTjJmclppdCY4diMqT0QkeE5xNC8oUkRkPChYVnQ/dzQoSDc9eCV3USpxe1FgckAmWyF+S3YhVHdBLjBhe18iJXZOKl00QDkpLzFiTjV3ZWw0Q2l2KzJLamUiPWdycHYpd1Vfb0g+M01VLFI1UU9TTXQudCRvJlZLfkc7KiYqPmxFMl9DdW1Rd3lTZUxyInko''@;'; put 'put ''UHtXfEV7WDdjPyU4cm8iNCk1VyRhMUJKSGEvb09feklzJmRSenwuW1pERS4rOSxQfFdNVDRkfjpQP2toejhed0FYVnF4SCNvITYkRzd8XWUiPWh0OWs0SGMmNFc+OGJKZV1HOWRSZUtyS0BQb1MlYGs4P0FmIWNqZiV5NUV4bHEsZ0MyeF15cjJ3bEc9L3t9K1NLOXVpelolNitaTCp8X2R4SExE''@;'; put 'put ''b1hDISpidHxfPWgkaE1qL0ZvclZKOWc+dlA+VU5VK3IsWmFOdW5QK1ZtTVZTLlNDc3VfREl9KDdWJjJSMFNye0xlVz1oOn16WitTN3tHRFtWTVgrJV8veCkxYW9vYn5bSTY6RVNrIUFuXyM7WWMsKiIvVUM6UU1dX0F6QkVOTSgiKjtCK2k4NVdrL0RDKjUzQT84JTAlUkx1RyQ0WE1gP3llK0Ap''@;'; put 'put ''Y1tSYEJ3LHI8UVhYVVE3S2I2bUpsOlFxOmgqWG4zX0lBRlopfX1WfFRLLGEibG9VRCgzOXRaPT90RWw5KCVqUUh1Zis0T11eaiM1SnMrS1Qvb2xMVnNEbHlkSzJGP3MlSFBvfTdLSGYyZHRAPyJCbnRiWChLb2JlZjpjSWBncEwxPEJdekcmX3l1fj9gaDhXelRKZSxwYT1HNkw9NzMkVy45S2Rp''@;'; put 'put ''MyFmZkY/I1tDc2F6KzhbTjNuR1B5dyxJNHhoLEpBRkpecG1bd2tsfEh2OiI4O14yLHsyd15pRFpXQGNYc0Q4Ik8rUz56I2NOdW4/QCxQOjkwdkdbeTclOEBNOkIjPHdWPjF8K0JMY0xfR3Qkb2kxY29OMWEvdnV6Zko1R3djT11pTlZVZ2EhWEgxJFp7SCk0emB8Z3JnYDxFLmhJUXBabXcsUjgi''@;'; put 'put ''MntbODE2SU8kJjh8VT9IRVE2YVBPKF4qLDwpLyYoa01WUzkxb0ApIkFxQCshVVM1TnxsVD5oKFdmI2kzJXEkXmpXZENfTSZtUGVffW5UJjlQUUY5bWFdTkJiMCZoeWFDQEZaVy4hPmppXmNkZW5mTTZedVpPfExBKyMiYSZOWWhKNHw9YHI0IXp9XWc0JCEpblAwKCYrYUo7LnlTfG5ySHJlLEBl''@;'; put 'put ''RUFdNzw5XV5LIlRLL3EjUnNVKyUvSnVDc3IkQUZnTWA3IzJJL3s8SD5SRiREJipfZHh9PSo3cnA2KTYwQDpSVlpuZ2dxc3RNayRmfjMxSDwpK1hocWN1fW4/ckd0O3V3NHFhJENyW3tYQDAwPWIwMWs7T298OnUlSHpdWEV3SixDaF0rZDA8cnFpI3cmZ2Yjb0xqKjZQUT9WejddJXlMPFAkcjxv''@;'; put 'put ''akwqYyR2dTJWI1J8P0s7W1Jhb1ksRF11cjlBQC87Ljt6LCt2U0RwUCp+JSpDc2wiTzs4cn04ciU2Y2MjcFE9OS4lUEl4N3Q5SEA+a0dSaTpeJjkwTClmWytCQUpTKWpJfGU5PkFALGozc0ElTmJjMGlDS0dLMWFTRSMxIW9iY1Fsbm4oIm9BKTs3PGVzc3E/dy44PzZXYHpBbExORn1dQ193NjBk''@;'; put 'put ''cVlgZlUrVkpUQ2hML2tvTHd5NEV9Y2oidkJRUSpjNGsrODZFM0tnQDdMeWBDVU1BL3U4LkZNO2c4dF06RHVQUTVmNF9HdF8rUWZtZmUuNEJVVCt3I2d9fTJPUFU2WTI/cUdHNm44JjxiX3k/QDs/YUVLK3pRUEYlTjU1ZmBmMVAvZEllcVNDbThBMU9pTH01R0E7UWxoWGIkKDN1Sj1eKUQ3R0cx''@;'; put 'put ''RnM4UElhO0g9bHNYSW8/JmteOEFLWEtVPntuTis0JnsxQyg0UmNqPUZGc0N7dnJfb0RoMUVETTEvZzp0RGZDcFE/LHhkRnpROSs0Rm9jel5mYSVYV00iRHF1OXNMJj1DRER2LG5yQlNAUF4+P202UWBKfE5Cc1EyKXxhL3JwbF06PiowaUcsT1NKNVFFdjB1fiN8Kyt4KFJBR3s5IXNBXyN4cGd0''@;'; put 'put ''alZaZVFuRj1zXTpITTZ1LktOXih1SzExc3tOUmEvdW8pTyNmVX1hcVRyTmR4LzRuWEImUSJhTmpvRm8vQlFQZGwiLHRzW3BeQ2M/Yk1UYnwhKzwpcDlkLm9gd0RWXX1MfHo3dGV3e08kMW0lMWxTZ0lVSnVjbituO01LbVRMJWNTcmJbbD9mQj8lTX1sRE4iKFZ1Z2xmZ35YTnFHZ2JtTk4yWTJn''@;'; put 'put ''bTUub2BIVSJAQ2dELng8KkFeOipOPTwoYCxXaCYrcEwvOD0/NGBmejtRaHddcWZFfmIvbVt1cypHcU9ZKkQ9Nm1HdyhbWDBLZ09gVlE5Z0NocTkhZ3pTXWdROXJuJlJnWF9OdTY2RzkvPFN0ZSVaSSo7KVB1T1dsbDNhT19qMVJxU3NMfigpQ0l6YHhvSHtiPlRIY1MqJT16b1lERnE0M2lHVGI1''@;'; put 'put ''aCp8S2E8dGJxUVBVYS9QYXd3bnVDLCg3WnVVR0FlRzhtOyNWRXZlTFVybj43U21sa0ZTZHs+azBrREN4UERJU2dbRiJvezIlTExsfT4waHkvUitZNjw7fntLU2JEPHA+KT9AdihhaXBUY0htOXMmfHtPImMuOy9kWWFRN15LVDZxJWIxPil+Ki5PM3lfal5KMzlkMGxGa0RFX2MkLz5PZmtyL2hY''@;'; put 'put ''QyFAbDpnYUBUM15pJF8pVGhkd15zd0pZLHlwcVdfc1ZpODlOVjpUflZ2ZHE9bVFrZnBZUzBaN21weyExKnd4QklnRkcqPC4vMkpCKXhfYiRxR0FbMUJYOyZNNHdNY1I8QyM8QnI3NzBwaGhmLn54bEYjdGp4MT5NO1o5RWxTQjJZdD9nWkhrI2E9RGgyJl5YR2NGLkhwaSEhLCVRaEYwR1AoXlpo''@;'; put 'put ''U0pIOGlUKXpTVyg7ZWRdQHxGXnlSKWVKKVF6RV46Z29ndTFxenR7VEpMKVM3L1NRekB0Nkh+Zjt3MUR5LzV0PHBZLixafm50RW84IiNpbnguaDROPFJVNH47RShTZ3R4Rj9UWU9uQkhrWWIvQU9yJlpfO31TaUBEQTsyKVQiU1JNejtmcSIyKyZMcio1Wl0vYn1ZKT9OImg9VShqPFBQVEljdnNK''@;'; put 'put ''XXVgUGxMNWpQSTp8S3VZeiFoRkptZCN1TSF0aDtkWU0lVDFxQmc0Llt9LmI3ZncufTdxLH1xRS52dGhCO3NwK0RpfEw3QUZ+Olk3QS47JF5hWDJ1ekQiOnJdIjhFJC55Vj5iOmxTYW5BK0ZKfH16dnE6JEg+a1BHbWVYVFsoXjNPPC98RDI8e0k6eDxXa15hT3NNKG9vdTFzdnd0PjUiWEFQOGF9''@;'; put 'put ''MHFJVXRuRnckKjc8eSIpJkh6Q0EpbHJQRlo2Wy5OZmlAcmpSQHRqcyRBZDd1ZjZlOjpPVVhWMVNtJEpuI0c3Yl06VyVHe0BAbUJlQ1RDSzdtPUJiS28+djp4ZXI4JHs+bjphK0tGbDszU3VsY0YkdiZkV14zcENmRSxrWChiXSE5cWJZMTBGJDBlWkd8NUJ8TGVGTyY8XmpRPlNeWHUlSng6fk4y''@;'; put 'put ''MHlNcC5mZGlgSV1LPyxNOUk6PVE7dD0yR3RzO0J8R05oTkAsVDBpRmJWTldLR3xqPisyanN4cmFgX31hMFQ6TmFGKD5NcmJFXVorUmxiYm8wRF11OzJVfWZ8dn1pZS9raEREQFMlaFNMITo+SkhZLyY8TiY0MjBgUEBuMi9kUzxfLnB0YntTdXNGaHdzd1Z2JiIoWDtpe2A0WSVhZWZ2Uk53MHRJ''@;'; put 'put ''fHQ/VVkkYVN0dENgWjtOR3BXXjNPPGhzMTs3SElqYWY+RSZfYD4xK104LkthSnI1UUZ6L154KHJiI0o6X3t0a3pWaixmPF9tM3AvcW4yKUlkRVVVemRpYzs5Qm1ETTNoNHxHNE1DI1F3a04/dXA1KC55P1g5e1Nba10jNGwmPT9WfkxuU3kwL3B3IzNqNjJeSzcrOi8vRFhidkBkeVdJcCloYFt7''@;'; put 'put ''ZkZhVnNjVkpJMzNaendlYiUseiZsKDprV3RJeUpuUihiSzc/ZiVmM2FwQzkkQmZofDxUQTJoRENDbGskWTMlK0guanNmfDRMVV81dV5gSjAzREcoWXtaOFs1ZXZYakoqekJqbDckUjFDcGJjcDU2W2xpO2J9PWk4VElHLzFOWkdfbnVKa28pLDgyU1IiLEhqZiUlPHFZOmp6T3NqMVBZa1FZekNE''@;'; put 'put ''cjksU09eNC4/e0x9JiFTNHAxbEBYOCxJaFNWI20iLGFbVClQdn4vXXlPQi4uZVYwQlZkWzxrTHJ1S2AkK107NVRTQ31eelQxbUpjdDZUV2ZOVG83SjkrSG90XnRPXUhHND9XdzJBWE9NXUl+en1NRH0jRVpaWDckNT9Qdip0QjNpNkB5O1IrekguVmA3XjAzVDxNRmErOWlmSGhqTypaS0VYXUEw''@;'; put 'put ''cUI5bVV3SFptekVHbUg6X0Y3Y3QsWlk2TnluSn1qLzMsOlpHN2tZRFtALzo1NnFZanBsZnR2NmErQHl1OlVqUi9QO1ZWazwlXkg8WTtWSXVxNGpMdjRPK1ApeVh6KTlpZHw7WEF4fH4oZ0FhYkRbKEF+ZmVUNTVlYF5FeywyQyplIWV+WyshY15IPzpjUyxrWCxiTGo7ODRHKnlLUnYzY3RGPCUw''@;'; put 'put ''Sk9rK3pBPzcwSWJxRlpqOHh8UGRTVXYrWyZCJVg/c3xHe1ptVHdwWCglNnldJS58fmpHQ2FhRSUkWDUuJWVOWi91YEk6VV5jQnlVdyp3bj0mRmBNMyVgd3Q6WiRgXlRoVUhIfkc9LzcwdWMjMWV1Z0YmWW0sWFlUTUZdXlUvWnZOKS93bmd+MmBddGNGZkVbcU8vZHJSOXZiTSpmKnR7VTdQXVMw''@;'; put 'put ''aHRONyhQcURBYGV2WV1QWkBLRGo6UDdJb3YkR1RyemlrPzZNT3p6aWlEPllYeVhoeiQlaCR0Z10sNzhhR3dlSjRjdldFWiUmIUN6NjZCQnp0a1t1fVFBTGFzQnRCPFdDdmojeW09M20uRmk0KWt4Vj5PSn1SaipSQjJkXigrbzwlZSU3QTt5cD9RT2tVMTZxQlVzL2xSYnU2Q0FaSFNQRCRUZ2Q2''@;'; put 'put ''MVA3eURNKkRqcCY8bXM6Ul1AdC4kI2dmK3lxaUIvLnNxcjhoPWF9U3dhbGtnQkRGZDojOCRdYS9JTEdSeCtxSmllI1ZiPDg1PGFZNSxGLlR8SzxAIXRZNkVkanE5fk1ZTW5oPSVYMFh3cn5jYUFdWGpJOHArJlJ4b1FGb054L3AufXZyMV5sekgyKHwmd2tPR0VpSDZWbj1dZFE6ZV1LXTdERDtI''@;'; put 'put ''M2NMVFc2KjJPaiVgVjNMMT44ZioiNVhlRGJAXig7Nyl7K0A+VDY4azZrbD1mc1ZrZVVNNncmNkVbOXE5TT1bRj85PGhjWUdJZDhYbWJiU0Y9eChUL1VYKTNBVTo2bzZnQzc3RUdLUWp5XXUzckNtcipnIjdbTy5VZnc9TnNkejc8cEVjIWw2Nz84azJlQiZjQiguQFtQV3Qoc3p+aGhYdTE6KyxT''@;'; put 'put ''ekVGX0UjVTUvLCV8T3x0fi5HSCspa3U7XUpUeXZbOHZ1KD4ofENZR3pFcXk+fV54PS5HT1VIM21SMSpOYS9xbkg5bWtNJDgvPjBxL3J1Ozs3PzYrbnVKdFAjdyRiOWRlZDZ5VjA/c0A1dHpFTCtwa1ElPUQ0MnVCRktmM2hjOz8rPlFTZGZiViFJOTFNJmZVPllRYUxXOlcibjkxM31JXj55MjZG''@;'; put 'put ''YjxBKzIlSEtNZjkoOUZMKlFoTEp8VHsrIVpgU28/cltsXXQ2MUJldWd7VnJqbnYsZXQoJGhGMWAwejQ4el5xUE5ZNHhzZ0VCUSYwZDclRCEhY0suP34+fH1pTWF3X28/eGluY2xjbD0mXkksS0N2L05WK2gjLGZ8MShleC4yTW5uaXEqcyVudTZNY2dAa2Y+cVhKVXUucm5Wd0cpZC5ha3xESEAr''@;'; put 'put ''aEU8OjNdXTVQd0k0U19EeVF0WmAhVjBdVCtfSSNsTkMkYUIodlYwNHttV1RjfihTQ0lNMlN8ZXxZX0M2R0pnQFFQaUdbW0EzOlZbW2B2fFIuWVZWMUVQTWRWezV1WVZyOy55alQ/ZVFCUnk3dW8+dlBQM2sjIkwvZiFXJGVmaHJiJVloMj9hU01UQ1NpQih8THx0XUtGOF1RaHJCJG1RKHEzO35k''@;'; put 'put ''YltsbiVxdEpiOStlOStIeHIjPmFEZyJobCVnVE42Jm03NGJURCZrPU9UZ296SHZkRERqJS9tbWl5WkwzIVMyJXJYQTkrcD1HKFlzWGI8RCQ7QFBYMHZPXXJOTj1tM1lFNXhkYmRuR3gubXtaSDR5SkBwVUouKl1JKFNUeXJGL0szY28pfnhpZWlEV2l2LE1QckVlVm5ESi86bk8yXVZzbD1ZZEZF''@;'; put 'put ''Vix4eE86Sjl8ODVfL3JnIjUkZ2s8I0A5cTdhOCoiY2RTOFtWQCl9KHVDUnd2VWAqUXF7UmJqVyRZPFJOdGUhaWBObkImOGk5YHZnMD1JezgxYChkIThhPlZbamAuY3tgSlNJImQxeVJ9XTpiJW8/b18uRENfP2w1JXcqY0lMW31sI3JqKilrVVtTczN6O35WV0pKeylZMkdCUF1xO19geGQvayRE''@;'; put 'put ''VEtYIUZmWEFaVF5nY0lEVio+Y0l7XlMmNmFGZXltbzBERWM8aGNwO0pCQ01ZJFVUQmFWMENrQFM9KHlRfTRaa35+SklRS1lhfmgvTy9PenpHaVEsWSxmP0NtZXhjfEh5WGNYQ25FTFMyUSZPRTFkWyl1NEVFLyU4MkU7dVRKIlFzcyhAd30pTjtHYWpAUnJOdFV8Pip3WVRBbGtCblNFOG9WLG9O''@;'; put 'put ''NT5CcU5KZ30+OjN3X2M8O01kKSUhR21zcFlHK2sxP0JNKixTR3lEWklKSUsrQEJlKkErRGNQRSZxbCYzVVooRGhsUjBTX0A4fmtsTCw+T1Nddl03WmtDfVg3KSlHeHUuWSZPOH0iOXE2Y0BNYCVtMlBFQW9yK0JnUmVjIXpwX2dZSlhAJXcjW2dCdCpyYjBUPW5Cc30uUUA5fjczLl5IelVTfCRk''@;'; put 'put ''YT42Jkc3c1hpbnR7P04vKmYkP1kkUDxFTVRvMldFWiNgXm5wXSo7OmY6ZHBQOHdEYHZ1PGQwRiM9ej1JbV1rTTcvNkskIX1lPG99SyN9KWpmVEpNeHdnUEsoflYmYVg3OmUpMmh1LzdkQzthSj94KD0oXmM4RnlvJk19KjxsfGhEe0d9JWJyLjQoWnpsQF5JRzkiJF08Wncud1Q1VnZOU2EhKHUo''@;'; put 'put ''cjIsUF5zKGtzXnwsdmxYbT1OYHhkaT5VOGBZcGFJWjJJPUpac3tvMltQIzM/TEU3V0wybDQqTmJuSGEzT14xYVosXl0uUiFkYyJGbSFvbklVa2lRVn1xdTxFO0F6On1xXmZGJiwpbi5QRFpdNy5NZUV1ZTRacGBTImp4N2UlZHxiaTV0VE5zcC54fHk2cXUoInIhS05sSEZaNnlsW34jSXo3YiRb''@;'; put 'put ''UDg0Z0xKX1A7VEtieW0zPX07OWUyIzpHYCE6KGZIIiU5fEZQTXZEPWxbM0VsNHxOInIsNFBpfT8+YGo7MD9wWEkuVUtPKV5yWVVdVitBYUY1XjR+QTR8MWFwUk8xb3M8OltEfChyOkY9eFhieGliS0klW3MqN199QiNfTD06Oig3ZHZSaUJuZkwxSnReekFqY05FRWlnQmZETkBQeipFZXFJNDws''@;'; put 'put ''aV9jOEI+OjchTEdaWjMyck9PTD5VLFJvMlNnL0JkXTheM2NtSGZaaGgsQjJEYFtUY1ZPbWNYbCgvWnFWXSh7V1Y8LF4qTHdHTn1FdSIid2EoP0lBdUwwJU41dEQ2TjM5NWJdMU1vIkZpOGFzS1JANjUvLmp9RnR0N0RhQWE6ezAjRGh3cSkpVmJBMEU8RV5KN0M/d3o6Q1pgcyFAKHQ1fmkpUkwq''@;'; put 'put ''Jk9TeWsuInM7KHtyMmp5d3IoaXlpXjchcE9DTi8mcmkyN0NlcXhOYGE+fW8wMnhidUViaXJpPkoqdnRmfH40WWIwJjNmVn1DaW9SUncqJWY+TWpbaDV1Y2hmTGAqanIkSTpWcHhtXXF5KWxiek0hSEFpe04jcilqXzlEcXJsW24vRnNFI0hIenQ1USptI2kkUXo5W2ZDZTtET01YUHIheVRfakpX''@;'; put 'put ''K1lVYkY1I1h9Yn49Zl1jQ0Z7djM7dzEuJEsibmNCfiJpfVpjc3NFLFlyfDgvRjE1V04qVnVlbW1VI3N9TTl+b2BJS35NKHo+MCh2Q31ETFo9Ll0ybm12OE5La1smQioiMiJPIlAhMGxXaXtPN2U9d0dnOUVhNnlwRTk1Wz9sND1CM0xeOGZjXktVQSNOWDJLPTVSSFE3aDFodnRtQyZ6elhVOl86''@;'; put 'put ''SCJYfEpgPnJgTzhTIT1fKGRNXiowLkd1eDxNYCZDOjd9ZzVBOy8kZG1yZkk9TzdvI1lmaUQqWmV+aT44ZXhsI0FhbFc4T0A3Q2lEVXQ4YWZgJEtDXXpsZlFbTHdDRmtuYjZ3S1BeT3wzcVRkYCxKSVA5O1VmOCI0KjdePGohQ2NOdFE6XnRtKUUpJUApX3U2OzZ8SyRoU3MwVVdsQl17YiM3K1Re''@;'; put 'put ''cWRaa15CU0NoITRVRlkkO0djYk5gT0tWe0AkYWw/TCZOKjFddHRYSjp4WyRLOU9Iak48UiEofXIhfF59TSlbYkhGRTVEKj9OTCROaDk7LEplSD9YUVsxdGBZbyYmR1t6ZFFbJkF+bmdMaFFzfFtkQFJRNGU3KlV9K0dWNHxQck1ecSRVWFoqI042RC5FLGdTaFREVVZaKGdbPD9Ka0R0TnZgXTdx''@;'; put 'put ''aiwwRzxweH1KKyVSWn5HbzUkImxtNCx5S15gW1hEIX1KLkEuR3IoRkRCaGBFS2BiJXo+NGR4QHV+ajs/Yj4le3leQGYrQiZMY2teaj14ZXBzaX1ReiUveURWamAxPD19PE9QNTdPbE8mTCY2NlcxInZ0PGh9UEpXfDcqWSk4QEN3az9hQTVfez5CQSVfYmlvNSxdfFI8RStYVDx9VXVuMTV5S1Zg''@;'; put 'put ''TGpyWW9nRn5PU2w/b1t1THtCRyw+Km1bQClxbih1NGFJWkdWZWJOZkljM31SR3JWYnZnZHBtbjBpKVZuaVl2Ik87ZzdJZm4leSNXXWJJZHVXeXU2WjtvTD1xZ3g4fU1FOktGNVNsWVVUe0dHUDxLOVVrbWNwQXdHYS8jO0thdzg6Y2c9e1I1NUsvS3lTaHRjaVQ7Rl00Y0tNV2BkND88PyRuJXs7''@;'; put 'put ''T0ViTSRXO0NTXjE/d1RDKDIlPTwoPUV6cUpuanVnOE9QPTVKR14zK2EqUWlVUVd2PnZncF0yVSRNXXA1Ny9LNFUqMHNlcnt5bkl7cGBGOG1ZZCE4QnlOSWlWeGptNTZQTjdlYyUoK2ZPUnR1RCtDel5MWVZWVT1QSFNWc2sldHUvSyksOSgydWUuImF0P0pCQ01kbzFFaW1nVmMhVSYwdVhtLy9B''@;'; put 'put ''SzhTZTQ+YjJrS2RYW0QzWXNhKXJaKGFxIWIvUFlNPnh+I0MkW2ckJEQ9KDAvLCUlYUdEZmAxYSZHKXovZyVUZksmSTN6WDdmck9MUlAzfHk2KCltRj5jcG1wTHNobSJpV3pOR3ZqdlpmbkNKS3krNy9LSFlSS3VRWVNyUip3b2VmIS8sNSUsNl1tSndEQHElYi9lc1kwKnoudTxFMlQkN0sxWGI3''@;'; put 'put ''ZUxKLi5TXnBHNUVIcW4kd2d5I1dCOlFNazBlfn00dSpgSDtWKyQ9SmVrLnBSLixMLDFjcTlqPVJNJX1jaVltXVRFXXxFRm5yZHVpO0RMcHtLaEteTSRuLjY2Nzo+TSokL3VBLGFMLzE8R25leXokfTkrM3YsKlJGJiQ7OjlkcmQ6MVBGKk1ZQjNiZkgmIV9mLHtOej59V2UqVGVwcjtNfUBRIW8/''@;'; put 'put ''Vm1MbVEuJUUwZEVWQmV4JEliaVh4bSg/aVplaVQrfUdSSEl6e1ZWJC8vMHJ7ai82JShGZzIsWmNyYHRjaDlTXzMvR05PS3hjc2hHb09fcEArYl0yRVJHbG9tR3t9N2B7ZiZJJjBpZztocnVOPCpdKGpxMSF6NHx0aEliM2ByQz19KmN1KW1iMDlLTTVIIVYuU3lNRUkqZ0U6JSMmKVVeQitsW2dX''@;'; put 'put ''L0x2NUJyZG84bjxdeUJkRkZAXUMrXStIN3VkPCN9PCUoMCtSZ3tFSUF3eyhGelA9MDN+VzczSDJkW1grVkUsR105a0RfZ3FdPTRFe3dRIy9nbThbbTooZ1Jyd0JNbVY3cXxqVmtYTE06YWMxLyh5U1RaJjxdWUxxTTl0YE5pKjp3alNbcXsvaXR2PEU9REVlVCk3dTpUIUFHb0Y8VUJTLHgoV0Mm''@;'; put 'put ''WzNXX1dGZn4ub3VJRU9EQFFQLz1xMXhDZ2g3dU4kZ0NORzR9PDlMbWUmUGU0bHFFR0ZQeSkla35rPiQ7Tjo9Wm1tejxCY2IydCQjbm1FLnU1RWIqLE8wVy9kVHNGRzhuNXI5OX1kTSNiMHgvenhDT3ZTYjtLS01qfkNtTWVOM1JEfmZlIUo1cWNMTTw/eWNqeXg9T3U0PHk5I0hlUWR0XV8wdikw''@;'; put 'put ''PXEyMXxJVSxGWjtmTUdxJX42TFdIcD9IaD1+PmQ9Pjw7cXhRY3suNntSPmtHJkJgJWwmdmh+dmhKJTpGTzZxP11DdEBRO05ffUpMW0paKDkyaTpHRG0lS3Z6Xz5WZzhJKTUrd3QqZHtmTkV0NXE2KTJPSXt0aXNAaVV8elZlLl5gP0V1QittKSR3aU9sZWZmcWF7Vz99L3UiaXU+Nl9gPHR0PCEi''@;'; put 'put ''fmpycSJBOnhQOjM2S0h3aCsqfE9YYWkhVTx6WCNDJUw5M2BmPzdGeiNXdXdhPlR1cXhtfipXYj9JLHZPeVFEPTMwMjdZOiRzZCZ0LFkualozY2hbRlghXjtneGdZTyMoXnx2VlhyO1c8eEtYYkAhfCk0fVA5fGo3JXJ5KnBvcXwvVFB4QEJwT3dhKioqeSpXNU0zIW15LDh8eWZHN0UyPGlEZGs9''@;'; put 'put ''S3AwVTwsOUMxT097di9kQT09djBgQHo1aks8KVZST2JPdVNmJnIrQ1kpay46biNzd05fMCRmJEEwU3pZUVVjaWVuemNFUU4zVm5YfVZNPD0rfl83cyxNVCx+UltQJD51eGArRD8lJDJ2Ln4hSTh1RW1HbHgkVi57MXBaeUomLl9rdEVSaVZTT3hzJGFOQmRGZSM/VlFAaS4leF98Yzh2Q29GK18m''@;'; put 'put ''LFZoPyxbRUF6bDBMISNmIVJlb2VhMTxqV2BwO0xxfiwkOz98Ny5hI2I7Zl1td2t+aVVQWHBlKmRsc2B9JFBZXUpCYlAoe0N5OUVZdjRrbHxRPWdUWzEpWDNedylSdXhtfE5SWXRJWzw/RWFoXjkqZXRvUjBifll0Z25Xd0c+JVI+aT9TLisraDFZb3VkUU4zVjJgJEdrTjw4S05IVGdHQnkwZV8y''@;'; put 'put ''QWxrTl1tNCNwdzk9TT5Oe3xOfHhgXXl7W012VDMpY1FvZSxhTEtabWFuMmE+U05JTmNhMzw0azBkK3E4YEhdWCM1NCNjLHlQSEkwc3RXZlMqY2diKHI2SzZOZCMydWExWio/TXVXXyYpMi9wY3RSUmtCVEJrOCg3YT9CQWBSaH5WM2xBS3hYR19GUkRze2g7bTdKNzgzWmdWJm9FIklYfGY2a1M0''@;'; put 'put ''fkcsPG42QWhaRT1wIV5mTExqJmo1ei94YmpFWVNia0MzYldDd0k9VCRZTnJhP3c0S3c+MDokYnp3dHJ2UXYyMFZkYWMuSys7NCo8UTImYT5xL2dhLi5ManA8YEFmaXAuZTFUZ2JXbGxsayZRVFVYcUpoOHF3Z3MhMylYTi99ZVFEVTIsZENiLCF4TEZaa2NIT3pycW9ePmcwXnxCSF54Y2ZbIV45''@;'; put 'put ''eWp7O1tPR1Y5Z0l9UU95JUlATSRbZ25sPCssRENYPHkzQztIT185SUJPOFFNfiZKUHZKWm5faUAlUVNONkJvNCUkSWZzS0NlbnA3eVIuaDNvRnVmeEg5NCVkbEQiU1YhKFBQT152JVFpTkFqbyk3RExnK21wbykrPDI2M1FdKGMzbTAxKyMweiFPOjhlN01NMVYwWXgoQDZNdytsZ0BDR1R8O2or''@;'; put 'put ''SFUwWUQrXTYjSE5jU1sjcjNbZnQkTE9uWl47Pih5Wz19RTklJCJEWyZkUmFrUUNDS2J+ZkU1aTBIaGxpa0o+Zzw3TFoqXmxZanxsVEBVIShmaTU4SnJVPGE2TXJPZU87UEZwdEs4dXNubVRpS3A4M3UmOTBrYVo1TDJJbnZFbENKV3w9SVg3UlNyeHNfeCtsTDhJVylNXy5FWGYsT3JJZFtCX1R8''@;'; put 'put ''LGlIMCpqaH1jTmJ5V2smd1QubC59antlP1MjRDpbcCpHMn1uQ3o2aVUjem5AWUxGenc2NGVsY0FoUTc5dTA4emElQFNSOEFFOSVyT2lyJEQ1ZmBOPk0/OmJ4MHczW2d7UC8wN2hIOUhmS3gjJWI8fitHbFRCUWdVc1lJNSwlRV42elRrdUhVZEhaS1BKZVtfc3JfQDRDKm9lJjMmb0wrc2c9N3da''@;'; put 'put ''Qk5OQX4oRFpCdD9aPGtlUUZFc35QJStocVlJJXEzVVU+R1piTEdgLDIvfC5TcUclY15ZO3ojKTMmRmpOQmN4Y0V3czE8JVErRyZkSnZFLkh4UUMkXmhmNCtwUmp5UGJMQl5SOXR0aEVzUEswInoxZSMpQH1MZGhQK0Q4ITh1dj5GPns7M2FPMixkQ2ViImp4YER2T1ZQbXprZSs6OVZ0MG4pXzkq''@;'; put 'put ''TkYmMy8wIS9lRz8vYm5IWE59a0h5Z1FmPndqWUNpdUUjWXsjbn1AXVVrN01jUVVNfTUucyFpQkhwLFk+STVDbk8jVjA5TmBXZT1QWjJzY0hsTC5tTFIlLG1bISppKjV5O3tDel1zOCRNckpXJiZGKDEseWZXdnxpWkJoZ1FXdnR3TjJEY0IlMCNEcFNnVVExdDR0OTAoZlN3JkYvWl5YQlNbTltN''@;'; put 'put ''SC9iPDBraGdDPUMwTVZtQWp0Oyk0MFpWOnAhfnpTdGlvUjFuTzJRYWs8MGJoVzwidVZpZ2U/VSldV0s+N0JrUzVzajBDI3ZNNUE3VEtJMXJsNklYKEBBT3hqdSolOHUsLH1PcUU9Ym9be2pkOE87NmwlSWxRWUIxcjljWzYwSyFbTl9lWzQ8a0ZDV0t3a1cyJHVfQWtUXXVFN2lyYU07Snl7S19y''@;'; put 'put ''TzhFe3ordkNqYyFKPDoifUxKN0hZfCEkUkZsKjdnPFsmfj9KVExOMj8sdnRJX15dNG5vMFUyJEAyZ1gkN1BVWiJbbkIhMUpkO1sxdiImU3QzbFtCWT5lcWQvWUhPcmxoO2x5Y35Dbit9Jn1PeXB8NE5MVHh4NDZhc3V2cztIZEgvfWhxXiZGUyZ8ZzlTImRiQk1NPlpUMU8uZkVzOyYxV0R2b0pG''@;'; put 'put ''fkpeTWAufFBlIWV5WWhmaWRUNkpMPmxmL3BSYV4sTWsyM3xMITRfVyl7WzdJW1U/NWI2WFYmY1Vfb18mfChiVnB6XlJxe0ZEanxoXWdoW2podX13U1peYiZOc2VHfVdmanB0ST1LU142TURZfHBhMk8uOSFdOHJoR0hHVkp4YStWTSJrMExLdD8mdi9AZExKPGskNjxvWDc1XXtyMlg/bUY7ZT9v''@;'; put 'put ''JVIuMlc/V0hXNnkqM2A1NChoMGtjLk97aztZbCFJMSY/ITcpQ2cqbEtHWTBNWnJxYDBmR106bVtFJmteXl9Oa2lDMVMkPT9ePj81K3M0YXN6ZFE3R3JqTmJoeChVNz9Saz0vSyJSTyY+Q3xJdkcwO2JVaV1qaUlsQUZEfWpsOVRgfT0xOFFWOU8kKUQ0ekQhI0ghTGM+VlpGP1FyT2khe0dtUCVn''@;'; put 'put ''IS9GbV52dkV8MUwkKnRQcjdtX2V+OT0heWBNK1UuIkUkYjE7PERiXWgkXyNFIiFkRzI2JTRGMH0mZ0V2OkdjOjwqSEFXMFVzaH5bdGQlK2pTK28hISUlWzgvYXhYcl13aV10cyY0a2BlcWVsLntRVVErJCtYTTtBOF8vXXgrJCg4ck1fOEAmX31HcWI8ajZmOS9gaDQ6WXJJLGlXVkViTz5LQXxt''@;'; put 'put ''Jl8jdTMhOyRhJnExa3ZTbFVzOyt5aGc8UlkzMEdsLmA9dkpxXzcyaTg+cGEiQTNvYz1MaGNtTjRWUSZwWGwlKzROX3V2TXR7Z2pNT2UpLGhFOm5uIm04bDEoNTA9KnczQSVCL0xsc3E5UitYQW5SLjg8cj1KPSV5bGRnQHNNXVlRLDtPQUojRFFdazt4Xjl+bFo+UTUoXXRIY3ExNUlVTkR4IytF''@;'; put 'put ''QGVkVz8obWpGMVclbHklMGUkSDN4NnAwZlVFdElCPEglM0M4WEAwck40VFtGY0kpZihjbCFmMjh4RHZ5UDMmJipBPEdWUnoyMGowTn5HbyErcDUjajQjP31ReWNoblJZWF1mPGR2QCUuP3lscE1hRlhVMF1SPkRjJCwqPmlnbDcmLDBSNTksbnU2fEwscGcoZT99UkFGdWE0RjdoTj5WJnhqJmND''@;'; put 'put ''ejEsdGglPGFEP0o0RVUiPkc4TndNYkRVcE52Rj51OHROTUlAeDQ+YGs6ZjZQSDg1aDZsSTI2MHpAUXt+Vl5lY3N7SjpoOUBqVGVVe0ZvbmFFYDFKXjQ2QkRSaH5uQ2MpRyNPLkVVWT5GOEMxSFZnQCMkVmt9O0g9Nng+LE5odEA4cnlELHxXQGlYe3RGQURRWyRxfGVpaTciISoqXmgmOnYlMmxt''@;'; put 'put ''Ymp8aXl3cCZmTXddUSlAYCkxZDA0V2t+M3RHcTtNUS5uUSwreFopR0YlaV1OdXddeEwrTzo4TTx+dXRpUGQwbk8wZHMmZyRXWiExZmp5XmY2O1p8a18pb19BZU0hLmx9OFVYQEV6QlhyJHRDRjY5XSt1M2V5LjBWbl5YWkA1XzcvVW4iX2FjWFBoZ0k0YTA5bFR8RWBRJmBJKWpJUiJtOTpSVCw5''@;'; put 'put ''UWR8Wms2RmY8LyRiS1U9aVJqLGptfUA4MTYvb3syVC86TkxzNjp9QH5UVmMoTXVDTGMvN31HY0FfIThJR2Q3TnJWWlNATUFEbHZzbSl5TEZ4UTpGQWdtPVp8NiZSR113KkIqRndZTmZYXyleVyltL2hZYSk7aktRKz81IzYrdTozcj58KHJrc3F0LzI7ZE5Za193X0pSRU1Van1yLis5RDJQNUBa''@;'; put 'put ''O0wxXml2Z2hJPTNWN2c1S1VoLGUkVUdNW1M7e2g2W3JHLFUxKUQ8YF07bVU8WjhTVnQvc0ViT2J9bXh7R343MSFMN3IoT0tdQ042bW5Wd2Qzb1lvI19+an5aeXhjIms+QD5jVEBGSU5waC9zV0s4SSpvYCYwKmx4STVAM3doe25ab2lgcXIxKTUld35vKGNYMHUjfih3SWhDQ0c/aDpoJXQ2d1tU''@;'; put 'put ''YXpqclJYbmdpOVR4UTA2VDI1aihTRGJ0UzdfVk9jd0d8dFFzI3RKJEo5SENXK0UuSnRecHw5eWIsPjpPPlN6JkNsel52dCh5VV14bzg9NHZBbF00ZGV+Smxkcm4zYlAlfThDbVVtR1RqOXVeeUNkR0N6bHxgfUo+fSRzeihoMWZGXX0je1B2QnolUjg+K3htOGtuIyh2P0wyTGcrc3ZHbE5EO1dw''@;'; put 'put ''fnE8OUl8UCZvdWwyaT5pKFBtdyFHOEJaMWxVRHtzJkAlcytARTE9NFhGUDYhTjJ2PUskSk56KlNhVjxpbCZIMTNheEoiNjZ8O15DQTVuJWx1IiZDOn4oIiFHNkxJTVdBTlg8fj1RNkEjLjF7aUosUEFpMkA+WE5PSSIzQTRtJkoqWmNaN3JvMT4rRzs7Y0JZNU43Iio2UkU0USE9JXFnel1iWGZh''@;'; put 'put ''YFFiP19uUE1rKW87fmNvUCFHbHRZX3tGYV9VaXA/SEFCVXFfUWclVV8lMERVayUpJFMvekdLeS9MZ3x0eGM2Z2NHOCk9QGdvMDl9NHRCSTNEVUd7Kmg/X0k0KlV6bWRXdVRoS3JVdiE8eiUyO3ZdJXhXM3NkPktYMlIxJG5yTHtPX1ZjZGEpOXFaXkBlTE8+a0daYHhiQTxKMEJyW09+ayNzeHdl''@;'; put 'put ''OnkrVTtUQnxERDQ4PkBLLzNYYmNNTWZoVmc9NURmZlBQbjZybixzNHJRQk1AXTp0WU1afXVVXWhxZ15jSEZPIlB4ek1ZdzZJYFNBW15la2lpQTwwPmAid2hQNiNbZHU8Mih8R2VkaCssTTl1dCt5ODZhP1s1SiZBcSpdQTtfNEhIdmloXXpSMGBmJSQ0TVU6dns7cHszZ2pHPH5EUDVtTlgvPl0s''@;'; put 'put ''aldhZmR1MiRTU2NdZ2xkOWFXKjxsO281byEmKnVzWVpEdD5nQmJAWHlSfGphfD1nUj9IY3FlQmsieVNHPTcsJit0bCkoSnJWW111NkJ5YnQoamdOKEdWPVJyTDQ2dSYuVktKbEdqPCRBbzBMUlhtfkpLVksxP0JFSXs9W0p4IixQakRAdzdVbSNZbCp4KlhII2txZ348XUslSFd8KWBOQFhmUDh7''@;'; put 'put ''dT9dUzBDai9SP1AlanZ0VVlucnZyejplTThVfEkwblEwVzNnTntnKVRZXyQ/Ij0mdU8lfHMwcVUuSFc5WTBQVHZBSTszVk8udFh3O1o1VjJJKVVtWm1wV2QjakB5Wyx5dDZrP1d2bjhmcXlvOiIvZUZKO0N1enRyYzo0e2JMVn5ndntOYyFsUzA4cUU7bCJqUXhYJU1xPTY5M240RU9kRExGWVAw''@;'; put 'put ''T358cCwlfUVVXnJvNUNbaHM/PmsxblNjQD1RTnA8YGBSVi5LLyMkWkEhKGF3UUM0elQzN3xrKHcsc3xYNnIhYEZwS35+RzQ1MVFdZjxXWFM+fGhjflFMVW1lJkFCWSRoKUhRPFIjX1tEZEghUWt7bkE6Jmx1P3V9KUlGMDFhVy9PbFUuLFhRTDB7OE0/d3JOQ1A4PyE8eF1lMk5nO3tnWHYpUE0j''@;'; put 'put ''Z0hzbzt8ITVyWUR4K0tHYU1tLEA9bC5FNjZNWFI7ditZajN3S2RINnk2ZjRGbG5hKnAqaCpWVk1DUWpSeElbdk8hd14yJSpTLjAheV9qaUtKcF9VTz5rS1tHdjIxUGplOHo8I1VzVk9OLmZ9Zm9PKl94KEpgIWJ+fkhYTElUKHpNXVRiWXp6eG9PbjV3VHJvYkN6OC52fC40c2wjOT5HPE9fa2NU''@;'; put 'put ''a0liZDByVSFOIiR4NjQ2dlBufjdifUUmbkxIMXs4OCUzbiYjSDIpVXBiRWBlJFsuZmUxTFZ9Xml0RXVLPiRbdjl+NUZPNClYMDl8N1M0KW9gMyxgVzpfNmFXfUx5aHUqSU1nSChGP2p7d1VGUXhCZEghNFlobFldVXVGQ241XTk6Z0NRL1A+LmNkTiJGJSs3XnFUc1lzNDYyKFpFfXBWVXdjPSk6''@;'; put 'put ''X1t1Uk0qU2IoN1pMX2hWV08iZjIrRkYydi9kJmh4K1ZufWldUXNxSVJCaU0oVndKTGs4W0U7JVFQfGpOe0ZjOjZZXntxLmNOYT8zZ2J0TGx5M1VBZlJTeVhaei94biopaVElMXllSiQpW0h6Vzc4dipxZUI7QEV3XTBxUlFnMDsrSH1RY34xPkEme1h7SjVhIVtvXzZoUmp1UEovWCF3RU5vPW8/''@;'; put 'put ''Xk9GeVk6MkAifDhNVypHSzVRUXxEJWRpIlVvVX5+OVh+ODk5TUA+O0t7Pj5PczgmNjo8SUdwa0o6S1N6ND19cFIqN1JlRGUlJHV6TyIyaGAofEtzcnFhfHVjSk01fSEscmVdJCpCcklZaFFbXXlSRlRNYjh9Syx9XzUkSElzcjkocH18W3FIMzAldj9ZOF1BZU49WE14WGhGZEhge0lwQi5AL0Uh''@;'; put 'put ''Lk9FZEZSUTw8L09+ck9HNSY7bzRZYzJMenwvR3YwJCRvRFpTO34pU3hoU2t1Zl1iRTdtPTg1eXxCR091Z1Rya3FvdGNDcm0oX3ltJEh2dVEydmNGOS9wXzpzYnFwdDw+QmNGfTtNYUJuWm5dLGxINF9tflZVLDRlLHYqKEBuPG1fIW5md35nYlp4e2ZhUUVbIVZwP2xsUzE4Y1AiKENmOSZuK0ss''@;'; put 'put ''WzRKN3w2Sj15MDk3N0VraFlSekh3MkBFOGVwXzM7Z2BzezhkMnhGIj5HcDQ7fU8jK3piSVMxeE5icTUwSiRJL1BOUXguKSlQXU9dfiI7d04+Um5mJGVrV0kjSCgkOl8wNkEzKSpsem5qImpZTEYjdXhsL0RIfChtbSRDbF1ndzldVD9wTH5jVVNoanorO3ohJUAzfWYkOF5NVHxoYWpES3pnT0A3''@;'; put 'put ''ckB+X0l+VUZsV2pzI1ZHYT1iVSwpfXREM1hmP29UdV85KkwjNi9vNnw8e1MuPH5uN1dqak5INEZQJCsyPko6Wm1eXyo4PlhSTko9Mm8xOTluI1YzMnZhMFYuO14hNyEsd09sUjZxck0mT0ZPSmJ5aGp9VjBqKDIkPiY1Wj8kNGh2NkZuRyojNy49OyYueSgyTmc7TWojNzw7ekZhKzxpLCI7QDwu''@;'; put 'put ''cik4Zip5bWI0RC4kIUpVaF1EUj1FTVc9Tiw8VkgvZGlHYH1jfEd0W3RgYFJfNldTYnt0Tzh5RitDRDlSeX5mLj0waXRxUkdoWGl+RmxNe1VQaFYhKStMSiMjZEssZnxvdnElInt7KGAudEdoY2clNzouQWUvOGZUKmdFcCh9cFRrU1dLZGUwfj09W3hrdkZLfSE0dUNEbGN8W2pXY2ZQZCwxflR2''@;'; put 'put ''ZTE9TH1nbEg9YnUyS2daNDoxJWM3THZPXlRCQiVfU2pSbnpjPDBMVk03SjoqYG16W0Eqbj4ubER7WFk0aVgoKyRkVUVyZyFILihkNVI9YCE3b3ZGMWtadntbWEhUQSRET0g4WVdANVApLEchZFBTN35rJWtNYnM/VzZvLCNaMCpmO2QjUDhtSCM2O0x6MG5oQ1tPUE9RdFFsdDFCKmVaInFgVSld''@;'; put 'put ''UH1YcnF9bWVdQF1uVm99bTEkdiZeIyhLV1IsL0Q3R1NwRWdTWkM7KnldJmlpdkw2eDJEc0MmN29McDtTRWQ5ZyV5Q11nY3tYXjo/W2whSFpxaG4rek1VZkwqc3g9K3hwdWQuI0hCOTRPOiJ3RykoZEp7NkovM1hPb1tSPXNOYGd5JUgqYWN4OzRHLFJ0MWpTNV51M1A4TWRfQWowent5MTRBYEZV''@;'; put 'put ''R1MhLm9IRT9KU0BtWUpHLzc9YlVNYm5yLFtIMDRuVXNLaSk3U0ZSbWh0K0Zle2dEbGhdTml7KSUhSE9EZkphemBWWnY0K1BvZWJKMGJzeW12U1dZe3oyeUZfMVlVZ1BPM19ZeVpFS29JcSQxYDxsMX5LIW9pe09SZUdfTnZuIUJIQCQqZHFGS2ZLdEllM0l7PSNPcFZVIVpWdnkxXmYpSHA4X0Fq''@;'; put 'put ''V2p7RlhZVksiNGJ+SHpRaVFQUm50TFdjXSI7SV0pcXh4eHFsTiM7fCI8e29wYkg7Pz95YVUjaSliYn41OH0yfl5EZWApTElIYE4vdXBKQVEjKnM6WyZuKzxAI0Qyb0NoVTM0Q29kIkxLQi9WJCM7KU8/dCE/K29FfkYsMXIpQCQzLDhPV2Zxc2tTdDJ0X2Y4VV52eTokeXddIjd0KUUjRHlGTT15''@;'; put 'put ''VFBga1IiRCx2IlEoT1tea0w3JSFMdStEITY7XUZOKSZqUmM8YyZIOkpeYHVScD1jdzJ0TkNCRUQ3OHcuTzUhWUlEYjM6TThFd2UpWyxmRkFDcnpWZHBfYCY0aCh0RVY8RD1VUzlAP1BLcVphOVUkfUhyLzo+NjYrTTkxUEQzKTBWWmFkb3xiP0t0dzlOQklBVXdjQ31WViJEaypFd3VjI09HW2gj''@;'; put 'put ''XTJ7MjxrRndCQiIpQ2YkXnJKeUs+O2JJLk5SbT83IVVSK35yYT1aKUVEbkkkQUAlRjtuUzhKT2g+dGNUP3lgKFE4W3VOa1FZQ347XjN0VnNIZUExcSI0KiNRSzhYR2RbPHlxXmliY2BPZFBLZm1PL34hKSkjVTB1RVNHPGNAN2YwdD5YMkd8L3ZlVWxKUUkqTVdrVU8vcXpbR2hVN2g0O2trKEx6''@;'; put 'put ''aD9ufkcxQi8+cE4zUWlBfGYze1FeeCs9LEh3OzVpMEJ3fk5BSTRLZGFKUyxAalBYcDVSb0YrWmxwVSlJUEhqcjpkNENwRmVCZUEmMTUySEZZcCtoaE9iM0dvWDFkT0xoaStNN0s5LCp1LCNJJVBVZ0JSVlVEZEV5U31SeFE+Yi9yeXtTWCV1N1poazNMPFllNjFMbClhfU9gJTxEajEualt+UmIz''@;'; put 'put ''dytRWDJ5TnNYQ095VE1yOUc1cGdPNWFYWmxiX240XVk6dWN5QW5xPTQ8MyhSfWM0ZCVWVD1iL2prRD83WiwkR3ElWkosN1p5YzNWSFZyWSh6PjNsOSh7VmhaZHY0W2lTWWkhcz48MDdjSCY2XyQoQE1LdzA2SS57QEFMLlk6cVsrRDZFQWNUbWkwQ007aWo8dmJ9RFIhOWpNOGpvcUBrczIxaHdM''@;'; put 'put ''fF53KGIoKkJXfUg0fDlCRUBjcjJoYkBVcEp4KlUhR2dMek9bS0JRTXVXLDJFUCoiXlV7Q054KEdbVDZyKVlNcF8/WENtYDRlc3chQntWTn1vWTk+aUU6VDE+JUltTnJ9R2g6WjJyOXZ3bnZCUW8xeHIyPyQoS1ReQ0ArLlM8PUA0K1VYdCgmYnQrNz1KQyp6VjZmOCVBQFZmZV96MjVHOWF2ODcl''@;'; put 'put ''NCZwMCNWRW9AN2QicSUxRl4rfT1rWkRnbHFYI3pJanNLTTlGR2V1SmZdTTZZK310dXM1VzZKfV5ZamM2PFlZPW5AOztOLjl8S0Q1MkomR3xTJl5oV2NifTVEVTQlOyhNWiJ6K0kxOjZOW35oOG08eWdqZGkqQEVQO2koK1VLdWhreX1pZSgmKldYX1A9MWo7UHxOeSNmfkF2SlE5XTQvJjkuM2Us''@;'; put 'put ''byRLWXpxWE8wY1tHSStOKWA2MDAuSEVqZExuOTJ1eGxvbD1rUEomdS40Nj0kMHxYW0skRHk8ZCEwZ3NvQVJwO253Jm0+c143T0QyNz5aaVRqQT1lYjAzQ3FDLGNYQkJhdGcoKDhAdX1sOEtFQj4zP05ycihSKExGWFZIMWVRRC5lK0BrSnpDKlVlVjM7WXVCZTkhbEpsL1lqQERJbS5bfXZHdCpS''@;'; put 'put ''Oz9RNGY4L1hKQ21fflNqN3AwcDclYiwpKl1Jbzc5I2NTNnRMZjg/X0J6bUg7eVpaNk9NTXksfFlJcU9wNnc2aG9CV0U+bWNJKVRFdGwrflV6akU+ZGJCaiU/YzsvY0pwWGR7KUM6aH4pbmNJVHFWc3UjPmA6UnRFMDZ2Tm1tbiI0QmFhc3ZXN1s4a1plYXAlLmhlOj53QWJtZz1aKEMmIWtvZGxB''@;'; put 'put ''VzJdbzNZMEoyTFR0a34ybkVxaE5KeGl8eiYzTkR0cjMidl5QdUAxRklGcCtuJUhpWVBXM3EiYHdoOzRSZWB5ST44b0pBVkBXKSNlbHRYYWx6bFY9cT5nYy5QUHkrWFpvWH5JaTx6ej87VFI/PTliJElKWU4+UEtZe2hrOkY1NShRUElqQE8iKlRZIlJQM3E1NDYwXj1KbmtNa3koJkBVemBtblt1''@;'; put 'put ''VGlPOmk2YjY5Q18zN3koITxuVXRbLGNbLG4qTElsJj57fDI3bFY2ayU3NSFaaCY5R10ofDhAKzB6d1VEazZdMzVEWjFUN3gpdF1TOTEoTEdfbmpnb1QpP1o7fm5kdS9+RCxbcD1+RHAhJUU6LmtHOiIkeTJlcSQqLnlqZE41TkFTSiFyZyVkbVk1ZGsiQEMlfiFbSSlIaWs8PF0sQSg9KnEsXi4z''@;'; put 'put ''LCV9OXtneHRpLjVMQ11bSDh2LH02N0BHSzVZfXNPYHE2cGliLks2KU9GJGA3LzxzNWB4RChRYCxaKWsiIXRPW1F6VE1yY21kUCxoaVc5cyIzQWYiTXJpZDUhcm0mRU5bPmpAc3NrTV5idG9AWWI+ejdjOzBARnNzZUFKRmBYQzYzUzB9cTc2ajxKNXJEdzRoL1R3V0V6Q3guUDpMYnA+IU5oZEJA''@;'; put 'put ''YWl7ezYwdUQyZi5rZTt6X2R7LFElUEAufCEhZVpWKT5RdWQuLkxWKSIrfSZuaS9nNmp5dio3dlpzNGQreml8JW8pPnQqYnJCZGpGMkhBOVRrOFA0L292P3k0JFtJRT9BOyYqXVhUVU11JWc5ODddR1tbdzVeWV9sOl46XU1+VntdUSlELzY2bzF4dX09VTtJcVtWLkA9L31HRi50TClrdiphenhL''@;'; put 'put ''TV9iJHt9eDV6UmdYbkJSM3lGNW9OWj4pK0BlRl5ENHdRdzdyO0xJQFRjNm9IdDB9UHVQNkhFM29pZGx1b29MfGsoeFEvWmw8P0hzZkxhN1ElQnxOS0laWXw8SE4kSVhrO1BqdSk9cD1DZyQlaSw5aiFMNWEmcGppditxQj5xdTNPa3RLQCgqWStMJTBqLis1c154blR0W1hFWF9HQERHblQwTk0+''@;'; put 'put ''dDIoSDt4Q2o1THpjPyZ7Zy8+JF5aSUs8MyhIdj9MU1V5dyZtdFF1LDUkUTFrLnZEWkhmWk9UKlFBbWkrfnh7JmhPU35oZmB6PT1+Q1hbRUlYX1NpRSNvWl52ck4iTiNndDNXRzlnYzUkRzxtZ1J5eWFjOUI9bVVjSCskX1AxJXMpSH5pT1lLUGNtSDVXSSYuIlNzOWkrdlFxNk5eWXh2a1VtTnxU''@;'; put 'put ''fWguTWA3ZX1COiE6IXlZT0hxIVBVZCtuQypaZF5lPS9XczE/OllZJnF0fWtoV1R0KTpzRzF9RTlFPU1XQHQ/ejxYU29PNVd3O2JVQlFCeGljbFFyen1ackdrPzomXmYlODA8Jld4RDRVNnRfSEREezo8dHBoMF03QkMwPSNsQCEhIUlRbUtwWHoudX1TL0RmV29oW2gpen0mKTVMSkkwRThIO1hL''@;'; put 'put ''RzFFV2NuIWFEZ2J0TihZaGFIbUR4XkRoSCNmcmhFd0BeIy9zKTw8RHhDN28kR0pKTW5oRyxxP2glPy4lIz0ma1lPIn1FZXhuIjkkKExwMUopNiI/S3hxfCxYbSREfDN2Nj1faUBVWHdOaHR+TVtEQlJdfHxFRiJ+Vilia0lMez11OyV+Q3J0YEpAa095TVFtc15AY1VQfVhxTld2aXRRI105Lkw8''@;'; put 'put ''anlna05BZ2R6KEdZZ21PUSljPk9RP2IicDc2UUpHMnYoJThjWnRJbVl9KU9TeCteJC8waT5+XmwreUMmO0h1PD82d0hOR0hNM3dNcWlUNTxlX0VwNSReRUI4bytwSjVNe0doIjBqaSJ+ez58UXI9ajN4cj04elREOiV+a0lVKnE/U3x2ZCVAR2JramQkc2RDd0Q0TzRjRCMrcGhSUFspeVZTe0ph''@;'; put 'put ''YF95Vl52KTI2QjZOXl9RIXE0V2gqNCs5RSF3e24rUXI8I0VkbFMycWQxNUltVGhvNktkci5ycjwwdEAyTmksa1tAIktBPi5fe20hK3xERjJhJm94OCMxdHFWamhvS2x1WTBnQ0FtW3x+QV46ITEwJkB1UFNnMmJeNHxtI2lkJH01NzIhUjRHTHEyZD96Z3EueD5FR3UsXXM1JE1bODU7czpKMCVn''@;'; put 'put ''Mkh+eFA8PE9pR1NJNG5zdnN6RlE8UTdmMWslO3IkaVB1alFJImFfTXBWSVY0R2d4eWg1OFR5KUp6V2hkKz1jfl13WDlmR21zdSl4dTh9JDBiSXgqNlJ4IjhYQXR6NWNefGtOaFVrQXB1VEgmY1Z6WkBoTV9sZy52K3BaWyx5Tnl6fDVedG1AYix3Ry9mdyh0b1hMIWF0JTw/dXQ7alImOWUiYDpg''@;'; put 'put ''KW9SaTspWmRiOS9ffDBxKVR8amc+PlpDMFpabUtOZkhOYUwrWCZYSEFzeWN7Uzo8U346bFM2XzoudTFSQStTMUdHJDtiNCIufTt4NEhNZHIuS0pjVSh2YnJsTjgyUjUsRlVRRVReUiVpNGt3dVh2RzZOT3g0NylsRFdKYiQ+VVVrY3FlXl1+VH5RbFQkVHxNQGdwPGVRc0NqVU08UWoqfWgweDwx''@;'; put 'put ''bCJMUXA0ZVBzYGRIJTdiMl1Oand5TWt3eUM5XVpOVG47I0I0KF9+SCE0ImAiMCZAJVU9Rz56fVI6WXV4cHlkRD57IyxfT0skVzlQRVpUcmRHYDdtPUs3b1dQdDxDfiMqSUV8OFQ2fSEkR1dYQnUzdSksQiM1RDR+QVM1PXIwMjxmJGcsW3x3UjF6RDN4UXsoN24vRSolMTR5VCglTV5eR1lxUnxT''@;'; put 'put ''XXsqY2hWbEohTXMseVtpdkA9QjgrQDNBUXJ8OEVUMig8OncyeShBazp6fDNTZD9PLF5SK0lQcD12V24lSDgzYm5wSiJrSXV0aHs2VFhvUih7c0BHY3BSXStJKDJ0YUF7fDpSeGJuZV9gTjtffXtHO2RhN2w9VFJVeX57VWRVczpmX0RoUnBKM0txcGQ4aC5mfC9hOHpOZX5+MF53IjhKUjc1fjRs''@;'; put 'put ''UXBvM3xPdHIoI1FYUy5KN0VnVzU1S2AzfSNSN1RjNkJMe0s7SlA6KzlnPCxnYzZCTVo6QFc0dEVWbFB3ZlRtVSxeUXVHXTkuR10maS5iVUJHfHxxTCh2JldecWNaYCluKUMjL2YkZnBUKm1lRShnPSh+OilDbUosRyhFVTZ+QXV4IyxpdTlNbzFCLElvSG9xPnlRJHk3V111UXxzYkVTbkxLcF05''@;'; put 'put ''VSEjOmYkMz5JVzFxV3tPYEZAdkBEMGtZUForWDhuYVo6UmU3ZjkyWmhJQGI1TjxSRiJFeCQrOkVMSz5ZNmFbe1piNCVoNjpsRUs+O3U1OUt9eF12ckEmZzIja0picS8mKzFaUCJqczN7anxBRXxBcW1mcCwlVTE+czxPY1hdU3c0bHdpOFsrI0hwPktPQDh5TlFzYywmJmcuPER9RVlXPGdSSXFk''@;'; put 'put ''b2NwJmhJYVVLaVE6L1kxX19zfUthOm9BLFM1UihxUEhva0RRXm4+OXclblZ2Xz98PjM+cnlhbUk3PFdbJVpbNDBSR0ZgRWBYezw7ZHpwNkJ1dCZCLy5AbDJ1Z1goWUoxVVBMaVFXNXZRTHEpWX19MVsoTTB4ZTFNMi9ZNj5nZmtRUzh0QUYzSSZDR3tGT1I8ND4oSVtWVUtPZVNyZFJdLl5YLlI/''@;'; put 'put ''OndwRHIpcnxPW30+N2QlaVVNZmFFcC5FXXd4TmduKE46Y3Moa05NQGBLeXw+PlY7dXdKZGNSNXpeYEA3Wn5GdklRfGlHcChIPmIlVklZZG88fkAxXnMxSHN5K3JPRXttP3UvUnxvMThZRjpCflV8M2kuP0NDY25jaj5qXmBLQGRJdGhTW0phKDtiZDM8UUd8TDYvVjg3ckxNNyhPUVpwdShrN1hW''@;'; put 'put ''ezVDNHtYWWhgcnl5bjJjY1I1elp3SkwjNzwyX0ZMVFI1L1h8V246ZiFiM1pGfEN6Y1F1XkBKcUdoVjRzd10odDBFejo3cFdlSj1kSmdXezZ2WVk/U25RaH5LW1c3NXZ0ZCIzeEY9ZE5fYkRfW3JLcUgwOW9qOSpGcHlabE1eMT5AX21GZjohLlcsbmtHdCh8WV9WKTAhZS9SazxWLH1WWDsufCpo''@;'; put 'put ''Sj9eelY2WlZab1hhRlhCUXR9b3pFLCxkKEw+dktOSiVqVz0/KGhYcDk2MnQjUyw2K2FedDg6RStveXY1a3Qzb0diWjthN21PbW0+TS8jKFV6JUBwbT9eOkt7JStXJD9GU0xBWk1EOSFdbXt5Wn4rST5pTjEyUkVtRW1EKyFNSjo5b283PHRTciMmNUVAWjdHRWRkT3cyfGpCSyU7bFpoOSVpUyIi''@;'; put 'put ''K0BmXm5dJnR7O1thOVZyV2dCeDNCVXJNI0AkZDp3W1E3TnA9MklEYHREWnZSLHI1TDVtT0ciIiIrcmArfHNYYkg5fCE1aClbYkJYN047VXNLUVdNYDtMV01YJUQzdFgjQ0lZVHQkKylnQ2c4ej1OYFVWdztkWkhHSXslLDgxaW4rLEN4RClnK1VBViNAej9JOEUvYixGa09kX3p2XWFiYDVld2Q5''@;'; put 'put ''aVkuWG9kOHZDNC8yc3p+YiouYiZxbVRseUJLYzZ+fTc+ajtkT2JNL2U7MXBiOkVnN0d6SCk+U3tUNjNlWzZAdj08LEwwbT51dVcybHBGNDlDWChCbzBmQW5Yc0t2dzpacEM7aT90bkE9NkpzRj5lJXFyczUxblVoODQ/L0Y+UCxlKTlBQiZPWG5HRGowcDBwO2d4cl5lTXJ8b0w3VX1PfiZtbzQv''@;'; put 'put ''fDhfMWRRXzE7MD5rRW1NY2Q5eUhycEVjeig7UGl2WCVfcWR3XSFUSyNlWjc0RDA1fUJ8S0hJb1NPX2RaWCtdNnJ5XSM6Tm4me21iTXRQdXQ0TXt6eEsmMko5RVlqKWpbRXg0Xn5CdE9NRCgyTmUlY0coaDMxLDVkQE8sR1pbZiYyZSsyVEF1QzQ1PTRJYVQ1eD5FIlk7PHN1IjZ0b3AhV2U6ZyE+''@;'; put 'put ''cEo8RnlpeSwsaTBmUzwrPEh8c1lteylRZ215fXZoNDJQKFs7Ym5Pc11lUTlWbyJyNmhSKHwySVdmMDgvKX1Ga08uMFJmMG9yRy9HbygqKEtnXm9oaEdJVzhLbXh7Y0I0aT15aVNdNk0sISE+Q3Vucl5zYFRWMnc/MHQ4L1JbMHR7LmRsLl5GbzpWbmJmLEN1ZnVROTwrRjZTfWRnKGgjb0Imcn0z''@;'; put 'put ''X2t6bUdZams2VnBCcWgmTkk4Q1UlWlVWUT9eP3AwLDhQK0V6UEhHa3pOLiRNUzY5OGRkQWVrclNQZyljMylgfVlCQEFxelcpJkpHXkJyfCFRX3AqZl9xaVFOeEp6ciV3UVtCK31sJElaIllZYyxpeXFJJT9BTjdTO2wsKnFNZkwyMWNBVTtJZ0piInY7IXA+PnZAVWlxW0pxNV8lZ1oscmBBQlo7''@;'; put 'put ''NU8mfSk+M2E3ezkjX1l0PSpvQWhBU20zVT0ofkUyaiY9WXVzPGxCPmZfdWAmMlo4UUxmInJyITtANHFaNVVXZltmQX1jcFR8JFooUVA6NDNHTDh+MUAvZE83UTRmSkdKPl9AWCQsdyVkMUldREZOIUN8WjBfRjR4Wz93JT5dPikqY0dGWjJENE5uRDNrS1FeM1FuT2gqMn1da3p3TlYvN1kseTVm''@;'; put 'put ''YCM1LDNEO31oNzFqSGg4Zn4/KkFBYUVIN1JpIVREWTl2X0U8L3V2PltjNjpZWUpFNGt5RFpyZVUqJS9seihDM2p9R15zUF16dm1zJEUmRnhkN1QicFRzMXhmP19dNGpON2k5MHY3eDtOdDhBfihwUlVkV1haV1kzPiptMzxZWGoiWFpFNSZlI2FQPFoyOWhxWiRdekBtWTNkY2Z9W3Nbc3xOS3BM''@;'; put 'put ''NlNaOyxORW4oRG1KNmB5WTQhWiVlZ1oyIXdtNU99JjtrK15vczpNVm5ebSU4QWA3PnUwN2kpajJXbyI6YFJOV1RZUTshPy8mbFY7JnpBXyRZK2tOMlUkO3A5aHQwVmw4SSo6WE8wP0AiYnMySmh1Rl1JO2ghQnc3Z247Tj10KmRXJHJQcUw8Nyx9LjZLTzNWWCsoeGZyPDNPVUx7LCwmI3VrSVJg''@;'; put 'put ''TkExMF1Naig5ZGBoVltzVzhbYV5RT0QkPD92RiRsRDp3XyZQcFMoU3Q5aEFLPHpiSVc2ZEQvQUY8QTZIZFJqNmY8bGhtM2hDMj9zMktBRDZYMDtwZmMkQUAkbVlbcCo5ITghOXwxSFZncFNPO0d4cmNuT2pbPFZoPXUjSnlfK0dGY0puTV1PLnV1RCMxVkVvPTFKUnVLJH13UVRbcyRjbHV7Q01m''@;'; put 'put ''fWJHW0FsUTVDU0NOOEFXSFNOfEwzOTgoOSNGTzR5eGExU058MXlDQFMzWE81QztsfFhXcE58QDNnbWY8VjUyNWwoeDpMJWx2ZWYpQG8jKF0vaXp1fEpjOUd5UGwzOiRVJkNpYU4wUGxGKzQrXXUxPmBIITAvSDMvXTg2cG0jN3s0ZF02WX15bXxUeFtUPyNMOUZCZFBtcT9eVyg1Jk1XITwpSTBl''@;'; put 'put ''Rz0oVkhGa2VNbTVyKm5eIVBAZCFJUlJBX2VRYk4hPm91Rzw7T0IiLCkxNip8MzJCRmtlQmIoLiU8bTZ1SyRZMTRTc21hNVA3Ti5EMSEheXdUOXhBdEBMWEA9fiRfT2cpKWokKVQ5OX14LDVRVCsvT1dIYD91NnYobUd8cnl5bk04OXt3Wkk8UT0/I2h6UXZiY1tTMmc/Rzh5OE9XJmk5ekhDMHQl''@;'; put 'put ''MDdTcm9CSis6ZzgwVUdnXS95JnF0T35CTlJNRHdTV3AkcmpuKXIxfCluQWRwfHlMd0FpVmElXzhCbiJ4JCNAZXtiaG1rYUVuaFFSfXc+ZTV4cnYjIjlON205MmExZy5nWXs1cXFxbklmNVZvRil7Tm5JTTtqN29KQGIsUE07eCFUI3VpL2c8KDY3MTtqKW5Yb2tQdzE7VjZbYGJoKUdAb21+Yz5V''@;'; put 'put ''YDYjcyxnR19McUMleGM4NFEudThNWl1+OVR6OHpSPixNOGFfeFF4LFZkdShtW0VyfWF6U3A2M1olbFFqUSV8YC8vcFpRLEkzJU4xMjtSMUtkbkBnRzpwWlFxIVklPiJra3wxaFEyLCE6QEcrWlA6MXpfe11SX1h5I1FZNHpURndxelVrek1CKXRUNEYveyJxJUxMNy9rXkIybHUqJDIyRS5EOmFS''@;'; put 'put ''dlNGXzN2LFpYczpXLzo1czFHVTRIbDpkQHc8bkM8PSojeCU2fnNacz5nOmZHeGx7d2Z1Zj1WZ0pmLkd3L01yYWRkJEdJJiVDL2Q6VTtERk9DYzJGWiYiS2A8MldfNzdyKl5hXmokQEQmOWlhTSE2X1IhaSRFbnN2aCQvLlZrU2Y7dFBPaU43VGU+TkBkbkx+Zl96LC8mMjdpc2xxU14sSFhwfWxF''@;'; put 'put ''TzxVWzFkbD9bQHR8W0wqdCVLW2BXKzR1RD81dUQmWSF0X0lMRzM0KUJlNVUpXT83fn40SW95NHcvdU12KTdyKl5JJHcwIUdlKGNZZ3c9PmMlQ19jZCRzKypzVzQvXjBfOi5EdHVNRjBWdmd9fHZSPDs6a0xmWSNsRCRoRSVJJVE0al99a09OLl5uRl5kKlE+LyhTQnM5d1JgdVglKVpMR1FIR0Fr''@;'; put 'put ''dmBdMEdlbEcwckgsbSk4P1VHK1I0bkF6aSRCZ0ZFWHtSUnZYR3M3PnhnMVY2Iys/W1F2R2cpZTB3KT1HUHU0Z3NrR3NqYlRKeFowZCpFSTpKVXlgK3J9OkQ4Y09xZ1JTQHV4Nksudyl8aUt+X1dJV0AmV3ZoK3RqYnIhZCh9NVo+YXRYWUEsQkZbZUxfLHB0b09RJFF3VExuLjlhRyJWamksS3hv''@;'; put 'put ''K2JvVHhDWWJfKisvci5LIzh6O2J9d0YweVtCdFdHKEUmSXwmX1IkOms+fGI5KixEPy8maDZhdkFYL24vZFhnYHY/RmdRTn0lZzVyTit+QyNnRlA1Rj8oR3NEVHV6THk8WnNyIVg+c0xXM1ElSyhfVkt8fiNLe1tVaHs6TTk8JTImV0w2eyVqJSxdN0RiKzZ7SnZDM3subFYqezJZPm1GZW46VGN3''@;'; put 'put ''ME4iKkRVUE5tJil1dn56Y0BKM15afUk7VD0/S05OR3NWT2Q/Oj8qL1o+eWcpbjx+VD8kVFFhL0R0TUBmeTMsZ0M6bE8hIjE2IUhAezxbWSZYKjNhazgxdz0ja052aHxvKEI8KE1BM2VtRyt1YiJ+T1NIfTZzOV12UU1TN1IxJD4rdFNXN19ZKlFUXjpOVWMxWDdlK0kmTWlTJiwhIXxFXmkoUE9v''@;'; put 'put ''LENZTWZSVDQjPkMkQXAwR31uZmcvVGoyVyMxIVc8JmZMbiZBaEJTPGU2SiZ6Yk5yaFMxZmYuZ0VLaVFdJU8xY258ZV5YUkJEPX1vJHIoRjE9VTVBVSJxKTFnS1dfWkc1OlsmKm5TYW46VFAvJHtramFNO3tQfDY8OjJebz8wbGlqRntIVj1xY35PXywmT19zRFY1LiYmTSM8JmZlbVo3MFJLYzxT''@;'; put 'put ''OVRLSHd5clliYiVRWSt1OUBIcGFTLDpjJXtJbGlqMzZEPlhjQXphdzZXdWw4JkYlTTtDVDpGZSx4cShxVUVFWD8/JkZvYkkzIUUzU2VFNWpzdX05M0tCMWNhXkNFYVp4ck5DSWhOXUFuNT40JlkkcilFPX1QfEFUN2JBOENOPWsmU0BQTnR9MyJAQUc9dj1KcCp8R0NdVVtXOlR8QH5sXz5oQkA4''@;'; put 'put ''fW5AODNkfnBXK35WWDxoajpXO1c6M3JvX2R0dC58bHpVKG14SGIqZT1uZWZXWDRfRSxZOzYlOykwejElMTxHempJWVV7Ll4waEtJRiVQOjp5QTpUTWMlM3kjYi9iOyFeeWhELEJ1dVk7Y0VhX3xtR0ZLdCZeOX0yTG5NLmN5RnBhR1hiTj0rSVdaWi8xKElXM3Nzb1F5Mk99W1YrbjNEVVUxc0Al''@;'; put 'put ''JG5WLlREUjtQcDJjXSMkdU5sIjo2b2lbMHgwL0g7PjsoWmBkWnlJa24hfk5jTER0PjJbKSpMIy5rOmlAS0pwI04wbj54MDFCPXdUMTJjb1FkOEYlaGROeSU8SzptNSl5N1RWYiFCRXw8PmckLkxXeyl4Zj9YKDpWQSRvV0thJk9iQl5rKnYjPz1eezNoL2dHfTBbezNQZmJEUF82dV5BKShnQjhF''@;'; put 'put ''YzI6dERQeWIxXThVRDZXP2A5eHM8bGN4PklbYnY4LjZFIiV8bmglNFVMUWRgZGVhb0g2Z2VjfU9kWXVXcytmZjleYmNFMitZSjlQNW5pWm5AQDl5azdqU3kzY1I3YnZ1YHQ4d0lLQ05NcVY4SDMiY2xaJiVsXSZ+XnQpYWl2TEAmWFh3LDNqK01gU09VUTd4JWE3SFZFTUU0Sn5IUjVSPGhENSp4''@;'; put 'put ''I1Q7b34lLi93UUh5bU9qWDl8M3FMWip8Zn1gfTNTQyU5b0k1cEw0ZHxIIzpXRjddS11ZQ3NmKCgzJUpvfkRFKDc4fEcobGF9UDZQOSt+JG5qR283aU9+NTYvaDgvOElmS2RTLGIqaDdMLyxCeCM6TlUkTXE7TiYlMUsubk07TitYODI7SkowZmVJaWFNKHtlSF5xSmI6Y1RYbyRWP2hHfjFrZ0VD''@;'; put 'put ''WEh9Kzt0JS8yNnIodjh+LyFaIiFGa3VDYUM8V3JnMTVZLylVMGkjTTFIQ281a2FkQGBgdlBJa3ZBaTtJJEh4UW83eyxoUi4+PCVRUEU6WTlBV195eGJQU1pXOFI6YnJdOXFdRXUlY2lSWWA7Ki9RbEtsNzU/IWdrcC4kSFp8TzpSKi5neTdwM1FRbHY/JGBDdn1JIX5dTG8oYEtsR0wrcyUuQHt6''@;'; put 'put ''SnV2cUZHK3VaeUZHPHo1cFJ4MjJyeklgJDU2eG5zT2JnV09ALFUyWFJ3d2VIQDZaNUZxJF8rMnFjbHxwQz5nND1mU1RgTUJ9d3xscCVRfUJOZU99S35fdyIqcik7TzUxXXwifWVuT0BDXzchVTo6JFdKd01MZGIqQTBnK3JddWg2L2x7ZShLRi9dUSpzNUs3ITEvXXh1cXY9Zj97RigkfSpeSnMq''@;'; put 'put ''fS5hN1RsOmJDPHZlJXRraGIzN1g7YjhTPj9+dCxpZDJXP2xzSSIlWiVESyV0VDFrUWhrTjEyYU0hSHpzJm9zRyRzTHtmUW9FR2JMMVNkRCprVCRMQkd3MDB0OEBUaShUd0dHOHp9M19kSTZyMWhMYFgyYV09IiUyKFF5eDc7X1klSX5+Rz4xK28lMk0/JmNiJjxeRkdQOiJvZztMUVhnMz1TZ0Yo''@;'; put 'put ''PTpKJVN6ODJhQj5ZTWUhXXY6S1haOWRjMmx1aVdwP25XaWFkRD5LdmN4dW9hRFt5Z3hrP00yUXBgPT5idCNzQEFQOXMyVXh2UVolWUxXSmBTemRRSzZJIzRBSGVtZmVoR2t4bVZRclcrZEhzMG49OmJEUVtgK2UwI2hlZUVJT2xjeDtaPG0+bHwrSj1EKjIyVmQzJjl7MCV1XWBvdDBvYyFNcSxs''@;'; put 'put ''VnFgWWoqX0whNEl6SSw8fnhTUV84byZjZSwqImFHO0wlUzRUVzg9KGJOeT0qIXRMYEw7PWZlQmopV0t9fDRkSDVLNSowMF0odVY2XTdobXFvXVt+N0ZwN19gYUQuZXNnIW1PWjJPSVM2cXclZEMpVXBAc34lIkwxY11uajlaaU1wQVBpfTlBKmtNdDtaPTp2KVMlY1c1OWF7VV5ASFFUVCtsVzV2''@;'; put 'put ''SVpXcmo0ND9tV2dycG1wRCwqO2s/PCxzREZHNWZsM2FvUWo0dyVXWTJhT3IpWV9JTmZ8a1Q5eWliOiU2PyFvTk9kR0Q0bVE1a1dkcytbS31CWS86REViYilXS3tsJXh+JHAjOjFqaVFNTD1meUtkeCohT10pWnliOXtqL1J6PllQOzNaL2pacWROT25RVDsreyROUHtOW0g1Z1J1Kk4ibDRAPFBF''@;'; put 'put ''fiQ5Yn5RcG5qfVZBfTVJYiJtQ3t5ZnNzXW5MXUxJeFFUZmEyI046VDxEeG43d3gxN1haWExuTWhBLyVpQzdLYWZ+ajNtQGV2WG08cSFEdk19W0hbeXs4VlFgZF94IiRFcnJnPzdERUV2TX12VlZ3cDc6QUc3OVQ0bk1Qc0Q3RWJmYGQsPW1MPVF3ZV5CJSFyLFg8YEg0MmFGb2hmPyE2MyExJlBF''@;'; put 'put ''fVckNWpMJSppXVNNZzxsJmtDN0thZlNeQ0Y3S0RVMUshOFBAN054V3liZVBFLmR6NVhHIlUwQ0FbOSl0eUNlVTNYaVVydi9JUEo3PVhMaXd6eTRMKEMla3JCdlZ5KSxVWU1sR3MsWSFoZWlaUjJFWlFKNGA8R146eTVoXShtYWFdW15TTHdBcXZiViRMUGlKKzxtcl9peWMhIXFSLjFPVFhvd2Y/''@;'; put 'put ''W343eDZuZXQpOHA+TyJXM3BzVWojYjdFcjM1SGVvL2tLZn4pOHRMcmQ5fGBTPWo0PHxXU1ttOio3Zix0PyZoelJdZ0lZSXJLSm8raCZqSU5YU1s8c1pnJnxSUis1VkB8fnlxITglcUlOOEUqUXdYRzRQOihIOHpCezUxTUhLfWFnaFpvOFJqXz5mcztyYEExeUBLWlpYaD03TlVsdDlFMzIjfls7''@;'; put 'put ''dFpQayhmWjkmSG9gaVFOND4lL187RjBkSSZtdE43RX1IUE9fOUU6fSk4RTAvTTwqPnI5KEcueCI9XSFvPH54VEFyInBbL1BxNihIckF7OiVqKGtTcyU5bz5MNlh+VDE8Ri5OJTJyYT5gcz43Sk1vKDZYVmZEXU5mcj1JYGtMLGFMTyFEWDRKZDQyVnVOLi5NMFs/N0VFUCVEPGdtJWJodmw9djhQ''@;'; put 'put ''bSEoNmZuflMxQ1l5JFIxeCo2Xn46Ol4qMER+bFhPVm4rJG1Gbn5JNnUzfVMqPnRHWUlePDI+PlE6RmxgZlIqfmVuZlJURTtWUiZ7R0RuLm44RW4iQyE6ZEw3VCp0Z3I6aElyUy9Pe1lAfWo7SFtiVTRHTWYoPXV5WkBEaS5LTV8kUD1oTE5ZUTROfHZtMEVtTU05K0NBKU9mWGBpfTh+eD5vYFBt''@;'; put 'put ''OkxrUT9xPE16Q2M4PVBSalYuQ0dAZnhLaFdFYE9YXkc4fiY5MyIkVyhsMGtbJmZASCorMUJ1bjM0ZjV8eDw4dSV9OlVKI1MoKT9nJWRlWCJuLCpoNSVJPyMyWiIkb2JNdHQ5NGJdVlNmRzxXO0YhbDozQz5qS0wyW3suclZqT0xCKyRnbl4xRzwycXxmcUsrQVtbLHVWcHdgXVlkIX5wOkl4OWMj''@;'; put 'put ''Zys6V15dM3ZZfE1wKHZvUVReJi5rZCwyQCEzYzxLbyFubkxdMzJCNzZ6Pz83NnljRiZfdjdtTzo1aXszNnw3SmFKe3xmKyZbXUZsS0duaDEwN0NJZDQjdnxidyoqczEyJT1FeTlJZHY6OWQ8VygjVDZzKksjJH5IYFdkdl9uKE9xbGx6S3pUYXlZRjI0dURVeVp5Yy9vfnI+TGBKe24oMGgzPk8r''@;'; put 'put ''Y356JUJwTl8jNiN3LDEiQSVmTHZvQy40dURjeWh5YmMrcityIywzSFd0IyxOKzNISU15WEUqK3p2PH4hOHklcSwxSU1tKCI9UzYxc3pfU3l7cHdMe1tpaEM4TW9yZGAmZTElWjdOJWhPamprayNfZTFIK3N6ZTpIa087YEVPO0paX2NuMm1OZHRYN353RCg0c2lIOnlxMGFGc3dkdGExfSIwO0o7''@;'; put 'put ''Slt9T3xwfDNpaV8ob2JubmBLZlo5XjtNZ2kkWURSKkkjaXpGYTJtO3RMSEAqQS4oR1BlVE1MSjZIRXpSJUgkUk1EZkBMWlE3b2pSKFZ4eFVwPW81X0Uqfmk/cWdRSG5FbntKNVBMPWUldEh4TTR6QzhdLiZ6fDMpLFNGMW5ie256PFNMdVFjW2NQOFtJT2l0a24xQDlkUSRyc0I+NEskMi86QkNk''@;'; put 'put ''ckN6fDd+JGZiZmw+KiZqSH41I3g1eXpzWlZYNiI2U3NiVCg5R1pkZy9NOl5KQD1RSWojJVNGIndtdyJjcztFWjM1N08kfiJPPSFaM1hmeFpPK04rJU9PPHgkV1NCWE9xTFRmZSZaYThacEFkTGU0VkRaSllZVllWd3l8SWJecHp9KiZATClaZip9XVA7X09wa106WWI3MyVpMnBeUnM4bz16Q0xd''@;'; put 'put ''MGtZaFlXUyRpejg9fk5eO157NjowV1N6c3k/NlU6LFQmOjA3VC80QU1SQGh1MnldLGUoP1YsVm56PlE+dDdyJWhsYnpCKzV9eyw0fl9ZXmArQndlQjk4OnNRYzVdelJhT0M7ditZJmUxb3pFW0FHN0tbS2JybWlwUDRoS1pLK1d2IVVdUSVLT1hMQGx7aHh3Uk9qWStrYHV8d31TaE1ASEBVKCQ1''@;'; put 'put ''RGNpJlIrSj5TKzNvYVh9SyNNNGFrdG5gSGBTKFJXSFZNQEhAa35lRmQxWUZ5fHd8I25PVz5RV116TF09PipBXmB+NyN5bXdRfEhdVnJJQUp6OmNGQC8+dn1FUjUvV1lWcFN4LkkiJmB0W1ZCQXNZVnRaKCE3eTZxUkJRWC5kYnBlVXNWO01PMW4sfFs6VWN1Yys9MkVGT0k+ciYrSyMkNVIkezxD''@;'; put 'put ''OXVzbEtIeC9oLFY3VERvNT4zT3RvbGBFMywmXUROWDpbeGU4Nix+a292WHpVfk1qeXl5aHksWTJCeyY1S3NWO1ZIVjZNK01BfUszc0AkZkU/ejtpUHF9U1guJkEvZ2NwS2p1amB9VFQ3Qi9xSztlUWFKKmFjL3I5OztPWFNvOVQwZmYlYXVrNHNuS3RNWG9SamVaZXV2NCNeS1AlaHl8NE4rW3NT''@;'; put 'put ''ck5nMEs6Ki92L1kze1k6NVVgZmw2bjlTVElyNUx+azU3eCJRMXFrKD0sdGYzPUNjeGx3eSNFPnc3YCJSJEJnbWE4blpzIjRNRyhmS05VO2ciWTJ6Ll8yVXxnd0csS1c5SztUfXZfJE4zX3J5bjQuZ3t6VDIzYWBIVzd0M0xMR3dKdlJwPFZjaDp9X1dOS1VrQURpUSZ8dmtJU3pZdnBCMjp0fENI''@;'; put 'put ''QEt+LFlbcWZHXn1fV0J1LDUrfH1gInNnOzR8Tit1M28sNGBed0hveSshUFt7XUxbe0ZgJnxoMX5VZFB5eztKUyo1eUAuYEtDR1owKzVKTWVfJkNDKmREaUBMezUlJk1+PGBnbUoxbih7RzRpJFNUYyVwNWNXfj5XJXdSMTpHYGBSXVhHJHpycH5seDQscHgxeWI1SzNgbjgvfWB1NTFNWTU5WTgv''@;'; put 'put ''JCpbUHRrUzJ2Y0J6dCZsWndZPmZAbzhZVm9MN2BUIll1WVYmRGtiNF1yRH5yeWw+TzRPT1BOR19WRzZkezgmT1dAYzp0cE9sJmFwJWJMUzZaJWYpZHhJTDkhUVcrWU99QkxKc0MoK2IjbD9bUD5wc2QkNmF3O2w1X0pBKENzWF87OD1nUiFtQjIkN3xTI1RFfHxsV11ZL0N+PC5bYlU+V3RHRD4k''@;'; put 'put ''O0hRL2k+XSYudiFUZ0k1R1Y+JWRbeWUkaEQwMSZnJFU/P2RoMjpMKD1IVmFkKWgsUC97IzxOMVNAIjh+LElneXpwUFBXQEMpZ0N3V31EWlhAcWQ9IVBiYyQkL0czJnU4N0FwYC4/L0YkNlgqfTJeUjpfMWB3dGo7MjV2TSozY05bbDt7Qk1kJjVkSlhZYmIhUT0qdXI3YlI7MnNMamgjMHcvKTs5''@;'; put 'put ''Z11CfmlRTXJ5Ti9neD1RdHE+U2EsQFBlVzJeaisxUTJ1eEdBdig1TkFBV0VmTFBmRHpONT8raU1GN3YoX3FRYjJkMC98QnZPPmkiQ0QiQUFBQUFBQUFBQXkiVFA4Zm1UT3BkcFlyfHghcChMaUU2MHQ4bmF1TDVdJGpxSXs5RVd7VitWUjRkVUkycXFUbjd4blpOcXFlckxyaWpqbVdvV0d5aUlZ''@;'; put 'put ''aVhGL3YmSyQ6Q1laazlhXjZpamJsdjZVTi5FMUR0b3F3Kl1ASDguZzFAVCErdXNTdihSXSZUPFJDNSRlLDg8UEAwPTQkK0wmeFRASlVAPUpbUXhaLEE6TihGfntXMCRxdW5fMipmR2BJRDQlT0ghSjZgOFo5UnhEKCIhZUZ4cD4zaGBITnx4K3NJVCtII045cDhjUyM8cyR9aThVTih3IU4wJCZ3''@;'; put 'put ''USQzIyNhK2A+PztxNEtzIj1jK35+cy9FdjshPjxZfFZzb0RmY0dfX3FTbzMiXlhiLzt+JlpSbzhUWFRfOjJFcF1MOU9DZnR5dkwmWHZeb3x+eDNEd0lkQGh8azBqUyxqNnQ2S3hiZEBQNF0yWGhGWzhrSzp6MSpeZiRDd05JaiF2P1AwM1QjPkxYLz8rIW9iKW5WdkpmLDp6VHsiRSJpRD9JdWci''@;'; put 'put ''YDRkTmZFQ0B3dnFFOmxDTFcmclcjTCExJkZafEdMNTI6S2UvY2JfX096ZHhyKkNfWF95Y0clRVFGSiJ+V3lFYUQhT2RMfHV1TXNTZ3NBKUk8ITVeOU1gTWJTdiU9dXJ7ZX5VRDNrbHJTdjBxZkZ4MyIsQyY1cWZvYH5jYFo6c0FlJmdxXk5+fU1wN0B3PyVuMFFMOlE7YU9XLHNHWnQ5aUJTUypn''@;'; put 'put ''b1RzLzw2Nj9KWnpRUmRaeiUsdDQvfVNIWnFHek84OzByL3JgX0RTVXZuJWFBXTgsXzM3fFtGPFglJS9ANmQ5SmVDN091ZS9VVFJYKVMrXzB0SiREIVg9eHBCd2ZBMXtsdVEjNG9iXlR2bVpDPERFRTdjTWtde0RaKE5sXj5UI0d9PjYxYkQ7UDJMa1JiZF8zV0JuSHR6WyNPS0pwJFFXKzh0MDM+''@;'; put 'put ''b3JgZCF9TGJHfSlJYy9XJSFmeTVeYWdzWkFuMyFMLFFHZyRWMj15bSM1cmNTKlkqW04hZzgsdiJ9ZExeNFlrPS9gIT1SRWFyWlokK095aX18eVV0ekgrTCQmKSFFUEMjIXxQKj9FNSJwbixQTThHZlg0NUlCZ2c+S2VPdGUhVSJneFhtJXVCK15RT1BqUGdUemJQdV1tQlklUjU2MkJbNDxQTyJ7''@;'; put 'put ''dzt9MS9URmc6KmBsWWBsUSF1Ml9xfkhkPTxefDAhd1owZW5Ke2UsRDpqZl1jeUFsPXYial81YiYjQDwmdDAyWG9XSXkrWSp4YFAhYFBiTnkuKmZFQjU1IXF0RjdmLD9aOjc9Rj0/fDFmSXdgNWRzels6SXlZKks+cjk3dzohbz1keixQT2cpaXE6Lm13dnh+Lz4xdSEmRmooZGRfdHd8QEAha2hY''@;'; put 'put ''ak5Udmc/Mm11NXxETUljZVU6O19YTj83dkRhYjw9aFImTG1rKUQ1SFdGNlddXTtrOzlzcFRCelc9JStaN2JJeUlPMWEjJXF9OkBDLjNFSH1ubTluKFhUMDkiQVFdRSJ5MVs/V0dzRkhtcVF3ZHU0dkdJdVIsO29HeSZYTHklNm9jRlsla2tzWSFXR21GRGRCUDlOW18jKDV4ZEBVUG8xUl5Ne3kk''@;'; put 'put ''QkJ7QjBadG5EXi5EO1kwMVRDNXI0ZWBSbU1ib3c8WEMmU1p5bFAyM1tpJmlqKVNMSX4wcn1WbXpQV1V2QjlDOSUvSEJad1ZffClafG84MGApWHhFQlpCa2EyWEkje1Fya206d3AoXkxmaEorM29wMl98RmNnUCJrbGElM0JGLGtDRXkvW3QjTTE8dVosNShRZ2xFT3k6Pip4SVY0KWI5N0FPWGpw''@;'; put 'put ''IkhdZ3FVOn06fUJsUj9YUWVDOT5xVVZMKS4zYkNqIW9RVVVgXTlDbV5VeXVWcUZqJXFqdV9SKzssd3FdQFI3YCpFSDY8Xzg7QVA7ezBVKiRNSFJwPURbY2dyLyIsdFZRc0I/c05GYTtPeCQ7dX09fFZPPTZOcEtqdjQhcHVVNzQrfEUoOUk6bkBPUiFfQi5NWHp7YmkxJGlsLG0zfjcjRUdOfj0q''@;'; put 'put ''fS48dFJEbG0zeFVUSk53RVFkNT0pXV4qZW45fSZRVXFCXnxwQE0mI2BKKDVNa1M3RFVmd3xtKy9ERVtgem48VkZ3JU85PjdsZD9yXW9FVS9Cd21EIVkyKVB0JEloOH1CRm50QD5ZdjlqTz46MWgkXWMzKF0jcDd5VmcxQWVAPTsiTShVallIRDIxW2Y0R2VFckM+VGExOFN0MCx4SEVCVCRbNmcr''@;'; put 'put ''PER4fnQpUDlsZTZDNWBPOTtOfmB4YUtqb0V8NVkoJWF7UmlTZGJeQVFDO05rQzxWbnlvTi5qZlNKflZYd3E/ZnosKX5pX152c107QWpbYFA+KT0mfHVVQDoqdmtCfXV2cjwvMEJVOXM+ejRkQGxZdyVCcSsmcFUiJGBjTkYjbzJqMW5vZmJqQmRtcmM4VWQ4NHk1an19TTZeZWZSQyo4NzArYnBt''@;'; put 'put ''ZGk9Qkg4NipVekJxPEt6dWpmNl1SeSYySFB9XUlHLG5ZMiRZN0hZeF5JPF5pOHxxPGxKLjZrdFZLP3JMVXxXaWxFQz11VjtIR2VaWVB+N0pZSyQ3UlRZJi49YS5hI3V3PDdPWzlVe3BvKmJpSk9+Nzldfnpfe28yam5GezRSPDFqOy5fOjV8OjJEcC5IZ3xmbGNAMG15cDtvWjo6Xl5jTkdJKj8h''@;'; put 'put ''VF9EfnpubD9paE5PZzl6YXokIUI+VjB5RjZUIzxDYSs4c0dvJDFiY20pQ3dONVYraiV0T115RFpmPE1TXWZEXy5yPXVtUm5hXzs/VUghSS90M0l5XXptMC5+M01KbmZ3cEN4R1tffDVfciU9cTB4ZWYhNVklWE5jczooQzZ3Zy9AOnVeR3Vke3E5LkBOVUVWcFN2WSZXeDJ3QUFzRk9KRGpQa2Ar''@;'; put 'put ''PyV5KmRoR185RFslelRSWF9hNUlzbFpVfjpPIX1hflMxWSNTa2tjN3hvWjU+JU1SO0xNeWhDLyR5ekhRYUoyVnFnI2dqanxNZWlwazldVz91VEc1MT5uSk1NXnw7TTwyb1hidmNXLHZHJCg0ViJEKCFsQUtoVCRDVFM7UGBNR3lWR0I0Pk9ZNVklbTtDK3dFWXpde3ksQDFHRGQlRHxqOTV2ZHdp''@;'; put 'put ''I2hvdHN8aj5KLnBmdGt6XVV7QnRCVShbW0ZLXXQmOmRYI21pVCNHUklCRElSOTpSe2VtRjQzXXNrZnVIdWcyVzJOKj1QeE1eN1NzL05rWHVHTVZpSmY7XkJkP19ZODEpZTI7QjV2RVRNfW4sM1thZzZsYEw8T1BYPDhtRV5YZGtXUT8qTklkZnlyI01ZWHFuWFVGfEMoYSQ5c25qVDxfUG1lVyx9''@;'; put 'put ''X0wqY3x4cG88dn5rVGxRN112T2h1WSZlez0hX01PPUNUTl47fjZ+dkJjPSF8dWtrSjRtOkZ0SmJrUTNqLkN1Vi5PNE5QeztkMz1geC5qKWd6WXQhM0BAMC9Ia2lqeU56NjVJS2lBKyV8NDFbTD08TGZKPVk1YTVUL0ZMe0VsKF9fbyNqRDgwWDlzN0loSG5SeVBhV0JOI2tJZiRTPiZje3BCIjhL''@;'; put 'put ''WWtpPVgvKTBIaWhEMzJWaExkVHUjZ354M0trTlY9PkAyRShIPSZ2SHJbPFBzYG98STR9Qmo3RlRLRk57fGEjZiJCT249WXdbOUNfZEIlRjNIdS4jWFtveHdRcUw6Vzc1PVdxbTlCdikxUFZ3e1ApWWxiMGI1OWFSV152fSxiaXhMaHt2bjYsR3dNLih1RExqZlcsXSZ7RCokQCo8UVhaaDdBQFRb''@;'; put 'put ''Qyk0d3VsKWRMQ3xbWU5Nei5XUjBuYUUyJjNuPHRQO25+Z3VtSzI4WWZjMzdzYlRSP2s0dHJkV29mfCskcVpreDU9TztCMiJybCYsNkhaPjVUKHw2SnhrNCVEJHN2TzQqWDcpcDs+Ny5FMFI0dk9DK311OHBhS00qV2xBZz9EM3JpNiZaeWVTaz4yeD0uTSU9Nz4yPzlZPmZwdy9JJHBEdHJuUjMp''@;'; put 'put ''Lno7aEw4RVtGQElJYikkMlFgLHk4K297R3M2XmdvZHhfTiM7VnVtb1o+cl5LTyZWTkRgTCJkNXFGdXlAYypDQFp7Yy5sczR+SUdJQFd9cDtTKSQyc3U6TXt8KjkpNTNZbVY8Qm9aMGBYXktdW1RpLmJecDVXbXVnbElJSlRkTG1RYz8oJS5mLktrJllLQSVzKWlCfjtTYlJrMG5qQ3Nxb3c9TGF6''@;'; put 'put ''OkU3RlRdVUBnc1pNOTZ8QkltRkgkS3I/PSlyYCEodiFaZEFEOSZpa1M4RUUiTTx7bj1qcVdCbzlTOSI5OlEoRXQzbjVaUGB3e2E1ZypZVGpCOnJQLDl8NzJofm0oT3w3fiszR2lNaWhsSWR8N3k6W0NTa00peyFrIVBYfTJvPT5NW005S1RmbXRuQiUqMlkxPl1gLlo6YG09SmwiQ2RVcktKb3Bj''@;'; put 'put ''SndfLjR+JTg7TEh9Mjt7VnE+a0RbIiheTnx6Zj9fJEs8UXVmckFOSytvKm1XIyI6QzdLNihAYks6eHJsTUR4dy9obnk9SXQzcGt0PVQjTGhLN2FDcEdiZ19YMVthYHlNKFFsYVozNkBOOWVrOGIjQGddUFBZJmE0eE5IWXVrPT19Q2lWRkBAZzRuYEJPd1Q/SjQoQU19dWZ0eSg/djtqPV5eJS9d''@;'; put 'put ''Q3hRZk9AXSY2InVne1EkQlVgZUJDUDxrIysreVo6WnI6LmJTSFptcUBaVDFEbSQ/L2BNMER0TWltTTZ7MHtQP2YkWGohdFtUZ1g3VGVsbHByYF4mciltRkxeYnQxQCUvZmIkZGtZb0FqXSs9WG1UQ3goRE1VPztMQ2VtfW9iK2FjVXREWXAra2VYWkJjb1dYP1YrY1NMUzJCQyYoKk57Rj9lJkxm''@;'; put 'put ''X2EyeDt0Tzx3c3g/RF0vZWV0eEtvbVA+dCtbVW48TCZNY1klampyeCl2YnJ1RF5EdiheVlg7Xnt0bj9UUnFrREJZUl42K0FBeS9RTDRWJix6ZG1hJFI4Tj1BVU9DPGoyeWs8MEczNDBmdlM0I29JUHVreTMwQl9FUjRxQH4ySGFLXmc4OEQrbzk6U2JSSDBdN09nd2hwImlOUWtlezpBL2IpN2lm''@;'; put 'put ''KUdrPCtecW4kP19AeHsxekhHU2E/MStqYENmMEp4Si84dWlpKyZwYn5+bi92UzRGWy83emQuKj1kIUtHXVRhKzBHJS4+aC5hRjY0MjArWl48cUgxVXlgaCtMOnFLXlJde0IxVkVnUF1Pd3c5IVEuMEM7R1dbLnB3em9IOCIlIUttLFc/KipNXi56XTtkYmomVHx4a1NmLGZBW3h7XVpybiRPR0xX''@;'; put 'put ''TGQvPHYjWGxYIi5pdTdJO35aWT4kJWwiLCVjQHJMeVV9Lig9QzkmOCt9XilEaUh7allUN3p4bXZWTEQ0JTcubCQ6THxwbypSMUdQNEVYOjN9KDhDLmdjZFBCS2VuPnxBYzhZKiRKYyNYcHNbekQwREUlK3tgOj52ZXlCJiZqVmJrPGJBJCttU0soI11JUTpwPFklZF9QdEx1e2s5X3xlUyZAaEtE''@;'; put 'put ''XmYkQ2Jid3tZajVqUE1PbUZpcFtrXjVhNjdUMFA2bVd8O2FMU1pbJX1MMyhYUGBTa00qZU54UkZlTnBHPltdcjFmOFRqO2t0WyRgVzR7WE0zbWtNLjtbS1Y1R2xCeWJPX0NfS2pXIm9gTm9aKVZoUDpESj99Wkp2cWE1U2t0YXBtMFpyYGg8ZVo7UExxUEArMVVvZ0Z3aFl9NWpibTw1LkhYWGUi''@;'; put 'put ''ZWl4fSU3ZyxpLndiXVVuUi97Mn43SD4mU1UsakxBPk86VkN1NTBBSkoqS1paW2UvSyxxXTYsPWB9PURhYlMvZm1HPXJmbVA0SCVQcX4rOmVLKUE5eS90UkRoWUFwZ3RUd1B0dmg6YWMlU0lAMkheWnY+YiRDVCtvfVQ0VyxLWEByT1o0PGk/WWE4eFdLbmZ+I0k3UVl0L1tbKmpldWE8fUd0ZVU9''@;'; put 'put ''U3p8YENWMmNjbkd9UEUmazFfUUA7NH0vWEgxQXpgaHlPT3lTc2R0cHB9KSJbbygoXlVOKnMyLHx5dHZsNGRQcUEvNDJlLHZYV3JeM3JTTF5KKTxKd2t6cTEhcDFtaGAwcztFMUBHNEhYIU91O1h2U3UmNTk3ajBFa3IqWUM1VWsvPy8sS3Q6eSU9U3FoPT1mNDZZQSpqckdbL1gyKy4zbXs5Nm5V''@;'; put 'put ''T3hZbCU1dEV0eUxzc3I+RFNNZmZjaTxjcFY2WzExcygyY2NCIytEK2MxZlleL0ZfQGZwPGduL3tmZmhwIykjN0pHY0MwPnxXamlbeyZ0Pl1fUEMjfmVfd25tLElTNUlxXWtadX5AfWdYenAlNEwhKjdHPHxLX19icmZHV0BrZ0kqcChfXj5DLlZMd2hkKWhyKTVdNyE+NT5RYFtabWkjUFVXLig6''@;'; put 'put ''Q1NiTzlOMkErNmpWY3daUzFRYUMxQzgqaUs5O3U+e3VXTCgrcFhhNkNqMlkpYD1xRywpa0hhdD1zTEtxQCMjJWckOWgyTClwdzVDNyM2a0xQUmg9ezRTTT5FRkNIRzxCJi9URFErZzo6ckpuJF04QH5zSSVacG4hT1NnMk17e1ZpX2N4S0hsUlhDY0ZkckklLzpDWHZ9I2Y+WUhJelNNWSZvUmVI''@;'; put 'put ''ZFshU3ZYOnQvTVZeemlER3dkZEc0R1dQVyhOTTtRXm09L3pfUXBdUGVfOXtgZSlLJSQxblJZKlZ6T2ssK3pfenhvWF1UWWg8eldzPCpqXkBYNVdsUzl3b1RsaGomL3ltSHMsQXt8ejEpO2xGK0Q3RHlnMz80W10uVWFiZiw2S3tgV35mPkNkIzZ7S1NTLk50K1tpIS8uVnVKbno4UkYxI3w3IV8v''@;'; put 'put ''fU9FSUJAZDJCO1ZzM01NOX5oNkNwfXM/OGMiXlg8cWJFdkxtU3FrdCkoOnNCYFBZUVthPFU8NFZUYDxCTmo7JktNTng5I0lwfjZTQ1ovLiNvOXZ6OSJFTD1ac0skOGhhTytyNk9yPk0rdTx0PXBOX2o4K2hqdF9sKEltMEVbRHxqLDZrZDluVDgucC5tR2pAT3gzTzJrJDleQFgxeH0rVDt1Sjws''@;'; put 'put ''PjsjLGBPK248cn52K3tPNTtJKjM1X2x4VChDe0VfX3JOTFc8bnBBSj4iZitOU0RFI10xInhGNHVMbiVSKWNhNnE1QFJ7MHE0cSwoWHBWVkxxcWAzaDhfPHkmN2FXclk1Qk9GPVAmRi5SIm1xdiM2S1RsKkNfX2p0JX1heXZ7NVB0UitgSiFjWU0vKFRnOGE9Oz9nMkR5KGdIYHdRaWhaUlpqNEZd''@;'; put 'put ''Om4zbHZWSm58ajpnanc8Ok8kJDc2Qml5OHlIaylEaVJfbypuPktucUIkfTR0RVpFe0MmYmdWVFF6c2AwUVBfa2Z6fGpEMCpnL0lhaTBQUXw2K3wxIVsrdyF2VTpscnBxcGh5OiFaRCY/LDgsUEUoanxkLCI+cW9NPFsqQyp6InxyN2hFTFY1KEA7WzI8Yi4yIkcpXzE8fFYzVCFCYXYlbC5NI0xH''@;'; put 'put ''aGh3WnQlNiVFKXl2ISRVcGAkLG4qU1IyZEA5RCtmQW5hKSt9YHtNV3RLSilzWGE0Mkh7UyliW3wwLEF0fEtZNURnSlBsRWQyNkpaOS8zdFNsdD1mMyhDImd0MDBQVi5mL1c2Nl1acSRvaHxdcXRPWj13JFBTNTFCe3IqJjRFQC51JlM2fmhHdz5IOmBbcl5qYmQzZjM/PnBMeGZmXVgwMV1rVG8s''@;'; put 'put ''ZEpzNmsveS5VTXtJIVomYz02OFomTFNzOG9CKlFQbFJDeC50SkRLSmJCbUFMOGVgWWZ9VSVAYlosdCN4PXdyaE9RUXdLRkdQNHtQciosNCQvNWpTIjVvMXAhb2tDTlpiMSJddmhxTzNVaWNtb3hxNDZdLFRgdGBUamlTciJTT3QiczYhcnZbVy46VCYueHRkUEdyXy8jPFA3MWo/O28/XmhNM0Rd''@;'; put 'put ''NVpiYlZAIz0oYndxQjk7M1lfOWgxaH56O0VgMkpeRzBOMVNhVCFIVlV+QnNATjkreVtzWnU5RWZWe0pwPSNQKihLdVArakFrUEFdSF9xJWJGJDEwQmpEQ31mTDghel06Xk5faEc8dlNCU3RbPll9RFUiZjAvUnZaOTZSY0dLUV50U3BzPDUyYEFgfGcpT1FyK2NjKUVMOW5+XVVEQ3I7eTRNSntP''@;'; put 'put ''Q2lOJHw0Nj9PVVU0bjBpdi9QUjNac208VD1BKDU/N1huK1d+PklabCpVVnVtODhUS3dOZStzTlkmfmN8WjNOOEh0SGsrbVcwP15JQjBBPn5nT2IlQ2dVQ0dLXm47amR+NmQ9XyR+bWpNR01QMltnfmlhK1N9fDJlIXw2UzUkIy8/aTR6O3UuJEdWNXRubnF+TnFeRClsSmg/JEBfXzo+eCxsM3Rk''@;'; put 'put ''MGtFfiReOTo8PnlAbVEjUWlEZSI8dyNqTGNdfltTeWY8R1Q5Qzh3OzY+cU48cSZkQHdMZyEwO3E1Rl9tXlsyJkloRkZSdkRSS0tTQTQxMz9MSUMwUk1uNFIzckI4TCVaSn5TNFFAT1NWem9WWSlOWmcqZnMpOGAobTpVK11HUDI7VWIvJCs0WUosbih9ZHV+Sj9yJFJieWVrNCZkNj1RVWZvYj1s''@;'; put 'put ''RDl7QDBRXSJwRmdkfjlaS1F+MF0yN1UobGtZMEFhIXlbV25DY3s5UTdBLHBeSVBUakRteUpHK0tlSGFGSWYlbWssOTg5cWdZPkx2a0RxfGpaJDt2dXVbMkYjfFMzekpNJSlKUUFqZDtBUFtIW3VGdkRPMDM/UGYvRm1bfX58bWJXd2s9aj59Pl18dyl8fXlHNTIwdHhlVSE9cmBjQlNSTytQWn1a''@;'; put 'put ''QkY8Qkt3Y0hvZ3dJcWtac3NHaWhedEMkVzF9QGFUd0lKcilXTVgpd11kZ0EpVEBQRGhLSSYoUWZwfE9iJVR+XWZedkt7KlgsO0NLTTQ+amlWUF02W1Fba1h+cyJGQmJvcVVFIz12YzMhI0A8cVpWRFtBeWEuO3tlK2skWixqXVJEV2F3Tm9zMVgjOi9PaFZqfmpQSzdQVTZTb0x5ZnEmQHxxb3VT''@;'; put 'put ''VlsieSpLJEpLK1ZmZ2ZEX0pueTgpXTt7XXghS01LIWttTVZZUXs5XUxebUt4UXMpIk5vJDJgcEdqI3x9OzxxKCJQRj17aC5QeyllZnNbdiEoTGglOXYydiV4QVV9OXM9aDhdciN6VC8jNH0jOEp7S01Yej11KEc1THV6Zj8kLm5NXlJgPkdsOE1mIyxYWCkxTXBWUUZsNSpAeyErSSghUSs9WnZ2''@;'; put 'put ''PjwlNWV4c2g1QnF4NXsjOj5YVDFdWT9RKjomdjd+KlNva2JpKFs4M3ZbcChyTnN9RCN+U2Y3VGQ2XSl0JUpJWzFebmIuQEY9PWJEW3U5PF1tKioxX3lZU3V2LFd8am8lIXp3M29xQH5EPilgdD5ZSVNlRE5YIXYpalIpcHoiIWkkZj9TSmZRWjppeiJlOSxoUnlEXVUwKGsufl5RfXQhRDhgRHdI''@;'; put 'put ''TG9dcVE8LHQ4SzwsMXJPNyIhIXI9I2BwUGR+al4/PW1ZV2lzNDBgfVYqT2FfTWR3YyN3fUY9LnpMWitFMnhudjZFInZ5Wm8/Sj9RL1olaXl4KypGSTApbn5IcX1BcHZDY3F4NX17W3slRzd2Tm55W2Q6SmZwfnMoJnUhNT47KlhwdTZrbkF3SjMrZ2puUCZ5fVdreHplU3k1PitbZnYuXiR3KWdJ''@;'; put 'put ''VVMrMEZrMmZhQSlkVjp5ci9JfmB3OUpmSSpMSFgwNj9ibkwvbEJpMkw9MyNPND1JdV1PYnJGdFFsfl5kYml7eDF0Zmp7JUc7Jk8pQVQwOixWYkNfbVE3ISFwNSxVMjQhLjBlU35KNit5OSttNyVPajI2dXkqUn0meSRWQklxNnpLeEQjcCh4fXZ1bzg0QVNBPURPRj9KSUFSLFVaN25lT0QpTWZD''@;'; put 'put ''MWF2MS45TW1+InpuV0M2I0xkay9BdktJNnRoU2dkYi9ad0YjKmVAOGMhMmJjdXlMJXpaV3ZiQChveVEzY0xYfHFxNCVHaFMpWS5uX2VLSWFraCxqJX5VWlVvOjI9I3pzaCFDUUs6ZUd3emtvZz00PGRPb3ZKJlJGUi5UJldMO3VfeShPeTo5IWtFPysiPiEvLl9kJWhPVklwX3UoTX5tcEA8RDZF''@;'; put 'put ''QCZZUXdsOS42RWY7P19RQVJnLzpxUV99enVLIjJiQSFfRiNDNW0jVWE/RUVKakwvYTlNIyZFRSYwN08kRGViIXQ8YmZ8c2NaM0ksRGgxTTQoZmVUbWVQeUhHa3tlQm9ESCJpQ1lwS0tuJXlQbDgqVDwySVJZeGtabFJsYX04aUBrcDpuamJKOTA9PDs8elYrOjlRWyZuSypzPyVjU3IqeU5GLFt4''@;'; put 'put ''bD1jR1pDRExbc3E4QmhvNk4vVVtwTD1MIXJhKUp6MV0lRl1pMzYsYkZgUVt3SlNOJW5jcXkpXnFIV3IiZVU+Q1pUakdnelM9ViZIdDZlfkpwRUZIPnAqdGhidmtabUdeIkU2ciEqdiZkcU91ZmE8TlBzUTJaaj40IlMpZVN5JTZaaHZQX2VUekU6U2ZYYFEuK3UzLm9WTTxZcUNVYiMqcjZCS1Bu''@;'; put 'put ''NiQ6TDtFMltSWjVwbTx1Okt6NHFzSFJCV3V6SVJLZSZ4RUAhaGBtKyFxMXB2LkAvazVBNFMraUIjK0N6Kl5mOE0lViVWXTtrOXcwP2BsbW15fSxrO0w3JD16ZFA3UGlSOFZWb2lgUXkuPSlvSGskcXtkOz1jYlM4O2NpOH5hTU99MVkuTHgqa2AoOFlTdHtNRU9rb2B2bitadC9AKGJ3YGZ0Sn5E''@;'; put 'put ''L0V5Ino5MGpLekBMMnhudkRwdjp8eHN4ZUpqM1NWV0Q2TitSJS5fOU0zZks4QCVXRCgzRDJXajJUWEcpdVYrbG9EdV46QUQ5RTRNfFZwQUoldiMxQGdUIyxaa2AseUBPbjtaSWh5UUwrbDQhLiJ5X3B0dF9OOCZLa0lKRDhLS2dQIWdrMSFIbiJIPSFLSV9rYCpwJTBsfmdDKiE5OVZjKTpgRVVE''@;'; put 'put ''VUQmOEcsYEE7U1UzZ0ZaT15DKHYsPj5tKlk7dXg2RDlXSD1PMTh7I1o4ZSt4cGRFWWYlb0R1Kzg8eEQpNlQqJX5bX21MXjxVYGpDQ1djVWEwbmhkI0FZeyo/VClzISJlaStoaXtqNEgrP2BHKDpUaSpoWD0jcHJNYipEOX1mKy9qdXB0Lm5wP10xUTMpJmN7SE5gKEkyNSppM2NmMjVuJX5UQ3cp''@;'; put 'put ''Ujs8a1JmUGxBcVU1Mmw0PTtDZm18eTtlPnE7eC59Y2Y2ME1ffj84YnNIX0xqTVIyKzYhNGVHMjA4ciM2P3w4cl54a3B1MS4kXnBxU1l+P0hHd3Q7Ny8hX0NibV5+cGkxSHpMfCFnbmwveCVySzYhNyZYZyVAPEx5X2lNTHlmfn40JFImcnRDNCgwfE52aSFVI0QiXXh7TlB+PE9mdlUlYWJza1lz''@;'; put 'put ''M29hTzFAd3dlTFJzOSsrcHdLbTBZWFBVLiZiMlJCPE9TbmRmfVRdP2FQSj46KWR3OlRCYnV6YVhaNFVhYUNjfnUvenV9QWAhSS5SVEBqUGdMLitkbzlYeng3KDxnZFI7R2U2NW5GPkc9a1BrentwIiFZMS5Fb058UHc6fWdLSWBbIWxUQCJmdUh1Xm9FKlo0Oj9JIV94ME5CTldwJihVUCMvej92''@;'; put 'put ''VD0zdng9NFU+O1JvfnBsS3dMX1gpZj1tSCRwY2ZRSSxtdjNlVWo/TFp3fDFRRzB6UT5dVzZXQ1Q3UCZLSEQiX0NlMEQ6MWtPX3w0O0V3Jmc7anxOMWtIKUIkNENfUTFrTFQ8bm9aeSpyK0BkS2c1SWo0KGkzQHk6KkMvVUVYRVgxPFgpfkhUYzJwZHFJdFBZUTJKbSZKfV5PSHlqOmsiPUY1filt''@;'; put 'put ''LEd3d0pdSmpUNzlqWHt9P2ZkTU5nSkVWcVNPMENTZSomQVhRPV9sK0RzQyQkI29OXWomfGJYQUxeUzRhP10jN05WS09odnddcVV2MklKVn1AVH5ZR0J0LEpsaSolQW19ZzAlcyFnKn58MXhrQUx0cVR+fXVaUn1WME01dGk4WHE0MXBURVtMNitTSCU/RXJoVDFtTGUuTWhRLyVHRVFnZ29JKUxC''@;'; put 'put ''NSxyTlA6an1bb2BNU0Y6dTVMXj8yRi9NWWdWUDUlfHc7JU9yflh6c25FKEl2byZQRVJXcV1zL00reWVNZipYO2p3OkVjMllDO1lQPUNgd3U6MDZCV0RfM1gpTkNvQUJQPmh6I0FmdDY4IVFvP247JTRhTXsyLl5uJCliWlIvMVlLeTdLQ2YxLiIiQGF+TEMiY2pGekVfOjNDPHZaNkYza2coVCV3''@;'; put 'put ''bGUhPSFlQCsqfGw5NEprQ3ckTDowJTA1SkJEWUc2XUU8fHpvNy9iNXw1KEYsQ2tJczhEKG0kVWNXdVRRZit3PE9HeHt0dH4qN3wzfFlVeGYqNCRqRDgwUjE4KlpPcWYkQmo1Jk8/WW5SNDg+YEEyOkV8PzB8ZklII3V5U3hBTU9XKUQmQU5ldjdNJmYlOThUfDJbPmR0Mn4qVG5PYSlwPjxoJmll''@;'; put 'put ''MUFXck8jLD18RCZFP3kqQi5oKC9xfUoueSxOKyxCWV0uZmRbJD1WamsvX00ib2FtKDdbSk8mXXVGdSI9dWBhUGlJLzJbZG02bileQ2VbKDBrOXZbPGY4fTpsLChqeDNxMlF3ZHtnMzlaaj9ROWU2K3pXeUpTPGVeY0tSai4uOVs/eChHN1ssK2NjNT5CO1ZSeTJtdFg5UH4uXj80RjBme019dz84''@;'; put 'put ''ZTVbIS80P1t+V3ZnN0JNemhXflAxKVIvNGVDcVRFTDk1Z1REX0dERkNufUtaRzU8Uk8oamo+b1lLIURtQShLUnZlSjRbYmVuX2RqLzpndn0mc0pfXSs/d1szdH10Oi95OzVsQUN0Z05NPDw2dEgydSlSLypkUCQoNyErQVJDR3NOR2lmRz1wPzhCUmdTQz5TVmhsOCJLW3cuSHtoWUBTM142YlAo''@;'; put 'put ''WzZFYlpwJUBgRUs2c2M5dHJQM2ozVnZ4ZGgubSshP3R6N1Vxej0oXnZEYnB0VWA+MzN1Q3MrRjM/OEU2WkVHbFRHaTE/RkVgKnY7WkUqVGB+NGFZLD4hNDszb3A/cEhMJnt5PWBWWE9jeFJGcGxyallfNDRxNlN6OXszIXE3VDl1STgqe2JoIzw6fkhiRjVzZGE/JUtYMl9jS0ZjNTU5fmA4JXZN''@;'; put 'put ''QlRgNG97WUpJPnhDX1lWQGJ8IVR7JW0+a3NVLmRESmkqcmlDOyVkbEA+eE5VaGJ2clVBXj89PUpHXzwvX08kWkx+QkdFNEthMU9vWE8yR3BefkByOSxWTCI3WCthKCpGTW16NUYkPHpkUy5iQzEkZjN7MD8kZHpmREFObDUrPVhqUDx0fmQjaTVyfGZtJWdzVVNnOz1NflV9W1hiRXtHQmVDTG1Q''@;'; put 'put ''OVc7QUckeyR6NlR0RnUvbDZFTDMqQkZgcCxvbVRJL0d6cU1GdXFYREVAXWlka3hGby95azVvLlc/NFYqbVhTXzdZUy5CaVozcG55Q1NzWj5Qak5xbEhWcEgmb10hcVQ/QmhEMnQ1e0xpU2U7UFdQX1hTblFPWiJfIXBDIjYkb2c1Ul9gOi9obCNOX10xOlpyMml8NUQ8dnJWTyFgTVpeQSIjZ09Y''@;'; put 'put ''OVd9LC40MkpNU2FRfUNYITZwKyEmdHNVbkdOQDZvcjYqblM5eCFIKTB4eX5SI05sXXJraGdJfjU2QnloKm9oIURjRm85RCYsLyo8OF1gbVJyelBxPGlVSHt+RldqYiNqSSQrVVAkNV8+TzdtMy9Nbis+M1BHRVgkUzlXZjNDdHZ6ITk/Q0NnKWt4PXRkUjIhSUZNdUMoYXRVKzkwZEI1TTFrMj41''@;'; put 'put ''bzNZcm40STlmbW0rfnheUzQkIV1UQT1+UjNrcX0+PittfUlVeUUlWmdzUmVzRz9xMXg2e15LVilFbl8xI1ckMG8le29kISxAW0RyP3oxZStoTl5EW01wViIwcSMibyhfeyslZ1ApYUNzZnYvREszJkNBOiY3TjhxejFQTHdyZU4sTzFXb35iOGV8XzosNWtlPCsraiVUckNRempZckw/OjNFUXpD''@;'; put 'put ''JHM8fFs3KnZ4UGx2XnImVjhwb2g7U3pQTEF8e0UlJlM/MFVLRDVfYSk9RzBmaiQ/RyMhInZCZSsyMEZ9Ozd0cGtAOktJQ1JrbkgzQ3tTOXcjUihraVc9PHdfMHwlNTRRcERRR2I2M2BNUnVsRSQ+SDgrWWc0MlY0U1FJKkI8Mkp1JWdOd1F7UEhJKl4pb2txe3pKLmdEWWNvdD1TdngwLDA0NXQi''@;'; put 'put ''Nn1PYE9DJk89Q3RpSnNAKXoodiFLayJBQUJde0IoKiZYTFBKM1dAZHJCO0ppRT5kMFBrLDxybXZnT298QEd6JEsvTklKZWtjWVUwOTFtIVAmIyZ1KlR3TlcpOWRne0UjW25rdFhmMlkmRClvISRAPGchQHhPdzdJa153d2soSipSXWdPN248bzpEJmxOQEJ9YCs9TUJyVGMkMkdBSDhDKjh5SERf''@;'; put 'put ''fm5KeiUqcF0jR3cqdV9hMj9mdUtoTFkjSVRtWDt9VVkrKEdhZEJyWExMTSUhQUU+X1NjQ3JzcylgPGtPYihZV1kxakxvPXZfZyUqSzl8NjZHaGgmRk4jamwzeig8MHwhNGZ0KmxpamQ8bDhsMXx2PGYobUFFS3IiaDtTQGxMdjZdWjhbQDc6N1JnfGR8MGw3ajc3U201SHIlKz5oOiw5NjhwZ2E0''@;'; put 'put ''YEB0bWRZNDBZdXJuKV4xIVImUDJ7Uj06cUBWfGUvYmd9Pm1aTXI2MTh5WTlMYjs/STd6Y28uP1R2JmNsZUhBSnZCUS5wWDh6bzUjeyFnVXAzcmUxRXduMGdKQ3lSJmd3bG5WOnYoR3F1Y3YrcVVIL2lSS0FSRSVvXyl6Q1NoPzslaUhmOEV9dFVHelRxNC9kZDY2IW04K0tLI1tUbCEhbCkhYFIw''@;'; put 'put ''W0R5N0ZYMV9vYm5pZiYweyg6fnF+ME1INUsjRjN1RmdCe2hOMixyXTBUdzhFc3xgKkshbHZNRjFdZHAkRz1xJSomaiMzT0JnP0M8RlpsPGw1WkNgdFIyKHZKQklPUjJIKmddVCUzO3c5W3t7IV5fRS5DMGYoMUNCI0x6T3VzQm1ZdUl1e3MvU1twciskSlcubDNWcHBOZVhvKzU6dD1dXz9EVlEj''@;'; put 'put ''TmJlTzlbcElBL31EIyJsNzg1Jn45XUIhYHBYRThFeyQ0JV41ZXpSMGlQRHxrO0pLPEVaNHJQblMqUmtZem0wSXhTTGdsTD00fWNGJi50P09yISV4Q3tmOFFqZD5PaV0/L0FXTnssfj0pUXNrNng9MXFWPFUuRCNNRn4ha0xnYk89XnQlVylETWFrTnYrL25mQHY2RCZHMT5rMEM4ZFUiIjV7MTFV''@;'; put 'put ''WDg2MnVsb1hufjRePm0ldU1dek8mQ0tvbyRTaX5mJEhkTm5PT1Rwd1ZxcW5DXVBOSGIman5Vc2xQWGxkbG1zIUxjQ2kuJTZeI3J9PDBrTD18MylNb3Zla2VycDhsMTpETTw6IjImbT5hQFNpdWQ7QmlGLFpRRk9qWHYqfX1ed0dlJmRVKmAlZDhlJFVyWWgpbU5TL2lofWE/XjZkRWBPRmF3ek1f''@;'; put 'put ''M2Jue3RPcFk0b0tjZFdHNj9DYnA0ZXppJnp3K15XS2A3a2k5MW1eWUdRS0FOMnRAUGFPK09NOSVVKi9afSNkXjRYPHxuTF11dihgeSMxKkVOTFFHNS5SPWtTcTZfMDtsLkcpKlFNT0daWyRobzpFSDZ8cklbQVsuUWh1Yy8qNEQyc3VGW2RPcn1nS3phcEl1LGskPncuODJbW3g1WE5nNDNhfWVf''@;'; put 'put ''YzthM0k9VlQ7InUqSSg0SUtMISg0eEs1YnN7MV5NZFUhRWpeVTB2QjoiN0tIaFA5RFooV3k0JGI3U1JOJGpBNHwmVzouSlh2LiVHP19EPlNrKVFUVyJtYj8lKCk/KkJ8W0VBelVbdSIpIlpKWUQ9antxdVkqT1p9elVOfnkiODh1aW1DOSR2KCNiRExlRXZSdF1EdXNjaTM3JnlUJkI7Wk1zPG0u''@;'; put 'put ''ZGwhcjpoWjlYTzNmOTxqaU5hLig7LzNQMi8qemdNe0l5WzJ7Kmd5QXtIUkxARFVSbWRgY0JyTm9zOkpPSDslKThRVCxIUCJSXmA0MUw8ZktWeGNDQn4reElxbXYwSzZNfm9yQE1YWXFGWGBEeC5RSXxkJS9kdzVaU09fQzsoRHtwKHppaG5QKSlXZnc6Wn1aaTBgN017Xm1yRihoYn4jPzIlU3Fz''@;'; put 'put ''UjNPZnROU0A6ZypsQER0dHVJNTN7T28mMFZMQ1JUdXwoSjVZSjZjemh3cn5mJG9ra3FCMDR1WG8xWC47S3RfPT1lcX5QakNnbUhbfCZaaDwmRlNGRGtWUHo1WWVxIiVgfm82X2Y5e1R3eztePk16YHM7Tl0hVzFKLiMpbGVmfiNdbTc5LixeImFzZmdoOFZXPXlHND9ETlpleE9bVD1oIkJlYWZV''@;'; put 'put ''Xz9nXjVTZnhONVg6bE5mN1dGMVEqPG1yPCpGRTBAZWJ3VWZZLzBIJHJZVUB4TlZbKi9EZn11ZnVabUI3fnR5ZjxdVn46c34yUTheZiNkKXhjY2RMTWluakQ8RmhobURRbnxUWXNmTDt9YG4yXnwkRzlJO3MlOl9iQi9BQWUkVyFpYGU5LD0iWFVAeHtOOHpiVXRsT0NkOGMzfHJyTkcrIjxFYEtk''@;'; put 'put ''aTFiWX4jTmwuPWR2XyowJHVWXzAwW09Zdn44K0E/XjlvaWg2cWtWNE1UWClTK1tmLFA0KEpZO3JjOHs0ZCUqZShITXM7T0JfJWU/KX0xTXtdelFtYG0rZ2w6b20lIVVSfGYhbzE1cypzeWw9TUAuZnIsT3FbIzNydGVVMHpxaTUjeFImPVBqell2YEVFbV40JEB2OF1Mc29GZnsqKFV6Q0BfPzp2''@;'; put 'put ''ND9fWHk0cCYzS358diRVP1Z4SGBkRipsQTNXc1JDRT04OkN7PlldW0lAPSYiais0RSJkenROMksrTEYjTjdEeyticElFODhsdjRyWD5SInl6JiMzV2UpdktZWEVDKyxkPz1NTzQ1YzJmPlR7V3VsTkFtaGc1YX1Ac31qdHdzYmVaLDF+fXlId31FSWh0YkNdPkUkT2JKc3Voel1fX2FpV19hNjtO''@;'; put 'put ''YDt8O3JEazF7MiEwaXozM203dWY4UnVHMlBKVTpYck5daTRDNy5hL3cwPlZnQCRfWWBxfHJBN2hpLGdnb0whZHZnSWpZeWthO25LeH1uNDNMR0hPK3B5aV9IT2gmSGJyTG9Cb0lHQm8xRywzRSEqdHcweEl9Zk94Ji8kS2sybSJRaV1CKn1SayIrOiJgMXpkNjt9Oj4zIURVfTd8Mm10c3d4PHw9''@;'; put 'put ''MG5VTSxDaCszS2V7KHsuIWpafDF1WzM+eklGVEdQaWYlPk1HVz5BRmQrPV5OaTYhNCp7WGdZJGN0YjwxK3Y/dm5+UldXKkJpPWJOTUBqVnhULmh4WFpqWmhIYmFGOUddImV9PmJYfHQ4MEY0SFF+KHBGLjxKXnwlVmIvRF9uaTNzRDB1S0pIRGZObiZCW1YhNipQSDkpfGksIihdJEg3RG1TeHBX''@;'; put 'put ''bXNOOjNGNkk3cW88eFpEblV0VkBzWGheJnh0dllGLiJAOHd2MDZEKDlsTzUwbDlrWiF1MXR6VDVoPUE4U2ZLX1BiXX1xMSx5el5KTl4uckVZSFBhMk8xYU5hM2B0aSJKa0VWYFhDdnpYRFhoYllGZnNJLz9vZz9+L2Y3XSg7Qy4jJipQZl15L0ZMc01bd2N4Jk0mPDBATXh0LkdxOjt8eHR+YCNJ''@;'; put 'put ''VVJKP3x3cSlfNmdBUlN9OEl5IVYmdkgzJXRxUDYmYFo8d1ViKDltYmNKSkAmW1dXTCFifEUkSkZYSExkMkdhN1FtfTpGSk83YXpiXnxnfDFCWj80bChYVFtVRz4rKUpVV2I2NG0xaTRwQjtmaHRjPkUzJCt+VmNUXz9qJkZXTDd1JEN7djVTP0VbQDApZF96MmlSKkhjaj8sSF1NS141fFFmVH5n''@;'; put 'put ''YE5zODQyIzFNWm1nNVd0P3x3UFs2VDFtW0JoQmRBcWwhclU0YV1LbkhHMXpFVjY7blk9amliTUF6dFA9LHNjZiRuYjdNM195UzwlUUV6Vzd5V2hXNXJjQjtER34sb1c/Z2Z5NHd7OT9ja1cmTCtkSX17JmFTNXdBM1c5IzYxNEhKKmg0fEslI35KbylIVTx7XjJxUVBlUkxVSUxnZG5mYjRtT2Jv''@;'; put 'put ''fTFPK3BKSHtWLGUvK1dbenx3Wkk7X2ozJEEoe0NVPGk7UjNoajZRKS9OYFsiSUI9Jk5fQFdlUyslYj1wKEgzLmpQMkJ6NHddX0xjMUFJZ2BNLmlHcio3ZGtMZVo/UmBNRFpsQXFsdX11OEBERDEqPlI9VG9hS1VNQiNzUW1RMnhdV2IlYEw0byV6S1ZCTkdZeiE/WWI3RCxeeHNvMlsrQDh9Pndk''@;'; put 'put ''PlUwS0dRLnRSWmQyeDIieTJfcj9hKkpJSiYpZVRFKVF+dmZHRGI5Sz86ZiJVWXJ3NCkvWmZ1ZlJsTVdlcmIwckIyWWJSZV9lLl0haUttX3xuTkpVMklPKFd6ZkB6b1NqYUBFQ2ZRJksyWHF0UEsuMzMoUX1TSWV3Jj0hNWw3OEltPDhpWEYhPkNqJCJeLEtpWEN2RyFFeGpuSyQycjMoKEJKdzNh''@;'; put 'put ''ZXpNazBLcShBdj5ZN204dS9GWmJfK2EwRVYqVn40Z0xrWDA3REBKajkzJihSKFk4bCNAY2M2RDovTWQ4bzB1KWBZbThEPUx7SThqXkd9P0JocT1TQCZNKGFaXltoZUw+ZGJxRlBlSykqNHhPczB0e3sxMl4vOyROTyUlSzNsYE8mX2VWLyxmKmU9aEtXKXJyOlRNWjdiOUtzZ1EwTzAzI0AoOSpq''@;'; put 'put ''R3ExXk9KI1MuTXpkeVI0QmF+Iy4hfHpULlBoMzUsbkM0TXJTSyJAVUBBcjpfQkBJJm1WIktoQkltRml8L31ZRFJ1SXZTOml3byxidDwpX2coeS9IMTsleDcjd3swS3puKEdeSXh1UkFJWC4ofSJtMHxxNl9KMDNPRVNCMW8vVm9HYlgjVnsoKSokSWZNUEgoS2tZP0RIaitbaHM2YytDUj0mclNH''@;'; put 'put ''Pm53TDcsbyMvV21pMWdVTW9ZPnEiO3dRNnZ0fHpTTnhkcUZKTFgyM2MjUyl8Xy5qJTF5aHNFUikuSDQ9alQuQyxZW2UxeXFHamc8KUhGTHpFXUlxT3UuLm5INXVzX2pMVEcsSU9bajl8ZG1oZlUkdVcyNCtvI0lQN15lfGM/VykzZW5gWGhLY2ZWRiNKJXxuI01gP21MTklRdjB2dUpedys4Q2NZ''@;'; put 'put ''RWZVSlhtQTE8ZTUpVT90bXReT1crJWRGUjZFO2l4alZlVFpiUFtWeWRmYl58LGVrXmFfVjMsSnFCbj9qNU5baDxWMV9NPSpwNmwwI0AmfSpAaipzNW9vPXhmVlY6NE0jVyhtQ0c2dUteVTB3cHVzdGtBSVE5ck1dZyF3d05YW1I9Lks5cGRVbXU4Vy5FTnBBdzptYi8pTlhbTU08OCprdz9RR21t''@;'; put 'put ''PEcidCs8ZSojRGowK2Y7dCEvSXk9dWM/eXdKSX15VVFCdk1zTkMvKTI4KzRAYWghWHhudW4hQ3phPEIzaGt+JH0uQTtTVkNtJWR6VFUrc2duXnlnbyk8QjIqJnBMKz98Im1GRn1xW2dIWUc/aVkoa3k5Z35DPFJzbGl0MkhRbFQ1LDNHc3Bve0sqNHIwX21eIlRHPGQ1WWNDdm86JTJwYylEMjZM''@;'; put 'put ''bnopXmN8TzckYE9qbU9jYi5JcFA6dltTWUBuLnViUFhpdVM2RHk9SmU5eExNT3d2bnhRZzBrPzRLSXVWWTkvTUY4WUFzJl9jQiQqdyNGUkU8IlMocW8qUk9SMn46NWNTbylKY25lOUJHPCh1M1UxR3pUUlQrNCw1XWpxQXA8KzBgX1M/Z148JEs/JnwjSzNRX3I1STIvVTlzPzQzPT1WW1N5Jl1F''@;'; put 'put ''UVM1TE9lMHYjdnQsfS9fRkwhNyghPFQ3K2BvbTQ6K0B9LGUyP3BrM2B1ckdSczksQTxLaX5uKkV+RlEpWztCXVcreS89OUlCLzsmRUk5Tn1tQCJgdF9WMzo7d2VPOV1xNkhNXzRdd0hmJSVucEdGZnBIMSVVWlpydytNVEFYWCs6RmdaWXxXOW1Tc053b0hfejZCOktsIXJwUXpmaT4/ITRtPm4r''@;'; put 'put ''I3dAdWQ+VG5gPkc4c0V8fE9lZHVadV1+Rk16bnNBd3RUS104NDtWUWFVeG5eJX0zN1tNRy5sUSFAS1h3Ly9oODBBRkcuR05mLExVZWB+JUhHJEldbH1XOXc4ZWNpOTpzcG5EZihhc1poI2BQKUs/UGw0P0E1U2QsajVHWTdYKTB0ZEJgJFJ6UVY9JlJ4YV1LJkN1XkUvLiQ8PDp7RyNEKltra0Fz''@;'; put 'put ''a2s3fH1wMjVfUyshRzBVaUZFbUlSYXFgIzV9QF1nUC90IXouN2RmalZ+THkhdk5Ie0IjYjxAR0d0dUQ/UllGKVh9L2ljcS9uUU93M1BLbEQ3WSw1dzVUdjhvfHZ9b31DJkZ8KGp3NmlnUG5HLkNTV2VVNk1IW31ifj9WUUwufj07KFVbfmxGRXVEYUNZM2ZBImw8SDdfJXV5OlRxRyM+NHpbMEta''@;'; put 'put ''cW49K2UrXi8pSEY0I3xDOXNRTUx6fSEiV053NzB+UzdPeDt9MHR2ZHEkTCp8V3VIb35oSGhMVm18YEpAK252Jkk9aSNILnBOcHUrQnE6aV9LeXx9U3BTVnJNYU5VNioxd1tTSyJbTHNKM1E+P0A/O2lId1RjIzIuVWxSc0ZDZyRiaCp+cHZqeG93dGYySy58S0NAXW5RYEZqY0BBdVAlbzk1eyNz''@;'; put 'put ''dmFOOD8/JjpYYno1ZHBRNEJLQV5UKWI8WnF2MSpyKVEqQ2FdSWdxRGVXIktLP3I8RVdAKiVzSUNzMDJ0N241KUBadz85QlNTRnwiVi5zR290PSIkOy99bmNwYUdGdmc+KzheYDdvcGpmI1VoPVNDZDI0a1c/WCN9SUxvSWBLI3RUPXpOK0d+SjY7WnFUL3hyWTRyWmBdXXJ6djBSJSI9Plh7ciZI''@;'; put 'put ''QXpAeEA/e2M2T0xJY00rYXx7MyVxcT9vYWNsKXlzPSZuJk5dYVU3fShOJXo3QGNSVl16Q2d8THlxUyZ3JE5DYSxWQHVaTkl6W0hoViJqTWkzbUBsX1t6Q2dlYUo0UDBGRiRzfjV4Ri9wRW1qWGZ2b0NNJmNjJDQiJklIZTBCNC51YnZ1ZkxpTF16YyZ7ODloM09Va3NdQypbK3UkM0NrPWtfUk1s''@;'; put 'put ''QjZhTDNqYTNwOUM9W3x0RTMwT35KVTNRbkdJVCVEeWZqVkg9YS5ocSVEUyMhbGE8RiF+T1FoZ1dFZCMvSC4wYCx4Rzo6biNXUDJdYjBZNnVpOV5TWy5QZiRgYUdwbGpCXWdRI1UuZzVOZipnfDBwczJtP1J0PT9YS1M9bCxxbG9lLyRNQTwyeSZLPEk3e19denpgVXJlVlk4fDp1ck9VMzhlWmQo''@;'; put 'put ''WT8rS2F+OEAjdmw2aFZ9YSVgVXM7KXZCMUlIKWYydylqS0xGeSY3WixBYzlvc3tAK2UhPEhHXXdwdjIxe1s7UEhGQ0RvfjpTfX5WNmdXNn55NlE9a2ZPNztjcF87d2hsMnksM2R7SUl7Ui5wQ0VLe2tyXWxxMllfKXFZalVvZlgpZjpQflR2YWkxPUFoNyQ0aEh9aFtMcUNVelU+a0p+X1NxOUIw''@;'; put 'put ''LiwqanBPU1hfWEtUYi5kZCJRR3dxVUJzM1I4akAha0g4fHdqZH1IYVZLTWF0PDpSRTE6NX08cSk+ZClQMHsqU1hfayYjd2RPVTFPRkNbcD10MEcjdCwzZGE6ZlkhaWRRSGM3UjhFamE3JFh9P3x3IUtMUThAMCleV21LVDohM3BPJHlKTyVFfSNQXmcpai9PJDhpW2ttS1Q6ITNwUjBAIUAhVUgk''@;'; put 'put ''S1dWU2hGc3QsVVdpKE5eOkByTWBVZG9yejBNZGNSSkhHL0lwTFVYLDApL19DRitSIiRVUVpfTD5ISDxfUEQhPzBjO2l+ZH1eX3RVN2s0KSxuOExqRzBRZU1oRzRCfVEmTE9aNk1KdHFdJSUjYEUjcnlve3RrKHNfTmE7QzdIPXZTPkhAXUFjSmNSZXAsb3t2MGR2PjhhYzZKPDRCOkxVQjQ2ZzMu''@;'; put 'put ''ditTV2VVNGVPSy9ZZ0tBU2Y4dm48OyVpbjpKKXRgP2cyLF91Q2hhO3pgaFclaChQLmZNTTVFQzc7M1UzQiVFfVUzK2dOfWdQK2M9OUcjbnBbO248TX5fXVg6d2YrJS8vcTpFfEJjWF5xNDBjO1J1ZHR7fDp0ZU05fnhJNzlkMldaVF9xPk9WdHZ6aDMpTzNIWGNnb019aC9uVTFQTSFUdSMhRlVb''@;'; put 'put ''ZHBQQzgsSiZISEY7ZHtwPGJhaHZdZnk8QDZRLEJSTTxkTmF7biJCNk81X113UE1CWmVVb3VjTDtjKWcsMFp2PWx1R2o5W3dfV19TeUEkO2V7QmNmV19TIWJpdjQsYnBeZV5PNEU4ek03dkpBRT80YT8/YFYuPmQifCkjR29bN01ATVBRKnMmdDtSPCM/ZyxPYGcyVTVjWnl2TnQ4by5ZYTN7M1I3''@;'; put 'put ''WDxDYHQuIzB9YDEvN1FaXmZkI3NiZWJSJnw8X2UhMCEuWysrQiU8dyNCWGdhKHoiXyYsK252Z3FySHBUO05tOjVofnlSN2B5UGNDaChYUCZwa1lnJFhDOE9lcSM7QnJ2K0ZWWF1DdVIvTFEqU084fVliMWlgO3I8dCxyVm5kdSxyVlUrdSh9S0hTIUg1MChQQzR1USVJPlA/SH5fRzVXRzZjPzNB''@;'; put 'put ''TD0wcFgvaV5dbDMzVzxqM3FAWUg+b1oqUWVEanIkIW8jM0AsM20mNDFyTnRiOjsraUpUUHIkTFdFTj8qbXlObFJITFVuclQ7N2FxQj10Y1EoVEhfWSkodElsc1gwLjNmUVRgfTpXRXp4emB7aFRUVitJY0wyLFhWPHomK196OUBFOms0WmpQbmUpd3RednB1ZCZGRy5HTW5IIz9eYH1GQ2hjJHtG''@;'; put 'put ''Umh0OVMhQ3ppdC4/I042LkhmVl5yJik1ZHg6Nl1vLF5yZ2d5IlllJDNwYiRuI1gyaHQ2czNfWCRCTnZHYiE7K0c1R2FQTC9YSV5WLytmT2hmV14mNn1CfXllISRMe0RWVXYqOXZ6V3cmP1RWLyM+JWhwNi5KTkZeSikwbnJLKFtbVn0wO0BZfThZNlk2WXxbM1pXRHNuNXVMYF9fWGQ+VDJbcVky''@;'; put 'put ''IVI/OTUxNFNqSHN5dXlXMz1CWmszRHJFYi8paWJHXjh9OzIuV19rNnp7TzZQYmVmfmxiamVuYVF2aGI5Xk5WMnwqcHBiVSFNRjp+NTcxV2R6cjQ3cGczR2FuKiQoY1Q9cSRLbl5OVlEvMjVGcmg+fHkpc25ra3lHNDNTKjtwcFlPOEhXfT4+KztLYDM/Sn13U1pMOl5SPHYlX104Ylc9WChBb3g0''@;'; put 'put ''REhUeT8/NGU3PjslS3tTZV89UGFpYm0lUlo3OD1Dd007PFspfm1tOHVPSDZZMFBsR2phVld2QW8wWH49Wj1sVTBidT5MYFd1Km83cEJfO0lhLnVwYnE9cWNZS043YWszOntoaUBrSWM6NnVAdEtnNGBxMzJMRntTXSV8L1tKVjFaYVpERDA/ZFRhIT41SGc9RzRMcVIpaSkpJSk1L1UvfVMvYkBd''@;'; put 'put ''KTJCUn1WJWNYeVslcEpzVV5WI0UxaWpAPFo+RS47JT46JjNhWyZ9aDh0T3k/Mk0mRSQ5dF1qL0xzb2huRnohP0UoTyJwPk02OUJiMWZLdW0hM18vNTxyJGxBdigjYSZoSFlPPVFPZ3c1X3AqLyF3M3sldVo6YTBIbXViYCxgMik3QDZkejs7RnYyMns1K1gibzhJUi97NzsrUHlRKXBHXTNFXXxn''@;'; put 'put ''Im1gejEqOUtIVzMyaV5neW88ZUhWNmZub1NXa015JHMiSjx8d2JHdjFkM3YqMkc8SS9rLjBwTSlDX2FyPWIjPXJDfXhnOSEoIXtmMTkjdDkvPFldV0NIU0kyK2BgK3xkWWhQdm1+djEjI1BUPjExSSE3YT00XXw2ZVcwPil3SzNCeCRUJkRFTiw1N0Q5UiZVdVBKNiVVVzMyMC9JRit8XzJ1d09H''@;'; put 'put ''ZFliOWg7NjQ9QDphUWksayNoenA9NU12TWYlLFl6SXVxSzBDLFFtYHdYYVAxaTBadkMhRXN+TmgoOXxuRTZSYjMpZHNJYiRHUXF9Z3ZlbyM5X3AjS2IoISpBd3EpXVpiVitId0pIPXxAQD9YZEFfQ1IiamZ+I3hMM1AuRzYremRqSXF7d3EkQVBTazkrQ31rbyRnX104bXVNT3h7ekNYcENwezNx''@;'; put 'put ''Lm9GY3RHZyVNYC81ZEZLeVNgKispJWNKYWwqTXJgOT9rbHI6dj9NN2pVYmlDW3Y5LkJiU1VYT1puQGF0JjBANkJxZVVebSZoKUo+Njsye1N6PmAxdltacmZSPyxXcncwbDhmWWJPUmpHISVvI1YrPWBZdzo6KVBeTWU9bzMva00mZEQ2Umx4KXpvMiU+JUlxJXNnSEcoYWopSkF8UGVLaHloQEB+''@;'; put 'put ''bHkiTVhmbVl9M3FJJEhPZVVrPGU0SHpnejFeWXxwey5aczB7N2hAOEc4eipHTENPaj5be2h+YEglLjFjfF53KCtwSF9CPEpZamghdUgmWDhPKjtJV0RMb15EM0F+QjxYOSEzNm9JKUI9XiMrcEM/LCNxMFYiOC9wKWcpOzRQVTxqKUp4cj8rL152JSp6SEtLJSV6Xmh1PXg+YDcoT1FbRzt0NGYq''@;'; put 'put ''dUFaUTp2QyNYcXYxRjI4cTkrWEVuKUVeVkJmJVs3RSkuLlJgVG4lUGtrMFFpfFp2ZjVII3AyXyZOW3w2Oz9DXWkvQjBlaGx7fFBgUCJEX2U0bEgydl12eUd1QlNVYkkyYDIpcXZIJEJBflQydl93VV1MdEZGOEdVVzd0O11sNy9EdUlbVWo8ZHN1PWFrSEcuO2s+XyJnZGBqPF90eyxBJlpkaEl8''@;'; put 'put ''UCE+PHdwTTlzKldUfjh9VXJ6Vl57eHJZMis8X2ApXm8rI09tM1E6MiNoWSZfcXhmfnIzNXVCUz5eTk5LM0tkIWFAWHdQV0VpIVV2JC5JeHE/dz1fZnVlbUkiP35DPDxBdSt6WFN8NTJRbnF9bk57dGZOVElhXnpsPGMpMHRkVz9HaGZfelZCSTNERGlURCpPVz47IWomSH18ej8zX3lQOUk5fV46''@;'; put 'put ''V20xRl5zK281JmJZXkl5QFZyN3c7UjR3U0c1bmpxJF59UEF1fSVDK0JAVn5XYXdkQXwrRiMqWCZCQHY3NnVmbntZfiN2cXM5diNnJVVqOTx0Vk1FdEtLXjU1ZSRDKj89ZGRVckA8czR8VDdoW0MoQG4+flZ5fT84dEJUcy5KaCtEQjddQV5bRzRbNXMvb2RubyYsPCVxZHpKKHVwIyIkYHJAfVpp''@;'; put 'put ''ZUBgZiVWcDlWZ2EhM3ZyTVQqKW5mb2EsbklaaXxpVkFAP1UkIXA+e3F3ZlYkYEk3aHE5QE5qaCJNPTI1YEJUKF0yPzA0NFJ+K0xqO3BebnIhbEtOO2QlQGQ3MGRkeCRYblUpMEY8cHphW1VYb3I/cT9wMiNFXl8lREIpSGE9dlBMJnFxP0l0M3R1WWExRU5GQGIxOV45SDB8XWMpLiYsbG1kTnZQ''@;'; put 'put ''eUYkRk9ednQoX2JXME02NUs/cH0mWWVHNC52LHJXdEI7czZDP1dPe1htTlhUeUUkUVZYRVVKbEc9SzgpO0JWI3NnITNuIT9IRF5dIXh1fCExalM8aC5za2Q9IUlVNW01O1Zudi8wfTk0L2hpbmorXkIxWS5faH1ZO0RWdWxMenBIRGZ3VSVtaWNpVF86bG1tWUxwQz9Rc1s/S3I+bT5LQFssTmFf''@;'; put 'put ''Oi8vY2grJktWcUNxIiZhel9+fEVfOFswKlZhfTAlMz1ialp7WTtwVip5aHspP3VFYTdSXVgsdXhEZT1qVGlUPT1DW3F0TytUYV1FX2UrQU9obUlwKzNBIllPbERjIV5jJGR4Zkx8WVl7WDlJI3RLb2xQNi5qPmZeXT9dTD4mV3IxREFLWl9LT0FOTnBDJDshR0RNVHlObGZWRlZsT2AjYig5P258''@;'; put 'put ''Q1o0Pl1MSGs0V154MU1xRlYrMjM5N0gvW0txPmhsamBUbnAzazgke3xWZ3tWJnF0PVZyWF54dVNhXjh2L0p4a0JbcHEvRn5MZnpBWjVAUHlQaFQqd1FYQEElOS80Km1Ifkg5Wz9AMy8+fFI+ViZ8V0VOfU89TzRUS3M0V154LHN1cComKzI4eVZ1PlE+aiVxTjxaOEE+YHQmKW42UT41dl9NQEBN''@;'; put 'put ''MXZGOHRdPkh4TjcheHBBLyRsW1l1KUxdcj15SyZ0U1E0dzA4NylrIUdaP0xpQDhZJDYqTSs4LEBIRlVVPDhUO3QqXnZafXo5Z3JVIWlvVlR7YDN4fSlVd05Qd148d2Z0aityaC5JeWh+WHpDXW5TTCtTViVwLDJufnVPbEd4OmxiKzxhUjAjOzJtbHI+JiFITUhJbTVtckVGZWQwbFVgek43Y083''@;'; put 'put ''VCUuRStPWyRtVUdmYlM0QVY8dUpJJFtsTTtrOnckej01WDRLWmJpZFQ7cHp3UDxbezE9ekhdZGFPWTRRRFlqRVVYVDA/NS9vZV95Q206KU5QTlZdbVA2MFhoSG5leWdXQDZpOWhEKDNSQDVvXU5pVGNePFRmXzV6WG13OjwrMSRkZF8wXjhnJkNaT2hNY2oqOTosTyY7ZWRdL1g4TzFuczAhdHlh''@;'; put 'put ''bmUyPmw8IXNIeS90LFUoMkVVMW9xWm1fMC5sLjtoMF1vTlQ/JihifSNZZ0U7UC8jJk8xMCpne1pQT1k0UTwwRHNoWUkobHF+Q2lCU2tqVkFMNjFGSyQmW1JpbSltWFpgKFdTV0lhUCZuZyZGXkNyel9eZkZISXwwKzd2QHVtW04mPllSXWJoLjU7QG8melopeHJNK0pwUXdiYHcvMENKPStVNnxI''@;'; put 'put ''b1FfOXxjYWdLPEtCZC87WnVoTGVpWnEsb0pdUkxKYyJNTz8hV00iNVtTYWdSciFoR0lpeE45dmwrKl0/VzNIbkxlTjY/QFYuUmx+NSkqL2ldYlpldS5GbkxlTEE+IXZsOiosJi8wK3ZtalNyJGpFO113K2xIOnVYUiRCcjB2WmdlaXtmJUAqNF5QMlBxLChpTDwyaiQuUVVTLjpJXigmQ09uaz5i''@;'; put 'put ''YnVwR0orVk45UG17UEFXcGp+Z1t8QGwpaXZtP1N3bVpZclU9MFV6JnhtOyw7TVZjVklXM3tRWEsrdzxufCEpaV9DXklbZGlQSU5zZCE4fioyJEdDbiNnLzY8U2tLLlB2WnN4Zyo+Jj4zRHxfMj1tR3J8YmpzQklqdzxeMm9YKXgsdSQjWD14PS57Nzg9U1tUcDxDNEx4aD8sZFh5OjJNLjp5MWYs''@;'; put 'put ''Ym90KWE5P3xdIW56Ii89aUQlP25sPU4pX0RMJUZSOlQvQHxCeWdqeWt6KlhrQH06bXozTSRgNTU3JVZNYTkwR049dSFsK2M1W3hlY1ZYbitiXXA9YEVZMGFKZk06dXtDd1JiYkdAOmlCMUNRWTB4empNKUxbeDdUL3FXfDR2MDR4bmxSbzldenVANXFQMVkzdDxTIS8pczAlL1VhVkp7eVNGeTE0''@;'; put 'put ''M1V9JSpaTnA1XTZzOTFTJix8NSNtUVI0YGozWjd2OntdKHFlNyo8XT1ON2lkcypqJjM5PzAqVDloQyM/dU45UmJMal9ad1JkOng8cjlzSCZwYz1ON3J3cDp2WkUvOSFrRF93aV51cWhiO0BbR1BATCNzPyNzemVVUlkwfEl1SlBub2VXYV41YEVNP35Eeio5fT9sb25bVFdxeVFbeCo1I21JPDpd''@;'; put 'put ''N0lPdEo8c1JvL0dYbVY7RG5rZisiKHNSX1hjTk0qei5eWSt0UF4mdDdoJmJnKzkrVy5dYi98amUoWl5ZcSM8JXRfLCtKJSJiRSMzaXBPcjQqLjQsSiVQWmlrWXhmTT9KLiZ4M0VHW0skcVlNfjQsa01wZTt1SkhuPFdTZUs0cDMjIyE3VVciditgV2xbZyglXzgmR2ErSVpMVVsqQChRWTEvZ2Qm''@;'; put 'put ''PXR6eUlNJmxgRnBxN3x2ZTovLnRael5rdnk6Wj0yR3tLenVseSFUPW4mQn5MPldpeVBILE9uQihDcVZWblVQPDVUdXRHUj1gYVMkOlZ7Y24qMkxKNW1MfjR9aCZuSyx1MlA8QXV0M31hTlYvZUs4a01BVkh3OnVfTHosZiZZe30hSzVqa3YuQlhkfGNGS0QsPl8haipRP1d9aWNIdksyM1NweGNQ''@;'; put 'put ''fkMuMT1DUjZLL3lwP0drM1lzZ00vQz9rKTBHP2A3Qmdrb2Q3OHE3VG8peG1VSUR7OFN0Jio4cVZWPys/JVRrejBIWik0I084YiR6YVBieyVsWzF0RCFCTTV3YFBReC9eIlM3MzkpNkpWVmJsbWlMPGxqejJsZkU3YUJWLz9EPGl4cD8jeERwdng0OUY/RHhqJmZ+V0dKPzE+K0B2IyhwI1JCTlYs''@;'; put 'put ''R2hCV1IsYXUyOUxIPFllXmwmQy90W2s4al9OWEQvQUZIYXp4cD8jRzBWaTVyJnR0WltBejU1MGZxPEV5R3spZkF5cChqQ1Q1KkpGbjQ1IU53QylOOzI4JGlYOE9pL1QyQkl3OVB7ZUpaWDh5KDRKW0JxNDhyQVF6NSVNZ3d8eSZNTmN4Tkg8dHNiJHRbXSNhLl4+LFVgZnh3YjRfUS9JO3RaTEJe''@;'; put 'put ''Jl1bOXU/YFBeIkNaY3VEazc2SW1NNj4/UTxeZilqMXElPyppaXBtYFZfQT97ZkRhPXlqem1HRk10X1N5bVE2OWFoOGp4RylNWjdhRUdpJmZ+Vz54T2VQMEVFfEQuLzZBaFhWTzFLXUtkRl4oNjg0dTMoO1R+ZT96ITgqVT9SKCxnUUZaUWM1a3FWLi9iOEl8RGo0RSYpa1hHRloqRSpxWzM7WUI8''@;'; put 'put ''XzVMUks2SyFvVFh9KF9EWVRnbUNhUlBBZ1U0W2BKck9jeGl1RHpVX0tDaGYkJkRnZHlPL3BENSRYOiZ9V3pLPFFpb1shNF9DP1Y/OSZYckd4NVlRZiY4TWM3ejBVeylALFQmZ0g1KkpgYjd8KGxxJCguT018fHVtaXVEJEkiNnlRaXgmJXRfR1U5VFF2TCQldU1LdU9fWV8kLC5jXVcmZ0NTdyhj''@;'; put 'put ''fkY+QEIpZCYoWEdqckR2KjtXWlEjSFo/YTc5OCMrYTdLWCw2SzFxZHE8YSlSKkJYTlZXK1pAQ3N0V3M+RlJ9ZCFPVHNQRDVMLGY3d1d6NHspNWR4OyNPT2xKWCYybW88KERffT5scFdYbVoldjo4b2FdSCM0akA5XlAmcTRifWc1P3gwISU/a15aN2I9PVU3ckchYFBrd0xWUVpPV0ZAamR5O1Bw''@;'; put 'put ''NTNfWyZWbUEwVVpFYXFEbXF1TUJhWU8uWiR6M3NmSEQpUTdGQjUhWl5mPmJgaEduS2tKc19VcWskWlEqeW10MCw8Mm8sT3N2MHNkQTM2bG9YfSlkSnVeJEN1WS5fKitfW2BrUExZJXY0YVFVenxNbGY4JjtkdFJ6dn5bVm8oKlUxKC9xJVAzRX07cVpNdi81OVRrU2BnfU0uVHA8Xm93XWtDNW1A''@;'; put 'put ''JCgsSVArWU5BKCl5KjdsdWBnVmc+elkwaV11VjA1ZlYuZVE6VHQ2SzByM0A9TmY2X2dWO0k2bElnSHkyaF43XmB4bVIhWT0oZF1iU2ZjbWA+PE02ITBYKCtzKWpLajRgRTpJNjQ3OXdLZCUhfDg3emFdXlZWUGldeGI6UWYwVkY9KkZuODN1eX5EeHlhST5meVZCVlErNE1KSkRoLjs3MjouTXJ+''@;'; put 'put ''M2x9ckUxKXhpV3FaWzVqNnkxN1o6QndGe3YjeUpJR24mLztfW0tyLkhBfT0qaDFlaiRwWzVHZ3NsXnV0cXdMflohJGxxJXNtM0x3eGd8W3hDZ2FSfDpFMTckWDwscjQpe3x7QStFSjhTTUNlKV1wbndWLCEyJkZRT1U5SEhWdkg8KjwlZTtlJTBBT1soaVZUPXYuWEgxbW01VnhBVDl9aGshOmdJ''@;'; put 'put ''JDs1Si83QkUiQnBbXXZBNWdXeCMzPjdTZU1Pb2ppcnxOUmUwY1U0eVdkaVJUaHFHYDtaNVUwVElTMEV5WWUiVUZqInxMLCNnOTFXaiRTa09HWVo0fGBbQSpGdTpVd0d9LjBZekFhLmh9W3I0WGM7Lk9acj9FaVU5IiRQfWBWa3hvSjJ6NylwIWR5Z1FQJFRgQWtAU0lEP01zWltPXl9PIUFqejdF''@;'; put 'put ''dW5AJCgjQkNoVilGd3o/el84XyVOWUlESGNoU2N6QEk+ZCFQLn1NPVp9JHVYZXA+dWZuKFo1bj84STVvY2NGd1J0TWxSRlJUelt2NiI2a24sQS46R3VhJVVxdS9GIVl1T0NONnVjY1ZYVkpQK3cyZ2Y3VnhjRC4rOWhuMXxbYjdhUixWXlY7UlsiRS5DM0d3cFEsbFM6WUtHSDh5fDFkSFYvRGVg''@;'; put 'put ''Oit3SmJZeUorcGU9ZUY6KSksajpSJi4sI3lHcEN2UCxrLCk5VjJpOjosXitbSm9pKW9IX31Fcy9EWllTOEd3YkRbQ1ZrPyFmMVpOe3p1fHU/e3dGbEskK0M9WXB3djQxeCMoc3JbN2NXI1JSR3l6clJPZXdIRCpzRU4hPEF6Oyh1fGo3L1hJVVspKjZ4cSQrTCY3dntUbltPQHZNVGljdXZzaHxO''@;'; put 'put ''Wj9PYUYmPFF+b2FFZzA6eDtVLmA1aFYrYXwvLF5ZbiJDczBvKSkkcyZjQ3wyT1BOeHIseWdpdHFJfE9zZ200VnJWJn5INUpqY3ZadHB7JTdgImQ2WV5iU2guKzVfQmJqcl9eVH1AZ1pxOTFbL0k5OWgrTm51RjM2W31UVGhkM1JEKXFBXS5vP1RaZz42QHJVRXp4LlREcUIvbSxeL2RkIjEuZFRa''@;'; put 'put ''L19+LyFbc0ZGOHlAUTB4YmN8JHAjM3RVeVNUfSM8fmM2T3U3T09lZnBsa3lCVlVdZlFKMDlxcD5pKnkjKndrSnZ9XWh4JTBsZXI9X1RuTXglZTVDNTBTWDYvbD0xSTAvNSllP21oeGJ4NXo1ZHVKRHRrS0RkTG9HbSNPWHZDXlNqcT1pNXhyUiZ3XTlkISM5S1UoO3w/PVQ8ZnQ5azg1TGE/M3RS''@;'; put 'put ''PVZdITNAOmx2Nl8qaUM+TVUjMyFhcjJmMmVINzYueWdgLGZ9WF9bU0k7aUpgXSl3WCtySSJpUF5EL29QXlpKeExiYzBDUz41PzI9ZmJKTlRlKU1BaHRNJWRFazJtS0RVZCU7e3VMJD0mZ3thYnJINjU1aS4/PC5HSmNbYl5vRCYjZFU6Izk1RkglbTMkfDcxNHBxT2BEdCEwOjNjMTxGVVZKIVdq''@;'; put 'put ''all5Q3ZlImw0M3kxKWI8QFd4aSoueSN5dEQvZTZZNCsqai9PVmlmezVsTXAvXjZARE1Dfmk5LkRHTXNeZyRiUFVRbENOQ2NmIWImSCQ4ZGRSOF5vdmB4Vk4sd2ZTOVpiXWxFdUFjLFJrTnomVG11TzVFPUpIN1BjPj5Uam5VWmk9RiZ3bEwxRG42TGE8bmp2fUNmIkJqPVV1LjhpTyF0NEhITlgx''@;'; put 'put ''TGUuZGEpKjBBWSlnIltMaXxmQVQmYGd5XkxdYGZvV0dwT3p1L2tmQmc4VFt9LDd7P1RDN1JpWlI8Ki52R3Mra2s1TEVHP2IiKik7Ii9gYTBKe1dkfWt3QG4wUXFQQFtzfUtfZSw4bFNUTzlDNmk0VHJIfm5TSjpWTiMvUCVnVmh2SkYkUUE0M2cvVUtFJDthe1ZxbWAxdDBZbiE6dG1VTmhBNFpm''@;'; put 'put ''JjFaOEAxfDFxcyFdQ106ZUM0NClSRyN1PEYzWXk8elhFclVSOV5kV24qRjdAMV9bNCVTMHhEIVh5Q21XV3N7W24vMyQ6ekI0T0NyOHJRIzBqZS9GQX1eXk00VFIhSCpkNk4qIm1VU29WYz1LYls8IyIlR2dDNHNLMFE9MT02PmpsXUVpaCYhOUNjZGZJQVVkfVpZYHgzcD4jLjoxL1daPHlReSUw''@;'; put 'put ''Mkd9Xl47Wl1RLD1hLFR2MXttIUA9LzRdVXtmQzRvVU8+WXFeV2EwdndYUFRFZGdRWHEmJFsyLzpEZWt+IikjLisjdjtsTGchXmBVIU1rVixebnpZTSI9SCVLJVd5UERORk1FYWRuMGYsJFpwcm1hU1VsJmhFSzFaR1V3WWI5fFl6IlZgVmt+Z3d+Y2szNjxrM3AkajdZMFhaOUN0bU5uJitdcGha''@;'; put 'put ''WlBTVnBPYkclLmhFU2FRTGt+RV98a3k6NTk/U1RgOGVHPGZPL3Z9ajlEdXw6Yz5QQ0QzV0g3UXxLIShtWnhtcElxWjRZNjdIOmlYVHIrU1E1NyU9MkliKlAmb2wxbEEhND1nbl5PazRLIno0R0VCOlgmeiZHQzBDOEkjOU9PVj87UytaNUd6KnFwMSshaX09U0BnVEtFN2dWZD9nVVBOQnJoe1Q0''@;'; put 'put ''VCNZMldQeEpLZEBxLmAlIW5naFRObDxePUFrQC5iIWliKDxFPHA8LmVWWF1DbzdHQ0QpKnkxWTdqaUMsNEYxIlpLWUlTUyN1N1lJaUU0Uz5VPVI6NDQ9dnRPTW1NKjJFdyFKO0B2ZjspTG16VXxdZVArQmQ/IypiJDM/TzcrNz9kcHVJYFEqdi5tdTJzW3g8K291YSR8V1AlYStrIkBGenhbWm1z''@;'; put 'put ''W283Rk5WMiwyYWl0dF9rNEV3RkVaR1BHRG9STUtJS3c7ZDRRNXZlfFhjZGZLRVJ8QVRDcGhRO2RCYjl9SkVRcWElKUVgdmxmb3pgbF9IS2FYKzZMKkRDPzBoO2JKSUN1PXUsNmVXQyltPHVPPTl+IXRKO3VaOjdNWXBOd0tUM3FDMW89YjU0X3YuVnxFPVVQNmp9W2l7MnFfTG9QRnVROVk8RXRv''@;'; put 'put ''Uyx8LjdEc2VXd1UxRl1MPXc6M2ImImtFR2pZPUY9S2pZPUZXeShkN0Z9Q0RsfHd5L3Uja2ssZUM3YjIjSS5haj8oSXs5fjklIzhWS3JITHJzZ0U3fTtdLEcvbl4hOWUobUtoZDJnd05ZV2ZDNVg3P1goSWgjaytUOX4lPEhOXVJOXilhOjN0OUE1Kk04MFowUUNFbUkrYzJVUVRTRW1JbTh7YDZ9''@;'; put 'put ''WSxfYl1HRjRDcDdSdWFMPl9HUz9PUjNfPU9tRX5dfjpXb0VucDx5MTdLWGJ7VVksKn1LYG85XjYxRkNAXl98MmI7IktqeD4iQFJQN2opU3ojcSQ6TFZlUH5EX0dsfmk5UWpadyJBUChNZF9ZVFVxMHFVe0ptXyRXPnU2LCU6NyxrJSM9RUVmdWxmamk2JkVeMFhkXV1PP11vIXl7R1l9LGVsOFMs''@;'; put 'put ''cW46M0VwI3BZLChbO3xnZHp6UiZ8UTxFMWJGeDpXLnZaamI4dkZlKHM1VjJRR0xON0g0dGFNVm18Oz48I11ka09XSnlSOloqbjFGTnZlemshNlNvfGJlRnJuZkx2MSlWKlpAZUYsWUNNKjAvVTFUSlY0aEo1QGRRYD1YVl0oYylSVD1bcHo8VzJCSlZ3Q2Y5YFRhT1ouQUpdWTc+SShLTVZkPUVX''@;'; put 'put ''U1laJCI3PXQqJSJDYys3RXlfVUpqN2FoL1RTVS5aQEpJY2tDL0lKejtka0lUPD5SLzYsYUgmVVRFPCx9QXJuP2VIZVtUJmQ/IkJtPTpuS2ZCTTszZmxDKi5IL1I0MV14Xnglb2A3QC5ZRmYwVEo2PWMjIW81TjBJRF0ofG15PnV8NFkwUyxwfXtjVTNEX2Yhfk0hPGdDTSZ6MytmVGtHM0ZHSTJ5''@;'; put 'put ''cXF0QixSJn50UU9Ccy54KHJBQ2VgV0ZAUGVUezN3RklOZiUkYGZKIT0wbXk7S3BWXWdrJVNZPm87b15QKXc5bkBIIjxLUTorP0giWEpFeC5UOmdMSlk2KjdkdlA2QGdMSUg8fjplVi4wQGB8Vio0OXNdZnB6KEtDcUVWL1N2ayhNR1MjKjZLdFQjKjwzQSNVP3hOQkdyWWQ/KztIVHxkOXZSIzx4''@;'; put 'put ''PEl1VmleTFlzeDYudng7QCQwS15DU01nPjR7MHh7Rk1lSGVqZVs8cltfeEJMfXlpZk1QS2JMSGAzcXA8VHZNeFE4L2J7UyNDVDtncXdmKjhoOU54RnNBZW08YU9LZWIyTmIofW5wJiV7Z2U3RCpwfW05X2UzJGB8XlAiJkh4Tjk/eF9xMyRXcyFdbSpaJHx0fU9BUSQ0UC8oJileVz9OOXUhMjwj''@;'; put 'put ''OVpmLFBGNCxuPilaViUyJWUjYDpxVHskO01gTVclVU8+RldeIVlII30mO3szZihAXyJ3fld2VFlPN3tKKypqbW9lR2tHRFMiTUt3P21mT2srS2R2N3xiNSpgVk9FOVRvQng6PVhqdXIhUT9WWjlfd1UqantrKUVTY112MkNHdmRFTEl7USF9IjFza201bE5pZG1rQ2EyRXFbRVJJPHhEXl1zNzpl''@;'; put 'put ''ZTVEc1tvaWwjUmdfQko2SlpnKkhNeWwsRVNBOjQyKX00RyVQW3cvRWhgcnFmQHxoW2c/U3szayx2eGxqW1JuZl9JXzt3K1ZaWHdIfCoqdDBqLiN2eyxMYlBWdFNeSTkrLjY9I3psfUg6Xk5RP31aa2d2Wjp5WEQkczsiS1QhQjpCTiNFP3JNPk4mPHJ6Zj16I2FNeGRlS1R0WE88YUZdYEwrXklG''@;'; put 'put ''YmYpTU9tdVV9K1UvS3hbM2RzVis6Ii4kcHRnW3w+eGtGeUBvIjhLTkVbcTNWQUlkT2xNO1BUVmh1Qik8UjIhL2UqMiJWJWpgQGVmOHVgWkdeNnVqZUt+K2o6KnMlUj5sLGApMV0hfkVuKkBmZ3U/WClne1t6JmV8OG8yV0JlSjRGZWJaMGY9W2ZmKSltJElkQkY/dmF3cF9vbXQrJTU+cjU1fTIm''@;'; put 'put ''bzhycVg4KV9zZSJfX212P08+TFRgJC9qbFk3dD5lLCNDfXRoXUJDbVJPbkpfW28/KjRJZypPImBKaXlsSHtAXig5ISEsI011U0ovXXxLcFFGY052OFQvKDx5W0gpci8wXSNVXX44QnRse2BvIU9zM1NKfkBtbkNed0FFNERsNiNWbk1zZCxgXlEuQkxVVSUlOE4xbW06P2tKUGtRWENkZGtUYyJP''@;'; put 'put ''Yk8xYzpObE1aPVZ4OUdATmhzVGBTPk9jUEozIUFeLGNOZWwzL2VlYjBlMS4qfClBTEI2em8qNnxvajkreExBRW5RcjpGMnE1Lyp4QlEvb3ZMWGAmKThsQ0poPDl4T1JWNGU7MVBfWysjTVFhTys+LiNHY1BPfiQ0ay9KWShqSkcqWl5MQ2ZTTjlqZHpdRW4wZn5fQih4Ym8sSl9Wa0h7dHwoRnVR''@;'; put 'put ''VDgsKm4wbnhATWZRY0VnSEJrUERBQS40SkFHdXtFMFA8azUvSUAjK1R9cEFvKXJtKHVpL31FNEIjT1RqZ0UvSVJBQUFBQUFBNldLImwhcHplTTt4aldAZE4od2Upfkw7R0Y5MilERFdJLzNUXj9rNkFyVG5gXV5IdjU+NFYpRlBxP0daaHA8X1Q+XiY7YHskNk1nRHY7JTFOUCVTNHtzSF59d0tB''@;'; put 'put ''M1FrOEZKQDIvQ0VTPj9ZeW1RcCRnWF5bT2p1UFBnRl55d0xrWnUoRDNMYF86a30mfE42MnEkc2VLMVp0NVV9YWVuNS4jaUNJfFNHMnZ1VCRdM2ZVfFJUalB6QyppfEkmMExOVStndjtWNEY/ezBLRnY1JDkvYW44aEZLPCQ5RjVaKzRWU19AKTk0XmNgYE5aIygpVVA2djlEYisoMUpOSF43JlVR''@;'; put 'put ''IVA2V204WUY8PVQ4Q25Ra3heZXtlcl5RO2ZYaGI8Zj4lfDdgQldZOGFYe2t0fHFNUld3MkBGdzJQajAjd3Y5SzxiIWVVMzN1IVpoVDJzLHpJOlhZTF86RCp2dnZAJnhxNFRCJVRJL0RqIXZyX00iUShAPGl8cllFYVhOfGtUbXU7QGcuKVlBV3k8ImUiJkQsTi92NWdTfEdCJHYsT0UzPzJLTWM1''@;'; put 'put ''a3QxVDtdQTUwQDNhXSYqX2t+dWFQYUA9eXJnNTFCdyh7NGcmYTp3PE56SXAhe3lFOT4vR10mPChobD9MVnpha3dwcmd4amg/LlhxUDRjTiw0Rm1dUWZ8fXRNKXl3fXlWPSVzPU8xfWVAWEMjZkclLzoscTtBbmB0WjpdXVVGKiFaKE1XQ0hJV2hKYDgkVCFVTykiSTw8VHpfczEwNi5sb2xeNG5k''@;'; put 'put ''Y1lQfWRYImgmaT49QzpwazE5XmVHdChRNDQjfGJ4MDJuSF9xJH1WKXdvNF1kQjEvbEFKP305SXl4PkIhaVQ5bGhTMDokPjlWYEAzd1hfRyosSDZoZX5YaV5uU3xhV0s6cyNORE5FZC89ZWZMJk4kT0FQRldMRCZ3SSsqQnU9JjgwYmlObWVTY1J0eGhQdCYiTnVbMjQ0ZSVxKUl3ZmtMS1s1PnJ8''@;'; put 'put ''I2s/PVB7X0h6JE9YLG08cTA9THxgVDNqTXpxV1NDY3w0XzEvYFFPOnxFX0coXy9MQzltMC5YJVd6QlYuRCtjWC9JaSpXfmlGeTJnI0xMdktWV1tKJSExM19jWVR8WnRFPl9RTz8/KF5jMER5KT01d0FfVjYxXmgyTW57a1NeWHh1NC9dezU7R0pwVz40QSprSE8zbE10dVVLYHAvP0VKPHd6TWFE''@;'; put 'put ''YkJ0KlFNaiF4cFk9RCRdPCo+Qk1WIzNGUzNOV2VXVUVxflBncCRJIXJJX28/JSg9ZWQoczxYNn5ZWDlGMkU8cmtWRiJ3M0BVJlZvSSpRVEpJT2lNRDhwLzlqVUt5aEo6T2B7N1klWWhhMl88IjUjKENTR1RKTyp+VlNURXFHYUciUmJNaVhfW0N9eTpISXkofH1CckQ9fGdXJkZ9UDkzcCRNSzRb''@;'; put 'put ''QzdnfStldDl5cVVGb2VdInxTZHwlKz1OOEg9QU0zZXUodE4/eE42Q3p8WDYzZX5nPDE9QXxJaT8qNHVBK2Q/PEVzOiU2UnNNKXVLajZ3RlNaNjB2WlhhMmBPMU81dks5RXZ6W2IsfFhJIVdKZThfOU5kZTo8PWZWMm8pQ2tdbXhwXTZwLzJqJHFwTnh1fkA1VC9UY2wrfl9Nb1crPi45P2hTZS9U''@;'; put 'put ''YXZjP3ZXbENrYXNRSXN5QlhAMzB7VjtzWU9GMUYvbilqTEVwSHBLRC43REFDeWludW5dKGJJTnxxbzpEYG46OytiWi9wTnE7YDdFaSJiNHZeRklUPWAzKlZZW0pdW0BUMVNbX31heToyNkZ0VH1FZ2lMfXBHLktabC8lNktOYCV9fHQ7UD45fTAhaEdCOWd0U2dVTUZyVXhATkUkQSklKDAwNjld''@;'; put 'put ''UGY7eUtZaWlQTj8rZWtdTXJBaUNYQy9AWD1HSUEqWHRbZUZSJiMuLmpxcE5TRX5scDluN1NMMztiLExkOSRZQXVuRUpbRytLaixuP3h7bUh6R2MvQm47PkBZJXgpTFpbY35Hd1pEcFJkJFpbYThidTgzb0NeI10hajRNMyw3OipyaDUsclNIbkBgMjtZalRNaSgsfXomT1BjcWZuRFpqSWE8QjE8''@;'; put 'put ''bmwuODZqUFdtLn1SQkhYc2V5LDdbeCFjdDlgJE9SNFF4PlM4K0V3V0BIYjlbdEBydHBuX2M/VF1HUExyS2dFciJAXk0zLzUjJTI5W2o/LmBCTS9iLj84LDx4Y0R3XXs3OlhwOm5aXTc3SiU5X05nUj1nU3NhW1F4IzVre3dFTm5kUDlDTDc4Jj9jbHpnW0A4M1o4P0IhNXQ+SEU1My9oTigkZUoo''@;'; put 'put ''eiUjJlAyLnxtSUciVFRoQChrXXoseFBbWTdEOSRxdmUiVzZAJjMoSz4uTFpvW3hJR0F6LENbLiU/eEQySH5rTmtaX1MqMzAsJFRPIyVpR0RXQ204ZHB3KWxlMipTaShHMj9oUD57Okw7Un5gYjZiL1JhPHovXjNiQ2hibV93RUQoN2MycltOKmY3cFYyVXZtRk8uflJ+MDE/JV92YlgxeGpAWSEu''@;'; put 'put ''NkJiK195KC9dI1cobDo2fGNKcXJ5VTtFREMzclRgUTkpKGE0a24vRnx9JTViTzV3RVMvSFRpIkZjTHJ2YGg8YmI7RkdRNT99IWB+elFAU2RfbUJZZylfe2svYzF+YFhRX3paLlptSTl0ZGgqXVdfT1NwZUd0TVZILiFsMyZtNWY1cDM4PiQzfUhkS0VPTGw+e1RWQ2NHPkMsfWdUQWZzeUZ9JDhV''@;'; put 'put ''Vkk6fEFrIXxCP0ZNOnFtbzJaRHs/UXE2eDw1RUZSbmhiWnRsRmc8WUBDT2pOJnhZO0tgWWRwQzohY1UlTWt6XXBtP3hnLEw9eTZ3WFcsVF11MTtsfEFTP302NmNJajRtYUlDJTA4PitIWy8+ZW5hN08pRmt3biMhSUA+I24pU3t4dColNUU7K3V8cjV1QFR2RiFYY3BtR0J9Y3k/QGhGfTlwUzlz''@;'; put 'put ''IklkXTcsISt7KnZWd3lQJCs9Tnt8SER2cVFwNll0M3pOXyJxWTskJi5ZVHA5RX4sb2Z8WVBJU1VVPFB6dnMmdjtwRkU9a0c3IVBnaldEWFBPTzZrb2h7eztVQzI5R1V7UU5nK2ltRTVKIzsxfj9tQ1dVe1g8KkxGdUd+Ll5WXnRFcFFTbiYiYlVJdkhoPV0hb1BgJXQ2NGl4U0UvYlkkTFEzYDQj''@;'; put 'put ''eEsiRWdTOEdsMSU7YUNIb2VqLjVWQTpOVFl4JlpwJS8hfnVJWUl4TVF3NlRRIiVDKzAxajQ9Z1VLX3pHaXVOfGtAK1VIO2o9KHEhP2lhfTlDQjV5RDs/fVszYWlfe0I8NVF5MjIuJXslIm0vaT86Kyx8JSIvVUVIOnl5WUkycVEpcF1ZR0BCfVIue28lYlkvdF0+bCtUSntiITBMbDg2RSREeVQ5''@;'; put 'put ''KDcxRXUsQXJYT2tOIjp2dihZems+Yy4/aitNPyE7MlpjJU07QztlXi91cSNodiEyZnNAcGM8bWNTKW9PP0dfOSx6cCR7O15QJCV2TGRbfmJ2RXRCeTl+VURoKlomMGhJcSp+aVpofjpyRTFSZk1eTkRNQ0Bbdj85KGw/LGw4ekYldDd6ekxfZVEhTFdid1Ijc0ZlPEpYWlhycyZwUGdGRm8oW0Iy''@;'; put 'put ''eGJ8VzxXeWN0c0c1YzdUSyFtZyFBWip6PnpHK3E1JkU2Iio3QENGQlFgfisqa217MExMOE4zS0V7RSFoc1F3NnpAP1pLTFJaMk1QZFFWJmFrejU0M2tQWzIpOnZIVih0Uk0oYDlSPyYyKC5EQiwyc2A/JUFEMz8sfn4hPlgwTkV9PGVFKndmX15+dmU8ajN6JWg4Z1RQPlM4MTYqNVloc1RUL2c6''@;'; put 'put ''X3V2VWUxVDpCVjUwUGl3SDsvcT82VEZzeERuWXQzQjh+TVlqQXBDdm5XW0QrS0pLKilxN2VyZ3FvZWFSc2tba0poa3tueCtgQiVqKnhWLCRmIWBMNl1tI0YxcFpiZWJJInQ3c01jWU5DRlkmMHFbSTRCL0lCMEk0fEc0dXdhS3o7OkdCYiovfiZnPXx7TWFDWSM/KCMubn19T3V8RzJwKEpoQWpj''@;'; put 'put ''IyEqbkR1UVU1OkJQbyRrIi9PSz14OTlxeUFOWDRbUnBsamh6VHlHWTt6MXEpOjZ+MFFhdCw6ajIiWixCWzAvPzJ6Y2d4UnNbWihAQEk0ZFpFYW84THlzb3p6U1R2UV5pOF5Zc2ZRSU5zWEYmWH4kR3szNDN3OFdgfEJOfT1JV2RZMT5+WG1YZjpGQm5UMi9lK3NCOV9xUjNjPkoveUhQby5QTEB0''@;'; put 'put ''b0o2R3BqOllBfSM9NjRqS0IvSyopZH1BM1ttdFNMYWgwS3tNMWIvdEhibVlsWDZMNm05YTdDNkdLKmMpKER0TlpBLkdoNmJAOTNtRFs3MVYyYXk1RnBfeiNDLElheGp0fW4kfkZkcEx7MCZedkd5XVg8eHY/MXZ9RXdNS3UkO3JOYGhXWjxlOU08JUt9bmdkfEdxYEJ6JC5+WG51fkpVOVtKIWVs''@;'; put 'put ''UGsoWiRlWW07JihoPTY2TyEmYyYhQFIiW0Q9I0RTSU1sWV1kN3VIVVk1P2ZaWyNZPCVZTCZsKUFYN1gzTSI+OXExa3dLQUUxeDk6bnQsOCU+TH4+QkUrbG0udnssJGVBMEdtZnc2bFRlXlEzUkp2dnV9QSg4b0pDeWlsSTVdLm1bLzBVZyFFbFFod1lNfilQZ0ExO29vI1FkU2wkN354IXJxKzwq''@;'; put 'put ''YTU9d190YllBI0EjO2pGLnt1czFxKnZqJTt7JDdWcDpQLzBRbG9+bHE7WVc2JUE3aG9zKTolc1hCXWl+Xn0/WSg4fCFSIUBDM1IwMFoqUmY0NzA8bSNOQXo8JV0wJi5wdkxTPHU+VU0yZGR0NyRjb00zM0hUWF9GJlQ0TlEhV0NLXnVtTjJCN2UldnVUSHFMUHdkXWk/JF0wRT0rI0AiKmpvMkpU''@;'; put 'put ''JGlXViNsUTcvMG9UaHo2OW1fazZTRjk4TTpkUUAjZTlRKkpiQnpdMyFzM3lkTm5zL0ZFal0zVFhKRn5tRWkxMDFSRUUhKyt4YyRWQ0IpfnFpYlkzO2UqKS5wZHVnP2Y1RS8kSUQxK0pCOCZeeUNTdj1TNE9hNXY3MGtiKXRARWQ8Y3c8PTkoM2pEXXEjSHBbSUBHZ3VKVyEuUnVrWUVdRmI7aX0k''@;'; put 'put ''a2JuPTdZUHAqWC5yIi8kXk0rPCVLb1ksQ2s4OCtzZWw+c2ZMNTo+cSxAakh0RFRLaGlaQnRfVkpVOGxLfT44ckROdkNuNXojKEx+flNpT01uL24/OTxNMylDYkNhI3RRPTpdNXtNZDdRelNFcTtEc2BtKU4/ZkQwem5wLzx3RnZmdnNOLiowdExWXmQ0c2pwdTN7ZnxkOXY+YG5NWSYuPGloKT87''@;'; put 'put ''QXV5YndgPnYueS48QjJMTG1MQERCM1JaIiNXXypvR3ViST9nZkE0aT8/Tl9DY0Z6cnVUWXc2OCklZEsoe24/QVNfMUUka0AiVHdYZWhsbTEkRStwMDtCK182RzldNGl4NXhLfV4mQy9gT20yUTZsXnJ7VkY/W088bTYsYEJVZlc/Kjw/Zn4jMUxZcyFRUGtmWW8yenw6XUxLciVrUjI+VzNQZjIr''@;'; put 'put ''NyhwdXJvWUhGKlckPns3U2RQMXU9YGw/UVtoPCZSTntYSVpqJXJwTFFNTi5KbyRXdSYmUXVOOFVDRjs+dDswQDYyZXFERyJeb1NSP3khIlRNPnw4JG1ITEAla1hoPkUmW0t6JmJlaUhgX1B8TSFFTTphP0gwISVxfit0VSNGI3VdMCQ0ZFssSmJaRU1IUUJrKXRaOCF6QEE/UiJATy5ubV0oN1Um''@;'; put 'put ''VTJ4UHhCRlNSfE9VNH1nciYza0RbW3U7Xzgxe3tbdHB4cHtJXmZ2M01WRHYpWTVNTkVHbDFJPEBnUnQlO055WnpbOEE8L3k9aHlzJkxBQ35FTDI3MUFyQX0hXn50RHZVOTxeUEMwUU9XbFJuO35sXzsrPGg5WENoOG09ITtOazF2RDImPUg6KixrJEdXLyM2Zy9XQzY4VEsvWFV7UWxCRy8pb2Zg''@;'; put 'put ''X3lhNWA4Tzd1fUc4Wzo6Vip7QVIuSilEdk50eSlCKXlQd3ZFdEZdRzN3WFMwVHdWbmU2OXAlLFl7Im8sLmQoOz9ENSVLRk8lRytEUjFwV2RSOmZKJFoxOjB+SGw0UlhCd2ZsPyFjbS9XbEw8XkEuemBGVltNcHBlNjl7c2BBXUtQSEw6aWdPKFAuIztBRmY2d1huOWk1PU5AJV50PGg5IWIxezBz''@;'; put 'put ''RUgwOnlhVyVaTUQlRmBZTElXR1pwMX07YFdgWEJXQV9xaWdgaXxecHk+SGx6YnxSQzAoVnJRVl57TD0pVzM5IU1PLDQlZldjUU9qK35UJnVEJD1aXXV0fk1MTzBxMj5HTXR2SGFBYFhzIiVEWlEmK0soIWhJQTZFJHI7VntLTGx3QHZhTz9KPmg+V05ufSoyUjNgNXxZIW5UNXRKbDo8K0JfX31O''@;'; put 'put ''R2ROenssZT41Mz1uc2NjM1htST51dmpaXWxqK3FrP2l9XiZuYUlqTGRAfWVNWVphYXZDMndPLkd1dU1Me2UuOi44eXRtIT8jWz1pOl5odUxmbllmM0gyeUlIRT1qcE4kQGczeD85LmUkTVN7fTtleH5eUlprL1B4QVpLajc3ZTE6Ryk4UUcqc0x0IiwwV1QsNVZnLyY6WltGU1hfe25ZaXJHdnEy''@;'; put 'put ''WEJ0JVhtXisudWFmKkE3bCRESm1IWFZ9ZnRQYy5JUjJkRE9hKlNjLHBabk1wUzEqS0Y4djdsRFtfNHhtSzpdMl9EZG1UMUZSNl8saHJPSWRtYjJ7MykrdWk7ZV9MRjkxZXB3flZTaHdlMCZ8c1Q7LkZFLitFbEBwXzRQUlB1LH0pXUQwbDB1NUVyQFFvdEM8aDtIaWM5L2J9SnRRdXdfYjZiYzpv''@;'; put 'put ''YnVsKT53fW5Ld3YobGN5aihySD19TCN9VXV8Q0pQOXgvNiVARVt8R3Qpc1NkRSo8ZmMuYFkzfVt1R09ZaDB5VTEkVT15SUNHdlU2TmlaW1J7NlVNLGtLekZRYVZYPllSYFhSNj4+Tk9FWylgP2p0cFcmfm4sN3ZeTS5MQnUzSDdjakM+VEsvOFNZL3EjR1cpYCF3LmQralFOQHtwdmJifSskTjxm''@;'; put 'put ''dix2Ll5xbTBqXy89QDU4Q1JhRHhNJXZdaVJ4R0c0ZWkrNDplV31XNWNlb0k5I25EQ1trZGpxbWJGSGM/UkZMUTduPlI7aTZnRGZDeChSNXBtMXE4M09sO3QmWXA+OVFsbDl0NHNDa3tFOiRocHd6PEYvfSYifjBsKD48W0sheUt7M0wwfVozVW4pb01FKWt1WXFmVUU0IXFmY2VaXkhpX2BBP15q''@;'; put 'put ''THdJTlc0UTEsWERPPWJsSDQpalo2UFVqNWJmSXQyJFF2S2AueFU2eExQWz4kRkslVDJLdmhSQVBBbElycVlfZmtwR1VDd3MpL3ZxZjduKGMhZGBKMDlGUjMrRXw5UihFMVQ2SndubDwwX1V5b25Pb2RUaE1rbXV5VXdeMF5kNlFtWEBdP3JhbX1jTGlkdz1NT05pW3I9SVM4QmlpRjosd3RKd3k2''@;'; put 'put ''LHQzSEB2KERmSl9hMnYzRC5rQnU2Pl1PISVBYkIyNGVYNDphbXp3aUNfOU1rZlMwKXxhW19fel4wRG5IITJGeUcqKUZtKVgvaCJfIW1LR1pIIWVFQVc9WTJNLF18XTI0T30rWWlvaGg4dXB7TnN8bnA2JW4jYitxT1E4N2tgdFBLSiE+I0xtb0hNWzhRLmEoSyIwKTNTfWJ0N05tXVRAXSZjYWpo''@;'; put 'put ''JkElZ0EqZ0FrfUQpX1VfYSVsd1l5SzphfF42JlhBeVd1VXtuYVZee2VQLDtPU3BMdmxNZ0IyNkRWWEtCKSZpKUpjWWsuIWReYH48QU5pN2R0Q1AqcjVgSkt4WX59XkNYfWspYUtmR0xYeEFMMyljMVc9R3VxZ2R9PX5VYy5mXzo/ST17XjNUV1F0JTxIWnpSPk5VYV1GNE1zfTd3VUxRXj1YdyMx''@;'; put 'put ''ZlcwM0hucT1+ckRAUHheVkVdYn59cHA5Wl8wXntffURFZTRpfTZ9WHNNMUs0LkFYRVRaODAySV9APyxUcXByQzt5dDYjTVRoQ09NUUBKcFtDK1ppQioqbiw4LGFuQFY4JGkmaCYwYEBUQHptQDpkQGVCQTVmWENzTyhYI2N8YkdlbDZmKTtqK3FpRyo0R0tsNyZmW3FjUXw9PC5rMjIoJHp4Vl41''@;'; put 'put ''JUtnKStLV0w8R3FXa2BJe1VoclpzSHVSU3sufTw4MlV4eTZCemFpUkJ6JGQ4IXFuNDQ9RyxtTjtgIXRlU3wkSCt0Vnd0Vj5vJCYlZExmNTUme09qQktwKlNNeEE3Kkx6PEAiZnBNWDJ2IzkjTTg/P0V3UkZLIXMzU1kpWTxUJkwwMkE6SDNIZHllekI3ZzA/XnkhSXJDbVZNLzI8V3I1XSIqTypi''@;'; put 'put ''WGF3ZUk3fTE3ZSl9Z3kyOlpQU2FDQEBPQGBPfTp0bFEvXkc/L3cuOD1vbFtPQ0ckXV9tX3xhPVtYP3NKYW5zS0g7dGZpWmskfUE7cGZBdWJJUyFQLHhjflIvXVoyRn02TzA3PDU4SlBmbms+QXxWKkxrdzBMenA6STlQP0AsemZmTHhadHVUd0tWcyMmeXtxOiRUd2Zfc3o1PDNTZjtAaC5pMXVf''@;'; put 'put ''bDVUU1B3OWV1MVFRcFpXbCZKSGlpTzRMdi9fMj1xdVluMCNvKU1nZnBOdDZ1QnV1eUhbeTJUdVsrSFpXJFg7PWFJOHo7NU1Rdm1hKnlMbUwzcnJha01CKk14Qzc7ZGEkfEpYfUY2NV54JkdQISVNLkkqXz1ld0lZOHQxNlkocl1AO0AjQ051e3xuVTNeZWJJWEBqVzY1Z25PX0t0JHYxMyFeY2Mq''@;'; put 'put ''THN1fGJRUDhhSlNpTyMrWT00W3BuYmZ9VEpnKD1mcW4mfnFGJVE4VEopXnImSERdRmZTTXkrZD1gX3dVTnxZS1M1SXFZUSZlaVNyWyVGT0B3Sz1OZDQ6aD8iRV9GLls+P3c1YTYjV1RBZk1DMiVKSXFpe3R9L3VIV3Z1Mj5sP1AwfkBuRHEwW3kvSDxdOXIiNVN+cCYxdUo3SlIwIXUrMV4yNjZz''@;'; put 'put ''a35yPXpieFdKJjlXYzZCLDRXayhOQ3hOa091REp4MDM9M1pyR283cjpoclNUMjxDVzM7WkNmeXhDUkY7czEyMjBQbllBdWEmcV9WJH5hSnpBUVNLaWdWLiU5NnpINWIhfiZXeGFQZ218XWhRXmImP2RFfkEsS1NiYmMubDlCbmM8QXRuPFIwPXIuUyJeOGQrVVJeVjUlMVgmWCtkVFtmW19WImw2''@;'; put 'put ''THw1cDJ1aiR6fkBxUCMmaUxmKWBiWF91LnJYZk9VT1IjRWlNUHNvQnpGQyImLEooJDFCVGEsZUZ4YGM9PkBZWH4jUyUvfHwueG44cC8uJEBFZm9WTXlgKHYxfSQ4MGxUVFIlbVVFYV5yPVhPXXNnMGNkUnkoMyoiUURJeCJrTUpiaFhXbmhtVW5QK3BKKj4sbFlZJHBpaTN2KE4yRjR4Y0hVT21x''@;'; put 'put ''eUdCX1pYMiQ5a05fcj5layZDMD5bTUx3UEtzc3U+MWBvL3pYYiklK1V6akQ1RmN4UFJVMlU1U28yekdNSmROUWQ9bUxbVGM6e0cyMC8rYDtoaUMmWTZqPmVpYFljKkFmUFNIPDdSQE5+YmA8N3omb2lhRj9ELjs3QWI5IXw/ZD9daXhoWklTIys9a3xwQXxMXjgxN0tZOUd6Um5xX3xRaDhHbzB0''@;'; put 'put ''MCJGN0tdMWgkVGRUbkQ4USk5I0hXUHB4JlEvWCR0RlVrLClERHAuSiw5Q2dveH1LR3IvUyJ9L35GWVR6R3MvZV1dRDRHLzhaVVV2P1RSPTtrblhhKFhAbmhGZkhYKU1SR2p1PFQ3QX5MYnFgNWZ8Smh4JUIsKnQmQlEoJEk3XWRCdExsInNDUUtwfW0ibFtHIS51QENme295MTFvK1VpKTBNVjxx''@;'; put 'put ''I11ZTjRFWjBIUSwhUlBvPXJoOyV6PGFxKCJSTEQqe3R6Y25LelsscjxwMXgwSXdUL0YxXmxMb3YyTzo/OihWZW02NHRLdjJ6QjdHPjNfSGtjXXFAX3ZNY0ciKVkuUyRWXiFoKW9yZ3pQaFIhSWIydG11KWMkd1slTDMlaGBUODYpdjtteUo/KzswJD4hcypOIXkmSmc3bnFpdXl8emAicyQ/e2VD''@;'; put 'put ''SjpdQkBoREosNmk6YmdSV2NnfjQzODx0Kix3dnViMHBeX0JnQXpHNkZDRVNxe3VLbHdFcH4pVCM+X3NYcTpoPmhXT0d3NGgoW1cvO1JYWTQvJWlCQEFTcjZKbGduJXEhRStAIW1Wfl4lYiRWTUdaWUJnaz1MbEo/ditjTDRhKT5+OEs1WWJySyJTc157cVd2e01pJXxUIl1nci8kRFs2RiI9Zjgv''@;'; put 'put ''Q3xDZGRfb1FGWjJ2ZF84YWViJWJTeDo7MmFWYXxpQHE7Zn5BJitoR2k4ZzxddntdZEdCKk9qWlJNMFhLMXRETUBxZGRAPD5PTEtHPU1WTyFTPiMvST1ALyx5Oyk3Q0JpJklOW3VwTj42cnczYT9yQmNROzZpXn1EbTw7WVorUntyM2g4OzNvOkldYzk4eDMjNFNbJnNOdllCWV91dGIySVpSNUhT''@;'; put 'put ''VylGYylJXjhje0s2X0k+Q206KDsud31jUVB4UjhIVT0jRFBuaDImalZyNnVfQGIpfCpyLD1IWzllaHxZNDNkblJEcSVCamQiRENXPFElTSJxZVJWPCVsdE9eKX0kOUcqWTBDUWFEQ2EkSz5vfVJSd2F4NmxHYkNiM3dnVktbUitsR0BaKzxIa2o9dTxnKG5jTVJCMjhZLGQ1OEd3di4hMURfYjVW''@;'; put 'put ''OylAbGttOnpgSTZAISsrdnVOMilbLClBa1hbeit0JjBydkVHUj9VS0xPL35kLGRbRDY8QjR6O0xOMldSOVRzYTprZEpnTjRtZSJhS0ZYY0lbMnBZcTBdWGtaYkpRTyQmRFpNcF9Ae3JjKTFdeGFEIj5JaDhIay9+Y0RpNUtrOlEjVzlZO2B2YENzIiRPUkZIfmp8W0Npb0prP0xXa2cjbEddaChO''@;'; put 'put ''UUVXVVJaYW9LL3l1LFN5PVtHeD9AXiJ6QmddJFM+ZFo3KEIhKn1haU9EYTQ2MXh7eV9WV2YrODlCOldZfUc0TXpOSi5kZzZ9WFRjMWlUVy4uT0BzOGY2MChGPCh+LlJ6MD9LXl5rfVVpSCwpPH12cFFBcHBgQnBGKVZXUF52PnBiQipXcnthSDJGQSx0eldoKm0zd2BPeEV4WHZwPUleY3BZSzg2''@;'; put 'put ''QlpvbjRYTiNrOlRPKHVNNjVGZF4xUzpPITUwcD0yNVUqIkBCU15IaUMsOCg3fD5ffkZJNS8ia1VSOyU3RCprcF9jKiMhVT5NYDF3cSJsJWtWUEVpeTI6MDsuc3Q2N1JLUWNsTSgmWkRUY0h7K2Z5QiE6aXxNZWRWeTNzKi56W2tCSVRXazZENSlhZzdfVixrQXNDR1tOUiVDRnp6NiR7bls2Z1Bi''@;'; put 'put ''ZU90eFg2Y3xxTERMdmBtZE1idGVfJk5HU0VRKWZOSlRMNDQoT2c0bkw7ZGZJSVU9JGJYdlVBSHhYR09oJkxZSXZNM1RSTU09OHRoMTpfPTMzNF8hcXREIXBybyRRJi9obz02WitQOEQhUlBiSDVGTDlxV3txQjp+IUIyOkRqWVZbY3RSTyNAO3FjKyhPfn19eDhvMXxZTEgrc3REQlpRQEVMKlAl''@;'; put 'put ''dFBhPUhMemFiRGBGUkBUR157JXg+Skh1aDp8bWVARkRAMmQ6YShzWzdkfmQpOmd0VEQwfnIzRjw3RVo7Omc2ViEiMSo0Q19jUD5HZUtdOHsqaXohUk9YYUhxSWAqRTxMPStyQDQwYiNibkY5QUJSJC5od2NZRntHXT0+NyxybFVLIUkoWCFMV1BjMiYpMzolOiY/aCZYYDpmV2gvJmxgS3plO2om''@;'; put 'put ''Tz9efTJsXWolSDk+cCgkajIpSEswZz5TZT4zRHQjdEJrJUBZKlhyUm5xTj9FfUslTzEjfTBPVi94Lm1ScCIrL105S2VwaGNAcE99PWFSVE5uQSk/fEhGRkldOSkpW08oaXV3W3lHLlBZaXFXbmZqTzFhUGxPP0JaR1l2Rih4O0hubjAwZyY5OXtfaHkzVy4xd3pHLnBnQT5SL0heL3p2c1Q2Mkox''@;'; put 'put ''XyJpRiR4cm50SVlTQylHLFlQX0kkKSJMTkI+eG4xV20hK3l+R3soS2tOLzNGXk82OjJLdEc6b3xmQyFTfWo9d0NOIkMxckdhNGBMeSw/RWs4a3NJSiliRXFkYnguTkphWmp7WGJnTG9veThjV3hueG1mbW9YRGk0ciZjMX56Lz1UeCE7WTduI3hFaDVMMF8qMmtzL1h3YmM+PDBaL3J4fVdeeXRt''@;'; put 'put ''RmUpVWhLZiUhK1hXVUMzOzNIRFguZ0pOKDc9YFAwX2p7ZkA9QkdtdDVrZT9nUV5zRSwpaD9AaCNqT05BJCF1LzpFeEFieWR+JUdPQEBYMj9pXSFscjxdbHtdbih5WjNsKXBYVzRkcUlLZHd3U3hDNFB6cn1rMFErcUVlYzQ/ZW07NDFbcSZZb0BSYC8qUyhpbWNxQ1BKQkNSaiMxYUJxPXk6QCpI''@;'; put 'put ''PS57PTxPSFJaamZFeHsmVDBGL05+SjAqWzQ2K1NXeWNybVd+OjZrWmVJKTlKdCFWKTdLKmA0Kkh9VigjQE1Ua2dbS3JbOGBYUkpxbm8/N1g/WUdPb3lkL0AzNDVPbjtaISVFK1tQXyxjdzQ1dC9KUSRnT2h+V0ZZb20lO2RXJjlhaHRPXy9MY1liRV0udHMpSihQczouJjAjPT9WQ3NsbXRJQzZq''@;'; put 'put ''MEcrMX0qQCJRMT5pc3Rba0wibTsrLyQrX3Yhem4xc1s2VUYyNHVoPExPKl5mcTFtMzMreFgqdmdCd344UTJbKmNyU008V31ecFAyIk1JRHR5LFAoT1BWWH5eI2BpVnB9aUtpcTdkdE9mJH1WWnwuV195aFUpVSgjZXwlKzImL05rRHU5Pl1iYmA1aiFUPT4yd2R2bl93YC9sbEhTPk9PRHwjKix1''@;'; put 'put ''ZkdFI193eihRXyZ+LkQ0NmwiISR+UWhAbjBMfmJVdCpeJkFJKmNHNGk1cl1SWyM1ODgrVEddZEZjOztvPj05a1lrNGpTSjAhamY5WkNQIzJLX2NgJUtSfnBxaCwyNXBWblFXUiIicjdPJFRoO0hnOTIjaT9PNSpFLlQxNURuck1ARlImeXcvOVgjPjlQTS9PW11fZUVqflMsJHc6KGVYYTZQMUVB''@;'; put 'put ''bVgzVn1FKGx8cnV3bkBrO00rfTkucUtDXUp3dGhdNFIxXmM1aUYyMGtWY15PM2Y0SjFNfiosUF5GblB3V1g6eysuKCVMZldPJFVTKjFaJTpQVDIiOWNeSEg3YFhHNHQlVFFGST59alE/Wn16aSR5XVQpIykjcGtRSVk3eTJZU1U1djYxMHomX0ckSy9QQWtSbDg5ZHB7fCs7JmRfei9HbHgiXjho''@;'; put 'put ''Qj50e1Jjc1RXInlffkQvMS5UQ1ckX0ZMbSpKVTNKTWppMC5LbTYmYEQ6NlBkbVA5YSZ2Q2lVMSNVWzE2Mjo8V0hyQng8LnBoZXEwOysrOVd5WlRac3ZIZjtne3QoQkldK3p1eVtzMGh1T2lzellUazZQZ102PkJLcV9oP3FsWVlINHN9PDZtVUkyTH5WPkVmbXxAWzhqaGhRZTNxfC9TWm5lMl40''@;'; put 'put ''MEZvQjQhRUMuLFQwZFpvTk9OVn02VyIoc0xCWVE6PEdxXkBKI2dhMHs7KGVQcFphfmpoWitrV3hzOkMmemRHZ1Zpel8hVzJwbm4hJG9eOktBWEwzM2I5VjZQdG9IIVMofVhxcl1jcnBQL3luPC8+MjF+Z0lTcC5BIVRrQUpXVjJuNChrVDtvfVBJZzdqO3ZHWUlIb3YkUHhHfjVnLnpMdGgsZ0th''@;'; put 'put ''XzkjQjN7PiwhdnRgZG9QeWc3enxaZyw1YDR4WklpO0w/JlhhM2VRUT5bbmVIV1MwZkxUIiQkSXJOQ0FicTc/fXksOlg6WDtXOmJPXytIO1UrfkV9MWA8SnQjai53TzwjcSY6SEFmLjs/K35uV1E8JmFTamZieC5UJWRueXZbSTZ1ayEmJWMiNjEweG00PktARj9fcmBFTWNJdWdURGh3O2c3InNM''@;'; put 'put ''aG9lOEkmXlhpW2YkLDZXa0dTYllhOnxuMVRLRlQkTFd7UFVNVCRYQDcyZyNRaXNmTXJ0Q2ZJNmBseT9Vam96TmAkNks6QFo5TUYxWn5lUGlAP100ZVFvQDU2V112Qnk3SHpvZDguUH47Sl9mP3h+R092LnAwc3hLQHcuLFtmeiM0QUx4I0l+Mk4vZXhQfH42ZT0wJVc3NiZYPlhhRiQxL2E/bFol''@;'; put 'put ''VkQ3ZXtpUUIiY31MfWIjaEdDd2pHJF8sbVBrR0hnLEM1QDk1dWklbmQ7VHc6Pi9UT1c7OWV2eGs/P25EK0N9fjpScClLP1t0YCtOPWNlczQ2ajxzQjdUKUNrfH1EeSomanVERmU6LEo8VnN0SzB6aDFFXzdVZlRzSjsvQl9Nb1JjZ3N3YW0jfk8pPCFtdjgod08xYUsoUnBddHppb2RvZl56VyZ1''@;'; put 'put ''K3I6dmVpdGZDKGN9NStPTmBpQ31OKmxyTnEpMko/S00vfGJMI0krMGN0X2xnZWMzN3IsQkVafUVGSDVhRXpxMFYjcWUodlNZOTs7OVpscTdMdS90OSNpZmRCNCQwVSN6IV1YS0JuS3VuVlFMQ3o/ITwkbjt9eSs1Lyl1dT0hSTYvbUdoVDhILnEiLlk0ezt+eTYmOCpzQFJtciN7UndSUSZVVngs''@;'; put 'put ''L3liPkAzc3VMelBMbnxbMyVAOWMxTF4iTndCakttUypoQWFtQGJVcGp+SGx2JlpXfStCfF4zKklZdSw3NXV5dFBpKy9LOmZWQjQ6JmpLOTM0NVJwYFFaOzB2MShYOXZ9R1lARCxfQjk5ZTBzNGpjQGZCIj9geTFbPyJySW0mcyUiTyZqbHMwcUNdKzUoeXlROVBKVDR6XXRtQUNIL25ZNyw0OGxF''@;'; put 'put ''SUR9RUA+WSVzJGdybnJIR3MwNHM/dm9VSmsoZ1giNXVOTUhkNG5PJT86LmNEUGtfNjA0c3BWNHh1KEBDLzhVN25EeFk+bWlSJX5qeCl3Tk9oMDRGMWhJUjkvVyRjaDZvJW1KP0QwaDhXRmZAMmVwVSklOndyIl5Gemc8OTs6UDpBQnZGRnBmPGlxdEdYaUFkQXVwMV9xdCEmZm5PfmUid0VyRWRv''@;'; put 'put ''fTQoUWdiMjhmYmRHYz59VG5zeC45Wkkyen1sZXhzOj9aJVVTIVVwO1NNVGVmR0AoTjteWCNBT1lRPjFIazQyKVRzZWFsMWIwLmY0VXAjST5yOVFjcShpMio4UGkiUT16WFc5UWluOCx0eHhmPFIlLG1KOix1I1tASENOYWg9NCJLeV0vQ3dXU2NPTyUuS0N8e0dNZlZYKzUoOzMhTW1qdyZ9SThr''@;'; put 'put ''Vkh5cGs4bSx1YjZpenthVzJEIT44KVdwSCZvKS46JipESTRke1RudXciQU1XXXo3TTguXm5PbFp4KmYxQ3woY018XWgqaCpIKko/TGZPdHZoNHg2ckt3e3w2eS9kbn1gQ1MlUl93PHoxMkJXI1tvYz9KZH5DWkhbTVk6ODBpSX1SPiEzV3hvXThuOiglYTw/Ykx2RzBlanNNOkA7Iiw4W15pfkha''@;'; put 'put ''NCE5emQ4aUhONjpTdzROVT4rQ0tNeUt4PEdbPFo1WiFtPDptMEBeOGtbcE9nW044V19tIj10TGd2bD9IeDReRE9XcSVrK0FuJk1vTD59ekZhQkcyRCssc3xGPkBTKyJOKld6RWhoNipBLjdsRmB8RkkmbjI6bGZvK1hsXiwse0RYI2N+VmtWLzpgZ2tZO0ZVbDgwKWd3ckVxa287TVlwbGc8MCoj''@;'; put 'put ''Zik3KHZqcXNCWDtrXy95MFd6en4+OmsiU2xaMHFuLmFKZig/RTg2fDA2fjlPZlg2X1Vibm08ODV2Ql5HL3tad3ZtfmczRGRdeDZGeG5BZjFfTWhReVhmW1VBMEBkcC85dVk/KXEzV2FZMUJHZk1zelF5Jm97V0VQL0ZkRWM3R1VPIUA/WGklKWxeXz49PlhRKi9xMTgoWnVtSFhxIkdVb1Y6OV5x''@;'; put 'put ''KzEodzwzMSksIS9CN1JrO2VeZT97Kn1MQ0JWXW1UcEtZV1R6S1Y/UFhAdXp7dVU8YTR+ZCxAaVp9U3N1TSkyezgpIWddZmVEInhVT2NKSX43STNKVXZAQ0BVbXZlOE9WcGEkOjxgNihJeEBlcVRKSFg3TCQyfj57RF0wPChNUCN6dD81UzgxNzozO3tLW01+I31ofkJ7ZnZVWylmdnwmekZWPDBy''@;'; put 'put ''R0Z0PEY2JFNlcXNOPzw4NiEwV0p4OU9ZJmg5SFspTVUmSVVUbFJ4NldhKz9YI1o6Xjtqdi9lVzJiKFFuTEhDVipJRjFIQEYyIXRSTDcqOylHYEo7Jm1DR054KGA9dkx7Z28rRl1Mcm57NUR3WD16NTZKdlROQGs5IzpRfV9lQ3wmQjVeSlY/Yl4hOjVSaHN8b3tJK29tWmxvb1pNUkU1VlM/emJM''@;'; put 'put ''WGdxeGdZfT0+RmZuMTtBNVg6YTw4eUxPOVhQN0FkU3x4MnZ6citNUlAydXw8QmJ2Z1I3b25jOTJ4UX5SWXNeL2JrVlRtRzJZXSVPdz4rXnNjaXwlMFF8blFMOWlreWBFYz92azdOc1JIPHt9MH1FNGthMVhIPDoiW3dCX2VtY2s4VFBIUmhTcSxjZjx6MVE5TUpZPHUpaEpKWUpzQFNMS2JEPzZA''@;'; put 'put ''SWomN3xmPnR2NnZKQiZvW3VHY2J5RjxIO01HPWg8ZjpuQUorPyEhfEtKb24kLkxgVHZLOjlgSWQ5U3ZfbFBjODwqclQ9S15oOVlqTjtTQl4wVWJucGI2PW9jQzp2KEpSdTRsIUByNEQ5dFt0WXheXUhWOmFTIUhea2Ehcl1ePkROZXJzX0lSIz11Omx3ampPaGNfTyEwSUJ+QisvdGQrREg0aSNj''@;'; put 'put ''PGI1YkNpfk49I2NAWmJtIkpESUg4PDEmIj99QmxUXThOYFk+OCQ/Oi51PnwxYWMpTlZ9eSFNNGF0QXJoO294b2s4Uig6QD9KNklePDVyKjNxKik/bzYvPltlLzVeL3Y+YXhgXTsoL0FbZmFUfnl5YUBPTjcoJGZuW2EpOUBoOn1xWmVxfSZmJHg8dE5SNzBQdmx2MiM7YSNjVVguaEwxXWEzJlhv''@;'; put 'put ''Jl9SaVVoQkV6fUlwbzQyO3xKYD4jRmIuaGE/WyFzfGs4dkRXYWBYU3Q3cGc+Pm5uSUR+SE06Zj9Vcm9yY141K21nPkRpdiwqWHBFeFtJPH5GQ3habXZzIyV+cUdMLzFWSz92OkV1My89d2QmIXk3bWFQNjM9a21JUilvIWd7Q2FiNFN3QXphSmhsYkB6Umd1NEIjPzAxbWlmIXp0bEUlQUQ3LiZo''@;'; put 'put ''S19VSStIKG1KdWdDT1NSK3A+QSwiZDFyMmRbIkxSS085aGN8bTVYMyk8c0ZDayZQTXlAZmlhdCspXi53a3hgUkZqZSxBWEtsTGFCODFOPWZoajAhV0dVdmMmcHRkVyk0MiNLX2smPUluNy5OYSNubi9xOTFvOyNre0Ijfll2KVBraiR6KE0oNWNWel5RXWFQXWJEazJONi5nekFwS1I9VkwvOVtC''@;'; put 'put ''YGl5SFAyQitbR1dfRkxlfVcrfnpLZyVyVmpvIjxzZkt7U1V5X1k8bD4/O2RNU2xkLlY/MmlKOVNrfUo7TyFtbUd+TGQ3cl8iRkUkNTZEdTksM1AvbSgxXjYwKyY6RilAPHosJn4oVFU4PVF8W1M0bDp2IUB8XztpPllBdn4rM3l7LmB8MVE6O19GbTdIK0B2cS9qRT4hcCVOdnQiTWssSzVYRVpp''@;'; put 'put ''PHQsL05HZjFBKEUhckRTVVZOdFB7aVlqbXpqfFBPYSxXcFhkQWZjN09FYyl+VFZ1eElsNU9SKm9OOThoW018QGJTLlR3VSlBLGdieGU3Wm91OWkuQlhbcUh3Qnk1QD9pKz06cihGe0RCUDtNQT8zSVpse1E9d0g6WUhPNkQ1bixUa2dtdHxIfkUlcEVIflYoJnY2fmRsY0Y4Xno5SHVMVVR5SVkh''@;'; put 'put ''Vj98d0xuQ1lrIiZTTn1zOm1Wd3NpUWowRiIiMiglfCxCTHRAeFd2ODE8dUNfOjRlOWM4dm05Vm5IPjA3REtTSTpQT30qTD15YEN+IlpwWHBEY0dvVzcxQS8oZypzYFh+RVJ6O2YuMCY/JFJNMWtFN2FyTjJzUyZ2OWc2ZkVQcGpHRlo3TyxOPD4hJmwyV0tnMi8xJj5QIntCcSIwW1A9I2dsXWBt''@;'; put 'put ''VnNCQF9zWTxgKk5vKFskN3c8ZnRRNyRDfXk0Jm1HWl9SNjNOfm9kP3R8bjc1WWw7cSE2SWI5PUpuSEdyRk8ocTV5QiFTNzdmT1F0STUpK3YsYlkiOng3UTpMPyZ9TFsxUjNNJSI+aUNvaGZHfSU1NDVfdyVaLixPLEByfGQ1Z2duUDpIZ2kjQj5dNWc3JURKZEd3M1VZaTNNQyhjJTBBJWV6RGF2''@;'; put 'put ''alNtUk44MmgpOmxVYC5zRXgmflcjUndnSXheUjpCOXR+bUQ3fVkrQWh5YlRKR3BqQXFJbVo+eiIyPk45L2F7e1dXek9EUWM9Xkx5QVV4ZHtDW1ZtIjFIZXw5O1t3cGBhR2dEUj0mI2dAck1qOG1qbEowPygvMTBAbD02OlVRU3U5UmVZQHcoOXVMRUF9VW9KbTxjT2cxK1Q/eCUlPzl6VVRqIWNN''@;'; put 'put ''RSVaQnVqRWR+ZV5YQ2xyR1BYTFlWc317aT1NT0tnZ3lQWFIvbUBQOD87WEMpI1RTWjBOTHtYQmVUTy9APX5lUmVwd3RraFg3PkEjY0NAISU+LHtOKFthYVcqNl95NFAwPHZfWDNHTkE1KWJHMl5YSVFgbFMkbUEuT0opKHhYb28ze3swZVBvNDZZTkJmMF5IJT9KY212PHVkVih7ez8kckQlJUJ5''@;'; put 'put ''ZG9RJFQuIUNXbCxibzB7OHsmUXhvMmtEc2c6TFJ0SkR+ZnUmODxFJG0xYVg+RSFUKjNvPH5LRmVrI2ViU2skVVN7XWRHTGdsY0xjRHhldWBodTlCWVV8OExFQ29fUXBhQVd8OHc/aEUpW1NMQ10lIVs6NG1OMUgiST9MViFSejZuOGdjLixMMC9MQyhKMyolJWcpcF4uZnFgOVQpJFAxfip4LzRx''@;'; put 'put ''YTcpXl1xck1kWEZPdGRwQn1XRzBdQD4/dmEmIWdgPSolbXwlUEZ4VnorW2RtNl9FKEMsNDM+OjZ+MW8wT0dXJkdFJUIyQlJPZ2UsUTRnJjxyVW1EM0dpQmIkQT5hUGVtUGlsbEVuR09eKjpkLDhEc2llPWVrYV9BL2FgYmN4V2pwdFY6ZHdObWV6KDMobShNcF9Gczd2cXdCLi4sT1dVTGlASWtl''@;'; put 'put ''NU9dO1clfG0/OXlXaV9HeSM+TFNvL2RdKDcmU3k5fH01a1ApaXNJP0tMJVQ8ciRUOlVYO3g7MVgkIyU5Z1VhdV88MDh8XzkpeEQ6MU5xQyJHPylwLExIOEBLJWFlRSQ4PWtMJF4hRjI7YjskMGY+Z0x7MSM7MlMsXVAqPDtVdE1na2dEWjglWnJyV1NMZ2o2UkljTyxsJEd9OUNfPFRrKlFGbjRw''@;'; put 'put ''Uilddk5UY2VhMVJVU3g7XX1qcz5LJVptWUt5Vy5nak5XRFFfYitYa1pkTVg3SElVPVs4V1Y3LjkoazJaU3QxVTQydGI2OUBtWEVGWGYwc3xLaXo+eyZscENXYFJ1OkZSYXcjR0dRdDVVI3ZrQTBXLCZSdmwve1EvQDdafXcoNzB2PnhHKHttRVBUXU9BdDUuTmlxXUNZUy5JSTIpN2A/IXhfTDs9''@;'; put 'put ''RTVwKkN2IjQiKFs9amVYWnhHYlA2OUopKUo5eHBTbUU4M0NiWUNWQlYqSEl4fClkaDJhXzwjR3l6WlZkK0NFSFBjPiJKa0s5ODQoX2ZFPFZCUXAwdmIpbX1pMmdJKCIsTiJYYkM2bSRdJjIsKFVfPDM0Nzg2c0NMeyVqSjtlP0BUPTJSYlh2bXM9bVUidl5zLGtmMz1MfVpQJWZdZ10oPi50dFBR''@;'; put 'put ''Wi80PUFNKkpBaHUlRSJDTkt8dVsyWThSZGpSUDB8NE9WTHksYTh7UmA2S3duU1JGZ3ljbmV9IT9FSU0ofDN3NEBlMGokS3ZsU2IoN35NZG1PaDc+U188WW9fX2xfUnhgKztpTT9wMTpWQV9xck93QHF9Y1cjT2FsIWF+YEhLLEtoYl8pTE17Kl9odFMkcFUqQzgpaWVQO1g4fUtPdTA5aUVvYTBM''@;'; put 'put ''YmouRlRrO0VeSV16VC9kIltIKX0wTU9BbCYvYmNedjE+dnBaJUJZLjBOYEE/elMlNjBAXVpPK3lsMCt0OmBNJn45Py41RjNsUixhayoxSjQifHtERHBSUmdrWEdtZj1bc2E/UilWJW1WYyZSPXRTbSQvP0hmI3ZJZlFsXmNibUJRZGxuL15TJWlYV2h4UUlFOjVOcz0zeXRLPW0uWF8yYE5yTlBs''@;'; put 'put ''dmZ6YH59dlJkOz8rbT0zY1QleC9kaW44MnVWeUA8Smw1STVEaGxONWtAbTJjel1KN1Zgc2FsemA/IklqLHFKUDwrQEBldzk3aXdIPFcjT1I6SDxzTkA6OE93NmVXKDkjWUReN3A+PG1ATG1HZSgjU0U0elBsV3kvJCkqTm57SVRhJW9iJnVTWzk1eHUqYUFaJE5rMDl9MG45Mns0SkxUPzIjPXR4''@;'; put 'put ''a0UsdCg9YzU/KVhuQX5tSHs7aUl2ckN7ezg1bE13dihmKGRCa2s1RUM8I3U+VmN9OmlsUCwse0E0ZX0zNUlmbGRWPXRKSjVoUmA4XkxoZy5IJmliQ3NVblJ1X0MoekhsUHFfZU1fLldXeSRPd35GXUlNXUF4OW8iJEZHU3BZLndWeW5FLjM/RnpVeyNvRGMyNEJNIkBGR1g8YUhhRVtUeDM5aHcj''@;'; put 'put ''PX1SMElqU0lddCl7NzQpRWwmbHIlaDFtdzlhI3s7VjZwPkQpan1DU1NpSyRgb34jd0ZEK1YwaXEyTTBXKjwzfEhhXSxaSF16KyxtWzp9QTNSbyQ1TW01STo0IiVWK1IlTnN9Zz93LzU3Q1FiTVoiPk1nWVcsISxLYi4+RGopXmx7PmMpQkoicG9OJDx8SXNPZy9Gcl05Yj1+PD55TSlGdjtbPkM2''@;'; put 'put ''OHF8fltDXzRLZTJRQkkuXyFuQ21CWCsvWHhTalI3PSRoXSRTT3BJez09PE4mR3dWMVNbIipzIksjdzgqJEBuJHpAfm40USlQNjE1SlFXRiFzZExoSTtgfmZ3eGVBP15VInghVXF4MVBQcGtqMFlBZF15IUQydXhAeUZuZjNvcnAkRjclcXlATH5DaUgySy8rWk87NSFCZ0YsO0sjSXc0OEdme35E''@;'; put 'put ''ITlmeTBUPGtxNyFrNChjVHFIMX4lczBiUERrYzYrSFt4JCpRKD99d35CcE46ZEUiZXd5UHdPa35ue0haPCpuUE09Pn1aZmBGPD4hTl52T2dYaGUmYWMsKHdXWylkSXR3c35zeT5keEhxflMsMDghb3w6USN3PEk8aGNJUVt7Zik5MkVeOzM4e1FEdz1aJTkjLmhMTShbe05mUVBEQmJ7SDhwfGpj''@;'; put 'put ''VUdAcGdyOz5iYlZxfVtIYUdzPjouU159aTN0XUtLMj1lb0hoe2Y8TXVVZnw6WDJHZEhVV2glaWtldDAiSDxDRmI+Yz9+MW5HXzIiT19lR0UrRjo6SHxVJW5NM0d3O0V5PkVzNltQIVJbRXcubVB0bHhXbUJtdyhGKkNySzJHcFZzPm8+MSFtJm5aaEchZnRtZ3BeSlNqQ2BMM3VCaDg7PkhJfi9Y''@;'; put 'put ''SnFiVl12NU9afV9benlhKkgyK0ZYSjlUTytqKVNFVEtaZTNBPEZ2OjleTXdbb1tNc0R5amtCNy8ya1duImRdUkVxWWNKcFI8cD0sajcrQ19bL3dRJCxUZnVyS3g5Zj9mQVRuVnF9Nzx6W1tfXU9oa0ZibDtVOj11Ymd8TE52UGA/N1kyYj1ObnlhMEo3ZDkqYkVhWFBjMXxbViFWNnRqI0dBYjUs''@;'; put 'put ''N0h1RVUvODkqSztrUkw3bEd6NVd3M3dEflpTZktBdGlSdT00Z14sRTJ0UyZ5VDFKJlNCT3MuOGFga09CR1VLRloqUGMsSnh9Yl9rLipyZSJYQ2ZJKncuYUluTnI6T1EycUF0N0d0MjhrY0gjWjg0T3JNeWJHKEpsem4zY0F9cmRhPGtNJF5ZTXBvWkAkWjZ1NHUvclckdHFgIW8wLnZVZig5dTo4''@;'; put 'put ''X358RnJ6b2p6RXQzRF9DPEwjcWk8Ml40JVh4KVU8ZV0vaTBPXUZSSnZGMHxXZ1JgVmlQfVFRSm09aiMhNWowZjJMQUBuL0hGeTdMTFJ5KmhUV1gwcD8yIjEsdisxKUxGL1FyQ3goK0B6UTRMUV9UZEkodGEmZTozPGI1QkxPbyZzbCljNSV+bD1fSzNrTioqJFFeL3QuYEpoY2pDTWxbWVg9Z2Rw''@;'; put 'put ''NkJ8WlFDem9zbzBQel83V19Vemche1leU2lGKj9WQktHNilTT3VuNWFGPEVYZSxvKVR7fHp6aTxqSDo8RipEWTRpRXhTeGFdK2tYT2ByL3RZPSVfZHQ2PUphdWFvc3tbJCY1eSxXcDhRTG19XTl6O155bU0xUiMkSG5BMlJ1WC9wcnlqUjhNUCVUYE5+K1pQSjpvOyxxVV4kYz9lK3lRdDQ2Rypd''@;'; put 'put ''UlRXREkpaCElZSFlUE94ZE8zQ05iP3VaYjV6RDJtSU99ZFs4Vzhkaio9dz1+WW18cVdhNFBOejU+IUkkNiV5eE1wSjhBZzxueW8rZEthJi5lKWtIdHdrLkkxM3EwKTAhcmQhSixxSk9xTWM6aDdkbFE2JUMyR3JAJEpTRjtLUTM6STpGYm4iNnZbIzZASzxrPzNtQGBne0JseGV6YmJzZHhvI0Zx''@;'; put 'put ''ZDRGXih5bG1CczRIWWRbSERaMzF3cDRwZiNlKE19aHxtW2goOS98VEgiUTwhQSE4eWFza0ovJlNAfEM6OTdQeDRhOHxAbVk4QDtxX2d6KFF9cXhBZ19RQXo2aD5YdithfG46b3w9aEh9TGVBX1A2dEUzRTdIQnJBMSNWUCJPUjtRW0tuaj0wWGokdUR6JChqWTZLR0BCVHpNKi9sRFZEdG1JWDVD''@;'; put 'put ''OyxVS3ZqamQycjBsaUNvSmgkVzVEd3RkS1dmQHR3YV1lSSlzX186RXgoTyYhNDxGRHU5UXolU0o3LEZNbjdYJHF5L35mVStaLkNjPFkwPnAwKjE6WF13a1MmbE99YmU/dnpueDF2XTRFJV8zMFpNPHo+PWw1ZDRXSjlIR05vPFFtVHZKQWRHKz50X3Moej9mSUpFdThGKkh6QkVsNzFrZTI3RjI5''@;'; put 'put ''ZF54cyFXI1ZSUCF4Q0BwISloIWdCa2YpN1Z5Mkd8dlE9T3d4U1J5fTRLWEUqVj13cFJlKC40ZlNLTTZLOTtDMWY3ISNxbDpMblRhflYyJmZYNEpNME8hc008MWQwMHsmfW5gJDpVXndrNWRPcWZVRmxrWDhhPjFIPCZtZHQ2YFJhQV0iWVpsRyN2QyQhYzlDYjlZUno6a3Bvc3NnOCM2YEltNSVY''@;'; put 'put ''b0hxb1UydlcjdTx0fTkmaEsrQDdFayg6MzJiSzVoImVhVlosQ3FMQ2NOcjxmI2M6d2RnRDd1MzhZQl03KT02TjQ/XXR6emVJZHE8a2JLRnBWLkhIJjQ5UjN7PGQjIUZiT1ZUOFRyaERrMmZFPCY1S0o2VCUwVVddO2B4P2YjKmIiM1U2ZjxrWkU4PmBOWVtxNzZuZGtuI1hbWkM7SDZDI0NALzdl''@;'; put 'put ''UEZFaT49I2klZmQ/fi9wQzojfT5II0FSNXRLQWVMSWRyKEZEOXxuT2Z1eCFvKC5UKjxhaFFddTArcS5uQlRkSllhbWJCbTV8QmpzbX0/MlNFUjk/Zn1YT2x4JDJ9QWVTcTtLK310eyxFSUgmPl4/NmM3ayYsQDt0PmI0QF1hNlhpMSNVRjlqLE8/MDZ8aUAoSXNTbDlWUlFkW0x9YzhgaCxYMW8/''@;'; put 'put ''R3xibUo9YmNsYFNFeiVJYzNzOEswQV9nZUsscmEkeGU0X0Ujfn1rYk9WR1V9cWt2ZVNaZzsxL3dZOD07TkU8KWViZ3tvTFUsQ2Z2YWUqb29zJHRrdGoqZnwhZiEkNyQvdigmOkJfenBGRD8sMEoobCkoaWIyWTJlN0ojWFomVTc9VEVESGRJND00d1JJJGQoIzdkPzprfCZTVzA3IlZke2s0RXIo''@;'; put 'put ''SzY5OXlVZFFDVnViRFQhKSo+akxXW1MucChEdnImZz81Oj40Jn02aS9xd0hTbnMra1YzQCZyZDc2OUpffXtXZjs7JGdZL2pBY05xPzA9O0hyKSFdcSR6UDdlQV5QZFJyI29BeGd0Ui8xWkJCNzciS0wpJDwuT1ZVPGtAK082KmtVSjRnIW02ZjtZfCgqSXZSdUFsR2QmVGZHLztuVGtaYUVTJm54''@;'; put 'put ''fD4uZUNbfX18bWBpKTosPXFzZ3FwbFovNjV2eiEqQ2koNXlZYmY8cFNvaGpYIjY3Vz5aWFh8cXR1UDApL1NDInxiNURkantbalRjcmN2NnNNOWBKZX0+UnJDc3VWMz9TZE1vKXZiNFVkN0sxc3U0VDx0czpsZjRPd2VGfmhQXmcsI1R+UipmbSooLEY4VUVsaCJwaUdLJmU/dlB+X3RZeSx5S1Q6''@;'; put 'put ''W0ZnN11vS2AzN01vVlRISFEhTSokdFc7SG1RX3ZYOGdnIWdsLjhhW3lsfVpMKms5KHhkU1IwfWckfT5UY0h9cWcqW3RudXQyQl8wVGZAfGUyRUtSY3J8RCRJd2l3SyoyJUAhaWB1cnYuTmdzKD1JOzdiT04vc2V1U0Z5Z1pTdig4Xk85Mz4+SVB4XV1eUHlUKm9vQ3l3KFhmRyh3aW4lbCFALkIu''@;'; put 'put ''PDxMZnVPPzdCKWIsKktldSQ4bj9HMkBibVZhOl9zKiw2Jnw/bEQuRkljanRCYm9FYW9zLy5lT1hFT1FgKz0pZ3pbNSpbXktQSkMzOFI4e2dCaG5ie30kcUhOViJlNEd2UFJRdksqcUpvPFg5Lks2ZUBobUYkc0xvfi9aQjxJR1RrfEZnOyg2KmJVLEMxKUR1Rm9NdlN2cjs7bnZ4QmVURXxSc2Zl''@;'; put 'put ''XTh5KUdwT2NsNjJ1a1FQJG07WCFabk9URCIzcCw+dUNAKD15OjpMfSNRMztJYTs/P188Tl5qQ2goQWh1MFsrIio5TFRHZjtxXTRgLk1VNSlJUWIuWWdFRWkkJHl5XnQiakMvO2NnTkY8LkMkNks5Jn1KUTZ9KWwjLHpHY3N2bF0qMTNGLE5VMEIpWXtda2BsaF1NSDdPOmNYPTh6TUNeXVBTOXxj''@;'; put 'put ''RSViXlFvPFNVNkNzVm8mREAmUGF7OUclbTxxbztZKHMyTSkkLFJYemZpImJMV0RJTSkuWlVFKUJkbnVSLihmaiwocitMS2UhIipRMitZeWx5W31HMG9gOW0+NWlzOXY4M3xAbnJUbk1lXXpSY04/SDpRTH1laF9CJHtQdjpmW1NoY0c3YGo4fTthTG5AIzs5RHJgVmJ5RldkRCo2RlZyVkdTJldx''@;'; put 'put ''PHVSNm1NQ19wRUtuajlfOUJlUGckM25JK2RjfWRIV1V9KDBNUWZySjNVQGAsK01LNV9pUSpZY2BrYEA1XTNNNSopJVk5Mlk0Q30uL1FjOF9FXnJgbSNXUWBhflBjKyhTW2NNaFRjTnNkSTxbfF1JO0Ned1AjVzIjPStRX3pzPi5WcnZiVWAyNnN+NVdjSGB0NkJ6fjJeWHxPKilgO1N2KWhOUixI''@;'; put 'put ''dyM0bEZNY1phWVdmVCl6K094R0c2Qy8/ck46MkElVVIpVldTZDNnJS5YIktKUlc6ZjJoPFZ8UkhTKy94VG9TNGJGN2FmJCU/NyFRTSxOLFhtdE9EUTlBe0JeTHdScVtbajA8V0F5PCs9dSk2X2hUN0k9Uzs7KTpOdjg4eWVNMEUqKSJvLnVwWmw3JFJuUFpAfUAmMC9sUlJ+XzIjL0c9ZDBZYEky''@;'; put 'put ''L3Nka00+ZlQqKHY6NWxRPVg5anhVcUZWMks7dSMqfj4kT3hjYGl5bTV4REpoWCk2cV1uMWByTyJ8WXJVa2F0Tjo9NDNaak5iK11xJiVkJH1ecHlPX2h2Ry5hNy5dMnZUXlJKQDh7YUBwaE5yW1lhcEQhNSN0X0RLWjs7Jl9vUzZATHlNY1dddCpHT3ZrKlQ9Tl9LM1NobDBwV0VARyZ3eCRoRndT''@;'; put 'put ''XTkhflh0Mz5ZQ3NHSFJlK0MuaHQlNWszQkAiKXYxLnNaLkt7ektbJUVmLHlwdG1LSClQQmlLL0xXMjg4czg+Nk1PN3pzN3YzJSZ+UigpUiU0RHNXVk97MVZKTThFYVVqfixSTFgmVjo/YyY6TkxnfU0sdW0iX0BubUJ+QSlZXWReTzYqY0NLaiVuOWohL1NMMS5nITteUjNTVGE4d0lfMVdjM3d1''@;'; put 'put ''JUchJG9ONF5KfCtYSC5bUXNyP2Q3SDRfX249VGM3cVNaSnVIWUhibmxReSQ5bEY1JH50WHd5bF5kOV5LdX5YLHwoPnApWl1LdyE+Z2p+c2RtdXJIX3UyKHAjLFtuPipPWV9oblZnLmVJYVpQbCN6QEskXkBaRFJldFt6RSFJVmZaVykvQiE9MiQyZlhrP14+anp2VGB3bkxFfVpFXn5nV3VTRjl8''@;'; put 'put ''NihTdz17KTdtIUB6aDtnb1s6YDRpJD0yPCtDWHpvfUhYSCxwbyFlNkp4d25dbWtaRypLMTdsdkApZEY1MHt9fXpHOXw3NG83UTNdeENdczMsJVhoZn1oPEVQeDFYaEVpdCRkfCojTTgsInBhYixYWGllajx3Pz5eb1IsRmxlTmdqPjRYcXRDWkpEQHp+Nl5VXlZ1akUwcVg/VjtmSHIiPDUqN0hq''@;'; put 'put ''XUwqflBQdDVES0h0WkBQdHZeOXg2bykoRyQrdDEjTCZRIlZFOiFWODUlIUBTXUU+TSVtU0tvQm1qLzIsW3QlYi99Sjg1cUZtJEgmVVdfSVltdkZHdWEsUy8oQEJPMChgP3lhOzFuQGo4ME9VJXwjUihiJllxKVRCOVpxaTRUMGM6ZT4yRGlJcnI/bThXbSJseDBhaTdeQ2NxQHt1Lyl5RWd6L1dr''@;'; put 'put ''XXVbaitkaU9oKDhvcy5zVC9FVG8uVklNNFk8e2E8JF9iUmprXjEkaWNBITlaVkdEZHIwYVpvRUsxfmcoen1rK2Y8KVUoe08ldnJwSzVtZzhAIVElSEAlU0RdUyk8NDdaWyEoJVVmKEVjfGczZVVqXWxuaTdWSUN5Mj0ifHN6I0hnNDxbKXUoWko5YVt8M3k6ZHZyI2pKVHd7PVt3WWlvamg/UCQ+''@;'; put 'put ''TnpkIzhLSXVaRTgpOXt7M3ZXRj9qV0tQKVJsUDQwUVk+PXU3TFdifUQkMFBaQnJvWiU5Zypxe0RqKj58TiguLltLd2hRYSZkKEhKQFJbR1pse2VrPTNVPEV6KGEqSkkkISxTMF8/SHk+P1U+LG1xfm9DWmw9OE0oXVB4czB4eWRFWD9ncDsvbCxFXU5VViJbZmg7dGxPN1dLJXcuVzpPbTZOYUlM''@;'; put 'put ''ei5sOXcyUl4+TkB8Tnw/UGpISSEhZ09JZkA3bls8JHA/ITpNaUtMVWFAZkxbbzdnazcwdyZDfWhkcTF1TF1raEVAJGNmKmx9U0haVVcpVl5LVXJPInFxdj4jMVEhd1RCLGMjWyxhUjFYeEZkUDEyNGMzZU5tI35JLiIudjVDeSsvYnwjdl9wejwwbWkrMD86LiZZXTksdGFXLzI0MExRYCh7JDtS''@;'; put 'put ''fiJELEVZdj1mZGFrPEVUM1RxdFRqUWE4VzZ6MXUrUkpOUzd1ZVBeLChvNix8P20jJXRLQHZHIWlBVTdEJWFxZ3duMHFCKTZlQGF3W3pdZHZhKmk7eCwub1dXMn5GZW84JiRDelhGVlsuQSt2U05kUEc0JFslIS97OiJrRW1gQzZfckZbeTlkLEp7LlFJeS86KCUuKTBGbmx1PHhMZC5rbkpjJUJV''@;'; put 'put ''RUo+Y3FOWzt8OEdLRmg9KTI8KUUmYURFMCN+dVtpPH55Rn1ULmsvJjhzMFI3WjFZflZJV2B0dWdHOjk6KSxxZjxbcHc6RnNVT09xZGhCbDNyWF1qOXk0IjN7SnlLWSpXLDtEbTkob0pyQihsM2I7YGAqRlk8WlkzMSRgKjpBOlNJfDVmNGs/XmlpTXJaJnxvKmc1NyxkKUl1e19GRHF1WzxgO0NC''@;'; put 'put ''ZWMvbH1wW05uK18+RSZ2W2R5TVdFWlZKdkNwKWBqQTdVYTldL1dbQU5me1MvYnVEP2tPN2ltJDplQn5tLD8uciNpWUkhaURRcyFLKyFzN2wlYTVIV2JVOUIheURzd0BFYCFoPk1dd0shPHJlbWBieGc+bXR7KEk2OHBnUnhLUj9aYFtsW1lMOTh4cmV1T1I2T3ErQGsvUW9uOHVXMk9eRWo9QSNF''@;'; put 'put ''MCo1RkRgdD4hby42JEQuNGZ9InBMOW92Ty5bIlg+JTtNOERnLyhsOTtuI2VQYilTRUdDNWBFeUk/e0JGQygrYF9mJDI3UVNpSSsxSCJeW2kve1dXKDZffEhFcXtUe043Uzx6cipyV3F9UXpyfXJFW1FZPVJsN3RoV0NpSEZZMUlrVH1fPS9wNzJ+UitnMno5LFgsXlcvY2c4ckRObFl0a3djRyg7''@;'; put 'put ''fV4wei97YzBFIVlbe195TGpTYDdsdit9TCU9eDdJckAkZSxETUBFfVBNenJYX1c5SzReKTpjVzJBMl0iaEtvUHRUI3IyY0JUbE9OXT1bTjhTRyY5TnJ6VEF0Qj5va3dZcDt5Yk9WRkp6ZGZzeys2P19uWF5oSXdGKi9+dWtYTm09Q2NUMlkvI0I9P1UwNl5yeks/aS8yTy46KFAjXilGNHZZYWlP''@;'; put 'put ''Vm4lM1g8dnB6d3BgbXp4Tl5ta1VfZn1WU3FSZ1JKd1slazZJJjl8Zz1ecUE4ajZTXXNNSTlGMiQ7QzM+dE9wYlUlYiFNbSE/QDd0ISpSfTZJS0ROMi87JHB3JjhQaEMrPypnRDc+K3tHOV5hPU91VHNGS345YEJMcWlJVGg0Pn52PGVXQE1OL1FtKW5qVVBNRyxVd0g3VVg7PlVxOW9SfEVvSktd''@;'; put 'put ''Km15KjBgKTUqfE1xa31EOEAuREg/Pn5SI0dTNjFjQk9SQCRtcUlEeipUUVFrb3hiUFhSbTRzPElmN11bNiRNRDd7NzlsQHJANilwUixNZm1yNXpAU3tRZWR4aUdZJkA3bj1OZVt3S31xYVJhaEFPJld6eStGOiFvWFJUSCY0KG5ufUVkdm1nIlEhPH1BPm46SUVuTjU8TyZSIz5DSS9FYjR9L01v''@;'; put 'put ''MyZMRlJOSHBMWzB6N3RRZWIwa0VqXiguSGVsPTg/SyIjdm96Wjc1dzppeilGZnNtITt1S0BbfUZmWmBOSmxzMVRObmozZGxEfVoyVX1NSHoyQj9GZDM6IzNPMkYpSGkxfU0xNFR4PFlUe3ZEQ2AyRG4+JjdtRHRANCszfTk9OCo8OW46NURKZlJOekNnYypTSkFmeH1aTERKKHpYdEZXKTdsM1ph''@;'; put 'put ''e1JjdGUvXVBaO0lQOykzVG8uWFRZREh4VnxFPmthOGY6Mlspblc2cXNvTFBIMXczYil0YSN4ez15JlN+c09SImRXdFpfNHIhPXQxImJHbkNDUWhgKkw7Qj4jcnhKfVZQTCNXLypmNDAoPHF2SGYvJFJzXztRc3c2S2FXMClRUiZ3U2luT09uQSooZXxQZlhnTCtRP3hYNls6bXk5UlVrKT1aaClo''@;'; put 'put ''fHJ6P2R1RU4lJXNZfUZKSEFmdDw0WXJzalR2NExKQV92OihoTD15X0g6bVMrWklidi8paWAiPERYIlhSSkw3UGtzU0ZhfjxEVUNEX24ja1chYH1GWEtwJSkxUW90cC9iSkdVTTlAUGpHX3VgWmVlcFpEekhmRjZKZG0xZGord0Bia3NwKXJzWip1WTx6cjV8QG1jXVsmY2hnPCNMTWdfQmB+KEs3''@;'; put 'put ''dTp3UXNkKWdxJTJAc083I2IkVjorYGhjLyU/Qi9aTGd3Yn5LR09bU0RWJmUmdixiR3RQYUxlPzwlP19OVn1sWW5PVSU+JXBCfCs4Y210a2VRYSt1Mzl8IjZYZWZ2QT0sYHQ8ZzR1I2cwcmY2JVo4WlReUnVfKWBmXitqfGpCUkUsPzk4STxePyVeRjI4NllIe2dwX3h3V2tmWHJSVylVfVFiOV5a''@;'; put 'put ''WFd7NFh5UnQkNSkqTVtyP214ZXw2YD8jWCM7cTZmM2RlQX5vMzVwM1paT1RwVk1zSUY8X2BrW2IlN0QhQH1jWVpSRjVdZVF0NUspQHB0Nl08JWs/JVslNU8uOXg6b0U6djlqb0duX3JZcFVdXntNRmB0U1R6ZCNNWVQmeTRqNigsZzA4In5MNWl6eHlCQmVhKHpXZH5oVCJzK0VVNXRLQndxZGM0''@;'; put 'put ''UGprYGNGWDIuTG59bl92M2VfaXAuRnRAW28maHZHdXxlekosXklOZ1lZQ3hsNipKUEAxI2RDWGJuSjg6Wy4oL3lgWFFjVl96QjxERX5zK0pgenV8WiNmTCohOGwmT29+IWpNTl9+O04jIzVGZTB4NXtuXUkiPiNVYEZtfDlCLyZFO3lwfEJqb3VaUSE4eXh9Qk9+dXZgdnZwU2E1aiE/JWhSQmtK''@;'; put 'put ''LzA6RztkaVJWeF9WSV5rV1hvUDx5cGlBYjJSKThtUll0ZSNxRTFvbSosNT1iOzl2b3E7MXVBPT8sKChNRlQhdShXZjMyTmgwNGoyaHRzP04qQ3Nqby9Je2BVfV1iMStiTTNpe2lraShhMzgvSH5SLlZ4fTlzLmxHbHt3cjEiK1lmJHBJOEh6WTQxMyZZM1dwVUlHK0l2NigwfHFoOW19UGdeOCFe''@;'; put 'put ''Q2Y+cHI+N3NuZyl1RztSRDlLdU48YTUuPG44Ynh2T2I5MilSYE9meygmWXdhaV4/OjhjSyV8OHFPd3AxSXp6WXImZi9aO2wlMXo9SHB5WmE4Tjo2OiNpMVp4SEtiayRzS1pjYyVXZTxfNl9vRTY3Kzh4I35kSzswTmFsUlp9P1A6OHR4WWlTRnp4YzJLKFg/Kl9KdnRZRz0sakshZG4+QDNZe1to''@;'; put 'put ''O2NVUE1rO0teRDBUdW5oRzlxU1ZHTEhkVT5eT05+dDd2SFdpJFo4clNEUDVnTGRGNkt3M0pRTWt4NFA2eWVrQjVfaW9CPTcuOU1uQmRGJCghQEdwOWlDaz94fWBuVkE/bTpQX0lFOSY1ZH1OYF9ENShIYEJpd19FajNQdGFaWn1lIV9gTShiKnhFPD9UXWo8KTFWaWJeKSxNTGVrSkR9PSo7OmUq''@;'; put 'put ''Sko0V10pLjpVXmxwKCM5fmF1RGlyXmxMOUxfWj5XVkQ9RHtUPmUzNTRRYU1bZU4yTCJfalhGO112RypLPzIrQGs2OX1iQjE0eXVvUGlhZl5QNmVBRTMsZXsuakZMUDVrUGsmRTBIV2VXJSpuMmQvPzN2PFAuNiFrMkBoUS92UH1AZT9AaHAsXylBN2MuP286anEmUHdhPTc6PEs9YClRbkNpVj95''@;'; put 'put ''KVB8dV5qMzQ9IzY/UmJ0eUJQPEFhKiN8MiwwU0BuYUVaVldreXFEVER3andqdyt8QEZISE9weEQ3aGl1N3ZmP1JvX3h2QU5jO2JDQHM1cS47QStxfGUzcSo1YmxIN3I0eF89PjJSX11TKll0OUYwYVpCRlt9KUZuJnlwSjl2WnJYYG1PeFcmQj86SjUmNVp1RDNGSWtyVl5LQThDRkdhXU9DPChm''@;'; put 'put ''L3lFZE92YFVTO10hN35sLFlLJTwlMFVVaFQvekE9M3dYKCtsZW9MKzlfcGpZfSNHUD1iYjgmeT9lekxMNHIhZCY3UjA1a0RobHx0LFhxY0YrSmBAVHY4IVVALnNMYSFKWTFMSypRY2BXVlUkeUdBM0t4Si5gRDo6bnM7Kzk6R3tpLEwzaCk2amZfS0V3V2p7O1hHT0FqZXpQaytGeFRCVUF5dztY''@;'; put 'put ''PUwzaHhEekhiKjV3O1htZ3I7X0Fud2pDKyE/XUlKQjwrV0hgQ0QiOj98Q10vaS8sTi9VMGZmMlhAR29aSktsPTx5W3dBVE1NYVY+U11YVG82OXA8PFRSIUx8NzpITSlsW2M6TGUva3olc1VqUEw3O15QM1g0TClwTmUmbnArKFhDeXdxQiM0Y18yeHc7Ty5tN2NTalVNM0dPNy41JFNmWVZzUHBo''@;'; put 'put ''eCVEZjpreGgmNmsmXiEvJVJnUChDIzEqJkhzPDtlPTNdLExbeGR7WntAQFguQHsiZWhMISYmTjR7dU5vTUBFajF+Zmk/WVE3QzhSXmIlbU9HJkoqIWVOZUVKKXshPzBmQk5dPV90Xyskc2xAJGkqaX1HRCJlNHZoPz8xI0RRTl1qdyNDa3pmYVRCOVVhfEQmQDNAbUxTalJ9PSxQVH5gRXxLYFRf''@;'; put 'put ''V09vfmVMSSplS09Sd2RvLD5PeGx0KWhAPClfSWhGSWFlN0NLWzd7dChgQU4lcHpBSHkhclAmdUhheTdGNStzX14vTTZZakRbTGVYR00zU1Y9MV1icVUxUDR5VVpmez5HP3x0NVByOkMwIT9HSVluKl9KYzt+ZUR2PkNQV2tJcEYzd1QrXj5Od1Y1UUFNP314OF0vSVZCcGk2TE4oXUskOkFaP0Jl''@;'; put 'put ''alV8ajRAKTdpWTVKdE9jd3czfCYkcEYzd0JFTEc7TCRFLHEoeT5USW1HZnlOS3VDUmFPdSI+VEltOGR8T2NrNWRhbExIcD9JZ1tbZHw5SkZ1bUMoXyNydDF5OSUoRXgjI1FmMWMmRjNNdF8sWnxQVTx6Wmw/dG5DWksmQEFzVjlaenROJWtEVUB4TF8yNlUrPikoa19iR2V2aHV8RnZPNVlaRSNw''@;'; put 'put ''O29MeklXW0Qhej9oKl9WKzBhc3RMbWVvUlZGRmhGMyhiUlhIQW1IdzxxZT4oQ0VuVk4ueS4hdnZmPEVgTnRPWjUzLkxuXjozYD89U1tocj5zNUpWb1k0fThIK3QheCV3NHNfKlM4RTVIJVp1en1DKS5efSVSPXhRcnVLTiEvZFtRO2haUFdZLmNZP0QwZHRZYkRBPD09cjsuOXwyNmxydDl9VjIv''@;'; put 'put ''b3Q7eGkwS0RuVk5WczxxMD0uUU09TUQ/a09WS1Zkfls9R0NaND4ke082Q3A5WmQ9Wkc0aFhsNy5ealBDdi4sTXA8MGRHeygvPiFWJERmOnhpPC9McTdEbyteNixXNykvbk14fCgrT01ZREM8LzVrJDJ2Mk1fSFR+LiFZa3oxWn5vOip6SFB6Ik8vUmlaLFJ4OGpIa0MuNXVjdltSaDpNRit3Nndg''@;'; put 'put ''TFs7Xn5ld31NTTppSDV9YWJTWS8wOFNheSw9L1tCPEg1SGFrUzJmKXBYZz9aQG5mUyNuZlpvZkh5WWlsJGlpdXlvKms2VTdrJURHRmVrXjA5cyZ0ZjxsRCZMVlViM0A/VWpFRjFQPjB+PXY/fXZjWnU3b00ycHE9X247bjljQnJ8WkRWXk9ePSF1N3pJUVQyb3x9RkNqYzNGZHthK3JNbW80UUsi''@;'; put 'put ''REA1IXk6YURhW2JgNUorVHdxKlV3RE1ibyk6LFtBJG0/QWxCPVNSJiNaUixAQl9eViE9RTpKOEpfUSpwKWRuYXY5bWYhb1lIVChAJWJyMHB3RmNaSyJAT0NPajBmN3Y5P0FvX1trP05rdyxXdX1ZSXFANSs6bk9Qcz8wcld7bUViYkVdQk9wMGVOX3dheSwuLCNTXWhDenpIRWc9YUNtNjl6L0w5''@;'; put 'put ''TzNXR3hjMWBgbERTcm5oNStzLCNXMFdfVnp+W1lSOVBVMjg0dGs8YWJyKjx1JUFyODN9QGVtR3peNl41OVVjN0NOOHB6c3Q8QztuRlBAK31MYV1WeitRYj1kSV8hMWk/Tnl2ZlldJmllTkhdXVo4MVYqVF4iYiE0IXU8L2tsOGZkZmh1fSFrbUd8PSxVeSI3KGRfMj5jWUtzJmhqdGBOZzdkRFYz''@;'; put 'put ''aG5aYmAiSiMvUV4/WlRhQWU3IyMpdCIydXMsXj0mViowMlBZakRbcnlpbjJ3eSswNCNjTC9oMiVOUX59RSo1Z2E+PyVWSGFNI11je31bL25IPylnOGszImpiYHdrSFteOEh2M35oZWRWOzhDU1t8KVlbP1l8dSwjU1NmYTJJa0BIQSRISWFKb2RVPmI2VTBtMH1seH0xNypkVTg4d2JRW2MqXlMy''@;'; put 'put ''RmA9XihRVFUhM3c+bnEpd29SInI7fWFJdTpLZkRyK01taUNJd1VWUWJIeiZ9eCVEW2N6eGR3JXhVI2cwT01kWXtkZXZNciIzYT5Me2xyMjs2Ymc1cEcvIih7NVJJMD46RXIpNyxUYWN7VUljOl4zTGMvSlNhTm9sYWdePXRMY2NJZVJdRTspN2pTeTdpQV1sKHghMk9HQGxOQ088dUI3dDdXP3Zo''@;'; put 'put ''UW5CbnRAYE9He0RfeGsjY0w0STw/eD1kTWVLeVJlNEJ4SD9GWjJZMl85cCUpQ01LbjZwZypYZUAyaHtsJjF1OEpOTk0peSF+bl9tMDl4fVVXO1ZdaDk0Uz1aflJXQ2Y5a1UpOyptdS9yfSpGdVRYfCssXk1PT1JsPlVjTEskOUZjbi42eiMmXzNjQDFObkJkRjh5bCtwPT4+KkI7Q15ofChCVGku''@;'; put 'put ''Ryo4KGspfDlZN3piI0tiTDQiK0I8bXtxMkNOKWspYltOQlIrc0NpN20kSD5Hb2dWPllhJT9tR309JEk1eU8wJWkqNDRZayFPMy9EO3oiQX1fT1BoPVVfZVJ0P3RfZzxXKG46eU8/cHB+X0QhNGIoRDRePkVqL3NuX3xlY15CZ3BFODM+Zl9ATSZgUiVtN2xAe35PQEYqVGA7akVrL2VhQkZ5fTVz''@;'; put 'put ''UE1JMnVwWiI7PWYwTGlWTDdHSGVRNW9leDpsIiR4JHFyZTkzaT18UG1BVVE9SEw6KjE4UHdiW2IpK0ouYGV3N01eMWgyT0QiQHV5VT07KW9WOig5ITM+Q3FyME9YV3wwYy8qVUIxeixKRy4pbVd8aVNiSjtYN3g8RWhWVlQqeFJCPTYibFgzWWhTM0N2eTNaVCYlaS43W01RYm5GWnxuN2dPSGJV''@;'; put 'put ''XWg+MVkhT3c3K20kOlZpLlZ1UjA6Oy44bF1hRkNbbCFtJHwlSCxTZ1MrNDs6aT1kYTJuYUE9L3F3d218Tl1NZCM/QX5eWm9COSFfVkkxMyxSJHxEaX1wWzRPJm9PNXlFPmwhZ1Q/eT4hJTdEOTNkKk0udng7I2Q1Ulp3Q3NiYzsoTDFSXmNzR1RqOzVTWT8qd2tzYSs4JUlINls1USpuPD5PT2o8''@;'; put 'put ''WEQ8eShgailNTksxIUY/TWlWdThsKiluLjJgeGwsTHxsY3loMkZDdjtiVC5kLE5nQ2AhTTBJbjxHQXhqSXMhalZ6Snx2VT1lNnRDN2IhVFdUTEVwKldianNbZX00TlNIfGEuSFlCK35BUG5CM0p7TiFJO1paY1VXVjAyT0RzaHJQJGE4eFhNQF97P35FYjN0JEs5YjZ2LlosYCM3Z0hraDI/VThX''@;'; put 'put ''XltCM2lyZC5+RSh4YVs6cWRRSFZIPzdeYU53TTRvTmk8bHdNJTREVC5sI1tqIzxpI2YlVyQ6K0U9RE9jWHhaIkdGNjhBKkFJRDV6MlMocz5zaSxYQ2h3Sk5LRFYrX3s5WlVIRkhDYFl4IU1mcDx9PGV1YHhUdUcqcDtLWz9bRH5hOCZ9S1l4KVVfR0ZdcDY2RlQ5Xn1XZnQ7IWlUOHRXbkFGNktG''@;'; put 'put ''UjJ2V3lHP1ByY0VASWUmQCpfPyJfJXI4bHEvWkdCYHs5O3xHRkhDKCIoQW9NRmlZJG9yPGxoSkIlM1NzTTxKezBmeStMdzh4WTEpfFJYSlVAVDo1bW4qSXA1NGFjfT0+TCR8VHgqN3VERDBBN1FwfSVvaGJoPGxfZHNOeTUuM3dVdFJaZmY8W2xxTVF5aEs6a1paM0FBQTlKNk1kdGZzW0o6KGpL''@;'; put 'put ''eXBLTGpDUiE+SlpHciRQV3x4Y1tKfmUhWiFBS2V6JDNvW2dVQFlXaX5rd3ZTXz1NJHI2YDZnbCZAeH1UfTwuSnNtMXh6NDleZCV8bjg9bCYzcSEwelNmZEkjUVVndTwxcnhlU1YxcD0hTjh3TEcmSzcra0tnbF1fJCMmNCRlX3k5bHtXbHolW25DT1U/Y2UrKVQ4UDdJYFhjZnJKKXlPTnFIL0dM''@;'; put 'put ''Szlic29XezVSQUYpemxYKTg0WXZGeEdfQk9wdVVNSTFCUDdVOWNddy5JeWs9PV5kUENeeU1DWn1eMTdDclZlVDk3YnNZeU0mYD40SVVheisuSlp1QjZLbFJgOjouRk5ITk0mTT5zWXJZQXY8Rjd5WyYjcWUpNlpmO2hdMnFXWUIxO2NuQTxQRCRzNjZST2F5V0YuajBCNHZmbEtsemhOKy9lUHhg''@;'; put 'put ''ZnwxUlk9TXUuVzgqKnkiPTVOPHd6O1ljcSx6QVVqdFQpKzEra3FVYzpIR0ViWEY7fSslWk15ZTE/IzdOND87YjMqOWRtSD9RSDA/fFljc280WVYwSlomKj16Lj1RYkA3MT8kZF0oRE43TCVpWDFyI1o6L0xuYTkzIix9LkpOaXpGRmJuQ1M7d0ZGKlBhZFFWTWFzNyg3b2R+PkJUX2w3VEtjM2N7''@;'; put 'put ''fV1QSWhTelYzODpVLkR6TVhuS0E3ZGp4cmtPRVREUzI1OV8lWSs4ISVyIWhQZEV+U1guSDZhOmZkVDZnWT1TLCY+Kj9ZWlVFK0JAeT48XjxpYDoqViJvOFZkZTpjMVB1Nl90cnJNUnBhQ14uZCFxTFt6VH48dkt5RUQjUn5DZj5USVtxSmpLZipTb2NNfkFgUVp8R08uR31icFV5Wj1TQnUiNzVy''@;'; put 'put ''U1FCTF8sdjI1UjRkPyt2fHJhakZpP2I3dmZaSzgzSl1IVi8wYmtLO21vW1BmVlUleFdjZjM4Olh8cVNQOEhqRGlgM1d6cSI8QXs3cH5wKVNdMWsoO3tiJUVeYUhVYSl1TzpXSWZASGZvQ3RxfWUwLHMxJXdjSFZudykiJG9jYitUaW1TX2BgNHhhXmAoW0wqZ1lLbixSOWFbeUk9dGJ6fTlqQFJ0''@;'; put 'put ''RS5SSyoqZHl7c0dyM35IdktpJmY2cCtGNilsbkB3JWNjT2J0WVVOYmlXJVZzUjJLZCZZJThINjR0YSVZMFMkcG48Mk1bcTlEOXYyUldEb0ldKyFgMWU5NDBXNTw6QiUlIyUsfSttUzxPJmNgV1VLMkB6ZGRxc1lzWSNVfDUsbmJYd09INUNXfXo9Z3RTWkk+LHdNUG93ZUY5IjpzT1BPN0xTTkg1''@;'; put 'put ''c1kiekJdX3J7cjdPayg4cyl8PS5ZYmBrKmY6ej5xMGJ7TUFQPDM+YzJkcDBJa3F+aiVrYiREeiswNHhaYTM/ZC4wWWAqZEVdTChOWSJCX3pVYTp0amZze3EwbjE9QDRqeG4vZEptOjo4M0dxZj9pfTFVI3t1NkJXeEBFNj59b3ghMy42fGNTMU5kImtkNzdIaztWbEhsVS5ZbUlqb346Km1rUj4r''@;'; put 'put ''YFc2RiJPOiw8XXBIRCFUUmk1NTAoX0tXKDBmX096TXpKNTVNaXl0T1d8TlU8Ynx9bmh4czU3PUUrXWxdMEAqKXJ0OD9tN0ooYzBiMDlYVFRuODIoSXpSVUdePmsmenAzdD0yPCo1OExoIjtIVFguQCUueFlKLmQuNkQ9TDshN2ssYitLNGQoU0g3cS9QO1hTfjR4IyZ5KXFvIVImNTI2YGQ2UjtP''@;'; put 'put ''PyFiaWg2VTApfm9IdF0qUnVidG9STitYTEtEcHw2fjM0RzR2Oys1V29haTE+eUpOdk85cUl6Uj55ZzVzKFM4MyIsbTF+ej5xX14vOmFaRU5WPjwuLDo1b1h1WVBYTjQ/O2JCTiw1fUBRQG83MGxpJUdDak9nOURQQEhBLDIsWXwwUTBwX2w0MDRRXThxQ0NgelhJYVl4cEwuenQ3MU85YURIQ2BI''@;'; put 'put ''ZUArVGYhRlErdW5gdl5TTGA2Q09Ye2xbeVU5Xk9iLEFWM1dXKkhEdVBsVUN5Y1R1czx5cD5CTVg4MGpFS3ZRVnZOb2ErPnV0R1VAPmVbST4iMGkmRDtGITNIJV0vM2NJVTdaMCNYREc2LkdZZUNLIV5OTGZ1OExhWHp0fTJdb3BETnB9Sz11KmJdRy5LTn5fTzkzWVY6W2dNWWhHcWQ1XSJvUURW''@;'; put 'put ''ZkcqZ0t1WT5VdntbRFlVTn5NQix4KzwoJElOYUlebG9yX0FqO2c0eEB3bD9WOnY/WEx2ZjwuV05+cFsqNzRFSylbfENhS3tadk9INlkwRGRNYXZPSDZZMERkcSNbMURmWndlRVZEIVlhOEV6RCMqdl8saDVMXlp2PTE3WnVJMk1ASHB+aXl1Oi9JTHA1KEhENiFibykyTUlBci49OXdOVmJdaEtA''@;'; put 'put ''fDZLTjtKfGJ4LClwLEFxYigkfWZaRFZgLzRjSVV2fjFmUGRDJCNwOjlmPyY/a2pxZE5iWT5IekdxPWoiLEZyaForOCNPeXE0KXZAZn01UzIxOURiM15dMDBjWjBCSFRgJjM2YVg0QmZlWjt1JHwsN3g3UCZHOERRO1Z+ezF0TkBaaC5Sb1dyKnh5MkFuVlo6NC9LVT9uK3hNM2B4bDgyb3BaeGRk''@;'; put 'put ''Wk9+eDxFR3FbMTZyQ20rSVRoQHBNRGA6KTBBRih4ek1UbjNqOzVJWk5bLitwL3AsX3ttJHpvdXxgen1AR0NDNTA1ZmMkRHNKTjYkYGJlc0hUO0EwZkZkIUkqJEk9aURMLCohU1VgPWEvXmtOSHFMTkFdQVA5QXF1PyJOUkxoVDFvYV85OHRaQDpOPFNQcEJqMkNmPz5fbCl3bypUdm1KaEpiJDhU''@;'; put 'put ''WUVdakx8bzBoZEwkZC5XSj9oclNPKmNvWk13JGlEcl5iSXU4bFNOSUMpe3R0WEwzUHJOaHIkKFM8JmcvYGh0fEYqNj1LeClYdDdmK2llWVQ6TjY2OXckVEVJai5wdTc1SVF6QV8oZVR2IiFmbjJLUHpHXTFrb2E3RFslUys4MXQiMlNZO1ZoTW4wXlhdUiUlY3hsYFcpeyRPXjB0OlEvKS50eHJx''@;'; put 'put ''JlI+MXt+OjEsQTNlc1JzfHhrYCo3JVNoRT0jWipxMVYoZCxVPjFTbDE7YUdJKSVmKEs3eVs0O0VNbUQ8ISNyQnxWQn5uTS4oUClSdkh9fUpveFVbO2dxS3JUO04mcXBbSSteQiZGRC4jJX5AMW09a2EvUn1NZ114YWxLMlExeElEVnhkQGYjOihQLkh3Zk9mMSRHNjllRW1JUChTMjtrM11UP1lQ''@;'; put 'put ''KWd7N2dpXk04YCxEXX1fMz1BUEImKi4salczME5rMGdVLk4sYWNRJmYuVWNKJV0lPD1pV1VDZXxvJV5jYV9weWglfHJnbGA8TndWb1t5d1ZnPH48KldGVFohdHkyUyh6cDpYRnIoezpOd3VRXz1sLGdyTkZsVU4xbWIkYjlHfC8jQ2taNiNWIUBoO2tFPl5NTzVYUF87Uk8hSj1sdiFjP18qJF9w''@;'; put 'put ''LzpfOS5lciFAY1Y2eEFIY0lhKXtySHBCVnNmT3czdEdrZmBTWXQjR3IuYV1iWEJlanNDPVhvVzF+QV15NGZ5PVAyQCVMelZGfiQ0YUN6eCFgIzlLeT1nXi8rYTZfI1dVeCE9IzZzO1NEPDw5ODJOS3Fte0k/UUUhWWwqclh1aX50PThlan5aMnA+JUlYaEJfTFBAcENmNz1IaV0/NEM/MDAuOCQ2''@;'; put 'put ''UCFxZEtLdm92KGdKI1AmcnpCWVB6P0x2bF1wb0BEPj8uQHVjT1F5WH5YYS42LEBYcikmTks0Y0lGJVBLfFdJRDxJS0NmaCZtUF1iXiEhUV16TlEmUEt8Ji5PcDk+PzVPM2AqYDFaKUlwUW51ck0zcHdjKD9yL0gqcDBVYG5Hd0hLVWFGOXFoO2YoZT5bXztMe0ZdWDpwJC5kXWJkVzs5a0tkckI5''@;'; put 'put ''ZD8+KFUuYF04b0dKQj9gQlhTPVI1MU8sLkVfalkkWHc8VHMxeGc4YXchezg7P29dImExPXU5ZDV2KUVRMnV5MitNP1NIJF1IcXBvXjEyZykjKmEqe2pKYkcuQ3lLKUsxOGtDXmIocDtbI056e09QX10hc2d8I295XzwxXWIyO2pGUjk1I29sS2hFTiJdeUhmWm5xUlg/dnFLXj0wOWdRXSxDMW8v''@;'; put 'put ''WDFYfF99QXhxdHQ1OmomaCIlP2FqTlNtKyk5TmsoW3EvRS43JGtGMHBzSTVwY34kKTBIPEpSVGtgPFVnNkoyU3llLz5gS2FCX2kre2clTzZUd1JLYSp7elNZSlM4S2R3ZjcvVHBna0EzY0RrcH40NCMuJExkXVAmO1J3enE+T1NRYmE6OzxtVWVhOmszdTt2NjpYZi5OZ3puQjYhZzhJcD1zVHp3''@;'; put 'put ''e1h3W1FseUhXbn5jdTRGI3NlZzk5VXlIO0V+fGdMcndbcWE1eHNXJVJKRjZUN2VoMW9JbmBOaENkRStQZXglNSRzcXltRSw4LlNRSXhZcl5oeEBUISFWQ1koS1AoMSxWUHNDOXdMVl8qUGFLZEUsOGxNcWVsSnkqRikhPEN7RnBQLmBqUypeKHtAbE1tT29OQVR6OGwvTm9ZSlt4S3VVXkglfUhQ''@;'; put 'put ''cEdIe2l5OnNgTU9iLGV0a2k1ankxJSEsLG9hOSVQOVkuP3BPTz8iPHI3VDh+KlM6I2w5cntWYCJPWDg9e2ZSLC48bD9wQWluLnU2JGBVRHlAal1fIzsyUTFlLmY4a3J4WH1eQmJ9QnRjZS5CYmQ7aCVTNGNIclZkbCIsX0Y9dDdrcSlufjs7XlU8YTpfVUk3aEpLSClzTTlLNnNeMEw6LikoLkFt''@;'; put 'put ''I3MpV3okc0pkNj9nWihJPGdmTn43ejZkW2c9P2k1PXduXmZrTno+M09IRyxTMTwwR0dGISN7RixfeUR1Sm1TZGU4JldVdjhPbWAkbSp4dFB4KSpQIVpWZC9dU0B+cTpSRGMyPX43Q2VKMz8hM3NGUzZzfjRLJEdPXix7JTUsZ0g4NTdIYWtVKVt2NFcwL252fEFrdklSJlQ6MXE4YjxjbWRSOWk1''@;'; put 'put ''V3BFNHA9WFJpcG5bamtFKHUuKGg0S2AhfV9qNVd8YUkzU1I6akdnZDsqW3p3JXNUbjFpWl03M2IlIUpEbjxVeVE6NFdjPH1BVEIhOjxWImxFTTU8a2RsNEhVUDVuZmw2eEEvVDZmY1BvbHgidmNVIl86WVZ6VWE8SDdiTU9lbUhyemJ5JndDVyReYiYuLHBCcD5AemBffC5UPVVNPUQ6RVB4QCly''@;'; put 'put ''IUN2djFMclA+JSNkSyRIJlBITmhpMEQvaTFhRUdycWRDbERRW25zLD46bW8hOFBbcWVJbGBVIkdFbWRyV3B6fj8qLFc3KWdpb2N3e1UxMVVYY21yUl1Ndzc9SF1MIVJaZzk2LnIybmglcktfZ2h5dCRAN3Z9IXloKXZyLnI/XmhMUzQuNUlIZDhUYWJSXWk+JT89T1ZpTDpUYmZuQExgUzM9PlRZ''@;'; put 'put ''byQ7bjRfIkJwXzF1Znx4XVFKRChJcEtTIUJKTk57UzR2QCE7VEEqcnxBelMyemVLfUZmeU8wJVJqUmkhXjhIYmlqZC9uRmZTVkgpTGx1TkxSdGsxTyJqbiFdMyhQaDVDWy4/RD0iV3lAS2tTTTZfYDwoQmVCaWxOX2dhbkVHYFdPc1pyeFgkJldWb3xbZlozVys4LnkqZlFib10wXkJNYnlrZm5L''@;'; put 'put ''VyRfSU4kLCFWTmlyZVoxPEdrMFlWYTVDcCxQTmZvR3xrK3xtQzxuY3g4M11kN2UseWVtJGshYz5zXmAuT19tQ3dMUGs5NHlhV1VMTio4WTJzUiRsR0ZFIzpxPCtDKV1ARXBlZUwyL2dwJC9tI0s7TkwkdWtqcS8vY2ZUK0BXQ1VnUFJrXyNsOXFeaCVjeU9TIWBoJSM1WytlUFN3InBuW0lHWzBU''@;'; put 'put ''K1VkOHt5SW9xcGV0bHdUUXYjeVM4bGFQSUxLOX1hTm4wOXN1MCYwYkV2UXxAVXJKNlFwaD5EcVpobnBFI0l1ViNVTy48bCprME85WywldyQ7KTQlSDpjeGFQcG1ga1A3fS9AQ19RMVYxW1MsZ0BxfElmUTErR1d8RUwxPnFycSUiQnVXdCZnO2JZPE0uciolLkZuKjclZUQvLzE4M08hcyQ2UkAq''@;'; put 'put ''d2VidXBnWT5pMToqMXldV2RWQkBmLyRvMjVjU2dhKFcrOF9PJmkzJVglZVB5JXJxKXE3UiwvTnhGKVQ3bEpGODhwKUptakpiPDo+WzxpWlZ8NSQ2QDVrK0NddTA8P2ZDLGdwJHEpTnhKNV9gMl0/XzouOGJHa2p1d3J2aFgrcWJTUmBLMzl7bklIWnVxb2l0YEBrTTBVMSR8X21qeUVKMDYsT3sy''@;'; put 'put ''PDolJHEvR2NdK3VlP3dyaVBiM15tVnUwKTosTVdMSUUrO0Rka181V3VebjpHRSlwWXI1RWk3VW1pZGc6Smc5ZVY+VEJuKSl7MEZwcFlaVi9uIUNhQEEmYlVPb2YhVCZ+Uit5cEA+T0M+WERCJjJUblttZmZhJFZ7UXJbSW0xfCp5NWdjUHo5RCNCTCI1bk4jTiJlSGpnOSRJN2I7RyM/TjEhaVsy''@;'; put 'put ''U1dNSn1TT2JOIyxKc2pEezB1XmpFUGJpXzwoSDwufGM5OFk+UypHLC47czFWV2liV2F9QnclQGdRJlgmIV9lKXo0MHNoZEtpbTE3fjJ5aHRsYzZXfUJMPCZPRWshYDhHUy8uL0ZrWGVpfDE+Q0xOcGthNlcmaihne3A8O1VvLDk0XU4jUlNQJTBnajojNmsqdUg/Wz5HYGRfd0VAXlMvNjIxdyE/''@;'; put 'put ''V0U4WT5vVEVtbWtnNnEsYltQM2VEUlN2cTlqJG86PDM3d0poYjIzU2JFVGZ2LHlPIylHOTZ4UGc5NDRkZkN6RlRQQj0pWzxUTSlHUGEuNHd7Ziw4JiJZVyojR3FuZnJvaXMsY0A9bHd0P3hSUHtZW0NHMzg6XkwzMU0zdFMvblY1KjBtQCRvQ1paS1p4WjJwRWRdLyUvLmx3Zyx1bWBwMjNKR2Jx''@;'; put 'put ''O2piPnFESlY0Tk1HOVFadEBlbWcyM2pZSltgQjFrd10qaXVQUyUvLih7JkFNRUJBW3d2ZmZ0R1IzcTFqO28lWC9FVi41TC5vZ2kmU3JVJF9IUHtGTjcpUEUqRXFUN3pRR040OkQ7KWBmaFl3Uzh+IzdMWCo6eyk5VyU+L1pwcCZkUTI8elIsfXgwJiVYRjFgJnE6eipHYCJTOGFEXlVCXmtaSyU6''@;'; put 'put ''alE6fktONkQ2e3pTUk57aSRFK0RLRFYxJm9wR3FIcltdVz4wLHRLUHBeZiI9dDoyZl5dRkxYfkBgUWFPXm0lLF5UQkdxdGBMWl1xO1VpWEJ8ajlNeE9wb29eXmNJRWQrODo5aWt1U0ZTeTdJRWFCa2QkZ31CYzFra31CRnEiLGptQWlgJU9JQEghJlkua1pATlp8PD5oOXlAPVFyal9ecHJuVnpV''@;'; put 'put ''PnFuViVfO2pqPzkwc3ZRMXBLZlE6LEM1OykkJEVJRmt4c01oYnFoR0BVKEBZLnRDTi9yQ1Y+M2Myflpid11WJUlONVFYLjwpJHhiXmFCdUd1TTdiK1paRjlxTDFuclkySl97QHNLNnpMUHk4YV06JjVZZzJ0SThkRXQzVnBVaCUoMTBwRytfPU5HPDZUaGFLYyFNSVs4cmQqUCI6Vndnd0ddPzI6''@;'; put 'put ''MSZFWkFDInAvRkFnOTBNQEhoQi4uUWZMN0x9K01ZYnV5fExCankyY2ZaL2AjZjdtRV1CUFoyU0Mka0VoYXsjRHtDezkoQUlMPkZWeiZqd346WX1AbWZGeGw3OG9kd2hgX298MENpN2RfLi5sdzlNaEQ2Syk5QGA5enNWb3ddfXlHKEt5OiJGYjM8OjQ6RyFyKkFHWUQ+SHdmZ1FibVcyQWZNLiRH''@;'; put 'put ''WlY7MXk6NGpPY3FublpTW1soW3J7bFpxIVZpLj18WTg6MzU8TjBGdl8jcnJaNnArRjZxLChbbVtdRjBDdX02Ryl1Lzt5R2d5UTFudzk0dmZgLn05d0x3Mz1HTztsKlVJVzJfXm1jWzQvd0gud0JVdC8vazksfGVJN2k8ejh4Mk96UypHWlY9WCtyL05YWXF3STAqYntwcWNvWilMIjUidG9jdHk+''@;'; put 'put ''eDZPS2F5biFgSD56ciNbO1dDXTZadnRMTCFnZj5FOn4rUk4zblFedXdNSSFnZWNHc3lZcjwoQj80RUBYMll8WGUuXmhyaCV4XnI2bCtwcEZ3JF1sUTd+K2VJPmQqRihXdXVQK1g2eSRKPjR4Mkc/OUpWQkg3OUVSZkkpcTcwZ3ZYMDVAUHtfeDRLRlMqVmRlTntqSTp9Ry9uMEpVQUFWR3tfaixL''@;'; put 'put ''ZVA6Z0YhQW4rLktfNWA2Y2NFIj1BaiUyeENMb1U9OU53S0o9Mks9LndmaS5hOSZLWTArMF9sdUMsVys4eG45IV0uVWk8RUI8OitJQEEsWWczXWcsPCVKYD4wUTZfMTMmVk00VW9xVCVhXSo5RCNwZE46Q3B3YFJoIW5jNkRnbzJ4M25bKkAie1NtTzl2VmpMamVtKFdTYjhuTVt7NEpVdnEsdyws''@;'; put 'put ''Qz11VHI3PWwhUW9oX3tiUDReemVxXV4qKzZSJWguXUYyTUJDYmQ/ZTUua19ta3hgRDxXRFZmPnEvWUthRShaXWNnNDcjcGJifHRIIntoOWQvTCxdaiZpQ0BVPmNgKHFxOGpYaEBKLn1VTGhJOlM4diZCKmhHOVB3UmEpcSwlalFyNHsreUN3dHU2Y01UWTB3R1k2Q211Tz9pMXsyYShARDkmTk5W''@;'; put 'put ''R1tJMHxDdUphO25JWUYwQ2U9N2xjN31VXUtfdGdgODwhQGI5WUVeW2IwRElOSkNDQi4/Vn56cjNjfXA9fTU5KHt8LGVVOFgrUk9jT3k/cmUxITtmP3I6fTBxYlY7cyk0TypTTE8zeWV7WEZSdU0sRj1JelJ1OWRDR3pCZ2pRe0pIdV5lPG5IfHlBPlJ7aVFxL143dyJHZEY1PUAhZmp8Ry5Dc1he''@;'; put 'put ''cXIvOHwqeVZNRnpuLl4xS294MCRMImpfRnFtWFI/SHAsKDRxPGtlMUEjNHk0dUJzelQ0SWJBPCE8PHpGUDtJd1BIIy5lPks0QipwaENNIS93O0MxQkpGI0dvQDVdYlZCMmpTOlBPdkNYYTltb0R5UllHWHBZI3E0emsjRD1PUmE7QSQ3PDZhMVpaRVUmIThbR0h8dTgpej9yLipvaSJKfltUKls9''@;'; put 'put ''eFhFXk1EbVo8QChNLl90Z3whNm1RTCo5ZGl7bTl7fCoiOzYuX3ZjUjI/Pk90OTx9dThLPn11biY6dXR9IXBpM0hyZVVlbjZ7PXpzYyFAMklxbF9NXzQiLDZCUDpnOndQVFJWLEVJPlhiM1hZU0BYTyhrQ0IyNSY3ZFthN3whb2Q/cDhVKGtNckZNZU0+SEF6Si8rJjJ8WnhEM2NUdks+VHNFMTxE''@;'; put 'put ''PldJLmliM3xXQnJgMiFvcGRZMlBdX2pNWVpnN2BFMkN5QGBoP0ZKKD9GUjwuM1g0PFlNVj5LMCVIJmBwM1twMiZrZHMkYDhPYDdeKis/THJ1MjxaRztGKD8kPXJjPEBLSH0zTz8qRkVqYE98LHxPWX1ZZWQ/dDA6MF03NHMxYGtNYXtxRlUmbnhnYE1zT31ZYmxpTTF9IWlxW0YwQyMxLi90eTop''@;'; put 'put ''QHEsd1skUyoiVSMzPS9LPEkxZ2MkZH0kdSxBXyQxZ2BHfjNCWm95eHcpOT9BP0FGX0I9c1J4Wmc1LDNlM15WWFkkIzlgPXFrelRyaDd8b2d9Uj47YXFXSS5xSVFwLDF5UXhReDFYYjNbX19SdFQkJjJMVnZzUiNrPF8+fn13MGE+ZT0zT25GNTQkMSNbYHxqMHY4TzEpXWlyZn52UlBdZFkmcTRN''@;'; put 'put ''WF8qIUdyKSVyXUReJjFANnUhYClrKXUmWFcqNnExRXQwV2p2TTdiNXs+X2J6L3lwSk8wIlhvW2c1YnZ3b0chez4iWHZNN2JkXXdNN2IyeUFIRzVrITVSbylYKX1RYFJRY0luZUw0RnlpaTxeQiVwInlsK2I0bmA0PillJnRSYFdRUmxwJipvdGkoVklSSypXP11kLyVSJnAlWCRbTCRAJj0/JCRA''@;'; put 'put ''ZjteWy52dUlISEhCX0JqMGVpUDd1ZkhhbHB4c08lKk9KVTEvbytkY0JTcCtfe0xffCQ4YWlmZXZyWWIzPEhHV0lUJXEiXUYuLy9XdjlzWGJGTDslcVtXY2IhKTAoMXJvIzFzOn1jP0YwK0QlZFBQIVc1JCsoTF95fXU9bDZOSSxtWy5yUDUwNCt3TVNVQDU0fk5zWChqYSomZ0R5SElJLH1MMmMq''@;'; put 'put ''cmRLIyJLJkFHeUc1KWA8TW9OOWZpT2ExSXl6ayowY0pIYllta31oIylzMFZQY01ReCJbPmNbcGgiXW9OPCNXTm93RjR3OGNKJSpDOk1sczhNIj1xbmhaZGpjQEZMSHpGTCtHQUJzZzkoSkRPdDE9aUIqQUklSkdeSTxWSHp0OTA4JkNUTXZ9d3dMTmlQT01NLFllfCVwNz1QXU1pUF1RQ0NZSDtp''@;'; put 'put ''W3A2UiRmUERVJixeWmo6JD5jdEIpKz13TUVXdy9MeFopZSlnI0RHR3x4W3BaKTQzRUVJeiFIX0hueiFIOEhzR3ZQLl5hQHd1eU58JU1pek4kQVJvVE0lUkslSkdnIU5WLHp0OVA3Ykh8JUJ6WFJTP0glSkdVP05vVE1uem9VX2MpZWhaeVkpZUxieStNZi5eLDVbb2p6UU1seipVOFJDR3BJdXpa''@;'; put 'put ''Rz54V3klKkh6MHF5PUJ3KmRjSEt1JitOd0thYnhEQU1hLHlaRz1jTFpWZHlZTFp3YzEqK0Y6XilNbCMsXnRCdiUpRX1Nek1JT1lNek1eTlo1eTFbcE5gNmVbcHY/I2ZlQ1lNek0oTj4idks5KHlNZFBwalE3W3BZKTFkW3BYWC8wKXcpK053I0QmK053NHclMSVaTFpAY2NFSXpaRyxHbXpaR25H''@;'; put 'put ''MEBHWTxNbk5yS3JTUlFFWVNvRE1reltXdEphal4uO1BNOio1QElJcTZZajk/eikuckllZiw9fjt+TlVYLyNdUVNnMSMhTGJkcXAjL091Yyh4dkBISEZwZVlafF1oN0c6LzV8IzJaV1ZNU01abC5VOCZfRUpWby91dEVjVD4lTVRDXW4jYlF+MzF7I2g1ajlNUVZYb1QjZXxYTCVQMnV5UF80Izda''@;'; put 'put ''Z0FXVTgjfW1wZlpMdGQiMU1PL05BY21HPzVmU3FTIV9KbE5xY0t2PFZQUUkvPU0jcmZMTy9zQm0uZT8ieXguKEAhO2dMTmMvMH5uMWFzOk1LeDMrc1Z9ZTZMa31DKz5PLEpuYlI3UTZoQStPWk1hODMpMVlWLzNSK3xAYmteWSt3SUgsb3F3VW5IMTBncmBJZURsZjlEKn4mUEJgUilQSm5TVSQk''@;'; put 'put ''eUdAPlk0X0V6M2E/P3pjS2VWaX5aUmljVUpWOkp1TjJheWIyaz9oKTJMKl5ZOkxhS3EyNiV1Nnp8bWhjVUpyfSh9X2o/MUcqeFI5aFBWZHl+ajdSZTMhczY+al48Z019LGZqc352NlgjPGdpZn40b0VxNU1NbGFpV3lTajclPWNAV0tYaXpEdU9kRTc7USZGdG9ebntETi9IcEhDRkNLJnM3JUBz''@;'; put 'put ''UVh2MkxYRlhBeXdQIWFCWXxvKDdnUDlWTUFhPktPVFlxUlJoezNOWiZyT0xJX3tVc2BAc3xVMWJYMl1PV09BW25SRnxBbUN+QDlKZStgeFFwcG1SO1NNXz43WF1DYUZZMVJIViM/W0BFa31WJUQ3RVM4VVZUdVJfJX1eay5+SixZL3o3bVU5W30veldwK0o9MTY3YDtlQ19scl0jcTplMUtGVyFi''@;'; put 'put ''KSZRYThVcnMlYnRvU2l+UGlqXSo6O316I11Jamkzd1Z6Zk0kWCZLe2BRT3ZTKlY6el1kayJhP3xKYmRJS2s3XUpkNVNfNEJDP2ohVnZCWXIscjp6VXxNdjZKT2tQWChxdGIsYz18KmExXTxLamBPTzt0NE1LKTVATTovO0A2N05GX1NtKTRoVmJ1bGoze0M6SHwyYHpfMDx3PHxuWDdBS2I+O2Q7''@;'; put 'put ''bWIhLGJjRTxkNGp6T2B3X31yOzhgWDtMRkdpSVA/MFEwPy4qdmBHIXZxd3RsS2shJVMwMi46RWJLUmAsKTpFPSlXUzVYeyx8XyNnO1d8Mn1VRGsjSH56JDMpMWhqfTs0ImtQXTJMViNARXZ6ODhgdiY3ck5WM3wkRzUjeDckS0lmNyQ6XnlndDIxdiFnLFNmUU8mKSU4aCRsTjcpamBhNnhWMjYz''@;'; put 'put ''fUopNF1dTSl5d1FLQ2ZUP0RAP0RYcUc0c1s8SzIpPzY5VmlAR1sxNyM1XUhARStIOnJRSilAImIrQ11GLEBWJVVOXWF1LltGUikyZVhKbzAoNkhEdFFSN2RmZ3VwLlF1WDEpRDR+WSxoZFV1ejsuOFo/KCxyZj8xXWhCPks4OGh4XUM0T1BGSyQlXiE/LmAlYHJ4WDoxbEUyZDB5P0w8LjRaYnFt''@;'; put 'put ''SUZ0QyxLezUmS3cuPXFUNEs0KGpze1p5X3xLOiEkRlE6PihMX0FbYXBNKzZVT2N4dmh5ejlLdn1Cc1M+SjxVM0tzYU1GKl9AMTIzX3B0P1d0QEArSV90RDw0USk0RD5bKzBmXT96K113VjgkcVA2Y1hmWkM1bDlRU1toVnJzL3M7QGU/Z30sSjx7PFpnXl1WYHxmW3Nobl8hLG9eQXR+LClQRkw/''@;'; put 'put ''b3R5VyRGIkV1WW9MbEZEVVRMeX1HcFleI3FmW2I2S1tnbzMuMG1zVTBwNFd1NSMuL2VALmJ8QDRqLFlxaHJGZFE3blFnKEhTeHpMXz41aCY4d1MkZWNuY1EpIT95NXpqXWB9NVAzd0dQZHVTalBqTThMbjY/O0psTDZHazNpUFI+LG4rW1VSPkF7Omx8M1JDRDJTJGVjbmNnenBkfCNnWC4kdnt3''@;'; put 'put ''RU02PSNPU3kvbWptcSl6U3YkYFEuNF5dNlRaKXwhSShMOlIzM3Z7TkVAaGpuVGA7aF5FPTBoJXMpJW9EOnhTTTo4OWNoY2E1JmN4SkZXYDEzejlPOzdgZEkjI1dVUCFMTiN4XjU9I0N7QFB4R0Jdc3AsSiVaNzRGRjpabmF0bzdWWnxFXU8xdn1baDNnMzdRMUlLe1Bufk4mfUM/MjZ9KGIvQkVN''@;'; put 'put ''VVFfUThXbUxebGNaYUZJRWFUdiU1YEVmcTExQy8vXU4rb0k/W3NSJX1Ldjw/JCx9M3JMTFZMbSFwRjRNRSVfaGhSLDhoJn50dyUofCE7XmAyJWQ4Q0xXJTFAZzBQOkkvMjohcl1zZTJBUip1XyxuXldSVV5+ZyVBRE5tW2UpaSgkcSwzYnc0Qlt9bEZKSFBgY1ApSFA8WFF8LC99ZVskYW1jYjBq''@;'; put 'put ''T1BLSy4oUWI4e1IiN3lVMUpOWDg9SkZgej1FZHFrUC90ZXE/O11VWGVdQFI/SlNJcE5rQERpYyMoQWszfjAkVnZFanZvYmd8Jj91Qj0qPnw1azsidiIjRXU+RTg6eys+OjFhUFB6N2BJZUs2RCwzZnRSUGNRTFRDcCpvfGdNcSRgZV1peWEzTXI9LmdwXnohO3wzTyo8MVRzYTA1PEpfbDZBVj1t''@;'; put 'put ''WFAsXyNodFJjKiUzRFVJMHtmPV4jQjlGIS5+UGAkPGpxKVR4MClTb29+Inh5PSR7NTl2XlMsWk5LJEhXcWcuK3Q7dS9QPVI+dSxSKmkwUil9IU9fe0kwJn4wVWJGP0kuTjl+ITVnO0ZfaEB5MnU0NGVANzRlQDk0Ok1GNzMyazJZKEkjXWsubmBgXmh4LGZtQXU3XXhqbEpNRXtuNyxFZWo4Kjo3''@;'; put 'put ''OlYuRSVUdHJ1PyI5WysmVGRYWVhSbWEse3VdTH1XZ307UWRfKEMwdHo0JXxIXyFISGFZPHs/cj4wcUFPJUQ8TkdOVTNhOGNWQD0kR01Eez90STZIQC57K0tVSCo6NmdbVW0oS0N7UU1SOnpQOmlGRVYmcFFvMHZRI2xedDlFa1R4M2FiMGBgRCMhLFd1PEAjYDZ5Yk41blAmJkMjT1t9KylrSShM''@;'; put 'put ''dygmci59VzFkRGhQdUBmOS98K2M4JlFGWDs7QGA+PEk4ezdwclRzdyFTZjtFZWR7UUd9dUZsP0pjcjJeOkRbKi5KZFlLO0Necms2djUpbEB7Xih7YkRrNX4ucnAlWF52fCFDRHo1WHpSKT8zPWUkS1M+T192cnsqV310czZPJWBzVmApKHw5cV1fY2MmLC5jVj5pRHo+SFppMGNpYH5qTlo7bnsh''@;'; put 'put ''MXRjPFpHa3slJmQ5KklfUTtGSyJeajJqcVszI1leOiVvQ3J1XVY/eDZfLzQkZyQjI3h9QG09Vm98PGkqSV4rfjVVUENway9lUF8/MGN7MVttX3kzZkFAeWczbmdAMWdVSC85RE0qY0pafXErVlcwKFFeWlBILDlCTzN0aXAmb25maGBlUXgmPEk+UkIxMGF6KWlALiFpajA4NlJIfEVdQiF6PTlY''@;'; put 'put ''PihFe3dQRHl5P1NqaWptfUVlNzUlOWFYVm9mMU8yQUlhO11GbDZtYEVzZGM1dmMmI352aVpoIT5makl5PjwmO2VXQEk7PSwqVyYwMH1Ab3F0fSVZVlg3ej8jQGRHUV9wK2Q5aEIhIjBCPzl7aT5gSEovI043JFZOXXZPZVY/ezdyfTtOS0loOyxEd2Q2bGBUOVJAJXpndHs8cUo6NzdWYmwmNC9X''@;'; put 'put ''U1Y7NzkhSEJrOHN+STojTUMxM3NwSWl8KD1RXm1fMEkkYmNNJE1SWyZCY0M8eSl1b0dIR0hMZy9qWiRSU2ZmTjpgdzc2MDF1VkohYzltIzJmKFtQZUdjPit2WEdLQSxLci5IZUtOYXclMkwra0V3bkleaUAwQEQ0amgpKHRXVTVTd0VzWlAxWz9zU3Q2cGVCMzxPOD1vcV5FaWx7ZFZLdVs4Ul0u''@;'; put 'put ''XilCS15kZzVhalpaaiVCTGAsUyV2ZyVme3VqYDJ8WlpVaXhxYkAlZz9iTkBeW1pFPVZkVz87PS42ekZgKW9bTVVDI1ZbQnA9QX5ZfUppQEx0XlZzcHNpcW9nfSo4XXp5JlVWTz9GdjZNeHlOWSMsb2V+eVlmPj1fZmpIdiZWKnxSeHpiWjNee2RTO3tJe3E0JTYiRFh1TmhgekpdNU5mPnNWQml4''@;'; put 'put ''dCFkQmg7QmFYLyxwdVd5PV87RkkieXpSXyRlMXczaD9nJl89OV1fYVtCYGAqXXchKmdaOGp2TkVrPi5ydUN+OywuTGZeTGJrLyU+fXtaaTpzRTZwKi9pKFd6PSlEZzxBQCxzPnBTNWFLPUk0NkQ8TX5JVTNhZGlHdFFHLjBWYWF+dSYyfHh+KnQmcTpeWjBEeG1banxkXTVNcE9PeGNbZX5yZHBw''@;'; put 'put ''Xl5IUkA7PDVeOVJ9PGlqZW45QD1CfHQoOHA5UjhoZzpbT3FwXndyeyxfbFY7Y1Y+KktLZmlTRVZGRl1wNkNLREU+VClYcklRS2RqemBEe1leKF80JmJub3klZ3o9IVdAQEhDVG1mZ0Y9MmY+Rl9GMipVMjx8WSI9Wk5fXz5vbCJSbyNFaD5weV13QW94Rnt1Xnl1diZ6PTlNTmhdPU1kX11jImx4''@;'; put 'put ''PnNhV3RJdEY1YEFhcmsiKVBhbVRmLChOOXsuQyFHQmtOa3smOU5TZnppR155Ylk/RF9ONXV6cWRaT2REKixeKlo4XjAsfHUyI1gpIilFYmBZLHVJSGBdWmlbMVA8Z0ZzWjYpajEyMzNsJWBuNltULFB9OXAqfGZiWWlYVj4zUVYqKFViVUpmPF8we2tpfF1WclpfPl8veWp5SHlVdi8hU0BeQ0xp''@;'; put 'put ''fSlNWT8jUzA6YUBXP3ZTJilTaEQ9cVcrY2hhYTN4fUBCeFBnXURCLlkufHhmdGB9QFUxMGxvNjJaVV44IyZEaWNNV2Z2LCsuczl+SyRJNHgrcGZrZShYbWVeMEM+KHtFamMucEQrRGRNP0c8bFApSF5wLywoVU5VO2V4SWhNQWtCTHpCcXpnUi9FLHQoK3g8K0YhT0NgUnp+RyQhRmlUQCI2YWl+''@;'; put 'put ''Yjd0JFhZd21rKEV2WHNeTnVAVDVfdlRYZHJLciFbMUFKV0JFIXwvVGtNb0dlQih6VlZIe0xrN1tqIl1EXl9yLnEsYEB5OSEmSUoyWHI0NkRhLiNaLmZ1JCpbLHUkcXEhKytJPGRnfUQ6UkcoaThpNGF+S3dWPyh8N29hJHAkVlA9IjgvV3M+cTl3Kz9raXIlQSN7I3R7JmdoUnRSQndtfmZZMCNy''@;'; put 'put ''dj90cVVTIn07LEBYX1M2XlY+bjVWSypRQ05QXkYuOEZtOHN1X0s7Qyt6WSxjektPTlNFZ0JTamdhLnJeKT92PjFldlAieCkzX0tZREFWTCY3VEovayNhbkJSejU8Vzw6aCx+O2JxbkA4cF9COlJYLltnfkA5PyJTQm04LDtOJjh8MTAxK25+MXowViNjTiUkeUt6OkxfM0JETCwzfiR0PTk0fH1I''@;'; put 'put ''JlVANFJNMiZ2S19hLHgqP2o+UXAsW1JkKChQMDk5JGd5S0N4YDdjMlc0NFJ0VSk7SWNyKUpgd1hMYnpSJFdYeHNoNUo8Lz1fPUo9S25NfShwYG9oNWNuVkdwOjkrblQ7JXpCfSkwaTM1elB5TW4wdF4xc2dNajFDXz43VVtZRzBpSmpqS0p3eyM7SWdyJkZtdVclJlY0TUwhcWxBS159ckg0WlZd''@;'; put 'put ''dE1CbTB3NGo8bWVteGBpfGtjLjZ1SUEuRj5BWzEmfjA7JnAqYTJraCZpRy5JVjkxUHVdP1VPPi45fj1mTjg1PCRYXnU7ezZhQzYkKmBZKjlbYTZUeWp1amJdNksxMy8wcEdNRTlEcDY/OilUcTAuYUJ1RT0zN3piXkQ2OENnTTNUZmYxP25+SnYqP1Q/MUduTmhhZ0l3WTBFOjozSjV9X0lFPixh''@;'; put 'put ''MyIiRFd2JVMhcDo+c2NsTDMoT15eSyY6dTU6Szl6UWhdKn1rckZoajN+bC9XaCQ1bElxUHhHSXxMJmc5MGciTXY2SjYjKntRa1BnezFjVDg8dVgocXMhSloxU345Mz4sOT5QNGZ5YHVtVnFgeUBFLnFLbmZqdGFVOWYsbEBXMU9rKz9iOVp4Zj9iOTtEdCtVVXQvZW0rL0pueTY4MnNLK0diNn5X''@;'; put 'put ''dH4lKWsoRWpORjA0RyMhVVZCT2tyXV9FTmxCYHQjYUJmNGJgP3Q7e0hTW3pCRTlgfUVsfCJQITRnWStKSXNKWmwpaWI7Y1A0M0Y9RGxAYXFXZGNpcXlMWEdNOCpsSEQrcEpSKUFTaFJLYTQpWCwyTDdyY2QuPlVPbDo+LzNOL2g5Rztaal1gb0c6aikzPWgpPllRQVRpMDhXT3ZEUVg2X05jIWlW''@;'; put 'put ''S2tQcG9TUnwsVXZmOkZsXSw/I2J6blowZzs8ZVFOPllWPmZlR05GNnVJMm1SdCxITmA0Tk9PcCRTYjJbdm5jd2BZYnFoPyszX2Y+QDNzd35AWVIrSFdyd09ZYFJOTnV0MEBaYUtOR3g6Qmo6ej43MDRdUz8/L1NSbS8rUCEyOkhtNFZBPVEvNkdMOjpiPmJkVy84MSlYWyIzPTVvYTdYaWA/SDFC''@;'; put 'put ''X3pRWFsrfkxfTmdDdFkvPFk4PXRzLCF0PXw2NDRpZkZBWTxMP1koUD8wJGp0UE1hWnZyezlgUHZYTzk6LzVFK3B2UHE9aWh4Mz5RMEszWShgZVMoaz0hdSp9RERPNjVITWpdcUF6bUpGXiIkL1k5VmZCclJ9eF4vbzxrVmhrQnkmTkA7WGZrMmdmQ3IoSlswY3dnJV5AaTFCZUReYCZNRGd5NFRH''@;'; put 'put ''Q0goTVFJRGY4MFE6LDYlSX5NRWB6NSRRTUJUcEIuV2t8OlY1Km1vdzQqVjVmdWxXUVBsPCE0PT1fVD1HcW1vZzVSPiQyRHI+eHp7SnJjV3NdVWl1Lz9IO15vSGhIZHVKWDFGdUl6PlYpOVssQ1luQzhzWmV2ZSNfdkd5Ri8kTUo9IUxkUCQ9L0pbMDNmN2pGPCheKnJEVnkjJkNjUSUwdnl8UTdr''@;'; put 'put ''YlF3WGx0Mm9NbndmKS9nJTZjfllDcm9KKV06TjZLWH1gVzwoL34pNkh9YG4sKnUudjIsQ3N4WFkvRDcibCtTMmBfcFpgdzohdUdxJHBOLCNFZEg1SkojIkowO2RnKlJrVU5hWypnIzkqaDJqY01FU1swYlY4K3w+bUcsW2s3PSM3JXpqWmNtRWVYSnxodERITjw8dmZyNWd0cGlVZDd5Zj5bKDRC''@;'; put 'put ''ITdrTnt4d2JyNlBrU3VNbiE0S3ksR2B9bndqd25VWzhIR2o0LDBNemhYMTFEbVFpVDUofWNfPE57JlhZJXdbYG13eENyZ3htUiltdE1TNndYRy5dNm1WeUpKRUM1SmozWGomfjAqUll0XnsyPGUjTmE/RzgmQFY3UzlZP0dmPnQmZHg0T1N1YHJMblBQTyNiK3lSIiJgLHkhTCFuRV9qNT16UE0z''@;'; put 'put ''OVFEKU8jR2pdQGQqcX1RaCxVciRoeDV3b3p8NS44YTU2Y0tEYk9fLEYjLCUqNSo1Pk9YNCVvTmdjdmdTb1J9UnhgXVhVUzRAbSh0ITg9M1phZHlsMC5RX0o7bUp7MTZ3QnJ1N0JSWlVjWypWZzlYMllKVzw7P3QrYUdaJU9+IS83VDltfWl1O2FHfnx4MjRye2BIJGRuLDF+SjFXVDV1cGYrNDhF''@;'; put 'put ''ZTk3WCslaG90K3htMGJUQyNAO2NtVSMqKE1PRStEN1VbY1Vec0RPYDxAWiYrYnRoXnNxajN5LEV6W3AyQ1tPe1VjdSwmcyEpdiFLMVUwOTlFfCZ8eFNacmxOXiFveWUyO3lnZyxZZ1BaJSpQdWR1M11nS2YyWkNYRndTPD1yZSUkKVtXKjk+Wj5UeVI4aWAiPGc3cylVeD8iSTQwLmgqan4xXVRV''@;'; put 'put ''bEZyNzN6eCE9LFh5Klc0OFRqXmhOel9FTEtiWD5ZVU9jZiJyJH03MWx1b3pQam4xY050MWNOTCZNOCI8WXlBLnRvbFBpQilMWkMqU0FKRnBEUTpTJUBKNE4xYjtSWjFNNyVpZS9kIiVsdENpUVlEaWxqNT8lR3Y4VWE5fSxAUHokImwrNGJEVmJic0BoNEdhWEg0PTtxZkV9eHh4Sms7dTkmWl15''@;'; put 'put ''ZE5fTWtIRHc1P3YpMWBTdW5meFlrZkFgYXVDeFlHcXdReyVWTSlNY1g3cDYkKEBUeGFgPlZdVlFQdVBhbiNAWj9kTUwrWVhKZCE4M1hdQ2ZNLFIkRWpNNFg5cktOOm17OT90OHJnM01mcW5reG9yImwmSFZ1YztgYCM4IXpzYypyQmYvWGRXanJEL31ReCpmUnFjRFkwL0sud20kaSl9OXJMLjc9''@;'; put 'put ''KC99YzRHJlJXSVk6cC9jRmRRJTh1flZgX0BNKSwoW2pZUS9COV87UjBJNSE6bUs6Yi95WUQyWnZQaXZSaU18QGlhfGp7KnBZKHA2K2xVLFhtUXtpeTh0UDgkOVF4MFFwREg5bENiZWBgcXNoSUUhdV1FPFNiNHpNdV4yV1s2PWxNQkRWZmh0M19ncyoiZThMdk0wQ108dXYqJVJnW0QyYjBQbj86''@;'; put 'put ''R3pAfk5jWVhWUnROTU4qRWspd3woXU1EVClHLjc4ZlR2cFlMd3h6OWhuWEZpanUuLHJsNUY8XSxHaXJYSHczIStZXStIVHYoMH11JSs+L1g6QVpJemplYj03LjFVSyZoUWhETkZ1ZyJsOkc5cWczXz1mOXtofEhHJVlSI1EwSy9IKVdxLEUuOyFtUEtvZGVBYkpxRyNzJFJaPFphXS5VWkxjQkRZ''@;'; put 'put ''NC9ObFBbTllbNmojTWYrMmVpX1tGNE5ZSDJTL1JZcll2Zi9YU1lUcilDantEV3Y7RGssT0Q5VkY8fCNoTFo2OXBhNEM+O3V2VkZbO2RuOE5IXVRGdD5lekp9Im0ycV0oQjApSzlbR052XiIkP1VXRllhLk15fDtJPyYlSkNwMkdLMGRVfSNDUDxkPTlfVGZmbShtTy9CaUdCTWojbXkwZFZjOkMk''@;'; put 'put ''d1hLYDRPKVVhcW5FSWZse3p7OSFQWS42c2pifWRLb2hTPEZJfVJ7PS9FcmZAeG5SXUFlNTU8V2hEMHArSz8xfnYwd0NdVVhNK0lyIStVZyVyK0s5Uj1RXksjQyNwSj0vLj0xPDFXfFlSeXxNelREYnI5KlFEUytnQHVMMjRkRlNXJmhpcWlvNF89SGdaNixbOnwhZ294fm1wZ3Ukb0hoMn5dR2wk''@;'; put 'put ''eDl+dCE1bmBTaSJ5bypILDQhK1c2Ik5ob0IweTZQIkBTMnYxTHU+R11VelQ8P19aYUtlT09wYWtON11UOTRLTXF1ZjImZCxEUmVQTE80W1dRbUdPRWdLenloRWBXOi9NMmp4XWdyTVRRbDQjV0k3ZCx7QkI8Q2BvaDUqM2FaPE8hPW8jQms7WVc2YC50XnZsU1sqbz4uaE1ITjF4ZWdgVnpQOWFx''@;'; put 'put ''UUpSQHtJISU7IkBkOUYqWD1TV1tTQm9oMyp4ZWlfMSt8InAjdSFkWWViPkNUVnYpeDtuKls3M3F2fCEhakdhdCJAVU0kbHNkYkV7ZiN+PDh6dHBESHIlXjBFdVBqYTs/enNjVUdRPz9yWEwjblBITWRyQH56VGVIUnhmUyU3UGU3KC56cGhsJlhNNnEzTWwlUGFaNlgkOHFKbjFVTChlZltHayYq''@;'; put 'put ''WnV5PDIpO2Y3QFkwcClMYEEuWWJXaXA4M0k+MT1lMiQ4NFciNFEqNkVreE1RS3NQdUZta3t9REpaWVVlVWE5ZH1lP1ZbWUV0bEU3bVJYc14kK3NOcERMUnRDeUxNU0w3L2VxemdMcFM3Sit4WDV2ZDxiOCVvZzAwaWB8NjxYVFkwL3Mmd35Ifn5OKy8jIUkjd109JiZ6JStkYzB5T15IJVB5WjVj''@;'; put 'put ''QnZNb1NfYSI0QTA+OldQMnlHNFtXZzJuRCI9Zjpyd2Z0T31JW05UUWRNLEhpZTpnWGB5QEBQcnRSPGBuLGd1eDgyPVQhcFpLYFI+ej0uOyomcnBUMDVrbEM+cSV4M2pGcltqaTlTQmthLFQ1QEgqTlBRM0lyVkw8fkR8Pks8dnNbQD1sIldldU15ako0dHtHaTNNa2Z0W3I/ayV5bStIPWhBfmg9''@;'; put 'put ''Qm1YfEFaQD1NaFlbUjxIVTZWZlF9czhvOnUkPFl6bEhtSlZ9bjNlI2BpR3x2ZGlddXI3ZHR8PT5pP0JOQShHIWN3PEw1d08wP29YL1QvbT1bZGFPKGsvbX1NaUlnMit2WmdBNnVZbSN9dyNscVRFI213RyU2Zi4rISE/bGptSk1gRGI2TTl5MTlWJHI0UCpONExzZntXZSlgTkhlNmlsRF5ATkFD''@;'; put 'put ''Wn10P3lBaEliOy59Y34/ZlZFI0spfGZJMldmRXN7W2AqKHRbeXNFd1hJKGxbWkRHd3o5SGZCckJTTyUienlRNVJCaj8sQT4uRnFadnRnL0tvZi8qTFJ6U35gaWJvVUkyWF5wVjZ6VVN2TWNqPEhvNTooajRnbUZgQHNwd2hIbyNnb1pfSEwsP3w3aTljXVZ7Y31dM3diYTZjfV0/fGpxakIxeztW''@;'; put 'put ''IWMmTSR3RkZbeC9MQmdaQkI1fUU+R2xrIXR5bm5mOVc2UiRGKGtlQUxHSyV4Q35GUnVSRVllfV5RZilZcj9NfiN9RlpIbyxfPTkkWk88c1NAej8zSj8hUmtAVTVde1paeHpHTDU1Sj9WSz4+MHMvVjB5PSg5UiVLY0Y6Y01tLE1xTn1HclY4QFUpXyR+TG5yLDtGXzNOSCgwMCpaV0E+OSpDMXpA''@;'; put 'put ''X0d8bUcmaF0kTT0zVGpEbDltUCk1IU93M3s1Xig+Z21eJiVPclBvbTYjOXdWfEdxUUkvQ3hNUEs+MilbdncqaUtGbl9uUyhMUDJLSkN5THh8QjwqXy5RQUkkJE09UlZ+ViheLjx4P3wpXXg7eE1FZDgjPENNTC9Fbnt5Znw1endOP15WPl19NF5aVHBwe3J3V1lRfHBWbXYhVSVmMUcyalg0M3JK''@;'; put 'put ''TFFYJURBL2p0NXwsbGFVQipVanFFPyl4dClxSThkLmBeez4sVFVreVZfIVUoQjp9RmAmfjlXJV9HR1ArXlhUTFBVR3Z8ajguYCx9TEpsYCY3QnJJanJQKjEofnw2JjsrVCtSWmEqTXdLSFIhKF4uZzd8IkkxU042NTJ6U248bm9LNSZ0XXA9KVU1cnB2Jl0hSXIuZCoseFV3X2dRJTovaTtgbXUk''@;'; put 'put ''bSlJb2gkd3lOYGFRaXdMRHkkaE9nXVtPTmphTVJeQFFCNCE8dTdiOzE5eT9vU2B1RUYsLGwuQ0gjI0RjQ09ZOHUpRV9qYHN0OWpPaCZhW3sreFIpKjB6YEVEMXRvLihjYz43MjZ2ZkAzPmNLOyZobloiPUJ1fVhwLEx2d3ZSaTRnXUAmQFBJVS9YMSguYlBIIyhoQXw1e3R4R0VaRU9wYFpGa0k7''@;'; put 'put ''IiV1K0RiQFpHdn5pUHBJfmsxXzUydVReUWJOX1V3Pi5ndm1SQWFMZEdxUFg3Y2UwSENDVEtUbjVjY2V2Mk02UUFRISNZUXlzVSVaMmhNMSY5VlojaztsKFpGUFNkRGN7UUpDXUhNQCVidmUpOTxYJXtqMUlwclowSCFLW2huYk5AIXN9cl5dPyVNKGBoLiMydjNRW15yMTIqJiRdSGw/Ji9OK05J''@;'; put 'put ''OTI/UXd+TldDRDZZMCN9cTpxQDRqc2wucWNMcGBeTUg5d1VPNm85cUtLXyR2OV85anRQeTlpaT5UOWtQVUNAZGNVQCNVe2VzRWhxVShRSTBRM1kqeVZhVnZEMjFVdiFCIlZDcXVCcCxWd2pXWE9PMGRWak45YUVSaGFNeGUhLHJ1YiYvWSpQQEluUlpAWkBLa19obk4pe11+KyNGZEA9JndjKU40''@;'; put 'put ''KnZNYVR7ezxwMF5sblE9SS9nPURwTCk1M2xrXW9lUnhGZHomLHBBO1Z7N2R1MGIhZ29xbXtTOkg+UWBuUXdAX0ouJCt7aytYXXIiNUAwTVskLm5QLjNEZ0Nqa2A+Oj5nbm9vW31qUiE2aTArOjFMOzd6cyx4T1toXT9ZP1suJCg7KkVaQHc6O0lpaWAqTSpBT2tNLzttN31fak8zYHs7ZUIuUlA0''@;'; put 'put ''eEFefjVPSlVVZHZJI0BpUiNhTi5tSSlQaD8vLChCVF03dENjUmozSUxeSzosUyVfPkIrRkUjclQ7YlJbaSJOflE0fCF9e1VNQFFVMSZ4MihATmAhSjdJNlk7RlAmcEJDYDpWa3tPIlFbc20qVyt1TCoxO1NHP3xGUztKTiwucUYhJm4iIW52dXZXeXN4TCVfSWMlNmBiJmttOyV6Z2NRWyw3OyJS''@;'; put 'put ''bH1OMT9dZnBfcEhrfks7S2omNF1VPSo0KjhlPUIwNUBiSUd5R0pXPlBMMS4yW3BEPEl5UWNzREIuLjt4OT1fRi49SD8ofUNWYEd3aEQ4ZUJael52W0MzfGZ1Rz5lVzA+KkxqUmImNTZfWHY4RTdEJGBvfk1ecE1yY2QiQEA9Ry5qdkYmMXNmPERKWjg9MlFidHIybEhAKi9GW2pzX0BaJENpYSpp''@;'; put 'put ''dm9LMG0kKUguZSM3ciVWQWgzUzhodTZ7WmdZQXchZVBOcWFUKDE1W3tvPDp7NDZfOTlzKns3JUQiZDkvYTM6R1tZXWBsOHNSaVUzZihvNn09M2c9VEx+emhbNip1W3E5PjQmX31EXjVzdjxmYyZmKEFCQmR+UEIja0puJD1wNUxoIjtWXVVBRHQsUXVyS0t7XkFxKUpWIk87OF58SEMiNjs4UlRB''@;'; put 'put ''MTFSI0R0ZEtTX1lCMGsqe0Y/dT9jTiNvZTA/eHhNdHVXa0NZO0B5UikpcWAvVGJUTVJgNm1UTiI7Skh0R2Z7JkNgfkVbU0BfS3lOS0tYSE07QGg/fCphL3crYiUofCgyTztqMiE7TSRNM1UyQ0pBRk5UfmVoViR+eSVzd2RQc2pdYHB0c08sOkc6JXw0NmUwbXg3OXA4LFVyUXEsPTpaa2tQOzBO''@;'; put 'put ''Zm1ZbmF3XSVAb2VRRWcmVCoxLH5XXjlBa2cmWCp7MDBmM2x0KS5lUGZoYGx6WEZCa11sUnkmbzEkNFtzQ1h0e1MzKzpDUjFAUzY1eTUwQzwoXmJ5W240OXtaPjpuOyR8MVExemJIV20zYFg1M3tQTGxfLDBsRCFBcVRwSHM6cmtbXzZ9VXg6JVkqN2olNyZHNHo+aD9ZMUBWLmM+ZDl9flBEcyM9''@;'; put 'put ''RD4uMzVzKWlZXVZuUnMqTGRWTHU7ZUslK3d2MGV3OCZhLD42VX5rOTshcnVuOXRhcGEkOWFXKlchOUd2b3JZPSQwN35vazVtZVdhZ3wpSXxWUmEjbWQ2KkF2KXNuIk02REF4ckJtNnNJVz50ZH1dLk9naFdxW04oS2BqQjVhKFAuMXpJdjZFdlEjY2dZaXRmeFhLV1o0W15WMkZ9fHA3M3NOPnJ5''@;'; put 'put ''JGtVXXZTZW17endueytnU240P0QjWz8jNn49TyJmK2xgWipWMUAqUG58Nil7WiVmbmBndylZT1QlKSUqXSxsYV46PWdPdCRWT3xQPChZOzshZmhzKj9yRnJHcng+YEd3W1cpMVA1amNUOTJxVCZwIi5bIStwJTdKV0h8WmdePV5ycTp7MyZ2Lj0+W11WcmpDXyJBUEtTezciSztvYXlmU2VHO3w4''@;'; put 'put ''ajlsJjNbUkRKRmRGQCovQzJUJT1IS1k0Y1pLIitlOCg/VEpGSHxvQj9GbVdjMH0mWiwiISJsPXspcWA0SWZhaSI1SGZIX11AfiRXem9Ua15uSmteJW0qfV0qNnp8X2cpej16S0N6RWByZGdWSCVNVnBdKlFJentabVZaYW5KZlpXVTFjejpqXT5xaX50YXdiVGUwKzRxPnckKzwjQHpeOGZ6RjE2''@;'; put 'put ''UkEjXzY/eW1VVXBNXyR5e1JfNnorR1V0N2BHOXV3SHdlW3BhKzQlcnpZeVdWM2EyL0VgQDpAP3omKDdiUU5fQEAvZz9aTVpzZH5hbSVSQklac2VMbmp3MjlhT1FEezBsS2NdJEB5ZWg+RD46cDNjLDJQSXB4S3IldFhvcnFTYnxrJmZNXShVVmFbayFiWTMifFJbP053Zi9nWGohLllyclVgez09''@;'; put 'put ''PlJfdGhgNFBxMGpwQVZma0koKThRWn1WYVU0KFM4aTtBbjlnNT0oS3R9QmtORkVWV3kpJkkvYz1JeFIrUF05c2lhcG93fWB8cjFeSU1SNTZ4emExcltYeFcmb3hgcTwrcTZTajRze19QTCFdZDtKLntjQE5zZGR7Zix0WCIhNkUuNipiVTtrUU05SV1faT9JeSw2alFrMmkpWEhxXSNFS34yRitQ''@;'; put 'put ''W1pVYVVtUW9LSHlsLkNqcWBYZi8zXndSS0lKSmsyJGk8cDxuZGk7TGIpU1JuMU1UPE06Ii5nJlMkVWc4MGA7flAjcSk7KkAuZTFCfF8zPUBgQ2t4LDEmfixZZ2gsLykwLChIUUdHbyQ0YSEjPXhWfl0lQVsuWH1JKl9JXjE0b0Zwd113JGVQdWcsP25bOzMpXW1adH5HfGdlTl5KY0NQOXUrbzhL''@;'; put 'put ''a18kMUl0SisoO0Q6b0RTcDNEK29hSyVSZH5BLzRARD1HW2pQLD4+Q1NxJFIpdnY9NlNrVWVDUU8jQ1o8WiRvUFkkKWBkXmBMcVAhbV51W2dydWlLIWVjMnFONUNvVy5mLDxfIzxGTDFJQ2E2TjRVYmZvPUQuYmh3M3sjcDJTVzRnPT5KN31rUGdISkNBQnFXJEZEeEJnLG93KHldOjEjbzh4I0BW''@;'; put 'put ''SygzPENEcWBSeENhZ1Z9SEUsb251IyZYOV1nR1BDVFFXJTNvWyR0Yn1VI3pIZVc9SF1XTSFdUSRvX0JYfkdoeVtzP3IhSS9SY2p8QHQ1dChbUTt2KHZgKUpkXlUpV3olb310PkRIQld4XVtSVnpmMUJ8Vz9UTj09eHtEIihWWU9ScEMuOnFvNCopSV19UzJYPFV8ODFKPlpePlJLLjQ2PyRrNVk7''@;'; put 'put ''Qz5UXnwlPVVUJSlfMUxpLFJrRilsJUtNUy8uTEk0Pkd9KD9UflYrYWJraVQ2WiIpL29URCN+bygjX1M0e15SbHhgJEpeZ3F0ZXxGcVE0WU5FI2lUcWFDK2xOYlI0RltdfjwkYF1NaDlpOCosdT8mbyxDdmwuPUk8TC46L3NRUjZEcVtpM3g5RWZETXsvIUhnYVNUKjQ8LjFQXzw7VFdVclNTWzA5''@;'; put 'put ''SzFhcXJMLjBhNjU3OVheLypaNHpdIl8pX141QjRtRG12NWlNazsmfTwvOCIxRjs4MlJ3e3MhZ2ReQjtSJSNuY0wyPlIleFJbU3JLOypTfnwyNjxdU11DLCZ3bzZLVm40T2JSK3FIXS80amk5KG45RE9uUzFoR1YydGdCeCR1cmgwUypVX2lrcSMwWzU/OFIhRHspOmBwU0Nfe0A4V3xCKHk2fXg5''@;'; put 'put ''aEIiPFkjXXZydyhuKW5zcXJbdylETGVXUyY4YUNvcm92VzY7Ti5jXTEoNEhXX0pJRTJGPnosN3Y8QVV1KmpeXTlKPTE3ZTEmbW9oMSJ6dUR+XW04OSl5d257YntvUHYzeCY0Im9gcjohfHUlUjhDbzAsZmtKS08hbjhdMEZGNktrb0ElYy5jXWk/fCp6bWljP31XQk5qY1lNODZzQHc5X2tDbDEw''@;'; put 'put ''W3F3VCY4YUBGKDMlOmE7KTEsb0VWP2NGXixiM3pkTC8kKmhhe3w7clJPcjY5a3oheE54RShxNmt6MnhrJCZzWlROOWhJN1RTN2tbST5bXkgjImkmXmEyMzowbHJFSUl1bz49TmtUbVdjVCYydylDckBXS1E1LFdTQXdJKEIqaGspUndISDFQWnRxR0A/dEZvQUd1cG04aigvYE4mdHtDJUk8aU1B''@;'; put 'put ''QUFBQUFBQUFBQXVDP0M/akJIaiJjK1IsKTJ4XnxER1FWU1hpSlE/WHhDST9MMjFsMyh+JFlbS11sfEFbejc4dmk2S2BYdXUpamRfOSNMKVVFTnFxJjd7PTNIZWAxY0tYNllAKSM/UGgzIigxflsrRGZXNkV+JTc5bWpRY3JEaH1OZ3VFUWpLRC8lVTR4WkZ3KiVdSjhUfmo9WXo/QGU0MCwuPlFA''@;'; put 'put ''WCZTQ2guWWlDPTp3WCYiVHlNPlM6SUgqXTcpXSg8I0AiQzszVVNuSEo1MXhVKmkhPUZ+ZEtkYjZALH0wdFo2IyV8NzBeSHBUM3kjODdUMWsia3s9bj96XjNSVV1RTHpNSlFCIj08TDtQcVhtSWxfeE9OPVdiN3wsUnYuMiN0PzhsPyZ2MW4yZTNNSk18eHU2UkVAPTsjK2E3MmU/MSwsXSgrN3Mj''@;'; put 'put ''fEZxT0x0S349NUB0dkNHVlh8QFlTVmAuXk5dXV4meXBDbSwqOWQ6NiJYT2Y7JCVkSmZ5TkMuTyRja3pWQCwsVEI3Nm88TDsrNUouRmppank+W3g8RCpDPiQ0T1hdN1A/Ll1hRy9nYllNdGBQYzRYaz5NbTpvISpJNzpCYklvZyUiSW9pPHNXZSEobkk6TllVUUlHW2ZjSThFPHZWeTA7b2R+ZD56''@;'; put 'put ''LE49dFc+LGQ7OHw4WEUxXWw+eiF7bmxZUjZxOiZsKyErITYpXnRbR0xvX1J6fCErbiwscmBoakEyPWh8Kz5uNzk5K2tfbGlrX0p5SUVaKDt4KHBWMy87Zng0Z010Q15acmtVeFk+I3t7SncjQHlTSyE4dy5TTzJ4SGZhWH4ofG9lOjMwSitOTyIyQi5dTSQlK0A8InAjSl9fJGpPOEAvODd5OnA/''@;'; put 'put ''UHxQT3N3SlI2Py93LG8vdn5YY007NCU5QkJDPWIkbTBFR1oye2ApVzxSVyspSFBqRlpzdnJqM1tueHJ0am0+PlR3OC51aTpdaWg8YXoiPzJPKTNpfmx9O3s/PiU1NUM5cHJJRUEqUnIlRiFDU2F9MitOVkZHc2Q0eCZhe1ZpdT9RSyx2Lk1Wak88cjwhekc7Tk16NGczMWFaUCo9Y1RDbVR0XVo7''@;'; put 'put ''aE05VDkpfXh+RWJXalp8ZmMrTHwuXWdEbDFLd0EpKVBJaj8+RjdGU3pCPTl6amdbdmNjQ18+OXgjfThJI0IhJVdML0wjODp6KCJRIkZtVCMsalNxSG5AU0p9MzAvQk40LHI1MF41dCRdaDsrLG9VL3dwWzJDU1o5cFR+RHVNTCVsO2ZiPyQlKXA8KDJoMnw9KWMkKnpnKG9RciwlaiVqQ19KVSVp''@;'; put 'put ''O0d6YE8kXnlvMGthWjdmNG5PM35GZ1RaT1hSXVdTRVFPIXZucVNXV0chRzNZcnBrMjs+U1lVW15VLjpKO3h3KHhQJUQiN350bVRJRnlpfEhkezlCa3dkREphKUhESXBiaGJqTzl1ODYvVDshdmB6NGZvMFJXc2NbeF0pK01mVlkuRiU4ZDhwQCkpamlGOGMrOj5JNDxZOipNaXYpTyZCZXlYeWt5''@;'; put 'put ''NldPeG1KYUJMS29HMUVIOUJAZlg/WnxzLH1VMERqP21HODtEIVN2QXs4Vl0zMWhPRVZ9R0wualJrM2BBISY0Ri8/P2F9Uk5SI20lZilIVywhWU42a18uaVNHSjZ9fG12NkZnO1dTVlhgSXwpeyY9WFlSbUo0dm1vNGtzZDI9ZElgdCFXPFhfIWJhZGZzaSo0PkB7VX4wX01qVntKN1tmeTtVTnk5''@;'; put 'put ''KmtSL3IuJDZ3QEM0NjQ4RmYiZF96PSwmJWNDZWM+SXZEKXdnVXR7VlptUyVsbXY3T0phclFJK19uOXdJN3h1Onp7WiRfTG57WXhVaXVOUj95PzFOJkEjPE4wMEVady4sXz9FSSR4S2JbX2RVMXFFQD5YaldmR3xzKSNrKE50OytiKWZ7NX4+KSg7W1NjZD52Sl01VUQoJWxAYjV2dm5sZG9jLltl''@;'; put 'put ''PitWVj8mWjY0aiM3PTJYP19bWzoqaVU4bXl4aVpjcDNkbGwkbSw8QElaLypiUytkRmNUZUpbKS4xP28hMVhxKHVnTiFWaThUeHQyJmsvSyR9dz1Ye2AmXXJTKG9SJUpRY3R1PHVreDpSVmxOXzhCWVZqRDdSPW5zX0QsayYrSkFdPnpQTD5zO1MqJkh+WmI1Pl1DOWg5LjlnMmt2TjJiY3xjWWxL''@;'; put 'put ''ZiVXK28mbiVNeShfWWEhfW00fVI1VjY2dzVISGdDQzA5dzJIbCs/a0lPeEVbVUJacTtwL2RpUlhENi4vWTQ6bnVVWyQoOTB6cj1kclV5W289bGdEIWV9Z3lPZ05LV1UmdEg9UTduWmtaYS9EQilyIS48UjFtPV4ySSMrSnZxcG94IUNnMDFWMmpMYFYvLkJRdX47am4rQXk3W3VGQSxAezkranJa''@;'; put 'put ''TVRYXW5IezlGLG8majBDa3lJanBZe3k4UG9xWHovLFBFRShoNE0mXmchc0JPXzxOPnVjOl88d3ZLMnwvfF4qMnYwYyVaa00pYjg8R2FKSChTcl1jeEVUZHNQVy4rczQkX2A9S3E9Wyl5cjZIc08rSGtpOTFfZ3tzIVQ0MDNNWDtAcSFNUUlIPE1tPT1lRl5NbiNlUGxTJFI/OC8jSDZEPnsrRDtq''@;'; put 'put ''PHpWQyVZR1lbYWpMdkVnbzxdLmk/OCVeZXgpIU06KywvcD5Ze35xe1pvPUpQPG5vRTRLOj9dPHBRZkZdSGRHbi5dU2RGdnpDPiR4fW5Pdnd9WkMxU3A7cWtOUChzdFIzQjJHVGQyIkZVW0Noa1o0d1pOUUJ7TXIwPDMjPmhQc3t3US5vOmBQVjhLK0l2QzE+QltCVk05NnJCUSIseVcrRF9MY0sl''@;'; put 'put ''VD5UYHo5eEQmUWpRTTlONztdYWBDMHUiRi8+RltmYkVEUnhgY081QWlqLlN1RWtsUExifjN2L05iSi86TGE1fi9JOTdRVzVAcihFTHpvPyQ4OlVRKE1uY28uW0hmLy91aTEoPXxxaSs0M2xec0tiIk9zRi5ZTH5WX20hK0hPQGBVTFFART8zK3dDRWREVmJvLiY9QWtJaURQR0x3b0EoT3FRYVt7''@;'; put 'put ''LyRGQG1Sd2tTZEJQc3lNcDE2ZlpwYyI8IztMUVQqKkguUigoUVhsMSJxIy5ja0dyYWhVQ1Q/bUVdZkAjWDY8JCpeN3hDTnMlOkw6VUBZUGo+ZlBCXVslSUdSWy5+ZGB+bHNULjgmeH5qRjwmYkFfaiV8c2VFSHBobl09Kz5GcT5Ad0BtJklMQ1BaQm56VjtNQmBgWzIvN3Eqay8yPEklK0xYKXZ5''@;'; put 'put ''JjFfdmQ3UkFvRHhrNFpGRywxVEJsMyx5K2l+OEk2S2hmQHd2X3NNP2BHVmMwPnhXZzVmS1QpcV0sK3d7SEpeSFtle0diR1pXWSh7MyFvKiUhIUM0YSFFTi4wNzs2TDJHOD9gQ3FRLEQmLkddQEJJJXVHNCY6InliTWBQMDR6QWgxXTRCczNWYn59JF5Mc0leUXg7bzkwaTY0dmVUXXVCXn5TZDJR''@;'; put 'put ''RUpTMEpGayopdShNVi5kK1k1OXYrRD1XRyNoKz0yXXNUKjNkK1VvOik2Ii4jISpEPU9GUUUjZm0vSzcsWyp1KT80YCkud2Q1V15dT2dVZGo/TF9IdjFufDYsfSRONDF2UzZjNEZRUFpbcE5PXXIsMXNOTy5mTmolblJzRnxfaC5sVH4pZFs9QzczMVtiL1tCc2YqXntAQTlgblV7RigucFI3K299''@;'; put 'put ''aUJlaGRXfHhvYkFbKFR3JSNfJldtPGM7bCR6bDhaY2JJan5zMnt+OHlEaVUiLEZ3X3s3SyQoUFo8WiI/Z3o3OSFiTzxXNk5fQH1tejYuOjtMfnhefU91cltHbHU0TkE8aCFdVUt1JWJoNDs4OzhUXklqak52YjA5IUZ7LG99ekR3RjpTfVNaIk4yIWZ8eVlfV1ZhbzY3N0Z3cHZkMzhQUHdFUy5p''@;'; put 'put ''WTVMVWIiXnlLYlBnTWciZi4wTCZQInZXaTBmRkkkNkdCVFY+cTV8MVdTVmF+cFB+M2xSRF52eVc7STtgMCJ8cHdvdyJ5Y0tCXmJWeDpPJV1TajNscENhSy4mN1lNXSVlJjk9WmpjIj47OGFbS3EyRlg3dHpadXFMVzhHd0R5ekA8bUFVb19ePSVsWzZuaGVaXVBPWll+bkBUOW81VHlGJGdbREp0''@;'; put 'put ''dTlaQD9NN0BddT4wVzBCI1dvcF5sJil4PVZTfTF5I0lmZU5QM1hmK2FAYFF5I2Q1OmNFeiJ3c0xUZ0dleiJzKlVUU0JdTituR1l5VmIocWNgbklzZiFiQEVpXztkOG9dcFNMKnlgbCM3emA0MW1NQSNHJWNQIWAxUDdUMTBWeTFHdSYqJnRRZVNAIXw6Klt8NkpGU2BpW25Pen5yaFcuVjVJWmBw''@;'; put 'put ''JldMOlIuVlJnQXpqSl4sJWdwRkhSdihMYVl6MyY5SjtzcCVSWHIqQUhtUyRdcyZkdnYmMWhzdEVEUGwwZVQ3VlBELkhvVFViYkNXfFU5MH4wOix3SzYrRn04XyVPNTx0TFBTRmNQcTozcXRwQn5wRUJDWCxnJFhgbXREfW5zdDk5c0BETixqTzhqKWx5QUdINWo4eGx1MEIuPU5RPkU4YVBbeUov''@;'; put 'put ''JU1wRFg5eygyVDgzeERRck04Sz1sT0o+d1Y9YDUpOTA9OTVFOHBIZjMucXhgcSxVL1ooZlNAJXhTPlM4a2Nlc3NxT3VfaTBXQD5GZiFkTV42QiRnIj1TYW0jPVR4Yi8oJERKPHl3ai4vRmxkTiV0UWdTZTt1JWdOcE1oPVgmWk59NU0ifjdzUmdZUz1EJF4pb2ZTfks2Zlc5Knp6PF56KTc9NGVh''@;'; put 'put ''Q0ksdClvUW9MaHlsfGBRXURzKUc7JD9IJV9CfHZnc3JYREQxK3BrU0p0JXxdJC9uL0VOJEhiRmgwN2J+Q2lIfEdScyNeYl5VfHVAdUlae3wlXnJha1Y3VGBuYG1+elsuP1cvUjFRI2B9ZSxST2NEe350UjdPbXxXZjVbd3UxNS5OeG09NF9UTVcxPCxJeUQ1MDZGU1d4JTcjS0FILHZjSHVlJXNA''@;'; put 'put ''KmkvXiRZNlppRW9YVl9LL3JwMG1NJWslYEdCMD9jdURAM3t6NTBoJEZnV04+QXg3ZEJ7VURJQltqWytFTVtUUTNYKmRuUEA7PWtdQiEhKC9GJls2W1lefjs5WnVhdipVW2xaMzlYa0JibX5rMSt1MEw3fSVSSSUuYHR0SWw5QmFJIV9JJnVOfn1RcV4vIjByeXlfTT0oMVpQYClQV31bS1ljYUpO''@;'; put 'put ''dTxHIVV9LEdieUYqfF9MQkcoKzZdVFhWXjg6RXddND5tbzJUZkIjMzZrIkdXPk09dTtmU35xeih4enRBW3VJRjcmOyFzPT04WldWOnU8Rko4UCJ1OVZKTFJTTHorT0leY29YXklhQ2R9VUVRLyIkKT53NlJFSjgxNzBhZ091amRbflMwa1lsb2w5UEZlYHZnfHc0Oj4qdFVVP1NndWFhOz9vRisw''@;'; put 'put ''UnF5SkYiSlZUO2AhM1YzZ3dgPT1DaWJwQnRfdSFtdUo8fDFQSDk0dEdiOmNmT3xdTU8lU0IiSj54NGsqWU9YXWJrWEAjYXdEaHRwWXNTfkphcEUmK3tRV0BpbFN4OjhWNyJLVXxhXX40REpbVmdUUntfR3o6V28qQGszampsa2c7JCR4UUlEIS9ZXkwoaFckc0F5JDxeYU9hS0JyImQhfTo9IUI6''@;'; put 'put ''bUhzPWs0WURrODhPIStZR2BxPlNjT0FKO3pqR2JmUW9RMmldb2VbcSMjKEVeQ294fUlvSXJZWjdEfTBtVk54M0BTZSopbjFVfCU5LkteUHYwMUNKOSRFQ3VKUytJVTVWfWFhcXxzImdMOTVbUT5SN0AqeFk0I01eNWtbVXkyJVQjTylpVkxpPkd0QEN9JVN9clA5K1hqNWZkLz8lN0lkeml6Pj5z''@;'; put 'put ''L2ZlZXhYRkNwYFlecSI9bWJCbSNhbXQ8fWpSLntgW2xbKjUzciI2Qk00cV9mdmFRQkRYe0hhVj89Mj5DTD01aDxzcUVnUiY0KWxRfX11c3xMTjVhO2t3YTpTblpzSjJPVlFfKG9WWWE6cHdkTl1wITR3OCRsI1FeTCxaUnZTOyxZYjghRiY8R282dlpwfVtoYjNzPGhMb0BQM0A+MWt9JCY+XiVk''@;'; put 'put ''OSZ9WGNqfHFmY2BIWXR5YENCbSZrRDhITmFYU29dbXcuMVFYNDVLWUJYUzYreDFONSxpIzRCXV9+Xk5UNH1+TW92ZjssaF8hbU1QMXgraTZxMFRxMzF9dSFwW1U0dVV4LyZzNUNEQGpLVVspLyUmUFo5cyNzOnY+QStlekw6ejwhUUZHZylfIUQxIitrOGd7ImB9dkE7X25XTzZxTjZ8KyNjclJw''@;'; put 'put ''VHhGPlE2VCReSnFDRD9qYnF4YThvXUJgWHA0USpwT1ZCKmhDY3FAdDhXeio+UHZiT09gb1o2bTBKJXBwSUFAczZUaVEySC48eSxFKyE9PkRKUUcmOClQXmY1SFNDK0EuLjZifnxiY2V9PXJlc0lbVCQ5Si9+fUBKWSlFXWpUN2VjelBoSVosI1pxV21pSmFFJW4lb09dcmlhaVt2Z1NhM2h4W1M3''@;'; put 'put ''RCEwNWhtdDY1L1kldlcqWHxxUD0uPUowMCFib1RtdXNscil4cUBzUDBKM108KjZQVjtGV1NsMiY5LzIrPC5kfGBBJWJnVjk8ZV9xOjBzanBKTXFPfWs4QylWU00qO0J8fU1IPyMhQGhMXmhwdnpaVVRkdmJbbTl3P1hafTBmQm9hKXB9dkQrJm8kMz4uQmE0MyV2M11rfX5ULEh7M15xPV5UKGJR''@;'; put 'put ''LyZyPnglcHB8W1dvdzl1byUzMDkoMHopOH05aS5JZnpUQWs9fWVaXk5qYjVAXnEhakJ6MExEOiIwcn5EWDxYSlZkbHVvQFtdc21uJkFgcnhBbzE/XmczUX5Ham07cEordTl0My4uZnJVRTlTKDhdMkZgLC9YR0hlckw3K0ZCUyh0N0A1cVJrYTZLWS54LlhMe0M5NW9QfnhdcXZtfEc9emlVN3p1''@;'; put 'put ''NSY1JTR3L0QmdU9uT0pqdWtFbHFmaWdHUWFiUk9Zd2lEOXFgWj4qIXhAcl1MeC9mW3xhdGhCMUkpVFBIT1lqeUR6JDImVS4qMDExZnFaT0s0JWNVMHNRRUBwQD5TRUp0I01JKEUsS0crYCptJHh6NHZATGQ5UXJxP1tuZGcrKiNhUmBtTndUWGg5aVRLLnJbaSEzeCs+Wz8wLlU5TnVrMV0xXTtM''@;'; put 'put ''THxOPzoxcEVacG1XITUmV31FfFIiciVAejhQMUA/KDhOQkFdZz9GIiNCYzsmNTc2SUQ4P3JUVXBOI3oxaX01JTlOWHxCOyZERz8zXSZtPjV8P1Y0diVML1dLKENLbFgiJWcjKnMyeD9UdEpJPl54V2NwLDc9MVZuciVtWTFJaUN8MEI0TjRfQ0U7VmpxUENTS0J3YmcrQ0Qpfi9MfF46b19pUyRX''@;'; put 'put ''fFBCMStVZ1skKUBgXURgLylzcXtvai9pXl4+YT1wVztoK0pZTDVCYEhKTE8qITxWRWZqRWE5KyIrYmE5TWA8ZFdyUDE3X2trVzFuNE4+OyhCdWQuYmhTPkJtTm9BTH4wPy5xRlgxb2o5PyY1MSN4L2JFSk9NPCEqWFJJP2FaZkRxZUM3LGdnP3cwa2QhIXJpbyMoVDVHUVdBekUvdmoxIT0vQ203''@;'; put 'put ''Z1cvVHhfSzBjRjFpLF5xQm50TkQyZTF3Nlk9Mi5RcC42LFNQYjBuX0RncCN0InlRSG9pZDc4YEc9MnhddVsiIVJ8LFVFVkg6QTs3dEVmUXNoOj4pME1vST9PTzM7NzBfbiZpXnEwaiYxYF1HVz1jJnA9R2RdUDdtIUswaWs3QSFROkVRKE1iSHV2TVM3ZkR2cXIiM0QhW3JGfXpbLmJ9ejM5Wz06''@;'; put 'put ''cWZLPlVAWEtya0RJelhsM0FnU3Frd3I4ek8rMnVdelhwTHZmeWEiZFBiXXJXOzNbTkFZbFBhPER2RXp9bWUzckc0U108IXBidzQiN3YxdnIsMC81a0AjOkI0TWtmWG08Nk1OWGojLFgmVmFlaElHRT9EW3dYUk9MZF1CdDxQUEdpIU5OU3hjQUpNVGpBNyVuYzl9cWR9RFVePkYlfXZTY1pALEw1''@;'; put 'put ''NVAiUHFwTkx4Y0dLTnxvaC5HVnViIS8vNVNacFlfQGsod04pbnRuZGNhdFJeblhVMjs4RD8iQEl1JCtkXllTPltXWjU7SG9eezEjWixjVnhXUnMlJTxodkxnJGh0MU8sIy9+cm9lL3QsPndGSGtCJUd6MXM8bGlefjVpOkVTRkdCbHUjfSVXd3B1VUtsVS5HZj1YcSVAalskemI/cjVUSj5aWlpd''@;'; put 'put ''bWJdODxJKlImQnZfKFh0alFeO0dAWWY9USgoZGh2IyZnMmU0W1gzXWdPLDh1KWR8LnZsby8jQmoiMDdFK0d7dShgenB+T0d4L19ndSw3aGssISxnWEQkXTdQMEpiP0NZNkwkW0tiVnouSTU/L2kuRzppMFpsWU80UUh4SWE7dlZRM0BbdXEkI3R+ejUxTz02Kns4czZPIiFTaDo0ejRXQ0hydzRd''@;'; put 'put ''SiF1VWRAXWlJaGlHNWouXUQ4MXpFQFp4NFojZiN4YGQ5SFJdNEklZ2omeT0uZzZmIktCTT5ZMCUmLl9icUZFcyleRT9aMDwkM1tnSUo/a0l7dF1Pe2FJbEZYSVt3a3ZreHhUKUhKVjQxdD1lUG8iRztoP3F6ViVxJk18KVdPaHAyNU5QRG5LSGIsKiwlOmdbPWh4S18oZjIyMHJYdUIzfjQ1STxt''@;'; put 'put ''bWpTe0N9dGBCPmd8ei4lXk1lKiReWDFgK0IvKXRmKjtyTk1+KihjPisxSlJsSyNERz06eSx1Vj1RaD1LYDBHbUw6YHMzVXB6OklBeWckP0s9TGRdLj10L1dmMmQkVG5xXytQWXcwb2kuVll3KWcvdT1jQEFvNEw3TnFFUjBjVXYrYm07UlMpTyY6W2ooOjZGfFU4L3JOTU53RjlPX1tmViIrPGQ+''@;'; put 'put ''Z0okOEQ6RjNPfFNDNiVnXjxdVjYleW4+bXRDQkpEPTs9OTxTSCV0VmAhfVlwQmRMcjpGYjlmVTdmQjtTYSRqKVtYcmdBNFpMcjx7fmBlXlFEY2taKGF9aVZDKjdTJUN6RmhNOmt6OSFvOlNRYEZqanp2aSxoM1llMHxJZmQ2RVZwInEmP2p+NUssTkpEOWs4YUFkXSJ2X3UuU2VwfVAoQFZmNkku''@;'; put 'put ''fTZuMmF5enFuJC9pV0pXcjkhJTJ7ZVJCcGwydXMrbktaZyJJTzAqWzt2RXxDMlJ7d29FP3Rte1crMTUxcUtmWkl8ZGwleTswL14zQ0ErXkZQKEQ6QjlrXn41d0FvInZ4W2dsNnRzUzovc3J5PU9nbFdaSStqNEVaZStSUnEpMzl4V2VlMU0jPFZHYVRPak8uUm5sSD4+Pz9WVzlnPEYwWmgqU0tk''@;'; put 'put ''QmtuLy5jLmY+ImI3SDl3aVs9SSZJJHxtbl9UZ0hzfEN3MUBiQURlY3lAS2E/dkkwZlp7WFohZUleKTlKMXN+d3o2cHYqR2VebmdqWWokfktFJGF2P1QlYjNdS0twfSFjYUhTbTB6VFZqWTsiaTt3ND9OW1NlfDZhS1pbcHRYbG9raVR1NEFbKmtzeVpyaD1YTHFeNT5ba2dEJGx7TUk0TDI7Pnw3''@;'; put 'put ''MTRgZXcmS2QjQS9KWTxlOTAqKGw2JT1pemR2QTQ0e3JVVTNtbU5ZNFdHYUt2LDtmQUBdX1hVRHhNL013UEFvXit5WSVua1liSmlAVWBBRyZYQG8/SSpWW0drfmBnKW55PD9ybltDQ101PWplOSZ7PitbIUhNJmQsO05gaHoweSp+YmJ4S19LfS9NIVEqYnk3PWhrelhlNnQ3WE9GY35hJjM/LDZY''@;'; put 'put ''QEhZcV1jKVYpZ1lqNVNwfF1kQnpheCw4WSxpWkljQlo+MXg4P1VGY2pMeTliR3wvVkkoUDZqbXxjWGlCa0BLL35pTT17VTIkZl1bbjR7WylgXzE1MGRBRnd7cVkiOTByWVJPPGtdaEkucEAqcT5jOjAlYDkzUU87JlY8cnU/KEE9RENAYmBGTlRSNUpAelk8bG5uUllHMjdDS0MvTiY8O1cuWCZr''@;'; put 'put ''alFxcStuZ2JHIkdkS0dVfSFsNlFfT1pgJkdiVj5kZSNqaWJhUFlMWmV1NXcxRF5PO3opeCFRXTlRMyw5Vmo0QTQ6M0hvM2oyOyZnW3RZZE5wQGlmaDEkSmJgc0xdUCV1cjIsVyZMfkE3L15QUSZ3eWZoMFl+bl9iX0liKV1EVzJHUzM7QjYwOyN6dDU0W3d+JE9PJnYySjh7NSImOFE/bWIvZG9l''@;'; put 'put ''fHxvfjAlfTlMO3AxOCZ3WjcxMi5pQVd2WCRIXWNKTDZhPDt5dG1CamBCQ1JJOzpXQ2RLOzYsVXJjTkAwJUtwYl9PXnh9JVhaW0QxRkU+R0x6dSokM31NZTVjbEZWNUxhNToucGFuejRscnhPfFpeKkMjOWNWNEk6aT8qNnFNUlBrUl4ickdxbWF4RU1jIjZDS35JMjRxODRCaHcrW25+W3ZtO0xX''@;'; put 'put ''ZENOYUk9ISN6PXo5dHt1RDY/ezZEU01xW2VxenAjKWNWZFEjVTVRLj52OlsrfkZdRiVFQFFkdV1oRWIseFI1QCwyQFdBUD9oQ2FMamtybGs4PD5vYHZORjN4cXFbJmJiOlFdbHlFZWtZWGQ2aVooK002d20uRXAsdX1wZyxSRllbOFs5a3lLfH1ydDt8cHV9eCNeZy47XyxGX0NmTXw+PEltRyMz''@;'; put 'put ''diQmTjRHPWEwaV5LZCp5QkJWZCtSIWsyIXpwaj58dTp2RnxGdCk8JCU6Xk0oMCxKRSxxLm9zQnpGKFgrNUxaaWhRZCtkKDBAVkZ0bjxuQl94ZEBWR3Q4Q2QwJVJUOW9mUXZlO3RfaEhoNmU5WyZCYlM6NSZZJnF4Rn5LSThQU1lIRnZzJDZDSlJvKX4kbU5ZN0EhUDhkNTRQLE4hNyY6dDA8K3U0''@;'; put 'put ''VGpkNSZIOCssQjIxUCVvREs6ZHkkSHs1U0pya2h6NTlrYyxbbChtKVVCaSMsaU8kUUNvRGcsVTdDJi8pfmFXcixbdUZbS1NFYGxvZTp4bGg0dCpFSU4jLD4hZT81MTIiOClnXU0ufGZ4TlAoLlYyeCVebnk5SHw3aXM+aHF7LzFiVURhTVdfKDwrKy5kRWNlR0AkOXA3enRjKER5e2VYaykrQXdH''@;'; put 'put ''KUw3JU9uPjgudXplNHtNSDw8KHdvRUxzb0NfZmNiVXopZVp8Xnx2X0RxYihUJmBvYWl2ejg5JXp8KTJ8QktYUlhhOykzWj1Ea3N9alRlWmZuOjcwZCQkP2s7Ml8uIUlCSmkjdVRxVXNte1dJYV9XWn4+WXFKUi9TfVFtOiZiYFJoPlhBckFPQXpBYUR0KjJUejBOUHk7dzNwIlhNW1RoM1I5cDlA''@;'; put 'put ''REdES1U/LCNHflpoMj5LMGU1aWd8UnlfZTx1V15xPVdOYEVmT0AyKCFgeFcyelQ2cCx5bzJTN3MmMV1JYlFqdT5NfkosYXB6a2JXM0ZqYk55NFVwS3I0V1ZqcmMwW0FZbVtKQ0k0a1t2UzwsNSREN1sxKikxd1IyfUI9Mm9MPldaaiFVZDE5di4jcCksS2YhZyNRXiRQMjY0RXVOR2Qian1kMiwk''@;'; put 'put ''dnRZYSpMcVhpfHNzRXI9SWJ9YSw3WUkjTCZSfTdMWHBtPkxwSXVee2M4QmFqKn1xcWddI3tvYnt0dCliN3V3PjtpbmA5YGZ6Nlc1bzlQUjhbQVFjUnJZKyF6Pjp8VWtYPGA9YE5mNzRUOn5aTGJzWXVEOXFWU0NrUi9zN2kqNEclNXI2fFokT05bL2M6YTF1WGZpPU5jIXJrdDxLKjNFXmRsOmg5''@;'; put 'put ''M2NtX0pmN104M3UpaDsrfj54aytqU2VYNk5zelElVTdWZ3s6PXR3dERAWzF7WC8mfC9GbktJOipEd1lZUkJlU35xcSpsMCZ2RyE7bChPRXtjcWhdJVA5TkpYVm9JM1BeaV1aZEJwJmFhdW5LcnBOPEIpSUVaNnZIKHI4XUp7bFhVRUZ+c2F3aSxpTzJvd3x2JCxqaG5zTGlqeHhaO11PO2xnYTlf''@;'; put 'put ''O0VDcG9YPDMxNG8kQTl5V15ib0JbdzlwfWlecil1bXUxRU1LWVdsZGR1S2QqSywoYSpJSj9AIU54aWw8XT5jZGUhaHYoXSNROGZfOGQ+aXRAPHcjJH18PEJlU3g1cyMvez87dHJgYTo3ME44I1txSTdWazowenlzVHYsSChiOEtwK0ZGQCo9YkN6KT9AKTFranh1aHo8bHxwV3N2Vmt5OiE1cjNM''@;'; put 'put ''L01AbndxcVZlRmU8Mz89cVR5VWZuaV56bU1jUltTXkx5JUBHQ1VwZFs1Qk9eelYyUl0yJXZ8YkQ6c2QvTXBGdCYseDRoQGx7Y1s5VmxpbkZOOGZ+LFRLN3VMbj17VEIzYzl6M09nO0xQbipXb1dZJSIjS347emtFYjswO3J3PSg+akJ9KTY6aD5Ze3c+Tnl8QXBgO3xXY1N5YnNFdjZCOjFPa19m''@;'; put 'put ''JXFCUFZldV9ZK2pFP11nd3cxRyh6PStqclF9dTMoV0lWNEVbY1MhSm5OMXJuRThDOyZHelN9M2pOaypHV1FAemRLQndYZiFPLHYsQ247W18pJShLJV9RO0shQ24qfCE7XjFTbixOOlZxfiUoZyVVSnEpakUwTkpdZmVbVWk7VjNOeUpScihVPy8pISI+UH1wK0xpU1hHTjRJfH0uMzosZHFUPCpm''@;'; put 'put ''WDtWL19JaTMuKiR0V2xfYzpqX0NPNChCRGFwPWssT35tQXlMITM6KmojQk5ZLC9+ZWgocnQ1SC9Ccjx9TzA4TXdyKGooWWM7RSthbHNOXy8yWiNEYztkfU09SlhVcTBTaThfK2wlWFR7PSF7QiZkPmt3P0k6dzwxR0R7WkVPVmxHd15ZbEkqfD9EenNPQ2t7VGJFTiw4KUg0VyZGP2NuIk1CK0ds''@;'; put 'put ''JlpabGRYZiU1Y30hfE8iOlVxe2YzOkZafU19JFJtc1dYWlIzPEJ4X2x7SH5zb2RGaX52SltpUkdKJj94PHB1SW5xanZPZ1BWWGw6OEB6WkNOO1VpLF1vbUtOYmokRXkufWc4Ni8jKEYmIl4yT0tQNU85dUlRbzs8LmkjO3l0NFs7SSlUekU+fTNvIypqcWxAeHVtNnFnSHxWKjxaLE03TmBeam9S''@;'; put 'put ''VitMIV1OZVF5dDsiNS9KMSZSSjJoaS5LV1BZeHZHTCNEZT9lUEA8RzI0Z2YwfWx5YDA/d31kTSNQdnZZI2QlOClzQzRIc0QySyN3biFFZnk9NnNAbiVjU309KngsOCp9cF8+bCw+Q14qOH1rKD4vPj5sWjNdbHZ3a1RkdCljbG53L19uZnRndnYoRTlsVzhPRjtIbExQeGhFZX5CTURjaSRkSSJg''@;'; put 'put ''cHs6LFojKFFXWU9eLz8kNlNBXnpOYSI8KFVBLDx9WlduL0ghajM9THt9eXM8bm4qTGIkeH16VzVSPVUwSE8wLCoxZ1BsN31PS31XJiImR0xgT0lpczNTcWRNRjBSdSt3Z3FrL241eTchPk9NZDg4PVRAZShdXzNaZTpnZX00U2xML2AreWtgS0w0OjR8cWRSXXMjdSFUNTNjcDA/Y0UxO3xObDlM''@;'; put 'put ''Lix8ZjRjeXVgKltQYG0pYn1mT3FAaS43Ll1PR0FIMzR5P2Ildl9TS3whYE1nOC4mXSZ4KiNuW1loUyVVQz44JkVhQV9QTnVIfDh9JnR4dFtwPXxWdi9nU3Q2VmA0STdkfSQpITlGPmVTbCs6TF8sciRjO2FQWjt6Z3o5RXVzdnwsNkF4X1ElZE4hWFdPa1laKDAzZkJhUSE+WTZDWXJsTnBPOjNg''@;'; put 'put ''bT53QFhNeGIvQ104ZDNxWXhGOXhyaCh1KS8yN1s3e25zKyxFLyFLNXJUNElUSDg2RzdqcDEpOmlrJEB8VD5USEhNNm0rXnBqYlpve3p5clYwZDUxOjZDUGJkW3A9UTw2Q346ZHpZRH17ayFFSUJVPFhBMjc4PEM+cGFkZWw8ZUp8OEUlck5udFMsUkN5dWlYVjlTIl5yczp2Lz1RZm1tWTN6M3dm''@;'; put 'put ''SCNXJVFjTWk8QE9SSmpuP2ZMck5ESk5NW0R5fEg7JkVwWHpySygwSSh0S2JkIXF5Wn4iQ35hMk1UMkg3KnxLP0EkJUBqOmcxM0hWeiwqTlpFPWoqTHdpMz9hdUdPSyZAbmNDT0NEeiw+VT9hVT1BWCpzRVlDMClDcV8sWWN0bVtWX1RXa1Q8fnI3VWNKOUg5Zi5taTdfamdVMGF5LzdTKHpwWjpY''@;'; put 'put ''RT4hQCY2NEh4MmtNYC5AMndCL0ElRW4xbyY+YG8zcVRRYXVyIjdwdD9waGhJWyRvQWVyQDE2fW4+Kk1pfmQxWX02PHJWeWJ+KCYkN2ZIPVYlMj98cXsqV10wTEMxMlUzZTIxaTYsKGJdJGA2fDolfHhZYSxYV2sxb1E0dE83OSNfRHJMKipCMnEpYFNSXklgRDc6S306N2E3LkhQUD1GdGs5Lmpf''@;'; put 'put ''WGNHNDEjRz9ze1IlaXNbaXZLeFgxfSw+bzlpNWgqM0lDVVp7NUBWMmlQKD9IN2tPUD9VYzZbUDoiJWBscVF9XmRMMEA4aFd8KCNCN0d0QEUhSDZNZDp7cXApUUZtJWlgMlc6cUNCKWhONCZ+LD0uWT9DOHE1XSwvT0U0QH5BVEQzUkVSalN+RV5fTz56T2RrUV1rU0JCXXV3LyFpT1Jgcnt4NCsi''@;'; put 'put ''XzhzJGtyXm9JUn44akB1b3R7IkNNX0wmKUY6ZGFwSmldI35DQEt5MXRLXmF2JjVNQllZISZaSE1NeG10eHtZOTxFamVBI0tTUzJTfkhAKWJUI0lqbTFHS1Q2WGZ4UVJuME1hO25sX0RkJHlHPWl8NDN6ekBaM1h3SmFQOyFROUJ+V0BYdmB5Z1VbRFR8JU09fVhdQ1l2fi93Z1EubUIqfnROPSJX''@;'; put 'put ''OXV4RjRaI3xaWjMhY29iWnhjMEl8KE1kYnhhJCxYPmk4ZylIUkd8VWBwXk8uPjRhfE0+aTtvSksva2c8YEdeQHlabXJgfkouJC9IMTwjYEo/I0J7KSNsLDluZmZ1R1oyTkdlVSo4bDc7VG5kVSZ3dTBfTU80VlFzPG5zPjIsU28sKGF+dklFbGEoeVNMXnBWJWRANCpPL11xRyUxSWB6O0J6Tk8j''@;'; put 'put ''MiFRfll9YzI5YSRve3AjYChmZ29OLk9Zb11ZPHFIdUtFRHZoLFB4MkchYGBaPDhbZ0Z0TCo3UWFrQi5TIiU/RGt0MUt3Iy8/O2lKNDchMWRYYVVtciJ0IXhfXyFZOzJWUitNOnJnNDtfMyk1KUcvIT5qN2RJOkxebGw+b2YheG4kVzZjI0hgfCxqcE1SQmdteyYhQUx7fGF2WVRJb1orNGUzU34o''@;'; put 'put ''YT5IMGIiOmRjRSxtWk5wKE0hdz82cD5kdUN2VCQqPU97e0gwVkxnR2A0UXBIMz18XTwlbmF6KkglVWBoV35IPWd0dkZeLF5oSD9NciM0IWU+QSxwYSlMRVQ3UGZySS84b2thM3k+TSIvWGh3UVF+ejpYczxEQ3w+JEhQKnI7U2tnVW5aRWpDOyxvMyFid2ZmXW85UEc6U2tTJnRIR3o8amdUSEI5''@;'; put 'put ''WTQwOCszSntKIzR+ME8zY1pfWj54JSx+R2hGOTA/Mz5KSDZXSlVeK01FbF1xYjxeYXJVfSF3PCs/UXdLcDc0fVY1YGBLOWFiKW8wREdhXjQoe0xFUWpdWG1gcl0wYEN+NWFRdyk+USkqcWMlXkR1Jl9iKzNvbFg5QzJiRlFpTml3bXl3Z3spUmpNQ3QoQCM5InY7Wj9vVz8rd3NUeFsxVG5eRzhr''@;'; put 'put ''V0RxNUx+UChpQiYrQiI0T1hNZUthRjUrWCsxITJyWUslfjJJLFY4XXNbYitOSyFGT2YuMUBfYF5WJVJoe2IoNGguekV+I1FHPDBfdSUqLGNwTTwuJkJuVX1PK1ROYiokK2VDTGBCRjJ+c0F2QFMlXWpuUXBZUnd3fSU9PFc5YjhITTVQcV9qW1h0RzN0MjozJUcyeWBqb2JkPmhoeVE/X0lORG00''@;'; put 'put ''dzdeYHEqKWhjRXdmLGRLaStKQHlnOmRMSkcmIkgmXytRYXhzPzdEcjhuKm9HVXpQMXpocHImfFMiIyZYSCJsYU0wYzdIVSR8ZUJgOUh7PmJyQHpRbGtGbDMmcHwjPDhLM0Q2NCY8TXYsWVBIOnsyJVNtcl4xVTpseWlYVC99PldrJER5NmhaRDlecjBJbGw8T1RPQCg3Y2pHdmR3cnU2WilaPEtN''@;'; put 'put ''MDxwWmpCaiFWajxZZzk5Zk9xYm9TdVRYezEqflttYjIjWnsvbTRBJFErLklIUG5ffGFdRjNgUkxNQSh3Q2NSfSlYNlspM0xIIzs8X0A1OiF4TFord2o0byFrTnIqNlJwe1prR0E4IjhhcjopZ0hgKjoldl91fDddeTV2NGo0aVVrfmp4UylVUiFOQEI9Ym87ZklwaVJTNk1ubzMvdTNBVXNCTGgz''@;'; put 'put ''b3xoUCxWWHJrJUVaVSomUj9ZRCxCKUlmRVljS3pbOSFKV2FEKWYhI2ttbGllQVlAYixQMH5VaEx3WDVTXkJoZz1USyJQJVZtalQiZDt6W1J2TSEvcGBKbkVQUz5LemsrcnpCaCliPXNEIUNXTUVKPWhzcHNJX1lAVGIjNUVrUHB3fEZpTWdITkBeJEFJUCVmL3MyJi5USUJUXTkoYUsrPDwja3Q6''@;'; put 'put ''Jn5aL3lYK2xgfjNPNFpWRFYxYH1yQVFNOGpCU2tNYDRAV0Fxd3NwX3RLdlBWPypONmIhL251Tis4RS8kV0xSdTRoK2hoY3ZVeUQ1eGdzfGFEaX5dbzNWRyFGUm95TkJsZndZOGhqcHk7T3I1VHxVR0VRYH5HKylaSUNeSGJRUGs1SHpEW0tHVWw6O3pSSkkjeDM+NltpXTUxK0FTKmZ0ZyFGczlz''@;'; put 'put ''fE50ZC9+eD4qT3xNPiZuLEptOXZfKld9SWElKEFeV1owTjx3Qz4zdj4jYURPQCFPaXxudmA1WCZOdj4uLzZAJURxIihyMVdFck5jeEo1M2VSaTxkcFhCQl07aEI5JEAufGokcWNHPUZLKDdILn1KaDR8PSpqI054OWBmdVc6bX5rYHEsa1R4V1tdRDAoY0oueUBDV0M+Ty8vTUI+IVE1Pl1Ta3V0''@;'; put 'put ''MGlxWHVOYT1fWUBrKnI5Y0JiJnJ2JixqcSFIQE0jUjkiNk5ASkVGR0pba1MzeWMyVE97fkYkRFcjc3xRL350R1NUZH5WNDhQV0l3eU96JkYvQndJWHxrNEBKKDg8UEspOylXNWg7X1NeWzx4amMxXSlqJUdGaUg6TUkwfWV5bDJdQHImcGEpMXIrSD4meShoMjEmJjA6MihoO1hlSk9UbE9tM3sp''@;'; put 'put ''R0x0KiF+YEtqVHZYP2VqVkE9cn1bZ0c+NSxSbExENklsbywuUlZUXkRaLGRwQVBAMS5UcnQwSW8raip8Ly8uRUdqMmA5cD1sbUQiP3pbWkZXN1laPHBzb0hIOntoYFB9S093KygoeTBAeSE6VntkLHRSTS42QSM9Q1lbSXRyfHsqTCx+M2p1QyJNdXFYbWRpPiJUSiJGRSNQaXF7JHxyc2UjdHFy''@;'; put 'put ''VltbZ3RhJGxkWHp7diZabXxOam1FOWh3Wm9wTDYofSQ4a1M2QlJWK2phZ19uXSEoXXEvW1YmW0VgekFfTjRwJG1eXzxdPnIwcDxVXT93Lk9UeGV5KitaZGd4RXFpVypFeEk7X1BudlI7SG5oUSlULlk8PithNk58YkUqaGJfcDolekAoTk0rIWZseSt9WT5vWVRDRUxdTiolVD4maVVpTzE9U3R5''@;'; put 'put ''TSh+a2V1KSJ0ISMhc15+QHAubmMhKWdVYlUuIkV0dnBhal0pNColVTgkKlk0RzgwN0IjdVl9IzoqZTRvYGB0LzFMLGEyJTk8IUM6bi89UGFlenYqcDk1TCwwQHtkeHRfdUdXSH0rc1FWPHY7eEgwMDp0LEU/Sm5dflh2PHxbWl1UbEJMUjR6PytsKTNGXSgsJlZjYnh8e3dQVTRLbF5tXThieWtl''@;'; put 'put ''T0csZVNZbnJ8On08PGNhTGN6Ung2TnJdRHAiO34mU0Y2cV11ejxaLzFqOT10aElyeFdkTi83OnNgRikqQnt1QlpwfChYT1c+Pkh9S2BYPlthaCF9OHAmbkhNVn1aYV8wSnhvZ2w2a2NMSSNOM0RncSFkMF9IIyp7REc0PURHcjJeLFkxJTdZTVZ2ZEJ2Pk0iYDAiNGxyOGl9I09ZdVdzd2k9cSlN''@;'; put 'put ''V2lJcT58d1gyRFY4V0FyOFNPOmdjdFZqdzlPLEZ6UCEjNjxQRF5sSHM0QFEsamgobnRmI1p1L2lJPSo3LEN6UlhpSjU7QSUuPCJ+UXVwYSY6WjpKc2YvLiQiNjVGRUkkPFZha1JJQyM0PUg8JnBWQHVuPSIlQGpjWkpwJCYvfikuTDEkWyxTWFNXRFB2UlFzTTpZTWwiJHZHeW1gKFYiI105cCQ0''@;'; put 'put ''SX5NLzY6KThdbT48bUtLRVNRWz4wKHQmdSNlaTJtdi5jeFd5VXp4SnduTjg7KTEvO09na3VLR1lYRk9DNmgye311eHglR0VgXzwicF9CTWZpXSlXe0Ujd0pMcWxNK0lSZVN5aEBmITxpQzpOeWhwamlNMXZML1ZidVluWyZ7VlM5QyF9V30+PDZ4NWx7cm17bzd6V3VUOXE4RXxnKkpibnRuRlk2''@;'; put 'put ''OCNxWDhsRzhsQX51YXE4Lj9dZGs0YUVFRk9oZURdUjMqYSlOR055WW15eEk8cDFpcCI3OXlYJD10USxPelkpd2FuJVI/alIwNXRIY2F8PXs+UzNyYW1PajIieHVyMTh8YjVfNFpOQl92WiFuci9jNzl5ODxEZCoqNDk3SGZHQ1tySWplKUo5YHZlImQqdWllZ0ImVl8zKihtKW9XWEJuKTUuVGRJ''@;'; put 'put ''P35DJXlDbmZtJEcpV3o9YVlzPVVLMjhyP1dze3RNNkk6UCVAMjVvbWBZKlksWk86fGNkZT5RXmpmKkxdaEw2VTd3ImRnbjlbL1VUTDpSV0IsdnZ2MFNhdF08TFFhQl40MDhhNWhycmBnUiRuQCw7ZkUlX0Z6SjJfV0llQ096WktieGZWTVN5dityLm9MIWM1Ml9zKFY2K1haR1dpN1tOPUEvXUgr''@;'; put 'put ''TTsyX0hbOVdzejRxImclWkJTd0M2KGE/bVhyRTdXVT1ePFEoTnZ0UD1BRmpfJU1jS3d2KHU8cGNBXnY3XnovbEVsLzNmOzFOciV8InQhKl00ODI1X2ZeOTlXZipodEIrQ0JDcTx0YmE2TCg8Lz9MI0FMaGloJXEvInF3KShLRGlfVEE+MmIwO3czQHB+TTdNYU0uLF56X0Z0eCkvU21ucEo9JkY1''@;'; put 'put ''TS9XO2d4ViIqIjRHNGBqbj44VWYye2RrWzFmdjJ3Ij18Vyl0ISUyIWpCQVpTVTg2PCM2KiRnPyFzP3tUbkNjXXo7REtweH04azg3V2xlK3VEQmBqc0B3cnNZTFJiWH1lRD1jWmdEcVBHLn4vQmVNMSt1cjdwTDwvOl1tTGp1eDJEQ1RbQ0gsOy43PUEsYj8lM1piQDlCJS9uaD5RXSl1OV9hJVlL''@;'; put 'put ''UT58MzFZc3xMOEJLMms6WVZDO2BBaiFtInVqSnQlbD48RCRIfDR8YkViSiF9cyEjRllxJkF2KGt6ZD5NKUFEd1k+cWxfbTtHTT4+Kl8hSSVZJTx8TW9uLkpIVCRTeTt7aFByP04uaEEqQWt3SW1VelBSN2FYS0Nxc18mWG4wMiJFcWlILlVCOD12ZSpXMDBjJjEqY0FHUyw9WGQ1PzAoMHwqezcl''@;'; put 'put ''QG5kXihdMUVHbmFGZ3lrNnxmXltXcSVWT1U/aG5McWM3KFA0elNrJjErIVtoSmo6bGRdRGdaPTluKiRRfCY5OWcleE4xOzhYdSk2fChjUng0SG1kPEZmaWVWPF80O3RrRHNNQClyIkV0YkpoT2d3JH1LR1R1MGBrMy5yT2M5UT0kVHxNL0lkanRQam5ufnQ0IkVqNlchMzAqbFZQVlhXNGAjUVRg''@;'; put 'put ''VSpkO3tGMHVkSmhVPFtzLjNZMkJdY1J3JCRgSlImbnZNZXAsSTdQNF0yK1l3OihpRT9OY11zbn1kV0l0anVRI3FtKmZVWFNXb3NeVFYxPipncHVfZnMwZiZfJTRYKj92ZHpxMl9yJXVXUWM/ZlB+XUZ3PWtTbjRsWG4sIk5kSUAseFEsP19haiEuKCksbyJzPzR5V187JEo5JipkPSNKYlJmQ24w''@;'; put 'put ''YzQpWWpaTUoiVF5aWFY6NHoza3tlME8/SzFIdU1YOjN+WjM+bi47Xlc/Inoodihic3JvYFEpaUlLdTRbQTI9LCVHbGhfME1oNmRSZW96YDdMT0tVM012SjwudlNlbXQlKishVHs9Wmt1cDJFSSZmam4yJXJPX05HeSEsMV13UDtVLzE1V3hkNU19JWY2K3BtWnhqeWR+WTdLJihsKDtKTXolPyVU''@;'; put 'put ''MXRRZExoektRbGc3XnhsPVthfGhuXXRzXSlgaW9wQ25vKF1ITSUhPTBLdys4RDx+O1AqJXopXmxAX3k2VkVeP0NFJFZddEVCZVojKmd8KUk2SDRjOi5FOXglKyhFb1hrVVUuQ283QXpdK2NQY2MkX1VISkdNUUZ+fnJVajZSJjpbakAuTH5jK1tqUC9Kez1kRVo7eyEuNU5rKy8uOVN1PVtuL3lj''@;'; put 'put ''eSxeYk5Ddz8sTFZSdyVzJXlKS21EcURNNWVSR20rZ29XW0RZRj5BUSQsOmIycUdUQyh9WWV0VEtSVS4xZEg6ckNlQWFDeCkxUE0uSm9zMG4+PThvQTxSeGc7PSU2OFl8JGR2LEsqKGZzbmU2QURMMDtOQ1YpXT51QHViR31AMz1JYE5RbjdQdnssaF17MXR4KWF0N3hLeD8oeGQsUlllVTRne1Jl''@;'; put 'put ''dT0saltVOS8lM102cTNYQExidXNjM3c7ZTQ3ZlpQdFFxMz14NzRhUWd8UmJtOV8jJi8/NUVWOkE8WCZES3gra3FxTTNKIVJRNW03LGlMWEgmUzJrQ1t+KTVKNDQ4Kl9XKiZSaDchWUxnYGBuWG8rdmZTMm9YRGsoaml5PHMudkU5PmJZNzNmOSwqM2J9SWVuSlpkcCpUI0wyVyRiZGdtTm5lMi5j''@;'; put 'put ''Lz5zKyNJKSwrXmdzITxzRCpnTTZ2WXpBfEtTfHRgOyZpe2h4eXowcX55eioyfmY0W3QvW1BVP35dM1BpXkIzI21DPzFMMFhtPjlbUDE+MEkqdUdMUW83Zz1PUSlkL2JlQCRwdztET0kyPSUucD92Mj91e3toZXgwaTpKYjM6cnZmSz1VeC8hKkZJZW0kOixCcmF6JUZucmpHPlVdWHMmSGUkIzNr''@;'; put 'put ''bDV7MWxta35EKEJYPUIwVHttaENGJHREZEBGb2Umc0laPm8/QVE4S0RhbFR0K35XYUNDWXNmPmUkOUhUbmAmRlJfRGJpZ0ZveDw3JGlRMiYofVNbUGxmO0VMcXQ9Inw/WDEiXy9uPW1pZF85dClBQ3Bjb2hJKVk9YkRUMUBqMSRsOVAobmtLLjBCJXtCIlgoJVIxZH5VOE1oKmMsXjhVdjJ4KiJH''@;'; put 'put ''QDMjVmosTFZTYk5jKHdZbXRvQWkqK0MqKFNFbT8jPVkwWnlCIkVQMDFSQTs8eDRKQjtuWCwiWSpiUEQmTlJQfTlEOlpqXzJEWDk3K0hpIzRmbmE1aW17dlBYJHJtI21NdGIxI1EqNEFUbWo8RExjSXFke3lPcHhvKkF0L2piUUVvO2F3b0trTjhZb3ROVihUKXJWeFFWIzpxPCpvNjdwKWNrKk1b''@;'; put 'put ''c1BTS0dmRWhucUE3OWVuaXspJGAsKTkvVmxjbiRfYDguXjJnbiRaW1RROTFRPER8M1l9VHVLVkAkfnZiU011YltEWDFuZSkxdmYrXTtIfDIjKCpkUG5bRHRRJktOSFUxZWJALlpwdXZqJllDK1lJZWpuKGBvLiNveFhzTTVRTntaOWFZa3sjMlN2ZFZ+WDV3LndJcW01XyY/SllrfSlxbjB+dnx+''@;'; put 'put ''LEY5L2pETFo6LztqdE1iPDZufCZaL0ZCI0lANW9bR21FVXxrLCxhZiRxfCpCQnJYUV9UdCEvU3luWVJBPHUmRUhDLyxFVDEkSipAVlBRSEY1ZT9dT3s/JCxBWlE/bixra2N2SyNwRG9CZkQxWmw5ayVwIytbO1N9Wl8mU2MjbGkxJTxrOEhRMlJ4diZYVE1MQ21BSmw4MDc1O0dJRm17VU1hOHtJ''@;'; put 'put ''XTBkaixQO1UvT0VNRVlhZSZaPCVWdHM9Jld1RG1iPWR5e0p5c2lQPWw2STUjZmw3NU9mTiRpOCwsfkxOYEI8SDlDcVhgdUp1MiZVIyxZVlVURHJDYVBOJFZQcWp7XUNaeUM7YWU2fFReKEN2eyhvS250c3xkZnkpXltuNiRZVTVdU3Rhe0JqaVFkfEhbQmQ8O1EuW1N8X1BXIXwpdj1hb29XUWE9''@;'; put 'put ''X2UsTnQsZDVmXWwlJkBDZ0xzJVY+ez80VHBvKzklcCg3dWpeemZiTTphQEh0dz5wNXFZfktLWl8ocnRKZFFGRil5S11kSUFPdDw6e1ovRDd2VEFbakd7RyJNPEZtVVE/P3IrXXc/aCk6fjdmWjUyY1cxIXxwKUFlX2U/ekMmLyo7eTw6UUlZTVQ+c2leKlVKTlU0dFIqL1ZEM0tOOEtYKnhPNk5E''@;'; put 'put ''eWk1ZFoydkwxNis5dDlaJUwzaUBkUHZSdDEqYWs6fU9eeEwpWExHbVkxJSlhODFgbn05PHNiWjB6UCEyPGUmS1FhYTFCaHRsM2YxdEE5Iy5rJEppbEwjL1BqKC5gWFRhVys8Mld2XzFQPiFKTiU8fClqQTkjXTp5LGlZImE2bSJOcFV1LFkiQHhoO0pJR2pdI2dYQ1plO31xOmxnfD1DSWllZDwl''@;'; put 'put ''dUhBPywpUj5ONTtQdlAybFY3WUVhTmxZPTtBSzI6UlkofXYxVzJaQn1uTUgoZGo0e3pXU09xT0I9IT4mUnZwX3BTQGd9fGB1NkZTOEc8PCFuMm1KKE8jNV55ZmV9cGZofjo8bGtMSzBpWlpXJnc/ZSoia2c9b3tEMnBRdyJVTzFdRnV4fVUlV0EzcSFKflBXcjlGPz9qdCo3Wlg3JThRR3lwUy5h''@;'; put 'put ''c1F8L0h1VWRHUDdBMEdVfVh3JkJkMUo3UiRWemxSbChwb1h5PlpCTW1DUH5dYlZXPDtXMTM1QCw2aXI/Z1ZsXnVEVVdVPVRkcnxqK0JdLzYuPF9sRnZyNVd2MkZLREoyRSFucWJnYWlDeEFkUVNRZkUyUyFCZUVdeStOblk6VHV4JWlXNlppMGRRL0kxaUUrdkJIc0xDLERyIUphLzZdRzszP1Fg''@;'; put 'put ''MG4hNjlXdVJSRDBqKFN5Oz5pXUJQW2pNKSt1ViJQcDArVlNCUCV+KG13MlpATGE2NS9jNjlIMyF+Pm8pSnhxfTdHYFprLGpAezR2U2J5YSZ8aiJgMmQkXnldWDoodyJNb21NenZ6Yk0zQzJ7QlhAYnEmRl1GLm5TdzxLWHROeU9EVmJ4WndTSF1uT2A2ISlRImxTbFckNWAwVXglY3F1PUB5I3dV''@;'; put 'put ''YU0+QnIsUUJTT0NbYGBCQztySWxnSGRxdCkmOzFfREM8SWlaMSZeMXs0YWYyRlg3QUNRTnpIKWpJVEYhTHFvTyh1KkFWXUhaN01OeDtPPDEhVDx6eSZNWTxLblkwR0w9I3FJRTljOEF6Uk0vPSQoIlM2VklzeEBnYEM1QjdiVix2JDlDVEo3c343ZWoyTC44WXc8I1tjZTsqUVVCfVhhektxUTtM''@;'; put 'put ''OFckfG1qZSxXRU9GKDIrRnFZRkZzc3VoSyM6ODFXL2g0Kj5Ue31pYmJKSWIjPFNHYkt5L3kjZGx7fXx1VzxwKX5BWVpsYj07QGk6OHI3JlQ/cD9LYWQkYHcqMVh8ak5FJWouSD9zMzNfQ0RAVlomIVlaR1VCNzNldSF0dT1rUC9XQk1afjpSW3YqYT4zOktsZ1BXVmU0ZDFBPTxkWHw4QkcoQlVM''@;'; put 'put ''b3Z6L1ssSFM+cFpfMlJhXm5ofStaRjoxK0M9OH4hTGpyNU1xVm1OITAxUzNlaV56X2leVkxxKVYkSGooPS5JPXpZPHw5VCxhWlY/Pmo8T3NXbHk9JEtjMzJQVS9lLHBMfVF7cyl7dFt2RjNKLn4qKWxhZytYb0ZqQ01KeVpVUE97UlRmVVA9SUhXNnIwaC9MK2V1TnVqaCpZeGA/VzR4bFIwVntD''@;'; put 'put ''O3g1OmYoIjttclRyYl8+PUE7ZD9yUVdFXl93Xm8wR1tufiQ+KzttdFZ3Tj1qLHdtPy4wISJjWjM4OlNqPVB4VEVQc287YkNuVkY7UF5PQFdKKGlUe3FPanVJMlNRb3lWXzRGQXpsd1dpel40fjJIcUdXR3tiSXF1Yz58RT1+UWolOlhYcj8iSWYxITpGan1GWUluO1g7MVR+NkNrU3NWXWNhPF08''@;'; put 'put ''fCZQNkh8WFp+MkJAaCQrfT9ObThERDMlYDcrO2h+I0ZbblsoSTQ/TVllbEcuNlhVYGdSI2dgfFs6Q2MlSVB9NzNpbEUmdTRBOEt8NHBiOFRDd2J+cFM/NTtsezx3S11pdyVVOkAuQFssS306NENFTHV0ei8zV3ldKzBqXlZRcDc/W1FENUY/OFlnZmd9QW1dNj4pUjlOa3s2PFVpYDtUUnoiPk5R''@;'; put 'put ''Mm1kQlVpKlhqUG1oWzVfOUd5SHwrd2crWy4sXTBKUlJTRyg1USZ7Oz5rX3JqOjxwbGx4P2A4czFwTWpUOjVydzxpKltrPzRKZXlUOjlXKSh8VW89ciZee0FlSz8/RiJyNiw1XyZ+eU5lTEZiSnJ+JUtDYVQqPkdTNE15QmU8VCt7e2A+IjRSREksYFN1RiIxW0x5XXspLjRIP0loJFNjOmckNEM9''@;'; put 'put ''ZFlFdDt8dEk5REwpX0V6PU0uWXRoY2U9KjchNXUvT1AiW29vMjRCbi59eWh1cXdzOj9wNTwhPzpVYzV0O3gheGo3TGNWanpVSjk7NEB7eXI9N2x5TEZ0YGg9eDNqXUBueUtIVHE8YX07OEtNX0xGXywufDtTUTAoWFg7RiV0QilbTyZpMHF8fXVxUGJMJTRmcWw9Wl1saiI5bF02fmxFS3RYd2NG''@;'; put 'put ''fjgwOWlwUSViM0l1fkZAI3E5XnAsQCVTa15TbGUrfDJ+ey5Aelp8aSY4LCttJnVjcVJuUVhRW31RQW4wO1d0KDB2ZGBuQ2xWRzczS3FlPCM8LmR0bTVvcERefjYwbXBVdW5peUdmb0xGM0V0eUZpOz9uMFE3fDVgfVY3al02bz5CdC9MMDRZOVNDYEhGQlVdeXIjRl9gQUJ7JUt7aTN5RERney9T''@;'; put 'put ''SnNDfG4/bkYhfVN2NEFLOFNebmMqUmNEMyJ0THgpLE8zKmpUMV8/NkZKRXIzZjJybiozUWFfYmFSRi5wMmpEIWRJMWZXIzhhSGg1U05VWSQyWXc7L2FtVEA7VD9qa1d+biNCYypMSUJDXll5JEBabkhlM1FAKz58dEp1YlI+UzxIWTV5YjUsIV8vdGczV1I1M25wQkJncGZ5e0I3I1JlJSMiSTQ0''@;'; put 'put ''I1hlWFtCdVciRjVYOitWazZzWUsjO2FjWWhpNyJbemFCR2tRV2B3U3BDZ0hEa0g/aSNCZHdxeixxflF0OmVFR2hFcXA2OFg2YWUqal5AMXQ4alJ3cTNadikiYCtYe11kXTttMFczRCJnS11GO2lUUEhQMlJJa2s5WGJ2TyUqfUlGSS98T0gsVGVsRz1WP1I8TlFdYXRjRjwrZX44Ljo4c0AhNWU9''@;'; put 'put ''b3ZRWDJpcXl8Uy5XOSkzU11YeXZrcVAwLmV0ekVkI2NkKVk9bGh6Vn4kc29SXk5rdFNHYmRSdDtMbUQ9ZXZjaEQyTGhXXTJJXnBXI0A8PDgsUX44TH43LFBRXTlxIk5LKFchRWBoOighITYxcElLbDxhcls5RjI3NV1YaURYOVVqfmBtIVd3en1YOlk6Pm54d2NIbjA/ayxrVD00e2BBVGBAWyFm''@;'; put 'put ''YngqKXg7LiVoa3UvPGhWe1QvaEddYjRnQXBDMmBMW0dVR21MdykydmxsM3dHdnxSK2E0JVNuOkhGWypTdHw/ODBHIk1ZPmZ7JnNJNE94T3dAbVlrfCx7QjdmZ3EmZHZOdVMmI2d+NjRiUDFHJG9kMVdVU2FTNlVueGM8dVJRbzIlI3thJVdjNGdFOW1RdEdyUWh7ZXx6Z19RLDwudmFqW0o1WFBA''@;'; put 'put ''T3IrQ15iO1JYRSwldj95TDQkdU8mZ0p2PTo/IVRGLndOQGNIMkJLUy9ueT9oIyNZUVtme2ssSG0hWmhiYytPdENrdTc/VmBlSV1RRVIsWSJ5bT8qSHNWSXxuWDZdcVgoRFQ6XzVfQ2V9N3gmV091dC9ocjQpUnlpPjtdKlJAYHh8fUZzN14vZkNVLiRQQChwcjNxbW5YPmtSZDB0XWY9eE58cUNy''@;'; put 'put ''bmt9WysjdXNOLlNgNjVlMyRfP201aiNkME0zRFQ2VmF7QmtRYnp1I1NYOzpMYkElYTE9Pl0sNUxWOEgxd246Y31OSVJnUnFISWYrJVs5KlR+WX1iMUZYRXshRypBb1B0NSlVWUtFTEVBP0lyI3QjJEdDUyY2PCk3OyVZREdYXzVSWFhMNTpUOzB8ZXxze2VKVCgzR10kamJjOV4/VVBVbWo7Z2do''@;'; put 'put ''P0E8Imx1Q2NWNl09S0d7I2JUe3EoRkIvUEs7JEF+TyE9NDpLOTgkZUQyYHZFMl9Cbz0qMSpCVT00bjEhdjBjeEkxNitpKiVHXUhkaUg9ciwsTz1LVVUkMmVLdEtecm1qT11kT0d0eCYkSFMiWHI9S2U+JCNSe2JsWSlpNVlISn1kaFo7QSRzdmE3XWZJM1UvWmwjK1Z9endsdTkwbmhsXWlXa2ZH''@;'; put 'put ''PU8mITdVdGZ1cGZRNUhwSFome0lHYTJwX2AzbngqT2daOFk/NTRkQ293R2Y3RWNgZTolQC8kKmFVcDs9b2dDcVU4b1MzQUlUMj9WUjQ3Yns2TXQlT3okd1F4bkAxKUx4Xz1Zb0pLJi9pPXIwZHgueGQ2T1lVJkB2PGVhY3Q/UmR1Pmg1O2hPWzNBQ2xqbVsoIyplP2pEX1JleGpxRWNPUnEoOyIj''@;'; put 'put ''PnBdNTlLcURhcy5IRl0odGI4PyRrdTk7MS9icnkmKFUoaiVYYih9T3xbUFEmSTYsMzgkV2ldenhzfitwPD4+cyx5dzI9aj17O0ZVbXd8JUlxdU9zWCpFPjxZRnhLXUREPWg5cz1EcXNRZzkjUHtAaSNmfUYsVTg/VUVsSURkW2h5LHxzU2ArIyJEWVV8Vj14KyZrMGFXdU5zSHI4NUtZcz9ScCtG''@;'; put 'put ''WnxbaSlOOVhxYmVoamQqWlc8VVA0YDV4Nk5tSD13JVtbL2xybGtifV1gYltWKjsjKWhlYVAlKGldb1ZQV31oKXJtcyJpfkVZJHpObnZgWkpwdUtVWEg0W1QyPm04aU10TmImfSJGUDA9O1E/Ok9FLztbKEQoXWUyYE9BMSZYU2UlezxwNztSZEV1eGdBcj8+c1RlJTowPlZjKFZTWnJIWHAoRnxb''@;'; put 'put ''e3duVz5fe1hNITQzNiZtbGt2KkU0Ils4ITE8Wk1wfWMwKktEXlg9WWMlcU5ZaGNebD1DYTl0OzMmUkBBT0FzKl4rM3BWI2BoRyk9Yl0pQSFJPFJXb1QwZVV4b0VYV0s4ci55UkJiPlJYfi5yMzckM2NFZUY7In5yTWZIPDdTSC5OJipdfUxDb200cFZOKntVUWlPQyROV3tJWl85bERZZDZyUXI1''@;'; put 'put ''U015IjJydlR+USEwS2lVKkdgb3Y4eCEiWUYlakV7RF1Gc1hFSDRKeGdTJXQ+fW9hM09ndkhAbU42SzBIVU1QTHssNXEsK1FiRj5NMV9MTldVLzVrRT1WaU8qeVdFbnJQPCVzV0MlWGV2WFRkV2B1MHRlXVElYUR9fnIpRWosankySWV4dGVkKDtMW2FkMXplJldEYCxzRFtqeFFRSGFsOCt8KFZg''@;'; put 'put ''PHJRUiZDSXhfc0deWjttXXJ3fnF6VVZrWEtPUUBUdUhUbDFYSHshXStjM35gd3h4SF1KSnVvNyg4RSRlflcxb2JVfEE7YnttXThGOU1sNDt8MVIhMFVVPz9nRHU4Onp1UmRieVRtLC5hOCE7Yz45bzk1K09PVWJJPjg2Ll1uVHJxVCMyQF59PWJDYW5eW1FEWkE4YSN6ZldbJTQ/TX15TkBSYmd5''@;'; put 'put ''TD0haE1iKkhjUy8+fkMrXT4oSHdpU009UTw6a1tDTXI8OyVqWUVtaGRWeVg4UntJd095YmpZLiFHNDk3WUVZKWhuazV6RyJtK3FBT3VGKyVwKGtsfHghQ0dTNyIvMzBHRUtrUEZYRUVKVSxOckgxbTxqRUdPIiNGUUVWTy5sWXRrWEBkJE9SblBBbmBTdnFFSCZtNlI2OnlUOGdJSnhHRmBHZUBk''@;'; put 'put ''ZXJQOmIobipmNmArYzNbbyZMRlJLNHUkaW9PTnhLfV1NaXhtSn5NMX4sYSl3TiowbUUyQygvZUA7Z1Vvem1ZYHc0fm1ELmpua3BPem0+bWo9UEw9RCViNis7cnU0QypuL3xeME8pJGImKlpuQGFIKWB2VzdmVSV6KVYlYDVCbDsxeStybyl0UnBGNDw6Yj87eiJMJilbN11iTWZUVE1HNiwySGY4''@;'; put 'put ''P1g5WGl6PG1rO1pYKkdhK09abCFDSy97PWZsWX1xSzYrQm1SZSx7KDRzaV1XLGBzMEtIY2VnKFRoM09xTUQxLGUuSUVbPmpWYEAqbz10TFAjb0JjRFohdjB1XS5lUkVfZ2wlWX0oR193aWohdXMuOyg+OWIxRlg/I1l6YGliQTRrWkpOO147dD0mXVl6ImFuV3pxQ0hdU25HITclQHwjP2dUcENg''@;'; put 'put ''LzQrSVp2cyQ0Vngkby5+UVpaLEJudUo1fVk2M2p4dHIqcS5DMkp4ZWpIKyU2L3FWaXpFP3thdlc9cFJfRW5IeSxZL1goZ3M1RFhRa15eOikiT2hoY14zbil1bX5SWkk+MD1GSUI/Lzo0b1s0UmxLUUQ/UjtvSS5SYHVSajNVWGwldX4keksqMVArRn1zI315cVZVXUNfQE9JY2lfTzdMYVV4NVlm''@;'; put 'put ''dyoqVTBGJmducGwycVFSdl9rSGtWJGVheE86YTdDdD4udlEkKjZ9NjBVaCU4Pko8LzpVL1tRNFUmUy9veTUxVWlbN15CN1hnUjN4OylTfCs1VjtdUHBlZn15RTloQz5MRltjPDgxOjZ+eS9mcU9RZW14W25baWNqS29JayspTjYyYnkmQmZWVWZIdksoKG9eSnBgUmNsTCxrWGpQJDpRb2kmWWlv''@;'; put 'put ''SjUiImZtd00zYG9KZX16XTptTV0/RnVnJGZsRip5ViZmYyQiPj47eXhLRWBzYTkvKUF3cnk8ZzhERSw4S0tde1pNdHA5KnYhX2hOSnM6Ul1eQT8mQndyOyJER25oUlgmOT11cj05eTFDUE85ZWlQeVhCTUZZQXMmXiVyPyMwNj44dzBxfk9eJEQzcUVFUzt+blIrODQiPz51b0VTVl5gNFB1WEdU''@;'; put 'put ''Vmpkb2g5OFo8I3YzayxraT5od2k7MXtGJm9xPlQqTF1RYi4rQHFBRmt+Y3o7eCt2Ikw/PTJAYSFMYHZ0JigqY3ZpR2FhcXhyejleM0Z7YTpVU3RhKUl2NHBwTyR0fnpKVCgpOClWXS90ODY1Ni9JMDZIXUcrfiQ7WypSQThWPzBeWFhhb1V2fnElW1szeXBWfDVMfUZULytzWDxDanRRRmk9YUdB''@;'; put 'put ''Y244PkpES1pETSlXUiFwbG5ELjdWNkkvb20lWUgpQjtZV3cvZ194QVZpUVBeNlJYdklEUl5mUG95SC50Uj5GNnUuOlVqPHlFYVIjRFcqUnRxe3EuOHU9P01NT2V+S1NnY3opNGV1JGQlXiRJTlhDRiUuSS5EcXg7VHBGVE9yUyMrLEcrX0UzPlorciFdNE1XLj11XjhPZTRXPS9RPURaeCU8b09y''@;'; put 'put ''SWRCKS9pISwxK2Y3U2A2b2JgV0l2TEVLbmJSWEcxIV1rQjlbK0l0RlQ/JWB5TG5vYXJIanBQJD5MbV9jWXd1SmJieHpiNXZPQFVFQzZwWW9nJmcoIT5TY1tLRHVlQSNdXkhXSHo+OnIrbV0uTF45bDQ/NXl+NU08alRvIypPdHRrJXlUZyUwfnw5TlIjWis0QlBZZjZ8SDlvR2BrayNXM3pCInlJ''@;'; put 'put ''XUhBaXkyQnVVSCEkI15IV150UDFLVDBXIlBSSSkrRDA7Y0VbKXVDWGhiJFNMPHpNK2xXKUF3eGwlay5TS3lCRCk/UnZNUnp5am5NMGM9TV8rT0kvPkRwfDpYIUl9Wz1TVFFyezV4JSMsaDJQSnl5JT5Bc0lxb0ciZyIlVSg0WkxmTFgqSmQ6ZHVQUmFKdyRFTDxjIk9ESm9AUDxtLzNITShXQGNZ''@;'; put 'put ''MlE5fStpZSRjeyQsZHUjI25ReXJJP2JsSkRRKip5NjZuQWBYTDgqKTNPK10+bisheSRRWkk3eUhCYDkrIUZSJGFxWlhrUFpVLlttNzxpeXVxRnM7dD5GWms4elI3NyM5Kk9yPFptKTxSTlRMZ1ZQQ21OWyRzfFk1b1ZUMDB8S2xDOWJqPixoKzIhRjFvZztMMjNDdGMsaSt3RCVRekh5YShZUjUu''@;'; put 'put ''JCV+WyZjYD05NG0wI3ZsKnVVR2RiMVtKK2JAW2R1bCQyPWB1JlIhWXRwWC9GZ0JuNjVXVXdSTSpfWVBadThlQn4hKTIwQjQ1OFtgWjwzVVZEZThEXl1VQittRms2YHAlUHQ8ImdtIU9ldihYa2k1d3B5I25UcCY8KEBdVUp1cXpkKy9UX2k+fjYkXmFeWi4/TjNUOV91PyloaDVEa289eVFMaFpU''@;'; put 'put ''aHRqYlZKLDQkdiViYTpuRmJHdSY9NSNtcitFdUVncVVjaDpoVHQ5OCUyMXpAXS5lR3hVJk40TGhAWE9NazdRQkVhcGppUCh8ZDlVRm04ZF58a118Y2N7dHpfRGN7NFpxdSVIfXZtWSYzJkpycil4XyRWNCYsfXM2XzJtU2htfUpMRi5pJE9bZV5nLix1UEJ5anBIXWJeRzJXS0NhQVByMG1vMHBj''@;'; put 'put ''V2pRIV9+T1Q4a2kyKmY1Ik9TOWA2S3JKRUFTSFZNQCtDalQjYFRCb3k4Ok9daGl9b3E0a1pmLHArWUtkNWZ8Wk5lLEFBRy5qKHQ4V11lRyxXOyVNSTI2clBAJHtwT2xuPXNhOV09eDFzK2xDYV5MSFpYWjd1cFYzNSVbYG8mMl9QfjpSITJnWms+fDMqTTR8W2t7Nys2cHdvIlRRZDwlTl1uOkRb''@;'; put 'put ''NlckUD9XLDlrXTVbT3Z1QGciYiIpaXYoQEskNDZIbHVzKH5sMUh3VywvLy4yS2lQOUNsdn1ROlNfX3VKOyo+e31ofT9lL3JBSSs4QWQxSmZFdTx2LzNBdUlJOCt8WiN1MXREXUdXS0RDdWA4bm5rS19+W2lFaE0+JiM5OU42TztHZkU6YUNFWDp2QlFZWWwjPlc+eDw6UVo2TGlbL0J3Rns5Q1VH''@;'; put 'put ''S3tidCZHZFJSMUtbIT9LTyNxcDMxTSpLcT1UMDJCZm9XUDZfdnZJdkw1SVUlLitTaD88PSVuX2dDcHtNX1syZ0xpfUxHRmgrLmJVYTNLRmIvWmRhRS9HMEF2PnpHe0t3QTB1YzUwT01PT3dEfUV6IzsiQTk8OTttNEJrMXA+RmFPSjkpWmowYWVpZFk+PSx5SHRgS113YSpybVUjJXNPIzYjM1J+''@;'; put 'put ''XTBedDJxRXVJdShqTDtjKjxHRmImZSguW301PVppRXg+NkhKdnd0MUUmVl1bV0U8fEZeN19JUSVeRDJwfUhdTTEyRjMoaj4sfXJse1FLZCUmOzlkN0hXUUwyJmVpOWZAcVVKTzhmeVgpTFBrdWNESUYsVzFZTU5DQ0h7JCYyKjM9bCsjTz1PO19wNSNaRVBWWFdicH11XXF2Q2Mqd0QjImVVYG1C''@;'; put 'put ''clR7WklKMD9gP09AS3hOI3ZwY0gwQlRGL0tyan1+OkFgeH5Zfn09Ol1WRHhJJV1ydXI6KTNvZHUrcnN0X1N2TmJ9e1J+dF0qfDVmJGs/dWJYPkc8WHFTQFJDTE5+KSNYJSJnP2p0bHxzXW4sKEJvUiwmajo5dkR3RDxoYn0/aGRSeDgqbDBZWktecHFdTHR1aVMsKSZfem59JV8lXS5ROytjUElK''@;'; put 'put ''JUFlPndJMH5KN3ZyY0lYM0BDNS9MZDcoS1VwRzdHY1AlYTlAQHJ8dng6ciM4TksvU0pfeSVxcT9XYS5dM2t6JmRodGJ+VVpwT2hdO0dvbj9ocG9Ib3Y1ekQmd0AkTlBQXXYkdHx3OzVoM3VgYmFXdW0/ckUxRFcoYFMwZj88Vlh7dkFGW195RjNOMGw4ZFd6cC8yU1A5WFhMJUIwYS4/eDs8W2dt''@;'; put 'put ''Xk46JStVI3I3NlJLOSRPbUdvfHN+OE0qUk0jMUB5Pm8iZTpUNk9tUlpXWntINWEjRnlnP3ZLRy5PbUJAe3csc35WLzRKOWdKWGwvejA4NXRRbEIwQzwucWxhbyFdLmZCdjxnVUAuT2BpJDJIYjFjRm54SC4zLCgsbnNTOCp9Yk40VEcjOyl7S3Y9SHB0azI/e0tZOkNYJDlQKk1pJE5IIWZBYEkh''@;'; put 'put ''VG9GOW5YI25RKmIkQkY0P30uQTwoVVR1PGdyaX1wODc/WWN0QDptVGpVRFteNVFQazJyUGRsWGJXaEJteWluajg2YVBTdVBrMW5WVD5jdmZAOjkyO0N2Mz5iJi9yKGl0JEYqfGYmY31+e1pVP0Y4dlIldCNAWHhRQDBGXWRHekI+P2tTXS82ZFJ3TzsyV3BAPVkkbjwkUlojVn5gYjBFVzxFcSJa''@;'; put 'put ''UlpybyFrU0tnWCFvKVA0Ylo6Q0xsW1oqVnM7QU9yQzxDVUhxRnw8cCYqaGg7QXlLOitHc284WytSfUw+XzlTIzNya0djXXBwYGQpcVh6VXxfPyNmPypTPnkuYSQmZihwMXxad0c4UUl2LCVgO2JAT2tMMDBJYE0ue1RdOyNzMERJQDpUZkBXRlFxPVJHWGJEKz9jYkJ3elp5YiFEK3d1VmFnUlBC''@;'; put 'put ''VHhBQyplY3dfX2dkIzJ9Wj1lWT01PFJsI2AufSlHTmdeTDMxMHlBdzw5UnkoTjgrTyZKJE9WWzhOZCtyVll9Mzo6Km9DRlBYUmRyTXVDbjdhPyJYT3NdRUpWamJfRT5OfWYzMntUKUowdD14MWkvYVEyNDg+QSJTXjpNUSVBN2xDczFebURTQnE1X0tpZ29hLCJ7SEB8alFAS099IjJ9Q3tMdS5V''@;'; put 'put ''fjt2TSVGYHM/SENdW0d5ezIrd2w/TjZIQzUuaWNofS5WfH41M2l+ckJJI0BdOXUrRXI0VUM5RFA9fGRMUX50cDJkWG5IcGB8SCJ4TDovckR1a2FJeG5MOmg3a2NDMm9oXXIofEZifHFDXywuXVQqTG1wNzYvSntaJl41WUdRNElsNTgib0t5Vl58OWdge3hHfWdtUGJkOHV+UVVFb24kL3gsWkZ+''@;'; put 'put ''Y0RkKkpPXz81ITM4YUR1a3xaKjNNSGBXXyhnd29uZXBWdillcmM8b1ViVSpZayxffiZFUHReSXJnKTdxSmtfbCI7JTg2O1B1IVlFVUY6PzV0Qyl9VT92blNUMG1bUEllfXRNZm9FKnYvMHNAT2x3Znk6UH45TVs7Z29OXTA5cDluNWpAdlEhXzlVIXBrVHV7VVosPDpnanBLKlAqbUsxNmF6PXVK''@;'; put 'put ''dkYjIU5jOWV2b3xQe11rcHRRe3diRGlVVis4NzFxVHNTanNmKEsuKXZHRzAhbDVzPThMQEM7OmlmMEhaYUQ3SV0+bFEjaWZ2SjxHKSFlRXBJbW9sRXt0bzFdRV8vaHJ5eXl0PT4raV9LWXElTEVqRXEuR08/P1l0OTp+ZHYjdDdLI2o1MFp9QlJqUWElOTFBSjYjRHVLcTlSQmxRfFtnQls7aXNg''@;'; put 'put ''PjZ4W2Q/Q0k1PzA1bmlCWk4kNDRba09lIjtNdl1Mb20qbH5BY0xnOl92NE9Xb34veSE2Kk4wW0lDa0g+SUQqKGpDfnVEdGwvWE9TTXhVU0RnSCZQYkllbEBUWzJxLzR0TU9qdiJLL1JNUFF7ZjdvYnJiKUZKRDRYZXw/bj83TzthS2xMVEJ2OH0mYE5bLG8/RXtSSmEyNG9La3khXjNBaiNzd3ZT''@;'; put 'put ''QiFrQTNeQDA/MGNTNW9le1A+SVptLGdkYDdrVVAiaX1MXnpFZERjeXI+TnZ5Qzh0RXB7Ki9vXnxDfHVdSHkrVyN4QmFPY0htSndPUTxVd3ZwSVpoaXMkTk9TLF14N1lNemA9OHV7dGddb2FsXTRedThfZiM7cDdYQVB4WSlNMyljY140czJKYUpNKFBSXnxWMk8qUUo2UDZNc2xgalF+cTRNe3M5''@;'; put 'put ''fDdsM3h9VjRrcnQ0d0BZK2Q6d3Y+dUczfEEuITMsaG9gXnJsVG5eOyI9dmVhRVpXRjlJS3NsZWxYa29KWExWWSY9WC84I2YjLEo6fUhfSVpGQmh8PzFteFBwViwjfn5GMGFPOnlSWH1KcVtaLCE7VnQ1Sk5gbmV9KmwzdXVhd1R7JlM8S14/ZzBbP2NwZyNPLihFTkVfPFgzdXZ3JlVgUUtabW84''@;'; put 'put ''OiQxP2h1ZnMuTCxralEpUiNFKy9GekYyJEdhMylTYHlLYmMoaVd7OUwwN2xLSHdEUTUpeXI5UVhgfmVxayZ0NWZ4NXsqQShaTEUqPElHL0JLODtCeGJvR0dwY2lrZHIudTlmWygqPW53emZ2Z2V1ak5LbDxYIjk1bS51PEx9OzNmMFU2T3lMIk4lKUVkbFcmSix6PDpxQjZIQU9uNTkue1FMMlpO''@;'; put 'put ''M0UsV0Veb2F1bmw7I0UmaTAmQjMoXndAQnhuR11RSkRVPXE7PnRgIlA+N1s9X0kzdzZeTHMvaUpSUCUqWzlaPH07RV5xPXtoWiF1XSlKI2k5JHRzbkdWM0BqV2Bsb1tMYzQzeHleN0pBbVp9WHxQSSFrQW9Ja2pLMEJkIVJdTyZYQnEsKHddPn06OTJBP2VrJTJzWHE6MWpDM0EibHcrZCRmX2NJ''@;'; put 'put ''SzFhMylOJkk8Qi89JD92bDUsQkx1U245TGA+LzRrRDhYIl9HfnNmRmZ5UEl2a0ZkKCZKOj1aJTZJZFBOUlMmOlZJR2I3R2QkTmZzUEtuRnouW3tUYT9FSnM+QnM3cFIpTHt7Kyx+O35ZLFtPRjFFWHssSVt0eDhNME5taEZOIUxZKyE2fVQhUiFmcEt+THs3XV11VXxxd0gsUiRxXywkRTNDQXNz''@;'; put 'put ''MWQmNTY6WXIhai80QzN5Q05CNWJXJk9KTWx3PC8vO0k0Im09NHpkIXdoXjFMMnsrcFglQTI3W3QrczRONHlMOzJLSVdpX3ZyRXA0PFchOW5JIV9HMVJkenskcSFaJCg1V1BKVzE8NzRKWVk+VV5ELDZsOUc1Uksua1hEdDgrTkp+QlJoJmpZWVlMdC40TUlBcSNEMWxCdDEkLzZ0REx8dTlFamEu''@;'; put 'put ''c0x5NW5oNT5BTX56WjNhNDR8aX5ueXE5PDUyU0UlIWw7QF98aioqR3w+UW9+Tm0mWlV9OjFJQ1slcnshRXBCXzhjL0xxe3E0SFhIM04vPG89IltaSTpAR3g0LDNwWXc8bENQdTdbJlE1Nio5NnZjIjlUP25qcl55MUxVXmIqUSguQX00XjAmUE1EO15KSzVFRmNNNUYiIlhqLnklOVIlL1kwdD8s''@;'; put 'put ''VyRATHxqWiNXJnlifjkxUjhbMGlIQXJHR3R3O1RNejFCSCFKOiE3aX1Yd1h7UWg2UkVsTWFzSExzbUgwWT8iay9TO2lgOU4wWk5CbXBoVSpZTSEvPW9zSn5ZU25RO2R2Yk5ESzBhe3p9QDdSMitnPDlIZDg6XmQ3SD44ZV8iO018OExqP1VgNklTUW5AUHpOMTx5M15iNSlmak1RajZIUj1YM198''@;'; put 'put ''MVN9fkM2eD1YdEIreSY6OWk2ekFARHc9Z0gpPGFSb0NvSXAiMG5jcGtNYl1URzkyU3UmWDVoTipnUFFJK01IMUN4aTEzUVcuV140cmRBTD8jO3d5VHg9UHdfWEZEP2EsKypOVDBUd3ZxQyoofU9ZPGdzNF15clZYZm9OfS58M0k/Q1EhUHNwRyNLYW9RNkwjVXR8KkZ5cyQ/QkdNKUFYcGEmZT5E''@;'; put 'put ''dShfbCpGQmY/fEMqKHlYT2BNcWIpPFMzVExbX18+MypLNVt0TiJhKjJLV3xtMH1FP341VnlNbnl3KjdLcD0zSmhYYFkmYFk9bjdCSF1rNDx7KmFvMCtOXVFlR0lQLl9lTCMoU15TaVJ9aWVaWiN0b1VTclhVVFYjL3phKElHL25vZUtNMz9XOGdJZ1QjfWJ8VE1md1JBV2Z0cF1DZ2U5TFRUITc6''@;'; put 'put ''VkhTSmN1eVYjei9fRVFrMmBaI2FxaEBFSyJxbF1UfD9ZbSw0V1h4SVtscWI9aFtzV3drIWhjTFskSiUlPVtEZmUsfWRYNFU/OG8je0FiJkltVFF5NkRnZVppfHNMTV8xZ08rOzdMd1R1cDNhYkxSalZENnowU2wrckNdRSNXdE86bD5VfjZ7X2xlTig5MUt7SHxRcWxyPXtOUzQrKz5gcD9Cc1BF''@;'; put 'put ''JWdpc006NFcvPVhsRGIpUi4raGc+dnNPVFBnLndSN0tIPmRLdjwuKGZATHxdKm5hYUZfODhNciV5eiM0OzJjI2QwUCQ3RkUmakUxZUU5VnxdQj52blByVHwuLnkyODdESnc6OmBiPztkXmA4cGxub1ZhRGd1SF5lL210XV8mPTthSUQzKlBoIihpK1dEWj1dR3R0PXQ0fEIib1A6Nzl3KzYpZTNM''@;'; put 'put ''OUc2QCtTWyssRS41V1VdPXhXaHZEUWU5RE9sRSxBJlskeFR1L1pTdj1ZdXxiVDcxXiMzRmxpMF4lSEAiPXRzIkN8JHAhWjJNWVVORWxTSjReNWJWRSxfUlp4e3xgNC9GWTd1O25uTWNaMSVic3M+Um4kVVcySXcrWlJRaFJGOk1tWC5+JEZ0KSkoNE08YlBiK3wvbDtDUnMuUkNgTj4leV9Scz52''@;'; put 'put ''PkVacX05eF8/PFRpfjR1QHV1R2E6YDFTUiJPWXQhQSJ9bEE1dGo8YiYyU2ZMeEVJfDdLX0teZG1rJD4vTjxMO25mRFcuckJXY1FBRnIjPkFLXUhuTTVOSmRTSExjUlI9Wy82N2VSTFJ7akpTKjB4TihxNjsmQVZIKk5dNmU1dE1hQjlkakZ5KiMiQip1SVZLKyJWSSYoP1FvdEVdPltDOW1SY1ok''@;'; put 'put ''fV4vPmJsaH1ISi8oMW8+UkUyZmgmei5UZG5YSkVTdE49c0hoVHk3UGRkZlk+WHdJQzo0cGFMPU85SzEyK2ovMGg2Wj8+NExiREw2fnxZc1M6ckQkPUImaFRvImNncTopKVhKYDpeUntVKD5XPixGaz56JXkueUY4W3VVOiV4ZF1wRStKZUZWVyR7Y0g8MFd7JktJRVBGMCp2ZmkvNn1JTlZjLEBl''@;'; put 'put ''Vm5Te0U2PS42U0ovcyY4KVBNd25KMXZ3ejY+SENob3FWPFRWST9bNllGRjozMjE7JnFpWSpoIUgvdGh1Y24yVytXUlk/VjdsIXZdX3BLSyY8M1VeeWQlfUssenxIb1p5MUw1Tm1oP2JhN0pvIW9ffEQ3UzlqQGNxY1JvdiZUZEtgejwoPS92dnMkPXl2Q2VAL0dHNjU7ZFY4MDolLGxYfFhxKEp+''@;'; put 'put ''Vy9Lei4yR3UzZFdVcVdmeXdeUERubltRKXEkWEMhJW92by9aRUc3e0p4eEZGLzZWKUpgMzlQQzxFfncub3VMQlIxNmlCbncqPHJrMT06Z11OaXZkLjN8Tmk3ISgoezxtZiFXPl9NSF91Kz04Xno/WC40SWR0e1BLSChJL3cwMypzYT9VMyFpbyomJDJhVl5aOzNFQXxLOil6WTRyfD1yemxNcSF1''@;'; put 'put ''T3l5Y0ooTCNdfkFNPXF5Wk4rJEVIRn5GRSVGdSMzTyRgLGJMYSR2JWZyW0hGQl5Cd1AlXkNNZk9oUlhlcTNnPil6JEozQF8ofnVOREJ9QjV7eDM0UE4yOSRgIlZEVlhITUhhZ2VBcm9aUHFOLEh3JmJOIm9HdUBPKzN3L3h1QlFARUI+QSl4WlZ+Tkk/KF4pV2JrXjtoKDZDcmUxUiFOTS8sW2Br''@;'; put 'put ''Vzl7fHcvfi82S0VPRDVUd0B2cVtjPC9pL2dDY1tWXmNtSSloU3c1Yn14akpqXl8idmEobS5qdXVLZy9qP01hRGQjYCtYW3lmZE9rIi90bj9NJTU+RC83S1IqSEE6V0IwNkVlZyl4TXEuWjdxLDFmWFFGbVsyOykpfVt4Q1JFYTBFWnBaN2VLc1ZrI1FkWUVQcWhXKHJiRWxwdU5vPyJYN2J3JGw0''@;'; put 'put ''SEJTWiI8SyxodTN+V21RSz4sWHp3OXFwfE0kTGRlQ2JVVCkqRiw6al4kSHF+W2E4RkVad3lMbHg3OGJ9VmViKExJMX1ycz52Y1I5b3UzIyNuP1gxfilFS1RedSpsWltIa1VjRClCNnNsJkhTc0xUIyJdYFNuSjh8dmUyPlp2U098KU5oMzJ0US9fMTk1OUosPzk+biJwUXprM1dUPD1QP3EiY3o8''@;'; put 'put ''O1pTdy46N1laOX1hPkVCPVZoMFsjZVNnRy8pVVk0NSwze3M3dX14aTZCN1Bwc0NOSzllY09mUXNjWktgSypzOkNJVThTZzhVVztDPXwwSCFZPEVMUzhgI3RzN3NaVVZKT1dgSjFbWiVQRTg4USIhZmZsels8amdROy5uMXcxUDl2VDorSWJ+N2NbbktdbT43X05Ee0VwcDZLPnQ5KmZiKE54Nklk''@;'; put 'put ''NztfQ3huaykwZmtCd3dHc1FBd3N8a0QrXTA+elhFdzZ8PVlze3NlekApMnN5aEQpcEQ5KkJwNiRyMWRwXiM9SV1xMXpKMGtLWENTT2JlY0xrZmJqakBhMS9xbEc1QkllK0Rae0VGOFNHMFBZb247cXhkfGhYaXQ4dT9lW0duWVpKPT1iJjNJS0RRbnp7dVNNJXBHPGdKSXVbfEh0KWlEaSQ8dnFG''@;'; put 'put ''TDUkL2AvfC47M1taelRvNShsc09WY05lS3J7Yis+ZEsqWEVsekZ1SmtkPC9Uaj5Wbk5RX0N5JGJMNFtEVXFNUn14MzdwclJqVTpyI0pQODVLI0IwNkt0Y0Ayeko+LGxOLCovRDxRfj5FSWF8MFtJKVdfZmdGcEB5LC5EbkU7MEBUenk6amNsOigzWyN0R1A3YUNZY1AiXnpHPCMlaSFtb00pcClW''@;'; put 'put ''TmMjQiw1aDYlQ14+MUQraU4+Y1A7NWcmM09sZ2kmLGM3SDpxQWJ3fHcoaGJPK2JAaiYuXUchOmthZG1ZUlFFUmAxeXR3VTB7ZTpRZjpBWFZmP2FFczBkLitKQ203TWZlKUtlTEhENCVQNkEzLnYjR3hVdyR4WTxMXWdJUyZYdmwuPjomMz5xVnA8a2Z8LDNWeyFoNVsxQCp8fHtjZXQ/KUNrUF1i''@;'; put 'put ''PDZiU3MjaHJzMnt3YHFKUTghbFlvLnx9a1leK3hwa20uKEN2OURVbSYqeX0/SHJFQFVkdnIia2s5SnEpPzN+TSlMa3lsYFFuR3hzb3ZpPndEMmsoZ1cpZDdkTGghejFCIz5nciE8di9sLylEOnBtSU1gSzpFeXg7MXw/K140dy9UeyxVeEN2MVBOWVtQRDZzJHNMKWlYXmskMTxVKlkjb3Q/Tjkw''@;'; put 'put ''T1V1ZXdMSG4hcDw3U3kxdVJ5ZyFgaHwkODo2S0dvLEdBMTNLKEd2KmM3Xz9TUV8uWytVSkRNYjZ7RyowOV5lO3IwIU0xUXNnVjd5VF9UR0RXa2J3M2xdR3MwIXp5e0Z5a3opVWZaZj1MSTIrPlYwWGI9WGNmSHJmQUlKczA6PjJyZ1piSigxYCFZSVYjbUsiemw+dj5mOlcxMS9ZWzh9KUhxbCM8''@;'; put 'put ''MzFHLGhrOzZDKC5Kd0BIcD4+XWlQSWI4JjR2NzRORk10ZDFFUjhFbHYveUlvU19eMlckJHhISCF0IzxUTjs7Qk9yK3BRWi98Unh6WjhNd35uSyo7MzE1SGRCLiMmLCt8TXRuKDVqVD57Wl5Qb1tgY0c1fipzSGtfYTFxak5dRGB2VzksWDYmfDl1em9eeE5sMT01d1FXeUhdPlkmYShdeEdwbHZT''@;'; put 'put ''LiNIfmBVSDZAP2I7dk1dW0E0Y1B4MHosd1o4TihAVFNqbGxNJElAb1lRIW1UI3BZZFQpRyJwM0NlNXU1dWI6eCJEMTw2QV9GJEZeXTFbNDFQS1c4JiJJM311NCZQYWVmQnd8SnBFO0R0Z0smOkRDRitAeDFWSEpFbWEibTVyODRiUjlLUC9vTjMmPkBENTQ5Xzcia0Fre3dUdFI1YjojPjpXQzxj''@;'; put 'put ''d3dtYjBedm9ddnxhI3ZTU3xVXztjN3UjNXxJaWFYOCV0SzcwOlYwZUVVRkBaeWlHXkhJbHpZeGIsOUVQOl0uPyxOTDwpK2NGezx6eWE7VTJudS5ySzRWSkZ1S1pORnZjZm9xK103YyF5fnEubTVbdDtdRCNkPV47YUEjV09nRkY+OkxjXUVncG1qbkFOJkA6VkRLXjsyOigqViF3T2FPRUd+TFZo''@;'; put 'put ''bitoaUQ2V0JdK0ZbK29FK0BQNmUsUkooPU5lK1QwK1FpQmRdRVtoSzFyaDt3OXUoLyhEKF1FXyplLFJ5MkU3bV9OJSt5ZyhXQWM5dChWPXQ5elRCOSE7Xll1fT1QOSVAc10sSztCMjdvS14oV3lpVX5QR2I2eGswNTRxVDleJmV9QCJNMXNlSjtjO2ZhI1goTmRzWSkqfW92V24hNUVfTntjXyIj''@;'; put 'put ''VyFKPCtgd103JFdzanpvUEI+Uz07Xyhbd3pTVUkmNGRjK1p3WmsvZUVYdD53bUVVJk0mKGshWmg8UVJxPlh9OGFBcHNUXWpXazZodl48YW5KNH0pMnVZYXBfPj1adnIkQmE7KyQ+cyY/QGYxaypLfG9bdnNWaTVNJil9PDt0RytKdERAVihecyUselh0Ykd3SHJxcyJkci5VdWU0W04mOkVLZik3''@;'; put 'put ''T0AhUzhEdz8qTkVvYzApdCF0SVNsTnJ1WW9wPy9WQCZkTT9qeVYmL1pIWE4oLnRjS1NSeU5aa1dsNHgqWjhjYCI5S0pkMVQsZDtlK0tBKEQ5TEgpU0Quelsse3REeShYUCtQY012dlVLaDt9In57RG1WdDlPMl9mKXVwTz9dLE16LEBaWl4rV2VXJUlWbzJYJTovenV2Mlp4eltHVGpSISFWTWtU''@;'; put 'put ''NXNhQ19Ya2Q4OypMS3E1fj96fCxINE9laHVQYCJbP3xUVShUTCR5T1Z8cF57KFAoSSIzWjtQLzZacD5yInRAe2lDMDBLNDFDSl8uSCg6KFE9bmNBVTwjPDEwKXxmWkVmcVVsfjBraE1qPUplWVZxPXV8a0Z0czFqI20qOm55VDQ9JnRAJTJvSGFTOixKO0B9JWZHNDJlYXtQXk5UN3xyel9xV247''@;'; put 'put ''ejwmeS99VEtbKk46MjRyQkwqX2hrb0BwaytmUSY9aFlyYFBfVWB8LkZTNWs3U1FQS2Fib2lBZVNkb3R+ZUt9aHdVVU9DLHQmXjZuSzwyI1FiN1FZW2Z6O1ROW1hUMmdufFVzXkc1IUlHSGI2KD9vO2cpRFszI1FfKWJRXykwTikqVmQkQ1ssRlEjV1phR3A7OTZRNzlaXko5VEwoMU9uNjMycmhg''@;'; put 'put ''QFRxa189UV1eLFNQdT9LfU5pbFRTPWA8dGlgR1g+aTpiaGh5XiNBe2E1fE0vKTdjTEc9KE9DKCZjOFtXI0YwblcibnROOilGMjZpfV54NWBCNSslXT02Ql1oP3RDcSRKfj5SVlR+RT5EZ2M5NEEraCxvOkc6UVZqZnhZKCN4bWNQbW9CaE1CJU1xLCY3WyJPcCFZZmErbGBrNiZBJUZ2MX4mUEZy''@;'; put 'put ''UTQxUldAeDdrIVspJTRuLikhfC5GR2EoZW1hPWImbW9kW347R2J7MlUsMi5AKll9QDlvaXI0KVIyRS4+WiQ6dFEwTFdvQ2JxcFhVVjZVfTp7RXgvQ1Rbe29COXglWF4mfUg/flh2aD8yTWohR3RgbG4qX2QxPG9pZEZuW2lRZn1GVVolbSM+NDpEXlM1eVdJPjRoMGJ7QlEjSkFgSmp8Ljg5I01K''@;'; put 'put ''cG8hfGQzdHtbSmdpQ1U1fjshMncvMUMhWC9jZnpwZTJtfVtOTFQ+R3A1aGgqISF2T1trIlpgdCxXWlcuVFUyU3o4JEM3VzJwYyt9Vmd9aiR7SlpUYjhhM14uSCNlIUshYjkqJlttZFNvVTNdOXRecSU3YixqfGpeTlsvN1ZAaDglQCIhdGVRJXQ4Y0FCbyYjLyRPfTphI1RpX30rL3RTT2IxZFh2''@;'; put 'put ''bnM9JSZebjNkeCw4NCsmMERefS81V15aOnNkaktPNVhBZG1sJU5ZTGE6UV4/c2ZrYjVLMjdXRDNQazNsdl4pWGFsPnhfWFIjJXREayVmTnA+SiFJNCtfOj5LM0hgPFo6cykiJFpFaGEqMmFLfCR1WGZjayYoSV04ZU1SI0JtJlB8bjMmRFhlckk2IT8uWn0mLnomNF5kKmMuV1R4KCo3Q0VENy8j''@;'; put 'put ''RzwxaCpjMmVyfVNSXzgzOTo1S0E9YjBhMGYhUzxWWEdvU29jOXx+X0F9dyh8OEdGZkJORSQiPnYiO2NkWHl7XUM+fDddcT1bPFlmbXZlTFJ0fWo7RkZJL25LSl83UXZ3fCY/Pk19aVlqQjk7Xy9Hc18hSVF3ViowJEhkbDtSZjZQXWpieHRVKXpQKzo1I1ZqZUVRImpVQkQjTTl6I0g4JCFzYm47''@;'; put 'put ''MnB7b1M6IkJ+PFViRXBANSpUVT9GZiNddF5nMVVkWmNeTGRNJDEwZVRlPXpQIVdNfXRTWGpTRj9YSkJCeVBqY3Z8WVVxZ1ZgalN8RFA2IzI0ZGxlZHBnTWpqaX09PE46I2VVVjloZWBQeTdqbXU6WTdXSDUmcGlDOHkzX0E8V3V1TkBZR3ArbitSP05yUGtPKCRKRDtDU0hmSTMiZGRpKVpoMEh9''@;'; put 'put ''NHw4Q15qV0A0bHk4WC52OWU1a0sxITQwYjBqeWBJZzdlZUJCKWo3ZGYzWSt4Tk1PI2lPK004RnlaRXtlUXRkJitRUzwyIy5rTlRaXXReKWR0TEgrKjgyIjFaWlkpPXppR2tqMyVYQ3wvQT9LLz0meFU/fWg+TnFkalJQPUlKckxSYjU+MFs1W016NEBeSChAYU1mUChVTS58aTVFMkdofX1HTlUy''@;'; put 'put ''aVMhI3JCdiQ6el1gPFU3REZkdXpNIWdwU3hjTXZjUClAOE12NCVZZ3dnWz9Deyt3RSQiKHR1ZzYuWGtaPEpRcDVQdH5wdTVuUzBjXk4/KHU7SmQ6X1A/e01LbF19R2hCI2FdUXJqYEEzP1Q/QyskQypPYzNlfHV+alF1L00hdjJwYzFfTWd8aU9YI01dRVgwSFolJFdXfSt+T0VuKXd3Tl1LcTk/''@;'; put 'put ''fFJLK1h1cTdxYlhpN0w/PFdEN3Z6VlUkaURiWFNeMClpTTIrQHpYfipIa1FwWWp+dktYVWdOZkhLVVJIY1h3MSp1NVQodDRmUGNGWEc/K3d4dD9yWUtvOCUrLkNTWUoxS2I+fiNhYCwmSypkKS9eOXg0KUw0cT16SXlAZmZXRDpvVHZkNjt0fiY8YTh+KGp7WlI6O1hjS1B6RyxsSnlDMCFVVUhw''@;'; put 'put ''LiQwNFdzVyJgZkBraGpVbC9NKyNMdTl9eUpWT0BJfTwoZ0cjQmMydFdsbWR7KV9AJCZJPXdfK0xkfmUhO3ZEPGtzRXYjJEhwbFt7OlB2YjdFPklkY3VtMUUvJGI4W2khQyhGNERhQSVdeXpmZFhhZVpsKzhJZys3bC94bmpYUSI7JVRNcFZhaEYrIyh7UlJYbURJe0wwX1pTRGMqSVghVDcqey9E''@;'; put 'put ''cCNudWMxMWpLQUdzeXk6WXwvPilaZlNJeTExcUJJZk1lfkIjMikvQVF+Uk1tU3p5PjxtQUp8JiF1QV1ldD86Iy88RlsjQUlHSW9TW3coVzgrLHpMdFF3I19FbjRTQjg7bWRrI1htbltWKFdKZXd6NDQ4T0EyZUVXSWAyN1J4UkBwbGZJNns4NS5OSlFlMGgpQm0mOl1+MVtgRkRyOCFnY3xiflpe''@;'; put 'put ''OSR8NXU2TFR2TiNBZU0zSjFyU2NlK2hwcC56ejdLPzpdLlFMKHA0Tzh4WmI2JDBaaHspbWp7XU19O2A+OiEibzJWWjM8MHx6Um4yMG1PNFRRTHhgUG0oWXBJQ1VRTjp8RCFRamVfYkc+TVchMmI+NmAjfE5jK0I2IngxKSx5Ik5pOjNBMVVaUkprYjpUaU06ZGpqYjs7ZE1FbFhobTgqejsifjFU''@;'; put 'put ''Ny9uWihIM1lMKU1hVUEuXj95YF51e2cpby5lez4hWFAsMk1dek1hTnBdZHBoMnEiMmR1YVdtPmJWPjs+XW4zQUZASjsmKmVEciZUcSg5cDZjIXB9bjd2eHZRJCo5Sld3WCgyJVcyKGQzaklxZEhERSNXIXMlMktGSzU4NX1ufm1CQC8xeV4zU0ZjLHRzayxtQkoyYjtQZX52RnJOLDNAYDg6cGRY''@;'; put 'put ''SUI8YV5VQ3cpRCwjfVk2ZHgifl1aUXZ8YU84ZiJZOyRjdz4qemBbdn0qO29ARy8oQigld0A/OWh5MW8+eU9qYkMlRlhJKnUqQTRURz1LfTZVV1N7dTRwPzh9UzolTHhCRD99KUBBeV99bi5SWDRtTENCaSxmZnZvOWRecCghal53XStIIlhmaCxHSyZtdW17dTU2V0g8fG8+bntNaUZ7cU9tK0Qx''@;'; put 'put ''Tl9FT3JuVD0+T1NMUyReNip+Mk9VUEorXUJRNXwzI3lOQHtyXVtWbCJmPytCTFUmZWF4Z1FtU1liZUwwdEtoZX5+UmdxU0ZJOSJTM3pgRU59KWRsJk8pZjdPeT92OlQrIktMLnRXPy54cWc4K009SX5WJU92alA9Um04YmdUOjhNPjhdJFpCOCg6aUxMIn1BKThKVjVyQ1dzeixlNWBpSVlPaXxe''@;'; put 'put ''K1JPLDtCJEpBS305OFUsNkh8N3JxJX4pSDZJaWJJNz99el5gQGNPJUJPc21YeXZoaVdARGl7RWlVYU1jQEBwRiF3elJFVWsidSx6dFo1I3VTZlZlayhGMWY3PVlMKXZrVGQqekk9W2FkaDNBR11vfillL1lRdDFUdixdP3pIYnlKbTwiMmw2OFMvVThKbXFOVDBYNT5wND9kTV9VVmlKQltAXVJH''@;'; put 'put ''OVVCT2A9dkRVTiVAOiFnOTY0b0c3PmFXRWwmNnljIkIiKWk/WXFHY3k0XkV9L010bkcvXkNvYkJEMFUpXn1CezB1aTE1YzVWbX0ibn1NWDtqP3JKYFAwd0hlUH5aWiUxIlY8UnV8WmAzYlEoLyZWUCohYHpjVVUwa0JAUnxRXWRabEA7el8kSyk3aS5jVCZ8THRLbVMmZzElJWIzKyM2SVBucTlz''@;'; put 'put ''VC9FcS98QDpPOHQwWUZjb0NRc3teIkw4LjhDK3RDayFwc3RnJHU3aWMvYGBQV2puMFIsWm0iOGIyUmF6MnQ0Nn1zY3I1fHxsZSM7bjd7WmQ9WlJJXnYieEpaUzJ4YzNJYzFiMEt3Y3NYYm9sWSh3MS88OXxAdjRRQldCVEErYV8rN2YySz8oJTgxVDNSUnI4dGdKbyM5QndleUdoQzJKTm5VRkgj''@;'; put 'put ''WV9laT1xeVNmOypkOnA3L3M2Zn5IX0FxU3xJPWkrb0htWDxsU3ErS3pJLDhDNX0hYl55OShDKUw+IzZLJiZwVSRkVW1Vc1BPMyZDcndWc0kqJjc/SWkzMGNIYU17RjtbcyE8PnAiWWs4YVtsazhseUtoXk91KS9kcTtRYl00WTo+W0RiMzVFdUlCTiRPczI7RGtddXs7cS8zeEJJKjdCaFt6L0t1''@;'; put 'put ''M0dDTnByXzNETURLKXAlTyNNcWwpMHpEWngmXk53P1YvYHt6RF8jKkgqb2pYN290ZD94UlF6MSJjUV8qZUUiWnx9R0pQY2tHY1VTSiVAQUl0dCt8aipqRyhjVSRWW1VxaysrW1kqYnJWa1NwI0JbXkdibW5nXk1oQ0E8WkxzS3tGYnNVP0IoTi87dXY0YjVyS3Q2T1oyfD9ud3NpLjM4VHNTW1VP''@;'; put 'put ''cGc9c1pXNCl1SmE0QjQyfT4lbkV4UGQyTjJBTiouYSFXTUpAPU1wPVBtMSV4amBySlFQM2NQY3RSNmAuO15bTSxVZj9MdXR2NSpjLGNlNE5dS1BYdGdSJG1tXiZ4MiRyMH1LUkhhYHdBb3plRm02OG1BWlRiRWIvJiI/fWtobjh5VC90Un1WPnJFIUNGMzRRY2NFejB5KF47ZnA2Ykw6S0olIXZA''@;'; put 'put ''SmtFa3FJJFE0RzZlNn5ofTRPflt5aixpbH1hI3RRcWEzSitXZzZLJiEqYjh7Q3xtK3A+ZFVeeSxuTVAlQk53dW0hVUAsLktgLChvSEZEVUtzVz1JcVF9KnchJkNkUno2PV51cChpbUcpSStaVFdeZnduaHpMN3RianFjZDxTNCZLfnVudkJBMyl8UFhDU2MoYkpNUyVKKjwmOl87Nk5iWCxCMCE9''@;'; put 'put ''YS56YzVheCNoK3ZfTSZLSTA2W0w5YWdKenc4ezkpZURVMyxYSHErMjhIY1tid2NmcHY2RVRDWitXRU1VaChHMCNXOlA8fV9eXV18OFA0THUocVo7UShYeWo+TFJFbHxKI0RNcCFFY00lIVN5UDx4aFM8fCVnIjB0bV9QeG1rbHh9PjcvMVR4M3dNTXRJZiNeUE5dPHBxKl5FPE1GWlpgJCQ+Q0wh''@;'; put 'put ''SiZjL29pdXJjSCN3e2w9NHRKQiZeJF8uaEBre2dUcT5aXklYaWBXdERSMi5pdGl0RWwlR097UXtHeFNKKGNQS3JsbkFaSzdje05lfl8rSHwqZ1hnWFdFLDxpUVc+NGVPJXhyKjlXTnAhRExleiJbeixkdUVTc25OeipUQyMmPDtgfD5ERCtVazglN3NqdUxHJDt6LlM0WD5iNUBRaEVgRCtbRiN8''@;'; put 'put ''WFJbVXNZT3Y6YFgzKXpzL31vMXVKS3JFMV12TztDMTx0aWEqTVt0YTZGfm5ZLiRBcyR9Zzx5Qzp1b2lbYHcmOz4qP3BgbVQvaj0hKGRVenl2KVREaWFWP1suXVBEIV5WLmlSSjJSODhWdX1+OVI4N25+Qloxd00vaXxyQjxmNyN9Kjxqb1AzJE08aUhpbWxfdEgmZlRARz5BPl4lRW0zKTlXUkgu''@;'; put 'put ''OD1zei5jO2ohal9PMCkqezd+fU9AMSxfdGo1UElvKTVxI2NsVik8dTxwajFtO00vdG40RVNUaipuSTlOZXJANipHUVBnTiQ2L1I3aEp0dVVXP3A+JEcvVVZHQlFBUDtnM3RlUX18LmRZTGg3UHZldSo4IkFha0VldCkiRFBCZHYuampAPikpSV47Kil4UWBgdVk5IWR6cHZUNW1bckp3OVFHUU9m''@;'; put 'put ''NU03NlsvND1XYkUwazUoVTwhM3JoTEc3ciFucWB5ZXkxaS42U2hscmJDYSVnNVJpIzJ3OF4rNXV3WGBnd1B3QEB6ajAhaUkwaURNNmhnVGBhT007PltqQzw7OTklLFhiU11JUW80RkI6NTNMNmU1QlRdPjh1ZCFhQUh5PVI5ITApcyo6KXpiTm55Y3olV01+Wlcxd29yMWtKMzc+Q0wvP30xMEhf''@;'; put 'put ''VWwxWC4wI24ydz4sN2cmUXw4WGA5M149ayxmdjk0XzYvNktaS1lOOypuZGUzTlQ1WnJfM2NtMG5GOn5JPU5Idz5GOUZnI1l6Oj9ZVTBIOjV4QDRAQn1BMyhtMV4xTCw7UG9fekd4bkdLc0wxcWx2YzEqa0x6QWRIVUsiclpRLlNfa3FnK0Fra1kmezksdlF5SjxPZihjentGQS9VZj4iQ1FlTzJh''@;'; put 'put ''WS49MFlNQlpub2N1enBHODdpYUAhcHllV0x8Xn5gb2hrezhATHpYcTdCazNJPHJyS3chZyNUPld5NTkiV1BYWCxfSlQkbkVpO3w5Iz8yNTU4dkclR2I3NywhOlgkJHFgOEJaRTlvUlF8MXIofnVLJUJxTm5vbVRaTnVyK108biI5TTF2VmBvU2NfSkd7MSl+NTs8MzY6Xys3YFhVKWFKd0kmZn1j''@;'; put 'put ''Nl5OJXRgYlI+I1BCL2s5dFBZMlVFUEZKOEQ1ZCljc0R+ejZtRlAodlcoQTJ9W35vVHNNX3d+eCNWU3E3WXJELE5LO11wTysxVlM0SUJ7LjZUUVZ0K3k9c0dNZ3VbXXJkb2hhZD4yNSVGeipwQTNYPFRvOmtgYz4sVHpTWEtIcSVGK29wQH4pR1g5ZzlxcmZjbz06aVcjOHx7WEQyLzldVUE6N3Rd''@;'; put 'put ''cSNYakZkOTxtaVQsJkNpWWM6MFpwfTp8d1lod3tgWklRIyYuYX1CKDUjRzRpTSUoKU9mSE1wSk99NE4xU3UkXVVBZjU2UWJJOSVLd0gqczlSdDJ7UjtjfExaMXlSb0hial1kPyVUKFo+bkNkK3ExQD5NT2dOWHlOTVhGSSphNUtaX3pwLCN0LlQ6W2x2Sih6RnsiTn4zJTVgY0NMZCsvbkJaOU5b''@;'; put 'put ''SWpsJnkhSUBZeEwjcVZaOz5fUS8vdSYrdnpSNz9hJVluKkZbXkZWIWBDc00rW2U6b2I9bHRSODk6LDpNNERERnFyJlUkWSJBSGJHaXllKTRkMz9pYDR7WmI8QVFZK0g5JD5KZ19OYl9uXThsbF0pbG48QnExSX5SX2RtRlVtRSgzPVY/LmB6cmBYMUIibiUjfVk3ez9gaVpjb31ELG4vfnpgLzVl''@;'; put 'put ''OkZrfk5RJUNSd3JeWXEjdnl4QGdGSnxXKmF3Zy9OUjN+ISo9OTFJKHxRVGVGTiNTZj1vbE5iUz14fVN+X1JqI1JwJTNxIm1mT0pNSiJmRyJpbkg3YnEpJjtQWWFSZG04RjFHbGBHN192TEhNOH4wVVtaWnpjKEt+U3g7dEpoL3ZIW0s0blpPaVApOHV4Z19JNyM4XXQvUShKcW1USS84UVI9Vm1o''@;'; put 'put ''K25TXWlPPGciTCYuJU12YlV3bWkhPFd9RHZFZXVxUFJ2K2U+YE8hWTg+KCt6YUlpVHc9S3pHJjkpWyVjIWZHb2pDU1s2ZTxsT29aUDdMXS99SnQsVkIrVVFkOjM6LyVyNXs3PGlmK09Demo9eWp+V3d2ekIse2oqSXEqP3AjWlF5NVtiMH18S2phVUB1W2c1XipBOmtzPFRIQmM4b247Mj00cmRX''@;'; put 'put ''MmxtX215XSoxfCVYW2QhI0RkOkQqNm5DRGR0QT1YaCE+MExzZ1Z3dzE3KEZsYE95NyJpfjtveGJkWkc+Jk0iNjNtJWQreU5bLFNoUWI/MltBN2A7Pk1SIX5fZD48JWUxdXR+TH07bTh4Y007IV4yRExLUkVUaEd9KGRlfH4pamY9bygrX3RRNShOal0+JEhTbXguPXRjeiUhV1UmVCF5Ik5MW2lj''@;'; put 'put ''NlUobmwmNEBDYkRYMnFBIz09IzsmUGc9dXxgUWs6aFB0WSV5KkJRZjcrLj59VnM6SVpaZiRfXTQxZ2dofTsvb3dIXkxGTjlOPnw+RUpdJkBuZEVXLz5eTyRHfUlkdEh2KnpAPkFPbm5PTj94KzhUW1c6XkV1fihsd0VrUXhddndKSlkqTi95ZEJSMlY3alszX25LemZCZnxVfCx8NFpeOGMuP04k''@;'; put 'put ''e3UlOlI4PltxPjgyWXRvZnUwUjd2RndNRk57Zn09M0k5ZDhFVWcpJChsTCxUUDImRmhyU115M3VZbWorSFFgTD99dlk8Vk9CIV9HTCI/XTxBI3pzKSI0QldTdCN1ZmpyLzw2cDtSKDB6KSleWER3d1puLkM3S1twVXVBR2w9P0MrbEFHOjA4MHtjKD9hNnt4OldDZF0zJnswMUNxQjd9elImUWYy''@;'; put 'put ''UF9AdDJQcjdPfF9QSFVHUzNwQ1QxT0I6VXF8X0xLPkJfTG8pP3RUN1JKeDhucjB3aDduZHdOI1AibTkzdWNCcz1HX1EoWmdPPHorP1NgMHkuLzg/Z004aDtuOmlmVz0yOC86eDBNd0VoYWtWX3FzbixKN2MweGkhcyhYK0pLcUV2ZyJdaT5ZKWk+I1JffkNyJElnTHx7bElifTlIXWtQbi5fSy9d''@;'; put 'put ''byFtc35LZ24hYUI1VDJOKngpeVhSdlRRa2xqIzxgMGBePkswPz5RNVdMaUhtZmU+YnImfTY2MWheVTxwVUVVQV1pMCNfN11PMi9meEQ3cykwUF9JQzQ0KCpbSC5FXzgwUHs/SjR8UGJRQE96Zj9sL3slVm5IWWA/RUd1RSZUPnIqIjdJNkcoPFp8RF5beTFERnpkSExDQThPNzlCKmlQSTwpMCp3''@;'; put 'put ''KG1CJXFYWmE5PnpTYkVDYko7aFAlfFhaQlRddFlTbCkibyQzKywmTmkkJHJ8YyZKbzluMGc2bW0wXSs9aTRua31YdXEqVFhTL2ZNMTRbISMoIiVGSFZSWTl8NGcxbmdUUmorTGlwY0ViUigkfiVLYUY5W104RVI2Ylk0SzgjKFJfSy5VR146YkRxYjt+My8oV3clOShUMi9rOSFMVTlMSX5xUDdp''@;'; put 'put ''OjFlcGkoR3NqKXdUOnRaRVFlbkNybCxtIi9FOlo9OiRUaXtHSHV2Jll6N15aMkY2VVNqblI2bUh2QGM2OkI+WVhldShgN3p9ciMwXjFBMGdRNDRCfk9ufm48ISE5YiRyRT9pdi42ZXs4ZCNkIk1NRVVJLDRtPEFfc2sjP2k7JFRKKDxkdGhZKz5bIih3LF13REtHWmNvZUBvYHlEVi8mJFdpamhI''@;'; put 'put ''MkgmVENuNnFJMVdQOHljciRnb2JUW11VI3IsJVldIismZ0Q6dFh0I35pYT56PHtMd05zMD1ifVh3YyQ8Tjp8ajdHcGg3KWRkel5kNWFAVEFhZGpmLj1uSjFTSUJ6WiRFeVF8eXl9Y2VNRTJ3RlFmYzsmZk56WGllL2QzRjVBZl43P0luU3ZHNUR8SSFBQyhRZDlNa248eHVBV1ZER1gyeW9CfFVM''@;'; put 'put ''Rj58WWdJcjlXLGQ6dFdkbEJKSnpKIyhqanRoPXNhJCs9O15qW1ViVFdzLlU8b3ciUyF7Qm5ZYShXN2BUSj5OeD1DUFN5ZVphaz8kQiR6SWlkU3VIM1dHe0RbITp+Y2UxV2NsIU9EdEBaPVdZaEFacHw3VE9jL2UmJDRMQXxMc2NaNGljfSVnakh8aFB5dVRrX3xKZUddanAjfHh5dm1SUC9NaUZP''@;'; put 'put ''ezEweSFUOEpqVXc+YWIkeG4hT1suLl1udkhzNH08aWZ4PU5hdX04b1clWytyX28hUGVdSnU6QSg7JlFjKGYvTTdySXBzWEduX1BuTWs4R15KQyQhM1FUXixkblZAPi9OaD51SDY2M2NMfUN1eWZoNzpDUXl1ejdxKVtmX0lRO2dLL2Rab1J9O2xhWVE0enVsXmptTU4+K3FfezM2c2cqdD1FQEIx''@;'; put 'put ''dHxGPCFvNXc6e0MyS31HKkYmKWRpUHx9P3JvJDNOVFlDPyNncDEhLmhLS01eeUhoLygwdUUzIz8yUDIlKjN4V25reEpRJnE3OUZ+L1F0V348JTRUYGB6bGA+K1ROZS90JD47OSYxMGJrcm1EM253RnFNJjQucyFONjR5Ll5iYUgrNTQ3Y0hSTTc4dCI2PGlFU1NzWThvbSNaYnFMLDt9ei9NKG48''@;'; put 'put ''fD9rOS5xJCJGWDJ3djNsJFgkanBCX0x+fGhPQXt3QEAhb2k9aWRDeyJYbUJUO1dLUmBgW0AyLGY6KmMqQWAvKkxbUFcoQnFsRGVXaHpTVCUsIyk+Yk8lOE1OfUxqUFQ5JFEqV2ZZNnxsT3dAMXU9aS5sckpUWjJjL0pDMWFscDJbTWJyOl5TJVo2T2E0T0R0PX5iNH15NT5FWS9WQjg6TG5TdXVj''@;'; put 'put ''Xj9bYjpPcHBkd109P3dVZyZOXVs9cGtYfEolQV9DKiVoMk4lU0xqOnBROWNLaS47Mk0wIWEsWWwlMUdLYV9bPWQkJXtvKF5QS1ZXeTN0XSR9NEJ0VFAzZSlxVmxAUms0UERWQkNSYFhGY3xGSVImZXtDcH5yYG0lT0gyIVFASXNwPywrYV1DVTM+ZGRGaSlUX3lSdEFSKVIoM2kjeDZ8aF9RXm1M''@;'; put 'put ''JX1mPHpHZkYmZUNYdy4yfjJnWUtXSVRBO14vJnYwfHRXJi4pcmYzTyU/NShbQlAhVGRfdXtqbjYuc3k+cDY7Ll5BblEsWjRLRGQ8WGh5YCQ8Jl9AcWBXQ21MeV5FdG5xaWVQLF8ldWJaRnxbbz9WeUEoY1s4MVgibGtIdz9PZXNfLi85IiN8ISN9Yk4qck1ZWnhQU1tre1s6Xj8yZkY1LEJMI0tR''@;'; put 'put ''X3d6WCIyaFd3MDhHR25wIVhbUWlDK1YhNFtdcltbXjoyfEshQTtgPT5dQzlDP0V9STdNY1tVMGtGISVAY2V1SnhMX2heJVtubHFpJT9VUX1TODFSPHlRemU2OT5kUlpraVpiND1uWzIjPCVHUUJ9WSpxfDEudypsQ3JzXmh2M0E/Oi5MS19HaixOe1F4YiFjPCxbOjxea15rfVE+WSFka2c+fUxm''@;'; put 'put ''eF1Odj8wT2pHQDV8bldePSJIPEFUOW1AI0FJUn59SzlwYzoiLnxhIjcqR09UWCJXZFNCVkhYN31HZ314Ny8wRTc1eGNaYipvMi4mViVjWmI4UnE9YX5XQlMrQkYrLngvNiJwMG1UdmcjWGVWNyRQcF0/fV5mVmllWVJsPn4hWWVHLl1aQFkqKjUpdEhKSjlHZSxKMjgyOFZgVkImaUM5fEptazBY''@;'; put 'put ''STJ1bTc6LCRIaT9GQ1A/Q3JfaEJbeCVwNGh8NCxfSDk6M1RkNzM+Sn5ROmE6Lkh+X3I5N0gkaUw+diFFSVtrdzFxI3ZQTmV1dDJwbFRsS2ZVfFE3VDcuZlp5NGtIL1FsdFZkX086WSZyXkhKaTJ2QlhdL3JIdldJREQsP2IjX1diKCZ2c3A5SU9ALnZ3VnM1LFJOMEksdD9vSEdkOm86fDEoUjU2''@;'; put 'put ''PzMwNTtAcH1kMGF9Kyw5LiVdZWdALmErNFc6ZSg5Z3UvRnBOfEsyIVQjbilrWWVWUlA2QHhTIk88TEI+fG44fHdAYllea187b35JZ1Eoczp4MF18JHY+MyV9SkY7Oi82R2xLIzsvKyx8a203ISZSfTwwQGB9fWY7ZXJ1fTVsPV4iR2BTfDhdellbLn4zeUJ8PGN2ViwsSCYjTE9VPmszV1pdcjBV''@;'; put 'put ''NWZIfVE2KSJqTl01WkljKGs6KmBGak5BNVohWEBmZHJEc1p5PytNO0FLLy8pKFtkeyJAMjZjNSNBMEgzMkQ/e1syL0B0Pn1URD0pMC9WYFRlKExeZS5IJjNMeW9RSy8hL1skV0A6I1N3VmJyZ35YaWZ4Kys/eCVsZGw5dkd+LDVYbDMoMyVVJFVGXSQ2Mi9yVVhpbGt2aU44NGltW3dtaHdRZzJ5''@;'; put 'put ''ODpPbGMzVGI+eWtsfVhTQDxgIUxweG5nfktOMmk2RCs3XkN+WXdWOHVAVXVCNG1zN3U6YE04Kk96NlJFMX4rRyVXen5UKlhIazReY2pkaStGI25wZWB0SE8kOGl5LzAqVCRgaSR7PV5YWEApWHBqW1F6UWI6cTglb0RsVjs1YXslZS84Oy99biRQKyNVXX1kNTghMTd1JHRbRSptSFUlNjJoYj9t''@;'; put 'put ''cHNdbFR2PEksdyVbJT80QSZUSG1MUj4pMCYxS21DQSsvbDtMU3teV0A3PlFIQ3wpdHwvW2x5QXB1Kn5SV3U2NU9IZGBjQl99OmFPKXksJX5FXWF9LlYxeis2VVo2Zm4kTl1mWXI6IzwwTDhKZ3tyXi8vRk1+SVBGQnROfHxkPClqfWYzajh0el9WKTslWkVwTj83bltOKU9pMCFmMVdeN3tpWn0p''@;'; put 'put ''WW5ZRmhxS24uR3oldDFMWkYqTUwwS1pONGdnPGcoK1hvb24yXXkrWW0yQEJsdDtecmdOKFFTWVZKPyN1O10keTdLPD9IUWYmN3hvVFlSfXtES1k7VFA2JnhALnRqe3pAKHQkMmZsLmB3LzRWTCUsaFRrMHp7Rn1AXzIkYDVIailzSj9jKSkjIzYoTyZkOiwxT286T0Bnflh1OHohWkdVLmBBeHxz''@;'; put 'put ''XjVeR2liRy50YSV8T15WUi9eITJ5I3pBZX5PTn4hcE1UWjtIUEhyXTJRPWJQIWdIUWxAa280OXV7OSFfXz1eNnlkWkMmJlI3a1ZuPy5OQzRNWnVBXUVpQDYmRUtELFs2cGorTi5uOSNIUVJSVUNdRCY3R09aVzl+PSZhO1hLP3UvWDtsKlk/PXd+YHk5I3lHX0M+K2FqPSNtQ3E/aU1DUFhuTEw+''@;'; put 'put ''OVlbSXRYamxwTC5FND8rNkl5YD5nfU9jbCpIdzYuMltvRGEwPitWTF88fFVVaUo3V2FFWkRnQkl1USxrRixnJV0yWipRJVJeJGZxdnxlQ3ErIVAmW3txUyYuN198TUZWXm9TPEUlcWMofVNFdHZ1ciV0I189XmgqO3RDcWlrWmt5eUdARGh2aWZzS3ZiRV9xYlAxYU97PyZMSEl6NE9sKVAmMix6''@;'; put 'put ''Vm5pNTs9MX4rVyo1eEdAOX1SREdMX3tTM1gsLGNQR0NHKHVbVjteTl0yTysuKCZRdFdJPG9EcVBOenQpO1pgcG9ZRipmQ3FRPWgsfWhaN3MpQClSW3gpOHRwL0JAVzNIX2pWQGBXT0BvTXVtSUpVQlZmd1dKUnM3dXF2KUhmXTI4TD9GU2clKWIxJXdkUCZoV2kuMFA9fVI8JGlZSXYzYn1bRzhA''@;'; put 'put ''OWdvaWRYPH1zZV9pUD1XeDVBdlBwSVR1Knk1cmpJZzQ7Jm5NaT5LQ1cpZyVRSk5iMD5LTX41WXFEOj9gViUxKXNfVl96PjleQzhyeFYlSl1FOD09Pi40MzpGTjFVe3JRWylfSX1dWHNmPn4qOixaNGN8QmNQeEY8SGgvO2RVNmxYSVV0UCY8LiUldm5iWyE3akgxcjZJZm8lO34lTHUqcTpKNltk''@;'; put 'put ''czh+JEcqKkA9RmQhbjl9OGFHWSovckNlPl5MWTsjPWdHbSRnSHxbJl9kTT9LOExAXn1MbHovb21MR1ttW3JkVSgqO0IrPC50MShrITtoZ0JWVz9sKmMrbCx9PTkwX2c9K258SXxoKyV3eyhrRG5IYC5uaE9XXncxX3B7cG9nSiM/Rld5XnZEdX4mVipVLzlDcnhDbSlUc0ApMyw6fVRsOFNkUkA5''@;'; put 'put ''TFMhfiRHSTY6LD1hUUlML1spd01mTS85KjZEQHYzWzJLdVklSj5sRVNpTCJYSCZUYjhJb2xNWSokVXxGQDFCQkV9ImBlKGVVN1NUMiZFdX1UZVl5OEosYSJkViFBKnxyOFZPMDtjQWUyNl8vWH1EdmhwOHo1b1MpSVUoPGIvJkoockImX3JqM2FZeHVGUXF1SXl+akNxMi4lWWhnIWFNJEw2aVly''@;'; put 'put ''enVIQlcpVio9Ll5yWT1RfD88UVo7c2V6ZSNxdihDfCJFP3VPOnYzbFRRX256OiEkTT9PZWBlUUJiXSxdNS5PPFpaa2wxQXkzW1dzIntrTjBAQyRSfjJgOixUbzAqLmB1eCV4di5bQUVmUUcvMmNRRlMlKUAhLmg+ejtDdDthaSxTSVI/MHIkcVRfPVpFSGZANV4/a2s/SWRgYSgkWVNeTiRicVJI''@;'; put 'put ''R317JDw9ZC5dN2xNVXhRKiJvKlNVRGNaU1VhM2hXfmdmUmshI1NBI0dwdWlmOlFYMGUzTmFnPWJnQ3BPfk5zayU3eT0+ajVjeVN8JlZGZHJ3MXZrfT5aRyZqfCFZaTtbbHdDKkA4d0l1XyRbfXlqOTcpKyJ7SDNSKSp2X2lpUlQha09NRnRxdGtiZiptIWpwalh4bGo1ampZR1tAdkJyfWg5PSxY''@;'; put 'put ''U1Iwd3sxeyl4bk9oRzt1cmdGNjdeR2EpbkMhNSx8a2ZIKHA5WVRpM29mKzc3aihsVjZZO2E7YG5zaTFJYVQmMnlRNkIhTi56WiVzLmp2NnJnNkd2MSRrKk99e1QlN2FeKyZoW3B4WHZDeVQ/LFI4Yio9IVl1I2VbY0NxJWc6LG98YlFoTXcramFpeFBvTm1KKmE2VzNVLiltfjFCLkFrQVMwUipx''@;'; put 'put ''MTQoKC55SV9iMUImQj5kWSJwdn06OkxAQl8+Y20/YV1wS2A1Z3dJalNMXz5VRVM+eXJUXywmS3xnbVc8fjVMUnpbfjF0Y2ohQX5GamU7UEM9XXd+bE5jN2k2S2pycCxyfCFCMmBFZVRnSDkoWHYwY2FPT19PNTBjXW1FNEtqTVQ3VFIxY1dBQjopeDIxV1VGb3ZufVg8bj4xV35bRmo3a0xURF5D''@;'; put 'put ''Nl8pOS9MSGQ1WisqdFd+Pk8/ZFtRX34mdUNYWTlZIld+PXsmcTREUilrUjdpIWVxLEJiTmlkNyEsRGk2dHVCVDR2Z3U5S11SUk4sK286cU9qalUuYzR7JXlVfWQ8ek11JW4wUXptbkx8QEtWRlpwKzE4THdVMDVhKWltXis8ZiN1Z3d7VWVqbVpPNXBUaG5kaTZKbCoiX0o6KD99ITh6dipWUSs0''@;'; put 'put ''Q3tpJUdDNDo3Wz9FYEY5WWo1cEBKRkN9PXAyQ0g2VD9odVguKzovc1BqIXNzPTQrXyYpXl8hUmMrR2E3SCFwemxyYWZRY1dsKjMvUGQwS3JgWF1vZXB1TC9bNlIzakkjbS5XQDpJKCFfK0IqTmMxUSM0JGwiNyVyKURCZTovTkF7U2NzMD19L0hEaXVWRGoqIlFyT1BEOEc4Km9AdDNUOiZCfShj''@;'; put 'put ''OU4qW1tbTGRGVV99akNNWztpOX0zMlssJnhDVUJrbCgzU3IpVntTc2xoK21SLG1fQF9tZnRwVzU4dm1fTVojeXJRTT5PeWB4Iy45QWVlVmRpUW06eyk1eDRiMUBuPDBnKDdKWzNoPyNxLDF2Kyk+T2c+WU82cFtINlcoUkA/ZzkpZmYoMihdPCE8eDRGJno0XXBOMS9TfF88SmVebUg7fEgoVStq''@;'; put 'put ''d3YlOHhsODU5I1NYJF4hKFV+LjtTTFQ+Sz9bRSR0MCZkRUo3LGxEcUpWKDA0Zz1MWGksWSNmNkdLYnAzYVFVcldHVHJ+ZGMldm90YH1SOmVaJjpTe0o1NXg9bF9ManQ5Ll1wLDVdTjZ2ZTtNWXBadkhlUip1K3Q9ZC5nU1IyflBIbHZlPzhLXShKQTxgRWFGQ3xgUWtSQUdqQHVpej1QfUEmRiF6''@;'; put 'put ''SmFzZC9LUDRGQVdtdV8vflYzKGgxLHhbKl1wb3ZFUjJKYnM6U2t8am5ab1p8Nk57e0lMSXVAdnNjPEpBaHpueCFEYlV+MWhGe1lMRUkmW3wpU2s6NztWYDUsQ15LcD9SVz92VyFtRG0wOUZjR3l7KW0wRiplPFJXbV9NYm5qU1o7d1NDci9gP2owWXNSLmFiRTV1aTFadn5fSzxFKmRGJUtwUCNd''@;'; put 'put ''WClmc0cqdEkuUnVfRzU9LGsoMUJFKUZwbUtsRDlURGt5JHVKOT9JbmAqbXF7SmAoP2daaj12Yj89WnFHXjs/aWxSKXpsaD4pNmxodzR6YjBpTiM4LiRXcUpBQnRDIkgia1lHIlk0djIkejJTYlZZLiFDUSEuS1ZeOHFHOUFQbUYuSm86OlNJe05+KEs5fHJbSj8pPWdfYnpqbGVpPF57WyV2XXhV''@;'; put 'put ''ZH5PeDovTF55I2grYiVzJjcqJjo9fD9AIUJVLlJsWWFfL3pSKlJ4QzwyPllHNlRmYkxBXmFPa1IrKjFNbHxRN3MoQFcmOGBoOG5sTlZIampuODcqRTAya1lVdWt2al0sLmhNJEVZNElUeXtPO2VCelomNUVBRyJYTDpDYVNeNEt9KFtDeXV4NCliNFZXST5VMmxWITBxdUAjayUoZ1k/bzk3ayZO''@;'; put 'put ''T15dZCUwQWZmPmRgWGhOPFk/S1BqLyJiL0wkZEdldCFoS0w8PmcmTixgS0UkejE7JHYpO3JMTzFyTGNyXz1VKlleL3ZmcncvYytSbmM+cFJrYXcxXmY7LGFuP3dOOzphTGlwcj5lJEg3Uj9aWz88ZFE6RlR9OHIhYz5dd2YoN15ZSjRjY0BabTBKeXkuU21oJk9QJGNsJVVEcl5FdDNLdlpQdnBz''@;'; put 'put ''bCIpVzkmXk1vcXwyb2coaiMlSHBZSCUofT8mU1ghaGIqfGNrN0Uxbn5oKDElXW1sOTxRSHdoYnVbWVlAe1k1PH1Sczl8V0ZzTiUpTTJUc3hwdk9VRUJNeVcsdmAxN1laWyVuZ3pVI3smbylBSmdDTkJPeF1SOigzSD9SKnFZdGR0alIjfVg6b3JVVThxJDQmNC9eRFlWMGZGQSZDbElpPU8jSz5L''@;'; put 'put ''RWVLRVBaO14ofDxxYWVqQHRvRnVNLEosYCN7aiJ7WDdJalF0KXpGbmZiJStBb0hqYTJ9MVN9cTFSKEI0e3t7R2d0UitzfGs8clM1SUFGUUZbVDMvLEcpY0o4PWxTeSZeTV06aVViOSpPYGxeUHo3cj15KmtVQjQ1QGowJEJWNmI5bElGU3ZZVDc+QDtjM0FDM04+QTchWjZAVnliajV6VW07Tmdu''@;'; put 'put ''XWAoJUI8PXI/PXtbPWdELz1FPV5MY149V1VaMWBnQHJxVlY8NmV4OWx6PTY6X1NUSXN2QGxReSZURm4haVNSfjVRVkldW1FeT10lZ2lVdVdlNjEzMyxvQDZEX3lLakNrTkB0S2E4PnRCOGMmcTU9JTUpUTo1IWRIe2h8KXojOyEhPklZPF4mVEczPH1KekpPUXYsL2tJaFdkaD1aaWM5Jm4kPCRH''@;'; put 'put ''PSl9a3YqJClfNy50RlFBRUdSUH1rRWBoK2xNPnF9SipvJDlZQCtHOH5AVT0wTV88SHBhPXFmLiFvKndVX0g1LHM2azlkT2VSNH5KPkFHWC86eiRnQW4rcDssSDY+LCIhZU8heDpTJUxxbUc7eWhXeFIhV3omMmg+MntDIXV4OmRjKVIqOWFgNWJ7clJgajQ1RntfR21KS197TW95I3tgLDZaajFa''@;'; put 'put ''fGxOWXZ5PGg4Qj5xOHM5Y3ooJT5nTig/JSpnSjs7Imp6czBLSi90VU49TTx1al0uTFd6VkRMZzVhWjMia3swdGgyNypnKHwyTU1qWztoKTV6REQjJD1JeSxVfnckezh+LFMrcTZ8MDAjbXE3JEtKQUp5WipLOGY3bFAhKTxCX01tblFhTiM4MWdyZnVSVXh5LE86cVIjZTxOWXApKUBrYnxtMihe''@;'; put 'put ''KT18LDxMUEd6fHY9fGMvIVkyK01tMmtUV34hRnxoPzU2emRPTEgpPUgjWn1OalAlJTspaipeOSZSSnUjbldNcXZQOilaTXckZCZjTjZiN1VIaWVATFZBS0lSa2ZaM14oUnJJPEVjOjN3VUBeU0xGXSI0c2MlJl5DNSUvMnw3U24mIlUpcCo9QEtpZT48VGpYUH07aGJ6TUM0SzR1Jj1rYiN2RG4x''@;'; put 'put ''ZEtqS0NxKGN0eyUhSzY5clR6WGFCaCh1YWVzTGk8VC8vJmBOUGBoPFRsYFdfTiQscnMhL3pDfCRGcXlAS2UjJCpDcl0+M2pYP2gkfnF7aiYxTF5Cay8ldzErQVg6JW99L3MmTCR4e1tQaDZhM1ZEMVRZaCZvXShTa2F3djZALjRNIkZGU08oZ3FZUVlCQVNxbisyNV5LNXRDVz03Z05wYEAiYDol''@;'; put 'put ''L3EzPnBWJXplQERIK0M2WitTKCYkOmtjU3AuKVJ4Wjo3YXpHcW0jVlcvV149bHxoZjpdUj1RX010fVtJYmspIiJlSntxcT06aXd5Rn1ja2AzRCpIKzFTdm1ZQF91RSo/ZTdITSQ0d0hnMXxHQ19IUTZfPXJ4ZW1wbWAuTj9LMT9SajpIejNjPEp9fjVKQHJOdiZKZ2lRTzxQdyIlaVJ8cTckdmMm''@;'; put 'put ''QCZRRSlxT3RJNCQoYUIoaCZEOl9GcTAiRTsofWtVK3heY1UmRE09JGFaTyxvYVFfYj1QW2kwRjp0U2BkPG4lLCZbT1hFVlQxZE07NT1ufUVuIz5jKzEkQVlOMU1pUFooak5IfEIxUTZpKndiKjkkSzw1Vz9tYU53LEtERyNaNXMsVEYsQER4S1F5YkdWOld1R2JfUkZ7ektKaWV8MX4+KDllL10o''@;'; put 'put ''KzgyTV9tejQ5JWV+NiU/ZlpmJmorYSU7XSgrOH4sLk1OXSIxJUhrdnhfIyNbQig8I1lGJVQpSWA4Z1UvP11xc1dAOll7b2dzaH48clEzPy40SjsoPjFVMWt2OSM2bHB7bGNvYjYlPnFuVmU8ZHtCPGMlN3FBNGpOWXoxMFY1WXppTmpLS1JgPmBYUCF7LGZqQmsiRD1ddGFtVSt9WTpTRmUsSz56''@;'; put 'put ''JCN6T1U2aGB2cF9jclFCMyU6LC8/cmZzM2ouWzkyZGNZVVhgcDh5UmJBRyQ1ZSw6MTVsfW8hcihFZ0MhTk4/byZkNE1CRFclQk9yW0goTl9NIjMpSClGa2RCSnxCMVFze2N7RUQvZ2xRcEtlbWNmRVtHMFlqKXtLdD1feXFdcEZYVmBlR24xQitMb3piWDMiTHgqJD14MU4xeTY9QyNSYDQ+W2si''@;'; put 'put ''enduIUVhOGRYUWpRRlVGUjVHfmJMTjgjRHJbVjpvMzBNdFJiVGg8WFc9eSF5Qn1wN3xWWDw1V2hZVyJbK3Y9dCFWOXVKZlJrQVFxfjxxS152U2VqKmluJW46b0ZTTVh7QW5HRHtLL3JwVjRmSiZzW3hbYjddUVUzR1o8WVZYZHpMcmFrPTBXaWE7XXtQVnJMLzhaTjhMXnxiaEs5YH1GWjYheTVQ''@;'; put 'put ''TlB+T3Iwci5JfU1FdEpJWUV9QTUzZzhgVihFXjVCZlB+LjtBMlpuQGF9XV8xfkhBXVRJbFRfLl1aaEIuayVOYGVoIW9vQFI/e2lDSkk8WnxYIXVXSmwpcGIhRHt2M2hiUnAxPWFUaUgpNEJtcC5eQ198KjhabnxhNVclOG07JVZuQ0tZLCNhOG5wM2VGUitATDVGb2lxSkREezcqVHA4MXYrYVhw''@;'; put 'put ''eHtaVnxJX1NDbSg3ZyxkSV5wSSRAK2ZENUBwUV9GUVNPUkBsJno6Yn1mY249fS5LXkMkYWZDN0UhLyI3ZnRCcFV2MzF8Q11wRllQUFdUPX07UyZfXVVWOS55TzNxRGY8NllpeXwufUlBdW88XXE3SDJ1NFNMIVdbTkVZTUNyN0gwdVIlak5ZSF93Q1A3LlVaMWZVNiZJNHNBalJFWElBZm1CY3dE''@;'; put 'put ''P0NYWUM4cGI/YH0pREdyYlA3SiNsQTkvLCpaZStlKilUb054ejhDYm4seCMwZUlKbltSOVghdXhRU2ozSjNSRmhNU3BjWCldK2hVPm05dndyM0YkOlR8Pz18WFg0V3t0cWZxLlM3JjpKV3tIOFJdNmRfeE1xL2tRQ3x6c3UwPzMvKSFjXnZ9fTlAU3V7X0pAeXNTc3Ake19KNEpyMWBoX00mbkt3''@;'; put 'put ''TkJWQEskTHY7YGAuUjh4MDhae04rLC85dG1FTUp3SyJVNDtzN0x+WlAzPy4yLjd5YyhbUiFvbGw6SFtnMixxSilFQnojQDdsR01PR3FnIVVZUCtyezp3YE4uSnw0M1ErUVNnJTQlSzBXcnFKQ19NPCFydGkyNVRNUzk9bEwxMntFO2N2NEBzfjl8KFFKY21fYzQyJmwzRVMlUHh2VDkudkwmeTFf''@;'; put 'put ''YCY7cCQ7ZTE8bE9iVk5HLntzJWIhPyQ+YTVXOWpifGR9QlJHWlJGU1IlIV93ZC5OYmZRYXJzOiF2OyFtYWZWJUtqKFNlTUFhZV5uRHtqbjB9QyFQMTMxVS8hc1hTYDV3bG9HRDMwVk1jekU+WX16Zig9KSN0IThvIVpafmpITCJ5U1FWOlZuckA/dExTSjN6fnZNQ09UcXBiZWBMYVpSXSx3WChj''@;'; put 'put ''OClpRjhTcG9eclM3eTEmdmFubkdAYi9HT1h9NSRWKFlhak5RSmplYyQ0Jk4iMHxYRC9eeDFAK1pAYCw9IV1nUzx3I1ldI3J3XT5NUDdzeX4uUz8mWkY6aE4oUDdQbDU+ZlVPblM0Q0hrKT4haFJsajF1N2N6ZDF8YllsfCYlNnBsO19yfF07IUwsPSRdSEF5Z35HM280eihDQUR2V0d9KV5Ke3cm''@;'; put 'put ''XkJydj9ASl9Kan5ZQn5aVDdaRkRPOCJNPEFAV3t3OzJMeGRMdmNMRU56WD9QZ2RadCtwTyR2W15KKl42R0p0bUMyVmV4IihyXSRKaldKdDxUbV1YVzIpXzJxKmddK1pwRmZBcElxQW9TeE5PYWdMfFh2MypobUd1Q0slZFAocWZvYVI4b1dHVHtVRWQpJF9NTXY3VENtZTtQQXVXPykkP0RlKUBK''@;'; put 'put ''TyQ6O19OJkNnby4sWlk8KT00KEZhRi9jLndaMGkhUWZVSFVWSUFCQWh9NSp7Xk1DV3RARH1AfWVuQjp5MlZleDV0SEZFNSpOeERoQm88SWJIUiN9VCJtYT1yYkU6TFFWMVZqOUF1U1ZBWWZpSn5LQHphcXZ1TFZ5W2t0UmQ2PXNWdTtRSjwwZn5vVCUuWFh0NkYjY2NdYiV6P3lSPzlANnNVX0Jg''@;'; put 'put ''UUNWSSp4N0ZpeXc5aEtIeH57Mjx9cSltRlJfUkM5O15rIURgbnxxWW86SG1wLlZBVEJWSSpxPnthdT5veURGK3w4JFJ9RjtHMDUmKD1mRmZSVk1mRjJAIntuRkFlMGAqJTlfOi45ezhHQHVzYjBMJlA5ZztPcmQld2ReeSV6QkJZLDUzXk4kN2Rvaz5PKiNsSDRmOih7TWREPmU8bXErckVfTHBv''@;'; put 'put ''JXVtcDdVTT5ebWNMJnxpeVpVND1QM0pKR2YiXi88PDFgPW03TWlgNWlQfFVMRFZPJHl5QzZVSGk1dl1fK3xzVCR6dUBiN3N2cktVdUZlbncveC5iL1F9e3JZWW9mMnwjUndeNG14enowZEFZWFY+XVtOXyYwcl8lT3xIMUUiKHw8TDZJbHc9anloZj49PVhwdlc7T10zaTpvQ0tRR3RmRl1Sd1tT''@;'; put 'put ''ZFJaXSFuUCVTZ0dHPkx1JSkhXk1UJltlP3dyPnZ5OEd4aX1Fa1YzO08hIVd2OGdmJTVEQzx+YSoobGc6OUxzYm4qLixIIm93KUB0PGc0Oj1pSiNSYChwaXJsNSNjLGkmKVVVWGk2VWBXQVpuKmFQd1BoZkg1Vnh2LmkobWhvaSVRIypyQjAjISlbIW5mdiwsITFSXSV8TGVvQyZaP0soJWQiXT1X''@;'; put 'put ''dyJlWzBzVmBPWHhRQlZFQlozTj5+YDVFdFM/R0Uzem9+YyliPUtMUSNWUDFlO1leNy5bYVdlYlpRM29AKnxuYDhLaHtIOVRiXzwrWUFOaTR2bzQvW1NbZ1E+TzUiKD89SjF8al09Oz0mdSFlaDhZIWxES0I4dyoxNDw9dyU7dFYzejUqdCNTTGcpZUxFW1ZIfUs4cGxPQndTRzg0a2dIPHpBcFdW''@;'; put 'put ''aENQdDl2O3dVUWl9UDh8VWoyby5BWCZseXY9K3xaZ2BYWSVbNVBxcmlPK2o2QDJ1SmVdPnsqQ0ZrMHxPfXNvXWFtWUtDdHRoLkVEOXt8QHJgb1gjQXBDTypVKUReVmJ8Xjo8Ql56aDR3PmlTdXErfTNHUk1galdOaTtkKnZ7XXV8V3EjVl17SEY4VmdjKTcweCtDMDhaWzxYM0Y4bzZdJEwwWmFy''@;'; put 'put ''LF5XMzIsTWBrNGw6e05fPEY1LCl8Nkx+NkZWaSJ2USNBTSt8LCZ+NnhZUXpEPlhzQm5kcmI3LCk8ajhdXk8lO1pOSnhvW0x7djhYcHdGJjdvbWlRXU5FfntxW35nb1I+Vn0le2N7RmNzfWdVVnBHOEBxcGYqKTo4ODp9bilISTs5ZXZ5KHhqfWB4YWttMFN6YkRkWzI8Q0phN11TZERgUHxhWDs8''@;'; put 'put ''M35KblkkcXNFUUxVeCxvNlE+eVEqYkp7amZkYjc3ZGN4LHs4ek0sN1VyO35nfXg2UChwS3FEMjNWISg8b1gvJmosQzBvZ2BZNURAZ0NfWml2ezUsKUE6Zz9McHY9Q3A9JEY8YTlycjUqZG1TYSVDbV13MG5GaTdkZnx7XTZAXmdeS09KNyRRL2NdKHZYRTxNKCwqPWB2YWp+RURqQDBjVz10ZCEj''@;'; put 'put ''PDU/VnpAYVl1VVk5SiRkW2NVaEk3LlE3K01XPmhjO14pVjxyVSh+PzxPZ1IhWXxfLm4lT11vd01yKF99UHFnKWZmZSVGX35mRmM5W1cpeDs8RElIJD84dSFWcixhajlmM11mQi9oJEI+WWRWN0lvbF5eLHlRMWFPWkJtaDRUYXpjZj5VPmUqJjpgZio6O1pVY1ZELH10QTVdNmFLKShMPkZpTFZJ''@;'; put 'put ''LFRCe0YxYzVpZ2R1MXs2dk06c3MzSVJ1OW8rTWolJDAwbEgoNyhobEkkeUd4U3ckaEgzZTAse0dmdDRta0BdMkomMFJlYDBEZEEmV3JJTUNOeUEib0pWTm1YS1YlXWRwKSNDRF0sS1ZYXUM0THF1L0ZWWF1DNExZRSZ6JTBCJjg2UVJiN0xuUkNCKUJWTUZodnVofShqcnFoQnFRNTJjNiUhSGVL''@;'; put 'put ''ZnMoMD02eFQqbzwmU2F+Z0shKHBuSVtMVDRTWlszdFFSWmAzMExXPFdubUlGPkRhWjVwYFc2ek1wWlExTEtFXnhnVz1fYkNWWStvTSRFTVphXlR2Yj9nXyQuT3FENWpiY0dddWxyOSZxYDdYVmBZNzN1a0VTfE0oaWJ2dVA/bE8/RWNgL0xbYk4pIldpb1ZNMi5UXUwsO2g4Pkc6a2BBcSEuX2lo''@;'; put 'put ''cFg6UFpPXmtPXSUhcjFaRishTE5PZjR9R35vdzZqb3gvSDJEV0lgWDc2OnMldS5USyFZa0sjJHdSKDExYldqLiNzVVAxYmBoenpNTDwxd2U1MiExIURFYyo2bFh0LnM6IWg/TVF2SHFIP1RuVituL0BfaFswYzVTKSs4bXM4dl03cnRQbiFxZEVKQllJXkVLbmhvYnQ2bFlnSilycUVGa057KjRu''@;'; put 'put ''aFFOUlEmPWxjWzZhUWpRe3dFQFY1emVVSGUvPHN0bV1xK1E/PTRkVnxUNUFOOHhiMWRFWy98aTlecSlELC9XUHR4aC8yVyJGWjt8WGRTUC9IXmtMJjNtXzd6dXU6U2tNMVRxeTBhRnlMX3MzQ1pLaG5sT0BeWWFOKm8lMz5MfVY0UmlgUWhVU1llXVpLUVVwQ2R1WzwpZDcrTUEvdTlnSXc6dUkk''@;'; put 'put ''S1hbMVdqOFZgKTgjejhCKWEzfltkSXoobj1eX2hyeklKZ28zZEtkeElIUFRyWX1EaUhSZ2s/RFdIWiFZOElKTTZCIyU0Ul1MQD18aVovaDFAcmx+bzFmZCJWWlFGcSU/ZkQvNFgsW3ROSSM8KFVaZFJUUkVSSFJXdjNYR2NtcGhIWCh9Y1kzXXhma0AvLFhmViRQLyl0XSNYYHJYa216Jnk5QWsv''@;'; put 'put ''KXBXbWYrKjFYNDFDMnBPQDVdWlE2Qj9yOmwpLEFiIiIzbTNAQUoze2poc3A2WFYzNWo0d05XOThnNUJYdlhSQCZZVHJBSiZWV01RQzcuVkc9YXNoTVs+KXhMdzhdRXU8USlBazoxfHNPKXB8WT54KHFMNWcid1V0cX17e31ASDNHajBUZkIhYyhCRF10QSwjdmAwYV5DQj4kV01uK1RGPmtWTXxd''@;'; put 'put ''S2l1L0Y6UWxNRTVuejVsPH1ETlo7Z1l1cjFwbyZSd3ppa2UyJXxRbHsqaDZjUitZcD9xfS53R3VMaSZva1lqJDdGR2xvOHxDODArdWwrYXZKcH1dVzhZM1pgL1pMRm1sW19vb0I6T3pgVnBjbXBbTEtpK0JuKkYjJSJZPX1mKzA0eExSW0FxVkNyfXBNUVs0O2E7WjNwdWUsNH5QO092VilFXiks''@;'; put 'put ''YFlTNlY8ejxtNHNwRGVUS35RfXJwdXx7Zl04KyxQd1BWcEEsbDVAQERQQmlQSDwuOS5fSEthUjRNfGs+eXJiYF4mJXl6VVFWeGskaVc0IUs1aiFyJihAVUxIYWpYYUxUR044Y0JgdGxtSXFPWG1wYDchYGpTdi59XkxXMVA5RWFiaD5yMkgrSkVhKiVxPEVUKW1kO0FuRWIiVVVEdTxqWzB0XWxv''@;'; put 'put ''YXJ0ODNCLl83byspemxwdEQpfUooPExBSEgzRzRbZDV1eVYiazgqazlAPSJwQU5VTWxMeFMjSj9IV0h6WSsuUE93MV12dVtzVClFS1BaeGpENj1fcXcrQTU1cWl2QjpfU2JeTyVrPEJFOnc6K2Y2ZU1iWFtvR1lEM242KG9DUE9zfFF4RigqcCNwN0B5MzEwdiM1empufUlmKDlBVX4mX3p3PHU5''@;'; put 'put ''LmckeVdQeitBMkcveSpsSj17Uz9IWSVWOmp1dSFeIVN2cmdKTmNUWjBENUtwbTl3YnJoeFF6UigmfW41S3JWZilsfFBXZ3tJaUlTNCRAclFbaUpSSmI/KkxeNiVRVUFTYCZSTChYXiJhQ3QxSCx0MVhNdTNWbDVfQThjd2lwSiZCPk19Nz5xVHJPfFheZlVKZnt0T0g9Jm4kNihQZT1Bdnk4M2FU''@;'; put 'put ''PmJrUUNuT2VyYXtvWTBJclkleFZtXVQ5cmZFPXshT2R2cUw/TFteKkUqLCh5QG4iTl4iPX1OSFN5M1tWNDZJTXN7NmowYSIhSChQXklzRC54bSMwYXQsdE8jbnQlb3ZxYkhJWXVQMz5OIkVaSzBRaSV4I1FrbCNffDxUcSVzdmxNXWZ5eyM8XnA/P2FPTEViU01gQ0tPXTwoYXt0cFBYLnlRKj1e''@;'; put 'put ''WHVHWTpSMCs+IVV1I2RjfV1kfWhdT20sbE1iaWJlQWV7LnokbmZ8Nik7T2V7NmdJTXg3PGYoUEx+UTFzWGFaNlJAZzdAbElvOWQmO1FASlhCNmQxVFI+R0x4Ik1PP0xZS3Y/bT9ZVixNKjgwV1dmK2VWQypuYk1OYGxdcnldYkYldz5RPH0vWztbYkY6KlV4SzYxK3Z0TUgud0hsNXorWi8wc1g6''@;'; put 'put ''dzJOLyNYKTVqdGhOP19KXmQ9SV4hb21te1BDSkIuKEAxOl53JWNRP2Ftc2cranUvUWhDYipwIVNDdEcjeG5bb3RuNX5OQ2oyMGFENDNVV1tXTWFBIUI+aEppOEFxX3RVbF5FUGlzXmg/eyp0YzlFQj5fN3ghXXcySjtKeCxtZiNRI0ZDfWhQSzBLK0E4dWlEZTkuPEA0Zyg1OW9BOjZHVC9fMm5C''@;'; put 'put ''V2w0YDwjc0VmRHsoPEtWPShYWChDTl88c0xlKT0zLlYjbixUIncwaStPQztqQzl7Uk1fY3pQJDZiM116SF5Idj0qQil2XypxQilkJjhsVVg3V0NWSnF+dmJ2PXZDcUFLKFpnSzhHSzc7I1A/fWxZTztqWGpSOzBKUUVTbGBYZF9yRW0pJXFgSn1dSzorM28mYmM5RHw3OnRJdG5kW1lJRFN7Li8+''@;'; put 'put ''VjthZkk3RFMkS0o9e3lFQntgPy8mNy4+cnZMWTZ4T3xJQlU8Jn0kbVIhWSFFOXkoXU9WLFgwQ0wpNUNSPzBkeDg1Xyx8b0RWSFUuNX5iZikpTjVhIWQlYmQ7QnBwdCJYPW1NK2c4YilRQmspJENmOXw0JlZuO0IqbDdlUGU6bnczWDZ1cyQ1cyRPMSVndmp1cyR6eV00cWE1MiJxWUNpJWo1VCF1''@;'; put 'put ''JDZJenJHcjN2cX49TXpfTDc4dHEhfkEsSHwjVzQ9IypGP2hbJUI2ZTVUIXVlMCZxX18uSiJtPyFEO1AsL154OTZ5W0NEdTN7PHw2ZUR2SlZ1Sl1DW1EsZ0E6Ljo7elNBLGhCNyleYDMmcWA4azozJXIyVzEpWUkqfmNFJWZJPjAhWnRkQExAQC44IXc7PXlifFhJKk53MylEOH5lQDVSOlV0fVd1''@;'; put 'put ''X0lvXUNaKTdMd0VbbyZncjBoZXpUJC9kLC4yYzNNYXlxXm5RUE4xOix1Rm8kK0IjYUt+PlpvaU5vPSlbNWdfWTNdY04sQVY/WVYpJV1Aajo4VXVweT9FVyw2Xj5nbVJ6KkkoKDJhW01mWz16YGtkaXg8aXhVMj9ab0B5Rys2ZVBlTFF2dnZTK2U9dHBUeHlaJW43cV8wQTYzcVVAe3R+P3B4JGRg''@;'; put 'put ''R2Z4Kn40YWlhL3UxNj1iZWgwYk8+TXB9Yjk3SUZleFpsZDNpPElkdyk7aTJRV0J9KT1VRHFQTHp9T2thOkhBazxvVERdcGQyL15xV2QvaHNIL1tPS0hgcCx1YS5vP2lxOjhdWSZ6VWlYbSNvLDM7YyVkdS51Qz5bdjRtcn5DUl4oZVZoNXxzPjNhIzp2YTBtT3AiJXQvOmQvd0hMOSZwWVgrc2Mq''@;'; put 'put ''TFUhfVtSREBMeDhoPkFkPTxmPG03Jjtaa2wpQipyOUR5Vk03KT9SWl5tTDMreH1paHpKTV11fnNRO1NjfD49Skd4UEJ6fSh4I2tVO09ZZXlJW1A3djwsQmpuaioqS09qY3tfLmpaMDxeOFslUTI3Xy89RyJIVHFhaC55ZGUiYTswc2xaMzZsQCh3VUFpVVp8VjI/NzFCSVAxfFNbaEFSYW4mPXp5''@;'; put 'put ''SExJOlBubVFKZiJRV3ZWV3E5Lz93bUNQaDF7Jm1CUy5WUFFJa3BWST9AYFBaQ15XOyExLHBUcHFzMFF4ZSx3bUldRjtMMkIub29nUXZ0ZyhCISVYeCxPOy8yZ3xKZTV1a3A4YTZwJlBtXTVZKk4vLGh5Kz9zZDZnJCpCNkpYQzUuNFkhbFQiZU9kXm46M2oseUlDRT5jczR7fDdbJCUlenxhIVNJ''@;'; put 'put ''MlNzVlkucU1qKztHMlhobEUkak8wJXVBRHFyelg+ZzIuKHgiYktqQCowej45e3s5Z2p+aFs6XUkqekhzeGUsVDpVL3tCVDRSUjwzNDMpVlZhVjAkLkcvcndCXy4zU0tBTyh8RzZgcCphQSkvUHAqInpdajZfWmcsJXw2fH1ENyx8SWM2dzZ8K0NFV1p9WFdlKlJpX1IzSWxTT2pGK0deZXomQEM0''@;'; put 'put ''cWt1cFZtNmRvVndyazp9JTxwJTNtS3ZfXSZTfF5lPCUrZ2s5M2UyJVM4IXl6KS5JXVJsWGpLN000aWxOXykmZnNpWThyc2UuWVJZTDsvO0ZVOXZbSGdAWFI0Qzd8JS8pQzRERlcqbCRTZUI4YVlPNXdpZjU4TGddWFciIlZzZmhgc2hCI2FdcWBxazEubyhNa2k6Lm85VU5gcnBnfmxQeTlCanxx''@;'; put 'put ''YWR4RDtWV0U4TDx7XiRwKn5xRkM3WHkjeTw5I3U9TmlHNTxCNi5bd3JGbSksWXt7PUl8JGBFXUUyO1VZWiRxWF5YTjY5K01JVSNALilGN3BPTFhFQ098YmF4PWFRRlM1Y1lIbSRTZX0sO2dgX2Z4ZHpAJHAvfn0yOGhmTkRhZl4rKylHRi5ldS9FUF00MnphT0c8UVJTM0wqN1hteDFaImQ5LzFj''@;'; put 'put ''MjZsdF0sKz1XMHRhcTE7ImksSjYyMChzYThmQjBoajJzJlhCPSlLOEoicWY5dy5DOXZuVnpEUXteTDQ4X3xnSik5WjlkZy9wY10uJix3c11PXy9jYjd5eERrMyZJSDAzIUcyLFQlOnUzT1MjZzA8MEVOeVlONj8rNF1TZ1F6ZnhIZWh4bVIjKlJoSWo1QjFNZkwhVytSVU5HKkt4RzhjTzlPcTg+''@;'; put 'put ''OzZMbUQ6VWkqS3xSYiZxUGh3eiU4PmVpYChsISp5XTN4JEVTTThdQjgxYSFbIkkmTn1HL2N7VkJHKXo/YjdhVFRaZUkqVjR3YnlHUF0jLzBhUzFfTyFZe2NiYE9ONTtTOnFeZFZAYXRSQlkxPDZ4KWtXcVQ/LDFjYEM7Z2VYVEA1KnRSOms3RzVTI3g5K2BLfDl8b2UxTmBeMXImJTx2OV41JXBq''@;'; put 'put ''fjhaOnlySm03JjJeU3c8e1ExcyY9ZUB8fGB7OCEwcyY2JXB3alcrTTA+ZSYsdUhjTzAqPV5YOlBIOVpuIXpXVGdqcFVgZng1MyYjfCRpOEdHOWBjWy8jcVUoQWVzO3BtQjhKKUh6eSYxSGpPWDViWSxAND1ZT2ZgUGheZCxKNGVgQDYlKSskTyklTmR5MTR2e1VfdnZHOmwsN0Q0WHF5YDhuQG8v''@;'; put 'put ''LEE1ejF3LmF3SXVXJV1gbWVdWjVoZndScmxRfTdAdSJLUitJOl9Tand4Y1NwKHdgUlBLSVQzM3J8SjVaaiNicWQ2MURHKHoycExZO3JhN0dhdSlwM05dciROYWwjRjEudzBTM00rNiFhW19HZT50cWR3NjZxe2oxZmdOTTpQU11gTl48e3lZbnV1bH00bGVLNSU7STVINTBpZU91cS5TUSxtTz9n''@;'; put 'put ''Il5tWSIlKC5WeXE5Nm9mJl5LVitucSJWZ3lXZ1JnKyxjW1Q/TiptW01MekwmUCUmcH01SDhsKmxCJkxRaUI3cCZBUVd3b048fklvWih5IUh+QFk+cGYwblNNL2Q0UjQpbFRDbW4qfEMrP2g+UmVUPD8mK3AsP3h0Tn1RZSklQW1DRT1ddSszZnMjOSZVY1V6O2dEOERaT0g9XSw4JXB4cFExd015''@;'; put 'put ''MDxBI3NBejo2PF9TNnxnSnZZK3F9NXBeT1RrJjcxdilFRyN6WHJPX1ZgUzh0OS4rOEFPMUsmZ1clUXBbZD8uM2ZJSG95ZWAidVVidUpKZmY4YVVsfGJwbCJpdTZgYnhdMSlrcjhwOCxsKSU6SlM9QkUqfXApaUtWRCIufEssNnthRTQqcFVVaWkrTXUxZyFOU01pO2AiJDVldypHOGV3UFJsV2N9''@;'; put 'put ''LFNJUWA1aXUiTlAlcFp5a1pLZGpBXiJNWDlKcCIuR2NYbCIzUUBLJHoxNzw1JHJifnBqVzIuI2lNfTZgd0hmYTdIekc8bnFMR0swQHtdcVc9XjlYNVZyfS9MeS47SVZtfTtERz9eeHZLZHgrM2JJb242JUNOWXUlRSUscmd7Ynt0KWpSSSg8Wj1aO3RkS3xhQSg6SnB+TXxHYChvY1tuXVVEKXsj''@;'; put 'put ''amV3OEklIWZOOT9zQllyNCgrMzgrKDJzYzJwRCYlJUZOT093JTJlPV8hTVYsOEA+NiQ0T1QhKFlOeE9YXV1GbVBhZkU1I3hRc0Aqc19gUyhgeUx1Vk4/ZVklX3FmUmpTMXhSby48MEBnKjwwKihRXVtEV1tkdFp8ZHd7JSg/QzZUSUJacnMwYFoobnRhY2NsalJJbF4/W25XfkYhXTk/P0NpIyFZ''@;'; put 'put ''PHNAZng1b29+aGlreGdXd10zdUhWJWR9dF5MXWxWcyRJJVQlYE4pfn16cTtYb2pbR29QOVlgWVsjaSpaenpfX2w6M1cxdiFJNCFfKShIbSsyYmY1Yi9ddSokUEpbeWgifUVSdTZJVlgsRC90P1RRenN1ckRhKU8hKmhVWGpCaFpnSUZTS0NmPyhGWFtdfHxHOyh5KlRIMUwsaWxDR2NxNjVlQ0ha''@;'; put 'put ''eFkuU0todkI/Tnc2eTorbltFajJUVSlaSGZ7WzNAUiorPGx7JVRnQltreUtQMXUkP0tqVis5OHJpcnklSW5QRWEoeTE9OzJmJTdvPmc8b0JwZ3h5IX4rW1V6c1MoUlcuNm0zUV9oL1BLNl5sM2lEIXAuTip0aHlSUVZVJD5aK1N2Z1FWRE5pLF1OYlV0LmUpdGhPOlF6OGMqZCxQOHFOPz1RVVlf''@;'; put 'put ''S1EvelduPDk2Q254RF49NjlCVlZkNkpKeCZAWjh3d2I0MXtEPlolbU1KeCZ8dlImYyovaF80ckRqTWJ8NGFlYjEzUVYqe3lqdXF2fCZfZzlSK2lrPkNiTWdFX3hkSGRgQCJfO3R1WD9ya1BedE9aQkM4SldHbiIkWUg1NThneVpzaCgwWDk7al0hYDVfZSIkYjE3KVp8Kz00JjRoNEMudyxPQlZ8''@;'; put 'put ''QChmeUh7QF97eVJvZDhtQ2IldCFWUl8kNzRXRnAzNCl5PVs3WG52am8hS0laWCkobWI2YzZKIzlYN1okfDBJIXJOMSRfejRPP0pOP0oxN3U/bj1ocyZeZ0ckOmN2MisqKXU1OlFtNyNkaT9QN29Tbm59Z3NRZTFBWn5FP20kPClFfXs4Ll0/W15Xa2lURlomY0EqPSRnfD0kIzohbFVuLnlLIUMu''@;'; put 'put ''eD02QFVpcGZLKF5oPlI0PShhViNjUWYhemIodzNDW2gqQk9SXUkwbkpdRHB5Q3FVdnhUMDxWVEZjRyJKVGdqP0tYVjJLTkEyajdqeixVeUdTRjtKO0p4TTtkNjQzPjI+aTozdnxPXSQwNHlaU1MpYz41STEyLEg8YS9kZ15kUFkidkBCMHZtW1YlfThLaDciWnUhR1h4ZVtLST9relopdy4wZlVz''@;'; put 'put ''PilpPGApPEBQV0k6LGZsPSkvKmtYey5oVSg4U0QrWyRLSVpMdGl8aXlEV3YzQyN1WSN8ankoP3QvMkY8SDg9YEhSWUpaXyk/QEhOOzVqSSk1bGk3USlxYktJRChfPV5LVyFhelViWDh9Zjl2TW9GfFNRem1zUzR1bjdyJXgvUnlSKVF1MWpSbmV3OmVuSUlJOkNgOlYiNW40RkdIT3xEQCk/KWp1''@;'; put 'put ''cjwhcmtRUiJ9UDgrKlB0KzNNKXdJdjhtZCk9RyxeX1EkYH0kX0A+LDJYQGRWJTQ3Vmh3VVFkLzR8YmtQOzhoZmA0NnViRllWTk9iRGtLW0YuUFouUCMzMyUmKnMqYDRbZVdhM1FAOTNbOjx7c2gpNil+NDs9PVg6TEN3OiwqcDFTXUdeQltDNG9WZn1AKTI8Tzx7YDE4bl1HLFJASyQvR14hNFF5''@;'; put 'put ''Ui43ZHZ6bWQqNnVoVGM3ZzBfVj0oImVSUlcvcTU5PFlvOVFOeTA9KjMsKT1aLGZoRX1vUzRDU31jcnh0dlRHR350OE40P0NNP3tmdEY4bEZMd2ZBe29+aixkfWI5OEVzTzhpJjR8UmwqXyZnSXpYLDU7RDpfdlBRKiYiTV18fCtIYCsrTTx+XnJtYFUxSjJWOWg/P2UvUEt6eGtfVEBjMz4jc3Bg''@;'; put 'put ''eVIlbXc/Oy9nUmx7elg/V3VuQCFTVXF1WUkiQmRpIm9SV3ZbJlR9LDNXRHtnZ0NLPXR+V29aJnR+MTVnQjJ0bygmQHJUXztTbyYja3p9dj5bIzQkTV5iJDYvXyNvSHArIzVlJm51N0xdY1BHX21gNVshLy9DZzhHPTpybDpAbEV9UlZZKH05ak8pflJdKEYyMEhERTpFbEplRkx1VClHJDAzeUBP''@;'; put 'put ''JHExXilRNSl1RnhgNXYwajJNfChhdT5SfiV1JkpJeDNAM3M7WGZ3cW8pLD5WQHAiXVZlOmgkPnUxOW02PV1qRTo3IXJIVVVBR3lbP3xlPFFVX281MmNRakdybUo7amVgYCtuO1tiamtlbWFpQn5fdVZjfEozKUxxdUZSfDh5PF9gO2VdWm9XQz4hPyYqNk1SJXdMX3U9VXxvQWhUIT9FUn0icmVL''@;'; put 'put ''bChdbzBYSSxWSGdSa2lifnB8Zzo5WUtLQltgUk58PlBUZl5IX29vJntbMjhDQD1aNUo+WS9TayV1SEdwaVlKXT82W2BMRGE7N3w3eH5iIms5PyIqcE49YChgM2dkREAiYll2JSp6RjY+PlRpVkl8UUpvamxDJj9fTD5oK3JPPSxqaUx5LnV6OnlxdjY4b20yMnBvJmlSVjglOXU4K1Z8QGZbUDNo''@;'; put 'put ''Kz00YyoyLjZ0eExLM2lqeFI4e0NGaHlbUjh7a2N7ViNBMTB8cF0vNWx7LmRVJEZ+JU5xbHBza0E2T0MlKjspdzV5PHxwJThCPlJbdHgqVn5yd0duXyZtUkomYF5yOk9keVpZekNqR0xKTHEsakVzPT9tP3N5aFhTVlMoNmJMcT9eUnZlQHhSRkxWKyM3eGcoR2ouUFdeXVF0Lncrcj0/az9xTXFA''@;'; put 'put ''K3VJT2V9Qn1jaypxMTwmYTZ9MyFhXVhwISU8Z2hYSUVWVz1aJmczZytVKWFdfXpJLyk+S2BLdX4mcVF7JV9hVk5PW1F1ejtdbFt9LnVHcGAjZmElTl5DNkFwNVQhS1tFNlhYbzB4eEMiWjUzPFZyVl1sfCxHQGRedFNPN0BsXnIzZCY7UDt6Y2RvKTtfMT1UMDFpO1IjVS5uS0IoPjFJS11EQCVT''@;'; put 'put ''ZSgqdXhCND9ldlk+Uj8qWDBjTUxJZ2dOWCNJOStsXWpzcVJgTjs6NmJ+SSNPbU1mdyRiWG84WlRje31UY2xsZyhgbiZ+TD5RUHVjT1FyWFNNcHhvJWdFJDNtNnt3JV9ZKlJsI248LEtxQ080SzY7JlR7fFFKOHhdanBEdClUYmllQWsrc1ZkdkAuTnN8P2xuLGxKTjJCTDs6ZXZtXVVfbT4zT1dq''@;'; put 'put ''NXY4JU5GY0t3S2BOKzFWX3hWQ1teemh8UXRiLHRVWz80UkQiMUMhPXJDM3I+b3xqc2dNPm4yYFpnbFpfV3slX3ZMTGhebCk2ST9QKUN0Y0tsP3xfWzcxOjZYSUI6ZFFkWSpyLF9SfHVja1hSW2FLL21dNWlDNCoqQ1o+I3wyOik8YmBfZXRqUj5jRE89Zy5bOSJwSkRBRlY4QXNrXT5WS3dLOEFb''@;'; put 'put ''bGVhdFI2OG97T0NtP3VXU3AxNE9YcypIaltiOy8yJWRdaHxncSVbJDp8RG45XXJeX0o8c05iW0IxfGE6SClvUXxLaSxIeHJRfFEhTT9HQUFPbj9NSksmVXtJPVV6blhzfiteUm4sR001YHNaJVcmLjBBZFh4RkNDOn1CWXViTmkvKFF5Unh3T3g3fGlbdnZzYG5oOCREQHBmZDs3LGBucWg+VTZa''@;'; put 'put ''L3V8W0YiRWF+Mk5PXlRrLFZvYjgoOUVrSE8yZ0hbQzYyU01dYlhjRXRiKTQ5W1NTSHxqaEgkMmFbaGlzbnhLVGo6NktSVyEqTWBtLywoTFVBXzU3ZD93VTQ/bTpsfmFMZW9oN058KHFCUWdhaFY+Nk1YLiVZOkU1djlQT0pqXWleMyk7aWVpUG5oXy48W0clMmlGVVg8RFR9VXlSXW5dQF4yeFJh''@;'; put 'put ''P3BoRFZAe3UpQCY/SzRiZj15Ukh9QXxYYmM3MU1Dai5pVVZjeCx7aWM5REg9Ni9oSCo0KVNeRkE4bkVTODdEWUkpfG9oRCZuTHN3KipQZyxPJUgwYml2SWNren5JblpYQnY8ISg1PSMhK2p3STMueU13OD9pO2taUlJ6Z3JUNyNvVmRmXWpWV2YrSjpLPS5YdC47KVkjXy8sTjZNUSYyViZWUTVA''@;'; put 'put ''YTpXQm5nImNPNTVkdTVsckhXT0lKSzdpIS9uND98Tz5VZyh9b1g5M3J4LD91dz91KUV3WF1iW2dPZkVOWD4uZWE9MHg4byhSamRzZ2JSb10jT3N4cVYhKlg6Y3l4JEU0YjFfKTdraFtiRTBFdU07YllZQU9XUTx0VGByQlJMMyx2dHJ8Yz1rWV1xWCQ+TE1JYjVAYCp+bXgpKm5DLlJEVzFxZ3Fe''@;'; put 'put ''NzVpWXV9aThjK1NBW0ZVWzE0aUVHfWEzUWwhdUozN19meVlxOGlZZi4iKWdTLnFzb0hNIjBAZjtSND1uRk93bGslJClEeHZUNEd0fWpzMV16d2owXXpaXlVHLCpgKiM7ZEI4QWVCOHBxQjhAdT1ARVRzPE54NmYqOUJ2fj99PVZRMTdAODdkQjg9LGx+MmMrS2B3SWVJcj19ZG9xKzRzTSY3dj0w''@;'; put 'put ''MU1MWVltbTtgXzVdP3lUendmZCs9UlNqM1BIKXgrSWssMWNoUStHQzJRbioiakg2VldbRTpMcGhkcF9AVDIpd1ded1VfJDs7JX5GWil0Z1d9ZE0qKE8wcVssOGRaSVpTUFUyUW1AMVlyczxkQiZXcHN4OXxBcXRdI0c4L3BoIlZ0fCZHbnAxNUhvLyZxfCZnYGpjSUx9O0ltN2JafGRCLERrNTUv''@;'; put 'put ''fUBWZHouKjZYVXJyKllROys0OVc4dEh+SFY4NkA7SSNAUHA0aStzUGByfCFSaldJJXQ9WHB6ITghKj1JZVksWTdBMC5yJX51eCxZV1FLckdjVlZ9OmQhY2RobyVpUSVFeTEmVHhSVCQ5IndLZTdtYTdbIiR7PVdeYTpqK3RxaHM6VF0xaVN2O15wcTZJMUdkXXAqfCwmclFULDNLZXR9PyZASSNA''@;'; put 'put ''LFJ7Ni5yan5hTDlYZi9tQ14oK000TCl8enk+JHNnPCxyfHJzVmRAP2w/WTBAIiYxUkx8eU9wJmlraX5JL09RSllwNGlOJVJ7X1tPKyxqQTRtZSQ0W2JbZ0tMazdqWC5qNTU+VUM4UjghWWdTUVZEIUUyKjE8cG8xZ35FTiFATyVjWjRLKjZeW19RLiVaM2lzPiorOlNReDFMRkRJZWBuPz5oIypP''@;'; put 'put ''Kj5hIiVqNnd+O3ZsQH19NkZLekNGdXJUN3Nna2lJJTpqKXNfKSZZTE1fTjU3ZypIakYjZHhFWmlGSzc2P2pXKk9RLF9zVEp0a2dVIkc2O2o6W1ZSVyEqeE03a3Q9R1o0OC41VW55RDNMI0ExMFV0O0QqZDY4cmdMcUJ4MW1bM2I7dkp1JCQzT3k6ZE9SL0lreCQqQD9OWHhpbVVbUmdLfDF+VDRH''@;'; put 'put ''JStza1tSUnwuaWFLYz5uU1N+TSM/VzddfWUwZWpxLD87WXl2MGlsNWgldVU+Yit1P353d3VsPlVmeTJoTyQ2Lm14b2BySjc4JnJhMUFkKixlak02WCNFMGU7aTpNN2U2K0hvJVRRYHE8dmNQLi9NNyFhMWwueipvbHBYdnRUMkt2OG1gc1Q4Z3xYNmxfNTsjPkhIdl98YHBZPThaSFJqMkhgYWlv''@;'; put 'put ''Tz8oLld6W0prcz57KDkmVENeZkImfT17MEFxWT0pRHpFLGg7JUI+YEloSHJ9OER7S0kxTyR8O2spNEdfOkJUKy53TVUxMzVwdElvTWZyfWBHUCw8WytSIyokSVFqJilCSUB6cVpGPlE8VFlUa3h6Zys9QGo1Ynp4emZeI04uaDcyNEtdNCN6TCxOZT1aO3JpOHtIXV5dVj1NOXRvelJKaVdZO3lx''@;'; put 'put ''a1d7V2RebDRxR3pGOlNOW2Y+ODxRSTltI0AmPUN5I3o+V2k7eUFXSGN6VUMlQmx+L29ObSFXNEpdRFUuaW1fb11yMTFQOFtAKVBOZUpRNjlHNmpvVThxWU0oUk46Nzd3IkB5eFhqNV92MV9hYXhXUURKTXVyIXg0WjsrNE9+L1lhcjIsIlAzRWE5RixNdUF2JUhpNTZGMzIlczJndVUpQH01bFF2''@;'; put 'put ''SjYpWEAyZzF6XTskS15WZWw1d1krKUBIXV1kPmZPOl51dFhxaFE1Ji4sMDlSTyUyMUFUbTI8USNAZCVsMWZVJHo5fF1wMSI6dEdfY2gsITtuMTJIUGg6LFQhOkZ3JiRGKXUmeF1SKTx1QGpPKSN4IXVfTVpwdik4dmFRPD1CaXgwXWJ6VVk5LGdrTlBLb05xSllweVlxZGE/SmUuRHglQGAjYEBn''@;'; put 'put ''QnBJWV1kPyF9Vz8lN1Y5aWtCRSZkSC5KRXk+WlY1fm9qeFl3SXksW21jYlh6QCJwYVFrXSlvQzo4ODVWOEshfG9+IXVlP2wxOHQkXmNDTFlIcFB1YGd1JCtwKSk2ZyJoZFE9JCQ0WFhxTnFfNTxycm8yZzdNISt4TG1XfTsmNnFiY2ciaC5nLG9gdUk3KUFoaWRkeXNTLClRYGtja3hpYk9+IS8o''@;'; put 'put ''W1RzbUt6fCFAazw3Z01Ke3w1UitJSUZBT3tfI25EczpJdn1bYDdLPXlrSFdgTVg6ZF9TND1PJXYlUDFIWXZlX1NnVkswO1lNW2IxPnd3fSxufmc5V3I+PV4kenJSPX1VKH5uPH1VKDhndTE+eTRsMmhUaGpOcWB6Ll10PCM/TzpaajBjPkplcnVKKWl0Pz1fO1RffWoyWCoyXkopZCpKcnohNFRA''@;'; put 'put ''OVdgNX5uPX1JbiY9dWV+bnR8UWgsSmJGdzFHWWhGVUNOIk0pTmRyaVVzPnAkJGE/PilBcUo4T3VTUzloNXYwOi8uMHRYSDZAP2cqYms2NCRubzpFKCVsPmIua2Q4L0swTG15fUE+JCw+WHJIYnBUMEh2bVQlYkQ8ITUxbFM5TFZMN0U4bEgvaUttQnEpcGc4dTgoIXFrZ1pdMSxoOWpNInErUEM3''@;'; put 'put ''JG59NSxhc0hRWVE0MV16MH5AXUp2a0ZMMkwrUVhoeFdoNU93OHY2KUd5OEprdW9lUUlGeipWUSUwIUlCWU9ma3pfc2h8Vj9+b0FpOEhiYisxP3w6bSRSOy92dXRZbypWMTYsSHhyZ29RInBBZkAlJnp+W3R1Q2IqbUpeYjJMQSs+RnF0e3xPYnBjeWc/JFlTaXxFKnJAd2spYyQ+PyJyaXBIWVd6''@;'; put 'put ''Pig2Z29gMWolTGYwQUtKNzhMNTE2Xn43QjtHSlJ3JkUpQGomLnohdURoaXolOVdFV2FfWF9YWDY3WlNYKDJHcVk1NCFbMzpqOkd9Rn0hcnRwZjB8LyxnaHFCWWVYOiJkRiRbT0JlY0xgaTV7Imw0Z084Q1A0cU9SOmEqeiZQJSslViNRNy5xW3ZYVSw3amlRMmdPOis0IXVAN1AzKixCY1krOW4r''@;'; put 'put ''dSJDdSN9Rk92Qn0sJiVDO2dJO3lyPlRAZnNRXUdSKkJ3IyZYcDg+eXIkMjpOaiM5Wm1Xb2R9TCJMQS9yPkMpc3wpS0RBVSNUYzB6LEYwLjI3TSUhPjBWVUs3TDtoTlhYYUN1UUBAbjhCWUROWE4qaVpWcERMVGE9MCwvZTtPdjh3aU1BQUFBRHJDQXc0KSk8dkhIMlBadDJpKF06Y1s5XTlacHIx''@;'; put 'put ''O0gzRCspWTAyUlJ2dEJYTEFBdVd1V0RBNUZAfSJ0RDZuYkxefj1LVUVDUEpZZS5tKWBkIzFfJCZ0WTNUaywpdnJpbVU3LksuWThWPjZlNk0/T0hkazRAQkRnRl1OQ2JuYWR7PmV4dTM2TjNXdlh8a2c+ZHc2TCEuUF1KPSIyJT8mSEB6MzhGYEU0cml9RDR0UndEKTFVKW8kQGt8QG0iNFB2W10x''@;'; put 'put ''P1ooX214eFI/UypIMSFNPk4xSXxnV0djUnIxbVpYKFUsIkN0Vm5yKHJ4PXRaM24qSTd0LmlFeTl4YDVfdUleQkZIbnBgVk06X1QsVVkzSmBbJisudTJxLC5Yb3pgeE1SKjA5dDtRQ2ZbO1N9YDBQSldmQE4qazx1JjF0TlkmVT15eW89QWFuOFZMS1dUez1lSjEqRilrMiQuPEVAUllSQytdYX5J''@;'; put 'put ''e3BgN2tpQEVySzAlaGM7W2gmeUZZSFthbGlqWF1sPT5lQGNAdzRKTDk0T1lxUXBzTVVYXV13KWhyKVk5L00re19HMCxDXix5bkRuU15pRU80VTVzQ3Esal15ND1RXmAxMGI0IWptdlJ9US5VVFVbRTc7WiQ1SlI+UnhveUVeMm5QUTV7YD80KlM/MjM3IVdIdjRITmFobihMPFpjZmJNRzUlRW8v''@;'; put 'put ''KjA3XXN4d3EzYjdnSUgleU1MSThfcUtJdm9INVopbnshclZZYyJ9THhacy9uV0Q3Py9zejg3elpaY1BhI0VRTUNPfGNYLDZsc2FRXi8vRFpvMkVFbk12LEBwcXpbWEBRWn1sKnM9RCkrKmlPK2ddZURdRyViXkdwW3Y1V0xkTTsmWUQ5fFJNclRmfXhCQVlALH40U2ZrSzRnL2w4VyhxOyVzcz0+''@;'; put 'put ''UE9mK2hDMGZHKixfTllafU49RWhvYXl0MyUzRFJbKmV9bThSODQ4ZmN+aHhwPWIzVHpkQn4laTk+I0IkXSkoaE9kSWZHckssJnpDLmZYSC83LnghQ0NxNHRyXU1zcD02dCVFZkZ4eSMzUWxLb3xqaVp7QUtwfFFAfTNCcXI6SWtqYno4Wmxxbk0wVn5CKnVfcElfTEkkfng/LzJDdyV6Wjk6N1Bo''@;'; put 'put ''Ll40YlRqWnF7K2teO3FGYGpxNjY9X21ubGBpLm9uV0dndD4wYk4jITUjIltNYywqP0QwdUR7QmssXUQiNFd2dXRaPkljZmg2KWNnNGtdV1FrXXY/IWs9ZGZYOGB4QiEmbV81ZmQqIyFgZkdbL0F7ckR6XSJ1W0VsXUU2JURFPypVal4kZ0w4UDRRNUh7Ml5zbzJoK2hTdT8sQTZSMCpRdEJDTlkp''@;'; put 'put ''Sk1sY15hS1o9dmZDfGhKL3xSd1hFPmllUC9qXkQxJmBJYWo9LlEqaFt3N1Q4ZmQ8N1hlPDt3YHU9emkmeVdFWyYjVlVYWixXW3RWME51ZiFgaDtbJH1kJi5bVFFPVnZyMU02TG1pdj0qQWdPZGN4Lzp9IVs1JHxbRTk3TF1oSFp7fV1aIWNyYnxGSmFDPmMyUV1PYVNZTUhxOEYpUyFlSyl5e1pO''@;'; put 'put ''Wj5nImpdOnxeU0owTUxaUywmSm9CY01UMCpxMzd7ZVlTIiY4PmBYeHxiL2wpbDYmKzssaUgjQHwsdD0pWlF3YylabkslVSJBUV02Tmt2Sl0wS2w1ZjkqaGJNLHRdS2A4Q0NiJTsqPGVsNUApV1JVTmc3cV9iUnY2c21pJTFufDF+KiRvMys5MjppPFFEbCRuJDV1QV52N2hKTU50bXQrTHpCVy9U''@;'; put 'put ''aXBITDJ4ZCI4YmQseU5tVTltWUxCTWp9PlI5ODR2I2lMZF13eldQdk8oMW12TjkyXzxNOClhfFgiOi9zekd9e3l6VWd0UT97bGx9dU83JlhgO3FeKXN3YlZqaSpsdWJ6d3RZfTxOVmZ7cVc6NXFVP1E8RzJbRjprOHxXRUspMn4yODIlR1NnT1lUSWZyRlFEeG4iIWBFfEtOSVNRYTVWYUd0a0pC''@;'; put 'put ''RDt7fVZATiRPWTpre1ljOWl5SEV1azdBUnJ8YXE2Xj05cW5RJUt9Jlc8VEQlMCxsT0wvVTFyV0RfT3JjQnhXez4wKzA2a2d4O1lIQCEjczEhR2w/Z1NvNUtfZCE5OiovZHAxLl85XTgwRyNTO3heRjIpVlFEKGNWc0w4KzNLNil0L2tJW35JN2skMXl2ZVtsLjMiUjEkUyN6L187fFB6N3xJQ1I1''@;'; put 'put ''TCZCZGtOdlN6UCIjWGhsdEQkczNsVDRRP0krRihAM04wNCJAYzsjNHpEXmlhPGowW2FVO0MiRkJOYkQhIUNNRDd5M1Q1fjFeJENQcklkMntRN3FWK29wUHRqanx3JSkzZkgkME18ZV9lRDZafWZsKzc2dD19fWhAMHFkQE4xUl0qS0RWciIkaF9pSV1UeVlkI0pFSX15M0spYXhZZEQod0Y1OkZ4''@;'; put 'put ''YTRLez94UUV2K29BOXomOG5JezIrS2Y0RmRiaHkkPmJxSkF7RHx9Zy9Ca0tuTi94dURkPk41dnl3LDErSiMoVTl8THNQcUtUKDFxYj1kTURZbHIzPzVwXytPVXgiUlRWcmwxMVQscDwpe1hlXSN0XmZweypaJEJyZV5CPyw3Yzg7QWcyZ1B3aGU2XjBvQEdPaC9TfFAiZHIqN15sL112e1p8TUNd''@;'; put 'put ''dWZvZzpEXnN5UXIxQElRNFo/R1F1cXhdXT9NRHBUfmYqdCN0RmRnJVQvKzsxW294dD9NKWlwKilaVlB2bHJxdGVAcilhUn0vcERZMnA0RUxrUTQpYzpkP1hQVk5EOld1bS5CLjxbYkhiN2MjeCsjP1tSIkluO0VRV1dMKjIrc3ciK1J0TXNPbnU3enYzajp7WG5SYCR5PmAzLm1CMW0rJTVxel8p''@;'; put 'put ''JFRje2MiKkA1MzlpKkh0bCRWNFhnZmVTRXdXbTQpeDpaLCx8L2hzYC8yT0hrZnl+KzRFbThnIiVoZlFbfTpDdmNiI2JHdXIkS1M5RnIhSS52bFdAKTRFSVhTXmdHXStEdUIhPSVTOThQRD9DXjY2T2RHbS5pbHVNOW9HVDBeTE5sXVVBWmBBO30mdGlefG5vS1UpVTRzPD5CfFJ2SUFHRkZjOm1P''@;'; put 'put ''eV1+NUo8LGJZUkY9M2phdHQ1OEZURkQ7ZExVflFqZTZCZS54amNHTjtaT0M5Nk1TZkI2fjNESllnc1gqNHh9MntiSCYhfmhKNXxsOFY3M0osVT09VjFeMzNfXT0zO3hnSTdmK0wkVWw/dTwzN2Bqa2ZOVnw+UVpiJFcld0s7TERxbmwlcEk5MzJEYEBIclMybUVWclFTQD1Vcl1MciY3PTA1WzBJ''@;'; put 'put ''LmFsMnRnIVJZLltWMFpPZGZleSxTbGhIekNdIWI1MGslXl9UNEskN1lILFc6UGAoMU5pTnMib2EkPkFhRXo3PyhST21gZDo3LD1oIW9oWHQiOyFbVHNJTjc+M1dFVXI3RTd4QE0yaEI8VylicU1dQVFDbjdrU2AoUUM1Lnx1OUlEb3hKPUhTeVo8VCZdYWBuMkA+JmUlcEZ4NDcoIXlxMS4uSzsj''@;'; put 'put ''a0gwSDcqPXVlJmQ7QFdje2R2IldlLDlmTmh8eCp8Il9BPUJWUTshTGxuQjUmUV9+a0kiYSJaImZ+SjNLYUElb09GQDcpK01TdGNSb2NZITNNJmgpQE0mT35pUyF3ZHI7e1k1XSM9aSxgayRWZV84Mno4RSZvak0kW2J6TjN3aHNhUilIej92eyRdLiUwQCl0dlpWcXgsSlJ5WUdPTUpfalZgRztN''@;'; put 'put ''ZEFmKChtXUtDV2oqTmozN3o6P3tobVBuMDQ4cEIzNjpPbkBMP2xNcSx0Pl4mKGRDTj53RkJ5NlJqMk9oU1RrQ2cySCglezhmc0JRRHEydkV7WWZzO2JpKE57fTtPSiFtJT1EZS58a240UHcoSERVTiVdc1oqKjQ9e3g9XjA8YkZVKVBvW2t6ZlEuaUdnaEJmUWZTKUYqLl5DYDl+dGRTPk4jKF9R''@;'; put 'put ''c1JrNGR4MzooQGNNeENVOHJdQ2FPLjUxQ1VkbiM7Wkd6LElGT2NjdzZSYFspK2N6YXpPJHY1Plk2V3Jwe1dZVyRSP3k/ZXtaZldQJCoze2dhI09oVCQ1W355bn1CXkEoR1BWVUF8XiQ+Tmw7bD9NbW5KIiFraW87aGg6a0YuUTdjUDJvQVNDOFdUKXZrLD9XYU9hZUB+N2FIQlA8JCRPd1J0NDV3''@;'; put 'put ''c0RUOkpGSXJkI0psLlF0THRVMVhZRCZRZVNjIlAlSjFDZVZ3WSgsV1VvOEBlQ3lzcXhjQ0c8Ilp+W2J3NXw3RilMTkxEYjxTfDx2RmIiM29odmV+N3xfcHUmZ3JEOzBdZF0iPy5bVzp9IU1WciJvaWdhbSg7TFBCTSIsYSN7VT45KndPclc6MEppSF1hfE1UeHc+On1sVTl9VEQ4VChqTWYhcCJZ''@;'; put 'put ''PS5AP1MkanBJeFkpV3V1Snh1TUUuIyhSQGF3STU3PlpFR29eIXpMTV1rNFpOaGpfbGp8YHhyZ2dpNSg8Kjh4Q1NoX0c/bFVWNyhON0xBK2YvKyg+NXY8SnJhXlE6PUtiTFljbUo0eD0zQEM0JGQ2OVY8fXN+PztQZjdLMGdWWkNieUdmUlJveCFDQHVfbDFuenNGT2doJEw8ZXJbWTJQVFtSR3Mz''@;'; put 'put ''Z3d6NnglbytQVi9ASVRYOnI9dEpXQnx2akI6QGNMQms1QUJdQVR0RDI+QD44Pzx+KiZ3RkBtTHcmPzsvYGpCNiszN2h4W2sheDc0UVNJQVZycU4zY3pDUTkvOmpmOyYpZ3hUbXhAcjlIX0x8KzpkKHJ3JEdPWTpAW19Lc19wZVVYdS58Zlt2eXwxMiF5LHxVY0N1XnN6bURofT5vey95Xkg8KzpE''@;'; put 'put ''KjlnJnhLNil0L3hEazluSyFaMTRFOiJlVHtUVlp5U3ohYGl6eWpDcHhBJSIwWCVCQFtgelIscDVvdmY0UlBMNFsuQmptenhTaGY3SGZ7Iy5Yb3YwRC9teF9PZltQR0VOUFopeS85Jk9FcWY/U1U/MmBfSi8uODQjLlViMTRtayxPKShuNG5jbURRQ1s5SVBHSyY9U30mTT9jI20uR1VxRT15TlRI''@;'; put 'put ''eEFGR0tKZlhVfDJzcjs9aX5ndyJFd1IqLi90NGl1PzIzU2VBU010QFhOd2MoISFWb0JbSkArYT8qXzRSMyw9cTE7YH54fG90aC9SUE9pMXl5RztnXUNTa3EkTFY4ZDxpbCQlaHBQOihsLEc3USg/c29dWjdbKURbVTZ6LkJeMisuI3dRNStOITg6LjF2eE86YUBnNn1yW0JIdVcveUNIOF9yZSh1''@;'; put 'put ''W2pdWSFaYWpWJUxyTTVRQ1FwWHd2M2FmWyVLezhlPG84Zn5xantqblpXV1JENyZmWSJCdytSb0tecmVwLF5ZZzlkcylGSW1iX3RBeD4xN2lKRUs6Ol1NanhIPkgiS1tVMCo4I0dQUF5RU3l0YTxWTDFOMWR2dlddM34jTGBDMjE2RmssTGhVOGQ+WWkzSVticUpkM2BRIXQmVkV+R1RgTWYrY3Bp''@;'; put 'put ''SXpzemchdyFbPy8iZ0BpeDpuQUxpflQzTk5GJko/P300RkUjKjdxJUZKRmxZQ2d4SmpQYlB0M25ueCldJHImcXMzLk9+NXE7IlIpSjxxWFFOJS5JQEo0ZWJIe2NRUzY8L1JIMDBjJHQ7dGIib09ZbzBOdHM5fjRXVEM4P1hyemNrYC4wSmBpIUwifkEvTXZDJVsoTXIod19TTU9QWSRob3I3bVcj''@;'; put 'put ''OkpUPCovVz07PGlUeX0uZVchWnk1OWE1U2xZLHxBYk9XTVtmK1IxOH0laWQ6LmpnLG80UXwhW2h5PEcsVFdEQDx5JHMmXzB9TXYsaU1iczJPYGZLck5WWUo6Lnw6azlRfjVQaCQ6KGNOfXFnOnNTSGI8czVPIkpNKC43bSh2SVJKUiFkTFd5MFBaPFlHPkd3bjddMHowMC4lVH1PPDE1R3AjaCFO''@;'; put 'put ''c09KcFE5P31wNTJZREBreHNFdihjMnkhNnQ1YU9BR3dTLDl+ejZ7X35YIz0hdj1GZWBWbipwdjU2dnpmPkghUUE1UGcmTmomNnRrckRJNmMmfU5fMVg6PzgsMz9RUUd3VzwzLkhhWkpTW3sobC5NfDJSfj1KblRaX1o2Rz4sVk4uUCw8YzBrYnchUSEyPmFMW3plVz0mPndaLlhJVXh+enkhKmdK''@;'; put 'put ''NFJ8cnR8Mk1HTT52PFRTVXsxL3Y4bTo/PFRAbyRNY3NeWnF8RihEIS9ES2RKQGBoRmV4cU9zRXx8QjpDSFYySFhfN1N1Nn55R1Y4LyF2QVFEVSw7SF44Y2suJWEhQDhtUSZ1dH4mWGl7M1N4PUY2V3IsZlo1cE9QRCVkbGRoI3gpc0JmJE5WViFgZC9EU3s2ayIpfix0UCo3QE1CVUZVM1s2WHVw''@;'; put 'put ''SlcoJjw6Z0RtM3lNZ1VXbDt3M0o0Z0JAfjRCbmF7QU5aIWEiajB3fVR5ViFFW2FNdiVrVW89VX0oY1V8MTkyeH5tWVFOblhZOSVaIm59eF0xPT1ldnVhS1R4QmI2alV+QWA+Nj0ycXxLRkU4KDFKYzp0WVBDOjZ+dTk/a2k0S2draWxUbiVlK2w2dTRuWFcwYVBsdUJaN0UoInV+JHlsdVIiPD9A''@;'; put 'put ''QmZ4XVFiQ0BLO3I5T25vSixkJnNbQmUsZjR9WzBNUXBddmU/SHs9N31XJXRKUCFHK2puNCo1WTcqYys3T2FmV3sheDlOI316UCVAIWAsI1I2TTEoK1BQaksjaSlWPCx2UX1tRHJVUF5DaGQrMzNEOzNCOTVZIkFwWW9SUTd0QktubCZ5eWNPY31vUkNvXiJdQzdlIVc6SmFeQjxUbmMhVSp3T3sm''@;'; put 'put ''WT9EdmsjSTpvVEtoQE8pRWomIVJia0hKM3xbfDo+cGsxMn0wfG1CVHxCNWdPQzE5YCVJR3liTGw6R0M5JmVCdEsoRXJXSipQZFd6U2tZTDd5OjZ6LD5aUDVWZjxrYCQ9YFJtYG01Om45KkQ5dUVPYnV3VzJHP18hTDRjXT5RLlZqfXYkcjEwUCh7Oi96Z21GIyxoVCFAOExpZ1NZSHAsOX05Tkw1''@;'; put 'put ''OXJ7Z15OMU94N15+U21reyR2WGJrVEhsLEJ+a0RNSUdrUz4kTG1HRmZFaC9KbEwhXXJlLkkpaF9zZ01TM2pCKD5tNH1VTGV0Old0N3VfMnwjSEdmY154fmlae0JtOig+TlVkRShAUk8qaXYydH5YcClMbXNITG5yfD5UbzlgWlZzZXBpIU1yY2p9Pz98dDVwZkZVT1l2YkdYUlhPaGJMVnAhYEBh''@;'; put 'put ''QlthOkYhLzYpeWp7c1FIeHRsWFdiaH1+VmhoK0JyLj93dG1OIS53X1l+UVEsfm1SX1l3dVt1NkRpL3FKUSR4WXkmYlE1KnVzUlZ0cGh3TWNvVXkvVVdUU01XQ090IWJlX2YqPSwjT1F5X0hzfVowcUcpfSJoJGZtO0FQIi5PI2Z4ImdGRDBCT25jV1ZEM1p0T3BaJlZXOF8kI21dJjFFbXxwIzoh''@;'; put 'put ''MGEraTVFO31jaD5fNVcqTT5fQDZtbEQpQWhqWnxAYjo8Q1ApPHZQN0BXdlNZXUg2VjlTQUpzZT9lNytwdFNQdk1lVXVQR2syTGkyMF53I3U3YTxndUNXNXNQcy5PbDA4PjdDLHJYeyZvUDlCXS9fQzVXTG15NGo+c151Ml9rQEVKYk0sbnUmOWJ6X2FpW3gqWnUyIlYwT3JmamNtaTxvLk1iKWY+''@;'; put 'put ''P001TmBbTDR1MVIkOERXVW0xP0JGUmhOUnkyeEZPWktbYXpJc2w5V0YzbV1QKklePXY+aDViT0RPe3w1ZDlASExwZVM1KjUwOilsQHZ3dW5QP1JBVFI1d3t3NkFiYihBO1klciFsWllFY1dpTlkjPyE6JDN9ZE1APHUvXWJCdFdnbjlJT3VPYnB6KDlPMi9WbSpvPVY3ISNVcjUjL0A7ZnZqakdA''@;'; put 'put ''N0BYYnNwPDZ2TW5qPkkmdVIqbDZAdzlGckIsaDF8IkY7JSVKTUJ5ZFE9cVAxTXpTTi8+NHB6PWNsNUZrQSxtSTM0PmwkUjVzQk5+RmB4InJ5Mkh+V1l4Pip9SWhNdGpyOk5NK2gyMC5JSUNXIUk+ZGZkaFJZUlReaipYLyRWNkYhaVRQO3kvY3JlTX1XKXNzOSY5TX56cUhbdUs7dDZ7IkE0P3dO''@;'; put 'put ''XUUpN3hRNHsmL2dndzhzSHtxcEo+bEh4dVFRcTErXXZ7Z1tiSXJgS3FCajlSaD9CZmEpd188PClnTkIzWW5fZG5uZXB+MlVVRFV8Iy95PUt6LEUxTkgwP1pgOFtaI0BvRSIxTW9oSE8iQGg0ZDR5JSk9c1BVZDMyKDBaRF07NEJOVX05bVMxUWc+Xi4kWzlueHh2b2BmdlJwMUFUX1UrODo3IVcs''@;'; put 'put ''Y1QwOEU2M0o/XmU6WH5odGYxPig4WDx4ang4UzpaPGoieEA8VzA/UUhYTDlxTHdRVCQ+V3Z1YC9jSD5WUjlOJWdlY1p1LHszb0VRSj9hcHU3Q2llM3NtO28ybzhjeUBsYlNbel9HcDooUi9RYTlwa1thMCQweEciRCFScS9UZVQ7a09vdGtfS0leNXMrOVJjRnVfYFIxMmxmdW8+YllNNyRkNlRu''@;'; put 'put ''JUNIUWckOmUhY0NmSWxsREN9cFNlbG06ZiE1P25Pb2pZWCFGLF5PeWFTOlFyfmVJcFpOaEYjZ048WlpZJUMrOWVQaXs6VD9QZXpDQ3pmciZwMk1GOWowUkpAVX5mQURQVXhYQUpjOVRXY2l4LCRpMktaUWxyMyE8b0lhOyxlOCkjcEVFeClLVCQ8RDFUQjJYb1laNzp7RTwhSzlqR0I0anpFcmZ6''@;'; put 'put ''Il0vb15fX3dQJT45eDdAUCpVQGI5JUNiKVFZVnohbEpKRF5VJiYsZTtuJS9EbXlnSXRxdEdaLzg9JColW0p0PTB0fFcsIiZNYTNpNnVkMXRqaXxQSio4RndAey8pa2ROQXxAb0koVSFROShFa3dTWmUmJVlDaSM1PklIa0p1YCNMVXZiblVYOlJ1SzoxRk9gRVpZWTY1aGZFP2EuV3I4d09vIXdh''@;'; put 'put ''Kkl9MXw/KERzQmovP0hWVX51R2hkXU0uWXdNS2B4dnAiVjJlNFYlK302OSFRTGNqKkpVb2krXmhqTnJ5b1MlOjt4KExyYGg1PWZDR2J2R1UvRVV2MkMpJFU5U3hraDVTPkJgdUsqfn0+YFF3UWhpRUVKVEVra0UlSjZjfVhdZF1YUU5IOkVRIjJAYUZibGdVYig/M2x+bk4yTj9TIjV0PWJ8Qlp8''@;'; put 'put ''Mk9pU2gqJWwsZEM2fj5SdFpPa2Q+SyowPVBRQlFCblVVPSxaOk97aDVaeHIrJFJqQDVjaiRLVGA7Jkh4YWNxXVF0MThhfXJtVXA4QWg1R2FySSh1fD0/ZHNeUlgiNSJDJSViSjwpQ1l7RTsyO1VkXmg5Ni5PP18+X15BfC5iJiowKltfMEd3WE8vYCk1WnArIWx9KWx4ZHlzUj5SY1E8d1dwYzEw''@;'; put 'put ''bU43WDdNNkZpaldQYzxhWl92NCs8ZzBsQkpKQ18sKmo2IXl8IT9jQUJCMjFmfj5hPXpxWyVHRjEuRHAmX1lFYGd9UjByZiQ1Kz1LJndbWipHKTQzVExKP05wKWs5R05NeDF9UzBvZExuZkA1JV18VV8+NkxaaixKR0ZUXWpBR0ZkV0h6ZlIqezpwK1VYJFo5djcqWEtWI0RGdWBENjQ5a1VqRnVO''@;'; put 'put ''UExlTSpuISNzJmt7L0M6Vlhrel1kUFRQdyt3W1E9eEpucGg/KXRzTF57ejVTQCMuKD1MPSZxcERtRmVFN18wd3AkUnt+MEg5YH1hRSR6OFtfb084fWVVVWJ+IlFCdl1ZJXE6VFRTIi9vJG4sdnFbRFE/NSUjIm1KemthVzRCIzlCNTU1TSUwUU9BMEtaK2Q9OWxsLDIwTDdAWXNKdjJvY0s5fT1D''@;'; put 'put ''REFRXncwI1RkcFpUM0lZfDdsNSR1c01lcixFajMseltgb2o6WDUrTHoraUNPeEQmP3gveHdkalZKTlQmXlphYjJsTmEhRj0ieiI0UXhnPFo0cFooYGVTZUArImpaM2ZVK3YsVT4iY1Q8XWNrRHNCekgpVyN7I1csM31nVG5IPz80WiFWMypfLmoxUiFOTjhyZkMpdHhNcDcoQj1GKCVRSkRFOHA4''@;'; put 'put ''X21HUytRVGM8NnVdNXduRSQ9eHlAZXJPIn0vfW8kKkQ1W0A+WnVMbiVQLyUmWikpUHptKG49Uz0lP1MmWDlFUEM1SlA9US4zRG1NaF1xdiEmPV1YMzJSZjxMUy8/R1FSfGN6e1RwOE8lUUNAMlZyUmVoYitBLjpUP0RdWmgoQThbVyR2PUpnOHlhKXVKJFNuRk5vVlpaQCFWUGtII0AhLiR7VD1N''@;'; put 'put ''ZjpvRk9Aanp6V3hic1c5eGdRJXlFeDhoXipNV3xjbzY2amJubE5IMC4we24za01bSkBHPTZbY3ZpPmJjLEhqNjpDMCU2SGBDfnpHfXQhZyE5PVEiUSJxbDg1QmYvKE8/OHBua3FeV0hGYXFFbz1RTSpbIyUmeH1ycjtTe1lVemsrJHY7JT8qYFhrLEB2U3N6UCRLcmk/PldwI0Iyd1IxLGJtITRh''@;'; put 'put ''VU96ZzcyLip3cj1renlNQGdxejAkMThiPlp7NCM9bn1OazdtNiJtMDVJMSRvW1dUWyY7MmY0UylRVjJ2I3leaU5eX1h8QDpvXltURXBjdkJAbyRPLkZsbCZZNFlqRm40JX5QeHNodlUjUnh8MFo5blljbE97V2t2KVE8SD5pPlAheVViNFMvRCV4Uk1HdXJnYkNMUDJpZ085X3cjeTR8c1duMU1l''@;'; put 'put ''NSt3MGpZQjBzQkI4fE1aS1pXTFtURkAjams8YF5uNiNUVUc1UXd1SlNQaFdrMSpKZ1NNODY+IyYpNktvNEtybmFsKXM/QkxLYlt0NCkyeT05QUI/VXdaUm5dc1FHZHg7RzRlczAjLFtrYGQvOCtfc1krUSMvK1JDcGVgbl1FeytSfFN+ZHdfZHh6MHlSWW5ZOXN1KW0lW0kmfi9UWypzNUAzbUlp''@;'; put 'put ''WWgsZWAvIkN1NHJPWlNWdUJOOlNVPGFIQlE3MWdwQ1NLayhhK1slKDNWPUIlJWBXTjJlOl1WUyVZdSFyVk5FIVBuYCtfQn1DVUhFPHhVaEEyX2ZGVkhIZl0uYz5BVHFEVCsmK2AzS25ldEJzWFRmI3ZsRGFrWEw4dnsvaEpGTyk5fVptQnFCO3BibSZbUXF9PHVyQlBSdyQoPHhHTX06SnY2VTVJ''@;'; put 'put ''azJJJU1xKFFUaD0ubUp5U1YqWVsiIzApW309SD9PayJlek9zNlFRdHxzfEoxK3IsMDRicUFSVlE5IyRqIVRGOSQzPzFzWEk5d0I5YykwaV1kZzJFRSxTZkRhWGc0W3woNVFHfmJJKCN3VkJpS344anZie1J6NHdyZ1VjMWsxTl5vSUg9aEFoJC53NnBhKFMhI1Z8Jio9NiljcjVgWnE2RUJ+I2R2''@;'; put 'put ''OWRTdUViSS96O3xwSmBlT0tgbT8rZVlPRDlZc119KXR8S0JZVWdIKy5tLG1zVFM4PSJZOyoiLGZ2dHdjLCRYUFE8PHBqeiFpe25ocH5VcjAuPVk3MCw7d1oqNGU5c01ye3dJd0RaIzFsbz5xWz0hLHNZdW0pPkBDSixbe15XUVVyZlNDM3NpVzA0ZyV4Nlp1KXRNbzZ0b1FOV058a108Zk12WCli''@;'; put 'put ''ND9eQDByfjlgS1JHOTFYVUQqR213NVBQYiwrJVQ2M09bK0VGciNQXyQ1aVtQKTwzTSFmWi5YLnxJQ01LVEZWJVVoLDtjMEw/NVZDUENFZ1sxXlRVUFJmYSgwRjgoNV5uU2s0Z01UJlJiNFdZSVZsUzkmMz5kVHU9NVhYJXYkM048JFJ3bnkzXXg4eWxxN3NfKlRWV2kjLCEmSjt7fFlpRnBbMkN6''@;'; put 'put ''eDNQdWMyNXxJUnhQIWhGbThLOkZLU2ZeLm5dYX1FJCM8MVtEN1dSMTRGZkVHTkNUdzlfRmVUd3o/Ryx0UXtuKiRYV1l+KjdHKGVNXXp3TGVbMUhCKHJIQzdqWk1RYU0oT2Jya3IxZ0g8YVhXay9TaWRyOm5EL09uandtQGtoMUQoREd+ZV8oa0U7b0gwX10mWHJOUCRzd19ndG5OLyZgIVR3ekhp''@;'; put 'put ''cjkxeHI5fkVSST5wTXkwQWVZJGNpUDRJKnR4dFQ5L3lIUGArQzlZN1UiTF8xUVVZR0Ymc3o3Ym5YSV50MXljQjwudC4zM2d7OTNMaW05YXt1MThnUkdPblEsQis1dl4jUlM3fFpNTDl+Ri5xemgmaWdzei9jZ3diLklFbCtSamIoQURsPW11InZTY1V7KTRyLj4qcztYeGZHUTx6L2lddFlDOmJ3''@;'; put 'put ''KEY1LnR6JXBROi8rPEN0N1NsMHMibytHIiJQS1dDajllYzdoanF7UUkhSmNGc21wfCQ3UD9gZyZjaFY7Iz5PZy5WLHl2V2QkYXMqXnRSaElVb29LNXBSb0g4K3BgTDxZZTFkRmh3aTZbVV1DaDYpKHR3OWpETWgycmIhY1JYOk4mZ3Z8K3VsdCk+MzMmUF9AeSR6VzNHT0A5LnhiakB8YFtydm8u''@;'; put 'put ''QEUzKzZ4L3VRL3gmRjJkUH1vc3tJMTpAe0QuRjszV2VtYDteTCVpUTk+IlhMS0VHdEVofHp3RHVVfEI0TiIpIXE8QG5OSDZBLj8mMlldO0tQZ3JWenIxLmFLTH1vX1tBXXc6cSMpNF5gbWlQZ3ZaTllOR0wka3dFWEdoTUZYcylKLCh1bXhlaj44fm9RNHtsR2lqYFhSRiRmOmMvJWh5RkxeJnpS''@;'; put 'put ''MnopT3QxQTtBfEUmcmExaX0mSUx8LEZ8flJ3bj8pTTcjfl5hbUFnOEU+IzQ2OVdPNV5vZDEzPFFIR3AmLGFwTCRrb1JXQlREMURBan4+YD04KEY/dVF0Qmo1cHVTVnRAXnFINVU9RmNIQn4kZnxTc3VkMipMP09DXl1FNXBEVTZILko7ITdQR1BqWVcqR10hTWhJNVhpL3V7SVVmcTlQKm53ZDB2''@;'; put 'put ''TD9+bmF6JWA9MiZXcl5TakZBYDhOYWExSHZUTksyV19xXihPWCJvcHlUZUxHTkdIWyZPPD4mJiNOW152cHBGKGxTKjRMfDxgd1BbQzY1aDBUQnAxLjNWVXt7OzxOPm51OFNGZCxJJEFmfWB6Tyg/fS40dU1Je09BVkhMQSlfN0B1Mlt6MjYsPl5WRDhqNi9CcDhUal9PLDwpK19GdkEvQDdEeWR8''@;'; put 'put ''bkV3SWBISXE3aUhuK0NMMD1jKEQhW1FWYWIwRmE0NldWbHN4Lm14YytLLD9seD4vcVUqbyhEPUlxbHg9I1E8UT10Q0lQQDpOJHM0K2dsYF11Z1JeZHd8SFRFUlI4RFBuUz1DTXkkU0x6JCV4ZS8lNCgmeVliclB6WmAuLmJ5P0NgXVtZeDI3biUjWkB9RXpkezMuU0pGRzA4U3thKSJbJVZQM1he''@;'; put 'put ''ZEdPXzhVcjFqRj18Ql9uOio5eXEwSV9Nam9sQGghYXMpR2owWzBqYyNITCtweDRKNUNlNDQ5eFU/QF94PzUjPnYsUF9SMVtRYyUqWFYmX1V1aTFBdTRDdk5NNjolVixmZHZwJHNoO1RDZjBDfXhBQFlqO2hmRGNiSTgpSyw9M0FYJCReYWdKJURVJCFzPnUwWlksMDE9SURmRlV6QUg6PF0mYWtY''@;'; put 'put ''ekNbaFdwaT5MNiFRTWpBQ1gxKmZFLHRuPGk4RTBhPSpwe3NrYnorbEspaFh7eW9lLmZPX0tPZ1lKYXV+fUlxLmokfUxqQ3drO1QyMzlMOUVfNyRpPi55TG1MVXtdSk1BJkMjem80LFVjMnhVWSk/UkxZJnIiODUoNzpwPzghS0t9IipYSn5RSTwkJHt4Lz1oOV4lM08qMURFV0lsRz5ZbEdbc0RW''@;'; put 'put ''YmFFQnddUXlqYm5VR1tHQWxiQ09VbSlaVjFhUUVBM0AsfjtmRURuTShsdT83ditmNW1nPXdaSSJWRml9Q0IhcyFsTXhfcHpjKnZ8X283fns/Z3omQVtIUDlhUj8qLmUleSZrWnxKYk1VSGthWTElXi51NFd3R0RqZitgOCRhYiY7LiF7byE4V2kpOHljTGUvdj95bS4wVEg3bFJkbDxTQDtrXzZT''@;'; put 'put ''WSpbfVIuJjdLRXt1JTJOWXZAKlV7dH5VYEp8MUVKZlJzcUk2ZCQxYHYifDVXdHAkaGsseFQ2dTsyU0tpfTY4UElRbjZLZyZLMjNxVWlPaD1sSzFZImhlMlR9bypkSXp8d1khbEUsKX5zTFNYS0s9OUE5LGR7ZzJ7OCl7O3NJa2ROamdnIk1kMlg4bzNHPHVoa3ZiIypKSyhWYXRuWUUqI0hTdCRu''@;'; put 'put ''XzMrck1OL3siKm5xVjpIL15JOHFMYl8oXkJQRHtGLFBDPz9QdXwuej9wcSIoOGdtbVpgOzdhTGJkKHRmRjZrT2JMTkhtbmI0TShWdjoudUNeI3t7LDJxOEZkIy8ocnJRdTZqSjJVKnZ+PW8ubSxIWyZyMXx6e2N7NX5LX3RaeXdoM0ZXdERuYWQ+YGAqJHR7ejM4KypYYmBRdSx9NDB4bmV1NzQ8''@;'; put 'put ''QlREPEJJPUh9bV1NRWhsMmtIfXxvQmk/e2JRNzErRj1TXjI3IVVxbXZmTHp2a05+Vl1XQCJHcT8icmNrOlU4VVUqSHoqRDklPnIrXkI6a25OcjN4OWBYc0tKPipBJVRDQGE+T2h1JFElU2BnJVg+cnEqPWMwdks0JnQofi81RzAkPyhHTn5lWmUpKjBUQ2c+YT59M3NHT0doNCYvP0w8X1ozfFsp''@;'; put 'put ''TmFZW2tSfjRQK1tnS0QkLFUrKSYoP3J9LjVJWEh5ekp3QzM+VkIwQVheI1I4RUc/SDA1JmEqaFpqO3BZTWVIYk0wanw7eUtrYnJtX0xMcCRNIWQhJGZIck9+QERXMHhua2BZTz82KCYrV2xyIzNqIlZsKCw6fDJYTTVsRl5hbTc+TjwqY2pieUBwPjQ/Ni41VXtweDxUNjd5IiQ2Qz5GdzdyWFhQ''@;'; put 'put ''aFA2NXIkbDIzW1p6IVFIXSRGUEIrW2YheFNWb35qRTYvVS80fl0+N1lvMy4wLEdHYnIsW1NkPCNPVCxlcytHRWdOezxSUWAyWyssJkBKeE5kKklMQGhQSW1UY3wyWGdMTjAqTiVoRTgyWyUuR19kR0ZTajx2UG9tcGZSIyF2K2lSJV8wL0UjKCJKJENuNiN1cyNLcE9nNThsfiVzKWR3YUtxci9q''@;'; put 'put ''PVlFNDR4JWJwbEU6QGlUeXRFXSpxcyFNaS4uP1BRSWNxT1RbN0FWbDJfaDRrZ0xFRXVxSCNhKilZUTw9PENdNCNPO0hEODtBd1QxflJnKFloeXxIdjs3MXA0Sitab2hwLjsvL1J+TiRaUjYpUllpQVZwLkxMWWI8czUrOlIscX45JHkpL3hdZzE2dkxSb2w1PTwwTnU2NHhfXnFTKDw9PTQ6WHQp''@;'; put 'put ''Z0NpZiJ3b3Ypcj5xOWU5UCVhSXpXSVU4OipDfFFNU2Iib1JCKGpAM3YoT05yJEs/VSNUS0ZJPCNjKm5DX2lwVGRNOnJ9MU54OkohWntJWn5AOXwxR01YWF94I01rNjslSWpGfl9KaSswZnxbM11taTUkfX5EWVVqP09BSiZGWHVUMSVZVjJVPVBVOl5LZSNrRzUxcFdjaUtpaXI3RzJtKCN2RV9r''@;'; put 'put ''VDo2MDw6WFVDZFQwIUZCKzokQmlAdj5XY3JQYW1sLEBgcUNJdmooODhENF5YczdXWFdQeUJrKX1eIm5CI2lefk9mT199bil2UVk6I0VUKGQ0YUckMlUoQnFbKiQxeUJyTk1ON3ZVc1MjKnYyeD4pfCtQSCMvP1h3dTMkX0FKZyJ9YVB0eklMJlJwb0lTc1lxYWE+X3tCNkkpbkc9cElTSFs1XkNw''@;'; put 'put ''YjMvVS8waj1afE5VL0pLVS4xSjU9flJ0MWRHTD49Uk9TWmF+ITA0WnUiPDN8JmYvLiQ/bHFsOXJbMmg/KHJmck9nQVUrWWApMHdFSzBUSipiTzVyUVduaiZxS2BCIntyL2tKYkRVZXJAUlh6dkg4KmFfeUZuTHBUNjdCNHJpLjBvfVFSPzIzP2QkKVNFbG4oV0BoL2hmXzsrSSguNjIlWVhlX3w7''@;'; put 'put ''aTlyLmk6dC9mQDEla3tKLnRKeGhvKmZ8eFprZHV6Ull4OW5pQk9tRmAoVGhnfT9RMXJtTmZaVnEkTltGZSF9Q3BxUldbTS5DI0VWQlF2N01gQ2JqRDM3QXMya2RSfDNJdTc+Yno7Oi9efXxbJV05RFhRfnpWNSpadEZyVWQqQ1ZxOi4/UCxZd2ZlVC8kJT9sb0xNWWhDcndaZENbL3Z8OVlIPXg6''@;'; put 'put ''Uy9FR2VRSU8oLEAhPE97YnlxZUt8UUVhMTU6NSxvPUtWcWdqWTJpL1Zfey98fiZJNFpLSG9aYFpWPV9xaGdQVWYjL1RyMHd0d2FObjJoT1VWJFA6aGpGelZOOSkjPDRnUTd1SFA9VGVyb19qTyxAWFRkIj5eeT0rfjZhU3tNTzo9OllRVVBkTiYvOCgpRGFlSGBEQEV9VzV+KUsuI2F8SVpJTF5a''@;'; put 'put ''VXhZZEdrMn4sZC9fV2pRWz1rXUZHZENJVS9oZlA5Lz5OekR3fUZ7akl7eFBpSUBffFZrVHBxelpKTzxrYi9FZCZDMmcsUj0jO25kZlRfRS9ofX1HSTs9RTErIXgqSFpaO0xyYk4jQ2pTOHBvVkVoeygrZFZlIWlacVQpOH5EQDEwTGl5KU4mLzU4SG5geldOekRHaSFNYShxYnordDRzMnBHZV0x''@;'; put 'put ''MnBOPjNPYUhGcTFRZ3xWRVQyd1JwXzp1KVhLMEJOJUk2XSpuYyszKiFGeip3WGBvPzVDcywjcj8+cTJweHpaQkFqOks2TzxBNX1rN1JtSXN1aH0hNytXcVpVOih6fXMhWyV4IyQqO2dJRzRQMUhbb2ZgXWM3R0pQTHg8STx0L0o6IUJYdExmOD12NlAkOzw7dHloJnBIYnFCIjBtNXFjZUkoWSwj''@;'; put 'put ''YWooRUVuJT1ARj45cjhnOlJBLng6N1lzVjEjPT0xUVlWSG0sK1QrV3FlZnw1LnVQUF5KIXo8aj5WMkhBSiMrKC9HUTFUJU55Vl1YYGR5UyomX1M9cnA1VVAqa3R2VjQrbGFiNXpLUjxiMHxedCExfX0hXzpnTX1Wc19aKyxhM3U+byZRbjNlRjFnazBWVzxmO0E0bXBRTmM7XUA+OXJKP2EmXStm''@;'; put 'put ''T344ITJ6eFBOQHFHSzcqVip7fHZhdGsvOS4hNjxVPFVNLjQ6RkZYZD96LFBefXFbWVtvfFQocVtwYHQkKzc0MmlHfnM8fUA4Vz81fipePjR8WEZxI3dfc1pSanlUb21afmJrZ297cGgmX3RfcTMiPj4kTj5ZfUozfj1jOXJsYjx4MlI4MiFYQTJJOHNudDFwTjZURk47M2toTjZFdFRWVTBidSE1''@;'; put 'put ''b3tiTjY9cXVVQjFeSCEsR1tiIl18YVgyOkhbTFdTXk9yIjYueF55YGhldSVTTFRMJjlFMVgjbWNKMy9ockNiTSNpWTVXPmdGZSVTVEAmJDY0eFpHU0ZaZGhJVW5EalNXZTVDSlE+OW5EOV89b3BFaUx0JFpFYmkiJTQoPiZiU0N7Z1EzYWpEWGxqSXgwQTIoUG1JPz58K1R4PWZuRFJ3WV5uKypU''@;'; put 'put ''KkF6TjpgOXltLkhRdyR5IXUoMS93ZGh7bjFVSmlRaihTIXM9d2JicFJha3ZyeCt+fj8rOndDRm0+aGpoNkM4RXZ+NzU5RSFgUX1kajsuV1U0aDR9TndPSzZZREU/by5SeE1NbnVbeGR4UzVoQCsxMWd9bHgpVzc/RDU4JWk0bVtzSX55czd9MiN1ZH5bfTxWQTM/STU8VW5vaS5YIWxZQzdQZDx0''@;'; put 'put ''ZzBGNnNZKWlnSG5kI2tmKkksU1ZPVlBlWUs2enU8Yl14MSFCel9aN3JTRUNTUndHVWpuX1F4UWssLiphRGdjMmRbYz1wIlFSLHR5S3ZjUWBpQylhblREWXJSV2liV2tTVUdKRHhTV0tXKGxWQiJ1LCgxZ0w5dThYZXNVbzs/UnBwPkBscC5yfj5YUElXYC88K0lmYnd1OmUwJVM+Ty9ZI0RUbUQh''@;'; put 'put ''dilyc1ciMGF7e2lDU3l4e2MuVVplMVZyXy8zYDxjJlczSTckJV9GZWFbUGNpRWhQUVhWNVFvRE5jVGosKUxSKSspTHUsTWxbWEtdc2J9eCRVPz1ISX1iditAck1iMDZrbndZfnp+O3g2YE4/JV4hREJTLyQxYFtqbFBYWyRFPj5zRy5vbkUubk1eOHJpVk9VU3ZHaWFrNHU9eSpiKWcwVyYrUn44''@;'; put 'put ''K28+KnZdR3Z7YT5zTXYjaDIwX18qfGl4dD1xekB5NjA1NV5YMF0+R04iU2w3fG0kTyNleD4hJkFGP1kkaDUzS1tVLDF5W35sXWo4PSlyMkYrUkF0OGt2ZG1GX21Tej4iYDZkOUQzazwpeG51VWJEOUpxZTFwR2FEJHdUW0pObCI/IyRBdjg9fiRbays8RzwjTk5WY3I1bi41KWVTTyF3M3A8MXMx''@;'; put 'put ''U1g2T2dSVCJ+VVooWVthRn5fU1JRUkd5MSo5OmtGYzRZQ2ciczxAV2NrayE6cmM6VT5Xe0NII143PjB9OShTSU17Jklqen13VyUrZjBdKGspWFFnZ0B8OCVhb3BobXBjX3IoNVt0WzlEUGM0TUEhOCl2ZzIrIyQ1ZUoucXpJTHdvJlM5fmlZUm0peF4lfX0qU0F9X01Ue2BDdWRiO0kzNWtqenJW''@;'; put 'put ''VE5mVC9RdT1MJWd7ZGlCVihBKDJBTEJLIWRVJktocmZdMl4qaGVMMVc9YlpMblUsdnB5Y1ZUKkttU0UsTiZEMlsod0M7bHQ8dGY4ZVtZXVtIZjdQR1tlN1VRN10qZFdXKk1uX3l4LFs8bUMmQUVYVFNxbnhmZGA7W2BwJWpNcTFZT3RRYSJhN0UqLHpDP1VRRENfbX5hUUxob0RXO3J5M3xPaXYp''@;'; put 'put ''QWRONH49e1IlTCkvTnY/L0JqITA5Xy5+fUw4PyRIREJPLyslKz1XTElRSElvdCpmSzJGRFh8T3xXW0FCTn59WGFEM1UmcSkvPG0vL0NINkV7KC9xXSFWOjI9OGAjUSxDVmhEeHVmVV1WIytTVUJxdVE9c11rY3R8S0RgL3ZlQGsle2BWSjZNPlNkYE81IXZwJlBQbTI4SUUpVDBjLFckbGRiVXlk''@;'; put 'put ''dGJ8L0xZQUBPRHNtRTwqW20uT2RvTFdMPzk4bDE/VFY8eTByakBiMjxDTDlvcFlLQFp+dDBZKCFBXSphWk8rW1hnO1MoWFhjcTRgQ206d2ZgS25yX05BRlpnTmU/S2soN158MmNATnR9LEFDbG8hQURlMEswMnxLOipbJipmfjo2P1V6bncjW2dARSZ1KyliOVJWSU1nPjttVDN0TjVRa017PFcz''@;'; put 'put ''byleLGdyKjtTMT5+UDBqeWE3ezsucF99e3xgYmFEO2hhS1U2cGd9IzBAOXwsSSY2KlhWOGhlYWJFc2wvZ09aWEokVmV3NWhdNShmd0s6UVtjOCpaaHlTWCliUS9GZFkhUkczJmZYUygxNWM2YSslL1ZkMFA/WEk0NWVrbGxHLHIoT0VoZjkvUy9MZF1TRD5XRkE9Tkx7RFBRYW1iYD4kZyU6dUU9''@;'; put 'put ''Ki5HZmFbT0ppUiYoaixXdip5QE1hZC92YTMwOmxuRypGOk0kfWc4RGAvYEA9X1hVP3NROlFJLlh4LEhkVFEsK3RhU0psJiw9RTglYEVtVDdwOn4mPFM2djhRYjwqNUNWL0EjfW9zb342P1YrJiZfTTttPj1FImlgUyhRfCoxV3pONFQ/YkJuYU5NLjZ6WGk6amlpNkA2STcwKCtSYTxhIkUzVmxj''@;'; put 'put ''e20wJnhPXWBCQVk1Wj5pTzJCez1JS0hkQDQ/SylxZy9MZGshSnhlWktuZy43M0QmOUxSR3t8RjtdXWl0LyRsZnRqeihMY2kvW2VbYSVpZWRsWT9RXjNrd2IyU0l7YU1MNCY+ZT5tbk5McFU+UE5qRU1YUFQpdCR6K21jKFAiPj5nUj54JUhHe11gbklPTX45JksyT286ZnhTPiZiPUI5Lk9XWnVU''@;'; put 'put ''eT0wTSE1Pz5XOXE2dk86WE5Uc2I+KnF4SSIrW3RNZCE6NDZsRFVLdT5reFNIYi9pXl0hR3gxR3VsXyYpRy9aNko3VjxxL1NDYChdOGxxZE8xd09aT05JXjZGfjJJQ0BfekdCTypAISw0NHt6b1RAaGE8ZDlMaDA8UjMldFJzQndfJXwqITw5T3prNyZTX2khbXxiOXg/WHlOTFAuIjYyRFdgTk98''@;'; put 'put ''LnR9XyIsIVVfcn5HTCVoUGUvJXU+ZURPP1Y8Oyo/WGJLLzZReCtWQnA9ITxBdkYqdXtdLzNiInxOaU5uSUVdTjt3R0gzIStZK05eI31rXkRraUY+X3lpWmYqMD9TXTckZDlVUlNzR3d2e2NbUURrQHlkYCxjYG5sbXEyISFMMllPQ1dZWzJGZVR7KlA1c0drTmtSLDI3Q3koN2ohKCFvTS8+Lzkz''@;'; put 'put ''aFZocEg0cTxOX35YfWN5K2tlW0EpKiVfejlESixpc15eW1FbRDRrdHJvQn10azE7ZVY5PWVDZFY/OzVYaFVlL2U4N2tMfjF0JXdLajAwSWFhRDYyW3t8MDZOcHRgMCQse2VJajNFTU5TWUNnXmwySlBVMUFDQi89UX0iVSN4XTBoUmVKancyVmgxYCs+bmw0ekFhVW9CbUI6fFBbYE4weTBVRzpM''@;'; put 'put ''RVUocUdUMVkrJUYwMThvXW5jK3cqaGN+ZVsoR3cqKH4/R0xXaDh4eHUuQzJwLk1uVE9WN2tHRTlROlk1RU92PWl0cFdFU3E8X3xxdCpEbUtpKlI/cjRqXjt6XnM3cSJKN0pEV3V3fDEuQlliKXc2eE53XTFbRXhmJURYdUoyWUkwUW4zPElYNzBuN0ppZEJrJT1TTnd5OlFPQjJAZGpJIUcrN1Uw''@;'; put 'put ''PUo6Yy9nSnQhPipxZ0ZaSUNBUEtTfSt3SGFdYEhwMFRmXz50dTAvYFpZJnwlKzYyd3E2WFAoXWlJeXc2N0FFQ0JSI0NBSUdFQ25rKkZwRU1DZSoyKGF8d2NHPGtCK0pdIkoydmlfIzU5T2o6SjVyK1llPHpMVjV6KF1lOlMrJWFvLEdYQGksRGU5SVVuPFNWbkl1S3Ykdj9sPGhDLyt3di8zMmFM''@;'; put 'put ''MGE0O2V3aWY4RkFUKn19MiZCamohMzAwZUJbKz5qcTNWazY/O2IpcWZSPSRzRXNDdC5delBJJmxuLChZeH5SOWRlay9bWno/fV83XlN8QDRBezRzK0JESHQlemN1OH4hYmdBRFEjREZYPXV2amFoeSosVUl1ZG50eHYiV09xeUJkVD15eX1NVEwhVSxabFV1Om5bQHI3S1sqNUpYSHlOJWBfLEtV''@;'; put 'put ''bTdvRU5kUzVkREkqbEhbRCZsU1owflR7UUZOfmlTJmI4O3QhQjExVX1KKlJAeXFoKiJdZSFaZTVkSW1uNzNtZFplckBQWDdSdGY8NVdCODMzU2UrR1JYYUEueXVqL2RKPThyPH1XZ2p+IzB4JWlvJCs4M0I7aytEQTFdd0N5WllvOGRQLkojRVI9L2YsbEFbe2gzUkVmdk5WaUdOJGkpImRua3RE''@;'; put 'put ''b0lMXz5IKyI5YEk1QyQ3ezVebUd0QEEjNTQuVGJjezx8ZCNucFJSJTF9R2U4RjM2V3JFMHlVS25QbW43X3lnYDlPb0F3ZUB3QUowNmppQ1IuPWozLGNuQUp3WUZaaEsvfE9WcT5KbEtPYDs1ciVnPSNWWVEuVCI2byl+Sz5afXd0P1tKbFJUYiFWeGFHYTpfdjBbQitfOVE0LG1qOC5hd1c9MHRW''@;'; put 'put ''bW1VVXkiYj8uNHwzaFIsbExVeXF6Y0JVWiVjKjpFanRTR3hFNX40bzxNej8pUiw2eVtGJn5CPigwYXl7OSxLbXU7TFd7OCs7dnRAK1M9dEQ9ajFSSns3NDQ/enxRaktUUX0yfktuNn1YfmUxTkw1SUNKYXpbN21vXzM1Mi55cWR1VEZZPmcsPGdZLjlWb2JqIWUjcWh9bl0wU28xVEl3VSJndC83''@;'; put 'put ''bCRVUDNxTlh2cXU0NHFJS1h0ciMvR3YhJH5TTDkoPSRpNHwoaEx4ZntyNldGKjEsbT8xYn1uQGFpNHdUWCNIQj9pW0UjdHB7cyI/fVgmWFJ2JU4iZW82MCF4U0t2QT0zVHQvQVhbfnh8SXVGdkxLbU9JaW5KciRiQm9JbkhkVHImcTdIUFl5YFA/bmxbKDdTKjlhTiZyJENURkJCMHo7I3osWmYq''@;'; put 'put ''MUJjYFE8Oi5jelduSzxFL0JhV1UyPGQidlZQRnEzU1dKaVtCKmNDbCxITzUzKUAoO3xgQjlMT09zKFJnbD8hZlgrVjomNmNmWDRDNVZgXXVOPHlUQ3ZqbD1ReGgzeypbcTg+XVVwMHV6fWxva3AsWkluV1RXRD9nQWNnXU96SWMrKCkyVnZTO01qMnc/UG04aDgrRT9iVGAvUj9EeE1IPD5yI2cy''@;'; put 'put ''bnNvZXdhODspbFouKTJxNF95MjhTejVyfCZzUms4U0NzVlslKTVuQllge3VLKDpyRV8mYiQ+NT9MMXk2R187TDhMdUl2a2Y1I0wyMU5JT2FeVnI8VXVqbztqY2l8TGNYKzQmWUBsYCZrZSV+Tj9dLFpOPFFBKm5jaDMjXnllJTlzNCNIKTk5dXUrRz9QW1RrV2FxTU4lQmglQDlaPHNYJkwwVzNX''@;'; put 'put ''JTw/KGBZdk1UW19nW3RhX3xIZi49bUJrXXJ+WDtKKC5ZaFV8cGQ9PVVxTnk1O0V8YGd1dG1yO28rYWEudiV4VGdxcC43UHBSLjkiY2x9NnVoJChKXW02Ni9EaTMrNSNfcHImNnRuZmwyaUAxZEBkTylSR2ApaEJwcFVMclIrVShVcXokZnAoTSo4MVgrKilmYkdzUC5RXih9N3RwOGdBODppdGAs''@;'; put 'put ''QkZxfXBDa1IpdSZGQDR6LHpyRTBXP3BAJGVHcH56WURDb3AyKzAkbCN8b2h0ZCRiTkp3aUtZak5vJE0zSHVFLEFVU2E7Vl4lbWowMjdDJUdycXZWO3Z2Nn1MezpvLlp8LzUmV1peVlEpPWFFV3QqVnw2VkRGUTkqWnIpdlBNRXdSaDY+Lmo4USRdbUpPaDF1SlkyYUI7SjhJSUkjRTNMbz5yR0Rs''@;'; put 'put ''Qk19aClCfiNNeT8vcFNRaT0sPnVVJkpVc2s3fUV4I0Z1LmchYzByKTpWalRVS25LZkB0IS5SWWB9VDUwZUgsOlJ0fEk2bCYmOHZDIVRzfF9WantwOHdUM3Q2MWEuRSNSI2Y2Um03XXA3L1poTnwzQGMyW0UlbH1VMHxrcEZVclQ5SX0qaS51XTsvKmM5bWVYPUdQXWRuTnY9cF9aWX5qS2hpYFtv''@;'; put 'put ''V3BKTHJgcC5yYjJsaTY1VlY1TkZRYyZWfGJbemlDcnpDcF1We1RVKTIlZWl2OTFvVjR5cGtOIUBoYDUlPHlQQzg/OiV5aGRoPENzSWg4fmBMTkpLYntEXX5XS1VdZ0NhWVhmeEdAXlZ3SkNtVmdRQlFWdUcuUSokPm81WzZyXkZJR0U4I3J1S20/ZGxgY0hnc2UpKTFjZDpsdk0rRD9BbUtQST0m''@;'; put 'put ''fF5bR2UsNHRnJGc1YV51dWVqYCY4V0pgfVR5NHkwX0VReis5V3k8V2wqbHpmLERkOHlwYWVbZigya2xlcEh+K3RuX1UiXmt4Lmw9MylBJTV7UExkcDUwL1dAZE44dnkpXnhFRnRXa2hYTTNIPV0+Llc6emclN0xoMmBHVVlxTGA/dWkxSElPM3UlOXVueHp4XWcpQ2M8PE9jX1hDcC85S2Y4OVZN''@;'; put 'put ''SVEvTFVkLFA6O14uYnZlbUg6VlRNKnJTeFJgTlVLOFV7eysjP3gjaGdMUz9YQDhGW2cpNl14ZVtoQEtjL0lRSUpyR3BsentOdVVtVGEkQCtvNk5KJXQ9O254XiYkNXx8bTl+S19QIy5rSGJPL1R8d3EsbHo0TEFnaz15N15MMHludV0+SkphS0dfK31MWHZSbm5ZamRdM3xpRGtMZTpfSDNYNj8j''@;'; put 'put ''ZnM1MThtUlQkKi8rTlslKWRyUm0lMW0/fUNZc216UUYjXVpoRTpOV3Fdb2JVZSxOS0FLYH49TGx7LFtAam9dfXAkaj8uJGdYd3o7IyU8eFtpcFhNNFZPeGhSJmxOWk51NDhhNnNqanFBU1g+MTs2YnRucDB+P2c2MTMkOnsmcmojcihPPEtWP19iOyhLQWkiT24/KG1+TDtOVURMJW08bmxedE5P''@;'; put 'put ''JjUoeiIzYUZdRkRHP1pRMEo7Zlg9aip8PlFxQj5QcmVhKmNWQzsrKzAzZks2KHsmdyt9WiRZeU5CLmA2eil7N2RbaW9fYil3UVY6NHF3X0tWNGc6UldEJmJNYWc4LzJ6U0ZoWUQmaD9SQyZLLDs3N3NNVVF+dUM2PW5aTERqdnxEP1BkOGkkP21bdUttX2gzbTlfcHcjcVM1W1FDSk12fjtndTNg''@;'; put 'put ''c35xMFJAZXQ+Yi9SMlNtP1ovOEhNJFYoZnY1VzU2OmBEMTc2VXNqYXh8XzRkdHN2U2A7RTBsL2N+OGdRKnQkYGpOWXp4ITJKUGRBWEVobHc8IjMpRHZYYEw1PVdfL1pYO1phYHtkdm5deTZCQVd7WDlzaGk1QEhfe3tePl5xYXlZQHVUPFFqdFJDR0w8Ljd5SGJGYWVMZUJsOTc7UGk8ekVpfSxk''@;'; put 'put ''IVlCciIyail+fCxlN29ZeEMuMlZ2P25VK31XayklPDlQK2JIVU9aOUIqUCRxLlBlOFIieThnZ0JmaClCJCsoMzo2b2JkXSxjIlVLZl5bR1sjYkVlLihgMTBZY1tbbDVpci9xT3tOJj1kSyMheC8mY2pwPCwvRXI6Wm57OXdDSCxRcm9iLDEoUFFWd0IzSk03QUJrOWFJX35gNUxiaGEhMi9dOndm''@;'; put 'put ''c2dpfDhkd1t1JCk7XlhlXj9+Sl1AbWV6aSRCa1YuWjJHSk5uYSUuI2Q1e19FPC5CcnsiME9JUDNGUGFlJFNiajBzfGhFKXQvJFM/OH1Gd2V7fXdoaS5IQkNCMjlDMT9CO1E8fEA2eEJZMUBuND5MRiE3IlhvZ1YwTVQ9KkwqcjQ4aldPOWFDImYiYHliPCN5WGkwQlpCLFAmKV9pZl8lNWteeyJw''@;'; put 'put ''ITsqIn06TjJUTk56YitfZmNJRVdMJTUqLjpNNzo+OWJkfjtgPns1KyRqRSMhclFmYzRQI0ppNz1bQnhNcmxtSjNnaDd8N0F3UUhHQ0lmVEJ8X3IoPSR8dS4+aTMoO1JFenFnTFkqaWwvLmgjelVgeFF7VjFZV3F6OmtdOkAoWmMsby4pSV9MVj0saT14WWIwUGImNCE0Sio7eGJQMElfW3RHJihr''@;'; put 'put ''XTovRXtlb18uRGkkcC5OX0JBR3AsR1BnIyFZLm1JTnVwLzpdIyRTZyV+XUhubTglJDolY2s1cTgmJDM/VmhMR114THg2ZlZHWkNud2skN2hsWGhmaVdxQCE4ZyZgUmpJPTgpMF1ge1cuWk5oLCZyVWBXZ3x6SnwpeFhxd1Eve15SNjk7UlNYTEh8U2VqdkNJI1dDTjlYJC4kKVMuK1NPRUdfaC5g''@;'; put 'put ''VFVVMWkqQko1dU0ybUZUM2dkKChIUlQhc09CNikhMkIyfDw+dHVDN0Q5dFNkWUozRUpZVU46ISZuSXNuMypNKV1AQSVyPnFyQy8kQmRXTHp3elpbJVAyayQkPlBNazhrfjc4YjdLa2AlJDhRe0xtYk1WOSRFR0B9OnJZKW0yRDhZVTNEbyM4aV84W3Y8RSpIckg5JHt4RmBQY2AuUzdUL0RvVkdb''@;'; put 'put ''b34pUXsjTXVUO250fC5UKXEvTnJoS0U0XTV3XUtKa3FpUiU5InsoSGB5JVZCQWNWZkZyfihHVHAiK34hS0gsNEJFSHxMaVg6UH5IKCh2VFdgfG17a0REc0NXZClfTVdhdDU6S0FEODZZQGZMNllxa3ptMXxlOUxfU1thPCRkUDwvJk9WZkZNWjJERklZI1BALHd+Ilp9UU5POUE4WiZfVlgqRzs2''@;'; put 'put ''Q2pFQkFOWi9rLzpCU014SHNzKWJuejp7XiNQP1tCYWNsYlF6S0FrVT1qM0MvWmthQDBadDU1VSwyMD9RKmk1RUJjKm9KLHc7OF4/K05WWC9zO3h5WU9DOkZtNXphNEdlOipMQExlMy8xNEZuXnhNT2BFV2hta1V3UzVtVFg4Km5UaDtkW0UkU2RwWXBXMC9eNHpHJGE/NnVedEc1VCJAPShAZGxj''@;'; put 'put ''PTxtNEdgYWMybWZLND4jai9NfCVOKWtVbDJieVpNY15Eb0o2SXxLa19eR3h1Pjd8YFFvMDQsOituSlZjcUVGSCVUfWxVRkFpSjAuZjNJaigwKDR7eCEpKlRRcz9EZ2A7RHc7em5DJk5rMiowIXlmQ2lZPFBiRUpHXX5qdUM4ZllRQz9TNWFiNGdva05CKWZfMnNyPlpEU3FSIU1BXTZ8OjV9aVhy''@;'; put 'put ''RjBedj8sWkspOlVZOiMoc2BoaXF2TCw1WTc7RCQ4RE5fSVJJQmxFdX1ARkd7R3dbRUVXVU5nNDc1UnhSWGpCUzU2eSgzRkkreklaZ253ZX08S189YXwsQlBQbyQra0osKDQvfiVPUDBBU1pOIV9wRChETmFgVHJUSWNiZzMkb2NhfGdObUJfMHkmeE5COVV+eEc9JDtzeU90MUB3WipsTmUrdGd2''@;'; put 'put ''eiFHfCM8PHNSYlljUENMKGhyL2YvbCYyZVBFZjA6JShCVEtReEM7THhsYFo9JWY+WGY1ZEw7OE5+VlZRNVhbKGZBYSRgJmUwayt3V35Wa20ocF9WTVMkfmhUMmp3eiokeFBFYEdXLHtLMHhNYishPlBvMW1wMENZREc5RmU5a2N4KzFwblBUNDg5V2o5OTpOaGd5Xk5QQlUuOSxoJSFLXThLWUFn''@;'; put 'put ''VSFFXz1Qdyk8Oz88OU43e0c5RWI7ekVlJDJFUkUqVk5SdFFwZGRtZUBXRTJzL0lMZlF1SzVjUk0/Uk0iIyVnTEopeTorX0Uxd0NDND1AVUY1aUdPaVNgNlIkR3A4fSZ6c1BEMDFHUGNsbjsjOU00bVg7WVRmK2xlUzlWejpAWnJjNnhzKkQ2T3pVb0VdNH0mbzEqRGBKZlJrMltMVX5zT0lLPT5t''@;'; put 'put ''bCM3NkNBW0deV2JUSiw7bEsseztHWnlDWXosQX5ib1E9PDByS151WHt3cCJoOkd6dSQwUVJPdismZCkmZktqcjgjRUJSQzJRLjZ0NUwxPmxsS2t5KTcoc0tdUnghKUxuQDclaSlNQFYjImw3Iis4WV9DdG50IyNCVD95W3BSLERGQkR8Z3c8QCxpQ3FbK2lNT3U2diQwMl4xXUg4Sis2WGZEQWRP''@;'; put 'put ''N2JrL1RxKHZDQmxdfUFiY15qNV1aV1t0MSpaI01DVHZkbG5HLjR7IV5BOVNSQnBhOz9mRWhMUnkuei57KmY4fXVEWGZlLHh6c1t3fC59PHszKHl2Y3pJKEJNV0ZOK2NbPEpNUV1tRFQ8N00vbzBzaSp0Tl4ycm4jcSttI3VKbFNrQlN2VEZbRlZOSFomP3RdTVlsLHwmKVldUGs6KEUxNT0rajN5''@;'; put 'put ''WH1gSEJMUlpgKGc0a2UwfEBnfFFuQlR8LzNbXjhMTEdIfnJYaH47RCg3I3g/YyVhU1VuJiVGJm1bSXY/ZWVVfmFDcSYqTWIjUSJOJkkzYj9GezE0Sy4vQDU8Ul10RHd5PDByajtlPiEiazBLUyNyT0AuPyQ+ZXVRNiFzRVU1RSprXyNodikoOzt5b3ArTiVwPEhoOGtHRShKXmZdS0kvT3tscHle''@;'; put 'put ''IS5aUGcmPVU9XV8yZm9MU0V2WSFBNjZaZ2ZAZCF4PFNmMnRUWWdpSFJJW0RkUntVZnxqXSN6YjU/c3JyWCtvYzg0QC5KaSIkYTdaWnF6cXwzP0ttWEJ1aHQ2YDVRfSx3Sl8/QlM5aiw5ZT43fH07Zlp2TXlbUC9sK1NrdH5qayM4Rm1fLiJXazZTbWxRe0w0QjBMJUw/LzwwK35kdkpeXj9LekB4''@;'; put 'put ''cEhTQTw8SnRHZ2V3bnFVaXh2WTdrKz18Zy5TZSVoNDouLl5FW2w6ciYyYixnNz1kNz0qY2hncGd2PCtCP3B4TFVRT0U6ciYrWSE7TUIkVlFhNXcxQylrPllMPSVWe3c1ZChVYytGJnojWiU0cC9rdlsyOVpsXTJ1TUwvTjIrMmtKZUhmOkBVX1FvN0h4QEklSC9OP0M2Y1ooXTE0M01ofShBVy9B''@;'; put 'put ''O0NMLFBpd3wweEcuSVdzeityKlVRS3IsMGlsPj8weSp4fl1WPjNHfTdWeilWUiNQdzQlSDNoeUJWckNgOWRdezFjRz17ZTdddX1DUnpLKChpTWkjRkpQZlNAJSgwPStkR3pvQkZrSldlNV0hNElOJndIIjZ3PkpDZDRgOVF4c1BnZzgja2dqd3lSTXspMCZ6aT9hTFsrIU4pYEt5RHwofFpeMHUr''@;'; put 'put ''fXVQJHpeVTRWK0lKQ3A0eTZWVlcvIixHMCR8KE59Lzg5WExnfF4lZ2h3RX5BeWpEM30vZzgoalFQVE56eytVWlcubms8T349RStae0NDYGldQD94R3hpX1gqZzRmZGUkLEBMbjpbald2fWkiK1UrcGJBTStlQC5mMGdAU3V5e0o3bXtEJUN9cmVxVVk+OTVtMWdSTnshbE9WL3xxZX1NQkxOPHBp''@;'; put 'put ''O0gvUiJzSDk2WDM5bSFfSWJhYCtOSywxMW5pfE94IXtIIUA9NUddUkVULF5mZ0pFRl8+NEwwPmdIcjNLLk14OFIpY0k4K3AlYUI1N2ZbKXpTQ0JFTXE1UDUufis6QCZTcCFnWls5VV1lKiYmb1ZwM3EzZnp+JTxhWFFVbyVaMCJ6Jn0wWTZmVnVHLDNYPSRkR01ORSEyV3ZaWDxkMy81amhXQHVu''@;'; put 'put ''QjR+NUlrczp0XzFHdk1NRFEpbHM/RU0lQ0N2JUNJSz1vZ3RSYDxuVnZHPEs3TTA3TlMwOzFJYWtGeSRXOjgyWEtyaHZEZSY9LG94MldrRSEudSUkOmtsRGJDTFZUUH1BPjVVLEQkfGlUPixvOzpvdGxdM3BFLjA4ZGFATmc3cVEsaU0yI0BON1Jab04sejNDeD1+N1pxeXZlVmxrfUk7fUsqdn5C''@;'; put 'put ''bT09UzBURFJVYj5MaWVVdV8zRyMoUitRTXZJc0k1VUoiZWYzdEhQPEdDVFVgPGBrbUZrdUxudypmQlhgUHpeOiwvd3QiKnZPe2EvY14ifSJzXilOaUNtT2kpXTVsNDpmIlZfSF1jPldxQmZERSNJPylYfClid1ojP0o+fWZ6Oih2O319W1dEdzVUeXgxTlBwZCN9T2t8OGY7RlZtOzNsRS54ISpE''@;'; put 'put ''RGMhT08lQFFNayRDW1NAOSY2OnFnR2h3JS57LGc+QSNyNCNjOXJzdCpgRjc6ayZkRj8pV3c1U2M8bFRVSnFmMSp9TGt0OmJ2Z0UmImJxXjlQQk03NGNGflJPY0VKUzZYUGlvIkhIfCVEU3VvaEtNcWlHbEtSNX59dSlGIm47LEVDMHJCNDtwMThoISNvSnpwP0ZSTkRjNzFZej49dERdQ0lsVTZ7''@;'; put 'put ''bz8yaEA6Ik9lQkB2bF1pZXVbLC8pRm9eVXQodUxQKkBOXzhNb1I8dkZ0QU41OX1COW9lZ1Qrck4iRl92Yy8iZGBPJD0mOSNUVnlQRk46Sy5oNSVGOylrZC5SIXYlSSguX3VxSz9tXT1pbElGWXRuJVJ9az1fUF5iO2BJTiZFelV5WmdpbWNoY1dCVGc4RnA/ZkpyZlU1MldGRHVsW0EhYHhdcChH''@;'; put 'put ''RHxEWVdgajhTTS90M0BWVHx1QkNQSjUkOi9GQFBtbWhybVh7bWdVPlR4fD9mc1YpPEdRMUxLUTlFKzJfWks7M2FWeDUyPyRZfDNMaktsdElDQChWZTdXOUQ2UihGY0RrJUA4U3pYP1J0LjAzLH40V3JRODYvcCYiWXRJSm57TldNcFl4VkFZQixtb05pMF1kd201Y19FUF4kIUdMc0BPeWsra0V7''@;'; put 'put ''SHY6RHFWSW5dLCtWUi9HNz9SXj1XWlM/NDV0QX5OYHlBQmh9YTVvL218fWtbQ2J0Xl1kcDBhUjI6by98U21KLGZzNnJIXmtPUywjWy8qTjtyOnh4PyM6MTAqUTo3PFpKaDk6fGpfTDZ2YDROaSFWPyFLJHcmXWQ7VyshW0V3b2N1TltZRSN2JiVQI3dfakJGd2JYND9QT1hjcXo+dFByN2VQYHtj''@;'; put 'put ''IktvVWNXWUswTDJRR2FmRztMbmxkMTNGMitaSjooRzBFQ2Z7WHQyMCUhNkVvWmNaYSh9WmR9YUY3STssPHVgJSYrR3pbVV8vWCQkVClUZGdtTmw+RzJ3QSw0TW93Iipmdz9ebXdUaV5rTmh1Xnxwei8uNkpMP3VpNF5AMUp7YixfMlJwamo8NyskV3heakd1dix7USVpam1bKHwxeGpHKkhqeW11''@;'; put 'put ''RGE1SlpsP2Qxei5ZfnpOT2w9NlBOPU1JRGlRWjAlUGNGP01dKyRqNVFQfjV6UW50YCk6clNDNjB4akVTc1U0LlJIS3k7akouY3xuUj1PckthJj4hNy4qOGd+azVWcz1zYXU7IyIxdkZHSCpeRyM1d0VrYlVkbnNGfkRyZzAvLikoVk9PI0whZTZ3dmh8KiRdInteWyhVd01vRDxyLk08Z2l0ZjJo''@;'; put 'put ''cSlSazB7TFR8PG5UNktqajdeL0JNKyNfIzA0Uyp7KlkxRThRQGlZZCFUK0BhOFVNZmN1NVFPKigwTj89PFoqfjU4UD50Y2pYaDlibDxeJWBAIm0vIig+QyI6XjhVOWFSaG8qR3Fte1k+fjtZaVExdl4pVXNJUmRLYyo7Xzd4ZWlNS1tfbj1bZnZvNmFMSGtNaXlVKiRTTFosfmN6OT5HbEQvIUM/''@;'; put 'put ''ZHRHVl1gVVgpVSsyZEhKYm1scUR1QEdmJH56UUVecTRyNz4mJCJBeyIhTlYibCpVSG1JMkFwQXx7Jkd5ZCEoVkAyKThtMDNxXyF5Z15ZNVF+KHdPNShqO0RQPldzMix+TFB+QHRTTCQ5VGN6JWx7eSxhOEVjfVBSMDNbPiZESnxXfCVBVlp6PFtCZFhNOFBQa3lrcjhCWTw0QXRkUFEwXV0xa2c8''@;'; put 'put ''UylmOlRjYDhReylsJWZmPTpsM3V5UW12NWVaPnRaeC5HJXxUIS4+eF4zJEIlZyZrb1Emc0UrM3o+Mk1IMXV8MlZ1dEs5dWt8Wztvb081MnYqOD15cEdgS2RBc01dVz9rTiZIVDJHKXprVmojbT9eXTUjZzxAb21tWVhdVXouOkdlN3R7e2oyeDU4KWc9ZV9JXzNfcjwxTiZEWkMqV0gwSklee2p8''@;'; put 'put ''cnZIfEM+bDRuakBUSU5rTnl3fTB+MiVxNSJidGJ5ZUZ+fHduVG1QIzNEPnJCJXw+dSQiVEIuIzxWO3RfdlpkeTtfU1BkNC9rL011bnlfJntqa1l8Jmk3NGt4QDc0OUclPUhCLHksKzUhMGtienx9YkouWFZ0RCtYS2V8Ryt1ZSMpREQ2MyhaNl83NUUkZEl9UiVXZUovc2okQGtSSVYrJmpIPEA3''@;'; put 'put ''JCNmXWI2b1I5NHBwRCJ5dFVLUm1ZaVd3JnpUeUQ2ezVgYUxYKSpycVZwX258KThSbSxTU0dAST1POyRVRFNyUj9qJj1WUXNsMDd2O3hFVCY+PXVPeWVIZmFDcmZjXmIoT1dLfVVAbGJpazphdSE9MSIsb1JuWzROd2Y/bng0MSliYXlVSyVoJS9fKyZNVT9BSlBlJXVXe2IlK0pyJTd9Jj4zYW51''@;'; put 'put ''Pnl6ZWNPKXpQXnhJLl9XdnFTaV9uNWxRLndoc2QsOT9mZXhGdytIW1hxRH0/JSp9JU15V05UfFUwbUQiUVVweXswWTRPRE5jZHUsOzdoKyY+PytwUkRuW1lnPGdQTTdHdkwwY1oofiFiTFg/M1hDZlY/PSxhfS93Vl5DbipHdFFgbHFjQHhTMUJFYGlpRyhKe0tzdFRYImY3IVEwPy52XnIrQEJZ''@;'; put 'put ''fCQ4P2EoeHdGYjovYk8wNllWLlNXMkcpZUFoIzpyNVVpbyltRk0hV2g2THF1MGQuJWxIaSZJUFBiQkhjUyx5W2plVFcxbXIhcll0YlJBM31icWZHKVlSeXtKdmU6W0QyfjVUcmxxfDR+RGo9fFpyPkFSbGNYUTBzO2RxJllIZFUkWmYibSZwRGIiKXxpTTwoIXt+aiZlRHBLNU0iQEkyTVhhN0l9''@;'; put 'put ''eFhnd0o6VzcyOk0pK0MoeSpWP19FL1phb3ozazJoKjlkO0p9bVRacngjI2U1Xjldbn5VWHlvPUYqJlZgNns/Szg0bEB2dTRYIUt4I3cpMVNUPj0uNm1gY1EsITNMbzdPZT8+PV9vKihfUHVmJWp2VHsjRE0kRkIhRjBnO0UwOEBoaG1OTXB9S0VxaiVjWnZMIWk+ez19Zm1hIiYuRypGRVZ7RitU''@;'; put 'put ''ci9TSjZzWTVgLj9OZ2lgOExIQDVrZzo5O3MvNFhzJkZoeXhTJlhsRDtDfVRjQWdxRm1CdDMmPD8senhPNTt0X0UkdU8wITdTTl5KVnFlbkVJflRJY2U8em9HOVBDaSZHWDZFSn5dRFs7cjRITHFASTR8KkMrezRPeitHTUdvYyEmKXRpZyp5XVgyN2ZycXptK14yVVY/a1Z7M3MxcUlOPkBNcD8x''@;'; put 'put ''JXQ3RUQ0NjM/N1lYbFB7S209P1I3cEpuLnFfeWJFcWN2a3pJcEw3P2VNT1dJdlV3e0NnYHdKVzg2LGs0Rk9kWiFTT2l3M3QhRTgmSGdjInB0ekRORFZzcXZ8QiN1NzRoWV1iJkU4L1ddQ3slV2RKVj03Z30sYGFWXXs1cFB1T3svb2tSejhyeUdfYCxCO0hbflF+cmk9N2NIUCUjK2Qjalg4O2NZ''@;'; put 'put ''VjEidFRfKTtLW29XLlhsdCVhS1Z8SmgkPWlNR1VbY2wqUXtYdCM/JnNQPTdLXzJEfmB1a3A9cVB0Vm51cUZTU09+aDM9fiZyJExwbmc/TVJ5S0w6Yn1hezd6alNgfmdOVHU9ZWlYfk43KU9BRCp4TEt6OnlePEd0e2ddY2xBR2M0cVgzN1JDYGtESEArUEo5QjprVU95NUpLI2EsUGVQP1V9UWF2''@;'; put 'put ''XzF4TDB7TWBzUEdNZXQiWnliKiwyWVpKPnkiV2trYG1UY15AZHVrYFZUXmclW0R3SSYxbkpOTzpaYCg2NHpXZndqVCxZLGMpPXY3TDIufEtfX2kwPCpNfU17dmV3dXwpcW5IfVlHbnVQTy86XjM3LFUqWT8zflFoIjZPJTNxYVVbU2poPDsjLFRSZ0R4YnI2KWZ+RS42clVkT3hsVGcwTzMrdX47''@;'; put 'put ''R1EwT0tVZ2tvWStbcHRFMVAsVDw5SWtjMkxTPEdbJl43NnYjWk1xYmlZPyMmaWRdaEBVNC9zYFA/dU43IV09WWMmTSpUVGRPP31jIVpTQTVvIXxsY2xELkRQaTIwITg8TF9BNyNrflR9fk1xUn1nSW5ucDtUIWFKMGBVTVRwSlFeZVNbaF1nezsqLF5xaGJfSiJFL1FMN2BtV2R3am1Xe1VjPkNf''@;'; put 'put ''cnAiJHlwZjglcTJ+LGksbzU/MzVsSTo1SCpbdEZJfHYiMlZOITZQclgpfW5dTHorb31eMTpbKDBHXnJZUVtXTDRpS0N3KX1BKFFTS19WUWkwUi5kSkVfS2xDcy59MXJeSiV7Ijo9S29QP1ZBPlYkYT9wbzkzME5ZbkZqMVRaIm5IUmZuY0Q8eSNDKDR+aWF9VCVSb2cwRnVpWnZndHR3enVsVlE9''@;'; put 'put ''UDIxdThLdU93KXAkeFRhdl5FSykqPC9IS0xDTVFIKFpNSCEvb1E1b1YrQjBkTVp8a3l5bz9XdlZIajs/X20zbXlPX01hPD5mZF55VFBXRGxFKTVSJEd8LCo5b1d9UktPS3txOnoyc2JTI1BUKnZuNT1jQCNSSmZfajVedUQ7O21ELmtmUGIyby46VCpeclVeRVZFdlhpMythYi9bcTVtdU12eD1j''@;'; put 'put ''Qz9JeUE+UFglWHNXWTptPXZecyx1UTBBTiZucXNSbD9aZTt3bzFOUT5nW1dAX0JGK1FvLEFuWmBHSzNwWDZEZ1NCclNKU1Y3OkddRjJKWi9xa2Z1cjZDU2JFRDo0MGZRVlhWcjIzel9WP2w0U1V5W0l0OD8vP2JTKlhwMmhPMnQqeGQ2KzxTRXFed3c4OytGeWBrbDVqZSp3TFcpbGEzam1ZKEkl''@;'; put 'put ''R0xBU0s+ez1oUS5hZFQwaCNQQ3xSJD8yMXxLc0soRD9sWHMvPGN7I0JqWShXQ0BxMm56Z056QWBMMCZUJTBZfns9dUNRUEwxfixDKyg7dGVRW1B3Un5XZGNGP2UlNF44ZVdQSkR0OV8xOm1SX0tIbSQoI3llSjRBXWM9bnJlQyFrN1dkTlAxIUF6OHZ0Klo4diYwOSx2TH5sN1NlMSVjVkkjI1pu''@;'; put 'put ''KG5gaVlTMFtUIXJYRCs1amlUQj8kYFY1NCpJez5ddVB0altiVXNVMD1McXEhRXVyUklwKlVJPXs/UU1PfVtTLEssMThiWXgoN2k1JCh7Sn1Tc0tvNVgmQ0lGPElZcVhDO2RAOzNvfHciKzAxTzxtdVtnXXU6b1BwdDdwemlhek0hO18lRkckcyJ6eG48Wno9Y0U+YnFAWXQ+QlExWEBVTmBAPDRE''@;'; put 'put ''NjdkeSYjcE57K0R6bW1kMmVbTTlDbXh4YyxCOjYlRntFTyswa3xNTyZve1pHXnFsTmJbKC54ayN6OS9KXyU+PXh8OXY7NVF5WT9IcXJBQE13bCtlWDh5Ym4pSnoxO3tlXX1ScDx+YU9MJiF9Lj1HRTswUHB9aitvTWZMX1s8aGh5e2FTYCU5LkRdelZRNTpzIzA6VUhWOXxrImI+Yi5mQGBebi5m''@;'; put 'put ''QixMWTw2QC4vMEohKj1fLllKRFFgM11lYz8sPW01QU1edDgxR1J7IyUkeWRQVDJMelFnKk9FVlR4RyJkL0A/NXkmcV5JTGc9V0cjWFNmPyYwI3p7NkZ0WU1lPXskcEpUVEspKk1YZHlufkY9S2RMdi9Pc2NGPGckMl5YLEN4e2NoWDcoLGhWYDFXUlFhez1uZVBqfWZ+fk1LSGh+Zik7fnUwUWV8''@;'; put 'put ''YS9NJig2Ul44Vy56d35NUjY5cSIkUixaVXRaX2UhK19yUTglJmEmT2t8UXhLd3QwJkImO0hSTWh4RXQ9WThUeSZpJSkrW3YqX09bPWNyTGdaeGxTVD5VY0cqZC86S1J0TTQpMHYlN2t4c3ouXyxRZz8iUShjIkJUNk5nc2ZDZlVhXVBbMzpLQHpKc3Y/e2xGWT1XWnRCfSRqamFFRCh4P0FCcEVw''@;'; put 'put ''JiVMI2g4P1lJOkded3VlfD1yfWppKUZGN1BwT152YnFrbV0hZSFyRzNVaVteUlJYZ11sR143a21KbWFbZipgdEk6V1Y3WiJQdTcsPkw4M1RDXV54dFZVUGs4Q3osTFg5InRqTzRdVU11QGQ9Z2lvPFFqO20hYCg8Xi9mPm5mW2toQ3x3dGM4KiRnQ099c0VXPi9mKjNiQ2dqVW5kREpBTUtlOENz''@;'; put 'put ''Pk8+Vy8xMjhZX2ZjKU57NHpme2xTS01hYWojSDo9bThJfGwkKT4pVTF4TWVKZmppP1d1aWhHKDQhSy40U3luaC5ARXtSJTFkaE9ZXkVpYiNlS3xnMD5JTnFAJWdNJWJ1R0FwJW4rTl50b15iYlcxRTpTPDB8eV40ITVLU3U6LCpuaWBUaWxzVE42UmBSQ0Z0RVFQS3B3P1ZYaHspcGpkZjtJK1tv''@;'; put 'put ''cVtBN0J2Tl8vflN8SU1kYj1VZmJ0WGEvZ3Ztblt5e19fZEpjQTo0WyRtUiJLJiZDWjhJVFJCWEs2O3A7KVExJEghIUUrVEJJPmUvfk5Dd2c9e3M6PCZ+TjBmOzl+RHY0PGAzLHRaL0wkaXZNcFM0UisjXzJjUVshP2U1cFBuXlk6ZjFFMG9eezZyKFl9bHd5IihwMiwlISVjQFBUWkxsNXE6TzYq''@;'; put 'put ''VjohRzQsJiF1cmkyemopJV8yTUY4LixvaTpyXSVPRiZHfHpNT30jJUNzUnh2PHd3RkEmc1BXQFFVXzt6QE9Td3MlM1duckBPLjwjQks6MWtyX3hpJSlPZ3M/JDA/R1gmcmEkaGx4SVQuZ3JSKy4kWzM1KW5eOGclLkJ1Il5sIW5YKUNPWW95TE15SDBnRGdZQGhubkojMDo7d0w7V1Reb1heNmdQ''@;'; put 'put ''bFJPdXRoPWNjLzFtQGVTc2xdeFsqaDJ+V19ubmZtU0xSfkRhTUtgRnRWNjYjKTEqKH5nOzAoYVF+QEFBYFIoYUx+Q25QYnw3cXwqe3ZoOUVqaUFzayM4IyJHRnhYd1ZZNCo9aStqTTwsWEVTZFEoYTpNciZvOU47UG4zKjBIUkk+XkZyWlErPlU6Y3l7KyEzVCQ/eVY+Kk5dcShJWFJvTyZpTEdW''@;'; put 'put ''U2QmRCxZLks+KGtrOmU8cXtZRz9mP2UhVWdtPmBlakFZQUhJU1s8ZmdGQzZYc0F5U3xFKHt5Nmg9bGp3QH1WOmpsc0loKH5EWzhvfX48RmovaiZCbzNMXS5fUEo8ZHY/VWB5cDlffnhKVCVTdV17TCorOFVpdDtzVk8qbX5NJjZbbVMkIkhOeylAZEojdHcwdk1HW1MrODNmei5MMzAjeXNJQ0Ey''@;'; put 'put ''UEg2WEBIenVYRyl4PkRzW2dzJn5CZSQ/fjlMZUQhSH58OD50fFd+UmpWJj1kPkxXPm0vaChWXmYxTzViXy5rdkg0dmFbPypHQ2lRPl83SHxERT1ndDgyYit6XTQvT3V+Xll8RkJyJXcxLFo3QC52a2MlYy9xb1ZuQisqakdyezg7TTxNISpFTiYmWDhEVCkwQDdATHVFVm8zQkVyYTAsKS9KY0gv''@;'; put 'put ''U10oWXZwVy4ke1hieyFDKz9XfT5PaGNWSDpeckkoOWo1IntTKDosNjxGSCQ8VFJmNjR3ZiF6Q3E8N0M2cyNQTDk9LzdWQHZ4PStFJG9YVCYkSkhIUDQkVUZMMEdVR1NLLyg8QiF3OEZGPzxlLFhAUGhhMiZOcnFDaiohNWxUTE9xXiR5LEJHWW9JLGNVeio3PDtobHJgJmdZQ1klcyJkOFhsbC43''@;'; put 'put ''RXBbSFVBMD4/WjFfXi9uT2MqJDhPL2t2eFI3c2FIXmA+X3phRFltamddR35MXXNYZnlFZzhHKjQ7eUwuQzU0VGh3LDlbImo3Wnd8WFdLK3R6cyp9X0E2ZTh1JjV4WSQ2aFROJS96Z09AOz5HOy9lRTxSY3dENkJoRH08Xz1qQV10XmIpdUQpWkB6VUVKPixDeThDeys2KjprKiIqcEJWanVWWG03''@;'; put 'put ''fn1kYkdEOz1MWXNQNUpqV0BjbUlVSTYrWEZLdEVOVXRaU3AwRFhrdldAamc9Nz1ifEJ9L1JzSTp6PWxROn1wRzYoblM8aH5eWDFWNzdoWmNkQk1VTGsoajBWT3pGTVk0eSN2ZCU+QGNTenFgZ2cvfjckPWxMJHU5MF1Vdk9Pfjc8RC5kS3E2dl87a0cpKiUiQVFCfTFpRzJWK05ecnI8UyIzSlle''@;'; put 'put ''ZixZWVMjWDJ0MWF1Xl59QC4zJkhIIXVme1NYZjtyRmhiclhmWyg7aG9qRm4ubEk9NkJaY3hLQ3AldC9Ie3A3Ln1WR0RpKFhgaH1+OExVZ180TypJVl40JGVrR25EdW98MmAra3ohSk9Cd2xGeT8jYX47OjY2cXAhY0gqQ01OQGdHIV9FaF0yL2MrYHtDKTs3YjxRfj90K2h8L3J0KFIwWltROEpH''@;'; put 'put ''eFd5OzlpIiZyT0ViOUF+PDU0KC47V243ZFhxMlNlLkRbUng/TkU8O3QsfUlkUXwlL257V0hmdkA0Ji9TSyImZnN7VFV1MzhhP1Eqd1NzWmlMUSJZZEdqV19kZztPITF2NE5pen1mNytFNzBkMDEwXl9gcmBbQ1QqPDlvPzt2YERSaTJyTmElPUxETWM2KH1GTCslNzlxY2RQLmtWVFhORG0pe20/''@;'; put 'put ''Z1YqUm07ZXgxVWYvZ2dAW0J3SXZNbzwpemUwblZDSDVyTmR2WyNHTVJmdmddMn5EP1NCJkl7Xk5JRiVIYjlgUSxwWmZeM0lXQXtlMFc7NGxBPStFZjBlbT9yWHltSmZHQXdBQ1A8e1h8MXk3NTBSQmNqNzRAWWVnJFM9dVp2NSFJOHw+NVI6PjskeXRKWXtLXnIiOEFffHl9KkZUOj5nYl46cUJ4''@;'; put 'put ''biMpcjUqOmZpPV12MnNjR30mMnIoVmhTY283ZV86P0xFfG4pK3BPWHtrIXM0cEhObX5eRyFSUGxOVVt8Z2xyV35CP2VONnJEdlpYbjIhTEw3dV9hR01gaDBQLzNmYntHRDVdcFQzRDBsS3ZRKDVJeyo4SjA/Q1MqPklvMU0sanQrLl1VcjNxaFF6MDVGW1JwPzJ9OWlOM0orZyoidDB4aSF+Lm9i''@;'; put 'put ''NXNtX0NiLm8kIUp0NDRISUc7clUmfGc3WHJhJHx4MSYsVTdTJTYzIjF+NnxmY2JDLFZrZVJHaj1BRnBOej4kMFFGPzosckxHI19uZ3l0SFo8QE5pU0pzRkxfJVZfZWo1e2pDRjUqUUxhOjh3TWtpbF9TfE8lQzAmPXYoUHgsRUNYOmtvO1kjbilJVkVFNS5nN2s6Nkk2KF5Ee3JLcHZYR2FhQmsy''@;'; put 'put ''M35jb2A5Ln5KZU1dOzFoI01XIzozaDZPbn4/Pk5pNDFlUS5gOng/RmFgRz5lQU8wbzNwRXcpK3J0PjxaUnA9LmVRdDA1NztBZVlyR2Y4Rkp3M1JyVWxPZ0wieEEyZj4peGV5Xn08cVRbSDRVSEoxT0FoTCVxJGFSNiVhWm58VzlNZig3XzY6NmNGSzJuJTk3Q0Y8WXdYWTNOYmJdTCMqbis0Xig+''@;'; put 'put ''RWMkKGcuTygha11RfikxKnlbIjpPdCpWR0lzdF8jQl0/PSNJT1NFPExHdnJTTlhmQCZjViNTLzpeajdCMD02MX0+TVpgR2xdJTpTSX0qUyZrUkJYW1VXejxMbEh3PTV2dV9rcmU1WE58Om0/M3pxb0hwc3t+dT9WIl1SY0tuSnBQOjdPRkVbKV9oaj82P1tVezkmWEtKRXMyPmw+bVdgTWUzNSsr''@;'; put 'put ''TmlxXmx2X1t9SXxsa0NxImpQelMsI1tWMUwuYjZ9KW4yd01sRFlkTipLQkQzcXsvX35HR0BJcEVzXV5PNHxWUTJXWCt7bVlmQXVgJFc+aD9aa3k6VF1aU24vTiRUbVAmRikwNERvZz5aX25WbCUhMV9eSl4+ZEU1SmQ1IzdULFo/SzNeeHM8e2VhTiUwS30iL0QoP0g2SExGRj55Smp1RkxLTCQu''@;'; put 'put ''Q0Qwb3VxTkFhVEIrQC5YSTtqbWcjaW5nYndTMXE2UmV9KUNbKWRGSDQzU3ZxRm9ITSJYT0paK19HI31xeV5lczZJMDFHS0dMUytJd088bC9LPn0hRTk3Rm48fixMZHpZNmZhPk1+Qi44bFtOOGByYmdrWXBNRWoweFhEVj8hXnB1MVNrbVhHOHAmXSFnL2RbVX1pWl0wQEZaKz5KQmV2cF43NVFz''@;'; put 'put ''XXtiNGpFSTNUJERXNCY0LnFdV0pTIVsrbUJlU0wpOmlRPEppNDZQe191QmZXLFs9ITczXWM3WX4zMj1jWDU+Jk1pKl4pNmYpd0NaM0wwPn56WWBSRmZCWlhDMU1bbzlfQ3t8MCZ2ImtaU0IieD9ITXtgK09xdjBFPnQsRmZpRTJTRjdJWHVxP2tbSCZnViZjK3RJZUsrczE+cW4vM0IrMH5DI2so''@;'; put 'put ''M3skKVdZMn4+YjhzSSNfTFtvYS8xRndgeWFGaHFwbVN6JSFWeDZ7NV5leVU9Un1YOVpDaExoMV5bU11xRVVOPWkpIVByRjdsLzR2e0FEJSo9IU9bP0l6KHxEbzouQDc9Ols8OmdKPzx5I1RYe1AuMV5MfjJ6fEZbflc4XkxSITU7PXxjc2hvbmtyVDYwSFIqMFopYDBDPntaVDFmT0RYYFFIdjRJ''@;'; put 'put ''NUw6dDduSDJqT1J8LmMieUIhdXtQOFooKjVCa0RYJWhDZyxDYUE5aWlkW2p9QDM4aSNJKEJieXVERjY5ZGtqTkI6JjpIe0YmV0BIWm0yKTBgdG9ye0V5WGpQSFhnKltlRE43Yl57JXAvNipLdGUvS0xjKzM3KTJPOjk5PHUuUTUrISZYVV5Fa1deLHszMmtlXjpwWWFNdV9JZlM0Kmgpa2dddnFG''@;'; put 'put ''UzlJN11qam5mc31bZSQoWDYuWlsoIUpEQ0QkYDAhL25jRDpHO1NnKDlpS1FbXW53Nz9EbEhOV1g1OX4zfl4/TUJsXit4XyNBa0JXRl96IyIyOV5XLFh8bHpYPnxefXl2QmhFVWVAQUE4dCR+Y2YiM1toUjZ1O11PK0c7KFhVQzBheldleylPKWJxVE5POl5PZVBpOjNxTUBNTFhJVXdzPDRDbHlz''@;'; put 'put ''PWVqQXxgNV5TMkdeO1RMaTBJOkV+NzldSFtJOnk+OiEjPTpEPzZgXlUhejs1UypIXm1+dmJXPkkqa0RTYWN+eWFrMDNIZkE7cl0uU35BMCJmKyRleEFDYmksYSZOYEx7O2o3O0ludUx0emwiPHh6N2pkS2lPJEgmWXJPeFAkZF4jMFJWW293TFhIX0FTaDxMZjFPSiVEO0FHUVRRL2dsYV5OTz8j''@;'; put 'put ''PDBTcSpfdiFwQiYjW3lyfXM0aDwrSnFHLGpwO0xlfEFqLns/OCpQSj5tfkFHV0whOX4rbWhRQEBrPnw5K0BiP19hTmFzYzJSOU5mbyJfb25KISU1TmFiTT1ufGZYZzBhRGc/UV0mXkZNayNrbjA5cjNaYzAlZSgrUVNId0FHVX56OWFDYDIxKUVXIy47WTZrfnFGYWBrKTNBITQyTTl4Kz5sKkR4''@;'; put 'put ''cG1MWEZpNjd4Q3x+NHUzLjd5REM7NGc4Rll4L2F9MH0uQ3NnJnNpPSZrXWtfYGBnSHp7MWQ2JUdtOyRkLF8oYip9RWlAPE5HUnpbYUI0TWNEQEF5OXIwPWwvRVh2ZkY9elJyaDo5KmpubFFkPHQ7KzNHSWZpY0dYWk9GfVNUPnBFWGh9X1I4SCFmal90akZSfn4yUHBwQDNEO2cpOl5KVzEoOlNM''@;'; put 'put ''alIzPT9URzgmPmAqfFQrYXE/bkpTVTlRMWhoRVR7WWpbPCZJUm1DT2NjaC9lSkJ3KE5QWVohM1Z1OCgxaDNIOmVZKVdBYlhjPk1pfStOPGM0Mmx+UHFjO0NONHtXV0c/X0BvTzkoc11XZXZge2tDdHtTbzRtKiFaanRUTXBXRjMoPjZre2l0WDB+S31VbFZhb0dYU3NUMXFJXzY2JnVKe1gqXUFA''@;'; put 'put ''bTwzc19Vc2tVZGQleX4wL0gpMitLY3lBPU9GVTpEWzZ3RmUjODxFeVdePUZORXldXnAvZC9sZS9RYyhsb0phLE5KYjNjPWY8WTdidml3e3MySUtic3R3RmFgdipPRWFHby9aIyZKVD18RiZ1dzR5aHhAdzJFdnkkQVFTSkJ0LlEhX1FNOUlUWSZpXyYkfihOcDlwIW1dbXI4b3Y9L1ZENWojYzhY''@;'; put 'put ''d1k9QlkoRllWb2YxIUg6WiVVckA5NU4rNHBMeGhWJipTWXNNLGpEUDZOR1IsY1RPeT5QblU2TjU0fmFMUkRffmQwLG1NQHoqQCs0cWxzS3gsSzhuWDdCPFN+S2c8Q208RVVVSVZrOGNmaiRlJStfLH0rMX5yWn5XLzt3Qj9tU2Z2eEtLSDxPYy59PiU3djp4NnVhYEZuYHhmNXlZRz1qb0g5Y2kv''@;'; put 'put ''VDZFejRKY252blhmfXVnalFkMmcsUXA1ZUZ2ZyEzMlt6N3dtbUImKTZaPVdpTitzNmVJQSRbRyFYYnNebVA4IW4xNFB4VXlxXT8uUi9rI3NNMDJQcylpVW0/fjhPOD9dVGtueCVMblN6KkBXTWIwdSgudyEwej8sLjF8VXhOVWxRJSFhY3h5XyJNVWZwY2NZNDRidnxbIlImc0w4YCtoOHczUXZ7''@;'; put 'put ''QmMyVipfbmJxSTNjRy9Rdi5DcHthPzo7cnhqX1EsXzcjMFJ+VzBQeSRbMFB2Rj0wO1Y2cENuUXV3aDthQmt+VUt6fFFfWElHVnlCTUw3JFttZCNRNix4ZmZaLDBgKUI3SixKW24rLlRDL0l4fFg8fGYhfGhFS11gX2pSS1M4RVY9QSY0T3NEcnd0I2lXPGxIKW5mZjliRWckMmE7ZDI+bC82KlZP''@;'; put 'put ''IWJIOXVRQnVbMVF4SzV1b2MqVGtOKk96XXszeUMscj8hdTpDdWtJJHI1SlNPVU9kW0JqYFhsMzFQMmcyalkkRGBBZGZsZHswRF5XTlklMnJARGJVUFpMRDR5TEY7KiNHOlcyMUYyfCNQV2xSbmVkdEhbVDA6L0R4RjJ2dXt3K298UWpGeVkvaE53LDw9VVZ+a2haT3shd3VucGRZeiIrYjV+M3pY''@;'; put 'put ''cF16ZnNjWypQQzk3QS5HfSxfdWB3OWFdcWRBJGgwdl9sfkx+fjZKUDhXQVI1UkR5KkZ1NGAkRDxYRHR9bno5Z1ZkbV1uQyFdSFlWcSwpJnwydiNfODhSPjQ4VSssQGM+PkI8aDtGSVk7cn1zNHomWENjal1sVUtxWi9ZNExkdlcjQlY1di5UcHZqdWptKmEzUC48dG14In5uSndzMitSW3crOWtj''@;'; put 'put ''PjIwMn19YmwxPHk/ZjVyREo7IVdKPmNQUWtZU0l9VGBNeFtJKkQ7KnQ6R0Qsfl9xMz5POVRaVTBQLldfdFMqbXwjcXQ+fUt5dEVxeE54cndwZitORmh8Vjd+ZnVOVThKcGdOT3k+ZjNwelBiQChoXVtRQFs1cUR5OygiP1R0a0ZDYVpjKUBvUGd5dkJBaGtjeW5vJkkmR2ZtVShkc1M7K114dTp2''@;'; put 'put ''d3NfTUN8NlVJdG8vd2ZBemN4blR5Ujc2JV0ke2lwJHk1RyN7K0NJX3NAXk8yS05sUlh5VV5pMUs8LHxYMmtdWn1zWz40aDd7ViZlaG09dDZBdlJfUW9DR1s1TlY1MiglSkpwP15ka1gjNTIwc2VDeFh4Sy46M1EpT08pejBtaUBDa2YwIyxUelI7XjdeSUB+KWwiU15JM0dCSmZeb11hU3t2Z31H''@;'; put 'put ''JT0kPCVjLzUrS0QxR0ZjbSV5VSElM1UrNCwiPllndVdbYFk2UyIvWiJfXjNyV3FJNCFJZHZvTH5+PnhifCosQmc9QDhnLCNXP3BXW3tNcGFzOUkpPVo9LlQqVigiNDFLWWpXJSNGcyl4eTBbX1RGK31NTjRIfGYoTDVEdHxXSVFOKEZSU25xM11Ld0BJdGwvPz9dIV1XaCFWcURjSXhFIkl1XlZW''@;'; put 'put ''QkNrTXN5YjVgSGwyYyliSntJNn1uXiF0PTcjX0YjdDszVGFyTEd4WGsiMi5qfkh3UF9IJG5wO2FLY259disuVyZocHRRe14hZ1p0NUtgSG01cUhqK0BQTk1ATCspQ2V5e2pwOTB2OGl1Zk4iWGprY1ZHNzlQb0spXjNJY0s+TmBaUDhIUzwjc0JHaWF3TEhfIlc1dy9VS2g1JDdofjlsU0QwKzR3''@;'; put 'put ''PzBQKDw/W2B5NWlQTmxoTXAjcEVqcm97M1l4XnRTaU9KJTQiMCp9amledDk9cVZqalZXWjJ3P2cqdV5+aUdMUjI9cGB8TCEodiUhemVuan5pNCsrSjsuQVhLYmlMMHp5YV5MOzJvekpyK2gjMFRDLz1Ufk4uI2NzJCt6OjRye2teMnZyMCxwVnwjYjhvbk86JFouKzdOa01PRVBOK1BKIWE2OEo1''@;'; put 'put ''Omx9aWswbnY5WCUvKnYuLnRkQ0R+bTNIZEZ+N0QjL25aaG1+eGluN3J8UWpHWTtuOHU8XWEuY0dNITcwMlJibXcxW2VvTnJVIixMb2YjQWM5WDZwJHwzaWEoTCMzIT5GOC58VXw9fVEwZmwycFVjTE1nP11tclIwSDc/Lm55YkBGc2lpR1Q1dn5KbjlVdS5Cd1R3K2BOKEVzXWlkIWMrX1QqWXl5''@;'; put 'put ''dVZsXmZMdHdRYkU9I1dWTUY6QyVnVUxha1ZHVmomZ0pzYjpYK1VKcktxREFoJi9PM31jQiN0WSNscC9DQnMxV2NEd2Y7QXBaM0E7WFJ7LjE9fEw/fkBzKCpTek1sT2pIO252Ol0yL355NixnPnhjL2dIfTZTZ3VwQEE7UmZ7K0M7JXJ3SldZX1ZbPnBpSEVyOENpclR8UlsyPHpBe2dzJWA3SUMs''@;'; put 'put ''bnlmaTl6XitWVnxYITN8e0B8OW9bYEI7Y1o2TDFGSUdfO2U5anIzcTNhZDBRNkt6Ol5FW1Q7bDRrd1QwNCQ+W0ZmKEtjOEU0KXZodk5SV11VKkw6N11oXWFmPCxFTXQzZzhqejprXlJAP105YTp0bT4kZ2pAdnk8QCYwQmxbI0Vgb0QpT1BnWSwjMn0rX0FnemBFOUYzUSVGJGdoeG1GZDhxcyk2''@;'; put 'put ''c0F6K2ckentvPzZfOUZjaENKdDhudz1iKiVvMF1Kbj9tMCZxb3guJXshZ0Z8aiheOyJXKiZUN1dLOGNkRWxMLnptNmhPe29VLDt9dnB1NypDVG0pWW9gYWgjaCE/MGZobGhOXlJCIUV1PHBmI1UyZkNZXnclfm5VWVJAciZBd3twUENYMFtrKXB6UGciPVkmIjNRYlFhPnlJbWdWQzBie2BaSU1p''@;'; put 'put ''MmxVcXZwS18jW0xhPmBuc14hZiZpfSFdSXg4X1U7KStzLjl2KipZS04xb2A8KW1Zc25RKSUvIjZGP1FGUi8hd1FxIkEzIltxTUluOiY6dUJTSH08e1hhPCw6T050ZHNlPD5DKVRCUjg+Vmg9Ullueyk+dVlPUks2Wnw/cE0haWBzdTl3PE9NZHY4eE5KUF47QlY/b0JScFZ4ZDZuWHorJjAleUZA''@;'; put 'put ''TGBJPS9VZl46NEw1K0RmSDpEdTpfaEFvbUt6LmNyOiF7SVAqKX00NCNgJld5M0VRSjoyOitmTWJbekdxQV1STmM7XTo6YGJEKns1NVdsdUc1NHhTY0JyaW04eFNUKUFyRX1ybEBzKXBxSX5rU0dwfGxAKlBtTUlHKmRpVkIlPUQiMlROYHI+QCRUIyM+V085SkRpM15RSGVEcE16fSx3KFZGLzFJ''@;'; put 'put ''WTs/fltuKEh7Kip6Ml4ySzBaVyp9Szh5QVRVT11RMkQkPC5XYEZfQDRpSyo7Xj9HYnp0TXBuUFRvV01OQSxCakE4TD9UXXtCRHpETVV+T2cmeGA6aVtMPn4idUdTY2s4fWxSYDI1XTY8QjsrfEVkTjFFdXBvV2lrbURmZ313cSg4aU8mbSM+LCg/VTBSZDI+b3tIZkA5WmtHblJDa3t+PXExRyF7''@;'; put 'put ''K0Boe2BUb0xBIlJSN1tFQHlRQ3F2M2lVJXM/YGdQPmhDRlVzKzRiZkBDdUdocHNSSHhuRTdrIy9Dbjh8Jm43THB7e2FUMUBvS0tMZ2c9al1iJGNZNypTQG5Qak1FIToydTk6b1VkYis5JSplIV41JWpKUUlIWV9Uan1saylmZ3VPYnJ0SjBpR0ozS1NYTDtUQThRXls9YlJHSVRLVHltXVkufGpE''@;'; put 'put ''TXhgc2AheipvRzk7eW1RcyUqdkxmemhlW2I+QmwkOmxecWBWPk9CVUNSa0FNW21LaUolb2hhZUNjODM0WntwNmpecWQ+Nz1KW0VOUVt6Tk0oQlh7eilhek1WJmZuO289PiRaI01YNy5tMUoqbGV4eUZQZ1pJS2ZKekJnNCJtYkx7PTBqSDgxY0RHeFYqYW1kOjAhRENjcighYzZMK29BO05xbCgy''@;'; put 'put ''cDtMZ3ZBQXtSX1Z5emRRLkdacjZjM0Y7Lm8wJVlHRHdzVXJyPyIwVk93OF0oRyMjTSF0OEM2SiUyLE46bjhRUU97I3EkSGh7dk8lSW8lMmgjdWQ7VyJSeSVsRV5hTEk6TlRKOTFKZTBDJiJPVmQkeUIwZHRZY2h6TjxoPnBnTDJ7PFteUSo+YSx4cUdTS21XbUdaQ0FES3koZFprOkkhS3J7O2Ji''@;'; put 'put ''bkJCQDcybCFHISI0d1B8Qm1yITYzUWdkJDNiJGs3KnREOm5paz5YPlJLVF5uLjttSWJ5V283cU9TS0xrWz4zdWJDSj1sKW1FNkAzWnVYb2AzPChZb0s8fH5IJmwsb202fmQrUiVwRDssYS43ZzcsIVNiLiFjJVdLT0VgSkMlfUY1SnMmMHhsbEkzPW0jKkp8ZWlQY1hQSDJRSXwrQkVYKGFPZSs6''@;'; put 'put ''OC5zMzdnIVN+fTFFKTdSRzZOc2spb3MyTmxYLH1WQFU0YjtobmwoVjJEYWk6TWEuXVM8PGs1ZjI7PW4iSX5JfWQoQWkyVFc+eiJ9YCZ9dnw4O2peV0gkY0t7ZE1QKFl+aVIyJH5yUnxFdW1xOlMzI01dOnVYPV5QX108TTh8czx5QXxARmBvK3pHbismMFtCfCZha2JtZVo9aG1KcVp2dkQzV1Q7''@;'; put 'put ''eHZLdn1DfmtHeDZxLjdkYll5VlUyXjBjPHwvdjIsXWlFPTNEfkgwLzwyXyZXZS51b1VoVFNvRklSdU0kSTI6dUl0NTBXKkNVRThfLltsW2koNFR4WWhGLjdVSCpzcmwiVSxWVjg9KSk2Nl53JSFWWVY4RS9zXVN+fSxCandpQipocWtqVnNGeE0pSjhXajVAempTI2YiZzhmfnVjQkwqZnFOJG0y''@;'; put 'put ''P1srOjM7P1B8JDU2MGEsbC5EWDQoXX05fWx8U1RlcDNyWHFOJWt3KjNlJlEkTVpAKzlFSk1rVUJZTjhRRlM4eSMlcWElfCVjeEc0fns4aTVNX3lBSmpAbEV7NzE9UkowTzwuOGkuS1Z8RV86Mnw6ZVFPem4sNTJ3aFo4QjRhSVFjJUltL1EhO2BKfll6fE8zayw3WVZQekltbj1OY3hjbFZtZFtG''@;'; put 'put ''d3pLRjlrZltpOXh8aywhc3xEOGI5RkpAKCk5WlZ2PzQ8eGVaTXRqdG94VXU5UDRabTJsKG0pTSEsa1N9ciIkM2t6Nys+SDVsODJAOyVGXnA+IUdjM2xHbEp1IyJyLmg2UmY6KVdOSWVWLyxudU9GOEQqRjh0cHtjUTpESC4kXVEqMWN1d2VdKmd3bUtwJHhjSzFWd1s/UmNEZzc7ZXI6NGZ8KkJR''@;'; put 'put ''N2ZqeDdpbWRjLz8pYiNGNkJ1TEp2PV1nd3s9NzUyWGdLM2gmZy90XnR6TCtbTlhYcExnWUJedy96cXtqO3FWK3d3bCNNSGloflB2aj1Abk9pd18ka3l1Y3tOYkdFYTRARjJeYE1QMihEVUg5WTJAJik0SDtOJUc8MGR6bURwLDJnaHRrJHIwajspYTZhNFFQcGZdfDpnMTFyaj8qOClRZSl7XT1e''@;'; put 'put ''L3ovN0EzVlVIa2t3PmFbQzAjYVR9cTNOMkswZXhSR2NXSmhTLF5yWXNsJnt+VWdqekRZdX19eDdDazlpW2M2MGR3bWx2WWt8OW9XKC59RkRdJEt4VnAhbHwpeCtNTi9+cjRrMnEzZzYsL1JIXWB4OWdDOE17L1FwYD0pUnUuRzwxNkMuOisqblJ1d0BbdGN0d1VPcD02WCltKn1MelpMV1ghMGgy''@;'; put 'put ''LjR5YENQT2Z8OHx4NC9BTDB8eUgpQDVEQk1eclk1Tk92ajgmK0k3bF19ZWpYMjd5PjFUJU1SczljLyJAR2N5c0czQCs+dEs4an0lKWpTNkBgZ3AuZ3w9QiV+P1FQZClDNmUmaTowIzJbdEwhbDVsfGxOTFcmXXxzZnA/R25qLlBTLExxdWdfP3J4aX1pR0tHb2MuWTY2dmxdTyxsR00mPFd7Kn0s''@;'; put 'put ''TS52T3o6d3FWITtxMktpPzRjdn5YMz5hS3FfKFRRdzl2TSFPRk9OUzZ2IlZLVS9qc1p0IXt1VDhDVUBlLF9LbFZFbzx1UjxKKiIqS3ByYERdVSQkPGRrTH5NUyIlOSo9S0k7d1lrfkguc1VnKSlTaVhoVltnbz50RSM9TWpIT1IhUEZbVUpbdVN2bnomKkJQVkhGVnJdWDNCO3Z1azRHYnAzc3td''@;'; put 'put ''YC4/UHIvQWBpVkBgJiJULzQ4OiJeN1hzMzlMZU1YdyZoakdNIkZCVjZeUG1FXjVXcGY2dCs+XmoyKWlba3MpXVowKzgiLn4+OHwjRmh1cDlIMTFKY2xkKV42N2ZyYHg0KVROWGx4YGQjQWtfTDVpKFsmcEhpTlBFcDBjWSRrSFp7YlYxOk9FQk4jNHNgXTZnVzdCfTxPK1VGL0F9N2NmOyZCbXR+''@;'; put 'put ''bz9VP3UwKGVnTCIlQE9pKURCcDB+QEdZNU5QbmwqLl9AUlthZCRoLCZHcE1XWjRJUUZxNlNyVFpBJHQzdGAhR0xWYH5XWyRUeHM/cEhIQ0VoMDkyfTlndDcrVSwsdDlYeT52d1NXd1lYfHF2W15iO2FDRiRkWWksZmF7alN5cEUxKHs0V3ZUKWxUdTcpPCxSZ1kzfn0raH0/PXJNXiQzMjdIbGpS''@;'; put 'put ''L2JSflAiYDl1U0E7ZSNQNz1wTlVzRUU7cnAkIURoXzc1MHhAdyM+ejs4SWZFQiVBc1pUaFhDZVh9MF0zUnp0VD9HSiQxXlh3YUpmeUd4U0VXJXRiK3RbJUZqLGZ8OFhQbCtWT2Q7TiY4OUQmKTs0NCp1JTBAJHhyaUVLJjc+ZmdMRDp8YmFwPSFxNllLejxoTixER1hWNXFkUk8haFkqKTAzUlRg''@;'; put 'put ''Zz5zNVhUSUJeLHpUKGdiMlt+Pz83YUAydDcpTiM8TU0pXmsyfkp6NmJAd2tjS0hzSGJTS15ZXS8iYTJYSVV3JjRzMWMoNmIsXnhPVDwwbCoqbVU5fGkvbzxgLGU+ITkpcTFuPS5KZFV+eFZiTEMlJCswZHo/QkRtNCpddHtaWngsaEMuXyZ8QiVELCV9VTZXd3YiSHY3VkNwNF1SPygvdj0mMyt1''@;'; put 'put ''cnwsI1s1a1JCRnR7TTVmInFYOSs0a31xVn54LkFHOjI/Zi4qNUh1Ym04Qy8jL0gmYldMNDp7LFltS0NRVD5oWURGPFRzSVErYD5IUUB0anAqT3R9c3gxZH5JYjNpWklnSClEOy9ZZWVsUW9AUzRWK3s6YFo0I1p6LlB8PG92ZXp4e1pEOSJrQXhHSzFQWUpSUmBPJml8eHYya1o6Sz9seDVGZF95''@;'; put 'put ''MEQ5YEZ9XmdeQFtjXmAvTHVIayFTP2BHZUd0Ojc7XntPLywjPUtEe31teH1gSUNEMiUldzVbemYwIzRFLGp9N1c3RnZTb0swMUJ2SzpLSTg0SWpnfjY/aV8kazxzQ31acnxGWlJpSEN8TzFOOHUrcyZUXWJwQyZMLzlTYzowYCNKbmNWYjB0SCN0T1lHSSZVY3l4LnskbGBkNGp1eyhUYDZGUWxK''@;'; put 'put ''PkU2fUJ5PSVvJmBbIXxYb09FXk9rM2w7ZUcxdS5MbW49byZ1NkRHRDN1enJWXWQhVVUxM0gqK3UzTkheO2dQWGE0Tyx+SEMzJVdhLzlMMWNmaWdqWC9rIUR6byIrM10yVnluQ0AzNW1DN3FkKXoiYGhjU0heMFtVRmpDQiJBZDNgcGpxV2ZvYyppeEk2Z1o3SE9eMCQuclZzZXwhUi50IUxzb2lz''@;'; put 'put ''MjNHX3JMVzsue3R9XlksakMsY05ZInpAe2hMTDkhYmpVWFViaHdwfnRgVmt+M3s7VGw3eCJbVFdDMmBdKzRzLzFvdTRxM1B+VnEqcWgsbztkT3xaK24lXzFAQ3J5Q0xwNlo+SjpJRjB1fHM+SFtwVDIxRFYjWHxAVTlnayhHTiFBRzcxPkRYQ28rL1YlK3pOYWtbL2VPRkBlc3FNezhKWyRgfnVm''@;'; put 'put ''YSVZWUMyXllCJHhkPCV6S2lFTmV6MmJwXm99L2BPc2RaeC5Uc1QoKXpXRmgzVGBBJixlIWclPFo3K1FnYE49c3ExPnVBWGBXJnxPNExgVFNgaXJHUkJFdXBgbEFtS2A+ZEd+eXFLT3pGIngoRVZWbytXbEEkbl89Kl41QHVkI1c5YixQMVA2V2dZUShge340VCpWYn47eFQqdzJpXSJNU0FvTEBz''@;'; put 'put ''dXpYM3BWJjBCfmBtLk8lL0k9MTBOcGYlUCI+dFU1SHc/P0lHWDBVbGVRezExbFpFfjJjfmtGT1JBWXV4SSEhMThZSSpxXWRyNyx7eig9Tll8fUA5NV1aXSJlOXRkZ2ZUR2NkKFBNNUhmSCx3NHkvfHRzKDQqLCJ5InxpUlZxNm0zITlaan4mSjlDdkllMVpfPUhWV3ppfENXWERSNzldOW5mbTFe''@;'; put 'put ''RW8hOUJQWlFqVUhLRlBvfFVUXm9iU3FqSzF+Wls2QH1YfEBGejhrM0tBO05oM1pPZiUoTntvOj00Rz07fjEzVENxLjJRQjJQQiFDdWV8TUYpSjBHNEFrSkhncW8mbWZNZ3hwMWY4JEt7L2kqUFVKZmRKX1soeW1aaW8qZVROISRXdFZ1U3N8U3dPbEZDd15wKzp7IzxvPTZrQGhPZWYjbUFQOzVk''@;'; put 'put ''b1VTNipgPEVaKn5paFlLKiJJcztHIl1PYlAvS1VQcGVTKWVlXy5FcS5+NyFMZyhtTCROJCpWWHB6fUJNPmxldHtfJEl1WHR0VUA6aGYwREBBbHNwKys7fGZCYyR0PUdaKUJTO2UpcD4hR1lrZWRhW3tdJVAjJi4/UCJoX0tje1s1TmtycGsiNkcoa1FaM1ZuV1kvJWlXb0dIaiVYY0Q/bUgjfTFU''@;'; put 'put ''fDleaFtVOmcoSGljcFZxMEpXeTMlLHBMKnVjX181Y0lFbV9OVSRSSXFFKX07dEVjI3dFNT80aU5oRCElUj1sdFFnYCYuc0VjPjpNaSNPZ0pycCVkVV1hI2llU3N3KilsUEIwbG5FVSFaW3dUYTVxYmE8Tk11OG9tSklffFFeLzg2JnxTeHM0PGw2M1QyaGVSN3d+OCFlPVJqOl11WFIyOFppV1B3''@;'; put 'put ''OnQvMWddPSx9PSk7Q0hkVHZHWk0+KUdXJSJVPilqfjpLSHxjUEJVXnBHeXhWJCpiOCspImF+QTRLSD1WUTArSUNFTytkLCQ0X0ZlQipzK3NdeVdqWndgXTNzbGxoNFQ3LHBwOTJIQ1ZDZXpqQUpCVFhqMXskY1pJZH5IUGxefU5hYWppN3chfWJZQSJwODRtOHhxYDNQP1k+KFtEM3sqXnF9Xio2''@;'; put 'put ''KHt6SXQpWS86Jis8Ukw8Knw0ZGY1JHg0S2lAUCpaUk9CbGtPTlFjI3Y/e0dRKVZDfmNhdUhGUj4zZjczMWFHTCM4fT03LmJYeTs4LzVmOnhyWSVWMEQhaH1JJHVGLEdqJU9Mejt2KW5sO1AjcXxVL3VCfnA2WUAzLntkPXsicUhFaGYlLy88WSVkUW0mZUhGLEUkYTBkdz1EI3VBSW9uNXNDXl00''@;'; put 'put ''KUI2TE1OaD9ANFlVKSNNNip0eys/a0NCZ0RleUdXPHVHcVsxbjJDTG8mWjUoLjpecW1vN0FYbj9LeSh6OTsjc1FmN2gjUSJLXjczIl5sLHVnajdxM2lUIUhiSF43ODxRdCtUIUsrOXZ8XXk1UiNUfEJ4Z3E3dD5kNFZJcXhnK2dQMHBHaU0jSHd0W2kpeTp2cnRDUylOak9wenojJjEqSDdlR3c4''@;'; put 'put ''fU1wTjR1KFQlMDNxSmsuKlQ/MzBBTilqRjFXJTpxS01oZC8wdmkodn0+RiMpMjklSVIoRjw6fW0hay90c0pdKWNwSkpTPiNAI1RqPXlnWEp8Mz1PWHhGa3NYRCZtN2JnWmB7am9hQl4hYHs3YCZTYUkkP2liYk5kM3pwfWoyUzRhYD9xIWVYI3N8T0NKQFNsUilbRSoxRUFfTShXSVQwLHBgRyNZ''@;'; put 'put ''bVFvTn5QWEclWHdefUI3WWp6Y14/TzdCNTovS2hSK1NOUlF9bT55cmBZZlZjOFhJJDtvejRjbzpHNXU2RlBCO3g1aUFtVl18ZjlGOWlsPyEkSXE3Rio+L3F5PmQrPztpRmFxTEIwb01JczhRIWJwZlVtJFNKd3YsXjNjcisqRSxCek88ZjBOZkpLIiR5Ul5gaCx0JWdaRE1MR0EmdEh8ezMxODMy''@;'; put 'put ''S0crNWx3djUpMWpQbk8hVllnT1c6RXpbTTN3QCthYVR5W0RTNyN7cXY9IzVIeUdgMH0lUCZHfEFeJTlHcTwzVmJYc3VELk47fSowallRZTtlVz0zJWchSUlGRS8kNWRgJE5oQDpuKVhwd1lAaUxobylwOXUvOVVPKzc3WTZFZSFuWyQoN1VwQmkjRUBOOyU7L0tCRj5fdm5TXmwrc188eXJFWF0u''@;'; put 'put ''fjNKfCwvbzklT05hOSYwOkdWRilVcEIwdDNwN0deXS4zKiZFN1lvekFzPk1hZF1nITckL1V+T0cqTSxbRTZ7SSF6bDlsb29WZmQ4PXg2OSl+WmtUcUVlS2VqfipuN1oiLGRgYT8xJVJMe0ZPZ2MkNGpYRFcqM2Y2e3kwZXxIPSpSamxNVT5zYShabVYzZHFPKUlvMDVeVUpWOihlXTxJcHRgMH1v''@;'; put 'put ''eyhiS2RuU01fYmA2KWVZRVNLeDNpMi9uKn5abmF6TG8hJFplKW9TMTx2MGlxUFFVWmtNPSZEcEJEOHU/aUBiTU0xViVTWmNrSDEsKWNwIyJ0YVYuT3FrOzA1PGZ5YSpBRjBEWkVwMU5KMjBbcG1EPTlLeiNpMC5NTTNYdGVDYCtSamRWWDd8Y3k/V1Z3aD9FM1UhbSFOaTtmdDJOLExkL14wemoo''@;'; put 'put ''JTE9aUU6ey8oXUFTMFY6JSUwUGhbXmx5UT57Smw+UkU6SWVTY35QPk5fKSFQfCx3ZE1UPnc2eF1BRj1TUmJ+WyhgOHc4OXYqbC8zbFUqO107ZVIhIS5dW30/ZFJ6d2RwJm9NdW4pMlk7KFRpOSZLbztlTUxxUzBpVnVdOCg8X2VbU0I0IUE0UWM9OTlyKTVWenwsX2xJTT9LIVV4PiE6d2VCMGh2''@;'; put 'put ''JGBJSFVlaDolLz04VSE8KmkpK347dllecjRNbT1nJCQ6ZHBQTlhyMHchaV1tfT1uW2FpZU9EXj1lfEdQI2AoYz9eeldJS054I1c2LjAvWTZ4aV1QPTZwMTYzVis5RDw3Mj5oTT9nUFA+eXJyTXwvZnFUM0FxRHtbO2xiPXZbd25RaXQ6QDdHeVEvdXBdKSZQeWtLcFA4NzxtaGtgSWUqKWM4fCUx''@;'; put 'put ''IWwidDhvbj12c1ZGaCRBWDBtY3hWMSZeXj0jbUlQP0hsb1E7WWxzVzplfFVFM3tQKVdHUFM4RCM+NnRTLlpFZ2JYWzBzSVpvdWt1azIuSmk1P2lHcCt8fVtSWC9jaCV8TzBASVR7dkl4U3VqXTtUZlhoPjduIWEzSDFXXW4he19VPDhpbUM0TFU0KUZOPlcqak9VfDYrUUZ1e3M3MV0zXnBXcVJJ''@;'; put 'put ''Lmd5RWErXnZVMjRuL0ZCUENZVSo6Ly9aNWRCLmFJeDleWC5DVCg7PGVHd0JUO0V8cDB2aGlLd0BLaXVMc087WEtOZSteN1FCVWpFR1suN11sfjFPQ09dI2psVnN1UFN6VTcmd2A8c1RVcVVDQFoldWdkSER5ancqcjREUF56JjlaZGpMa29dRXRSRTttezt2Q35AQXdTLlBEJmc3Y11vWDEsZUY/''@;'; put 'put ''Xj9wajhtQVpOXVNsSVZsLmE1RGJATiNKMXpFSGRRQCRvOWZgbnIzXUg5d3VtcEEpKFBvUT89OE9tRSo7cXcuNlZwRT58STllV3N6X2M7YzVTbDtacn1FeUlbWlV0VHt9JFBiKjBgQ0szQGE2UV4wbzk5YiV8V0REZH5BNWcua0JVbSVuI3N3KEpFcEMjKllpSVZmOSp9bH1nOEw0I0tvbndLbi5j''@;'; put 'put ''QiMpSGwwcEt7LF5RWTFvdy9KPmdhb3VRTHsmdkttLEdycEdIW0xbUiVVJVhwdCR2a2Q9X210ekMwRX02a3ZwIWBtY0o9UE9DaD5OLHtaXyhXOnt1U08qP2slNGpPWTB6NWc4InVyZHRYQzFUV09NcHZOZ2lGT0Y7T11gdnUsWy5fQFZ3O1UmOXpZTzU/ZnhRbW51am5XciRAals0W2hgQShKPmhq''@;'; put 'put ''NkYuOVYyTkMmbTQ4a3F4eyZkYD8rOmI9KkptOSFPbmV0di51MG8mPyshY2ImaDlDVUldYD1qKG5XclJoN1VBfCo0PjRZbXA1RSNwd3s2OWVfdXNlUWJiZztGdXt1Sj17NyU9JjttYHE3Z3dwcWx5I2R5ajtjR2hxXyRjbkdlLDtRKWJbfTs1RWVqSF8wb2ghcVRAS3Q1PjEyM1MhNl1tQyMqdj9X''@;'; put 'put ''ZFNPK2FKJipSLikyYDQpXnAiYDBKM1BPUGgmJWY8UzBlMl0qdnY9dUBjODwxSHV6by9pVmtYT0hqfFFHVl4sMj40Oz4xdSV0Z0x7OFhecEphNCkqU0BwfktUdkxzOEhBV1UlQi9RaHBmLHRgWVJ+aU18I0RjY2A6ZW9tVCQ5Z0szNCVdVH44Jl4vUmA7Ul08KCtAJSVlfDwoI08iUnZCVkI0O1Ew''@;'; put 'put ''a31oTEA2RWtPKikxL1IyalIsNDBbNCU0WzRqcjdGVDxUSTJId1R4aGtSXyhMakduQz4uLF5jK0NYMCpKVStETnB2Q2hkaGEuSWhXSU80anI+a1hFMT9KPHJva3F4ezZ2RXUhRlhBRXBlNSpIPWg5ZG0hWndoaXZBbExXSWNPLHtmS0goZkZdbnYyUW0xZVVBLjksJGsxcF11QXpofG91dGA8RkF9''@;'; put 'put ''bzliZUx6aChrSTl8XlsoPV1rOmo5SkdBUTxSdDtnOE0xT3xlVWdnUj5bQkUyUlJAVWd0VnpdeEsoezwhOHA4Sz1ueVd4b2FNe0tMO3JBMHU1Rit1NUZkTT5hQHkiT1NiUSlWVExQS0NqZklja0I/a3Q2LC4sUk0yJTo8WzhaLlttcHJmKCw9UXc5VWFZK0p9PWd8WUBmKW8hcVlLYW5AQ1Audzk5''@;'; put 'put ''a31ERiNlUUNYclpOX1dEW3I3azF4TUdiQGRoO0U6YTM9ZXBjNCNJU0s7LyF8Z1YyMDk1Jiw7SV1EQE4oPCQ1a2lFR3Z4byg2OlNrYkRAYW42aEIzPi5qOndRNVkubHIwK1tSbGdLRFBxN21we1NFOHA3JW9nVUdlKkF6MzsuV0JTcU9oZ0V7bFoxeUM4R0Y/JlohKjZpTiFqcXtDOmpBPj1rR3Yu''@;'; put 'put ''ZzRnX24rPUExZD0wPXo9K0lUSWU3eTBreWszKVhtPDEmLihtb007aUlBS0J5dXZvYDJFei5ST05yV3NvdiJhWV12UzdVRnJ4dU9oRGBsQUdbN3RkdWJsW3tUMX0ldVNPVVhoMD9Cajs7K21WS0JeS1RtVntxZ3FPX3FHJEh4dldnUkt1Um8zbX1dTyMpR3ElL3ZVemBXaDpsdnRDQC58RSpLRmwx''@;'; put 'put ''ZUA/akVLXUg4P3UuZ1cuO1EpXUpxLGIpKUgxUnY/bFIiQ19CREt0UkJGNndFVnp2OUNmdFdyM0sxTCs+QnRGU0dXS1dqLD53PGg9MCZfUnlbYGJQKClbTVglfTMlQWBSeCxNcnw4I01DUGByaCFRUCZlOSh6YyEvbjxJW1hodUosKTpeeXEwTFI6UnUuYUdLRDx8SnJTIlkjXW5vdz5BbmxPKjxT''@;'; put 'put ''Mm5NYG82dyNoRmVyS3pHPi5fVkV2T3lTRz1hezEiJH16Kk5UbFJJN3U3R1Q6WT1DTUI4bFQ0djEjQzg4ZGJqKG8vOkJybmFPTmg+LFhWUCFpdmZXN08zTEtbKkpXW2U3Ylg/TWcwPDROUVBhOzw3MnE+cG9fNVVqZzVFan1FeTZEdFdrJXU/dDguNHAsJUhNSjxrOmtTcy9FekkrUCNSTnpDXloh''@;'; put 'put ''Pkd6JCxnSy5MRndTbX19R1dEYk1Xbzk9em9MKEs4dX1IS2A9XVIocSlVfU0ocT0xTztATVteUHRIVCUwInNxeiVzP0tCW15oLj88XXwhQjQ5L1VQbk1hTmQyVGdJOXk7dyxaJH5vYEdhYmIkUyRGa0ZEPUhYLmpnPFtBWEpZeEdRMTtZdyZnOk5sejA0O2RTUDZHNG9RYT5+TUkhZEteTXQ8Vzo8''@;'; put 'put ''Tm9kMzBjdks7SzxAei9FT2IlK0s4aTB+OVlLdVFEcz5Lc2cqNEtHSSN9cU9GbjZ2YzB5LHx9fUs9Oj1qR11gOnN2WmlvamMhO1Q9a1heYEg1UXBhQlklTzt4JiJZZEZddW9mOztVIWE1QCpddmlNUnpvYS51M10hOnUlSGwkYHBqYzlEPkpnS11vcFFSX2hBXXNWSjx4TTJqQVc5LHUmUSVkUCop''@;'; put 'put ''V28+R1ZZWXpaP2UhSkcwaFpGOHVoNF9ZPFJ9NitbSk5pfUA8UFZiKkBWWyg4X3J5R3JwNWpta2BzZStYWzBBfTo2P211RF0kMTFsaWRPdU4zeUlXViRqSyR6Yk5qOikhXjcwdn45KT1ld0R1dEdBLj97R3J4Y3ZOJnV2JjF2NUNVSVM+eTlWWkp9WXdEayM6UF4qd3VldlUuVC9mPnYpZUl4NS9E''@;'; put 'put ''NjdYQyoxRWQ3fk1wdlFJOipOOkE6NGN0dGc1UntJUlldOzszSHdUfHwyXUEvT0p0Xk1wL1tOWTVdTzQ1OXtxPiRPTiUwXzhmZndjdGdSSkh3T0lndlQueTVxVVFnWTJheHElcFImTWVLQ2JebC8qVV55WlYzVj1aNTFHYns8UyVfNyVjdTtMckt3UHdYPF5ZdzZtKV0mU1IwMTZkOE9KJWNyVjE3''@;'; put 'put ''M0V0fGdbKT00OURbbTc6Njg1NT1zZHtxKHdgSnVhYWt1TSQkPHE9VVl9aGJrVWMyd3BDNWRTeVNvNjhrdkApLGxLIz0qaDx7fEpnR21FR3psRlVZeGYsMzUvTWRBT1dhQjI0T1NHd3ZzVWp6VzV3bGMkcV5eR0wkdnYoKT0vajpDPnZRN1V7cE9sZ0tDfEpmK1RTZVRvfj0oQ0xsRlZ+MWRMJWtS''@;'; put 'put ''Plo1Vk1aTWtMVHZtXj9YWTJrXnMmellWNl1gaiFNWHR8bHNMTSo6dlBsST9lcTZSVTJGKzUyYHlZbmtFbSgqX3tVUEgyfDleaG49MnArMHBZNCx3N2xAXmNUO1NNUFskdkxueEAwSm0/PWoib2ZiNi5nUXI4NVUvfF0qKlZWXkprJngkMz1tOVAjVU4sM3hTSmxTOmtSJSJVTCoyPFc4UzxLV2pp''@;'; put 'put ''SWRaM0MwTD08LD9SZjZAYlBTLF56KktbalBPTFs0RldwM2lVdnR9dXhfKEZEbTdKdUt4JUosIUpYMzRINS5IcC8lLiozUXowfG9pRSlKNSYrOH5bKykwYlNmVjcrMDZWNSksQFIlayFqNz06Ij0/ZWlPN2lxYkQ5dFNNTlFZTjBHaTxOTmV6Wl56PmclOX4vMCUxZkEjWU1BSH4zKnsrOGVgaCVw''@;'; put 'put ''S0xXQDddZ3JaLGdLcVhHQnd8eUdydEB3MjxsYF0xbV5nKltrMCpTPndOXyFFaGMuVnczQ3xtSmYkP11MO1JGazMmXkNvIm9IRjN+RCZgO3B7e21KYXNvX1t9bmBHWFUuU0MvXXpRNGtIJSM+LyQsKm5sPzw2TUJ5MGgkRH0uMi9vKEh1fUp9PHxbZjhMVXNCSDJiVGIkcGpHY1Rvb2ZDUztCZWJF''@;'; put 'put ''KWd6OCxtQ1AuOk9lIyRZaHw2JDo4OTFQK1dKZHJJaGxxe1FmRWp6fHdoeztzRTZfXmpIL0hZNTBbfGcmWTYmcXdJQSVkL2EmPzIuXy4kMm53K2gyTklePkhVcDA4YShAWnpoJmhvKCtZRXZufipBa2JkJTJefUVrbXBTV1REdExDQ3RaIkZ4KWFxLkxjbz4mfkYvSXBJKFdIS3hJOVJATWVNRWZ2''@;'; put 'put ''R35pJVpYTjh1WU98RzY/VldOTW5abk8kVWZaNlJffWtNd0xMKHlLOHdlZkBqMj1MKipIaV9INkloSiR4JHNvYykjTyZOSz0pMDEwZkded2NdbiFobVBmYD9Bb3p6PlVxcFR5dys/MU9RemkhfXwpOElJOkYxQnJGa3J3KzpENHxbcjBNb18jSWQscDY9QV5QN3dseVMmfElyTi58XUR5Tj1pb3Zw''@;'; put 'put ''IWBqU2dWWCVKeGA7RksxRSMsU0dIQz5sQnE+WjpaQl9QUCNtbm1uUWomVmdvVWQzUzd4dT9NdW8xYz9OXlRPTyxwdyVDKU86NygvKkY5KXxVZlUlYmFvW2ghYGNUUSYlc292Pj5nYVRJZC49WEY7KWhdbFlyZG9QdTYiRWhQWFJ9Qjk6ej19dyFlUjVtUVZ7eTVbTHg5ZiwxZ1ZrM1p3MTdSOi8w''@;'; put 'put ''JExiflZ9MXFeLC9UYUFVQE8kI3kzemwrY2pFUWloVSlAQkY+Z0pLLjlTP3RoWG8mb19ANyQwUyteUzFvVX1xY3JtUSgoa2hRNncxQnJjNiIkdDoyRnJpakcwUDJfQjQwPVlxJm8sYn1YZUd+aSxgUilTVVRfTTt8L1QuLiV8Ynx2UyIoNzZNL2tvJW5pa0pkJjhEXi5PcWN8ZE9yc3lhOmV0eVAy''@;'; put 'put ''bnczdHwvaT99R29HNWAoV31FRXp7MmF8UkdDV30kSSJWSUNgcFN5SjVvRzNTKmkmYXxvUV1Na348PXZmWXs5c0pOZ35SeGZ8UllZPHgzemE9dTplVUJIO1VQSWhgRD9MWyZjTEBUIXZbeWBKM3Z9RkJ6cDk6Rj9KWjFTNWFAelB1JjtgUV52RildN303RnwpN3RxP14yVXdJaU1zMTo/ZT1XMEld''@;'; put 'put ''Mi50UUg6bypmNjluclFpQmFQeVJ0MDcoIj1DZDx4Zk53OVkoQzRMfnAsSEVOO3VWKVRoJENdVzwycjxxRTBYKnJJfms6Y0RMaSIpLFN6Yl4ydylGaitqSGtEZGkpbVhRT0FCMDFKV1kkPVpieGpLQj4/dFpqcD1PYC9wPDcqfWo2SEZ1cFRxIyIvRkdZaDdTbz81d09XSkxhcD1TM1NHL0hGQ1pp''@;'; put 'put ''Q19BZV1XbWlTY3YyQnQrYT51KV8iO19zcDF2fWM5KnRdOX4uQChjK19WazdgJjw2SyV5YDopMjl5Ymo0KlMxTHlsIiNTLyw1eUlfe3d9OkBra0tISkZJRjMub1RVS1FLckpmZj0uWiZ+WnlkW0lkRyVoX0l7X2w5ITpKe18kKEBeR18qIzIkN1dVTDwrMzo9OFFUOTkmTF0wbChlNSl9bjVVPVFO''@;'; put 'put ''Nk5gL21dYEMqRnNDeFVHYFtaUlMvX2BPMFN2ckpTbCZXOShGNCUxUl92MFJ0PCFBbns2MUdQYU5VVjF9QkxvXzN7Mnt5JW0pejpuIlYkaF5xYHxCXThbIyFCYWNnOHhfelBXdXB5L0RxRXRLOU5vPiRYby9vQF07ZWs/Qiw2cjljOC4+cD4sfWN1RThqNzNNJCFEOktkYipQbz1pUmFyaCNRen5n''@;'; put 'put ''Ukk/SCxkN2JXfDNlZ0hAUXl1KTMuK05ZV2VqJkMpUHpdP1VnJXFNImxAV0lyMVphez5uK1UlRjUsTXJkUVR+blFeJCxWJVVHd2k6eXVgKWx1PU8wQEd4IVRsKy9uIW5lZkVlM05ScT1CcSpMKFQwSWdTR0FVPWA1JSUwNUBrN213KU1RJEwpR3RKYkVNbWthaENPfGo5P0JeLDkwK0VWVGxyS0A0''@;'; put 'put ''LDgjW0Q4NTxaU25GZGghZ3ZfIz4vXVtQOWFsRktnI0Q9WXBXd0M3d2ddQ0hSMEl+bngySChCWFpUMD4pKDY6aSVMU3J2U0kwSWkvQnJaRU9OfXk9YSI2c0R2T1s4czBFJGhAVXZxY3YlZmJ2Sk5tKz9zJjFIPFJqIkdCWmV8R1RlRUIiRmpySylvVHp6N0ouOWxHLDtDVFZMVSszbDVlNChiVHMy''@;'; put 'put ''XmxaN1tBdzAoLCF0TEAjLjF4NUswViFkWl1tZWBaKkxoRyFmNjkrNFVeeSJGIjJyL1B4OXJfWUIsKTBoLCk8ekpATU58NUVgd2h0TzBCeGNLMEU8Mi59XlI7YVpASzxHSnVkbmlHbX42bjUoZnRZT21aXTF4eiZea0YvMWgyU2VAez1XMzE+UkxLYyEpcn1mRnZ6MGR+cW4+VDpocCNOPCRJUXd+''@;'; put 'put ''PSEjUEU8QkZGSCFJdkk6WXBNPU1xKF5LfHN7WDttSCFvW3M9YF82K3RsLEtjdz8oMkM+TTQkJjs7QnxrPS4lOSsybVAhPT5ieUkqUDRtfEIlJnVpYE1FTjZePGlvZyZRZlRRME1BZFNnemhwLHNnbVYsK1tzZXhOUi45aF0jM11PNGE4ckZOW158JXMxXTM7VHlMYmp+JG05UVVBYTRZd3poSEhH''@;'; put 'put ''JU1sWWNGc1AkKnkjIVAmem19dlpPIT9oPVtiPiR0PDM/W0BhTE4kLEZyPzxhTW1TPGN6bkNiaDhdTzBefW4ve1JyWSUzamlTfWkuUUwjLC9sNUBUaDB4P0FvVVk3eFFLXVRKWVN3aV0lVi5OJnI8d31SeXIkczQpPi9mMFtaUkRCQz1pPCg1L2lgS00qKD1fcyY/W0tvV2g7JmtRbFA1Tk01fkdX''@;'; put 'put ''fmE4QWh6JUFaSztQNkkoKiUieCQqMDhhPHU1NHp3Z2NWRTNVM28pY1cuX0p8V1BkVnAvJjVuUUA0Tz04SU01V2MuZytfU3NaSV9keVdaT1V2NWdaT2xzZ3duaTMyemQob0dmTHxBNlkpPT44O1RQPHVJPHJpRjFzJkwqXk9sYDpANHdBP0pvcmJPPGBBREBhZCUwYVtNJnJiMVlWMUNQcUNRenQ6''@;'; put 'put ''YXA7TU1nRnN0Lj8oaDtBNDpLazZNIVBxZVdSTj51eUcyYD4pPmM2OStdQzwzN2dhVlN4c2MpNDx2UHtGJWplJFBTUXYxKWI/OyhFZFcraT9UaXk+bmZxRXdbYmJdUXAsaU1NVFlbSnBfS0c1bDJQc0BaV3hYaFI4JGMrOFFfUm4+ZWtyTXIqL1ohTD1FbDEjSj5Geys8UjoiV09PQ343WmshfXs0''@;'; put 'put ''KV0pYHR+a3g4K2s6Oyk9fC9XaUZtVHk2aTplJTlHZU4/SVoyUEg9QGlKSzRjWlRsRjtwbiwmY0dmPSkxekpEa3hfRDNzJEVsQm12YmBlZkA2LGIjRkRkfHUuRnBaPFBtOHJFTzMpOGcjQV5BXjVWWj03Q3tSe2h6X1Zkelc2WVtGTC5faXY0JTEsIUczPiFDZWdtNXRAbHRtciNDckk8WEp8R0VD''@;'; put 'put ''VH5Pd3lOZF8iLmApOHlCcjkudT1mTUs2bVl1VT15SGxOVjNkV3NXRWhDSDxkYFZAc3hsYndJak1DbT5lRVg/V056VHV1dHFCZjwkZEgob2NELzxWcl93RDtle2g+Q2tJVGU8UUkwfSgiVWFxe21dTy9pMURvSHA1VX07LDVWfHppPUtzQltKKGpYLlAiaEQ2IUN6WDAyTVNmMEBHcWMvPUNRQj5g''@;'; put 'put ''aDplU3lgd0cxNEl5bT5PbFAjT2YqVnRtZUtDUVFUUHxyWlYzSH5WOiZ2dX5sek4lMFcmTFJVakJdQT9VMzplMUhxY0JyOUl4PjlJSHgzbERoOmU+WjplQmRBUSVfJHZedGN6YEklRGlRPkQmNXVIe3owT0g2MG94Rl1vVzw4O0cmaSRPPEFdVV5KOElkOyZaZkk4RDgvZUphcUtlRUNGWmU2OWBk''@;'; put 'put ''Tzx9ZE88fTlJaF9bUVVbRzw/Uz9eTD09PCxfXzBufjl8RyxlVGV6IV5yKEh8RnNpTGZoeDY/WWpCXSNpfWFIRXk+VjhZfSFZZ3B3KFBHQT1WWDE8W2tZP0JtR2tVRFh2PnRAcE1Za0I1VmJZd3wuN0srXnYsXWEwWSQxOzVWdDJfUS4mOXJUX1VYU3l8QlNDKExtTGVGKFVBaHFHOXFrIlAhWnFv''@;'; put 'put ''ISUwel5LW0JdX21aSnIlKF0jT01kOi5PO1tHQVpOTG8pXjtLR1docFUpSF5SMnVPcS9OQTByTXRpVm1DKzNZIW5WRT1obC99OSY5Yilxd3FMYCZOenA+MENqJnxvNDpyUD59QUNuQSZqYyJadkd6cj4+TVBqU0M8eSU2NDBDV2kmcDN1bXBiZFBXeUBJWkR0RmRHODVlcGI7eiNvUW5nTiphIXlQ''@;'; put 'put ''Okg/OV1RdU1nKXZaRzt0dXIjeVAvWDZLM3Y5UVslW051Q3hRX3U1fkUjYVlxRC4vfkNZITdbInM1OXddI2kyQ251bHU4NTV0SjBfcU5QLGdCPSo/MGEre25jXVNrSENgfVBxPkdZQH07ZHRqeVFQOi5pRTU1fiJsVT55ci9Dej1USSo9NGQzWy5oImhnJVhJNFFYP2sxbClzaV1mRzw0S21gWGx5''@;'; put 'put ''ZjEmZWt1T0g2dE5INlkweHpXIzV2QVYpcDNdbkIqMnMvZGB6NTQ1Sip7bT5SUD0qXmBRWntObipKL2hCYXZPYCE1bSlOTzNRMHU8fWFoRCVlbTx7Uno9OmVXblo4fm1xVFtgeW9tP11odEMkVGNbUDN5Xi4yMHEkeCVWMUZIRCIrOm1KOT53YDl5YTZ1fHZmbSVDQDd4LnlFXVVAMGY6d0BLWisy''@;'; put 'put ''dywlandMcXVCMlgudGRRNVlOdk1PMFM4UTdUdnZxTHQ0PUp5OjIkd308RDg7VylMZ1tPeGEyInomTENFKXYmcD4zYiEvI34+clhFR1VAZzd5cSRTIi9UQFk0bytMYHJvVWBkfE84K0xBeHp4KkxYKWtJKkwpdE1QMXRQbmFQTUFlb1NWRyVKa01MMkwqUC5LIj4wPV0sXV8xayxecTMuSXF9dGZ5''@;'; put 'put ''KXIvVUAqOylSeGFdXVhCUyo6eV9bUTxjUnk+XlNKNC5jcURkVjg2eWova1QkWG12MSFVMjAsZkRnfnUmQjI1QVYuVzNTTEpFc0JmVjVmJTNsdEZAN3dXXVJGcj9XfWYzPWpjeSxsZTRXdy47cEN3YDp8a0VvcG5uYD87YER4LG5NQTFpTFpoVD8pX2NjUWh7anxbSHZhVik5PGlpb29eQmlbZ2NO''@;'; put 'put ''bHo+d2FzW0tpRk92R01DRyVTZF5AL3JeQmh+QHRmamEiK1tgSjU4ZEY2PCRaKmpkMSthXVMlUiVzZ15eMSxGSHNOZzFnYyl4OXd3UFJVcXhCV0VeTjdJazhpJlZdUks6UStGcGZdTHA0PWZjWl14Jn5rKk5mSElhKW06XiQyKCpVVXQ9YlE1OFcmSThvSl5JKXhvLDVVdGdWZkszRyQsNn4uSjll''@;'; put 'put ''cF1sTWdMSlt5YEpBaVchajc3YkxNQFR6dC9pb2JEQ1c7QDIxMz5SUXdnRyhNNUhyVXU9fiRUT343PjM0PVElQlRWQnpPKlJMJj1wYjdOWjtYbFBmaHBvK2t4Mk8wNCR+aEFfOl4leHk6WWU4eSRXemMxQV5VXlIhb2svR2Yuc1VCKGlwOWB6SU01Vj9MJEh5OHN5NSRXL3I6PkNfbiolT3MsRjtA''@;'; put 'put ''U19mNndUJVJkMERnU3xhQTxndlRBSThuaTQkMUhgM0coWCI4XXFbPHx9RmN+aEglUDlveTtyVGUieDplR2RkWG90P289dm9ueT5nL01vREcyOEVARHo5JShxSCNndlVyVCFRaHpzRW9JKnMsQn1JR083WndQR0xARllyWWFSJnhZenBAVy5paWBZJitgWkJdUHp9VVJDS15HZEIoVWNmM1BrLDJG''@;'; put 'put ''Zk9nbyQ3WU8xRkVyPyVzbzQuTWplcyp9dSg4ezwwUWVPekdsZ0thUWFSJmU+WU4zdnNqQDFdPTxobHp0eGQ4QD1TWG4zVDU7N2hNenFVWGQ1MGl9JHQ9aWNjbF1kPDBfSkYjMWx3aiEvUiU7ZENAKGdTUnVNYFBRRyIpUzthTVsmLm1JZlZpInB0ZT5LNDZOMkVnV1U7R0BZKUguSk5PUyE5PU90''@;'; put 'put ''cEt+MTJmT2dyPWB6JTEwTUU2QnsrazJnek91TU5eZjA9TDcwNTl7ODtoKEByL1ZqVW13ZCxWUDVmb0ouQV4qQz9ueT5adE9YeSt7YitHL1Fic3V3R1ZnSGpJI1MrR0MsOytxYy9LUTU1MWFsSnVLM3xNTFRgK2c+JCY+aTFpcV4oU19TdGpvVyYqU3JbN3dsbUopUkxtOUgzSXQyRGF0RX1gS3VY''@;'; put 'put ''a0dHPDYkUnUueTFnSElaVyN7an1eTiVScUpIYUZZOnoyWitjVW5PJUkkX3tpe2x6clpJNVhRNChMJiJ8L1ZpS2YxJnU4NGRRMmldNCx+dy5dTjZEOEFHaF8iVjIpIz9GO25kaTl8SlZ6UVRvTShwW0pSSn4hY3JvRmNObm9hdjVWRGRlSykzZnhudSxlY1J4dV5pSWpMSHNpPChtWDUvckcoQyV1''@;'; put 'put ''QnM0IVl2Vn45amZQMEtkc2ZQczpVUDswISE8W01pWGhUOXtCNkltfCRpMz91JXIhWSVyIU42PGlZITAvNGleWy4mJnZhUjthJXpfTVd3emk3MWxOPlpxR1gwW1ltOF1MVTs9VkFHRSE1SCR4Rk0pViFnRXpCfG9ndihXTW5HUk0/bSVYS2w+YT1MaGZaTEBtbEFsPD5tYXYlajtLJno8ai85LDEv''@;'; put 'put ''fDN3OjVsMmo4PFZzJk1LWGgkM1cyOnhUdnRaKGtBZG5bYnp0T1V6YkEjYFVhRUU6VT8+VGUoZVJNKGdKeGNHQzgrbSVYb14pemxBSHt2fkJiPmFaU1V0LyRDbW1yNDo6TD49ODk8aUBLMlh9OyUxQWEwcE5FV3hhaGtRWSJyRTBqL3BmeFR9bGRJRzFXcyZqKHYlZjtkMUFMdnVSdTtYa01MNX10''@;'; put 'put ''O1gvTlp3PXJzTmN3ZTVCX1sjQl0/WjFDWWcxSHx6aVZ7cFlRMkJ5ZCEmIUhaSU1VeShmO0E2InUkdlAwe1JEKEVoS0ttLGlwcG82NXR5NmpoJjBgRi9bTXldTSU+dzhJK3ZEdUR1cFE4QlVhRjZ6U0lkZDBHTzcydWYjZTs2ZSRzfSNKPzc3QFRRSl1vRjBkKypDO3xda15rNzxedmR+Njc5eDdF''@;'; put 'put ''Rm57LDVnaGx2VVkkV3ouNU1rOTNQX2J7d1IxU3c4NmZWbCxHI3hdUTxgdzg3UnwhQDYlbVhtTjs0XSVHb2tdOjs9SUJxSjg9UkhaWD9BQG40SVlNTkc7LmNVJSxaWU17bm05WWUzaTFxcWxXQG1dPXMwJjhCY0Rfe1doWkw4MUdXZnpwSzl0Mlp4anhaQ2wxelREVXQ+IkhuMHA7P2x4O2J2YEpj''@;'; put 'put ''X0k+YE1mZUhUSSQjOj0vXmlLOiltJlg4SzJjOS93b04vNE1ZZSJsaHZST3s3JnJyeXFYJjlJWFVLbHtTYkpSJmhVeV5VVWArcDwueWxpR15VVS82KDtAanhVOGovczsmPEo+V2pManpVdjwkcFJ3Z3lFbXJBUj9nR1lqT3AxL3VNb0NdWUtfS1ZneDd5dEBlJV9YcFZmVmZWZl1tbD8qIS47djt2''@;'; put 'put ''O1Y1MWgvOSJFTV1MV0dCTHtKS04oaSlzPzRMJGt7KTxjXXg6YGBIUmhhLG4rdStfW2E5UVgjNnNwJldGeVtEK2trSXssNXR1VVI+IXF1bj9heFNHUUpdJjJJWWR8LDpkU1hrVF1bPVdvPClGS1ZmWj5JRmQ0fEVSS0R6MWYxJWw/PypJeylLQkoiYXk6Ul0rT05RVGNUdzViPWkydTB2bEdtMUgx''@;'; put 'put ''K28wQVlPJV95aVl8XjUvaEUmcnI3SWdaViNHdk8meUQkQGFLIjl4OV5SWzUxW2ZSN1JrWiF1dlFqPCslMExqOnhVSCJtRDwlT1hJTz1kaHhqYmxHUj9VKjFaT2lRel1pY0hkTG9RVztaOjh5VzEmdWtzTz4iPWhRPUBDZTlPMSs2OjBvKEhxSXllZ0V6SitXPGlhaToyJEliKGsjXUZfRlQmdDg9''@;'; put 'put ''djR0Nlpja3dacy5QQzVyYjw9TVhbLzlRQ01dcUcyOkNyc1pyYl1oPyhNcDk5fEwma1AoeVVeakU6MiVrUn06NHw7fTVCQE9sczE+ciJaXT12TGFJUCtnQjQlMXA6RElmeC43azUvZE9mJTR4cVZzeylQfGpWOHxMNHIoSXkqUkAwOFMwey5haSF1X0V+Z0xhYzFDdnJQU3dpLk46ZjA7KyxJTVB0''@;'; put 'put ''XmIyTVNhUl0je1F6dF1jKy9tL3phTXxlXy4kQEwhXiQhLDZCaFIoO2JATCFxWF4lc1kpVURfa3V9XyxodD53dT54ZWBFfCkpa3p7PjxWPmlGbTpOQmNKakgoVixIR1piOEN9IjghJDgiUG9ycG1Gdm8qVGY1STJ8ZT8hUklFJjBPakxPcnNuLCVqL3JEM2RvPGVNclttS2poKms3RXBUeUU1NnZg''@;'; put 'put ''XVElMDErJSNuTWVBWX04QCNabmxaNHVWV2FpaGBtU2A4a3ghRmljbXNvLm4sRGlLWFEvU2pmdH5DIzVYKXVzW0ZIaTxDdU1NWW5MRD59TH5ZKU1UZXc2diVVKWhEUEZSRHFmJjhHWEd3OWBFQ1E2Mzx9TC5iUGAySFpHdGpleXR9aT14NHhaWDNuUWpUZ1MxM2s0MT18YmEwdC9SJTF4Qjl9OTU+''@;'; put 'put ''enhxSkdlRndIMiRIZ2FnQ00jRC9TVTg2KUYhSHlUOT0pUnI5NnkrJX1GMiFUWlNGfEg8U2NFfSo1ekZ0RVlvO3o4M2JZaSIpUC9TYFI+XmQ1W3UmQ0leVUN1OG46VG51R2tDeHBLK2VrTXRpSkleemJEfCFBYjV7fl49PXF2ajJzRyZHV1hNdis/JVk8Jk1bV0FHeT9vRnxNKVRZbFY1LiJHTHtw''@;'; put 'put ''XS4zMz9Mcll8NXhiTXR5e3VuZzx2WjElWyRPWCkuUXMpbEF8WGJpWWAycEtKfTkiYD19cDVTb0VSY2JTYSUsQV4/dE10YldRU0Q9cjhZMERkTixUWTpXOFhBYml3MS5kXjw4cykqMSxjZD84WCw3UlF8eS8uYEsmcUBWeDkzWCtJW2d+bHszVkIqQ1hVdWpBYXJ4dkltd0BqImJRMjcmNUtKfjJx''@;'; put 'put ''T1R5clRfTTt4bFcxV3x2KC9qc1RCWG17RX1lTzNEKXZCNlBTQFRDOix9Sk1tNGtrVlhSMTwkL1VFW1VtKFpPVT1xTCpAaT5iQmF3b0ZedUFlfGlrLEh0Py9SbzAwKEVDOnckLHpAU1RRbkUxJSk8VXw+Y2RASDBJIyJiW1N9PXx3JCI7anleUWUrR30mXzopPGhNRXVtPShLMjw3JFF9d35KJEh9''@;'; put 'put ''LFh6anlMLktAXlhYKk10InBQPC5SKWs2aCs4WFFYRHVSNUszbF5TWXU9dmUycD50fX5JRzBIYiNENFQkSEtKUE58QD87XSQ2SyxEfjB+KzUsYClVcCUiezV0PVoyUHl5KEN5X3IsXmlhXUEoKEtoSlFBTC4hRUZwU1lJfDlFWDtuXkhHLDpacmM7Vj5HUGpUaiNMcEA0K2YiTSZLdUsyM2xrU1Nx''@;'; put 'put ''SlU2MyVbMnRhS2Vha0BeNUhZTWlgYzhNM1haSnAqcjZ+Rm1rfHJOeG4rMkNvKXc4P1dmKWB2X3FHKz9FVVNsa0ZeT1d6dEpSQzUiQ0ZYXSxLPnEmO3dJNEYxMEFDYi9Ge0NEQmJ8Q3Q7dElpMDN8eyo2QVVEbUc3MTFyMnI2UC4hNkprUyplQkQva1F9OSI5TTVoendRQjBXfil3ckQmTmM3QFcq''@;'; put 'put ''bFNnIWMwRE8rO2ZNYH5PXWd5IkpjakBtQHBTRHkrN2U8dlZHYEk2YkBqYUJMc2d6NUAxazxPI3UuOTtjKnpoPC4+T0R1KUM7SWEqPHk6RHdXeDlNXlkwUFNEdD1ZcFpRTk0/Y2pDP0o2Jjo1K1s9SFlEbntqRnRVakM/Q0JKNkApTGA2cTVkTjw9PjlJQUQ3XlIqQ01RYGJJZ2FfUVVqLHNUamZf''@;'; put 'put ''KjtlSF0oZVdtUi9laF4uMjlQL1UvIms8MyE8PTcxPl9bVHFJQUcud2VZYDlmPHxVQCRhaDEkdWl5JWtUNV4rRltheUZpTFg+STc3NU5nY0IvKV1uNUMsInA4NzV3RiwiOltlR0dCLykyUlEzQ1NtUjsyZXdtMlVPfWUxeFd1ZSJQXTp4VkBMKyFIJkBrdHBLO2VoTSw5JmclOGFaO2RaWFJ6VWFC''@;'; put 'put ''XSZncXhiamw9QjhsWl9wSmZSTVkzZyVQWSVeKSZ+e3tJNGEzOEJxakchPUVEbDU6M1hzenV5ZEV4Z3RdLkQ+cDhIQm9yOiRVajpheSMuJUdAIlF7OUhAfWpYWz1idW9pX34/dWNtOCRxNltJaG8qK0J0ejFdbDh7Tk09OjRFV2xzNmZAIV1lKi9he2BhIXY8cnJEKXVQfCZQUyxBLEBzXTN3VUIs''@;'; put 'put ''JjJOSSl9Z3hjekJNIzB9PGk+R1k+KGNpK3BSfn05fVZneD8hUHdvKi9ucUU8Tlk+fktHfG1pcy9iUHFDbGJjSE5jSV1iIUYsQD0lPkpBPDFxRDRZYThCfVZ5NXYiSEZeY1ZxRTpqJXZPZDVEeXorJTVaZnxPMEB3VV0vNVFeV1VZJU04alFpUV56SFsjYj5KQTRZMHtycjFYYkF2cDg4WnxOa3di''@;'; put 'put ''XkFTKyJRPS5LRUtvLDEyaVhYInhiLnJXU04zTltQM1A8NHA9VS9YRjQ6UHZwLDE5WEN7aTFHZTg2a213MmJgXmNaWmAjImAlREZCP19EKj9lY3ppPjpCSUJ4RDVQb3ZlamhmMmFKKHkkakFGeENgYGc7cjZ5cjJQZ3VoMnhFSUwuVzBXXlJqVF53e2JLeEJ0cHc3XkZxUSJQfVFjJDo0Z2E0e1M2''@;'; put 'put ''SiZpajxhfmRISGlkVEB7ZTJnKl5HSDJLfkxsLDZ9bCwidDNVfCxNcDdPTHlNfls8OmNPZ2t2aUI9REtmQz9hJjBrQFBZVm9jbywpelBGaE5ecWlYS1heTEReSTooN0wqZU47YnFycU8iPncuZF4kdHh3Y1FkUGxGO2UyKSI5PVoyUndQWWVtOC8rRlErJGFgQz5LRmcwSVF9cWdQPHRmXXpMTCJM''@;'; put 'put ''YDg5MFFdRyY2LkU7OmB7QypoLnAkOUlTRGlzNk1hMTdmYiYqUiZoMVgqelBGMVtBPDxLNzkrdV5CVTNhPGdgR0ArOWR4IUk8aSFlO3BwJT1YdCFBUSY8QnJfVFtldGpWM3xEfjRpVjxnYDQkTFM7RywhcWNnQnJTb01jdlZKOHlVM2JTaTpaQXhUdTdUK0VEdlhlTCMxfGBFV3UmR0o1fHNRMmRb''@;'; put 'put ''QVZqbSsyUlRLK29hdjM9ayJJSk08SVp8Z2dWImxFV0hoTmore0lLZ2RzMD85TDNxW0dTPG09WjRtTGM7YEJaX0JrQiQjc1RIRUZ0STJ8JnBCYToxejVXOihQeWRUQFlBT286bXVbcV92R3VbZHBbc2t1UHxLYzZEXWQ1NF1JRCoxMHY3S2BeNHthPnBhbUshc0psK3dOckhkXyFqO05sKmJeSnpE''@;'; put 'put ''XVUqKChyZl5hSWxKMFMyMmVIKDwlMyE8PUA4TD5XYDdyND5gIU87cjlFbitpUEhrfEhfbStDezxmPHdgSm10JHRPTSk2Jjd2SHlbTCxiUmxOWlhPQWRVeGhjIjp9S00qUlpxd0lkX0Y1cTs/eWw+OHl7MjdXJXVRb2ppdXZmdk9xNl5pe0N7TWx5cmBpPSZHR2NnUEtdbElRTHBDe1VnZkVObm8p''@;'; put 'put ''WCR0U3k3MXJ4Ym1vNDB9TjchcyZiPSIkfSYiWTMwPjlhVSU0cEtuZVRSS31haCwmPkxiZGp6P2p4VTc+cFRsWTlsOFVDV3xHR3Z9JltuVlZCLjtqbEB2QC9nYDhROiM3YF95TWlfZC44dj1kRztTNSElKTMqO2oxVCpZaVEqNmNvPCxnUys8WjtlYm9hWHlpXjc+NkIsb21aYUA6aWZvYTtlQ29y''@;'; put 'put ''XVZoY05xcDNIW2RQN1B+P2lsM2QvWzk5aSlEYV16Zz93eE0peHssLnIwJj4pUjxQeW1ddiZhQFs7LnI9OzpdWUNGfD44dmZ9SWM6WWVgYCJRfmdUMnR9Omk3d31xUCF5cihfVSU+WGdUN2NuQysrY2JheV46NmpJX0N4ZEI/e1krZXw3SXFiM1t2MXdXYTE1P1VeNk8scnhORUdLXmZ6P0dGeTVp''@;'; put 'put ''U2B5cnR0O25DS0B3OlY6ckNgVCY0Pnc1NltMYEd2fEQjV3AwYGsvZlQoTG9aWERdNyYkSXNrIyNTZUp3cTBQbWgmVyZdSXI2UUdZK3hpRDh2L05eTyFpWW9LPyk8ZVJNOmRZWFthdF1uenAmaWREQmNyNSlmemx8XiZaUk1NYU8jUmlQRE51RFlEXipUdjl8dkkiLDklbix1THErWTEwdE9WakV1''@;'; put 'put ''Wkd0JVpXU2RweDAhfit3YiVBYmJicVRRVGZ6YTswVDRYZF8/LzorZnN8alh2TUFNTjxWJUg0fSQxSGVDWmBXcDBTdm11WmN+V0IqVT5dOTgxKWZWdCYzT0NVUGc0MW5fLDxETnpKaXZqOFJ6Jk9uYjlrMEk8ZjxfcDAoeUszTVRlY2dbPF0hbVBJMGw+OSh5N3Q5Z0kwZn46LDB8dWNwcSthMy9B''@;'; put 'put ''dlIxelRgc0ZndlU4ajNkcms1SSglKkdlTDwjWXFkamZpXW98OzEhSDApWCJHJV0zQWJLbVIrblpBRWt1VjEpWmMmXlZWdjJMQVtTb1VgRTVXXSl5L19rQFBbUVkmciJZJUpdKUlVLDExe3V1Tnh2SGBoN25raillV2F2bGF9OywqZVdaSWhHUlglSkdQYG80PDAvQGN6cWNeVTZpYT0qMFI+PHVB''@;'; put 'put ''KGdySHBWXUtaPEB2RUlReEpfaVIlaCw+dko8Ql9CM0xTeS43fGs+XTdvclFpTEREbHs+RnI/ezcxa10sPSouW3wwSWBeXiVycl1YeT5QP2kmaE1TZDxjKWdOKFhmQT0pYi84dEtVbiNOIVJ0elVPTWReYGoyTXJyZGlyfXppXiQ3R0RSNjB5P0ZjaGlpLmRkR1VOJSxlP3FAZkNrI09ydj9SXTFn''@;'; put 'put ''I2JvVXclYj82YVRqbyZ4Wz1HaHc1OTZzSX1zdTtHWCldOXg9RixNKHpyREssSHxrZl5wOSZrNDp5dVosOF5qIyN7MShNPkMmakpdfCE0TFArO1VvYCY4K2VCSzl8SWQ2QixFcTpeQlhrTV9WfWp2WlVJfnBneiZHKkswfFpzWmpaY0NMJlpiflFtdWAiRz1OZTI1PCQsLyN6fDEpWntHPH1beCFL''@;'; put 'put ''XnwzSjglbiImVHZFZHsyb1NueVFneiFJI212I09OYzU1TFU2XkR5cSpOXlNGKUJVMXptRk1jPHQ6JTl9JHMkTFUwOGdSV0RNJFouMk9hfGVTcXl0alFPT0JLRVgzW2dXUDQhIis0KUgxbE49U2ZWPWsyck9pNFAqMyMqT316WCh1ajNnRyt2MkY7QG1sT1FoTVpxLFJYQmEhNmAzX30mbzZkdiku''@;'; put 'put ''e080JChGTit5PyF+QkdzWyVoeEoiITxoXmt3Qk18Il05Q3hoRkwhLCs7X0pfeyIuRSl4eXBhR3swJmAsMnEzeig7UyhFJmFKbHUvRCN1ODtRJXo5c3k9KFpEdXZaNW16Myh4dE44XXtDYXdhd2lDT2xQQ11haE8uO3l4T1NXbSsiZWxaMjp3MTowNSlqcFAzO0U4SVlUWzFbd1pvbENLKi9qRks9''@;'; put 'put ''OFF3ZC5HTktFSEhtUWFeWmJZJm8jRUgoZ11ERF97LlAhREgreTpJVihxNDQyd3t3M3YyZj4uUCMpRGxjPkUkM2IvPzBVSGt4Lk5VL0clQCZTQSw2fm5CJS9hRl5eJSVlIlZ+O1d+ciFDZVosWHdhbEI3Y1RNfHk1RiJVXS8hPTJ0dUAwcV5DX1tERyUjNWFsQmRHIXc/ODY5Y2tsUGZ4UUhZMVEw''@;'; put 'put ''eTVpMWQhKWV0a2lQe3lnV111VzMuPyUqalswJjp9ciZWdm57eUlWXj0wRjkzbDBGWnszSmh2fCs3KTdWOSV8QlpfRVI+RkBxdk5fLGx1flY3YHE8Vmw2THdUfjs2VnhgMkhOT0U8ITVaTUBVeXRmP1FWU14kbmZSL24/aCtXT1I/JmV4b15IbWRkJVIkSGRQIzZddl1ZJXpbcE1GWytuMl43biFX''@;'; put 'put ''cHM7Z1hdQ2U1biwiMXRGYzQpbUZjQilQTmFWK2RFXXckYXcoN2Y8QEJEXTAkJnUlVWhfQiloM0JyJlZ0I0VGR11iYVM2VHc5VUZ+MyxbJjhdamRXY1VweTlkOUhLamJXenAsalowUFphc1l+akI/VHdnN1smUHBobyooUkh1eyV9cmQyclAyZShEXiosWEsoJXZgNHslSSNIJjJqJk5yXkpUXmJh''@;'; put 'put ''ezcuMHZza2lsOytObjplcCwiK2RwYl5ZPjo8Vll8LigpM0dOOmwucyQ5SGJLMm9HcFBXezBTQFVlc0Fufm4vOWVtVz9gdGNpaTROamBWLGlWUjl1YUIlR1BGQWNNW3J2Z08+REA4RlVWWDklc1hmVjVJPkI6TWgseGkmTlB2KiFBY0s7djhkZGk5a0h6NHt1fWAheC4hOFR1e1crWnd4ZmVNdnJt''@;'; put 'put ''Qyg+I3ptTj1mK0lKNnpdWT55USs4fXp5WX51KGlmViYpISNQdDFuT10lUitjJVIkbToxJDpgS2RZfUVjfC8wQTRPWT1JIzZNeWAjQl18YEFXNG1GYyp7Lz1bbXNLIjVkOjZ6fCtteSJnLnM6Ums6dFV7cDI1JTBIXXZCRlhKSEYjT2ljL0NhQEtZbEJOcHlZSkwoZ3ZYNTFvVF9JdkxmeW1jKzB+''@;'; put 'put ''ekJyQHd7bW1kKEBTcX1qR0FsbUBQMENRSDZsPXV1UHxWQk47YkdjKm1aJix5K1Qyekd1I1B0Z0krc3tgSCEsejd4WF1nPCx3a003WmJfQHZvK0twTDljelJueH5Bcz5YNC8rU3EkeSZ2cHVSYTQieUVPNXNraS9rNlU+SyphQX1qeSt0OmBNXVlLUU9gajNNVmgici4pLis5KSxiekpZU3sqJWkz''@;'; put 'put ''P3MlbmU5Kmh+ZzhaKHV5bHJ1bHQ5WGhoc2w9UT98Rk5ZVSpZdz5MO0daWXhWUFB4VFlhaHhacFhHbjl2RmpANSRUMHN3I2xwZ3FjPT5MYGQ9VSY8d25YZyZhZUJNImgpZEBFZkxrMWpLInF1MTF1NTV+OVVAQmx3N0hbSy4sWzcxeUloUEU9JWBVVWFSNCleY0MqTF1fNmAmTjZ5bDIvU2JCJX41''@;'; put 'put ''QVpWOyVKJS9GfW9UbDU1U1Q5JGprOmAuWFh0ajVUZjZGK3ZiJFZMeyh3IXVvWEROZkVaUitnJG1QK2dRLlkyIXksUDgkPDd2KShbSXRRWVZuSFcjNnVzSjEpYSpRWURQQFRCKXFmJGthUjpfVD9YVnAkXTUqbz04WFgsR0FsSjsiMiQ8OVpARVl3XlpQL0JTRWFzLmw1JWl3SlIkK19jTEhHVyte''@;'; put 'put ''YypOQUxmRk9KPnhvaFFUOGM+OGojRjBhSSIrLGZeeW54Smw+YWpASns5WFFUaGRGbjAuKHdAMSlmYlN2MGR8Qyt3cD41JlBfQkIhPDFLMTc7YC9XXU0xcVNjJCY/bTg3TiQuT3IzTyI9fW50KzRTV0Bwd1BraDFbRlQ9YXwrck9ATmBVKk9meGszJkhxK0tIZnNDNSJCKDA0JEljbkRwT3NpMHNX''@;'; put 'put ''OCYubkI9VEJLUkhrXlMoRXs2Ty5kUDVtR1NwSmFjaHhwS19MPzQkSSlTd3k3JTE/KEheQk1NeWZ+SU9MPVdtUlNndTxtMzF5eCswNCRJfG1II1p1PGlde1NDMnBrN1M0RGNDOFd+b3cuYzhHWVQhSUM4VDAoeXV8Xl59altqYWhFVGp5R21sVzplQEgzP01OfFUuNzZlT09rO0Z5aHRjXjU2bDJX''@;'; put 'put ''YnlIRDZ8el5dOkRHJUw4OGZhMSVXX0hXb190VD8+Y0Z2YFRlNFEuYjJwRXErJjl7TEFWSmk2elVAT0AxMUQjaGJ2NWAqKmFbdjp2NGNrU3pJZkZYSDRSQlFQMWI2S1VLVEgzIXkrT3xHflZ5YXZmZWJuLGd+ekR1T243O0hEXkZ5KCkqeTZ6O3FFIzBZSmVEdXZANmFEbE9Zd2dpJWI9aTllT0tk''@;'; put 'put ''amZ4PzhHeklkWVtWbnVkPyheYiF3PUpBSSVwM3VDSmA1Ym52RUkqSEBIUElOT3VYUzxDTC4lI255Z1tpdSEydDZSN2J8SDcyL0syMFd2Ll9GO1JhNjlaUjN2IU42UHAoMmJGNGJfJip5P1ZeQDxLbH1UcVEmJmY4OWNzWVVJIm1ISHN8Ny8zdGMoeVlRTmc1YFRfSkNOWTJQeUNBRE41RD07eEhb''@;'; put 'put ''MEZGc1krfUUjQEtvU3dda1RwMyI/MThaKHJDJFdxK25ZcEFtc347a0ViaVhmJEkvSVtENS9MYmtZO3c0XSRqRDYvdypIb00oJEN5TCZrc1swNjhWQlZiT2FoIytrOGxYMEtZbCZsdS4jaEZ0WDNkLkRkX1UpQWlhU3dfYkJWKFUqJElieVMqSEQlPHROb0M2V003VCxlJks4dWNeRD5fR0BIQ15V''@;'; put 'put ''QzZ2P1NhaHglaH1gVkdhYzFDRTAkSV0qYik5SH5NNXtXM3Zmajk+T2lgcikoeTRsYmh3JHpRanMpe0p8OCRHN1lIVWV1LFN+QFQsZ11yOCxXJilVeElDU0UpfTBsekB6Rjtob1o+UUdwUCIlRUlnTjRSMWhjS196MWhRVSRlLlArV1czaXNRZS45XXQvWlgzV1FMSWw1QCo0JV9CQ3g/bSIxMSpk''@;'; put 'put ''U2JKVjp+TWs0aDdEOiZ4Ilt7NnQlNCxueWM2WWIzUyVQUiVIWjY1WUpeSTh4NCxAP2JwS1JpUTR7JDoibXRnIiRGc0V6MmdSOiZTXjVAKmc+MCR5dUlybnMzeCFWIjVTOz1pX1NVbUFUQDNKbD5hI31ZaSNOXmxPOnRaU0csRn5DZFkzWDxpUkxnVGRBZmBzVF93Yl5ZX2BIe3VubXN4PzJJNGNm''@;'; put 'put ''Yn42fGlQMU9AbHRZKytzeU1NO0BgTl12eExyKVJIR28qNUxwI1coJT0wXUkhcF9DcF0wOi5dQntPIXVpU0VoRTZCQlNRbDx2LFtGMnBLSjROUkBUJjpzeCNUJDJnRTkrV2A5dFNDKGE8eWcrLklFR04pWE5rfUJfdSRCdzxSXkdwYWNyT2x6ezolbDdDK11XZU08aSk1SFl7aX1baUpfdjplTG9q''@;'; put 'put ''emNFNVk4dl10blowfFU8I0xiaVd0N2N0TUIqMWpCWnBaeld1Jl9dO3g0bDpfZTR+Y2VHMmBHMmwmUztGbT1NOUQ/JUQ9W3k6Znx1M0ckeUkhNEw/LHtwSEBGc3cpYExiZygsVEgrSFgzeE0hUEdMOmY8MD8uIVdMYHdHK29rYV1mImJiWihOYVZAMDhVP1IlNU5SeEQ4PGQqenp6KjsmMXJ4RWJA''@;'; put 'put ''KixQUkszZWw6LEA9KWtnOyRjSjxyZWttXy9AVn1Xc0c+KV5MNXpmIXAjdzBjL3NbY3IoODE8bTNodT0wQkUxZ0t2W1FmRDAjel15MF54TSlFZVMpImROVnN1amFYOyJ4U3YoWCMqTl53YTAvfHhsPD1mSF5JKWVzOyp1V1h8MyFJI2FpKFBydzolOTovS2hSd3hZcil4XmcxO0Y3X2AzSyM8clZ7''@;'; put 'put ''X3xdPSw+c1MvI2BbRk8kUl8iTU0oa2lbXl8xc1k/RWZZb2tKTFNNakwiOFBTNHFtUipYLlVJRWEkfHQkfEA7K0g1PyYvTmxkaGgze3BJYHJ2P0luMkFfdyQyQiw8Qzs/QC8+cjYuJms3YmAuIzlOdltQXj07dXhye2hTSE1XaDpqbG81Xn1AdEBTPj9QfmZoezgiVk5+aSFMViNvbm9zSzhVc0Iv''@;'; put 'put ''ZGEqVTM0WiZrJE9Qcj5LPGQrfnsjc3YqOU54UE1MfF1TQGAwJGpzRVl+VCMvPXkhXzFKU2F2dn46OEVGbChTOEgqfFN9SlcibXhCX0pCVWYsaEZdWSw2M0ZzX28xOE55WExLcDF7WzloaFVOcyVeNiZPZiJAMV5sOnBhaTgxViohJXMvRUNkaz86IkpzVCxjWDMyTEt0aVA8Lk87U245eCpsVlVv''@;'; put 'put ''QTwxYGp7ai5XWG9FcDJ0UW44XjJ7bDt6Z0pVKXBNQGl4P3xsVkx8V0BbQ1ghc1UwaG4scGFzJnxCSSVLJVIpRCN4PWVjKClDbXBzdHghWDFUKHQ1ZDFgY1Z9WiJONjM+NzdXUj5WMCtxLj1pYG00bjQpUiRkYkFSPk94RUsiUmtbIix4IUUyPjdrTEtfRlshSyxLJGQ7c3MzPSltM15GfmJdKUsy''@;'; put 'put ''SSoiKEJhekVgMDRPakhiNW4sIy9KUCZyKXVKNy55MEtpVl90dHR6Y1pmN3dzVEFxJCpOXkFxRVJ6UE4idTZ4XUcpaUEoLnU5Km9WXXM9UnMvMyxgfm1tKldwKnssK0RFWD5sb1lnYGBFJk52fT9xWkx3aGR3VFJyTV1hRGBtOnc1T0NeODlyNVA6eU9iIVNQIl1lQFZgLkNDZUl8VzpIdXVHIypF''@;'; put 'put ''PFkpa3Nsb2ckRDdpfl5wVmdZaHIhRy5uRDxgcV5HNH05IzVsTjhMMU5dWlp3cUp5QnlRdSZueCpoMkhjIyprM1o9aVBIaVF9UV5MK0FCPlB2IXR2eV54KDtmMHZMLzhKZUgqYXBUWiQoeTBYQGlOSkdoWXNFeHsoSFdraCYrZWRQc0BuR19Ja1YuZnU6Jm0wajNVXXU6cHBgPEZOb3p3eSJ3el4h''@;'; put 'put ''U2oyKSV9SWlkSFBGRFdAfThUZUdmTWAhUDYzYH42PGljbT5fNTNwc2FMS2Z8cWQ+cV1qb3UzWHNxWmh4SHZdNmJnV31aaEopLk1RVDNiS1kuRUhIMD5jKSV8RE1AVF9UdFE+bkwvIjY0UWdZc3F0ZEBUMTdQKy9Tcn1YL0lyXWFBOTV9KXlxNl12Ukp0Vmw1ZD59dExCJkhjSWZWOjZEODFoYl1G''@;'; put 'put ''clNhNWFpRk9zIUZfSjJLdD8kcSRrWz4sQER4UEVrI2FGJkwra1l4c3QyMj1hR256OyU0VjM8ITpwVXJHOmRDQ3crSGs0JD5GQnR9MmlFfVlFTHJrNHxKSFIxJSppW2Rjd3o6Iip5U0sqLChuTyowdGp+b1t2RlJYaSZOQiMwXWMva2FpbEx9MV1xcHooRlZBMlB8OXIzenhmVF9zRylYX3JmXSFk''@;'; put 'put ''eDdNPUBPUlZqWFU7LlhuU3hEc0xbbS9pQERgUCQ0MWhyMEZyYktxOEhjZURXO1pdI3F9MUd1O1h7V3RNRHk/RSRHaSJVMkl3Z01hNX5DKUpjSVJ0b1UkO0NTUTBRYVFiUDAwU3Y3Ilp+RkdaSDMqRTRpRmVXInV5T1FzdVMqazp7e1FQQyRNc0VCJXJKcWZuUnJfTypLRn4haWxsdFY+OzdGO04i''@;'; put 'put ''YHN8cGVzQU5jUygweWxPOWFTP1phQX4oRyUsdXlYem19Wl42QDA5bStWPCVOIVJOUy44K0Y1YmtXclR2QzxYSWtIZk5dfTo8eSRJdWtDUEx0OH1oYmdFZjF7PX56NTQ9O0dJRVFfKXwibEJ6eio1NCohTmwxUS5FRDUhNy45dGwpXlYhM3RHZmgiPVl0ZV9mOXp9Ni8sQEVHNDlWbT5hRW1uODwo''@;'; put 'put ''fU0lMHBzTmI1KU5gLFs7MmlVQGQ5RlJ3OnE+Wl9gSDpwV1kjN1k2NUZrZzpEKjB2Oj8xaGk+Ql1NN1Q0ZnJjfEg6Qn1lWzcvJnhaYzk6OH0sW0J+OH0/cDYuPVFSVnhoNjM0KDc1a1s2M09+Tj46eWM/S20/ej0xJUlQJFVkNSkuQWVQaFAuL0BiPz1KI0spQXJbTT1BeW9aMz4zQV87Kmt7XUsy''@;'; put 'put ''S3Q/bVlBMT1sMGhGc3N9dHZ3N3FrdWZXdislcS8kRUlbVENLYjUsb0k+SilSUCNdYihwaEl3I3IpJEtJU3x2UUBHTjd6P0k/O34pXWQ9eUVMMUROemZVP1ZXaTw3JEVRTVlOWSVQV0pRdk8vaVZGemJBLCE2Q1EheFR3Q29aVFZhWyE/QFJrLypnbF1sWjU+MENyeFp1RC8wMnp2aGokLDZjUHsz''@;'; put 'put ''IzIjaEojWXBAYlQla2wpI113TjtYJHUyMjQrW1ZKYzl6NXUkNVNgI0ZzSHFfP3k4dU5gajpfTT5VKGhiVHhMKDtmU3x5SGo6aF9qd2NVIipqKF5VV117PyZnQT80JU9fRWVITD1RbVQwOUNQM14/QkRxbT4wYV4wNUcqIShAYSlXWH00eSwzY1Q8PTJ8U0ldXz86QHtuQD9VJSUrTjpqR1gzWUV6''@;'; put 'put ''XlokTzdpQDZ9KEYvJFJYYFk/S1c6fUJ7YEdSciM5aSp7KG4vUjFofjQ+S3djQmQvOUtpPFtsVUtKRlJ6THxGY3lga3EsOnBrUWpFc2opJlZzK15nPndrLEkwWSN3OmA8aWY1IjBeWlFueUd9V1s0IiRZR0V1I3xYUW4rZGY8e0xMRlgyTHdCZ0RJSC9zQTJiMHEpcStLI3s6NlM0KWpQflY4MF9R''@;'; put 'put ''KFl7V20rMHRMSz1GPDFHSGVNUj5aOnB0YjheZzMvUGtSNHZITD5GYzB7ZCZmYWJYUHxnTSVjdntvSCopb3IkPXBXQGx0XWI+NXVdV35Oenp7R0UhZyl8UjRSJiFkQFFPaCw1JjNwWnczOjNxOSJFOkEpJldeL3VPP2lzTm5HbkRSWWJmNDQmd0k7QWNway9JNHhKdEFBQFFzRHYoK3U4RilNdlpY''@;'; put 'put ''P0FZfXV9P0l0RHRDUiU4fSw4IXpmQ0tKNmtFWFJFQUFBQUFBQUFBWEwkfnB6fXEhXjNGR2gqdSIwdlQvZ3MjNV0oT0hyLHgsPm8jN1tZbWgmO0lDbXtpaHFyems0fl59JDcuW1k5LC9uNEhRY2xHazNzZUNXbVs+aFlBc2I8NUd8TD1vR19kcV1HPWNqYXBmMHgrLHE5XjxVc3QvWGg6KyxGPGNq''@;'; put 'put ''PCJUelpfUnZ1fllnQ2p5NX06JCt6UVpFTkArOmglMF9ONjE/IlpOMl4vKF9eZVQ6cT0iPT5EJFI+LzZGTHMrInRDcWRvXnNIJmkmO3lrOGxZOV9GXj98RjNBKXJdVzopSUNvO0c1VVhiaT4oJDo+KTAhVCFSRkZsMFpVUzRzZUcsZkxPciF9K1t5MXpxXWEkeTdKfntxVT9JVGZtQlI4fU5KY3El''@;'; put 'put ''bj5fUipSdVAvLzNOLHtpbmkpM1o3OGcvL2F6c2hbYVAvMSlDKT10MSFSfCRiVSVkd2YkR21TbVUlR19fc2FFYG5abGAvdyVAN3xGZmk0VVN3Oj9iZF5DTjxbXV9wd0dyIipyY1o7TmZJN0ZVPnVKQ3xeMD1rQlo5S083YHBiSFJvaFB+Pjh2ezNQLmJqenJAKHMqJVNBNWdXVih6e3BtQCtlPy5p''@;'; put 'put ''YDJ8M2BhU3FsNXxUdTs7PlRbbmpiNHI8YUdxeWx2NDBkJExefXYyfClOSjA2fDRpenxMSVE9L1RKQHJrM35HaixqRH1VMHhATVZue0J1dEBgNU1WNCYyeCkpfUkia0REN3QmX188T2I4d2p7eT8rWipSXzhKX21bfFZDV2FleSI+UnJfQGRrfTJwSjNBfWp2bmo6aEJiZ0hKfF5walJhPHs7SXk3''@;'; put 'put ''UmJbK1hDIUlLYWpeQkRiUFE7UTI1KWdYdTRvMkNkT1tTfWtIeWRVSCxIfX5Odn5taGFSRmNIQGQpJmRsfi4jNVJ9dEsoQHZFbD9vSm14JlUzLlZZNVJVfS9Ob2JEOn4lSjY8KSVvYVclNnpqbzcodDB5NnkvSkdddCQoKiFvdGJXNHFON2JfSDNaWTlod1F9Y0JPMCplIUlNY3JvVGNgOUBzJUxY''@;'; put 'put ''dkAydUhPQzo/Vy5uZ3pKSyN0YDpjViZRdnBxMSNaam03bnk3diV1bFNrT3slW0NwXX5OTnk6O3BjRU80clJrVSJwVFJIc2MuTSQ+RFpBJig4XTtqeTkmcHxHbWUibFs0X2RMSDIqUGdmIUAuUHc4PU5lYlFjYCo0VHIrRWxTJFozfFtQJjZ2JGV2RiZlaEBXcXRTLyN7ZSUqMUZDNyhbUUh+e09t''@;'; put 'put ''aElpe099I0VNN04jR2FJb3pwelROL2FrUyR6eTZVbENXIn5IQ0NdYCxiOHEvcngoMlg1O1krIUpTSUJsK34ycVIvY3wsLD9wVlQyMGBCdlt4VFl+Ykx4PFJZTlBsVVYqIVBPYkNqeVBsaDIkLCJYVTpEVEp4Ujx+NFJITVVNTDM/TjA3X28/ZHYrJnQjZXRxUX16b3BuSUpPQGRaQkIjImw3PEYh''@;'; put 'put ''PH40ZDVwJEw5RSNtKXg/XkNMMm1WLzp1VUIqYTZBeSR0ITMmZWQ+aCE7bE5+KFMpbUBwWCt1Pj5PS09DLmhQdTlGdV9DU1Rfa0tEOERVI3h2cVZLKWohfGY3fkk8O14vKnxvbTxCPENec0I1OkZXLEdlbVgrdl45SDZodyE6LllCSyU3fFJ0JkNLWDlTNT9dMjFUTCVdfUd7TmdWQChJREJReFdp''@;'; put 'put ''Ni5KbFdMN3pHWF57XW9gfip5eVY6Jmk4fFYkSE5SOkp8amcrcHEzXThuRWFySSk/VUZDVSs4YDBASDZYUWMvZEU3bUVCMSNRdHA3ZWh4NTVhcSF9ZGhOeSowTEJUO0xFWHQ5N3I2KWVmRjpnaSlEMyNCM08xc1BbYHFsRmJeP0UoTXxvaVpLOH01VEBvVi43OH5VOi5Oc3kjKy9DMmJ2fjdqckZ2''@;'; put 'put ''cEdIYV96LltgWn5KMGRaYjNwWCFSVnBARDpeRX5FIiYzZT9FKUsiI2tSUSNLRSZkKE9jW1hybjFxeGpiSURVMTQqSkgxdXgscn4qLGQxQ1skRHlqUEM9Q1ovPkhHVz1Pd2xGMSMwSGhANl1JbEVeZ1B1WERKUkEubTJwOlprfCMoWlplIXNgVi9nN28jMHYlbUo2KEpqTlskLnV9LjpiWTxLZktb''@;'; put 'put ''RTA3MUtDcjd8OzZxX2RMTFl5KzRjPCUkd0BORz1qcnhRRlo+ZDpEQE1tOitxM21yYmdKfXIxOHdJS0hCdT5JWXxCYzh8V1ZNRTBUQEIzZnMkRlZ0fD9WQUBiU3JJQ2duSkVTUjV+bm02ISVnOEJPc34wVzFBWSUlaSo9JFc1cHRhPz9tJGhJXihofHRwM0d+bmpXZilvS3x2RkN0enJ5NDxffilO''@;'; put 'put ''WlVOIlRnZWVgWCYkJGlSQGF5bjI6W0hIQ2B9Wy5PWjBjUD8vN2hXTm5qcGxGViZqMjd5PHgvOVVLO1psLEJCc0ZhV0lRdiVTalJbW3M7N15kdHxXZW1INUtyZSlgfltJSjphNFhYUG0sSyhVIV5kLzJKUCZ6Q3Vlcjl6JWZESSZheSY5SGlkZHAldzJHbjA0U35mSykmKj1lX2UifWAiempmLGpw''@;'; put 'put ''I010TClfMGZfUzs8NztESWxCODpibSxETSN1WlE9XjEsSSRRdXN4dTQmP2hSJXo3I0dtQUBGO3F1KzJdL2ozOGVmPlZFVWReTGguVUZ7JXF6K0BbVXhJYUBvUWp4ZjZ9e31tYTwoQiZgSFtlZ2FGUWtMdVRRVF83IUZnUnc1fiYlS2gvJnNES2ReMEBzd3VKUU43UjJqK1shRltObmRycnYoMT9j''@;'; put 'put ''JkIsUV1MMFVKUyVuRFRee2txU0piXXxNY11SclszOCYwRHV2K35ffTJuUlEiPk86TzNFbiNPVWk/cy4jT0lreSs5KyN6WV9AfHhkaXcxQEpCdCV+dTNaUkM2SkFEX1Y1TX5se18waT51JE9he0ZodGxmTEJkPXpGUFI3cCljJTEvKDheTzF2NUZSdjp2cV8/JCJBI0MsZEdPMHU4VFZBInJNLF5b''@;'; put 'put ''Um1UVkZDdiE4eTx5KXgvRz0hWHhAKHphKSx2eXxOZHlXOm1hfSx9XUplY34jQ2pheihubz9aQUNQQ1ZhYmxSLCt1KVNwUX59M0VqJlZ5P2hNJmN6fU0jViZWLFJ2JTt1YyVxbFdlbFJhajNGX2pnZTI+Kzp2b2lWLHYzfX1HMWNZVDg1ekVOYXNZZ108PzNGc0xZcUNFLjh1ZDcsQmxjdndndWNo''@;'; put 'put ''JXxBb30ydWQ+QDp4MHQxJVhqaH1ZSDpYayF8eyxdWH1pfHtmXyZXV3klX1ZqJVVlKT5WfW1LM1Uqa2BBNUw2MV5Dfn5JXyQ8N0RDN3BLZTlvYE0vO31RMFVOcWUoWFBOPn18PiNjZ052R1lUS1VWbE9+bypEenlyIn5RcGs2Siw3KjtROi5bUjRwOF8vSTBhMkIxRCgmLmBJeG87OUYzNC5zc1Au''@;'; put 'put ''ZURWUW9ZamZENUdIKyIhbyZ7Zmx5NTtZOVVmKn5JQHF9RGI2ZV9nLEh4YDslMWsmYi9aNz5FTGtNMltYdj14O05sUWtkUEZwWzlvdE59dmAiI21oMm96cm9FL34lejAkfDhkMDQ0QE04aV88Yy9GY2NvQHYpYyYpNXFDbV5RfmpQI206LlJ4QzYxZkohWlZ7Y2J5UWhhdDIkXlNAMU9xUjluQzpp''@;'; put 'put ''eWNxQXZ8cTo/ODNoRW5OM047Z3d5KylsfFFyMWVuOGc6UWVEMDBpMHpHeylHMDpIZnlLRyR8SzxDaThMYnp6ZEQ7PF5aKVdwdzdYZn4zVF94WDx0Sl10TjdvSz1uTG42WFtWbjhhRWFsTklBUUwvVyo6In4sNStYUXVrQkgqL1J9djdYTjU5fSNfZiMheF4vQXcoNj1sTDNMUSYlRWQhQlZZPXs7''@;'; put 'put ''UEY1REx1PltLUXEidWEpZnFAUlpsWnJqcURuL1Y3Sy9nWzRpMld7IlRlI2ZMQmcue0lCVGhMPSVdZDhtXzFEaCF3ZDBIYy8qSDghTDI3Uz1YbCNCVUJCYS5AYTsxUmIsfUBse3tdLGxSfFNxVzVAWHV4Mnl8PnJIITtaLzYwJHlJLjEyeHBORHshPkZEWmBfe08sR2xeUyU9Xj1XWGZAUTN0ciwl''@;'; put 'put ''M093aUFkdVpHcitWM2cldUJDVV1YVkRrOllrTV5eTS95IjZ7JHBQVERWMXI3c3NIcjVtR1J0UUJtQkA8IkgiUlosQF9DLHZnaGlLKmYxUX1pQ1NPM1VCWlQ9WUpJa1dIaTdJRVhQL2JKPzZyMEpVQUdydE5YTmR5eiV0PytRLDt6TnJCRzxSKlI1MVgiWDNxay9ET1swNywwM2VjeUZIZC9Ha349''@;'; put 'put ''X2F2dmBlPFcwaEhuZnk7YVhQRTh0PWRpMSJGczNZTFF+dzRKbFA5cy87byl3ciF+KmJgNShZPClTTCF0MmlvaH1TeDt0byQrckBJZStWPClUOEtBcjlSSFY3b0VnM3pWZHtveU1BU3hQRno/bFYxfHBYTW9sTWY7cXtdfUNXdColRCs6LEkyMz5ESSh9N1pmTGQsJEJ2LktbUkpfP0MvLk1jYDcl''@;'; put 'put ''Rz8iXWNhVSx4eCtYdyFEWl11dHVTalJqSShqcmk8ZDs8Pz4/NENkfDdsPjBzLiZSMSpQK3MrQXFOTXp3TyZiLERVen5KYzMmSDk6YGdedjZtY0lvYUZZcUU4MzxTd3Y6cjduK2JbWVFDWmkuQnQ9QToiTUhORUdZX1g2QzxRMncqb3JTfV5mRmM/YV4wLixWTFpfSklOaGFQQV1TOiNILyYlX0dr''@;'; put 'put ''V1FhS0QpX1t1TVRATV1yfl1uZC8uNTttOTVUcWBQR3FjMUN7U3E3a1hvP19YTHhTcnBFZTlRMENuWG9QOFpYKjNdbHg8c1FLU1MkY2RedkJHQDIwT0RlOCl6UWF7czJ9Tl1XfXolSXJHcFFfVzZOeCpdJmV2bThObyZFXjMmNmR0N3lDeXR1a3FdZDRCV2o3e09oc3E1KXhJOVg0VCpMYXFwX0hK''@;'; put 'put ''YF1TQkNla3s0UjRaPzdvYERhW3JsVjZDS3ZVbkhAPjJAfV98ZTZYPnFqRm5HUzAwQVM1S3pyQzJPcFYyeSpnITFnYGMxdWl4eTlCb2Z7ZjssWj5hfnpsZzFfOnhGfmVfT0YrN1lwcmRQSTA1TXxzRzEub0RnVFsmNHFDez1ea35xRzJ7c1RVfXs7TClqKUNReEk4RzBeVy5mLGhbcCRvbnVMbnow''@;'; put 'put ''MmMlcm4+YGFaR0FveWhWbjEvO2VvfXtlNlNUOXRLaSVCQVlLVWdRRkNISn5wN0xZSDRENWpmSzR2WWF3QnlXYVJEImNKe0JIL2I5MD10XT0xfjY0cilNczl7TUxZR299PkJDd0Q0aj0uPHVyazdwVWZzO35tYy9wUkdTMmBodkl9Zk9DLGUvY1FlXS52YE86TWF6YU0jcStZcmd2SXZgJHUzQSZ5''@;'; put 'put ''VSIjPEVYU0wiUWp3UF4sRU1+aDhOJV5ZNH5mL21JfURjR28yTTwxKitdeHJmOWQqYkltb08hcjU8VnlIJmZ5KEp+VFI0TUBHKFpsc147PiY/UWhGKTomLCFUQTo2KEdxOSF6eHJYYE81YlkxWnNjTU5xVns2ZCRXLDVzJll1TGVBbUtMTF07WEBteSIxd1Mqd0Z0X0MyPyhwSj40WlJoY1NtaHd1''@;'; put 'put ''MXs7OX0rKHpuS2N9RTBkOGVwbkJQPiU0MFgvM2Z9YFBOO2R0e1pEOGhKZTg9LzdvJjg8JGwzQGBCWktrNDk3S0UpOlk6Kjp+NWAmQkpZP1dvIlFsRzcrMWZYWCpoTUY9biJXMExoaiZQSVojLFs1WEpfPSwlL05nN0A7dm1xa2pvdlN+dls9RykkOn4yS0Y6QmJsTGFtNW49TDZYJkhHYGZoYGdt''@;'; put 'put ''LlNMbHM7PGNxcDZCWXE6MUVROGQ3WEJtNlIwYHlRO0chTm9fQ1Z0JiZObyVhNzVPfSRKTVZ2cHNCP2xhdkl7TjcjfltgJmU/bDUjRHgiTVlUXiwlMW9ObCZtUSNLNX50VU4kJlRxQ1pIUCFXcnZCXj1bV05DKVt+Jk1EcCZNYU4yL1BvRjVTYiRoKGZFOmE1KmIoNT42VF4pZHpEQX4wMlRLWXd3''@;'; put 'put ''bHtsOHdmPVdsdD0vbkFqamo8IzR7PGRMLzd0QmxkfDB6Pj1gMnhwdDN4N0diOzdiO1NMZzVJfCsrbjY7eS9hajhYYi54QWJZInZnJX1rXlcvcVcrVU5iaDBFTWZ9aGdjT0JmPD1BSGQ0cFQ9d2YiRjB+Ilp7RnZfNytdZXAjVD1AdzszVGZmJkBYPjFvSF4zN1M3SWJPZWFfYlt5Piw0dlAqcUpo''@;'; put 'put ''d0MkU1o2WUpVNTQ6dHBDOWs0UH1naTJCZE9TJHYmNVd5LFtaTmMqOEEjcXU6Nj4rX2F1UFNqNXoiNmNbPnklSS8hL2RzVTErfncwNjBIUV8kTTAubnh0Y0ZhOkhHJnNWL3F8ZERtaVciWCtUZ0MhUlt2I2o2R0IvQDVheE1SNT9HVDZOSXcoSXM6Y048XUhUXjdNeVJERG9oSnEoL3NLVVY+TWlF''@;'; put 'put ''Z3Q9al17VDdVJGFTSEApLkMoM1VDdj40QjZpQ2EpV3M9ZT5+UmVjQWk/TDA3bGNkZEAwXTU6MGNSYDBoRyR2ZWw9fUYsUHQjJV9HUTE8Pm5kfltUTntMTUpdN2RSIUg4TX1aOUdrTGEvc1NxUGVKNSpsIlVdX11rTnd3SFVtLldsJCtSfFUzJDg9OHc3ISUofU8vZ2R+byVEW3pEOEJeVSIsSkFg''@;'; put 'put ''aW4xMjtGcyN7RlkwJDM4dUgzajdOPyJFTmF7VHN4IlF1bj1XUWdbK3RFIUQsQ110aFd7UUdWPS8+SD9Pbj05UU95JXdbXmZlTjAzdlV+WSZdbDFRRCFhPEcpblJaJWhqITkpKSU0YnN5NWQ4eSVpVV5vdW5GMUovJUpuYnZtViNraFg+YEQscjBgfThAfUZdTlY1Tlc+PyFROmlZUT4sZF4/eGxf''@;'; put 'put ''MmpVfH4xP1lNR2g6cm5IfUUjfXNBamFsSCxoYlBCbk4iLy4uTHk7VUgmYnZfPk0yKCErS3R4fCpbcCw7VSszK1Z4KF9fJU5BInpnI0I4Rml2Yk1+Z1Q/c3lZJS5DKyMqaihKJU56S0FMd1NwJiJ9VDxXZER9bDlIb0w2PXY1VzA+VFQ5UnpTO0ZvOmZFTnBMfDAmOFckNjNUKCopej1gQUtDRkNt''@;'; put 'put ''W31QQWVgdnszYiJqVS9KPj42YTs6ZmVzfk97NXQvd1YkRjxVNzZJQiFpLz5BKVNJXk9vU0krOCJOajBbcDRAbXowKjwpZDZRc2hgZ2gjRWBXZG8wZWpkPC4sRSVfM3REcm5SOT9fI1RIX3JeSWwlXkAvSDhJYmMwckpbSXNBfTUpfjs/eig1aWRwRWFMO3ArR3laPCVHJCFqaXxUfndTPl5EWnos''@;'; put 'put ''YVU5VTNGXkV+NDZlbDRiLnUoZn56TmlFKklgVnZxUHJHY2N1ampnaDlYdnJHSVlHTSh5aWlxJG1MMldKdyZUK204cmFIIlsmRkRlM25DQVF5Yj5JRWAyazxEKGhzX182fiQrfngibkNDXWhOQ29PZ2pIZGR4d0IlKn1seVprTV8ocjlqSWxBPS5VcnF5Z0diRH1pWyUvNV1uSGVrOGdWMW1Nbnl7''@;'; put 'put ''Wj5xMyg0JDpxV19vdjtmN0E8LixEQCo/Jmo4ZUQ/O1VgJW16ayY9JSRRXV5lS2NANUhBaztVXWNiQHlaWGw3L10rWVYuPX10MUFSJT5oJSs2N1hobjMyXi57aFlrelswKnVtPitXNVQzYXZEbHZqPGpdPm41P2xBUD5wWF5ZVzViPjxFPjZOP0hzKTc8eFdNdEVFSD1LIXtTUyohQVUyJkJJYU5H''@;'; put 'put ''OFI2Lj9oLm1jLF4wdjg8XyRfRUBXPmwvXUg9XjBkY3BxQEsyUiEpTTk5V2MhXTRJYzRkWSRBRChzcj8/O148Q0VybTNtKFZnLFoxdkNKUE5YVl5AbmlodToxLzk6cC5mSClGbCJnIW9nSCpSZkQmYWxybylSX31jQF0xS0xvUX5paFExSyY4TWt9MVp1Ri48PSQ5ZjR+Q35RTTRScTk3TUZmYEEo''@;'; put 'put ''VFopTkx1KVF8V3BVRyZXez5CZE5dVyN2N0dsKVtbXnpmd10iOiQmUUR2YTVDJGR8ZTVtMTAoW01RJHZLPER+aEpbWnNlV0sqKi9fW3lgRHwmVDJiOk1jOix0ak15VkVSenQ+TU12WSFlUn5BQSFPfWcrKjksd3lWdjw6bnk+NjV1IXB5MDB9VUFVWjQpN2EsUSwkcCMqalo9JmB8cllGIjVEayg/''@;'; put 'put ''c3Mlal87Wk1oNTA1USFyVkM9N25eLmZJZlVPUHc3Ki4+YCFXV3FsSW4mejxYTTZPQn1WdG80Wj5vb0RxL1ZTMW5eeTQkfVtCfmZkfGFAX0lJU3E+SnRnbVZzanIpbGNzW0thUFtzRDw+bXFUJlFQY0IseWhVYkArKS5QKWNZSVdkT052KiZxVm1JcTVXZjReRVd9emcoODcuIkI9TWI0VGIxPXEk''@;'; put 'put ''Z2FkLmEiRlE2XUFsTVhCYisrRTR5emA6clUiSl5jezZSX31LSkZZLiV9LilBP3xCLEU3KDFXVWUsbGcsI3NTZWxbfWgyRmBtMyYzdEFuNEswUFU2diloLyo2LnJDLl4mQGdAWCh4VkQuRi82eDh+JFUzTzBvTCZfaUR3PyE7Sjs0SWM7eF8sVCwpLlI1ZWczaGg7XUEodSY4aXhSeEk6M11YY31e''@;'; put 'put ''cCs4KytgSURMZk9YMXFMNlsjVW11e0syfipRY181dlpzZ2liRm1bOGsyKGVIa15HMlNjV3ZMTF40cCUkOzlBSy5hUUNPfCkwXz1SVWVfRCsucGhhV3hCYmI7ME5JKE9UX2NLRGtUVUA5I3BbV2t4OGlrQm5dKUNAdnRUeCZ2eGByUC5wMVBEelcmOVVEP0pHN2lUXkBRNjMpRmFhclBKYkBVSiNw''@;'; put 'put ''eGwxTHpPfWNrRU9ZUm57dTkjUXtEUW4xT2JnJlQ5RCFTNSUvXTVSZ2BEP1dmciQqQHBrS1U/QHcofSJHVEhKQF1pMz8uRWtGeUp7X3A1LDxoeEI3X3hbcklZaVlxZF15QFd8aH5NVWxWMEkoYXxbX1ZqXi9rdEBiQFRqTk4/YnZQMTBEZnlJVWU5YkZ8UzhKLHNlSDBtKDI0Oyl2Vi97bkc8VV5i''@;'; put 'put ''T1I5M1svWSkrOCRJZDFgL1F4c0hAQjg0dT5GbnMzbypuSDk0PzJZSjEkO1t6WXsoTlc9emwqYH4xcnclKV4uYytgMGsjKnQ/KGJLPmhKIyNMdygvM3csPVkkMG5wPHRvRVVFbHtKXy56UEJmWDVbSjhxLypDKVtbVS90Q2tFW0Y6JkBPS3VCKyVOUnlLM3hROTI1Mz16U2F9YzFGKklWUT5VQ0Z0''@;'; put 'put ''fFVVNGM8YFRkZkd1JF5eamhHREZEQjlaWVVEaFJIZ0NlR3YlOXdgWlNmL2B0MW4ldmJNT0tuT090dXF8XTxqWTdZV21MP3h+Si9ALlFATUg0QnspTFd6PjlDU3FbVV5XI2UubnA5bzh9Pzd2STw0fUoofTEqTiJ8Vik/R2cjNTtHOyV1dVpbS3ZuU3FOWmZDIkAsdFB+OiQlNW52IT12UWNfWi8z''@;'; put 'put ''Jjo7MmYjc1g/PE5EX305eEhNUTxdVDRqQ3BJSTxjOXMwaFVCK1ZDcFlEbiY0UVErXXcrPlRZdDZHeFZ1cHRlTlBXZlQhRGxFPEQ9cyVNL3Z4KW1McnBhJC8oOyY1R3RAYERGXmdBezNoTDE2dig0Kjt6QGIlS0liPVkzaSxRUWBPcWpIWXVZWSxFKE5+WE12T19+SlF5Onx9WUM2TUQ2ZVV7QUB9''@;'; put 'put ''NjBwSC4rY2spYmhOOStJZXFxV006eT1GXmpfJTVXWHRvdzZ2fDIlPXU4TX1QXjBuNjA4aD44cXM5PHxTdF5ybXlbNUYsLCV+b1cmc2F2TGpMeyJbMDlkPjleWnJLYyJyfX1obVgjek5BcVsuJSZYQD4vNC8uMSRCZTY3WHRGI15RaVthKSxJUks6Y2M/T2UkMjJQfFpydE5wIy5fcjxBKSxyeXNe''@;'; put 'put ''PEF6RjNBWkA9JlJKbnhIZiQ/T11+cXJRQm1ieXpTbWhjPl86djxYXTReR2JmQkdwKnNdKEMpbUt2OyFLTkgrbT05MiYzTURRRnN3QHMiSTJ4UyNPUTY+cz89RnN1SWxmM3A3cTtKUmMqWT1ncn1DOzV8cEZxWXJTN2hQKTVROl9EfVZQY0UsMjgrTUhAZltEPVNJb01QeGIoMWVqTnAqMyNiXy4h''@;'; put 'put ''WW1jdXRgcX45R3lOfCt+UmZ0cVBqRnw1aDpDeS8oKU9UaiQjXTtRdkBEc24+bV05d0x5ITFleToxJkpWVmswOzlvZXBAe0MoblttVzkrTT18fUdFazAwcjdQOFh2SX1IN349a28yQXsiX0BLMngraSMkfVRZY05aOkN2ZjFSNWhJayR4c3o9flQxUT1kQl9UOio7V01ofD5gKiU6WyNsNHovbD8j''@;'; put 'put ''ZUVFb18oVHZyaGdHRkBJVDxTVj99RCJtWVZ5IkNYTW48Wnd9JlhEJDRmNH5Ka0hfb3tjaXdiIUpnJkZhLDpSc1QmQGFUQGt8U2F4K1M7Tzh2d2dtYTxgNygvOEFeNGpKTHBhY3crUndHN2YrfFlOZEkkNXU7QHBxZV93VkFFMytaODczMi9aP3s4JiRbWTV4TG91LEM0OU40aGh4LER3PXc5WWVN''@;'; put 'put ''NztpR2dNU3ptKi9bVHVrXSZ0eSM1Q11pfXJHZDQ2SW93ajREMCYuKiRXZ08pRX1sMVIyPys+TEo4OF9LXkM2UyFNQXFifH5TNS9QMW5rOUBaNm1fQHB7Yl9gZWwleGlzeV04aytQO0I6c3xbQnQqP1FqaFU+UippfkI+NShnL2FSInR+YzU5Y1U+Tit7LEJoNDQjYCJfXk1eQ08lPTYkOWdWM3xi''@;'; put 'put ''Jk5uO2w5M3Aqc2JCYCFUMFQ7OXRdVEIiWjd6Sj15Qyh6dGs+TFE2Vl5aWTtvXS81dUU6XllxdyEsOHByZXx8LDtQMjRdKihPWCl4NC9xSG1ZTixhYSpgXjEsXn49cFJoLkhjYk0lSSVId1EjN1hRWil1X2JUU0tIdDBIZUFCKDdpcjk7bUchWUVqNXNxKWIqTnpFVyEmZTxPKiVkb3J6NCMpIUgj''@;'; put 'put ''QSJSIyJOXjEhVGBLfGYkdVksczNJSmMhPEhqPT5ORnAwWjZKKjNyNVF6KEcoT0xESFordEBIPyVaWnBmcjxtMXAya2BlVU5vVypdK01tVDJBSzBgeEtecl10eV43WVpyVmp5TVY5WVEhM2hMS0QrazYuIVZnOV4wXjJWJiNMVFZpVEJLfUVpQ1Q3RWFxKColbGw0Y0wpV2xtNXFvNHhjLzI+emI3''@;'; put 'put ''eHUkKysjKlJrXkNRKXIxdWMoZSooWX0hRkFNWiI4YU0hdWt7c2siciVqUnBpOCIzVk5WSGBtYz5LNGZjTGdxZ1VCY058Q0oyfVdSRHV0YVMmSjBzeCEwT25WPi5yUy5SezlGW3RFeEwoemAiOS4kfVFlZi9NUWpTJl8iKXVsNH1GVT91RVEmeX16VlFqb1I+eHR4S1g1Q2Q2OzdIT0I7e2ErK2g5''@;'; put 'put ''XmZfRGBJM2RwQDA7O2YsbDtwJHo3QzxCUC9sIVBORVpVbntbOSxuNn1EI0pTPHgwdm1vZER0JWZHdTs3JnRVeldhN0xoZW4qdXouS0ElLkJURDwkR3pySFNxTy8uMndETGIxQl5jdWJ4Iy5fMVQvZSFeWSU1VDBoeD1CdUxBTSYwNEw4SiwoKX07SElNYWlQOlQoPD58eyNiSGFeWlVkOSZmZTQq''@;'; put 'put ''fVhnaVJsYm42OEJqYV05NyxmIzxfPkdDSkgoKklnPWh4ZHtuUHp6b082NWlLbS9QOn40dDk2YFljR3k6dT9rbFhbeH5acFlUJF5zPXY7T315TjA+dGZEIXFOOHF+SEdzc3R9PS9TfkhqKztqOVhhaU98IXw7azd4a1lTRldWSUcvUjIwSSgheDpobCNCTHdCVCE8ajY8cFRCMGhUK0lTMjlhVHJ0''@;'; put 'put ''LCNKV0w/RDQ4IV99QHpHYUQzSUsrPG9+Knsqd1heRVUkejdXSFlFbUYvW0REMkdAd15kRT1rTnAiaENMaj15a19lO1Q0YEVPM2p3OyZiQFBed0Q3KSpUcntpU3dxaU1iK1dyTSkhXyhNTDJXN1JHbVZxMFVNRl5XW15dJn1TNDpfJSZ7Xl51fCQvZnApPSlyVjFLanV4amc9YmtkTnNLalRlO2Mo''@;'; put 'put ''Zj1Vbl84U3M9YDomWnJEPHBqNGc1QC5MdFtXdmFhNlUxQlNeV0JQOFZ6QGM8JnxucmVUPW1qV2JrZWllfClxbTx7YVpxTFI8XyNnKCQ3OGwjOm0vY002OFZQZEdSekJxe0Z2L0RudEhDTyNyUDZRcVd1OGhlVl06KF8yR0ZIWV5sVXN4dFpRMjt0JHVebitRTD8kJn0/bjNqa3YoP3JTfFA3dlY9''@;'; put 'put ''VzNkOEROTkpQKyNHP1lBODxvUlN+JVNscVJ8PTs5Sk1EZVVNJT5uNVghcDdZYigqVz0oPzMsS2xpYlJuIXhBTjRhPEJMeUJrbWpvIjY2MywqZ3IyXWlfMWsuYC4xYUlSUkgxS2FzbG9QPz0uM257UklIZElzU1ZkPF5KI3tsKmpXLCwuO1JBV1lTQGlabFNTOVJLb0xqNVFrKyVEO1g7VHdyQHB0''@;'; put 'put ''clBGMUEjaGpAVXIjOSJeJlsrYTR5azRUNy4hT3FwSVhudS92OH0lVVZ0OkF2UTQ9VVdlKEMlMjUpbjdoZ3VDbWxtTV5eb3llZUROT3g4RWV8SDgsamk5L01ZV0Z1NEZAPz1GPDpwa1RVdUB2UWAraUBqR3h5KFI1e0xJOF4mYD19VnBjO2BTaDByN11EcVVTIltZNm1COWd6OFdkRXdNc3tSeCx5''@;'; put 'put ''REg0cyNwOHNGcTc0T1lrVE9kaElTXkpoUW5UV0FiZHN3N11TcXRYK0d4TElqN0RPM3I4bExrdTpuKSQ1fSYkKT9CM3glKFdxcztdVU11MUlYWWRPSkA8O1A2bHRtNkU/THp0QmpWUjFKckomPjFpb2RWS0ghUDA7JGRNcT5KZW9YYDlwQDlOfXd+I2EhbXBYd0UoYiJGW3ZDaWIiMHpjeG1YRSFW''@;'; put 'put ''fGd4REdEdiR9Ojcicih8KTAkUlZNOTsmTVFhQVUhI0YyZyIjNT9VRjptfjZRRH0qd2A3ZldJVFh8OkRNWzY2YnUuRUd1LldFcHBbVn1GO1czTUY8QGlfITN5bjoxaH0hdF9CSn5POnlNYHB1NCtoTE1zSlZGN3doTXQ+ZkZgcEBzSDx8SV5jX1RTdFFuVXo+ImMqdHNNTS9SLiooaTdheWZrOEd5''@;'; put 'put ''eW45SnpQNiYiOUlTeTFwXyFNSE4kX1U7cF1gWTh3LkxjeHxPPV96eFQhI2xEMSFlKDBoWDYxRiRqSVE7SHJfM2NqPDMvP31VYT9OIStmTCRjTWJAK0t+M3JIPiwhbzNkay5pQCR5RnNsSHxNYnZyYiRmIVBrbm9IXUE/NykmZFBbOE82Wzk5VDNnVigxPHF0RmB4WHZOW0BqN1NpN25sJSs/Kkla''@;'; put 'put ''d1V5czkuRGk1N256IkttUEFLNVlUOz8xWkg5TkxNaWNyazdKVGMjfHdKRmxsVEUpT2RUVl4ieVpFLnllRWlPWmRWJWNSSkp3a0Z8eDxWUi5RcCVtIz8ve159LEwsKHpZOjsxVlYwMSlAZzwuNmB+UGQmT35bYls7Jmc7ZG9mfWlOeHlSSHNgS3FOJGQ3UyRKcUQqdGU+e3VmWTM1QCMlZWxzOy9O''@;'; put 'put ''MFIydEp5cmg0SUg2JS4yR05adGxGKD58Znkzei5mI3FSQDFfMzdmPno+RFN2S21NTkQ1SE9ISltDfiZqM1IrIW1KR18/a3Rmc1ZLN0V1SyhJXkpjP0VDbiRrLmtWO3J0eUlHTShlTGsqM1g7XSEkZlhbSyFCVVdxYmpAcFIsUEt1bUF1ezlaITVVbyFldTtNMCtAfDV+fTlEMGk9YltNJj4vPCQ/''@;'; put 'put ''bnp1cl5QS2ZfVzlNRV95dSNVcDJMZ3QpXk9veTo5bigsW3pxRnVOOVI3YmAsTStvJHtbZ0NkbzFEez8hPyx7SFs+aXFNIVI8X1dxTjpbZTghTlQqZWJPVmZeREleOCpgeGZ0KjhnKH5HTWxEQ1kvaWlhQytqfUZWJllHdj1ycVhwV2lOT1VYM0spTz1ANyJ2OUVrY0FqYkYoRjp+NlQ3R2VzLmIl''@;'; put 'put ''KSEyTzl+W1JAQVlQamY2Nz5bMWZfSj9iRWZAek5XeDllXnJwbGh4Ly5uaHVuXT4xVkVbMCg2Zi9UNVpGej9pbGM9JGZ8ZmU9aTpvRWR5Tylsb2NhWH1qUTIofENmflhWRjFwK0Rde3BSfThURyQ+bm95a1QkP0p1WWNuSWxAdERAT21hXX5jQSx7SHtmO1hOaV5CeEowRnZ6S3RxPWUuUUA0Z2do''@;'; put 'put ''QmJyfSp5TDRZT3YvIVt1NFNhNCFqSDk1JGorIjNiRTM2OXVtaW1MNUFQbzE+MzM2NS9KOT1peyFpbnE4NkM6NmFOLHhKLml5XjwwXkplNWxxfmhUJkhvQDowd1giLDx4TyNDWi87OlQqQkpVRWs1ViJSTEFhYSs1IU1fYylzTG4oT0kqXmZDfUF+czhaZ0tzTSFpczVaRl4pLGY+Y31QWzsjT1U1''@;'; put 'put ''MiNKZHF9WU4wI2g+LyhsaX47c3NRR2pISHgxNnMjfWBJZFF+RVNoezoiXjtAMXFmWkZ+Y2k6SUNfS0lMR0w+X2V+QEN4SSVhalY+OmZne2JraEN3JiRnNHI1OmM5XWJNL0BDQD5eciJUTExOOVV6PipwYTMrVUBseSNDKyVTUypiOmhDaG5icnprWXRTe1ZTNn5yR3pxNjB1Vnt0MUwyZnVgfkQp''@;'; put 'put ''USRNaWZaJTNsRHlDenNKeGJgNWdjTEthIUYlWz9hQyRRY0YoZjNAX2V2LzlHTXBvJDYxcmAzLEV0KWciPzFPRXFzODcqOkh+Okc7bVRyOkBOZFFGbnpHbG4mPSg2e3wjRkxBdSxIPm9Tci5PLGp0VCVyZy5nKGdVZzJjYm9bJFZzbDA1YmllWVtrdz45NUk9YkoyLz97Sn16QkIqYlo2NFsqZXE/''@;'; put 'put ''OE89aUBbUW19SDdhI2cqeXBiTl0rSiZuIWFzLF9VZHs2K0hRSml5c0kuQmw1eVdHckt0YFBLKTFqWz1XdSgkZV5TOzJXWHI0MWg/cmtrWnhqRDNoWmlsZ3c8JjEscWNLZC9kWVVmdHdJYS8sNmxmITpbaSk3L05kO0Qsc18/QikrcH0pdlVYTF9fXmN2JClwTTp2LGlhcm9VRFkiT3xrPj5yeTMz''@;'; put 'put ''VDRAOjBoRGh2T3lOJEgwJD9fMDhWUCM9MDY+Mmo4PHVIMVlyLjtuTCt8RF1NX1okbV1VeG1NWDkrcUwzOSZZfWpqfTJLbUM/ZFBsRSIjMzQoT2J4cX1fWSlfd0ArVksqUytxcTArWnRIOmhmdWpHcXlFc3NCR01YSj5uIXgxN3UwKVhLfElVLGV8XUszTm9+VSlXZy9nTUBCbSo+dH41QktLamko''@;'; put 'put ''TkloS3FsPiVub2g5MFA+OVV5TjdaTkk7RGIxKF05Qyw3LGJSVEM5QjJaIyV4b2l6aD52aUZFcDxdUGh3OE1dd0s3Y1YhM2kmZmpSOCxlKyg0T3pNeWdFVTEkOCJBaGU/Y2BrT1RUdld3PDBqITBxblQoUUl6WH5RPXppTWU4JjEjSWRKYmx2RGE0fTd8fWtrUStaYFA1cmEsYlAxN1Z5X3kpUXRg''@;'; put 'put ''QWx6TmspcVtJejpGeVY4cS4xNEJCQyMuPU4qeHBDcHNqTCFeaEkzVjdGJHJEJGVyLzVpODpyeX0lPiZWSjBrUlo2Z3l8Mk1NVCplMl12V0MkQ2lCOy5PWTA2NyNtOmYvc2hsWGFVaXZVcDAjbj18aTdVYzNOemFZfXRmfEc8VWEySWBkfEZZRHVrbm9dViUwNmdxVjYiXVpINi9VW0NYPCE6P0Y6''@;'; put 'put ''VFokVDJve0BzS0ZQa0A8MH5tZ2k9WEJNW1c8WUI4NDBQLGtqVmB9ZVJwISxGKWhqL0dQZ3AxKWhaRCFtNilqPV1DPT1mV1tpI1NRUThqPjt5SXIqNkUsRWUjPFJrKzFbS15bM30oaVQsIyFEXlldb3t5TVo+SCQ4YFBUfWxDYDJNJXVqS0NXX25OPVd2R0FOUTcvV29gK0Y2W048fER0LypnKioj''@;'; put 'put ''MmlHYiJBW0ovRyVnfXFVbGA8bWYpdT8veHd0ZzVfMlQ9fkxqcGw5Wi81bjJkVFBkOk58W18wWm1ET1ovdlNZWUp3LD1LWjVPcl9uOHkjSSRNWEY2PTdgTHY+YGMjdVMqR0YiWENMektxTnhgWzU0WkNDPCg1IlRZUkhqPH5LfFQocmsucDFaUGAlKmc5aE1rW2syVCxTLD43I3QrMSNTRjJRTzJt''@;'; put 'put ''JkIiflklTk9bfWg3fml1NFNGYExGY2VsazlyQl93QTxrPDZ0L0oyMElyQl5qRi48dkZiYEtBNTBBRXVvalRZODxvZmJCYVlBTFopbzpmUiVZamlFZzVLYk5IOiFpckI8UTYzdV5iZV9PKzl4K25tJX4pSTIpcXA3TSYuTjhfT25UR0xiVXxBNTYyJkJBTVtZP3ksTnI5ZjY9XXsuPnl5OjE6JH1L''@;'; put 'put ''QGkmWWRLJHdiemNWQ214Mj8pZlRXJVd2VjF1QCwze1JLVH4ld3RLYSQ4d3JyKHxzQ1d0ISk5Tk4sbVNvWVVTO2smciRpVT5pPTgwV3N8SigoQDBrOFNFeHQsQG1ZY3tGXXE6Iz9VeUNKWmRzNG5SK1clcD9OfGc/LHljZE46c0hhfGpuQitSWGFPfmR6UmRlWFtGYm8yMU5XQWdNUjJlJk91NHB9''@;'; put 'put ''UyNHJXZQQiUpUHEpP1JzeXA9RFgoJUIsN2dreFR1TkgkPipuUE5WdGtdbE1PSj1ycU0vWy9naFomL19YUkp2fndCMDZ3WDt9KC9fS0M9fCM9XkBUNlpLR0M3KCpGanVHVUl2I0s1ZU1MOyl8O21TZVVVZDMxKiwwVCFmfno6fEZWeFFud0w7WyhLRFZ7bkBeRGdsNS8/NTxnWkBSSl9iOl4yVSNf''@;'; put 'put ''V0l3JHRWdVJeM1FRYTk+I05Md31lOGFicWpNZHZ+cUZOamd1SG1TbDFgazI1bGdabmlKfXBIMGBLe0tPITJ6JlsxdEZBeX5me2pISDpUNTRHVk8lblooaj1UK3AwcUpQK0VQeGlKJVBWME0laTtkI2RefDx8ZCIkQDZFZ0ZIXncmSEpwc3BENEI+KD1vZShxMTsrfTV4LDcwTWdnaSQuV2ZIY3o5''@;'; put 'put ''Y2VnOV9zQkp9WXR5JG4kY1VHT0d5NnNWd000Zj9bQnhXMDRRK3VOPk4mXipLQyxnMWZWX0I5QiE4bE9kS2csT3g+and+TkpHSDRwfH55STI9eCZdRiEsMjZHVUJrJXlsX1YyS1R0PnJQIWFqZW5dOUlUfUJocj5eaEppWCxld0BQTGVdW0Q7QFElQzNOflRYMXEmZihFbWJPUV9oS0g6dGUuPSoi''@;'; put 'put ''STVTdnVTPkdQPzgyS2dneGtLZihKL2Z6cX4kJXFBJDJyPEg6fHZGYWojXkgpTTYlP2o4Iy5OQ0EuN14qeEZhSEZQX1pdJHxObUdea3lrRzZ5cyMuXzBhIjB9WSY4QkQ7YWZPaDFJPFhsKiVXYTUmT0pmKSJXaTw9cHQifTFQOiU1eFQ1Z0RPfkFXT2M6ekYvU28lNEY1cSY0ekpiO0IoLFBAL2A9''@;'; put 'put ''QChCPVAoKzU9dlB8QFNxWDN1YXZUYyZKP15qMXoweDU2TCVxWG5vZmdFVWFvQiRNKHNTKlZ6P0V0TTp8UmJUOTYmQzFiNipbS0gvPlVbfmp7TXIubkREN045c3BFMSxUKVhVfXJwVSplfl1CJm00QlBwNzFWZGx6dUNdeUAuO3I1LmlEUi9XRWlOWjlFOlE2NGBoUm9NWUohaEtXelRkcSE8aCo9''@;'; put 'put ''OW5gfVJ8a0Q4dHFjeU5obWdoa2J7bkxRXmlUOjJWOT1dR01AMEAzPEtxdT0qMmI9T2xTZXFMP3Z6W2tGTjBgWGxQWEE+MyVORm1oPHM+P2dZd2ZGRUw8YUhWfiNJSnxmY0plcz8oR2Z5azpLfTxhZSgkeywkTltaO1N8d0Q9clZ3ZkY4VWduJXBOZ2FSaFBzXntuLm8oY1c9LGs3QHh0fCkvQmMp''@;'; put 'put ''VyNvSEF1MngwNj4pYSt0byJmKiViejt6VD4qTl0odlhscWJKOCokUzhraEN4ZCNEPkZnYk1sRU10aHBqR3s2WDBSZWhNPWMqamFBbHFpdDdTMGQ+VkxgdEhwNUF9XVR9TT4ueD1Xfj1lUTsyRVl6VkY4c0U5TGNFS3NGYmpaSSZRLmQ4Q2YoQy5HOFU0MHA8dE9TKmgzfm9KQDFYfnllS3tGQC5t''@;'; put 'put ''U2hYW2FmT1ZpdiltTz18ck9kUD5nYW8pPXRKIjUlQT1nP0NvKHZzLG5zJjtPQDI+b2NKZExGe1V2VSJWUGYzdjl+VzRXVkU4W1RaOnheXTR+RmhKO19gazdVajFnUEs5SnpOX2FLcihNYkwlYmglT2lJJCNDYig7NWV+SW4uUmpHMXE2WlpbS1E4RVJUWCp4IiZVfGh0Xl9CMDxhN2VCOldeIXEm''@;'; put 'put ''QW1qTTJzY0BxMFNRTEpZXnZpP1UsQ3gsQHlVP01SbjtTaSlFN1Z5Pl9FSmUxdWdSQFEmQ3hzSmh9RHpzJSs9e25iKihGUnxGOl9JZkhnXk53Znk9LlBxfU17ckhaPkoxWClqP2IzV2U6fTczcl08QzsoWGV4V2p7RzVmKn1JL3Y5Zm16JVU3WDFxS1tOakpSaCNFVEQjZVpfaUdsZ3ckcShbVSty''@;'; put 'put ''cDRQZDJVdy5yMXRDdWgqbUNLRjRfOD9PZlQoUV5HUDxhNndVPGR1fUJ9aTUzd0c+YlEoNnJtRSpJWE9BKSNZIS5UOnRKfSpnJlFMPyEhJV8/WnhtdTx6bz91IV4hKiszTnA/MTB4Q2hOanFJIz9NN25LOiU3TFp+R1I8MEkwRnBNcFR+aSJ6YGRXT2lxRFYpKTdYXXtRWWB6JX1GbiVJVUA6RkI1''@;'; put 'put ''WzxEPjV0YkBORlNIaHo0OlhgaE0mT3NwNkguYnRCb2Z0WHNNQ0t6NCJsQVZkOHZScldoZ0R2TXZ5KllNKnxnYyxELHkvK0g5YDlURGA0T2J8dl9jMzBWN2l+R0tNWVQrQld7czQ/eCwoYGpIXmZQcU1ebVdSPzJaUHJDNHldSG89e1JUbHl9PDg0dGpiVDtpI0ooKW5ORG8yUXJJYl5KRjFtKiQj''@;'; put 'put ''VTEoS2VGVEokJEhBYSpqPVM7MzBPd35nblI0ZHJgKDR9NDZ1Sik3KGVbejZ+Wix9QX1VJileMDAmfntUcSwrRjw9YGM/Vl00QDQ3NyMoaX56Pjokd1VxWk9QSnIrYmdRRH0pYjV5c05bSjF9clttdVZ0SXlXIzc8S3hkeU5NNVYvOCFybi8hTG9dbE5gd3lpPFFiJTYvLzh1YnY+bz9fbXxDU35v''@;'; put 'put ''c0o6SWpAcClEQyFzW3t3SH0pPX47RHkpNixYNTJfdn1eQ3YyMUVhU21hRjFXLHtqeUAmL295W0lAXVBfRk1GaitUfCgkZXlNbmRoQ088SFZ9W3V0LG5FQlREI11Pb3cuQjdwWFA2RVN+YXBtd2hQSFdhd2JALixZRS5CRU1baiRNS2Bbe0FpQEJpKGBvalNzREM8KlosTUVbTVhTfmFMcXBZekhI''@;'; put 'put ''aC5eT2hxL3lZUEZIb1skMHQ2SVJndGt8eTMhZE5GZGBpM3laI3szLCVjVkdXY0BKcX52TE5dQWV9JHVbK29tazw7PlNoTnghSjFJRUxAPyYhfk9kTiF6I2krJUglTUttaVVkOnc0T155RV14SllCR1QseSZveDs2XW9LJm9NL0V6R0g7Im9lP3VfV210a21mTnc3U3V+UkdKKjFMWHo2dkdmTWB3''@;'; put 'put ''cy5qSEpfL2Z9XVlhTkBrbTYsK1RUUnVDTHNZaysjMWhrZDNgIWFTM35EdE13UGM1fiN7Y3pxUHRpK04uI19qNz52VjArez8uYSEkWnlORUZrTV8yUilMeVJWdUg/a34vIyIyUGVfLyFJXldIb3ZWTmMkUyUkQ3Z0YCY/KlohJU5XfTEsLkh1REo5TCNjWnEqZj5MRSxhWGhiV3hmPzlgL1FzRU09''@;'; put 'put ''I1RZbHIsIjd3fnQyKXZqPzl3STg6UlZfPTM4VUlzWUZNYV0wSnY9ZCp2Nk84cjQ4OmpPe3dnSGJhRWE7NDYqZn1ZazF3XV1kd1peUSQjcjFAQE5Sbk8rW245PzkrLj9admkpIXIhSCZqM3Mjent9dzpJNmpwNFBTdDZabnAzT19leV56YT9UJFZlPl9qb3NaOE8rUnlHSkpZfVc+IUJYIlVeVyRy''@;'; put 'put ''ZTMwNVpUVHpzamRfUTk/Zl8pVzFFUk9xQjV3T3BxUTt2PXllWTdYIT01NVJnIV59W0dYOT1wWlRJSmlzWkckNXdwSHxaRzwzVzpsJDA/JkRXMCxYOTBTNSZVQC5mLyFuL0Frb0VwM3FBQks3WFZxeFJ5Xj9lWkdkV29XL1BSbjciVkU4JjxKTykrSG9iUFlhfiZJbXw0WFJOOUI/fDVGaCU5PlNN''@;'; put 'put ''YDlkdWE1cDhpSVdTY0UuW2BrNygpU3w9YSpgeGVhb1p6NjRycVhCRDh8RFU2ZWBgKV5aIlNnXllQcGE7Tkhka0tkRjNwbnBhWHxvM0ZPSXBqZiNCO3xvUyZYfm1MJnV+eEVmb2djfUl4Nz9tWjdNOi4qVygoVlN8PXg2aG03XnI2MVg3azshdC9ZWHxte1R7OUtvPjIvPlRzVSU5NlYofihQUW1a''@;'; put 'put ''TEBqTFAsT0I0fTxoWkdwXkJROkl+ZntwflFQfChLenNsMlNZQCRwN05aS2R5YFRLPip9bHg6bU9YfjRXaCg0ZHRkUV1OIXFxPUc6XTJKYjt8RFU2WDQifEJyKz46L0Q4dllBTU8xQzdfbHozVW5mRlopbEg6YCQrSF1BLCMyWXgwdHl2aD4zanJ9NXVaIUM5RThlLj9VUUViWjdXTFpHMDw7a2Q7''@;'; put 'put ''eCZuKi5IOkIibDdpXU5MalJeZDtgN1V9Yj92USRkYiwsbFg8cjBmX0h8JUo3NCRJNWchLEhiYVRmcSZXe1hNUXYqWmYsJG5iQUMyMCpoZ20wez0/N3chSnssNllSQG0ySTxrN3UzLyg/Z3hfcEglVTY2c05IJUJgWD8rJlRLeUlMcmdHX1l6YzZwY0N5OmMpcWRkbUgzS3RMcDcldThfa0hLe2FI''@;'; put 'put ''XV81SmZmW0V+Sih2eXZ1NW9ZL2QxNzdkRzpLVC4kI2xTeyxvWUtBfkYhRkxwMDp4fEMwXWxtZkUxdFs+PjF1OiR4REwyfGg8OEAjQnY3TzxmYnpEO1I2LDMvSk9nVktpdTgvSChwekl0fCU3fn4uZyowXSg3el1vOjszSHJeXSs2TTNMOjtHWD1saHVsMHJRKEJeVW4hK3olcnBDQD5UdSFKUUE3''@;'; put 'put ''a292dEROaU5mRk04PEBaNmJMbHlIazpeWmA5VDFKRm5oOXhmJHt4TDUra2xSSTgxSCFoRTI5ITd5KGRtdjtZbnVyTSFSNiJ9OkNIRl5sWjBfdDVfcCwuZkAjd0U6IzJUYFJTVno3bURjRD0kKEt4YylZdjBfNmM/LihkK3ZWRVJwclAqVFNxJk56P0Q9PXc9Y0pxSnNQOUx1OmpYM28pfExfMnVJ''@;'; put 'put ''bXFvRCkiWEpCQ350WzVpbkszcStRRyFEWU5zJSwlXWdLOFJPfWUpc1lIfVc2Y0RUZz1DITY0akgzfS9zeHY9eWJ5Kk57KktgNlg/LnAwKE5xUG52OVE2ImxdayFTTnYmPWhdS1Y7UHx6VnEpaj0/aXpIOHQ3RGtxcS5NRnZ3VCRTPCxoV0ZKNSMiY2VXV3csXigxLGpbNkh4SmZiaiYqTGc0cmhQ''@;'; put 'put ''eW1eUXdJIyNTM1dGUE5+WGtNOHc6O1tjSnxPeyxPSUVxOEQvQnQiXilBbVQmdz1BYlR3UGp8OVVmN29Ub0U1d21bPFRAQmc6d2hCOjZ6dVdUM2MrdUpEYDI2LHRKNygkYU1dfDg/SngyXj1ydWpQMzdGRjs8Mnt7UDxjT0BIXkk2NHA0ZT15TG9CejRWZ1hAZWcreXYxeGA/W0NaK0hYMDVBLjNp''@;'; put 'put ''U3RhWl9xYjt+V0s2KV0yRG1jbiZgKWNUYy9sTDRAUm1CcWIwcHNxUVhJXUMoPHVNZXomd00zN1ViQnY3YEMwUk8/ZU1hSEpYSndHRmMuKTVTRkZtPVdnTVVAWWhHSEF5Z3FDeyQjMndKK0BAakJwLmxpSSEzbT0zZ2xdc0B8QGIodE1IRWRvQFB2PnV1U1thVjAucHF2WV1mbWhNW0hOL0B2JFo2''@;'; put 'put ''TzQpT2VJeTc6TUJ9Sn12aD1rW19dIzF6cD8uZk9+d2llPzJHYTp8IzQ+NG5HQFZARDs0SVVCMzg3NzM0IyVNcXtpSjdeMkJZKlEmLmg+el8sRkQyXSkuSVlYRSYwVzxHQjQ2RnBNPlUmW3xDZExMRzpvXWlqN0JsMiF2ZjdedlVqLDBkdU5iKmhITFhIPzIkTmRoInR7bl9dOXRWJEEyciZDK1kp''@;'; put 'put ''WVZbbCpTYk04ekdfdl5WZmZyYitfTzpQbDdLM0BCRns5OSomMWRiRHJvWyt5eD4vT09sK05MbkQqX2srfT5iNWA9XUhNZHtudy9CQHdPQENNK0NdQGtKdFVCQmA1VUZTe2lJImt3UnR0bVEqPjQ5USpRJk09ekhKMmlMYDNBVVNMMjZGL2FPeU5JOndtbTBEcHxQbV11UmRFODRGIV5GM1guIXg4''@;'; put 'put ''Rlh9L0kyaF1oUjp3Z0EsOCojcTx+Ui5SQmkjU0Z6T1s4Uk83IXt1JGZoRyxiQjt3QHUweE9MXW57KVkqd2N4eHt+NGtiOXpBYy9pSTVvRjdiSnB8aH1Kbk8wKV4hciVVNmAvOHtOakBzOmAkKlA3WjVfSXVDRnlSRWtFdVU5dmNfPSZ0b1ltO3JgNCUualZuXUpvTl1MelJUTSk5PT5sKk53QWt0''@;'; put 'put ''c1ZrM2c4fExvezVKdWJWcTEpTkkqRmAzMjc7NGk0b1I/fV5BcSNhIXVFVWpmbUFdRGVXPXx0N0cyKCYmbGhoI3s7KjE7UGF2QDQ+ZjFkW3lsKFhyb0hoY10rTUp2NiVnIk0iT0FZYn1UPVRxdU5xUWRIIiVEfFFeYVY9ZlJGdkZtWSlfd2ohTWh+eilUdnN6RW9BcyZbWy5CaVJoRE9DPDEvVGds''@;'; put 'put ''ekNwKzc4U1ldI2dMR3MzbmY6RChXbT1VcztdLGVRdWxsQl5NYE9iQV59Zn17JnB1WWwqbz1VS1N4Jmp0el59fV1LLytnYXVbaWFpV1AjbV5Wb0s6PDhvZVcxPl54UXFWTlZzamUycUk3bGFkMzMxfj9RM0d1VGVJTlR5WCs9fTFbTiV3TUVXb3g+e20wNlJyVzA1QHQ3fS5LR19CQ3JKS2A0U0Il''@;'; put 'put ''XSwpdThBVGpTS0tDSnFPMiVOUGJIa1lNRywxNkQwL3dHLHh+YDtea3xCdHUlWXMqajY4eXlzXjQkZzo1QSgjfko2dlBgVmJjcDhlamBfO3x2Y0FWN2t4KW04OylAXi8hTklBaGRXajRhXjJRbzJGRCRmdCVJaz1zWG11YjQsZjhYQ2lJTil5bVdBMU9ofF12fFEqZEh0QSRfZGxZImlFcUJtJisq''@;'; put 'put ''WUdzMkNtNitvIW4jYExrKTI9WGFkWlY6SmwlcCVKbiV7X3FGIXU5VEs6XU9VbW1fWWsza2UwTGtgbCx4P25gIzxxR3ZZQzBCYURsN0k7Q0MyeCFhLjNVIlouc15CSTp3MncjWCMsdDNPLmZVLjloeEIrZ0doO3FXI1l+R1RCbClFQXo9VjdhWXcuLzFhUkh3cWYueC8mQ0wkdnhEQURFclRQRVZA''@;'; put 'put ''RmMwNHgvTj1hQlZLRWxQNURwIVFGYkk9S3JmXSN6YUxiTkZ5ZkdBcE8pPEtrYWV5eG05VVcoLnRYZVI4bzwhTEBkMG1TKSZpU1gzMmhmWHVbRFE1VWtZSnB8dn18VUplUipxPFUrWUlfSkluLCp6LyJlMUByRiZYYXJiR3smX1V1VXU1KV01PzZgfHVOX0dbR1F2d3IzPXUhJU5rRi9qMiwvJUUq''@;'; put 'put ''WzgyL1M7aGo5M0JMd1ReVzImaTp5MkRRZlpqRDhVQUhoflRyemRvZEg8SjM/e0NLOSQwfCxyL09NVl09e0I+TXdVYnspcUo0NWY6dmE8eWg0TntNUkpEc35LdDNjbiglYz8rbEhrKFA0MU1QKjVvUSl1fjFOME8xQ108PkM9MjR1SXc5a3ZAdiovSWA8bkBoaD83UlUoTzVsLCpTe3Bib1YqV2VH''@;'; put 'put ''ZU1LSyw7WD9eNWxqeVMzODJKPWtuNyhoIU5lVlNdQVAzKG5KNExuXT5KbTNnXVBEU31AOX5rTH1PODtsXW1zUE9qRyEvQlBsMG1XYVojeDY8N2AyI21CfHZedGg0OHNTOXZDcHFxQE4wQClVeytrXUNjb1RgS3k0Xkpoem5yNTt3WGhbKC5xKXhOPitQVnsqfEYqYGBPKDZSLzR3ZWRISnRkWU9U''@;'; put 'put ''KlhRRFlra1loVCp3THM5OE83Zjc7Slo0LzdiUkA/ZE5iam0+bStfJXlkdDczVWY8djpXUThPWGdlL2t0fEtXWE4zfk9YRH5jTXpdVVIyUiJ6TEdeZjcuKUIhJHpXblU7SF9FPDA8SCFkQipQXltoSGg2VyFmRFMlSH1XPml2RTJkX20xfHY9IkIpcC40M0xCMGwsdGVnYTZ3TWpSRW98MjZ4Tnos''@;'; put 'put ''WkopInxuZjo+Sj8lQkNfYTRDbnUqOy4/T0tARGQrWERRUUpdR09yRC5+O31AVF00bW1NR3NMeztOej5lI0Y/O2wlRE1IdzhTLl9lelB3ZTs8dnF9flZYOEN9bj45cXt+O2N1fVliYk94Vi96aFFVKS9CRzVYb0Q+ciZ8NHB3JVIlSHMlTzo+ImEzZWNAYzcrRTJsdiVpb3N1Nzw8WnpyX1Exak9p''@;'; put 'put ''Wn1rX0NaMDB4cl1qSHZnaFtaJi5aLiErTzJwPzxvWHAwcjloK0FmNzMqU0NnSVlbJiQuWTlRViReUV5LSUgseDFRVk82ZFhqcUV3QWV4c1JeKGVeaS9lIlJiQF1UWXI/ZiguR1ZTb3Q4eTw6eTk2VzVgeipTRmd2ZWIvb1lxN35nJEMuVCZQSW5ILE5ke2RdZnchdSpfTT5KZF1sMyNSSE9meUV9''@;'; put 'put ''VWxoXysuS1RKIlo7UHtKN3hSMyVIT21EcHRzdyVsWkBdaHkrPWBofWRwOSMwaT1lJmghKi5RM21ZbzdlL0xoL2h0NCFhI1BeRFlCfXRUIXxwUkhFe1JDMmZTZTU+aV1YRFZSKW5OQFV1bCosImA9VkV+e0FdT2BVQTxNRXtCKyZIIUpGZyZbfkZWfD55MihMVkBGX2ZVXXRdSENASSNgdShlQllH''@;'; put 'put ''e2k9MkZWTndpLHpLPUtrVXkqPi5+OT9IL0pEcTEjWFVrLnFKP2k5ZldtKV5hKUZRWUpPR0l+MFJGPk1PMU8ybj5PYihQWUNOWmcqaW0ibmsxQndFQG91cTE1VzQ9c2pOMFRRfWU2U3RqWV1fantEVGV4OWFDaC84UGZZZUZjYjZ6dmokTWJONjB2QlI7VXF8K0AiUj4/LzM+RjcrMH1mMXs3bl5D''@;'; put 'put ''THZzQSs3VyR2cTJ2IX1CV2JhPlQ6NjJRVD8xejtGek97KnkrN0UlKXAqN2s1dStJT2U0ajAkP3J5RXZzVVQhVmg6LEh0byM0I2RVZUV0Vm40VHxdS2hENjtdYFRsKyNJdjdHYGsvVCtjV0VnQG44SXtWWmxhLjkuYWlAYCl9QVl6ST5aVXBManh2MTlmaUNXVnAlZEcoTU16dyFPKSM6SmNPWmtx''@;'; put 'put ''dEk2Yz0sVUh9WEYsa19VQHlzfCp2Tl0mVkFNeyN0VXhFSGwrMV5eVSlBciIiJnohRTZGM3U/dCpdUW9EaiQ0QV5SKWoxNVcjcm5vMG4/dU1QPTkuPT4rUD1meXFSLlRnN15zPzEzR2Y4dSZzSUlZLEU0eFI4eXYiRE0xOE1Fd2wiS2QmVyRAYV9SaWF9T2J6U0l6byNfbmAuTjFELjQwdFgmcU97''@;'; put 'put ''TUhFUUBvYyFfYlREWGsoKyNJe09rUCRTT11kUjVwaVREVGpoNT0paUBqRSJuTHwsR0Mxe2I+aiU+KDN6YG1kYVdAZmc5ZWBoMDZBX2toeCVWcWlfMTUsRGY+MT88T2I6RTNQaVhydipqOTdYNEBGd1EkbzEhc1JbX2E9TEZrZVZDIkBgJDVZMyswRUMoKSx7aUdwOk12LmQie01yLl0xU2wsJkhx''@;'; put 'put ''UUZYQCswZi8/fHYpTXVmPVtvLyhgJUZrRm1iTEdUKmQ4UWBnYWVfUHZLbz9YUE5HMHZRJXZgeWVvaTwlRjNSIUFIVV8pMzYzN2dNVT0ubmAySis8eCo+PVJeT2FecWFoIXBZSE9oc0I7fSFVQDU6Nz86ISR3SDw7fkJbalFje1hydm9wS3Q5NC9KZDFoOCt6SVBTd1d+SSsoIipbRWRoU3M4azw1''@;'; put 'put ''KVIjdDp1Ild1TkBzJCkuKDxdTytrNk4sQmN4dExQRV4sJUFqV3piX3goO2g/dng7fixVSTZNZ35jOjMwJVs+ZltfcSwmZSVNKGdbd35UX0MvKl90bUxlQiwvJW4qSituY2x7ZTJvd3lvK09xRHRFLD1FSmVRJCNJdTA3aV5MSld3UzM0OXBWTDxWcUpCfE08bDEvTk9YejBXLClufjZxMD1LfSRD''@;'; put 'put ''VmBSPTFta1E3PXghLm5RPkIpU0w/Ly99KEtAVGpaRWo/cmk0aFNtMlpVQFRETj5mQClENjA9MkBIJVBRSilEdDF3QShhNCUsQGVST1NYd0htTlROSTRoM0F7Ry4/LztAWDNOOGU5MlEkRWVjMjp7cW0jdlYjXktdcWFORXgjUlB4emtHJS5rbUROcU9OW3psXVpXe2BfUiJAcUJYUGhJZ2FgeEVL''@;'; put 'put ''XmpzVFgjUHgmMyFxImtVRGlJVzRNJTZRYz18OCxlNmN8T1IuTitgTXN7JXxYKT19ayk1U3M+STBDJiVNOVsiKDVEQUV5PCZ8an4wKW9gJl18JCNSWjwzbzthRGJhQCNzV0pgUXZPLz82YVBGM0QqNUdCcjVTMDI2IXAvOzxrKG5dUDZyVGlDbEYkamY2VyV3aU1vZmYzeT9vL19WTCNmcSV8SnJC''@;'; put 'put ''RUg4NnAzaSwrPjxZPGJYcyR4dj1uNileNm1UcUN+RXdCJUlFfFNWNDFBOmdhPnx2LixzSUpKKkwhVFZPRHR8R2pBRXh6Imkwe3w1VU1zT313QFU+d25menFjNno5S1NWQUJDQURIfkB5UWxgV1hlZiskcTApNWwlfkMhNldtY1BpbTR2UHZua0YidzU/SHFYXU5HL3dwfEM5L05GWn1oVU1POm1P''@;'; put 'put ''a3RxOyhoMi4rODdVYUdORmY5Uz5+SUJURklMUFpKIV5vfTZxMWJpaHk7WVM1U0lRU01bbm88LDs8eURzeylmeTkxbWFtWT9ocmF6TXhtbT0lZmIqSWFeXnN8N2cvMk5mZGI5WX5iM2kxYHFvK0dFa3Q7InVEfTFpSWV3TEFiX2B1SmtFTXhuWHM7SC4jcChUQl9Ba1ZqOnZdTUBpOHRsI04oIU1B''@;'; put 'put ''UXlqJi5RRDpbZkRvWWdwKEM1PX0sPiZjMTBSfWMvfGU+XzRPVU8yYD5QP1ArQyloaCsseHddKStqOVVVaDttXk4wN150fnFEQ2xBYS5wX3Vpfm9GXTYyYyUsRHF3UGFxVlFHNXRLYjc8QjQuWUU/ZnpdJFI4JD1IUiVHWTUlPjZsOmhdXWR6OWJBZChaOlIlKGFeXnZfWSJORCNUMXxgcDpKRGB5''@;'; put 'put ''RnZpbUczZGFKZnxieS9UW2k4PXsrenVGQ1FXPTp0LmgyZGtrNltXbis3Mn5KRGR1Xz10IyZKaTAidS9JL28pUkErfkFYNSthO1hPQyFVNGNfJF4oa0o2Z3tDfHZkeE9QYHhTbFtmVFRRJnB3ekY6QiZGQWRtY1M5UyR3Vz1OZWJefT9VLCYoYiF1XjJnT3V8fnVfV2N2JFVxe2QuL3xWWTJJS08l''@;'; put 'put ''VElwITRNX115dCF9cU9XRkp1b1QyUkY5Qk1uYCw2QXthXlUrTzhtNSsraComLmV9bSE4fnxpVFVCWTFDPmBdSWtqeSI0Ymd1OiIuM08iYiUsVHVXR3Ikc01lYjZIanR1SiYzTl4iV3QjW1J0czNwR3I6LHlGMCMjdyVyRSh4P01LdGNrenZfTCkpYHB2VEowKCJhfT4lTH1ONGtJO150MiphMk8x''@;'; put 'put ''VnxXRWolejZjeTxqKjRZSS9CKV5SaiJlajVpUl5GXkpqayZWOl5GUmAoeTtDNXUqJUolPi5JW20yciVUOjc+O1FsS0JKRlRNdyQ0SklpN3lOTSt0PW1sd0U/VSpsPTFYbUMuRnozSCEsVmxJXzM+KjB7bzh1Pjg8ZC9iJiQkWng6V3BCJDJ3MD9kaDM6QlQhNT9pZ3hsKyl7Y2ZlbV96bT1Vc1hj''@;'; put 'put ''Wn5OMnBxcGgvJUs3L11bJnAuSTJealpeNi5GVSNDRUQvbElWSyNUZ2QzRS8qYkxePF00VTVbWSwsKlYhOER0T3NkVzg+KUBSYEloRCJfZGBsdFAmPSpifXljYz4yLl5lJn48XkRtSHhwezdCIitiYjZ4IVclTzBMLEJaRGFUd3wpLl1hIlF+NXBFOjszU2xae0BbaFRLPTw2ZEMmTHshMUtTUWln''@;'; put 'put ''YzhqdU9YNHsqX1R4W35gNkt9OlMiQXM4Y148JikkPWlqcWBFdDssYkpEWnchVE46dT5BSipEbmhbJVhJfnY8IXhrXnNNUDFnL1tPPH58ejZwYGh+QDUzaDlIKSp2MnkmYntVWDxfR3dZTzVhZDg1ZDwkKjYvSGNNRnwqWVd3T2p2b1Q3Tl1AeE0yKkcyd3p3cjQ1W0xIRktgbHhZSnpHQyV2RFc8''@;'; put 'put ''NUlvSFBTUWtGMC9dQzByeHVqd0YiNUxwX1AzdW1OPGNicSEpVj5nKigmazk0eFswbH5hJmVEei9hNDxtaSlbMj8lPUdkQSJeMTFIfCZ3UDphWChwY0NpWkk0UkkyelQ/fmZvNCI4bmt+ST99JWZVXm9jPSJDPElgP0EjcSlsLmY/SXFsV1dNcERRTithaH42eX5sKD55fD0jcF8lPFRDOzg3bShJ''@;'; put 'put ''N1QjfTo/RD5tTnYufjosakt9Kj1+aVQsTUBvXkAqc0V0TGwpRDlqNDsoMXhUe2JPVU0mLnVIYmViJj5PY2QzMjlGIU52cVM2XyJvW2klS1V0ZXVXeTw2OF5CQ2w5RTkoKigoZ1VKQWJ7WHBxU2xKTm94TF5aeD5NYSIjIm9CS1gxalBCPTlpcSQqd3pJeFIrMk87R0M1TiZJO0ZOUjlIcFJVZ3p1''@;'; put 'put ''VX19S1VkdmhGZGx7VSx1RyRLMFpDemc5PnxFOmx1eEd+eX5bcjhXYDZoWF1+el9HRWdLIkZMREtycU9gQk91QiJXX3piZ2RUKyV4KixKOiY4cHpodmoqd0AiKWIvOkU2QHZoVGBaSSgmSzxgc2xKUUhvJUpGYj87VE1pfW83Tk0lRERDNUYydmhIYGJ5JiwzcylSaCM7SyR6Z3BWeWIwWV9ESj1W''@;'; put 'put ''bW1lTVVAMV9PMUs4KjR5WWpsLEtZTmh2cVcjZ2BRU3RWTyJZVnZxb3B5VHlUajpZV0A3Vns9d0ZmcD5EJExdfFU3NXFZM1ByLz8oM3FXa0RyfXUmXTQ4cXB7Q0coXlohYTohQyg8OltxOnh3ZG9TMXVJaFc1fnhSPG5WcURmaCllbDU1Ykd2UzpSN2hFTm5rP210NDN4QzQlKFhbJj9WVz5MOUV5''@;'; put 'put ''QCh0QmdqS2I6bSk1dDVvTFVQfGFHdHUmVF18aVt+SXl7OjRPYW1MMVg4RDtJPkhmWHZQIjc2QGwme0M1T1tAN0hNVSlyKGdWeHtncixwRDhbc0xNQGp2aWVxe1ZhQ2lEIXNMKi4uPFE6PDwwfmNuLiQxKUp7SjIsXnpkfFFIIj97MHg3KmZHX0VXN2woXlMyMVQ4InB5S2w5Y2o2dzlIbzx0RGs4''@;'; put 'put ''cWg6bExTa0kvIkJ+PTd0dFBKWi5dQnBSJThRc31XPi8lPEM9PkpaM2tUfFdOeSRTa2YlPmxrTlhUSF9NNyM6Rz42cjdpSUdfVEY3a1YqJkRmdVhdUDRIPSorO3JlL318R086Wnl5byVJWSYzX0E0emAmVTdrOn44Y0gwa2NxJiVfbixDXX1tbVpMJUY9dSJNMEphMEtoKnUsK1pHTmxzeiFFKigu''@;'; put 'put ''XmlQQyUwRCRSIm5rPGdUXnQqOF5kd3F8Qlc9bHVAJG9uKktDOSZ5OEFYPj8lOiNec0FjcFokYGh9aiVBdmBfXVhkPHNgdihVaF1gYCM6emtoMj93Z1JFOSQ7TUZlWGkiYHFKI1NrOHc6dVhbfiF8MkUwdnhjYVp+aUVHeFNoa3N3WCZ1eHRfO3JybzQlI1dOanJnWXp+S1JIIyNCVnExSEUzXlBj''@;'; put 'put ''W2ZXME9rNk8sUkpLMXpHTGtDMFImWSpkbTp0ciMjSC5hcz9jKjFkI0oiPmAkPFNGTHI5bElLaH5FezA4Wk4/aVtQOSZNaGdGWmAqSkpOdCtYcylgaCN8eGE+KzZRcGd1ayxsYTtUfiZBejhAdmU+WFdDZ3V7ZnNfcmFiajY7YGs8SnlyLEZzSWgzPHNwMSFOMjhvRjUxIiR9X3IrJE1FVXU0OXUv''@;'; put 'put ''OWUjYSQ7JTI0cWEsJHFKJkp+UGoyPSNwcEFrWUtoOFMkUDZma01Aa2tBeiJxUnc6T1pgKmA1YkFeYFViI2xNbHRWL29GfXp+PT9SZVZJJGBdP1RuUXhbVit3PWUhIyh7IVRfOi9aV0AoNlJNO01tPXNWTDRTfEVEb3B2MkpMNyheQDRZJH1IP1F8ej9MLCJ7PHxHL29LYlpCKXwoN0JtfmJtWzR4''@;'; put 'put ''azFhbSlLNlBNTTF8cU51ZVpHMzRsUU8oWyZsXmA1Mk8qUH5HX1NGImdRTmJ+fSRgKHNKZ0VCY05BekY2WF1TJGRqQGAmVWxCelpaQzt+TD8ofCFCSE5AQmkoQykqKio0YU8pbG43azJ5aW16RmVdbCNuL1JJUEBMRz9pW0xjcVtuRGsyUi92TU8+T1tLMW1JemU5QlBgaG01cSpUSSIxSzJ9MzdB''@;'; put 'put ''Sy5dUkhKdyIrJl8rdjQpV2dhVnk+Jk5BVVB2KXtPQUZmSSluPytiWDM5Xns/YDR4OHpWV31LUzU7fik9cCNRZlBRXVpsSyFlfldIW21DbGNIO0o9c2xSTE4xfVNufHdGIWxKU3c2KXVnIzBaN0AlaSt9Um5JTz4qb3JJOFBTRUIzej1JW3djQUNAV25uYGptOT8rIWAlLy9UaFJLek9fTnpYIVRK''@;'; put 'put ''WXdfcCRkWXI0WT0iUktGOFV5NVR7QzUwQHlpUVhFIUImVVhQNEB4JVs1dEovNWY6eDUwaylQZ1o6bChmQj94d19VN09CP3AoOjAwQSxOckF8KGZMWWE4cD1VME1VVzx7RkVkTlt5MDN5PF9AaWZwfWBqKS8vUCMya1FsaiNKbCwhLkdTe0FifFImSkU4Q2VXUyEvSnErKCMmYSI2PSNEamQyS3Rl''@;'; put 'put ''cE8sZmI0NlY4Z01zNDt3d3kqS2ZNfkBeYklycDVzT3IsaTt+d0c6R2xaOi9JKmAhIyFbMnwudF5Cc0ZaYGB0KXNmcG12JlQ4NEE9QFpZS2osQUlxdyFyI0pCaz44Jm5SLjAwaiQ5YEsmIWciVVBJYUZeSj05RmNKKzhZN2E4MmcrMnQzeTJxKElqU3VjeVNHK1V3emE8PkhdWnomSFE9QEVTPG8q''@;'; put 'put ''ZSUmNFZiNzRaZlBzVyQ4bk1WRHEvRy59I0wwYzVfMEtGZS4rXUxZVWQxe05gNFk8X3k9L0pYXz11KDQ+QjtDUDBqMlddOiQ6dGA+WFU5YTReS0hkOU1ETHhVWEhJRm8xaFVVfXcrWEo9KFYod2VJNEZeZTxRcV4/PzR2PTE2UUh6TUQ9WFRDRipTMGR2NDhLfm1uMzZbeXZaZ1ohXyNRP3hVOFRA''@;'; put 'put ''NnBRMilFUipuKjAvb0hAaiMoemJJTkxkITZOYkkiRUh1Im5wclUpLl0uajQyP0x3aHAsPkZqWntuNWFHZCQ2M1E3ZSNUIVRpVE9PWnAhPnBQKDByZXt5MjdRNl5zLlV0Zlg9NU5MOHsxTTFecTAxXzI8ZXU6JiIpYFlKdHAmfH5DUkMkUTIsa3BLP2l5JXQ+KF5ocT9rfV5DUFM0b3JjJTV8Z2pj''@;'; put 'put ''O0B4eiw/VClPcV1kej89XXJhUVZBIVU9NzBVODkxZWd3KXx0ZSM4OSI7LjxNazw5b1J4ZCQvdmUsaCJQfWJaYzEzTVEjVTlOeyUhPyRVL3A8S1IjIWI9PUQ6O150ZmloL3Ffe1Epe0FqK2pqLGoqdTxuPFIpNVBSekJbPlZgPWs0a0Jva1BvWW19fW1gUDpVcX1eNzZLRmRSNHNXez1dLDt2Uys6''@;'; put 'put ''Pmd6SkBMVlhQbWdQZF8uO1N8bm5MO0d8MEpjMFtqWSZjK0JDeGVofFRCRzgoSnhPNDVpPW8vdTM/MWVRemRSKnNJRko8MyE+eXNxNjxlYWhTRXxIMzZYaUprOmpDOW52djdvMyFmPj9XdDZ3Kk9falkobytCQ1dCKDJqLDFbIi9qLnl1dUp0a0ZBQFUpXyQuajVMan1CX2JCbGpsMFNgcEsxQ2JH''@;'; put 'put ''I0hdYHJfS11EKmA9YjQxVnB+YUwwM012Inh1SmFeQl81b1krWms8RSV5SnxSJmA3Lkg1Q0tZal0iVyhAaylwen0lNmtUSX1TPSlGaV5Yb1JsRXVmenNoOHhpPllOcnUhTFRPbVsoR1tUJCElaSN9WmEkNkkydysvKVhBYCIxbyVUKV1BfWM5cnRRW1VsTU02cWwrMU9IIUs/Y15peWQvKCxPMUda''@;'; put 'put ''MlFfQVNFfXskQkE4YStRQFFxJEVJdjB1RVovMWs2bXpUemR5YWFJXVteTHgiaCh8JlFMaUcoXj43KTVyPTFUeU1aRWQvbWtMT2hqK3Q7dDZEJFJ9PjhpIlE9dXk9M3BeXlYpV2sxREdqS1l9UTtdbiFtWCFCJCN4NWckI3RUPilYcHFoVzJJVWVRZ1pddzUxe3FxYjpEdmc8eWQySHNPU3ZtPFI2''@;'; put 'put ''Pi9vamBFVyttZlJCQGE0W1E0Jm0yZlRIcSlsLjhXaklbUGArPW1pT0hXJSJqV25mfXlnT1c4VUNmfXhCPXcwIyFwQVM2JX1TbUcrbmdQR1h5XmlhOW99LmgmWiJFTkxkMkJ4Rj1HN3pQUFB0c1VlblYuUSo2PWldeDE8VHU1OnQrY050O2tlLj9TamZ2fSUyYWRPZXAvL2tvbD5fPzBIKiQjZEQ+''@;'; put 'put ''OUMwaTp7fVVKLHd8Pkc/JnVDJEdWJDI4XzYleywzUiEjKXJ3ZDxPL2Z1djV2Rls+SmtwLyg3L1hKMTpXYWpvTTpdUFlleFhHYHxITTJJdFM1Uio4TUkyZHY3UHgwWCFZfXopeDswcCMjQmtmYkU2Szd4K2g5NF5qKn1VK3VdIWM3NnoudG0jKlFuZFVqNj9SOVdYajJpVTNdLD8vdWM4aCo8WSNS''@;'; put 'put ''OjVVeEM/MGBeYC9CVzNlSnZXL0UwPz1RQm8uX1RdRT9QSlR+JH51PX1uQTh6VzozJSJESStAPjUwSXtnYCJBR3Q+Pk4zUXVIeUA/dSJGMXd8YT1HZTtWOkhMRFY0MEZycmQvRGFiVz9SSERkSCIocG9SRnI+JS9OLDtgTixFbStlNThoYj1PUFh3IkpVeDssa3V9U19uXnJhT0FqIklLXjtWRj56''@;'; put 'put ''W1ZNc3k0b0wpKilHNjlxfH1JZiFsSXciKT1INEN+Rz97fjtSQzpRbjM6LmxkP31hcmJFWT5VPSJTb0ImM15YV3dNI1dPbishcyFTTntELH5XIVldPVtEezlkcyV7ZDxaczZLdzo4Izh7P2w/bThsKTd6bSUrQ3ovJEdTY2wuPCFgXyQ6bVk8MXB2WlpGRXBpMnR8e0tHWHJST15ebEojIm0vLiti''@;'; put 'put ''MUV5QUxKfmRDNGN3YVh4dCJqRCUsN0lCWmxmKTVuYTY0dE9vfGREMUluVlBOZDs2Wmhha0ZvaiN7cD8mLCgjSG9uVURQX3xRKVs5Y2pKR11dPGY7UFVWQUwjcmVsfG4yJGtgIT48OThwYkhHdnw6dlpOVyVVXjBAaClUdmZCd1c/RDJfTX5ab2J4RGRFWU8yIy4hRmBkWnd3dSx1aF4/V0shNElE''@;'; put 'put ''fnAqPy45I3MsX1leVmBAYGBHcERHfT1WeWlQYjp4aVJEUC87KywuVlY7LyRfM2RfQjMrfip2RGlYQk91SV14UzJxUUN6Y2E3KyErXkRvdnV6V3g1flRQWVYuKyl1amp3TmZeR09QZGFiTyp8SVdufDYmPkFIZCphTlM8QC5icDlvTWI6ajBtNjY4R3dydzBlSHZeV1s+NnsrTz9HWFlXelliajxH''@;'; put 'put ''VVpLJTBBYTJrV2d6UngwQ0szczdVajFYUXFDSWdsamtubD1XI1d5TDVyKD9iIXc2Yk4jRCpmQ0o1eDZVcUp6Rk43P0s3VSl8MDlsRigsOk8hZFFQVyZje3xkS0tWeUo3XkxDXmgvfT1nSTdQail8UWgkSG1jP01CIWhIKm5ESWJ8NSEkdmBgLHw/UDQxYkxmXnxNbHo3biROJSRyVmJSSzImX2RQ''@;'; put 'put ''ZUgwW2B2NS48SGkmZkoiVjNHd0RDK0lxek5bY1s8THxdfGNjY0ZWeD0mYThXQV5jQzthJj9YVmV0S0BJPHhCYnB4O2h0Y25WXWM1eCh5PUUoKHNePEVxbCY+eTBOOWpAaVkvVDg0XTd5biFAMGwrKHhMXVFvcHpeeGJleTVQdUdheHohWDh8dikmdjkzWHhuUi5OTDZPdiNRMHxENyhMTUhBIWdE''@;'; put 'put ''bTF8O155ZUsmP1hiK01KdDUoNDVsdlQxL2Y3fTVxIVIwZVNpeDNVL0RQYUJTVTQ0WlFPekZrdFt3TUllcTZCMSE3OXQoaWVTLzQiUWBgfU5yREdyWkJ6XjdmRSVfM2A2JDN7YTZUOyNfd0o4ME9FZEl1RUUoNkNDWlB2KC9lb3Q/bWZTUEpONnJYZWl8SW4rMzFRclt2IVZrWU8zMGFQJV5CMFdv''@;'; put 'put ''R2N3WyRHfVorREpaUjJ2JmJtSSIqRjtAMSxxXygzZVVZRDxQMlh1SnAxTVVAdFZYM2B6Rn15UUtPOkhLOC9Oa28qWlBzeU0wOUhRVDNIfSUpbipCN1FZT3dqfT1XbUpsbmZzUVRdS3hMQip7UWcyNU08dil7dzR9QDRYeyFxKT1DXTRbYCpDTEZTTGB5NW9Pb3xiWDxqMVhEPnVwSHguR2lLXz5b''@;'; put 'put ''Q1plfV5AVHw/bjp9JiFfUFpIOjIxRE1FbWFyKnxHfUNuRTVYN3M9Qy5bRCxmfGJpRnNYLFlTJmhZaXduYE44TTNTeigyQFh0VVBWT3U1KHgodmE6JUN8QVZvX2FYa0wjWkU7VjVVPj0uYnMlPjxRe0UuNVlkL3llJW83Q2YjNmJvMmAyPWJiVSYlKjhwcjYuR2F9fGx5bERFTiJ7dXBEZ1ZFJVo9''@;'; put 'put ''bkJ8fUwhfTk5NXN7dVtFJjJjei9hdGZTbDtvXjUsJkBfaUZISCwqQG5BXihfR0dPfjRXU2lVbTQ1cmlTZ0IoI15IKVJYSFVtZX1Ud1JbXz4la01mQGo6XWt+YE1fT1F0JTFXSX1vP3QwblpQY0hnK0cjSihpSkBrUlU/bikxOW9vc0lleE1pUUJQQ2gqdnpJTU92T2IrbEV9YXZ7OXNZJmxSSkZb''@;'; put 'put ''WksrIlNUTWs7Rns+XVA3P3JOQGZPcjN6Y2pYPFAoTFZfciI3MCtVTmRdQmlzMD9oMGRReiRqQ0spLyxXNywldTB6d3Z5dC8+aEM1XjdoLDM/NiJaNFpOTHx7a0x6YVZhYCF7VXlsNjMkaDFnbjhnYF1iXVBjV1VOWSs3Xi5pJSFUYi9DJGNTIywubERqUj9LW0BAVCI8LlAvYDpVa08peSg9RUFz''@;'; put 'put ''bitbaGlRX3UxbGt3TT9gIkZlaV5nfHhKNTBhOzE4LyM+filqbWBXYGxfYVJ9RSgxOC9fbHUldzVfImxPUUg1WyheZSlSOEJ6I2B7Y0NhKWM/SV19VV9FYEAvMWUiNlcqVHI6KTY/c3osOlN8P2chXTJOQ3NCfk9EUHsrNmJBbC54ZTtAfVR8Q142dCYwelF0JkV7MjZnI3Vjcix5WCosJlQudEIq''@;'; put 'put ''e2trekw0Nzs/TT1QVmJaQkl0ezZyYFZXPF5lfHcjRTRNUTxsUmVrUGg9Nkw9ZXAjSTgqSUhXPyxbUXZCLkhWdkc4QnEhfCYuOkNCdkVJQWZhQndnOE42KCZ6Yz0kfFpaXVZNSStNK3dvNlhmRCY6R19YfTpbYjhzdW9jRTdpdWt3TGJHcS5ZV0RjLyQ/LmY7QilRfipEeWV8a3pvO290a0chOl5E''@;'; put 'put ''dDpCJCZiIyooWkhmXi8saDJCOkZLRXQhOzRrLnl9WDc7OjYqTW5xdHdhTVphSypIVTMpNUYhPCM8dmEpZiVlO1sxaGlTTSNLbCtlS11sSGMzNkNxVVZiJkdzdkE7dilCa3hvQGYrUVVdeSFrdm90TDxfZnY6S1hSIXNjeitjYGdhV1loQHslVXFTQmptKHx4dj9zKVlTSHV+Lz57U1B1JTo7OSMl''@;'; put 'put ''ITQuOlIxLCFKM2taKHxDI01PSykrIU5nTWFaTU9nXn5sU01KamVKbUljfXAkYCo2bileM3h8UytZZHR8fDp8KFYje31RLk9hOShqWW03Q04jLE44Q2tAb3ppeWt1UEJxZXoqSCtFP3BmVjFpZVlEO1cuZFJsQHc1PDx1aDVPP1h9MHB1NEtRL3x8OEthXSQwfGZ0Y119VmosLzFFLipucTp8Uj1E''@;'; put 'put ''MnpMVndLL1VWP2UlQy5KQ1QyPmhFIy9RMm9BRGBkdEgsMzlianMzO1JDNkNAd25wLCw9TiVrXiwjOGcjfClyOjFYaWNoX2Y2QzBDMCwwO11XJUVkYSZBZCMvczlJOjJdQCFrWDMsfFdGYHU7djhwJiQzK1MhKTF9YEZ7WmNuSjNoOXU5REF2T2AhXmc0TjJMOmpLM3F5emNmYyo5LEthe0pNTEVE''@;'; put 'put ''PzhhUk51dmgxNzQ2e2s5eXBwd0A5PHJVem5MbyIpUTooTzpWZTcyV317XSYseDNSbV4jZltUYXEsPVY0UVVePWx+QyVtZnU2IlF1KlpWdSZMTnJmL1YiSjhRZ0kqI0NBOzkuTVIoUDNGMXQjJDliQ2c4QHY/RE86OzpSLCRsR2N3X31uOTNEP2QkJUl3T0EkTUd5VkdiOGtPTUNbUXJ9fkFFKjB8''@;'; put 'put ''eyIua1E/WW1QN3o1OW5UQylickI1MmNxTHdkXnl9VWFPNGRvNjVsT1o3cW9NZTV9WSQ9TiM7MHpFcThNOkB+c2Imey5raThzQ3xicTRKbExKJEI1P2kkYkAhTjtjbn0rXywsalFhfGhWUF1bLzVHWm12aWJpL09uXVsyWjgjZS5NSDFuXzYjZkdNbi5WfiYlK1N8JDEyWVsoSitmVip5OShOSWM4''@;'; put 'put ''T04uTiYkJGZ7Z1sqPyhFLlR1Mz0uRjw/SV4pSHUyQ147bT81Z0UvUXtxb1RuMnksZDw3NDNZaXF6NXg0ZXM8SC97b0YxKSFJSyF9NWppPShYN2ZWUGBwWFkvLks1VHt0ZV5hUj9rbi82MnFWP35JWG55Z0NtZnY0Iz9BJChoUC5WYkUlZks5UGRmIjRmRjtMOS5AQmRbYDExZ0ZtM2VtX0FJKX5Z''@;'; put 'put ''Uno6RDI7K3NFemZvMDlWZFQ0ZTpCJUwySUk8eSpBNG8/JEY8O056c3U6QzpNLD1kdlMvTXdFMWheRipeOU5RL2U2L0RMcWdVZSspXl92Z1MxKDV5VU9PezM0Jjsjdlh3O1Q/UkRFMWxNaFIkN1JPe04qNiV+aCl2eXxbQEUkbX4vKUopS1E2QjF4ZiFVKlNeN2ZoeyVxMjhWclZEa1NNen5FPkY+''@;'; put 'put ''b3gmY1VCbS44L21gUTc+T0wjVkc+MUpEQjV+U1RpcnQiaj1Mbm5qZTJxcWFDOUReY1QqKSxXJiZuMmRZMjIqfEF6XT46PntOM3dELkBxN0UxJVY6PWZSM3g5SG5tPDdKQztDYSJtc0k4KyFUR142Vj8iZlgldXlXYTAzUFdnVX1OSyxuTWA0Yi8qYXdOfHEpTysycCxCfnt9UUd0M0piJlB+Wyhn''@;'; put 'put ''ZTpoUnckWD0yOy9uXXVVakhxUC5COzJeeXZIaXxaOFdjcn4qPzd8Wm88U2x+U0o7PC8sLHdEVk82SDQrb18odGIqc29lc1Q5YypJZ0NrOipNI2JHMDNST0xfL19YNlJLciowImpuYmwsU1N0eDE8fTMsVF9fNzEoQUdEOXV6KDxiL1E+bSVHN3d9USlyM212bVh7Un18U1RGMWh1JWI3Rj9YNTdL''@;'; put 'put ''N0NeWiouYmdtOHNXcTh6cEFvQVtzcmI1Yz4zMjdmQ2kwYUFYdmQwKFIoczFWPm5dVVFiPiNScXtrQj01VUh6KlQjPGU3Y3V9dDhPaGpkeEQvXl8zfWR9Z2RbP1U1PU1xOjEoMVFYP1RvWl06UnVbXSs/dHhgOFIoYWE7SHZTS2REaEpyY2BfcGhkQn5vfFhpN3hiN14+b1ZkMy9qRzhfSjJHSW9M''@;'; put 'put ''NHQzX0YhQE9PVDlXNCgjKTlmUkBgYFhwVyZwYj9GO0IoeVl8V2R9M1JAM0N2UH1ycW59P2N4a3MreHhROk1kU1BTNipHWWVHZCFHdERRaWNrSzQ6YWthNUBRL1RHdXImOVQkQzZLMEVxOkV2Y11VNykoVEJ9PkUyZEs3fip1bTw3UEhubSU3UUErOHovK2l0MEt4WFo6eTNUIWZ5LmMoXzFIL1U8''@;'; put 'put ''ejlNVzNjOz4lRDh1PiVqLlVLaEcuMklZMnZKSjpJTnQ3RTpZNE9acDw5b0RSJD06NDhrOTdjSDFWIV0ud1E6V0R0eC9RJU1nSlIvUSRmK0wySjRwTTAmckx6QzZKfjQ2JX4jL117W01hRjVaYnxub0ptNGxsdkN+anB6dD5zZXAiY2RRPmNCNlsvc0ZnL0hZP2leejBFOWReQHZTSipCSUx4U2Mh''@;'; put 'put ''L319Vjh5fWA5ZlFyRUojYTE1XlBBMlcieD9PSFU5IWpFc3tEPUtnLDhmcFllMyZ4U0dIRDwpXV9TVU0oQnRUaiFjTCNJdCU0X3p9YTJ8Ml9mcUx6WipDI3ZJYWZudGl9KUZzSzZbOldLe196QTddd1I0P3JbOC9sREJQY09Xe0tUaHxtKlN2T1MmMDQ5LCYxdV5wYkRXQiJfdTMraFVedSQ9dXw4''@;'; put 'put ''bHBMTy9Zb1hROCtTaFN8RDJETnd4ITZIWz1EZ28wejl5STNDPWV4KixoIUx8dWksYVF9QkpqS31Ral5pNzkhcjdmUFs/Ty9wI0ImTTh4NFUsdGwqRDN3ay9HRjx0fDYoNUc6TTUifGQwRC4+cjhdU2FtMUtNRWEuU3EzXzdCXk52JVtOSnBbSEJHdiQuSHsjZUtEenZ9S3JscD9bblhPTU4oTG5q''@;'; put 'put ''PzBJR0VWPXFnL2Y6UGIpJXNHcXZTfHEqNEZzLmZ4dFhuWTZFbVEhW0RtSDIzKTV0OXAodn46SVBIZlllazIwMWd7Y0p2cDEzdHZCJThsTF5sZDFMRkZGSDY7dz44Z3ZRQGU7eGI6QXtPKUNEbChXN1RqTmV7MjM2MFlYMlk3VlkuO2lwLEVETm07Z2xwXSh9UTkjbWthOFNKQlQrKit6RlFuKSk5''@;'; put 'put ''Y2F5fE4zQmlNaCRwOFtERU8wJXRrYjtifV1yIkt6QUlxSj1PJWxrZWg1eHZVPyIqal0sW2BKMVIzRHo4Y2wzRDh6ZnRXSTJLa0ckZGFGbGl2JCx4a0NKbSZVezpyXSZ3O2JiNW1SeWBgR0srQjZ0cHI+JkRDcmssVXZCfShgKSo5NlApQmckM0lxJGA5WjE6NXVzRjhsL0cuTn0pSUBdWSppZ2xa''@;'; put 'put ''VSU9aHxRQi9UZy8kU3lqfnh1Tn43SyN8c19EcDA9aFdObnQmQjxlckdNcylrY2h1dTFgVXRIZVhwbkJ5YzssYnZeVGooKj89UnlebnQ9JXhYXmpKNEhiKW15Yk5EI1MlPzJMLmo9YGlsflEzK15ZMTVgYDd5NnwmY0ckbFIoYHE0N2dkZ3xZQldWOkEodG1+Y0NhRzY3L1FaKT1NbWJ8ITI6JVl4''@;'; put 'put ''YX4+NipQXXEvXyNvI0BQLlRCP1dULzQrQyF5MWZvb10zaHosWkJianN7KStePHszanBvT2xmNE5zXTw8Ri89fHpAQypjdHR8VyNxRSxGfFpRMHQhJFp+ZVY4YnhjNT4kQ1BhInRFcV4lIyE/KDsiVURuanE+dEYwWU94MGxSVHMseikpXnglZD5pMTQzRXROU0EkP3IkcFFnc0UwQi8kTTxGfVlZ''@;'; put 'put ''dC5+aG5vO0clR1dqL3haMSpCZSJqNnVsZXMmUzg8ME1uYSJffWpFfkF6L3UiW29+RzAoJkhqfDA6OUR3O2JhaWs7PmpZbjxUTnlONjsvNTJCPVFWYW5bKUIvP1FoekcmNS5XO3FMd2J5Z1F4WjJPO1NSTn1BdjpJTS5YLDYlXUhmXlZ4TGI9PTlVd0ZwXkw/akhlfVU/YT5gTGJ6ImB0bVRjMj0l''@;'; put 'put ''OmwucjZmMiNmWXVdY1YoQ3JaODBbYkxEVkl9MUpSLyRGRkwoXipPd0pPP0YqeVlTNjNFd0tKdnpgTld4SnRuckNnJmo+T2tnInJEb1p+fHlWQ3gxMltjJlQpTVtmcl86dl84MFJ9UmU/VzBkdnY8d0QvMD1yRTxedk00ME4wZz45UUBGO25UWGM4JUVCRT5hSTppOEBsPU5TLzIjQXM1NCwkcU9o''@;'; put 'put ''WTFNQjVaYHkoRVVbL04lL1EhemRsd3xTP3JWSiUzfUY0eChoVy99MUxWYT1FfEJeT3VgX3l1cztFOlc2KkdmLnxEPzRgamwjPyQjXz5XQ35GU0lQUXYuOERNLCI7KVg6X0Y1e3s0ITlKX29PY0ZIdygoNm5UZ0VmIW8+WWlUSVVwLiheXW97VHdeJWlXPHFfNzlxQVt9Qj07fmhdKGxYZmttITs7''@;'; put 'put ''bighcmFQWUJRaW4yNDZPQzRMYno9eHwkYld7VVFyKEJsJjExdWVsdklXUH1VYzYiaThLKlFARXw1K05SN3I4OkdJJEhOLGhgTm87ZSo6STRKSG4iVHNMT0c7XikqenEuKnQoV0gxWCpaR1t1OXRlPF5yeCxibz5HT3dEdixpUj9lO2U9K3I3c1NKOytuQ111bmFVKk0/blVSOnI9M3pjfF1RcnFm''@;'; put 'put ''T2BDMyFMe3UzdTgia1hlR0N8UmcsREAzSGZebEVFKy8wdGhfV19gPFpBO2R3P1pFO0YsQjJSc2p9LnAhXUtBPWdAZkopI3A7fWZIOl4oIilOfEosRysiT3ZEZjpoYURzMjFpV19+U1UpeT5lXjJHUGNIdTZyJHg3fllfVTpTLnFvdllHaTlMWXhfN1d1KVp4I1MyOkhXKkFhKDYzS3Z7XTNTbUh0''@;'; put 'put ''NypOVTxmbGxWZUVgcWBFe3ZtYzlWWUY1T3pjemhAO2NvMEZgSVtFezgvUlNmPio3altPc0wkcVlfLy5jRSZgckVzM2xiZy9EdXldeXZEPT57TyQ4Pz18fCJPI2c5bW1oRWpoMSI8Z310SjJDY2N4eXMubWw8Jj1IWzBQMi9uZ0QyLnQxezhvIVRnQCg2RiIrJmZbJmJWNF85eH17VGQ4aFt9MjI9''@;'; put 'put ''KWE2LC9bMDRKTEx7dDpEV18xOkw5IUU0N2xbMy4yS14qUEklW044YFQyRT53a3xbRHkuWUIjISVLZks8TVE/Qk5CMU1pTWBDPWF4Zy5ENlA9YlU8Ml4vYl9EWSNmeHsmKWt7dVBaQF5IMTNaVnJZSHFjMEtQYHw5YjsrYF42by4ubVpYVSJNTjN4V15PWkRJMDNjcERtbFA6bSlwRjpFRkZQM0Fn''@;'; put 'put ''JEg3dEl3bW9Cc3NwbW1tM15lJD94OXtvdiheUUNHe0R8NyEhbU4wUUZAcFZsRVljR3FRZCgmZERkaDk/ckNrTk5ibTQwPGVqXkcyJHx+RSNbXT87Si87fns9VX1fRzlKUXpwaHt0Lk5jbkdofV1JKGIyNzBbdjlJbHtMJEJaLF9wPSwre3AwLGtANkM0VThEIWY5I3RtO0QhL3hNWWZyTjJRYD12''@;'; put 'put ''Lm5ifW9CYCQ4Ry8iTXV3ZyQmYWp+QT9xK299QmVjWV9XcU50LmhKZEp5akIuUHB4bV5oeWgrbTIjQmpzUy5ncmNdVytCZDlVSWlIL0VWMUUoNHwyV2sqYS4rUjtEZnovKUVGSnRCeypIfFh0biJARnxITl9eJGxQNWFiYlRUKyl7KWMrczpFWH5gfShsJFp8ZlYhLylmWV1mV1RzflgwdEIpYXUj''@;'; put 'put ''QzosOlpNQGRITyl+SyRTYitiaWsuRSkuJCw8YSRHUnhrVXV1eXZIKnFFeFJnTU1JeUtVXnpjPE5BPDJCMF9XJFJrdT84KyVtU2hYSmw1NlpdckxVKCJRS2wrUzEzNz5tbSp4aUQzW0M1dGthOyF3VF5rZDkjTzdPa1F1WkhbTSF8eDZ8R0NQMSEpcVYkeF1bOnt1YChHaDYwJjRdQDwyNDM6S3pH''@;'; put 'put ''ZVQzN0FeUFUqcWN5QGhhfm00MUpXVVRrOTZBZFJdVXxhcTEiXkRCTiRjVn4sZ0R1UyowWG5KWHwrd2BHWmxAP3BJLyJ6MThqcl1xeW5NaXVrcH16d1clI29ie0FSWUJkc31HODN5MERWeTFzNjc3M1tCUl4oYnE+TEslXVl+OF9LSHZ2bGJfRDI5Wl0/UzJPemNJX2ApQERRK1sjImszU3N8Xkxj''@;'; put 'put ''aVFZWn1bMDxDRylIQT9GOkgzTStfWW55QENJLnRWISUlYy4uT1VEWT99eDg3dj5eODFAfH0sK0Y6TS50fEcxRFRIIWZkRG48RjxZM3s3YXk1V1YqVnxoeUlHOHRUdiZ1d3VwPyglYm90KEs+SW9dYEdiekNrdEIuK2thOmBUTToqc2Qsc0l0LCtHPXVTezhnIVdfa0svdXJxLDFeKztpaz5+TTRR''@;'; put 'put ''OChnVCM1R2xbSCtmVDx5c015a1IpNU5SKj9NakVkak5mVHFhQkxRNmtHQzpdKWV0JVM3Q3Nmb0VYQ30ofVd6MHV9Sl44PnpSR0ZSZElxPFBWU1M5d0w2TV5pczkqZUphM1FeYU0uJjxmITlZPDw4IUhpa3pJRFtfJEgucnVWRlBsXUlWdmFCblk4Tj9NKnBBPVJdd21Vd0MvWyZMRENFV3Zaal4y''@;'; put 'put ''NVl4IyhWWVAvUkxYSn1dd1s3djhqcD07OnZJVG9JbmVySDI5IkE4fV1WU2I3bnUxTy9EIWxWez8oLmM4cW1zeENBbjc0Y1IqWk5SPiFGaGRVdiU/bnxLJntgOWVgNCJsNVNPJCghPSQ4OExpa3klL1VsfUshRlt8W35EKUIhaFdCc3xLaShwbyhfSkBDIU9DKXVvTGEzeEtvXyJGZWUxO0hkQC98''@;'; put 'put ''TXxxLGgoUWcmYlg2MjcwVjN3bCFRNG1gZH47XTM3Lm14R012dFk4MFZ6ZiNAJm1edDRTUDtpMlc4WkR7OTQvc2xXW0RJN0Y5OChyKGN8ZXZ4aEtId28uPEU2aWV+aChKKUxFbHovO3hVQ3YpKDdWcGklTVVedStzOXI3R2xXKTJJVChwM2g3YipOVWJieSM3Jn47ZEszTUM9JnQhI3IhMDB6Vl0s''@;'; put 'put ''cChCVC40biJdI295dH5rNn0pQnIvcHtIJU0jXSxqMmxQWCNkN1UyXVFldGFVY3grY3VGRlV5aEFUL0dfQV91cXosWUYwXltnbEhNKVc0U3l8ZXxPTXhxNypRdi44aUxJO005NmY/Iz9TNz9nN2g4KjtYUntjYUtkWTQiLlRnUW1UTEtdP2VMQkRNcEdEX2RCb2h+NzR2OUNuYXhxNSY6R3dASEhX''@;'; put 'put ''WVE4d1NodTFjezUuOk1JUEJsdiJ5ZlRmdHB1YHNuK0pxLndLWXEqQG5FQEd2SGwqVDlYZj9bJUhYdl5pUj5uPmwyOT8qcHNeKnooQU56ejtTODRJIXdBYGA2M3NzMmw5TnRYY0whUmtfcjljTE04cChLWW01cD0iQXg4TGlqRmJdcTBuQ1g6UEhQRU8kKjBifmpHRWd3VlMzNjtRYHpEUm0jQjZk''@;'; put 'put ''JkslVnxzcmpBRzQ+W2pHNVp1QW89ZHc3NyRIWF13WEI6QztUMGwhXTMqV2piVXpIVzphMU4jK2BwdiZbWFM5dGhOMVVMO09SRS5mPmROaXpmXlRjV3FRNFdqZTFZdTx2d3h3WEtNUDhRXVRHbVUwXmpVZjNCaTpuSiVBXmREKWFubDg2O3RVQ0RnKmtOfGMpbjBeLHgudzZNJU88WWBaLFYhZWkw''@;'; put 'put ''NWE6RihTOl45Vlc/NUJMQyptdlE4JU0lKiY5YGM+OCo4WkMkSlFJaiksPUhiOXl4aXQ7UVZqSjFEKi5MUlAlRS8uKlBUTEV5KEEqMkRTNSlMUis2XlBib09DRjpjPF5tRGhneUdaOmcpczJ4Qn43dU4+cDEvS2VIbXNnSmI9cz0jZGVAdkkodE5LVm5aWWt2LFJiemkmcz5XRSoqKz9icjRQWkRk''@;'; put 'put ''Uz9oVi5HWmVlemB7QSZuMWYkP1psQTh3Nip7Rm4hI2NUcCk6MlBiaGVGKXZ1ZmZ7PWtLWTJAWlptPnNSVm9OODJGQjlAW0p5Z3EuU0U9Zi57alFIZ3hyWVBPTywlO0JKZixRL2pRcHwiYUYlXkskJSlfaDJ7RHZoSGhQWl1Qb0pKZ0dCMkVaRDl2Q2lfXjtQQkc5Nn02QXl6fHpaNEsvVkR+SnZQ''@;'; put 'put ''ei5wKzBfSk9haU9WUn5zdGtEaVchTV11c1VNcXxJJVBZY0d3JCNRNnFnZWMmN2hWe0hxa2IhcTZbVzV3I0FkKj1DZ0F3U0h3R2BVelA7VVhPK3NIYm1FL2M/fC8xaWZwNFFPcS89KS9QUHpvZ24/KS8rcjBVOShHWGdjZ1A6NS9Qd3Y3b2I7fnE3RjZMYW00NkVnbX4qfUoveHY8P1taWnNUT25Y''@;'; put 'put ''PnUkNUtvKUlIXVpTYEJyI3RUKGkuSm5KLktmT3ZgKjpLcGYjXzBMPWhodTYzIkB5cmhiPVhdak49cUI3dUxCQXJfKXxOVDxCbXY0cCh4Q15mWD09Vkk3PFpaNUVIYWY0clNnTCtOJF5PbmgkfSRyeHtvNnlofDl9IzlpKkU/ZWFXKG16fHtzWkolYXhNMGJqeTJdNCNlZDlNOEt7YktkL1sxdkIk''@;'; put 'put ''XlhAO0NRS15fOHs2eHZsZV1QMU5GVWh+Ri9uezppUXAofmVCXnlGSkJsI2g1c18mIVo7dmJUXjR8PF55PnxWfClsPGkjWkRqWmIqOWdZfFlGNmIlTXl4cDlsUzNUVlpFLHFvUEdMXmZwcHgvYWJROF49UFJ6VVBiPSF+RldsMCRyUkBoejZ6Zy5FdEAjQCs9fUcrInByPnFfPmpieHgjNFtwNGw5''@;'; put 'put ''P1NTKF5DS2h5OzJ8Wy9OOztkYVB3RC9ZQk5nMj5ScjtTUl1jcDZJZSR6enAxVFd+W3F9X0UqI0o4MFZke25TVEdkKW1FY34jXTRWbFZELFduTTJsZ3k/VHozLld9NE84OykxJTlxYlMwKFoyPmY3OzRZY1tkXSolcWRpPDA1MjExUUZNKzdpdCo0NUx6Vkp8cEVMbXNtPTtPdmFqYnV4YjA2QENu''@;'; put 'put ''KzluUTwkezFKdUZkLzxrNnskZ2dOIVR1SiJ3T0NQR1I5dUMxKEIoN0hIJHdNPTM7Kmw+aDEvKjQqVFFmbDV5Xjgsa2ZbaCo1ITtySG9sQXd7MShrdkh4a1dYRWFHb3spVCw2KVIzdUk0OWo6Q1QpX3JkfkphelVkYXg1aUI3OzNxfSVJYjI7Iyh6SnB+U19lNlNAJTd0Tkc8JE5zUD1ZbGBKVjVk''@;'; put 'put ''QEAwV181TEBUPjZMRkFTR3lBIy4zcTFiTWRwZX5oTiVbLFB3KDJMLk5wVWlRcXxgK1I/N3Z9bjc4ISF2W3dFdl9GJjdtTjNFQCgxSFVfd2daRz98QHFve3xXYUdAKjY3fUxVW15nMShybltzenkxdSR6RWNdaSk8WkU+b0tWekUkW0pYVW1hRHVvJT1DQD00eWF+NEosQyZyOzFUdyZZQHdjXXBm''@;'; put 'put ''VHxobkdmLCxgLHBbUkRzJUZhOHxWRE1JTExdPCo9LlNBLn1FUH5kfHNuYDM4OGZdb29nJEBfNj16R3NAaDheJUVNSFRlfFEkVDRRZmJtPWkiOEYveT9KMUR4e3laNXVCOixpb1lFZTtIYGBsUSUyT2pARllANTp6JCV8JEZ9SWFrcUUjaltxWC5laEtkNkhFeWM6V1YpeDZfKzMyaFIpaGczMGhk''@;'; put 'put ''Oyw6OzJ6d246QmhKejd3KShVQ1FtNiQpITl4LnJvNz9lNS9AK2lVdy5Yfn5qaz1PREdXYTMsXmwqTjA6Ynd9RVMiXTxrWkFgN2t9bGZ8ZjdEI1c0UFJOfDRsU1U2N3lfVFlDdlpMUmlAfVV2MGBVKDV0Qy49NldMaEdjZ0twbzYldEtbbmdoPF9TMSkvcWhDWSY1bz5MXVkwdC59NjEpeilKX1VQ''@;'; put 'put ''PnUiOGtNazN2aG96YjBHRCtNMUZ+SCo5NzIuYyUpWHVdb0VHbUAzVjIkdCMpSz1dTCFhUj1ybmo6VGdmZFddMjpwMngjTGEwfjtsNix+dEt1K1drWXFfcSROOTVLSTsiPGAob0h5biw4T3ZRWmZYYmgxOGBbNV9veH0/bj9lOzFLUj8mXyhIaHtMI0JuZVpPV01afEQwbmU7Tk1AK2Y1cCNYXjth''@;'; put 'put ''UWR7aGw3VkRiVWQlL2U/aTg+I11ePipPJVlzNyRbZFJ8bTx4YF5BYGpRaEMjVClsPC5mKihEa0pvd1NHalA8OiEyaE8vPUsjYF41PUx9Zk9mOmg0PDxvMD8sNDovbX5eYTFIdntoL1g0WXM/PGYrWCl0Vjw6R3xTWnZyVHlXe0E/SiErSWlXe0N+b0hyMng1cF1aMkNFeHlMLmI0X1J9KmFWNF07''@;'; put 'put ''UjdRP1lOYF9rOzh6az4rKSM2YSp7M1pYL2smWT5fP2hoXzxSXX4+P3YjS2VLMTloU3lvPlQ3VTdkSis9UFVHI2l3eWV6QXVGKS40ejMkUVYuIlosfTt6eT5EM3N2WHRWSjVgYF1+eE1SU11eQmxqWXBzN3AyTnMrWVRwI0Y/JCpGKCFzW050Mk1UXk5dTUF2NkVjSkt8Z2hhaE8rLnRJOnk+KnxD''@;'; put 'put ''JjJ9WXF8c0cidjcwfk1XQ3t3d18uamtbeHoiPzZDVGJtSyJQWitBXkdURWxRZk1AQTBkWC91KUg1LFgqV1doSnA4anlqQSN7bXt5KU16WDs0VVdOTiZxcjdUNHldfW1bKkZANG57KWZLP20ka0s8JiN7ZEZUdUM0XmZHQj4iZT90Y3R8KzxaOShtMzR6elM6N29bdzRhfVF2LzFJN0B9bDxZIUF6''@;'; put 'put ''KVlAdkVzfS5RSEZ2Rk4lJThiLz8+dkZGMVBSeHp9JVR1ZkpVZFR7VVdQdW0+aDZNaDtuTyomSU9dQ3h9MEBAbTxkV0xpWk5OUmlkMXB9MWE8RD5mK21ScCVaTyFie2lIVTVGKC43ejF9TUF9IzwrWFFZfSxXS15MdVFueDVLNnN4Wi8/P3U1bl1PJkhEYiVyL3ErI25UZy4seS5HcD10KVYvY2E4''@;'; put 'put ''TDtTOCgzW2AsNiZLTSNDP3NDfkNHM1trYV9BOFB9W2M6cGkrTn58UDNOPT8mbW03dzhhRiNHTGR9KFtPKjF0T0QpOkk7aHJDdz8xMXVMNzkzIUNIPjQvRzRQYEk7ZFBtQ007PmBSe2FvLy40eWNvVUclJS5lXT4hPiw2JDJvWFUjLixidmglbigoKWl6SG98VFgjeT4jQl0uR1Y4TyxjLyRJWjoo''@;'; put 'put ''c29RXm5SRmBVbzchcW9FMXcxUHJZOktZaVtTd2xuelE1YCpXMEphNHk9Yy5icWJ3TWM9NCFXcF5pSl52YlJJcjwsNE1IWFtaZmAkMF5eQj52VyRxI2lOQldueTJbUyZLNENnOiEkc2BCXXl3YTMxInFDMk4oXkBnJHNPdGlvN3F5UkNATSNCIVVCZmk0MzFLJHdMakRQK0xlJGJId11MOjFgZmM6''@;'; put 'put ''NVN+WmpgJFBPZWpQbzhQJmhnVldwW21kSmFNd1NKWjhPYygvTXF0Q25kLkhIVDRZSWFyQG46LkpuSUg2RWV8NXdWPzBRalFEITxiTXRIODB5REBjOHwyLnosLmdvcDVQPmdjckpPPnVqK0gsTHEmRUtIRXdTREVBYTlCT1tvZGRIUT11UTE+UEIlaztyPmteNVM7WitXKHsuaSZEc3p7VGB8NWIp''@;'; put 'put ''dFQ1T080TV8/XVc3fUl5UHx7WUJZQz9feCs1fk5wen5HXk5wSiRUYVUxNVIvVE5gbnZRL0VqO1JKKXo6Vkc/aER8VFNyRlZqIzQ6ZD9ePz5SX2pSW2AzJUJWW3N9MXBHUHRrUiVPNWVvP2B8MCE9OnJMNyldYFVXZHQ2S1k5YTQoKCFlajRfNmB0aUR1Z0dSVXxnNmRWcjVGanBLYW56RTZvaGxu''@;'; put 'put ''bi52RElYcWNHfHFuaVIoVkNXQE52cTV2KW5GJksuIWlkaD9xR211RllWL2ZTLjxGaXl6dypZNDQkLFs9JDFJKTp1JV43SjEua25zWXV6fFJbT2RbOSpmLGFCNFFYWl5DLEBKLj1qeGc4M3hHdCZyYXdXYWI6b0crX3dKaC82LnJAXk1NYFQ8QDpfb1hGVFBOKT86P1pGPE9WPHZ2WX1KRDUiakAw''@;'; put 'put ''KHFvbitKVl1FJGNxQyR+cDhoTX54O3c2akpUa1tzUkYoP0JFcHhfWkQwZ1tyUCRPeTxLZWk5b0VROihQfGxldUliJlV2OD1fQHxeTCZvazFFcm5gRWEofUU8M1V0dlIhPHFAIUlaJkUxJkVQYzZ5Vz92MFgkVHwlRTJgUTwxZyRyMywzIzNlbWxZVklxM2teKi5XKEd4Wi56TmcyL2xGOTglWllB''@;'; put 'put ''cE1zRSw2aUAuX3lKRj5eZGMmIyhmaTtYdDRbKEpKYktIbDs1Nl5HR346S2RYe2RxZHcmNEoyL0d1MDghRykqRDBpJlhtPTorVUJJKSQ8QyE/T0V+Y2x7dm1DLikyeHhkfUNNIVNGX0klPSxLJXZyemFoYXw5bnBHYFAkXyw8KXRjPCJMIU0lPDNEPjRCXyZmbCx8RTE4V2ZoNktYQCprcTdjVEIm''@;'; put 'put ''KHpiR0M+WUVOJkVxYmlze147IzYhTEo4KlRELG5eTVk5K209MiQ1WloqezRPeltPcVdMYTRuL3g5YWtoNn0uKDNMWjwvfH1lUkVFTVJSW29EQ3dtWU5TI0M1JFpjfjoqVTtwUFFMQz16OkN1W3V+akIjSkNeSCk5MCs2NFM7LzQ5ImIsYHl6N09KS1lTbiIkNWU4TllnIiV6XyZuNlhaK1kieGl5''@;'; put 'put ''VypuRDFZRGxHYzFQX3V0TzR4MXdYOm5deSQkN09oTDg2fF91UjR8YkQ6ZkxmdiY0O2BUL0N+amdvMCRiUnR1On5uZzoiezBDNjcmeyI2MVEvNCgraW0uQDRRLmglSH5XKGNbRiZ6VyRuL3NdRllda3QkXisiV3JqREk/I2ovIkc0dCtnQWtJUzxqfiszbjcyJjckKHVyKkg4MlNZMWpQcUglbUVw''@;'; put 'put ''WzZZcjt6dEU7byhiaEZxOyZmTUVoRXEsKykrJD5hVE8/R0RHJm9IRGRgSy9mXUx8KWB+WWE4YSI7U3p4XU42JnNwL1dDcmVqInkvRiY8ckI2UDZQISo3I0FqTnFPQS8uQGEwOTt4PCFjdmI+L0Z6Z206UjE7JjsiX35NfWkiVmYxTVcye1VRU0M6M0Q6MlkwTlBDTC5QJjJrPms3QG01XyhWSC9f''@;'; put 'put ''KyFKUDhhaVIzLENdMTFnZjBxc2RLdWRGUl4hbVooXWddWjxiYGFjfWNXfjMyUk8jdTt0MEhZI3JVdjZAV21TSThCMFMpSjZaYkd0PTRtSTFFNCx0KSo5fk9NPXRGJkpJZyM4NHYzPm0uT3suOHNpYVRdck40WVlQIUt9MHs0Nj9obixDNEQkM3Z1LHQlV3xnZitKLCtOKioiXT1qKEdLe0hVUlZ1''@;'; put 'put ''QiRIPXUvYVdzfExXSzIyUGsoaXQ8WCZHTSp2eUo1UCUqUSlzWl4jPGVmSlJHUTsmfDlXYUJqWENHfT1afj5nI0JkXTo1byVaZHBRWV5MTUh0RjFWQUZMTF83P3IyOjAuO3I1dUVfWn0sSVZxVik+eFAwRnRRJiQ7cl1RbS40b2o2NiMycFVSdXNfVSk0Jik6eHZMaWh5eGUqPWhke114OWhgX0lk''@;'; put 'put ''YVtwOj0mM01ifUUpeUBAdVNwdzFdez9zanczJkFXNHNuJS50V3VKQkVTM2YqJXRQVDlNSyRjZlcvWzpUSkVyYTt5Ql9+czcoblg4YGcjcFNDbHNQIkpfJFo7VEJkbE9eXSYufHx8K3FTWGl1V0k7dElkeWM8IWFQbjNAR1F3VS5SSFs3ZXNPUDpZWkIwWjFsIlN5N0FxI3tVdDA8JXImQktodXEq''@;'; put 'put ''PmVEKUN5YUxRbXRCJHMyQ0R+JE96SF5GeVN8RGo3ciJQPzd7fj9QZjpATnNYOG9iLy5tWGxwWV1RLFVyekpDcnM/M1dUVStnQWIsMG5FN3E4M18xKl9VW2t8VCpnWGVeS1omdD9XJlc4cW98eitAUjxQanEzNiFmaF5UaFlsWCFkK0R8SkM2KXtOdGg+Z0dLMThTcFk7S30iPXFmaTtCbH5BaVpP''@;'; put 'put ''JWRsKXZ0WTFKSkgvTVlFWCREJil6XjNlOFNsZj9DLypSY0I1QSRtaCZ3IXQic1p2amttXmUiPXdpWiFxTC58QSZTWnxAJnROWEMsOmgpdW95Y0clTmRiTzdEOk9PSEpEbT5QTnp8XWtnKTJIT2AqI2poSkc7KnRyPjQ8azxzbl5uUjMsLEpINThRVWZbfV4sbm58ODZDXyF7PmE5KWN9dHozcTkv''@;'; put 'put ''OWx+OG1kMVNgJUEme2tyMCtrXjVkaC9GSlg1YkNZKyYuSzo2emBEMVoybEQiLHFKaTFFOlYrYDAhWTE/fiwqUDExIzNNOVVVUDJOXyw8Q0sjJFVRMUwsWUA0Xmtub2tAdHtkNihmcXEwN0BPdDlvOUhiYHxwQFBfI1FeInoub1chbEBFemVMJX0qKDwpckIzUjpzP3kiOkN8SDFZRGZ3RkgjLGVI''@;'; put 'put ''L3daI1NAdlI5USNpfTdXc19OJk5JZGQ4YWtfXmw6fF8uby4/REdWJFFnTy88RjVuOzA1ayFIOkdUMCVmKFpFXX01M0V+K3kiNSxDYF0/dTRDIXN0SSVaanQ5R2ZMV3Jmbn1VfiQlezRUdFJ4NDxJVWF1RWEsSUFgdSVrbVdEOTw9KUlkPlZ8LCN0bzRoZVZUSU5JQFBzeGx5b0dCVEI4NV5tKS51''@;'; put 'put ''N0kkV3Z1OWNJTF1lWmc3SD9XRUojPCluXX5fcXl7MGhwRyF8OVsrfTtMNT8+U3Q5a2w1VnlRM1RwR2VedyQjWj1pIUlqaCUjKyM2IUtSYnF8dks/Im4sU1czJnl3SD8sLCZKX0h4bGJyUUdFYjFFUDFgLzI3KERPYUFvSnpudzA2Jj4kMVhwVWtZWXlNZDI/ekx9dGZ+flNDRXZfSHJyZ1BfLDI1''@;'; put 'put ''NGZ0XTBOUm8mQ1B0T10yUCNwZ141X3pGXTUqKiRPSHlpaEh7OCZ3RGozfTRwNT1Cb29sZFMkW19JZlUwPltTNUQmam5XZClnaX5Oc3U+eUMzNXA/KGZ8aUVrcSosY3F1aCl9KCt6LzklIn5XaEZKckdeKU99SG5lYGp+MG03VjdWfkQmYWZdIWRIWDcqRkNXZXpTbUc1Kk1sNF86JnhILFlfQDcy''@;'; put 'put ''WzFsTW8+I11RaHNDUC83RHdAdUt8VW5wN1ddbjNjUTdmLE98blVfeTNqIVZWbCU1KlJmfGNeRlUpVllXI1RLQFZQaFRNfVo6fChTRkc8TCFpTDVKS1d2PypEVjJmQlc8QSVwb1FLPz1QcCxUYjV+OyZEJEtHbERaZ05ZJHJXKFBCe18mZ0ZpckMhXjdkTEpFVkshV0J6bl9bYFhGWFY5aXZbTzBq''@;'; put 'put ''LlNCRyk+TiYoa01VSCNwbFUrMVVrOVQ5Xjx8TX00Ykp2cjwqLzVqSC4kM2NMRk1gSz42T1t2NCtdOCZPOC9ddW93JXhiTU0vcnRQbE8xcVkuQkshOGRdd21kfFBfa1d0Uyp2dThRTUYrWGpXeiQkdiV7JF5ORyFRI1N8fml+cXxKJlRHWmJdQzRMYmd4LGUrUTVRSGw1fVlQd2JQNXpzLntLLlU/''@;'; put 'put ''RTI8bGZFQH1oa144KnRFUEk+a2hUYUIwWkM9PmBgY1diPFZFdnFAKCRfKHhAS31iOz0uRXYqWEA/PmYwQ2VRQzJ4JWNebC9tUWxvUHdZQ3haPHBYKTNYVjIjYFp6ejFEfHYrNld+b2dWZCEsPnk4Syl1NSNRRUU1ejZveEA4VVAoXzA4dEhFSy9lRTtyOk9KT05mPT48YnBVREJ3QFYsSGQ8djFw''@;'; put 'put ''ZjMxZ208ck5HK0FaRE1GInFeYUBJKzV6TG1mdiFSLnFGRUxBWS5IVCpucyFzI1ZrcyFeQksmUUZrd1lEKDV9YVg8WypaM0xtSCNzLHM8SyJifHtpL088dl9BZW0pRDlVfGh2ZUE6dy8xU0ssYEhIfEckcnxtI2h7ZmRJZzRGRFlMdTMsZF5lP3JlRlhDREV9QWVoODp9UTBvUjU2bmRIa25temh7''@;'; put 'put ''YTUmKHBSRTp5YlltPCo5KXsjLjIwdVB5ayZtJkYzfF5Vfjd1I1c6M2hTYSohMk1rSkJHYmZOOGhVZTg9ZzEkZWtNUl52PmxAUUdNWWJoMn0jJHJhdnhsJWB2REh1OFU7V19gYEg0QERWR1VefEFlZU55ZDwwNGlnIUU7O1hMTj81flFIZVYrUWU0empEei9+bHYpUjU0TyRvRnJiVV1fZylHWWRw''@;'; put 'put ''QWRuUSosRjlXRGp2L3AqKnlVYXpoOyFoWyQjLkFlN0NIeDdTP3wkVXRALExHKmR2QTBnaXd5e156cXV4MzJPQDE1I0tnd2lUKE5mJU1OcmRUJTBQP31Dd0RZQVAwPjgrXiFqUmg2fD0iO2RUQX1+dFZpJSoySG91dnl1MT0oZzBxcXB2VVM9KDNYQVNOQ1M+ZzphRWhtITwhImlTJkBrM09tMCpx''@;'; put 'put ''JHcvIm57REJrLFsrOzZsTFEkOndjW2spKks9YFo7NU18Y01BQissTWpiWmFmXkhBSyMuLz5QP0xSPmB3dXJrZHt7QlU9ayNlQjpHRWJdN0s9aiQybS97SFMoMjcxQHBpRUtVWWlnKVtHJUdSMzIoUStpUTdEPG4/ITQ6X21KenpNdG1COEx+fWZ0P3QjPEBBIzEsLzB9XVJ6TkNYZEdQNkBSWyt8''@;'; put 'put ''M089K3dMTkk0QnJONixvTn1eb31kSzVyej1MWj14O0M1dVM6fHtKZnJrd08vdSZJKS9eUGZnJCsrUnxAQW99RkEwcHBTay5RZ0BAdSRJYmBubXcjaXVeMyV+b3s/dmAmIU58WykseFJYZClrM1g2cmJWYjgodE87ZVtuYShQKGNGazcvWGFHcGw9K3E0aWUvaTJKZF83ayJWU0FQfTc0RF88NzNN''@;'; put 'put ''bn5OQTcwdThOaTk2cmMmRzUlTERJeX1DTU01IzovQlJbT0lSeTgyOFImLFZTdlA/OH1KOWJ3YCJJeWBSKWZuSiQ5U3YrXi51ck9fRDRRKHBgOys5PWYzKFJ4aGBWTWlkKCNmcEt8RCpeYTdwSDxiYDlIVWxjWygzZGhEe31HP2pAMlg+dD9TTktnV0FOM0liZDhAYzp4dn5aQTB3eX4/SE5pRTV8''@;'; put 'put ''NkBnQFglOFAoYkIyLjE8UW4sYGkyX3VoLGooRyhaX1Y7X0RGSyNMOjAlYUYiRVd5SGF4WHg5XnZAKDpxZWBZIjZgb3VyeGkqQGZicGlTfFQrP0khPUJVQm9xOjdNX2dgUig7LD1hZmt9RDBPI0hHWXk7OXtGZHpdMG5ifXUwW3dXVHNqUV5uNjUsbyZtd2ojKTlmOiNMVzo2XU5pY0UpR3cvUiou''@;'; put 'put ''TUVaUHdZVUdaTDQqNEkvKy94aUp3eFAqe3J4ImtyJV5yYCZvZnd4VEohZFNKaztTW0B3UWZWV3QsQTRgSXtgZF9pU1RfXUl8PS8qRTpCalYlM1k8U0tMcXJaTkhFc1hsOj9HW3lKVSgvd2hvQGAhcGJSQC5tLEgsTnsqT2FpYzoxUiNkXUcvSjN6V19NRj1RVShZfVVTM3ZMYDFnVytsYlVaSm1g''@;'; put 'put ''dnc3eDZAYEtnQ2pyU2tfIXM3OktzSFg8ZCFNaEU1SFksKVE3bypkSGp5VktAW08uMXVka3RscUA8K1FpKGJvTkk8PlorbVlfRTxdOztJUDl5L3NtYW9UU1d+cT0rSj5Re2N2bW97b3lqKmR6TWV5JT5VN19WOSFfeC9lPl5rTDxoTHg6aE9eYzhdXUR8a1tFbn1HfD9YI2R0YC4kYW5GSiNxWDkw''@;'; put 'put ''JEJHcS9QWEFxLFFEOH4xaDs8U1RnO15UTUhHUWd7PVNkQTR6eTMrRiRWZ1QwajJrWkQ7QE5JZU52JiZ1bTFwKVAkXXdyaHEjWFVlX2t+YzE2N21kajtLX2JKeTFsZyI3ZjgsTmxnPnwwY3I5VkpKdzMxV28yJVBLalZeWDpuaFpENUdqZGcoOF5WcjdWIytqeWl8LkQyJiJYTHQ/SDhyaVhDQGZz''@;'; put 'put ''W0IoO0tMazpvRlBaOV9oXiZ2Tm4jd1hyfXNtV3FGQUNvcUQlW2xAOztDJDRKcTcuPikjY1dEZChvW08uJDMxVXBnUHFgLnxUW3l1ZX1ESU9SOGZGSkpZcFosX0I5fjtOOUZfQ1pWMnsjP1ltdEVZPzFSTnFYak1nQWMyW1d4SWUmI2hHfXsjdlZXZV9ZVmozQU0qT3BWQmR3XSZfIUdCTERDeyM/''@;'; put 'put ''IzhLYThOfS4kOHUodVUpL0VQbnE5SGZsXmppIytpSVpHWEc7M08/ezx4bUdQMHBnJWNpISUhK05sVVtPV19HJV5EZWhzIV5eQW8/Mlo9cTk1KnlOZU99TiV2b15HbUVsWyVrVWNRfDxCWn55fllJb2drcGkiTF9MbXpMMHpPfnM6dk1xMm1ULF00PG1mRTtfL0IoQEsoX1RRVzxbKT8kcWEzRjZm''@;'; put 'put ''UyQ4Ij14RXpPXyJROiR2IXB5b0ZES0pnW3lPTzlzeEZAJCguUXRqVkI1b2ZZKDs0Q1hvNEt+Z21CfExvZG5DakUvTHZdOmVvPl02Rj1zJEYyPlkqI1lUQG5gbTB1eGBPW0AjMF5De1gvPmcsOHdhKHNwMG8iMnxRdE5lRzIkT2A6SnFoOjVuI11AeVlGTF51SDIuMXomVloxOTBhS0IlekZEYnJX''@;'; put 'put ''QGZ4T3FTXmo9bHExM0YlfkJPe1JYRyJ6cmQ2fCQrT2U5OEF5YEZhMENGdH0vaHVMUH1xY2RtMCR6IShnUyFTQ0MjeD1Cc2RVZiV7JXBvSyZVRThLZ1AmSGxCU016WV5BMk1uKn46JltTTCw8MHF8YmhIfGI+cWFJb3AhLyo8cV5ueVFSalg4dkIrcFo1PnEyRixeTmAuekIrPXVPV2lSMllDLEJi''@;'; put 'put ''YCRCbkFQRTI0fnVtcVYuaX1CTUV1RT1gNUR+L0JkT2FLTGJZUSl8Wj1WVmpDQXxJdWZdTklRSyYlKjNPY3hPJSslMiZPPUdRTGAkXXY/ZzdPKG9SMktROiV6aUhYJHxCeWdNdSVXQVVWfGV1Nmt0Lys5OTNmMm9mMiE/PnxhJXtbNlRkXyZBQiZ9TEB8TXtXcSg7KWRlWj8heU9HX0s4OUJWfCRC''@;'; put 'put ''Xl9BUn59IjpvR3RPOG80Wno7Yz8oaTQyVE5jViJeWFtDQUdFfWxVblNSQU1DOV85TUZFbUFNUn5rLndscWdia18vLC9CUVpzWSZZMihrajJSI3ZSP0pvWUF6Py4kUERJQ1J0UERXaWssWkpdVyhrWkxodFd4fUlSb0BELi9SMjpDUlZaRjRVZkdKViR2bUE7Q1EvOjckRVFCcl89WFYibXUkTTpB''@;'; put 'put ''VXlCPzdbSWJ6QkpYRnQmJHxMaHRvNDIoVytzT3JWWDtXdzZEckxKITVENGM5Ykw+OH4qYW1DQkFZTH5BUHImeUMhQEYyIVt2IVpuKkleYnZnUzhZbltPdm1lK21fYSwySl0rRmMmflJVXjhEZW1JbXYxcSs+OzNDUWk+Ojwodzh5Z3EmQ1JbKnBgV3pXMyViU19HaWRVKHx4d0huVFZpKjUrbyNt''@;'; put 'put ''ZEBMXzs8djlfXUJ1fntKX0tDW1hWVSlyVVdZVzo+cXp3Ul1KOWZXYz45eWYscnswejMvVXt2TnRfO0ZmMUtOQGgiKVpkXWFKclE1YCEhKzo7dGZYRFReMWV8OGhqNEglV0JrWkd4QSNLfUh9ZChIcVJgKSs1TyI2JSRGQVJyb01qTFF7Ri87QlJKMkNvU0JdQnUsYjQydTBnOzFyUTBTXTJbakNa''@;'; put 'put ''d3VGU1ldbCtPOWBBWF1ZemZLJjMjNEpIUDUzTTNkRCNmYz1jbkpNNnczcm01bE0hWmZZLDs5YERKVT4wUVBvPUZbRXpKc0RDUkdbPkBCP2lNaDx5W3JRQCxWPnFaNUhfQDJlfmZaaFlpbUc+d15FdWlrdCM0a0ooT1R1R1NpS3R8YllxVVVgQjIzVUJeeT1BIVBhbGVEQEJEe35HTFhdQ15FXWd0''@;'; put 'put ''P0lSeHlXKVF0ZmhvMncoIzcyQz5IPTs1NGU3LklrZHosZ1BabXlgY3BYKSlhe1E/Y1godDMjT2JpOnBje3ErPExRUkI7V0U1OCNsOjpMWzldflgpKiUhJEd5WFkvW2Zod05HRW15ZndIUnYuSUAmPntyZTBYQnBvIjZkdC8xbHRJJkNjKiFMPyxTUHw4SkJUaUtkeWw9SVBEKjRKO3pWX0VsYHhq''@;'; put 'put ''TGVuNDl5ZiNHOHJfR2hVXT1CVTU0ZzcvYTReW0dIX3tnZUBCMEQqWjduR0VzMT5IW2hjTXEkUHVVdlopRipAKy5GW1AmcWRFcFp4dHphInY/Zk9pUTF8JGVrJlAzfDskfXU0anVOdEJHaVBFcz4vMmJTaU5LUmU0RHQjL3lmZ0Q0TDVXLE95PWUoKElCeFszXn1PSjNMPkNSQSsvMSN+dWQ5QD19''@;'; put 'put ''Jk5+M0Y6JFlJTl0hRm1aQ2BzPGJ5TFB5eC46P2d8b3o5Q1RnK2NrL1IveUwrUHg8YWNfdyo+W3JrQGs7OSglSXV0a1QhazMwOGNlNiVeXVVTbD0zIWE1PWclUjYlSCtjcD0oP3IwYXgvMVs5JTRKIlc5YkxuYURhWiNYfUlqP2E0Njs5clN5TUZ+eU8+WkRWZ153Uk5nfFcmRT1eS0ZXVHRGLjUk''@;'; put 'put ''TlZvUWhETGl6Ol5SP3I1SnhafkN4QSZbTE9KIUNENFZMJlU8KCgpQV9gZ3BBU11mQUJCaExnSjIhU0BWQGpyKzsibXA6MXF7SmBdVjRtQSkuVSNWNXZPeUkmWDNWTlM0d3FFZixOeWA/RiRHcXdbKCVqZ0Q+KDNXeDBgRnkxdkxpL3pdc207UGFOZDEjW2IsQUphZjh0KCZAQGYsYzQmdHk6KEIp''@;'; put 'put ''ZGR4dktlSSJHMj1eM0wzLCxnSWo7QVIhdTE/WXxSfjBEN3V0R0AvREhrTHdzLip4ISN0L2BgU31HcnVoPlVweW9+PkdPVWlTIVl0VCklMSI5SjBaJXVGXUU9LzpNRDd0eC4vN08/MVNCfldqSE88djEzWFA3PUBwPSosbHQ3Vl5UV2NGamQ/bHZZaiMpZCFvaU5vcyNWcThdc1YzIXxicW1oamlm''@;'; put 'put ''WmUiPHNNSVI/Ij8zQlNVXmN6dE1sbmsqdCFBbHk1fjZ3ezVybFBIPm1MV0QoQlR5T0owJEs0LGY7K2x7YVUhWWEvdEs0NFkyY0ZyS1hfJis1Z0MpP0g0WThaYGM4IkxxalZ8NSFHInxKY3UxJVNZRm9AJUV+ImdAIjJXTzQwempjZS4xTX4oQi40XTNmODkqPFAicHZiWltnWjFXYHp9ZT9dZWtV''@;'; put 'put ''fDBELE5XeXtufS45IjlXeEZdfUZpOGd7VilnQXlZIzdRYWptUjZrYkh+WmlQQUdRZyNdUnkvWSkkakdCKzR7ciReenplWktZcHE2M2E/XTxrMT9QTSRya1MoQ14ubGplWUhaXm9hZn49JEBTIUdgRitCe0JQWkssSWtSRUlXX35iMG1edjpQIT5uRk54IU1FU0F5OSQqeWVLV1RbcUYxenQvW3oh''@;'; put 'put ''dnl2eV5HZnApeUFyW1ZdMXtiIWwySUozZiwmcHV4UmBnRHd4VTJzcyY6cTFETDA9bFJySCIyaFVwYDU8bjZycWpzSHJ2WSladEsrbytWbCE/OGhQLnQyL2RKQXVbP29yUD9YWSUsIU0hel5pU1hkZlBpN1g9QE4obShPZD1jey5ZeGdwX3EyalUmakh1LmxEYzU1KDs/YDFMUDxpOXVWaTsoajJr''@;'; put 'put ''M3sjUTl0K3xGNGJpZ3NSeUkiejZiNGVoJTpJVjhubSNZcTs2KSZeTWY3SCo3Lj1fPVdFZzlqOH5NWnBnVUVHQDRjZihYbTVdKG1PaXY5bGFoRHtqMjYhb1NpflpLIyRjR3I4MF1bLiZrWUcreU9NXjR1OVc3YkZNQnB7fHZ6VSZVZ19eQWkzcmQrPmJ2JTdUd2p7QDE+WzhUPDoiUnl9NiUzUVdF''@;'; put 'put ''V1hwS2hlOHBhOi47MTh7aFUwOng6UiwvYjlIfDc8dVE9VzU3cSEsPC4udzEifSRxJEpaZkZVNU01ekU8Vm11R2smYkZQTVRSaF16SyxONDF6OFdCQSZ5TDdyX1V0STNRYDIvY2ghb0k0OXUxRF9gaEt7cURbP1czPE1LQV5DYHFaUEFTX3ttUzlGT3VrdTMueXovNE8ofVVbY1FJPGosUEoubFh6''@;'; put 'put ''UG42MkcmKFRIUTVLZFhESkRRMmUqZnhCZitNX0hhWXZTTk1CeE5PNDp5T2QqNWtaSCo/QHZ8UlF1P0lbMjhFXyJaKXhgeDQiV1Y2IUdESm5QaU9VQzJERylJdS91V3RXaHRibnx6ZDlWU2RpKW4lSS5qTGFPcHhBWFZ4PWN5WXZHWTRDWTxQJnVOWVhPVylCe2BuNUIwL1AvWExjJlgocHRLaH5o''@;'; put 'put ''KE41aDkxdWMoREpHUCZMSEhNeTglWmAmP1d8dihhNWh8STdrJHd8XyoqSW1MSGxYLCQmQXF1UnplNE1RQis6JGpIVng0Tm1ZdlNtY3xxMVlhP01tSVJPVndUVEQ6Wy83fUlaKitCRTojVz9yMjdxbnshLDVnQWNpMmsvWTd5Nns0Z1R6MGRXaEt6bF49RSVZPH5VU3JRMTElST10SFYvflVVVnQp''@;'; put 'put ''ZjgidUYqTU1sK0NiNSZgSnZ2OW8jYVNna0N2PDJPLzdIUXxzOG1MNj1WK3NBQTpINEdbUSZURHt8fHl5b2w2T1VGLm1Tfn0wT3NJNDlwVSlva05sMWhpSERjPlcvMChMd2R2VH1vbmJQT0NIU3xUWyo3SCZEViVLQjhrJG9EJE1AV0E0d2J4MmtHK1tDXzM9WyVTSXNHe0o+YnZ8WklBQz8xRWYy''@;'; put 'put ''WltxMTxpNXBHTVVLbVY7NzhBTlAqKEk4bk9KPyUkeFduKnEkKEk+P2hCTlB5UjZAQnRTYSJoYVp8VC9uVkdCIWNoUio1Mn48SmBPa3JzYSZLR2t2ZStQSiV2QC41dFVQfig5OmNIKkRZOzF7NFcsSEg6NkhyKnJJLCE9bUxIfj50bkFGeygxX2UjU2RCditXYENQSlQ9U0tmPzBGRVk5KWs8Ql9w''@;'; put 'put ''dVVfI1tiV09HQFAxQGpvRGF2eDMwKnEkaWhyUngoV2cpUG9EYXl9OiE3cHZPPDxOaSQhSGY7NkBdXUQlbDg3aGU7Xj93VlJHcWcpSWx2Qi80JUZvJSVGK0hzcyt0bC8kZHsmQFckW1VZenQhWzVLandPMmA4cXwyRWV7PyhYekZkam1AWH1BZVhWNWJWNk0wOHl8OlZqKylDM0hOVmtXNGFoXWJm''@;'; put 'put ''V2ZCaUBDJnZEaWhQPyMmOzp4USVRenUwVGVQeTUsKTJGNDxEQj44SztHVWhmc1d2JTQranx6anBIaXAvdCNBUStxWzMwd1I0OHUrIUNAcUxROHshXnMoP1t3TDN9fVNAM3k1YXxUcFc8Pzted2koTV45aE4rYTVmWHFdT3kodlpOemxOViF2cTNxdUdnTkQ5VipsZX5MWjtBenR3Mz1XbzFONl5m''@;'; put 'put ''dGZdb1g5JSRNWW8wPC5bJitMWEhPaip4Q1VlfChhKmt4bEdJS3BAIl01dkYvRmYvRm1xJWlROXN6U0QrU095MWd6dX5zfXkxUmZIOn0yYCVsZ35IKi9SMEsqOyNoPnlLLj5ad1kuVm5Pfk1hfXlSVzUramJIaW8wfDkuQnU3OFApeCokKldyJn19M2pzdHZKaFNaaF0rMWpJSSxzc3t6JnNFYD9n''@;'; put 'put ''fGI5aTJGMyhLLkNPdTo5eWBRRjA9Q3oydiZNcCwpUVplUTc7ako4IzlPSzh8clVgXylfTHhyYzgpQS9HYjxUcmM4bF54dG5COlgwSTFeTSEuMXU6Ijguc1dUNWtVSk5GWjlJd1JSVHQ6L2g4JUEvR0MqW2IrNVR0RG84YXxVXmphRHFLXnloPTcmVDpUWU1HbzFuIVlBUmk2UFQwJlVuYU4uKVBi''@;'; put 'put ''JFd5TSJBb3xAITNNdTJ0azVHNSUoWW1NKlBpc3R3Zj04P3JHZ0hnWThfNl4zOzFjfC5rdnA9YjYqZ0Q3QEokRzg0VmIlRztvTjQqXmFBa11ENXxPPHZRUCVERU0+aHtLfk9QeXIockFrdyZUKk5WJjxzYEFEblhpKERPRGhpXjQ3OjcmS1IrZnI7XmJ0VDIhVjVOcGhjcEVXTHxzJmpYSDRXPmBD''@;'; put 'put ''KjZeU0NFeD45LkhSPWdDayZQPH4+UXpjITtQZE54bGopQ00/UVNyRHRPMFkwUlQ6MCZ2K3l0aT5pXV51VC8/ckNQUC49e3AqKFchLklGYERzKiFJRl1WIyldQ1AhKDgrd0tlKnNnKUcmPjd3M31+IXRRayRvYEpoYTgoIWRnUmNSbWA6U1hvUV1iOlNkInFHI3FAXTJfeGxzX0JXezBHNzYveC9I''@;'; put 'put ''eFpkUyVnWTxlMWZdWnVIKnxENCx3ZWx9dytJc2FaZChud0BNbCp3N1B0LDI4ZlIxT18jZnB5OGghTzZfZDNMI0RjPzxiISUpOjUwbXFvRmRJeVlnLHE8bkBue3dHVz9paiU7eWdRVms1KjQ1fHUyPHt1O2VVPE16eDQ6UFpJUTtjRWk5Zzs3I3g7W2U6PiRXbihGQTtOXXxlWmg9XnI5OHY/fXx5''@;'; put 'put ''fmpxMUt2dltDWmAzZ1JJLCxEdTE5SDZRJkFNdk9SdTFhXXw6VGNlQ3QsNCg3QD1rVWN4OWo2VEpaKEBbKGVDR2xMSzcwJCp5QSVVQH1xd1J4YiZscXgzamw9em1zOXA7dHEhb19yeng0OjBdMihHaDtAa257TjN6Y0dhOEx2T1JiZSx9diNNdTdmKCliZEExVnBMQnM/VEhSSGhIP0ZnWnI2bGRp''@;'; put 'put ''T3ApS3VedX4pIWluNl4oPHBiNFIyY2RUcCZZT1lufXZIcnRXR1thMDFlamIsfiQuT2IwO0RNcGw9b21tO3lWRWwwRz53I3VuQGNxS2hoRDNYMio3SygzTVljSGoiflBfM2FZQkZidlB4dT5GIzcsfkddOU97P348OGNqd2g3V2M+UjNmYmdMPHZGYShucUMhUFpnbVpsTGlFPHYsXyVBdE1LOEpw''@;'; put 'put ''YUd1aT5CVXFbNFV3QTFOLnI7KHxtSS4sYGIjNktiemlHdyhbTXwpQVRPQH1DdGppV3M+O2JWOTk3LjNNZklDNEB9Jn5EPS9kLGZsbGNOK3F6dHJwJG46LFFkMWVAUURWZ1JGclZyVDguc35VbkpBV09RXm0kT2Y8eX1eJGhfNXpbSFYlOGtQI092dlsrQlZLeDFoSG87MH58cEp0c3t0c2R3W3Bh''@;'; put 'put ''NUJLaTg4S2h3bWA6YTN2dEZacnA5WH07aihHT1kvdU4rIVd1Q25VPHR0Uk8wa3t9PlkmNTVqKU53V1pURTxyd0chRnA2T09QaGhjOkY/eU1QUyk/SFRVUmhyZGxleDtGQ21deTdEaDVJNnU4JUdraGYoTjdmNWNKXXlPLCFOVllYSC5dbFhebDhuP155OT5TakNiLixlbC8pYzFbRFNgaGNMSj9U''@;'; put 'put ''ZUswRlFpUCVvK3pIYEomOGF2NTdjODM3eX02eiR5VmlFbEZTM25AdmE7MFhsMHI/Z2dFO3NzMk5JQXVgKHxYIyZhdUZiN2hgOGg6TTNuZ0wlV1MhbUliTnFjJXEmPC9lZkBUZUtsbmh4di9uQCxLMUI9ak5hJmZSXilRdnRgaFY6blVxUjRXe052e3djJnNMRFIzR2BKIS5oc0hyQCJpaTJGJUZ6''@;'; put 'put ''OFZ7T1krQTBjbFF1NWhCK1g1WVMqPVE8WmdMcEkvamwvSGFPbzhkJVtETl5LIns0fSwjKWFuNm1OVExDcEpIXjclSyJRLFk7TVIjSks8dmE7Mlh1QjkxNHRuTEVofF4uKWkqeVozellELyp0aEt2dltQezEsbC9MRGApNmx0Ql1kWnZJOmssRWspcTptTFdJUlBTJHZpaUxXJVd3Q0AoV1NVeGpO''@;'; put 'put ''fkN5NG1vVDckMT9YVzd4ZnRoRitlPWdySysiTG45PTM6fHpsL0ZJLiplT1ImVyZNWngvfHkvL197T0ViQi5NWmcpYG1gV0lBUTBDX3ozazRPbHR8KkVGS1VvTlJ5WnI/YHhyQnxSLDtAYmF2V0N8RlZYT3hvQjd+biVRSjIwKm0vNixGMUkxSmFVPzszTHF1fXJKLihuX29uRi42Ri8/JU50bUw8''@;'; put 'put ''L0dOMUN9ZVpodzJoS24oUU08dik9KyV5RSJsKTs1fVNKRj1fXjlsMm9GIVkuZ15XeVsjbnA5ZjdAVENYWmBWaWxVeWIyJnxAS341IWJSTiFie09+TiZzRF55UGFDREgkcyt3bHtQaVN4PzVYTENxLiw8TWpEdClPZnVwRTA2JSZtKyFXfVszZl0jTW5jUEZvbn5HaEhvO0ZleDFYcEhrLjZiakZT''@;'; put 'put ''PnZSVXtDdEJRfHMwcFNpSFY1MUJ+eHhrKCV8RkFEOzk2QDNFaTNiX2lDVlh5MHhpU1VDeSR9KGE0Ums9PU03P01PQ11hRjojZWtDTktYOlZSTz54RDM2eTN5cjN1P0t8I3VoVHtXaWx0dWAzb0NzQ0gqSFglPFFNPHQoeVNOOUI+W3BjNFdoWjtSSFU/Lzo3dnxJNCExOCkzR354RDZRVDtDci9w''@;'; put 'put ''LzRvVTgvWGNsVloidixfbV1ZJVFKY118OG1jJnk2aXB+W0JwT0N3Ylo7WVl0OHVVWXN5O0A2XkVyNWVae0VyRzcrLDReMHNCenYhL3pseFt8eHlWW0w4XVZBOCkmWG4qOUd0dUZfLkQjVVlxaWBpND1WZkZ3fVNvSzJpWz1iJT9rM1I/W15Vc0VYZVU4dzpAamFuKnRoOGFpNXAzXX5iTClmOT15''@;'; put 'put ''OmgucEI1QlQ7TkY9RlAwST88KHd7TShKdGI0S0RyIW9QKV17QEtAcDZiYFdfTT54fFp2PX58SXleVjtfRm07PUtQdExhMl5YYlU8RWFaSyNfK3E8SDZ8cGZWOywvSkwkJSJlbGJbUGJTVVMjRUA7eVFuNiwvVWFRJnp9MyFoSzZFI3VZOFspV316dUA1ZzZocENNK21dNzExTWA5ZFI8eHtNeTJP''@;'; put 'put ''X3l0WzFldXB9ZlN9SDE0TFl7aUdefUdeamdLdGo7bStSQVBCWUh7Vn1peT05VUE/Iy8uYjMsYVRFazZJMk4sTyM2Ryk9JC9AayohX3sjOlFNUXI3JCRsaEk3bikqZEV8Z2xPUz08QlR2dil2cSJJXiRAP1tgby9dIStHMHxIU3toWDU8YCVbOlR8bSRsLixvRFNEancrNVdNMnhaKUBAQGpYRWs0''@;'; put 'put ''UXZWRVtoQykwLjdhKywvNXA3TWVWZmtELE42NXpwNi49Q1tab1h0VnlQVEVDeGIvME46OG1lSHlJTmwvZTI6ajYzMT4udmAuSGloLFVdbnZpVD8uUENMXVk5fWg2W2tARypVSkYmZDxWOGVvbjdnaWUheEN2fjs/Y31DPWFULzxNJFg2Tj9iZ2wmOn5xIUs/LyEvXVRqNDVmeHcxR35jazRmPTho''@;'; put 'put ''SmU9JStueTsjV10pQHBTQjx0fFhIL347I21eYFV4V2p9MUNofmFVajNpXj97X35KRkxNNG47YEM7ZSFfVmI+ZnBiVU5+WEB7OkgxYHRudmUuRXw8KmRwTyF2fXgzL3lgOFhwdVd9L2EsNEo4fFZUP35USUVBNj4ob1Y1LFVeb1FfdT5ZQlQ2UWFMIjNuUCNkK3ZnSVFZdXBoOmNPbllCPlkuRz41''@;'; put 'put ''Q2VmPFlTaXMuSU54VVcpXStEKCIqTnM4TWBlYFl3OUQ0Slhyb0IjXkgoLmgjdl4hKGphVE5nVUBdUDk2Rz1Hd0c6ZG5ebz8/L35Rdzs/fUFAVyJSL0dJTHBzOnVeSGx4fEheM11fUDgwKGQhfWBSOHtJeF9TVmgrU1NgVjM0eHFGW3JZL15Abj1NSW9UV18xNUZZSjovcTBZaHdVP3I9Rzw+Mjg6''@;'; put 'put ''fmRsLi5jUiRZY2x5OGEpc1dhbz5wJnFZZ1NxbHVkTTU+OEcwdnBJY3JrWi8sZD4pezdLOW97ayk4ZjY7cGxpcTVeIVtHO2kiYXFtVV1gJWRpS0MqNndQIXFJakldRGR9PH4lc2d+UFR3al47NC5saEd3LFtHU3opXXtTRXk6ajZxTHI1JF89JlpucmZgajtteVIudT5SUigmS14uKW9YVz8mKDcj''@;'; put 'put ''PTclRE12aS9gYC9NUlRZTyU4Vlh0JThsQ14xMUE5a05YKG5sVUpRMmR0MzReN15hKG4vVmJFWEMpQisjazV+JG81PDl5bkFQaVs9OGFrO0B+RVcjXVU5JUViSWl+NSNqUmtXUWh7cGEuQ3RDOENZKlR7dCZSbylQQixWI0RGPyVaKm1dfnFXIz49VT57I3c7aGt+Ynp+N3BrZXh5JTw0S3U6YV9r''@;'; put 'put ''cGZHNUdzKk1SdW5WIUlRIlhhVFtyTl0wbGQ9PTtnd3dDNXJ3byxrRHJdRlFRalYiNjdLRFg9ZkVdcU1kSG8waz5OW347PkJNU3ROcn03ezE6SFZLQjgvZW44eSJSMjM0fUR3KnVaR11idDVSKEJjMFkoaHVGLyZ5XWZzRFdAdFJxQkgmWGIzfVkuP19WZXsiOVBTc0ZxZk0yQmNaflFCL346NC9O''@;'; put 'put ''KiMyOj1UcFRCdFYyMFE1RnZwfChKTz1XWGVYYSwmNHR1IU0vaXp9SjBCJUl7QHtIb1AjRkF+QTZoYTE+WDxXYWtjfjF4NyFqIjImfnYxMndLbGZwS2N2bF05diFBeEdOWGxfYE9uP2lsUzU2cU1meD9XMm94UkNSUCJkLzxuImAqQGxjdC57T195dXdWVXlyeDJ4K0ZxbHw6ZTQ1RjouaixeNm42''@;'; put 'put ''MzFwPClbIXV3MyFqSEdMWns0KEM0fj4uZyN9dF9GSElzKE5RWUg+R2N0NUdlWSpBTz90Vjc5aERXcmVDL30pNlZJc2RmX0xOXmh8M1huQ3NDQGxpaEk5PENXMVZnfTJVXTpIeWc7XjlNVWhtNTRHU29feHF9T1J7LCFpYjghUnFFNjd9MyM/cVFUZjRxOiQraDVsYjZ6cnIxXmxLNUFwKXpAQzkk''@;'; put 'put ''KUlFNUp1Rk1vT286WTc+QCN6NENeZX5PTjQuRjRiKjc9VlZ9U2JjUCJDXTkxRXAwY3pNK1RUU3o/UE58JGU0OWZxJD9qOl0rVEk4WUk5fFNjQH57fjdfXT5yaihtLHcqdHAuO1BWKEdWMEY3LitMRnxifm48a2M+eVUqTHRRNFV7Ol0jXyNfK0M0VGheMjtWRypSMlQwK2RUU1MuIXNYJnYwRmNz''@;'; put 'put ''ZjNPcTNlOWEyYyRZSDk+Q0gmfHRodVNBLklla3FELkJPaUhJWzlpUUt+LGlpMjYxYjdifWMwJklwZXZHe0wrYixNUGM9LFJfJnJgMW9TVjQ3L3FSUzsyXkBZMyNfcT1obiM+ezA+fWJ4d0p4YW5zaDddMksmL21iRWxhYXhhLzdiRzExQ3tNfWdRcGdTQThjbiFqQWU1JnwhJlFuZE9AbFRteyI3''@;'; put 'put ''d3NRZlp7YSx2OEk7VFN+KTtgN0V0QE8+ViE7P30uWl8yMTQie3xaOTxselB0N2J6NVc9Kk9GUyYjX2c7PGg8VlJ9L05tX29gOTpiRmROTSY5K2EoKUlOPFgoZHw5bGJJLGQ0XmF1Pip2dEpjc2RDaFh3TzF+THwhUXx7SGdEQVpIVkpeSDtvUTslKFF5WEtybTF9XUY5eSVGdmE1JiMwK0IxTlMh''@;'; put 'put ''T3U6L3ZLOUpmLkgsYX1wVFMpT1NMdGckQih5altXPGZ3Z29zajUyey5Fbno7aGZuXVtMQmRhaVJpcmpRM0U8OzZrKjNqZipOVylXdmpTWkQ9U0pPdikiSGxkJWs+MzcpdH5WTzxRRm1CPEJBWmVIUHNUK305S1doKnNTUlo8cE90KkRmWTFQOSt0dXJQbTchUTM9XjNYRmJTWXwsSEV5dEddYENK''@;'; put 'put ''NEpoUWBgbHc7PyIiUDBzX0lUIiRnNXsje0J+TjNWTSVMOFkiNj85N29IZzIucGV2SThLKFswVGE0SnlVKWdgU29HZGdGaU9eZWkwXTxRWl42dH1eRixtSChZW1pvfTxxSmRiOjB6fk5NK3U+UlJLOzVFWSo6Uj5rUWJaay5hckkzREhDQGpXc15lajB+MTU7eD1yUD9YXTlmUjdzTG9lXjB0O1JG''@;'; put 'put ''ZVhPUyVMakNvUDh7WTckXXllVTFVdyVwOD5QRTt+O0xufk5DJTlIXl1iPElTXVhqcyN2ZC4kcDshbXJoUD9rP1BpXkx+XWkkdCkzakt2O3t0PHBTeT1Pel9YVzBNTUw5dDtdaz5sdVdCbFlYbHNfPiUsUDlmUVRFNitVNyRxdzZsdVJJSzIsYmlMRStmbEwiNlprfURkcU1+RDV1PnxiOzNfXi8w''@;'; put 'put ''KHJ3ezo4MEMqdVlmQnlmKmopSzQsUjZUSTN3bmVIY3wqLHRRaElyMl5DOixeZV1EfmY7NShAJHB+QH14QTFLb2xPL2F1V1lDZCw4d3cmL2c/LmdldCIjQkw9eytMXS9FWFA+PlVqSzhoI1FJXURYe0BNTzw5Y2x8XkRNTltAPk8weiFFKnAzMmE7M0ljZk9vbzk+PFNARmk3P1AuN0RuT2d8eSs0''@;'; put 'put ''aU4jY34yQ0FyW3VFKWxsRmolNV80Wl1vOzkhSERTPzVQd08od1NlL1p8ZF02R1p9S11qMUVeQ10xL11odnMwbWR4W3dJX3s8bm8/a1svYV5Hb2opT1tJSDojLyJAR3Y+cWd6fiFtd2MsK21GQzwsWFombFZxcyQ7Tih8c2phekU3QGx2IVJoYE9rbWk1KSpOOFgqbG01UTp3OChFRm4rNDc9VVls''@;'; put 'put ''X0dMNF5dTVcpLCJiNChgb0lzanJIe3FVVlQ+WDpXbn5EajRsRmJhV11Dfkd6cSUpaj8xYjFGYFBNQGoyWWY0QmMuWkdtOVZ6VC46eU0/UyY3IXZiJUIsdEZTNlU7Z0lZUTNrSUc6ZVlAd297Ozh8dFhJYzsqYVRQJCt3WkA0WllZUTNmZDB8UTFqMjh3UXd1KENKLCZxZkNabCIoViZXaStYaXl1''@;'; put 'put ''MV9oU2VlQlRRImE8alNkeX02QFd4Y2pVOk1tQDwqUE1zcFdKPF92QDtqK2BdMk1XeE1zQyMrTXM2WjxGOWJ9JSgyWT5OPnc0c0hyc1FFTVRKZ3ZjfF5UMiNMPkx3eWlpK2ZFMDBwakppKjtWJWdIaXYiMEFJezAlPFZxNkw+O2lbT0I1T2shWnxXeFAvfm1+Yk9dNiwrW3EjTXcmZnAjPlB4aT5K''@;'; put 'put ''RyJVN3lkJXlkTWVodGJ0Z3lPPEQwWDxWeE1pMzNrVlF7dzJWeklGd0dCIXhQaCk9RFthX3NTNlRwXmY/UTVyeGhYNisxVnkuQEQjb2xwbHkjKVtwa1NCVXhHV0Mhfik3cTFGUjBmO2lvSVciTCgjfUc2fTEifHZqNTNhXntrbGxNUEZQIUA8dUh5JF9CR2k8dl9OUjRWKG0hVCxhUkl5VjYvNyQo''@;'; put 'put ''ejIqe0giMm58eTYzNF5sL1BgUWZALnx3Z2owQVE1I1B6Y0hTLCwpbXZYYU5bVEg/aD16Kkh1Nn1nU3t5WUJDcFcubXxSfmIufV14RGU0N15qRyU/NEV5b3w8QyRBdTc2bzpBdnE7VzVGbEJvMElSXXtGa3s6IWBUQEZrTkAzeWd5Z3lganVHIk1Pbzh9V0hwcnFiT0lWLF1PP1Z4PFVuNElJZkpD''@;'; put 'put ''ZXYlJS5dNnR8Lz5xeE9eaTt0I3dSJj5jeGFxa0VAfkdbazouPjNYPi4rSnJ7Lz1zNGlOQDd4JVVDcVVLfXAuPGc7Q1A5ezlrWnBeLmw7cXpFbVZ5JFVFW3tqN3hTLGNpfFRTVWBVeVdQOGouIVp9fGZIc1Q4UjVeWGBePUB4ME9xJS9KdW0yJSFpKCldQGF9Y2tiUmhLJkQ8OSNRMz1mLDo4cCN2''@;'; put 'put ''IUwyMV9nS3BvSE5vQG1ZaDM3Jkh5JjttLls9PyNPbkZoWXAjaXBhVjFoOUAlZD1JOShvfGF7QDZoPXtnS2d6Lkp+dUxpcWZnVSJ0Z2dnQlQ1TmUhVixIbSRHbihPU2M5ISZtI2RtMFFUbitkRFBxZXYqVnhjPlt+NkQ1dXNOV0AsZGhrUWNpKDlKKER3VH1BQSxddFFTfVMmdnllS2Q2N3gxI0ti''@;'; put 'put ''PDtOd3FhQSx2I0VbLkRVUmY5LkdnakRsSVYqa0omQjhoYko2ZGckPGtoZzxHbDxTXztyK3NtQT4hKW9dUWVlaEhrSlFKe001MF84d1d3QHQ2RStbPDNhNVVweiFbKXsrM1YhLDVJalQsZHVePFZxYF8zQClSaSJWIjIrMUhlIy9gSjV6aXZYQzspQ1osPkk0PXAsajJ3MWc4MmJkd3kvUF4vUHJs''@;'; put 'put ''RTNfTChmNSsvalljMGIwdzx1VXFhdD1STVAsdGp8OHFRe2FsKitPbSksbmh6RCRgQGMzT1U4P2dMekt5eWtHJndWR05SUTY+PWVlbiN2XU8vL1plO3tWIjJ8aSIzfFt0fV5uMGU3dldFO2VgYE8xbn1QRkNBKUhIeldJYk5sYFM/cmxFIndAfCUvUjxQN2s+eEA1dmVMWEZ5dlhuYThnJDR2YmVR''@;'; put 'put ''Z2NzKUV2eERnfGBOZio4bHxgfENONTBqTnY2bis0aTtTTlV1YUJNV1JYSkx5JktXYlhVTkh6RzRYdzYsZnBhXTZdSyZJLHBASWhTcmpidnwoXjI4aUlYQT8lU2E9V210bStYZTd8UXdnUHBYdHc+X0w2YmpNdngsOjV9MG9WbnhoakhmeEBwNzFLe01xS0lsIThvaU92VlAzZH1PQzBDMDlPYEM0''@;'; put 'put ''Y3RWKU9aTllmfUIrfnBvREVeT1YmM2Y5QiV0cDdZK0NaYDN+V2Y2LkNkRGFRM2FsKmFdYGNzKVpGe3U1VWhNbjlFODB6dEd5ZV0lRys1KypaUnZAZnddNkNGakBIe0kvYlZjPHRhYDAsQU5ER0BZVjJUaiE/XVk7NVI4Mig6bHVIRjw9b1Z1WEVWbXtVZGsrLnNdcUlJS3tRYWlqaTpnX2VCfS4h''@;'; put 'put ''TmQvPyglUEQue3g4IXhWRHdlTiFxVV47LlgkLEgpPDpBLm9gOyh2XXBrQWU8ZDlLNl5fLjMldTopb20+OEBEcG82PjBUMX0lenwsNykwfFU/KGghMjYzXj48UEovT0ZhKiwsWVldLlFWdTZHUmRkajFrOVkiYk0mbzRlcyZZS3MiTkpER1hmTFFpVXpseV1IbHlxeyguO35DLmt9amhVejFDVGRN''@;'; put 'put ''MTM2NCtaXzReKkRSUDIrdHAhRlpxTj59VCReeDlhYShuQ3FtITwpVyo9MVNyOEk9aXZ2TSM+K3Q9MF5nKFVdKF4mbWs7cnApSzwoPTplWTd+aHd7Ols5eVVaYExqbTJRI3JlIlFOc0c3TmBJK1g6ZWk9UDw/M2ZEU0ZUfS5nKX4vKmxCKyhPPD9Jb2FHOzBtfTIlL1khIyEyPkFxUWQmVUY4QH4o''@;'; put 'put ''XVBBXjFFKipkSCtERHBXaUBETGo4SF1aTSFyZnMpbnh3UFhmPiFvZnJmYSFTNkJNV08wIS5ddjVZbypJdFNzSm5dSGEoUTFxOVkoVVdydmwqcW9QfnxpOT1bVio0TElEXnQ8YHVsSnpwMHEwdDd0MjpgNzV4d2l1OD03VGJbSHosVyhES2g+c0pgWkZVSVIrMGJCU0FKXUA7PzJHQEc9QzJudXJg''@;'; put 'put ''Mzo4V35PJGJaWFNlc01OR203XV4vMkZ1dzJ0Xl1GRVl2VllwXkt5VG1MU0VHPSF2YHc8L2dfeE5eVm84byI2c3hSYSNDMi5xI0UkS2RgVGV4dmU3cmxlR3pyPXBpUmYycjZPa3RmQCI2WWMzTHF1YF81PEdzYDltWlUxL21hfHMmP0VBMzc9XmhZM1J6bXw7W3RhXVVZSXZLV2FjOSI5QDpRWzVT''@;'; put 'put ''cEtTYTUrJVkiY2JlJThFeEU0cVlOLltJJDcvKT1ZOjx2TlE0Yj02RHF0eVNqZGN+SEhoL1ZlJXtMczE5WTJVRjJZeXYvLnlxbWBiKnw9OHZYTkE9QWUpI21lN0Q4PkNaYC90TDIkL0ZzaTxrJDxSUk14PXdrLn59ZFRBMjo5aXNXfk5qV0BpVVl1TWhOOUFldGBJamR8bjhmdnosYmh2XTsjfUAq''@;'; put 'put ''U3h6VGNXOGxwPXVtNil6eCUwOzxxMSZmZD98SFpiO3IkXkAmO241MERdbmdEeSpxeyg7LE4/Lz5lSSVyNXNnb3k7eT17di9ncWdIY2ZIKS5XTXpkUENjdFs6Ji5OXVUyUWRdWDtoUn5iPVJGVGordld9eUBkSEVBbWFvPiNZWEtxTiUrJV4/RVY4KjIrbVJKTGwkTWg6SzQ5JjtMTykvRWY9QzB4''@;'; put 'put ''fSFqaiFVVDt5cFszRV17ZGg7djRfREdJKll1UnVnY088QF9paVJXLGoxRl41cmhONSwjVW9hNypUZl5Tb0BQOEt1KTpZfUY4fFJqWVlXb2YpajdHZUIwaloxakxec3ZmYjxUL3l7XVRIJDArNztPPy5HRlJBRCx3eDkoVX5GR3I8cUI4UTR8VGRLRTg1O0shIj9ZekFZTlppImIpXypiUGF+ZEBi''@;'; put 'put ''I2s2P10lajAzfkk1YzQ0Vjh9JFUxQVskY1hjUmg4L1dqMDAiXkhMOjR1Jl81KDgscj9TdWZSdCgpNXAlb3BRYVJXLC9mZ3Q8RkNRP0h+IWxwZDZwayxhWiNAPzxVMStyNzk0WDlOcUx+UVNBdiIlRC9iOXghPmt1YFtrWzVVeFdHVV18IyR6VmlDUk5VPDp7YC5xd3s3SFp0KSY6dDt0ciEzKmA/''@;'; put 'put ''fDFhOGQ+PlRmTmkrSjk2Ul8jbE5uTjI7V1RvcWAqKUMwfV8sUmc1aTBDTlIqQU5lNVVFQHcmSTRUXSwmRzh6NkQ7Z3NuZDk4TU9odV0rYVBTYTBsNGVeJH52aDtbZ1hQR2tCSlUuRiYySn4zeV9OX2k/WWh+c280QyFULzIxd1smcUcrLzxDS35KPFdZMmNGRzZfbkdLL2ZQd0ZSSU9IaDwsamp7''@;'; put 'put ''Kn5UWXI8dyk7S2UqQmx3NSxadShXe2Qkb0xMbEhhX1ksYkpvRWh2MzQ/NnQ4bntvI3txdEQ8PSJiNTZpTHRlV3k0LD5rJGQzS057cGtWV2NSTGxtPDJ8VHloZEQ4V2MmamoybXU4WCp0RyhARyhNRWVfdHNyZTB8VC9fO2FwakUuaHghUDpuOGtQUnpSXXp3UWk4YXlSfUI4bnBae15GM3ZfMHFb''@;'; put 'put ''LEhlcG15Nzc4P2B3K1UsZCFvPnlbbFJNOX5qfFBMUF96Rmc8PyxOQD1lSmpvUkBwTTtSaEFTdTRqUF0vOzElT3ZmeHFmWH5qYERKVXVffkE1ZjtZQnxRZyJSMWV2fExEYClDTiFDdTM7LEw7bHRiRk1iS3ROcDFLUnQhKHE4WXtaKi9PO0p8YUROJXRUVm1xQmxMYy5GbkdVMTNye1NhcDNXMkJi''@;'; put 'put ''RmdOVCg2WlU8THMucFgyUThUOjF2OXB7RzZWRGdiRz9UdkhVWDR+fV1lT2VjN0Yxeys8bEgkU0U7SV5RJDtOd1N8KTddeiNyZl03ZVZxZisrWmNfSWp6WyV8VyYrOilDVHJrJlVteWA0Y2VeKUBbR1AmUV5XcTA5RTNfOiN9OU44dV8zN2t2OWVrT3RzKUVndm1+PWE/Jm89bz8hfi43T2VXZG14''@;'; put 'put ''RzgkYCgjZiRreUphKjlbJltiJTghPyU3bmlPbFhqeTNKYWxkUH41ZklVKiI3c15JQWVeT3U8UEtZOjJ+Zns8OGx4VHx2NTxoVGFeTl9zUyJTfEl0VlkyXyEiO05mNTxNXk01fjRnRTlHIkRXaykmejhGUnFnTCIwZERSaEheYnZwQmlCWVhAVWF7RUhGS18wRWgyayFodUZERFRxY3teSzZVOHY3''@;'; put 'put ''TkFYP2ZyWjhCRER2KzBUaldmZW83UlVkRlhkbVBYUnxhbTkoZSw2S35bQnxdVn1zVm1xKysuTilDd2FmKFl3dT45MGBKIUosM2JWbnwwbFUiWipvbFcvbiI4QzRjL1MyV1MhZk5zdUN0RSZbLnQxUlVManJHbXQ7RmRaLiViViM/LHU/fEdQPnloY0dlWCFuRzpML1hoYyVgfmxzaC4+QU9rdUZI''@;'; put 'put ''QCh3Rjx5Q187RCJ4Mjg1PjhtWntvemhrY3tmRzx5fVVCeWtPImxZVkRERDpqJC8rZjJEV3o/X0tnPHFzInt9Tzx5a09XeEdzaEJqR2lhdUYib09CeS9DQllYfVVdNy95RU0rcHZaX1spPVRjfFh4eX1xdn1Vd0VLVXpgaFdaRFc5UiFeejd6P1ErKkN+QEhfSk8kV3hdI002end3NTpVKyJPNkZh''@;'; put 'put ''Pk9kVypZUU1NImV2OSlDfWowenpAMyUyS15WSGB2Rz5Xe2B3Y1pMTiVvY180NUJ9RTJ2UkR7Jl40OiJMTkphWCwmd2EhLitddD91YkZlMXtNKDRyZT5uMHpiWTpnQ2cjKnk6YXt5bE19UWU8X1lvaFk3Rno4U0RjNW5tJTtDd11YVHtmYEVIPz5rSEdMR0ciNGRlb1Z0N3wuPEhmeFt0cF06WjdH''@;'; put 'put ''VzdIej12WmVqRlpkLnVbNzlbbEU4cWdgWnZiT1c1OWghaXJHbEF4d25AYSomIWlJV05kN21xKjwyODx0OW1SMkFJZk1qbFlPeEF8KHp3ZGMwNyMhI3dgKWtYN2NKa0o2XztPbHpsOnlxPyE/SHptdXBkMG1nR2NIanp6Mz5ecHd9TEJZdXpxLzJ1UUlMT0ErKk09SElGelA8SWIrOi4lTF5fcEJo''@;'; put 'put ''S0w4cWF6SSZ3aS88KV5fOz5ZdFI1JEQzX107VUY7UnFyPG5HRitJX0xgJCFDTXs+Qy9xTFV1Ok59aVl6JWlQUmYhcy5QNEVeM0lzJTZFUStMWngxS1AiP0c8STlLQXBraVFfbVIwe3dxQytuQllSXXdZSUxFdjAjVV5MPVs1TVBDWnxRczhGaXJIajcxWngueD8iPm8qVkZtRSYma0BbVVk2Wmhr''@;'; put 'put ''SzojKnYsaWB6eVZ+dncqNERdSWd7REFQbG1CMCUjYTVKc0NHbl0oPGw/ck88SnRZS1FBUitqU1IqTDtXcEZ7cCMrSl9lRVk0dGhBKmFpWSlyTGxgWEEpJDpXNyxBcixIOEE1VmQhPXZAIjV0PVFEVzE3emEobilVKFNAK2h8fW80PW58UU10U302TDF8djtfR0hYe2E5VDE5JUNeb3tWSng6IS5S''@;'; put 'put ''V2s6N1lpS155U2dLaDhvP3BZTVlSdEVVK1IzI0gqJkArSGF0ZisrWmMsdDUxTTI3P0NOOERwYmYoe25hfS9fNz9RT1lZSXxhV1dXRXdjfUBqfD1gaGRdVX5dc10pKFpvVVZZbVdpLnJCPj9gVjkjdnk2fDNqJF1LIVVXTUxiK1R7b0BVOylsLzBjdjZYQS9+Rn5KK1NQN1VvfVBeR3EsKmosOHo3''@;'; put 'put ''cDB8SF9vc1lpKzQvdGVIOnRlY10xJncpYy9YM2R3KFtVYyJmfnd+I09jIlFJIll1K1RnSGdKYnZjZSo5MzZ0aHw4d2U0KitPOEVPdUBTdVMvfmlZb0oiSThHSDA2d1diWEQqbTZrIVhmNSVFVGExXUwzeGRsW1Q0Wi9odnl1VUx1Iz00aXRyaEY5Zj9IbndKUUMrbDBjeDtSdHchdDIjejYwXzJL''@;'; put 'put ''Q1pNdjxAaEhVdmJ0c0JYb0p0SCtsOmE7OV1mVkpBWDEhZW0layo8bWNzU0BrT1FZKHQ0JUVFO0k6Tko4VCgscUhGOXxuJWZwRzt4YkNVWGg2ZW02eD40MW02eERsRWxCeDYwXzJAc0YvOklPPEpVd1VAKTU2eXVMZzI9Pz8/PyZOcE1Ue0JNVFU3SFl1KDRLOyxfNkYve05WZXgxS31XbXI2fD9Q''@;'; put 'put ''ezNESnlWOHZpT2ZKNkUqeUI7fDNAXywpKD97W3pfcHxGa3cjXyVaLFczK3dyQzVPXls5OTxuMHA+TlFEeCQ7P004WVRSMHZZei8mak9bZ3AuKjlQVWxkXkwpaj9TIjYoOWZXVGg+OipDWFA4I3okKj4qYjhyakludS9FUl5oPUZNSWxTSktTYWF2RUYyWXg2OiRfMEJLQ3A8cjUuT1s4OFNRQHNX''@;'; put 'put ''bU4uXT9vQEQkTDhWeERdTllpVGI9O31oQnRFZWVqTE9SKCZfbSYlU0BRI3M1XWU3ITExRSRLemxaK0tJajcqTGEmKSRPUndYfGpeM3gkPFpeWnhhOyhWZCEoL1JwTytObVJJNyo0N2tGIjJkTG9nQEYpdEB6WEx9cnVkOil0WyE+dHhoVSRRYitnaW8iNi8zaDNQbDFobFV7T3Bwdzs/dix9XWEp''@;'; put 'put ''U119XXo/Tz5kY1h4JUdYfUdSNT88RjtoU0VJQ2lYWH1wRyJFOGh3ZDcqL0FFOiMuRmtdZ0deVCE5ZE47alU5OE1GUH1jOGtLe15eb2I4dnk0TiolOz9uYkxhRV55VHxDNlV0b3svIzMhOG8jVFlLLmJpWG4lKTNTdEZxXiFjRnB+bUJUUjIpJENgbnJsWFV7KCs3eD02LEVpXit1KiVKRmcwdWc6''@;'; put 'put ''MGFyNzleYHw6RmpERUwkTUtZXWU1WFRvaVVffXVWVTMvRkBtR3FRUUZmaUNUOVhfSnNfS0YoRXBjZFNoRH54WF5UZX5JKUI9QmIrN3JgI1NmInF+LzB+UipCTTw6dngpe00hWyVdKF1QPWt4MC9ZRnd4QH4ocCJPb1JASnYpfFV1VWU7aFdoSWlpWVZDQV1VWmppRkx7SERLYyx7NDpWUlVjfG1L''@;'; put 'put ''SkVNQltoUlE0KS83KkJ5Q3xidyhdOV4zeDkjVENGb3htZzl8KDpoWSJhZU45KStII0dzIklHPWlVK1l3dFYha2paZnFsU0xjbzhAOFZUS2J3cnIpZllAV3oxOVpjMERdOWZsWklnbUN8STZENkQiRG50fmFWJUlGdzRGNnI/YiM4WEo5ZEQ1YzNUIjYsNDJfflElWUJ1T1VLbCVlc3BOUmNLMl9s''@;'; put 'put ''Pz5sR350aElWc1pRTHB3a0VpJj5nbzl6b0lFRGhMRG8qd1doWnpRYk42eUJtbFJBLix4byE6VzxrJkB2Y1YhY311Nm8sTTg0MjclbkVIaGA6b3Vld0UkcXt7b2whaTp0c3NRQSt9P2NvSSlhang9QDtDbToqajEoeSVab0lAZUZ1LGhKeH1rSnN3RDYvKG00LmlJPnkmZ2pERHVZYzh5Qk5ZRVBp''@;'; put 'put ''R04/di8kWFIhdSY0Yn19R1k1OGtIc3R3SXoyOlNLW2VXMGdUZWloYWlRMnUpNFZzJlpRZkYsWCg+QCwsIUdCQjgvPnw3Qng0VHNvRDUvdFJBOVtCJVtIKFNZK2RKLnA4bVpMeXFyUFZIKzMqcCVALiZWczEiJnBYPlBDLkgvJX18cmhFfi9LLjY2Ii9AKm1PVzxNUmx1WDUqan1Fe2xIZnIhWmlV''@;'; put 'put ''OHJlTnUuW2BpdHhzNCl4MlJxa1VFWztPIXVzaFc4XlhUaEV7bChydHM4MStrazkqOW1SQ35JNio5biFRdjNaW2ZhJUx1PWBxUkU2VVtuY11uIiZRQy5bfHJoRTUvM281OjZmNmhiQTM0ZndWa3ZmNilBUWoxa2NyJXVgMXd1NGZ3WGUsSk9CUE95dnZueENmRnV3bEddMG5xYEx5X0pSWjIzcywm''@;'; put 'put ''ZX57UmZMelFZemJka0dnTkdbTSwzaGRWIX45a1k4eHlxe35HdXd4PlFScVhlWHgrPFQ8UChITmBhOCxWITVLZnxiI3x2aERScVhBOisiI2pLeTl6Xm5abmUxUTg9KDtfSTRbOm03RyVBZnMsTmVRbVhleX0mXyRpJF9seDcpOns6TXg6fkpmdChuMSlUTldZeittXnQyVFNEMzBYaiYpfDYpKlJO''@;'; put 'put ''WS5OYHZSb1lyOkN7VzFfcj8wdDA6NEVfZzY4aClWVzcrdyxDZFpHTWJKNkFpQFAiQjgjfEh+NSQjclBgZnx6I04yIUxfWGdqdjM3bTAuSkg4Jn1NfjFIcCEjQldxYWhlYDdkVzI4PmNHZFBFdn1rWWkpRF5qZyE0bHVvP3BGO3tNWXB9LzhjdzprNzo9eDp0UUh7SDpgdEBVRiY8RUwuNGYvS0x7''@;'; put 'put ''NEFedG43dls2ZGppZTFlKVpeSGQrcHVyQWo+XzJiVyZeWyNmbzZfbEJQNTEpN09yU0BLQHhNfElbRzhITUM1T2B6MHshYjs6e21TfTZdaDl+Y2YsKipRSyxqUz9PPz1qRmtrbVVURFZdISQ1JV1Cd2RMUTFCe1FVX00rYCYxLCQ0PFI2fmdqPFV6Lmd2WDhCKnMjNTtAeC9JLD5gTzdLWlpSWGo/''@;'; put 'put ''VFR+IUJJeDEsfjMpS1RRYWhbYWpHNT1SYyN+cXdAX2RKNllnL245dmNNelUxL3AiTF5wamlQSXtNWEs1KHNRRF93YTdiQEUrQmM7WUJzM3puSWp1MGk2eXcqfnh3eyNzUWdjJkVrLG46SnIje1M2T3dxYSJQZkdhVS5NZVk8Z2VWKVhzdzM0VGRDTlRSSDpAezlIbztrWCUqZ3hJTFNDLmkpfXhk''@;'; put 'put ''d0BzXTgxXkBDNUVqaEVJSDJ2WlkrRU8xfFV2L3g7KmckNDN2PnFtUmpCeDRYZ0dMPWlLZTYlSCtLWns6bnxmS3s7dXA0UkdQZUcpJlVnSlNFYDMhZU5jKEZ+NyNaMm1WIThIYXgsV01DZH5pPjNPZkY9LClyUTAkZmtIc3k8JTpka1dkUmBhO1k5PSwkW1ZJZTp4Nj14ZEg5XWw7JFt4MH4kLD5z''@;'; put 'put ''djFbdD10e3ZtZ2toaUEyKn5sZH5pI1hya2Ila2xvUVhjK3FaNyRbfSlBXlBwOSgkV1lES2lsciZfJCVeW2trZ3ZkeiZoeCslTTd6UUc1elRfNyFBMERkJCFlJiVWYDJ2PHN5MjExN3V6U2pfO2orYnhiNUouJCxmU3dsJn0sViNRIURXPnYmcXNJZi5hfX5UekxMT2x9cGxqNj5GOktLNVM+bj1p''@;'; put 'put ''aHhXTSE6OSMiS207fHNJdV8udW0xbzZiMytXJCxsUzIiVioxWUBzSDQ1dX49P0M4PEdwe3N9UXR4aTwmRSJlQU85LmxEQUlXQHE5MF8pVXx6Y3d2YUcybk0/YWRIKXo7UUZ2NUVZenlZXyh0TSNHXl5xeDp5YWI9P3ouWG9MLzxlUEMsMH1Gan1xKyR6US40OTpRe3FManghdW10V1p1RDV2fDNj''@;'; put 'put ''UFMpRXdgV1R+JTNORFlUaXVjfU1MPWY8NDw3eVZzNl1AUnZUKl0sM2U7dEJFZVBxTz4iNXRZUnJoJiRZUllWJkdxSzRpaFN0MT4oKmEieCx1JXRAInRSMixvYz9oJldOcCpzOkZmSEAoJjQ9dnhXflhYS2V2N3BoSUpEKk53R3pXZ014SFtNP1o3ejgwXTVvPjhYcnU2YztuMGlOWWF3fkxCR05B''@;'; put 'put ''LmJFOCl2fSI2IlM2P0B8V0ZdbUFsMGBiR2gvLlU+LFNwcDxrNUYmdTdTQ2oka2h4XT9aaj9kNDArfTdJb2F+MClkNVcsZURgLCh6I2pqVCsmTzVXKlM3ajBEV04hRnk/aVI0ekNdWF5faDsjV0tyPFIrU05TR2dbJk5RUDhwR3UmLzleOG9BYW9wTEtTRSNhezZuY2Z0ciEuJlliYmg3PlFeUFZG''@;'; put 'put ''O2pQPnJWfkt1cjJdeVovJlFVJWJPbTEian0oYlRqNHJnLD9fNkZybylFdiUjazVsb3Mzb05BMG9+VV1QREIsYVt5VUtvTEZWXVtSbENkWnA2UE5pbWFOR0xsU3okYnopWGhXdU81YVFlMSM1b0p4cmcsP0tJfCRtNl1nQGlnMkx5W09hbUlqc0cmeC5OKmozOlkzUWQ5dy5WKTd0fFJJKCtOUysj''@;'; put 'put ''Iy9PeDk6ZzV3KTRLTyV9fUksaX40I2Yycz9oVmczP1RyaDx0dFJAN2ppcCxzWEpNLlBGekB1RnBUJGdCKn5SNCozZyM9Ljc6fUQ2Qk5uTVZ1P144VkRJcnV8SSEyJSZtYlR+Zjl1SjVyPzszbyZJaDI1VHhURnBdOlVYLC5mIjB6NGBuPXZsYSVhUDdPVTBnak19K2c1P1I+Z103Tjw1angpMSNL''@;'; put 'put ''V0d5T1lYOUJwVmpaLDVsTTo1Yj4uIiojcFsuKVtxRig0QV0hQXRWSEklTCxNfjU1ekZ3NiozZSpNMSRSZ1gpTjdAPCxqTVlvYTQpeVchY1pMZk9fLHcrZkRMZnMpKzBMKl4zbVEkVWMxXXUpWFRpJUM0Y3hpbSpJYWg1ZlBZMzoxJTh8d2l2ZT0zYXsxP1BbVTc0OS5LUSl2SE1GNnhPeEUqODVs''@;'; put 'put ''WTZoVnpjb05gNXNvbjFCLyhqWFEyNnZaMjY1Yj18KzpGZDZCKn53fjNhc2spbihMKFtSPWE2WmNyNygwRXM1JClGVVRRSWB3RXl8fEMvRThXeSFwQktdYFYqWyhlPVspP1tpU3Y4dzdKeHFhOlNNYkQxPDpJWmYuLkQ9XV5Iay88eiY4UThlY1omaE1EO1J9JEdfN1BQdDBUdlEwSHxJWHl6QHo2''@;'; put 'put ''c0BSN09adFg+QjohOVJKfU04VCwzUWImZHYmfmFeVHpdNyh3fEpJSWQ6SWdmdkdxSzIhUWMuYT1wLHZwKyVkVyx8NVY2ekQwdCJhNmFhYWs4e25VamFhaGNjSClfNnpJTjwifnh+RiJMXUM8P08rMGI3TEB6PUI1dmp6ZVRgOyMiZl1nRH54P31QMFdWMSRCflQ9dXt+VyNIUUpQMitwLCJnR01X''@;'; put 'put ''Y3hlUyhTYk81VmF7WDssX2A0Q3pJKzZ7SGo0VWxUKzFxWWZyW1BHa3B3Wil7MEpZfnJDeFZIezldYzVsd3lATUF6MWpAPlMwcEJHajVEV3k0Y2Q1bm4wcD8+ZGo+IndSUkB2UCwzODc7M3g9OjshdiN1d1IxaVpnWiMyNjd6a2FVektyZHZOdjpATGhBZVQ1Y0B8RWBIPWMrIn1JQEJJQng7LGZy''@;'; put 'put ''KFp7Lj1OWjc5KkBsWlJ0Wl9HOERHIkdLMDtWRXw9SzdybEd+Yl1galAseys9U0QxckhZckpUWnJ1ekh5clozemtCXkV8WzM9VDFTW09lTmxKYUtRdXRgTzdNNDVsWkZHNzs+fGhtaj9qXS5APjs4Xm4lKiMwUlNNdVklRVgrT0h7bGNpInYlPiRsbF0iWzdmKkJMVH4hK14zaDEvQCRrU2FILjRY''@;'; put 'put ''QSNvSnM0NWdQMWQ2Qj4pLGhvSHRvM34pNXRuKXsiL2M4YWM9P0xWIUlmIWY9cXkxPmhjL15yI0ZsRiJUZV5gOWdsXnJSSDpLUT8sZi9GaX1xVCZHJENMbTxZMHZQU3JaQWtWcH4veyI8R1B5MkooV35uUEJqOz1CI3hJW1glbTQxKHo3PXZLazpTUyVncXU6NXIhRXo0d2QrNCVnbTIuOmdJe2Mz''@;'; put 'put ''OmxIQWE9bzN4MENbTC5belVJbUNTaVc6NG8lVWlIMzYqeT1YTlIoVUYsUD89RSE6KUs8bF9RITN6YzVmV3VxRGE6bFMrb0xxdXxiLEJKLDBEIkJVNCVXdiJsKVZ7NnlSaGVVTTB6dnM4bnVhUFQhQ3VmKVp4WXg/Pjp1XkF7QlkqY2dTeSY1Qmg+JD0/TWdsKVA/bXx1Y1RKZ2N1XyRyamNMSiJH''@;'; put 'put ''QS9EI1hIfkosU3tKeUVjQlZYT1FgYj1AOWJ3dWwpO18qY15QVD9mYy9OIkdEQGhIXnpgTEpmdUR0dmorW2lHTmYpeVdzR1tjZVMyZEtpKShXbzZ6XjArLEVrVz8zVnQma3tjeyVbTmdrNTwjIipRJmRQW2k7QlA2OGgjK0I9RkVyMXRIOCRLZHpHKTpLNTU9SmY3JiRWaVJGS2VxJUhqeEdSbFhN''@;'; put 'put ''PzpyJHNGQi8pPXlEMkFkW3R3YlBocF9BLi4qM0lwcEZuYTFeeT4/KHllNT5NKlBxMURLZmZPMWl+Y1I3Un5SZ0V6NVtFdXZZMm91R1IvRGs6aDUkZFFqOVlVL3drdkM0cXxiPDN2ezFaWHNjVX5KYC4wbTl1SGl4Q29ZcU9la3BZNXpvO2hvZ1IlejgieVJTYlYpeDE+ei44RVV+V2dxVkIlV3l5''@;'; put 'put ''YVB1dz9nblFVMXttMDtYLkJicjZmM1laTXE0eWYjbnZJOVV7flJ9aCpqJkBFSUFXblI0T0kkZShPOWhZTUdmI29+NWIjaGxsViJiLG9+WzdXS0d2dXsseilLaShddj9XfngiXUNkY0QzTnR6Pjg7c3g7XTdLe1NMNUpMdjUsM3VUdHohcXdkMT47YjoxO3ZmZnFWbygmdnpgUmZ4VHAuMGt3M1tr''@;'; put 'put ''VF1SaEQoKkhhcURXOiV1RSpdInhgcSYyU3pFUmNqeWhJJENAJGopa09haD4vdlUwLmVONEdsRjYuUEM9QDBHUUoxTnFpbjYuTlhCKnFmbVpMZW9IdHduIWZBYyJFaDZnbH08QHRRWHxaOmU9Km5vQDthQjM3MSgjSCh8V3RJanBQXkJSaEI7NDdJaGtpNzk5eClkITVnfispenZGdmx3UWpae0tV''@;'; put 'put ''Z0dQdio1azFQWW9gaGxTUmVDaSZ5UUJdfXRAPF9RL2EoSjRFNi91Ql5ROjEyQzYvMkJsRms5ZmF1e14sU35dQmh1OTtGN2A5e2o1Lyk7SDtTUjRVN1hndCwxWDtCaEdhczNeaHdsK3x4UFYzanhNY3ssRChwdCxxfmEqb31lRnE0Z2s2T3Y1WTdiIjxnaSMvRCZrKU93Iz5TM3V7NyxraFF1QX1v''@;'; put 'put ''fmJaJjVWUHk6SVVXbj8vQDdecXtaVS9vfmVMOksofFNMJihrT15DJENsbEBiP2hUMGZbMlhyVkl2UjNeZWIlbVtwLjQyWV4rQkIybC82VjQrJWohJThjXy5dX1tnWVRba2JudUYhOkNQTHohanxiamtARF1bNH5mc0x1V0JyJFNwfHxddW8iVjx+YlRlMEhWWjw+NVAkZXcpYT9TQHcjfllKVnFr''@;'; put 'put ''JUFHI19KYFg4Lip9aU5ub05lSTN7MCF8Iih0OWhnQTRHOEpwViJoeG00c0J8ZVklQj5lZEpOX0ovaCx9d3NjflZZN15OV0QyVGsrfiI5WTl3Lm5fejghXUtRdmowcGZDa2pvLE0xOFcocVczSz9rOU5gdTF0d0xxVkskaUAwflJpVXdAPmw1dSFjJWpnMDcjYUVaOnZwOD9UWFZqXSZuJWRoJWc4''@;'; put 'put ''b0B9KUdfQF4uamglZ1AjaUlufClyN29GfihLV1UzT355ZkR8KWJUZD5mP15vVlZgK0k8dDFxeVFGYT90VD8wNGFMJH48UT1dJV07dGBHOXx3QDtHMl5IRFttUXZQQEAjSEc2X258SCFKOjVhPmFIXksrTGwqUEw8PyFdMDx2L2FFU2pdQ0IuRGl6X2ZEOUM9QHdmQnw2bHZZenFfTX1mbl1CRmJJ''@;'; put 'put ''NXo6R1chYjFddlpCNlsrTkl2SV13OHdiMmFIWiwjNlVBN3U9KzRzd3tWSyxHLG94S254SCZkfFsoOCZdfFpDP0ksNVA3QEFeXy5GX0tZPStVYTVWRU18IkRCV3xrL3g4dDhYMEBWPSRHZl5PRnxFJjtbe05LYFp4UDhBYXJVKHlkKHpbWnhuRWdDekFIRVJ1aFVzMypWMFBPUDI2YDwkUThaNikm''@;'; put 'put ''OCRrbTJFO3AyPlouTlo7OVAqeVZzJm0/aywwbjpOaz8hbmZZYXopPFF8TFFYTi4ra2xsTn44Oy9OVGFnO2RrTX0yUEpUeEAkOHomRmJAYTpLckQraGVTTy88bzZ7fF5+SSxDbnBbaypEOipbaCY1UiV8YGgrRjtVNm5bT2wrRU94KkhEeGlMdlFhdGJxblRURFpzQF0uMjFsaF5jPiQ8VFl3UmRM''@;'; put 'put ''R0VPe2ZOVEpRRkNIbXlae28rOFslN2RwU1M/akp4WzM8aEtmUkZZLE1uUkdYJTM2Pm9LNzhvU3dITG4vNzk4OFUpTl4kaUBCL3pQbjY0Z0xbbklIK0d4TCRnKXBeLk91cUB4NzxDaHV3eTFAK21xaXBpUDEyPENaLkorfGhONGFZXS9VdzAoNEUvenhNUylPS2pZLztgS2t1NztMPDxFSDJMIlZL''@;'; put 'put ''Zj1rV0NyKXUwO1Y2aVowMXhdMGwhXyVIUkF5QlBQPERVaXF2MC8+UDk8Q1o5SWs7fmI9YTspSjxyXmhlTGc5OXY0XlVdczhkZVRSMW0oOmQhXzk2cXojO1o9KWhwJjUkUShjZW1iYzlLcXR8PW0wcj80ZSZDOHlLeiVeQSROPl9KTjFLN0xAYCk1a3YwPXYicEImSUZHdjl2Mi91WD0pW1tqTzQx''@;'; put 'put ''b1s2cW5qezV2PFJuRj1qQkA7N24kSmk7IypUYnkiLyRTYyRUbjsuL3JVbD0rfEBAPDtBayNpLFY+fD1sS2tlNiYldCpySGx4ang5Y3pZPm9wcFh1RDNXOUUhWThzfHF1YDAzWTo+Tl5TdGF6UndqT05rOWpbPlIvPmFBa0EwQSFTTlAyL1hMRzZSLzw/bGg3elRXYFEhamlmWlU8JSFOeVFrTGF5''@;'; put 'put ''bEVnPnojVXRUdFI/UDVnSkg2O10rJGgrRitMOE9BaDQ2LCVKNnc7JGEuKX04XmUqZnlmNiVJc3tbVyxxRlk1NW1LPFJSYGc4S2gkd0okT0piQDhrRXdCMks6SjtNbyUvbUVOQXxlTm0ydHFKQE4hejheLHhHI2F8ITx6bls9M3xQbHl1eyNgLClAW3d5dXt6LmU8KjMwNl9WajBgJlNoezZBTV0l''@;'; put 'put ''dG96QG1JXSRRKnlSZFZYLlNSX2RsfCUvK1E1U3JkM00pRUV4fWpGakwoS3BVMn00TFdVNE1mJEMvXyJQbXkyeiUxY11YMWVmJTo+Z1FSQjE+Zm0+MCo+OEQqOCE7M0h4W094dURMZjF+RExqcEJ6WSp8P2xMNjx1fGpJO0ZJcEd9ZTVHSktldmdTQTBkLlI/b2YlaHwlZ0ttLGlvZj0iUltIbl1s''@;'; put 'put ''WjhaJHgofDhkNE1lW3pEOEg+XnddcVs1KjtoL1kmPkhyX2dEUkQpZlt7WUo6aWosJSxfMWBWNmEudXNpLmVCbls3MnAsUCRJMHB1QDtnZkJdaXhsczJYaHZFeiI2QlhLRWhaaFJKKz1bSzd6YH1hOU9Vekp4a2xlMl9ALE9NN3ppUXVsYGhWKjVBW3JHTUlYaGwsfGcsTjFZPEBuSHExO0AkT1NR''@;'; put 'put ''JHEvbS9oV0lAeVlNYzFDWSpzRF1VJTt5N2FDTXh2bXBDWVM+NzEsQHZpRXRaZ2c6UmhQZDx6NyM6MipNU0lQeFgvKUBHPXhTSVhSVVJoWyNRRUcjJnB9OnEmW1J6KVBYJXw8dE5kdWozRGAsbWBMcDxwY20mcVFoIUVgLHxNJFN9USp8Uj52XUREQlhhZ1F1a286ZDR2OUUwYSNhSFpFVV9dUGcv''@;'; put 'put ''PD97aFVvfDovcmxHdD0jTVFJWE41YnM6ZWkxISElZiR4O0JLdjQqX14pKnV4Wn5mNj14bTU0Wj9lMSs6bm89bzVvbVVndCYkeCJHU1BULnl7Qy4oO0ZqMHtOeE84RTJ2RyEjd200OGdVe3lYMnZGUDQ4M2dYS2slfHlHLnoxeXpmNU9ea2FOZX06RXw4X25vaCpHP1YhM3p5YVFbUVlCfEsoOF09''@;'; put 'put ''cComJX1nM3M3S1srelAkRTAuXSxmMS9kcUE9LHFgLC9IZ2J+ZDxed3FhOTdZTFtRcUgzN0dmdy9nSixLQV5Edi4vSjpvZmJkbjJoPEddLj1sVj1wbTouNDFFNnhIIW9dQllmdXIhL11tOnpdXSlvL2J2eHZmVjwqeVVHP3xQdmFPPWckazxeITNFektvUkBpOn07OT15SWpBVU9vY0A+KCZwLGR+''@;'; put 'put ''MVk7YGB4OD1reE9PZ0pIUE98ZT1dLzR2PzMoNmdCS1Q5dlo+cWNbU3REb0FHX1U6TT1wX1k0KEk/PHYjPD9nOyomcmRuZXUwdy9FIjczI0lLcUtxXis0XzxlbVBad1hGIzYuU1UpWkFgPW86MDkrQFtmO3MuV09OI35MRip2K0pOXUNRXnRpSztjalhma3g3OE5kJCNja11FQWFYSG85V05sIWYy''@;'; put 'put ''VmpPdjN1WGVhaCNZfj0oZUY9Ynk/bW1bbVkqKl5qSVpqRUk6ZmxCem55bVJAbTQ9R1kkJkNUTSZOMCRTX210eVI8fmd8PlhKZU50VEQ6RWsyNk0/OV5BJT5yd2g9eGxCOlhhZH5aXSxoeHxXKVVlZ0pqLFpCUTpAWGtVJkQvS3ZkSEF4TDNVIyErYjtJLmllKXIiO2ZdOF1xcyJnRCtYdzs3W0kk''@;'; put 'put ''N3Fod2FyPmRQdn5sNUEsLjIzNTYuYlpheChRTHZvLCVqISVCPEgrcVkmL1YkQj40K2lpalB5YDxjdH5ZKU0/USZHKy5OZ2FiPUJ3OTFgL0Qyczx+VyJZfFRiY2NrMUciMj1JSnZdMG82NSw9KDpxYlg8JUZSVGhhN21VZDZnfWJbUDM/PEtsUTVuc2JZeVYqN3dVUDJTbERyRWtFU20yQyFUL3Zi''@;'; put 'put ''c1FdLGl3WWlUPk8oYUh2ez0kLikiODMlZDVfM086TllwVC9dZkpuXTxiJiVZLEB6ZTtCamBnbDIwYVV6S3IxO35fX1BQZl5PaDg0Ky9nTDloNkpEUnk+M3ZZSTUvdHs2MVhFZ15NbzIrL11mQzlQI1k0dVU7QFRJNkwlNVc1MFF+WVUzeiFxaWNrQlBDTUI5Wk0mb3B9QFVMTj5IelJNNm9VOUYp''@;'; put 'put ''aVpLJmVQMU0jSXVRMFg+Uzl0eEk/TF4waytxR2VEQGd6cDU7QiFweT5xcHRYKXR7XnQ4ckQlJDxWdDFDfDJnS281SzQjUyE8NlZxMmxXU0lYdigrfm97PSohWG5nJFNvQTdUI059bjw6Z0FVX1RuOjMjbmEvZ0FvNCs+fm51fHxnUXRTWXcxaDNPQTFONTdtJTdDMztFblU6WWRlI3xFM3Jwe0N7''@;'; put 'put ''QlhtPzs7YlNuVEs4Zk01bHA0fFJEey9uNjdffEN0bCtpc0ducTRJViE2eEx0cUBRejohUzI0Yj1FYz5mSmgpUzNSSVhKTTlDRFdIN3kvRiJwRHpvM1NJWGp7ImU9XShjVHVNdWElckoqZHE2W3YuS0xbTXF5JmlsSFYibStWRG9rP0hANm8zNi46W2s3c3FUVS8lRjRMcmkzKDZnZEcrNFROMGlB''@;'; put 'put ''Zj1dYlh5MVg7I15RZntQO3lMWTd5e2EmPUJIXUBnK3hjJE1pKCF8djAhK0NXKDR9ZT1dUDJGcz8/Nyg2Z1cpdzhiWF1MXTU6OCo5dURwb0t6bWVpYGE+YCRSPXZSRmZLcipJO2RzX3tIeVJHb0xpOkVXaV4+YkJEPXxLcCQoY2FoKEA9aFNEWCteQG8zJHllbHtlSmZkengzd3YpLDgyTDc/VnlU''@;'; put 'put ''VmN0Z2ZGNTdWLyE2RnZKKWgzY20xUn5fbDRnXVo7LDdkci4vRWs6U2M+KkkrZCNdO344WEI7fnBbPS86V3FybGUyPGlORFFiImtudzlhNixSdSR1aUpQMkU7eDFLZVlSMixbUjJOLyM2OixqckpMUz9xcTBocnlTSkVjZGdCeGVTTytyUXV6W21zcUttYHVoPDREQSJRREZ8Y3t3Vl5nZD1wdlhf''@;'; put 'put ''VXB6JiQmeldCTFojKlV8LnNAIjdPSFVHOSg7fChkW1kpYjNSUnNTNF8sLGJmY2t5WGVyIypKQWJdVmBQekByfHxWRWZBJUw8dHFkKz0uLG5FJk46TH5SQjJwYiRJIUxoeEFrQVNZYCIhLFAvIiIvfGM+bGRacSwsKSg5MyxZN1ZBa0Qjbz1HMiU4LEwrTTFmazNOdUojS3dJNkxoeHQ/Vm5vLHFE''@;'; put 'put ''WiQjV2xKMU4laWUyUTgmdF1IV3EoO2NAfTMralY5fDwuXXc/TDlqdCVfIXJ7QkUqP2x4UiE8QD1HbVR5JVVCTTpidisyQXk8UVhvOVVUVmNYI2FRdjhpVilnbTJDMXhDMTd1K2dNOE1eWiRDJVV6clYoPy43ZEdIO298UzxfR2YueE18UlVrSj5dSldZcHZCTiFOXiZ0VmV8TWVlNTgpI1BYOlN2''@;'; put 'put ''OEFiWjhTPiFjT211Y1QmRV1KRGpAI0xoMnV4eEJBQUEuRUFEWHN2SEhQT2ljX18uQD0jfEsqQiFHOmE8TmlWZkpEK3ZPVGpedkFZRUFBQUFBQUFDImwlJiNiLn5fcy9vfkFHfEwhQlV6RGxTWDJhUGlsMTVPYEElWS5tQzlmYnNINDorKllMT0k1VXQlWjByTEV8Pm4/UE5YSjVAaHlXWUEpNXI6''@;'; put 'put ''b25pS2w/XW19blV+a05lckM1djNUUTthN2I2aiwuMkFWYT9BJEMmRUhwSn42fiRWOT9wM1Zgdi99Q2B+ZXYqUmVgYHBsVld4JXMqSWxDRmxDUWNON1Rbe2FlMndNYSY4ckheYW5Jc0hEZzg+Ti9AeGpzNz80UUxNKlBmcWpDTzZxK1R2PUQkSkpuYUVlUU9AYlc+Kj4uOEBNQT1TUk4icERQYSJh''@;'; put 'put ''cGY1YUM7KTclPkt5RlhIXmElXz4hTkRKKFA/RiYqLmtfZHVIaiZHZCE1Z0cubUUodENxPG9QcXhFbks2azB8cFkub3xWLlQiYkZCTyFzIkBAN217aVZGX2h1TyU6U1B5enFfMWZpMXgxW1spSFlTaG52VnRfYi9+d3VHeDpoKHMhRUQxYSkkUX46Y2IoNzhMbEpQYG5xdTBjLHAkT0NuTmRmM0VV''@;'; put 'put ''SzYjOGhfOEl2RkY9VlBpcVhNW0YoUko7MEdNYVBCMkxXJSNUeWNwXTUqQGNAcCZUInV4X09GdjFxS0phSjEuKEl5YD0hbFlYVHQmVmY0JSYpYlVWZzI+VWNFN013WkR5TUhJOSlkMmMyQHNTTH57bypMNHk5NmhOMDp6KkE+d3JkJS5jJDVPKE1QRzg2fU0zV3Y0RVA0NUdMJTJSdmoocCtXKWFx''@;'; put 'put ''cUpMKVcwSTlfXzdpUE4/WHt6bislJkhnaD0wMyYoTixbfjd1cW0sJXpLPGM2RUVOIVtVODx6UV9UZU5Fc004LGpROipjZy9pYXJlfnouUSNeSmhaaG9PcXU8WDx2cCs2WEljYW8sPlM7aF5JPH42UWlsJkwuZlQ6RGFYZn03Rl1mQ2x+M05KQldTQkJQSFc+YCZVOHxbMEJScSQwdyl+bF5BbTRj''@;'; put 'put ''K11tYkt7Ul5OcXE1aCQ9VHFQYzA9Mm9GcyxZWk16TklSWit0ZjkhWDd5fU9ecFBEbC9DM2AzVixyc2JrdkMrJmtTS1pUI1t7bVU2Qll3Syw/Y3pAI0NRfU1NSipWXTR3TElVPH1EMGJzc0B8aEJdTF1SKGFYMXNAKTMxRkVSQnFyUT1PKmlgaUE8ZCw5ajRpIyxLJTlhSUMycF89ezlEPXZvMlNU''@;'; put 'put ''KUBKeEBjXjZARVMua2FbJWlfQVgjTCh7RSIuaGxxWV4wPzxueTNSPzI+bk58SHhaJWNtJDc9RFlvWkx7ayJPcTxLJT9OSWZQd017Vl59YSFsPygpQj8oIk1pbT5BYVtvTmI/aEhHKl5eNH1YfnVINHR3XiQ0JH0hNkpzcC5Lei8yTnNqez4zRThDW3VWTTxzOTpxY1FeUUlgezRQdzdXanlybi4w''@;'; put 'put ''OD1PWkU7KHMpVSg3Yzo+ZHxUWmtPeEB2TEE1SS44M30wJDAlVVJuMXE5MV51KyYwUy5JTHtDPyxOdzwieCJraGErK3VoQkVkYCkqendETX1GaDRNZDN7QzY2bihyYUpwdjVFU14wRm4mWVZwQUhdaDFeNStub2FfXkleW3FeaixQOGU2dX1HNmVqZFk2WGZOTEhuX3F7QixTL1Y9Z2ldSTNDWn13''@;'; put 'put ''bEh8RWR5Y0BfNVsoWn1MK043XmxGPE8qKitLUmhuNzJjWTcpe3dVbGt7SzpQejM6e1pZZS8qcC5pVHBTRlZsZCZDZT4qYkhZX0FAJFFnJjA7YCIlYHdZaFp8aHR0LipbT0N7JDVtYzRzSzspMTM2X2txbXNtQF84Pkp0K1dDfDgwZGZBZy9SalIiYW5UOVBYOmQkWUdhYWhaYkxFVGx4fWFzUyVj''@;'; put 'put ''KFZ3RF5BbWJUWGBjJFtpREJeaEQyQXImcml1TVZJSTJgXnEkdl5dfFl3fjRjMntCZjl6UEIucjV3dnZuJXQ2KWEvZzE4TGJ2eU9CaFpKU0ldU1AueGImNztTMlY1WyIjP2NxcTFlR31Sbzh1OzFJeypOXSEsKUR6QTYudHs2QXc6WWlHUEM+Q0lqZEpTNjlrKGYwOjh5YX0oa1I8KmJyVkl4Sz48''@;'; put 'put ''LFdAYzgqVSZ7K0VxLHRNYkkhPUo9OlpXWGB0fSVBWTM/KEk8OEVLJXpJUDAuK1kueSQpWFo1Qz5XL251KDdfbF01PTAoV3hVQVl1ODpGYSt0aS54NzRKIywwblgsREUuWEwzKj1leC9CSm1xaktFdGY3ZSJscnBpJTQ9OWJQQixhQVdNSFIvZX1vMiE7P1Ayel1IWU5jVXJdVnFMPCE9PV5PfGJX''@;'; put 'put ''Nnh6aCE/XkdTdz9PMW4hUkIjUmMqOFs8O2g2QG1wKFJWQ1AlMXdSSjNnSDEsME1vZUZaW2N+MFl+PkdpQmlbaCZXNWlPdi5LRnY/WU1yUTNla0U1MTZJNmFDLiN1OTpzYkkyREEhTEdFKztBe31ZeHM2PXtLZ1hbZXRSVGBHeXp3PTEiV2VoUjRbK1YzNz9gJEZTaUtbJTE+MXdial9WKGZqbDwm''@;'; put 'put ''NChoMSp9PXI8bXFXUnZ6M3dSbGVBKClja0dLcnlgWVlUMkdKX2tnUGNpZH5sNEwlN0RqNzVqa2UmUVZnOnBNaCxLdVtJaCkmK3RwME4yV0BqfmVfdTtCUj1FcnFkbF18VUguUS9MdG5mQUY6PVdrWFVEXnFKRnBYekg8MTwsO2V9MksqU1M0Rn5hVzZUXipoWzgmMilxXz5ZPS98bjJvJlovO0os''@;'; put 'put ''cSNxdmIzUmc6c1labWxEUjQhNC4/QEJ8O1hXMFhOaWUra2p+UiNTYnRQVF06SX05dGckJDU0eSR5bVY9RTsjYVlQSDlbZG5MbHlKR0ImM09+JUlqXSxaeU9WcDJJOWI5QVNMfjJCQk1RalMhJGJZVGdnP3dxQ1FXQV9bIWohVWEpPFk/amRUdU01ZT85NTBrJmFnJkNRNmE4d3t9UFNuKkR9KyRf''@;'; put 'put ''UkRHO3llN25ZOWJtaXFhfllaT2IjbjVNVFVfKno8WiF6MGtpKSFYQkZnRkhVVVozakRnKk4mJFV4KEhDMSt6blJnYz4yYj5QPmp+MihrK09pWU87XmQ2bE5xISo4TiZOKHNZTm1DdlFNWiIlKm1HPSxfJDFKSkFHP0UrPG9aPURHYGk/IkgiPS95LGZ5T2F+dWdaR1syb0J+aEM9UnBlflIyTVpD''@;'; put 'put ''a3hnJGF+ckpedFchYU0yYCQ8a3AldWRhdWppfT9sfElmIU9JLCVjcDNKNT1aR2VXVGQxRkRyYGF5aFtWUFV6QSswSFVpeHRxRDY/fXNWZl9VP15SJkAiZl1OYkE3YyRkJT5dKX5bMDYrUUUpNHRGPntvfi89TFJzRytZbyl3R2RmaWRPPWxUdk5jdzteWEsoeylhfChnQDlQImFifF17I11ZK1Z8''@;'; put 'put ''QXc4MiNjVyU0Y0JoRD1ZRGZicUFnQVJePGV1JjYudHNORDNUNHNiMkc0VntLNzdvNSl6VkRpLHIiJl5HeDdLflpye1lvSEs0X31oKiluSGc6N0QwQ3k/d3diQU93bF8qTSZPXntYO2NMcERPakg7VXJLfiRFfWo/N2YkMk1wJVF0W0k1bElpfD5Zc2pVXjBIIn0oMj9BQVt3Vj4mcj5kZlVOTyR4''@;'; put 'put ''YWRxR3tLJWhfUCFqL0ZWX3IkdjtqRSphSltRdmo3cEZCOUFvV3QvMk1ke35FfWw7UEh8fj4qSj1la3NYMSo0PkN0bmB0dU0jbnwqVDZJXUl5ZTJbb1VPLmxpLDh3QiNHKHleYTVufDtQcEE6fGEmajt4fSFJfkplZDI4Z3BMYyRhIUtkO1Z8cz16K0t9ZiE1YlRQaTMva14wNDtwcldPXUFrVGsv''@;'; put 'put ''QSEvbVImLCVNekpdemckVjU+VkpVPlNBSm5KZTZ8cG1vUnVeS1B7LmJvWmVKMUM/RVtWN0k7SH07VW5rYXs9ZF1wRnxeRDBdcmN2VElkQEczYjlMezVsLlp2aEVsO3slNlModSt0UHxjY1Q2VWMiN21Ed2lhXkZ5N0BEIjxSY191QlVdbmFUQkJ0JmQmVjBwWTQhTW1kKmgiO3pgKmd9Iy44Il9f''@;'; put 'put ''SVVtZEptPixgdHQ/YipiXiIwaCVHRFNRRnAsbiE0eUIzZSJaOEl1eipqbU1IditEcFg6PFlRP0BMRCRNQ2hQcHxjOEF8M2RGenI7QzFdS1EjV3FZYkMqIm8+aGZfJSU7TUNRLCR8W08ofVtIYilMUH1IPVs9VkN0fnw1MXU5TzNMJTt2blNzL3xSUiFJIzFrbkg+Kjw7UFZpWiRHSlJ+SyRHZU8m''@;'; put 'put ''ZDllJEZ7aTljKExwamZKMVJze2xzaHQmUyw1fGorPnJvOSR2TypBdVdQNzo/I0tJNFtifiJoWHM4X00lcT8oanVXTXVxYENKP2c+UnlfIXcsU3Q5UWgqTUVzU2JHem51ZSw2XXcsXVl9JDxleyJHQ3VHe3w4cGJNfFR7QyVmSmRFNTNgTyVrd2shKmE7OjNkcz01OF93a2taIVpKOSk7PEljQ2tf''@;'; put 'put ''NmF5UEpVb0guYmkhMFtkaXV3JX1gKlN6b2lNY3R6eUJ+XWwvUlk/KGt2V000QjBwPUdlUVIsQy9zTyVZbHRaYnhOckNhcSk/c3U8IXh8RG42NT1GLlEqKlErcmlDUi5QcDM7aC49OXJTLkY1Mkd3OVd4aTlwLiRVOkRhMj9rfEJoInVRKFB+dWxhLzdyY3NAdGlQUz58NX1pPCFCY2wjQ3QoRzpg''@;'; put 'put ''VzlWfDxuYzI+N0E4OSVZKldefThvdkprVyQ+V3JNRXRKNl1ARylYVGI7PGsxWCFhZU5MaDIwVFg7XTdXL3NSalB6XVQwSXFIYkAmd2dzMCxDMSg6NUAkdmkuQk5bR2kiO0RmRzlKQHo1bixSRmpNPyt9PTtSbTBYMkV0Ryh2dXFKNl5Gdl48RyQsazZLR04kUmclK2xvKzt6JjArbUYuUGVXSVpH''@;'; put 'put ''Y0ZOdns5cjFIR150fDI6KjRJWkNlNWt0dyN8Q2YvQ25hbFUqUlNNblMmdn5+Im08S1MreWVwZyYvfk0kc0YmPUJmVVkjYmQhU2JRSTxUVUc6ZWxrPz9hY19ZZixrbiNqI3NLRWl4YSh8cCJRRm0oZEdkblpQOX12I1RvV2FLOjtXTmoiOkRPTVlAQGNhcCQ2P1s7Ny8xdVhgNElLaDo7JW1oMHRe''@;'; put 'put ''JDR8O0U2P1clQy48KnAkLFNHUG1aTWYxWUNUYFJtZmZCNVkqKSkmQWJNWzA5bUkqU2RqWHhnKHE9MyFwdHg+dHZTMy5+MTk/QFJ5UmU8bDF9d3RvXjFycWsqQ3xML2xeMWpWbFNnWD5SdT9jMHQidj9uSXVeb0tlTCxFa1hNVnJNKGFMa3NCSkJ5TWQ8bXc5RmBbIUp0aUo0PCI/ZkskQyIsOkUh''@;'; put 'put ''WFAlPjZndW1JMVcyS2s8bDxPaEBTcl5ncjV8MjY4JWxAMWpUWy4vQXk5b3VHRFlMSD41KUJSSVtFZUltRGhGbHYoIVRqO0Q4eyFOLDtMKC5fV0lxWFFpUzUvXnlWKV99S3BKbU5dQ1JrI0ZNO1psNV9ZfUl6TGxjNG5AOStyU1Epb31XQUR8W28yI3txS0t7Ukp+ZGclYSovMEZAXTtoYSY+PHVm''@;'; put 'put ''dmwudlIySntwR0pNbmUpNUk2TilnM0p0ZGBGMzZEQF8vV00rfnpbcTZEPk4vQFtKZjsmO29yZn5uRU9MVkBHd1BvVyYqMltxbyFATTZaQCJgYVRCbTJifGA5PzRnWVlBekA6PSR4MD9TN2l+ZSo9dGRUSi4vNjJZdEQ2Y1RJI0NlTX4vXTRpZGw5W3RqamdfPitTYjgmWHhJYGo+ai8sNG9felh5''@;'; put 'put ''Pl5MWyp2IlMwSnZ8L1VlTzlZcX19ZEJuKEBXZkhIYEVNPkohISxDW0U6a0BHTzpTV30pWnxiLjcyVT4sSEozZWleKXNfIjs3TzdDUTZ2PSUpazJgR1tqcy9LRVk7UG49R29FdG5eVHYxKlpeLmw7JFNfMEd3byx8ZmpaVSRhekt3JnJLQFQ+PXJxdXojW2B4Z0ZeVzAmbkt3NUA8SUZYVk5PMHV+''@;'; put 'put ''IzBGJkpTYVoyQ2lPW0hePjsuOHojc3dvUy9ySm16YFd+QVdzTSR6OEVAL0BOWEI6fStFfSopJFkuYjkuWnhVbFI2VH5oLkdARng8eSx4VVduaEhsTzpGemc4WCZ7aTQlOFBVKHoiMHVQY0hGVFc4cGVedjdyPyElYSQhUmF4VWplWltddCR8MS56bC50XWdXNmF6YUVVMjFXalU3U2hNRUptK0VR''@;'; put 'put ''bTkyWmBHTz5BfUpQazAhTTx9SiRae2FKJEkuMjtVfHQrS0lud30mRkcjZUg2ai5mKCJbK1Y1JWp1MDpZc2NgS2k8fi9dQz0zMEdEXVhzL0VmWmkqO1dneE9tTl5mQFtueFg/WDwwO3hRcHksfVVARjl1TVEwUk1tN2A+OVpxZi47czA7JT9yeEltVk1TOTgqYyEjN2VmSm5rJWBjUCokP3lLRlQx''@;'; put 'put ''QntVRW0sa1swYVAwdj9MfDlVZjVRMU88L29ZYjdTY1N9OCN1QnAjJnllaXljeUd8WHNJU3I5TT14Yz9UQjBKezk3UipfIno/KEA7X3JtPmpWSX46ZH5UaUQvMV02SjEqRiQ9bDA+bz9zMUBRQ1tzSnxhQj1wMnYiPkVrJVU/JX5ecmQ8L1VTY2B7OixuP1NXbXd2Mm42WX5nSlJ9bjZQNipEL219''@;'; put 'put ''ajJTelJ+XTNbZVI5ckxUdWFbPWo4bTBpbFJHKz5MLHJ5JVFNaWNfYnRuMzhQTj1EbHdDdDJzaEB3Wnt6OipfUXk/T1A9YEVMRiNFcWIwW2ttKC5RcEIwfkMzQkdFU3c1Xm5FM0R9P18kWmtmZXg9Qy9gWzVFZ0I5TWF8ayNBVXdWaD9RK0FpQEdqdXt8VHtXIVRPPmxNd3RAKVN1e2BuQn5nNVMj''@;'; put 'put ''dHxUSSQwTWdQIj0jRCJwMkxYb2A+dGt8ciUwaDJ8V25ZfkckTWJRI1hYT1UwPDd5IT9OVTJ7bUclTTFUUUVJZEQyWkdOOzhaSkNQOnlrTmQ5ZjJ2YGp9cmhyIktJT0Y1WzM5T0IoZ1N6Z3MpKXg3YDJJRHlsWzdLdGhQbUZidTJpUSpJXmlmNWBoQkQ1bT9NOi5ORV5oUH1Sd1d5VzNmOj1kQkl9''@;'; put 'put ''IUwxUmE4fj52eStoYH1aYSh1Rk50X0BiJnJ7ZCQ2UFY+RkJXX28uYyxpVipLW1o2XmVCd1VRSU8kJi9lTj4hbHB5OmNrQEkqel1fJmpRcXE0OC8oRkF1Sk8jSXE7VlpkW3NVW14yNillLk52VF06XW5UPXw7SDBaXjx8d2w1M0hFM1E4QmM/YndhXU9GTHtqM3dqNFRsbnE3SDhmMCV5OGF8JVFT''@;'; put 'put ''OmY2Tn12MV9mPVk1bixpbzBpeisrXiVoWHFld2whZyRtLnc9X09UT2VnUmZ9Oi9IXjdOU2s4fWAvVyxdL1NOVmNRRzdONkYoYWx0UDBGamouWlppV0BLR2lhY3J9XjQhOzhDVm5ESi80NCxePlZ1JG0iZHk9Vi91Vjc1KH0oa1BsaTB0fH1vWDJ0d0RWQF90akBrNDhYcUA3X31iTWVXaFc3dipl''@;'; put 'put ''fHJgUjV1c0oqe3FiWW10N310KUVAbjpGVHlyUUtSMGUsalVJVEl1bzdIfEc1cGsxPj42RV4/ZGpYdDZSJV9NVDV5dHEyKE52XiUpQSFxJXU6XUtPWHVXb14+M3M7NU1jbVg/ZlNyYWVJeVdBPUsuMj9GanJvdzhTQitoW0xuNnZYP3hqaFNjZ3pEMEZnXiUoPC9eNE4+REU+XyN8K2tVKFpPdSRY''@;'; put 'put ''O1FjfUk1cCE2bVJ4RHVTXlAjZF0/RDhzakZYU0d3VTBaTlZ+SWZuUkd7TGUucSRgOypIUTtuMzkjU1YySEdUMXxtKGVQbFZIX2hDJnFGXTV2fSw2OV9lI0xgNSgvbHZzL3YxNXBuQ1A5Pkl8dF9MI0Y0WiwwdUVENEl1Pi8iajZ2N2dzODxVX2dYRktyY1NhMUYvMEElIkZCUz86MWckLlh9Mzl3''@;'; put 'put ''am8idUVkdzhlbDhoKX4vNER7QkB3SU86UkZzemdeZn17Tlp7KD0/N2lTeztKMHdDW21ZNCQ/QG87MEBZWm5FI2pGdiIkLClZb21Cd3ZufkBiWkYyYW5FTnMxPGYse2ssRUJdS2Z8SzVfcGFgQDs7NXprYH5WM0VFQCo5b2JxJGwwK0h3QWxUI3Y0QE5tV0QsezRNZVBkWHhubmBxQ1hUTE9CVFtW''@;'; put 'put ''PTIjR3JIOnZgYmFmITZUQztUMlVJQkYmKjIhcXduO3VjZ1pzbHhmY3BBPy8+ZnRAVFgpc0E3JkckMSo4QFIoUkhBUl1eNTkzOlE+NixDa1tZdV4sKFc8UHZMdCR4YmJXNW02UyZVaG9CcWBRKUU6ajguITVPLlpgcio7LjN6LGVmJjg0UCxKPHFrPENIRio7TWw/cjlgLy4kOztQKXZhY3Q0Rm59''@;'; put 'put ''Pml7cCFjcUZ2T3BkREN5R09DZnlBODhfMzc2e15YJnN7eDpqR3l9Nl9afTd0U1IqcGIzP2pXeCNMTToqVSEjVzEzTTdYMjp2Q2tWOXtvcEY6PGcxL1N6XU5oNklWMHNFWVN6c0lpaTFra0wqbVtjTTxGUH1+LDVLc2VtPkN0KiF4XlhuM2RNM1spfHwwK1lCI05ILn14bk99Qm8hSkNLSGJTbjV0''@;'; put 'put ''cHVscSk+NHp2TW41cmpsX2R5eiRRa1J7dU8zLENFVExFOHhAN1l9UkRGMDdLaSNiWEsxJTtZP1BqKCRneF9DWXM6MmZGaXtBfi9TKSMqYF9xN2AlKzdYOmY/c1QkXURMRzVhMj0rfTlGdHd0bml5a1hAM3ArMnhvZHt0dWpvKHhbcF5mTzE5el1XJCF9cUNNe11aOCYwfGEqWXtPe0QqRjIhTThv''@;'; put 'put ''fnRzWSZES3x2UDkzOShwNVs2X21wR19MfkVFWGZXYXUoTn5kTzdnPE9IeD5+VTtwPX4sVjw2czFFe2NtLkZtNDtMPGZXUlJKQ1ojd3hkRDV8SXlDeXFbK2AiYl1yak4jUilwQkhPazo9fUkvQSgpfXIofWhQYkB3NWdObVRJKUIpeU4qSkUpXlB4JkJfdn11MDJ2Y1dEXVd0SlpUazBqSUxVJldp''@;'; put 'put ''YF50fjlCVFlmNChqcDdgUUhORm1EbnZFckU4Ymw4YV47YWVnSVVaYDl8KSpaW0pOdyw8fi9ZLCNDLjx9JlJwR0t+STZwcClmL3NQOm0pbDReXz50fGh3N3dWXzdsfjB8cSU7JCk3YSsyOzRJRHN6Q01hSGpHQFoxfEdfN1pySHsjUFVFWlBEPW4zfGB2c2cqOz51QmliMCE4LnVVTzszd2JnTmVw''@;'; put 'put ''dE1LZnJ+dy83Jmk5NUhyIzh2eT5rYzREVSlBZXAyVCwwZXl+RnFTWjl5Pkt9ISUwVk4odGZdL24lL3MqMmhtKmtIeGsyJUxCMUdRKDkyUn4lUHdVazEuYTEhKUxoKiVGd109azomdU4rV1R4dS9ddER6UjV7L2JwZzkyWiJYWTNzKVkvPy5SSjkvL1RhdEVPeCwrd0BffCVIRGJrXlkpLEhPUGch''@;'; put 'put ''UHBIeSlITEVsRj9xP3gqYn5tTlUkKHZxVHw9MyxHJGhaeD4/TjNaYUc+aGB0PkkufjM+TiFCYHB8VUNiVV96QD82RG41UUR6UWFLWyR+d053MnooZ341dHw7UGRsPjtTezojKlQhRHlgZ0hZajxAJisjJmV2Ync5OSV7YiE+bzx0dzlkYVRVUEN8XSNrZ1g3STRAREdxTHNLJnMmWldjYnZBPiVR''@;'; put 'put ''NW1EaTt2KSYrQlk7WCk7PEdEaV1XZTNiOl9UKms2WUchQUYwekAxeyRbbTtUd0J0WWs6JWI0aj4mOGNBXjpVYD5ENllIT2cvTjtnTVEvS2dyQlowe2tYTDJRZXtOaFN6S3dXYm4pKUxkQWxANTZ4M1VaJjdkdHZWV3FZNE9RNWpLbX5LM1hSSmUiOj46MnR2M1NeZDx0OzJPP2RdI0A1MEdfdlUu''@;'; put 'put ''anZ5aDlBdEhNTD5mPVooSVB7QnFpPjMlazQrfi8yfDp3YjlQYDp1ZUtUIzZdMyNvIkBENFhEbSI4VTs3Iys1NDxqRiFNYUVaOUdpd2RIK2FsIS4jfWZadmMiZzU0SjR+bFUhUn1UV0M/QmRmKTdlV097bDBzXUp8Yy8iZFtuWm5yeFpKVWIsdkFgV3lgOC9FXzkwY0BZeVRFK0JrciYmZkIhbndy''@;'; put 'put ''fSZJYX4lQng/RWkuIiolWm16ND4hKkZMfFt0I0BWMnt1UiZeVTZCVnFGbWJJekFDVFs2Wmgkajg4MVhWNURPRDBneS53Ol5aWCJtQTh5UWUkTWY0RUZxXWdkSyo3Ok8oTW50cVtMRiluWCU1W0FUamBTQEBBc2VlPFo2Ri41Lm98I2QmdzI3QEtKNUZ8b3tbWnBAYlghJTFsKm1VNTtkMTpMeDt4''@;'; put 'put ''JCI9aFA3SWhvNFNkSEFLTE50ZExWZ2g5a2cqQDhqbnZiPnp8dSZiJVIkaz0uPVJBYkg9cWF9SFhATVdWeShgUDA9ZkdkTEJQczROQ3s2WGF6Q1V3Z3x6MWJCfixfRDEuajIwMmdzeTVaVHhEInhjWURMMG9vRSY9Qk9tSF08ZXZMc2Y2dWB6aTF1QyUkYU9QRkpUWzF3LFM6MHYxaSoyfnMrR3Qs''@;'; put 'put ''dCl8WT4ld3Q8X0tkbHJZN21FSC9IUntVa2o+QilVbHdEYzVBV0s/VkI8YUUySi9Se0kvLlc3fDNlKTA7XV41R0RKRXZmZGhJJmJ5MUtlQV99Tn5jP1l7a1MrYGlIUSI7JEQjXnMxfj4kT01rUUpoWWlEaSN3Qnc3JWFPSUtARy4lMlEoQUBQPlt3ZSM9dFE6Ll9xOGJOSjhGSiMpIVpIZ0hCNWxs''@;'; put 'put ''ITVySVlPZXIhRS5GX1ZGIStXQDRwW1dHOUEya083Z0QjWzs+U3kuKHw2fnVFYz1HYko5SW8pRjkmIjFIVndHW1RtVDR7eko3WE9UKlFmKDMvMHQsdjR8VFdQKltbJjUjUHgrPiRBYyl1bCJRR3wrKW1rVWl6dm5YNi9UKF9YJlNHclZiNXtLST58SHlZKH19SW03PjxybzdyPC94NGFgVjRBRW5H''@;'; put 'put ''OjAyITo8TEtKM0U+WGZQdiZeIj58SCVda3osNzU5YUwmMz48O30laHMuL1dfWUckKl0xYVtpNzkpVFZARG03R05ITDdFRjVCfDhyZVYybyY3SGNYcDFnIlZQRiZYQFZeLlVEfFV5S2VqSmBNWm1SfjN5NCJIeWhCJHQoUTVWJSxtd1oicyFCe15zTWRxQT1DRTZKeyhlTHlWTzhpU0NwTVZ4eW5e''@;'; put 'put ''O3spbFUrJGVqWDthaFVCMjJdbzVUN1tpQHQ5Y1huRVRKUnE/MmtMRCRYNkFdbC5CbkFjOjNraXlYbWNMJWpxQl11Q2M7Il9NYnIvYXYhI0NfLEZRakp9SnR4WkMrdGlrflJhM1d6cDteTTc4Y0N2UTllc30xTDJ1aWUkWywzWD96Zmc4W0p2KVRhazkxPDkoeTN8OEpdUl1LKD9hek1eLF9+YToi''@;'; put 'put ''TGU+O1tQZHQqW3VaZDYsSzxPKT5QNW1TLlt+czM8TFhhfFplfkB9KV1gWk4vZDp6SlN0UVQ8YTp2MF8uPU5EZ1NBTEpsdilmW0lmQUtaX1pPT2JORHRuNn0uMnJ+RjdVMWdbKG5ENltTLkhVI0RoWmNoZG1MRH5EfissT01ISUg0K1huc3MoKTtrUk5CXk9UMHdRWzk+KT9eJWZOcyZQVjhSeWNi''@;'; put 'put ''OVNObWdePTJ+PixlQkQzUVVFSFtad3MoYl4mdUp8dH1WS0ZJT35Xa3I+Y1kqITB+MVcyZyl1ak4vZVdDLnkpfkJAOVVRUD5dWjNHb3hTbzg9S05iKkVuc0IlTF9sdndkI3Y7Mz1ZXWNQOTNdJV4qRm1LN29HfT0meUddLHwrRGJPVC5ORXpsbTYlQHRoRW5LOS5AbStvSD9DNnlxeFdmOmE9Mllw''@;'; put 'put ''T3taRztHM3o/bCJ2WHswIWJSYjpILiZtNEMzdnZRbGs5O2dedVIiSC9UL0hPUDVWQih5Lmk3XzB5cGBiQlFqdUVEZn5CYXx2VXpTVy5SWHxkQCVEWGkucVpVTmZzSEwuMlgoU0I9aGd2YjhrYTtOO2B4UiM7MWp7PkNRR0hQXkdfOiMmWmosTjYqMUY4a3xRSyh1PFU4cGpyJnQ6M3x6Ol8jZkFz''@;'; put 'put ''cERUaWh3fTA0L0YuInZXIjN4bUpeaFlYXjJUem0pMWNJJExAam9Tcl5+Iy88NEhKakxUXjApJkJoM2syTD5rKTU1NFJ5KX5GZXg5L3t+c1J1aEJEaXpYMmphWzFDOHlYazFTXX1VK2h4QGM/LF1EZ2x0ZWxYeiZnb1BgUU80ciFfMyp1bWk3QUVSdmUrPF10Q2ViTSx0Vk1sN19VXXhmRmF+Iy9z''@;'; put 'put ''aEVQciNGcUNhUTtBMT16V05Ve1lCPV1EWFhJTk1yVWk6MXxzS35BVTd2SWNnaEFUMUg1O1M1Jm5KeDtEUSw9KiUqenRmdzBBXy96U0JCWHI5Kj93Qnh5OmtlbGFfM0YoJkp+fnwjOi5LNmFyfTBQQ0U1UCY6OTdrXkh5RkltVUxafkJ2MkI8bHpKQVheQ2o9Lm5rYWRQXlJAc3pIU2NfcCtufDki''@;'; put 'put ''LEdHfVkoVFdIPEZdVkk4eyspM2pjQFd0N350bkdIZjRYZ11tZmVZKywqZHojWDlAV2h4bisiKXdSKlRtPj5heVIveU5ZeTIyPiIqe1QkcVM2enBgSi9RT0BCXjd5UGN1TSVkNnQ0Wn1JfnIjSj5mYjpnMzY1Vzx8cUVGaz52QihNaDl8WiU7eER7ODtCNipRPiwxIXt5PyEkejh+SlFGYD9RZDJC''@;'; put 'put ''b3lzNU5peW03bmFFVTRNS3kkMmU4KmNWO00qP0h7a0JJVXI1aSRYWk1HOFZlbnZCVGZxXlBEKzMkfS9KPG1eWlg7Qlk5cTFgQjVmJkohPzg+NyhaPm55KyEwPlAydmhXLHxmZFV+cjhaO2Y9a3UwOkh1MkRZd0ZMQiVyLHBldVJXQm9OTHA8OSFNb1JQMFtCNnBIOWA+Yyx7Y15WcShnbjRVY01z''@;'; put 'put ''OjxJKVFkTnAzX3U1ajs1XXdiQEwyVSNsaHo5Ojw7RDp6bko1PC81ZTFNMFNHVyxgKVFgZURbWHMvTXRyUkBoLzZyR0VBfikxXzE8KE9fPjZbfCZ5eUVobVkiUXFqOElTV2h9VXpJPmtCd3I1b2lZRF47XVZaLCE+TVZPbUdqcU4kRXJgNDoxNUp7NDsqTGtDKmNAWnMmV15iXmVCJjxWJlpxdWdt''@;'; put 'put ''IVNheVFUWkwrcG8wMDh8ZGJpMl1hLnpJbllhQl0jLGM6Uyo7MDdPLG92NThXTyFFRC8iW1BHXkNVLihjTjMpYi54WVBZezZxS1hdTDc1P3BXZW09cUNaayQxSUR6QHZmRS9AQ2s6KGRnYTQofFQyVHpvPC5MR3UlTllNTC9mfDp6JSpOPm0ub25vcClsTlFRZDxJNXUyejUkNl9RYkkrTTxGbTEw''@;'; put 'put ''UDhgYyIvcCNtPVtpVWZmMXA3e1E+MFR7eHwpPzAkUXR7NDkiYHhsajVQQmkyV0MscyMxIzBvUEolTlpsZXw2LElhQy4jR1NWP3lWZ3FdcF13az41MWEramlmQDZMSWtIPlQ1VmY2ZGNhNm8pSDJ6ZHsqQF51bHsrI3VJWDdAO3psYW5nd0d0byU0aDI8e0o5Lnc9LmchNURRT1k2ejlGVDdwYWVQ''@;'; put 'put ''P0xBJSVSQSlwPFlhTUl+Mn5WLGNEVi9LQHhmfjltKHhaeVhjTkJgLjM7XThfcSEzN1tGRFk+OXlOdD4iUzsiQyQ1aih8cHVbKjREJF5mT3JEPHVseFNbdyRsJSNFOnUjJCYlWVc7ckVxPiJJP3AmeHUuOkJvbF47TWR5QmJCa2VEOmZCSzZEWVt1RCgrKXBXTGwoNExOcTlhMWc2MH54TTg7QWVf''@;'; put 'put ''NGImInl5OSZ4YDx3bVFBLipdWjs9JU4qM2pSYk97KE1pMFtRWG9uWDw+em46MU9sSkdRREdPOE5Tc1QvOW9YSF1HUElrV1N8LHl7MkR0PzEpUGU4Il8/eE1sIzZVLyY3clJHQksoY2M0Q0N1RmJtLn5efmpzW2V7PmFwUjAiXVRlPyVoTClGUSJIbjBTeTE6SD1UcDteNWdPamZrS3R+WzUvZzso''@;'; put 'put ''JkpGQHEyT0JTcHo8ISlzclhNPTBjTk57b3VVYUJFUUI8VkFwZ1Bxbm92dj1xVDdXbDxJZiokOD4wKytAT1l0dyl1ZUZJfSFyaHEjKzxDPXQiZ3g4YS84Tjd2Rj0pNDB4IktLNSRbYFIxXkw1R3o+YjV+QzNGLjFgIztoPWM+IWJpZzdCdldsK2JnM2tHTzkkOT5dR1RMZ2E2KUNBcDQzZTBFdFBR''@;'; put 'put ''YE17SW4iOTdoa2kocFVIQFhvYk8xUlA8N01jOCZueEtTXzFKRC5tWWd7akt7NlAqUjZQeTF0aWQyY3BDJHN6dmdab2B9Xy8kaTh9YXhEfksrRFZqMFJWaE1xOiE7Okg7QzdVS0Q/QTk3NUdKR0RQPXtofXo9Iko9PSM9YDkqL3Ayclo5XXY3LzozbUxIaXVTWnhySlZbK3paMDMzX1kkdzUrXjtg''@;'; put 'put ''QXxJJDg3SUphKnosWjYxdiFaenU7OkltKnpsdj18XXpLN348RXEmfXhASEIxVGBrIkFsd3hvODspcTE4I0x2ITN5R1BgVntNJS9WXVF3IloqZHMwcDlRJH1kekN7I3ZGVUV+U1R5YS5fMntUUj4pRz9CPT4lZ0thXihwOW9fOXdGJl9tZ3NDaGgxInBXRGA+SjdLSXN2YjIoKF89YV4mclBya155''@;'; put 'put ''WnxeOkZtX3difmlINH4jQyNaUjhwOFgrKjwmMiQrS1NuLDdoIVkoN1ZpSG8jMHtZYTE9ZXhWflRoUUo0SmdiJS9OY3NNLD4xbzZZXy9hTlZRKGMxeVAlTDwvZXYiTix9MHJNJUx4QGJHey9uY2B4NHZtLHJbKmZRL1BleGxNK34yMmVZRkJEMjkrNmRHQDxSMi8vRDQsSGtuVVtufXFzcSlUaCQj''@;'; put 'put ''MGZKVFhYaiNaZn5TLyopYTFpQ2w/TjVWZWgxbl0rME9IeG8mOHxMfVdJcXRsVGRnW146bSE6az04UE8wREFMamxdajFrUktIPjE2WzlfTCxQWDEpS01wZ3hFL0RbJHJVT2s2O21KbzE+THtZdGE5LExYS0YibjlDYDlRTCp2e0tANXxSI2hhVlMrOWxHNmEzNjM9MmBQV3dWZCt+YloyVzVgbDx5''@;'; put 'put ''YmE3SmhmbjVIPmsjUzksbEAiVCxvOTttJStwJj0iIVhwLnsmMjJlYil5dUFiM2FSU1FEanMmIWgubUg2a2g3ITpHdSpIN2w4Y20uYFdkN0hUa29jMjs1YXA6KT4+WW5pc3pIZ1pgPnJCNHQ/NGk9fjtQY1VHODA+N15wOClkW2lYeVR+YSVofXd7cCJrQ0lGOl5HaTw/KlBEP3ZNLzFbLyYoJXoj''@;'; put 'put ''ak16LDlTfk9OKjQ+ZG9FJUM5VzgvMzhJdXwpb2t9cntteXZMVjdRO0x1L0M8SzJNYDFwR0xDKFZna3JuVTpUKmYvTnxSQ0ZEJjRVcVhxJW10XmtUQUhdakEwQVRSfFJjOmg1QTh8LnE4RF91T1JlSFtgPy5UNCV5InNXMTBfU0w7M1QrQ30lNHBbZU05QGhDSGF3cV0+N1cqMiFtX0VoaGBlS1NW''@;'; put 'put ''KV1Cfi9bXj54Z2Zddi5ePntzYiFOfFckQjc8ITJWZT06PV1dX259c3Q+Zyx0Tng/OVomciZre3c7ZVpANWA2eH53KmgqZnx+Jk08IV9jKG5VVnxCYUorRV5GVVF5cy5yNmw4eTJBeGo4JGpSdkcqR2tkayxIfUZxUVJOQldrYTImY1d4IjR4NSxfby81VWBoZ1RlQW00dS57ck8wcEg2KjhuZ0RO''@;'; put 'put ''L1dqaT5QSWxrLmdHfUVgdjdrJH48TGtzK2Y7LEVYPj94KE1GJStMcmVVUzlRNHAiKGx4T11PY1ZDYWEsXSNZQzhdI00xb0htd1RndH5GIVhYVUBrU25Faks+QFsidnhLRlojJk9kNjg8UDoyOVoyMnwye1E+YTZNYTRPdDRVI05wX050OjhFbz9rR2k2RG56XytJZlV5Xl5jK2tzMSVoT28wY3d7''@;'; put 'put ''OiYiX1lQQ2hMI0VMLG5ANSFNS0JqOFQvdlY/bVU0cWFbOCEpYW1XJGJGeFthQlhUMlY9S21nfCthMmtEak8sVykzYTo4Pn01OTEsKClGOmk6SkN5cntzK1hpQTxGeW9CRURNL3RvcXY4JUFAfGYkVns6NGdJTHMxYip5OHk+RyEmW0BKOjFaXTllV0NZMFdkOUAvNHEkSVtfNUJkPVhqK19TM2pH''@;'; put 'put ''Y2RRYyRjRkwjdyVYWEMqVUk5bXpBImA5SCYrTmUhejZtMTM9QGR6JmdpVlhlTzg7ImEiQXYpSl1YVSlHMnk0cj5QRXRbYG0vVEwiQDNbamY7LjhQb2o/TnE7K2JhNXFEfFhvRTd6dF93cWJyPiFjZ147TV84fnxdW2xlMyUrVHwmfFptamhDaGx6VUQrUlhxYytUaS81a3lMTGhJTVZgdX50fSVU''@;'; put 'put ''Qi82Szo/X3R3Ol91KnRFPFBYPD1jVGhxN3RvWTEmVzpHfVhfMW1jYWRvPkA/IU1QMyNMUFI1IW9yT3M/VWteeGRJNW43eFspeldFLCs3TG1pWUwiSXxFRUI8Skxed21YfjAwZ350YUZjZ1pnbEVSWnpyUCFUI0JTen5aZXc4Q1hnb2UqZlJYeTohOmdtInZ6VHRmQV9XQzp3M2dwSlZeVVlHWXti''@;'; put 'put ''cyEoVCEsV0QhZSFkKzBKI0BOQzldN3JGaV00WCZXY1d2d2wvc21+SipyXnE1L2ksSiNmSmB4LDZYNGkkJDQ5KXswOi5aT2AjRWApLCJfIXt4allJYixDaDdQWlQpPlRZQmBsblJ7Qn5yPWkkR00pVDd0VSFoaHp1YVNgaUFXJDVDPFVjVGtPdXJPKTkmNUExOVlTWjI2M1p5NFRIcVVlayslXVR1''@;'; put 'put ''aGNHWXZqcUlLYTFyLHp+YzY4Qm9vbkp1diM9Z11HJVtleip8dFBEb3ZAcTp6Q0dlb0R+YFc9b0dtOWFGVlYwMVlqYDwzajhnWjBaKk9aUjlaSFUjZiEhfEZwYFhjJGNSYlFLdCQqM3dhMVZpIm5+LDxMOzlNaF4pL2dkMmF2K0A9MHdIOEQ6UWlBMiN7aVpXVWhWcTZYXTtMNV1nTjxoWjd5JjF2''@;'; put 'put ''JWtHZUUoMj05LiNQcmplWzBtZUkhQmdWJD1yPDMvZCkiZ25tSXlyWnt1KT5RSDtsbUh8QjQre2Bbck9+dlt9e11UQCleRX4wXkFWZj13MjpmWDdFN09zRWFAQVYmSUpIL1tdbEJJd2U1Vl5nb2JpdHpZVFlQVjRve3taPDg3VjslbmlIW2suPEIoIUgxMCU6NWhQRzpOLFZJMmkyOUYjP1U4QHMi''@;'; put 'put ''Uz4yJEIoUEhXJHNlc1RNPDApUD04TzV3PCw/bzNzWjBYaF93dXdkeUVSLmolOl5rZyh3RmZEYksyMmwxRUJMIkB8TzRZYyhnfjNPfE5fSmJrJXpVJnhBVmRhcmc6NipiKEZoRzZjNzsuU0NWNkF+YXVNUm0sUngpJEJlWSFxNEQhI2N7ZTM5TCh5YlJGJm1BVVlVPE8xYkRMZ15be0IyTiYhdmd0''@;'; put 'put ''TnB3Q01BLlNuNn5JZiQ7Ty5YPDB0NWNSVldzQF1+YEs5fUVebE5XVzhdcD83YktVO2FFKGdBWXkuTG5lQS5FX1syd05TP1lbOypPW0clKD1bZyF3KW45MzkyPGhzMGI9Klhnekl0LGFUN0JSRj9hfXBtfip9QF4vLntNLCVmR2MjMnBvIiN6Nkt1cnFqY0QuNDdnRW1XLDhEYHJWZ28+LEJ8ZkFT''@;'; put 'put ''fCF7W0BZZVg+T0xCMEs2KWVjbDQrNCI/eVFCNSx1XyVuXUZRR2AkS3ZARnh8OW1uV342U25kW19YM0tlaF1oSXRjcyZdbEp7fGU1QFAkWj1wK0xLOHVSOXluNWJ3M09JOn49P2YicmBhYXFDXkkmXX4lRXZ0alZ1SCxiUmpSe1V3SjJhN0UjeEZDQy9AI1JPbl83OXdLLGEiZSV5YHdpeSg3LjBV''@;'; put 'put ''JiVBfWd2LnB4RTYwZ1BfM0dwQHtNaXowQzYxQmh9L09gZyo4Y356YUVTRlZpYktWVDQ8SFJ2IXNsfDw8V1RKLlFbXmVobmFOPzUuUkJUbGVWNHVVeiZFQ0NgTDU8bFdVYy58cilMJEpKI1ZkZmA9ME9WVUcmNXIhKyMmbyhSbDwlQm45LnUibFlKW3peYE54TlBKTCFII0VffFdxbjJRQDpYZlJx''@;'; put 'put ''TURIWUAkX2BxNX5Bc2F5U2lKdFd6WSwvai5fIU8pNDVyQUpdMWclLmojUXJpJGImRl1vPDhfa3h4WjNTezdqXyhXZVUsKD5OcXJMSnwhbzZTXlclTElCYFhuRURsVTU2YUVtSC47Oy8jSnEwN0Z3O1Q0NSRfZlh9Q0EveDFAUTh+WHZ0WlVybjRtek5WbTg3VCNSN2RYV15TdktbQkQxaWgqIXNN''@;'; put 'put ''UGchdyk0TU14X3VkdS5ZIjBhSWR+S2AjUEtIaGRgLGpMKz1zKDhXKDVfPEM1Qz1YQnJPWSk1KUB2QTt7MWxIP3YkdlsyWit0cUhFLipiXipPNk5vTV9ASyFjfnl1Tmc1Pldddkp5SVEzWkhVVTtQZVIsRihGIWJ3NFF+P2c+SE53KEN5ezI5dGtTTXZyNmxpYmdMRGEjJlF8MkNoQjtYQ0V1IU1P''@;'; put 'put ''IVAlcEdqNysmSDEicjhIO0JGZyNiM0pLX2B8JWpFYjJWQEh9ImgmdXosPmM7JnhiN2FGNUw1PFcwREVraEcwTWc/O1dYaVFPO2R8ZGJseH13UX09OHJJQFpiIyg9al9+Jjo0VW5dYnk3I1l0U3skPzEobSRzMVJEUyg2JGxpfGE1U0N0T0o7Y1J2eT8rWUFMcikvcnRtJEJ3MVclVVJnZE47eihC''@;'; put 'put ''YU9RWHVufCgsODIzdT41fD4qJDRfVTNWWkUlJmZVQjUyeiVgS0xHelNdQjBDRFkqT0Z6a2MzQ1E9Q2dEQV93RGZLUHskV0xiVHJLZDdlVjI+UF4mZVY5MFoySlApNHptO25mKXchb2cmWWBwZ3lRY01UKWo4QyVIIVI3YCNsOl9JS15sTEdGdkh8YnhmMSNoJWZqNXZEOX1pLFoyMyJiYmFBe2VW''@;'; put 'put ''a2hMT0p1SzJrQWY2cm9IM04jb2MlZTJ3PSE4SW41R2ZzeSN7ZHxyPltnd3BkQFdVbjEiI3xHJC9dQ3pwdUluczBtYGVzWl1NKUw2UyF7MHlEJHx3TE1TVXx5VCpeTStGaSxhZj9OLmVATF5FPUdKR106NC9ReTZkcE9uZ017MHVCeW93bUg8NU1tOSxeJStoaWtweXBJZXMyIj9tZSVATF5EKFkq''@;'; put 'put ''ckJyU21PJXwpQGkwRHNPNjwqJUx5cGN8KjNmTlZpMUlGPDUqbGo6QHBQWHtSKi52eyp6TFAlPXUxXTZkU0N+Y0FCMm8jbnBAfVo2d25IMSR4a3ZHV0QySHwxdS9uR0x3fV9pb1RRWD1YfGxKSiohbWltUythcy91Il97TSNoRVJnTSNCXyhyYGM3MEp1VX1FQlJ1YmV5TUczdVkyTVBZUkN1WURx''@;'; put 'put ''U2pESjo/KSxNWD9lUjtDInBkJUtfcGQ2OUJaKl9DdkszWntvN3VdQ0dtall0fXYyJEQhQ3B4Umw/WXw2Z01kTz5aOT5UKX11K3loQ1hrRCRYYSQzTHpKfU15SzcuSTJKXkJebTZKLn0lWSpiaHU9KXsvP2w7TlNVMCJqbl13KF8vVCw/XUpxfVVibmoyaStQdkk6b1NNPygmbXk8VkxIL0VKdGgm''@;'; put 'put ''andfV0AlJU5iKX5ANUROdW8zUm1RZ1M2YiJDMWBuUSopVDVzPS9KWVR5Zm4/OVplXzo1d2NHRVVncCFpT0hVc2dndSQyKTR1cl81dTBXRmZYMiV1aEZiR2tGNWRnLFpOYUIsYUVRS2RhKWhqeDQ0Nk1QWzo+IWtAMjs5bCU5UiJnOkw1QWRqWiUkMDZ+fTNiZyoqXWBaUCF3L2dKNmNsP0p0VHND''@;'; put 'put ''dzFoNXxmcyM/aWMvU3B1TWR2PyFXU1V5Ozs6ajVWUl0kfiF5MHxiX3wrXXNAQGRyXT5kP3gxRy5TPGVOVkRoRD12Z0giMDhSZ0xSdjU8d3ksP11TRGUiPmsmM05eeCVBajRxal04SmRiVG4pfkZJdnFgMCY5Xy55OlpzSmAkRjJPJDIibFRQfl04KDhYKmUscjAoTyEvWTBJTnlZOV0vX3M7RUQj''@;'; put 'put ''eWBWMmNULmI4Xyg9Tl5EZ2IjNS90WmMhJEAiaWI6Sz9EKHA7YSM4OjVQMC97bSUxNWYsZl18US86ajY1Tj5NMDBvYn0oOjIhQTJZUFdvYT53X0ovfn5PaCYhbzNDSkpfRzwueXFXayZMXmI8WWQ4cjh2PVZFST87T1tyeC4vRE09YGAkUUJaUSoxdC51bm5PMG40fm1ZKjl1Okgjcjh3UHFnU2dE''@;'; put 'put ''KzVdfW0lNygjcnRJdzR+Knc2ZnVufXhpfWZUQUdVTGByR2ovW1NeXltvTDxTbjcwIypUalFeYXdKIi9IS0VCKGNdZnJyIU9KeWVHRjJmQyJCL1puJit6dktUYS4xU0ZsOFZzLn59elEjZGh4PiN8WDwiUTNuUnAmI3RTRihrflQqZnlafWYzQD47WmouakRHREczRFZ5OFhQWz82NWU8MilDRixF''@;'; put 'put ''ZGppcXJbN0R8UTBDM1A+WFZQdlcxMHZdaWVwKiJXcUkxZTZtVWo/fitEUVhuTCl+WTlnenY7VkB7ZGMjdiZrU1lRdz80cDFwWmdUUDRhPTJvQ0JCTThIIW9RQVBlVWN6Oj5PYW5HLGNqfT9kP0M4Z3ZJSzBZVzpWeFgsZihte1UpdDgpZWdwRmpBI2d+clY7TVV+O0djLGskZjRYeXNdWnpxQ2Q/''@;'; put 'put ''ZURjc0JpcW4qaENpelJRbXQ0VU4/OU5gd1peQ0EwbWxrXTRKLlRTKUhmbGRDZHVMTWhYNX15aTUwLzVEREgvVFBaSmwsb0tCUiZORWk1KCgkeE4iZVpFVlRNNWRzNWU0W3dSVXRkYjozLnpaV3ZpLnNmRzUhOmJWSVReeHhWdmpVektfMltvOl9JTz96PjN9U1tLK1c1Qm5yeitkYW0xZG5mT3Ew''@;'; put 'put ''Y0hCU1lpZyRUNFpKOTpuNCVjbVRDKWFNN2tCXldMcy94QC5KfkRraj9oNWJPKklKMlF8cEEiS1J4L0Y0QE1OQGksRzUkJSxIJWgqNE1sc30zVyhxPUpYSllYN3NyJVpVYXN1MUdpVWAjKHhLeVlDSntTO3puOlUmaDpqKDE3T3lPM09SPjp6Njg5IWkvdDpPQW0rcVdOcV96QTxYW3okNFpYTnZu''@;'; put 'put ''MzQ8QXVkZGhRKXpbPndOUitaRWJdI0Q2UC4+cz5wVCpnSGkiMkF5bHVuO0w3XzFzWlc+Wjg0eS9SUS9qMX4sKXhBWXVoS1ltOUhYOWE5U1BMP1FTcHJzVzBHflh3THoqTGRkLD13I1sxP3g1biZkQmI2YDQ+Mi4oZkREJElrNT0yeUZufiJLMVVRWEIobWZASm9PSjIoZSk+MHo4bT9hTypUVFR6''@;'; put 'put ''ZGZ5VzFlLEM6NWJMfX12Sz9fVUo9OSpZUEZLZ2MrYVR1eU1gQmlYSFpANm4oYSR2XlApPUE8bEZnSGRleVJKMlM0azQ1ZHc9MUIxSWdqfWgqbHIoPUlMeFgwT2tHYy9QMGYqaFtPUWN0OEN5Y3xoWGVvTDEvdVJfZzhYRWJofl8vW30xYi5jfD1KP25sV2VBXz0vOSpYUypXM2Vealk7T0VxYUAx''@;'; put 'put ''dSRrTGR3KCY6TTxUZGVvQ09ATkp2eig8ZDVWQSJPOEIvXltlVVY/NEN3KzQkV31RN1opQXVObXl3ZncvX3B1fnR2diUxQEJgaW9YYWp4dVFjWn1AKlcpIilnYllSREAiOENCbUs9JVNuZUhNTiludFkjWEVnK2h4VjJKMmY/RlBMNCZ6YyQzZ0xlKjBOS21POzEpJj5pMmYobkc/Vn5yJksyRzR6''@;'; put 'put ''alIlT2hCaGN1X14uNmFSMVJuVWZJUDZNMTdIMUVyOXJdR28jTF5IUjpjUiQkcH5DSDMiO3d5N3lCNVZbdUQqclBYIlREZykrK0xbRnhIQXorQkBlVG5oZCI1ZlskOjx0X3Iva11TTmdtPn15QktWNEFPeFk3bzJocEd8YTJ6YkJ4c2F4dEU+KyQpVlV5XihoJSlmNmdudGBdO3loQmJ3TCo2TTB7''@;'; put 'put ''KX1bbl85OGVsUmQlcUh9X2RgVmBUcjIwODtxPThYbHBlIkJCQlIxXXA8RH1TIW9CSWBEXjAyT25xbm1WYmw0ZTFNRC9UaVJ6ZHhUYT4lfnZNJVVyQVA3TWE3XVRjKDh0Y1JgRnhEUU9IZFdaUXxbcX1BSXl2KXtfZXBdYGBkMXJxQmU7aiM1QXx0MFheMlFVbSo1WzZDVmY0VVhdV1tMXXUiNk1n''@;'; put 'put ''YDlZblNhcmprYHZCNENJTyY4c1dRSSgyIkQ6e3NbdGVMK3kyUCVwPHxKLiljNF88KDVePHtDKGs+V2VVL0EkI3BRcyRYbEFGZV06Nm9kKVpAJDt1SVk3Y2QlVFd2RVhoNlhAOV5MNkNNQmc0bUJkRSJmYGZBd2VEKFdYamxtP1NNTW5eXSlmN2t0X1JDPiJYMSE4QkJkSTwkRFE/PXo8OkowZENJ''@;'; put 'put ''VUYjUlN1e0l5QlQ9Ol4veGZ+b3ZRRT0vL04zU0JDZEsybjBHW08zUXIpKU9YdFtYNGVkYnwjKWVFX0NrUnRtayZpYkNXT3VGPmB+ODdjVikwQD1MNzpkUyY/TS90fExbLlYwdE8xaHx7eD8uO3ZsXXBfay5qSkJ7JjdxTUFiL3g3P1VEZVVGI0lqdHlYRzVFQ2ImRXddO1g7eSljVHclV3h7S1Zm''@;'; put 'put ''aFY1SiJ6dzFJUyRke11dJCpmRD5lOEteMTMoKjx7QlJvPklTMlUyJiFCOjE0dTJnOSV7KSFGNWxHOy9TRTs9cTR3KUw3M2lPKUdPOG9QSVN2SlpMU2FYSHJzI0RtSWRaZj5jK0teIShLJkFwNjJxMCZUMGxKeGptZCNYPE16eiM8ZzBdajhJOGkscXpod3tFfH0pUFhfdHAwfW9PcjEqXTFmYEpK''@;'; put 'put ''czwrMHU/cDx8SUZjZ2hsVlZjRXxDOXBibFNIfUljJCJ7MmUhTDBYR3pFYjM+TWE1cFF5KDIpZm96b0gwL01ZPiZQVjk+LFYyNEhAb3NkSWByMG8oUEZTLj9TVSVyTDRPfFMjKkhzP0JGPllPJEpVd1dEbGVVS2lsZUhXSjdqXnlJOykvPEAvPkwhOVBvJjU9YnxEQiJLX31WdWJnfkxTNHwvdm5Q''@;'; put 'put ''PD1bUSNtRm8mOnYhbHk0PmNOMWQlRGVnNFAobG40MF1UU2ZBdDlMWDdtan1mczlbRyw9byF2fmVDQkF+UW40U093ZVJAZklZQHYmMS95KU9DbE4qLk5jTk9YSk9sJVM+QzRyQjd6MXVAMkFkJUA3YXMid2l4QDY9Sk41XyhIcW8re3JJOC5nTl58OGFEeW51R2dMcCtCWyNNI19FQV4sSExiLnMm''@;'; put 'put ''LzM3ZUZZSE4yRDB8OnxqQVYqZFtEaHd+SDEyQSsmfj5oeUlIJC4lX1tmW19OMUUuMy8xJTtaQ313YU1rKk57Vk9bRl0zbm5DVns6YlVWTlE3TmpUNzJ+W0NQbXEydlRMRWRjdjhAXn07SU98Xj8zL0lBXSpOYGx2WFI6Qkd5eT4vfGVKfD15aDE/cV1fWyxwc2w4ZS5MTGpKIjNZfSUuOXglVmdn''@;'; put 'put ''TXIzaXQpS1tJUkcxZDF3QmllalhEUyU0RV0rSChhWHElaldLdjVpSWw+aTpBImkraCxMQDpHPTd5ck4uXk5VJU1ISVMqbzl6XVJrUyQhazZBUTJ4Ny8pXVI1IV82cDNsSlFHYH12TGBEalFbd1l6d2dgfkhbQD1RN2Q6fmBBeTFrOjlDYF4qb2dARER1JHdfPnlRRT1aNT9qRlVTfXVDLC9Gakd8''@;'; put 'put ''eC9gMD04enBESCQ2eDk1cnkkcHJ7OGo1TEUkdF1JKiZJUlk7bUBucFUmMm9HSTJEIS5ebC93fEZDaUc9RDFBPjh6NjdRbGp3Ij9udngoTmRpO1pNQXJ9Y3ghdE1wbl8scC5DaT0lJiYsMip1MmxJdXE0Y35bKl18V3xuTmxRXUVRKFlEPll6Kzx4PzJkXklCS35vbXZ5MVBnUCJ8Y1E+MnA2UGIy''@;'; put 'put ''RTNoZlhFWTNFLilEInF2dXIxR08lfH5HdEBZUj51b0EwNDo0Yj1EPElOV3BDaXVpNWlLYGtWTWBHOVVhV1A8cjlwfj1GfUUrMFQkKzhdZjxISHxGelEzRCpdKzx6XkxLR1ZnKjhhYHgzPmV+VHQrXlVqLz0vSldPblIiekAkX0I0U1YzSGJxS0o5aDlXayooWVlzKn5ZczZiMn5+ST06ai5LbVM/''@;'; put 'put ''YlZ2YD55NnZ9IiZufWZVKXNMa3Mqa1AzWiFDTnxDV29WdEZyaTZPQUw/TDQoPEV8W1cpIyRUZitxMkprXkBgVXRLeChHW2xzTVtKZ2VIWFMzKigkUDFmKl55dkw5KFhKRzh0d1dDe3ldN340JUVVfmNNRW5NMWpRUWp1d1d0QituTWhkSVQpSCk0UURKXjNBKDV8dkVvUyFePHdHSEQ1cz5BN1cp''@;'; put 'put ''JDxyNVhhYUUwaSh2L3d1IT0pfHBSSiZJJWJRa1FJfE5gLGVoYlNPdHFbdVRRQCI0TTY7SndwWTVrSEl0dzJ3ZysvKUYubE10PyV6M0VzMyNxJmdbaHY5Nk84NW9ZQi9NYjIiRHIjN2YhZmFxd28xVHFAVzI7Q0ZYfnhkeDk/Z2g4d3BbXlhNYHIoc0pVSHBtV2FST29fSllTYjZFYy9bXS99YUxY''@;'; put 'put ''dFRyV31wWCRJSSVmUilyODJgdThWd18yPm96PUQralsoWzA0RCY3e2hqfXU0OEhMQ19GeF5zMXN9WUt6PyZXLHVeSzhVPSoldm51KThofUBgfCU5P0JPY0YuSUwrfU1nKz0/Wnp4NFpmNENwV2JdekVAI1p8VnUkNHAkVFdzaFVWW3t0QmMhJl5VayZ9P2JONHpSZ1RdJm8ldVdLelpGUFBMdF9K''@;'; put 'put ''VFh+YUJkSlZbeFJvM0MvQCZ6SFoyaFd2b3tLZDJrKHUpd3skNntDL0RFaURsT3AkQiR7aUNNQz1MNXxoY3RLUi8wYzN+bCwlSGB+QFApWT1LcjtIUnMzWFtjNjh6Q3xZXXJJSXR4UVU3dGklPUtAaEVKbHJfb2BfSDduMC4+YWE1fmxvLl5QQG43cWEjeSppT29xXjN+UXlXSlBMPVZOd3d+OyUo''@;'; put 'put ''fElTXSMpYVtNMmN6OEx3SDhCaGtwJCN8QzIwZDxZSnxDcEg6NWN7NFZ8aGpuaV04R1o/eldvWG00OSRXaylGQyNrXVJPR31DR2gkUk1ZSUx+cTxpVVRqRzBqUFh4fEg2QnpXQ3d4PlRMcCxUcUNoVDdrRk4/T1ZvNWNNWGYoSGZ7KlgrTl90THFIeSwsblZgfnBmS0tdOj5pVlUqIVA5KlEjNkAw''@;'; put 'put ''TThPc2AvbWtyZ1lQJjBIeDpfRDFPdDkwUEhJdFljd2s/RD9xMVF7K144a1pmeGVVcD1YO3tdRkRLc31LXj54I18/JC81U3A0IW1JOTYsYDo5dGY9YGYvM0NmMHdZL298X1QhKyF3fGZNSmQ7bEY0KTQyNnE1fEg9alNzLF9QRXdWXT4oRCtIPEYyTERvI3U1UEdAfCJKWCg7Mnxtbip4dSgoaS53''@;'; put 'put ''Z3w3dzlRSHIkc1ZPREltIkZ9JkMqSFdYPWw/WFdQYFZwXVBVYCF2QnJlTywoZyNaSD5ZYTZjOj5IS3A+azxufkArYUs4ViVEL09LVDtufmBxO0JaL1JbYGcvcnJwdyxzKjJMblBhdyloTHFfIU0wVkhQIXJFWHVFUER6QDYpdTJKTD5jYFcpekJabzF5Jk1vXXxuQCszSDpEMHpQZl4/PTZlMnNj''@;'; put 'put ''Z2FuJC9rRTdXQy92JF08fks/XiRrbF5bOWtobHVnWlRlOiJZYUk8IXtyQ2A6NCxbOXVRZV15YmByQko7MmVVMTx4W2w/emJfS2IrOSNUfHpsRFAqUFRkNVNqJFlJTSprekZ2fjJibHV1cDdDcmglP3EsYjNEXlh7ImY5Z2YwSVRwK0R9LEQuWW12N3B1JktYI15qTi80ISkqSHc6U3ZUJV9dPURQ''@;'; put 'put ''QiJ1dz1UOUNSLlJPNzVafGFbKCI/ImlsLGpod198ajIuVENucDZNVCxLc054OG9nNW5DUXo4a0kkUStNUE52QmV5XlBaYnc4R3hzN3VvcUlOIi59a284c3JZZnlTQnE2Yno/WngxblcyfHR+OUl0UTZlM0RWUG1mIyRQMz9oPl0kTys7a2BTfEcvIj5aTFJISyNJOnJtcGt+bl8qUDsqNG5pVDg4''@;'; put 'put ''VHZARXhZOmtPfV44I35rOyluRlMkS2FWejskeH4wam5ONUZrYkd5IUNvdWEwV2lgWTc3VyZVL29abGdYI1tYWV5uQz56TiQhQm5qIl1wMVVXYllKRWw0dmRvfTIleXw/My9qWXlkPCNbbWZ0enQ+IVRRayZ7PkdvO0UiVnh3RzA7L3JOMDU3dHZYTl1wbDZFRiJpdGVRRSx6WyQ5WSxDYyNlWl0i''@;'; put 'put ''cy8+JmxdaE57RHhFbzZvOis5XS41JEQ+ZSowKE44QGk7OkldPyUpN2NFMEBfe3l3PklkR2QlbU9LPW89ZjEsSjd1MiJYZUxbOXprK1ZKfDsrNEciaTNYLFphOFtUP21XV0BeXl59bFFSYmdeakNuNWlxI0lDJTkpZ242OU9teH1BN3tuelNZTF8meW5mWWBILGslTTQqQTJweUFqcnppOj8hO1FQ''@;'; put 'put ''JHhTU1lzek9qTHE+JkM7Y0U9eXJII3JOYig6SG88eXBvIVJEWC9dSXtRQ2RyZDxjdDB2c0FlJDZoInx4SmQoOCgucj1Sbkg+WTR9KCNTKmVrZmN0NCNAdjRSXT1HQjVvdGd9MUYrWDxUZCFUcXNARjEqS05SXn54RG9sb2RHOVArNm9WTDouYWJsKW51V1hSeTl8I3JwfSg+K0cwYmM6Py4wQDle''@;'; put 'put ''NnMocj5kVWBQKlI9M0ZlLj9NSVtSRV5CRmApN1E8a0YlSEJ8KDc+KVklRWY7QDFlPmNjYWMjLG5xZj4oeGl7Y1Mhe0dDJndDV0xVQ0JoQmN9UTIub2R9Y2VMQHg9UHZ1JlRjNC9ySiNEUnB0RXtHdV9aM0dIMVheRX54P0pzTE1FbHpmfjQjRjVeNVZBYk9sL0FJeyJWY1YzMldkSklMXnlwS217''@;'; put 'put ''akBkVElya3c7KGxyLlssJiZLcjVGdXBMWT8mRFMxQXslT3AxSzY3LkNgcWlPcEJGSWMvMUUpfkxTQlpJP11fUjlOdSYjOERQY340SmxjWnQyMlt6OjAkYEVsZ197a2l7QFsyO3B6L2JRbkZXSllHL2s8SSp3eGFTMXNSJE90RlF5NFYpejRCckJbWFYxRnhdVk1PWnFEUXVib2olWXsxMll4VFRS''@;'; put 'put ''MEBKR2F0SD1aOyNlYnAkazptU1dMbDJRMj57MD9mYnFeaWtJOUpJUi9IIyRTQ0FvVUVjdFhEU3RfPlAke3Vbelo6TEosQmYsI1BPaTBNRU5kU3BZPSlxMEZ1UnAkaz9ZNSE8RGxLWn54KHBzbUlOTWhfe0QmYHZsL1U3Jl04KnQ/ck5qWTspc1RLXmsmSlpgQjg5eCYwPSF4K2wvMHorcyslSUxJ''@;'; put 'put ''czYzXWJjVWM4Nj99SjRhblIkVV1qcENmZSQoPFUkJXdIO1N0MVckTCJ5MX44OjE6WS4uamdVdkhmKTFNMUkidk1+amM1NXlYOmBtcXx6SDZCMD4oJGBjaV9pZXxmKT9wSG1tdzVJZW4jfCx5XkYhSzIvIzgsUlFMcX57eT8rREJSaDxqYjIwfjd4NUdEWiZPIzN+NSN1RHMoKzdENGYscWN5WzR6''@;'; put 'put ''RF5PTCNxMSZtUUBVT1Bpfm0qNV9KRk58ViUpZUdUSlhRYzQyeGohSFZeezsqLiRpblgxSlhKe3EyRGt+aXVEVj4iSnRyOChkRz5QeGY9MXtyeEs2Vm50Kml5YUVgLmlIYEdNZXA6U3NVfT5HUjk3bjZbblQ+IkBDNV0pL1BpTkohZTlCfS9HeSwoPUJ0Uk04S2FjcWJjK05eQSsoMyZaQUo1KGx2''@;'; put 'put ''a2k9PVcvUXJwayEuWClAaEpGJFlSSnpuLDp5NzRsfDcufFcycyVGU2BAQCg9ano9UFFgTntFNEVSIStiWEU6cGdKOHN7dHR1bjdSV2U2TiR7XWN0XyljcVNaKTxHKzlUMW5ZNz5keT98PnthelshdDhjTHhYQTUxPmp6P0NGYkgwa0h1Jn1oYHVsTjZhUldZQWYiVH0zM2pMblFGUU1kTjVuPEYs''@;'; put 'put ''ZmRaMVt8c3FrNj0iakZ0OW9LWSE1K3RaPl8yaVsjMHg2Z0dSOlBsI1cieH14UG0uLzVHd3huPm17SU97fiViYWxmXl1LbixmN05NZFI0RnBKP3ZUTkxgeVNsIUJQRHs0Y01XeChpRUxUYjozcT03cGlMSD5tS2tnZ3RKYVs2VyN1MS5GaiFVZUckYk9TO14zSjUoajpZaWImcTVGT35jeVsmL3lg''@;'; put 'put ''R2lYTzZQMDhaJS83YzZXVzklOWwwSmxKZmFGeHhUTl4sMCZiQzY8V0AmQjcxWzo6Km9BTjdbZ2M4XypXYUhQay5ALkYoRiNEOVkiNHJ9cVgjdmRwXjJHQmhpRmZTOXp2Lk9WMHUwMXdSUGxJKFJyWlU2M2JKI1A4LHJ8Q1ZKTV9NbF9pUVBtZloodThJYXpeSkJ4MGJTPmhoemA3QzdBJHhoWmg2''@;'; put 'put ''X3A/WDdkLGozM0U+MjVnfTo6PVlBfFFzWFZUfkF8VDI0QnZVNXtSek83K0VSSERvXU0uXzJxbmR5TCMwNmR9b0lzSnh0Ilhae0UzLD1AXns/RiRpZllefktRO0lYKiRGU1ZKdm4wfiYwYUpbR1BaYXFbJFdQYnxIQj8kLFAqREU8PiF2N2NealJ8X2thaS5MOTN5KGN9Ry8reWx1Z0Z7THdmJjxw''@;'; put 'put ''U1FadTVjY0oyVE83TFFjOTxlOGJhUD14aXt+dmZmZjEue2pNcnxHbjwhImVpNCVFRVJmIXE9YnFJd3tvTGQkcmRKY0kuXmVEOXJ5OFpRfXJzYWpMP3lTc3hFfmltRUwhYFJLS2UkNFRyeX5DM3hhI2liRzE3WmdVe1tsTXt5QlhvNGJCbVFzSFs3fVhmWWh+SHJ8cSt3VCZ9MGNyYlhwb0AufHlq''@;'; put 'put ''REIpQCNnfFh8Q2w5JGx9LkBUN3VbIWdbN3IsY3VOdXkvWVtiMXRZaEFLdHp2d3Z3e3lqUWFKQ34pK29BMXVqeUxGTENIazkvWypoSGM8V0xZU1gsV3pffXkzZ0Q9bi5+QE5hM0BYTmo/ZjUxcC5bX0o4TUNGQjdyLkpIUVUjKzxafnlAPSJuITI6akYiUSlXXnVJQH5vdztiTipGcT9qQSZ4ImNr''@;'; put 'put ''QlAyUHlwXklEOU1ZOl0rcmk2JXMsdHlGRE5AcVUoa0N+SSF2O1hTTjhKdlciK1JVKGBRNDt+Lns7MT0/YDQrKyNPRSkzfXF+TCM4PmE3TzgkXyNEVWdffXBxbnFsNk9WW1BpekNLLmB9SXFebSR9XyhMczJwQ0c4U1FrRkhiRWVgeipQRkU8PWIvO3QpeGZHJFRfWUFGPnBbTT91OUNQRzo+VGkj''@;'; put 'put ''MX5LUS5AIWgofXo4SnY9MClOVGZeMTxRX1h4ZmdaN1BmKFddcz8uQisjMi9GZ1cyV21kbFJ7cz4wMSYwV0hiKWl7ZDttQHBaYFhCQH1JQFQpS0pGRWZMJTM4ImZMZVgoOntzfH4wTjUmJHI1fHpDZHUxWD5DSz5pRTo4c3k/QyxlKER8ZDpJMHVBY2Eka0YwRn0/VTYkVkpaKU09NGArdyslUFRA''@;'; put 'put ''Nis+eiwrd2FTKkZaYUsjXXZnMm1FWk9bNzZXYlZOdnpPPGgmJEtMNihpdSFENXZbfm5RajZ7bmlzcDg9cGFgOWRsPn4sMXlLelApXiF7Zz0maGdsSHxSL1cpQFszY1ZEe2c7JVJLZHQrNilpOHRHJG1dfEB1U3ZmPS9EeHVxXWtVOEV4YiRbIkF3UG08YDg7NXksaVkubnhmOTJXVXc9YyQ6PEVb''@;'; put 'put ''VW5qeE5HWDhneT0wb0x2IXFwMVl5JUlsPDI/TDpJZkN0U108W31FKkVTZG48R116QGNxezlCNnBjeyxYeihtdyE5aGhSK04xU3gleUx0QGYhTloxVSJvW1hzNTkmdDY5Y1d3PVQ8OmtwVEpGSDBPUl5hLkJsTmM8RiIuLil6a2o2XWBvJGlRe0J5IkZdaS8jemtaPVp7K1czInU8cVB0bTBaN3dB''@;'; put 'put ''bjFHdmFwSXJnJHhlIX1oRjp7Qz4jWHErYWtpW2V2M3Q7RygiemU8Lm5bfDw9VWxKZ1oiMD57OD18e3JsPFtDbWFTRzQjeWxjNHt2QmdpZD5raipGdlY4ZF9kMjhZK2dFUl5rcW9qT3IyOkE1PG1sSlBwfnZiQGprPlVHeG5Fc25COypYQSI7MypCYHFIaytqJUNfS1Z0dTIkcSxIUiM4RXFAbjQ8''@;'; put 'put ''XVI3T1VHL3wuM0l9NGhRYl1ZYjVNIip7NClfdkUjYltmcUpELG1HPFRbc3B0JWVpSnEyLlk+M3ZVcTFHJWAsWXBVcX50MlJIUm0wYmtEQkxGXXpLU2VPL3FzMkR5NkFRKlJqZlk5USN4aFVxdFRMMEo6QkUmfjZTY1E7QU0qI2NdTD8yeCU9PH01SSU+OmZuNWZxLkRrfE8ia1hic1U1M1E4ZVgr''@;'; put 'put ''UHd+WjtDeDouSjpJZk1yJUF4OXJ4Pzt2QkVGUUtgVlc6KURRITJ3XyI+SX5aYDBqS3RWWk5MZU5QYEMzQnJRU1JJYkI5IX48dHJPdmteZFJfeklAclVPJVNxc3AuS1k/OSMjYGUyKVoyaXN4e3ZqfHxwZDM4PHwyIl4rT1tDYEFFbzRNImN8LiZiUW1DNnZAcCN4RW9mYThfeVorX1lfVnRgcnlT''@;'; put 'put ''WDZAUStHaEo9VjcmU1hMX3FWek5SSSheeGR4VlNdQCQ8VURwWkgjVDBVdXt4Rz5DLE9WK10jTS5YTjRHUztDeS4zPU9qOWVuMFpZd0xBX0IiK2lTbkdRZEZhVmljLClpJHFUWyhmV2gye09ZK3R3TVt0L2dvJnwvJXtRMC8ual9zP1JRT0pkYSQ1KX5qTkdhW09jWmlwbzcuKHRieiwlX1BeX0U9''@;'; put 'put ''SWxjemppbnsiTi5xaV85WkB6S3QqOHJgUF54akh5W1tXVChkR3BIUV9oPGRbYVNvNExKRitTVz17VWMsTlkjKmlSIkxQdi5pOkBQdTc8SFNGdiNuLE43fV8ibjJXKGNxLjBOWjhxSn5wYGZpRzp3Smdta31WdWZHVDQxSk5NcUBaUjY2Ul9Oc1tbaGB3Zy8qbDZKM0V5Kndwe1EwdjwpIjVCR2pf''@;'; put 'put ''UkAsN0pATEMiaTx+VHd4OndBcXx0ZXZIXXdZQ2l0OUsqXjswZWpman18ZkpvUXREN3EifDAwQzErIy9AYGpANyM5IyZQOVZyQ2MqfWZwfVJgVDh1ZHhEdjZSQHI2V3JfYTJeVnhReDBOfFN2WyRlKSFrWj9tIzxqUDNGKWpHUSxEQkZPVkosO21QKD04SWFFfT9JUnpZcjR4WiRMPGpJLjpDe0NN''@;'; put 'put ''fHEuP2g3RjomNllrM2VEcTRCPy9VOEc3RU0xbyErZW06ZU1CJTBWTiVJXjwuYUhVJVI/L0NgMHR1e3gjXzQsMXE9eDA0bkEuWndLYiFZP2YmKjImQnFyfCZmWmVRS31yenBPJSVWazFRPj14dzw5PTZmZXpWUGpsQCwhOyJDZWJDQCZXRzIxWjlAOj1SKEw8b0Z9SGYvOCRXe15kMHRvPkEkZits''@;'; put 'put ''MHNOOG86SHFFR1dmXUk6WnRNQS8mW3NwWEswNGtjWForWm9RV111S0NvY0BrTmB3UiE4Q1J0OTE9TWspX1pJYnoqN3VEfk1COGs9MUlZTzJsK2I/fUc2ZyFRKzJHR28wI1teR2w6ckV5elllRHxYd3FUR3JMWV1rSVpsbF1SUS8kTl16ezBTWnIhO3NHWS59Yj9DVVpKOilnakVrb3xbKVkrYldY''@;'; put 'put ''VHV5eTtnLGR4WkxxLikiPmMrbGxNel9ZUzcuWTdScFUldzZuYF1Ic2JnR055RXNrSWJGUWY/XkAodDJFJnMuZXRrZktLXV5jO2d5IXBoMCFZNWhpQURDNDAmPEl9KDU+dH07TCxJaixNJnlpSW8jP2JGL20pKTdKfnJMQiNbcTZNL2oyUFdSW2phVVIqLGY2P2xdS0BqU0FedHY6R09ESDtHUGxG''@;'; put 'put ''eXtrW3pYUFV5aT4rdUwoS15IMTZLXiQ1KkNTJDdNK1hWKnZpaHJyaSFyaERtZit+WVRSVUBJbGpOQVU7cWRUJXs3VWdoXyRsUlAwZjFFZjJJTEs4WTAsIj53ajR2MWwrU2l0PjBfMUZfPV15OWg5KTw2LC9DOSY3MW5GTk4pUTcuWmw5VlNYR1BKa0Yrdj8qOixML0MyRj95dHxMVj1MTkRRWldJ''@;'; put 'put ''XWxMKm5zTiVJKDV8IU17LFA2VGRIPDddakA1T25rJGVNPUk1UWhkJnx7Yl1vTjJQdDVtMyMqcT1nIlRmSlciem9eSCx4U3R8Zk1JVyglPm14OkMqPmZbTUpucT1tI0J+YzVpLEZje3JsQHNMIk4jW0VmLE9ZLlVsNmQ+fThKKDdBd1Q7XXM0SDd2MEdBN0coTEZKaGx9MUZUTE9IKUlQcEwlL3V1''@;'; put 'put ''P1IuTTdzN3xjWVhLOmI3bHkuVmMiXysldWNHL1EiVlt8VFNNWm43djRVRD1ydm1rYjF2N1Fjek9yTFtKPUFwVlN0WSNVUW0qYnZOblpqcz9hOj1JfmpkXVAiayxgRUczWDNGbSM9KUhiSzxyWDFZL0wsN0R8I3k2Q0c+dyYvOiQlc2MkTi5IbV4xU09neCtTUyEweXouNyI5bHQlX3wxRnp7M0Rh''@;'; put 'put ''IXtHZmhHb1N9Q2RuXS9zW3VReV4uTkxpTEBrZmRGL3F9KUhKIllBW2NLLy9CM28uaEVoSSFMREh3NilMMGN6SHNIMndAKDdCJDVtMXBkekcyXjJFKUYwJmNXb3kwRyhfYWU/V3E6d1ooK3RZaUt6djZ+fkR2YlVFRkNANXg6NT9kWXpWRG9fMV1NRTZ7cFJIKT50eGp9VyUvXWNPN2gsWz06VD99''@;'; put 'put ''NWIhaSxqX14oI2MlZERVXWFxe09WKC4/aEp2PD95Pz9dN0lJQUopISVjPlRhLn5YPjYmWzk8MGhBSDdpNEF3TH4zKioiNm05Yy9DWkc8XkZJK0piUVhrRyEoS0YlU105SVdvMTdlZTM0fjBhKGRke2hDdUh8anZkcDYhWSFxUXVZMXl3L3Y3OEdXaEY0Xm42STB8JTV6LCMkSyg6UiVWWiRdaVMr''@;'; put 'put ''K0FzYTdAQHB+V2k2dCo1VipGSURhXV9xcT9ZPGdqOjdRd15bNkRJRClyVSZ9ZFJmbEQ7MnZYNSxGcVc1WmxATmEraTEha3FiV3F5Qm0kJj5ANjhhd3NWTXY1QHp+QyFWJVReUyZuOX5fdjw8cGhLZ1ArMUx9e2Z6QyM+JC58NUxtJGRPJj9bclpARD50dDVPa3E7MUdVLiJdUjJZZEVYdihWVVRC''@;'; put 'put ''QEwrSDNEP3VwdSlFYnB1MVN+RkB5cE46JVksPDxAalgjfFBIOkR3Nyp3QmwjdF43NCRMazsoWnxyK3sianpJYVdRciNVRHxxUX1vVFhOIzZ7fkZLeFFQKXojT3E2R1MyMjd9dT5pYS5QYjJBaVBaejlqJFRaX31YR1lSZiNXZmJEb3ZhdCpQJSZxb2F3TSpPU1pZOjQ4cHFNJkJgdWxFRTwwMktD''@;'; put 'put ''XktvPUFFS2RfSDBwQzRUWl1oc0tERnlGZDM/K3hMdlpITmQ7YWU9JipVKEVTTiFPW21Hb0dke0dWXnUuMy4vTVFTO0NlJCFMXUBMPT9MPUIkRkl5MnslbHpIZW9rWkZ7fXNBU0RmRVN4fGxyeSI5MiUoY0F3QyJ7bnQrNXNGd28sVjIjPkJoXlYoKVFDYEVOXWxLbVhLSCoqMzdxMEdbL1d1KDw8''@;'; put 'put ''QHA0YnZoR2w/YmpWWFR4WFhgRXN+cSx6QCVhVGxFWXp8aipEZzRrRm9QcH5WZUBQfmRfJi88S0Z1NzJEX3p5XWVzRV4weFluc0BjI2RvQUw0RF5Zej5qNCMkcGg7eSNHP2o6elooSD47ZEpwaTZgdEhpMXtQYXIjcGgxbj1+cj4pImNqfm4jcjtYM1EzRmpZX1djfTkyND8oKUJ2Z2VKU1lLQjJg''@;'; put 'put ''d01HMy95K2FNM1daY2Q4I0k8cDt6PjNBXnY9eEM4O3B8OkxgTjQ2SXtyNU1oVlBxZnI0K3Q5TU04UiJFOjczOUNFa35CWj51fGc0KlQka3tWZkMkfFFVJGsiSz05Z0J8L15VP1o6Xmt5QixqODY9R0JeWGBOPD9PLE8vNWd9Qng1Rno1bEckJERqMm1+ZWtqLyEjby94SWNqKEs6TzNBN01lXT4s''@;'; put 'put ''K1pEISY4VWNASUlZWSFdMj5zSHxJTjMwTitVZGl4fj8wQiQ1b153YShHVkpnJCpIYF1uIzVGRGQ0NV8vbmVrRl15PmghPD80MkF0UTZfMl1wPTkyRCQubytHeV42e3clfUR7JT1YI2tIVT5EVE0xdDM7Szc1UGFbTkdaaHpkOSo3PihwZGF8LHRuMiE/VmpiXm8/XmBkPys5eCJpa1FTcn1gSXU0''@;'; put 'put ''PG4wezIhPjRkaWVkbG5IKDdKcEdtLmU8bCQxV1JGKEUua3EkQFFhSFZVIXh2elQzNTdkZHk0KDMmI1BnPHQjOWFMREdgeHZoSDFJZ3dKT15hLC5bdkk1fjJ1JGAqQldTQ2c7Lk5FQCJiU1ZCTSklUGw6XWEkMl07fW4yX2wlampYSzdFTko1WGVHT1t+ZEpPczR2b1Q6Qio+Ymp2RWYvI1lTIm11''@;'; put 'put ''dmo7L19zNz56VTlBaH1aUTVBdSh7WkYlZm9yLlV2UjNoJipdVWNCOnh6QG1DcEgpbmFzOWcsS1YuIk1KO352W3pMa01IYGY/Z2oyU3BXZ3YsJURNRDdRe1hidVRRWmQ/cXEkRWlwXlg0UTUucCJ9alB2WnR8RWROa0l+PllBMjFvZU0lNTpobHF6Zl0/WVhbcFlDTCtpVXk6Ljd9WDl7fUJCSTUl''@;'; put 'put ''akJuZDJMNGJLSGlAXSx8djshRSQjaTtCTWJTLnJZVkx1cGgsRXA/TCwrUXFUWWpRL0dLUm4/O3ZCfHJwTWReSUBBfDt4MnpkW1lrNVk1XS96QTlQVjcrR0wuTjkqTzBjQzIqYkBmTnd+NDNLfF9QUzl0bVMjOj9zVXdCUmJ0ZDg+RH4jNTgmMFYwSXlRXyQzXzlJTltPN3hMVE1zMklkOTU0e2M0''@;'; put 'put ''VlNuUExrK09hQ0siNnxLUkp9PjQ/NXZFWXtJWjV1bXY3Vz9iVVYodXwie3JvPjgkKHdHYmF9JnNZeTkkUTtxdyFPVCFwZ1tYTlhMWEpOMyY1dCJeXXAqXW9lYmAySn0ofDFjQlsrMip2LmNPS0MsQyVlQ0tdQHJvTzViWktpWjBWNXFkJipPZzdbRUZ9anhzPy9teyFYJF06bSoxOkdleis9QUx4''@;'; put 'put ''dUM5eEJQOj1BQ296bnwsJlsodS9SOD92ZyZ4NnMmOzA6OX4wflhZOUFUbGc/ME5SfndeXyllMTtPS09LZEA4TUg7QnxHRGYvW35xWSUqPiUlMCIjRiteTCtBcFIqb2h7YSF5VX5VZD51YjZ9eShbOyF9TFJvKTd4SXVsSyolKlZCfGA5VG9vcF1ZPl9NLkxMJiRWa2YucTpmTkYlS0RsW3NxI0dK''@;'; put 'put ''K1Bhek5PPFgsWHJJTiowQnJjb3RdbmlxJTBEUTN4OHpgejc1OHFPIyxXTjRFeGFUNHkjc3lISFRfUGs8Y1RZaEQlbiR0Rl9wbjI9PnpAbEE+eDMuTUB1XUJTKz4oKzJ+bjBfS2M4VntXaDI8P15nWWIje1ZnSzptI2RXIzY5MjBWMX1odmNZdU4rUFdzIkovdCg6M01VS1A6TSVjPWozN0ROMDo6''@;'; put 'put ''M2dFc2QsNENPRihJU28jQmRjKyZMWlElT0xHWm1eREpCbUdaQmF3Qj9xdSZ5XWg3Ojl5fTwmSmt8Xm5AQSQmMyhGbzY/VzptfFZCTl1ZcFpsMCJ2NmltblslYkJBV0tNdUxlW0R3YiV2d1ozY1MvQioxYSNXdVdxZGUyUmZoRT18bzxaXSE5Vk5tZHhyfEtJOjJKNWVfS3pYbkhOfixhUE9LTygj''@;'; put 'put ''Njc5eDtXVV1oPHdfV2NKQ1VUUmpZP1VBQlcydmZhIk1MITV2ITx1NlZVa11INS5+WkRzaGxbTUxUISYjakw2e2s6eS99dTdian5PR1JzPzwyeGgkP3dWUlF0S042WWoxcCtPRWJNOUw+WEVRZD1dYjheKkE0cVU+YSo1XWpeMElNP2ljdmJjVT9IW1A/S1R9Lj5kdiI0RnEwalN9XkFgZVBlXVJ8''@;'; put 'put ''SSlQZTI8PnlXKlZ0Nkd+flBENEZlKC50Ny5tPEhnaGtaM25gMG58MW1RSixPYHxlW1hDRUM+QT5CenpJMnpWPSIuTUI/K1BHY2xBXnV5PyRnSC8vMDl7LmZfMF5mWHxpb0lnKUJXaDlCVzlZfV88QSVaTXdkUDs8Sm9kVyNEQnlAL31gJHVTbk4ufSQqaF9lYCF6TjwpZmM1Rzw2b0kofClvNXdq''@;'; put 'put ''fFgrKkM1fTU1dFVqd0VzXWZsaExbT2xIJkZJYlFmMTxVJihPXTZ4YSZAISFLPEB4fXNVcCFALjBZMUswfStbM0pLX3pOOiRIJmoieSJFRjFLanQwMl5KTF5bekwuUHc2a2hSajdwYjFzK0xXS3NyVGh8InNPOnZgfk5CXzptW1trTkxqMz4jek04P3BkXnpadj1qKlZ6TFoqeHV8Wl90ZUpBblhj''@;'; put 'put ''OCpwTnE1WH5ldEBLUT0hWXdmOHo0TTRjR3Q1UFhLL1QhRC4kLyNUdDxDWUp1Z3NBKDo5UWNpLDhZKmo2Rzd+aHFoeHpNUEFEO3ZhfV82NUJBNVNJX3BkLGlbfHE8RGdWLlNefDpZVVVCfGVjLzVROmppUzhrX00/RjhaOH0lRj09aDNmVDFKS1tsUHRtK0tNKF1RSiQ1PX5AIjNPLGpwWz5aZTtI''@;'; put 'put ''TGdpYj92M25QVCQweWZsdG4jJiJePj5MTkQyQn4rQ2kmfD5dX2F7MTQiRFpCT0syVV1WPWhQJTMydS4wSCpQfW1RRFdJdjo+N2JwQk0iTzg6VSk8QXtALjh1ZC9XYWssNT5HSmZkT2x7aDZSdCo2ZHxHZmlNdHtuRFAwfFt6c2Q3fU5CWFJYSV9uYlFGTDosNmpEK211fCtwZlRucDl7KmwielRO''@;'; put 'put ''TWN3NlMmaDxgbWk8e3ZCVmlXOn42YXgkNl0ydS41MDNPOVZDfEkxWyJaP2JlJHA/IW1lW1RINTBgbyZbTUxgNTkkVlJKZjFWNG57MHthVj1TTXYoM31tTlQwLiVFV3NTRCh7SSUpa2lvR3d8JnNXcDE+MVQwW2J3Yy99aVQwQ2dnOTNgcjUzVjV+YV9RYkRVPi8/MnRXdG44NmYsaDlaQ2BeM05A''@;'; put 'put ''ZC5KZF59ODAuTGIxTVc8XVZ3fExmZzlRYFo0THtTSURGMCV6YDFffFBbWVdaV3BhKFVaW3VxYFh5a2A5aUZ5MlpLPE1IcVB3MllKWVh6aTA3I0MkUGxLRG12Q3Q4OW8mUTMhImxfaXJmdTd3XkJFU3U6JGA7SlJ0REV4L2EhdiF4eXdPUyRGSD9+bEghfHhxaGdjLjQuOFZVU3ZHNFAhb1Ard2do''@;'; put 'put ''TVclTzdbQEojVVpNaUY2UHUvRTMkfWJYJD9dLmdWfSQ+eXdlKmFXOWVILE91M09MPXkjQ2VDVVk/VCxCPl4oeipbPmxlKC8+KE1uNWUzcjNlN1tWIVNJYVFEc0RPQ1shbFBRP0NoKGo6SzArQW04cUUmd0ZfVER8W2QkdHM7IyZbLD1uISRMbHpKakUsXnFIJHdXK0FyKHpPdyRTJXE6XWpVKTFV''@;'; put 'put ''PilhRFpwMlJRa1VfNixFPmY0RkNzdWdafkRed0cwOVZ5TG9JKGI0Tm1Ufi4uIjF4UjNIb0pjUWcrYV4lX2B7UnQlRTFaLmVaUFp2bD09dDl1VlhIQnpUOkNsUFgkSjBjbjNhOjMsZy44dnA5WzRVRzhCbT4uRy47SSY+WXlrM0dDUS9kb0V8U18mfkJUOCtBUVV5dC9sKW9tazFVei81d2c8aWxS''@;'; put 'put ''OyhQOi8lOVl2N2Y0ZHN9PFQsYjZOIj5xVUV7UGlDeTBJVW4kUCp9JkhgO1VrPl9Yb346YU4qfVdSRWZyM3xYb3YvYkF7RjUjYiEhfiwpPjJYWjlLQlhYLi5LQWE1fEtxOWdzcC9uMCx5RFJBW3NEeDpDN29UbS56TUVDMUtuXkQ8a209fk5aKXc0fVQxPlFbWmIxPCI6ZFJAJXA1YUhFcCUyUGU1''@;'; put 'put ''dypuKFk/X3FxQHRYfV41OFFfWjx9LnFdTkJRQnJxMmFvMmVhfSkwNjgpOkdeZERVTGVOUm8vZHkjai9LSyZ3MXpIR1VDPko6MCM4YDZfcGlmSCU0a0d9RCRjXmJbPWBYdiQqRldpd1E6LE5FcGpYW3M4MSw/bzYuYjkrPFZteThzcUAmWzI5dVtMM0FkQm00Vyh6dXpsSnBHZ3U7PXxdLkhWdVt0''@;'; put 'put ''Qzw7TTNGPFt7YzUxb0VsZ0V2eiouRXtjQmsrYyIzckglbiNFaHhFKWl2XTRBMGNxKmdeeWglKF97RGJgXkRWO1N5b3ZQT2VMUUBtXWoqeV0pTWpVXU1DMGZvdzdVeEhvUEo5cWdFQkZvKyZjJTFSMWw8JW1eekQ3VTNuO0RBYT4rZko+LCpVe1ldOEs/a2h8JmFkTGg5byFfJUNNd1lTfE9SNWhj''@;'; put 'put ''e1h1SzszP0lOYCEjclBMbHUpO357ZyZtOGhPV2c0WSEpKUwqTHleb143RU9CdnV9VCJgPiV7YTs/LjZXeUpCMVRTIy5AekpNP1ZLKXo1Lzc/OlRvImgsNmgidDVfLHEyP2UiWlovUnlVLD9rI0oyU3kvbno9Knkve1R+bGtPSkhXSTk1M2EhUiomZXlIXSYwfmFlMjxmdGJMW24pQWpxQyFTRFgm''@;'; put 'put ''W3B0cHVXfVo6aXU9Wjl1Y2Iic3BtTmlRalVpaUFzfW4oYX1IfmRSTkFmZmllNjk7QCtJYCUxYlRzXkQ5Im4qZE9nP0ohXWd9JSReOzFiLil8VCtWcFRqeHdqXn51RGl4OzwhRkRlKy5EPkRfNmlrOn18VDpRbDB7Pi5Keis7djt+UDM1bCJmNCxgW25NNitHWmFMeWV0NHVSVHcwck49d2w9PCYk''@;'; put 'put ''JWpHLy8oIXokWl1KIUZFaVozcFJXOTp3QVZXXURkKjJvOCxdI0k1QX46XVNmbXpHPERRTChVZElTUCF7bjNAZWFAeTVXaEhFOT0kRihGd0d2TituSjFlSFEhJkpSJlVdJEcpdixXTW1HfEZEQThfYSpvQlVfRT9KWmJ6WnRHViZ8TXxxY0NyRDhucStaMV5SV0QrPjMyNy5bWX0xQ1Q1bmE8KHtD''@;'; put 'put ''fXtpIX1yJTdtKjNQLHVLREEwQD9HdSxHeWFUNihbMCNEXTY8WE9OUVdDYjV6UlJSMz1DWjRxez5gV2R3JkdPNFFtNlZXXy5Od1VWPk95PDlNOk5yPzF8aD58OWo4KyU0OWNmWDV7M0hVcCJzbjxjYFIveGNlOCZ+InJZMnBZQUd0R3RMYlo8Z0hPUExaWG1Kd2JSODdzI2MmRzMqO0tTdjlKM11i''@;'; put 'put ''ZVVMd3I/SSkwZT1JW0lrQSYyUGBtTkJKQi9jOkdeez48MTx7LlZnPWZaa3pJajdTS3pVWXJXKm9fWT40SHd+eUw6MiJfRTdtcHRga2dYXmQ1SzkrSlRMV2R9clp8dXR+XmJWV0w6NEZCQENdTkN9SnFgMG95U1tzKlJ3UFMvJG8yJGFtNGdPXz9jek0xfGMxbyJ5c0x8clV4IkR1SHB5d1dWTiVE''@;'; put 'put ''TFpZblJ+VkRKeyltLzs4NCE/cCF2eCphXnQhXnpmNkxGLiplcGAvdVp4Oi9MelpZZSM3eGFyOktfbmVselBxIiRzPXopQU5hc29uRns/enc0Y3w4Sm5hRn0uPTYsa3tDalAsTEI4Q31WLz9TXWRva2NHMTgoaDF3ITU8V1d1Ik16SVg8VyF1fUwwc2NmLyFwOCppNS50d05+d1RLTC89UGZOSWIk''@;'; put 'put ''XyZTbCg2QllXOGFefU1aWi5pSHt7ViZYTDtOdHtCK3YzNSQoU1dZVl49RXZAWHhoNiZ9LF9uNmdPdi9RdGh8STwsM2ZDWzxEMSJlbFhBKWhILGsyd2xYO2dYYisjQ3M8RT83cj44O1VlaT8qTXhkbyJ9OWlNSD53dTQ+ODc5ZkpmP3ood0xtRWxnYDtaTVhYWDhXW2B7eztre2BCZUlhIVpWfmMw''@;'; put 'put ''RU9KfVZ0Myx4bnM3T3lRaGVTa2YpKWJtSXY+fEhBVXduMFBQZXdmO0M3dkpmczVPfSpZWTZqRWpzSTQzL0AjbXE3NyhYNSg1djhgbUJ9aXJdanM0Z0hoMjB2YDRjeGUoJFR4NEpuKXAyYWhYYj5uaTomSD0zWV1DcCEzW3ZkOnpfJFNja3pYd3BUOHU4Lnk7MEBKey9ATlhecUUpQTZ+SDNLNztE''@;'; put 'put ''JGVONztRY0lXWD07MF1kXXV4KUQvOEp+Y2gjPkRReExKTCFqclI6TmFvZ0MvO3xGY2x5ZyZ2Wl9UMihiW0Y1WD5KMld9KCk0Iz5PZEc3ZlZJdnJEK1JgV0BdOVZed0xRT1ZteiMoN29adEJeb1ZvVTZ5VkpvQi9JP1tqMnluc1BdJkltcHUySSwjPExeYldRPz5iRmxgVUJRSCVnSXFvVTQ4U190''@;'; put 'put ''PDlwJCVVVFhbRV04dlJsKEcqdSIoZFZyU2RvcVp3cXAyOmB2MytWPmBRM2s5IT0oX0x8MTtHPjgze29Oemc4O3VUbzcmbWkvRCFmSzBVO1suYiNAIzs9Pk8jKFQ3eVlacCopI0xydHxGUWA0IjE/YldDK2hKWFF9ZEteMlVodVBAfmNfJForITk0JlRsVCUue01TdHwmU3Nga28vInZBeS40R2J9''@;'; put 'put ''e2NuZEs4TlVHQ0p5MSpGNU9TJTssSC41MGxjRjRYLnlRLlUodiNXJX11blpVb1JfbFY+Ji9SKVJjYXpwKy9pV1AkJihQbiNhRVV9ZkVhPnNJSEVOIUhXJS5hO1B2YHI4TnpQbHZ6LlAmQFAsUFtkaXFdOjEzWHlzM2p6SHFTdGhsdzUqW0VKKVAxdUBCczdIZUhxVmtQPiRndHhJYj9HZ2lnOSR5''@;'; put 'put ''SjdoOnxMTWhCeUczY2lTN3IkcGs3JSN4MD99SVteRUwybWV9VVo1XyRiOjJOOEk9UV9tREI1dFNWezROO1IwOVJiWlFIfE5sPkAwU3ppNVtXZHEuO1ZwKkd5bmNeWDRHez5+NCh0WDIvPiJSZEZqS3NYMzZRPyFzYUViaT0+SXpjNUwoeFVobmNsNUl6RUo2RGA/NCx1S1QqWjYwM19yfVFjS0B6''@;'; put 'put ''LEhHVUFsQDIoNk9Qc20wXTRyOGhpIiFoJjJMIitLQitvbEtVdSomL3BhN2FeI2kiYUEzT014aSZwbzhKI0kzL14pQWgjQFlJamRiTSFZeExmMVFvVFdlMGlfMDBzPlsxQlQxfEZUdk9GKm5FVGRxLjVxU2p1PHRNOlo/PUB7a1MkOXx+KmZddDRpPV1eTkRfMFIqUEttYjdgOF14JHc9azxoJUJb''@;'; put 'put ''JWE7RlY9R0xrWixEbj8hVUwmRmJAYWo8S2ckWnVqIX1AO1Y7P2pKI3JJZFVqYldBbmM8PHxieFd2YWB6U152cHhkIzAuQml5WGIvVEdlOGREUzlSeHNFbSFhWC55Nm99Rm8pbz1ZNTleUWBoNE5lQE11X0Qwcjt8bkhrY3tTeGNPa3VKbHFbMyZAb2pdbSp+LmZ+PXZGaztabzYoNnppQm9YT2hj''@;'; put 'put ''dCVvNzZnMXQ4aVlQdFIzMUg1I0ooInd6XkIrXzJIfUVAWkQiTE9hOllYYFUoOkh5UlcicUZGdWtKYW5sb2RDUzN9Z1AlfilNNTg2UjEiIWU0djdIflhsSXFeU3BzLGMxdFU+XmBSQG0pc2dRZTVKbnc6SVQsMDxPTVc3I0J5W3MyPHc1eExIYUJdfH1aZ0lZKmNve0ZPKjlvbj9VWntCKUkkKEtp''@;'; put 'put ''TnRhQ2FEeiE2MXA2ODR3OTZWMmRWWnN9Kjtqdy5LJkJ3P1lWQUx1Lld7aFNYWTRtP01PWkxWREs2fUUpdEg7VzdmWllYUDY2NDZTbXVWKWxNL0J9aUdxLm4rIm9hRFh6TFJ9Izt6dipXbiZoK289e08sZnxkazRGRW4vUit2NkghTW9bRFFiT0xRNnJLSFheSSNpcHV4VVg3dmQ/PlE7e3dHfmxl''@;'; put 'put ''Y3c+Y3pFKTRMa09QQFJaOnlAeU1rQkUwbz9tMGY1YUhpL2BeQSlMfGs+TkhmM2QiVzY5QlhLdT1jKV91P2Y1RF1yR1Z3JD92bjtlOFFxOmtiMzJ+cGFnOWhmYD0kYzs1b0Vye34kWCslUW14cnVVWnQuXkF4d2N9QGN6Tm9xS1UpPjlCRDgjNzdsRn5BQUQ4PiswX0htOWdqeE5GdSYvVV0uQnRm''@;'; put 'put ''Z1ZZI0B7KiJrOkRSVDUpNnxgbjorWipIJHJkdihueyt8ISQ4ZyMxR3hidDhGL0ZvSlJZVU08R24sTmV8USolUV9uIUFZXnAmRkFQZyFCUzc7X1BHcSlGJmdNaj1Aa3pjMCZWLHUvK3dval9SWFAxbkRMaGJhMF0uI18/UEFhQDQkLyFMdTIyZmN4Sk9RXUFZJEo2TVRVaWVPLn13MnhvIVs9LEpo''@;'; put 'put ''ZTZzaDFteH1VeDFJbTYkKTgxVGhJREMrbkh7X01BRzl4Tm5fSWlodWNkUjVgYUxEcigrRVRYSzQoVTw0KGN4cGhDXSpJWWFseHlXYnlbVX1RaCEuY1dDWGZYeCVRUVApbHFRTHQ5fD52Zyk2KjxQUmIpMWRGQkI5UH51JmZ3NiIrP2thNStXVWNkYnF6cTZKdTAlfGNJTHBqOEJ6UGB8PjVlfSF2''@;'; put 'put ''W0wzYVheVjh+Zns8KVYlWF1eQSZJXzIzKSs9eFtqWGtwQH0yRiQjMHI4Pi93ako8IkNhIS9ISClRVDAoV2dobCEzcTNAc1E+Q3ppWllEOUZJV2B6ZG83WnJJU3IoYl0vZEQmcmYhU09LJC5IenUoQW50QytLaDt6fCEkJDEzPzlEaE1PMyM8dWFBYHchJiYxLGczdDI2RC5gdVtwSkA9UnlTPXkz''@;'; put 'put ''KV0+O1hYYF5LKWZMTlgkam5pSFNTbThoZTVOP240JUJlVVtkT3hrVUUyWW9EdT4sSVU5V0JsLHgyaGhIeHlIdWNDKGJhUkQ6OExfdT1daThLXmh1IiNHbFZUYzBoO3kuQTdgL0t0az52aS8zfn5GcnxDOzM6WCVWLHtXY09se0xGQWVONzNnK21beWJmRj9bJFJzYzRMQHZ1ZWR2dEJAbUMoW2xo''@;'; put 'put ''LzNLRGxlTT90KXwrKzJSU0g/QztgKWhCPi8wdCpQb31seTNJbWMjaGFsbFo7LDZ2OjhmMGsqNkVYNzxoIVYlUnI1aV5sTylCZWE5TU5HQlpeQ1JLNzc9QlpFKEBrRUViMnUhOmJjfFpGYE8rdi5mbHYuV11VPFN8OiRLSyl8aCslI10hc1JMX0YxQzxUWXxySypyJjBqak1xQDY2dzMyQzxxeyUi''@;'; put 'put ''bVt8amRKRnohSFFIIWNLdjE+cng0fHc3WCVrdyY7TjpYXkZOcXl1Rnp4RyIrcTYyb2tnJGEuYG11JkQhaUB1bTBXaXppXzxLR1EsVHF3ZlE0ZDR7Y0gzMml4aEcpbTk+V35tNzcwMl9JKUdMVXIxODBMLzV7bzUwM1g5KjRAcmMwXyJCd040KTVQYjQ6Mlgha2NtQ3xTQ1tUYW1FTGJeX0kxbDVr''@;'; put 'put ''MV9tWF42cGtqN24vMlVQXXQuV214Y0pIIjdAMWM+REJYdk8jX3NWaW84U0QmYDY6OGB2cFVKRn1NNlhPUXIsRmIoPCVTWSZeQVtYZ251WkkqQiUpJlk9N2QpfGhpZXlJWys2dSxqdT1Peygwc2gve34wX096MyFYeyEwbkVoMkc5OWMxUExFK3N1eGZvW1hpN0p2WnV1YXtKc310PzBLJG1UOm9d''@;'; put 'put ''NWhXcj5LdXMzOyFyQkdjOSNSLnYpJmVVS0ZZMTc0NWRvTnEheGQucTtFQCIyNCt2QzYhKkxldCt4elR6fVZUa2xIL2Bia3FeXUI5fXxNN2srY2wxSUooS1J4PG9nYjZeTWtNRi52cE99X09ibGpMOnViWnlnc0xsamZDJCN2Wkoobk0yOUx2dCtpfj9mcG0maWx4U11bJmBwS01wNDpvaWhscSZ+''@;'; put 'put ''I1MpdGRvIjkzY1FwITptamI+O2NVbjNNLmk1MHZvYCFiKUhdfFU7YllFPSRNey9uZTQ5TUxhYiwoJTRFXmlzdUswPCZRMSFaQCI4XnY3eGZmJSZYMTlZKzRjU1dXRm5uNyxtU2YjMnM8VGUiPUNPPnp8fm5tV3NiW0NyJW4rPWJETTN5SUR8WUdvZ21+Z1J5djpEekp0S11YQFJfdjspNyR2bjNr''@;'; put 'put ''XTtsWDNhQntUbzlWMWI/RHNzIzBhTzd5UT9MPS5CNGlrLi8/Z1o6NFIoeSxPdFZqRypKezZJaixfKEg/KDJzX0ZVP2VHTmFRLGx5M3ZmPWMmKTFWT3hQfntlU089U35UXXMsPDM+Om1Aen12dV4kWmYzSElAazszIzFJdjZkIVlHdnlxJnN4fFN0TEAjV11+JSFzWGpTT0trcTdQKEJXJnMlZltb''@;'; put 'put ''fE5zc10/WXl8Sz5AUHZYNmxMMW1JZSMveyVeVGV8YjpuT2YpZSQrd15AeHZwMiJtMzZfMFEpVG9sfEcvUX13S15oNzp2RHJxIjozcDVGQ1BieHt4dChiZnJ+fTcyMjxLVUN9VlpePT82YiRTJHR9VC5Za3xwezBKezl9M3BSNk0/dSRTWD89K1RlWEd2Rj1nNnF0fXszWEVaI1FJQmZdbHlGU1Em''@;'; put 'put ''KGwhUilZcnxASDxEbVtrQlBCZlYuTG1wa2pSSio0M2h7RV43ayZfN1BAMkNwQkZtKFdyZzpOK1puTCxqcEk3UkFmR28iJn1PbzdQSV4oISpicVk+PiVAJWBQXWEsJl5qNiY3Snd3U3R8XT8rSWtkWmg1XWkvQDJpUjBPR0pvR0w9OXh5PDpdcl9LPG4sITRxWFdJSkAwa1Rmd1FMWSpnd29GYyV0''@;'; put 'put ''X1pVQEZ7QWxGPn1hK2l+aVFnRDI0ekIwLCt0UzZURzxCJGBuLHV9RlJ2cUJsQnkzQDUoeTZUdD9XWXReTT5vWmFBL3YrRnljeHRdOFtQdHVjbH5CQyg+enxoaUFdZVZ0IVNHbkQ5VC5dXyNhQngyS3p4QkY+QjE4W09kUG55Plo9e1N2VWEhPj4qaypGM3QzOGl9PEhOSHliUVVWUWtNMFFlVmw1''@;'; put 'put ''ZTdDODRAUmgiZmY9Uj1sWiopbEB3U185V283aj1APkBKUl1xSWF6bEBbWjAmOFlLfHg8WkhTT2VgREV+cyUjUiZ2OkdJTG5FNjVpMlJzb2FHNTZmWHRyMGdYSjNWJkwjeGZMNkM3aF5PMUZbRCJoaWFKc0I+TWk/U2g+R2QvbFVCRUAla1J2cnJyeWQwQ2NXZXtucDdjJkomZ045LDJlWTJwP0Fk''@;'; put 'put ''KS5NYWUyWixRcDZLYih7OWtFaXU9dDVNSW1EU0ZEdlB1I3g2JmUuZVd4ej1oOXJ9dU9PYD40ZDtDOntWVEhESy5oei5dVEBdfm5VQ1laM2pgST1NNEszW2hVb3lVQTJROy9NdWE2XW9RIXF3XjhKdS9hSSYqJmtuPExBfFcrdDEpMD8yPmB6bTdVXypaNFMhNnYvPCx3O0VPOVtSLFswSUxAVyRJ''@;'; put 'put ''MGs1bTJiLCt6LCN0fEh7I1dFW0w2YGl4Szxza2woPT0vdyNjPjhKKGFPcWJCWT5YIU5rQnI8dl1NaVs8cDcxOEJiaFZNcTFgSj1kZ0V7cWVzSWpLNVhjJjR7I0RUW2xVSGt8WT1dNlo/VVEjKE51YHEjR3pWSE58W0grO09GNTRUTTFyMWtsPy9rOHxGcWRtQiJUKlcvXTNJRXczJFQ/MzJxRjJu''@;'; put 'put ''QUpfeyM7UzpuRFlYaUVtKUl+aD9iTHZAaykmPE5PXmlCNUw9VyZfPUkrXSREJiJqVSp6cTpzRDpQPlBrbWM+aEEqYTVGWjV0bnY7UUArUGVOPyNqQiZGLzxDakNVYW41SkQjLGhJWnM8aUlMW041RHRzPGZaUEdVQldhc3F0Y0MzWGc3K3BQLmA4T3NOTGBFc11HN0ljdFc7SD9GPVd3SUdHbk1T''@;'; put 'put ''c3QqPjYhTTd+fFA/SDNxLDAzd2BUQi43P1JoY1R1fXVdTjosIzNhKz47T0EoPm1mbTZ3bXckdDJ4anA8MW44M1N5WCIjJnohQnZZKmJ7bFNuIzFibiF8LHJtI2RLNHRZUE5tQ3JvP0NvYWlwaHxHYTUyI3RKa3M5Z15XWmt5YEMuKUE+am50fG5NeXRedFJYb3VNTzJFQ1gpTnh5RWVaL0VbZitB''@;'; put 'put ''PDN3IUtoM11+fmF4QlUpdHJ3Y0YhMXt2SW9uVnZDUCFfQyJTVkF3XyRnQE9jXyttXmdXZTwxajFNTUtYNjtDdGoyKjVOQGFkW3lPfCNPLlF1N3hMWiFuTSxvRVlNbDRKV2o0Il47SzUhVVZfbU9GIytDSmtTeERNeGptQF51PHJjbCJFQHRNMmQ/Y011T0dLR3klfnB0bFBMMThnY2QmXTFoQzsz''@;'; put 'put ''MlIjPEt3R3lfK2E8MUdkd0R2cV06JFllSWF8RGQqSikqRUJlMylxa2ZpckQmSWtRJkAwflNZPEEveHUoYjtGKlF7YFs1NTlya3RedFcrKj8+SEwmKFosOCpOUH5fYUVoPlJ2KXJzUEdtY1o9YDZ+Lmx2NDZ6LittfGhPcGdkbGh0cTcwPURGOENnb3FMOk1GO2g7T3xEVzxoJSU1UzBbanh0Sl9b''@;'; put 'put ''L19aZFlYM1pDUm5uWilwNj5gYjNoWFA3JUdmZF5CVml+bXZabSptYT9WcTIuQn40fWJZNV1TZllII3dRVkU0VlJLVHFSKjN2d29tV21uVWBefTlvUU57ZFYrTVN6YCZDKiF2NXk+LGRnTTdEX3VSNVd6d3tAJWM4VVR3b1YsVns+aFZKcUM5JSh9KUtXfXB+WnZdVVF6L1Q/JE0qajZ9ImBWamtV''@;'; put 'put ''YVd0U3ozRERab046JF5VQUJJOzpxWyg9d2xKaGwvKDdXc1h7QlAmUXMjQDc4K15WZlU5KmVtZllYPlQxSiYzQEldQjNtUT0+NEJXbiUjUHdpbWNrJXQxOjRVXV8vOVNodG50fmRwSlkoOmx2ZDwlUEhgcWhvYERWLmJHM1FpazBLfTtzYn57TDxGKG5JamlCXXw1OkUmVXJMaltkRUxGZmJZdEh+''@;'; put 'put ''LEtia1RNYCMhUFU4YCo/Y3ohJWFULHl+MWNIZDRAUWJZYlchdjU0anxLIVg4YUxJNlBtJHhKLlA/aGJOOEpZVFIxITJWSjZ7QmNJRVR1cV10JClLVjc5d18rXWI+QFV+dmBJPF8oNGckV2M8V1gufCxqPl42Lm95Qzo3KWozImROJUBfNUQxTHp8d1A2b2QpeykmRThvOzpvQHNAY2deOnw+amdb''@;'; put 'put ''UHB4dWJgKkpRSWQyVlQlP3Z6UTloU00sUHZ7XWlmTi5HVmlMT20paE5KIzl6Qk43fDM5aHUsYSJdM0lAOG9oUV9CfT1Ke0YoOyImKDliRyZkL3VzLmFIe0YrPyRvOyJETDFaTWcqLi4qRSQ4PlFOeSVwOWlPd2NsNDVvJU1jTGs3dmlLU0RDNThMNHsuOm5ePz0/X01aPFljPTRJRVIucTRRZT0+''@;'; put 'put ''XWQ6Pn4oVnNVRzFOYStXI2BFO0xlJGs8M2dIRzYyYGF7KTJSOE1+QlZER2lCISVNYlt0dFB4bHtAMTZ0TGlATDhzMzlTZDBSQFM+NH1sfSkxUnZ0dUxzZjVrSDV+X3Y9SVpGbVgqPC48NXV0eC9nRnhkNFtecVg6Qkg4SGVnQCszazA1V1ImZzM2cy9KUnVZQkhWQyJbVlVJYXFCcG9+dE9mZDJT''@;'; put 'put ''ZmZ7dmdNTzElMTNsa0pHezd0WUJDfVFEPmp0O2A4bzU+Vl5zUCtQR1UzbXRVK0RZfSsuMi5kVWBoeHVxPUtBc3BeTVZWOkdvKT99Ui5QT0lXMSw5SlVxQ1c2SS56YClXWEVfRVUyZHdMYE5nKy9HQl5RVCEyeDl5NW1xRzhCOXtDZ1N5bSNeY2NufXFwYjd7MjJpKU9kUV5uUF00RVF7amVfbjch''@;'; put 'put ''X2paUWNYfDlPcGJTWW8rcTw9VWJGKzNMYj1wcEhJWzMme0s/XVMvZzFfKTlWeW8jYG1JJVdCVml0KWooMnh1ZEEje2o1SEhCbGlrRzN3KU0lVEZ6VUtTTEJYdllXfE1DcVtbQ24kSlBxb2B5RFBVXWdHaz5JIj0rfkY5bXI8Om1kUG0rKHd9PGYzJF1+JDFhdi5acltgfFl0MFEpV08sSDU9KEps''@;'; put 'put ''Y01YNWxWRTlhLGE1N3Q9QE9SKTEsS1o0Pk1hSkZxQ3tQQ3gxN0BTY2ZyNjVUOEVEcT15Xl00WDlfYl06O3NKKEhzJTA0fU9sVCZ7VT9nbTl2QFFmVm5ZMGs6dCttREpPNlgkT0g9b0h1R25Cd20sdWNxdHgrRXY3anNiRD1RLGRXdk4hOXJJS3FjPVo6L0Vudm51VUpvNm1OPTdzYFdVKFpKJHJT''@;'; put 'put ''ZSpUIjRSXVkrfWt4ZTdWXjomKntJOlIlJFY4fldoIWBOTF8pfVdARHwxYFFlL3dBK0JIKyp9VWUkNzZ1Sl8sOERUV3pVbitXYCtBbl8oc2MpOH1zYCgkW0o2anY9MjhoQzlgOi9kIkd4U3IzXmlNflt2bWAjPiVZOj9TcDpCPm0yKnYsNUxUeTFHKSNET2JFaXZ5LzlXJn4vQFJxRTBJOkhMeEVa''@;'; put 'put ''aVElPlhVdkBDZyg9MHQ3UiJvaCU5Ym9vLDhmZSI1O0tnMT5nZ2lwZV4oOGQzW244PHxxbzxFdUAuKl8xQldbYmwmOCNsU1NVIUdta0hTOWRHYSxZOXJRJnpna0BsIndQelh+VkZzNktWSX0uQz5laVttaXEyNUpfeEp1IWs9JTxqQW9pb20/M1kqVjI2Kip4fChEJl1dSSp2fVdnZ1Z8SiJYfD1E''@;'; put 'put ''dW4/MnAqOnkvN1tJUzFhI3x4LkdGbDIpc3ldP2ojeWQqLjM+cUY/fiRUJSxoLlJCTllsQWJjeHF9W012YyNWeSwxai5yLGpGb3lgTlsjR2NLSzAxPVdrelVrQ2Q4PlZvWWBqWDFabD5FYUY2dHVOTzRAODZ4JD9EKGJKVWB4YCh9NSF3XTxaYXFoUUVZPXpYRXtpJUBxSmF9Ik5tejVDYnR+djFh''@;'; put 'put ''UWNOTixyeGo8NjRpRXJVZU9Ha2pAfS99fDFPZnlfcV08Y2tAPEBiRiZudzJFZH46PF8yNDNrNTdpYllBL14qOkVWIVA5ZEhIU3RQeHciO3FgPFYpdzBmbiYrM3h3JkZbcVBWPSVkNDs7Kz9FPWk9UChDXyJRc05bQXhLN08rUVMlT3FBTil6cSk1elgrS24lXnpOTCQoTTNrLFs7VkoqWDQlNHxp''@;'; put 'put ''fGl2TUxPV0d4X3txLkgmelpFRnZzOUoqUnRTRkk/fG9idH1AVlAueE4sOThBS2VaT25GKElwZDIjdDxDVjtwSH09fF9nTHRqJGooUExRM3l5YFtSM1BUfD98cF5dcCtLUl14bnN4THtuW3tRRDVkOzsqRlBzYmpNQmF+XVJFYVReXXZ8djpOJCpQclh1P2hPdk5NI1tXMWY4fVRnPi8kUHZ6cTwr''@;'; put 'put ''eUFvan48KyZCYjo+Sj5SMXRLTkZJVllxOkllK1JaU1lufWlGNm5za2NuZDJnYDpGJE08LjVoJDN2WUwxQSl3WmlGI0c7OTdCZDpTTX4yIzo5ZWdCRTMxTChbUUJwa051QFUiKGBBeVdAKWt0KywhUEJsQEEzL2VXYm1vfDZ9Qyx3QkQxJGomTnhTJUo2dTtAdD0xM1lWSl14RVhSWDZZRT9DblU4''@;'; put 'put ''QUFRZ2I0RyhHdVp7bT5FOzd9WlI9fXVoeElXdThRIVFbPCNOVjgiRj9jOypqdlcuamcvTDw5NkhebSh8Xi5jUkFiY2ZXKUU5ZmF8TXkyUTdEbEZOYGZOMj9CfUd9STdTUiNHUDF0UWBleXRARHlkdXlbTFNZJkE3ZlUkYk8sRD0wUD9XQjlUW0BqelpvK0NvRmhlL181LzpJQnY6ZVpuenVpUlVX''@;'; put 'put ''MHZvSUU8dmpCIVomZG9ZI20mc0pncF85M3dDSF9hKU4mNFk+R1lsZ2syLkc7ZHFMO14xVm5aQ0cuTkxWek9JIkp+bnwyfUtBL3pIQVZ4NDA4YXkyTC9vN1l2SSF7bTpPQ11zcTtKPlBdKVREV1dRWVBfOXlIcWpyNSNmdyN1Kj1ifUNidit2IUF9Z35tJH4mNmQ5NEhvZzxxJldHPl9lUCM3c1NN''@;'; put 'put ''WXl4ZVBjPyVqdjdSb1Ypd2hyYTYjZ0wvKDU8ejxrbT8rVjJqO0pudEZBdmA1Tj9aVjx1WiROKyNzPX1WaytYfi5zeEtbbnVZMVpGaXRmdEhVNndgXkBkX2w8IyhNM0E2UGdZQnxFfWZ5ek5nPXtkQW5GVDdnd35ONyZ1UUYhVFRwa2V4NjF4OGwhS1FgKHtvL1E+bm9OaDxIVkJ0OEkkfXJbKE0z''@;'; put 'put ''Yzg8UykzKl9xJWU6ZUE5MEBlIlhtUmZvP3dgeGF0SW99RilnMVU+OWIvXXxDOVl3cnlCVk1xWiVkZCZbRCtrW1NIOkkpP2tnOCNJcGN5R2EhJTlHTDAjSGpQITZ6bGlZKTtWS29EL05wVGciejQvQno6LntqUEooLk4jLywyNSRgKSp4Unc6dEx2WihmNCZyTnA7YVhKY1ZYfmIyQnk3Zz9JNUks''@;'; put 'put ''PXQwITMrc2U5figpZk8yS2x4Q158UmB9dHhbMkwmank/NEthYGAzPntaMSZjY0N6PDEufkp+ZG5WM2Y2cWhoZ2VoaTA5bEFZOG95cHMxSnUqeVZaPitzUXttfXwrQXh6fFopM1k4dykwPmxXZi5DQ0BecGUldClMTG9sVS95enU4cT9gSChuM0tZSWNqYDYwcCQ+cDNSVUA7RnJ4KnIoXUNeQk0x''@;'; put 'put ''eG8xe0QuZltVR0BKbCRdTkJFSHkuI3FGZGNYNDpuJCJnUVM2eT9HYzdkRzN4dj9ybyVoOlY8PEZMaih2U3tIVkImU191LEVUSmRYSCVTQEgpRGBpfU54YSR6OnFHSFUsS0tIOSVCPT9+Oyo6cW0rQHgiYzgrWnVjcCpbKjp3WkJNaGtROWl4X34kLDp4dilNYm5ES29KdmJ6SW48NiJDP0N7RExB''@;'; put 'put ''MjQrXSJVOjxbTCZedmlUNVhFSGhURU1kITc9fj1XY1t3M1B5a3MqSTJxPCQ9O1k3PDgqXz9lYip9cmZIeU0oIjp9Sy5SL0VaP15IPz0ofDUwKVskQXloOWdhK2M8eyV3eSNQUFIsbChhJFdiZUowMjd8VyhWdy4kcCV0JiklZmdWMGNncCg3fUpgW31VeF0uRU9gOUY7WWlQKTlNKUJFV3BociVn''@;'; put 'put ''NVZ5UEFKOkRAe1s6ezYlLFs6ZU87ZmQ6MHREVHtXSVk3KXkkMTswIjl+VnBEVDVGYGY4KysubHxeKUs6fXVWTyl5YXNofT8zZ3FlK3hlOywldUsvNUhyITF5SSlEJnIkMWE8aCthLjVAJSpiP3h3Wy47UFRmeCVla2p1dmljW3syaH1PaTx1ZVBJP1FxcCJlOkoqUys8Z0xVK14yQ2R6Nnw8P2JK''@;'; put 'put ''KzNDYylkc21VUmYxNSpQeGh9bm1OUERQZFY3aWE1QVtSfXsiaW9DYFdFXWdfYXhdRngrUy5tO2FgbEooZURAeTo+fExrWVBoTG19SkNWd29IdCZSOzpqY0coI2UpTSp7fCxhWUdzKUJyaWdkOSZtNFBDKExfblJHS0UoZk81YTFvU3FRRmAsMU5hRWdoKDIwd3BlMUBvYyMxbFR2VCl9MTMmZEY1''@;'; put 'put ''Q0tIeHlnPDZ1KUsmPWRRXTdnU0JeKVt0am1CI0BbU2VyPF5FZypnRG1TNzJsKSxXWytSaihRYTxqOU9tVyx0bDBEZCZ2OEFjYHQ3Q24wK3BdcGJXI2lYKyoiNW56PntibEB9UzpUSFdgVERoQVZwej4vIn5MZCZSU31zQ1tGS2l0X3hOOj8lSilzZWo0KVJyRVgvSjNTOXByPDxvcnhvYVJvL1Jt''@;'; put 'put ''cSM0ZEFmIV5OcnBmSV1ZRWBiQUAhd0leRioweFowQThOKHRsOyhGMHtrKXU5SUNQSCxfK0EhLmMoJC41KXpQbTAlcltGOjtQeDxXUls0UTEyR2tyIk8yfj9LOzc+anxqO2FIJiQjK0hQO2FFXTt4Zkt8Kk4mZ2N6RjB4cl5PODYjak1LK1E6dW1Lcn57TWNNcV12MStvNytNYU4jOGVdN195Llpr''@;'; put 'put ''TXNZQlNSIWB3OGUlej1RfmY8dWgmeFdML0hbOGtAbFZuODBuK2hbS2Rkc1Q/K3M0V2xvWnc8THRDN14sMnAzM3ZzbTVwc0I8bWYyPkdkeElRbjRCMVJ4YWZmSVFEM1p0Ok9jZDZCfmVbV1ddSCsrdkMkOGN+dSFEYi5rKmdRfVhRK0U8JEc9cjFEJUhsI3g3V3FmYkdgJF1pJEpbamgvYl4lN1Z+''@;'; put 'put ''Um1QQkhRY25ST3VeMXQ1SzY8Z3lGd3c9TVYvI21hQCZncVRjYFNQdWgjUTw/TntWNUc/SSFIal5XSHprbUZVI1RpJT5YaWIxWCFMSUNBNDF3NkVOSSlOblthaURzRm9qYzY7QnMrViRCeFFsTGhWViQzO2d4YkVEWUs+Ujl1YTldVWsxVldOO1VvXi4yfWRaMD02QEZKcUpsfGYlVkdRamFzT2Vy''@;'; put 'put ''MC91JF9VRkxZfEIwb0dqOXtrJEYqWD9sYGBjcEpVKnRyK1pybmYvJiJgdmpzNndfOnt+cXYucXB1SGxyKW9nPSNtNitgaXZvdVJFOFhEeTkocD5KMUt+MGUyYHY/LmpvZ0ZjWShZL0VaX0d6UjFyRVN2aCRrZ1pMI0koX2Y2RDNdK1dKRHU0c0xIOjh1RGlTRzAoYjpSUmhgSzVXdTFzald0KmM7''@;'; put 'put ''fDQ+Ry9fLC9uPyNzNnYzOEtfSmw2UEo+ViVMPmBeVHpWMDAzUzQpYTpDMlFdTm1MSGlBPC9FOF0zZiwiOURUaEprV31hKlR9MX5KITVzWj1mY2VdWSJ0b3poZWxkZ2NLcDo5NUF2Wk5uJj1VfWRMOjkwaGRrJTNEQCxpTVd6X21UclpkIkdVK29MZlpvPHM8W2d5ZnlSTEN0fFFmSSV6MGZiMTQv''@;'; put 'put ''Ql5mTnYuSUMhbG1nX1NHNEN6bCJpSHFYcUs6USRbJC4vfDtXRnFOQnBiY3g2T09AbGdTUWhbZDFQTkl4UjRJTG8+bX5ScV52VzV1U21YIWRHQipPRDF5Mms7QjVrUSpLbFE+LCxbMSxKTzAxd2lUVSRHSyVhPUZsPz5Ud34qX2A8JjZBXlttSndeRHBaNU09Y2VQITwoeS9Yb1J+NilyVzppIlRt''@;'; put 'put ''QyI2azFqentwY1E5Qz9xQlk0eHNlOSV9SFdhPnJDQm0rJHV2cUc5KFNXImAqWmQ8PWRfcUNYS1h7K3wwOGN4bVdySSp3Jih8aUNgaGxlKXE3c3xTeXdqZTw0MF9qTmpWUE5GQl9dezNCUlZwa0lBNzBrKU40Y0QyMF8kW1lVRWhMKko3JFM1TTd9a0g+SUY0VEFEMjtjVUkkVjBEPVJkQHcrW2pJ''@;'; put 'put ''YTlgZ3BFTDslWTc+QlVjIjw+MUg8VnlIUEFPaiZvbVhJb0VLZV94ZHFLSnFFNC4rWW0lTC8qLj0we2RZXV5jNV5xa1NgY2FrfF17NEwrRGllLjJ8emNVZlMqdDxtOTRyLzVCZ05Cak5QLGwjMCJ6eG5HRGtmT1taOSguWmVqM0t2QG1dNnFfNk8hX2YkNnJOSm9JWyw8PjZ8RWohRUppfjldJCFt''@;'; put 'put ''IU5rOFU5ZDUvd0FwM0hOQShrMTg8TkVMUmd9SiVQImwhQjpVLlROQ1ZRJWxtPig1VCtOLnFWKSpZdk97Q2F3dWY5L2tqdG9HbCRqK0pDY0xoRTw5dSxFeGFyIlYifTUiZiRHZ3RhSFRkPHkyUG4oJld8UlI1dmxVL3BaJVdiJFJWelY1UGE3PF50dVJJKX1QVWdPbU1kYF9kXzA3MTxGYWVaRG12''@;'; put 'put ''PTRuT0NPW304IzdqKWxIOmVNYSN3LDBNeXR8I2MmSFk9Mk12fk5aPjd0OmxxTXx1aTAvd3E5OSMrXzdnT0RkZCxSZXNIYm9BKGZwMlAhRDhkdVF5fSxlRU1JPEFyLFQhLHU1YXJoIUU4S0VBeDU2LzFVaVhPclZJM3V1IWBUeiV8P0dKPEV6YnxhJXpJKiZXfXh5JEs4e0srbVVbLkxaLzlZejAp''@;'; put 'put ''WjkrK2hyT3xhMFc5SGxZbTdrLDBUNn40P2l2T1dXfG1lLjpgPW1jfFF2LFpna2NjLDFVYXYmRCovO3FhYGZaMkVqWUYxYTh1K28zdl8iR3BKWjFSdE5hMmB6T0ZOWDhbL2xNZGw/e04+SD59X3doajAsM0NeZyEkWCI3KyRxZWpRS19uWD5YJSVjcUN3VWNDXz4xNSJfUGZOM2lpXmwhMzVlYk9B''@;'; put 'put ''QEBMOGAoaltubGB1Ljh8fixsbGU0ajNZN2FPZmcoImR3d0cpWj9IUD5jVT1na1FtJHwxeD5Wfl9TX3FzMFo+M2ciTEdOQGNkWEc2fFhOLGM9amBHekIrNnZzLzZqbHIsQipyMzk5fHpiPENxT2d6P2VWP2BOcURSMXFLPnc7aCV3JVFAOnsqe3xHeT5NIlk8SH5Jb2N0Z2xUWTAsIWRWJFtLaTg0''@;'; put 'put ''MGZkWEl6Qm8weiVvOU4rXzgrPSpwPnZpVmxIVWB6d3pHcUxVMkRuNzhdRHNrYT02ciltSmxZKS4key9ZQXp5RzVecXkrTSxDcjp6fXZyIWluLF89b2ViP2RMNClOSVYoVX0vMXklMVlaTG1vITNAe30kbkdhYiU2cClGcFBSWFNveVNDM0ZVJTI5bD9AJj1sOkIiX3YmW1hkUzF6Mnh1OzQsZDs3''@;'; put 'put ''ajRqT3cuLyRSJFZLTWtkJTg8bzdHQiY9WmBeZTExdX4rLy8lIW1RX2IqLDlRYFV9L35KViRTOkZAb3opWCU4aiw+e3FDdGcucHAoN3hXJjBWb1B2PUhEPUg1ZVhsND99LF9FOEhoJkJAZCxpNlArdHhlMzNNdUwlaG5gdTdkMmc6cWxyU0U0SnlNakIwanV9e3I0ZT14Pn1PbSxucFhpRyFSPndi''@;'; put 'put ''I25EJkY0XVR0VXk/M14uRDYzezMuamxyW2YiKldCfVp1Z2t+NUgyIUxVZ0thJD9Afk10em8mQm8lZVgldm4jSFk5L1R6em5TfHh2MC9UTH48cWB0XnF9VGwlezBOZkQpYF98LEtXVEs4cDBCNikjQE0xN3hIZEhrcTdhZEYpYjJZbj4zVjQwNyldJGdhLl10MTBjUXY4QEdXKnBkLl09aHpbImJi''@;'; put 'put ''R2xMeGllMHxjVSsmJiFTV15zOUBdSFtdZyteVVY1KVgzc216O3gqblFIeVUoO11IW29HYEAoTjwsVG5nREtEY2dyZnI1SyE3MVBoK0ZJbT1sSEQ/IW5mI0hfKHFrW2Fldkg9JGl6Q3ApJCFlVjV7fE9weEJlc2dYOVp7ekgrSD1xSihlTT04RFExdUg1UTtKOkg/JCpwb0c3P2opM1tgMFV7YDxm''@;'; put 'put ''S0szZGA6PmdzL0YhS0VAK1V0REM0aH5IbGlzPGdSdmRxUyhGQHZHMD1RaSxrRitjZFA4fCNAYyZVNlIvT182bm1EKixtRnB+JW04fHZdNGx0KGZsN1VRfCwmcHApMnttIy5deUZbODlEfkZ2cntnWXtoLyxzYls1WXUsZV9uWCssNz4/clt9U0QqSGovcFBHZHlaSEI6YCUwMS5xTHt0MzUmKkws''@;'; put 'put ''KzZNb1dfPCkjeHVVbEBNUF9IQz52IixtYUBVcE4xPEkjZy45Rih6Ty5YIyMuWW10b3dhczt8Kz1mOC8mO3g8e2A7Z1I+QnFDPXdydWpbZTtabzxROjFeUCUvImdoS2woaTx7REx8bXM5c1t1YmUmek9xT0YzJnZ+KSRpVX0xKyZUYk03ciM2bUhyJElwLi9VSUJpVWZqMVtnJFddVHk3VWBnZz9E''@;'; put 'put ''VFVZdFNmYTszSGxZbXRtaX1TQXVkIXJGS0ArLHp4ZGM4W19HSGRFPGxKeiRxKVpJNT1sXyt1PCxiOyR9N2cjWCI6RmY6XWJ3OjJXUF9IbmZzZUxQezd+O1E2IzhdQ21oe0M/L094O1ZWPHJqUG4rWiFPcyRRcipLd1RkMXJTTCQ2WzNFR3ZAai5kLkMxSURoQSprVVlFJiV2ZjhFZ2lRSV1jYER4''@;'; put 'put ''QFZEcE9ARVg9T3ZOcGh1R3RfI1RjaEdbd3RKSEl3SSlARl5JY3R5Znc6PEhiMEU+Q25bLElWYnleUT1UbS9mLCkzYnZeQURTblRYXUNbZ2EqJkluWjFUKmxNc2I2SWRmOEEqWlZtUXw6dDtSMktfbEgzMyEoZnR5bygiRFgiKzklPExjaTBFcHIpWW58cmxuZkR2dnwyUHZYSUNXZVp2bDE9aTBT''@;'; put 'put ''SzRbRl9oT2YuaE9mLz5pYl84d05uKC9hK35FfXFgYTZsVG1bKDQyUy5mcCZ8NnlRKX0mOzMyaG1DJFJxdjIzVj4uNE1YJT98IXhERktsfjlYfWxnW0Q4QDpQdk9INn18NlpYITpTZzJgU1JTMjd8cWVFIyJRbklyT3N9VmAlVXx5U3MlO2A+R0JCKSpHb2xFNT44cm9TJCklWHxebEo4MTpiRH4q''@;'; put 'put ''KFIjbUope0ZwTXhNZjsva019W18sc3kyYztTaCo2Z2hiR21UYl1wXTdoLHV3Y2UwdmB1RU5GWGBSOGR1Rzo7VUU0Q2RpPV4xdkFQWFFZW35mMjgreDc8XVNpWkptKUlbdXlIdWcqbThqXT9Ffj9WKFU2O0dLdU80MyRLJElkaEpSQDpdO3RLY35eJE9lXjJ5dFFWeDdbP3NbeWw/Vio2Mz59QDs9''@;'; put 'put ''XTM+N3N8dD1Ya050c3FfQW5PcV1tSVlwKDBvc21MVUVOWEkmdCM6bWpERmxQfDFEOW5Ae293XzpeZXlOQGc2fiEkY2w9MFQoQEx5dUdSPilyfT8pek94L2RFUGNmKnVnLEt4P2ZxOHRwdVYma3kwLiszdDpza2tJekF5cn5rIWcwSX5lX15dPzpxU2pfdTszO0o1aXtRKGtKMS9iRnFXMnd4QmBL''@;'; put 'put ''PWZtVUZTeUgoaiQxYW9TPiU0TjxUaFMyfXQ6KEhPOHxaT3Y0PzRLUX49REhlNn5nOF4/NHRUOmxUTUp4U2kwP3VMPn1JNTYwcSplaSpxcls1RnR3Pn1neiJdXkNZQF9AP298TTZ8eEVbVGZKeHNKNTZwNy47dFI5N152eEhBS2xPO1Rscj8/Il9DMlEoSXBgIXU9SnFDJTtCKSxONEdoIipyZz5L''@;'; put 'put ''c3xIeU1kc3dPUWFIZFtEUnh1LmwmSG9gUlo9SXN4PCopZEZvQTJEWlV4JW8oMFtoVCFgNHN4b2h+a34kbjx7RyxhdGdLRzdlPWhLc2NRQj83bCJpRWVhYzhfZnUocV4/U2A+ZXdIQm09LkFEKkQsSWsqcXIoMSsjZn5mUnRSc3ghRDN7bihzOTkhW2hUIWBuU3d4Jj9bMDB0OCtIVDhrakk4c3xb''@;'; put 'put ''aCFnOWRXXXd8ezhKQlJDInZxOltlcXF6P05fJF86cmhbVWFMc0o8SC4mMXBpUitGYDwpei4vUHtAWXtKUElrJV57ITY5Kz1EUl81MUtWS21NI3NHYjtZJT5ZcFA7KlU2O0sxZDh+N0c7cStlbXhuMnA/UEMwKHFKXW99Lz84MSt9Sjp4VXohZzJAW3g1SXJfQGoqbj5uVnlWMVAiZGUhZVgzMV05''@;'; put 'put ''ejEhQyo7VFpwLGJnQXdYR1FZK3kidDcqeFQpL1VbdkdNW34uK3E6XSZJJV9rUlh0OER7QGpLQF8vMDorfT4wbCl5fVJ1e3pSPTJQKzFGQ1R+SVBZOFE0XVpAS0I8K0A/clt+QFdQcHBRRWR1V3pAQyxDJU8zTjFtVyVjXzU9JHJeTzcxYEt4MkNZQXkrci4oRiksP1tJMn16dzxiMzl4cjlpWTlC''@;'; put 'put ''fmpWbUEyYFJGb001Sl9sZyZqPVtASTNqaFNubUc9YDozb3tCR2VCJUROaXMsRVNhSjJDbCUobHgwJHsvaj0rSDwvYm8/fXxPX1NKTlk3MDBqa2x2YSU4eSMwZXxxcUhySFg3fmIibGE3WU16WDBBQV1EJX5scmxWdSg/KDtjaWhGeGw4W0shZXhXRztTNGNVVnU0dXIyKXlXMEJXZ14wbyx5UTc0''@;'; put 'put ''KGlXbTdNIVdhMHcqVW48bWIkXTcrYD5OPioyXlIuRld1YSFseX11S0cmS2NMXnRYMVs8NXNwSFsmWnYyTCx6OFRnUSk6VVIxKVI+UjVOY1R5UXkpQEc0NS9lOnJaeT55bldTT1c5TWhlRTUqfktuIUkvInxxTk80dmdZVipgZVpEX347ODMzWWtSc3VWfCswUnpoWEBESyVUJEpmPlZhVCpmTGEm''@;'; put 'put ''JEdgK2A1d0ZdMk5WISlKJlpBMjI2K3AxMW4zQFMiVjQ1TTs2QGUmcU8zRjtLYFV4UyZ2fGdiNSlwSytwVUhuM2BuUXNSOWFWbklTM00ia2ldWiFaMlUqb0ZiQkV7aSg4NDxoQGI+THdeLlVPYW04IyNMa3oxNiZETGEwN3FuS1h9PyZiMGgvTER3K2goYW9NfTs5aklxT0J5QXxiUl8yWy8ze3Qu''@;'; put 'put ''MlRGTUZ8flB0SnNhQVs/WHNGbDBMV0lmYTNNO1B9dmhwOGR7RShgUG44JDkuJk58QzRfMl92YWtPPXxGV3BYakhEQkYrNVcrZnMlUXZUNSRsfUQvWDAkZEJoX01qVndxbHBQWWIrPyVFbX09Mj1CTWh9PUU8XVQ9fXFXMXEzcjxdX0EvNGE+WHlhTlh9fn5VPjhCQn4rUUY4dGdALFNRe2s3ekdd''@;'; put 'put ''YTZnK2tLLj8hYihwT3l7MSRqJU1mQ1YzZ2Y9RURDO341Vn53KWchMjA1R0dWbFhlb3JTOHxWaEkqfGN4eitFUHdWbXlXNlFbRi89YU1GdSYjIXwqMDlxLHtLWjBQZVpMPmRQXXxfNE4+Y0s/cnczc3s+UzFwPmdTbGtlSE0lLFZdMlNtbE45QH1gO3lwS3VgVlFXK108W2VOckY/YCJdP1hoS0dV''@;'; put 'put ''YjI7YTFINWU4UkFbblp9ZUtRbix1cXUvblkub2VVRC5fZ3E5PiUzJX5QZnMwWnJYflovSiVkVGg+I1cofVJZX3NFZjZuV15MMFNYVV81bENZVS41TEtGTT80JUZFPFNFLlFIKkpFKEF6SXJkWEZLQGMmS3xmentVfSEwYCwmVGNSMSN3NGtyPVlRbTEodEU9QmtzTzdIbERmSEI/bXFvaVVYNmw0''@;'; put 'put ''V3Q0aSZNWjREY0gpUilXQUY7RCV0VkZeWmpwaTJDPGFVMWd3dj8icnR5UV1wPHd9XlE8OmwwcEsra2w4WHx1PSJxTFtPWjYvL21mMTciUXd6KFFpTVVEaVt4Y2hTPnVlakMkcjxkdltEREBxVj9EL0NGdX5EbWFfRCtiW1ZyPjR4RSQ6U3I6fnF0KXd5b3ApS342d3owU2xbOSMpe0Uld0MzOkV7''@;'; put 'put ''IVBZTnxQLEY7Y3A5ZHtUdXkkME8oRj1pcXVQZ18+I0NNbD1fOC52e0hRQDE0cXY2SzcwfjFYPyI8clRfLCZLfHVRYnxXfTdWNX1fdmxKTW84OVh9cns1RF8rJjo0RjUrJXdiY25bRyFLTTh1UlZSfVExej9nO0F3aWZXRHNaIitvdShYfSluTCozJVdkQ0B7fExXWEp0PTdVLGZZfnIlLygiYUBm''@;'; put 'put ''OEBVblRKeGNXOF5gZn1rXV07bWQ7a31QMzxwfldeWVApXmBzWl9bPEt+JWE1SkZLUWxOUFdOTmJHc0RHXW9mX21rZ0AlUWlUJVFpVlpTIlI+I0p3UXEsbWBKMysuMDFlalRxMGZVVV8wKEBmaGhvMkI6bWJOUF1ZVkBAbFI3bTx8ZD1xbDM9NUtxJGYwP29EfVExVj0jMCIjSj1iYD5eRSFTM2gv''@;'; put 'put ''dyVEPlk7cFBvPStNQFAwWkZwMz00e2tleDEkUUUpPXlgaDsmS0NQJCxvNSVzN15ydW1yRDZUXjslZ2JndG5ub1hDOUprUGEsdUZAK1BVPV5UVj57TlthJV5oPUVXeH1bNGM6bVFYLig8Q2ZGQ0t6Y3lvbUJZUUd3djVGTlhMcyE7I1FobGZVPSh2Lm0qLkI3PXBXVVtje2Q0UDAxI1AjU181JF9B''@;'; put 'put ''VEJvLDpBVXpKaGVUekB9eVJDIU1sSzw+JDBAKCxaaWpgc2FRQkdAKlpSdz9lNUI7WmtONUlVQFV6JVJrUD43fiF7MElLbFFmYTNCR11TNl5vOyluRWJCXyNtcFZzLClWTDNnckQkaE9hK3BQfGlmND0ien12W3slX01APj57eTspMVMwQDhRT2xvb29LTVpOUyE5LlFCSm9SfVJWclhDeXg+cmBq''@;'; put 'put ''I0h3eD5yTGglU2V4SDpSIVMzc1pbY3cxbFRpUVNvelBpMDl8PDtfYG5ROXUvbjpISGlTd1dRVUsjdSomW1IzQGw/JkA7L2Q6bmBTZlgkKTt1TzBtLDAkZ1hITjZQZjFZZVJMeT4lcDtWZzgvJEBLflMse3dqLkx5LzxHW2NSKn0+QC5rOWJBdkk0JVslczgsd3o1Zzc9aHM8dmBqNl1FbzxQcklF''@;'; put 'put ''YCFrVjhgSWF9On1XQzRMWCReSlh3ZW84NmVwIlRkaj8hNCt+UyRWSW9tJjUzRnJlViF+O3JvV3s3ZkoocGNGPjlAeDJ2eHFKOnA8e1NkaTdJPSF7YWZVKDx8PXNkSW15bVtaQl1XJlUqZj9lOEhQdWxzMm9EYSRgbypbZzR1Tll0SHJATFVRdjs4XlFNV3A4VSlNc2N6RTllXjJGZUc1QE1wenZ5''@;'; put 'put ''VVtIYHl8Uz1OW0tfdiUlaEZyNT5YZno/cnFsLjxEbVQuZD5HaSkuVCZOKXV1UyVZVW1eekNNY0h3NUkyKD4zb2ApeUkjbXBsK1RnWiEyWUp9bHFAW2xBSy9rJUdpOG1FQiY/MlgzTGVDJUZGVkZgZWJqaTZecHNoNl03dm88UmxGMU4zKXJYOVoyLnhFcFA6eWVuMU1kPCpBeSo2YjJIS01ofXRA''@;'; put 'put ''KExQOEpYVENTKipqczxqWDpjLjlFOmF3RWxdUzYsR0twVzh5JCEmSToyYmAxXm9vbUBvbGAmZ0NZY2BPM0hOaE1CKFo4UGVnI25TbEtyT05gLlJPJXI8UGh4JlhWTUYoZDB3V3gwOSRibVckbkNEdGVxejpjTjpoLn1ZdjF9Z35KYClWWn1ufkpYUVo2SEJISTpjbHwmU18+YHhFTlh1TUNVKzdV''@;'; put 'put ''dGBxb3EuI3l1TiMrVl14OzYyZ3B0I2FrVzV3dGxnJiNockdgTzBKMXR9Um1tbCxsYThiNl9Zem9yPWBNX1pwbDpzOldTRVloTVd2MlJTbWAzOUNWJHJQODpuKHdmKylEXSZBZWA4eDddSWI+cW5GTGMlQjs3VEw4RStDVnNsbnJxKUJvL2oibjk9UU8iO2RWPnliOTlQKHdLXnJdfW8yKzh5em4p''@;'; put 'put ''d2JTL0IwL0gwZWVqTG5gQFsseDI/WGBlOXhSSUtWJDdVdVR5MC90XTBkOkt4TjQvWiljRzxaZ1A8NUQ4QDVHO3V3LHtQdGFrJmN6MGhAPU1odkcvYHp9c2FrKl9ncFFfUG4wU2d+OGsoVjkxbWN7SGxje3UmOGVVW0g+OVNsNilkei56dFd9UWw5bHlwdk9kLk00LFElQ0R9ME0pRUcvKixzUzp6''@;'; put 'put ''aW9FWjVnMEYzLE5VWytIcFZ5N2kyLyV3LFdkR3NFTlhrbSEyRk10fkZYR3xvLGA4VTo2MmxUKDklaXpsaXJLbEo/IjlaPz1ieW8/c2laZDtOUkBVe0ksWEUpcS5qb1d6cG9tRlVHRWZyVntBeDVBc3dvOjQvbWBMTXVzR2N8ancydHVjb3dNTDZYVUVfdUVHTlZrSFdCRiFEO19yPi80YHFURThs''@;'; put 'put ''JjJ3ayZMW0FlWDBuZmU5Wzd2eDpjJllqUHg8PjghP1dmR01sdTxRS2peZjpbOmNPNyVeZ1ROJGZ5KlcwPlhzaVhCI1pfRUBfbF1DX3Bzd1hlLnc/XzBIVSo5ZCVzeUA5UGI6LllxNDFpPmh4NzBTdmciIWN5Xm9dI1JuYGYmKWFJdXdZTz5XN3x5dnQpS29SQUwvLlpse3EhP2BBYE1AZkwyK0Fg''@;'; put 'put ''VzpkJWB8aWZzU0whdXs3PSVeTl5zJjJPMy9nOEYxTjM2OX5nMk57YWVuJjAoMj4zemNCb0dDKGtvUT8hR3ZWUVZmZF42Z2chVFBTLHFsMj1XXlcwM2NUZyVvYywmW2EwUjtrIWNoQ3toMG1rfj02MHhPd2VreWE1WExUfFZBX2NtcCFbd1Nbal5TMDtFOF9tTjlgeiJbKysyYn5IVGZBMlY5Tz16''@;'; put 'put ''LyRWMF5dNTd4SnxefjI+MjkoJloucG0wb0NEUlt3Zk9bKytGZHoqbGBXJXlHRktEK3cpIXFtekxdYl1vPyg0Ylg0ZiMqZiQhaWo3Wiwzb2VgMz4kMGtDdlZqRnssPi5gJXlJQnIhcE9TdU9hRWFEYlhTKXVQYUUsRWt2czxTfWdrTXY5QHZlQjMxZ0dvYm9GTC5RKXV9JTh5PCUvOGBRNz1+Syou''@;'; put 'put ''PjFHNVZzcWNVZW9Edl9vcz8kWXsxaFp1Pk47ITUqPk1DTmdXdVQhQmd5O3lCdGBvWCsmP1JBcHw0K0NmPikpaWVPLix6UEFiViU4el9AcEVeQ2R1OlImMG5NfC5HZUNBI1IjVGZSJnZjPVtAMFIhQER9S2pQfEQrflpSSSFtcnMmT1RnJTtGUXNyRiUqUiRAcTElU3ViKzoyNiE0aCtsZzwvKndM''@;'; put 'put ''dGRaLm08MjkxUDUlRHlXMEdkLGZsRk5TVEpZYG1WRWJOPiFLMjRrcHBsXVg5a3M5VSZDcEBVMVguW29aQF82Wy90dFNOYjJeTVVXdWpDZ0xJOD1fYEIuZ2hObCV+YT1vWlFURnF5KyVGZyZ7NnVVTDYwZ31TV1RhJUpNdTJ+Xm17dmFGd09eNztqW0FaOyJlT1Z1NzYsaCRjYlp5Rj5jPHtufUd9''@;'; put 'put ''YzsmQ1lhczdwYndMPkJeMTNIXjZ6VTVsa2kwb2VgUz0kMExKUXk9bDpjYnVLfT14UVckS0hvYmk/IWdsTkAjdGghSzNuOnl3Y2hLI0QhX0lYMWY+aDNsWTkrcmgqTXcrNzVFJTY+bFUhdyZqciZeTDNneC9rbCtDS2g4LEtaVV1zJWpPTH49ST1PXlZ8R1ZpTTc9NT5jUWYqS0ZpMC8xN1RWK2A9''@;'; put 'put ''bSJCPTtyb1o+VXVJdjZgVSp+NUlwOWlJNCprc3BNfWsjL0d2Kn1lQig0O15AXlNsd3AuSjBzUD1tQjN2NygmaC5OJF5ZNzVxXlltRWVeIlU9NkNlUSx9aS5DQFhIK1RvOVtPfW5NfVZ2Mkg9fTkvXitZLl1bfVM/SWxEPHowLD1oUXF+JHhPc2pub1VSX0JuX1NgOl58WXNJbzxYZl50a2w1UFJL''@;'; put 'put ''V3c+TEVbY0RITS5gSFE8THhhM0RMbGY4NC9pb3h7T2x8P1olOitaVCVraCxQSkJXMTZKLkxneGBqUDt0ZTo4WFIyU0lrMXVqSH1tdl1XR0BgXyFpU2VaRH0vPj8mfFJ2JEBjJVpVb0dOaFJAcWteMkkpZExTQkJ1TTxwVmUrZiQuOFd1alpmVFguKDRkTGlQKjF2V1MwT2FDWn1uZTlKVFguKlMy''@;'; put 'put ''MTZFUE9gaG5qSENWYW5tKzRaVChjLHZdPk5tfDVbN3hxVFRmLip6IzFSUzcxb34xZWhtenpHRjY1SDxoRmBvPjk9I2k4U3AkbH1ySDhyaGtIODYxd0UlXkpNPztYfm4uZixUfD8/Qz9sRCl6YWJOWV0oZzFxU3Yqc2csSGZQMW9zMmw3L11VKjhZSENJR2ssWylwPzNbcnxLeGxWTDV5X0ZFWUhv''@;'; put 'put ''R2QsQ3hQWUUxdSJ3KzRialtPVihuYCV3YyVGV1sqZk00UnZ0RF1yW1k5cHJYMzshWCtKMHNQRFJObUIzcHR6dG1GODpEWk1EVVRTZnpET14/RDQoMzlxIVVXYlBMNVMrQlk1eTI4YitBUHI9cVdnJCE5ayhoLiEjXjY7cmoyaENSK01oVFY6QmkjeyorXlVWZU5zfUE6XVZfb0hZTkhSV3orTDxq''@;'; put 'put ''UDRDY2RBZENpXlNSeWcoRjE2Z10+ZXRWfHN5cyFNMTN0eUJqX0JWaGAlcChqMDhbLi51OThwcjpiQ3M4PUUlUiVJbyxJRj9WN0xHR0A7fWAqdUZvPCxoN0hkXz47Oix6dixNWCU1dTlQdFl6W0QiWDlnamRfVXpuVUhqKl4kKHEvW3s+PjM4OUUkKHVjJlVEMzF0Lj5fcXsrIUBhJTlMQDdobCVI''@;'; put 'put ''JTMlTjdxaVlRdXRAQnkwKChIYWBAcF4yRikuVCZOJnVscXJWflpRLCMmczIoNW1vMjklOT54SixdVXUvNEBxRC5yRW1NYyE4eV5QWStEWGI2VElRNEhfSS5aI1srQCtNJVlkVFFFdihTfm1dbltXWGlvPTZsKV8hQGdXdXcsTGdeUDpEbzM8ZykhUWdyIyRfajxEQUFBQUF0NWtBVEhfV0lhMWpG''@;'; put 'put ''Ij96NltnPDw6djskVT1FNTJPZFRhI2BSJShbY2lsajZ6e3l1fEBda306NTxRKEArK0gzXXB8KkkzYmhJWjdVTlovN1hZckdDVFB3X1Elc2pNOHxUK0ZkI2Q9OWEkPDtoOCQkPmd6VzZFLDAjXS92VDtwdUx7TWBNXU5GPjczIS46aHJXSj1qP2c3SWdDLHFoW05Xa19QNEpaNCEzaDg1b2VaJWZR''@;'; put 'put ''Tj0uYUxJPF40aHYoN3tpUitJKVtvamovVSlrS10ySH5KMC9be20sd2FCR1h8cl5jOmUpUDBTJnxYRT02b1JmJiwlN3RFUFs1YXtQP1RUSFJ3MDwlY1RlSyJhS0BoeWI6UX08d1U1NVtQVyM/RSFhJCNqISEmZWFVWEw9Q046IUhuUENdbzpyVDYmVyxfYnUwdFhrTmZhfChhaWsoIzJCQUMiZyVu''@;'; put 'put ''UDBaJndPLjxPUTh3byNnZlBlKmYmPmNLW1t8ejs0cVQyajU4NSpYeG8qdU02OmtHNEAlU2daJWc5ZFByWXJ9NDw3dVEyd1tDdD19eWV1PlVIZi9TflNecn1NZn50ZyVeO09WKGQkRHQiPVBKJVlAUCs8VjB+NCI4MCl6cVJdVUtLZzU1ey8iWVQhZmhKS347SHpHfHkqVVJzUi5EJGN5ZUA9I11z''@;'; put 'put ''JSthYXkjKUA9UldnKltFaHJoMGhyWF5mKkhFIV1hSCgzU1UiNywkOWJASSZeUGdXVXgoQ2ZrTD1UeWFFLDBLNmxmITghM1NPJkc8azwqMFI7NDU4VTpEbEshJFFDcDk2N2F1O0kpMjdqKExGWjY7dF8jezJgViptbn0rPSVQd3x6fi8zTk4rfjg1JX4+bk1zIis8aSl9Pm4qeGt+aX5GckZqcmpq''@;'; put 'put ''fWBmdnBmeSZgOU1WVT1iUlBpLDI5czdQdV1aUix5ejEsNkVlSSs2NjZWNTtTY3omRk9uW31eS18sX3pIbVdoVDx8XiJ8S0ZTPi4hPVJHPXVfQy9dXWZlL2FYMSY5SFBBOVclWC4rbDlpbHo/TT5yR3F7L21MYjJOSUB9Q2dgKFc+X09qRWVnJF5LaUFvOjRAMjxddUxqOVoyKH0jO2BRYWlkX2Zv''@;'; put 'put ''RGl1eCYxKjA+SH4kWUh3RXtRcUpRRkkxU05UV2NUZSF5PiljUz1EbTNTdXc4WEF5KV1mKDA3PX06KiJbeEpbUzlqTCgmTHJSMSJWc2kxb0hAWXIofTxQeUgucyROeTYle04wPmhSbjFnfG97Mz0rMF9mV31rYT1gYHFgYD0hMDcuZCo4PVE5P15EN05BcyY7LyksRlAwQig+ez4/eiRUPklAODBD''@;'; put 'put ''RnVnKlR6LjFyamFzUUpfdGJjQ2tyYEU1bWIkTz07SldMcGYwRSVyOXJoZ0Q1N01fdV91eEQxNEpGI1srdWFjeUM9byFXXT0oMElPNFtKX3xuKW8ufmYsO1spb3wybTYoXz5eWlcrUT5PQzZ1e1JmajkwZGRNKkw7N1RUPms7O25tPnlFeX5vLzV6WXtkdFhKN3Yyc0d3KyJ9PWh6WjpPMFNVeWNy''@;'; put 'put ''empVeC86MFNlSmUqLGRjb019eWlaLEJlbjFidUVQOmR5MEBsbDR0YS9AaHQvbHBhXV46STVlZzphNXd+IjIwfnh9R1ZxYCwsQXNvWk1JKGIqen0rfi9sJHhaei8vWW89NCFZNjR3cyZuJHthIn0sWypaIlZuPG8mQH09cCx8RnEpXz9QZlp7eGhOKmojQDFePm8sPEI6fkNzdnhERE9jZFksOHI2''@;'; put 'put ''TmZIPkM5Rmc0JnZOYltJUWM3cSU8bERfPFVheFk6WEQoX0lxS0AwZDhbJSxRN3NZfipsUD1wOlg2cV59azlPcyZWMklmXnpyL0oiKGY5M0xWYlNVLzBtPlhXendDI1t9Q0F8aTVdWSojJEw3QD1qZzJZWmd+VTQ1YnJkRFg8cCR4WVVWaGJOSFtsJWwueG9odHIve0ZHRnp6SCZuUUZYbHtMcTp1''@;'; put 'put ''QnAuSmI6KW9WaElsViVbXnV7RnEsPUFeenZ+QSp4UHU/Ri9HYy8zTTQ2L3lgdl5QcUlWSEFeeXN8WHsmTE0oTFhHcU9lPDtRO2B9YlJ3bXN8WFRyY1p3dUVqRFB3WX5WViZETShCeX1Ld3tHNWRyTzdxMmxWMCNxdmFXJkBaJGgwTy5gRTxaTVZVcFluKlY7eSRVZ1AsTW52aXhNdytkd2s3ZDBe''@;'; put 'put ''JFdOd2F5WnkwQmJPYFNnLlVyWmJRdk12UVEyIzxbNFlYV2Z3S19bdywsU0QrSUdQVW1RRSpFeT4xdWZ0YHVrXyxEYn5jXnhAZHReN2JZOGhZbz5RM0txPjV2QngsLG1pPX1PKnx2ZHB3ZSh2JnlaenJeeCNpYX5qYFk2amBBKHBlbDg3ZHUkdllLaipidXJ3el5xS3w2Uip+NTUzJChfPFNvTUIp''@;'; put 'put ''RzEoODx8WzZZUjc4QE4sUVNvKGYqeCZdQFN7dF5PRnxZdVUjY3l4Umc5bSg6LlNaIUt7SnkzOWRyKU9DQyFYJntsKi4sPDcrMVF7SUlETnEpZy5FZ2ZJR1BVOWJ1ZTY4cHE7Vkh+UzkkT1lUIXIpfTZnYmohNls2QnFjNmsxZWQ+dWAxZm9CVy4xTmxrM309YnJVbVFsMmZ0Xk0wMTkrbTlxRjE0''@;'; put 'put ''TzUwRyw3eFFhIz5UKGx9OGxJc2BddH11W0E+KjBIVit7WmlZRiJfSzQ3VUddLyk0XXAqZ0siXzZVX2A4aSZbXXwiPXZeLG9WZm18On5+NXwsW1cxfEtMejpwJVRVPWh5a3dgYUV8Y2FVMl9AeHYjPnBhKXd2VkxjN2ssQjEuZWs+eylPSE11cHRrKzlxPzpyQlN0KGhVZmxMVmg5UzJnVjxiYDpe''@;'; put 'put ''WVA9NU89PSEiLiIzS1ReOFZzPX56QkVaY3k/aURDQkFWKkZEeFc0YyE4NSk2ZFhodSU8PGZVTlFJM2pZWD9QX3MkdSRAJXM7Tl81NVs0JD1hOTJANm1dLyIuPGRJVXdgK3dnKVs2d0JET0ghO25qRld9Qk1OfnZwXmdCPi5dez1EJm0qPV1zZSg3b1ZxI0E9MlUxfChNNUBjfVJNLHdnTTpJKHhg''@;'; put 'put ''eW8wQS9uJGFAQ2pKYUUrb1cuUTUjQUQ1Sj81dkJNOX1kNzsyVkQ8OUAlJUJNYj9wcW97JTdUPkA6bmt8cXdoVn1sKl80b1Y2UCMzJTg2PzAxVDg9Nkd7WntOWjw5IXZWOyxwODl5I2w4NHtucVR+eHJUIzA7fXpuR2deY2hWbDlGP0Z3O3pockRSL3MqfkxPM0YkK2JwMnhdenoleEhDfUhIM0Zj''@;'; put 'put ''SnRFZylSVF83YFs8Qy8ja21nZE9RdnVmcW55KXYzLyNfZylxPEYhKyFKKV5ISiRwVEluKzZjZSl0TzBqMl5MX3I2cHVrUlpYd2toJFtQMyREUz92e05mOFRqMzU7bm84fUk8Ry87T2BQM3lsZTk5Jj9DQHJSd0IlbVpuNiNtU1hsLFBfb3UwX2QjPmduUWk7aDxZSE92KyVAMzArWElQRnVOO0Uo''@;'; put 'put ''SEw7VDUvWk1hRkw8KE56VHlQe242Q2JfUkRmWzBTRSlwKCtFPmkqcWlfd0MwS3hQLEowOzI9KFl2WTAzQCk4P19CLyohVGZZV1omRE5JZ3V8RGtON1pRcEIzdSZpI2N1L1VpemhFZT9IRl1KZXVrdlMqYXYxIm5+YTBOVDpEVzNKcF04S2UsRGdJajlxWFBObTNdZnlyM0xtKS4hQG43UTJZYVFT''@;'; put 'put ''bGRWUHp6On5KX100aCZTNzNROix3ellYZElWeXQmO2o1IyhJTGFxOVQ8WiNsanpPK2BfZkxkQyRUezEsOVFNe0Z8SEs9QHNSOnM3dyVTRXtmR35RJmFpSGVaWltdYHhkPHdfPkBvOEZxZlsySFImcV8kPkNMfVZWez06Kl1DXWRtb2cmPkBZe1teczA2UTRsbCRWTGU2OiNKTCF1Q3JbOGYsOTt4''@;'; put 'put ''dFZFW2hvb2dCbSx+clROdGEzMjNRbEdVTiUsbUZ3XyYoM1lfJjBZMjkpUUQ4fmE0c3hoOWRAUDYsVDZBdT9NMilvIU1kWCErbWw8L1JdXUhhVyZYcX5BPnBCSmRsc2hUKnE0Q3osUzQwanshRzwoWjtrSCpNdlpEellRPFIsZCFdS2dxUW5Mc09vcC84KjpbW15TInwxUz1PU3xGTnNnPURIRTxD''@;'; put 'put ''O1F4c3hOWXVKcV5RJGdDTEwsQWkhQDA3OWxMNnVJPCk6e3JEbWluZmI/OXo7dSpjPTxWaUVlViU3XkNTeFAld1BveG9bRDYhY2ZfOT9LSkVqanY+UkZmXnl7Ik9LZCh2N1NNfm5wVTY7V1V1IlZQSDRuMFlYTz1QXXhbYFtOZj1VIyZ9eU1uejNCJnc8Y0RNX1g4c15fdmZfUSJCbT4xWXFdYFZX''@;'; put 'put ''eVtmJjg8KmJ9T3YmTFFrLnVOIWZWZF0kdjxQWiQ9PGZlcTp3cXohUSg7eDo8JC8zKnRePWphSUckWCN8W2N6OGt1SktWKGJOZ1g1QiwlXVJFPlR9Jl5DTT9JMFQ2fG92YCJ6Ukl1alRbV3YqV0VNW0M5RW4zaT5LQWRMN008KytXQDBxOjxTXVBGU3hmeno3UStGMi58K1kjb3hFS3VzSVZlYzdC''@;'; put 'put ''YTF1O3ppM1dGUywqXl0mJSR3en4kNiZ1KnU6eT9oMnZfIlpPVX54cExRVXd4PC9sM244XT9xJEdSdGA8bkskXXZeREVtSnRfSiVDJF9eJkNaRz9CRG8hWX1EaE89KGdEPXQiKDdbYmxdQ1BCJW44WEdPditqcH1SKkNANT43NilANnRbVGddb3c6NiNzJD4wTCFkPlNhMmFyITFvLDRZTi9RX1o6''@;'; put 'put ''eW9lIkJsQ0sodloyIlRANExaNDc7U2ZXfC5fUTxfKSs3X1gsXkx3TmJhfElVPypycF46eGI8Z1NEWCwsO3ZgfWttdVpyNDpGZlQyOl9qPGNfKEQzL0dNdWplNVRUSllaKSguY0l0RDckeHcsYi9IXlpPI3MhcWZuQmBXb3xkIyI5eEVea3QuODhubi49OGNtWUt0I0dyUDUsV3QzKFVPMSNhWVN3''@;'; put 'put ''dEp2bHVtY0RaTjZnd2syJmtNTi84OWkhfHdtdXt0ZFh3aSJeZ0NOdnJHb2xKTi40PW5ZanBOOHZnKT9QfTtvQkw5LHVLUyhGPXpxOj4mWzVwTX4+ODlXaipYbnRYTUR8e01pMCIqcU5eeVdKWDhGMGY7UEJFenYyQWcsUzJHIj1hIWU0YVRSeUFsXihpampqMyludDwrOFB1R3psaE44SFcpcjNq''@;'; put 'put ''IXVFViRVJjA3bDQuYC9zP0tMPy5+TCg7eHpJb2cwXXYjcU1Rc31lNCQlKD86d0l8OmQsXTRdSnJZM09UbG4mPnNLaVMuRyh6OUx+NypWSzF1cj5geSo0fi8yKUwoelZKM3x2cEI+YyJxfktWd1hdMzpfSiJfYiovODNZMjRyMzlvYnRRbiwiZ0h+dXhBKip9X05GZjVAISZWNVRdM25BbXwoRmVJ''@;'; put 'put ''c0duPChGP1Q+aF41fmJBckMjZzVNc2AwI113JHNLfGtheG1SRSswUnxWN3BSeSJKQWRQbjU4MmFkLGptP1s/aiZJJSYqJmNUcCwjcGhlN3JxdW1lMWVhWDl4fSZ3MllWaXF3OzdTfXd8OXVTUzZRVjx9YjI9NilIfHJ4RjgsdFpWZGRkQjNSaHpUW0ZoX19IaVZTTTFDbFR6eGRWPDN+cHdvPnMs''@;'; put 'put ''UXs5blhnOnNANDUoJmNgSjkkWVR3JTkvWVBVe0ovTStrSnh7cS9eLlt7b18/KSMiM2JJKiE7bUVGTlVCejsjN3g4WGJGdG03cXNaVUQlQGMsZG9BV2I4RToiWyFARiheaS5mLjtAY3w+R2RqM2pySFloVnQmdDE8XUY9cSVKSmE1Ky9lTlMqR0BdOEVOVjZeMz5wMGo+ITBmZHw4ez9rcGpWWkdZ''@;'; put 'put ''bFc7cy5AQCY3XWZKQiRNMUluNn0/Lj53PnRjVX1fQi9YV0I/LiNsRmE/bktXRXV+K0BuRGI7NHI7dypWQWw+S093VU9pVl5kXU5DVlMkQExsRVJlO0I6RWtpXkI2bHVUMiY7QkBTLikreUlxbl9MP1E2VX03OG9OTjJ2bElYaWplMyo8bkVVNCZ6YShlZkJRUSYmPEkpU0VaUG9PZE9BZnkyeyl0''@;'; put 'put ''aWtnMHVibmgzMG5AO25ZUFs7WiJoQVNNRG1qUm9gbHxIdzVlQGEyZCZeOmByPEBkPmE6IiZyPFZaekI7dV94cD9bZ25nNXZafVFRKHdHaDQpYj9VaktxWmlSeGZ8dHFHQm8rLC9LQG1KTiR9KyFRX29AXndBSFVOdHk9TWR2S2ZUSGtkQyhOKSwjcT89cnRIJmpKW1pycCZMTDtHMSVAS2UsTyFj''@;'; put 'put ''cGN+UzhFK3R1SmhHMC55RntxYVBRUS5MOEJydEpzP0tOaXovVUBBcnU3enU+VSNUVWAqaDdJekh+YEpSPi8ldWFRMDY2NTY1ITVFIz04Mi5zVyM2M0hKWSgqfGMsVmBVe0ptbGRaOkhVYChCekh9byhaI093WiwyVCxkb2o5WC8xZDcvQXI6W2l3WD44WVRNMi8oR2ZYOUZBNHBrZjUxdU9KTDZj''@;'; put 'put ''YUNOSkFnUm5CZ0dqJitgazJFMEt8RnRqTEdSPEZaTXQ5SGBAPTA5cTVQMGRRUzsmViVEXismZm45b1pDX3x4Zk82QkNUYlIhWXtNIjFjMkE2X3t+PSJhQUY7Xnk6NlN0MGx0JTg5WiUoXyY/LyZ2LjBfXj1jbVBOSyMsWz1NVmR4YFoyPH11NiFodVUvMWY4VVRIQWEqMVRpbmNDZ0gpbnM/bWNF''@;'; put 'put ''WD8scyNibD0rT1k2bSlBYTFeUSo0M3dhQHkwPzRpRyw3I3EpTjs2WjkmbEt6Y2d1Z0hXIzA1e09UYF5gWV8uRHdScTI+ZDpVfSxNdnt0SE13UildZjdGbztBSnR0O2AjKlNdTzlIbj1aT2lLNWZ5UkNlPV99azpiT3MiW1NPTFZIezxEZCxZZj9HUzc+VFg/Yk8yUl5MU0diYEtqenIpKkF7XkZ5''@;'; put 'put ''MWVYX0RLJnd7eGVQV3QyRSVbQGMsa35vaEtbNTxJY1JEMTJWQ3Y7S1dld3Y7eDlvWWk0JjVJdXRnT0dgNGJbPmdVTnRhVTk9NG4jbVQkOWp+bD1+Z3A5QCMlUFswTi5VNjkpPiFbbDBHOHYoTSJNfmklMkZlVT0oI1MuRCF1bHoyTVtgNmElQiQzbU1AfTYqVFI3PkdUV1ZMdWIkZGIlcX5XcS51''@;'; put 'put ''QE9yZSg0cW1VZXwmRkhoSCMycDI1Mih9L2I6fFI3ISM4eT1DIVk7QyQmdDBnZk5hbk1Xfj1oeHZKODReUi5QQGMlKTdkcyVedSFDNk4qW25FZVIpN3VAfk9lQ1t9Z3crfnlCJWA6bGAsY0lQezVoK1hVclM2cHdvfnN6NTs7Izg5UChhWjt2QE40RXthSyhEUWZ0K0JySl1AI1MrM2NTQE5sd282''@;'; put 'put ''OXkjIVBbaFFLIiMhWiMoTVEhRDpfKHxveElMTX5JTEhvTTA3RGBjUXB0cChHOnp4Ryoyd0dMTClCRSh6YlM3dkYyMiVlJk18aUl4OndNQF4kN3dOVTtFeltOQGN7L2JiM2ZkSFtCckl2fS9lYTFleVl2JjZxOmlvenVHYjZkdXJ6RH1QWGksSnU5IzRUdiU/bU0jQjt4MjojOncrVHJzXTB4Mlla''@;'; put 'put ''PkByeWxDUVtHbyZYPl03Tk9rY2BnLkp4aTBuTT9zIy5UUXhPdyp1UCshXU9jdF4/K1pqNnYyUWgvKGNVLilgIV9UXyUxZzJQOyxyY21SRHRFaj5MaC9IP0RDQz9iRnhEZGd9T0IqY2NIakReemhjT1U7WHlCX3UkSXM7ZExQcWY1Nn5rcml7T3ZeQiY3c3hLPiphaU5SRVglWy9IWD9CPk5RaEJO''@;'; put 'put ''cVZaLihDRTlofjkweFtkfC9+VypERFAiZzFYc3VLLl1WKjcuOm5mZjcxTjI5aWwlPz9oXk8zUk1ROEhHVzcvNyFnY3Q4PUY4QGhHQFNabkxgS2pvY1dQNEh8UEI9MFV1bUVQWlJ2SFMiem9FZCkiKnIoWXpMX3Iwalg8UkxGISY4d2VKYld8d2FJV2Y6JElmTWh4e3QkLGBfTTc5Y0VmPSkqaisq''@;'; put 'put ''UzBHa2E6Yy4iU3N3QXo4UiolTVZWIVA9MDRbeXs/eHVJTFcqK104SE9FRXVaIitXe3ViNXtaYnx1QHJVYm1HaFJYZnh2cDF7IkI+QihJQ04lNXl6XyFZNl04Kjg/ODBHXTwlcj1HLFsiO21XRyVDUV5JbS4zM0tmemZDP1Qyem8yQE1zR3V5K1oxdmVRb1R2MEJSQGtFcXZ5YU9ZIX0vbXhJe01O''@;'; put 'put ''PnkuX2dSdXFRNUp1RTVYMTZHSCI7Qk5FWTByMnIwQj8majxmR190Xm42RHkuOmZyZiNmMm5HZk1baHA4ZlA1cSlKRzgjQ0NCPlM1XmA9OEIqZEpZSFg/a1RUUEpYTmdeLEAvSFFUTHpxfCFpJn41ZGNEWHJEdFklMm89VGRIOTdIZFdWeFo3Yio6RV44WzV7SEg5KXIldXVLK0UjS1lWODwyVSUz''@;'; put 'put ''Q2JLZi47eHdOPklZMjRWWG91bFl2TytuPFpadSIuKUZaQEZVX1hyL0VZMmFUWlFqVTlCT1QyNUtRdDBoNClQd3hja2FELCJrbEhMIW1fST8lV1pAQz1UR2lUTXdHaDJtZDRCPXVwbEVgT2BTMTk+bDczbDl6cV84e1ooO0c4WkhFR0hiTD4uOkJjZFVbZTpDKGlyZ14jaFksd1pId0hFVzA3L1Nd''@;'; put 'put ''bDVHdCFMW0p+bD9GKHdXO0h1WDNsMXNRWkBaaENleTxHTjVOKXNHcUpUbjJBK0FkcHBAY3ZyMStxKjloOXpLOVE8NH5sLDRgdTk7UCZhOiEmSUFXPW4+NiltN15PR15rV3hTUTA4LzsoTWtEMnMwLzJkLyQqP3xnYippMlR6TFclcl0pOH1wbEVoQFpVP2FaKkwiPUFgUUVIT1JHTStydiskNT0m''@;'; put 'put ''Xk1RK3p2YVB2K0E1PSZQWWV5SkZtRjFlT2BLYTdfNlJ9azE4WUBRemtxdytBNUV6MFhzem4+V005dmhzcUpqJltkSmF0UzJkNzN+S1RIJCF6UCE9X29LKzhXTUQ6VCt3QDEkfWtNdGp1YW1UVkt4IW5VQX03JXtMYVZ3cVtGfVZzPnxBfVZYdDNBNUprZ08jZHB1byt0KEs8OSpSK1VxaSZgO3Ek''@;'; put 'put ''Jl1VUUluLEMhVl81SkpIJnw0NjI4Y3ZlQmhZPjs3ISE2dFZuMD9sPnIrckVlIWUkWDx6UVh9N1t8IUxtRk9kIjxPRnYwJVdebk5xJjtfdVNhK2EuXyFda3RscmA9ezRZL21GUWVTWjw5elZRIUxmVkk5KT98ZTZwZFU7dmk4ezA+UlB+R3FUJVZuRG9LOV1UK2QifXBIMS9iJVByJCk0O3J+Yi4m''@;'; put 'put ''b0I/MH1oPlBdYip4K1JNc2kjWTNkJmRAIjFKPzdsJWwhQFZoJVYvYmpkdE5sXUM2fndyLC4yXjAjXXdEbFUoI2c8TThaVSJkOFRdQyklcSoiKVlHXXczU0ppfmxHVnsjdCFzXlV2JkJ6cEtGVCgwN2YuakZAVXJHNChGLmY3JTVYP2pVRlZCIXxDTGlXWF1DdUpjR006OFNaY31wJnYxNDVrY28w''@;'; put 'put ''O11ybHhZVD8qSDNSXztDKCkmU1dlZn5PbGF1YEhnN1R4bVJhKU14ZXFqUlsodHk0Z0duUURmRUJUJClSblRpWnk+eU5LMzNjQEM0bn0+ST1dS3g2Ln1MX0UrdUFfZ0RpYDQ+cWAjcF9Xcj9ha3lSIVk1Tmc3OzVDJCZCQSY3JFEvaVlpak1FWUIxSmV2PDRGfTNae09vIXxXbixQcVgjTXc3Ml9G''@;'; put 'put ''dCJRXWJzeXQpTDskWnRpW3FzTGB0NkFtRVptIiY3LzRyTEQuR2dYallGfiR3LkgxNShfdUk2T0xwJHU9LHlLKXpwVn1QM1JnRzxtJmFsLiRYPEtgWDVsKGxNO1NubVIsQn1LOEZRLHFxcTBkYD5xTVp2YU8ubkUvJTZKfCNOUEYydk5Zbkk0N0QvJChdbENFS28ucE89MyU+Z28yP01Mez5AIVAp''@;'; put 'put ''fVpaJVMkR1tkVT4lWnFJOk9dUEdgW34ud0khJjtwcG01bWVlNk1SdU80LiRxXnVDYmRPdzNPVSN4Jk5KLn5eXyRQJUx+KCVIYiFXRk9HZmIvK35wYHE2c2MkYm49eHZNenU1cCtSWkhxdFguVSRiVUhaN1U+dnBJMzxpIVZkQlQhU2EzM0pkbHVYJChxWk5vMl1Ee2M9aDRDbnViXiF8OilYaXpG''@;'; put 'put ''JnxBa195PnJ2ZDF5NywqRlcuelNtUjt6XkpYM31kZHAldGE9LiwxJG5FOnBgX35WNV5wYE1mOjxwUipAOmY8Kngvbm9jazNtPCp0MT9ANS5VOltxSjpufkJOP0BIS0VEcn1jZG9+JWpqeDp6SWdpNCY7SkVbamBrK2R6YU9ZQiMwI25mPGV7OGY1Xlk9UkxSJWlnPmhjR1F5L1E/ei93ekNsTlEo''@;'; put 'put ''Zmc8WHglNWtaLzZjZ3lvLHB8YnIxaHlAMGhCSHY7aiNMQXBWQDg7Mj0sc2IyVElaN05yd1gqMHBobzkqeTAxS1E9V1AmTGBrMihnVDl+S2FpW3AoOUZ8bD9ZYk5FNT50eWNxNDNjUVhQYFU+bmRlJF9UVmd0XjQ2Jnc4LkR2cDNjTiw/eF9tak9ENldOUDYvI00kQGpGaTVhJiVtZE9FdjtQLFZq''@;'; put 'put ''VmZYK0FrXWNYPVcwaTcvcExnb207bXxNWTBHc3hIdGgiKlJPc1AyNExNYUVFKldZcntHPDhjK1FPJXRBV2ZQY1ZKQm0mQyMmfXolMCg8WSoxXkN3MlZdRStfd3E6aWosM0U+an1fVERtWzRMX20xUDBpSmRjXiNaanFuWSpWMElhRXBlezMzTmlBczR4dElBSlUqWntlTE8rVykhcHZLPjxGc2sj''@;'; put 'put ''LkVtLnJTZC5PVjlMVz8kfHpSfiY7bmd1fj5odyY/cTBxci9CeihDUF8mSUd3SythTSlzM100QHQkNm0sIkVEJX1IWFJPQUw0Y14oRGhaQGY5TStrSDNCWkhuKyJJOmN0P3UvMlpUbUhwb0ZNYS99VTpBSChmKVJ6biZyenRvRlMpcyR9Q3pXYT9UMmQ7NEo9MXk5MDBYM3dmODExd0FIdWBpfEck''@;'; put 'put ''Y187UG0uWEN0Wj53fnI8bTNXWHsra2FNfldVV0gpTmdYdHheRkhtSl9aamZxaDI3TH1sSiQjdXUkP2NjVFhzZ29XbzkxOl87ejdNWDwkIiFifmkuR0krKDwlfXRoNTozVDpEWnlIZXBqJnYpXT4yUm80SEliMklkO1ksYGRyUXZ8IT9MRmpyMylZYnVqM3VHWi4oN1Q6QUdRflB2RWpdLDxLLGMr''@;'; put 'put ''bGtsc0NbdzNpe0ghM2gyRC84I2E6Pm1DbHA2N10jM2w7NlAhV0A9JURCZ0hmPGVuZl1tZ2BKTCFoNE5meT81JWd+eWNZeT5LOylKR3JxREMqWEgzcUpJTnMvQ3VFRWtWeGVjeUxBWDE0QSFxTzByZWNxWTBOQGg5aCw5PV1vUHB1MXxXPF5+UCNUIjRKUHZYNWM/Omt4bkwxRCpFYVNpTkt5V2tp''@;'; put 'put ''V3QhMSV1clkpNH5WejpBR0A+O1swN0JSUDAwU1kkaC5gY01maUl6Vyttczg0KlY1fihKT3FrUmV7ODU5cDg9NkRzYWVqeS4/R2Eoa0x4Wk9pJSVCYEBjdmMzRHZxZDEwMmFNc3JxJUlUNjY4fnA8Rj1pPGliKU0pd0tANT1nSFZDaXZIUmJZenxiV0p+akFTa3hIMyUiW3dmKl1dYiMufClNVVUo''@;'; put 'put ''TiksM0koLCk5OUlhRVNESXNpWG5oQn40eDZgQWRyX003UX4haDVbN09JZFdrOCNbN1E8LzV6c3xzVng1Uis/STwuSj1VcjE2VkA8JT0uWkhKPlNNLEZXTSwwU3MkR31HNCxVanskXmI/fWsyTUNkSzhZST1fV0Z4PGMjKjUyYylNL3tgWHBCaDtBayh+aUwhV2h0YDFPZzU5SW1efXZsKVNvajU3''@;'; put 'put ''VSswJGJiNCNnbDpiT2ZkeT4qUDhQK2A/STtIakAja0lpa1diKS4mQFAlZl4uJE5DQmd9eXp7ZyZhO0VxUHspQGk8T3hZNm9IWmViaTlJP2x0YUg5YWF5N0RQeTgoZnE8RzFJS1I8eiRZbEZFZDlhOzQoMSoqJHsld1BbOEVrVTBwajM1R1F4YTNAVnBFaGpNKzVuYTZkQXYrLl03fiwiaCIwYjBF''@;'; put 'put ''TF1Dam86JT8uLmQ9Iys6MHd5JUZvZHNsfDtbKGptJFhuM3s6ZkVlWzYlYHA4Wk8weWYsVl86VHppSDVuWEl6QFUjKmRPUnsxaTpddm1CPDFyVF8rVnZfVStBdl03VF8mSiRHQiR9IVpFUWQka1QycyovIkZYJFkoTDklImg/d2ZyfSNIL1V+LEVvW1dudGVtRktRRGZCYy9dOiovIntaTiw+Xjph''@;'; put 'put ''TS5WTWRdaCEmKF5AZVEzR1pqekklREtLZS5DaF90fUBJMEA3MGIxNE0iS3MmMENiKGtCODs5WUA/fHEyXXMrZVVGcipHTHUva3tbdS55QTQ6I3FKJls+NFNqVSNhNS5gMDhybDM4ZDEjOz8lW0NRQm9QazFmPyZfPSVUZTNmYWhZWkNITz9BUDNWOVc0bExRey4yY2trMF4mYkhoPiU/bF9aVXFk''@;'; put 'put ''eyU9S2MoP1VUJDBIOSlPazgyOGE1PjMzLHw7Z3Vld3VlWD85WXJFYEI7e0N3P0NzWyk5bylaSUVjamgjJntHVyYvIitwMmtrfUlfYDxzXWt9NllIRHJvRn5Gak4rJl0xTkdQVVkoQ3t2fjhRc0FeI3ZFU3BjYDQmXmU/Tix6fno3WiglVXc8c10lVS5lP1FMd0cmJSt3ckxgcX1BYGtNKiVMPmQ6''@;'; put 'put ''bH5QeDsxSzEwOG5tSjckez9lNkpCSGAkPjdebDRsMzpaNG51YXhSVjdHczNyP1NgYjFFK1NCY2s7YThsU3NiWndzLGBAO089cm1GKiE8WGJCTS57ZzloWWFXNjZrInREKzU+JXxTZGQ4VylwRlJXVjg/YzxMLyZwa0AqaGlHWj43NF5TdGpGbHg3KU0iTW9eKnUjO0wvQ2YzSyVkZGZaSnpVe3te''@;'; put 'put ''Q00kKVI9fktXSXJ2YVZUOjFpKXcrKVgmeU1IalQzSGJiR0U6dWRwKF1xKW1pSiE4YkFJJEEpeTY0Lks4QEJzUk4mQFcjQHFaeCJhZEY7MXFpcispKiRJWWpdUSJZSFhwU3xDaXlyOGdoa3B6aVprUEd3cClDdnttZmp1ZXVUTiUhNVJEL3I8MjAwYi5NRlgiSzJMblF2MEdZRTZZMGw3Ijg8PH5V''@;'; put 'put ''eGFqKElZRFA+YngxNTM5eGV7cTxRcFJkd1Q5eUtgcDBmMD9tcjthdCt5d3ppKjZXayt+XlBmbldvZFl3IXYiaFpON2wvWl1NXl42ZXxmMlJVKGZLREhlIUlVUD5KPjxXI1dtIyhSK2opfSlvLy5XSWF5OVZCOSp7NixAQyF5UTBXVV4vLFBFTUhLWT13RVRaXSxYdlt7LmQ9Iz1GJF1yeFoqaUNJ''@;'; put 'put ''WGh0bmgvYy8vQEtPTkpXWGIhQ2FCWyVRWGYiSFFYcU8sWSFjdC5DfDhKalhxPVchWUNGPSo8V3tAN2QkRTAleT9gYyFYQUtgPi5sMGQkUFt3YVFYdkwwfmBzd21xblZTTlJefksyL2U2Z3NXXWp3ZWQ3cW9HYzBIZGs+WXVGOjFNO19VVk0oJjNJL19iOmJINkM+Kn4pb3JtTDZNOEwoaHhjRzlH''@;'; put 'put ''LHJ0ZCQoNE0wT1VEIkdOY013YC5BR1owcyQycUUzVGpTR0pBQUFhIkNBdzQwKVJ3SEhrU3NxMSVUYnVkKz5fM2wqUTJzSHtEaUBVMG5SUnY2V0VBQUFBQUFBQUE5aiNDV1MyNClANjIhXnZXaWxyWlhHbW07KTpzTFJse1sqeGN4c3x6XlV5fCF6IiZBbyN+cHV6fisqI0A4aC8wYTVMaCwyMnZu''@;'; put 'put ''ZCJsdGk2VE9qfSpGJlZ9YH12bkp2TmxCQGNIKm9VTmBpOEQqa31JO3tmfFN0Z2pAeyJ7LDNPU1ZfdFJWaEk7YnRuZHFGU31DYDpgSVI6bHdHMDlMWEpvMkpjMCxhRipCSyVeV1pJOGxvIkp9aSJ2ZU5YZ1spckR6OTR5XWx2MDtdMzNTd1QwRmBOKT0hMUgybTtmImNhQThVIldZelhxXXtPeHhy''@;'; put 'put ''QFRaWFY9T2RjI2VdKGp0dlNGVTJ0WkRtWkR6RjZdZUNWaHtYQk8lckJGT1s2O1JyZjEze0NLWE4sOiouVkc9Lm5xZEJGaVJJZWx2SklxMDlxb2BqRDlvXUM3OG9dOGgyU0kuTWF8MiQ/UFlYKGEhOVg1QVV+U1ZtbEhodltyYzptMDAxOCYpP2hCQ2pxYVVSVCNQXjp3O2E0SjVQO1hrUlhaSHNs''@;'; put 'put ''S0BzVDIybHR5LkN9UHU2YHlWa088UzsvZUM1WDVBbFFRK09vTn12YD1RRV1ZVUNaRVhsQ3hKcDlTX3w7Uk5CYSFuK1N8dGtPWmVOQ0VRXzkxRmJbIyNMN3AwPVtMcWA+NEhUI1codzV6XThuem5oUFZyYzgyL2A5OCxvWD9Sb3JeeXEje2dYajdxOGJlejRsW35OQFdIKTsqRFQmKFUxcWxSP3Z1''@;'; put 'put ''OnxvTjlAXVlseUo3MWU2aGN3MUsja1YlcGwkY3RkenQzS3NaaFN6SEFoMyE9PDU4Vz1DaFYuOVN5PHhHOXJdcyFUR0xMYjVOUncwfWM/QHF1fVliKi5XcXgoO11uTSNAOCVSVWxBYVJLdSEoWS9aeV9XImt7JUp7KWQhajk9ZG17QkVMYHdTRjwyU2FDc31baHJGSnFWRlh4NldATUU2Zj47Ll4v''@;'; put 'put ''a0F2NFl2dGVMU0lPbm83bVBVXTNERmZXT3UwP0R2PStLKTBPNkopVW43IWpJcSNGUC5ram4xODpzYm02Z1duc3lkMTFSKFttcXo7SF4oR1dIdSEsblh+Oz5WVn0uTXAsKyN2R25Nej1mUTBuJSk5XjZYc3Z4TVY4LmVDamFde2xnIXBoNUdLWEtjciE+Z3tdYV0vPD8xbDkjYVl7QCQyJiFHN2Vp''@;'; put 'put ''JEpiYCkkYHkhcTMvbmY2M2xJLzExT3o0XigrIU1fVC8vLCJVM2FAQyUvVmFCd3VYVXY8RmdYUiRFNTptTV1vWjRvfj0xRj1CMzltd2MzUmNLWnd5IUc4OnMpR1krZU8uNjlrNjVXOltndmIqJiFpbGV5P0tQTV4oYERdNTdZP1RpRilJSF0wSTZyc2BATWkyWFlIXUcmNzswOTRLWXh8dG0qWkJv''@;'; put 'put ''K2R6Uyh7dFFOKm5xQGsifnwrZyF7aUhmJEdsZUVtNkNXOVJbSkR7Tn40b0lDQXx2L204S1FhSTMuV3ltRWhhakI3ZjtqcTwjXilWcFNNPyQyXWsucihPcSY9SlkzWXU6XXtpLjMvMlgoJGxbVzV0aHpkZjImMWZAMl9kOjNWSTZrLCxIOk5qVVpRSyF3UUY/eChCIXRob1hmW2cyXU06UmclfHo8''@;'; put 'put ''THxMNFlzc01OfSQjZ0o4KnJad1oyMklxaG9pTUAxMHJhYnk4aHh1ODRZJFhiW3B9VjEmb3JKKEJTd3I2U3YiYmF1X2kifENEXWRrU1t9V2Q+TXU8aC5OQn45OXdXTn02KT0keDN4bFJPVWAzUU1BazRKOFBLImxqanJqSUJNKyEqPVpwUSNneCV2b0phP2hVSmZANE0yJHE8O0k0Xyt+ME0odHs+''@;'; put 'put ''fk5kUV1PT1hYQGE5WTd6UVkzJkQ7e2ooVWIpUGVxNEM0dkRkYzk+RDdmNWovQyE6QnUxRyV4Zkd4K3BSb1ViKWNLdE0hdXBwITdwVTE6OFUiMXs0RDlAVHEmO3Zma1FgZ1U0L1cjaUJXd3s1UG1ydTMvam5wWSRBeS5yPCpqMFAhTyN0eTJ8MG9AUCF1LlgwRndwTnZTOHB4P2JnampeWlc8YEdd''@;'; put 'put ''RnAiRWI5fV1PZHtTdC92Q31wNkNHNHlpNDxQNnMvUTRIbWZrTUxlKERtKUdifWJXOnlpaU9iYGxrTiJUWGlZOFM+JmdvPyZQSiFoVGs8WnhjP0BuOVRlRUllbFt5M20hczhhQSxAMFZzT2I0dn5pcSlYbFZGfn44YHR5TTwhfFRkdlpxQzI8KVgoJntgQD1Ma3JIdVBQOEM2YlFwY3B2fiRpKytF''@;'; put 'put ''UV1MaS82XVhhMllPciZGMHlEUiFxI1k2ZkEhRjVTPVordUhKLEsxVE1zOjdwNUdwZjRgMDEuVHwlVGchZHdHLnw3THRIJFY1W3Q6NyghV2Z8Mjk9ZFd0ejxbI0dNYz4/YEV7VnFZKnF7MVdTRTk+RyVAKi5ANjdDQDdyLjM3SkhvNFM3JnE1IT0qaCQsb25BS2k1eERHYUxQfGEmPEUxdHYzMEpm''@;'; put 'put ''bkhSTzFrZl1AeTVuMFFJYyI7ZjgsN1prPzNKYzxpWEpuTEM6KkIiX2I6d2RwbGE7NlIxZC5IJkM8el81WlVBZU53NTZoKUU5flFkaSkpXXUqJnhDRl57fEtvQkZjfl1jQV4pPGNrI0dpPS8oamRYfnNJbVRpcjxObGNZRFlPVT07MHxSUC5pLFY1T2c9RjEkaG1HTn4qaDZCY1B9aU5wL3A1XTA0''@;'; put 'put ''QkNsPXxFSl5aTmpRKXR0ZlF4QHZfNl5AcWhdQUFXVkBLaGBgS1NwJFR9cmNqcFMxISNjJC9LWU1OSnJnJnBqV1UwIXpRM0c4PyJ+SX5XekgpMH1Tbz9FTzsyQXFbKG52cDosbixBLEFrMyxsLmhSPVZXPWl2QFM2WSl4PXx+MnwhUDN9MyooUiEsMTtUQldmbEN3VjBNZXc1UndjOjQmQ144UDNS''@;'; put 'put ''YjFMdHkyOjJ3JHlQb0U6OjNlTH4yIVI3JVhrTz00VF5DaTdvUEg9JWNqTGtDWDR0WC5jI1JZQ2JjezUwLnpPKXdhVnxIXXBJdj0yez9jUWxDOWo9bjB8WX1Jej9CITpXIWVvS1FdT3hdOWBxT00mfjEsWEJaSVt7WDNATElWciVdQ25sN0hiKUFbb0VVNzJXfTE2N2NycEd2QDxvaGtfSF5xKy58''@;'; put 'put ''YklCdU4sQmhkJVtrXT8vZ1l0Z0lhX1J1eC89UV9wPjVKJkk6ZlBtKSsraEUwZWtEZm8+dEdCKiFSTlElM1YvPSl6QnU8JUEkNEhHRlRsbWxMOnJUX2dsKTV6ZFdyIzYubFsxXkw0KShMYzcwNlE7OzM0IS80Zm9saUllYWJhdj51UVNlUEZwR0VWfDg2dGZffExMYFM8PWQxLm4uODlxamt+PU47''@;'; put 'put ''bXxTPFAoQCksMUlbLEpFL0xRZjBuVzNraiZdVmJIdkxYY0pqc2B6XllgSXtmMkdNUy4je3Z6KndyUHF5YzlETWI2VVB6JjcoPCtndU14K0NyXTwoMD0/KEx6dVsxUnZSOkpqTkVDZHlWW199S3NGR2Y1QSpkbSpASkImTTVtOyU/YWZHbGE8YVhZJT9mfl1PWClYbG5NclVZQntJdkN1JmJyWjFf''@;'; put 'put ''dCVjXldSZCUuanohbVlbe3cxa0E3bjshSFtlOWhWYm87WUxoSCQwMHlfd1RPfDZJU2BxPjQ/TEJLI2lsVEQ/W247SU1PW0ohfVdsfmJTI3JueG0xdF1bWUYkIUZqVVo1Z3ExP11POkVdfVRldiZgeWMhL0pdbGdUOntYQz1UKkZNSnZwZXhkelF4T0oje2spMjFHWG0obDRSPXx3Rzx6PnQobS5w''@;'; put 'put ''JVtnaCF0TDUmKEdqWkR+MnhiY1Y+KnouNVolUSVhbnRzKTF1eHh1UHBlVXhucHN+SlRqSG12JjQ6cm8qIXQoYkteMypYX1EsYSNLXSsvVH1GKzsqdkguI3Z0MjZGYDpnMXRDb0tgMlVlTlRtdnAlW0dqW2xtZEspYE4pTmdkei5QcyxIe3VgV2d4Jjs0MS5zcGdgR2lJSUQhPTJYQmUiOmZMWFJS''@;'; put 'put ''ZnU8IWJVbldiSXRHRT1MMExLbWBLKkNRMFtxNHxHMEJ5enZaVTk/Uk5xZ1p3KCFbLFE1VnpeQysuIjNeVGNpbFpYTEt+STI6TyMzKWtXWShvOk9Zai80N3YlWVlufXFKYlZvYWdtOEwjIk5RdGJzbUpSNCl9T11QWGxTJEhkaWdUenpURC4xe0IlWXpqQmdEKSI3Kl4iSjgkNUo2U2V3QjtzKVd8''@;'; put 'put ''Szl5bntOZDNjIzNzR3FMdk8qaGN6IXA5QCsraSJHKTk2ZDgsTylXVjx9bCN3QDByZ0VyUGV9XV8vU1BubDZ5QCQzK3JTc0lnLlV6cSZ8MH0vRklFKFZvc3NvITF2R3t5dmNyJCJ7ZmVzNkEzRHpGNUFZWHB5TlF6dVFFPm9FQj45TDBkKkNuQ0JvaWtxWmw/VSNQR05CQzFkMSIxfENFKT1eSz91''@;'; put 'put ''MS56XXh7JktdOiQzeCo1bUt4LyUiQl9Bby9+cT5BIWlKTUNeMWpYRWpEZSpKPjN1YjZyZURSKndlQmJRNCx0WTNaQ1NtQSNAW11pXn1AVmRCMX48dTJHY1RbVFAvbH4vOl1lanF8SD9sSVFqLEA+dTQzPGxudmJ6SyVkd35HVVZiU1RmcDluWlE9RUdtY31yZncqMCYrflRMcVRDaTUocD5GL2Vu''@;'; put 'put ''UlR9SGdQKnx7MDVxdSZESz1dTyFCYlZpeFZQKT9sLlYpbiJbMGFpe1pZNCsyL25EPlY1fXdJZUU+S1tmQEd0YHxTT3F8U1ptT0J6aiE3fiVNVS8ocFZ6RHE8dkwlb2l0dU58b1dqdEwkITF8U0AqdU9SbD50Q1dxSm1rY2U0QylscjBiYzN9OUdoR3ovWHFZTWczRHt4W1FoWGBibncxUkQ3bXo6''@;'; put 'put ''RzcjJExeeWgwO04kL3FCdjcvOGhCX24qIkZqR2xUMG5KMGZ3diM3bURpNGljazRRenI3QyNkfkRxL3Q5R3M+ZDlISjs0bnUlVWBpOlIzdEdUaTUxdEApX1gsNXYmQEVbOXE6PHtNdFsjJURbLFpxY0AmQE1rWXsxPzNCZSliYTAvWVBLd2BdZztyVkFtS1hfZnZSSHNML1YuIjsrbGguY3g1bTQl''@;'; put 'put ''ZitfPkM8LEcqLGNfe2kmTnNXVUdDNWhrQDphOGltdUI5VjU0YXlJdl1WRH1YKzdEW2N4LmAhalJgMGNPbDRGRl1jPlljMzJKd2xYYEhkZH56PDkxI0xtIXIsbF9PMCxOK2tGRiVKYDYubXY3SyorMVBzTCw6Yn5yZTVbM3txYmc6ZX04V14kSCJ1VHZ2OzFbdGghN3ZqWTNAa3RQQERDeUtmS2Vd''@;'; put 'put ''JWIpckU8Qyo6SVE8bUtgZjY/SCQvQHhAaFRNPXo/NGZFUjZ5ZDtsWGV4XSF7JCF4byUlWzlZN35YP2cjNEFwT2cmaUlETys7LkNsbDtQJFJwe0g+MG5VYjdjYXMrQFYjMGslUHpXMisjNyYrK1NuTWNfQDFgIm5NazUhfmRNYUlvKl83KEtGYXlqOTx3fHIlUiRoU05kNUNnTG5sZVcrJTcpRC50''@;'; put 'put ''YipdKEUvell0flE1WiZ4VSl3Q3x9YTZtcyNzRWNbZFI8a2s1TGwkRT1mVEomOW1FeFpzZkVJY1Z8WkU6dzNNPXNTaFlZS000RShNYXcjSzFOfT89fjd8ZW0wXS8iLDApQXtvLmkuTWlgWXRoU1JOY3xaSUxyVDtzSUJ1Z1tUSmoudGBNN313Y1lKI0Y0VyE3clF5fTs8ZFolRmFqIV19QnFkTiRf''@;'; put 'put ''Rk10dCs4W0UkJkJ6W0hXR0lZXSxKOnkheEo1VnhER1laU0R0P2MxbGZDODEueilEY0hBM09Ydn1AQFMiOXZPNzBDLyZuKl12OjtqaHNtZiRQPX1NITh1ZDohS2MsSHN3JFlJIzRqXUYwdmM5bl00ZjZ3Ri87QjA5OCJsPzVnSCs3O191YjRaK0ovNkBpOzFRflomd3p5UTcsKF03akAuRDAxLnss''@;'; put 'put ''PkYsdk0zeD53JmtLeWhPRDh9diJITEpEV2cmKyRWaEpdOkAmMmtgPXM4QG0rdDlMczFKMHpaJSQ8PXhmNXtnOSM1QGo7K3FCfiordC4lK2o8dGdjJTo3JDJTaHtFLHtwdlhCeVVQZUVfQVBbIXBvSFZFZypQQj5UbHshWD1mdCR4I1A8Z05GJH5SREdreHojN0smTyloN0JHKT4wTmZJNFY+VEY5''@;'; put 'put ''Pl9XNXkxMXRLLzNvMXswWTI4Sz4vMmU/OjBWeHo9YCF2RDhhSnFhcWtNY35FYW5JRy4mZFtEU01ecjk9Wk5zdzdVNHx7YCw5NjpNUzJiVDVzXWNLd3YwLzAmZnR0dysxIWdfLllVSGtWNVlRPXBLWWc1Qn1CVVsxSTJTLjRkPFdnRFBOaXpHKyNXZnhQQVJsNyxYc3spRitzZzJXKkR9Sys/cD50''@;'; put 'put ''OFhmYV1sJWlDcXFjV2s+JEE9IlgwWWQ9dTpVayNaY11iYiIxNms7enQ+WXU0Lms3Zj0kcD48NSpfeVFjVGcqd1kwUX1rZG1layMrSmA+cEo1Wz8/JnUqN3tZI29FOj1jY1YuYjZZcFclYDhQMikmTWxQOn1XQ3o5ZXpqPWRnbSMqMjhYWCpLQkJQKEdRaklIX0Y+VkAlUz80O0A/JXJOclV0dGtV''@;'; put 'put ''TCNUYCooUz46USlVKSFSfUhiUEg8dTQ5VlspX3E6VXMxMHB1Ii9RUV8zfUd7aXJOY1IuT0hUY3kiWVo9KEIxOk5fTGsmfUkjaHhMPXQ5NGw6YWRiTUEqdjlENG48cCQjUWJ0WztqaUx1ZmRscGNPMT1yWXRvN2FDUF06NjMxODF2MV1hPzo+PH1hRV45N3Q9KUFPT29tZ1JSKm4yJXtQaFY1QC8o''@;'; put 'put ''NUlDYG5kdCghYyYrUENdM1ozZ15NUyh0SHZZUE92Jlo9PU1wWjlbXXUxZVgyfWQlYURMVmE0ZCFrOnk2e3FAc0JAL3ZOOyU3clkzYyhgbUhTNiN4R3BYbXpIN0dwTUZCXVA/dFs2NHFOeXhFWGNAZ3V+cmM4YntEOiNYamRJcDMyL2FVU1hJQjYhSUMlWTk7QVFwP1QhNFluazkyUlY7a1Iudl56''@;'; put 'put ''OkwsaUhVeXc9S3wvakV+SHQoYXNCR0c7IkF0YSs0b2VvM105UDBPdD00SDJeb21wM3dHPnM5cmxJOlN7Z09NdykvUjpSPEhWMjRRYE0sJk1TOVQ3KTwuPz5DQmw/IX47fDd5V1Ipfn0xdilORFl7S1VfcDl9PVZ2VkksUCV9JSt8JUd0X2M3OkIjOEgjMWA/Ml9RSC5rW1Q2WGcjVmdFREFDa1Ba''@;'; put 'put ''RExQQ3NdenZla1N0eTFxbCx0d2psMFBLZXc4OFAxO2hmZ0EpQSp3R2FJQ0o5Rj5sUUYoSCxpdGtJX1NhNGYydiwqSmQkcjZfZSY6K1VzMUgoUVlwKk81fWJGK2o/VEclXXMmflFhOXpYPHk8Mk59aSVeW0ZRNStxRU03eDBQPWtvc3ZJajRhZkgsdCZZOGZQND1AL3pWbixlTWM5Jmo6NTdabHM4''@;'; put 'put ''ODYxcSU+VE5YISx4YFJlRT1KMmpaVXpiKHNaYXdtKFdVTGVHSyF7QkIhPTc9ZUg3SSU/aHo/YFQsTGl8c0tuKEgoQ3o+aDVeIzBPWFhnc0ZgUiRDbyg0NzFyMXVqITU4REpHNmNYN20hI0U1M0RteWc5YzBfXWIoTTQpTyVsbXRNXyFfYlBKMlIyam5yb0RDImF7ZyVnJDpdSjh8dzpsYCM/RWAi''@;'; put 'put ''QWtsTjkjODtEUlorRnYkZS41S2wyVX05K0U6aGpPX3dHaHtab1lCU0lCNEhhYnZhOGk+eEF+KmQpbVNOXnI6T1B4SjJIK2lxZEIqRUYyPWNDSiQ0Piwkfj4zNn01Vz9qP1B8aEJCL2gsUihCQHcqcVVtQTxDOUpKeldjdVJGVyk5YFh9dUspRm9Ae291ciImb3xhb2U+P2Q0amI8ZDBzbkQlbFlb''@;'; put 'put ''a19uZlpnUkY9LzVJQlA2Z0QhbHVEXmdgMmd8XlFlQiU7MWEvZkpmNTR+aiRpZn04dzNsUngpWkk1JH0ufVBPKy9IJUF6OmpvOmFTRn58NWpiJi84JE5kK25tVkhAaTBMciIrYFZGS2JDd11FOnlTKHV9amFIYzhhW3AjdndlSiwmQ354aiE+cz5pKUZ8dyN5dWdXNSglK1hSfHNTJjlCLkx+ZXtM''@;'; put 'put ''I3YwO2I6MW04MGhMZllEWmRGQ1dfL1BPajVjOF1VUHJUfiVHQDxAMkhPTlF1IyZEKTd9KG8qbU9reFhRUHQ5RDs4NVsoWUltUDc5LjVGI3hmR1JKVi5MdSZ5P3QuNTw3b3U1dEV3RlhtQyRzSDUwclJqSGo4QVF+RUtoQyZFMG9xO2o3TW95UHosRWxiWF8yI3ZqWnx4bUJoR0dfciRYOURrWlA6''@;'; put 'put ''SGE3fUI/Mj5aIyMhdlFaYWk/dzdOd3ErJmEkNSlYLkk2IyE1SnBkVlhoNTY5YTpdOjFiI2FZREdSeyl3LEZwWyFFMT9nRT9FNjx5TypqJCxbX2JYb1c9PF5dWShTUnolLDJZLHF2KTwmQFUzPVUmKCxMaj1HVC5hMCV3Tn5re1dFKnFIcFZSNlVAWUo/W3hiTzlVc2ZDOmFOSWVqIlQ/SFJESndP''@;'; put 'put ''d3ZEV09uLFZiVEYwKG5KfmU3NFExMGw1PSYrQW1zbG08eS9iSzBqUjl5T0F1X3ZEXU5uI1JOcU9lLyNiSm9tTU97WEFgUX4lfWVyeiVERSwhOlZ2O2tzVDZlXXBXZ2V9cUY+b1owdCxDeGZvJFBacTdqSiNuUGpWRlUobkg6O1tCPn5UOm9acEopPVtSSCJFbUx1THIifXwuVi8+c3ZIeGp8VV8x''@;'; put 'put ''U3ZfUXBnNkB5WSlmZnN4aXQpV0hYXUYrSk8meVl9O3diTFJOQHc9SSpKY2U0RilrWzQ6JjpkbktYRUdsSjdLaCJIeCU+TEZzal51UjV1eEIrfGc9Kl5jeHV9alpkeEdJbFR1MTRkQ1NCK19xXTwzbHxPV3FMYEBOaSRTPnshIU56e3QzUTZ2TEJvRF47Z19GZEdVOH5peWxMd15ZLig/I2NNSTwo''@;'; put 'put ''Q3gvfnZiVUVUblZqKXppZmRMYylkVmU8WGMpPSRxNW5KM3dhNT0hNWZ5XzBURFojLCxtKEY3X1pVX3ssN0hLdnReI2c4WDJgKVghTkVEfURoLHAxUl9yR1l9eHtBaT5rWjhYPXA1bS5tXWZwZGJLfEJRS3xobGVgfjAsTDFsPlsiQStnSlR+bS86WGBqKiFWOSZsWiJdP2k+IWg+PEdSVmBrU2la''@;'; put 'put ''dXZsWXExQ0hTaTZ9c0tsTTohZFFaXl5SMkFiKXpzZW9mNiM0eHReM2A8KH1oJHkwN3gpYCJuMjMpRmREK3ozUUFBZlJLZTEoQzFaalFWMCxaWTczeCNvUSZZLz0wQ1Z+aUVbVUw1KkttdW42WXVwYWJ6XltgT0pwPWU4KTRNczREIUl3aUcwN214TWpvSHN7SVpIfktCWldXPGoyJFFlZEhjUEky''@;'; put 'put ''WW45di90VD1ldiJAL3o6QilWOVVjZTN4aEJNIWkpc3xiT3NQfiU9TGxifWU8cUU0fj4rSDVDSiZhdjY+a14sTTpZQ1NXfiU/SF5YZFtnSilNUUk1ZkxZVy54WElsNDVGKnFIVGZ5RzlXc3I3JGoySFdzZSRHT2I+R3hMOzZLeSpGaTc4U0h8am1FPm9XWlV1K2YvLkhPYy8sYkcufE9ZQG91MzJX''@;'; put 'put ''V0o/T01hQD58O2ZxQnsvKTBmVVRsRWtzY2lkJFFdTyklMlJRN2kjKWBiRjpLKjJxKT9LJHt6aiZOaU84NXM/Qm0oenpuWXFXa10zb3Y4TkZlZ112bnpBOXBLb19EeDF6ImBSX3hwaThnVjVqQkIkbUVqeyEoVG8oLy5McVRaWWZgUSx5Qk16VVRoMSglVD1HZzhgW045My91MEhnUz0pRE5bUH1X''@;'; put 'put ''Oy5IfTtlTUVkLHRyQlJsKTpocUxFKXE/RT5iJnkoRnp3OGY3c0R2aUlnaVJ2TDIySGZQUndaN2NRP0g/RChNI05gVjQjWyRmMCNDW19GbnpkXSF4K35TWyh0fVVCSVBvPGxhLChmJlUkWzlCeXphajZ3VEwjLjhQMn1BVERTMCpnbyoiUlpgTV5qeGNYJUB2X0BAZyhYUUhaSWN4RkReVUxgVTJk''@;'; put 'put ''eHJHLExUPDNXSGY5UHI6UXdQP0FHa3w/WFNYYVJ3SCp2ayQxdDsyOkU4SEs3UndXWzoySXBdN3BlM2RMMXdDQ2FkNGpMVU44V29dY1B5LillRGdRJX1XVUxEMiNkQ3BDP1AlN1crUHZ5Jjh5aFVPMiMsYHh4PlNqYkZMKTxWMllGIlojXjdTalpZQVtYXVpxYns6Wn00WnxgWGpLYlslVi5mJjJu''@;'; put 'put ''dSplK2pvTlNCe29yO3dWMypUTD1pfW0kPy56SF4uSylCZ1RNMnNXfXNwWU83QkpYOkF4SWwhV0lyeE4wW2g1TTFvTks2Rnw6LiJvaEd1WDBLPiJsVStHNToqeGx6V15ZKzQ3dE1qPT88OiFmaFlVPX1mbV5MfDl8Snp5Z3lrOEtmI0hLTGghflZOVkpqa15CUTBkez5tO0l9NyZOeilyYjxUaCVX''@;'; put 'put ''K0ZZWWglOEVqe09xeGwvcEp2KGZQdjRwLH5pXnZJaUZYY1EpKTNRVT9wWVV6OTEsbjhdbHldW1dTS0doLy4jWWUqZE9ibjlubU9dJltpZ0NEUDdyXWBIKCQvanNfNzcyP0R+WSklPztGKG4oUjVVYlRVKHtCMnNIckZxM2FCQiE/MTg6ZjJXeUhNdDJWZk9iaVtZLCxfeH1lITJUT1tvUFQoRzxN''@;'; put 'put ''X0hDOHIleXc4Z3s2JFJuWmguMDlxKmlZJjRbJlNuREpzcixKZFlEKW9nYyl0cGA5KEhYcmx0JDFOJSphV2l1bXZSPVV6IW1LbU1Ab356WkR1elJ6TXl4b1dQXiErfjJFW0I1TmYqfGpXOW5ZfCxxdTV2LDFAYm1yXnFfRUdQZ0s7PX5yQXVaLnNhKG5eLjlEYiVOQ2FXMCFzZ3p8QjVBRz4sWzU8''@;'; put 'put ''SHJ7SHhpRUh4bUhEIyopfXwyPzFDNXxKamoxcG0/bmwydygvX3IuUzhZSHMhUS5mQ0Nyc2NFJE0vOV9ZWHBSLytWXVB2e30/eFdvTkpuYE99fjMrXiVrQF86UUZUamV1YmRgb2w2cSU1d3VJcFhQViRnaEF4Mm4lZXovKTRGN3BraiwmQHB1WiJ1OFNsOUtKQmg9IkdWYGZWTz5bSnxwQXRdLDx6''@;'; put 'put ''fmI7eV1+R0c3OWFFfTR1RGVxOlY2aD9dazEiZ1FhUFN8fDwucz9JfV4ybWpMSC5wKmczVnl8IXNoP3E0KFgmai80OkxHZFZSI0U8KlI4eFF4X1hNMS5ibnldfVRyMCwscjJKMyxFYjcrRSVURCw5W1E0LnVjPWQlJFVFZ3tLJXw7XmtIZU0wfSZJNVsmU2V+azRzTjQqQzk2O3xdUUY8b2koVS5q''@;'; put 'put ''NClfKGJlVWxxfiRWSXRze2hFYD5gJn0hbD5GVEoqbGJ0aW5oekclcy4pWiVqT2M7ajclUFEzYj5qbmdhemxTZUMuJTJLZio6NmZvIT5KXzJFUFpAa1siKzdsZy5DQlcyV3xOSjdoQFdUIUhLSG9KKjU8Sz9JO3UhV3xReTssQk5SSHhBcDp8PGZTKihjZUtbd29yOzFAJVt+ZFIzZTR8SjJnUVFO''@;'; put 'put ''UG1yeEsuODszM2sycVNlMlJOZk5YYnN7VXhtOVEreGZbYyhEbEdbMFIpZ3dhPzd7VTVkSGNIRHUsaFk0fV1DZ05NTGRAOkBtX09pWVVIYnJMOyFqe1s1MVhleWg2V2EzU0dTTFJ7aG47MWEldEp2MldhQmpXQDExWFQuaC93VjRSSFA1d0hZSF1pTFdPODAmdWlVX0lUJCpDdDFHcytwcCRYVCMx''@;'; put 'put ''QlV+N0ZONXN4SF5fN2dbPHN8fFpMKCxifHQyXShxVkFeKio8RztzRFJsMUJQa0JWMTEhNDZxRkpMXT5gSis1X2N0R1VMQlFuY14+dj9QIlpVY0xtW0V8QzJqc0prcVgoc1M/RjxRP0FwWDE/bUJrWk8wc3xDXStjfGYseWtKbF1uOix8M0NKWUU4WEtwQjRQcDp0UkVnRm1LTFtwTjU4WV1xdWA4''@;'; put 'put ''SS5BbHp3WyY/KWZtVWojM31Ed2lbe25eMTRkeVtdeUgpIUFtMyNKKnQ8LypSaCooUiovPkNRTkA0dkJ6d05gTmNvNn4+cnNYTjxsQVErVDljb0QxWUI4KjRDeDhBPV1XeFtlWWYicGFYRUpENmNXOV5dS0dVSVl4a1IlbDZ7eyk4SnM7a2QmTyYqYz1geGVSOFN9a1dpRCtZVVAzcWdrbk5NUHMv''@;'; put 'put ''Qkp7dDVHUFJgcTdlRiVvbkJzNCE6Rjo3aixYY2A9YEgmdC9TXW07MklqdzFyakMuempRQ3ZeIyNYSzxsa2pdMT8hNTA5d3l1fnlxQjNeWyxAQnExYiNvOjwiMWJhQzolKl1XW2x4MHx7X2x1PSUqcSs4ZlNQOyZlazN9Z2pOYXtdNygkTSx6NCwlZ3d8V080ZyFefDd0dDwsVmcsW20jQj5hPFFq''@;'; put 'put ''LE1ATnNhQFV5U0xYQzhDXzQ3a1F9YyEuRDs2NlhWcVtqdGw0MzQuSWEiIzNGN3pHTigiQTpdWHM0OWR8L0U9dDAjMjpGKE56KWlwdX5ZayJzfk5zMHQudjFxWz5dMkZ6ZmBrWjskSVJTaGNNflY3YDE4fElpcW8vSHQlOT8vVGZoT3w0PTZoMDBoQEppeldFci9PPipuKCoxaHp+YyxUWjNCUS8m''@;'; put 'put ''azt3M0tBU1kjIzJbYztgbFh9S0oxYyUoSmBHfmEkdkxxX0hJRWpJTEgwazM5My54TUBUfGslK3pCYV4qP15EWWQ5Uz5zPz89aFlRSzNwSzF2U2NLT21YRjxAKVhXamZFTmpeODNJKVV3YklkQG9VcEpqOzZ7Rjp3bE9uRDs9RU9RfCVERStYOEQ/ISE5cD0uRFNEY3JoMylrREopdmRNfixNd2xp''@;'; put 'put ''dSQwOCxmNF8ydlo0PWA7PFZLNVFiK29hMGRFTGYsTGBtWlBJeWdTODo7QnlOVD47ZD9SSFI6XlY5ezc8O3ZQU31Ebzx4KDMmaXlLZFEhWExDb1t7dTRGLitXTURAOXs8QnRJTzosems7Qzg6fnR7REcyUiVgNj9oTy9IP1JhW0RWaDhCWSFJLGE2bCVNKXtzMzBZRUs/Zk5gMVZ5YmQzSWxHTiRV''@;'; put 'put ''WGdnOGtoV2YsXWw4dzRfUGJUeVVdRUk+SzgveDZfbiEycSl0akpGYHd0M0JvQH5AYy5nRX4qLnpHSj9saEhNKjYvQiZ4W0opbWg5c2RubHFZTGh6JGtvbCNvZjJyRF50LCowJHwyWEl5Rjx0Tk4+YzB5Lz9HbXZ3PFFZQiZSJit6Yk5gd0l8UEJ0dzZrM3Z1QDNFO3tXWVt6PjM3JTFzS19zJWF6''@;'; put 'put ''RVBJLklEe05Td0lWTTNMQEArPy4hejQyendlbSIxTC4hTXtEYTx2SktZPVRlYj9nUEU8Z1tzT31gU3p0XmJhV3FFezY8WHJ2KlR8ZXE9c2NhYl5JUTIxNG1mfXpMOk93cWVPMjVqOEB0LytfeWlHPi9BVWIlRGEhPUBbYVFMRyRvNyIzZXl4UmlDWDdvIXtNK2Nefl1Jdj1kOXpsKDVFcnJwWFAl''@;'; put 'put ''dWtueTpBYURISzFaZTZlbGpwYTRxZUxMVCxadU0wWVdrR0ZjRi9bYjFeWFlacGNZSGZARzxJaCQ2SiVoOWZCYXsmdmw0JkRXTCRJW1JHW1A8YWB9a354OWd6TzZmS2lyR04zLEoiU3Q1UDtDYnFPakQoL0ouMW1vM1B5JnFAS0xqNlp9I0wxLjN2Rm00NltBPXxARk1mVXp4bHEjRDpSNnBpTHJg''@;'; put 'put ''R1R5VzksRUtuMzdXTyt8VGJnbl4zcS8oNyNXNjhebjFvUll+eUdYQ0pOSz5VPGlrSSxqK0I8VWM3NmQwX2JiNl42PFpHZVNgdn1MREplISVVImVdRV1PfT53Pk9qfj5MODo4NWNqZ1I2LjokWXpZPFs5Y3EzXyM8TDs1QjVocypBSGpXITthJU5TVCY7ei8yPFlJb3NTd0BecktiR3NAaXhTNlY5''@;'; put 'put ''ZnhKY0I5dGE7KE94b2Rxc0kifjVLKCYiVEpdVElPZ0NoJDxUSkUmPH5ZQG1hWlE4ezNXNktEOWNAdVQlTGQ8VGBqbXdQJHFLVj4kOHY5L1IwYG4kZGIoPHFWbkE0ciVoeDthUlY+TUFFRXBiO186YV0xVThhMkk1U3toXnFgVSphdVBBJmBWKUMmc0I7a1pVXTpfNU40Q1FsUCxddyMxK0k1SFZ1''@;'; put 'put ''NU5OL1NPPW45Z3V2KlF1RX5sJltSdExtfUM+M2QlWExsRlFAVXtgdH53OSxzUEQ8OGg1S11YeXI/ZGtLeltPWn5UTWBHcjh+TjQ1XmNgR15qNiRxUD5nPFIhSzBiUl9OSGBWJj9scz4mQmE3S2ZaVmJEO31DQWJQPU4zOFhgSGVGPiRtbjNsckp1c1pAbUljdzpjJjxeJUd5JUhMQ3J6NjF9KW4y''@;'; put 'put ''LEw7IU1pcy4+Q0EpWEdEKm5vOyR4aStvUl87VEA+JnFtOUgiLylKNGVmPjpjMTt0V0N9eT5xak1KTjlPd1E3amdPKFh1OWtld1hDO119dkNie11+RUNaMkU4U0p9Ii8+cDJOdG51dC5wSHZGdFhVMn1XbmVaflkze0FObTB0UGJZV0ZAc3oqaUBzOEg0SiMzTnxbOzlvYlducFRQdXNQMztCQHFV''@;'; put 'put ''eDguOX1RN3FQdG4+bnQ4d2FqVXU4O101cWdASiVqTS87PU5SRl1ETjEoQDJGeUAwJU41KUNnM1lGV0FPL1FiRk4yKkwvJV9JTGFTMXchPj9NI0dkPXN6Lk5rI34qXUJSbG1tdko5XUNkfFchaFEve2R8YUJoV2gvIWMiVVVJYjZJYX5PaGoxLkVYN0IwSV0pd3FTPjkkZDEieExXTU93ZEM2QW0o''@;'; put 'put ''IUMveHV0TVFsazBdclhDQXRVQXpOOVZzRntvWFRXJHNCXzhnO0YxPkpBPVYlKGdhTSJSTVNVK0ptZVpnK3Fta3pwW2c8Oj9ZZGw5d05xRVgmWCN0SzpYRTpSdC50cVVwa3ZYRSwja0R5SW1bMEoqPVVTYTBUOjlbLmV0NldIKGM6RnFCKlMkSW9qRSxPVlgqOXBsJjBRISowVk5RQHwqWDk0VCR9''@;'; put 'put ''YSlnRVo7XnoqO0N0SzNgTUY4cWo0cUBJLHZrOzYmSDB1fkFOM0RDTHllUU1FfHouMlchcmFaKHcqYnFdV0d4Tk81fTBgVFdAekQza0o7Y0g/YU0oX347JjxEZFg9XXQ4OzcvUjc4dFdmdHpzbl1oPDhgRj8xPUY1Q2M2eit3OFFMQlgkMkZxaEteMT5TfEB7bXlEMCJLejs2ST5AWGtBQW1aOyg9''@;'; put 'put ''KnZORjxpNHRseFZkLEBNUSopRn1IeTVBSzhEXyZlM0h6InBsfk9JYVtQeGhEL2k0RjlyLGFFSXg3NkFVNTRCRlQxfk1kNGQ2ZzpHKDpRbDchPyR3MWY+QU9zL18xXXYifGchPnQ2QnA6VXxJN1hmTE1adHNnJV5PTU88eyM1WlFGa1hzN2kpRHVTfDkmWmZlVW42KCtYYltQcTFSN1hNZFV4cS9h''@;'; put 'put ''QmQ2UiRoJCQjXXZ8RDpLMFQuVkYhZWMxSCVDPFRSPFZTW0gvJktsYUJdJGh0dzBfLk1sInMyP3diKDc5cCVGVyt0UFhnfmR2QnFUcThfdyNma3NbIlM4OzNvOmVjMFNCSigpfFlAUVJfI3YjZ1JXWXIsZWM5XTppa3pGdTtUPzREJGQ2WEY+djxNPzlsbHdDT1loYERKbU1KaD9XfEdPfnRFXlcq''@;'; put 'put ''XlM/aiN1cS8yJERWIVtGKyw0NFQ1dCFNdm93VXxyMS9wXWY7VzREd0Baal1pXlpITyF2dlA7WHxPNFY0bVExIS90fEFmPmRiP1UjdX1oaVspXzYlS20oOmZSVFE5UHUsdiFXXVJXe0s4cXRBMEFUQFI4OVBHaVN1N3lyQl1IWEdZTjF5fGRONCQ4Z3k7YEh0bXxsWzhqZyRnMDpZb3xdRWRUazFo''@;'; put 'put ''e0I4MFU1bjU3NjxefXJ0Q0skRz5iZmJLcEQ0bUtra2MxYUU0WzxJZm89MnNpbTFoL244ITYhdHFlVEhRZz9TWD5nP0VBZjIyJmwpSy89NExBJUEldiYsfVFEP05MOVJHbH1MVVtCX3tdJUlIOTlvRHVrSiwza3ZfdGIqZ2VqSGVlTn5gPHksakx3WCsyJihAS0FbY3F2KXQ4TCQpImpXR19SLkV9''@;'; put 'put ''eEcqbktpaTl6T31PbyE1eiVtUGM9WlNzWThudVE2RCZHMC59MXNdMjwiVz8qTnxNQGxXYn5aOW99TXdOe3BSelVXWXE4NCJPQCl1dlJRWGM1YnV1TG4lJS9DeFdwfHJFYnBHYCZlMzghZiozZzNyanRpNEFZXS4+XmpXTzwpVlk3bGdjIiRrXmN8V2c1VGxyO0pqQVl+Qz1aOUpiRTdfXm9HQXRu''@;'; put 'put ''dUU+bDtrcGRzbiQ6NSxqUzZpJUhzdnhQN35pIiQ1U2tHVzJtT0dJOHN+NVJEUHt+V3NrY0gwSElFa3tLPFVgYWZYSSM1d0NWc3A5T0QpdE55VX0lJXB+T3BVN09VT046WSVwPHxJbCJZZXpeflUxMk1jRjAqW0NaI2VlN0tlIV46Y2skQVB0QyRiUW1mVkBae21VLkMhcVs/bSxGUE5zcWN8UE9m''@;'; put 'put ''bWRRN3NnVnlUI0Nsb1hya3xybUc9XWNSdFN4cH5JPDN5PG1lPF8lcngiWXdjUkZuWk1NV3VbIUMkKlNzQiw9K3pCO3tNLzJYeUFlViV2SDl3N0g9UTVvWkVGc2hQSE9yT3FGRExSK2s2bXZYNTYsakhTT3xWJm1HX2NncDNfPWc5aVQ6Njo+Jnp1JWp9LyhwUDNmYGtJZF5IWSZUezRYQHZIaUol''@;'; put 'put ''fVhGNW99U3Q8MzIsXVAmUm4wOnZ1YjcvUzQ1X3JjKUUhUmJVeylxe1d4fGVyW3tISUBoREtQYl9+YFg3LF9WWC5yKF9ocEAmQ2loYToxQSI+Q010X01eYnNzSTBFJCEySjlDYzIlIVBXQForQyJQTGBdeHlNKDtpMU5OQjNYRGpqS1g9QDs8c1YoMXw6aFJNLn1EYFdGYypuR0ZAWShaYkh9WCpO''@;'; put 'put ''NktvWUYxQEBlIkl2Xko6WVZyPmojL3NbP100YD5BfExIWDdJX0NZQn0xekZCQ0xKcDt3LHIwQm4pJmQwLy86UykkIixOT3tLelMhTHEoWS8/aGBpUXhMJW86UDcsWU5BekpUbkt4KUNjV340VjhUTXZ5LiVUIXhbJUBKez9yL0UrbWNML3s9QilZN3g0Z0tqV0xvSXhCZzNrKEU1IiZyblpBPXhR''@;'; put 'put ''MH1hPT1XXUUjV0o4ZCpXfChGQV9kPW9nTGFAeDsxNEJ7Xz9ALmsxXTJDNVMifStNdWRGNXE3NEpAcWBPPjhEU1ZlNC5lZGZNWCxCVWQjU3g5PUgqZS9aMnROM2VCK2ZbSllOY15qcDNPeW0ma1NMKlVWYl06eyFKPEZ7JEBdPlU5N24memdbU2gsRlQkN2hYdnokaXlXLjUwQGlFbn5xeGZhN1Vm''@;'; put 'put ''RktEbnZYZn5BfUAsViFCMGtmLEdqPTV+VStkeXFRLlRqW3RvNGVNOVIjLj9fV0gxIUJsUmtBTjg/YGIuMiYpRGl0bmwwVEtZQkRUcWMza2VTXzxNN2E+OFptL1d2Mnx4TVBpbylIKm0zbl11OEhlMWo2eDtlUHhnbXR3ZkBORGkyVylnOCZHVl4hKCIuYWpBblg2TDlySDQ/a2VWSzUmMileTVJ9''@;'; put 'put ''MW48KlYreF19fkIwO0FIKWU+MV9vX2dlXl5adUA6KkxsdkN4XlJPPXBpKT0sLjNSXmZCfSVxNV0pcyxoYyMoY2V1fDIiKChIQzxZS20jZENzPSIpWl5HMzZdZDA5a0hmPUg1UyYvJDF3fDEwR04oLFpwXy44I25dUjwkaXw4aVRqZlR0Wy5BOzRFfSVNcm5PY0ZFcHl+WT48USoob2xIfCQxcTAp''@;'; put 'put ''YFQoOENbdSRedzd3eElxRDghX3F6RDdXP0FjdEUzUGAhalUvOlhASD0lUCtsI25fLHtPaUchcXFSTjxpSHBJN35AOkhUfF80cTEwJU41dFlebEIwanJUWldualsqbi5fPXM0IU84WU0vfmJ3djEkSyVUbWJ0Zyw2TF4ycTA2UEMhQkg3NERmOyJ1e0JQNmNgSVtlImJkaVY/MDZxNyh2amomcHZ4''@;'; put 'put ''XkA7QD56XnZ1dUZpPTtZbEZsYnREOWBYZlAoakB2eGJ8N2IlMn1fYDosfl5XW2RLdmRfRGJwKH4zODUoWzpgNEEuRWxNfmJAeEUpb3w3OXxPYChqcj42L1EsYyNrKFojSE50KW01LCVqfnx9dFRIcyh6KWRqTH5dPVdgPmQ1QjxxITJkJFNSfUt2PDghQWU3O2gmT1AwWCFWcURbPn1fZCksUkNT''@;'; put 'put ''OG8yTn1jVmY8WnV6b0xjY1F0e0tkVGhYLzY0WjdBbDVNblJXSnFPWXQ4MCx9aDF6NT5VOC5hXVtGRT00eFsmYXw1STxOTDd9QHw1PkYveFBXYTl0OmdqZENAKSopeSxOaGBUY09pIV1pcWFsWzJ4RCRXTkhuRyVLYChDPW8lUUp+S2lqZEw3b3QraWBRfndGY2NOd2F2WmNfVUNIbzIzKEFEZy8r''@;'; put 'put ''XmlOZjo9eWp8VEtUI0A4X2MveHgoVnspODt4XlIwWm8kQT8/a2o+YkkxITE4XlJZdDprWCI6Tl13UnFOT3FreElHZkZ4Jm42UkdoYnh2VlsoVkZYfCt0TSMoVnxSeXNAdUZoOF95Ij8wTVcsa3pVc0pDS0ZCPnA8YDZ2SSp1VmxzM0JjWk4/JkJYVT1ncU82dkQoaWFfbjMhfVs7SXleLmwlNWlT''@;'; put 'put ''cSwud1FVUTgjNCosQVZhdGFZPXQwdilnM2ZbJVhLa2hmL3RPaXYjM0NVVjxOQWs2eVpONGM0YllxPTV4NWN5Pz1rT31+amlvSSsySVFSO0JocVhXNjtQOEMqKyVJS3FAbFRoT2p2YyJidzg1YkRtRFY4TD9laTshdF5we3Jtfl1idlB1TW8jbjk/ZW9CfiNeQnBjJElTJiVZaDd4dm4wYjkkYm8z''@;'; put 'put ''IkxJW2JnO1o1NCxPUlZaTGkpSn15QjFNMWV1STwoXWxIRSJLeld9Y1kzdnhtfCV4enZwZFZVLmBMcDc9YzchbFV1ZG9wQkAkLlpkYlpvPEt3Ti5KWUVtPFc8ZzlIJlBkQVZbJHFDZTM3fDo3O2RXJUx9IXpIUjMoOG45LkRmYXFdOU03Mnc4VSVwNVtXPy9zYTdJRWBFbkgjRy9hfTQzdG5XVUl5''@;'; put 'put ''dk5pSkZKdkVDRj03MXJCVUBvUS5hMkhrSFRIUXl1UnJpUn1sUVhEcDRvNkR4Py96bSpMcCZsSyR3eHd9M1spRFdBPEMyN1I1U09KWUN8aUxmciU+WjNwSWE1RHpJbyxLMDE9Ykt4Y3JKXlJpWHdMKFFGU1NdUytxcXgmZis0THJKYEh4cnBuOyt+PiFHaDdOTzpHNGZqPFt2dSV1VU0/fXE2Rj1M''@;'; put 'put ''QytpLzQrKUpNeV51cm8mQDkwMEAmaDE6TVVWa1ZOR1hRLyVFanZjY0MqI1FtW2FhcWQ7QmExQXlXQix4ISVjIXouMiE6JFkpdjVjPElIM2FSeTY4WF5AXyxkUWBuXmp5O2RCRV43NHhkJE4qK2NrYnpabDJxRXV2RShZcGYzWGpjYkRQdVtSdnUmbGJDTTF1ZWc6fWVWeXFtayttR2woJSxGX1Bp''@;'; put 'put ''bzNfISZZLDMmViZSOWteWkVfQ0JNKmIrezRROEJnLHJ6dW8/S2tpRDhTQVYhY3BjWWUrcEx5NTBZWXZ5NTxaJFZpJFZsdGZ9TWRpM0JGI0ZrXkhTcGdJPT0ibFVFdzRybnJdRmZkby91bzF+SX08IXomeUtMMGs2X1M5OG9COVlZSkMmPXd9bVE4R00yb2d5Xz41Yn1tZlVmY2ZySDIxdE1nPWI3''@;'; put 'put ''YSh9fURQLktmd30zK2svWztHN1dZMjhwIm4lWCtTJUlILGZvTWw+Pj1sK25CPTpATjAhQkMmQmhMRWQ1MSFCXnB2eTw8bjptVTpyKjpYQHE9eGQxQl9hUTR8KlgvJF5rP3pbPW9MJmQ2VEQqfTpJY0klInFqU0J3Ykw6b01nRGloYUlTWCsoTnFFWm53dzw/dFgsWl13Vnc4e29fNlMldFI7WDBk''@;'; put 'put ''NC5eUVUxKVgqPndEXz9UYS8/KUt7T0lAcCIzX29DUWF8TCZUfl9XO1l+QVkjK2F2NCMuYHV5V0QqMShXUEJYcHRjbl9mZWFjfVRENmVKbl5SQ3VdTEssN20iYnwsMEc7PH5GPE59NHpzNjo6PDZ9SSZpNz97I2BTUl9LJC5CWUxMZz1JQ1opaSM1RlVIaj1rOz5YL2ZZLjB+Y115cmlgNU53K3F4''@;'; put 'put ''QEQjRD5JVz1xblhVdWk8YTh1e0lzRzcmSlF0RGJJYCg1VHkxaC5IeXo2TzUzNVtjfGZVailWN3BtZWNAWT9HNU4rQzFfNmo0L2NNLCIqM1ghT2tLWXdxQypUcFI4NSgmaEFLZ29kdkkwWWh3PmlBK1ZTR25xMSFkMTQ4cj5PfF1AMHl+aGprTWZCTF8jO0A4e3ZbSDtkdzo6VWhGeGB2d2BeNHQm''@;'; put 'put ''aExMXT5TLlcjeFJpPG9VI0Z1P099XUNJX21MTTQoWElLPHMyQGd6IWMmcVd2KDFocDMpaF5laVJhQDBrOHxlPDh4YCsmTXJ9ZWxQY1o/OHB3KGxKX0F+b2NbVTVCXi5JNVNHNmB7PlErelRyYlhocTc8RiRIT2pkOENZbE02fnQ7dz12T304MUdxaF5fcyEjITFOYCVFdz13TW97Pmd7JkQ2S09U''@;'; put 'put ''OnpkOUxUI2RWaCs0I2BaKUF5PHk2QEdwaEBdfXJyQyJEMDN9RzxCKVhVIn5wPnNNVWskPF1wOUx4RU1AU3FQQjFPJTFAOilifW5LOVEhQW1NIUhVJiw+VFdzUDdRPFhhWzpVcXFSMERZd21LcW5yPjpDNE4ofFdjSDdFaTBeOWNBTTtoVzB1Q08iMUYkSGAodFA/R3tnZjVFbUh7fFNSYlM+R3Jn''@;'; put 'put ''Jl9lbTxmNF5vc1oofC9qYiRDenIpJSMkN3k2KlpJVDBkYyVEJUgjI28/enRfP2tsJUEzQklhISVgQmJNSDppXWt2XjduK2BfNF0oZ0draWcmJGNQPyVsUX5oZDQwbV0zUzZKRnp7SERsO2lDNTlgfEhRQn5LOXNWTDBnOkl+RCxqVWZjIzt8L15VY0tTWG1CSyp0JVJDUmtTWnZGRFtYenU9KUYv''@;'; put 'put ''XXNdbDVjJDwvSmAlUjd9cmtsW2kkOTh4aHUld1N5bEc7JWA0MHRQMiRTQzQ9bWFkL0o8Z01JTXRoK3tUPlJMKTk4RDcvZTIyImxFSDFiKjM8bnJoLnZ5QTw1ZUtRZiVUIWJ5Uz1MJUx+Q1ksJHgkeUlva1NPaUosezc3Ky9LOChweV47U3BbTUpnYXUoZ0RqdUllX2clXUlZezRqeUZWY01zKCRG''@;'; put 'put ''WGZbTUZBTiRnal9JTVJCNGs9cWomU3tNR1lAcDM/U1BWWyMmZSI4L3klTmJyUUs3anlGalVkak15MGs8REUkOy41XTQvdGN7Qzk5JT9TPEQoYHgkcStaK0tORXImdmVaQUF0bWZKTT57eXh1ZmhLVmlYNShoRXVqN21ecn0vVj5YX3Nba3w3V1s0XS9IYWBKQldKajwpTXFZanRORiJ9bkwydS9L''@;'; put 'put ''SHowPCFlcld3YztuTWVsI1tMPUR2WFYpMXUqVEAiPitCYW1JXXV0NFJaViI8NFNUTnA3ZGFJOHB2W0JlemcqITU/ITVrbVN7TVlAOy9OPDFvfU5MaWxaYWpaNyVROUl3fX5mL0s/TV1NP2tQSjJGPCpLV1RxXXlQTHt5SSlPVUVve2JeIzM2TkRMKlU+MFhmZ0s9cF9BK3NBJEw3SSk0WUBsfWtY''@;'; put 'put ''MVorWEYjfVdvaGM7JlYycWJYJFYpMnlpMlIudVpIbV5tXkhYfSQzQyRoQj1tNVR0YkxfZEs+MiQ9fHZ9SVBQQHgmOm9aKlMzN2YlQmQic1lvQVViRi9eWWEiZ19rOkVid2NQWGZsezpsXiZQYXJYRCtHfHwwTEkqQiU+QC5hTX5UQkY2eWxnP1IreDFEPlN7OTRiOGdsYUlEJSleYUJ2UCQvO2Fv''@;'; put 'put ''SEdmNTVLYWFyVyFVYjV1WDgzZ1gmPGBdYnsrUlc7Oi92NjlOL1dBJmMpcXEmOjQmU2wxfmVad1kwaDAjN1hQXzZ3SX4zTWI6W0Q8PVJgMWY+IShlcFVVN1dsN3ZAYWZdJWA9SiY/dW0hY3t4ckdjUGIqKEBvc3xaOUMiMVlgXUdaOFZrSEteIXUhS3JoRHd4KW4xXz4iQkREaEp3VGt1NjlMe3VU''@;'; put 'put ''Un5IYmJOMFh8ekppRFpKcGlSUFldbUdFQUllK0tbb0NWQygpOzs4WkhVbGhMWylTU3FnLjorW0ZDPj1DUExGN1NvYFQpRytnSFs9TCJCQmxGfUxDQGhHOEJOY2U1b2htendzRGxVKjk3ZDhiO29RJkVCdkk5WVglcG15eTxNJmsubkpBMmlNc3skd19WZzdLZlNOPmBzNiQoPUkmezttTzNBLHY+''@;'; put 'put ''az4xVDZXV11Rb0VkUkxdbng7L05NUDY/ZT8iaWdkWTVEVFZ9T2UmIzozdlgsNzg4QVE3W0hSZS5XJmQ5aDFDeVA8XldoWG8wPDp2bjpfLHE8dzFRfTQlMXFzUzRMRkxHfjI4OH1FXiwqbn1TU2R9RmRFYGRMR3gsMiFOdGpja29bM3dEOi9KP2dTKXF+LFBOK2IrMWFwNUw/SXJGaFkkSTViflZj''@;'; put 'put ''cnppVEU2bFl6YWJNP25RZnhETjVxNTZ8bmVsWjtteS9Nc0BsJTUke3IpMzhbPSU/Z00hKjs/VDNkbihyTDA2KzNAcltWY2FkTXsqUlZBYVUuQkQjKEA/XXNXRHVgX0UoT00oL1E9bmJQXmg5MjkyMVFMZilVLno2WlF4RmViXyFGdm4rWUVRUXgrR21iK2xoKi8xd00xcUssNVhRQipmMkxfWE9d''@;'; put 'put ''OFN8RzBieCROMU5NbzJ4TVkvcFpKTS5JPiRfIktrR1d4a2ckbW0vZkhMNnJyW2YkV2IuXX1aY0c1ITRAMnBMWVY/SklbdzZSIl1peGBINDxQRXBPZ3FZfi5DKUUvSWhEOCh1bDlocT1iSjk8P1o7MHVkR3xAS3N+cTQ1NzBRe25BPTtASFglUGtNKkZiJiVGfitsTmV9MkRvcE5yX2Nte241R0FX''@;'; put 'put ''YldoXVlaOVtXQmNdUT4kIzZrUmFfbSpsfWFAV3QlYTBaMU59b0xxVkRWdXxGV0NAMjR6Vl97KyFsdyZgc3s6akZOQmAiRyFkPEdEalBYUENPODpfekFEPzdLZ3dldkExNmlfO2ZHLmZzNGE6azY3alpiNWBHZ0dodTdCI1NZQlF3I25ANTorVWpzKSElfSJUT3I6MV48TkJwIWdMTVhzVjZYaGpX''@;'; put 'put ''L3lDPWVCfExVWD5oMmpONk8mKFZYUCowdE5pfl91cF1xWWRTcVE9U159XnVVLlE0O1U/SiVMQThyVDB2dS49diNvU0U1dSs7Mz1ack1LfFYrRjU7JF1lcH4kWFZMTH4maS5XPWMlaU0+PzF5M0UrKSguY0k4MGRffDAyPyg/d0xYZyI9M1UyV2RTJCFDVyQ0OiJ2JGF3UWUxRGNZbD5MVnJ4aH5Y''@;'; put 'put ''KDQqRHljaygwKFA4MS5QL1FQfmpwUHlmIXxmQGFUSV5qRyFsSylxJTFsaFY6enpfRWk7e1hiVyFQLnAjZUd1dyRkLjxLXntEazIpeyFVZWc4OnBwVkpDPnxeOGZaW2NJUnJRIT1veFVgYHVMMXZffnR2Qk0qbWpUWFdlOVEsdmooMT1lZGM0dX0uUnFmMnR6QFczemEuUUlwZD58cSkyTndbUz9k''@;'; put 'put ''dWoufS8qeEpsP0hhUXc9Q3M0P2I3QjhFWix4RUM0bWNoNUlGOzJgOyQ3S0tYWkw5fV1tQHg7RDQsKl01XzswW19pVTh0eU91c3gqOiJ5VkRlKXk5R21FWzdyYDFvVXgxWlI2bHtNNGd3UjtdK1JFfDt7eF48YDhNZnh+eCgyTHx5UTI0MHBhQ2UjbVQwe35nN2hUP1FnNDxeLnxxUDJtUW0vPEE0''@;'; put 'put ''fH1ZJU5pUiVaXj5uJnppOHA9RkU8Xk4pT2NzR35xRUxwKUg2IlFYMVpiNzUwKklCQ2EsVi5dKmNnJVZfeWFzJm1BXz5COnFOaFZUYkcsWFBGaFo3SHBHQD08dFthc0tnclQ0dDVDOWV5SnNzXzghcFNLJTF7T11FWDBjdnp1d2ppWXlZc1JEYHQ/Rkw3Pmxqez9kL2xzd1g9Um8xN3lCNmFoSl8i''@;'; put 'put ''bW9xSjk8VjJbNCwqT3JVITo7Mno6Pmc2U2RHKXN7akx8O0NlL1F8OkkpZ29teHBiO2NuVHk1SEAoZyRTSy5taCtyNCZMcUhOPTVCQ0Jdc0VhcTpQdXlYNTZ6MGJJVkd9PVovOkopYj0/JEQ8fitkdjQ0W3xTIUowWjBPOUo4Q3VlUnRGU1E3dT01b2ZlayxYdTcubjpJQz9GcSJbJEx0YTcvVXlq''@;'; put 'put ''SCs/SGJZVWUjSVVHbHIxU2NeYW1BODRPeUd0UGtHeixhVWA9YH1vbkFQazZTTnBuZDt6UH0xU3h4aHxgOHBjaVlhTTssPl0/SCVCPlcsXklIUCUsSiZfeyolbGlGJFBRQVBzMiFvOVliZzAhVXRKRz1KSS5HcFtnflVVbWY5cX1eP31tIyttMyVkUTNpKUtZKSpDVis1aENnWWB6TmlYfUYmISRr''@;'; put 'put ''c3lZNHtwemckRCJjfXlfN0MpUH0zQFFLNj1laWZmKnckZ3YzM15AWjhyT2deR1lAMGg1cTJMLjxdQHgmcFZtNyR1dl1kcGtmJSVLZk1tUyVzSkthImV+bW8pQjo3SUdDLHA5YDIxJXlCMmFrTkNmNT51XiE1OF4hYW89QVs/KFt0ZjBdX00pM3JbPzBWNFAzdnQoNiJKdCp3fW5gNjtQS0M4b2Uz''@;'; put 'put ''Mn5DWnovWDIwPHo1Mls6ZEZHSC5jKH5oJmo1VF44e2YxKyxzR29WKDJHXkckSWJnVzxKeHdbQmVRZmxoSy9fclhCNzI+NlR4YzZtL0ZRO0dtRUg6QT13dmVYfCk7RiNiRiUocjIqPzV0SE5gZXxMSSpULyg2dHBWSzIlLzdsTCksRGdAckReNCZ0IiV8ayNGSXJNflQ1Uml8VFJKe3x7T05CTlNo''@;'; put 'put ''ej1GdUhBayg8aiw0MSx1QFQ2R3MmXmVfVX5kZE5vWypsJUxHL10/O2luOj95JStGWyQialQlNDV4KUFgP1VNeD5VVTsmKkkoKG1ALGJ5MFc9Z3E5Oy9MVl4oI28zXz43fFNAeyIhKFhkQyI4eWRXbWJSNDxoNWNme1B3TixqTz5jUyhgXzUzV0AkOU1yaiIkVy9TWWNteGxMUjxIfEh7WXoxPXB0''@;'; put 'put ''KnZbLmYjT00uZWhnV0A6PilRO1NjcEs1VXhRcFpgaSh0LG5uOSk6I2koY1l3IXxySDJUYGJGJCNEVyx9Vzs6dGE1KUd6NTV4ZyhhVWcwV2xkdzNgITJCZTIoPHNDeFgpdzRnKThxVXh2L2IxXTh5WmpMWXNfcSxqSFA9TiZfLFlCO1E1dmJBM2A2eWVuOihQaHdiInEmfmw1Yk8iQEc8WkJoYzFA''@;'; put 'put ''WlRYOnMvMSw4W1RDeU8vVTRzMFR7bnNdTGt5O2hvY18wS0FANmhBQyt3MH5aLEdSaWMjRmZnKk82KHo/Vl40P3BoVDprWkw3bWxPPjdaWFokL1JlW18/d1dOQjNYY2x2TldEOE5iXWtIMVJaTmRVMG80MXFzLD87KDIqNHpoO1RkJVtXcD5qWiEwY2kzNnVaUk4iWntQaXx0MV9iaVJSJXRlXXt4''@;'; put 'put ''UmROOHl6QFF2PlBCR3tCRWVPYSFGTmtndT1QaVRVVGcrXXZwcVNlR056WnpzNSQqVkpWJWJBRn5QaClUIW87TTM1Y0Ira14kI2N4QTh3M2F6bmJ4IXo1U15mdDUwXiNnYj85dHQrN3Z0UiZGSmVObl1nM2VbZXdsQzhUV1ZvKW98KUUqTDM4JWluO05eIXZTfFIzQSIpaSNhMkVWMkhPQzJEYmE1''@;'; put 'put ''RmdwcXtEZFo1ek9nczg6JSExKClbcz9ZdklBKmlhPVN6MjR7aHEmcipBZTlhRSglPUNqcTQsOVRjaTB0OHNoIV5DIUlub1BeJG51N3N2M0BgMXEkTF1mVklxYiVGQHEkfnIoRWIjTllqZk4qKmQ/VSliU3RgSkheL08uR0toVUtJPm4lJUo8e2VtPFV3Nz41LFJgfntnQiN+JHhXTiMvKG1vaEZH''@;'; put 'put ''Rj9bXWxqcT1Yez0oXSwvMWE2eWxYbkIxdTc/JFgkJD0ocExYTDl3Mj1mQDt4WVphcVdYczNzTTN5Zik0enhfTVlILHtdR2l9LjokQ08pej9aPU5nd3coJSVnT0hvU2ZxTWplTCxFSSFmPUJRSkJbdVs+VGJAdWc8SjlSQ3JEQi49PShLMG1AfE42I0dHNDooIl4xUXJJWlN6fVZSO2FyV0tMWmNG''@;'; put 'put ''Jn5OYG5zaE5TSzFecHFyZ08vLz1oOWNyXWN2LipteSp0W1d7PT5hbS9KXm41N0k7MCEwRy5sbEwqPHh8RTUkeSpqfCkrPEwyWnVyOzo6WiF1SF5nP3AhWHA7QylBPTQoWGwmIzYsQDxvWm03aD5Ea30jXjxTayF7V2ZLKjo/VEw3WXR6RUJRLlhsKlpjZnBaZTA3O0RLdylxUSxyNzk1RWh4U0Ii''@;'; put 'put ''U0sxOEN5Yl14ODp+eiJ9bjZyZVM9JHN4ZVdeN2hZT19ZNTp0WChjQk9LbEA+c35bbiJ5XWEiSCRAaFVBfH1mWGgsPFcqYEIsRGNtR2s8RWF5KTs/OzYyaCFpVDJVekssKzA5dnM4SVovI2Yvc0h7alNEIThrcHY5NmpxKXJKTnRSYjxyfEdzOUExfnFRb1h+QTNbSlFGdF1sSFY+dT5oZkcmdjFM''@;'; put 'put ''fTEsY19qV3dfdlc6Y3I8bCNhZiN3aC54YmdsWjtteykvVUhARjBta3BQbjp1O3p2czRlY3QyTS87W2ksd140Zn1ucmFZQElYfSZXWT5uRE82S3IjI1JMO1NBdUZeIU5zVUBqQT8qQE5tPH1vNHNhPix3TytCOnNOeGxyaVl3YWs1W2R5NXlCa3h+cVtqbF1OfEUkVSkkTFBVJj1QOUlHNipTJjw4''@;'; put 'put ''SUR4UkYlaTJ4biRHOEo9VGg3YlQ1ZkQsU11MXSZdaGVrXk96NjR0Yn1lfCp0WFNRPHFYZCIwOVpfQ2kze356LmcoeEBoPjc4PmRmVkJ2PVJFNz95QjUkUz9jdCpuVnp5dig1WGlgdS9LL1ZBZzl6cD4xPls0MkhhTTgvam49alk8WzVyRHlxdW1WLmBKYk1fQ0I2WV9sTG1dOEhLVXxLe1hBYV5J''@;'; put 'put ''Rlp6LHEmRUddUyhmbGExRk5IbmAsL0IwLCM4a0VlZnF6KkA0OEJKSl1AQm14VHYlRXA1d31lMVVObl46WllLWVZPTXlBTlA4Vk15PlB0UE5demNZSXBARnNESXdLYi83ak5qdVpnPU0wNHRhOkxzPktJKVdpW0okJmdfRTcrYDI8RjJvXVplZXxXX3JnZWR7I1ZkTF5OTUEoP30kYzVKKWVCQTE3''@;'; put 'put ''M25yPnomOSpOdUVRaUdgVUJVamU4IjQrIjVPWSRPS01gWTJpak5FRXpJT0plMVRFZkBIYF5FPFBpbnByXm4+Q2pIbncwYkwsWFJjSnF+KmRGNCZMJCI+M1ZMQ09SO0t2T25FalkwQ0trX0RuaHJ+VWdmUFlhZEJHMXV5SSNkUDtXcHR9XXtFL3Y9TkJXTFMlemBtLyReI1RhNjxhPHp4Lz9nQm43''@;'; put 'put ''SzM3Wkk6dDVxcipOeVosOyY6dVdZYChOU2F7PztCTXRCa0tHQ0RlUX03dH5nd05jQztHQ2tqfXJZMFsucWIxLnoke0U7ND1YWUNJUVhqLCRwPVV0MjFfUUBRWlZsOC5XJHljUls/WEU0dFN3cjBhbFBvZj9zc1Rsd0w7OCx7Q05bTnloUDYrQUhvSGVyZjREIjZoVjxtQVZ7NXZjdWBXcX1lTnMs''@;'; put 'put ''bDx7RnR5IThtVHAoVElRW0w+dGBbeFA3NG5za2Y/RyZWfmFrJnpQQSsxYE05akRuIkc9QE8yRWwwdzBtcTNZUCpifEJyTEl+PDhgSlomZltPImojRHY8bFd6NEZOdmp0fFIvZVF+dCl7dm1rOllFYEBtOSV3YEU+UG5pPXtKXUl0eV9KPiJoOXYyW1ZRdCYxNUo7OTJITWZfX0dxUXcvc012WDll''@;'; put 'put ''Q3tVUmxWOz46N10sWE5KPzElPm1RJl5ZIywrfitlUGNneXtyWnBYPyNnQkNXP0xFQkFEdHZUNjt5LnZYfGdXP0EzdVRCZzF8ayldUlYjOTMsNF9DNUZhdiltOXw5Znl6OzlDQlVoQXpFQjsyLkdpJSo6RGhAWXJ3e29hfTpCPjVnaDZWaGN7MUdyKXFnPF9JLllzSyNuPi8+aWx7LlgibUh1ZDd1''@;'; put 'put ''XkBJRSI8aipsb2UoPkBSNHQ+PSUqW3QiRWlvTmJ0WlQoOlJhR1tXKFslXiJHUyRwcDhpNDkiJF01b2czUldbRUcuaE09PG1KdGFlSj94I1tFaG9PVSh9Ti9EPCoicy5ZeFlETHtQfl1DNjcsTHp4R2hiNShOJkJ0KytqTSNEcj1sSX1DcClsT3hoWWUrRD13dEVINmskKj5DP093NltzRWUjSDtZ''@;'; put 'put ''KXNMUyhOcHttcFgwaDF8MjRMO2h6T2JKUC9UNENjPTU6WyYzLDNUUXxWJWdhQ3p0RWRQcGZBSX01RX0yYHNaKTRje1FIVGFEPyxfUmxVSEhNUkhMZDxjRDpoP0c1S3cya1o/MUpUdyhTTnF+aGp0aWJKSzc3cyJXO1lgWEhGRj8uNTljcHMvJVcoNzd2PzJOe09kRVUrXzxvWWtGRTd5R3h3KCZ8''@;'; put 'put ''KUBrMDM4SHR9QVI4TXhya1U3bnNhSHFTODNiTiNFeC92WGdUcj14SyNLT3RWMGxYR2xfOmh7KE9qXTpoRTpSWD9tRV9WJXRQJXE7PTJLRkk1bW99KzR9WSIjSG5XKlhnQkVOJSI4IzZZVyFgKSUse2N4IXEkfks7OFJhanBqZTdUcSQqXUxRNl04L2RZU1NzTiZnVTdJIV4scV5SUl9eNCI8Zi8k''@;'; put 'put ''JHplZXlGVHM/dUdLVVghYzhJOSVxZEZbRipgYWlPJEtkN3ZkSiszMSxnJHEpYHFjOW98dHQhbzw9JV46R1JKRVFSTj9gbDw7MUFIfFVMT2M0KT1TZ35DN0c9fj9zdC8hPTx0WHNdM1YxK0QuV2EsZ3Q4R249SUQ5d2VCQHxKbXA+QjQ8MmRyU3wvdEN2XWI6bUQ+bH1JcWBhaDFoYFV1I3w0SyE9''@;'; put 'put ''P2dhOVcoalNXPkIiKG5kaDZgRFM9UDchVkw3P0NRVyVAYGs/KUdjNn06JDFmYFlLKXxobjdMZGR3Rk5pa04+WzRiKk9SXnFnVn0jdStNNWJ4bkZvRDpSVEp6QzJgOVQmPENGYWAybWNTV2lhRyR6OD9MRl95eUdRUG8sdD0kZX1ESVVrNilvcmVrInhwSHBELD1SNGpAKEU6aGZtLkpPXm85QHdZ''@;'; put 'put ''RXNtNUhGQENta21aeCJxfD14UmErMkYuQlUmWCJgWSFpcEBZOiZjQFU2SGByTnhpbD0sPG8hYH15RkIyWVZ5MSVXJSRHJWAlWDcuNWI8dHxRTGtJc31bYXV6bGNwSz1bK24oLixqfjJ9PWtnaUtxITosJkgmdWNxKz9zQ3ZTNVhVWTlrbnNdLHpnUnQ/WVdCayxoR3gzdl98ejdeKjVQKzpJaXl7''@;'; put 'put ''V0p6Xlp4cVBqWiI9R1EwUVI4eltjUHxRMFhiZktVdywofUV6IUkhSUdJVT9IKEIjUyNnbSVteVlgJGI/TTc/eXkzKzJDJSJseTdJJCp0bSZ5cmZbJUd3Wm50eiRkN2RRYFtNVioyLiw3UzcsQndkPVNgOjsvRUU7e200OW1WYlNsUGNtMiYwT2ZNNmFvYSxXK2JMSTIvck8xdnB0TFJicVh+NEdD''@;'; put 'put ''XUlNfXczI2h2NyhlL1RjWDkjRn4pKFtQOFM+W11UYkZ2MmI4PmlOUlhCMTpzVyFbdzk5Pzt3PlMoRUAve0tHcFd2a3U9fWkkT25zT3NOemtWb1BKX0hHMmxuQXdEYWRZNFhAYGdaJVkqQDpVWkJCOiY7RzppYCQ7IWVDIlYybGw5ZD1lP0ZDPVFrQWoyM1BYfiE5QFNQWTNEODFfY2lPTl9CaSN+''@;'; put 'put ''OS9SJFRtdHN1ZCR2YihsZT0/UHBeV08uUi9bKk87Wk9PNWNMLi96c2QrWFd6RV1GOTA3OGgqXT1GcXt9VE00R0pKNjYwN3RhMWZvQERCaFkuUSt4JTUsQUk8RyFIK1BtdSFab0hFb3R3eUc3Y3BGMGVuQllKM3hhK3k7QFlERiYzQGx7MEZ3Pk9aKjB6MW1hY2RVWkx1P2llKiNIcEFYWFA6Nkhn''@;'; put 'put ''U154I1B6Nml5PHRmbFJEVj1Xck5oSH5FYU9CaEFbK0dVQF1CWjlbVH5pNXxYZ2lKRF1xUFEmPikrVz9JLnRsflBNbCF0N1A5Q2pMMCMhQmNuQjU8ezUuZVVmcUwmNnY9Llg6eWxeM0pGdnFLJlQmeHAvdCtjK2R6Z0peM1lDI1o4RiV1LmJIIXQsanNqYGZeOWBPXm5tbihYIW9NYVRuW3VkOTNN''@;'; put 'put ''Jkw+VUdESkg9NFIiMF1vNkBRdkZUZFFnRWtHWDR9YztrKjlzVEdNVEN4PjRpOXcpQiw2MWRlZ0EhSm9JODIydlVXdCt5aTR1bT8uJm1rUElQVyVYYXs0fXZ0M05WOSNsTm5KeHJdUUZ4YmVte19qV1JeV188ZFRhRTMpNWVpalNLZ2s+UlpfUypARl5leSZpYSUhI3o0KkhYMjo3X1Ndek9vL2x8''@;'; put 'put ''LC4vYVAwS0plTDAyUyp7TzBDWTRoX2FgTmksU3xRcGJvSmEoOWE+dyxzfU5Na0VyXm5bN2ZEKDJsam01Skk+NDpHNlMjTUUvLlBUOVs2Okk1X3JmZUkxUXlrQFJRNHpJRXZRfktJa2hjOGZZbHxzMW9EQHEjK29TQihhQ1phRTUxRVhhVVlxVEhQVzpAUGlidDokOVEye1dzU3MsLkR8Kmo8bEd9''@;'; put 'put ''NmppTlFPNkpzdmdEbiR2MjJhfUI1UjBJZ2A1bklJVjtyUGQ1ZzZGYj8/OTNTQ1cpd1YxXylCejJ8dDh2VVBgcmhjcGRRZnp4UnpMZXkzQiJ6QTNtPSw1a2cvNnwjZVpEVGY1WHQrLjBfVlNCQnkoIWNDQkhZT1JkdTguKm55dnE2Z1RsPWVCQ15oTGFxa19dSTsra1Q9dGh6bUU2S1l6MWc1NEB6''@;'; put 'put ''QCxDRlNgbXsyWHxMdlVUWWJmKjc2ZjRVTSRlMGlpUHlgPVU+ZSghM219PCVOJTJxY2d7dEgyKXd0R3k1bytATTJzQE4iRzdgNDRSYzs5TFpMbFlpYGl2YSxteTV2KXFJWkZGbHZWdW9pLlVxVEAwSiZudUM+O2N7QVRmPyVfcDgyZChzK242NzR6XW0zMyVNMDldPzEkfGEkSTE6Y1V1cC87STdl''@;'; put 'put ''MDIlX2hHZzFlRkZkRVp0U2pEQ1AsXXd2aE5nN11MNmF0fi4sbS81SFJ2TXZ1bml3eVQlaGNAWUw7e1FpaVtwbyRsTn5SeXwzRDpYXUMiQiJdUjUmQFFFdCYldHdQNFp2M3pOQX5rWCkmJml4eTxoR2J5XnxRQU5qbnZ5MG1oQDg5U0dIMzZOTz91QnxxPlc1MGwlWHckNitNM1Jfa0FLKk1JcSwl''@;'; put 'put ''UUxMKklnW2BKdjU/UEUmNmBfN3tMVUdNeVAoMTVbTV9wMF91NXtLZEdTQVY7TzljZEc1SDc0REZoeCthb1goVkh5YElEIj18XVNhMUFNb1k7TkMxT0B4OkxNXWhnVUAyKnVKITIvVFZffFFfdVBdWjE7SkU6bUl8TTw5MFpGazVVOXB9QmRsb3s+fjZpVCJXd344OS5hNSFkVDQkQFFaQ25Wbnpj''@;'; put 'put ''bCNySGpqSVZ4O3k+Ykg9L2JlcH0lbXRUbmxdUlFyYk5XZTxnZ2tQb2FGZjxXTXoyPCJgbyxJR0QjeTEsTX4sdGNBL0JUODl0N0hHPWg8cVF6dSkxVnA/UUEjTnFdQjFHR0tPRF91IVNFMWhDR2F4dXFWbzhVUkc3ejVrXkFpZUdSZE5zUi8kaj8+PDNjWHheVzs+UCxOei9WNnRNUSs0Xk8hUV9Y''@;'; put 'put ''S0B0aDoxT3kuLzFfWDkmOTVvaF0uTSZDfi5fU1dHNU1ILElZX0p+SGx4X1F1ZiZ9ImQ2IUZdRlhHSS9JYnhJPS5RcU5AbmE9MztBeSo7T0ZXM3RKTE1yV15oI2srd2lSQ25FbWphN0soRW1DVWxXKzdTWnhbNkgrU29bO3k5R0s5ODM1KlVKcDY+fCU4Xz11RGhNUmFiW04ufCtVanY3fn0peSMu''@;'; put 'put ''e2xdWG0yKVlnbXh5M1ZvXjM8LCxabHd5P1pyTiwmIilNUXVtV14oW0MhdUMvMUB3eWBDSXcsfkpJZDxtY0dZInRheF4jKkhnTSspNUolZ2l3RCgjLjx9d302L0NdWEVWUVshdVk7cHJHPF5sdjtzaWFvd29je08vSF1RMWxdbH1zXztTR0t7bUgpSHx6enMxfVp0MV9UVFA7YHUrQ3lwJkhfIVch''@;'; put 'put ''R3YmW3MyRzc4PUlZaTVpSCNCfHgpZ0tJMGk4YEtFcmR8IUEza0FJWXMyKE1yJD4rX01NZV89d2JYeSVFdktNRmYwdTRzVTRxWk1UYiI6VkswbD1JaDtvamdIRE1OSl5XZlhRVi8qKnR9R3lxPFl9YlJsZC44NG5gWykzN0dPcj9ZQUV2R1VPQyR2KjcrRltxaStuKCw2PloqUDdEQkZoNDdrNzNU''@;'; put 'put ''fDY+I3FvIyZPWDsuPkpyT3ZKWW02ejd3XXkhVVVBOjFXPHpgb0AoQ052Ni9TRENaSzJFaXkxP0FoRzFNJS47WXxSKkxZZGxpUU1TIlp6dklXKDoqQlNWRzA6M3FLRVBtM28wbnE0TE5qS34xK0tvWj4yOWdnZDBYT0lhc2hsVSFCRjpQMXBIW3pSPXNvMGE/U2ZDK25KMCgwamxvdGpoUVYuMlku''@;'; put 'put ''RixMWWVvbGVPREJTWHJlKl95RW5LZlp+c291RSw9KmQhUDRMSlVXaCsvez5kSlUvVF5xSWAucnAsenxaP3BAfCJXLm4zRldwI3I8a0hZQTN9JHQzLHd2UjNfMU5FJT07bjhfWEssfm5JIT41fVg+JGopPFNNciJubFUyMTZQcDRCQCE0Q00iR310cD5wIV9ELCZbdCRvK0BAaFhfPCpQbFc9TWM5''@;'; put 'put ''KHcmIitHVTc+T2t7dzkjJTc7MDV3VzE6eyYhPTRJXW5aVm8vWlQzNDxaW1cwWWN8L21EOm1HbEAqPmNLWFpIR30uTUJiTnM3a1ZhL0Bga1ducGUiR1o2MUxNdTxQI3JsLFg2ZUYoXj1OTSRKNy9iUTxkRTJkYERkWXgwcU8kU1VtfGpvNi80O0lzP0huLEtFLGREaVNeWWNrbiNUaDJ4cnFoYyt1''@;'; put 'put ''Yj97Y2FyVzAiKGcvfExIVUdmNyxrY01lJlI/WUdMSXA/NktFMjkhIWhwY3FNMEQoLDx0Wl9+YkJQcF0hKHVFVFh1bEpMbjhYYWlWWm54dig1bHlxRUJSZzdlU34zIXAkMnRSZT5FZUF9cEEieVtNKUBkWTFaSHxESGlsbT5DeHhKMFk5RixRYSQ0fHxOKVkvbjdDVUhZT3M4IUpFTW9HNS4jWVF8''@;'; put 'put ''SXAwfT4xXzB1VGBJSz5yQ0xjTEZzd15DPWcmZjoyZm9Jd2NCfDNwaVI9eGFAWHAuV2twOH16KiEzTUJLPHdTMEFXYE0kcX4+TjckSHQsOEBsUSQoIlg/W2szXXx2USlbUkNfT34rLHJkSjg9TFg7SD1OOTFYQUJIPUtsJnxGfmw3LC9YZUNFRU9FZ3p7Yj10N24weHJHNG47USImcks8Q3Bfd0lK''@;'; put 'put ''fD4kREhgOmhARih8fUddSzFHRGtDRXBQUWFKeXMsS20rb1ptdCZDSSo3eitOQy4hZTpkQVN2Mk52SUslcEJLRW9pOVZ2PCVCWTdKMlVDX08laUJeIXoseyNfJCRAaz96N0k9VHExU1pHP0tUWWJ+ejY8WHg0enFCLDtGUj9NLG5fIyxwUDFddnRSQ3VwOklDKlRDej5kQm5IVGEoNyFgbW0lI1Bw''@;'; put 'put ''Zjlbe2ZmN11dJSUwcmRHLmRBelNrPHhFW0FWW3BgeT18aDBmW0shRyRgLCp9PDpkTTJMOC5wKXAxM2FaXjRDU2crKz58LnJUMWBJVyY4IUFnLngsVGt0TCpnaEswVkVZLFlqRjRAWTJSdyp6fkkiYyN+LyU8VXJFOFg1QjdSZS9PbHZYc1ZrUFklOzdrQ3wqKUZHe0N6PztCYmJkUkAxT0RDKUAp''@;'; put 'put ''IUpASUlSS1lyd2NtOjBUfT1yW3JpfT9vUypaPEpvdUpgd0ZARkV9N2JUY3deIj1BP109N3hUYm9BRnlfZk9NamMqUTpjamxzU3R0aXNzdlF1Q15FbnYzYzdkKUNufmcqO1o8NXhaUE5FSyl1KTQiXnlVPW57b0syfFVPOGR9aTteKGouX1dFTEE6Py8vWmsxMSg6X3hXe2dJazZFOzIkT3taI0JX''@;'; put 'put ''dnY7fFJ5ekxoeylCcnsjQVdbYEkpJl8oQ3t3JmpgVT5aSHx7e3hzNHswYVgoMXo7YCZKYmdJRFcucCpOZlZjcGIzVmBDTTtDNHdIMjI1fip7Q1EocUUsPEQlOTkwIS9oYC9fMDJFdiR9ZGFWKj08NGl1dEE2UG97LDhJWTQjL2YxeGEjXl5nKzIsUFpAfC8hQlJPYSltI0dOOjN7fXRNfmEoaSN6''@;'; put 'put ''ZXJOQDVmeiQ+ZmVOTmByb1tvVUNDcTNgRVR4RSVQel0rWDptYDlYSiQse0lpdE13ZWl4RmgldyhSZGRKb0NidztKY0JVYEB9KkVAZi5ZejUvWUZwTXNpImNmKyZyfDd3ZyNmVS50V0g7MC5ddi5pWEl6Z3w3VjIiO1Y/fUlvUzRYMk10fGcoNFFSOHNSYEYpIUVSdGpoSTliYiJ9N1Z7YyloWE5E''@;'; put 'put ''KUh6UzVRVl0rN0NdSW9kTDMsb21SRU49ViNgfVdMZFF1JF8zRU5CNWBVIW84JE51fH12TmRBTiQ7Vz9GQiJGe0smcCM1SGBSK2xiOVMsWG0qMFlZTDZjNV5pdH5rOXR7cGk5Tmw1I2l4ZSFwW0k/IyNbV0FDJV0sVnNhTkB+V1pDMT1sS3dxKkVdOjZPSVFWIjZbcF9DP0AscU1QO0pxOjt5Q2kz''@;'; put 'put ''cXxfdGwyU2xnVnVnezw9QXIyL35RYUUpdTQmM1dQN2phaG5kJCo4cGY4KCU3I0k+YGw8Oywoa3c0KDJjO2h1UmJbZk80Uy9BalE3ZEgpQHN9aVM2VS5QTSNKRU5JekROYWB6QnkmaW5KUURLaXckKHJeXTZWMkQoaiVqJkcjN2tvWVhLV21gS2k3UCZwYy57azssLD8wcVRbP0g5WHtBSlBkRHFs''@;'; put 'put ''fndbfF89K1Q5eVgwaU54Q3whYFVvLj1BfmEpI2gkeUAvN0hDeGo3a3ldJD9MSGAoWHR1eXBubkYveHEuNmtGbC9oPDtvPl9BPHQodD54SzJdTlFJYjNueEZiPWEpbkp3JjhZMSEvbDpfcz9BZltEbypXWnFCSUxCOFNBRXU0eX5LLEg/aEQqdloyel8oTkghME4/TSg5UFclQFVWaXJWWEgsVjI+''@;'; put 'put ''Vl9jdkw5dyVyQmY7UWlzdnQ1O3ZbdmwydGdaa008eX1BcUZwbyFGbTdXS3ZVUSp6JV8uZDxkYHpAY3h4YiNDREBdLkpadDFyX092NDw9YXliUUlVQUI+RVE+cFZjRHFXODpAXVlWYkdVNiY4LjEiZEVKeF8iPXJmT2dvSFh4YEROUmFCO2FYVnxuUGhIO3V0QVtjW2FGOiU7WSZkN1IqNC8sZ0xZ''@;'; put 'put ''Lm85MFNsRDJhSkNGcWd4ZGVBR0NZdl1qOmlgMEBoYDQ4NSwwTnQ3KkFFbSsuPkJPMnE4ZSkxa285RHx7bDY0WjBtbzVteUp8Q2k0KS8kdGNCeUt4PzEjYkV4O1h5XWM2QCIocUMlJEgxWWhuKTIqcXt2PG5bImh9Om9DV312OUM5PGR2VHVMWS9CbUdzQ3tfamMoaDwzVWNUNUAmZktISnJVNl9I''@;'; put 'put ''NlRXPnFbfEA3LzpxK1JFbFJmVz1qKDNKVkZQMzhWKHlJb1FqcjFWdD9ZQ2RSOWhMUWwvRylgZEwuXVlnU2FIYk9MekI8XW9BfHlLfiMjW01WTkdkKUpoKltPTk97ZzxbUk5qdSp5Om13MEwzOmZLRE9sekVCZH5tbXJmciFDOE5mMjIuSkNhMDcvdjpMWnhMQkhHKVo/Oyw5Wz5UaF0xciZhQipl''@;'; put 'put ''al0lQ21uckglX08mNyRlXmkkU2VrUj1Sb2F+TFhLImdZY11XQnkqNlhOeVJEKl8kYkU2UHlJYW1QallPXz8wXTF0bzFteDZLayJ3MjBrISE1eT9jaHhzXUxCZ3lje3kxa251TVkxKT9McE1tbHcrcEBzUWh+bk1RWWcoQCRZKjB2V2orNldAKF5wK0NSUn1aeUFSNncrNWNhSk9yLCI0aFo4UlQy''@;'; put 'put ''ZHV4eyMhSTR3S0hbO0crYGZqUTQsd0RbWEJURSJWXmpucm0sajVUSzlzeFN1ckZMTChdRCYmImdKP0chdilvL0BSdUAmX2MyWXA7YTNSLDQjcVNJaSx6PV4pMEtpUW4xSDE8PX5fJWF8JHF8I215RFRpK3Fmc2tfZlB4NGVZUmtNaUhbMzlUPnMuQWI7ZX5zTlE9OD0wZ0w6KlF+XmJVU2Q+InNW''@;'; put 'put ''SWBKallKUmpBJkhYNSpnY1lLQm5YQjAzLjl9WD8oLF0/aVEiXnpNbytNZyN6IWNzSypvfGNXanJze1o4L2BNMiRuNV8sV1djYS5AYlg0ZTgxS1podU5sfGZQaiNEIn0wbiw4VGNVXm8jWmIhWlolZCg6aEYyKk9LZiQpLGgyWFlhS2lpZFkkVEwyUXlEWmxxcU5dKHBvdXEqY0o6YDFuMXRuI29i''@;'; put 'put ''RHMyM1ApVCtPdFd3OFZ5QiZ0cjRNLF1raWVefENiMXtkR25nIkB6Yn5JJjR0cWBUdmVualZbOTt2W11pSFhBcG9FVThrb1BObyhMbGQsQmokdWRLZDhJKHApZTNiZ2k/QEdoXWg1Sypre0pHIWhvMzV4IltXTzpUYXc+YjFKOGBQVEBpJDo5KmJxUSFVdG9CdC8xXTleQ3xoO0gubHFSfHQ4fjJC''@;'; put 'put ''PTc8NXBbZ2NgKFExeGE7QVJsLjIwSzpSL0oudWtJY15ffEZVIUJLIjpXUVtXPDUmR25wSzsiNUFiVCljOm96OVEmW1Z1IWFVRGB2MDgkZyNjQSNGeF1MKWMuZ0IzekZ+dT9nfnFDZzF4aiM9N20uUl9bVz9IXnYpPnZ1ZFY8OUQhXVE1cCVXQmYweGNCbywsK3d5M05ISm5iPEA1R2whXzBJeF1h''@;'; put 'put ''VFNgaEVsdE9tJk9MQmlkInQ+IiRJX2N3R01sI2BqcXoiUiJwalErMXNpTT1HaEpdYlI2NFlWLCpDKGojJShbZDM3NjUyQGgocn5fL1kwYkI8QW1FUUd+O2dlKnQ9cldxOHYjLkwrMTtHdmt0YHQiNVM7LnxvQm5dTHNmZHV4NmwxeTohSllMTnBwKUJjaDN2NF9CPSJNY3B0VG5beFpdT19NeHlk''@;'; put 'put ''NWwjcm8/e2RIUXNOM2dVP0hVL0RLMXt9NWNzfjRfMHt7bTJoTUEjZ2hjUyE8SVVtdyEiVXw9Xy51fTRIbSVQKkB9bmgyQ01XVHRxIiVmWV5KT1MrckpKdEgpXWkyZTJhPFRRantmVVUmRlhCJW54Q1FzanNEaVRFOUd+eTFCTEpwN2t3dzVgQD9pNTEiNilBT0RYUExlWTdyc01PaEA1eTM9MF9F''@;'; put 'put ''dWd4aG47KXEwQCE3a3c6dEl4SjlZQEMkTzp9XzY3RH53XnpKWltjIzUraFsoSzw4KlR5fU0ja0dYfmF3KDpPRys5ZWt9Mzg+UClIPnMmPmhzKUBDQEU7WTJUS2BfR31LWDRoUEE+eUk7akhibVUwcWh6ZHMpP15AKFY5WUBBOi5xX30/U2M5P3ZZMyExQjYzODtsMipFPn42eSEoc0pGJStGdSFB''@;'; put 'put ''Wml9M3JrdXx+VD1nK2FAIXZ1fWtTVDlQNlAkM0Y2SVJZOUZOZVdsbG5iIU5LdU9GP1peL0dlPlBlT3g8ZmtKUFYhNVlTJGlbeVdmbFE2RVhjJk9lMnxjV2JBQ0tkZ2Q5Wl95dWIvPWg/fnFoS25oUXhfOld9IktJb3EzIkJdY1hzaDRVUXpdQ2RvcHpAMWxvOUsxYH1HeyVIJUh1RmxZaVV2SUAv''@;'; put 'put ''fmsoTG5lTGMpTWxYPDZbUXBbfWI6eixCeWZhMGU8a256fjR4RV1uc3hwTDhUeXpJJXlKbWlMNSg9WD10MzQke3RzVEN8fE1FJl5UMDYmMlJ0Ry8yR18kSWc5RjwkLEB9YkFTMy98NjRwTHpRKk9pVWtFJElrSWxncEJ9c28kJnE9WiZWUmFhL3YqLzldQCl9e3BFRj0qdD5afkZlal5RN1BHcyUq''@;'; put 'put ''JmdiSjJqUHhCRFJ1aiVnKW1iPklDSCN3byQlY3Q3eEZhPnghWEJ2L0VTUFRpI1AwUV45dVhuJlBENCs0aUBEOGpgay8jOWFEQ2BnQ1VFcXtoTkIlZXoxU1lYcERtXmhFWX09e0lxaDxdcUdgW0V8XncqNEFaUk9kaGlzJC49cmhUZEIrUFB1fnUhY0MrZFZZWiYrSTYzdHNaZzZqX28vazY4Mkdd''@;'; put 'put ''K3ZFVGtPJW1RRFs/N2tJKU09Z1dDem80RCo5Lj1MSmV2dG5FNS93XTN5Sy40b30iOCZtY1smQHckZkE+RzhqcCxgIk1UJDxnX0ZdZ1ovZkNhKEFsSmFUMEhYJSQxaXtkeG8zbj1jWk98YiJzU0YkZ2J0U1IqQlFtZlZ3QExHSUZyb1pMODdBd3NwSVNdXy49KXhrSVZNRDE8Zk1kSzFBTShVVDBh''@;'; put 'put ''XTY0Wm04MytRTiZHJE5LTWJdcG9LUUohdTh1dStGUnBGc0pJJiVOSFYmKz9IQ1JqIVMue0ZGMzdPPDViLkx1cX5xbXJLYjdiN1lQPDlaYF5sXzUzfSIzTkdxVXdIISQvOGdrfDd9MCVtaEwiPzxAdixtYHNRd0glbmh4XlRTaGZCIjUiZUpbYWNuKG1tcWNFVjtDZnBMOGIzVnVgXklWbyouLDVZ''@;'; put 'put ''QUU1MGFUfjZTYFUrPkpuVCpoVz5oWz88NVclT1YvRnAxSS80Q1JSXj1YPFp+M29bPWZRKmMkemNnU0hXLF1XaTcqbkpLIyNWU2hSRDZ2TXRUXmd7Lms5PjNRcGI3TXRYLzBFPzRhdzRGOkA5cCtLM1RmKGlCdG8oVDBFNjVXfm0ze3U0SnNmJTFOUzV9ZX5YQigzKWpgSHBDPyE7N005SSs/YWox''@;'; put 'put ''IiNjLyV2QVBwbDg3a2s2K2MhV2I/JTZVUGtVPTRPVU90QTxmUTJRcl57WHomUU9oXkZCaishdXRgb2Y6T3ZXc0d5Iyt9anlUVzxEbypRVz0ydz5vVEFqcl03fnRBa05wTV5Xc25GOyQhSXU/PH5JM2Rtemc2cj5OMVJLKCV2bWlyVitUU0c5OU5Qam5TMmZzaWAkS31aZD1lIldpalpMcXFyZyop''@;'; put 'put ''JWdDPzgjOjl0NlI6MGFLNXZUbjBYfSI0RnJgKyJRbSk9ekgoYk1HOnklQ2FpTWcuS35zM216bCN1MVNwKSRjPF18bX0yV3hKOjghPiJoQlZ0KkhnN11wX1BzPiJnRDMwflJ5NTdNMGZDfjVxWmxkYXtkI3UwYEEpVkUxcy9sTm4qYEIvMmVPfHNbZC9YfnJeOXNmUyRHQiJ8ZihLODt5VX4oNlc3''@;'; put 'put ''MXUsbXVeKVVaL09+W3MpXU9oUWdtdVBdWlhbUmIiIVp+I3VSfU93K3l9TFdEYUUuaT0vMGlJcFhhejdSanM9czM+a3QyVl9yX3BWN3Y9ZGtOZGMpViEwbj9gTWBgTVk2YUQ/bUFMKzBANVhQV1s7TiMqUV1jezhebEM6fWQrVVhVTyMsV0MqTSh7Y1N5M158ZHBnblg3PnlhYjs5dUQ4fnJiJmVs''@;'; put 'put ''OkB8Rz0pVEYkT3B4fnxpZjRSaGY+TGg4MndDb3gzZ2IjPGwzMXJlNjRNQFpIZEo8dmpOJn5zJmRoQEBKKzV+WnxwRVQ+NX1BKXtvVSMoJEgkI1trZSpzVXgrKWZHaWsjLkNRfDhaJFEiQUZbaGZ3L0IyNEE0KitWd09BLko5ZjBELEowfGBOTDNmc3p3QX5kJn4sbzxRcTIlTkdOWndKREJvQ3Es''@;'; put 'put ''QylqbHsmdmxDTnVOc0pPK2ElV0twe0tfOyQ4QitpUU5dN2Mzfj1bfXVDPEAqKDBWalpVTl1VezVsYlZSNmF8aD1oKSJPM3ZvJTl0ZC5WLDU3JEUsdnojUUg9Z09MQyY1d0k8I2teYXZsbjYhUGh5MSZed0d3fj4wTX1SU047JmxuO0pkfiFtTHBqaDptJml0XzYjJkpBT19VOF0xJEdONFNZW21s''@;'; put 'put ''a01tNTI2VCNTN3hFT2NEbHhic080TEA+ZndaPC4rV2dlWGdobzNQMHZEKHZqTTNpTHM8QkBUP1ErJFlecmRSXUwyNWI6eztLVF04dmh2WyQ0L3dPSjohTERRKi48PWJuVHpLWFdANnllekVJSkBeVD4uKmFJKU0lZnFIRHJrL3R8OUdaI1p4VldkXmppP1lofjRpXSM3XTtsfHlJTmthKiwqOHVx''@;'; put 'put ''RGF6YVFBNEdiOUtrUG5qODpfImIsUz9wMV01LD1WdytfUHdHRl5IMV54UkFpclZrciRBQU1VYXQwa19XInJ+d1R8eG5IKnthSUJnNUViSiQuUUMzMUhSejA/Iy9GIjciOWBKQHFSMVZkTWpBdkd3W3YmeHJsTC5CSWNmTnU9SmB0Yk1mVlhGLC4rPGVQJXtXcFFCRXphVkwyPndfc343NVpJMn01''@;'; put 'put ''a1dtKjJeNS5pQzt0P3ZFLGFDdFJLdVB9KVByV3FWfkB0UXJMJnpMQFtYdy5qJFR1dlp6UERER15VfGBRfV0ja1B+UztuNk49Z2VfUVZOTz8xbSxbPiJ+JmdYWHppYU1QWltzJSJuW3Y/TF9QeGY9byVXN3xwb2JSXi5SKFN9KGdSS1lFZjBrNXw5cWcwL2xqdi5CM3RqVTVWSitNZDpDY1ltW0tj''@;'; put 'put ''SCpgN35lJnI0Z19mUV9FejF9SCZ5c3glPGJnVlBtODdCXiU8KyVOdXxGcERYM1dnLHBbSTx6YVFjYHlMcihWeVdFPDZmVzYqTn1OOElWaHFCYk4+KkAmbkY1MHJVZV4yVTh6bmE5L0BLO2t0cnxmKGkwQztSPDhXbnMqbWlMTVA5QHEwZTE8UiJSYmR5VU1mejImXVlFbGBpPVcjfGA9fU1dJC5W''@;'; put 'put ''Y2BlUyxKfXxXWD1MJSxMbVo4PWo9dTA4ISFlZnI5NWtRRH5sdWNmYjJMSjw3YE49ZEhNLiRyKXlqSkM8ZSg1LkFUfEklWH1AIVBnUXlYOjF5dW0rO3hnVmNxPTgkZEc5eDEqUXxsZC9ZQ05HPy89aXltNS5ITEs+Vi4uOjdjdi5YSlhJUUk5ek8rQ2Z8YXs7OGxDbWVGe2VpamNedSR+Q2piWmJo''@;'; put 'put ''ZkFPQyUvLGg+UVhXRDFaWDxudnBwe31IJHJ+NGYqX3lheSZsSGplMXh+eixVdlBubFNHOy9hbkdNUGk3OztkTWMkT3JUTVozYVJKVVB7fDpQQUV+XUUyYFpiPj1lR0NOZi48MiFvKyJkNlNlXmY2VnckIlEocVllUiR0a14xL3phcyE7Zk5QQX5odiI2SF4hWVk5VXV8akBSYjwhaV58PmlwRXBf''@;'; put 'put ''blNYNjJ1RCxPOzZnOX1VcXlTcDJRUWhnTFNqcipeMG52QENeVDBTfFlbSzN2YUk+YkxPITBWVGkhQ0l3LzxAdSwhQFkxWzxDJDU9ZWtCQXdxVTRFdSoxRnB7R01GQFNBKSskLDI8S3dRb2ooQywwKjN8VWoiNiw6KkBTO00seVBgIV5JeH4oRXsoUyRDeHBmUDEmUV0sK3x0N2g0SkAiRiE1aCJy''@;'; put 'put ''RSlZXiRiV3pdZ2RRRj5Gel5LRVNNY1gwRVIyKUZRYCl4KiJLMl5tKWNCbn15Q3RSTnEvcllya0dpeSw1U1NHcysuJCZqZD5BaSxLKjxNPmNvfV0oPV4+L0ROXm5KMzcoNklvW3h8YT4+aVRUPENGOHFSWCJyW3hsL3MhKEZAU259X3RaSUx1RGpmJj05aUtSQ2VwLm4rN0VAR0ZwJjNZM2p7blhB''@;'; put 'put ''KlQuR20vO3EhbSt0SHMyeTsmL3B1dVNlY0x4X1hrQ0U3RXFgZFhNSlJHVkI+KzM5UTx7cDx6U3dOKlNEXjZmWSRYMWNRXyVoe1ZGOWM9XyVFLHJfe0IxPEo5VjAmdlpMWj1UUD1pST86ZytIdjZrRDRjRUM1RSFIdCUmK3NdQkFoN1s/R15Rdz8/R20vZCpPdiFgXlkpXl5DdFRsSTdfVn4/QnFH''@;'; put 'put ''TU58U1FJbXxPdkhCX0R3ajJ4RCE2OHI4NjlNOWNuLygzYXBCRXY4R0J9TlBtV1t2JClTRmtxL3NDNFd5LENNIXIxTHJ2M1IjYl1NVFZtb0Q3NzM8T2FLWzxBTkZEcV9IO29vcDs0ZT1dL1BPKFJNdTFGUkI9MTc2XkY0NzB1TUNXXkw+XyJ3ezFyOCxkNlFCUntLZ3pba3d0UDc1OFB4MT1JKkM6''@;'; put 'put ''OWVZfHQqMlAoPnttdiRvISlOKnp5TiN6bFl+RX5qaipmbWRIJlN7PkNnSjxePWJpREx2TXV+KTYkI0Y9eisyOj1iQzk7NHtEckYmZDJPeyl0LzoldSl4RzFAbGx0IWpgQz1eOypDRVBmSSlYfU15Mm53OnVhJGtRX2NrVX1MfUgyO0NwLE0/b11PXj5aO217fTJ4SUheKCtXTTZ5JlFeQlVJKVRT''@;'; put 'put ''XkclOkYifD5FSmNAKHNJMm05SGQhPlsxPC5SO3J6UHU5KSwoc1s/b2oqaCIkJCssZU08NnEmfnVETn1dezd4dGAjcW9oKXJLby5FdyNOZmpkRWRBRCxBUl44W2wmNSZkfT9YRWVmYW5AI1MzdEttXj5NUmwjbHBCek1pMDRxdktqaUpHVGdRMHchcEwlNW1pdWNESDkjWDJxSEgpVUJPWUcoZHla''@;'; put 'put ''fnQrV19kISMrdTw/WXFBWC4uTnkrcDEqcHdWQjY6Mjp8SVl3e1MkSjpjRCxObUtYb0BhNkhkLEdUTFdPQElgQFBLImNxMGF1NyYlazlZVHpIIXl4Vj1CP1Q/XjlDMV9bJilNUkkyMCZhUnEoUWI/MTBMRjlRODpwT3xyJENvZyZlQWh+O2pwZTo1STZTZ2oiMWkvaGkmcTdaZEQzYFNTOCY6U1F6''@;'; put 'put ''Vl1oU09CVm1xL0llYWhdU1NRbyVPczQkY2NtdWNwfS5vVDhySWw9UHpkPyxhRnFHXyl1Xz9rdl15Mz12bk84WG1ET1hBI0g8YWNpeTROZDl3dWk5I1BuN1dkezl3VEJPb0M5NC5ZJGN2Knc3T2BpL0w3ellYcnFPRiNKIzVEaEdhd0o/cEJmQX1AU2Mod2Y/Rm5WeDxMUD9sfXhLeCh3fSReMzd9''@;'; put 'put ''YjRNaUUjKi9WK0MxPDQzTkZMXTNPfFFUIWY9M0crIUJuOioqWTZ2O2Aoek5eIyRYMWY1TDZ4RHUoSW97b0pQRktVUCMha2JlNnx9YyFLN2t6e1J4S08jTDU3ZWk/X0p4fmlyQ1osaSNnUUNkS3VnUXZ6cjRnSy9iPHZFT2JoKX1YY3Ioa3VLZk1dQTk1eF1NeEhTamNpe0ohQklNdnw4bXFwWTFN''@;'; put 'put ''aTh1Y1B+TiZFSFlZT1JXaEVSSTk0SUBpdlt+KFNeSi5PNik2SW5STWRATWBFLHkkJGdKK2I9OmtSYTYyJlhVPCphdVFyTS9WdkxUemIsZX0xKn5fQkZNRXdLL19qZV4mVUk3RFc3ZVp3KEA3RFdKSCl9YzFKOWhTcCJlTVRSSGVWYTprI0QyblVMXjdAXSZPTkk7fi5kcVpdcTM9IXBKIXtYPCQ2''@;'; put 'put ''NEYkPGoxUChIJDdjZTd8V2NralpMa0VTUU48dFdqPERoKUFJeHQ6T0pYRj5wWEdufGg1Wig7Pmk2dHRbeS9HJFUpZTUhaEFWaGVEITpgckVBeUszWlFNJExxU20rUmg/ZFhwOlsjJTUpMEVdLFJTNSUjZiQlZkVqcHxQdntEPC5nZm1bRG0yZ00mTnJhMUh4PGh6WHY3TjAmUjUjQElfKGl9cT8h''@;'; put 'put ''Om5OO1RadUNUXkkjV14rSFlSWGptNiNEUE03fkpfUEorU3dCYDAvPEVrck1hRkMhZTx3RG83Y156L1Fyb0xQUTpAayJxXXdhK08uLyE/O2xkZzJNZ0ZBPlddYUVFdmRxKF9laSU+PkRFclpjIzZ0RDNsNzpVLCs5KlZjcmU4PyRpXz1jaStxZDJSWUM9JSM/YzYsNEZhOzJtL1VATF86dS5MTipr''@;'; put 'put ''SmJYVnN1a1Q+dUdqX1U0KSh0JSFqdio6Q2JKbGUoVmsyKT0rRTladiI7L1Uzb3BgSSF7QVd6bTQoPmVhVktGaGtsWypPKWVPRHE+eTdxS0l8KWVmYjtHbXdUUV9pJkB8MXBYNjI5elFXLjZbT35MUixdYiEyUzhRJF0yV3gmMCZERFB2XztTKn1bVyJgMzdaI0hpUis5SCE/YExYbll4XVZPeE41''@;'; put 'put ''VDwzKXp2OSl0fFFobE5wTjZPaSszTWsrbVNPbW4yJC4pSCNCQCojYmxuOUFJSFBEa1gkUjBYOnN+OFQmNk43VGFdQ3xgKWpNX0NRb3ptK2NuSGMrQlQ2LjJpeC5tMCNmfG5Ra149M284VjNIOnJHI0dgaXhmVjZEWUlncFR2Ojs0fjtfLnhSWywvVF1KO2FWT2RnMXtueCNSJUx9N0dQSmhHSWJL''@;'; put 'put ''Q3hkS0syfGJYdCJNK3xpRWgqckw7RjMlTVosaUlmVnRbQ0FTaFRgcDlQP15sNU9ONHVQcGB6LjB+ZTRiWXZFLCUzKDBlUGhVPTRaMkI/NzdBQCIvaUpTLE1hbWBBfk9LQ2hbRlF+NlMoZ31fWHV6WWM0YXVyTGY7YXZ4SkxETHxXJFkzaSlPcjVhNSlbQyM4Q0h3JGhjfCtJYU09SHRKRm0qS2F6''@;'; put 'put ''fUJXKiVPaVpIVDxQakE/cD1qPDdzY0A1SDVdNGMoTFNYZmEzTzdmYHApVUZJd2lJLDA2IlJxdStDP1ZSZkJbZVgqb0RxRS8vIUpEfTZyUjdfKTtFVTg4RjQ/fkZ6fHAkP0EvOWFDKyY5KExMcGFeRkxWWF5abGlddzM3OVl1Ul9TdUM0Wy5DI2pvL284ZXVwdl9QYm40MX0+c0NDNXopT2tVMGM+''@;'; put 'put ''Z0orTTZqWFJkOTF0SDVdOnMyVWROYlIuTURlemBYXmwvLGQ2JTJbQ18hUHdvZndDNWk/VUJee1JLTT4qPTxuXnUpcFVfTD1KQ2tmJkxqR201b0UkPFYyIm9jcioka2JPVjg6aCZtaFFdRVRKOkY1MFRIVGUqZ3lyQnVQe0EjLDVUbENpKChCSzhbdG0hWGU2eUxwbkIrRDFuJWtZbS5+czcjanl9''@;'; put 'put ''PCtCdEt6KnxtZz5OPiRUImxGX1ZHbW1BZFEzVGFvXmYlZCRqRjsha2lMI3QqMiQ5Pj89OUxTdUQiMm5xOXt4YD4/LE1wW1Nhb3tPQHVtciorYFQ2a1l7X0g6d3B+dG95MkA/OmYmUyE2RSJCZEBjSTJyL3hRTjpgcWg8M1BjMiEqL355STxhPDNXdW16NHYoblFpfUdHKTwiN0RARUYpLHkmazVG''@;'; put 'put ''PzVhZCo8YFY6dTlDUSw/W0F4K1IreS57ZlU6aXA9JG55eDpqPWtqJll5fGxpXkkmdCZNViNMKF96Tk5uL3xpZGYrcDB8en5pTjhSbFdHUzJtK21JRzRfeTV8UEpHPVN7SDg2fVJkenJKV0hVJVlYMHFiT2dxUE9uVDR5Wz1FfEpVVF9QeGxCRixgPjcpbW5TejpbdHY5XylCOzM2PDlQWDJjaUVx''@;'; put 'put ''a1FTfmJVcGBHVGd1QlcvaHZLT1QvX295anlXYlM0SVsyem46ZFh7LmJYZHkoNGJTT2U9R1kkP3ZRayFiaWAubjhDe2opNGkwKCtJQUszaEtPTyk0UWtiW2NXPF14OjUsPi80TDZUXWFFZE9LMyVIVyFESCt5PF5ZQEprIU1hczliUCNGbG5TZGA9M2shfjxgKTBVSHZOfHMjOjtSQiR9RSVdOzpg''@;'; put 'put ''MFthRHtMWEJCNmReJXpUPnBqUldfZVN4P3IyIkQ+MSYpfEFjczxwWVlqJX1xfXxadkwiZ1NPcF9hK29QJldgS0MwMTU0S1FvO3N9NF9Wbk5NVGI2Qik5SkN9YCttbUtCN3R4ZDhSUnQ3TnJdT2RvNSRbXjJpVDVAJG13dXYqZmQ/YGJOO15vRSV2enRQeT5XNztpOG9lI2cmYDJHaVF7THc0V0tx''@;'; put 'put ''OXtURVhmdytqZG0zZDxnV19KPz8zUGY+fjs4OnoscXNzOmprb3JzNng1IVBOST5gJStEY3B1fl45OG9FMXl+ViM9N09IKjs7VkoidzN8RGImfWUxfClqUEo4RTVmJH0uJEhJMFFzRk09Pj9DfnoyX2teUmMlLmN9NmVhQSN4VCUibnZ8czpqPiFPVXEmeUwzalUsVWBzV0pXVHQpe159KktqNXdp''@;'; put 'put ''SkJ6e0F9NitkWTQ8ZlpZfVd3VlUpO3MpJlZgXk9aX0x2en58NUxbRFc7LylWJlpVa3FATzBrejdjTGg5RiZ7ZUpwbXo/WXBkTlA4e0RFfVNwUnZ8WTNeLG9CXUU+MzoxKlRhZHh5MWxAIkBKaypBfkBnVzo8YntfKik9Y356aUpnMVphMDJmVE9LenM4Z3RCc08idm9PI3NrZm03SzZGdChPUVZv''@;'; put 'put ''dSY6LiMzWUdTbENoIj1gJX1mcXNDOmR7U0ZXYXpwdEl+UFpYUD8lJH19TlhWdXtweGRmXy9NbnRSV3AzPXFgRmlHKzNiQUdUcj9fXjs7bjJvI2siTHIqI1NLckZsVi9EcSQxNm8kK2dqfi4mK0xRNnZneVtsO1hNMiwxKDNEJH1oMXdZOWhnfD0yR1BKK3F9TVVtOCkhIXQ8RjA9cmp8VTFsKEpG''@;'; put 'put ''dUxpUEE3V2VzIThGN2MsXVV2Sjt6Zmp0fmRGZ3Z5Yi8sMWZPOmB1UV55KFhjUWQoK3tzNFMlTUZ8Y3BjUk1nSz53XVIyfDFkRkEiOzgoajJ7U0RVUkY/NlhNS0lKRT9dS0NoZUFIWkVkWXlvUDw5Sj5DTGR9N2JsdHdbYTYySzZVRUN9LGN2eXIjJF1YL3NQVUFBXnI/JiI1OCNvKUw8WXBrcjFQ''@;'; put 'put ''Z2JTdWMhR2c6cWFJX15iMWtGdHhmUGNHRytRKF5VS2QkLEdkM1dLREo1O0ZPQDQuUl4wcWcsMTxFcFdhKUZ+MHZReV0xNTRtb1p5cG12JnROaHVgaW9LTD4mJlhZWyNtZixyJDE5YXF2YEZrJmgrI3NlTlBtJWIhVXlZUzYzbXpBLzA1ZkRVV0cwZG47XXp3TW8ofnY0Um1nOENmfiVXb0hGRjsm''@;'; put 'put ''VGVNQnlgK3d9Oz5Lfj9DXmJdPUlrPHFgczB8UkY7P1VyY3NbMlNYbDlAYjU6ansyfEtiYG1sVnpMTn09aCp8eFEjRm40JnYxckJycntaSls6WlBhTEtbXlJYdUZPdj55ayk5YSxGUzldNX17Qj1rT2liIlsqRCs6M0w0UklyUVpwWj5Fb2kmV0NWOF8oYChxclV0fHkyPDYyQGl5SzlpOEF9Q3ps''@;'; put 'put ''SFNgbG4qfX5ePXxKNlFhLDRXPlF3ailoU2lTOSY7PHZKR1FILyhHUng2KFBBa0Z0bj1yVTYhSnRVSkE8di5SbGY6KStdN0o7fkd0aVpNMVo/NTZvZGQpM2x6eWI1RmRDPXVjTC58NW88Nj5LODs5YGdnbkl0RkJRYFh1dXAkRixLQ2IvSFQpY2VrNkZIT0lvdlFqa3IoWGVDamt4KCRMLjxbQWtp''@;'; put 'put ''Mmp6KjZLNldoOyo9eXpVe0VAaUx3VnNhRyMlJl1RNnwqPWg8d3dXdSwzJThGekIxcTl1UilKXWs5O1p8ITRKcTBmflhPcWR6SnBvRG8kUCxHO3QlKDY3WlBNUiFpZCtEX1RoY0submxVNDA8LzY0VHg5NlByJF95bEtqc2RURiRlZiRUKEJ1XyNAQSQ9TVF7MjFIWVUsbytyTCEhV3Q/THR1K2Ro''@;'; put 'put ''e0ZSS148Z1NxYDZ1PCEqTyxqKFAsYl5FJEshNSlHK2ROW3ZaOnkkK18iM3gyIXRVcjIxOjFJYVUzNlgwaGZSImBfRn5qU0ZpZyxlLiYkRCVDaShsSE00NSVJOyY9OCJnaHtAKU9BZkpGMDEoMWc/Q1RARCZeRlVPQ3cmaDxSeWdoPVJRXylvIkhKWk54VndWZ1NRXm1VOE5sOyQoNTJvNGx1emRC''@;'; put 'put ''Um1YK0VHM0AvNH0+VD55YF9pJl0rQWImPSNxKzU4ME9uSS9TX1d2NXR0KTNPaTxUSTIwRDZVQFAmRk97VU9OOTojZDVWJk1PaVgwZnJvbHtbYFl8bUpBaS9TMTBDSCJVMUhuJHVqZ2x9OGNpKVRwZzk1TDFzfTZTV3ZiU3R7Y3clOGZlRENZfS4mWzVMJmZUL2w5RnBveX08VGNNNS8wUkZDK3VW''@;'; put 'put ''bm55ez0zTGxnaXYmQUVkNnZddyhkUCwyKiJobTZDTVp8dXEhcWtrNjBOMmV0MVUlOkJFeS5sSjJ3USl3MzlXNygkSCR6Wm1XYD9bdl9mJjFjeHVLZ2NTamI2YUp6YV1LOWdeLmZ3QDoiP2gyd15wSyZKKH59WGszIXtlYFp2TG4/PFBHV2ghcUJKZkB+VnMoe3xELF5wRE0va31mOXRjUDl9VkAy''@;'; put 'put ''JntpKHw5V2QvTyxNN29fOm5XWXZ6ZjhRNFYqS15aMHMzMEVUQTI6ajB3KUkkem58bFE+TnQ4fGtFK0gkLlVvaHI9NkZbL0lbU310RXw+QCxgSUsqY3Uhc1dkfHg3KT46Z2ZuaFVXYHJ6fUQ7KHBXRDtUUyY3fClFYiFDKlMyZkZjS0E8Nj48LmVYRCF1dXdmIUI9QW8pST13bXBON0V5eXI9VjNH''@;'; put 'put ''YSZnJU1bPHtQa2MkPTw5bn4pTC8mYlkyZDQ0PWFqOEg4ZlJIc1ZScnZALl1yMks+WXRpbzYpInd7fE06b0JHbXpeaHxYV2o1UjUxe2BKXkxkI1BLOiZtR0dzcGhOZGNLNTlGKzVgWVEhcWlZSGApPztLImovZGAkNlB3VGJ8Q0VkU0hEOjs/L0J9JjRHT1lHK2lES3E3MmtjclpqUUxibGwyVnlp''@;'; put 'put ''fm5uNmc4In1+ezBmXWB5diZZTWFhXkFaK1I9Q15EU19faGhBbVddTzVoVXo9RzpQfV8oXVl3ImBQXiN3Ll4uaXpqOCk4KH1vN0wjRkhmdFgpKSV0WD9xdyEhYG4+SVVhNDVxVGYzekheOD82fTd3aUU7eHpdWnJHRVEsdVNPR3IoNiR0ZC9wKWtOT0pNKEIjcWFtdUR1QEcxeiRuO0xnUTFJYmI1''@;'; put 'put ''QXUxSWFsQzZHTmBWRmlBNytkTEtUd1kxI3Z7UUtZITZXO2hsbHUkLDckKXImTEQscip1RU14NTxffXUzdllYM0h7VTBWOjpjUTI+c0Q2RV5XcSUhNFk0PEF2fHFMPztEdVd7Sk5EJGtRKF13RnZWJiFqeGMzImJBdXBWbixGNDVXeHM8MS9aYV9pW0dUTCNYWl5hYVVqezoiRzJvNE17NnxQSk1I''@;'; put 'put ''fCs0dWdTMm9LYzwxL1d5bCRdP3ZGJTJMbT9RdW9DTGB9ZTdHKj01WWhZdjYkMShTeFh6LE8hVmphK0tTNH5BMS5sVV0jQ0oqQkokcFk/LzpHT0EpMCxoQmgpQCpYNStZcmt2Z1VnMGM/RzQpNUlsUXZ4UjtxRFNqTi4wRUNXNXpzbjU/UEpVPCZeQ31Aall5YllIQ3s2Int2dWZoZl9zVC5jXVEr''@;'; put 'put ''fCJtMn0hQnFeQ1JgUG9qLnl9IiVCfW8/NHpBODFQdmtgIVYjZUFZNERWMSZ3fCE9NDFweVNCWVs3TXhyR0ttV3ZQQm5WdWZQJjo4e1g8IXtfRHkpb0FLbzN5T1sjSUMrSEN7W1pKeXt3Z3NqLD8oIz1gKWlkPj5yX3ooTzkzUDssdyg6IUh7eGNfJSJGfiFQXUoyO3siKlQ8JiZ7X3UlWVsodyk1''@;'; put 'put ''ODRdYDNjMiI8YVNbd2BrIVokUGQ3Zi9dVCg7b3d6az5PXiZOMFlVV3B+YjtbR1BkV09beF9Xa1dAOiprUmpCI0R4VFEjUyY3Qzo1ZHwyN3N4aTtPS0YlRCN+S3o2SSlDdD1PRndKcz50IXd8V3kpbmVHfClebjBJTkpUayxPU3JWfixveUdYPFNNZjBDPW84ZmBObytSLEwsN1M3e1ZmaGxCRW9M''@;'; put 'put ''S0szVXxVfChMYEgmXllFRTVWSC5GWGZRcjVoW0BgPk5bSEx4ZTFxKWhwXTcsd2RIOntwQHYueT43OW5Wb148KDlQamArOXcsZF1jPTVIdD9fVy9LRWZPSDxXcyI7P3FpLyNxSHxpSl5LcnNZJjRJUmZ5azFTMjV4KE9tXUlfNlNlSmJROlFUQSgmTExGcHFRLjcjK0QyJF1OUk85NV12YFRvOTw4''@;'; put 'put ''KlAyZENIO1Z+bn5OPn08eDdKP3hZOl1UIVlhPmgoPzlGb31BV2BzVzFqWV87M1tgKlBgeFJHcXdCd19yZEt4KXNXc0FrP2dzK0QkPDlsd3NWQFtkS21pJkNefkZYOjxYdE5qZV5JeTBBSSt8ZzZXMCFyL1pVK1FgV1hWInsuYUZaP3VjPWZUMSxTbVFdbj9xQixEfCJ7diUqcTUmS1RQRHB0TE9f''@;'; put 'put ''QG00YyorVHciImZxSDQ5ZDdOZ3p4fUp+MC5jejdoJT4mdl05ZjtbO3tFZil3UGE1UWI+KDRYKjRgYS4+NjR9eFdZWSpgQ05TOSo1Y1l5UWtiKCx0YEY6Z0tpMTs2REtVOWRfbDhVZlkmT0dbVkZdSjZOKXx6SyJteEFVe21EJXAyKkleI0thYDZrKE14QHBEbnp4P3V8dEc5RlFNWG9OaGhGPWVv''@;'; put 'put ''ZTp9RjZ5Yk85cEBxcH4rckVsUStTfEBtYkVmNVhlTCh8Vy8sMz5CN1FvdUZBQmBGJWBTWkRpVzVubGxWfmosPC8sOXBCfEZZUDJkcCNNcUh9dGkrRH1lOlkjU1E7Y294XV08YC97N094fCFCOmhZLjZgT3pDeUN6Lj9aW1FnRHoiRnx0fjN3UE9oRk91MnRLJnNJclIxMlg9JDJYb0IoOztZaVYx''@;'; put 'put ''MmtDYi9pJCVOZDt7ZzQqMz00YjpIOU16PDBxZD1JaE1kZHlbaCNMX2pFIXNjRCxbPjBYSj4ocEs8OHdPVzxoU3A4ZWh+NWdDZn1iIiFjSm1feSJieGZzbX5DWmg7QTJNJEJHcntHeX5YIy5sVncmeUIrbn41V3Nna3ZuRUYoWmFvNys1QHc9TjA5e2B8YT8iYSxpQnphajBZUkw3UGtEZTMkPnlR''@;'; put 'put ''MDcsKkwvbX5AdF58ckojTkspUmczZzw/QylqP35ZS3ZxdixubkJxfTtaYVlDXmZVZkY/ZihBTU5nQixpVnBDZG91SnQ5eEA7S3FEKTRjT0xHdEdDZlU/Umd1OyYwMjxgRVB4ajB7QHNRa3YwQlBmV2oqIVIhMEcwInByJlBLYz5ePUFtVFpwZmxWcWtsajdoXkFRKzR6LjFgNV0uLktsfk4uSUFA''@;'; put 'put ''PD1rYHclakJbU2tfWnJ+LyU3W3RKbHVTXUZ2WG5uR0ApYWooaWN7OV8+PjUpcm1AQGV6NShIU3N7PGdjSWgmIzQuM1c1IzZgX0t9QzE/bCFHdWZxNURXcGt0b2tGKV1qYkwhPHFBZzAwKTNDdVR9dSRHbix4SDJANDRsYXo3MkhvU0wiNmVbW3p6bm0xRXMvZSpQQjQzRThYTE92XzI9fVlSMFB7''@;'; put 'put ''YFQoak9fbDBbXyFdSWw/V2YrKkBsPiw5VEhkVSsraG53SilbLmNQOml7UiNlKzlKWElqSUVLe1hDS2xedmU/a0plZjc0eitVPGpnVHg+ZlooaHFZX15vYC5Ia1Z1I1cxMkhyXVgzeCopZkE6UzFIck5ESW9xNyxJPC5teTJMW1pMIiU7Wm80LiJ5S0BnXVtCOjV6ancyW3luRiNjcWt0VFgvYGVj''@;'; put 'put ''aFgxUiFtQSpmRUlFQGNrNk9qVT1KJX0pLHM7anZ8KE8uO1h5WSImX10rM3VRUjwkUj4/VXVKeipPLDx2anpIWSljJD9CLH4iWShdYWFRNUUoMTdGey51UGFscjxiKEwxTSZ+UXQqL31wSGQ/KW89Xz9OZllCIi4zRFp5cmEuel9pe3coeCF6RyRCa0U+LHJEd1t6YENjQGpyaXlKT0p8T3RmQTVu''@;'; put 'put ''cFd5eDZXTHc+TktVMCZ1VX1afFVTVVlCPSNnKWhBN0lbPiZSZlpnaWhMbjd+L2ZHTSswKkplQS4wQU5AVHJ6NXpKaVFEZVE3ZmxKRW1XQkllanJWMztaJTUrTzdeYWZKdExaQjBZREk1RnNTZn44NWIxJVB2KUF0b15hQSNhNEdmR1Fea2IrQEgxNE8oK3UyQmY8TDdFVEJOWWU9YjFtQ01bejtO''@;'; put 'put ''WTcjSEhsKDhfXVVASEEkNWB1czwqVlV1YlhJYl94NU1qSy9dcEkyZVhgS18hOnkqNk14UGdoe1liazNsfS5PRjp1amVyYHMvNkYvcyUvNTJmdCE/bXddNj80K1BRNXluPDd7YkcoTmw4LmRXcSEpYiRDbzsqZik4bTdpTlQufXUjWVRIcn1sYz13e3U5N0VGQVVeL1hvPTZeU08pKyk/KXNhM304''@;'; put 'put ''YjM8KH15InFoc3VUeWZkdGAvI3xGNTVDYVRIRlExc11rKHReM2VofXFUUlkkQj4wPH43Wi5tQmp0QEImWWBhVDN+VmAxc3w1KWBDIywrbT42YjYrZjZ8SzpgMm8yXnFfXVRTJW00NGh6Pk9fMntaNWMrcnxiNmROZVkxMkRbM3c7cVVdbTorWiNjc291ckI+MEYiPUAzc0ZSOk0qNHQjZzlRZDwj''@;'; put 'put ''SnV2MzYrMikxaC5WNV4kUTcrV0QyVWs+OnlEdkBmcSJMay9jNV9SdX5nTXUpKThdX09Ea2BXMEBzaihwMz8zQVRbMWJXX1psKXFCOClbYF8mJHtrPTZNIUo/eT9FJF4jKjRZMm07ZU4zM14yYlFONFJhR3FfUz1zJl9hX0JnP2ckLHc0OypgSyo6LHtpJms4NWxMa2dkaCZsWGUoJTRHKFp2bWl6''@;'; put 'put ''eU1VblRpYnxRJDA7eE1KY0ZEQSUoZnkuM3RrV3pSMkByLG50XXMmRWJiQn5sd3NrR2pxdUcha3tveGZhaUNtUHxgQ3tAKik6JE4vV2ZfUFhgS0JUXVIvXTtYTDlnWixvImNEMEU0IzxlQjN+NCtVfD9jbGlsXUFgS1FMRyVzWEglMEshNHlaPCllbCN5T2ckXlsjMm1uI0Z8ajl+JVhNR0h3diYq''@;'; put 'put ''eDkiSG9jKSx9S0dmfmlLISJLUys0RU92TmM3fEp2PGY4aDJjQnE4KT9ja190YGt4R0tJNy5SSF8se0V1fjFKMkpST2pkX1syV0dJWig/dGVPNnBpd0xjXWUvWWluJGtTSE9YTiReY0NkU3t7VFRDdTBLfEwiQEMhM2VgOXEsOmhidCUva09QLjpfQ2AmVShhJStkUWZ2NDl8Yzd6ckk4V2ZVIysm''@;'; put 'put ''QEI0NHcsekdtMGksQVJuKy5tOEBSTT9QIl8pYXBYaGAhfHA5RHRBUWYuSW0iQ2MsW0NrTEs+a1paKEZ8cFBISW0wLkYuV29nUlguITo9TUV2JkJkSlQ5em04QmhKUGtpTCYjej5GZiYyUHhnV1lrIWw+VXFpTmNmfEdVI1hJcDJOVDNmIiQ7PSJAd0VKLC46PH1rYFszI1NsJC9QWTdBSFRTIn0w''@;'; put 'put ''XlBQKVBLN2t8L3EkclBrbD1lcjhHeTBfNTltaFtAMGtqZ0xDK3RqOH5vVkZFM3VOcWJtTGZHLDAqSWcxb19tL3JDbUJBImBQaFFQK0xWPykoYyNub21nV21vVHlKMjs5bk5POUBKV3J0Qmk6d255ayp5SEg8UCspeHY7SWxTY1E0TUI5fWpTaylAZHhEdFdSaDhda0NdTVF7ZyhxKl44TnJnTSkk''@;'; put 'put ''bDNDZGc+bEdXdiU7Ljg7PD8mejR6XnxXbzBpLGdseXxea35wVGxLfj1zJCM8T3F5N09gR3JPeEBMN25IVGlERiU4PSpZKCRqdGJFKU81ayU5e21xMytdc0VIc1sjb1AiZSthX1NtOEBlYGchfElyQzMrZXhrfSpqZTxiXW9wQl9CPj4kaWt1czgyISteSklNZCFnITgvYzgyaT88Yn5ibTQybUYh''@;'; put 'put ''N0d+dmlLcClje3VrellYS29SIXx2dC5vZixXNkdXY309WX1LXk1CKy95PTxPX2NOc30jLmUwdihgLyJnWWNgYHtbdHhqX3RvemdXX3hGQlN4KmFMYk8laEVrZT9SO2YjeHs2W2xyPk52RWFUYE1CNzZnMmRdfFJAMyJhODI9fW9URWUkZXhoN35wMGhhd1tOZURsZzhoJC93U3hVKFQ2ZzZta2Nu''@;'; put 'put ''YXczczM4LmlYLEF5KjZ2SktkNGxYIipEQCQ0ZkJuTj12KDlffFUrMSoybEFLU3IoK0E3KUtTcEp8PVdpdkc3d0VPJWkjKX1xZ3hUemBibTtaZE8pS3xYblgzIWdhQlp2O1IyVSRuaUcqfVVwWilfaklVbFNYZyFKdi5AUG8kM15rcG5jYlRuJFVEcHhwYn02YzZOYzIuVWJvOjslNmJ9PTwjVShp''@;'; put 'put ''TXlvdHJ8bGI3YkpbaD8xQCNrMiMzQS98V3dEe2M2aWR1IVY5d0hhe28zLzJsRlI1JCVFWkNsVTx9e21bMWdXeWtFckkzSXt0T3hvam1YNypzNzJMRmk8ekRsUUlhQS5IKEpPO2pXMkVPYGs1ej4iKyk0Q1M+MHY4KmlOLCt6e1s9V349NENvKmJWMjkhb1JkOyNnS3UscypQPW9EUkNfdEt3MUJT''@;'; put 'put ''b3MjKWk2YmlOImJ8O2k0QnBDVihgTV1jWF1IZ35EQ3pCaFRQJitHKjdCZ1FyZ1Nze0QjbGpIT2dfQEBRYjxHYlV1QzldfEheSWhWei9baTM/eGYmbXMvMFNqOGwuPGV0andpZF5gPmI/NUZCRz1CPSRUd3ArKDNgbDR5YUNyZV8pVEgoUVo8KW4leVtaIVJVajlDM3gwTXcrdl9FKU1kdHlpVTFY''@;'; put 'put ''fTkoOzopc3llJixII0s8Ml9ZT2NyVyRyb1RaLmAxRHpvdWlBJnRdP098OT5ycnpsNkB6I2gwbU9vfVZxSV5VfFUpfkcrfTxPNkk9XTR0Ulh+X3gjQGQyc1RRcnNYPjIse2ZwaX5bVj9KdFpiXkJTciQ3dHlnWyh3P2hoPypsaD1FamxfV007UmJpeE9HME4hNCE0MU4hdCwzW0sudCpOQDFiWFY4''@;'; put 'put ''WHsrdSxwaFowbT1Eam9fVlQ5ZUVQOWx5XVYzYDdeKnhmJm5+Y2UhaUEjIWJ+SEtTXmZvLiNmNisqfFoxQzpvPF1WRmpaQTZYZz15OHhpOShNM3VDd0U8Yj5VYTg/XTVJS1A9OThTJllUYlQrbE54VjhaL0szeTE8K3p+Jn4kVHtCeTVtKV51NkVIZk4mV2J5I2h0TzNLITVDPSUoPGszfkApNXNY''@;'; put 'put ''TkB7QDNZNCQ8UjNee0o4a35GRU9YJC4mb0whYHt0aUhkJjxiMW5maWxpREcydU9pJGB7MyZ7Xlh9aEJ+byF6TjI3cjBJLktgNHlXazRzeDxzfX5OYD1+MW1BYGorUk9tW1lfQHpRUGorUk9bKWlLJDdzaDE/QyRJTzRbSUNVdHtJI3JjUTR2TlFOSnlTVlJCelBlNyZ7PkB4Nmw1Szx9UyVJfW0s''@;'; put 'put ''KlAvenwwJHhtV2d4cC44PHJGUHdzSnkwJHRTNEhRS0RXRDR5RjIyKF9vYmlOW342cDxrNHFSd0AqR1FebTplS2tlSld9a34mK3IsSGVMc1MzMiR7KD5FOntpWjFSTGk3ZyooWVFXLEsqSj9RK3U+PGEpYVM0Q2Ywe1N+U0hQYSQ+OV1CY3FMODNlXX4ufEhWPEVOfkxTfUorQStzJCJIT3pyaztG''@;'; put 'put ''STFgYlRlXVZrRiVufjV8PTJjOHdWWU5uXVNjInxCLiNwSDk6SHp1JGVHKmdsc1tSM19yb3l+Ymp3by5pQ3BhUkpGOzU1VSExNkFERS5XNksoallDJFB4fSl7KzIwO3oqandAXyViYitfLzZEW3dKXUZnPUFrLyFnXmh7Uj06bWh7aUpEODJZTVZVa3chJlFRPUFeOmIrUVNjNTM4NyJUeVt1ajVd''@;'; put 'put ''PytDanZqUF9BVHA7NnYoX0pVLkNJWldpXlkkVjB6YlpNY1JfY0RWWDVKOyUrbEt8Tl9YMTB8LF08K0oqN35aWjkkeSN5I0MsKm84YURddl4+cyNJS1lsOUdFZUxoO2J8ejxYJEN8T0VDcyxbeUxfXUJNcyxlKU5ha3ZtRjBKWFl4OlEoSChfXmgkLHs9PFsmUUNTJFc2eDBZNF1uW0tFZTZmKzVP''@;'; put 'put ''ezhKdnsiPFhFNmV2eXxMJkpWRGFXX2ZgeVgmIz54JmtyVVJ8PltXLC89TW5aOVJLRjglJl5KY2RgZy9HU31LOFhHVSJSO2FMWWRuTVNANSxZMXwoaWh4PHdZIzBJaGVDZTQ1SFZ0eVQ6QzpnbW52I3hZKSFedzIoP0VjQFZoSVVHUlEiSVQvanRoMytvbUJLeGMrNm5hZFl9N3dOTyEoT3chS0w7''@;'; put 'put ''UyQ1XlVdPC89N15YVXNAciMzYytqKXNDWy88cnduOVRRMXp3NjVoTElFcFcrcS9MZT1YblU9ZGJJYVRdOWI3YSQ+KDcxUWwsPntzWkFTZHVwOWY6KmpiJDxeNC5kTntvPH4pc3gsJSFUekNUb0FASXkmbltwQE43aypuOVBuUEp4SG8jT103NShsV0NIWCVtR0hKVE5oKytOe0p9TC9SPVYqcEhf''@;'; put 'put ''Rk59eEh9YCMuYHJMYn0vRWxmJDBMczpFOTlLOW12OiRWOTJxQC8jNzh3WypVSnc3TTN5RDllYnEkO34vOzwzUWVlMnVGWHcrfXIzd19CY1FzVjxLTi9eYGVbT3g/dmtfNztfOi9TJXpbbFBBW2JnfWtTWnwxWVJfVl5OSWVNOTlJeDpCY1gpOkU8ZVhYMn1KQGM/cmprc1JxIkNeKWh5T3k4XyN9''@;'; put 'put ''XXlVW31pelZgbnhYPGRxKytydXhCcUpgV0YhPmNzIUBpO3x5TE0/cDomcysjcmQrKXMpQGVZY0drR2QxQj0ldnU8VnJba1ZjY15HUnRsRHddbzV7TiMsSUJmUWRRTU5nUGFee1JeZzxYNDZLdi99fCM/eGElPF1bejY2NXZ5PWFCfnRAN2FTNGJxdFUwTCg9cXIsV2klei8rYkZsZTc7Y09maDE0''@;'; put 'put ''XXBbWV5kIWNUWDpOI2QxeyNoa3pZKT5ldVpjWTQpaTYoXzlbdF5FPStzWD52L0ZJT05TWFVYa31Qe093ekBQYT1FN0RdQXFCJjJmRkRrUUFYfmduUz8mejJMVTNTJmoqSWF5OTBNfjY/O19BXmlYVWh7MHF3QnFUXXhHK1hlZz9GPSs3YV41eSQuVHY+RyNzQ3YqYWk+S1BMWzoqZGlUbThfODww''@;'; put 'put ''SipjLlp3ayxeWi4qNE1JMU0yVFU+WlVsV1pMajJaQk4kWnIlW2lPJCh1WmdBaGtBZH0qR35EN25vUm4sY1U+MUhjc3MhNEpRIXtxLGBuXytVanxJWG9ARz0wJFc3ZjoqQCpuaSwqfl8ibiFVUlU4LjFkSzFxIzU7YzcwdCI2Kn07enVCSXRMcng2YltlclN7bSZCNVVJPURbMTthRkVlKiFsZlEi''@;'; put 'put ''WStha29ZKSheZTQ7R2g0TSNbelJMSkVNVV5gMHBIT3c+fTJ2cTVeb3NaXVR3fVEvcj8xZyZJMDg7XTAvOktQZndFTCxFSTczKVYlWTBLNV1gQFZnVFdoSENmUDN+Y1FgUm5rKldBZE9aJXdARkgzeyJqZCIrd2JXbzZJPWkzI0ZYZlNdUnQ0dlBYRVJrLk1ePFshSzFKWT5YQUc6QChubkw4bkBg''@;'; put 'put ''WTcwKlEhfT9TezJjSW8pSm94Old1NzJCJm1POFRZWGtEMmlVMSZHNnR6SVV1blR3eWxFVXVuN2tCZmA0Rj99eSNuNyVPPnIuISlSSGtNUGVjS3AuSExaVDEleGUwMiNhYERhI1s/d3hEfjR2RFI7RTBDUEpKWH4kbHQ4aUtKUn5FTz5iPTNfM2tbcT0lbTFiX2x+NFU0QWx4Vip1SSg7WEhPSiZP''@;'; put 'put ''ajRVPWRXU1tfLnUyazJZK0JLMnEjLHp4NjhTRmEqfSlkPWU7Om9ZfVJCMkIuQWtBU1klIVhYazZSMGZ2ZnphW0hrWUpVbFNnUnwyVDIhMVlrTHlRbzprcGs2a2VDdysoSyJwQiZCPk9YK3VQWlYrKG56b1FYK3VoOFoxKG84Z21adSR4di87RGxtbCZiOCp0SylCbGAkfCVfdHdefmI6NWEvOE1Y''@;'; put 'put ''a3l+N2RnMCZCYVtzK1N0MCV3JGVxaCMlP11ELHpzbG9CJkI+Ql9BcUImUUZRczA5I0VWPWI8eStfJGI3OTFaUkhHPV9GWmtlOUZGMzlJYU9eVEZOU1B+I1lrfkUkeks7Vm9UNWVKejV8THlne2RPRFlDcm4hWWtlJWsiKVJ9bW95c3cuXk5Za2JDMGYlV05aW0hqej1TakA1LyxuZlZKVWEoWWtN''@;'; put 'put ''ai5HKHJvak5MNTw3PShuUyhKXzVWeyoyenIxeEhGOSpzMGw2JkV9bXYlKUA8fThFfVBzZntTNFMrXjBbd3ZkP1hxcXh+YyFkSCMwOktmfntPen59ZGYmIWtTNHthenk7TW1lLFBLNXMvNWs4c20+MX5EIyElR3NjdS9TTkVRKFU+ImZxb1NoRmpaNVg6Umw0aVdffC4wSSR6VnteUjZJZjF8VF5d''@;'; put 'put ''YHFTOUNyRCN0PipKOUckXi9IVD1WKmNZTm9VYX5jbVR4dnd+KmgsbSw5OU1pVWZCeSZzeTNsd0ojK2VWWkVVYHQ2RjtUaUpkUEAje281RH5jK01dJUtiMHN8cXlRSjBCKj1wWn1NY1VoQDZNPyM5PG1raWZ6NFNhV3tNbnhkUzk1MWw2eE4udStQQHZVTSVQLjU3MnZ+QjEldUZrODkoPn5zS1Zn''@;'; put 'put ''WE4kfXwjcy8sSFtbMldaK0w+bTk2VHIwfmFUd0MkXkxaejppV0h7anNIe0Q8Sy9mOHEiUSRQPE1hSH0zYClWU0RaXyM/SjJfTXNkXmJZKDQzPE92OWo6I05aXWg/I05pbldoP3U4M01PekVxWyUrdiRIJjA+cyZ5d0F8WiVFczU6Vl4jXVkoeWx6XU50YFV5bEc1I11WMm5KRDguMUEsRyw0NSVF''@;'; put 'put ''WHxhTEpPRn5MLjJFUnQ4TWo9XiMjb0wyWE8rOCRGUnRNQGp+Ky8lbSt8eWtAKGgiJlBoTGkiOiI6NTIxYlR4VCs4fD5qfjIiI0F7Yjs4T2tXYktjUFNAfWFwMShII2B1cEBrTE1keS42Z2kxeWNvOzk1M3VgVCNoZEApc2YvU3chJG1+YiN8bkdPQUZbakV2SiVQa1FIZ1ZKKEhjeDNDbkY3NCx8''@;'; put 'put ''M0lFMU18Kn1GPEtPM2kodzspc1heVl43JmI7cyZjXUN4P2pKWUQwQF9GL1JQalNwK2xHRjVBK11oJUt6aThrT159N09daTM0LCxIZ2wvI3ZvRl5GQDw+dnM2LGZwYXY6RkNDZHVQMjtbcjwjLjB7KjImVHssZmxLTXFnRFIzTnE9Sm9LTSNlbzpnVGRHe1c3SUZefCk8L1ZpcFhwMnhHUjVdX15x''@;'; put 'put ''Sj95bXNqWykjcHAwYztifEI6aXV5WUJXZjY+NjwxR1o6MCg4WnpPWjsuMW1rTlloMzZzcDAiTiM3LyUqMiliW1E9L2pNa19iT0pZOFp6VCs9fTx6PFJIZ0BhfnEodksjXy48JnBRfkI2YWg5eSErZFJmTC5GYy42N0l5MW1Heih7fGg1eyV5T31POVYwYl9OXSx3MjtuNXFOIWQwSXtAT0JCNlQh''@;'; put 'put ''LyhYX0w6T1lbKSxHXiVLP3JsRkR1YyF3VkpUbmw6ZHc6bn5WbGV9XWlKcyxOWTA+ZnZDUyVuZn1hWz9haTxGVyl3fk9gKE9mIXA/L0dKUitEX1BYaj48NXgieDQxfTB9aiJ0OEVLSFBmUWJ5WWYxWW1bKklaciNOKVJ9JTlUYnUrRXU6KnVAeHA5YStQUUNmMmtSfjJrZVYmUmY8VS5QdTwwN3Rx''@;'; put 'put ''fHVJOD87RkVoW15lKTRyLEc3PiMjYkVVKnkxZnEraWBYKDBSR2toe24+SXswWjlTaW16bl42Rjg5clZTZFNiRkg3SUVaaSh9eXdyUVVYfU5bOy5BZl0kP21oU0RGfkd2ZlRneCExb3Y+KlcyeyRbbk5lSHc2LzZqZ1duUStvM0BKL0t4NF0wLzchUV9RV1ZHS2pibzV2a2UzZlM8U2ZSWEIqbCxG''@;'; put 'put ''TXxYIXFZOm1zXjJWOUl7Y3c+IWF9VklTZkpFNm5KNFRJNUklUDIsWTIzODA2QmEsIyZ8XyYyQ1doO3V9Xm9AVCh0WWc9Mml0e2YuYD9IO2IoNiU4MHZTXWZLL2plLG90ez5feWBQa1pLeyQrJi5GSCUkQGdgcDJWXVY5RG8kfDNMRnx5Vm5lL1ApLzNoNSRUZFRfTWRWXWlDITM/TX0iYzRwVVN1''@;'; put 'put ''VSg6SVdPI10rMGVFbkVOeHhASjhtRlVsb21TPFkwWyJlfXxqNXpZcCZvdklqIih3RDQjNS5ARFImQUZ9Xn1iPF5QYV4rdzw6eiVIWVM1KU9RclRsanc5ZXBAVGVnOX0rcyokc1pidCw1fTRyaHt3T1AhLm1wLCNqMi9zUTc0WTBjd2I6Yy5fSWFFT3ZvLCVqQjJ9OGMsMCpXIzhAbWAhcXxeTGhL''@;'; put 'put ''dEZtdnBqMFQxWT1+ZE54KilkJWpUYmtRMEs0bSNQVEhTaTdzKEY3YjpiUjJJX1pxKjg1TFgmK0xFaHtoQExKIkVTWjV3NyRhNmI2JjNQXTshQ3w2PkU0MGJBNyR7SEVAVkBsRlBQLmU4Si4pVlN8byZ1LmZ+K1I3QFVXcTNzSmt4Tlc7a19IMj5XXnxrKlhiLlg1fXRUPDspYTpZcE5tSnJ0VzY1''@;'; put 'put ''Izp2Zio4SGs3Ji94TmsiMilQbndJLHk6SXJ7VDdLLCpdSk9sMCxRNSx3eDojd3tHUU9ZMnQ6KFs8RTxfOXZdUSgwX3hTZik0QUEmSFJPfSJYcGExYGJEa04jcSlmQiJdWnhNYldrMio7VjNiWUZOI14/Ilc9ZyljbDpSTz5oU1g+fkdPbVdjeEpjZCs8Z0R2bSN9dy92fCFPXWt4TDp5Mm1RemtA''@;'; put 'put ''Kyk+VG8iIUhsQFNPfmh9RSlXakpIWkxscGszSD9oQVM5VTJ1JGs9ckB5NWlUJiZJXnFfPGwwOU8/SVB6PkkoW3VKUUc3SUtpZkx+W1kmX0VqMz8wfCIsO0Z4e0U7Ti9RUDtlWUldWXZxQURTSG44bS9lXlppMlg9ZTMkUGFmbmsiTDlFMiosTklGIVFtQm5ZU107QVJDeHBdY1NgTHtER0NLaGJg''@;'; put 'put ''b3xVWC5rcSolYSpDQXpvYUo4Kks9aiNha3VLez9+XUBQZXgmU1dednE+bytbcDwlfkFyaWh+RWM0IWVONU5TfkZTKXllJlg3dGQoMDlaMEhvZUltK2U9NV52bn5PVilRT1lDbEQmdGQpT0k1Ujx5cUNOdGM6RjxyaEw6TFU5blhifE9FXThEKC5nSjBWY0B+LztUMD5sYF1dQ31TTmgrK2Y4RiVH''@;'; put 'put ''ZD0pV3pncCtsTzBUVmFfRWVGVlpmU21PcWNPUmZVVEUkUzNMbHV+c3s2fDc+dWoxITpXOFNSTERke29VUWU4cGgxUS9pSSUjUiglazB8MTF4aXwxTGtRKmVRYTB+eS5MI3JYU0dZayMrSW9AeV18LnxePzhATCNJWXEuOFNuNSV5NHUheVJIWWsreFFAP25jdn0pXkB1cFY0QTdnUEtQVz03QEVk''@;'; put 'put ''VWp8S3ZQPlliYEZ8S0cyMC95MCtJZHBYJGk8WCppQjBrYSRNfHc1dWlqUU00WkpvM2xEJkEwXWl7MUc9WmZOPlJSbSFfOUdeMzY6cGoqIUouY0F+QXJNVDI1YSxaZjwqLkRFQ3tlJnFXWnEuQ0FsJUs0dGlVY2wvdDEmbXwwPnJdY1BoQ1o3SjxaN0o5e2oyP2VRel8qMVEsaXFocioyWTY3THJk''@;'; put 'put ''IXs0UTtzMnQjLjFwZCJ1SFN2JnpgQEIxbzpdZzlQRm5LbDU2eywrZltYe1k0dDwpUj1ibiVhNiEyVy5mRThpdVFYfSZzclNEJmUhNCtqV197YnAidkB1PVEkMkRkISwjbypSfFRuTiZteGNkSEdROm9WcmBvdSQiO0I2TFBqV1ZNU3VFIl4vOFl6eV9banouOEZMfnkwe0V9SFRpPTlsJmpualR0''@;'; put 'put ''QmdUTioyODE0ZTp4fVpwdEMkc29qZ1E0KlhLL040bThKPFVgNUlJRHA6WTVQfW14Izl2ZmtlVTIjciRVRE1VKSMvMC9ae3NSdHpQaDR7fiwlTXo6dn14WWJhbXRIaEtxRkVjUWZEPltramlXfjNoclM0ITZ6e2B7Xks7ZURbfWVfdlcrbGciWXlXZ2BNMCI/OmpMRnclRjUlaTZNPkokSD1APDgz''@;'; put 'put ''JVYwS20+WU4qV09VSGg+TUU6X1VwWzI/eWAuNTxITkQkZll6bj5ZTn5AfDZvSmI7VCImLkVrLztATip4PTxuVlldXm45UDMzejFwa2F9aWEzOURiM3VHeyh9VVRqTXpnYVN9QUBiVyRkN1N+PXFLeUprKFZqb0dWNDt9Qlo8MDlZcFpAXmU/MiZhOlJFOl8pOkwjRXU0akVFQDZ8QCY2NixqLndL''@;'; put 'put ''Mj4hUEgjLGJad3RAZXdLcH0rWWA7M1QkNjpGXUJ8a1laaDJKTXBAb29qOFZsWylZbGlaW3RaamNJUyV3QGlEWmgxdUc+WClNWSRXeVFSdj11bWIkZUBnLiVJWFMxIWFUVCQ1fSkuW2E5WXpWY15QaSEuamozQmwmMXUvRmdpKl1MfEUye3V5cERGOjh5R2d9Zn5bSlQ/LipFSD5AdVpKVWU9XXMx''@;'; put 'put ''cHlIW2NeKU06X2N2bEhSaTh6O149UyVCUXlQU147fnsyMDt+dFQ6Mkd0KSswODNteHBvZnRPb0BUJGJFfll5YkA6cH0hdFMobkMsNWdMSDJGd2ZVL2xKJi9YW35raCJicmA3dklwLEM1TlIwN0MlVStpT08kMSY+aEBwJVdjOT5zL0c5eDdAeFJsbmp+KjhTdDY3V1tJSj99LC9QOSMqSDByY2M0''@;'; put 'put ''Xz1KLzAvKnU4c2xofjMre0lfNXxkaH03VTRTXVI4JnIkI3wqfXFIaFI2PD9scDFlPH17ZyV9QDdCVFQmVCVyVEk0M21zRm5zREBfbXFeb2h6YFQmYTFaR3ZtRyNNJEU5VSgvKSg8d11DKEhsWFhAWlAsVDhQbTw1a0Jbe199LjBPKnd6UiNNSCsuRUhsN2JzIyw7Uit1JDl6WyhaKFh0fi93bDZB''@;'; put 'put ''PEJ6dkRweUsmP0csdXZxRWNUWCxUZXpJPUFWbXlUPStHSlJPXlR8dGojJm48Kn1RdDJCczQ+Qi4oTXZhS1MiVjE8SkQiI0EiP1tpRTQ+Kik4Tk5XLmBEOHMre1c0Y2QzdGkoSkAyR2N2TjZfNnkwMVAvczl8ejRyXkp8ZGg/eHdeOVk3Sl0ocj9rKGl4YH5hNEtwSjFZaSNJaFhTMVtHdiVlY106''@;'; put 'put ''X0E3eypSJko7fF59d25jdzNgYFpvdnxWIjNWS0k1bSYlM0IidCEvcX41VXVXKG9bT354aEJvOTlDXnp5Q15+aTlPRmhKKm4uWVsvZ298aldXYFZ1XWpMeylzdn5iYGQkdUlfY31Se2p8VH1SQjJCLlM+aiY4fE5yb09EU1V2eStGWkNYWEJfWFlpYTNVIV5VKm5ifiIxQFUiWUxEZEdAVCM3a0wx''@;'; put 'put ''eklOYmVUY11mSnI4O11NVX5Kb15PO3tJVkZ2Z0RRamVjRmN6Li4paEA5cERVMWRUS284Uk0zTGFHU2g2L0txXnZ0W2N4dVt3YFBeNDI+OVN0THk2L1IqKUssdWFnUjlzU1ZYMj5+OmpzL3sjViMqYHA5e1dfUy5vI1BxQVZzT2JrdTJhPmBgRVM0aWklOz0ia3dsPz19fGhXT2IxNk40MTZiOl1T''@;'; put 'put ''RVdreWR0SClPUWRlNFghLD57N05PIyRiMTJueSEkdywkdWgwZjJ1Qz58ey5TM0pYeFhJVFkpK0ksIWU7fmVrXlJCVT0hdUlsMngpc0BVQX5mVyhCbCghZHF5ciR+TXFXXT0lPDVWIUQ8fSJpIkNrIXlaLHVoIWxuLD1WPjk/OlZXWCFIdkc6QEFdaDUrdCEySXJWMSFUbyQ6R0ZKLzlQe1dqc3su''@;'; put 'put ''cihdYWIzUlpDSWJMSW55LkNCYXlDYSp6eGcoQjxwM1p+VjIxI1VTZFNQQlpAaEYkeW12ZFNufFlXPU8xW0xoJiFLak9eLCZeWWFibXZiPD9ZWCp7O0ovdGUmNU9sYzU+elV4ZG1MOFMyLC5ycF5sbEllTShfaEVhSVkyM2U9Y0NQJHg5ZX5VcXdaY3pKZmc4MmAuXTM4bnt4NkAsXV45JC8hV3k5''@;'; put 'put ''TGoxZUI2RmsrQFlEdHxDcXlZSEVqVX1jMStJS1tLN35WNlJVZHFDMzVremZJUUlQXXZqL28kXlkyIyU2YHcjbStzRmROLEpxbj90S2F0aFVLWmBmPEVPdnppKGsob0djQCUjTWJHaE9FR0ZKOXhaRyReJmozPUxMIkowdndIdFs6Z3o4Rz5hNDJffGQ0clh0fjZ4ISxVODIvYnE/MU9bT2YqMnx9''@;'; put 'put ''LjIsemEjVlRIYXBfWSt1JT1POnp3VVNmYU1+OkJWWF4xQE5jN0V9ZFNleHtmYFUzLz9MX2tSNDhjLiI0MFFKSHclcX5iNUdeKntbdEdNMk5wUENnLGkjYU1WRmU3Pn1fc005PykhdkFTPmpXO0MyYH1UW0hkdT08MEJKd2l6dEdXSFghNGlVSUBdcHt7ND1yJiJePF9KYX0lTiNfJk5+I1c/YGxQ''@;'; put 'put ''bXdNK0VHNV1PVD9fP1NaNEQpZDF7Jl5CWD5xODlzSnNtKjxKZj0lX1k0elRrRj9TM0hRZSIoL09Ue0hQfERTM0Mve0w6eEZzZEtAYF95Okk2WylRPVttc2gvNm5mUDxKdj1HTyV8c1h+SVcwOiNnTXokdkZeb0slOXZJaT0pODohW1VyQ3d0VFc1UXtWUCZ8YU1vQFBoRzslUktsalMwRzZEQTo+''@;'; put 'put ''eVNRalV8MjlGVyl6di9GVlhdQztpP1hdQzRMRGJ7XTJObTh7Sj5HO0YuWzM2YS9yTyxHLCRoKGEqTldCTDY5a21iUF9Ya2c5VFt0SDltbSprYiRKd1kvY29bUkc0ZDg3L0tESn0vZHY0TUxAflNJZlBBIjU3RyJGKFM+MEcub0w+SSZ2NTcsK20ySFdnd1ciZnFGIjRMIU5sK1t1MShsUXxqe059''@;'; put 'put ''VVh0bFZAaE0rblAyM343SHZTRWVxRyR8QnshPGl5X154bVBfJTlOMkwoYytjPm83fmF6Ylh6Zm58OjNnYTFLfjg6PDpZMl9wNWl5IyxySktXdW5zJXlzKngibEJGTnFNMn5qPUMoU0tlSjRXdGMsYlcvQldDfj86Smd+OzJXZzVdaGhRWUIuWU5tNExEYm1yK0tfbGg5NiVWbFE2NHNtKk1tOW5v''@;'; put 'put ''dlg+UWUwRlhKcCNofCNnTklUX09TbGNEfjhmWl15K3tDP3VFJS9GM1I0OCZycWBZaWZpfkZRTXNHVlJSdGpMRV8hSUVuQF12aFFJeil7fWxgJClYQFZSYGh4Y1hFS09kSiNGcT9bSWc0NkNqfEx5VHVBNV5LPUx6REZRLiQqW24kJHF1MiZ0I31dQCIvbTc4Kn1pLlspUlVPZytyXjo6b3w5VWNb''@;'; put 'put ''UDM3b3hqa3R9RWpXODMlUTxFJFFPailPRjcmKVRwNFJLUDVTNDd+fkhsfj9LPFVDdzZed19vJTVGTjlzL00pMlBjfEs1XUprRHduWWBbWWBHZHV2JXpCbDIvK20qS25gZHliVG4/VFdvT0QqMzQ9aEtHMUZJUHJbN1NDPGxlQXRALCF2fH5UNUcqSChtRjc+Y144cWtXXjE+a0FkYnlzbSJaUHE1''@;'; put 'put ''bT1fVj1IJW1xMjw7LF9CazIlYjB9YW4mZXxTNlI3T0ZiKzI/eHx+OGhVZSU8TDlYOU52TkBCNkhbOF1JQG8hNzxiYCw/ejkyQGVNJXF6YTg7WihBd3J+TSZeS3tZQnRlXlZBZHB9Yj18cV1kI1FWRiFhP1M0bFdEJlgsby5pV14wTmE+bCY8VH5GUHleSUIyakRsZls0fl8rK2xPZ2M5I3hAQihf''@;'; put 'put ''LEdMWTNvKFIhYF8/UmI0JE1MeDZdPkxUWjxlJCtvSmtVJmtlTX52YUdFP2cpWHpyJDU+cFA4bnJPeEZJQllxP3N+d3kpRVNMVC9rL0s0ZXBmVSVvfWA5MUdoWlg6PmcjOUpILEYmdGRaZntjWihZbGchI1AwazFlQiZwYz1XJV9+RlBUOmM1czFqNDZVU3x9Om0hKnV1fmRqTFF1KEpMXipNK19D''@;'; put 'put ''Qn4rIl16X0Y3Ik53UzJGTE9uLkhzZFQ3VHNWeFh8UjByeSZreWN8RnBoNVp6QVRffmdyfV9jcnRiQ30kND4rZTZ2OmM2MkxFb2p+JFskRUxBUzQsaUh9QX5gckhTPXp3YjVoTCx8TChSLipkVXIhbWxAYFVwSkI3KTtSOH5RaU9ReUhMPEdaTzd0bm05WTFFNjgyMUx8RH5UXUMvSSk+RT07PlJ+''@;'; put 'put ''RSNxNCVXYTZnUkA3LmVGQi8qTCVGTjtlJlUyekpySl9fJjllckcyJWM6Ni5weWZVOWVPUW1iJTxePVZ9PXtdXzlIP299M3xLbm88ZG81aTFEVSZteiRnXUszb0t7ezdERCNSeWtlYzNfKj1kRnJmaGdyPX1II3xoPyh+NG9JNjp4RmpMISlTaT5XZUJPVzhsb0ZoRXh2PnxaaHt5P14oN2wyZzA1''@;'; put 'put ''YTBXdj49STF4RVsxO21tJDQyY1hNQjJrUEl9fkp2LipOQiVkJnJAKF42fG5ma1dWayRHeV8xLEEyflJka0FdXytEQHc6cy5vLFlvdV1ZcX5nekB7LixqRn5CW0IlTz0mfkxbK2l0KHh0RnhuT04idChpV2pSMFtJfXM0PDJ9LFgvdmw7e30xIXMuWiIxX1pGTVY7R2M/MGlTRjtyKHkvOWVwc3Rn''@;'; put 'put ''bHcmKl1QRDh9SnhuZV5efStsYjE9RGp9X3M0W0NMaW4kOWIkPXsuOGJRI1FANEVye14jMkElO3FlczAsfXhoLFNKOl97cXd2eSVPcVNmLmc4fU1XYjo7ezhOYC4+XitRcmBscncwd10xcFo2IT4/S2t5VTl3cGZGMllGb1l9Qi5WPzg7WWhXYFlgZXwjciVPellSNGV7cSxFSDx9KnN0JmBYXj1R''@;'; put 'put ''S0NafGtYM2ZIO3wpODB+QCsybVpqVWtYYE1ddG1jflZnTlo5Jl1keEdKNyYsUjlOfm1+Qj5CX1l5QEJwSDB4LzJ4UiM5bEhxLlE4W24oaUJ4IVk9Okc2WEBQbFBlNnxCV31xbFNGclU7QXJMPkd9IUAxYzNzNHs6K3hbeVUmYzVldEB1WCxTJnZYYERzW0g7X0JIfCpZZGspQ2RjRXV2Q2QrOGJu''@;'; put 'put ''KzN3Ujx4ZHt2WWgmXT55bnxAKzphJFc6WH1gIl9JUExoMWlUWF1CNDN4Z3AiKjErbWxUPTd2dndYOXc+WkZyUm8xJDs6TiVlS09SdC5vLCFEOnwsRit1U3FnQ30qPktLNnhEa2p4Nj8hWWFwendOcUticDdiRWd4d3EifDFeOmZJLD9SMTFUc2F8ciQ/cHFLZiowRFhKcj54QGZPVGU9ZWBzcSxb''@;'; put 'put ''QWk1JiUkbkp4RyxKPj1qZTo8VjFENXpvRSJfXktkcW06N2t2JWIkZzRvOWl8SGA3KSUpX0s1U2JUaiFfOGQ4Tn54XWRdSnFpRmI5WHcuJFh6SWhSPXNKN0orXzhNNXpvYnlMaz16W2hGe0RsN3s5IkZpfF1maXdJRm04PjEmX1ZfKUthJFpNJFUuV289cWNmJFl1bGZaOVVdPFhLQnFOMzUpc2NS''@;'; put 'put ''fDBuQiRNM2dtcHU3dHteJig6RFVpeGZdTW9pe21ofXlwS318bk1qV15ZcEx6fCVGLDlKLkpxajtJSEtIOU1hcyMlV2xKQHpuMy9CUnFHKCYvJHRnSDpEZHxaJEgucDJVa1NBe3pzKzpeLzhoKnwlKUo+N1I4SmVuKF88RDd2VX40VzowWTQqfCZfUylFQzw7SWh9Ojl2dHxsOWl3UiIjaDltOkdJ''@;'; put 'put ''V2crNz9AJTVKL2l1Z2h1M1oiNXR6SGQyNzs6V2BJJS99e0prKHxgLF9SaW4sUXl3TVRjaHA+eCovaHIvZnpEfEo+VUhPIXZIRCNOMWMwJD49UUh1YntIRXZgO05NR35VelNVaTc5MWxOTnB+RTt7SWgkWChFSXpMeUJ6NDBhU3AkPEpnZW1jKVNENHlRMnxddi5ySi8xPnc8dEVveE4oP0tGYVB5''@;'; put 'put ''RCVeO2pxbyhmc1JXZER1YDJlcURUP2s7bVVLcFVdVlVvcX4hP2tebztpWiUpY3BKX2o/N25dNiNGbjgxWl1HN1thO3tWUHJod2hzJS93Wzs/bShoNGwhTkEyJmpCQSlsY0FqcDVGJCR3QG1oMFI2QmZeXks0aHJdMDpfZXIoU0FlX00vYWheKTBxUk5gLCF2cSM9KyN2Z0Z5fHxuV2ZITShfVlRl''@;'; put 'put ''Xl9WMkd5OlImaF9ZfTBVVTlSKG1GdlNIUCUsZGBJNHp5eiZjbEdeSmZKfVU5MW1nITs0VSUwfUBHYChZUGwzUzFeJnUmM3gjV2FdbnF7cXJ1Tl1aPEhgZFU5TVhncl5XZlpvX1p+aXZMX0c7cloqX1VyV1BnQ19tOjtNKlcvRnclPCUsZ0VAYWRsXlZ0N1I2KnhZQHVaY1dRYDQzYm9VIm00eVgp''@;'; put 'put ''JF59RXVUdmQzVGwvMG58ISxTdnFFZ0Y7NEU/SXZxbVMjZy4sOkBYN2x5ZlojP0Amc2NscGlGcntRd1NRcHg/cyo9ZENlZ1QxPWFPfSJqNj0/dS9uQl9jbTRtbWkjV2pjYyFCdS88RywuQGwlcSs1PnR2L05gRm8jXV9Jcnguaj1rXVREZ1VyVCFJTFVqVXl+KTdPI0xbX1krVHsrM2ApMXFiXXh8''@;'; put 'put ''Vlk5THVYR3J6MClnc0EjQylAazR3bmAhTWc3S2BFYXc5XVl4T05rdUlvWGpgdEI6YkgzPy5tbE50SThPQD0qUDdsWi81Rk5EOmtxMCY9M0hKblg4WTZ4TixETVNsZWxNZyFJRVVWJmdSYV1gSiE9WWtneCEvfFE6d31AS0M8bVZbUFZhPylvdDV5Wkp9TGg8fGM8SkBVOFc0a2RWUDc5YyR0UXA+''@;'; put 'put ''PjgpPE80Tjw5PTRjZipBVlZud3JAdVJbNW9mPDs2X2x2Ikk+UUl3RWg3OU0qWCJEN3xyJXUySmpSR2hIOzNDU01MKT1SdFJJa040ZnZDQD9EMWZQUX5UN0VzIVh8clJjVF9TQFpMM0x0NSUyc0BkWzpfdSo5PUtDVlZUaG1UN2BpPz1FZ3FjdyNgZCVVMz1kUkRUSyRfVXM/b29NaHlsYXJMPXFe''@;'; put 'put ''clRoR1QlYD18QTNJPEREdkV9TEVPa3RCd1hSdzg+YXlVYzdtYlhdPD82PnlvMmMmM2lJfTJHIT4vUis7UzNwPF1rfT9kQCh1W09xQHV+KjNaMC8/TXM2PVlFIXhOSXw8cCVgYys9NTJ6USlmajswNzN4ZngpIm8lc2huZyFdZCNYSFBYKyY6P19LeFk6RnYmW15WQTN2eVtQVDh2VmtlRlM6UWpV''@;'; put 'put ''JTd3eF02alBuZ1VeOFY0YlBORzVZTk44XmtQciEvRnliNVZLc3dGMlNCVWskcyFyRzFCdCQvQkJKKDZ+SV84fD5OQl9dU3pEcUhndlpSdGI9MU81Z05gY1ZZT0VLfWRDZSFBMVBjbEZjWT9jZlpSKjxGWC8uRlcvanxNRVBiVXdQeyFHOEFFS1cpXkt5aUwifWk4OitHYzQuMC8qbHxkTXdTP2NU''@;'; put 'put ''dmVjXS5OZkYzYGtqTyVGUWJ4Z3krRV4va1M0dlksb3VyQ303b0lgaVQoc0EvVDZILCM+Qz5Ddyl+diF0IXBJXTNvRkk8cHFzbyx+MHtoOko7OyY/UzIjWVZKN0FScyVASy5hSmxUPS85KHBKSShiLj0xRkk0MigvVFpQR2lwIyRKOl41PEU/L0hNezxxbDszSyxlfHNHWHxWMXswey41PTIzLllb''@;'; put 'put ''eWpOXndfdkdsNE9+dU53XlBzLFteXz4/cmJER0V6TF8jaFZ7JTwsNS4zSjpeVz9lZkVdOHd3OSRBJT8uMUVgYmhKRWVGKjlFYUlINVBCentqMygufFdIQ0peL0VhKlIzUy9+aF5rP3VZdUk+UUtSKlVUJDxZQl4kIjFqZStqMWdWNHJiYTNvdW9XNV5WRFpgSmNIYzAvOUJeezBTX1d5ZmNhSjg8''@;'; put 'put ''ZCRlNGJdOTBJb3tCYXluNlZqekZHSmhBbS5AZkVPdjEpXlhbVitXSDVyYWpCbDZJMGxqUDdSTk13a3NiN0p0JGsqRnExJHUzbkBjeU89MHZ6LDhjN1hFMEZMP09ZXV4sfTgwXnkkV1pMSDU6YXJEK0I7e0FbXXY6e3NON1htfUA/MDkzc2IiVCo4SS5HT2ZUTm11cmFsWj0wcXluImQqZ2MuR04h''@;'; put 'put ''JVo2TVFPVDZxT25PSVlQT2BrMFBZekZVLC9tfH1MPE9KekglM3kxY0c7LEl8W2d2a3c6X0FaOXp3V3dTRk5JTSxtT2oyOlp7fEB+cXZ5VmN5SGBLVGVPank6SX4ybT1tbFtFbUhscUZtfT0/aS54JDcyMlQjSURILmk5b2tXLl5INjs7XU94Tjl3TykpSkYvZnlOQV4pSSJqdztzSlN1b0wmNjYz''@;'; put 'put ''XiJYLDBsYHhaekNDbmAiOyQ5NldPbX1oJH0oP2ddXWVFTTwsbzdOaHk8PzZMXVsmWjl6c0lpbSE3NSZqYGs+Uk9WKWBGWXI3STZ0REtmX1orbStlZENtcGRQdnkrSFM+JjBSVEpHVSFWfCt3YllfPyNQOVsudFpvdEkiNixgeSs9SSZCYl1xey9xelc2bl4lMGdSWmxJej46ajhuNTQqTEQsbUFK''@;'; put 'put ''TSxKQFV3ej03UmJ+c2ZUPXBbU0xrTjx4SGZ5QGlDTkVRPzB9VjprJC8uR2o0Oi4xRlVreUV6anxvJmJUYF8yMV0oOVo2OjJiZElMVV55K0xDWXhjJEtWV2VdUFVgVD0yQGVPXlVWPTJ5LDJgbWt3OSVyYHJzLjVQP216UiZVK1FsVihybV1VM2UxTGIlXSZaLFBwKD1YO0VWVlpXY1Q+cUVXMFc3''@;'; put 'put ''Sk8hLy5eTz0kRmZESmJpTDhNdig2biUiUVFvI19fPEx2U3giWVcvQUxgKiJeRE9JKForJGJRYHMzMklfSEtTcnFEbntgIiwjUlgvI1EwOjpdSjVaYUgrPnlUUXFENC9kXyU6RmJGMiVXcFRTTj5wRC57ayhCPCl5KzJgNi5jWzBGZk1mLjpUPTJYSSpCcEZwP21gT0cqLHg9MzlodF1RblZRXStK''@;'; put 'put ''OX4+TWViT14wVixJdD9PdCVhXSR6dU1zald9cURsK2BVJEk4YihGSz86IiRvRzYzQ2dSNVNUJjspSlFCZW5hYi5mUVQzWEQqQEc8eWlAP3VwR0dOR1pLLE17OGAiUmRkWTo+cCJaUzlqMW19I2FxPDVgbDs1YDcxQXlbez1SJl15Pz4/VVpjcFkrZEcsOiJ0QVNRfT9II3I/VGgwKkBeUDZSTiNG''@;'; put 'put ''eixQPFpsO1h3aHsqQHcuZ20qY0lWMjVtPDZ6dE9LcX1aTHBiVn5NelU4MyZPKnNfYjgzVnRhMXBxbSl5ellOeGFpMHBkXzZLPlhoWiNUVyFVZlUzQyklVVs1R0QoYF8rQHcxJiY5RWFJI1JxLjVteHVoZG5valQ1Xk9MPnhJUT8vNjwsQCZma3U0ZFBafCNjRHQsfG8sST5dfmdNfTZfLHdtfV84''@;'; put 'put ''LGEmbVNnZ0Uue1pVUXtESVV+OmtIQ0JFYUlFUS9OQ1grWHp3bypSdzF3eChRPWJqd01GTj1VUCIweFJvbEBVLn5rOH5wTj82ZkFtUT5BdV1dQ0QqRzNdfXljMi5ASXZRS0sqWVlEaHVDLzEqcFBuOVhJLDglNFdpbEIkVnkhNixZWGVpRW5kZDt6IXkreT55cC8hSWc1aHhuUiFZdk8/aWh4KjNi''@;'; put 'put ''Vkl6XiZtfXFoKlgyeUF2aE9bYW0peEdSYUgxLjo3c3ZmbSkkbWIkUm8/LDJ2cU4lXVRjOSpJd3QuJUl0PGJIakt0PzQsQWNMRVBFUEVfRmtZdHhpSzFNIzUzc3BaM3pSTmo2UTxKalhUdWFVfkIxbFI2bFAve2wqZXRMU1BmYz1MfHdkclM9YDtgI09NcHZQcmddQD1tSTNiX1BHJFpaPHRJZ2Qj''@;'; put 'put ''SSNYaXIxSmsqc0EvTyRqJitEQlFYSjxIXUIoY1htV3YqanxmNiYwNUhVYlY4M0s+PTxCfXAwTjE9MXkyLD9RQ1Y9akVEZkQzbHduK1c1anZUKDhWMU1PTTJGZDtTelU1eHYmb25Baz5QIj1ldU8iW0I6W18oYFdoTD4sX0ooRFo1JTBNJlUoeys4fktfLiJ8aTQsOz0uKm1jflBAKXZ1STElSEJZ''@;'; put 'put ''VWpeMSg9RUAwPEBMYVo8V2ZsVkAwaigoSj9tVyl7OTxGblFDKVtbZ2llQEEpUEQoWltIcnp0Si9ML3ciSS9VVnZfJCt8SGVPN2twV2grN1MmXmRIWSNoSWtCWXVVIUBmXUlyTns7T2JYTWBaYE9OIWU1ZixSS1U3UUwsbUAyJmlPeXpoe2Y1L1ouOGFIbmFOI1BkOylqT11xUFAoNDZxM3dZa2JH''@;'; put 'put ''d1RjWSUwaXthQHorLkp6OTR3ZUAjK0kjWF9nMTBRcjZQazF7XUorMm4oRnNJekM7aTNqMSluTn1vZD9Hem96VkA+cVUlUWldWC5GY3hXT0ZQRjJZeGtqYGYqckowMi9jLj15Q0xVPH5iSER5fDxiSF5dMkdyXUw7YExJfSFIYjQ0fkw2Jkw1Vk1PXj9pZGEqa3xhIixQUSFFdVNAIXFnR04jMHUw''@;'; put 'put ''VDkxRlVSPnw4NGsldlQ8IzBeK1kvaGtWb2JockJ3LjhhXXQuOCNJbitRcisve3loeyFNfHdOOz97PnFuVlVoTjE6fVgrWXVGS2FtY0Q1Xj59KXNGSTgjZkRTLnYqZ2RoYWl+dm5pKC8ua1s8P21kaGElPEEldVtzdzlgQHwzTGkuOCp3Wmh5dHlKNHJpfF4+cSxWQlFKNVRXTTo2NEs4WVhvOCx7''@;'; put 'put ''VSRJOCh2PGY1ZTh2fiEoNzNsUWg4MmwmYG9EaGlec2E+bXlvNjlzcGF5NCZyJCwrb2M+Om5ARiYhZ196UGF+XjB9KHc0Sj57RX5xXzIsaG9MUGBiRVdmV2k1bnl6Wzcie25eMERzIT94RChkajd3bHJhOUs8ZU4panFEOkghe1dzYVFoR3Q+dXw+YD4hfCxxXXJtQ0FBQUFBQUFBfEwqU0ZsVDZ5''@;'; put 'put ''UEgpUEohcWRoSSh+WyZaVX5xIiNENzlHKUtDe1FSM0NKbj8sLjN4aFJJeHdnTUchMDFlYF1AMCl6Mj1JMCw/S0k/fXF6LFBfTWw7enpyWW5AIXFQLGJ+SWxOI2lVYWoiTHE9SWl2OioyQmMmOENaVGUjNGRPK0I4M3swb0A4N3pXY0QidztmNDouZVd2WX18bX05JVhUbmlmVjREZHNhVGU1eGV4''@;'; put 'put ''QDFmZyp2VGU+VUxHeWokXUh4Pm1FaG1vO3lXdi44UzEpbkl6Z3hsYE4jamBtYEk7ZXRTem1RVSVLXWwoRFViTz1eQXFya21SUisuV246fHtNQnJ+Q1pFZUomQywqNjJvYl1DM0ZHNjhoOEwxI2hDTWc5JXJqa3hmNztIJkRlLGFgWkA2S0xKUHBUMT4jaWhxbkgmN3V+Iz9vNVE5enZaUW53W2Y4''@;'; put 'put ''N1BHK0EqR1YhTnk/LjZePXhXZnNhdlF3OnZAMWVpSD0yez4zSTc5TDVqa2N2MWZaXSFxP180LiN4X34zfSY7c1QzfiJjcnlEMCZ9OmV3KXZxPz88SHRyYm5aXXkwbCFCTG5xMT53dS8udk5kOHk/TnNBM1NKT15ZQi5DPWoxQUlLTytZUy44PT5Oc1lWT3tPIyNyZjQ0IlhKU1pHOnpmTW9WNVNw''@;'; put 'put ''X00kTF4zam4sP0ghSGxzJV87PzU3KzlVKkgkK24yMD8hcVNveXN4LkI3VndOcUxqW2ZLfXFUJFRmTVVrbmhaI1h0andjend2cEhbSz1OOn0xJWxxY2AzVzNhTjpiV09jUDpfb2VudF04YVttfWw6Z0NYR0UmWm19PFhoOCEsTzEpPTc1NSV1Szt7cGVdZiglfnNXcF1sNV4uRm05XU00XiRGbTlx''@;'; put 'put ''RTReRXhUMWd4bX1COFQlNVs3aH06WUg+bU9qOmc5RTReVDg5SDc0NH5COGdSQD1GNzpnM081XmBlPXd7Lzp+TmNEdXsvYyg4ZEJpQnBlbjtnbVI1XkE5QylPXTg+SDc0JkNdbChINzQmS104Pnw6dEklPTJ9cV1YeHdnJnE7ezE2RUNRNTR+LGQuZGUrT0ZwJCloJVU6W11zPDc9NkolXmVXcEgi''@;'; put 'put ''c0tyVEluVixtMC82ZUheclZeaWRpJW5+aVY/MGR9dHgoOkF+Iz51aHIjMHJ4ZXUmJn0pPmsiPjc7NDc4WkQyPGs9alBub1JJVShKTT0wbyxGYDQ/ZWhVPSs1TFQvcXJAb0BnZChVSmJvXXw4X30rd3NdeEQpQFR3WFJtc1d5dnNkeT57aTJreV5+W09qPXNsZlJkYEV+Ujp4ZTwuYWRUMlEsMyhC''@;'; put 'put ''LnhDXiF2ZzZuIkhLU0JXYGJEe0YjV2ZqeTpKRTxGXkA1Q1ZKMkxifDBqRiE3alVsK2wkMztGPndOO2UjcENiJn1zbDpVPU0mLmRSRXYrNWA7Kk90V2FWXXpqNFQ5bXNTamAkUDhgTkIwVzwub113eX1HMWgyLHhsViRLMXtpSkY7SjNhUCNOakNrMEsuN088Ry5SUkpSQUFBUERHe0VBRFhMQzhG''@;'; put 'put ''KU1OZldHU053cEFMKkJvSShEW09ReiRxSUs6YS9JPWloeEFEbEJBQUFBQUFBQSYiJmUqTXJuKXwsMis8aUhNZV4rcm1LQnRkT3Qra1gpdXhAQlt1dkV2aWRYUylGIWY7S0wlTWJielUmTE1LW3p5Sm41UFBSS0Y1YFdoajQsVk0uVzc4Kng/ajUkLigxPURUMzxYSmExajx2Z1hWVWRscVpPRlVP''@;'; put 'put ''UkpyKzBjX18ha3lSLl9GRCtyKXZAXlksNzJ4RzJBQjI+OD9nZ1dFWilbWCNgOTNkKz5rW217ens9fnpRPFVTVXFvbktaODlUPT55OD4vW3h2d0NgTVBPZTVqXVBPT2dzY21dTS4zPypYYygsNC9CSyIhcHNMa1d9aT1GbnQlIzlPYjxLVHtlfHhDYypoXWFxLiZOWFZhVWxxRU9ANDJJKWMxUk1N''@;'; put 'put ''SnovRDJuPyglalRZIVgySTtZfk1+aihhRm54OFJFNyFSd35MR1g/Y1N6JUg1NjhuQHFOKGEpJWkpYEpDYGJLfVNLMGA8S1cpI1MhX0IveGRuO0ImLmIrYEZEMkhYSk94fSVLeTB0fGNuWmxDPHkwVyxHMT4qWm9JdlliTzdMMzM/fkE7cUk5RTYlUkptMnNJamg7PD54PUhTRWRzRWU8VWlXXiEx''@;'; put 'put ''YjFPanM1cHZZe2RfQ1F0WS9NJm1zMXd6eD9aY3VgdChSPEZhfG4wX2lvOWwvI2A+N1U6eE9JOnhiXnBGMVBWNjdHLjAwMWwlL3BbIkVrUzJtYTdwdXpXempORlA1fHkhUF9ZYWJWU1B0dkZpP0ViMFFedi8+RjZwQjxwNTspS3VxLCM7WmJDUiEzeC5mMGc1M1pCd0VoKmchcS5JZmFddDhjX1lR''@;'; put 'put ''QmVJRTRKRFJRazlTdU4ibGdFXiF8IltRLig7K3RefnRqUEMhWVJqTF00elptLCJVJU48KypAeHxZSVN1L2cvRlRdd3JgQldyU1pUXyxEQG04UFojZXZ1fHRCW0E6ZGwhZ0gwUn5tKW9iSU1vKipvJUNAMFlpKEU2ViRtK3xKRzxYbiFAN1pfSVhlXklMKmw7dXl1RjY2Oj9DK3JieD8zUSJIUSJk''@;'; put 'put ''VWtuUl90Z3tVXUohaGRbei45TmpRLltNP0N+bVBFfDRhUnFdaDMiPj4uWkZYajFEfn46Ij45IXVKQTdmV2U8RiE0M1NHTkxuaG9SUD5yO19sXTNjSklASSN9M1tqJDE0QjJqKVhDT1dkKytiKGl0LzZEN2cqODtsU0RWRDFdLlE8X2hWPzw2WkQsWHIjQk9UYHttIm9TcDcwUXxbNix8Ukh6eVZR''@;'; put 'put ''TjVncnI5YStLM3djSUkwQyFFQ2Y/QDR9ckwqW01CazpHQlE1RVpuYW1MXX0+YUJ0OnlNRkVFQlckYWs+IS84clB+MDhieXkhajBPcGJjdGpkSl1nfVdpVW9bZ3JSaUR+aDx6VT4pP0JNPEZoN1EqNj0vZS52MH0pP0JERypCOHBmYihnQCV0dnRGIUIsNXM6eExgUGZGWVg2aX1yb1kha0IySiVw''@;'; put 'put ''UmppRHo4QnhPQ1FpZEY2akcuMSxKSiQsWztuV0QkWEpENEhdVW8pTnJAMlNSblc8KUI1KDFKeVlyZ1F4WGwvOWNnSyIqalNAPXkvY2NnK3EzUktiMCE9L1pEPjVeZTwue0Nycm5rRWkvVSk6WUQ+LjgrQWJBN2RmVyp0QFM4ZHZ4MTt4fFJLPXEyUlNjMih4ITRlJUxMcXN1SlkySVQ/eCt6bkNG''@;'; put 'put ''bkg7PzJxW3wmUVszOlteNlB8SEtyTXFPV19NPDspSFUrdmRNP1BDSlV1bCNJRUkzJFpydEBWP2tLKUFfd11hQnxXV2s/QEJ0RW50KjF+VHJDMGouOkd2e3hZdSJMTkopZztKPlBUfixucXtiRF0wZm43MUolciEoWUo1ZjF4VSIpKD1hPWxaflBRZ3g6cXhORip5UWlLKFtgNyoxYUVMeDZWdEVG''@;'; put 'put ''Xmo7I2YlPXsyQlZPfWdySFBCLkVQX0NpUVN0YVNodmlpQFphUyJVaG54WzBHKigwJEQ5SW9bUWJEbCZWVUA6fEtnUmFONylpJWVsS3tFdlNFczRDSXdYb3l0LCNXbio7MWJlUGdmKnx0Sm1SQTd9c3QlOi55ZihiOyhEP0RgNWI1PCZaeDlhajd2QjcrREhzPD1mOVhxNHlFe1c9fFpZUjx3JTc2''@;'; put 'put ''PTZ8PnYjdSpZaGE1aFB5dzRvJX5BMkB1S1ldbj9aVlNOLiVZcntFSmc7RDlsMj5DWHMiJCZfLEhRTlUyQWJAK2p4W093YXVxNFE4VCM5ZlZ4PE5oJEY4NjA3ZEVPIlB+ZitkSChTUWBheiU6PSRsJXpIK1o0ZVAoMEFqVD5hV2k0Oj9mL303ImImLEZNWkN4QzNCTXZ5JXguQjR8OiMwW3hdOXs+''@;'; put 'put ''NHBTcy9SS1cqSyM8Ol1AdmR3QH5VRENuWCw/XSkjcSE0UlYiNCJjMHZVJFF6YW8saG4xTGxCLlRqUC83ck5VOztXKXQjTk1kcE5hW2Y3ZUVbOEEiPXl3MCNJRjVhZm9hJUtVMD9wNzBZQGcyLzVvbiEzJEJAPVZkXVE1SyttSklwZUJJNEphWGN7VGc/c1Y1Xy5AM2NqPkNvNHBxNnUjVCIpVylU''@;'; put 'put ''JURxZ3ZLWihYYiJ9LlV2PTw2TXVdOn5dND0iMlsyb2g9Jl9NXiw2bE58fE9dYlQmRTppWCNqbTE3N0gmTz0ke3lVLztCZS5uenlYJGticDxTdUg9OTcqdz8/WTJ2elpIaj8sPUcpZms2bmwzOGBgKWVJOnhXaEc7NF96TDElT3FlU0syPz5RZEpDXmY0Mn1rYjBsJXhXMFpeMVc2JWErKHlqb0RH''@;'; put 'put ''cCxoWnNYPVNQYVB9c2BZbkZ0VTJYe0B4YH4vXmIwbXxVREQ1fDI4fSJHd2NRMypMNjNrI3x7dX58Qzc3cEQvVCwsUCZZKmBUK3hHW1NoI3QpWmtEZUZ6MUtfdDBfUTUyOEx8eWtOKmZ3d1tKfEBoTTpANCxtJnFEXyghW3E3XVg0ez1ycDh7WCU0bFUwdG44XmNSLzVmbkFiMjtuYk5WfktqS3Jt''@;'; put 'put ''PjFLSShMdSo1Rio5MjwsQHp6KF1zKDhqXmxHUlRDbl1zYGxvTnlCRitzRW0uZkd3YW1sc2QpTDlvYjF4I3VCMjtWZjk0WlpRQEhLO2lyel1CZGomfjNpUUNhI1NBN0IvNyZIaklwaCZFRFdYemNGYHVPelVuLFJmTjBTZDhJUXZQQilsOW5wOz44Y2hzK0NTX1pvKUR+JWlHOnhbXy8/JDp1fl54''@;'; put 'put ''TGguWzdyPERVXXRsIW1bYHwibClNRXMxdjdmbk5fUXpFakM5Oi5Aa25wZzY0N2Y1clpxZlVebkFSZn0sO2pVUH4paFRRMG42fGIwYXoqfVg+aCp6M2xadmRuTGY8LD50eG5Hbm1EUEl5QyZoS2ldKW4/QGhzMj9beDs0UFpjfFlCQE0lNDl2JU9gUmBRcXcucVdhcz03TDlWbyMzcjRrSlQsQDNh''@;'; put 'put ''NyhKYUx2UENMMEswRVJ+X1d9Rl1gbnl+NVdfUCVQRCJEa3NSOFp4Pm9nVTB4NyFlYE5SSXQzaio+VDV9fVdMaU12NT5XYVd1VDUmM0wuR0JpdHg8WHJjJSIuUjtIUSY8cmZ8VnhjaD9dJlVJVEs/L0YzX3E5KFA0MiopQiFRVVgyS2o2d2kpPz9zdmxzbUZIV2ZeSkA5S3BGM1glN3FoeUgiTHh6''@;'; put 'put ''QmwoQntrKW5NbnA0Xyk+UyQ8cVh9JS8lYUM0K19IJV9PRj9NLjBbVHUoOTpMSW5CeEppW3kva05UU208RkI7UFBwMTs+am5saG9DLzA0dms2NjN3MnErYCpKeyxHeHlJUE1wKl9afXVMZzlNdiU7SGdENFhAKSl7OzgrUXg+NVAxbHxYezM3TkljIUVNMFFMWyNNLiolPnx9byYmV1N3UTB2TkNV''@;'; put 'put ''TkNgQkpaQ3R1bjU3e3t0RGI6aUNkKW80Y05AeCNMZzkpKUkvUlBZfSZDcFBaVF08SjpHSVFiaXRVUlZ2JURVJGo6My54VTFrbjJdQ1lmUnF4Tm5UQWM9eU4qaXdhMWkySXlRLitdblpVXXhfLFZ8ZGUsPHB7M3Q+Vy8jMlF6ITxSQCF9W00jdSZ6dEBRUlJ6MVF9JTZFI3l7WWJyUW8id3hUVztj''@;'; put 'put ''a05TIWxvNCVGRTZNZmtuVEB5bDkrfFZyY2YlLixuWjx1LCM6WGwkaTRgRnsjKHczNzFiTGFVLiE2XXBealtFWn56NSw8LyI5NHtnQil5InJmcU9lJS91UTc2TnZicl91KFBSflteJjhSN3BUYjxGOHFbU0FtTShXQGxqe3BXaVRzLGZXV1EmeCh4PVJlZm9ITzxqYV9gZGlDS2xlLCIxZExQL3dG''@;'; put 'put ''QzIjS2pYRkhvUTR1TiFhfi4yclQoInxhRzM5L2xfdkUjWXtLdjsyO3giYShiRGhtKVdzLHRldy5TWXpmIVo+V1kyQ3dRRVF7P2g7fEFLO1dyREM1eio8dXQ9YEJkMUldMiZedXpvLDdweGJLUzhISEl0OlsuLkdvK0JkczxOJmJiNX11Pl82dU94Jj91ZUFZSWclQGhpWixONlJMNmVmTkddYixS''@;'; put 'put ''aWRJZk9sS2siQ01ebEJGPWpBL3F3c0wmYS5GaUAieSk2MUVKRi9LKFo6eGVrZV95V1pgeTE0PHcxTXhheS5eR0FXVldzIWQwdzVMdGs0aiprLDs5K2AhXnZ5RHppLjM4Q1lqRW9vW3txK0Z7R1tHZix2elhdNFV0diRnJENzby5XXSxBU11UNC9MQztlSl1lMCxISSUkfDFuRz9xZGdRXyUjfXV2''@;'; put 'put ''K09SIT1OYyJSWkFIZ3ZWL3BKO1BpZmtORjxMNztPMlgxZGEvdUNTNTcrOUY7Y1NHYEV6IXpMMXBLZHdFeCQze0VlPUZUPkdaIVNndUp3Vmo3emtGZFlmPlBvbChtYSg2Ji9fPStEQjhKdFB4Mn4/IzlRcjVCYCVpRk8rSXokfGBzWUh6Uy43Nmh7TnxnelN7PU9uP35WOG9lcU42Uj85TD4kJjJ1''@;'; put 'put ''L2J+QWpTQHFIYF4mT3ZaRy5gRTk7L0cxPF56L1FDRCZBS3VwViNWZSY/dCtOM3V8RCFnYWdtNDlyOTs7YEYkfmtacmt8RU9zMHVGLlUldmVzVXRjYEwpVmxqSyhLXWFkRTBIeGBlWVJGeXRONz4ic0o0Pz1FLDpmcnRKfi4jTDxBVWBNLyxUJDtjL2dbOHhgUU93Wzo1QlVPej1jNjNyeVVSWCRQ''@;'; put 'put ''QWVWYlkpLzJ+OURtQW1eXUBNOVZ+JSY2UHUzQFRdJTE2KjRhTXE+el5PfXd5SlhjRnh3TUh5TlgrYEJteTYlRGFJT2dQPzhOUndiSW5ZUmJIeEVHeUU9Z1JzaSI5UCZ4XjZjMkpwIS5zKU1wKSExUTs5eGReYVAkcGlJX2omPUo9Syw7Qk1yVWw1ZCteKjcuNUVuLiV9WFU9KzJObHUidGFlWWBF''@;'; put 'put ''SFsxbkRQI2E2cWxhKHlJPCNpOyNjYSZiTFNnQkBRQ0EqWyJHNUpXaiZOW1NbUyhPWEtRMWYpOS9+OXM5U29NVWF1TyR2MVMkWVoqNHtPdTcsZSU5M1UqUWJGW2c3bHw1Jj5wUHNhTnxVRUpza2gpXSE4TVclXSNFK3hSUGwibiFzVDF3SXpseitjKXU0ZjAzYTt3JkAjPFIqazlJR3hFLzdTXVlh''@;'; put 'put ''aTxZOys8K0o2U0cvJW4oRSRzYVRoLjpZc1V9MnJ9KDZtSHpGSDRydnNPNyNlR0xART1TLnNjRlhtQz1pc1pzXisjam1kOHJxcmt9L1dpQGpwVzJEYGwpQmJnSktJSnEwTyImLCxVdUQ4TV86TzA7aD5MdWFpSnEmYXBxYm4qa21YRjJ1KV1yJXx2aUQvOkVld15rYXMpcmBKKXxgdEwsTmE2UF43''@;'; put 'put ''LnJqeCZyYT5aMGVfcnxMc3hCbUk6VmN+bjpNKWVKYnd3NS5sUSwseXF0Nyh8RSVhRSRHNHNqLHsrRmRndEFiR147dlY+c1VLMmZEZ3VzRDpkOHxRM3tpIShmI35YUlo+Z2FWRTJRTiZJT0U5dDkmNyZFTz03MFJ3IiMkK0hAZVRQQTg3P3JFOWpORyQ9d2tgazA4WWtLIyV4ISlJR0l8UihJV01k''@;'; put 'put ''fkI+TSlrNSx0QixEc2NDQn0ublczWGlRPCI3V35RaEk9KV43TU1YZk9sK1tESHA2aURJODE0RnQjfHpiQTYqTDxhc3RpMSYzNip7IkB5QWFPeEgoP1g2ZStpbDVALHQycHFTQzcud2JnO0p1LD1QRmk7LllFe2RjZVhdb2M1KEJ4bnlZJjpQcyZAPVdndUYqPSZuVVJZeWd2ITd6azlwcmAzai5L''@;'; put 'put ''ZEZXYHl5fUBDUHRecEd4dnhka04qRGU4Q3owJl9jVmpDNCxOd0ZaWFciUkBSQmgmKWR9SWtTRnEjdDYhSEgvUU10VVdrbTk8K21VJlcrJWE1bVJ1eW9MNChMXlpKRV97bT08QmMkQyxzNmpia0l7dmlhUmAyUlM8aiojRiF1PCt9UFhZNENIVTlkVzoueS4rKFA3clt3d1s2USxuQChYOlhNRlRD''@;'; put 'put ''fFZmN3lvNy9JOkghI0ZRM28qISpGTi40MSExa0p3JEVsdktvKGpjQEZ7NXt5eVcrd2RXcnFoJF1OMUAyTGpndWxESllld04sT3UlTWFocS8hOjg4X0ckRTp3ISRHW0h6Mm5bcjo7OlpNYVI1Qjx7e2FhX28/Vjk6WUA+QEdidGVEaGhKTlZ1O2hPbzZ1e3V7NGFhfCt0R3xUMX1hNCs4MjhQeks+''@;'; put 'put ''PlFgZXJLZD5yPWN+VDwvVk9Ze2BwZCRiY35UeHs4RlJZVzgjPGk9eSIoMTlpIyNleix6S1pYN2IhI0VLYyxYcSUoMUw3SGNnZlNPYTphcDRqZjcvfjkhWDFmXzhbey8zK3FPI2FnJl11VDU8dmVdfjFBQyloQW8kJCloaiRxNC5SInZ4NVVeMjp2cEcwX0dqJF5ONlZSSUdmTE89JmNOS2sjeGZG''@;'; put 'put ''UUNuNntPfkMxWDBmMX1KQCJmQXkvUnYoa2R+IThVbGN7TForXTtzTUA6cigzSiJ8P1JJQV17X1khd1YmQjZ9dG9oa11db34qdyIjPns/eipHS2RXUC57SiFDVkRXOmtFcDBzTVhnSX5LZkR+WT5PSFN+O2NoRHJEfk4sOUlmXz5TL0JWd19UQjldenA7WnRKNzBYRGxzLzZAKkhfcURxaG5OK3hw''@;'; put 'put ''QU0+cUAoRU1tOWkpeXFHNHlAfl5OT0lIKFs0Myl9MDpPX0x9SjtfOTRWb2NYX3VBIlhjcyJRQkksb2I+QCE1fnJdVHwiemEqJTNROWBZanNjQXdlUnFFVW13b0hVYFM5enxHVn1rNlF5RHE8SzlXISpUWUA8TUszJmMhKmtJLlhYX2E1QUZYMjs0b1RYXz40UDV9W0dDOGBFczslLztZQEoreTpF''@;'; put 'put ''MntxPU98Y1kmYzRdWjxoYmVIOTRYXmUrWCh6aUNabyFwRTVJMX5bb3RmfjA1cGlwQ2lLJiVUOlE6Z1k1fFoyKExhNkV8OmJNUk0uemEmbTYxSmJRaXJjaWhxRURNO1I1JUtIbExZKlUvZFE3JVc1L1BrX05FYjRwVXxlNV12PiZGQ1lCIVd7QlQvV3A6N1NkW2Mla2pZIk5hRmdOYF1tInBSKH40''@;'; put 'put ''OkNtJC5QUy5zVFlrWWFUbWVqYGx9dDArOzRGSi9tb0IvXkxZMXVOMV57dyZ3e298SjBhOE84dG41NW5GdlJEZlhve1BtKmxUJkZmPUltO29jZXY8fFIvMkIjZV4+Y2MwTlImKm1xTXc5KmleZVRIfUt7QEh1LiFuaUJTV2FaMilOQGMrMnYxRVB3VCMlN2x3dWF4YnUieHRrc3oyekMqaFZkNldd''@;'; put 'put ''U147aTchbnEhRClQJX1JYHs7JnZ9c28iPFBIMispKTYhR1QvdXxlaDYqQ3l0RyldInN9TVQ5QlImUzNndmVYV1pnNnc3TCE6SiY2cioycSx3NThZWG9WYX53QkZgMU5vQjRjRiZOWno0WUFUL0h7JS4wPk9Ib3BedFBaNDZfNW96RFhpKVdeS21UWzQmdS5SWzwmdDdkfnRwei51QEFGJU9mR1ZX''@;'; put 'put ''TzU9YSQmWTVfaWZIY0dwPzw2fHwwb2syMW9nandVeTcxT1B1aTk9P2hFYkRbMDBdK0IhUyViYEg2Wml7UXFtamBhZS4mbStQazUxPypAQTp9KSw3Ql9tOD5KPjNMJl1jXVEpblduPnteeUcmQ21oZkcwRyhgKTs2b2g0ektKNmVnI0U6YCM4PWMiOEtuIStFSGwmJn1TVSprO3YpelRoO3k3Kk9M''@;'; put 'put ''RDBAdUNxYTwqTTUhNEI+X1hCOW1RMEMzKCUuLlFyU0BZdzkrQSk8ZVZYdjBUUG5gQXlTTUdbLzQ0PjJiQigoQGhNSFg9PDRVbGNjbWB3UiU8fXIuQGllJFg2bW1NZClYW0phPXVJYWwvV2N4QCs7O1IoWG5bYiVjYDtUTlt0Z2pINjhuRl9UQF5La2tCVCVCWzB6ODZAPEEqcFJRQWJOI1QvcEJG''@;'; put 'put ''eU1NT1Zbczo8cGU8SjBjfnM6SlE3cDczQltmdXUybDRhdURkaDEvVkpaRSVuKkk5LDBuX3NJek1XPiFqQ1VwSlBvXV9jInkyIlZ2aURDRTFPSF8pWUosbWZ5UnJAUntmeExicEprfm5SZ0xIbUl1PiRKVn4/RnU6WUtXYUZsdUlSYCs+Vz55OGxmfG5aQDw8RHMuZ2M2IjY5W35UJmI5LnpqVHpo''@;'; put 'put ''ZlQ8RnAhcFVLa3A1ZktESTd2ZzgyNls/ZUEqPHB5RVRDaE4kdV9ZV1poNSVjfm93a35CWUpJUlJ+Pkg4SDQjLlJELC5GTiNmLmldKUkmRGJFXTc7b3QhcEE6LzZodz0hSEJIZ3gyc2A2YTltZFczPX5NVll8OkdJIy4pPENSMHUlUiUwImpkZis3VyM9eiF7aGxlLktHZTdlVmhoRVFIQEhgRWF0''@;'; put 'put ''LkN3MT4wZCt5b1g3XyhgPVcoS2xQJEh5fntHVENaMV0qZi8iKFhMJnFIbSI1O2ZuOSE/SSlGIUNpKXd+NDl2OyVCOmpzRytmaX5heUgocWN4UCFGfGp+QEQoQnJHc2x+YjJ7dXlncyU0VV1zUUI4d3BfSSVbbls7dE1yRXBUJjUwIW56OlRpZGp4IngxVDpELFJjJChUKmVscmJGd0x6cCRrPU90''@;'; put 'put ''Mn0iKWdUQG05Jkt2MXIwfkpvMkR5V3heO3RfNEIlTVZUYkg2WzVPOkhJck0yWiNEXit1VWJNPz53a040ZnswTjFfQWheby8re2V7ZGQ9Tz5mbH0wIzNUa08mVkZIdGM9Y2BJUyw2KTh3L0ZPJkBnNTlpfSpMamZaMWpdS040SDdEKjRSPSVDS158V2kwTzpqIl54STxRfnhuS1VHYmhEL2g/O3VI''@;'; put 'put ''diokOUZ1dkNid2Q3V2FVSEhlWyVjTlVIa1J6QzBRUXFVd3xFKUc+MTNCRVhLfjowQXh8OjpvQDA3aV8hZ2o+LzRoYElSImt2Zl0pVEVrY1Z1Sm81flZXRGJQWmpAQytqL256fUJgUk9+NSxDM3Y/WF0+Rlo0T3FEZGB4OU5YNn0qWUQvZ3FhSU5YNFE2NThFZyZzMmI+WHVvW1grWUZ+NjxmOjdl''@;'; put 'put ''cVN4SEF2MjZjIyIjITNjYT1fOHU5T01gXiEpbE9bSiF8TWFuQUwucXN9V1BaS00pRTk0PDQuLyFbdSNON3VYcmFiO2MzLitSfnlfeFFsKlpyJTM4Pks1Wk5yU2wjWjhSPkZFY2ldPDk9NjI/dyxoRjBRait0SXsxb2NWa2JbIz5+OXo9Tnghc1Updm1xVHh2SWdoZFpDLHRDJisoV10zfGh1dU44''@;'; put 'put ''ZUozR3soI2YkSz0yMFBqV1BlNE8qKD59PnF8NGJVW3xiNmBNLlsqZDYkYiQoY290bTViWTcwOUJYbkh0KjFuc2llcV9Ydk1vUGR4MnYmOmxONHAxPkxzbCttal1reXJsfk41LHouRHkzM31DJiouZ21uemZvdiRZSjE9JFc7PDVNdFZ0ZlV8SUFIS3QuZSF0WFp0JXpNUSU3QW5qI2EkJlVySnFA''@;'; put 'put ''ZTRxdFR0PHl+JF9DbiFsezhubXFtW1R+bVZzXmgwX3ozRTxWe2NvI3dRT114ST9ZQ3FoTkl5JSs7N1g0LkxvRShOalJbSWNXWXxSMTQ1dXl9QS98c3dscWAvUzY/UCNKK1hWbGNCazIid11ATHw3fEtIczsxe0pbNy9NRG1ffGZMfCpBfkFpMz4kTVB6In0pdHUmSmAzUl5iJH5GYmB2NixIWCpB''@;'; put 'put ''S3tXOyQ0d3tickUvUjVIXUwpUiVZbl10Z219NWZlTkhMPllJeDRmJWY8JTJMTF0rR0UyWTUkdX5nTmZePy5OaFY+fno9K3xPSmdCQVd7Lzt4amopcC9ON05TZyxEbkxkdWFTfGZnNDY8THhJQnFybCZ5U1E6VlAoWSZ+TEY0N358RHxsRENpQWVbJFtOS1V9UDxUZ2I8RjpeVSp4ImVUSD9DbFdi''@;'; put 'put ''PXZ1SHtrSngwKVFxeTE0Mj9gdlI0TDcvKG18b3RVPHFaPSY7QXtmZFpjL0g0NEBaP01mbTVCTGYuXT0kfnI0emVtP35yPEVYPzJ5U19iOSNTXyZxTUdDeFRYL2dZUXROdzw8SWd0MEkzR3twcCxOVn16WWZgWCFeSW5ldWc5c3JWR1I/OTV+N3tgXW4kZSIoKC8uVTg9JmpjQEJRcVJUVSgvWS41''@;'; put 'put ''WTZEJnRddlo7In1Sfj9CNjB9bV9gcCgvcWkrTWJ4M18yfVIkQE1Oe15gNUFabSYkdDYuK34hNVJqcU9ua3xhQWVpNGMqK15LSXd2ME5LcGkvOSooel5PVnRkdztaLnZHdkRNRntbSkcxbihqNms0fSsuS2MlZXphLl5QZ1M8KSpvWnRQW0U+cj1scig9R10qTGZ8ZmBTVzpZYG13MlBGIWFCTWBh''@;'; put 'put ''MkBTXVJnIjNUdmRPPnx5Wi9YMHZEZzNDQjo/MUBhSXZYKCtoQVI9TCUyRkM7SzMqODpgTDZeJXFHIkR7aXt2ODZkV0RtcWUwQ1Y3NHhxdV0rcmVxNUdhTUlPfCthXmM0U0tbfjhNc1NhYjQzbmUrLkZUYTIscX0qZ0IiXyFrLjdAdEM0S2lNPCJwJXJ9cSVbeCosQ3FAOiteJk0lTFN0U1dbfjdK''@;'; put 'put ''OC49I2h1KDg/QG9APX5IM0RELzVbUC4pcD1tQV4oSj8zcEJ7KS45Zmd0UURuMEoxelZQOCRnXnJofEgpPEM/eW4iYkYvaVs2ciREM1txelYmXXlrOHcxckVma050MXVqWkpQJU5nMVY4bUlMTHFPfGpDfmohfml9N0A0JXxKRUNXUl46OUA0RXp5T1pLb3FFPTg7NCMmd3MqYEglQ1cxZ3lZaiE8''@;'; put 'put ''aVRHMGQ0N11ASGt0b3MlfGU4KHhOISU3IV0pW2kjemphQiZFRW9uZnh9JTFhaCIhdlslLysuQ0U9UHAhO212fismVkd2bE9oUUY1W1Nrc2tvXUQ+XyZ0d1BuJjQ3JCUuZ19bcUheOUB0ZjJ1UT12UTsjJSR6ZTYmQmUrV0FwZmpmeEVGPnZaRl5KaUU3Knw2U0tYI2k6TSUzKExiMmtaRFluPk1o''@;'; put 'put ''NDtuVz1QRyJfYWttOj53MkNNTWApU1opeF56eHJwJjsmMjkicTNZfkEidzxgakRTPDkxX3Umb2VvTE1TNDxUPD5DcCNqXmdoWWt3NHdGKF1aWC9qIXYybHlxL1FOQHdKOVJ2Wi5CSF1yI1NvPFJOQVAxWy9XeGlIKitEN3REPVBwNWBmckRLcXZ9WGpFS29iYFd4cWB4SmZ9S0NnaSRKNVVXfSww''@;'; put 'put ''Qk9wRkplKU5ZdUZjejlBOUxdbiw1UV5xODI1QkdrJj9GUXprQUBQSjd5N3d2QiRJIkNMQGw9UkoobVI0c1JsYGdxXUsvODk4MExBUml1QnNmQnc0ImpGKjBsPFMvcVNyWzh7T2xBI3g2Lztrdz95TiNdcjtVdVltYEc5eGtwMDpTNl1TSktuIVV5VHE5aXsxLFZWZzwmNk8iWD0yRWNNY3pqYnV3''@;'; put 'put ''ITZnOTBuMWN5Rj94LCNVPDplU0xbYnE+Rls6NTZ2MSQlXihLUndlWyN9NVVVUF1JdXBIbzpxVCRUXWBCQHJkQmx8SCFTIjs1ZmVqbiEkMn5XJTR8WjxYM3VkMEkuaEZQOEV4SFduLDpkenl+dDJiWFJXSFMuIl1sflVjPk1GST1odW4yelFoUGxAd3ZPOSRuVDlqTHVXPzxORUk6NHA8b0A7UD5B''@;'; put 'put ''OU1SQlAxe3JZeU1POjVmT14lQlJ9PlhsOzt+SmJyUC4sYHpCajU7fEBRcjN4RGRpSlcjYSJ5Tz1vVXtFTGA1cUhxZTJDTlMjalclQWhaQTF1N3hzMX4lfDkxdzNQQ1dPOVcjOXdHS1EmJGVqV0c3W3FbaVRfRVEoX0p1dHU8Z1ErUUZUP1YqTDVGTChTLlFMY21MPCplZlNBJSNFaTRaX3FIe2tb''@;'; put 'put ''JCYyfSpGdzpbWWEwRmBqPDV8dnleRX5UTkZmTFtUPjwrQz8mdztrP34jMWlRXzc1JVN3MkVgb002eCVPbkAqPkImQiZER0xEUzIyekohckJZIjEvanE+YzNpOV85byNTM24mOHpHVGVDKXpFYDohSXd5eSlae3s1SH1gTnJWaHV3dz55WiNpQXc0YkZMQEg/THdiIj99Rl9lW25+PEt8NWFNaSUy''@;'; put 'put ''ciRBfEtCPHJGeU13YSouRG0rM34kUnRtUTQmSGI1NHM4YD1KVkJwcEk6TE5ZOzNHL3F9fk9YMl1ARzpDSSgzYUh5dyZLWSVvVl0le0Q4UH5FR3A7JCtFNCZ1UzIqSWFmaWF+bSNdbyxZPW15XUtRTnpEUSxvdXp5RXBWfSNLdTRrZj1ta1ZtKDtTfTtHW05hdVh8cj80NyQyPEVmQlVuN25CcUp9''@;'; put 'put ''bUUkKWJ3MyFUV2tqelFFVXwiJXlAcHYkNntgY1YkUj5bM2twJDZNPTRjWU1PP2g+bzR4IXooe2JhUDc6NCpabU94ZGp3QDBmQ19VZHZOZDY1N303JGxsVUhwWGheNGdRYU1URDttdHR3dX1XQHlXdk0qKmU4ZDhpM04/VnRbdWp9L2IzTGh1WXgoIVpMRkFOa3BneikrT3okMC9TIUBqYSRXL2th''@;'; put 'put ''X2ZZPCRuRkB7RztFK104bXZ6QU4rPlJeeUdHUT42X1FGWDwrWSRqWT8leD5TUjNFQ1ckbEl0JlBuZyJgd2s5M2VRXmJCfkt5Pjs/bHlQaE40Ont7blBiYlopfUdpUj5xRGo7WHtgaGRgWjUyVl9EIXMrX0NJWzUmWkF4KzwuP3ZCW047U0JtZVRMJjQmU2teRkNmSm5oVW1KYDU5e05rW3BmRjtK''@;'; put 'put ''ZFcoM1k8XiZCWDwvZXQzX1IhSDtUXl5MalFlLCo3bCEjaFoxNEt9SXp8KzImQnY0Ny9LK2pYM1deeGFgWkBAKzRdUHRTYEcoXnFrTksyLEYqZGZCfVJbbW1JZn0yVlt2Y1U1dytpa0wuJjlANlYweCl1R3FCZFBiIXhHMUBnayNFUTtDIlFMaX0vVHx0Wnx7ZFMma2lsXTwkci89OX51VH5eOVBy''@;'; put 'put ''Vj9JPCswUmsidURlOH0kKT1kTXI6bz9XRSNeQG1gZE9KKWhLNkdBJG1BUDZYc3NCJjdnXSIlbSl3SDZ9IihaK0U7bCZMcy5jc0Q5dmljMng+Zi9mcmghSnpiSDRXMz4mfCs5cFUwOm5ISm5ta1hYLyhXSTpxT3NyP2AwS0BPQitCKENLNF5nQjFzdTU5fUJ5alNhVGAjSiVvYl4sOyFIRzU4K2Fw''@;'; put 'put ''VmIzX35jaCg9L1ZzOVRkVGw6RE1sY3cjejJnYCMkWE5xSyk3byhzSyYrKXthTG9+VUVsPjp5cyFlYyw3dVFaa3QlRUV4VXUiKEZaVmlRRU5dK3hIRTspYXlUPEEvMyU7SHNbQEcua2R6cHlOImdIREcvez0/L2xoNU4lRUlaJkQ/ZGlNY2hIdTxUfUkhTW43eyl7NDIvSTdgVyw4eyh1Z3JDIThE''@;'; put 'put ''TiVMUzt3RTd9XTNqLGFBYUA5S2xSZCUhSVJNXXh7Sm0qUVVvTyNqUn1XNSxmJFE1bmFYOUJGOCp0UlhnXksxMmc4O1J7d0VpLjBKdFBnbXAuczJhMjI7ckd5bnRmcVNOS31vRCU8aE0me1g1eTM9Wkk6ViR8IWYqJml2T3o7RVZbaCVUTG1gTThIIWM3KCw3a1ZkSilEVm1bbjp4IXhEUjEmSWtB''@;'; put 'put ''IXpKSHlSOVBWYFE2PCRTOjlNSyooa1l3QXdpeytJNjxOemM3bG5Ke2ZmPXlgcm9kd31tR3FUQjRFdjd0VkNFQGY5NGE2Mkx9VWZRdylHJWolQygvUXtNI1p5Q0phbnAvO3E2MFdsZy40b19pN1VdcTRyRE9YNjl2eHZzU0E6RHhISmMhX2BaY0ZzcDY2S2BmMjRZRERuVz19WnhDNVhLSE1PLlZ2''@;'; put 'put ''UURHa3JIdFpIMWBEZ3g4S3pmd1loPiQ6WHthY2VNL1NTZVImIUBtQz95cVNdazldVVBkOCVuNVZnNlVGbU0iOE9MI0EzZCh1NyxERkYmMlZNM3tRTWxILkdJaD1qZXN6KGxEbX0kVzJlVyJkKmZ7OzlhQzVsT1tbPH5oW3NAM1tQMDBWIjJ4QGJyQjNjbV02YEJUKlh6Km5eWjh6XUB7RiNrfX1r''@;'; put 'put ''dVFLYG5OVkp4fXJEbzlNOXN6czs6KEZsNVFxSGtYSTRVU11rV1guR0AoNy43OHpsVF0xUFh9UTI5IiM0NTFAWTEucyoyWiVoMkBOeUJJcCY8fGo7XS5xTjU5TGUkKkY+SmJRTkVKWCgheWlvYWRBTGBJNTQyL2kxPEJCYyt6K2dMO2p5fGAjdXFwd1VaIihlSFs4bSxiTzxPM1U5RyMkaTE3UVgv''@;'; put 'put ''ck1rOTFVbGo4KlFFIUoifjFEcGd8OHlxfUQmXUdfa214bEQxcDdxazhwZClASlhgZ0hCRzs/UnlORGkwalBkZzgjJlEoaFMzYDs4cyZ0Ik5qaUU3VUtlP3Z8TjFmYy86WnR0P0t8MUE2bGFhL3c0elp6YE9LQTZfVVNnIXEzWEEwREtIQ196XWtqISYrbTdXYks6WiV6bUI/SW48MSVHKFZUZDkx''@;'; put 'put ''K0Z1XSFocCxxKitvIWJzamBnIXY/b3ReLiJONzslTFUmIVg8UDJ0QUNiWE5xKVd+Pyk5WTJhV0oxTT5pflsvPjdve207dENOdjMlSURLX3paYUphQDUkdEJFZyk1UkojTkB7fiorTDN0TWcoISxyVVgqZ11fJGo4Q1d1T2ByVUNaMzJKWnZTamRVTDg9KX5bdyRaOitoPj5EbmNmYkNtZnMpViIz''@;'; put 'put ''VGAyQlpDLEkyXlkvK15ER1AqfiNAdi82Pm54fVFuZmpCKXh2JXEpLENAIV9AT1R+ezYxdl5OczpaWHAxNVhlTn5KZFpIOVpmKk47TkM9M3dkfCFaY0VxYytHfnArJVI7NnhXPSQzSWh8cChvR18jd2lhejc8PEJQYUUvRlIrO2lnfE83IjNVfC5AdjZRYCJzQT1PM1VKPE8iTHNUUFM1IT1HPDpY''@;'; put 'put ''SkZfJlQsY3BDLkB3WmckIzkvVDRbIXNYeVIkeSFDQWE6O0xEKHA+PGU9bW5DRyVIVXY/UmlBKD8uKlhdN0g2WkJaNlImMnM7b1pyeFRVdDpJJTsvUnxeXz5dKFFNTCEwJk4/VWgzVXQva2RMWDN8IXIlQTgpNns6dD1JOG94M29VaFNoKzZMYTRBajM8O0grPypFX2glRHhOdldhT2FvVD5dSzJk''@;'; put 'put ''UTl6U1VuSDdWKiJZNlE1PV5bQyk4OUU+RkVRbWFoOTspS1NCcjtsZW5+MDlUZ3psSno6dUFwTSZiYmxrJHsuW3h4TihAI0U0WlBzPEpSU0JaMXp2JHl5R0RwS0BpND9FKS8ueGMhWVgzTzFRKSFTJHF1XTpPWXdjT0BSYCVAUVY9QlAufjY5Sm9tNndIIV9bXW1lalBnVmhzYT0rbVZOMzIsImp4''@;'; put 'put ''ITVSeklbQ2wmeG9wSFZPOEBDZWMyR0lBWTovRFJfSzZIRWZvZyRwU2xvMENwal4sKyVzLDc1eFpFODt1fExMRjkjXXxXIWI3UCNLVEA9clpWNT8ha0IoYDN8fHdvazd1TjVJK1cxOUFON25+bmk/P1lFQitiJWpiZypbQV5JQDMqMipLdEF8b304fW1kYSozcikzfUlHfj5MU3Y/fXl8eUA3cH1m''@;'; put 'put ''d11vNjN1ZU9UM0MqITJ+VCVRXVk+O0VDNTVtVWJUZlE4RE97KkJ1cHdKKXhOdjNpaCk2RXBRWWs1Qjt6PCpuZTVhJW0lNG9nPDM9MkBQbzY5REp5TzVPPElrKixBWHk3cD1SVF0qVyFjPipuRmM1KUo3ZkBKRS9AJT9QOF9kWmwiWXtXRXFONWtsdDkiL29gRmIobGczcU9QdiU9S1N8RVdQRjMx''@;'; put 'put ''RFI1disxL3tdKz5pbXM6IlN3bjkuK0IlP0JFQnAoUzp7cUlMQXZwJjdgQkt9eWtbfVg4Lko3PXFtd1FPN003SF0oZk9GfS5UQXpCVXBhYXFuWC96NF5QQWJJcV4yR2ZCbUAse002RU4heDVdSkV+KGlGT2dySS9LNWRvcSp5enlxdGxDWUR0JHBLIVpXTnxBKTpPTyRaIzxMYGZVeT8uLnpTPHV1''@;'; put 'put ''eE52VkEzSG05PTteZ343fjJfV0YiQE4yXzhaYlVCUTdaLEdTQmc3M1JRRClvPklqZGxPRCVnISE7fjx6KGViWVhkXj5SYkJ5a1FCUVJ3OTthNEl4T1RBQ1Rpc1BONn1HMlNtM3IyR1M6UDloflBEeEJqI2E7PlYuNWM1TWk3PEt+W3JKLzxmY0JLIllPcztwLitqN2UlOToufjJENl43KDx5Y281''@;'; put 'put ''c1QjaEpeNEtIIUV9KmRXLz1uRS9ucTdmSExGNCIlVWIuPWRBZn52V3Q2NDxaP01zZ0ksTEZJKih3ZGBVLEdURncvOHU5MkpTaW5mNyohWG1MNCIpKnl0fDh8YXxqWSNxXXl6dElGTWclXTNWM2NMZmoxREokTWN0WW1LMHFFMUVLR0IlMl5GZzhBJDNKKUxxOUZOLiV2OEI9Zz0sL1F4bDZPNTJj''@;'; put 'put ''W09JZ0N+cTo8NH5aYjora1BtMltCbE9MZDQ2Tk0zJXs4cVk6TSM5bEE5e1JmclM4ImhdYHR8RHlCKUJeJDkwX21hXyY3I1BOZzphfEdScWtVMmN6RjRIRiQvTkQiPmskeDVEYjN9KzpTdHpDTHRqM2sraCY5MmY8NDMjRWtbOWUwd3tyOns3PDZKLHxaVyIvJS5qayU/NGNSRVRZY114Yyw8WUpG''@;'; put 'put ''OD88MnlMemNbcElhXnUmIk8+ejBqM10iRkMkcSFWTF1RJV9CRFJgbmNvSTB+IyJDTj08MFhCWiFvWzg7c1RpeDU7O3s/RlZLT3dJXyEqI3l+OmUyaWg8eGNsbXUvczFuRXx5O01GJV9MJC43V0JRcyM5X2lSdUZsOC52XnN8KSouYGRJT0FFZ2EvQn49TTVec19aX2FKNzdDaVFYOnhedClYKkJ9''@;'; put 'put ''aGd1OG1NaXBIV19tJmdbRnFVVyR+TipRZzhXXmM6dy83Myw1RVBPYCpHMVJdfTBYZm1HaT4rT08pKGhOPlpnWjBzQ0cuYVhYeG04dFphbmcue3o7ciRjcGUhcVFKZ2M7OTZ2KHJROXglTSRWWDM0byoxLDxKNEpwZyRLZz95YHhWWGtTcXtjUXt7clFWYyNabEVUSiE/KWNYNyMvWnJOJT81YFlT''@;'; put 'put ''eCMxRmVtbmhYZCk9OC59O0BVRXBCfElLP29xa1BFKipRXV85L0xZJENQdHRyVENPQUl6JHNlU1pMaFBkTWRyLjw1TEF2VD9MN3hLeHM9bCxjZltTUn11SG1rcVBvaDdqRnVeeil9MUtHSjwoMyEjLDVCV3tWc2hXNWx4e1VzeDdNdE89VjRXLm4mOmQpc0tGPVBlXVBXSHtYe0hbMSZ1dTlYM2BO''@;'; put 'put ''PV49RTxsKUIhQn18YHlbPUovN3cqZ0smJF8qTyhGN0x7NVM0SXMpfC5yc11ZM0I0ZDRPO01ZMVdTQHkreFd9JjYrZltlVVJKVzQ+LDZjKjR8bmFFXkY7PX4/Ryg3fkxmSGJZKEZ8a15aPWkhfUNHazJoOyxYdjF8N3JEakxJe1M3W25VK2QlPHg/Um9OKyZ4K099XlVdfD90ZkI4fkViPXk/XXVV''@;'; put 'put ''YV9gYy4vdUVyVzFPYUdHRUxRTEt3ZlBSXlExX1RfZ1laI0V4ezhAUEhSVzkqMWsmQF1aeHgqaDt9IWA3UFd9M3AjQHVbInU4TyZGa0k3e3ltLDhxMyg/NkkpQG47fWhAVUYrZFl1SGtiW1MsND48byVDalhEIXh7ejUrRSY9L09FSnxbMHo2NCVZZXNuVEZnUEY9dVguZ2pGdnBubTNYck1yZ3ps''@;'; put 'put ''aCRhYFVDQWVxS2FITHQsKTlPJDxHNzRhTXZAdVsyU0UkKFNdQjpUYX1TXjFmdWdkMF48MTdzNFdKMDBYLDdUOUxMOFopdnM0OHksNURDQSNXODROfW45TFJaWTwlVyxLU1ZhfEIiM24yIVBeK1d2SkR5cGZTTUs3eTNxWmoqP0U7QztKOjtUM3h1QzVtW3teNnJZeyVzYnJtU1U2QSxZI0ZFY1pb''@;'; put 'put ''P3p8Jms1WTNqNz97Rik2V004Ujx7R1JBMls5d0xTVVZTfmUxfnUiZTVhJkY/RkcjciVLZz9AZDA6UUUpdGU5cXR9WkI+R2VmfUBbaWhIe1lVUzFScnxxRW5ndG03dGkidlNRfkNtUlR1eXFJT01TZkNjaVtZKnJzfVtkP2YyZTZwdWBgczIlJlE/fUQuWi9ydDUkKGJ9blhiSyErYCthM3F+RExW''@;'; put 'put ''SHI+MX12M18xc3Q/STV0L0A/aExCU2tQdi4vXjI5WnxBZEJ6P2RzL19rKjkzbHVodnc+en1SPllMczpNYm1UaXlVS3VsW3lYcShXYlg9MiZyUEtDaChjUDdhQThORG0yUihFLH1UVHdWciRaKk0wZEJ2RHJlQH57PmJVL2ddWG5rW21NQ3JEUj46LmZCTExDMWlXbCg6U084Y3lQe0guRWYkOz17''@;'; put 'put ''IXBPTHVdS0szfChMTSNyfnI+ZTlhQigiNSI0anF5YGJgb2hGXSNAIzl5elBOQ1haUFklWjE8VDxhM0lIQCxpeVEuL34yJVlEOl5wNjJvTklZdUlNfUQofnZPOlZLbW9fY0c5X1VRKmQ4bVlbRUxbIWk3antZUGxLNTRAI184ZldlUGNKVTI+d3J7IXMsUyQxV3V6OTkwRSJmVkEvTWJHLEZFbDx0''@;'; put 'put ''QHpqP1NPMn08RT42SG05V2o3W1syOlhYWGp5JCIrcDNwJXA5Tj5qSXA0YjRKaGxoXmFiW05eaDRAMnFSNF9DQGs2X14/RVtqeUpgXyZIdntrRXZJX0tuaiNnVSV8P24qUiMsI2tFVVJKPHhUYmc7SiVWMGdFaEIjUGAoW0FVbHlhNElHKyxOJHY6KlJNI2syWTpLZ1trJUpHaj83bUF5PVZMKzw7''@;'; put 'put ''OWIhaCgkZD9acEViVCZ4blBfS3lKeig1U2sxVXh2RC4/c1BgZHd0cHtLKTRiRU5fQipXY28sZXVSPmtzO3Mza2VQMUBoZiY7YSIsdTQ7OkdmT0wjbVB9fSk/SH52K3BIWyIxNTFDZHBwR2BrdyFyYkdgYSosJTNCUCNaNj1Reyp7RlcrVSo6PihmOkRqQ1tiZFtXUERFVDIlZy5TPz4xeTFrLFMx''@;'; put 'put ''S18rOzxlMEsuTVkpZlFfUEJqL31tZjZmWn5bcH03TF55I2E5W20vdyVRdDF+OWBSKDV9aCwxRkx7L3ldflBGY0hNaDRCOTdue0QlPjYvU3B5NVFCLCN0cUU6QXVlNDh6aXR0JTdCIiRqakdtU2A1WmxvV31YVitWOjlOKHJlNTQlMXJKdjtpJSpLRk5ENTJ+WipmKkxRPTV4eXxfcSVZT3RkTzQk''@;'; put 'put ''XyJSI2k/SGB3VTNAWXJBJDQ6T1BdKWg3L1gmTm9QKyg4cmZGPl5GYmIiWm9ZYURAVyRQR0h3OS9FUzA3Vn1KJFE5XiI0S3omR1I3KjdkdXQ1dzosMnN1TDs6NmMpODQ6aHlkMDZJRkg5aFJKZFNfNSs6aDxMWC48QmZ0TT40fStkO1F1SntZPEJsZkwoJXxCZyUxOyRTQkRCfmx5P15gJUhwTCU0''@;'; put 'put ''TWpXXXJNdXNBeGFdZDF1V1JVNUZdKnFdPihyZXRHJFk5NFdHVE9bbD0+LHk3WixAMlRoOTxFbjJLNXRiMDhHX0RrSyVjSCxVeCI9OSI2KXxPOnFoUHA0NU9fV0dWUVd2bns+RkJDdUhPeXF5Y05bZGR4QEI6R2pKUVgyOSg2RCY/YC9UM2tidDskUnY1VVdjRHFNZyoqJS93TjlMUVc/czVROGQ8''@;'; put 'put ''b2MoakZvU1A5KXNPbF5GIzxdOXxlai9weyVoJWgxPT12ZGBgRGVncCooVlVCUChFfispVFp9ay5oZ1JPZyxZI20ldy48N0o6RGw3ZXJuTDxmeXEoZl9raUxOfCNuQ0t4IV1QaTx5NmJOZTAvP2hRe3R3R34+UU5vOlByezIlcH44TCUybWQyfGdKVTVqeWMzYEYkTXJDJSF8P3t4bGZRMDR0WXJy''@;'; put 'put ''PiYyYSxmLk5xOn1oNFImVUshRnJlcVlYdVNQREE/OChOJGs+PmIqLEZPS1Z6cVtRUGUza0MzaDJoOTphM2AzIXdIJXBwNDQhWmNBWz95ISRIXnB+NVgkXzBuKmEvLzBgNjxlZyNLOGtRTDZxWGhlSSZSW0s2YFowb1dZSChIOXpQWVVCYDVyMDhdbGhua10/Tn4zLnI/U2Q9ZERGSzV5NylYZ3ZW''@;'; put 'put ''Py5TdnZHLDArI3BxT3A9KGdiRVt7XUV3JDJQInYwOT1jViIxcWI6TSZpXkdiNnlwIyVdInY+Py89cDBCbCYpSUtrbnB+fSQrbWQwckxxMj9CJWRDUlZpcFlbcjQyVGRjTG89RjtYPXh+Y0pYXi9wIktIJkNwOC4wP2xNL1kpbl9rcFlRM2Mvcml0dmNsXytzan5MOSxCbSZtQ2RXJSJqOVJFKV9e''@;'; put 'put ''dCpmI0QmTlsodjM5Ymx+MF5YN1tZNyZhWmYvNz8qOlshZDNmd3QzcDIzd3lpRjpASlBUWGklUD13ZnYyPC5CfXY0NzYvZE89eEs9O1NOPl8+WyNJXSE5MTRWaFlCdC5SXTElZlc/NTslU31WVFVMXm1ZRC4vPmFOdGZkMT9wViU+RngiODtXa2F8In5hWmN8V2V3Z3FQNTlgWnNbO29ZLE5ocXFX''@;'; put 'put ''SEpgImRvKkxlekxAInd0LzkzbGopJDI/bipnanglKHZ3Ukc8Omsjc2FNOjokfkVbWkRmTGdnajB6eWxBWEZjRGpoK3NuO21xUENzTj9xMWJDOWA2PXc9MUwpViFGUzkxbjtfOVE2ZzVAck5oc0ohNj8vI1UuOUNXdFA+U0BWM1hLRzw2JkM0JSQhenlNdGs6LHh0IX4sTH00LkdiPWJMWEZGTUZ0''@;'; put 'put ''XWtWdFs9WHxfK2U9VUp+UDZmYVpLN2BBXyglZzt9Mk8pMTBAdSkwWk5hb0dmRkVWRWVnWlVINkZYQE1lIyZQaCNNKFpITSRSaFROTEReMU1EY3J1OTUiMTUxNGAwSUVsXXp5LFBBZ01FUjZMPHFDNS87W0Z1OSU7ZU5nR10vZVlkTk16YHd0UEFeTzVrJjs+U00pbiFzcmFtNWc/MXspSklrMWs7''@;'; put 'put ''YCgqWEZhNnh7ejIuMHwkYUF3XmdoejJKdz9zMntGOmxqaHxvM2Y8W2pRaiw3O1dSaiErdXt0XnR+eztme1JHYUx3MDFIMkJOSEJDVU5JdVhDQkJ8ZTFReFJ9ISJ5NW0mTEpWbF9fSWVkZC54eWY0cGhmU11gP2pwTyE7UFJPXTYxbXFfKnkvdWdvRldaUG5yW0YiUCZ+fVJ5KU1HOGFoe086My9u''@;'; put 'put ''ODZjMzt5YE5MWGV0RG1aenM6dTFjMXtob2EkKHpKLz5wfm46RjArTm06IyE9WXouOk4wekd0diY9eWtSIz01TTxuWF4rKllCXzF5d3d5K3s2S00oR1Mvdlh7YXJgcX5JU1lVLjIlTiM6cCFySkh3VHFSfld7X25SbWZrKi4+U1N7NDZ3O35RNixZLGgrfTRTWD9fd0lrVF9NbWg8ZDtBNTFFPi5f''@;'; put 'put ''Zkc3Q1tbdi56RCFUYVNwajpyWWRZIitjREVRdCUwbSNhPl1dJk87MT8mUSEyY21aYkQuZzlhU01FYVBvSkQ1Ym5CaW8lQkJKQi5fdHErJjMweVU9OkE4OFRfOG1VaDBkeTszfVc3LiUjX29QRisiSmpKRj9OcHYwIU9ASkB1YFs0KllLL1Mlb1lRNE8oNXczMl5nNmoieVt4UVkpQCIrUm0hK1ND''@;'; put 'put ''S3FbQTUhb0FoMkdTOnYqRUdKeV9QInsuNH1UP20haF44VC5VQnVkWFV4MXRKdVtpV3M/PjVFeEp1a0pQPWUmekh0U2QiPXshZmJ+XWR3dmMxWiQ7b0d0RCZ5XkYrPFZCeVUsJkQ6fiJ3b1lxWzEkcW17RnBERClYXl5fZTc1diMranZWRkxkS0JtJFkxP2ZCI2kkJkF9c3Y0VkNHN2BKeGxOZXFa''@;'; put 'put ''VWBQPXhdZUg1cjN5dyM0P3RYdiUsQX5xLkJxNz47MmVfcV1tKDc+Xztffnc6TXR0P1VHbT9EXmFqPE1vcURuRS8oW10jVyQpSylyJEZsYiVTL0M+JTBlQDV8N1ZwQT1iP11vIVBtdnV4VGwmYik2al5aKls/eTIuTnhIZFk/VFtkKHldX2NxYWZKJk9IN1FiVCwoPj9pYHpEc3pKOmgxXj0ya1Ix''@;'; put 'put ''Y19PR2VOS1c7NERnSjBiM0hoXyEyUm5FaHl6R1QkP08lX3FjWWZRUD02OyF2Pkl0JlZXPXsyYSNUT28vT2slZWttVmZqL0NNfVB1dDElJHd6enJ6KlkiZT84TD1xN0g9TlpiZDJqdiQwJW9dbWQmMWtEWj1sQntgZyZuWTkmVTYpRS5ZOiMwO1JnSlB4VXpaKmIiRltZNndPYmk0N196I2RxODox''@;'; put 'put ''LzZfKDVQL0dDV2dUOl5DIk47NEFXaiRzbCtCZSlZbEVoajlJISQjfld+fkVVX35OIXlEeGFqcW5RXlpOOyU3MkZUOGo9MiFVT3spQysoJFoyWkYvYntNSFsvNF5ZU0s5V0IkIkgsLFFUPTFIZ1pvZyRjKzRWM1dOfkVSYGskKWVbPFcsRT8uUG1NP3w2aHlWUDFLMChOZnV2d0kmQiNOX2FFWSwo''@;'; put 'put ''RHh9SGEraTlsYzYre1Z3Ril0JVRjJFlsbXgwa3h8PFNnND5URjpGfC99Zig7bj1nXz9uUH59NWoiKWttOWdJdkt9bC9KKCVjbiE4cyopfmpgfl15eCVdeD9Edm46cH1VZTVbS3NdYUJIaVpIYzJENSFob01gPiJuYz9+STVeS1A4d1hEMXBJXkQzS2xiLn1sIWJwRktbbD80ZF0scjowIkEzX3Mk''@;'; put 'put ''YzdvfC9wIkEiIU8zZGl3XTRMInE4dFZiLHxmeTIzLCViO20kI0t5VSZxVlZzeD9xPnJ1bHhfX2l5Ml1ZQEduOT4xIj5JTi5lLiFmaTlkfVt9dCpfcUdEalkyLkRfP0NhRnBYb24+WTQwZFN6bkV3JnJ0W2Y3PDQ+bX1rJGwwInx3RjVMPiFRJmd0QHtQJnViK2MsNElxQXo+LCZKZVkjMGhBOU9m''@;'; put 'put ''T0owPVYwRG1DeFBrQkVPK3RSTDEjdUIsfSZPbFdNcldBZnpHWm0lXnxYailvajhpUlFiK3BAPkdocCJqcWBCLy5FRiRSQnBYRTBtSj1+MTU0aUMvU2d6Y0R5VWUjKV01YjNyOHcvJGppLzZiZEV2cTwpX1YjZGdmfn56KCFDfkoqJSRIeC9JbSlhNSxBYDxfI11gM0kzYjZLKVNbMk5qImpKdGIj''@;'; put 'put ''bEEsaXpJZyRrZXldTm00M2FkTCZCeSgyNTU6Xz5FbVJXPDhvTTgjcFlebU8xNmg6XTk7Q0hZYyVKazY4PGhZPnYzYjt3fFFeSGVsOms1RnViVXwmal5wLHgyYCpmdW83aHdFIVQ9ZSw5VVVHaEsvUHNbbyxZZkx5SDNoazEuKUw1SUEvdWNAbnl5TzZeOXFYOmp6JEU2PTQyck99V10uL2c6Nkg6''@;'; put 'put ''dkguUDBCR0Y3cGNlYCk6V11NQUxOMz5DVUJORUhTSDFISkxQX2VwOT9IRjFEOUVAbFpiZU4keyM3eil3Nmgvd04yW3hSUVl0d0cuTS9VU1gmdlErOC4pTCw+V0lsOXNufHVCNFpOMSFzU1RHIW8lQTxxI15KKmszSyxGOykuZF9dKl5DWEklMUh3VSRqaUFLSC8oY3hpQiE5cUMme00pcX5JNWV2''@;'; put 'put ''QzVVKGV+OS44S0F7ZXdjTC5KKzU/Xz83WT0kQi5bNm5WQSVaVEg2SEJNVT5FblgofmF3KTZ8Y1E6TStiPHVuI0EzeFNyJSlKWGloX2ZPa3duO1t6V3F6Kjl3Y3QuMWpuSns0eylCN19jPzBKTThsZVFEbGssOCw1aWZ+d25lb0p3Zm8oT1RQYGp0WTtVUiMyPENxJjkjN0tYMypZVkFkQTNpcDJW''@;'; put 'put ''RnVnT0o5MmZ+WzhjP050LjVCMTNSJSRoS2M9RXx0Y3pSI0xhZnJeUFV1KT5IPjlmOWJNIkAqUC9VciluaD9pfHEuMVpjQTopbTdUc0skOGliJEJkeGx+SVMxdFgsPSphckVkZz5NSDVBRz80Y2NhUU86RzNsbkhmamUvSSlPQEwqIUFaTCllTERic1Q8TSM1NXV4WHNhRzNxOiN9e2V6Ni40KU19''@;'; put 'put ''VnY4fTJxUVN2WnhAcWE+KGokJDxQXXFKVyFtfDo+VnRhKTJKLn5wPnJxIzg/dlk/ckZQV1lWUSEobkloZzApW3xKU31pR2pjVjAmcl5UUSR8RWIlST1kOmZmVEdgK1ssTy41dVNSPS9QPFBvZihlLyYjLjk9ZiRTSXBRZzJqK2IoQDNFanR7R01ENHx2Oyt0UnBWeUkoL09SViExdSg5LnNWQnh3''@;'; put 'put ''OHVqdkM4KSlTUjRsJGQsXm07cjwjL21kPiRURDRTemlWYnFGLCpdWl1WWmQ9ak1baHpJQExEJGkzKUshPENTMiF6dyNwTXJGPjcvSns+TXFGREApVmFwJFE4WFZQQDAxWipCZVQ5bl84X1pYdyp+MFM6dW5xdTxnLl5mVFE2bmRsa3lvSXs3W2Jbey82VUtPRjc3bzdTIkQrZ3ZIRCFiRS4ral1f''@;'; put 'put ''W0RYXVtIa05OTW0+QzRUIiZVUCYmdT47UUlsWzM7N0BzRD8zdFl2PF1CX2pJXnFVLEZ6e15AVS5oMWl1NW49fCkwLlVbR2l+Rz9CVyk4MTNicDhJVSZGR042O0J6SlVqNFZjeWhab3g/YDBaajtrRkN1XnxNVVQzIVUre083Q1hVIVluLHQwNkAyNHB+OD9uMD9CVjIjLDFjTUZOMGU6RW1ie0FS''@;'; put 'put ''bCFgV353byVgb2k9PCYiSWtzSzFeQyF3NENmdk5vZ3shUnsxV3RVKiVndTZ4cj0jNTk8JnlSJX4wREZOfkNEdyJhTC5AIzpKUlFpQlZGRmN8ZVRLdF9sbCJyNS9OTmZ6ZlhWJlJBIjYpKHtWKyMpd15yOWZlZ3x6K0NkcU49PmZMUiNueTJxS2dvKDR4clEiU0hVJWJKMC9PRjsqKTp4U195TUBj''@;'; put 'put ''dkpdPVpkRUBSUDF5OWNSbCkpZklJaWtnMGN7amxCNyF4WD55XnVHTFtJO0treFdrcXF7d0crN0hoYmIialN0VjBwO1ApZil9Oy4pUDhdTTc5ZlNSSzoqSWkoKEsycyZIVFZrTmdsQnVKOVt5Q34xX3lAMzQqI1lYOTdKV2BURyo/U2lpPVE5VXlMeio6Slp5NzJ+IztkUyJuNEo9MDQpXTcoVH47''@;'; put 'put ''fHMzYjh5dmJhRzlRSX5gW25XOSpReDpxXzkhLEY4JVtjVlFfSkRbZHV0OlNqPj9fQjxCQnddImcycWp8Zj41ZyZdRy5aUVJCRCZwWTdhKTRsRnFHIm5yYTtXQC9XaV96QHdkODhtZFFnfD9bX19BUlY4NClsR2E0bHh3emwrdi50Zlt2UUZeZnQhZVBpUVVoSy5GNmNjWkI7V1hBKkI5Sk8yLClf''@;'; put 'put ''UzEvIy84U3ZiNkM5T098YGx0IS9MfHokcngxRUQ/cE47ZjZUWiRifkNrTEBnUnpFRUNoOTNgMG84WFI+a0NmXzcuVmBeeSwkPXk+LilHYy9UPygyZGVefC4yIzBsKHhPS3wsfEp1QEV7YzdjYiZLIytYXlt9RUArLmUleVJ8Qlk5TEsoRlJJSnM2Okp8PzMxb0RvbGMoUSR4KmdaVEpnPTcpIyEw''@;'; put 'put ''UWZwbGpsdCw+SSNOSCs4PWNERjBWcDR6LzgmYkouZTIsMDpwbXtaOE1MXUN6eD1SWD00JlMhRkg2YVA3UX5Td3Zob3RPYzdYTmk2ditWdSpgLFh1VkxZNW8xIXs1SS5zZDg2NjBtKnVAYiV4MGM/Rm07cXFWUSFGY1Y1LldvWmhXOytJdHFUcl50UGt4Li90ajQwfXBTOVtmMWQkOWluMSNTX2s+''@;'; put 'put ''TXl4a0t+OEgsK0BSSy5KTkl6fmo0PFJiQF91PThtPyxjNXIrbyxFTHYiSkg6NmUyXXVaPVV2U2IyUzxENiVYN2A8NmpTT3EieUdYNTlyNGBsc318NDMsKW9nPURgKT9ybD5wQjFZak9gLzd9NlpTQXoldFhlPCQmYy5vdGh7IWQ6LzxyR3hEMF0odyVpbzJUZ0w7JjlzI3ozSD1iXnVHVy9fZkdg''@;'; put 'put ''L1RbW0hLRlF1RHRnUjIyZGV0bUpuWUhiZ3hhfXUweFBFLFokfW4vcWp5L0NlS3NqK3JxZ0Y9YVdzTn5NK0g8WyZkWkRrc31QZTc0SyU/MSsyUXB8LnJ4KllrWFE3MT91ZC5nQEYmcHAjSE9NW24iQFldO2Q6I2IvbDV1IXArWDBAfWw9N3Zla3Y1TkZ3JU5HUzl5Yk4+QD1+SkMmekIoYHVYUVFR''@;'; put 'put ''ZHZyd0owJXNJXnEka2c5d0Q5O0ZfLnIrRyh8eDV8W11mOCNuKzptSyVLO35BUUNBVzByU3dqXXdpLEhPKnQia3V9aU1uYE57aksmeU1OUWV7dDBBY05yUGk+L21UI3JeOHx3SCUyaWN9WTlQRiwvb1BOODVuaXYpMG5TbnN3PGVqfkJ5S3xMZTl7MWAqen1NfWpjTjxnWzAwWm5hVG0lWnAueEVP''@;'; put 'put ''RH1Wcis/bHNLIUZdYTRgYUdtMHkiWUM6LChAe0t5KzF5OF87RitGSyRDeGM/RnliSzYuWGhBdHpVQ2NhLCV4ZCFWK3YpMFhjRyVNTTRnTThWZ3cjUH1SIjF4SEtwWWpPMFQ8KmlGbVdWaU03OypYbkkze1tXbypOanYiPksscThPdlR0PHxAMCIuMD84XXcoSW4qeU1zO2N8e3tzNmw2Yjo7VzRM''@;'; put 'put ''Q3lvdWwoRyo4RHMlSWAkYUpeTTYvP0N4V3oxSiFDQjhZX3omLzFLNEpBe2FQK29edy8uTEEmRE1tdF5gciFOJXs/fT8rSz80MVhzQyRQYWNpOyI2Snx5bG1uSkhfYn0xe0E6Z2hraEJtYjZoVkkkWW87dF1bZU09amwwenM7bVEsKlM8c1dJXkYlPjF0b29bfEYpWlsxLm81PjpBW21mN2s+TW1D''@;'; put 'put ''L3EkZndGej1UT1RMSFJPJl19XSk3SEBtI1tgRUZaRSt5LHJaOSFVKzQ+MDB7ayExRyg5dmZ8OiNrYEJYcXlQRzkzeW0/NzReOXFncTxhYXN2dXxmZSNwb0pAXncjSGZMWXRwa0khfXE5ZU9vIkQjKz5ENisici8qTGBpK2opQHt0dnQhTVRaWT1PQHRNJDtHQVcxbXtHVV0hTndWVF5uPkYlUTIw''@;'; put 'put ''Q3xvNXRgIW9hOjBGbU94TndlIzpoc3YxWztfTnR2KkNhPnBXRkV9VmZ8dV1QXW1Laz9KJm86UUk9Wnc6MGFjZFBlISZnaS9+NkdUdXB9Z1tPVmMqfU9rQHlsZjRvRm0+JkxKUWZFL0tYU3xnTUAmRHxydSM1b1Jycy5hYlA7JVEvJTBlZj1BYGszP3o9a2h1UV5HKVo2eWEqbHVRPDVmc1NvX1Qo''@;'; put 'put ''Mm18V1UqJWdZSylxQCNXa2ZKck1BTiNla3xmX1V4RnZnNSkuUktWO3Z4b0VFd0B2fmNwdXA+RT9ecHlVInZ8XVZJbldQOUwpe2R0Iy42KEtpUX43aT9YRmttc1gzTzVGWnlSNS57djE9M0lfczdOaHF0SmJlOENYfH0qOlRjaz41eC5edWtOT21pfElNTiN0ajMweyY/SUNpbjA4WCZlXnZCMGQy''@;'; put 'put ''TnB1Q1MuRFpoXnQ0cjdlZFY6YXV8PFlZV2dZR1Z+Zj1Udk8sZ0ZSNUtxIS8qa3N8aVQ5RVUjaVB6JiMpNDpuZ3h0Uld4SjwrITtnJGNvalkrRl1zazprV358R2Bfam1YS1EoJFZITntVaFt+I3g9bExdI2RHO2NIV0RYdWsmdlFUM189RH1zbXU4eG9iO0RDUGNgNCwwP0svclRqQmRtNlhOLkdO''@;'; put 'put ''WTBqMW9IPDxlWF1Fdj4lQiM7dSg3Kj1oaUYjcjp2cV4vYCI7fU5LUklmdD0leilZeDpWX185PnwhRFB6YUxrdUxXJG8uTUxLZX48QF49fDtGMmk2NnVUdmojN2hKVVQzYkhOKDVEeGtHaXRgSV15PTphU05RMW8zYmJfZjtkaFM8dSkmPjBSLHF4Lz0yZzg0KTRTMzUoL0NWJHUzbSVWQ3UhZyRs''@;'; put 'put ''X1Z2dVIhNnZ7Rzg9NFdoYnVVYkRCaTdsRCM1Y3J3JTUhKHpsQ3B7WW9zP3MhZTc+PyRTbllyZDp6ZSRJPUMkSjtySU9vMnV3JXJNV1lwY2ElcU1RK0REYEhWQGc8a2MsPT5WN2tsXlZeTHB3OTU1U11Td080dzNuXnIhXiVmSzAvcXwlRiFfRWs9fHJDcCg1Ol08eD1rUy9KPmBxbltYVVBJMlNT''@;'; put 'put ''MzJWc11mPG1kN0hLQjguN019dUlXTVc3cjhoZVh9USU0QS9nJS9RMm95Py9FVlVAOHZ6Xmp2Kn5Lb0M5emVvLjZ0NmxoblF7MXRoa1E9bEJRO1Q3VWQuJU95Q3NqRmtScGw7eEQiIz46OzgjPWldIWRTYG43I14qWzA7PF9GJWp3ZHhQTzN8dHphV297MmFkVj5iOXxeeG04UW1CTGtadUZ3LDx+''@;'; put 'put ''WVUxNX5KUmkjRjJeLzE8YDNNQDpHM1M4MDlxOyZbKyViLilLM3I8UFJDKzFJYCpRcTFpfGdOI0tifnZreWpIUF5QdkZTOTJwXUZ8SHM+ejZQWU9edm9iRT4qZTRFOyNNPnpQPyNReDtlRiIvZnNMaFVmXXpIUyQwMDh6PytRRkUsWlt4L28kYHlRRyFMNSVJSFB2IkZjdURQJWFsPExmW2BhI3hO''@;'; put 'put ''dGU+ZiwqNjs4ZSlhJElNYC9hfStUPTAiaW1gUElLInckTzpLZWZ+XnYkPmNLUW1JTzFlbHcoSVRpI3hGalNrPDR4O11Cdm9FejJlPGhLW0F8Kk9FQD9MQmteZytSMUd+cXg2N1g1WjVzQEcwJlJgTj9AZnoye1hofns/ITdqREdyLEFEOCZiNmR8TFNOLE49JUgvOHxKOXkvJWElRHZZXnhpUHcp''@;'; put 'put ''UG9eZ3QoIjgjTntZcikiZm0jMCM6aVBGZzp2I15jVCt8cURvVVUuUH5yP2xsenN+NH1vfT0xMVEoO2xGdD5de2MpfHleKSVed1J7TFNRNykiL084LChpcGlUbGwmVXlURm5aM2RzaipKKjtxRVJMU1N8R3VTZF8hRzc/Nj4ue24vJTNOOmhEUi8jU1dFNTlKNitlOnw3UFBqOEBxPkhEVypRWjZb''@;'; put 'put ''aSplPTosXzgrbz9LWTMrX3ImbSlKaU5OR1dAa0drNC8rXTQrcWpkV3k1VFcjbTouLkczQlNGVmc7ISpKOEZXPlRCcXtYZEMkY0t9bFdNV0pLb1t+X2FTI3NldEp4bWlYbU5AMFNAfDFJZTttSmU/SSJENXllTUV6KX0uJWNZU0RBO2hMNk5WNzpCTFR1VkZRKEd4bHtBWVpmXVIzYnNuNjZ1XT5m''@;'; put 'put ''P3tfOVtxbXhEPDUvbl9GLHBFTnA+RztEL3Mwck5JJC4qLih6PjNiQUs5cjJqdkNlcXRmP00lTjh2cURdIjkhM3lPIVNHdW8iL0htMFguZlApV0AjK00mYGdeXkVCOUxGeiVLV358IlQlTCVETlZaczdpJChhfGBycVY7Qz5FOzdeWTZ6I3lSX0lbLGI3RHd+VEkvfkl3NnVjX259OTY0dEgqW2Rs''@;'; put 'put ''VzcwYGclQylSMCRsSSkoVjpzMCNiMiQyTCM1PSooKTkyRWplaUFPXSspajNzeDV5QE0qdGNgazZ5QnZ3Q3JTdS83OiJyU1RQenVkb1o1ZTFFc1I3dFpFYS4+ZFVOcSMya0FaVEQwP3N4YnZ6cVVFKXFZKjpgK2NKJX43JnR0UEJePSxOMTNUeTNXIVIldFdWdWtxU0UrTEJbMUZ9KlorczBfKTsz''@;'; put 'put ''UHBrT11BIz5jcyYuaWp8KjZWJV85Z3N8QzljeH1JczlhK0k2KT01d19sYFFjJkw2djMjRTJ7b2p3S2FNNEdGNUxGR21jViUhJmRuLnhJOjBQPFcldUwhbDNGITYsWVdNJCs+all8QDlbTTklKmNqbHs4eyZ5U208YX1vK2lodj1RUUpUcShiJCl4MHtvc2RGayZGeVFpezlNeFo3KipTPX5aYWZ+''@;'; put 'put ''biVPKnxYbFcxaWJLRlF9KG50dGQ/KlN3W1p8dl0ydyI9QWRlPDx0USFxamdnOSN0WjRgVlpFfFhRRD98JGR3JipNYlVzayt6TG9sRko+KD9zYDRSQ2FbUXswYzlddi84LDpMdjhGOm1ZaFt+Il5lSUUmaEsvI0A3N3k4QGRhUURCeTBGVDEweCZqP3J6UDhRRThYMjxUS0dLKjA4OzltcmJiWWB9''@;'; put 'put ''bWVqbC5vMCJrfCt7YFYzVlJZdVMpPHkpQj9aejtOY09fJVR8PTBYXit1VXA/dCZST25oI3R5PFpKdWM1MXsxYXslMm4/R3Z5LGY2TkVXXk40OjNFW3FZWD98N1BLMHUqU1V2flgpS0okRU5fZUwxQHN6JTZMazI8ZFdeYXJQSjBYc0Y+bjpCVWYjQm89cWBBU2xIamF2MElgIlg8SnRSWjdAPS47''@;'; put 'put ''Uj5zQEMvT19BQEkyfUlGc3lTdHZMMnZnYXNpdVJYW1lkJGthc0d7RE1DOVBmZHUxSEtGY3ZhMVRtKn5CLG9tamF1IV9rTjZDSDN9P1FMNnpvZnUoQ0p3UmpuYEEkIz1LOzxIPno+VEBqOXNofGRfY0t0QktRS1NpYUNJaHFaMEFLcC5nZDhpLGNDZX04c042YnpkfW97JnE1MDFgN11TNzVaNzBp''@;'; put 'put ''e1dfJnB6fUBMOVR7Ilkpfj07OllrSC9DR11MTH4rYyZOcHU9KG9bYCJeLEooYnU5cFBXaE9dUCJKUH5yWGZBVC9hQn5dZVZPJHk7a3skSmE0KD1+NXR7SFFSR1JUfTdJSTdKdTtRWjUuJjBgcmU9NyUvbCVwTjE6VCxWdjJ0P29OZj8xUC5UWjYvNV5sLGw0X3ZDWDlvZXp4dmxhZzc2UmlaOyMk''@;'; put 'put ''NThUVUsrJHdWUnJxOnFkQ1hwcEJeMSVNXXl3e01CW31oSFZbX247SzEqaDFNRV5KbTtgIyVAMSwkUjN8YERYY3AjdFgvLnI5VTZ7RCI4eEBUW0NRYDU3Iyl1MkQxY3Y2UkxVN3BzVXFwJHw1PGd9Ylo+SipvNChuMXNERz5KW3VWcHM0TCQ8NlE6Qztwd3xdMko0XiVjcTc4SXgjUTcuKk54M2Qv''@;'; put 'put ''PypwOWwyN1FIVEJdSGAqdXpiTVdEMmQ0VTVPLnlGJjxCcHBCOHU9ekpUMGVZbzZPYkNRa0tGaiQ5JjEwbldPbE9bVWpORjZaW2NOYEszRSw0VDBXVHJkT1hqeFRxW257MDV0SEM/ezNiSVRLPVQuelkqbW00bUVQVSwxKkllZXRhKzNBaGNXJDRxblkrSlp3WyQqWXYoP3ZnImdbP1VmPy9CelFf''@;'; put 'put ''MVtPSmtEb3dMOS9VNmk+VSpYSjtVJXFmbmtXVytyPXxHeFlLK2ZDfmsua0hQXV9YTSQmakxBfS5Rc2V6P3NRbk4xSWpHVSl+NUE2SHsxO0NodHZVVFI2KEVePHUoajk2bC5iVzZXZ19UZDpfeFAwdD9IfGY0Q0h3djYrLmglYnpeKGJvNSFTNFE9dys2QFJZdSwkZDg1Z1hWPiNoUHp8JCpDNkRj''@;'; put 'put ''KnB6eS5XP1RNIWNreDF3bCRSLjw8TCIlRi9uNUI0LEs6V2VMPEE1I1UrfjlebjM0JUo2Mz1MTzVHYkBEflN0Y34oVnZIJW5afG5lKXtAS31PTy93WV83SnFwWDV3UmIqViRyZEk2OXFbPHtKKTV0ZFtpUTZCUiIraTU6cSQhZVtHUU82cnFpJmFuWVF5aW9UR1g+Zy5bLktWc1ZTbTVKWUhiZWBD''@;'; put 'put ''SnhGc0JfPl9pfGoiPWd7RUZUQ0ApS0QhW359MXRfdSpFRXg2YCIlc25zaVB5aWg4c2lhYSolVkpFU2lHT1E9TlIsP1s0Mz9+Z10qXSEvPn57bm5DK089cj5kOEwzPGl3Zm9oLyJnJihvIzRDUk41cjJbSEdeK15yM2J2dncmaDdROCEpJWkxTShJSVprR3tZPGZpW2lgaVd7YV5APDBxfkUxUlt3''@;'; put 'put ''JV41Yy4oM2I3cihPLF9lai5vcUdRPkg1USNDI3E6VT9PJUA4bnxYWDNfPG8kYjUoI25wPzNEaWgoJXpTRjlJbEdGPXApdiFgYCUzJkBCIXZqUzZtX3QlSi84WEV5U34iKlVVLn0lPC5HUERCUUZ7UEtjfSxzdjMmWG9hUjRERzRGYkc1JS4/cnQqaCZIXzVXNmJpaXtfJEglWWZvQHdYP1d9Sig6''@;'; put 'put ''RTsoIytoS2R7eyxYdEI9bFt9Q2l6PjY0WTVHLHhafVF7Y344aW1zPHJPZG1we207V0h5ckdoKXJwSFlreDlnKj5DcSkpbGRLPCRlTThrN15UV3hGUD8jJXR8Uy5gUyRvUVk/SyErSzd8d0p5I3NIKmlUO000NlskIzRuXyhra1FVdFY0PW8vaGBPPSM+fm9aYiNUUyQ9KStySjFqPTY2bX5Md0ls''@;'; put 'put ''QClLVGA7Yns5MVBwUld0TTNPYTdufnBbSkAmeSJ3X1t3SnF0PG8vM098TVd7T15eeSMzY0MwbDNaMTZWMGM4UElvNDY7Q2RmY2x6U19ZPmJeLH4pUGNjYi5rN1tuOGV5SyNEJSN8dGZoTzxWLF1SOU08MSFmSntFKyFNLl92SCxmMiNMZGVGZWAiSFp1eTlaIjxFWC5BRGBCUF1oLmVJYl8xUHQm''@;'; put 'put ''OFdScyljRSluSGZ4ZDZ7SmNMP11vd21+VnNMcS5mfWlLcD8oPCNoOnw9a2l+L3picHcySTprMHZUN0gxVnF7Z348N0RHUTx4TjYreiFhfjB2cnldez1JWkVnakd5MDRpWW8wSHVOMSh3KUovZ1MuemMjVlYsUj4lcDcxKTt0PWQ/YVExK3NPYkpJKEEyLiFNfXI4diouUTJRWHZ0MCg5WnNAe1pp''@;'; put 'put ''fHpzX0M4KGU9P0xWYytdOmlRfjQ5UGcjZm8/LEkuczc0aDpoYz18PiUqcCtBSCFhYj82TVtbSl4qQVk5ZExeYGtHbDJYI0YmRFlZRXlNSHJ2RndGc2hbPUNqVmxkfWx5aVVlTkk3JG1veD07ZDpIRix0MWxhLFBRMXVXaShDN3AuLElKNiNFTWlvTEksW3FSP1U2Jl9xVmYkPHRrQHUpOVMoSyFN''@;'; put 'put ''Oj04cT11byU4MTZlJl9PdzNuQixTITZKRmh1THo8SDpKNkJ9N0l8bSlMUj06QVlkI20oLipJeHA5eHs+ZUhZbFN2QFp0VjQyfDo6QncuJFI+bmJLMFB3IXFKRVVMcUIqPkRhZT9vS0FhUWh0YSlfSlZwQEtCdUUmZCp9VVI8W2J5KTJDQ2g4Lm9URWZRPFJ2VylDWSwrY2xpdEdIUXtMQV5+WUBw''@;'; put 'put ''aSVwKDh3d1NZdVFpWEV3YDIkQEhgNHhqYl5GK3hwL1soUDA4WCN9cCVHSVsxJHMwd318Z2RXemh6NFV8OCFLVUo7Q1NQc2wkVzRCVls4ejJXKDVqUD17MUpnMi8rdC5BYndtOks3VDBTK09NWFAoJiN5Y21CXzgmayZoYUFdJV47ejBmMTY9UChGSUxfJjpbNTA7ZEdweH58Wzk1KiZ4QW5oW1Jk''@;'; put 'put ''JEpLJlpUc3k1Om9la0lARkIuJSJkaGM6Pm0yQjVjbURgdHZKdiZnREZ3Tz4rd359bV9ZQ3IlU1o1UCg+SncvVzRBSDpEa3FrSlt4aV9mfXgkOmMrNHE1I24+cCpFW0YsM19WQEAsJCY/JSp5Zl92Tl01WWhBVSUsVkdydn02dzx6bGJdQVZ+Sm9ERCRCeSQ+NjFNVDt7cjRjOFtLSEc6e0hwSj5D''@;'; put 'put ''TGF2eC4lNjhVdUp1WntzI0NdbVBoUzY6b0VYVVFZcmlmQzRBfSpnPn4/UGM9ODlHa0B4MUNRezQxViYuZnYvV352OEhMbVNOTzNNZUgsYUQoUn0oaFpQSUJgIyIzUzR0ODdodnFsSnk3KkpMPSlrKGowO2E2Lj5LJkVQOCxYXlFDISRecCg3azJEUzcyMFpYcC93JWlEaGcoflsvbz5lMEtkPmVD''@;'; put 'put ''UmpwM3lXQ2JAXnhZREJrd2hxOC8xRWdQbkBLXih1KlVSe1I2IXsxSmNINS4vJjVQbjsreHlNMWVYMV8kOGlKOS4+K2JHcSZed1lePGFgbHtyZ0BuRExOc1hXfUxBN3tScEs4XSVjOHk+S003RyxqWFd4SHJNIzc6STYzVmA0YztdJVJWSFVSXyJlN2FPJlpdZSJ9dF5oam17TTZ+OmFDRT44Z3h4''@;'; put 'put ''YVV6M341aF9sSTsvU2o4VFghZGVWJCRNPFFCPjU6IT5uXUp0Tk5XfC9LdlVxRCJjazBwe0JVK2FXNCtaaHg8bFBidiljJk49Kz8wNTR4R2ksP3dML1dbMzhESStdYFZnU1QxT0dePjF5OFJYMjkvd01AYjVWWW59MX5wWUx8NFpmSW4+czRUV3BEbmd1cyFQWGZ+fjRgZiIyY0RfNiteM189L2wo''@;'; put 'put ''Im9CalBAc197cCtJYmpbRlpaP2hLemlxN2llKSpUdUYrZD92fEApTEgqOGczQEJESTJgalZtfjE+MWtQZipfSHhkSk47MHIvSU5rb0AoODJvWnFjOzdQUjk3UXkwZkM5O1Eka3YrSmtLTCNhSyg8Z202UzdEKWdFWFJuPEZYMHZhL2tsPE9IO28qUXF+W1QiOjNARmAzMClxZHxVYE9kdl9HLil7''@;'; put 'put ''KnVqblhQM25iQlEmenY0NFttJEF+REAwWVliP1psPiU8L2FXMi54cSMpI3llPk06ZzFHXzl1TiIvVUlZaGwpTlFaTjUwZj4qVnBeaDJlR0pzUFdoWSZbdjRPY3F+fTUzNFI6JSxmP0FRM3B6KXAmMnFPPWA8bVluKEBhKVc0NnlfUlpbVTQ0VkpQLjRXT2c9YEtPe0QpUzkzaj9yR1FQR0ZDNnVL''@;'; put 'put ''dk4iKj5vdCVqfTkvM0MyKC9kMWMkKGZ6UHNSRi41aSslXUs2eDZgZSlXXWFqK1RHNnBNLilbP3tNWWV7fWJUcTpmM0xvWHNgeX1DRDVxIzB6JFY1ZmRyZl5jeUA1NyhsJHMjeDUjdCFYTlR9QXg4TEducHNmRHZ8QytWZ3RVQmZWISQiQDltalRQVGIkdjk2KighPyphTmdyfF9McXIoXSZfST5S''@;'; put 'put ''cFFMUDtDeTIlaWUoIURGL2FpUT55IjVAUUI1L0s5RUEuV25DWUZ1Ri4oPDtac3tyLmZ9QjBRdFdmTCpdNC5TNyohVEdrcktKLFBNWlo3KG48JSRoI2w0JEk8NEtvPCh3TD8uNmtuMUQiSihzL3teW31GaHw6Rm1ddmwzcGR7JWd9YEtkKEJWbl1weT55Pzc2cmx5W3VxKGohKi94WEJXUn05Zl91''@;'; put 'put ''YlRBK019TVNkbn0lLFBGNm5DVihfYWEzaW1GVU02e2QpO3IuKTNyVUlyPHhRPWhlLyx2RXMkSFZgNG4jJFBobyRCUHhhUGJfNFspcmRQfEpGP257P0ksKGxTT3tbPUFXKk9TT1pOYTV3c19xMCZAYX5sQVlvZiJmZD4+WTFoXiJQeiEmNnJpVE1zOHp+PnxrImwieEVrNyN4MDoxRmpzQztTMEpW''@;'; put 'put ''dElKUWZIY0sjIkJ0WkkpfiszU1UjXWhyLklKdEY1WC8uLn5yV0F6ZUdAdHlLfH5hY3p5flpnREskYi9jZy5ZJWApbCxWbEUlRSpAPS90U05FI0MibHBzKUNbWVtuKSVLW2p+VW9kLjp8UFhoQW02MURTJWFAYTk6RG0zVFtNTyJ2O0EveU8kbGhwSDkhSXBlO2tZYWc2KXJWOTxuS1klMj1jKW9J''@;'; put 'put ''KFYpcCtYWjxja0FEeyljZ085XnFKV0VwLEFjRXYjbDMwN3xlT1IhInE7WUo2b0UoYWApJnt9Q1RvPTMjSTxZTnYmdlkqbl1BPTB3cmZ+O3xueX1SRUh+Njg9bjZoVyx7NkxSfiprNHkxUD07Q0BbJmMqLmMrPj0+VUokX00kOi9gTiNubVtKPGMhWkksYXFjRTBrJVhjSmBdS116Zl52enc5NUlN''@;'; put 'put ''PHMuWXoyMDVDUnpnRkhRelNlNk1jang+PyxUNUVzUWI5T3N3TVV8K31ZO0RWXUouYTtnRipxb3xoW3FnYDZIeVk/eW9JOUVzODdmN2RVWGhsNyZxVUNSc28wdVE9S3o7aHElbWI/QGQ2XUEsd0kpRG1XaVlZTlc9Q09wbWc9Y111W004R3B4PV1oeGRAZHZ7LHE4eUBYamwuT2thKyJgPm4iMTlP''@;'; put 'put ''M0xaUFRGVSQ8MT1Rc3pSNVhnKkhINDIlNTNNRUJgRUBfWkY4UTc6WVsmdUk3JitLJT5YPkZpVDYiZWtVTUcvPj5TTXdtXj9KaWYhSVg3eFBHSThXPEdNfVgwWWIza210NzhqN29UbFpDVH4ycmZNQ2JLUDosdnt3MkkyJHR8fWokaTYsWm95Q28yNFViT3pOV3xoYUwldXhoezRfUmVVYUxiO3lE''@;'; put 'put ''WmNFVXc3dj5pTnZzXiU6Ln04MngjKWwlLildI3p2Sz5II05JPDopIXpEWkcyXzNlb0Q3RWUxZEFbRGorMmNxXnAkXSlNa09ue31fK1peY2BDLkpbLntfNjJObkdYO1R5emYkakV2ZTQuN0s5WjhdeSg/WUA2Ll1NRnh8NHRbQ1A6MTwmRHBISXYyOGdFKDt7P0gyW0Y5MTdJdlBrKSJSc2lQcyZz''@;'; put 'put ''Ty4/ZWZTdGpVQ1c5dW5xXSh1Y0VjXUxseGp7cCgjTyk3Wyo2eWs/MWlpS1lsdURDaFZqQmRpdC93NlR1MFRYWjI0SSNlJllZXn5RVlNdZi9eMWBDXmdGP0RSIUZTO1dQKzVPQi5FWk91NDp9T3pySERqI0lgR18zPjBFNX09LzEiLDNTOihle3Ukb1V3LytPbTI8L1hXKVpFc3E7OX1bRElGR1s7''@;'; put 'put ''VTYzb3RoKzYsLkd8WDRRSlgyfjlaIzNBSjY6MExZQ2o+aHM6Zmo/bClDYVBqMjRPZVhKUE0mK35JVlY0OSZPOyVFfWA5fXJ0I2pwLGNGfT4zPD18P1RGNUplRFIoQTs2KTo7K3VIXnhJPUM6c0UlP1l2M2cpTmc8UVMvQGJ9JWNAWHdtZF1XX0RudnJjI0JVRklOdV1ULyFyYTkodyNNRXdnZ0xY''@;'; put 'put ''QVNrTVNTIS8oRHdiPDpALi49Rkc6Uk5IVCxNNXhnQ1hdIXMud0Fpa1tYSyJ+RCYjbCtfQkY7PGtvJl1tUDUkXiRsSldxQnNFWXQoKFd7akQmTFVTflRVLG4jPGFNSnBXeV9yTUA5b0glc0ZqMCluNWl4ZmYsWjY0TmFuO1kmQSh2MD1eNWFlXjVZNFJRfi5xTn1VTVcldjJKWG4vQENrdE5AfWkl''@;'; put 'put ''PkdWSVBtciZofTJbM0krST9nNW10Jng8OkhUWE1dfkxWYkwldWtOIVRDNGZHTypYOGoiU3Q8cilxLCRQSXVCNixJJCR9e1FIXzBKOmhvUkdealhrY3EkOjViTzx9UjFhRlMjOEYvP0hBTDNXO2ZIQ2lyOCtNalB2XzlkbmVZfFEhIVdNSVs1RmVvOjQ0d1omMEZ3SSgjanhDKjwifVtBKlBKZUtS''@;'; put 'put ''YUl8Zk9lJllfUWxZaCJiPDJiXWhXSlIuLispPy8vTk1pTmwyN2d7WEhmbUJBP2NpUmtGWlh5ZS9nWEM6NilzWG9zWGB7R3UyUVZlIlVOVUohZV99ek9CQE5SI3gjZEBtJXspcjQrKEJiL1tGRn0zXUBBQzdLSmA7ZHgsS0VPWmE5W3FOQTQoN1NqI21BX3Z4cTdDUiN4ciZyZkxRP1hwXkgvWEos''@;'; put 'put ''Nz5MfnEockhqNEt6dmIuOzA+YDZeIjpwfVo4Vit8UHMyWjEuQCRjeUlwdl19amhBPl12d35ZayVkK08iMXkxW3dGX3ZgVzhjaitkZ0BaZUolSikwOi5MIUpqWi8jZFR1fVZjPEU1akcoa1g4KXZ1NWojNXQ0Ul9XQT5CQlRzKmVtYGQpWzR2dVVDfSxvenc7TURKbkd0I2FdZSpDZDFiZywwY0tO''@;'; put 'put ''SShaS2FLPXVFYy5MbXszVn1ucks1WjJ7V2hidzl5I2lLTzd4bFBrbj1wTE5JSmZXWEZRQGJQQUN2dFElY21VMnZHLldldnJ+bjlQU0RjNmJifUYjbj0/bChrJD4qbDRAfTssRzA9SSxUJGBycDNEQEwvd0VyZ1IhT0ZQPUR4bj0vZ0tsKjlNSFQ7SG1zY1BIW25rcCorMFB7TT9+KiRUSGVsbn1E''@;'; put 'put ''XWRqUFZLKzxSTCw8fjMwJEhBY1QxKjF0RFpvaz5WakJxUE5GLGs5NiJ2PF50YklmeDRFNip2UkJSOUhqRGB3RikyWG0uL2xBMH0vfj8xOzRZX0hbJXwzO145QDM6SS87ZCtGIjt6SlcmciYyNTx+LFI7XylzYmZDLFc8L2UwNkIsSExhK01qWXpDKVlAKk1UNS8vcWl7OTJjdEB8NyR6cVQud3th''@;'; put 'put ''PndjQVpQZVJ3dDE/MjFScHVoXjIzKkohSkJHPjhwYWNyOmghUV5nSjNlXyZXPkllWXtVWmtSKFFidWREL0gseXJlb2dDQEVgKFtwUzlOLF92dlFadFdOIT0vX1dkSS5LYk8/aTs4UGozPUM3cm5kUU5DOjNWUzZFI0JgWmRbQTZpWSZ+NHZlTD92aFUlYl4pNSYxKjZDZGYpMSZ2SUpYUm8pXl0m''@;'; put 'put ''QzBTODRqIm9KdUhvUH4sfVokKTV8L0JPSGk/ImdfZmF8IWVAenY+WmBnUDRsdWQyNyM5fV9fLzxZQjdweSomOz8kPklWMmJQR14zKDRZV1tDdUpoXiMiRm5qXixnNyJ3ZT5YKCJ6N3dZelhkdUxqR1I7a1MoJlNvMG0+SyxzeEtPQzhXaUJlMj9KT2o/MHFNU0xZTWR1XXZhZj9dTGlOckpBeC9w''@;'; put 'put ''R2tAWmEvPmxzU2ZmJip0NF1Yd2Z+JF9DWn0qVChDMGU7KiJDRX1WSjduVV9mQ1dRV3tmc0VLVFooYmFXSz9nSVBtbjM/cih2YSs3NSlmWVEiWi8rPnpVVyp5Oy4ySjkoOCxgXm4kMSg8QWVSKXErWypCPVlaa2Y2SWZyKUlYMDpDc2BXX3x7ZExEXkNZUnIvZFNAKSIjNUldPiE8djJoTn1iRV9m''@;'; put 'put ''UnVTfkV6JjFgJDU+QyNyc1soaFQ3WDtwKlVDdHhCaVI6UmRCZCVUUV1RfXVPOV4jZXFGVHpYc1UuKDU1L2B+akU1fCJ4K0RvJHUrLzF6Z3A/QWR0ImRhdT1KcCssS00qVUgwcHZ8eF9iKE47WUt2YHMpcWVefFB7YD8yJCNTZn1JRVR+OWVRRGdwZlQrdT58Z3JbRyhTfU9eY1h7ditXNGhkUDwo''@;'; put 'put ''aCR2WllhPjx2RyFBbmNzQHF6PyNKOitfdD4rVWlpa1IwVS9rUnxTIWpzQzc0eUxbN2lsNztdZElzVkB0b1Z9JmBIXmNaTV5IVXQ/Xkg4LFUpRUBJLkZPRDklRTgkIUxOPmVON3wrI3k4c35GfkxPfU5UekNGezZ0eyomSFtPInJgZCh2Um05bCJWdCEhNT9RKGRRZ1dqVFRvdTosSkhsRmAmeU1T''@;'; put 'put ''c2lPPFpDJiJbI0gqRWVjUCZGdGtffiklentgV3FQK0JRWjJVUUdXTiQ9fiV6eCxxSWxeTGgxI14xK1l1K3VvNzZpZEN6UTddODpabnQkOUk5eSZUQV5KOTYmZE1UdzBqUXQ9fGhTK1B2Kj0rIWYpOkI6SH56THVsVjd9elFMWT1bRms9X0xgb0U6PV9QUjgoTnlbZyRWU3RdVU1rMmVHPjpzZl5X''@;'; put 'put ''RiElSyxhe1cjS2YzN0dRckckIzNodmVOSXd4MXVhMCpkSypxY0xDKHA6ajNbUnt7LzxBUmApZlRySHMqW0h0VClUam07RzxGKGBTTjg/e3VaPUpQUnAjVzR6bDN3d1YpfWR9SUF7SDVNK0NTRUlBKUxVI0NVKUZ6VWlEMkRdUTI+WFk9RH5uRCpzUDEpcUFlUjB5ajoyRV9GdFBMMFU4OGYkP2hm''@;'; put 'put ''LjVCbUNgbWx+OG1FQnFuRENtUXZfZk9BV0xJRXRySzJAVGpdR2F9dCVWUlJwdCM4bWxyZmBkIVtAZ1IjaGsvWzc3eHpsdCh1IyJ8NHd7NisxUzJsaXI5MjNDMm94dWlkeUpuX0ordWhYdSlOakE7PXomT3JYOWhAen4yJl1feyhiUUd1JXY3cy4vc3hmYkk7bStlSWIkJjR9d3cvQFcwVWgoZ2RD''@;'; put 'put ''dz1HSzVvPURhOiV3LDF0e3wzdypgTE06cj5lUG5OWSNqfWk7b248KE9QX1kxazpdJVpkeSgwXn4+NkdPQ2kjb2g7NmMrS1tNLCVqd3EhNk1jPyFTXlRbe3dsYV0zVUFiV044OnAqfU16XjxEcWIwdnJmQW5We2o5JkZsWmAkdTdaKVpZSzd5ODwpRGQiUWA5RDYyZH1rN3l6NXhvKGwwdUhNT1BS''@;'; put 'put ''UDVkeH51US9zJFhLUnQ5aCN2PDNiMnx9SV52QlIpQ3A8OnkvUmg4P0xrZDlkdjgwalklW2RydlolZWBqaiRZQF0jUU4sZjxGfCVARWwhIy45LiR7KzhqOVs1VGAsSnBII0JaOV45VnR3Z2QqQyozIm8+fnRzYyt2ZVNpY2c7SCE5YTVhcEpiY0Q0dXo1RVlaLFtTL2QkfXl7aDYwKDJwS11uNHxM''@;'; put 'put ''d1NpUHR0dH0wX2QjO2xmLmtCeytXc0h2amNeKH47P1R6PnJydG82dS5SMms7Wnlxdy88JS9aY3o+XS53X2RNSUJ0Vl9EVTtDTDZQPmFvbkgjKGBrP0hFfXNDfmIoKkkpUVVjdXQmcDdiI1ssb30leTNtWEpNSEZ0QjVefHRoVjpXMyJhRG9GVX53SWchU2VCWnJtNDFlYEslMGxDYi9Xb3ArdTtm''@;'; put 'put ''M3BaOVE5YlJKSHFeRkcxYHB8YGl+MnFMaiJJbFYibmlRcmxEdUNLRDRiL1JpRV5bRl5Ga2BoTjcyQFg5dTVOVCkkQjo/fm8lKX1Je2xYZDNGUmV3NkJQJC5HPTYld11vTDMldTNeWighSHZaMXZgaVI6aC4uaUJQSj82Z2BGU1lAKnomTStrXV1ncykkQGdAYGMjPn1nXl1rSWhKPzJrP11ufDpT''@;'; put 'put ''cEM0X3JJa2l+QSJKPCwoKlk6XykoMTc7QDUsTkFqOW0rTHNoREtLMEZjfGZEPjldaHx8Yi9lalp8YCoyezdIckROZGVoaTo4USpqJUklIldVI0gjS3ZKW1Ilajo1Xklddy5UO0VibmJGc0VeP1N8RVZ1RDF3KHtAaEcpZnJWUmg1c09JXy5LbHxDPUdTSC5yOmVUbmwqQEM0OF8kflhRT1BNWX14''@;'; put 'put ''fkk8YDJ5fF4wSSY0IXclTW0xNlBjSWFvSG1sRTpyb094d11rTXhCYjl2bTBDb1VeQW5LT2Z+QXhoRDZvcV19UUhrWFkkJDRaTkN1NUxLW1VBcn5rJEtNSmE7W0BJdS9rNGJ1SkZUTC4saWFRZ0ZiamBAdl9De3d0JFlDZXUpT1BPMChHbFRKZDJJZ2k9TEI/V1ZiZ0M/PkgmYzJVXyQ2U3gpdipl''@;'; put 'put ''Ik1fQnIhPkJObEs7PDxdL15FIVcyd3NYW3ZVWEZPU1V2aW54YVBmUDU7aTZHYD5IVXB9enUsLzYuQjYoO0dCYV1rKUleXVpoaGIuXzJ7PkltcylIRzpjaTRwcEVzOSYpWXhFPTh6XStDNkRRfkg+MS5fZyUvY0VqJmRaYDpsZCxOXnlFUmg0RnpbYkw+SiM6fX1yKHZlPHtuKzllSWVoLmt8K0xu''@;'; put 'put ''XlhAN296eE5LJVdQfFN6JHgwb2kpNWIyXVNTKF1DVWk+bzNRVHwrWkFhZzQyYFBkZUtxfm48U3hNQEpQTVBufj0jRFNYPVFPLkF4Km0jMVtQMWo/dFheQiRQantDcHJDS1tQaHwlbDsoNTdrTUE6T1NdeVlrOyRyISoxQ242VXFRIVo8L2E/ZCoicmQwQmtuZHxMZD94SjxDI3ZmTHM/M0RSXllL''@;'; put 'put ''elZJJjc0fixgYnBIKlIsYl5jSCsjfmcraCsyaTw1VVgoQXdTYVhvblF3XkMxYy83aSRPNXNdZ1tgRilyYVpJU2ZSJCUlNCZgc310PSxASjNmR0M7cXc1ckY0bXwuJEF9flFtOEVgZ0VManozJUguOCRRRF42OE5TaWVQQElzPWsyK1ZUKXcpKlFsKD8/X252IV9xV0A3QjxSWHBDeHpqY301LjlP''@;'; put 'put ''djppV0B1K0NaTmVOY09bfDhqeypafnNdW2RYMT5jYnFkPERwVnNZJX5XaVM3bGNqVmtbYUBIZVkvbFR2WjNHOHpIUCgwdlJfZXx1Nj83ajNZeDs3USQ7KyIiWVNvb2NnTD9uZDdnKEhAMjldcFN0Zjl0akJ6QTRjS1c6WlNTPjBmXkdNITByLkRYN1MjXjdSMkdmWjopSCtWN2FLZHlGakNbTiZ4''@;'; put 'put ''SDZmT2BYJnUjazQ5PjZPQjM6W1BWVyp4JGx1ZU92Ll84aW1FPF5FY1U1bippMjNUTTpzLGAhc0NfMixqNldXMH5XeyMlR04ubTciIkw7SjtyazA6Y1UqYX1eK0dzZHZVKHhJWWVuPk9CV2QmTTM3Pn4+NHVNXVAyJEswXyJdRDY+YyU+fmcwbHhoXXx0TUg3PzF2aWtzWGhvNWI3dHpsNzd6dzQy''@;'; put 'put ''U2xlPnZIIyE7QyM3RjM0ZXlHX34yP0lCL1hkOV9Jcnp5bWtEWDFyPTUxMiRoRmBaTjY4XmRUIklPPzJ1JXBoZEJfZEZwc2NAVDY8WygrX2RkdW9rfFIvdn1SbDIjTUBnYTA8KlJbYzp7ZTVGY2hbeHNwMVJRNDJIfHlIQkBqX21zYk4sMDdPViVmJDtuPEwzKSR4KFZ4PUE+ZkQ9dGJVImkrY1Ep''@;'; put 'put ''TD57RjwjO0kzJFNPI1d+eV5BdFckdVNzQHEuYWVkW1FmZ2VkYGYwPWlwJT9AITQhaG10ckQvVEA/TSMvVSxgTkxNdkN8NGB5QEM5NjJrckFpdGh1TEtNOSxMbVkmXyMsJGBoKSFNV2lLMHY1ckhhczAoZFJ8KT8lL0AsJEAzQFkyaT9SR3p8WUlMOEdCVFczKiJXUGdkZzJTWlRiIkZiOU51LFdC''@;'; put 'put ''NFgjZjUvfkdeTzhjeG5CRGgyKEJHRixVJn03S2lrUTN3MUJ9TVRXK3lgbmt+V1JKaGhvQk9lLypOOl5ZNjtLbHk8MUs0UT9XS1VJZXkkfCIvYWpCbHJsWWBvYGUmT3xTbnUzZ0hvTmh3eH15XW9KKmJkcVlta3xRanM4eWAlKWdMM3hfYzk0O1s0eChCIz14MTsva00qfT1AWilwPmV0dU1hSj9R''@;'; put 'put ''XlZRUE9VL2ByMDAkdXNeLypVZi90X1cmO2QhSSEqSixrdWdSLnEibjZkaUcyTmhiUDB6TXswbUcyNz4sIjhlXjddbHNpWXE+QkkwcFZxbCFDTV1XakUlWVE8eT1+UHpUX3g8VHt7OFlHWFBuYmBtOTVGO2cwbVpoVi45aVVJanZAOlM6e2N7SzJLaVZwLDQpPTcpLC9Wez9QfkJbVmx8V2YpZzZX''@;'; put 'put ''VW1EUDQpMnFKV2lFPSheZGJgUUdgYFohNWgwQm91ZF8rVlRhQmp1MUBGREBWOm5kIj4+S0Rqe0J5LDFPUVYuJnZoVFY/Pi5eU2F2eUpAa2NrUWBTbFtvfG1HLE0wU0ZOYmYsYFN6JkZ3JTs+Y1QpO0NHPDZ2R1BCbjNHXjFvSDh8elkpNkdoZGB7eHA0TUlrJVtyXXJvWF1rVUNbNDJ9VHNTVEU+''@;'; put 'put ''RkYmZz5AIWFNelZqcj1ZSkNMMiVjWCpZSk4/PXgoV0pLMDVoaFM7TSx8bXpCYD9wNkMpJmZzfis/a2RFQzx1ST8hXjB7WDhmNEFScGZTIWQ4TXxVTmhzYzRTUF0sTmV1Nm10NHM/P0cuIWIyV3ZgcVhpVXZ7ZmolQHZpfEBTIy4vQCJOXXlONS9mLCJgLzsxYUdPemlKWVJASCIoQ2psTV5fMkww''@;'; put 'put ''dGMiR103VSV9NUBYWjFrOkIycShiflMxOy9tcz44NSNNYGJlVjpdLCtNNj5PPmhGUjUuUn1mSWRsIUpkUF5+T1tEZ3g0cDt8eiJMODxxYXZIPTt+eEMuJmcoQ3hUdFV+eEhDdlNmPGUzRHNbVik9RSF7fk1PVF5CZ0w8VFA+e2drI3lST3FVIlpSTS9lWWRISX5GdlliPnlOIlZzO1c4dT93dyJl''@;'; put 'put ''KDxfO2NvSzxAd0VXIXtuaHxqIj1MYVlZYEdbd3ZNXkJVLmlgRl4wLiZEcmw9MWZwKCZHa3pJNG91eT0/PHJfN0FdUHM0Y0xFVjs0OX1SQTQ+WF5nck4zU3U5Y3YwTzJFd3tkaW0wNlI+NHU1RyllYjVNODVDe3BlKUxtQ0BWOVo2L3Ajcl5MeUo2MUJTSnNZe2QhTGwkTWA8eEo+ejAvKVgkXihe''@;'; put 'put ''PH1gcGlMYVhpbmRhWjFoVGMpVmB3XmhmaHBXTmpVWEF5K1YvL2Y+d0hObz85UGxWK1Mkbip1Iy9KekxPL3l5I0IwU35QXlooeW5VLkpaa3J0Z188SFpiUGp6ZWxtTi9rNjF3TEdpOTpdU10uJSJ1WTBhVH5iYVFXan1sNDIjYDRKWkFDdDhaVl5NP359a09Tc01LL2s+bT9Id3lZQ249Py5Balhw''@;'; put 'put ''U3NCfmxBeipPVnEqJllmWF50Q1pMNTBtWFA7OjA6KiYwYkM7VnBXTXtybi5pV1Y+X0xhelBQK0R9XUV7aS5XcFI+Y1kmTU5DZylhaS92cDdUPTQpQzFsN2MsMlV6bzYzSC5GO01APjVoWzZtMkBDW2VBOVRxekZyLDA0R1BAQltuMnt4X3BhbiFTUjh+XmlFeHxmT0RjUEBHXy5sQC8ybnloQC9F''@;'; put 'put ''ZkYvcTp2VElhSSNQfUEhLFt3Rn5QdHk3U3Y4ZyZAS09bSkZsMHQ4ZiNpUEgmT189PnxFUVhjaDxBWz9YflkvZSl4YnhLc3pbPXB0a35XLyp7XXY3a20oI21rTzchT3Z9WS9AKjhIWnBHW29kbkcjPWI0eDUwdGhHTTg1SmUjTSFGZktUVyZZTGVmUmY4YzNHcCZTU2RZVC5HMyEoXjxfSVovfWR4''@;'; put 'put ''PHYyQ18wbW1TWDpkam0xUCQhSlBYYCQ1d1dLdyZ0bl16UCxCZyRtOFBdIXojNWAxQG4qT1BncnIqP0ZYMTg4fSNldjFmYHB2V0AzeEB0fHhOfUp6fmlMKExiX0haJHYoMnVkdiZYWnlwaUI5bjk3Zi8paGMwIzo8OWgxPGlMR0tRKnN5Q0FBYmVyQWljWEUqYiFQW3ZnRSRqLnNTQmpBWHJjIi5N''@;'; put 'put ''ZzZwYTpQST8/eztHL3UhW1oub0BXazVvSSNVNm9NUzVvLGZLMVVSKyx8UlhQJTAjeiVJWCNrNFpFQjcmUXI9Jnw9fjFVOlVIc0dKTT5BciNQZElSSiJ3dCZyOVE0OjpoP2EhTEdbRntFTmZMI2U1O2ZLbUo7MmlUbXNrMkNIa3NlSlpEI0hyRFIqQ1NdZkRZTksmeShOeyJHZDlRTixTO0ZCV08q''@;'; put 'put ''OChaYUxrKWxMZDxYM1IkazwrWzRXL1c5eDA7NGF4czlEI0oqbGs6RFBHWWJZXUl5bWNlJU92TVdLVkVTeDlseD1EYmxqalpSa1MmMyJLL3RBb3l7cDdgO3FCRmorPnRvNHA/PCs5MDE1dHtCPU47Qjs3bko+Ok0xLktDQGhzMihNN2AsZzI+NzYlZ1pJazVEVj8rXkxQSDxsMHI0QFsiTUR9Z0BQ''@;'; put 'put ''TCYkaHF4Uko6YXpgImNkRk9nfCglaDM/WGojN2RPOHNLM3dVX145ZV9xRWleKV55JXBCPi5EQyNbO2VIOGBIfkY8V2I7eSxhQ0VvPXdpLDNgRWRYL1FMQClCP0lJbFhVMWR4OmdrZzFSbXdLXl4wSWJGWDtdOS9ISEtRXlFWcVBtI1F8ajdaY2hjd054a1tISC4mPHBRQ1FFVzhQenN+XWgzdG1j''@;'; put 'put ''RHBxQUFmSTRsVXEqJjgkQj9qek06T3puXk00LzNoPSlLUjV5NyxidiNuL29CMFguMStwUG1UOXNVajhUcjpZe2Y2L3pdWkU7TWlHTyUzcG9zc2c0ZFh4fWY3aFt6Tld7Nn4ybExLKzhybS85IiZoVEEjZ1l5LisjaHBOSzNTYipsRXQjX0NaKnUiXVh3NnR4KjVCaHoqdkJ0KEt+cipTOmUlNXxu''@;'; put 'put ''TH5FSmJHMGtYLFl9ZVpkW2phWXZvPyNkM1p3NktZOS91a2NGXmU3dDEqLldjNTVSI1piRTRlL0ljYlU/STdsQT0kb0wjUTo+diYpYkU2VlVObXkxTFE0IUBqNkJxJmZxciFdPDA8ajNfPzp3MGNJLkt5R1hZSzskZj8jVixOOzdfPStgSjhZLFAjXUMpdWduZVVsfn1OKEt5ZUdHMDZjbGYuMXRT''@;'; put 'put ''e3ZrVn4+JDw1QnVXYihgRExpbUZpSSN5K1lrWjdTKVIubUMhbyZoMUlhRm9+QWlmJj9yKkJWQ0Y7VmdhQF0hfH5IKjxecSpbQzZrb1dnUnttKlB7IkZPKkFUT313Vm1zeUxbe2F2TWNvSkVLUzdkYHBsYTlRekUoNzdPTlNsIWsjNmwhanUoW3VGYHYiUmYwX244eEBFQUc9UD1wSWFSc2MlSnpw''@;'; put 'put ''RzI9V0lwL2liZ3YlWUxza2VSIzo6QGplTHAmNUYvVXtAe1cvYGdPX3QlRXlie0lLUWopI35nRCkyL0dhdlRXMTgpRzV6O31dQSFzdjpTZXBrYHErKmk8an57ZShqNCxOXThnNSRePlJsR2x+JDpQNzdDI0EkZTNpR1JoKFtgaF0rZEdhMTZOOHJ+Y01UKkJRNlJsakFYQ0lmQlVKLEN3filbXjRz''@;'; put 'put ''JXozQ1Z9PC9pSV4mfGBtMkleeSNkZSk8bksqRFolJH4zRmZfazQ0RCtTfDsifl5weUwkaDFpZSw9Tk0wfCJUKSRHbmx8OzRtLD1FLit5SyRkL2o4YFJAYXdbdyhiaEpRUHh9KSU1VE1QLj1bLD8lPktKbzklfUs8PkckYVcre0VfJmMzKUpSTShDfHZ7dFp1RCU7YUNaVywqc29ONUFlfjZ2OSEx''@;'; put 'put ''RUovZ3gpeVBIRVl4Y0FhOkx4aWE5SyRkbEthN0Q3TFlLIipNIWRWcntbOEtSRV48cks/KShtUVtVVS87Inc8KTxqbzJgPlVDbUVrPWF9KWBefXprUjIvMEhyQkpAKiRSSUslZDoybnZIWz5SakE7VFh9ZjY7fHpKYT50aypqXigpdUNePENQRz9mLEhEXX1iYU1NcTpFWStAM3h2Xl10SShqPVVr''@;'; put 'put ''WmNzYGd8PXlQSkA5V3QyWlUod2F1YCx4SFZqbEFQSlRGTiFNWil9SDxkem5lZlM1UURNWDAuOkoyOXpXRDAsJW5scWJZeHt3M0AhdVg3KFU6TkIuLEtEaGRaVypxN3grVTBZPFBlTXZtanRhOCR0UE1OLkE4MURyVH5EOnNMMWZze2k/Uztudj4rLipQJTtjbVFLTl1PYjQhJD1CSTspVy5OUmV4''@;'; put 'put ''RG54cGN2MHJTIz9Ic2pIM3xtI2RZNmw1S3lKM1deTmx5dmJ1e3MsezAlSlVNMVtuRU97PlREbyEpX2crVFpoeDheTFkpPnYqKXAwb0EvVz9UQnU5Q3NRXWM1TlJPZWBJKEcwfUIhJkkmUCNnJmlXYXNjVn0pMlk1e3RHSVBdY0lKVzhCQnEoeVcqdCwoQmdbTXwjUDguVHByWztSbFdJKXFnZjdq''@;'; put 'put ''N3ZkPiw1I1JJW29lVnxALz1MUk1hdWlxWGZMWlgsKGYoXUJZS1ZvcGZzUTJRc3NDOF5WTSp9by5+ZUlaS3Z7NGQsfDdbWlZdSkZ6Wj9wSTMzfiNVZzhSSyFON3dNSmNgJWpiKktBIlc7NCs9ZXUyMipeTWJfWVlZMWNrLGNNPlVFI0s9WWohZExfeEVEbUByLjUyaVp1V3JvbmtnTzJ2RkJwKmp9''@;'; put 'put ''KFswVXdyfndoKlszaV5HQVt6b2xmR0RdSVRSVlkkeDBCe2I5ZHN1XUQoIjNbVXVaalE3VChbSWZHSUQ4K0VkPXBYM0pyZz43TD4pd0lTVnhFQG5PayR5Sk9WazlWV1Q5dVIvXTw2KUNRKWxBaz95OVMuek5SfGR4TTVKVSUyRVllPFRAUGQmQjo9YCNrUSZ9S2N1I149cGM6PnclYmdRWGI0Rlh2''@;'; put 'put ''QDY+JixPNGBIIiRqc2VXZ31mPWVOQnpaNntnaUoydGBCZTc1NS8hV2t2QUV4JldGaFQ2dmA9UUlyJi5OPDlJUSQuR1VXSltffkttfCNaSVA9PFA+akVCfnhUdUwyUURWQVpzV1kvSjp3WWp0eVtRRyIqZStEcDs7XnJ3W2BkOVFbLCh4YXglK2NJeSsza25MfEJ0WGg/M1E1dDdMaDslOntHailb''@;'; put 'put ''S0Y+YFVrYHBdPG43aVBnWTByP3JYZ3pqX34pTEEyPG5mOXowbXA0S2JvJTZ7QmtSUTxzbTJeYzldOFJSUy9ufH1+KHIyZl1KYDAsfF1OOC9ZeCVTWDd5dSRHbiFxcjo5QEo7QS5NWWUheWNIO1gqSUdbTnZIZnVdI2xWdVpFWmRrXzFVVl9oXWs+dHMvb3pMe11mQ05KfC8rTDYzYHZmbkRlYXk3''@;'; put 'put ''JiYiV0gzRiNCdTJfSyx4eixrXn1eaSQ5fmxETWlhSnUlOTFXQmdGUEJtTyUvVm5KNiRdektkeGIjdn5NdUliX2pXQj1VYy4pRUVmXUNzKzxyTjNpUC50KWNATixDSjRGV1hPcSNaP1d7a0t9YTR8JCpTWSxRW0B1VzUjOm95b2Q7U0t8XWRaN0k4M18mUHRNLGIkRDJ8NkF8ey5mc1JKKUklRmpM''@;'; put 'put ''clhLYTF4NWBtd2pVcjhFZXFXYEMxdiUrJG9vS3ElQipJKEJEaUB2ViNlbUcsJWV9RytFO15mWX1RZmYrQ0ZgbnRNezUzfCZMTFB7YWBSSlFZRTRFaHcqdiFSRUgrbWcjcEtUS0EzPCVoQj0rRFg8VSwkZi9bS1FsfntaMStJK2k/USgze1FkQkhgLjFDPS9hJSJaNlFoUlNyVUxLTWs4PCFtMFJa''@;'; put 'put ''ZU0hRSwycWdUc3ZSazNEVU9ja3RtP0xeei98aGB5aFV+UFVqZH4jNngya3hDP1JQR09+OGFAfj42eWl3PyRHYFp0P0x5VkNkKUJWayV5JmI6bHJoLDU9PilaNmRZUkdFPltDTXpxbTk4PW5HZHhXOWVhfSVeVkVdcT5vUHxrQSg8PEVlcyN3LChpK0sydzQlMjR1eEdEclZ7cDcveWs2UE9WYSNK''@;'; put 'put ''K1c+YjVNLjpMLzIufS9IVGhXZnl9LzhdLz0wXy9+ZF1ndyNdRFB7WV4rUVgwNFJQP21vMm1GfkxNW0tpIzsxRXFlLGsqeHw0YE1LSlt4KXEjeiNDXV1HYG56MWUmWHpqVF5AWngjIUxvQHojeFpwRiQxVSlZTUB8N3hZK3pkPFl2Slk0d2NfcDk7fGQ1PTAhSzk0LjBYQHRWWjUwd3hwMS83dHNS''@;'; put 'put ''N0B+aG4vUHs5Q30iUD5TeCZoYTM7KW06WiRuL21SO1lIMWRWMEY8NEolY2x7JGgqMXJLM05CY3ZjYXl2cSJjfDAmQUZRMjpRL109ciozfVQ1TjZ0KWlAajklKXhKQldQYXdpP15HdmhJPz9OMChgOypTLEo7dCNNc1NoR1p0ZmJ3YDNjeVMsTj5RSWgrN1tmNDRDNTUmQTdtZUZfYTgzTD1se3Um''@;'; put 'put ''fkMlaykyViRgKVp0SXRqPiNzdEN4SUg1azQ2ImRgVUdfL24yY1taa0xMMVskYWo7bXF9WE1XLitNNSIuUFAvXjE3WDlZRDVNLkVsQjtPLlZOWHdsYWYrJlcweDhsMkxFZjoqQFhMITJ+XmJhPFskVzcsRlV4TjVQbGlsdl1DRjc/dl86WyRuc3hLYDNmeGI4R3BAXzpTYXRKfW0rSzdJPU9Reng/''@;'; put 'put ''Pkt8VCJlMVRWSX5gOXovRSk2enJ1VS9zezFdekJmNnRnNFFhXWM9XUI8ekNVKFJEaTQ4LCQsPmRhRnJrTmc4V0o9LngoXWVucXZuSTNGNkM3anxjRip3Jm5lIWg4fWJ0RTVQbygjQSFWRCZLJV9nJE4rR2QqKExtdz5bbj9ERyRqNkRPLzZlTk5BSz1gZkhTXnJPdSQoK0hPdFlkUzlrI2pUIkwo''@;'; put 'put ''MkMpe3gkSyI9PS4xZSNDL3tHeXMyYkshOVA4TSFrakh7UzV0KzE3YVh6LD1lNE5uNTx4S3djU3RePW5BYShZcSNDZzk3V0tbSHZLPlc5cHU/OlpiLE00VVZ4PEpDYC5fWSRMR158bWgqPk8+UVttVEFXT0hVK3ZxQik4PlImOzldcSkhN3F7dTx8KkY1P1R3eSlHP3dQW1BWUEBVPyxnXlY3dz9m''@;'; put 'put ''SEIhMTtgSkQ+P0NkUFVrOjJiUk93bGs5NTVuaSNANE5IPWI8elExOG42YVNMPX1mWFRCNH4veVJlcDwvPCEvMEI4LmomQj5demRHQklCTTp9NHVZU1sxOHgmY3B2UVBzeSluXzE0QmRWXS9mdXlQS35jdl1bWH5hSmpRN0NkKlNPN2pxdjlYfilMVE80V1VldnVUKStnVEhET3lsKDNdJngwakY6''@;'; put 'put ''aHxhL1I8bnxjTVA7L251P2kjdjJudC5ZOC8wW2pCY1FddlgsVzphST10di5mY2F2RlBUfHJ9ZERkPn5aYHNefDRdbEVweFhRNH4yKCo6eFRpMixOU2Zzcil3e0JtOzJqWiVJRUYrMnRaR24wIldWfHY3Y0ZRZk54VFtYMTdvQzJTa1ouR3B1JG4hLGZNIyM9WW0vYVFaRXpLP1JbbVk4dChkc1de''@;'; put 'put ''WzlLVzpKPXFAJjApKyRUYmZ2ey80ZUoiTWcsMCEuTE5XWGRhV0U5ZHp+aVtHTDMuVnluPzlNUXRlaUBPZDJWM2BOVlV3QFVza0I4UyJQQG5BQEYuUyJMU3JIfjwqdUd2MiM1TnIpcVtKTEI/ZFUkcTAwaVM3ZmpJb3tbTjh4P3xvMl53a1slTSUocGh8fH48fEQuZU1LPnpUNW9uMVZRXmcibkJw''@;'; put 'put ''L0NdZl5tNis8WEB6KSxgIWVlVT1gdlczcWZOPEZJVXJ0dm58aWVCNXdOUnl1P0Z6L2thJStRZDUsKiVoTU47MHlbaUQxQTVyeWBkV096MEQubzI3TGJnUl5OUUg2T2Fka1NSL0NYVldHcXAoNSlMfFNJMiZTcF4pOENxJmY7SSZ3WThIIz9HSj1bc1UjW2U3dDAzJVVVTUd3dmkwU2EyLmE+TyNp''@;'; put 'put ''YCp6T3FNeFAyKWthcDJjNjQ/JS59KHF7JX5lWSN5RU9nNV9HWngia3YmN1dxRjEzaHRjIWJFQ152LHAwNT1OUkJ4Y3J3NEs3P2dtRTZeWW0lQj9BOGViUUdNXkBXIXRhWX1NRVZYKFBuODNSeFJyQXleQWtxZkQsUX4hIW5mMXpuQDpHMG9INXZncHhWYHVqekg6JmBHSTokUDl6WTFNcEx7az4y''@;'; put 'put ''LEcyPkhiTz8wR2hUOkM9M2UrezJiKCpLRCpUV3g+Z0M/dElEKSY7UWZVcEd9Lk4yKTpMaUc5X3ZMenJVXzYqd0lPPzNNOTU0aHJQNDwkcytSTURWJWthN2FnRiNMQFAyRiNrVFN0cWRzV3ZAX0BtSl42ey8mOGloeF1OSTxVbWd4MmpeNnBkRWYzV1VNLCxgUnNFVykzRCNNeCMhaEddMipUZmsj''@;'; put 'put ''aTU/Ukg1Ri5PPEE8RS5wTHF1JjEmcWkxK3swaFcjWC85fWVsQjJKR0hoYlN8RlcpTltTe1ZKMFI7Sz1pOG8mMVZbIzl2IiQ3MHY1JCJld3JrW18jPkByfmFpM0lJcTkuODtkZ15iWyNyLFQ4ay4pLCMsUCZbYjwwZXxacHZ1IyF1SVlybU9BTXhob0Z9PEwmRF8kbzlQZ05AQERgTVFfbE9TbyhD''@;'; put 'put ''QTBbfD9TM0pDWkxwblIoW3xKdFZzcEg+X357QVgoLCJVd3RocyQsNUo5bE9TcD50RTZYPll3YHtqeEM7P0NiSnRoVjJoUzNJYmprTyNrPyxRZ0RIdUxXaH4/bD4zKW50cURlOTd0IztVazZzRklMZEN+M0tUez4pOEA7PH0kSGV2QyEvbyFDX1tVXzsmQnxaZU05VWZtdD0wQEAxcndgOyJXflA6''@;'; put 'put ''NFlJLk9yTXwwNllyNVY9NTVwLEsrfG0lRUZ5KWFpLH1fS2ZVRmpHK0M6LENBL1t9Zy5mOWBMJHpGKS4udjlQaSVJKVgudjdeKXAxZz4jUFgsOSUxaDl2UjNYa3VaWmpadGhPITE+Ijw0SnRtNDh0eVl2c31bQCtjalc8aSF3PytzcEBdXVVsQXtaPypwczpwMXtZOk18az55ciRLc1ZFKGdiMy96''@;'; put 'put ''Jih3V0l4MlR5Wjxsc3NQZmRGLDFyT15CJSRoTCwpSkh4O15FW1UoKTAoVU4kSmFiaFRGODRUKG84PF9ha0xjPiwwPWssQjwzZ0E7MVVZP24qfUR5UF8vd1JWM3ZwLyVEK2klanFZWkZZJiNLO0BvRmYxJWtpOVU/bnlQdzwiP2xfJGU0IXBwVE8wcS5YPFFAeFpEOnY/P2V0RlJILj99KEpqW3wu''@;'; put 'put ''QHxSMDdeWzdicGJYa207Vzp2OUhSK2tRQSN+SWRLQWlKbVEvUmFpUEI+XU81VVtffltiOTkzU1JnOCVfP3JxbywjTTVRJTRxPEcuQHZdbnQhM1JJV1ZBXW1WPUdIKSloITFjZkFJKVt6QSxlPHErbSghNSJYfih6dUJ+Pl5rXSQ+QGAmIyxVQmo/ITVwOlE6K2NGUmlnNUdJVUFVdjV3U29wWTNr''@;'; put 'put ''UnB1b1c3ZFZTVGNQfWwlKGBtWUc9LDh9S1R1NDdlOUlAPnAlNUh4bktFbTdDSmojSlhgcStIezdwbD4iXkojLFc9W0pGdjxwJWlQPCZnMkpuSXwhZlBaJHZYOE5lR1MrfG5wLj8+LG9NWj4vZ0pVXnBsNiRVR15EbGNOSVM1NnBsIy5INHFYPmxDS2B5eD5sJktraVlJLkRaSXxMWHRGZ0hVMVd1''@;'; put 'put ''aWUoX20zcS9VbE11TFNHLnMkSTdraC8mdUkqdHIkPGw4Y0toWHg0cW0kbjQ7YFMvNyxrUjRLUl8pZWAmekh+XThkezRyRmI8bFVPWFhRKixfO1t+KEM7ZDllQFgmI1gpKWtfMXdbKWJ+SHs8KWE/Q1dwJWtyKVdLens8VjVUR3FrMHVbIXxMfCxbcSVSIjJDIilUM0tMZiUrZE9nMXBZJXU5VEln''@;'; put 'put ''QkFfaSFPdjhBfnBgeWYpVilFPkhmNntsMzssLFdRXzo0fE5bQmFENkByU24mQ2hvSTl7djpEVnBtbjxBQzUpbTMzT10qaitRQFp9KGlnXSVCbXNCQ2t2QD01Zz9PenlPNStAZXxPSDxMNmNNPjF3Smlddj5zdVNOSzM0Kn1xJTJbYTM0R0N4OWBHa2Z5biQldXsrPyZ+PkhFRFYpXi4lMEY5W3o5''@;'; put 'put ''ZVh9bXNdMW9UJVd0YlA1NFpwZG9ZZCQ+dEwifVt1JDpqfCxHeFdGX0RCcXR3MVUuXlMwXSE6Yl5mMkM7blJgI21tXTMicjkuOzdYe0IqI0NuT3g4TlV7W3Yse10/a1AxUikkTT4pYl4/WkByUCFgQDhKRlI7NmU1Q0xQbnwvaW8qeUhGQz1ba3xDW3NoX0ZFRlg2ZT5gKywhbzckPzEhKDNrOWpy''@;'; put 'put ''Wktqbn0jPU42L319ZSg9LktjMXNgaXheXzxqTzNxfDFMcXVvOWs4SFUoViZDP0tQI0JnUlNUSyxUQEBUQlsvbXx+KXZCdVt0P1F5QiYjcSN+Q0VAKzVNJiEzb1Z4MTlJRz8mLz5AYGtaXmcpfCkuNlZgYCZFM3c8LFBlJSppdjc4VC46SG5ZZU9EQ34kdmp7QFtFN1JbVn5ddjlNOXFefkZMMkN2''@;'; put 'put ''ci5AVXFEJC89S285LEpIaE9DOXtKYTY+enB+ZzIuT05hZVhAX2UmJSk9cUhjKUBGVmFpOV5vfkVnZWgoOm1oZVNSSmFTK0ByT1F+M25VcUQpOVh8ZlJQey5WQlhfMjxlVWpUI1dYLyxOUzpbYXlqWj02SGxYUF8hMF5zY2E8O2dzeHRGIVlIRHx1XyoqYFk/PC42Z1g5Jl5AMFNVImB7SlMzUWtR''@;'; put 'put ''dExoImlXI008TG0+JElDTGUxaHMmUDZMcTJyQDBMdnpfVX0qdGNIa0l+SG9vYmsmdmFIeixRRTsvZnxja2VjcndMVzxHYF8wJnJVMHg9NWdWT2xIblszb1dufm1GJTZzIVhGPyQ6ZDsxWU07Xyk7OWA3R0BzSD09KSRyRypAMEFtZ3N9Q2M0ITNGYkEqQTpGczdhMWokTDh9Xld3Vih3X2JvKj03''@;'; put 'put ''eU8sMUEhZGNhV0tKVzlzP1ppZyFUXUNjd3p3dTlvM1tvfWM5azA9bWpIaUR0NT0vciJtIl9iXjlCb35XeENAK3xMUkxQXjNidiFfL3d+bitdVlhGW0wwXy86L2hEQCJ3UnJLbklCS1o4eTl+WlpeI3NVKkBCaW5+QVBTTkRWfF81Z2JpdEpdZXA1Jlh4bCZqUmk7UiZXbW90UStkOkA+Zz8hUVhw''@;'; put 'put ''QW4xbzFkbV5OKXUvKTY8cWQofCguPH1eIyVVYk10XkEuYGJfNixiOmwhM2MjailnOXsqPkVJa2AzPzVaKzAmS3w7MX0ifFJgYEd4e193WyRgJUgsPXlwfVdtRmQuQltAO3RMU298JjQiaUlXUWVsQjNPU0RWYC9MMVBpYD1wIWdFV0lCQHJhOEwmLlg1OlhKUU5RcTkoVktpZVUoTTBlaFo0UTk7''@;'; put 'put ''L1UpKlY8ZyxAIXY8eyFDaG1OOjs2TGh4RlJtQGAzaDlaaDJYIyp3STw/WlhEdjRnMilKP244InBSVThpW3hfbitmIilAS0cmSnZWZWJfaiF6UFk6Kkp5bmZPaVA9ITRtUWFDP3M5N1lDWHMhUT98aGl3emo+L0tSVUJgXzIjPSx4MF0paz5TO1puW0Y0S1FJT1Nxe1pCOzduT0B7QVoibShYJV4r''@;'; put 'put ''JEI9JHBBVC49N3trYiMsK1UrQ3JOTnFpUCwsfFBUTltMJk8zcXQ7YnJrZjJRNys1QCRvaFp9M3RbIzN4dkIvfDwxNnwiNEA/ejdhP2QvLFtPVFN3T3s6dyU5WF1rLyZ6czwyQl03MFRoOCJtS19TRG19Tm0xbG49RX5gUFpyPDc/YWJhZClzQWNRS3NWZTg+cyR7X2A7biwkXzY7VmkoN1dqTFdT''@;'; put 'put ''LHddW0Y2Zm17TSxkW2xXPUNsOHRyTDsrUHk2KXw+ZDpqP0NxRnkyaVUsLioyb3ttNixYKXl6JEQobj5xOXQmMF80ISQySE5RJm5oZWlAPVRoaF9KQzF1ejFaLCNsKm9nWS4vLkJxMyF4U3cuOjNmQ3ssY0pEVDBKbTZMWV0sQj5paCU4Y1F0KTlOUFlSdzZFJU1OSz02enh4VS9LKkA/TVBVZSU2''@;'; put 'put ''QCYpTlNAJCNfJG86ZGVOZVU9LmllO2U/SUQha10wTElzT2l7cW95LDVBX2k4e10qLFZfaipmWlUzaHVTX0BqQ2ltYV1GfCokaTdvTVlwUXw9ZzNUX1lyRD9vaXhbclElfG1IUigwJDRWK2cvKmdqXi8lUihzV25oY3s7NE4zK3w/TzYrOHE+VGBTW0QkL159TzguYDdJTU9DVHAsdXl5OVlnRjFe''@;'; put 'put ''cDNlKmxVUjFsVUZaN3JeZyEySHUrUCtYY1E1eC91LClHYXo/S0w9am5hdWhTX0okUVQiWGI/KThBRFQhWSt8VissdiYvZUNiJTdlW0pwdHhMWiF5akssPTtpbVt8L1szbE59L0psW3JtRCZsZzllb0tMKW96LGtgQEpqXjNQOHE0eztPWDM9XXJwbG9TPkNRQDBbXnRBYGd8TnssPD8qb0tTMGZR''@;'; put 'put ''eVlidk5gYU5ScUdiTkljPSgma3pURiVJe3RMRW1lT3ZHNFhQMzkmKmQuYTxgcGpCdXNjTWBKL0NgYFIxZjtoYHthPDZoK0YqZF43bVhqK05vRkBrSilZMGh+SSQsbDU7bGZURyVzYVVfQ2grOztlPDkkPUlbZXVOMD4uMWxkMy5PYzEkZT18JEl4Y3lAOTAre2h+TEBqcy9fUyh9T3tobDwrPCU1''@;'; put 'put ''NXhrcDltRSxqMXJ9UmJFST92NGVnInNzV2gpRWlicSZQS3sjOj86SSxjRE5ZMm4lfSVlQHZifV1VO01IPyQoYkJyYTNncjpmcz5OWHhdaWVUQG0uP3JFYihUbEYyWCRxd11HeE0xbmxgI0M7OFVVMjs/eDJEYj8xQT5pW3pmanIlP0BgY2YhcTkqS1pjVzs+O1RMaT95ZTNtRClbXipjPFlFP1U8''@;'; put 'put ''JWRIfFFIMmxsJEVgeS91LlgzbmVqUSM0JWFDP1ZYa3ZYM0UwdmtvO3x3OGl6XiM8YiN2XzJxKnJbSmpVPlk+L29UYkJiMDIuNHtqSCkkVWhhamssby9oZ20+QThFNEQoI21qQTAlOG1RZk9fclA+QlIpfDtnX29mJUE1SipuZ341aG0pNVQwbk5iOGFlNTI3MDZsKjBOOVkvVCFnZTdReiROOV9w''@;'; put 'put ''MDBzO1NWejByZTQ1WU51OWw3YEF+QVluPSwxe0pJPjdDLlpkMWYkR31ScTchfDRhXTFAezI0T3Y3YkpnbiQ3cDNSKy5bZ30mNFEofClAR3Buc3tyKGN3dWVyUShkKDV3fTlMLDFDQHtbMmBAPHF5MVkmeWYvQHRRUjI9YFlTLkM2Xm11b1U8OyssNU1vTFl7QTJCLkJbNzleXWlOIm9SNzcjInxa''@;'; put 'put ''LENERj45NTs3RHBYNUhAQ240Nj1CV2lTNUhAYDVIVDZPRGhPOkpFSUJhIlsuPlM9Z2dhYk9yPk5NYChVVVtDU0ZSS3F1MHo+P09eSHpVRj8xY1c6KTxVVipvdjR5SGkiPVc+WE90VHhSQjJJOzg0R3xIaTR5QnA2QUA5QGUhRUxsaj1Qamo9XylaSXF1L0YpIiVMLyx+ZyVpcXtbM0FpVjM6QHhd''@;'; put 'put ''cWUuTFp9NE8odXMmcEswPXVnOG83Z2FoW0lFXThKRWsoYm9wT2BSZlRVTHE0NUdlW2NVIk9jKnRFY1J0fSlXT3pkbyJoTFBYcHQ/WF0ibGYzL11DR00xTDhLcVdpV2V1MEU0ZUg3JWRhRmBMJldGTE91KlZ0fih2akhLSWNTckg0LGp1dkEuRihENnluQUdNd0tRbz98aFlKOEtNeGQhJVEyUHtz''@;'; put 'put ''YUtlQ0UrdWxIYWtmK1JAKnR5d3lJd2dTWnkyVl1USHx5PEM0TGhQKCU+Zz5SOHg+IWJMJnltImdlel8qQjd5Y2NUWFBYP1g7WGtFN0N5VmJsW0dkOFhkaWBSUX1FekQ3djJNSj9LYEUlcHAmJVU6LjNvKmZOQEspJmNbVEwxSDxITTA3fXFNbHx1P2E/N04+c01ZRy5pYHRpWD9tcFBvT2tycnAx''@;'; put 'put ''S0ZJdG4rXmA2LHhtQWJgZ3cxS2pMNnhUei5RckpmInRKZk1kXkNgMihZUmglSGBxMWhafW5zbGthOEdPbyYsTXB7bWgvO3xWaTZ5ekk9W2p3UilaPjFnNWAscE8iQyMmS2VLaEc4RTpMT28pUzA0Mmh7X3BvaShVQ29taUgrJk53dmBLfGBbYGl5WCEoK1p2Snc1aDUrVi5YdkZyJiE+TEYlPCs0''@;'; put 'put ''aSJ6UyhTTjRnIlRQZUhjbG1SYUN8MDo/MSNWInAiUFVqRj4rTC5dJVI/XUF3bCo2e3pMd3c5SS8uekwxeEhnZ0RHYmM0bGtMYz11aSs9cmhqKmFGaU5Ea10qa0B1R2BuQGZpTCFjNXF8PjBpR3VwMUNwcjMwK315JE9LTnwwZm0qMk0iSF1ic2tvYGlRcHtbYEkjPjJWZX4ofkRrKiNuRkIqcWIx''@;'; put 'put ''JGV6aHhUZyxwWUFmS0teaFBGfFEyTmZ3V3NdXnJAcDlAP1glW3I1USI9UCtsb1ExXSwrJnFHeX06MUcuPC50IWdLMHVGO0J8T30lN3RIOD4hZSk5UGVLZmZZWDNLJTluYjkxZ2ZXLFpyaGthVXNIUF1gZ1A6Rnh5UDkodFk3RmdNRmMxYXopSDxRMnpRRDJ+WUImWzJxJnh0ViZYdGk9VjxRX3k0''@;'; put 'put ''IXVLOX1SaD0vLyh8UiI4Y1BIOiV1VS5VXzEuV0Vnaz9acixPVnJoP2NgciZ4e1chZiwxZiluXm5KMVYjY1dPVHI3YXsjXzJZRSMpTV8vPVguZC9ueHh5Skk0cSJ8M3RzfEZTOEAzcyZ4clY9PDoqajhlOFk+I1MuQCMpSEJ2Xy9zUD5iMSI1aDY4IWU2I1VzW1k8Y2JWRFYuSGo5LjI3ITVJbFR8''@;'; put 'put ''XWhhfU1nJSphVng9b2BzSDhFTGdac20/JjgpQDxpTyFBNFJAS3NxVWh4UHQ5KjtNcjJybyFEUXhTWipnPU9vdm0zbkAoW29eQ2d7cEZsTXlyLkBhNT41YEF7dzVYPzZdbWdXUTRqUFUpLiYvOmt0OTpPU0hsSWtqeWB2bEsyIXpaYUxLKW1fTk1VeS5EMTJgSkkzNWxqSjBjOUNUfW46Oj1yNHV5''@;'; put 'put ''QGpSY2R4QHRINTdzMWVIRTdeRmhVa0lZUHpgaXkpMzFNfix3JUJOQVtTeVsjQTAoeixVKTZVSjNZNnJYMkpITWFbLF9bS3l9QEB9R21eW2dPSUtoY1s3M1IocVMrWiF3aDsqbSU5MUEwWFdgMDlOXjFsQDJqTWBRSGlKOVhxL00qYUNHYkJFSHM7MTFQUDU4KVIrVSQkXS51OzdlUnR0NiNpdVpo''@;'; put 'put ''RUs4ej55TlJJMUhsdEgsK3dWZnA1JH1PZDoxbzshLnEpcmd5QnleK1pUNUAmPHByMSw1JiVMazleWzBhaVBVUC9AYXpPaHwleWcsZHxvQ0AhMmxmRTVvYmR5L1k5VUYsLCk8PzxbP21za2xgLCxtWzlSOD09aGJ6NEtaZT1UVlYhMF9FfG9iUmR5YExjS3N2eEsrKl8/KTNERityRSksOU5EbDoy''@;'; put 'put ''ZVQwKmNycCJUd2B+VDZUbTxIcFExZm0mKko4ZzVQWiUzLCEuKXhBLi4mNGlpUypFQHkkPzM0VDBJLyxZKmpUMVU5QGpSVGUqdiRbPGZ1V0lIJG42Mj4uS2dBYWl3fCU6OiY0Rlo/eWRFdCZVVU8uaEtwQCUzZTU5dXJme0xiIWBFJUpoOlRLJHpmVU57biM3ZVNyQEBxbF9VajhzUSE0b29GK1gl''@;'; put 'put ''LGNYY3UmQys5JU1RSHpzJUo7SFVFcCwjfTNvMCo9TURwc3BAfSY/UGI0JG5uY1VqflNYV2JiNXpxRUlIb3NdbEkuM2ZdcFZVKDRNODNSVSUucHhwVnV1byQ7cWF8YHdiangyb2BOM1koKWE9TjxoRSxdQmpiSk1LQWErKVEkV29DZXl3eiQ+IWE0dz43V3o/VFE1bS5XPyF5VipjJDg7ZEZGS0gm''@;'; put 'put ''SkNII24lcEFvVSRGO2lmXW10akF5VXk7OjliZWBnbXdEW2ZudSJldmFQXW9SeVk8WyZnSUVeX0E1WU5XeyVZT21sbWlwbTxMaCpwWGdEJk9GNXtKbC9GRElwZXsoMHokNlgwazpTbXdwKlFEZnNYfHZ3c05mNm5jSnhQPzouJlR2PSFuZmhQcXJvOVUxfSVrJmtpO0YwfSwpai9ybzprejpwN3pJ''@;'; put 'put ''O1pTXywmZDBObmNpelhKO3NdJFMsXnI+cXFMQC5eeFJKaixAQDVxcUp4Tl54aXRGeVZdQEEpKzImcGkmPUhvLEMrWz95SHxKfixvfmpgYGNYYytxcU4jWXQpTjluY19McWw4K0h2P0JQTlhfSzhhWCMrRzQxYDEuOUg+eSJ7c25Bb2NvJDEoY1pZdUh0ZjVqbEB3NUtrJjRvQG1qQn5WJFgjWm8k''@;'; put 'put ''MTFIPGFvWDM5MzVGeWI2aTtobTZNU29vc2YjTkhQIz0/W154Y35ocS9oLG5VTU5DLD9vYDlBT3FzenllZUI2ZGc7TyN9ZFJoY15CWDhQUnJyTzV2NShbOjZRT1VpfDomOFV3UyYiIXk5Q0tHaHRqbHEhKkpuK31WK0xuQXpge3BmMyNBdz8pdCg3Vzw/UENjP3FyLEY8JkpuP2EodHI4QSshM1lA''@;'; put 'put ''e3E+NnYxWV5uaj1DdGpaXn0rYmZhdyp6azZqblAmXmhyUiI9UXEqOmx5cXFLaH5wVVgsayhRb2A7Q2o0OjE+YTEuPml2JV56SE0wXVgvYCFyY0wmUSRkfCFaUCg5SzEmLjFseTtnUkJbLmRJL1c8Nl1TPmh9cVpKKFVfOXZ2Qj5bQHY8OGcuO2dQM2xycEtobzlrOFY8QlJraG84Q2tyb1lSJDhh''@;'; put 'put ''LFZQdS5MSi5sVyR1QDE8PD9LWGhvJTgvM3xnTT4lNzVIJHByfHNWWCU7IWIlcltVYmArVTNrcCQycC8wWFkqKEQ7TzNQVz9fOl0rTWQ2bEEsOWBeYTttUHA9UmtgbkdESkMzOzZiZnxfOWJ1RjU9M3p4JCRdXywxLiY9R1gwbyVmJVN1VkxPWT0scm17JXN8Ino5K0RnQUhddFBgNWpMV1JEN0l8''@;'; put 'put ''V2QhcmFnfV9kJkhLVy4qaXEqe0UvXTlyYWdgX2QmdEl0ZV8/N3xBc0BAXWBxMTA3cmhvLDNtcyJeT2djL0BrbVVlfmc8fTEvdTQkQDxGfHZFdEZIdUlRVzIuckYjST4vckhKeioqOmZ6Nz8/SjA2U1dhP1RSVyNxMjFoTjR1Xm93dzd9fk5qKy5icEJrblJqODBpRk1FUilWRjN8MTB8KHN1dUo/''@;'; put 'put ''RCFWSWQiXSR3NiFfXzZ9PHdPLy9PeXVRIldkNEAsK2xuPXZvYnl5czZvdGojOkN8dEpGR1hAUUgwdldjU3l5L3k0dU1Wbjs3X3hqWjEvVlhEflhhfH1iN19kIykwWmtLQ01CcDRnYFgwbV9gS1hpdV9abCx4fD4+Pn40NDRsSVY/ZGVkdjhfRTAmQ1dDdDRrSClNQEp6WG0reF97M3s+S3Rfa1l3''@;'; put 'put ''TUE9b2hBOEA5Wy9WY1dZXSpobkwidUpVTEYzKW4rc1B3R1BCT0AhUHApTE1GUntvUCZESGklVE52dihfT1BGdXs3TzZwWkNGVGlfMnRCeShAQ1JXQHFuaGsiMklGRU8/JHlvKWgmU0tASU9AX040TXBVakJHZmJhUnRJSFhyWXxuTE9AdVBpIWJ2M25eMnlLMkMwNEBvK0cpP2RlfkJacTw4OC9U''@;'; put 'put ''Ml9FfUZuQ3ZMNWRNY1dAQFZ8KDs+TSZzIzRZck9nfTdQNiJ3fH4ue2hmUHIpOEQ2dD5VdipiY1pSTlpZV3BeLkk2KTM9fEwzdDoqWkZbKF9Ca19PUFdNZ0xlTXV1ImxUQjk6VlJYKlU8dkRITDM0dmpna0VDajQrT1RIK1drcT1KUkxZKjxjVnh8Rmo2WypCRFRqdXVzY0NAQFZSQW4rVHk3KEVe''@;'; put 'put ''MDp9WUZKPXRbSWVzW0I+QmxCZmQ3fTl4a2M8XztWdTo5SDJXdl9gS2wiJktBRzw3eEZIbyYwTllYTG9BYjVtc0ApVmR6KlZmXjlPR1lsMUVmQW49YSJbPmRlVXVJVXFJKmljKjpmXzhCT2NxW0lbdHsoImUxIV9LakRjR2dNNnRhdCx1VE5bQm8/YHZpYTdgYEtfPn5RWFJbUTdmT0AsUHI7XnU/''@;'; put 'put ''Q1h4cEI6IkBDeXk5SUNOQmpzdXV1ZnMpaTgjRzR+KFVAeStDITY7Nzhvd0dYRlRSb1tRUFcqNDYwbV9nel9UJUFxaUY8IzV4QjEhKzB8VCJZW2FeSE9AdDl4RDovRFpSd14xendPY3RvMS5VYTZqeWBuOTdEMGNIKzk7KVNMME5MQHIoeCQiL3J5akZpeEQ2VEwwZjFjazNqaXl3VXxZZ3RlWyxM''@;'; put 'put ''UjtNKXo9SW5vOW4oZjkhbmorP1RxQ19bWF93XV1Ve15ZJmhWPC5XQnlfN2M1emJhT0lgaUA9X19Me1l7ODY4QiFbKVoifWlyVD4oVmY+RXF+d2IkMTF0eilvPyFMVFZEeC5gdSNiQys5UTtaIW98LmUlVz4xeWt2MFJKODx3bi4ldXZ2U257by4yZ0BsW0h5REArellvdX0kT3Mmcy9OXjxpTF17''@;'; put 'put ''XUw/W0crTWo5aEdeTiFoaV96XnQ4S293NGY4KHRDWDhEXWJPMzVLO15rYzl9YVJjRTIpWns8TXxlXVZLMWksZFUpc2h8VWR0RGgma3lmWmNTbDBoQVcrOnMwc2ssXjlALFA0WDtKaERWbyFGdDAjMmlRPC5bOTFtaVN5c0RuKnFAfmdhdVpBKColdWlzUkVZW3tiJjJHcVJmKTNnTj4uPXQ9ayR5''@;'; put 'put ''TCsjbmZid0YmeU1PP2woNUgrO15ufDRWJCpSRCxIWEV3YCxpdFNvTSU3Z1BOY3d9JmQlRUtoSmU+ZDw8WlNYMzpvTXdXJXl4X25rRWc2JElELkJfe0BQaW9YTXlbTWVwMykyUmF5czZRXTohdH0uYl9qIypiazVaWz9fX2xqZ1VeO1BdM2czZGZwWVIuNDlAbW1EK00qRWMkOD9rc0Q6VFtSUUtH''@;'; put 'put ''OSRfOnJTJFpkJCVYPiNKbDkja2Ivb049VHdpfllvUCspUXJiaj1STls3M24qK0t0QGQ/XyxfeiQqejI2PWo+UmtfV0Q4N1VYVjY3ITgwdkh7Qi55SU1wSEAoYSNdYToqKTw/RDhsL0R4ITtuIiMiYDRubyxLR3Q8VlF0NUFgYEx5KD4lIXxOcHUqa2NlcDFYKWNFOiJeSVY1MU08aGFFXnRZVkBA''@;'; put 'put ''bUVMP0F+fmtdIWNieDs2PjI+Jl0rNkoufVFVM3cqO1RoTkQhaFQkNHNAdiF2WHU0LHVNXUxYXS9YdU5EP1Y2O0JAdXgpJUNPQE8zcWIvJStIaltSRCs7SVgqLlFLM2dwaXNwXjwyIXdUS0BAXVYoLGp5PUV4eXtKMkkweERrOGlbeHBRM2Q9N09MY19PNj9WY2xwVWFvJHQzNmJwa1FrRUxhMlFS''@;'; put 'put ''JCpXeHd1OUBPNG5COFcsTVE3dTwwTENmMTo2ZXs8MDJLelFaZyY4Jn0oWyVwe2RCWTU9M0hHNmo1NnE8dVtBeihJSkksLipRRDMpM1VFaTAhVztQMW1+TmNrayE7MkkwWU9gWXk+SDdzU1IiXmc2Z30xaj0/NGBSZG89KyQlaE5SNiRPLGtqIj02MkkjNGN0SSxfck9GPEpwSl1RWDBwKV5IPTYy''@;'; put 'put ''NSlzJmxafWFyVVdUR1pQamcxSnEzZ01ZQE5fK19vIWVsdzc5OSVTcjFkVlAzL2lNSSVBWFhNVyZBJkJlKEB2VTRsbVc5dVFyYCo6cFk+RHArZD1vTXwoOSFeXzpGYXN7fU8lO3I+cXFGND9sPEYobjs5XXwwYTdfSGV7UU05WGxlMj1OfndFSW4xKEUyO1lPOElxL3RtODx0UUNZVUs0L2VEP05t''@;'; put 'put ''ZDwjWjZYNj88MDoxKXFrT3YwYk00SGB5Yk8zYHsmYChJZXMmO2YkLGosaXpgPGc6bTtHSTN3OltvTTtXOHhNOzY9P18wTGo1aExvWH1vMnxgXjM0VDg6ZmB+L2tFZG0wTi5QKUo2THdFUWtKMkcuQDA4TFJrZUY7MmVWNmM0S2RPZHlQMFJRfkNNcmwlXnR8XylTMVVaWD5PPGZzTDtoSTtyd2BP''@;'; put 'put ''Y0UuJlVYbFpFUGNFQ1VJUk8xWyg0cykrPkEjbEEyOjlpUnFWSDB7MFErVjlEdkxmSVljSWdzWCFwd3xhNSowQmR5VkU2eHFiYGAiVXF0N3JMQGZ5a0oheGVDKF5kOWkocCxFKTZVQ3tFUk41O0ZuKT1Oaz8kWVJ2fEJZeDJAPkc3Z2RCTG10PE0raSlsRlo0fHBdXzE8b0RkVkV4Zk97OiklLlNC''@;'; put 'put ''PXRgQ1ZMW1JoQy86OSgse31pKDooaUE9U3ZXJE9ELzxvUEkqQjg1Yix3dTNxeHZZMV9bNWptYDN6di4vW3l7WHAkT0lxbTNiZiJlV1EyUVBuKT08SWgqRUBFSDd1ZnJ9VWciaj9sYDRRO2lEaSMqOjpyWzNCJXwidyFDQCt7cXtMQ2pZKXNVbnF2ISVlNkJhVUEoRzQvQChOXWUuNWhdYjFaWkpV''@;'; put 'put ''PSoxOkFQYVp1c1NsYzouQXIhN1tqKGQzQntbYX5PI1JRS0J2c3h+cTNVJUx4Y0k2SHNrKiNAYGBXPj0hZzV+T2l4TyhIZk9vImNWMz1OTSJGNj5meGMkJGVFSSh5JXNDfm5qMnRZOnZeTzt3XUV4Pmh5bWNnOWd+aX1NT1Q1UUY5SCN3Z0ZYPiE5OXYlaDdMQkBHPH42YkhPKTF3QSgqOkVgazM0''@;'; put 'put ''T0c2dF11JERAZCE1PHVUeFNtakVpaHVZLmFbJCMqfUVEM1o9eEU8dzx9P1lVSUNsIXpVOj0pbkY+diYyejAmKmFlSUYpWFF1Vzp3NDFDO1U8PHR8UjAhSXhgXyEqY1tsNjtnZis6ZkxxejxpcHI9Ql9BcUImQj5CX0FxNzA6NmsuQV9fez5VXjtfXmclQmB2RDtlUkk1S2s8eTk/cCo/dTk4JGly''@;'; put 'put ''Yzl2M0xSQ0B9en17In1VPUErYHFCKyJ4O1UmNEpONGs+Tk18fTpMYV51bTB6bltuRnQ7N3phSFJXQCtWPjtJRm1VN3lmIiRmKVs3XkNMOyV7Z0FoRkZGZEZIemd3UGpaTV9OQHhqXzQ3b0l5NFE/W2RvNGlwMzU9fFo3LiklUTNJWmhIK1lscFswUkZ1OUIrbkVHI10rKnUpek09Uml0QDZnO2wz''@;'; put 'put ''OFpuZVFWJGIsZlQoIVpbVWExTlo6azlsW1gsOUhLUjwwRmZxRDhvZ1F9cWk3ZHVdQCg+SFlOOFgpN2Rbfj5laWIlVjY0VG97JFpXaSEiams+K1NRd1klPlJSeWR5fCN7UnlgQDV0OzgxN15UZl1ydyEsIy8wQWN8QD9xKV1mT3tQZmEpMylHa2RBZSFGX0pPXkNQa3VxVVtUM1VfKjRzQEBgTGFg''@;'; put 'put ''LkB7W0xsY1E4X0FkYTN6YD99U0pBfjI4LDs6W1VVO147PGFbKjtoOEZkT2hjS2M2YEtyP2I9NmpoUjd1OUdwMEB1cWtYI2BfMn4udUIve3JwJTBaNjVjQlRLS306NnI5Tl0vSj18ZFsmYiFDUWN0c2ZCMThzPyZ8aXlgTCo9YTtGZmohfS4zZjBQXiJpPmF7WCM4RVAmPDRSMVdKJlBhLjRPSHFP''@;'; put 'put ''JSk0TktUaV98MG5za04qNVo0S2c1WygrIVBGR3x9fXpQbnEpRjJRaj1eUSkzenlSZDRqcSVwd3lFT31QWkVASk5qPXVQJF9EaXRZQU1PWylZW3dINWxPdS5ueHl2MCUrLD9hRno6NG16IXgqTCVWUjNbbyl5Z2VDV2p5UmQ+QjEmV0VpV099OENTK0REb3llO1BeTkxbZjVicz9dOndqKyoyWH5B''@;'; put 'put ''W1RIdSl2KVBaZSV3MTBBU0p4NHY5RF92OjZ5eWN7NWo9RF1ANiU9UmNZRiozYWAkOitHIlFEWDNRZSI/aXc+eDB2LmJdT0ZTLDFTMS8uIWRLa1ticzxdY1pEOGVMUTZ2STAhR1lNLEtTW21pUkBJalErKylCQE94dHZCKy9ldnZHfDd6YyRefHI9Y31hZzx3KjEyYTZuZGtRO0w6N2VIRXBNaz9J''@;'; put 'put ''RTJVYlF2JTtxPyElZX1hLClaL01sfUlwcCZwWXRiJHBzbnBvbVIlYVVpIzs2XyE6LDl3JGBRMWskd1BPTHVnYioudlUxbHwmJTMsRjFZP1NRTGFgUFRhK1NmUS5eP292KixDem5wfWwwP0VPZEwqWV45LyRMbWQkOTU5cj1jL31ndT1SNF4kPVdzM0dZcH15ZDQsKzAxeTtkKTVpUFthJEA/ZSZP''@;'; put 'put ''WTEzM25SNGd9Z3VxPz9VPjJ3UCsrMntKZ3EkXTdpQTBaNitAQDVgcE1RdU5uZS4pMFhedU0+SjVgOlJ3VHAxaWh4Xj94Om5tVkYzX0l7PVs9bW9VOltvaXJwPVtUVHlVfC5Danpbb2lPOGVoXTxjKT53Ky5obUo1XXEmdCk5fF58SnskRz9nQHJqdk1kX1ROQiE/RCt5Z0BuKjh2XXApXjg6X241''@;'; put 'put ''Y3haYlI2RVAmNyxaezs/IVhoUU41UWgjQ29oeGlgLE9xJj9bWENmNHM6Q3o9VzddIVZ+XXlpUEl3YiV4TElIQURNeiNlSmBWMUxYe0ZsXkBhSXdhRFI/ME1lLEVuS0prP01nX18uSyo6dHpGRj1IVlZLVUw1PmcsYmZORFJtOmR9Jnkre18uQlZ2d0t3Y0YjZDspRXxEUkFMcGZ5JHMzfkNPdEdx''@;'; put 'put ''Qz4iTEp6dCMidmdZfl1fOk5fV2V1XVhNfV5XVjAuZSUkM1F4MCxIMncvbSEwYiYyPz9QJWtjNDZXdmtPP1YqNndqKypNdjlnWDN6OTZiSEoyakg6OC4rITFYNmo7PX5ZSHN8Y0J6RigqQmtmX0AvdlZ+RWsweXZzMWAiNzMyK3chbEJxInYyfldScXY/cmZYXWB2cFRUX0BkNn12ZVt6QmRFTF18''@;'; put 'put ''LyIpcnJ8RkU5N21fTGV9ailwaCo8ZC5mVE1tK3piS0NdcnU6WyVnTF8kVXI/dml+eEQ8bjA0Ujs3RmRAOmtFVSxnSixwJUlXO2wxSko4ZXpWNllXLCJAN1hgKSg2STU8IVRTVlBNS3A9Tm1uOm92M0ZhcGM/WS47aWolM2tmJk4sbU5IRWZ2VCpXcUNFYHQwNW8ofEphVT8zdHVjOCgsZF5CP2l+''@;'; put 'put ''SDo/XloxRUR3R3ZveUpGXmtKdi4+P1N6RjEvdDJwfVszQ25qTyhFRzIobEMmKTJUW15IakBwMnZBSj1fTiMkYD5ZRj5hU0RUZjlHMF5ncHYvPHxpUVo6cDtQX2MjXTxfKDksekNuWmxYPE5bMGE+QClTJWtGbVlmUHYkemxSaSkpY3c6XVZdezZ8L0U6NlVtV28uV1shTDZkUDY9YlVsdnhKMmtA''@;'; put 'put ''MjBTYjJiOlFNYVU9RjZnTzFvLCVSelNWZHVvN1JTeilQVlhXOig1R21WWEJHSDVTIyNtODxkVGxxSHQ8SFtNMCx+KXk0R1E/MFI4KFg3Lzw/IVVRZWY2QHJKQCtWK3t2X1YjLHV9T3NzSTBQdyskKXIzdVNKeDdURG9gTTgjbihKaEtkak5kYVlCPl1eViZeTGRsajlKWHVjbD14MmkxQWFISyRL''@;'; put 'put ''fD53cTMxTj93cVt9aFFYPld4ZGlLRSRadDpKeXomP3tYciZScmZmeENEKkcjcWRZakV9JTFjcEleWT1gTFM+P3d+XWs0YSZ6Z1ZKMk1fc28rUU5fJl0zITU/LlkxVV5TQGBgYGNue08+eGI+M28qTT1LIlttejEuaUp2dyRDR0YqXXVVPVgmc2g4RyVeX1soTlhpc3B3Nl1TSy80eUZiYV9KR2N9''@;'; put 'put ''LkE5ay5gZWteSnlrdlYsd2JHcS51JDZGZUFZVSFWSWV9eGMlb21TW0JOUVVRJV4wLDRafD9OJW1sdDRldWh6Rj8iX21jTU4rPkQlYlR5Y31dViUwW3tZMSUwTGJxOzYrQmpPO0V0UShkW299NSVWXkJoPTE6LkRWP01ydT9feFRPS1Q2fHc1amY5NzshWHxEOE8zeWJiVT99aUpwd1JMMDZAT0hw''@;'; put 'put ''QXBgTE4uelUyNEhqI3N+I2wweyI8R05ZMUdufFpTajAlTlFORFYxTCJ9bkxneT9yV0pyeE5fWmhVem9dKDkjYiwxbkBaeEVjcnJlRlJJYCZoeUBtaHxWd2VGNSw1Xl8sZWgjPmE+bnJsYHE3XyptaDYqcTN8eE1XbDRSTUIrbzdCdysuYltgLlpnaHEuWHpoPkA5XXI9L1Jua2dQRXd+Vjd3OURP''@;'; put 'put ''IzFVLiwlaXNWPi5xMkV5IzpWXWpoMi83dysuM2MoSzIsK2s0Kj87VE8rQEI+bElGSzxZOXhXRytNZ0hReEdxK2N7KyUhXnBQWDNtfGYzbi5lNGYqJU1GPy5eOVVIU3pGbjdSeUllTjUyWDU5L1p7SjtfRFQ2QlpNWl4+PiQqWHJIKltKWjBybUZnTC5MaXoue2xgVFQ/LmIhYC4lc1VgI1FQN05w''@;'; put 'put ''WD5PRi5IZ24lVl5yTXZaeVEoXT96dTUzUFtLVXlla2B7L2h2fi5dKGQlZD5ecFtaSF42Un54ejhvVD54QmBAazVUaFNQZVhWLzR8biFPbHc4LDlzJlNjWTgpcXBhKVhVSWo1aiEqOVVGd2NGbV03aVpaP0k7YXgwaS42YFczXnIrWFp5YC44N3JGQkBdKl4qfStjJTE4fSQ4WHpYMEJYa1cqfSss''@;'; put 'put ''Z0BTa2MkaVdTfGRQXV5uNVVjPmVpaXlXb30kb3pLX3NVbCRNdjIpZWFCRmBnVmM4ZnFgOSVuSHFbVGBrKVk8ZFdVOD8uXjFHR25GPy4+dT57c01qPXIuXmt8PiVudF59UVYyfjFPI2w3WlU8P2FpRWFbW1NXZngwJTFscGdwcVl3Q0pgK3QhV29DOCRrPk8kUkFXZWZBZUk+KS5yNmw3PUkhN3l3''@;'; put 'put ''bGxPKipfVShfKSJva3lld25sOkojXVdhPyZ5IWtlbGxpLzEuNVQ5dSY9PS53MC50fWJNcDpkQWl4Ukl5MCxLUzV1Tn4pa1l5UDpWZCxdcT5sZjV8YWs1LDx7Vk9SRCRCOkw0NzxraTJ+bSVWbVFiOjJmaTZYX1RKdi9gOFljUXcoRnZATSs7STtVb0UwRFlqdTpAP2pRYnkmKT5SdGsoL2htfmFg''@;'; put 'put ''TnxZMiVSUkJIREtraUpOX0QhckpqYmQ9VDw0KilONXB0I258VFZWI30wdyxCPT82fDdLNjtEVlpdSDNkM1RGdFkjbmtvTkYqKTVvSj8iaWg4ezJ5Kk9KeURBdjhIUF5XPnI6Tl9Zd2w6NjZHalo+fDJgXzNxOVIkbm0wfHZnWWkzZ14oODE/QWk7bFNBN2Esby9xRTZBaCtkOEI2R049eyxVZjo3''@;'; put 'put ''I04jem1ydlZgYXcmNiwhL0dxTWVXXjNtZ308YmIuaUZXaGFmdmNjM19EfDIiPUJfS3c0eStGTWk4WSJDanRCWnl1W2tqNTNpKiFgTjd4bGQ8UTtZW2xvVWhzKmVJKjBEaC5UOmBnVS85W2tJTktlTUYqRFN6U3tQO0MuJTdfb2dAaXJvO1VNO1UjYklqVC9hbiRsYEl5V34hR3RUUiUsXnhQWys/''@;'; put 'put ''eFB6SFUhTT86dHI+NU5EIVBudzN5K0ZRPzx0JHJZfXdKY312WD86NndHdDUic20zMXI/Pks2Sz1MY1d7d1Z+MXhQd3ZNLjtLPGRManREYEZUXz9Dbz80TypdPmd4Q2RFNHhHVzxVUiFXIWNzPDlUSlUvOWR5XUVDTDpKen5ZJV19fV9OU2MleG9XRDUkXjJnJCssPHo4fnVrWV42KDZlR2heO1k6''@;'; put 'put ''XlNMa3p4ISNeTFZZPmpWcztFQVloMUk4Q1ArTEprTGFuKjs0clFqO3J1amAiYVVwTENlZSpxOTBCa0hyUzFAZmI4R19KL0kvbiY8WmIwOCtHUkRrYkgqZXAmbywwMGYxJUhmMSI4IWt0X3RhbV8hVi48e1lkP3orZ0Z+cipoREAqMWNGelQ3aiFvdkYjKk1+VGFQRWAmUiV9eE48Ky5LQXYzRWBM''@;'; put 'put ''VFs5NTxbXX1pIVovdXBTMTMwckJFZl19MD0lV3dKd29dJkk3eGxkemJOY1tjYDleZzhMMGM+L041PjJseUlJZW0vJn1dWlA2Rkp+KWFedSp5N2J0VHhafG1lZ2NbNGFJa3dhbytmPV0lOmooOzdhZVpNSDlhZFJyW2RPcWdwQVYoMFFhdDh5e3g9P3JtQjJPW2czWGA0NmpVUjgvMFcmTWJnZVtm''@;'; put 'put ''flBbZjxteSQ7Pz5eRVM9K1spR05CTHwxPmt6MV1PSip1XWBCU1ImLyVdblouVCtCX3ZqX3BuUmwkVVF1R0hIS0tYVSxRKHlkI2ReV25bJEtCNSFqbFV4dkZLNnQvN2dTWy9KfVtgTFhdYDw0b3Bvd1kofFciSTA+S2pGO2V7ZUArWFUkdVU5W1QzZjgmYCx3Vmd6d3goa3k0Z2h9YHBGTCs0O0Y/''@;'; put 'put ''YVpuZyo8WiRXSkpkOXFmO3Z4ajtIfD9YcTFyXztTW3NBQCZscCVVT0IkL2ExZkQwLyVlM1BwVWFbK2ldOFFSOGxqWz8jN29IRnVIQS8yQixbMEw5TWAvT1g+TUtZQE57SkFUel45cyMuM05TTE1sMlEpWXtAUCVBU3pvTCsleEIuM3ZFamRYLlFNOUF7fFtkb0koRiU0QzU0PGxhdFEzQCV0VG0z''@;'; put 'put ''cXJjVGxVez05QEwuKm8rYDluVWBdJSh4WS5zWEFTRGc+W0dpM3lePCpSPFJlPS88OjhVfnpeZ2I+REBtLyleZ0dBcGU8dDUiIjhkREtGfl1meDpGPCZzWzhndn1EdS4pPXFoK3Yhcns3SlYwNzkwYiNZYnxRS25INi5vKiJNQnI6SyV8NHg3c3NZV1lOKVp7NmMwcWI+P0NbSzImPzgkWX0xUSZE''@;'; put 'put ''RFI3LztVWVd0IjR7U1M/UWM/ek1bUzJ2RFZgTjMxL2cvMjlrRH1fQ21dbDNpITM3UEE5ZXh5TjJ1MjlrRDVjMjlsd2F3LzskdW5xQDJ8I2AoUEpBOW1aITV1O3QxTCxXUGFJb3RPaEpHSzMuOyw1Z2Z+ZiwhfXd0ZWtRMkA0SGcsbXFsWV90YE5+Zk81fls0SDl3ay94QjVlfmZteCZ1XlRuT2I1''@;'; put 'put ''MndmPU9NWlU+NXUmaEozaUpSczJdVHpRQkorQiFxMGJyN3cla3dzIzxjcXEoU35CdCN6LCxGMVFndjVuOjlhLyVvIShzd2hWcU9ndn5oXitdN25PSmRfZEwsZi50eDd0ZSZoSm9YbXNUdTBnYllvNTRRZXZVbSJOezVXKUNyY0hBTn0lezlhMS5pQWMpcXRpZTZnVn1iQCttKVUmcEo4eiMqWjF7''@;'; put 'put ''P1ljWGU3LFV6X1E8QEpEezN0YFVRVSV8OUEwMC5+Pjg7fkZBYT1ibCljOW5PQU5fTlk/ODtySEFOYDZXPzg7P3p1ejBmZDFvNV1WfkBDbDxAZ09Be1lPWGhhWUwkbDE0QiwrbHpAWVhoNkV9X201X1ZxTlZDZiluc09KQU5OU3s/VSh2LCorQWN4UT5qKHJgLEFIb3U/fSM1dXomVltXNyw4L2Az''@;'; put 'put ''c28lWXpfM2hpWWh4eFE0KiVyN11pajl2N18zaGQqKitjQTo/VSg+KyorJX5IYl8hZnEiTjVnc0FMaDpFJXw9MUV0bHFZVClAaWo7TmVxWVQmQGlqZlthcVlUeioqKzdiaCY1SmdgIVJadVBoO3g4fD0xNFpaMXBNXlZ+QDpFUj9HPWJIQU5bR1UmNUp+fD0xQFI6dVZtOmJBMDptay9QJnhKbWAh''@;'; put 'put ''UlUoZE4iVHszVmQmem1qJFo7TzJjRDpOSm01bnNMUVIucGdjbk1aW0dnYHJsc3cqR0M/WlVoUUFhaGY9aHxTIzRwdzUvVVlnJnNxejlKajNoNUx8OmMwVmkuK3lRPiowZ2NuWEx8OndJQn0wU0NSamM3SFBkenU+NXBDMiFPU191Omhkc25NdlUoZzxAI3gkWn1uNj4zWlIxW055Qj5lRl9IdCNM''@;'; put 'put ''bVNuayRRJE9nM1tyOlpIU0BpbExIQ3tBQ1FaJiQ0cSs4U2FKPSUkVHtuLyRKNXQ/MUZEYG9oWSkrNG5UI3tVYD4qWF4mYlVyWyJqJC5mbVJpLjJUZFBofj54LyNeU1hQSHlUUyVMJDM5KSJtQkckM3RvclZFWUE5Wnpod0J6RS8qMVI2SmN7V0tQTy84QEJ0Kzw4Y25UYWAkUlVOXkQhNjZENmA1''@;'; put 'put ''LDxFSj1WKXNRa2lVO2hZL14hKiVjJkZocnQ3Rms8Rz95JjJDT0MuJU19ZjYyJT8/fX59NHF7L3VDRDE0VCxZVWArZzYqKz0wdy4rLFF6emlINzQvZDZ1K1NzSihyRU5YeFBZaXBZMk92KW1vajN3SFQ9Ky9xXiYkezEjK2tlLl03O1dtYkBLX00rMkhQSTksQkNocFtefHFCOi9GMFZZXXRKZi58''@;'; put 'put ''e1lmY3dSLFFCTyFDO3E4bGw+T2FwIz5jL15vJU42e3E+TkJqITAuS2YjTTl7YlIqSTpiZm5aJDp9IVZZTTVze1dxbFokYkN4fGouJl1gMTFiUVk9MCNZV1dRZVBHRnYxVUk+VUhOcT9nV15FTERoNSMxLkpZTzBxc3t0PkZ2O3kyRjcmZ2g3czBzfEdWVW5eOThBc2NueD1zWkV3IiJzfDNUO3sk''@;'; put 'put ''QjhjdWlmK0F3MCg1ZU1NQlQkSFtFc01Nc313NltVMDA2JE41bF47aSNyWDw1bHw7WUEydnVBdndIfV0xPyMzfkVaN2Q8JGxSXjhFfV44Q3UzIiMrdnMubiMjcFZzSyxoW2R0JC55VEM2NlNsLnhJd1FQOGQ5PTl0byMpQ294KlBraElDfGxJUHJtJk9XRVYzKWtEYi50JiUre1hpWGt3eXF0P3Zd''@;'; put 'put ''fj11R35bJjU6O2hSWVFDRG5raDEsKnJ8YXhHSGAoL1N4NDFtU0ZVMHZFZ1MwIWs/VV4mVyRpSHQxPTlIOD4+T1ttW0t9LCVDYGo9dW1ka3p+cDJMPlFUMTtzRlR9VltgNCEmLFhnYnhwVnt3bnsySW40MUVTQnx8Pkx7b1chfGxHJHkhbmwqU1BhaCNCfVpZcy9NTEltWVFDW2Fpbysvdl1pLiw9''@;'; put 'put ''UiFAeWA4SjMsZXhwUCU4fUA6MlRaSlRzNWE7S1J4STU0RG8zTzVpe29lQXhAZ19AM2szMTVIQExqQ2oiXTtMOUYqezI1IT99XSM1ZXkrLk8kL2ElMkZkaz5QV2oucmp6JDs2eXlVQkFMP3IkfSp0cWBEO1N2LzlOMS5kTkEydkVUd3MiV0ovL1hsMl94e2Q5ZCMhQkwvaSp2Tm1LPE90YC42PHE3''@;'; put 'put ''ZS4rJVddX2NgTCopPitEWDVfaE8zZ2ZEO0pRP1lWVUJbRFQsXl07WHM6P2MiTnxSZExMU3AmfUA8dWpWa1JHKHtNc3oxaCFPcVAzfSNNMmFIYiVfP3FvQ2FPNXhFaVIvN1BvTVg5K09oTDlTNHRFITdYTiZGeXhdUENrWyQzbWpnMSgic3c3PT10aGhwcldgZy9SKD8/OGgzRGNKRnZZRnUmKmlj''@;'; put 'put ''dHEyPis5JnFMTFgiVTpDbyh5MWx0VF5ySWMhR003SV9vVnMoZjhGO144dE1QdjM6ejYsWnJWJTViIkRVOjl3X09DWjJrRHFiSis+YCYjLDhCZDhpPXxYaHkiQSxSVSUiRFF9Q3BvWUJiRD1eWFU5cW9yOGomTlRjZlg/OGhfPVNANjtkTD1oUno4Omhad1FpK244LjU4UyxPd0c5RjU9eE8uRyM/''@;'; put 'put ''b0JsOEZdVys0aGZYdn5yTiRzV1QjK0sxKnJSQlFlN2cmImMzOFMsT1NYd2dGO1JlSjpEJjwodFBYWDVuSDpdTERWKjJaO11kVk5vL2VZImhIcWVvY2B0eiVrUTo9cXczeF1JX2c8JElWSX1xVyZjMW4kbU1mNjxbZStKZltffSY3bD5+c2ZpWX5ePGM/KnxCWEtsYkN0W0tTRnNaQjQ1IiZAO2hL''@;'; put 'put ''K1p7OUJHQDx4Nk0vRXNaJSl8PkEyUHRISVYwVFQ6MkkiJE46JkRSNHRYVzo+PTolYXlXVkZaMVFrKCUsWyxje3NkVnNwUUBSfC56fWVVSzBwTnRbS2FGaH0rbi5pdiw+fCU7SGgvRkZhVHxpXSF2fkJPR3JkX0F2XmYmfD16Ylt0I0w1MzsyN30/cmtrPyhCYE5OekR+NC8uPCI5Mzh0Q3QjVEho''@;'; put 'put ''dWJ3VlZydUNLSz85OylqaWg6bSY3P0RAangoSTtpaHhaSUZ9I3kjSGQ5NV9na2RSTmVUI3RtZ01BUiI/OjNnKlE+NmtCb1lzKi9VQH1aZUpick9JdFhELndVY2JvekRLYnQ1IXZWdjx9WiowKkZsWH1waCZYamZHWHVWd2NHWS5uTHdsVGFmR2RnVkAkZWYlVlhEN11PQD9fW2BDfnxzJVQqJTd3''@;'; put 'put ''SCV8cyVCYmNaeE5ebDYwd3x3QTAobXJAVkZgNSYySDQpITtFRTRMM1gyK3l0NV9MMiJXKVchViFycnMyb3BYTkxsTmh1fXdxb1ZTXzNJdnZfUkJANF9NQElkXmlRPGEhbyojeEc5PSJRO0smNWxgN0opejNiXUhkfj9tMl8uZjR9T3dJe0c8REVBPylWXV41Z1FFVmJ3Tj4jekoqPylKTlJ2RSsk''@;'; put 'put ''X1cyKXchSVQ3RUEuOnMsekxDMjN3cDkxfnBXQ0wsLylINWt0MHZ4XWorK0FQRE1YfDs6KSR6a19mRSJxRGtbI0dwJlkjMyRTRlk/SDQhdlYzX3l0KUgmIUsjZEo5e255QilrenBCP19qPzB+ZzxULHA8fmA/SixgJjVHRTVAVE0yVD5jXjZVRTVDaER+Ui9oWyhEWjJSPSxhXywoaHM+PjoqLmIr''@;'; put 'put ''RUxtYD1VKjhvPDN+MHd9LjMuQkdhLDR0Pjl7alkzd0thPE5ERjJZUlgwc0pAczltZFNPZjtvazkjaHxweXg7S15vSnR6Y241Q2dGfUJXMFBdW31GYkVyPHVtVzlDQGolM0xDPDMuXk1ZeE5YRWgjS1QvVSNAMzIxSz4rNF5Oa01GVTI9bjN0bFRgV0t1OUJqNjJyQyI2dTxYdnxBWGc+UGVVM1tm''@;'; put 'put ''OjJ8KjtzYzpOXW0uTjdGNSFnbjg6TStHPSt3ZU1LVy9KaDEkRFJ2OzVZW0dYKXxVTHRyQy9gR3BXOCtCZikjRX1RLn5tQi9lW1h4Jj1DMzk4YylAS0ZrLiNvYGheJXkhY0JbQGp4LmAjb2NmKUpNKTEmLD5rX3xYc0FsZ3dSUUVhVzJHWmJCSUZic2I6R0U6dTR7c0Q/ODtMMlBxfld5X2ptPmMq''@;'; put 'put ''TWYlXSFZMDVia2lUNl5JRyZxRzpAVnQ3LzZEVndZPkgrRkMxKSFlNjd4Uy4zODhxfGYuR3gmRSosZV9RaWJ+a19DXlowK0EuWzlYI0xgbVo6b247aSopYkI1SFUhMVN2d3Q5IzhAYjUxeGhKPDY3L0I7QTlsZ3VrcnEwJShGVEh2Q2t9bHFWay9RK0xza15xOWkqLHk1aGU7ZXosLDpXbXNsciNW''@;'; put 'put ''PE44JF91MVY7LCs5TihGNm1zaHU9JjU8MXZZT3p3OmRHIU5fb3d1SDtJXitYa0x4OUR3JTBGI3h7NWhTL3o+ciNRRlR3cn4maXNJNEFUbV5QKWtTTSQ+diNiQ2UuZXUmdVB5N1F1T1FUTGZgRERuJVZ+XTR+LCtRYnpSWyZxWnJ3cm1rdSJJKGwxQS9PZVI1UHBgUmJRK0lLRkBgampuPEY8OC9P''@;'; put 'put ''WyE1ZyVwaG92XlcyN2JwPi85NGUpWndSLCpOQDJYK3QyZXhSLnAyY1c0VDRsJmQoXkJ5NWxfKEg1Ym9qeGV3SlUscE9dY1JSUWxpUVtJeVtKRGtGJDEwRkApKHtKKFsuQCY9SUQ9XVg8MjI5JiZgayxgTD8qU2F0KGt4Ul1uZGVdIzk0aDAzNWIzJlZ2Int5MXlLNmVQOzlJYzljSXR2TSp7NTxp''@;'; put 'put ''R3E+aWdKXyVkWyM9ODFgYndVd3lycCYldDlhcSFhUVZ2OTw9U19zRGkwYVJBPWY2Tn4vZzI1JU9EVVdaQWhLM0NqOWUoVDtVS3BTLjY7e05IPSE3YXFkOEtDcXpaNS4wNU43Kz9sezQlO3lgRURfTkk9KHYiJHtpU2RIMFgpQC90JWU/Znw2K1ArfmV4UVl+dE4rO2NkalEuMUldSjU9N1hfcEBT''@;'; put 'put ''blM7REI8N11PajQuZ2ZYaWReRUh5T3s8ZFF7OVNEOj5delVDWmFkWGBTYERKNSZydTZgTk97ZC81IjdRbEBeazA/NHJeaTokblood2pqQzojejo0LHxoX3pLOEg1ZHttOWVRKkUzTzdJY1tbUl0wNmRWaFtoaz5tUCZsMXZXYzldfmhXLllwV05gUiVVPzA/ZVNzWF8+cmhJJnwmO1BUcSZgJnFs''@;'; put 'put ''L0txdWQpZV1nYlA5QSt2TTc5clokSGxQU3A8bmdVVXlZMjxkKVklQi5UQiVYUmtDXkRKeH4vTixMYio/RzN0PF8pZnluMnAzfSEwanA5SERuPjFTWHt8WDFyOEZkaWpSV2ZjIXI4PDRJL0UsTl1Ja19ZJE9rWVZgZ1o2MXV+fV1PZ3VxSThqP2hOQ2A/TGs/SmAsakB6dHY+diNQZylOUjBJSWFZ''@;'; put 'put ''ZnxXZlYvMjFmNGJaWUJ+ND0xfWFyVW91blAmMixDcE4zISx6ZUFodjNRbClRdW5PJjxsPnRqKHt7V2Y7JVhqJG9nPWUlKXMjOXlZQlk8fC92bFQ0NGY1dXJKNS8qaCs4LHRfPl0rTms4Z2FwMEg1aHBUbDhzfWdVSENQdFR0cGooU3kyLntacH1oUUVTMkpvMzI2KFtKY0s6Mzx5Z1BjfVpATjhh''@;'; put 'put ''OHQrJXZlajhDdH0qUUJ0SkRWLmdoJjkjLDEhT0FueCZNcCNBSlZUbD5LbHVZcTs7WmwmRHhkbWMsY14/NzU3QCZmWTJdcEQkYlllKUVsUnsvZjxgbTJYVWN+cE1iPjhYSEcwVEo2NWJ8NDs2S1EiP25ZXl5gNWJgZ3F8JEpHTXo7LnA0cjt1N3RRQ0BTRmw+aDE2JFs7ck8hbD1PP1UibVsyJTdJ''@;'; put 'put ''ZF9tbGZBYFF5amBuR15oY0ZLJk1xJktGQVlGXkVjenhfIlQwakZBWWlrdkQxdXp+P1l7Yi9dY3x3OHU8UDxfOTU1eGhRIVlyMHYmMTo/VD9uKT9UTn1EeTJRYXRhQkA/ITopSHMwNU93ZDZWVGBULjhKIkBPTFh4X2tiYkdJeHIuYWc/I28qVmtjVEZkYEVPdT9nY0NLQShiUHUlIWpKb0FpOjdm''@;'; put 'put ''az1LMCskPzw0JGxke2FQWDlYIWxBKDddMXRpd112Xk8sd11FYShLMTYofD9mXj17OzVTeldIX0FVMz1NVSRQMl4zV0htKT5sQyY0SkUzKmJPRWM+bXUpRGF+IXtGajFiaHI9JVtHND06b2xIPUssemB1R0pvMyljd145c1VIeUhNTCEpXXx8OHhRbUpqVW59fGVocWdQazVLSCxOcFU2W1NpTCYo''@;'; put 'put ''Sk5ZQyErbn1XSit8LHhCd0FBQWhOb0FVRSJRZHQ6ImpYTXZpekg8P11ESH5sRThKej9qciouel1XcnVoeC5MN0ZCQUFBQUFvSVk0flgkUSI3eSY2UyQwbElsJTsuRFRAeGx4PTZaRFhhOTNZTSxhTHZVXTAsOXRYWHB0ajF0RF98ZDN9N1poX10hLF1xVE9AOzhmeFFBdXslYHtBRGYyR1BbUDFs''@;'; put 'put ''JFR2OVlRYyE8TURFb1NAb3VsUUJYWnNDMyIuWGBbcnQwZkpDYFd6KVk+ZXg4OzcmUEpPelEvajVMNyhPNCVGVzwkN35kVGt1X3orYS85OGUvZXZ3cWs6Qnl9ZDAiQGhLQyF5UVVAVX1kczw9N05xTDNPOHM1WmBTVH5uTU1haXRGbkIxV1pIOShIbUJ9ZUVDJm84OUAvTzciO2EmcWQ/VyFFIWpE''@;'; put 'put ''PnBEdklLRl0yfGpuVysra1lJZVhKemo+XTttL0U+e2B6SkxGSyRVRzAiWSJqWWgoKitjIllCJnR+bWVwfk9rfVFYNDspaCg/KzNbZDdOIjlnSXNyeGQ2I2dueTtmOG15UFV6dCxfUyFdTzlLMmx2JmYqUkxmPl8kYXFwdmJGZm1PRitzUzwzYzZRUVJlPmlZcG1IMz5TITM+KnciYGVpciliam1v''@;'; put 'put ''KjMxV2F6STgpN1dtfUlhSnAwWWh1Pn5HRU5gVHRpIjE2YHx0WzVdWCI2JVFWNVhyJE5GTy86SlgpaS89eTB3RlJ1fHBjQjZFeVNbM3FCTGsyLy8zOH5PLFRuY2pSV3gmIm9XdDAhQTUxPSE8dCY5ejhQMkA3anNkbCNTUi8iVnk2MXFXVTV8XTFyLCpwMGU7KUMxUXo9cTpgQ2toVyRNY0txVUo/''@;'; put 'put ''U3xNcS9VO3x3RiJLcGA0P1opZGcuQX1kQ19NWHpsMWcocFQ2NTIuNHE1UUNpa3hxVjEkTVJERHx2UVV7PTVGR1kkQ1BTIV0yfVB8clQhdThoWnBvRn4+R3g/eyJ5TFhSM0BDUSYyeHs5N1BUTmA+JEZrciNXOlE3RU59bihgW1RYKkRjeHtxbVVaTjhQbzp2Ym5jVT8vVmxdPVZBbD9EZXU0Z3Z2''@;'; put 'put ''IjgsL1RRdzsyeVJOLEN7QHc8bk5eeF9OKF4ma11VdyZ+OkRDPFZGQkZYRGw6a1JQbjVAeCxPSGBpbDB4JDZLckQ5WDtiSC9MTXBVal1dLztkS2BNfnp4d28qeHpKbCoobGdGdjEsWFlHeHkmWXBRak50TlI1SEowYUBzfjxJTm1wYkRYYTJPeiY5RlYpPE9QKGErZjJyIXh6cHZgXSZqWXNFb28+''@;'; put 'put ''UGRqXj4+aCk9KnwzVyxLeTJbRT12TGAmVlJYSmdaRSZAWVUrbTNeW0xHI0ZwQz5kVylYZSkuXUs4KjFbUFBKLHpefGgkN2xzIzY5ITwxVytuNiVZZTFUWzJnZTl+eDY4YnM8L1h4dSZmYEw3MHsxSHB3Yll1alY/NSlOVmlbSy5nLEMhOGcyVSpKKilVVmdrQGVpK2tkUi5ZVCZ8bk4xXjtBOyt+''@;'; put 'put ''XjQsRTQjWT8uJUdpPm45JnNbbHwhIV1JMiNsPz1+YWF2W2MqRn4pKFJxPGYlTmY+P1phc2t5InFOUm5qa0dINnkrPEdhJX1nYEFUJHQvfmo1e1JDQjprI2s7SWxjeyppUXNVM2oqbWliPiJ5Pj5aNSxLPEpsfmUzViRHX31OQ3pJWS9uRVM9QnNTK2ohUng7Ml5oJk9qUW1QclYkdVNFdHt0OCRw''@;'; put 'put ''a2h8RDNzYTNgSDRVIWxJRCswaz5vfip8fENiMGpIbGxAQmYpdVY5JH52WXVrIzl4cW9CcSZeNWlDc0BAKCtoaEAlTEYmQjtXVmkzWG5qOEd6VkFefispamRfSVNHXW1ka3dCSmkqOlZXbXVDeDgvbyJNcVpCUCgwYXkmfT19N0BbfT9CdHE5O2tTPi8od0BAXip6TzcoXWRSS3VQQ3Q6PiF0KmAv''@;'; put 'put ''Tn0vblJaQj0rcG19bjpYX3VgWyxjbDEzV2R2YV5rIUlLcn1hQko3V0UrTmNGbXdbPUhLPW46NGp7ZUJxLGpPNVMudGxeKCx2bmdVUTp0Y3l9flQ8T2IvJSZKYyhyR1ZYMER5IWNIQTd+UF9iRTpBWHAkbEVWe01yYyZgJTY3aVtxUzhtRyUuTCRTQGYrelc0TlA9Mks2UW5yNlpWOzo/P3p+WDgl''@;'; put 'put ''el5FeD9QUGlFbk1XOSMsOGk7KDA2UTVxd2dGSCU9ZXMyKmcrbk9bQypUfllZMmxGYCxgQC5uO2k6JHlmIVdkImxhZz4rSigjJkRoc2x3RC9mXS5lZDdoRDdxV2dASURrPW0kWkhkMElSX0IlYDRzdUhbPFVsfWk9fXNSOTZGZzd1elJzcE1mU0BFbFh2QVlwXzV8Nl1LInZCL2hodWdgM01dPiso''@;'; put 'put ''XjsmcmkzTVZqWz87IiFXTmgyWVEjPE11bG43TF1NfGdCZDBaJF01LndHKjVPUixhS0hkLzosWHcmcDQ4RWhuQkNnQms1JWNLRW9XZ142SilZIWtPVFtfTl9wcD00P1sjYlFdM2k/dlJgbjpaMkZ+SThhPyljKzVwa2QrX3BNOksoYEhlUDp3dW9jLllhWHRITm8qVTtbbT9ZWzN0IUApem5FVjd6''@;'; put 'put ''dVMpLlpbQnlbZjNVVWBEc0hdTUp5MCwxYntnK25uXz5MW3V2SVVLR0xHRmN0VWt6P25Kb0xkRmNVM21mRWshYVZGbWMvJjVJbCRjaG9JVk82MF4rOXV4NV9FWXpFPzxoTD1SRShFT2QmOFhAYDRESEpBQW1KS0pLRWtxeVphNU5xO10jSTsvLE5iYjV6Pm0wMlV8TFBGamcyKElXQ1JbNDc4NSVE''@;'; put 'put ''Pns2JWNhTyI1SkpCWmhbSE98Y08lclRsVV43a2xkQWQuW3hPR1QrOSNXITlEMzx+bGd7RWlmbm1hIWloQCFMbDI0T1tpb3lqaDFqSyprPnUyYnVpaXo9fVVfQ2ljbnFLVX0qOGgkenZhVnJ8KGY5L09XcyR7KiVuX203QG86eSp5MXt2Sm9GZF1KZ3IjYj9JeUxmeGNTdCl4WykmO1coM0BrT0hz''@;'; put 'put ''Q0VaKEcxXUVPbltoeTNnOC85L1JDa1VtcDNYaVpGNXdzWHxmYXBGIyk4JHVTJiVpSkBzRD1hYVNCT10zOi84WlJLJkMxNWRvQzZAWSwySCZfOGF9eDV9bF5RfnE/Kjh0dl9NKncwaiEsN2NQfVJiNipkTmtoamR4YGwyKDxte2tIZT5ERi9Hajo+SEJ4Y01DdS97am5qRiplZl1seCJNUWlWYWlm''@;'; put 'put ''YX0mNWw4KkspJCojcCo1aGQpSVpXaUFaUmxhJm4zWSNQeiFObTJUYFkpTHUmWnsvKnU9OWt7UnRZRmxzSlpGITQ4NlFbJT5GY01pfl4qT34uXmx3Xm04Y1NlKVV8W0lUY1RWTyRbPDRrdCZgQmwvJUBnMihMfW0qUFkhdkQwKUspaWRDZypoelBNVVhEUyRyViZITU1ecCVQYSZnV3ZLKmNTSTJB''@;'; put 'put ''QDJRakUoNHNtMXo+dDVpRUJHUU4vZFp3V3tIZ3EsSFd2UDh4NmFkO3B7cT9dTlhGZFtjNVpsLlBWO0Y6NSFkKmY3aF82S0hRXTladHxEeWx4USsrLylsJVdza3BzXz5daT9lRiROc1AkY3F9dSl3OjtfLnB4TVlBT3gjTVFhbjM9MG9MOEk9alVabl47Vlk6cyUlITpYT2JfaXtgUlZZQnQya0p9''@;'; put 'put ''cE5naktJfmBeQG5mJFBvaCZDW3w9K14/L280UDcuKX49YzFPaGxwdmthVCx1WTcwaH5vLjRHNGRBbU4ycmNob3NTXTRSdjFtRSlGcSpxI25ZRzdUM040PlAjN05LaE9zbmVlSVM1TmM9V1M7bWFhZ15hZk14c0sxUWQpNWJsOFh9Q1luTGhqJmFCMlM3Nk9YYWNBX3YsRUU0P3IkYnUmUExFbmc6''@;'; put 'put ''OXVgNjsiSk8jRmYpOzY/eztERCE+dm14YHptPlc/LlJeYyEsUlEyYnY1Sm1kblgpYV1Sd0Q1dSNXKXI6fTYpbHs+VHpjKDV4UCQ9Mlo8OC5xb3dfeSM5Qm9kZ0gwNUhDODtVWUpOWE9JYisjUFcyPSoxVEVQb35iR2IxQS5sUndwezBwKUk8Rn1fVmgoU0EyY0BJTTE6JW9pQilNeG82c2hrTS8v''@;'; put 'put ''QihOQix1SkhATl1DOVpEbTI8a3BqLmteRT5be0lRYE8iKXcob1hASGh9KmM2fCYzQUc6LGZ6eEcyKik/NT1fQzckQjhsPDV8Y2owLm1MQFROb35UXl8kKzZRPyltcSo6PnM0IWdiT3UvOVcqcnEwUiZIfFU4LnQlTXd9MzYwVlEhUlYvM1ZPOUlqdWV8KURdSXkscXp0bXBwS1cqYUNUQzRhXkBX''@;'; put 'put ''SXhrQ0hSTCVzLnsuJXE/PXZxSVk6c1JVY2VPV3ckOE9qPyQqaHQoaXRJPUwuN1A1MClbWHNgMixoPl8rKDVEYntOdmMjLEA8WyFaJTVQeTMuXW89fjJnYS9ib2JfIUNidGBZLmhfbCM0e1RlRWNPSSNhWSpgJWM7Mlp2XV1oZWZPQlcjX1ZFOjZkOFdnP2x1cUlnQWxickdKTzhjd1lqWHR8NU9X''@;'; put 'put ''N0lkLy98N1s3UTd6MCZmc0RVfF5KOns0USFXamBJeG0zLkRmPn0qNmB3SlE2ZyUvfCFedDVbdl9fN0xNWmxbVWIrTnxBUUdCbitEZWFaV0k1Ki9KPWRiO1FacT5BVFtCMSEzejNLaEdgZ3c6eiozVWFTUCY8Z0coSllHIz91UjwhTn59OVtWYHhGa01lMSxbRUAkTHI4TlQzOHEjSSs1fU9gTTNm''@;'; put 'put ''NXA7JVhSa0BOLzR8W0A2cFglbG9mYHFXdUdKOEBecSovcFtoNz1BNThlPSVlVkV9PSV6Y2RzT3wuWC5LYmxmX1E2MFRvKlJocjQkRjBKXm9JdkZYV3YpdHVdL1dHeWJAQ11zRjNiOW5OcHVTNWJsUE5uJVAkbU1le1dDQCVTKzpxTnE2SyJJPCsye0EiKWtPNj1SJmp+R2I7I3VJNj1AZGFNU3R2''@;'; put 'put ''RFMxPVheOGxyJkdjTUJnSXdqbXp6Um9rSSYpYz1naXdMVy55SD9yM2E+SzQ2USQwaT0sSEF+WlIyYTxLIWtyP1JQMU16VF8qLixiej43fklraEFtTF9PKjNCZ2F2fHgkI3dUSXw5TCM7QFJoRnBuQU5KaXBvUStjJV80eV5TZDdhMGw5QUxwVE1jIS81Pis7NnthSWNHPkhYN0dRb3pyRl5XfT9l''@;'; put 'put ''UC5Jbm5xPHUxTk93MzkwI2ZUTHx2WXVMR1E7JmxgTzE+YDE2SCI7THVeP1RoeixYVSY+e1oqU3VXcVJvKWt4eEs+P2drT1EjJmQ4PVMhbVYhYk0kcjx2Yi5uZXpxXnx1blh9N196QWU8ek49MzJHMzlCUkVlOUA6Yypoa2BbNSxVdGJES25+RG51SD82TSNqbCR7Z0o8UC83aFp2YExkMHtSKUJu''@;'; put 'put ''O1B6XXBjM0QjbHkyNlNLbzpRQlNuTDYyYS9Kbk1PPCl9R2BORl00dU17cDtRdGV6Ql5NZG9IanNSV1VnKXYpKn1yek9LdTp7RDlDO2xfLGxbdDU5MnQjTVhDaCQpK3Z1X31lTlZoVWRHdU1LPHVee2s0VVp0LFU4YCVuWW16bFVvKjZ6bXwxYzRlWy8zZ0lDInNrVlIpXX5ybEcmb0l4S2VpSHBR''@;'; put 'put ''YSJSUzx7Xjt0LDtYPkZWeHlvKyVqOlN7Sj1SMWAucn1pfG45bnooO0xtJW5+bH5HXU1LIksqfGBFPD44VHpNLy5iWXNFcTNKV150UVdFRihVLDo6R3FuPUlOJj9nLzB5ZFp4dURgfnAoZVlFREQkQ0olLDduLnVoNH1gRV1Hfj9GO2B5cjB0R0UpX31oYzxoOGxwblp1az10ME5RMjJlbnpGV1Er''@;'; put 'put ''O2ViNm0+Vl8pKTJGd1lYfDNJfjhsRWA8YzRnIWBMIk4saXh1bXQ7Kmw6cUVSaS83OHQqXUchbkYzWCY5TTUxZWRmSSZuLD9Ocms5TDdEZk9vUUR8Li5JQkR1M1BkNX5ZcFVpTlF5OmApZ2A4JUJyczR4IypQanAyMD5TYjo8X3c2QFtGIWspREhiKFdOSiRuSW5UQixwOzluTFM5bVtPRzZnUW8l''@;'; put 'put ''VTBOc09fbVo/Miw1UTt6IT95R0xJXUYwa3F9YmR2RFZKSSlSKkJkbVR2QyZ9XllfWVhhaGYsTGdiYUUyLk92KyNaKCp+WTdlMDNaLyhOOWI1VXRTLEclVz06Pj4xSE5WLldzWCwycDFha0ArSHE2MCwpWkI7SGdeVS4kWHtvI1tfOkhOSVRtU0NzaXAwK25SLCJMV1s8TnRJVllQPXt8Yml9Q3E4''@;'; put 'put ''TmVFdzVzUzdQSlRydm17MysqNilrMSttYk1zP2BTc2l8PGdJUiN+UUBsIWc3PGpWQiJaO2Z+WT9MaHIxP2UuZl9CLFRdKjJbIixnR30mLDAoKyxxZkhoSUxpPzAhdCJeSDt0ZFZZWyJpITs8an4yeGFvXmtyek8+IjZfd1FLYHNrMyt8IX0xJFVvMnxOYHJUNXJ6XSxaJHF7Z0wkPzZrV1BITUJh''@;'; put 'put ''U0B5akMjfEl+dTshdDs5ZlJJbmtVayZ4T3chaDYsOzhmUlFHdUZsMUxIKl5gWD1aT1lhfVROMV5tKT9GWjlWd3s2Z1VATXhkKjBXaGN0eFptTGFNIVdpN1hWaDQpamdSOGE/OjRSeX07Ti8oKHU1TTNaZW0yXVRQeFlmTE0qJExGcTdyTEFlLzBKT0djfkpORzVwUGdWJXpPLm0pIz83NSRGLkpz''@;'; put 'put ''alZldyU7IyRxWm0vTUJOOmZiRUVnbXJ2cmcjbXkobDF6U15qeE1GYDIpSz5MKHpsd0FfO2o1bD5SSD5VekUuWXRbOmZ7a287UztELGhyJiEkPlddeXNpOVNseHR3VTYlbEN6dVFRJGtBdVMwPCNzVSQ6aksuUWNWczxeaH01X2dyaG13eXdiLmFHLHgkIW04QTBzcGtoQFM3b14udHk3KywlYHY9''@;'; put 'put ''KXkxZ2Y9PWxWVT9LQj91Mlt3Ui80UEhFJl4qLm8heWg8IXcwfXZXKFEpQHllZnVUdzk/LkZSSERDOXFfbzk4aEh0ZUlgSmxqKWZfNzFOOmd0c3AiYkJtMHF0dHwseyQzMXleISN5RTtqWWtrI0BDZkA0fC8/XVMhazh6ZFNRQkc7JjslJF5mOVpPcl5IYGh2YGlYOWcqOCVyMUN2KSglNnlpYk8o''@;'; put 'put ''RCU8OGNKY0ZCb1Y4LFhDR29KJTddSUhPYjVQJVUqWSVObmgqfE85Xm9xOipbMkkma1d9IVIuRTQrIzByUmJoJHdoQUlPeV0oO3J+L2l8RndaYEtqblU9KSFyTzlFckUiMjVMazg/VlRrQUBlVWFkYn4pR2xCJTxdODs9NktiNG1SUCVRLF50czg3PEBlYFttLm9NI0deW2hwfSpPfHpIJlRUTy4w''@;'; put 'put ''YngvQDw9JC9ycyRlRl45WVslcHVwJSZJQ292YTEsV3liRDs8MDgxYnUmVztZL2xSO2EkZDFXcm8rMDZ3PT5+Ymg2ej1KMlh+fkxuWWhCb2toIiEwaU1KfTtMVWlqZlMyRm5geylLWiE5JFhIRThkeUZPanVJRSFYPSlkNlpHdUlCPTg5bSl3ZS5QTF8odi5ZNTk4LCMkWVkyX2owcls+Rz9mIVtr''@;'; put 'put ''N19bd0E+fWxWREdmYVphP0I/dXleQVJ2TVcrPkVkaz9UKGN+ejBsblMjVUNKREhuL1I4WEA4TVlkRzdFV2ZIZnlRaUQ+fSojQWd4djRJQnw0bm8/fS9VJTg/Wm5+MGxCS3hYc2JPNlZaWkVANllKMVFOJWBHNyNKOVMsPDBIUXdqQCx9M0x0NEduVkV5JVtvIU1nXiVBInBaa2laY1h0L2pFME47''@;'; put 'put ''IUEvKD1PJWVOfVY+UlRubm05QmJKJnpJP29+bn0qeE9VJF1SYmlXflhNVSFSbUB1Q2BPR0xUOTZXbGttRSlSSD9EIlNLJEtrWyEqbnYjdilGbDNQbis8TEB5Rkt0T2dCfDIqaVEvMkYuV0deKyQrPE8rSExEZkZzNUEoNTRkJTBtN1clYnkuJWNPUyMzaXkoSHc3O244KihzZDlYcz5gQChUNHp1''@;'; put 'put ''Ln15RnMvMTF6MVlsRWd0SmphYldBKUNpQnhDZXVfS0E5PnN8RHk3RSJaKTUrN31CX09FbyYhIkppbFhVISlSJUR5O0ohVkVKeXh7VGpNUURgRT1qKXROfj8lRUVkKH5FOkM6RWR0eV5uRU1lfGJGN0todURDSnBHcDhCcTZKdHp+bFBfQkxmRV1ANl0lYCJmR3d2L3FOPntAMiFnbmM0aD8xK1Iw''@;'; put 'put ''TFZ3OFdDQnlWVUFyUXRiWW0mXn5KfkI1UUwhXVJQYVhSMkMxYSM2PllmRkFkbjFgfFEiVT4zRG5gMiJ3Q3lNekYjYzNuMi5fJC5xbE1ecy4+O3d5TGhbSik2WSltRFp1dE5NImUpWDVJJXNSSTdyeWJ+Q2spIkcwNWxWdF8hNE1sX1pTUVh2Q1paQXQ9PElvTi5tZ3M9eitIS09aZiE2NXs5Rj4x''@;'; put 'put ''bU15MHNGckptdj98aFA/enheUlB5OD5yOEt3ZH1IP3Y5dlY/RUtNTkFaVmk7Y2IhTiliVEpCY3tiSnJ3Rm5lPS43eCx7IUpDPTVLM3sleS83RVlJX1pNQDclaXxpVDxZIUpOQF1dcGp1cWBqZUY/WX1wfG5TQkUkcFlOaTpSWWpubUxQKFl7UT5UNnIzQD9VZ3wwYVtFZ0ssa2ozbFZuSUFRTW1j''@;'; put 'put ''YmhQJnlBMjw1KV4malNvN2UkWUtnPmNDZ1BDWjtCXTxYPWh3RmRgRnZUb0VeKCF+YHorPVRnQGJQWiJpcjUvRlBKPThXUTUiaTk5TSouJkxBcGpPe21PWTxBYG5TRVJHWCxlajdKfEJDYWg5KktKWCU1TjIzOkt+QDg6SnRXR0RTXzxdR2F6InQiQkxWSilEfjQsPjg1aU90Z3BBY2BxdXduUmRN''@;'; put 'put ''JXs7ZzFdRndOYT0+Ykl+QXgiLjt+R1UyYjk0dXttPklue0E8dmYpeVE/Vy5senRUQ0dZcXdpczA8TjBIOihWdHhHRzZ9QGJoVSlCY3w5fl5DaT07cGltRVVuLEErIXtsPE5jNSR2NWo2Kzk9Vz5gKUxvNmxvJjxKeDZPOS4sNjtoLkFPdz8xdG9UQHJXL1RdV3wxWil7SWR8aGwrRkRFITkqN1Rp''@;'; put 'put ''UlJYMiZnayZxJipEfXN7dHhDImlVSF4xOz5NJXZ5L2hPTl58YE1ifik9UX1jTWc3byFYelgqJGVpNyo9LlYhfFRHSkFUP3p8U09mYzsjKWdGVVBmYjNLIlJRe3t0QSFhbHouY0p5MGtAV1ElP20yKT45OTBGaXFGP1lqYT95PHZMJShXKGlzLCxtZFA9O0tnRTVVLGgwO141YTQ7MU10PFJ3RT58''@;'; put 'put ''bGN2fUE8fCtdeH0rTnREY2ZDTz9MRWY6PlAybDkzaUVVa1BGPHZhJE5VT2N6STAqPmBsTDQ6NyJvK0FnOHcyJkZfXzdjNkpDTkRRM35POj9oeDVBb0x2aChudSl6cSEuQl9hfnV0bC5HdlJPVDVzYG4jQ3Q/XyQwNjd8MnojSX1OeFg/bHM0L1p7YkpecHpzOU15Ukl3e2lxOXEqVHxPTD5CSkNi''@;'; put 'put ''W3RASnw6aXBFaSk9emhvNWpeZ31FdEUiPWw3NXRpNUVIZkhzSUBPJDNMZ2A/UFA4azBnWSNXVWBtS359VG1Ec1hwPls9XXEsenxDN3NPeHVeamIlSSpAb2JldTN2Pk5kIT5xcWpJOlY1bFR+YkVhb2VoSkRdRXYmKmIpfXghTUg7VDI4Q2pLOXxhOUgmXlc/bkxyfGokczJkVXQrcUpraTJyPSF9''@;'; put 'put ''NU1IZTJtPmpAbl47cztMQjthM2B0L1E/Ql1LYUQuXW14NCxDa2gjKD41JXQiOGAoQUZfNFEzfn1fX15bcl5kWnNFaGA+UlJ+PWhSeCxQOSQqNEZXU0NpPDpfTExwVSVyX3BzNWo6aGMmTVIwMWg6fn4vblA4OztCRm9PKjFJZF90PUk5RmBFc0Q6ME56c109ZVBhQyFVO18qcXpobnEzREFTTVFK''@;'; put 'put ''WVhgT3dVfkx1JlQ4KkA6Tl5HOjF4S3o+eGQ4ekR3fTN+aHxmZGpPezRfLG0hJSkybVJMTjtCMEVJITNNJTE6VG1+dTFiQGZsZXNhckJDWCF3RnhPNUtYbn53VVJeYTsyKVUyfEI8MzgwTDF2YXRBZzFidGxEbkg6NiJ0dXU9Z3NSKDEiKCl5Y25UPE9Hdj16NFYqL2cjMHQxSVFrXlIlb1hHYmVv''@;'; put 'put ''Z1NyQ0FVaDNCZW9pVXRpd09iPjt5MkgpJj5Le15GWD85cTVEOVo/VXsyZzV4UmUxKnkpWWNnYCsvPlQiRTMwb0p9fCw1KS9QbT09VVdWSD4uJVcufFM8UWcqRmc8dmxIfT4zZF9HbVZ0ZCQiW3Z4NVpsZE4rYWpfd2E7c1cmLmghRFttc0ZhdVFxNUIjb2JEQFpoNUVaeFFDUzhrZ189ZTBmN2Uk''@;'; put 'put ''fD1YeTxBNklFJTE3bEhKKE5paHQhXWZmO34scWxsLjoqVSYiKTN1MXU1bUFKOl52ST5MdFJfflNeKCh+fkVVXyRLWT4+fT4xaSJza2llTzlNKnoqb2xMa2IjP3AvO31dK1tCfnomJHExQyQraWQ8dyZvPHdSS0R5W1k8a2tFLjtLP0oqcUQ+WDk2QktSczg2R1JiL3VMNDc7dSg9N0tPIntBUFE/''@;'; put 'put ''QGhCY1JZRX53NTFdQi44OXdvMj8qP2clcEdYRzRmJFIkaWgxRlQlTUtwJX5NKnJsNzhzcjsjP2c2JF1POXVMJTVmbEp6bDo/ZH5Jfit3bTR9ZlJ+akIlTEpMNTdeVVh+bjhaMFlTMS89V3V1VnIpVkFqXS9VKygiWF5kdSs7SkwlQiM6ZF8rfllJXm4weVY8bXpWbkNXdzxfOkdUWShOc10oKWc5''@;'; put 'put ''NzIsaThFUEVlU1JrekVyOFZQdTtoJGlpa2JdezQ4Q2hxSGtkdWd6QGouVDM/TDhoJFFfYyx5VipqK30+SCU+ZGo1cE5EVWY2fmhRWjViYXgwMW5odlJBJCwqdlFFcWMqK2IjWDorfGBuNkV+OVE9emxuOlM3dUhJQFRkQ0RiJlRqfjVASylha2RvSV9vfFQ5KVBxdn1+d01JVDJiRlRQIV06NlYz''@;'; put 'put ''KjkpK0hjMk9yPkt6RkU+YStjT358RjZQIT5IQ1BgYyIodVFHQ0hhNkBOSzpTbVlZcVR7VSx5MjtsZ0VAaVFkMjZvUSVYRUlgLipjKXpKTlMoYkZkTFslLmsjSnRbdFosK294LnkiaWxxfWR5dVN5S2kjOGYxPTcxNl8iU0FQclU2SGNXIjg5ZzI2elJKLEVJSU1eeHhfRC81bXUqaHxCJn4oQXpv''@;'; put 'put ''KEBZOXhKIV8yVVBrUTRnLj1FQW1TK31YKH0wXThaPT99a19kLy99YF8/XyhyQTFrNUBUTzk0RDMpRVd8OD14d1hKIl9kfUhKNltRUVdxLyRla2h1Xmt4M00pREdmPmdpU2BjSCVPSj1afC5CT3ZuMV91dTkrTEFGZW1JXzNLQUdCdyhmXVRvKyUjTHVVfWgvOCw8QUVUJj5XY3AzbV9dT0R+PFhT''@;'; put 'put ''aGF3UCwhakQxTUdhfGUldEhSOnRjRi5NZiNaNWBCOShIQkt1cSYrY2gzdlBTVT01emJ8Tlg7Sz1nZmh3cmZqYXRdcjxmMXoxPHNoMWUmPnZOSi9oLy5gQ0hjc256ZVtId2opaVVCPTMkZ2hUZFVVNnlXUkojKW5HWXBjUWZFNHR5JGZyNjJKdSN2c21wdWFRVnAoRyUoMWMiK2FLNkxWY1B4RiNe''@;'; put 'put ''dVBDcHRbY1YqPkk6KmkvfHVPWENDckhYeHkhU04qb0ZuZklKIWlNWXEsJlFbdCQ6MEM0dnhmS31oQ0hgVm18ZlIwPj5fSzklV09uRTclXmMwcjE0MFtze2gzcUhEZkkiaHdNcmosKCh8XTpoYSN5Wys2aUJ+QkNGVUtzSHM+MjJVWDhnXlh0dDRTdHI5JCQ0OmYvIWdOeipQbD16dU9rNlRNNDwv''@;'; put 'put ''UVRCRjk5fnVFaEZrOWVdfVVJYWtFWnROJTNMYnFURnIhZVE6RWhvfkxIKD5TVkh3NllZRjR8VElha3A8Pi9MOmAmW0MwcDUmWlFUO3xZOVZWcTU3OmF9VGBXMzVvPW9hMzEhbHJKOFQ5Y2RBNEEiMXtQXypPVURSUiwjb2Q0VXkmNHVgWik3NmRMOm8qc1ZZYlplK1BgKm5RaT8/YUcjYmI8NjZn''@;'; put 'put ''OFpzcGJ9Vj9hQlo4QUNEKWs2XzlmdTJPcGNSPUlReDBGNGR0I3tgNXElM3dLUzU3fng9YTAoKXA0IkBXRFU3Mml1VD9+PUpPMmtKe3EkJllaUklpM0l7W14kL341KGtkXzI3d2t0eFkpLCtmPU1tJlRTdCprJXJ4dHlQQls6P1I0Z0Roc0JdNjpSKTx0VmRKXjlnNUJed2NgSjZWRzlXRUc0KCE0''@;'; put 'put ''bm82NCtBfnheXlFjQWFKV2h3MDgqQmxtMSpzZFVqJSxeWWdPMFh3KE0zVClhZVRaNmtgL3hAMyw/eGJmZH0hJSJEKWtuY1pNRT1dPU1TIkIuRVV6Kyw3JkkhNERrVC9HW25OdCNNWD19VVJrODVeLGRCfEx2e2s1JUN5WF1HIUh7JDFhPWBAaFsxe0RFVHUmOXQoTkV+WEFdUiJTJWlyPz94cEll''@;'; put 'put ''PW80XUB6Lz14aU1jdnp7cXZdfk1vRm5lPzpPSn5BWzA7THM1YWRnOygienckNXJJaGleOjVobG11Z11eOF49fGsxaVtDLzpzX3dmL1NwanlaV2shKyZJbTBtYz1GI28wfG00blZuOzA2XTQjeW4kPG5eYFpOLCR4S31vN3BxU0JnTCZxY2tfa3YoQkd7aWFRKj1nTFI5Syo+Wy5SdStodDQ3akNp''@;'; put 'put ''IXJ4NG5gOU0rNDFMOXV5cDpTOS94Olo8fkh8ME9iYyopa1tXNVFZP2xYeVBgbXxCN2dNK05kNEcuSUkpfU5xdzdjI0lENy9xJkJjQ0FrUm00Nz93JDc1K0laLG5BXXtLZTZUI34kMmchUDMvJFI5UC4iO1YwS2VdT2Z+JHByP09dSmIjOGpKQn1qVlpjLmJQS1FJQj89PkQmVkJfOi8rVkZaW31s''@;'; put 'put ''KHEvM2FbbV00LDhNJURQW2pxV3dNLkxNT3ooUltOeTEjNUBoaUl4LmpQOkZsZ0NsS3I+TnsiaD5wKm0paS59YXclPTp3OUleLFZ+WH0xNmtNQlNKfE9OdTE2YzVzU2VvTmZ9NkQyPHVmKC5DKlhdQzxERjI/bUprZHQ3YT9SO2NudFhCa2BobyJQXjpiKyReNTNQUz0wS1paLlBPUSVdcmxiRVVs''@;'; put 'put ''YC5FdVR6YDRiZ2RWLmMhP2RPT3VWZ1QwP3djcTdlZFUxfXJdTSpJbG9VV2M3KVZ5TnRqPUthNnQ+emZyY0EjaWd9JmMzQk86dStJJVpkRTMpQEZQPE82UVYmLzR4N1lNQFUuXj0kOWRqJTtxays1TCIkMldtMzprY2gqPkF9Yk5LdSh0NCMqR292TytLZW5EN0xUP01zX1lhcmJedixabGZpYEJH''@;'; put 'put ''NGVWWEpnWVkzRFFNRyRtd25LaUg9NDYjUFs6SU5kdHZUVXhuVUhpdTdERWAjcytLODYobzE9YiF5QEBzcVFNOmsoLmc/MkRFaVB8KllMPztvbGhAKjdOMipaTHQjW3BDcU9IbmpadntjazlqcmArXmlPZiNCfDxhX2AmISJLX1hiME48TVNVOUZQJFpVRXdTUDdTT3xCfEhJMFtoUlJeUUo0KS4o''@;'; put 'put ''amdOSUc1dHhWNjRaNDY3YUU3PT02K04kKWsjWEJOe0dQeXxuMFp1VChSSDp2V2ddMkt0aVBwU35WV2VTU0IhYFo7fndKTHcjaUg+U2RoQlk/c0EsMVQyYnRJQDJVQn42MXNPJmBhN2dyQ2oxQX1IaDRUV31VVS5wNC85RkVoN21MKGxPfTpYSHdVby90bzd8XmgpMElKXzhKVEEhaGt8QFNXQ3dB''@;'; put 'put ''Xl1GfGpXUlA+aEZKNyk4eUt6aCtXPygoKC9tWjdANygzenIzTDhSWThERyQ1Ri91OkwwaW8pJlJieHRadVMhTWE4eStKLC4uVEcpRXptOHBALElyKjlRNFI/e0BCb1koRSJRQlNtSCZsdjJgQDprUHM3fFBDKDVqPCp+eHFvIyNmSysrdz81OE1EOm97dk5FVGZzKXxnN1BzIzFRUDp5UWlzJGlH''@;'; put 'put ''XmMjIy5NUmt7UW0iWTJBazIvdSpHMGAmMnR9N308RmEvbD9WcmZtc3cpPEx0WyRLbC9UY013UCEvaCwyd250SE54QGFKKX5TdF9aKFNsQ0N2aGlTRTN2cHwkRWUuRlFhJk5GWFljVDpgfW9zVkYsRGdXN2pBKkV8dDV4TiUqYVVkN3ZYQm1KTzt+TU9URkM2WG1NLlRURCo0Ojk2SDtSODZ6QWJN''@;'; put 'put ''Q1ZnLkAkJV5vNSJENnlDMC9HPXJ9JURRYX1qRlUqVms3ImpabSxbfEVXbkpQOCZyNiRhYmhZJUJjYCpDczhARm52RSU8JENGMlJoaVp5U0YpeltKPUhNY2gzZ3IwVj5QQHBSfD01ME9dJF5daGM0RHwwX01dcDUhMXpiOEFsVHppYCVLUVVrayEjRUI3OXVEK0NLc1oxYEpmUGU+b1EjMU8+I2ph''@;'; put 'put ''b2JNaUt1X2w9WF1oSDA+WU9PSEx9blc2NWVlVX03YyoyVWN3WUZXWXRUSkNmJkFJIiMqO2AiblZFak9fbXtEbWoxfXB+eFVXIihTPk1UL2IqfDp3WCFdWVAjTzNZdU9Qbj87VmQiaEJhdzduZ0cyV1l2OlFYWVhWeiJbKiNTIVcyVmZkfmtDcyFRdl44cC9fcnVZVWFPYFZ1TG1GPlk9NzJsUylX''@;'; put 'put ''NGI3aClvYWwqMEpifTdwdjg1K3FPIiNkeWNSYXdrZ2B8bixleWwhYGxTWm0pNjtUSVVaS2IwbjpNZ3d3WFBKJj9jbWZjJGl7eVU2WTJdNVhDM10qOXdDal04WDcvNmc6eFlDZzMxM2V8XVNjU102YGE4fjoqRzEkY1hTY2lqSERQciFyeCheNWs6fmB1InFoSU1KLzJuNXYmemVwSHQ2XUJPQmZ1''@;'; put 'put ''WzVaMmwsNiMxLFAuYHRHeChqaDRXWSUwNio2Vk4+SVJPRXUkQ3tAOmRYJUVVP3ApSTgrMDAiOWA7Vi92RHRBQWVGd3hjUz1kcExFVUh0W35pY1lecUBJOSpAXU1+SHdhQm0mTX5Wc1t6O3QjYHZkUzRzJCt+cXVZJk07O2s1WyRGMzJKKXs6NDo8WFJ8KGgpOkJAa2RzdmFYUWxrcHtgdXpJfkZJ''@;'; put 'put ''fDlxWF5FQ2EkbnNsWF5uKDIxKnYlJjY4OTVOcihRO1JSNTFyWkhpIWMmSGlKMHlHSV9kOm8wdUd7SUV7ci9AVWh8LytHW0R8LCFOUDc7eW5CLGh8LCQ2LHAyYj5lYEttaVh2OlMzPiFZQiQqVS9yMlpPXj1yWXJMfElRYiUreT1oeXNiUj5QYi9TMUR4MEY1RVVGY0QuNyspeVpbJW51XT8vJD8o''@;'; put 'put ''dXs7bWYhYEVHWzo+UkUwUEE0emd8QlZeNTwoU0FudEZGOkYkajBDSTlIInJvJGRoKCNCZ1hAeW55XzhVd14zNUclJWR+YXVzJTBVTEJxNUU7fjwwfXcpVDtGbGEwJmBdYEBaeDRyUVk9Rnw7fVljQTtUY1lZfStIPEZ3JklJcGBgPVN1MVk7ODRRaiFvRV1bWHlWNTRzWy9uQlNuezYuM3pqOE9U''@;'; put 'put ''bnZXRitUYFJwKWIyc0gvYHZbc0ZxVV5FczE6LHtgNnUjMTNENlFgRy4pa1VGRWclO1FTSzIjOzxVVXFzXlZ7b2p0LkN0TnhWJjVKTzdRMmVXKXI8L25yb29We2dwdlovbyx6QHpAZmhtaSkqc052SHV0Rk5QWFkiNiZlYn1sfis0KVZxbnxsZVEod2VwcWcpTXtJQXhLKSxjTHk/OzNUdEhLY1gz''@;'; put 'put ''WDpnMXNFQkVabmwrR3AoenlnKno4c11ZKjN4fk5JUF5LR0JDTGJDPXRQRDlvTjRIWUQ5RzRMZU5yUF1DalN8SDkvQSlgd0laeWZBZWR2JFFxIl5UQU0/K2dkWmdORUxJSmU8MFYpYSVdMWE0fHU+KVQldVdHalBlJV12N1t2LDIhW2ZSfGIuIWhxdGNBUDJobEgwYF0xfGQ8V2ArKHpSc1JYV3BG''@;'; put 'put ''dkBRMDJNPnlTVz88VzBZPDEkIk40MCoybD5OTSUpeissVCU2cTg6TGYhTjd+ZCpIaG08Z0AuMmhHLHIxQkEkWFBdMHZlUlhBJD55eXRbWGwoYkVyZU4qOGNLXWFjLm11SF59TDo1WkUqOjpDUEUifkU6Pm0saEA3Sy5tXStEenlGd0BQNUsoeHVLfHIrIXM+b3BaOCNPRlF1YE1eZzlvWSsoSXgh''@;'; put 'put ''WCo0bkR0JWdWQkJvR3l3K3NWVWpdeWxWa21WeGY0SSpJLyJSZEpTWVVlV0IxISEhIUUiMmFWVHlgVTRTaEZbOTlfXUR6dylQbVZdOTRPVVZZRT5OZVtzUzVhOGM6UHtXUFY1VUpneykmIT8+PyZQX2I0L28/VCMqRFA4R1cuRTV3JSk3JGJvYXpMPCpIYXoyJFQ+V1M9cXRtcERAVj9xVUNPM3R4''@;'; put 'put ''cF0sYXAwekdmWWJvXXYxMV5xQUMmd11vRjNoclhyOTFbNkNVLl47eisoeTN7a3plUlhRaFhoQyJGMjYuKnlHb1d6bSNDTXN1VyQlX3J4MyE1OW5DenRDVVEqXjUqMDNJeU8sOitCSjhsLDNuNWhbUjV1RXdCQ2h9SDdkKj46KFtKOTROSWJmSilaV0VuYEwseD5bVGhDUERTMjQ4cGJtK2JuVlMm''@;'; put 'put ''KGFWXlQ3Ukx3UUxsRT5FM19FJXl8NV5xejh3JlV8NGR8K1A5Q0grPHxsZ344RyE6IUM4ZVJAKW1GPTY3VGdJZCZyNWQ3VCsjfVg2Wl5dbTNzKENwMkA0OGphSU5DMWwkWDpVSDxkNSolXzRdJXl4aDtWYDhpQHVWcSJ8QkkpLlh8RjZFdCNTYSNieENGPEB4Z0A8ZnxxY1h+YncoPGc8PSplKTJt''@;'; put 'put ''TTJoS1BTJT18SDp+JjFfWjRRR2J3T2krI3ZMP3FyS2xZM3s5M0chUSMhdyxIX1YmKXNMRiFvc1szLDJ6YzMyfHkoUmdRTVtfP1dmcSwiNFoyXV9dRTNRKF0xeHx4QSMmNGFfXmssMStKL0woZHlRZ1MxJE1+KCtuWCJQOC82OjtnQGZpQkxFLEwubVl7alpMLnY6aTxEQHtfdUI7U3hCQEsiZixX''@;'; put 'put ''NE0ybFpaZFJxMGI2NHRHNk52TU5iMHVVeih0ayZBPTEzempwNkY8bHlGRCouN35kc3djUUVSNXh6JDxxNj9WWUFxREVqcz10Z05PY0Y2O1BXfi9fcnE3S0tvQGo9SmN2dUskMFpzdmNrViN6bDs1VE5QQU4vbnlWVkY8e3JISFdeZ2lOKCpQZ0VbXX40Kk1vJT83eSJNRig0allaa0lLTTJfflBb''@;'; put 'put ''eTdmb08uR3w2I3A3Nz9yPXxISH0mVSZ3KyQhKm5WQyxlPWhVOFV6Jnp5QSovdj9UeVl7R0FeKU1AaWZ1Rj1YMEwvV1BNZ3ZGVGR6YnUlTlI3WiZLWCtPbkpUUDZobHlzZFI7WHd4ImptK0YoPVYqcV1WIU9bVlV4MGFpMl1jZGZTTkdYPExPaWE8K14wbDZefk5dYmhWZEVMKDFUUClhRDd2WU13''@;'; put 'put ''MD9MelMsX2lsKWMmcHt3OFo3Z3IkaWU8cSt1SU92SD9UR3NWYiVXbi9jMHhQKVF5OFJUPE5jJk5KJW5pPiVkanIsJTRkSSpqYkZVMSY6R1ZhdldFe0J5YEc0bixeZlopRDFYdixkZHpNZG8ufC4kVFA/YGU6Vk9SamR6Jl9VSm5oLj0uckUyYmFfLmVWYXx7KilbK2dzYCEyUjxJRjZCR15sbE9F''@;'; put 'put ''Rm8lQipYRmlbbDJQXX4kczUjITpecnx2QmEvN3h6Ujh8LiYlIiU0Y3MwP2VTbFVCeykze2Q4YVJvU15WSGIoJUx5P3ReK1ouMGA3fi9PXWdJMC8qMGhRYUNCQjVzMX04YzFbT3RxYl80UVpmfFBkM0Z5Tzh5ZkBUJHAmQFdHfkhrZUIoNWpgJjFjJlRGYnNhI1ZGJjtLSm1QJEM2R2VzPlRsa1Nh''@;'; put 'put ''X2drcGB4RlUoV1swSTs+MjxvWWJzVFZrKzNyOlhwNU4zfkNROENZM3dNZEVAK14wK0hJVT9zPGYpLlRfeiZUUn5UKVFWTy9dRk9AU3wwYU81ZlY2RGIpSWt0USRbZzxaSToxKExRNX5HSTk9Pz1BKjBDVlIydmJPZy9SQSQhc1JMbV5APDJbfWd2X2VDemh7TkxEeXxNJj5oQHNpZUU0Ok1ENURC''@;'; put 'put ''QHBOQVFHOjlbenF5QWVTaX5PLktWWWZuVEpZVnkjakQjSyxIVU1FZF9VNnRLXTQ7XStZT1RAVSkwb3p0NmE6LE1gJVtnal5HcDlzdXFKO25WUS9YLDAmN2UsMnxqazgodWRxU1BtMHFUVChLUkE6bjhFNGRRW2BpQFUsbCsrXSFhOjNMZiY9I0gzTmQzRyVVOTE4b1RjcDU9WjVAOng2IzxpKVtW''@;'; put 'put ''WnEuWmZVNy5aL0MyK2ZwUWgkOTpXdk85XjcwTy5IdWRPM281Vk5JT3o0YEQ1MkxTRTEpfGVjXys0dmhFVUJQUyFzU1A2fWx4OUVZN1I4ImcpIXVqNTA+RXVhSlpwI05BXm50JXRrKiE4VUpkMVhQOEJrZEElTWBSLls+dmdKVyJ2PWQhLE4kUW9hR0JEezc0PHgjYS9meCZoZWtMSWglUU98Smp4''@;'; put 'put ''dz1TQTQkVmhILjJNXl9+cHJxajIvVVdEcmFlamBhT0FvQEB6YFc1Zz9iXkBTfDF8Wlo5UlU8KFk3YSM2VjFXdX5wZkNRYC9HYVhmOH5aJTJWY1Bwby97OV9TKnRBPkUlIy9eZFFuKCI5RWo9biJCNCM+TCNrYiIpeEBwN01pe3B4Xy9RP3xoVT9KVFAoJk12dTx4e2o6aj5wWDRhMUNTP19OUHx0''@;'; put 'put ''N3BNWndLUFtJfnF8PVooT3cmPykiemBlT2tFUWokL046R2ZddmVSRD1DWkgibnt8MFgjeT5CdFtwVywxLm9eT34xfi9qXWlFYT5qVytoPWElbm1II3ZWXzpMQW97OStdd2IoYVBafl1UPjJ5NFUsPDIzNyhpRSFIZF1+d2toRFR7amBPbV1ifkptbngzeWlfYnVRWVg4WDdoQWIxSnMmNUliRyxa''@;'; put 'put ''V2dlNCFWKXNGaT5iaEcpVno6Ok8qST5LL1VJKV9FRDxTNTEvY2ZyLn42cipxMHVnPXovPXd2QmM5KmBCKy5JOilWRGF3VnFufWdzdGFMbzZ6cToxJGYoLERMfEhecS59OWxHV0hiKWxSSip5Y24hWkFZLndCRFo7OVh2d2srUnxsOWkzKHFrL3krQG9ZTSl1KDA9PDBKZH5xMCxQUlFzTFBUX35N''@;'; put 'put ''L2lxPHFtXUs6OTs5InwqQy9kS15IWG1lcS4+XVJDa2Y4KWgjYT1dNSMkeW10dmhRVEV9QFJ0TTB+VishK2gzemJyYztUbzhbTVVlK1ImMUt3SjdtWVA/aiVxdGcibFlYWnRiUm8wSXtlYilqY3RmW04kZHlydXwscU9PRUddNlc2YDZSUzNsd19LY3srKE1mWF8rLGJGV1F+UlksL0NbP288e2V7''@;'; put 'put ''JFFKN19YVW1GemEiJFRDJFp0aGlaPjgle3d0RFhdcTlFQmJCPHA2RkssNWNbYThAYjtFbWddfmYpMlN7Sn4/ImlmQj9XdzkscGZoeGBRL3JCXmNFUXt8NnwiJmF5MmZOc2VfKGRrPnpvYFRuPGMpbVFiOnh0KVJ5U2UiKTohVkY4SEtBJCZhd0g2fjlJemM8LlJjZmF1TVRqazlBdFZgeFoxT3xq''@;'; put 'put ''YjVzS3lKWE8uOjhIUEFndWlye0JpZjEpQXRhLHVUfkBEUG40eSFBaWhkYjBvVSxbVyF0KmIhUDVCZ2VWSTV8I1EkbTlKUTtRO2g+cjo4dCoqX1hESHZtQnpIakUrd2dSSWZrK1MvdjVgM1FJUH5SUyZRI1NgJF5xcXJaVXhoSjVPNWlkUjlsMDhLKjV8NjlkKmhuMm4vbipDbCVbQ106VXYqNC9V''@;'; put 'put ''YzlJXmIuJW9DTytnKyE0Xlt3S3lPYk51TStycGNhck4sOmU+Py9ubVF4OEVgbl9dInZGKEhMLktONkJuNml1e0NRWDJVWTY9ej0vdjYjdWg7dVhhR1AvTm1RdVQhOVFTaTBUZ2BBdDNwXUtnRjcmT2JzREQ6aDp7dDlfWVsoQz4oZis9ZHk9eTh7dHhYPGtTTj5HczVBPDYjP1klRTtnLFlmVWp0''@;'; put 'put ''VDJGdGRLPyVGZXpMfDNeJlBOZVskK1NUQ1FUJnROUHI6Nm1TMXpkWGMmTVleR0E/V2I6WysxRHExTmBmNFpefmsiXjklQj5Ian1gOUw3ZHIsQ1EqIihsK1IrTzxTOSMvelB7WmJhWz1Ie0FmUkQmLGJTdT5ZPl05MzxsYHJxRSE1Si9JXTJTKTNbNTkhWm8kU0B+cDBCKTFZVitrZzlvIV87dU5d''@;'; put 'put ''e20yaU1LLkl7XjJ9U3MhTiskb216OFp0SmdSRWZSST4pNk1qU1l4VzhwLCxIe1hVUz43SzJpTkJXQyN8OSxiWiE+InVvOkd1eDRlOlkzfW17cCg6RH58TlJHcC90Y3dNNX0uUmc3bHVyRVp1W1RYKmxJOzNxbz4kUEszRzhJK19ZeW90RSIlNjE3RyMpMUlQJkJKJVJoTz52e2lmTEVYTkIkVUYq''@;'; put 'put ''U3xbdU08aSlLO0VeJHUrJjpwR014fVVnIXIrKSg8fGBaJDpBbk9FMj1fWyFffVF4UCh9S05XRWJeSlUlclYhWkRiT2ovNjBOUzRMd1dtOE58O2FmWixDZFguXUI/TmZ6KUVoTEFhbVFYZGdXOFdEbUIraSUhVFs8O31bIU9lI0gmU1V1cDJXQ0ZBKUhKbihUZkNQfF0qd0AvUHw4MGhqJmR0aGY8''@;'; put 'put ''fEhXY0J4RDlbVyVldWw3S0ciNTcwJTNuJX1hRFcuUXJGczclSms4fXcmRjpXfD9kZ0VlUHRSaXN0NFgzJitsc3RCPGJvIy5lWHl1N1FMezRtWD1EN2FPZzxJbEJVOCVwXmU2dFdwakhHekx0QDhGT3YoRmxbNDF+Y043WUZ4e0NMJT58dGJrW2kyd2BwK0lHRH0sKiVOMmZHZGN4JDlEQlU0M24l''@;'; put 'put ''XlVwekdhRDxdIiVNMWxQMipRTnRFX3NfK09zWG5+eHpNfEBEIn0pWSksWVRGWEklaHQ1VjFkfElKST0+IiI5RzlFTjlqbGVuSjh8aV5iJl52SC87SiwqLnl3UT5uLEpMOm0vbTBhUFlrITJhK35NUCUqMnlOaCpPX2pGR0xMRzlKLDIse0NPKzZAYWw1YDldWC83RyFSeG09OSkuYD8/PHdsaGh+''@;'; put 'put ''SSw8Rzh3VjxHTTJGVXtCRzhvTWJkXWhbVjBpbi8yYSo/YV5BISUmVVEqeGFvU1FANldmb0lZaylTP1IoSVUwQXUiX3w7JUZtUl0lbG98PHZHcDp5JU02bE5yeTNGSTcmPW9ROyo7RTAoZDheMnd4OikvdyZrTkdDa0k4OztjYXopUVFZcTB3VypCW1VAcmtVdk0mJnF+UTZIYEhMOndLIjkuRSsq''@;'; put 'put ''Jj1RVGZnQ3RKb3BiditIbm1fVSFxQEZTLCtPVm4hX0E7KXBiRWVpeTh7SmlWQzEjZVhKfSJxK0AqbkA0cDNbUCQ6WjRyZk5jNzxfVGp1e1hxb1R1IVEkczJdfERZW0EuN2x0ZzRTLyVAYGY/PTl1aUBnbnJgJEhpMD9ibVspW1QuTG9HZTBZJkRXI1UpJDZTKkkzUk94WS5qSmxuLHYidEs3ZDYw''@;'; put 'put ''KF1kVCE+Wk5gb05waiUiREBoSSVtJSpabCVza0ZBTnAwfkZaRXRYcVFQKE19ZkRIS1s1LFN4TXA4ZU46cipfOTFFcjJsXkx8NTJiWV59PioxVFNmb216UywlZ1I8M1M1bmA1V0tESDptU0RdUkNDNnFSTE5OJVssOTw2JlpscHAmOXc3MHJlQHJDViNXM0lgdmlKUXA5PFAjSypyUnJDYFt0L3Zd''@;'; put 'put ''b25WYWtXS3lmNTpJMHMyMSR1Uz5wYzpVSX5rOSMobWVofjZoR0k6NWpwVUB9ZkJuPmdTSDE0NEFybyxoX2VCejU0QyVRWTJkVWFfflBHVk4uPTNNI15oS3ImclNyTk5iMzVCYjo1RExga240OWFiMX1iZjQ8Pn5lZT94aSJaRTdDZC9tbz5GPmpmQG1Fa19pLzU4cjJKUHZzbXkkXU5EWCVoRl8/''@;'; put 'put ''SEpIOHwhJW0rcVdBQDRIYFJySUlsX186Pkh5M1JRLip9YCIpMmxgKH0zWSljXix4P3owaCF2XjR8SmEyS2lPPzMqQjhpNyw6aUVKaWlsOi40fjt1cFVRRz1Nck41W15ESUJXWi49WFtyWEByemRDVT9KOH5maWl7dF1odHZ8YSVITDAyO2Iue1NTaV57VEZvPWo+QlFZQypdVUc0TH17TFVAOCol''@;'; put 'put ''YnkiSnx4TFB3d2FKKShUbWFhWnpoNVQ1Y1JpVWtYKUJbaCNWKEdhJUxVaXlCaXs0YG16QXdkWnx7L2ZwKXw8NUxtaTRLfnJzKUdMPCtmbD44TVk+ITche11pfDR5TTx0YSM1bjkyVTFrYl14d3IrT1F+JlpCflg3dClvMl5BRUhOaFtEYEdVLylgZFp8KUNHVExdTithKjhlInhSdjwiV2NWOE5J''@;'; put 'put ''fG45YTEzW0NEeitwIjEuPVImIjEoalRuRTk5R0xdISVuWnhePFVTNiF7T1tATnZLaFBHU1pRQ0U4MXUsdlowI142VENtfF9VPzZiT1s8IW0uKVklKCpCJHo0bmU2N0wjclt2Ql9TcXYsSGBvTTFMXzdWVTc3TDREWmtDPmRORWtGL0BNLCRdM100NChHLilwaEdseTRCO0hdKGVWMDdqOUxhfCF6''@;'; put 'put ''SChlNWU9WV9SdUpVQjRqWWBfdk9nWGpCelFbOltHVGg7d09uQC51YXdbdVN8blpKaVhGYXRicEt8KS9yWGdhTkFmJiZpcS57dW9gIX4sWz1hPDclelsjO1NeTnJgblIreHpkTnV7SV0xNFd7Qnd3KEluXSI6U1giV2Q/O0FdSVBqfj91XmArOjQkI09tLj9NeXc+RHoyIjJGNVJSV3BSclhefj8o''@;'; put 'put ''OE0rakRdQ2NZaFtiO0NkdCpiL1YlJSUwT2cuTjUySlVVRywkYjJAMiEjTCouOiRiQGIkL3chOCRbQXRGK3RZcCo+X0xEe3xbSWhxV1c9Pm4pZ3hPT0g8YHlUPkZidkxgIjopWDZVNWBlIThdMH5tV0lPaW9VOE51bypQTDM6VVJFWndNS0pfJnJnM3QkQDk+XjBiWUsqOFs/I0dobUQ3LG5Md2Au''@;'; put 'put ''eGRLOjR5e2ZqKzE6NCZ1RT8vd0IoSF9TQUk0MzRUVFBMJnsiUEVyNytvJDIoT2siPTgib2R4TUIkVV9kcG9UbDAhej5vXy5LOCNoX0dqNFdWJmpjfnV9bU1BZHIxWys0fWt1WSZ1IkR6KHI4dWwhRFlUOEs8MSN5UnhKYDZIP240XzcpSzEzPXU1aGBYdkpmNDtQSUZuckdgdz5zdy4zQmkxU3hr''@;'; put 'put ''SnkxfENHeSwoOio1N11iRldVfn5FYEk2TWBDMDE4K05aYnpObkQoYypkREBJIS9PQz5MMjtib2goO1AwYD9OWigzZjhbTFpxWDQmSzF9Mk1aJjFlcFEmS058JHticyhGOEtJTGRbN2Q1aSxFVkdhcUw8IVJqNTVZcCEyYVJAeztwPFg8Tj0mbFMmbmYrbVVgWGh+bmp8cUtjbXJvWWszOjJ2XzAs''@;'; put 'put ''WlVqbiwxTj9reXMsUl9MXmlRVzNKUExdW3FMSS5MMDtse0ZVWjdZVyNQMV1XeEUhV3Z+Z3N4RyMoRCUsdnQhbC9tb2FOO2AxV2VPK0QhPmA1WVZPYTNpeCxQM0FNOS9aLyF5O1IrYl5OUm03V1UvZzhmdyZDOCovZENbYExXKGo+R0UiNjtrSk0rKHAhfFIqe1kmOC4mLlVJeV1HcmAyKWJOYSRj''@;'; put 'put ''UylGUndpejxeeHA8ZkdDdD08djlobTtTYltSb2t0d2U3JEdqeiw6LFdGWSJCSmBxNmxbbkJoSWdfOGAyMSUwKlpVPF9mWFdgNGQrOSkiNFs5Ik1yJF5OSiFkb2lRJTJDdUpJeEN0QyVsVFQpUE0xYVB5XWVqfW8uZUlOWUppKVR0fTRWcklULlBneXwxfCE3KEc4a3Rsb3VtPkVOLC5RVlMpSnk8''@;'; put 'put ''bVp0XUJrWXlfdGxFLzo2N21gdjsxd2toTixiLE8zY2Q/PkFkbm9Hb1RuU3xOPEVMUUZvLERJMXNoWnh2KG91OV9EQCpOQXJjNFcuRFEua2dULGNvVTMvJiVFVDxFTGJGJUklOTgzRGE0NTM/WU4sXTVheCY1STsmdFlzU3IzY0osNX0sPiVhOHAkQENTe2A6an07PGFHYSFPPF5ZelQ/elRnTC5b''@;'; put 'put ''VTdVdHBpKyFDTVMyPS9MVnd4JSVZL1peayl+Vz1GXUMweDF9bDY2QmV6QyRGV3Q5TSxGMl96dyNfOGQwQCFXPit+LEpSWEIkR0dbMC4rOmEmdFRvWXpte1tINnFockZPO30+P0xGKjFFPU1KNHtoWixOJGowPTxDbF5MRDtyLCtSSjcpMmB6N0dqSml9c1lIUGNyR2tXWHwlMzdFdU8xSDkrWCpB''@;'; put 'put ''RlFjYX4mPCNXLENnb0twM0skWyU0YC47c2k6JU1wQGZbJUwlM09FKFdPVDRTdjFZUHtBOVZqcEphN35IXiY1UiZRKXdNX0V0SE9pcHdhYXs4VTpSRG06TjJLN3Q+dik/Qy5GMnA1WjppIzZ1SUJEcXlkbnR4cVFoQUM8RXxLcE04QXFFcn59VUU9eSliPV4yYll7TSthRGcyaE9MQF5BPCEod282''@;'; put 'put ''NCVra1lxMDMlWS52allgbixDMlFzLm9MQ0VII09eVFh8Pl0oJjNvaSNLZThgQlhXUjtZU156ND1sJXlMaFJRbUtFImdgISshZz4jJigvPV8hfVZZaTl+Ykhla0dYdihSeld+Ok5yL1J8TzhHY296TUVOfVc3Iz9oNmA5KW1iLnszeWV2I2cwbS4hbn1oNE9kU0U0YUw1SXpSR2tqaWkxfVpWfXUz''@;'; put 'put ''S1hTWFgubSNBUClDc3gzKz0zZzJoVDR7dyRMNWVqeikmNlhhVishSE97UkNmVSZFQ004OXxuWCVRYUJDdjd+WikuJltOU0Z5YVttdDVXNkQhR1M+TCZhVkZNdERERCghMU8+PkNrQGRZfixqaCY0V3l0O2hUVShZKlBdaltPfH0sXndBZG5oUSpHRmMqLzdeQjY1UnVOYGVLVTJHInZ6UmdkdVIw''@;'; put 'put ''IkphK2hNPDB4VyluXXFCMlpeISw0Qlk8L0IrTVF+PlgyZEc+c0lnWy50d1VTOkhXYSE8a2RGJUZNVHpiI25rUWZtVXhSezIoOC5JLn1QbW5HTmVdJCY4UmF1KEVGYkMkaS5iS3Ixc0dsOilAUltoR0lPfH5yR0xgdGsrbD8+P1JmSWZteHJNfXk6Rigzd0lHdz5DeWI2fDRjdnhzRTx1RCFPZGtA''@;'; put 'put ''VSVmZDd9Lkd7PTo4RU9oLmpidl4qYnMwJWFsPFU8SVs1ZHlfV1N6OC84YnpxVyM0V3pEUC83WFR+KG9xRTEhXVVHazM+PzVxKGQ7UEg5MGhPQyV6cD0hVE1LaiJwKDo6blRKQTZRNFNyV1hIV1pFK3RdcHNdVClafUpESTFAL3FfWylMbk93ai8ke1RRb2REJXxwPTZZKEd8RnQ2d0lkITlyO3xy''@;'; put 'put ''JENXInlRTnxibEkhRXJ3RDtRZDVLKHx7N0UxRilvPnsrOVFMT0w1N0A6TiEkdG1kZV9UKjoxaSlXVyU4W2ElNkoxfWQ8MiplZVVGXnt5OzlqaD86IyFvInI8K3EhZ1laZ0R1byteIiJFSzwsJThxOlZNUmFGak5ZNS57dUBIVSFEV1V0UHVdKjBIZCZDSWpsUSVXQX1mSkJlXztKKTkkTjpTNz8x''@;'; put 'put ''cXBLPHcjTFN0ez1MMFgiOjpRO1pTZihgbThfSE5JXjY3TnJIRzxodjA4RlR4R0NyaXdsPWBeczwrc0V0ZSZVPn5LNlo/Q2JIWF01ZV0zczs4KSF7SVttW08hVzR7WD9GY31eMjpeZyZBdSY7OFEpeFpvR0pIcixodlhHbCovIWkvU01hfDNrUF9YbWFIdlN+RW9LSX5YdUt2KFJrWiVxTmJwOlc3''@;'; put 'put ''S1MrKVZmTV88e0R2dFI5YmA8NlRzZHFta19rSFs1Iz4xOVJ0alI0RTB1fDNhb304OmxrUWVoTWM1dGxAJT1kVlE5YiYoMVIlLjY3M0BvSDx7flFbJUdsRXk9a3s2a3ZvfmUxb2cqNmI0WylQKEw3dmBfS3NYbHE1N047UCxscXlsdiQ4MGp+T0dbSHtkOSw3NTZUJmF6P10+MFA4ZT9NODptZHs1''@;'; put 'put ''RGRyWn5FfjJeUyhzXzw6OnZgWDcodUs6JWprOlVgWEAibWBbfm9AbTRKOXF5YVZvTjxNOkBCXn5CX2orIn5qPXhXN25dSGRWOCVBSmBPZldGaElqOzBmNCFhNWYrPXxYfU9XPT1vbmcqMmYmcFZVW0V3JntBQm0+XVd3WmcqQWI/Vm56ODt5dCU4SkdnREp1PWVbU3owMTIsZnc5YF07WXNxWj5R''@;'; put 'put ''bz5jaEtOOHZacz5IL2IhcjRzNSk3MmR8JU1YWHo9ImdeVDBYPX1Ob008Wzt5WT4sWiM4PXJ+SGhdMigvZF1yIT5bRSl+WTBxJUhIQWtRJEx8QThuMnk5LnlYY11rXmJ4N2hDPklvcjdXd3ZYMmYhUn5VdWtEOkRrMjBZd2EjT1Q7Vllea0xibzl7PS46KyphT0gofjpXOixdLnB0XUhRaSR1QXBX''@;'; put 'put ''Xkhqai9OdHtmKEQwZHFwNE1sbUU5KT8kalVKdXZFOmJXTzRUfnNfYHxlcW11SDg/QmlkVkhfbXB9cHk4ajlbb0hbXXxablhkKnVSdXEjVWNATUpDcCM8cFt5fDJBdCJZZik7YlddKm01UnlYXkVxbmQjVF14WW5VXmV5O2diWUlsJl1rP3gqSmphKy9SSU1kTmROUURxZzQuIVouMDo7OWlDbG1Q''@;'; put 'put ''aj5XWCJ1ZmF3V21jTi8jZndKTTkpQ3hGSmY+VnAxIUN+PGE7OztgQzY8L1VRYzFBeFdETWBKMmg+Y1k3P0t5PmFnOTVmUEVhWEdqI25AYXdSa3tIUDphMUQ3aTB+a3xzWFJPfjcqNn4hQSxsXVFzdGw0ZExNJjp0ZV8zNFZiUDNHY2VIKEdNaTdfVS9IQmwuJFFhP3NQJnBvZFYsVih5cXpgcFRz''@;'; put 'put ''YGFjMXBee2xKSHNJX2dTJSJwYmBCWEo9V3locSliST5ycC8qQGBXaVAsNiVmRFVxRX1fT1t6O15ILz14bXNRakB3RjwwUGdIeHBPfCwwN34pb0RmU0siMGpqYDUsWyQ4M2NxPE02U2tjSSRLenldVy9ydUwzOnlgcUtzQGt7RTxGO2lAImN9P3g+N05RWHl4PSkvQDkuZzBoYWNQdj5ublYrRSRH''@;'; put 'put ''dXxtaGpKWCpGIXBUa2NsYy9RTV9dQjBYfT9zZzxxT2F7P1R7KGRwT0lxWiZBYztmY3U2U05POENDLyZOO1kkOzI1WzZhQjpJRX5OSjxpWXU7cWtOci5+V3Z9WFtvfStWcH5uMUNIYz1XJTtzP3olQTVDRDYyU3gsL29UZjApamQ5ejMlSlRkZmpUU1pxW3V0V2FzR35WejVSdTcwJlMvMnFoLlRA''@;'; put 'put ''allWbyRSXnhRPmA5PHAieSouQ1M5aUBvUSxkbnFpRjR3aS9SWUJPOVEyLzEveXl7MyM+amhCZmZ6SG1wJXQvKiV5S25mOCFVW3Byd2V9V0w/Nzt9S3IlL0E6Rm8+dExIIlFwZWpJc2UifF14OkBPNl80K0UqNCkkXlYxbjFmKUchYHVdLF1EPjZEUEFYaDJyc3JZWEUiUXg2UWRoR21bOXhYa2JQ''@;'; put 'put ''eG1CZV1jO28vKUZjQWZobnJme1o7JlpVJVImflM8XihVXTkvOHxhQEwpN1JLZW9mMW8hcGtheXY8QUQqb2p7N0kqXiFoOGN8Vz1VQShMPkw6UVhBUiJZSDM2LDMyY3dIKlIjcTh7XV1NeSMifXFqTlVfYmBRdUkwVV50JnwxdlBBSkNNYiw0eFFbfFpZVyt5bzJdKDk2OURTbVtzQixtYGQhSHt8''@;'; put 'put ''djpZYU1XKTNFa0J5TSVNfWhbTEtpMys8Wit7Sn5jbC5TMUc2NTlnW047fmE0RHVPZGgqNTx2ZEVsQiU4aXs+eWE4cnJPfkhONGA+VFJvZV1gKmJOLiw7YShFanJ6ViN6V09PZXIwTExYST9EP3BOQDsmRUgsYm5UUnhSclheWGxZS2UiKiRXXSokfWltQlJXO0deX15GOzNNM0JIWndLbkxVUzlh''@;'; put 'put ''U1pjO09yZShReGR9WGx+IjtheywjVmEoN2tpJDkoM25reHVzLmRIJUtodyx3eSV6UDpDUlpyRFAyfmBHMSIxX1lMJTY7N2JAKnc3WigwNSkxczo/fihUL05fIkFLWENXXmFFRTp8d2w4ZlZERz5wWC9aRTozQzd1XT5pcSxMSXtxe1QmRytIUiZSdT4pPlc7NzRvaGUyZFVHSzs2QnZvOilzT3pM''@;'; put 'put ''e2l7JWQ8UFduJSFLJGxtKF8hWCU5WWRTUmElaj5KNDNsVWUlLlFZQ1l8ZVguQz1gOVV5PH5YTjhTSWhVbVZ3bnkrdnJdcTlMQGklNHFRZjh9KEczemgxVEtbMEJtM0YpL0NmVXM8VS5DKHJdckdWUm44RCZjaEFqRk5IfG9bQmpkX2YxWzFTcio2N0wiRy5DMmcwa24iPV4lRCZiZzRPYyxPLmY1''@;'; put 'put ''Y3E6KWBVKGFXRWBVXy8xTSMkW355KSlzOGk5QzJXUzo2dTJxby44ImhWaWtAO0ZpdDErR0VEQHRQPTw9STgqNT5lZ3hxZG5uNUhOck45S1EocTo/RWJDdFFJYjZELjg9Km5CQEFsU3RUcylkbFBrcWo6XSUmPyZqPERdWy8uNUguWGgiXkdMK2hkaEhSYi45NzNofV9aSVUqJCZpUjwpJGtfLFJq''@;'; put 'put ''Q0Ria0IkcXA5cUhMaGYyMXVGbXUwQVd5WV9OZjdAX08uNXdHfSF5Nio1VSZSbCV5S3o7Z2VaYCpTem1LeVtITnxkOyhNOGpNS3kwdWUrNylxPH5HMWhVamx2SDByKnVEbz9RP2lQe3d2eDIhfCt5e1BKOj1aVTNGT0sxJG1keXdrJFlvXyNgL0JPfjlzOElsTlpaS0ZEdnlzUXZRK2BxX29VRHVu''@;'; put 'put ''YkFtLyh5VHclP2g9PjBaWzJsckJSNVduc2VZQjhiUElUW1ZQfFpXYy9SSyFfdypMYzBZU3htTklkez5eKWo0Lk9kWj5+Ikcsa2tVOns0WHskI0BEe0FoKFNbS151Qj8/V3J1dWVpdXAsP09TXlMqU2hnRUtJRjR1YyVFK2BhfHxOWnhTSkZVcEUvVFovNlpCelozYSw3ek59a0BZTVltTShPcUxu''@;'; put 'put ''NTFLRnZwS1gzVGhqLi5TUUpmY1o7bEN5eUpUY1ZIKSQsdC59cE1dKHxPYWpkQHhWOXBEZzl9SE47c0pIYmplL10oW2FsMiZUN3hESy8pOmhlYnNOQzRRNjczN2wzOCtweXFRcTtrdiE1Z1pafH4sWF50SXp0djBSV2FLQ3IzdFJWWzZQN3szeUBkbVFoLl0oNml4QDg5PE82cUlVay4sKyI+bkRK''@;'; put 'put ''VSQpRVNAQnIuKnJvVGZ3STdmRl5ANSYucjc/N09sUHd2IU90bl9OUlcvS2BFYFlwUyZMaHpEVy5GMGJXXyRmPmcvW0o+W11RWGNTT0BoIXMycGpJWnVfS042WGMkZ3EoSW9CMFs3cWIpNCxwWTd3IS9VZEF1X01Jczkyb1VqNjFbOnJtbzRIM0xJQyJoVmhJYWJbSlF4cG4qeTosQlReSzBuITEh''@;'; put 'put ''Z3ZabFdINmpQPTp8T2N2a0pJdylafTBoQGhuNihjNmFlQiZNcz5BUTBJaixgUnNVMT5MO1RNRFpUNT81TT5ta3grRXttLitATkxjUCRXTWxiY2pYUy41Ynkrd1hkclklLCxAaGpRP2oxXmI9UGdFSlFientxXVFDUk1Ib1NJIVJeM0NeM1tqJS5SbDYhbXx7T3dxI0R1SGNPZ1N+IV9zKzdtaXxh''@;'; put 'put ''dW9yRzdbSWAhcUwlKXBlY2R8bUAjWF1lOk4zJnlCbjp5bkxIdmpZdS9UPDk2fikzL1tJOVhHZ2IuZzRGOT9UbE9hUT5bKjo6S1g3e3RZNlVIPDRAYSosXWQxQnxRMklXe0ZNZj9yOSgqUWh5VX5sZUk+aHdPNV9kMm19XkVsIW16dnRxUTxSd2c8ezBqWWhMZlYkX1UyTDsoRXx1PXBjUXdtaFNO''@;'; put 'put ''YCkuMSh9UmxZYSNDSTo3b0VgazhtIXVVbTlDN0lYP2NhVy50aHd6T0ZkM0gkSnJKNzYuU2xeTkk6ZUYsaV53VygiTiZqQ0tRYkoxeC5EVkgiPTp8PGZWQzRwey49Q2gkKX5be3k3MGAsIW1pNzg/M3NWRF0pIS5JSXNXYGNuckZMO2ZLdnI/UkZGPC9TX3A5MUFoIlp5cCZeOTVlIUBgUmd3O0I6''@;'; put 'put ''YmJ+ZEtQUFRkUVMlUWZhSH5dVmRhVHdgZVAuQUNPflQ0TyskZiMjZz14P0h0LDRpPk17T3Y9NktzJWU2en0leGwidzJocXBQZ094cTsocC5yNmdxe1V9R30iU2cyPGRePTB4UzUmJH1Pc2NSSXdlOEkramlffFAzdnY3L1hhTmQ7ZjMvRFhMZGVCM0Z7OXgzUj5BaGk+IyI3PV9mYzIrbkNsT3xn''@;'; put 'put ''XiVqSThDcD02O3sqTXxKODBTZU92dXJ6aT1sXTJMU25FfURCZzhlSl9QWExHZT58YDgmYFdqSjgpWmxDYm9GeV45eTNTMnYoSmB6RlR7RzM9Kys8dk5xSXV4LyhNKDlxPlMmT3lLdj9fLHpuUyNNPjpwU15gaj43UExISlNVd1pzMXpqaTdpVHR+YipMZ3dQOUNUdEA/WE9DQTloOV1xZ3FYWkxk''@;'; put 'put ''L34pMTE7ZiVgSFdQc3BzLEh+MCxdT2wzdExDUi5MUTleUHByUngqXVg6fXU8a05UXiJtOlFbT1V6ZV9NTy8rLE4kZGVZQXJCa19KZFFZOWF6SWBkTCUrKURyXXdSdTMqbTQ8b0AjXkV1KXk8dUA6dUQ/NEZhTCpWdSFGNXF0RzBRcypfTXpmWj5tIWpmc0YocE9JSHZJOV4qPngsaCpWfClaMjgv''@;'; put 'put ''bUE7PlNPajdoKkIkImN1P1p2Uj9WZ3F5JWZCWCMwPkVSYVpBZ3JzK35EN1BCSEdQWFBweWlMUWN2e2E9dF4rJT9oXkxLfE0hTzRzYilmUWlbV3gwdWgsLkdhPzdkK1ZLZ3hUcVo7Tnc7Nzs6Lk5iTlgwcT9ZbD55bHVraEJQSEhTI1Q8KFZ8K1UpWC9eLyw5ekZAJk9AYlZbKytoOndeUlUqYixO''@;'; put 'put ''MXt5a3wmfSNESGFSYj0qNFAqOntqJGhtd0UzRzJ7TVtQWmlMfTQpUF0yLF8qaTVsaX5EZz9nXS5mLztwLDFMajBabGt4c0A9RXZERFJOL3QiLlE8JXA9cChORG9BZmJKVSZ4JCw0Zz5oRytIKlcuPU9bNnttc1dpJDA0eTcwMXBwencpZkNYXWtDcnVdJWxnTFAoJFI+USFte1prVmdFejljRzVg''@;'; put 'put ''XXQ2ZU5SeS5RcFsyPiRmbFNObyJudUUzdlR2K31sTVVBPzYuMFosMFBHK05jcTAlPUNIcTpGZWdmI1ozQ2EqeU4sczpSOTFXelpCfEgpITtBNz0hWE1RQix7U2YjWCQqWnRYYCxhZCN5Y1IwQnIiMU1PQz47MV1VW08hamV2b2hPJEFTdUZ9RiJmWktHP3hIUD1nVldDY354UiJWezpNUCN8Zzop''@;'; put 'put ''YGo3dTpkN1FlQW5XamlrbXI4QzdKdTp5SSJjcThTUmc4a1JmQmBdYW1ObW5jRTR9dTN+RnZ8RmowNmA+XVRyPSMpKCpNbStvdn04ITxbUzpCM1ttOCVdfFFHLClVJHdWNnxSOllFQ01STT0zPEJ4aHUuMTNmYUV0RWU2RCRYO2smOVBBWVlidElzQWlVdVtnUWNHK2ZZIyEvWjloOWdrQm0oUG92''@;'; put 'put ''aTFfWTZERHQja0slcz1bNWM5Tkc7WS4jVCNpekxGX09hSFtrcWt+STY4b10pcU1xR2YwKjJ3XTZdbDZyI0t4bUZIIk07NH08alk9PT89ck1QZWJPNmNJP21dLnoxWktwN0poNm4yZTV3d0xmLyZxL1BUIiVQWVkxP0Q5dzhJSFVIJCR3KjBjeVRoOz5VJXRGZ2I6NiUzW1Vzan5PUVFkUHEhdWhs''@;'; put 'put ''ZXkuXmFZbTpvaSJ1fD1JOnFtYHJSfVJYR0U9biIvZnJlfGAySX0/K1Y+aWE/JVVBSyZNLHZMZFNQU1NGYSJHL3QvPVZ+SiZQeVpXNF40IURDK1d2RV5vOCUlTVYjVSZEWWl0dE1YUkBBbFk5MGdtMnhSI25DKTFza2IuJGZeK0ZIMkY2RS9hY3c7Z1dnLEZJJGcvZFFbRHhbYWs4JCo+X01BeFhJ''@;'; put 'put ''aVg7bm0leCJSOHNvazwpNURVUEU4fFAlTyUyVnA0MWs7OUY5YzdVVVNdfkNafWp0YD4xXX1AWVAreTorNz5lK1ddVyRLKzdfUUpfYjRjOE1ofjgyM2BPe3gsbEtmLDFEQmUyZEpPPFlSVyZdWFElX3hFaTx9V3cqcXZoYVU1JCxzWlZefWsybz9PUj1DTCNmcmVWPW9McG47YC5dNjBAQnMwQU5L''@;'; put 'put ''JDQ9NSN8bipYMEMhRSplcTtpOyoyeVd8cH5vWGlwJXtQI1pWL3RyQ0k8ZTJ7I3NGPGF3cDdfKk1UdXB6Rlg8QipdMElML0QrNHByMVZFaTx2XzlVdW91N3x+X0l9am94KmwrNjBWP3k5I2wvWE5pbUMiLkhYJGo3Lj5QQm9ySlM7fjI9Vy4qM1tqJW9AMnxffnwuMmFCYT1MUV4vUClrcno4PXMw''@;'; put 'put ''JjBdd2lKe1Z1R01dUkVvSWQxPCJwZTxRbmpkRT5aRnRJaiNXPl9tRytIfWhaQTxHIStLZlFjfHRdIk04eD5XcH42KW5NR2d3Km1NJig0JTM6MDYvI2oqZ3QrYT59NUpxSlMxQntTcUM1eiVxfW16UUFRWCFwX1hNSD1ROEQuPjoqdSFZI25rSDR+Qi5PQWU0PXE5UTQlOWkhU31HSWlVSFZaSi9K''@;'; put 'put ''UVIhVUNGYSNUXjp6ajxPc0lGcUs4U1RPNT9XdigiXUQxJlp4Tm1Yej1jMGVCUiU1YHx9ayFYc0dNKWMucCFgSXUqcjg4dis5KT9SYFNLPHBzLGlQSWdpd3RdYyYhSGk6flVzXURMdlBxW1lmSGchImdROStEOF19bTNsNUYhI1UlK0kvO2whd3siZSEydWZ4XlIpMDBpaSNKKDMublZMfEp8TG8w''@;'; put 'put ''Mklaci5wU18+ZE58IituV3RNJWswcyUjYTdPUyVeKGBwNzRmaj0hd3N9WD48ITZYQDJZNHlna2hta0tdWmhOfEFnQ1Q9ZW15Pj13ODdDK2p3RTVuPGJCfF0uXn50UFNNWyhMaFBVM1V4JFsodVNrLDhHRHgmRnNKI0FAKndzbiNiaiN8Vy5vcFZCJD0kKF81TGtSWWRdXVowb2VKNW0kRCpYfEZ6''@;'; put 'put ''IUsoKFZEPyxvdjlLdE02InhUYCpYSEJuZF13SiRDMHJnWCEhVSlhI1M1ek1nY3F8dGFtaU8wdUl6bWlgfGFLaHQ6Pitxb1YwbEklPW1YNnc1UHc5VlY1eTheeXU7ciRGY2ssL0hBYGoxQS96UEwsMmN0QEU/RlZpbEhPKFNMZmc8VkA/NlJAYDRHPl8ud3JtYCNeSkhpey5GfEM/Vj5zQUVHQCI+''@;'; put 'put ''e3wrXVFXQ118Y2cucD9kaC45LiwqdFNUemA6fVhYWEA9aEY4ZXFdMmx9KmtxIkFGckRMWlRpNUlgPThFUEg+aShSLlJfTngoMCRyRj9zRG8pVV1BJmM1SSZfZk5UTSE3VX1fPnZpN291JXltX3pKOkR3dHJReFlrVVg7Q1FHYDs2bTcrUkw7Y1MpOUAvM1VMN20/Tk1vR2smIW1ELylvNjBOZ2w6''@;'; put 'put ''XyxhPXZhe1llNyFyeVpSOUVgVUk1JDIqeWhfZ1lqXUsscEdVTD17Sks9QnU4ayFndjdveURxc3tIc0c0YmgpTWl6biVkfCxlW2ooMUE7VExVQS5DSzdkZSIsWHN1c25ePkxPTWI1ISZZdEhrcCQpcFYrRklpaDxUZ1BTNHw+K2EyK3JJfXFKODZ8R0h5JiZvZVoySWYmIkk1YVlzJi5eK0J6e3NJ''@;'; put 'put ''RDYzc0VLdkFlYEQ2YlQreVhyQmxjM2lve1pUZzovMlIqTzQxT1dpNUlLS3lpSkRNeTZ9I09PQkN+TWhxVEY0U0h8YjdDcX0obzVhRmI5N3xnRmtsSXVWcl48bXJPNypHLE9AMzE+VT5OWD9CWDc9fFB5dC8pV3Z4eChQTUtILERCWzBnXjJMbHFLVHZMc05lKlled1NWJHtUeSQxb3p5QExLKFBB''@;'; put 'put ''SklxJVg1NTZHaHYvbnx7cXtXPHIhWWhwWCZwNkt7b2lEUTVsV2glSHIre0d3N1k7dUIpLnB8UTc9NFdFNm8oJXBUdUFqbGIiaDElenFDUntlcVI0QmFWeytKazdxKjU6JlZAMns2Iz0jUlRNRnI5TylJQ0FgMD02NSs+cUZgV0lUTUVAdFsiR1dJU0Rdbk87KFtpKDIhRn5gO1NyUkMqdzJ4PTxb''@;'; put 'put ''TiF7SmRJZHo7VXtqKD50KDJlc2tNRFtqYCgkaDdHPD5xZkJLMTw9QHdZNSMjSGN3fC9pMXdtM2VLNkw5NGY3eyFuZEdBcG94VyMjazRVTFBgN2k4ZXtbez5mIVtTSVkrTSs/MjQxK2hRXWI7RjMwPH5QSk5mP25lTmlYbnZqLCNQKGNiZGlELC9Fc1U0RmZTO3NSbS9GS3s/M0RxcFFOPXMxa1Ix''@;'; put 'put ''azFHYWljMDArQkYlQ0Y6YHZfWTE3d2tpPklVZlBYdCVnKmQ4Xyx6KntsdjUiN25bMEhXWUBvV1tHPysxUUF3IyhCOmMpfn5ZYV42QjFfO1VeJnFARit0JSwpW0AwSEddWFBlcGFJJUpWOjNiYHB6MmdKOHxyfDt9ZzpsbEciOz8oIT03WkZEdjIiVHtGT09YOyU/PVRbeUt2ZC5lUGFyemA9JSx7''@;'; put 'put ''VW8kJHRjU2pyIUxUVCpbJjB9Wjh2TVRMJEdXUmp7P1o5Q0hvSU4xaUE7YWcwTHJ2e2hWXzUoXnd1bURrN1ZdaVQySDgqOX5+TTt5W3JYLjtPTmhKcnIvTSlJQVJfJFQvOntrLDNhTCp6TX5FSEtnTzF6Qzk1MytVbSh4ZEE/TztoR1FdTWY3ckZWJEN8VjE+JnJEW2VxfURJbH5jfXIwT3tkIzN1''@;'; put 'put ''bVNTQSo3OkltY0Y7VSRFUGhGbz81cDVVXmFhfCtbejF5K3daK2VfNT9OI0x9MyFld2hAZklYOVZfMUtHU20jcXhqUU8mKl1XczVxMWouXXpPLGJDe2JWJE8lfnVXL114Xy80OGdDYl4qWjA7S09+cXpRKzMpOUhfOn5IfFpMRUUoaWNbc3YmKkUxMy4xQyhvSGdeTGU6ZGMzd2ZLQldDfnUyMk9g''@;'; put 'put ''Sy5zRSNtamtlRllAbVZ5LHZdZ0tTJnNLcn0vdDYwLnoxfDdsbmo0ellxbUNmJCU7UGB2bE07NiRdL0YjN1BIKlBESmAwSHxkW3lEN2RyXS5WOGFSTnA0bUw0R1F7YE9DWjc5Ym8wTFJKfF5sWU1HIShyVWZDek5sciVoTl1wYGNxX3luVVJFXXpaMDQ3UzpwXzMyakEhSnJsX2BhVSNmd0BKUyQ8''@;'; put 'put ''R0xiSmFRbjlLI0R+XWprNl1IcyxlaSUweF8oMVRJX09SN3NyaSxaRjhsQ2FVKyo8ZyhmRTtjRGsyU0B5YngwPWxmQj9MQFtpM28wfDl8YCklPVJwJTJiMWhNJjUoL0ZmT21TUGE8TkM7JlhubmFUU1MsUVIxPmRwQ2JZdW00bDVuXkVZQzh8fjw+OGtMPHMvOHlgUE8vSjVDR35IV1U/Yno1aU95''@;'; put 'put ''T0BPLCs8cnxVMjMjbTRNQkdNIjwyMzNdMVdtUX54KHFtLyFDRSlhc1tGRE0oKkJ6MkhtWzI2ZEUkNVJyPn5ALD9BOVJudExYQVRDWGtkPT9iR2RuOS9WOjxJTkwqSUdaI1J7TnlLRVMsUiQ5RFkrbUp4dm9VcVN0WU5vIyNjVXFAPihnMyImI1RnME0vXV93eWc9dUMvUShLJV09OjhETT5hOXNd''@;'; put 'put ''fT5gTXQpP01IclpgXjJjO1NQJFMuNlpJZkIqPHNNX1ciaGtFeUJ7YmUrP0teMSYoT0twSCZ0PjNdeHAub2luazVNVUJMO3EiL19JLnszQnZJVTNsW3h0Y0ZpSjg6I1RZalZYOjUzQHMmaVc8cksoeUUrMCxoaXgpQEtPS1Baa2gqZzdFejBiUG81OW1nfSFbI0JncUZGM0daUV59ZUhUO1lLWkpZ''@;'; put 'put ''I3piN2s9WzFaPGojWmF3cTZsNTxaaSpKPXA7YXhqOilRe086LjdHbGJDWDpnVnxnMzNQYkxPQHlCPmBbKnpBRyJSZnpRbn1fOGxjI3ciV3UweUpOR2ddWEp3Zls3S2tVZnhbLmohK0lxUCpqZHg+Nj07TFY1cWojaSNZYncjUyV9OEZYenF+LEo3KSQ4IVJ0L2cmflBbOHZULHF1WGo7OX4kbXUi''@;'; put 'put ''SjA6dClTK0xPXVEjZWg1VXIkYzYoMj1kY3QoVHl4bXxRP2N1MUVGTjMwM0ExImc+L2pTbGxte3RFVFNGfjdYc19UJjZ8VyJ0ckFsOXE+LFBfQDU5aU9GblBVMHtHOGN9Pi8+cWBeXTBKYD56d0FNRWsxKis8dF9rQjFGUSEhZG9uPiFRRzk1eVlpNjskWiwjO3BZVDdXIyl5dlAzPihERSVRejI5''@;'; put 'put ''eEoodkQkQjNdZCxfTV5kIV5GbUswey90M3phenQrdVA1QVNfbjFbR05dPGEmVUlrditwVFo+cSNpNkRPWjhweThXbnc3TVlUQXk9SyYpL0M6Pkh2MlVSKDpNMEpiMzlHMGMsQjEwTTEvfT5nMzxhZl9yJmVpJDA+LiU5T2ZxcSxSWltqNHREVmhGNXBsT3dAN2B6MVJ0PWNhc1Azd2NCfG5FUTFD''@;'; put 'put ''Oy5jeXV9LlVVXm1XLk5Ldix0QkYzQHYqOmp+ZGRMSGBxI2BsZ3ZAfENeXnIqSXpVe3V1Nl9MPmVMV3F7JXZ5ITF+Vlp+YH42ZVMjSUtGW181c0hnM3kvU2BfdXB5OUNWe1p5L0tPaEdpN3hWSV00IyZQfnQ2dUtJMyMzKGVSd18obTUmaDI9dCMyeUREKmtaNywmYU9vUmAsWypkXkkxJXZXbHdH''@;'; put 'put ''UDUxeC57dnc9KVpreWNrIUJeNX5DS1JwVDRkTltYZ3I/fmIlZEooVyxPe2dUaENZOHhdZWZsT0w6Sk1fLkgraD1bdlpLNlJjeFlbZjFjVzVlUGgvX1tNcHZFV0VZe3N1ZW55ZkpAWlFmMHxuXV4qLmU4JH5wb3Y7KkMrWzE9fXBoNHlgcythPi51N0Ivcil1R0dIYnleT1RqTkZONS9ee2R6K3V0''@;'; put 'put ''NGglYm5fQVhXUXk3MGVOZkpHWDUoMmU7dTlJZGVALz88aTlIYzF6aHNML3R+ciVGcXZaVXAoNTp3OHF5WWR6YFhiWWBIa21+fDYzYX5gZ08xOjx2QDRGfGlRKGNVUEU9aU18MmI9Lz8hc0BFUWQ2PD4ibWE8PXZdJjc1ZlZuXUFIRD85JDErOHZIaEBvK0M1M3lwMEArJEA2fjc5aH5lKlNpcipj''@;'; put 'put ''Mi50eXZlXSM5VnJWIn1JfjN+LHxgfH5ydTs0PXQ1cy4hW34uOSRTfV88fDY8dSU9QXQ1OlZxfU5JW3o2ZVRiRCleSFF4PVtUWUdQbXxSJHJofUN9TmhQdWtEcC51JmRWZFBLbzNtVzomIyxPaihVUilWTDFuVVhgXWs3NSFMaiRBR2xTOHsmYDxZOFB+OFU2bCtTRTRzaHlwMDdFc2JkM29IM3l3''@;'; put 'put ''MEJOWVBnJiNvUm4rWmQwdnpWTF5mOmk9Nnp9fW5ZVH46P1ZyUlNAVG1uWlp5bDRwYUoxRkQpIUxqP1cpIXJyWU16W3xaPVJDV0VwN2I1a1p3Rlc4Nz4zJGBZKkorLFJfVi9TK15pMUVYOm1EQEhUY1VzPykvUU4uQn57fi9gdTl5OFMkMDElQmdRRzZPLHpFNWhzcj8iInpLV3pDPCY1IVJYTThj''@;'; put 'put ''YWlyMCxsP2Z7JClSYCszcE4vd3czIWQiR2AmYiU/YVRmeFZfIjZrYHRJR1RNTFUxWWQ+SU9nW2dnPkpsQTVIW3RQOW1+YXBKKHk/ZnwvST4qciZxbTh0WEx2JTQ/RDcsRCRCR0d1Q2J5e1I8U1AyaVE7NWx8fF57Z3hNcip3aUJyRjlMOjNdIzZOLDhnZ2ZtTWE+JCojKGBNKyo0JC9TXXsvLGwv''@;'; put 'put ''QkxYeG9NNzVZe0t9MnxpR0Bfdz1KcnR4cy40bUpIYm87fXdNaHY9TV5kSnlPZyMxZW5TUSMwSStPPlEkQHRpcGprdCNEVzMyVEs7W34wYDJ4Z2hIdzYicF5MS25EQSs1RVRDIU8xMFEpeCpjW24kdyxQUTF+QHB6c3gwaWNPT1IoZmwsQ3ptLkFWPkZ7dGkiN3FQJTk7RFMwdSFGYndhckI7bj08''@;'; put 'put ''ImR+JmpfRiZBSWhyNkIwNGJHLE94fTguLy4pKzVOKzhXKmg4X2B1KVlpXUI/c25LeT99OTUlVGZoUmA1JDp8MmBROkshIWV9OTMqMHl6RG5JYVpXP3Y5cVlFZy8mZyFZZiYkIzpMVEBmcVJ8cC5xTlkjPGh3QXc1W2hFMV45PFRYPm8pek1VXV99ITk9ME4zczE3Pz1oRzRBbjUpe3V0TS9DKjJ9''@;'; put 'put ''XnE5SjRFVlA3dTksYTxXNTJUYW9pai81S3A+RD1iWHxJOmxoIyNpdyoqIkVeLFFsT1EmbT5RSzBlRFFeVVopW1Y8Tj1Gd11dTHZuSW44PjJqVz5MIUY6RUNjL08qeVFtPjVnYUZ5YVo/dUt3MDcwcntCej44QCl4eSx2YStlIW9PfU1wX3Jnbnp4Z3FpXj9tOWpmXi58OnZ7SG4lNSVFQGNYajUy''@;'; put 'put ''SXlBKTxhZ183SWxJT0pVVFtCb3EsaGdyQ31bWFo7ckMwJSk0cGZlSHdbJDFpMXF2VFk4Uns7RmxwJShyKUQrTT0mKzE5RUpLZF9vIzA2OjI9bWpaNTEhaV99UDtEVUw4XUYrLm1hODpPfmhNWiIkKXA3bUQwUEUsaCR6N1F4XiQ7YzRebl5gO3RuRGA0cUAueEROUGw9cCsvPnkhMSRlazZTVEpr''@;'; put 'put ''IiFnVFg4RUNsSmsjczlydkhOP0c0aGxuYGF2Kik4M0lDfWAwOmo0YyZMQVV2TWAjQzUzKClqLCNldGh+QC5EMU5STjVFP25fe30hck1qPSsuPTxFRGpgRkddWyVxQEZkO0kvWXtiUlNga0kuOEY8fT5DIUNIflczXl1vS3xBVTxGPS9pXkhxd28uSUcrNS9NdWR5JTN1RUcoNHIkO2AvXlk+SkFy''@;'; put 'put ''KyQkPDlCN1R8RjR7N2s7SjsxLDVkTWd7NGMwe21XOm0lKFRAKUphNEZEbyZXdkhfMUpfR15ZbTo3N1RPQWhERjNjXzU7K0k7RjUualtqSEV0KSRnOVU3IjQ6XyxjVmdKJkRsKkwmRE84PFNWNTAwJlo5MzIzMGdFMUt6Z316SncqKlZWeltTVzgseVIxPiMhRWdSIUdZYy9bTyJrLH1AamtLUHZJ''@;'; put 'put ''eUlkMHpwPSI5NFROTFpXMl1GUiZia1Mvd2tOTDpITTx8Xmp7VTtMJk95LHFvfGxMaXE7cGg2JVZbNWlZTzQkb0AzW2owdUJLLFEoUF4xIkRfNDRJaHRJY0xjW15xTXRXaCRlcjwxUzFxPypRcE90Xy5LL3BmeyY+T18jTVdPW01tdjhbeTU0cHUwTyhQKzdgeFBoK3huaHtdW05VLHZEQSU7SWxK''@;'; put 'put ''N1pJY0I7UT5hY3U0TTY/TCtMOnFRYlkwJUpDd0c+IkRhI2QqQ2hXbihSbWhEeExbOjkzJXk+dzl9XyJBKGdBeUttPy9aKDpbUWlRY0k1cGB+Zl9wTnBZYzNnV0tIT1VMO3lfS2IhKWpFKjMvQV5gMSk4Uz89PENYWEdMX3VYXmdobXBHflU/TXl4V1g6OGUwLk5uUi8sSWl2ayxyYlc+UkNVY1Iw''@;'; put 'put ''RFNgSGNUPVsoTmhzaStzYGtvcyZgeXZQZ0VvTkdUaEFNbk9oO0omX1pMJWZKQDxPLmlERXZdezxRdEgwT1lxVVN7KSVbfkNFT0sqeW1WVHZfI1R8NXE/NGJ+Ri8yJWx9PDY5ZndHUWt3Rl9FQ3hmN2dld0QjSSp8Ok4rJTEhVj9adG5ia20zW0pdSGdGN0IsbjI+JElpb11vb2dBbj0vXXdiQi97''@;'; put 'put ''PWZSa05afUxQL1ZoV25eJjtxZ3QlRmt1OHEuT25EcSFIeHdscFFxR0RSfFhOZlMoMHUvNztRTj1bcXFhP1JzeDldKDZrY2lZYzV9THQ4THshVixuJVBRSW84UXxXSGtNVEp7ZUN1SnpgOU5xZ2xtQCIhclpaSG50TTwsLjZXeDB6ZXAjN2dbMF57MDQwS15EWiQ4Kz5UP215QmFqVlUhXTcxV084''@;'; put 'put ''bGwhRk5hb1YlI30xTzIzM3tRdG08YzRAV0UzR2loaCM7WVk3RSFgUk9aZitnJEA3YkRrYU1TYjYhOHdjdU5qYCImaGs2MjJ2fHEuaiY3K2NVPDdebUVQXjhraGp5ckNdVyxrWlkyMnZdIjtYUzgzaD9VajojbkV9WmFdeS9bWSs0WSUrVTxQJXJqQmB4dHk+O2ZadX1nfm5RIWltWXMjN29oWDU5''@;'; put 'put ''ImQ9VWN4aWp4N15KMUxbbz8mWVt4YlFkflJKQiI0eipZd25jOl92b2ZpRHA4U2AlajkxeGouZlhHYTwvMEAhSlEsZUMyTV8/MHhFT1A4Oz8reWReNG5RO1ooe15faDZGfE1uPmksJj5IP1AvPWsrJSZKSkNlZCthcjpZSlZ1MllxfmVkLjsmVDkpfilDa15MU0F4My9LLy5beyJiY0RETExbc3NG''@;'; put 'put ''fHNSJUgxXy8wKipZRURjVHViV0coRixMN1kyM3hPeDIkM1g5PmclImhJYmNlYjRKX1pMdFZSVyVpKk1SQm97PjhRZHxpIVV2biZNMH16I2UxZjVEY1toNy8oNm1QXyR0PENWJVIpZmsxaD90aHdEU0x+V3FOMWBTLC9zLGRlMlIoLFpYL01gU3plJE90PHA0Rm5TQV9AOGR0OSlGTWZhSXgyNy9h''@;'; put 'put ''NXs0e1gpP19vejp0NEYmcyhScng8OnVJbSp8PUojPEZgNj1tKndqMyZERVI+Izp9YW5IJTJKKmhsVX1aRjVWbUZCRXZRczpdMVNTalh4OkUpLjxlVF4jckBEfSVVUFF4RHd4Ynx0LFElXy9AKkZWPjFVI1EqMFhIJHs0UnRefSlOeEZgfTp6Tl9xJnQ5VlB4QnpZLG5RUHVlL0gsNEptNFJAW3p8''@;'; put 'put ''STRWPnE/L3xLPW02NU1+QzVlMEd2X3VWKUVTdUhhc1V2WHlgN3pmJU58KmNOTVd2aj1zeiFbMGAubm98RGwoQGteTVA8Z3FtRE8uUW0jUHRbbiVPU29Wc3lwO3w1MWV7XSUsfEt9VzdANXg2fmxHRnMvSGh0WSt0QDZMMUN0cmAzTmFTLztbY1UwMHI4SjUkLE1HPHp1UFJKK0h1NVYkbC4qLF04''@;'; put 'put ''Xzc7cXJVd2xjRjx6ODcuMWVSfVpDPHE6Sj0yPGshMiNFNjY7UzdHKzNnLm1xZjtPOWsiNCFUITUxb0k9QWkkL2xpYiQ9Ql9ocD95bEptZDV3VzhueTFKNnBuUmB0OCRALkd9RV9lV0giOCxBWXZkdUc1KztSU2t5KU4rRlBhRSYzTU96dTBvQC8kSi9YIz4xanNoX08mSDEwVypmUitNKTwoWish''@;'; put 'put ''XSpnRjFmKllJO11IbGFtdTV9KiF5bDsqQ1kxX24iQHNONHYuKGt5a3Z5JiM6aGElKUsjWV5AeUBuV2JgUVhbY2d0RChyYCNzIU5qZ1U+Q0tRNCZ9RXpPNEc8P0FYW0tpciZ5X0hwKzJ3NTt3fnN7TVd0fS8vekxYZHJrJHxPcGFoJDtvYyoqMHkkLz5nOSsyUXZNWWlrMT89PVdxPltgfThvdyI4''@;'; put 'put ''WGFGKV49LCNhVzh8QGRmT0V7YzpCRUsrKm51c3JGczIiZ1N6XlAqb25sLF5RKkYzOVhqMUJNbHcuIV1DO1Z9NmYydyt6eWssaCh0R2FwUHtvPnhdZ1okQWtwM3FMQzQzOnk0JExQI3FrS1phbFlmcH0+fUpBOCxpO1hnSy9XdmFER1pVYyNwUXhFRlFdWy8kRT5eODJmQmskY3xSRCk2NDsmblNG''@;'; put 'put ''UFRKcTFxdz5kMWw/TGxzOmF8alEkbDw3NT5yWmd2N30lIyN6XThrJmIjbSNJTXVBWXZ0M3IzSW52U3x9ImZDdT1SRCspYCRMZi5HYmlwKzFfeldASEBoL1Jrbi9+a0p9d0EkR2MjZ11ENDIhaGlwUWF5THY3aE5ncXpuKEwyQyNKZXUyPHFiVnVaYnJKdGNFNl9hYy5lOFhgdkhbUF1jMkQzNT89''@;'; put 'put ''IilCKXs6RDJxVGhUN31bK2Rld3RJSncqPT9vQ2ciQjp+VmNRbkNuQC52fGFqPTJySCFoc1tuP3txX2xoNCUqamZmRHlVblgqRmhsPjVLaUViYDA4S1Z3QHwjaG8uPkxVaENXWXBXVSF7PlYmNlcuL25ffDI8UlkhNUZfJUE9WkN8XX00M05IcyFFLmNrJkFXWSwzdS5TUm1ePk5jX2pFPF9aKyNI''@;'; put 'put ''KzQpLjxJdiElLzthLjNke3BwRDFVJkJXeCRCQ3VaY29HPVA8SnQvaUpbY1VtdWdnQTQ0VmlZNW5NeUYzdktuZnUuNHFSZCxkPyprTm1uV3hVJElGUVRNLzE+a2I/SnQxXndUMTBlRHorc0tYWyNKdT9kOWhDe2F+T18qUE0mRlppPXE0NXp3OTVjSkA2PXQuIW1ka1hvbF0mZGVuWXQlTlRRbW46''@;'; put 'put ''aTwjWy8rLjQyYlZZczI+bypbeVFUZk1HO0xAUHxIN1lQOlBKcWgjYzg2cDh9OjAidDtrYF9Ubl5FMiR+ITA1LE0xVDRqJWt1PUx6WGxESTFNQVJvIk1mZTVgeSYoU3w2Wkw0THZqTGAhVStANTIuS15yVi89RDNHNUJ1Vz0jKjNUY208TUw+OGRlN2g1WCtvKFVgeUN5dSR5elIlfStGIVNGVkVD''@;'; put 'put ''dkhTPEdneE5WKjcxUE8yeDVhfCUxIyFob21uVTk5JnIpUzVhJTxbJklURWhlZWNzNGtaeH5ETl9FQiFtejJHNy8hVUMxUCsoKmJCOWpUeTglMSRuVmZ7ODorTGUkRElOKkNNJl0hPk5tQWUhRUxSRktzMyNZfmovdFBWbllETEZNUXdsZlhWMlcpTkcpVFtANGhTTEs1ajw+VjtSY3NlYndPOG53''@;'; put 'put ''PEo5ISw2QmF2MyxUYiNqIUZ9ezAiJWJiPyRFdFY3UVJsd2o0NlhKWlNfXyIjU04yVX5QbjtQMS5kV0VbK318Ol1hXjF9Pzh1dSxKY2FfYlEkRV89QEZtcn5JTFJZeGtfaDBqMTN7ZWM5PmlHWkpzRGI7MGBkKE40b3MkfTMxWX1Nd2RvSzNWa3RJT1ZCdWZiTSVHTGdzM1ljcERWRVNUNzZHW3NW''@;'; put 'put ''ZXU5NC5zTGh4Y2MkU01qcmBmZFNhSDdGdEZzVFAiKXpXUFVQQGRUPzhLdUk/fHFTcTMyVmg9Ylc5YyN0bm9kZj0mQF1FWk9qcm1QbmJ5TTh0fXVQUjxNQEJtTiJuZ25PPS9ee2BrJjt0MCtRO0I4ZT5DUColeFZMeGZKSyFxQV9DPH1qNWs1TE14dVEsWDt1anpidDpSI0ZId3h4UklqeyxHb09n''@;'; put 'put ''eng5O2FUMmhKPSN2Wm91LyVzXUleZ2lHazBWcDwmejQ2N3Uxe0tSfF8pXnxnPVhOa0cwTDtqNzx9fE5wKHJgcHoxNisrY2lmQlNfN0ttYXQ0SHtfbWtENnpiWUtsZSVMcX4kLjtgcylAXSIuQVRseXtZM2U8YUBLWXlheCpfOyFkRz9gYnhle1dEIU5BdyVyM3IrPGgvejI3aDdrb1tNKEUpSW1B''@;'; put 'put ''TjEhLlM0b3RHdClDUG80dS5vZGAvSmhbV1lxZnZyTF1dUkRjeF96XXVoLi8kaElQUTIvWGExLks+KzBtPWJ7RDFhT0JzOV4wdlNVWWROOHFlUWhJQnVDWyp6SmRyRHQvRG8qbyhuMyQmfWc9bjl3eStBMEA/WTpIckBKXnc1Z10wSThbXXQoOSxNa0tLaz9wbnxkSjxZWE8rYjUlITlyMU9yYGZB''@;'; put 'put ''bHhZaDBxIVgkV0ozeX4uaFlhUyFmO0hHemE5WitHUG5SPTpAInNiUytDfiEhWllhYU1QbF5daStzdFg2b1QwU3BETTFoPiU/fE0rViZhMDk6eVhhK3c6WEdNMilTNX1HLCJKb09ZInIma1Y+ImhUJW55Mjd7TCxjT0ZWRTNvPW9xUTIzR08sPildZXdsKlssQHdJSCImYDkkeDJCXik6amEvXnZk''@;'; put 'put ''I3w7IjEhRSVTJilROGYlVnFZNFJyamhicmVoS0x6elY2RkUhQk5CQEEmd2RzR0g9SXdddm9yeS5GN0N6SllKdHdvWG8jP29zPn5ZOS57T19EdDN4K0x7IiRHST5ZJjNINWtgdSNAdyxQaFMudjEveT9Ae19hKVd3fjZvek1YUEhOPjJTQH0qYklOPHF5aEwiVytZSFNrJCJbaXwsYTB3S29YXVc2''@;'; put 'put ''Li5NQH5NdjRCUTYqWHZTLDkiLH4/ciF8JHpxU3lKc0dmOXc0Zl5gKXk/cHxxenQ7QDcveDUrIzQsJkI7TV5HXn5tLncqKj5oQlgzW1I9Tkw9MDlAZEhMeiVuT2cvXnMpanE7QDxicjxWOUhheDslQDRhPj81XmxvZkU0aS9qMltGSGppQEw5RiNmNkAhZSVGImdQfkheV3J3VGZ5X2IiMWF5dDh5''@;'; put 'put ''TSgzLGl9eCtvayFeLClGe0MrfG8oKlssZ0Y4I3w3bEEwdkdUZiVMPnlzc2o6VUFJZClSL1J0KkVBX3x2MlFLJitlYlJqYllwfHJ1YW9FNVQlJU1qcDN1JGJwe31VaTFFQmNmW25UQGN7dzw6UCMubFgrPWRlUWdZRzNgPDk6ST9HWSkqYEF5IlpmSF1FWTdETyt1JFdJJGVYTShdOEpVSHowdiMv''@;'; put 'put ''ejtEdTA0QGsid2NScXt7KzZYKDhfPXM6T111JSYqcVFEdSR4Nm5hcEFXYE02PT5HPUlWIXUuIkQ7bytgQW10LzpaNHJbXkJnIVJ6YFo8OjxeOEs1aiJxLyxvRjx+S145bTRaaHR+PUldT1tgSmBKZjR4dWh3LGJ5d2pxcWNlZHQrJElIezlLSSZISyZLVGtKOiRMWFBFVUBNeExOMVdQanJgcW8/''@;'; put 'put ''OWhaTX1acjs5SjdLLmx+VGQyfGFPMXxFZj8yc3ZvUlBwWC9jeWt1P3QxT3YhbH0pPlh0diIpfERrJkxqdj0uRVs2PjBXb21IdnFJbFtvakx5OHwsOmxvUEAsa2R0IjhXdGlxSyJnWGl5bkNDIVkxNl9Zc11FRU9AfW90Yzc3W31tNX1zLHdaLHMuYUA6WCozQWlLSytWZldXZHEyZyZmJSRud3w8''@;'; put 'put ''L2ZINUReUCo0TD8qSl1HZ3UyfElhJGBDSXNkeWU+ZTY8LDBgWWNZSHReJEQiPXNmSGImWGRjLzhCfWdFYUt4Ky8xYjgiIzolXy8mZCJOP3JVPVArej03IS54clBwN2c+NipBTVZ6Lih6XlV8L3R9UmFXRkFfaSIqVjE0RmtTNGddaWYwJjw3OGRyR35JXygzLEtWQmJeTUkkYkk3XSUxfn1ydX5h''@;'; put 'put ''WjB0LE11VWJ9UXU9OFJHX1NuPjx4PzdHekM+W2EjZjQsR1hVMkB8aTs6S0JJKC5qIz47eXwwfH5SMlA7SDp3R2pjRWZOPl11InxTNH1Nc1RWWW9sIXMoRE1DeHxkUT1wa1R1M3FObnNDPTU3ayQvUHRUQ0EkR2ZJYV8/Qz5QUHgraUtbZiE7YSR9QzdWPX1KTTA4KWhPKW98JHgsSVs2OWk6ZCNH''@;'; put 'put ''VSN6b0FpXS5vPFcpbk5obihKcn1mIVVgaCRzUmttRk4ifWB3d2QlKClXO3c5QiEzaip6RVBNbFhxalYvZlRvJCk5WW15UitLUWFWSiFaVnZsJjcoaC4rVDkoRWZyV0hPOSZrKlBCbSk9TyxyaXBhKG56clpabUs9czAqMlBtSG07Q216T21MYENGIXBMSihqZjcsYjhsZF0sfl1edUFCNlh8ZHp4''@;'; put 'put ''a2xCbTB9NFdGT3A5SShpcC9+ZEIqRjhBMUBTLCF1QkFzUis5Nz9FInpxKyRUSUUzJkpCYTthOip7dDM9YHVKcCQ0YyEmeU8jZW1McTJQYT1eQ1VOWnJ7JDZDS1dlKXgmMHY3WmwzaG9TUUU1cTV3M3ReY15AMHNefXhgQDZUKmAvTGEpbHB7bihbRTpDdVoxOXRsdyhXbHg3TGhSNXk3dCk+MmVa''@;'; put 'put ''YnZDODVaJl5ZTSJ3UzFSYipYO0ZgXXxwQ0E/UCUsNSJFeXd+XVE0WTdTXnBZflsrLntwR3RCZ0FGMTRzWTJFQDhjMj4reTd2XVZYfWRsJj5WPTc0cEkkbFE9dlNafE0jdnxHNk9TNHc7dDEjUVMvYmtQOFQpPSZLPm5zaWZmeWtPZFdNb3clZ31PYGZOI3YjVkhrdDV1IX12MERgSUc2dHxqYWYm''@;'; put 'put ''RTV1fCMpOCldL0FrVkRrVmg4dCxYIStRRHhgcDBOfHo9JVs2WjFAfXI9WD55NG5NKWpWMC5neStvM35pfDIpQXJPPz99TFVJdmBfPnxrLn45X31yTCNXVz1vY0UmS1BPOXJsZz1hR2xyO15vdDpQcXhQLGtCc3Y1aChHSH4wKG9BajU1an4oTnJIJTowRlV1PTsqQHNxRSJZPlJXM1JmOm5YeXk3''@;'; put 'put ''dyRAUXJbNzskSitkfmNuQjhZS1YrUmh9OGYoeUp2JTk8QjIlI1BIbDZoZjRHZTd3L3k2KSpdellYLnt8WDwlRWM0T0NEdkNrPiUhK2JnQkgyMiJbLG1SPGFtPmlkZGtJO3t5cX1hJUc/fHlLOnpNSEoxeGk9OnhadVJpO0JQaHhKYnFDWFZ2XyFpSiI6am9FaTB2Oyh3eHZfNEF4ak5aeT9zT19a''@;'; put 'put ''Yj1fK3khRWZ5SUM4PkZtZmJ2SkF6ckVpKHZlakM9SFdMZkBzOn57Mio2aGVMWFI1JjhtaXdLPi5XLytoK3dJMndCXUo5cXl6dUA5OixHciZQcVZdZikjbnIkZi9WK0d+Zm5zZ1c0enYyJmVGSUUpOUZSSDVJLkdHITdabGgufVMmcjIoUyl5ZF1DKTtdYWlSVXI3UWF2bDhXWXszMkkpO1hDZDtb''@;'; put 'put ''OiNZLmA8QXZ2elpGK1M8LCZ5WUo/bnV7JW1vQSQyQXx5XUxiamBGdGRyPU9xPExZYmlsJDlrLDp3bllOLFQwdDUoQktUQSgpSVN7W2VxW1Q6X1QxL29pJkNPa0VyRjFGPGxtfWVTdntKcDI0XVhdc2xtdDZHZTpAR1EoPVZVNTF6V281fVFha0N2TyVOb3cmdEFqOEg3TlhfRVssYX1jd342MTs2''@;'; put 'put ''NXIzJT5uMkBJeFIrMVBWRyIiUlJ4UHBNaGtDTFlZVlcwdXpDJCtYazA5eiIpOklZZ3E7ay91YlohbFp7WDJTYEBQeSNLVXwzOX03MGQsPmkrNkp9KV05LGIsSTw8RVVNY0NUYz4vfSZ4UzlyMjRvXmMxfHoza1A/MlJRRi5EX2Q+aVFXSltacWVldXh6bFt+XVBCfE1aOUR6VWU+Q0lyYHh8RU9Y''@;'; put 'put ''TjNEKDxGfnZeXnprMiI7fltAdk9NRW16aERgIUQ4VmtafHMzOF9RdmFgQygkM1NLMjxoZjo3XzM7W0Vefkh8TyR1UWMhZEp3U186bShzInxnWEZBSkZ2ezokJkFQVU9nPz54VWhTcERyUVVISGMuKTI5OSp7LkpbTlJ5RHglekV8bTB7KUQrRH1XQjF+XVdIO0EqcFtoa1hlTmQqKzBzPT5PITM/''@;'; put 'put ''bT1oOlQyKDRUVV12JDxGY3BBRSxoSWRddjYzTFgpSjhQc2B7N3N4dGl2YnpZYFlZQn1CLk5zLm1sbmU1XnYhPmdIK0plSFRLMypeU1VCVUltTnZdMUVRe3tRdEY2ME5oVjRDJXs6W3tUc1E5bShRSTs4M3QmJmpza3NoanVaNzhmQzdmUkdFJGAzPUxaKkpvMVNqellEYVpQcXJVeCMwQkRXPCh3''@;'; put 'put ''SGE+VWhgK3U0XntXTkBZNHB8fm9tOEg/Rj84bkBncVV8SmFURVFgY0ljaWd1SXFkSGRmXl9lKkpmdVs5WX49SUVoQlhtLFkzcnVnWk5bbXE4NWdlbF9nfTJhdzBJL1VmP3AlM0VOQ0hxZUF1SzVHeyJSeW0qS2VHKU5LUmF7SmBpYyxjcHlCejhKQkFEaTlGbihuIXdQSVhMQnBfdkNxUiRnd2N1''@;'; put 'put ''akJmZWk2I0AkK1RHcCQlZmFRKUZKWEh5ZHpuUDdObCFPOldNXktdeilCZl0mQnN1OiQzVlVBfW5LWmZUYiVmPFtedllROmZaUTEqNDNbcFNFbC9pSk5dMkVtXzV6PUMlLF5+V3gwRjM1U3AyYSFqel1Vdk9uVFpMP0BfI3lhNVEha2tfMDNlL15GZnRBZyVEeik4KXpUMWpzImg9K2I6P2JqLzJ5''@;'; put 'put ''cEFbXn1pSFB6MnVLSFE1R01bNl4rX05jdU9rPF9tTSEudl1BdEwiXWBAaGpze18kdTRMPGpRVk1xTmJGOGtoTmhJYG09aEY4SyRqVEA3ZnZAfj45SW96ekpmWTBuVCRgSVdoMWFONjIydmtBZGNCWlhyPT0yNV4lLEpmKV5Ye2tCOl9dVi85KHIxWH1ER1QiLkhAbSQpZzVJaU9PRmZCLisqMnlj''@;'; put 'put ''MHk8aSsoZFZTKDJNWXhadFNAMj5gXyVySldqWnJeanhQKjQyS0xeZ01eIU5YMi95KGpQT3F1UTQpXl4pZDs+SDJwOUhJUXQ8aXt0akEwdztAJmJXIWw5Wzg1Mj01U2BWdldSUEhFWVdYMFFBNkluUDQzfXxkV0RwN1khO0o/YG87XVtRPkBKdy95PUV7PXpsYipwIy9oYUE5QURNZDIvRH1yKVt9''@;'; put 'put ''aXZobE1nZiNhKVZVbTBrfnM+S259KWhpbW99PiNBc29aclhaPCprOVRmU3g0bEE3YXM9SmtxZmM+SEtNPnw5X0VlTUI7dTRHM3F6MkclV1JMQzBOalElNGUhLFJ8ZmA6TCVlUFI0an50T2RNJGRBdVVtNEcoUj8zaDV7Oix2KkgxL2s8dnZpS3JveGxMVUptOE5BUSNndFQkUVR3dGAwJDhSPjh5''@;'; put 'put ''OkVPTCNGdzMvR09pcVU1WkI3PmFkfWYlXllGdVlpbjoqM304O0ZQLmozbVQpMGhMfn0jVlNRVWBUKWUjKzNWW3hdQDBSbEJwKElScEFLTygpfSMsW1kxWEk8c0VRM348WjJ7Mz1qb05hXTFEZGk8OXBNT0gpIy4oIm5baSs5UFN8YT5YMXozTWspSExyJll8RS8pa01uZSZfayVGeUNxM0dDMEYp''@;'; put 'put ''d29FSG50TjYpVW1TI0kuYnF0MkYoYyFCMXJ1TT5Le1Q4bnBvOnAoN0RhWH0rOixVIXkpc09kUlpuWXN5LEQ9YjxGXixUKWt9RDRsRGk5bSJ9ZyJbczNnKl9le2YxJUw5K2BWSXJWZTlAQEEvMnBjW2FpTWs+KzFzKEBhdUllITk8dDshfm4maTU7KXZGVHd+L0UwZ2diMEcoITMlM3RbMzk3SGBI''@;'; put 'put ''fUBjXmV0e0pIQ11TJE42en0xa1gmKU9mJVoodVo8X2h+amkiYWMwLG9lMEI3Y0xBIXltKHs5Km4wdUx4U05sNEoudy56byhpUCw7Pi4xPHxZUDprNl1LSCNGJmlOXTJobyhgY3AiZmtdYEgsKTk9MzZxJktKUnRFNCt7QXYrZzsqJmE8Wz5eOF0kWXw1UHdJNTEhfTp5bGRMbSZ1eGBRI0ZvKDNl''@;'; put 'put ''Y1ZVVUkoVV1YbXRMMDYqNyQ6QFBSQ2oyXSJIKCJkSV16TnlxQm5APSZ3cEcwJGV2ImVHI1tQL1c3KVNCUDpefEM4LCtzMypXYl9wVFo2R3A+I1FyKl0sMlZCVTF6KjxAZlUqLEpnOmtGe3o4Mj9ASGVTOCtwN3JQXlV7OXw0bHloYFV2X0h5Vl1QT01oa35TL0cob358RXkiN21rWV95RmZjYkB9''@;'; put 'put ''N0lUKTg9OEt1TWIja0Z7TVM2YlY3SEI0bWQ2SlIjbHtPKThEQmZbO1pqZ3hPJj0lQ2BAZUVaQmQvSEc1bXQqQnFhXUZWNykwImwzVHU/X0FXKmVOXX4qTChqSUtQImovZG1laWA+XipgMTBVL3hdYkI9M2VNX2NHNUtdRUNuSiU7MzpQVGcvX3BTQkIzS3dwPEldZG9Ce0h9dV1AZn4iKDlYO1k7''@;'; put 'put ''eDRuUFA6bXdGUjpOWG93U2hPOC47Yjo8OGBjNiIse30+XTx4NTpoaFpxRi95SUEwTnImVkNbJkxRJi82aFVYNHIkPGxjW0wsWy46O1I3Q08qXTVvSzdxIzxWbSVYZmhpL0NBWlNjYmZJaS9ERzNXIT8hbF1QOmVVJVNjRU5NV2NJVyNpImxeO3NkQ195KmtzazFCZGpReVNCayJmWlhTcXgrKmNU''@;'; put 'put ''VVZUQm83fnZtYGhdZ14uMy4jKno+UHtIM3E7cE1MP3BjWTEzRlAwNSRiKWB9ciwjPC9qZlZhOkYpaHg0X3hWWCEkNkhsImZ0NTsqU0dRLGFdRGddQjx9PDJYZko/eilBY0NYWzNwS0NzLHByLkV2OT8vaUIpO3gkJmQ9bF0ke28saVRlJVsuP2dIeWVGTHtCaFtFL3EvMS5sZSgoQWwuYW19ZD09''@;'; put 'put ''N09hW3c9TCZWK10sRDhpMltBV2JENFNibV5udjEhKzMjbz9GOFNfPmd4fC5NaDdHNWliZDhddz9EYmBgeTA8JTh7TXt9SVZROEVEQn4ySzd2N3RzRD4+bXR1QXUlMUkqP3tmMkovPDJHJTU6fj8hI3c+QitdT2QjJE1WYyZXZXhPOFJ2SXd9TzZJWmNOKixaPE1kKTpTVkUvR1tGckIhWllPeEk7''@;'; put 'put ''ITh9V2FJUi56MmNHLGdJP0JSVmRTRFMsR3EhXTg2bHFJblRySi5ZS1IuenJjOk53eiVac1M7dk1CJWI+TSFRPzU1aX5bPmZUJn4xLlt1LGRVeGJVPUlPWDQlOl1FanNWLjI0VGlKeUFLT2RMR3xQWiFTPFs/Tk90IUxXdm5kNiYmdFhkNkcqIlZdPSp3QE89JUdAJEhaREZ0b2x9U3tPOz5xYyJO''@;'; put 'put ''KHg1L1lHPVk5JFp8YEM3RHw3N0R1K2pIRlgiWEYwZU8rd2BDTzBKej1bTVkxOCRZKmR2V3t0VyJAdU5HMmRTQ3g0TmZIYVZBN0Y9NSNEZzc0T25YPTdWeCErJkxbV3EpQnVpVXtvUm98ciUzVTZgM2AsUFtIZl90KD9RVTMoOjs9bypjKi4rKSwuJUFCcTM2emAvIzEiOFUhRGl8TkUlSmksLE5V''@;'; put 'put ''ZHJgeD4zWCFsZSw0X0hEJkl5R3BSNDZDbFZpVmlwIXkhayk/Z2lNLEl3RCxKO294Mk1QRWhBRiMvd2dzRTxTWmVgWGJdLmB6UD5dZUorRC9HMFdzbE1CPVU0W1g5blJWVGZrUEc+YG4mKXlta1JDLmd+azwlNmMoYn1meDgzV2EiVnIkeTNuPX1LQGdjO1Yhd3tyZ2AlVyhjREZtMFlEX119ZUQh''@;'; put 'put ''STc0SU8iSE9ZSFczK2gvVnchVVVNKHUqeVhpYX4pfF43cEEmclEpWWlpP3VVPCouUE5uTHspcTxGaC5Pb0MofiEyWjEzRG1EOnYldV4pbSlKb2IyLmx5c1Q9M3trXz9FdFsjLkZ1VSYpLG4pRnU9dXx1fClGdTt1PXV8KWhgZmtGbD4ocVZMaUxnPy5zOXUsREB5eTQ0eDRFRTZIa0x7LE1iaHg/''@;'; put 'put ''RSJeZy9TWWFIRyhpN1JjYCZLRnpAfVsiLmNeNTIzWnNlXXJ3aDxfNS5MTUN9W2Y3Vk5OZzVRcTVkbVI8IV5UdHRDfT1gUCYvQGdXMGA/VF80W3xQaGFlW0gpTVkoTXsmI01IP3wuQ159dWt6ZltIaXl5ZGBXYGolSkQjKDRtUkpqQ2VeaX0oSjdSTXlbJkxEeDRrfClEQGxbdVtKdWVnKnc8XjR0''@;'; put 'put ''b1pKSV50dkJ9VzpLdHtnYzo/Y2hZWHB5dERmYFlQb0htQytsZl46QyUhRHhuS2xnIW0vdiNVbXNvUDU0Tj4zXms4cC83Z3ZEal4hP0dZZU91ZDYlMnRddzFoX21IU0BleUBXKHVRXnd0Ll5Za3UjKlhUPm1XUDJ6aXMlcTpbRDUjd19UQXMqaT0pOThSWGViQWMienV2OmByZXVsZGFzeDhVSlc2''@;'; put 'put ''T3dzTzcreyY9d2V9XS5abzMub2tpV2hDQlhWL1Y4e0RBNTU2LEE0KVl2QElXUX1kbnRWPlUxa2UsK2Q3PShXSTEzTFJ4Mj5YcDM/ZEJsX2ZzIyp7XTA9XXFKeihNJUtgV3ZJUShRQlciLmxDfn52VncrUmYxPm0kKG5xYlMxKkY/JTxTbChxdDs6O3t4ZXJSPks9UShANFN5QSRSLzFbPWgidCVF''@;'; put 'put ''VU1PLHR0SSIzTz9EIUFaYzBLLHZEJVhyXyZoKCFPY1MqNj5HJjAsd21YOiQiXT1oPSI5anlwYDlBKXxCPkhuZjYmb0V5NEc8fWVwRnhCanRhfGwwailCRkhYImg8YnBGOUJ3dGF8Y2ZnfTlhblQxdDxEMlFgQmRRSjxgU3dAJklCVUlSZVVmTWJ3IS99QDpZSjwzNDVwaCgzUElefiMiXmNRdjYv''@;'; put 'put ''Z0FlPC44blk6RUtKXWRXYi5SKEV+RS5ob0lBRX0qZGVlfGxHfFBCKVleTSZjbWEoMCNAaVcwISNWQyk1W1BVOjVeZE5iQ3NuSF18XlZiaU9zbHZRUEpMQS9nS0U0VnZtJU8kbCVbITBiI1JkOjdwVmIsc3RmXzJQISRXRXBTYkllRU05OWkjTEgpPTZ3InJtZ3JnPitGY1tnRXVtfl4sJnImMEVk''@;'; put 'put ''Q04zN01lJjBDKCFPIUAhfC5FaFJOUlBEL1YxJCIkbTRWNEYpbV00JWU0OSVmZkE3QyFUUHdNQF9ZY29Ub1BlVFkrNSpAUFJ6ZDBxTiphWTpueC81SGY3UmY5a1A7SXRxbXhiamdZIyskWTdSbWpnTX5PVUMiQFV2QVZFYWczcXlWTH0wNno1bjJhalJSJWU0YFN9fE1lUyhpW18vTSU/eG95NGdZ''@;'; put 'put ''TkgzVmR9czleYGJMQk9rfC5pM2B1bHJXYHloNi9uI3ksYm5WYnMyXVNCNE86TkpwYyZyQWhtclVgUl9QNFlGaiwuaXM+fDVJcEc3eypdI1ooLldhREFwSFJYR1VnJFoqKzJfQCMse01DImcrUEg/O0k6K2hOMj86VENDSGBNSEtCMDs2aXkxU0N+TXp0amNETlZgME5+TS9NT05UKXFXUDYubHpz''@;'; put 'put ''TWpoM05ZTkQ/eDV1Typ5UUIuXklbNVFTUWZxO3p9WUMjJWExXjswUzNrbCRTZW44fC9VKFY7OGUhP1RrMSkqIzA5ZnF6ZlRSUDo8cSRUZlZVQz94K0Jid1t5Ul5We19oJDFlLDs4MmF4c1NhKlk+bURrbzhZKGZtNUdlaishelVrVVZpd2FtbUp2OEpEdlh9fStnYDJKV0k1Mm5+el5aLDE3eDt3''@;'; put 'put ''TkRWflBDJjtkOiN7YCF8WERMOFdfYUE1SGJ2I0AuTV5iTFFDOWJQaSxJcjdpJT1LOG84dTBMc0BwbGtxaGUlMzhpc0lPYG1rNG8qcWlEXVNUYi9SYSVzRGtCaENWXUA7KjtDVCtLYltXYyVbMVEpYi4mUVZma0laZDM9WW1MenptaGt7cF4vRzYhMFUkVzhpNGJrPzUmOmxRPCReX3kwQFBoc0Ql''@;'; put 'put ''RF0od2t3S24rN3BeJTQ3IUV2ejpENFRqYnMobF1xXls1PShmN2dUWXA2K3R5ZGM2MmprUEJDcU9wJCxaSzNJMXxnQ30re24xayUqRnFrXTVZcGZ9Z1ZqMVgoJUdBfmwkSmJ1fklhWnNyKV9ZWWNrVmsxMXtnNWZFSlJ0e3E1SzVXciVxL35oNHZdcVU0I2QyX1R9cz1gMWNCN2FjP1NjQUV0P3U7''@;'; put 'put ''b29EXVREIURaPWNtMj1uJChBdV9CbURmd1QmcmJrYyljaWFzUE9WRV44fVlFWkUsM2AzMTN7RTZAIlR4VixhdVZsZ11KQ1dleEIsPys/YnpDNyI6dSN1Z2p8dWZ4cSp9ZSZWO0hjZCx5O2JUYlpXZU1LdVA9cSFzKWMpZykjIn1CcURBeFI/I01lKXE/Qj9fPE1FP3giQiJEQkhEaUA2JH1UKCUs''@;'; put 'put ''N0E7e2tAITBaRC4rUHVONG40UjFDc3JgX3Z+MDYwY3duZUcsOUp0aSEmeSRqOGVILjwpMldycjZZRHUwOXFAcTc/IytxeiklK3ltSHtuJGZNbUkmVnoue0MjQlFSXUhbcXpvfj81MCVUQmkuJF14R19mSGF5Iy5KbWUwXiFmNSQyYzsvfXIlMF9HPm1kV0A/MFZnZlErMTlCfV17MCIsbFU5JTlF''@;'; put 'put ''NlAvTHNwY0IsNV8wZDZrdlZuVH1OPGxhQiYyQEUjO2x1Q31EcmpYR2JjL15WKkslLzdBW1VJXko3ZnkoMiJ6V3I2JTcidVFYKCllMGoyYVs/UkQzNXpVRStydCg9Zm1lbWFdO287fWBJRGhuJHhISUM9VXIkdzgoXXVnSER3ZGcmXilYcFg1WjIhVjlRPm0vZnJEW3RNNil9S3NPIyNwUjV+R29B''@;'; put 'put ''NXcqeW4wYmF6LlNnbV1RbV9lLFghejhdN3BWYnR+RWMlPS44XWV2JTMwQWElP2AldkpgVnV0TTppXyxxNlpDc0F4Ojk3MTIsXyIoUkUrOSQiZDR6Z2YuOHw2Pm19czR6Z2Z0dkJxcVh1PnI2VGQmR21fMFddRmYidEFCZm0/PSwoU1dZV1ZGY04pYjlaeDZ8XlNITil9eFthQVpFNHxeU3dZOF9H''@;'; put 'put ''L2c/L2hmLGc5eU5kNW1zJkVuInA0I2dQY1VFW19zbD9Ea2NLNCEpMjhMUCs3PTcsRDo/fjo0SXtBKH1oSjhpY0xGY1RHV2Q4QH46fHpeUzNqJkVnIUdVZiwlcXJOfUs0fElmYTxNS2xTdjpqUmY9WHdQTSZHKyxOI1M4WlB6IW9xUVA0MHM1N2Ehaj1va05rNyFPcj48IWxgekw3cklGNExxdS95''@;'; put 'put ''R15RdFZFRVRMSVJYQnpQKzBZV3JuI1Aqc2t2Qj92b2JvTGNucEIzfGZxNjFga3xkVHAybDNUUn45ZFVkbzl8OWRYS0s/a1d4VH5RN0lIWy8lRyspeXZjYzRLPDFdSWNGdiFsZnZqQnl9N19IUlhfdWVhNVIrSWlWW2FeN195OmpmaGFySUZ3Qmh7Ky5EKXxAcmhkXnNiTlFDKTljaUh7OEZ+aX4p''@;'; put 'put ''Nl1uQkxkbyN4K2c2QHd0NzdZe2E2QFhGW0tHPl5ZQEdkSUd8b3d5OjsmXmc0WEpuVD0scktCMy5XJSY/b1pCQ3B4PH5bbCUuUzM9MjVlKEdzdWRddUlwN1RaPmhvfks6ZEFaLlMmOGhiako1fTx6QEJVcl1PPy5lQlsvUktLbkUvLjkiYEdzLF4pOXt3Q2NYbjM1JTJXUH5EbVVONnFTbkhdVncm''@;'; put 'put ''WHg/PUw3N282Y15gIkdDcylhXk1+PEB5Pl5zYTJaaENVMz1ZI2hiNnFTVzpTYGRjVnB0X207UTwuPW5hV05STE1qbTh5Tl58WjVSJFhNZDZMfEBrdjRdZ2QjemA6U09KZGdqeSJyM3hSTWcqOT1DVEw9NDRRcX53VUdmQ0NeUyR7YF81WXBYczhKWShEV0FzKi5kVXtoUCNgO2dmfUw0IzZ3OWJe''@;'; put 'put ''YHtsZCpCTClLd0JLeFVZNGVVTl9uKVdzUn52KjkpTi5dVlBwTEIoWmZ2dSk2Vi9rXWIqdCxbXWxmdmx7aEIoSjhPYDE7Jjs0NG0ibHA3RyZoI0BAfD5AazFZYEJnRCxRTmZ0VkdUeH1ZbiM6TjRoIyl7fGptNChTLF9eWXA3W2txWzo6Y2U7PFpdalU3eDRpc29QcUBCWH5ncV16LE86RkIxYVNj''@;'; put 'put ''OWVlPU5xSzxebVRtVG9qVD1veEBBcWFua1FAbn1FSlI9I3kxPCtUN1VDO3tpVU1iUCpYMzI2TU85eyNnbGloNlclPjV9fUE+Lkp5Kno6JlFDW3lyQ1hpPjFhPzBMTzdTTl8yTkNoJD02b1EuXm1SNmVGRWY/U2JrMGYsXXlkbkAzNVRvQVA1JTc7LCJfcVlWbVBGLmRIXS5rP2p0a10pYyFWYk5J''@;'; put 'put ''OU4+aCltKEJ+bWA3VTlHSH5zSHBYV2E7YHdnd3VXOE97NiN9Z3Q5KW1NaCtzT29bTUxuajgzZXxoI3lbNT58VSRweEM0YnJBY0pranQxN2U4QWVfcCNXWm8sIl08fDM/N0YvNjo9WUUmK0tVW208Kmd9JlBgXiVyIyp1Ml0iXkA6eitefGM2WHojRTQlTURHZGwySFhhblVsKyI4K3d6Jj84MEZ3''@;'; put 'put ''JiU0dG9pNXZzM0p4TWNiR1o0SmpROSJyKzBIVX49WlRuV088Izhqb2BAUWt2P0xvbjdlYDJjYjZEOCxqJT08K0RPL2pGT0w5NEBUNXs4ejl4Pj16UWBmQn5tQzwyL2YsRjBBWmZkQTRgXSozJWxKanp0KXFxeTkpcHFZdFcpI14sV0ZXPkVBWmtieSNaVWB+MndkaURYQXJTJEErXipyOmdJSSZY''@;'; put 'put ''c3lbJExmcThSSzYkeDg5LE85XmRpYj9TQ3dYP2U2IkMpPFV3NHQmLEUvKlF+RypEMUc6czBBcDpEVHpvNi9oaCkxW3BrPU8zVmF3LChMeTZnaS8wSiNEaHUiOlAvN2QyOlFdazh4JF05XjtydXxgMi98OTNoUU1nITdkMiVdWVdHVS9SX1MlNF5OM1E7ZUxJM1dQeDU5SF9acjRjKDMjKUB8T2w5''@;'; put 'put ''JDolfmQ9bUhzfTBsWC8+OWVIRnZ1ZUcjejpMQz8/L0smZlU3Njo9eXRJSClvSjNrcnJwa1R7PCw3T0dARXdRaVp6dFY+TXFKIyFCRHk4K3dWPzh6OWB6Q2BneS8iTzRbM2xkZC48Yiw2ez57eXpeUXMqIyp2WWclI11LRk5RLko8bEF7NWN9fFh0elt5KHo7aGApTCF8R3d6KDtEQWdiI0p+NSQ0''@;'; put 'put ''bykxPipPe198WjJZbjhnIk19YkpzSXRZMzdBWm4qO2gpTylsc1lbJEVCX1gxWSp3KShqZGdKczkpPC9RR1hiQE97IWgjXWY3T0hYUUlpeUNZcFVSVVozOV1bVGtpLmszaVZtbUorfm5ENnZON3J8VzFrbyVEPX0ldlMqaDldalhHWVNNdDQ+dDJDJkFRRkVPdmZ8WHZxTmRVQD1MQmVQcVQyT2Fn''@;'; put 'put ''OTtrKWdBK1VSQWpHKlJ6PVRYT09raF81UGNIYjRPTUpUdGtpIVJKX1AzZSNvQz9bZCZBc0lXN0d4Z2M0UnAlaTRDTGkmW2RWPG5JTUJPPzBfREhGVHt0MH09SlskXktMQGVDMEplRkxeXj9zKklCZUQ4JUw8LFllOyFuZjcxcHArJS83OSU9bERmNC4mVn44aEBhRzUoUUlqTTVANiJLKl1pdUVw''@;'; put 'put ''NC97OEtKamh4MXpBQHk5e0pCNCg9N3Z2bVhqaXpBYyZpMC5MfG8lMzJjZ0xKNkB6cSQ0YFRWJF1WMSQ4KWJOQkwzYWg/eHReYXNndlJJV2t2dyU/LDVoWzM2OFdTOXlZKGVhdnpMam5gR1NBW21YNnFANGM2d09aaHJAeWRCcmNKe04+Zk5jMHZleCJrL2hDZzxRLnsudHRES0RHZWIjZ1duY18u''@;'; put 'put ''aDZQT3VFUGY4XzkuKltFZFQsWClKMUlEPVhPYnw+WXxCaGo3Y1tvW0gubjFXUUU0PUtDSVRpcVV9VWEsW2kjWmxQblNlYSE4MzwvaD50UGQ4QkgmZ1suOExSdT0vT1sjPXpKPEgqREttVHlOOEBaMlcoOU1rPDx4SHVeYXI+d3FjXz51bCUucXIreEU4Q351Qms8IW5md3BId1RnQCIzcEImfVo3''@;'; put 'put ''fDh8PHhBNG9KbyRAVC9qOGNSWTZKUzhtNzRnWCRuZV5EUUQ5LFZRKz15Ijw8QnRHSVdeLGsuZHp3ZFM4eklKdzxpKDhxNFtiWFNLZ3ZHfXh4TUgmeVNqLlMma1JDVE5HanZSaHc6Yzl1bz9kWiVgNVhtMF55IXA1UlJIOSpXWit1LGVTNXB4ej5QJWUvLk0obF1RMTd5QndaMSVqdGYlXjJkW3Jj''@;'; put 'put ''dzEmTktRP2YieixSJjBPeVldeEp6Y0M7N1JfWzQ5Ikp7TnBtcnZSO1BMZFIsQFZwLFk7OEY5WHcrPD1NdE1OOnBHUDprYFF3V1R8I2phfURMNUx5KGc7YGo/ZGxRTEdZSy49V1ZLaSNTZ1hdOG4mfU1TdkV6Y0pXfVttTSFdVi91VnRHdWRUYjJFWSRbP3x9MXAlKV1qJV4pViMkUXB5MSNZYEsv''@;'; put 'put ''b0A2eTRiWltndlYkVG93bmAmdmA8ZnpiM2EjbHZwO0t+T29+T3hLTWNAVEFPenZpYDxVVj1oYDRvUUI7T1k6OHYqZTElRkp2emRFeWEmckdeSmZxO3Q6Ni9oPyZDYjYheHM8aWhDMWsoZUp1TWIpVT9hQ1B5ZXcqb2Y5eHMhPC90QnJ9Mz00Ky8oZ3tVZSMlMHFEL29kNjxmVGc0W0Zee1BdaEIm''@;'; put 'put ''Rz1lRkdRb2ZDQ3oqXS9DQjM0XTJvL357P1UhOyVLYmkqLyF+cEc4byxJYFJPcCs5RX5xJHEvRn1YJCVfSzNEYDtQIl9Ud2o5S3wuKV5FaShIemRSTzhnUXplblU4N103eFZXL2xJe2U0JEMmdihmflRTP29XIWdkLmQ1JExfeFU9bTgubiV+Q0xRREw+TGltI1k3X20xZzZ4WXl6Tl9XY0hbc31n''@;'; put 'put ''UWszWylUKlFLMy47KiYye3gwT15aIiZAailgVGF1OHgoZEgqbzghMj9DMS5YaHleZm1ETFdgVitjWTdkJTIwdiRER0pXcn1rInQjRDR5RzY+IixMdHJwJkZTKVExLk9zN19NbzMrVnBpbTVpbFNSM2pEI2VHNEZfLmo9cTduUTVvUGRlViJbNFo+fXohcSxkSDxIZmUjeT5ybGIwJVtEO29VLzFJ''@;'; put 'put ''eXI7I3tgOCNgLi9JUXVpKkx5TDEjfikycjtyTH0mdFZEcyxvYV8hfkp9L1syPHI4c1E1cHc0ciNqc0goQi54U2g+Y1Z+M2YmJTAjdmcyKFshN199QWUxbS8jPWgoK0E3dSNZW1h7SH1UYmJlMjtZMTdOY2R6cX4ybTg6KzlQWkJOPC84UUE+PyJgUiI+RTtGbVZOaUk0NzgsU1JGV1AheCtUYnpg''@;'; put 'put ''ZTtHYDQ0ZEY6SUBYNWJ3OSVwQiU5SmwjaXFPdmQ5WTBPY1V8a30iPkUubTRFKDJIM2J9WEN0YHZxSn47Rkc+fGpyLztpYT0jcSFXSnM2PkJCSjc1e21gN2duMVVbYzY6QkdWZ1Y6WypLZGcwUWpMM2I8cFBjQTd6QHRIZnszWkhgcVk0Rixzfmc9TDVPLHNHSmc0VEQkantsbEVHcEI0akxaYE87''@;'; put 'put ''Ykg7SjdMKDhjdHZEXTJpWk1nLHU5XjBXMXo4TU4xO2ZNZl94MCEqMl9wXl5xJFIqZTBWJiNTOTIjdzwvI1M4YnxxMWk5dzEhXnV2KnZZeS43dTtnJkF0Kj9JbSNdIXJjWFJ4LEJlNFVxVWpJLENHNVdNXl9RaG5hbGptSiYsTWxAfGguMHl4T2EoPyZ6RCVLYD4mPTMyTEo3TykzI0AlMiZOLyRt''@;'; put 'put ''TUtzckdjaGV5SWRGZXRfYV5wMFpbNT8pYHkjNi9Sb2VWSG9NJiZ+ayx6UXwuYndvJjNLJlZ0aXRaOzhMeUh4altkajhFSVhnJkFbYTdlTEY4b2tMWjQ6Uk4wcT0uOjJpQi9+MytIMiohc09HV3pOOVltLlpCcD4lUiNkPDUyQlc6UTNHS2EsQTw8aENGNW4heWxQL0w1Z25wZ0FhUVp3QEd1OURa''@;'; put 'put ''dGw6TzVhVUQ5fHRORyorOV5YSHFXPSVKdkdCaGttWkd5c19teE9AcSIzS01wKn5DPF9+bWB6Z3t6cX4lZEh8b11zJW9xa1o9XTZgL0koVSgoNSlTNTtmbzMkQko3XVBZXSYrcFR6XSk/JkI1cyVNTjIqI11BXWVWalR0b3E7R2t1aWxWSCUoQElNfFVyU3kveVRgLClgIS9RWSZzWT47czA4Q3Zw''@;'; put 'put ''cmAwPVNKPm49JTxpcyUoZG5BYEpLZElFO0gzMmJadk9mO20lIiFubjJ9R3FvLEVlQmVAYGpXU1NaJil+QS9yP0VbYFBMYC9Cdl1lNEVCQXksUlVrXz1mI0wlOlJiNkhhUCxEZ0FATyVTZGgyZFd6VUBwVyFeZ3k6OXVqamVVNDI2QnR8b1M+aG9QIzIpXllMR11YOU9rMkhydj9HXnxmO0MmMmp5''@;'; put 'put ''O3Eici81UHd5W2BiQUdnayorZFUiQDFoNCI7YmU4LmNoemtJcFoxOiNHbCVDPVszXlo2VkpNJlUiSCpNMUhdbzUldjVtOGVsdigqIStIem1rezReYntNVWw4SnRbKkh9RGolS2dLWiNOLEBVJjtLfl8hPSNUbVQhSnZpJWRVNDkmOyMmeF42PjM2N2p8VjQ5ZEV0OlYqRGtVXUAqbS4hb2gjV1JT''@;'; put 'put ''T0pIX0NOdlVZJTFEZDFmSShiYGl7eSF1d0Q0bGVBOihpPzBSOCxTKGo0eiVQPzApRDlmO14iPH5CUWFCUilGc0VyMGZRWyFuZlcxQFVtMTg3dSxYbCI7S1RJX0JzUUN8KX4obmZ+LGNyQjg+X1RlI0tKMHI9X2UvRlllK3B1RTVncH15KllmKU81byYlO1p2TzZEO108bEVQO1ZNV09PbjJeeUdh''@;'; put 'put ''S1k4Qz5dJilnMFkoLm9wV1ReIWN8enVqZkt2UEcvQHNiMyhZUSh4Vil7NGc4TTMuaTp8NGNoU0UxfjlnW0RucChQIztMRVo6Qmk+XWZhcEttIXBJST07LD4kSlo1cGNANntMP0dATGhHc1MmMm1XYUpJaHk0MjcsVVZ8ZDUoP2Z6Ojo+YihMdlpsLGhPRCw/XmIkbWpzLz8mcT4lNSp5OHBGekc5''@;'; put 'put ''cXUleXs2biJuVDM+bXhUclh8WU55REF8REtLVkVoMU52UElDWHJad0xseDJySHk6eToxdVIxUHpfdUQzdWR6MmEvYUFOQFhMTjJidkQvSUEyKzFkJX1US3xWMzdvSit6P0wxRkBFeDhvYE1+MVIxIiooJkIuUHpBY1tfQUkuRl1VZTZ3RmgkVFFeW1l0VzdYW0A2IXBtNU5oNTsrfTE5ZzRfN3FC''@;'; put 'put ''bElXL2BWMkJIU1hVUk9nU3grSkpUa0NvL2NuQHFdXnlhU1dAWz96THg2ZXJBU0clalhwMmNkJlNBVDE1ayJgd01QXy5dRTJfYCtjdklOMWt0MUxZWCw5TllZfGcvVWlyKyJ1b2EsZylzfFpPWT1nQj9dM1JCVmIyazdqTU95bThSUnx9dip1TUFILktgdG9BVEsmcHYqUSFZL0QpdmhVaTJQbSty''@;'; put 'put ''XSshVWZTLz0kWiVeJSVlJEBCLig7IVJgbXo4Q2FOLG9CZWB2RVZXN00qalt4KnBGPEI/Y3lCRSN8NF5LckJSMEskdnMxUWNNZ3srREU5fExHUytCdjt9SnhodkgwUHxPTFFJSWQxQHh5b0czTEI9L2IrQV87M0NGSVpgTFE/QkxJTzwqKFIodjpQU3NAdm1KNEBgSTc3b31NIy9DU3FUP2ZgRjhN''@;'; put 'put ''PXlIcysmTVssYDddIldWJTtUckRmQ3JNVWhLQjxdTDg1eylvJS4oJjc1WGYpYG0yUHhDLE9eT14+QTBWem8vRyMwfFJtVlpGZiRzWyJhZHJaLjJfM21RME1TbjNSSUlfLCZneW18K1QrLGBjMG4rOiwyb2clOGo5RFp1RShhXmJ7dSIpSFJXPmtPI0dUOjMxLmFQMXRvIS8oTlMxOHVSWVlqJVc5''@;'; put 'put ''PkJfRF1SJTtvYyh5bTpTS2gjcE5OV0JkJGo1b19kc01kJkZdVXx8T3BxfFhfM15OeF18QCRUfDQ5LyR7RkRXdEddVUxkUzNxd3xuXXxQMF9fciRUUVtfLzZdVWBwNWRiTHUrTWQldVQuWnV5Ok9kNXVULiJEeGpacWU3MldzY0R7bzRvSH0yUE06VkJWZWRgTFhXJnw9PDEoS1hufEZaMVleX09u''@;'; put 'put ''bnRVOihmWko4NX1SajY+fl52X0tSNzF6SzcwJEhIbGZiYWlAXyN6QEk2OmUyPTdgJCFMaDtwX019L3VWKjJRLk0sZlsjfDQsOVlHJV99JTJkRG1vKlNoc2JRem0vcXldZkJ+W0UlPzUkIz5bdCp4L3soLjJld0FmL1deV2o5R1NudC89OyF7LFJ9M2smOG0pSWlEUlk1Y2Q9XzFLLi47S1lJTyhZ''@;'; put 'put ''STxwVlYmeyxsJkRbfF1dTj5RSWZfLkRNck45S2lqR2l8SkBrZ09SP0Vqd1NXc2ZhbDh9LEEiYl0lWlt4ViZCZVpsN2RSKHNNcyxzM15wW3Q6V2xqQlAxQXlsPkxANnE1aWJrTDZsJntNIiYvWWMrVU1oNDJ2fnQ9enVOVjRDXVtUbn5adzNfcz9vWjxYRHN4VHZ+XltYaF0+UFZ+JXg0SG5lU0sl''@;'; put 'put ''VCFEaiUpdyNCJVMxUkZPL3I7I1RWKko+bUJBNDcoM0tndUFAOlZfRTZ0NV9bMkVCKXR0X3Mlb0JHdTRxP2J8eGF8IlNQLHluI051cXBGaSlWZGdJV3UjTFhjUlc9eDVCV1ZjLlApO3xYRVgqblVHN001WWAmbXlQJGB3amQlTWJxQEljMD83dm1pbUl8I2U1WUxuP1I7YWlCMDNGRFljbms0eFVt''@;'; put 'put ''Lm01ezUuYDVlNHhTKjM2Y145bEhrM1ssSjkzbjMyYWczc1c6X0JnK0dTaWgrbU9PQ1dgIzx0QFcjVS80UE1PLy5HTW9fNWdTKlA8KzRDIWlDc0s9bFp8UCh0enI0T1gmajJodn1tTSIoKmU+b2RzZHYlVj58RzFqJnN0MF9OcTFbJkVLKWZVaiZCZy9hQ1Y4K0xfMTVDP19yKjw0ckBdeTpwQFk8''@;'; put 'put ''IjEuKmRXRXMkR3N9cXhtT11BcDR0TVFDV0FxJTJHc3VlVGpjYFE5azx+SV1KMUAmYm1vLH5lZlY9KklIbHxQRHd4fU4xQHlyVF8xWU18aVleUG9adk8uMUIuKyIrMWo0ZyNXIXt9XTJnZ0RrITssN19ZNylQMy9te209T0IwcXIoSU5pcnJSZzlZJilJMEkrXm49aXtHeFkpZ30ye2J5NkhyRkdk''@;'; put 'put ''cl9qbzdYcFhnNDlBe0JoeTk8OEcuQltzRSVlcStgJDg9UWs4ZVpYbntsOFQxLkZTMVYzPD1LazU1ZyV+V1NGLkI4emJqNXlhP3RaPnZmeTZ+Wkoja1I3a3htUmx6ImdhXkAvaSgzZVlnaHxtZ24+SmZqXnUhb2NOJmQjcjpRM0heWGJKWT1OXlBBUzErREBhRz8yOm9FMXJ5cnAqSjMpK3xKUSU9''@;'; put 'put ''NiwuT1BUST80M0NjRDckfGR1fCosKF5kOVB2WkNHbWR7alk6S3xSMzV1VF8meEpGO044LiwmPjtWPnpVMn1HVyZxV1UiPTptczJwb1QiRnEkV05AUmM9O1EkZF0vYGY7ZkZEKjgsbnhDZCxWYl1KU2hSVTgxeCRLcUJraX0zXml+fT5RZ3h9V21wZ2hTRmkubiU7WEU8Mj8sMGZYQWBjJlhfYyZf''@;'; put 'put ''dmRVJFJqJWJFIykvNiJ2TE9jRX1MWDxSRXIkbSY9WjBJeXNJZW13Pk4kVDpobE4vKzA4TnYhVkQselUuM3s3X3s3ZSVyQGZAJnJFfjo7b0dYM14lRi5TIlZrZ2RRP3oqTnAxajQzS205ZGRiQ0UsVGtWfDA6bj5fZG8mNDhRUlVlfjFfdC5vSFFzZl4weXthaWY3Zy86Kz9wX05OeWZQYWt2PHBU''@;'; put 'put ''RFE/MF9eQXF9JSI9L3RqJXFydiwwZl8wbyxhMWZ2N1puQEovVGVCIyNYPzF+LkZPYVtHY0VHcHRgXiY7b2M/XltiNWJSaHV3VT5QRWFLMUNJdSxDVkczUjB1YW8+XntSVytPd2I9fnc7NTxCOjBld34jPVMiPGQlWzY2ejdhci5gTTtDXTtTYFM5YkFpPGR9aTRvIjdAREcmZyM1eVFdYUdrdFR9''@;'; put 'put ''JTY9Q1svI2cjZzNkbnRaSTYkUnZ+Q2NAX01Ie0xBYFcxZFUhO0JxKlIqZ2wlRWV2XTAxd0JxS2pBZls5PTVXfEE6JV5EazxpNXdAZVtAT09AaXpRd0hIVHxlc2tKeSh2WGJxPlF8JGMsSm0mJVJ2eXZiXW9KQTJCLn4vY1JMb1RtMltSfCp1PlhZbCpXTFFZKUckb29odjo0ZkQmfFclKC4mSlkv''@;'; put 'put ''JkVpSkczPVZyTWU8S3FdUmAiaDhwQTNVXTtIV0p8Vl47fVRfUjR+NlYhaExxJkM5JEMoQFt+ISowZUtSYFYiUj5kUykvKVU5ND9zbXhmQ2ByOC9sLls9IV9WND0jNlBPbU4jc0UoY2JYbllLaW5JS0dpNEpfZnklVV5KY2RFa2BHV1J0Kjh3VXE5XzEqamE+fGFEPGwyUDxENERKOCxsQi5zNUU0''@;'; put 'put ''NUxwWztQMzo7PEBiW10yXXo3X2wufC9ZbWxYTyV+L3JtfnJ5JExRQCU0PnFnazY4ezNAOENjOSlyVXtDXi5+QkFqcFV0fkA/RzUyX2JOdGo5ZVh+I2ByWi5vZ21iIzY3a01gYU0lITgkdzYyZ1pGUTlgWU4oX2M6fEQvfGd8RjEsazoqYUxRMCFZRWJvbHNjTnFOOEpDR2Q4ZXouU29+fGtYbDpz''@;'; put 'put ''bCNmc05dPT0lOUQvP11mOF4jKlVzcTRbZ2RBQj05bj9JSlJoYW9MLDwzWn0hKFYrUyM0LGkuM01TNDhdI3orYGN6Nm9nYnteVitRISFbSWl5VE4jTWosbFclMFtWMWRrfntMOHAyW1JZZlkxekM3JCF5Vj49PjFSOUo/OTNaPnxFSl4sRyYxaiFsTz1OLH46Vmd+OjxwTHIqMTYqYihJZ0tYQnFH''@;'; put 'put ''Umt8NC4lMmdGLDltPHFtVjNtVEw4ITAqRzUuQ146NSZuazdxM29OYDNiRVhuPmIrcjQ4bWt5USExVGQ8WF5VUi9HRHc9andjX2omSH4ueHNUJXk8UiJlKlcxMFdUQHh1Yj1sSH4yWSFUNy56JHtnbkZaKVVAdyVQbUUiJDp0eUxfUndsNyZkS1szNz5xVGZJJiJfNSVaUEMzJG90NG51QX5aOUg9''@;'; put 'put ''Qjx+OzJVe0VdQzRMbGRdQ1VkVWREKTVFSWp9WUFrXlJ3bGt1WitbLG4+fUIiQmEqI3h2ZiJRS0dze3lyL3kmMStOWCszI0dlUXpxdi9KcU5KSG5OLGtaZCxaY2kla34lfVcpPXwlVDAkL3RUQDZINHZmUWpjNmBxcXU+R2pgbW1xVHVxV2dLemRifDN3cVVYZE9wLFQlcixkKSxbejgvZ2g+d2B0''@;'; put 'put ''Y3I0TGZBZllCQmV2aVtSWmBWak5sfkl5JX5bYDVyb3xhRyFgNDIlTVBGP1IxWWlLXX1ocFRdKWs4JEk9aWNAPGtJamh4bVIjKj14T3p1UnU8d3t4eFt3eyRybHIkYl5PeUw6Jk1LUVgkWD9dNHtnS19mNXNRXlB0eDZYOFN9Z2JwRHFfMm5MdGJJRyZ1I1RXU0IzQFcxLGs4bHhqQD9QSnQ8VnA+''@;'; put 'put ''W0VCeUUzNFVoN1k+YUs+eEFJSUd1SVYke2A4LkR1I3BffGM2YVFGTHp1JlQsMT1hVHB5MURnS18iXj4zZFRFV35mLCpWVDE8OXxDNHJvdix2OE9gK2NDaDExRGc4KyVAdjt1bzlnR0pqcGhKQGhpUV5xVk9kK2ZDWztiQzQpSDQiPj9pS3M3eVpgXzVENzI/fGM4MGV3SVpeTEgoaCFld21zfV1B''@;'; put 'put ''LzoxWkAwNS9GfV1mUTdIR3ooOS9RUVE3PzozP2N3MXxyRy42cDEmM0VddV5XbVg2NT58S01vMXEmIW1GMSsrMGhJITJfRlJRVjZRQVJISCxKNU9FRng+UDRXcn1dOjlLfGd7MCRwXWwyeC4mO2pteCs9KWZORnRXekMiTnM2aUJLP1U7QClXfEA0OCRqUCFuLzteaERRKG8kSjYkTzNsd0UzUUJP''@;'; put 'put ''QzdQfUNjSXUwLDcxa048UilgI1A2LCwjKnEhPk0rOUNYcTZxJHNEaCJjRiZiYlIxZz5sOlQlQVtWPy92V3YmRCEsMl1qJXZYZ05+fWhJQyRQXkIreSUvZTM2SXAxNzQhWl03SmsoajhTSlYkI3VkJVpKYTtkMC5IZztXYEVsTlNHVSYzfiZGLnokZys3RWh1RlU6ZVhdSXpjfjF+MmFnWF08TjY7''@;'; put 'put ''Rzx8cDBZOT12RjlAeXYxMTFhZWY+UHltXnNGQz1tNzpmYFZtVGJrWS9MOHlyTGQ4dXk+Q0A5cERTcnFkdF0rZERIc2QvWCtTeiIzajhIUjdYT1JTW1drfXEhMy84SyoyfEU0NVNwQGlfczN2OFBSO1kyPXBbYko6ZSpQe30wc3NAQ1hVJV9OeTprPyhtVkVzPkN4Pj9VUENWOUxUZUlpezsvX0RM''@;'; put 'put ''bnwrUTlfUl95KiImWlQsKl90KUchPFY7Py9DcXN7VXxrZjl7dnxtM3JVK1A5eypfVlc3V3U2XyJPY1NPJT1LbGdENSlyTUFfSD1KX1drVGV6YjopU2M2VC4+KSN0S3J9UWhbSEReMUMqLEFDIz1AO1VxX2VZM1lMeEV2ei5bJW45MiZPMTNBKGFxaFYsWVsjV1RZemAsIyhhR3woJHQ7PlYhWUM4''@;'; put 'put ''VVUhbjZ+Ry57ckc2JHFAbytVWTFrOmtsPl9NQHZ7KHw0MX1XNTpKW2JwcTxldkZCSEkmeTwuaCRjZFg6cUxRRkJhIn5VR1spMTl0XWd5NGx5cEBudCV8bDR4PkYjWSMuKjtjbVtWa1J9OTlYOUQ5cS45NSxnLGo+L2tOaCVeb2JTPzlicCh8dGRbakJNSVVLM1BzJEpeTlUjRTFeZVlod05qLEha''@;'; put 'put ''IjBXOWAjN0I6QFZ0I2RXPXZvaHZEZDZBbnRVMHFiOy49XjouRyk0dElXT2BgRTM1YXM9LjRKW1NnKDosdGlmcEhQL1U4I1RyNixRaDhlfT1dcClWKnB5cy44ZUFTM2ZIMz1oa0ZFcmdWMXhTPVNgPVdQV2VFYD5ufTNBMCNRNGhkY25mdCFARWl+K2lCLlo1NWkubGZ8LE5INH0lWH5YVCg9WSYy''@;'; put 'put ''P3wzTnBvJFAzcXJnaSVtOzAqeFIxOitteVgvXVRvI0x3TmZxYzdsRU5COmw4KiN2QTB1UjEvJXx8PUJ9ZkpmLmpeaDhAMy4jNyQpN3VSMXxwR0ByQk5mUVJ3cDUhTlV4NXcldzdUb3drOy5FbWp2RCFmYztwPV0iUjpDVy9eVjhCP25wRH5EdThCOF1JMWs0JHQlcUtxNCEvalkjQEM6X1huQFBY''@;'; put 'put ''K0d2SiVGOHo4YGw0R3I6b3hLVzlHR2FrM1laKVtuVj1OeExedC41SmpFYklgUEg8dStFbW9vdHEkSUVGQF1IeDIkUC9QNmVGdChLfCpCOEsuM3Q4LFByKmBGKnQ/diJDfm94LiJYbkBKKjhDXUw8IztdTkV+TFtXbkBKKl4qUUxpTFJ1TEhHUC9tWy57I31NYXZ4UyNzcD5IZDlUNUp5W2pMMy5W''@;'; put 'put ''cHB4dSlZdG92SjwvRmtDLkUxSmdpSF8sJnN1NHYvRlFdbFBrJlhfW00uYklodEFVKHhLZU0/RCJWez1yRiJWP1M2SWxDQU8zJD1CTEdpdFVVK3VXPVIsKmlaIWxfK0ZzYnk7UT5TZzU8c3QkO3JELnglTTdyfS5NM04pYXxtPlZYXUNNPztvYnwmLj8wOF1IRT9FIzYpREtRLEAmV359LjtgZiMi''@;'; put 'put ''YHx+dXhNPFFbIzlYQ2k9TE1pIjFHfWBnajhZOW85JWUie0NvPW8/PUI5azM8bHpzN20iPG4zUF8jVUt+SC81dyE7NCY6XnNbWzNiZ2QoIW9BaF1VOFtKZSs7TjQyLCZwMi4oXXYkN297PSF2OyRGUjIxe2IyImdVbHFdM2Z9KXErVy4qSU9CcHp2L0ZmNXhnTVFaKSQjQSNuMiZsQUo+bVRzSy9d''@;'; put 'put ''bWBvZTQ5OTlOXUQ0dV88RHJQIyZsTl0kRU9zZWU6X00yZVBscUpdSzNuLGc3VE13bDBueCRKOUdNTUdaZ3lve08uZ2RRVGtdNFssbUpdVmdZbmNaSDh4SV1sLHwuIj8iR2ZMUyllVnJWXURPd1VlP2loUSQzclJ2ekE0QFNnJn5HMVVMRmY4RFElXk0jTj9CKlB5LDl+dml0X0AySUIhMmFxP3FX''@;'; put 'put ''ZGIyYTY4X0AibSFOI3pBTURodjlbLlViK0M2LD00by9+Wzw1YE1ZMVZeUXApI1JKSCtuPjE3YFNxI0NyZXdlYEssVmdacFluZDZXSWJbK1hsWE5+byZOP1ZCYTRPd3F5JUpJfDM7USY/MHwlZy8mZFMyJU44Qz1sP3k0TSkuZ2c3d1RXUzlLfjR3VShtYHtJQiFJUWtbWDFNM3loNSZNU2A6KTFi''@;'; put 'put ''ZWxANDBHWk58NSZjYiMmRyZZbmVkdGttd2plXiMpIzM9bngmODZXQ2FvZmFVcj5DezA4ak5jUjBJbXd4VTBJW3YxKT1aVElxazRmXm1lZF5te1A6UUR5YSlbUmMxV1RBaEFTbCFpNnJTPjwzZWJKSTNyJUdhXylqRntnYXtCPSR8QiRrYFQ9ez1sdn5hfl40UGNWN0xxbm1rKSV0dEUmaD91OXw8''@;'; put 'put ''OyNuZHBvM1MyK2ZJNk5rRUo3ODg6a1Babz9dOl9PPFVCbnomeCt1cD5Ya2d4cEo1Si5AVTlGbiJZd0pyeEkyUVJZJUdPdDR3bUssOWcqU3kqfjtbbm1SPStbSTFdWWpRZWRfZ1V5TzZ6eV5mWXtdZkVxfDJ5MmFHSmNPPWFpdj9DWTt7ISJAOy9Yej96Mz1xcl9TSTVrOkUmV21rOH5JIm9BN2A6''@;'; put 'put ''Ljgse3xSPlhwWDoySlAoWlRfSTpNdjxDZ3xtSTBkIzxReGEobyErXjw5JCRxLz59cixFeH15UDZiT3J3W0dpSUUzbXcuSUhRTyJPZ2N3LkV2KlBzOFMmaiVGMXgjfkJWWEhEIyY1NTltM2VjNmp0eltQWkdgZkRrTTAwMFI9eSFMRzQ6Ll8mdlM/ciIyMUM5Z3F1X19vRDQ0UU1NOX5oNT9XKkx3''@;'; put 'put ''ams/L0p5SS9GMj5Ial5ffSxHdSp6cClBSSJpUyFeKzM9XTlvfkpENkp+ZkxCMlZXcFZ5WHNfeSYhPW9BTE0ra2BdT0BPeEMiYUdASytgZTYoLGVWLFBoa2EvTj5+cVo6SkFiMStyKmA8U1R8XjxnOW9YaV5xUV03Lj1HcCp+YT1wXzRENkBkQEQicjhuPyFxczwjdz0xIl0yamo1YmpwZkFRYG5H''@;'; put 'put ''eFFobGAuZUA/entyamdZIVpIezVGWzd2UW03cHdkbSVSOEZJcjVgaz5ReGwxdjR5NTs8Y0tnW1JjWkNWNnlndT1EXSRCfWUuOT89fm93NTteWEBLO3oyTCFgJSJeOGpqLzBQOHdPMUt4LEV4YTt7T1FWNyR6Q09TdzhxaW8+NFc3K0BJZStjVn1OZCNzKSpOcG15Pk1uSVMjOm9PUFp9QmA1MS9k''@;'; put 'put ''MEc2Tlpgd2BEMzw/VU8uWmhbaF0saVJpRnRSVWZ3LDZTXjQuOF4vRllwP2IrXktqU2FwXmhVbVM5Zz17LmRoSlE5WnQ6c1UoZmEyPiEqXihFUmd5SUI9aTIpXSxvRzJGKH1nZFQ9UEdvVFc6QjpAdGdNMHhteitzLilrNUcqMz8vWFV7OFJkek4+MVoiRUdeKCNLP0BgR0owPTNfTlZHc3tNYVs2''@;'; put 'put ''JDZ2Sj87KTt9JGtaKkRrfF9CWjRDN3xMcDhAODFUfmZ0TDdeS2w9cysxNW4jaDglSTZQOSEzaEZQNnR2YCVMKX1qJnwlc1t6O3kqKlZnUiRpJEd2c0FXQHx1NnVgTE5wRmtdU1FRYDR+az4kJTtULjMvJmpGPCpoNnZ1P3QpYEB7OVAuIUBDcXV4dExrJV1acGQxR0hvW0kubDFvbDgxckFDLkla''@;'; put 'put ''Ny98L2ZtWTk+Ll0vPy9LMihKdiNnY0ZPOVM1S15zfnNsTEVAL1Q8SldoejpvX3djVXRaNj8kZTgxdm5gUXJaczNQcEB6THF1QnxiZX5sWlt+IiNCfF5+IiNCPTN5fmNAUEJbKW9QQSprXXdaZW5fa3V4TTBbUkJHbTooPUVZRyt8UUladyYjQGZ7RFdtdEI4JCFdNzkvd08mLkVlOiRSIz1dUkxX''@;'; put 'put ''Pzo3bFs0aHpfPipGVCssRF8pKTVqNyVMTXJdLmdYOll1V0BNWE9gMDQsM2UjNDN1UlJVLmdnVXRoZ1VTaWdVbW1vQV95ckFDSUd0eipWQTp4WUdSaFolSj1eOjdULlMmS2R2ezBjXSVvPC5JeSQ/ZDg9M3hvJDpUJDF0JT9jZWJqU0ptVS5DQCk8ci9WO0QqWzk/Zlo/QCJKQ3NhWUdPN01OSiou''@;'; put 'put ''UDBfMy80cDVzdCNCXWU2Uzx2Lzd+IiNCM2xhOS5hNU1rSm4qXlhOe2c2dXdSR3d6U2JDTS4pNmp2P0xoaE07YG1uLEpsMnQ+RVloQkU4VT4+djBPSmo3Qmg5WiI7Jn1YJG9oMEc4X1Z+S0ZTM2FmVikiQTRCO21eWURkJGNgNS5tNztiTTBHaEpyRStNNkBAfiZsZSh2Pl9jWyxRQmMlaDlbfTQp''@;'; put 'put ''UihnWHhQb1NacyFWaWp+QV8/VmtJezxgXihuTDxCOFUmPmdCOFMuXzBINlReQnwpYHtsc1skX0Y4RlIoQl0zNT8/SXBXO3pEXk8jPj8hO2RyXiFHNnJ8ZlJwRD8kaD84Ly8/a1BBPHYpJjRbdzRYfSg+cXpmYF5oci88NXFSL0tuWU5VclZDbG1scn1Gd11JOkowPzYqTzI4fkQia0ZRYG1WJjxy''@;'; put 'put ''Z3NmUiw4P2lOUlFfK1ZweTR8Ki9ye3lycStEZF8mS3xtJll1eUUsVWNpJD1xci9DcW1FdVJzQUNLRGh1Wm1XMk5dNj51W1J4bTtkNW94WGYwOypecVk7OWtHTVshIltpeVNKWVN3YXd7OEVNRTNFTUpZUXttWXluZ2MzLy9RSjV0LCs0alh8JmpKfWFhO3tkI1FEZkNKRV1UZkh9W3RReXUvTUFB''@;'; put 'put ''QTJPS0EkQStCfEUpTVBmfV9vQH11XksqQnRKNWwrTU5zP25ATWJFV1glKiRJMlgkWWJMQUEyV3M8MiJzWngoM1BpUThEI1tjQjJjW1ZbMj90YFhfelhdVixjeCV6JnxESytwa0srcTtdNl5aeFF2YClkQyQ3ZyZAVW0lRm9FZDJbZkYvOl9RTyFbUnFgVXUsNHNQIkQlUDg2UGpsIzY8eFZrfDJ6''@;'; put 'put ''b1EvJkU1aHd1NUNAd1FdYipwNUhLPHlPbnIvKytDenBJZzZ6M1d9OXlZZ1I+WilqMVVybmEmRXxkUkNTcTEzZkZbc3FLIktxZkhMQFJ0RE18a11odCN5aztlKWYmQkNbSklOeypfRHNYaj9ZQT5dbSUzPixBR3JWMnMrZ2M6N09OSz0mdChIV2FrdS41KjwxcG5GJTRMclZZYmxPSCVzXTArQVBl''@;'; put 'put ''XSFYe0VRfmZkI3RrOHl1eX1ZcmxWXS9xUTdtan4vJjdqciVhYygvZ2wqSUVuNjVgVHVuSkc7QEdWNClOeUYxeyMpbUtuNmZOXkp+YGN7MChgP0xMcG5ZKVBUVXQzZDNoQy9JOjlOTio5YS89L3I2MXkubm1WL0BlKz05UEB2S3U5Qm9tSTtrIyklRjhUb0N6Qj1rTkZnSXFmW0w/UjY1KyY8X1hd''@;'; put 'put ''PERGYG55Ny5wMyROVS9GSlR1MWJyZ05DKVZlZWA9PVVlPGgxNCpYbikkWzBjXXs8dldCfDxpN3dLdiMmXlk1KkQ8QXRbMHBqRDJTU3VpbX0zbHw/aSVCemEmPE4hJUFKZEZMc2VxSDMmRj5UVTArOns8TmdrImlJTnN+ZVs8NW08bSZ+YlBRdWhsIl0sRn0jRyVzdElaL3V7NmtWaVJgTCRkX09i''@;'; put 'put ''PWZaazFqL2pSWG5JbC91Z0x1c1RNVkc4cyxuOjtCMmAsfSxLdDZpeEQ2dURUZTozUSh8RTg9VXZNNitKZCkuSX1pTC50bitYS2h6a2JwRE4xJFBOfTJYaGEpZjB+U0J3c3pSZVZEOzR4PWBaJW1rWTJHZE1aIilbWX05Vm1waWlUWiphSFZKXz42M31hOzUoYDA9QioxbEE6X04qZCg8WkJkMF4j''@;'; put 'put ''L3dPLiZDSnpPUW02LF5eOWtGXio/LyFjPXtzXmojYWZwYztqPmVXS0NZczl4eTpjT1ZaWD57QltKU0RCX15YaVdoYVlfcV5GPGBFZmN1fXAvYFdCcCkoNWAxKypQTzJneWU5e0J3LzEvMDN6Y0hWW3NWTHo8V1QqalV9Mnw5Y3c5blI7QGs+QFdoW1JBISg3dC5ubj9TPVhDKSI8I1diQyhwbWs1''@;'; put 'put ''I2I0OTx1bkw1KkFYUEhmfF0uJHpQQDVaLDdHWng7PFtbPGxNZW14XntjMmowTT9oOXZEMnJpYE5dYUA/S3NEPk9hcXRpTnp2NS9BK2pbIlg3Kjg2X2JmSmt9ckgkZCosJSZidiowVH5iNEouZiNwYissOmdiayYrbGNfM2tIPTRJQ1dSWUx0OSUhfTovdj50anUsMnlzTnFbfXV5PHt+NCVyUVdi''@;'; put 'put ''cU9qLEdHJVE7V3M1KTR+eGxoUHR1cDtHQkp7YStTeExhZysrbGFWP0xjNyNgRUZMT0pjNCssI11JOXwoeXdzPn4xW1pJOipFTFV9Yyo7R1Q/NWQpPDNlbHl7UFVVVzIzWDdMZURAUmk8Mlk5W2tiPkZsRXpBKCtSSWJ3OmZMInUyaGw9NHJbS29hclVhfi4mRUI/YyNBMlZmV0N3WE15YGVGQk9P''@;'; put 'put ''XiMqK3RdKkdyLyhuZS5AW3B+MDtePmVvZ2FlS3YiPmAmWGskWGcze0ZPNisjZU5oc0k9fFNKJFUyI3MzMmEzS2pQNEZiOyRvbW1qMTN+X3V3aGdXRi5KVkhuVUBHamdaU107bV59Q1A5YE1sPSRtakhnd3ohLjZeIk16cTN6bnVSQjtBRmRBPWViWjx2O000b2FbcTJBIU4zckYpNlNmZWMmP1h9''@;'; put 'put ''R1EzWSZwWk10V1d6Y3haJTcsUT9rQ0R5WCMxdmgxZW9pclFeIjUvQCJSRUM0Vk92TnA1VixgQUlxeVlDSjxQK2ttZGAzMTcmOFFGajVkJEZmVSNRfnV0eFEsLytkaVlCM3N0M3VMezp5T0g7YSFiVlE8akxqe2BCfmslbj0jIVlZQlBsY2JRVVU4XkhpVD00flJGWThrdVQrNXFOdlglQTRLQFtn''@;'; put 'put ''Rkk3RHorTy5vPTRWL2daMiExJU8+flE0JT0ueXcpX2dZPjZHKDQzOnJAZEJJZFQ9dV1EMn4kX01OS0F5JVl0O3MpW2NvSnAjOHg+MkdWM0phNTpDUVR+YUxzcWtURSZfaUIxPVU9VnJ2XiJ1NiJdbiE0IUpaYXtXfVAsU3ZOP1dfLCNAPTNqakA9ODF8Nms2ekcyPVpDYSFtQn15RlVqTldzSzA9''@;'; put 'put ''PTluKyRhUl0wTyQ+UUB6P3M2YWBVSSVvezMme0lKc1c5dkY1TiRzLnthYGZXJmo9Vzs/VTBuQGpmajtaL2VdMyVhSHVqMFlDQGR6TCxNKCkxOiYxOH5NLFM/R1ZuJC8lZyxJNUNIQS5UWHI+a0EqWX1WW1RvOnFiKUsuISomT19IMjx7RnIxLk9tez0iUDIzJChkVCxCZ3FVdm58XWUsel9MJTgz''@;'; put 'put ''Kik8dls9MWo1Jkxpa1JqVV9wJWhuXmxoQTBQI2lqe1J9Nl8zMmlKUXIwP1dzKTtJU187WllWZzE+eER5KF1dP0t2ey5mZj08MnB9Ml9tLl5gc2MzMk46Wmw+T3YsRGp9e2xCKnFOPT5sUXhQYTUxRmo2dlMqUHd6N2FUPGRnaVdXY0smLyl7cTQhMGpUTy9eKE4maCI0KVBKJlZkdWZhWTgsKGdF''@;'; put 'put ''MXkvNXElcHFwVH1FMFhaJDZfRT9Kbl5HPFk1YVo/Q2gjWztaSF1BbztLKmthakNHVCIrYi5ISCNfM3V7aFNbfUd9UDpsNWQwXT5oWX4wOms1Z2wrISJeQnExQCY7YXtjSy46b1FdaSpYP31fbHZ2fE1Wa2VIQlVLVnJWcUU5bHlLZWRUSiolbiZiVnxSI3o6dUR8UkJZP0lpdEwqMVQ+fDxTRXp7''@;'; put 'put ''MV08NkhvI3tRT3phNkVpM05EZHYydlFaP0Y4KG0zfCxHP2RGVU0yVkdiNHVERWAxPX5CcV1kVTljeTMyWktbPUVrbX18aWQ+TnEvejdXRzIyeFJ9KmFHb1VrcWV9PDIhZTZFYVJrTTNxd0d0MUNlOipscl5DO0NxbFcuakxkI1FnMzgxSk9nRjg0XW02PDNyNWdoQXwyOHdmV0oyPSJGZjo/W3px''@;'; put 'put ''IS5zUj1AaHFFLmxYQSUhXzRpYzAxIzQoWUhKfWx0NSM4YSMke2w7Rnx9LiUrRjs7Zz0iMjtae2xUOD1RY1AqL3YhcTQzNDpUXittQk9EVTlNPzI7LlhsLjhzL3QzKSxqMGJdSzRqZ281On58OXl3cDVpOj1mUFs0O0VJciI8X3YpTSxscT1ta0FvbCxybCRYPDQhSXh2UGc5NyZtLkRLVng4LGBu''@;'; put 'put ''bTJTfWJGUnxrTjUiKDY3M3FWamJMZU11V1tXe2hxSWYlRSh8TDVyJWlJMllTWmFeUGAjKCRzbnkrYXslKjZvI2VjP0c5bGZSMTF5RUxvYkoxOG1NcCxYX0lXbWFDN35Wd3VpYjdvdn10PD1HJk86djJwUCg9ejVSU3swYCEwc2tdPD1mYnMxeX5wKCNGNFJ3SXMjKT5lK19ZRz9Zb3RSVWMxXSNk''@;'; put 'put ''eSNle1ZubFo8O1V6cW92fDdYUVlvd1tEIkdfPG0sT1lJTyxvQ0lPQz5RdmJdSjJVbVAhOUpvLkAoe1NlQWtFNWhGXm5fQzpBTVc4cExYJGh3W3IhOG1QO3luKE9jTll1Nz0xVCpDSnEmW0hlKFpBU3N5Mio6TjAxQypuVz5tbnNWeFgkKX55aF5lNCREbSs2MnxRc3l7Oj9WWE9QVn5uPCspNGty''@;'; put 'put ''PnZUJl5BVlQ1cWovNSh5e2VrUEBiTkdyRkE6ZG1+Pk1zPTApYVNrQzk5WXkhN2wvLnI4SVNbRHk4SURJPDtvWDx7aCJ3UXx7KiwrKVAqfFNwelVYVlMqMTZdJSYhNihbcl52d2pLWyU2R3xMfDRRTCpyT3ZGVCkpdGR1TWsiJE9xRExFSkdIUHQrbXc3OU4jQmJga0slcnsuOXNxKUBeQH1fZ1RA''@;'; put 'put ''VWJuIW1UVGVhPFRkT1twUkEmZDd4U1FgLlMsd0YvbE59TFByZSMiXUpyOmhLdSFhXUJvdXFwbHtpJFVrXjFOYSVybWRbdHxTXzZ0Y1pLcypBYzhdMTRGPF93QS5mQTlnbjBybzdxJnopbXUsTCkucGsoe0hLXjJsZllGNnJPKXV1dE5mKUAqKWd+flF6UlBBVEhpRkp1R0xNfWx7QXJeeEg8cG9H''@;'; put 'put ''aTJVZ3dsfGRZbTVRW2p5YislbHw+aj9TLl4/cl9IXi59LldjI2ZWLl5pUHhQe11WdUJnQ0sjQj4lS2xDeTl5WENSUV9BY3gkVjVYby4ycEBmY3xKdEoxLGE6Z1Z2JTNCUW9qQkEzK2E2SG9lUlcyQD9KZWBwVzR4bjZJT0cueEp1YHJAN2lhJUZYQl8hWT5UbzthS3BSJFgmXUd+OSEzfjpNSlc3''@;'; put 'put ''RTphRzshR3IvWWdbRHJ2flg6dFZyMD1BJFBBIXJfNl09UVFUXzw0QzwzPGF8VS9rcm4+K2R4fkN9JS8xaXJQJSt2RUBkTFF6Z1Q3eG4lX0BxbjRedWRHe2VVTUU1d2svZVV0KiJfOk9vOUlmWElIYFg1X0k6eDJaO0ZMT1gqYl1Fd099TzlbYmtHYlM1Vi5rQ242STNRWW5oaFtBbzFWTytOa3J1''@;'; put 'put ''b045PSZRWnI4QCZYPEpFeSQrMjRMLCQ1Nlk/PnUid3t1KD9qdl09TWo9ZmY6MjZeY3tOWThpOy8oL3RwcitYI3BTSz9SNVBJdDpDcEl5eCsyUG0vYnlJLHtQTERMbHZ1bk0/UCFvbGYrLyZFe3FVcntLRTdublhyZmUoLEBFYlssWyY1e3xzPHcjJUtrR0xBLHMhYlY7LkREKTZgMzRfXjZLIyRj''@;'; put 'put ''c3xISyIoND1nSHBRUU0rR0lJW2JNZSloYFJnRWRMfl4xKWNOakdaSEh0VlBiMD5nRz4oMjEwdmhLdUR6Pn1JdHdCIytaNyUrOFtOfHw7PHowYTBZKiozbmxpPCxTUlNxJmBuY0heWll+STpSb3tRK05QZEB+LyZeKlRmenFPLHE7Wkw8R3ZhPkpmNzgvZjlXO0JYK2szYGMxP0BVbzp8ez05W00o''@;'; put 'put ''dntDdEA7LCY/XT9geil5cl1uUFVwPkdCb3xARHchMkFhYVBFdjZdU1l7cUx3JjAuI3JyXzpOR09zP3ZGfjN6b1VoUG0qdz9CSFkpUDZ8cy9DWT84fExEPT9KOWl7SnUjUl0ra2BqeVdJKDopJUNwayMlP09fSGQ4YVQ/aDIoai9+bVNUSDppKjYsYmk3R0lFMi9ON2N6XU0mZ1shd1ttJDEsYS4m''@;'; put 'put ''RyZ7TzcwL2RDMVBpTjZdOTh4UEAxenBgMHxSY3RONWVxIXwzOSJ1LHt4WjFCQSY1QEF2eFdsPCElQysoeG1tTmdYRDo7aCRPRWdeY0V3d2ZTKmI1SGBlKjBYIihJc35EQUIheEQ7TkcofU5NayZwLkglO2xPQFtNNXQrbFlHdndpRXRzcEkjeVNAbEBQaiNoRGFxNDE3Omo/ZDZkVTNUeGFNSDsv''@;'; put 'put ''OXlxT35oOzpFVDoxR0hZVUU0ajtYemdaP1F9VHdkVjdnblBmISlLKCNUdWVmeGY3SEEoO0Y3UDEwOzp4M3A0L2s/VEZmPnBFa01RWFpyVTlrKC5GKE5mV0lOZk8lZSNfT25ocVB0aEt0QiNBZltMXSlYaTBWLkB3ZX4lO0JnVjNaalZ5dlQmMyUlLCtQbnVSK2FaQjI9TTtifGpIVnUzfGR1OUQ/''@;'; put 'put ''RnFVXWYhVCpoIW88OTBbWkchck9SQVU9fkZSX3A7PktPaDNnZC9tK2cveSsrfVcvc1R9KHhVTGNTPWgjIWwiIm49dnFlb2lqXzx8PmU6UnRGL2tJcjkkTUZJUUYmPSRzOz90JFteXzJDaCRLT0puWXBVIXFfeWNhYGNhdG0veyErajNuLHIwPSpsUylWUEMqQlUiVFd9UkNbQCxvMkk3WU1be14p''@;'; put 'put ''bU1YbEozQTUwd2dCX0c1KSQ0VnFddXVQXjtkcz44O3VVLGw2bDFoV0IjaGswMm16fUlyVVdyW3B3cGIrc2ouWDFFX1g6ckFrbVdQKVgpP1RHajFEeko9XXsrZkBzOmNMW2xOUCVeYSRaKEJhSSQkSiMlRCxjMi8mUlFneCVdcCxXQlZ1OlV0aVpDYGBMej1Samx7fjsrVzNabXFVNlMkMGY3ciVP''@;'; put 'put ''P3xxcCw8WSsiOSltIWBLMWIzYWQ3aFt1cENXPSskZz1AWSk7MCF6O1UoP2xAdGtfVHJtclNdW21aNCZYfTYjbyNzRjl6Wk05Tk9FRypdM21XWW5VUVRGR09YYkAxO3UkPWFIfCZ7fV4qU2lyfVU2MSxnOmd9MUNCNiVRRUBXMzx1aFl8JSI0JjlJeVEsLk9zfHwwJDJ+VnRzezsqWzRNXWJ0Xnhn''@;'; put 'put ''bHkySkxXXiVVREpIOFVWRWpCNn5ieldkdil4Rzh7ViVjZiwiKkwyeSFNVTh6Y2FNX1RRKXJNd1hUXT1UZEZiQFFydU5lWjVjWyg7bEd9JiZkaF5ueklDS28+SSN8YjZRLkcsRm56ZHJyV1pXRmNvWUlCfUB2alpBVEwzX0kjdlF1TTMucVZdWF4rdTIpalZ6LDtHbVRPP3l6JlU8UEU/QDZ0OVFx''@;'; put 'put ''O1RINVZpKDBrR3UuTGkkVzpCfXIxPDpGTEQiVyRVOSVoT2szSjpwU2R2TWtBVCZ5MFlxYWgyan57TTVUOUtVQmtCTCg7NHMqMDZTfnopIjRCdUhZQUl7cko0WGZ1UlU0Okk8Vz15fCNeJns9a0xYVGkoeWFBPiJifmwpUn1KZ3Z0RHp+WGV2cUshPDBsZE0hVnIoIzgsNSwweHxeK0VvPHckJl5M''@;'; put 'put ''RS8uaU1IQCFrfmJ+X19CaHs9dHpjemJZPHx7LkB2QC5rUVpJYTEvbk9gQ0xSOFZkOVgkPFdQLEg0OSkrenosdjA6MS80OXBbJmdPWERvZTNZLD0xb0Z0aXE8TFNhOjUuUXY/LzQ5PDlKLkR3SlNyalVsUHImLEhzc3VzZkp7U0dIJFVgWCNZQXorMnMsP1RDYDpoYyNnR2tiZTFDLmcuSl8jNnk3''@;'; put 'put ''PlE7OWpFZCF0P3Y7dld7KkVqbnZFIU8rT20mcEBUPE03Imtpen5xejF4d2l6WG9BLkVLZ3JgcjhXOiJAZm83QCpWVDQ+VVZJPUcvc2BhVFkuRSF1Kz8qVHtBUlFHZHpJWWJ+X34lZFEmTjFERj8oWiQ0fCk1enUzaHFTMnJneks9dDE/cHpSfXxDJD5lRT00MS5bekx6PUdffX14XkhuTXA0aE0j''@;'; put 'put ''dTppMl5Nd2VBVWtfeSpKNiNWTmFqayNbTjJrZ3ordCtacHVmVyVLb0p0PzZ2Qkg5WGtLMSN3SntYZk95JnQ4Ji9LI1dXZXtsVUByV2Zbbm1Gc1V0Rk55S181Pj1QY3kqbm98ST8wXTgqP11QVm0jWzYvekppUn0mTXR0emV1OS81PEVnenpSSlk8P2A6eDpdMEJvV1p2K0FHbj4+MDgzIV9GKjI5''@;'; put 'put ''VitLRCg/M1VTIzJ4WXVlSy9OX3xpK15pcmF8TU4jPz1IeGRLUXRBVHZgOWR2c2A+R04mRlZNK35ZSzgzel5YaUIibWl1JnFtNiVHPFZUWExFMWxdNykvJE0sWXlfOm8ja1liKSpHeXJJYTl3SFk6Z3I1NEwsez08KSY0NDFHYVBdSFNJZVpiPk9jL0ZVITtYQiQiPGhiXmd4NSl2T3dicCNXTi9h''@;'; put 'put ''NURXdyNbVnF6VUFKWEApQ3d0PFFJMmA0bDdwSyZFVmU3aEdoNjUyMVJqI3VocUVufkYuZGFgLnNrRTspXXZPUy5WKG1UYiE1TGcxZiJYRmRuMF9mR109PGBgIzksUF9VWGJOV1RGMSJTMGFrWm9ZWlU+N1BgKHBQU0V3X1ErPjF4L2RVSH1sVHolKlJ6LkJnaShbIztKPkdVQnFrakAvfTVCR0Is''@;'; put 'put ''Sz17Y1laLjNZQDp1ak5tTjIuL0IhbWcyaE8+SlFiPl9lWn4kSzdgWDx8Z1c5Izx+a2p6c3U+STouRylGaFhkZzxCL2tJP29pS1tlc1gjT1VLIk58bHZjWV5uSWIuKVJyRXJoeHYuYnA7WV5jWXpFMn5fOVZLSUQ9SXpPW1FrPWwwPjtSMjxjaV8vMTNeYTZfUXdJO0RJTihJbTR7cmVMX2RLdnhb''@;'; put 'put ''dHt9RiQ3Z0k4L1ROcDt4YzFzQis6JXZKW0IwPjosdkRnZ1hDZW8yZ35QQjVFMWQqPmFZVERTL3dgRH50MXpdUF9nciRFPUlAOG1aIW5zOWshPndxW3YlXnYyQyh8U35mWE5fZylNUHlAcmRTe2FQNWEqNHV7P1AvQjA6dGJYeXcpZU1nO2RpOExUJUc6MUVQWSshc1JeJUdRU2Y5aVorZHhAe1l1''@;'; put 'put ''LDVxIT4kcTN7XkdqRC4qW3Umb2NiV0s+OkNLTndzcntOVThgMkJNZGo3e2w2OSwzInppKllYUHpUMjtxTmhgYzxtOXk0Ryk4RTUyWkBiKGFwMWwjWX0uOmtMQUFKXlZHZCNmcjtwP0o6NUBQK3QpZlBOU0A/TnspNih+MSZhaW8yOGxLPWluXzVqW3YkWktvU1E2PDVJPD5hUlNbck1PJSNCIWs0''@;'; put 'put ''Xl5Sc2tfPTY+Zyk7dCJoOV9yUXBGfHleOWA+WGM3ciswcj1lNj1PeEpWSXpERWl5K2RQPlt5eEpCZCpQY31GYm45VGV7M0pDUiEjTDJGNz4lXjwufVZDdTBxR3UyZHsyZW8iMTJxfVR1KUQ9UERDNllMdXx9YExSJDlNZzB6WUdOTyZrJlJTT3osaXY6cXVnRGUrKTJEflVyYnxyKzBMJlssSGxJ''@;'; put 'put ''XW8pOkI/YzthU0t9RzFSL2g1MWV5V3ZIemtAZj8/eCtnMlk5KCEyZj95YFpTP3U9UVtdayR1b3RBLmtVLEpXZE87Tz82WCVlK2MyKXJGXnZtR351IVFqMkJLWz5LfU1LIjhlZ1FXdy5Rc2U+K3NobTUken0lPDFlMVt1WFJ0RmBbWHZ1b1UoWVpdeDQ/VH0+WXM2bEJHQmFiYn1wNzQoYmBJNUAs''@;'; put 'put ''Tlp+R1RybCEuTFRjKGQwZSZ5UzAocmtmcjI+QG9gQCE8I0k9LENEVG9ITWdYVVlqPCNzT1l6bngjWV97ZCY5SFUiej9RckNEe0ZSRSN3Omcpenh7IiIqaEcyYU10a2t2dnJ6NFVKTjVYLFRvfUV5Y3k0QDxnYTxHM09YODVeKztoJWJxO2V0Wzk4Z3Y4bWlTYC9yQVs3Ilh0ZG9WPF8re31yejdE''@;'; put 'put ''TEtHYWBFJSVEMnh0fjBNOU5PPkI4VERhfClTZFlkJXxfYSRyMEVXbXhYUERgdDsySFloPGF0JEw3LFZPLndxOVNLRCF5T2x+cmFfJiF2a25WMCF2JiFDKlIqaFM3TFg1Z0YsaW8xVXt2ezpMeHdycHtjcSVge143LlgpQFVHdyZ7NkJ5VEdgYF17dC9QKH4qcEJ4aUNjTCxTWns4JHpdRD5QbVZ8''@;'; put 'put ''djooYFI2WCVrPmZnSyVUT1VFZDg2fDhJMFB2U0soVDcvOktnalg4dEx1KkBaOChwLyh8VmxXK1p8TVpafUR4VmJjQDNYQH4ydFFDJnQ3aUtvR0t9NntZMWx8K0UwYz0sIU03VUVffWc6aD4rYzFdajYoI1tOQls7YGtpfUpgMWMwTmZrSDUqYDw4On1HP01GXkhGODhCPWM+Ik5Ufl92UyFieVpM''@;'; put 'put ''Imk8QnhkeFB5L2RYT0ooVzA7YXRWT0AxW0QkL1A3dmRYcEdiKkI6OjxFNHJVSSM3ZCJuPCxDNUp5ailVKE4iSl4pLmVeZGBNYWZrTm1raXw7PF88PE4/eyxlU11GZitkUCNuP0loLnpAXTBFNUhQOSt9eTZde0VSdEtFWkliRDRtQ3xKek5DW25rNUlzbyFnJHZWejkuLDRNO0lhZ31IPzp8MDhB''@;'; put 'put ''QnpBdzY0bVlISigqJVI5eDMiRHluLGxdcX51WENTLyRMNmJZW3s5TWNIeUdfZ0p9JUBda2Ere1VzYjkkZ0B1JUNXWDp6I3lkPH48RFQuZyZLU1Q+LnFAWjJXQUQufjQvUFs9d3E5Oj8+IXdNIyMmUXEhZGUlMV8lKzJrZH51dmkpY31sfkhnanU3KjB1S3dGKExQT1NoVHpFLkleKUlnT3lSckdM''@;'; put 'put ''IXBBaVt6cipqX1VGLiswUlkxTlIpZys2WnU1aCw7SWsiKjZtV2JPOT8yQDtAfTJMTmUqUSRbe2ZGS2ZjbF9BOX1gOCwxaiFqbzd1eVNPRCtpMEFYdDJxTEkzYWx5c0RpUUROdFszOjdLcntnfiwmXk1oV0dXSSJLNytpTSVmbl8/fkdHJkxmdjNDJT59PFkwPGVqdE5dYU1qNEN2bms7eWp9UyRe''@;'; put 'put ''e2hZKzZDb0BlZWEpSEdmZiQhfX18cCp3VypicEpmTF09WXk/UmYjenskW3pVVFt2T2E+WT88fkxDU1M7NzNtODRqUUtHRVYyVz1TdlNUfncvcUl8TDxgK291TUNWWzhXZ1lFZUgsUyQmeTZ5SzVlbSYlV217ISRXTy4mKHZVVGA4Oj5wT0tYfjZPLj06QTk1XWw6T05tRlciX2B8fHZab3hsP2pI''@;'; put 'put ''YXpAcSV0N1hNT1dUMlMxVX1afClrWDlHKm9xW0NbU2RbYmlwcDN5JjVeXkhTPmYxbTg4MGZgdVUkbzRHO349dm13VyJwdytyJlkvZ0wvL2p7JXs5Q3RzWSo3dXl2eUElI1ZdeGh0N3RJflA5VVosbW89OCFZeGNmbEM0YyJOKjozQ3dRVj02d1ZaOmp1NkU4bTZLeUhuMjVwVVtOe15eb2dFOmNz''@;'; put 'put ''IzltcTs4bUZKSlhUYislMndhZ2Y4PllsLjBEU3MxPGp1WHpbaC9oSiwyNGJyVEApYlVCO05nWlNvZUZgbi9TSHFpYHVyQE55SjFiQUwuX1RiK290PEJ2QT8wQ0U7VzBON0JFMlFweFY1Vl14I0tKdWspUFc7USV5cTZqQiJrUFhIbmM7OWE5YVp6M1ExMzslP354USR+UU1qXTRoY1JRc0lSMVsj''@;'; put 'put ''PldWXWVqUXVZIT89bk45Vi9jUS5wOXM6QnRWQDslbHp2R0MyUGB8ZWdSXl1fK2ZfLG1SREZqTVFEbTRycTJPOm0vZFFJbWpkb0BTdTA6fGNwMTEmQChfcT4pTU1CKntNfUsqL212MGdEZFNhfFBQaEVXeypXayZhKGM3LHc1bTZXT1I/YT9vLG8ycmJNNytjd3pPUlJ6SHByZU1gT2h9IUYlOz4p''@;'; put 'put ''P30kXUR9JENaU2g2OWxhU2FyUWUlcW1aVXpFREJBPFVga2U3MUhySHpYN2gkS1NHe2lNVndUI3NuNFpsKzI1ODo4L3xzUDlHbzZRclNvN05DWSxCOTolKzNRcDR3SV9JVzZjazBUZTRuPjg0RENJdlYoR0lPbWw4NDh3aihMY3kuXk9BQUxASH5GKlE5Pm9oUTEyWGhfQFJVRyx3O2FwRi9VazBt''@;'; put 'put ''b1N0WGlsWmdReSV0LyZMe1pVeWRCVWN4QTxJWiMrTEFJO0FgVnpHI0JWPmY5ZCs6S0lVOjZwczd9UClHMnQpTFBUQmEkLlVlcEQ5LE1CR1g9ZXF+OzNhYDsmfltxMDxjWkklOl56M1E1cDE1aXM9KCxVYCl7dmlFSG05NXlJcX1hWXV4XmM8MmBDS1t3fE1lR2ssPng3aXsofTJ2RVcqfCZOfEor''@;'; put 'put ''YGt8RHo9JEtLOGF+T0c6XmxZQitLdEc3Izk0a18xRXAjOShYaHFnc3dLPlJlNiFnfEovW09JLlFiMzhbbyYpd3deYUspN2MzVkY2ZC9RPDZyeCMhR1tHN2wsXjdNOEpYY3ZgeVR7bkdRNztdXSlpOT9XZS9DYmd8UylyTX1oNER2bTRjanV0WWxYVk8keDwvL0RBWWNAQnMyW1gpJGFha0s4dnB1''@;'; put 'put ''KzgvRTxhIXRPP296YWRYTUtsUH1tUVg3Im8lMzMycHhNYEl7O3J1dm5EMW4iZzx0KUU0SD5YV0ZWYDQrOSxaMEZVXTN1RFozX1ouIjI1XWo5a0BbWypqbmBBbHkoc2g4b3FjVSlGIW1pYTUjLmY1R2BaQWMkRUdpYHVITHNVWnc3SWIjOmBDZj5RU2RGOiZ4RmAmPyxAM0oxS2syIUA8JHNHdHI2''@;'; put 'put ''K08lXmo5W0hXQnJIZEpbT0kpK3lZcCVgdkZtTyh+eWBZUlExKFZndzAwV0smNnBZZkBtbHEiP2M0TzF1WD1xamhnSERXT1pdVWNISE1NXi9IOlIrZVkmJXtMUiJobEJhM2lIYzlOW1BAMnJXO29UIWFWXn1ydCo6JTt0KDBhNE4lak5BRVVDU01GQGUpRWIqbml5PlFWVkl6KzBdYSNiRkg4N2c7''@;'; put 'put ''Xn0+PzxzcDY+Y1RNb2khMWpYWXpNWkg1dFQ/QkkxWnJWNGIsMXJbOzE5KXNqOEkjSyg7eCM+YjMuY2p7IytGbWZJd3VCLGh1c1NtI18rKD9XYD9ROT1nLiVRQ1opd2AzREkxZlVDP0JSKVZ2WWl7ci4paHV+Sy43TGArJGRtNElySyxna15GUyROTld7XjtAX3VtWSF5KjZYSUU8YihFeCV3IUM1''@;'; put 'put ''Liw2Z0h3cnxyZEIoLiZSb2lySkVdSXs4T2s5PT5SeENaeDxkMU8jPjk+bSZ5SlskJFk6K2NEI0spcGlabSNEQnQ4bncxRk8zPzsyW1FwUEdjeV5ScXQ8O0NXSm1tY2hoSEdmMj0oMFsqI2UiLipXdnl8Rys3Zk9BMXJETHF3VEtTZnxuKXNITT48fFc8Oi5pOHgjbXh4dV5HJGY+ZEdlR01EVltV''@;'; put 'put ''S0hgYiFjZDlvcUIuTVNGT0UpLG9XaSMmPFp8YU9tUTAiflo8fDFwbyhacV4hVm9WZXNdPEcqS3tOTSFEMn1rfj1DNjlGfmI7b0B8UmYsaTx7fmdTeFdiaz5JZzBBcltfPHIqdm56QGh4JFM0Ny9zZDZGNlhhMnpkSmd0OXkzXj9JSGo1dGJgbWNvJTxCRGJRQ2BTbHE9MjlhZ3p7RSg8c1tgV0Io''@;'; put 'put ''R3VCYToxOmMufjpjNUc6RTt+S0F5a14/QUovZzdwalhgQlUyRHdDYVZ4QmQqbkc+KEZNcTwobSZgKjVLSzUiZ3MuLlFPKnJTVFZmKkA9Jkh3NjFuOkJ1YjJxdkYxZGlsMiJ+MW5YVU48VWIwPCp2MSUuWzsjYWQxfkcrW2Q9QHgwaCF5VW9lO2FIKmZqKldmSy8+fXNXRlJ+fnNpfj9NSltwUzF3''@;'; put 'put ''bCtSMDQ9TUJzK0ZIY0oxUUA9WkRBUH1wZ3ZKQlh1cV9FSCNBK1s4TkBFOkdJN3dKSj4sZEYlYiUzbkI1TFpFN2d4X3pIbXl6bUt8Z0RaOzBMWmRYOismP1RlIUlRJVg7UChQIVslbDdWbyFOIixLJHtEaDxqI2YkMXV8VG5PQ1N0PHljdipXLD9yX05fVW5PdkQhJWlYIiYyfFsyQHZQN2koOy81''@;'; put 'put ''c0lvajwhVzUocVcyNGkqXzBoSTlGbV9vS2pzQGVTUFFNOSJ+YWJeXyFsTCNMe0YqKShWaGRoYH1GTClISzZCayleYltRYWBqR3YzJVRpPmE3dyFHQ11ydH1lRnR9IVZ2SXk7ZlB4OTw+fEU+Om9MZ2U7Wih1X1Z+bSJEMk1JZW5iKlVjWU5QQEpYeXRGZDt8fV03SkE/ZF03e3RuQ3h6TzxnWF58''@;'; put 'put ''PCUrXUIpWCFMbi4pTlpvZXNacC5AZHczOzNZV0U+elF+I2VXX3dhflBPUTljdz03SkY3XytTP0I9QHh7JjRhalQydSUuO1pra3BTPTAkLFhucU09fl01TXZNL3s3O1lNYm1nK0BFJXFMdmQwJUA5RWh9Jn5WWUgweFB5dno/QlZ7RmpqZXhIamE/T0I6KjRLPkQiVUJbJTZEWylPYDxfUjtdb1Bd''@;'; put 'put ''TlskMGgpT2pGcjV5W2thSH5PeTQuWGcyS3klYm4wZm0pWnxZa3R1X1hfJnEqeiEoU2BMQXgjImxdZGJmblpdYXRJc3YzXjdsUVVoV148I0lvez43Il9pZT8sYmhTeihZLDRvYCF9WT5Xanl3VSZVOWovKTlWRl1ddy9sdCVsM05vMThlOmtkWWdbRSJ5RjklTE9GfWtnUHxbaVhKdCw9ciokVFou''@;'; put 'put ''bVBENmBSeEVdPU08fTAydjsvZVNnI0NBTzxAT3lMOnxTQG5zW3R3IV10YmlWbV1bbE8zcHI1PmIpTTY9dXxaJGZEMWs5c3IwWFpUI1RJYSR7X2hhQyJtNl5HamFPVG1kJTh4ZiFLOjNGfn54XnNrQ3NJU3pvOHpXaXRvbStNZ3xbN0B6Sl5XM1ghZFZZelRMe3FlW3lgZGg/Pyh+anpneUxROz0m''@;'; put 'put ''VyFhWyt0Wzp8U29odklvUjZGMEksNWlhYTFGbntNb29jSnpscX47PV1UPVJQQGQ5W3JRXyVdejRXTUchYWk1Y1BJTFBGWnBYbGZIXy8xflc7JFc1PT5gWk88Xmwmcm9DMjU0UWhmQ1QhdllLb3xEIi4oWnFCcmskTTZSfVhjWj5GKXhMN3h1fnwpaX1jPVA9dCVmO1NlYFlBSkhGQndYXVAlTVF3''@;'; put 'put ''ezxlXVFUKSxwRHwmazJXfitpK3piR2FCQyVZKnBsPUp1e2RPfiUsOnd0UVheIUVVJTdDOWlMVmclcl05SCgreCFTbD1SelhEN2A/dlJ+eVJzMHo+cnxeajlKXndbXWdmNjh7Pn4hIUw/eDZXMCU2c2lLanhvVWsyN2xed0leMVV0O2EzPGcvKi98e1kwWUEienBWPTYiWTgwd3Y7Z0VvPzJ3bXRy''@;'; put 'put ''N1ouNDhwSXZAIjpaOG4zLGg7RGk2SUAwc14hQzc/VUZ6QjtuKzt3KnJwc2ApbD5ePDAjTWtbJXQ/Q0R2Z1NvZmpGS3RzOGhzSGImaFciXTAvMFhVTlk4QjEmKldYMiglUFokOCRjdVpjXzh9aDQjMkdaRylfXlcjQ2YxLDxsMEtZY1QpemVDLlNaSGtneW19NCRjUzx5fEQoXklUSm5ASkVjVDhY''@;'; put 'put ''QXImJHBzbl1LcVo6cmU6W1NzOk89Oys2RDtdSSE8ayhUZnhkL3dVJG0qJTlWRFBtPUh2JF1RdzNvUV51YyZodCtHSntdLG9jUkc6OFtZZXUpeX1OL1V0a049bWl6L1UvdWNMSFU+Xk4vYSY8TXcmSjcifGhIRDpXQk1zR1E8WjMmd1QpQEFjTDlgcVtleTV3L3w7QEcmNVNRfDYhUk0xVTArNDJX''@;'; put 'put ''JEd5UV5hLypJTm4iWXQhSSQlXTdaXnBONXVgOm5vT1dRKz1rW3oxJXddZE15K1ImVGprS0VyUW14STtPJjpmIlJHY2s4bERrej44ZnNmRmk1dCFUR0A0Mk8lVUh1QGhTenZtV0tmPH4mN1ImND0xMzVnOGlkOW97NW1qVjUlQnglW05CRiZyJHVrfCxiN10+Lkx1Y19ENEJUZGxmMDJpR29PSWps''@;'; put 'put ''PDBVMilhayZ8dEEjLitteUszbkhoQihZV2RzRz5uNWljNjcreCw0W3khLnd7dncpQGgiaTh7SEhKKzlAUFc6XVJGfWk9NU1XbUwsLGdKamc4JlllKll5ZU5ubzl1ZT4+ZEg+YTIpLipIYTR7MSZOXkl+dy4yPFhhXW8yZWAoM0NKMWgyNWUjcmpHPT5vb1IpT1EyUW5CekRoOyQsa01CJjtaMEJZ''@;'; put 'put ''TjBweC46NEtEK2d4fj9bNHhHSUJVI01uOmAqNVpxU1FgfEUjTEBuPlA+bStbfXc8aE5ORW4ybjUyU3w6clAwWmplMTMhJlJIKGZiVzNYUGNoNEthRF42WC8wUX1FMCgleytAKzd+RkszdVcxLncycyshNTdiaXNyRWJgWjJJO1kuKVs4N3pxcCx+QCh3XTB7c0kkR3lUPFBiaj0laCJlQ1pYOGBu''@;'; put 'put ''PiY0SCNyaTd5QyFTc2BEa3g1aVovNUlydzpBQ0F2bCMqW0tGW1hiWWxLUXJpTVZRVVtIcDVuPypoIzwuV0ZmcjlLdDtvaEBJMEIqYVJbdD8uKmNjUkI5YGheIl4venR2fjFyN2k2V3dPdTNuNDFMM0dmdyo9ZFpkO2lOYmA7cnwqcUtIUUYkRC55OHg5KkJJbTwuPFcvW1kvPztEWVRjUWJxLGVF''@;'; put 'put ''VEQyaWVMJjxaWUtfeV5gJXBOcy8uQSpzJlB3XTlvISZoaTNIeH5tTEpKRCkkIStNalI2ajB8L1EsImldTjZdMn4sfkV+LDZhRj0vJHc6eSVCPlJSUWo8RGEjNmw5WmErdkVjPTg3NE04emo1cFlWOVJLISFHe0wseG9JYl0uRXpPN1tyZ2d0XWEqSUlxNFpkdExea1RUc1MwWExUPD9kRUspMTNU''@;'; put 'put ''an5SRG9Td1VqU1MvbWclLnE5ejtWTCNEbyRwUXBIQHYscjF3Y0ZlUHJEcV1qYzdiKnFxXWxOPmdXWXguKFpkfDA5TkNZJV5kLGpKZzsqcHZpNGlOTjIyUEp3PWgoQyJHPVtKWHArN0kqajQpU040KiErcypDODcqdjhhWCohSCI1M2hSanN8c2lOVEE+XyRiU3JiS3VUPGIuUHdrWmlZMWhqWEdt''@;'; put 'put ''anUzMylBKmpOalFWWHxJci9TSDIkTylTKHEySFJZZDAwdSY0NTJmfiElb1UwMUIqKF9CIXBeTGRhb29YND0kUDI5YUhVLy4le2dVRGd4cGZQInFjIV1JWkkhNkVAPz4zRjRIMz58PGN3c3R4UHd7d0xIX146ZSgrRkNGdEBqdV4lKjxIOiJRayJuZkhgcmJuJnN7Y2pUSVl0fl9MaTtON2oxeiZx''@;'; put 'put ''b31VYWp6X3w2ZTFKNyN1JDVsS3VvMWQ+Ky8vTVVAY0IyPHghdWpWbiI2UVFqcSlFP3pdS3t2JSs9Snh8X1ZoSzYlJTFaLGRmImw7YGtyLHRrdHRZRGJpKCN9UXJ3RU54am1GblEsI3B3d11yejh6bG5RJVZnWlslYltJclEwSkFZdSJjW3UyPCNGaT1vd3B2REY4ZUIyeSxrLHleYzxBXlQxX0JK''@;'; put 'put ''K1g0ZVtmOEpZQVUwKU0uZ29YQ1M/UFNGREJ+Pn5OVD07RSNfTXB9PENwMHVVPUN9b05ddjckakVhdWhvKiRyPUpMd2t7bWNeOWlOIUp3ZVtyNmUjMHNyTGdgbG5MKiEsXyN1Nll2KXV3Sit5KiNuM24hMWshT0lxUjgqNEolYyp3VF1yVW8iSDw+fD8+OUBjWz0yd3IrbSolOVdtfFNxWloqJT1+''@;'; put 'put ''RzdWKSl8NVQwZXs/aX19LkVEYz43eiosR0txVXMoSmImZmdYcl1LdWNEZlFBPm5oVzE+TjVqPVU4fWVDe05+QUVJdjdhWVBlMyxKPnZCTiRYOlNMP1JZRG5AUGdzdTZtVjRIPStbd103RygrKHVBekNneC5eLCpeeyZ+SD4oZiE3THgvanU6PmdXfFk2b0g9d1BQUm01amRHTm1xYDdmYEFVSnB8''@;'; put 'put ''XlFoOkM6YXhGRyNiYT4lcC84SV47TDZ8OXV4IjhENTBKaGlpRWh5LjA9ZDxgN3BXdX49VFZ0e1EvUDV1S1g1ODx+Q3FEKURPS11PP2FqIy9iaD5deFU6QTB6YCVPTSk9aUI/VUtJWWQ5cl9CPnVDXz5Fe3ZPaDBwIUUzV2lqYVYxUSZ9SHQwSkFzNHtwRl9xeCt2QVQwd08+dnltNWRGe141Tl9K''@;'; put 'put ''PDVzKDclSzMiTEpfaUImTFd8Rll1fX1QaWpfVTpteXNkLn52VHxEUFhJcSk0W01uNWxgSCFJOjhKNzgvWnpsOT43W2gkZjxkJEQ1Rl4yWzVGMk5hI0BdVz0pSEhJU0o+LFh1fndgZTJtaDMucVZvNz5JTipkQkJNTTc+RUx5OCo8NTVjdzdnUWxaaD9TRjJOYzJnQ0kmTTtsbkxJYkBhPW95al4q''@;'; put 'put ''XS9iYjszWFhNUTM8e3xDbipzaj1XIjRDPmhFa3NhcDpbez1RfGRBflMzYTRPO3h5OjBxK1ZOP0o5MWI2JWhmWSZQOlJdM21YM0diYSsiRkZucVdlP21zbHBOd3t9WCx1U31mO3x7QjU2NmM9eX5GMC93MyFAOmFIKE11OXVicyZASzhiRlN7TE5hVDA/TWZRSEB3cV9DW3QmcjxoXzJDcEUxZDd5''@;'; put 'put ''I2JTbltIX0N4KHhTS0VTWEZpSUVXIjNMJColNz90TVluMkhGXXB9bVMpZTdGXXdKb0FsfEwsNWddIWAqdnRhRFozJURQP2wuUzQlZF5gWm9vOGArbGdeWGFJZnhGNWZ0WVZmXThUdmR5RVVMVTVSNHpSQzZuQmRYPHNvJiMiMiFRVTY4cSYmIipjRzZgcVF8RHZpbT83bXltWS4heDFMfjNQb2hP''@;'; put 'put ''XV1eRFBKYX5dOXt2SXg1d3x2YlNHVmdvVzJpRjtneXx0MTxMRCJuc0M2UTpEQWQ1dEYsUnxfe1tIM2FiaktPQm5iaDJEOTxebkMyQ0dWTyRlPzpEOiRNQUhhXWpaPW1nTF56ZywuV1paTTV0RDsveXUvMmt8ZGhucG4sR3dWJDJHQHA0ckhrQTs1N35YfilFN30vLHY0JnNvKV5hfHVLYSpPKktI''@;'; put 'put ''RlVwOC5TbVI8X1s/KTk+TT0sRihJbGY/K0F5JTB4PkMhWiRYfTAxLjUmX2A5QjxlP3Y4ND07ZGZfaWs2UGpWSDJBMG4hSC9xazVQPiZTPWwsbC9gQEZuJj5tPmpRSVlYcXN5enJZdT5HJDZaJD1GTk5HeEt6d04hfjBCdG5kZlEoNFp1UiVEV3U6NnxmMjVzcTQ4W0xsfSxdTFYuMHd9TCxaQnBb''@;'; put 'put ''LF1Mc1s8ZV8zInVILjddcl90ZEQqfE1iZER4L0VUTGFVelFwX1RlNzVbWEFDWj4+JSNERS9daVlAejZQQ2ckJHlZd05VRjBGYHNQfFsmdThsJmkjNEJERGp6bzBvMStnZm9TJnBOejMuUC9zKGlIZl5MT25AdWhURTpxe2tnRyF4LEpCdHYweiQoSCRaYywkZywwZ31UWTV8Z1I3ZnlfPyJ+ZU9W''@;'; put 'put ''VzdgQ1V9ZGtkO3dtNUljWjhZXytzPVhxO3QrYk5xdzBfV1JRajMqbmNOKEJ5V3BUemhYPnd2SCQ7PThsSVN1Kjs1VERDPltvd0xed0U9QVROR3wuYkhmcVRwSXsrXVhaQVMvIltUJHIsRWFacGJofj4vLnY8JllQOyNwa0Z7KTRbbT5eSSJaWkdhbFghVWxdTnR0WUU6WmV8ejNkalFAJEJRNSZG''@;'; put 'put ''d0xEcjUvbGJbPjh1eDBtVk9zWVR3Qkt8YmxLaCtEK3VgQUdUN1hYMjtdUDEsPmlAa0gmZmt7WFFGfEdLZGY8bktLXVU6USIwbzoiWCVdNEp2blc5KT9IOENRMmRaQCJQV09YYl8qV04/Zyg2LzcmJEJ+YkhOIWc3LGJAUmRePSwxNDghfGd9KmZqQXAmQDEvQng1dXlsLDM7YFd7U10vVDRmRkVJ''@;'; put 'put ''JTY1c30oXmVDOypeezg7cV5PUjVwQ1lBVF9mYWF6OyxNXUFwZT8uWjVDKit+KUE1REUyITJwXkA4WGkkKH1jO1tIKW8kZCJfeD85TzN4fEFRfno/JkI2ZWp1PV0uUlU2KH1HNEpqYDNTVmpbcktVIUIzMyJiZCRzVW0hIV0uei59X1lUXkgxSHZxVWk3KjBxJTwsWSVFYng/OlolbVhec1skQmla''@;'; put 'put ''O2FOd2V6XkJDO05+X1B2X0N8M0M2a3YhXm5uIUhNPXgycDcyfDFxO25Dckt0U2c9aV1RXzBLeSNhelZmaFROQiZib0tTZ0x9RnhTe2l2Pz1rSFEyLjAycElYQDNFUFhlKk5gbDFgb3IzKzwxQXtNVko2aVA7Z3lRRUBRZmlgfWF6ZntiRyVtVmZ8bmtydjhlMlApWEw9K3dKTGxLdTF1TFRuUUAy''@;'; put 'put ''ck0kaDUiPHg1KEU8Q0Z6azUiXTBENls7PkJjdT9mTlZCPyU/VW11XyVmOFF+M24wQUM0aXppVnR0azVbc1NoLGhMIy5BbFchYzs7RE9vfUdlQlZUNC5JITZrNGIwX0gofXooeztQakAvQjdjLFAodCNYSzxCfSY3MzF2a3JSMnBVPUNJcy5+THs/XSN6TkJEeGt8X2xiQ21FKEdSWihtK1ZrQD9Y''@;'; put 'put ''ZlE2TyR1dEZ5byxPVTxJK1szX2xPNiVydW0+fjFBendMRV9VUCl3ZERTaXRyZGckW1MoSV0oRyMjNkVAVmJ5Il07d1BeVURQNGlLY0Y7e3tPT0Y6V1RFaDchalpnezxZVnhPVHRNMUppOW4/NkQ0dlNRUUFZfmdNRSN1bH1Ia1JuPi5nWGRjRFJSKHJFZjIwbUZqfF1PIW4hcDx8QCZRWlN5WX17''@;'; put 'put ''ImVgTTd6Z0AxWkdDQXtKfFdCYHx7ai9jfEE2SDR9NztBP3FNUnEyTVZ0Ql9uRDlMb2FuYFJ9OEJITiEkTm8hZWhjQ2oiSj9kWnQ7WEJAeDUraFJKRXRtO24mN1pGMC93cntkRUtfInl4ZU17Jj4iZlFrc1R1RFczX2x8e3tCQHBrZGx5TyFzfDR4OS5xPzY4I0t9R0NlREt1ST9vPVdxOkRbNiFA''@;'; put 'put ''LHRAaDlPK3ApWnY2cUhuPTJFNXRhNjdGQnozQXpNallsTWlVfD0uP2M5PVRPWn5MTmNoa2RNdDdzSmxVP0tfPmRvYFN1dEw2Vl4hQkVfc2BoUFZOPVk1fDcscSJueXY/TTM8I3ZubiRuKHlqaDJAYmQwd2l4KlA1bkFicFsrQltxeDRpX29VaG84OU9XRX1OSXMxRyhjTil7a3U8bFkpdFl4Mypk''@;'; put 'put ''UFdSfmwxU0tldkBaQ0U2d1QoOEB8aTR+a3IoSFA8LFkmV3VrPVkjQTx+VFN+aXZIaktkXkxFfjpVV2FXNz5WfXlIUSZBNmhQcEFdRUpJQz1TTihLfjo1PS4xdSpGYz9pNzUwWyZPZHM9XmdFJUlCdl9AYSM9KFQ7ZylmRTl6MjN+M1ByWGozaT4wMGRGbnYrfk4xZCl3RFVDcSJaRGlFOX4kMWY4''@;'; put 'put ''TjZyLDxhVGZAOiVWJEA+Lnx5Lmk/T3gzL3JWP0dDdXRabWlydl49PHV9Y3g1RTosOksjXWwsTTlUJS9BQk88MGRyK1Y7RjFRWH5BKzdhT0okNl98QzFveiY6NEUxalkidjtocEdrUVU/ZClFWVE1c1RjITMsaU46c2FmdVVONilia1s9NSNnOygydDdqfG50U1ZmRFRGQHFWZFJLJTQxSWtgVXos''@;'; put 'put ''ajtOSj0wJCF+UFt9eD80IyszZlg7JncsRXBvYVJneWAvY0AxTFkpL1NKejBZcyJwR01aKSwvTnMqfEdUZTlaYiZXIk4xb0trQjcuQ2g0Q2JEc2w0TyI9VExfe1hteW9WTFJNLC5we3I/RHw4VnhlK3V1c2ZJbjpHVEJHbH1qcWtgdj1zVFUqT2sqMm1VTV5eWEptL1hGeGJYN0pnLy5XflBJWiVR''@;'; put 'put ''W3RZaztaQUB5QDE/d25MOC4jNm93U048Z1diTzxfJVJaWC5ufih1NTZeRng3QE80ZiVbT1dXR0RhQzdKLFpSYFdFM1YvSFs7dE59TE1+KVFEY2hWZEQ/K2FKSzdlXWVqYTk/cXVZZTsyQ1B4Q2Vna3g/I3h1PCwuKEpkN3p+RnNVZnteajM/emJUfmolYzd2TUtORnhDOWY1UyZHcmMpfl16Pn5x''@;'; put 'put ''KE9kdT53dClTVUBdMEIwUj0vVW8kPEQwImtDdl9oQlBCe2V9bXMubT1HOX0jaSxQMkYsPnMjaTYvanFoQlB7cGtUNFohZChZbl1bTTx4KiMvdiV6fGJ3dWxHXVlGO3s7b05Kd2J3KiVWJVk7WF9BTHRWempZOlZ2Lkg+VDU/XlNEL2cpKEkzYE1OdD1XSn5rTl1XUFtHRkcsekp9PDJMPXAwbzkm''@;'; put 'put ''akNYYGJ3K2BvNCZrKF44TmJSVSQ+M0wiZ3hZOzpvLHZpZkx6IWw2cDJOY3h3an17VVJEI2E6c0pJTEA7Z3lrZ2pZNFNRVHUqOTsyQ1szVVMhKjx4KyRwJmdqcERoTmkzeT9IRFIsO3tXWWM6c2YjLClOd05NPEZ4RyVXcXs2KSVGZGJ0Rio2U0hTZFBTMyF3MWM5V0Rkdy5bQEZLT187Z24qPj9t''@;'; put 'put ''MVRkciV0X3FSYEwrYUJCZmNoQ2N4fUp9VEU4bnxfM0BZW0dPdl00SWpHSjgiZGN7bEdDJHRJSV1LeiojMkxJZlFHK0lZMjxmb15DZm13RHFuZWxVWEFjX09Ncj87WVZXdzxBZzY0bXVudChoIVd2cHA2aiZKYHA5T2M+cXc4ZjN7ZGo0RjVgbFRJdXNWIXB3Jl1laGpUeywuUEx+RmRjPER0T3tG''@;'; put 'put ''NC43PHFrRmg0az4+ISpoU2t1JXhWZj0iemJvZXNlSEhbbHtKe25EX2Erb1o9T002bWFHP09jJHdFZn5dfW9WOjd9Rj1XL25XOiVia18vIkwvQDxpclUpTmU2bV1FNmFFUD0leXx2QGEmNU9KJEIyPFg5bW1sbW8pOGVKZmRKfkc8SHs+ZTYjTih9MHV7KjxuUSkpR34objRBZ2tGTmFSIjRBaU9B''@;'; put 'put ''aVZ+ZVtWfXFxRFdTdS9kdmgiKypnTCs7VmI4dTY2ZHArZ14jKyhYczVHOFQsKGxVO3hmPUFgcTosYUsrbDVyZG06REolMCVuVEMrUlg2JnxJRk96Z0lnUlFuUWxQJEgwYkBnK0EuQT9rci8wWnJpK2EqQnZWOD5UQllpeCNgOUZHYk5eZG90c2d6LEpGaG1JV0Z9LiNmcTRmWiFPRT9dIzhDJHYs''@;'; put 'put ''TDQsQXBlcExQU00/WklJLzA5PDVEcnckM3A/bThiRT0xW0xGXihIOD85WzlZdE4rYTYuSj1gbFhfZE9TWzY+Qit9Ty5ubCEoLFBoImNYVH1FY11pUXI5I3c+QkhFP1cza3ZnLi40PHFScUI1Yn5odV1vRHJgMWFSYHAqPmtfQ19oKzhwblRkYVFaUX11NFQ+NS5BLC5vNGdrUnQyJjMrQD9SIWtj''@;'; put 'put ''VmA0N3AkZ3FyXVZLK3UzfFcwP0dHWjFLbHpwZS8reD91IVldMXRQXTB0I006SVlhWHEmNThfJSlbb0NqUFVCTm0/NTxHIlg8bnV9Rj8rNnN6UEhnW3RyWSx5WzRQKmBYV1NzcVdOPyFScmJ1em47Wz9UeExkN34+KzJ2ZnwyMToqM1BhWVszW0xCZ2gje3t8S3VmKHNUJj4xSjpPMXJaQkUodDZ1''@;'; put 'put ''ZVEjYzY/dSlGMiJrIyVALFlJVD5LVUlGOl9veTdLUll1WDpZWiZ+SjFKQl1FWi45cml2OWVmYTdYPjhRLz44d0s4TWZxeXFKTUJDV0E6NlVXKnslc31JWnRiUypob1E6MSI4S0MjbV5Wblg4VyhZR10/TWY4e3I2TmluO0kxKVZmUiFmPHY1cl8odW5RLlJAc2NFeHREdyNrYWdvTGorPSZkZmIi''@;'; put 'put ''RjhQfE8hfWlVd0phd2NhbCV3aW41eDVvcX16bzU5JlZmb0EyJkNGdSxUMlNsKkU+dkl+fExDLjBMTDVjcipPcCVXMi93Xn5eU01aKDNMVzw+N1N3PEhtTVkxdSMxPTFobmN9dSg1WDRYWnE7TihkXS8pSFFPM3xeKn5eRCY/UGRWdHBKQUtbO1EzbUVxan5GOnZkRXM3ZyIvLml3dzQpZDBHVW5I''@;'; put 'put ''fl9NXW9IfClxTT08Y1crWF81Ym8+IWgyWy5nR2U7dWoxX0NidV51YEVzU000fipvKSpPJEAkL1FIYy57NHpsZjd+YSQ+eVdXMEtsfWZPMklHUVl2QklJMzo4P0twYzRaSmZdfiFGbj5qaTRkU2l7fCNudl1QSUZMcUteUW9XQiZxUi5BfnQ3eWhBaDJ3UGIhQUB4KUplLlhwIylteThEXlg7Njhj''@;'; put 'put ''IjFfdi4kTVtDeEQzMko5OXF1YkxUTDQiKENGIVRMOiMqMjh8bkZJOW9yZF5NWDN3RyZnNHIxKyxiVmVuKzNGeX1YNU9qJGVraGVWSzlTKyFJImdzZGU+XXNdJWMmRSlFYSl6RU01JnxHQ1M7Nnk3M0wpamFXcUlOfTt4aXRLOTs/cTpvSFZjMXZTKz5HX1FYPEhWaTlbZH1weTEoYjczSE1OI09F''@;'; put 'put ''Vls2bF9tY05IOyEkIz5aQihfeFFEK2YzdyxXZSR9WkBHPi44NjtnXT52cnV6Sz5UXlU5RHpDNiVEUSMlXixGMnVaPkpfb0B1Tk82NG1FOGxGQXhOb2ZmOlYybH5lQmMrVUdrPTxTWExCRFAqJT8rLlJtSXlMRWJJO2orJWRPYChARGgiPSZ6cVhQeSNCa2N0UUB2KmIhZklSQFhZUkpYfWdKKXtZ''@;'; put 'put ''O0g2VE1SU0szPCQ0Z2QoLzlsZThHeykkYkRBdzt9bVUiOyNublo9JG5ENTRHM30qOldWLmBldl1jO1pTJDNBcDJFVkVSRCIxcXduYH55RkslWCxWbmFLUlhPLlkjaX0/ZF1uKm1wSFQ0KyQ5YntgPiQmIlllaHl6YSRFPjB1JDZCbVpya2VETy9tY0lHW0A+LksiYW8xJCUuVWxueSIuWzZaJDJF''@;'; put 'put ''K1RjaSped2FEKXBKdV8jViwiWEtFcUclSV1LY3hYdGhxKVo+NG1NRDNTdWNxeC4lL1A2WEhpPF0vbj8jelNtPFZ2XURxQ0I4fWc/cDYkM0RKUEdEZFRFPiYsW2FXRTAhWkIuXzdQOywrQmw4bV1WXjNqdWV8Z29gXypqaC5Fa01yQz8hNXlJPz9oSEZCQ3NlYFtnNF1uM20qXU4+QHMxdyg8WWg2''@;'; put 'put ''RTcrJj51bEVhME5TTj12byY0RClZW0Z7NzJPYnFCR09QPyFxSkcyOFh+cT1PL09nLk4rdEg3bDN5ODhKKksvdUE4eGJqeWZlJS5oQ2t9QlAycWxva3MqQUpyNFUlXiwsPnJPKVp5OHJfUlYrWDFBeCJlOHkvI19iVixOMnw4UWJsTCxyMVhJPy4mPUJ0PCZUVk1kSmFYNEZWQ0JLbjdLMmBbSjc9''@;'; put 'put ''JCZ7TX1YJHI1LHp5Sm9UMnNXdDhEeGxlT0teMGIqRGA/a3dOMGJhMmtYb3YxY3QyWEsmeTpDRG9ROTVfUztPZ1gpKD4zfER1eUZiImFYP1IlJTZgMDU8RFVHVlZCN3EoU1ZVX3khWXNtNCJZZSZ4aStnPy9UMiZWa2lsQVUhPk5DISloeFd0VWZPRnBzQ3E4RFtKUF9CPEA/Kz4yaFl9TGo8P0FC''@;'; put 'put ''V11jK3xyRkohXytBIXl3UmwqLlUvKzVwcHJKW21Tfio0QWxDYn1IamhZMzdGUCo0O1RoZHFzZ11vMjFXSXEoUVg6N3k8RlhAWzR7STRWRm8rLn1KfnYyKXJDWjA9VHd8ME4sazd3LkgoKCVUZ29pSTtHbkgsSytjNkRRZEZjUDF6byZzRXxvM3JTY2krTHFuYGJhY01lY19aOC86ZU52d0UrPGoz''@;'; put 'put ''RENOR3chdkB5WnlBMyYraUVHMXpYZCt7d2FiWCFyN1hUTWU9amhWO3Jvdnxuc0l3RyZxWUJiajcuKE09YlozWU9MZ0crUlBfO1d4TUAuZ2ZgInN4Tzl1YUA0W1tkOndkIVJqMFZ7PndFaTsjSWV2Tk06cyt4WmAoVXRnTk5nbSYva18kYWdZOSUyYSkmQnV4PnZDWSlBZzAuZjAkK2JYO01FRiFI''@;'; put 'put ''XihKWlUzfmBtbDwoT1hYYXBUcjdQeG1FWz1NWEw8cCQ1S1lYakkxZ345a24sa35aNHhWR0pMNSxAJSFbI1Nne3kjbGxGJjt9aEVzRSNrUCZFQ1NfI1B4LlE+aSQlMzJuISVfXmMvfF84ST5obkcjYz1lKl1oY2lLazh4fld1MEt1Z3hHV19HQk1FKT9WdXlENFgiK206RWtoMChKRHZtL0VKIztW''@;'; put 'put ''YkhnZkhxS2VVbGlzN2xeL3dnP34zS05fRSl5KEV2NUtLM0N0RXtjaHxWYEBZXWw1SlIvPmAvMyNKKldfcXQwfHNraSZZRTkwN0hSfFNVUHZ4UXk1dnVffCxAalppSHJnMj5NIVp8UD9HIyksdlg3Kkk+eUh0ZXk8YlM2Tl9YNkR2NWheOH1ebWcpVyRjZUFYVzc8czUkeCVJOzchWkklR3t3NTNA''@;'; put 'put ''QnUidG48Uzg1RjUmaHtoPUlNOih3Sn4wLHxkOUpEI2xvb11zNjMlPVl3Wil+bCRXLHpmRV9CTklETFRiKHNjbDc9ZTUiaER1NXQqb25rRD1AS3dlY0BiSyssN097ITxCSmtsYUROTnRiejJOP1dFeDdON2V+JUBqKmtfYWkwVkFQMjZdezJdSH1mc3FoWnF5QU1ZUkpzKiguMF9zKXcsUn5sS2Fr''@;'; put 'put ''SzVTVTphIiZ2U29rTTFJRiN5Zz9rZSZna31uKDM4Vzc2amViPz00NHsydV44YFd2b2lgVylxYjpfL082K2c5djNkd24rcD9LbmhDRHY7dTJVJUxvcit3eFN3SHVLci5WXykqRFg4NVpYQnpbX3hyW3VnMTpQWUAkaWdvNGU6WkAxK1UqKStoNSo0bks8WkAuY0V0RzM8PkpVWyg7c18rRUJ7QWVI''@;'; put 'put ''YUQ0TUZaJjp5b2NGYkd3N3s6bURdK3J1QF8scls3RSVUcWQpdnZDUl9lbXh8WnEvRytHNiZpOjRvQXFSSzYwQ3FldylAcHBWZ0liUEAqNkMwSz4vSG5CSDNfNUJdVUVCJGtLKldteyVoP2QvajpKdy5naz9RRzJHMURNJnwkSDIyYWp2aTMrZkpRQltgJW5LUjoicUwyVmVJc2h4eX1UWmguUEle''@;'; put 'put ''ZV1gWnVydDZfRFkkTFQ3KkthSnhsdGRyeDY1IkVba0UjZUdTSiIpJGdMRXV6fEpEKCR9LmdRTjRFc0dWXSwwSkhaPlVSbT98RG5pVXRXMj5rcG95MzJibT5wVm0qc35nPURrSnhSQD47LkxvVHI1PCxMfElgY19yVjQkKV8sXVFxdU15M0B0dHN4JWxwIVE0TF9pNTxvNj98cS4hU0hQalQ3enp3''@;'; put 'put ''QGRsalR5K34/InlDVDBgPUt3ITBVNS9SaWEhNjhHZlJlXzphNHk7bSU8T21nbjFzV2xjLE1aakoweDdmfXZyVzdWQUFCdnA6Njw1I0Y1bVQ7IzhOTUdCRkl8Ylo1WjJFJDkzaVpPOW9KS01RNl9YWGZpKEdCeipQeEpRcj0sWCtRcHI+ajRqVHZFd3g7eVp9dGc1QCg4OyNzTCtLdHs4YitWTHU+''@;'; put 'put ''cCFYbCxoeGFwUjNdV3RSanFiQ0hoPmVfRTtbRHQ3ankrTns9I3NWTFooeSsyRmlZW2krJHFxO11Ha2gxWWAoOjkqaXxkayNWfWExY3R1QldPWDNDaDM1I3ZVRCVZeVMuNUt2OF9yMUNAfDAuYixaaUwwO2RNTnBxPjdHOHkhW0wkWmIoTFh0WU5kVUdgTVlHMG8kYnwqfSY6cFJZSSR3JnhdP0RE''@;'; put 'put ''SmQzNWsiSnNle300amI6aFNkfixuP2NmRCE4YytTOjl2IXRoUDVnYzd+L292VFFTZVNyK052QWFAMW16Ijk4KSVzQDM9Iy9UOzhYOUBzVUp4aGpEfWNJenNqUGQ5RzZnT21PdEQiZ1M0KCE6VjJsOlozWzx8VEVYMltvR1NSPDo5d31pcVEmamBGNFM1UjVtVjoiJkBuNl1TRXJ0SjNzT1lZRWkp''@;'; put 'put ''VT5Ebj9wKFhCQ1ViL0swbjRVaHRtQFJbYHkhX1tvJXdlKCkkcS8ocyVnJWZ3OlF7Sk83UkB7bXo0IU1oYXQhV3xAXTB3OCE/SG9qZlpsTEA+bGpKXy94VHh+QTZXWVQsczJhZkZ2LC9mXklsKF4mX3p8fSFFQXBgUktMKDF9JV5RcC83VHRBZEpsdmVeYzZeRSJUNCNvcT1ULmgwfitJYCU2Jj4y''@;'; put 'put ''PndVcWhlYGZpbmklJCZJKksybDs2e1dPUFQuK0tzQWpnPjlYaE9qaWdMbUo8Kjc/Pi5rMDQyPTAySy8wSUFdfkZsRW80TlRubFd4JSJENk58UVtbayEpVypzIWBOS24yQGE3Z25weG8je35NLGtBYSQjelM4OjQ2VmFtLjpfWzs+X3gqK0pBXVhpJVZNbHVeZypWXSo5cDhDNlgvLmA9Jn19NWRp''@;'; put 'put ''Sk9NYXBFNCE5aFkyUTRGcFUubS5OK3ZfOnZidnJhKFRwI1RSUyVOLCU4SEtJLjRsOyE6ekQsd35SVXpURlViITNGOiF3KH56Wl19WDxeSl1NK20qdEBmNkk5d2JRdXV4RWYkKjs/eXgsRzFgZVI5OT5+QGdlSn1uX00pcXIrUGxUZisqKmdeOGFSOis3KUFpXWxhRUUkYG1pcEBAI1JOcVo+PDlr''@;'; put 'put ''ekZOY3xlLDVvLkZRcXhzR3Y9Tn1nS2FXWEdicTUqOE1rYkgpKUJEMiUkU2FhKyRORVgvbVleeH1NXUJrPzkiKyVOV24xU3hqLiVKSXlTRkR6RVlNWldqQDBPd15aR2x5ai4hbiQjSTA1cjdtOFd0bUdaU0JtbXpjNSUvVUxyNyNLX2g3bk5JdUQlMU5FdyhCZWJiRn13LihOS3RfalVlRXomcUF7''@;'; put 'put ''ayZMfGVWKVNRRDApRT1bNzohZy5Bcjx2alZ5WjBJN21fb3B5KzF+Qm5XMEUpRzBCVlY1VmAwQEduSSV4em8mXyEwSnl0I2Y+Wz0oLE8/ZkYucnReKW1oJWlzRGc1O3hTZXhqKTE9Z1NYLE4kOmMlVyE+WjYpRy86WjVwVSguL3YlMXxfW2UqSD55e0ZGdzQrX21xfE1eYDZwXj5teG59NUpXMnlE''@;'; put 'put ''T2t5IS9OVnpMcHRndj9WLGx+L0RyOUMsSU0uPFY+dyt7Vi92YkR2fDNTTjc2eUlMaUR5Til4L1piMHJURVF9KzhSR1c8S3o0ZjYjX2FfMGF1aFd5KUgjTUIqRnJLbVlUL3JHZykwJnRQJmNrOElUZzFJMT5Oei53WH10KlVCRX14P0JbXTZ4IjFRV01deVYsez09OFd3L08wQEdRMTFncW16Mkgq''@;'; put 'put ''UDY9e3Vdcj8vdD12fEZLfSlLN0JzU1R3NH5zRm5ITW9uLzY1Jj9XXTMmTjtoIjBvYXc+fjlaZSZtZmA/ZV5HcEZmP3J3cW0kP31zX3tgeVh6RzApTnBvOEw6Ql47WnxeLlNEdmhaL1BEejxSZDJ4WT1rT3lOWlUhOTYlOjxYbFt5fSU9ezsvS2EhS2ZSVkcpZGJXbThTZy8wey9LfV52O11eWipu''@;'; put 'put ''R3E/e2hVUnRRd043JEdBPDRyPG1uc3hFfXJhVXVCcU1wPyhjaGluZXZBZHEqR1tUJjBXMUUyLjg9YEN+PUxYQEFkKEY4ND17bVM4ZnR0ZnU+TVduaGA7RzAoPmdLdGh1QD1EMUsrPWJTfWsiT0ZJWG4xQzM0TiNwQ3xdO3NNbTFCczNwKj4oRVc0R1EuQHdEUyI0dklHZHc1W1JPPG5oXlhxVSNa''@;'; put 'put ''TmY5O08oTEdrd1M3Pz1XM1EmU0M5IUxwe3lZI2tMTSxebWRsNE9KKltIR2Bnc3ljYkJpT1gmRzNSTk5FYXo4RXpdTltGQDRPZUR3Jm8ycSJJNV8iZlBwJnlTazZDd25RX0lqPlI7ai5PfStMNUZEb3VnUnxmdD8yel8pOzhCR2JFKztzTjZYKkZnPFspPmZ1bXNMXVR6SXcrNiVxPUReeFd8YUtE''@;'; put 'put ''eVc5LEZFSUJkPHE3OFE3MUJaUy96ellMOD4iMTR3TD9pI0QoOyl5QnJNVWZwclduPD07RmUuZXUlX1tzbTJzJltxWXUuNXApRkJBL30qWUR0SER1STBaJSZpL2NwWXQzQk1OSClmL0JLKkhbbT9MfGcoJjRSUCVzRlp4XXZMbGhwS2B2Xl09ZDc+YEZTNU5oVSx3LyZsRDZXOTNFelA4X1EmfjJW''@;'; put 'put ''cEZja0BYfDRzbi4lOHIrRX4zPm82TEVDUyVKUVVGQzY6LypAO1FeYzYjd1BAdkRxWSk1fDN1aTcrfWY6L0tvZltVODswPnYofCpKbVkyKnllTEl2I048P2AlS0QzWDd3ZG1mfGxUZ0Z1VnclQzBpblttaW1scHtbcnF1UHB0YzgoUFU+fil1XSNtb0t0KEM0Sn1aSVtSfF1lNjVlZ0tgfG5oTCpE''@;'; put 'put ''VHwreVVuXixJV2JkTWFlJkNbQDUyclNSR28uNnc9cWdkbVtgbmpwXVROazBfcFlJQmkpZEhZbD4hZlY0VDRVP2pzZz9UV1E3eFd3VmRlP0syQCplJXcyPVV3JXsoblZNYTRnPyN9Zj5XY01+QXpVbjMkZyMpJVg5QlV6YGAxan5KYkQ7eDh8LC4ufD8qMyJHdF9vJEY7O3I2V1ZLQUNQREN4fGYk''@;'; put 'put ''cXtSNj9LLzxRL1J5QmpROjFYWGdKSFYxZTxJNSwyRTk4UltCZyVtP3BaVlNzcE9hfSVGMVNNSkouSyYlaEUsaGUockFFLHFIMkcsRT07MEhsNzwzaiN+JTBUMjpPb1VCKjdoKWhAd186TEpJQFRJSFdzPSQuKEk3SC81N3coYH1VJGZITXRuSmlpaFgkSHddU0toc1t3ZmUpKXNqUiNJeSg7dk4h''@;'; put 'put ''O1c6RUEjNCE/W0doQig9eCZsSX0ubWwkbW98KXJ9SUl+MGo7JkkpSDNVWXlaLy4uPmA+Uko4UnF1YGcmYGphSUJMNnNgeG5IaGMoRWI6X0l1QnMxXzE0dXszXS95YEc3Tz5KODZQITZafFJxYE9hQ3YhVHp9S29mKEUhSl9XJUdrTXhkJjxxZFY+K1IyIVMpMmdmJWtVOyFgfltKZ2g8R2pdTng9''@;'; put 'put ''PHsvfVMjNSp4VU5HdUl0W1AvfExYbkttQlMzRD8+XlVTPDB2Jk12dGRiRE80T3FoX3x4ezsiZHwuS3VmYVleMjl1RltpSlpOUXcjImg8dlAjdktmInthSFg9KTd+SnN2Y0paKi9mWEFzVklxNChKdUlMejx3JFFbNG8lJGNIPnJALyo7PzpxZWZlJjJFUC9jUFBFJDVGMHYoU1h8dkclbyMyaVJz''@;'; put 'put ''KUg/KktGKCZyQCpmQjE/KT5lRjl9JDtTb0AuJXlxVWpmPlhgaFtVK0wsejUmTCs8NVpVYVVNSF5DZmVVWUlgZ3ZkcnA/YkFmPk5FUj5oKFV9dHB0Nkd3N2IiXkgoZXNeeU4hUSxWWSFOZ24mOyU/X2goWjFEWEl4Km4sPTAlaX5OPDo1Yn13IUIoOT5SLkFWOlRNdXlnTz1NWjZqMUAiT19rLjVB''@;'; put 'put ''WC40KTg8amZwTy8iSCp0UE1zTixeVCZNdWspRylBc1A5JmxCSFQzS0dYNE9AOFlHT1kje0VVMnJFR3hnbm9KUCNsKE5sYkZxZUFDVTFbW3ExZWsuLnlBJDNXSGhtTV08SjAmYFl3Q0diW3ljYUdgajFRY1lzKlp7NE0zek9RSUxfTFdERXIpayo/Ujs4MV9CcFgmNWpDI0xTQVhKVDQ9X1ovMmRU''@;'; put 'put ''O31vciZ2dlZAPzpUY19Wcm1nazkoWG0jYDNYNVgzcn0+cEFaNHNlS1ZqaWtRai5VcjdmKUM1bC59VUJ6WCRQRF1IR08+KSlOK0A/W05AbjxVaW98PWhxd3pRZk8vOjEmeDY2U0w+JSsuZklmeFZ5KkJzUzU8OF0kSil7WmtKMHAvb05VUHZzZy9hSmJdOS8sRC5SXVgyWyskXThYVTQ+TmYyfWZw''@;'; put 'put ''bSM9amErZX1DbDA9Ny5QSFtNXzQ7UX5zVF94Mz5pbFYmO14lW2dLTnpWaj4iSiRBVmZFLEtVUiFSeUdUKzdfL0kxNVpNbyMqYFc2TzdsdnltJHY7UzZgVStUYUkjL3xqVik/cXRraFI0b0R4fjY2WGMhTVh5I2FIR1NVMjleQDE4M0RrOjNqK3BVWmsvbTdPT2FwXjtta3hheElHMnR4fGF8Wlo8''@;'; put 'put ''bjdsKl5ucWhAeUhpcmxySXZmMXguZyR7eT1BdTtBZEcoNClXN3IkWEQ8NykjSjttKCNLVmBoZ0NMSFNGWWdbKWQsYkw6LyhxPjZKb2ZUKVckJENNPlNecTQhUWp4UjEhUjM/bzRJajtKWXlYb3QwbyVlPitINDBdb1N9X1E6R11FOVcxN3glWS98O15IanIqcWh+PU8+LyxOQD9KMXNqbiQwO3g3''@;'; put 'put ''aHVJbCNwbj1WZEl+KypZLHJBeHtVUjM2LFUmSz1rSFF5P198TGRoTGR3T0kzeHY4ZGFNLD01JVpsWllBeCVQNixnMlljamQuJFt8XSoyRXw+Xz1zMjZ+MmtXQGZCfCZwWz5SbHc0bTxnLFQpfjRvYXlFX0NzMXx+WENTV0NxaWxZOi9jSCgzNkdbJXhWVCZBR2BqVDxZamlaNl80TkY5cDlXP19z''@;'; put 'put ''TTd4JHNzUWIvbHFEeTZaT3MifkVxOXJSNmRQeHIodF54N3hgdlJoKUdkOXRTNF84LE02USFedkcqUixiTis1V11YfiZvTX1yemRtMWNZME9Ua3YyRixuMnlPTHV7VUJHNDUraSEjQ0poUkhWPTtGISg/T1F4IWslWHVGUDU8MnYzbW9nYzhkaTFzKXpham4wfnBkWlF6WmJARTMiTUg7S3gjZzpk''@;'; put 'put ''XkxhUl0iXi9RR1tURSkxQmxPaz0+NFZgTiZNJCg7c192ckpoeCs0QldlXzZQfkEpPD00PU0/K2lUPHhsRUcsOV18VXFNN1NmTDpjIUUzU3c7QHkpLlB9VyEjb11rT087dE03QklsM28qcjVtJjxmVXpnc3daLlNMcFJ4Z1JFd0BocTs6Q2ZVdTJlIT1yaThpNihkblBZeTBhQzBtVHUsSEVPJGp2''@;'; put 'put ''c2VYdmA+UEBXLlUlM3BLem1ManosOCh1IkF5VWJLY187UWpIWkclY1Rdc30xQ1ZFMFVXJUYrM1BFZDNOITV0SSQxZm46USlea3E2TGkzIXFwby9XS2xlS1pbQXorZXx7PS8wZ1QufUJgWFNJVjNaT21aPmxTaGZ3eFhyfHR4ZCVbZmpgek1tY09DVG4/I1BdcE1jKHBiTGNhc2RwQn5rOWhfVF1S''@;'; put 'put ''RCR8JVFiOUskZTIiRDIva25pWSpoVz1nNTRVPEZwJDJvaz5CUXk3NDs1TV9APn5qNWByMTlrIldOMjJ5JGRQNnBqUWhab0tOdHAwJjhbMElkTDdzMFRzXzxaclhNaHcmbi94Vm5CRCZbamdHKTc1a240JFAoIX0+XjssQDQ9OE8me0ZIdiJFUH1fWjgvTG42YSt5Nz0jNV1sV2J5RmtZW3ozO2Fz''@;'; put 'put ''bElPckhiZ0ZJd3Refm1zPUVvdCpJe14oMz5Uc3xadyZnN3RadllLViM3K0tpUkltaGN1WltjN0cjakw/bD5tNl1pVVZva089aT82RThDVnA8LE1WUlU2YlpONXAkU3xWJU0jMmJPeE8wR1dqQHN6OXRPL3slWiZaSTd4PTRXaTcpd18yZ0JeLyZtaHElcl0kNDFHaEAxQzthTGljYV48KGRadzRU''@;'; put 'put ''M15AfDhPLE1pXnomRls5cWM9ZiRbKSxSR345R05PY3A0OWFTejNAZXNHSyopNHp8eUUrYVRVdXRwbUMvWDtkQG9Ud2J6VGhTbypNUitFUWc9RDZkWC5YN1I2dHU0Y0VKPTZZdEY7U11LWmQqQFlWO2FAU1ZCWypYLChEcTlhX3lDIyRiSGRydmo5ZURbI0hPODtkRn1eeVo4ayE3OiRvJUw3MF10''@;'; put 'put ''OSplOyErcjZMczJBUSMjJS5TVXM+N083bUgyJFBISy4uQXdwPjphcXQoLDYuMD12aSFYdjElO1U2Omg3cSxiKUlNZGt4ckkwdzd5MlJZYyYrW1heNmNMIW9NR3l8fExhWFN3TEROJXx1SUFUWD5YOzdZK15jWm0yW1YmSl5HZCwkRlZYOzQ2clkkP1g7OzZfY0tfKTtLcTYmfGAqRyVuP3g3KXl5''@;'; put 'put ''ITFpN349dUY8RWVpKH41UD1TJnVIWXxVO24lSHZsRUdfOjpfSjdwLGExcyxuXTJKdV9DbXx1aDYhaihjSDs+Y3lyeUgjXyMmVlheaCtgOixzK1N7e2gkQHV4amshdCpOKDtefUssZ3Y9b3lTeigzTlNEfTZTOGgwNF4sK29udH5XezF4RS5vZUA4RzEsRENfJUJ+NV8vWGA2Z01VYTRrd11dQ0tJ''@;'; put 'put ''UWZeTCU9SXc8W1Z0RXlWeE1HdmlYRXNeO2BhZF5WQWolKi5HVWczd0deM0ljNXtKKHVybFlKc11HUlFJKTJoNW1DdDx2XVEiVSM7N305Im97ODM5Q103biR9bThWREB5ZTxWVyNyOXZ9a3w6SD43ZmRWcU1UJSZhLjgldFFNaG1hbyRjWUFmcytKZFNHK2NofXg3Q3xEYSFLP3pTbz0oX3BhWDkm''@;'; put 'put ''cUQ0UmUsMEJeZjJOc1UyLmM8OTwoOWUrMk82VSRhSmc8ZDR5RHc4Sy5aWyxQOjJgdVN7WzMyRHpHUntDNl1vY2ZMUF9nSko4VEcpKUdJPDgoMy96d058QUkuVClbMjZpVF9CUjN0Y1hue2EiK3F6c2lqKysxTipsKEcqKmlyX0dPfSZsNEAuUTcsKjsvcCwsIkA8XlAjQUsyZUwuNUAyPiJ0RDt2''@;'; put 'put ''KXVScSlPbnsoXy46WlVQV3g4b2Q7PzY+PUBycFJ5OTB2Kk51Vmk3PWxEXnNDaWBRT0Q+eTF9L2ZueVI7PC9KfjM9YSx7N1sqdCo+aU1oJGJARnt8Rj03d0R2MXJzey5eRUA0bWd8Qk9RVi44N1goTVJMOHhaQzJGb2ZIbH1tP0I6cXpkfiFKLjxVUUI7LEphMSRaUS9ZbTNOJkA/SExbPmw2Skkk''@;'; put 'put ''WVlKcWlHaCowXn0oV1lYQHVaciMoT3M7JlRIRFdKWnNlQGdjMCRXNXAlUn1OTn1ZL05uVnVwPTF4KSp2OEVeNHU/JnVyVFErKD1JUnwqVl1ySj5qLGo2V30sV3A4Zn5fKG9ENyg1V353fSouL0hrXVUvWGxhXUxpa1I4SGg8WnZDbj52R0B4VnMvKDhCPmpLL2RXSWAoTWFMK2IxWmN7YEYjIWRC''@;'; put 'put ''MGdtTWBNSWVGOltNZi5lWXguNWwuRyVVT05ddi87WDZ7R3AwIml+OyVxUmpOQXo1dnNvQn4kVzNqdixGOCRxWEhuRz14Q2MvSCEkNkZAZjI+KT1MMVUhdkFfTngrcld8amhDRmhGR2tvQmk6eExHPmpLVXlVRGRAVDZbeWIuRjB4SDVHIzAlcEdNMz0/bnp9OUJPTUAmZ1pAJUZOcWxtK1dTL1lh''@;'; put 'put ''UTxXbUVrQG1EMDVVaitdU1sqYnd2dH1eXzEpUVN4aW9hb288bzVEMGlOdUBaV1ordl43ajUzYiZ4OzRqPX0mNn1XXVtkeDBEc0duVVsvNUppKH4keTJ0aG5ufH1XdXVaWUVCcGxydDw9JjRHX3MlNXxiKkd0UlUmLnpRL1ZRfD93WjcxPl9qamojZ1FXe1RDdzFAIz0+dzBXNDxvKTZsZGpMXjY7''@;'; put 'put ''QWk3N3RJWHpBV2RzVkIpeShufmY2PjJEd1VYPjo0Li9BWmJofFlRRmJAPERyS2B0a31yYDYkOjhASjZQaVNkXkh9MnhSLFNMPnxtU2RmVHNSbENOMDtAaVBPNHYsPGB2aitdVjY+RD9BOiNMaWtrfnoyeSQ9JlY4LHFtIi9wKiNmdSN8I1JVcXZ5VXZTc2RRN15KRGouSEIvK1NxOip2XntgNmc/''@;'; put 'put ''ZHVHWjJJJEJpNGo+bEo0TCZyakBOKjQjQ3ZXZjdIQnJVQjo/KFVAb0VHUm5EVX1WTW9yeStQdWU9LlhoTGhEWGw+PE1FQkRqO29JTjI2K2NETE9jfFs8S3o4QEJuVDxHN0FZfCg2VClmMDBmZ1d5QE5WdDQhWXFnd2J5Y2tAaF55VikyXihLTE5zfTNhdXYwWitvYilZP2xCISg0JEZIfkhfRExa''@;'; put 'put ''KllHZSZoMkpIbXclKzBrZGpNcUZuLD9OSHZVQ2VFWnQ9LDhOJFcpM0sqPEQrOip7UCFjOipPYUcpejtbb15SOGozQXlEVFNiOyxEeF5fWjk0ViRDemBKbSg7bixWX01DU21QJXtEZyJ3Z2I0L1VXMFpHVDFzJm43InNHRlswYVZwZXxFMXdjLiw4KyJCKkZrdS5WYFpoeHlHcEllRGx9SXY4MCtR''@;'; put 'put ''cWxUI1tCTWFscmd3Qy92X35fOjUpcVtXKUEqcn5AOkV2ZDw4aFtUUWF6N09XJU90NW9pNygkPE9yTVNNVCwsNmVSX1ZDWnduXUNzRj9UVE9jT2RbRlo5I2wxWVJMP3gicTZ5YT1oPm9adTZ4N1lAOEJNZz1tRWhBdXVHWHFZN3N7UyxRKVo1YCZwanhGeGdUZj03d0pla0xKWX0pdktCMlF8ayJ7''@;'; put 'put ''di9XVTB2Sko7a3p6SltPKXRfP0YvKF9VOm5pPT4/RkxjOyNGYDAxW35LczRpM3pqdHpKXTFQMW1NNTErWURubTskcnRLdWg4NWdbRC57aCh6LHlre2lpSyh1dn4qPEIyT2xxOFNXT2BBWGg2dEUoK2M2X2UkWEw6YTdGUj1PYW9LIm9DLHEoI29WUTVFNno2T2A9Y1BxbCZwN3xPeGJXQiw4JVdK''@;'; put 'put ''LGhEWSxpakNTbiR6VjI9KSxrPUg8WExyQCNuU1tQXjl4IURAeHx7OzpBeHQ8MHc4Jihrdk85I0BsfjI3Vj5LW3JHSSw6R1VjaVFxdEU5TEF6XXpIWzhnRDdnOXc6X1MmV0VkI11hU3pqNzp2Ky54ZEV8b2JuNXw9LG5PUzcsKDJNO1gkMDlxNW42eHR0Xj5SZFpjQWJPWEJraiFHL0pYZlVlXUgx''@;'; put 'put ''Z2E9eDdIVFtQREZZWCxIbX5OMm16RVdkKUt7bzJdISV8OE1HUnFzMXVCVnNePClBVisuYDc9bD1YcDdoJWosRWw+dVNdSWdRK2FKYlgoKk1hbW55T21xdlVXYiVGMXY9fDlXczU6OklzQTYxNyRWMy5rVFRpSylVUW9wYkRiVnRANVRjZFFLfDgyS0AjW31nXzhSOGU+WEdaTT46Q0NbR0g6Rn12''@;'; put 'put ''TCxGb2YuW3VmTThTNSRKM1BiTHFKWmlgKX5FMzRMPT8zdCV0NUlBcmpxQ2p6Rm8iM0AyWUNdXiJHUE16WlUvK2U/dEJlN1UhMjRzZiowbVhuJHUrOmZZXz14bi9VSDFlUCVbJGdANy5fW3RhZnFFJk5IT1JpZXp7PndIfDFEQngkb05beXg5e1sjOFViKm5ZdWBjUnl2MmZfP0NbTjhgZyttaihm''@;'; put 'put ''ITVzTT0zPzJoO2ckPTN1PlE3TF1tQXd5a2ROfC4zUXdnL3o1WH5YMS5kSHZRU0l6dVgsVll+cl1gKnxfSVFdIU02XX1FY1kzUGdCaDlsN0B3SDNVOV0qQkI9bz43fEY4YU9tZTNYaDZDN05zXzhXdV4xMk58aEYwT2NsVnNPSEUiRD1KOz9SOkEua0NZPHRbNUdzWzlIUlI5WHcpM31TSmdnJjE4''@;'; put 'put ''JVtrd25AUEx5ZmA8NWgoe2A1R3koVk1Ca1ddOGk/ZTI1MCNQTiUhXXBqQGxrMHpkMl5JKEYmNmZRRU45VDxjQCReLy41RE9JaVNlPz0yTGJrT0psXmdMZHM/Nj1NUi8odHguVl9qZ21VNUJra29PSDhHWDx9L3tAQDg9SEhudURebXBqNytLYUZeRztoMFRGVDwyIkpqVEI3WUpRL05TeSRPa0NP''@;'; put 'put ''PEVpPVklJEowNlJ8R0IpQ1RwMEI+eltVMmpVdVBbZH0qaF9IbzpxNzZoInw3a3dddWNhWmYkMjVFbHVNdWpQJD5UKHMlLHV6JkJgVWVCMSk6SX1CMGMmazZgcSI7VEMlQU46LGVQbCVjRlQiVilQajFyOyl4PVtGLDM4ektTXyl9fVdUfXZZej9XYnleVyFNSCk4a0dGdHtsP1BefmFxTCZgUSN5''@;'; put 'put ''OjZzRVd5JjBeJnpwXzp4cXJ7SkRZckxqSTJtVDgrJDhIZlcseUpfJTpgKEZbdHVqTUI1WzlvR2EudjNFTVYrPj9hLzwwM2slXy85T1hYYmg1NnFaNlJlPyxVKXh2TyxAUUFDKHs7UygmSEoxNnMsPm5laTcxSDh2UnxiN205Iz4/LDYudHRhZUo4WlBDe2NdMzBKezIkLjVVbVtSe0k5MkpaZSRA''@;'; put 'put ''bExyKXwsIkhlTiNUU3VBW3FxK09BRG5feiRYRXtDWkxjNk0/R1l0fD59OWdbJFZRe1d2KWxWYkxfcX1MQVR+dVp+PStONSZnVEZVUSNte1MpdHlCb1dWRWVCNWF1P2crXVhte0VRO31rN2p8YkZIKjJYSSsrNGsxSzlaRU9hWVFDX3x0YCo8KWh5UDNxSTk1PHZROVZhUCV5OTd2dGV4Z1tYT29s''@;'; put 'put ''ZndDVTNSJWJ1TXFrdndQPXN9Pm9zIkdlUSNKTDdmXWlrVyZgaTU1UE8ufT16N1JKWztwcHc+cn1tVH5JO0JTPUN3YSUuI3AuSiZWcm5HNHAvc35SdHBsWT4rJnw1cjBKNDdTRWYweVlZOiV1XmBVL28sIWojMU4vS29Ie0FPbElbeW5TN3NWI2xjKkUrXWp8JHE2QyhWJnhxJD5yZCJLan58Rz9a''@;'; put 'put ''YCZfUzdrIXIsSSREbSFmQXZoa1AuY0YoNG96NT9sVT9DZCtrdDNMZUloTVNhWiw/KVV0ZG5fS2h4Nz57NGxRZFgwYkVIbWE+fXtFdHpKd3JHcjx9SH4vYWJsKz9hIzVfVCQ7JjIqaWdob2h7P2UpZ1RPYzUrJl84ZWFtTVIoZk1hIiFbZCRpcjQ9JnZ+IyRCRFgvZmd5Tz0kbXdWYXY3djE9Mnlt''@;'; put 'put ''d3tOImNyfCJBMChzNzt3K2R0Qnp4N0BUY3N1fm5uaCVJJCEsfSJaS1FpcGdQRnhqeTp5Y3QjJE88WU19Q1M0Yl8mc203NSRkJSooNDdlZ2BaYG4uSExISExDSipHR3UyfkJKQExHcUlFIjgzaER+JWYpX3U+KiN1T1hAI2w/KD9peWNXcj53eHJSMm1UNVdRTjVbXzRkclRybyVWKk0qOVdPTSVI''@;'; put 'put ''I0tVPlpXbmd4fiQ9fUNOWSJkWnZzPD0zRSIhTD5wNjA3KGtvUT5AeEVJYVVvdyRtWE1KLEh6U09HSlNlJXE0UHZ9alBqPjw2dTBJXUxXb19+Oy5tektDOGsuJDg7YER4eyFVaHQpX2xNTjMseC86SH57VFNUTmt3WEN7Ki4paygkSFpRVzxfSiw4YmUkPE93SX1XLDY2Lj8maV5VQyJ7c000eHFQ''@;'; put 'put ''Vkh9Z3hkJURyVmlITGFAMzZdZHddaWQ4NG1KRmR3Ii8jaUh4JStaLFUmb0BVXlFmPkd2eTJgJlMhZyQ+OntwUV1wUzFnM1oqO2pnen1pSjciRHk/Z1hEfDpwIWtbbFladXVOKk4oaUslRzd7SHY7InhmdEVOTk8sWjFtMWN9eV03b34+RXZxXmlidGUwOiVGRiUhIykkbHwiLFQ8aX5AcEQ8TlRT''@;'; put 'put ''Nktyc1UoWUszSmJXJFdCYXBgXm9ARCVONW47aVslM05mUi93PVE7RD5fX2VOOlt1NjRwUERGPj1oeHZ0Kz0zU1tGJS5tMn45TCpNRmU4Q2FmOSg1ZTA/W3YkfXY7WjlEMEphWX1aPzk+aEZrXSksSks8O1JMbl1WY0VYd2lLQWlkbVgyMzsjfCpaOWo7bl08KXMhNk0zMV1USVp8NHN9bC41NHVU''@;'; put 'put ''Zjk3QCNOLzUuMjUxeTE7X11GYzkkRXdXclkhL3EpRjhkanplV35sKXlLVWN+fHRaRXoxcEwkbUd7VmtMaGVsPzljTmVCMH5FN2AuLnI5Km8oMll0elk9a1ZUa3tZbWNhd2xdUF00VH5oMTA1X1tbU29Tbz5rdH42JHJVeV19YiRybmJ7bmJ0PikrVyM2L1U2QFpSQ3A5RU1NO0pGKFo3PHdbZnZu''@;'; put 'put ''OXNdMHM/PU80O0djPzx5TXxxfUtjPzFCLHk/LGZ5fUwkKSpVIkkyPXQxIzZjeU5dMHhAWFRGLFomcFVLX01YbjJmQktsanN0MktQKUNCYHEiNVFFKi4kTyN3JXpkdWtKc15mfFZyRy5DZSlDQ11OelFfemMhJlc+b2ome2pyPFRGZVEyK0JTbHB7S0xRNn5YSEA+dzpUfDxRWD1RZldASzNAbD5a''@;'; put 'put ''K0gsVCJbInNEalY1O2Q3ZUs1eHt9YXBBL01vYyY8KnRqK35DN0ZUanpMYzNiOnBYc1k/el9kPFlGTiEoR1JDfn18RX5ONkNWSnV0KXhfTUVyYkNsWDRpfEIueHIraXp6VDs7fj9ZKCxCa14+dGB3a0dBIj94KF9nSCRvdTNJVi5aVG8kaVJUS19VNWl6MVgofFVHalUuO3MzdmRzLEo/dH59d2dp''@;'; put 'put ''SS9KKSMmQHApTW5MPkcqVilhWzpsMjs0V2pjOG86REtzVU1NUkZAZmJ2Ui8sRHg8RzdXVkpuJjhLYVNgSjgqe0FjKSlgVHtzbj1pVjRec3ZRImw2QGFSSD4zMWBhT19qYH5tWlk2e3ZMXmRPM1EhQC5vWTtnViFxc0FXRVVWdj5wJHFdSDdBJDN3QzlQPlkzTTxOdjRdZn02bXIhckwlSTdWYUAv''@;'; put 'put ''PVspeUYhWnRvZVIxSiozM0RKbCkmXih2SXJgQiJZX1VEP0xxT1tYSkhjKkZuRylfTGhtIWI1cH1rcyZeZj5jUWpJLDw1WUNQL3YzfWl4ZVgkNUc6OjU6I0B4TmtWYDxre310SEUmPChqS2BwUE5OSW5aVX06RThCVFNQR1BqdWwoLD5FISpLVy9UOGs/OER3KT91Vy90X3tVc3hXIW9YLktwWCw2''@;'; put 'put ''Z2opbUhHQnI9UUosNFRhbmJxTyZyalVwK1RxLipBbTZ5Pjg1KTxjJkpMUGZNbm87c1lqbzhJQSYiQSZDP25Ncm1EI2AvKyNjbz1TXSxPXz9reT9Lc2o4JTxRRXRXcHxdJGckRCVoTC9XV0dFUCZ9RHdCbUlNI347LyNyVU8lPUk2JEFvQWhCRissdWA/I0lUU25IWmZmfWAldjNxbDFtdD4rZDNo''@;'; put 'put ''NTRgNkIyUl5HVGAzNWZjKUNwfDFHVyFbI1s8W0FrV3tkVilCfDApaHRaMX4zKTciPVlXc3VYeU5jUFoyTEVvPmRWRXl0d3NpZz9icHZvWW9HZEFmNVM0PzVyXmY7LEh9S1Mwe0tLT2sydz5iITptLmIrNEA7Qyt8TXhkdHdyQ3dzVSZFSyZdMkdyOmBDPVoxLndVfVVCLHAlcGBJQixMVyFzOnRv''@;'; put 'put ''JjhibSVWJSFtck4qV3syL3doajxoNXpiRG1IaWpOOGVsbFh8eEwjTWo6TUA7K1cvWzV1VVJ1al1XPW5RKnF4RnpFSEc3VyxkOSprTSNObjklJSVFTV00WS8kQ0paZC9LMU1dbiVDejNHVkwqWGc3fTlXfXp4Kzt7P3U3Izg/dkZdV3lwUW1xJCJkKCJPcHY3UX50PCRCdlpgdH07Im1ZXmgpTExi''@;'; put 'put ''Lk9FNHVtZGFPUHZfbW8melcvLkF7PDIyITczdlt5JGdYNUA5Wig5XnVablNEOz5RTVZKTW8wVkZXbWlecjluV2BMbSZGdzomUGdvPmRoO2hmY2oue2lKJCVOezpLRy9edj9Sc3FiVTNrO2VETkBGVH5TTnFkW2h6X2dGWCFdKj8mNUZsbF98TisvRkVOcjtCTlF7T3cxI2U9SUxxT0F+SlAjVy9U''@;'; put 'put ''OyM0RCVwd0NTSWt3NTplTkNFWiNgYVJGOS5gNDsvIzJ9YSxvMHN8PjxAUnwycHFBUjdBJDJ8fjA/Lzg1V34zNGZmfHJyLCNxR29zOUAuWjtgcyoiQz1pR1pjJEshJTtGaVZQTEp1TFEwMnUuTD0/dmQrekRMcU0ueGFOQDwwZFtjdUVVTkBWUkdYaDtOPV1QOjhAJHpfLk9TRnljX3NsV2opNWpX''@;'; put 'put ''eCZMO09MVVB0NXt5cmpFa2xsSz1lSDAxJDxsekwlI01fRHAuSFNVNGRmc3RxT0F1PkgpaVVsYXtOTVo8QypoTnl8Nn5LcFNTQTpfNnVRRmgsK24hazU+WTl4cUgjc3RPYHgxaVh1JVR4UyE+UUAhS1VebX19RlBAKmYzPy9oNXssL05IIyJ6RU9RTiFuanV0fkwwc0hDfD5gUCE2SWxjVGdoaXAj''@;'; put 'put ''Sm8oaXM5NVteWy9DUSQ4VmFuMFhndVhJWTsxZlBBcnNIZj4xM3pEVSttUllGLGdKQ35mW2F4MXdNTl5JfTtVSHZ3TjlRWXQzX3goYV8sWm5nZEVwOiQ5aD0/UlhmYHJwO1kiNXl2bGp3dW94PF5vZi5PJD1aaGMqWC9ILEw4UmFfP05rS1lvZCEke3wyfUpWeFMhWEhxYlR+LnhKOzRgfX4qMEF5''@;'; put 'put ''fEdBd1dbR3I6dXQ3a1hzMWVyOFs+Z2RtME5KVFFEVm1+JCgjb09wQW4wMjRtNy5EOXVvI0MmUm1NajBPIiY/UXEmSFNiImdkYHxlYHA9Z3ZfP2dsXzE9L3xQSGh7SVBQZHxrPGY0PWFxI094IUojO2Z+Mn0/JHFBL1kxPlt8KGk/TixCJkFjR3dkUGwmQEwhdHlwSismSEgjKlFjME5se0phJkM3''@;'; put 'put ''TGs5RTopO3Q5TmlPQXZmel9XZVJvemlOOjJAWDB6ZDRLO2dNfm13JCVuU3ZUYiZzRXhnOlRlakdpRGdraXgpVzopRU1HR2xnZjJCe1VhdG16Qn1ONERrcjo7UTA1Vk0kWWwsO2ZUfTpecHQwVVtPWlR6WjtVTnlYX3g8QVYhdj9geTAzc0RFOnBWZzFTZ24qSW0vSXVDfG1aZTokKEQjTiloNjtA''@;'; put 'put ''SWdrM2FYPlcpVmc+Ymk5c34mdX4salBKViVOaDNGPSRZQ2ZWI2hCKGhtSnhGeDg5d2A+Jn0hPW4zLGk0X3xUWDUkJCl8SG99OytkN3FDUm8rfCtgeVB9dl19R3VAWSZjOXIla3xiNUV3QjFkbTdRcz49WXZOaCFnbykuY25MWXR6SjFscj1YXzdgX2BFWkNDXVQ5Tyl3a0Z3Ti56eWdYfHZ4cygz''@;'; put 'put ''Jn1CTHJAIVZReDJJc1pLNkluRFc8Mi5ETFNYWGlHJXp6Nk84ZUlaazhBQ25jSGI2NFE/RUBHW1NuUWoqSWJvM2FlOzoyJX4mUWRST1phUmNmKGghOGlMKn1yelF6QEImWFEmPDNhTz5uSHdvPWlKUU1KeDV2JXooNHZ6TkBiMT92NSooTi9RcGFUM2pGYnhhUWVhfW9ZcDE9T2dgZl5TYnZRKFN6''@;'; put 'put ''fH18a2VVSDlUZU9UbGA9fWNITmhxSV1gQmp6TUFuMkRVOitGPz5fS1dUeEozWywpaG5iUDZlW0pIQj11ZUMlNGRxNVole3MzOmsseXNad1MhYlFPcCZgcGNTcz1UQmE+ZD0pNS4uTFZWNjZfUnNpbEghQzBINHtjKnN4KXwoM3pRVWBIOUJLU0xONnshKk87eTt9TH1EPio9fDsrY2ppTixkKHxg''@;'; put 'put ''Py4xXSFiIndLTnBdKmU3MmxZIU9VL21qdyF7XXFHbFpCLiVpdTdYeVs3b1IkYz87PDEmYkRmXlQ5Viw7QmM7OHVvfjY/fmFYRSE8fFc1U29obSlNP3UwcF9rIXVoPzJUOikoV188YFkqfm96NjVuREpBc0s7flJUeit5OjdobiFQSEgrYTpDbVdlTDFOJFZRInUkaTF4MkBbMyJqc3Q9VFJpSmNF''@;'; put 'put ''XUl0d2EmZ2J7MTg+UW8kJlpZW3I9aDY+byRhaDVPXWAyNX5JPVB9ZWZYdmk9ayYvJHQ3M1hTYyJFRktVYHBPTzx6azY2fT98RFhDTXxeWWleIz4kNFZePnZNZik+OGpUXSJWdClRMTReXllOXUFKNkR8UEA2SkRlOj8vZy48Iz9+bTZDIjAme0hdQmB2Z2pfMHBEYTk/dElqU0c8VVhET21+TUxp''@;'; put 'put ''aikwQ1kjI1IwNiVFLHpxQ2tTUS4pU3EvJDtOR2lqXW9CeSZfTnE4UnFwQnxzblVkWiVzXWxAfG0mfTRsIXBEJnlSbn4vfFFMQ2p9JkUmNThLZUNYSl5oVkBnamovPUVrWElWVTthNyozJFJjTDMzWEdPdiQxXk4uaExIdjVDdWwleE59ditdfHo3V2E6UjdLVWdXY2pRc209KSUpb05bfih+JmJZ''@;'; put 'put ''biRJKFJ0WVA4Xjg4cXlOTGAwSypnN2VNeG53NG0jM3IpdzFrXW8/eDNTaHwrRE4xeyNOfFR6WTZQTDQ6fEh2fmw3ejZPKiRKNUtgYT1Nbzc5MTc3OS57KFgyN2tbNFMrNSY9X006cl08bFRVSiNRWk8+MHhuN1F8aDoocVZrX0t0O0NgTzNkI2VHeF5VTkF2I0BwPStKQ205Om1vKj0oTHQ1fE9R''@;'; put 'put ''OkdxMShnLiEicyx6Lyh+W2k2SEhVU30/bFcwZTF0UWlwdF1hfFRsPWJzVUV1ODhVQ3wlVUJVT1QucHI/c3M9JFRpcmpAbzt4KiVwc21SMCY2KVU2aHZ0cWU4L2M5MXEyOlVuKiQ8Q1NzI1NOVDdjOSZQInQmWHZyVmIucDZsL2VXTmdKOUJyRStYcHkjPkJuJUlFVihHc1UyTnpDNSswdiZUWFBR''@;'; put 'put ''eF1Ea2BDIT8rdHVnZ2RTLnBYSTBtP3JoZHI4I35dLi5OQTt5PDFHUSo8LCNiSHJIJnBrM2BdaTVNKlkqPEM9YGgzN0ZnS00ldjlhWjVvN31ZYDpiQlQyVzwiYlQzUHopMj1RVmBEaV8pYGdaRF9Hc0ssOF4qNkJ+STw2di5lQ350UDhwV2ZnWS90TVJ2eSZpYkxeIk1jLnpffnhkamI4ekhxS35L''@;'; put 'put ''bCM/Xzs/eyMvMF5TdVJ5aU5ZfXpSQCFHKCIjYyY/fXI0TFpVIzE4Yi4vbD95Y3FBOCptZG1nc10+SWk+MSs8XzZ3JXgwUTNtZFNfVyQoNm5FeVZWKUYsLkxUYEs6W3ZNdGZMVnYlMTgrZGpuVXhORXRKcm5GRFA3Olo4XnJLRjZhMFEvW0RWJGBBdHEjXzQ+UHppbiI+XTxOU3NOfEE1aHhge1sl''@;'; put 'put ''WGtqKWZsS0V7MmElZmJJJGMyT24lVTZNWml+YCgkWjdXV3V0OjhySTBLQCpMeWJoYzdNKm5DeXdgJkczVHpKWCUxaXBWU1g1SyJifW5LTEl6eEopTDxXWyFvQlZtdnZDOF4lNllEPSYyRWwlNn50bCg2Jl5CI1dbKFFHOlQyWyFXY2V0cUVeYn5ZSC5IWl5LPVJCQld1KiojSXhQKlB7ansxKD99''@;'; put 'put ''MWs4bWMhfSJfY3ViVS8oQnRWY3FnZF1FViZSdjtzWWJyVUQuMm5oUH5iPTlrWG06eTl1bjtrdWt6WixoSmZydWhfQz5MVEFEejxaV1U6ZWNZLClAUSpHbiNoI0A1NC5vI2J3aCp4TzYwXk5RMGpNYXdEaWN7QnxPP3Y9O14kMDp5Z0xIMkc4Lj1xWmFPLCI3aHBYRiFSdWV5PFgmYDY3VF1uLE9g''@;'; put 'put ''dCRfbkMsMnVOKE9DPDhlV3UqX2BxUXZxam9MIjA/RFJtbWUzYWI7R0lScmxKVEFLWHJ8KVAhP290eXNmbXxldn4+QW98IVtfRF1+anIidHV2bjZ8O0lhO09wRCM3IT9vdHl9SEVBKU5lKCg6RXs+JC9AL0VlKigoQiU7NmRhQjJgKEQvbFNUJFhhKGM4KHwsemxvSmk3QThGL1hWaTd9O0JCPHUv''@;'; put 'put ''ckRmTHVdYzJCOCs/JmJBKCQ8UGVeKF50KVEyW3A1RkdVK3U0OUtld3x5RX1UOFQydVl+K2hGdSxEZnp3MUomdSRHVi9QKHpJKDo3Ukp5dDFlTChqckZ9bXM+WDw+d0BgaldHPjprdGtmR3NwdUxLeXIvb1A+NyNCWztDKFZAeCQkZjp1VjM3bWxFbXc3TmlEOl92SGZveVhmPnR5MUwlTD4hbWlW''@;'; put 'put ''NHM0OGNXY3osTlNXX2NqTyMwWjNRMlt0ejBvZX1rMkZIUDpbbiVjenwqeU16XmVSTVk3SyM3UjpaZC5AeXRPSjlWOiZDXml9XW1WIS5+ciZibjg8dz9vSEpRMShbQm8yYmBGY1REXT9eJXJpPUNkYVtQOTpXYHAieDo3UVpvanpeL2oiZCtwRF1RT1V5dC5qLl83O1QxaiJuZmhqWGxuZ2RoMlIq''@;'; put 'put ''bTYkU2h3UWJVbzg3UWIyaVRkaDJSKjFONXwsI3MzPGU3MnRDVXBXblRHNUg8YSkxZnJsdyxoKTZ5JEtsJnoley5HY0xpXm42OzZVO3pES08wVDZAZm86d0U2Yk9UOEdAelYxZ3ZdNiU8Nm4jdjQ5QmNTS1BEZypqTCRBRSpGWTBiY3AmeUR2Xm49PzdXZ1k3bjhLLkQvbFQqcXhHcl5RU1RYQHFT''@;'; put 'put ''cE9ELnJuUVZ0OFRHdVh9YHomKSp9JTdmOG93KXxJSGs/PUtKQW8va2tfKy8uTTJ3X3dSaio5Jnl+VHk4UEFpOmNAPl4zUVZBMjFfbWVxWVsvN19ST3lLL0R2fjlLPncwK2ZCcSZmdmg0PSNpUFhIeFpPR1hlbTVUZTtvUTY8TH1FZ310fVYlYVROeGI/P1BkPTdtSzEkRj9bQFRxQ3R7UDd8KXZU''@;'; put 'put ''MSp0cSldNWwiU2MldEUpR3M9aTYmZ1VTOTZRN1VAenAqfmxOeSpALF1NLDpDKWghIXRuUENpTip9dF9CYndqNm1mI2VFKXtdIUBoIVlVcTxYbmkwNCpSNiZGPzlbKD4ufGFTQCw2NGF6aVtwI0siZ2AlN0goeDlpZ2pWTms7WXc9MHJHK0BhdGs0JTM3Rio0UihFT2Ngc2lzSV9RKkQ8TWJQZUZV''@;'; put 'put ''Xk9dK3x6TjEuPWxXMX5vSXswIz88KiRuOjBZJS53KXY3PzNuVUZdQXkmUSxlflFseClCZj5DNX0jdDErKSNfcFp2ODtlSSM+ME02KypIOlI7PjopcTxYbXJWRS83WlJEWCpgeWJiME9mTjtGVFAqPSZESDdpLCkkR05EUlY6LGl8aldGRVNnKldkNDBjPDA+dWteUTdlWlN0eHBUWF9qY0g/QFNR''@;'; put 'put ''OVFQNiMxTmdKXWFyL2dZS0hRTzRzJkpre1ZsP3toanxIRFt2Y2RAdzQ2ZUJ1dC9MWUxwUn1xaHhtUj9CNDRzZlpOL2dvV0BbRDt+byNweWlMRXFtSV1pbTY/ejxtb1hfYy8rbVUhYHp7d2NVO2tmeDpNejIkeGElSFRqT11ffXUuY3h6KFB8YUVMd2paPGI6VzM2I2V9d3VyIVAxfWBQMTNfU1Rx''@;'; put 'put ''YEEofDY1NV0jS0MkRFRvc0loWlBIK1ZhUnt3SmxeaCFxYT1sdm57ektzcVFNVHhrVC5RSXwwJXkhXjskeTk8b15YeHU/NChnKno3MDMkQGRPY1syT04rcipAVzo4P3s7Q05BeG1rTmkuUS9CX3cicnxNX0xJVEQrUnZMVEgzQmZtZlFTbnclaXVGUnNwMEd6emA1aEE5Kls2ZllFTFdOP29BJV82''@;'; put 'put ''Wi5qUH0/UUZeWXlfRDQmZDhZaENkKSswOU18IWwjO0g1P1t9YjRbfWUrQSNYKURgUHt6Unh1LzlFeDdfOEI+M1U+YFRWX00rVHJQTDNVezRzRkZrJX1PdzlfSVpleEVNNkB4U0c/V15GcjklakNhW3B0NTI5ZWpQSDNpUChgKXQiMSFvQiUyczhTY2ZTdXshYyFSTyhAenp0czgmPnh0Nm54aVUh''@;'; put 'put ''WClybkhgX0t5PGFLSTsjcVFeVUsrRy95UGlsTGpEcDJoVWk9JmtGUGc8QFhzdXdrbmlsKTA+K1hsM2RrSTIoL2JCNiQ8JHEkIVJhPVhtekIwQig0O3B4KFVfPWFYRSkydEVvfXtsVWpLT0UpXyVlfn03NHZhenQzRmQvc1I0M08jfnUzRl0sIXkkK1s5U0Y6QlQ8PVVzdk8oJVE4cFRafihCJERQ''@;'; put 'put ''dSJbYEw8VHM2aX4qUVFnem51KGEuRVBgTGZUVygsZloveEZsNGBueFNFIlhGd2RzJE1OREJMO3FEN2hwLE5WOW1SdHl9SS58V1ZiRndvYj1zcj5HN006UGdESEhraXgjL1FZN01gNzcjRE1LY1s6Xn01VGVhKHlxTjdscUQ/WCg/TlBKdHlYPkk9MG01Pm9jQk4lfWMla3xFeExZNHU2bjFfVVhP''@;'; put 'put ''UCtbWjdoTik0WlMqZ3ZaKkhiQEV0IlJrdkxtVjJJJUFqSUZEK05bRylkczB8b2doWlpMIURUREpGRDZuVWRxS0lvV0ZLQ3ouQCFMTzI0LEhHUmEwNXthbFZ5Mm4hak8wYjteJXxdQ3F1IytIbDZkOXhFZntHamNhT2d4QXFEOkIlJE0kK2txdk5jJGQpa1ZfSS9fNHY/P2ZzZyxbWTIrM3dFMzBw''@;'; put 'put ''K0lnVENXfltVc0hSWHhvVDdYdURZd2crWXdSOioxMmgmSGQ6Q04maHxWUCVDeE9zTEx4KjB0RltQKF54dVMrXiV8Vlo9aCEhOk9TdTl0Pi8vYGlKY2N+Tmd9UFMuejpuXTlnWS8hJipdKCJ5OUFWKGxMJWlwc2clSCxlTktSeSlRRDwuZS5Yc0xgJGpeSFk4JDhBPDpZMC5jKyludXNYX2c6ZXgh''@;'; put 'put ''ISNBdVBwNWZFMXdHZUt1bExXazpjREo7SnNCRWlSITJRZCMmQ1daYDFmbVolMCElP1ZrJUYrTFU8KW5HR2tSPE09VlFUSSZPd2l+US9RVng8OkNwP3BSdXZfRXoocnw4VEhXWV51RGpRc3BAciw7NnZRNFZZM25rTFAkZDRSKG5sSks5W0Y6UHwoeXtEJkJVI0dJZHhgbnZpZXtqTHw7LHo5K3dR''@;'; put 'put ''TFMqKldSNTNbdWgoakk6X1JSRyloSzUsNjxKNWFXdWhBO1EvZERnK3pmXSQ8Q116Oy4xXUVuMDArYlJ9VFRweChVKW9iMEp9RDkjMWpaZV8jOC85THMyezk/ez5sX2hGL3VESD9AO25wdWhRQDByL0kvbSlhRVpGIVg2X0M2TmFhY3lLN3QvOV1MOnljTWFseSlsO1RaXTRtcTo5bXJXS0tAX0o1''@;'; put 'put ''Xj41Nj8hN09HOUM0T2c/W3ljUjVLZ0MlfCs9OHZHWG1zK2pGeFNSciMiRnNwQV1lXjFgIU85Kn09MEUwPzpYSUxGQHp3Y0ZUdT99Ry5IJFUhSSIvOSJ2JHYydDBXWn1lLkg0JEAwfkJ+RFFxSWN+Z0xHKSZ9IW9mTCpSWXdgIT93M2NuJV47NWcucWNJW280NF8obnM9aUdgS1djWldSNXtLVyp2''@;'; put 'put ''S2guN3s5cVZxVyElTStmO0ttdHx5XXlePVVmSD1faGRKW0Q2Lnd6KVp3ZHNKZylKfiF5YjFJdjxsdjh8O3s6Uz5DIiMqVV1xLnhidEk0O09BP1ZQfj0jbkJDSzx+bmohSW5yNWFAPVtCNV5bQzt9QzMxPi85c1lJTFdFJmNrTWxYJFMhNTxyan13JlBvJT1mXXVCTUozOjl7N0A8KW58a2t4ZXo/''@;'; put 'put ''cXZzZH1jRlZZSUVVIz1ZcSx0NGtMUigsMUc9OGVJazRDPGJhLmQ+K2JtR2laPUR4WE82fUZ1O2E/MzpTfmp8Wy5JamYofihgQ352NE5fbSpMVjwqREt4Mkdubk9VRzJeVTFGUzV9QFhaZmM6UXRfPSV2MkNMVFg7S1t1KX1pd18wS0VPT0w8eEYpOy8jckxfO159K2FuM001RlVTUzcwbjsoclZp''@;'; put 'put ''RlYpfHR9JiJhVSwsQmc3bDRkdHNxQilGJShCTmQvWSRTbzFoIXpML3Z0Y1VDUD5QPmgwbzwoWlhuO0lYZF45aXFMcXUvRktvQlpdQzRMWnhQR1ZYXUM7aXc4I3VPVnR3UzdqTk8lUCN8Jj1ZRUdQbjVHPWloeFpvMD08aWh4X25zRm5denFrRUY+dVlTPjRkbjElay85Yz1YUmslb0FfYFlZM1d9''@;'; put 'put ''WCpEKTtPSSNwVHVjYk5KeTt7K0RQT1hjNiNQODZ0bzspfT9tLlRmKF0qaVVAUDVERUZzfkplSDpbK0JhWy5jQUBBKl87JSYlbjNNazdnT2doemMlTTFVfTdEPy9qXTcxQlB4RWpJTXYoTHM1OUtub2xgbXF6I0YiS1VhbXw2IVJ2UFMuL0kxeiNYLERLOkZEWkZxXXZyNVVhUk1qNVYsLlR7OCJP''@;'; put 'put ''LFJ5N1lDNGQ7IihjRUQ2PT0qYSlUSHZ+cHNvQyJSbCp4LHZpaChhPHd5MG50Oj1LPHsmbVg3IldyJiNhIj1xfHk3RCppZUlzPHNfZFYwZ2J3aCs3aVlUdndDSmZpaTVZMDQ3VFZGWjAkKSttUTY4Zyp3MVI1fGY0RUwlIkdsTGEofFsxJFcmO2h0UVl5WTc8SVhmXmhCdFoxaWloNUgpYV0vfGhm''@;'; put 'put ''SXReZSppXlUwNH1wSjh0JUlAYzh0bDM0TEImdEVFR34vbyRaMHNYVFJoeVNKKGFfNSg/eSs+OklYZW15Wl1SIVdmcCxXci94WDldTCgqTVg1JCheelJ3YFRpWnQqMWM/JXgjLiM6ejVrQENvYSw0ZHkvWDZfZD4lS3d+M2VGMF4sSGZXS14ySk93cGc0RGpnL0doITFbdm8kSUdRMEErfnhOMEh6''@;'; put 'put ''c1BOJmo8aXRsfHRpaD9DUks1MEwwJSwyakZbP1VeIkNqSz9KTlNIeCZQKCI1WEF7NFE9QyZ7W3NsJm4uPE09TWRnLHlwYSklakxkMi51K3szdk5QUDViJndzQWdbY2cwWVFaVjJ2Z1BbfW42bnEibV8iIkokLlB+YVN1a2tJPDFtK35yPGVaO3dRaTU0NUN+NHt9YWJtbFglLmhdeHFZcj4lUmRv''@;'; put 'put ''WEx1PE5PM0NrcG1FYU9PYVtMPUZGRmpPTld2bk1fQDJtbSFKbWFUMitOV0E6bkdDQHkyV3pIMFo3NVVATipNOG4vYXIvK0Z5TH0hQ3RNYnR7R0ppdVJVWHYpJTtAZ343WE9mbEhmclYkM3tgMCJPQXBUaCUpW31lVSxtSnpeK21gTW4kV11AJn1qMX5CWWBUKHg1fkZqJkFTLiQhTUVsVkskMD8h''@;'; put 'put ''bHhVTTIpUG49L10pNSYuLH5uczE+cXo6Pyw3WyMqLHsqWjp2bkU1fjE4ZlUiNH1gZFk6byNZdmRYWmNaS0BVYFNheTA7Tzp6MSVmPUZPM01mQjY6YC83PEB1X2dCfUAofS4+JTU9cjQuI1JPfldIVyQ1XTJmfEU4XVcrdGIyVGxdVzxYcCRxLGs5VDJXZENPMWBvPDAmaFBTNHk3XX1icjsvcT93''@;'; put 'put ''eT9sa3A6cyp2L2ZoTXtQSls3OiwiV2A6ImBrOkM+MVh9XWNNS1R5XypHbDZkOUJeTk11KFV0U3xHamNRTWxNTnAoPF8pR3Rkczg7X1pNS15XQ2lCLmFUdj1BeVAwdXFEb0o8Y2EvPTs/N31VZV8qVF1daUpSNT4lYnJfPGdoW2dwIjpWQFVIOWMlcjUvRj4hMihLcVRXPCpJekRHWiNfckwmQCJy''@;'; put 'put ''dHAmRiolPkNAXk9NKz1zVmNVNG9MfCRVSDM3OEAmRj4sfiN2Jl9FN1VMK20xfm5gaCgkLDV7bXB4Lj8yZnM1Oi52OTsiLFZJQ0QpUSUzSWBxcTsuTE41Z1hURH1MM1N7NnFbU29oK3VvTDtlRkhUSjlHKltSeUB1SjhwOylgblFxTG5gN2Vzfj9ST0cmQSNWV2g5NUIsQ1hPUC9WSmp6KHJVfmo5''@;'; put 'put ''cGMlM3EwI3V5QWtqeG9aMWQuQm82YURBZT9edExldUR+fjN6ZTV6WyQ+cTNqZClEZkA6JSN2ZmlJWTJfNHBZdH54bFFUOV4uUlovdTdxZDIjbGshU3pgVFR8Lj9iMmBgTiVyVnhKWzZ4aHY4eltZfT9DOSshUG9SSTtacHprNUldU1F+NXJrVVE6eU0qPGJRPGRaP28lcUZjVFsqTTJ2Wz9NQllB''@;'; put 'put ''LldCKkg1eFA/TnY+VFdxVl9NenYoVj52bUZBZX4lLkpCLjQsblVePEtoVVlWbXNqQFFzbzBRQyxxKVg+P05hO2VdXSUlTHYueW9MZFQ+WDFhPXxpdm5gajssNDUsUkxsd3pjMEZjTz88STt5VndQPyREb0w0IS5fbDc8MFRqKj86dCR9RWdQR0VSKkhAXz51cl9jTSFxJGR5dTlZUWBzUG4/Mmp3''@;'; put 'put ''NClkOnU2dzNqWnFRTTJkbCNKPm4wdWNIR3xhaUZtPHlkRzZRU1g2V0osWXZvJSMrcSxZWDZSLmA4WVVVTnRmaUl6KVJHXnlMOnBxLFlEfWthKXooUX1AajwjW3NJcE9EXTVxKG9MPlN6b2VPTy5WcE90d19LIXs1aVUhYHA+TmpKaCR8bVlWKGcvLj1obmA8TjwzKVAjY0F1MEJnfm1DekBMaE9n''@;'; put 'put ''KDBGbD1dWiE8W3V9b3U8XURWV3phSiwuSUIpYlRtKFYvTEhfRUZdMmw3Q106fE9IMXZ+XyZLYk9gZzBsQ3t6QGVwZFJgUW1gRDptYm5UUTl6KkZBYF5bfGdzZ2gyYVE6b1hUL3BpTDFpKiJLaTEqTDMoQ0AkJnwzRHZFO2ZFT1NDWXN2MW99Jkd4WTc3OVZzOnxQcGtiRSpELDQ/L25bJS9YOF1P''@;'; put 'put ''Xn5YWWE3P0p1PDJRcUw0OC9pJkJfVTkoXzVBMXl5O154bVY5SHheS05sM25jcGM8K15DZS5ARGdHZ2Z8eFBrTyZnbXk/cmFHUjJAVjZSZEQpZG1yfExuOVl+dElZQn1sRyp+OUphLlspTUxZXXpFLHshbW40cn1Uaj5YRj00W0pMdzRraWg0MCFjbH14TnpOUz97fTUqTnFoVVVhYGxjRkw2SyV8''@;'; put 'put ''ZFtsL3loaC9PcE8yNzhgclAqdyViYylbKHQ6Q0IkIiokQ0k9eV43YThbd1FnQm18SEk2YGVKamFUSm0lWVBhYXFFJjYyfDZbUnw8WEImQj4zTGRGQSNAJTZeI24rZFI1cyZ8b3BjUGJATSI/TiwkSWtQNXEpUGhNITY1TzwydzY8KUBgeFU5aX01LGloNDB0LnlrNC9BPTA/dnZNSU8vNEQ7fUM4''@;'; put 'put ''STRyaSZ7Rls1d0BVWjxiUU4xYXNgbDdWbFImPU96YGx5aDttaXBZTXs+OUAlQCk9RltlY0MmIyJEL28sUGZgZmtjbE9XR3d1dCNYQTUwK1NLMEVOQVMoNVBRdWRHRH1+VWB3QiFtK3lrPkMhKWZjfD0/IVUoU1s7THVwRTxsMG9RSkYhbzlsTGhOfEdqeTJMaDtWRXkiZT5icjZYSFVBWSwmPTY1''@;'; put 'put ''Q0h7Rns0Z2RZXSh0W1VkbSJ2XyEmcEpFbiUwZ3ZoQCpnPzx5ZlF4an1dPlNecHBTWVJQbTtaXTJwR2VbPFNHPHYwIn02X1pGbHVjeCFoL0hIJnlAN3xrSW1gan02QCZhNzhWVV1gRFBjLjovOF1oaDlJZ0QqW3R6XzZAdWQlaVB3aVpMPlk5c3NsSEJBZV5gNX5Vcyl3JWtbKnFJLFIqSlBteEow''@;'; put 'put ''KSEmcEZyc2AhKDYweHwqckhNNTRkWSUjdD03PnEidEohLDA8Y0dPPEI5cCQ2blVyNDtEVDNwQU8wailxTGpeNk9FeVFIWHNhZWl4LE9IW0NhKns6fFkpO05zemMjRzwvb35ydSxgZ2NpOTtIJGNrVVJ9eEU0L2hkMl9idkg2PyMuOSlqTUhvQTNfMm1nezM5OHBKN0Uqe2puQix2byF2M0s5ODJT''@;'; put 'put ''VFh7ZE9XV3NwJW5MVFhNcy9+d0BELHdUIio/ZWs/SyhZJGYkR3JFS0FvZ1R8OHMpTzV5QG5iYy9FYj1FW09COHdVTSk3WWZsYmQ4MVIqMjZiUjQ3O2FnbGJkODFSKjI2YlI0NzthQCtYQiVTcGNTbEc7QTghJnpgS0tpaSRHbjozbCxCSHY7YVVvZmhLNXhkfWNnRGAyPGVaTz1KXVI6IXh2VVoi''@;'; put 'put ''eEIrb2RPOUBbZHAkSm9xcUNlQF9FXntkc35hc2dnQipASHMzPEdvJTp1O1Z7bVpTO3R3RFYpTy5vWitQeytbXlNEc3peJGUwUkRHI3h+IVBlPWl7K2dJZ3dWbXVwTjt+W1pDbSJzU0VLZl4vTzFgdH5VOUwvO0JfZ2dsd2xdPWlpdS5zL0lTLF8sdEtYcX5pI31wUyoxY2ZfM0x9XXZeaGBSPjdI''@;'; put 'put ''cl5aVFlFSTZeO04uKyFQIX5JWDpqUnBDPTAqSV1keT9ROTIkMTJ6QDpTJDh7T1Z3K1I9N0BNTTZhJEw2LG5neEUzVDw7Y3crS05ZI0RZajZjYXlAJnV4PVAzUS4jT3ZjJiVPWyE9fDc3Xk9bUTMwan1hRFNSWmZsKXBYfCw3M09vKW1zNCN5SkwsQD02NSNNMjxrQjlEYGhqNitDPDw9eVF8b2ck''@;'; put 'put ''RUF+WztDQix8bWRZZHRzQW5kbC85KkNLRWBfbk1CW1FGTWRefWoxQUV4X2ZrZlpfMVh9V0gzQ1Q1JFlsbFJ6PX1ZYztIPiVoZzpLOEJnT25lZl9kSDJoM1E6bGNkaHM5ZzMwfV9oZVRkRXU0T1FHWiJkTVhSN1IwT3hqRnh5Z1FRMGklOnY1fDpaTjg6UkZEWVAqQUdHSD5bZXw0WTdWbGk+azs5''@;'; put 'put ''Y2xtQm1FPXZZW2UkW1tNJU5tTDdHU0AoamkhTiIzS1dvakArcWF+bHlLVGpxZ2ZHN0Q5UF05Rz5kSkxYTVZ1RGQsMTJNMmNbMlNval0rM2xHRWBYU153UEwqWnFWcHNQbkxwamB1UXo6X3lkXXFvTGZoNUFePmdJNFdfQ1djTF8sei52VUd7WFNecVIpdDVMeUNbeSp0bzAoQFJgQVVielhhc0Y8''@;'; put 'put ''LjFmfHRuMFAxYCs9Tl09c1Eke3cpdE0iKmdgPHJuQC9tNVoibjw2fntsYk0hazppYS5iaCVtc19kOHpdSSVXVSFAQjZLOSVlODpjdi5wSyw5Pjo0YFk7IlQ4VGUsP3F4cSJVbmc9LmAwN0BZPz5lQjMzU0NGX3hGK25dYzIpQEFgX21BQFFLJVNjTyglM29eQHt6UUlSRD1LZGpyLz9oP2VNOFdC''@;'; put 'put ''cW4qYC44NGB0bnFDUU9kVkp5cD5BP35gdDU4TCU1WHtiZF43RmQ+QjBgUFQjR3xWMiU6bz5zY0VtYD1dfXE3LGpSIVlBcX0lYVE3TTF5blZBOVczSTJ3VWgzZkZnRklGZkA6cWdrfWR+SzZQWTA0fUFgeElDbGQrPHZDZTdVfTdUdj98UV5+cXNbWDNMNjIyPDdaZTRQXjJWZl1vfVE9LzFiSWs9''@;'; put 'put ''XzAzfT1vMDB5NHl4Qmd9QkBgQ3BBe2Ayb3ZZaXxfclgje0I8fU1VYjBhOzBfIkVgaU9LJm9JdVFVXz54bDUwfSo2XlVfJDp1ZUU7dWUwVDJJfnhufXIjbDoqX2BoOyxaU0BWIVA2M0BwN3lfL0A/JiF3fFkmbmdTNCYiMzVLJFZhbjhLTnNrQ0F6Q3hYSHJLcURIaWdzdWxmJmtUVXdyaFtdem55''@;'; put 'put ''SHxyNDUuZkNlIUtfVjRyY1IsTEhdcDFbP1R4LmddW2tuP0JvUzBZS3lYYHJRMzlgbmQ7c3l2KWpOKj1HZl4pS3h+VTN0RF1kakd2OkUqOGAodlJKeU8/WD44bmdRXW9QXUFRSWNARz4xe1Q7MTtsJitGVylVN2g6azQzTFp4eXxEe0ghZTQ3fGEpL0Y8JnU3fmNQYztyLnVmSnxuYHZsazJEMzo5''@;'; put 'put ''aV96Tml4OHpIRlh5OC9JbXVrIlNyeF8uLjdMcEIkSWZNcTImTlIpIXltXlVpdnU1JSZLTixkYFM7fGAxeXhicDBRPkFVU1V0bENwPl1II0ZxMWVnfWUvT08iL1pQWD5qXn0iVUw0PmRPeFtkUVpzPnklXX48IngpTjNAZS4ibiZRIlN0RkZLQnlJcFByQXE1bUdqZzh9TXd2SzxAdDNoKSIvJSY5''@;'; put 'put ''TmRPMUVzVzg1RGVCeGMzT3A5LCksL3M9PGl0PVdDOntVWGxKLiVoLkh5elVZZU13MX5pPWxKOjRrQikvYHd1QVpZX3ckcSg/O2ZifElneXtGP2V+SWduUFd2bnlUVjZbWnZ+fkJtMEA5aVE1KSVkam1jNHlBcXJzflZQc3VQbSRyJExoYFJEa1ZDU2oqQCRZRFgmY1QmMDJpMylCUkBQZlozaCto''@;'; put 'put ''ZS41UUoyVj1PbjNdTUBaXmQvdHFuSSxoWkMkTXQ4PF9rOyI8UElgPkp0NXx0IS5DRyI5ZS9xcD4oaUUkal5WSXJ6SVY5RFIjcnBCS19yJjp8QjNaTGVpcjR9fnNLY2thQTNLSmo0Jjs3ayNMe1koQm41ODo5e0hfO05TVSg0Q1h4e1klUkc/RDk0Yi8qXWlTK2x+TWt7X0toIkNZIVt2S2M0MSFm''@;'; put 'put ''MyFyL2B2NWY2VHMvKXk7ZS9gYDx3NUNzNyQ9OlNmInw7cTpRd108THBbXl06KSplJjZ4NmpYQFhxZHJjRCVoI3BvUWFwQ2JTakBUKGFtUWQmMChbWlVaViklZlE2SyYzZE9zdHJ9cHtCKGRve0Y4NWpyV1dMX24rTTZBT3Y6Y3sre1JqaEcvWU1jaWl8MWE4OHo3WCxjYiMpN2syNHZ5Ny4uM2V1''@;'; put 'put ''VzxUd310YEFVW3xJVD86UH10YG5QeF1SbXVrfWBlakowcTZsVUheLH1vXlQ3UjowRm9Wa1QkNkdJe3ttKG9rU25MNng3LFpKU0B3VmdoeFM9P01aMCQyOU4uJWlmQEMlSiE7b2FBcWA2ZW1pLDw0Zns3LHRUYVFWc1dJO2J4XS9jRTtvZSN6M2NZTDdIYWFnaHAkWTBSPWBtOnJdOT5YWEQvVC5N''@;'; put 'put ''XS9GdUZ2aFA2aE4zU0lyVm9DOl9pKnp5UyRPSF1KMi42KWBqX2dgL1tuRUQ9JSNWJXB7SXM1ZDBvTVp5NUJMSl0lPyhmZFEjPWslJWJwLGQ0UD4weiFNMDdZJHIzezh8LENPcmQrRjx+KV9beC94WTdsPWA0eWk4NXZwWCpyZDRnMGlUYHViJEpAIS5HUE8/JHElSFssSClmOFNecHxAKFQwcnVV''@;'; put 'put ''T2xTQEYhIVIjT0pKWHQ0Z20uQSJXISxRY3UmLypAaH1DT0lKN3doWDVQSnQ1Y1kub25fYkMwOi9mVHR3b0NnQEFVMHtDYHlHRTNiUEVBM1JObVRzRS95KnReNWdCU0Boej0hTEgsRy9CLkkhVzw8TVI8dEooRykqZkwqRCw9T2d7ZkRdRilONUZTWGl4VWNtUDlRRnRQaE9HTnQ7UlFROEUjZmYv''@;'; put 'put ''bjNdTWxMOEUkPFZpPHdYTCNCKlcjRmw5InFbRXxoYmU8TVBUZ3pea2ZBey9bd1dgUEp8aGJleE4pRSRlZCohMHx2O2h9JmpnWzdoRlNSblpkXyZlQ3VtaWZoYGdJeiIlfSk/b1dqMDgiTFt0UVZCe09UQyNEYTFkfVFKP1lyalBHOnJLUGNpRjU7ZyhwR31OSzZ5cnhybT81UTlGcWFediY7ZVhZ''@;'; put 'put ''UVpOSVFdZDFfRE1rKVlxM342PTgjdHlETCRDfCxpekRCS3FSJFUvL01ZUyZLWXV9YChuMktyLz1pJFpaUTpvQ2NBU2MxaSRkSE9MVmBaYGFDTXZwJi5EQn1iMVtZXzw/ZiFVQzVSdndOPmgwaTdsYSkkLyJeNCZEbWd5N3UwQEYzQSt3RTBpUDsvNTFDb3AkNGpYQzVGJT5nW0MrJWBvIVFaLmdz''@;'; put 'put ''JU9oP2MwR0psdElzOEkqfCNoKl0jNC5OT0Q4QkIrNHdubTBgQGVoejI7PVVVIzhuMlp+ZDt5PU1yYF4ldkUmLClZfURtfTp7M1J+ajksQVVFZURKJFA+ITtJKlFmN0QpVS40UEhkKlpSZk0pYEVfPn1ZKzZddzR8Iip1dmRWV1p9UWwhQjoiSTBOfkdYQGNIZUksTDhQPGFRcUp5K2xsMSFeOm9g''@;'; put 'put ''aTIuK1g1Zz4pYW02WC92Ok1mZio4KTk8Kk0yWG5iSiMuWz9DPllOMiluJTxzd01gOHdVTUtMRT83ZFZuJF89R3l5LlZzY08qPUVKXlZKODI3Vj5FSis5OyklUXUwJk0kX0BmSToydVA4bFA5Z2JoXWB1fFE+Iy8ib1JXUEplYFVXPWs8Wi9JZzN6QDJsJmY0WHJHYFV8QnxVKCF8MW4jfWttaHN4''@;'; put 'put ''OnpjWTdHQjM3b3lZTXhFKyRGOVJlVTUlSDNsOktkPCtnO00zMzgqcW9dTyU2PiVgZiZ2TklQSnl8NW5PeX03WDI4YVh0JjEmNi45XU5ZPnIyeGJJeDR1ak1VOVFuUjwvPzU1a2B9fjNeNyJnQjBdZFM7LnkleVIhdm5MSlFGR2J3KGs1QUN7KnxdV0dWVWhHIThNJExKZDZxO3Jwdzs3MDxle1Y9''@;'; put 'put ''P1thU3M8dHZQNyM1a2BWPW1NR2w6YHdzajZzO2A7QXRzRnFSM2w6dWw3VyMvampOI2JhaXoiM0JufGQ1RU9oYkdFXWh7V2NwZlFOSl85dHplX2hdIyI9aGloOzE7eS40WE9MMFJAOWJeMWFodHsrP1t1d3lafjdgbnRZXkVqI3dsUSUoa0c7azJ9bncjd2x8OGlBOn5XOEhLJk0hVzVvQV1PVWFu''@;'; put 'put ''dGIrY2w3OVBhW2o3KVJqakFuMUJJWlRXXiglNzl6cFU6Wjhnck5eb2VRZkxsYyRSZSxvWGteL1RTLCt6dlNAYipjJjBgIlM4U098WWowY3ZJMH0vMnV6Vl9xXjI/dzhvQm5hSypwKiUhN01gSTE2JDBOOS93bENyViRkLEZXQzghPCIkKWVGJD49dSRQPWZCdFM/ciY2ciRRW3JLT2lsdCNOLkcs''@;'; put 'put ''cTFrXzp9OVksNURlQl9kfWZOLzopRC86KDtQTiw4e3AjYSM/XkxCZ35rR31dZD1OMkohMFZMT0UqTFRJMyxqWj1lKiQjbm1dTyw6LGQ+YUFUK0R7MV9kJCFmUXtVcztTZC50e0Bwd08sZ3h1bHtZQC4hdnpsa2k+ZE1eKXdaKVp9Jnh3fSpfdXw/PWBeNyFOU3IuUTdqZitnM0p4NGB6VEU4PUw2''@;'; put 'put ''bixpKkE3TmRyMGZjSnVJMmlGfV1GZFRnUDNdcnl6PmAoOns0bnNYPC43dUVZQHN6T1hNXWxwL0ZCam1JITdqakJrIm50b0IjbSt6VHJMdG4pTkY5QS81Y1JNTmF6KzIrI2NVRCE2SUdiaVY3XVkxJEZHdjUmWVh6MW09ZH1uJiVXLkg8P11pLmtqUT5dczJtRHU8MyNJSkpsdCtMIUxleDdlZSRZ''@;'; put 'put ''YCM+NDgxIWM7fEJqOGNhT08mc09uP3VsYWo/V0tMTlcveSsxL3s3Ky9TdjdTMkBrLEo1N1NeP0NsZU9QN0ZjZWlzdWMwWFljbHlFT3tDQ3hXIyJwMTtMTGheRiF2MmA7KmA1QVQkQVVXZXZgNSZOJWNNNF8/Q2xVLjJ2dUhJMiIpOXhyVjh2KXh2Nkw6UC58VHJ5JDMoNldefWokWXRzTy4/cjhJ''@;'; put 'put ''Nk89V25zM3hscT1Sbmt8RGt8ekFnNW9WNSEmTFFXYXYqKD0oTi90XiYuS1pkLkgpPWJtcSZHLFQqcUM8Sko5d31dLGsuQFV+eV4oI0xjNWpbWzAvP3Y9e3dOSHBGYztMUVdHW1MmPVR4L1RTTltwS2Jyak5IcEcvZz9VKDAhbDohOkMwQVA+PGo1XU0kY2VfdXgycylEMVtHRXBlJjNDZjV0ezhm''@;'; put 'put ''I0YsVVAjfUVBMD4uaHlFPSlvcThHOj1TImtpS21tWEQmdDJ3blRuOnhPPzdKaWBwKmp0bT91MSZnUCwpLmo+L0J4fkZJK0ZIdiNWYF4xQzNMIWdtSzZ1PS4lSFNkdE8rdTBrZEZBKTZ0Pz1pQ3o6QS8lSnIiVXVsW1gyMjowRnFgaFsjfihhSnRPc2xbKW5sJm1lYXwzXmhBPHBKdCQmNkQsdEld''@;'; put 'put ''c0B3PCthYVEkZ1NIM1VPKUQ/P20vXS9Pe0R4b2s6W242L3MubTMuQ3d0X0wofXlBfj56QyRlSVolNyNWS1RWKXlERFFKdF5sWCQ2azZManJQKGFScClAYDZdPitNYHVte1lzSVE6biVfcGArZyJiS1dBMD1KME85NTQjPyFsVW19Q08vRTs6emdRUlo1YHo+UEd3RXFwL09nfShpTXtnSEFPKmwz''@;'; put 'put ''L1shNWBuMUZnZ0h1REk4NE43XUJlXmhjRWQkRzc9LnIib3tOaXE8YnVbK14/fEcoZ0FGW2xaQTkvSFUuI2dVVm9tNF1XR29weFhJV3NGKH1DQXxiejQzR1ZOL3hFRDZXfTtpMS9sS0lPcG97Z1VPaDsjPm4lb2A3Rk1PYTtzVmkiaHhhbHQoYml7VlR4Xl1bOl1GODp3Qks/SFdyUX5BQ0paKH5D''@;'; put 'put ''O3tPWEtfbktQRWNyYGAyWDZ8X1Vrd2Z9TSs3YjRXK1YsdzlfbXkhYFIoa3ZbLlIzKTVvTzl7M3lkVTx4VTk4d2FZJWxqaElme0hSI0s7Z1tvZDIzVSE5YmJje2g2YyRnZSVdNF40QmVBY05fTH4mJTRgPEZhK047YitZN1t3I0xzZTRofTFOJSV4NmB9JnhnKX02LmpuSExfKnJEcH1Gbm0+OkRk''@;'; put 'put ''Yi8mTSFXcFNUO3AqNT56ZnB9VEhTR2NGPl9bbFRVejFoZz5veW5yZmgmL2RyIlorYWZoQCNUd3AzNV9vbWt7OjNKempQJmFnXkRuPlQzeE49ckleRXtJRH0hbCY1LiJLe35WQm0zTygjfklwQl8vWHR0fiwzXU1ZWl40UVZqfFNaUkg7LnZ8S3I3MXc9PEBkNEM1ZUg9U01mOExfamo6fnRDIXQu''@;'; put 'put ''TEo2Rlh4OCoyaWNOY3x5VnphXkRIdT5WaVVfKVcybEh7Ql9bOl1wW0BsdHVlKjxMNWw4JWxzU3dWayg3PGs8WH1GRF9GQDNVbGFZMUUlXXMpTT1WdDMzdlI9NE1TLEtMXkJuTm9tKyF+aSVGVyl5MU1QcT88VSZDci89JkAlIXV3I1AoZ2BpTERoO0BWUSFHWzRPMC9CS1JES1N1VGlsTnIqSmYp''@;'; put 'put ''YU5YJmxTdTl1MUV4NmVySjwzfGtrckUpQishd241M0FiWCwlNi5+ezZQfGsrMDNSRV1qN3BWNF1FdzlnR0YsN1djW3VLYl9sVDQxaH43Zz4zQCxTNW0jVTRlYylhWXc6KCh5ZUciamZaWXdHZFdGOEhMKCNaSjVvT1ZFSSMlKU5vaWdxQ3J9VF1eeTNrfERJQ3ZfOXVXWmZeNVJVdTNjU1ErTDRo''@;'; put 'put ''M1pLZEpkI1ZeSUt7NUdJJldsdzkyL35DZS4ldjhrLFgzTF12KyFAT0ZIOC8/NF5IZT1ENkpHR2pgKiRJU2RlM0FBSHZnaSQwYHpvVVhhSkZwYzxhTW5rdzZWT092a0Y8aXRsfFhYcVZkdixfIzpXbndRcVNUaXhwMD9vPko1N1h4Uj51SG49bTtWaDF1RyNWX1ZHMChvdytNMC9tOTBmamErOVh+''@;'; put 'put ''bVh2O1VFUjk+a1BsYTB0KyRGMEcrNGszX2RNaUMoaXYxKkhNZ0hoNDx6WW00UWp3ZSZDQ0ROKn5yWXRUTlY1bVo0RF90L2gyI1grWFJBVEUlIURSQFMvenNKPjY1ODVTal02MC5AalJ4bXxUWjJ8fjQhfTloXWlJYEVMRGlLNDhrTEBCUlFaa05vdT5bYDNpc2NeYmUiK0woWiZec21BZH1sTCFr''@;'; put 'put ''ITtUdDRDM056Q2deJkV9IU01PE0jTH1qQVFiKjtAXkoobkpqaHh6Pz97MmdOPlFVaHEyZjxFUUFdNj1mcWQiZFMsWSNjOypHamZbTEVGSnlWUE9LeGZNcFlnbm85PSFMIyt4fG86aUk1cipMZmpzXjZDby5RVSE5MUA2Q28ucVJWT2ZbJkkibjhnXndhdiE5cj5zdll5IltJZkx6PVRTIS5dYENs''@;'; put 'put ''O0ZHV1NAVmBmdk4jUFp5cSNCUD1mMklSOCwqRnx3JHpSd2pfXmNvcDR+dURudGtbKGhvUXImK3AzNFZoYChfQVA4cnMscWRnTihUSn5wPkh3W2ROKmBHenovVipyR2BHeFQzKkBFYFVmfEZLe19GcC9kcURwdDQ6dShfWmlxZGF5JWF2MDk0NGFWV34mcjw+fkx8OExDK1J9RGp1a3ouSXl1Nm4m''@;'; put 'put ''Sl9+dGhsJW9SYmVtViQuOHNaUiUjZCVXRjhne0R8TCM/WGwxPV59NXdLJTZSeyZZSERtLmJVKG9NMk8yaiRsMyVuXkk7JiFXJjclL3o1SEJ9VWdLMTtQNyUveDVORCIlZ3EjZCE0JjdgbnA0K2NpNSgmKFQmUnw+VHo9cGZBbD9UJWEsKGIlR3FBc1F+Q10wSitiRSNEW2RtQUtXN2BzVDdyO0xM''@;'; put 'put ''Q0ZIbntnRE9GR0RaeSImdGpGQUo5e11yeTxlUlU7fndvZE41NVRlU0R+eXdBUHlCTE9BQkJ+TmleajI+VE9hOmNoQF0vOT5scjU1VGViSTczKnBffGpac2ovanxWNytDRiRgOjBjW3UsW3chKHg1WCNCY29Ld0tsO2lmZ3FofF0hSEBIaTJiMDsrLjNdNWo5L2VROUZNVTVqOS9VPkVxIXEvNiFX''@;'; put 'put ''c15DcVFLPGt8QGlfVG52IW4wPGVSVTN6aU9SJWRDKHxFdEFMZkwrcCN0JW4lbiRuVWZMSmhxPlQ+VElFSU9AViVXJmx2IVh2Ukp6Lms6PCk9KVdyRzgsNWJxemZudCtAdiF+KDg8Q293fHAsbVtEfEJ5em9BbnY7OkhSPlErXXI7fUU5d04qUk4hUmIlPVZrckdKSTE/UFkuPmJ+c3NyUHlQMCsl''@;'; put 'put ''eWgrIjtXRXpec1lAZG9aZD1OVVcuJko9Xih2V0t3S2AvJXdOYzJxfm9VWkw4M0IuJiF3bT59Yj9vUmxbKHtCRFNIcGxwUU0lQG0/K2NnciVFa3Y6Q0FZYGQ0a2AyITEzMzczaDtmWn5MSzwhQkBDSEVlfFNOb2A8fDZEfkdJQ2tfdmhQeT4mSn5FZ2tLMUhIXyE8RFcxSGNGI2EvWCFvKFRkXjw/''@;'; put 'put ''NTQrdSRhOUc4fCIuSkNrX3IyYUheOlIveS9oM2s3bnRUWjdHeyxUMnpLMEMrNDN2ZihEY09pNil1RDJEJXE/TCFAMTd5T3dpY1FLP2EzWFYuY3Q+RkYiLDQ7NmBWWjhGYC82YDpdRzppYUBESkAhPC4zOFFAVkRpcD99YnYxUCQqcl9xRmAmKlRRTnk8Tm5nfWRZSyFiP112emA3aDQ/fHlBaXhx''@;'; put 'put ''KjAwQW9KTnQvYCtEeGt3RitFQU06Wjtic3N0Lit9ZStfIUhzMHRYZ2pMI2M7T3JNY0NQPHpFV0JQdU5oOWJ2KEs/aCpCOFN7UmNfREE4NzFAIkM9PnJuU1FnNDozU3MwTFQwcSYiTmhFM3B2TFldTmJ3QD4iM2BWQDkpK091Un4/KW0waV1NbHlNRW1CNGVWOE1VSn1HMiVGaXhVXWh9VGMyRWFR''@;'; put 'put ''W2oqYlEvOHBnOiRufUszWX1eKUM6R0okNUpwIWU0T216LHFmPmR2OSY7P11oaHprWzt0UThlYGQzfit+dX5WME13YUk+eGopKiFtSVpXdE9INn4lNE0+JiFXSjpyKWkwbikzajkvXlR9KmV3djV3RWApbS54b0s4ImR5MjAkITYjeCM2VjdqXTB5RExyPk9CeXl2NT98dHNgfUkpXnRyZyRgIUJq''@;'; put 'put ''MStoKnQ9MzdRUnpeYm1ob3tZNCUlM1tVVj5lfHJMYUtBQVpJdSxkbkxWM0V8RiQ6enhgfilsVHZgKDxCOFklelJ5UkRme0dbeV1UJWdzeXs6SzBEaG9wWF9zajJINT4oOCl8UkM+MmVFdlptKVRaaDd3by97b3J8bio3aT43MEpleT9EJkY4QSZjMyIqWzxvUTtVfm5kYHQ1azooN2VrQzs/clpr''@;'; put 'put ''amlRZ1gsI3JUSit9dGJvW1BVfjlJSl0lRTksUDFlJVRZJkI4WnZHbnQkNVVobSw2TEo8VDMjN3A/PEg6QThFOSRlQ29wVGNPbEdKY3MmV2pSMGNfZWtuVyw7eEcobEc6VDZVe2tIJExBNW1CQUE/am9BVUU0V2R0NmlxKjJFZUwkZShwR09IN0hiNlVnYl1JeC57KVtGM1JRQ0lBQ0FBQU9HbkdB''@;'; put 'put ''QWRaU1Z7IV1Qc1ssVWAvQVNbbDRLcTYqRmBeX3h2KTcsSjVWMGF9cERDNXE4VEcqUkx9RGM7b2c5cXFqLiM0V3VfY1Elc2JLRjpHYjpkfHI0JDM0YGwqTzxMKkNTMmtGXjtAQ2RUI2YqOD1geitWS1IzRWA4P3xtNEU5SmtdRXd1NHliMF1xeSVOfVk2VktLcWpJND8oVWdJZjxRN2IkLkU7L0lu''@;'; put 'put ''N1cwVU00KSkjQ3lHYktSYkc3PXRGP00qOCNTdXYsMTJ1clFtJiM6eTckTHdIb09lLnEwcyxmUXtfRTpgaGtGOyksSmp1W1UwQHl4T2JMXmt7Y3BKQEFAfSU8eVREVCtqPDRBVVlqdjZ4PCt6UnsvNUE+QVIjR30yY0YvfT18ZjkmSkZyQylXeDUuQioyKEowfEVtaWVCIWx2aFk9UGImQkZIPVtm''@;'; put 'put ''QDhJeCpXXyV7fGNoP3doRFdiPChPIkA3TVkhNF1YajtXRFJyK0B+PzghTztJdmMxXS5HTTpPM19JLkYuUHlhL3Z+NFNKRmI/LyhibXY3IV4jRTJBP2MhdEcubTcqTzZYe2pNUTFkcT15ImpQLEc8T0BPL2pIUHokQ1c1LzghY3oqdEc2MT5mcUF9WEZOJXo4WnBLNWx2bnVjWTk2Yyo/e3ZQSEBn''@;'; put 'put ''JGhGVENzfEdHYkRiSyZ4TF5tOTMpNEZrLnFsYXx6cy99MWxDQnl+dUUwZW9rdHMxOEgxPkNKZFNpOFt4fiNtMClec0xiY2xrTmlbSWtTJGZlVm5ROEpSa3VuPiZOZG1uNWxzW0NPan4uPEhkZHg0XntTQW0mUWcpR1B6LDBZXk1VZFpZa0B3bFJwKm1TRGs7dTdYRV54R0dTY2NLW0QpU0tkWl1s''@;'; put 'put ''UiVOMUlKN3FAMF1kdiFIJlI/Yjs2RlAvWjtqNzI5Kn1pcDFZckdZZ1VzbzV3MWgvZUNUXmhPcmN6eWBPTUY5RUI2UXsyKX51KSJNT2AkfGcscUUlLkpHNGJ1U2JnNiU0ezBGOHRIIzpwOldyZmh4PGhwYXA5P19IQ3sua3NkMWFtMz9ddy9mTWMhODIqdnt+czVua088Qj5wd01edTNKK15sd0Nd''@;'; put 'put ''JEB3Q3IvY3Vxbz9kITlhI2k8YVF+a0EkJWc6JEdZfSREUnNNUzkzeEZLV2pqbSxiTCNqcmI/TD9qOV5BdkI9QEJvZChiMm1+PjBDTUZ3P1BoKFQvTzJJcTd3XkFhYzlHakApfGwwbVolZ2lKfEs9bHlufD11a1Z9UVswT1F4fChASEAwOVYoNXBuSyp3NyxuaWdqUjBjR3FDW21sOU1kfThXaXVQ''@;'; put 'put ''Xm93fTUkOFZvQWVHd14iZmI2X0c2Y0UkTkN8ayojP1Q0YjNYTWBxRWxTQnhgST4oMV5vUnE9UWZkeDBIWzxBZClkblREJj9qZHcjNmplQW0jQEAodSIsUlFfXWVvJmg4ejZXWnpnLDUsRlp1LmhJQyRKYEkrS0VzUTwpUixYOHdGYCZfTXlHOEV1fSQsPV9YcW9uRXNyKnozWkYyL2NkMU89Mk9w''@;'; put 'put ''ZSgrWWpVM3R+Z2lxIk1FS3NxNiY9YHQ7ayVEKEs7d19uXyN4cFUrVCR2bHFwJnIkbD8mfTEzLCY5LDVbUnl0RjpZOUlIOit5UypJTGRkXTR4bjRMaUZHMnJvcWZ7YHxnaWRkdkNyU2xMP0EjSlY5NVlJc2pYXkcxRW5HW0hfYUdsXi5hMjRXMzk9JlV4bXA8ZF84PVtYbkloU2RteCNmLzsoQWhB''@;'; put 'put ''PmVKX2xxQDVRJW5RZnpwfHA2aCJ5TkgsNTBDVytXX3ghRi8qTjhHRSlqREUpTS8kS1MhOy9HLlcwZ3VkVmRXSlFCQXE0X2tnLmleY3ldUHUxPiZIazlnZUp7bD1uWmcxYjM8T3sxSikoSWFabjx7fiY+MVoxOlFlfFddYWBIQCJVX1pfISYrUm98NmhFWSFeWj8kd1Mudzp9VSs/ZCFZOXQrZjtC''@;'; put 'put ''Nz58XUJVZTt8Tj1wI1AqZk84TUJtWzNIT19vKWdNcWpOTzVDbzhFZE99Xih8bmomWGBJVkNxYEo4ZTN1V19ILEM0NW9Teyh8W3wvK3FqSEs0fDJsMUc3NGppblJ4QF5sM0dpPzdkKXxOLEFaRVNgUkhENyorMUozN0tWTWNCVComKk5MODlVO3RPMyQjXXV5S2RJOlcwO0VaME9VRjgsZDlQfXZf''@;'; put 'put ''RGEyV0xPZGVdVjhwKUJ2SFVzIjI3KTZLTF4vOVpkcFZSW2tMR0JoWSxIcjU7aDIvMFhnMjZGbVErfHY7T0g1SD5HaSEmNEE4aUdALkdBYntqenU5LEdeR3sreDQ3I3hQdFI/d2FoVGRzfjw1NVJIUkR1JUFXeHRbXV9eUGMoXVpXPkJxPGkqe2UqZCQ0KXkkSG9eRUdMMmovb3loXjZzMVR7aStd''@;'; put 'put ''LGVsP0lsdlkuWSlQclo4UkdCQ0R6UyFFalV1cDI2dG5wUU9VITV6aWIkWHxAby8pZWprSzNnR3YpKVhpKyJgdGlvMXgofkVHaEAuKGZJNi9QWjl1LCNuOS96aTNYSVM6ZitWWXN9dl4uTzUzVGVESHdOWE1zfkhOWVpTZFQha3lySWdrM3gxPU9hZTolcHJsWX1iSmIuT1UlViVnbjxJYnNwWWk3''@;'; put 'put ''I104OGtsdSVVMEU3czw2XmBfVyElST4xaThiKCl7PHl4T25tXSVEV2g6fUFyeDQ3NmYoVjlWRylMKV5rVGtiNC5qUiUsZ297NWokS2dHZH14XSFNaXNvK25IazV8fWBna0ttSU4wayspQEttWGlOUC9UXmNNTFU1cmA2LG5mKm53b0pVXyNQfU46Z1p0VURxUyVDSVVDdDFkLEdKUz5xRzBjZVlu''@;'; put 'put ''KUtXcnAiL05jZGF6I3VhR3BIdGwmQ1QwZnhIbXZOPkF1WHMrY2Y8WXZ1LlImRWl+X0VGSUNySC9xRFlERSYmflFOLzYjUnBofislPFFUcXw6PTdIdHpmSmA5d1BTeytmdiQxdXZxPnpjQzY+RzltNDdnSD50Wm0zfks3NXR9bmRiMHxMR215Zi5fR19UdHApR2J+UX1CV2E3aHMjM0BrRz84dUdR''@;'; put 'put ''fW1RUGpWIndad3NHaTtkKzplT1dWTC4kOU8ka28+UDYxWnwiLFJ9JDwmaig1e0VUazQoWDdMMyl+bnp7O28iaT9jYUV4U2Q4bURoLng/WiIlYkxOIUVJSixPOz5FLnF8MmldN2hiUEdQTGUxUiIlbnVMVV09QE90b2k3Omo4N3gkJiVDX1EkInJhJEgxLEpLflo8akxeKThpbHlRYkAkVHtOKHhp''@;'; put 'put ''TD49P0xtcE55ZjhIZndPPFRmcChie3BLeCVMUWk3JF13MTZXOUNHRSRFSzU7Kzt3b2g7ZU9MI3hZRWRXTFs2Y3wvLH5dJDJiYzRKb3VqNU49Vlt2YmxTYyNXOT1ROWk2aFF7P2J6Ty45RzBOdHtBeU83L2Fsd1RIL0k/dXkrIWBpTFRsJDR8Pyw+MTBwYz1FK0Q+RmdLei9BMCYuNit+dWkkIjV7''@;'; put 'put ''Pi5IZ3tlYW49aWtMXVhleERFQm84cyUsUlZUKjglLERiKXdZW0M2fDhwVXxmZXdBNVReQHw+YGNldWI/V0p4XUdNNX5EQ3BZKmZGdHNLTEs4Wm11OkZReVF5PCM0JE0lPDdzSEwyc2w0MTBMPUNlfXo5dnF6anNJaGkrJTBGQC9YSU0qVj5mTTh8WWM0LlZHajg/flZ3b11dMWFpXyM+fEZAQ0hA''@;'; put 'put ''Mi9lciUwLDBhWFohRTNtT0pMIW56U3pzdihqcz1pd1hdMSN4cWxuTTN4UVA5RlFIInEwVzdieDcyNnBhNnZNfEMrJE19ZlRqU1h6b0dsMjN5bChEJTh6dXlJJFdPSChII0pJQmMlcVFgPTN0YldNN1BLO3JRYXdwI1ZnNHVkKC9JNno3PiV8cTNAMGhUTDszQHc4c2VNUUskWkV1TU1pKTlHWysu''@;'; put 'put ''dUJEKT5SZm19MWFFWXA5IT5xPlt5Oj5GdDFGKjlTNXI4SCRiQUVYSlNddUZTPSx8c2NrbURaNmVbTDB4b3V9fX1kYjBxNEFXdUd+YjxQLkJtUnJkYG5KYlNEd306eE8lSXBXfmJvfmQqQ30uIzpNQnxqZHIoT3ZkN3o7XmVWWXo+Nnk4NUlJR1ZzSHs9UzxfeDs2d2B8WXNTa0gwSGo/WGpdeCRX''@;'; put 'put ''OyZHbnBVJXpEbmJnbyFFMGRDMyN1aWUhPy82P1Y8ajg3L19VVU9HL0UqQE4oWkJqVjgmYUJ9VFJrNWEpWj1qSjNYLzhgeTtuWyg8NGZqSmMzMXBgdThwbmMuW29ZI3tEZ1NuazVkYnBZflhMZ1I8T0BFL1cuMC4malAwTkApa29+YmNEPF15MT5fOVkrX1IqaFRsYUV+RjNtOnZtfVp5N0JOfkdN''@;'; put 'put ''MD4oTj1PckgsNiRFWjQ2VXE0RnRJd286dygwL0pIPC5OV25gQlZsOWcuI0ptU3AoUzkxIWxMTWM4TlV0ZyI+fXIwXURiJjp1YmY1SEhHKnc2M3Q2Kkl5YFIiJkVjMVUie3paVlYuWlghaWlgPSx0W1UsTzRuT2puSkZ+XnxmW2JEP3FiJSs3OzNEL3EkJGJIUV0rUVU2VXQibGwiXWFjJldzbiRt''@;'; put 'put ''fD15PkY2ZDFYezJkMk5pdGUxam0iIz9Db3tsTlJPfCZ4flQkU2ZqcXUoOVZ6XWxCcz9ucEt0Ojw+YSx4a1dHRGgvP3RmIXFxXSsrU29EJVV4bD1aOWBHI0pqQ3wqV2tmb35CVSFwOyIkVSRDQTpeV1VnYjg7UlttZ3tITV16e2szZ0FJMiFjNkE+emtFQ3c4LHl+MEd4RiYkfWo1bF9oO241cjsj''@;'; put 'put ''Sm1WcGFUWHY2fCwlclpIfXRFUGVRZGlKVGo1fWdfP1hoaS9mMltYfUYlXUF4WUdQPGh+QlEvREk7N3IrXX1OXi8janRxbklmeTYrRV9TKj0+amsxXltHJEw5LntzekNuOyUmbDFkVEV6PVo8K0ssNzNMNVRCb0pNI087O1treiUjKWd0dlQqWixGPjR1US5AZnlMQT4jN3RqR216d2s4czVEbnl4''@;'; put 'put ''azlAeGEuTzxoUHtHQF5NL0F6N1cmcCRMdn13MF9jLjtPTStxLE00OT5EbW4vYnIhXmlNckwwQGp8P2U7XyxDeF4sayFXTkosRElrLHQ6P1NVUWVZUTZVW0hZSG9Ycjp8VUIvaHFjMVoqWyF1Q0ZXakJgJm9LVSMqSk8lQCQlPV1ocVVYWn4hPGJOUV5fTSJWUzlwJlJJY1o8O2BHM0QvNlJnKH5V''@;'; put 'put ''ND1XViooSFVfK3s8OzV3czAyK1Z9fVY9MGpjMCRxOGZTSEg8YlFoMGJVWShdSGxTOzVZfUo5SyE/SFZvNjkubWl2WD53LihqbUU6YykxdXxfdVtja3RTKTEwM0NCYklGK0IpTDhSdnlVS1dgI3MoW3s+VT5Tdj53Q2RubGg9U2xldGIqR11IIzt+KDt7fjw5O289JXErO3ZMNHN3MWJRM2lmbSEz''@;'; put 'put ''fTxFUSs9fD5oI1VsSF5QNVR8IWphYEowa2VUcTBsKj5FTVMvTS8vY2t6T0pEN3I9S1plWXE8QyNuXztoOHkua150eElRMV9oJXAhIU11Rn1vdElUMVB+SzdsdSx7Z0pRWD9HLE5nS1tiVShLTzNAc2JhfU9tMHIpPklpOyFGJDlJU3hbYHdKaFVlRklIY0hWKSFLeU54ODJqc0k0RmE1d25efE5I''@;'; put 'put ''Y3V9V1kyPi9wcS9KTm1EciVbVyJfRjhGekFJb2RGJSVVJTZsL2xpa0lNJVFZdX1tUz0lNVcmWkdnP2tFLzZGOEl7QUhwKjNYQyR5X09sQWFfZypCS1M5aUVRJCEpYmZnOV9kIUAqP2MyM1ZYQGZdfTc1RG50dClAfEokaFVaPHx9MyJOQGhwLFR3X1luUVNuSmNwZEx9Sm89T35+MzU7SiZJSl08''@;'; put 'put ''b289QFsoeDcpM201cGBwN1JQOnNEIW5SIm9WUG1UQW0heC84W05CcWhNdUx5U1pJMW5LPT1yRndPSmF0O2BleXhHREV+Qi8mSCg2LmF7XnxudGdFQ2FyfkFzMUVJN2NuZnFvV1p1SXV6bDQjaXh3ZD5heWh8PSJFTDN5WGpiSmI9QkpfXmN2OzElRFVYJHEhSm1uZGUkTSg9WTE8LnplT3s7IStK''@;'; put 'put ''elNhL3tNYWtqblUwZlBIQUFsOWxGKiR+UnMoUVdYTXYxe2JkfSRSb19gLzt7eGFGT3hGe0owSXF5VGAud0x+KGx4fEcuJUtAdkQ6QnpOUDNCd30pWmB2bUJVWW9iIWkoYjJ6bmdkXz09KSM8PSk3O2d1OT8wcXZkTVQsMWNqM3pTJGZtJH4ha3h2IVd3LEw6Jk1QaGJIcDZzfXI4VSRkLE1WIl8r''@;'; put 'put ''K0UrfWhPQ2U5Lk1CUUhqfFlVXytSIW99PTB5NSNwYz5jaHZaJV8jYmtrNyVHJGFrPFJRNEtbT345O3xQY0N6IWUyWys3b1VAeGRhcmUjcUg8TyJ4TlhvJngmQU5KIVQ6WHZqKF5FVDlWZFsxfV8hLFdbaEdfQGgkKnZpPWxYSVk8QG5sWmN3MU9tKFBlK1hGVVBWOiJ2bjVKLnNZNCFwOlZWfVFn''@;'; put 'put ''a2R3TSRoRjhJImBVUFA/cnojPURsKnBBQnJBa3NVcEN6PD4iY1ZxWFZpPkpAWFZ1Y3xFZUsuRkp6K11zXz9ILE1wdzwpMXsmNHt2UypLSyJVPkUwNDUuejNwQCRxfW8hcTtsUCNDZlM0Vi5FPjJPTUNga3F+QGUmX2Zdc0RtMGY9PkV9UEwzVjNQIm5GKWVicHNoejciTUNRM0x1NjVFSShNfTFm''@;'; put 'put ''MktSS2FEZmg4dio2UiVdRSZULnNGKXpDO3Bad0BqcEtsbFVFZVs2LF97cmVjPiVrKURXNXwyKW5FXVA/JiFELE56XmJHNmtCRD5yfkBnL2xGc150PU4jRkROJFFjYzw6S0IycmZnTSx3PFAzQkQwQmRbT1EhYnlQJklwUE8hLF9IJXhHPiZ7e2AsQFt1QjVdYFF7OV16aF9NK04wRXovNUNSbzZj''@;'; put 'put ''MCVrODReNVphP1Q3IyMobGZ1TSlAIiZEYSNYYEpUNTluIihacyVuYyZwfGFURENOSSkpMzhzOTkkKEtIelNeOVtsWjN3JlAhdElbVU9OPnwuXilzUmtoOCVHIlM5TGthMXtARz9KZVYsIWlKeH4jL3tqNyl7c1VdRDhGdmMiZEhGdjRFJCtQU3s3V1pON1BPbn5RQmJ0WXg7S2gmQT9lS1lhQVVt''@;'; put 'put ''WH5Bek96OjQhRD5ociRuRXBNQyNMfiE9VkF2NXI0U283JVsmOX5EcXgsdzA+WUl5OTNLKn17Uy9gaHBoQmdEck8sSU14d3Z1MVQ/VkcjNjAjblI/MzF4d1UqV280Z1ZnQiprMWg0eSVieWRtb04lfDxUYWo+MC5VdjAleVJJVDVNLjwkUk8qRXYyRUZGWkl3RCY2MykhNHlOZ1gsR3o8Xk0uRSU1''@;'; put 'put ''KUBKZ0VhSUxzN3x+ZHcwKnQqfVtNelB+ZXNbO0VzY1clejJ9a1hbVXFZR3J7VTZ8WHJjcTQ0XkAmKEhEVzchTG5lRllIZyRkcltOWyRfezl4U08wK3hTYEVTPXZKW15oWkh0el19U1VXLFRxVyZ0eiwwOVBaPzl0IT19PCRabFlLTG5VfnUhaVNCJU85RW9SeDIsNWUuOGlNX2lIOzYlRW9PQDEq''@;'; put 'put ''JFRHYnl9W0lycDZXaCQvUWV3MCFVcUg4Tk1eW1ErK3ZtaXA/OE1dKkZyMXp7RTxbRGZpTmdwSUVzVkIrI3FEan0sYV4uYyVlVF4jMi9tYVFuOnF7Q1pWQzpod1NuPkJJMTtTYXtsZnU/O354Tjp5QXJDXjVzem13eipwczZmXno5SEM5W1VbdENCeGBJZyU3PXFxblZrUkIqXzNiQkYxUT1DaTsi''@;'; put 'put ''L1pxeDFLfVZDWm55b3IrQDg7K1gpc19OcWoqW3B5V0dGfVJOdD1Pe0RNcE81LloyfUZMK3VufD5JV25PcyRrP3A3SFt6XV5aUEVLa3p+SG0kN1VyTHded0ZgbiFHWj9LI11AakhTXW8qMm9OWSE5UE1ManNgcnFyT3A1ZjdxfSppKVpGPWJPSVJVQSZ4TD1TS2ZvY182b1ovX3F9TjVva3FDRH1e''@;'; put 'put ''dERbPSRkPTRYKCt1Zz1IWGZmMyxaLD17W3F3QTVZZlRwUXVSOmUsOT9rTV9wY0tCUUQ0KyNoV2h7NG5HdWsibyZmfjoxQ3IlXz5ZXVNyc3ZxR2BkZ0VNN1Bab24jOm4rZUIuPjc5YyIsUFpbSzU5PVMoMFIiOHQkVH5SNXYzPmpnI3BTUTtnYGZ7VXBFdjliTjgoMSpWRnEmdXR8QENRbWdpQEpb''@;'; put 'put ''XkZra1hQQjBqZXsqPDklJSteS1p3b3w1V0g7TjRMVTV3WWh3elt+KTsqMlRVfT44fDl4aT5HTjArPUZMSHQpKVNHNFlZNiRfb3RTWjI7cHcvNjQ2Uj5+fCJSYU1rXThiJSwoen4ve31wNzUvfkpZNCZsZU9XeXEwIi9KSkQ4ay5QbUR3ZVZbMnMxTHcoKDd1L3BMVEkyV3ooUUQ8Jisqa0YieXFS''@;'; put 'put ''IjhXKn5IIiRoYEpiOys/SHUwZ2owfS98REx0NngsX3J4UTxtWyJ8YFtuYytrcjp+UT1fNmtJIilodCMoaWkuez98ZXk+Xk1wJWNFRHFLfFBPUm9BPyR5RXUlNS43Nys1e3dWIzNNSVZSJnBpPE9hJT9CNktiOW5vOUJ8aCNCamdPZTtedT5PSGF+dEhgZEUocGF3YGlsZV1XMWMvQkVUNDM8cSQy''@;'; put 'put ''e1ApZD5NL0lrdEN7Mml8RHUpMyE8R3BSRld4ZjQ4fURKfEdBMDJTbVl0N050Q2ljYiZuJWZLWSh0Ylp3OGh8cmFUNVBjOC8mVzJzVj12fms2UylIeFFxQ0F9KiVyZCRgdldjel9fMy9gOUM5WXtqdkkydXxUV2pxVDtWaE04NFVvJWxxRnFzXT8mOG5jcDJkWjwueHFNMEgwNSZRPTwwbFJTJmsr''@;'; put 'put ''MCEqT2VPcCVLVE1jfmxuYTVdMi5UW0hmVnB1X2NMW1VwVUgvblU+dXUqSWRQVTx6SjJseyF0LHBadTdhe3BCSGJQZVsvZyU5aTNtNy5zSCRrdHlaZlNoa3NlbW1icF4sdytkc35PY1ckcns1eCR5Pm1nOC8lPE08SUEmPUVgNWBhWmFrKSNXfkVYX2hNcjxiam5VeDEqZ2dnQz9NU3c3YHFfPCFk''@;'; put 'put ''aVBAZkgmckRONm1qOEt9XkssJkBVQT9VPyx5LG92SFchMENZTyYxcUgqYlt2eTRPRFlzQHwhOjZsbiY1ZWBvU0JleD9bOCVWa21MIz9wUWAuMyRBR3A7eHkyRSVoYihVaUg6bnJudzA5YGhuL3oqYFpqbE1+d2lUO2w6V3MzfXdLLixqbCQwZCtkYSMrbStMQkk8K2Jvbk8mTXM9dys9QkdrWUU7''@;'; put 'put ''V0hsUjxIYyIuS3ZzKzN6U0h+YW88OTc4X1ZreG5nb1hLVSV2U1RDdXFDWDZvPUJiMUduKiUlajk5e19QWj0zSEw5XVM5OX5tZ3FfTE0pWVJUSF45JWd9SyVeeV1MN3gwaCMoQ1FYbEh4RnUoJWxkfiM6a3xJSWNFYV86V30qTjxkYns2I344IXxHRj1RfVJxay8zPX1sWSs6R2VOe11ndjl2Wy5p''@;'; put 'put ''e0JwUjRDPCZMSWwrN3QvX0UyZGxsYWlrITk9bno0OHBzLytpPmQ+OzcjdzxqTm0hZSlOTWVqeSYyRT1raTdCMnlaaW9PT31ONFA1aDp7JDo6YntxKkhNZ1svXiM9SExGOzJ5T0VFejB1NjY1WlFGTCovaUVbV1t7NWs2PnUzb2d+dCNaJVlGP3paU0k8XiZnNUtXSVJNeE9xKWFrbVF8eTR8NDZs''@;'; put 'put ''MjRDY0JVPHA9fX1JUD49Nl04b0tnIXhqL0QoUj41dSpiU1RaI0pdRl5ZJXZtaVk9bURnQHtdVmo0YWM1dUoyTywyWT0qN1Jbb2FvcFN8Mk8lWGwzIjByanBIcmlDZjk0OnZ+Ri5JLCtvSnNwO1ZSL0lhITlqbWpXdG1fQ2VCUSNeX1R3OUdUa3whQk95dnIpZHJGVHRhO3pdW31qOlQ9XVFLZXA4''@;'; put 'put ''PFt9YzIwaDsodWFVcl5NO1B5KzNXWnpzPkQzOW9MOjFJVD1pMjk0QnRqYD0kdzBTP3U9VnAhMDZJZGlqaUUhRHkzLEQyQlJHY3N1fX1HNyNFO0NzdDV8LGBnPDFWfGlKL3JYQDhSNCNWWCJ4fjV4YT0iY2djMHBjcDBERlA9PV4hLnR0NXEqa25geUs1UDEoV1pLOEZkajBJY0M5QUUjdnRGUnU5''@;'; put 'put ''cGE/UEx7RThWWG4xL0teOzFhMUUwKGJiQlQ0entSekcmS0RaaVdXeTc6V3IhUS5jNVZuY0A/KDQ/Z1N7Zl1Gbm40ZDtZJCJdfF87JXhsWT0rRVJuKSk/Tk4vVkc0I2NzOzRXSS5HXlNUWGNjOW9vX1RfNngzU3U9TSleJjQuTClzMjBydy92Omh7YkwiQ0xIUD9sTVpxL2pdIiRXM31aMXxsVFlV''@;'; put 'put ''RTNFe182JlMmJndCZnFCRTx2cnNTS0Z7diVVOkRwOmIkcExLdXVlWGxwYnZNOGN3M2EqfGEuQHx4IV07NDVUeVJgQV5FJFR0bnZjSjpxKkpieyhae0NrRX14WVo8P0F1MWZVfUQxdHs9fWt7MiNScW9bKD4pdSpEIVpxa2hwZEJzNj1pLH0jXTRlKll6fF1PUDxzfD4kNmgwey8xMmd9T2ZII3Nv''@;'; put 'put ''R3xLaXJ9ajIoJWZ0ZzUwIWREOzFzZkslSyFhIzNbViFyUDdCRSh9NGtjdU5ANXhCL3t9flJBMzdVLzt8VHVBdmlFOnZPQFZQRUlxKV9bQ20xW1hvdWUvMXBGSDR+UWNTXmIifm8+c1k7UF5ldzs0a2dEbyZaQThAOyxgam00b3RfSDBKUkpZP3FSTjpnaXt9MjssN3E8QHZqfU87K281I3BPdGJg''@;'; put 'put ''a19CajwqX3ZHT0p2S1drfFMxd01eMnFaTD02NSYhN2NPT1U4KXxyO0gyIVk8Ik9pdUleK0NWJlRseEpGYS5vOTlaRnQmZCErJWNpZSxyNWI2TThzMyk3YHNuJHdWYihFaTM5dF1jb11dKTZYTjNPNiRINGFtdV9XbmJhYzUwaTw2bUY5OU58VkYsQ085IkpvSX1tOXdzdVYkLjdIRCxYK29gMy89''@;'; put 'put ''Z2hvVExvRjZJYUdPWSwzQyRSezYuJDRzdV5kKTwzR0ElKj4hZngxWTg2SDZwI0FrNGE1TzM9MkdHIWwuTH1uITZCZ0hRKSVEQWdhUTQ6VC5HbDtYVWEla1poWVdgVXx0aF95RngwSXlAaWQ7U3JnajAkd0p3P01ReiR5SHwyTj99OFJkWFRKS0heP0c0clUrRSRdM191VSplZEReIkkxeWgoRG9j''@;'; put 'put ''UHNPYG15SiRXOFh+NyZDdFBLSWR8PnhXQGU0TlVGeGd4fChhR1AoK2ZlcUxgfEZ8QCk3Z0w8VS49NiU6JnZuckMveEM/dGptakNTcVpXJms5JGNqR2AuRDQ7eSp3YSpYQCEuOVNBaD1ScC9XUShiZClzS0g8YldOR297TWk7WTNMWF8uSGdHQjNDc08sSUd6dS81N1p6TilLPGxQaWY2TGltKmpM''@;'; put 'put ''RnovPVV3TTFXUVJQLlBSUyIpUFZKdXhvdWtJRz1HXjBic0R3T1d6ck50P2B0TUNXJG1ZJVlwNWk5eixacTtbV1ZVL1s4bFdKZUckdTIyc3YwUU1ifFNfcF55OkJEfHJ3I2tAK3IzRztBfVlabm1oXjpeVWhRUTAxWEZDaypga308VERCUVthVXckSUttQ1hkWjRYN3QqVjZoKHphZyoqV0V2W31b''@;'; put 'put ''KiIzNjoiMXY4UmQ2PXVgTVpAKHJSZWRsaX0uKDtvKG03NlZJN2pUV0d5M0M3V2UqaGJuNEleYTRtM18zUGwhIktRcV9Tal86Sl5bTj5EJnc3XkZLJU1OIkJZcX5SOVFdeUw1W01RdVlkNlo1aEtGVGR4PSs2MmFpX3JOJUYqJn46cUdPLiIiR09wNTokNGBxUW1mPXNlYzhlaH0/cCVAfnQ+PC5C''@;'; put 'put ''bVhXKV9+c249V1gudmJ8dDA9XWEmaH13dyU2R2ZWfkYqI1pjJGx7akhGaUJ5bCI1TFRTRkc8LnZCKTl2WV8qZn5me11nOW8pZjJPRV1LWiVBM05RQTk0Z105VGVBIypTNnA9Qm5qRk0iLH5YU1V2UUBzaVZzaVlIIltaKDdvR2UzaUkrQ1VoaFZiQSRRcC9VPndUbHdtL2k6aCZeKUp5eFBMMWxu''@;'; put 'put ''TTM6SjBzajZKYGYpdUBbfjp+WXRueklwdDAsUy85enU1T1o+Qm1aRjElXnwoP2RafDdtWngubjVWZ19LdXBxfFokO11CRkRgV1JGeVdRPGFSTz9QOCtEO3MhS0pzWSlEfHxROXp4VnolbVtUbzlecyZtaypHIi83cl9BaHZUR11NMT5+KjgmSj5eeW85ZDVCPFlAZXA9ZDI4JDMiWzVodV8wcyEq''@;'; put 'put ''bDR9Jm9RdVh2UlRlLCEuSkVlfmxRMSpnU1J8IWZoal5Ua1cwWn1JenVqOkQzZTtKNnVeblBpbUdJMFVCPTZCSXl7JFE6PHFDaEUkPEpoMUk+bjtfdCg0WHtPZGZfZ1NMMXQrejJlMCZPQixyX2AoXzlrVWptJmIsU1JldXY7PVd7NXE8OXh0V0N8NWUzeCtJQnd8Ol5XUlNffjkwVildRFM/WjFY''@;'; put 'put ''MkQ6VTckciF5QGVQSW0jI1IvcSx2aXlXYEMpbXw8QlZjKTJAUXNsdldRb0hHZzZiel0zOXRNW3V7RnkzSGMlVz9tMytjMkJSPnw7VjwrM2A6fTcoJSI7VXwzLlpvcGB2RTBQUSs8W3EiPnlkfCE3cn5kZ0p1IlVGPUV8cUskdSEyPlhpP2U3aEJFL3MkcE55InJZUTMxVWNVfUM7QTprLnl3MVFh''@;'; put 'put ''NHU5ZFg0Ty45P1RqMCg/W2llSUgsO2BKLFIlX09NZCV3JDJmK35JcUc0KXdofEgjfExeKltkUCx+ekAlXUZUSFN8TD40SiRKQVtHZyt5QSsicHxDLm5bN2Vacl5yTmUhXjM+LmxaYVsiSXlHZW5ZMW5MLDxrVVI1PEd6QU5TbHomZWRHZyZ3P2cyakptUGBDW349OXUzdGV2cHs2YzA9QV49b3Uo''@;'; put 'put ''PXxFTDoucG9xKE1FXSpXcyp2YUovPWlXKXc4TTdSYC49Slp9VTQpc2FoLEY+cEJFfFVTflp1Q3NgTT4zITdNMXlleHIqTUNkQ2xIeDJiRFoxcy9deShOKF98V2ZNZlB0MWNMP15xNmFlL0BIUGZOKyJlI0RYWDFraXFDOXc2KCpVSFk6ND8vKiVfOjcud3VVX11oSWgrW1pmcHp+OWZrKDVSOE5l''@;'; put 'put ''bGw4JiNqajV4eSxkbTtxaHc9RjRgZksjXyFvW01HUzRFa15Hc25zOj4vWjp6SHlARl06bGp4SUY6RnBWNXcqVFcoK31efWUvc2U6MlckbF5Gbk5zQVdwO3l8L2l1dlA/IXorazx5ZFJLP0dhTVErcS92Y1g8blBGIXAhdlM1O19XIyxINklmQGcoOERKKSttWHI8ZyI0ZkA5cjAofSFqN3RETTMi''@;'; put 'put ''RjkzelQ1d1tUejZONTZodFUhY00wbk9TMjN7OGsmMn1HRztaWWB2YTJkUnxRdTlge2cmVWtrSCx+b1hrbXM2ZG1LUDplYi5aWyJLKn5kXWhkW2IpTHQ8NUBjRE5rPkQ3dG9AdXkwQ2xTTGhVaXoidH5FSyZtQk9eL0VLI1hYeSprbzNsX0owS2BPMTB9ZGRLYUdENmZ1MDR9Vyk+RyY8ZHxfW1dR''@;'; put 'put ''SCNUPklTKG91b3Q1JnVfKEQ2ZChrUV1pO2RHNm42V3JkeWx4d0xsOUJWOmhkU3hEJDVFRE13LllzTkNNP0dnZV9kZnYoYXxbdGs5ckovbyE3TlNMVG9ENy94OUdYOk5ePWEzc0F+Rkt0OW41RTQjVUtfTy5BLyUsYGVoLzglQmpSTDp9NWYmSkxHRWM6Z1BJKkpHWWVKVnlCIVRIV3JpKyI2OU9I''@;'; put 'put ''KUQ/Mz93M3ViVVBJVDZYPWZDXWFAPUF9XzxCe1lBOUZwVkwyN3wqajBQZFM4bl4sWlB+U0wvNjI0RFQibik4RzA7ayg6R3BOKT9acDV2bmRJfTMmdis2fGgmOVg0LzUwendHYFQ4cyNrYXF0fSR8ZHlkY3Y/d3clVyx9YClAbDBURzhSdSJLImVSWz1xZlF6ST0jMStDcTt2OkROJkZBYCs4dlRI''@;'; put 'put ''QUhJMjhRUTRzX3N9XSRtSDNaPHlNU3wsVWtpRVhPNXV4L1JKKDwiPlQxJE4sd10+fk5KWUo0fWthQCZMLDp+bkI1Rkpgci41NiFnYiUlQ3wzSDl0LjB0WVFiMTVESXljKDo2KCEqXTtLbHlLTztwRDBMWCpFaX0ucUZzQkpDKWw1OHZyeXM1QG5VSmlpTVBuJDRnN0dyYSRnO2NvX1ddYnZTWSFz''@;'; put 'put ''ODpAYWBRZF9YeWwjVTNTOkVTZ1Y1UjBWdnVXRDQ/KVZDO2s0d1AvNjp2L0pYQXpVREJhQTcuNFZNNjFiL2o1ZDBrd1o0VVhnO1NMPE1uNyU+T3ZwWXk8RU9gLDRseVVPTXduKyYpLjtwWFNucEg8YF9uQCNXWld7czIqaypBZVlEVHgzdWd1fU4yfDxzb352JndwTjVne3tYKyo5e3hKZj9IViYp''@;'; put 'put ''ckNvUkxPW0FdaXo9Qzx3ZjA9UUBwZWV0XkxSTj8zPlhbJmNlXXROKSRLbXtGPEZYO0lFcnpJOjViJiZ6OSlsaH43cm10e2NlVltZL3tBYC82ZTpSLzB1cVI6QnpeUTAwP3B8bWx+fWdKTGNfRWNSKU9VUWUoYztvZD5lLnYlYzFJLDx7V2Bwe2d+fHNnez9bMzR6SjlKP1gjJHJjL0RyOHBJTX13''@;'; put 'put ''S14jI1VRJSExQVlIU1lVS0BITFtyUlVhNjgjWitAXjNFaDtJZzViZ2VCTmR2PFRUVTtyYi52b3RFMShMLjptO01DcnRedHNvTD07PiVOdW5veHkqVEl7RGUlImEjLFUibU5mWntNWyhDQl1INlVfeG9rLzptIUtaQXI4S2dKdURMRyZmUjZhQUxwQUooR2htYS8iMmQ8P3daM3M1d1s9fFdJcXVm''@;'; put 'put ''PztkMmJ8XVQyXi4rIl98U1YjIWFSVlE3O3cpT0JeQ3ZJVWdHR3tDZF1zMzlNTEpaWlZZYXR6ITVzRSxWYkBuRFUpNUtWfC9BcTlkOklOJW1hUnBYZVs3ViowfUJgIyhEa2pncW1zLjJYLEJEWXkhTmdFOT02RS91LzYzaW0kTT9BSSwlSnJDTW1Jdk4hMHBvYnp9RlElYi96N3JEVWJMcTpUQ2Yx''@;'; put 'put ''Qn1Fcl5qTHNuOXJeQzR5XTZoe3E5M2Q5W1FkODAjJjAjXzVvfTp9N3lfODdZJm8mP0hxUXZObXwwOk8uM1VnQTV8cktwYDNefm9uZ3MuXX5SJlRBPT4sKTpndyMxO3JKV11odndZPDp0N1hLQl9jcSp+Png5UXFARUBMPWwsdVl5WilVfWp5Qys0fkpvaGhPcHMwekVTd014JFVka2E6elBqbzQj''@;'; put 'put ''LDVOTm8lIWBdWCR0aXBzKjVvUFQ2X2BoKkpHN3o+RFY4a1MxLyh1Jk9iOXRfZCYlc3YoT2BwW3spdEJCfUhYV0IiWj5xPEZNWGJbRWBnPjcpSzhnKypNLGhSWUgxNUFxUnVJW2J6QFg4VCUmb3JXWXdwbVVFRmdTWyVrVUJHRkNKW2kofmh3Yn5NXSM+KFVjMjd9ampuZzE+RGY7STtuPnl6NUIo''@;'; put 'put ''XkVZU1JWSj9SSnhJOypAJUp+LEg0M3tpPjB8PU1wNEd6cF1SYC93cj5aK1ZddThCbil8PSNCSWU/QHxXY2QxfigrPTF3eUdkQER0P1o9SFtjMWtSXikpekV9KGZPez08KUpGbWNReiwpX3tyMmhiP3tyeWdsQ01yX1RAQEQxWm05Sm9KfXxxPGJdMnttbjI2PC4qMSZSNHV4WClKS3JJN0UwO0VO''@;'; put 'put ''P10rfEUyQiE/Q3R5ZGtpQnNEUVdOImwoWS90THw6OSZEWmsxMVZLd2FgbShfUS58eHAmSHEqW2UyfmdbWzBBUm5UJjxWUF1YQi9layl1MmA/TGI3NzZQeSZhQUA/cTQ+JXIxOFs3MCh3QF4jcXlYUi5RVGE8dFQ5Kz0uQjIybkxjMlAkOH4sJHhOXjk9MFJGdzhOQnx8Kkc+WyRAfWxfX0ZXN3Nf''@;'; put 'put ''YllZNWw4N3wkSXpBZCI1bEpqTXtnLG08Ujl1bn4/bD1tPml1R0Q+aSJWblNAOjB2LFl7Y21lQ3NuTkhzK1BieElBQCZTNVNXdFEwRyxXY3xJfCFncTUzbzpTeSlPbURzMXVQWCJST0YhWCg6KDMuQHZ8cEVXYCJzOU9QcyR4ZDkmYX4yPVI7SDpNJEspOH1lI3NIezIwTG9lbV5YdWhKKF1WPyxJ''@;'; put 'put ''Z0J+ZHk+QkhYTVUxViRZfFNtYWIkIn0kVmZUTyVdMEdmfmJgS0todFM5cV1jXyx5PVZ3VlJbSF5QZWdQMF1kVDl8YSxfK1d3JlhXeG9aZSU4I31UKmc8Q2dxQTAjdkdSKVBoWil9UXwsUSs2L0BqWVBpZk4ydE9GX3FtJkEweVR4dkFaOSpPImZsdiQrdV9gMEgvWyVpJWsjUzwlSGtqPC9aKUtZ''@;'; put 'put ''PltqXU4vT2ApKGhYWV1abyQvLldQL0hlOCppKz4/QzIwTngrPiQqMD0wdSQ3LFlPc2M0JEBrfWNlPEYvW0ZFNnJFaitMVyFeNz9IJDMoWzJNYDpzYCRZeV5eU2VxMGhxW2tqOlZqWHpMdTBUKEdJaG0sIVkvIk8iQzRARnhoW19ven4sTSZvKG4hcWV0bzVhdHI7bk02a3htTnAmckkmcnxeOWha''@;'; put 'put ''I2Y1WlljfElJWUdiJWM+a0QhVj0/a0NtWDZ0dFtWc3lRMGV5S2c+dlZyZHVISmZXMnRfQkh2fjQ7L3B0aF1iJG8mZFp0TzoydThFKU8xen1oWW00OSxqI0NRQyMzVnlJOz1EeFVtY05lPF1ET1BpVzZYT21fPlVDQH1+Z0JNeGxTdyJ2YCVGU3hnbXY8OGJse3NCPWklOikqIVc6MFZfSjchSndn''@;'; put 'put ''TndIX2MwcEVefDlIOiNrKHI2a1dJRj5AM3lfYlBaUzI+VExUeSZvS3ghWnMmKVU7OylHOUoiRHpqMERueW9rRH1wM0dqPCxvT1hXNEB6VVNbLz8zQGx5Q2pUS0VGWGczPCZEUFtpW0UlODc0eW9ga2Q+PVVdcWkzV3R2K3NKfkwuQikybmA5Q0tpeXpXQ0UlflNoJit5NEolNVc8Im9VNTBBOz8k''@;'; put 'put ''VHA5RHBNamVNMVB+OlczSlklRn1zNUQvKldRJGwjIUU0JkpCUzFNRmJVd2Z6amMlaFJUI348cyJHKWsxcmRsc18wakA+SS9WM00jKC86XkorOXNgaHciPmtbMF1fU25Lfk5oYl5EN1AkZD1qfH0ufU1aPURbUThhQTMkc30ufDg8Ryh6VCN5V1tba30uNFpMbVhVIShSKFhgKFNoTEF1KVMjcD8h''@;'; put 'put ''NWQhclN2fmEoOzVAYlp+R3s9LDQwI3tUfE51LkQuV2FJK152ZDx8dypocFooYkRmL1NYMiVMfisjRFApPVtiMSoyY3wpbFh0em1XfS9zaS9OOmhEPCtHRyxReFZMZmJIWXcvfXY9RiJMISw1VTZyYlJqOXgwT2Z+UXkiL2l1b0tKL2lpN081eF96NUR4Wj09amUkPTRaciUzNig8M1VOJiQ9bT9Y''@;'; put 'put ''TnY6fU8vJlNed3pkR05LKDoubTl1eUVfSWdyKXwmJUR0X2FNJigyUnxNQSh0SkFpbmEpQnFNdjRzQD92YytENi8qNF1LTyY+VGc7MCooQUE6Z3ZKWzUlWFkiOFVHcmg2YTI3P09rK3c0bS4pdSl0WCVEYl1YJnokdUByWngpUi5VV1EjcDlTI04lPndqOkBwPWVROFk9SXpUTCwyJUloTT0oTG00''@;'; put 'put ''VW59MGxDP2pRfjA8TS9IfSV7WmZ+Q2VGRWd+W3dJfDFEIkcyaVo3cXdlQjtOal5BPFdrUT0uJlRYKEx3O2wjTGByIXIyTjlDd3FveHM5c2lHbm86PEk1UDJPbW9eQT1YO3JHaVdWWy8qZFF+UTt9WGlvIzZNcEN3VFgmPE4yYUxvezc5UFIpMnZZSi9AdWQ1dEVFaD87OSltKi4yenlhY2lLNXxj''@;'; put 'put ''SkhzUzJLPGMkTmc3VHJwWCVUeyZLQEVXISh5I31Rbyg1cHVQN1NTI3g7W01UaEolXnQuIWRHNHVhVXpkVi9ZWnBhTlkobDg2ZXJLPit5QiN7JnI3VFdGOEdSPWNadHBdVWleOilyOXomYi5YUSpAM2tiLCZzODRtKCskViliL29VPj9Wd2tsbXVeSDp0Ti5vUV4xWDFhaXZsT1RmT0Q1cEM5NDx3''@;'; put 'put ''PlAxemhjNiZyeE1wbV51P3suRHg/cWgxNHlwX0JtM2M9PkdNUkg5Jj4ueV9ZUns4TmdQM2pJISg0TWBZUmU/eVdnSz99LGpyLl9WLFBHPWMkOnVsZElDViRzTX1rbTt9W0ppczRKKWJDYGt7RDJQUnVuOltzakx5bzQveCNON0YlPlNefGhpQXxXVGNpMzokSnx2cjY1R0ZQfjZFcT86XzBWdj4m''@;'; put 'put ''RHtzbi9EczpGM1kvMFNnQ2ZweWtNUERDRkdbbF4wVGk8LH0sdUdSSCQsYyNiRG1SWF58JnNiW0tpL01hPygjaGlIT3hVdkxkcTxoNEhZdG9Qe0lXZiVtZSheP35laEErPm1qT1p4P0YxWHNmeF4pOnQ9PURCLGdwbml9bm9qbWw/JF0weVg8fUdJP0p4Sy5SVSQySmd0Yyh2UVNHaEZ2cS5IOn11''@;'; put 'put ''LjV6NTd2L0lLW1BaPHt6XTlCdW9OIk14b1M4alk2MGVuKChfJGxlIj1GNSRLakVdV1NMW0BrcGA7b0JZdSxFL3wwK18iI110ZGokMWMyVmY9d1pIQF9qR0M0TmtMJnJnMkhsa3soTWtPX3MoIWVDYkZgeUsmIkdIQytXUyo1WW9uUTt4QjR4QSpzKiJUfk4jdFhWJVEiQz9hWDVbJGVGSSRDektA''@;'; put 'put ''ajVzMERbYE5tIStLR351V3pXfjR3aS41TnlVOzFwPD1FWDh6NmFXM01iMl9INjo8QGo5b1VyMT9uRTskWSsxKlJ5X2htMTxXLCErJG9vY3JuOm0mQCx0b0dnIWlCajlhS11ZJjdsWS4qOE1lW2JIKEBvXVswUGRwXmAvOXMmRmJYPSRlQyZYOyMkJCJCalhXeD0xdTgvdjgla15vL1I0JmZ7JU8v''@;'; put 'put ''Vk51RWMrLyh5UXFBYixzeDd3QmdENytmdnU3VUp5KzdfIXsmZ1UhJHh7MDxSPXIxcTxhKz9kI1lAKS9GPENQP2tCMVRbXk9+I3c3VyYiUVpzOX5EbWVIX3pgRERqJkA7bVtJNiZGPXIjP3BJPTN0S2BDUTJQIkI8djQzdnwmTkZZfGxaZHthRz5KSzU7WShEeExuantPekZSdDpJL3tGOnJBWWpi''@;'; put 'put ''YWV6dVE3NG1TVnQ1Wk51QFFRd0N3L00oZV0qLnlRcTZnZEo4PyouTUBJZV0mNDo/RVlLa1tbN1dDTmtGYFI9VipjRGE4YnMxelJkeGg1bEYlKWcsSyRFOiwjYkN4VFNMKUNbaFVtbFZvRyIodFsoPGJgbGdeRGFJQCVEcG5qR0slXUclW1VKWTxkSi8jQF5MVHkyfHlydjMuPVJXX2dSbSp8bUJT''@;'; put 'put ''Sm51X00wTGszaCwkSjJXWihuPWwkNltPcGZWXU0xLF9ucF92X0IkT1FZI2BYbT55fX1gMjgkIy5iRV9FV1t3PnpAOj9kN00qNVp3I3hPUT5sR3gyYVV+LFAuOE1KR3FyOUlUVF9YNnFWaXcqajlpNCxSLiwjK2JKPjJzcTsmTyg4WzBeTmFVPlAxIzFtKEYzWFI6PD8kVz5Vc3Esdn0sY1YvTClD''@;'; put 'put ''Rn1maVhOM2ZBYWZAJFtUNi5oL2wkZDNkME9oWWJkQXhCVjJiZFZ9UmZYRFYlbCx1cnZgdDhbS1hzZypSXk08ejZzbitqQ1RiXmJFQF94I3IhN0kya2kpfX1TZnlMZkFCOW9CT1RUVmVtKSx6JG9fUn10SSNSc3doK1lARXsjeithREo+eSpbTTQpZSlBbzVSUyE8M0J0JStTKWtORl59alZ7Ijki''@;'; put 'put ''cShmKmlVUypgKDhfL3VGKEpNJkkuTWhlOF1lYjJoIiZYbHswYF4xYD8+JSJqOiN6I3FnSzFGZmZzemlUPFNzKmhBMVo3XXc7Kjc9IXk8OEJgdFFqKGhwLDBLTVdsfEpJNyU3aTZPUixbIVViViRJQmBkVnE5KDA+aFdlfGg7R25man5lUzxTdHYrbCh6UTddKlltNVg1OGttU2RUPEheYVJ8WCN3''@;'; put 'put ''QWxxWCwyV2VWJSNfYFI0LC8rUnFnSUhLYkRBNmcmKC5kR1UrK0d6ektTSHBWUkBAQj1rbWFnUndTYV9+bnV4Ln1abjFheHh7S2R2fSE9K3hwZkhbV25vPyIpRTl2Jk0hPkc8LnVsPV18WmlUbSFVbWtLMTlYVn1aSGEvRmRzRkU+cGtxfUVMOHhMQXM1OiNZQkk+QyRVe215fSY3S2NESCFNKXRW''@;'; put 'put ''eSU6YlI3Pjk6UGx3KGImKy8odFNSaylDRShDTXU6RHNrXk5QcyJTKG1yRkpwSFQieENpQiVJN219T1c3fl58WCx0dE19V040dnQlcT92QyU0eywwaXs+I3JFR1I9fUQlcjdZUjV4QU5sfGF3Zn0hUHY1MD4/N3whdXl5d3hHMTg0O2tuSUNFeS91fSJfQkR2U3ZrP2lKVFZ7TCYxbytUKGFCZWR4''@;'; put 'put ''fCUoQksoVXBhbzcuMWNxIVRafTNzSSUpMT9DPGE3Pk8oQFlEN1g0cCl5MEpGKy54I017Y0Z9KDt+aV86Pls/en4xWl09bXV3OlVhNExCMEN5Ql91PTteTDJgSFJNe1g4ckkzXykpYHVIdyN2UlZrInNKKCg5IW1yVDFgOU1jJWksZm17JUdbdXgxaE92KlYpTEtja0BUT2s6V2VMYz9SLz1yW30y''@;'; put 'put ''U1pzYjM4P2V7O1h0WGcpc2Erdk88QHk9I2pkND9hRzNdMDhpY1BELEM0O2t4cUIsU3NLeSZOR0E2L1d8cjExMERAb118dy5nd1k2ZmNNM1k4eDBRXWY6bUNWN0lGPih6UGIrcn49KylVOmZHfmhpNUw+T3RiNj4rNk9wN0Zmbl1Ybz1zZDZFXkVDRD1jX25+cmJVWmkoP0JzW1A5cEhDQWNWYVZ9''@;'; put 'put ''RT9APDZ8LlpZI21pN3cyI3JGZmNOUGIpJUROSH45RzZBKVA+X0ZeV1FmTDV5big4eilCfXloekNFYDI2YiZ4UUBXZSFMNUJxMlFYZjR6VjJqVkE/NUVBODQvRWdaL0tja1NzJksmQiYkTEUlVGZzT0FSXyRLRSh+JElUJW11SFQzbkxULHZKJX1UeD1MQmZrayZ5JHRMNWIvZ2g9e2dQU0tNNW1U''@;'; put 'put ''YkU3Y2QwYj5rKFg9VXYvOix2dVA/VF4uJmxfW1JYOSIqNihqenNdREZtUENqREtZdTxyeTMhfnklP2tmIkgrXyNSTmNyL0VxR098OzAjQn1RTDlwUkUkMF1WJW9xNHJCVEBKMCVuPUh0JSpPRzhtJnpbP0pSWjpQdSZQSS99TWhPVzhpdXR9cUs+Oi5hMDlFKT52Q2l9IVIrX0MwLHF+Pl9RL0BF''@;'; put 'put ''Q0okIUlNNS5sdVp+SkpQMiRPI1A5SjMvWnJPeC9De1Z0Xlp8VyllRjJNNnk0RF9VQDw0IjhfMzJ4JUFNL1g1WFVsZ1BDKE45WEw2WEtWdCFaRSghQ3h1Szs1UzVwayZIUW1TVlohU1lQUm9vTTwiWntTVWN6UFVzSXhEKj16ajdmfkVMfltkaVQhamguJik6UyhLSzxzIVpgZ24sQ0l5InVmLkV2''@;'; put 'put ''OC42dTc1cVl1O2V3MnxiXyt8MD8rZlJgeF8sVzNteF1vSyt7Sk4kPEppXXJzLDcwLGJ2NiE6JCxXbENNW1h7MjReWlVSbTBYKkZiQkQ2MX5iKTdDJm98SlY1Qjd9WTc/U31ETEhpWSohVFt2T0czUjdLb1orcUlefXJEQ0A7aDh5YHdlJShufWZqKE4haHlZLEpWZmRQNzdwUzZbOnRwQzhHP0g4''@;'; put 'put ''eERxdTloUExifkYhbTNrb1BhQiRqfTpwYFVvZ0kzZCsiSjxnZH1dLFtGLiY2N0xbbTlaIzg/WGYud0RQcjBVZ0l5aEtJK0RVPVZ2OW1zK25xVG4/YntZYUp6SiR6cyRzczhlNDE/VWZ2PypQTmYjPjp1NnEqUkFjODd3SSsybCJQPD96bVgjQ1ZrRXZ4NjVsNmM5SkMsWzc+JDNrWClgbWo3fSt0''@;'; put 'put ''U0QmMUAyKVZ1TGlYTz8sTVNoc2RrVypWUTcyT1ZQSlg0Y2YmemczSFpddVRwLih7Wyt4bG1aZEYjVTEhNWpbNWF+VDFbZyhBMCovZk1kRzIrMj5MPCRjVHMpQFl6PndKMzVMYkQuUntzNVVASjF3azYzfEFoNmduZ3Nvflg/cF54MldAYUY+VDw6PThjW2AjfilIIV9ddGZPcH5YWSxQVipAezZj''@;'; put 'put ''Xkk5Qzwpfmh0LCF2REcjcD46VmVXMylxdkElMjxbODdAJFFeIShyOl9IPDRNQ3MuYXQjXmpddHE5OUx6emg1T0dTLnJiS3lmYUlUSitPVkQlIkdga2s4P2N3KWQufVNfZXI+IygpRnZFeUdVcntrWnAzIiJFMjEpQjdwc2ZXXlc7JSlRVUgqVi5BY1tLS2NAIUJUZHxqZ3UjRGl1LE0zX1BYekQ4''@;'; put 'put ''WyFCRz82YT82X3RAeTUkQ159KFIkNDsxO28yOj5xdX00fHtHZ3lbKjlQPFYhJiE0bzJxUll2QXYlT3E6e1R0fmxFWkVEcUJHW3ZwYWBgamV8SipCeG9vLCRzMSpzRUJ2MEQqLElFMyIucENJU11IKmU8RWlXIzx6PXpnUnp+KjQoUXs8cmJ5T0oiIkEwfEcpN20ySEQ0XUksZWk8Lk13Mis9fXdv''@;'; put 'put ''KVMwTVt1cUUzPkZnPGJAMyUwIVRJb3JpYEYqO2ZSaGVDKEMjfCw1eW11UV1aNEo7PUx6WW0xKi83dWNQJmBvKSRnQ1Y4Iit+cDg3Nj0mMn49IipXbHVpTE4+JVhHSnR5UTkufEJTMltNfCQuWEQoIUFeOC5Lbit6bC9OMTplaVJaWSlTd1pNN1l4bSMmJVlfKXtfVCY5S2xuJXdZb2dsRjd1Yj53''@;'; put 'put ''Kl9HaVtzRE1BbDgpNnRjLjsxelQxKntYNyhsTmtBOyRpQnltYVRrW3hYamFLL14pRmRvRigqcTQzci5uTkR9YTBdciJrOFM2UGV3ZyUmWGIjW0AhaHhUW0AmVEY+XiZ4NU5GOF9DfH5yaSQiI2N1U1F7cihPQ1ZTTyV2LEVIZXduUW1JPDF0Vl9uVk1nTWo/TGUkVEh1d1lSWTF6b2VRfS91WEQv''@;'; put 'put ''JSsiOzJIKVlEST12KH08K29hQmJLRl8xM19zPGVdclZVd1hzPF5LW2BFTUFyNzkse3UsJURkRnlhZnZ9NkJgYmBoXTx0UUUkfjk6ezpvQlIqZ11XM18/O1ArZ2dyPV1nJnc4aS5HazB1VVpAdklxOG9PL2l1QE56KjR5Iz94NitQdSNaMHJJbll5JSpie2Epa293JmYpbWYzYX50Oj8zNXllVmc8''@;'; put 'put ''NzpAUztaIVA8RnYkPXdIa15RdmR4K3kmJWYlcG8mYTVUZG48W1FEalMhLz9AV1B1SWRhRTM0dkJWQTdjTF08KVB1SF0/Yn1xNHZuJWUjazNmN3kuXlo/PVVXUklJSmMjYUQ/UGdRKjYiVG8xW1NLNitPTmBkPk4pI0c6cW08cHxCMlAlZmJaRSZkdkI4U316aEFvaHZpbEx4T1NGS35rbWVINENe''@;'; put 'put ''YUwwNXRpeXErWiIsNVheN1Bpe2NkVio+ejNxMWBdTDV+NWBKSSJ0ckg1M0dUKVApQHApe3k9XWYhYEQ+Iyw+MTwpWHc4PipreXMwJU5pK1NGd3p3fFtULnslbEJFc2dALzgmTi9kMnsvOWJlMURLM2dne1YySyxifC9Fa1tddTRbREhVQShlM3loNGw6aF8rOVFKbipWdnpMMDFGaDBiKUtJOyh7''@;'; put 'put ''JCo2TkUpTiZ7b0w0M3IlYX0/di9PflF2OzcxIVNSX2tvJDk3WmgzVEZKO1lwNm11S2lbPXVkalRUTWgka0R8d2lMaGRibC43L3pLZ0JPd3IqL0R2dnl8IkhvRCt1UGZAcV8wfktYSU1HWyE8bHIzdzciNlI7d2d0SDwyP14+V1I/YVNRTX4uWTtMPVdzIkp9PGJIJn5pYTUkTykzNlIuYmxBLE5N''@;'; put 'put ''MzIuQmdjYi50eVNaIn1BP2hjOF0iYlI5P1NzYU5ocmc4TW89Y0AvM11uRElXQyNCZ1kpdFMiek1DVCZhWmY1WWNne2FtNj1oKWhhWHMxMGQ7KVFDZCI4ZSVdWWNOb081QlgweV87cjlMPGdWTiQpcCR9dCxPbGtBdVVeYjZbcmlGa2tbZjtibCNLci4+NFhPVmF1Wz9xJWFnO3d2JW86LlE8WHNU''@;'; put 'put ''dD1MRS42IXd5ZEVta3VYJiM4aGl1UjZrZVorJEw3PzdfTVR+U0Z0I0I5XXFvWHc3OD9LMV47XnMvS0hXPDgyMWZbemMvUDA7dEMwe1FWczxUcyNxbFFBcD1ofVFdZV5Vd1Q3X2kzKDwrZlRJTFlMZVFuZ31tbGNVNVFxeHtZU10mNXE/STspT0kifXo8YnExPSRmZFB1RSsoRjsmPXZgPWhfYkM0''@;'; put 'put ''dE88eGxAVXZJXlJaRWQ+QmR3KSZUXjcpaVAuLHNRUzNJWlssZGA3b1BEa1txJUxFQXRrZmV9a1g5VTVEKXdUQ30pPWo8I0kjUmlCSHA9L3V+RGF8YkUiMkUjVVtOclY4eS9vNllqQitBOW10c1cjSTZCeGk1MylPLC4iNVopPXRzLllhSzU1bFo+SDFvYSw+VXwuantEOi5nNGlVemBAJHNSPTZ+''@;'; put 'put ''KTVEUmVyQ2NqSC9iZChSYURTM3txZ2tAbj9yLyk9bDwuVH12JGxqL2YvRD9ia2pUT2ZpZkNEZW5vKylveGlZRTNedj5GNSlzZmFtfFdlQSQ5TCNzYks+Oyx5UnZNYXw/WE58ai9GJGt+WyprNC8uT3NZO3NyazxNRU8kIX1tXipRSVBPJE13Vz5zPSh3fHdbJGlTTDZZRXpVakVqYjV5ckVWaXMj''@;'; put 'put ''ZGw7L2E3JHx1Q0Z3UiNYb34/Lnh9L3V5XTg2YCtWd0RTODd1SVM0U1dyJlMuKVRMOmZmeFYqfUgia31JQ2A1Snd0PkQmb2Q8eTMhWiV+Kk9KOGk5bmxfZkRXIU93QXhTeitJajl0SzIha0VpeTs+X3hUczV4TE9wIiR3aTNRMmdzYm44eVMzQGBAW0F4TWdzNTdMfWNpa0V6Vlp1VyhWWl96Z3lX''@;'; put 'put ''TjlLeFkmTV9EYGMsMDRzQmdEWzpicCZeYmJZVV4/ZzxuWU56VXtsLChmTnEldF8oZVhUNEBCbEBDK3NVOWgudXZTfWxbUHk9K3JtNkU4TmxsJX10Y2NCRTdIZlNoZj9+OGR8ZDxObXUqK0U9IyRMais1cDNqKTtfRnU3PilTTkdmRlcxLj85aFhBSDNbeWxfa31OQnw1JkQpMlNWd1FAIjU0cW08''@;'; put 'put ''WjsqZ0FHViNefDs+S0JBPDo4cVAkRlZjJChzcE9LcXYjUUUhezczbW1sMF4qcXhRRkJLKiorUiEja3ZnTi5seyhUaGZlfnlUQGkxMnBKbVMvPXZzMis1eH4oelFoMUo0bnpzb1t4R3ZJNmlYSWFHdyhgTT9sYU46ISRoczZOaTJ+eGpdZVViLH02NyZzdDwsZU0lXVh0SEtZR0hFfjVOSi5SVERh''@;'; put 'put ''PTpMWCV0IkN6VF8hZzo0clRbWU59MldadXxHRDQ7em43MWVreTBpbU1gdlcwPDR1YyZLeDlvZFJRPUw4XVc3N3IpPD8jNHVFYD0qKldZQj0mSHhUSDQxbX1mdDl4cHM5YV4wLCU7V3lkNmklY2NPe09waShiOT9+V2lAbUxNe1B2XTwvWDZPcjNjQ0dEeHNzdTFAODM4YD9iOXFYdFlrfngiTkVI''@;'; put 'put ''N2tKVWpPdm0vMmdCTkhqMHhyTW1JJmN2ZU5kVEQlJVdYcFNbNlRQfUwme0NJKShWdSYiMFYwd0QjaU9bfmQ5VGdreSEhJHYxRS5mOnJWKl52QmhGY209S3suJTl8SXdZbj51TWY6OyRlRXY2djx7VWw5TEY8ZjQ6MSpuMWo6eXo8VE1IeVNMUmBPVGdMUDRidWRYaSpVUkhuWDpNRkZ6UjwzRVVI''@;'; put 'put ''IUNKSTxaPXJ4R1s9bFd1eShAZUdGKlBdUEZHT0U1bFBuRjkhKEhFP0pfYWZTM1IyMkRoP0plaVV9fk9YbEN9WHQ2VWdUNjIxI3cwTGtKIlBmakdnSDksNzI9MGRmV3UiOzI8N1RZeTpNWndsSDtieFBHYD8oVSwrVFd9PyUiRH00JCZwWWclV2NSMT1kVllBQXs0Z25zc0NdNkpfSGBzSztbZnZ3''@;'; put 'put ''cXBkd2txaX5sSl88Z3RIeWtSQSNsZDNmNkwmNHlhaE4qQGByQ01JVlpmLGV7RjpFJGAuem1TRiV2dF0pT3RoSXJ7NHsyc2tbKCVHLnBQWDhifUY8ezpxSVNTYDJLTmlicElTUH1IQXMuc3BnKlkueWw3NHVkXmEhIjsjbWZEdUo6RGJFVSwhJDc1SV5GdmpEYXAjZmgyQSIyNSpKJHp2JGhbNjN2''@;'; put 'put ''STU/RyxyV0o0blI1LDo3UE0/fnV8NEhKMSJPUk47R0d4I1h+PmEwViRkI3AoOyRfPzBZMzpDbHdjWVlIcXU/fWwofH0jP3d4dkw2QSVqallXLnp5K0pkKlVtYDk1X0IkRGNIOzMhemZue18wMmU/bjJ8NVk0emFmN2pdKnxrIzw/SVlIY0MxfDV8RHVJdzcjNSJDcSw+eENPWGRRPSorQFhsY3lD''@;'; put 'put ''MXJNcDw4R0VoVVJgU2lFXSwhVmQxJW9hKXopOkYpJFo9OkxEOCU/Ok0jVWVRPGh9YlNWUnojVFNpKXRCWUAxbCZiVCgwMU1hLD0yPURbO2ZQJjhrQEVfaHcuWl1HMzNnZFtafGE9IS9kP1FlLkhULG1uNUs1fCtQR283MnR7JWtdI2BkN0l9dCZ5bix5QXEvOFFhOGBaT0w3YFM8PnJ0bSsyXyJ6''@;'; put 'put ''Lip0eFJWeFc3XyRiJWBMSGBfZV85e19pYSgkX1QofGEveDM5RjZ1VGd0eklVc2pXVU9+NEhqIWxaTXNYYmFtIj1jfV9NSCMkbSpHKmtuaWppOm87ajo6cTFraWppNTlxZFFKVGJRdDRgdWkoS2MpLmM/KmdJWE4vLlB2SlZaSnx2LjlOMGtZeX58YTtQKzFWZE8pYVduTkdzdyxgMEdbeFZoWy90''@;'; put 'put ''bVVHKTF5XzpnWmxFeTUic2taaFNoS1dwL1V0UF55bS55dm5uLnhxd3lLMzJVIXB+UVJAJGZHUH4pTmMyTzpxM180YWNzfj9QcDx+WnopamNjSSlIV1BXdFNeOGw+e1hWPT4ydWAxXmNPSnJQOmp2SXxidkMjSFMrYFokT0kpbDB5WHtIY1dnZGdHflJqI1BdVjFSb1MhPGcifD9+Pns2UHQoPH5J''@;'; put 'put ''MWA3TXlPcT0+RzoiLzo5MGYiNzZQMXVCUW1MfkBsJCZfc3tncHImOnsqSiNAI3JSfVspUDQ9OTVWSXVPPnZAbyQycWg7SilwQ21FQV1GJFtaZWw1c0d+XnFZSEZCXVpWRTJxdntTOX5RNmF+WUhubD99K3NseVA2fjYjZTVVX0dWXSl1cztAajQsbFEwYzl+OXozXllkcHBYWzVxNH5BPDhdfktT''@;'; put 'put ''Yzs0LCFqbTpjcG5jZFRYek86QHhDfl53PmcoV1RqQEVqOi5RZiU6cFQ/SWkyMHdKITdFWjRLd1VUPChmamhEJGp2MDRENnR0Yk44d14qTkNFZl5dNWlZVlUoJWY5YyNxSUF2KkVmKUFkOGdVKypGdWZyeDA/Xy8jcE9VPjs/ZEg/LHt1dHVONShNeDlzPlB1JXxYfV9lL3Q1SyR3a3Z3OXQ/QFh4''@;'; put 'put ''NEtVdSl9cm8oLGpXRFpPOFRKLmk6Okp9fSNOYjFgOj5dcnhecVRDdzc8IT4mZ0s6N19Adm1zfjk8Q05SYDpOIjx8Z19nPGZORkojK3IyY2V8UGdFdTdNWXV3NVRCRzUqWEMpaWYzfmt3VmBiLkJtJkgxYnhBb2FbaygzPlo8eHB4X0VhKS5WdGdsNS9yJk5uU0RudVZaa182ckJ7anRqcFgjdWNq''@;'; put 'put ''aSFrdFBqVXhDPkxKWDt6RVZeM2lzTD5Vc2c1ckU4bGA+cTpma0puVDJ7ZXkxc1hYInQ0UU0uQngldWAkbX5IfVtoWE1IKjljaVBwV2ZfZitIWHtCT01fWSN2U0h1Z3N1MmN7R3diSTY8cyNwJjglOkhULCNLZTY6WSlyK3BuajhlOTV6Pm5bUVt9JCkjWmJqWFBGUyhZbkguJV58W1sjem5LW0Av''@;'; put 'put ''WCZmbzldN3QrOTVINWxqQjBLMDk+JjxLQlo5Ly9HZn06Ing+THBQY2VDdzo/W2ZkfTY9S34hcn1IP2QpVT0sPmY+dXR6LnxLNnF4QzY/UGJuZFpeSyxYW3NdfW5oZihZdVlicElncGNHaj1mXlE0XVdgNzIjc3BTSUZLJVA7e1FGKH4uVHRAMC5BckZkfTVmUTlNUUdmUU1lTH5WQj42LmBdP1BA''@;'; put 'put ''Z3ZCKGZLYCpzfT1KZ0dbWj5WeHtFIl8sTDYyJkNLMmxyOHpSW2c7On4udlssZDc2ZTdmOCpJOHpVQjlueTFie3omIk9rKCswOzc7e354XiQ3P0MsPnk6L1pwejJeVldpJFRXPldvYWo6eG4qSXU9SX1kOEhIfj1gM0d6ZHk9X2J0QzxyOU4kQWpOb2FUZVRqM1Z6cjM4cHI2UVVPIXRHS31WWlBp''@;'; put 'put ''cTxadXYpPWtMTCpVYjptR0JgQzNsfDF7O3pqQnBtOG1YU3pUTGgzXjRwTGtyXVFyRkRja3lzIVl4MnJ2IjYyNl97UDd9MENJIyU8fl1fczdXXShCNSI5OiNoZGxWL2YrL3A2KjlmVStOcFlNaFk8Y2clTmM+VmYkeVtme3k/W3BZaH43OEo1b01NOlM7QTEwU182VW5iM3AjODByaSJmRVJ8ciZp''@;'; put 'put ''TDN0UiJvbkl3KkdVOVYwRHxoayJ3SFdLQFRnY29NNmsmRVd0dzZIWjFwc1JGUlBae05yIV1HRXY+XlB+U2ptSlg2emk5NUZpSzNDUGYpcjlDWzt8UnlQaU5+UXImfGBoIXojWD58ajxWaWZOX2w2bndfR1doXj56dC9RUyZDclRlSygwS2BdJis/OHk3JSVHSWwoIyskVFRfIWc3UFY0SWYyR20h''@;'; put 'put ''KVFDTU16RlRzKipNLnAuUClKQiU1ZjhJRHoyMkRqZUcsPDYrJSMqYmp8MWxGNjZ4fUlGallES3YkdlZzRnh8SUoqX1NXJWgsNygsbHZdfWQzNTRoNkYoV1NTL3wrXUNdSj8/ISRJeyk8WV84d2tFemgySmFIeGwyW0R8VV5dRXNtSGk3LnhfXVEsQT1ESEc8IXM3S3JDTFlnSCFzYHtNTmEueVJy''@;'; put 'put ''TFp4bzdoQlJpRjYhMko/JW86QS5JXz4mZyhOZXU0ZV01Vjw+SEV9KXYlU3dqOSxdMVczaSJ3aC5UQjAkUytzQE9FO2kySCtTLzBUJUA2YGgzZzpsSE97M1IsMF5KQEpIQ3o0VyNQd1YyfClfJTMoMUdfdUBgfFIzKXNCfkgvXyh1JWptU2oyOV0kVnA5ciYiJF87elRRTHpqMXkqYE82Qk9RdWJQ''@;'; put 'put ''fjJkMHNXPjt5YjdOYFNJdktUM2tDNkNBO3lHK3IvKVdaKDxkYFg0SFQzeEVtK1FsKmV2dXYobXB1L3M8dkJ2fFpxUXJDV0YxNn5JJmdAYzFWOzpQJih1VmxJRHswRiF2XnApNnUjKSZzOCk+dU5nR310XV12Myk7M1V3dCYybDhFcClgNXsvPThpNUYhJFIpXWZoeVg4bz8qciM2Y2VHVmlIW0hV''@;'; put 'put ''IzxCWCgpTGlURmhOUDcrMDx+XTRGfXtANDI0I3p6KHtFS3omSVAoU3ksS05hWHd5JSNoWFE6YSlMXWE5PUlsOkRKRW9WJGx7TnAkRjNrcStwMjR5a2Vid11hUWJZOFs1K2JVQFU2OVtCOz8jImcvPlQhZF47czw6M0NEdHRsNW5SeTwhSXMoZnMyWk9TMDpeQUE4OyxUYlIzdmBNMityPm1RW3d4''@;'; put 'put ''N11pTTpdQzNNMlIyOCkmJnksaDA7ZVRZVjFCOlprRjZEeCliVS8welh5VGlnUDJhKTpdLFE0cixtcD9Zc05xbltsUmpQWEc+Rz5FfEU/fTtzZT5AaEpdYkk3YHNfPG9BSyZUTjhLM0A4SXJme0M6MkRmUjE4PSNnIUFhQl41RXNWNFJKa3d1YFFyTSxEOjNsQDZuMGErd3dfSFV5VUdtdH0sKVZ6''@;'; put 'put ''RDxNWVByTkY8fEFOe1hTYlpBJT1ANy8ydT4+P2VhW2shalBxU01GPXNjb1F5NSNNWXdKZ1B2Lk1sMmJUZnBdJChxYCY+Pm4xU2RVam5mUG1ZVFEraT5rNXA3cWYkYnQyRnMhY2cuZCFWcTdgOmIieV1MfUgsdUAwb2ppNk5yKGp1ai47NTJVeDRWVihZXTVJTiVjK3ZPIkt5fUcrKzVObXEmTlZg''@;'; put 'put ''KXpHW1UiVDtlLjhjdCVxTEdVcSUsMDR0YUpBYWVoN35rSDBBSiR9Izk9NFZbfW5sO2UzWmVYT3pHLz9AdTVkKSpmXyhhNUgyVGYuY3RGT1tobXFPbjMrXmZoOW5dLF5qTi4kTGZaX1NfUXFZTHRgZFMpR0lLUV9PJk1ATXZTSUF7RT55MSoxQ0I7ZWo3YD9HNTwybnlqbkImPk94YyJwW0ZlXXtu''@;'; put 'put ''cC4+LC5PfmxybnRiISkiRUFVT3BAeWY9NVtOKlR9Xlh0ZjxCNDIjQlRYYlJHSU0kcjxUWDJlZjQ3TFopZDRPVlJpU3U1K0A8XyxlPi5nMFhVQnM3K2J8Y0hucVo8NV97clo0SWwkJkQ4Y0tILzdAUXQ8PTdrYUs7T2dkbVFjPFdPQXkpe09NUyI3NWtUPEdEQV1OOHI5ezgydHFCcjkzJjReISRJ''@;'; put 'put ''OH08cWJURz04N097XmosbllqQXdZRT4vQHdgKD57STh+TXt6Vz1sZTw9VWdCbHFCMFB6Mi99IyIyM25DYnFpN1dRITlrX0poOlBEdj4raGUrXlcqOXohTzNTI21ZSDF2ZXd7b258W0kvbyF7VDhvcUx+YCpOUDNAZEIqanFMaUZPNmkjKFNKPUBlSWxjWnprUkx5ejJEIk9lZGR9S3xrMiFYWCx8''@;'; put 'put ''ISheXTB0WTJ0VyNoQzkkW2U5KWI5LyNuL0hBMUxOMGp6emtRLlo6PXp6T0BUQko8JGd0cTNnNHZPTVBQdE9GRCo7dj9iUGx+MmNAJmVHTW5aTS9NYG86bzZ6T0pVOitzS35QPyo8NXF4ISpCOGNbfXRkSWV1dzl1eXopbk04LyxhZW46SmZhMUYjVEM0MVp3X3dSLGBqTWtyYDFfdFROUCRiQ2os''@;'; put 'put ''QzpIaGZxfGs2czEuSn0uKHp6OlFnRnRCKzJ0ZylgWipNa2d6U2B5c1t3VSNpUV5iLGVFRFUkUCk2SWtfd3AyOk5dczhVWG1ybGVMRnIkOndVKDo+YXdPQWRjbWFfWS9ZWnlHb20yYF0sUDE6ZlNrQ0RQXj5HTDM0aD1QXV9HWlRjNixZVFBDVyoiQjV6dGRBOWhTRSVHfF1KZWFgcmh5fTxFeDtD''@;'; put 'put ''R2NPOS4yWn0jNjVhUHpCSkQqeDsoWWp0VH0hIiFsM2k8IV5nYHFNPC57LlNtX0A+R15rNlkiNEU6bX19JV0xLyoveVQoMSRYeSRGJCo1TGklRlRjMWgjYmVWcEIvSFk0altVdyxaW1lPVUxHTEBkKWJ1JWFoeG55QnxfT3pHU1ttR1EoaHRWW3ArNiFYTE8/I0dGPkA5W1dGViFyPV9vNW5SKThj''@;'; put 'put ''Llo0cFBJZjJFdm1qZ3JrPyEla1NBKTlsPHtqcm1eVENLdSNRd0E/VX50enxdLHQyZ2AqbF43bWU9N3NPbkNJOE8jJCQ6ZmJvdzorTGJXfCJjIj1FWCt7KmtkN2JeLk49NGlFa0s2fVFfbiEpWiNjLH5sOl0yYCFyNUspcm5wcCJNdE8yPUdwX11yVzdmWkxDdHY+JlU5aCFocixLdXEuSEFAJkJN''@;'; put 'put ''Sm13JEhZYm5NP3MyNWE+NTBDa1hzLmJkPERpK1VWW0Y7cWFFUGF6UkUqKXAsaDdYMF9scGBTck9bM1EqdnZ1PmE6Qn5oLmZKSXJ7UCtwWzpANUFNLklSd0VmI3ksQyx5cCROPmtrdHJdZVFdTDZHOywmaDdLVDJmNVYpImkmXUlKTGY8M3lDeUg0NS44KXReRGAsQUxFW3l9OGVmPklMUj41dk9Y''@;'; put 'put ''VTVGblkyVz92Z2shSz9uZSIpYW9zWD5IQ2Z2WCEmP1ZpVm5uOiw+bjouQzJmIjQoRSloUjtSP3h4Tkl2Yn5+PGhGb1JvaT8kU2VYWmwjZj5AYmUkOTRYeHEpajQ+LDpiSjd+IXxxUXZEMTBXKD9MN1h9SWI2QDFxcEklTiEyL2F0T3M0S3VMe2tld3JROjFvYCM2cW4xJWY0VW9KYlg5cytFcjRt''@;'; put 'put ''cms/c2cxbF0mNDs1UjkyNSslcE8jY3gpZCtdbCZnUnprNDtwQGh+XSs/UVtzQ2wxfiQ2eSo/X2poIUQveEIsOl86I2lwUTYkK01TYWFgSGRJNGFaQF4jVlloJCV0NiIxWH45TFp7VGQhcXFnQUU4WVtKSjRTaz4lPSg6dzR8b0ZnSSQpQjxPYFIsZkgoVjZZUm1raChFWEVyJDsxVUtxaWN0YkAv''@;'; put 'put ''JSJwfXdVd3o+ejNMMm5lPlopdHx8K2xYbXI5XjhWKXRvXVlQXiYyPHJHUFQoQFA8eCgkOVZnPHBfNiRrXWtNanV9fHVPJXslLF8yZkhSMCwuPmZIPSVdUSxQXkU6TmF0TnpdanQ/OFUsRUJuSThEeWZAd1BQVSRnJllNRVI6amZUWTxATTM5UTpxOmpvX2p+cm5pRS9dXm1LRjlgTlFXWEpkQHxj''@;'; put 'put ''YWpdcSEuUXdKcENidS9HZW1dZTgmV1tNKVd3RyRwK3xbcChyJipiRV5CP2I+VmZdNEZNY3c8Ym5MSyg5PXcwc20vOEVzWVZyUTRRfjUzJSNUbFtjU0tgb0p8cHFVMmRKJCNDflooe3Y2NE44S1trbTdia0I3V11rbDYwcDM9Qk8lViVHd3hAO29ONmFsMDw2NHNNP1ZiZkgiZXEvTVMqWDpOQGpb''@;'; put 'put ''YkdkREhpKXxpeGdrc3FzJTVhOHR1XSR3NGlDRH40S35eZXc3UGBje0RqLCZOLC4jUnx0VFY1Zis4cXkofnd9NldtTjxGczRoU1FhUTJ1eT97YnlaQz1xVj5bbXZeUTZ9YT4mfU4uUlIuWEVQL0lwcThsQ3tKOF9hOTRddzRgSGJlVTdFYHY7LHdQdktWNiNtM0trPSMmNDI+PDt9SH4zU2lpY3V6''@;'; put 'put ''Km8xI2Q8PSUsS0k7N3VSM2spYV9UakQ+PU5WZSl1UHJ9V3NTTDBqLF1xUSNpKVN2KnVDJChNbD9qUjFTJGEqLyRJcFUzMlNlKDVKZEt5JilpdyxheCEicGpeMltgMzBsOTJUbiMyWmJuLzA8UShLJS8rJUdxVXhKWFRtUCJDYDNWVVdPMi4rOHZuPHY4M3wqYEhgVCx4OilKNDNvKF9uOUhMczRh''@;'; put 'put ''PnQjamF2YC89M3d6IXU7bk12YjNpRV04WDpXXXohQl1CTjBocEtGTjdSbVROJGV4NjRRJWtCVFQ9KHd9X288YngmP1lMdH4oMnYmN2J3KSw6e3dlY3NPNiZ8Q3c1dHl1N08ockRXZGlpMDFQSX1JeDFWall1IVkzLlU8Ikd7cUM5NWpyTG87WXtAWkpsVTw7UC9EJipHTU5LKXZTLDY3KUAzV3U5''@;'; put 'put ''VUZ9cTtOe00mSyxeZ1VGbFlFSlBaaDYlKDhBQmBWVkdHXihDa28iTkAwSn08bk1pV196TnFBQSxiTnxKKDhUdzdTV09yLyxCZk4lQj4sPy5QKzxmLDUxYCQjPzozdT5KIVZYRVNPYyJvPH5MZUgpdjAuQFooXUJZSjhOS2RsPDZ1fnNtaWY5TU5ObnQ1amhjQTRTdVF1cUR7bGxtRCo1MEpFTlps''@;'; put 'put ''IzxgNTFeOW5yVGY2WEUpTTR3MmovYyIzeWVaTEJwVz0oOSxBL2gjcD9HX19xST5ZJXAyc1NnWU9+SmNqU2l5Oih3Y3FXNDxoKSIvZE1IPk1+RjxaPF16Xj0/VTI6VThYTSRdKVZeb2w4bzpAPWA9dilAYGc4QDgzZS9vK3RjOSI2dHhwfjt6fXImez99QFV4VVg+cyRxVW1qY2M6Zil5eDwjSXBC''@;'; put 'put ''NUx3dXEsfDgrLGElViVBK0goajUhZVQwKHViYWMuai9ANmhRblZZNEJoekY6eENHMEFqXmVZNWFGeUM2bkZSKDE9OWMpRVgmUCRdNDpvMWtJd2Z9MyhyUkQxLnhxTjY4SE53W0ZsXTRgWzpCXURJME90PzEwRD5PcWEqa2xDSDdCIldYZy9KWSk1Qn08JTAzNi5lLzxvcSJJP1NjbXNRUyJMaHsv''@;'; put 'put ''XjdqTTlWNklhOFBTTkp8QFdRKWhKN0BmYjpLZDg1UDVkTnE1dXhxSmhdUTBFRlgzcngkcjE/Zns2NH1JaSVDUFdpQ0B+Kyp2U3g+JXJIKVA5SFdkaW08bHtLa3RbKjlYNiQ5YiEkOTdla2giamtoL21raCUhLiZhPD47ZHtye0g8Pjtoe2F+cz07Mmh7amVNUG5YTGo1fXdrfixdU09AV2lpZyI4''@;'; put 'put ''PHhFJX09VTguKSohPk9dPT1tYSswO0FGSG9eKGZaV3tyWHBrWngvKnc9eGY5UW15bHwoOnd4SVB9XyZEUWlmMGkmS1ldODFnUldqL3l5b188KjtNeXk1eGFmPVZabXR8e0JPQHR8NHJPR2d3OHhAZHhOOHEwNE5OXVBneUc6c1hhVWVSSkBkP2ksfjJpWk1zLHQ7T01sKkQ8UFtIfG1Sc1JXRWNm''@;'; put 'put ''TSFHdmdSYy9SbVsqSGQ3eyZgcitYdi9sL3NsWGxEYmJ9bCo6IUY8V0d+bmI7QmBzZVsqVk9YX2w6UEx6ZUB7Z25QbGwxXnNjLDckLnYuXWAzcn1fczZ+M3BCOHQ6JGVfPWJvKn1MM1k6RlA8KlthOTtpcyJ7RFF+P3IwVT0sI3sqQTlzXVpoPXhmZ0RnKXI6JTQsY19BSkt7bVNnJiNKUj46K2ww''@;'; put 'put ''TV5vIWM/fjhzcT48W29CKltSc3VQOWt+YjhvNlFhNT9QSChaKTFDb0F5LClHVGYqYS5HPF0kIyVTMTR6dVU4ZGJbc1o1ZV4xQSVKKEQreEpkPnR7KjJrXiRKe2YxQlNvMHVHJFh0dW1EZyZyRT1pbFo4djhsOm5JYn1DbUxeLmQ+PzQqbXs+Yzwsa2ZkYFYsYk4vKjlfOEpaOntqeiFzZFRdUGxh''@;'; put 'put ''JDs2fjBkbDZ7djtmOn5UQldmbHppfnBBL0cvaXM/XyFqfD82I0tLIm5ze1c7RzJgYF8qNzZybXh4MGl1PXomUEs2LkdwelokbDxxNFtIUyghNUA6UVRmdj4mfTp3KmY8cT1dQmlhM2MlK3BDaytLNi50KCwvTWszVVElZ3Z1NTYuOHouanxFPFRgRUA5ajs5czZ+cCw/OSw/aW42WHxvPm8zODlm''@;'; put 'put ''aHBfaU0xX0xJcD9gQ2JfRDRybTRwVENLIjpAJml8UzxJSmlfLzBwLz5Hajc2dUV4LlBdSSZMUHE5cikuWmBbP3NweEVfPUt2LG8pKnV+ZD4mfWtwQHxEKSE6VGs2PGBkSlVuV2hLP3ApPnFzXU8mXmErOiFLTFh9QjxRO0NqdHllNERRclowVVZ6Onc3eXtWYnRVYFZdfSY3anJaZ3BFe11yWlcx''@;'; put 'put ''ZkRWbGJydThVMWlARyRwfix4OUReSzIhfiM2cCFTMWQ+R3BlZjxpNy50Ri5gSGlgb1A0USVLRCsqfGUkXSJnSDNIRlVeRX1MO084ajMrfktRVXs4PTpkVWFfeHFmayxLK1FNRWJSOGlba11KN0A4JiM8OE5Gd15AKnJeRXpvNSlUNlVAKll3OW9HKk41O2E7bCZ7SUssWk9uNnRgZkUhTSkre2cl''@;'; put 'put ''ZmwwKyVjZ1srPF8jamhUM0cjKFtrfTw8SWQjLmBtdTMvXUVeYDM1enlTX2B0eyMuJlllJS41T15hPHg6fFpVc09AciRdX2U/MGxkMlBhPl5jZ1tVPStbQFVnSTA7S2gwd1B8Uihoen06ZGhuW2lvPU9TPGV5eHczMjxzfGdwciNCYDxeb2QwN2I7VWZ7QEIuSHNna3o3R1ZWOiNbTlBoa25QVz82''@;'; put 'put ''SHkzTFNfMVkzTFMoWyIyaCluKHMzSzsmW2JrOzhEI0FxKXtySzRWSnJ6cF0jcX0wdm46aHNQOVZUbDY5VWR1Pn5bP2w7TTJDfVFzL35vWkViKSk6UEo4fHBpSCY4VzNfTCpfSURHPzEyY2dzVEViblVJWnEsT1N4NipxaWs8UmJtfFZ8YjcpSEpoa2FuVXQhS2NtSExFPDhnTUtiMmkoRmk+W1Nj''@;'; put 'put ''aSlhL05LL0ddLFVQMW9pbXZNZ3AzVDRkYVVuSzBiQCMmNlpUNnwlP00rMDsqeWJOJSUxYSRgUz1xO1pXaj1tVj9dV10kLCw4fHhrVVZ3OlRLO1ojfHBla3R9PWR2fUI4UTB6Lno3fiVSYXtGfVp+PXhyQ25WIyx3ZTFPQCwjKn5BOSM+Ol8vSHF4fWJafXY2Ryx2RS5gdCE0QHUqKWJlKj86SDw/''@;'; put 'put ''Om1QOlh7RXVgTlNNSjslS3JNfiJVSzlsKW01LkFnTyxuSU8oYllZbG5JT3gvZ09AInEuYU5lR3JtXk5mIzdbXkMlRWIqPEZ7PFs4diFMW3trWWFGa1ViT30qXUQjIjI2bG8jTGU8JChyLHk/I2Z4VGhrOkZQcztObHJtXlliJGN6PVZ8aEdyVSpFakB9NXpDYSsrWURdfl0yWVlkNCtENDNHYU1Z''@;'; put 'put ''a3dxTkpibHRTZlJEQSJUPmxKfHU1Wik2KVkxKVl5X1FrWlRYOWFSenw8aEApTzZwM3Fhez81K2ouMlJ1VDsiOlc+Yno7JT8hdHU/Vm9fPlJsLixfNnBYOjg9Ql9BcTk+UF8seVlTUCozSFVhVkc4VV1SMyZfVFI8JkcjOlJTPF1KNEFIZkB2UnN8dGU9andieHgvT1Fua2pEW3s3fGcmJnlCTld4''@;'; put 'put ''UCZePHp3e1U8Yz1Le2VLLiZCazZXczVubHhyRTl1bXVSfHs2SEtreDpOYTxtaFheSnJAWnBBL1ZvdT1TYW48KUBWNVlDMCReLjE3P1lfJVI8bSxock05NVpfLlpoMSQvWlFQXUlAZE99VzJCOCV8VVM1LFgxeTc/OHU8PiM4cE87KVhxYkZweX1gPEModC5AZ1E2TkYkfkFPWlp2fXp5OjkjVUVd''@;'; put 'put ''SCN4Z3xAW3xdUCpES05rZShdSENvVFFfb2ZZOlk9aDN7Yy5TKVZCfjw5ISQrakteWzQ4JkJAeUd9Si9aaDp3OiluaDo3OWNnaVJoNVFYNm9SfU07cWNJPU1gcGtxL1UhKF0/ekA/VUY2MHcyTz95cUY4Y0diYDdkWzFjWWMvSEgyRnwxc2UxbjxEYFZ9M2FQcFBoOStPVEgkX1t7YEVaXUpSaHck''@;'; put 'put ''cjo2JHckR3ZnPEIqQ3Z3fVZpaSEzUT8kT09Xcy8qKFYuMn1bI3t0KyhpWl98SXRkc1FBQEFJQUdCNkNHXVk0RiIwRWhCZ0FQSn0pOE06Q0VYe1FAMihIL0Y+dlhMT0NsQSRGV2V5S31BW1FfRSRBTjdzUGdBaz0kQX5CRUF8OStofUlLOnYoLEh9QVtRa0VpIWxCdzR8OWxCPig6PkBqeUtWQlEp''@;'; put 'put ''fDkuaChIUSJTSzVCTildaEpBSFguRn1lQ0ErRndZaSxwUDVtT1RlPSYwPTI6NkBlUTZqYD5QaVgpKmcmIy8vOyZmRXUjcVR5Lzl2K1p3PVFPPEgkQXM3Zkk6YWdTbDJKTjoocFNnM2wpQEdOd1Y+UGZXNEdiJHI7OldFYEZbS3lAYDlSYkc6Njkva3RBYTNtMEJQaCtzUVA4VXlWc15eYTthYVAh''@;'; put 'put ''NmA2d3hJfWlbQ2x1ZH1+aFYuT3NUQmxvcjFkamgrMmRjcT03NCtwbHlxZXBaTUBFanE2SXl1Vj1mWHsrbWlbKixQPSUrJSshSS5eSXpMcFhwMF1NeyFeK35XXXtta15UXS5dOG9ocnNdUTdmNl9gaDZWQDJFYWZXJXxAVCNKNmJrezYocixUc2RwP19iSV44bVMsKWx8e199SDx4cUNrIk8mbCwl''@;'; put 'put ''RGJgMXVWJGpHey4wcTVkISFLdHcoR0BibmZSL09mS18wUE98LjAzey4wKHsuMCNdMFB5OzgxO0JaNVNQRG1vWm07WzdkITFlTDJWU0lCKDE/UXU2NzEsSENmSCVGMCNicVIiI2ZbMmJzcF8qRm58aW8hPlpgKkpuUDgoOkpTLlRsT15pQ0pOdU1eTlR4UEE5O080NEFmQV1FbjhUK1h5SktUaiFg''@;'; put 'put ''YFdmbj0+IW1dOVVxIUo8QH4ubTVKY3taPnRGUjcpRWNWXV9EJkNzUy46SFMuOkghMlk6aTJUcDtoMjpHQzUhUmtIeyQvTHFNfXJVZF15XWlbMzJVXV11bl0uOjhgWjlHVHFbJTM1VEl3ZX5xOmlSPHw2KzlVPF1zI3szTHxNbGk4WFckfn44I2p7X2Z7aGxML29OeDIqN2Q9Zzp8WVpVXk89Z0gk''@;'; put 'put ''eiZJM3EwbTIrPHEwUkZOOC4wXk9lUGVkO1QyIy5mPTQmbFhhRXUzSEhjbGZ6dWpXOUB2NjkyRUxRbCpAM35jOihsLDhlSS5mfms5clMzcEomL2gmbzM4OV0/aX0kLm54TzE8JFcyPi93ME8jNj0hYD1lWD0sPUsvaV1XVG9sbX5+OCxsOjBZYjZqTlQ/Xy9pTmAuZklOZS5UUFFdfHprI104PDs5''@;'; put 'put ''YytiVzJiaEEqXWtjYUBESzxtZT5heSlTcmtUKyphU0BIMDYqODNATn5OIzRAQC82JEZ+IzU/OktUXmtjcyMqeGd3PUc0d1orMW5kMjc9JE1XVFZIcGY2KDQoOzp3Lm0wZWZuUWlYKXN1MmwlWThxITU4OSJePGFWcls4eV1KMDklMGV6MXYlKDJIJj9wNnArU0xrWDJ5NXpvfSNaVX0lXl1oMWs2''@;'; put 'put ''Wz9jXis4bl9PPVhRZXlmU3khWypUJDAjeit9SzdXI1VNZytqK2BpVVluKklAI0dpWHUqSWpwfi9AbSoxRWpqL2VLQm1sXVVsV2ZoJC52el44NSZyISRmNTMxVnYve0VMSlc2MCtsRFVtLEpnRzlUO1VuLl1lb0YsU2x1YH04K0pnJWszezxyYHYqKCNGJFlyeGVhJDw7MG18Jls5KllUM04zNF1d''@;'; put 'put ''UEkrR282O2ZeZyZ0a0VafmYmT08jQ1JGbVg/RSRRVTQjbz59PV1TKlpeUyx5RjNHV0duMkdIL2Zgc2k4UTJaOSo5eiQmJnw0I1pzYiRiSE5nTF5ESVcsUSVIU1kkel1NO0RKemhEdjFJe3hYQjZaeCo5WTczYi97S150YmdHLlF7K1pvX0ZhfFZoYmo/TGB+WTw9Zm9+cGdnRHZ5KFtjQVZRUVtu''@;'; put 'put ''UUB6YnF9MDwsJDRfXnN4TUMqSy9dMSVAIng7OX5wYGVicEx8REdyRlU0cDlub0s6ZEB3ITMvWH5ZdjVzfnhYMmxkJDkyP1dZd1lMWU1rUUx2WihxV1lAY1NPayJCKl51QVk2MDtVbjpPa1FSZWFjNnBGYGJUKW5lRk1pIkFZOzswdkFZZWdrIXFvaVdvdEIqWEMubk1LakBNYCxVUzQjV2wwMWMo''@;'; put 'put ''R3kwLlQrR2QiXlhRYyt1L3VjKjBXfEw6SUVoNnBzfFBvOi9GTTJ2MHBtTDJBQndncSJ7Z3pBfVtGU3R7XmRSaFU6JEokPTZ3WHY/UHM0bWJKQU1+RkliU2twNmZhe2dnTCtfJF4zcGouRGdkVWBlWD1ZOWcvLEJJM1J5N0ZBd01rKDRvQjx2OyxRcjBMR0Q3RmpxL3krMnlySipaVHZ9MCRibG5G''@;'; put 'put ''X1FdbExlb0c9dXV2VnZibUF2bEJBTT5XUURBTTxXJEFxRmpRdnVyLmo5cCxjS194YGJBTX5GRkVockFZP1giW11BQUdmZ3xfImZSdHRCVy9XdWF4KCwvb0VKfVpsRyx0aU0kQTx2Njp4WyFpUkhSSFJ0XlhOajJXfEw6LkFqKUZBdyZDVm1nYn5Gcl1aIWMqKF5AaUNGJFc6InRCR0AlTj9LI3Ju''@;'; put 'put ''ci9tVndCOVckRGQ+ZU5qd0ZhZktOMG4wTWp7cHIqbjI7dk1qZUlsYVVSOGlPPXFPVUtMT1hGTCw/TzZhbVN+Mzt6JixuPSEucE17az1nMFtNSz9OYjZvRi5WJSZ9RV52R0xFS2pOajJES0hLKWp1UDAySHBHV1tYekBeMDpCbldrcllqYk5qUE9iUjpsRDdPdihYPkxCWTs3fG9fVG1aQFd+WVdb''@;'; put 'put ''SkxhOypdQF92VGsqL3lBWV9jME9KW3pmYF85VXZiOEtDdzJIUGNGcnB2UXB2SGlHPzVBdyxmUSVBfUh7U25CZk5AS3t7ZmI2Tys0aHUlfmh8OCt2Ij5Hc3N9PnteXitFcVozIzw1QG1AezNldVl4Ok5rUXpnZXhmSngmQ2h5T21TV3J7M1B2dVUqO3FUanIudW9RTEB7QU1HVWdwQHN8bV5NImNF''@;'; put 'put ''d2o7eFU2fFJVbkdCWldbO3lGWSp0cS5zekYlMihtMEtZY0B3ISNyITJULGhbWS5KTHBHQUREbCk3NWRfWzo0X29zNFFAOjRkTmNoVXdHZSVdLEN3IytJJjM1dksoSXs+bHRoZypiNls7Q0h1KWN5PzorJDR7NmgsO0JTLHNdO0BuX31Hc1h7PW93Xz0rTkxCKCFEKG8+VTw6fTdtL34hNyVKeSxZ''@;'; put 'put ''T1UoYzhgWn1PQFYuWG1rZUpdNyQhcXk+aCYjLz4jd3tkZzpEbEdPfDs0WH02WytnNnMuOlhmN3NhWmErblpod3QoUHNrJU84KnthX05XWWRuaHN8Mz0sOX5KUHtLKHttdkN8QCU3IkhaVVFQNiRFYlg4QTdYIy5sLzhqUlY8QWxyMDB1K01ROU4kXjh5U3g2IW5fJXM7O1VMVFVmR29dUWhFNmcu''@;'; put 'put ''NDpMbSw4UiVfLlk0S0VwVmpxPGxCSEpHKU9TYTpYPCRZelBCRHVaczV6PUNPLDY+RDBaMSJUQk1LYWNoLDlJXWN5N19mRClAJHh2N29RQUFNR0ZLVGshOTVqaWJDaXF4NTZ0R1tydnoydm5ZVTtMbkVHRkF3VkJBTWUidXVhTE4/eTZrP3VxTUtAZnVQJUU8a3hfcE5jRm4jOXJ9VU50NXZYSyRf''@;'; put 'put ''JFk7KXN5IVd5S2BbTW1GQnVJJjM0Q1JWL0xdXmxCRW9qQyk9SWJHaixFeVA4X3FDRW1zS3wkRm8qczBNd350WkF9IkxGaWlXPkF3fiFtPT5KWDkvPyhCQmJGdm5WQm94QENeSlIhOE1vW1B1I3p6Qz5JLHkka09tTzohK0hYZnQ1dnw/MltAWSJYamdRQ2NrenRXWkFZNCFJVCIzeFUzRTtUSylo''@;'; put 'put ''Tm5VbkVPITd5Q1JJMmdxbDVpRHBZcklnIj1Jb2k7Q3N1fD8rRX1RUnRAVlFdTys3UnpadEopX0ZCNS9YYmJYeSImRzYuPmkubyxOI3pka09dS219SFhXMEU6YEY8XnZAVllHU0NreWhXY0RII05rfDBqblVCQ20rKmkvRz80YyUkX3FrPWBsUyQmLyRjUipEVCRjanYmWyg3eURJTCg0dj82aG8v''@;'; put 'put ''JDRsKVA3K2JxYzVOQCp3bkQzb1pbIlgmKWFNMDQmbnVKezpffHVzazd9cTIsMiQ2UygocTE2ODw2Izo/ITxPbEwwUX0iWTNNLixnRiF7c3BxI1NyRDskezRwYj1bOFR9bC9ld0QpRDswQHpeKFBeeVJ2Rmo1PT5VVCt8czg8RF0yP2U0MDtYWn5eJjFyWyNZKWA9InJbcjBncjFyYTY/cTZNZGdN''@;'; put 'put ''bTc7cm9gWShvVG1tOyReIT0kUyIvTVllME5iY24pb3FPVj5VfVU3dGl4JlEsb1JdNSZTUWY9Om81Oj1mZE9SJFhiNF5LYUpSWClIbnRmcSVOPVBpT1pXSTpuLitlImNuViVARDR1ZCw4KyFyKnpLJip3Pj44S0tlS1U5UnxhazhCYXI5a1F2b1g/TzxsNnVQOXBKOTRZa2RAM3pmbkowZE5DVyE5''@;'; put 'put ''cyR9VHV2UjEiJmtEfEMyQj9jfEMjX2Z3RHttKnNwOmtXK3hIa3d2LnVgTyt+QXpbYXtnaUFmWGU1NHdqNWhJXnI8YUNIbXdGR34mWT1qUm9IVHYjWHRTJFgheTg8Uj9+cURLKkQlN11AdjtzcmJmaTQjeyFhRmt8aTtRJkhSIylzPU08azpzPGBla0BfPG5YQFZbSD95VT8wMiNbVytzWGsqb1lo''@;'; put 'put ''TWplYF8+cTRATElhZiZTbXRjenRCTHBXU0x5T1Q6ZiM0SVZJcD9YRkloOn4uWnxIK144SnJHeTtVfH5db1Z5YDB7VmJ0KnJ9bz9YQj1KcER5ay5gYmgubDxjUFQ6TWwjQ1pnVFV5T1FES0gsUFN1KH0qcj9fVl1uKH19MU9sRzFoOXp5Kk44TztQN1U4fXAlaDN6Z2U/IyNzQnI7T1NSSjZTRkt5''@;'; put 'put ''T15zZTcxNT4lfSs8cyN+ajJaKDRfQFReIjZ5Zik+NCQ9c0tsJj5IKjZJenlwb100TTkvO2kudkhpc3gxKlVOK3hLbntpXU1SWkssMEZ4dz1wVWhuJCNYM1tKa3VFJTckPDtEPUVjJSZbYWV6cSkqcjNQSGVsUXVzY2cmIXhYfEBEYFhfdWQ3fkYvRzJSOnY5RWBZek9MeCE+UFd5TEZ4Yl1JNChP''@;'; put 'put ''P00mbktRUFpLfktEN1hra3c6Pn16SlZCVUZHd3d2SU0jZU1rZUYjOnc+IzI3OzV0RGF6TDlJcWc3VEskfiM1QWFQZVpEVy9iOSNwTS57OCNXJiMzK1QrJi4ucSNjWWZ0bU1oa1tzZXZxVz80bEcrdD1NL000VnYwRlRlfDQuKipmZntsZDIrTExKcjowfi5LKmBPKC5IL2w8SnkzM1lePHA2PjV+''@;'; put 'put ''KytteERwPClofSo2ZDkzeSExJV1KMTcmZTh9Xiosa0tnaypfZXB2OnQpeUo/KHRCY2lYRWRMWG1rIUIqMlswW3NXWktxcDg+VD0yc0Z5SUxuczUyRn07KzJqSn1QNk5mY1pmUmJ6REYyPWRkWX4qS0QwKTp0fmJxUGlzNUxaWEtWLlBMcFc2L1goRVd9fnd7UmFkQGF7Mmo3T1BzZW85TixrcnlJ''@;'; put 'put ''IytwUkt0dXBdMjdrW21eQmsmajt+KiouZVV7MV0jWlIqL3hzc3piMXl4LnxvfDo3Z3dkJX0pUWdLbmtJP3lHVDhOfmhwbCx3Ois8ZDJ4QXxgI1V+eENXZW5sSWQoWXZtXjJnS05vPVdyUEZsSntzVmk+Zl0kIVQ5Qzhoa1d6ZUtrJG4oQDY5YSFFJkA/aSF5fCJ9MDxVW0orel1+RVVeOXsuRDdR''@;'; put 'put ''YWFXPzF7Zn12NnNaVml4S29fOVV8akM0ZWdUOERGSXlZaHNqVHJjLFglfmZGUHhPYT06UFZfJnpYJGsldXMvWFNscyp6W1Eway59Xks2fUIsRSJ2KUEmLCs4alU8YEt+PlJLL2JSd0A1aFpga1dKe2J7cn5baVN9cSFzbG0qVmZYPmR8S0Z3YG5hOlkxOGA2Xn50TXx6XippZEleXl8xWm0qbl5t''@;'; put 'put ''O3xlVixKI3UxZnFCKmAhTzRTKDwhK29+UjJhTTQlMkUsMXJVMCNyKCFFQ01+Mz4jTTFyPDguZE9yRGJuclJdOiFDWXw2KWFCMTk0eGU8LGtmUGU9JUJ2TkhscTlIMHdTVkM/KTQuMmgqSEVoOyhlPUd2Z1AqSTRje0JgZlBhYzM/I2VIcCVzITB+ISxuLHd7Z0w+VXl0KDBlXWUyckI4SG5EOHU8''@;'; put 'put ''WS9mJHQjfkwoYUMlYyZaXSVMLGJsMjZQZzhZKFI7TUBtWTolI3h0ZmUuK2dIOjpnQz1QZ0MzfDZ+PHRQLEc7PHlZa2BVSW5JNXBIZjdsQiFtKmt7T34xbVJ9WE4vKyQhIThQUEdmSUtBKTwpRTFffWEkKzY9PlhOLmxwMkBzI0B1WV87Km9wXnZNKyNmXXhtSn09b0teZmBiOTlJQjNOenQzVyQ0''@;'; put 'put ''QCxYX10hV1k1YEg0aEBfdVlHPVc1OENvfVptQnI2W2IyIV1WNUkhKWxpODR9YHRyfWU6Qm9PXkNYay5Ac1ReP0hPVTVAL0hhfFJVenpjPnNDKz9BZz9SMGhCaWBNcVtyK0tHWlFdXW4vKDhhe2gsa3FPVUo0PWpvO1Z5Pzhea1pnd2lSRTNNU1p6KXV3an1mfkY4YT87emMmcFFWLHFBPkNuQiZ0''@;'; put 'put ''PlduTCVGPkNuQiZ0PlduTCVGPkNuQiZ0Pld4TnhObzRqUylyeF5mbX5DbkImdD5XbkwlRj5DbkImdD5XbkwlRj5DbkImdD5XbkwlRj5DbkImdD5XbkwlRj5DbkImdD5XbkwlRj5DbkImdD5XbkwlRkVnMkpuQiZ0X2swUz5DeHJUXywmS3xrPnlyVF8sJkt8I04lV0ExWDVgTy54LFFiLmRUUF8s''@;'; put 'put ''Jkt8az55clRfLCZLfGs+eXJUXywmS3xrPnlyVF8sJkt8az55clRfLCZLfGs+eXJUXywmS3xrPnlyVF8sJkt8az55clRfLCZLfGs+eXJUXywmS3xrPnlyVF8sJkt8az55clRfLCZLfGs+eXJUXywmS3xrPnlyVF8sJkt8az55clRfLCZLfGs+eXJUXywmS3xrPnlyVF8sJkt8az4vMmE6Nj4mR1Yv''@;'; put 'put ''UXgjWlk+eXJUXywmS3xrPnlyVF8sJkt8az55clRfLCZLfGs+eXJUXywmS3xrPnlyVF8sJkt8az55ck9UJl5LfFszTmIvJlJ5YVlPNTBjYU9OSDF3YVlPNTBjYU9rUyFCYCN8SHVkWG1beHU8NS8jbFlPTkgxd2FZTzUwY2FPTkgxd2FZTzUwY2FPTkhUMjB3YVlPNTBjYU9OSDF3YVlPNTBjYU9O''@;'; put 'put ''SDF3YVl5Tk81MGNhT05IMXdhWU81MGNhT05IMXdhWU81MGNbWmFPTkgxd2FZTzUwY2FPTkgxd2FZTzUwY2FPTkgxd2FZTzUwY2FPTkgxd2FZTzUwY2FPTkgxd2FZYGFObCwvJkdWLyV2ZWcjPnd5JVpoPmxtUywsOTohfFN4VWlZKERsU3hVTnZOYksseTZHWjtrSHBaeE5iXy95Nkdaazd2YztK''@;'; put 'put ''LGNoXTtuW2ZrN2JZazdRcGoocVAwNSQ6MVVIWms3UXBPeStjaF1hS3k1JDoxVUhaTURLVFtVUXtXeUVzQ15hS3hNV3krY2hdYUt5NV9PKV5XMllLMmBYOGJZOytfI1RESTw0WXF6PE1veiVaPk1veiVaPk1veiVaPk17LyZHIzs9ZkFjQSMsZX5qQForUG96JVo+TW96JVo+TW96JVo+TW96JVo+''@;'; put 'put ''TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVo+TW96JVpLWUliezNqcmkjYX5rcnEjQ2gue1hsc2RTc3AwITliOn1PYGQhIWE6Vk4kazEjb0ViMkRwejZyYTxrMSM0RWIy''@;'; put 'put ''bGpgYzpaMTYmWjE2YjpObDBTYjJOYjE2YjpObDBTYjI+In5QdFlAZHpKWzZMVDIjbjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObFNZPCpqPFhGa3JnPUBLa3J5I1pzLntT''@;'; put 'put ''bWhhRz1kOns2PGEhMTUvT114STBTKE9SMnZWYTViOklSMFMiWlIydlZiOns2LEd0U0lIUU9nYyQ0algsdXhESUhRT2djJDRqWHdqaEQ9bF9QQjd1PDZhfWojY3hmZ2MkNGpYLHV4RElIUU9nYyQ0algsdXhESUhRT2djJDRqWCx1eERJSFFPZ2MkNGpYLHV4RElIUU9nYyQ0algsdXhESUhRT3th''@;'; put 'put ''TmxBMFJfUSRtKFJfUiRuQFQkMmpbZW08czJOYj5Cb0hQZk5sZEgkazBTPUkwU1EsVDJOYjVZMTYyL3k2YWRObGRIK01UenYrNVI5SDZkeDdGZEw2VWFwMEBPK2R4N0ZkTDZVYXAwcU4uWTNWRiwsfUpMMjtKUVNrLjowajx6PTs9Zlo9VGsqdjNiQSN4JGAsUzhII3g3RmRMNlVhcDBATytkeDdG''@;'; put 'put ''ZEw2VWFwMEBPK2R4N0ZkNGpKYms5JVIse2Bhb05QV2hQeE5JcFMvPTEubX5uSj0lPkp8Sj1kNlJfVCQyaltlbTxzMitnaFlvSFFmTmw5SCRrSHA9STBTZyxUMitnNVkxNjQvaUM+b1NKMFNnLGdgPHI5W1s3WzdbN2QvK2QwZlU1YjorZFR+dFl3RFdjZlhPZFZUcmE+PXAyTmtKW18reTJucW9g''@;'; put 'put ''MlhNKigwTDRdPVhgSkxAOVY9fXdjNnFtI3BlX0VJJDkkIyFjWV5TcGdbV2ckflojNERufUF4Nz15UT9TKGNYbWsuR1Nwel91bkgsOGpQI2VKNV8/Um02diQmOW1weSQmLDxNV2tyQE94NzohfFN5JWxIOmtIcGBRTmw5SG0vT11xZ05sOUg8a0hwZlNObDlIXn0wXUltfWxGUUspRlFxT3F2QnY7''@;'; put 'put ''T0gyITEkR3kxI0QiaExgNWVCOEU5c3xnbVd4NXNSdmQkQjl+JDxvaDRaKl0rfE0/dmdReTk1THV1ZERQNW5MbiUxZEh2fkZiTj1WNTQ8dGBANjRlWFhObiVVQEhHYk43O2VLWFg4Qm55P0ZYWGM1YHwkR1N4RFlJKHNrNiNHVyxRTHRETWkieVdoejAxRUVVdEY8Nk1kIjIyI0RuWEZ1K2F4Kj4x''@;'; put 'put ''b1pbbj97XSNyZF1fTFNXL2tdS0dCKFVFUSEjK318JVQ7TG5FPFtOIjs/fnI6MWdxXj9+ckpJWyRRJCZdJDBVTHwkYV1gVFRvQSgyTzVRaUlMIzVoe0RSRXpzR2hDQ3hbUC90NnRmNk9XLDlkSD16ektOZiZGeFRoTiN8dSRmTmM9SiIlLjhoLGtLX3BkN0dDbEtlSVEkfWM/dU5iKml6NkpnLjRi''@;'; put 'put ''OmxqYTpFUTtrMSN0SWIydVkmekBPNS9ObFtoYTpwUjo0Yjp9JGE6cFI5L05sJGthOnBSaUc7KmA1JURsU3hVckkwU3l4JGtIcFdRMFN4RW1TeFVRSjBTdHdOYlFkejZ1aCY0YjpTZk5saUkka0l7PUkwUyQsVDJDc1tATEZqcTk1RCkzWHpQRnt1MSVSRCUpUTxrSXtTSjBTJCwqVGFHW152VSZx''@;'; put 'put ''TXtYSytfLypkTDduTzpqYUVteUF2K3UudDF9WWghal9ubiF6Xml7V3FSZmNALFMyN3hMNipIW2hhOnBSbS9ObGNRXltpQzR4eFkxNkYpYTpwUm4vTmw7VE5iODRteFZKfEVIZkxsO1RtIVZFWFFWbTgpMFdMbDtULjQsMHdVczx4KjdGJGt3VS8vOioxNXoiM1gwV0EpfSltRWI8P1hXS0FpWHor''@;'; put 'put ''eEJNIlR8PjlKPEZKZiUvIXVldTtJaXgyV0xsLk0qeHRaVzoqRStycFJJe1MyXTh4d05ibzVKYnE7PnVOYiMpSmJxO0x2TmJuTVIyXThHeE5iUUJLYnE7LyowV25Kbi9ObGBvcDVnPyksYDY9NGI6dzR1SmhFVCFzTSwwMXVrbyVAckl3ITd5MXVwUlpCPElKP3J2U0ouNHdKR3BCKjtJUCFAKWFM''@;'; put 'put ''WyhAQFpiIXlbWVlLUVlJQlNhaUB+SmBPMElpKy5MeWpQSEQuWDddaFNJQyJwSFZEdU0/IXs8dldDdGgjYjp+OT53e2xMRiVJRSJsQiRBQUFnQWtBek5dSj5SQllkNk86ZSk+e1ZnS2ZKYHh9TmI3cjAwZSJ+Kll9ZjdqeSZUTWxBZCF5LyYxTnN4bENCPnhsY2VPUmMpREt2fnRhcGs7dzxuK0x2''@;'; put 'put ''OH5yMjJ1P19XSSQrO2BOMTZlVmJPVWRBI3VWOE8uL0w2UDc7enxEQ0lETlpgRGFULlJkQ0NLKUBQLDZyJGk6bmxPeTlaKWdpfW41Oj9XYVhhOVlYclVqVFsrNChIUjhCZio1ODR9Tng9X1JbTmA/SkJmd0BAcVo3TmxaaFAvbmo8W2p7el13ISwiLn5SUkZSdlM3P1UqOTFqIlUjRXY3ZSQ6JXA6''@;'; put 'put ''Skw3ayF7OlRYI0VsT3lQXks1YHtoRThbRWxMNiRNPXZEaSQ3SjddVlU6JCx8Pj10JlZ7M3RWRmF0XlEjLkk/SjJzZ2pmTG9COjI1Rns2bHhpWTxdQkdJR0lYMClaXz9gQVlIYiRJal5RNyo2JFdDSWR0VWckK2h2OEZ6V0VhVk5AWDVQMmd6eCMhYDZNMilqaC89RX5LelhAWV5Hd3hCTkd1bkFE''@;'; put 'put ''K0RCfUY6Wl1oUF4wcTRPVUM4PkJzWDM+SExFJEhDb0QvbGEicUBBOyh0RiI0MDpkdztbNVQxa1JVJEVhTTVeYGNAQFBedWl8dkwoX2N5LiohZmxTZSJdZ29JSk06I2QhZiJRYlBreX5EXj56eytTbS52dXVPaTxUVl9pOVFeYSZAMn1TKWZNbS80SGYvdnhYSHRtVmNGSVdtJEtwTDBhcWAwUEk+''@;'; put 'put ''aV1iLmxMMkVfYldwNT00fGZBVVhmT3UzZD9ST3VWZyVPKEBOTjZ9UzNkVE1uaTJ7cFhrZkYqRjt2UyNQe0hNSnkibzlIU3hASjV4eDJzYUtwVHJfJVNgTjlWQnFvVWlKP0RYKndjPkdtK2xtJlp4YjdQUCRYcGJqMjpbaVAsVU8qbXRJKnhZYyVUPVhDZTgxcTFLPm8hKkYrU2xrald5Vn53dSJP''@;'; put 'put ''I0VBekEyZXhUZClkIUxyVDBfaVZOd3MmXnhwb0VxZWl3K05NVTxfSSxWM31qWiUvUFRZKFA3UUtORSF5eCJkbyltJUZofkcqXyJXSEZIcEF4e24kW29LUHk5dDlmODNVYWxdJX0+KDFaN1RqKz9SdF1odUFlMjZEVClRPmlXI011RkohR0k0YT9wXl89YGA9cVE6IUJ6O09CQzthL2d8VC9vOF80''@;'; put 'put ''LkZyR1RYVV13Wzt1RFE8Qmxvamk7NzBseytbU3hgInIkXzxUeUthYzRvTXcjVDR2ZGF4S19BYExabytZcTJTRyNCOW58eVMyKFo4JCJdcEBpUCI9Uk5Gb0FYanc7bHFgQnM7fEEoTzAkSG5DUSNjTEFXfnZ+dk47Wlk8SkYuRDg3d3QzYnlzfT5nb1QuQjdpWzwpYl41NVU0bUN+SS9LPmFwS1tH''@;'; put 'put ''OUtjWylTJlFxajYvYWU8ZWx5ZjJ6RCMkIlt9WEYxNVk9eD90fjtXNnYjOWclNT1FPToxeyYhLHE5c0I8XXVXc3wieEkhQTh9elFGNkZnczY6SS9kXU1eeHs5byVMY3koM3smUUA9TFFNWDEyVkE1a1JvcmpgKSFHZjgqbEdSUDp8ejZeRn4yUlElPGpKTDFbITk+TUc2YSwkaEE6TzhrNiMoYGlD''@;'; put 'put ''fWR1Oyg/el1dXWFFeUlidCFfOSM0JmlPS01CLmh7ZDpKIVM6VFVIME0/Il1vWm11Ryl0flQifHIxaz5saGdQQXJYeyIlKnY+bl1JN2Z6OlNLPW1uRyxUdG9RKFAwXnwyPWFSPjUybTRRPD1dV2J8O0ZHSC9XOiUzMWwrMHlJYFR9aDQiRjVOMHIqQ1MydCh2aFVhTD0rLy5YVSgpTmZPdSxoSWdR''@;'; put 'put ''bTJtNnhGO3o9MW9+TSJMYHcoa1pScTMrSyNsQU0sPms1VXUjS1M7T2MrKzxGRzFKNGJWKFFyXnh8RkczMjtGPXRreyxyXWY+MV0hfWdUZTV6RVsmfjhXZW0pcGoxTHpSeSkpMjdIfXRiM19TYmdjc1NBdyNMJjp2UDpWYj0qakdOUTBVcjc+XlA+diwqZCVNZmJWdiUlKlhMcEltMUpgJjZKRnlO''@;'; put 'put ''PFlBPHx5fTlePSwlZik1OlE7cX1GaCRUM1FUaDFfNlFbWTMoVUhOeVtyeEFtTWw2ZyNKd1cldDJgJEpRdWVNLm1kU0Z9VSQoJnJjJkI3ZDJGVmEwQjlqKmJWfUN7PmBMNi4mM2ZrTEw4PltHSEciWGVqR0NbcDJhQCRMJHI1VWRjQFpmUjNQSGh2fi47LC5tZD0pdzlESClTcCV7Y2tKUT58MUMl''@;'; put 'put ''JGN1cCVpJm54dGJzVnRtT0d7bFpRZF5ZJkxaOTUrQlFifUZNMUZ5WGtgLGNnQU5RfGc0UXRncDEoQTg+N0c2X3Q+eXRuOGhZKyF+XypFMytjcGU9ZFc2OkU9KXM9SWE+UEQ/bWZ6VUs4YDNwV3h+V0gxWCVZYDd8cFB2NW4oVFtiKk81JGVPMnA7Tyt6fCs1eXs+XWY2fnV9PDAoRm4+dUx5Yiwv''@;'; put 'put ''XllnYjxLJjhmKFpRVHZWWFAuZXcmcTpOYCs8eDwpNSlDQGlAN3VSWEo/a305LCZnKTFmaFY3dU1qVzQ5X0csQH0zVmsuV3YwfVA8U3o9YnomK0UsYSZ7MnMmdWRuYFZgcVdlUUx1WFtLK15QZHM2XUwjWHZGR3VvLCsqRTo7NlhbVmFnOko2R3M1KCgoZixzUUcvZHYlYl9tMS8yNGAwRmhuRk1V''@;'; put 'put ''LyoyJjlwPzx6N1lfYElxMFYjbF5kOy49ZXEqeVlVWFpiTSoxTXpCfT53YmBXXU87e3YvNjdNLHNKbkRpIkFze0JkW0doPHglUXtAfGIyXTpTZV5dKzw1bjpVNnxNOChuSUgoeXQvQn4vNT92I1B1Wy5RWVRbeDIvc1AzK1BzYT5VT1h3NmJdRkc4cU8lSCspfm9HJDE4Q2FPRXlJRXQmakdHLCl5''@;'; put 'put ''PzxuZEFpXUwwaWJ6eWxCU2V6I0B7OSI8JkY4SkEkNWF1aTBqQVNwLDJJKCMvVi9MNCVuNDBEIjJLNHFoTUBFIX5taklUSVokam9kM1EkNjQpQlUvSE5aSjk/P2dGTVRgTmojLDcodlk8NyFdSkpmJlQpK1tncWNJbVhNISE0RnVpOmIqWGBSc1FQbDhpczwsaikkbDdHWlp2Kz45L1BeK1I6QHt+''@;'; put 'put ''WSV4N2h2fnd6M2hKcm5JUzw3WDFmIV92eV9KMkZZell1RCNEclBManR0azcyW08oUXl7LmF8Ok4kYVEpMk81ZUs7KH00QWh3bCtKTnMpRTZ0RCp5Syx6JTNtTG4+Z2FhPnImQ3dqNSZpXnVDfldJMGg6XTx+PDQyWWlCbCM7RFd8QHNSSTRQW1V2SjBVeDxGdiV6JDszVE4+T2E+O2Evfmo2M3JQ''@;'; put 'put ''UE5hYzJJUl5QaVokVFp3bTpMNW5OL0xlRT59Niw/RTZfaWtZI15WPnZOYkdrWS96ZTtzYiJYMlQxKz9tR3wvdWshSmtNdU9hTkc5bmRXUW5kVDtCXko0ZEJ4KXVYalZ5UWc3WU13bWJ6Zj8/Wm5RTVBSXXNDYWQpfENsa0d3NHIlclFhP2lqSHNwNzZsdUJHUDBjRjpIYFVZL0ZOcTohbHhEck1k''@;'; put 'put ''XjskeEA1TDtSfmN+T0kuSS5Ic0l5dkklWEllVks1cks9OixGN3lacG0jQ15ROH5NO0whQ2hvQmgwRyRIaV5QSFszKWRjTj9ERDFJYWdGMzl+dmw8PjNadHxfV1pzKUhzPSlCaExWK3VHYTV3M0R8Qj8xTUdMPnI6a05HUHYqSkxPZ2dwKj1DMHRMPjtuLltxXTwvODFoX0ZhSXhPQWF3MDtBfVt1''@;'; put 'put ''KktKdSp7dCRiVFNxdXpSZjN8aXFjcHFRTCErbUo3OlZbeiZGOVM1VyNIc25TZiokLGRVciZseTZwdGZSLjdyME9vI15jNCMvOT06L11hL0VqJGFLOkQqV3giY0NDUCw6aGI/VlBMfEw/dGpecEo/OV9UMSZNLilnN2tPWDM4US5DT0cyVkFERTYve3psKEF6cmkudUhKK0g/eGB1RVclYi9rQi9G''@;'; put 'put ''YmJsMjhuUEVtL28uXy80UF17ZkJmRUZHJTNVZSxTam5ZSCNbd0JtaG47aHdZTU4menw8JHFMYXpUIkpuTVJeYWZbdylPVG1taE1IT3hfOltrSE96W0JQYHkpdTx8InFeS3pOMlhBI0YsIj06KTNkWmFOXi5tUVA0Y2YmViN0fXR1X0V8Ul87YmQoUzhbfEU/Y1AsbiszaWgkXXF4cDc4M28yQzQ8''@;'; put 'put ''Q3gyMnV8OzZQYUdUOkBXKXdPX0YkJE9eVUpJc18+NiUxJFIlYlE+SjlSYnNFZUp8R05LOXM8USEpYkAxPFpTRkZ5fio1V3ZCRDs5UnJYPWtVI2E1TUNpOyMqWD0ucDRiKmdNZTdKdCpuLiR+VDdWVnJYMjNBJnRnNF8ia1Q7Xl0pI2ZDIiQ9YnxSIXtTelhFc2NHQCR3X28kPEdxcDpBO01NJXhp''@;'; put 'put ''UERGWjpbMHJJL1taSFpjYUk+YyQ/WjFGWkprMylpITsoPioyWCRYWSEwSCFRWDM7Nj9XaEB2VyF6MFcsfSVAWjBfOm5OS1BjKkF1Wn05P3BteHBGe0w3Tk0pU2xhb0MlIVpldEo5O3ArcGFlQlRWXiIwMW9VSyE7Yl5CLDpeUCZPLklvdjEzT11PeDFKb1ImOGZ4R1V5X28sKFN2WUFeOyx5JEhE''@;'; put 'put ''flF+SXJZdWF6PnJTXmUpTlJIYTBtbFUjK2p4PH1+S31kd0kqVCpXUClqUH51Z2Q6c2txNkdKQkp8PFNGRDEqKUdGaillO2EqZFhwS0AzbiVXVFMvPyVLfWhFSikqQk18T1k4OjhsTyFaO3M6aXZSMEMqTUtdbz5nLD0sKT9RfihZakxnR3hLRitKV2N9dEUubl9NJmxSeEw2bEtrP2d8ZCJMQHRn''@;'; put 'put ''SzN4U3U+W304ezVML0t2RUIuLCUmIUhOPi9JYilTZGN8fCt9KCpbJGhkZC9jMFU9UH5aOHc3YnA8KXdGcyJnP2NNdzdxcmklI31RQjhFQnV0bE00b11bRCsjWEtGcWFfJjspP2VHezRONjRiJjJOKFA1az5MUms9XjdhVUp9RXFQJVksYXFFVW9aPC9gJXQpQCs7Q0dNTVZ3YCExYFlyS0VtYzpA''@;'; put 'put ''OSZdP2NZe3VNbnBRanU7bUB+LlRod0AxJUlpPSVMJVY8KlhUTyZyZ1B2WVk8KGNQXnFQUixoczMhWU1DVUQ8MlRSdjFfS08xMSN+SmBXfnk4WzErOXFPfE5xInRaKlVneS5xPSgpQGc5MCYqdyN3UkM5TztYVmVOa2lTYmYpaDdxeF9EQVE2UVI1e2FINE1UfW4jOF9LMD5uMHpLNzArQCsuXUha''@;'; put 'put ''RGZ0diZLWkc/aFNDd2hKOENbOFt0KldbeTE1TEMrW1gzOWZNI3Q6X0BSVXtuc3tBN1JsaWUofHUpPktmaFk3aCx2fDZ3PyxvS3M9XSRmYUw+RWw8PkJBTXx0PXo1LDgpeWRXT29iRSxUVENxSTwufTVbL2JmLEJXNlBlQzQ+RUxzSms8NnY0I0pxTGk0N1l5VltHTTE+QDhXP1ZiM0xdIy5UI2B9''@;'; put 'put ''MGptXjgsS2Y7fjppNDQ0WDssWiZ5RS9iK1UuUFUuRURBdCVBVD0xYmNySyhXazpAJG4oXkRpXiwiPzlhISQpXWp1fHpAaXlCb1ohOV9WLkxEc2l3K0o0MGojS3t3TVBXRy5VbSFiPndxdUlYR0lePDkpUllwfXdIIixfPmg9NWQkVFs/Sm12WWs1cjckclJ4Z11WNzR+ZnB0WGYjRjFCSFArak8i''@;'; put 'put ''WzN+XkRhcj1fXSoxS1pFKGM3SGU2dXx4KDNnfVNmZUJtRipTZFNjPXpXenl1Z3QvR3l3MG1MQ3NscVNdbzBidGd+MXtUQTkxWDZKcGxPP11UaG9oZCtCaFhadmd6Oldde30kc1c2WHJtQVBJJm86YTd4NCJbejBqI0lUR2F5d3w4SUFyOVozZDRqLkM7Lmoxa09NSiZCRCVufUpPZDhTcGhSRGh0''@;'; put 'put ''LmYyTUV8dm10c143OClTYHBSWEpSdnxkOStDSVUrWHZmbWArK246Mk09MG9MOkk4Izo1djJjflcpUns+dDpKKTM/a1djeUxpOz1tYzErX2piYCRMTzM7Mk8+ME96K3g3V05naXJ7WWB9dG9JVExaanl9aShnQiJNYTdheFZOWlFrPDREYVJvRCo1TyV9LjhSUU1qL08yQlJfLzJ2fnEuSCZTe3xC''@;'; put 'put ''WVkpM2VUWH16MlE4dFRVd0p0WSk9Zl0kQHNxO2FSWHpNPWpgejZWPiplM0t9aWZFflpsQkMjcXF+eyYrcmxzNG8iSWx8QiM5W21CRWIjR0swZHY1bjVeLEghdVIqUyMsUWgwVWRIPTdxZWxmQyg1VGhGVD1IZzxmYFEifiUyWX5CejdHa0xUdVp8TXN6Ny5lQnM2WylNJUIuP2lrXW1HQGEqfTtP''@;'; put 'put ''fDBASmVuUXswYCJUPFAvSXouc2dWd2pjTiJQVnJlTXhKIlg7XW47TFhOT2BjYXQlOj4lX1Nhc2FSI2VNRnpoOTFqVX0jSUB+Tn1UMDZuanpxZXk/KXlscHlAZVYsYV45Q3lFTEFfVHdiPDpmNzBLWWZPJElyaGVGYVZIQDsqQzNPMi84c3NpMHQ7dz4xRk9iP1Z6Uyo5YSZeb3ZgY3FEY0IxanVN''@;'; put 'put ''OXJdfTJDb3phS1dXNmVDUkNbMX04dyNCMHc4eX5YUzN8cXdxV15NZld0YyEpVyhXISwjTy5TQmNPJCVSUj9+S2JxRHlWOHl5QmNSVGAzSWtHLkRUWjB3LnowNzVgemYkS0A2aG9+PmJFZ2d9bm5VM21jSiUxLn5VPC4kQHtrRyl+Wm45fl5Kd3t3YSQ/NnUvYCNkRnVAQXNNc1EvZy9dd2lvJS88''@;'; put 'put ''Ii88PiR8ITpbZyp3QygxNSZMZ0U6KiQoeyJOeGduS2wpcWIhejYuTCRMTH1nc21fQiJYN1sqTz49ViJ9QDBIdFZKMWpYWkhQSzRmVkd0eWcxS0dgN2dITHhgfHY5XVpHSCRqKkZaMiEydGQlQml9eEcxbyNwKkh+RTV+W1sxTkw9dmtMeSpESnFsOVpVVG9NYkNUL18rWz8yYig1QExdfHpHM3xj''@;'; put 'put ''dndvYmA3RFlTU1lMa3xCWkdLQjYxbHsiR3p7TShxU0U9MGZ0bToxWlYqTDEzRCpOeT44KkVKKnhNMUkvXzFSNFJtLkJjRFl0TDE4LlIidyZedChQcllWJCx8d1BNPkNJMFpvKGVaTlZIaTA2Um89OnxaPEZvWD03TTd+PE50bl17OFdNa1hTKyE2JkZbRWlSO1pFT3JXLGBGfiJdIUhDIkJDcUt5''@;'; put 'put ''KiswVWEqSzBzJCN1MSNuOF4lW0hqLkVqZUZ2ZXAwUUldQkRGLD55Sz1LTUo8bTtqfTtpTGMhdSNEVE1ZXTRxTkI8ZG4vcltyKGhpMEdgUn4lN0BURilFLnAqTjFCJWZqLnVve2BpKl1PaU47SlpiZi8zJERxS0shSCwyQnl4VTJId009PHdOeW54YzshIXFod0gsfS8jYHchdH1BMHEjNmkpQ3Z8''@;'; put 'put ''ajBUOGJdJEUlKjpuNVVnd1klNnRDRENkJWYobzVGeUM+Pys7O0dJOj9fOCpjR00pVT59dkAjJCtSVD5dPnosdDteL182S3FZWz13NWc3P2BST2V8ZWNudX5NakshdURuX181djhCVmRfVGFRQ3FoYD8yOGg3YU9VXipBRis/YWd8UWVoJUZ9bXdtfCh8c1Mqa1NGIVZHWEVTJUcuX2k2c199VjRF''@;'; put 'put ''RXRxbSNsUER3Okk2VkdwYmBoZ1chSjAqaX1qSTRsO0VVLkZWbzpke2hDJF9PLDo5Q3IjaT1aa0Y4MXdKNW1dYUtDe3AvemU0MD1dT31GQXQ9MCpvRVMiRnw4QlpefnVSfn5iWG50UHdbP0w/VWM1MDtRaWtJQ0xFWSJQRlhNLiRIPmQqKSopV1clKERGYkV4eit6W1NCejksZGlsW2NvO0QwYkZA''@;'; put 'put ''Kl15ZkB4T3d8LiZRSjsqaXduJSsqWyNrITRDPCQlJXdYY21ZN34kIS8xL29lUGdCbU1OVURUdEYyVlhfYlZdJCxMPl1WQTpdZkIjKU10NUJJREY6MiZrNix6SCZieGJaWG8uL3xQMS5YQWpAYmh6MyU+TGMsTFYmZCklMmYkUnFVNEtBUE0wK0Y4PkZWMWJgdGxmNCwqK0MscGh8SHl1PWhlcl5o''@;'; put 'put ''dFhqI15MSD1SWH1GQyp3RGVPdFlndENjZlgySG5NRFFKKz1kPkh1XkUkZ0l6WExNWkJMUyhsIiIsMXN1aUNXVFQ8IV0yOEpkPVEjVSwxXTZCZUxkYUB4ek1zSV0oJnVISXYldSJ7TX01U3kxe1FmWUx2SFJ1KixtNk9PPVI8b3k9RCZiP09BbWMvWll0LEhpUiU+RXFZWkA2TD9nYV5keDs3PUhe''@;'; put 'put ''OnU8cSFRV05wQWFLdT5qPztlXihGai9KJHBTYiZCZmI6RnJ5ckFjfmc9fiJCYW1YaTR5d3Q0V1MoN0NEeWcjeileV0dXcXcjZlZLRHtIRmtXfWtxMk4mT19UWURbLHxwQ1FdVU19NU18MiJaemQuKV9MQ25VRyU3Z3hmZXwvenBgdFFbUj80O0IvOSs0VWpRR0J1UlIyUHB1QnYlbSJKYDN7dzd5''@;'; put 'put ''L0VjYz9VckZMaUdeLDJzZ3xQYHJOYGU8PFJ2YEErMkxCZHUoPkMkWUY7Vmk+L3dIZT5AK0cjR2RvUCoyJC9wZ2RkTVBodi5lNzY7dXpPW3JAVyJQN2x2Pm5BKDFoQkZMRjhfW11MSlpxc01zOShRKSRmLClNTXBgWGRjflhKWFV+Zz9TfmJIUV9gVW4hQFlse35WfSlNYyZgKnEwMU5gbyozWDZ8''@;'; put 'put ''b2RKWmV0cz9VdDYmVy9JcFlPT018bF1pNjskIyI8IXE/Rkl5eT1gb1ovRHk4VDVpbFpvY2UzJW07KV1iP1ZSMTFpflZBc2g9L0tFfmBbXU1RXzJPdkM2OnI3LDRSJk1EcHJuelcyaz1OQTNvVFtZanBIQE53R2Y1dUNnUWE3Y0E3M2k+Mm88YVV+KDhtVnptc2docTlQd3JLeytOQyg3e0tzPDln''@;'; put 'put ''e3cvOkhvV2QzPkV4e1dAQV91MH1sV1M4S0l8e1IxUSpzcVNgay8rJSFxQjN5JFRIfFszKzM9d0EmXXwyb1p0OHZdJEU5TWMpMWIlJGAwaV5UVzQ3YXZtZlNRZFIlM2RZZXUoJF5LWTNjXmdrO1U2Ylg5QUF5KDlBQWVCOEFlQjhBZUI4QWVCODVqQjswbmRSXy9xKkE4WmY6Ol5NfX5CIkIiQiJC''@;'; put 'put ''IkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIiloRmBVQEdFN29wJiVMW013QXtRSV1TQ0RSM2NCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFl''@;'; put 'put ''QjhBZW1kQjhAZUI4QjtbOSJRSzZIQjt0I1dmTSNEclBNODohQURhIkRQdVNMIStNW0klMzlraFIhUnkxd2xGI0R6fG4oI2UzcFMmTHVTaUF6UzdsYHZgRF9pMDZ8aDRVRTtSe2dHRWExYSI3ZVMwI3s3c0hqTTBxa0owVCtFKFpoaiJ0Kzh5biQ0PilIcjFMOkZgRDNDYEQwMV4ySnhRPitUfFRK''@;'; put 'put ''Tl5RQUFxbzIufkAuOGV1bjBkan4qKj1lVWNbUDNMND9UY1tQMzdvKWlhMyJjVVV6IVVVfnMjPW09TE8rZypgcEh0WyZSfS5JcF4zc0JvVmJFYkUiUWJFW2gqYHkhViVoWlZbeUswMWdCNlBGRkxWTFJHRFpmTDNXcVdpN0paZkwze1F7RHFyey4vY1Ylc2dXUXlELE43bGF3P0Q/NUlyRmlDczZt''@;'; put 'put ''dEQ3eTg5L2p6aWBBJWN4dHlBcyNCdzh4a1UzYn50KzhbXXR5Lyx3QzBFNjpfTSpXSlBhOWM6bmEyRVd3Ukpyek9UeHhGNVFUVGV7SDhjRjVfLHVIOklAV0UjXjZ2Ik5NODYxdkgiYWw8QW1fI0cwXzBrP1ooR18rNmVUK2o2M2lQMktlKks+KjhTelpuVXZ0a3o3WG5IP0lHd1dFL1tyMltuKVNG''@;'; put 'put ''ZkdhQ0cvMXBmLmRZZmE+TzFoeTpAO1liOll3dU91K2xIQEg/eSVaTCFMdj4pQmhKcEQ1T0pxdSEpRX0lbGZEKmFTRzZkKUhlaXRQNXROTzBuPkojbnVKTno6Q15bWyprIzFKMURUL29IYyoxdkN6Vk9WNzFjXkFFTilOeHdrPGU6a0g5YzhTMUQ5ZVlkPSolTGhNa3QyUltkK1d3WkNNI1pnemdj''@;'; put 'put ''JWx3LlFqQVNCemVHLF5QRCV0eERFNiZmVC5fY1t0SyFkLjorLlM5Zj83dixVdGJ2RT1WbU9KOjU0YVs6MF1sWWA6V1dUdXN0QnslISlLWSk9ckdFWTxbRko/IXFbeGxqJDlqYHc2e2ReO3Y3Tl4wY3R2bmd2JTo9LkxuSCR2K1YkVzRwb3hBV35VUEttQGo3Zyg7Izo/NyFGby8lOVJ1KVhHQCwh''@;'; put 'put ''I199dzlOWl1BVyRDL3RyQ31zMSIlKX4+OGZhZjNSZjZ2K2ZLS25AKEJmdzgrTjF6YnhFdV1maCtNd2NBVmB0NVZIW1RAQyZaOUQpbG5oSTxvPUcrLj9lTyM/WW5FVU8jQypbVlUxPlU1PkJ6SSF0fjtlQjx0TCNGWkYpSDFFUG9jWmhDaSQ5YW9mRUprNi9NMl5VJEd8W0lkfDU5ZyoqeTAyXUQp''@;'; put 'put ''Yys+I25uUi4qcl1hb2FCTjxvK3YlPXdxcSM0cFtwV3Qqcj9ValF9KENCb19gfE40KSZfTT9aS2Mxemp9KTBzVj0mbCY0XmVHIVk4JGxCeS58VGJ1QS5dKy9VOEtNNUAkX0FvdzBVM1pIeDxnOCNDezc9aTloMVVvUTdAaXBJSiw2bHNKdml3diVqRjZBaVIhSExjcUVhOnV+fSYyWW99cWYxUkZl''@;'; put 'put ''WkY1cDkyMFZEXW4iS3s6Xl9EM2l5IztzSFVbbCYhYDkzInpwY2s4JFFVKXMoWixHd0JgYjdsKG1jK2ZhMzFKcFYmazplXmdhNkkxcnlgJmhzOlIoaC9ebG52TjlfPnYpfjglOVZPQGBgIUM7IXl7a0RaVHg7alsrcEsyR28yOChudV85QV5eTk5AfDYmbG9Nd2RHYkRsOltWRkxYUUhZUUh6S1ht''@;'; put 'put ''IShpV0lheFVSclIzTmJ8NEV5eVNQUGcxMCxeY2YyfGI6VjhgKV5IeWtKQlNQVEBEVyMla31rOE44aXRoY3Z2ODMpTGlmfEZmKWMqMG0pL1RMLFZWIio1a3NMd256SVhJXjV3blVJXWcielJDSlc2dzpNVk49elQ9cEdeJVdRaSU6TjUqeih3bzp7fT55XyU/TWNsaW83VzhsbD03NEEsen58U09R''@;'; put 'put ''RkV+dFpEd1B5Qmw1THwpKkoyRiNeQz1Ic3Y3al9ITEIhT0Brbnp2OWR+R2V0UmA9Rz5bQVlwfTBQQGVzUjhmOSJEM0hiRkFoYW1malZtdjNlQ013RGg5IlNFdCNKPlpTSllrbGV0aThXWVhFS2d3KypQO2RjKkIpWG0+QyI+WWtmT0JKX0FqUF5ZTEFEdUhBKSVuS1U7SG9BWS8zZztWcSJsQitU''@;'; put 'put ''aTpVSSEyUEpKdChsQ1JUfStERm0idD4jVkhpRVBQZmc2cEhIRiRbeXA1NCl5OTprSFhPNCxPYmpKQmp4ZUNnNy9oUU5WMHF0Vzd3a1s4Q11bMmVER0IxZC4vU15vd29MWiI5dl1oN3k3UjhnS1pOPWVTOEosZUQ1alh6KE8mPTxOTSJ7bzsuJStPYnJeKXZXSlg/PT51REo/YWQ3TzJ2NndmZ1o0''@;'; put 'put ''dD09T3VaQ2Q/P1R1Xi98RUt2SGddd2k+M2JJWG9OPjVtYjEhQmJ2X21ERCt2eDNZMmxXWGRISikvK2YxWUtoP25LIi9lfUBUQTZDMXEyJn5OKTFQam5sQzpTZGRZYE1Wd0hydm1tO0tVI3hUc3hUJiJAPlk4LmlEXmJYO0x3cW5DTlk0bjZkU2RTejouLkghZFJjUFg1Y1pjQ0NTO21TNmFyXVpy''@;'; put 'put ''VDswIX52cjR3L3Z4LHAvaGhBRHRjK0wuaipJS1BkI2NDbTBERkRAV01qWVpJbSs1Y11bY0ApbzZfandvX1k3K0VIZmo2UX56LFMwYnZKSzY5YTYrMjFTNmI1U3MqREZlejpLI2NPYkMpK1B4dGhfaVpIPWZUSD11eGg5Jmo1bkR6Tmo8PGMleUViTj9qSHQyWyRTYWBFPlc+Oi5vMURXLixVWC5z''@;'; put 'put ''MHo9JFh4ZF1+ZWFQSDQ6PTt4dVJEKTglMXA3YVp4MTN2TkFXcmFWL1s6KjZHM11NMktWKVVgPzdRPWI+S1IqaHp6YFlEPS9GIzo7RlldemdvQlZYe3RqeEVWeH5fJkp6MnMwOVhZbzJWLm1IRGg/YF1JYXxVfEYhYk5kOmJqSCgzImNgbEphWlYxOyk6SnNIZ1cwfjI/O0dZVDxIOHhDViRkJkRH''@;'; put 'put ''Qis+O0gqaTxBIWcyeGxVXVshJFs8X01MOipjODclX2UyYjt2bEUuY3tdOSE3XW12KG4hKTpGY11dd2VoPC8kZ1BEKmN0Y2ouNy5BcVtgIVhgUF93NE1JTjc5azN0TDlrJTlga2VFaVphXTBlNHhMPz08IjwmVVA1MllKR2BvT31uI3lCRCNlaF8vPCh+Kks8N105Y0RYVl1XX3hNSEc1U3VFQklE''@;'; put 'put ''Vz9IQlgjRDkmSmYhKj92P1BSZkV4LFRmWj5yaEtSM3dWQUxBXmd2c0NDak5CTHx2eGw1Pi4mWnZoI0tLcEhoJntMazM/JWt8Sl8xT3x7bzV8KT8pJTJCZzQ9KWB5VG52amB0NV9gO2BvI0Yla1J3Vm5gYTdIbXcjaHQhIXl3Y2FTTnhbNmJ2O3l+PSklUz1bP1hiN1szVEIhKiJqMXNwNHgkOEJ7''@;'; put 'put ''P0hxPk52akMza3o/cVQvLCtfQERifk18OlN5RXgycXBJQkEobTNPflJFOUx+dnkoPTlYPCF4bW56ZE59QGF8PDZXL199I0xiLEQlfHY9QDswVjRuSWIkcjpaPCgiRSR6Qmxifml3KTp0RWtofS9ZLCheQUxYKF4/L0hbX1IqQTFRTTAvJFZIfjFTZTBMSF5UPzsoZH1LfHRlUlcoY2QuMDNaaX41''@;'; put 'put ''elVPWlpTNlovMW0valpFKGR7XXppVEJtMDNhSCgmKVBvfCZ0ezJxOkJycWh0PnIoNl5KQnhISFdyOGlxXWxZWFhBKGpkZis/VEUpOjN7S34pIUUqY05xWGBrLjUrTHx+ej9UUnlDdERAdlVsaXZjOTchOSlaWi50Unh4W3wmLl5RSklIVXQyXUFBaXVwdHg+cmhrJHA/LDh3V2JeaU4wTkMyKzI+''@;'; put 'put ''PnxWS3t3fiE1NkE4SVkxYzFoMyo0UllvQFcue2UwNVtdS0BASUxtLjBOeUI0YTZyUGEiaU9pOSNxSVY7VktORkI9bGh4R2cqcF9jczZAKVYlMldPZVh4OXhPdW5Del1pNT9fVjtubWhXQT87LDpLVTM6Y3JIfkNjd3MkdTF3P2clWVB2b1FCRH5ddWJYT3dFOiZRNldHNkwxNDtVOH4zdX0jcTYk''@;'; put 'put ''Jlk2X00jWmFRPGBjTEE8Ind2SH4jVndEInUxSHtZblZSQitxUj8mWTZKdzIiKSRXKX10eHYpKHRDQT1TJGc8Z0diWHsmZCN4SWtUM3J2YWNAVGRIWmt7T1gsfU5DZTU/O3hTdjIvNWZ6Vzo5dXF3Q1JKbD07Xk0lTXE8ZXBbJmZ4LFl4KkRyI2FqWG1BVnthKyx3b1B8UlIjOjttangxcnZ2b3dA''@;'; put 'put ''IVh2KExSRHYpeE1IV2lUaFhOdF0yS3gsOWZZRWFudHxFeiJoWkVSckZ9aWsmeHhfbWhLWDw8JjckUGJLXmNPWGxKYSkkUUMlQ3QzIVQ0Xzokb1Q4bkpaTUEoanU9SnkmZEo+bEtvREFPSmhHQyh5dT1KeSZDSz5kQnlwMmdTTWJTfU15TktBdTNFeCQ1MzJmZ3Z8dmh8dkZsbnlTTFFgN24rTkE0''@;'; put 'put ''azFgQHJJRCRUSHJsVThZIVl0VSJ3OWNySjxGVkJEe3QyVjBIW2Z+NVhxNEd6UzJKPUUrL1M7STFFPVRaND1Xa1tyRUFHcm4qOmdFUlpZaU1TPT4+RlB6RzU2V3haQ0pMK2VRVmJBSmlXZipuW2NeLiRpTTdnfDs2K1BEUXNqY2RsJEBbJEVTX2FwdWptfE8+dTl4KS8pNF1kcCF2VW1hej8mK3lM''@;'; put 'put ''K2EqWCYoOnh2eEY6eGM7QlJ0Wn5rTkd+PGJ0SkZTLFpzbiQyZC9JN0UhITUra2heITp4QnxIUXB3aEcwQVJVPXtAMXFFU1ErXkpSTmUhLzsqZSZ6PkpDQSVTOGw5WkZ7OHVUPlk8U0RpWG5mMjp0PTwiOGlFJDk8c1JTPGtxbExFUzclbStyP1RGPnUidS57SS5PbVIuWFRHYSNUWnpLPkxEXUdP''@;'; put 'put ''a2hKZTJjUCZXP1RQYTlXOTBrS29YfE55NzJaclZqSGNzakA6aDVGeThKZl80aU1XalspO30hKXBXdnRJcj1HQFM4bHljTHZZbWIxZFcmV3xAUUVAOnhCPlBkeHM4UEpiVW5mV2pSQEVTRHhtWWpqKVEiJmk9UGldKChuQ0pNTilmPW5lTGZeIT9EX0MiRiRJa0A4RG0ucE5CJUxCKmRJWWBVTUNK''@;'; put 'put ''QmlUQzR2flEvb21QVTM3Ry8pdnhVYUxJaUJCQW9DdUVsbV95ZzxnMjljUUE+Q0kpSk9CJl4wNUpubisqXkQodXlAWnFySXs0Szl5eUc7RW5pYik2RD94OXZ8RmR9JEF3eF06UzJKMHcmaVJobmJSQUY4N3p6XTJPMXddeSRBNXFrWHF+OnV+Rl9hJG5FYypEXVE1YE9jO3MmbihzOTdncX1iQTww''@;'; put 'put ''cUNDaEx2bj5MazosSy8paVNhbnFjMkUzbz1GMVolNSZGMnY5a1VPRnwuUVFzKHsmJUN4YTshfj9HbW4lbmQ0PjJfTjV1WSozVSpWVkomOHhJb0N+LHRAeCQqRk5GKC4kVyp2WnA5PGFCPFcsWD5eYktRS1NdTXZ1YzheQVQ2N19ZMSRsPy9xQUJTMmZEQzovLnJFUyV7MWw/a0RGRkNsYkxPU3oq''@;'; put 'put ''WklmWn1kLylOMFNtbFZteEFWQStJVz5HN0YvKSp6OmI4azI6dUtOIyNjMHoxamJLPkldKytKN0l4OV5HNzdJIjMpUHBpaVdlfVFoT2FJfDk6YXRlfjljS0Q1QVIoJF8qSE01RlhlaHR3VTF2SXZbdHJuYkVxXTh6RSFCTj40T0ZMRTFHUUVidDZhdTFyUnVKJjwvKVk1VkouUytXYUN5MSo0bTU2''@;'; put 'put ''TFBGfHdefXlGbkR4RFlRNW9qInhxJV89fTNHLkUqTUV4aXldfVU4NTtraVZpKUV+Pm1nPEBneF54QilzdWtpPl99aFYveiJQWT9CJFpaQS9lJV8qZH44Z0UwQHVGU2lFOWE7Y3ZsPyQ0WUVQUyRtQmQ5K3IjcXliTzF2Q044aTAvRUVXTX5gXiNaTmY5MklERmt9O25ocVQrXldmTXpkMjRncUdl''@;'; put 'put ''cExzST00UGpHVXhBcFZxZCN9ZXlsWHU/fio5SzYoP0NlIVdXMXZYWXRVI0R4bj1AMV8oTT9sL3UvKUFkdll5aTY7ViZ4MXtZUDA4YiVfUDx5NllPQVcmfD92KmxeYHZHLyk1aU9PcEUrQGRnKUlRdkpmVDkxSypkKzEvYDtlKDVhNlImbk5oXTZDJkJsclpBOWF2dil9UUMkUE5GeUQjW15Dbzwv''@;'; put 'put ''N25CfXV1VEFpIVVpT2ssRUh0bDhhPG9AQzFPJGlmXVM2U3VNWzhFUW4rYi4uWElLd2RwcGRyNSJpZSFJaGBbdzJbaEV3eTdsNjFYPWlgVys+I3l8fG43Zl5BNks8QSEzKGpHNkFMR35QRnYsR1ZlY3hvSGt1RVRZRVpoSiNjbFkvQXkxdipAUHVraWplQEFUa3p2R2lOQS8pWU11Vno/Z3lxXSZa''@;'; put 'put ''V21iKz5NMnZHdl5RIWFYIkJOKDluSHkhMXVORiEsTipXeC9Jd1FzWlNCflsyKnw6ZE14WGtTUnckX2N5PDxBLm11QzkySU8iRTZfPkkpPUtlUy50QVlUVk5Ga3hnXiNCaGVafkpHTHMoNWxaVCFpdjVyMDRCdHcrczEyNTdPdjlofDVXaHUzZXt0VEZ9b1Z2ciVLIUpmZTlXPDVxXUNHTXVYakZV''@;'; put 'put ''MGdwMm15QFkvWmxVL2dbW0Y+VzJSY3BBbzN4IUMrRGl5X0UxUk1VP2lTUjtXY2JaKCJXOXt6WnZhRFFSYyFyOzBiWihlSipvSl5mW1RiY2NDLylYIzVCfi8hMGlQOEBoSzJAUEkvKUUwLnFlfDsoSE1ybDNFUzdiWlNSXWReQzdxJERzS0I6WGV4SDpvLylNMCNTcG4xdyNIQ3UpVFgzMFcwVSlZ''@;'; put 'put ''UkBkWUB0UD5+JHMqMUhMQyg3T3ZYWGJOLENUaDpWV2RIMDwwJjpqYTFIKnhbd3VxWEAiTEdGUDdhOWh8Tzx1bTczbnpnVjp1fEl9KWBAa2lhWDhuI0JvL15FNkljQHI2VzclSSVdW0YsYEkwaFM9VkVRbnZRLjNqXVB6RW9CcV1Bd3F3JDRYdFIuZjdDKS4hUDYvYGZCdT9yVTdgbDJDZCxjVndm''@;'; put 'put ''aiE8QWYmayEjdWkqWUI8bEtefHhXPStPaXhJWX0jNnZ4ZC8uMGp0a0VQMnMxfHZPQWpgVS4zRFVqPDBwdko+Qkd0JlVTakg5U3pRNXg9WHFSVWNHb0R2VXc0WSlkfF90VU9pRFA9NGJHeURXd1VGJmNvUm1TIjhUZ3c0RE1leUBvN2UsNUBpbUZjIz9XLyJzeWx6LGF3PGZsKW1TQyZuOEYjdC5D''@;'; put 'put ''JmNLZWYybjdmT2JsY29VNHJfNHlab0JGMXVdWisqantwZH1pfEJMTjJ1NGpFPUtnKllqY3k+a0lLQGN6cGksJVVxKERDSlVbY3kwMDNVPSVqQj48bmJjZyNjZ1NaRS90WHpec2UvTEh9KTchdng6d3o6SWFALmAmMFd9WW5YV0tFUzpZYyZrSG5PSE9vYHNjdCZ3dzE3JjFGYV52Z2ZeYCNGdk4/''@;'; put 'put ''LD9kO3R2eHBpV3dFV0YrKlN6UmcrLFR5d3Z4aUdWeTBnNnU/WW0pVjkqaitBQ0o4Qj5nJE9jSmpQZ1omfGxffmoqWXF0VjloJVpPXzB4RT8hKml7VUNKK2pZUXIscTFqSCZRQlJleV9vVS4uUVZpMk5eRURITjAoRCVbJksybDUza2YzI0NOZXRPY29HeFlnYH45ajV9NXxXRzFARXlteVM/L3xx''@;'; put 'put ''fGsqWUoySzskZzVMXyUuKW1Ee015MkVTS2NxYD8oeG4rQkxWOl9gJCRSZTJCd2BoLjs4XllJbFJPdV1xI15ubFpYeHpePX1iT19uI2IiJX0lRiE6VyY1Ulg/bDlDWF5NZ1p4dCtyQTlpN3N2ImFkRFZZc0p9fDtuJVk0ODojMkl+RGNtPDw+OkBSTzd1d002MjdlW0ZTZlVodmNdXS9kdjo8WlJm''@;'; put 'put ''bCpKaU9dImZiazNBO2B0SU9la1NJfWUsRWhwOjEiMVNpd0dpMzQpSChvOmR2Ojxbfldpe3coQVRjK0xyVXJhUEsocHRsSjZLZ0BIJTouYyZ0ZVVeJEk4fGY8TjRlajptOSU3MGcrXTt0cTAyUGs3L25YOD8zYEpdPFIlX3pFMUxKeU0hQDJVKE5IVkBUJi5TcFJue21BOTsqXUViUVtmeDwyJSE9''@;'; put 'put ''TTtqfC46UWxyJGwkSmZFXTZAK1UpNilkbCNxOz1mbGcyPXk3S3JjMG9tVmc8NkB6XiVwMDdKKU9yZXc+eTA4bSpmbF1IcSxucF41P3g7OF5KPGliSDZ5VTJUcyR9JXZsPzpHOGk+XWl5P1ZhZz8paWMzOyp6QnM7Vj9FcVowb1NTPClqcSpjYVE5P1tpNzZhZ3BOZ2MveWEmbFNOQlE+VHg8RiMq''@;'; put 'put ''OTguTjhndjQlPj0sZD82O1l+XVQhIm13XnxiOj1QRnY9a2lAYkw2djB7UCw6R11oJWNeZnI0NkRkND99JXZsWTMwXlJmYC5pVXg3UVtfZmczW2ZQJU9yJWBIOSRKQjBqPygjTixDcGRISTF9OjBdUFY6ZjhAMGVIUU1eI3JATzNnbHwrOjc5N2J1aEk7fjdyWzAsQFBOLnlwZ3NsdyJmWjBKZlJ+''@;'; put 'put ''MzMme29FMCVbTk9jZHp6dCNQXVRxczxiZzxeNSpNQ1RUMyJhKTJ6LyVLOzFvajl1dHM1dihpZjhqamk8c3o0UTRsM3RkUjt9XmEiVk5EQDtKZE4qckZ7SnU9N2hAfSpaeTFYSWg6bXZQP1BPJigjez5eUmpMKmB6Y1g+UlpbVHJ5Z3A3enZ2ZlpqcmoiVHRqNU8zV3U0XihXSnwvY0ApY0dvVkw2''@;'; put 'put ''ZU8+SVViajhPUU54Tz9RSzBLWVY3enkqQ2lGbnovY0gzK1hYXmt6eD9Qd2tOV1phIUNLV25DLmdaUmNtUVozW3hAOGdzdXlaVjcscSp+MUxMXUs7d3s1Tm1dYEB+JSsmITpIcjBXeUdhNEN7K2lVX09MS2QwRkZGYXR2S2IoK2VMRTF9Nm1dWHV9YHc1ImE7R2hUbHc0Ok0weUs6M1ErX0RLamRb''@;'; put 'put ''IUNPIzpfYkgrZ2o2eUtgXTZqfSZsTlowbzB0NX1+SWA3c2pfJH5MQFtxfn4rfTE+fl1gfnZ8QktNL19+en08SmluJH5gaXMxNU9oY1MkbnpKWSZ8dHtXNGp+TF9JYEEiO35BfHNwPXsiI3RXJH5Rfk9eKWhYNDt+Jnhyb3I1NXU3STlBNyp2WkJIZT1MMzhaTTVJdDhSWFUwSGFFbnlGKSVLJixZ''@;'; put 'put ''K0NrSX5VJVZ+bz13ZEF0fH5FeEIrXVI7VXUwKn56akArbmlUaDoyaXlAdy8/Xn4wNlZVUkc+UHUwQlswWXQ0UGJkfE0/PkoyIjd5aUxgQGtZZng9RHAqLjgyVyJ9e2FVVUZHZTU/QWcrMC51Qj1bYD5kTEQyR0oxVX18Wkx3QTtDV09QMWtfcE83d0dKVUh0JiZURkJrWnFDPz5ESHpMPko1cFZC''@;'; put 'put ''aDRfRUh0cEFLZCI5KkJ3NGlOU2EzW11DOE0oVHh0R0cldC53MC5XQDAveShnTiFNTTN8Q0s1K3JvS2p+NCpKJmB+cHxdSHUoI34kP3dkcVcmfUE9WDRfc218OUdZPXUzSUl3ajd9VFV2cCoxMkgpTjksPmRCcU1xdkQicFkyfUxXeiloRFF4ezx7JHAlMUhFcVJkblpVOStIWk4kYDxlZWhsZFQx''@;'; put 'put ''SGcyPX58JnR5Om1lQ3Z+LFMsYVE8bE9XeCZzOXJ2T1paI2JoeDM4UWB4L3k9bWRbVjZWODM9fiVVX0ZObjVESSVKJEVKV3p8c2c+QHR1PE8zIlU1UTtTL3I7PDx6c3Y7cWx4fHwxa2BgVEdVVSp5VllPRCVyVXlQakV+c2hgUXtELGhAcz0sLFAjciJWQU1VY0ReSTdDRHspcFh5clRfbzw/XW97''@;'; put 'put ''e1lTXzd5MlgzR0s/WGZnOkVLezdiZWI0QX00XSwmXSMwLno6PFt5PUYmVCRgLGF0Q09YWlNLV2V2cF9pUVpgO1F0OF4sJlVscTExInlJY3plVGl6cnl6fXx1bnwmSjs+NFIoY3FXLD5fdlMrbC4vZ21xYXw+P2V6cnJpPjw6endRYDtIc1dRbUQlW1N0dyN+SSVBdHd7QSJTc2lyYFNAOkBiR3Jn''@;'; put 'put ''PkVgOjFRfiljZDEzJEpxIUwmO2Y+UEUoQnNYTHt9O3ZnaD5DVVJfelJQMDE8WkNzVkEyd3FTbkBWS3wwZWR0YX4jYjQ1ISYlJkc3RD55VklxUC4sLnJvRkw0WSZwIUkrWyhpbWxCek5MR2xSP0hPR011TnAjK3FdQ2x3N3YjO2FZTHdQLmhaeEJacXE6YnY1TE5UMEt+I3VaRHcidSk8KXAwS3Np''@;'; put 'put ''K2x1fndgL0ZidGJsSHdGOSZCfjJxOj0qN2xqTWMjMFIpQHx9cVc4Kl18an4mVkwvNmBGYWVXfmxuKDk9aDY+fVVvPVFWWylCdl9+V3t9NShXKH1IKWg5fUV4d35DIytvfl8qZX59fWZnXyleQDlCfUQkcld7QFpTPHwlQVtzKVR4a1BHZmdZfXcqKX1CKSZzOTpkXzVyRWhDK1hJamBGQyFzWXQ1''@;'; put 'put ''PmZdT3FgVUVoPC5YSSlgNCopfU5HJX5neHt+ST4/UWhbVXg/fGU1Y3NmN3pGKGddKVoxVVJofDdZX31PR1ZMNjswUmh8RTlsfl5aZ24zPGVUWn5xNWgoamUhJGAuWWxsV2ZpKzd2fiFpeUYoTXI4UGA+REsvfnNRWC85LmhqQiYpQE5zX3hheHNYJTU+Xjc8Mk48WlMmX3pFKn1aOiR+aVZgcyNs''@;'; put 'put ''NzVVdl5rQUBWMl98L1l3fkhYS2NqQGlURX41NnBzPzRvVypHYytUP09UY342SmYoQmtnPX17SFFufmE2LlEjc0A5LH04SDRod3RSfH50WFllQEwwdHxGQ2x+enRoVzghT2ojLF9CJWAyXmR+WTYoPjkzSkNWP0Zlbn5aV3hbNSg0Vkp+XTRWVyY2eTM+XUkxUn4oRzhzdD1GLzBHNzxqWzkyNn07''@;'; put 'put ''R2coblNdKVUsTDhffnhNK29Ue1BfWlc/JFVMOypsdThgMm51fm5SZVc5cndrN3dkbSpgMl5lfkUyIT4kJiZuaWBePCh+e04rb1Z7T25hV0kqVUxrYS9Da1tTP0F+aTU4c3hCRy9PSTc8fls4Snl+OTchPkYoJm5tYENQKX5nUCtvST9jaFY0ejg6dmU6U1hbfEY8bighSzJ5Lkw3PEB7eV52fk1l''@;'; put 'put ''Z25ReDltMn1zdm4oPlVAOV9fZVBRKHIvLGB0eF1YXn5MQ0djcWEmLHFdakUzfE5rSy90Ymc9ZXtlYnAoZ1hdKUAsNV17fTgleVtxKTRWaXw9KWNXXywvQ298Mm53fjU3UkwqYVojOipmJGluKWA4SjV+VUd5RlJTcjgvYHNKUDRQRXR7eD9nRmF+KUE8cyR3Qkg7fkx1aldlNHdraD5mJCV+Z2kh''@;'; put 'put ''PmIlOW1TYCZecn5tTXMoOyo9bTFzIlouYDp5WFlIP0ppRH5aTWsobV0wUjZASGc4fkdRIyQ1KWYkL35AU3lGUFk+an5+SVgrbzI/L0tsVzlXRmNFZ3w0KHw1YT9zJjFuKFZrLlZpXXl2WH5eOWZuTD9SS1hbejw4fWZlUnE2NjxKb3tsdT9+aFNRNEtVSVZeXjZ2MnxveEhMU29bWDIvVEV1fkci''@;'; put 'put ''ZlcwIztjfl9uUT5+MElOalIuI0F0fHVwbFdsTUMscD8kPTloS1ZJYyp8ZG1vV15TTS9dPll0Y3wmKlVMT31AZEB9S2R9czlyNzU+KilCI2B0Tyt+fWpYSzd+RXg6TjAuQmowL2FQMmlaclpQfFhsKkIiOFk0RWhaVGI4WUNPSFtQVypFRFNiUz5UalZVNFZCaDFDIU1BY3hlMk8oKWdhUGNTfVA4''@;'; put 'put ''YUNvM2lXOXRVPW0+XWwqaVFiJFBPZU5iPiI4KGxsXWhwRih9Zih1PFolYWA/bipjYVc9OmVmIUhAWWFveDFQU2ZWc2sjLC9tLDk3Lkh1Zz42azhUOSpmMlBWJCghayxiZXBmNWpdeGpOIyw8Nk1kZTMkUWkqNnAubW86MDxCRW0xT1N3PCo9bDFZLHw3VDdhJEY4fGc9Nl57K2Z0KW9lTnIiQVQ8''@;'; put 'put ''Q2x4N046M3p8JSNTW25XPSJBclBNbk8yP1s/NkZkcXZoXUhkQWhCczIjM21BcG1nXVpSeVQuRTtkOClmdj16N0Y6RThPZnRTPjtraV4wYERGOSxOI1MiRDY+fDUuPWZsUF0rZFE2KVdJbF9EZj98NSVZVTkpUEt6eFVaMCwxLDo4OVYsOF55YlUqPDo7NlYkLmZ9fTIkPFpsVD9SbnY0SFdsW0ci''@;'; put 'put ''WVUyVzhYbl1taDZBP1I7JFBWZ3EkSDp4O1t3aWVWaWIsaWd5Nncqemw5NlMvYVQxbWhYfE42JilLRTFrbEwoNDBjYmo0bGslMGFiZ1VTMVFQOXEoaSpAczI6RSluN2wubCZ3L15pcCVpTW4oNiw6blNrcE5bY3Z2MC9IYzclaVI2UlQjZDlHOGROZChLX2RSZiIzfFZkTV03ZndXTjQ2c2UxQFVh''@;'; put 'put ''YDowN2ZORShvME47dzczPV5aVHtPZ2dpUHlVMml7ZzYmOFsjYV1MO1VsKSN3cFJuWCxibWA4dzc7KXpsKmddW2oqWDB4bm1scmFtZnUkTWtNbkg2W1NNIzxnaktsVSo7Wih9MHgjdCpbZlVKbWxQYU1UMzhuZD9uTzs3JWMjZDclaSNZV1BfYElxPWZ+WVJhTTsiL1o4RjpJZFdwPkg3bS46OUB4''@;'; put 'put ''Kj94UCVSc2A4UyU7VTgjPnlvN3sydX49ZklkXmduOTRrNi9nb3VoQzlPZ1FsSihxZTo4eTtCZ34wS1FtVjw9Kj1ZYVhLfE4lbCRQKjs+X2RwInIwRHk3Q0AjQn1QUCVvZWQuTzhNVEZdLzpjOjs2VlQhYXJtPCN1PUxlcmR8OG1sNzJtXj5rNi9VI0wqLzp3ZXliRykqVVk2eCNta3VWXVBJcXZV''@;'; put 'put ''LnpBKE1heF1fSSUlVk5WXjdoJTdWUWFnYTgjb1c4bWYhbmJsbTU/QD9zcDs3bHp7YGBCe1kkfVY/OjdgOzYoUT5AKDgyVV1QSXFaJSFpYyxeYDliajRkNiw2JXBaNWVwRiRrXSpkUWVoLmAjOjw8ZzcmZFB3aDBhO2dZVTwpLmFoMTNdezBBcEQlXm1SNnByI0NDb3RlPVNSUFtmIzlIKFJVeFB0''@;'; put 'put ''OUg6RnkkLDljJCxDIWo9eSNUKj9KSWQhQHw1IT0lLDcoPDhWYmgxLihjUz0hV1dmNitOXiFOdCVRZT9FOywjSzp5NDJrKWk5KWphcmVZMiNkQm9BOWpsVD5DSjBlTVR8YCs6fWdia3RnNSMpaUJDa0VhVD8wUVYqL3RsL3xgUUp6Sz1lOi9RYFAoWVI4cWY9N08lc2xAfCIyZCR1WG9KYSRAOiZv''@;'; put 'put ''fUo5P0UkU3N2MDl6bU1TJEc5JiNBNkBMc2IuWW9KYSRqcG1RUjx3ZWQ3QTQ8WDhrdkQmL00jRTFjMlZmcl4uTXhOTy9xZiVQOGFIcz8hN2p1fiVqWTVWdiN3JTBaalpoPCN1VXxTbmZSIUpIUU1uMD5mQWRQbT8hO2R+bWYkNlJHcz8hQVhfUHM9dTQ/MFdKPCVJI0U6QkVkbm0lbzx1NGAhaWUp''@;'; put 'put ''V1JhcmU2US9qbn1neys6dzdGZCJaIkVXNXMmamVPVTA3bjVqe2o7TGVRNkAoWTNUbVhUJEU1a1AlJW9pO2MuaTV7RGxVWm05b046Pj92JWEyMSM4dSVRNSJgREcoSS5eMiIwZCE2cGdaKSlhcW0yKHlidkNdVSVsLFtoUDI0M1s5O0RAZTZAYTZKQy42SjM8NGhjd2pjOCUsUmZMQlkvIldvbGM7''@;'; put 'put ''YEl+dD5JQEgwQVVtUDJMOStkbFBnWSpRRHUrSVNmUXN4SUkhRVRUSWpSPHprZUYoWUUiM2pSPHpaSG1nIiY4PEE6ajRWSWo4P2ZsUmY6eDh4KjdsKkgvKi9vPWslMVFdZCNWJC5mdEpdWSZLeyNKVHw4OUcjKmZOK3l5KjNnXiVjJFNsQns/fW9lTDNSckFhbSx7ZCtQXzdJOk5lLnhdOz5ma2VA''@;'; put 'put ''Tkk5bGRiPUFdSF0yNytkI2RgIU5rRWRVeiQsWDh3TTIzUU03dDUjKWZnIzYmWT5mSnU3aDdPXSJmUEtTIUwoNVVBMzVoUiwzSzw7MzJ6XiI6b2F8RUNyUGtJOkw2S2QiPV13OkpGfTFpJiMqZjQjWDJDc0U7IyV8OFMrSys9N1VtfHpNeTUjWDIjZDw9SDtvYWRDUiE9IVUsRGVFVjAqcWwvMFoy''@;'; put 'put ''bjgwZ1QlP104ODA3d2x8Ok8yPEc6JjMjWDJNPmJicW19NUo2YzMlLDMycDJeWjs8PElSaz8hRDtxfStRbG1tRXVuc3ovWVc9YSh0Vm1oMlV6e1ZvPnpRYSpnR2R4PkdlYDo8ZXpsJndVPnM5N2I5KWphaiksZCVjdmEwXkhkUVVSJH58RzhzdUB3bzM4MEk6dSlxYjtQWVBtaTdZV3V0dWlTOVl0''@;'; put 'put ''Qnd1UXdtMyNESFJmR25vWzdpalI1TTpsNiVpfFljVCtmZyFYZ2sxRWQxbVFtKjhXaXslfDp7YHFlNTJ3PEY5LkpXbFU9UDZMOmJ9NWIlV20lKEwodDBlT1UxN046UVAzRTBkaDcoQn1ufjdDeEpITDkxPWghN2I3Jn43N2V3Unk3VXVBcClsJkp2O0VJKl06ZTc5Pio6Wk07fmNYOD48QXJnMy46''@;'; put 'put ''Njk/Kn1mdHc9K3pLZ2kjNTc3dGVQNj53Pzp3T1MhVmFHWk8xRl1rOnk3b2BRaF0jc1ZrbUcxZDF8YygmVix3SH1ILmkqZkxnLGNBKDclbTE3Yjw9QihbZjEkUzh0aDg/eWJBOzA2cjkubVFmXTx1KU0oOntlOiojdTViS2dKOjNNOlkhaDB6aFQ5WDJ4aDY4Nk5xMlolJDIidzRIYlFXbEZxYWg2''@;'; put 'put ''ajVleE80I2Y/fDVKNjQ7Qn5USlZifW1mP3w1Q34xbiIvT108WiY4fG45R1ZiXj12YVs3SGRWZmAlNHgqJCJrIy9EZFg2PCNYSzI9RV0sLz4yRihsPWU0WjhfREcofHI5Zj8jd2wvWVZnfVpDdjdvPUVgV2lycztTPGIoWTx+YkdjSmpgIWxTNFB5ZlByNCNnbz8kSGwkfD0uYTpWUlBWRGxJezQ9''@;'; put 'put ''cmx0T3JlKC9qKF0ySzN6bClLaz15I3w1aVguZjI7a3ElbyJ3dGE8QGVGNlB5Jl5CQiFGaGs+KCNNMV5bPWcxQFkyRVRsXX41Vj18SjtlQWwwU2IyTy5OSTJWQ284MixsU1YwK3QmY1NiMiRLV1Y8QG0qJT9nNjJOSm1hRnIkfEksUTYvbSFmOm09OntAPyMjfHh9U2xTSDpYOEU6fTdAUFs4LkhP''@;'; put 'put ''Z2V3SUl9UEV7dFNebWgpYmFjVCVPXSE1dnJlQFs8azgvaTVaNlFhQXhoPGk+TS4qWHddVzZYNi9mYmU6OEA8WSw/U1pEJFdXUDdHciRDXTdqOip7VXlwPiZ8I2smTjZwcmokKGxbW35aTVokSEtUYThuKlFhUnlnXU5CVG9lYW0zLkpkb3M1QTl2bDpKPVE/QHFlR112bnpOazF0ZSZscktQRz9t''@;'; put 'put ''UlVAbDxMNFF6ZWBHWTUsdXIlVDI4RzZrLGduO0FRSXsrNSlYdGxZNTEpNWttaTxMMzhxa1k1Lj9jOSx1YSQlUF5JXiF3bXw6WkZudENnPDRDOlVHejhHZFE2WjppXm5oRlB7PTplVjgwbSpEQmVhVGpZfjBkO3xuNnoxVS8wQUt0aE42Ui5OOjVeQnA/Zl5pUjYpIytIWW5JZDh0dDs7ZXk+SDlR''@;'; put 'put ''YVBnTWJVOS9RLiNLfX58UWhJWlJtdSU0bWI6dTV4e3RncSEwZU1UJHFJOnhlQkNLYj9sWW5Ka3hvOj07KmpkZDpPXzgwYVRVVkRdJFkmLGIhTzpfUjJQWT08Wl1QSGRhZ0RdMjckI1hKc2V8OnRea2xnTlluR2tPOzpndSNacTA8QllzdjU8OmVQJU5kdT9rbCkjQmUlT0FIIm1IZXQmRGV1Zzxx''@;'; put 'put ''cjVXcGk7UjxuPHcmc11eemB6LGBwJFJsYjZ3YS9hei48WiYsNzJkMSZ6Ni4kSllQMDdCQHdhcmVrXVFmflAiJmE7WzdAW2ohSEB9T1hRJnA5JUFyYmwjJWthR3JaMFltMWcqXUZaXndYSl5tJUBlVUZUUCU7KjhiWDlIKCNhaiE3Yk1uam1uMGBQfTwwMF1wSDh2U3NEU1R4bzo9Ni5eWjdZW2tP''@;'; put 'put ''XTtgOmVnISMqJTAiJE42Tzo+IXxCSmoxbFouSFtWUF1wLDw9SF04M0osUXEzWnIodTAyTVQqNGdlNiVgXnhuaGhDOyNse1QrQEFyZzNxZTw2XVdBM3RsTVRabVV5WEpQeTZsRzgzPTxaXndgYDhfNEB3YW8zUWZBaEhzazFyUWxtKjNeWmZsLnF6OyhLe0h8OCxkVmZQa3EqJSw3MiJtJUApS3M9''@;'; put 'put ''TTt+Z3w6RnJvSFA9LCNLOk5kfGd+ZlowcF5yO2tpaCRbMEN9RlBtbFJmO2QqI0woKlUzU0JyIXEkaT1ZUTNCcFNUYjpEWGczMmdQUilzSiRmYlokYyRpbFJmO2RYOHwldCZIUzpRMW1+N0wyaDdBNCQsaCE/I1tORnc9K2k4O2crbEg8YSg/SFoyTXtOSFZhdDBRcDBdPTt7OFhhSlE+SChPeyRd''@;'; put 'put ''bVkzTWFzO3dPTzlHcU1UXUJ5Iz82X3RdWnx3RiQyODA3dGV1aFt1c1YsOnduU31UPV04SWtSK1NwT0g/I0k2Olk8O2lpfFkmcHNnRF10KiYpND1hVUdRJXIzbVU9bSQiL3RlPmpCODN0XThCODcyTXJCZWJRQ3BBYyMsMzI5YDImK1U8eiM9R2RIXV9uZUpdUENwcSl8QigmT0ZiUTxUR10wNzwp''@;'; put 'put ''RXlRJU9lfDp8JTZ4TzF2PUxlfDhtKTUucyZ8OjVUTyUkJWphZ0pRbEQxeTVdOSJrQztjdmwyNl9sJFgsOF5qRm5va2xAZkw2aXQ0ZmBUKXd9cVBbOXJLOWpwcyk2bFFbLGQqI086dGVyYVRrdVY8T0o6RSMiJXxKMj1YOG5vW08vcSo5WCxYeSFncztddUF3aXAvZEtefTVLa0E7Ni5KYnksJTA1''@;'; put 'put ''VDRqXU9Cc3AwRFYxN3I1OTAvRCxRWjY1QCtVQnN4ME1nNzlkMSppKCZZYXksZCRXSkpmcmR4N0Y6VSNfTyZKLlA8cXllVElEOEBbKWdYRntQJVUmSXk7RGVYMWdoXT1DOEIwdixJI0ZYfjB9OlZvYjgvXjRpfTxDOFR7MjpaZDB2RzErUFluPnowNj1idVU2ZzVAYTZ9PX5mQ3A4Tj1Ad1NJcU86''@;'; put 'put ''XzxhVStAN2hReWw7U2dJXSZ8SHZAJVpkPk5ISzttbTldPG13em17SHYqUzgvMG1vXUZZIVBGRjk1JVdKbmhiKlBZazFoaDVAPnc6Sn1QNW5IZD17UT9ydn4wK2Y1XncjNz0vfDcyWTVrM3A7SXtFXVdnNzlaJV1tXmlzM2JnZG9lYU1uR1hrbEk6R10iM3d9b2U8a2E4YCUpZCVPMmdkbkprbTVI''@;'; put 'put ''RC55XnhkVC9mQ2xzJExaKnUxI0xuXn1zU3llNTB6cFY5Xm0rI1NnR15mN3RsLmpJcEVdXzUxbUIoWWFfJXUmPHorSTFJPmxFQz1AZnAiL09dcWYrVCYjNz07PV8ye3V3aDFsLDhGKGYzcmVWZkldSSNjb1o2XU5YSyZSYGZVP11pWjZKNnlVWjA7UUlaVjozMjspX08yPVVtZGgpIzx6RmZBQHwl''@;'; put 'put ''aWVqbCFyaVYpL25se1pHMXs4eyQ8MCVdUWZxJHk1O1lGeWdbdFM0NnRsVDZPZyJ8RV1AW05lLng0eFZRbkp7In58RzgqZCwvZGgxbUh4JTBaZkhkJmM0dlhLWzw9K0AjIVUpLyF6JTdpcEgoI3F4MEgxYHo+SSk3P2ZtaTt7dWB8NTVZb3hQZHBTeVBTWjs8eEoyI11tciQqUWRJTWJlPUdkUDZJ''@;'; put 'put ''azMwMDZSLkBPYEdRZExNSWdbOHNhN2V2JSJbNi9wNT53NEtiMnhPUVtwKmNhJjcsNjRoVzVwWVU5K2ZnWFNaXTdwMEE6VHMySnslTlBXXjZiUlVmLmo5PG1pe1IxVF1kMXRTNDZAKlJFLGZ9VnhveDA9fH0wUm0qKXtFLGZBOlU1eG9CUUpmKi8zNXV2bT1TZyw8PiF6YmEzQTp2VWg2VlFAZTMs''@;'; put 'put ''X30seFRVdHtrSUcoYTYrTjRQYTNSclNFeGg4Y2JbeSN+NSVATjFKM3EhPkB9MGZjfW1qOiNwJTcsNmFqSDZ3SmIybjF6IzMjIS4vPENvXmlPQnFUOSxsaS4jTlAifFdKNmpBOlByOypAR3g3eDx1YG0kMDtGKC5FKyN5NTEkZmx+NTlgSlZQJSw8Qj0qZFI7XSVaMC5LTlFFMUpYIixlW3wkfXUs''@;'; put 'put ''NjcuWWlUXV47ZmNScnc8eCNQMi5LMmw3aGtDNkp0KilATGJkJHhuYzhRYSs3K048Xiw6Oz0vTls4JmY9R2c2YS9+dDp6bDttUWJ2Y2RnZENsUiVFQCI4PWI6Xnkjdm1UQWJ9YWQldzg6NWNlYTA6X1o4VjxQVz0rY1BtL207ZXM0KFM8ems7W200UzliU1BfYGRrbmFhNEFjdGErZmc1JE5dSkNw''@;'; put 'put ''WGhXcEpqUjUzeHFSMCZAN11KRHtGcjlkLD9VLHw6anlyYXs9UjxxM1pmXm1YaER2YyV1bFdsMjwsLzpuSmphVEdyYGA8ayMvWmFWNndhPl54N3wycGY7W2s5QjQ2PGp5VzIzWkt7fDJLRTc9KGMzaW0jfjJ8MUdkayFqfTxrU1VELjw6eWJQUmw1PlV7VFhdOmVXOHUpTG0+NmFkfjhlSHZVMDcl''@;'; put 'put ''U2tWSV04Jks8NS9gMnkjfDU/e3I7OSk0LHFRJiNqVmFKSzxOeTp6QUt8Nk1uSH1PXVQkamxGbTprWDw5NyZQQjdBOTA2dSp7RUAlWDhhM2dQPTs8KjBhPl4hVUJveG9vKjleQWN0YXgwTjdyNXJZdG16T0I7amx+cXs4aHBNIyhnclU2OSRjVHtGUGtweGx8Oll5bDtGZCoje1V9UHdTN21VPTE2''@;'; put 'put ''VnNMLlowWGxCNyoicDpBY285WDJxKCxxMFNEJWFte3dnS25TMW1McCM9P2I2dDh1dzdbZkJzSmUhVS8jWzx6NktnJiM9Im0kJGV2PklnfkF2U3pWQV5xUThmLCM4Nno2U31nJl5nIU1LeXsjWW1SZmBnTFY9ZFFNNjt3T3VkRVBWYkNvIi9jb2R2LDBhMElLTzsyZkE7TixDcEskNzdDOUAvNjYy''@;'; put 'put ''a1I1KDQya1BVLno7IlRweTcrUD1kbjNubC88bkg+Wyh3XmJ2M1pqRVtieTlxRjowLE1hVDhMO0w2aW8ubz8hWT9iM19xSnpyXTw0cUgzK24qWWExXmhZMVRCNzpJNSNzNVdwSnpJblkyeGJKemJ5aCM5ZHhVM1lpZzVqK3BKejxiWjI8Nm08WHspNiQyUWZlYlI2cmxLcEZQazdIVFJQJV9aZFM5''@;'; put 'put ''P09HKXphU2JKelRhYDo/Nip3QHd5YFpkVzk/T2Q/ejZMMUBPXVtYOFsoNTtpWWF5Wmp1ZTkwU1l2ZisvbylLVFZiSnpyXUA8NzFSKlFLX2RiXnw9azo6TlgkKTZiZTtncDpBPkJfWyNyIVIlZiwld049fDguKSJyRGxSLl9tW09gbjNlMj0uOlA2cjV7N3B+YCNfZ0RrRipUSVNRZjlfPnBEeEZA''@;'; put 'put ''MyFPe20oRzxfQHxMKzN1fCFFOVN1VCVFSjlUVSlZPltNaVdzLDxxfDJyM1FkfkZLUEJNWWs9dE0lb0tLc1I8aTZgIl0sW1IrbiEoWD8lOXdJVTFHSFJWI2RoPWd6VGhzZ0RyQS9FVUdPRnxJdSxiZVFIRDtsOXApbWgwcUtUYWw/bV89UlJDcyEqb2hAQVpfNm0+dlk/b3FPcio8OXtPLnZhSXJX''@;'; put 'put ''XVc2c01vYHJfUTc9MWslPE1GQzVPUUldV2xzdWd+cGhocDovaW9GenN5RWQoMXtMMGs8ajB0MlE+TXk9M1JoLmd2S0Z9Vjp0VWdeMUtWd1UxcyF3VSl2cVVXQV5KQHordjhlUVo6a2Q8Oj1XencqL05bfCZ4UExbJSE9YyR0ejFJVlh6Z3VXMkUrZVA1bmZ8XVQ6ZjA0SUB5NnEuYEpKbzx8STox''@;'; put 'put ''ZWdmRjJTKU9ROTVGeTJedz1mNFhoXy9MLEpxZklCNjJjT3cqLCJifHU8Yl5jfiR8OTFfWVNqZm5WdE1JNEBYIXJmSlYpPWVZUUxFWCFTKzE0QHBYMHY9VkNocGpjYHRlLFBjUjtbVDQsKkU+VjZGYl08d1NUSHdfVClROXZtPUo3bFs1IXF1aFhQIUdfV1hzbik3PD9CdFk7TiZieFE9TXhkKE5v''@;'; put 'put ''bmlLNlh+UV91Lj8yK0B+N3s+S0IuPmJ+QTBARi5QKkp5T0FMQ0RGT304aHNPTClvSDJ2REtmOzh9c35OMjMwS2txWlgzN2pZYGtLMmA/KTtBVzJ+UmJ3Jmledj80VzxjJGEjXVhfd0RpSzE4KV8ydF12Rj5ucH5rVU5tO2pMNVRpQ0JLNEtTWiwifDZtSiRxIVBlMmYuNHJHLzAiUCg/MDU+Pl1v''@;'; put 'put ''Jk1PJSpsQWxKbHV9eVMrezVac0tHc3syK2BOXT96TDFsZWVXWyx4V1VBem56T3pFbFd9ciVifmtAIVBuMFp5MVAmQ0pFMnN9RTZAYGl7XlI2dVBCWHdCYzh7SnRbOlN2XysiO15bVXUmbXJvbnpCSEcoc3g3MFlNZ1lucT87QD9IWWs4dDAzfih3fDhTeTpKT2l4I0EpRmZhWkRJaE1oUzR8MGlz''@;'; put 'put ''QEpJfCZXPXxodEk3Yi5ITVd5RSsrfiNHTWBYd1Q6JlplaioyXmM7Oyp3MC5EWlFyPFQ1cV15anZaYU9BaUUoYy82d0IpJkRJITNSZ3BfKHo3KGdqZy86TDNSUmtdK0k+SCQhUVlhVW9MXW93MlAsck8kTHc2PDRXMH1Ld2E5OlJmcipyTDpQNkJ4Y0JsIURWUilBflp2TSkqQElBVTUpSyZFanQv''@;'; put 'put ''NjpdJC5eL1YlP0ZeMW9kVCZ4a1Z4e1k+Q0FIaCt0JDE5XnErZCkuJChFeXNwUi9rT3w1JH5OWXovTUE/WG9ZcTByIyJySy4lfiF4cXAvQX4mRWt2QGRTZ097aloqSE90ZzpLViR4Vj9mN0kramJGdWc1emd1WE47WnMsMnUsVWJ5NUB5al5gcEBCVkZeZXxnTS5RPihXTEhgWEFCIiFVXSUme1Js''@;'; put 'put ''WSt7Tn1OIXM2YGo6Qi86JmspSDgqKVN9V1NGfW1hcldlVm1JM0guUSYoYGVJamFlLEpzZWsqJVZQK1pkVytbYH0rKV5DKnpQWFJgYmwxPT4mUC9WLj5KS11+b2BJd0owNWc4YX1bSytHJEZHLkJQKFQ3b2B2c2MsQ0c+NW02bnhNTzBdVW0wb0dFcXlLZlcrYjpxfFd1cUYsTXs0YD5HYDZseSEk''@;'; put 'put ''ej1WTFRRS1RxJClVd2l8Y3kyMS5fXjphPD1aX0toXipFP01vaTpLUVIwP3RpeiEkej1WQn42KXdVOXRQUXppWmVKamtOSG14KkdUcUdONmhoTDZBcHFRUXpxLD5zQm8kKSR8T1RSJUk8RlRhVS5qMDh1YkJXMDd7aU9mX0tReHE3ZGFHMVEzdWJCV3MhKSwsPGE8MDFFb0l7aTlQJXA8anYvLm1e''@;'; put 'put ''WyorUXZyOFE/KiV0fTtsPFsqfDYoOEhqa1JZSkElSUNueTIqektPYjdzZy4sLGVnVEx3d29vVFA5KVl4eXx1RHhSRWYsfGVqeD1jMFBsRGF5V0RBIlEhPGZda0gzWyolVzkiMSpaJFJgTll6aFZafElHaDE1RFRkaSo4d0xKQE0kSzFHVmEvNy9bfjVhPklecFFyXUxGK3JnWWRiQTtAT0hRWDxx''@;'; put 'put ''ezl0I1lnWjZmW1pBOVgySUc/JUFZRnNtSHU9V3pvZ2E1bHtlI1tZYFlvdktQLENRNnpjTSUlY3IkNyVEd1BDM0tuXyNLWTlrfHcySEM6Pzo9UExCSEU+OjVLcTtfZG5TUDNZQEVDbm51Z0kwYzs4eWNeY0s1cGZLNUQlSjUwV3BzZitoV3k6MnlnMkdiLnwuZEtMeTosdmcyTGN6YHk3JnNybEwv''@;'; put 'put ''emBxN1YoK1NQQDdZej9+QyV9MkxnKCNNaG5KKnpFbHxDWCFzaVpxV08qdURsfFtXI35nWmZuUXdoNmx8Klchc2ZacVdRd0pDLl9RdGh+VGFKLzM/Pmohc2RaMUZPKkxjJX18YVU0Mz9qVWZXaXc/QDV4MzdUTHJ3R29wJmZqOXx4aXJWSD8+dWVIUm40b1syM25JdXpJOyhydmtuRnViSSUlfioq''@;'; put 'put ''JFM/JnVASitkPDZEKHJdPTcqZDljN1l0STlJRn5fOjk6NmN4WUIwO040bkVkYTNHfTk3OTY1YkVUSjx+aDlpR3tjZFdiYFM4O0IvYzNuKV14NiR2Pjx7bSRfWiROMiQ2JkFeMUk8ezBUNSY/XXRnbXJtLjRUZCVyXTk3aD5SW2xUOj1fQExSNHQ9RWs9PkAyUWtwPngvbTAlVF0qVHc3NWJCcyo6''@;'; put 'put ''fmNMNiV6LmEiUWVSQX1zN181OHowYUI3N2JVPzhZUjwhaT1HJTJgNSRHT2ZSKmhOYUVhfTcxUSpiTldRNlZgQDhJdyk4RTFTUG5wbzAxZWlbREdmLChOdkxpPkQvZTklNypMITcpd0VASmY3dTJCXl1oVEJXSDJpP0RySVJSJHdTZGVxTkNoaVRIfCksTDBJPntmXTU2V3JrMUsoQn5PPHIpSUMz''@;'; put 'put ''UTAmVXsuMjQ9ZE5lMWkmXUAqJDZjYFMpOyQlejt+a1EqOUhtUUFvVSw3T2Q+LkBXUU8lOSpLUkMpIloqb3ZbPjNsckN9UTxkaWope1o5b2ZbTzMyb2tdOTFkaT90VkV5KElDMlFkcFd4QGhAdG9Ee1E3KFVFeil3USVbTUNZaXtHWzJZQWpJOXJ8XVFoNV1pSUcoe303YEBoeSl4OSVxOCw7Zy8/''@;'; put 'put ''LztZaEZydDh6SW97bFFjcGg4cmdVcjUscFFebkdCRyguQFc5W25HeF1iU1VEQ3xOUFZ0ezs7XmdYbyksZEVxc1RdWmtLM1RyW3wqYDs2QS9hM3pVe3JVXTlgOzYiYms1R3hgZkZHJlhfPXJuMD9BMXVnYD85I0t9WGVxNUIibndfMGpWNjkoX3s7V1kmSnEkOTdJbWl2ZjY6M31nJTg6fmBVM3lf''@;'; put 'put ''W0RQNF1DQGc1ITUlKUs2WjclRkV+d1QzeTdPZCYwNTwmQj5YeXVfaCo7YVBAJSE6Tzo+MHBmKj1PM3lDbDA2LF5mZG0mQj4jNn50RE4zeTUrUipbWnFGSXpJIT1+WHo5Wk5IKDdWWk9qInxpVFJMXl9dLClzMFlPan18KU5STHcvJj0xd2d2YysmfUxJUkxnL3hxdH5+dGMrOmBSQ2lXVkx2d15O''@;'; put 'put ''Q3tRTEEveHFzflByYysmYCQqaFd4MzEhYH07XUpGbnxFSDhabDopTF5yeEQzNDdEVkwzLmFmNGk7fFMoUUxqLkUlcX5XbWdDL15BcVtTL3omc21TWVYhTz9nRC9KbzdrZVYzRCV9NHlFWzdDdD5BLDg9Ql9gYmx8V3F2YDF7NHlBW1thJnN4Uk9qKXx1dkpAemNzMUlgP31QR2QrI313SjR5PUB2''@;'; put 'put ''Z29RT2o7VkMwYFp1KnwlRz1YPFsqLE4/fXhSLlc3MWxxTDZ2MFFSRn5rM1N5cUx8W2FlJXxHblFMdSxEVW9+VGZjK2dgSCRRKz90QlBPajl8OmJRTE8sRFVufmtjYys2cmdXYHowcGQjQiJyMkYvQl8qO1V3fmNLYmMrVmBNaGdXMXoxISJ5MnlJKlcyMFleIXJHMk5CMmVHanA+UihLbUEwKy4x''@;'; put 'put ''bH47WGMrNX1JQjR5U3w6SGdXLEZLaVJeQiJAYVQ/QXFHalo3M3FdXnl8a34wc09qeXxbe1BMUit4cWt+VXNPand8WVtQTHRDSTFmLCQ5VURBVG13Z15QQF8oYEhLVFA7Z2JzZ2A/QFk4JVUxZHRPPGY+eXxqflhUYyt+X2U7U0w8KkRVO3NXJklgNn4qcFBAQ29dNVI9MSFdc0pKMn5uITZQVU10''@;'; put 'put ''e1thbFdqcDpzX0k2UCxeQiJRYVZ0NyQqXVU2PD1maUR7UmxOfHZWKUpNQE9dbjB5N3JleT41KlYrYjomUEo4e2kyUGdJQzNDc2BHYjtgS2cheiosfmdvUEBWfmM/Yyt4fl42UEBjJSgrPGQ1dUZdRSUvc00kSG8pfWJpMnk6P09ePVBoamFwcWFOI1BMbyphZml+IU9jKzxfTWhTTCp1UE9BIjpr''@;'; put 'put ''LkF3R09qU34+WjJ5eT82UCFzYEZPamp8OE1lb1FEb25PW3FVcyFAfGQ9a1YvbDJUPDZIKFZFe0ooeiN9YFUyeWs/WiY5czMjMFIzfnNrRj9fcEBxRnRreCR5US5neTckaEtyeUBZYFs/QE8/QXk0eTd7WTlkK2R9JnozeX59WGtQTE9eNlBrV0s8LEkuc2dFKFU9IzBbS31zT0woaCpnUUlyb01I''@;'; put 'put ''e1JsdltqVyo7d0ohNX04U2RfUEZII0MjMWhiTDkqOVt7blcjYFomaldzZXp+VGY3OHdjQmlqV0J2SG9BUDJ5XXJBKVtjUExqKS4xK3NiRE9qe3NMRE9qYXFlV2N1OkhRMDVaXU9RTk81UzNkeTkwZHl5SFJ1Y0BRVUdKV1pxMDBkYGAhSjJ5RT9aJjhzW0JQQEd+P0cyeXw+K3JLQ2MrSnIiVyxI''@;'; put 'put ''UEwmKHhxeUtYYzp+IipkYFdKdCZAbzwwQSI8Rm4hU3wyT14hVzRPYF19UTlAaUdpRV0wd3RzVjlxY0BmeGZOIVVxe0IyeS8+PXNqUCQ6LjFYK3E/IiU8QktoNHlZTDNkRDcxISNwKE5kK0tMMEY4aSV+aGBifT1jdnx3PSt+bE9mIzkrKS4kTExMYENHS1g0d35oOn1sfH5FfVthQXQrfkhdcVBy''@;'; put 'put ''V0N+QjZvMVt+Kn0uKkFGIlkrXjheK21UIVpDR2hgflNEKUtzKC5CZntzNSloTGptNyEmUlNSX0ViTS8qfjxbTnNHOlZPSGF8WFd9VzJXNn1maDBMUVg8JUI0T1dqKn5vfEt2OVsvQ1cvL0N7c11xakxGTSYsMWdtSSokUmYuI0xyWWJeYjRWI0ZIIk5FS1Z1JEtsfCFAfmBzW3F8fSIzY1pNQDxH''@;'; put 'put ''KD5AfihgW3FWTHN+LC5nPXt+PHFqTEdXQHA3WSl+ZHNhV2RbcihsVk5MfV85V0tAME9FbzhCeHwjfX1zX31gMiteN2xUX3o8en1xfm4uSiZKQGshL3ZGb3RlYClaK3E/NkxeO09MWF9BcUFWI0FEVUZ9QGcmO3Y5VUBifTZ5NXlsSVQrNGRuP2ZbcVV3N1dyW1AzaU0oSWo4WlErYjpffjJgZG0i''@;'; put 'put ''c3F+VC5HN2BzLHxZKkIiQSJbfUYyU3wic1t9QDFXTFIrO2M1ZTF8dmYrfVJjMzd5V1ZCZExIIn5OIVdxMGh6PVthKi9SYEoicjtpcTB+NDAvJlhuL3c2dS97KClCSkE9fi50ZlJwRVIoQTRWUlZheXFgYHJfPihCQX5+PXUmYW10N2JpVzUxS05YN11gWEwmYW10cFpva0tDd196RSRhbTFWSDR9''@;'; put 'put ''VEUmIjRqNHRzJiFpcTAwO11gb19WIktDcH4jQS9obTxKMD9iVlJXLCh4fHxGfjFVb0lgfmJBcTFufmQ1IkshMTVAMEJeYG1fNigsPkpDdigmfmxfQWZgQncoVyJfUT19SE91fmo0SzJOMjpBXWVoTkpWVzRPWUMpdFBnby9RRzJBdFNxP35KQ0IhVWtTRXhqRV07VXRzQjwvTnxTdlV1JFU2QHAu''@;'; put 'put ''fnMrVFtvVXlyPl4ufnNMcmE/YCorMV9pQkkpbXlJajxzRURaWltuRjh4XjlBeCtXX35qU1kpXmw9RG9VZEFMVFZPKzY1S3xkVHRmd3VudEw2akV+fHdadXY/YlVZVmZRWT1sMkpmR0J6WyM3WHBCfDJ2dXo4Ri4qYUxiUWN4QigudD9NL1Ijez5pNjdWPU58fmAiIW1qVjxfRUAxWyErX1NHKWBk''@;'; put 'put ''VCVYIUdGKXl3NUxyVFsvLm4kP2Z3SDxUYSQlPDprWTUiKmk9Ql8yb3sweCMvcTRJJmJFWU06VFsvLmo8NGlLPjl0XWJrIUM5cz0uW3Q6dzByOXouRVp4UnZAK0lrTFU7VzhOa0w8dXB2ZXxDKHloSC5hNHxnSXA4ZWA+Kl9RMD1fR1kjT1RabShwbzhOPCR3bzg+fjojWW0ldnx5TkBRWHprQXxI''@;'; put 'put ''I35Ge2JveUFEWzxIX3QpeFh4UjY0VDxIXzx8PGshK0AwUmhhbFI3emR8LiwxJEw6ayZyLiwuVTVjZU15YTp1MSloeEl8aEY2Ylt4RWIiMU1Ab08pXSYhdFImSmQ3JnZ3dSFERz85MV1WNSNzSkddWWQpXT5KcFVkMGtkdE44WmI4XW9YTCpyJGVeLnhCWDJycTVPKnpwUzBkTWk4TStPXloyVk10''@;'; put 'put ''bkRXIyFPKnpNbTwxUmpsSmVPQ1tmXX5aJUdbXTZvPSxXS0ZPWztGKjkhJiRpZypadXIzVUVbV2tSU19RX2pNeSVHe2xUSl5MNCtTRCR3YzN4QyYrWmB5bT0sV0t0SXtsSWEoekZ9NyM5MGA/SDJkO25MbmIiMSpOXWNdIVtDXywkeXU1c3FsTGBvWkxYZHROcHd5MD5PYEUpR1V7X3JZfH5IJDJ8''@;'; put 'put ''UndiOkElR1tNYHhNcV97S29YTjE2ImFrOkQ9XVdHPks2S0Z3PmQwZ0AiOik2ImE9emVZV3IuclgvPUFPeWg3cDNeK30yeW05aUwlKnN+cjIqQGolekNhdFpCR188Q2t3OEpNJGk9LGpUP2EqOSQxISEkeWdaP0dvWGw7eE15Qy5LNW49LGpUdF90TTtDXlA2TFJjTnkubkc1RGE/amcybXdnUzo1''@;'; put 'put ''Qjs6a0pVZDpvRH07YGB7al48cilwQjl9IUVlSTFIakYmNiJhYzp6I2tQKHkoanZNWXRWe0dpJDdhSj5oPSwhU3NucmZXIXhQM05gUSpAI2IxdUx1ZVkpJXZHJkhnTXYqKyF9MGA2bTdFRUoyfFJBYkNIfF1dYyZ7bGwkTF46Q28pTXE0fDQhTyp6elN6LylwXnpXbDlQbCpmVEBTMyN8RFYpNUJ0''@;'; put 'put ''TkBaRzV1XnxqTE17ZndTWjs/OjNvK2c3WmJEImFVOiUjNUF6QitFM2Y9I3V8aittNG9eIUQ/dlhSMkI6Nzk2Q2QwOy9VV3dYYyxnIldBdjglIWRGKmIiIyg5MXppfGgqOTZaMEhgI2dZWzwhMlltTTZZd3dAKms3K3w8XSh4OXMyZnpHWitEZypWYHZ+fHwweVdDNzI9ZyFCZC87OWpKY0t7dkox''@;'; put 'put ''bk5bO0kqV2pPZnZDJEZENmMyYXoyd2F8ZipWYDNCInJhWnwpMUg/VzAxcSZuNT0wOyRnREEzfFJyYWRIfF1eY2dNXlshXS56bjVkMGdAczAjfk54c1pELHN5ayhmRTkxNnhzZjBHODtgdzA2UX10PTphOzB7NiJhNXpCPVVpJl5iYkptODNmaGFmTjxvWmRTSUJRQEZDcnpRNS9qPz8+dHlhOTYi''@;'; put 'put ''YTBHRk5RbXhEMSpBLlZCXTpWOjlJRSlbajlpaGYwdmdHcEIqMFd3VjlraW5WdlVMTjVZKFVgLEFleERjRjQ0bjFmbCJGOVIhTyp6WzUyL1J5VSRudyxPYlN+ckJMdnhnZnJLc2IiMUc2dndycCxuNVl2Qj96czdIQyFSKS5oIzl3YE02eF1geE0yL3hCJlcyWm5iN1syTng1KkddNV4odGgvYXZF''@;'; put 'put ''aCtyR2F8fHV+OlhNSGc2Q3N6ZVkoVUgjaitSR1VsJEQmY2hhZ2o2dEAxaVdBKDMxZURIOUIyJmZ4Vm9uMjo/OC9oS1VZan5yJG49P2ZaUUVqXVtHI0MvdVBXN1JlSFsrbkdgYENKU1hkPyJ3NnE4YmJGLmY+Mi9oc08zMn5yKllhYm5MamN8RlI/OUVzVWJlIkMlNiJhfC9YWXQyLnJJU3soTCVw''@;'; put 'put ''KltyRnROcCRhP2p4enBOWzs+YWp6ezUsbl1gJkoiUlgwN0xlTHVmKFhhQjZ5M0dIJmcqVC5UIiVbPE94JG5MPSoxQHNINXw+USxlI1s5QnROfiQyL2BtdzwrKih0JXhIVCp3SCg5UjZFNSMhcjlpKSttV3BNPFY/X29YdT1CdHx8QWE1UFJBOEd+MWg1Ml8sR30wdnZUNiNbI1BoYUB6K0k2YlpT''@;'; put 'put ''dFJNdUQreF97TVhEfWxtPWAkVjlyYiIxSGZnd3FARVU3WGt8eEpuaDYvRFhwIThzfnJgWSJ4PEg6VEtGKkYlKF8lR10yaV9YfT5uNHdpfF5BZCs+N1EhaURmZHxrd1ZMbCpZNCsvSkI+YG5pUXM7NUVIJCoreUtPR3Z5bTFYPyZSOixiNTB7NiJhZHplWSJmPjwxQnZuYCNkNEQpU0dyczBjNH5U''@;'; put 'put ''bmdFZnZOWVhQVkAlSDlTXz9vWyY2ImFkenFDXVp4aF5vOFA0YD4xNTRYPE5PIXd7NUF+XWBXTi9fdmBzY2chQW1rNV47KElqfUl4cmIiMXg1aHd+I3FPWno8eWcsR2Z3bF80XTNBO2s5W3koLHhKZWQqOUJdVmdQRURdfDVlKFRIc2ttTzNGeVJFZ05yPVY7W20wbGJFNGk3KlU+MnxSW1ljUzBO''@;'; put 'put ''W185d0ZIVTAyfEpiNGdgLl08RjdCayNMezJoMjtTSX03eDYxcTY4aylJUlhVRFlWQjUobGJ9Uy47VGR2dihlUnpnIj42U1BtMmNrTWxJMjR3OUJ3QiFERjh+RHohNHciWG9nKHI8YHQ1TEcwfHhdYHtOSXoyQkAoeC4pdXk6eXt6Mmhrc2VIN29UKiJqem5PUFYpJFE9fS5AUSJBPnxgcT4iSDd0''@;'; put 'put ''d0tmJjk/a0o0PEFzYiIxWU1QMkxxd3RsRDomSyNLWERsLi9VJDw9UjQ9ayFDQSgiaT1QYDUpOi92fml1NmdMJkRrQ3xuWG5EYnZUe0U0bj0sbkhzbmNjIkl4JEVpVSk6SkwwVWtYfFo3WndBUi51OHBeQDBoe1oxS1FrbF9NNVdiNXdVZGVWPHkiekBxR1Yoc29ASWEqVF9qaXdXcT9aLzEpMHtK''@;'; put 'put ''XlNnSWtJSFJsRzc6JDx1NnVZN2wwVDRyOzZbYmNofl9dLCs0VylmRHxvLHVKXVR6YkBVY18qL3hzQT1uQFBvdVUra3AhWTJbMilkZHROdVoscnFAcE1bdkB6TixnPilwajtLRyQ8UjQ1WWRRL0o3dVZ0dV4zRF1KQ0kiaStrcEg5aiNLUm0lJFRfZzwyTnZwYkhbK2hHYGBnUEl6S0c2NHklQ0BY''@;'; put 'put ''Si8mXiRrLz1QVTVqeWdRaCwhL1BbVF9qYnE0KFNtflBUNEJBWClIPkExcDo/SGVIMzBDfmlBay90JUZ4Q2k2OUQsc1ArIlBOdCxyWmRHUGhGbkJeQDZ9Unh8dyJYUnYqfm1oIVBYWEw8VG5dJj0pSHVATWN8YGpmaiEmLkVUMEh6U3NgNmRYWVluS2YqfWNddHZ1KXlTYyw1R2lOXjBWbTNRKTVl''@;'; put 'put ''Nk9bO141OVJuX0U5fUNBKDx8a3lgPXxuUSRrJUIuWmNER3YwPV8wVjcpaU07KShJZz5mXUhNdE90PWByJnYlJFJaO1I5d29qUURZbWo9MWohKDl4MD56IUI+RzpwWD88KipJN0QsU0hod1FxPl5BLmlQNlNfajR1RU9bO1EqOFs5TF50R3Q6Qk8oaXVIS3RTSm5mKnJ6Lyp8fGoxQzw5aG8kYmwu''@;'; put 'put ''fHR6LCQzenJabk1TYjJ4P3hLT3tXKVdQRzRIPX0yY0soVFYwIypaQHZmYlAzKyV2WXFNZnxwN2YlWE4pbWtHUUosYFZEdWdpZEZLQ2U2emB9S1Z0dGQ+WHdibGNueUdMZ1Y/M3UvIWl0WStEIXt4WWkvaHZhNH18SFN0czRVYFpNQ3Q2N3RsZilJU3dtSWZxeyM4JlJQT3VkNUdIbTNEU21hcWZA''@;'; put 'put ''dlVPU2hnTWM2eiJiZmovazg8RTJISiEyV0VGUSQoR05mTDRDK00pYHJvdWJMWGZhKn1hU1ZeYSYpYUpwckJUQ3pdJCEiYiNXRURaZy5VeyYraHxrZ1A0LFQ1cCEiSWJOTEI9Wi4lUyRRNjltd2ljdmImbHo0UXF6KnpzZTFHdHI1b2dIUHtzOWZ4fn1YNVBOTzxiaj92VnVIWjBZL0Rhd0s7bEBE''@;'; put 'put ''N0A0V1BeP2hES21CIUdIJGVqdGwiO2daRHtNNDVbMiQxU2lQYXQ9I2RBWUd0ZHZ4UlZ8a11uMnNdTWcvTGo3Lm8xe1AxYGdzRTM2byklS05WRj9NemhiJWpUUHhjRjpmJGMhdjsrV0xxdGZWIkwyaDIuIXZBUmkzQjl4OFFPN2kue1I3T29efTddJDRfcG43WVNSSHU2U2ptInBDSTFeT3h7M15L''@;'; put 'put ''YmlJYmJkYnQwYnxuLmdDPltnYmwrWTc2QTY1M2VSa29KaGI8VkdrR2NTWHt7OjFzN2JGekg+TT9GeVZidkJue25ILkM3P1hDVDtFeUs3W1szOjRCUEwieUVYJj1DalY8OVF8L356Wz1salVEa0JgZylZPzRAUCxdRk03JiwmQ1dZdz42MjU2fGk4Ik1oeVd5Okx9cjwmREM7L003W2JqdD43OUtg''@;'; put 'put ''IncrTigzaVZRbDddTSpeQ31xVmcxUmJPOl5OZUddZnNdZ2syMDV1eWRuckpANFJ3eTV6Y3FJekUsUC9HPnxXeDRkJF41OW1kZX44YTRLYFBidHV1dVQ5ck8wRjFCZ2NKNzp9cGZ3N0ghXU0hVnV7Kys9V3JAaWJCV0hCOGwqPGc+Y1k2QlBjTT8rMzsvTF1bZkJERGIpcWFHVF8sTihAWSViO2Nq''@;'; put 'put ''aT55VytySTBPVDhPaEsoQnRdJjxKQCwrSVJVQlBfMG58Ty5jeyo7VlJIc2NmNnJRT1NNOEp1P3hnPTBTUm9GREh5SVokRzt1PjpALDdab1l1Q3haOV4wUSNPS0kmSnppPC94QWNgJCtLOGA/N1hjO3U9ODYyS3EhST5FJVJRSj9pYSw3IlQqJVo3XSV4cnJHP24jVlg1aU1pVHNPUy5nLy4oR1JW''@;'; put 'put ''L0JJMjc9a19wYCVNb3lRIl9JTzlFN3FLa1YxV1ZDWSVKVz5dKj5kc0trdFEubigkWDEjeWNAPTZlWXVeKDtnKllzJFohfSkwNDtjPjdEc1JbK1MkWk1nREZ5SDpgcW52LGltTiI4U1czc0J9fGdUOXomNmcqJEluaisqfTtPWVtXYnI7KSRrX190WVJjbz1tV214QGxTZUczbm09XzFYMXZpW2pM''@;'; put 'put ''IVZwdEdfL15HSj1RLyleIXt2czZGW0VMRnVPQ1duNTtHQklDcmpJdENQSGw3UVZWK0gvKXxeaX5keER0PyVSNm9ZVzZlXT1aXmJkdi9oMWRNWl1UUCIxI2dxP1VdYWsueXF+Nl1qUCNqKjNVISJEITJnSUc1OTYzclJWVXE4VHdSZ2UvMGtWY1B3VypSPXliT3kuVTcwSEtPQyN5K1Z0Sih5e1k2''@;'; put 'put ''Wl4heGspIWdxSzlnKDBxUnhlN1NEWjE+V1l6TD5HYHJ5ZzRaQTBdTCx+ZjA6endCaGhBbSEvdyF3Y0sqTW9LSW5YO2FdaFNzOCRdSHRIWjdgW1FwMWVBZzN5QmgseiN0eFp6Pj5oND0xdUE/eVJHTTE7XzRiPExfbi4vNjtSRiVMIm4iRWAqcyM8TDkuMjRlPGhOaCwvY3E2aExvb3FaUCZlU15X''@;'; put 'put ''aDQxXSpSaVN9dns6fmBVfi90Zz0za0NuS2E6YkdHcmxjKUxaezxDaXkkOiNtJkoqT3A8TEsqdTQ9R110cDo0aSpGST1AY3FafDx0Iz9PIkNxUUJiLE1iaiJXcVpfOSZbS15pKX1KTk1KWT4sZTdQd2BVWj5ZNGEmYF5mRE51JFpGflZwIl98fHtrTigoZU9WUkk0Njc1cTxTU0VGM1dvNV1eOk0j''@;'; put 'put ''OlpkYVpnPTw6U0RXQzN5M1NtP2ZHUjhsT3NkPkdeMSsyZWJJb0Vve05NTEsqVkw2TFtXVFtRdiNeeVczNDc1c15SLFtUcyJCdlZuKkhrLDQ3Xmt0cHNjeShkNDo0YDEsQjp5KzpIKnFLZXdycVRbQEkkWltRRSpVeWVrd0Y0TFd5Tzt2Lj9eWW1uSzVfVE0rUjBfbytmb1I6I2IqI2pBNUM1LyhH''@;'; put 'put ''N35lbDhSPC8kV25LZH19OUA4UHRYWmcqd0w8QDBmYXolYmRaMUxiY0VVPlBIby9vV2Nhej9zXjEsPEtPQiZvQnxBdU8+VWp0KlcvRER7YlouUGVgSklpOyM6cTpMKkZOPDh6QyFrT1kmOWk3N3AycSVOOnE/KTh3PC9gWFdlKGNXXkRhPjgpcWh1KEUlVCRIZDt7YHxnQ2xkR0c+MG9uLCZkd0k7''@;'; put 'put ''Onp1IU5MN15ed30pSip9eV5dOD94eWk3Y0VjclhWK1ZHInk2ITNdT29vQ0pYfmlPe21mZl5fQ3YrP3g+PkchSG1UQk9GcC9sSzQreThhTWokSUJWQFJoeXxLbTBzaGoyKjI8TkhmQ3E/OnhqY2JIcmlRcnx1cjAjb3pxUXxvNV1hI2RaaCY+Nk1PLGFeQXxbT29IVmgzXV9qOmY3fWtDWihlKHc1''@;'; put 'put ''JSxTcnFsPSFMZzpfYlolU3FJdE9+WTFZVldCTVF9MTptcnBkeXciNFp7UkRXU3daVk1IWCtrL29LNXZ1Q0pfbihjYFFqMz5ydTpFYT9nTzdnNzdwezo0b0sjc1JSOEgyPWYjY1deTDVIa3A0QW82a1YqR2trNz5bbXJbbWsuaCY1b3dFLDshdXAyLCFndHRSWjQ9ZTZ0WmFmeCVTQ3pvUVtKY0xQ''@;'; put 'put ''Y3p8XWR+MTI0ZTJSJG9LNjtfY3FdJSlYQ1FAUlkqWW5uLD45TSpgb0NUaypUJDhhN0h3cH13ei5kTjckOmIvMksqNWFdNyErWE1FWiVJX240eGdbQ2E0bXtsSEtjfmkwOVtTcjUlTHJYeUs3USQ+QDZQSlRYSzZ7b1olP1NBNWI1L35TR2dveWQye111YXxTYTo6LjUkQ0dHUilkU10mJDpzdipr''@;'; put 'put ''MVkkS0hHaVMzW3IrZ0NRdTVXN1FqdG9OW1FmOCR2VmkkPDk/RlM2d25EPVYjRjVVOXsxQlVwNmBDSkpfLnpJNil3PHEpZS9vPTV4OT1rIyF9RVgyYWRoeTJrPz5xbVguY2tncWBXeikjU3p4P0dfRWYsRlNdNHM+YU9iZX5fYEJUfWpiIzllN0ttbzBrJEUoYGE7dywpPjtWJjl2W2NXdlF7fk1L''@;'; put 'put ''dGZienZjaFV3eSxsMCw3d0slW2hRRyE6O2JAQlBzTjh3c2wuL1hVUz9RXjdRIlFTdCtZeUJVJEFKZU1eWGhbZEloNl9OOGBoN0taczgmd1ZSNSZ3WTlMLyVkMmw5R0g2eSFPOiZyNVhMQzlHMlY1SHA4TSMxK2N7XVBgNDJRaU5GTjg1WX1SIjxKKmBtY0kmR2hIWDcwVlExfiNaSy57P3gvWDp6''@;'; put 'put ''MnVPJF0uSGVSWysyPztGWU1rQG1HQzsjQiVZd0h3aVsmSkMvZmNmTDFKT3lbbUlVWDtBPTg/T0oieXUlZ0pSLEd1RGJkcktaOSVhNFh0fmQ4VGNqQCMyP19sXmN7UitBTj1LfkBDK2tkRXR8VXlCanJdM2ZNUHs9KFBxTGBFJTlrNzlLNDw4IXY3XlkxKHM0MXh1XnB0eyQmenFxOVNfRjYxbT1f''@;'; put 'put ''P1pXQ0FsWmRCVldaaDRSTlJVSnpyYVo2XT9UQmA/bSxTJjVUL01HXV1FNXxGUVJxRSsjeExDN0c8bl5NTElEfFhQK0NmYjNwSF5CQnkpOV5rI0tUSUZaeTZUSks8REs/Yz87ZWp0VU52OFk/XTkqQChxQlpePExwKUVwfSxWInh+JXx3RWJsX2woZk5NTEJPUDk7dW9MQitpfHw8TFZnL29HdSZn''@;'; put 'put ''XVIkby5STy89O31vPm83aTNxPF0hL04jMG5RJGl2W1pBMUdGWz5raWUremh7X1J5Ik83amRFYmxmSlEwNS8vT2x8WnouaVs+U102WzxZcjtOcHh7Unk7TE0qJXh8TDRKKXU4TEtBXztVSGQhKD18YSk6eDhwR0hhTCpRRmRlRnQ4TzV3NmdMTll4fig+O2J5UmM7MDZ9ZkpRaHp2W31VXy8pW1JN''@;'; put 'put ''MFd3NXo7ZF0pRV5yYntdZkQpdkxVYjUjU1hIekZnSDlobz1MbmtFMEFgOlVgNGs5KDtzKyoyUU9KT0kvbDY0cE86ejlyWC4zVElPfUVhbF9eP1d0c1FeWC5PTy55XWN5Pz8qUnpLfVR8TGshaS9oQHUzaVRuUGtlKy91c3A3NFJQIShneFJ4dE9XOj0vKSUkRCQ0RXkxXlRuSElRRTghPTk/a3lk''@;'; put 'put ''aCtMST1yUkB5Vm8yYDtoRTUyUGxNSSN8fnZvbjh5I3xxVGd1SXQ1Q010W0s6MTFdcUNraFd6Wil7IkxiUX1aRG5aaER+PmBdSixnSXp8JD41clZZVSp1cT4mYG1hPlJtenVvbmlJVFZ0L0RENns/eH00Kmc9dCREb1AxUV0pSzd6cnsqVkRATWRTVyEyNylZRipxRmtodCFMJHg1Q1IpLnRlTGpx''@;'; put 'put ''JSpOcnAlR1A2IkVVRDZye0ImfXROTypgbTJLISZbdytNbzhLaEthbUt+XW5Od0dYOSl1fSZCQntXcD9Da0A9cWFhRkl3cktmPXoydzBLVn1sQXIoTmFdL2U+cjFZIlNVd0BbQTFPQy9mOTUlcXxsc1V9MTY2ITlVRDtnY0QrR3xyTDxqVzVMSnUiUCkjJmFKSSl1Z0lqS0V1bzQ8X1dOTypZQWsq''@;'; put 'put ''Slg3c2RFWjRrRi4mXjVQdW5QMzMvYHRJUE5AUC5zOlp2fXlOdCZwYDIxUXc/JCVzOlo7Y3hWPitDLiVpNWp8RWNiYGxSb1tURmZNQVhfX00hRWVmbT50YWIxRj94YmZTajF4QmZ5MGVnaHBHQ2JxInI9OXh5LFpkX1lGL2xocXphZml3O2NJfkMuenp7YXssfmZwTDB6XXZ5Q1YoTUJON1lSdjxd''@;'; put 'put ''YjxhI0FCS25APDl6MVpJWHxWcjtGSV99QEgsWW42NFNAVTNafH56eEhFQiMxKSxud1AjcUhRWXR7bzAsYSooeWQ5cno2UW5UKkY/XWJxd3ovZlckUihRbWMoMVAsRz9dYno9SzFQWDlybWIqS1FCZkg5JiJNWDxuSHMia2FMOE9CcC49KVdyQ3dKPWJCOj9dZThEXilkS35dZClzQ1NHZkNqYHIy''@;'; put 'put ''OChaRD98XWJISnklSFJaJk1xeUJOX0lsXnIiWlcjZSZ7ZWpbS1R8PGlLKVRXcilLRlklSXI2WCglKSlvWGlafGUwUih8ZVMqVHw2SjFjVE41bF9se2NgJU5YTCIhcm5DZlIxJWR9ZTBrezpvK0BrKWBtdFsidj0+YGwrPGEmQ0dxVmV9bS5aLzB6UCo1NnNJRUBoZ2I/IiY+R3ElPlU7fGUwZltB''@;'; put 'put ''bVhafEVKdmVQe3podUAmSTY0NFZ8SV5sfnRiQy5WTjAoNTY6TzNuT3A4TXM+Y1UoVF16MHBzMmAsRVEyQkZbPCZZdVVkJnRvQnMyJHtKLy8xdS91Pls0eDBlc29fZTBmflhFOltqKGtbWlJjbUZ0P2dAYjVBOiFUYCZRMm03aSIlQCZQTiNoYVldYUt7WEs1QSVsbylvOXEhJjRYISJQZzY1T2tN''@;'; put 'put ''bCIpOUZdaH5leWJIcl4jVSRfT3B+T3tdSDVXM0JmN1BWKCFgNWRfPzoqbzl7S2BjKDNAcXtsX0owK0s+X0BnUEksQDplIVFMQT12RzJjIVdvXyEwdTZjd3x6eFRBPSpNJU83KjJxZmErbzZVVGpAamw+alNRYW5OWWgxR0N+WHVHREMvSnF5dVdJW0xZaE46TWMjeUouaC9KcTQrODg/Qj87RHBH''@;'; put 'put ''OUUsT11nSVMsaUNLIk1ARlEpWCF2N2pIWTMqUE0rRi42bmhOOmB5SkZMLj0ucHE/WzRJNHQkOWR3MU8jI25PS0BrVk11Mk9BSmBsa2x8W0J+R0JZc29bOVtmXnI8WCQ1UmgsRkVlRzVUTE0weixEYEBGUUZjTCg5RixNVjt1IyJGNT5mJlk2WjJTWWwmXnZke2t3ZVY+d2ZoUjo+SmY5dUI8KE9y''@;'; put 'put ''ZERsbGFrPTsvOllIaWAyRDBgP0tbVDZEezpXfV9hMnVuN1Upe3JzWzE/NkNpIkxzRFNXWUk3ZWk8JjRNVnlnSD05MU9DS2AjYk8qfHJGazRYTChfV31jJmRCUm1pcXNoY0dMSXwhSyZHKH1VekdMQ18pQCZNajt2azRISFh9ek4vRTQyPWoyPlMpXzJtQX1sJVJKVi4objVifEQvYl5JblQiKXhP''@;'; put 'put ''aCFkYllfcVdfJDF4dEE+V0pscEQ/QkZtXStVRWAqSTpWMWZ4QD9samtCL1Q5fk59JkRfKE8uV2ZsM1M8Vz1jLll3LnI8KkJpNG9nKzhmdltXd0Q0K1lZZGdlclRfSyx6Jk5PXSJJTzc/emhpfkIicjxZWWdIOHw9YiEpfD5uT19jQkIyO2Y+MXljQ1ByYmMqQk8waTo/JiZ9dFc/MWNPPkJbJHwy''@;'; put 'put ''aHt7azhYbG1HPFtFe0s3I2FtOiFEMSFrZXp0JlZCPEtHe01vMF1hOUhdM3t0VmhOe18kQ0BRczo1UCg3WE4xXjF7P0xqL3gvUFdIJnAyXTpaSFlyZUBbRVlJX0J2eDc3SiE6ZzV3fH1QU1RgZG5ZaDZ5TyZwZEo6T1dnKm18UDJQY0I9LjdNOGw5VSQxV3hsTUV6VF06U3BxWWBEZ1BBKEZWeiF3''@;'; put 'put ''anZKNm9IYjU1KlNyTytvdUlIQmhwY2o5RlRTXXA3T3hfNEdVKUNgcEQ0TyZBLGBxbDBpfm1CeFA9NyMhWiYlKXkxODM2REQpMUw3VlUkZ2ZKSEI0KTMvTHIlRFlQRzgyaVNrSW5qTXIlZGRCOkRuQVB3QlVjYFtnOCNIczNqN3U3ITlbTkJINTlZViVifVEoNks7TFlrQiRPWDlEQndDSU5aTCRJ''@;'; put 'put ''fFA1d0Z1KS9KRipSaTFxTlM2fWZjQ0VCQnVNdjZtN1ZRYld4NUl0YUQ9U01BRE1JXyU8ZHBuNE10U1dOWil3NipMbGFvQ0RaMnplOmRCJkpucTtoMFZNaF9UWFgjLHFidDgiVC5ROyk3ZEQseDI2U3V1RDU4JVBtTHdBd2ZAJGc3Vkg1O2xtbl1tQn52ZTxGN2soa0hCb0Q+eSlsL0hnPnpBJl9G''@;'; put 'put ''cVNKJnlxVmdhNmw/VmVoIXlYXS87R1NLOG9tLjdWPDxlNWREMTd+IipeayZWZyh2eHV5TEVyUk4+SWBZLCVGcDlzXXpIYjgoKzlFd3RBY0hBezAvQjF2YXxpWTBpZSZMKT09Q1lUOn06aCRJUEI3Jn1hXVsmdEE5Lzl3LykpUTlHc0JhZyNJZ0c4d1hZUHlkKnRdXXhGdCV2NkdySldPa2NfL1Ne''@;'; put 'put ''ITRwVFBobC5NIVdxeXVzXXlpVnlWSDhXSz4pKEZIWTwlW21dNHdCOVdwdGRUY3Mva1F+YyZRdWQ/Y2dedURCQThfY0NIa1dnfHZQN2BrQ3F6d2t+dyQ1M0E2QkwmQGdKPjxKI0YpWFhkW1Q5QEd6dXBuOVh+clQ8alhvdV9tXlNVIlNOMTg4WndUaE5KOlMvaVJKY3NZZFtNTEEsVkxGUUtJfUdN''@;'; put 'put ''UyJCcE17OTB5WSRHWmdHInVxWFBsQCQoRFthWVd3dTpadldFR2g5JjoiVDQydTRuS2kvMUxCWFp6YlVhNHVPXmBxWnojWjYiPj5MOT5KQyokKWhXUGs4SSZLN2JqZj93fiMiWlp6TH5JXTVwY1lgcnYveVFALFpafD5OKGBWWjhPOWgyZDMqeD40Rj8kdFdhWGkrVk86OVREZVl3S3AuWV14V2x+''@;'; put 'put ''dD91PktHfnhCM1UiJWEue1VMOGBXK3dIYStjXV9+cSEzVV4rOHMvZE1xRld+RlkhU2AremdzLjkhSy4xTUJhI1kuOT5pITNVMSk2fX4hYV9QZWM9ZDZGfiopWFVjIWw4V3ZLdyhLfWNAYytScClnIX5YbGomZUNUWCpSQzMrbVovd2RXVTZaczpDMXJlNXwufkFaTGJINmhWQ1p5bT8/dDhtW2Rv''@;'; put 'put ''ekJab199KjNGa0trP0V3QExYQEUsSCQ4MlV3NHIzd21WOy8hRj05LEJqI1ZuWlJXYVRtTHREVUlDUFojbV1CX2hNeysxZ35KL0lCa0lxSXF2aytgSzE2Y3MoK1hfQlVSK3k/PChxUCxgZ1goOmMzMUpQTC9uWUZESG0jOXhtX0BaRyhFWlcrbEd5dDZmd3t4VTk6YzNVWTFodD0wfVdMU1A6NEhe''@;'; put 'put ''NjojV2BvVCsqRmRNcHRuWDRmOExwVyMwKUVLc2wvelBLYWBeTD5EaXYzPnJfJTpwLkooYD9jeT9VZFNASkYuZTNyNF0id193OH5oVy5gNGRSRDtTRT5IIzZOUkg2RmFHMkNKRyVRO2A7R1Fpak5BIlcpWl9IVXVNU29yPk5Tdm9iW0F0bGdeeHkxZkR3fnBpfX1mPWg+PHt6a0o3OTJ+SW9SViJ1''@;'; put 'put ''VHMhN2lfTVRoNClIITNjUkNJWC5LMk0jWllvP3VsaUl2W0JpW0JUJilSJmEpck9ZfVhOeGlDQDNVUHxSVFVbInd3Kmt7ekV5JV8xKClfMCgjYFo0fnlMTEx4bjNYO0JDRiZMKEU+ZV9ta0x7NUBOVnoxUyswJH1gdF92bj95V2haeE5rWT8mS0c2PldnJl40K2UqUU4hfW9pQnpGTTBJPn5lKUcm''@;'; put 'put ''K1JbYzZFN3ZwaWg/X2xiYFhIbyV4a3A3I1FRTDd8TUZpfSZqdz5sI2NZOHVdS1R4dDAiP31JM25fX2x+Vn5rRUopQixINjNaJktuTVtUQmQ9dW1ST2JdKiUuSlRXKWpzMitHTmRfcVUlemc1fX1mNl0mc2pkNHJqQ3dVNGdUJGBOcVFLR1l5RWVfX3hbX3c1fGtlSCFFYUQpeGdJX15lTDA/ejwv''@;'; put 'put ''L2xWMjAkfW8pW3ZqfUdJTVhCRTpCYytNUGZqb0xZUHBzcz9FL2UrXjJ2Mnp8VWpkX0QydCZbNE9fMUdhcy8yWGp2WltPKGhUeSNRYmQ5UyhXQHNLS0txVVkwZnJqN3klYW58PVE7b0x1JSpOTE9IR1ZXT0l6YEh9KWtSTzpWVTFxNiw5SmM/b05ETTdPLlJ3MGRXQGcrZDAzWnxTfk4maDxKMiZu''@;'; put 'put ''aUcwN1ZGVSx5LEAhfXcpSTlzQ1VyQ0ciMFl9PnQwW3wmJCZYckhPZWszUH5Cb1tXU2VUOXQiKGFdcjp2OUkhLzNTfH54QyRSImVJWV1PMH1zPHNLLHhucz8xWG5YbS5gQnlLfX1CQyhrWzRFfU1xI2QrTytLWFlNdWl8LkUlNGpqRH1hQylebGxGTEdjSHwobSlZLjxiJmNdTHE1NXIsZkZ0RTZh''@;'; put 'put ''JlV9aSU/O2RLc1t6RU4lYz0lJkZGUyZEcih+eF8yPk1LVjwrOig1TVZ4PFk1ME9Rdy9yN2NgcjxbeXdEN15OU30oeHcoPkoiKVZXTW02eWZONzZtPGJNcT5yR3Z5YlJbVGx1eC9ZPUxEciMpdjd8XTU/JkFEP1h8fF95YGVBSSEkXTVwRjQvcDIlYX1AY3RwcHdXbmNTVz1yRWgoeVBmekNUfD4s''@;'; put 'put ''I3IzQUtaOTZuMWJvLlMyZzF2Jnh7WypVNyF0Y300UnQ4QEtUWyUhPDZLJkhQen15Wkw3c3dNdlYuK1ModUo6MlllblBoP3xsLyIvIlE9R1JlKXU3KT4mO10sV0dVMmZaNTpRaD1yWy93M1A/VV8rdFlVSVkiJVZlKSIrV30qKD1wJD97dEM6QnFkbWU3ajYoNClwOnQzP15+JGxJJSh7YldKYTZI''@;'; put 'put ''Pil9VWBZX25VNClYKTYmYWZRezBiY0h8Mnooa35yZlZudVlYZXB4cT13TnB9XkpkR000VzdUNGM7LmxUTl0vWkJHYGZFKis5KUt7dW00VTA3bFVjR1JNWEd1VmROdDgrLjgwMEx7KlR8dnVZN1Ywc1IoRC9zd1F5e05+UlE5UnlkWD9haXkkOHJhQmtBRzVfZE1AdDZCan5XL05BWTwhfVF2fXp4''@;'; put 'put ''TndIQChxS3ZLJllrSzpuPmpMeDBFXW9CXilCLzMkVyEhRn42UDQrNW4sPHJLcldXdzp8RTR5cTFiVDh6QUVhbiUhbWFFe0c3XktwfmssV31fQ0c+R1JVX1p0ZkVGK3R8MSZPfH55UUVRNz0qcVA0cjNFP3J7IUZfSTEiJnoreT0pY1ZAWjgpPypnYUk4fV00cD5Wejx1UU8qQyUiMl8uUHZ8PDIx''@;'; put 'put ''RDlUajYjUTtBeVdfa1ooYFRmPSFbJj12fSwmWF9YM0xnPj93c01dMXIxYlEuL2M6fTZgVnZQaTFlTGtgb2hGMUxBK1l3YENUUFZqZyp4bmg/fkt9aVRqUDVuPk8zSmw6N2tzVSVYXyNaMGR1Wmh6QT1McTJgY1RBNWZtYEI9fm5TMHljSy56WncrKXdgcnQlSzVeOU0sfUBpNyM8P0lIIWg2UkhC''@;'; put 'put ''bi5GTloqanpjQEFGc0FkTVYpekhUcz41O3N0RWN8K1VOYGBDIXJzRldbc2s7cygwQS5FSnZ5T1JwOzh+LlpYX1BhdD1vXyRzYzA0JHBAcTpXJjV9cEA7JlRPQjNbRl1DUjQyZH0qUlpxdX1EWUAjSSZ8XkpIP0oxYzw2PFR1IWRbKWZ4OXRnY094PnJTLD8mS1AqKE1KW29DUDUiS0x6VXZKeXp1''@;'; put 'put ''dnBfK1Y+eGBvLD9vVjR8RDsiSm1FbTBXWHh4WEluSnBYQlhKTCN9Xyl5Qn1qU0o+QH0mKiQyVHQ5U0V0MHNTOTBYRG9bL3EuX3J5QVY8czdLUTl0dWs1aWZ1YHx3Z19SKTtLOyh3dy9pSjc2a3h2LG1TamxASjJFVEptSzxSUjI5djJtTipDZD8oaS90KFB4ZnZuTHl1eCUraC5feV93TS4lTG5Z''@;'; put 'put ''JVQkdGZYe0tbVit8W0B3MUZpakI4O0xCU1ZLTEYlL3xbQHxRIkMoUm5Zcmw2NzR1Ims4ZndfTlleKEBHKDozUi55N3pkTlA/V0NHJSx5UyxZU3wpKkZyWVdDd2pIKiF1RExCLiUxTXU8Y2RqLjE1U29COVBNdWZ6aUBuRDsxJFBYakcuTFI6Xn1qMixxT1dAOExUa0F5aW1qO2ZqXis2T3FEcCQz''@;'; put 'put ''bWU4cTYjUi4reldDRW54aGpadmY5KXwmM199On0lOHJEeSRoRG52L0pnRHJPKCtBLHpxMD9OWCtjRkxdZ117YGtWQHFMWTE4SXkyNntfYSo1aStMU19sPTtTIWVoeGJzYD1jMGkzd3RrZUk7bDwuZnpIaytMY1RQRSZWLzt3WVFhT0kvUUh4OGVzRF1AOFolRHhZUW9qJiNaZi5XYX5YLmU0e2ZH''@;'; put 'put ''YGoqeXtYblZ3UmZPSiVGJUZKR2tjLmlSRywiNy59IzVwT3E2cmY2eXl6WDA8eFd6R1krY1ozeCVbbCE4fGNBa3ZXWUcvUTdhNTs7YWV4IXVWMyF3XlJ4bD15SnhfZil1L3F3ej1YZipyRGw6Ul57Y15qQHJXMHp8aEBLYVdRWlFoNTk7ck99IShNR2I6KVYqaVluV0g2dkR2YTcoe2ooMVFQYWpP''@;'; put 'put ''d2JhLyVKby41IixvUnlufnYoaShCSW86LCV6NE52VVduVUdsY09tdWYoeSpSKFVMd0guSzBMTEc2VTA+Y3l6WzI7TSssZV4scUpTbTB+Mm0xb0UjI0FTV21dNVsrVU5xTHJLTjVpNWBjUGpWentOWV45TkhUKkdSb15qVU4vU1guQ093MXpMS1lPbSNNPU1rMWpML19DImNvRjA1elJofmJINm5+''@;'; put 'put ''KCtILCpPTkN5LjlsQ115Zix5NHJKRCNdaGpxelIwNnopSXZDamYsYisueGFEUk4pdUNrVC5tVW8vK2VrO3pwMitOYTlDVipNc3loalJqNSt7WEVhSWlZdVNDaHomeUFNWmFqXVRBPzVGS15yZFp6akpOVFlZQ1BaWUNGWE9tbSZVbzt5MFNidytTZjsjK3tSQCw0UnBtPzFmWW1+czxUQD55JWkm''@;'; put 'put ''MGpDUFBnekZbXVdKLDImbGNMNEdTNk5QWkVHRy9RUz9jXWdXWSlaZ2MxKE9heG1nPCYrWTJUT2JheGJxOlFrIlpvKzdEYlhZb216Li5belhmbDNGM2ZqJk0+PyNlU3tnPCYhb2ouUnVqbS55UmIuc0A+S1IrS18oUH1SfXklLnp1SjVBRXtVSiRmandaS1g4KzVLaWpkT09qPjR5Mi90d2cubjJt''@;'; put 'put ''fHheUnFLdWtKM0tXdmI1Z2ElZW9fQHUxJUNTRmMpMlJgakMySmtSPypWTE0wPWIlUSVWb1FbTDI0TkRvPz1tU0JGKzhBU0MuVU1gUz1heEg+aVo5KnxdaisxMFsiZHMqZzxyb0wyMG9DTnZraTBjfU4ldTo2b05TJStSTXdaVWF6PVclUjMjWiYxL2tnNm8wbn5Kb3ZVLF5yZkoje3kuTHhmeCwi''@;'; put 'put ''ITd8TnVnV3ZiSjNobyZALkloWiJMX041UWR2bTN2YiFNfHlNUn4rPU54bTVweUApK2pYUnpTT2xjbTNAMEA/SW9Ha2BXLis9TkZxKipkZixxU0AveSowcGkzVlBVWmFDVl89VzBALzZgZ1VuekVTVVpybCJvRTZBek1TIWIoQlpney9yT2daRjJyMH08Zyk4bj4uQzoseTo0JDgsUD9JbmY3cWtS''@;'; put 'put ''TS4kMjRYNENyS1pyOnJ4QD0sMGFEQmpkVTY9dkQ7UVVROGZqWVV9QCxPemsueSFTLzFYQDlMRU47IlREZDlbNVBWI3lKSihRODN6cWx6UFI1Q0dFKnpvekBAa1olKCpWWUIwfHwhayt7dExEUGVEWjY9LCttcXhUcFFpNURaKVBtak5PZk1MNm5STipeNmpbNlpSYnhIUGVweD01RS43LjhhPmNH''@;'; put 'put ''RVFtVG82M311dUs2TltwS0tZQG0rMExEdzpHWUJXKGtFN1IyK3E0VTR9U3xRTkV0JS99S2A2RmZHRiN7eWpYRy5UN0ZjZSpwLCRKeC5UQDBMUVQkLylZR3w6bXs2XnlJM2NOeE9QVSkvclREaUg9QS5tK0kyPWs7cF9HZXl6YkZVYUBKLCtScW5jPj1OdXosOCkrSzJvVHpVdXoiSXM+K1JIMEhy''@;'; put 'put ''TzxJOD54O2JEMyFaSWE+LmJEeiQuXiFSLitPTj8+QGJhIXBMZilJTSNKbmFdYS5fTi41Uld2KUlCal5qaWpsT2VqRnowUXp8M3FTQCZUV1hXaEM8Xy54TDRSc008bD40X1d8L3AjOHpeMjhOOjlFZ3N3dXpmYXxGP09pKCttI1Jvem96W3hkRk9wajxxampMbU4vMm1pP1pVMHQ3bGpgLCF6cno2''@;'; put 'put ''ZWZmO0gze0JrPjUheiw1WkJTcUU6RjA5YSQyVUkjU2Mub3hKJUQsMDFbaWlFZUZ3Iz41Jj92N0NhZXFyMXV4SlQ6SVZqLERTXkczbStkendaXSpeREMjQS5MYGJPO2sqOF5EVG1eclhqbmp3dDJxZSsqWj0oOFEvMWtiU0FGOGhJVTB0PE0jWVtDYSUoWj59QFpecXg3UjJ6X1EsY3AzXWw6VX0m''@;'; put 'put ''czxMU35NcUxeYDVYSGh6dHh2TSpwR2trdW9TXm9PaitrY3A3OztBKXVDNnFsQD1Nbk1TVkVzYUVtdC5JaisqWm1BZk8jSi9JTm9wTzlNIUIkWTJSYUBuWlRGOTE9MUNhPldDRTFIRj1wSXF3XlJpaUYmdStSMk9USitkTnVVPy5lOWhHJXlCdUR6Qm9FK1t9L3FTLEl6IVQ4Qm1FalRqJmMlOXlT''@;'; put 'put ''UikqPFF4eiZzIjNATC5feXF3b0ROYTFgYEE7SV8zQj41U2taWz1PWGkiMFgzZzxFLDQxOzBVSXN5USs/NSUhZiVBWz56XlEkL2hSJEo3cVVqPCE2ZSM4PzUzTHhvLnI5TV55b0FbcD89SkpkRStYZDlpemk6KVBIM35MJX5CWzlQclguX2d5MGJrVjJqUFtZLkt1LEg9ZlpbSm51eHRvXSxnNVI1''@;'; put 'put ''a0lfPX5SbXNdcix0NjdpZXM8IkAwdDN7I01Na2wufjJlW2BjPVN+ay84eGBJa0dheCwkKXVDKWRoQE4uIS5BM3dONlBUJmc8I2xMSyVaejEva2syXkQ2cSVNWyx9WFpYQXpGQGlqW015VDZuKzQpWT54ZTh2WEhGW3pwLGZlTGBGaz1MfHU8SUxGOTtlOXZFfFJmMFBNNCpNQXV4e1VBa2tWTCRC''@;'; put 'put ''SntAW0xJbD89OFFleiJUKm08PmQ5RXF9S0FdRGJqK04yUU5PJStwd2JSbTxNIixbUWVEI3BleVVEKCFmJUcjOix+MlZrb3koaWUmej1HMlRvekBKLGl4QExFUEgpWSV1bzxIMT1OJWUpandeUlRmeXJuPTwkJUxgYEcpXnpiU29FK1pyLjJ6ImVvZWQyVkReNUF6VFMjRVt6Pk0/TWBNZzE7TEZk''@;'; put 'put ''W1ZANW4rak1HYmR2b3o9YzxaYk59ak0yJitURGlQL0x6cSZaP3p2NUdDNEBhYDVAOXozYSN4b2U7dEZLRk5hYTxWT2RHRVReYyZTYHNPVTdbaEVxUD5OVSgrPmN2dH5iRXNoSC8lUF4jUipSN0xQWSNCMGFER0tuenFqK0t6TmU8R0pbSkJOWV5yZitKen5ZQyorNnhKS1VhJUcjUyNhLGlrPnps''@;'; put 'put ''WGkpUUVrc1JgZnp8UTNjRGR1emVmMG95KyV6LzAqZDhDcT50RSwrczFLMTl0dXhBd3hCa3YkWV9jSlNETkl8PFl+QD1JQ1NETm1Mblc0WDAueWopTWs3aDVtcGc7M2hrc3hAN2pMayZaTHRvZTdLey9semZ1dltjYUgsSzAyMWcwI1h+Z0p3W3BOWV5yZ00uSUpvYjBicnh6KzZNWWp6dSs9KyVV''@;'; put 'put ''QHo0UXY4YXk9NSJARjM6dXV1O0QmVlU6b3JPQ2ZmUGolTGtYZyJYIz9yWklifX4xbEZgL1c5UVBkeDgkbEYzaEUkVnZ5cXZpZXpxWChCdypddyFOT3ZfSThDQyNrRVFgIyteekBOPEZ+QXp0YmYxUjdMcjBhTkFSV2dXQ3BOUVAiQG54TGApK1RNamNhTXxobCxyNit6OzNmIV8zU2BEKjpHVFFu''@;'; put 'put ''PStafUt1Ji5fY0ghKCJdI3F3P3YqNUZIUWdLPyFjQXRWJFltc0F5Tjw2aXsrekxadTNQamlaOUdtKW5YS0IoTVVWYEEqNUxndEZGO119QGJmPW5lKltNbll3RSFKcy5iZlVAXiswUnh1OFFQfittRlVXb3gram91QFJVO3klTC50SkohL0ErPFN+QDwxUmoueTBaSkhxZCV+Pi9ebmlWKTM4RVdZ''@;'; put 'put ''JjlzdzE5ezJiUihpT3NnQENYMncjSC5leXtdTjFQOzA3e0JTPF8hR0haIU05LCFHc0UueSF3bmAsUG1FKEMpOVE8N15FWUVSdy9FWW1MSm07cENNMGZpTWsmRklra3VpWzV5TENaW0goaVhNRXhoQnkkeyZZJH5qSV52YC4lSV5QMSZqR0lqU2thXjY5WmdqPSwmUF41L1daKTdeTVFyKl93O2FT''@;'; put 'put ''PHRMMzRtej1fIUN6JHokcX07SCFQTjdNRH5xJW9AJHNbQyw+RyR4O1RpKDpwPnwxT017ISsmV1hIJTQjSDNPfUIoQzh6R3ZVSXJGa0VSajxNYCIqRntLO0g0UkIqbHZoQihpW1Z8TEEjKVlbNXlMfC9SMD5SOTI3REt1dy5gWGlTdy9ZaG9zMW5kKVVEXk0raThjPGEpUF0mekhJZUk7YmZHOSxQ''@;'; put 'put ''W1YqcHpbeDBOIztIbCZGSXdMeiRoVytEQ1c5MiVKZSppTURkeU9YSF1ye0t1T0k2TWtHYWVZQG0ib0FKaFdpbik+cVcwZllrUjRoUkEjWmxXQEx6W3FyK3V3NkJIV1NDey8seW1MfHc4aXIqLjB1YGxFR1VBW1R3T28wKyV6JmpENT5XK3FxaitNUmtkVG9UdSVyOissTTAlSntLdy4/NXxNUms7''@;'; put 'put ''cEQ1Kj09MSQreFppLjlpLkkiIXMrJXptTj1hPkBMejZmfEB6LkdVMj9sYzxhKVAsenJZbS5AQ25LYFZjek41Z1YxV0QleXpFbztfRm8qK0ZvdTdGbz11Rm8wL3c9VmMsfVsqOStXfkwsXzgoUH4zWmZqKytzMEBrT3gvWl04UmNXMW5BdHI3ZXpxO0JwcT42TXplc1JzMVhvNUpHNmV6Wjh6K3Rg''@;'; put 'put ''RHl8WHheOFJeSjBCeEllejdjV3p+QF1UbWR1eX1SWSoheEEoLH5KZD5hYEAifD9ZXWpSJT47IkYwa1EkVGNRJjQ6ZEFobyNhdWB8MmdJbC4vdnBfVW9QOz1CJW80bnssbG1sM3RodHVXXm97KX4yfnsiQTc9QX58VF8iNUp0NkM9VHxzQ1J9fkFPN0kxfkp1MH5bXXkzdSl8fkIhfH5pND1+Mm5f''@;'; put 'put ''dj1+eV9eRUlDQDlQRCFTOX47PmtCRGJMcT9yazY2WSpPMUFgVlNkS1k5bUVBImJSKncvTnkkPmRZWl1UfDpqV1d8aFojXXlFWjNmQ0JmNjkrK3w7QFgoS085aHwiPmJaWmEuNlBZfEsqQH5ST0Eibn41cTNQKUZ0X2VYOX4+QzxgZyhsPVI0aE4kYV06KEVuamNzJkV7b3VwWWxUfFc/dXNJX09x''@;'; put 'put ''NXxwT1VXaUxGYzI5SVZ3QFBvcX5uInV7VldNcj05WT9sQj9+IX1XKml+XSxQUXV9TDYjc3dQRjdydCwuWHxpKiR+MytEN0V5cVBVXWB1VH4xV1FXdDR5My9gPDFWKCQufnR2fjIsUjY8fTcwa0J9eyh3cX5YTEZFdmBIaz1+V2NaXVl8OUBXV3ohYGVtXypLMj5dVmV6eGA0bG5+PmhXNFRgdUQ6''@;'; put 'put ''djddOEJhfF5TV1csQ1E5SV0pQlR8R2I1aE52SWMrIVBVbVczZVQpWnwod2V+TGY7UVRxRU8kd0phc3NxPmdfLDVAZHpfQUIpfWhKPX5Ydnc6VX00SntzOHxGa19+bmBwYVJMXVZvMSxgMDplal59RXVKNDdkX2VmXW1efn4wNEBkP35wdFdMb3N6Wm9bJn1uWDQ+Xnw3WF1yTSw8WFg0VShbKnZk''@;'; put 'put ''dCkrN2x8NGokczd5YVoyfUVCP31jKSM+OWZaXVB+MF5MXl5ocUJ7RUhUY1pDLmdOQGtUfH1kOH5ucUljSCI2ZnF9UFE4NT1bcUhpKGtKRDdMPXQyc3NrQyJzaTlzOns3RX5bX0xMTl8/QF99enojaCpoV0wmc3M4XmVxfUFMYH4pRCo+VSg6b1dMI2h8O3c6dV9IOGZXaiFgZXNfe0gyPlRTPTI2''@;'; put 'put ''YHN+SzRiZDg1Rj8qdSZ+aFlFN0l7fG9mVzNDUTl2fD9BLH5OeSRhKz4pQmZ9IlBAOVd7QHR4czhjenlgMVBRNns8dGB9dF9RV2hqWiMhMnprfn5aeEBkSX1ncCM6NX1DeUcvWFJ2ZHgpaCJqfmB0ZVcoWSRhcHRzSmxUKEo0RlRXT3JsQnorQH0jZWJuVmtfZU97d3RpfDk0bH41WzFoO2BJY2Bb''@;'; put 'put ''bzFsST9UKzdGfmc/Ukw9KTpQPVs4eF5+ZEVFb3lWZ0EpVHZkIn4kcDZZUlc/eU4yOmBaPj9+KGwwJV1sbHM0KXdrVilAZHZ+bF15eWwxYWZAc2pgPkQsfWxNYGVtfnQwcVcuL0gkYUx0dH1jbi9uKC4+O0pAfVR3UTRYcX1zIX5Nc20xfExDSEIqZDJzVyxhZ048LilCb30qT2EjQlt+Onl+ejE1''@;'; put 'put ''aDwmSWMyIWQrM2hEJkBkaH1iaW1+Y3F8czJlL0ZJTG9ULyZCfmxPSkN4fmtSWDRPVEY3SjtiOD58YWR+cz0sKShwczRFYSNVMDVTOH0yejB4ZENAfEE7USgwKHQ4UjReYEVSPHNBZWFaNDVAOTI+Y102TT1AREVIfjJfW3NseUlCWXUyL1V2I0ZXTUJ1OSsyfCk/OTMxenV+fm80Pm48YmtaWlYs''@;'; put 'put ''NlB6SUJHMF99K1l7PDFTV2xTenlnMCVhX3ExXzw1PH0pNFJJTFtsR25+O2d6eSQwRWhBe11eWno3fX0jM3l3MGtoQ1c/Nml0PzlZfC5yP348JlpabCxISXJKeEc0STwxKiheWzkhbX5vSDkpfn05Um8oLD9mQDp9QilQV1VhWiNUfHBdYVp1X3x3PHh3RHgxc2pYfT1NSzRCTUpjYn5FTUcvTnZl''@;'; put 'put ''elBgbSx2IXQianZuRXlJIWBlZlNXTiJEN1E/QGRFfihmZF92XUome35tNjkrMHwidCEzRG8la2A5ZXxsRSY+KkhkO2NMKHRnayN6YU9uUjtDcWB+dzhJcXBqLClSNGBzSjxlI2k2JGdbcW0pSHljYmwwX2NNOyhxSUIqRHRbdFY3KmZeMml0bjJoNW0hUE8mInZXInNwcW1EcENJdGgpMStANmZL''@;'; put 'put ''cWQsajNWcThXNHZ7TigpUV1VPEc8R3UuW0BXSCRiYE5mR1lSfkxCNVdYWkJAbyh2eV9fRTsoYGtjdGdTbjNFYissPjhVMXF4Wi8wSUUxPCF7dUpFOCUhMEg6P3JPTU13MCFYZjVQMnxSNF18TCxJTDlxQm9uZkFLVHdIM3tAeEc3YWBOT2ZIdGdeW3NsSzIzMlEiS3MhSyw1RUg6WztseyhzSDk+''@;'; put 'put ''fGgzOE02Vy9oMChqZzVkR0h+dGJEOjohMT1oWDZ5ZDIhPlJ+MylrTzU1OldkaX50QUgiZmdUfVcka3trQFd0ckI8aDFCZUxCYyt1LmxqJUUuRUNFbCl8fFg0R3MoMSphWzwhQylqRj1zYH4zVk1YR2ZQfX1NMjhnXnJOJGxvd3t+cmd7NSwkJGZfMW0mPi93bUNCcF5iaixEdzB7L1RDRiojbS9Q''@;'; put 'put ''VlQ4T0A1bEgrZH5XO08kYzM2c0N9Vyt6VkpRKTg4LCh5NHJpSFhkU11hZVh3dVlYUVVrNDtkP0p5ImhKUV8sJjdXaHJ7Yl5XPkp5IiZ7Y3VqWmxCYDkxNH40T0FYckBOSnEme3V3M0NhLzRIbkpxQytGNEhnOVg7Xk4vaC9AL2twbmFDei4+ZipCLCF8N2B2JEcwS0xYNnI3YVpRJi5MR2Y7Z2dx''@;'; put 'put ''IjZCOk8uanxYWSwyOnlHaCpwSSY6PXlCZHh1e2pYT145fDcha150K2s/cnBMenc8MmlLbEQ2IzcpITQ5fUNMTXRoKWopWz4/PDdyRG1IaCxzN05nX2xEKk8scTxyejNTVzpdS3A0dHFebm5mcWE+aEI9LzpoMm5sOlI/bVZ+QFI/Uj8/fWJtMEs+XzsxP0FfaSN2e3NSYz1+Nl9xV0U7Sl54ZmBW''@;'; put 'put ''N3lRWWVqZytgVk5jS1l1XnJlPTE/QXZoUloxRF5DYFZ6eWY1KVlhWldVe0A7fSlRRFZIXSxvQSJYSGJ4UjRZWW5wbyw4WlR8M3VzOlJXJXp+Sy43MnlWYFBva0dYK2ZAbj9RLihCSWRqIT16bzJXUVNVbkowQDkrU3lfQEdaTD0/QEZyTGphWExvNzFCOj0maCo+ayJKJixLe1I+TGJIeykqUysv''@;'; put 'put ''TV5wKC9xZzpRTWQvdTAwVSZCO3N7K2lDfjRPVy9ATj0hQns/MHQqYzN+MnV8Imp1NmBlbEN4SGN8SktdVil7OVlXIjVoNk1dY0chT2AsL1UldHNPeGBgUWg1aFQ1TWhuWE42Z1BSUVE6dCpGciNTMChkN2hHbTEqa3A0Z29JO3BeJVJfWSZnYE9LNHt8eUpQNTx8bntRTSNPbjEkW35hT3U1WzBI''@;'; put 'put ''MVluL3NAX2l9fTAiLFsjOl5iKVVpZ1lgSy9yPD8kazh7RWJweyguSDNpW298ciUsQTBVY1JDUko/M2Ahe303YC4ubVZENTVMI21ZbkBmcyorZnwkdStCXmwxMUNESyx2OUN7OD16czJYOWcqNC58SU1Rajp9cVYvPHxvLHlgRDMvR1coO1Q5d0RLTmV0NDViWUdXb2xjUyYvUWliKEl1PH5uXVlu''@;'; put 'put ''e3JML3wyOU81YH1VcjMvT1Vwcz1rbHxvfm4xRVtWbWd5UjwxVCNYOmFFfG4xdDZiYXxWeHVvc0lqOSpbJno6UGUpdFt1ekxvc0RpZzYiQz5xQnU5aHs0ckN9bCVAenh4dU97M2hZaTV1XnJpSkk2S2dgR1hvYS9IcC9RMm5KKnosblNBOkxlRkk5b21lRW9JezAsJXFtI1ljPn1vIWYsKzp9KFpO''@;'; put 'put ''SWc7KngwTTkxXWhYYUNhZmdAOEAzZzJkNVspVDA4MDZsMUdOPUh0e0RMPH04Q0RxaiEsP2k0eFYvUX1aX2slQD1QZGRxQCIsTS4zfCs6Vj8qIypmMUdVcjh5QTFsMU5ZUnRYP2RlUSVsd2tiOn1Send9M1V5cHAleWsieGwxZEBpWCZ1Mkd6K30xJH1KOT9Ob3tMTDV2bDE0W1Bvam9HLzcob2Bf''@;'; put 'put ''UlVMW1F2RC9Ra1ptN09bfjgoa3p8XXB3W25iWTN4ZmU2fF10KXl8ZH1RLFtnN0lxfFNdUyg+Sz9YIX4jRSNtO2VgPkdNLH1FcVZSKWVRYmBsJTpOfGk7NlY8VVlucmxKKXRreUAuUXV2I2dDOWxydlNWJmMua2IpU31uMCxfJm9gTXt5bVZQKEprNndgKn13bVZkLHc9KnFmfVZBImc4YFNgLnkh''@;'; put 'put ''Tko/QDxAWHU+fDJLXl8lLDspbVgqI1c9N2w1PDoze0d2cD9AbD90PGk+YGQien1wI3YkaDx7KDh3Mzp8dDMhMTJoOHtzeHczQCQrVUhoNkc+XX0xZChZOF9yQE84JWdrYEAlLHtfYzklYnA9NVQzL1EuSm5fYkksbTFbe1d2KzM2Yns4dGxiODBhSEs+O3YzS0NGO2QwI2g1I2tleTJbU258TTZV''@;'; put 'put ''fl49b3FvcEJjI2g3Smw3LFh+bD9AdzQqcXJOX19uc3coIyRvYWdGZWE8I1RCUFZCJElJP0BZImYiYmVYKXcrUigjSCR9fWw1QGpKOWZgPzRANF1HaHc1cEg/QDkxZSNea087NiRkOm97ckxufDI5JS5JOn51Q0Z9TiUsOUxQbyozI2FEW2x8UjhYOkVbcGs7eS5RMXVLZngwL1A/blJOUihgRilY''@;'; put 'put ''TC50a0BXbDElIkJWSFpVRWtlPClVJS8+cXVTJjlNaHxJbipKcSVfXk5gezozSjFJUTolLEQjfCViZWAubncyPHFmSj51cXApfTdbPGQ1PmoySDxISWxGP3U6WCYsfjEsSHBdREFqZyt+ZFd+QitVQDBjV34oNkJbMS8re2AyP1oydzZeWl03QkhuVX5fZDNSV240flcsS3ROOWtXOW5MZFozXXNf''@;'; put 'put ''JH5SJTZyV20xVGA5a3dkcXQkIThrIyQoYXhXUmtVNG5GSDI+fFBrWDRYR0JveTx6a35CP2ovalg0N3krK0trd2Q+NUVLZTxhI0JSODh6e0guQENvITF+ZENsMDpHMX5pO116QiZobk1WQS9Adnp5cHtVcDFDVmRNfmE1anpMYU1+LipPVVlLNn4wdFU2WFA2fjEiTTBIUDVzP0JTYX1DWH5Ia20w''@;'; put 'put ''bEZzfWJLWDBkOWpXMk55VzE7e3NeVnh6KSNXNF5GbEBKIVFxUVQyWlNlSiZKYyNSIm5HN00wX2F1PSs3T0taVjE6UFFfWVFqejdHN3JYPjFMN24uLnckISM2bi5MdksyVl1aU0tCLHFWXV9SczF3I0d9ekV8LFVwb1ciUX5SZVRoX3FvP09ZM1c0a0dsQDkxS2MpVTk0M3Z0ZFpuemtULjF7On47''@;'; put 'put ''OipCR3BufSxrT2AjOG59X2Q+MTUkVX4iaWNVa1NCfkd0QCZ2M2lXKUk+SShtZytaYTg1JTRSNEN9S2JIVTdQRHtOe1E3fDN+YFVwSTdleX5gYyE6RX5melExc20vbm9ieG0xentFRjtRQ14uO2djXTJnOT08KjZBTCF9aChnQ3A8TjlUYUJddXU2L2Eoc1FkRDVEaiE/M0EsI1NIV2MyLFYmLGA3''@;'; put 'put ''SHt1KDZoIjBxY2cqMHUmP1NHOk8iNU5pdyM1VEYjO19qO3xJYShRRTdVZkg/cTJTOWk2aEJ2bm94czhIJSxxfjRPbDFTP35hNmg4dV9SYisueiJaOl1FUFBWdWo2O3ZNJSwxX1d2MWhrdWAhTEZwMXljeF8iajFoRXVgITZ9XzYlLHRfPGs+Qy5ya3hTJiNZZ1pMOEU6N30wUnNjYWNWX14pbDUq''@;'; put 'put ''PC9+YztpQ08pX35hdGJVeS86RWQpX35APz1QWjJsdHssJnt9QGJvQmRwW3ZFS2giZT1WN2RDQEJxPnEycVBxfTdnfHVuPF5VTUtVYkp9TG86a3oldllPRGA/SXAyKSoxQkVwS3leclFPWTlUMj5AYiF4ZE1HNHQ+OXFARUYmWjFuSWFXQkBGJSE2b0AsM3JibGAqSTFmPHVibnhTXWBXWkdTRCFt''@;'; put 'put ''L29bcFohITBDWFhPKENsY1tzejQ6Z1NhUCwqOHtSZkk1TDtRM0RdfnJaNH15P0tdI2RzSDRTRGc9XSN5clZvO2YsLENMPnxlOlYxN3wuWUMoP3B7dD9PX25PTCZSYGV7XT5RRFk9K3BsVmp2cWJBSTpga2kxIixFcUAvUWRkL31DZlkuWGs9Slt4OGlUa3NANDspTl5gWVhUKDFDXXZtVlBOc3Yh''@;'; put 'put ''MCJ4UmoifVh8RHZLLDk0UmxBRUByMT9HcVFdZXhqY0FwX1MuY0tXWDlUSylUVi82WzwsZERfeiV+Q0t5fXN2YyljP29TNlpXKSptPlZKfFRKS31yWk5yMlt1UGcxZER2ZGE0PiZaeFhbTjhDS14wQzVDQ3VaKGJWUSpVU2NkXywsUTUsY2NIJE4xTF1OVy44M2VTeltAWDBQXUUzeihYXXQlfEVV''@;'; put 'put ''ZjtsaVFDJkIiQEtuVksubkZlbC9taiY1JDF9KEdKYFNwaDVMb3IqaVoveEMvSFYhY2heMGNoWU5Cb1FFIWFCc3ZEUV92MkZ+WyM+dW9sezo9YXFFNk02KD98YmJ5UU9PY3tbNHs8X1hzTU1XMzNWfk0pbVFgS1NddlVBK1VbY0pAaztGNGFGJC8paTF5c1JpNEspRnd8WV1tNV53QUZLcHdMWltX''@;'; put 'put ''YT9gX2hIYCwpfSJbK1ksL1BtUnh5Si5FWm9VTSZRZDZdUGRBXihAdTc2KD46byg7RGAzNGV4WywoZVkuU1phbTghQENWJCtbcnErcnJXfGdaU3Z1fE5TW1Boc2d5WiZbayIrJig+X3dCdFRrTzAoQWo/VzR9I31vfXk8TjVgIjwkUiJhRmVOVFI/STt8YUl4O0krMlVGcGZPUFQ6MypqPnoiKD5M''@;'; put 'put ''Iiw5Z2Y3dTVFSGImI0tlfGl6O10kNTl7W1lkY2BlVyFDM3k0JE9xRnQmKEtie1pmfVs9NEZGN1orRykpbjtnJll2VHIkUk1WSGdwYy9Kfmh8RSpJNj1DInNxSlh1XXBrKV4uUzlSJXNHLiQ9eDZUb1EyPypGNnQqbWIkXzRUeWw9VkFsVSYoQjh8fTEvX3g0WTAkeD5ZdUE/dENxd3ddJH5NIV9N''@;'; put 'put ''ZGZMJD0hP1oiSUdaNlNzRVJwQmNbRVh8X0d7OT1jKUtxMjdgPmRkM096MCEvLkZBRDlKIzJCcnQjQTQvMmtmRXg8TDJoUTtgMlRqLF5YYCsxYEdHTiNRWl1IaU4zPDlORC9OT1NHYFF3OCsyaj0oSkBVdnwqIjssY1NlaUghaz1RSkJJK1hPNW9CMnswS2I7UDReeHh0Z1EiQD55NF92OUdHJG5W''@;'; put 'put ''Wm9NRSVEMkYpYToudGZEM3QrRn5eJVtidV12UXExfT5LQCJ4KU9HQkVqSUkwZ2hFSz9WNW5LTE1SaWFta0o/O19jL0tkckw/elg4I0dUQChnUmBAbkZHa08oI0lEQFYwKC58ZWN8cUN1KngrcUB6QGNgJmYvJjIrNmBeel4yJWFQW14wa1RAdEtvd0tCN0JxVl9iSX4yL312JS8mekklX2RqQ00k''@;'; put 'put ''S3RuSHFzYm9XfSw8JkxAT1o6XVhWYCZePU1mZSYmcF1gNjMzPiVPLn1iWiU8b2theH19e2NzblNpciY1V1M8emUoQlgoOlY/VH0hYXtFUEBATW9pZ1BObWA3OHZPdzFsJTJNPEUsYmFYIW8waEQoJFd5NGI4UmdnYWBsc0ZNQ1lLMFVPK04rZWxvU25CbWtvej99UkA9cT86XT1UQ3BmVFJiI3Jo''@;'; put 'put ''cUZVYGRHI3MhZS5zXmRQWyViZF99JUUmM1NoKTYqSXg5V0NbPkJ4X11lSk5MUzwwan5zTj5dYm9RQ3tZUFJzQ0BRIX0oRSM/Ym8hIVNYIn05MEA8d01EM28oYkxgJTpyamB+TFtESjY2N1orLHoocjYyZ344RGAkKWQwVnJ6fm9vd0d7XykxY0tIZn5MTSQ0IkQ9RklpUkArMiFlaWs5RnUzVz5C''@;'; put 'put ''P2s6RFhPenUvQmopMHBVQ2llb2F3UkdbQ0hsKTldRnclUzdKNGwiJDoqdWUhdl91JT52cFFsMUpEMztlSjFNNXczMzlrIV1Cej5vLmRQJm5EcTchM11jSj8+UjBHTnVBR0NxS0JoPXlVRH5CUGNfaG9qLHJFfCIkYXBgNTlkMyFyIk1oJSYxJCgkKj1tXlJ1TWJHJHd+bTxCQF9CQUZeVyE0W3gp''@;'; put 'put ''JV14a1dCYEx6VyVOPCZwfHp8Lz9YQSl0Nlg/V3l4W2owQ1JecSZDKldASEgrYFUpakFPakUzNlpzYW1wKkZGMzh3Wj5ALyNePFJ9eEpQa345VURdT2B+JUgufCxsMlJmOT55fCxqYEZQKGJCbGB7MVNUTmVTWihSTXJSPUwzIXJZMktAe2lFWm40NldUOzYpKzIoN3c+KCRWcX4wYnAwQWFxbz1Q''@;'; put 'put ''XzVUUWtMc3pWPzZ9K0hGITtxVlN5IX46UT5dNyVsZ31mUXJQJnFkWk5+VltKcGJieTM1b0MudF0obUV6Qmo0fVl8YnNEekJyX0luSjFPRSVCJCIlcVRxSlZlayUsZnVjUUpPSDVJZHN8QGIoKiYqQ2owQHUheyxuIlNPOGFVJXtUZG87KiReO21TJEJReD8zWSRVY1FGT0U1JjM3fS98ZklxclUj''@;'; put 'put ''QTFpLHhAU28wcVtkNFY3KHRKVyZMPmhUZDglVlRyNzwrSVtuXVRnPmJ5ckpeUjYrN0MrY1lzbjRdcWVtOWd1O3NwZXx1cDYmdWJrVygzdkN1M3s7cHs9ZzxOZ0V1b0hXeEdSRXkqJF43YkRzO0AhXlhoYSR5KF8qIUlEWERuXTZKOVJIZTtsezM3W2tQd3cqVE1SY09LXUVBPTQ/Lm58Z0VMXjZI''@;'; put 'put ''aTp2PylXcGVxUyZyLiF+NVQ+XX5WMjMhb0hpPjtjcGZ8RSheQls6ZDZoJXVATT9Wcj9KcS5VayRRJkM7RCQicF1uXyRUTkYzYUhDMTd7KFs+SH1NRmdQTntXWk5UXUApcXVNaUl4RmhCakJvdGd0XlgsQ2ciPihpVlBERnUiKEU/eG59Myp0XShNcGV5SjFZR3YoTT8wbnJkVnVQKTt9P1g8KCR+''@;'; put 'put ''e3h4ZEl0eyglc3FkZ0hkRDl1UCk8KEpRXlFGQmQsWjtsZ2F0JFBYLFVFWnR5ZCx6V0U+Im9HRlpHbShue0MqRVp0cEl4dHFuYUNbaD9EfmhVQzcoVUVrQWBFWnQjP2gqKiphMUMicmRYZnBAWGZyeHNJUDFidXovaHllVVlHJEE4ZmA+MEVKWE4mRnZQQ2o0UmRab0VQNkY6V3BFNHd7NSwsalhA''@;'; put 'put ''Ii5qJkJ+fEFRT1ZVPzZDQEk9VGo3KSl7UmJkRnAoVF5KQSJYRTBJPEBXOTNWIT17MDwhe3VKRTwhP0RpY0FQaTQjRDBiOUIsWjFCSHB8WGxCYXE2Q18+MEVidClIcHRJTy9kKUk4fG5bWyZ9TW5Se187fUIrTCxKTDswRFUrfXl5SlkwIVFVeklycEBnN0hRL1Z1OGwyUlRQMTNzTHN2NkNYdEZo''@;'; put 'put ''O1JRZ30oRUhadEolQTY4SShUZllHOSxaTVhjU1RIbUJXK1o7Mk4sYXhkOTF8Qmh+UEElfiRbJTl7bitHemJDMkcvd10seEleeUlTQ1l2U1BpdTxoYEJuJEx0UGo6JHs2JSR6aksrKGpYIkBAVyIpMHpXQUFeUSVBNkY8NywmTko5ajZFSHRLQlRhZXRORnlhVkNMdHJBPG1uInZEIyhWQTZXcUFd''@;'; put 'put ''dGMiXUFpWEhgU3QlQUROZ0FDZDBXPnljSmdALk1AfmVGN1AxUmcrZUxjdDxBLCsjeUpgfEViRW1Ce0VfSixOP3Z8RV9Ka3UpKWs0MEV7RXN0clBgSi9PVikiKnJDPVIjbmo/SmQuYml0bykmQihuaj9fVWF4STBudX14cEROZFE2c2wiPSx4QTVkZE9FMix0IS5bKU41Z2xiZjVPOkl+Wmk/cVlp''@;'; put 'put ''fF1aaDcmPV5+Yzw9fGxGflJ1P3JLKjFPWXxvOyN+JC9OeyV9MGxLNG13MkxyfGB1M34jKGVfYWx4Oix+eTRdc0dmYlooe3NCP35meG4oYVJtYkYqfUZ0flRSIXNTWV47T0dTWHcuJkgpX010bShLdHhGSmIxcjt2a2gzX1FCJH0iRlBXbUZkK3h8MDlmcypoMmhVRlpTZl46I2d+M0hjX1BGWlMm''@;'; put 'put ''XT93aHwwdGQoP29RNDIkc0psP0V4b3x7cFE0VkU/OTA8Kk8ifDA/LnMiJHxsMDwuRj1gaHUhfVY4R2MjKTEhfXxUTXAoO0FtYnx8NzhxcyJ2Unw3YGl2NEA4Um1qbik/Ymt4S157NlM/Nzd4WCxzMFNAOUM9NVNiODN1YDNqQztNVyJsRyVybEdtPFNEViRTRCQjU0RBI1NEWmspMWM5eml1eStb''@;'; put 'put ''ODVCWjZgTDxBIj9pRyswWyN9SXQ7VWwxQHtYNFhkLlFPfV0+L3ZkVXd+WmVUMkhJWz9PanFxMWg0VyhoVFNbX0lCU0ZUKyghelAuLHw6QFFebHA9WlMzfHs1SS82Pl9COHpxb3pTaXhoLEN9SSY6cGFCQShFUkNpIW1jfikpKlVjdm9mOkwhPC9PRXNILk0zR0pQXXs2KClgWX09PVMvOSwwYXNU''@;'; put 'put ''aktDPzhkcyNeM1R+fVtKJWY3fSkhWm5jaSEmcTs5fkFpQndObytXMWkiQDhOIjpzVHJ5LGB4YHRxQkJbMlZaOnYkXy9XL0g9VHJ5M0ZpX1laSyQpLy8vaVgjfGRMW1VvOl12aG5ANFp8WDFOPnsqPXNrfl1FMDJOJkJAfUZkfEpmKEt8KjcmSF0uSmpzM1JnNEg3WV81KD5tR2o8fS8pMz5lTVtR''@;'; put 'put ''WnQ1fWh2R0RHXjI6WT8jPEImX111fV1xaV9yP0wpRUJafDpgVEwyRVlGOmJpaVYvP3MvRi4mJWsmWCgzKnUrJVBXTyheSDpwZHE4c2YkbnU2JE5PLlR3KVd8VlkiJjp0NHtaPzV9TjpubURfIXcmPThMPnM5IV1FTUdVIm9qbH5pNkxxWWdhTXROTWB2dzpyRXhhPSp6MHx4WTJpRlY+PVk9WTko''@;'; put 'put ''KTRyeSIzYF0lSExgemg8fFJ9X2JXc3B6WXQoaHw0VDsocEk/fCUicX1yNTFER14vaCs/YlM+PkFoNGY/RVN6KFVWW0ZpJnFeOS53K0NfdzZ2bmtnKXtSND4wUHpycmNhXn1Jbyg/aW5gdFFHS0VDVjFJVjh7Q1I4ZExDVjEkdCxgJG5Aa1lFb1FYNClfLkpkS2N0bWBIRVcqTHF6PClbdVE8c1tL''@;'; put 'put ''XkV4SCIoZEJUTD9MWUY7X2EpZEJ+fjc7U25VXSt4MigjZzU1PDwqZXJ2XiUlR09XcSM0JG9AS0M9YTR9NSFibnIrOlRoUmxfeW58JkBMMXsjMVR8bVprc3gzTVY1XlR0eH5FPkx8Vm1LQ1UvOiZtWmwpSkkmOkBORipGQWc6I0lVW1d8W2hkdzBGS2F2UTJfdXVXTmQoXiRNfFNeem1kd3EoNngr''@;'; put 'put ''UXB+UmZAbylWRSJic3lffSNBKV1LQ3RndG5gdCRMRCFyRUF5M0srajgyIXh5dihQUXVQLDdCcWplXm1oVm8oTmlwQ3htW2gmcWdXez42djRWOlQjM31zdFBsPkBdaUs9YitvZUpXc11mdCRbIWpfXn1lTjtBamdefkRIN1RBR3xFV155Mz9eP2tFa1kxIn5wfFM2XiVhR3RJXkxeR2dxO2ZtK3As''@;'; put 'put ''REVLRT90aWBnbjopQnFiIig9fFpyKGNsXUVeQmQiPE4+flUwS3FUZlZFIWIjfkBqMHJnJS8lfSZ1RGs/QHghQyJUJWw8Mmt6N3JMRWBtcmsoYHdGMT5dS3BJbVNAfHJJbT4jR15KVTJ7fTRpdT46ajFUSXt4WyFNOHJUfV9tL0tHXUg0PHJ9Wj8oOHNTNiR0c3NmRTh1eHtpYVg0Iyh6PCMsPHtp''@;'; put 'put ''YWslRnhkOzoyRSZeJT1VZihyczhtKWdLQyV5MD5ZTVM/aTpdPkQwTiVrLjNCOkoqVFY9JUVCfTxYPCZET3xRWFR+W355JXxDMEh2RCQhWi9DWX4iMFk8YVR+WyFMPkZNcXxnbHBQJF5zcyVwQzZyL2h6XlVMYHxtP2ZEN1loPkZPK31rPkEjUiRQNGZEVFtfbHU5flUxd2JzLl9xSjM7U3FOSCUi''@;'; put 'put ''WkB1aVA5RWdJVGJPaG5ZTDtWNCREVVY9JnhAfElqOyYoNiJRXVN0W31GIXxxTUpEbmc2cjNGSSsyVEgrdjk6VnVEcWp8JlRrfGc4K1VfWEV3XyMoTXxASGdxJWR4MWNfdll9PWs3WF81Q0Q/aXRWXy5aaj94dzFfNiFsYl5tez1QdnlbKkVBNXQ+XURVUlYqTn51UE9xK3BoVCR1RE9+SjNqeWF7''@;'; put 'put ''RlAhOlhaeWImXiV3Um8+P0tXRWxMfnJGYSh1Q1R7Qlg0IywlczhDMT5WIz9td0Y6fWR1MT45RztoSEx6fH5DNXI7Lil1ZnMjWlRqWD1zSVlDSEklc0U+dkM9Wz5ZQH1saXM+aix5RjVKcWB+QyNyYDJ9TkM9eDFsdU59Ky48UGFUXUBSaTF0RF9YeHIlR01WV1lWOko6R3RCWGNyfldSV19zPD9O''@;'; put 'put ''Ilc8fCtUcD4hbnI9RzBMNFs9QElSPn09MDRzOX1NJD41IlVCL0R3X31NekYhT2YkV2tpaXtaNj50X2FzNTlOUVh3aG5BenYkMGZzKWJpfXNSdzE1PiY6VkQ/bk9ZX0hMZ3Ejai4kbVRjcz9aJTY/bXxnMExYbip0TENuX2VfcURfSl9Hd21RRDl8KWUrO2QoZUBZRmV8WnxJNTR9JU1rQkNbbGlG''@;'; put 'put ''YCF9JU1YNHNfYz03Py5zIytmUSN9LllJYHczej5AeUJxPDtgXiR9aF80NVZ1aU4zKDdMJHN6fHdLJTNZRE0qOH41cVZfQFhtPS5fUDRLXiM1fCZJWHElO3tuXX5tNEFOJnZjJSJrYH44M3UmXnNgYEc4bTR6aXNXLF9td2xJeyxRXiZ5QjMoTThiOj4oSXMxYTZ1VFFeYVg0aH4rSSVeN0dJezIs''@;'; put 'put ''dzh7bGZtM2B7RiovInAifEZWVlNHdXEzPHNQNywuP1dZeEkmb1ovMnFEdUQuP2ZVTU8kX19HVzQ2L0ImUDpvJFhvcENZeH1RXUt4S2h8aSlXb0hnQ11NYUU+T0ZtcENbXnNMMHBDemM0KFtzMUY3ejZ2cCthaVF+YH5bcGw+KX04MmIrZlFzUFlfSn41XjVmayhTSGxib25LQzZmUFd+KjB9Xllz''@;'; put 'put ''dlE7Z19dVytAODokeyNLLC8oZW9JU3xwLno8MEVDaTFrVEwkSTFlZCopKXkoYH4vJCxqZzNje2JHLy9WSUg4YnN5YDdtY3Q2KnddbjQlck4rLnVyLnddRDBlfCk+a15ibXhzTUdrSDI7P218Z3tGV24yIkxDNih4c3RwNCQyKXN2c2pLZ2F7KXNtXmF+SX47aEhoLFZzIV4lT2BvVl99MURXIkFU''@;'; put 'put ''P35Mb3M+bXI6VFlNdFdKTkkxL0lGJmx+PEZtUjlecyFeJXc/KXM4fl1FWFRFKSMiaVdUSDhtNlJ7RWwrQX50enY+UyZTX2tVSC9aRWo/I1VSO2k5WFY1VGJ0YkNzQW58STdhblF2OUlgekw8YUklNDx1WnAoQilCKi9EN3p8fi8rLn1ZaUdafCFPO0xMNnZ2Y1lLOE54Ujl1ZWk8S0NtXl9YT3RG''@;'; put 'put ''Un0rYkxMaT5TV1UhKWtDOi9HIUVUQTB3V21SQFNic3BZZlZ0P2B3KHA5Sjx5JEl3SSV6JXFieiY8JkA8Q2V0WXh+QVk6WTlpPzM2YG4+LiooMH1NKEpXWSh6X0xDZTZkVyx2fk1PJD0vMEdkPUx5e28iMlNuODYvPHNZYG1EQ1loX2BLcWNZLDViWFVffnFSWnBTKlpraCw/S0lbfVNNW2NjWShH''@;'; put 'put ''YV9RYm1sdG5ZYEZZdXVedmZUfmRGfTlMfkxYWGdgS3EqQmk0cj9rdV5bbS4hcih2aHErK2x7aXleWyJGZXx4M2clfFUqUkomb103YktwbnUwIkx8Pko1dEs3XytpP19FOyg+SkRzQHhBJSFKSndOfCs4bjJhJXVfVWx6TiIvRUVwPjdzY35reVlWWk49JjlZRio7LEQoP0BgJiMsJmo+e3pPK1pp''@;'; put 'put ''bE4he3VxQlRuWj9TUXcpbT5YNSRmdCpfJiNAYjlmLEwoTjZbNyl3LHI3d3haVjAqfEpIcHRJTyZfPk41P3JiXX0pR1Fpak40LG99IyJwSXdBKzRoVFpfb09PTUJNK0h3SywoS0NWcnM+M30lPkUleH0jRmdBNkY1fDR5eXxJTGJ6IlgjP0VWRmowcENhRyh2TVBvQlpId0x8PHsyJDxSQ2BmIjpD''@;'; put 'put ''UUFUZTQkSjwpRUx3MGAxU091NmtTQzlyY0ZocUMmMi5bXSRlN1Vscm4sUyNOayhAMFhPKFZyJTBlX2guO203L1tuK1I0fW1vL0AyVS9OPmdJMUBPK2RUL3dLWVJlTVg5L2BsSV5feVFdU1ZuQWkpSCk0Y1IxZWtIJjRMVnJ8fSNHOSZ4SSQuX3JHXVchTVhwVm57V3dETHRgXzJGKF9eSyJ9d0Nf''@;'; put 'put ''Pl9FOl80I1c2am0zPnk0T0pIWF5gUFtxamdNZWZdLCwua0VeeV9YQUBsaUBEeklOKjpKXlFGQj5vIj1CJlI7bFFnc0AxJVJ7fnt6SXNWXW06bkcyO3sweCNNQGpJWj9TUVRydj48ITIwYCRuYDxEaGNrSHs2dD4mV0VIe1d3PnBMZkdQPzE+OkYiRjY0MD5fPl9FMDQ0cCJhW1J5YC9NdyswN35A''@;'; put 'put ''JjNoWypDcF5LRSVGaV8xNWRXMkdFKWxCIX5nQDsyYHZzdjtDZn5+NEtxLGsxVD5XRWMwODU+P2d8Z093YnN3InpLaChHTGkpYUZJeV9VQTZiUiFTTllUa0tDOnBnWzN9XUAhSHFBKyRyfnxRPiZ8dTRubHBBIiFbXlUhPW9wVzRsUz8sQiZbVyU9JG5UblYlS0FVL2AmXkByQ1BXJkZrIV1BTylJ''@;'; put 'put ''JlElWT1PYnBDLytgRT55NnZnfEk0U0NGe0EsTztWXktFZXhSfE0sMl5JQSpUYWk9eylkaj9Yd0tJMyZqOmdWSSZzOVtvbCQ4aEQ8L0p2bj0oVD0wRkxIWUZfSlA/M15QcXhEbD40WitASnxERSpUeTEqZU05V2dKSDN9Kj85YUZobG5sYytDPz9WRzdZPCRTT0hWZjJzNVtZXmdKSCMkMGNPaW42''@;'; put 'put ''TnEuZDxdYyFwczxXVG5WJTVCViovfCJYXyYxS2Rpb3cyYHluMT46akNuTmxMNFt0JH13OjVecU1uKExvYXM1dEg+c19+QyZyPHBzdlZHVExrSSFaUSlgKykmdX10IWJzayhBQmlPOX5NXmY0YHJiUVBuX3NifXRAXyZfPU0jIVRdczI/MmFRRmMjakpxdjkjfm02TCY+NVlaeVFHRSl6dTxzaV1P''@;'; put 'put ''UWdne0VWR2Z+KjBMfFZ4Zj56dUk0NG83dz1ZX1tdRVp8cUNufj1ULHYodVAkJkc9PjNUYHJWPXw6OH1OQFZuJXFeUS9kTX1LN24+d1FeSihCSH51emdnKkhmeWw+bGZ9PTNjaV90eVs2RENDaTRjM0ZpdWI4JVlpaTRjUXEjWitiZ158Kl82I2dqTDRwTX0sQ1ZCWEU9Qi5DbzpZTm9RI25qSGB+''@;'; put 'put ''RnRsYllyRVYjRHhbVWFpfUkmKF00Qzk+dklfPmhBTHxEJGV8TUgwLDM9QiZFbyZnU11uKC5CXUV6SmMiKjYjc004RlZrWWdHXzIrfXV6cD5FMWhqdWJqc1lpMl8oY049QXxlZFJxTzoxbV5ERD9lYlVMQig1Q1piaj9lYlVMTj1nMTwuWzNvXSFMIzpdM2ZEOnBFWzN9T3t1OXZ0ZX5zV3UyRlY0''@;'; put 'put ''UltKUnx5MyoqZi5NJG0odSh6V3oqV3l9QzA0NnY6dnVqPCQ8LmU8NH1oVUBbIlU5N2JzW2A+TkdCWXFiRC5DR19saXxOJF8jODAsbHdhfXUkZEtCX3Z6VnU1WV85Il1VTEQ5NnZaZWVxXWFCVHV8O21RbG1gKyp4SzxSc0lFPlFpR3ZOT1lYSn5xKkFgeDVyUVlIJj5KSXZRSU1DaXoxUkxbKnwu''@;'; put 'put ''JTQpKUpSXX5+QEZWNEkyVCxheVtxWUV7dD40bkhgcm1CWCRANFU2N1pZZ3RNTWpHK3QuaVhlSTJJNyVVb3ZYfFouMnszRFtkRWg/e3lRRTF8bGBNQCYvU3x4JDpgNjJyQmBvaDN8bTBqS3BiKy59LlJ0WFg2STUkNn5sZDZ8bXVWZWtAMzhEaGdUfVJrMXpbaVMyezRrZmVsRCl9JTVfMFoqOGh6''@;'; put 'put ''YlVwTzBhfFQ2PyY9JDMkb2cyRjtZJTY7NCt4SDBKL3Bod0tOdj86VXZ1X3tEQHJFUiR7ekp5fmBfVG56Mld1YGk0fTpsUDNMIV9jOkglY3NWcTZ7MmFgcClyISZZeXM+NkRUKiorVDMrcFpbZ2NpWT1ZX2grZ0chUyk6LyZhfEpJUG9ZZHRbJjp8I14zYG9zTjgzWUZCNW9dcCVifEBCOEZPW1cj''@;'; put 'put ''OEJ1MXBBSG9ZY3FTYGg8OExEeVNQUUEqRS5CQDR9IjRhbmFEbmRtXjp0aGF+W3VYRjczVSNdOX4xZzYkZF5ac2g4cGlHQEFCK3soc2pOSTRMYToyYjtsZFVwWHU2Zjk/Z2guPG9KXX05WUEoJj9aNHx0RTMyeT4zfHZCJCYkMzhAamhxInksNFRiLmJjUWJeSDwmdEZZTWpuWXlPSlQxfTl7djlj''@;'; put 'put ''OGtoUHxMV2tZdnlFM1U0Rl9BbkZWeXQveVdXNn41IlIobVVGSEY6TnZ6dWFYUnhNOWhAYCZOPCttPmtGbCs3bHghckh3bDJPYGgwRFUvQl5OYFhMUHdfQWZhc2FSVnBOb2VAL3loXzMiW28oIVlfMnpXc0JHbzQ2eVEmcyhQSmtfaVI/KTcxMEEoaDdWdlFuXz0ocDtiK3dXPXtfYVYwN0t7fW42''@;'; put 'put ''ZG5ONldsXTtub0lSZklbKmJLJjpSMU93UU1FeEglc2k9I31qZkQ7eH58cyxxNjNEPXI0L2s+dW43PmFpJi54UWlyaX00TDlSJkQ9SihaRXVLISFuX2FQUTZ4eDoyR1l9TjZEKlAsKCIuSUAociElVHshbz4lXSV1JjBhPStMOH1UaEc/ZC5hTz5RLHVERTZjKlB5d1B+JmlLUlU6YW4vSVVRVEAy''@;'; put 'put ''a2EjY19Lak13RHlxLG9XMURtLns5VHQ3SWtXZ3hPKHpGJXRfOi9SIz4oTW1hOHVnQ3VEMyw7KVhHZ3EwVi9DXigyXjEvOHdkNW0oKHJtLkVuYmdRMEA5K3NJL3pzeFs6YDdUUj46fEtxOV5hfmYsV24+VzJLM2ZfdGZnXV9HKlk8Xyk9SUpMPUhsPjR+SDEyaFlwbD5iYkVWe35NY31OVihmKyZQ''@;'; put 'put ''ZyQvSkVJeUFiLk9MNGJZVj0jcFdlI0ZWaHc7YSo9UyMyaVd1I0dPV2JATHFCMTFURUhgfmEyYjghZTw9Y3c8OWNiQ25mMFs3Rk5xXzRsZmdgJi88TEw/c2tZZT09LzVeV2M1fTdfbT4zZCM6IiYiK1c3TChTfDQ5bWpBdD4qPH58eXE+LzNUayh9YU0uSDZjP2Audk8pJUN3bmFDVHV7fStZNCR9''@;'; put 'put ''TVNfKDFRcV9ecHtQdFJROXQmLGUoUkMhe3B2V3xhO2NfbmlpPiRpMj5gfDoyISFFSCZTfltxdl18PVRzUV8zUl99MVtyV0RJTiZOI3xdMFF2Jl4jRDwvIj5dcnxCeVdLQGhXej5kV2tySlMsb1sxSDQ0e0JuMWh1UHpyb3V6Ym1HeHt9QkgofVZIYHloVUxSe1F4R11yeXNsPX4mZW0uUDReVW9+''@;'; put 'put ''ZnVtLnJ1SXEwUEVjcVU4fktZYz1ySUovLnttditrJlhAfXN4WyZRbE46SSIpfUI6LC5DKVJqOE5vfmVxWF87V2ZUPXpZd2hubTJ8LnMzPiRPUCJfVm1eJmtqQygySiRoZ1J3S0ozeSlxUDFGPHp8Lj9MI3YyRzhoQ3J3S2pmUkRoSnFgdkVdJjlDais7YmAsUjQzTnBDL0N+XTJmTHZzMStyfX4s''@;'; put 'put ''NExmSV9ReCIkMzJRIjhzYz46MkBodnRsQCU+bD48X1J5WG4pXnZLM2UjQVp8Z1hjZGJYeFhKTDBTKEdkZ35WP05PITF8NiNwPlRZd1Y5NzpzWlNXK1MjXXloP1o8LzlmUyU2RilEPmU3bkleWz9rP2ptcnE2RWg4ND0xVUJhRThfYU98bGgpJGA7YnVAR3giPzc2LzxeRFB9WUx8JjMkP3BEXig+''@;'; put 'put ''emBdcmBsfD82fjIsXSYxKz8kNGNjKE1KMVtHPy88SS9kfH1Cbz5HajxUODJfO3U8SFF9bm9GXj8jUUZ9JDYkZmJiJXlVKGNTXkVfd1c8QEk1XyEsPiZBJUt8Z2dKYzcvI296TEJqUC5yOCR8VHhaIkxDP347KG8+MDhTX3xraihZSkU+fj0lVkdPPlEyP3c+fDxdIT5OZnNrX1dfWF9kPTxfYjg6''@;'; put 'put ''JlgrQFZCLDRUXk9sQilzTD8oPDhyYnNKfCl1WWxoKFJTWDp2ZD59LlVXbmZHXVclaVVuQHxYTTomQTt7ZG53PF90YXc+dT0hJjIoZHMxSDVUYzcka3NVKj5+KVNuVFhYVFFNfDRDZHEuajhyZXYwVl9oX0t8LH14NHE+TW9YcjwvI35uKktxbyZSYFslL1FKMWFzP29IVl1yJixSN3U2PnpRd016''@;'; put 'put ''cD03fldESSYlIShbPzluczhFY35MX3AmM1gyaEF4JTZ0TSM6NnFvfkM/Y19GPkJ8LG94PXNbeWE0b088JnMjJTB9MiFLfHdzWmNVX1YuYSomdUxeIkgrcnZ9XiVTclojeD1zWzcqPyx8Zjc+ZmtUYE18RX4lSmhzTXozVEFpKUhSJTZUY1Y4WTBJTT8mZjQ+OnB3OUcoWX4qJkUxOXJgcSV0P3Zo''@;'; put 'put ''UXMoZEpISXthLzJvR1FxXit6TTMrVHpBWW1+cStYbjBeUl9ZaXpbbTAmWHJIel9NYzV9S0JWX1RfUl97c2Y+LFYvTjVKfko4fiRrWV98RldYPWA5N15rYn1WO2M3VCxbfUpDSnNzLzl9P0x8WnFXRCxxLFZPfnI3fWZyayVPVzRHRj4wVGtoTFl5cmRkZCsiQEJ1Ois5UEYpeHN4X058Qm4+SzYm''@;'; put 'put ''Pmp9YDJWeXJdcnxfMH5WX2F+LCZQNGM7RT5oeVBsME58KCohaXNqa2A/ZUEvfXFdREtMW2gqPWJ5eDssZ2Y3KS9teDB9VClVMCFJYjs/MVg3WSpAYkZ4eyIiaFpEdCw1fUMzcWIpc1IsaVYzN2hYW350c2NbUTdabWJxVXZ0ajtnX1t5cmY5UCs0THFRXnw+T3dZd0diUmopTUN5K1s0JE53MG9D''@;'; put 'put ''OkVCWGtWSX1xfFNfMjhtP1YsajFqUnxhLHIlRX1pMD4vRlh3em4oNzJATlQ2NyFVJChzVmZPS2dBI1t8TUskZXJAJFkoXU1NcT55ZHgrK3hRLyZxYCVFazN7K2ZNRE95XiFvNnpMdXBEI3hFTFBQKylHR3pRR2k6NThueyUsJHtSRj5QenB6SmI/YGZtRT9dKm9DbHU6eSV4RmYjbihxcHV0Qy4h''@;'; put 'put ''XVd3MCl8TEZCRShOU28yZVdBOGUlNXwwRngzcUhCbU5+eiVzKk40Tk5ScVheaHN2ZjQ1VFZ6MVR1Mnw0MVp7VFtJUkp6UTJXYil5NCZOMl9hbjdJX0hyTzVCemZqKzZIQV5HKyxTe3NedSplIVsydUhqL342MDleIilAVj9aNn04YVVfRmA8JksybV9RRmRzdSx1Yj46YH04Rnk+Xlhha0g3cFF5''@;'; put 'put ''M3ood0ZLfH52SX5YTVluZT86Oz5hPC5TbiJyaWIoQjgzZz9ET0pPTlduP2FGSWxvNmo4OUpKPy9LUGAhTytFV3xaTW81NHcpaWRzKTtheTF7JEB2SVFEWWNTPUNOMHIsczIkcGNLL1hNY0E1RnJafFIwenJoMT9fbHZkaHNsai5zI2R8KU8wUSloY1d4PnJULkVSZU1aTnx+fjZiIXNQQEw7Qk9R''@;'; put 'put ''TnV9TERNb0Arel98V2c/VENveTFhI3AvITc0RU86LGJ8c0FrPSpMKC5VT3BaalBjMCFaWVt4Y1NiNWFfXW4hRzJAW19aSyosS3lkNm92X302QGBKOHdzSTZfRElQNVs3SS40fVdNMEtVXmtiWmFyNyxPNXQ6IkJxUl9oVVB9bE17SldBJiRDRyJPP2BoPCRfb0xxNVIvYndYeF9yTywpTVYwVjt7''@;'; put 'put ''fitEZikiZVlZIjI4fmdRdi99WDU/Kkdqcz4sT3RleHN2XjtsfFVGdkx2R2xjRX5JQmNfU3EsP0BTM3k3NGdiKyVRcG9jNFJLQDZ3VFh7YSQ0PThLejZKPnwpRVtfL1lhKXNPdnMpLyR7ZyI0fXhYdj5rbndEMm87OV51TFE7Sl5JMis8VWx+S2ovdl9KTHFoOyRfTmA3dDNvLGlvemJ8SzBgbkVA''@;'; put 'put ''RFk+OXhEUlY3VFdFakhVaVMrRFUqTklBKSRTUGlCSUI3cypCdU0zdyx9JjVlXy95b2JKcCI2aGEjWzh0PG94NX0sYGUsW3xzYjczVUNKOHNXbUVoY2Z8WDZxI359Y2ZnXUx7b1VJZH4iVzZUa09uZFJpMChrUjFNPEJlUEFea3B0UnVWVjdlZXpENldmcHxqL3BeaXp3N1QmdDRpKFBPPU5aIyZS''@;'; put 'put ''fkt5dy82T0twdkw4LDpWRV11Y0khczBJd0dLVEMxPFRmR0pPR1ZfaXlFKXw+Uz0rTC4hXkRgQiYkRyZhcH1lQFZmPyt6O2o+eGdERiV9NEBwI0VJW2Q1JG5SJFNVSG45SVE5XU0reTJxQHtPcm8+SlMmVFsrcndNcH5gYEl3ZCVzdjUvfmxqRT5AP1VSJll6c15GWV94SCY3VCQxXzFDPUtSK34m''@;'; put 'put ''aU42LGAuUXxvYU13JSpHaSQqRWpGWWhGdkxiVjc/PXVNI3kuI2xYUS9XXkt1aUVBT01GaHBqRl4ibSttUnhsTzZabWQuUzRNI05xRm0lb3Rubj51LEZHQmhdUUBbdDwhPjhrUlduOS8rSHc0Pz4rTGU0Z3NUTXE+RSF8clkrMFUyRjlDWUZYbkZCZSo4fn5rdlBbdypFO3EmPUZtQT8lPiwmNnBO''@;'; put 'put ''NCMqKylzZ3N3JWdMZlUyUnZ8Jk1meFNEVGd6VmVIc1lGNm5qa2p+dzpOLilKM3l3UzI8LH1BQkhWWk9lUldIVytjSiF9ZTQrVW46PkZ9XT87WjY3ckxqRktgfmdWTlcoZ3tkNzEmfmAoV19PVUM3T15sfkF2Mj4sdC5idy9OUC8mfl88RHFIbTxFe25FSShAPzFMRT1xfiovJVkiaFF0X1ZzOitL''@;'; put 'put ''Y01TUTZpcylkW0tPMEZMeCx4JHwkZ29MTzBoc3hHbF5qT1V8PUBJUyZAbDtyTS47MEVnMn18Ij9yc11LMTxCcGFpSz8xLitJai5nRzh8S00iVFlHYUBgT310fjkxPm42T0p2PUtMa1pkWiJDe2tSY0Z1cT5WRz15cXkmfSNNQihaWTMxZ3djKSgwN15LanUrfDJPKT5+eisxfSZLbWRMVUp0SmlL''@;'; put 'put ''XXBXYnRKPCVGIn1JNXM+b2B5MlFdO09iK3hUW0tkKkBWOlltSW1INW8vSSt0fSxxSnlSeW9UQ1tTe1Rrdl5tUm05dD8kSHpydztWeFh5eEolQXhSIVEoV1VuW35oLExHP18sb0NXPWh0Xy99RTAiNFEqTVksa140JEIuQWt0TCE1Rk5QTjAoMS9CQ0xPfCgvX11RLnoySEkyWVBvLkFVY3dVaUpF''@;'; put 'put ''YTAvJHsmWVh8WGhKbj46L3NWPVh7JlV2cSteLEF0OUsxZVI1bEgjQC4+Iis7ckgpdzNpOWNVbXhTKV04YGJ4XUZVNUxLTzVkXzgxQXpdVHlMVFBbcWJjQDk1dHQzZ3V4bCU6ejRaNWhaSz5wVGB9Q1AmUWBAXlFDLFtsMFNYR0t5X2YrcnEvd0goay5MRTZYZkwqWnhnfD5SXXViYl5FfTgqKzB5''@;'; put 'put ''RzprNiQzc1B6T1pRe2d4dCt0RU9kdWF1SlhCNT9xNiVnLyo3QDU9TXwqKGQpai9Jelc7THMjRUUzIXg9fUU3VzM9R3cyNExuSEtgeSxxPiFkfVU6NVZAOHgrfCkyXXE0TWFFLzl3L2tbazBbN34lVHxgZXU+di8/VjRNKCttYj5AakkoKGJ2IzVZKEB5NSQ4Lkc2Im9UKHpzPz9uPiJfWlRsKFBA''@;'; put 'put ''XVlGVERwVz0hRS5bdyh1YzFEfnUwaXdmOHU1LGtDa3xxS08/bU8qX2FaV281NWdfI1E6YCNLcl9LVnhbb3NdQikufSYmKlp8fUBFJHIoRGFJYGFHXzFDUTosWlY2fEw1OigycU58akFPLyRabyxLUGtYN3o8fnVsL3M+PzN5dXZ8TDp0TSM4XTZuNiRZMGtFVT9zMXlYMT9lbk4qUD5oeG5zLm5Y''@;'; put 'put ''Xyl0SFVYQGdnKGhNM35pYD9PaX1HQH08P28+XlI3VX0xNl8rekdzKnlycU03a1BhIzZdRTFTd2AwK3U5aFAsRlYwS3wkIlo/QHFpS3MjYmNLN2x1eW1MSHpyNU4vSE1iLEFTL2pwYT80Y3NUaXNvMEB9Jjg3SFJhZHJsO0oxXnB7ckk8RVkoT1k3dlpyd31bUS90O08lS2JSMGh0WzFXcExLdC9K''@;'; put 'put ''LypoRltkTDNWZWZaM31eYj5NYHl6W0RmTTwmRiE4bUc4X0dWJjV6dltIc3xgQ3tyW3l0WDM6SzUlYXQ/M3NnNix9RFByc3lPYSoxPk4pMEU1TCJ8b2pgJiM2Pj5vLnN8Si95UVRrO0x3aVciX34lMSJ4R1tdaSY1bmwve1oxcDdOSHZIcnhIOitdb1FQVCpbJnpFWSJjZFsieH1tKWIkezkofnhr''@;'; put 'put ''LlZ0aXwwcV8oKm1pdnppXWR9dTRRKFsmRjh8MDBpIlh1REVQSil0JFJWKClra2osZXxbeCFKeDtbe0IvdiF4Yjg6Ri43WDI5c0FdfkZlVFdIb3ovUkx9OVlnQG52c20wbF9QUWBXQ3R1UjFDYCooOUI2JCRkVi5bJkEuNGxoX3A8Vm5pO2h8Ny5+Jk9aZkVsa1FoaG43QDF5ZSslS2YibXNzcVdu''@;'; put 'put ''OGM+Nm9dKkJzcF8pOT5fQHJ5JFJdfil4YXNFVWI3eCpYfHJAZW43ZSRfWjFfPkExLnxbdntERSRdfUdJNFQvUlBuWmlHfnNvbz5PISpfcG47PURVYzJiSSZjcFQmeF5bQVRrenRjaWU4VXQ7YHc1ZHw/Kn11U2ZKXnRPdm9fLiNfP2JLQXxpclEmXXtYPz0+R1l5NmwvfCEyNSIucyU8elIvYXd2''@;'; put 'put ''L30mdClXPEkrWX51IXZMc0xwTn0iXVFxcy9DcytUKU5VU0VieVA7bj43cy5uLjAhPlIqNmE5QjVVXilrX0J1Lm8+V34rSjRPaF93Nj5XVmhaUUh2VDQqfV9tUGpOYHVEfjN5bTNfb3Z7JSQyZExvNDFBRCtXXTFlc0wzeGpqKX1Db01gViZlIXlhWUIob0QlezNkQX55KWFuXXg8Y30xUnwuKkZf''@;'; put 'put ''fXtWWXFpeWlIRGBzJFphK0Vac2lNYWtjanFXI35hLGlmeiR8YjV4IXJZdG5UV25xfjRJKCQ1YEA/KGooRFV7QUJac0lRUHBfTHV2UUxUc1hFfVNMTjFEaENmSjlSbThzYiFmPXs+dHhjZjN6YGVbP2sxKzAyYWRKaFd7JnNvd0t8akxOdStnQDswPnwiTSx0W1phMi9Ra20jSlYlOSgpYSVfXjVr''@;'; put 'put ''fkREQllfZiJGel0mUGk8aXh8Q0pMcklaNDhJLkw1a3wiQkNodTsqclMhd1hLK1ElcUxqaVFCTjxmdDRxaU4/ImlseGkvXyZVRUooW0BbeypFOGhNMGJEK2gmdFhJSzE+dztEX317UnI+eX1TX0RJOl9AWmpwMWVxTGE1ekpMWy4xaG86WD9JbXZ0WWlFWGgrNVIxSGBPKWVPNVQ4X2MiR1R2fk1y''@;'; put 'put ''NCQ2dUFYeSZvfHtwdT5YRSJPbnUlI2c9ZXM+YiR+U0dWWEQ3S1ZraCtLJWYpQXt9N3RvPi5Yfms8Ni9tQSJEOl0jUFBeUFY/JnMmKDUkdWckYiwkNC4iUEVAQjBWdWcucWk3LilSLExkIVNsSGU8Zys6dEo9V3paYjVudjhCZXtLU14ofnYlWFhXQkovSTh8OW5mIzV0UyNSKWIrckxHQmF3KFhd''@;'; put 'put ''QDREQT1lK31NJGNjcmJNRVUlTHE2bkJQUHFCOTsqZUFJTjxSVCVfcCsqUCVJLjpEXzd0WjxwNHx8T3Z9Jmk1bjR0RiQ6TjIqWmZWNFQ1Wm01MUQ1WWQrcWFdMC9ORj12NCFKPn5BNm9TYzZkJk1CVG54SUFHWCk2a3I4c30kOilWYjh4fkZlPDJiRWV4YSpRXjFlfiZMK2BIS2RVakVjTTFtLmgq''@;'; put 'put ''QFZSWEF+WnphbiYiPU0/T1E1Z3RMfVI/TUQ7eUZJIVQrNVE9TkJnaVtXX2B1LEFzRClLZXZzdz8zJHwmSk0/RnpxWjV1aikpKFY7b1k9PkUzXy8+WE89dThYNHxSM2l6JVpAZjFoQVI3fnFrUExGWSVUXjFtP0NzMm4ke2V3Y3xSK2BKXUE8ZnQjc0g8fGBIcXZsYWFqa2ZafStYeUwyZCVEZm8r''@;'; put 'put ''aH1AcncpNn1Pd1gifTdNUk45dCpnYmlVXyleRTM5WTN6R2I7W2JnY3NMak1IUTRmeV1FezQxS2oxXX5sL0x8TGJ8NUJ9JixMKykuX3c2JXVtVnQveUdHbXdbVHkpbz4xQml5QzMuWVpdS2lIdCJtJm1YdiklNVprZDlqdFJlVFJXLDVEZnlfIkRicWw9dTM0QyErYWN5RlVRTHxiXmwuaDg1U0ci''@;'; put 'put ''OmI/KFd3XmR1NT0rTnE9fTs2L2YrQixvX1FpXSpacjloQkB9THEkKzU0ZGw/VEIiWyMxZFJORSowOG96QCE3VCJGcHc7WXp8a3h3QHdDaDxJN3UzaDd7S0hQZFBsKUtoNyNyL1Q3KWJwVD5ASTlyU1cwKUVxNWlxfl4zK2ZAZkduNFFHX0pkVm4/VU5gW29HejdXKStMenczTEROam4qQWNNSTBe''@;'; put 'put ''NTFQaXYxTSYoPEg3dEclRmgzMmRFdjUhUiZXNXJBQmRxWklESkhMJXIyYWosfS5rY0JBYTVtYTJYez42djQ/XVA+Y2RCQF9tPkxqfFQpb1VUcjhCYHlCQDl3X01eeHksfT06IV5SKGV0NkZBek9wOzksQEJDN3VdVDhec3BpK3QhQzxJWG1SSUxZSWJ+L3VIZmAvKXNYd194UyYyVyFLZH5ZNTgk''@;'; put 'put ''PHlVdkJERy4kOXxyQkc+ZH1MakRGYyFZYn5Tbm59P0BYVF5NRVB+eyRTOCt6OGFARzU4d0VwUn1CU2o/T0E0dFRXT1JUdDJRVGElNWsoOUsjUGRKdUNiaV9JOnUxMVIuOkZRQTQ4RHR6WDh5Nks/SC4sUittSkRIam5SMTUjTUBBbVNOY3gsQi9JPWkvRkJBIjRRQUFBS0RjQ3IxISROYD9SdUMv''@;'; put 'put ''W2NjUVJPZFY9XUdsIzYsR2B4e11iVmEkfjY5W3ovOnQoeF0+ekBkWjFyezc/K0NrK2M4YntUdUhoPSo6MFYubzV1Y0NDVFl9MyhTcUZwRkclS25tVF9ydkNsMnV+Zix1JG5dVz1NM3k5ZVQ9Z1FpaFBsdUpEIktwbSNJM25YSVtJU1BbKX1xYiFdPVpZQD5mZ2QpOD51V2E9UlZdRkFMfjZ0KHxo''@;'; put 'put ''TjlPRTFON31QR1RlNHdLZyRuVD9vIVE5aTddQCRgTHtiVHdwNThzSzgpU1oqJWVOQFU8MmdvWjIwPHwqRiljeE9LY1pgd2NtOG9dJGY1dyE6O0hKfSlKbCIiZjkxU1kkZWlZbUZdUTB8LFByRE87TmRTNFd5LnBMbExtZWMrNERYL3lAfVc8KCM/cjw8ZDEvJXxrez8sV1BpeCp7Sn1SPWlYcCFr''@;'; put 'put ''eGZvNEw6YEN8YnY7Um89TnVBJCl8K1I1VTAsczFiSy9BOThtfSh8aXt+Lz54IW9bIUM2NkhOUSNQbVgvUCZ9eXYrNmE/YGEjYnZEZGhWdU8ldyF6OUp5PzRfVHkhfnQjRStaR3ppQzxqPE1AcldMVlshOl1rVWYsUWxQQ21oXVskV2x7I3oyWn5gb3BkaVEuUntWUGx8LldUdCVPZndmR11SL3Uu''@;'; put 'put ''TXwwOiFZSVszMn51ImhHVzdVblU5U1hTVW5GP0dKbF1rJntPa05dM3oqQCxRXlRMSER2b1pxSSpKRU9dfnd5JFRnRjNHVDg+Tyo5L30oJEQ6dCY5XVJpY3l3dC5sczNmKW1CWXVWSiUkQDo5JEhPJXtiR3JnQCU1MDI8P09AbVVYVnVFSks0W1UoeHQ8enhNcU0xPEheNjh0PUx5U3hnU3kmP25x''@;'; put 'put ''LDU+bjlObUx0S3lrREZhS1pRX19JUVJ0eEB2eTsvWGBSdjZRLnpCV2U6N3F1Yio4cz5wLDQjbkN8MkUyO2xYO35JbmVqfjFCPUZnU2A3XT19bnUuUzBDO3Q3dHkwSDFFSGRDdS85Y0VFUzJCXTZ0e19DKTYhVD0hYFV3MzdyU2xfZmMiNEh8ZSE9P1QwSSh0a0ZPfFRgbH1ZQ3xrX0o/c2B7Si52''@;'; put 'put ''alBzWllwJVF0TndSfHR3L0tPWy5jNGshSSsrOmklcG9nZ1ddeWd2fn1BdiEiKks5Q3ZzNG5dfjZ7bTRGWiZ0cnsqdDIjXXomQWJXPjovNTV6NmQ9dyFARixHWmt8ayxkQHttUjhEc15XPl50WkNnZiMjX056I1BgTm9EYlZ8PUZ4Xi5VV3FrN2wqcHJXQ3csQC5mdVB6R1pXL0NiSFg8O2h3YzlS''@;'; put 'put ''PT55XnVMY0R0NlhleHB9N252NVcya353RCE4S2A6R1NZKnAqQj4wU3ZocE44JiNFJUdvRG99S09fajVGVEJDNTVbd2k8JDpCciN8TS46Nzp1RUNVV1RsQmI5cFF5Mngzd35FaVthYkV8ciN9fkI0KUZyZ2FxQT5oTEIvUWU8MWVbJUNkWy45P1V0aEl7Z3JTI0VpI3VON1VSSSs3ZmVZOzNVU2FD''@;'; put 'put ''Sy4pJjdYTmE1e1RtN2lXRE1NdlElUCIwYV0/e09uKWs/W1tCNl9LQlVwQD0rbmdDT0BWWm4uSnJkem1BTnY3aFZ6JS8leW5pfS80OUZ8RG5ZV2o7JjF7YXdUaHo6aE5Zc2ppfGNUYjJOL0Z8eXF3dHRzVihrN31HTCR3b2kuRHdnTGkoRWBaZE1QNSVvfDI9N1tFSFZNTElmY2glTCM+T2N5bzF8''@;'; put 'put ''MDIlVG1idUMvZShjcFZPNnZreDJtJkUuJXZndUJFY3NiVXd3UTw/R29vJUFGM0VkUDd3V3ZkfFEiNk8/TVtIMHhvP1UqdHM8b2BRbHlNPkAwZHJvNG1UP3p8JFt2XjZAUWV5P3RJcSRnLld5fFF8I0oudF9bQ0NaQkJVbWJ9PDp+K05oYVA0KithaGhpZX5vfjd2RTNqPD48bFErZTkkMSFzYjRD''@;'; put 'put ''O1JtOFFMVmUkaCteblM2fUBZdHJQJV9SdzZseHwwLDJnNSllVzs7Xmp2dU1DV1FSPmpONFIkeSNqWzxyTyE4NUckRUNXKF0pQHROVXlfI2hpYTZKSzYhdXJSRWV7OVdfcGM+fEh9U3QvfVttZnhJTnNZSCZ2YEh7WDRYZntRfUZTUHs7cHwsSEAzL0YqWW8vWmVieShiK2BwQnYhfkY1L3U5Nnw2''@;'; put 'put ''V01zbHlDeWtlZHZIeDY1RENXMzcreFQoK0QlVVpxaV55Vml4Xnh+MldKVnhxKT4yeWJbTnpieWxCL3M/Vjh+YnI3SFNHdzgjXjUkcS8xYWNHRHwreTorPUdWeVZdSEBje2RWTVtfWyVzJmZxMEpTfnp5YF13bnkpb09fcyhXfmo8LnxCJn4hVlA3VE1xcSwpKlB3IThLXzQlYF9MY2QvTlh4WnM4''@;'; put 'put ''QDt9QXN7Y293XntbR2M6M2MoWStqW0ojWFcmPU9zRl1edVgiKCFEUjk1cyt8bENZaWBYfkRyaCFvRENsOHt4T0B8c31XQkZdPHdJfDFDUWlLKi91Q2VlPXpoRXxALylJZXNHaG0uZFdCM3JNaUxpSmRXImBxTmtxJkgzWD1NLClqXnVwP1lheUR2OT5QOD9ndllsfTdVQDVGZCRvQjU9QT1sUEws''@;'; put 'put ''W1kyZWZrKVcjNmFFfiZoYFI6fkVSWTBqXVNZIk00IUEwQl5XZGc3SGMoYXYsaVd1cCM+U30vUVBLV3FmKFg0fik2czJKMUJ2LmAicEZ1K3IvJCY8eVA6c2I+YC9yI3VndjEsViE7YiZidUdGaV9bSlAyP08xU0thWH41MWpdMjZKL188XjZBJURWSz9EdVl4UEJPPXMhYzl8LCxdKFVIcHddZXVa''@;'; put 'put ''bk8sPkdOV3hVOEVmZS90M2xbel1GdCxacylyM3JAcWJ5eWxSQDhnIURaJGpkVzlydj5ZW29AbSR+NmhpVnwyYjl9bU1Xe3VAdV8iLEp2LHo7bEJJVlcyKWlKNDguUHx7UTxbKUdfZXRoaz8uUUN+JU51ekVqb2kpb2o7JiNvVkt5K1JSMzJLfDM9TyZuXXVAdW5PKDVLdj1LV15gQENyTndvcTg3''@;'; put 'put ''dyVZQks2b1d9Y0lHYkNhd2ZycnBCcSl2JE99MEIkSy9+QHBRY0E0N29gYm99I35eM2kjI3dbK34qRWhubjlae3ZxRSlgYyFHK1MwOVV6S3VwdWZ7aGBHUTQ5LFdub19wRHMpcjN2QEloeEZsUkY5aCE1WGZ7amhfZHFjfXRmczt0bjhdPSFbKCw4JFl6MmRofmxaVCNIPGVgMillVlY4IU48akx5''@;'; put 'put ''emppWmM5KllKdUAzeHtqJV9SRDU3TyxWNUk2ZjNHL108a0VgakVZX2hRfnJEPUpMSU8hNX5wb0RGbUV2MD0vPjxRK0Bbfio8Mi59ZDdhfSU7KVNSbi8+S3lEc1tzdGglKU5meDcmRmcqdX1VWjpGQCwvSnU7JFZDSHZ8eiw5KEhRVm8+MENUOVk/N31vKGl+ZC85MCN9b0R3VjozRHE8OUZPe1dV''@;'; put 'put ''eHp9XVdoJWorNkNGLkg+X0crXj16akJ7fCFYK3l2KVVCeiNLYnxiW3VFcCYjQ0grPmMiImV+JUorTEolfnZJN2c8T1drOX0kZXNwWiRDbiZZcU1gOmllYy4/TjUzciFTfG95ZW4lYT5eLmMoX3p5JF9zYFBidy8uK3BbPT9sRHFwPy52Q2pvNj4wYkwzQHcvQF1uL3E7Lz1+XWx5US47eSo8ZkBu''@;'; put 'put ''dE0yZ0FYXzxRV0hUMSExRjYzJnJ1MmdwIVF7ezl9JEpHMnFEJW8mKT1rQzclIks9RyZafXN+K3RRRjZRe01AKlomWTF0WzBpeCE6Jj9AY1JHU24vUF0mJDdqPHAkN30+MHhvTFgjayZba3k9L0taP3IpeVcuMFt0KU1sR3dia1lTXT90SzJQaFNvKmIiUCE+JTJ5bkF0RVpMa3d5MC5VfWtvWXl+''@;'; put 'put ''JkQrN21GUH1xJTZUN35RNGdZSXkyKkshdD8kKH5bVCxWSXdQRWhWMy9LQTpsSntFLHtdSVdNb29GTVNOcWhQYHBofEt8TDdWKmslZWI8UilqPig2MjckVXNhflRFJHooRXxFYjQhSXtydmt+Tk86Wn5vOXcuTm0+KFUmaFRBTDprIzIsXy5TSj0+Mlp9eiZmdShzVnlmQSpgbGtHMVBAbXNDaT9O''@;'; put 'put ''M2ZSdWxdV04zQ3M+aU9YXyQlIlJFJFFNQHloYWlAfGFFZz4yRjRYe19CK0ZkMy9XVWJAImozJEZNfGBZJiJrRGcrZVErNFB8UkExKzM5VSl9fngqNn1nX3cvVik8JC98e3Yze2JZVUNIRDc/Y2t8TSp2SytyN2JRV0d1c3NJPiNzX0hJK0VbXj15QXpRXkFPXVY8ZjB9QmRmNjMzUExrPTxTR14h''@;'; put 'put ''Ukg2a0dbfXVlIikzSUl2MHZbIndYMGlxTiQ8LDRSVHhxfDBDfGY7YTo+Ki96fV4jYj98UTppMzNQOT1kXyhfXXMleEhzek82YG0odSRUX3guUmx9anBwSWpSc15ePDhxZGV3T2c8ZmkmbmtwP0IiQ0ted1JMUWslQCt3R11dRmhLY0tISzpwUGVOcW4zUmhsWl9dPj9Ee2E+ISYzOkIvP2ZGMWAl''@;'; put 'put ''Zi5YI2ppVmBNOV02Wlp6NDhWIy4lMk5aJFRYNCp9PFBrfTZeL1EiU1E8WEJ7cSJJRmE1ZkF8cUs5Rk01cnMpTX51QVYifGN4XilCPjJUKWV9M240cV1eJVRFTy5sJCRJLjMlKmsybGVJWjRDdVsze1Btb2pNIWpbWGBNUGErM1BDMVFmaSg6ejpnWmdSTmhncTxNezZEWj96ZyleXnMsKSh7RzM8''@;'; put 'put ''SkkzW3shKlhuPUtvRTQmYVY2ektbR2phJX5TQ0gudnMqWihwcEomLGBGKkBxRTU0M01WRGtOZm86JnwjSD9Qa240Ij1VeERJJi9Ue3AvVExNSEZednt3QXFrelpDIX5AaT15aSpZbXYiPUR0S3BET1JSfFUrW05POlp+NFZqS2I8aUJDcGhzUlQ+X2kkeT8wbEEkS1YmXjNVIXZIfURKa0I4LjYz''@;'; put 'put ''Vmc0eSF8SHVfIzthTmk5NmppQnxUcHU5R21WdjtAaSxhWG5qU0N5R1B6blMwSGRNYEdvVihne2VVd1pFJGA6ckhEZEdKdXVZbT1dZUxGajNlRCYhKnJjRDlxWTNGdkxYemRrVzVHV3tNVEciPFZ1NCZNa0RAeT1VcWQ9NjpMRjpYNVc5MXdjMi9dYFAwfW9wbDN6Q3FLUXZ7elM2R0VeY2NNcCpG''@;'; put 'put ''QnN3bWY/PFZMKzlAPDF+YTYvZnZPeHM+Ul1YWUVVZldqRy9UVm91LDFJLmI5VFpPNjY8anpmdFFrV3N+cWpfLkoifm1CaFhzfiN0U0hPakZvOFcpOFFGPmp4ZEl8Yn4hZFVtPVFtbmUocT4/ZGlgZ3N5QzhzfTV3UCQ/VVVvNE5LOHIwNE5PcWNZNXRlYUB7USNBc1YkdEZCL2Q7bSwpJmgkNXNp''@;'; put 'put ''NCtTM3ZPeyhMcStEYGV4SDUoIyMueiFrMEF7ZnJIQ2Y9Q3s4PXs4bGgqbWEhSHhSP05VV3JjcCtvOmtdO3ZZI0Y6NT5VQldKJD55JUZsNlshbEQ5ZUxOQjw5b0VaRi9PTGUmVmQ3dSNZYUY0fXJEN2daVF82OTlYfWBRdExzZTg5ektzcn1VNTxGN2JoQ3J7S0NQcnlPQnBkSzwoMTRFRENkaWdN''@;'; put 'put ''O1FCPUpmVkE4Olh3cWg9PUJFNDk7X2R0YDw+QUhvc3NGMT07c3YyT1k6anVfd2NtW0VKTEM1fnR7LllgXmReJDI1T3g/YF1dLnBJaTozJHR7LmVYPm57PGo9Q1RuWz1PL2pXU2NoYm5dOzo8cl83WWZhWnB3QCpTZlVYMC8lLCQ5Ni9+RXlkfm1majNBfkNYciluRDdeUyxKJEJEeWMrMnAvRGBL''@;'; put 'put ''Uzs/WDxFdGNARiY9cUhxfVtwcDs+TWk2TUg8Q0NTTGpzOlVASSI1X3NoR1tIczBFTUEkTWZ2OHRYT1Q6eEN0LzIzMF82TT42Sy47dlY7fXt5SjhSLF4zLlBHXWtpOW5wb2Fdey8+ekVdSGNQU2AwdGltTShyWm9zeywrRHh8UkAjXStOQ2h+JlorMy8hbkRuWUJpRW11eWtRKkteanNgOn5HZW11''@;'; put 'put ''Q3hIVGFDOTlGK2laS1FmaDJQL3dzTDhMNWdsZVcpNFg0XjFiUlI+SGZXMzAsako0LyZLJkYkP0k2W29XXUMjP2d6OkpMSEVbPmFYLDJjP2NyPEkrMzxsaDR7Iy9UP3h0JHFET1RLMFBDT3d6Q00ubDguL18lYyFhSmBBVWV3Nm1IfDMzT1Joe3k2aFRqTCwzIV0rMFIxPGZzISMmemo5SklneTl3''@;'; put 'put ''IS5fRmd6OSpPejNhaSFUM2IyYG52JDtoRTE5VSZPR3R8WlhKTDNMfU5sJldTbzJXSGJ9UzJvU2U7SX05cipzbUJgTCpGQCtHLktEb0h+UyRpPXpocylPIi5kaDJbYilUIy9hSilmWzZhY1RdcHZGOlpOXVN0fTROSDlOOj1JfmIpeWopWkRpUWlMJS8yP2Q0WGx1Qm9eXUJdZjRkKzNjSUMxWFdU''@;'; put 'put ''NFY4LGA8ZiNnVkg6I31MbTo4UCEkPTBNQjtNMCVwRzQzXjRWUXMvaVY2JFg7YCFMSiZZOTYybmElUGV8NyxXfmZ0UU4yVlM9ZjlTQWViW3pqe0lxfHFFSFArZzNDPGxYaTUzMGNNNlBfPFdNUEUjY29yKE5XfWNfeVBsfkB6QDtSLmd3JTZxMGdXcnZgV0RQZmhYfSFVUVYwWTFhaVZzUFJLYlE2''@;'; put 'put ''YDZJT01SMmQmTTdtN2c9O0toQD8jLzhnVV04Nk8xcSQ5ZH4wMi4pQD5zaiRDNkAhRUBkczdlUyYwSU0xYTgvJFRyPCpMdVMmZlBXUW85eixpOjZ4aVFEXmc5ZzVtK3B8OzZCUl91Qy9fMFldZ21nOW9nZVE/fDsmVFFreGBmUEY+UXZ7bm1AaTRVcig7YjJ1aUAoYl55MzB2NyomNDIsQWM0Skl5''@;'; put 'put ''JS4hR3g4Y1g8aV98KmI2ay4iNXc0clBdelZYaEM6OTZCIz58fD9vcl4hKFd0PWxbUDBzUERQPkglZV5pWl0hRyVrWG8vRVlIUlRfLDVlI2tnMGF+Q31QcmYpbiFQZHMyT3svVHlCLFhweU89bFtNVlpdTVBpVWhIV3V0XjtMTlMrbiMsfkgvPDV+W1debjt6cXhUfT85RUg8WFpLIy92dnlFa05s''@;'; put 'put ''fTpIOmdATU82TSNpWyo+cUJpPjdNRSw0WjsuSHI8SjxiW2FlS0FyJmlGcmp2UW03MklsPlpdakYufG1fR0QoOlVmdm11K31EWDoodCt1MnE2MF1ZRCR9ZjxORVRBOCxPezlGUmZIIy5jMTpNbT18X0RJIi5mJFRFVChLcU54bVhdZzFvMHJWVllTe08ibUIpLjlpfjxiXnE0M2hETDQjQyMpYSJk''@;'; put 'put ''ZEJSMDIraHVsd2thOyh3YlkjPTJuLC44Znc4Nk0xcmxVXVNNbyZkMEFwbVk/fmd9VCpKSVFHT0A4UXIrZEVRVE18XyNZbWcwcEUueV9TOXxwa3tsWSR1USMlbCpoL3siWDR1SShuWCZIN2BXbDxqY0Y/UTlzTi9ecTRuUkNiQmdjV0Q5NGNUQ2JfR0xjPEdoLmRmKX5xZztSVywidUIiPyJRWixS''@;'; put 'put ''e21vKitYaEhTNTdUZHJHSXg1WUMsKygkcVksbkwsRj9nS1E+JiFxa2NHYGpgRFlgV0hmY3xdLjFuPDBrREdUaTtmZmh+MjNdOXFXP0YjJDpiYD8oWX56UTRBbHd8RmxHQmgxNnFCeG5pTERKYypxNV5HRm4pIV9pZkR8MDBoPDZiL0U1MjlUeSNDX3ksZGB8dHx2MyhxISgpR201KyNkMFR2M1pa''@;'; put 'put ''VyRqcnt6XV5XXmUiN0k7ZDJQNzdYIyM3Y009TnlSQlRBN2hiSFNrO1l2cWpyMTB7PER9OmpkTm4pQ0lFQD8sXWlHL0swR18rfX47YTQ6NTt1b3lkLiJ0X0dsQW5TO3FVUiY/Yz1iYH10PUJdMGEhPCM9WiFHfjhrLk81YWM3Xm50fCxNT19IfDJbMlhKKkJbNlE+enY2NXtCJndiZy5ZfFR3MVJQ''@;'; put 'put ''LmswXj91SD4hYXloVHlnd3RSPUB2WEB8fjheYnE0U21MXnxFSzVZNUR2e0VTPlcoMm55fWhaU0UwdUJSUDw0LGNjKDI/NV1zNCQkNTs4Q1J3I31peDI3Lk1qVVVDIzlAbFguZX1pWkhLNCMrMkYreTdzJGg0NH5tLE0sc2taPUZdfjNSNlBmckpuPHNsT11pUnY5Kl54RyFnY0l8KVFIVVhZO0I4''@;'; put 'put ''NDNfKHBsKVJPfGFdI3JHSVtTXWFqaHZ6aCg+LjEiV0AyJH4/KzgrJC9IXzRtcShKeDxdIlg9ZXV2bUxuPFBEKDVLeDloTEY9M2RobC91Izp4MFdqX2Z+YSlEZSsiNFlZI0JXd11qWSk5fihZSD1UejRhIXVwJU0xYEdfRXl8TUBWeGcyfXckUGp3ezoyKC4kKjBTUDB8THNIS1s5N01kVilhbTBt''@;'; put 'put ''X3lZM3E2KHxOXjNwSWF0MHRubGRnTmFYPz11NVExbkxeMl54JGpaLFkvb3Bnak5qUjRSRX1XJjAmRH5TeiFod0pDKSMkSCRDaWYxbEJEbEt8XWVYbkQlUWJxdWxEKmJSVSw9eXBnQ3c/dVh3dj55Oj9qUCghTWxQOkxERENzaz9INl9iPT1hXyJtNk8oMzV8RU4iXXZhI1Eidyk+bmFjM355ViM5''@;'; put 'put ''VDJ6czJOIUImNW06YixdIyhaNDRSNz9gZyI3Vj8qQ1dQfjB1Z3NOYFJqUz85IyZ3LnJNcHt0TSQ6MFEhbXsubVtlMkRLc19Ya3hqOGtlSFpucHpnQlpASmMvJD1zQ3BFZyM/fCYqRnMlaGJWaFBIbzdbK34odHpMcHYwX3xOfmx5MVJqXnJmPVZIXUombW5ga0Exb0pHVV9Mb0kuRzdhfXcrL1U3''@;'; put 'put ''JFk5UDR5O3RAX2hvRjlMWGhlQU5Ien49OHAiOUxBUzVhOyN2VzRQP018YTRsY3ZQVEs3UVRba0UoeT5NRCRSP1N7WVlaWExzIkpuWDh0YXZOQ3RsaX4kPmhsVExMYUslOzZhPG4+Qy5xXk9PflNBKEBhR0osU045Q2hRfF0oUTF5UUJ+RzV6VGo8Y0t9cUN+cDVQUnAvKzRMeS44Qm0yLkpAdmhm''@;'; put 'put ''NVZsfWoodExHbFRFMjRDdzY8YTZmaWxSWWAheT9fJmw2dj1+Oz16JjY6cGdFT25hPHM5JiRNME83OVEwQyk5ZGFLLD9FXmJSKE1sMl11eEkqaC9CbjBzSDI0WVJwR3BHJm0+UHhlJXthX0VVU05dYlZjPipNUCUsMlhaaVM7MHkmPD5BemYwKjlwcjVpdmhVaSY4ZE56fj1yTFBta3VNZXVHL1FR''@;'; put 'put ''ckx9PGcwTipLYktqK3hOPFNMKiFTbUkvbipkSnImPlFAZ1BqUnBhamdTWVAheUZhMnxOc1FIPiVvYTc5Yk9gOyEwPV00LG57e0BwSnhvKHhjJTd3LjEieXNrYEc+Z1RCMWFJWE4jKnBWPy98XnZoJTl5MiE2cnh0TmtFL1U4ZntuRDdaJS9lLkQmMjp+WyFTcCFibysqU3JNSmpXfEk9cTpqKmJU''@;'; put 'put ''eytLd3c3NCsvKzp8Z2BIKjc0JSxWUClHN1pnL15McHBxXl04YzhgNDJXeEI3MG9LRTUsbDhEM0tyIk1PI3U/SDBHfEthU11lcFY4Pm5yenRLNE1taTw6OVRAW11SI2lrezp8bDt+X3U2VDopOCFYImFdalEjKHhVUzIxbjs9Lzg7fnQ/cSpPUmImMlFJRSk8YWxSJXJoKDQqIjhPcmZQcytbJk5L''@;'; put 'put ''cEtwLmVLIWEuVy50byxILmNTaS4iIypXbSE1VSgmcy5Id10kMXc5ZVlfOzl6IWNLO3pEWlgzNkZ0ZH42Ky8kLl8xPzFqNUVRe2NpbGZ4eGZnfF99S0twPTFAXiReTzdxKzgrTXE1UUBJUjF+aV5vSX5lPGt0NSVnbWdDKTZWOygjdXxVajZZezlDdkBeZTlsYVBuV1RjJkMlW0IwYFZgSkN+VTNB''@;'; put 'put ''Ukk4Ymt3VzZwLmoudjRaR2llXXxjcnY1SkMsR2Jwd3QuX19NNSpQKFIsNE9dWyspVkBdP3svcmV+azw7cnAlPTR1LmZBcmJxSFApTU5QJGxPQk07UWc6NDgkSjAsYXZ1VHJJQGtNPC9vVyo9WlsmMXJddiU2JEgpSm0pPSNEVld6QTlwaEhEbkJ1KiNYL0UlP3tJflouQyNEVWpXWCZKaEFgTFM/''@;'; put 'put ''SWFPOyZWQzorSWxHdjNCQ24qVz9CWXgqUWM6Y3w5fW1BPSZ2QzMsQDImOmt+a3w9SCQpKCM3O313RChUeEw6PHRMOzR4bzR5VzZqSUZfVmF3NStOTXBIfW1+UHhFYSU9PSxaIX1eYHhNUz9IKiQzeVRTa0pNP1N3R2ArYDMycEpSKS44JVUrSnlZZHdbelhucyQ1MF5pRnN8MTx4OTxEPVpDL3ph''@;'; put 'put ''Nm9LUmc7RWdPWE0iWTlPI2dLNWluTFdfTWY6XTNgSH4yaiQ9OHRMLzQvMjVdZSFfdXI+VD9hRSowV30mOVEwUzJaeSQsa2dKWXppJVYoaTpUIXk4PF91RTtdNix+VXVyUlMyKnJbdWFJVXJQNHg+NiR5SDomT1FSbz8jW3NiMSo/I3Q5ak0zQiRyIzl9aFV5UmN7cXA5aklqanc1cHw6W0ViRVJ3''@;'; put 'put ''YGZ5dkg3emZ3WyF0YWUyYShdbmU0Q0k8R2Z8XWEyKWtAKXsuJD48blV6SzokXXgmWHUyWEdLR214Uyt1V15eSV5ETT1SMTtdaldnd1NqOVo7V3UoN1dWYj9xWEtRWCFSTktBRFk4aG4yZWIwJWNVN2tIaz1XMV92WzMuMHRDSHx8ImhTXkFOO1RDeF1GXTYpZlJ1WU1AfTAiaFp0IiYza3ZTXmFn''@;'; put 'put ''cDROemc8RG50QSgraHhMMkhiXisyZ2kmfDApY1ldang9T10vViQ6WTVWZ2ltPT1CcixzIVVzeT99M0haTjZgYjNlUXUyKixiJCg7YXh6NlsrMEwsSi8qYH1yciJbREBWbE5LeVh7bHZdY0ZAcXhhOjMsL089bikySlsuYFsjW3A5eXFGSTEoel1DPFRAJFdiaXZAM2ZKR2o5eyxhejdpUnIrXSkw''@;'; put 'put ''XU9ISnl9fDVWanJdYD16PHo4ZF53WS9wLE5WezwuQ2NidD9+SkppfXY7SEBvOSZQIXNDUCYrJC5BPTwsLm5tUn07Mjw3NFFjcHlxcUI+M3hbSWhBWkZtX1syTVJZTU9gZnRvbGt3L3JKJlVaUm8/OGZDQDxuaixNWnwuNHAjfT5BbihgIiMjPDs6UixIOyF8ZHJuYUxhIzd9VTRUQm9AKiZqL3pU''@;'; put 'put ''WjI4Vmo4cmlPTDFLOndeP158YylycHZtIXJgNXwhUjtxMiREVVQ0WDtHU158bGU1Ny4kPFJYfXo8K2p9REwwZSFROnlXOXY1cHc3ey5WQiU2Iy9tdilHWll0PGhTUDYwMnFIMDlFNDFLPl1MWC47PyFweyxIYntQckZGQn19cDsqX1BPdVdKPz91Q0RVTTw7N0kqLitKcVlAcUQjQ3JDL0J4UWEv''@;'; put 'put ''K05dNiMsWWxZem04UUMvPGdWayRqWndIKkVUcWY8JUxofVtuX1hGN1omTS51Yi8hc3tGLDA3MUozNEhZLlFoNXgrYWs6NG5qU3B8cEIoTWIybXk/Vz54Kn45a1VjM11aWWk0ZkAqRHtOJS8iaXtGV3d8T2h7PDNSKHckUVVEbjNAUm9+Q3M+SDw0d3NHeDlfay9DP3NGPDdZLmlmcylpY3VoNkpF''@;'; put 'put ''U3Jrc1I6bXk+bn46fVoyPUlYNlBXfENwI2ZrP2pBUF99bEU3XkppNGFEan1BcWAmPT1AcnJ6LGFGYytDcilnQHZSdSpuRSRTOzVFLGs0Wyx6PiFoX3tjSTpBYXB+MXI2QyswcTwpYGkwTCV+ZXdEUVYwTy41Uz42UFleQUwvW2RPbVlYd296TlpsWntNUE9MNztjbiVLYnk+ViNZIzsoRiR5N2xC''@;'; put 'put ''Zi9EVSlxNXhORl9DRmhtOUZFS3FEcXY/LEVWdiJdN0hifm03SGpIVHFub35iPGZHMnc6blhzQXhpfE5RQW9Sa3k/RzRpflcvYmk4P1NKV15TU29GPksiaWNyYFZSPXFlQVBJI2RLRipEXTBpajwkV2srL1slWFE0PVB7c3xCIllpYTs6TnVlektKfGFDSjpgIWEyTXE4SCVTZDNJUDA0ZUdUYHdd''@;'; put 'put ''NitAOitZZVI5ZFZyNCZlOTpBQTwoYDIzW3okLnFlaToxKio5cSxBRnIxfFopaClFdH1ieWJueGYkK3lPRGFpR1U3YWxhPmBFeil0VTdtT1M1RSk1T2smJmNCMD8kZj9JU01SRz5VbDI6PjYuRCtYaThuNT1fQj5xXSg5M0pzeU9gKGJgRSFYYEJgVno8XSQ4Skp0fEwqUXxOWEAud29RbyhyXzli''@;'; put 'put ''KDQ6VWpxNkRlMWNpOz5udT51ODBOY2g7TGJCIz1Nb3NRJWQjQCokNCNMT34waEQkdnt7M31ic1lZeE9QPTVVQ0VuXihAJD9rX01jX3o2LClXQz92fjluIz9RNCI5cUA1Oz1QPn1RKllne3FwZzVDXnpyezkmdXVzcUZiYDB8VGBAczJRST53PEVFTjZOaGIyWlg1QHU8fiVgRlhlan03d3QmNUtm''@;'; put 'put ''WjQ6fT5KXmx2QG41WlNSKDM8SkZAaEhzY252TWNWTiRERC87UHJ0QVgmUSJJUGBdLE9MKz9waUtmVTgoXnZXKEV4bFIlYTkoIlg7VTpnRFlnLGxiPWlXPi91dVlbVH4wMS9TOjtQYiRqcUd0SFVibXArcTRRI1JkN0NuMCQlSl1HMEtJR1M1KFl6R14/Myk1KXVDZXEyUktdJGcoSjFKaTwoJksi''@;'; put 'put ''PTtNV11KdF4kUzZyTDsrNE99U2Jhby9UalUsOW85IUtIUkVITWNRSzVCaDZCTEYoWHVDO30sMDgoITghVV9uIWtnNWMueVROXn12I2xARFd4XiVIX3BzdjlqYltwXyZ+XzY8KiJkW0cpSDp9ITxGdHk0LEIqXVBUKkQyNzlvP29iQmBKOD9NalJgYllCXl5IcjxINXB7Zz8/MTojOS5hJSx3bzVB''@;'; put 'put ''eHZKQkZ2THthRE1rT3t2eT1xWk5YJnI4W15EYCl1LjR4eGBBXTRfPnVIcTVNI0VRPC8vZEt8ZkNGfl5aUzIiXSFYZlZjKigyMmlTcGZKcCs8Lkc7YksqX2RQQC4+Y2YiVEcwYTJXemQ2RTY/Yzh3dnpjTjlWQ347VT5jeUpNakBHd0A8WyJLMkYxKE5GOiIqU0VyJHw+biZKNmZFVkFge05tJWNz''@;'; put 'put ''PGV6RVFdUl9eNiI9REA6MFFWU3hPWVNYVDx5Myx0eS5gKW1JZEpSZTlAIUM1bX5bLzE6b3FxM3s4TC95eDxJKSpzKD4rbz9fayZCSTF5fkMuQ2I+VEZeX35qfF5zeXVJSVBMdEBHYGpFdzw7fEZpISQ9QVkhLF9GZDdobT9AZjEpWipUck0rSlA+b2pAbHt2O3cqYismZncoUj5GfX0vK25fLF43''@;'; put 'put ''RmAqKy9IOGUhOk1JKytRPHpGYS5dNVprJlZLX0p2WFhnIVlVfSJrNyssdUBkUitIfndNeml5fjssYiRsK28qP1I9c31WU3tHJCNnfFYpZkVFNH5ENmU/PX1qT0dfITR1e1VobmMwcXNDVlBPSDl5fFVDcW0kJT9jcnw6bEowRkY3MTs8I3h1dGV+NXkkZ09qbkAvOFtSITIxclduPE8lUn1LaDhM''@;'; put 'put ''MjhYX3JzVmldS2hUNlh9bFVpcS5PJWtCeUtqbTpYLnBUKDRDdmw/c25feSF5OjJ5JD9NQnVLNkwwKVk7Oi9VbzcySHg4dV1jcTBjJn5SKTU/fX5hQmopPDNxUmgsNkhDdCNbLFdAJk4/VFtafjZKYHxSXWp5YV1SNis8RXpPT3NYMjU3ZH1OXiN4a1t9VSRxe1t6RD5dfDpncW8wcTNKe0w1IjMq''@;'; put 'put ''ckJQJXJLa1BSRz1QaCFXLjM3Q3dEdX1ZYyo5Ok44K3hvdUVYdyh8SmJScTZzRHMrWVh1OmhSb11LT1Q+ZjRbb3U5QF5HN0QvKkt1dk56OHhJNV9dU1c1djhyPU40RXB8bmJSIyxDOG1bWzR3VzFLMz5ycU9dSz5rYX55JXBHaSxkZHpyJkIyI1pwbjl1Y0c1QjFVOX5Ae0pVZiNLc0ZrZDoxaylI''@;'; put 'put ''KmcidyVbNj4keEl2YS5rdWsrYlQjY000IVZhRlRuUnVeelhObXhMdk9zUWRnUyt1dzJiJCIxYXoifT5JY0JGKyJNPDIudzQ0MWlvNjtQZ3tdOzdJOHs+SU1zZ2A0JF1nayE4PFdIbEFMUG5GclJOeCZjQSNtOCNwYCRqViN2ZlJ0WmIzOl54ejhTVk95dmhaaHJsX1BEVStkZzdXYCYkfix2U3Mr''@;'; put 'put ''M2ZARmgyJGtCWnsyQypVc288dDJ5SkRSYnQkTzFGZldZUkVJJDlhbHc2Y2E/by8zPHd1dWcxTi5tW3x+a0kiSlpwW3guNEs1bzxUQ2kwUXgkM1lePldjTXUsWzZdcmQ3eT1nRHgqY0NMRCI2Tlg3P0ksSkoxYTRALldNSFVDUXB2dSpnZFkvIl5FImsjUSUoRmw2aV9sSClLPiNFVClESWFIWj5+''@;'; put 'put ''b0M6YTY7bEBlOV5FNW1oK1ZgO1hfaCRyNXY0Jil7fSZFcUdmZyF9WE5aMCxqL15fNjNdbSo0bjxoInt7fEQ7e1B2cVBySyIoSGt0NT5NfStgUGY8OCQkK1BEUUg/VXZ9QCU4XXl9JTV7I3VndlhlRUBaN2txRE5NVjljTCtzK09vP0BGYVlzPW1ZZUE8aVQzXTZgd35GTzlBWENtUWh5MiYhb3Y8''@;'; put 'put ''LixHek5fS2pWWz5kfi5xJVZ4cktgNF5IfDV2d31oViRVdmhgYCN9W3xjKCEreD5aVGZDRXllXTE0RTRyaH5GfWo1X1lZdWYkMGooJHZiRmlMWDNPQHJCbGc6VHQldl5kVklGS15DIzlfO3YlcVppNH45Ryl+S14ydl4hOyppYXFxI2ZnTmdQfU5jbVJAaj03ZkZpOj95XmwzNTUsJHZmPHUjOkdO''@;'; put 'put ''O29odWcoRH5KYTdEJXQ5dF5FNzE1bHdXJG8qPmtHe3RuKkxAdjsmbU8yOlJdMEtkTGZ7RDhmMTJvdENod29TWko5OC9fYWNzQkVpODkwXmlPSElVV0MiUXhjOipKIyhvX1tpJEJjIm8+QEhuWlZRdFlsIXUiM2BXMXhkZkguO14iTUxdQSQrZCM8SVJoQk5SciZAKjB4dCl4Jmh2Xi4wcStlTnBs''@;'; put 'put ''bDpOOWwlcCxiOixbKj5na35aXSN7Zj4wKEs2e3JOM2dwV0hIeX1aLytYNGwlTXJyWF5mYSlEblJsSmxHQWZkK3N8WmxSezdKQDpFS2QkTCVyMXJ7VDc2Ul92JTp+fFZoaihUfmVnYTxFRWNYZnJnTi9CODlTXyokLlN7OTsySnd4UFRZeFg0IT9GZ3l9QXgkSyRYRTg9dlkzJDEvXzFyPWlhfVtZ''@;'; put 'put ''NXU+bVNpbzk5dXZ9R10mazVYbT9PZURaZCljInVSUHFvb1tRRntkbDd6OjM1eEU5TF9Xfkp5ViImd35vN0soWXFTQmV3WSlmU2I3ZTZCTCg+bEZEY0laaXdRXlhJdkM4NEU7PXxCJSF3VzNKSyN0eTMqV2hYK3dCSS5gRTcmenhkNjNpbkFbM0cmRjVGU252KWEqKDpKO1hELl9INypWTDQoRSQr''@;'; put 'put ''Xi5sfW82MUdGPm1LM0V7bEYsNDc6Iy91LCVCbmQicjwrKVdeQ1c4TyFhb2hKeSR2bjBtSjJuJFNCKU0wbjlZZjRdW0c4QX5hSDAvI2VSWSgzdkA+RklONG1NKyQmPUhpNHBPWkQ6KHdYMWtAWCIoK2RUMTVIYjZBeH44WitleDx2dm9QcntuQVhEVWllLH52ZnFzcUUvPkRZc2g4PTlpaikoVj9J''@;'; put 'put ''X3dXPEEpaixSNVg6NF1bXTxBc0JgKCw6QlZ9TH5raz9QSEU/QGJadzVCe1ZtPllic09qV0hzKU57UXpYTzEuYVVHeWtmNFNeekwiZnB7U2FbcVljPl1Zb01HeigmMHtPRChtYFVPNSZ3NSZWYmFlakpYcHRNMHddUig5Mz5FPzAsX1guX1RCJmBRXlMySTloMyM2YFsvQ3lYP29FIVYpQDh8Q0NP''@;'; put 'put ''Rz1ofU5LOX5ITmcpJGwlWiR+Llo2W3FIIlZrJVM8anxaLl9ge0E7OmFPI2RLZ3M/eGF8OT9GWmFVd3wieD9Nb11CK21gZTUoeHhVZyVIZkBXbz5dbFZ7cSxtKjVfXlc+NzJVb3hkUiZ3InkiempzT204M3t5KjZlLzhbVmJITHllRkRdfmhAYG9aNU5NP1B7dEpJd1p2KV5WTHcjfkZubl1ePG0v''@;'; put 'put ''JT0pOkM2PTc8cFk4Qz8oV0kuQnxWczlARkJfaERtMkVCaWEmdk1VKTlfWkdiP3pESzRJL2o5JVV9eE5JOC84dEYicy9GIWs+b3g6WGBuVHZURExXMnFeKDJOa0tHN1R+MHh3ezdaciF2ZyVGUnhsKHcmXj58Nnx5WEBeajBkZXk3WEpMQ1ByRSxXI1hnP1ZPWlNdZl19RFR2SV9ETDE0JXNtQCM4''@;'; put 'put ''NSV+Pk8ifkBAPyg+Zi5xeEQjSiNkSl0xTng/OSIvY3gkdjZvYXlNQ1p2XUtLSyYwPURWPU4odExmbDxxeFNOPiFHYzg6Tmd2cHU1RHIyaD1wUl55LEJXaFUmdUZYVkxNaGJZd1AxYDQzS2tbYUp7L1A8Q11RNlR1XX5oZmMuVytGLHh6TXdDOGAoYjdCKmM+SVFnWCNDXmIlSU8kN1paSmUhdGs9''@;'; put 'put ''e1IqYEQzXTFfX2tGIU8kUylZL0tsJkV1Pjx7KVo7NExzNiZhVXVuc2g5TVtMOntoV0QvOFtAPyM9PE1eUXlJaGRDVD9OOk1dUnR3M1ZofX1fV2FWcWtwZGNoe2NEOGtWMWVOT3A0VEkrXkVMJXJzVCE7bStuMnJgLlF9Ujt1ZFB3d3w7bV42fkV9ZG58K24hQEsmMldIVzpEQ0ssKUxUXXU/OWZu''@;'; put 'put ''anFfQyw3bE1XcEJXZUxEc0ckezE5cFdyNz5zK0kqKW4mczk8Vy8kTTZ3fWA5OWN0YUsyZFVMMjMhY3dETUYodm9jQnZWPV1ea2V5elshMGY3MklLKW4uaSRoJE44IW5ATWQpJFdqXyU7X1hCSzgsWVlGUV9ycmxDQ11pVTZxV2BlR0J7UEE8OXdoXXFvb0IoQixTLD8mVGVZbzI9ak8vLnZVWzIs''@;'; put 'put ''QVY3K14qUnkyP3MvUWxbIXIwTTVnZFN3P3khZkJoZWo8SmBjUXRvREB9SEcwSCMpRVB6filNcjRGLmRIU24uTnt3NEQuXT0sZUZMIXRGeVc0VVVATFYjJkdBNUlsP2paWSUhdzp2c0h5NCQ9eWA5bHd4aC9yN1VtIWAqPV93eSU1Z2Z0U3l3YnFARmxVMix0N01GTCpGO1AmMHg1K1YpekUwSnxi''@;'; put 'put ''bHoxfFYwTU5jYEJRZ0EyWng/WTdpe31dZzp+R0QvQ010eCtCWyYxP3U7KVdMVC9mOH16OzYjblQ6VEV+RnxZUjZkMkBNI1A9QG9xej51SU1NLmtdPEwsaD9ELE1qN2IhWFdjZT1jPlAuSVRQTDFIOHJbfFM2YXo0LGtMKyxCWzVAK2IqfHxPJn5pRDtydkM2NShzSDtlTnV+SyNYP2k+enUieCI4''@;'; put 'put ''Om1PNSVZRjpwbGF2YnR3RjxzQWV8cmdeT3ZlPlQhTDw2cjNOSjI3PX12QyVEeERuKTtaWlJDT1hUc0x+QVN4MFtDd1lWRSJVKUJZXX0qUl4jJChabkN4Xi87eGtJfH19Tz9saj1sY2tyTGFJNnRhL3UrOl1ha3JORHNnV1lRQG9aLFh8YldgZkBgMFNjeD5jfW1sQVQkbDFJSlgrWD05ejk2YENg''@;'; put 'put ''aGxlMig0RHRDT24/ezkrKXY4RD4kVz0xJD1fdHQqRVV5REB5TiV0R2BzMGppNGo6THlHKy56TXIlbiR0bSw6PjclXXVPPVgzYnU6RCk5PFl2cDJyZ2BxT3Y6eHJDSiQwTkIpTn4paE1VXWZnZmFmNn4oZzBAe0xxWVFFKn4lfUBCQSF+MzcqSSNGXV8weGFLJHhuV0BUVVZpd2FdYDRrLzdqKFhY''@;'; put 'put ''bGI+YXd7YSRnVmBXMkkkb0dzZFRnNWEiP0Jid0w2X1JpVix7bkteOndTfkA+T1MkfTN4WCxRWjdnRzBOdV5zNENvL0JfeTMwIUQsd3BpdjRzPFVaYUEkTFV2ZH1GPzxTNXZBWUZMT0lqR0ReJn5JaGd4RlhBS0pnb05VRFRGPDdobFNbbXNQPCt5P1JCbCV1aj4pN2BRVjBse3ZbfkxObEQ4TSNb''@;'; put 'put ''I1pdQSYsUTdYYENedyMldiJLXjI+WDU2K08zUj1nZC50am5qLHNsVlVheyRGbCU+e3NsM2Q2V3k3cF0uMEtyPX0rdzp2OCkxcjN7VDdGU2tUT0wwUjRFJEJ7dVAqW3h+VEVqbjRaITU1cDpTIzl4QEk7Z2NHejpRRl9IUXFCZH44RixkdCpIV3l4Ukk1Km8hPix1MURrdTJWM2V4VCExO1VVO21g''@;'; put 'put ''bzQ6Z0lAb1lqMF5dLEVkb3F+NVJbSFNENEF+UTcmQ284PUcvPmAyI0Y4cjEiPmBdSkI7ZE59OyRQb1Y5cHlAWl5bKG1hKUVzbk57NDBKflJ+bCQ6YDpNd2UxcTJfe3RiOSYicno5UyIsUSw3ejkhSllMcTc1Vno7dzZyQXNnOFZoY1lAR0gsajdrJl89dTkvJH0/Z2lORz1lfkhnc21qS0s3bV5L''@;'; put 'put ''MCxqIkMrNUZJVXNbV3tvZS9mTD1VNGBZQF1JdCVBUTwwWSxEbUJdNWt8XTBiOmVObVlGeDt9eXxrSC8qKi95RUQwfFlZOkF8OT9BeXEvNiNvKylFWlIwNWxtK200T2FpLGthKFUqW1djc0loRHx4ITZhdmJhU3JFISlPYSxHSiR+ZHVxUyJ0czZuPS9EKCx4OiN6Q2x4e10odCQ+WDB5OkcraHBW''@;'; put 'put ''YDlqNGpgSE1BZXY+fmZPZmBOZ2pXe1omN2FkKHR2RFo4NWo5dn49Pm1nIjUyXXVObC5WVippPWYuNFs5d2pvWTR7Kl9TXmdyNzw4R3w4MFpfVkgickhxIzBFaEY4eVNwLlVtKmNFRm1DQzlwJDhFXlphUX1IKyRVMz0wRlUwL3h2el9Xbl1tbW07WGBLeFs7ZV5jTExLSU9qciFNSG5YSUd9NVBN''@;'; put 'put ''RzREbX0rc0BPLF9WPHtaQ1Z+PlcmQk0zZihGNldbcCJZM2NEcF4pLG88R2ROQEVRRWV+RDNnOnhqOmlsUl5vVSwzNmFHfk5ddT0hSW8kRWFELzcxMkgwOTwqPStwYyJ9KzczajApQGEmcmxGVTVXaV5ATTZKakNqUTdtYWpCZ0N7fX1MVlRmMSkhPTd1UjZDdTJTMzIqcUtIZHs3cUpSTyouYClF''@;'; put 'put ''bUosLHd9bzw9cUEyTXRBWT10SGg8bnIraE1uUzRqTD0mQl1GYGRJYkI3TDdIRl01SHhrP08vOm5EdkFxfHdvZSpPUW1eMzl0L15sY1o7ckZKXW84LDdLNSJDOXdhTTlCelNYWklFQS88KX0lOT1nX1tSfSUreThiMEw8RkxITDopSVFsZWJsOEY8VCRAakB8X1YlZW00VztQdlQwRSUkeTIofHJS''@;'; put 'put ''WzZwX2dZJFJ3JEJRTndHRkhLKXE/fU09RGc5S3Z2PlNTYUBKNUQpMUVbOXZ+dGlteTV4JEZdS0J6U2lWOGwkLFtkeVlZK0goXVNvUVptS18jdXhqZVMvfF9wL1lvZHlafjhLdWtoJXI0dDpqKkF3ZSxIe1t8bENIN09MOGlQJDNCQVNTRy58Vmc5dCZkUDJRX25IWiRERFtSMClVaUQ6MDdOdF17''@;'; put 'put ''I31rcj4pe0JFZTBnPEhjUVBqd3VhW2wqcW9PLzMiZUI7VmNQfGIsdls9N1IjKW4rMXNiT1csZD5kMGk7OD0lKjxyQEwvRj4hbSYsVyouOGpGY1V+aD96Zlp5IkNgMDlhRz9bOyFHd3tAMylII100TT8rTiVaU0V4eXhtWXZHOUhnZGB6TWZsZihqOCU1dmJTbkQiPzFzJkROIU15TVtvdmhhIkE3''@;'; put 'put ''RSRvLiZjZFB8MFE3WTtJWjU5N0FvTDFePkkiNmw7eXk5ZXgqfE1ta3wwRWZ4an1tNmFeWk44SUMsfFhIWGJHdGlIODx5NjRwbjkkaztObTN2TlZ9Omp4dktHRGpCNUA2VEdWbUxZdS8rRkx3OXJ4Ri9pVU1bVTBHcjhjKWZWflp0NyVCdXZ7UEIiS2ZsSSJifXkoUHVfdmZRYzhAUVhJXlc/Sn1M''@;'; put 'put ''N3RFIzlSbF5nOzd2QmdLYWRCazZbNDYoST8qMyIxVSE9alZFdSxKeW4jVSZ5MUMqZSo1PCQyJGVqdCl1Q3NhYH47ayNgRXZSKVkmUC8kRiQ2XWpfTzZsX2VpOUZQRE5qb2hfUyhbWWEhSGh+O1ZxckolcUREZn5td15aSTZEQVdqN253WltTP2ZpKGpAO0VZUHBLaE5nJi5oKXM6bi90b0JZSD5N''@;'; put 'put ''aDhKLl56bG1xfTZiRXheYEtAb2ZkVV4mOlBGV0QrOF4uNk80dEomaTByJVJCbCYsKW47T3lZKmk7RkZebCMhZnt2IVdoPltLOTl1VjhCMUtZO1ApIWY7KE5EXn5IaUtfTEtWaTReaDg6XUBnVkRxJjR8JGRvWV0/RiJjcFhLIV58Xy5xYkp9bkc8XXMqNWZvSmtVUGRJPCRaTm9oWjtyVUpqTVNu''@;'; put 'put ''K3k9QG9bSldae28oPVAsUE9YdUUvPWJkNyUoS3hPNDJsX0A+cVdYeiZQLHcrcm4oPipVKShMeGZwZ1FxVF1UdjE8IjhKIStOfF9pZXs1W2lfIj55dkl3XTtCc1Q0LCRbXXkrYzgrcCVpPD0xbGRuOURhKzc1JG5jKCZKU3VOcXBFKmc+MyN0W3tCdDEjVmxedzdsX0FwYSlaJXdJakRhOjtibFg0''@;'; put 'put ''dnM2IilhQEN6c19UJWEvUHZTKDg/OmdhYVE0fWl9XkE+SkciLlk0fjp0d2U8IyxFVEB0YTp9QE4vcm5qKVNdOnYmZmVAPmFRUkokMmA5PSJtTWVQNGlgN0wvLE9XTyRxcCUpVndRbzZuUWdIWFVRWiFbTVhZJitZWj9IWFFXZSszPjBAMWpATFN3IUwwbXo0cjpgVHNAQ2RFJThAKWcuI25PbzE1''@;'; put 'put ''PiUvIlFAUFB1WF9jeEs/OCEzbWw0byRuRXQiXlgsOUBOPWMjdVgmS3YhT1IoTSwrU0o0Rz5GNyw4X017MGNyflVVMUYsUzRTIjciW25xS305ezJVUmNkRjs7eGJlfkFkd10qdVBXZTx8cT9DfHQmWCE4djJpbF06XjBANj0rYXRvaT1aZT0jdyshNTUmdypwKCFVRDd3Q2tVPzRyVz0qOlRISWJs''@;'; put 'put ''Li5hUz9rS2VMSDo3WCEzYH00N3xKfWp2anZIanJyXmA3eyNSM30vJnRpKHcvWj1feSV9NVpLaU5FbD46PFYzQSpHIiMkeTZ1QjF8T3dFcD1DQlFYZTRLPDw0KUpAWkt3UlFANj5kMUpCW2J7Ol5jdS9jZ0IrWERudkxeU1IjdHFdal1LaX46UDMyPV81VlFycDE7KC5RWGVdKSU3bHp4dWkpTko8''@;'; put 'put ''UUROMDJSY35ZUExlYzxCYkpCfDlPTmpAe1JLej9kQGpiSWlUJFZNYH1YXSQ4TldjTSl6PCxqWWApYy8qdjdNNVVKTlt6UH02TDpWbFN5QXNwVWNNKkl8WSlAQzdwMTk4KjVJbDZOV0suLE5CNjJlYVp3bnwyU1V7MSlwOHI6R25nKTxMXXtMJktuanpESyswWkdwN0xxUS9dVX1nRTBWdyp9RD40''@;'; put 'put ''bnlYSHU9WWEhU0teKGZTOHssYkQ7a2prcF4rXXt4d318PWJdOUpIJThpOnZGJXJGdjBfZ2xAV1NNYCl5aFt4cGM4fj1UaDd5a3BqRCxGY2p4Sj53emx0WFs1fXM/PVd9d3NJN29TS1drJl1HUHFxez1OQzVAOE82aU96NWMwWTdDd0hFOHgqbEE4T2VHRjUvK0wrYHZDRC9zKD17NnhiRWomL3kh''@;'; put 'put ''ODlrMnxjUSQzem1nMzxeR3MlcixCZlMkdDlPMSlqWl8lb0FqazkqPjRjTE9CZyEvQzt5InohL18iZUk2IUJUXkR7cilrSEhjRk9jblR6dSM7VGsvLn5FLDBKN2Q3VVtWWChdKSlxdVVYUWpGN34vNSg5WXRETnchSVFWeiNDaGlmQilsb0owWy90ZEJZSHlMYTFgS19mSkslNGBWKyFVaj0zWDZq''@;'; put 'put ''WHRhbTlAT0hDO2MoPThjZFF4OUM7WCxZRzQwZH1sbnFJI2VaSHxMW0ZuUll+I31XK1ZHTHllR0xsKmkuKCM3IjgyYm4mNmJPRzolYCheW0l4Kmo3ME8pMHV9KFBRJjNBSjpAP1taVzlGM2A7XVZLTWNmIk9lYEBKUjdHaEZrb3UyT2lbT2AxMEsudDVUX3kxSG5sRmtbZUJKZyxSfXlTXj1Pb0pZ''@;'; put 'put ''O11AYTRwLFdga0Bob3ksN2whXSo2WVF1NiNJc2VxYypoVnZ1P0YsME5CQjpMUTVeWl9WJTxlN2RiXl1JLmo0NVRRVWo/W1M8PDAxWytmck0vWSRPbWYpdGBuIjVpOnBVTjMrJEFOP2lnODZrZChlR2ZYRjZpInRiQ3draCtFK01LZzpGJkcpR05deH1kUGkkTT53UGx6VWs8Olt7OmpqbVsvdig7''@;'; put 'put ''OV1qW0k6UHA0SXt+N1spKkA9S11uN1g0Xkc7e19UXUlxcGZyN0s/YHlJfkRMVG0jJihdP0o5eXlmTyokOE5yX1h2YVtHeVlRYShJNytJTHlUeXlOUHFkZU1+el53fjEuUD0kWWBKZGcscH1VKDxMdCksUUxqI21MekBNYlolUDxedHNrSyhqeShlXTliUGQ9PDhbLn5xfU9VYCRWPXF0Smhubmcy''@;'; put 'put ''eClSWy9jbStVWFt8OTVZLklHOVlnWmo3M1k7T29aVTtxPz89e013XikhODBrIX5NJSNVKFtdcCUhdEBbfns0UnVhPW4zYzVveFVoaUh1VU9CLkc6c3ZXcHo7Ykp2ST9+NzcuZ2BqUVpvWCk2UlN9fXFAZ0goVml0flkzdTs6YT48WShWYm8pVUoqTE83OT8+IXk6Rl9KeCxQOWRdTUlTQl86OCpJ''@;'; put 'put ''eGxpPCV1MWU1VjRnIn1GQ1IjU0Q1MDxVa3JqO08hb3FxPlhWRzU5bVJKXUw/Tkw7YXY2fDBAKG42XjxbbnhgUmIzTkw0PCFaMyxuUTV3UTpOOTRNU3NtQlJoWnUmPW9PSH5kSSMjYyVaSCZ2YDVOaSFIRVh8anhmeyhkVG4mSkJrWVpBeSohRCF3cTp4PT53IlorOCE2MEM+MWdfNWo+W2g5RTRr''@;'; put 'put ''dyU0WUVtSER0OGJzWWgzRXg+O2YzRH5GUDVubkZHM2ZCWWF9KUxXfT5JOklXZW4rcy4qRE1pTW9yKGN0eF9bVWdeZEp6ZkRnP2xLTlhRdUYoXV4oNFcwPThlTEpkb2hZbHxZfVNuUFJzRlkmIVlkP3JBKj06P31nIyF6WlA0MWF1LDF0fEJEbyFTPzY1RHxKZU58N0BjRDdtOi46Rjxsdj9fbHM5''@;'; put 'put ''bEhbJHh2RilhRnUwQShycUxNKSt+c1RldlJAQVZrU2Yzc3x+aH5ud3tmWCFYfF15SzNybUNBczd7Ui9VdkFrTyEmQyFfcDYpTXpkTiVydzU0RCFqL2I5W150L3hbPCVKNj9MQnpEZFFiM35LWz12RWNkKk49QDcmW1dSZD4rUUBZeWMvUGNXRk0/XV94aSFyZHpHdGJNKU5KNlltdzpxOD19eDsi''@;'; put 'put ''YEY1fjAqZ2gwd0IpdXt1RTw3OGVIYzpRfChAeXVpdVhkenBVeSl+WXghTWxPIVI8QmRVLyJAL0QjY0pYKVg5RFE7OW5faTlhc1oqZGp7enMudzoyUi4mcksyQiNlPVpMU3BEeSJXImBYNCYqNCo8TkghbEJWTjpWMC4pYHFzXWJYQ1dXQ2w+OE5afSt+a2FMOVt0anhKak1qTndwTCFRYnpKcGlO''@;'; put 'put ''OVdUP3p8am1uU0habDxbLEUoV1s1flomSSJhVi4zZyxZaT55aE0oQXx2YCEkLHFBRyNwKXp8RmV4ZURQSSE0TjM4M2Z7SjU2eVszUXVedEEwSEBIKnQoZ18kdXpdUDBQPz1NbF81ZjR0cyhrfHZzaUdKUVR1UG5WSH1reXF4Vy5XTSpwdFRmMjd7SHk9KmoyajRHY0ZmcGFleHpeS1o9TSI5Oi86''@;'; put 'put ''UkZrZisoTkx7PHJtQ11IPGNnb21TXzt3Wk55UiZ0L2hEaH12NTYpe1Z5WS5UK1ZmdDFFYTlYZlpfRDc6XkwjTlNKeG9IOSxjQiFMaEJkTi4sa21aYyJGaUl7dkhtbjw1KF9IOWdUTFZoZWRWOUVTeys+cmxpcm1vYUNiInh3Q08vfVVBalVTV0V0cCZPV0IpWWBFY3tbT19OdUNPLn0yeU57SjRB''@;'; put 'put ''P3IwcTpsVUt3MF4xWFtrSCwyZ1E5ckt2UUR+YjtPeUl+KHt2b3pyQS46ZjsyQWV2eSRHdV9xbD9Kc0pvYClka2R7Nyt8K0pzSi5MdS5EN1dWK2V2ZDc5QU1NSiNDa3UqdTM1Nnk7ODJoP3hCNmZXXjFTM21bcTR7cnZbVnhqMH1icjEweDM+cXxvRF9lTn1ZREZiKSgsWVRuQjtqKT5lTV5zaG84''@;'; put 'put ''d3tqUU4oQ35wQjBoJn1nXyV1Ulc+KGl2VE9AOCtISjswNV1Eam1nVnBPRVNvZEcrfkwzc05pYkhaekZbfE5Bdil6ekhbM3dGVU51YSt8UkR3TW83RUxGQHQvIkp3TWNAXjxFUnsvWHVTa1FGT3AwNHpeekRGQHxycTkuQndiR3c+KChhK2MmOj5DXSVteHg1KkJsR3dUOmphS3VCWl5xWWAqZDVa''@;'; put 'put ''emc0bUZmY2xHWCFWWXY/V1hXKTZkUkNvRzpqVipQcTYhYzRWfiJjO0FBXltdXVpSQ2I9ayEmbDNVVC8scG5HWEwwem01KFZaamlTXTpMbHZ3ZGBhWU54Y2BFNmAxcmhhcWxFTnhMPzlZPlJpUmlAMnc7dldIOVpCTjkzaGw+UilHVCl4dWFJWXRxfDBRcyJvLFdxSnd8SXxbOl9lKW1ob0VDVUR0''@;'; put 'put ''TmJvelR+cHFiej4rKVpdb0I5dXpyfHlfOy5Ndl9zK3R7O0c0cU9eKEZaIkZzUSQjVncmYHkpKGROeDRgOXFJZ0RGRk9PIV1XJjNDMTx7Tj88UWN5eFBpLys3XTdGdHBxfWR5KF5fbDFrXT8vQU4oWkI4VHxjTGQzcGQrfmFpImVmLzhbTiV6XkglUnAwZypwPVBIK3Z3NH4jMDtyMj4ib1U0MF5h''@;'; put 'put ''WXx5VEtGT2t9aXZfc1h1YGVwX0c1JX51ITNXeEZ6MStDLGF8bDNoSVJGMHB0WDdHfnF7U3p9UTFZMXthPSw1UHguUmt5c3B6XzloUVo8IUVAQTlvaEtQTWg1b3o3I1Nlfn1HMSouaE9KMGxXYndKelMxO3gpRG5aTVp1SSooWUlDQnVMKUY/QyFpeFJRfXV6TDh0SU1KIkQpMSFYcWt+WzszUlFG''@;'; put 'put ''T3NEN1JAaCoxT1BVdmRtc3w5als2WDcsZ2dbfUpCQWFNQlZXVilCXWJXekBLdiZNV3txQnNbQkY0QDl4ZmNxQm0kJnZ0XyRecz0uYlJ3SSpyYUIvMCp+XUBKSl8yTl5KKCZrMlU0MkBpSDxlaFFHNzo+XmM7MnZ0K0RyX3YpP1AkOSpxYChQcU8/NiM9LmlXeDYsX25HaCg7UzdNQz8ve0o1OXNn''@;'; put 'put ''bTpjZ2AkaXokKEZsTzh8XzhlVyUkIVciOkB2eSpgNyJSbjNVUEZiUlhtT3VfOiJXXzsxdTcmOF0lRHs/N31hNWMuNGFqImN7MXVlNktYXl9La1Bkb1M9dF8lbz50fTc3enAzI3JBIm5kTklGOU1eYDc2Rzx3PmREQzRjM3RqK2ckVlhjRklFM2tjUDB6P2FvWmZRJnhMTiI7NiRzbDAxPUtWUUNk''@;'; put 'put ''KzNOekF2S2dSPWwsO0NHcCEwS2cwMGpHI3FwZmJQUGxeOndeOVU4SEBbdWVrOSF1MVB4d2xmcD0pKE5oIzRQY3glLDcoTHNnJFJYcFMva3ImN15CNF41SWp5VCV2SnU3XkJ2ZndjTEZJTmZhVmdxJD1dd297KiI6TXpoPihnVkw/NktRUiNyR2g1QylbTl5tdDx5JHRdR3dfYlQxTnpLeDxncjUp''@;'; put 'put ''fihQZkN4ZTxiZEkkVTMvWD5uYUBmJGt9ZFVWcTRLeE1nRy9SPGVhbTRBOGptTTl4W3wkIjdeNUY0Iy9TRDJzLFpfZCpAa308QUE6JX5BRUI4MSUsJm9WbExdKltDQThJPkRMZkB4JjtgImREbTU0bz9tfFAyX0wyKy9Cd15sMD83PHVtPDhWV0t5dEhXamMjaUYpIXtGSndUJT5CMV9qXTsvN3As''@;'; put 'put ''P0ZJV2lzRWs2Zn5kKEx1UEQ9fEUmZC8wbTw4Vm5uYWNwMWA0WzUyY2NFaCMjfUp3ejx4e2BkOCpMUnleTXYhRURJITxbQDdra1c6MTFXWyU0dUdzLDdmLGReSnYwJnkkX0x4YTAmTiNhNXhhelZwb31HdHQpLyYoe2csM2BSYyFEd1J0R0FeN1ZQTCNEWWxLTkJ+bEI7P2g7Zk48RHpSYjszW01+''@;'; put 'put ''N0wiKDplY3xnampQX2trKTc3QjFeY1JkQG1UO1h0ZGNEe1ddVWlxUyRbT3RsUjx7TzwhIyR9O110ZC42Y012cDNzJTFZTz1AbDxpVD09WVhWdnErbXJ3VU9dJXp+cC9TRmMsJTNkamp0Z2t9OUR0bl1wTlh2aDRsYzt7WiQybDF2WksmW2ZFTG0/JEFNKSl4Y1NNW2s9aG5NQyUuME8ycTRyUWF3''@;'; put 'put ''MV5RbWVnNEMxJjZQVnB5R2Z9TzlUWDRvLDVuMHw7VCVWcVtLXUdQYlc1bjl9SUJ3clNZLFQqZWVaN3JRblQ4T2gyTzc+RSt3a0hEbl5jPjJsMj1qbCs0d2NoYStTMGQueVA6YGgyL1RLaXB0b0lfdjx5UUZTfmkyeSFdaVpJVlpKdH05cXNqWSVIYy47Zjo0bFs8V2JGPDtlMD0pTV9qR0dJa0Vx''@;'; put 'put ''MikjTXY8OlZvL084Ul9UOmQiU2M3bFt0Y2ZGUGl8RmxWMyxXLEJieXBxMGcuUzVCQGd9NHttSm4+VFRROXhuKXdaNXtJb1EvTyEzP0dsT3l8KW0zVFsuOU9TJk5taEt3PzJXbH5uWlBRXT5kMDA5Qn4qTHg5QFA1dTUlSj40YSN0dXxGMDUlUS80YTpjTWRFW1J2Qk5COD9tKnVMNDRgW20sYCN9''@;'; put 'put ''NUpiVSJkO21nJUIjOlpBZWsxTHtwb0hTdU4hX1hMOkZWMFhwL0ZPKTRweVYpXTlIczd5RTpweVZGZz4uIyVvWUA3WjpTc0AiKSNUU1s/ezo1TygudTxBO10+RC8kX2lqdGREMnY8fWBOSltZPTUxIyM8QV5AN1tQNnBoTDtuKVN8aTUsSkp6OVdSUGpWWil1JiptK0lSfVR6cX5YZTQxRil0dCxh''@;'; put 'put ''bSIscTdRP0krZ35bTmkyXkBEL1F6Uy42bEM3QH0xMT5kK1hfVWZqY01zMXUwN0RSX2QpVkU6S1I3X2FYXkEsSmUhJmMpYWBeNn4qMmRUQ1slbD0rOCw1ezpuIV5nJV52LChudUl7YypJel54R0YvI19TVGo7PVpbMiJPVHBCTzg2ZnwlST81ZlJSPT8uYGQ5WWx9eEJaI0UqWUUqdSZkMjFwPFJp''@;'; put 'put ''I3o9biU9e0lOVj9ESj9PajpMXWokOF03aWlAVUpPVTQ9UjpgJkZOUWtbR1NnNl03R3VwM0QpfWRLdFJCKk1ANzR0PW1oMWJtUTkwJkxpfHNTfX43a0xYTSIqeEssfW9VeTRhelQqMHE1SyJddCskXmldRDAkUSgjQzxwUVs2K2pQS0B2Ri46WltpanJeOlBSU3NGdjpQfE0iRCY0NlFUPUYrcyl+''@;'; put 'put ''ZF1uSld9dEE4c3hhMXdedm59ZEVpe2dFeSpKdH1kQUdUSTQwdktjLG5ATVR4QzVCQSUscXxHLCgmcGw0VVEvSyssYHpqbXM8MSNDKHxhaih+clpnfSs1ZXNURF5YRU9eYVpxYHNaUlc7ZmozLDEhKWVIVjhEKzEwQEhBVU1gamJzbmBRbE5Ucyl5SEg6Y3NDfW4pXyZsT1A3UmJxV2UvLzA+UVRd''@;'; put 'put ''e2J0YnNjZDVoYVMyLjc3R0tXbikjd3hrPn0uMFhZUFd4e3NGRi9tZiJFJTlFRChEN31WMWs6PjMwL2I0ejttdXx9QU9SVlsiPDk/dChvdlZMTWJVfkZMTCJbPVNnVWs9dSs8cUxJajJybTYjd0daI21zdTgyZGplU3M4IkFOUFdjdFJLUFc1QE9YZk9sLiN3MWhBZWNjeVs1QjVSWE9ldy5BS2U+''@;'; put 'put ''O2QzUWI2ZD5NRTV1VVcjbFNhSUwpOTouSUlNKzR1VX4hQGNYS3leaSRgZDpOfWdsRiJkdyFdZ2V5IVcsZX1jUTNELDlNOS5hPTA+MV1iZTpaOW9TJH1OXnRId2daZDN+IW1WUVRiNU1Zc3FMU3JYWW5WPUksTnhgXyhOTnh9PjlZaE5FKDNtM1F1XW8vVUkwWFl7fGlMeGE/eVEpIiZDLmk6VFh7''@;'; put 'put ''XWhsaTFkSEs1Xnp0VGosV15kXkRmNE9VUT1VNV0lN0hYQjslN0h+NzZvS1VFPXBVPE0+Ki80YTU5eSN4WSVYej4za2FPQW5Fc2NHQT9NcnlyR1JBe0NyfH18QjVnb2BKLHVSYyJKdm1fb3d6b1YuNDNoKkY4cy5yRmBbc2Q+blNKNFMmaWZQKCNMfGRfc19tanNlJTMwVlg3QiZXcF18fn5RMip2''@;'; put 'put ''JmU+OGRQeEFydVpeXzRRdmh2fDN4YU0jUTtbKV5hTVdoXyRjNCUmI0JaUVhwXiRPZGxaMkYuNXBUUT1uImlnT2NdeTY2YGRLWCguZE84QmBOejBUTjYlfTtkRHFhSH5VWHR0KTcrc1oxbWAkNitzRUVjTmJmeypkY3Jsby9XMVFATWRjV3BaQDdmOntnZnwhc3IvKVIwWCJjNzJ5XjFhWXd9N1NC''@;'; put 'put ''U3NUQi5YXWRaNjtLJVRZNlMzWi5nXjVKR3xnQHdfP3N4O0NkZU0wbnYraUNrVmkyeVM6MDt9Pj9+dEFnUndreGhVL20qaXhRPT0mVEpaUTMkUDFDRS49SVBCcCNIKixESHgjal84cWRDaWgqQFkxYElyIVV1aztuej5EdzZrX1theUVpVzMyLy5wXSIxdT1VdnZYNi41SlZXTnEsazQhayZuMEtY''@;'; put 'put ''PytOWzZmWU8/NEApY0hgamp6ZklpK2ZNSnl6SCkyYEN5WDZKXzI5fHV4aWs3XyJ5XmFvL2NbTigmfDcveTBsPHZOMkBSemhBQDJkaUIuezlFd2tsfCpNQzBjVzB0aHk/ekdzfDtYbGdzPV5jUkk0dz97RERPbzd7Tys/RC9ffHxXQmFfQGp8JExCSHNzL15hdlZwNHZPWUs8QmJ5eTYzNSVAU2Nk''@;'; put 'put ''cDJXXjdgLCRxN35QfWdBeUNGb2crZDM2XSUiMnksWV07YUA3RVNTc0gvLip4a3x9fDM2I2Nzb3k1I3BsI0JJV29bO19DTzRzW3YpQilhUmJqJCtgcXMmLm07RmNJMnokajBMNEB6OGUldnh1XntOOXo4SFdoe25fUnUpZUVFakwzc0swNWYmb1kwT3FaP0k7MDNKOzldbz1LT0xFXTJRTWQ7JkZe''@;'; put 'put ''QDpCMlguLDAhMiROKjxoNVZySDlSbko/NW8rPFlnTSRaPk1ldD9IS2k1dGFPTiwzTyNbYkojTXZEcnEoTDdvN1JFRzJaVzA7ISxaWldiVVgma3lFTj91cz15dyp1QjxBZGZhTFtMcFE7REJnSUhrNSwhIVUsJklUTV5qJXNLSl5WWXB1WTQ/dyx6ZikucW4lVmI4OVFISDkpX0oiNj4jfjxHenZD''@;'; put 'put ''ITY0ck4rX3VxIVclcDQ+WCFST2FUaV5AJlJJS18sRVAyJGJiLlhNTHxWQERMU15dKkI6NVprYT0qI34kS09OcyMrdU1RTCwsSmFMeG5eVnN9eG9MRW5VNm91a0UsVkhFSi87Q1tHYC9WcyRJMlo6STJEfmp9aEtpMzJJU14rQ146d1QkdnEuJW1rNXAlfC5FRU5DcnNZXi49SDAyfihDanBkTUN6''@;'; put 'put ''LjwubzxjZyUlYUtiXWg2PDBFfDhjdnopb0s1MWVTfnllMmhFZSROazxfL3Z+PVM1V1Qsbm46WCVgM0JkWEtCPXglLzBIWnRFQ0ZlViVaZGFPUWRfe0szUkl9L0oqU1lrNzFvMVk7alg3T3A9XmZ2Q2ZKWlBlOHQmSHpVOkwzelFXLzQkTUZqdl40dkNnSTV+ITVjUyNQWm1JPiNXaGY6PD9pdzBn''@;'; put 'put ''XVtzMX12RSxTRnNLQ0NnXjtRXTFgdiEsTExlXjEzbjEvVnlxOU4lN0U9dF97TGNxV0VLfG5jPnM7RWlQQFopPDB6PFVGYnd4WXBpT2ZsTypFbTNEfC9sTDosITwzaEFHNz5LbFNaPnhuLkNgUyNwaFEuW3hVOnNyVjNVNSMsJlJQNDVhJnN5UHFHIy4xaWFyPGFSSSUreD8kak0kTjNeYjAkVihp''@;'; put 'put ''I1J7aSRwdGlTQnZ8SWdtLyldfnxYPHA/dEcrUjdVKDYoYDV0c2AqZ3p8VUpbKUN0fmlMPUBYRywlR1l0ZVUieTwqPSNPVWpKbmNPOHJTQzx1ZFl8Q11ven1xfEtFWnVHXnFDZjpfSlBwT3VEKFp1OGJPJFkrcCNOLnc2Z0VNOjlhTS5ia2dYWSVwckl1N3l1OV9HJVswJDM6PW4mN3xJM05ETzNK''@;'; put 'put ''byNqM3BmP094MC45TWFoPlQ6U2A1Kjl5Rz9LIl9fa2c2T0Z+Rn5aZH5QK2FNbn1RTl9nS0hMV31iUHIlaFhUaSokSXQ/TkJ1d0ltWXAuWkxkV3lHIWYjYXExfHc3JFY/SHsmR3ZieEBdNSI4MiROUm09VW9EcztXfiUqcV01STNubCF9VTcvbC5SMnsyVjQhcn4hV0kpO2F7JV1pNyxMQ1JGPlpC''@;'; put 'put ''KWJZaEB4Skw3dDskfXc4ZnBOMXhsJjVOVjYoYnspMUw2LGc9OkkhPk4rJFImJHM8blskJShnczx7O0E3MTNwPW1oSnJeWFlyem5aN2Y4QlJrcjdNS1d2KVRpNURjdHpOMTpwZ0w4aFIzeXgjWyxsJUN4SXVMJjRbMX5UNWlqViReVXxiUTRqW0IlZjtjSyR5M2p8UjxGSk5PPksiLHhuLHdSKnJW''@;'; put 'put ''PzpzXTtneGQmb1Z8blU9bz5vXi5bZzRic01Ibl5uPSVwSEt2Ilp1fUNkPlNAMTM1fFhAUTh9ME1xQTRpV3pASCJvQGBpTHBWXVFofiErTnVvZCVMN3ZbXSNeMT59azpNI1kwVmVMOUg+MWZfbiV6Mzp0fXc3USh+cmFIVit1alRhaH04REIwfFdUfDR4IV1sekcoV3wvTXBaVFszKFR6a285dmhY''@;'; put 'put ''JUVseHBTNis7QzF7SXZnXVRjc1Y8b3JaQltVMEhuTX07SHxpQT5dYFRsVGdVMmRwUWY3O2BPRHs9ZXk9ajlXWTssVSlGcClvcX5NVkA7QzM6cTsuMDFDU3hKWkJXPmNJPUM1W0RtTkRiI3Q9ajBFMCl7QjhkUDg1bmVQSVgoeSk8ViF1cEJGP15OdiI9X2pqVVRxPHRXLkhCWVtqOn1XaWVEVndC''@;'; put 'put ''QFsqOkZ0QkphMjBvWVpYaiQ0W2NFalIvYzZwOT40WiUxKEdyLHFkIyIlUXslODB2IlUhb0xCXT0meXMlRksuVnl0IV5Zb11bdSJieStHbldacXpSW0p6IUUzKFFjK0NCTEdUbmNteVIxMFRfaTJyJmhRUWRGSioyYkxvUzMubjhWPSImaS9QdDpseSNCMEhEclp9PzszMCxFaVVVW0RpVVR1P0he''@;'; put 'put ''Z1NSdC5OKC4kMF0sKEZ3NyVLaXhUa0ZUam1QVyxKczUyV2lMSV5vOX4jfFpbLEAjfHwzc2NJZHYve1YwIjB5YkshLG5KLn1HK0JJYUNvWFRjYlFSbX5OYV1ueU9Jb09JWmIoWlV4Q2RJZTc8KiQzPkI9KnM4LHIoWlRVOSNgWFsyQS5ETm8maU87UkFyOHo0REVSTS4/VW9LWnwlUnxrbGpNKiR+''@;'; put 'put ''Vj15QndaMiQ5TlhreHtMNDEpSF5oTF9GbkIxeVNzZStqXlssQXdSX0VTZ0ZdSm96RjlGRUReOmpnYl5uOEUjSUkiYypjPTpwS0lSSF5VLDUjdEtUPENkKl0jc01WWzN6Imo+LyRdKDpEOHJ3U3t5PSF6Uis2cTJ+NHd2Qk52KXBCQHMwNXxtTHg1ekN0YTphW1VNcEZZUlRrdyt7Ji48Zk8yJUVK''@;'; put 'put ''PT0kYnxAck1rVylhWjo2dXlnbn41azxEVktrOSFEaHBCNTM2Y2d0NmFuYUJnLzFSeCJTeml4dEByXWEqZjsxUVNYbCYmalJ1NDReYnFmWz8sUzYkfWpQaUxvbiYkVTsiLz1lPilUWThIRDJFaTk6ayU+ZzR0S3pHYkI5UlgvJFp+QzheP1UvdSo9NkduM1lybU1jX0JvemF+MzF9KVpqJV1aJm9u''@;'; put 'put ''fktiKTRUWzQsX2BEXTolZS42dHtDIT0zV0FBQScpKSxmdW5jdGlvbiBIRnQoKXtyZXR1cm4gbm9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oe3dhc21CaW5hcnk6cm9lLGxvY2F0ZUZpbGU6KCk9PiIifSl9ZnVuY3Rpb24gV0Z0KG4pe3JldHVybntwYXRoOm4ucGF0aCxkYXRhOmA8P3htbCB2''@;'; put 'put ''ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz5cbjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+XG48c3ZnIHdpZHRoPSIke24u''@;'; put 'put ''d2lkdGh9IiBoZWlnaHQ9IiR7bi5oZWlnaHR9Ij48L3N2Zz5gfX1mdW5jdGlvbiBaRnQobil7cmV0dXJuIG4ubWFwKFdGdCl9dmFyIHd6LGV3ZT1jbGFzcyByTXtfbW9kdWxlO2NvbnN0cnVjdG9yKHQpe3RoaXMuX21vZHVsZT10fXN0YXRpYyBsb2FkKCl7cmV0dXJuIHd6fHwod3o9ekZ0KCku''@;'; put 'put ''dGhlbih0PT5uZXcgck0odCkpKSx3en1zdGF0aWMgdW5sb2FkKCl7KGZ1bmN0aW9uIFVGdCgpe3JvZT12b2lkIDB9KSgpLHd6PXZvaWQgMH12ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX21vZHVsZS5DR3JhcGh2aXoudmVyc2lvbigpfWxheW91dCh0LGU9InN2ZyIscj0iZG90IixpKXtpZighdCly''@;'; put 'put ''ZXR1cm4iIjtsZXQgYT1uZXcgdGhpcy5fbW9kdWxlLkNHcmFwaHZpeihpPy55SW52ZXJ0PzE6MCxpPy5ub3A/aT8ubm9wOjApLGM9IiIsbT0iIjt0cnl7IWZ1bmN0aW9uIFlGdChuLHQpe2xldCBlPXtpbWFnZXM6W10sZmlsZXM6W10sLi4udH07Wy4uLmUuZmlsZXMsLi4uWkZ0KGUuaW1hZ2Vz''@;'; put 'put ''KV0uZm9yRWFjaChyPT5uLmNyZWF0ZUZpbGUoci5wYXRoLHIuZGF0YSkpfShhLGkpO3RyeXtjPWEubGF5b3V0KHQsZSxyKX1jYXRjaChDKXttPUMubWVzc2FnZX1tPXRoaXMuX21vZHVsZS5DR3JhcGh2aXoubGFzdEVycm9yKCl8fG19ZmluYWxseXthLmRlbGV0ZSgpfWlmKCFjJiZtKXRocm93''@;'; put 'put ''IHJNLnVubG9hZCgpLG5ldyBFcnJvcihtKTtyZXR1cm4gY31hY3ljbGljKHQsZT0hMSxyPSExKXtpZighdClyZXR1cm57YWN5Y2xpYzohMSxudW1fcmV2OjAsb3V0RmlsZToiIn07bGV0IGk9bmV3IHRoaXMuX21vZHVsZS5DR3JhcGh2aXosYT0hMSxjPTAsbT0iIixDPSIiO3RyeXt0cnl7YT1p''@;'; put 'put ''LmFjeWNsaWModCxlLHIpLGM9aS5hY3ljbGljX251bV9yZXYsbT1pLmFjeWNsaWNfb3V0RmlsZX1jYXRjaChQKXtDPVAubWVzc2FnZX1DPXRoaXMuX21vZHVsZS5DR3JhcGh2aXoubGFzdEVycm9yKCl8fEN9ZmluYWxseXtpLmRlbGV0ZSgpfWlmKEMpdGhyb3cgck0udW5sb2FkKCksbmV3IEVy''@;'; put 'put ''cm9yKEMpO3JldHVybnthY3ljbGljOmEsbnVtX3JldjpjLG91dEZpbGU6bX19dHJlZCh0LGU9ITEscj0hMSl7aWYoIXQpcmV0dXJue291dDoiIixlcnI6IiJ9O2xldCBpPW5ldyB0aGlzLl9tb2R1bGUuQ0dyYXBodml6LGE9IiIsYz0iIixtPSIiO3RyeXt0cnl7aS50cmVkKHQsZSxyKSxhPWku''@;'; put 'put ''dHJlZF9vdXQsYz1pLnRyZWRfZXJyfWNhdGNoKEMpe209Qy5tZXNzYWdlfW09dGhpcy5fbW9kdWxlLkNHcmFwaHZpei5sYXN0RXJyb3IoKXx8bX1maW5hbGx5e2kuZGVsZXRlKCl9aWYoIWEmJm0pdGhyb3cgck0udW5sb2FkKCksbmV3IEVycm9yKG0pO3JldHVybntvdXQ6YSxlcnI6Y319dW5m''@;'; put 'put ''bGF0dGVuKHQsZT0wLHI9ITEsaT0wKXtpZighdClyZXR1cm4iIjtsZXQgYT1uZXcgdGhpcy5fbW9kdWxlLkNHcmFwaHZpeixjPSIiLG09IiI7dHJ5e3RyeXtjPWEudW5mbGF0dGVuKHQsZSxyLGkpfWNhdGNoKEMpe209Qy5tZXNzYWdlfW09dGhpcy5fbW9kdWxlLkNHcmFwaHZpei5sYXN0RXJy''@;'; put 'put ''b3IoKXx8bX1maW5hbGx5e2EuZGVsZXRlKCl9aWYoIWMmJm0pdGhyb3cgck0udW5sb2FkKCksbmV3IEVycm9yKG0pO3JldHVybiBjfWNpcmNvKHQsZT0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQodCxlLCJjaXJjbyIscil9ZG90KHQsZT0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQo''@;'; put 'put ''dCxlLCJkb3QiLHIpfWZkcCh0LGU9InN2ZyIscil7cmV0dXJuIHRoaXMubGF5b3V0KHQsZSwiZmRwIixyKX1zZmRwKHQsZT0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQodCxlLCJzZmRwIixyKX1uZWF0byh0LGU9InN2ZyIscil7cmV0dXJuIHRoaXMubGF5b3V0KHQsZSwibmVhdG8iLHIp''@;'; put 'put ''fW9zYWdlKHQsZT0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQodCxlLCJvc2FnZSIscil9cGF0Y2h3b3JrKHQsZT0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQodCxlLCJwYXRjaHdvcmsiLHIpfXR3b3BpKHQsZT0ic3ZnIixyKXtyZXR1cm4gdGhpcy5sYXlvdXQodCxlLCJ0d29waSIs''@;'; put 'put ''cil9bm9wKHQpe3JldHVybiB0aGlzLmxheW91dCh0LCJkb3QiLCJub3AiKX1ub3AyKHQpe3JldHVybiB0aGlzLmxheW91dCh0LCJkb3QiLCJub3AyIil9fTtmdW5jdGlvbiBDeihuKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxuKX1mdW5jdGlvbiBLOChuKXtyZXR1cm4gTWF0aC5yb3VuZCgx''@;'; put 'put ''MDAqbikvMTAwfWZ1bmN0aW9uIHR3ZShuLHQpe2lmKCJwb2x5Z29uIj09bi50YWcpeyhlPUN6KG4pKS50YWc9InBhdGgiO3ZhciBpPUN6KHI9bi5hdHRyaWJ1dGVzKSxhPXIucG9pbnRzO2lmKCJwb2x5Z29uIj09dC50YWcpeyhjPW4uYmJveCkuY3g9Yy54K2Mud2lkdGgvMixjLmN5PWMueStj''@;'; put 'put ''LmhlaWdodC8yO2Zvcih2YXIgQz1yLnBvaW50cy5zcGxpdCgiICIpLFA9Qy5tYXAoZnVuY3Rpb24oRG4pe3ZhciBBcj1Ebi5zcGxpdCgiLCIpO3JldHVybltBclswXS1jLmN4LEFyWzFdLWMuY3ldfSksWT1QW1AubGVuZ3RoLTFdWzBdLEo9UFtQLmxlbmd0aC0xXVsxXSxjZT0wO2NlPFAubGVu''@;'; put 'put ''Z3RoO2NlKyssWT1mZSxKPUFlKXt2YXIgSGU9KGZlPVBbY2VdWzBdKS1ZO2lmKDAhPShYZT0oQWU9UFtjZV1bMV0pLUopJiYwPD0ocnQ9WS1KKkhlL1hlKSYmcnQ8MS8wJiYoWTw9cnQmJnJ0PD1mZXx8ZmU8PXJ0JiZydDw9WSkpYnJlYWt9dmFyIGR0PVtbYy5jeCtydCxjLmN5KzBdLmpvaW4o''@;'; put 'put ''IiwiKV07YT0oZHQ9KGR0PWR0LmNvbmNhdChDLnNsaWNlKGNlKSkpLmNvbmNhdChDLnNsaWNlKDAsY2UpKSkuam9pbigiICIpfWkuZD0iTSIrYSsieiIsZGVsZXRlIGkucG9pbnRzLGUuYXR0cmlidXRlcz1pfWVsc2V7dmFyIGU7KGU9Q3oobikpLnRhZz0icGF0aCIsaT1DeihyPW4uYXR0cmli''@;'; put 'put ''dXRlcyk7dmFyIHIsZmUsQWUscnQsanQ9ci5jeCxGdD1yLmN5LHBuPXIucngsb249ci5yeTtpZigicG9seWdvbiI9PXQudGFnKXt2YXIgYzsoYz10LmJib3gpLmN4PWMueCtjLndpZHRoLzIsYy5jeT1jLnkrYy5oZWlnaHQvMjt2YXIgZ249dC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIp''@;'; put 'put ''WzBdLnNwbGl0KCIsIiksWGU9KEhlPWduWzBdLWMuY3gsZ25bMV0tYy5jeSksRXI9TWF0aC5zcXJ0KE1hdGgucG93KEhlLDIpK01hdGgucG93KFhlLDIpKSxUcj1IZS9Fcixpcj0tWGUvRXJ9ZWxzZSBUcj0xLGlyPTA7aS5kPSJNICIranQrIiAiK0Z0KyIgbSAiKyhmZT1wbipUcikrIiwiKyhB''@;'; put 'put ''ZT0tb24qaXIpKyIgYSAiK3BuKyIsIitvbisiIDAgMSwwICIrKEhlPShydD1wbiotVHIpLWZlKSsiLCIrKFhlPS1vbiotaXItQWUpKyIgYSAiK3BuKyIsIitvbisiIDAgMSwwICIrLUhlKyIsIistWGUrInoiLGRlbGV0ZSBpLmN4LGRlbGV0ZSBpLmN5LGRlbGV0ZSBpLnJ4LGRlbGV0ZSBpLnJ5''@;'; put 'put ''LGUuYXR0cmlidXRlcz1pfXJldHVybiBlfWZ1bmN0aW9uIEtGdCgpe3RyeXtld2UubG9hZCgpLnRoZW4oZT0+e2UubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9ZS5sYXlvdXQuYmluZChlKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImlu''@;'; put 'put ''aXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgbj10aGlzLl92aXpVUkwsdD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGUpe3QuX3dvcmtlckNhbGxiYWNrcy5z''@;'; put 'put ''aGlmdCgpLmNhbGwodCxlKX0sbi5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwobj1uZXcgd2luZG93LlVSTChuLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLGlvZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6bn0sZnVuY3Rp''@;'; put 'put ''b24oZSl7fSksaW9lLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGUpeyJ2ZXJzaW9uIj09PWUuZGF0YS50eXBlJiYodC5fZ3JhcGh2aXpWZXJzaW9uPWUuZGF0YS52ZXJzaW9uLHQuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBpb2Uobix0''@;'; put 'put ''KXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaCh0KSx0aGlzLl93b3JrZXJQb3J0LnBvc3RNZXNzYWdlKG4pfWZ1bmN0aW9uIEpGdChuLHQpe3ZhciBlPXRoaXMuX29wdGlvbnMua2V5TW9kZSxyPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxpPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGE9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsYz10aGlzLl9vcHRpb25zLnR3''@;'; put 'put ''ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBhPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24sYz0hMTt2YXIgbT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEM9e30sUD10aGlzLl9kaWN0aW9uYXJ5fHx7fSxZPXt9LEo9dGhpcy5fbm9kZURpY3Rpb25hcnl8fHt9''@;'; put 'put ''O2Z1bmN0aW9uIHJ0KFRyLGlyPTAscGkpeyhmdW5jdGlvbiBjZShUcixpcil7dmFyIHBpPVRyLnRhZztpZigiaW5kZXgiPT1lKVRyLmtleT1pcjtlbHNlIGlmKCIjIiE9cGlbMF0paWYoImlkIj09ZSlUci5rZXk9VHIuYXR0cmlidXRlcy5pZDtlbHNlIGlmKCJ0aXRsZSI9PWUpe3ZhciBEbj1U''@;'; put 'put ''ci5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKEFyKXtyZXR1cm4idGl0bGUiPT1Bci50YWd9KTtEbiYmKFRyLmtleT1Ebi5jaGlsZHJlbi5sZW5ndGg+MD9Ebi5jaGlsZHJlblswXS50ZXh0OiIiKX1udWxsPT1Uci5rZXkmJihpJiYoImVsbGlwc2UiPT1waXx8InBvbHlnb24iPT1waSkmJihwaT0i''@;'; put 'put ''cGF0aCIpLFRyLmtleT1waSsiLSIraXIpfSkoVHIsaXIpLGZ1bmN0aW9uIGZlKFRyLGlyKXtUci5pZD0oaXI/aXIuaWQrIi4iOiIiKStUci5rZXl9KFRyLHBpKTt2YXIgQXI9UFtUci5pZF07KGZ1bmN0aW9uIEFlKFRyKXtDW1RyLmlkXT1Ucn0pKFRyKSxmdW5jdGlvbiBIZShUcixpcil7aSYm''@;'; put 'put ''VHIuaWQgaW4gUCYmKCJwb2x5Z29uIj09aXIudGFnfHwiZWxsaXBzZSI9PWlyLnRhZ3x8InBhdGgiPT1pci50YWcpJiYoaXIudGFnIT1Uci50YWd8fCJwb2x5Z29uIj09VHIudGFnKSYmKCJwYXRoIiE9aXIudGFnJiYoVHIuYWx0ZXJuYXRpdmVPbGQ9dHdlKGlyLFRyKSksInBhdGgiIT1Uci50''@;'; put 'put ''YWcmJihUci5hbHRlcm5hdGl2ZU5ldz10d2UoVHIsaXIpKSl9KFRyLEFyKSxmdW5jdGlvbiBYZShUcixpcil7aWYociYmaXImJigicGF0aCI9PWlyLnRhZ3x8VHIuYWx0ZXJuYXRpdmVPbGQmJiJwYXRoIj09VHIuYWx0ZXJuYXRpdmVPbGQudGFnKSl7dmFyIHBpPShUci5hbHRlcm5hdGl2ZU5l''@;'; put 'put ''d3x8VHIpLmF0dHJpYnV0ZXMuZDtpZihUci5hbHRlcm5hdGl2ZU9sZCl2YXIgRG49S2FlKFRyLmFsdGVybmF0aXZlT2xkKTtlbHNlIERuPUthZShpcik7KFRyLmFsdGVybmF0aXZlT2xkfHwoVHIuYWx0ZXJuYXRpdmVPbGQ9e30pKS5wb2ludHM9ZnVuY3Rpb24gZ0Z0KG4sdCxlLHIpe2NvbnN0''@;'; put 'put ''IGk9bixhPWkuY2xvbmVOb2RlKCksYz1pLmdldFRvdGFsTGVuZ3RoKCksbT0oYS5zZXRBdHRyaWJ1dGUoImQiLHQpLGEpLmdldFRvdGFsTGVuZ3RoKCksQz1bMF07bGV0IFA9MDtjb25zdCBZPXI/ZTplL01hdGgubWF4KGMsbSk7Zm9yKDsoUCs9WSk8MTspQy5wdXNoKFApO3JldHVybiBDLnB1''@;'; put 'put ''c2goMSksQy5tYXAoZnVuY3Rpb24oY2Upe2NvbnN0IGZlPWkuZ2V0UG9pbnRBdExlbmd0aChjZSpjKSxBZT1hLmdldFBvaW50QXRMZW5ndGgoY2UqbSk7cmV0dXJuW1tmZS54LGZlLnldLFtBZS54LEFlLnldXX0pfShEbixwaSxhLGMpfX0oVHIsQXIpO3ZhciBlcj17fTtUci5jaGlsZHJlbi5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKERyKXt2YXIgWnI9RHIudGFnOygiZWxsaXBzZSI9PVpyfHwicG9seWdvbiI9PVpyKSYmKFpyPSJwYXRoIiksbnVsbD09ZXJbWnJdJiYoZXJbWnJdPTApLHJ0KERyLGVyW1pyXSsrLFRyKX0pfWZ1bmN0aW9uIEZ0KFRyKXsoZnVuY3Rpb24gZHQoVHIpe2lmKG0mJlRy''@;'; put 'put ''LnBhcmVudCYmIm5vZGUiPT1Uci5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcyYmInRpdGxlIj09VHIudGFnKXtpZihUci5jaGlsZHJlbi5sZW5ndGg+MCl2YXIgRG49VHIuY2hpbGRyZW5bMF0udGV4dDtlbHNlIERuPSIiO1lbRG5dPVRyLnBhcmVudH19KShUciksZnVuY3Rpb24ganQoVHIpe3Zh''@;'; put 'put ''ciBwaT1Uci50YWc7aWYobSYmIVBbVHIuaWRdJiZUci5wYXJlbnQmJlhiZShUcikmJigicGF0aCI9PXBpfHwicG9seWdvbiI9PXBpKSl7aWYoInBvbHlnb24iPT1waSl7dmFyIEFyPVRyLnBhcmVudC5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKEVuKXtyZXR1cm4icGF0aCI9PUVuLnRhZ30pO0Fy''@;'; put 'put ''JiYoVHIudG90YWxMZW5ndGg9QXIudG90YWxMZW5ndGgpfXZhciBlcj1mdW5jdGlvbiB5RnQobil7cmV0dXJuIGZ1bmN0aW9uIHZGdChuKXtyZXR1cm4iZWRnZSI9PW4ucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3M/bi5wYXJlbnQ6bi5wYXJlbnQucGFyZW50LnBhcmVudH0obikuY2hpbGRyZW4u''@;'; put 'put ''ZmluZChmdW5jdGlvbih0KXtyZXR1cm4idGl0bGUiPT10LnRhZ30pfShUciksRHI9ZXIuY2hpbGRyZW5bMF0sWnI9RHIudGV4dC5zcGxpdCgiLT4iKTsyIT1aci5sZW5ndGgmJihacj1Eci50ZXh0LnNwbGl0KCItLSIpKTt2YXIgYmk9WnJbMF0sU2k9WVtiaV07aWYoT2JqZWN0Lmhhc093bihK''@;'; put 'put ''LGJpKSl7dmFyIGpyPUpbYmldO2lmKChsYT1TaS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oRW4sYXIpe3JldHVybiJnIj09RW4udGFnfSkpPj0wKXt2YXIgVGk9U2kuY2hpbGRyZW5bbGFdLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihFbixhcil7cmV0dXJuImEiPT1Fbi50YWd9''@;'; put 'put ''KTtTaT1TaS5jaGlsZHJlbltsYV0uY2hpbGRyZW5bVGldfShsYT1qci5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oRW4sYXIpe3JldHVybiJnIj09RW4udGFnfSkpPj0wJiYoVGk9anIuY2hpbGRyZW5bbGFdLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihhcixFdCl7cmV0dXJuImEi''@;'; put 'put ''PT1hci50YWd9KSxqcj1qci5jaGlsZHJlbltsYV0uY2hpbGRyZW5bVGldKTtmb3IodmFyIEZyPVNpLmNoaWxkcmVuLGxhPTA7bGE8RnIubGVuZ3RoO2xhKyspaWYoInBvbHlnb24iPT1GcltsYV0udGFnfHwiZWxsaXBzZSI9PUZyW2xhXS50YWd8fCJwYXRoIj09RnJbbGFdLnRhZ3x8InRleHQi''@;'; put 'put ''PT1GcltsYV0udGFnKXt2YXIgb3Q9RnJbbGFdO2JyZWFrfXZhciBJdD1qci5jaGlsZHJlbjtmb3IobGE9MDtsYTxJdC5sZW5ndGg7bGErKylpZigicG9seWdvbiI9PUl0W2xhXS50YWd8fCJlbGxpcHNlIj09SXRbbGFdLnRhZ3x8InBhdGgiPT1JdFtsYV0udGFnfHwidGV4dCI9PUl0W2xhXS50''@;'; put 'put ''YWcpe3ZhciBVdD1JdFtsYV07YnJlYWt9VHIub2Zmc2V0PVV0JiZvdD97eDpVdC5jZW50ZXIueC1vdC5jZW50ZXIueCx5OlV0LmNlbnRlci55LW90LmNlbnRlci55fTp7eDowLHk6MH19fX0oVHIpLFRyLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oaXIpe0Z0KGlyKX0pfXRoaXMuX2Rpc3Bh''@;'; put 'put ''dGNoLmNhbGwoImxheW91dEVuZCIsdGhpcyk7dmFyIHBuPUxzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKCJkaXYiKSxnbj0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhuLCJpbWFnZS9zdmcreG1sIik7cG4uYXBwZW5kKGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGduLmRvY3VtZW50RWxlbWVudH0pO3ZhciBHcj10Xyhwbi5zZWxlY3QoInN2ZyIpKTt0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhRXh0cmFjdEVuZCIsdGhpcykscnQoR3IpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczFFbmQiLHRoaXMpLEZ0KEdyKSx0''@;'; put 'put ''aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIix0aGlzKSx0aGlzLl9kYXRhPUdyLHRoaXMuX2RpY3Rpb25hcnk9Qyx0aGlzLl9ub2RlRGljdGlvbmFyeT1ZLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKFRyLGlyLHBpKXt2YXIgRG49dF8oVHIpO3JldHVybiBydChE''@;'; put 'put ''bixpcixwaSksRnQoRG4pLERufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSx0JiZ0LmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBTeihuLHQpe2lm''@;'; put 'put ''KCFpc0Zpbml0ZShuKXx8MD09PW4pcmV0dXJuIG51bGw7dmFyIGU9KG49dD9uLnRvRXhwb25lbnRpYWwodC0xKTpuLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpLHI9bi5zbGljZSgwLGUpO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCtuLnNsaWNlKGUrMSldfXZh''@;'; put 'put ''ciBNeixTSHQ9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gYW9lKG4pe2lmKCEodD1TSHQuZXhlYyhuKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIituKTt2YXIgdDty''@;'; put 'put ''ZXR1cm4gbmV3IG9vZSh7ZmlsbDp0WzFdLGFsaWduOnRbMl0sc2lnbjp0WzNdLHN5bWJvbDp0WzRdLHplcm86dFs1XSx3aWR0aDp0WzZdLGNvbW1hOnRbN10scHJlY2lzaW9uOnRbOF0mJnRbOF0uc2xpY2UoMSksdHJpbTp0WzldLHR5cGU6dFsxMF19KX1mdW5jdGlvbiBvb2Uobil7dGhpcy5m''@;'; put 'put ''aWxsPXZvaWQgMD09PW4uZmlsbD8iICI6bi5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09bi5hbGlnbj8iPiI6bi5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09bi5zaWduPyItIjpuLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09bi5zeW1ib2w/IiI6bi5zeW1ib2wrIiIsdGhp''@;'; put 'put ''cy56ZXJvPSEhbi56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09bi53aWR0aD92b2lkIDA6K24ud2lkdGgsdGhpcy5jb21tYT0hIW4uY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09bi5wcmVjaXNpb24/dm9pZCAwOituLnByZWNpc2lvbix0aGlzLnRyaW09ISFuLnRyaW0sdGhpcy50eXBl''@;'; put 'put ''PXZvaWQgMD09PW4udHlwZT8iIjpuLnR5cGUrIiJ9ZnVuY3Rpb24gbndlKG4sdCl7dmFyIGU9U3oobix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgcj1lWzBdLGk9ZVsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkr''@;'; put 'put ''MSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX1hb2UucHJvdG90eXBlPW9vZS5wcm90b3R5cGUsb29lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1i''@;'; put 'put ''b2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/''@;'; put 'put ''In4iOiIiKSt0aGlzLnR5cGV9O2NvbnN0IHJ3ZT17IiUiOihuLHQpPT4oMTAwKm4pLnRvRml4ZWQodCksYjpuPT5NYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDIpLGM6bj0+bisiIixkOmZ1bmN0aW9uIF9IdChuKXtyZXR1cm4gTWF0aC5hYnMobj1NYXRoLnJvdW5kKG4pKT49MWUyMT9uLnRvTG9j''@;'; put 'put ''YWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6bi50b1N0cmluZygxMCl9LGU6KG4sdCk9Pm4udG9FeHBvbmVudGlhbCh0KSxmOihuLHQpPT5uLnRvRml4ZWQodCksZzoobix0KT0+bi50b1ByZWNpc2lvbih0KSxvOm49Pk1hdGgucm91bmQobikudG9TdHJpbmcoOCkscDoobix0KT0+''@;'; put 'put ''bndlKDEwMCpuLHQpLHI6bndlLHM6ZnVuY3Rpb24geEh0KG4sdCl7dmFyIGU9U3oobix0KTtpZighZSlyZXR1cm4gTXo9dm9pZCAwLG4udG9QcmVjaXNpb24odCk7dmFyIHI9ZVswXSxpPWVbMV0sYT1pLShNej0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEs''@;'; put 'put ''Yz1yLmxlbmd0aDtyZXR1cm4gYT09PWM/cjphPmM/cituZXcgQXJyYXkoYS1jKzEpLmpvaW4oIjAiKTphPjA/ci5zbGljZSgwLGEpKyIuIityLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK1N6KG4sTWF0aC5tYXgoMCx0K2EtMSkpWzBdfSxYOm49Pk1hdGgucm91bmQo''@;'; put 'put ''bikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDpuPT5NYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gaXdlKG4pe3JldHVybiBufXZhciB4eix1Myxhd2U9QXJyYXkucHJvdG90eXBlLm1hcCxvd2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIs''@;'; put 'put ''ImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07IWZ1bmN0aW9uIEFIdChuKXt4ej1mdW5jdGlvbiBFSHQobil7dmFyIHQ9dm9pZCAwPT09bi5ncm91cGluZ3x8dm9pZCAwPT09bi50aG91c2FuZHM/aXdlOmZ1bmN0aW9uIHdIdChuLHQpe3JldHVybiBmdW5jdGlvbihlLHIpe2Zvcih2''@;'; put 'put ''YXIgaT1lLmxlbmd0aCxhPVtdLGM9MCxtPW5bMF0sQz0wO2k+MCYmbT4wJiYoQyttKzE+ciYmKG09TWF0aC5tYXgoMSxyLUMpKSxhLnB1c2goZS5zdWJzdHJpbmcoaS09bSxpK20pKSwhKChDKz1tKzEpPnIpKTspbT1uW2M9KGMrMSklbi5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2lu''@;'; put 'put ''KHQpfX0oYXdlLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVswXSsiIixyPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVsxXSsiIixpPXZvaWQgMD09PW4uZGVjaW1hbD8iLiI6bi5kZWNp''@;'; put 'put ''bWFsKyIiLGE9dm9pZCAwPT09bi5udW1lcmFscz9pd2U6ZnVuY3Rpb24gQ0h0KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuWytlXX0pfX0oYXdlLmNhbGwobi5udW1lcmFscyxTdHJpbmcpKSxjPXZvaWQgMD09PW4u''@;'; put 'put ''cGVyY2VudD8iJSI6bi5wZXJjZW50KyIiLG09dm9pZCAwPT09bi5taW51cz8iXHUyMjEyIjpuLm1pbnVzKyIiLEM9dm9pZCAwPT09bi5uYW4/Ik5hTiI6bi5uYW4rIiI7ZnVuY3Rpb24gUChKLGNlKXt2YXIgZmU9KEo9YW9lKEopKS5maWxsLEFlPUouYWxpZ24sSGU9Si5zaWduLFhlPUouc3lt''@;'; put 'put ''Ym9sLHJ0PUouemVybyxkdD1KLndpZHRoLGp0PUouY29tbWEsRnQ9Si5wcmVjaXNpb24scG49Si50cmltLG9uPUoudHlwZTsibiI9PT1vbj8oanQ9ITAsb249ImciKTpyd2Vbb25dfHwodm9pZCAwPT09RnQmJihGdD0xMikscG49ITAsb249ImciKSwocnR8fCIwIj09PWZlJiYiPSI9PT1BZSkm''@;'; put 'put ''JihydD0hMCxmZT0iMCIsQWU9Ij0iKTt2YXIgZ249KGNlJiZ2b2lkIDAhPT1jZS5wcmVmaXg/Y2UucHJlZml4OiIiKSsoIiQiPT09WGU/ZToiIyI9PT1YZSYmL1tib3hYXS8udGVzdChvbik/IjAiK29uLnRvTG93ZXJDYXNlKCk6IiIpLFpuPSgiJCI9PT1YZT9yOi9bJXBdLy50ZXN0KG9uKT9j''@;'; put 'put ''OiIiKSsoY2UmJnZvaWQgMCE9PWNlLnN1ZmZpeD9jZS5zdWZmaXg6IiIpLEdyPXJ3ZVtvbl0sRXI9L1tkZWZncHJzJV0vLnRlc3Qob24pO2Z1bmN0aW9uIFRyKGlyKXt2YXIgQXIsZXIsRHIscGk9Z24sRG49Wm47aWYoImMiPT09b24pRG49R3IoaXIpK0RuLGlyPSIiO2Vsc2V7dmFyIFpyPShp''@;'; put 'put ''cj0raXIpPDB8fDEvaXI8MDtpZihpcj1pc05hTihpcik/QzpHcihNYXRoLmFicyhpciksRnQpLHBuJiYoaXI9ZnVuY3Rpb24gTUh0KG4pe2U6Zm9yKHZhciBpLHQ9bi5sZW5ndGgsZT0xLHI9LTE7ZTx0OysrZSlzd2l0Y2gobltlXSl7Y2FzZSIuIjpyPWk9ZTticmVhaztjYXNlIjAiOjA9PT1y''@;'; put 'put ''JiYocj1lKSxpPWU7YnJlYWs7ZGVmYXVsdDppZighK25bZV0pYnJlYWsgZTtyPjAmJihyPTApfXJldHVybiByPjA/bi5zbGljZSgwLHIpK24uc2xpY2UoaSsxKTpufShpcikpLFpyJiYwPT0raXImJiIrIiE9PUhlJiYoWnI9ITEpLHBpPShacj8iKCI9PT1IZT9IZTptOiItIj09PUhlfHwiKCI9''@;'; put 'put ''PT1IZT8iIjpIZSkrcGksRG49KCJzIiE9PW9ufHxpc05hTihpcil8fHZvaWQgMD09PU16PyIiOm93ZVs4K016LzNdKStEbisoWnImJiIoIj09PUhlPyIpIjoiIiksRXIpZm9yKEFyPS0xLGVyPWlyLmxlbmd0aDsrK0FyPGVyOylpZig0OD4oRHI9aXIuY2hhckNvZGVBdChBcikpfHxEcj41Nyl7''@;'; put 'put ''RG49KDQ2PT09RHI/aStpci5zbGljZShBcisxKTppci5zbGljZShBcikpK0RuLGlyPWlyLnNsaWNlKDAsQXIpO2JyZWFrfX1qdCYmIXJ0JiYoaXI9dChpciwxLzApKTt2YXIgYmk9cGkubGVuZ3RoK2lyLmxlbmd0aCtEbi5sZW5ndGgsU2k9Ymk8ZHQ/bmV3IEFycmF5KGR0LWJpKzEpLmpvaW4o''@;'; put 'put ''ZmUpOiIiO3N3aXRjaChqdCYmcnQmJihpcj10KFNpK2lyLFNpLmxlbmd0aD9kdC1Ebi5sZW5ndGg6MS8wKSxTaT0iIiksQWUpe2Nhc2UiPCI6aXI9cGkraXIrRG4rU2k7YnJlYWs7Y2FzZSI9Ijppcj1waStTaStpcitEbjticmVhaztjYXNlIl4iOmlyPVNpLnNsaWNlKDAsYmk9U2kubGVuZ3Ro''@;'; put 'put ''Pj4xKStwaStpcitEbitTaS5zbGljZShiaSk7YnJlYWs7ZGVmYXVsdDppcj1TaStwaStpcitEbn1yZXR1cm4gYShpcil9cmV0dXJuIEZ0PXZvaWQgMD09PUZ0PzY6L1tncHJzXS8udGVzdChvbik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxGdCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsRnQp''@;'; put 'put ''KSxUci50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBKKyIifSxUcn1yZXR1cm57Zm9ybWF0OlAsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIFkoSixjZSl7dmFyIGZlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIGJIdChuKXtyZXR1cm4obj1TeihNYXRoLmFi''@;'; put 'put ''cyhuKSkpP25bMV06TmFOfShjZSkvMykpKSxBZT1NYXRoLnBvdygxMCwtZmUpLEhlPVAoKChKPWFvZShKKSkudHlwZT0iZiIsSikse3N1ZmZpeDpvd2VbOCtmZS8zXX0pO3JldHVybiBmdW5jdGlvbihYZSl7cmV0dXJuIEhlKEFlKlhlKX19fX0obiksdTM9eHouZm9ybWF0fSh7dGhvdXNhbmRz''@;'; put 'put ''OiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCBzb2U9TWF0aC5QSSxsb2U9Mipzb2Uscl89MWUtNixJSHQ9bG9lLXJfO2Z1bmN0aW9uIHN3ZShuKXt0aGlzLl8rPW5bMF07Zm9yKGxldCB0PTEsZT1uLmxlbmd0aDt0PGU7Kyt0KXRoaXMuXys9YXJndW1lbnRzW3Rd''@;'; put 'put ''K25bdF19Y2xhc3MgY29le2NvbnN0cnVjdG9yKHQpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT10P3N3ZTpmdW5jdGlvbiBSSHQobil7bGV0IHQ9TWF0aC5mbG9vcihuKTtpZighKHQ+PTApKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihgaW52YWxpZCBkaWdpdHM6ICR7bn1gKTtpZih0PjE1KXJldHVybiBzd2U7Y29uc3QgZT0xMCoqdDtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5fKz1yWzBdO2ZvcihsZXQgaT0xLGE9ci5sZW5ndGg7aTxhOysraSl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW2ldKmUpL2Urcltp''@;'; put 'put ''XX19KHQpfW1vdmVUbyh0LGUpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rdH0sJHt0aGlzLl95MD10aGlzLl95MT0rZX1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9''@;'; put 'put ''bGluZVRvKHQsZSl7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPSt0fSwke3RoaXMuX3kxPStlfWB9cXVhZHJhdGljQ3VydmVUbyh0LGUscixpKXt0aGlzLl9hcHBlbmRgUSR7K3R9LCR7K2V9LCR7dGhpcy5feDE9K3J9LCR7dGhpcy5feTE9K2l9YH1iZXppZXJDdXJ2ZVRvKHQsZSxyLGksYSxj''@;'; put 'put ''KXt0aGlzLl9hcHBlbmRgQyR7K3R9LCR7K2V9LCR7K3J9LCR7K2l9LCR7dGhpcy5feDE9K2F9LCR7dGhpcy5feTE9K2N9YH1hcmNUbyh0LGUscixpLGEpe2lmKHQ9K3QsZT0rZSxyPStyLGk9K2ksKGE9K2EpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7YX1gKTtsZXQg''@;'; put 'put ''Yz10aGlzLl94MSxtPXRoaXMuX3kxLEM9ci10LFA9aS1lLFk9Yy10LEo9bS1lLGNlPVkqWStKKko7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT10fSwke3RoaXMuX3kxPWV9YDtlbHNlIGlmKGNlPnJfKWlmKE1hdGguYWJzKEoqQy1QKlkpPnJfJiZhKXtsZXQg''@;'; put 'put ''ZmU9ci1jLEFlPWktbSxIZT1DKkMrUCpQLFhlPWZlKmZlK0FlKkFlLHJ0PU1hdGguc3FydChIZSksZHQ9TWF0aC5zcXJ0KGNlKSxqdD1hKk1hdGgudGFuKChzb2UtTWF0aC5hY29zKChIZStjZS1YZSkvKDIqcnQqZHQpKSkvMiksRnQ9anQvZHQscG49anQvcnQ7TWF0aC5hYnMoRnQtMSk+cl8m''@;'; put 'put ''JnRoaXMuX2FwcGVuZGBMJHt0K0Z0Kll9LCR7ZStGdCpKfWAsdGhpcy5fYXBwZW5kYEEke2F9LCR7YX0sMCwwLCR7KyhKKmZlPlkqQWUpfSwke3RoaXMuX3gxPXQrcG4qQ30sJHt0aGlzLl95MT1lK3BuKlB9YH1lbHNlIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT10fSwke3RoaXMuX3kxPWV9''@;'; put 'put ''YH1hcmModCxlLHIsaSxhLGMpe2lmKHQ9K3QsZT0rZSxjPSEhYywocj0rcik8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtyfWApO2xldCBtPXIqTWF0aC5jb3MoaSksQz1yKk1hdGguc2luKGkpLFA9dCttLFk9ZStDLEo9MV5jLGNlPWM/aS1hOmEtaTtudWxsPT09dGhp''@;'; put 'put ''cy5feDE/dGhpcy5fYXBwZW5kYE0ke1B9LCR7WX1gOihNYXRoLmFicyh0aGlzLl94MS1QKT5yX3x8TWF0aC5hYnModGhpcy5feTEtWSk+cl8pJiZ0aGlzLl9hcHBlbmRgTCR7UH0sJHtZfWAsciYmKGNlPDAmJihjZT1jZSVsb2UrbG9lKSxjZT5JSHQ/dGhpcy5fYXBwZW5kYEEke3J9LCR7cn0s''@;'; put 'put ''MCwxLCR7Sn0sJHt0LW19LCR7ZS1DfUEke3J9LCR7cn0sMCwxLCR7Sn0sJHt0aGlzLl94MT1QfSwke3RoaXMuX3kxPVl9YDpjZT5yXyYmdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwkeysoY2U+PXNvZSl9LCR7Sn0sJHt0aGlzLl94MT10K3IqTWF0aC5jb3MoYSl9LCR7dGhpcy5feTE9ZSty''@;'; put 'put ''Kk1hdGguc2luKGEpfWApfXJlY3QodCxlLHIsaSl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPSt0fSwke3RoaXMuX3kwPXRoaXMuX3kxPStlfWgke3I9K3J9diR7K2l9aCR7LXJ9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiBsd2UoKXtyZXR1cm4gbmV3''@;'; put 'put ''IGNvZX1mdW5jdGlvbiBMSHQobix0LGUscil7cmV0dXJuIHQ9LXQscj0tcixbbix0XT1bbiplLXQqcixuKnIrdCplXSxbbix0PS10XX1mdW5jdGlvbiBjd2Uobix0LGUscixpLGEsYyl7dmFyIEM9dF8oZndlLmNhbGwodGhpcyxhKSk7bi5kYXRhKFtDXSksdUkuY2FsbChuLm5vZGUoKSxDKSx1''@;'; put 'put ''d2Uobix0LGUscixpLGEsYyl9ZnVuY3Rpb24gdXdlKG4sdCxlLHIsaSxhLGMpe3ZhciBtPWMuc2hvcnRlbmluZ3x8MCxKPVtbMCwtMy41XSxbMTAsMF0sWzAsMy41XSxbMCwtMy41XV0sY2U9ci10LGZlPWktZSxBZT1NYXRoLnNxcnQoY2UqY2UrZmUqZmUpO2lmKDA9PUFlKXZhciBIZT0xLFhl''@;'; put 'put ''PTA7ZWxzZSBIZT1jZS9BZSxYZT1mZS9BZTtpZihyPXQrKEFlLW0tMTAtLjEpKkhlLGk9ZSsoQWUtbS0xMC0uMSkqWGUsYS5VUkx8fGEudG9vbHRpcCl2YXIgcnQ9bi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLGR0''@;'; put 'put ''PXJ0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxqdD1ydC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7ZWxzZSBkdD1uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxqdD1uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRp''@;'; put 'put ''b24oInBvbHlnb24iKTt2YXIgRnQ9bHdlKCk7RnQubW92ZVRvKHQsZSksRnQubGluZVRvKHIsaSksZHQuYXR0cigiZCIsRnQpLHI9dCsoQWUtbS0xMCkqSGUsaT1lKyhBZS1tLTEwKSpYZTtmb3IodmFyIHBuPTA7cG48Si5sZW5ndGg7cG4rKylKW3BuXT1MSHQoKG9uPUpbcG5dKVswXSxvblsx''@;'; put 'put ''XSxIZSxYZSk7Zm9yKHBuPTA7cG48Si5sZW5ndGg7cG4rKylKW3BuXT1bcisob249Sltwbl0pWzBdLGkrb25bMV1dO3ZhciBnbj1bXTtmb3IocG49MDtwbjxKLmxlbmd0aDtwbisrKXt2YXIgb247Z24ucHVzaCgob249Sltwbl0pLmpvaW4oIiwiKSl9dmFyIFpuPWduLmpvaW4oIiAiKTtyZXR1''@;'; put 'put ''cm4ganQuYXR0cigicG9pbnRzIixabiksdGhpc31mdW5jdGlvbiBkd2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1vdmUoKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzKTp0aGlzfWZ1bmN0aW9uIGh3ZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/''@;'; put 'put ''dGhpcy5fZHJhd25FZGdlLmc6THMobnVsbCl9ZnVuY3Rpb24gZndlKG4pe3ZhciB0PSIiO2Zvcih2YXIgZSBvZiBPYmplY3Qua2V5cyhuKSludWxsIT1uW2VdJiYodCs9JyAiJytlKyciPSInK25bZV0rJyInKTt2YXIgaT10aGlzLmxheW91dFN5bmMoImRpZ3JhcGgge2EgLT4gYiBbIit0KyJd''@;'; put 'put ''fSIsInN2ZyIsImRvdCIpLGM9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaSwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiBMcyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBjLmRvY3VtZW50RWxlbWVudH0p''@;'; put 'put ''LnNlbGVjdCgiLmVkZ2UiKX1mdW5jdGlvbiBwd2Uobix0LGUscixpLGEpe3ZhciBtPXRfKHl3ZS5jYWxsKHRoaXMscixpKSk7cmV0dXJuIG4uZGF0YShbbV0pLHVJLmNhbGwobi5ub2RlKCksbSksZ3dlKG4sdCxlLGkpLHRoaXN9ZnVuY3Rpb24gZ3dlKG4sdCxlLHIsaSl7aWYoci5VUkx8fHIu''@;'; put 'put ''dG9vbHRpcCl2YXIgYT1uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBhPW47dmFyIGM9YS5zZWxlY3RBbGwoImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksbT1uLnNlbGVjdFdpdGhvdXREYXRh''@;'; put 'put ''UHJvcGFnYXRpb24oInRleHQiKTtpZigwIT1jLnNpemUoKSl7dmFyIEM9Yy5ub2RlKCkuZ2V0QkJveCgpO0MuY3g9Qy54K0Mud2lkdGgvMixDLmN5PUMueStDLmhlaWdodC8yfWVsc2UgMCE9bS5zaXplKCkmJihDPXt4OittLmF0dHIoIngiKSx5OittLmF0dHIoInkiKSx3aWR0aDowLGhlaWdo''@;'; put 'put ''dDowLGN4OittLmF0dHIoIngiKSxjeTorbS5hdHRyKCJ5Iil9KTtyZXR1cm4gYy5lYWNoKGZ1bmN0aW9uKFAsWSl7dmFyIEo9THModGhpcyk7aWYoSi5hdHRyKCJjeCIpKUouYXR0cigiY3giLEs4KHQpKS5hdHRyKCJjeSIsSzgoZSkpO2Vsc2UgaWYoSi5hdHRyKCJwb2ludHMiKSl7dmFyIGNl''@;'; put 'put ''PUouYXR0cigicG9pbnRzIikudHJpbSgpO0ouYXR0cigicG9pbnRzIixmdW5jdGlvbiBHRnQoYSx0LGUpe3ZhciBpLHI9KGk9YS5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuc3BsaXQoIiwiKX0pO3JldHVybiByPWkubWFwKGZ1bmN0aW9uKGMpe3JldHVybltLOCgrdCsg''@;'; put 'put ''K2Muc3BsaXQoIiwiKVswXSksSzgoK2UrICtjLnNwbGl0KCIsIilbMV0pXX0pLChpPXIubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmpvaW4oIiwiKX0pKS5qb2luKCIgIil9KGNlLHQtQy5jeCxlLUMuY3kpKX1lbHNle3ZhciBmZT1KLmF0dHIoImQiKTtKLmF0dHIoImQiLGZ1bmN0aW9uICRG''@;'; put 'put ''dChuLHQsZSl7KGE9bi5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCk7dmFyIHI9bi5zcGxpdCgvW15bQS1aIF0rLyksYT0oYS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuc3BsaXQoIiwiKX0pLGEubWFwKGZ1bmN0aW9uKGMpe3JldHVybltLOCgrdCsgK2Muc3BsaXQoIiwiKVswXSksSzgoK2Ur''@;'; put 'put ''ICtjLnNwbGl0KCIsIilbMV0pXX0pLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy5qb2luKCIsIil9KSk7cmV0dXJuIHIucmVkdWNlKGZ1bmN0aW9uKGMsbSxDKXtyZXR1cm4gYy5jb25jYXQobSxhW0NdKX0sW10pLmpvaW4oIiIpfShmZSx0LUMuY3gsZS1DLmN5KSl9fSksMCE9bS5zaXplKCkm''@;'; put 'put ''Jm0uYXR0cigieCIsSzgoK20uYXR0cigieCIpK3QtQy5jeCkpLmF0dHIoInkiLEs4KCttLmF0dHIoInkiKStlLUMuY3kpKSx0aGlzfWZ1bmN0aW9uIG13ZSgpe2lmKCF0aGlzLl9kcmF3bk5vZGUpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIG4uZW1wdHkoKXx8''@;'; put 'put ''bi5yZW1vdmUoKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfWZ1bmN0aW9uIHZ3ZSgpe3JldHVybiB0aGlzLl9kcmF3bk5vZGU/dGhpcy5fZHJhd25Ob2RlLmc6THMobnVsbCl9ZnVuY3Rpb24geXdlKG4sdCl7dmFyIGU9IiI7Zm9yKHZhciByIG9mIE9iamVjdC5rZXlzKHQpKW51bGwhPXRb''@;'; put 'put ''cl0mJihlKz0nICInK3IrJyI9IicrdFtyXSsnIicpO3ZhciBhPXRoaXMubGF5b3V0U3luYygnZ3JhcGggeyInK24rJyIgWycrZSsiXX0iLCJzdmciLCJkb3QiKSxtPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGEsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gTHMoZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gbS5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5ub2RlIil9ZnVuY3Rpb24gRXoobil7c2VsZi5kb2N1bWVudD17fSxuLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKHQp''@;'; put 'put ''e2xldCBlPXNlbGZbIkBocGNjLWpzL3dhc20iXTtudWxsPT1lJiZ0LmRhdGEudml6VVJMJiYoaW1wb3J0U2NyaXB0cyh0LmRhdGEudml6VVJMKSxlPXNlbGZbIkBocGNjLWpzL3dhc20iXSksInZlcnNpb24iIT10LmRhdGEudHlwZT9lLkdyYXBodml6LmxvYWQoKS50aGVuKHI9Pntjb25zdCBp''@;'; put 'put ''PXIubGF5b3V0KHQuZGF0YS5kb3QsInN2ZyIsdC5kYXRhLmVuZ2luZSx0LmRhdGEub3B0aW9ucyk7bi5wb3N0TWVzc2FnZShpP3t0eXBlOiJkb25lIixzdmc6aX06dC5kYXRhLnZpelVSTD97dHlwZToiaW5pdCJ9Ont0eXBlOiJza2lwIn0pfSkuY2F0Y2gocj0+e24ucG9zdE1lc3NhZ2Uoe3R5''@;'; put 'put ''cGU6ImVycm9yIixlcnJvcjpyLm1lc3NhZ2V9KX0pOmUuR3JhcGh2aXoubG9hZCgpLnRoZW4ocj0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6InZlcnNpb24iLHZlcnNpb246ci52ZXJzaW9uKCl9KX0pfSl9ZnVuY3Rpb24gekh0KCl7RXooc2VsZil9ZnVuY3Rpb24gVUh0KCl7c2VsZi5vbmNvbm5l''@;'; put 'put ''Y3Q9ZnVuY3Rpb24obil7Y29uc3QgdD1uLnBvcnRzWzBdO0V6KHQpLHQuc3RhcnQoKX19ZnVuY3Rpb24gdW9lKG4sdCl7aWYodGhpcy5fb3B0aW9ucz17dXNlV29ya2VyOiEwLHVzZVNoYXJlZFdvcmtlcjohMSxlbmdpbmU6ImRvdCIsa2V5TW9kZToidGl0bGUiLGZhZGU6ITAsdHdlZW5QYXRo''@;'; put 'put ''czohMCx0d2VlblNoYXBlczohMCxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOiEwLHR3ZWVuUHJlY2lzaW9uOjEsZ3Jvd0VudGVyaW5nRWRnZXM6ITAsem9vbTohMCx6b29tU2NhbGVFeHRlbnQ6Wy4xLDEwXSx6b29tVHJhbnNsYXRlRXh0ZW50OltbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHdp''@;'; put 'put ''ZHRoOm51bGwsaGVpZ2h0Om51bGwsc2NhbGU6MSxmaXQ6ITF9LHQgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBlIG9mIE9iamVjdC5rZXlzKHQpKXRoaXMuX29wdGlvbnNbZV09dFtlXTtlbHNlImJvb2xlYW4iPT10eXBlb2YgdCYmKHRoaXMuX29wdGlvbnMudXNlV29ya2VyPXQpO3ZhciBy''@;'; put 'put ''PXRoaXMuX29wdGlvbnMudXNlV29ya2VyLGk9dGhpcy5fb3B0aW9ucy51c2VTaGFyZWRXb3JrZXI7aWYodHlwZW9mIFdvcmtlcj4idSImJihyPSExKSx0eXBlb2YgU2hhcmVkV29ya2VyPiJ1IiYmKGk9ITEpLHJ8fGkpe3ZhciBjPWthZSgic2NyaXB0IikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuImphdmFzY3JpcHQvd29ya2VyIj09THModGhpcykuYXR0cigidHlwZSIpfHxMcyh0aGlzKS5hdHRyKCJzcmMiKSYmTHModGhpcykuYXR0cigic3JjIikubWF0Y2goLy4qXC9AaHBjYy1qc1wvd2FzbS8pfSk7MD09Yy5zaXplKCk/KGNvbnNvbGUud2FybignTm8gc2NyaXB0IHRhZyBvZiB0''@;'; put 'put ''eXBlICJqYXZhc2NyaXB0L3dvcmtlciIgd2FzIGZvdW5kIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxyPSExLGk9ITEpOih0aGlzLl92aXpVUkw9Yy5hdHRyKCJzcmMiKSx0aGlzLl92aXpVUkx8fChjb25zb2xlLndhcm4oJ05vICJzcmMiIGF0dHJp''@;'; put 'put ''YnV0ZSBvZiB3YXMgZm91bmQgb24gdGhlICJqYXZhc2NyaXB0L3dvcmtlciIgc2NyaXB0IHRhZyBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJykscj0hMSxpPSExKSl9aWYoaSl7Y29uc3QgUD0iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2''@;'; put 'put ''NCwiK2J0b2EoRXoudG9TdHJpbmcoKSsiKCIrVUh0LnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtlcj10aGlzLl93b3JrZXI9bmV3IFNoYXJlZFdvcmtlcihQKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3JrZXIu''@;'; put 'put ''cG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgaWYocil7dmFyIG09bmV3IEJsb2IoW0V6LnRvU3RyaW5nKCkrIigiK3pIdC50b1N0cmluZygpKyIpKCkiXSksQz13aW5kb3cuVVJM''@;'; put 'put ''LmNyZWF0ZU9iamVjdFVSTChtKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihDKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlcix0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtd''@;'; put 'put ''fWVsc2UgZXdlLmxvYWQoKS50aGVuKChQPT57dGhpcy5fZ3JhcGh2aXpWZXJzaW9uPVAudmVyc2lvbigpfSkuYmluZCh0aGlzKSk7dGhpcy5fc2VsZWN0aW9uPW4sdGhpcy5fYWN0aXZlPSExLHRoaXMuX2J1c3k9ITEsdGhpcy5fam9icz1bXSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9rZXlNb2Rl''@;'; put 'put ''cz1uZXcgU2V0KFsidGl0bGUiLCJpZCIsInRhZy1pbmRleCIsImluZGV4Il0pLHRoaXMuX2ltYWdlcz1bXSx0aGlzLl90cmFuc2xhdGlvbj12b2lkIDAsdGhpcy5fc2NhbGU9dm9pZCAwLHRoaXMuX2V2ZW50VHlwZXM9WyJpbml0RW5kIiwic3RhcnQiLCJsYXlvdXRTdGFydCIsImxheW91dEVu''@;'; put 'put ''ZCIsImRhdGFFeHRyYWN0RW5kIiwiZGF0YVByb2Nlc3NQYXNzMUVuZCIsImRhdGFQcm9jZXNzUGFzczJFbmQiLCJkYXRhUHJvY2Vzc0VuZCIsInJlbmRlclN0YXJ0IiwicmVuZGVyRW5kIiwidHJhbnNpdGlvblN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInJlc3RvcmVFbmQiLCJlbmQiLCJ6b29t''@;'; put 'put ''Il0sdGhpcy5fZGlzcGF0Y2g9RGFlKC4uLnRoaXMuX2V2ZW50VHlwZXMpLEtGdC5jYWxsKHRoaXMpLG4ubm9kZSgpLl9fZ3JhcGh2aXpfXz10aGlzfWZ1bmN0aW9uIFR6KG4sdCl7cmV0dXJuIExzKG4pLmdyYXBodml6KHQpfWx3ZS5wcm90b3R5cGU9Y29lLnByb3RvdHlwZSx1b2UucHJvdG90''@;'; put 'put ''eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dW9lLGVuZ2luZTpmdW5jdGlvbiBsSHQobil7cmV0dXJuIHRoaXMuX29wdGlvbnMuZW5naW5lPW4sdGhpc30sYWRkSW1hZ2U6ZnVuY3Rpb24gY0h0KG4sdCxlKXtyZXR1cm4gdGhpcy5faW1hZ2VzLnB1c2goe3BhdGg6bix3aWR0aDp0LGhl''@;'; put 'put ''aWdodDplfSksdGhpc30sa2V5TW9kZTpmdW5jdGlvbiB1SHQobil7aWYoIXRoaXMuX2tleU1vZGVzLmhhcyhuKSl0aHJvdyBFcnJvcigiSWxsZWdhbCBrZXlNb2RlOiAiK24pO2lmKG4hPXRoaXMuX29wdGlvbnMua2V5TW9kZSYmbnVsbCE9dGhpcy5fZGF0YSl0aHJvdyBFcnJvcigiVG9vIGxh''@;'; put 'put ''dGUgdG8gY2hhbmdlIGtleU1vZGUiKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5rZXlNb2RlPW4sdGhpc30sZmFkZTpmdW5jdGlvbiBkSHQobil7cmV0dXJuIHRoaXMuX29wdGlvbnMuZmFkZT1uLHRoaXN9LHR3ZWVuUGF0aHM6ZnVuY3Rpb24gaEh0KG4pe3JldHVybiB0aGlzLl9vcHRpb25zLnR3''@;'; put 'put ''ZWVuUGF0aHM9bix0aGlzfSx0d2VlblNoYXBlczpmdW5jdGlvbiBmSHQobil7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM9bixuJiYodGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPSEwKSx0aGlzfSxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOmZ1bmN0aW9uIHBIdChuKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zPW4sdGhpc30sdHdlZW5QcmVjaXNpb246ZnVuY3Rpb24gZ0h0KG4pe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uPW4sdGhpc30sZ3Jvd0VudGVyaW5nRWRnZXM6ZnVuY3Rpb24gbUh0KG4pe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzPW4sdGhpc30sem9vbTpmdW5jdGlvbiBsRnQobil7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbT1uLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvcj8kYmUuY2FsbCh0aGlzKTohdGhpcy5fb3B0aW9ucy56b29t''@;'; put 'put ''JiZ0aGlzLl96b29tQmVoYXZpb3ImJih0aGlzLl96b29tU2VsZWN0aW9uLm9uKCIuem9vbSIsbnVsbCksdGhpcy5fem9vbUJlaGF2aW9yPW51bGwpLHRoaXN9LHJlc2V0Wm9vbTpmdW5jdGlvbiBjRnQobil7dmFyIHQ9dGhpcy5fem9vbVNlbGVjdGlvbjtyZXR1cm4gbiYmKHQ9dC50cmFuc2l0''@;'; put 'put ''aW9uKG4pKSx0LmNhbGwodGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybSksdGhpc30sem9vbUJlaGF2aW9yOmZ1bmN0aW9uIGhGdCgpe3JldHVybiB0aGlzLl96b29tQmVoYXZpb3J8fG51bGx9LHpvb21TZWxlY3Rpb246ZnVuY3Rpb24gZkZ0KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3pvb21TZWxlY3Rpb258fG51bGx9LHpvb21TY2FsZUV4dGVudDpmdW5jdGlvbiB1RnQobil7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50PW4sdGhpc30sem9vbVRyYW5zbGF0ZUV4dGVudDpmdW5jdGlvbiBkRnQobil7cmV0dXJuIHRoaXMuX29wdGlv''@;'; put 'put ''bnMuem9vbVRyYW5zbGF0ZUV4dGVudD1uLHRoaXN9LHJlbmRlcjpmdW5jdGlvbiBfRnQobil7cmV0dXJuIHRoaXMuX2J1c3k/KHRoaXMuX3F1ZXVlLnB1c2godGhpcy5yZW5kZXIuYmluZCh0aGlzLG4pKSx0aGlzKToodGhpcy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyU3RhcnQiLHRoaXMpLHRo''@;'; put 'put ''aXMuX3RyYW5zaXRpb25GYWN0b3J5P3J6KGZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvbj1XYWUodGhpcy5fdHJhbnNpdGlvbkZhY3RvcnkoKSkscWJlLmNhbGwodGhpcyxuKX0uYmluZCh0aGlzKSwwKTpxYmUuY2FsbCh0aGlzLG4pLHRoaXMpfSxsYXlvdXQ6ZnVuY3Rpb24gWEZ0KG4sdCxl''@;'; put 'put ''LHIpe2lmKHRoaXMuX3dvcmtlcilpb2UuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDpuLGVuZ2luZTp0LG9wdGlvbnM6ZX0sZnVuY3Rpb24oYSl7ci5jYWxsKHRoaXMsYS5kYXRhKX0pO2Vsc2UgdHJ5e3ZhciBpPXRoaXMubGF5b3V0U3luYyhuLCJzdmciLHQsZSk7ci5jYWxsKHRoaXMs''@;'; put 'put ''e3R5cGU6ImRvbmUiLHN2ZzppfSl9Y2F0Y2goYSl7ci5jYWxsKHRoaXMse3R5cGU6ImVycm9yIixlcnJvcjphLm1lc3NhZ2V9KX19LGRvdDpmdW5jdGlvbiBxRnQobix0KXt2YXIgZT10aGlzLGk9dGhpcy5fb3B0aW9ucy5lbmdpbmUsYT10aGlzLl9pbWFnZXM7cmV0dXJuIHRoaXMuX2Rpc3Bh''@;'; put 'put ''dGNoLmNhbGwoInN0YXJ0Iix0aGlzKSx0aGlzLl9idXN5PSEwLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dFN0YXJ0Iix0aGlzKSx0aGlzLl93b3JrZXJ8fG51bGwhPXRoaXMubGF5b3V0U3luYz8odGhpcy5sYXlvdXQobixpLHtpbWFnZXM6YX0sZnVuY3Rpb24obSl7c3dpdGNoKG0udHlw''@;'; put 'put ''ZSl7Y2FzZSJlcnJvciI6aWYoIWUuX29uZXJyb3IpdGhyb3cgbS5lcnJvci5tZXNzYWdlO2UuX29uZXJyb3IobS5lcnJvcik7YnJlYWs7Y2FzZSJkb25lIjpKRnQuY2FsbCh0aGlzLG0uc3ZnLHQpfX0pLHRoaXMpOih0aGlzLl9hZnRlckluaXQ9dGhpcy5kb3QuYmluZCh0aGlzLG4sdCksdGhp''@;'; put 'put ''cyl9LGRhdGE6ZnVuY3Rpb24gbUZ0KCl7cmV0dXJuIHRoaXMuX2RhdGF8fG51bGx9LHJlbmRlckRvdDpmdW5jdGlvbiBRRnQobix0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmRvdChuLGZ1bmN0aW9uIHIoKXtlLnJlbmRlcih0KX0pLHRoaXN9LHRyYW5zaXRpb246ZnVuY3Rpb24gZUh0KG4p''@;'; put 'put ''e3JldHVybiBuIGluc3RhbmNlb2YgRnVuY3Rpb24/dGhpcy5fdHJhbnNpdGlvbkZhY3Rvcnk9bjp0aGlzLl90cmFuc2l0aW9uPVdhZShuKSx0aGlzfSxhY3RpdmU6ZnVuY3Rpb24gdEh0KG4pe3ZhciBlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmci''@;'; put 'put ''KTtyZXR1cm4gMCE9ZS5zaXplKCk/ZnVuY3Rpb24gVlB0KG4sdCl7dmFyIHIsaSxlPW4uX190cmFuc2l0aW9uO2lmKGUpZm9yKGkgaW4gdD1udWxsPT10P251bGw6dCsiIixlKWlmKChyPWVbaV0pLnN0YXRlPjEmJnIubmFtZT09PXQpcmV0dXJuIG5ldyBkZyhbW25dXSxOUHQsdCwraSk7cmV0''@;'; put 'put ''dXJuIG51bGx9KGUubm9kZSgpLG4pOm51bGx9LG9wdGlvbnM6ZnVuY3Rpb24gbkh0KG4pe2lmKHR5cGVvZiBuPiJ1IilyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9vcHRpb25zKTtmb3IodmFyIHQgb2YgT2JqZWN0LmtleXMobikpdGhpcy5fb3B0aW9uc1t0XT1uW3RdO3JldHVybiB0''@;'; put 'put ''aGlzfSx3aWR0aDpmdW5jdGlvbiBySHQobil7cmV0dXJuIHRoaXMuX29wdGlvbnMud2lkdGg9bix0aGlzfSxoZWlnaHQ6ZnVuY3Rpb24gaUh0KG4pe3JldHVybiB0aGlzLl9vcHRpb25zLmhlaWdodD1uLHRoaXN9LHNjYWxlOmZ1bmN0aW9uIGFIdChuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5z''@;'; put 'put ''Y2FsZT1uLHRoaXN9LGZpdDpmdW5jdGlvbiBvSHQobil7cmV0dXJuIHRoaXMuX29wdGlvbnMuZml0PW4sdGhpc30sYXR0cmlidXRlcjpmdW5jdGlvbiBzSHQobil7cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXI9bix0aGlzfSxvbjpmdW5jdGlvbiB2SHQobix0KXtyZXR1cm4gdGhpcy5fZGlzcGF0''@;'; put 'put ''Y2gub24obix0KSx0aGlzfSxvbmVycm9yOmZ1bmN0aW9uIHlIdChuKXtyZXR1cm4gdGhpcy5fb25lcnJvcj1uLHRoaXN9LGxvZ0V2ZW50czpmdW5jdGlvbiBrSHQobil7dmFyIHQ9RGF0ZS5ub3coKSxlPXt9LHI9dGhpcy5fZXZlbnRUeXBlcyxpPU1hdGgubWF4KC4uLnIubWFwKEM9PkMubGVu''@;'; put 'put ''Z3RoKSk7Zm9yKGxldCBDPTA7QzxyLmxlbmd0aDtDKyspe2xldCBQPXJbQ107ZVtQXT1bXTt2YXIgYyxtLGE9dGhpczt0aGlzLm9uKFArIi5sb2ciLG4/ZnVuY3Rpb24oKXt2YXIgWT1EYXRlLm5vdygpLEo9ZVtQXS5sZW5ndGg7ZVtQXS5wdXNoKFkpO3ZhciBjZT0iIjtpZihjZSs9IkV2ZW50''@;'; put 'put ''ICIsY2UrPXUzKCIgPjIiKShDKSsiICIsY2UrPVArIiAiLnJlcGVhdChpLVAubGVuZ3RoKSxjZSs9dTMoIiA+NSIpKFktdCkrIiAiLCJpbml0RW5kIiE9UCYmKGNlKz11MygiID41IikoWS1lLnN0YXJ0W0pdKSksImRhdGFQcm9jZXNzRW5kIj09UCYmKGNlKz0iIHByZXBhcmUgICAgICAgICAg''@;'; put 'put ''ICAgICAgICIrdTMoIiA+NSIpKFktZS5sYXlvdXRFbmRbSl0pKSwicmVuZGVyRW5kIj09UCYmYS5fdHJhbnNpdGlvbiYmKGNlKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrdTMoIiA+NSIpKGEuX3RyYW5zaXRpb24uZGVsYXkoKS0oWS1lLnJlbmRlclN0YXJ0W0pdKSksYz1hLl90cmFu''@;'; put 'put ''c2l0aW9uLmRlbGF5KCksbT1hLl90cmFuc2l0aW9uLmR1cmF0aW9uKCkpLCJ0cmFuc2l0aW9uU3RhcnQiPT1QKXt2YXIgZmU9WS1lLnJlbmRlclN0YXJ0W0pdO2NlKz0iIHRyYW5zaXRpb24gZGVsYXkgICAgICAgICIrdTMoIiA+NSIpKFktZS5yZW5kZXJTdGFydFtKXSksY2UrPSIgZXhwZWN0''@;'; put 'put ''ZWQgIit1MygiID41IikoYyksY2UrPSIgZGlmZiAiK3UzKCIgPjUiKShmZS1jKX1pZigidHJhbnNpdGlvbkVuZCI9PVApe3ZhciBBZT1ZLWUudHJhbnNpdGlvblN0YXJ0W0pdO2NlKz0iIHRyYW5zaXRpb24gZHVyYXRpb24gICAgICIrdTMoIiA+NSIpKEFlKSxjZSs9IiBleHBlY3RlZCAiK3Uz''@;'; put 'put ''KCIgPjUiKShtKSxjZSs9IiBkaWZmICIrdTMoIiA+NSIpKEFlLW0pfWNvbnNvbGUubG9nKGNlKSx0PVl9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIERIdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2Vy''@;'; put 'put ''JiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBPSHQobix0LGUscixpLGE9e30pe2lmKChpPU9iamVjdC5hc3NpZ24oe30saSkpLnN0eWxlJiZpLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBjPUxzKG51bGwpO2Vsc2V7dmFyIFA9dGhpcy5fc2Vs''@;'; put 'put ''ZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxKPXRfKGZ3ZS5jYWxsKHRoaXMsaSkpO2M9UC5hcHBlbmQoImciKS5kYXRhKFtKXSksdUkuY2FsbChjLm5vZGUoKSxKKSxjd2UuY2FsbCh0aGlzLGMsbix0''@;'; put 'put ''LGUscixpLGEpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6Yyx4MTpuLHkxOnQseDI6ZSx5MjpyLGF0dHJpYnV0ZXM6aX0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIFBIdChuLHQsZSxyLGk9e30sYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRn''@;'; put 'put ''ZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBjPXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBpPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaSksdGhpcy5fZHJhd25FZGdlLngxPW4sdGhpcy5fZHJhd25FZGdlLnkxPXQsdGhpcy5fZHJhd25FZGdlLngyPWUsdGhpcy5f''@;'; put 'put ''ZHJhd25FZGdlLnkyPXIsIWMuZW1wdHkoKXx8aS5zdHlsZSYmaS5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KGM9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0''@;'; put 'put ''aGlzLl9kcmF3bkVkZ2UuZz1jKSxjLmVtcHR5KCl8fGN3ZS5jYWxsKHRoaXMsYyxuLHQsZSxyLGksYSksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIEZIdChuLHQsZT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3''@;'; put 'put ''biIpO3ZhciByPXRoaXMuX2RyYXduRWRnZS5nLGk9dGhpcy5fZHJhd25FZGdlLngxLGE9dGhpcy5fZHJhd25FZGdlLnkxLGM9dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1uLHRoaXMuX2RyYXduRWRnZS55Mj10LHV3ZShyLGksYSxuLHQsYyxl''@;'; put 'put ''KSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gSEh0KG4pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgdD10aGlzLl9kcmF3bkVkZ2UuZztpZih0LmVtcHR5KCkpcmV0dXJuIHRoaXM7dC5zZWxlY3RXaXRob3V0RGF0''@;'; put 'put ''YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQobik7dmFyIGM9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxtPWMuZGF0dW0oKSxDPXRoaXMuX2V4dHJhY3REYXRhKHQsbS5jaGlsZHJl''@;'; put 'put ''bi5sZW5ndGgsYy5kYXR1bSgpKTtyZXR1cm4gbS5jaGlsZHJlbi5wdXNoKEMpLFhhZSh0LEMpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpkd2UscmVtb3ZlRHJhd25FZGdlOmR3ZSxkcmF3bkVkZ2VTZWxlY3Rpb246aHdlLGRyYXduRWRnZVNlbGVjdGlvbjpo''@;'; put 'put ''d2UsZHJhd05vZGU6ZnVuY3Rpb24gTkh0KG4sdCxlLHI9e30saT17fSl7aWYoKHI9T2JqZWN0LmFzc2lnbih7fSxyKSkuc3R5bGUmJnIuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGE9THMobnVsbCk7ZWxzZXt2YXIgQz10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9w''@;'; put 'put ''YWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLFk9dF8oeXdlLmNhbGwodGhpcyxlLHIpKTthPUMuYXBwZW5kKCJnIikuZGF0YShbWV0pLHVJLmNhbGwoYS5ub2RlKCksWSkscHdlLmNhbGwodGhpcyxhLG4sdCxlLHIsaSl9cmV0dXJuIHRoaXMuX2RyYXdu''@;'; put 'put ''Tm9kZT17ZzphLG5vZGVJZDplLHg6bix5OnQsYXR0cmlidXRlczpyfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24gVkh0KG4sdCxlLHI9e30saT17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBhPXRoaXMuX2Ry''@;'; put 'put ''YXduTm9kZS5nO3JldHVybiBudWxsPT1lJiYoZT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxyPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsciksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1lLHRoaXMuX2RyYXduTm9kZS54PW4sdGhpcy5fZHJhd25Ob2RlLnk9dCwh''@;'; put 'put ''YS5lbXB0eSgpfHxyLnN0eWxlJiZyLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5n''@;'; put 'put ''PWEpLGEuZW1wdHkoKXx8cHdlLmNhbGwodGhpcyxhLG4sdCxlLHIsaSksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiBCSHQobix0LGU9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgcj10aGlzLl9kcmF3bk5vZGUu''@;'; put 'put ''ZyxpPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1uLHRoaXMuX2RyYXduTm9kZS55PXQsci5lbXB0eSgpfHxnd2UocixuLHQsaSksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIGpIdChuKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93''@;'; put 'put ''IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09biYmKG49dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFyIHQ9dGhpcy5fZHJhd25Ob2RlLmc7aWYodC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKHQuc2VsZWN0V2l0''@;'; put 'put ''aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KG4pLGUuVVJMfHxlLnRvb2x0aXApdmFyIGE9dC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLG09KGEuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigi''@;'; put 'put ''ZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxhLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7ZWxzZSB0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksbT10LnNlbGVjdFdpdGhvdXREYXRhUHJv''@;'; put 'put ''cGFnYXRpb24oInRleHQiKTttLnRleHQoZS5sYWJlbHx8bik7dmFyIFk9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxKPVkuZGF0dW0oKSxjZT10aGlzLl9leHRyYWN0RGF0YSh0LEou''@;'; put 'put ''Y2hpbGRyZW4ubGVuZ3RoLFkuZGF0dW0oKSk7cmV0dXJuIEouY2hpbGRyZW4ucHVzaChjZSksWGFlKHQsY2UpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTptd2UscmVtb3ZlRHJhd25Ob2RlOm13ZSxkcmF3bk5vZGVTZWxlY3Rpb246dndlLGRyYXduTm9kZVNl''@;'; put 'put ''bGVjdGlvbjp2d2UsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIGJGdCgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259fSxLeS5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gV0h0KG4pe3ZhciB0PXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gdD8odC5vcHRpb25zKG4p''@;'; put 'put ''LHJ6KGZ1bmN0aW9uKCl7dC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOnQ9bmV3IHVvZSh0aGlzLG4pLHR9LEt5LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIFpIdChuKXtyZXR1cm4gTHModGhpcy5zaXplKCk+''@;'; put 'put ''MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKG4pOm51bGwpfTt2YXIgWUh0PWQoOTgwODMpO2Z1bmN0aW9uIEdIdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiAkSHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItaWNvbiIsMzApLGt0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVybiBpLmxpYnJhcmllc1NlYXJjaD0iIixtdChpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGllKCl9fWZ1bmN0aW9uIEtIdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYi''@;'; put 'put ''LDI1KSgyLCJpbnB1dCIsMjYsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKTtyZXR1cm4gdWkoYS5saWJyYXJpZXNTZWFyY2gsaSl8fChhLmxpYnJhcmllc1NlYXJjaD1pKSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3Qo''@;'; put 'put ''ZSksbXQoRWUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxpZSgpLGN0KDQsR0h0LDEsMCwiY2xyLWljb24iLDI3KSg1LCRIdCwxLDAsImNsci1pY29uIiwyOCksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1kYSgzKSxyPUVlKCk7YWUoMiksbGkoIm5nTW9kZWwiLHIubGlicmFyaWVzU2VhcmNoKSxh''@;'; put 'put ''ZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFhIdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBxSHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItaWNvbiIs''@;'; put 'put ''MzApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKSxFZSgpO2NvbnN0IGk9ZGEoMyksYT1FZSgyKS4kaW1wbGljaXQsYz1FZSgpO3JldHVybiBpLnZhbHVlPSIiLGEuc2VhcmNoU3RyaW5nPSIiLG10KGMudHJlZU9uRmlsdGVyKGEsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxpZSgpfX1mdW5j''@;'; put 'put ''dGlvbiBKSHQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM2LDMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKDIpLiRpbXBsaWNpdDtyZXR1cm4gdWkoYS5zZWFy''@;'; put 'put ''Y2hTdHJpbmcsaSl8fChhLnNlYXJjaFN0cmluZz1pKSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS50cmVlT25GaWx0ZXIoaSwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGllKCksY3QoNCxYSHQsMSwwLCJj''@;'; put 'put ''bHItaWNvbiIsMjcpKDUscUh0LDEsMCwiY2xyLWljb24iLDI4KSxpZSgpKCl9aWYoMiZuKXtjb25zdCBlPWRhKDMpLHI9RWUoMikuJGltcGxpY2l0O2FlKDIpLGxpKCJuZ01vZGVsIixyLnNlYXJjaFN0cmluZyksYWUoMikseWUoIm5nSWYiLGUudmFsdWUubGVuZ3RoPDEpLGFlKCkseWUoIm5n''@;'; put 'put ''SWYiLGUudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBRSHQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gZU50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWljb24iLDMwKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSksRWUoKTtjb25zdCBp''@;'; put 'put ''PWRhKDMpLGE9RWUoKS4kaW1wbGljaXQsYz1FZSgzKTtyZXR1cm4gaS52YWx1ZT0iIixhLnNlYXJjaFN0cmluZz0iIixtdChjLnRyZWVPbkZpbHRlcihhLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxpZSgpfX1mdW5jdGlvbiB0TnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM5LDMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCkuJGltcGxpY2l0O3JldHVybiB1aShhLnNlYXJjaFN0cmluZyxpKXx8KGEuc2VhcmNoU3RyaW5nPWkpLG10KGkpfSksa3QoImtl''@;'; put 'put ''eXVwIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKDMpLnRyZWVPbkZpbHRlcihpLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxpZSgpLGN0KDQsUUh0LDEsMCwiY2xyLWljb24iLDI3KSg1LGVOdCwxLDAsImNsci1pY29uIiwyOCksaWUoKSgpfWlm''@;'; put 'put ''KDImbil7Y29uc3QgZT1kYSgzKSxyPUVlKCkuJGltcGxpY2l0O2FlKDIpLGxpKCJuZ01vZGVsIixyLnNlYXJjaFN0cmluZyksYWUoMikseWUoIm5nSWYiLGUudmFsdWUubGVuZ3RoPDEpLGFlKCkseWUoIm5nSWYiLGUudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBuTnQobix0KXtpZigxJm4p''@;'; put 'put ''e2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksa3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGk9Z3QoZSkuJGltcGxpY2l0LGE9RWUoKS4kaW1wbGljaXQsYz1FZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkuY29sdW1uT25DbGljayhpLGMs''@;'; put 'put ''YSkpfSksVnQoMiwiY2xyLWljb24iLDQxKSxUZSgzKSxpZSgpKCl9aWYoMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoNCk7YWUoKSxicigiY29sdW1uLWFjdGl2ZSIsci5saWJDb2x1bW5BY3RpdmUoZS5DT0xVUkkpKSxhZSgyKSxNcigiICIsZS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IHJOdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDMyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKGkpe2NvbnN0IGE9Z3QoZSkuJGltcGxpY2l0LGM9RWUoMikuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLnRyZWVOb2RlQ2xpY2tlZChpLGEsYy50YWJsZXMp''@;'; put 'put ''KX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaSl7Y29uc3QgYT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIHVpKGEuZXhwYW5kZWQsaSl8fChhLmV4cGFuZGVkPWkpLG10KGkpfSkscmUoMSwicCIsMzcpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBpPWd0KGUpLiRpbXBs''@;'; put 'put ''aWNpdCxhPUVlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS50YWJsZU9uQ2xpY2soaS5UQUJMRVVSSSxpLGEpKX0pLFZ0KDIsImNsci1pY29uIiwzOCksVGUoMyksaWUoKSxjdCg0LHROdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsbk50LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaWUo''@;'; put 'put ''KX1pZigyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YnIoImNsci1leHBhbmRlZCIsZS5leHBhbmRlZCksbGkoImNsckV4cGFuZGVkIixlLmV4cGFuZGVkKSx5ZSgiY2xyTG9hZGluZyIsZS5sb2FkaW5nQ29sdW1ucyYmIWUuY29sdW1ucyksYWUoKSx5ZSgiaWQiLGUuVEFCTEVVUkkpLGFlKDIp''@;'; put 'put ''LE1yKCIgIixlLlRBQkxFTkFNRSwiICIpLGFlKCkseWUoIm5nSWYiLGUuY29sdW1ucyksYWUoKSx5ZSgibmdGb3JPZiIsZS5jb2x1bW5zKX19ZnVuY3Rpb24gaU50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLGt0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''aSl7Z3QoZSk7Y29uc3QgYT1FZSgpLiRpbXBsaWNpdCxjPUVlKCk7cmV0dXJuIG10KGMudHJlZU5vZGVDbGlja2VkKGksYSxjLmxpYnJhcnlMaXN0KSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS4kaW1wbGljaXQ7cmV0dXJuIHVpKGEu''@;'; put 'put ''ZXhwYW5kZWQsaSl8fChhLmV4cGFuZGVkPWkpLG10KGkpfSkscmUoMSwicCIsMzMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCkuJGltcGxpY2l0LGE9RWUoKTtyZXR1cm4gYS5saWI9aS5MSUJSQVJZSUQsbXQoYS5saWJyYXJ5T25DbGljayhhLmxpYnx8IiIsaSkp''@;'; put 'put ''fSksVnQoMiwiY2xyLWljb24iLDM0KSxUZSgzKSxpZSgpLGN0KDQsSkh0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoNSxyTnQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNSksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQ7YnIoImNsci1leHBhbmRlZCIsZS5leHBhbmRlZCksbGko''@;'; put 'put ''ImNsckV4cGFuZGVkIixlLmV4cGFuZGVkKSx5ZSgiY2xyTG9hZGluZyIsZS5sb2FkaW5nVGFibGVzJiYhZS50YWJsZXMpLGFlKDMpLE1yKCIgIixlLkxJQlJBUllOQU1FLCIgIiksYWUoKSx5ZSgibmdJZiIsZS50YWJsZXMpLGFlKCkseWUoIm5nRm9yT2YiLGUudGFibGVzKX19ZnVuY3Rpb24g''@;'; put 'put ''YU50KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSxpTnQsNiw3LCJjbHItdHJlZS1ub2RlIiwzMSksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLCFlLmhpZGRlbiYmZS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBvTnQobix0KXsxJm4mJihyZSgwLCJkaXYi''@;'; put 'put ''LDQyKSgxLCJzcGFuIiw0MyksVGUoMiwiIExvYWRpbmcuLi4gIiksaWUoKSgpKX1mdW5jdGlvbiBzTnQobix0KXsxJm4mJihyZSgwLCJkaXYiLDQ0KSxWdCgxLCJjbHItaWNvbiIsNDUpLHJlKDIsInAiLDQ2KSxUZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxpZSgp''@;'; put 'put ''KCkpfWZ1bmN0aW9uIGxOdChuLHQpe2lmKDEmbiYmKHJlKDAsImgzIiw1NSksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKCksTXIoIiAiLGUuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2UuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2UuY3VycmVudExpbmVhZ2VQ''@;'; put 'put ''YXRoQ29sdW1uOmUuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gY050KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw1MyksY3QoMSxsTnQsMiwxLCJoMyIsNTQpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIiwhZS5jdXJyZW50TGluZWFn''@;'; put 'put ''ZVBhdGhDb2x1bW4mJiFlLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gdU50KG4sdCl7aWYoMSZuJiYocmUoMCwic3BhbiIpLFRlKDEpLHJlKDIsImEiLDU2KSxUZSgzKSxpZSgpLFRlKDQpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLE1yKCIgIixlLmxpbmVh''@;'; put 'put ''Z2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLGFlKCkseWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrZS5saW5lYWdlVGFibGVOYW1lKSxhZSgpLHZyKGUubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxhZSgpLE1yKCIiLGUubGluZWFnZUNvbHVtbk5hbWUubGVuZ3Ro''@;'; put 'put ''PjA/Ii4iK2UubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gZE50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw2Niksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSg0KS5kb3dubG9hZENTVigpKX0pLFRlKDEsIiBDU1YgIiks''@;'; put 'put ''aWUoKX19ZnVuY3Rpb24gaE50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDMpLmRvd25sb2FkU1ZHKCkpfSksVGUoMiwiU1ZHIiksaWUoKSxy''@;'; put 'put ''ZSgzLCJkaXYiLDY2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDMpLmRvd25sb2FkUE5HKCkpfSksVGUoNCwiUE5HIiksaWUoKSxyZSg1LCJkaXYiLDY2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDMpLmRvd25sb2FkRG90KCkp''@;'; put 'put ''fSksVGUoNiwiRG90IiksaWUoKSxjdCg3LGROdCwyLDAsImRpdiIsNjcpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKDMpO2FlKDcpLHllKCJuZ0lmIixlLmZsYXRkYXRhKX19ZnVuY3Rpb24gZk50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIi''@;'; put 'put ''LDY4KSgxLCJpbnB1dCIsNjkpLGt0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgzKTtyZXR1cm4gdWkoYS5yZWZyZXNoQ2FjaGUsaSl8fChh''@;'; put 'put ''LnJlZnJlc2hDYWNoZT1pKSxtdChpKX0pLGllKCkscmUoMiwibGFiZWwiKSxUZSgzLCJSZWZyZXNoIENhY2hlIiksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgzKTthZSgpLGxpKCJuZ01vZGVsIixlLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIHBOdChuLHQpe2lmKDEmbil7Y29uc3QgZT1J''@;'; put 'put ''bigpO3JlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikubGltaXREb3REZXB0aD0hMCl9KSxUZSgyLCIgTGltaXQgZGVwdGggIiksaWUoKSxyZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSxrdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gaS5mb3J3YXJkTGluZWFnZT0hMSxtdChpLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2kub25HZW5lcmF0ZUNsaWNrKCk6aS5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksVnQoNSwiaW5wdXQiLDYxKSxyZSg2''@;'; put 'put ''LCJsYWJlbCIpLFRlKDcsIkJhY2t3YXJkIiksaWUoKSgpLHJlKDgsImRpdiIsNjApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVybiBpLmZvcndhcmRMaW5lYWdlPSEwLG10KGkucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aS5vbkdlbmVyYXRl''@;'; put 'put ''Q2xpY2soKTppLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxWdCg5LCJpbnB1dCIsNjEpLHJlKDEwLCJsYWJlbCIpLFRlKDExLCJGb3J3YXJkIiksaWUoKSgpKCkscmUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxUZSgxNCwiIERvd25sb2FkICIpLFZ0KDE1''@;'; put 'put ''LCJjbHItaWNvbiIsMjIpLGllKCksY3QoMTYsaE50LDgsMSwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxpZSgpLGN0KDE3LGZOdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoMik7YWUoNSkseWUoImNoZWNrZWQiLCFlLmZvcndhcmRMaW5l''@;'; put 'put ''YWdlKSxhZSg0KSx5ZSgiY2hlY2tlZCIsZS5mb3J3YXJkTGluZWFnZSksYWUoNCkseWUoImRpc2FibGVkIiwhZS5jb2x1bW4mJiFlLnRhYmxlKSxhZSg0KSx5ZSgibmdJZiIsZS5jb2x1bW4pfX1mdW5jdGlvbiBnTnQobix0KXsxJm4mJihyZSgwLCJzcGFuIiw3MyksVGUoMSwiIExvYWRpbmcu''@;'; put 'put ''Li4gIiksaWUoKSl9ZnVuY3Rpb24gbU50KG4sdCl7MSZuJiZWdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24gdk50KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksY3QoMixtTnQsMSwwLCJzcGFuIiw3NiksaWUoKSxWdCgzLCJkaXYiLDc3KSxpZSgpKSwyJm4pe2NvbnN0''@;'; put 'put ''IGU9RWUoMyk7YWUoMikseWUoIm5nSWYiLGUuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiB5TnQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxjdCgyLGdOdCwyLDAsInNwYW4iLDcxKSgzLHZOdCw0LDEsImRpdiIsNzIpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDIp''@;'; put 'put ''O2JyKCJtdC0yIixlLnRhYmxlRmxhZyksYWUoMikseWUoIm5nSWYiLGUuZ3JhcGhMb2FkaW5nKSxhZSgpLHllKCJuZ0lmIiwhZS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBfTnQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLGNOdCwyLDEsImRpdiIsNDcpLHJlKDIsImRpdiIsNDgpKDMsInNl''@;'; put 'put ''Y3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxjdCg1LHVOdCw1LDQsInNwYW4iLDExKSxpZSgpLGN0KDYscE50LDE4LDQsImRpdiIsNTEpLGllKCksY3QoNyx5TnQsNCw0LCJkaXYiLDUyKSxpZSgpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLCFlLmdyYXBoQ29udGFpbmVy''@;'; put 'put ''KSxhZSg0KSx5ZSgibmdJZiIsZS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxhZSgpLHllKCJuZ0lmIixlLmdyYXBoQ29udGFpbmVyKSxhZSgpLHllKCJuZ0lmIixlLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gYk50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWRy''@;'; put 'put ''b3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKCkucmVuZGVyVG9Eb3dubG9hZCgiU1ZHIikpfSksVGUoMiwiU1ZHIiksaWUoKSxyZSgzLCJkaXYiLDY2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUp''@;'; put 'put ''LG10KEVlKCkucmVuZGVyVG9Eb3dubG9hZCgiUE5HIikpfSksVGUoNCwiUE5HIiksaWUoKSxyZSg1LCJkaXYiLDY2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpO3JldHVybiBpLmRvd25sb2FkRG90KCksbXQoaS5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLFRl''@;'; put 'put ''KDYsIiBEb3QgIiksaWUoKSgpfX1jb25zdCB3TnQ9ZCg5NzU4Nik7bGV0IEF6PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSxjLG0sQyxQKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWUsdGhpcy5zYXNTZXJ2aWNlPXIsdGhpcy5yb3V0ZT1pLHRoaXMucm91dGVyPWEsdGhpcy5sb2Nh''@;'; put 'put ''dGlvbj1jLHRoaXMuZXZlbnRTZXJ2aWNlPW0sdGhpcy5sb2dnZXJTZXJ2aWNlPUMsdGhpcy5oZWxwZXJTZXJ2aWNlPVAsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMuZm9yd2FyZExpbmVhZ2U9ITEsdGhpcy5mbGF0ZGF0YT1bXSx0aGlzLmdyYXBoTG9hZGluZz0h''@;'; put 'put ''MSx0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuZ3JhcGhDb250YWluZXI9ITEsdGhpcy52aXpJbnB1dD0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy50YWJsZUNvbHVtbnNSZWY9IiIsdGhp''@;'; put 'put ''cy5saW5lYWdlVGFibGVOYW1lPSIiLHRoaXMubGluZWFnZUNvbHVtbk5hbWU9IiIsdGhpcy5saWI9bnVsbCx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLnJlZnJlc2hDYWNoZT0hMSx0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPSIiLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoQ29s''@;'; put 'put ''dW1uPSIiLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmxhcmdlRG90RmlsZUxpbWl0PTFlMyx0aGlzLmxpbWl0RG90RGVwdGg9ITEsdGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLmRlYm91bmNlVGltZT0yMDB9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJs''@;'; put 'put ''ZUZsYWc9IXRoaXMudGFibGVGbGFnfXRhYmxlT25DbGljayhlLHIsaSl7dmFyIGE9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooYyxtLEMsUD0hMSl7bS5jb2x1bW5zPyhtLmV4cGFuZGVkPSFtLmV4cGFuZGVkLCEwPT09bS5leHBhbmRlZCYmKGEudGFibGU9YyxQfHxhLm9uR2VuZXJhdGVHcmFw''@;'; put 'put ''aFRhYmxlQ2xpY2soKSkpOihtLmV4cGFuZGVkPSFtLmV4cGFuZGVkLG0ubG9hZGluZ0NvbHVtbnM9ITAsYS50YWJsZT1jLGEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9bS5MSUJOQU1FKyIuIittLlRBQkxFTkFNRSx5aWVsZCBhLnNlbGVjdFRhYmxlKGMsbSksUHx8YS5vbkdlbmVyYXRl''@;'; put 'put ''R3JhcGhUYWJsZUNsaWNrKCkpLGEuY29sbGFwc2VUcmVlSXRlbXMoQy50YWJsZXMsbSl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9c2VsZWN0VGFibGUoZSxyKXt2YXIgaT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2kuY29sdW1uc0xpc3Q9W107bGV0IGE9e1NBU0NvbnRyb2xUYWJsZTpb''@;'; put 'put ''e3RhYmxldXJpOmV9XX07eWllbGQgaS5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YWNvbHMiLGEpLnRoZW4oYz0+e2kuY29sdW1uc0xpc3Q9Yy5hZGFwdGVyUmVzcG9uc2UubWV0YWNvbHMsaS5jb2x1bW5zTGlzdCYmaS5jb2x1bW5zTGlzdC5sZW5ndGg+MCYmKHIuY29sdW1u''@;'; put 'put ''cz1pLmNvbHVtbnNMaXN0LHIuZXhwYW5kZWQ9ITAsci5sb2FkaW5nQ29sdW1ucz0hMSl9KS5jYXRjaChjPT5jKSxpLnNldEdsb2JhbERhdGEoKX0pKCl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1jb2xsYXBzZVRyZWVJdGVtcyhlLHIpe2UuZm9yRWFjaChpPT57SlNPTi5zdHJpbmdpZnkoaSkhPT1KU09OLnN0cmluZ2lmeShyKSYmKGkuZXhwYW5kZWQ9ITEpfSl9''@;'; put 'put ''dHJlZU5vZGVDbGlja2VkKGUscixpKXsiQ29sbGFwc2UiPT09ZS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaSxyKX1saWJyYXJ5T25DbGljayhlLHIpe3ZhciBpPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7ci5pbkZvcmVncm91bmQ9ITAsci50YWJsZXM/ci5leHBh''@;'; put 'put ''bmRlZD0hci5leHBhbmRlZDooci5sb2FkaW5nVGFibGVzPSEwLHlpZWxkIGkuc2VsZWN0TGlicmFyeShlLHIpKSxpLmNvbGxhcHNlVHJlZUl0ZW1zKGkubGlicmFyeUxpc3Qscil9KSgpfXNlbGVjdExpYnJhcnkoZSxyKXt2YXIgaT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2kudGFibGVz''@;'; put 'put ''TGlzdD1bXSxpLmNvbHVtbnNMaXN0PVtdO2xldCBhPXtTQVNDb250cm9sVGFibGU6W3tsaWJ1cmk6ZX1dfTt5aWVsZCBpLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhdGFibGVzIixhKS50aGVuKGM9PntpLnRhYmxlc0xpc3Q9Yy5hZGFwdGVyUmVzcG9uc2UubWV0YXRhYmxl''@;'; put 'put ''cyxpLnRhYmxlc0xpc3QmJmkudGFibGVzTGlzdC5sZW5ndGg+MCYmKHIudGFibGVzPWkudGFibGVzTGlzdCxyLmV4cGFuZGVkPSEwKSxpLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKGM9PmMpLHIubG9hZGluZ1RhYmxlcz0hMX0pKCl9Y29sdW1uT25DbGljayhlLHIsaSl7dGhpcy5saWI9ci5M''@;'; put 'put ''SUJSQVJZSUQsdGhpcy50YWJsZT1pLlRBQkxFVVJJLHRoaXMuY29sdW1uPWUuQ09MVVJJLHRoaXMuc2V0R2xvYmFsRGF0YSgpLHRoaXMub25HZW5lcmF0ZUNsaWNrKCl9dHJlZU9uRmlsdGVyKGUscil7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihlLHIpfWxpYnJhcnlPbkZpbHRl''@;'; put 'put ''cigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxXbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJDb2x1bW5BY3RpdmUoZSl7aWYoIXRo''@;'; put 'put ''aXMuY29sdW1uKXJldHVybiExO2xldCByPWUuc3BsaXQoIlxcIiksaT10aGlzLmNvbHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gcltyLmxlbmd0aC0xXT09aVtpLmxlbmd0aC0xXX1zZXRHbG9iYWxEYXRhKCl7V24ubGluZWFnZS5saWJyYXJ5TGlzdD10aGlzLmxpYnJhcnlMaXN0LFduLmxpbmVh''@;'; put 'put ''Z2UudGFibGVzTGlzdD10aGlzLnRhYmxlc0xpc3QsV24ubGluZWFnZS5jb2x1bW5zTGlzdD10aGlzLmNvbHVtbnNMaXN0LFduLmxpbmVhZ2UubGliPXRoaXMubGliLFduLmxpbmVhZ2UudGFibGU9dGhpcy50YWJsZSxXbi5saW5lYWdlLmNvbHVtbj10aGlzLmNvbHVtbn1sb2FkR2xvYmFsRGF0''@;'; put 'put ''YSgpe3RoaXMubGlicmFyeUxpc3Q9V24ubGluZWFnZS5saWJyYXJ5TGlzdCx0aGlzLnRhYmxlc0xpc3Q9V24ubGluZWFnZS50YWJsZXNMaXN0LHRoaXMuY29sdW1uc0xpc3Q9V24ubGluZWFnZS5jb2x1bW5zTGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaD1Xbi5saW5lYWdlLmxpYnJhcmllc1Nl''@;'; put 'put ''YXJjaH1yZXN1Ym1pdFdpdGhNYXhEZXB0aChlKXtsZXQgcjt0aGlzLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCksZSYmKHI9e21heF9kZXB0aDplfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczpyfSl9bmdPbkluaXQoKXtXbi52aWV3''@;'; put 'put ''ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9saW5lYWdlIjtsZXQgZT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5yZWxvYWQ7aWYodm9pZCAwIT09ZSl7bGV0IHI9dGhpcy5yb3V0ZXIudXJsOyJyZWxvYWQiPT09ZT9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZmlyc3RMb2FkIik/KGxvY2Fs''@;'; put 'put ''U3RvcmFnZS5yZW1vdmVJdGVtKCJmaXJzdExvYWQiKSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShyLnNsaWNlKDAsci5sYXN0SW5kZXhPZigiLyIpKSkpOihsb2NhbFN0b3JhZ2UuZmlyc3RMb2FkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9''@;'; put 'put ''LDJlMykpOnRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHIuc2xpY2UoMCxyLmxhc3RJbmRleE9mKCIvIikpKX10aGlzLmluaXREYXRhKCl9aW5pdERhdGEoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe1duLmxpbmVhZ2UubGlicmFyeUxpc3QmJihXbi5saW5lYWdlLmxpYnJh''@;'; put 'put ''cnlMaXN0Lmxlbmd0aD4wP2UubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBlLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKS50aGVuKGM9PntlLmxpYnJhcnlMaXN0PWMuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnMsZS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJp''@;'; put 'put ''ZXMoZS5saWJyYXJ5TGlzdCksZS5saWJyYXJ5TGlzdCYmZS5saWJyYXJ5TGlzdC5sZW5ndGg+MCYmKGUubGliPWUubGlicmFyeUxpc3RbMF0uTElCUkFSWUlEKSxlLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKGM9PmMpLGUucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKGM9PntlLm9uUm91''@;'; put 'put ''dGVDaGFuZ2UoKX0pLGUucm91dGUucGFyYW1zLnN1YnNjcmliZShjPT57ZS5vblJvdXRlQ2hhbmdlKCl9KSl9KSgpfW9uUm91dGVDaGFuZ2UoKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pntjb25zdCBlPXRo''@;'; put 'put ''aXMucm91dGUuc25hcHNob3QucGFyYW1zLmNvbHVyaSxyPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRpcmVjdGlvbixpPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlaWQsYT10aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLm1heF9kZXB0aDtlJiZyJiYodGhpcy5m''@;'; put 'put ''b3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1yLHRoaXMuY29sdW1uPWUsdGhpcy5nZW5lcmF0ZUdyYXBoKGUscixhKSksIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIikmJmkmJnImJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PXIsdGhpcy50YWJsZT1pLHRoaXMu''@;'; put 'put ''Z2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoaSxyLGEpKX0sdGhpcy5kZWJvdW5jZVRpbWUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe31kaXJlY3Rpb25UZXh0KCl7cmV0dXJuIHRoaXMuZm9yd2FyZExpbmVhZ2U/IkZPUldBUkQiOiJSRVZFUlNFIn1vbkdlbmVyYXRlQ2xpY2soKXtsZXQgZT10aGlz''@;'; put 'put ''LmRpcmVjdGlvblRleHQoKSxyPXRoaXMuY29sdW1uP3RoaXMuY29sdW1uLnN1YnN0cmluZyh0aGlzLmNvbHVtbi5pbmRleE9mKCJcXCIpKzEpOm51bGw7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS9jb2x1bW4vIityKyIvIitlKX1vbkdlbmVyYXRlR3JhcGhUYWJs''@;'; put 'put ''ZUNsaWNrKCl7bGV0IGU9dGhpcy5kaXJlY3Rpb25UZXh0KCkscj10aGlzLnRhYmxlLmluY2x1ZGVzKCJcXCIpP3RoaXMudGFibGUuc3BsaXQoIlxcIilbMV06dGhpcy50YWJsZTt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlLyIrcisiLyIrZSl9Z2VuZXJhdGVHcmFw''@;'; put 'put ''aFRhYmxlTGV2ZWwoZSxyLGkpe3ZhciBhPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0IGM9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmUsZGlyZWN0aW9uOnJ8fGEuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09Yy5TQVNDb250cm9sVGFibGVbMF0udGFi''@;'; put 'put ''bGVfaWQmJmEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGkmJihjLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aSksYS50YWJsZUZsYWc9''@;'; put 'put ''ITEsYS5zd2l0Y2hGbGFnPSEwLGEuZ3JhcGhDb250YWluZXI9ITAsYS5ncmFwaExvYWRpbmc9ITAsYS52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgobSxDKT0+e2Euc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIixjKS50aGVuKGZ1bmN0aW9uKCl7dmFyIFA9''@;'; put 'put ''WihmdW5jdGlvbiooWSl7aWYoWS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEubGVuZ3RoPjAmJmEubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhp''@;'; put 'put ''bXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBZKXJldHVybiBhLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgYS5idWlsZEdyYXBoKCk7YS5saW5lYWdlVGFibGVOYW1lPVkuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCUkVGKyIuIitZLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgSj1Z''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLGNlPSIiO2ZvcihsZXQgZmU9MDtmZTxKLmxlbmd0aDtmZSsrKWNlKz11bmVzY2FwZShKW2ZlXS5MSU5FKSsiXG4iO2lmKGEuZmxhdGRhdGE9WS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEsYS5saWJyYXJ5TGlzdCl7bGV0IGZlPWEubGlicmFy''@;'; put 'put ''eUxpc3QuZmluZChBZT0+WS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhBZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKGZlKXtsZXQgQWU7aWYoeWllbGQgYS5saWJyYXJ5T25DbGljayhmZS5MSUJSQVJZSUQsZmUpLGZlLnRhYmxl''@;'; put 'put ''cyYmKEFlPWZlLnRhYmxlcy5maW5kKEhlPT5IZS5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFkuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTEVJRC50b1VwcGVyQ2FzZSgpKSksQWUpKXtpZihhLnRhYmxlPUFlLlRBQkxFVVJJLGEudGFibGUpe2NvbnN0IEhlPWEudGFibGUu''@;'; put 'put ''cmVwbGFjZSgiXFwiLCJcXFxcIik7c2V0VGltZW91dCgoKT0+e2xldCBYZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7SGV9J11gKTtYZSYmWGUuc2Nyb2xsSW50b1ZpZXcoKX0sMWUzKX1hLnRhYmxlT25DbGljayhBZS5UQUJMRVVSSSxBZSxmZSx2b2lkIDAhPT1yKX1mZSYmKGZl''@;'; put 'put ''LmV4cGFuZGVkPSEwKSxBZSYmKEFlLmV4cGFuZGVkPSEwKX19YS52aXpJbnB1dD1jZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixhLnZpeklucHV0PWEudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksYS5pZGxvb2t1''@;'; put 'put ''cD1ZLmFkYXB0ZXJSZXNwb25zZS5pZGxvb2t1cCxZLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aD5hLmxhcmdlRG90RmlsZUxpbWl0P2EubGFyZ2VEb3RGaWxlTGluZXM9WS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbC5sZW5ndGg6YS5idWlsZEdyYXBoKCksbSgpfSk7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKFkpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKFA9PnthLmdyYXBoTG9hZGluZz0hMSxhLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Y2FuY2VsUmVuZGVyaW5nR3JhcGgoKXt0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVh''@;'; put 'put ''Z2UgQXZhaWxhYmxlfSIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgpfWNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKXt0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCgpPT57aWYobnVsbCE9PXRoaXMucGVuZGluZ1JlbmRlckRv''@;'; put 'put ''d25sb2FkKXtzd2l0Y2godGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe2Nhc2UiUE5HIjp0aGlzLmRvd25sb2FkUE5HKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMuZG93bmxvYWRTVkcoKX10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD1udWxsLHRoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7''@;'; put 'put ''Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmJ1aWxkR3JhcGgoKX19KX1yZW5kZXJUb0Rvd25sb2FkKGUpe3N3aXRjaChlKXtjYXNlIlBORyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlBORyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCk7YnJlYWs7Y2FzZSJTVkciOnRo''@;'; put 'put ''aXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJTVkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfX1tYWtlR3JhcGhMaW5rYWJsZShlKXtsZXQgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ3JhcGggLm5vZGUiKTtmb3IobGV0IGkgb2Ygcil7bGV0IG0sYT1pLnF1ZXJ5U2Vs''@;'; put 'put ''ZWN0b3IoInRpdGxlIikuaW5uZXJIVE1MLGM9ZS5maW5kKEM9PkMuTUVUQUlEPT09YSk7YyYmKG09IlRBQkxFIj09PWMuTUVUQVRZUEU/Ii92aWV3L2RhdGEvIitjLk1FVEFOQU1FOiIvdmlldy9tZXRhZGF0YS9vYmplY3QvIitjLk1FVEFJRCxpLmNsYXNzTGlzdC5hZGQoImN1cnNvci1wb2lu''@;'; put 'put ''dGVyIiksaS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsQz0+e3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobSl9KSl9fWdlbmVyYXRlR3JhcGgoZSxyLGkpe3ZhciBhPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7bGV0IGM9e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTplfHxhLmNvbHVt''@;'; put 'put ''bixkaXJlY3Rpb246cnx8YS5kaXJlY3Rpb25UZXh0KCkscmVmcmVzaDphLnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT1jLlNBU0NvbnRyb2xUYWJsZVswXS5jb2x1cmkmJmEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1''@;'; put 'put ''cmkgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGkmJihjLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aSksYS50YWJsZUZsYWc9ITEsYS5zd2l0Y2hGbGFnPSEwLGEuZ3JhcGhDb250YWluZXI9ITAsYS5ncmFwaExvYWRpbmc9ITAsYS52aXpJbnB1dD0iIixu''@;'; put 'put ''ZXcgUHJvbWlzZSgobSxDKT0+e2Euc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNoY29sbGluZWFnZSIsYykudGhlbihmdW5jdGlvbigpe3ZhciBQPVooZnVuY3Rpb24qKFkpe2lmKFkuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZhLmxpY2VuY2VTZXJ2aWNlLmNo''@;'; put 'put ''ZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qg''@;'; put 'put ''c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWS5hZGFwdGVyUmVzcG9uc2UpcmV0dXJuIGEudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBhLmJ1aWxk''@;'; put 'put ''R3JhcGgoKTthLmxpbmVhZ2VUYWJsZU5hbWU9WS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK1kuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTkFNRSxhLmxpbmVhZ2VDb2x1bW5OYW1lPVkuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uQ09MTkFNRSxhLmlkbG9va3VwPVku''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLmlkbG9va3VwO2xldCBKPVkuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMsY2U9IiI7Zm9yKGxldCBmZT0wO2ZlPEoubGVuZ3RoO2ZlKyspY2UrPXVuZXNjYXBlKEpbZmVdLlNUUklORykrIlxuIjtpZihhLnZpeklucHV0PWNlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdl''@;'; put 'put ''IEF2YWlsYWJsZX0iLGEudml6SW5wdXQ9YS52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxhLmZsYXRkYXRhPVkuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLGEubGlicmFyeUxpc3Qpe2xldCBBZSxmZT1hLmxpYnJhcnlMaXN0LmZpbmQo''@;'; put 'put ''SGU9PlkuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoSGU/LkxJQlJBUllJRD8udG9VcHBlckNhc2UoKSkpO2ZlJiYoeWllbGQgYS5saWJyYXJ5T25DbGljayhmZS5MSUJSQVJZSUQsZmUpLGZlLnRhYmxlcyYmKEFlPWZlLnRhYmxlcy5m''@;'; put 'put ''aW5kKEhlPT5IZS5UQUJMRVVSST09PVkuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCVVJJKSxBZSYmYS50YWJsZU9uQ2xpY2soQWUuVEFCTEVVUkksQWUsZmUsITApLnRoZW4oKCk9PntsZXQgSGU9QWUuVEFCTEVVUkk7aWYoSGUpe2NvbnN0IFhlPUhlLnJlcGxhY2UoIlxcIiwiXFxcXCIp''@;'; put 'put ''O2xldCBydD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7WGV9J11gKTtzZXRUaW1lb3V0KCgpPT57cnQmJihhLmxvZ2dlclNlcnZpY2UubG9nKCJsaWJyYXJ5VG9TZWxlY3QiLGZlKSxydC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksZmUmJihmZS5leHBhbmRlZD0hMCksQWUm''@;'; put 'put ''JihBZS5leHBhbmRlZD0hMCkpfVkuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoPmEubGFyZ2VEb3RGaWxlTGltaXQ/YS5sYXJnZURvdEZpbGVMaW5lcz1ZLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aDphLmJ1aWxkR3JhcGgoKSxtKCl9KTtyZXR1cm4gZnVuY3Rpb24oWSl7''@;'; put 'put ''cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goUD0+e2EuZ3JhcGhMb2FkaW5nPSExLGEuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1nZXRTVkdVUkwoKXtsZXQgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxyPW5ldyBYTUxTZXJpYWxpemVyLGk9''@;'; put 'put ''bmV3IEJsb2IoW3Iuc2VyaWFsaXplVG9TdHJpbmcoZSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGkpfWRvd25sb2FkU1ZHKCl7VHooIiNncmFwaCIpLnJlc2V0Wm9vbSgpO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtlLmhy''@;'; put 'put ''ZWY9dGhpcy5nZXRTVkdVUkwoKSxlLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZS5jbGljaygpfWRvd25sb2FkUE5HKCl7dmFyIGU9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtUeigiI2dyYXBoIikucmVzZXRab29tKCksWUh0LnNhdmVTdmdBc1BuZyhkb2N1bWVudC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCIjZ3JhcGggc3ZnIiksZS5jb25zdHJ1Y3ROYW1lKCJwbmciKSl9KSgpfWRvd25sb2FkQ1NWKCl7bGV0IGU9dGhpcy5mbGF0ZGF0YTtjb25zdCByPShZLEopPT5udWxsPT09Sj8iIjpKLGk9T2JqZWN0LmtleXMoZVswXSk7bGV0IGE9ZS5tYXAoWT0+aS5tYXAoSj0+SlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkoWVtKXSxyKSkuam9pbigiLCIpKTthLnVuc2hpZnQoaS5qb2luKCIsIikpO2xldCBjPWEuam9pbigiXHJcbiIpO3ZhciBtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxDPW5ldyBCbG9iKFtjXSx7dHlwZToidGV4dC9jc3YifSksUD13aW5kb3cuVVJMLmNyZWF0ZU9i''@;'; put 'put ''amVjdFVSTChDKTttLmhyZWY9UCxtLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgiY3N2IiksbS5jbGljaygpLHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKFApfWdldERvdFVybCgpe2xldCByPW5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KTtyZXR1''@;'; put 'put ''cm4gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwocil9ZG93bmxvYWREb3QoKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZS5ocmVmPXRoaXMuZ2V0RG90VXJsKCksZS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpLGUuY2xpY2soKX1zaG93U3ZnKCl7d2lu''@;'; put 'put ''ZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVpbGRHcmFwaChlKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9PntUeigiI2dyYXBoIikuem9vbSghMCku''@;'; put 'put ''YWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdy''@;'; put 'put ''YXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksZSYmZSgpfSl9LDEwMCl9Y29uc3RydWN0TmFtZShlKXtsZXQgcj0iIixpPSIiLGE9IiIsYz13TnQoKS5mb3JtYXQoIllZTU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBtPXRoaXMu''@;'; put 'put ''bGlicmFyeUxpc3QuZmluZChDPT5DLkxJQlJBUllJRD09dGhpcy5saWIpO20mJihyPWBfJHttLkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IG09dGhpcy50YWJsZXNMaXN0LmZpbmQoQz0+Qy5UQUJMRVVSST09dGhpcy50YWJs''@;'; put 'put ''ZSk7bSYmKGk9YF8ke20uVEFCTEVOQU1FfWApfWlmKHRoaXMuY29sdW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgbT10aGlzLmNvbHVtbnNMaXN0LmZpbmQoQz0+Qy5DT0xVUkk9PXRoaXMuY29sdW1uKTttJiYoYT1gXyR7bS5DT0xOQU1FfWApfXJldHVybmAke3RoaXMu''@;'; put 'put ''ZGlyZWN0aW9uVGV4dCgpfSR7cn0ke2l9JHthfV8ke2N9LiR7ZX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEsxKSxXZShKcyksV2UoczApLFdlKHJsKSxXZShsMiksV2UoU2MpLFdlKG1oKSxXZShMdSkpfX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1sibWF4RGVwdGhEb3QiLCIiXSxbIm1heERlcHRoIiwiIl0sWyJzZWFyY2hMaWJU''@;'; put 'put ''cmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50''@;'; put 'put ''LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiLCJkLWZs''@;'; put 'put ''ZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwiTWF4IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbMSwibWItMjAiXSxbMSwiYmlnbGluZWFn''@;'; put 'put ''ZS1yb3ciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsIm10LTMtbmVnYXRpdmUiLDMsImRpc2FibGVkIl0sWyJzaGFwZSIsImNh''@;'; put 'put ''cmV0IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUi''@;'; put 'put ''LCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1l''@;'; put 'put ''cyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIs''@;'; put 'put ''ImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcFN0ZWFsRm9jdXMiLCIi''@;'; put 'put ''LCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsImlkIl0sWyJzaGFwZSIsInRh''@;'; put 'put ''YmxlIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNs''@;'; put 'put ''aWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1m''@;'; put 'put ''aWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWyJjbGFzcyIsImNhcmQtaGVhZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiZm9y''@;'; put 'put ''bS1ibG9jayIsInN3IiwicG9zaXRpb24tcmVsYXRpdmUiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibGluYWdlLXRpdGxlLXdyYXBwZXIiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJmb250LXdlaWdodC1ib2xkIiwicG9zaXRpb24tYWJzb2x1dGUiXSxbImNs''@;'; put 'put ''YXNzIiwiY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCIsNCwibmdJZiJdLFszLCJtdC0yIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIs''@;'; put 'put ''InRleHQtY2VudGVyIHBiLTEwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwicGItMTAiXSxbMywicm91dGVyTGluayJdLFsxLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtZW5kIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tb3V0bGluZSIsIm1yLTUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImRpcmVjdGlvbiIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEw''@;'; put 'put ''Il0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIs''@;'; put 'put ''IiIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsImNoYW5nZSIsIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bp''@;'; put 'put ''bm5lciJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24ocixpKXtpZigxJnIpe2NvbnN0IGE9SW4oKTtyZSgwLCJhcHAtc2lkZWJhciIsNCksa3QoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGd0KGEpLG10KGkubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxyZSgxLCJjbHItdHJlZSIpLGN0KDIsS0h0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoMyxhTnQsMiwxLCJuZy1jb250YWluZXIiLDYpLGllKCksY3QoNCxvTnQsMywwLCJkaXYiLDcpLGllKCkscmUoNSwiZGl2Iiw4KSg2LCJk''@;'; put 'put ''aXYiLDkpLGN0KDcsc050LDQsMCwiZGl2IiwxMCkoOCxfTnQsOCw0LCJuZy1jb250YWluZXIiLDExKSxpZSgpKCkscmUoOSwiY2xyLW1vZGFsIiwxMikoMTAsImgzIiwxMyksVGUoMTEsIkxpbWl0IERlcHRoIiksaWUoKSxyZSgxMiwiZGl2IiwxNCkoMTMsInAiKSxUZSgxNCwiRW50ZXIgdGhl''@;'; put 'put ''IGRlcHRoIG51bWJlciB5b3Ugd291bGQgbGlrZSB0byBsaW1pdCBET1QgcmVuZGVyaW5nIHRvOiIpLGllKCkoKSxyZSgxNSwiZGl2IiwxNSkoMTYsImRpdiIsMTYpLFZ0KDE3LCJpbnB1dCIsMTcsMCksaWUoKSxyZSgxOSwiY2xyLWNvbnRyb2wtaGVscGVyIiwxOCksVGUoMjAsIlRvIHJlbmRl''@;'; put 'put ''ciB3aXRoIHVubGltaXRlZCBkZXB0aCwgbGVhdmUgdGhlIGlucHV0IGVtcHR5IiksaWUoKSxyZSgyMSwiZGl2IiwxOSkoMjIsImJ1dHRvbiIsMjApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5saW1pdERvdERlcHRoPSExKX0pLFRlKDIzLCIgQ2FuY2VsICIpLGll''@;'; put 'put ''KCkscmUoMjQsImJ1dHRvbiIsMjApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChhKTtjb25zdCBtPWRhKDE4KTtyZXR1cm4gaS5yZXN1Ym1pdFdpdGhNYXhEZXB0aChtLnZhbHVlKSxtdChpLmxpbWl0RG90RGVwdGg9ITEpfSksVGUoMjUsIiBSZXN1Ym1pdCAiKSxpZSgpKCkoKSgpLHJlKDI2''@;'; put 'put ''LCJjbHItbW9kYWwiLDEyKSgyNywiaDMiLDEzKSxUZSgyOCwiV2FybmluZyIpLGllKCkscmUoMjksImRpdiIsMTQpKDMwLCJwIiksVGUoMzEpLGllKCkoKSxyZSgzMiwiZGl2IiwxNSkoMzMsImRpdiIsMTkpKDM0LCJwIiksVGUoMzUsIlJlbmRlciBhbnl3YXkgKHRoaXMgbWF5IHRha2UgYSBs''@;'; put 'put ''b25nIHRpbWUpIiksaWUoKSxyZSgzNiwiYnV0dG9uIiwyMCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKSl9KSxUZSgzNywiIFJlbmRlciAiKSxpZSgpKCkscmUoMzgsImRpdiIsMTkpKDM5LCJwIiksVGUoNDAsIkRvd25s''@;'; put 'put ''b2FkIHRoZSByZXN1bHQgKFBORyAmIFNWRyByZXF1aXJlIHJlbmRlcmluZykiKSxpZSgpLHJlKDQxLCJjbHItZHJvcGRvd24iKSg0MiwiYnV0dG9uIiwyMSksVGUoNDMsIiBEb3dubG9hZCAiKSxWdCg0NCwiY2xyLWljb24iLDIyKSxpZSgpLGN0KDQ1LGJOdCw3LDAsImNsci1kcm9wZG93bi1t''@;'; put 'put ''ZW51IiwyMyksaWUoKSgpLHJlKDQ2LCJkaXYiLDE5KSg0NywicCIpLFRlKDQ4LCJSZXN1Ym1pdCB3aXRoIGEgbWF4LWRlcHRoIChzcGVjaWZ5IGRlcHRoKSIpLGllKCksVnQoNDksImlucHV0IiwxNywxKSxyZSg1MSwiYnV0dG9uIiwyMCksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGEpO2Nv''@;'; put 'put ''bnN0IG09ZGEoNTApO3JldHVybiBtdChpLnJlc3VibWl0V2l0aE1heERlcHRoKG0udmFsdWUpKX0pLFRlKDUyLCIgUmVzdWJtaXQgIiksaWUoKSgpLHJlKDUzLCJkaXYiLDE5KSg1NCwicCIpLFRlKDU1LCJDYW5jZWwgdGhpcyBzdWJtaXNzaW9uIiksaWUoKSxyZSg1NiwiYnV0dG9uIiwyMCks''@;'; put 'put ''a3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksVGUoNTcsIiBDYW5jZWwgIiksaWUoKSgpKCkoKX0yJnImJihhZSgyKSx5ZSgibmdJZiIsaS5saWJyYXJ5TGlzdCksYWUoKSx5ZSgibmdGb3JPZiIsaS5saWJyYXJ5TGlzdCks''@;'; put 'put ''YWUoKSx5ZSgibmdJZiIsaS5saWJyYXJpZXNQYWdpbmcpLGFlKDMpLHllKCJuZ0lmIiwhaS5jb2x1bW4mJiFpLnRhYmxlKSxhZSgpLHllKCJuZ0lmIixpLmNvbHVtbnx8aS50YWJsZSksYWUoKSx5ZSgiY2xyTW9kYWxPcGVuIixpLmxpbWl0RG90RGVwdGgpKCJjbHJNb2RhbENsb3NhYmxlIiwh''@;'; put 'put ''MSksYWUoMTcpLHllKCJjbHJNb2RhbE9wZW4iLG51bGwhPT1pLmxhcmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGFlKDUpLE1yKCIgVGhlIGdlbmVyYXRlZCBkb3QgZmlsZSBoYXMgIixpLmxhcmdlRG90RmlsZUxpbmVzLCIgbGluZXMuIFJlbmRlcmluZyBtYXkgdGFr''@;'; put 'put ''ZSBhIGxvbmcgdGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/ICIpLGFlKDExKSx5ZSgiZGlzYWJsZWQiLCFpLmNvbHVtbiYmIWkudGFibGUpKX0sZGVwZW5kZW5jaWVzOltocyxtYSxYMSx6bCx2aCxpbCxRcyxTMixFaCx1NSxVbCxodSxjMCxTMSx5MixwcyxjSCxDaCxiMixQ''@;'; put 'put ''ZCxpNSxsdixjdixqdyxhZyxpZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKTtjb25zdCBDTnQ9KCk9PlsxMCwyMCw1MCwxMDBdO2Z1bmN0aW9uIFNOdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGlvbiIsMTQpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDtQ''@;'; put 'put ''RSgidmFsdWUiLGUpLGFlKCksTXIoIiAiLGUsIiAiKX19ZnVuY3Rpb24gTU50KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMjApfWZ1bmN0aW9uIHhOdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pY29uIiwyMSksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2Nv''@;'; put 'put ''bnN0IGk9RWUoMik7cmV0dXJuIGkubWV0YURhdGFTZWFyY2g9IiIsbXQoaS5tZXRhTGlzdE9uRmlsdGVyKCkpfSksaWUoKX19ZnVuY3Rpb24gRU50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpKDEsImRpdiIsMTYpKDIsImlucHV0IiwxNywwKSxj''@;'; put 'put ''aSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVybiB1aShhLm1ldGFEYXRhU2VhcmNoLGkpfHwoYS5tZXRhRGF0YVNlYXJjaD1pKSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5tZXRhTGlzdE9uRmls''@;'; put 'put ''dGVyKCkpfSksaWUoKSxjdCg0LE1OdCwxLDAsImNsci1pY29uIiwxOCkoNSx4TnQsMSwwLCJjbHItaWNvbiIsMTkpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9ZGEoMykscj1FZSgpO2FlKDIpLGxpKCJuZ01vZGVsIixyLm1ldGFEYXRhU2VhcmNoKSxhZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5s''@;'; put 'put ''ZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFROdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDIzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS4kaW1wbGljaXQsYz1FZSgp''@;'; put 'put ''O3JldHVybiBtdChjLnRyZWVOb2RlQ2xpY2tlZChpLGEsYy5tZXRhRGF0YUxpc3QpKX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpLiRpbXBsaWNpdDtyZXR1cm4gdWkoYS5leHBhbmRlZCxpKXx8KGEuZXhwYW5kZWQ9aSksbXQoaSl9KSxy''@;'; put 'put ''ZSgxLCJwIiwyNCksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKS4kaW1wbGljaXQsYT1FZSgpO3JldHVybiBhLm1ldGFEYXRhSWQ9aS5JRCxtdChhLm1ldGFEYXRhT25DbGljayhhLm1ldGFEYXRhSWQsaSkpfSksVnQoMiwiY2xyLWljb24iLDI1KSxUZSgzKSxpZSgp''@;'; put 'put ''KCl9aWYoMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2xpKCJjbHJFeHBhbmRlZCIsZS5leHBhbmRlZCkseWUoImNsckxvYWRpbmciLGUubG9hZGluZ1RhYmxlcyYmIWUudGFibGVzKSxhZSgzKSxNcigiICIsZS5JRCwiICIpfX1mdW5jdGlvbiBBTnQobix0KXtpZigxJm4mJihyaSgwKSxj''@;'; put 'put ''dCgxLFROdCw0LDMsImNsci10cmVlLW5vZGUiLDIyKSxpaSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoKSx5ZSgibmdJZiIsIWUuaGlkZGVuKX19ZnVuY3Rpb24ga050KG4sdCl7MSZuJiYocmUoMCwiZGl2IiwyNiksVnQoMSwiY2xyLWljb24iLDI3KSxyZSgyLCJwIiwyOCksVGUo''@;'; put 'put ''MywiIFBsZWFzZSBzZWxlY3QgYSB0eXBlICIpLGllKCkoKSl9ZnVuY3Rpb24gRE50KG4sdCl7MSZuJiYocmUoMCwiaDQiKSxUZSgxLCJMb2FkaW5nIG1ldGFkYXRhIHR5cGVzIiksaWUoKSl9ZnVuY3Rpb24gSU50KG4sdCl7MSZuJiYocmUoMCwiaDQiKSxUZSgxLCJMb2FkaW5nIG1ldGFkYXRh''@;'; put 'put ''IG9iamVjdHMiKSxpZSgpKX1mdW5jdGlvbiBSTnQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiKSxjdCgxLEROdCwyLDAsImg0IiwzMSkoMixJTnQsMiwwLCJoNCIsMzEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0lmIixlLm1ldGF0eXBlc0xvYWRpbmcpLGFlKCkseWUo''@;'; put 'put ''Im5nSWYiLCFlLm1ldGF0eXBlc0xvYWRpbmcpfX1mdW5jdGlvbiBMTnQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDI5KSgxLCJzcGFuIiwzMCksVGUoMiwiIExvYWRpbmcuLi4gIiksaWUoKSxjdCgzLFJOdCwzLDIsImRpdiIsMzEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDMpLHll''@;'; put 'put ''KCJuZ0lmIixlLmxvYWRpbmcpfX1mdW5jdGlvbiBPTnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDM4KSgxLCJpbnB1dCIsMzksMSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMik7cmV0dXJuIHVpKGEubWV0YU9iamVjdFNl''@;'; put 'put ''YXJjaCxpKXx8KGEubWV0YU9iamVjdFNlYXJjaD1pKSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikubWV0YU9iamVjdE9uRmlsdGVyKCkpfSksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1FZSgyKTthZSgpLGxpKCJuZ01vZGVsIixlLm1ldGFPYmpl''@;'; put 'put ''Y3RTZWFyY2gpfX1mdW5jdGlvbiBQTnQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiw0Myl9ZnVuY3Rpb24gRk50KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMjUpfWZ1bmN0aW9uIEhOdChuLHQpe2lmKDEmbiYmKHJlKDAsInAiLDU0KSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUo''@;'; put 'put ''KS4kaW1wbGljaXQ7YWUoKSxNcigiICIsZS5VUkksIiAiKX19ZnVuY3Rpb24gTk50KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRyZWUtbm9kZSIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIpLGN0KDMsUE50LDEsMCwiY2xyLWljb24iLDUxKSg0LEZOdCwxLDAsImNsci1pY29uIiw1MiksVGUo''@;'; put 'put ''NSksaWUoKSxjdCg2LEhOdCwyLDEsInAiLDUzKSxpZSgpKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDt5ZSgiY2xyRXhwYW5kYWJsZSIsITApLGFlKCksYnIoIm9iamVjdC1oZWFkZXIiLCFlLmNvdW50KSxhZSgyKSx5ZSgibmdJZiIsIWUuY291bnQpLGFlKCkseWUoIm5nSWYiLGUuY291''@;'; put 'put ''bnQpLGFlKCksTXIoIiAiLGUuZGlzcGxheSwiICIpLGFlKCkseWUoIm5nSWYiLCFlLmNvdW50KX19ZnVuY3Rpb24gVk50KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRyZWUiLDQ3KSxjdCgxLE5OdCw3LDcsImNsci10cmVlLW5vZGUiLDQ4KSxobCgyLCJhc3luYyIpLGllKCkpLDImbil7Y29u''@;'; put 'put ''c3QgZT1FZSg2KTt5ZSgiY2xyTGF6eSIsITApLGFlKCkseWUoImNsclJlY3Vyc2l2ZUZvck9mIixSYygyLDMsZS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsZS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIEJOdChuLHQpe2lmKDEmbiYmKHJlKDAsImNsci1hY2NvcmRpb24t''@;'; put 'put ''Y29udGVudCIpLGN0KDEsVk50LDMsNSwiY2xyLXRyZWUiLDQ2KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoNSk7YWUoKSx5ZSgibmdJZiIsZS5zaG93QWNjKX19ZnVuY3Rpb24gak50KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDIpLGt0KCJj''@;'; put 'put ''bHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS4kaW1wbGljaXQsYz1FZSgzKTtyZXR1cm4gbXQoaT9jLnBhbmVsQ2hhbmdlKGksYSk6IiIpfSkscmUoMSwiY2xyLWFjY29yZGlvbi10aXRsZSIpLFZ0KDIsImNsci1pY29uIiw0MyksVGUo''@;'; put 'put ''MykscmUoNCwicCIsNDQpLFRlKDUpLGllKCkoKSxjdCg2LEJOdCwyLDEsImNsci1hY2NvcmRpb24tY29udGVudCIsNDUpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2FlKDMpLE1yKCIgIixlLk5BTUUsIiAiKSxhZSgyKSx2cihlLklEKX19ZnVuY3Rpb24gek50KG4sdCl7''@;'; put 'put ''aWYoMSZuJiYocmkoMCksY3QoMSxqTnQsNywyLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MSksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLCFlLmhpZGRlbil9fWZ1bmN0aW9uIFVOdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsNDApKDEsImNsci1hY2Nv''@;'; put 'put ''cmRpb24iKSxjdCgyLHpOdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoMikseWUoIm5nRm9yT2YiLGUubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gV050KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIFpOdChu''@;'; put 'put ''LHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBZTnQobix0KXtpZigxJm4mJihyZSgwLCJwIiw1NCksVGUoMSksaWUoKSksMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2FlKCksTXIoIiAiLGUuVVJJLCIgIil9fWZ1bmN0aW9uIEdOdChuLHQpe2lmKDEmbiYmKHJlKDAs''@;'; put 'put ''ImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiKSxjdCgzLFdOdCwxLDAsImNsci1pY29uIiw1MSkoNCxaTnQsMSwwLCJjbHItaWNvbiIsNTIpLFRlKDUpLGllKCksY3QoNixZTnQsMiwxLCJwIiw1MyksaWUoKSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7eWUoImNs''@;'; put 'put ''ckV4cGFuZGFibGUiLCEwKSxhZSgpLGJyKCJvYmplY3QtaGVhZGVyIiwhZS5jb3VudCksYWUoMikseWUoIm5nSWYiLCFlLmNvdW50KSxhZSgpLHllKCJuZ0lmIixlLmNvdW50KSxhZSgpLE1yKCIgIixlLmRpc3BsYXksIiAiKSxhZSgpLHllKCJuZ0lmIiwhZS5jb3VudCl9fWZ1bmN0aW9uICRO''@;'; put 'put ''dChuLHQpe2lmKDEmbiYmKHJlKDAsImNsci10cmVlIiw0NyksY3QoMSxHTnQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksaGwoMiwiYXN5bmMiKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoNCk7eWUoImNsckxhenkiLCEwKSxhZSgpLHllKCJjbHJSZWN1cnNpdmVGb3JPZiIsUmMoMiwzLGUucm9v''@;'; put 'put ''dCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGUuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBLTnQobix0KXtpZigxJm4mJihyaSgwKSxyZSgxLCJkaXYiLDU1KSxWdCgyLCJjbHItaWNvbiIsNDMpLHJlKDMsImRpdiIsNTYpKDQsInAiLDU3KSxUZSg1KSxpZSgpLHJlKDYsInAiLDU4''@;'; put 'put ''KSxUZSg3KSxpZSgpKCkoKSxjdCg4LCROdCwzLDUsImNsci10cmVlIiw0NiksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoMyk7YWUoNSksTXIoIiAiLGUuTkFNRSwiICIpLGFlKDIpLE1yKCIgIixlLklELCIgIiksYWUoKSx5ZSgibmdJZiIsci5zaG93QWNjKX19ZnVuY3Rp''@;'; put 'put ''b24gWE50KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2Iiw0MCksY3QoMSxLTnQsOSwzLCJuZy1jb250YWluZXIiLDcpLGllKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgpLHllKCJuZ0Zvck9mIixlLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIHFOdChuLHQpe2lmKDEmbiYmKHJlKDAs''@;'; put 'put ''ImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLFRlKDIpLGllKCkscmUoMywiY2xyLWRnLWNlbGwiKSxUZSg0KSxpZSgpLHJlKDUsImNsci1kZy1jZWxsIiksVGUoNiksaWUoKSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoMiksdnIoZS5UWVBFKSxhZSgyKSx2cihlLk5BTUUp''@;'; put 'put ''LGFlKDIpLHZyKGUuVkFMVUUpfX1mdW5jdGlvbiBKTnQobix0KXtpZigxJm4mJihyZSgwLCJjbHItZGF0YWdyaWQiLDU5KSgxLCJjbHItZGctY29sdW1uIiksVGUoMiwiIFRZUEUgIiksVnQoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxpZSgpLHJlKDQsImNsci1kZy1jb2x1bW4iKSxU''@;'; put 'put ''ZSg1LCIgTkFNRSAiKSxWdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGllKCkscmUoNywiY2xyLWRnLWNvbHVtbiIpLFRlKDgsIiBWQUxVRSAiKSxWdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGllKCksY3QoMTAscU50LDcsMywiY2xyLWRnLXJvdyIsNjEpLHJlKDExLCJj''@;'; put 'put ''bHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2MiwyKSgxNCwiY2xyLWRnLXBhZ2Utc2l6ZSIsNjMpLFRlKDE1LCJBdHRyaWJ1dGVzIHBlciBwYWdlIiksaWUoKSxUZSgxNiksaWUoKSgpKCkpLDImbil7Y29uc3QgZT1kYSgxMykscj1FZSgyKTthZSgzKSx5ZSgiY2xyRGdT''@;'; put 'put ''dHJpbmdGaWx0ZXIiLHIudHlwZUZpbHRlciksYWUoMykseWUoImNsckRnU3RyaW5nRmlsdGVyIixyLm5hbWVGaWx0ZXIpLGFlKDMpLHllKCJjbHJEZ1N0cmluZ0ZpbHRlciIsci52YWx1ZUZpbHRlciksYWUoKSx5ZSgiY2xyRGdJdGVtc09mIixyLm1ldGFPYmplY3RBdHRyaWJ1dGVzKSxhZSgy''@;'; put 'put ''KSx5ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGFlKDIpLHllKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLG5sKDksQ050KSksYWUoMiksajMoIiAiLGUuZmlyc3RJdGVtKzEsIiAtICIsZS5sYXN0SXRlbSsxLCIgb2YgIixlLnRvdGFsSXRlbXMsIiBBdHRyaWJ1dGVzICIpfX1mdW5jdGlvbiBRTnQobix0''@;'; put 'put ''KXtpZigxJm4mJihyZSgwLCJkaXYiLDMyKSgxLCJkaXYiLDMzKSxjdCgyLE9OdCwzLDEsImRpdiIsMzQpLFZ0KDMsImJyIiksY3QoNCxVTnQsMywxLCJkaXYiLDM1KSg1LFhOdCwyLDEsImRpdiIsMzUpLGllKCkscmUoNiwiZGl2IiwzNikoNywiaDMiKSxUZSg4KSxpZSgpLGN0KDksSk50LDE3''@;'; put 'put ''LDEwLCJjbHItZGF0YWdyaWQiLDM3KSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKDIpLHllKCJuZ0lmIixlLm1ldGFPYmplY3RMaXN0JiYhZS5vYmplY3RSb3V0ZSksYWUoMikseWUoIm5nSWYiLCFlLm9iamVjdFZpZXcpLGFlKCkseWUoIm5nSWYiLGUub2JqZWN0VmlldyksYWUoMyks''@;'; put 'put ''dnIoZS5hc3NvT2JqZWN0U2VsZWN0ZWQpLGFlKCkseWUoIm5nSWYiLGUuc2hvd1RhYmxlKX19Y2xhc3MgZVZ0e2FjY2VwdHModCxlKXtyZXR1cm4iIit0Lk5BTUU9PT1lfHx0Lk5BTUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUpPj0wfX1jbGFzcyB0VnR7YWNjZXB0cyh0LGUpe3JldHVybiIi''@;'; put 'put ''K3QuVFlQRT09PWV8fHQuVFlQRS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZSk+PTB9fWNsYXNzIG5WdHthY2NlcHRzKHQsZSl7cmV0dXJuIiIrdC5WQUxVRT09PWV8fHQuVkFMVUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUpPj0wfX1sZXQgZG9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3Io''@;'; put 'put ''ZSxyLGksYSxjLG0pe3RoaXMuZXZlbnRTZXJ2aWNlPWUsdGhpcy5zYXNTZXJ2aWNlPXIsdGhpcy5oZWxwZXJTZXJ2aWNlPWksdGhpcy5sb2NhdGlvbj1hLHRoaXMucm91dGVyPWMsdGhpcy5yb3V0ZT1tLHRoaXMubWV0YURhdGFTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0U2VhcmNoPSIiLHRo''@;'; put 'put ''aXMubWV0YU9iamVjdEFzc29jaWF0aW9ucz1bXSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFEYXRhSWQ9IiIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMCx0aGlzLm1ldGFPYmpl''@;'; put 'put ''Y3RTaXplPTIwMCx0aGlzLmFzc29UeXBlU2VsZWN0ZWQ9IiIsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiIsdGhpcy5yZXBvc2l0b3J5PSIiLHRoaXMub2JqZWN0Um91dGU9ITEsdGhpcy5zaG93RGF0YT0hMSx0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5nZXRDaGlsZHJlbj1DPT5DLmNvdW50''@;'; put 'put ''P2dvKEMuZGV0YWlscyk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6Qy5BU1NPQ1VSSX1dfSkudGhlbihZPT57dGhpcy5zaG93VGFibGU9ITAsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1ZLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPUMuTkFNRTtsZXQgSj10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91dGU/Si5zbGljZSgwLEoubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2Jq''@;'; put 'put ''ZWN0LyIrQy5BU1NPQ1VSSS5zbGljZSgxK0MuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSk6SisiL29iamVjdC8iK0MuQVNTT0NVUkkuc2xpY2UoMStDLkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFzc29zaWF0aW9uc0NvdW50KFkuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9u''@;'; put 'put ''cyl9KSx0aGlzLmRlYm91bmNlPSExfW5nT25Jbml0KCl7V24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhpcy5vYmplY3RSb3V0ZT0hMCx0aGlzLm9iamVjdFZpZXc9''@;'; put 'put ''ITApLHRoaXMucGFnZVNpemU9NSx0aGlzLnR5cGVGaWx0ZXI9bmV3IHRWdCx0aGlzLm5hbWVGaWx0ZXI9bmV3IGVWdCx0aGlzLnZhbHVlRmlsdGVyPW5ldyBuVnQsV24ubWV0YWRhdGEubWV0YURhdGFMaXN0JiZXbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzJiYhdGhpcy5vYmplY3RSb3V0''@;'; put 'put ''ZT8odGhpcy5tZXRhRGF0YUxpc3Q9V24ubWV0YWRhdGEubWV0YURhdGFMaXN0LHRoaXMucmVwb3NpdG9yaWVzPVduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMsdGhpcy5yZXBvc2l0b3J5PVduLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRh''@;'; put 'put ''dHlwZXNMb2FkaW5nPSExLHRoaXMubWV0YURhdGFTZWFyY2g9V24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2gpOih0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhdHlwZXMiLG51bGwpLnRoZW4oZT0+e3RoaXMubWV0YURhdGFMaXN0PWUuYWRhcHRlclJlc3BvbnNlLnR5cGVz''@;'; put 'put ''LFduLm1ldGFkYXRhLm1ldGFEYXRhTGlzdD10aGlzLm1ldGFEYXRhTGlzdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXJlcG9zIixudWxsKS50aGVuKGU9PntsZXQgcj0hMTt0aGlzLnJlcG9z''@;'; put 'put ''aXRvcmllcz1bXTtmb3IobGV0IGk9MDtpPGUuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zLmxlbmd0aDtpKyspdGhpcy5yZXBvc2l0b3JpZXMucHVzaChlLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1tpXS5OQU1FKSwiRm91bmRhdGlvbiI9PT1lLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1tp''@;'; put 'put ''XS5OQU1FJiYocj0hMCk7aWYodGhpcy5yZXBvc2l0b3J5PXI/IkZvdW5kYXRpb24iOmUuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zWzBdLk5BTUUsV24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJlcG9zaXRvcmllcyxXbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhp''@;'; put 'put ''cy5yZXBvc2l0b3J5LHRoaXMub2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGk9IiIsYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5vYmplY3RJRDt0aGlzLm1ldGFPYmplY3RMaXN0PVtdLHRoaXMubWV0YU9iamVj''@;'; put 'put ''dExpc3QucHVzaCh7SUQ6YSxOQU1FOml9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xpY2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0uSUQsdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0pfX0pKX10cmVlTm9kZUNs''@;'; put 'put ''aWNrZWQoZSxyLGkpeyJDb2xsYXBzZSI9PT1lLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhpLHIpfWNvbGxhcHNlVHJlZUl0ZW1zKGUscil7ZS5mb3JFYWNoKGk9PntKU09OLnN0cmluZ2lmeShpKSE9PUpTT04uc3RyaW5naWZ5KHIpJiYoaS5leHBhbmRlZD0hMSl9KX1t''@;'; put 'put ''ZXRhRGF0YU9uQ2xpY2soZSxyKXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5zaG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhpcy5zZWxlY3RtZXRhRGF0YShlLHIpfW1ldGFPYmplY3RPbkNsaWNrKGUscil7''@;'; put 'put ''dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRhT2JqZWN0KGUscil9c2VsZWN0bWV0YURhdGEoZSxyKXt2YXIgaT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2kuc2FzU2Vydmlj''@;'; put 'put ''ZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFvYmplY3RzIix7U0FTQ29udHJvbFRhYmxlOlt7bWV0YXR5cGU6ZSxyZXBvOmkucmVwb3NpdG9yeX1dfSkudGhlbihjPT57aS5tZXRhT2JqZWN0TGlzdD1jLmFkYXB0ZXJSZXNwb25zZS5vYmplY3RzLGkuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoaS5t''@;'; put 'put ''ZXRhT2JqZWN0U2l6ZSksaS5sb2FkaW5nPSExLGkuYXNzb1R5cGVTZWxlY3RlZD1lLGkuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGkuc2hvd0RhdGE9ITB9KX0pKCl9c2VsZWN0bWV0YU9iamVjdChlLHIpe3ZhciBpPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7aS5zYXNTZXJ2aWNl''@;'; put 'put ''LnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6ZX1dfSkudGhlbihjPT57aS5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPWMuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucyxpLnJvb3QkPWdvKGkuZ2V0QXNzb3NpYXRpb25zQ291bnQo''@;'; put 'put ''Yy5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKSksaS5zaG93QWNjPSEwLGkuc2hvd1RhYmxlPSEwO2xldCBtPWMuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMuZmluZChQPT4iTmFtZSI9PT1QLk5BTUUpLlZBTFVFO2kuYXNzb09iamVjdFNlbGVjdGVkPW0sci5OQU1FPW07bGV0IEM9''@;'; put 'put ''aS5yb3V0ZXIudXJsO2kubG9jYXRpb24ucmVwbGFjZVN0YXRlKGkub2JqZWN0Um91dGU/Qy5zbGljZSgwLEMubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrZS5zbGljZSgxK2UuaW5kZXhPZigiXFwiKSk6QysiL29iamVjdC8iK2Uuc2xpY2UoMStlLmluZGV4T2YoIlxcIikpKSxp''@;'; put 'put ''Lm1ldGFPYmplY3RBdHRyaWJ1dGVzPWMuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhlLHIpe3ZhciBpPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7aS5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtT''@;'; put 'put ''QVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6ZX1dfSkudGhlbihjPT57aS5tZXRhT2JqZWN0QXR0cmlidXRlcz1jLmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLGkuc2hvd1RhYmxlPSEwfSl9KSgpfWdldEFzc29zaWF0aW9uc0NvdW50KGUpe2xldCByPW5ldyBNYXA7Zm9yKGxldCBhIG9m''@;'; put 'put ''IGUpe3IuaGFzKGEuQVNTT0MpfHxyLnNldChhLkFTU09DLHtjb3VudDowLGRldGFpbHM6W119KTtsZXQgYz1yLmdldChhLkFTU09DKTtjLmNvdW50KyssYy5kZXRhaWxzLnB1c2goe0FTU09DVVJJOmEuQVNTT0NVUkksTkFNRTphLk5BTUUsZGlzcGxheTphLk5BTUUsVVJJOmEuQVNTT0NVUkku''@;'; put 'put ''c2xpY2UoYS5BU1NPQ1VSSS5pbmRleE9mKCI6IikrMSl9KX1sZXQgaT1bXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKGEsYyl7aS5wdXNoKHtBU1NPQzpjLGNvdW50OmEuY291bnQsZGV0YWlsczphLmRldGFpbHMsZGlzcGxheTpjKyIgKCAiK2EuY291bnQrIiApIn0pfSksaX1zZXRUeXBl''@;'; put 'put ''QXNzb3NpYXRpb25zKGUpe2xldCByPVtdO2ZvcihsZXQgaSBvZiB0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnMpaS5BU1NPQz09PWUmJnIucHVzaChpKTtyZXR1cm4gdGhpcy5hc3Nvc2lhdGlvbk5hbWVzPXIscn1hc3Nvc2lhdGlvbk5hbWVPbkNsaWNrKGUpe3RoaXMuYXNzb09iamVjdFNl''@;'; put 'put ''bGVjdGVkPSIgLiAiLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGUpfW1ldGFMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubWV0YURhdGFMaXN0''@;'; put 'put ''LHRoaXMubWV0YURhdGFTZWFyY2gsIklEIiksV24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2g9dGhpcy5tZXRhRGF0YVNlYXJjaH1tZXRhT2JqZWN0T25GaWx0ZXIoKXt0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuaGVscGVyU2VydmljZS5tZXRhT2JqZWN0T25GaWx0ZXIodGhp''@;'; put 'put ''cy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RTZWFyY2gsIk5BTUUiKSx0aGlzLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKHRoaXMubWV0YU9iamVjdFNpemUpLFduLm1ldGFkYXRhLm1ldGFPYmplY3RTZWFyY2g9dGhpcy5tZXRhT2JqZWN0U2VhcmNofWdldE1ldGFPYmplY3RBdHRy''@;'; put 'put ''aWJ1dGVzKGUpe2lmKHZvaWQgMCE9PXRoaXMubWV0YU9iamVjdExpc3QmJnRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoPmUpe2xldCByPTAsaT0tMTtmb3IobGV0IGE9MDthPHRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoO2ErKylpZigodm9pZCAwPT09dGhpcy5tZXRhT2JqZWN0TGlzdFth''@;'; put 'put ''XS5oaWRkZW58fCExPT09dGhpcy5tZXRhT2JqZWN0TGlzdFthXS5oaWRkZW4pJiZyKysscj09PWUpe2k9YTticmVha310aGlzLm1ldGFPYmplY3RTaG93TGlzdD0tMSE9PWk/dGhpcy5tZXRhT2JqZWN0TGlzdC5zbGljZSgwLGkpOnRoaXMubWV0YU9iamVjdExpc3R9ZWxzZSB0aGlzLm1ldGFP''@;'; put 'put ''YmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0fXBhbmVsQ2hhbmdlKGUscil7dGhpcy5kZWJvdW5jZXx8KHRoaXMubWV0YU9iamVjdE9uQ2xpY2soci5JRCxyKSx0aGlzLmRlYm91bmNlPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRlYm91bmNlPSExfSw2MDApKX11cGRhdGVTZWxl''@;'; put 'put ''Y3RlZFJlcG9zaXRvcnkoKXtXbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKFNjKSxXZShKcyksV2UoTHUpLFdlKGwyKSxXZShybCksV2UoczApKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxNyx2YXJzOjgsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoT2Jq''@;'; put 'put ''VHJlZUlucHV0IiwiIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3Mi''@;'; put 'put ''LCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xh''@;'; put 'put ''c3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIi''@;'; put 'put ''LCJwbGFjZWhvbGRlciIsInNlYXJjaCBTQVMgVHlwZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwi''@;'; put 'put ''bmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVk''@;'; put 'put ''IiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsi''@;'; put 'put ''Y2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzQsIm5nSWYiXSxbMSwiY2xyLXJvdyIsImNsci1mbGV4LWdyb3ctMSJdLFsxLCJjbHItY29sLTYiXSxbImNsYXNzIiwic2Vh''@;'; put 'put ''cmNoLWlucHV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9iamVjdHMtY29sIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtNiIsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInBs''@;'; put 'put ''YWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm9iamVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJBY2Nv''@;'; put 'put ''cmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xy''@;'; put 'put ''UmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxvYXQtcmlnaHQg''@;'; put 'put ''b2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndvcmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9tLWZv''@;'; put 'put ''b3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiYocmUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYi''@;'; put 'put ''LDMpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxUZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IiksaWUoKSxyZSg1LCJzZWxlY3QiLDQpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihjKXtyZXR1cm4gdWkoaS5yZXBvc2l0b3J5LGMpfHwoaS5yZXBvc2l0b3J5PWMp''@;'; put 'put ''LGN9KSxrdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksY3QoNixTTnQsMiwyLCJvcHRpb24iLDUpLGllKCkoKSgpLHJlKDcsImNsci10cmVlIiksY3QoOCxFTnQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSg5LEFOdCwyLDEsIm5nLWNv''@;'; put 'put ''bnRhaW5lciIsNyksaWUoKSgpLHJlKDEwLCJkaXYiLDgpKDExLCJkaXYiLDkpKDEyLCJoMyIsMTApLFRlKDEzKSxpZSgpLGN0KDE0LGtOdCw0LDAsImRpdiIsMTEpKDE1LExOdCw0LDEsImRpdiIsMTIpKDE2LFFOdCwxMCw1LCJkaXYiLDEzKSxpZSgpKCkpLDImciYmKGFlKDUpLGxpKCJuZ01v''@;'; put 'put ''ZGVsIixpLnJlcG9zaXRvcnkpLGFlKCkseWUoIm5nRm9yT2YiLGkucmVwb3NpdG9yaWVzKSxhZSgyKSx5ZSgibmdJZiIsaS5tZXRhRGF0YUxpc3QpLGFlKCkseWUoIm5nRm9yT2YiLGkubWV0YURhdGFMaXN0KSxhZSg0KSx2cihpLmFzc29UeXBlU2VsZWN0ZWQpLGFlKCkseWUoIm5nSWYiLCFp''@;'; put 'put ''LmxvYWRpbmcmJiFpLm1ldGFPYmplY3RMaXN0KSxhZSgpLHllKCJuZ0lmIixpLmxvYWRpbmcpLGFlKCkseWUoIm5nSWYiLGkuc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOltocyxtYSxSZixMZix6bCxJZixpbCxRcyxaNixycCxDdixJSCx0QyxTQSxSSCxVNixacGUseTQsU3YsaUMsVzYsX3Ys''@;'; put 'put ''ejYsYnYscXcsUzIsRWgsSnBlLFVsLFMxLCQzZSxwcyxQZCxtdixYdyxPM2UsaUgsRjNlLFAzZSxIM2UsZlgsYWcsaWcsWUVdLGVuY2Fwc3VsYXRpb246Mn0pfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9dW4oe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0p''@;'; put 'put ''fX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24gclZ0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGlWdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pY29uIiwxMyksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMik7cmV0dXJu''@;'; put 'put ''IGkucm9sZVNlYXJjaD0iIixtdChpLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxpZSgpfX1mdW5jdGlvbiBhVnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEucm9sZVNlYXJjaCxpKXx8KGEucm9sZVNlYXJjaD1pKSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaWUoKSxjdCg0LHJWdCwxLDAsImNsci1p''@;'; put 'put ''Y29uIiwxMCkoNSxpVnQsMSwwLCJjbHItaWNvbiIsMTEpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9ZGEoMykscj1FZSgpO2FlKDIpLGxpKCJuZ01vZGVsIixyLnJvbGVTZWFyY2gpLGFlKDIpLHllKCJuZ0lmIixlLnZhbHVlLmxlbmd0aDwxKSxhZSgpLHllKCJuZ0lmIixlLnZhbHVlLmxlbmd0''@;'; put 'put ''aD4wKX19ZnVuY3Rpb24gb1Z0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCkuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLnJvbGVPbkNsaWNrKGkpKX0pLHJlKDEsInAiLDE2''@;'; put 'put ''KSxWdCgyLCJjbHItaWNvbiIsMTcpLFRlKDMpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQscj1FZSgpO2JyKCJhY3RpdmUiLGUuUk9MRVVSST09PXIucm9sZVVyaSksYWUoMyksTXIoIiAiLGUuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gc1Z0KG4sdCl7aWYoMSZuJiYo''@;'; put 'put ''cmkoMCksY3QoMSxvVnQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksaWkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLCFlLmhpZGRlbil9fWZ1bmN0aW9uIGxWdChuLHQpezEmbiYmKHJlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxUZSgyLCIgTG9hZGluZy4u''@;'; put 'put ''LiAiKSxpZSgpKCkpfWZ1bmN0aW9uIGNWdChuLHQpezEmbiYmKHJlKDAsImg1IiksVGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaWUoKSl9ZnVuY3Rpb24gdVZ0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLFRlKDIpLGllKCkscmUoMywidGQiLDMwKSxUZSg0KSxp''@;'; put 'put ''ZSgpLHJlKDUsInRkIiwzMCksVGUoNiksaWUoKSxyZSg3LCJ0ZCIsMzApLFRlKDgpLGllKCkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O3llKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2UuVVJJTUVNKSxhZSgyKSx2cihlLk1FTUJFUk5BTUUpLGFlKDIpLHZyKGUu''@;'; put 'put ''RU1BSUwpLGFlKDIpLHZyKGUuTUVNQkVSQ1JFQVRFRCksYWUoMiksdnIoZS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gZFZ0KG4sdCl7aWYoMSZuJiYocmUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksVGUoNSwiTkFNRSIpLGllKCkoKSxyZSg2''@;'; put 'put ''LCJ0ZCIsMjkpKDcsImIiKSxUZSg4LCJFTUFJTCIpLGllKCkoKSxyZSg5LCJ0ZCIsMjkpKDEwLCJiIiksVGUoMTEsIkNSRUFURUQiKSxpZSgpKCkscmUoMTIsInRkIiwzMCkoMTMsImIiKSxUZSgxNCwiVVBEQVRFRCIpLGllKCkoKSgpKCkscmUoMTUsInRib2R5IiksY3QoMTYsdVZ0LDksNSwi''@;'; put 'put ''dHIiLDMxKSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgxNikseWUoIm5nRm9yT2YiLGUucm9sZU1lbWJlcnMpfX1mdW5jdGlvbiBoVnQobix0KXsxJm4mJihyZSgwLCJoNSIpLFRlKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSxpZSgpKX1mdW5jdGlvbiBmVnQobix0KXtpZigxJm4m''@;'; put 'put ''JihyZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksVGUoMiksaWUoKSxyZSgzLCJ0ZCIsMzApLFRlKDQpLGllKCkscmUoNSwidGQiLDMwKSxUZSg2KSxpZSgpLHJlKDcsInRkIiwzMCksVGUoOCksaWUoKSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7eWUoInJvdXRlckxpbmsiLCIvdmlldy91''@;'; put 'put ''c2VybmF2L2dyb3Vwcy8iK2UuVVJJTUVNKSxhZSgyKSx2cihlLk1FTUJFUk5BTUUpLGFlKDIpLHZyKGUuRU1BSUwpLGFlKDIpLHZyKGUuTUVNQkVSQ1JFQVRFRCksYWUoMiksdnIoZS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gcFZ0KG4sdCl7aWYoMSZuJiYocmUoMCwidGFibGUiLDI4KSgx''@;'; put 'put ''LCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksVGUoNSwiTkFNRSIpLGllKCkoKSxyZSg2LCJ0ZCIsMjkpKDcsImIiKSxUZSg4LCJFTUFJTCIpLGllKCkoKSxyZSg5LCJ0ZCIsMjkpKDEwLCJiIiksVGUoMTEsIkNSRUFURUQiKSxpZSgpKCkscmUoMTIsInRkIiwzMCkoMTMsImIi''@;'; put 'put ''KSxUZSgxNCwiVVBEQVRFRCIpLGllKCkoKSgpKCkscmUoMTUsInRib2R5IiksY3QoMTYsZlZ0LDksNSwidHIiLDMxKSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgxNikseWUoIm5nRm9yT2YiLGUucm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIGdWdChuLHQpe2lmKDEmbiYmKHJlKDAsImRp''@;'; put 'put ''diIpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInRhYmxlIiwyMikoNCwidGJvZHkiKSg1LCJ0ciIpKDYsInRkIiwyMykoNywicCIsMjQpKDgsImIiKSxUZSg5KSxpZSgpKCkoKSgpLHJlKDEwLCJ0ciIpKDExLCJ0ZCIsMjMpKDEyLCJpIiksVGUoMTMpLGllKCkoKSgpKCkoKSgpKCkscmUo''@;'; put 'put ''MTQsImRpdiIsMjApKDE1LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSkoMTcsImRpdiIpKDE4LCJoMyIpLFRlKDE5KSxpZSgpLGN0KDIwLGNWdCwyLDAsImg1Iiw2KSxyZSgyMSwiZGl2IiwyNiksY3QoMjIsZFZ0LDE3LDEsInRhYmxlIiwyNyksaWUoKSgpLFZ0KDIzLCJociIpLHJlKDI0LCJkaXYi''@;'; put 'put ''KSgyNSwiaDMiKSxUZSgyNiksaWUoKSxjdCgyNyxoVnQsMiwwLCJoNSIsNikscmUoMjgsImRpdiIsMjYpLGN0KDI5LHBWdCwxNywxLCJ0YWJsZSIsMjcpLGllKCkoKSxWdCgzMCwiYnIiKSxpZSgpKCkoKSgpKSwyJm4pe2NvbnN0IGU9RWUoKTthZSg5KSx2cihlLnJvbGVOYW1lKSxhZSg0KSx2''@;'; put 'put ''cihlLnJvbGVEZXNjKSxhZSg2KSxNcigiTUVNQkVSUyAoIixlLnJvbGVNZW1iZXJzQ291bnQsIikiKSxhZSgpLHllKCJuZ0lmIiwwPT1lLnJvbGVNZW1iZXJzQ291bnQpLGFlKDIpLHllKCJuZ0lmIiwwIT1lLnJvbGVNZW1iZXJzQ291bnQpLGFlKDQpLE1yKCJHcm91cHMgKCIsZS5yb2xlR3Jv''@;'; put 'put ''dXBzQ291bnQsIikiKSxhZSgpLHllKCJuZ0lmIiwwPT1lLnJvbGVHcm91cHNDb3VudCksYWUoMikseWUoIm5nSWYiLDAhPWUucm9sZUdyb3Vwc0NvdW50KX19bGV0IF93ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpLGEsYyl7dGhpcy5zYXNTZXJ2aWNlPWUsdGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlPXIsdGhpcy5yb3V0ZXI9aSx0aGlzLmxvY2F0aW9uPWEsdGhpcy5yb3V0ZT1jLHRoaXMucm9sZVNlYXJjaD0iIix0aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xlTmFtZT0iIix0aGlzLnJvbGVEZXNjPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5s''@;'; put 'put ''b2FkaW5nPSExfW5nT25Jbml0KCl7V24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9yb2xlcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90''@;'; put 'put ''LnBhcmFtcy51cmkpLFduLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5yb2xlcz1Xbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Xbi51c2VybmF2LnJvbGVTZWFyY2gpOnZvaWQgMD09PVduLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGlu''@;'; put 'put ''Zz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oZT0+e2lmKHRoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVzPWUuYWRhcHRlclJlc3BvbnNlLnJvbGVzLFduLnVzZXJuYXYucm9sZUxpc3Q9ZS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhp''@;'; put 'put ''cy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCByPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PXImJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2Fu''@;'; put 'put ''dDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJv''@;'; put 'put ''bGVHcm91cHM9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWEuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPXIuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPXIuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1yLlJPTEVERVND''@;'; put 'put ''fSkpfX0pKToodGhpcy5yb2xlcz1Xbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Xbi51c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGU9PntpZih0aGlzLnJvbGVzPWUuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLnJvbGVzLFduLnVzZXJuYXYucm9sZUxpc3Q9ZS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCByPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PXImJih0aGlzLmxvYWRpbmc9ITAs''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9s''@;'; put 'put ''ZU1lbWJlcnNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWEuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPXIu''@;'; put 'put ''Uk9MRVVSSSx0aGlzLnJvbGVOYW1lPXIuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1yLlJPTEVERVNDfSkpfX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxXbi51c2Vy''@;'; put 'put ''bmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVPbkNsaWNrKGUpe3RoaXMubG9hZGluZz0hMDtsZXQgcj10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ci5zbGljZSgwLHIubGFzdEluZGV4T2YoIi8iKSkrIi8iK2Vu''@;'; put 'put ''Y29kZVVSSShlLlJPTEVVUkkpOnIrIi8iK2VuY29kZVVSSShlLlJPTEVVUkkpKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOmUuUk9MRVVSSX1dfSkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1l''@;'; put 'put ''bWJlcnM9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWEuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1hLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1lLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1lLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZS5ST0xFREVTQ30pfWZpbmRSb2xlKGUscil7bGV0IGk9ITE7cmV0dXJuIGUuZm9yRWFjaChhPT57YS5ST0xFVVJJPT09ciYmKGk9''@;'; put 'put ''YSl9KSxpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pKFdlKEpzKSxXZShMdSksV2UocmwpLFdlKGwyKSxXZShzMCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLXJvbGUiXV0saG9zdEF0dHJzOlsx''@;'; put 'put ''LCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwi''@;'; put 'put ''Y29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkg''@;'; put 'put ''Um9sZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxb''@;'; put 'put ''InNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlu''@;'; put 'put ''bmVyIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsInRhYmxlIiwicm9sZS1pbmZvIl0sWzEsImxlZnQiXSxbMSwicm9sZS1pbmZvLXRleHQiXSxbMSwiY2FyZCIsInJvbGUtZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxl''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImFwcC1zaWRlYmFyIiwx''@;'; put 'put ''KSgxLCJjbHItdHJlZSIpLGN0KDIsYVZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxzVnQsMiwxLCJuZy1jb250YWluZXIiLDMpLGllKCkoKSxyZSg0LCJkaXYiLDQpLGN0KDUsbFZ0LDMsMCwiZGl2Iiw1KSg2LGdWdCwzMSw4LCJkaXYiLDYpLGllKCkpLDImciYmKGFlKDIpLHllKCJuZ0lm''@;'; put 'put ''IixpLnJvbGVzKSxhZSgpLHllKCJuZ0Zvck9mIixpLnJvbGVzKSxhZSgyKSx5ZSgibmdJZiIsaS5sb2FkaW5nKSxhZSgpLHllKCJuZ0lmIixpLnJvbGVNZW1iZXJzJiYhaS5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbaHMsbWEsWDEsemwsaWwsUXMsUzIsRWgsVWwsUGQsYWcsaWddLHN0eWxl''@;'; put 'put ''czpbIjo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1kYXJrXSAucm9sZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yb2xlLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xv''@;'; put 'put ''cjojMzE0MzUxfTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1kYXJrXSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzI5NDA0Yn06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5yb2xlLWluZm97YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2Jv''@;'; put 'put ''cmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAucm9sZS1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3''@;'; put 'put ''fTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LnNpZGViYXItaGVpZ2h0e2hlaWdodDoxMDAlfS5yb2xlLWluZm8tdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0ucm9s''@;'; put 'put ''ZS1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9LnJvbGUtaW5mbyB0ZHt0ZXh0LWFsaWduOmNlbnRlcn0ucm9sZS1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9LnJvbGUtZGF0YXttaW4taGVpZ2h0OnVuc2V0fS5yb2xlLWRhdGEgaDMsLnJv''@;'; put 'put ''bGUtZGF0YSBoNXt0ZXh0LWFsaWduOmNlbnRlcn0ubWVtYmVyLXRhYmxle3dpZHRoOjEwMCV9Lm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVye292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NzAwcHh9QG1lZGlhIHNjcmVlbiBh''@;'; put 'put ''bmQgKG1heC13aWR0aDo3NjhweCl7LnJvbGUtZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpLG1WdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLXVzZXJuYXYtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAsdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24ocixpKXsxJnImJlZ0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBufSkoKSx2VnQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjEsdmFy''@;'; put 'put ''czowLHRlbXBsYXRlOmZ1bmN0aW9uKHIsaSl7MSZyJiZWdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZTVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCk7ZnVuY3Rpb24geVZ0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIF9WdChuLHQp''@;'; put 'put ''e2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pY29uIiwxMyksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMik7cmV0dXJuIGkudXNlclNlYXJjaD0iIixtdChpLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxpZSgpfX1mdW5jdGlvbiBiVnQobix0KXtpZigxJm4p''@;'; put 'put ''e2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEudXNlclNlYXJjaCxpKXx8KGEudXNlclNlYXJjaD1pKSxtdChpKX0p''@;'; put 'put ''LGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS51c2VyTGlzdE9uRmlsdGVyKCkpfSksaWUoKSxjdCg0LHlWdCwxLDAsImNsci1pY29uIiwxMCkoNSxfVnQsMSwwLCJjbHItaWNvbiIsMTEpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9ZGEoMykscj1FZSgpO2FlKDIp''@;'; put 'put ''LGxpKCJuZ01vZGVsIixyLnVzZXJTZWFyY2gpLGFlKDIpLHllKCJuZ0lmIixlLnZhbHVlLmxlbmd0aDwxKSxhZSgpLHllKCJuZ0lmIixlLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gd1Z0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLGt0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCkuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLnVzZXJPbkNsaWNrKGkpKX0pLHJlKDEsInAiLDE2KSxWdCgyLCJjbHItaWNvbiIsMTcpLFRlKDMpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQscj1FZSgpO2Jy''@;'; put 'put ''KCJhY3RpdmUiLChudWxsPT1yLnVzZXJJbmZvP251bGw6ci51c2VySW5mby5VUkkpPT09ZS5VUkkpLGFlKDMpLE1yKCIgIixlLk5BTUUsIiAiKX19ZnVuY3Rpb24gQ1Z0KG4sdCl7aWYoMSZuJiYocmkoMCksY3QoMSx3VnQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksaWkoKSksMiZuKXtjb25z''@;'; put 'put ''dCBlPXQuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLCFlLmhpZGRlbil9fWZ1bmN0aW9uIFNWdChuLHQpezEmbiYmKHJlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxUZSgyLCIgTG9hZGluZy4uLiAiKSxpZSgpKCkpfWZ1bmN0aW9uIE1WdChuLHQpe2lmKDEmbiYmKHJpKDApLHJlKDEsInRy''@;'; put 'put ''IikoMiwidGQiLDI3KSxUZSgzLCIgTWV0YWRhdGEgQ3JlYXRlZDogIikscmUoNCwiYiIpLFRlKDUpLGllKCkoKSgpLHJlKDYsInRyIikoNywidGQiLDI3KSxUZSg4LCIgTWV0YWRhdGEgVXBkYXRlZDogIikscmUoOSwiYiIpLFRlKDEwKSxpZSgpKCkoKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUo''@;'; put 'put ''Myk7YWUoNSksdnIoZS51c2VySW5mby5NRVRBREFUQUNSRUFURUQpLGFlKDUpLHZyKGUudXNlckluZm8uTUVUQURBVEFVUERBVEVEKX19ZnVuY3Rpb24geFZ0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIiko''@;'; put 'put ''NSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLFRlKDgpLGllKCkoKSgpKCkscmUoOSwidHIiKSgxMCwidGQiLDI3KSgxMSwicCIsMjgpKDEyLCJiIiksVGUoMTMpLGllKCkoKSgpKCksY3QoMTQsTVZ0LDExLDIsIm5nLWNvbnRhaW5lciIsNiksaWUoKSgpKCkoKSksMiZuKXtjb25zdCBlPUVl''@;'; put 'put ''KDIpO2FlKDgpLHZyKGUudXNlckluZm8uTkFNRSksYWUoNSksdnIoZS51c2VySW5mby5ESVNQTEFZTkFNRSksYWUoKSx5ZSgibmdJZiIsZS5zZXJ2ZXJUeXBlPT09ZS5TZXJ2ZXJUeXBlLlNhczkpfX1mdW5jdGlvbiBFVnQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIy''@;'; put 'put ''KSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksVGUoOCksaWUoKSgpKCkoKSxyZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpLFRlKDExLCIgVXNlciBJRDogIikscmUoMTIsImIiKSxUZSgxMyksaWUoKSgpKCkscmUoMTQsInRyIikoMTUs''@;'; put 'put ''InRkIiwyNyksVGUoMTYsIiBVc2VyIHByb3ZpZGVyIElEOiAiKSxyZSgxNywiYiIpLFRlKDE4KSxpZSgpKCkoKSgpKCkoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoOCksdnIoZS51c2VySW5mby5OQU1FKSxhZSg1KSx2cihlLnVzZXJJbmZvLlVSSSksYWUoNSksdnIoZS51c2VySW5mby5Q''@;'; put 'put ''Uk9WSURFUil9fWZ1bmN0aW9uIFRWdChuLHQpezEmbiYmKHJlKDAsImg1IiksVGUoMSwiTm8gRW1haWxzIFByZXNlbnQiKSxpZSgpKX1mdW5jdGlvbiBBVnQobix0KXtpZigxJm4mJihyZSgwLCJ0ciIpKDEsInRkIiwzMSksVGUoMiksaWUoKSxyZSgzLCJ0ZCIsMzEpLFRlKDQpLGllKCkoKSks''@;'; put 'put ''MiZuKXtjb25zdCBlPXQuJGltcGxpY2l0O2FlKDIpLHZyKGUuRU1BSUwpLGFlKDIpLHZyKGUuVFlQRSl9fWZ1bmN0aW9uIGtWdChuLHQpe2lmKDEmbiYmKHJlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLFRlKDUsIkVNQUlMIiksaWUoKSgpLHJl''@;'; put 'put ''KDYsInRkIiwzMSkoNywiYiIpLFRlKDgsIlRZUEUiKSxpZSgpKCkoKSgpLHJlKDksInRib2R5IiksY3QoMTAsQVZ0LDUsMiwidHIiLDMpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKDEwKSx5ZSgibmdGb3JPZiIsZS51c2VyRW1haWxzKX19ZnVuY3Rpb24gRFZ0KG4sdCl7aWYoMSZu''@;'; put 'put ''JiYocmUoMCwiZGl2IikoMSwiaDMiKSxUZSgyKSxpZSgpLGN0KDMsVFZ0LDIsMCwiaDUiLDYpLHJlKDQsImRpdiIsMjQpLGN0KDUsa1Z0LDExLDEsInRhYmxlIiwyNSksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoMiksTXIoIkVNQUlMUyAoIixlLnVzZXJFbWFpbHNDb3VudHx8IjAi''@;'; put 'put ''LCIpIiksYWUoKSx5ZSgibmdJZiIsMD09ZS51c2VyRW1haWxzQ291bnQpLGFlKDIpLHllKCJuZ0lmIiwwIT1lLnVzZXJFbWFpbHNDb3VudCl9fWZ1bmN0aW9uIElWdChuLHQpezEmbiYmVnQoMCwiaHIiKX1mdW5jdGlvbiBSVnQobix0KXsxJm4mJihyZSgwLCJoNSIpLFRlKDEsIk5vIEdyb3Vw''@;'; put 'put ''cyBQcmVzZW50IiksaWUoKSl9ZnVuY3Rpb24gTFZ0KG4sdCl7aWYoMSZuJiYocmUoMCwidGQiLDMzKSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQ7eWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2UuVVJJKSxhZSgpLE1yKCIgIixlLkdST1VQ''@;'; put 'put ''TkFNRSwiICIpfX1mdW5jdGlvbiBPVnQobix0KXtpZigxJm4mJihyaSgwKSxyZSgxLCJ0ZCIsMzMpLFRlKDIpLGllKCksaWkoKSksMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2FlKCkseWUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iKyhlLkdST1VQVVJJfHxlLlVS''@;'; put 'put ''SSkpLGFlKCksTXIoIiAiLGUuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIFBWdChuLHQpe2lmKDEmbiYmKHJlKDAsInRyIiksY3QoMSxMVnQsMiwyLCJ0ZCIsMzIpKDIsT1Z0LDMsMiwibmctY29udGFpbmVyIiw2KSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSx5ZSgibmdJZiIsZS5z''@;'; put 'put ''ZXJ2ZXJUeXBlPT09ZS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGFlKCkseWUoIm5nSWYiLGUuc2VydmVyVHlwZSE9PWUuU2VydmVyVHlwZS5TYXNWaXlhKX19ZnVuY3Rpb24gRlZ0KG4sdCl7aWYoMSZuJiYocmUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLGN0KDIsUFZ0LDMsMiwidHIiLDMpLGll''@;'; put 'put ''KCkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKDIpLHllKCJuZ0Zvck9mIixlLnVzZXJHcm91cHMpfX1mdW5jdGlvbiBIVnQobix0KXsxJm4mJlZ0KDAsImhyIil9ZnVuY3Rpb24gTlZ0KG4sdCl7MSZuJiYocmUoMCwiaDUiKSxUZSgxLCJObyBSb2xlcyBQcmVzZW50IiksaWUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gVlZ0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiKSgxLCJ0ZCIsMzQpLFRlKDIpLGllKCkoKSksMiZuKXtjb25zdCBlPXQuJGltcGxpY2l0LHI9RWUoNCk7YWUoKSx5ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvcm9sZXMvIityLmdldFJvbGVVUkkoZS5ST0xFVVJJKSksYWUoKSxN''@;'; put 'put ''cigiICIsZS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBCVnQobix0KXtpZigxJm4mJihyZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksY3QoMixWVnQsMywyLCJ0ciIsMyksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoMikseWUoIm5nRm9yT2YiLGUudXNlclJvbGVzKX19ZnVuY3Rp''@;'; put 'put ''b24galZ0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IikoMSwiaDMiKSxUZSgyKSxpZSgpLGN0KDMsTlZ0LDIsMCwiaDUiLDYpLHJlKDQsImRpdiIsMjQpLGN0KDUsQlZ0LDMsMSwidGFibGUiLDI1KSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgyKSxNcigiUk9MRVMgKCIsZS51c2Vy''@;'; put 'put ''Um9sZXNDb3VudHx8IjAiLCIpIiksYWUoKSx5ZSgibmdJZiIsMD09ZS51c2VyUm9sZXNDb3VudCksYWUoMikseWUoIm5nSWYiLDAhPWUudXNlclJvbGVzQ291bnQpfX1mdW5jdGlvbiB6VnQobix0KXsxJm4mJlZ0KDAsImhyIil9ZnVuY3Rpb24gVVZ0KG4sdCl7MSZuJiYocmUoMCwiaDUiKSxU''@;'; put 'put ''ZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLGllKCkpfWZ1bmN0aW9uIFdWdChuLHQpe2lmKDEmbiYmKHJlKDAsInRyIikoMSwidGQiLDMxKSxUZSgyKSxpZSgpLHJlKDMsInRkIiwzMSksVGUoNCksaWUoKSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoMiksdnIoZS5ET01BSU4pLGFl''@;'; put 'put ''KDIpLHZyKGUuVVNFUklEKX19ZnVuY3Rpb24gWlZ0KG4sdCl7aWYoMSZuJiYocmUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksVGUoNSwiRE9NQUlOIiksaWUoKSgpLHJlKDYsInRkIikoNywiYiIpLFRlKDgsIlVTRVIgSUQiKSxpZSgpKCkoKSgp''@;'; put 'put ''LHJlKDksInRib2R5IiksY3QoMTAsV1Z0LDUsMiwidHIiLDMpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKDEwKSx5ZSgibmdGb3JPZiIsZS51c2VyTG9naW5zKX19ZnVuY3Rpb24gWVZ0KG4sdCl7aWYoMSZuJiYocmUoMCwiZGl2IikoMSwiaDMiKSxUZSgyKSxpZSgpLGN0KDMsVVZ0''@;'; put 'put ''LDIsMCwiaDUiLDYpLHJlKDQsImRpdiIsMjQpLGN0KDUsWlZ0LDExLDEsInRhYmxlIiwyNSksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoMiksTXIoIkxPR0lOUyAoIixlLnVzZXJMb2dpbnNDb3VudHx8IjAiLCIpIiksYWUoKSx5ZSgibmdJZiIsMD09ZS51c2VyTG9naW5zQ291bnQp''@;'; put 'put ''LGFlKDIpLHllKCJuZ0lmIiwwIT1lLnVzZXJMb2dpbnNDb3VudCl9fWZ1bmN0aW9uIEdWdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIpLGN0KDEseFZ0LDE1LDMsImRpdiIsMjApKDIsRVZ0LDE5LDMsImRpdiIsMjApLHJlKDMsImRpdiIsMjEpKDQsImRpdiIsMjIpKDUsImRpdiIsMjMpLGN0''@;'; put 'put ''KDYsRFZ0LDYsMywiZGl2Iiw2KSg3LElWdCwxLDAsImhyIiw2KSxyZSg4LCJkaXYiKSg5LCJoMyIpLFRlKDEwKSxpZSgpLGN0KDExLFJWdCwyLDAsImg1Iiw2KSxyZSgxMiwiZGl2IiwyNCksY3QoMTMsRlZ0LDMsMSwidGFibGUiLDI1KSxpZSgpKCksY3QoMTQsSFZ0LDEsMCwiaHIiLDYpKDE1''@;'; put 'put ''LGpWdCw2LDMsImRpdiIsNikoMTYselZ0LDEsMCwiaHIiLDYpKDE3LFlWdCw2LDMsImRpdiIsNiksVnQoMTgsImJyIiksaWUoKSgpKCkoKSksMiZuKXtjb25zdCBlPUVlKCk7YWUoKSx5ZSgibmdJZiIsZS5zZXJ2ZXJUeXBlIT09ZS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGFlKCkseWUoIm5nSWYi''@;'; put 'put ''LGUuc2VydmVyVHlwZT09PWUuU2VydmVyVHlwZS5TYXNWaXlhJiZlLnVzZXJJbmZvKSxhZSg0KSx5ZSgibmdJZiIsZS5zZXJ2ZXJUeXBlPT09ZS5TZXJ2ZXJUeXBlLlNhczkpLGFlKCkseWUoIm5nSWYiLGUuc2VydmVyVHlwZT09PWUuU2VydmVyVHlwZS5TYXM5KSxhZSgzKSxNcigiR1JPVVBT''@;'; put 'put ''ICgiLGUudXNlckdyb3Vwc0NvdW50fHwiMCIsIikiKSxhZSgpLHllKCJuZ0lmIiwwPT1lLnVzZXJHcm91cHNDb3VudCksYWUoMikseWUoIm5nSWYiLDAhPWUudXNlckdyb3Vwc0NvdW50KSxhZSgpLHllKCJuZ0lmIixlLnNlcnZlclR5cGU9PT1lLlNlcnZlclR5cGUuU2FzOSksYWUoKSx5ZSgi''@;'; put 'put ''bmdJZiIsZS5zZXJ2ZXJUeXBlPT09ZS5TZXJ2ZXJUeXBlLlNhczkpLGFlKCkseWUoIm5nSWYiLGUuc2VydmVyVHlwZT09PWUuU2VydmVyVHlwZS5TYXM5KSxhZSgpLHllKCJuZ0lmIixlLnNlcnZlclR5cGU9PT1lLlNlcnZlclR5cGUuU2FzOSl9fWxldCBid2U9KCgpPT57Y2xhc3Mgbntjb25z''@;'; put 'put ''dHJ1Y3RvcihlLHIsaSxhLGMpe3RoaXMuaGVscGVyU2VydmljZT1lLHRoaXMuc2FzU2VydmljZT1yLHRoaXMucm91dGU9aSx0aGlzLmxvY2F0aW9uPWEsdGhpcy5yb3V0ZXI9Yyx0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2VyU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFy''@;'; put 'put ''YW1OYW1lPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IGgyLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMuc2VydmVyVHlwZT0iIix0aGlzLlNlcnZlclR5cGU9QzEuWSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe2lmKFduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvdXNlcnMiLHZvaWQgMCE9PXRo''@;'; put 'put ''aXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1OYW1lPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksV24udXNlcm5hdi51c2VyTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50KXRoaXMudXNlcnM9V24udXNlcm5hdi51c2Vy''@;'; put 'put ''TGlzdCx0aGlzLnVzZXJTZWFyY2g9V24udXNlcm5hdi51c2VyU2VhcmNoO2Vsc2UgaWYodm9pZCAwPT09V24udXNlcm5hdi51c2VyTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycz9saW1p''@;'; put 'put ''dD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGU9PmUudGV4dCgpKS50aGVuKGU9PntsZXQgaT1KU09OLnBhcnNlKGUpLml0ZW1zLm1hcChhPT4oe05BTUU6YS5uYW1lLFVSSTphLmlkLFBST1ZJREVSOmEucHJvdmlkZXJJZH0pKTt0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy51c2Vycz1pLFduLnVzZXJuYXYudXNlckxpc3Q9aX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzIixudWxsKS50aGVuKGU9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1lLmFkYXB0ZXJSZXNwb25zZS51c2VycyxXbi51c2VybmF2''@;'; put 'put ''LnVzZXJMaXN0PWUuYWRhcHRlclJlc3BvbnNlLnVzZXJzfSkpOih0aGlzLnVzZXJzPVduLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPVduLnVzZXJuYXYudXNlclNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQpaWYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhKXtsZXQgZT10''@;'; put 'put ''aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrZSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4ocj0+ci50ZXh0''@;'; put 'put ''KCkpLnRoZW4ocj0+e2xldCBpPUpTT04ucGFyc2Uocik7dGhpcy51c2VyRGF0YT1pLHRoaXMubG9hZGluZz0hMTtsZXQgYT1pLml0ZW1zLm1hcChjPT4oe0dST1VQTkFNRTpjLm5hbWUsVVJJOmMuaWR9KSk7dGhpcy51c2VyR3JvdXBzPWEsdGhpcy51c2VyR3JvdXBzQ291bnQ9YS5sZW5ndGgs''@;'; put 'put ''dGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKGM9PmMuVVJJPT09ZSkpfSl9ZWxzZXtjb25zdCBlPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTt0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpb''@;'; put 'put ''e3VyaTplfV19KS50aGVuKGk9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBDMS5ZLlNhczk6dGhpcy51c2VySW5mbz1pLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1pLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMsdGhpcy51c2Vy''@;'; put 'put ''RW1haWxzQ291bnQ9aS5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1pLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWkuYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9aS5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2UubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWkuYWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBDMS5ZLlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoYT0+YS5VUkk9PT1lKTtlbHNle2NvbnN0IGE9aS5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTphLklELE5BTUU6YS5OQU1FLERJU1BMQVlOQU1FOmEuTkFNRX19fXRoaXMudXNlckRhdGE9aS5hZGFwdGVyUmVzcG9uc2UsdGhpcy51c2VyR3JvdXBzPWkuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHND''@;'; put 'put ''b3VudD1pLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMubGVuZ3RofSl9fXVzZXJMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudXNlcnMsdGhpcy51c2VyU2VhcmNoLCJOQU1FIiksV24udXNlcm5hdi51c2VyU2VhcmNoPXRoaXMudXNlclNlYXJj''@;'; put 'put ''aH11c2VyT25DbGljayhlKXt0aGlzLmxvYWRpbmc9ITA7bGV0IHI9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P3Iuc2xpY2UoMCxyLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoZS5VUkkpOnIrIi8iK2VuY29kZVVS''@;'; put 'put ''SShlLlVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2UuVVJJKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihpPT5pLnRleHQoKSku''@;'; put 'put ''dGhlbihpPT57bGV0IGE9SlNPTi5wYXJzZShpKTt0aGlzLnVzZXJEYXRhPWEsdGhpcy5sb2FkaW5nPSExO2xldCBjPWEuaXRlbXMubWFwKG09Pih7R1JPVVBOQU1FOm0ubmFtZSxVUkk6bS5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Yyx0aGlzLnVzZXJHcm91cHNDb3VudD1jLmxlbmd0aCx0aGlz''@;'; put 'put ''LnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQobT0+bS5VUkk9PT1lLlVSSSkpfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6ZS5VUkl9XX0pLnRoZW4oYT0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9''@;'; put 'put ''ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEMxLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWEuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWEuYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMubGVu''@;'; put 'put ''Z3RoLHRoaXMudXNlclJvbGVzPWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1hLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9YS5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIEMxLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChjPT5jLlVSST09PWUuVVJJKTtlbHNle2NvbnN0IGM9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VS''@;'; put 'put ''STpjLklELE5BTUU6Yy5OQU1FLERJU1BMQVlOQU1FOmMuTkFNRX19fXRoaXMudXNlckRhdGE9YS5hZGFwdGVyUmVzcG9uc2UsdGhpcy51c2VyR3JvdXBzPWEuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMubGVuZ3Ro''@;'; put 'put ''fSl9Z2V0Um9sZVVSSShlKXtyZXR1cm4gZS5zcGxpdCgiT01TT0JKOklkZW50aXR5R3JvdXAiKVsxXS5zbGljZSgxKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyhyfHxuKShXZShMdSksV2UoSnMpLFdlKHMwKSxXZShsMiksV2UocmwpKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC11c2VyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQi''@;'; put 'put ''XSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIi''@;'; put 'put ''XSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFVzZXJzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFk''@;'; put 'put ''ZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsi''@;'; put 'put ''Y2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwidXNlci1pbmZvIl0sWzEsImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2''@;'; put 'put ''ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHIt''@;'; put 'put ''dHJlZSIpLGN0KDIsYlZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxDVnQsMiwxLCJuZy1jb250YWluZXIiLDMpLGllKCkoKSxyZSg0LCJkaXYiLDQpLGN0KDUsU1Z0LDMsMCwiZGl2Iiw1KSg2LEdWdCwxOSwxMSwiZGl2Iiw2KSxpZSgpKSwyJnImJihhZSgyKSx5ZSgibmdJZiIsaS51c2Vy''@;'; put 'put ''cyksYWUoKSx5ZSgibmdGb3JPZiIsaS51c2VycyksYWUoMikseWUoIm5nSWYiLGkubG9hZGluZyksYWUoKSx5ZSgibmdJZiIsaS51c2VyRGF0YSYmIWkubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2hzLG1hLFgxLEV3LHpsLGlsLFFzLFMyLEVoLFVsLFBkLGFnLGlnXSxlbmNhcHN1bGF0aW9u''@;'; put 'put ''OjJ9KX19cmV0dXJuIG59KSgpO2NvbnN0ICRWdD1uPT5bInNlZ21lbnQiLG5dLEtWdD0obix0KT0+KHsic2VnbWVudC1tYWluIjohMCxleHBhbmRhYmxlOm4sZXhwYW5kZWQ6dH0pO2Z1bmN0aW9uIFhWdChuLHQpezEmbiYmVnQoMCwiZGl2Iiw5KX1mdW5jdGlvbiBxVnQobix0KXtpZigxJm4p''@;'; put 'put ''e2NvbnN0IGU9SW4oKTtyZSgwLCJzcGFuIiwxMCksa3QoImNsaWNrIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkub25WYWx1ZUNsaWNrKGkpKX0pLFRlKDEpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2FlKCksdnIo''@;'; put 'put ''ZS5kZXNjcmlwdGlvbil9fWZ1bmN0aW9uIEpWdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsInNlY3Rpb24iLDExKSgxLCJuZ3gtanNvbi12aWV3ZXIiLDEyKSxrdCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihpKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikub25TZWdtZW50''@;'; put 'put ''TGlua0NsaWNrKGkpKX0pLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQscj1FZSgpO2FlKCkseWUoImpzb24iLGUudmFsdWUpKCJleHBhbmRlZCIsci5leHBhbmRlZCkoImRlcHRoIixyLmRlcHRoKSgiX2N1cnJlbnREZXB0aCIsci5fY3VycmVudERlcHRoKzEpfX1mdW5j''@;'; put 'put ''dGlvbiBRVnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJzZWN0aW9uIiwyKSgxLCJzZWN0aW9uIiwzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaT1ndChlKS4kaW1wbGljaXQ7cmV0dXJuIG10KEVlKCkudG9nZ2xlKGkpKX0pLGN0KDIsWFZ0LDEsMCwiZGl2Iiw0KSxy''@;'; put 'put ''ZSgzLCJzcGFuIiw1KSxUZSg0KSxpZSgpLHJlKDUsInNwYW4iLDYpLFRlKDYsIjogIiksaWUoKSxjdCg3LHFWdCwyLDEsInNwYW4iLDcpLGllKCksY3QoOCxKVnQsMiw0LCJzZWN0aW9uIiw4KSxpZSgpfWlmKDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKCk7eWUoIm5nQ2xhc3MiLHI0''@;'; put 'put ''KDYsJFZ0LCJzZWdtZW50LXR5cGUtIitlLnR5cGUpKSxhZSgpLHllKCJuZ0NsYXNzIixpNCg4LEtWdCxyLmlzRXhwYW5kYWJsZShlKSxlLmV4cGFuZGVkKSksYWUoKSx5ZSgibmdJZiIsci5pc0V4cGFuZGFibGUoZSkpLGFlKDIpLHZyKGUua2V5KSxhZSgzKSx5ZSgibmdJZiIsIWUuZXhwYW5k''@;'; put 'put ''ZWR8fCFyLmlzRXhwYW5kYWJsZShlKSksYWUoKSx5ZSgibmdJZiIsZS5leHBhbmRlZCYmci5pc0V4cGFuZGFibGUoZSkpfX1sZXQgZUJ0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGVkPSEwLHRoaXMuZGVwdGg9LTEsdGhpcy5fY3VycmVudERlcHRoPTAsdGhpcy5z''@;'; put 'put ''ZWdtZW50TGlua0NsaWNrZWQ9bmV3IFlyLHRoaXMuc2VnbWVudHM9W119bmdPbkNoYW5nZXMoKXt0aGlzLnNlZ21lbnRzPVtdLHRoaXMuanNvbj10aGlzLmRlY3ljbGUodGhpcy5qc29uKSwib2JqZWN0Ij09dHlwZW9mIHRoaXMuanNvbj9PYmplY3Qua2V5cyh0aGlzLmpzb24pLmZvckVhY2go''@;'; put 'put ''ZT0+e3RoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoZSx0aGlzLmpzb25bZV0pKX0pOnRoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYCgke3R5cGVvZiB0aGlzLmpzb259KWAsdGhpcy5qc29uKSl9aXNFeHBhbmRhYmxlKGUpe3JldHVybiJvYmplY3Qi''@;'; put 'put ''PT09ZS50eXBlfHwiYXJyYXkiPT09ZS50eXBlfXRvZ2dsZShlKXt0aGlzLmlzRXhwYW5kYWJsZShlKSYmKGUuZXhwYW5kZWQ9IWUuZXhwYW5kZWQpfW9uVmFsdWVDbGljayhlKXsibGluayI9PT1lLnR5cGUmJnRoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoZS52YWx1ZSl9b25TZWdtZW50''@;'; put 'put ''TGlua0NsaWNrKGUpe3RoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoZSl9cGFyc2VLZXlWYWx1ZShlLHIpe2NvbnN0IGk9e2tleTplLHZhbHVlOnIsdHlwZTp2b2lkIDAsZGVzY3JpcHRpb246IiIrcixleHBhbmRlZDp0aGlzLmlzRXhwYW5kZWQoKX07c3dpdGNoKHR5cGVvZiBpLnZhbHVl''@;'; put 'put ''KXtjYXNlIm51bWJlciI6aS50eXBlPSJudW1iZXIiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6aS50eXBlPSJib29sZWFuIjticmVhaztjYXNlImZ1bmN0aW9uIjppLnR5cGU9ImZ1bmN0aW9uIjticmVhaztjYXNlInN0cmluZyI6aWYodGhpcy5pc0xpbmsoaS52YWx1ZSkpe2kudHlwZT0ibGluayI7''@;'; put 'put ''YnJlYWt9aS50eXBlPSJzdHJpbmciLGkuZGVzY3JpcHRpb249JyInK2kudmFsdWUrJyInO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjppLnR5cGU9InVuZGVmaW5lZCIsaS5kZXNjcmlwdGlvbj0idW5kZWZpbmVkIjticmVhaztjYXNlIm9iamVjdCI6bnVsbD09PWkudmFsdWU/KGkudHlwZT0ibnVs''@;'; put 'put ''bCIsaS5kZXNjcmlwdGlvbj0ibnVsbCIpOkFycmF5LmlzQXJyYXkoaS52YWx1ZSk/KGkudHlwZT0iYXJyYXkiLGkuZGVzY3JpcHRpb249IkFycmF5WyIraS52YWx1ZS5sZW5ndGgrIl0gIitKU09OLnN0cmluZ2lmeShpLnZhbHVlKSk6aS52YWx1ZSBpbnN0YW5jZW9mIERhdGU/aS50eXBlPSJk''@;'; put 'put ''YXRlIjooaS50eXBlPSJvYmplY3QiLGkuZGVzY3JpcHRpb249Ik9iamVjdCAiK0pTT04uc3RyaW5naWZ5KGkudmFsdWUpKX1yZXR1cm4gaX1pc0xpbmsoZSl7cmV0dXJuImh0dHBzOi8vIj09PWUuc3Vic3RyaW5nKDAsOCl8fCJodHRwOi8vIj09PWUuc3Vic3RyaW5nKDAsNyl8fCIvIj09PWVb''@;'; put 'put ''MF19aXNFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkJiYhKHRoaXMuZGVwdGg+LTEmJnRoaXMuX2N1cnJlbnREZXB0aD49dGhpcy5kZXB0aCl9ZGVjeWNsZShlKXtjb25zdCByPW5ldyBXZWFrTWFwO3JldHVybiBmdW5jdGlvbiBpKGEsYyl7bGV0IG0sQztyZXR1cm4ib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGF8fG51bGw9PT1hfHxhIGluc3RhbmNlb2YgQm9vbGVhbnx8YSBpbnN0YW5jZW9mIERhdGV8fGEgaW5zdGFuY2VvZiBOdW1iZXJ8fGEgaW5zdGFuY2VvZiBSZWdFeHB8fGEgaW5zdGFuY2VvZiBTdHJpbmc/YToobT1yLmdldChhKSx2b2lkIDAhPT1tP3skcmVmOm19OihyLnNldChh''@;'; put 'put ''LGMpLEFycmF5LmlzQXJyYXkoYSk/KEM9W10sYS5mb3JFYWNoKGZ1bmN0aW9uKFAsWSl7Q1tZXT1pKFAsYysiWyIrWSsiXSIpfSkpOihDPXt9LE9iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oUCl7Q1tQXT1pKGFbUF0sYysiWyIrSlNPTi5zdHJpbmdpZnkoUCkrIl0iKX0pKSxDKSl9''@;'; put 'put ''KGUsIiQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5neC1qc29uLXZpZXdlciJdXSxpbnB1dHM6e2pzb246Impzb24iLGV4cGFuZGVkOiJleHBhbmRlZCIsZGVwdGg6ImRlcHRo''@;'; put 'put ''IixfY3VycmVudERlcHRoOiJfY3VycmVudERlcHRoIn0sb3V0cHV0czp7c2VnbWVudExpbmtDbGlja2VkOiJzZWdtZW50TGlua0NsaWNrZWQifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltXdF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xh''@;'; put 'put ''c3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNr''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRo''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUscil7MSZlJiYocmUoMCwic2VjdGlvbiIsMCksY3QoMSxRVnQsOSwxMSwic2VjdGlvbiIsMSksaWUoKSksMiZlJiYoYWUoKSx5ZSgibmdGb3JPZiIsci5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W1J1LGhzLG1hLG5dLHN0eWxlczpbJ0BjaGFyc2V0''@;'; put 'put ''ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJm''@;'; put 'put ''bG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQt''@;'; put 'put ''bWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9y''@;'; put 'put ''OnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06''@;'; put 'put ''YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''c2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+''@;'; put 'put ''IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFp''@;'; put 'put ''bltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50''@;'; put 'put ''LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12''@;'; put 'put ''aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0''@;'; put 'put ''LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6''@;'; put 'put ''dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNl''@;'; put 'put ''Z21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''PiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10''@;'; put 'put ''eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVu''@;'; put 'put ''ZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29u''@;'; put 'put ''LXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBh''@;'; put 'put ''bmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12''@;'; put 'put ''aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksbn0pKCksdEJ0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXty''@;'; put 'put ''ZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HaSh7dHlwZTpufSksbi5cdTAyNzVpbmo9em4oe2ltcG9ydHM6W0ZhXX0pLG59KSgpLG5CdD0oKCk9PntjbGFzcyBue3RyYW5zZm9ybShlKXtpZighZS5pbmNsdWRlcygiLyIpKXJldHVybiBlO2xldCByPSIiO2NvbnN0IGk9ZS5zcGxpdCgi''@;'; put 'put ''LyIpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlmKCIiIT09aVthXSl7Y29uc3QgYz1pW2FdO3IrPSIvIitjLGlbYV09YDxhIGhyZWY9JHtyfT4ke2N9PC9hPmB9cmV0dXJuIGkuam9pbigiLyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4p''@;'; put 'put ''fX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPXN1KHtuYW1lOiJsaW5raW56ZSIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gbn0pKCksckJ0PSgoKT0+e2NsYXNzIG57dHJhbnNmb3JtKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlLG51bGwsMil9c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9c3Uoe25hbWU6InByZXR0eWpzb24iLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIG59KSgpO2Z1bmN0aW9uIGlCdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9w''@;'; put 'put ''dGlvbiIsMjQpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDtQRSgidmFsdWUiLGUudmFsdWUpLGFlKCksTXIoIiAiLGUua2V5LCIgIil9fWZ1bmN0aW9uIGFCdChuLHQpe2lmKDEmbiYmKHJlKDAsIm9wdGdyb3VwIiwyMiksY3QoMSxpQnQsMiwyLCJvcHRpb24iLDIzKSxo''@;'; put 'put ''bCgyLCJrZXl2YWx1ZSIpLGllKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdCxyPUVlKCk7eWUoImxhYmVsIixlLmtleSksYWUoKSx5ZSgibmdGb3JPZiIsUmMoMiwyLHIuY29sbGVjdGlvbnNbZS5rZXldKSl9fWZ1bmN0aW9uIG9CdChuLHQpezEmbiYmKHJlKDAsInAiLDI1KSxUZSgxLCIg''@;'; put 'put ''U2VsZWN0IGNvbGxlY3Rpb24gdG8gc3RhcnQgIiksaWUoKSl9ZnVuY3Rpb24gc0J0KG4sdCl7MSZuJiZWdCgwLCJjbHItc3Bpbm5lciIsMjYpfWZ1bmN0aW9uIGxCdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBjQnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTty''@;'; put 'put ''ZSgwLCJjbHItaWNvbiIsMzMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVybiBpLmxpbmtzU2VhcmNoPSIiLG10KGkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxpZSgpfX1mdW5jdGlvbiB1QnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJj''@;'; put 'put ''bHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDI5LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEubGlua3NTZWFyY2gsaSl8fChhLmxpbmtzU2VhcmNoPWkpLG10KGkpfSksa3QoImtleXVwIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSksaWUoKSxjdCg0LGxCdCwxLDAsImNsci1pY29uIiwzMCkoNSxjQnQsMSwwLCJjbHItaWNvbiIsMzEpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9ZGEoMykscj1FZSgpO2FlKDIpLGxpKCJuZ01vZGVsIixy''@;'; put 'put ''LmxpbmtzU2VhcmNoKSxhZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGRCdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDM1KSxrdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KGkpe2d0KGUpO2NvbnN0IGE9RWUoKS4kaW1wbGljaXQsYz1FZSgpO3JldHVybiBtdChjLnRyZWVOb2RlQ2xpY2tlZChpLGEsYy5lbmRwb2ludExpbmtzKSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS4kaW1wbGljaXQ7cmV0dXJuIHVp''@;'; put 'put ''KGEuZXhwYW5kZWQsaSl8fChhLmV4cGFuZGVkPWkpLG10KGkpfSkscmUoMSwicCIsMzYpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKCkuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLmxpbmtPbkNsaWNrKGkpKX0pLFZ0KDIsImNsci1pY29uIiwzNyksVGUoMyksaWUo''@;'; put 'put ''KSgpfWlmKDImbil7Y29uc3QgZT1FZSgpLiRpbXBsaWNpdDtsaSgiY2xyRXhwYW5kZWQiLGUuZXhwYW5kZWQpLHllKCJjbHJMb2FkaW5nIiwhIWUubG9hZGluZ1RhYmxlcyYmIWUudGFibGVzKSxhZSgzKSxuMCgiICIsZS5tZXRob2QsIiAiLGUucmVsLCIgIil9fWZ1bmN0aW9uIGhCdChuLHQp''@;'; put 'put ''e2lmKDEmbiYmKHJpKDApLGN0KDEsZEJ0LDQsNCwiY2xyLXRyZWUtbm9kZSIsMzQpLGlpKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDthZSgpLHllKCJuZ0lmIiwhZS5oaWRkZW4pfX1mdW5jdGlvbiBmQnQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gcEJ0KG4s''@;'; put 'put ''dCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLWljb24iLDMzKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgyKTtyZXR1cm4gaS5pdGVtc1NlYXJjaD0iIixtdChpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaWUoKX19ZnVuY3Rpb24gZ0J0KG4sdCl7aWYo''@;'; put 'put ''MSZuKXtjb25zdCBlPUluKCk7cmUoMCwiY2xyLXRyZWUtbm9kZSIsMjcpKDEsImRpdiIsMjgpKDIsImlucHV0IiwzOCwxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVybiB1aShhLml0ZW1zU2VhcmNoLGkpfHwoYS5pdGVtc1NlYXJjaD1p''@;'; put 'put ''KSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLGllKCksY3QoNCxmQnQsMSwwLCJjbHItaWNvbiIsMzApKDUscEJ0LDEsMCwiY2xyLWljb24iLDMxKSxpZSgpKCl9aWYoMiZuKXtjb25zdCBlPWRhKDMpLHI9''@;'; put 'put ''RWUoKTthZSgyKSxsaSgibmdNb2RlbCIsci5pdGVtc1NlYXJjaCksYWUoMikseWUoIm5nSWYiLGUudmFsdWUubGVuZ3RoPDEpLGFlKCkseWUoIm5nSWYiLGUudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBtQnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''IiwzNSksa3QoImNsaWNrIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCkuJGltcGxpY2l0LGM9RWUoKTtyZXR1cm4gbXQoYy50cmVlTm9kZUNsaWNrZWQoaSxhLGMuZW5kcG9pbnRJdGVtcykpfSksY2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBh''@;'; put 'put ''PUVlKCkuJGltcGxpY2l0O3JldHVybiB1aShhLmV4cGFuZGVkLGkpfHwoYS5leHBhbmRlZD1pKSxtdChpKX0pLHJlKDEsInAiLDM2KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpLiRpbXBsaWNpdDtyZXR1cm4gbXQoRWUoKS5pdGVtT25DbGljayhpKSl9KSxWdCgy''@;'; put 'put ''LCJjbHItaWNvbiIsMzcpLFRlKDMpLGllKCkoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS4kaW1wbGljaXQ7bGkoImNsckV4cGFuZGVkIixlLmV4cGFuZGVkKSx5ZSgiY2xyTG9hZGluZyIsISFlLmxvYWRpbmdUYWJsZXMmJiFlLnRhYmxlcyksYWUoMyksTXIoIiAiLGUubmFtZXx8ZS5pZCwiICIp''@;'; put 'put ''fX1mdW5jdGlvbiB2QnQobix0KXtpZigxJm4mJihyaSgwKSxjdCgxLG1CdCw0LDMsImNsci10cmVlLW5vZGUiLDM0KSxpaSgpKSwyJm4pe2NvbnN0IGU9dC4kaW1wbGljaXQ7YWUoKSx5ZSgibmdJZiIsIWUuaGlkZGVuKX19ZnVuY3Rpb24geUJ0KG4sdCl7MSZuJiZWdCgwLCJjbHItc3Bpbm5l''@;'; put 'put ''ciIsMzkpfWZ1bmN0aW9uIF9CdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsIm5neC1qc29uLXZpZXdlciIsNDkpLGt0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGkpe3JldHVybiBndChlKSxtdChFZSgzKS5vbkpzb25MaW5rQ2xpY2soaSkpfSksaWUoKX0yJm4mJnll''@;'; put 'put ''KCJqc29uIixFZSgzKS5lbmRwb2ludEpzb24pKCJleHBhbmRlZCIsITEpfWZ1bmN0aW9uIGJCdChuLHQpe2lmKDEmbiYmKHJpKDApLFRlKDEpLGhsKDIsInByZXR0eWpzb24iKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSxNcigiXG4gICAgICAgICAgICAiLFJjKDIsMSxlLmVuZHBv''@;'; put 'put ''aW50SnNvbiksIlxuICAgICAgICAgICIpfX1mdW5jdGlvbiB3QnQobix0KXtpZigxJm4mJihyaSgwKSxUZSgxLCJcbiAgICAgICAgICAiKSxjdCgyLF9CdCwxLDIsIm5neC1qc29uLXZpZXdlciIsNDgpLFRlKDMsIlxuICAgICAgICAgICIpLGN0KDQsYkJ0LDMsMywibmctY29udGFpbmVyIiwy''@;'; put 'put ''MSksVGUoNSwiXG4gICAgICAgICIpLGlpKCkpLDImbil7Y29uc3QgZT1FZSgyKTthZSgyKSx5ZSgibmdJZiIsIWUucmF3SnNvbiksYWUoMikseWUoIm5nSWYiLGUucmF3SnNvbil9fWZ1bmN0aW9uIENCdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JpKDApLHJlKDEsImRpdiIsNDApKDIs''@;'; put 'put ''InNwYW4iLDQxKSxUZSgzLCIgR0VUICIpLHJlKDQsInAiLDQyKSxobCg1LCJsaW5raW56ZSIpLGt0KCJjbGljayIsZnVuY3Rpb24oaSl7cmV0dXJuIGd0KGUpLG10KEVlKCkub25CcmVhZGN1bXNDbGljayhpKSl9KSxpZSgpLHJlKDYsImJ1dHRvbiIsMTYpLGt0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5jb3B5QnJlYWRjcnVtcygpKX0pLFZ0KDcsImNsci1pY29uIiwxNyksaWUoKSgpLHJlKDgsImRpdiIsNDMpKDksImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxMCwibGFiZWwiKSxUZSgxMSwiU3RhcnQiKSxpZSgpLHJlKDEyLCJpbnB1dCIsNDQpLGNp''@;'; put 'put ''KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCk7cmV0dXJuIHVpKGEuZW5kcG9pbnQuc3RhcnQsaSl8fChhLmVuZHBvaW50LnN0YXJ0PWkpLG10KGkpfSksaWUoKSgpLHJlKDEzLCJjbHItaW5wdXQtY29udGFpbmVyIiwxNCkoMTQsImxhYmVsIiksVGUoMTUs''@;'; put 'put ''IkxpbWl0IiksaWUoKSxyZSgxNiwiaW5wdXQiLDQ0KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaSl7Z3QoZSk7Y29uc3QgYT1FZSgpO3JldHVybiB1aShhLmVuZHBvaW50LmxpbWl0LGkpfHwoYS5lbmRwb2ludC5saW1pdD1pKSxtdChpKX0pLGllKCkoKSxyZSgxNywiYnV0dG9uIiw0''@;'; put 'put ''NSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLmFwcGx5UXVlcnlQYXJhbXMoKSl9KSxWdCgxOCwiY2xyLWljb24iLDQ2KSxpZSgpKCkoKSxyZSgxOSwicHJlIiw0NyksVGUoMjAsIiAgICAgICAgIiksY3QoMjEsd0J0LDYsMiwibmctY29udGFpbmVyIiwyMSks''@;'; put 'put ''VGUoMjIsIlxuICAgICAgIiksaWUoKSxpaSgpfWlmKDImbil7Y29uc3QgZT1FZSgpO2FlKDQpLHllKCJpbm5lckhUTUwiLFJjKDUsNyxlLmVuZHBvaW50LnVybCksemcpLGFlKDgpLGxpKCJuZ01vZGVsIixlLmVuZHBvaW50LnN0YXJ0KSx5ZSgiZGlzYWJsZWQiLHZvaWQgMD09PWUuZW5kcG9p''@;'; put 'put ''bnQuc3RhcnQpLGFlKDQpLGxpKCJuZ01vZGVsIixlLmVuZHBvaW50LmxpbWl0KSx5ZSgiZGlzYWJsZWQiLHZvaWQgMD09PWUuZW5kcG9pbnQubGltaXQpLGFlKCkseWUoImRpc2FibGVkIix2b2lkIDA9PT1lLmVuZHBvaW50LmxpbWl0JiZ2b2lkIDA9PT1lLmVuZHBvaW50LnN0YXJ0KSxhZSg0''@;'; put 'put ''KSx5ZSgibmdJZiIsZS5lbmRwb2ludEpzb24pfX1sZXQgU0J0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxyLGksYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWUsdGhpcy5zYXNWaXlhU2VydmljZT1yLHRoaXMuc2FzU2VydmljZT1pLHRoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5jb2xsZWN0''@;'; put 'put ''aW9ucz17fSx0aGlzLmNvbGxlY3Rpb249IiIsdGhpcy5lbmRwb2ludExpbmtzPVtdLHRoaXMuZW5kcG9pbnRJdGVtcz1bXSx0aGlzLmVuZHBvaW50PXt1cmw6IiIsc3RhcnQ6LTEsbGltaXQ6LTF9LHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhp''@;'; put 'put ''cy5yYXdKc29uPSExLHRoaXMubGlua3NTZWFyY2g9IiIsdGhpcy5pdGVtc1NlYXJjaD0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBoMi5TQVNqc0NvbmZpZ31uZ09uSW5pdCgpe3RoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5jb2xsZWN0aW9u''@;'; put 'put ''cz10aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEFsbENvbGxlY3Rpb25zKCl9bGlua3NMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRMaW5rcyx0aGlzLmxpbmtzU2VhcmNoLCJyZWwiKSxXbi52aXlhQXBpLmxpbmtzc1NlYXJjaD10''@;'; put 'put ''aGlzLmxpbmtzU2VhcmNofWl0ZW1zTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50SXRlbXMsdGhpcy5pdGVtc1NlYXJjaCwibmFtZSIpLFduLnZpeWFBcGkuaXRlbXNTZWFyY2g9dGhpcy5pdGVtc1NlYXJjaH1saW5rT25DbGlj''@;'; put 'put ''ayhlKXt0aGlzLmxvYWRVcmwoZS5ocmVmKX1pdGVtT25DbGljayhlKXt0aGlzLmxvYWRVcmwoZS5saW5rc1swXS5ocmVmKX10cmVlTm9kZUNsaWNrZWQoZSxyLGkpeyJDb2xsYXBzZSI9PT1lLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhpLHIpfWNvbGxhcHNlVHJlZUl0''@;'; put 'put ''ZW1zKGUscil7ZS5mb3JFYWNoKGk9PntKU09OLnN0cmluZ2lmeShpKSE9PUpTT04uc3RyaW5naWZ5KHIpJiYoaS5leHBhbmRlZD0hMSl9KX11cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKXtXbi52aXlhQXBpLnNlbGVjdGVkQ29sbGVjdGlvbj10aGlzLmNvbGxlY3Rpb24sdGhpcy5lbmRwb2lu''@;'; put 'put ''dC51cmw9dGhpcy5jb2xsZWN0aW9uLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeUNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uKS5zdWJzY3JpYmUoZT0+e3RoaXMuZW5kcG9pbnRMaW5rcz1lLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1lLml0''@;'; put 'put ''ZW1zP2UuaXRlbXM6W10sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLmVuZHBvaW50SnNvbj1lLHRoaXMuZW5kcG9pbnQuc3RhcnQ9ZS5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWUubGltaXR9LGU9Pnt0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExO2xldCByPSJFcnJvciBvY2N1''@;'; put 'put ''cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2UubWVzc2FnZSYmKHI9ZS5tZXNzYWdlKSxlLmVycm9yJiYoZS5lcnJvci5tZXNzYWdlJiYocj1lLmVycm9yLm1lc3NhZ2UpLGUuZXJyb3IucmVtZWRpYXRpb24mJihyPWAke3J9XG4ke2UuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZl''@;'; put 'put ''bnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwscixudWxsLCJIVFRQIEVycm9yIil9KX1vbkpzb25MaW5rQ2xpY2soZSl7dGhpcy5sb2FkVXJsKGUpfW9uSnNvbkNsaWNrKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSwiQSI9PT1lLnNyY0VsZW1lbnQudGFnTmFtZSl7Y29uc3Qgcj1lLnNy''@;'; put 'put ''Y0VsZW1lbnQuaHJlZi5zcGxpdChlLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKHIpfX1vbkJyZWFkY3Vtc0NsaWNrKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSwhZS5zcmNFbGVtZW50LmhyZWYpcmV0dXJuO2NvbnN0IHI9ZS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoZS5zcmNF''@;'; put 'put ''bGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChyKX1jb3B5SnNvbigpe3RoaXMuZW5kcG9pbnRKc29uJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLmVuZHBvaW50SnNvbixudWxsLDIpKX1jb3B5QnJlYWRjcnVtcygpe3RoaXMuZW5kcG9pbnQm''@;'; put 'put ''JnRoaXMuZW5kcG9pbnQudXJsJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmVuZHBvaW50LnVybCl9YXBwbHlRdWVyeVBhcmFtcygpe2NvbnN0IGU9dGhpcy5lbmRwb2ludC5zdGFydCxyPXRoaXMuZW5kcG9pbnQubGltaXQsaT1gPyR7dm9pZCAwIT09ZT8ic3RhcnQ9Iitl''@;'; put 'put ''OiIifSR7dm9pZCAwIT09cj8iJmxpbWl0PSIrcjoiIn1gLGE9YCR7dGhpcy5lbmRwb2ludC51cmwuc3BsaXQoIj8iKVswXX0ke2l9YDt0aGlzLmxvYWRVcmwoYSl9bG9hZFVybChlKXt0aGlzLmVuZHBvaW50TG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5VXJsKGUpLnN1YnNj''@;'; put 'put ''cmliZShyPT57dGhpcy5lbmRwb2ludExpbmtzPXIubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPXIuaXRlbXM/ci5pdGVtczpbXSx0aGlzLmVuZHBvaW50SnNvbj1yLHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMuZW5kcG9pbnQudXJsPWUsdGhpcy5lbmRwb2ludC5zdGFydD1yLnN0YXJ0''@;'; put 'put ''LHRoaXMuZW5kcG9pbnQubGltaXQ9ci5saW1pdH0scj0+e3RoaXMuZW5kcG9pbnRMb2FkaW5nPSExO2xldCBpPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO3IubWVzc2FnZSYmKGk9ci5tZXNzYWdlKSxyLmVycm9yJiYoci5lcnJvci5tZXNzYWdlJiYoaT1yLmVycm9y''@;'; put 'put ''Lm1lc3NhZ2UpLHIuZXJyb3IucmVtZWRpYXRpb24mJihpPWAke2l9XG4ke3IuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsaSxudWxsLCJIVFRQIEVycm9yIil9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24ocil7cmV0''@;'; put 'put ''dXJuIG5ldyhyfHxuKShXZShMdSksV2UocSQpLFdlKEpzKSxXZShTYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLXZpeWEtYXBpLWV4cGxvcmVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRl''@;'; put 'put ''Y2xzOjMzLHZhcnM6MTMsY29uc3RzOltbInNlYXJjaExpbmtzVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsxLCJhcGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hh''@;'; put 'put ''bmdlIiwibmdNb2RlbCJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwi''@;'; put 'put ''c2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNs''@;'; put 'put ''ci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9k''@;'; put 'put ''ZWwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFi''@;'; put 'put ''ZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0''@;'; put 'put ''IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwi''@;'; put 'put ''bmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVk''@;'; put 'put ''IiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbImNsclNtYWxsIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVu''@;'; put 'put ''ZHBvaW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJd''@;'; put 'put ''LFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwicGxheSJdLFsxLCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsImQtYmxvY2siLDMsInNlZ21lbnRMaW5rQ2xpY2tlZCIsImpzb24iLCJleHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpezEmciYmKHJlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwyKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksVGUoNCwi''@;'; put 'put ''QVBJIENvbGxlY3Rpb24iKSxpZSgpLHJlKDUsInNlbGVjdCIsMyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGMpe3JldHVybiB1aShpLmNvbGxlY3Rpb24sYyl8fChpLmNvbGxlY3Rpb249YyksY30pLGt0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkudXBkYXRlU2VsZWN0ZWRD''@;'; put 'put ''b2xsZWN0aW9uKCl9KSxjdCg2LGFCdCwzLDQsIm9wdGdyb3VwIiw0KSxobCg3LCJrZXl2YWx1ZSIpLGllKCkoKSgpLGN0KDgsb0J0LDIsMCwicCIsNSkscmUoOSwiZGl2Iiw2KSxjdCgxMCxzQnQsMSwwLCJjbHItc3Bpbm5lciIsNyksaWUoKSxyZSgxMSwiY2xyLXRyZWUiKSxjdCgxMix1QnQs''@;'; put 'put ''NiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxMyxoQnQsMiwxLCJuZy1jb250YWluZXIiLDkpLGllKCkscmUoMTQsImNsci10cmVlIiksY3QoMTUsZ0J0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTYsdkJ0LDIsMSwibmctY29udGFpbmVyIiw5KSxpZSgpKCkscmUoMTcsImRpdiIsMTApKDE4LCJk''@;'; put 'put ''aXYiLDExKSgxOSwiZGl2IiwxMikoMjAsImRpdiIsMTMpKDIxLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTQpKDIyLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMywiaW5wdXQiLDE1KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oYyl7cmV0dXJuIHVpKGkucmF3SnNvbixjKXx8KGkucmF3''@;'; put 'put ''SnNvbj1jKSxjfSksaWUoKSxyZSgyNCwibGFiZWwiKSxUZSgyNSwiUkFXIEpzb24iKSxpZSgpKCkoKSxyZSgyNiwiYnV0dG9uIiwxNiksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmNvcHlKc29uKCl9KSxWdCgyNywiY2xyLWljb24iLDE3KSxpZSgpKCkscmUoMjgsImg0IiwxOCks''@;'; put 'put ''VGUoMjksIiBBUEkgRXhwbG9yZXIgIiksY3QoMzAseUJ0LDEsMCwiY2xyLXNwaW5uZXIiLDE5KSxpZSgpKCksVnQoMzEsImhyIiwyMCksY3QoMzIsQ0J0LDIzLDksIm5nLWNvbnRhaW5lciIsMjEpLGllKCkoKSksMiZyJiYoYWUoNSksbGkoIm5nTW9kZWwiLGkuY29sbGVjdGlvbiksYWUoKSx5''@;'; put 'put ''ZSgibmdGb3JPZiIsUmMoNywxMSxpLmNvbGxlY3Rpb25zKSksYWUoMikseWUoIm5nSWYiLGkuZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWkuY29sbGVjdGlvbkxvYWRpbmcpLGFlKDIpLHllKCJuZ0lmIixpLmNvbGxlY3Rpb25Mb2FkaW5nKSxhZSgyKSx5ZSgibmdJZiIsaS5lbmRwb2ludExp''@;'; put 'put ''bmtzLmxlbmd0aD4wKSxhZSgpLHllKCJuZ0Zvck9mIixpLmVuZHBvaW50TGlua3MpLGFlKDIpLHllKCJuZ0lmIixpLmVuZHBvaW50SXRlbXMubGVuZ3RoPjApLGFlKCkseWUoIm5nRm9yT2YiLGkuZW5kcG9pbnRJdGVtcyksYWUoNyksbGkoIm5nTW9kZWwiLGkucmF3SnNvbiksYWUoNykseWUo''@;'; put 'put ''Im5nSWYiLGkuZW5kcG9pbnRMb2FkaW5nKSxhZSgyKSx5ZSgibmdJZiIsaS5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbaHMsbWEsUmYsTGYsemwsakYsdmgsSWYsaWwsUXMsUzIsRWgsVWwsUzEscHMsQ2gsencsYjIsUGQsZ0gsbXYsWHcsU2gsYWcsaWcsZUJ0LFBQLG5C''@;'; put 'put ''dCxyQnRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gbn0pKCk7Y29uc3QgTUJ0PW5ldyB3cigiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZh''@;'; put 'put ''Y3Rvcnk6KCk9Pnt9fSk7bGV0IHhCdD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUscixpKXt0aGlzLm5nWm9uZT1lLHRoaXMuZG9jdW1lbnQ9cix0aGlzLndpbmRvdz1pLHRoaXMuY29weVN1YmplY3Q9bmV3IHVyLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2Jz''@;'; put 'put ''ZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShlKXt0aGlzLmNvbmZpZz1lfWNvcHkoZSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFlKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmV9KTtjb25zdCByPXRoaXMuY29weUZyb21Db250''@;'; put 'put ''ZW50KGUpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uocj97Y29udGVudDplLGlzU3VjY2VzczpyfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6ZX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVu''@;'; put 'put ''dC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxlIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5''@;'; put 'put ''RnJvbUlucHV0RWxlbWVudChlLHI9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChlKTtjb25zdCBpPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihyP2U6dm9pZCAwLHRoaXMud2luZG93KSxpJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1''@;'; put 'put ''cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGU9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGUmJmUuZ2V0RGF0YSYmIWUuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoZSxyPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEm''@;'; put 'put ''JiFyLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRo''@;'; put 'put ''aXMud2luZG93KTt0cnl7ci5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9ZTtjb25zdCBpPXRoaXMuY29weUZyb21JbnB1dEVsZW1l''@;'; put 'put ''bnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxpfWRlc3Ryb3koZT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVh''@;'; put 'put ''JiYoZS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoZSl7cmV0dXJuIGUuc2VsZWN0KCksZS5zZXRTZWxlY3Rpb25SYW5nZSgwLGUudmFsdWUubGVuZ3RoKSxlLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVy''@;'; put 'put ''biB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oZSxyKXtlJiZlLmZvY3VzKCksci5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGUscil7Y29uc3QgaT0icnRsIj09PWUuZG9jdW1lbnRFbGVtZW50Lmdl''@;'; put 'put ''dEF0dHJpYnV0ZSgiZGlyIik7bGV0IGE7cmV0dXJuIGE9ZS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGEuc3R5bGUuZm9udFNpemU9IjEycHQiLGEuc3R5bGUuYm9yZGVyPSIwIixhLnN0eWxlLnBhZGRpbmc9IjAiLGEuc3R5bGUubWFyZ2luPSIwIixhLnN0eWxlLnBvc2l0aW9uPSJhYnNv''@;'; put 'put ''bHV0ZSIsYS5zdHlsZVtpPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIsYS5zdHlsZS50b3A9KHIucGFnZVlPZmZzZXR8fGUuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixhLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxhfXB1c2hDb3B5UmVzcG9uc2UoZSl7dGhpcy5jb3B5''@;'; put 'put ''U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChlKX0pfXB1c2hDb3B5UmVwb25zZShlKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8''@;'; put 'put ''fG4pKE9yKEphKSxPcihYcyksT3IoTUJ0LDgpKX0sbi5cdTAyNzVwcm92PXVuKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxFQnQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLHIsaSxhKXt0aGlzLm5nWm9uZT1lLHRoaXMuaG9zdD1y''@;'; put 'put ''LHRoaXMucmVuZGVyZXI9aSx0aGlzLmNsaXBib2FyZFNydj1hLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IFlyLHRoaXMuY2JPbkVycm9yPW5ldyBZcix0aGlzLm9uQ2xpY2s9Yz0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5p''@;'; put 'put ''c1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsYyk6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMu''@;'; put 'put ''Y2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsYyk6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLGMpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlj''@;'; put 'put ''a0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMu''@;'; put 'put ''Y29udGFpbmVyKX1oYW5kbGVSZXN1bHQoZSxyLGkpe2xldCBhPXtpc1N1Y2Nlc3M6ZSxjb250ZW50OnIsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aX07ZT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNj''@;'; put 'put ''ZXNzLmVtaXQoYSl9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChhKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3''@;'; put 'put ''KGV8fG4pKFdlKEphKSxXZSh6aSksV2UoVG8pLFdlKHhCdCkpfSxuLlx1MDI3NWRpcj1Xcih7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06WzAsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVy''@;'; put 'put ''IixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNnOiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn0sc3RhbmRhbG9uZTohMX0pLG59KSgpLFRCdD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9R2koe3R5cGU6bn0pLG4uXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltGYV19KSxufSkoKTt2YXIgQUJ0PWQoMjUwMDEpO2xldCBrQnQ9KCgpPT57Y2xhc3Mgbnt0cmFuc2Zvcm0oZSwuLi5yKXtjb25zdCBpPXBh''@;'; put 'put ''cnNlSW50KHJbMF0pfHwyLGE9Im51bWJlciIhPXR5cGVvZiBlP3BhcnNlSW50KGUpOmU7cmV0dXJuKDAsQUJ0LkMpKGEsaSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9c3Uoe25hbWU6ImNvbnZlcnRT''@;'; put 'put ''aXplIix0eXBlOm4scHVyZTohMCxzdGFuZGFsb25lOiExfSl9fXJldHVybiBufSkoKTtjb25zdCBEQnQ9WyJob3RJbnN0YW5jZSJdLElCdD1bInF1ZXJ5RmlsdGVyIl0sUkJ0PSgpPT5bIiIsIiAiXTtmdW5jdGlvbiBMQnQobix0KXsxJm4mJihyZSgwLCJkaXYiLDU1KSxWdCgxLCJjbHItc3Bp''@;'; put 'put ''bm5lciIsNTYpLGllKCkpfWZ1bmN0aW9uIE9CdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDYyKX1mdW5jdGlvbiBQQnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItaWNvbiIsNjMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKTtjb25zdCBpPUVlKDIpO3JldHVy''@;'; put 'put ''biBpLmxpYnJhcmllc1NlYXJjaD0iIixtdChpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGllKCl9fWZ1bmN0aW9uIEZCdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDU3KSgxLCJkaXYiLDU4KSgyLCJpbnB1dCIsNTksMSksY2koIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKTtyZXR1cm4gdWkoYS5saWJyYXJpZXNTZWFyY2gsaSl8fChhLmxpYnJhcmllc1NlYXJjaD1pKSxtdChpKX0pLGt0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxpZSgpLGN0''@;'; put 'put ''KDQsT0J0LDEsMCwiY2xyLWljb24iLDYwKSg1LFBCdCwxLDAsImNsci1pY29uIiw2MSksaWUoKSgpfWlmKDImbil7Y29uc3QgZT1kYSgzKSxyPUVlKCk7YWUoMiksbGkoIm5nTW9kZWwiLHIubGlicmFyaWVzU2VhcmNoKSxhZSgyKSx5ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg8MSksYWUoKSx5''@;'; put 'put ''ZSgibmdJZiIsZS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEhCdChuLHQpezEmbiYmVnQoMCwiY2xyLWljb24iLDYyKX1mdW5jdGlvbiBOQnQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJjbHItaWNvbiIsNjMpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChlKSxFZSgpO2Nv''@;'; put 'put ''bnN0IGk9ZGEoMyksYT1FZSgyKS4kaW1wbGljaXQsYz1FZSgpO3JldHVybiBpLnZhbHVlPSIiLGEuc2VhcmNoU3RyaW5nPSIiLG10KGMudHJlZU9uRmlsdGVyKGEsInRhYmxlcyIpKX0pLGllKCl9fWZ1bmN0aW9uIFZCdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVl''@;'; put 'put ''LW5vZGUiLDU3KSgxLCJkaXYiLDU4KSgyLCJpbnB1dCIsNjgsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMikuJGltcGxpY2l0O3JldHVybiB1aShhLnNlYXJjaFN0cmluZyxpKXx8KGEuc2VhcmNoU3RyaW5nPWkpLG10KGkpfSksa3QoImtleXVw''@;'; put 'put ''IixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9RWUoMikuJGltcGxpY2l0O3JldHVybiBtdChFZSgpLnRyZWVPbkZpbHRlcihpLCJ0YWJsZXMiKSl9KSxpZSgpLGN0KDQsSEJ0LDEsMCwiY2xyLWljb24iLDYwKSg1LE5CdCwxLDAsImNsci1pY29uIiw2MSksaWUoKSgpfWlmKDImbil7Y29uc3Qg''@;'; put 'put ''ZT1kYSgzKSxyPUVlKDIpLiRpbXBsaWNpdDthZSgyKSx5ZSgiaWQiLCJzZWFyY2hfIityLkxJQlJBUllSRUYpLGxpKCJuZ01vZGVsIixyLnNlYXJjaFN0cmluZyksYWUoMikseWUoIm5nSWYiLGUudmFsdWUubGVuZ3RoPDEpLGFlKCkseWUoIm5nSWYiLGUudmFsdWUubGVuZ3RoPjApfX1mdW5j''@;'; put 'put ''dGlvbiBCQnQobix0KXsxJm4mJlZ0KDAsImNsci1pY29uIiw3NSl9ZnVuY3Rpb24gakJ0KG4sdCl7MSZuJiZWdCgwLCJjbHItaWNvbiIsNzYpfWZ1bmN0aW9uIHpCdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImJ1dHRvbiIsNzEpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtndChl''@;'; put 'put ''KTtjb25zdCBpPUVlKCkubmdWYXIsYT1FZSgpLiRpbXBsaWNpdCxjPUVlKDIpLiRpbXBsaWNpdCxtPUVlKCk7cmV0dXJuIG10KGk/IiI6bS5vblRhYmxlQ2xpY2soYSxjKSl9KSxyaSgxLDcyKSxjdCgyLEJCdCwxLDAsImNsci1pY29uIiw3MykoMyxqQnQsMSwwLCJjbHItaWNvbiIsNzQpLGlp''@;'; put 'put ''KCksVGUoNCksaWUoKX1pZigyJm4pe2NvbnN0IGU9RWUoKS5uZ1ZhcixyPUVlKCkuJGltcGxpY2l0LGk9RWUoMikuJGltcGxpY2l0LGE9RWUoKTticigiZGMtbG9ja2VkLWNvbnRyb2wiLGUpKCJhY3RpdmUiLGEubGliVGFiQWN0aXZlKGkuTElCUkFSWVJFRixyKSksYWUoKSx5ZSgibmdTd2l0''@;'; put 'put ''Y2giLHIuaW5jbHVkZXMoIi1GQyIpKSxhZSgpLHllKCJuZ1N3aXRjaENhc2UiLCEwKSxhZSgpLHllKCJuZ1N3aXRjaENhc2UiLCExKSxhZSgpLE1yKCIgIixyLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIFVCdChuLHQpezEmbiYmKHJlKDAsImNsci10b29sdGlwLWNvbnRlbnQi''@;'; put 'put ''LDc4KSgxLCJzcGFuIiksVGUoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaWUoKSgpKX1mdW5jdGlvbiBXQnQobix0KXsxJm4mJihyaSgwKSxjdCgxLFVCdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc3KSxpaSgpKX1m''@;'; put 'put ''dW5jdGlvbiBaQnQobix0KXtpZigxJm4mJihyZSgwLCJjbHItdG9vbHRpcCIpLGN0KDEsekJ0LDUsOCwiYnV0dG9uIiw3MCkoMixXQnQsMiwwLCJuZy1jb250YWluZXIiLDQzKSxpZSgpKSwyJm4pe2NvbnN0IGU9dC5uZ1ZhcixyPUVlKCkuJGltcGxpY2l0O2FlKCkseWUoIm5nSWYiLHIubGVu''@;'; put 'put ''Z3RoPjApLGFlKCkseWUoIm5nSWYiLGUpfX1mdW5jdGlvbiBZQnQobix0KXtpZigxJm4mJihyZSgwLCJjbHItdHJlZS1ub2RlIiksY3QoMSxaQnQsMywyLCJjbHItdG9vbHRpcCIsNjkpLGllKCkpLDImbil7Y29uc3QgZT10LmluZGV4LHI9RWUoMyk7YWUoKSx5ZSgibmdWYXIiLGUrMT5yLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIEdCdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci10cmVlLW5vZGUiLDY1KSxrdCgiY2xpY2siLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoKS4kaW1wbGljaXQ7cmV0dXJu''@;'; put 'put ''IG10KEVlKCkudHJlZU5vZGVDbGlja2VkKGksYSkpfSksY2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihpKXtndChlKTtjb25zdCBhPUVlKCkuJGltcGxpY2l0O3JldHVybiB1aShhLmV4cGFuZGVkLGkpfHwoYS5leHBhbmRlZD1pKSxtdChpKX0pLHJlKDEsInAiLDY2KSxrdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Z3QoZSk7Y29uc3QgaT1FZSgpLiRpbXBsaWNpdCxhPUVlKCk7cmV0dXJuIGEubGliPWkuTElCUkFSWVJFRixtdChhLmxpYnJhcnlPbkNsaWNrKGkuTElCUkFSWVJFRixpKSl9KSxWdCgyLCJjbHItaWNvbiIsNjcpLFRlKDMpLGllKCksY3QoNCxWQnQsNiw0LCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiw4KSg1LFlCdCwyLDEsImNsci10cmVlLW5vZGUiLDkpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKCkuJGltcGxpY2l0O2JyKCJjbHItZXhwYW5kZWQiLGUuZXhwYW5kZWQpLGxpKCJjbHJFeHBhbmRlZCIsZS5leHBhbmRlZCkseWUoImNsckxvYWRpbmciLGUubG9hZGluZ1Rh''@;'; put 'put ''YmxlcyYmIWUudGFibGVzKSxhZSgzKSxNcigiICIsZS5MSUJSQVJZTkFNRSwiICIpLGFlKCkseWUoIm5nSWYiLGUudGFibGVzKSxhZSgpLHllKCJuZ0Zvck9mIixlLnRhYmxlcyl9fWZ1bmN0aW9uICRCdChuLHQpe2lmKDEmbiYmKHJpKDApLGN0KDEsR0J0LDYsNywiY2xyLXRyZWUtbm9kZSIs''@;'; put 'put ''NjQpLGlpKCkpLDImbil7Y29uc3QgZT10LiRpbXBsaWNpdDthZSgpLHllKCJuZ0lmIiwhZS5oaWRkZW4mJmUuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gS0J0KG4sdCl7MSZuJiYocmUoMCwiZGl2Iiw3OSkoMSwic3BhbiIsODApLFRlKDIsIiBMb2FkaW5nLi4uICIpLGllKCkoKSl9ZnVuY3Rp''@;'; put 'put ''b24gWEJ0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2Iiw4MSkoMSwiZGl2Iiw4MikoMiwiZGl2Iiw4MykoMywiZGl2Iiw4NCkoNCwiYnV0dG9uIiw4NSksVnQoNSwiY2xyLWljb24iLDg2KSxpZSgpLHJlKDYsImgzIiw0OCksVGUoNywiRXJyb3IiKSxpZSgpKCkscmUoOCwi''@;'; put 'put ''ZGl2IiwxNikoOSwicCIpLFRlKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaWUoKSgpLHJlKDExLCJkaXYiLDI3KSgxMiwiYnV0dG9uIiw4Nyksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksVGUoMTMs''@;'; put 'put ''IiBPayAiKSxpZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIHFCdChuLHQpezEmbiYmVnQoMCwiZGl2Iiw4OCl9ZnVuY3Rpb24gSkJ0KG4sdCl7MSZuJiZWdCgwLCJhcHAtcXVlcnkiLG51bGwsMyl9ZnVuY3Rpb24gUUJ0KG4sdCl7MSZuJiYocmUoMCwiZGl2Iiw4OSkoMSwic3BhbiIsOTApLFRlKDIs''@;'; put 'put ''IiBMb2FkaW5nLi4uICIpLGllKCkscmUoMywiZGl2Iiw5MSkoNCwicCIsOTIpLFRlKDUsIkxvYWRpbmcgVGFibGUgVmlld2VyIiksaWUoKSgpKCkpfWZ1bmN0aW9uIGVqdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1pY29uIiwxMTYpLGt0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtndChlKSxFZSgpO2NvbnN0IGk9ZGEoNSk7cmV0dXJuIG10KEVlKDIpLnNlYXJjaFRhYmxlKGkpKX0pLGllKCl9fWZ1bmN0aW9uIHRqdChuLHQpezEmbiYmKHJlKDAsInNwYW4iLDExNyksVGUoMSwiIExvYWRpbmcuLi4gIiksaWUoKSl9ZnVuY3Rpb24gbmp0KG4sdCl7MSZuJiZWdCgwLCJj''@;'; put 'put ''bHItaWNvbiIsMTE4KX1mdW5jdGlvbiByanQobix0KXtpZigxJm4mJihyZSgwLCJzcGFuIiwxMTkpLFRlKDEpLGllKCkpLDImbil7Y29uc3QgZT1FZSgzKTthZSgpLE1yKCIgIixudWxsPT1lLnRhYmxlVGl0bGU/bnVsbDplLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVu''@;'; put 'put ''Y3Rpb24gaWp0KG4sdCl7aWYoMSZuJiYocmUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTIxKSxUZSgxKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoNCk7YWUoKSxNcigiICIsZS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gYWp0KG4sdCl7MSZuJiYocmkoMCksY3QoMSxpanQsMiwxLCJjbHItdG9v''@;'; put 'put ''bHRpcC1jb250ZW50IiwxMjApLGlpKCkpfWZ1bmN0aW9uIG9qdChuLHQpe2lmKDEmbiYmKHJlKDAsInNwYW4iKSxUZSgxKSxobCgyLCJ0aG91c2FuZFNlcGFyYXRvciIpLGllKCkpLDImbil7Y29uc3QgZT1FZSg0KTthZSgpLHNQKCIgKCIsSTkoMiw0LGUubnVtYmVyT2ZSb3dzLCIsIiksIiAi''@;'; put 'put ''LDE9PT1lLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixlLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1lLmZpbHRlckNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBzanQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyaSgwKSxjdCgxLG9qdCwzLDcs''@;'; put 'put ''InNwYW4iLDQzKSxyZSgyLCJjbHItaWNvbiIsMTIyKSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDMpLnJlbG9hZFRhYmxlRGF0YSgpKX0pLGllKCksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMyk7YWUoKSx5ZSgibmdJZiIsbnVsbCE9PWUubnVtYmVyT2ZSb3dz''@;'; put 'put ''KX19ZnVuY3Rpb24gbGp0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmUoMCwiZGl2IiwxMjgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoNSkuZWRpdFRhYmxlKCkpfSksVnQoMSwiY2xyLWljb24iLDEzNCkscmUoMiwic3BhbiIpLFRlKDMsIkVkaXQiKSxp''@;'; put 'put ''ZSgpKCl9fWZ1bmN0aW9uIGNqdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImRpdiIsMTI4KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDUpLmdvVG9MaW5lYWdlKCkpfSksVnQoMSwiY2xyLWljb24iLDEzNSkscmUoMiwic3BhbiIpLFRlKDMsIkxp''@;'; put 'put ''bmVhZ2UiKSxpZSgpKCl9fWZ1bmN0aW9uIHVqdChuLHQpe2lmKDEmbil7Y29uc3QgZT1JbigpO3JlKDAsImNsci1kcm9wZG93bi1tZW51IiwxMjcpKDEsImRpdiIsMTI4KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDQpLm5ld1ZpZXdib3goKSl9KSxWdCgyLCJj''@;'; put 'put ''bHItaWNvbiIsMTI5KSxyZSgzLCJzcGFuIiksVGUoNCwiVmlld2JveGVzIiksaWUoKSgpLGN0KDUsbGp0LDQsMCwiZGl2IiwxMzApKDYsY2p0LDQsMCwiZGl2IiwxMzApLHJlKDcsImRpdiIsMTI4KSxrdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGd0KGUpLG10KEVlKDQpLm9wZW5RYigp''@;'; put 'put ''KX0pLFZ0KDgsImNsci1pY29uIiwxMzEpLHJlKDksInNwYW4iKSxUZSgxMCwiRmlsdGVyIiksaWUoKSgpLHJlKDExLCJkaXYiLDEyOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSg0KS5vcGVuRG93bmxvYWQ9ITApfSksVnQoMTIsImNsci1pY29uIiwxMzIpLHJl''@;'; put 'put ''KDEzLCJzcGFuIiksVGUoMTQsIkRvd25sb2FkIiksaWUoKSgpLHJlKDE1LCJkaXYiLDEyOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChlKSxtdChFZSg0KS5zaG93V2ViUXVlcnkoKSl9KSxWdCgxNiwiY2xyLWljb24iLDEzMykscmUoMTcsInNwYW4iKSxUZSgxOCwiV2ViIFF1''@;'; put 'put ''ZXJ5IFVSTCIpLGllKCkoKSgpfWlmKDImbil7Y29uc3QgZT1FZSg0KTthZSg1KSx5ZSgibmdJZiIsZS50YWJsZUVkaXRFeGlzdHMoKSksYWUoKSx5ZSgibmdJZiIsZS50YWJsZXVyaSl9fWZ1bmN0aW9uIGRqdChuLHQpezEmbiYmKHJlKDAsImNsci1kcm9wZG93biIsMTIzKSgxLCJidXR0b24i''@;'; put 'put ''LDEyNCksVnQoMiwiY2xyLWljb24iLDEyNSksVGUoMywiIG9wdGlvbnMgIiksaWUoKSxjdCg0LHVqdCwxOSwyLCJjbHItZHJvcGRvd24tbWVudSIsMTI2KSxpZSgpKSwyJm4mJnllKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIGhqdChuLHQpe2lmKDEmbiYmKHJlKDAs''@;'; put 'put ''ImRpdiIsMTM2KSgxLCJzcGFuIiksVGUoMiwiRklMVEVSIDogIikscmUoMywiYiIpLFRlKDQpLGllKCkoKSgpKSwyJm4pe2NvbnN0IGU9RWUoMyk7YWUoNCksdnIoZS5xdWVyeVRleHQpfX1mdW5jdGlvbiBmanQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJkaXYiLDk5KSgxLCJz''@;'; put 'put ''ZWN0aW9uIiwxMDApKDIsImZvcm0iLDEwMSkoMywiZGl2IiwxMDIpKDQsImlucHV0IiwxMDMsNCksa3QoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2d0KGUpO2NvbnN0IGk9ZGEoNSk7cmV0dXJuIG10KEVlKDIpLnNlYXJjaFRhYmxlKGkpKX0pLGllKCksY3QoNixlanQsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMTA0KSg3LHRqdCwyLDAsInNwYW4iLDEwNSksaWUoKSxyZSg4LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoOSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMCwiaW5wdXQiLDEwNiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGkpe2d0KGUpO2NvbnN0IGE9RWUoMik7cmV0dXJu''@;'; put 'put ''IHVpKGEuc2VhcmNoTnVtZXJpYyxpKXx8KGEuc2VhcmNoTnVtZXJpYz1pKSxtdChpKX0pLGllKCkscmUoMTEsImxhYmVsIiksVGUoMTIsIk51bWVyaWMiKSxpZSgpKCkoKSgpKCkscmUoMTMsImRpdiIsMTA3KSgxNCwicCIsMTA4KSgxNSwiY2xyLXRvb2x0aXAiLDEwOSkoMTYsImNsci1pY29u''@;'; put 'put ''IiwxMTApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikuZGF0YXNldEluZm89ITApfSksaWUoKSxjdCgxNyxuanQsMSwwLCJjbHItaWNvbiIsMTExKSgxOCxyanQsMiwxLCJzcGFuIiwxMTIpKDE5LGFqdCwyLDAsIm5nLWNvbnRhaW5lciIsNDMpLGllKCksY3Qo''@;'; put 'put ''MjAsc2p0LDMsMSwibmctY29udGFpbmVyIiw0MyksaWUoKSgpLHJlKDIxLCJkaXYiLDExMyksY3QoMjIsZGp0LDUsMSwiY2xyLWRyb3Bkb3duIiwxMTQpLGllKCksY3QoMjMsaGp0LDUsMSwiZGl2IiwxMTUpLGllKCl9aWYoMiZuKXtjb25zdCBlPUVlKDIpO2FlKDQpLHllKCJ0eXBlIixlLnNl''@;'; put 'put ''YXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxhZSgyKSx5ZSgibmdJZiIsIWUuc2VhcmNoTG9hZGluZyksYWUoKSx5ZSgibmdJZiIsZS5zZWFyY2hMb2FkaW5nKSxhZSgzKSxsaSgibmdNb2RlbCIsZS5zZWFyY2hOdW1lcmljKSxhZSg3KSx5ZSgibmdJZiIsbnVsbD09ZS50YWJsZVRpdGxl''@;'; put 'put ''P251bGw6ZS50YWJsZVRpdGxlLmluY2x1ZGVzKCItRkMiKSksYWUoKSx5ZSgibmdJZiIsZS50YWJsZVRpdGxlJiZlLnRhYmxlVGl0bGUubGVuZ3RoPjApLGFlKCkseWUoIm5nSWYiLGUuZHNOb3RlJiZlLmRzTm90ZS5sZW5ndGg+MCksYWUoKSx5ZSgibmdJZiIsZS50YWJsZVRpdGxlJiZlLnRh''@;'; put 'put ''YmxlVGl0bGUubGVuZ3RoPjApLGFlKDIpLHllKCJuZ0lmIixlLnRhYmxlVGl0bGUmJiFlLmFib3J0QWN0aXZlKSxhZSgpLHllKCJuZ0lmIiwiMT0xIiE9PWUucXVlcnlUZXh0JiYhbmwoMTAsUkJ0KS5pbmNsdWRlcyhlLnF1ZXJ5VGV4dCkmJiFlLmFib3J0QWN0aXZlKX19ZnVuY3Rpb24gcGp0''@;'; put 'put ''KG4sdCl7MSZuJiYocmUoMCwiZGl2IiwxMzcpLFZ0KDEsImltZyIsMTM4KSxyZSgyLCJoMyIsMTM5KSxUZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGxpYnJhcnkgIiksaWUoKSgpKX1mdW5jdGlvbiBnanQobix0KXsxJm4mJlZ0KDAsImNsci1zcGlubmVyIiw1Nil9ZnVuY3Rpb24gbWp0KG4sdCl7''@;'; put 'put ''MSZuJiYocmUoMCwiZGl2IiwxNDYpLFZ0KDEsImltZyIsMTQ3KSxyZSgyLCJwIiwxMzkpLFRlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaWUoKSgpKX1mdW5jdGlvbiB2anQobix0KXtpZigxJm4pe2NvbnN0IGU9SW4oKTtyZSgwLCJwIiwxNTApLFRlKDEsIiBObyBsaWJyYXJ5IGlu''@;'; put 'put ''Zm8gZm91bmQuIENsaWNrICIpLHJlKDIsImNsci1pY29uIiwxNTEpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoNCkucmVsb2FkTGliSW5mbygpKX0pLGllKCksVGUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSxpZSgpfX1mdW5jdGlvbiB5anQobix0KXtpZigx''@;'; put 'put ''Jm4mJihyZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFRlKDIsIkVOR0lORToiKSxpZSgpLHJlKDMsInRkIiwxNTMpLFRlKDQpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDUpO2FlKDQpLE1yKCIgIixlLmxpYmluZm9bMF0/ZS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiBfanQo''@;'; put 'put ''bix0KXtpZigxJm4mJihyZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFRlKDIsIkxJQklEOiIpLGllKCkscmUoMywidGQiLDE1MyksVGUoNCksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoNSk7YWUoNCksTXIoIiAiLGUubGliaW5mb1swXT9lLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rp''@;'; put 'put ''b24gYmp0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxUZSgyLCJMSUJOQU1FOiIpLGllKCkscmUoMywidGQiLDE1MyksVGUoNCksaWUoKSgpKSwyJm4pe2NvbnN0IGU9RWUoNSk7YWUoNCksTXIoIiAiLGUubGliaW5mb1swXT9lLmxpYmluZm9bMF0uTElCTkFNRToiIiwi''@;'; put 'put ''ICIpfX1mdW5jdGlvbiB3anQobix0KXtpZigxJm4mJihyZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFRlKDIsIkxJQlNJWkU6IiksaWUoKSxyZSgzLCJ0ZCIsMTUzKSxUZSg0KSxobCg1LCJjb252ZXJ0U2l6ZSIpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDUpO2FlKDQpLE1yKCIgIixlLmxpYmlu''@;'; put 'put ''Zm9bMF0/UmMoNSwxLGUubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBDanQobix0KXtpZigxJm4mJihyZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFRlKDIsIk9XTkVSUzoiKSxpZSgpLHJlKDMsInRkIiwxNTMpLFRlKDQpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDUpO2Fl''@;'; put 'put ''KDQpLE1yKCIgIixlLmxpYmluZm9bMF0/ZS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5jdGlvbiBTanQobix0KXtpZigxJm4mJihyZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFRlKDIsIlBBVEhTOiIpLGllKCkscmUoMywidGQiLDE1MyksVGUoNCksaWUoKSgpKSwyJm4pe2NvbnN0IGU9''@;'; put 'put ''RWUoNSk7YWUoNCksTXIoIiAiLGUubGliaW5mb1swXT9lLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19ZnVuY3Rpb24gTWp0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxUZSgyLCJQRVJNUzoiKSxpZSgpLHJlKDMsInRkIiwxNTMpLFRlKDQpLGllKCkoKSksMiZuKXtj''@;'; put 'put ''b25zdCBlPUVlKDUpO2FlKDQpLE1yKCIgIixlLmxpYmluZm9bMF0/ZS5saWJpbmZvWzBdLlBFUk1TOiIiLCIgIil9fWZ1bmN0aW9uIHhqdChuLHQpe2lmKDEmbiYmKHJlKDAsInRyIikoMSwidGQiLDE1MiksVGUoMiwiU0NIRU1BUzoiKSxpZSgpLHJlKDMsInRkIiwxNTMpLFRlKDQpLGllKCko''@;'; put 'put ''KSksMiZuKXtjb25zdCBlPUVlKDUpO2FlKDQpLE1yKCIgIixlLmxpYmluZm9bMF0/ZS5saWJpbmZvWzBdLlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rpb24gRWp0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxUZSgyLCJUQUJMRV9DTlQ6IiksaWUoKSxyZSgzLCJ0ZCIsMTUz''@;'; put 'put ''KSxUZSg0KSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSg1KTthZSg0KSxNcigiICIsZS5saWJpbmZvWzBdP2UubGliaW5mb1swXS5UQUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gVGp0KG4sdCl7aWYoMSZuJiYocmUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxUZSgyLCJDQVRBTE9HX0NOVDoiKSxp''@;'; put 'put ''ZSgpLHJlKDMsInRkIiwxNTMpLFRlKDQpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDUpO2FlKDQpLE1yKCIgIixlLmxpYmluZm9bMF0/ZS5saWJpbmZvWzBdLkNBVEFMT0dfQ05UOiIiLCIgIil9fWZ1bmN0aW9uIEFqdChuLHQpe2lmKDEmbiYmKHJpKDApLHJlKDEsInRhYmxlIiksY3QoMix5''@;'; put 'put ''anQsNSwxLCJ0ciIsNDMpKDMsX2p0LDUsMSwidHIiLDQzKSg0LGJqdCw1LDEsInRyIiw0MykoNSx3anQsNiwzLCJ0ciIsNDMpKDYsQ2p0LDUsMSwidHIiLDQzKSg3LFNqdCw1LDEsInRyIiw0MykoOCxNanQsNSwxLCJ0ciIsNDMpKDkseGp0LDUsMSwidHIiLDQzKSgxMCxFanQsNSwxLCJ0ciIs''@;'; put 'put ''NDMpKDExLFRqdCw1LDEsInRyIiw0MyksaWUoKSxpaSgpKSwyJm4pe2NvbnN0IGU9RWUoNCk7YWUoMikseWUoIm5nSWYiLCIiIT09ZS5saWJpbmZvWzBdLkVOR0lORSksYWUoKSx5ZSgibmdJZiIsIiIhPT1lLmxpYmluZm9bMF0uTElCSUQpLGFlKCkseWUoIm5nSWYiLCIiIT09ZS5saWJpbmZv''@;'; put 'put ''WzBdLkxJQk5BTUUpLGFlKCkseWUoIm5nSWYiLG51bGwhPT1lLmxpYmluZm9bMF0uTElCU0laRSksYWUoKSx5ZSgibmdJZiIsIiIhPT1lLmxpYmluZm9bMF0uT1dORVJTKSxhZSgpLHllKCJuZ0lmIiwiIiE9PWUubGliaW5mb1swXS5QQVRIUyksYWUoKSx5ZSgibmdJZiIsIiIhPT1lLmxpYmlu''@;'; put 'put ''Zm9bMF0uUEVSTVMpLGFlKCkseWUoIm5nSWYiLCIiIT09ZS5saWJpbmZvWzBdLlNDSEVNQVMpLGFlKCkseWUoIm5nSWYiLG51bGwhPT1lLmxpYmluZm9bMF0uVEFCTEVfQ05UKSxhZSgpLHllKCJuZ0lmIixudWxsIT09ZS5saWJpbmZvWzBdLkNBVEFMT0dfQ05UKX19ZnVuY3Rpb24ga2p0KG4s''@;'; put 'put ''dCl7aWYoMSZuJiYocmUoMCwiZGl2IiwxNDgpLGN0KDEsdmp0LDQsMCwicCIsMTQ5KSgyLEFqdCwxMiwxMCwibmctY29udGFpbmVyIiw0MyksaWUoKSksMiZuKXtjb25zdCBlPUVlKDMpO2FlKCkseWUoIm5nSWYiLGUubGliaW5mby5sZW5ndGg8MSksYWUoKSx5ZSgibmdJZiIsZS5saWJpbmZv''@;'; put 'put ''Lmxlbmd0aD4wKX19ZnVuY3Rpb24gRGp0KG4sdCl7aWYoMSZuKXtjb25zdCBlPUluKCk7cmkoMCkscmUoMSwiZGl2IiwxNDApLFZ0KDIsInNlY3Rpb24iLDEwMCkscmUoMywiZGl2IiwxNDEpKDQsInAiLDkyKSxUZSg1KSxpZSgpLHJlKDYsImNsci1pY29uIiwxMjIpLGt0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZ3QoZSksbXQoRWUoMikucmVsb2FkTGliSW5mbygpKX0pLGllKCkoKSxWdCg3LCJkaXYiLDExMyksaWUoKSxyZSg4LCJkaXYiLDE0MiksY3QoOSxnanQsMSwwLCJjbHItc3Bpbm5lciIsMTQzKSxpZSgpLGN0KDEwLG1qdCw0LDAsImRpdiIsMTQ0KSgxMSxranQsMywy''@;'; put 'put ''LCJkaXYiLDE0NSksaWkoKX1pZigyJm4pe2NvbnN0IGU9RWUoMik7YWUoNSksTXIoIiAiLGUubGliLCIgIiksYWUoNCkseWUoIm5nSWYiLG51bGw9PT1lLmxpYmluZm8pLGFlKCkseWUoIm5nSWYiLG51bGwhPT1lLmxpYmluZm8pLGFlKCkseWUoIm5nSWYiLG51bGwhPT1lLmxpYmluZm8pfX1m''@;'; put 'put ''dW5jdGlvbiBJanQobix0KXsxJm4mJihyZSgwLCJoMyIsMTU3KSxUZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIiksaWUoKSl9ZnVuY3Rpb24gUmp0KG4sdCl7MSZuJiYocmUoMCwiaDMiLDE1NyksVGUoMSwiIE5vIGRhdGEgZm91bmQgZHVlIHRvIHNhcyByZXF1''@;'; put 'put ''ZXN0IGVycm9yICIpLGllKCkpfWZ1bmN0aW9uIExqdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsMTU0KSxWdCgxLCJjbHItaWNvbiIsMTU1KSxjdCgyLElqdCwyLDAsImgzIiwxNTYpKDMsUmp0LDIsMCwiaDMiLDE1NiksaWUoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKDIpLHllKCJuZ0lm''@;'; put 'put ''IixlLm5vRGF0YSksYWUoKSx5ZSgibmdJZiIsZS5ub0RhdGFSZXFFcnIpfX1mdW5jdGlvbiBPanQobix0KXtpZigxJm4mJihyZSgwLCJkaXYiLDE1OCkoMSwiZGl2IiwxNTkpLFZ0KDIsImhvdC10YWJsZSIsMTYwLDUpLGllKCkoKSksMiZuKXtjb25zdCBlPUVlKDIpO2FlKDIpLHllKCJkYXRh''@;'; put 'put ''IixlLmhvdFRhYmxlLmRhdGEpKCJzZXR0aW5ncyIsZS5ob3RUYWJsZVNldHRpbmdzKX19ZnVuY3Rpb24gUGp0KG4sdCl7aWYoMSZuJiYocmUoMCwicCIsMTYxKSxUZSgxKSxWdCgyLCJjb250YWN0LWxpbmsiKSxpZSgpKSwyJm4pe2NvbnN0IGU9RWUoMik7YWUoKSxNcigiIFRvIGRpc3BsYXkg''@;'; put 'put ''bW9yZSB0aGFuICIsZS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIEZqdChuLHQpe2lmKDEmbiYmKHJlKDAsImRpdiIsOTMpLGN0KDEsZmp0LDI0LDExLCJkaXYiLDk0KSgyLHBqdCw0LDAsImRpdiIsOTUpKDMsRGp0''@;'; put 'put ''LDEyLDQsIm5nLWNvbnRhaW5lciIsNDMpKDQsTGp0LDQsMiwiZGl2Iiw5NikoNSxPanQsNCwyLCJkaXYiLDk3KSxyZSg2LCJkaXYiKSxjdCg3LFBqdCwzLDEsInAiLDk4KSxpZSgpKCkpLDImbil7Y29uc3QgZT1FZSgpO2FlKCkseWUoIm5nSWYiLGUudGFibGUpLGFlKCkseWUoIm5nSWYiLCEo''@;'; put 'put ''ZS5saWJ8fGUudGFibGV8fGUubm9EYXRhUmVxRXJyfHxlLm5vRGF0YSkpLGFlKCkseWUoIm5nSWYiLCFlLm5vRGF0YSYmIWUubm9EYXRhUmVxRXJyJiYhZS50YWJsZSYmZS5saWIpLGFlKCkseWUoIm5nSWYiLGUubm9EYXRhfHxlLm5vRGF0YVJlcUVyciksYWUoKSx5ZSgibmdJZiIsIWUubm9E''@;'; put 'put ''YXRhJiYhZS5ub0RhdGFSZXFFcnImJmUudGFibGUpLGFlKDIpLHllKCJuZ0lmIixlLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09ZS5JbmZpbml0eSYmZS5ob3RUYWJsZS5kYXRhJiZlLmhvdFRhYmxlLmRhdGEubGVuZ3RoPmUubGljZW5jZVN0YXRlLnZhbHVlLnZp''@;'; put 'put ''ZXdlcl9yb3dzX2FsbG93ZWQpfX1sZXQga3o9KCgpPT57Y2xhc3Mgbnt1cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl7dGhpcy5ob3RUYWJsZVNldHRpbmdzPXttdWx0aUNvbHVtblNvcnRpbmc6ITAsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6MzAsY29sSGVhZGVyczp0aGlzLmhvdFRhYmxl''@;'; put 'put ''LmNvbEhlYWRlcnMsY29sdW1uczp0aGlzLmhvdFRhYmxlLmNvbHVtbnMsY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLGNvbnRleHRNZW51OnRoaXMuaG90VGFibGUuY29udGV4dE1lbnUsZmlsdGVyczohMCxkcm9wZG93bk1lbnU6dGhpcy5ob3RUYWJsZS5kcm9wZG93bk1lbnUs''@;'; put 'put ''aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LHN0cmV0Y2hIOiJhbGwiLG1vZGlmeUNvbFdpZHRoOnRoaXMubWF4V2lkdGhDaGVrZXIsY2VsbHM6dGhpcy5ob3RUYWJsZS5jZWxscyxtYXhSb3dzOnRoaXMuaG90VGFibGUubWF4Um93cyxtYW51YWxDb2x1bW5SZXNpemU6ITAsYWZ0ZXJHZXRD''@;'; put 'put ''b2xIZWFkZXI6dGhpcy5ob3RUYWJsZS5hZnRlckdldENvbEhlYWRlcixyb3dIZWFkZXJzOnRoaXMuaG90VGFibGUucm93SGVhZGVycyxyb3dIZWFkZXJXaWR0aDp0aGlzLmhvdFRhYmxlLnJvd0hlYWRlcldpZHRoLHJvd0hlaWdodHM6dGhpcy5ob3RUYWJsZS5yb3dIZWlnaHRzLGxpY2Vuc2VL''@;'; put 'put ''ZXk6dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5LGNsYXNzTmFtZToiaHREYXJrIn19Y29uc3RydWN0b3IoZSxyLGksYSxjLG0sQyxQLFksSil7dGhpcy5saWNlbmNlU2VydmljZT1lLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPXIsdGhpcy5zYXNTZXJ2aWNlPWksdGhpcy5yb3V0ZXI9YSx0aGlzLnJv''@;'; put 'put ''dXRlPWMsdGhpcy5ldmVudFNlcnZpY2U9bSx0aGlzLmxvZ2dlclNlcnZpY2U9Qyx0aGlzLmhlbHBlclNlcnZpY2U9UCx0aGlzLmxvY2F0aW9uPVksdGhpcy5jZGY9Six0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IEhnLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVz''@;'; put 'put ''U2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJpPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFi''@;'; put 'put ''b3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVsbCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5z''@;'; put 'put ''d2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMubm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZv''@;'; put 'put ''cm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBoMi5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMuaG90VGFibGVTZXR0aW5ncz17fSx0aGlzLm51bWJlck9mUm93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRh''@;'; put 'put ''dGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9''@;'; put 'put ''e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiY2FsYygxMDB2aCAtIDE4MnB4KSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAscm93SGVhZGVyczpjZT0+''@;'; put 'put ''IiAiLGFmdGVyR2V0Q29sSGVhZGVyOihjZSxmZSxBZSk9PntpZih0aGlzLmhvdEluc3RhbmNlJiYhdGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZCl0cnl7Y29uc3QgSGU9dGhpcy5ob3RJbnN0YW5jZS5jb2xUb1Byb3AoY2UpO0hlJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKEhlKT4tMSYm''@;'; put 'put ''ZmUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksZmUuY2xhc3NMaXN0LmFkZChXbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfWNhdGNoe2ZlLmNsYXNzTGlzdC5hZGQoV24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX1lbHNlIGZl''@;'; put 'put ''LmNsYXNzTGlzdC5hZGQoV24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0scm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7''@;'; put 'put ''Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7''@;'; put 'put ''bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooY2UsZmUsQWUsSGUsWGUscnQpPT57Y29uc3QgZHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBqdCxGdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSYmIXRoaXMuaG90SW5zdGFuY2UuaXNEZXN0cm95ZWQm''@;'; put 'put ''JiF0aGlzLmlzVGFibGVTd2l0Y2hpbmcpe3RyeXtjb25zdCBwbj10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLGduPXRoaXMuaG90SW5zdGFuY2UuY29sVG9Qcm9wKHBuP3BuWzBdWzFdOi0xKTtqdD10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tnbl19Y2F0Y2h7anQ9dm9pZCAw''@;'; put 'put ''fWp0JiYoRnQ9YExBQkVMOiAke2p0Py5sYWJlbH08YnI+VFlQRTogJHtqdD8udHlwZX08YnI+TEVOR1RIOiAke2p0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHtqdD8uZm9ybWF0fWApfXJldHVybiBkdC5pbm5lckhUTUw9RnQsZHR9fX19fSx0aGlzLmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy5pc1RhYmxlU3dpdGNoaW5nPSExLHRoaXMuc3dpdGNoaW5nVGltZW91dD1udWxsLHRoaXMubGFzdFNldHVwVGltZT0wLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob29rc0F0dGFjaGVkPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PVduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1duLnZpZXdlci5jdXJyZW50U2VsZWN0''@;'; put 'put ''aW9uXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoV24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNj''@;'; put 'put ''cmliZShlPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWUsdGhpcy51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNv''@;'; put 'put ''bXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFibGUoZSl7dmFyIHI9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtyLnNlYXJjaExvYWRpbmc9ITA7bGV0IGk9ZS52YWx1ZSxhPXIubGliKyIuIityLnRhYmxlLGM9cGFyc2VJbnQoci5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmls''@;'; put 'put ''dGVySWQpfHwwO3lpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGksci5zZWFyY2hOdW1lcmljLGEsYykudGhlbihtPT57bS5zYXNwYXJhbXN8fG0udmlld0RhdGE/KHIuaG90VGFibGUuZGF0YT1tLnZpZXdkYXRhLHIuJGRhdGFGb3JtYXRzPW0uJHZpZXdkYXRhLHIuZHNt''@;'; put 'put ''ZXRhPW0uZHNtZXRhLHIudmVyc2lvbnM9bS52ZXJzaW9uc3x8W10sci5zZXREU05vdGUoKSxyLm51bWJlck9mUm93cz1tLnNhc3BhcmFtc1swXS5OT0JTLHIucXVlcnlUZXh0PW0uc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHIuaGVhZGVyUGtzPW0uc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5z''@;'; put 'put ''cGxpdCgiICIpLDA9PT1yLmhvdFRhYmxlLmRhdGEubGVuZ3RoP3Iubm9EYXRhPSEwOihyLm5vRGF0YT0hMSxyLnRhYmxlRmxhZz0hMSxyLnNldHVwSG90KCkpKTpyLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChtPT57ci5sb2dnZXJTZXJ2aWNlLmVycm9yKG0pfSksci5zZWFyY2hMb2FkaW5n''@;'; put 'put ''PSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZpZXdEYXRhKHRoaXMudXJsRmlsdGVyUGt8fDApfXJlbG9hZExpYkluZm8oKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2UubGliaW5mbz1udWxsLGUuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGUubGliKS50''@;'; put 'put ''aGVuKGZ1bmN0aW9uKCl7dmFyIHI9WihmdW5jdGlvbiooaSl7ZS5saWJpbmZvPWkubGliaW5mbyxXbi52aWV3ZXIubGliaW5mbz1lLmxpYmluZm87Y29uc3QgYT1lLmxpYnJhcmllcy5maW5kKGM9PmMuTElCUkFSWVJFRj09PWUubGliKTthJiYoYS5saWJpbmZvPWUubGliaW5mbyl9KTtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oaSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxyPT57ZS5sb2dnZXJTZXJ2aWNlLmVycm9yKHIpLG51bGw9PT1lLmxpYmluZm8mJihlLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGUpe3RoaXMubGlicmFyaWVzPXRoaXMubGlicmFyaWVzLmZpbHRl''@;'; put 'put ''cihpPT4tMSE9PWkuTElCUkFSWU5BTUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2FkRGF0YSgpe2xldCBlPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHI9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaT10aGlzLnNhc1NlcnZp''@;'; put 'put ''Y2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBDLGE9IiZ0eXBlPSIrdGhpcy5kb3dubG9hZEZvcm1hdCxjPSImdGFibGU9Iit0aGlzLnRhYmxlVGl0bGUsbT0iU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNv''@;'; put 'put ''bnRleHROYW1lfWA6IiI7Qz10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGUraSsiLz9fcHJvZ3JhbT0iK3IrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0''@;'; put 'put ''cmF3ZGF0YSIrYStjK20rIiZmaWx0ZXI9IitDKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1kb3dubG9hZERETCgpe2xldCBlPXRoaXMubGliLHI9dGhpcy50YWJsZSxpPXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGE9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsYz10''@;'; put 'put ''aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBtPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oYSttKyIvP19wcm9ncmFtPSIrYysiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtyfSZsaWJyZWY9JHtlfSZmbGF2b3VyPSR7aX0keyJTQVNW''@;'; put 'put ''SVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIn1gKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhlKXtlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXQuc2VsZWN0''@;'; put 'put ''KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlzdHMoKXtsZXQgZT17fTtlPVduLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCByPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saT10aGlzLmxpYlRhYi5z''@;'; put 'put ''cGxpdCgiLiIpWzBdO3JldHVybiEhZVtpXSYmZVtpXS5pbmNsdWRlcyhyKX1nb1RvTGluZWFnZSgpe2xldCByPWAvdmlldy9saW5lYWdlLyR7dGhpcy50YWJsZXVyaS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyKX1zaG93V2ViUXVlcnkoKXts''@;'; put 'put ''ZXQgZTt0aGlzLndlYlF1ZXJ5PSEwLGU9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgcj13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+MD8iOiIrd2luZG93''@;'; put 'put ''LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaT10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBjPWAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7cn0vJHtpfS8/X3Byb2dyYW09JHt0aGlzLnNhc2pzQ29uZmlnLmFw''@;'; put 'put ''cExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEmdHlwZT1XRUIke3RoaXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxlPSR7dGhpcy50YWJsZVRpdGxlfSR7IiZmaWx0ZXI9IitlfWA7dGhpcy53ZWJRdWVyeVRleHQ9Yy5yZXBsYWNlKC8gL2dpbSwiJTIwIil9Y29weVRvQ2xp''@;'; put 'put ''cCgpe25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMud2ViUXVlcnlUZXh0KX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31jaGVja0V4cGFu''@;'; put 'put ''ZChlKXt9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoZSxyKXtlLmZvckVhY2goaT0+e2kuTElCUkFSWVJFRiE9PXIuTElCUkFSWVJFRiYmKGkuZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9dHJlZU5vZGVDbGlja2VkKGUscil7IkNvbGxhcHNlIj09PWUudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVz''@;'; put 'put ''LHIpfWxpYnJhcnlFeHBhbmRlZENoYW5nZShlLHIpe2UmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMscil9bGlicmFyeU9uQ2xpY2soZSxyLGkpe3ZhciBhPXRoaXM7cmV0dXJuIFooZnVuY3Rpb24qKCl7aWYoci50YWJsZXM/ci5leHBhbmRlZD0hIWl8fCFyLmV4''@;'; put 'put ''cGFuZGVkOnlpZWxkIGEuc2VsZWN0VGFibGUoZSwhMSxyKSxyLmV4cGFuZGVkKXthLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IGM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NlYXJjaF8ke3IuTElCUkFSWVJFRn1gKTtjJiZjLmZvY3VzKCksciYmci5saWJpbmZvJiYoYS5saWJpbmZvPXIu''@;'; put 'put ''bGliaW5mbyksYS5saWImJmEudGFibGUmJiFpP2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+e2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGli''@;'; put 'put ''XSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KTphLmxpYiYmIWEudGFibGUmJmEubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9kYXRhLyIrYS5saWIpfWEuY29sbGFwc2VMaWJyYXJ5SXRlbXMoYS5saWJyYXJpZXMscil9KSgpfW9uVGFibGVDbGljayhlLHIpe3RoaXMu''@;'; put 'put ''aXNUYWJsZVN3aXRjaGluZ3x8KHRoaXMuc3dpdGNoaW5nVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuc3dpdGNoaW5nVGltZW91dCksdGhpcy5zd2l0Y2hpbmdUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmxpYj1yLkxJQlJBUllSRUYsdGhpcy50YWJsZT1lLHRoaXMuc2VsZWN0TGli''@;'; put 'put ''VGFibGUoZSksdGhpcy52aWV3RGF0YSgwKX0sNTApKX1zZWxlY3RUYWJsZShlLHIsaSl7dmFyIGE9dGhpcztyZXR1cm4gWihmdW5jdGlvbiooKXtpLmxvYWRpbmdUYWJsZXM9ITAsYS50YWJsZT0hMSxhLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWU/V24udmll''@;'; put 'put ''d2VyLnRhYmxlc1NldCYmcj8oYS5hYm9ydEFjdGl2ZT0hMSxhLnRhYmxlRGlzYWJsZT0hMSxhLnRhYmxlcz1Xbi52aWV3ZXIudGFibGVzLGEubGliaW5mbz1Xbi52aWV3ZXIubGliaW5mbyk6KGEubGliaW5mbz1udWxsLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZSkudGhl''@;'; put 'put ''bihjPT57YS5hYm9ydEFjdGl2ZT0hMSxhLnRhYmxlRGlzYWJsZT0hMTtsZXQgbT1jLm1wdGFibGVzLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gQy5NRU1OQU1FfSk7YS5saWJpbmZvPWMubGliaW5mb3x8W10sYS50YWJsZXM9bSxpJiYoaS50YWJsZXM9bSxpLmxpYmluZm89YS5saWJpbmZvKSxX''@;'; put 'put ''bi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLFduLnZpZXdlci5saWJyYXJ5PWEubGliLFduLnZpZXdlci50YWJsZXM9YS50YWJsZXMsV24udmlld2VyLmxpYmluZm89YS5saWJpbmZvLFduLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaChjPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9y''@;'; put 'put ''KGMpLGEuYWJvcnRBY3RpdmU9ITAsYS5ub0RhdGE9ITAsYS50YWJsZVRpdGxlPSIiLGEudGFibGVEaXNhYmxlPSEwfSkpOmEudGFibGVEaXNhYmxlPSEwLFduLnZpZXdlci5saWJyYXJ5PWEubGliLHJ8fGEuY2xlYXJHbG9iYWxzRmlsdGVyKCksaS5sb2FkaW5nVGFibGVzPSExLGkuZXhwYW5k''@;'; put 'put ''ZWQ9IWkuZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGUscil7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09ZT8odGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsV24udmlld2VyLnRhYmxlPWUs''@;'; put 'put ''cnx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtXbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLFduLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsV24udmlld2VyLmZpbHRlci5ncm91''@;'; put 'put ''cExvZ2ljPSIiLFduLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxXbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sV24udmlld2VyLmZpbHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShlLHIpe3JldHVybiEhdGhpcy5saWJUYWImJmUrIi4iK3I9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoZSxy''@;'; put 'put ''KXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGUscil9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxXbi52aWV3ZXIubGlicmFyaWVzU2Vh''@;'; put 'put ''cmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShlKXt2YXIgcj10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2xldCBpO2lmKHIuaXNUYWJsZVN3aXRj''@;'; put 'put ''aGluZz0hMCxyLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlwZW9mIHIubGliRGF0YXNldD4idSIpaT1yLmxpYisiLiIrci50YWJsZTtlbHNlIGlmKHR5cGVvZiByLmxpYj4idSImJnR5cGVvZiByLnRhYmxlPiJ1Iil7bGV0IG09W107aWYobT1yLmxpYkRhdGFzZXQuc3BsaXQoIi4iKSxXbi52aWV3''@;'; put 'put ''ZXIuc3RhcnR1cFNldD9yLmxpYnJhcmllcz1Xbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIHIuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihDPT57ci5saWJyYXJpZXM9Qy5zYXNsaWJzfSkuY2F0Y2goQz0+e3IubG9nZ2VyU2VydmljZS5lcnJvcihDKX0pLHIubGliPW1bMF0sV24u''@;'; put 'put ''dmlld2VyLnN0YXJ0dXBTZXQpci50YWJsZXM9V24udmlld2VyLnRhYmxlcztlbHNle2xldCBDPXIubGlicmFyaWVzLmZpbmQoUD0+UC5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1yLmxpYi50b0xvd2VyQ2FzZSgpKTt5aWVsZCByLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKHIubGli''@;'; put 'put ''KS50aGVuKFA9PntyLnRhYmxlcz1QLm1wdGFibGVzLm1hcChmdW5jdGlvbihZKXtyZXR1cm4gWS5NRU1OQU1FfSksQy50YWJsZXM9ci50YWJsZXMsV24udmlld2VyLmxpYnJhcmllcz1yLmxpYnJhcmllcyxXbi52aWV3ZXIudGFibGVzPXIudGFibGVzLFduLnZpZXdlci5zdGFydHVwU2V0PSEw''@;'; put 'put ''fSkuY2F0Y2goUD0+e3IubG9nZ2VyU2VydmljZS5lcnJvcihQKX0pfXIudGFibGU9bVsxXSxyLnRhYmxlRmxhZz0hMSxpPXIubGliRGF0YXNldCxyLmxpYlRhYj1pfWVsc2UgV24udmlld2VyLnN0YXJ0dXBTZXQ/ci5saWJyYXJpZXM9V24udmlld2VyLmxpYnJhcmllczp5aWVsZCByLnNhc1N0''@;'; put 'put ''b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4obT0+e3IubGlicmFyaWVzPW0uc2FzbGlic30pLmNhdGNoKG09PntyLmxvZ2dlclNlcnZpY2UuZXJyb3IobSl9KSx0eXBlb2Ygci50YWJsZTwidSImJihXbi52aWV3ZXIuc3RhcnR1cFNldD9yLnRhYmxlcz1Xbi52aWV3ZXIudGFibGVzOnlpZWxk''@;'; put 'put ''IHIuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoci5saWIpLnRoZW4obT0+e3IudGFibGVzPW0ubXB0YWJsZXMubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBDLk1FTU5BTUV9KX0pLmNhdGNoKG09PntyLmxvZ2dlclNlcnZpY2UuZXJyb3IobSksci5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9k''@;'; put 'put ''YXRhIl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSksci50YWJsZUZsYWc9ITEsaT1yLmxpYisiLiIrci50YWJsZSxyLnRhYmxlVGl0bGU9aSxyLmxpYlRhYj1pKTtyLnJvdXRlci51cmwuc3BsaXQoIi8iKS5sZW5ndGg+MyYmaSYmKHlpZWxkIHIuc2FzU3RvcmVTZXJ2aWNl''@;'; put 'put ''LnZpZXdEYXRhKGksZSkudGhlbihtPT57aWYobS5xdWVyeS5sZW5ndGg+MCYmInZpZXciPT09V24ucm9vdFBhcmFtJiYwPT09V24udmlld2VyLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKFduLnZpZXdlci5maWx0ZXIucXVlcnk9ci5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShtLnF1ZXJ5KSxX''@;'; put 'put ''bi52aWV3ZXIuZmlsdGVyLmxpYmRzPXIucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxyLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJ2aWV3ZXIiLG0uY29scykpLHIuYWJvcnRBY3RpdmU9ITEsci5maWx0ZXJDb2xzPW0uY29scyxvYWUoci5maWx0''@;'; put 'put ''ZXJDb2xzLFtdLG0uJHZpZXdkYXRhKSxyLm51bWJlck9mUm93cz1tLnNhc3BhcmFtc1swXS5OT0JTLHIuaGVhZGVyUGtzPW0uc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLCJTQVM5Ij09PXIuc2FzanNDb25maWcuc2VydmVyVHlwZSl7bGV0IFA9bS5zYXNwYXJhbXNbMF0uVEFC''@;'; put 'put ''TEVVUkk7UCYmUC5sZW5ndGg+MCYmKHIudGFibGV1cmk9UCl9aWYoci5ob3RUYWJsZS5kYXRhPW0udmlld2RhdGEsci4kZGF0YUZvcm1hdHM9bS4kdmlld2RhdGEsci5kc21ldGE9bS5kc21ldGEsci52ZXJzaW9ucz1tLnZlcnNpb25zfHxbXSxyLnNldERTTm90ZSgpLHIucXVlcnlUZXh0PW0u''@;'; put 'put ''c2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULG0udmlld2RhdGEmJm0udmlld2RhdGEubGVuZ3RoPjApe2xldCBQPVtdLFk9W107Zm9yKGxldCBKIGluIG0udmlld2RhdGFbMF0pSiYmWS5wdXNoKEopO2ZvcihsZXQgSj0wO0o8WS5sZW5ndGg7SisrKVAucHVzaCh7ZGF0YTpZW0pdfSk7ci5ob3RU''@;'; put 'put ''YWJsZS5jb2xIZWFkZXJzPVksci5ob3RUYWJsZS5jb2x1bW5zPVB9ZWxzZSByLmhvdFRhYmxlLmNvbEhlYWRlcnM9W10sci5ob3RUYWJsZS5jb2x1bW5zPVtdO3IuaG90VGFibGUuY2VsbHM9KCk9Pih7cmVhZE9ubHk6ITB9KSxyLnVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKSxyLnRhYmxlRmxh''@;'; put 'put ''Zz0hMTtsZXQgQz1bXTtDPWkuc3BsaXQoIi4iKSxyLmxpYj1DWzBdLHIudGFibGU9Q1sxXSwwPT09ci5ob3RUYWJsZS5kYXRhLmxlbmd0aD8oci5ub0RhdGE9ITAsci50YWJsZUZsYWc9ITApOihyLm5vRGF0YT0hMSxyLnRhYmxlRmxhZz0hMSksci5ub0RhdGFSZXFFcnI9ITF9KS5jYXRjaCht''@;'; put 'put ''PT57ci5sb2dnZXJTZXJ2aWNlLmVycm9yKG0pLHIuYWJvcnRBY3RpdmU9ITAsci5ub0RhdGFSZXFFcnI9ITB9KSksci5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZpJiZyLnJvdXRlci5uYXZpZ2F0ZSgwIT09ZT9bIi92aWV3L2RhdGEvIitpKyIvIitlXTpbIi92aWV3L2RhdGEvIitp''@;'; put 'put ''XSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7bGV0IGE9ci50YWJsZSxjPXIubGlicmFyaWVzLmZpbmQobT0+bS5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1yLmxpYi50b0xvd2VyQ2FzZSgpKTtjPyhXbi52aWV3ZXIubGlicmFyaWVzLmxlbmd0aD4wJiYoci5saWJyYXJp''@;'; put 'put ''ZXM9V24udmlld2VyLmxpYnJhcmllcyxyLmxpYnJhcmllc1NlYXJjaD1Xbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoKSxyLmxpYnJhcnlPbkNsaWNrKHIubGliLGMsITApKTpyLmxpYmluZm89W10sci50YWJsZT1hfHxyLnRhYmxlLHIubGlicmFyaWVzJiZyLmhlbHBlclNlcnZpY2UuZGlzcGxh''@;'; put 'put ''eUxpYnJhcmllcyhyLmxpYnJhcmllcyksci5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZyLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxyLmxvYWRpbmdUYWJsZVZpZXc9ITEsc2V0VGltZW91dCgoKT0+eyFyLm5vRGF0YSYmIXIubm9EYXRhUmVxRXJyJiZpJiZyLnNldHVwSG90''@;'; put 'put ''KCl9LDUwKSxzZXRUaW1lb3V0KCgpPT57ci5pc1RhYmxlU3dpdGNoaW5nPSExfSwzMDApLHNldFRpbWVvdXQoKCk9PntyLmZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl9LDUwMCksci5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgbT1kb2N1bWVudC5nZXRFbGVt''@;'; put 'put ''ZW50QnlJZCgiaG90SW5zdGFuY2UiKTttJiYobS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEM9PntzZXRUaW1lb3V0KCgpPT57bGV0IFA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtQJiZQLmNsaWNrKCl9LDEwMCl9KSxyLmhvdElu''@;'; put 'put ''c3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMCl9LDFlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGUscil7cmV0dXJuIGU+MjAwPzIwMDplfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlz''@;'; put 'put ''LmxpYisiLiIrdGhpcy50YWJsZSx0aGlzLmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2Uuc3VibWl0TG9hZGluZz0hMDtsZXQgcj1bXSxpPVtdO2lmKHR5cGVvZiBlLmNsYXVzZXM+InUiKXJldHVybiBlLm51bGxWYXJpYWJsZXM9ITAs''@;'; put 'put ''dm9pZChlLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgYT1lLmNsYXVzZXMucXVlcnlPYmo7aWYoYVswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Xbi5yb290UGFyYW0mJihXbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sV24udmlld2VyLmZpbHRlci5xdWVyeT1bXSxXbi52''@;'; put 'put ''aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgZS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrZS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgYz0wO2M8YS5sZW5ndGg7YysrKXtjb25zdCBtPWFbY10uZWxlbWVudHM7cj1tLmZp''@;'; put 'put ''bHRlcihmdW5jdGlvbihDKXtyZXR1cm4gbnVsbD09PUMudmFyaWFibGV9KSxyLmxlbmd0aCYmaS5wdXNoKG0pfX1pZihpLmxlbmd0aClyZXR1cm4gZS5udWxsVmFyaWFibGVzPSEwLHZvaWQoZS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgYT17Z3JvdXBMb2dpYzplLmNsYXVzZXMuZ3JvdXBM''@;'; put 'put ''b2dpYyxmaWx0ZXJHcm91cHM6W119O2UuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKG09Pntjb25zdCBDPXtmaWx0ZXJDbGF1c2VzOltdfTttLmVsZW1lbnRzLmZvckVhY2goUD0+e0MuZmlsdGVyQ2xhdXNlcy5wdXNoKGUuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoUCkpfSksQy5jbGF1c2VM''@;'; put 'put ''b2dpYz1tLmNsYXVzZUxvZ2ljLGEuZmlsdGVyR3JvdXBzLnB1c2goZS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShDKSl9KTtjb25zdCBjPWUuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSk7eWllbGQgZS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGUubGliZHMs''@;'; put 'put ''YykudGhlbihtPT57ZS5xdWVyeVRleHQ9bS5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IEM9bS5yZXN1bHRbMF0uRklMVEVSX1JLO2Uucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2UubGliZHMrIi8iK0NdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxlLnZpZXdE''@;'; put 'put ''YXRhKEMpLGUuZmlsdGVyPSExfSkuY2F0Y2gobT0+e2UubG9nZ2VyU2VydmljZS5lcnJvcihtKX0pLGUuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoZSl7dm9p''@;'; put 'put ''ZCAwIT09ZS5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHtlLkxPQURfUkVGfWBdKX1zZXREU05vdGUoKXtjb25zdCBlPXRoaXMuZHNtZXRhLmZpbmQoYT0+Ik5PVEVTIj09PWEuTkFNRSkscj10aGlzLmRzbWV0YS5maW5kKGE9PiJERF9MT05HREVTQyI9PT1hLk5B''@;'; put 'put ''TUUpLGk9dGhpcy5kc21ldGEuZmluZChhPT4iRERfU0hPUlRERVNDIj09PWEuTkFNRSk7dGhpcy5kc05vdGU9ZSYmZS5WQUxVRT9lLlZBTFVFOnImJnIuVkFMVUU/ci5WQUxVRTppJiZpLlZBTFVFP2kuVkFMVUU6IiJ9Y2xlYW51cEhvdEluc3RhbmNlKCl7aWYodGhpcy5ob3RJbnN0YW5jZSYm''@;'; put 'put ''IXRoaXMuaG90SW5zdGFuY2UuaXNEZXN0cm95ZWQpdHJ5e3RoaXMuaG90SW5zdGFuY2UuZGVzdHJveSgpfWNhdGNoKGUpe2NvbnNvbGUud2FybigiRXJyb3IgZGVzdHJveWluZyBIYW5kc29udGFibGUgaW5zdGFuY2U6IixlKX10aGlzLmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob29rc0F0dGFj''@;'; put 'put ''aGVkPSExfXNldHVwSG90KCl7Y29uc3QgZT1EYXRlLm5vdygpO2lmKCEoZS10aGlzLmxhc3RTZXR1cFRpbWU8NTAwKSYmKHRoaXMubGFzdFNldHVwVGltZT1lLCF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRoaXMubGliRGF0YXNldCkpe2lmKCghdGhpcy5ob3RJbnN0YW5jZXx8dGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZS5pc0Rlc3Ryb3llZCkmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVDb21wb25lbnQ/LmhvdEluc3RhbmNlKSx0aGlzLmhvdEluc3RhbmNlJiYhdGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZClyZXR1cm4gdm9pZCB0aGlzLmNvbmZpZ3VyZUhvdEluc3RhbmNlKCk7''@;'; put 'put ''c2V0VGltZW91dCgoKT0+e3RoaXMuaXNUYWJsZVN3aXRjaGluZ3x8dGhpcy5sb2FkaW5nVGFibGVWaWV3fHwhdGhpcy5saWJEYXRhc2V0fHwodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlQ29tcG9uZW50Py5ob3RJbnN0YW5jZSx0aGlzLmNvbmZpZ3VyZUhvdEluc3RhbmNlKCkpfSwy''@;'; put 'put ''NTApfX1jb25maWd1cmVIb3RJbnN0YW5jZSgpeyF0aGlzLmhvdEluc3RhbmNlfHx0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkfHwodGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1vZGlmeUNvbFdpZHRoOihlLHIpPT5lPjUw''@;'; put 'put ''MD81MDA6ZSxhZnRlckdldENvbEhlYWRlcjooZSxyKT0+e2lmKHRoaXMuaG90SW5zdGFuY2UmJiF0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkKXRyeXtjb25zdCBpPXRoaXMuaG90SW5zdGFuY2UuY29sVG9Qcm9wKGUpO2kmJnRoaXMuaGVhZGVyUGtzLmluZGV4T2YoaSk+LTEmJnIuY2xh''@;'; put 'put ''c3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksci5jbGFzc0xpc3QuYWRkKFduLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9Y2F0Y2h7ci5jbGFzc0xpc3QuYWRkKFduLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9ZWxzZSByLmNsYXNzTGlz''@;'; put 'put ''dC5hZGQoV24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSx0aGlzLmhvb2tzQXR0YWNoZWR8fCh0aGlzLmhvdEluc3RhbmNlLmFkZEhvb2soImFmdGVyUmVuZGVyIiwoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0pLHRoaXMuaG90SW5zdGFuY2UuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJDaGFuZ2UiLCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTApfSksdGhpcy5ob29rc0F0dGFjaGVkPSEwKSx0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpKX1sb2FkV2l0aFBhcmFtZXRlcnMoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1''@;'; put 'put ''bmN0aW9uKigpe2Uuc3dpdGNoRmxhZz0hMCxlLnRhYmxlVGl0bGU9ZS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtfHwwLGUudXJsRmlsdGVyUGs9cGFyc2VJbnQoZS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGk9ZS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMu''@;'; put 'put ''bGliTWVtO2UubGliRGF0YXNldD1pLGkuaW5jbHVkZXMoIi4iKXx8KGUubGliPWkpLHlpZWxkIGUudmlld0RhdGEoZS51cmxGaWx0ZXJQayksZS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2UudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57ZS50YWJsZUZsYWc9ITF9LDEyMDAp''@;'; put 'put ''fSkoKX1sb2FkV2l0aG91dFBhcmFtZXRlcnMoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2Uuc3dpdGNoRmxhZz0hMSxlLmxpYnJhcmllc0xvYWRpbmc9ITAsV24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2UubGlicmFyaWVzPVduLnZpZXdlci5saWJyYXJp''@;'; put 'put ''ZXMsZS5saWJyYXJpZXNTZWFyY2g9V24udmlld2VyLmxpYnJhcmllc1NlYXJjaCxlLmxpYj1Xbi52aWV3ZXIubGlicmFyeSxlLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxlLmxpYnJhcmllc0xvYWRpbmc9ITEsZS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZS5saWJyYXJpZXMp''@;'; put 'put ''fSwxMDApOihlLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBlLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4ocj0+e2UubGlicmFyaWVzPXIuc2FzbGlicyxXbi52aWV3ZXIubGlicmFyaWVzPWUubGlicmFyaWVzLFduLnZpZXdlci5zdGFydHVwU2V0PSEwLGUubGlicmFyaWVzTG9hZGlu''@;'; put 'put ''Zz0hMSxlLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhlLmxpYnJhcmllcyl9KS5jYXRjaChyPT57ZS5sb2dnZXJTZXJ2aWNlLmVycm9yKHIpLGUubGlicmFyaWVzTG9hZGluZz0hMSxlLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgo''@;'; put 'put ''KT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMWUzKX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUYWJsZVN3aXRjaGluZz0hMCx0aGlzLnN3aXRjaGluZ1RpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5zd2l0Y2hpbmdUaW1lb3V0KSx0aGlzLnN3aXRjaGluZ1RpbWVvdXQ9bnVsbCks''@;'; put 'put ''dGhpcy5jbGVhbnVwSG90SW5zdGFuY2UoKSx0aGlzLmFyaWFPYnNlcnZlciYmKHRoaXMuYXJpYU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmFyaWFPYnNlcnZlcj12b2lkIDApLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWwp''@;'; put 'put ''LHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWw9dm9pZCAwKX1maXhBcmlhQWNjZXNzaWJpbGl0eSgpe2NvbnN0IGU9KCk9Pntkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaHQtd3JhcHBlciwgLnd0SG9sZGVyLCBbaWRePSJodF8iXScpLmZvckVhY2goUD0+e1AucmVtb3ZlQXR0cmlidXRlKCJy''@;'; put 'put ''b2xlIiksUC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSxQLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIpLFAucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSk7Y29uc3QgaT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0idHJl''@;'; put 'put ''ZWdyaWQiXScpLGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9InByZXNlbnRhdGlvbiJdJyk7aS5mb3JFYWNoKFA9PntQLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLFAucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IiksUC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY29s''@;'; put 'put ''Y291bnQiKSxQLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiKX0pLGEuZm9yRWFjaChQPT57UC5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdLCBbb25jbGlja10sIFtjb250ZW50ZWRpdGFibGVdIikubGVu''@;'; put 'put ''Z3RoPjAmJlAucmVtb3ZlQXR0cmlidXRlKCJyb2xlIil9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbYXJpYS1yb3djb3VudD0iLTEiXScpLmZvckVhY2goUD0+e1AucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50Iil9KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJ0YWJs''@;'; put 'put ''ZSIpLmZvckVhY2goUD0+e1AuZ2V0QXR0cmlidXRlKCJyb2xlIil8fFAuc2V0QXR0cmlidXRlKCJyb2xlIiwidGFibGUiKSxQLnF1ZXJ5U2VsZWN0b3JBbGwoInRoIikuZm9yRWFjaChKPT57Si5nZXRBdHRyaWJ1dGUoInNjb3BlIil8fEouc2V0QXR0cmlidXRlKCJzY29wZSIsImNvbCIpfSl9''@;'; put 'put ''KSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbY29udGVudGVkaXRhYmxlXSIpLmZvckVhY2goUD0+e2lmKCFQLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpJiYhUC5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpKXtj''@;'; put 'put ''b25zdCBZPVAudGV4dENvbnRlbnQ/LnRyaW0oKTtZJiZQLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsWSl9fSl9O2UoKSxzZXRUaW1lb3V0KGUsMTAwKSxzZXRUaW1lb3V0KGUsNTAwKSxzZXRUaW1lb3V0KGUsMWUzKSxzZXRUaW1lb3V0KGUsMmUzKSx0aGlzLmFyaWFDaGVja0ludGVydmFs''@;'; put 'put ''fHwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD1zZXRJbnRlcnZhbChlLDNlMykpLHRoaXMuYXJpYU9ic2VydmVyfHwodGhpcy5hcmlhT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2xldCBpPSExO3IuZm9yRWFjaChhPT57ImF0dHJpYnV0ZXMiPT09YS50eXBlJiYoInJvbGUiPT09''@;'; put 'put ''YS5hdHRyaWJ1dGVOYW1lfHwiYXJpYS1yb3djb3VudCI9PT1hLmF0dHJpYnV0ZU5hbWUpJiYoaT0hMCksImNoaWxkTGlzdCI9PT1hLnR5cGUmJmEuYWRkZWROb2Rlcy5mb3JFYWNoKGM9PntpZihjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2NvbnN0IG09YzsobS5oYXNBdHRyaWJ1''@;'; put 'put ''dGUoInJvbGUiKXx8bS5oYXNBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKSkmJihpPSEwKX19KX0pLGkmJnNldFRpbWVvdXQoZSw1MCl9KSx0aGlzLmFyaWFPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwLGF0dHJpYnV0ZXM6ITAsYXR0cmli''@;'; put 'put ''dXRlRmlsdGVyOlsicm9sZSIsImFyaWEtcm93Y291bnQiLCJhcmlhLWNvbGNvdW50IiwiYXJpYS1tdWx0aXNlbGVjdGFibGUiXX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgZT10aGlzO3JldHVybiBaKGZ1bmN0aW9uKigpe2UuaG90VGFibGUuZGF0YS5sZW5ndGg+MCYmKGUudGFibGVG''@;'; put 'put ''bGFnPSEwKSxlLl9xdWVyeT1lLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUocj0+e2Uud2hlcmVTdHJpbmc9ci5zdHJpbmcsZS5jbGF1c2VzPXIub2JqLGUubGliZHM9ci5saWJkc30pLHR5cGVvZiBlLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiP2UubG9hZFdpdGhQ''@;'; put 'put ''YXJhbWV0ZXJzKCk6ZS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bikoV2UoSzEpLFdlKEUyKSxXZShKcyksV2UocmwpLFdlKHMwKSxXZShTYyksV2UobWgpLFdlKEx1KSxXZShsMiksV2UoRnMpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKHIsaSl7aWYoMSZyJiYoV2EoREJ0LDUpLFdhKEc1LDUpLFdhKElCdCw1KSksMiZyKXtsZXQgYTtkaShhPWhpKCkpJiYoaS5ob3RJbnN0YW5jZVZpZXdD''@;'; put 'put ''aGlsZD1hLmZpcnN0KSxkaShhPWhpKCkpJiYoaS5ob3RUYWJsZUNvbXBvbmVudD1hLmZpcnN0KSxkaShhPWhpKCkpJiYoaS5xdWVyeUZpbHRlckNvbXBMaXN0PWEpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6OTUsdmFyczozMCxjb25z''@;'; put 'put ''dHM6W1siY2xpQ29tbWFuZElucHV0IiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJob3RJbnN0YW5jZSIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsIm15''@;'; put 'put ''LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJtb2RhbCB6''@;'; put 'put ''LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwi''@;'; put 'put ''dGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImNsci1jb2wtbWQtNiJdLFsxLCJkb3dubG9hZC1zZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInZhbHVlIiwiQ1NWIl0sWyJ2YWx1ZSIsIlNB''@;'; put 'put ''UyJdLFsidmFsdWUiLCJQR1NRTF9EREwiXSxbInZhbHVlIiwiU0FTX0RETCJdLFsidmFsdWUiLCJUU1FMX0RETCJdLFsidmFsdWUiLCJFWENFTCJdLFsidmFsdWUiLCJNQVJLRE9XTiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1v''@;'; put 'put ''dXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJpZCJdLFsxLCJtb2RhbC1ib2R5Iiwid2ViLXF1ZXJ5Il0sWzEsInJvdyJdLFsxLCJjbHItY29sLWxnLTEyIiwiY2xyLWNvbC1tZC0xMiIs''@;'; put 'put ''ImNsci1jb2wtc20tMTIiLCJjbHItY29sLXhzLTEyIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJh''@;'; put 'put ''ZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid2ViLXF1ZXJ5LXdyYXBwZXIiLCJ3b3JkLWJyZWFrLWFsbCJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dzIiwiNCIsImNvbHMiLCI1MCIsInR5cGUiLCJ0ZXh0IiwicmVhZG9u''@;'; put 'put ''bHkiLCIiLDEsIndlYi1xdWVyeS10ZXh0IiwzLCJmb2N1cyIsInZhbHVlIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayIsIm5neENsaXBib2FyZCJdLFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9k''@;'; put 'put ''YWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRs''@;'; put 'put ''aW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBuby1ib3JkZXJzIGgtMTAw''@;'; put 'put ''IGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDQsIm5nSWYiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNtZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJd''@;'; put 'put ''LFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxv''@;'; put 'put ''YWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIs''@;'; put 'put ''InJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwiaWQiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJj''@;'; put 'put ''bHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0''@;'; put 'put ''Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3Bl''@;'; put 'put ''biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwi''@;'; put 'put ''dHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJjYXJk''@;'; put 'put ''Iiwibm8tYm9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsImhlYWRlci1yb3cgY2xyLXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8t''@;'; put 'put ''dGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayBub0RhdGEiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWZsZXgtMSIsNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1y''@;'; put 'put ''b3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwiZm9ybS1ibG9jayIsInRhYmxlLXNlYXJjaC13cmFwcGVyIiwic3ciLCJjbHItY29sLW1kIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1p''@;'; put 'put ''dGVtcy1jZW50ZXIiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVyIiwidHlwZSJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIs''@;'; put 'put ''InNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsImNsci1mbGV4LWNv''@;'; put 'put ''bHVtbiIsImNsci1mbGV4LXNtLXJvdyJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwiY2xy''@;'; put 'put ''LWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsi''@;'; put 'put ''c2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3cgbXItNSIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDQsIm5nSWYiXSxbMSwib3B0aW9ucy1jb2wiLCJjbHItY29sLW1kIl0sWyJjbGFzcyIsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRl''@;'; put 'put ''bUNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciLCJtci01Il0sWyJj''@;'; put 'put ''bHJUb29sdGlwVHJpZ2dlciIsIiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMs''@;'; put 'put ''ImNsaWNrIl0sWzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6''@;'; put 'put ''ZSIsIjE1Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMs''@;'; put 'put ''ImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBlIiwic3dpdGNoIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxl''@;'; put 'put ''LXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC1saWJyYXJ5LXBuZyIsImFsdCIsInNlbGVjdCBhIGxpYnJhcnkgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNkcy10''@;'; put 'put ''ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJib3JkZXItYm90dG9tLWRpdmlkZXIiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInctMTAwIiwibS0wIl0sWzEsInRpdGxlLWNvbCIsImNsci1j''@;'; put 'put ''b2wtYXV0byIsIm10LTE1IiwibWItMTUiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8gcG9pbnRlci1ldmVudHMtbm9uZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsaWJpbmZvIG0tMCBj''@;'; put 'put ''bHItcm93Iiw0LCJuZ0lmIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8iLCJwb2ludGVyLWV2ZW50cy1ub25lIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQi''@;'; put 'put ''LCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbMSwibGliaW5mbyIsIm0tMCIsImNsci1yb3ciXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgbS0wIHctMTAwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibS0wIiwidy0xMDAiXSxbInNoYXBlIiwicmVmcmVz''@;'; put 'put ''aCIsMSwicmVmcmVzaC10YWJsZSIsIm0tMCIsMywiY2xpY2siXSxbMSwibS0wIl0sWzEsIm0tMCIsImZvbnQtYm9sZCJdLFsxLCJjYXJkLWJsb2NrIiwibm9EYXRhIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbImNsYXNzIiwidGV4dC1j''@;'; put 'put ''ZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2xyLWZsZXgtMSJdLFsxLCJob3Qtd3JhcHBlciIsImNsci1mbGV4LTEiXSxbImlkIiwiaG90VGFibGUiLDEsInZpZXctaG90IiwzLCJkYXRhIiwic2V0dGluZ3MiXSxbMSwibXQt''@;'; put 'put ''Mi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihyLGkpe2lmKDEmcil7Y29uc3QgYT1JbigpO3JlKDAsImFwcC1zaWRlYmFyIiw2KSxrdCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5sb2FkTW9yZUxpYnJhcmllcygp''@;'; put 'put ''KX0pLGN0KDEsTEJ0LDIsMCwiZGl2Iiw3KSxyZSgyLCJjbHItdHJlZSIpLGN0KDMsRkJ0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoNCwkQnQsMiwxLCJuZy1jb250YWluZXIiLDkpLGllKCksY3QoNSxLQnQsMywwLCJkaXYiLDEwKSxpZSgpLHJlKDYsImRpdiIsMTEpLGN0KDcsWEJ0LDE0LDAs''@;'; put 'put ''ImRpdiIsMTIpKDgscUJ0LDEsMCwiZGl2IiwxMykscmUoOSwiY2xyLW1vZGFsIiwxNCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkub3BlbkRvd25sb2FkLG0pfHwoaS5vcGVuRG93bmxvYWQ9bSksbXQobSl9KSxyZSgxMCwiaDMiLDE1KSxU''@;'; put 'put ''ZSgxMSwiRG93bmxvYWQiKSxpZSgpLHJlKDEyLCJkaXYiLDE2KSgxMywiZGl2IiwxNykoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxOCkoMTUsImxhYmVsIiksVGUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IiksaWUoKSxyZSgxNywic2VsZWN0IiwxOSksY2koIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLmRvd25sb2FkRm9ybWF0LG0pfHwoaS5kb3dubG9hZEZvcm1hdD1tKSxtdChtKX0pLHJlKDE4LCJvcHRpb24iLDIwKSxUZSgxOSwiQ1NWIiksaWUoKSxyZSgyMCwib3B0aW9uIiwyMSksVGUoMjEsIkRhdGFsaW5lcyAoY2Fy''@;'; put 'put ''ZHMgZmlsZSkiKSxpZSgpLHJlKDIyLCJvcHRpb24iLDIyKSxUZSgyMywiRERMIChQR1NRTCBGbGF2b3VyKSIpLGllKCkscmUoMjQsIm9wdGlvbiIsMjMpLFRlKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLGllKCkscmUoMjYsIm9wdGlvbiIsMjQpLFRlKDI3LCJEREwgKFRTUUwgRmxhdm91ciki''@;'; put 'put ''KSxpZSgpLHJlKDI4LCJvcHRpb24iLDI1KSxUZSgyOSwiRXhjZWwgKC54bHN4KSIpLGllKCkscmUoMzAsIm9wdGlvbiIsMjYpLFRlKDMxLCJNYXJrZG93biAoLm1kKSIpLGllKCkoKSgpKCkoKSxyZSgzMiwiZGl2IiwyNykoMzMsImJ1dHRvbiIsMjgpLGt0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZ3QoYSksbXQoaS5vcGVuRG93bmxvYWQ9ITEpfSksVGUoMzQsIiBDYW5jZWwgIiksaWUoKSxyZSgzNSwiYnV0dG9uIiwyOSksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLmRvd25sb2FkRm9ybWF0LmluY2x1ZGVzKCJEREwiKT9pLmRvd25sb2FkRERMKCk6''@;'; put 'put ''aS5kb3dubG9hZERhdGEoKSl9KSxUZSgzNiwiIE9rICIpLGllKCkoKSgpLHJlKDM3LCJjbHItbW9kYWwiLDE0KSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksdWkoaS53ZWJRdWVyeSxtKXx8KGkud2ViUXVlcnk9bSksbXQobSl9KSxyZSgzOCwiaDMi''@;'; put 'put ''LDE1KSxUZSgzOSwiIFdlYiBRdWVyeSBVUkwgIiksaWUoKSxyZSg0MCwiZGl2IiwzMCkoNDEsImRpdiIsMzEpKDQyLCJkaXYiLDMyKSg0MywiZGl2IiwzMykoNDQsImRpdiIsMzQpKDQ1LCJzcGFuIiksVGUoNDYsIkNvcHkgdGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRv''@;'; put 'put ''b2w6IiksaWUoKSxyZSg0NywiZGl2IiwzNSkoNDgsImRpdiIsMzYpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksaS53ZWJRdWVyeVRhYj0hMCxtdChpLnNob3dXZWJRdWVyeSgpKX0pLFZ0KDQ5LCJpbnB1dCIsMzcpLHJlKDUwLCJsYWJlbCIpLFRlKDUxLCJUQUIiKSxpZSgp''@;'; put 'put ''KCkscmUoNTIsImRpdiIsMzYpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksaS53ZWJRdWVyeVRhYj0hMSxtdChpLnNob3dXZWJRdWVyeSgpKX0pLFZ0KDUzLCJpbnB1dCIsMzcpLHJlKDU0LCJsYWJlbCIpLFRlKDU1LCJDU1YiKSxpZSgpKCkoKSgpLHJlKDU2LCJkaXYiLDM4''@;'; put 'put ''KSg1NywidGV4dGFyZWEiLDM5LDApLGt0KCJmb2N1cyIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLG10KGkub25DbGlDb21tYW5kRm9jdXMobSkpfSksVGUoNTksIiAgICAgICAgICAgICAgIiksaWUoKSgpLHJlKDYwLCJkaXYiLDQwKSg2MSwiYnV0dG9uIiw0MSksa3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBndChhKSxtdChpLmNvcHlUb0NsaXAoKSl9KSxUZSg2MiwiIGNvcHkgdG8gY2xpcGJvYXJkICIpLGllKCkoKSgpKCkoKSgpLHJlKDYzLCJkaXYiLDI3KSg2NCwiYnV0dG9uIiwyOCksa3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBndChhKSxtdChpLndlYlF1ZXJ5''@;'; put 'put ''PSExKX0pLFRlKDY1LCIgY2xvc2UgIiksaWUoKSgpKCkscmUoNjYsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSx1aShpLmZpbHRlcixtKXx8KGkuZmlsdGVyPW0pLG10KG0pfSkscmUoNjcsImgzIiwxNSksVGUoNjgsIiBG''@;'; put 'put ''aWx0ZXIgZm9yIHRhYmxlOiIpLHJlKDY5LCJzcGFuIiksVGUoNzApLGllKCkoKSxyZSg3MSwiZGl2IiwxNiksY3QoNzIsSkJ0LDIsMCwiYXBwLXF1ZXJ5Iiw0MyksaWUoKSxyZSg3MywiZGl2IiwyNykoNzQsImJ1dHRvbiIsNDQpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSks''@;'; put 'put ''bXQoaS5yZXNldEZpbHRlcigpKX0pLFRlKDc1LCIgcmVzZXQgZmlsdGVyICIpLGllKCkscmUoNzYsImJ1dHRvbiIsNDUpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksaS5maWx0ZXI9ITEsbXQoaS5yZW1vdmVRdWVyeSgpKX0pLFRlKDc3LCIgQ2FuY2VsICIpLGllKCkscmUo''@;'; put 'put ''NzgsImJ1dHRvbiIsNDYpLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5zZW5kQ2xhdXNlKCkpfSksVGUoNzksIiBPayAiKSxpZSgpKCkoKSxyZSg4MCwiY2xyLW1vZGFsIiw0NyksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEp''@;'; put 'put ''LHVpKGkucXVlcnlFcnIsbSl8fChpLnF1ZXJ5RXJyPW0pLG10KG0pfSkscmUoODEsImgzIiw0OCksVGUoODIsIkVycm9yIiksaWUoKSxyZSg4MywiZGl2IiwxNikoODQsInAiKSxUZSg4NSksaWUoKSgpLHJlKDg2LCJkaXYiLDI3KSg4NywiYnV0dG9uIiw0OSksa3QoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBndChhKSxtdChpLnF1ZXJ5RXJyPSExKX0pLFRlKDg4LCIgQ2FuY2VsICIpLGllKCkscmUoODksImJ1dHRvbiIsNTApLGt0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZ3QoYSksbXQoaS5xdWVyeUVycj0hMSl9KSxUZSg5MCwiIE9rICIpLGllKCkoKSgpLGN0KDkxLFFC''@;'; put 'put ''dCw2LDAsImRpdiIsNTEpKDkyLEZqdCw4LDYsImRpdiIsNTIpLGllKCkscmUoOTMsImFwcC1kYXRhc2V0LWluZm8iLDUzKSxjaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24obSl7cmV0dXJuIGd0KGEpLHVpKGkuZGF0YXNldEluZm8sbSl8fChpLmRhdGFzZXRJbmZvPW0pLG10KG0pfSksa3QoInJv''@;'; put 'put ''d0NsaWNrZWQiLGZ1bmN0aW9uKG0pe3JldHVybiBndChhKSxtdChpLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKG0pKX0pLGllKCkscmUoOTQsImFwcC12aWV3Ym94ZXMiLDU0KSxjaSgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihtKXtyZXR1cm4gZ3QoYSksdWkoaS52aWV3Ym94''@;'; put 'put ''T3BlbixtKXx8KGkudmlld2JveE9wZW49bSksbXQobSl9KSxpZSgpfWlmKDImcil7Y29uc3QgYT1kYSg1OCk7YWUoKSx5ZSgibmdJZiIsaS5saWJyYXJpZXNMb2FkaW5nKSxhZSgyKSx5ZSgibmdJZiIsaS5saWJyYXJpZXMpLGFlKCkseWUoIm5nRm9yT2YiLGkubGlicmFyaWVzKSxhZSgpLHll''@;'; put 'put ''KCJuZ0lmIixpLmxpYnJhcmllc1BhZ2luZyksYWUoMikseWUoIm5nSWYiLGkubnVsbFZhcmlhYmxlcyksYWUoKSx5ZSgibmdJZiIsaS5udWxsVmFyaWFibGVzKSxhZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGkub3BlbkRvd25sb2FkKSx5ZSgiY2xyTW9kYWxTaXplIiwibWQiKSxhZSg4KSxsaSgi''@;'; put 'put ''bmdNb2RlbCIsaS5kb3dubG9hZEZvcm1hdCksYWUoMTgpLHllKCJpZCIsaS50YWJsZVRpdGxlKSxhZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixpLndlYlF1ZXJ5KSx5ZSgiY2xyTW9kYWxTaXplIiwibGciKSxhZSgxMikseWUoImNoZWNrZWQiLGkud2ViUXVlcnlUYWIpLGFlKDQpLHllKCJjaGVj''@;'; put 'put ''a2VkIiwhaS53ZWJRdWVyeVRhYiksYWUoNCkseWUoInZhbHVlIixpLndlYlF1ZXJ5VGV4dCksYWUoNCkseWUoIm5neENsaXBib2FyZCIsYSksYWUoNSksbGkoImNsck1vZGFsT3BlbiIsaS5maWx0ZXIpLHllKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksYWUo''@;'; put 'put ''NCksTXIoIiAiLGkubGliVGFiLCIgIiksYWUoMikseWUoIm5nSWYiLGkuZmlsdGVyKSxhZSg2KSx5ZSgiY2xyTG9hZGluZyIsaS5zdWJtaXRMb2FkaW5nKSxhZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixpLnF1ZXJ5RXJyKSxhZSg1KSx2cihpLnF1ZXJ5RXJyTWVzc2FnZSksYWUoNikseWUoIm5n''@;'; put 'put ''SWYiLGkubG9hZGluZ1RhYmxlVmlldyksYWUoKSx5ZSgibmdJZiIsIWkubG9hZGluZ1RhYmxlVmlldyksYWUoKSxsaSgib3BlbiIsaS5kYXRhc2V0SW5mbykseWUoImRzbWV0YSIsaS5kc21ldGEpKCJ2ZXJzaW9ucyIsaS52ZXJzaW9ucyksYWUoKSxsaSgidmlld2JveE1vZGFsIixpLnZpZXdi''@;'; put 'put ''b3hPcGVuKX19LGRlcGVuZGVuY2llczpbQV9lLGhzLG1hLEFmLG80LEVCdCxROSxSZixMZix6bCx2aCxJZixpbCxxOSxRcyxxMyxTMixFaCx1NSxVbCxodSxjMCxTMSx5MixWZixwcyxzcGUsQ2gsencsYjIsUGQsbXYsWHcsd0gsaTUsbHYsY3YsancsUjYsTzYsTDYsU2gsRzUsYWcsSV9lLEZI''@;'; put 'put ''LG1hZSxZUyxpZyxMX2Usa0J0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIG59KSgpO2NvbnN0IEhqdD1be3BhdGg6IiIsY29tcG9uZW50OnZWdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpr''@;'; put 'put ''en0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpren0se3BhdGg6ImRhdGEvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpren0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50Omt6fSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OkF6fSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86''@;'; put 'put ''ZGlyZWN0aW9uIixjb21wb25lbnQ6QXp9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpBen0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6QXp9LHtwYXRoOiJ2aXlhLWFwaS1leHBs''@;'; put 'put ''b3JlciIsY29tcG9uZW50OlNCdH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6ZG9lfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50OmRvZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQvOm9iamVjdE5hbWUiLGNvbXBvbmVudDpkb2V9LHtw''@;'; put 'put ''YXRoOiJ1c2VybmF2Iixjb21wb25lbnQ6bVZ0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50OmJ3ZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpid2V9LHtwYXRoOiJncm91cHMiLGNv''@;'; put 'put ''bXBvbmVudDpKX2V9LHtwYXRoOiJncm91cHMvOnVyaSIsY29tcG9uZW50OkpfZX0se3BhdGg6InJvbGVzIixjb21wb25lbnQ6X3dlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50Ol93ZX1dfV19XTtsZXQgTmp0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltZYy5mb3JDaGlsZChIanQpLFljXX0pfX1yZXR1cm4gbn0pKCksVmp0PSgoKT0+e2NsYXNzIG57c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcocnx8bil9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1HaSh7dHlwZTpufSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXpuKHtpbXBvcnRzOltQX2UsRmEsTmp0LFRCdCxPYyxNMSxaeSxZeSxaUyxlSSx5YWUsbDNdfSl9fXJldHVybiBufSkoKTtj''@;'; put 'put ''b25zdCBqanQ9WWMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RUbzoiaG9tZSIscGF0aE1hdGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRDaGlsZHJlbjooKT0+Vmp0fSx7cGF0aDoicmV2aWV3Iixjb21wb25lbnQ6T0l0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwi''@;'; put 'put ''LHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRDaGlsZHJlbjooKT0+TEl0fV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGlsZHJlbjooKT0+Qmt0fSx7cGF0aDoiaG9tZSIsbG9hZENoaWxkcmVuOigpPT50a3R9LHtwYXRoOiJlZGl0b3IiLGxvYWRDaGlsZHJlbjooKT0+''@;'; put 'put ''WkV0fSx7cGF0aDoic3RhZ2UiLGxvYWRDaGlsZHJlbjooKT0+V0l0fSx7cGF0aDoic3lzdGVtIixsb2FkQ2hpbGRyZW46KCk9PmlSdH0se3BhdGg6ImRlcGxveSIsbG9hZENoaWxkcmVuOigpPT5QaXR9LHtwYXRoOiIqKiIsY29tcG9uZW50OnBydH1dLHt1c2VIYXNoOiEwfSk7bGV0IHpqdD0o''@;'; put 'put ''KCk9PntjbGFzcyBue3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihyKXtyZXR1cm4gbmV3KHJ8fG4pfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9R2koe3R5cGU6bixib290c3RyYXA6W2J0dF19KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9em4oe3Byb3ZpZGVyczpbTUYsRTIsd2FlLGhG''@;'; put 'put ''LGpQZShZOShNNi5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOkxoZSx1c2VGYWN0b3J5OmtQZX0se3Byb3ZpZGU6TVQsdXNlRXhpc3Rpbmc6TGhlLG11bHRpOiEwfV0pKV0saW1wb3J0czpbZnJ0LHgwZSxPYyx3VWUsamp0LFpTLE0xLFl5LGVJLGwzLHRCdF19KX19cmV0dXJuIG59KSgp''@;'; put 'put ''O2VEZSgpLmJvb3RzdHJhcE1vZHVsZSh6anQpfSwzNzM0KG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7dmFyIF9hc3luY1RvR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oMjkyOTMpLmRlZmF1bHQsX3dyYXBBc3luY0dlbmVyYXRvcj1f''@;'; put 'put ''X3dlYnBhY2tfcmVxdWlyZV9fKDQyOTU4KS5kZWZhdWx0LF9hd2FpdEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNTMzNDQpLmRlZmF1bHQsX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGU9X193ZWJwYWNrX3JlcXVpcmVfXyg5MzUxMykuZGVmYXVsdCxfYXN5bmNJdGVyYXRvcj1f''@;'; put 'put ''X3dlYnBhY2tfcmVxdWlyZV9fKDgyODgxKS5kZWZhdWx0LGQ7c2VsZixkPSgpPT4oKCk9Pnt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17MzA2MjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg3NjQpLkJ1ZmZlcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksai5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9pZCAwO2NvbnN0IGg9ZCgyODMwKSxvPWQoOTk0Nyk7ai5Dc3ZGb3JtYXR0ZXJTdHJlYW09Y2xhc3MgSSBleHRlbmRzIGguVHJhbnNmb3Jte2NvbnN0cnVjdG9yKFQpe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6VC5vYmplY3RN''@;'; put 'put ''b2RlfSksdGhpcy5oYXNXcml0dGVuQk9NPSExLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1ULHRoaXMucm93Rm9ybWF0dGVyPW5ldyBvLlJvd0Zvcm1hdHRlcihUKSx0aGlzLmhhc1dyaXR0ZW5CT009IVQud3JpdGVCT019dHJhbnNmb3JtKFQpe3JldHVybiB0aGlzLnJvd0Zvcm1hdHRlci5yb3dU''@;'; put 'put ''cmFuc2Zvcm09VCx0aGlzfV90cmFuc2Zvcm0oVCxBLE0pe2xldCBPPSExO3RyeXt0aGlzLmhhc1dyaXR0ZW5CT018fCh0aGlzLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLkJPTSksdGhpcy5oYXNXcml0dGVuQk9NPSEwKSx0aGlzLnJvd0Zvcm1hdHRlci5mb3JtYXQoVCwoRCxFKT0+RD8o''@;'; put 'put ''Tz0hMCxNKEQpKTooRSYmRS5mb3JFYWNoKEI9Pnt0aGlzLnB1c2goUy5mcm9tKEIsInV0ZjgiKSl9KSxPPSEwLE0oKSkpfWNhdGNoKEQpe2lmKE8pdGhyb3cgRDtNKEQpfX1fZmx1c2goVCl7dGhpcy5yb3dGb3JtYXR0ZXIuZmluaXNoKChBLE0pPT5BP1QoQSk6KE0mJk0uZm9yRWFjaChPPT57''@;'; put 'put ''dGhpcy5wdXNoKFMuZnJvbShPLCJ1dGY4IikpfSksVCgpKSl9fX0sNjc2MzoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouRm9ybWF0dGVyT3B0aW9ucz12b2lkIDAsai5Gb3JtYXR0ZXJPcHRpb25zPWNsYXNz''@;'; put 'put ''IGR7Y29uc3RydWN0b3IoaD17fSl7dmFyIG87dGhpcy5vYmplY3RNb2RlPSEwLHRoaXMuZGVsaW1pdGVyPSIsIix0aGlzLnJvd0RlbGltaXRlcj0iXG4iLHRoaXMucXVvdGU9JyInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5xdW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9''@;'; put 'put ''dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFkZXJzPW51bGwsdGhpcy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyPSExLHRoaXMud3JpdGVCT009ITEsdGhpcy5CT009Ilx1ZmVmZiIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2JqZWN0LmFzc2lnbih0aGlzLGh8fHt9KSx0eXBlb2YgaD8u''@;'; put 'put ''cXVvdGVIZWFkZXJzPiJ1IiYmKHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zKSwhMD09PWg/LnF1b3RlP3RoaXMucXVvdGU9JyInOiExPT09aD8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9mIGg/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVv''@;'; put 'put ''dGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPSEhdGhpcy5oZWFkZXJzJiYobnVsbD09PShvPWgud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09b3x8byksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1g''@;'; put 'put ''JHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9YH19fSw1MTg2OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihUKXtyZXR1cm4gVCYmVC5fX2VzTW9kdWxlP1Q6e2RlZmF1bHQ6VH19O09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCBoPVMoZCg4MDk0KSksbz1TKGQoOTcyMikpLEk9UyhkKDE2NTgpKTtqLkZpZWxkRm9ybWF0dGVyPWNsYXNzIGZ7Y29uc3RydWN0b3IoQSl7dGhpcy5faGVhZGVycz1udWxsLHRo''@;'; put 'put ''aXMuZm9ybWF0dGVyT3B0aW9ucz1BLG51bGwhPT1BLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9QS5oZWFkZXJzKSx0aGlzLlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAoQS5xdW90ZSwiZyIpO2NvbnN0IE09YFske0EuZGVsaW1pdGVyfSR7SS5kZWZhdWx0KEEucm93RGVsaW1pdGVyKX18XHJ8''@;'; put 'put ''XG5dYDt0aGlzLkVTQ0FQRV9SRUdFWFA9bmV3IFJlZ0V4cChNKX1zZXQgaGVhZGVycyhBKXt0aGlzLl9oZWFkZXJzPUF9c2hvdWxkUXVvdGUoQSxNKXtjb25zdCBPPU0/dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlSGVhZGVyczp0aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVDb2x1bW5z''@;'; put 'put ''O3JldHVybiBoLmRlZmF1bHQoTyk/TzpBcnJheS5pc0FycmF5KE8pP09bQV06bnVsbCE9PXRoaXMuX2hlYWRlcnMmJk9bdGhpcy5faGVhZGVyc1tBXV19Zm9ybWF0KEEsTSxPKXtjb25zdCBEPWAke28uZGVmYXVsdChBKT8iIjpBfWAucmVwbGFjZSgvXDAvZywiIikse2Zvcm1hdHRlck9wdGlv''@;'; put 'put ''bnM6RX09dGhpcztyZXR1cm4iIiE9PUUucXVvdGUmJi0xIT09RC5pbmRleE9mKEUucXVvdGUpP3RoaXMucXVvdGVGaWVsZChELnJlcGxhY2UodGhpcy5SRVBMQUNFX1JFR0VYUCxFLmVzY2FwZWRRdW90ZSkpOi0xIT09RC5zZWFyY2godGhpcy5FU0NBUEVfUkVHRVhQKXx8dGhpcy5zaG91bGRR''@;'; put 'put ''dW90ZShNLE8pP3RoaXMucXVvdGVGaWVsZChEKTpEfXF1b3RlRmllbGQoQSl7Y29uc3R7cXVvdGU6TX09dGhpcy5mb3JtYXR0ZXJPcHRpb25zO3JldHVybmAke019JHtBfSR7TX1gfX19LDcxODE6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2ltcG9y''@;'; put 'put ''dERlZmF1bHR8fGZ1bmN0aW9uKEEpe3JldHVybiBBJiZBLl9fZXNNb2R1bGU/QTp7ZGVmYXVsdDpBfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouUm93Rm9ybWF0dGVyPXZvaWQgMDtjb25zdCBoPVMoZCg4NDIzKSksbz1TKGQoMjMwNykpLEk9''@;'; put 'put ''ZCg1MTg2KSxmPWQoNDY5Mik7Y2xhc3MgVHtjb25zdHJ1Y3RvcihNKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPU0sdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgSS5GaWVsZEZvcm1hdHRlcihNKSx0aGlzLmhlYWRlcnM9TS5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVI''@;'; put 'put ''ZWFkZXJzPU0uc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVhZGVycyYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLE0udHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09TS50cmFuc2Zvcm0pfXN0''@;'; put 'put ''YXRpYyBpc1Jvd0hhc2hBcnJheShNKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoTSkmJkFycmF5LmlzQXJyYXkoTVswXSkmJjI9PT1NWzBdLmxlbmd0aH1zdGF0aWMgaXNSb3dBcnJheShNKXtyZXR1cm4gQXJyYXkuaXNBcnJheShNKSYmIXRoaXMuaXNSb3dIYXNoQXJyYXkoTSl9c3RhdGljIGdh''@;'; put 'put ''dGhlckhlYWRlcnMoTSl7cmV0dXJuIFQuaXNSb3dIYXNoQXJyYXkoTSk/TS5tYXAoTz0+T1swXSk6QXJyYXkuaXNBcnJheShNKT9NOk9iamVjdC5rZXlzKE0pfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0oTSl7cmV0dXJuIGYuaXNTeW5jVHJhbnNmb3JtKE0pPyhPLEQpPT57bGV0IEU9bnVsbDt0''@;'; put 'put ''cnl7RT1NKE8pfWNhdGNoKEIpe3JldHVybiBEKEIpfXJldHVybiBEKG51bGwsRSl9OihPLEQpPT57TShPLEQpfX1zZXQgcm93VHJhbnNmb3JtKE0pe2lmKCFoLmRlZmF1bHQoTSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMu''@;'; put 'put ''X3Jvd1RyYW5zZm9ybT1ULmNyZWF0ZVRyYW5zZm9ybShNKX1mb3JtYXQoTSxPKXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihNLChELEUpPT57aWYoRClyZXR1cm4gTyhEKTtpZighTSlyZXR1cm4gTyhudWxsKTtjb25zdCBCPVtdO2lmKEUpe2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6RixoZWFk''@;'; put 'put ''ZXJzOk59PXRoaXMuY2hlY2tIZWFkZXJzKEUpO2lmKHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzJiZOJiYhdGhpcy5oYXNXcml0dGVuSGVhZGVycyYmKEIucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoTiwhMCkpLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITApLEYpe2NvbnN0IEg9dGhpcy5nYXRo''@;'; put 'put ''ZXJDb2x1bW5zKEUpO0IucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoSCwhMSkpfX1yZXR1cm4gTyhudWxsLEIpfSl9ZmluaXNoKE0pe2NvbnN0IE89W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYmMD09PXRoaXMucm93Q291bnQpe2lmKCF0aGlzLmhlYWRl''@;'; put 'put ''cnMpcmV0dXJuIE0obmV3IEVycm9yKCJgYWx3YXlzV3JpdGVIZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0IGBoZWFkZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTtPLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1h''@;'; put 'put ''dHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYmTy5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIpLE0obnVsbCxPKX1jaGVja0hlYWRlcnMoTSl7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5o''@;'; put 'put ''ZWFkZXJzfTtjb25zdCBPPVQuZ2F0aGVySGVhZGVycyhNKTtyZXR1cm4gdGhpcy5oZWFkZXJzPU8sdGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPU8sdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IW8uZGVmYXVsdChPLE0pLGhlYWRlcnM6T306e3Nob3Vs''@;'; put 'put ''ZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRoZXJDb2x1bW5zKE0pe2lmKG51bGw9PT10aGlzLmhlYWRlcnMpdGhyb3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoTSk/VC5pc1Jvd0hhc2hBcnJheShNKT90aGlz''@;'; put 'put ''LmhlYWRlcnMubWFwKChPLEQpPT57Y29uc3QgRT1NW0RdO3JldHVybiBFP0VbMV06IiJ9KTpULmlzUm93QXJyYXkoTSkmJiF0aGlzLnNob3VsZFdyaXRlSGVhZGVycz9NOnRoaXMuaGVhZGVycy5tYXAoKE8sRCk9Pk1bRF0pOnRoaXMuaGVhZGVycy5tYXAoTz0+TVtPXSl9Y2FsbFRyYW5zZm9y''@;'; put 'put ''bWVyKE0sTyl7cmV0dXJuIHRoaXMuX3Jvd1RyYW5zZm9ybT90aGlzLl9yb3dUcmFuc2Zvcm0oTSxPKTpPKG51bGwsTSl9Zm9ybWF0Q29sdW1ucyhNLE8pe2NvbnN0IEQ9TS5tYXAoKEIsRik9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9ybWF0KEIsRixPKSkuam9pbih0aGlzLmZvcm1hdHRlck9w''@;'; put 'put ''dGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6RX09dGhpcztyZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxFP1t0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyLERdLmpvaW4oIiIpOkR9fWouUm93Rm9ybWF0dGVyPVR9LDk5NDc6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouRmllbGRGb3JtYXR0ZXI9ai5Sb3dGb3JtYXR0ZXI9dm9pZCAwO3ZhciBTPWQoNzE4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIlJvd0Zvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIFMuUm93Rm9ybWF0dGVyfX0pO3ZhciBoPWQoNTE4Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIkZpZWxkRm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5GaWVsZEZvcm1hdHRlcn19KX0sNzIwMTpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgUz1kKDg3NjQpLkJ1ZmZlcixoPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihGLE4sSCx6KXt2b2lkIDA9PT16JiYoej1IKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRix6LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBOW0hdfX0pfTpmdW5jdGlvbihGLE4sSCx6KXt2b2lkIDA9PT16JiYoej1IKSxGW3pdPU5bSF19KSxvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihGLE4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJkZWZhdWx0Iix7ZW51''@;'; put 'put ''bWVyYWJsZTohMCx2YWx1ZTpOfSl9OmZ1bmN0aW9uKEYsTil7Ri5kZWZhdWx0PU59KSxJPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihGKXtpZihGJiZGLl9fZXNNb2R1bGUpcmV0dXJuIEY7dmFyIE49e307aWYobnVsbCE9Rilmb3IodmFyIEggaW4gRikiZGVmYXVsdCIhPT1I''@;'; put 'put ''JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRixIKSYmaChOLEYsSCk7cmV0dXJuIG8oTixGKSxOfSxmPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihGLE4pe2Zvcih2YXIgSCBpbiBGKSJkZWZhdWx0IiE9PUgmJiFPYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5LmNhbGwoTixIKSYmaChOLEYsSCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLndyaXRlVG9QYXRoPWoud3JpdGVUb1N0cmluZz1qLndyaXRlVG9CdWZmZXI9ai53cml0ZVRvU3RyZWFtPWoud3JpdGU9ai5mb3JtYXQ9ai5Gb3Jt''@;'; put 'put ''YXR0ZXJPcHRpb25zPWouQ3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCBUPWQoOTUzOSksQT1kKDI4MzApLE09SShkKDg2NDYpKSxPPWQoNjc2MyksRD1kKDMwNjIpO2YoZCg0NjkyKSxqKTt2YXIgRT1kKDMwNjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJDc3ZGb3JtYXR0ZXJT''@;'; put 'put ''dHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLkNzdkZvcm1hdHRlclN0cmVhbX19KTt2YXIgQj1kKDY3NjMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJGb3JtYXR0ZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi5G''@;'; put 'put ''b3JtYXR0ZXJPcHRpb25zfX0pLGouZm9ybWF0PUY9Pm5ldyBELkNzdkZvcm1hdHRlclN0cmVhbShuZXcgTy5Gb3JtYXR0ZXJPcHRpb25zKEYpKSxqLndyaXRlPShGLE4pPT57Y29uc3QgSD1qLmZvcm1hdChOKSx6PVQucHJvbWlzaWZ5KChaLFUpPT57SC53cml0ZShaLHZvaWQgMCxVKX0pO3Jl''@;'; put 'put ''dHVybiBGLnJlZHVjZSgoWixVKT0+Wi50aGVuKCgpPT56KFUpKSxQcm9taXNlLnJlc29sdmUoKSkudGhlbigoKT0+SC5lbmQoKSkuY2F0Y2goWj0+e0guZW1pdCgiZXJyb3IiLFopfSksSH0sai53cml0ZVRvU3RyZWFtPShGLE4sSCk9Pmoud3JpdGUoTixIKS5waXBlKEYpLGoud3JpdGVUb0J1''@;'; put 'put ''ZmZlcj0oRixOPXt9KT0+e2NvbnN0IEg9W10sej1uZXcgQS5Xcml0YWJsZSh7d3JpdGUoWixVLEspe0gucHVzaChaKSxLKCl9fSk7cmV0dXJuIG5ldyBQcm9taXNlKChaLFUpPT57ei5vbigiZXJyb3IiLFUpLm9uKCJmaW5pc2giLCgpPT5aKFMuY29uY2F0KEgpKSksai53cml0ZShGLE4pLnBp''@;'; put 'put ''cGUoeil9KX0sai53cml0ZVRvU3RyaW5nPShGLE4pPT5qLndyaXRlVG9CdWZmZXIoRixOKS50aGVuKEg9PkgudG9TdHJpbmcoKSksai53cml0ZVRvUGF0aD0oRixOLEgpPT57Y29uc3Qgej1NLmNyZWF0ZVdyaXRlU3RyZWFtKEYse2VuY29kaW5nOiJ1dGY4In0pO3JldHVybiBqLndyaXRlKE4s''@;'; put 'put ''SCkucGlwZSh6KX19LDQ2OTI6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzU3luY1RyYW5zZm9ybT12b2lkIDAsai5pc1N5bmNUcmFuc2Zvcm09ZD0+MT09PWQubGVuZ3RofSwyNjU2OmZ1bmN0aW9uKHRl''@;'; put 'put ''LGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihNKXtyZXR1cm4gTSYmTS5fX2VzTW9kdWxlP006e2RlZmF1bHQ6TX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmRlY29kZVRva2Vu''@;'; put 'put ''PWouaGFzVG9rZW5FeHBpcmVkPWouaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1qLmlzQWNjZXNzVG9rZW5FeHBpcmluZz12b2lkIDA7Y29uc3QgaD1TKGQoNjI0NSkpO2Z1bmN0aW9uIFQoTSxPKXtyZXR1cm4oMCxoLmRlZmF1bHQpKE0pLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PU99''@;'; put 'put ''ai5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9ZnVuY3Rpb24gbyhNLE89MzYwMCl7cmV0dXJuIU18fFQoTSxPKX0sai5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIEkoTSxPPTMwKXtyZXR1cm4hTXx8VChNLE8pfSxqLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbiBmKE0pe3JldHVybiFN''@;'; put 'put ''fHxUKE0sMCl9LGouZGVjb2RlVG9rZW49ZnVuY3Rpb24gQShNKXtsZXQgTzt0cnl7Tz0oMCxoLmRlZmF1bHQpKE0pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4gT319LDY3OTk6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IFM9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG8sSSxmLFQpe3ZvaWQgMD09PVQmJihUPWYpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLFQse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIElbZl19fSl9OmZ1bmN0aW9uKG8s''@;'; put 'put ''SSxmLFQpe3ZvaWQgMD09PVQmJihUPWYpLG9bVF09SVtmXX0pLGg9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKG8sSSl7Zm9yKHZhciBmIGluIG8pImRlZmF1bHQiIT09ZiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChJLGYpJiZTKEksbyxmKX07T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGgoZCgyNjU2KSxqKX0sMzI1OToodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoucHJlZml4TWVzc2FnZT12b2lkIDAsai5wcmVm''@;'; put 'put ''aXhNZXNzYWdlPShTLGgpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBTKWlmKFMuaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSlTLm1lc3NhZ2U9aCtTLm1lc3NhZ2U7ZWxzZXtpZighUy5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30s''@;'; put 'put ''Uykse21lc3NhZ2U6aH0pO2lmKCJvYmplY3QiPT10eXBlb2YgUy5ib2R5JiYoUy5tZXNzYWdlPVMuYm9keS5tZXNzYWdlP2grUy5ib2R5Lm1lc3NhZ2U6aCksInN0cmluZyI9PXR5cGVvZiBTLmJvZHkpe2xldCBvO3RyeXtvPUpTT04ucGFyc2UoUy5ib2R5KX1jYXRjaHtyZXR1cm4gUy5tZXNz''@;'; put 'put ''YWdlPWgsU31yZXR1cm4gby5tZXNzYWdlPW8ubWVzc2FnZT9oK28ubWVzc2FnZTpoLFMuYm9keT1vLFN9fXJldHVybiJzdHJpbmciPT10eXBlb2YgUyYmKFM9aCtTKSxTfX0sOTc3ODpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGlu''@;'; put 'put ''Z3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obyxJLGYsVCl7dm9pZCAwPT09VCYmKFQ9ZiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sVCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSVtmXX19KX06ZnVuY3Rpb24obyxJLGYsVCl7dm9pZCAwPT09VCYmKFQ9Ziksb1tU''@;'; put 'put ''XT1JW2ZdfSksaD10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24obyxJKXtmb3IodmFyIGYgaW4gbykiZGVmYXVsdCIhPT1mJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEksZikmJlMoSSxvLGYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksaChkKDMyNTkpLGopLGgoZCgxMDY0KSxqKX0sMTA2NDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO2NvbnN0IFM9ZCgzOTAwKTtj''@;'; put 'put ''bGFzcyBoIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoST1bXSl7bGV0IGY9KEk9Wy4uLm5ldyBTZXQoSSldKS5sZW5ndGg/SS5qb2luKCIsICIpLnRyaW0oKTpbUy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsUy5TZXJ2ZXJUeXBlLlNhczksUy5TZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRy''@;'; put 'put ''aW0oKTtmPWYucmVwbGFjZSgvLFxzKFteLF0qKSQvLCIgYW5kICQxIiksc3VwZXIoYEludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiR7MSE9PUkubGVuZ3RoPyJzIjoiIn0gJHsxIT09SS5sZW5ndGg/ImFyZSI6ImlzIn0gJHtmfWApLHRoaXMubmFtZT0iU2VydmVyVHlwZUVycm9y''@;'; put 'put ''IixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxoLnByb3RvdHlwZSl9fWouU2VydmVyVHlwZUVycm9yPWh9LDM5MDY6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE0sTyxELEUpe3JldHVybiBuZXcoRHx8KEQ9UHJv''@;'; put 'put ''bWlzZSkpKGZ1bmN0aW9uKEYsTil7ZnVuY3Rpb24gSChVKXt0cnl7WihFLm5leHQoVSkpfWNhdGNoKEspe04oSyl9fWZ1bmN0aW9uIHooVSl7dHJ5e1ooRS50aHJvdyhVKSl9Y2F0Y2goSyl7TihLKX19ZnVuY3Rpb24gWihVKXtVLmRvbmU/RihVLnZhbHVlKTpmdW5jdGlvbiBCKEYpe3JldHVy''@;'; put 'put ''biBGIGluc3RhbmNlb2YgRD9GOm5ldyBEKGZ1bmN0aW9uKE4pe04oRil9KX0oVS52YWx1ZSkudGhlbihILHopfVooKEU9RS5hcHBseShNLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai51cGRhdGVDc3Y9ai5jcmVh''@;'; put 'put ''dGVDc3Y9ai5yZWFkQ3N2PXZvaWQgMDtjb25zdCBoPWQoMTU1OSksbz1kKDcyMDEpO2oucmVhZENzdj1NPT5TKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCgwLGgucmVhZEZpbGUpKE0pKS5zcGxpdCgiXG4iKS5maWx0ZXIoRD0+RC5sZW5ndGgpLm1hcChE''@;'; put 'put ''PT5ELnNwbGl0KCIsIikpfSksai5jcmVhdGVDc3Y9KE0sTyxEKT0+Uyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBFPXlpZWxkKDAsby53cml0ZVRvU3RyaW5nKShPLHtoZWFkZXJzOkR9KTt5aWVsZCgwLGguY3JlYXRlRmlsZSkoTSxFKX0pLGoudXBkYXRlQ3N2PShN''@;'; put 'put ''LE8sRCxFKT0+Uyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBCPXlpZWxkIEEoTSxPLEQsRSk7aWYoRSl7Y29uc3QgRj0wPT09Qi5sZW5ndGg/MTpCLmxlbmd0aCxOPUQuZmluZEluZGV4KEg9Pkg9PT1FKTtOPi0xP08uc3BsaWNlKE4sMCxGKTooRC5zcGxpY2UoMCww''@;'; put 'put ''LEUpLE8uc3BsaWNlKDAsMCxGKSl9Qi5wdXNoKE8pLHlpZWxkKDAsai5jcmVhdGVDc3YpKE0sQixEKX0pO2NvbnN0IEE9KE0sTyxELEUpPT5TKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKE8ubGVuZ3RoIT09RC5sZW5ndGgpe2lmKE8ubGVuZ3RoPkQubGVuZ3RoKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2lmKCFFfHxPLmxlbmd0aCsxIT09RC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBj''@;'; put 'put ''b2x1bW5zIil9ZWxzZSBpZihFJiZELmluY2x1ZGVzKEUpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2NvbnN0IEI9eWllbGQoMCxqLnJlYWRDc3YpKE0pLmNhdGNoKE49PltdKSxGPUJbMF07aWYoRil7''@;'; put 'put ''aWYoRC5sZW5ndGg+Ri5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgZ3JlYXRlciB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYoRC5sZW5ndGg8Ri5sZW5ndGgpe2lmKCFFfHxELmxlbmd0aCsxIT09Ri5sZW5ndGgpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgbGVzcyB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7Y29uc3QgTj1GLmZpbmRJbmRleCh6PT56PT09RSksSD1bLi4uRF07aWYoIShOPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVt''@;'; put 'put ''bnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKEguc3BsaWNlKE4sMCxFKSxKU09OLnN0cmluZ2lmeShEKSE9PUpTT04uc3RyaW5naWZ5KEgpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxz''@;'; put 'put ''ZXtpZihKU09OLnN0cmluZ2lmeShEKSE9PUpTT04uc3RyaW5naWZ5KEYpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoRSYmIUQuaW5jbHVkZXMoRSkpdGhyb3cgbmV3IEVycm9yKCJjYW4gbm90IGFkZCBuZXcg''@;'; put 'put ''aWQgdG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm4gQn0pfSwxNTU5OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihsLGIscSxHKXt2b2lkIDA9PT1HJiYoRz1xKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkobCxHLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiW3FdfX0pfTpmdW5jdGlvbihsLGIscSxHKXt2b2lkIDA9PT1HJiYoRz1xKSxsW0ddPWJbcV19KSxoPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlv''@;'; put 'put ''bihsLGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpifSl9OmZ1bmN0aW9uKGwsYil7bC5kZWZhdWx0PWJ9KSxvPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihsKXtpZihsJiZsLl9fZXNNb2R1bGUpcmV0dXJuIGw7dmFy''@;'; put 'put ''IGI9e307aWYobnVsbCE9bClmb3IodmFyIHEgaW4gbCkiZGVmYXVsdCIhPT1xJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxxKSYmUyhiLGwscSk7cmV0dXJuIGgoYixsKSxifSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihsLGIscSxHKXtyZXR1cm4g''@;'; put 'put ''bmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbihwZSxQZSl7ZnVuY3Rpb24gWmUodWUpe3RyeXt2ZShHLm5leHQodWUpKX1jYXRjaCh6ZSl7UGUoemUpfX1mdW5jdGlvbiBxZSh1ZSl7dHJ5e3ZlKEcudGhyb3codWUpKX1jYXRjaCh6ZSl7UGUoemUpfX1mdW5jdGlvbiB2ZSh1ZSl7dWUuZG9u''@;'; put 'put ''ZT9wZSh1ZS52YWx1ZSk6ZnVuY3Rpb24gUShwZSl7cmV0dXJuIHBlIGluc3RhbmNlb2YgcT9wZTpuZXcgcShmdW5jdGlvbihQZSl7UGUocGUpfSl9KHVlLnZhbHVlKS50aGVuKFplLHFlKX12ZSgoRz1HLmFwcGx5KGwsYnx8W10pKS5uZXh0KCkpfSl9LGY9dGhpcyYmdGhpcy5fX2ltcG9ydERl''@;'; put 'put ''ZmF1bHR8fGZ1bmN0aW9uKGwpe3JldHVybiBsJiZsLl9fZXNNb2R1bGU/bDp7ZGVmYXVsdDpsfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZ2V0TGluZUVuZGluZz1qLmlzVGVzdEZpbGU9ai50ZXN0RmlsZVJlZ0V4cD1qLmNyZWF0ZVJlYWRT''@;'; put 'put ''dHJlYW09ai5jcmVhdGVXcml0ZVN0cmVhbT1qLmdldFJlYWxQYXRoPWouYmFzZTY0RW5jb2RlRmlsZT1qLmJhc2U2NEVuY29kZUltYWdlRmlsZT1qLnBhdGhTZXBFc2NhcGVkPWouY29weT1qLm1vdmVGaWxlPWouZ2V0UmVsYXRpdmVQYXRoPWoudW5pZnlGaWxlUGF0aD1qLmRlbGV0ZUZvbGRl''@;'; put 'put ''cj1qLmRlbGV0ZUZpbGU9ai5jcmVhdGVGaWxlPWouY3JlYXRlRm9sZGVyPWoubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWoubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1qLmxpc3RTYXNGaWxlc0luRm9sZGVyPWoubGlzdEluaUZpbGVzSW5Gb2xkZXI9ai5saXN0RmlsZXNJbkZvbGRl''@;'; put 'put ''cj1qLnJlYWRGaWxlQmluYXJ5PWoucmVhZEZpbGU9ai5pc0ZvbGRlcj1qLmZvbGRlckV4aXN0cz1qLmZpbGVFeGlzdHM9dm9pZCAwO2NvbnN0IFQ9ZihkKDU2NzQpKSxBPWYoZCgyNTIwKSksTT1kKDYyNjYpLE89byhkKDI5NzUpKSxEPWQoMzkwMCk7ZnVuY3Rpb24gQihsKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFQuZGVmYXVsdC5wcm9taXNlcy5hY2Nlc3MobCxULmRlZmF1bHQuY29uc3RhbnRzLkZfT0spLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSl9ZnVuY3Rpb24gSChsKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7cmV0dXJuIFQuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShsKX0pfWZ1bmN0aW9uIHoobCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBULmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihsLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihi''@;'; put 'put ''PT5iLmZpbHRlcihxPT4hcS5pc0RpcmVjdG9yeSgpKS5tYXAocT0+cS5uYW1lKSl9KX1mdW5jdGlvbiBYKGwsYj0hMCxxPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFQuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKGwse3dpdGhGaWxlVHlwZXM6''@;'; put 'put ''ITB9KS50aGVuKEc9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKGImJkcuZmlsdGVyKHBlPT5wZS5pc0RpcmVjdG9yeSgpKS5sZW5ndGgpe2xldCBwZT1bXTtyZXR1cm4geWllbGQoMCxNLmFzeW5jRm9yRWFjaCkoRy5maWx0ZXIoUGU9PlBlLmlzRGlyZWN0b3J5KCkpLFBl''@;'; put 'put ''PT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBaZT1QZS5uYW1lO2lmKCFxLmluY2x1ZGVzKFplKSl7Y29uc3QgcWU9QS5kZWZhdWx0LmpvaW4obCxaZSk7cGU9Wy4uLnBlLC4uLih5aWVsZCBYKHFlLGIscSkpLm1hcCh2ZT0+QS5kZWZhdWx0LmpvaW4oWmUsdmUpKV19''@;'; put 'put ''fSkpLFsuLi5HLmZpbHRlcihQZT0+IVBlLmlzRGlyZWN0b3J5KCkpLm1hcChQZT0+UGUubmFtZSksLi4ucGVdfXJldHVybiBHLm1hcChRPT5RLm5hbWUpfSkpfSl9ZnVuY3Rpb24gbmUobCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBULmRlZmF1bHQu''@;'; put 'put ''cHJvbWlzZXMubWtkaXIobCx7cmVjdXJzaXZlOiEwfSl9KX1mdW5jdGlvbiBtZShsLGI9QS5kZWZhdWx0LnNlcCxxPSIvIil7Y29uc3QgRz17dW5peDoiLyIsd2luOiJcXCJ9O2xldCBRPU9iamVjdC5rZXlzKEcpLmZpbmQocGU9PkdbcGVdPT09Yik7aWYoUSl7Y29uc3QgcGU9R1tPYmplY3Qu''@;'; put 'put ''a2V5cyhHKS5maW5kKFBlPT5QZSE9PVEpXTtyZXR1cm4gUT1HW1FdLGwuc3BsaXQocGUpLmpvaW4oUSl9cmV0dXJuIGwuc3BsaXQocSkuam9pbihiKX1qLmZpbGVFeGlzdHM9ZnVuY3Rpb24gRShsKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFQuZGVm''@;'; put 'put ''YXVsdC5wcm9taXNlcy5hY2Nlc3MobCxULmRlZmF1bHQuY29uc3RhbnRzLkZfT0spLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSl9LGouZm9sZGVyRXhpc3RzPUIsai5pc0ZvbGRlcj1mdW5jdGlvbiBGKGwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1''@;'; put 'put ''cm4gVC5kZWZhdWx0LnByb21pc2VzLmxzdGF0KGwpLnRoZW4oYj0+Yi5pc0RpcmVjdG9yeSgpKS5jYXRjaCgoKT0+ITEpfSl9LGoucmVhZEZpbGU9ZnVuY3Rpb24gTihsLGI9InV0ZjgiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFQuZGVmYXVsdC5w''@;'; put 'put ''cm9taXNlcy5yZWFkRmlsZShsLGIpfSl9LGoucmVhZEZpbGVCaW5hcnk9SCxqLmxpc3RGaWxlc0luRm9sZGVyPXosai5saXN0SW5pRmlsZXNJbkZvbGRlcj1mdW5jdGlvbiBaKGwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgeihsKSkuZmls''@;'; put 'put ''dGVyKGI9PmIuZW5kc1dpdGgoIi5pbmkiKSl9KX0sai5saXN0U2FzRmlsZXNJbkZvbGRlcj1mdW5jdGlvbiBVKGwsYj0hMSxxPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIFgobCxiLHEpKS5maWx0ZXIocGU9PnBlLmVuZHNXaXRoKCIu''@;'; put 'put ''c2FzIikpfSl9LGoubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1mdW5jdGlvbiBLKGwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gVC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobCx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oYj0+Yi5maWx0ZXIocT0+''@;'; put 'put ''cS5pc0RpcmVjdG9yeSgpKS5tYXAocT0+cS5uYW1lKSl9KX0sai5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9WCxqLmNyZWF0ZUZvbGRlcj1uZSxqLmNyZWF0ZUZpbGU9ZnVuY3Rpb24gc2UobCxiLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZigo''@;'; put 'put ''bD1tZShsKSkuc3BsaXQoQS5kZWZhdWx0LnNlcCkubGVuZ3RoPjEpe2xldCBHPWwuc3BsaXQoQS5kZWZhdWx0LnNlcCk7Ry5wb3AoKTtjb25zdCBRPUcuam9pbihBLmRlZmF1bHQuc2VwKTsoeWllbGQgQihRKSl8fCh5aWVsZCBuZShRKSl9cmV0dXJuIFQuZGVmYXVsdC5wcm9taXNlcy53cml0''@;'; put 'put ''ZUZpbGUobCxiLHEpfSl9LGouZGVsZXRlRmlsZT1mdW5jdGlvbiBoZShsKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFQuZGVmYXVsdC5yZW1vdmUobCl9KX0sai5kZWxldGVGb2xkZXI9ZnVuY3Rpb24gX2UobCl7cmV0dXJuIEkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBULmRlZmF1bHQucm0obCx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9KX0sai51bmlmeUZpbGVQYXRoPW1lLGouZ2V0UmVsYXRpdmVQYXRoPWZ1bmN0aW9uIEZlKGwsYil7Y29uc3QgcT1sLnNwbGl0KEEuZGVmYXVsdC5zZXApLEc9Yi5zcGxpdChB''@;'; put 'put ''LmRlZmF1bHQuc2VwKTtsZXQgUT1bXSxwZT1bXTtxLmZvckVhY2goKHVlLHplKT0+e3ZvaWQgMCE9PUdbemVdJiZxW3plXT09PUdbemVdP1EucHVzaCh1ZSk6dWUmJnBlLnB1c2godWUpfSk7Y29uc3QgUGU9US5qb2luKEEuZGVmYXVsdC5zZXApLFplPW5ldyBSZWdFeHAoYF4ke0EuZGVmYXVs''@;'; put 'put ''dC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfWApLHFlPW5ldyBSZWdFeHAoYCR7QS5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIil9JGApO3JldHVybihwZS5sZW5ndGg/YC4uJHtBLmRlZmF1bHQuc2VwfWAucmVwZWF0KHBlLmxlbmd0aCk6YC4ke0EuZGVmYXVsdC5zZXB9YCkr''@;'; put 'put ''Yi5yZXBsYWNlKFBlLCIiKS5yZXBsYWNlKFplLCIiKS5yZXBsYWNlKHFlLCIiKX0sai5tb3ZlRmlsZT1mdW5jdGlvbiBSKGwsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBULmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKGwsYil9KX0sai5jb3B5PWZ1''@;'; put 'put ''bmN0aW9uIHMobCxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFQuZGVmYXVsdC5jb3B5KGwsYil9KX0sai5wYXRoU2VwRXNjYXBlZD1BLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSxqLmJhc2U2NEVuY29kZUltYWdlRmlsZT1mdW5j''@;'; put 'put ''dGlvbiB1KGwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gSChsKS50aGVuKGI9PntsZXQgcT1BLmRlZmF1bHQuZXh0bmFtZShsKS5zdWJzdHIoMSl8fCJwbmciO3JldHVybiJzdmciPT09cSYmKHE9InN2Zyt4bWwiKSwiZGF0YTppbWFnZS8iK3ErIjti''@;'; put 'put ''YXNlNjQsIitiLnRvU3RyaW5nKCJiYXNlNjQiKX0pfSl9LGouYmFzZTY0RW5jb2RlRmlsZT1mdW5jdGlvbiB2KGwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gVC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKGwse2VuY29kaW5nOiJiYXNlNjQifSl9''@;'; put 'put ''KX0sai5nZXRSZWFsUGF0aD1mdW5jdGlvbiBwKGwpe3JldHVybiBULmRlZmF1bHQucmVhbHBhdGhTeW5jKGwpfSxqLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uIF8obCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBPLmZpbGVFeGlzdHMo''@;'; put 'put ''bCkpfHwoeWllbGQgTy5jcmVhdGVGaWxlKGwsIiIpKSxULmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0obCx7ZmxhZ3M6ImEifSl9KX0sai5jcmVhdGVSZWFkU3RyZWFtPWw9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFQuZGVmYXVsdC5jcmVhdGVSZWFkU3Ry''@;'; put 'put ''ZWFtKGwpfSksai50ZXN0RmlsZVJlZ0V4cD0vXC50ZXN0XC4oXGQrXC4pP3NhcyQvaSxqLmlzVGVzdEZpbGU9bD0+ai50ZXN0RmlsZVJlZ0V4cC50ZXN0KGwpLGouZ2V0TGluZUVuZGluZz1sPT5uZXcgUmVnRXhwKEQuTGluZUVuZGluZ3MuQ1JMRikudGVzdChsKT9ELkxpbmVFbmRpbmdzLkNS''@;'; put 'put ''TEY6RC5MaW5lRW5kaW5ncy5MRn0sNTYyNjpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZil7cmV0dXJuIGYmJmYuX19lc01vZHVsZT9mOntkZWZhdWx0OmZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRBYnNvbHV0ZVBhdGg9dm9pZCAwO2NvbnN0IGg9UyhkKDI1MjApKSxvPVMoZCg3NDM1KSk7ai5nZXRBYnNvbHV0ZVBhdGg9KGYsVCk9PmguZGVmYXVsdC5pc0Fic29sdXRlKGYpfHwvXn4vLmV4ZWMoZik/aC5kZWZhdWx0Lm5vcm1hbGl6ZShm''@;'; put 'put ''LnJlcGxhY2UoL15+LyxvLmRlZmF1bHQuaG9tZWRpcigpKSk6aC5kZWZhdWx0LmpvaW4oVCxmKX0sMjk3NTpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZixULEEsTSl7dm9pZCAw''@;'; put 'put ''PT09TSYmKE09QSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsTSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVFtBXX19KX06ZnVuY3Rpb24oZixULEEsTSl7dm9pZCAwPT09TSYmKE09QSksZltNXT1UW0FdfSksaD10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rp''@;'; put 'put ''b24oZixUKXtmb3IodmFyIEEgaW4gZikiZGVmYXVsdCIhPT1BJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFQsQSkmJlMoVCxmLEEpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5yZWFkQ3N2PWouY3JlYXRlQ3N2PWou''@;'; put 'put ''dXBkYXRlQ3N2PWouZ2V0TGluZUVuZGluZz1qLnRlc3RGaWxlUmVnRXhwPWouaXNUZXN0RmlsZT1qLmdldFJlYWxQYXRoPWouYmFzZTY0RW5jb2RlRmlsZT1qLmJhc2U2NEVuY29kZUltYWdlRmlsZT1qLmNvcHk9ai5wYXRoU2VwRXNjYXBlZD1qLm1vdmVGaWxlPWoudW5pZnlGaWxlUGF0aD1q''@;'; put 'put ''LmdldFJlbGF0aXZlUGF0aD1qLmRlbGV0ZUZvbGRlcj1qLmRlbGV0ZUZpbGU9ai5jcmVhdGVXcml0ZVN0cmVhbT1qLmNyZWF0ZVJlYWRTdHJlYW09ai5jcmVhdGVGb2xkZXI9ai5jcmVhdGVGaWxlPWoubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWoubGlzdFN1YkZvbGRlcnNJbkZv''@;'; put 'put ''bGRlcj1qLmxpc3RTYXNGaWxlc0luRm9sZGVyPWoubGlzdEluaUZpbGVzSW5Gb2xkZXI9ai5saXN0RmlsZXNJbkZvbGRlcj1qLnJlYWRGaWxlQmluYXJ5PWoucmVhZEZpbGU9ai5pc0ZvbGRlcj1qLmZvbGRlckV4aXN0cz1qLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBvPWQoMTU1OSk7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGosImZpbGVFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmZpbGVFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImZvbGRlckV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZm9s''@;'; put 'put ''ZGVyRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJpc0ZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uaXNGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosInJlYWRGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gby5yZWFkRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwicmVhZEZpbGVCaW5hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnJlYWRGaWxlQmluYXJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJsaXN0RmlsZXNJbkZvbGRlciIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubGlzdEZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImxpc3RJbmlGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5saXN0SW5pRmlsZXNJbkZvbGRlcn19''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwibGlzdFNhc0ZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmxpc3RTYXNGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJsaXN0U3ViRm9sZGVyc0luRm9sZGVyIix7ZW51''@;'; put 'put ''bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5saXN0U3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJsaXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmxpc3RGaWxl''@;'; put 'put ''c0FuZFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiY3JlYXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY3JlYXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiY3JlYXRlRm9sZGVyIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jcmVhdGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImNyZWF0ZVJlYWRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmNyZWF0ZVJlYWRTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGosImNyZWF0ZVdyaXRlU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jcmVhdGVXcml0ZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZGVsZXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVs''@;'; put 'put ''ZXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZGVsZXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWxldGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImdldFJlbGF0aXZlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZ2V0UmVsYXRpdmVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJ1bmlmeUZpbGVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby51bmlmeUZpbGVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJtb3Zl''@;'; put 'put ''RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8ubW92ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosInBhdGhTZXBFc2NhcGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5wYXRoU2VwRXNjYXBlZH19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoaiwiY29weSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY29weX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiYmFzZTY0RW5jb2RlSW1hZ2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5iYXNlNjRFbmNv''@;'; put 'put ''ZGVJbWFnZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImJhc2U2NEVuY29kZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmJhc2U2NEVuY29kZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImdldFJlYWxQYXRoIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5nZXRSZWFsUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiaXNUZXN0RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uaXNUZXN0RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwidGVzdEZp''@;'; put 'put ''bGVSZWdFeHAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnRlc3RGaWxlUmVnRXhwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJnZXRMaW5lRW5kaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5nZXRMaW5lRW5kaW5nfX0pO3Zh''@;'; put 'put ''ciBJPWQoMzkwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosInVwZGF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudXBkYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJjcmVhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBJLmNyZWF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwicmVhZENzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhZENzdn19KSxoKGQoNTYyNiksail9LDI3Nzc6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoubmV3TGluZT1qLmNhcGl0YWxpemVGaXJzdENoYXI9ai5zYW5pdGl6ZVNwZWNpYWxDaGFycz1qLnBhZFdpdGhOdW1iZXI9dm9pZCAwO3ZhciBTPWQoNTMwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosInBhZFdpdGhOdW1iZXIi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLnBhZFdpdGhOdW1iZXJ9fSk7dmFyIGg9ZCg5Mjc1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwic2FuaXRpemVTcGVjaWFsQ2hhcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLnNhbml0aXpl''@;'; put 'put ''U3BlY2lhbENoYXJzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJjYXBpdGFsaXplRmlyc3RDaGFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5jYXBpdGFsaXplRmlyc3RDaGFyfX0pO3ZhciBvPWQoMTYyOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIm5l''@;'; put 'put ''d0xpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLm5ld0xpbmV9fSl9LDUzMDY6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnBhZFdpdGhOdW1iZXI9dm9pZCAwLGoucGFkV2l0''@;'; put 'put ''aE51bWJlcj0oUyxoPTApPT5TPjk/UzpgJHtofSR7U31gfSwxNjI4Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoubmV3TGluZT12b2lkIDAsai5uZXdMaW5lPSgpPT4id2luMzIi''@;'; put 'put ''PT09Uy5wbGF0Zm9ybT8iXFxyXFxuIjoiXFxuIn0sOTI3NToodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouY2FwaXRhbGl6ZUZpcnN0Q2hhcj1qLnNhbml0aXplU3BlY2lhbENoYXJzPXZvaWQgMCxqLnNhbml0''@;'; put 'put ''aXplU3BlY2lhbENoYXJzPWg9PmgucmVwbGFjZSgvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIiksai5jYXBpdGFsaXplRmlyc3RDaGFyPWg9PmguY2hhckF0KDApLnRvVXBwZXJDYXNlKCkraC5z''@;'; put 'put ''bGljZSgxKX0sNjQ2NzpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oQSl7cmV0dXJuIEEmJkEuX19lc01vZHVsZT9BOntkZWZhdWx0OkF9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksai5pc1NwZWNpYWxNaXNzaW5nPWouY2hvaWNlVmFsaWRhdG9yPWouY29uZmlybWF0aW9uVmFsaWRhdG9yPWoudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCBoPVMoZCg0ODEpKTtqLnVybFZhbGlkYXRvcj0oQSxNKT0+ISFoLmRlZmF1bHQuaXNIdHRwVXJpKEEpfHwhIWgu''@;'; put 'put ''ZGVmYXVsdC5pc0h0dHBzVXJpKEEpfHwiIj09PUF8fE0sai5jb25maXJtYXRpb25WYWxpZGF0b3I9QT0+ITA9PT1BfHwhMT09PUEsai5jaG9pY2VWYWxpZGF0b3I9KEEsTSxPKT0+QT4wJiZBPD1NfHxPLGouaXNTcGVjaWFsTWlzc2luZz1BPT4oInN0cmluZyIhPXR5cGVvZiBBfHwhQS5pbmNs''@;'; put 'put ''dWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEEpfSw3NzU3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmdlbmVyYXRlVGltZXN0YW1wPWoudGltZXN0''@;'; put 'put ''YW1wVG9ZWVlZTU1EREhITU1TUz1qLmNvbnZlcnRTZWNvbmRzVG9IbXM9dm9pZCAwO3ZhciBTPWQoMTMwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosImNvbnZlcnRTZWNvbmRzVG9IbXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLmNvbnZlcnRTZWNvbmRzVG9I''@;'; put 'put ''bXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosInRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosImdlbmVyYXRlVGltZXN0''@;'; put 'put ''YW1wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5nZW5lcmF0ZVRpbWVzdGFtcH19KX0sMTMwMjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5jb252ZXJ0U2Vjb25kc1RvSG1z''@;'; put 'put ''PWouZ2VuZXJhdGVUaW1lc3RhbXA9ai50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDtjb25zdCBTPWQoMjc3Nyk7ai50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPShmPURhdGUubm93KCkpPT57Y29uc3QgVD1uZXcgRGF0ZShmKTtyZXR1cm5bVC5nZXRGdWxsWWVhcigpLCgwLFMu''@;'; put 'put ''cGFkV2l0aE51bWJlcikoVC5nZXRNb250aCgpKzEpLCgwLFMucGFkV2l0aE51bWJlcikoVC5nZXREYXRlKCkpXS5qb2luKCIvIikrIiAiK1soMCxTLnBhZFdpdGhOdW1iZXIpKFQuZ2V0SG91cnMoKSksKDAsUy5wYWRXaXRoTnVtYmVyKShULmdldE1pbnV0ZXMoKSksKDAsUy5wYWRXaXRoTnVt''@;'; put 'put ''YmVyKShULmdldFNlY29uZHMoKSldLmpvaW4oIjoiKX0sai5nZW5lcmF0ZVRpbWVzdGFtcD0oZj0iIixUKT0+e2NvbnN0IEE9bmV3IERhdGU7bGV0IE09W0EuZ2V0VVRDRnVsbFllYXIoKSxBLmdldFVUQ01vbnRoKCkrMSxBLmdldFVUQ0RhdGUoKSxBLmdldFVUQ0hvdXJzKCksQS5nZXRVVENN''@;'; put 'put ''aW51dGVzKCksQS5nZXRVVENTZWNvbmRzKCldO3JldHVybiBNPU0ubWFwKE89PigwLFMucGFkV2l0aE51bWJlcikoTykpLFQmJmYmJlQ8TS5sZW5ndGgmJlQ+PTAmJk0uc3BsaWNlKFQsMCxmKSxNPU0uam9pbihUPyIiOmYpLE19LGouY29udmVydFNlY29uZHNUb0htcz1mPT57aWYoIWYpcmV0''@;'; put 'put ''dXJuIjAgc2Vjb25kIjtjb25zdCBUPU1hdGguZmxvb3IoZi82MCksQT1NYXRoLmZsb29yKFQvNjApLE09VCU2MCxPPWYlNjA7bGV0IEQ9IiI7cmV0dXJuIEE+MCYmKEQ9QSsiIGhvdXIiKyhBPjE/InMiOiIiKSksTT4wJiYoRCs9YCR7RD8iLCAiOiIifSR7TX0gbWludXRlJHtNPjE/InMiOiIi''@;'; put 'put ''fWApLE8+MCYmKEQrPWAke0Q/IiwgIjoiIn0ke099IHNlY29uZCR7Tz4xPyJzIjoiIn1gKSxEfX0sODIzOToodGUsaik9PnsidXNlIHN0cmljdCI7dmFyIFM7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQ29uZmlnVHlwZXM9dm9pZCAwLChTPWou''@;'; put 'put ''Q29uZmlnVHlwZXN8fChqLkNvbmZpZ1R5cGVzPXt9KSkuQnVpbGQ9ImJ1aWxkQ29uZmlnIixTLlNlcnZpY2U9InNlcnZpY2VDb25maWciLFMuSm9iPSJqb2JDb25maWciLFMuVGVzdD0idGVzdENvbmZpZyIsUy5Eb2M9ImRvY0NvbmZpZyIsUy5EZXBsb3k9ImRlcGxveUNvbmZpZyIsUy5TdHJl''@;'; put 'put ''YW09InN0cmVhbUNvbmZpZyIsUy5BdXRoPSJhdXRoQ29uZmlnIn0sMjQyNzoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxODk6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShq''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzY5MjoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NzI5Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUztPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksai5MaW5lRW5kaW5ncz12b2lkIDAsKFM9ai5MaW5lRW5kaW5nc3x8KGouTGluZUVuZGluZ3M9e30pKS5DUkxGPSJcclxuIixTLkxGPSJcbiJ9LDY5Mzk6KHRlLGopPT57InVzZSBzdHJpY3QiO3ZhciBTO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxqLk1lbWJlclR5cGU9dm9pZCAwLChTPWouTWVtYmVyVHlwZXx8KGouTWVtYmVyVHlwZT17fSkpLnNlcnZpY2U9InNlcnZpY2UiLFMuZmlsZT0iZmlsZSIsUy5mb2xkZXI9ImZvbGRlciJ9LDMzMjc6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTE2NToodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzOTAwOmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRo''@;'; put 'put ''aXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihvLEksZixUKXt2b2lkIDA9PT1UJiYoVD1mKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobyxULHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJW2ZdfX0pfTpmdW5jdGlvbihvLEksZixUKXt2b2lk''@;'; put 'put ''IDA9PT1UJiYoVD1mKSxvW1RdPUlbZl19KSxoPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihvLEkpe2Zvcih2YXIgZiBpbiBvKSJkZWZhdWx0IiE9PWYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSSxmKSYmUyhJLG8sZil9O09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxoKGQoODIzOSksaiksaChkKDI0MjcpLGopLGgoZCgxODkpLGopLGgoZCgzNjkyKSxqKSxoKGQoNjkzOSksaiksaChkKDMzMjcpLGopLGgoZCg1MTY1KSxqKSxoKGQoNDA2OSksaiksaChkKDg5MzIpLGopLGgoZCg0KSxqKSxoKGQo''@;'; put 'put ''MjAxNSksaiksaChkKDg1MTUpLGopLGgoZCg1MzEzKSxqKSxoKGQoODk3OSksaiksaChkKDQ3MjkpLGopfSw0MDY5Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5pc01hY3JvVmFycz12b2lkIDAsai5pc01h''@;'; put 'put ''Y3JvVmFycz1TPT5TJiYib2JqZWN0Ij09dHlwZW9mIFMubWFjcm9WYXJzJiYhQXJyYXkuaXNBcnJheShTLm1hY3JvVmFycyl9LDg5MzI6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDoodGUsaik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIFM7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU0FTSnNGaWxlVHlwZT12b2lkIDAsKFM9ai5TQVNKc0ZpbGVUeXBlfHwoai5TQVNKc0ZpbGVUeXBlPXt9KSkuc2VydmljZT0iU2VydmljZSIsUy5qb2I9IkpvYiIsUy50ZXN0''@;'; put 'put ''PSJUZXN0IixTLmZpbGU9IkZpbGUifSwyMDE1Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTU6KHRlLGopPT57InVzZSBzdHJpY3QiO3ZhciBTO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KSxqLlNlcnZlclR5cGU9dm9pZCAwLChTPWouU2VydmVyVHlwZXx8KGouU2VydmVyVHlwZT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLFMuU2FzOT0iU0FTOSIsUy5TYXNqcz0iU0FTSlMifSw1MzEzOih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg5Nzk6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouVGFyZ2V0PXZvaWQgMDtjb25zdCBTPWQoODIzOSksaD1kKDg1MTUpLG89ZCg2NzgxKTtq''@;'; put 'put ''LlRhcmdldD1jbGFzcyBJe2NvbnN0cnVjdG9yKFQsQT17fSl7dGhpcy5fc2VydmVyVHlwZT1oLlNlcnZlclR5cGUuU2FzVml5YSx0aGlzLmdldENvbmZpZz0oTSxPKT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2NvbmZpZ1tNXXx8e30pLE9bTV0pO3RyeXtpZighVCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0OiBJbnB1dCBKU09OIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3RoaXMuX2NvbmZpZz1BLHRoaXMuX25hbWU9KDAsby52YWxpZGF0ZVRhcmdldE5hbWUpKFQubmFtZSksdGhpcy5fc2VydmVyVXJsPSgwLG8udmFsaWRhdGVTZXJ2ZXJVcmwp''@;'; put 'put ''KFQuc2VydmVyVXJsKSx0aGlzLl9zZXJ2ZXJUeXBlPSgwLG8udmFsaWRhdGVTZXJ2ZXJUeXBlKShULnNlcnZlclR5cGUpLHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zPSgwLG8udmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucykoVC5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5fYXBwTG9jPSgwLG8u''@;'; put 'put ''dmFsaWRhdGVBcHBMb2MpKFQuYXBwTG9jKSx0aGlzLl9jb250ZXh0TmFtZT0oMCxvLnZhbGlkYXRlQ29udGV4dE5hbWUpKFQuY29udGV4dE5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc2VydmVyTmFtZT0oMCxvLnZhbGlkYXRlU2VydmVyTmFtZSkoVC5zZXJ2ZXJOYW1lLHRoaXMuX3Nl''@;'; put 'put ''cnZlclR5cGUpLHRoaXMuX3N5bmNGb2xkZXI9KDAsby52YWxpZGF0ZVN5bmNGb2xkZXIpKFQuc3luY0ZvbGRlciksdGhpcy5fcmVwb3NpdG9yeU5hbWU9KDAsby52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lKShULnJlcG9zaXRvcnlOYW1lLHRoaXMuX3NlcnZlclR5cGUpLFQuZG9jQ29uZmlnJiYo''@;'; put 'put ''dGhpcy5fZG9jQ29uZmlnPSgwLG8udmFsaWRhdGVEb2NDb25maWcpKHRoaXMuZ2V0Q29uZmlnKFMuQ29uZmlnVHlwZXMuRG9jLFQpKSksVC5hdXRoQ29uZmlnJiYodGhpcy5fYXV0aENvbmZpZz0oMCxvLnZhbGlkYXRlQXV0aENvbmZpZykodGhpcy5nZXRDb25maWcoUy5Db25maWdUeXBlcy5B''@;'; put 'put ''dXRoLFQpKSksVC5hdXRoQ29uZmlnU2FzOSYmKHRoaXMuX2F1dGhDb25maWdTYXM5PSgwLG8udmFsaWRhdGVBdXRoQ29uZmlnU2FzOSkoVC5hdXRoQ29uZmlnU2FzOSkpLFQuYnVpbGRDb25maWcmJih0aGlzLl9idWlsZENvbmZpZz0oMCxvLnZhbGlkYXRlQnVpbGRDb25maWcpKHRoaXMuZ2V0''@;'; put 'put ''Q29uZmlnKFMuQ29uZmlnVHlwZXMuQnVpbGQsVCksdGhpcy5fbmFtZSkpLHRoaXMuX2RlcGxveUNvbmZpZz0oMCxvLnZhbGlkYXRlRGVwbG95Q29uZmlnKShULmRlcGxveUNvbmZpZz90aGlzLmdldENvbmZpZyhTLkNvbmZpZ1R5cGVzLkRlcGxveSxUKTp7ZGVwbG95U2VydmljZVBhY2s6ITAs''@;'; put 'put ''ZGVwbG95U2NyaXB0czpbXX0pLFQuc2VydmljZUNvbmZpZyYmKHRoaXMuX3NlcnZpY2VDb25maWc9KDAsby52YWxpZGF0ZVNlcnZpY2VDb25maWcpKHRoaXMuZ2V0Q29uZmlnKFMuQ29uZmlnVHlwZXMuU2VydmljZSxUKSkpLFQuam9iQ29uZmlnJiYodGhpcy5fam9iQ29uZmlnPSgwLG8udmFs''@;'; put 'put ''aWRhdGVKb2JDb25maWcpKHRoaXMuZ2V0Q29uZmlnKFMuQ29uZmlnVHlwZXMuSm9iLFQpKSksVC5zdHJlYW1Db25maWcmJih0aGlzLl9zdHJlYW1Db25maWc9KDAsby52YWxpZGF0ZVN0cmVhbUNvbmZpZykodGhpcy5nZXRDb25maWcoUy5Db25maWdUeXBlcy5TdHJlYW0sVCkpKSxULnRlc3RD''@;'; put 'put ''b25maWcmJih0aGlzLl90ZXN0Q29uZmlnPSgwLG8udmFsaWRhdGVUZXN0Q29uZmlnKSh0aGlzLmdldENvbmZpZyhTLkNvbmZpZ1R5cGVzLlRlc3QsVCkpKSxULm1hY3JvRm9sZGVycyYmVC5tYWNyb0ZvbGRlcnMubGVuZ3RoJiYodGhpcy5fbWFjcm9Gb2xkZXJzPVQubWFjcm9Gb2xkZXJzKSxU''@;'; put 'put ''LnByb2dyYW1Gb2xkZXJzJiZULnByb2dyYW1Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX3Byb2dyYW1Gb2xkZXJzPVQucHJvZ3JhbUZvbGRlcnMpLFQuYmluYXJ5Rm9sZGVycyYmVC5iaW5hcnlGb2xkZXJzLmxlbmd0aCYmKHRoaXMuX2JpbmFyeUZvbGRlcnM9VC5iaW5hcnlGb2xkZXJzKSxULnN5''@;'; put 'put ''bmNEaXJlY3RvcmllcyYmVC5zeW5jRGlyZWN0b3JpZXMubGVuZ3RoJiYodGhpcy5fc3luY0RpcmVjdG9yaWVzPSgwLG8udmFsaWRhdGVTeW5jRGlyZWN0b3JpZXMpKFQuc3luY0RpcmVjdG9yaWVzKSksVC5zYXNqc0J1aWxkRm9sZGVyJiYodGhpcy5fc2FzanNCdWlsZEZvbGRlcj0oMCxvLnZh''@;'; put 'put ''bGlkYXRlU2FzanNCdWlsZEZvbGRlcikoVC5zYXNqc0J1aWxkRm9sZGVyKSksVC5zYXNqc1Jlc3VsdHNGb2xkZXImJih0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXI9KDAsby52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcikoVC5zYXNqc1Jlc3VsdHNGb2xkZXIpKX1jYXRjaChNKXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgdGFyZ2V0OiAke00ubWVzc2FnZX1gKX19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1nZXQgc2VydmVyVXJsKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH1nZXQgc2VydmVyVHlwZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJUeXBlfWdldCBodHRw''@;'; put 'put ''c0FnZW50T3B0aW9ucygpe3JldHVybiB0aGlzLl9odHRwc0FnZW50T3B0aW9uc31nZXQgYXBwTG9jKCl7cmV0dXJuIHRoaXMuX2FwcExvY31nZXQgZG9jQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ31nZXQgYXV0aENvbmZpZygpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnfWdldCBh''@;'; put 'put ''dXRoQ29uZmlnU2FzOSgpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnU2FzOX1nZXQgYnVpbGRDb25maWcoKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9Z2V0IGRlcGxveUNvbmZpZygpe3JldHVybiB0aGlzLl9kZXBsb3lDb25maWd9Z2V0IHNlcnZpY2VDb25maWcoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''c2VydmljZUNvbmZpZ31nZXQgam9iQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2pvYkNvbmZpZ31nZXQgc3RyZWFtQ29uZmlnKCl7cmV0dXJuIHRoaXMuX3N0cmVhbUNvbmZpZ31nZXQgbWFjcm9Gb2xkZXJzKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc31nZXQgcHJvZ3JhbUZvbGRlcnMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcHJvZ3JhbUZvbGRlcnN9Z2V0IGJpbmFyeUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fYmluYXJ5Rm9sZGVyc31nZXQgY29udGV4dE5hbWUoKXtyZXR1cm4gdGhpcy5fY29udGV4dE5hbWV9Z2V0IHNlcnZlck5hbWUoKXtyZXR1cm4gdGhpcy5fc2VydmVyTmFtZX1nZXQgcmVw''@;'; put 'put ''b3NpdG9yeU5hbWUoKXtyZXR1cm4gdGhpcy5fcmVwb3NpdG9yeU5hbWV9Z2V0IHRlc3RDb25maWcoKXtyZXR1cm4gdGhpcy5fdGVzdENvbmZpZ31nZXQgc3luY0ZvbGRlcigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfWdldCBzeW5jRGlyZWN0b3JpZXMoKXtyZXR1cm4gdGhpcy5fc3luY0Rp''@;'; put 'put ''cmVjdG9yaWVzfWdldCBzYXNqc0J1aWxkRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXJ9Z2V0IHNhc2pzUmVzdWx0c0ZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXJ9dG9Kc29uKFQ9ITApe3ZhciBBLE0sTztjb25zdCBEPXtuYW1lOnRoaXMubmFt''@;'; put 'put ''ZSxzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwsc2VydmVyVHlwZTp0aGlzLnNlcnZlclR5cGUsaHR0cHNBZ2VudE9wdGlvbnM6dGhpcy5odHRwc0FnZW50T3B0aW9ucyxhcHBMb2M6dGhpcy5hcHBMb2MsZG9jQ29uZmlnOnRoaXMuZG9jQ29uZmlnLGRlcGxveUNvbmZpZzp0aGlzLmRlcGxveUNv''@;'; put 'put ''bmZpZ307cmV0dXJuIShudWxsPT09KEE9dGhpcy5tYWNyb0ZvbGRlcnMpfHx2b2lkIDA9PT1BKSYmQS5sZW5ndGgmJihELm1hY3JvRm9sZGVycz10aGlzLm1hY3JvRm9sZGVycyksIShudWxsPT09KE09dGhpcy5wcm9ncmFtRm9sZGVycyl8fHZvaWQgMD09PU0pJiZNLmxlbmd0aCYmKEQucHJv''@;'; put 'put ''Z3JhbUZvbGRlcnM9dGhpcy5wcm9ncmFtRm9sZGVycyksIShudWxsPT09KE89dGhpcy5iaW5hcnlGb2xkZXJzKXx8dm9pZCAwPT09TykmJk8ubGVuZ3RoJiYoRC5iaW5hcnlGb2xkZXJzPXRoaXMuYmluYXJ5Rm9sZGVycyksdGhpcy5hdXRoQ29uZmlnJiYoRC5hdXRoQ29uZmlnPXRoaXMuYXV0''@;'; put 'put ''aENvbmZpZyksdGhpcy5hdXRoQ29uZmlnU2FzOSYmKEQuYXV0aENvbmZpZ1Nhczk9dGhpcy5hdXRoQ29uZmlnU2FzOSksdGhpcy5zYXNqc0J1aWxkRm9sZGVyP0Quc2FzanNCdWlsZEZvbGRlcj10aGlzLnNhc2pzQnVpbGRGb2xkZXI6VCYmKEQuc2FzanNCdWlsZEZvbGRlcj1vLkRFRkFVTFRf''@;'; put 'put ''U0FTSlNfQlVJTERfRk9MREVSKSx0aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcj9ELnNhc2pzUmVzdWx0c0ZvbGRlcj10aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcjpUJiYoRC5zYXNqc1Jlc3VsdHNGb2xkZXI9by5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSKSx0aGlzLnN5bmNEaXJlY3Rvcmll''@;'; put 'put ''cz9ELnN5bmNEaXJlY3Rvcmllcz10aGlzLnN5bmNEaXJlY3RvcmllczpUJiYoRC5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/RC5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOlQmJihELmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixi''@;'; put 'put ''dWlsZE91dHB1dEZpbGVOYW1lOmAke3RoaXMubmFtZX0uc2FzYCxtYWNyb1ZhcnM6e319KSx0aGlzLmpvYkNvbmZpZz9ELmpvYkNvbmZpZz10aGlzLmpvYkNvbmZpZzpUJiYoRC5qb2JDb25maWc9e2pvYkZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJz''@;'; put 'put ''Ont9fSksdGhpcy5zZXJ2aWNlQ29uZmlnP0Quc2VydmljZUNvbmZpZz10aGlzLnNlcnZpY2VDb25maWc6VCYmKEQuc2VydmljZUNvbmZpZz17c2VydmljZUZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zdHJlYW1Db25maWc/RC5z''@;'; put 'put ''dHJlYW1Db25maWc9dGhpcy5zdHJlYW1Db25maWc6VCYmKEQuc3RyZWFtQ29uZmlnPXtzdHJlYW1XZWJGb2xkZXI6IiIsc3RyZWFtV2ViOiExLHdlYlNvdXJjZVBhdGg6IiIsc3RyZWFtU2VydmljZU5hbWU6IiIsYXNzZXRQYXRoczpbXX0pLHRoaXMudGVzdENvbmZpZz9ELnRlc3RDb25maWc9''@;'; put 'put ''dGhpcy50ZXN0Q29uZmlnOlQmJihELnRlc3RDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fSx0ZXN0U2V0VXA6IiIsdGVzdFRlYXJEb3duOiIifSksdGhpcy5zZXJ2ZXJUeXBlPT09aC5TZXJ2ZXJUeXBlLlNhc1ZpeWE/RC5jb250ZXh0TmFtZT10aGlz''@;'; put 'put ''LmNvbnRleHROYW1lOnRoaXMuc2VydmVyVHlwZT09PWguU2VydmVyVHlwZS5TYXM5JiYoRC5zZXJ2ZXJOYW1lPXRoaXMuc2VydmVyTmFtZSxELnJlcG9zaXRvcnlOYW1lPXRoaXMucmVwb3NpdG9yeU5hbWUpLER9fX0sNjc4MTpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10''@;'; put 'put ''aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0OnN9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1qLnZhbGlkYXRl''@;'; put 'put ''U2FzanNCdWlsZEZvbGRlcj1qLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPWoudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1qLnZhbGlkYXRlU3luY0ZvbGRlcj1qLnZhbGlkYXRlU2VydmVyTmFtZT1qLnZhbGlkYXRlQ29udGV4dE5hbWU9ai52YWxpZGF0ZVN0cmVhbUNvbmZpZz1qLnZhbGlkYXRl''@;'; put 'put ''RGVwbG95Q29uZmlnPWoudmFsaWRhdGVKb2JDb25maWc9ai52YWxpZGF0ZVRlc3RDb25maWc9ai52YWxpZGF0ZVNlcnZpY2VDb25maWc9ai52YWxpZGF0ZUJ1aWxkQ29uZmlnPWoudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1qLnZhbGlkYXRlQXV0aENvbmZpZz1qLnZhbGlkYXRlRG9jQ29uZmln''@;'; put 'put ''PWoudmFsaWRhdGVBcHBMb2M9ai52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPWoudmFsaWRhdGVTZXJ2ZXJVcmw9ai52YWxpZGF0ZVRhcmdldE5hbWU9ai52YWxpZGF0ZVNlcnZlclR5cGU9ai5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSPWouREVGQVVMVF9TQVNKU19CVUlMRF9GT0xE''@;'; put 'put ''RVI9dm9pZCAwO2NvbnN0IGg9UyhkKDQ4MSkpLG89ZCgzOTAwKTtqLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPSJzYXNqc2J1aWxkIixqLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9InNhc2pzcmVzdWx0cyIsai52YWxpZGF0ZVNlcnZlclR5cGU9cz0+e2lmKCFzKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogYHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihzIT09by5TZXJ2ZXJUeXBlLlNhczkmJnMhPT1vLlNlcnZlclR5cGUuU2FzVml5YSYmcyE9PW8uU2VydmVyVHlwZS5TYXNqcyl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''YEludmFsaWQgc2VydmVyIHR5cGU6IFN1cHBvcnRlZCB2YWx1ZXMgZm9yICBcYHNlcnZlclR5cGVcYCBhcmUgJHtvLlNlcnZlclR5cGUuU2FzVml5YX0sICR7by5TZXJ2ZXJUeXBlLlNhczl9IGFuZCAke28uU2VydmVyVHlwZS5TYXNqc30uYCk7cmV0dXJuIHN9LGoudmFsaWRhdGVUYXJnZXRO''@;'; put 'put ''YW1lPXM9PntpZighcyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKHMudHJpbSgpLmluY2x1ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFt''@;'; put 'put ''ZWAgY2Fubm90IGluY2x1ZGUgc3BhY2VzLiIpO2lmKCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QocykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgZGFzaGVzLiIpO3JldHVy''@;'; put 'put ''biBzfSxqLnZhbGlkYXRlU2VydmVyVXJsPXM9PntpZihudWxsPT1zJiYocz0iIiksIiIhPT1zJiYhaC5kZWZhdWx0LmlzSHR0cFVyaShzKSYmIWguZGVmYXVsdC5pc0h0dHBzVXJpKHMpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBgc2VydmVyVXJsYCBzaG91bGQgZWl0''@;'; put 'put ''aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKTtyZXR1cm4gc30sai52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPXM9PntpZihzKXtpZigib2JqZWN0IiE9dHlwZW9mIHMpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYW4gb2JqZWN0IG9mIGBIdHRwc0FnZW50T3B0aW9uc2AiKTtpZihudWxsPT1zLmFsbG93SW5zZWN1cmVSZXF1ZXN0cylzLmFsbG93SW5zZWN1cmVSZXF1ZXN0cz0h''@;'; put 'put ''MTtlbHNlIGlmKCJib29sZWFuIiE9dHlwZW9mIHMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zLmFsbG93SW5zZWN1cmVSZXF1ZXN0c2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhIGJvb2xlYW4i''@;'; put 'put ''KTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHMuY2FQYXRoJiYocy5jYVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHMua2V5UGF0aCYmKHMua2V5UGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2Ygcy5jZXJ0UGF0aCYmKHMuY2VydFBhdGg9dm9pZCAwKSxzfX0sai52YWxpZGF0ZUFw''@;'; put 'put ''cExvYz1zPT57aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighcy5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFw''@;'; put 'put ''cExvY2AgbXVzdCBzdGFydCB3aXRoIGEgYC9gLiIpO3JldHVybiBzfSxqLnZhbGlkYXRlRG9jQ29uZmlnPXM9PntpZihzfHwocz17fSksImJvb2xlYW4iIT10eXBlb2Ygcy5kaXNwbGF5TWFjcm9Db3JlJiYocy5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCksImJvb2xlYW4iIT10eXBlb2Ygcy5l''@;'; put 'put ''bmFibGVMaW5lYWdlJiYocy5lbmFibGVMaW5lYWdlPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBzLm91dERpcmVjdG9yeSYmKHMub3V0RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBzLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PXMuZGF0YUNvbnRyb2xsZXJVcmwmJiFo''@;'; put 'put ''LmRlZmF1bHQuaXNIdHRwVXJpKHMuZGF0YUNvbnRyb2xsZXJVcmwpJiYhaC5kZWZhdWx0LmlzSHR0cHNVcmkocy5kYXRhQ29udHJvbGxlclVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxlclVybGAgc2hvdWxkIGVpdGhlciBi''@;'; put 'put ''ZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIil9ZWxzZSBzLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4gc30sai52YWxpZGF0ZUF1dGhDb25maWc9cz0+e2lmKCFzKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHN9LGoudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1zPT57aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiBKU09OIGNhbm5v''@;'; put 'put ''dCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighcy51c2VyTmFtZXx8IXMucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3JldHVybiBzfSxqLnZhbGlkYXRlQnVp''@;'; put 'put ''bGRDb25maWc9KHMsdSk9PntpZighcyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcy5idWlsZE91dHB1dEZpbGVOYW1lfHwocy5idWlsZE91dHB1dEZpbGVOYW1lPWAke3V9LnNhc2ApLHMu''@;'; put 'put ''aW5pdFByb2dyYW18fChzLmluaXRQcm9ncmFtPSIiKSxzLnRlcm1Qcm9ncmFtfHwocy50ZXJtUHJvZ3JhbT0iIikscy5tYWNyb1ZhcnN8fChzLm1hY3JvVmFycz17fSksc30sai52YWxpZGF0ZVNlcnZpY2VDb25maWc9cz0+e2lmKCFzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2aWNl''@;'; put 'put ''IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHMuaW5pdFByb2dyYW18fChzLmluaXRQcm9ncmFtPSIiKSxzLnRlcm1Qcm9ncmFtfHwocy50ZXJtUHJvZ3JhbT0iIikscy5zZXJ2aWNlRm9sZGVyc3x8KHMuc2VydmljZUZvbGRlcnM9W10pLHMubWFj''@;'; put 'put ''cm9WYXJzfHwocy5tYWNyb1ZhcnM9e30pLHN9LGoudmFsaWRhdGVUZXN0Q29uZmlnPXM9PntpZighcyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGVzdCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBzLmluaXRQcm9ncmFtfHwocy5pbml0UHJv''@;'; put 'put ''Z3JhbT0iIikscy50ZXJtUHJvZ3JhbXx8KHMudGVybVByb2dyYW09IiIpLHMubWFjcm9WYXJzfHwocy5tYWNyb1ZhcnM9e30pLHMudGVzdFNldFVwfHwocy50ZXN0U2V0VXA9IiIpLHMudGVzdFRlYXJEb3dufHwocy50ZXN0VGVhckRvd249IiIpLHN9LGoudmFsaWRhdGVKb2JDb25maWc9cz0+''@;'; put 'put ''e2lmKCFzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBqb2IgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcy5pbml0UHJvZ3JhbXx8KHMuaW5pdFByb2dyYW09IiIpLHMudGVybVByb2dyYW18fChzLnRlcm1Qcm9ncmFtPSIiKSxzLmpvYkZvbGRl''@;'; put 'put ''cnN8fChzLmpvYkZvbGRlcnM9W10pLHMubWFjcm9WYXJzfHwocy5tYWNyb1ZhcnM9e30pLHN9LGoudmFsaWRhdGVEZXBsb3lDb25maWc9cz0+e2lmKCFzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkZXBsb3kgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTty''@;'; put 'put ''ZXR1cm4gcy5kZXBsb3lTZXJ2aWNlUGFjaz0hIXMuZGVwbG95U2VydmljZVBhY2sscy5kZXBsb3lTY3JpcHRzfHwocy5kZXBsb3lTY3JpcHRzPVtdKSxzfSxqLnZhbGlkYXRlU3RyZWFtQ29uZmlnPXM9PntpZighcyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogSlNP''@;'; put 'put ''TiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoITAhPT1zLnN0cmVhbVdlYiYmITEhPT1zLnN0cmVhbVdlYil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xlYW4gdmFsdWUuIik7aWYocy5zdHJl''@;'; put 'put ''YW1XZWImJiFzLnN0cmVhbVdlYkZvbGRlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYkZvbGRlcmAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUuIik7aWYocy5zdHJlYW1XZWImJiFz''@;'; put 'put ''LndlYlNvdXJjZVBhdGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJTb3VyY2VQYXRoYCBzaG91bGQgY29udGFpbiB0aGUgcGF0aCB0byB5b3VyIGZyb250ZW5kIGFwcGxpY2F0aW9uIGVnIGJ1aWxkLCBkaXN0LCBvciBzcmMuIik7cmV0dXJuIHMuc3RyZWFt''@;'; put 'put ''TG9nbyYmInN0cmluZyIhPXR5cGVvZiBzLnN0cmVhbUxvZ28mJihzLnN0cmVhbUxvZ289dm9pZCAwKSxzLmFzc2V0UGF0aHN8fChzLmFzc2V0UGF0aHM9W10pLHMuc3RyZWFtU2VydmljZU5hbWV8fChzLnN0cmVhbVNlcnZpY2VOYW1lPSJjbGlja21lIiksc30sai52YWxpZGF0ZUNvbnRleHRO''@;'; put 'put ''YW1lPShzLHUpPT51IT09by5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fHM/czoiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IixqLnZhbGlkYXRlU2VydmVyTmFtZT0ocyx1KT0+dSE9PW8uU2VydmVyVHlwZS5TYXM5fHxzP3M6IlNBU0FwcCIsai52YWxpZGF0ZVN5bmNGb2xkZXI9cz0+''@;'; put 'put ''e2lmKCJzdHJpbmciPT10eXBlb2YgcyYmcylyZXR1cm4gc30sai52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPShzLHUpPT51IT09by5TZXJ2ZXJUeXBlLlNhczl8fHM/czoiRm91bmRhdGlvbiIsai52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1zPT57aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJJbnZh''@;'; put 'put ''bGlkIHN5bmNEaXJlY3RvcmllcyBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBzLmZvckVhY2godT0+e2lmKCF1LmxvY2FsfHwhdS5yZW1vdGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcnkgY29uZmlnOiB2YWx1ZXMgb2Yg''@;'; put 'put ''cHJvcGVydHkgJ2xvY2FsJyBhbmQgJ3JlbW90ZSBjYW4gbm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCIpfSksc30sai52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9cz0+e2lmKCJzdHJpbmciIT10eXBlb2Ygcyl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBl''@;'; put 'put ''b2Ygc30pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNCdWlsZEZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIHN8fGouREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVJ9LGoudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9cz0+e2lmKCJzdHJp''@;'; put 'put ''bmciIT10eXBlb2Ygcyl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2Ygc30pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNSZXN1bHRzRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4gc3x8ai5ERUZBVUxU''@;'; put 'put ''X1NBU0pTX1JFU1VMVFNfRk9MREVSfX0sMjkyNzpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg3NjQpLkJ1ZmZlcixoPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihBKXtyZXR1cm4gQSYmQS5fX2VzTW9kdWxlP0E6e2RlZmF1bHQ6QX19O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmRlY29kZUZyb21CYXNlNjQ9ai5lbmNvZGVUb0Jhc2U2ND12b2lkIDA7Y29uc3Qgbz1oKGQoNTgzNSkpLEk9IntzYXNqc19lbmNvZGVkfSI7ai5lbmNvZGVUb0Jhc2U2ND1BPT57Y29uc3QgTT1vLmRlZmF1bHQu''@;'; put 'put ''cmFuZG9tQnl0ZXMoMTAwKS50b1N0cmluZygiaGV4IiksTz1TLmZyb20oTStBKS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIEkrT30sai5kZWNvZGVGcm9tQmFzZTY0PUE9PkEuc3RhcnRzV2l0aChJKT8oQT1BLnJlcGxhY2UoL157c2FzanNfZW5jb2RlZH0vLCIiKSxTLmZyb20oQSwiYmFz''@;'; put 'put ''ZTY0IikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjAwKSk6QX0sNTgxOih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5ieXRlc1RvU2l6ZT12b2lkIDAsai5ieXRlc1RvU2l6ZT0oUyxoPTEsbz0xMDk5NTExNjI3''@;'; put 'put ''Nzc2KT0+e2lmKDA9PT1TKXJldHVybiIwIEIiO1M9Uz5vP286Uztjb25zdCBUPWg8MD8wOmgsQT1NYXRoLmZsb29yKE1hdGgubG9nKFMpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oUy9NYXRoLnBvdygxMDI0LEEpKS50b0ZpeGVkKFQpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW0Fd''@;'; put 'put ''fX0sODY1MzoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouY2h1bms9dm9pZCAwLGouY2h1bms9ZnVuY3Rpb24gZChTLGg9MjIwKXtyZXR1cm4gUy5sZW5ndGg8PWg/W1NdOihTLm1hdGNoKG5ldyBSZWdFeHAo''@;'; put 'put ''Ii57MSwiK2grIn0iLCJnIikpfHxbXSkuZmlsdGVyKG89PiEhbyl9fSw2NDU3Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5kaWZmPXZvaWQgMCxqLmRpZmY9ZnVuY3Rpb24gZChTLGgpe3JldHVyblsuLi5T''@;'; put 'put ''LmZpbHRlcihmPT4ib2JqZWN0Ij09dHlwZW9mIGY/IUpTT04uc3RyaW5naWZ5KGgpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KGYpKTohaC5pbmNsdWRlcyhmKSksLi4uaC5maWx0ZXIoZj0+Im9iamVjdCI9PXR5cGVvZiBmPyFKU09OLnN0cmluZ2lmeShTKS5pbmNsdWRlcyhKU09OLnN0cmlu''@;'; put 'put ''Z2lmeShmKSk6IVMuaW5jbHVkZXMoZikpXX19LDE1Mjk6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmdldEV4ZWN1dG9yUGF0aD12b2lkIDA7Y29uc3QgZD17U0FTVklZQToiL1NBU0pvYkV4ZWN1dGlvbiIs''@;'; put 'put ''U0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8ifTtqLmdldEV4ZWN1dG9yUGF0aD1oPT5oPyhoPWgudG9VcHBlckNhc2UoKSxkW2hdfHwiIik6IiJ9LDMzMTY6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGou''@;'; put 'put ''Z2V0VHJlZUV4YW1wbGU9ai5pc0ZpbGVUcmVlPXZvaWQgMDtjb25zdCBTPWQoMzkwMCk7ai5pc0ZpbGVUcmVlPUE9PkEmJkEubWVtYmVycyYmQXJyYXkuaXNBcnJheShBLm1lbWJlcnMpJiYwPT09QS5tZW1iZXJzLmZpbHRlcihNPT4hbyhNKSYmIUkoTSkmJiFmKE0pKS5sZW5ndGg7Y29uc3Qg''@;'; put 'put ''bz1BPT5BJiYic3RyaW5nIj09dHlwZW9mIEEubmFtZSYmQS50eXBlPT09Uy5NZW1iZXJUeXBlLnNlcnZpY2UmJiJzdHJpbmciPT10eXBlb2YgQS5jb2RlLEk9QT0+QSYmInN0cmluZyI9PXR5cGVvZiBBLm5hbWUmJkEudHlwZT09PVMuTWVtYmVyVHlwZS5maWxlJiYic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IEEuY29kZSxmPUE9PkEmJiJzdHJpbmciPT10eXBlb2YgQS5uYW1lJiZBLnR5cGU9PT1TLk1lbWJlclR5cGUuZm9sZGVyJiZBLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoQS5tZW1iZXJzKSYmMD09PUEubWVtYmVycy5maWx0ZXIoTT0+IW8oTSkmJiFJKE0pJiYhZihNKSkubGVuZ3RoO2ouZ2V0''@;'; put 'put ''VHJlZUV4YW1wbGU9KCk9Pih7bWVtYmVyczpbe25hbWU6ImpvYnMiLHR5cGU6Uy5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToiZXh0cmFjdCIsdHlwZTpTLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJtYWtlZGF0YTEiLHR5cGU6Uy5NZW1iZXJUeXBlLnNlcnZp''@;'; put 'put ''Y2UsY29kZToiJXB1dCBIZWxsbyBXb3JsZCE7In1dfV19XX0pfSw2MjY2OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihELEUsQixGKXt2b2lkIDA9PT1GJiYoRj1CKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoRCxGLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFW0JdfX0pfTpmdW5jdGlvbihELEUsQixGKXt2b2lkIDA9PT1GJiYoRj1CKSxEW0ZdPUVbQl19KSxoPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihELEUpe2Zvcih2YXIgQiBp''@;'; put 'put ''biBEKSJkZWZhdWx0IiE9PUImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxCKSYmUyhFLEQsQil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmNodW5rPWouZGlmZj1qLmJ5dGVzVG9TaXplPWouZ2V0RXhlY3V0b3JQ''@;'; put 'put ''YXRoPWouZGVjb2RlRnJvbUJhc2U2ND1qLmVuY29kZVRvQmFzZTY0PWoudXJsT3JpZ2luPWouZ2VuZXJhdGVQYXRoRm9yU2FzPWouZ2V0TWFjcm9zUGF0aD1qLmVzY2FwZVdpblNsYXNoZXM9ai5pc0xpbnV4PWouaXNXaW5kb3dzPWoudW5pcUFycmF5PWouYXN5bmNGb3JFYWNoPWoudXVpZHY0''@;'; put 'put ''PXZvaWQgMDt2YXIgbz1kKDExMzEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJ1dWlkdjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnV1aWR2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiYXN5bmNGb3JFYWNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gby5hc3luY0ZvckVhY2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosInVuaXFBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8udW5pcUFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJpc1dpbmRvd3MiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmlzV2luZG93c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiaXNMaW51eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uaXNMaW51eH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZXNjYXBlV2luU2xh''@;'; put 'put ''c2hlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZXNjYXBlV2luU2xhc2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZ2V0TWFjcm9zUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZ2V0TWFjcm9zUGF0aH19KSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoaiwiZ2VuZXJhdGVQYXRoRm9yU2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5nZW5lcmF0ZVBhdGhGb3JTYXN9fSksaChkKDMzMTYpLGopO3ZhciBJPWQoOTY1Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosInVybE9yaWdpbiIs''@;'; put 'put ''e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudXJsT3JpZ2lufX0pO3ZhciBmPWQoMjkyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosImVuY29kZVRvQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5lbmNvZGVUb0Jhc2U2NH19KSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZGVjb2RlRnJvbUJhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuZGVjb2RlRnJvbUJhc2U2NH19KTt2YXIgVD1kKDE1MjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJnZXRFeGVjdXRvclBhdGgiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBULmdldEV4ZWN1dG9yUGF0aH19KTt2YXIgQT1kKDU4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosImJ5dGVzVG9TaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQS5ieXRlc1RvU2l6ZX19KTt2YXIgTT1kKDY0''@;'; put 'put ''NTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJkaWZmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTS5kaWZmfX0pO3ZhciBPPWQoODY1Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosImNodW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''Ty5jaHVua319KX0sOTY1MjoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoudXJsT3JpZ2luPXZvaWQgMCxqLnVybE9yaWdpbj1TPT57aWYoIiI9PT1TKXJldHVybiBTO2xldCBoO3RyeXtoPW5ldyBVUkwoUyku''@;'; put 'put ''b3JpZ2lufWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBVUkwuIil9cmV0dXJuIGh9fSwxMTMxOmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBoPWQoNDE1NSksbz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixILHosWil7cmV0dXJuIG5ldyh6fHwoej1Q''@;'; put 'put ''cm9taXNlKSkoZnVuY3Rpb24oSyxYKXtmdW5jdGlvbiBuZShfZSl7dHJ5e2hlKFoubmV4dChfZSkpfWNhdGNoKG1lKXtYKG1lKX19ZnVuY3Rpb24gc2UoX2Upe3RyeXtoZShaLnRocm93KF9lKSl9Y2F0Y2gobWUpe1gobWUpfX1mdW5jdGlvbiBoZShfZSl7X2UuZG9uZT9LKF9lLnZhbHVlKTpm''@;'; put 'put ''dW5jdGlvbiBVKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFgpe1goSyl9KX0oX2UudmFsdWUpLnRoZW4obmUsc2UpfWhlKChaPVouYXBwbHkoTixIfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0''@;'; put 'put ''dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZW5lcmF0ZVBhdGhGb3JTYXM9ai5nZXRNYWNyb3NQYXRoPWouZXNjYXBlV2luU2xhc2hlcz1qLmlzTGludXg9ai5pc1dpbmRvd3M9ai51''@;'; put 'put ''bmlxQXJyYXk9ai51dWlkdjQ9ai5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IGY9SShkKDI1MjApKTtqLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBUKE4sSCl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgej0wO3o8Ti5sZW5ndGg7eisrKXlpZWxkIEgo''@;'; put 'put ''Tlt6XSx6LE4pfSl9LGoudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csTj0+e2NvbnN0IEg9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PU4/SDozJkh8OCkudG9TdHJpbmcoMTYpfSksai51bmlxQXJyYXk9Tj0+''@;'; put 'put ''QXJyYXkuZnJvbShuZXcgU2V0KE4pKSxqLmlzV2luZG93cz0oKT0+IndpbjMyIj09PWgucGxhdGZvcm0sai5pc0xpbnV4PSgpPT4ibGludXgiPT09aC5wbGF0Zm9ybSxqLmVzY2FwZVdpblNsYXNoZXM9Tj0+KDAsai5pc1dpbmRvd3MpKCk/Ti5yZXBsYWNlKC9cXC9nLCJcXFxcIik6TixqLmdl''@;'; put 'put ''dE1hY3Jvc1BhdGg9KCk9PmYuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxqLmdlbmVyYXRlUGF0aEZvclNhcz1OPT5OLnJlcGxhY2UoL1xcL2csIi8iKX0sOTgwOToodGUsaixkKT0+e3ZhciBTPWo7Uy5iaWdudW09ZCg0NTkwKSxTLmRlZmluZT1kKDI1MDApLmRlZmluZSxTLmJh''@;'; put 'put ''c2U9ZCgxOTc5KSxTLmNvbnN0YW50cz1kKDY4MjYpLFMuZGVjb2RlcnM9ZCg4MzA3KSxTLmVuY29kZXJzPWQoNjU3OSl9LDI1MDA6KHRlLGosZCk9Pnt2YXIgUz1kKDk4MDkpLGg9ZCg1NzE3KTtmdW5jdGlvbiBJKGYsVCl7dGhpcy5uYW1lPWYsdGhpcy5ib2R5PVQsdGhpcy5kZWNvZGVycz17''@;'; put 'put ''fSx0aGlzLmVuY29kZXJzPXt9fWouZGVmaW5lPWZ1bmN0aW9uKFQsQSl7cmV0dXJuIG5ldyBJKFQsQSl9LEkucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihUKXt2YXIgQTt0cnl7QT1kKDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0''@;'; put 'put ''eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7QT1mdW5jdGlvbihPKXt0aGlzLl9pbml0TmFtZWQoTyl9fXJldHVybiBoKEEsVCksQS5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihPKXtULmNhbGwodGhpcyxPKX0sbmV3IEEodGhpcyl9LEkucHJvdG90''@;'; put 'put ''eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFQpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFQ9VHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tUXT10aGlzLl9jcmVhdGVOYW1lZChTLmRlY29kZXJzW1RdKSksdGhpcy5kZWNvZGVyc1tUXX0sSS5wcm90b3R5cGUuZGVjb2Rl''@;'; put 'put ''PWZ1bmN0aW9uKFQsQSxNKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihBKS5kZWNvZGUoVCxNKX0sSS5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoVD1UfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1RdPXRoaXMu''@;'; put 'put ''X2NyZWF0ZU5hbWVkKFMuZW5jb2RlcnNbVF0pKSx0aGlzLmVuY29kZXJzW1RdfSxJLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oVCxBLE0pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEEpLmVuY29kZShULE0pfX0sNjYyNToodGUsaixkKT0+e3ZhciBTPWQoNTcxNyksaD1kKDE5NzkpLlJl''@;'; put 'put ''cG9ydGVyLG89ZCg4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gSShULEEpe2guY2FsbCh0aGlzLEEpLG8uaXNCdWZmZXIoVCk/KHRoaXMuYmFzZT1ULHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9VC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiBmKFQsQSl7''@;'; put 'put ''aWYoQXJyYXkuaXNBcnJheShUKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9VC5tYXAoZnVuY3Rpb24oTSl7cmV0dXJuIE0gaW5zdGFuY2VvZiBmfHwoTT1uZXcgZihNLEEpKSx0aGlzLmxlbmd0aCs9TS5sZW5ndGgsTX0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFQpe2lmKCEo''@;'; put 'put ''MDw9VCYmVDw9MjU1KSlyZXR1cm4gQS5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9VCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBUKXRoaXMudmFsdWU9VCx0aGlzLmxlbmd0aD1vLmJ5dGVMZW5ndGgoVCk7ZWxzZXtpZigh''@;'; put 'put ''by5pc0J1ZmZlcihUKSlyZXR1cm4gQS5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgVCk7dGhpcy52YWx1ZT1ULHRoaXMubGVuZ3RoPVQubGVuZ3RofX1TKEksaCksai5DPUksSS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVw''@;'; put 'put ''b3J0ZXI6aC5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sSS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihBKXt2YXIgTT1uZXcgSSh0aGlzLmJhc2UpO3JldHVybiBNLm9mZnNldD1BLm9mZnNldCxNLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1BLm9mZnNldCxoLnByb3Rv''@;'; put 'put ''dHlwZS5yZXN0b3JlLmNhbGwodGhpcyxBLnJlcG9ydGVyKSxNfSxJLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5s''@;'; put 'put ''ZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEF8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sSS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihBLE0pe2lmKCEodGhpcy5vZmZzZXQrQTw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9y''@;'; put 'put ''KE18fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgTz1uZXcgSSh0aGlzLmJhc2UpO3JldHVybiBPLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsTy5vZmZzZXQ9dGhpcy5vZmZzZXQsTy5sZW5ndGg9dGhpcy5vZmZzZXQrQSx0aGlzLm9mZnNldCs9QSxPfSxJLnByb3Rv''@;'; put 'put ''dHlwZS5yYXc9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShBP0Eub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sai5SPWYsZi5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihBLE0pe3JldHVybiBBfHwoQT1uZXcgbyh0aGlzLmxlbmd0aCkpLE18fChNPTApLDA9PT10''@;'; put 'put ''aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKE8pe08uam9pbihBLE0pLE0rPU8ubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9BW01dPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZh''@;'; put 'put ''bHVlP0Eud3JpdGUodGhpcy52YWx1ZSxNKTpvLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoQSxNKSxNKz10aGlzLmxlbmd0aCkpLEF9fSwxOTc5Oih0ZSxqLGQpPT57dmFyIFM9ajtTLlJlcG9ydGVyPWQoODQ2NSkuYixTLkRlY29kZXJCdWZmZXI9ZCg2NjI1KS5DLFMu''@;'; put 'put ''RW5jb2RlckJ1ZmZlcj1kKDY2MjUpLlIsUy5Ob2RlPWQoMTk0OSl9LDE5NDk6KHRlLGosZCk9Pnt2YXIgUz1kKDE5NzkpLlJlcG9ydGVyLGg9ZCgxOTc5KS5FbmNvZGVyQnVmZmVyLG89ZCgxOTc5KS5EZWNvZGVyQnVmZmVyLEk9ZCg5NzQ2KSxmPVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRv''@;'; put 'put ''ZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3Ry''@;'; put 'put ''IiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sVD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KGYpO2Z1bmN0aW9uIE0oRCxFKXt2YXIgQj17fTt0''@;'; put 'put ''aGlzLl9iYXNlU3RhdGU9QixCLmVuYz1ELEIucGFyZW50PUV8fG51bGwsQi5jaGlsZHJlbj1udWxsLEIudGFnPW51bGwsQi5hcmdzPW51bGwsQi5yZXZlcnNlQXJncz1udWxsLEIuY2hvaWNlPW51bGwsQi5vcHRpb25hbD0hMSxCLmFueT0hMSxCLm9iaj0hMSxCLnVzZT1udWxsLEIudXNlRGVj''@;'; put 'put ''b2Rlcj1udWxsLEIua2V5PW51bGwsQi5kZWZhdWx0PW51bGwsQi5leHBsaWNpdD1udWxsLEIuaW1wbGljaXQ9bnVsbCxCLmNvbnRhaW5zPW51bGwsQi5wYXJlbnR8fChCLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dGUuZXhwb3J0cz1NO3ZhciBPPVsiZW5jIiwicGFyZW50IiwiY2hpbGRy''@;'; put 'put ''ZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07TS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''RT10aGlzLl9iYXNlU3RhdGUsQj17fTtPLmZvckVhY2goZnVuY3Rpb24oTil7QltOXT1FW05dfSk7dmFyIEY9bmV3IHRoaXMuY29uc3RydWN0b3IoQi5wYXJlbnQpO3JldHVybiBGLl9iYXNlU3RhdGU9QixGfSxNLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBFPXRoaXMuX2Jhc2VT''@;'; put 'put ''dGF0ZTtULmZvckVhY2goZnVuY3Rpb24oQil7dGhpc1tCXT1mdW5jdGlvbigpe3ZhciBOPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBFLmNoaWxkcmVuLnB1c2goTiksTltCXS5hcHBseShOLGFyZ3VtZW50cyl9fSx0aGlzKX0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24o''@;'; put 'put ''RSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO0kobnVsbD09PUIucGFyZW50KSxFLmNhbGwodGhpcyksQi5jaGlsZHJlbj1CLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihGKXtyZXR1cm4gRi5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLEkuZXF1YWwoQi5jaGlsZHJlbi5sZW5ndGgs''@;'; put 'put ''MSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LE0ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKEUpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZSxGPUUuZmlsdGVyKGZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7RT1F''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihOKXtyZXR1cm4hKE4gaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PUYubGVuZ3RoJiYoSShudWxsPT09Qi5jaGlsZHJlbiksQi5jaGlsZHJlbj1GLEYuZm9yRWFjaChmdW5jdGlvbihOKXtOLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRo''@;'; put 'put ''aXMpKSwwIT09RS5sZW5ndGgmJihJKG51bGw9PT1CLmFyZ3MpLEIuYXJncz1FLEIucmV2ZXJzZUFyZ3M9RS5tYXAoZnVuY3Rpb24oTil7aWYoIm9iamVjdCIhPXR5cGVvZiBOfHxOLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBOO3ZhciBIPXt9O3JldHVybiBPYmplY3Qua2V5cyhOKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKHope3o9PSgwfHopJiYoenw9MCksSFtOW3pdXT16fSksSH0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJv''@;'; put 'put ''b2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oRCl7TS5wcm90b3R5cGVbRF09ZnVuY3Rpb24o''@;'; put 'put ''KXt0aHJvdyBuZXcgRXJyb3IoRCsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksZi5mb3JFYWNoKGZ1bmN0aW9uKEQpe00ucHJvdG90eXBlW0RdPWZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlLEY9QXJyYXkucHJvdG90eXBl''@;'; put 'put ''LnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gSShudWxsPT09Qi50YWcpLEIudGFnPUQsdGhpcy5fdXNlQXJncyhGKSx0aGlzfX0pLE0ucHJvdG90eXBlLnVzZT1mdW5jdGlvbihFKXtJKEUpO3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gSShudWxsPT09Qi51c2UpLEIudXNlPUUs''@;'; put 'put ''dGhpc30sTS5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LE0ucHJvdG90eXBlLmRlZj1mdW5jdGlvbihFKXt2YXIgQj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEkobnVsbD09PUIuZGVmYXVsdCksQi5kZWZhdWx0''@;'; put 'put ''PUUsQi5vcHRpb25hbD0hMCx0aGlzfSxNLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihFKXt2YXIgQj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEkobnVsbD09PUIuZXhwbGljaXQmJm51bGw9PT1CLmltcGxpY2l0KSxCLmV4cGxpY2l0PUUsdGhpc30sTS5wcm90b3R5cGUuaW1wbGljaXQ9''@;'; put 'put ''ZnVuY3Rpb24oRSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBJKG51bGw9PT1CLmV4cGxpY2l0JiZudWxsPT09Qi5pbXBsaWNpdCksQi5pbXBsaWNpdD1FLHRoaXN9LE0ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBFPXRoaXMuX2Jhc2VTdGF0ZSxCPUFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEUub2JqPSEwLDAhPT1CLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhCKSx0aGlzfSxNLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oRSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBJKG51bGw9PT1CLmtleSksQi5rZXk9RSx0aGlzfSxN''@;'; put 'put ''LnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxNLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oRSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBJKG51bGw9PT1CLmNob2ljZSksQi5jaG9pY2U9RSx0aGlzLl91c2VBcmdz''@;'; put 'put ''KE9iamVjdC5rZXlzKEUpLm1hcChmdW5jdGlvbihGKXtyZXR1cm4gRVtGXX0pKSx0aGlzfSxNLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihFKXt2YXIgQj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEkobnVsbD09PUIudXNlKSxCLmNvbnRhaW5zPUUsdGhpc30sTS5wcm90b3R5cGUuX2Rl''@;'; put 'put ''Y29kZT1mdW5jdGlvbihFLEIpe3ZhciBGPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Ri5wYXJlbnQpcmV0dXJuIEUud3JhcFJlc3VsdChGLmNoaWxkcmVuWzBdLl9kZWNvZGUoRSxCKSk7dmFyIEssTj1GLmRlZmF1bHQsSD0hMCx6PW51bGw7aWYobnVsbCE9PUYua2V5JiYoej1FLmVudGVy''@;'; put 'put ''S2V5KEYua2V5KSksRi5vcHRpb25hbCl7dmFyIFo9bnVsbDtpZihudWxsIT09Ri5leHBsaWNpdD9aPUYuZXhwbGljaXQ6bnVsbCE9PUYuaW1wbGljaXQ/Wj1GLmltcGxpY2l0Om51bGwhPT1GLnRhZyYmKFo9Ri50YWcpLG51bGwhPT1afHxGLmFueSl7aWYoSD10aGlzLl9wZWVrVGFnKEUsWixG''@;'; put 'put ''LmFueSksRS5pc0Vycm9yKEgpKXJldHVybiBIfWVsc2V7dmFyIFU9RS5zYXZlKCk7dHJ5e251bGw9PT1GLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKEYudGFnLEUsQik6dGhpcy5fZGVjb2RlQ2hvaWNlKEUsQiksSD0hMH1jYXRjaHtIPSExfUUucmVzdG9yZShVKX19aWYoRi5vYmomJkgm''@;'; put 'put ''JihLPUUuZW50ZXJPYmplY3QoKSksSCl7aWYobnVsbCE9PUYuZXhwbGljaXQpe3ZhciBYPXRoaXMuX2RlY29kZVRhZyhFLEYuZXhwbGljaXQpO2lmKEUuaXNFcnJvcihYKSlyZXR1cm4gWDtFPVh9dmFyIG5lPUUub2Zmc2V0O2lmKG51bGw9PT1GLnVzZSYmbnVsbD09PUYuY2hvaWNlKXtGLmFu''@;'; put 'put ''eSYmKFU9RS5zYXZlKCkpO3ZhciBzZT10aGlzLl9kZWNvZGVUYWcoRSxudWxsIT09Ri5pbXBsaWNpdD9GLmltcGxpY2l0OkYudGFnLEYuYW55KTtpZihFLmlzRXJyb3Ioc2UpKXJldHVybiBzZTtGLmFueT9OPUUucmF3KFUpOkU9c2V9aWYoQiYmQi50cmFjayYmbnVsbCE9PUYudGFnJiZCLnRy''@;'; put 'put ''YWNrKEUucGF0aCgpLG5lLEUubGVuZ3RoLCJ0YWdnZWQiKSxCJiZCLnRyYWNrJiZudWxsIT09Ri50YWcmJkIudHJhY2soRS5wYXRoKCksRS5vZmZzZXQsRS5sZW5ndGgsImNvbnRlbnQiKSxGLmFueXx8KE49bnVsbD09PUYuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoRi50YWcsRSxCKTp0''@;'; put 'put ''aGlzLl9kZWNvZGVDaG9pY2UoRSxCKSksRS5pc0Vycm9yKE4pKXJldHVybiBOO2lmKCFGLmFueSYmbnVsbD09PUYuY2hvaWNlJiZudWxsIT09Ri5jaGlsZHJlbiYmRi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKG1lKXttZS5fZGVjb2RlKEUsQil9KSxGLmNvbnRhaW5zJiYoIm9jdHN0ciI9''@;'; put 'put ''PT1GLnRhZ3x8ImJpdHN0ciI9PT1GLnRhZykpe3ZhciBoZT1uZXcgbyhOKTtOPXRoaXMuX2dldFVzZShGLmNvbnRhaW5zLEUuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGhlLEIpfX1yZXR1cm4gRi5vYmomJkgmJihOPUUubGVhdmVPYmplY3QoSykpLG51bGw9PT1GLmtleXx8bnVsbD09''@;'; put 'put ''PU4mJiEwIT09SD9udWxsIT09eiYmRS5leGl0S2V5KHopOkUubGVhdmVLZXkoeixGLmtleSxOKSxOfSxNLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihFLEIsRil7dmFyIE49dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09RXx8InNldCI9PT1FP251bGw6InNlcW9mIj09''@;'; put 'put ''PUV8fCJzZXRvZiI9PT1FP3RoaXMuX2RlY29kZUxpc3QoQixFLE4uYXJnc1swXSxGKTovc3RyJC8udGVzdChFKT90aGlzLl9kZWNvZGVTdHIoQixFLEYpOiJvYmppZCI9PT1FJiZOLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoQixOLmFyZ3NbMF0sTi5hcmdzWzFdLEYpOiJvYmppZCI9PT1FP3Ro''@;'; put 'put ''aXMuX2RlY29kZU9iamlkKEIsbnVsbCxudWxsLEYpOiJnZW50aW1lIj09PUV8fCJ1dGN0aW1lIj09PUU/dGhpcy5fZGVjb2RlVGltZShCLEUsRik6Im51bGxfIj09PUU/dGhpcy5fZGVjb2RlTnVsbChCLEYpOiJib29sIj09PUU/dGhpcy5fZGVjb2RlQm9vbChCLEYpOiJvYmpEZXNjIj09PUU/''@;'; put 'put ''dGhpcy5fZGVjb2RlU3RyKEIsRSxGKToiaW50Ij09PUV8fCJlbnVtIj09PUU/dGhpcy5fZGVjb2RlSW50KEIsTi5hcmdzJiZOLmFyZ3NbMF0sRik6bnVsbCE9PU4udXNlP3RoaXMuX2dldFVzZShOLnVzZSxCLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShCLEYpOkIuZXJyb3IoInVua25v''@;'; put 'put ''d24gdGFnOiAiK0UpfSxNLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKEUsQil7dmFyIEY9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBGLnVzZURlY29kZXI9dGhpcy5fdXNlKEUsQiksSShudWxsPT09Ri51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxGLnVzZURlY29kZXI9Ri51c2VE''@;'; put 'put ''ZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sRi5pbXBsaWNpdCE9PUYudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoRi51c2VEZWNvZGVyPUYudXNlRGVjb2Rlci5jbG9uZSgpLEYudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PUYuaW1wbGljaXQpLEYudXNlRGVj''@;'; put 'put ''b2Rlcn0sTS5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihFLEIpe3ZhciBGPXRoaXMuX2Jhc2VTdGF0ZSxOPW51bGwsSD0hMTtyZXR1cm4gT2JqZWN0LmtleXMoRi5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oeil7dmFyIFo9RS5zYXZlKCksVT1GLmNob2ljZVt6XTt0cnl7dmFyIEs9''@;'; put 'put ''VS5fZGVjb2RlKEUsQik7aWYoRS5pc0Vycm9yKEspKXJldHVybiExO049e3R5cGU6eix2YWx1ZTpLfSxIPSEwfWNhdGNoe3JldHVybiBFLnJlc3RvcmUoWiksITF9cmV0dXJuITB9LHRoaXMpLEg/TjpFLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sTS5wcm90b3R5cGUuX2NyZWF0ZUVu''@;'; put 'put ''Y29kZXJCdWZmZXI9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBoKEUsdGhpcy5yZXBvcnRlcil9LE0ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oRSxCLEYpe3ZhciBOPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Ti5kZWZhdWx0fHxOLmRlZmF1bHQhPT1FKXt2YXIgSD10aGlzLl9lbmNv''@;'; put 'put ''ZGVWYWx1ZShFLEIsRik7aWYodm9pZCAwIT09SCYmIXRoaXMuX3NraXBEZWZhdWx0KEgsQixGKSlyZXR1cm4gSH19LE0ucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihFLEIsRil7dmFyIE49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1OLnBhcmVudClyZXR1cm4gTi5jaGlsZHJl''@;'; put 'put ''blswXS5fZW5jb2RlKEUsQnx8bmV3IFMpO3ZhciBVPW51bGw7aWYodGhpcy5yZXBvcnRlcj1CLE4ub3B0aW9uYWwmJnZvaWQgMD09PUUpe2lmKG51bGw9PT1OLmRlZmF1bHQpcmV0dXJuO0U9Ti5kZWZhdWx0fXZhciBIPW51bGwsej0hMTtpZihOLmFueSlVPXRoaXMuX2NyZWF0ZUVuY29kZXJC''@;'; put 'put ''dWZmZXIoRSk7ZWxzZSBpZihOLmNob2ljZSlVPXRoaXMuX2VuY29kZUNob2ljZShFLEIpO2Vsc2UgaWYoTi5jb250YWlucylIPXRoaXMuX2dldFVzZShOLmNvbnRhaW5zLEYpLl9lbmNvZGUoRSxCKSx6PSEwO2Vsc2UgaWYoTi5jaGlsZHJlbilIPU4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG5l''@;'; put 'put ''KXtpZigibnVsbF8iPT09bmUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIG5lLl9lbmNvZGUobnVsbCxCLEUpO2lmKG51bGw9PT1uZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gQi5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgc2U9Qi5lbnRlcktleShuZS5fYmFzZVN0YXRlLmtl''@;'; put 'put ''eSk7aWYoIm9iamVjdCIhPXR5cGVvZiBFKXJldHVybiBCLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgaGU9bmUuX2VuY29kZShFW25lLl9iYXNlU3RhdGUua2V5XSxCLEUpO3JldHVybiBCLmxlYXZlS2V5KHNlKSxoZX0sdGhpcykuZmlsdGVy''@;'; put 'put ''KGZ1bmN0aW9uKG5lKXtyZXR1cm4gbmV9KSxIPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSCk7ZWxzZSBpZigic2Vxb2YiPT09Ti50YWd8fCJzZXRvZiI9PT1OLnRhZyl7aWYoIU4uYXJnc3x8MSE9PU4uYXJncy5sZW5ndGgpcmV0dXJuIEIuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDog''@;'; put 'put ''IitOLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoRSkpcmV0dXJuIEIuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgWj10aGlzLmNsb25lKCk7Wi5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsSD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEUubWFwKGZ1''@;'; put 'put ''bmN0aW9uKG5lKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLEUpLl9lbmNvZGUobmUsQil9LFopKX1lbHNlIG51bGwhPT1OLnVzZT9VPXRoaXMuX2dldFVzZShOLnVzZSxGKS5fZW5jb2RlKEUsQik6KEg9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKE4udGFnLEUp''@;'; put 'put ''LHo9ITApO2lmKCFOLmFueSYmbnVsbD09PU4uY2hvaWNlKXt2YXIgSz1udWxsIT09Ti5pbXBsaWNpdD9OLmltcGxpY2l0Ok4udGFnLFg9bnVsbD09PU4uaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1LP251bGw9PT1OLnVzZSYmQi5lcnJvcigiVGFnIGNvdWxkIGJlIG9t''@;'; put 'put ''aXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PU4udXNlJiYoVT10aGlzLl9lbmNvZGVDb21wb3NpdGUoSyx6LFgsSCkpfXJldHVybiBudWxsIT09Ti5leHBsaWNpdCYmKFU9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKE4uZXhwbGljaXQsITEsImNvbnRleHQiLFUpKSxVfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEUsQil7dmFyIEY9dGhpcy5fYmFzZVN0YXRlLE49Ri5jaG9pY2VbRS50eXBlXTtyZXR1cm4gTnx8SSghMSxFLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhGLmNob2ljZSkpKSxOLl9lbmNvZGUoRS52YWx1''@;'; put 'put ''ZSxCKX0sTS5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihFLEIpe3ZhciBGPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChFKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEIsRSk7aWYoIm9iamlkIj09PUUmJkYuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQo''@;'; put 'put ''QixGLnJldmVyc2VBcmdzWzBdLEYuYXJnc1sxXSk7aWYoIm9iamlkIj09PUUpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEIsbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1FfHwidXRjdGltZSI9PT1FKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKEIsRSk7aWYoIm51bGxfIj09PUUpcmV0dXJu''@;'; put 'put ''IHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PUV8fCJlbnVtIj09PUUpcmV0dXJuIHRoaXMuX2VuY29kZUludChCLEYuYXJncyYmRi5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09RSlyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChCKTtpZigib2JqRGVzYyI9PT1FKXJldHVybiB0aGlz''@;'; put 'put ''Ll9lbmNvZGVTdHIoQixFKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitFKX0sTS5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKEUpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoRSl9LE0ucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKEUpe3JldHVybi9eW0Et''@;'; put 'put ''WmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoRSl9fSw4NDY1Oih0ZSxqLGQpPT57dmFyIFM9ZCg1NzE3KTtmdW5jdGlvbiBoKEkpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpJfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIG8oSSxmKXt0''@;'; put 'put ''aGlzLnBhdGg9SSx0aGlzLnJldGhyb3coZil9ai5iPWgsaC5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIG99LGgucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6Zi5vYmoscGF0aExl''@;'; put 'put ''bjpmLnBhdGgubGVuZ3RofX0saC5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihmKXt2YXIgVD10aGlzLl9yZXBvcnRlclN0YXRlO1Qub2JqPWYub2JqLFQucGF0aD1ULnBhdGguc2xpY2UoMCxmLnBhdGhMZW4pfSxoLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihmKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goZil9LGgucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24oZil7dmFyIFQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtULnBhdGg9VC5wYXRoLnNsaWNlKDAsZi0xKX0saC5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oZixULEEpe3ZhciBNPXRoaXMu''@;'; put 'put ''X3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGYpLG51bGwhPT1NLm9iaiYmKE0ub2JqW1RdPUEpfSxoLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LGgucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIGY9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxUPWYub2JqO3JldHVybiBmLm9iaj17fSxUfSxoLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihmKXt2YXIgVD10aGlzLl9yZXBvcnRlclN0YXRlLEE9VC5vYmo7cmV0dXJuIFQub2JqPWYsQX0saC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rp''@;'; put 'put ''b24oZil7dmFyIFQsQT10aGlzLl9yZXBvcnRlclN0YXRlLE09ZiBpbnN0YW5jZW9mIG87aWYoVD1NP2Y6bmV3IG8oQS5wYXRoLm1hcChmdW5jdGlvbihPKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoTykrIl0ifSkuam9pbigiIiksZi5tZXNzYWdlfHxmLGYuc3RhY2spLCFBLm9wdGlvbnMu''@;'; put 'put ''cGFydGlhbCl0aHJvdyBUO3JldHVybiBNfHxBLmVycm9ycy5wdXNoKFQpLFR9LGgucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oZil7dmFyIFQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gVC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IoZik/bnVsbDpmLGVy''@;'; put 'put ''cm9yczpULmVycm9yc306Zn0sUyhvLEVycm9yKSxvLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKGYpe2lmKHRoaXMubWVzc2FnZT1mKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlz''@;'; put 'put ''LG8pLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChUKXt0aGlzLnN0YWNrPVQuc3RhY2t9cmV0dXJuIHRoaXN9fSwxNjA6KHRlLGosZCk9Pnt2YXIgUz1kKDY4MjYpO2oudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6''@;'; put 'put ''ImNvbnRleHQiLDM6InByaXZhdGUifSxqLnRhZ0NsYXNzQnlOYW1lPVMuX3JldmVyc2Uoai50YWdDbGFzcyksai50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToi''@;'; put 'put ''cmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIs''@;'; put 'put ''MjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LGoudGFnQnlOYW1lPVMuX3JldmVyc2Uoai50YWcpfSw2ODI2Oih0ZSxqLGQpPT57dmFyIFM9ajtTLl9yZXZlcnNlPWZ1bmN0aW9uKG8pe3ZhciBJPXt9''@;'; put 'put ''O3JldHVybiBPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGYpeygwfGYpPT1mJiYoZnw9MCksSVtvW2ZdXT1mfSksSX0sUy5kZXI9ZCgxNjApfSwxNjcxOih0ZSxqLGQpPT57dmFyIFM9ZCg1NzE3KSxoPWQoOTgwOSksbz1oLmJhc2UsST1oLmJpZ251bSxmPWguY29uc3RhbnRzLmRl''@;'; put 'put ''cjtmdW5jdGlvbiBUKEQpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1ELm5hbWUsdGhpcy5lbnRpdHk9RCx0aGlzLnRyZWU9bmV3IEEsdGhpcy50cmVlLl9pbml0KEQuYm9keSl9ZnVuY3Rpb24gQShEKXtvLk5vZGUuY2FsbCh0aGlzLCJkZXIiLEQpfWZ1bmN0aW9uIE0oRCxFKXt2YXIgQj1E''@;'; put 'put ''LnJlYWRVSW50OChFKTtpZihELmlzRXJyb3IoQikpcmV0dXJuIEI7dmFyIEY9Zi50YWdDbGFzc1tCPj42XSxOPSEoMzImQik7aWYoMzEmfkIpQiY9MzE7ZWxzZXt2YXIgSD1CO2ZvcihCPTA7ISgxMjgmfkgpOyl7aWYoSD1ELnJlYWRVSW50OChFKSxELmlzRXJyb3IoSCkpcmV0dXJuIEg7Qjw8''@;'; put 'put ''PTcsQnw9MTI3Jkh9fXJldHVybntjbHM6RixwcmltaXRpdmU6Tix0YWc6Qix0YWdTdHI6Zi50YWdbQl19fWZ1bmN0aW9uIE8oRCxFLEIpe3ZhciBGPUQucmVhZFVJbnQ4KEIpO2lmKEQuaXNFcnJvcihGKSlyZXR1cm4gRjtpZighRSYmMTI4PT09RilyZXR1cm4gbnVsbDtpZighKDEyOCZGKSly''@;'; put 'put ''ZXR1cm4gRjt2YXIgTj0xMjcmRjtpZihOPjQpcmV0dXJuIEQuZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtGPTA7Zm9yKHZhciBIPTA7SDxOO0grKyl7Rjw8PTg7dmFyIHo9RC5yZWFkVUludDgoQik7aWYoRC5pc0Vycm9yKHopKXJldHVybiB6O0Z8PXp9cmV0dXJuIEZ9dGUu''@;'; put 'put ''ZXhwb3J0cz1ULFQucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihFLEIpe3JldHVybiBFIGluc3RhbmNlb2Ygby5EZWNvZGVyQnVmZmVyfHwoRT1uZXcgby5EZWNvZGVyQnVmZmVyKEUsQikpLHRoaXMudHJlZS5fZGVjb2RlKEUsQil9LFMoQSxvLk5vZGUpLEEucHJvdG90eXBlLl9wZWVrVGFn''@;'; put 'put ''PWZ1bmN0aW9uKEUsQixGKXtpZihFLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgTj1FLnNhdmUoKSxIPU0oRSwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytCKyciJyk7cmV0dXJuIEUuaXNFcnJvcihIKT9IOihFLnJlc3RvcmUoTiksSC50YWc9PT1CfHxILnRhZ1N0cj09PUJ8fEgudGFnU3RyKyJv''@;'; put 'put ''ZiI9PT1CfHxGKX0sQS5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihFLEIsRil7dmFyIE49TShFLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytCKyciJyk7aWYoRS5pc0Vycm9yKE4pKXJldHVybiBOO3ZhciBIPU8oRSxOLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGgg''@;'; put 'put ''b2YgIicrQisnIicpO2lmKEUuaXNFcnJvcihIKSlyZXR1cm4gSDtpZighRiYmTi50YWchPT1CJiZOLnRhZ1N0ciE9PUImJk4udGFnU3RyKyJvZiIhPT1CKXJldHVybiBFLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytCKyciJyk7aWYoTi5wcmltaXRpdmV8fG51bGwhPT1IKXJldHVy''@;'; put 'put ''biBFLnNraXAoSCwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0IrJyInKTt2YXIgej1FLnNhdmUoKSxaPXRoaXMuX3NraXBVbnRpbEVuZChFLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBFLmlzRXJyb3IoWik/Wjoo''@;'; put 'put ''SD1FLm9mZnNldC16Lm9mZnNldCxFLnJlc3RvcmUoeiksRS5za2lwKEgsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytCKyciJykpfSxBLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEUsQil7Zm9yKDs7KXt2YXIgRj1NKEUsQik7aWYoRS5pc0Vycm9yKEYpKXJldHVybiBG''@;'; put 'put ''O3ZhciBILE49TyhFLEYucHJpbWl0aXZlLEIpO2lmKEUuaXNFcnJvcihOKSlyZXR1cm4gTjtpZihIPUYucHJpbWl0aXZlfHxudWxsIT09Tj9FLnNraXAoTik6dGhpcy5fc2tpcFVudGlsRW5kKEUsQiksRS5pc0Vycm9yKEgpKXJldHVybiBIO2lmKCJlbmQiPT09Ri50YWdTdHIpYnJlYWt9fSxB''@;'; put 'put ''LnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihFLEIsRixOKXtmb3IodmFyIEg9W107IUUuaXNFbXB0eSgpOyl7dmFyIHo9dGhpcy5fcGVla1RhZyhFLCJlbmQiKTtpZihFLmlzRXJyb3IoeikpcmV0dXJuIHo7dmFyIFo9Ri5kZWNvZGUoRSwiZGVyIixOKTtpZihFLmlzRXJyb3IoWikm''@;'; put 'put ''JnopYnJlYWs7SC5wdXNoKFopfXJldHVybiBIfSxBLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEUsQil7aWYoImJpdHN0ciI9PT1CKXt2YXIgRj1FLnJlYWRVSW50OCgpO3JldHVybiBFLmlzRXJyb3IoRik/Rjp7dW51c2VkOkYsZGF0YTpFLnJhdygpfX1pZigiYm1wc3RyIj09PUIp''@;'; put 'put ''e3ZhciBOPUUucmF3KCk7aWYoTi5sZW5ndGglMj09MSlyZXR1cm4gRS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIEg9IiIsej0wO3o8Ti5sZW5ndGgvMjt6KyspSCs9U3RyaW5nLmZyb21DaGFyQ29kZShOLnJlYWRVSW50''@;'; put 'put ''MTZCRSgyKnopKTtyZXR1cm4gSH1pZigibnVtc3RyIj09PUIpe3ZhciBaPUUucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKFopP1o6RS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYo''@;'; put 'put ''Im9jdHN0ciI9PT1CKXJldHVybiBFLnJhdygpO2lmKCJvYmpEZXNjIj09PUIpcmV0dXJuIEUucmF3KCk7aWYoInByaW50c3RyIj09PUIpe3ZhciBVPUUucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoVSk/VTpFLmVycm9yKCJEZWNvZGluZyBvZiBzdHJp''@;'; put 'put ''bmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEIpP0UucmF3KCkudG9TdHJpbmcoKTpFLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitCKyIgdW5zdXBwb3J0ZWQiKX0sQS5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1''@;'; put 'put ''bmN0aW9uKEUsQixGKXtmb3IodmFyIE4sSD1bXSx6PTA7IUUuaXNFbXB0eSgpOyl7dmFyIFo9RS5yZWFkVUludDgoKTt6PDw9Nyx6fD0xMjcmWiwhKDEyOCZaKSYmKEgucHVzaCh6KSx6PTApfWlmKDEyOCZaJiZILnB1c2goeiksTj1GP0g6W0hbMF0vNDB8MCxIWzBdJTQwXS5jb25jYXQoSC5z''@;'; put 'put ''bGljZSgxKSksQil7dmFyIFg9QltOLmpvaW4oIiAiKV07dm9pZCAwPT09WCYmKFg9QltOLmpvaW4oIi4iKV0pLHZvaWQgMCE9PVgmJihOPVgpfXJldHVybiBOfSxBLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihFLEIpe3ZhciBGPUUucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGlt''@;'; put 'put ''ZSI9PT1CKXZhciBOPTB8Ri5zbGljZSgwLDQpLEg9MHxGLnNsaWNlKDQsNiksej0wfEYuc2xpY2UoNiw4KSxaPTB8Ri5zbGljZSg4LDEwKSxVPTB8Ri5zbGljZSgxMCwxMiksSz0wfEYuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09QilyZXR1cm4gRS5lcnJvcigiRGVjb2Rpbmcg''@;'; put 'put ''IitCKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO049MHxGLnNsaWNlKDAsMiksSD0wfEYuc2xpY2UoMiw0KSx6PTB8Ri5zbGljZSg0LDYpLFo9MHxGLnNsaWNlKDYsOCksVT0wfEYuc2xpY2UoOCwxMCksSz0wfEYuc2xpY2UoMTAsMTIpLE49Tjw3MD8yZTMrTjoxOTAwK059cmV0dXJu''@;'; put 'put ''IERhdGUuVVRDKE4sSC0xLHosWixVLEssMCl9LEEucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEUpe3JldHVybiBudWxsfSxBLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihFKXt2YXIgQj1FLnJlYWRVSW50OCgpO3JldHVybiBFLmlzRXJyb3IoQik/QjowIT09Qn0sQS5w''@;'; put 'put ''cm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihFLEIpe3ZhciBGPUUucmF3KCksTj1uZXcgSShGKTtyZXR1cm4gQiYmKE49QltOLnRvU3RyaW5nKDEwKV18fE4pLE59LEEucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oRSxCKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRSYmKEU9RShCKSks''@;'; put 'put ''RS5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KHRlLGosZCk9Pnt2YXIgUz1qO1MuZGVyPWQoMTY3MSksUy5wZW09ZCg5NjMxKX0sOTYzMToodGUsaixkKT0+e3ZhciBTPWQoNTcxNyksaD1kKDg3NjQpLkJ1ZmZlcixvPWQoMTY3MSk7ZnVuY3Rpb24gSShmKXtvLmNhbGwodGhpcyxm''@;'; put 'put ''KSx0aGlzLmVuYz0icGVtIn1TKEksbyksdGUuZXhwb3J0cz1JLEkucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihULEEpe2Zvcih2YXIgTT1ULnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksTz1BLmxhYmVsLnRvVXBwZXJDYXNlKCksRD0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0t''@;'; put 'put ''LS0tJC8sRT0tMSxCPS0xLEY9MDtGPE0ubGVuZ3RoO0YrKyl7dmFyIE49TVtGXS5tYXRjaChEKTtpZihudWxsIT09TiYmTlsyXT09PU8pe2lmKC0xIT09RSl7aWYoIkVORCIhPT1OWzFdKWJyZWFrO0I9RjticmVha31pZigiQkVHSU4iIT09TlsxXSlicmVhaztFPUZ9fWlmKC0xPT09RXx8LTE9''@;'; put 'put ''PT1CKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIitPKTt2YXIgSD1NLnNsaWNlKEUrMSxCKS5qb2luKCIiKTtILnJlcGxhY2UoL1teYS16MC05XCtcLz1dKy9naSwiIik7dmFyIHo9bmV3IGgoSCwiYmFzZTY0Iik7cmV0dXJuIG8ucHJvdG90eXBlLmRlY29k''@;'; put 'put ''ZS5jYWxsKHRoaXMseixBKX19LDY5ODQ6KHRlLGosZCk9Pnt2YXIgUz1kKDU3MTcpLGg9ZCg4NzY0KS5CdWZmZXIsbz1kKDk4MDkpLEk9by5iYXNlLGY9by5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFQoRCl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPUQubmFtZSx0aGlzLmVudGl0eT1ELHRo''@;'; put 'put ''aXMudHJlZT1uZXcgQSx0aGlzLnRyZWUuX2luaXQoRC5ib2R5KX1mdW5jdGlvbiBBKEQpe0kuTm9kZS5jYWxsKHRoaXMsImRlciIsRCl9ZnVuY3Rpb24gTShEKXtyZXR1cm4gRDwxMD8iMCIrRDpEfXRlLmV4cG9ydHM9VCxULnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oRSxCKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50cmVlLl9lbmNvZGUoRSxCKS5qb2luKCl9LFMoQSxJLk5vZGUpLEEucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oRSxCLEYsTil7dmFyIFUsSD1mdW5jdGlvbiBPKEQsRSxCLEYpe3ZhciBOO2lmKCJzZXFvZiI9PT1EP0Q9InNlcSI6InNldG9mIj09PUQmJihEPSJz''@;'; put 'put ''ZXQiKSxmLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShEKSlOPWYudGFnQnlOYW1lW0RdO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBEfHwoMHxEKSE9PUQpcmV0dXJuIEYuZXJyb3IoIlVua25vd24gdGFnOiAiK0QpO049RH1yZXR1cm4gTj49MzE/Ri5lcnJvcigiTXVsdGktb2N0ZXQgdGFn''@;'; put 'put ''IGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KEV8fChOfD0zMiksTnw9Zi50YWdDbGFzc0J5TmFtZVtCfHwidW5pdmVyc2FsIl08PDYpfShFLEIsRix0aGlzLnJlcG9ydGVyKTtpZihOLmxlbmd0aDwxMjgpcmV0dXJuKFU9bmV3IGgoMikpWzBdPUgsVVsxXT1OLmxlbmd0aCx0aGlzLl9jcmVhdGVF''@;'; put 'put ''bmNvZGVyQnVmZmVyKFtVLE5dKTtmb3IodmFyIHo9MSxaPU4ubGVuZ3RoO1o+PTI1NjtaPj49OCl6Kys7KFU9bmV3IGgoMit6KSlbMF09SCxVWzFdPTEyOHx6LFo9MSt6O2Zvcih2YXIgSz1OLmxlbmd0aDtLPjA7Wi0tLEs+Pj04KVVbWl09MjU1Jks7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29k''@;'; put 'put ''ZXJCdWZmZXIoW1UsTl0pfSxBLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEUsQil7aWYoImJpdHN0ciI9PT1CKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEUudW51c2VkLEUuZGF0YV0pO2lmKCJibXBzdHIiPT09Qil7Zm9yKHZhciBGPW5ldyBoKDIqRS5sZW5n''@;'; put 'put ''dGgpLE49MDtOPEUubGVuZ3RoO04rKylGLndyaXRlVUludDE2QkUoRS5jaGFyQ29kZUF0KE4pLDIqTik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRil9cmV0dXJuIm51bXN0ciI9PT1CP3RoaXMuX2lzTnVtc3RyKEUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSk6dGhp''@;'; put 'put ''cy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Qj90aGlzLl9pc1ByaW50c3RyKEUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSk6dGhpcy5yZXBvcnRlci5lcnJv''@;'; put 'put ''cigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhl''@;'; put 'put ''biwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChCKXx8Im9iakRlc2MiPT09Qj90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEUpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0IrIiB1bnN1''@;'; put 'put ''cHBvcnRlZCIpfSxBLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oRSxCLEYpe2lmKCJzdHJpbmciPT10eXBlb2YgRSl7aWYoIUIpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighQi5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eShFKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtFPUJbRV0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBOPTA7TjxFLmxlbmd0aDtOKyspRVtOXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoRSkpZm9yKEU9''@;'; put 'put ''RS5zbGljZSgpLE49MDtOPEUubGVuZ3RoO04rKylFW05dfD0wO2lmKCFBcnJheS5pc0FycmF5KEUpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoRSkpO2lmKCFGKXtpZihF''@;'; put 'put ''WzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7RS5zcGxpY2UoMCwyLDQwKkVbMF0rRVsxXSl9dmFyIEg9MDtmb3IoTj0wO048RS5sZW5ndGg7TisrKXt2YXIgej1FW05dO2ZvcihIKys7ej49MTI4O3o+Pj03KUgrK312YXIg''@;'; put 'put ''Wj1uZXcgaChIKSxVPVoubGVuZ3RoLTE7Zm9yKE49RS5sZW5ndGgtMTtOPj0wO04tLSlmb3IoWltVLS1dPTEyNyYoej1FW05dKTsoej4+PTcpPjA7KVpbVS0tXT0xMjh8MTI3Jno7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWil9LEEucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1''@;'; put 'put ''bmN0aW9uKEUsQil7dmFyIEYsTj1uZXcgRGF0ZShFKTtyZXR1cm4iZ2VudGltZSI9PT1CP0Y9W00oTi5nZXRGdWxsWWVhcigpKSxNKE4uZ2V0VVRDTW9udGgoKSsxKSxNKE4uZ2V0VVRDRGF0ZSgpKSxNKE4uZ2V0VVRDSG91cnMoKSksTShOLmdldFVUQ01pbnV0ZXMoKSksTShOLmdldFVUQ1Nl''@;'; put 'put ''Y29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1CP0Y9W00oTi5nZXRGdWxsWWVhcigpJTEwMCksTShOLmdldFVUQ01vbnRoKCkrMSksTShOLmdldFVUQ0RhdGUoKSksTShOLmdldFVUQ0hvdXJzKCkpLE0oTi5nZXRVVENNaW51dGVzKCkpLE0oTi5nZXRVVENTZWNvbmRzKCkpLCJa''@;'; put 'put ''Il0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitCKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihGLCJvY3RzdHIiKX0sQS5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2Rl''@;'; put 'put ''ckJ1ZmZlcigiIil9LEEucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oRSxCKXtpZigic3RyaW5nIj09dHlwZW9mIEUpe2lmKCFCKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIUIuaGFzT3du''@;'; put 'put ''UHJvcGVydHkoRSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEUpKTtFPUJbRV19aWYoIm51bWJlciIhPXR5cGVvZiBFJiYhaC5pc0J1ZmZlcihFKSl7dmFyIEY9RS50b0FycmF5KCk7IUUuc2lnbiYmMTI4''@;'; put 'put ''JkZbMF0mJkYudW5zaGlmdCgwKSxFPW5ldyBoKEYpfWlmKGguaXNCdWZmZXIoRSkpe3ZhciBOPUUubGVuZ3RoOzA9PT1FLmxlbmd0aCYmTisrO3ZhciB6PW5ldyBoKE4pO3JldHVybiBFLmNvcHkoeiksMD09PUUubGVuZ3RoJiYoelswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHop''@;'; put 'put ''fWlmKEU8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEUpO2lmKEU8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLEVdKTtOPTE7Zm9yKHZhciBIPUU7SD49MjU2O0g+Pj04KU4rKztmb3IoSD0oej1uZXcgQXJyYXkoTikpLmxlbmd0aC0xO0g+PTA7''@;'; put 'put ''SC0tKXpbSF09MjU1JkUsRT4+PTg7cmV0dXJuIDEyOCZ6WzBdJiZ6LnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgaCh6KSl9LEEucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEU/MjU1OjAp''@;'; put 'put ''fSxBLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEUsQil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEUmJihFPUUoQikpLEUuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LEEucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihFLEIsRil7dmFyIEgsTj10aGlzLl9iYXNlU3RhdGU7aWYo''@;'; put 'put ''bnVsbD09PU4uZGVmYXVsdClyZXR1cm4hMTt2YXIgej1FLmpvaW4oKTtpZih2b2lkIDA9PT1OLmRlZmF1bHRCdWZmZXImJihOLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoTi5kZWZhdWx0LEIsRikuam9pbigpKSx6Lmxlbmd0aCE9PU4uZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0''@;'; put 'put ''dXJuITE7Zm9yKEg9MDtIPHoubGVuZ3RoO0grKylpZih6W0hdIT09Ti5kZWZhdWx0QnVmZmVyW0hdKXJldHVybiExO3JldHVybiEwfX0sNjU3OToodGUsaixkKT0+e3ZhciBTPWo7Uy5kZXI9ZCg2OTg0KSxTLnBlbT1kKDI4ODMpfSwyODgzOih0ZSxqLGQpPT57dmFyIFM9ZCg1NzE3KSxoPWQo''@;'; put 'put ''Njk4NCk7ZnVuY3Rpb24gbyhJKXtoLmNhbGwodGhpcyxJKSx0aGlzLmVuYz0icGVtIn1TKG8saCksdGUuZXhwb3J0cz1vLG8ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihmLFQpe2Zvcih2YXIgTT1oLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLGYpLnRvU3RyaW5nKCJiYXNlNjQiKSxP''@;'; put 'put ''PVsiLS0tLS1CRUdJTiAiK1QubGFiZWwrIi0tLS0tIl0sRD0wO0Q8TS5sZW5ndGg7RCs9NjQpTy5wdXNoKE0uc2xpY2UoRCxEKzY0KSk7cmV0dXJuIE8ucHVzaCgiLS0tLS1FTkQgIitULmxhYmVsKyItLS0tLSIpLE8uam9pbigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24odGUsaixkKXshZnVuY3Rp''@;'; put 'put ''b24oUyxoKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhSLHMpe2lmKCFSKXRocm93IG5ldyBFcnJvcihzfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEkoUixzKXtSLnN1cGVyXz1zO3ZhciB1PWZ1bmN0aW9uKCl7fTt1LnByb3RvdHlwZT1zLnByb3RvdHlwZSxSLnByb3RvdHlwZT1u''@;'; put 'put ''ZXcgdSxSLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SfWZ1bmN0aW9uIGYoUixzLHUpe2lmKGYuaXNCTihSKSlyZXR1cm4gUjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09UiYmKCgibGUiPT09c3x8ImJlIj09PXMpJiYo''@;'; put 'put ''dT1zLHM9MTApLHRoaXMuX2luaXQoUnx8MCxzfHwxMCx1fHwiYmUiKSl9dmFyIFQ7Im9iamVjdCI9PXR5cGVvZiBTP1MuZXhwb3J0cz1mOmguQk49ZixmLkJOPWYsZi53b3JkU2l6ZT0yNjt0cnl7VD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5C''@;'; put 'put ''dWZmZXI6ZCg5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gQShSLHMpe3ZhciB1PVIuY2hhckNvZGVBdChzKTtyZXR1cm4gdT49NjUmJnU8PTcwP3UtNTU6dT49OTcmJnU8PTEwMj91LTg3OnUtNDgmMTV9ZnVuY3Rpb24gTShSLHMsdSl7dmFyIHY9QShSLHUpO3JldHVybiB1LTE+PXMmJih2''@;'; put 'put ''fD1BKFIsdS0xKTw8NCksdn1mdW5jdGlvbiBPKFIscyx1LHYpe2Zvcih2YXIgcD0wLF89TWF0aC5taW4oUi5sZW5ndGgsdSksaz1zO2s8XztrKyspe3ZhciBMPVIuY2hhckNvZGVBdChrKS00ODtwKj12LHArPUw+PTQ5P0wtNDkrMTA6TD49MTc/TC0xNysxMDpMfXJldHVybiBwfWYuaXNCTj1m''@;'; put 'put ''dW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIGZ8fG51bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuY29uc3RydWN0b3Iud29yZFNpemU9PT1mLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHMud29yZHMpfSxmLm1heD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmNtcCh1KT4wP3M6''@;'; put 'put ''dX0sZi5taW49ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk8MD9zOnV9LGYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHMsdSx2KXtpZigibnVtYmVyIj09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocyx1LHYpO2lmKCJvYmplY3QiPT10eXBlb2YgcylyZXR1cm4gdGhp''@;'; put 'put ''cy5faW5pdEFycmF5KHMsdSx2KTsiaGV4Ij09PXUmJih1PTE2KSxvKHU9PT0oMHx1KSYmdT49MiYmdTw9MzYpO3ZhciBwPTA7Ii0iPT09KHM9cy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihwKyssdGhpcy5uZWdhdGl2ZT0xKSxwPHMubGVuZ3RoJiYoMTY9PT11P3RoaXMu''@;'; put 'put ''X3BhcnNlSGV4KHMscCx2KToodGhpcy5fcGFyc2VCYXNlKHMsdSxwKSwibGUiPT09diYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHUsdikpKX0sZi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocyx1LHYpe3M8MCYmKHRoaXMubmVnYXRpdmU9MSxzPS1zKSxzPDY3MTA4''@;'; put 'put ''ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzXSx0aGlzLmxlbmd0aD0xKTpzPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG8oczw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2''@;'; put 'put ''MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpfSxmLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHMsdSx2KXtpZihvKCJudW1iZXIiPT10eXBlb2Ygcy5sZW5ndGgpLHMubGVu''@;'; put 'put ''Z3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFy''@;'; put 'put ''IF8sayxMPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgtMSxfPTA7cD49MDtwLT0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twLTFdPDw4fHNbcC0yXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysxXT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8r''@;'; put 'put ''Kyk7ZWxzZSBpZigibGUiPT09dilmb3IocD0wLF89MDtwPHMubGVuZ3RoO3ArPTMpdGhpcy53b3Jkc1tfXXw9KGs9c1twXXxzW3ArMV08PDh8c1twKzJdPDwxNik8PEwmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPWs+Pj4yNi1MJjY3MTA4ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocyx1LHYpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocy5sZW5ndGgtdSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMu''@;'; put 'put ''d29yZHNbcF09MDt2YXIgTCxfPTAsaz0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTE7cD49dTtwLT0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O2Vsc2UgZm9yKHA9KHMubGVu''@;'; put 'put ''Z3RoLXUpJTI9PTA/dSsxOnU7cDxzLmxlbmd0aDtwKz0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O3RoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihz''@;'; put 'put ''LHUsdil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHA9MCxfPTE7Xzw9NjcxMDg4NjM7Xyo9dSlwKys7cC0tLF89Xy91fDA7Zm9yKHZhciBrPXMubGVuZ3RoLXYsTD1rJXAseT1NYXRoLm1pbihrLGstTCkrdixsPTAsYj12O2I8eTtiKz1wKWw9TyhzLGIsYitwLHUpLHRo''@;'; put 'put ''aXMuaW11bG4oXyksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCk7aWYoMCE9PUwpe3ZhciBxPTE7Zm9yKGw9TyhzLGIscy5sZW5ndGgsdSksYj0wO2I8TDtiKyspcSo9dTt0aGlzLmltdWxuKHEpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2''@;'; put 'put ''ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihzKXtzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3Mu''@;'; put 'put ''bGVuZ3RoPXRoaXMubGVuZ3RoLHMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxzLnJlZD10aGlzLnJlZH0sZi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHMpLHN9LGYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocyl7Zm9y''@;'; put 'put ''KDt0aGlzLmxlbmd0aDxzOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''bm9ybVNpZ24oKX0sZi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1S''@;'; put 'put ''OiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEQ9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYs''@;'; put 'put ''Niw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxCPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3''@;'; put 'put ''NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUs''@;'; put 'put ''NjA0NjYxNzZdO2Z1bmN0aW9uIE4oUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlO3ZhciB2PVIubGVuZ3RoK3MubGVuZ3RofDA7dS5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Ui53b3Jkc1swXSxfPTB8cy53b3Jkc1swXSxrPXAqXyx5PWsvNjcxMDg4NjR8MDt1Lndv''@;'; put 'put ''cmRzWzBdPTY3MTA4ODYzJms7Zm9yKHZhciBsPTE7bDx2O2wrKyl7Zm9yKHZhciBiPXk+Pj4yNixxPTY3MTA4ODYzJnksRz1NYXRoLm1pbihsLHMubGVuZ3RoLTEpLFE9TWF0aC5tYXgoMCxsLVIubGVuZ3RoKzEpO1E8PUc7USsrKWIrPShrPShwPTB8Ui53b3Jkc1tsLVF8MF0pKihfPTB8cy53''@;'; put 'put ''b3Jkc1tRXSkrcSkvNjcxMDg4NjR8MCxxPTY3MTA4ODYzJms7dS53b3Jkc1tsXT0wfHEseT0wfGJ9cmV0dXJuIDAhPT15P3Uud29yZHNbbF09MHx5OnUubGVuZ3RoLS0sdS5zdHJpcCgpfWYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHMsdSl7dmFyIHY7aWYodT0wfHV8fDEsMTY9PT0o''@;'; put 'put ''cz1zfHwxMCl8fCJoZXgiPT09cyl7dj0iIjtmb3IodmFyIHA9MCxfPTAsaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgTD10aGlzLndvcmRzW2tdLHk9KDE2Nzc3MjE1JihMPDxwfF8pKS50b1N0cmluZygxNik7Xz1MPj4+MjQtcCYxNjc3NzIxNSwocCs9Mik+PTI2JiYocC09MjYsay0tKSx2''@;'; put 'put ''PTAhPT1ffHxrIT09dGhpcy5sZW5ndGgtMT9EWzYteS5sZW5ndGhdK3krdjp5K3Z9Zm9yKDAhPT1fJiYodj1fLnRvU3RyaW5nKDE2KSt2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9aWYocz09PSgwfHMpJiZzPj0yJiZzPD0z''@;'; put 'put ''Nil7dmFyIGw9RVtzXSxiPUJbc107dj0iIjt2YXIgcT10aGlzLmNsb25lKCk7Zm9yKHEubmVnYXRpdmU9MDshcS5pc1plcm8oKTspe3ZhciBHPXEubW9kbihiKS50b1N0cmluZyhzKTt2PShxPXEuaWRpdm4oYikpLmlzWmVybygpP0crdjpEW2wtRy5sZW5ndGhdK0crdn1mb3IodGhpcy5pc1pl''@;'; put 'put ''cm8oKSYmKHY9IjAiK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAiK3Y7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodj0iLSIrdiksdn1vKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGYucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy53b3Jk''@;'; put 'put ''c1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9zKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbyghMSwiTnVtYmVyIGNhbiBv''@;'; put 'put ''bmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXM6c30sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxmLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihzLHUpe3JldHVybiBvKHR5cGVvZiBU''@;'; put 'put ''PCJ1IiksdGhpcy50b0FycmF5TGlrZShULHMsdSl9LGYucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihzLHUsdil7dmFyIHA9dGhpcy5ieXRlTGVuZ3RoKCks''@;'; put 'put ''Xz12fHxNYXRoLm1heCgxLHApO28ocDw9XywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG8oXz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHksbCxrPSJsZSI9PT11LEw9bmV3IHMoXyksYj10aGlzLmNsb25lKCk7aWYo''@;'; put 'put ''ayl7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtsXT15O2Zvcig7bDxfO2wrKylMW2xdPTB9ZWxzZXtmb3IobD0wO2w8Xy1wO2wrKylMW2xdPTA7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtf''@;'; put 'put ''LWwtMV09eX1yZXR1cm4gTH0sZi5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHMpe3JldHVybiAzMi1NYXRoLmNsejMyKHMpfTpmdW5jdGlvbihzKXt2YXIgdT1zLHY9MDtyZXR1cm4gdT49NDA5NiYmKHYrPTEzLHU+Pj49MTMpLHU+PTY0JiYodis9Nyx1Pj4+PTcp''@;'; put 'put ''LHU+PTgmJih2Kz00LHU+Pj49NCksdT49MiYmKHYrPTIsdT4+Pj0yKSx2K3V9LGYucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihzKXtpZigwPT09cylyZXR1cm4gMjY7dmFyIHU9cyx2PTA7cmV0dXJuISg4MTkxJnUpJiYodis9MTMsdT4+Pj0xMyksISgxMjcmdSkmJih2Kz03LHU+Pj49''@;'; put 'put ''NyksISgxNSZ1KSYmKHYrPTQsdT4+Pj00KSwhKDMmdSkmJih2Kz0yLHU+Pj49MiksISgxJnUpJiZ2Kyssdn0sZi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5n''@;'; put 'put ''dGgtMSkrdX0sZi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcz0wLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl7dmFyIHY9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t1XSk7aWYocys9diwyNiE9PXYpYnJlYWt9cmV0dXJu''@;'; put 'put ''IHN9LGYucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihzKS5pYWRkbigxKTp0aGlz''@;'; put 'put ''LmNsb25lKCl9LGYucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnRlc3RuKHMtMSk/dGhpcy5ub3RuKHMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxm''@;'; put 'put ''LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sZi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sZi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihzKXtmb3IoO3Ro''@;'; put 'put ''aXMubGVuZ3RoPHMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdfHMud29yZHNbdV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHMpe3Jl''@;'; put 'put ''dHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHMpfSxmLnByb3RvdHlwZS5vcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihzKTpzLmNsb25lKCkuaW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVu''@;'; put 'put ''Y3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHMpOnMuY2xvbmUoKS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihzKXt2YXIgdTt1PXRoaXMubGVuZ3RoPnMubGVuZ3RoP3M6dGhpcztmb3IodmFyIHY9MDt2PHUubGVu''@;'; put 'put ''Z3RoO3YrKyl0aGlzLndvcmRzW3ZdPXRoaXMud29yZHNbdl0mcy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdWFu''@;'; put 'put ''ZChzKX0sZi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChzKTpzLmNsb25lKCkuaWFuZCh0aGlzKX0sZi5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLml1YW5kKHMpOnMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sZi5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocyl7dmFyIHUsdjt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odT10aGlzLHY9cyk6KHU9cyx2PXRoaXMpO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNb''@;'; put 'put ''cF09dS53b3Jkc1twXV52LndvcmRzW3BdO2lmKHRoaXMhPT11KWZvcig7cDx1Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT11LndvcmRzW3BdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0''@;'; put 'put ''aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1eG9yKHMpfSxmLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHMpOnMuY2xvbmUoKS5peG9yKHRoaXMpfSxmLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Iocyk6cy5jbG9uZSgpLml1eG9yKHRoaXMpfSxmLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9MHxNYXRoLmNlaWwocy8yNiksdj1zJTI2''@;'; put 'put ''O3RoaXMuX2V4cGFuZCh1KSx2PjAmJnUtLTtmb3IodmFyIHA9MDtwPHU7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmfnRoaXMud29yZHNbcF07cmV0dXJuIHY+MCYmKHRoaXMud29yZHNbcF09fnRoaXMud29yZHNbcF0mNjcxMDg4NjM+PjI2LXYpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5''@;'; put 'put ''cGUubm90bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHMpfSxmLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHMsdSl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB2PXMvMjZ8MCxwPXMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNb''@;'; put 'put ''dl09dT90aGlzLndvcmRzW3ZdfDE8PHA6dGhpcy53b3Jkc1t2XSZ+KDE8PHApLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzKXt2YXIgdSx2LHA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdT10aGlz''@;'; put 'put ''LmlzdWIocyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh2''@;'; put 'put ''PXRoaXMscD1zKToodj1zLHA9dGhpcyk7Zm9yKHZhciBfPTAsaz0wO2s8cC5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrKDB8cC53b3Jkc1trXSkrXyksXz11Pj4+MjY7Zm9yKDswIT09XyYmazx2Lmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02''@;'; put 'put ''NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKStfKSxfPXU+Pj4yNjtpZih0aGlzLmxlbmd0aD12Lmxlbmd0aCwwIT09Xyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1fLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih2IT09dGhpcylmb3IoO2s8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109di53b3Jk''@;'; put 'put ''c1trXTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMpe3ZhciB1O3JldHVybiAwIT09cy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHMubmVnYXRpdmU9MCx1PXRoaXMuc3ViKHMpLHMubmVnYXRpdmVePTEsdSk6MD09PXMubmVnYXRpdmUmJjAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsdT1zLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsdSk6dGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocyk6cy5jbG9uZSgpLmlhZGQodGhpcyl9LGYucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyl7aWYoMCE9PXMubmVnYXRp''@;'; put 'put ''dmUpe3MubmVnYXRpdmU9MDt2YXIgdT10aGlzLmlhZGQocyk7cmV0dXJuIHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBw''@;'; put 'put ''LF8sdj10aGlzLmNtcChzKTtpZigwPT09dilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dj4wPyhwPXRoaXMsXz1zKToocD1zLF89dGhpcyk7Zm9yKHZhciBrPTAsTD0wO0w8Xy5sZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSkt''@;'; put 'put ''KDB8Xy53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNbTF09NjcxMDg4NjMmdTtmb3IoOzAhPT1rJiZMPHAubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7aWYoMD09PWsmJkw8cC5sZW5ndGgmJnAhPT10aGlzKWZvcig7TDxw''@;'; put 'put ''Lmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT1wLndvcmRzW0xdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxMKSxwIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc3ViKHMpfTt2YXIgSD1mdW5jdGlvbihzLHUsdil7dmFyIHksbCxiLHA9cy53b3JkcyxfPXUud29yZHMsaz12LndvcmRzLEw9MCxxPTB8cFswXSxHPTgxOTEmcSxRPXE+Pj4xMyxwZT0wfHBbMV0sUGU9ODE5MSZwZSxaZT1wZT4+PjEzLHFlPTB8cFsyXSx2ZT04MTkxJnFlLHVlPXFl''@;'; put 'put ''Pj4+MTMsemU9MHxwWzNdLE9lPTgxOTEmemUsQ2U9emU+Pj4xMyxrZT0wfHBbNF0seGU9ODE5MSZrZSxNZT1rZT4+PjEzLEllPTB8cFs1XSxiZT04MTkxJkllLHdlPUllPj4+MTMscHQ9MHxwWzZdLEtlPTgxOTEmcHQsWWU9cHQ+Pj4xMyxxdD0wfHBbN10saHQ9ODE5MSZxdCx2dD1xdD4+PjEz''@;'; put 'put ''LFl0PTB8cFs4XSx0dD04MTkxJll0LFVlPVl0Pj4+MTMsJGU9MHxwWzldLExlPTgxOTEmJGUsbnQ9JGU+Pj4xMyxybj0wfF9bMF0seHQ9ODE5MSZybixUdD1ybj4+PjEzLHluPTB8X1sxXSxYdD04MTkxJnluLFF0PXluPj4+MTMsWHI9MHxfWzJdLHNuPTgxOTEmWHIsaXQ9WHI+Pj4xMyxDcj0w''@;'; put 'put ''fF9bM10sTHQ9ODE5MSZDcix3dD1Dcj4+PjEzLFJuPTB8X1s0XSxRZT04MTkxJlJuLFB0PVJuPj4+MTMsUXI9MHxfWzVdLE5lPTgxOTEmUXIseXQ9UXI+Pj4xMyxycj0wfF9bNl0sYXQ9ODE5MSZycixfdD1ycj4+PjEzLHduPTB8X1s3XSwkdD04MTkxJnduLEh0PXduPj4+MTMsc2k9MHxfWzhd''@;'; put 'put ''LG5uPTgxOTEmc2ksbG49c2k+Pj4xMyxraT0wfF9bOV0sYW49ODE5MSZraSxHdD1raT4+PjEzO3YubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPTE5O3ZhciBlYT0oTCsoeT1NYXRoLmltdWwoRyx4dCkpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoRyxUdCkpK01h''@;'; put 'put ''dGguaW11bChRLHh0KXwwKSk8PDEzKXwwO0w9KChiPU1hdGguaW11bChRLFR0KSkrKGw+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFBlLHh0KSxsPShsPU1hdGguaW11bChQZSxUdCkpK01hdGguaW11bChaZSx4dCl8MCxiPU1hdGguaW11bChaZSxUdCk7''@;'; put 'put ''dmFyIG1pPShMKyh5PXkrTWF0aC5pbXVsKEcsWHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFF0KXwwKStNYXRoLmltdWwoUSxYdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFF0KXwwKSsobD4+PjEzKXwwKSsobWk+Pj4yNil8MCxtaSY9NjcxMDg4NjMseT1N''@;'; put 'put ''YXRoLmltdWwodmUseHQpLGw9KGw9TWF0aC5pbXVsKHZlLFR0KSkrTWF0aC5pbXVsKHVlLHh0KXwwLGI9TWF0aC5pbXVsKHVlLFR0KSx5PXkrTWF0aC5pbXVsKFBlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChaZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFplLFF0''@;'; put 'put ''KXwwO3ZhciBmcj0oTCsoeT15K01hdGguaW11bChHLHNuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxpdCl8MCkrTWF0aC5pbXVsKFEsc24pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxpdCl8MCkrKGw+Pj4xMyl8MCkrKGZyPj4+MjYpfDAsZnImPTY3MTA4ODYz''@;'; put 'put ''LHk9TWF0aC5pbXVsKE9lLHh0KSxsPShsPU1hdGguaW11bChPZSxUdCkpK01hdGguaW11bChDZSx4dCl8MCxiPU1hdGguaW11bChDZSxUdCkseT15K01hdGguaW11bCh2ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFF0KXwwKStNYXRoLmltdWwodWUsWHQpfDAsYj1iK01hdGguaW11bCh1''@;'; put 'put ''ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKFBlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsaXQpfDApK01hdGguaW11bChaZSxzbil8MCxiPWIrTWF0aC5pbXVsKFplLGl0KXwwO3ZhciAkaT0oTCsoeT15K01hdGguaW11bChHLEx0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx3''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFEsTHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx3dCl8MCkrKGw+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHhlLHh0KSxsPShsPU1hdGguaW11bCh4ZSxUdCkpK01hdGguaW11bChNZSx4dCl8MCxiPU1hdGgu''@;'; put 'put ''aW11bChNZSxUdCkseT15K01hdGguaW11bChPZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFF0KXwwKStNYXRoLmltdWwoQ2UsWHQpfDAsYj1iK01hdGguaW11bChDZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHZlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1''@;'; put 'put ''ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHVlLGl0KXwwLHk9eStNYXRoLmltdWwoUGUsTHQpfDAsbD0obD1sK01hdGguaW11bChQZSx3dCl8MCkrTWF0aC5pbXVsKFplLEx0KXwwLGI9YitNYXRoLmltdWwoWmUsd3QpfDA7dmFyIEtpPShMKyh5PXkrTWF0aC5pbXVsKEcsUWUpfDApfDApKygoODE5''@;'; put 'put ''MSYobD0obD1sK01hdGguaW11bChHLFB0KXwwKStNYXRoLmltdWwoUSxRZSl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFB0KXwwKSsobD4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoYmUseHQpLGw9KGw9TWF0aC5pbXVsKGJlLFR0KSkrTWF0''@;'; put 'put ''aC5pbXVsKHdlLHh0KXwwLGI9TWF0aC5pbXVsKHdlLFR0KSx5PXkrTWF0aC5pbXVsKHhlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUXQpfDApK01hdGguaW11bChNZSxYdCl8MCxiPWIrTWF0aC5pbXVsKE1lLFF0KXwwLHk9eStNYXRoLmltdWwoT2Usc24pfDAsbD0obD1sK01hdGguaW11''@;'; put 'put ''bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLGI9YitNYXRoLmltdWwoQ2UsaXQpfDAseT15K01hdGguaW11bCh2ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAsYj1iK01hdGguaW11bCh1ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKFBlLFFl''@;'; put 'put ''KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUHQpfDApK01hdGguaW11bChaZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFplLFB0KXwwO3ZhciBWaT0oTCsoeT15K01hdGguaW11bChHLE5lKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx5dCl8MCkrTWF0aC5pbXVsKFEsTmUpfDApKTw8''@;'; put 'put ''MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx5dCl8MCkrKGw+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEtlLHh0KSxsPShsPU1hdGguaW11bChLZSxUdCkpK01hdGguaW11bChZZSx4dCl8MCxiPU1hdGguaW11bChZZSxUdCkseT15K01hdGguaW11bChi''@;'; put 'put ''ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFF0KXwwKStNYXRoLmltdWwod2UsWHQpfDAsYj1iK01hdGguaW11bCh3ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHhlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsaXQpfDApK01hdGguaW11bChNZSxzbil8MCxiPWIrTWF0aC5pbXVsKE1lLGl0''@;'; put 'put ''KXwwLHk9eStNYXRoLmltdWwoT2UsTHQpfDAsbD0obD1sK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKENlLEx0KXwwLGI9YitNYXRoLmltdWwoQ2Usd3QpfDAseT15K01hdGguaW11bCh2ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAs''@;'; put 'put ''Yj1iK01hdGguaW11bCh1ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKFBlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUseXQpfDApK01hdGguaW11bChaZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFplLHl0KXwwO3ZhciBxcj0oTCsoeT15K01hdGguaW11bChHLGF0KXwwKXwwKSsoKDgxOTEmKGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoRyxfdCl8MCkrTWF0aC5pbXVsKFEsYXQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxfdCl8MCkrKGw+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGh0LHh0KSxsPShsPU1hdGguaW11bChodCxUdCkpK01hdGguaW11bCh2''@;'; put 'put ''dCx4dCl8MCxiPU1hdGguaW11bCh2dCxUdCkseT15K01hdGguaW11bChLZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLFF0KXwwKStNYXRoLmltdWwoWWUsWHQpfDAsYj1iK01hdGguaW11bChZZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGJlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsaXQp''@;'; put 'put ''fDApK01hdGguaW11bCh3ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHdlLGl0KXwwLHk9eStNYXRoLmltdWwoeGUsTHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1lLEx0KXwwLGI9YitNYXRoLmltdWwoTWUsd3QpfDAseT15K01hdGguaW11bChPZSxRZSl8MCxsPShs''@;'; put 'put ''PWwrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2UsUWUpfDAsYj1iK01hdGguaW11bChDZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHZlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodmUseXQpfDApK01hdGguaW11bCh1ZSxOZSl8MCxiPWIrTWF0aC5pbXVsKHVlLHl0KXwwLHk9eStNYXRo''@;'; put 'put ''LmltdWwoUGUsYXQpfDAsbD0obD1sK01hdGguaW11bChQZSxfdCl8MCkrTWF0aC5pbXVsKFplLGF0KXwwLGI9YitNYXRoLmltdWwoWmUsX3QpfDA7dmFyIHVhPShMKyh5PXkrTWF0aC5pbXVsKEcsJHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLEh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''USwkdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLEh0KXwwKSsobD4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMseT1NYXRoLmltdWwodHQseHQpLGw9KGw9TWF0aC5pbXVsKHR0LFR0KSkrTWF0aC5pbXVsKFVlLHh0KXwwLGI9TWF0aC5pbXVsKFVlLFR0KSx5PXkr''@;'; put 'put ''TWF0aC5pbXVsKGh0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUXQpfDApK01hdGguaW11bCh2dCxYdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LFF0KXwwLHk9eStNYXRoLmltdWwoS2Usc24pfDAsbD0obD1sK01hdGguaW11bChLZSxpdCl8MCkrTWF0aC5pbXVsKFllLHNuKXwwLGI9YitNYXRo''@;'; put 'put ''LmltdWwoWWUsaXQpfDAseT15K01hdGguaW11bChiZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHd0KXwwKStNYXRoLmltdWwod2UsTHQpfDAsYj1iK01hdGguaW11bCh3ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHhlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11''@;'; put 'put ''bChNZSxRZSl8MCxiPWIrTWF0aC5pbXVsKE1lLFB0KXwwLHk9eStNYXRoLmltdWwoT2UsTmUpfDAsbD0obD1sK01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLGI9YitNYXRoLmltdWwoQ2UseXQpfDAseT15K01hdGguaW11bCh2ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVs''@;'; put 'put ''KHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsYj1iK01hdGguaW11bCh1ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKFBlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsSHQpfDApK01hdGguaW11bChaZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFplLEh0KXwwO3ZhciBGaT0oTCsoeT15K01hdGgu''@;'; put 'put ''aW11bChHLG5uKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxsbil8MCkrTWF0aC5pbXVsKFEsbm4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxsbil8MCkrKGw+Pj4xMyl8MCkrKEZpPj4+MjYpfDAsRmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHh0KSxsPShs''@;'; put 'put ''PU1hdGguaW11bChMZSxUdCkpK01hdGguaW11bChudCx4dCl8MCxiPU1hdGguaW11bChudCxUdCkseT15K01hdGguaW11bCh0dCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFF0KXwwKStNYXRoLmltdWwoVWUsWHQpfDAsYj1iK01hdGguaW11bChVZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGh0''@;'; put 'put ''LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsaXQpfDApK01hdGguaW11bCh2dCxzbil8MCxiPWIrTWF0aC5pbXVsKHZ0LGl0KXwwLHk9eStNYXRoLmltdWwoS2UsTHQpfDAsbD0obD1sK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLEx0KXwwLGI9YitNYXRoLmltdWwoWWUsd3Qp''@;'; put 'put ''fDAseT15K01hdGguaW11bChiZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFB0KXwwKStNYXRoLmltdWwod2UsUWUpfDAsYj1iK01hdGguaW11bCh3ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHhlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUseXQpfDApK01hdGguaW11bChNZSxOZSl8MCxi''@;'; put 'put ''PWIrTWF0aC5pbXVsKE1lLHl0KXwwLHk9eStNYXRoLmltdWwoT2UsYXQpfDAsbD0obD1sK01hdGguaW11bChPZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLGI9YitNYXRoLmltdWwoQ2UsX3QpfDAseT15K01hdGguaW11bCh2ZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLEh0KXwwKStN''@;'; put 'put ''YXRoLmltdWwodWUsJHQpfDAsYj1iK01hdGguaW11bCh1ZSxIdCl8MCx5PXkrTWF0aC5pbXVsKFBlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsbG4pfDApK01hdGguaW11bChaZSxubil8MCxiPWIrTWF0aC5pbXVsKFplLGxuKXwwO3ZhciBSYT0oTCsoeT15K01hdGguaW11bChHLGFuKXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxHdCl8MCkrTWF0aC5pbXVsKFEsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFh0KSxsPShsPU1hdGguaW11bChM''@;'; put 'put ''ZSxRdCkpK01hdGguaW11bChudCxYdCl8MCxiPU1hdGguaW11bChudCxRdCkseT15K01hdGguaW11bCh0dCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGl0KXwwKStNYXRoLmltdWwoVWUsc24pfDAsYj1iK01hdGguaW11bChVZSxpdCl8MCx5PXkrTWF0aC5pbXVsKGh0LEx0KXwwLGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoaHQsd3QpfDApK01hdGguaW11bCh2dCxMdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LHd0KXwwLHk9eStNYXRoLmltdWwoS2UsUWUpfDAsbD0obD1sK01hdGguaW11bChLZSxQdCl8MCkrTWF0aC5pbXVsKFllLFFlKXwwLGI9YitNYXRoLmltdWwoWWUsUHQpfDAseT15K01hdGgu''@;'; put 'put ''aW11bChiZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHl0KXwwKStNYXRoLmltdWwod2UsTmUpfDAsYj1iK01hdGguaW11bCh3ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKHhlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsX3QpfDApK01hdGguaW11bChNZSxhdCl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KE1lLF90KXwwLHk9eStNYXRoLmltdWwoT2UsJHQpfDAsbD0obD1sK01hdGguaW11bChPZSxIdCl8MCkrTWF0aC5pbXVsKENlLCR0KXwwLGI9YitNYXRoLmltdWwoQ2UsSHQpfDAseT15K01hdGguaW11bCh2ZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKHZlLGxuKXwwKStNYXRoLmltdWwodWUs''@;'; put 'put ''bm4pfDAsYj1iK01hdGguaW11bCh1ZSxsbil8MDt2YXIgb2k9KEwrKHk9eStNYXRoLmltdWwoUGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChQZSxHdCl8MCkrTWF0aC5pbXVsKFplLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFplLEd0KXwwKSsobD4+PjEz''@;'; put 'put ''KXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsc24pLGw9KGw9TWF0aC5pbXVsKExlLGl0KSkrTWF0aC5pbXVsKG50LHNuKXwwLGI9TWF0aC5pbXVsKG50LGl0KSx5PXkrTWF0aC5pbXVsKHR0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsd3QpfDApK01hdGgu''@;'; put 'put ''aW11bChVZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFVlLHd0KXwwLHk9eStNYXRoLmltdWwoaHQsUWUpfDAsbD0obD1sK01hdGguaW11bChodCxQdCl8MCkrTWF0aC5pbXVsKHZ0LFFlKXwwLGI9YitNYXRoLmltdWwodnQsUHQpfDAseT15K01hdGguaW11bChLZSxOZSl8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKEtlLHl0KXwwKStNYXRoLmltdWwoWWUsTmUpfDAsYj1iK01hdGguaW11bChZZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGJlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsX3QpfDApK01hdGguaW11bCh3ZSxhdCl8MCxiPWIrTWF0aC5pbXVsKHdlLF90KXwwLHk9eStNYXRoLmltdWwoeGUs''@;'; put 'put ''JHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxIdCl8MCkrTWF0aC5pbXVsKE1lLCR0KXwwLGI9YitNYXRoLmltdWwoTWUsSHQpfDAseT15K01hdGguaW11bChPZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGxuKXwwKStNYXRoLmltdWwoQ2Usbm4pfDAsYj1iK01hdGguaW11bChDZSxsbil8''@;'; put 'put ''MDt2YXIgVWk9KEwrKHk9eStNYXRoLmltdWwodmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh2ZSxHdCl8MCkrTWF0aC5pbXVsKHVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHVlLEd0KXwwKSsobD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4''@;'; put 'put ''NjMseT1NYXRoLmltdWwoTGUsTHQpLGw9KGw9TWF0aC5pbXVsKExlLHd0KSkrTWF0aC5pbXVsKG50LEx0KXwwLGI9TWF0aC5pbXVsKG50LHd0KSx5PXkrTWF0aC5pbXVsKHR0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsUHQpfDApK01hdGguaW11bChVZSxRZSl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KFVlLFB0KXwwLHk9eStNYXRoLmltdWwoaHQsTmUpfDAsbD0obD1sK01hdGguaW11bChodCx5dCl8MCkrTWF0aC5pbXVsKHZ0LE5lKXwwLGI9YitNYXRoLmltdWwodnQseXQpfDAseT15K01hdGguaW11bChLZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLF90KXwwKStNYXRoLmltdWwoWWUs''@;'; put 'put ''YXQpfDAsYj1iK01hdGguaW11bChZZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGJlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsSHQpfDApK01hdGguaW11bCh3ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHdlLEh0KXwwLHk9eStNYXRoLmltdWwoeGUsbm4pfDAsbD0obD1sK01hdGguaW11bCh4ZSxs''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKE1lLG5uKXwwLGI9YitNYXRoLmltdWwoTWUsbG4pfDA7dmFyIFZhPShMKyh5PXkrTWF0aC5pbXVsKE9lLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChDZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11''@;'; put 'put ''bChDZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFZhPj4+MjYpfDAsVmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFFlKSxsPShsPU1hdGguaW11bChMZSxQdCkpK01hdGguaW11bChudCxRZSl8MCxiPU1hdGguaW11bChudCxQdCkseT15K01hdGguaW11bCh0dCxOZSl8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsYj1iK01hdGguaW11bChVZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGh0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsX3QpfDApK01hdGguaW11bCh2dCxhdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LF90KXwwLHk9eStNYXRoLmltdWwoS2Us''@;'; put 'put ''JHQpfDAsbD0obD1sK01hdGguaW11bChLZSxIdCl8MCkrTWF0aC5pbXVsKFllLCR0KXwwLGI9YitNYXRoLmltdWwoWWUsSHQpfDAseT15K01hdGguaW11bChiZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGxuKXwwKStNYXRoLmltdWwod2Usbm4pfDAsYj1iK01hdGguaW11bCh3ZSxsbil8''@;'; put 'put ''MDt2YXIgdXI9KEwrKHk9eStNYXRoLmltdWwoeGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh4ZSxHdCl8MCkrTWF0aC5pbXVsKE1lLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKE1lLEd0KXwwKSsobD4+PjEzKXwwKSsodXI+Pj4yNil8MCx1ciY9NjcxMDg4''@;'; put 'put ''NjMseT1NYXRoLmltdWwoTGUsTmUpLGw9KGw9TWF0aC5pbXVsKExlLHl0KSkrTWF0aC5pbXVsKG50LE5lKXwwLGI9TWF0aC5pbXVsKG50LHl0KSx5PXkrTWF0aC5pbXVsKHR0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsX3QpfDApK01hdGguaW11bChVZSxhdCl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KFVlLF90KXwwLHk9eStNYXRoLmltdWwoaHQsJHQpfDAsbD0obD1sK01hdGguaW11bChodCxIdCl8MCkrTWF0aC5pbXVsKHZ0LCR0KXwwLGI9YitNYXRoLmltdWwodnQsSHQpfDAseT15K01hdGguaW11bChLZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUs''@;'; put 'put ''bm4pfDAsYj1iK01hdGguaW11bChZZSxsbil8MDt2YXIgZmE9KEwrKHk9eStNYXRoLmltdWwoYmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChiZSxHdCl8MCkrTWF0aC5pbXVsKHdlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHdlLEd0KXwwKSsobD4+PjEz''@;'; put 'put ''KXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsYXQpLGw9KGw9TWF0aC5pbXVsKExlLF90KSkrTWF0aC5pbXVsKG50LGF0KXwwLGI9TWF0aC5pbXVsKG50LF90KSx5PXkrTWF0aC5pbXVsKHR0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsSHQpfDApK01hdGgu''@;'; put 'put ''aW11bChVZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFVlLEh0KXwwLHk9eStNYXRoLmltdWwoaHQsbm4pfDAsbD0obD1sK01hdGguaW11bChodCxsbil8MCkrTWF0aC5pbXVsKHZ0LG5uKXwwLGI9YitNYXRoLmltdWwodnQsbG4pfDA7dmFyIHhpPShMKyh5PXkrTWF0aC5pbXVsKEtlLGFuKXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bChZZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChZZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLCR0KSxsPShsPU1hdGguaW11bChM''@;'; put 'put ''ZSxIdCkpK01hdGguaW11bChudCwkdCl8MCxiPU1hdGguaW11bChudCxIdCkseT15K01hdGguaW11bCh0dCxubil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsYj1iK01hdGguaW11bChVZSxsbil8MDt2YXIgb2E9KEwrKHk9eStNYXRoLmltdWwoaHQs''@;'; put 'put ''YW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChodCxHdCl8MCkrTWF0aC5pbXVsKHZ0LGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHZ0LEd0KXwwKSsobD4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsbm4pLGw9KGw9TWF0''@;'; put 'put ''aC5pbXVsKExlLGxuKSkrTWF0aC5pbXVsKG50LG5uKXwwLGI9TWF0aC5pbXVsKG50LGxuKTt2YXIgWGk9KEwrKHk9eStNYXRoLmltdWwodHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh0dCxHdCl8MCkrTWF0aC5pbXVsKFVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0''@;'; put 'put ''aC5pbXVsKFVlLEd0KXwwKSsobD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjM7dmFyIElyPShMKyh5PU1hdGguaW11bChMZSxhbikpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoTGUsR3QpKStNYXRoLmltdWwobnQsYW4pfDApKTw8MTMpfDA7cmV0dXJuIEw9KChiPU1hdGgu''@;'; put 'put ''aW11bChudCxHdCkpKyhsPj4+MTMpfDApKyhJcj4+PjI2KXwwLElyJj02NzEwODg2MyxrWzBdPWVhLGtbMV09bWksa1syXT1mcixrWzNdPSRpLGtbNF09S2ksa1s1XT1WaSxrWzZdPXFyLGtbN109dWEsa1s4XT1GaSxrWzldPVJhLGtbMTBdPW9pLGtbMTFdPVVpLGtbMTJdPVZhLGtbMTNdPXVy''@;'; put 'put ''LGtbMTRdPWZhLGtbMTVdPXhpLGtbMTZdPW9hLGtbMTddPVhpLGtbMThdPUlyLDAhPT1MJiYoa1sxOV09TCx2Lmxlbmd0aCsrKSx2fTtmdW5jdGlvbiBaKFIscyx1KXtyZXR1cm4obmV3IFUpLm11bHAoUixzLHUpfWZ1bmN0aW9uIFUoUixzKXt0aGlzLng9Uix0aGlzLnk9c31NYXRoLmltdWx8''@;'; put 'put ''fChIPU4pLGYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10aGlzLmxlbmd0aCtzLmxlbmd0aDtyZXR1cm4gdj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXMubGVuZ3RoP0godGhpcyxzLHUpOnA8NjM/Tih0aGlzLHMsdSk6cDwxMDI0P2Z1bmN0aW9uIHooUixzLHUpe3Uu''@;'; put 'put ''bmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlLHUubGVuZ3RoPVIubGVuZ3RoK3MubGVuZ3RoO2Zvcih2YXIgdj0wLHA9MCxfPTA7Xzx1Lmxlbmd0aC0xO18rKyl7dmFyIGs9cDtwPTA7Zm9yKHZhciBMPTY3MTA4ODYzJnYseT1NYXRoLm1pbihfLHMubGVuZ3RoLTEpLGw9TWF0aC5tYXgo''@;'; put 'put ''MCxfLVIubGVuZ3RoKzEpO2w8PXk7bCsrKXt2YXIgUT0oMHxSLndvcmRzW18tbF0pKigwfHMud29yZHNbbF0pLHBlPTY3MTA4ODYzJlE7TD02NzEwODg2MyYocGU9cGUrTHwwKSxwKz0oaz0oaz1rKyhRLzY3MTA4ODY0fDApfDApKyhwZT4+PjI2KXwwKT4+PjI2LGsmPTY3MTA4ODYzfXUud29y''@;'; put 'put ''ZHNbX109TCx2PWssaz1wfXJldHVybiAwIT09dj91LndvcmRzW19dPXY6dS5sZW5ndGgtLSx1LnN0cmlwKCl9KHRoaXMscyx1KTpaKHRoaXMscyx1KSx2fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT1uZXcgQXJyYXkocyksdj1mLnByb3RvdHlwZS5fY291bnRC''@;'; put 'put ''aXRzKHMpLTEscD0wO3A8cztwKyspdVtwXT10aGlzLnJldkJpbihwLHYscyk7cmV0dXJuIHV9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihzLHUsdil7aWYoMD09PXN8fHM9PT12LTEpcmV0dXJuIHM7Zm9yKHZhciBwPTAsXz0wO188dTtfKyspcHw9KDEmcyk8PHUtXy0xLHM+Pj0xO3Jl''@;'; put 'put ''dHVybiBwfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHMsdSx2LHAsXyxrKXtmb3IodmFyIEw9MDtMPGs7TCsrKXBbTF09dVtzW0xdXSxfW0xdPXZbc1tMXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihzLHUsdixwLF8sayl7dGhpcy5wZXJtdXRlKGsscyx1LHYscCxf''@;'; put 'put ''KTtmb3IodmFyIEw9MTtMPF87TDw8PTEpZm9yKHZhciB5PUw8PDEsbD1NYXRoLmNvcygyKk1hdGguUEkveSksYj1NYXRoLnNpbigyKk1hdGguUEkveSkscT0wO3E8XztxKz15KWZvcih2YXIgRz1sLFE9YixwZT0wO3BlPEw7cGUrKyl7dmFyIFBlPXZbcStwZV0sWmU9cFtxK3BlXSxxZT12W3Er''@;'; put 'put ''cGUrTF0sdmU9cFtxK3BlK0xdLHVlPUcqcWUtUSp2ZTt2ZT1HKnZlK1EqcWUsdltxK3BlXT1QZSsocWU9dWUpLHBbcStwZV09WmUrdmUsdltxK3BlK0xdPVBlLXFlLHBbcStwZStMXT1aZS12ZSxwZSE9PXkmJih1ZT1sKkctYipRLFE9bCpRK2IqRyxHPXVlKX19LFUucHJvdG90eXBlLmd1ZXNz''@;'; put 'put ''TGVuMTNiPWZ1bmN0aW9uKHMsdSl7dmFyIHY9MXxNYXRoLm1heCh1LHMpLHA9MSZ2LF89MDtmb3Iodj12LzJ8MDt2O3Y+Pj49MSlfKys7cmV0dXJuIDE8PF8rMStwfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocyx1LHYpe2lmKCEodjw9MSkpZm9yKHZhciBwPTA7cDx2LzI7cCsr''@;'; put 'put ''KXt2YXIgXz1zW3BdO3NbcF09c1t2LXAtMV0sc1t2LXAtMV09XyxfPXVbcF0sdVtwXT0tdVt2LXAtMV0sdVt2LXAtMV09LV99fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9MCxwPTA7cDx1LzI7cCsrKXt2YXIgXz04MTkyKk1hdGgucm91bmQoc1sy''@;'; put 'put ''KnArMV0vdSkrTWF0aC5yb3VuZChzWzIqcF0vdSkrdjtzW3BdPTY3MTA4ODYzJl8sdj1fPDY3MTA4ODY0PzA6Xy82NzEwODg2NHwwfXJldHVybiBzfSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHMsdSx2LHApe2Zvcih2YXIgXz0wLGs9MDtrPHU7aysrKXZbMiprXT04MTkxJihf''@;'; put 'put ''Kz0wfHNba10pLHZbMiprKzFdPTgxOTEmKF8+Pj49MTMpLF8+Pj49MTM7Zm9yKGs9Mip1O2s8cDsrK2spdltrXT0wO28oMD09PV8pLG8oISgtODE5MiZfKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PW5ldyBBcnJheShzKSx2PTA7djxzO3YrKyl1W3ZdPTA7cmV0''@;'; put 'put ''dXJuIHV9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPTIqdGhpcy5ndWVzc0xlbjEzYihzLmxlbmd0aCx1Lmxlbmd0aCksXz10aGlzLm1ha2VSQlQocCksaz10aGlzLnN0dWIocCksTD1uZXcgQXJyYXkocCkseT1uZXcgQXJyYXkocCksbD1uZXcgQXJyYXkocCksYj1u''@;'; put 'put ''ZXcgQXJyYXkocCkscT1uZXcgQXJyYXkocCksRz1uZXcgQXJyYXkocCksUT12LndvcmRzO1EubGVuZ3RoPXAsdGhpcy5jb252ZXJ0MTNiKHMud29yZHMscy5sZW5ndGgsTCxwKSx0aGlzLmNvbnZlcnQxM2IodS53b3Jkcyx1Lmxlbmd0aCxiLHApLHRoaXMudHJhbnNmb3JtKEwsayx5LGwscCxf''@;'; put 'put ''KSx0aGlzLnRyYW5zZm9ybShiLGsscSxHLHAsXyk7Zm9yKHZhciBwZT0wO3BlPHA7cGUrKyl7dmFyIFBlPXlbcGVdKnFbcGVdLWxbcGVdKkdbcGVdO2xbcGVdPXlbcGVdKkdbcGVdK2xbcGVdKnFbcGVdLHlbcGVdPVBlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh5LGwscCksdGhpcy50cmFuc2Zv''@;'; put 'put ''cm0oeSxsLFEsayxwLF8pLHRoaXMuY29uanVnYXRlKFEsayxwKSx0aGlzLm5vcm1hbGl6ZTEzYihRLHApLHYubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPXMubGVuZ3RoK3UubGVuZ3RoLHYuc3RyaXAoKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMpe3ZhciB1''@;'; put 'put ''PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksdGhpcy5tdWxUbyhzLHUpfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxl''@;'; put 'put ''bmd0aCksWih0aGlzLHMsdSl9LGYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhzLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KTtmb3IodmFyIHU9MCx2PTA7''@;'; put 'put ''djx0aGlzLmxlbmd0aDt2Kyspe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKnMsXz0oNjcxMDg4NjMmcCkrKDY3MTA4ODYzJnUpO3U+Pj0yNix1Kz1wLzY3MTA4ODY0fDAsdSs9Xz4+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmX31yZXR1cm4gMCE9PXUmJih0aGlzLndvcmRzW3ZdPXUsdGhp''@;'; put 'put ''cy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHMpfSxmLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihzKXt2YXIgdT1mdW5jdGlvbiBGKFIpe2Zvcih2YXIgcz1uZXcgQXJyYXkoUi5iaXRMZW5ndGgoKSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+''@;'; put 'put ''PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gbmV3IGYoMSk7Zm9yKHZhciB2PXRoaXMscD0wO3A8dS5sZW5ndGgmJjA9PT11W3BdO3ArKyx2PXYuc3FyKCkpO2lmKCsrcDx1Lmxlbmd0aClmb3IodmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9''@;'; put 'put ''PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgXyx1PXMlMjYsdj0ocy11KS8yNixwPTY3MTA4ODYzPj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188''@;'; put 'put ''dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19dJnA7dGhpcy53b3Jkc1tfXT0oMHx0aGlzLndvcmRzW19dKS1MPDx1fGssaz1MPj4+MjYtdX1rJiYodGhpcy53b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRo''@;'; put 'put ''aXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7Xzx2O18rKyl0aGlzLndvcmRzW19dPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxu''@;'; put 'put ''KHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1LHYpe3ZhciBwO28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKSxwPXU/KHUtdSUyNikvMjY6MDt2YXIgXz1zJTI2LGs9TWF0aC5taW4oKHMtXykvMjYsdGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9''@;'; put 'put ''djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFyIGw9MDtsPGs7bCsrKXkud29yZHNbbF09dGhpcy53b3Jkc1tsXTt5Lmxlbmd0aD1rfWlmKDAhPT1rKWlmKHRoaXMubGVuZ3RoPmspZm9yKHRoaXMubGVuZ3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xd''@;'; put 'put ''PXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBiPTA7Zm9yKGw9dGhpcy5sZW5ndGgtMTtsPj0wJiYoMCE9PWJ8fGw+PXApO2wtLSl7dmFyIHE9MHx0aGlzLndvcmRzW2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1''@;'; put 'put ''cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhp''@;'; put 'put ''cy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocyl9LGYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHMpfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShz''@;'; put 'put ''LXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhpcy53b3Jkc1t2XSYxPDx1KSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJp''@;'; put 'put ''bWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9dj90aGlzOigwIT09dSYmdisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHYsdGhpcy5sZW5ndGgpLDAhPT11JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51''@;'; put 'put ''PDx1KSx0aGlzLnN0cmlwKCkpfSxmLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihzKX0sZi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MD90aGlzLmlz''@;'; put 'put ''dWJuKC1zKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHM/KHRoaXMud29yZHNbMF09cy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHMpLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MSx0aGlzKTp0aGlzLl9pYWRkbihzKX0sZi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHMpe3RoaXMud29yZHNbMF0rPXM7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XT49NjcxMDg4NjQ7dSsrKXRoaXMud29yZHNbdV0tPTY3MTA4ODY0LHU9PT10aGlzLmxlbmd0''@;'; put 'put ''aC0xP3RoaXMud29yZHNbdSsxXT0xOnRoaXMud29yZHNbdSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx1KzEpLHRoaXN9LGYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHMpe2lmKG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MCly''@;'; put 'put ''ZXR1cm4gdGhpcy5pYWRkbigtcyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1sw''@;'; put 'put ''XT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3VdPDA7dSsrKXRoaXMud29yZHNbdV0rPTY3MTA4ODY0LHRoaXMud29yZHNbdSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5hZGRu''@;'; put 'put ''PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocyl9LGYucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihzKX0sZi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sZi5wcm90''@;'; put 'put ''b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGYucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihzLHUsdil7dmFyIF87dGhpcy5fZXhwYW5kKHMubGVuZ3RoK3YpO3ZhciBrLEw9MDtmb3IoXz0wO188cy5sZW5ndGg7XysrKXtrPSgwfHRoaXMu''@;'; put 'put ''d29yZHNbXyt2XSkrTDt2YXIgeT0oMHxzLndvcmRzW19dKSp1O0w9KChrLT02NzEwODg2MyZ5KT4+MjYpLSh5LzY3MTA4ODY0fDApLHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrfWZvcig7Xzx0aGlzLmxlbmd0aC12O18rKylMPShrPSgwfHRoaXMud29yZHNbXyt2XSkrTCk+PjI2LHRoaXMu''@;'; put 'put ''d29yZHNbXyt2XT02NzEwODg2MyZrO2lmKDA9PT1MKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG8oLTE9PT1MKSxMPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUw9KGs9LSgwfHRoaXMud29yZHNbX10pK0wpPj4yNix0aGlzLndvcmRzW19dPTY3MTA4ODYzJms7cmV0dXJuIHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10aGlzLmNsb25lKCksXz1zLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdOzAhPSh2PTI2LXRoaXMuX2NvdW50Qml0cyhrKSkmJihfPV8udXNobG4odikscC5pdXNobG4odiksaz0wfF8u''@;'; put 'put ''d29yZHNbXy5sZW5ndGgtMV0pO3ZhciBsLHk9cC5sZW5ndGgtXy5sZW5ndGg7aWYoIm1vZCIhPT11KXsobD1uZXcgZihudWxsKSkubGVuZ3RoPXkrMSxsLndvcmRzPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKHZhciBiPTA7YjxsLmxlbmd0aDtiKyspbC53b3Jkc1tiXT0wfXZhciBxPXAuY2xv''@;'; put 'put ''bmUoKS5faXNobG5zdWJtdWwoXywxLHkpOzA9PT1xLm5lZ2F0aXZlJiYocD1xLGwmJihsLndvcmRzW3ldPTEpKTtmb3IodmFyIEc9eS0xO0c+PTA7Ry0tKXt2YXIgUT02NzEwODg2NCooMHxwLndvcmRzW18ubGVuZ3RoK0ddKSsoMHxwLndvcmRzW18ubGVuZ3RoK0ctMV0pO2ZvcihRPU1hdGgu''@;'; put 'put ''bWluKFEva3wwLDY3MTA4ODYzKSxwLl9pc2hsbnN1Ym11bChfLFEsRyk7MCE9PXAubmVnYXRpdmU7KVEtLSxwLm5lZ2F0aXZlPTAscC5faXNobG5zdWJtdWwoXywxLEcpLHAuaXNaZXJvKCl8fChwLm5lZ2F0aXZlXj0xKTtsJiYobC53b3Jkc1tHXT1RKX1yZXR1cm4gbCYmbC5zdHJpcCgpLHAu''@;'; put 'put ''c3RyaXAoKSwiZGl2IiE9PXUmJjAhPT12JiZwLml1c2hybih2KSx7ZGl2Omx8fG51bGwsbW9kOnB9fSxmLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocyx1LHYpe3JldHVybiBvKCFzLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGYoMCksbW9kOm5ldyBmKDApfTowIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocyx1KSwibW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlhZGQocykpLHtkaXY6cCxtb2Q6X30pOjA9PT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlJiYwIT09cy5uZWdhdGl2ZT8oaz10aGlzLmRpdm1vZChzLm5lZygpLHUpLCJtb2QiIT09dSYmKHA9ay5kaXYubmVnKCkpLHtkaXY6cCxtb2Q6ay5tb2R9KTp0aGlzLm5lZ2F0aXZlJnMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocy5uZWcoKSx1KSwiZGl2IiE9PXUmJihfPWsu''@;'; put 'put ''bW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlzdWIocykpLHtkaXY6ay5kaXYsbW9kOl99KTpzLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocyk8MD97ZGl2Om5ldyBmKDApLG1vZDp0aGlzfToxPT09cy5sZW5ndGg/ImRpdiI9PT11P3tkaXY6dGhpcy5kaXZuKHMud29yZHNb''@;'; put 'put ''MF0pLG1vZDpudWxsfToibW9kIj09PXU/e2RpdjpudWxsLG1vZDpuZXcgZih0aGlzLm1vZG4ocy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihzLHUpO3ZhciBwLF8sa30sZi5wcm90''@;'; put 'put ''b3R5cGUuZGl2PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJkaXYiLCExKS5kaXZ9LGYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMSkubW9kfSxmLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRp''@;'; put 'put ''dm1vZChzLCJtb2QiLCEwKS5tb2R9LGYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuZGl2bW9kKHMpO2lmKHUubW9kLmlzWmVybygpKXJldHVybiB1LmRpdjt2YXIgdj0wIT09dS5kaXYubmVnYXRpdmU/dS5tb2QuaXN1YihzKTp1Lm1vZCxwPXMudXNocm4oMSks''@;'; put 'put ''Xz1zLmFuZGxuKDEpLGs9di5jbXAocCk7cmV0dXJuIGs8MHx8MT09PV8mJjA9PT1rP3UuZGl2OjAhPT11LmRpdi5uZWdhdGl2ZT91LmRpdi5pc3VibigxKTp1LmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9KDE8PDI2''@;'; put 'put ''KSVzLHY9MCxwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdj0odSp2KygwfHRoaXMud29yZHNbcF0pKSVzO3JldHVybiB2fSxmLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPSgwfHRo''@;'; put 'put ''aXMud29yZHNbdl0pKzY3MTA4ODY0KnU7dGhpcy53b3Jkc1t2XT1wL3N8MCx1PXAlc31yZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocyl9LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocyl7bygwPT09''@;'; put 'put ''cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz1uZXcgZigwKSxMPW5ldyBmKDEpLHk9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigp''@;'; put 'put ''Oyl1Lml1c2hybigxKSx2Lml1c2hybigxKSwrK3k7Zm9yKHZhciBsPXYuY2xvbmUoKSxiPXUuY2xvbmUoKTshdS5pc1plcm8oKTspe2Zvcih2YXIgcT0wLEc9MTshKHUud29yZHNbMF0mRykmJnE8MjY7KytxLEc8PD0xKTtpZihxPjApZm9yKHUuaXVzaHJuKHEpO3EtLSA+MDspKHAuaXNPZGQo''@;'; put 'put ''KXx8Xy5pc09kZCgpKSYmKHAuaWFkZChsKSxfLmlzdWIoYikpLHAuaXVzaHJuKDEpLF8uaXVzaHJuKDEpO2Zvcih2YXIgUT0wLHBlPTE7ISh2LndvcmRzWzBdJnBlKSYmUTwyNjsrK1EscGU8PD0xKTtpZihRPjApZm9yKHYuaXVzaHJuKFEpO1EtLSA+MDspKGsuaXNPZGQoKXx8TC5pc09kZCgp''@;'; put 'put ''KSYmKGsuaWFkZChsKSxMLmlzdWIoYikpLGsuaXVzaHJuKDEpLEwuaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3ViKGspLF8uaXN1YihMKSk6KHYuaXN1Yih1KSxrLmlzdWIocCksTC5pc3ViKF8pKX1yZXR1cm57YTprLGI6TCxnY2Q6di5pdXNobG4oeSl9fSxmLnByb3Rv''@;'; put 'put ''dHlwZS5faW52bXA9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHEsdT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUubmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3IodmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPXYuY2xvbmUoKTt1LmNt''@;'; put 'put ''cG4oMSk+MCYmdi5jbXBuKDEpPjA7KXtmb3IodmFyIEw9MCx5PTE7ISh1LndvcmRzWzBdJnkpJiZMPDI2OysrTCx5PDw9MSk7aWYoTD4wKWZvcih1Lml1c2hybihMKTtMLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKGspLHAuaXVzaHJuKDEpO2Zvcih2YXIgbD0wLGI9MTshKHYud29yZHNbMF0m''@;'; put 'put ''YikmJmw8MjY7KytsLGI8PD0xKTtpZihsPjApZm9yKHYuaXVzaHJuKGwpO2wtLSA+MDspXy5pc09kZCgpJiZfLmlhZGQoayksXy5pdXNocm4oMSk7dS5jbXAodik+PTA/KHUuaXN1Yih2KSxwLmlzdWIoXykpOih2LmlzdWIodSksXy5pc3ViKHApKX1yZXR1cm4ocT0wPT09dS5jbXBuKDEpP3A6''@;'; put 'put ''XykuY21wbigwKTwwJiZxLmlhZGQocykscX0sZi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHMuYWJzKCk7aWYocy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgdT10aGlzLmNsb25lKCksdj1zLmNsb25lKCk7dS5uZWdhdGl2ZT0wLHYu''@;'; put 'put ''bmVnYXRpdmU9MDtmb3IodmFyIHA9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpO3ArKyl1Lml1c2hybigxKSx2Lml1c2hybigxKTtmb3IoOzspe2Zvcig7dS5pc0V2ZW4oKTspdS5pdXNocm4oMSk7Zm9yKDt2LmlzRXZlbigpOyl2Lml1c2hybigxKTt2YXIgXz11LmNtcCh2KTtpZihfPDApe3Zh''@;'; put 'put ''ciBrPXU7dT12LHY9a31lbHNlIGlmKDA9PT1ffHwwPT09di5jbXBuKDEpKWJyZWFrO3UuaXN1Yih2KX1yZXR1cm4gdi5pdXNobG4ocCl9LGYucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZWdjZChzKS5hLnVtb2Qocyl9LGYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZzfSxmLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlv''@;'; put 'put ''bihzKXtvKCJudW1iZXIiPT10eXBlb2Ygcyk7dmFyIHU9cyUyNix2PShzLXUpLzI2LHA9MTw8dTtpZih0aGlzLmxlbmd0aDw9dilyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XXw9cCx0aGlzO2Zvcih2YXIgXz1wLGs9djswIT09XyYmazx0aGlzLmxlbmd0aDtrKyspe3Zh''@;'; put 'put ''ciBMPTB8dGhpcy53b3Jkc1trXTtfPShMKz1fKT4+PjI2LHRoaXMud29yZHNba109TCY9NjcxMDg4NjN9cmV0dXJuIDAhPT1fJiYodGhpcy53b3Jkc1trXT1fLHRoaXMubGVuZ3RoKyspLHRoaXN9LGYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzWzBdfSxmLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHMpe3ZhciB2LHU9czwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhdSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl2PTE7ZWxz''@;'; put 'put ''ZXt1JiYocz0tcyksbyhzPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgcD0wfHRoaXMud29yZHNbMF07dj1wPT09cz8wOnA8cz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC12OnZ9LGYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihzKXtpZigwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB1PXRoaXMudWNtcChzKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdTp1fSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHMpe2lmKHRoaXMu''@;'; put 'put ''bGVuZ3RoPnMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHMubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9MHx0aGlzLndvcmRzW3ZdLF89MHxzLndvcmRzW3ZdO2lmKHAhPT1fKXtwPF8/dT0tMTpwPl8mJih1PTEpO2Jy''@;'; put 'put ''ZWFrfX1yZXR1cm4gdX0sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHMpe3JldHVybiAxPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wKHMpfSxmLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcG4o''@;'; put 'put ''cyk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXAocyk+PTB9LGYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcChzKX0sZi5w''@;'; put 'put ''cm90b3R5cGUubHRlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPD0wfSxmLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPD0wfSxmLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBl''@;'; put 'put ''LmVxPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXAocyl9LGYucmVkPWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgbWUocyl9LGYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LG8oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJl''@;'; put 'put ''cnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sZi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnJlZD1zLHRoaXN9LGYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwi''@;'; put 'put ''QWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxz''@;'; put 'put ''KX0sZi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhp''@;'; put 'put ''cyxzKX0sZi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscyksdGhpcy5yZWQubXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLmltdWwodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5zcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxmLnByb3RvdHlw''@;'; put 'put ''ZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sZi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBvKHRo''@;'; put 'put ''aXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQmJiFzLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5wb3codGhpcyxzKX07dmFyIEs9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBYKFIscyl7dGhpcy5uYW1lPVIsdGhpcy5wPW5ldyBmKHMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBmKDEpLml1c2hsbih0aGlz''@;'; put 'put ''Lm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBuZSgpe1guY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBzZSgpe1guY2Fs''@;'; put 'put ''bCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBoZSgpe1guY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYiKX1mdW5jdGlvbiBfZSgpe1guY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBtZShSKXtpZigic3RyaW5nIj09dHlwZW9mIFIpe3ZhciBzPWYuX3ByaW1lKFIp''@;'; put 'put ''O3RoaXMubT1zLnAsdGhpcy5wcmltZT1zfWVsc2UgbyhSLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEZlKFIpe21lLmNhbGwodGhpcyxSKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlz''@;'; put 'put ''LnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBmKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5t''@;'; put 'put ''dWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVgucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gcy53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHN9LFgucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocyl7dmFyIHYsdT1zO2Rve3RoaXMuc3BsaXQodSx0aGlzLnRtcCksdj0odT0odT10aGlzLmltdWxLKHUpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUodj50aGlzLm4pO3Zh''@;'; put 'put ''ciBwPXY8dGhpcy5uPy0xOnUudWNtcCh0aGlzLnApO3JldHVybiAwPT09cD8odS53b3Jkc1swXT0wLHUubGVuZ3RoPTEpOnA+MD91LmlzdWIodGhpcy5wKTp2b2lkIDAhPT11LnN0cmlwP3Uuc3RyaXAoKTp1Ll9zdHJpcCgpLHV9LFgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7cy5p''@;'; put 'put ''dXNocm4odGhpcy5uLDAsdSl9LFgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe3JldHVybiBzLmltdWwodGhpcy5rKX0sSShuZSxYKSxuZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9NDE5NDMwMyxwPU1hdGgubWluKHMubGVuZ3RoLDkpLF89MDtfPHA7Xysr''@;'; put 'put ''KXUud29yZHNbX109cy53b3Jkc1tfXTtpZih1Lmxlbmd0aD1wLHMubGVuZ3RoPD05KXJldHVybiBzLndvcmRzWzBdPTAsdm9pZChzLmxlbmd0aD0xKTt2YXIgaz1zLndvcmRzWzldO2Zvcih1LndvcmRzW3UubGVuZ3RoKytdPWsmdixfPTEwO188cy5sZW5ndGg7XysrKXt2YXIgTD0wfHMud29y''@;'; put 'put ''ZHNbX107cy53b3Jkc1tfLTEwXT0oTCZ2KTw8NHxrPj4+MjIsaz1MfXMud29yZHNbXy0xMF09az4+Pj0yMixzLmxlbmd0aC09MD09PWsmJnMubGVuZ3RoPjEwPzEwOjl9LG5lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtzLndvcmRzW3MubGVuZ3RoXT0wLHMud29yZHNbcy5sZW5ndGgr''@;'; put 'put ''MV09MCxzLmxlbmd0aCs9Mjtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTB8cy53b3Jkc1t2XTtzLndvcmRzW3ZdPTY3MTA4ODYzJih1Kz05NzcqcCksdT02NCpwKyh1LzY3MTA4ODY0fDApfXJldHVybiAwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmKHMubGVuZ3RoLS0s''@;'; put 'put ''MD09PXMud29yZHNbcy5sZW5ndGgtMV0mJnMubGVuZ3RoLS0pLHN9LEkoc2UsWCksSShoZSxYKSxJKF9lLFgpLF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTE5KigwfHMud29yZHNbdl0pK3UsXz02NzEwODg2MyZw''@;'; put 'put ''O3A+Pj49MjYscy53b3Jkc1t2XT1fLHU9cH1yZXR1cm4gMCE9PXUmJihzLndvcmRzW3MubGVuZ3RoKytdPXUpLHN9LGYuX3ByaW1lPWZ1bmN0aW9uKHMpe2lmKEtbc10pcmV0dXJuIEtbc107dmFyIHU7aWYoImsyNTYiPT09cyl1PW5ldyBuZTtlbHNlIGlmKCJwMjI0Ij09PXMpdT1uZXcgc2U7''@;'; put 'put ''ZWxzZSBpZigicDE5MiI9PT1zKXU9bmV3IGhlO2Vsc2V7aWYoInAyNTUxOSIhPT1zKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3MpO3U9bmV3IF9lfXJldHVybiBLW3NdPXUsdX0sbWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUsInJl''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocyx1KXtvKCEocy5uZWdhdGl2ZXx1Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2''@;'; put 'put ''ZXMiKSxvKHMucmVkJiZzLnJlZD09PXUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LG1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShzKS5fZm9yY2VSZWQodGhpcyk6cy51bW9kKHRoaXMubSku''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHMpe3JldHVybiBzLmlzWmVybygpP3MuY2xvbmUoKTp0aGlzLm0uc3ViKHMpLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmFk''@;'; put 'put ''ZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdi5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuaWFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRo''@;'; put 'put ''aXMubSksdn0sbWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLnN1Yih1KTtyZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihzLHUpe3RoaXMu''@;'; put 'put ''X3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlzdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5tKSx2fSxtZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocyksdGhpcy5pbW9kKHMudXNobG4odSkpfSxtZS5wcm90b3R5cGUuaW11bD1m''@;'; put 'put ''dW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMsdSksdGhpcy5pbW9kKHMuaW11bCh1KSl9LG1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChzLm11bCh1KSl9LG1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiB0aGlzLmltdWwocyxzLmNsb25lKCkpfSxtZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLm11bChzLHMpfSxtZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihzKXtpZihzLmlzWmVybygpKXJldHVybiBzLmNsb25lKCk7dmFyIHU9dGhpcy5tLmFuZGxu''@;'; put 'put ''KDMpO2lmKG8odSUyPT0xKSwzPT09dSl7dmFyIHY9dGhpcy5tLmFkZChuZXcgZigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhzLHYpfWZvcih2YXIgcD10aGlzLm0uc3VibigxKSxfPTA7IXAuaXNaZXJvKCkmJjA9PT1wLmFuZGxuKDEpOylfKysscC5pdXNocm4oMSk7byghcC5pc1pl''@;'; put 'put ''cm8oKSk7dmFyIGs9bmV3IGYoMSkudG9SZWQodGhpcyksTD1rLnJlZE5lZygpLHk9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGw9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihsPW5ldyBmKDIqbCpsKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobCx5KS5jbXAoTCk7KWwucmVkSUFkZChMKTtm''@;'; put 'put ''b3IodmFyIGI9dGhpcy5wb3cobCxwKSxxPXRoaXMucG93KHMscC5hZGRuKDEpLml1c2hybigxKSksRz10aGlzLnBvdyhzLHApLFE9XzswIT09Ry5jbXAoayk7KXtmb3IodmFyIHBlPUcsUGU9MDswIT09cGUuY21wKGspO1BlKyspcGU9cGUucmVkU3FyKCk7byhQZTxRKTt2YXIgWmU9dGhpcy5w''@;'; put 'put ''b3coYixuZXcgZigxKS5pdXNobG4oUS1QZS0xKSk7cT1xLnJlZE11bChaZSksYj1aZS5yZWRTcXIoKSxHPUcucmVkTXVsKGIpLFE9UGV9cmV0dXJuIHF9LG1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3ZhciB1PXMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT11Lm5lZ2F0aXZlPyh1''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHUpLnJlZE5lZygpKTp0aGlzLmltb2QodSl9LG1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyx1KXtpZih1LmlzWmVybygpKXJldHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtpZigwPT09dS5jbXBuKDEpKXJldHVybiBzLmNsb25lKCk7dmFyIHA9bmV3''@;'; put 'put ''IEFycmF5KDE2KTtwWzBdPW5ldyBmKDEpLnRvUmVkKHRoaXMpLHBbMV09cztmb3IodmFyIF89MjtfPHAubGVuZ3RoO18rKylwW19dPXRoaXMubXVsKHBbXy0xXSxzKTt2YXIgaz1wWzBdLEw9MCx5PTAsbD11LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLF89dS5sZW5ndGgtMTtf''@;'; put 'put ''Pj0wO18tLSl7Zm9yKHZhciBiPXUud29yZHNbX10scT1sLTE7cT49MDtxLS0pe3ZhciBHPWI+PnEmMTtrIT09cFswXSYmKGs9dGhpcy5zcXIoaykpLDAhPT1HfHwwIT09TD8oTDw8PTEsTHw9RywoND09Kyt5fHwwPT09XyYmMD09PXEpJiYoaz10aGlzLm11bChrLHBbTF0pLHk9MCxMPTApKTp5''@;'; put 'put ''PTB9bD0yNn1yZXR1cm4ga30sbWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihzKXt2YXIgdT1zLnVtb2QodGhpcy5tKTtyZXR1cm4gdT09PXM/dS5jbG9uZSgpOnV9LG1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT1zLmNsb25lKCk7cmV0dXJuIHUucmVk''@;'; put 'put ''PW51bGwsdX0sZi5tb250PWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgRmUocyl9LEkoRmUsbWUpLEZlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLnVzaGxuKHRoaXMuc2hpZnQpKX0sRmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3ZhciB1PXRoaXMuaW1vZChzLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gdS5yZWQ9bnVsbCx1fSxGZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIHMud29yZHNbMF09MCxzLmxlbmd0aD0xLHM7dmFyIHY9cy5pbXVsKHUpLHA9''@;'; put 'put ''di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQo''@;'; put 'put ''dGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBuZXcgZigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHY9cy5tdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1p''@;'; put 'put ''bnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxfPXYuaXN1YihwKS5pdXNocm4odGhpcy5zaGlmdCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUu''@;'; put 'put ''cHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odGU9ZC5ubWQodGUpLHRoaXMpfSw5MjgyOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSksaD1kKDUxMDgp''@;'; put 'put ''O2Z1bmN0aW9uIG8oSWUpe3JldHVybihvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGJlKXtyZXR1cm4gdHlwZW9mIGJlfTpmdW5jdGlvbihiZSl7cmV0dXJuIGJlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s''@;'; put 'put ''JiZiZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBiZX0pKEllKX1mdW5jdGlvbiBJKEllLGJlKXtmb3IodmFyIHdlPTA7d2U8YmUubGVuZ3RoO3dlKyspe3ZhciBwdD1iZVt3ZV07cHQuZW51bWVyYWJsZT1wdC5lbnVtZXJhYmxl''@;'; put 'put ''fHwhMSxwdC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHB0JiYocHQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJZSxUKHB0LmtleSkscHQpfX1mdW5jdGlvbiBmKEllLGJlLHdlKXtyZXR1cm4gYmUmJkkoSWUucHJvdG90eXBlLGJlKSx3ZSYmSShJZSx3ZSksT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KEllLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLEllfWZ1bmN0aW9uIFQoSWUpe3ZhciBiZT1mdW5jdGlvbiBBKEllLGJlKXtpZigib2JqZWN0IiE9PW8oSWUpfHxudWxsPT09SWUpcmV0dXJuIEllO3ZhciB3ZT1JZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv''@;'; put 'put ''aWQgMCE9PXdlKXt2YXIgcHQ9d2UuY2FsbChJZSxiZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PW8ocHQpKXJldHVybiBwdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWJlP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKEllKX0oSWUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09byhiZSk/YmU6U3RyaW5nKGJlKX12YXIgRmUsUixEPWQoMjEzNikuY29kZXMsRT1ELkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsQj1ELkVSUl9JTlZBTElEX0FSR19UWVBFLEY9RC5FUlJfSU5WQUxJRF9BUkdf''@;'; put 'put ''VkFMVUUsTj1ELkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxIPUQuRVJSX01JU1NJTkdfQVJHUyx6PWQoNTk2MSksVT1kKDk1MzkpLmluc3BlY3QsSz1kKDk1MzkpLnR5cGVzLFg9Sy5pc1Byb21pc2UsbmU9Sy5pc1JlZ0V4cCxzZT1kKDgxNjIpKCksaGU9ZCg1NjI0KSgpLF9lPWQoMTkyNCko''@;'; put 'put ''IlJlZ0V4cC5wcm90b3R5cGUudGVzdCIpO2Z1bmN0aW9uIHAoKXt2YXIgSWU9ZCg5MTU4KTtGZT1JZS5pc0RlZXBFcXVhbCxSPUllLmlzRGVlcFN0cmljdEVxdWFsfXZhciB5PSExLGw9dGUuZXhwb3J0cz1wZSxiPXt9O2Z1bmN0aW9uIHEoSWUpe3Rocm93IEllLm1lc3NhZ2UgaW5zdGFuY2Vv''@;'; put 'put ''ZiBFcnJvcj9JZS5tZXNzYWdlOm5ldyB6KEllKX1mdW5jdGlvbiBRKEllLGJlLHdlLHB0KXtpZighd2Upe3ZhciBLZT0hMTtpZigwPT09YmUpS2U9ITAscHQ9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKHB0IGluc3RhbmNlb2YgRXJyb3IpdGhy''@;'; put 'put ''b3cgcHQ7dmFyIFllPW5ldyB6KHthY3R1YWw6d2UsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpwdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpJZX0pO3Rocm93IFllLmdlbmVyYXRlZE1lc3NhZ2U9S2UsWWV9fWZ1bmN0aW9uIHBlKCl7Zm9yKHZhciBJZT1hcmd1bWVudHMubGVuZ3RoLGJlPW5l''@;'; put 'put ''dyBBcnJheShJZSksd2U9MDt3ZTxJZTt3ZSsrKWJlW3dlXT1hcmd1bWVudHNbd2VdO1EuYXBwbHkodm9pZCAwLFtwZSxiZS5sZW5ndGhdLmNvbmNhdChiZSkpfWwuZmFpbD1mdW5jdGlvbiBHKEllLGJlLHdlLHB0LEtlKXt2YXIgcXQsWWU9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09WWU/cXQ9''@;'; put 'put ''IkZhaWxlZCI6MT09PVllPyh3ZT1JZSxJZT12b2lkIDApOighMT09PXkmJih5PSEwLChTLmVtaXRXYXJuaW5nP1MuZW1pdFdhcm5pbmc6aC53YXJuLmJpbmQoaCkpKCJhc3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFz''@;'; put 'put ''c2VydC5zdHJpY3RFcXVhbCgpIGluc3RlYWQgb3Igb25seSBwYXNzIGEgbWVzc2FnZS4iLCJEZXByZWNhdGlvbldhcm5pbmciLCJERVAwMDk0IikpLDI9PT1ZZSYmKHB0PSIhPSIpKSx3ZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IHdlO3ZhciB2dD17YWN0dWFsOkllLGV4cGVjdGVkOmJlLG9w''@;'; put 'put ''ZXJhdG9yOnZvaWQgMD09PXB0PyJmYWlsIjpwdCxzdGFja1N0YXJ0Rm46S2V8fEd9O3ZvaWQgMCE9PXdlJiYodnQubWVzc2FnZT13ZSk7dmFyIFl0PW5ldyB6KHZ0KTt0aHJvdyBxdCYmKFl0Lm1lc3NhZ2U9cXQsWXQuZ2VuZXJhdGVkTWVzc2FnZT0hMCksWXR9LGwuQXNzZXJ0aW9uRXJyb3I9''@;'; put 'put ''eixsLm9rPXBlLGwuZXF1YWw9ZnVuY3Rpb24gSWUoYmUsd2UscHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgSCgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtiZSE9d2UmJnEoe2FjdHVhbDpiZSxleHBlY3RlZDp3ZSxtZXNzYWdlOnB0LG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZu''@;'; put 'put ''OkllfSl9LGwubm90RXF1YWw9ZnVuY3Rpb24gSWUoYmUsd2UscHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgSCgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtiZT09d2UmJnEoe2FjdHVhbDpiZSxleHBlY3RlZDp3ZSxtZXNzYWdlOnB0LG9wZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZu''@;'; put 'put ''OkllfSl9LGwuZGVlcEVxdWFsPWZ1bmN0aW9uIEllKGJlLHdlLHB0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IEgoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09RmUmJnAoKSxGZShiZSx3ZSl8fHEoe2FjdHVhbDpiZSxleHBlY3RlZDp3ZSxtZXNzYWdlOnB0LG9wZXJh''@;'; put 'put ''dG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpJZX0pfSxsLm5vdERlZXBFcXVhbD1mdW5jdGlvbiBJZShiZSx3ZSxwdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBIKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PUZlJiZwKCksRmUoYmUsd2UpJiZxKHthY3R1YWw6''@;'; put 'put ''YmUsZXhwZWN0ZWQ6d2UsbWVzc2FnZTpwdCxvcGVyYXRvcjoibm90RGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46SWV9KX0sbC5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gSWUoYmUsd2UscHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgSCgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2''@;'; put 'put ''b2lkIDA9PT1GZSYmcCgpLFIoYmUsd2UpfHxxKHthY3R1YWw6YmUsZXhwZWN0ZWQ6d2UsbWVzc2FnZTpwdCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46SWV9KX0sbC5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gUGUoSWUsYmUsd2Upe2lmKGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg8Mil0aHJvdyBuZXcgSCgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1GZSYmcCgpLFIoSWUsYmUpJiZxKHthY3R1YWw6SWUsZXhwZWN0ZWQ6YmUsbWVzc2FnZTp3ZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46UGV9KX0sbC5zdHJpY3RFcXVh''@;'; put 'put ''bD1mdW5jdGlvbiBJZShiZSx3ZSxwdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBIKCJhY3R1YWwiLCJleHBlY3RlZCIpO2hlKGJlLHdlKXx8cSh7YWN0dWFsOmJlLGV4cGVjdGVkOndlLG1lc3NhZ2U6cHQsb3BlcmF0b3I6InN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46SWV9''@;'; put 'put ''KX0sbC5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbiBJZShiZSx3ZSxwdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBIKCJhY3R1YWwiLCJleHBlY3RlZCIpO2hlKGJlLHdlKSYmcSh7YWN0dWFsOmJlLGV4cGVjdGVkOndlLG1lc3NhZ2U6cHQsb3BlcmF0b3I6Im5vdFN0cmljdEVx''@;'; put 'put ''dWFsIixzdGFja1N0YXJ0Rm46SWV9KX07dmFyIFplPWYoZnVuY3Rpb24gSWUoYmUsd2UscHQpe3ZhciBLZT10aGlzOyhmdW5jdGlvbiBNKEllLGJlKXtpZighKEllIGluc3RhbmNlb2YgYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIp''@;'; put 'put ''fSkodGhpcyxJZSksd2UuZm9yRWFjaChmdW5jdGlvbihZZSl7WWUgaW4gYmUmJihLZVtZZV09dm9pZCAwIT09cHQmJiJzdHJpbmciPT10eXBlb2YgcHRbWWVdJiZuZShiZVtZZV0pJiZfZShiZVtZZV0scHRbWWVdKT9wdFtZZV06YmVbWWVdKX0pfSk7ZnVuY3Rpb24gdmUoSWUsYmUsd2UscHQp''@;'; put 'put ''e2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBiZSl7aWYobmUoYmUpKXJldHVybiBfZShiZSxJZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEIoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0sYmUpO2lmKCJvYmplY3QiIT09byhJZSl8fG51bGw9PT1JZSl7dmFyIEtl''@;'; put 'put ''PW5ldyB6KHthY3R1YWw6SWUsZXhwZWN0ZWQ6YmUsbWVzc2FnZTp3ZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46cHR9KTt0aHJvdyBLZS5vcGVyYXRvcj1wdC5uYW1lLEtlfXZhciBZZT1PYmplY3Qua2V5cyhiZSk7aWYoYmUgaW5zdGFuY2VvZiBFcnJvcilZZS5w''@;'; put 'put ''dXNoKCJuYW1lIiwibWVzc2FnZSIpO2Vsc2UgaWYoMD09PVllLmxlbmd0aCl0aHJvdyBuZXcgRigiZXJyb3IiLGJlLCJtYXkgbm90IGJlIGFuIGVtcHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT1GZSYmcCgpLFllLmZvckVhY2goZnVuY3Rpb24ocXQpeyJzdHJpbmciPT10eXBlb2YgSWVb''@;'; put 'put ''cXRdJiZuZShiZVtxdF0pJiZfZShiZVtxdF0sSWVbcXRdKXx8ZnVuY3Rpb24gcWUoSWUsYmUsd2UscHQsS2UsWWUpe2lmKCEod2UgaW4gSWUpfHwhUihJZVt3ZV0sYmVbd2VdKSl7aWYoIXB0KXt2YXIgcXQ9bmV3IFplKEllLEtlKSxodD1uZXcgWmUoYmUsS2UsSWUpLHZ0PW5ldyB6KHthY3R1''@;'; put 'put ''YWw6cXQsZXhwZWN0ZWQ6aHQsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlllfSk7dGhyb3cgdnQuYWN0dWFsPUllLHZ0LmV4cGVjdGVkPWJlLHZ0Lm9wZXJhdG9yPVllLm5hbWUsdnR9cSh7YWN0dWFsOkllLGV4cGVjdGVkOmJlLG1lc3NhZ2U6cHQsb3BlcmF0b3I6''@;'; put 'put ''WWUubmFtZSxzdGFja1N0YXJ0Rm46WWV9KX19KEllLGJlLHF0LHdlLFllLHB0KX0pLCEwfXJldHVybiB2b2lkIDAhPT1iZS5wcm90b3R5cGUmJkllIGluc3RhbmNlb2YgYmV8fCFFcnJvci5pc1Byb3RvdHlwZU9mKGJlKSYmITA9PT1iZS5jYWxsKHt9LEllKX1mdW5jdGlvbiB1ZShJZSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIEllKXRocm93IG5ldyBCKCJmbiIsIkZ1bmN0aW9uIixJZSk7dHJ5e0llKCl9Y2F0Y2goYmUpe3JldHVybiBiZX1yZXR1cm4gYn1mdW5jdGlvbiB6ZShJZSl7cmV0dXJuIFgoSWUpfHxudWxsIT09SWUmJiJvYmplY3QiPT09byhJZSkmJiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBJZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgSWUuY2F0Y2h9ZnVuY3Rpb24gT2UoSWUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGJlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBJZSl7aWYoIXplKGJlPUllKCkpKXRocm93IG5ldyBOKCJpbnN0''@;'; put 'put ''YW5jZSBvZiBQcm9taXNlIiwicHJvbWlzZUZuIixiZSl9ZWxzZXtpZighemUoSWUpKXRocm93IG5ldyBCKCJwcm9taXNlRm4iLFsiRnVuY3Rpb24iLCJQcm9taXNlIl0sSWUpO2JlPUllfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGJlfSkudGhlbihm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBifSkuY2F0Y2goZnVuY3Rpb24od2Upe3JldHVybiB3ZX0pfSl9ZnVuY3Rpb24gQ2UoSWUsYmUsd2UscHQpe2lmKCJzdHJpbmciPT10eXBlb2Ygd2Upe2lmKDQ9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBCKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIs''@;'; put 'put ''IkZ1bmN0aW9uIiwiUmVnRXhwIl0sd2UpO2lmKCJvYmplY3QiPT09byhiZSkmJm51bGwhPT1iZSl7aWYoYmUubWVzc2FnZT09PXdlKXRocm93IG5ldyBFKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yIG1lc3NhZ2UgIicuY29uY2F0KGJlLm1lc3NhZ2UsJyIgaXMgaWRlbnRpY2FsIHRvIHRo''@;'; put 'put ''ZSBtZXNzYWdlLicpKX1lbHNlIGlmKGJlPT09d2UpdGhyb3cgbmV3IEUoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgIicuY29uY2F0KGJlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSk7cHQ9d2Usd2U9dm9pZCAwfWVsc2UgaWYobnVsbCE9d2UmJiJvYmplY3QiIT09byh3''@;'; put 'put ''ZSkmJiJmdW5jdGlvbiIhPXR5cGVvZiB3ZSl0aHJvdyBuZXcgQigiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLHdlKTtpZihiZT09PWIpe3ZhciBLZT0iIjt3ZSYmd2UubmFtZSYmKEtlKz0iICgiLmNvbmNhdCh3ZS5uYW1lLCIpIikpLEtlKz1wdD8iOiAi''@;'; put 'put ''LmNvbmNhdChwdCk6Ii4iLHEoe2FjdHVhbDp2b2lkIDAsZXhwZWN0ZWQ6d2Usb3BlcmF0b3I6SWUubmFtZSxtZXNzYWdlOiJNaXNzaW5nIGV4cGVjdGVkICIuY29uY2F0KCJyZWplY3RzIj09PUllLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChLZSksc3RhY2tTdGFydEZu''@;'; put 'put ''OkllfSl9aWYod2UmJiF2ZShiZSx3ZSxwdCxJZSkpdGhyb3cgYmV9ZnVuY3Rpb24ga2UoSWUsYmUsd2UscHQpe2lmKGJlIT09Yil7aWYoInN0cmluZyI9PXR5cGVvZiB3ZSYmKHB0PXdlLHdlPXZvaWQgMCksIXdlfHx2ZShiZSx3ZSkpe3ZhciBLZT1wdD8iOiAiLmNvbmNhdChwdCk6Ii4iO3Eo''@;'; put 'put ''e2FjdHVhbDpiZSxleHBlY3RlZDp3ZSxvcGVyYXRvcjpJZS5uYW1lLG1lc3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9PT1JZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQoS2UsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQo''@;'; put 'put ''YmUmJmJlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46SWV9KX10aHJvdyBiZX19ZnVuY3Rpb24geGUoSWUsYmUsd2UscHQsS2Upe2lmKCFuZShiZSkpdGhyb3cgbmV3IEIoInJlZ2V4cCIsIlJlZ0V4cCIsYmUpO3ZhciBZZT0ibWF0Y2giPT09S2U7aWYoInN0cmluZyIhPXR5cGVvZiBJZXx8''@;'; put 'put ''X2UoYmUsSWUpIT09WWUpe2lmKHdlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgd2U7dmFyIHF0PSF3ZTt3ZT13ZXx8KCJzdHJpbmciIT10eXBlb2YgSWU/J1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcrIiIuY29uY2F0KG8oSWUp''@;'; put 'put ''LCIgKCIpLmNvbmNhdChVKEllKSwiKSIpOihZZT8iVGhlIGlucHV0IGRpZCBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAiOiJUaGUgaW5wdXQgd2FzIGV4cGVjdGVkIHRvIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICIpKyIiLmNvbmNhdChVKGJlKSwiLiBJbnB1''@;'; put 'put ''dDpcblxuIikuY29uY2F0KFUoSWUpLCJcbiIpKTt2YXIgaHQ9bmV3IHooe2FjdHVhbDpJZSxleHBlY3RlZDpiZSxtZXNzYWdlOndlLG9wZXJhdG9yOktlLHN0YWNrU3RhcnRGbjpwdH0pO3Rocm93IGh0LmdlbmVyYXRlZE1lc3NhZ2U9cXQsaHR9fWZ1bmN0aW9uIE1lKCl7Zm9yKHZhciBJZT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGJlPW5ldyBBcnJheShJZSksd2U9MDt3ZTxJZTt3ZSsrKWJlW3dlXT1hcmd1bWVudHNbd2VdO1EuYXBwbHkodm9pZCAwLFtNZSxiZS5sZW5ndGhdLmNvbmNhdChiZSkpfWwudGhyb3dzPWZ1bmN0aW9uIEllKGJlKXtmb3IodmFyIHdlPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''cHQ9bmV3IEFycmF5KHdlPjE/d2UtMTowKSxLZT0xO0tlPHdlO0tlKyspcHRbS2UtMV09YXJndW1lbnRzW0tlXTtDZS5hcHBseSh2b2lkIDAsW0llLHVlKGJlKV0uY29uY2F0KHB0KSl9LGwucmVqZWN0cz1mdW5jdGlvbiBJZShiZSl7Zm9yKHZhciB3ZT1hcmd1bWVudHMubGVuZ3RoLHB0PW5l''@;'; put 'put ''dyBBcnJheSh3ZT4xP3dlLTE6MCksS2U9MTtLZTx3ZTtLZSsrKXB0W0tlLTFdPWFyZ3VtZW50c1tLZV07cmV0dXJuIE9lKGJlKS50aGVuKGZ1bmN0aW9uKFllKXtyZXR1cm4gQ2UuYXBwbHkodm9pZCAwLFtJZSxZZV0uY29uY2F0KHB0KSl9KX0sbC5kb2VzTm90VGhyb3c9ZnVuY3Rpb24gSWUo''@;'; put 'put ''YmUpe2Zvcih2YXIgd2U9YXJndW1lbnRzLmxlbmd0aCxwdD1uZXcgQXJyYXkod2U+MT93ZS0xOjApLEtlPTE7S2U8d2U7S2UrKylwdFtLZS0xXT1hcmd1bWVudHNbS2VdO2tlLmFwcGx5KHZvaWQgMCxbSWUsdWUoYmUpXS5jb25jYXQocHQpKX0sbC5kb2VzTm90UmVqZWN0PWZ1bmN0aW9uIEll''@;'; put 'put ''KGJlKXtmb3IodmFyIHdlPWFyZ3VtZW50cy5sZW5ndGgscHQ9bmV3IEFycmF5KHdlPjE/d2UtMTowKSxLZT0xO0tlPHdlO0tlKyspcHRbS2UtMV09YXJndW1lbnRzW0tlXTtyZXR1cm4gT2UoYmUpLnRoZW4oZnVuY3Rpb24oWWUpe3JldHVybiBrZS5hcHBseSh2b2lkIDAsW0llLFllXS5jb25j''@;'; put 'put ''YXQocHQpKX0pfSxsLmlmRXJyb3I9ZnVuY3Rpb24gSWUoYmUpe2lmKG51bGwhPWJlKXt2YXIgd2U9ImlmRXJyb3IgZ290IHVud2FudGVkIGV4Y2VwdGlvbjogIjsib2JqZWN0Ij09PW8oYmUpJiYic3RyaW5nIj09dHlwZW9mIGJlLm1lc3NhZ2U/d2UrPTA9PT1iZS5tZXNzYWdlLmxlbmd0aCYm''@;'; put 'put ''YmUuY29uc3RydWN0b3I/YmUuY29uc3RydWN0b3IubmFtZTpiZS5tZXNzYWdlOndlKz1VKGJlKTt2YXIgcHQ9bmV3IHooe2FjdHVhbDpiZSxleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlOndlLHN0YWNrU3RhcnRGbjpJZX0pLEtlPWJlLnN0YWNrO2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgS2Upe3ZhciBZZT1LZS5zcGxpdCgiXG4iKTtZZS5zaGlmdCgpO2Zvcih2YXIgcXQ9cHQuc3RhY2suc3BsaXQoIlxuIiksaHQ9MDtodDxZZS5sZW5ndGg7aHQrKyl7dmFyIHZ0PXF0LmluZGV4T2YoWWVbaHRdKTtpZigtMSE9PXZ0KXtxdD1xdC5zbGljZSgwLHZ0KTticmVha319''@;'; put 'put ''cHQuc3RhY2s9IiIuY29uY2F0KHF0LmpvaW4oIlxuIiksIlxuIikuY29uY2F0KFllLmpvaW4oIlxuIikpfXRocm93IHB0fX0sbC5tYXRjaD1mdW5jdGlvbiBJZShiZSx3ZSxwdCl7eGUoYmUsd2UscHQsSWUsIm1hdGNoIil9LGwuZG9lc05vdE1hdGNoPWZ1bmN0aW9uIEllKGJlLHdlLHB0KXt4''@;'; put 'put ''ZShiZSx3ZSxwdCxJZSwiZG9lc05vdE1hdGNoIil9LGwuc3RyaWN0PXNlKE1lLGwse2VxdWFsOmwuc3RyaWN0RXF1YWwsZGVlcEVxdWFsOmwuZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOmwubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOmwubm90RGVlcFN0cmljdEVxdWFsfSksbC5zdHJp''@;'; put 'put ''Y3Quc3RyaWN0PWwuc3RyaWN0fSw1OTYxOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSk7ZnVuY3Rpb24gaChiLHEpe3ZhciBHPU9iamVjdC5rZXlzKGIpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBRPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJv''@;'; put 'put ''bHMoYik7cSYmKFE9US5maWx0ZXIoZnVuY3Rpb24ocGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIscGUpLmVudW1lcmFibGV9KSksRy5wdXNoLmFwcGx5KEcsUSl9cmV0dXJuIEd9ZnVuY3Rpb24gbyhiKXtmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7''@;'; put 'put ''cSsrKXt2YXIgRz1udWxsIT1hcmd1bWVudHNbcV0/YXJndW1lbnRzW3FdOnt9O3ElMj9oKE9iamVjdChHKSwhMCkuZm9yRWFjaChmdW5jdGlvbihRKXtJKGIsUSxHW1FdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGIsT2JqZWN0''@;'; put 'put ''LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRykpOmgoT2JqZWN0KEcpKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLFEsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihHLFEpKX0pfXJldHVybiBifWZ1bmN0aW9uIEkoYixxLEcpe3JldHVybihx''@;'; put 'put ''PU0ocSkpaW4gYj9PYmplY3QuZGVmaW5lUHJvcGVydHkoYixxLHt2YWx1ZTpHLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6YltxXT1HLGJ9ZnVuY3Rpb24gVChiLHEpe2Zvcih2YXIgRz0wO0c8cS5sZW5ndGg7RysrKXt2YXIgUT1xW0ddO1EuZW51bWVyYWJs''@;'; put 'put ''ZT1RLmVudW1lcmFibGV8fCExLFEuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBRJiYoUS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsTShRLmtleSksUSl9fWZ1bmN0aW9uIE0oYil7dmFyIHE9ZnVuY3Rpb24gTyhiLHEpe2lmKCJvYmplY3QiIT09WChiKXx8bnVsbD09''@;'; put 'put ''PWIpcmV0dXJuIGI7dmFyIEc9YltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PUcpe3ZhciBRPUcuY2FsbChiLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1YKFEpKXJldHVybiBRO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09cT9TdHJpbmc6TnVtYmVyKShiKX0oYiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1YKHEpP3E6U3RyaW5nKHEpfWZ1bmN0aW9uIEIoYixxKXtpZihxJiYoIm9iamVjdCI9PT1YKHEpfHwiZnVuY3Rpb24iPT10eXBlb2YgcSkpcmV0''@;'; put 'put ''dXJuIHE7aWYodm9pZCAwIT09cSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBGKGIpfWZ1bmN0aW9uIEYoYil7aWYodm9pZCAwPT09Yil0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Io''@;'; put 'put ''InRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBifWZ1bmN0aW9uIE4oYil7dmFyIHE9ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4gTj1mdW5jdGlvbihRKXtpZihudWxsPT09UXx8IWZ1''@;'; put 'put ''bmN0aW9uIFooYil7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKGIpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX0oUSkpcmV0dXJuIFE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFEpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBu''@;'; put 'put ''dWxsIG9yIGEgZnVuY3Rpb24iKTtpZih0eXBlb2YgcTwidSIpe2lmKHEuaGFzKFEpKXJldHVybiBxLmdldChRKTtxLnNldChRLHBlKX1mdW5jdGlvbiBwZSgpe3JldHVybiBIKFEsYXJndW1lbnRzLEsodGhpcykuY29uc3RydWN0b3IpfXJldHVybiBwZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZShRLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnBlLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLFUocGUsUSl9LE4oYil9ZnVuY3Rpb24gSChiLHEsRyl7cmV0dXJuKEg9eigpP1JlZmxlY3QuY29uc3RydWN0LmJpbmQoKTpmdW5jdGlvbihwZSxQ''@;'; put 'put ''ZSxaZSl7dmFyIHFlPVtudWxsXTtxZS5wdXNoLmFwcGx5KHFlLFBlKTt2YXIgdWU9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkocGUscWUpKTtyZXR1cm4gWmUmJlUodWUsWmUucHJvdG90eXBlKSx1ZX0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiB6KCl7aWYodHlwZW9mIFJlZmxl''@;'; put 'put ''Y3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4s''@;'; put 'put ''W10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIFUoYixxKXtyZXR1cm4oVT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihRLHBlKXtyZXR1cm4gUS5fX3Byb3RvX189cGUsUX0pKGIscSl9ZnVuY3Rp''@;'; put 'put ''b24gSyhiKXtyZXR1cm4oSz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihHKXtyZXR1cm4gRy5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihHKX0pKGIpfWZ1bmN0aW9uIFgoYil7cmV0dXJuKFg9ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24ocSl7cmV0dXJuIHR5cGVvZiBxfTpmdW5jdGlvbihxKXtyZXR1cm4gcSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmcS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmcSE9PVN5bWJvbC5wcm90''@;'; put 'put ''b3R5cGU/InN5bWJvbCI6dHlwZW9mIHF9KShiKX12YXIgc2U9ZCg5NTM5KS5pbnNwZWN0LF9lPWQoMjEzNikuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7ZnVuY3Rpb24gbWUoYixxLEcpe3JldHVybih2b2lkIDA9PT1HfHxHPmIubGVuZ3RoKSYmKEc9Yi5sZW5ndGgpLGIuc3Vic3RyaW5n''@;'; put 'put ''KEctcS5sZW5ndGgsRyk9PT1xfXZhciBSPSIiLHM9IiIsdT0iIix2PSIiLHA9e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0''@;'; put 'put ''RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsOiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFs''@;'; put 'put ''OiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJpY3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVj''@;'; put 'put ''dGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVu''@;'; put 'put ''ZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24gayhiKXt2YXIgcT1PYmplY3Qua2V5cyhiKSxHPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGIpKTtyZXR1cm4gcS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKFEpe0dbUV09YltRXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLCJtZXNzYWdlIix7dmFsdWU6Yi5tZXNzYWdlfSksR31mdW5jdGlvbiBMKGIpe3JldHVybiBzZShiLHtjb21wYWN0OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93''@;'; put 'put ''SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX12YXIgbD1mdW5jdGlvbihiLHEpeyFmdW5jdGlvbiBEKGIscSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEmJm51bGwhPT1xKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJl''@;'; put 'put ''c3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7Yi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShxJiZxLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmIsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJwcm90''@;'; put 'put ''b3R5cGUiLHt3cml0YWJsZTohMX0pLHEmJlUoYixxKX0oUSxiKTt2YXIgRz1mdW5jdGlvbiBFKGIpe3ZhciBxPXooKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcGUsUT1LKGIpO2lmKHEpe3ZhciBQZT1LKHRoaXMpLmNvbnN0cnVjdG9yO3BlPVJlZmxlY3QuY29uc3RydWN0KFEsYXJndW1lbnRz''@;'; put 'put ''LFBlKX1lbHNlIHBlPVEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBCKHRoaXMscGUpfX0oUSk7ZnVuY3Rpb24gUShwZSl7dmFyIFBlO2lmKGZ1bmN0aW9uIGYoYixxKXtpZighKGIgaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFz''@;'; put 'put ''IGEgZnVuY3Rpb24iKX0odGhpcyxRKSwib2JqZWN0IiE9PVgocGUpfHxudWxsPT09cGUpdGhyb3cgbmV3IF9lKCJvcHRpb25zIiwiT2JqZWN0IixwZSk7dmFyIFplPXBlLm1lc3NhZ2UscWU9cGUub3BlcmF0b3IsdmU9cGUuc3RhY2tTdGFydEZuLHVlPXBlLmFjdHVhbCx6ZT1wZS5leHBlY3Rl''@;'; put 'put ''ZCxPZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVsbCE9WmUpUGU9Ry5jYWxsKHRoaXMsU3RyaW5nKFplKSk7ZWxzZSBpZihTLnN0ZGVyciYmUy5zdGRlcnIuaXNUVFkmJihTLnN0ZGVyciYmUy5zdGRlcnIuZ2V0Q29sb3JEZXB0aCYmMSE9PVMu''@;'; put 'put ''c3RkZXJyLmdldENvbG9yRGVwdGgoKT8oUj0iXHgxYlszNG0iLHM9Ilx4MWJbMzJtIix2PSJceDFiWzM5bSIsdT0iXHgxYlszMW0iKTooUj0iIixzPSIiLHY9IiIsdT0iIikpLCJvYmplY3QiPT09WCh1ZSkmJm51bGwhPT11ZSYmIm9iamVjdCI9PT1YKHplKSYmbnVsbCE9PXplJiYic3RhY2si''@;'; put 'put ''aW4gdWUmJnVlIGluc3RhbmNlb2YgRXJyb3ImJiJzdGFjayJpbiB6ZSYmemUgaW5zdGFuY2VvZiBFcnJvciYmKHVlPWsodWUpLHplPWsoemUpKSwiZGVlcFN0cmljdEVxdWFsIj09PXFlfHwic3RyaWN0RXF1YWwiPT09cWUpUGU9Ry5jYWxsKHRoaXMsZnVuY3Rpb24geShiLHEsRyl7dmFyIFE9''@;'; put 'put ''IiIscGU9IiIsUGU9MCxaZT0iIixxZT0hMSx2ZT1MKGIpLHVlPXZlLnNwbGl0KCJcbiIpLHplPUwocSkuc3BsaXQoIlxuIiksT2U9MCxDZT0iIjtpZigic3RyaWN0RXF1YWwiPT09RyYmIm9iamVjdCI9PT1YKGIpJiYib2JqZWN0Ij09PVgocSkmJm51bGwhPT1iJiZudWxsIT09cSYmKEc9InN0''@;'; put 'put ''cmljdEVxdWFsT2JqZWN0IiksMT09PXVlLmxlbmd0aCYmMT09PXplLmxlbmd0aCYmdWVbMF0hPT16ZVswXSl7dmFyIGtlPXVlWzBdLmxlbmd0aCt6ZVswXS5sZW5ndGg7aWYoa2U8PTEwKXtpZighKCJvYmplY3QiPT09WChiKSYmbnVsbCE9PWJ8fCJvYmplY3QiPT09WChxKSYmbnVsbCE9PXF8''@;'; put 'put ''fDA9PT1iJiYwPT09cSkpcmV0dXJuIiIuY29uY2F0KHBbR10sIlxuXG4iKSsiIi5jb25jYXQodWVbMF0sIiAhPT0gIikuY29uY2F0KHplWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PUcmJmtlPChTLnN0ZGVyciYmUy5zdGRlcnIuaXNUVFk/Uy5zdGRlcnIuY29sdW1u''@;'; put 'put ''czo4MCkpe2Zvcig7dWVbMF1bT2VdPT09emVbMF1bT2VdOylPZSsrO09lPjImJihDZT0iXG4gICIuY29uY2F0KGZ1bmN0aW9uIEZlKGIscSl7aWYocT1NYXRoLmZsb29yKHEpLDA9PWIubGVuZ3RofHwwPT1xKXJldHVybiIiO3ZhciBHPWIubGVuZ3RoKnE7Zm9yKHE9TWF0aC5mbG9vcihNYXRo''@;'; put 'put ''LmxvZyhxKS9NYXRoLmxvZygyKSk7cTspYis9YixxLS07cmV0dXJuIGIrYi5zdWJzdHJpbmcoMCxHLWIubGVuZ3RoKX0oIiAiLE9lKSwiXiIpLE9lPTApfX1mb3IodmFyIE1lPXVlW3VlLmxlbmd0aC0xXSxJZT16ZVt6ZS5sZW5ndGgtMV07TWU9PT1JZSYmKE9lKys8Mj9aZT0iXG4gICIuY29u''@;'; put 'put ''Y2F0KE1lKS5jb25jYXQoWmUpOlE9TWUsdWUucG9wKCksemUucG9wKCksMCE9PXVlLmxlbmd0aCYmMCE9PXplLmxlbmd0aCk7KU1lPXVlW3VlLmxlbmd0aC0xXSxJZT16ZVt6ZS5sZW5ndGgtMV07dmFyIGJlPU1hdGgubWF4KHVlLmxlbmd0aCx6ZS5sZW5ndGgpO2lmKDA9PT1iZSl7dmFyIHdl''@;'; put 'put ''PXZlLnNwbGl0KCJcbiIpO2lmKHdlLmxlbmd0aD4zMClmb3Iod2VbMjZdPSIiLmNvbmNhdChSLCIuLi4iKS5jb25jYXQodik7d2UubGVuZ3RoPjI3Oyl3ZS5wb3AoKTtyZXR1cm4iIi5jb25jYXQocC5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQod2Uuam9pbigiXG4iKSwiXG4iKX1PZT4z''@;'; put 'put ''JiYoWmU9IlxuIi5jb25jYXQoUiwiLi4uIikuY29uY2F0KHYpLmNvbmNhdChaZSkscWU9ITApLCIiIT09USYmKFplPSJcbiAgIi5jb25jYXQoUSkuY29uY2F0KFplKSxRPSIiKTt2YXIgcHQ9MCxLZT1wW0ddKyJcbiIuY29uY2F0KHMsIisgYWN0dWFsIikuY29uY2F0KHYsIiAiKS5jb25jYXQo''@;'; put 'put ''dSwiLSBleHBlY3RlZCIpLmNvbmNhdCh2KSxZZT0iICIuY29uY2F0KFIsIi4uLiIpLmNvbmNhdCh2LCIgTGluZXMgc2tpcHBlZCIpO2ZvcihPZT0wO09lPGJlO09lKyspe3ZhciBxdD1PZS1QZTtpZih1ZS5sZW5ndGg8T2UrMSlxdD4xJiZPZT4yJiYocXQ+ND8ocGUrPSJcbiIuY29uY2F0KFIs''@;'; put 'put ''Ii4uLiIpLmNvbmNhdCh2KSxxZT0hMCk6cXQ+MyYmKHBlKz0iXG4gICIuY29uY2F0KHplW09lLTJdKSxwdCsrKSxwZSs9IlxuICAiLmNvbmNhdCh6ZVtPZS0xXSkscHQrKyksUGU9T2UsUSs9IlxuIi5jb25jYXQodSwiLSIpLmNvbmNhdCh2LCIgIikuY29uY2F0KHplW09lXSkscHQrKztlbHNl''@;'; put 'put ''IGlmKHplLmxlbmd0aDxPZSsxKXF0PjEmJk9lPjImJihxdD40PyhwZSs9IlxuIi5jb25jYXQoUiwiLi4uIikuY29uY2F0KHYpLHFlPSEwKTpxdD4zJiYocGUrPSJcbiAgIi5jb25jYXQodWVbT2UtMl0pLHB0KyspLHBlKz0iXG4gICIuY29uY2F0KHVlW09lLTFdKSxwdCsrKSxQZT1PZSxwZSs9''@;'; put 'put ''IlxuIi5jb25jYXQocywiKyIpLmNvbmNhdCh2LCIgIikuY29uY2F0KHVlW09lXSkscHQrKztlbHNle3ZhciBodD16ZVtPZV0sdnQ9dWVbT2VdLFl0PXZ0IT09aHQmJighbWUodnQsIiwiKXx8dnQuc2xpY2UoMCwtMSkhPT1odCk7WXQmJm1lKGh0LCIsIikmJmh0LnNsaWNlKDAsLTEpPT09dnQm''@;'; put 'put ''JihZdD0hMSx2dCs9IiwiKSxZdD8ocXQ+MSYmT2U+MiYmKHF0PjQ/KHBlKz0iXG4iLmNvbmNhdChSLCIuLi4iKS5jb25jYXQodikscWU9ITApOnF0PjMmJihwZSs9IlxuICAiLmNvbmNhdCh1ZVtPZS0yXSkscHQrKykscGUrPSJcbiAgIi5jb25jYXQodWVbT2UtMV0pLHB0KyspLFBlPU9lLHBl''@;'; put 'put ''Kz0iXG4iLmNvbmNhdChzLCIrIikuY29uY2F0KHYsIiAiKS5jb25jYXQodnQpLFErPSJcbiIuY29uY2F0KHUsIi0iKS5jb25jYXQodiwiICIpLmNvbmNhdChodCkscHQrPTIpOihwZSs9USxRPSIiLCgxPT09cXR8fDA9PT1PZSkmJihwZSs9IlxuICAiLmNvbmNhdCh2dCkscHQrKykpfWlmKHB0''@;'; put 'put ''PjIwJiZPZTxiZS0yKXJldHVybiIiLmNvbmNhdChLZSkuY29uY2F0KFllLCJcbiIpLmNvbmNhdChwZSwiXG4iKS5jb25jYXQoUiwiLi4uIikuY29uY2F0KHYpLmNvbmNhdChRLCJcbiIpKyIiLmNvbmNhdChSLCIuLi4iKS5jb25jYXQodil9cmV0dXJuIiIuY29uY2F0KEtlKS5jb25jYXQocWU/''@;'; put 'put ''WWU6IiIsIlxuIikuY29uY2F0KHBlKS5jb25jYXQoUSkuY29uY2F0KFplKS5jb25jYXQoQ2UpfSh1ZSx6ZSxxZSkpO2Vsc2UgaWYoIm5vdERlZXBTdHJpY3RFcXVhbCI9PT1xZXx8Im5vdFN0cmljdEVxdWFsIj09PXFlKXt2YXIgQ2U9cFtxZV0sa2U9TCh1ZSkuc3BsaXQoIlxuIik7aWYoIm5v''@;'; put 'put ''dFN0cmljdEVxdWFsIj09PXFlJiYib2JqZWN0Ij09PVgodWUpJiZudWxsIT09dWUmJihDZT1wLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxrZS5sZW5ndGg+MzApZm9yKGtlWzI2XT0iIi5jb25jYXQoUiwiLi4uIikuY29uY2F0KHYpO2tlLmxlbmd0aD4yNzspa2UucG9wKCk7UGU9Ry5jYWxsKHRo''@;'; put 'put ''aXMsMT09PWtlLmxlbmd0aD8iIi5jb25jYXQoQ2UsIiAiKS5jb25jYXQoa2VbMF0pOiIiLmNvbmNhdChDZSwiXG5cbiIpLmNvbmNhdChrZS5qb2luKCJcbiIpLCJcbiIpKX1lbHNle3ZhciB4ZT1MKHVlKSxNZT0iIixJZT1wW3FlXTsibm90RGVlcEVxdWFsIj09PXFlfHwibm90RXF1YWwiPT09''@;'; put 'put ''cWU/KHhlPSIiLmNvbmNhdChwW3FlXSwiXG5cbiIpLmNvbmNhdCh4ZSkpLmxlbmd0aD4xMDI0JiYoeGU9IiIuY29uY2F0KHhlLnNsaWNlKDAsMTAyMSksIi4uLiIpKTooTWU9IiIuY29uY2F0KEwoemUpKSx4ZS5sZW5ndGg+NTEyJiYoeGU9IiIuY29uY2F0KHhlLnNsaWNlKDAsNTA5KSwiLi4u''@;'; put 'put ''IikpLE1lLmxlbmd0aD41MTImJihNZT0iIi5jb25jYXQoTWUuc2xpY2UoMCw1MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1xZXx8ImVxdWFsIj09PXFlP3hlPSIiLmNvbmNhdChJZSwiXG5cbiIpLmNvbmNhdCh4ZSwiXG5cbnNob3VsZCBlcXVhbFxuXG4iKTpNZT0iICIuY29uY2F0KHFlLCIg''@;'; put 'put ''IikuY29uY2F0KE1lKSksUGU9Ry5jYWxsKHRoaXMsIiIuY29uY2F0KHhlKS5jb25jYXQoTWUpKX1yZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PU9lLFBlLmdlbmVyYXRlZE1lc3NhZ2U9IVplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGKFBlKSwibmFtZSIse3ZhbHVlOiJBc3NlcnRpb25F''@;'; put 'put ''cnJvciBbRVJSX0FTU0VSVElPTl0iLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksUGUuY29kZT0iRVJSX0FTU0VSVElPTiIsUGUuYWN0dWFsPXVlLFBlLmV4cGVjdGVkPXplLFBlLm9wZXJhdG9yPXFlLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5j''@;'; put 'put ''YXB0dXJlU3RhY2tUcmFjZShGKFBlKSx2ZSksUGUubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLEIoUGUpfXJldHVybiBmdW5jdGlvbiBBKGIscSxHKXtxJiZUKGIucHJvdG90eXBlLHEpLEcmJlQoYixHKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0o''@;'; put 'put ''USxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6cSx2YWx1ZTpmdW5jdGlvbihQZSxaZSl7cmV0dXJuIHNlKHRoaXMsbyhvKHt9''@;'; put 'put ''LFplKSx7fSx7Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkpfX1dKSxRfShOKEVycm9yKSxzZS5jdXN0b20pO3RlLmV4cG9ydHM9bH0sMjEzNjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBTKHNlKXtyZXR1cm4oUz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihoZSl7cmV0dXJuIHR5cGVvZiBoZX06ZnVuY3Rpb24oaGUpe3JldHVybiBoZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmaGUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmhlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0''@;'; put 'put ''eXBlb2YgaGV9KShzZSl9ZnVuY3Rpb24gaChzZSxoZSl7Zm9yKHZhciBfZT0wO19lPGhlLmxlbmd0aDtfZSsrKXt2YXIgbWU9aGVbX2VdO21lLmVudW1lcmFibGU9bWUuZW51bWVyYWJsZXx8ITEsbWUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBtZSYmKG1lLndyaXRhYmxlPSEwKSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoc2UsSShtZS5rZXkpLG1lKX19ZnVuY3Rpb24gSShzZSl7dmFyIGhlPWZ1bmN0aW9uIGYoc2UsaGUpe2lmKCJvYmplY3QiIT09UyhzZSl8fG51bGw9PT1zZSlyZXR1cm4gc2U7dmFyIF9lPXNlW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09X2Upe3Zh''@;'; put 'put ''ciBtZT1fZS5jYWxsKHNlLGhlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09UyhtZSkpcmV0dXJuIG1lO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09aGU/U3RyaW5nOk51bWJlciko''@;'; put 'put ''c2UpfShzZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1TKGhlKT9oZTpTdHJpbmcoaGUpfWZ1bmN0aW9uIE0oc2UsaGUpe3JldHVybihNPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKG1lLEZlKXtyZXR1cm4gbWUuX19wcm90''@;'; put 'put ''b19fPUZlLG1lfSkoc2UsaGUpfWZ1bmN0aW9uIEYoc2Upe3JldHVybihGPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoX2UpfSkoc2UpfXZhciBI''@;'; put 'put ''LHosTj17fTtmdW5jdGlvbiBaKHNlLGhlLF9lKXtfZXx8KF9lPUVycm9yKTt2YXIgRmU9ZnVuY3Rpb24oUil7IWZ1bmN0aW9uIEEoc2UsaGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoZSYmbnVsbCE9PWhlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRo''@;'; put 'put ''ZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7c2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaGUmJmhlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnNlLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoc2UsInByb3RvdHlwZSIse3dy''@;'; put 'put ''aXRhYmxlOiExfSksaGUmJk0oc2UsaGUpfSh1LFIpO3ZhciBzPWZ1bmN0aW9uIE8oc2Upe3ZhciBoZT1mdW5jdGlvbiBCKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciBGZSxtZT1GKHNlKTtpZiho''@;'; put 'put ''ZSl7dmFyIFI9Rih0aGlzKS5jb25zdHJ1Y3RvcjtGZT1SZWZsZWN0LmNvbnN0cnVjdChtZSxhcmd1bWVudHMsUil9ZWxzZSBGZT1tZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIEQoc2UsaGUpe2lmKGhlJiYoIm9iamVjdCI9PT1TKGhlKXx8ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGhlKSlyZXR1cm4gaGU7aWYodm9pZCAwIT09aGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gRShzZSl7aWYodm9pZCAwPT09c2UpdGhyb3cgbmV3IFJlZmVy''@;'; put 'put ''ZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gc2V9KHNlKX0odGhpcyxGZSl9fSh1KTtmdW5jdGlvbiB1KHYscCxfKXt2YXIgaztyZXR1cm4gZnVuY3Rpb24gVChzZSxoZSl7aWYoIShzZSBpbnN0YW5j''@;'; put 'put ''ZW9mIGhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx1KSxrPXMuY2FsbCh0aGlzLGZ1bmN0aW9uIG1lKFIscyx1KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGhlP2hlOmhlKFIscyx1KX0odixwLF8pKSxrLmNvZGU9c2Us''@;'; put 'put ''a31yZXR1cm4gZnVuY3Rpb24gbyhzZSxoZSxfZSl7cmV0dXJuIGhlJiZoKHNlLnByb3RvdHlwZSxoZSksX2UmJmgoc2UsX2UpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxzZX0odSl9KF9lKTtOW3NlXT1GZX1mdW5jdGlvbiBVKHNlLGhlKXtp''@;'; put 'put ''ZihBcnJheS5pc0FycmF5KHNlKSl7dmFyIF9lPXNlLmxlbmd0aDtyZXR1cm4gc2U9c2UubWFwKGZ1bmN0aW9uKG1lKXtyZXR1cm4gU3RyaW5nKG1lKX0pLF9lPjI/Im9uZSBvZiAiLmNvbmNhdChoZSwiICIpLmNvbmNhdChzZS5zbGljZSgwLF9lLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrc2Vb''@;'; put 'put ''X2UtMV06Mj09PV9lPyJvbmUgb2YgIi5jb25jYXQoaGUsIiAiKS5jb25jYXQoc2VbMF0sIiBvciAiKS5jb25jYXQoc2VbMV0pOiJvZiAiLmNvbmNhdChoZSwiICIpLmNvbmNhdChzZVswXSl9cmV0dXJuIm9mICIuY29uY2F0KGhlLCIgIikuY29uY2F0KFN0cmluZyhzZSkpfVooIkVSUl9BTUJJ''@;'; put 'put ''R1VPVVNfQVJHVU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJyxUeXBlRXJyb3IpLFooIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihzZSxoZSxfZSl7dmFyIG1lLEZlO2lmKHZvaWQgMD09PUgmJihIPWQoOTI4MikpLEgoInN0cmluZyI9PXR5cGVvZiBz''@;'; put 'put ''ZSwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmciKSwic3RyaW5nIj09dHlwZW9mIGhlJiZmdW5jdGlvbiBLKHNlLGhlLF9lKXtyZXR1cm4gc2Uuc3Vic3RyKCFfZXx8X2U8MD8wOitfZSxoZS5sZW5ndGgpPT09aGV9KGhlLCJub3QgIik/KG1lPSJtdXN0IG5vdCBiZSIsaGU9aGUucmVwbGFjZSgv''@;'; put 'put ''Xm5vdCAvLCIiKSk6bWU9Im11c3QgYmUiLGZ1bmN0aW9uIFgoc2UsaGUsX2Upe3JldHVybih2b2lkIDA9PT1fZXx8X2U+c2UubGVuZ3RoKSYmKF9lPXNlLmxlbmd0aCksc2Uuc3Vic3RyaW5nKF9lLWhlLmxlbmd0aCxfZSk9PT1oZX0oc2UsIiBhcmd1bWVudCIpKUZlPSJUaGUgIi5jb25jYXQo''@;'; put 'put ''c2UsIiAiKS5jb25jYXQobWUsIiAiKS5jb25jYXQoVShoZSwidHlwZSIpKTtlbHNle3ZhciBSPWZ1bmN0aW9uIG5lKHNlLGhlLF9lKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIF9lJiYoX2U9MCksIShfZStoZS5sZW5ndGg+c2UubGVuZ3RoKSYmLTEhPT1zZS5pbmRleE9mKGhlLF9lKX0oc2Us''@;'; put 'put ''Ii4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7RmU9J1RoZSAiJy5jb25jYXQoc2UsJyIgJykuY29uY2F0KFIsIiAiKS5jb25jYXQobWUsIiAiKS5jb25jYXQoVShoZSwidHlwZSIpKX1yZXR1cm4gRmUrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdChTKF9lKSl9LFR5cGVFcnJvciksWigiRVJS''@;'; put 'put ''X0lOVkFMSURfQVJHX1ZBTFVFIixmdW5jdGlvbihzZSxoZSl7dmFyIF9lPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXMgaW52YWxpZCI7dm9pZCAwPT09eiYmKHo9ZCg5NTM5KSk7dmFyIG1lPXouaW5zcGVjdChoZSk7cmV0dXJuIG1l''@;'; put 'put ''Lmxlbmd0aD4xMjgmJihtZT0iIi5jb25jYXQobWUuc2xpY2UoMCwxMjgpLCIuLi4iKSksIlRoZSBhcmd1bWVudCAnIi5jb25jYXQoc2UsIicgIikuY29uY2F0KF9lLCIuIFJlY2VpdmVkICIpLmNvbmNhdChtZSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxaKCJFUlJfSU5WQUxJRF9SRVRVUk5f''@;'; put 'put ''VkFMVUUiLGZ1bmN0aW9uKHNlLGhlLF9lKXt2YXIgbWU7cmV0dXJuIG1lPV9lJiZfZS5jb25zdHJ1Y3RvciYmX2UuY29uc3RydWN0b3IubmFtZT8iaW5zdGFuY2Ugb2YgIi5jb25jYXQoX2UuY29uc3RydWN0b3IubmFtZSk6InR5cGUgIi5jb25jYXQoUyhfZSkpLCJFeHBlY3RlZCAiLmNvbmNh''@;'; put 'put ''dChzZSwnIHRvIGJlIHJldHVybmVkIGZyb20gdGhlICInKS5jb25jYXQoaGUsJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQobWUsIi4iKX0sVHlwZUVycm9yKSxaKCJFUlJfTUlTU0lOR19BUkdTIixmdW5jdGlvbigpe2Zvcih2YXIgc2U9YXJndW1lbnRzLmxlbmd0aCxoZT1uZXcg''@;'; put 'put ''QXJyYXkoc2UpLF9lPTA7X2U8c2U7X2UrKyloZVtfZV09YXJndW1lbnRzW19lXTt2b2lkIDA9PT1IJiYoSD1kKDkyODIpKSxIKGhlLmxlbmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBtZT0iVGhlICIsRmU9aGUubGVuZ3RoO3N3aXRjaChoZT1o''@;'; put 'put ''ZS5tYXAoZnVuY3Rpb24oUil7cmV0dXJuJyInLmNvbmNhdChSLCciJyl9KSxGZSl7Y2FzZSAxOm1lKz0iIi5jb25jYXQoaGVbMF0sIiBhcmd1bWVudCIpO2JyZWFrO2Nhc2UgMjptZSs9IiIuY29uY2F0KGhlWzBdLCIgYW5kICIpLmNvbmNhdChoZVsxXSwiIGFyZ3VtZW50cyIpO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6bWUrPWhlLnNsaWNlKDAsRmUtMSkuam9pbigiLCAiKSxtZSs9IiwgYW5kICIuY29uY2F0KGhlW0ZlLTFdLCIgYXJndW1lbnRzIil9cmV0dXJuIiIuY29uY2F0KG1lLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSx0ZS5leHBvcnRzLmNvZGVzPU59LDkxNTg6KHRlLGos''@;'; put 'put ''ZCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUyhZdCx0dCl7cmV0dXJuIGZ1bmN0aW9uIFQoWXQpe2lmKEFycmF5LmlzQXJyYXkoWXQpKXJldHVybiBZdH0oWXQpfHxmdW5jdGlvbiBmKFl0LHR0KXt2YXIgVWU9bnVsbD09WXQ/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmWXRbU3ltYm9sLml0''@;'; put 'put ''ZXJhdG9yXXx8WXRbIkBAaXRlcmF0b3IiXTtpZihudWxsIT1VZSl7dmFyICRlLExlLG50LHJuLHh0PVtdLFR0PSEwLHluPSExO3RyeXtpZihudD0oVWU9VWUuY2FsbChZdCkpLm5leHQsMD09PXR0KXtpZihPYmplY3QoVWUpIT09VWUpcmV0dXJuO1R0PSExfWVsc2UgZm9yKDshKFR0PSgkZT1u''@;'; put 'put ''dC5jYWxsKFVlKSkuZG9uZSkmJih4dC5wdXNoKCRlLnZhbHVlKSx4dC5sZW5ndGghPT10dCk7VHQ9ITApO31jYXRjaChYdCl7eW49ITAsTGU9WHR9ZmluYWxseXt0cnl7aWYoIVR0JiZudWxsIT1VZS5yZXR1cm4mJihybj1VZS5yZXR1cm4oKSxPYmplY3Qocm4pIT09cm4pKXJldHVybn1maW5h''@;'; put 'put ''bGx5e2lmKHluKXRocm93IExlfX1yZXR1cm4geHR9fShZdCx0dCl8fGZ1bmN0aW9uIG8oWXQsdHQpe2lmKFl0KXtpZigic3RyaW5nIj09dHlwZW9mIFl0KXJldHVybiBJKFl0LHR0KTt2YXIgVWU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFl0KS5zbGljZSg4LC0xKTtpZigiT2Jq''@;'; put 'put ''ZWN0Ij09PVVlJiZZdC5jb25zdHJ1Y3RvciYmKFVlPVl0LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09VWV8fCJTZXQiPT09VWUpcmV0dXJuIEFycmF5LmZyb20oWXQpO2lmKCJBcmd1bWVudHMiPT09VWV8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0''@;'; put 'put ''KFVlKSlyZXR1cm4gSShZdCx0dCl9fShZdCx0dCl8fGZ1bmN0aW9uIGgoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11''@;'; put 'put ''c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIEkoWXQsdHQpeyhudWxsPT10dHx8dHQ+WXQubGVuZ3RoKSYmKHR0PVl0Lmxlbmd0aCk7Zm9yKHZhciBVZT0wLCRlPW5ldyBBcnJheSh0dCk7VWU8dHQ7VWUrKykkZVtVZV09WXRbVWVdO3JldHVybiAk''@;'; put 'put ''ZX1mdW5jdGlvbiBBKFl0KXtyZXR1cm4oQT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0dCl7cmV0dXJuIHR5cGVvZiB0dH06ZnVuY3Rpb24odHQpe3JldHVybiB0dCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv''@;'; put 'put ''bCYmdHQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnR0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdHR9KShZdCl9dmFyIE09dm9pZCAwIT09L2EvZy5mbGFncyxPPWZ1bmN0aW9uKHR0KXt2YXIgVWU9W107cmV0dXJuIHR0LmZvckVhY2goZnVuY3Rpb24oJGUpe3JldHVybiBV''@;'; put 'put ''ZS5wdXNoKCRlKX0pLFVlfSxEPWZ1bmN0aW9uKHR0KXt2YXIgVWU9W107cmV0dXJuIHR0LmZvckVhY2goZnVuY3Rpb24oJGUsTGUpe3JldHVybiBVZS5wdXNoKFtMZSwkZV0pfSksVWV9LEU9T2JqZWN0LmlzP09iamVjdC5pczpkKDYwOSksQj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xz''@;'; put 'put ''P09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sRj1OdW1iZXIuaXNOYU4/TnVtYmVyLmlzTmFOOmQoMzYwKTtmdW5jdGlvbiBOKFl0KXtyZXR1cm4gWXQuY2FsbC5iaW5kKFl0KX12YXIgSD1OKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkp''@;'; put 'put ''LHo9TihPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKSxaPU4oT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksVT1kKDk1MzkpLnR5cGVzLEs9VS5pc0FueUFycmF5QnVmZmVyLFg9VS5pc0FycmF5QnVmZmVyVmlldyxuZT1VLmlzRGF0ZSxzZT1VLmlzTWFwLGhlPVUuaXNS''@;'; put 'put ''ZWdFeHAsX2U9VS5pc1NldCxtZT1VLmlzTmF0aXZlRXJyb3IsRmU9VS5pc0JveGVkUHJpbWl0aXZlLFI9VS5pc051bWJlck9iamVjdCxzPVUuaXNTdHJpbmdPYmplY3QsdT1VLmlzQm9vbGVhbk9iamVjdCx2PVUuaXNCaWdJbnRPYmplY3QscD1VLmlzU3ltYm9sT2JqZWN0LF89VS5pc0Zsb2F0''@;'; put 'put ''MzJBcnJheSxrPVUuaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gTChZdCl7aWYoMD09PVl0Lmxlbmd0aHx8WXQubGVuZ3RoPjEwKXJldHVybiEwO2Zvcih2YXIgdHQ9MDt0dDxZdC5sZW5ndGg7dHQrKyl7dmFyIFVlPVl0LmNoYXJDb2RlQXQodHQpO2lmKFVlPDQ4fHxVZT41NylyZXR1cm4hMH1y''@;'; put 'put ''ZXR1cm4gMTA9PT1ZdC5sZW5ndGgmJll0Pj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiB5KFl0KXtyZXR1cm4gT2JqZWN0LmtleXMoWXQpLmZpbHRlcihMKS5jb25jYXQoQihZdCkuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChZdCkpKX1mdW5jdGlv''@;'; put 'put ''biBsKFl0LHR0KXtpZihZdD09PXR0KXJldHVybiAwO2Zvcih2YXIgVWU9WXQubGVuZ3RoLCRlPXR0Lmxlbmd0aCxMZT0wLG50PU1hdGgubWluKFVlLCRlKTtMZTxudDsrK0xlKWlmKFl0W0xlXSE9PXR0W0xlXSl7VWU9WXRbTGVdLCRlPXR0W0xlXTticmVha31yZXR1cm4gVWU8JGU/LTE6JGU8''@;'; put 'put ''VWU/MTowfWZ1bmN0aW9uIENlKFl0LHR0LFVlLCRlKXtpZihZdD09PXR0KXJldHVybiAwIT09WXR8fCFVZXx8RShZdCx0dCk7aWYoVWUpe2lmKCJvYmplY3QiIT09QShZdCkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBZdCYmRihZdCkmJkYodHQpO2lmKCJvYmplY3QiIT09QSh0dCl8fG51bGw9''@;'; put 'put ''PT1ZdHx8bnVsbD09PXR0fHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoWXQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHR0KSlyZXR1cm4hMX1lbHNle2lmKG51bGw9PT1ZdHx8Im9iamVjdCIhPT1BKFl0KSlyZXR1cm4obnVsbD09PXR0fHwib2JqZWN0IiE9PUEodHQpKSYmWXQ9PXR0O2lmKG51''@;'; put 'put ''bGw9PT10dHx8Im9iamVjdCIhPT1BKHR0KSlyZXR1cm4hMX12YXIgTGU9WihZdCk7aWYoTGUhPT1aKHR0KSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KFl0KSl7aWYoWXQubGVuZ3RoIT09dHQubGVuZ3RoKXJldHVybiExO3ZhciBybj15KFl0KSx4dD15KHR0KTtyZXR1cm4gcm4ubGVuZ3Ro''@;'; put 'put ''PT09eHQubGVuZ3RoJiZ4ZShZdCx0dCxVZSwkZSwxLHJuKX1pZigiW29iamVjdCBPYmplY3RdIj09PUxlJiYoIXNlKFl0KSYmc2UodHQpfHwhX2UoWXQpJiZfZSh0dCkpKXJldHVybiExO2lmKG5lKFl0KSl7aWYoIW5lKHR0KXx8RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKFl0KSE9PURh''@;'; put 'put ''dGUucHJvdG90eXBlLmdldFRpbWUuY2FsbCh0dCkpcmV0dXJuITF9ZWxzZSBpZihoZShZdCkpe2lmKCFoZSh0dCl8fCFmdW5jdGlvbiBxZShZdCx0dCl7cmV0dXJuIE0/WXQuc291cmNlPT09dHQuc291cmNlJiZZdC5mbGFncz09PXR0LmZsYWdzOlJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcu''@;'; put 'put ''Y2FsbChZdCk9PT1SZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHQpfShZdCx0dCkpcmV0dXJuITF9ZWxzZSBpZihtZShZdCl8fFl0IGluc3RhbmNlb2YgRXJyb3Ipe2lmKFl0Lm1lc3NhZ2UhPT10dC5tZXNzYWdlfHxZdC5uYW1lIT09dHQubmFtZSlyZXR1cm4hMX1lbHNle2lmKFgo''@;'; put 'put ''WXQpKXtpZihVZXx8IV8oWXQpJiYhayhZdCkpe2lmKCFmdW5jdGlvbiB1ZShZdCx0dCl7cmV0dXJuIFl0LmJ5dGVMZW5ndGg9PT10dC5ieXRlTGVuZ3RoJiYwPT09bChuZXcgVWludDhBcnJheShZdC5idWZmZXIsWXQuYnl0ZU9mZnNldCxZdC5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheSh0''@;'; put 'put ''dC5idWZmZXIsdHQuYnl0ZU9mZnNldCx0dC5ieXRlTGVuZ3RoKSl9KFl0LHR0KSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlvbiB2ZShZdCx0dCl7aWYoWXQuYnl0ZUxlbmd0aCE9PXR0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBVZT0wO1VlPFl0LmJ5dGVMZW5ndGg7VWUrKylpZihZ''@;'; put 'put ''dFtVZV0hPT10dFtVZV0pcmV0dXJuITE7cmV0dXJuITB9KFl0LHR0KSlyZXR1cm4hMTt2YXIgVHQ9eShZdCkseW49eSh0dCk7cmV0dXJuIFR0Lmxlbmd0aD09PXluLmxlbmd0aCYmeGUoWXQsdHQsVWUsJGUsMCxUdCl9aWYoX2UoWXQpKXJldHVybiEoIV9lKHR0KXx8WXQuc2l6ZSE9PXR0LnNp''@;'; put 'put ''emUpJiZ4ZShZdCx0dCxVZSwkZSwyKTtpZihzZShZdCkpcmV0dXJuISghc2UodHQpfHxZdC5zaXplIT09dHQuc2l6ZSkmJnhlKFl0LHR0LFVlLCRlLDMpO2lmKEsoWXQpKXtpZighZnVuY3Rpb24gemUoWXQsdHQpe3JldHVybiBZdC5ieXRlTGVuZ3RoPT09dHQuYnl0ZUxlbmd0aCYmMD09PWwo''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkoWXQpLG5ldyBVaW50OEFycmF5KHR0KSl9KFl0LHR0KSlyZXR1cm4hMX1lbHNlIGlmKEZlKFl0KSYmIWZ1bmN0aW9uIE9lKFl0LHR0KXtyZXR1cm4gUihZdCk/Uih0dCkmJkUoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoWXQpLE51bWJlci5wcm90b3R5cGUu''@;'; put 'put ''dmFsdWVPZi5jYWxsKHR0KSk6cyhZdCk/cyh0dCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFl0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHR0KTp1KFl0KT91KHR0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFl0KT09PUJvb2xlYW4ucHJvdG90''@;'; put 'put ''eXBlLnZhbHVlT2YuY2FsbCh0dCk6dihZdCk/dih0dCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFl0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHR0KTpwKHR0KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoWXQpPT09U3ltYm9sLnByb3RvdHlwZS52''@;'; put 'put ''YWx1ZU9mLmNhbGwodHQpfShZdCx0dCkpcmV0dXJuITF9cmV0dXJuIHhlKFl0LHR0LFVlLCRlLDApfWZ1bmN0aW9uIGtlKFl0LHR0KXtyZXR1cm4gdHQuZmlsdGVyKGZ1bmN0aW9uKFVlKXtyZXR1cm4geihZdCxVZSl9KX1mdW5jdGlvbiB4ZShZdCx0dCxVZSwkZSxMZSxudCl7aWYoNT09PWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgpe250PU9iamVjdC5rZXlzKFl0KTt2YXIgcm49T2JqZWN0LmtleXModHQpO2lmKG50Lmxlbmd0aCE9PXJuLmxlbmd0aClyZXR1cm4hMX1mb3IodmFyIHh0PTA7eHQ8bnQubGVuZ3RoO3h0KyspaWYoIUgodHQsbnRbeHRdKSlyZXR1cm4hMTtpZihVZSYmNT09PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgpe3ZhciBUdD1CKFl0KTtpZigwIT09VHQubGVuZ3RoKXt2YXIgeW49MDtmb3IoeHQ9MDt4dDxUdC5sZW5ndGg7eHQrKyl7dmFyIFh0PVR0W3h0XTtpZih6KFl0LFh0KSl7aWYoIXoodHQsWHQpKXJldHVybiExO250LnB1c2goWHQpLHluKyt9ZWxzZSBpZih6KHR0LFh0KSly''@;'; put 'put ''ZXR1cm4hMX12YXIgUXQ9Qih0dCk7aWYoVHQubGVuZ3RoIT09UXQubGVuZ3RoJiZrZSh0dCxRdCkubGVuZ3RoIT09eW4pcmV0dXJuITF9ZWxzZXt2YXIgWHI9Qih0dCk7aWYoMCE9PVhyLmxlbmd0aCYmMCE9PWtlKHR0LFhyKS5sZW5ndGgpcmV0dXJuITF9fWlmKDA9PT1udC5sZW5ndGgmJigw''@;'; put 'put ''PT09TGV8fDE9PT1MZSYmMD09PVl0Lmxlbmd0aHx8MD09PVl0LnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PSRlKSRlPXt2YWwxOm5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIHNuPSRlLnZhbDEuZ2V0KFl0KTtpZih2b2lkIDAhPT1zbil7dmFyIGl0PSRlLnZh''@;'; put 'put ''bDIuZ2V0KHR0KTtpZih2b2lkIDAhPT1pdClyZXR1cm4gc249PT1pdH0kZS5wb3NpdGlvbisrfSRlLnZhbDEuc2V0KFl0LCRlLnBvc2l0aW9uKSwkZS52YWwyLnNldCh0dCwkZS5wb3NpdGlvbik7dmFyIENyPWZ1bmN0aW9uIHF0KFl0LHR0LFVlLCRlLExlLG50KXt2YXIgcm49MDtpZigyPT09''@;'; put 'put ''bnQpe2lmKCFmdW5jdGlvbiBwdChZdCx0dCxVZSwkZSl7Zm9yKHZhciBMZT1udWxsLG50PU8oWXQpLHJuPTA7cm48bnQubGVuZ3RoO3JuKyspe3ZhciB4dD1udFtybl07aWYoIm9iamVjdCI9PT1BKHh0KSYmbnVsbCE9PXh0KW51bGw9PT1MZSYmKExlPW5ldyBTZXQpLExlLmFkZCh4dCk7ZWxz''@;'; put 'put ''ZSBpZighdHQuaGFzKHh0KSl7aWYoVWV8fCFiZShZdCx0dCx4dCkpcmV0dXJuITE7bnVsbD09PUxlJiYoTGU9bmV3IFNldCksTGUuYWRkKHh0KX19aWYobnVsbCE9PUxlKXtmb3IodmFyIFR0PU8odHQpLHluPTA7eW48VHQubGVuZ3RoO3luKyspe3ZhciBYdD1UdFt5bl07aWYoIm9iamVjdCI9''@;'; put 'put ''PT1BKFh0KSYmbnVsbCE9PVh0KXtpZighTWUoTGUsWHQsVWUsJGUpKXJldHVybiExfWVsc2UgaWYoIVVlJiYhWXQuaGFzKFh0KSYmIU1lKExlLFh0LFVlLCRlKSlyZXR1cm4hMX1yZXR1cm4gMD09PUxlLnNpemV9cmV0dXJuITB9KFl0LHR0LFVlLExlKSlyZXR1cm4hMX1lbHNlIGlmKDM9PT1u''@;'; put 'put ''dCl7aWYoIWZ1bmN0aW9uIFllKFl0LHR0LFVlLCRlKXtmb3IodmFyIExlPW51bGwsbnQ9RChZdCkscm49MDtybjxudC5sZW5ndGg7cm4rKyl7dmFyIHh0PVMobnRbcm5dLDIpLFR0PXh0WzBdLHluPXh0WzFdO2lmKCJvYmplY3QiPT09QShUdCkmJm51bGwhPT1UdCludWxsPT09TGUmJihMZT1u''@;'; put 'put ''ZXcgU2V0KSxMZS5hZGQoVHQpO2Vsc2V7dmFyIFh0PXR0LmdldChUdCk7aWYodm9pZCAwPT09WHQmJiF0dC5oYXMoVHQpfHwhQ2UoeW4sWHQsVWUsJGUpKXtpZihVZXx8IXdlKFl0LHR0LFR0LHluLCRlKSlyZXR1cm4hMTtudWxsPT09TGUmJihMZT1uZXcgU2V0KSxMZS5hZGQoVHQpfX19aWYo''@;'; put 'put ''bnVsbCE9PUxlKXtmb3IodmFyIFF0PUQodHQpLFhyPTA7WHI8UXQubGVuZ3RoO1hyKyspe3ZhciBzbj1TKFF0W1hyXSwyKSxpdD1zblswXSxDcj1zblsxXTtpZigib2JqZWN0Ij09PUEoaXQpJiZudWxsIT09aXQpe2lmKCFLZShMZSxZdCxpdCxDcixVZSwkZSkpcmV0dXJuITF9ZWxzZSBpZigh''@;'; put 'put ''KFVlfHxZdC5oYXMoaXQpJiZDZShZdC5nZXQoaXQpLENyLCExLCRlKXx8S2UoTGUsWXQsaXQsQ3IsITEsJGUpKSlyZXR1cm4hMX1yZXR1cm4gMD09PUxlLnNpemV9cmV0dXJuITB9KFl0LHR0LFVlLExlKSlyZXR1cm4hMX1lbHNlIGlmKDE9PT1udClmb3IoO3JuPFl0Lmxlbmd0aDtybisrKXtp''@;'; put 'put ''ZighSChZdCxybikpe2lmKEgodHQscm4pKXJldHVybiExO2Zvcih2YXIgeHQ9T2JqZWN0LmtleXMoWXQpO3JuPHh0Lmxlbmd0aDtybisrKXt2YXIgVHQ9eHRbcm5dO2lmKCFIKHR0LFR0KXx8IUNlKFl0W1R0XSx0dFtUdF0sVWUsTGUpKXJldHVybiExfXJldHVybiB4dC5sZW5ndGg9PT1PYmpl''@;'; put 'put ''Y3Qua2V5cyh0dCkubGVuZ3RofWlmKCFIKHR0LHJuKXx8IUNlKFl0W3JuXSx0dFtybl0sVWUsTGUpKXJldHVybiExfWZvcihybj0wO3JuPCRlLmxlbmd0aDtybisrKXt2YXIgeW49JGVbcm5dO2lmKCFDZShZdFt5bl0sdHRbeW5dLFVlLExlKSlyZXR1cm4hMX1yZXR1cm4hMH0oWXQsdHQsVWUs''@;'; put 'put ''bnQsJGUsTGUpO3JldHVybiAkZS52YWwxLmRlbGV0ZShZdCksJGUudmFsMi5kZWxldGUodHQpLENyfWZ1bmN0aW9uIE1lKFl0LHR0LFVlLCRlKXtmb3IodmFyIExlPU8oWXQpLG50PTA7bnQ8TGUubGVuZ3RoO250Kyspe3ZhciBybj1MZVtudF07aWYoQ2UodHQscm4sVWUsJGUpKXJldHVybiBZ''@;'; put 'put ''dC5kZWxldGUocm4pLCEwfXJldHVybiExfWZ1bmN0aW9uIEllKFl0KXtzd2l0Y2goQShZdCkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6WXQ9K1l0O2Nhc2UibnVtYmVyIjppZihGKFl0''@;'; put 'put ''KSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBiZShZdCx0dCxVZSl7dmFyICRlPUllKFVlKTtyZXR1cm4gJGU/Pyh0dC5oYXMoJGUpJiYhWXQuaGFzKCRlKSl9ZnVuY3Rpb24gd2UoWXQsdHQsVWUsJGUsTGUpe3ZhciBudD1JZShVZSk7aWYobnVsbCE9bnQpcmV0dXJuIG50O3ZhciBybj10''@;'; put 'put ''dC5nZXQobnQpO3JldHVybiEodm9pZCAwPT09cm4mJiF0dC5oYXMobnQpfHwhQ2UoJGUscm4sITEsTGUpKSYmIVl0LmhhcyhudCkmJkNlKCRlLHJuLCExLExlKX1mdW5jdGlvbiBLZShZdCx0dCxVZSwkZSxMZSxudCl7Zm9yKHZhciBybj1PKFl0KSx4dD0wO3h0PHJuLmxlbmd0aDt4dCsrKXt2''@;'; put 'put ''YXIgVHQ9cm5beHRdO2lmKENlKFVlLFR0LExlLG50KSYmQ2UoJGUsdHQuZ2V0KFR0KSxMZSxudCkpcmV0dXJuIFl0LmRlbGV0ZShUdCksITB9cmV0dXJuITF9dGUuZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24gaHQoWXQsdHQpe3JldHVybiBDZShZdCx0dCwhMSl9LGlzRGVlcFN0cmlj''@;'; put 'put ''dEVxdWFsOmZ1bmN0aW9uIHZ0KFl0LHR0KXtyZXR1cm4gQ2UoWXQsdHQsITApfX19LDgyMjQ6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLndyYXBwZXI9ZnVuY3Rpb24gZChTKXtyZXR1cm4gU319LDk3NDI6''@;'; put 'put ''KHRlLGopPT57InVzZSBzdHJpY3QiO2ouYnl0ZUxlbmd0aD1mdW5jdGlvbiBBKEYpe3ZhciBOPVQoRiksej1OWzFdO3JldHVybiAzKihOWzBdK3opLzQten0sai50b0J5dGVBcnJheT1mdW5jdGlvbiBPKEYpe3ZhciBOLG5lLEg9VChGKSx6PUhbMF0sWj1IWzFdLFU9bmV3IGgoZnVuY3Rpb24g''@;'; put 'put ''TShGLE4sSCl7cmV0dXJuIDMqKE4rSCkvNC1IfSgwLHosWikpLEs9MCxYPVo+MD96LTQ6ejtmb3IobmU9MDtuZTxYO25lKz00KU49U1tGLmNoYXJDb2RlQXQobmUpXTw8MTh8U1tGLmNoYXJDb2RlQXQobmUrMSldPDwxMnxTW0YuY2hhckNvZGVBdChuZSsyKV08PDZ8U1tGLmNoYXJDb2RlQXQo''@;'; put 'put ''bmUrMyldLFVbSysrXT1OPj4xNiYyNTUsVVtLKytdPU4+PjgmMjU1LFVbSysrXT0yNTUmTjtyZXR1cm4gMj09PVomJihOPVNbRi5jaGFyQ29kZUF0KG5lKV08PDJ8U1tGLmNoYXJDb2RlQXQobmUrMSldPj40LFVbSysrXT0yNTUmTiksMT09PVomJihOPVNbRi5jaGFyQ29kZUF0KG5lKV08PDEw''@;'; put 'put ''fFNbRi5jaGFyQ29kZUF0KG5lKzEpXTw8NHxTW0YuY2hhckNvZGVBdChuZSsyKV0+PjIsVVtLKytdPU4+PjgmMjU1LFVbSysrXT0yNTUmTiksVX0sai5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEIoRil7Zm9yKHZhciBOLEg9Ri5sZW5ndGgsej1IJTMsWj1bXSxVPTE2MzgzLEs9MCxYPUgtejtL''@;'; put 'put ''PFg7Sys9VSlaLnB1c2goRShGLEssSytVPlg/WDpLK1UpKTtyZXR1cm4gMT09PXo/Wi5wdXNoKGRbKE49RltILTFdKT4+Ml0rZFtOPDw0JjYzXSsiPT0iKToyPT09eiYmWi5wdXNoKGRbKE49KEZbSC0yXTw8OCkrRltILTFdKT4+MTBdK2RbTj4+NCY2M10rZFtOPDwyJjYzXSsiPSIpLFouam9p''@;'; put 'put ''bigiIil9O2Zvcih2YXIgZD1bXSxTPVtdLGg9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsST0wO0k8NjQ7KytJKWRbSV09b1tJXSxTW28uY2hh''@;'; put 'put ''ckNvZGVBdChJKV09STtmdW5jdGlvbiBUKEYpe3ZhciBOPUYubGVuZ3RoO2lmKE4lND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBIPUYuaW5kZXhPZigiPSIpO3JldHVybi0xPT09SCYmKEg9TiksW0gsSD09''@;'; put 'put ''PU4/MDo0LUglNF19ZnVuY3Rpb24gRChGKXtyZXR1cm4gZFtGPj4xOCY2M10rZFtGPj4xMiY2M10rZFtGPj42JjYzXStkWzYzJkZdfWZ1bmN0aW9uIEUoRixOLEgpe2Zvcih2YXIgWj1bXSxVPU47VTxIO1UrPTMpWi5wdXNoKEQoKEZbVV08PDE2JjE2NzExNjgwKSsoRltVKzFdPDw4JjY1Mjgw''@;'; put 'put ''KSsoMjU1JkZbVSsyXSkpKTtyZXR1cm4gWi5qb2luKCIiKX1TWzQ1XT02MixTWzk1XT02M30sMzU1MDpmdW5jdGlvbih0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHYscCl7aWYoIXYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9''@;'; put 'put ''ZnVuY3Rpb24gSSh2LHApe3Yuc3VwZXJfPXA7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPXAucHJvdG90eXBlLHYucHJvdG90eXBlPW5ldyBfLHYucHJvdG90eXBlLmNvbnN0cnVjdG9yPXZ9ZnVuY3Rpb24gZih2LHAsXyl7aWYoZi5pc0JOKHYpKXJldHVybiB2O3RoaXMubmVnYXRp''@;'; put 'put ''dmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT12JiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihfPXAscD0xMCksdGhpcy5faW5pdCh2fHwwLHB8fDEwLF98fCJiZSIpKX12YXIgVDsib2JqZWN0Ij09dHlwZW9mIFM/Uy5leHBvcnRzPWY6aC5C''@;'; put 'put ''Tj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gQSh2LHApe3ZhciBfPXYuY2hhckNvZGVBdChwKTtyZXR1cm4gXz49NDgmJl88''@;'; put 'put ''PTU3P18tNDg6Xz49NjUmJl88PTcwP18tNTU6Xz49OTcmJl88PTEwMj9fLTg3OnZvaWQgbyghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit2KX1mdW5jdGlvbiBNKHYscCxfKXt2YXIgaz1BKHYsXyk7cmV0dXJuIF8tMT49cCYmKGt8PUEodixfLTEpPDw0KSxrfWZ1bmN0aW9uIE8odixwLF8s''@;'; put 'put ''ayl7Zm9yKHZhciBMPTAseT0wLGw9TWF0aC5taW4odi5sZW5ndGgsXyksYj1wO2I8bDtiKyspe3ZhciBxPXYuY2hhckNvZGVBdChiKS00ODtMKj1rLHk9cT49NDk/cS00OSsxMDpxPj0xNz9xLTE3KzEwOnEsbyhxPj0wJiZ5PGssIkludmFsaWQgY2hhcmFjdGVyIiksTCs9eX1yZXR1cm4gTH1m''@;'; put 'put ''dW5jdGlvbiBEKHYscCl7di53b3Jkcz1wLndvcmRzLHYubGVuZ3RoPXAubGVuZ3RoLHYubmVnYXRpdmU9cC5uZWdhdGl2ZSx2LnJlZD1wLnJlZH1pZihmLmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiBmfHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0''@;'; put 'put ''cnVjdG9yLndvcmRTaXplPT09Zi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sZi5tYXg9ZnVuY3Rpb24ocCxfKXtyZXR1cm4gcC5jbXAoXyk+MD9wOl99LGYubWluPWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHAuY21wKF8pPDA/cDpffSxmLnByb3RvdHlwZS5faW5pdD1mdW5jdGlv''@;'; put 'put ''bihwLF8sayl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsXyxrKTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLF8sayk7ImhleCI9PT1fJiYoXz0xNiksbyhfPT09KDB8XykmJl8+PTImJl88PTM2KTt2YXIgTD0w''@;'; put 'put ''OyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTCsrLHRoaXMubmVnYXRpdmU9MSksTDxwLmxlbmd0aCYmKDE2PT09Xz90aGlzLl9wYXJzZUhleChwLEwsayk6KHRoaXMuX3BhcnNlQmFzZShwLF8sTCksImxlIj09PWsmJnRoaXMuX2luaXRBcnJheSh0aGlz''@;'; put 'put ''LnRvQXJyYXkoKSxfLGspKSl9LGYucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsXyxrKXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndv''@;'; put 'put ''cmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihvKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1rJiZ0aGlzLl9pbml0QXJyYXkodGhp''@;'; put 'put ''cy50b0FycmF5KCksXyxrKX0sZi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLF8sayl7aWYobygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChw''@;'; put 'put ''Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT0wO3ZhciB5LGwsYj0wO2lmKCJiZSI9PT1rKWZvcihMPXAubGVuZ3RoLTEseT0wO0w+PTA7TC09Myl0aGlzLndvcmRzW3ldfD0obD1w''@;'; put 'put ''W0xdfHBbTC0xXTw8OHxwW0wtMl08PDE2KTw8YiY2NzEwODg2Myx0aGlzLndvcmRzW3krMV09bD4+PjI2LWImNjcxMDg4NjMsKGIrPTI0KT49MjYmJihiLT0yNix5KyspO2Vsc2UgaWYoImxlIj09PWspZm9yKEw9MCx5PTA7TDxwLmxlbmd0aDtMKz0zKXRoaXMud29yZHNbeV18PShsPXBbTF18''@;'; put 'put ''cFtMKzFdPDw4fHBbTCsyXTw8MTYpPDxiJjY3MTA4ODYzLHRoaXMud29yZHNbeSsxXT1sPj4+MjYtYiY2NzEwODg2MywoYis9MjQpPj0yNiYmKGItPTI2LHkrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLF8sayl7dGhpcy5sZW5ndGg9''@;'; put 'put ''TWF0aC5jZWlsKChwLmxlbmd0aC1fKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT0wO3ZhciBiLHk9MCxsPTA7aWYoImJlIj09PWspZm9yKEw9cC5sZW5ndGgtMTtMPj1fO0wtPTIpYj1NKHAs''@;'; put 'put ''XyxMKTw8eSx0aGlzLndvcmRzW2xdfD02NzEwODg2MyZiLHk+PTE4Pyh5LT0xOCx0aGlzLndvcmRzW2wrPTFdfD1iPj4+MjYpOnkrPTg7ZWxzZSBmb3IoTD0ocC5sZW5ndGgtXyklMj09MD9fKzE6XztMPHAubGVuZ3RoO0wrPTIpYj1NKHAsXyxMKTw8eSx0aGlzLndvcmRzW2xdfD02NzEwODg2''@;'; put 'put ''MyZiLHk+PTE4Pyh5LT0xOCx0aGlzLndvcmRzW2wrPTFdfD1iPj4+MjYpOnkrPTg7dGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLF8sayl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEw9MCx5PTE7eTw9NjcxMDg4NjM7eSo9XylM''@;'; put 'put ''Kys7TC0tLHk9eS9ffDA7Zm9yKHZhciBsPXAubGVuZ3RoLWssYj1sJUwscT1NYXRoLm1pbihsLGwtYikrayxHPTAsUT1rO1E8cTtRKz1MKUc9TyhwLFEsUStMLF8pLHRoaXMuaW11bG4oeSksdGhpcy53b3Jkc1swXStHPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPUc6dGhpcy5faWFkZG4oRyk7''@;'; put 'put ''aWYoMCE9PWIpe3ZhciBwZT0xO2ZvcihHPU8ocCxRLHAubGVuZ3RoLF8pLFE9MDtRPGI7USsrKXBlKj1fO3RoaXMuaW11bG4ocGUpLHRoaXMud29yZHNbMF0rRzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1HOnRoaXMuX2lhZGRuKEcpfXRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLmNvcHk9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgXz0wO188dGhpcy5sZW5ndGg7XysrKXAud29yZHNbX109dGhpcy53b3Jkc1tfXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LGYucHJv''@;'; put 'put ''dG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHApe0QocCx0aGlzKX0sZi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LGYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndv''@;'; put 'put ''cmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGYucHJvdG90eXBl''@;'; put 'put ''Ll9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e2YucHJvdG90eXBlW1N5bWJvbC5mb3Io''@;'; put 'put ''Im5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPUV9Y2F0Y2h7Zi5wcm90b3R5cGUuaW5zcGVjdD1FfWVsc2UgZi5wcm90b3R5cGUuaW5zcGVjdD1FO2Z1bmN0aW9uIEUoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgQj1b''@;'; put 'put ''IiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxGPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLE49WzAsMCwz''@;'; put 'put ''MzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQx''@;'; put 'put ''MDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWih2LHAsXyl7Xy5uZWdhdGl2ZT1wLm5l''@;'; put 'put ''Z2F0aXZlXnYubmVnYXRpdmU7dmFyIGs9di5sZW5ndGgrcC5sZW5ndGh8MDtfLmxlbmd0aD1rLGs9ay0xfDA7dmFyIEw9MHx2LndvcmRzWzBdLHk9MHxwLndvcmRzWzBdLGw9TCp5LHE9bC82NzEwODg2NHwwO18ud29yZHNbMF09NjcxMDg4NjMmbDtmb3IodmFyIEc9MTtHPGs7RysrKXtmb3Io''@;'; put 'put ''dmFyIFE9cT4+PjI2LHBlPTY3MTA4ODYzJnEsUGU9TWF0aC5taW4oRyxwLmxlbmd0aC0xKSxaZT1NYXRoLm1heCgwLEctdi5sZW5ndGgrMSk7WmU8PVBlO1plKyspUSs9KGw9KEw9MHx2LndvcmRzW0ctWmV8MF0pKih5PTB8cC53b3Jkc1taZV0pK3BlKS82NzEwODg2NHwwLHBlPTY3MTA4ODYz''@;'; put 'put ''Jmw7Xy53b3Jkc1tHXT0wfHBlLHE9MHxRfXJldHVybiAwIT09cT9fLndvcmRzW0ddPTB8cTpfLmxlbmd0aC0tLF8uX3N0cmlwKCl9Zi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxfKXt2YXIgaztpZihfPTB8X3x8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXtrPSIiO2Zvcih2''@;'; put 'put ''YXIgTD0wLHk9MCxsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBiPXRoaXMud29yZHNbbF0scT0oMTY3NzcyMTUmKGI8PEx8eSkpLnRvU3RyaW5nKDE2KTt5PWI+Pj4yNC1MJjE2Nzc3MjE1LChMKz0yKT49MjYmJihMLT0yNixsLS0pLGs9MCE9PXl8fGwhPT10aGlzLmxlbmd0aC0xP0JbNi1x''@;'; put 'put ''Lmxlbmd0aF0rcStrOnEra31mb3IoMCE9PXkmJihrPXkudG9TdHJpbmcoMTYpK2spO2subGVuZ3RoJV8hPTA7KWs9IjAiK2s7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoaz0iLSIrayksa31pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgRz1GW3BdLFE9TltwXTtrPSIiO3ZhciBw''@;'; put 'put ''ZT10aGlzLmNsb25lKCk7Zm9yKHBlLm5lZ2F0aXZlPTA7IXBlLmlzWmVybygpOyl7dmFyIFBlPXBlLm1vZHJuKFEpLnRvU3RyaW5nKHApO2s9KHBlPXBlLmlkaXZuKFEpKS5pc1plcm8oKT9QZStrOkJbRy1QZS5sZW5ndGhdK1BlK2t9Zm9yKHRoaXMuaXNaZXJvKCkmJihrPSIwIitrKTtrLmxl''@;'; put 'put ''bmd0aCVfIT0wOylrPSIwIitrO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGs9Ii0iK2spLGt9byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxmLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlz''@;'; put 'put ''Lmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAg''@;'; put 'put ''dG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LGYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxUJiYoZi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxfKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShULHAsXyl9''@;'; put 'put ''KSxmLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxfKX0sZi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxfLGspe3RoaXMuX3N0cmlwKCk7dmFyIEw9dGhpcy5ieXRlTGVuZ3RoKCkseT1rfHxNYXRoLm1heCgx''@;'; put 'put ''LEwpO28oTDw9eSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG8oeT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbD1mdW5jdGlvbihwLF8pe3JldHVybiBwLmFsbG9jVW5zYWZlP3AuYWxsb2NVbnNhZmUoXyk6bmV3IHAoXyl9KHAseSk7cmV0''@;'; put 'put ''dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1fPyJMRSI6IkJFIildKGwsTCksbH0sZi5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24ocCxfKXtmb3IodmFyIGs9MCxMPTAseT0wLGw9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIGI9dGhpcy53b3Jkc1t5XTw8bHxMO3Bb''@;'; put 'put ''aysrXT0yNTUmYixrPHAubGVuZ3RoJiYocFtrKytdPWI+PjgmMjU1KSxrPHAubGVuZ3RoJiYocFtrKytdPWI+PjE2JjI1NSksNj09PWw/KGs8cC5sZW5ndGgmJihwW2srK109Yj4+MjQmMjU1KSxMPTAsbD0wKTooTD1iPj4+MjQsbCs9Mil9aWYoazxwLmxlbmd0aClmb3IocFtrKytdPUw7azxw''@;'; put 'put ''Lmxlbmd0aDspcFtrKytdPTB9LGYucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKHAsXyl7Zm9yKHZhciBrPXAubGVuZ3RoLTEsTD0wLHk9MCxsPTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciBiPXRoaXMud29yZHNbeV08PGx8TDtwW2stLV09MjU1JmIsaz49MCYmKHBbay0tXT1i''@;'; put 'put ''Pj44JjI1NSksaz49MCYmKHBbay0tXT1iPj4xNiYyNTUpLDY9PT1sPyhrPj0wJiYocFtrLS1dPWI+PjI0JjI1NSksTD0wLGw9MCk6KEw9Yj4+PjI0LGwrPTIpfWlmKGs+PTApZm9yKHBbay0tXT1MO2s+PTA7KXBbay0tXT0wfSxmLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBfPXAsaz0wO3JldHVybiBfPj00MDk2JiYoays9MTMsXz4+Pj0xMyksXz49NjQmJihrKz03LF8+Pj49NyksXz49OCYmKGsrPTQsXz4+Pj00KSxfPj0yJiYoays9MixfPj4+PTIpLGsrX30sZi5wcm90b3R5''@;'; put 'put ''cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgXz1wLGs9MDtyZXR1cm4hKDgxOTEmXykmJihrKz0xMyxfPj4+PTEzKSwhKDEyNyZfKSYmKGsrPTcsXz4+Pj03KSwhKDE1Jl8pJiYoays9NCxfPj4+PTQpLCEoMyZfKSYmKGsrPTIsXz4+Pj0yKSwhKDEmXykm''@;'; put 'put ''JmsrKyxrfSxmLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgXz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStffSxmLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJv''@;'; put 'put ''KCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgaz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW19dKTtpZihwKz1rLDI2IT09aylicmVha31yZXR1cm4gcH0sZi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwo''@;'; put 'put ''dGhpcy5iaXRMZW5ndGgoKS84KX0sZi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sZi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sZi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxm''@;'; put 'put ''LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxmLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFy''@;'; put 'put ''IF89MDtfPHAubGVuZ3RoO18rKyl0aGlzLndvcmRzW19dPXRoaXMud29yZHNbX118cC53b3Jkc1tfXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9y''@;'; put 'put ''KHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgXztfPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIGs9MDtrPF8ubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPXRoaXMud29yZHNba10mcC53b3Jkc1trXTtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg9Xy5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LGYucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LGYucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LGYucHJvdG90eXBl''@;'; put 'put ''Lml1eG9yPWZ1bmN0aW9uKHApe3ZhciBfLGs7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KF89dGhpcyxrPXApOihfPXAsaz10aGlzKTtmb3IodmFyIEw9MDtMPGsubGVuZ3RoO0wrKyl0aGlzLndvcmRzW0xdPV8ud29yZHNbTF1eay53b3Jkc1tMXTtpZih0aGlzIT09Xylmb3IoO0w8Xy5sZW5ndGg7''@;'; put 'put ''TCsrKXRoaXMud29yZHNbTF09Xy53b3Jkc1tMXTtyZXR1cm4gdGhpcy5sZW5ndGg9Xy5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LGYucHJvdG90eXBl''@;'; put 'put ''Lnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LGYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihw''@;'; put 'put ''KTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LGYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe28oIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgXz0wfE1hdGguY2VpbChwLzI2KSxrPXAlMjY7dGhpcy5fZXhwYW5kKF8pLGs+MCYmXy0tO2Zvcih2YXIgTD0wO0w8XztMKyspdGhpcy53''@;'; put 'put ''b3Jkc1tMXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tMXTtyZXR1cm4gaz4wJiYodGhpcy53b3Jkc1tMXT1+dGhpcy53b3Jkc1tMXSY2NzEwODg2Mz4+MjYtayksdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSxm''@;'; put 'put ''LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsXyl7bygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBrPXAvMjZ8MCxMPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChrKzEpLHRoaXMud29yZHNba109Xz90aGlzLndvcmRzW2tdfDE8PEw6dGhpcy53b3Jkc1trXSZ+KDE8PEwpLHRoaXMu''@;'; put 'put ''X3N0cmlwKCl9LGYucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIF8sayxMO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLF89dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxfPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsXy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oaz10aGlzLEw9cCk6KGs9cCxMPXRoaXMpO2Zvcih2YXIgeT0wLGw9MDtsPEwubGVuZ3Ro''@;'; put 'put ''O2wrKyl0aGlzLndvcmRzW2xdPTY3MTA4ODYzJihfPSgwfGsud29yZHNbbF0pKygwfEwud29yZHNbbF0pK3kpLHk9Xz4+PjI2O2Zvcig7MCE9PXkmJmw8ay5sZW5ndGg7bCsrKXRoaXMud29yZHNbbF09NjcxMDg4NjMmKF89KDB8ay53b3Jkc1tsXSkreSkseT1fPj4+MjY7aWYodGhpcy5sZW5n''@;'; put 'put ''dGg9ay5sZW5ndGgsMCE9PXkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09eSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoayE9PXRoaXMpZm9yKDtsPGsubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPWsud29yZHNbbF07cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''XztyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsXz10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLF8pOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLF89cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLF8pOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSxmLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIF89dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0''@;'; put 'put ''aXZlPTEsXy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTCx5LGs9dGhpcy5jbXAocCk7aWYoMD09PWspcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO2s+MD8oTD10aGlzLHk9cCk6KEw9cCx5PXRoaXMpO2Zvcih2YXIgbD0wLGI9MDtiPHkubGVuZ3RoO2IrKylsPShfPSgwfEwud29yZHNbYl0pLSgwfHkud29yZHNbYl0pK2wpPj4yNix0aGlzLndvcmRzW2JdPTY3MTA4ODYzJl87Zm9y''@;'; put 'put ''KDswIT09bCYmYjxMLmxlbmd0aDtiKyspbD0oXz0oMHxMLndvcmRzW2JdKStsKT4+MjYsdGhpcy53b3Jkc1tiXT02NzEwODg2MyZfO2lmKDA9PT1sJiZiPEwubGVuZ3RoJiZMIT09dGhpcylmb3IoO2I8TC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09TC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYiksTCE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBVPWZ1bmN0aW9uKHAsXyxrKXt2YXIgcSxHLFEsTD1w''@;'; put 'put ''LndvcmRzLHk9Xy53b3JkcyxsPWsud29yZHMsYj0wLHBlPTB8TFswXSxQZT04MTkxJnBlLFplPXBlPj4+MTMscWU9MHxMWzFdLHZlPTgxOTEmcWUsdWU9cWU+Pj4xMyx6ZT0wfExbMl0sT2U9ODE5MSZ6ZSxDZT16ZT4+PjEzLGtlPTB8TFszXSx4ZT04MTkxJmtlLE1lPWtlPj4+MTMsSWU9MHxM''@;'; put 'put ''WzRdLGJlPTgxOTEmSWUsd2U9SWU+Pj4xMyxwdD0wfExbNV0sS2U9ODE5MSZwdCxZZT1wdD4+PjEzLHF0PTB8TFs2XSxodD04MTkxJnF0LHZ0PXF0Pj4+MTMsWXQ9MHxMWzddLHR0PTgxOTEmWXQsVWU9WXQ+Pj4xMywkZT0wfExbOF0sTGU9ODE5MSYkZSxudD0kZT4+PjEzLHJuPTB8TFs5XSx4''@;'; put 'put ''dD04MTkxJnJuLFR0PXJuPj4+MTMseW49MHx5WzBdLFh0PTgxOTEmeW4sUXQ9eW4+Pj4xMyxYcj0wfHlbMV0sc249ODE5MSZYcixpdD1Ycj4+PjEzLENyPTB8eVsyXSxMdD04MTkxJkNyLHd0PUNyPj4+MTMsUm49MHx5WzNdLFFlPTgxOTEmUm4sUHQ9Um4+Pj4xMyxRcj0wfHlbNF0sTmU9ODE5''@;'; put 'put ''MSZRcix5dD1Rcj4+PjEzLHJyPTB8eVs1XSxhdD04MTkxJnJyLF90PXJyPj4+MTMsd249MHx5WzZdLCR0PTgxOTEmd24sSHQ9d24+Pj4xMyxzaT0wfHlbN10sbm49ODE5MSZzaSxsbj1zaT4+PjEzLGtpPTB8eVs4XSxhbj04MTkxJmtpLEd0PWtpPj4+MTMsZWE9MHx5WzldLG1pPTgxOTEmZWEs''@;'; put 'put ''ZnI9ZWE+Pj4xMztrLm5lZ2F0aXZlPXAubmVnYXRpdmVeXy5uZWdhdGl2ZSxrLmxlbmd0aD0xOTt2YXIgJGk9KGIrKHE9TWF0aC5pbXVsKFBlLFh0KSl8MCkrKCg4MTkxJihHPShHPU1hdGguaW11bChQZSxRdCkpK01hdGguaW11bChaZSxYdCl8MCkpPDwxMyl8MDtiPSgoUT1NYXRoLmltdWwo''@;'; put 'put ''WmUsUXQpKSsoRz4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMscT1NYXRoLmltdWwodmUsWHQpLEc9KEc9TWF0aC5pbXVsKHZlLFF0KSkrTWF0aC5pbXVsKHVlLFh0KXwwLFE9TWF0aC5pbXVsKHVlLFF0KTt2YXIgS2k9KGIrKHE9cStNYXRoLmltdWwoUGUsc24pfDApfDApKygo''@;'; put 'put ''ODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxpdCl8MCkrTWF0aC5pbXVsKFplLHNuKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLGl0KXwwKSsoRz4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMscT1NYXRoLmltdWwoT2UsWHQpLEc9KEc9TWF0aC5pbXVsKE9lLFF0''@;'; put 'put ''KSkrTWF0aC5pbXVsKENlLFh0KXwwLFE9TWF0aC5pbXVsKENlLFF0KSxxPXErTWF0aC5pbXVsKHZlLHNuKXwwLEc9KEc9RytNYXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1ZSxzbil8MCxRPVErTWF0aC5pbXVsKHVlLGl0KXwwO3ZhciBWaT0oYisocT1xK01hdGguaW11bChQZSxMdCl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKFBlLHd0KXwwKStNYXRoLmltdWwoWmUsTHQpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoWmUsd3QpfDApKyhHPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxxPU1hdGguaW11bCh4ZSxYdCksRz0oRz1NYXRoLmlt''@;'; put 'put ''dWwoeGUsUXQpKStNYXRoLmltdWwoTWUsWHQpfDAsUT1NYXRoLmltdWwoTWUsUXQpLHE9cStNYXRoLmltdWwoT2Usc24pfDAsRz0oRz1HK01hdGguaW11bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLFE9UStNYXRoLmltdWwoQ2UsaXQpfDAscT1xK01hdGguaW11bCh2ZSxMdCl8MCxH''@;'; put 'put ''PShHPUcrTWF0aC5pbXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAsUT1RK01hdGguaW11bCh1ZSx3dCl8MDt2YXIgcXI9KGIrKHE9cStNYXRoLmltdWwoUGUsUWUpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxQdCl8MCkrTWF0aC5pbXVsKFplLFFlKXwwKSk8PDEz''@;'; put 'put ''KXwwO2I9KChRPVErTWF0aC5pbXVsKFplLFB0KXwwKSsoRz4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMscT1NYXRoLmltdWwoYmUsWHQpLEc9KEc9TWF0aC5pbXVsKGJlLFF0KSkrTWF0aC5pbXVsKHdlLFh0KXwwLFE9TWF0aC5pbXVsKHdlLFF0KSxxPXErTWF0aC5pbXVsKHhl''@;'; put 'put ''LHNuKXwwLEc9KEc9RytNYXRoLmltdWwoeGUsaXQpfDApK01hdGguaW11bChNZSxzbil8MCxRPVErTWF0aC5pbXVsKE1lLGl0KXwwLHE9cStNYXRoLmltdWwoT2UsTHQpfDAsRz0oRz1HK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKENlLEx0KXwwLFE9UStNYXRoLmltdWwoQ2Usd3Qp''@;'; put 'put ''fDAscT1xK01hdGguaW11bCh2ZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAsUT1RK01hdGguaW11bCh1ZSxQdCl8MDt2YXIgdWE9KGIrKHE9cStNYXRoLmltdWwoUGUsTmUpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSx5dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFplLE5lKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLHl0KXwwKSsoRz4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMscT1NYXRoLmltdWwoS2UsWHQpLEc9KEc9TWF0aC5pbXVsKEtlLFF0KSkrTWF0aC5pbXVsKFllLFh0KXwwLFE9TWF0aC5p''@;'; put 'put ''bXVsKFllLFF0KSxxPXErTWF0aC5pbXVsKGJlLHNuKXwwLEc9KEc9RytNYXRoLmltdWwoYmUsaXQpfDApK01hdGguaW11bCh3ZSxzbil8MCxRPVErTWF0aC5pbXVsKHdlLGl0KXwwLHE9cStNYXRoLmltdWwoeGUsTHQpfDAsRz0oRz1HK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1l''@;'; put 'put ''LEx0KXwwLFE9UStNYXRoLmltdWwoTWUsd3QpfDAscT1xK01hdGguaW11bChPZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2UsUWUpfDAsUT1RK01hdGguaW11bChDZSxQdCl8MCxxPXErTWF0aC5pbXVsKHZlLE5lKXwwLEc9KEc9RytNYXRoLmltdWwodmUs''@;'; put 'put ''eXQpfDApK01hdGguaW11bCh1ZSxOZSl8MCxRPVErTWF0aC5pbXVsKHVlLHl0KXwwO3ZhciBGaT0oYisocT1xK01hdGguaW11bChQZSxhdCl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKFBlLF90KXwwKStNYXRoLmltdWwoWmUsYXQpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmlt''@;'; put 'put ''dWwoWmUsX3QpfDApKyhHPj4+MTMpfDApKyhGaT4+PjI2KXwwLEZpJj02NzEwODg2MyxxPU1hdGguaW11bChodCxYdCksRz0oRz1NYXRoLmltdWwoaHQsUXQpKStNYXRoLmltdWwodnQsWHQpfDAsUT1NYXRoLmltdWwodnQsUXQpLHE9cStNYXRoLmltdWwoS2Usc24pfDAsRz0oRz1HK01hdGgu''@;'; put 'put ''aW11bChLZSxpdCl8MCkrTWF0aC5pbXVsKFllLHNuKXwwLFE9UStNYXRoLmltdWwoWWUsaXQpfDAscT1xK01hdGguaW11bChiZSxMdCl8MCxHPShHPUcrTWF0aC5pbXVsKGJlLHd0KXwwKStNYXRoLmltdWwod2UsTHQpfDAsUT1RK01hdGguaW11bCh3ZSx3dCl8MCxxPXErTWF0aC5pbXVsKHhl''@;'; put 'put ''LFFlKXwwLEc9KEc9RytNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11bChNZSxRZSl8MCxRPVErTWF0aC5pbXVsKE1lLFB0KXwwLHE9cStNYXRoLmltdWwoT2UsTmUpfDAsRz0oRz1HK01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLFE9UStNYXRoLmltdWwoQ2UseXQp''@;'; put 'put ''fDAscT1xK01hdGguaW11bCh2ZSxhdCl8MCxHPShHPUcrTWF0aC5pbXVsKHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsUT1RK01hdGguaW11bCh1ZSxfdCl8MDt2YXIgUmE9KGIrKHE9cStNYXRoLmltdWwoUGUsJHQpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxIdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFplLCR0KXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLEh0KXwwKSsoRz4+PjEzKXwwKSsoUmE+Pj4yNil8MCxSYSY9NjcxMDg4NjMscT1NYXRoLmltdWwodHQsWHQpLEc9KEc9TWF0aC5pbXVsKHR0LFF0KSkrTWF0aC5pbXVsKFVlLFh0KXwwLFE9TWF0aC5p''@;'; put 'put ''bXVsKFVlLFF0KSxxPXErTWF0aC5pbXVsKGh0LHNuKXwwLEc9KEc9RytNYXRoLmltdWwoaHQsaXQpfDApK01hdGguaW11bCh2dCxzbil8MCxRPVErTWF0aC5pbXVsKHZ0LGl0KXwwLHE9cStNYXRoLmltdWwoS2UsTHQpfDAsRz0oRz1HK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFll''@;'; put 'put ''LEx0KXwwLFE9UStNYXRoLmltdWwoWWUsd3QpfDAscT1xK01hdGguaW11bChiZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKGJlLFB0KXwwKStNYXRoLmltdWwod2UsUWUpfDAsUT1RK01hdGguaW11bCh3ZSxQdCl8MCxxPXErTWF0aC5pbXVsKHhlLE5lKXwwLEc9KEc9RytNYXRoLmltdWwoeGUs''@;'; put 'put ''eXQpfDApK01hdGguaW11bChNZSxOZSl8MCxRPVErTWF0aC5pbXVsKE1lLHl0KXwwLHE9cStNYXRoLmltdWwoT2UsYXQpfDAsRz0oRz1HK01hdGguaW11bChPZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLFE9UStNYXRoLmltdWwoQ2UsX3QpfDAscT1xK01hdGguaW11bCh2ZSwkdCl8MCxH''@;'; put 'put ''PShHPUcrTWF0aC5pbXVsKHZlLEh0KXwwKStNYXRoLmltdWwodWUsJHQpfDAsUT1RK01hdGguaW11bCh1ZSxIdCl8MDt2YXIgb2k9KGIrKHE9cStNYXRoLmltdWwoUGUsbm4pfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxsbil8MCkrTWF0aC5pbXVsKFplLG5uKXwwKSk8PDEz''@;'; put 'put ''KXwwO2I9KChRPVErTWF0aC5pbXVsKFplLGxuKXwwKSsoRz4+PjEzKXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMscT1NYXRoLmltdWwoTGUsWHQpLEc9KEc9TWF0aC5pbXVsKExlLFF0KSkrTWF0aC5pbXVsKG50LFh0KXwwLFE9TWF0aC5pbXVsKG50LFF0KSxxPXErTWF0aC5pbXVsKHR0''@;'; put 'put ''LHNuKXwwLEc9KEc9RytNYXRoLmltdWwodHQsaXQpfDApK01hdGguaW11bChVZSxzbil8MCxRPVErTWF0aC5pbXVsKFVlLGl0KXwwLHE9cStNYXRoLmltdWwoaHQsTHQpfDAsRz0oRz1HK01hdGguaW11bChodCx3dCl8MCkrTWF0aC5pbXVsKHZ0LEx0KXwwLFE9UStNYXRoLmltdWwodnQsd3Qp''@;'; put 'put ''fDAscT1xK01hdGguaW11bChLZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKEtlLFB0KXwwKStNYXRoLmltdWwoWWUsUWUpfDAsUT1RK01hdGguaW11bChZZSxQdCl8MCxxPXErTWF0aC5pbXVsKGJlLE5lKXwwLEc9KEc9RytNYXRoLmltdWwoYmUseXQpfDApK01hdGguaW11bCh3ZSxOZSl8MCxR''@;'; put 'put ''PVErTWF0aC5pbXVsKHdlLHl0KXwwLHE9cStNYXRoLmltdWwoeGUsYXQpfDAsRz0oRz1HK01hdGguaW11bCh4ZSxfdCl8MCkrTWF0aC5pbXVsKE1lLGF0KXwwLFE9UStNYXRoLmltdWwoTWUsX3QpfDAscT1xK01hdGguaW11bChPZSwkdCl8MCxHPShHPUcrTWF0aC5pbXVsKE9lLEh0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoQ2UsJHQpfDAsUT1RK01hdGguaW11bChDZSxIdCl8MCxxPXErTWF0aC5pbXVsKHZlLG5uKXwwLEc9KEc9RytNYXRoLmltdWwodmUsbG4pfDApK01hdGguaW11bCh1ZSxubil8MCxRPVErTWF0aC5pbXVsKHVlLGxuKXwwO3ZhciBVaT0oYisocT1xK01hdGguaW11bChQZSxhbil8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKFBlLEd0KXwwKStNYXRoLmltdWwoWmUsYW4pfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoWmUsR3QpfDApKyhHPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCxYdCksRz0oRz1NYXRoLmlt''@;'; put 'put ''dWwoeHQsUXQpKStNYXRoLmltdWwoVHQsWHQpfDAsUT1NYXRoLmltdWwoVHQsUXQpLHE9cStNYXRoLmltdWwoTGUsc24pfDAsRz0oRz1HK01hdGguaW11bChMZSxpdCl8MCkrTWF0aC5pbXVsKG50LHNuKXwwLFE9UStNYXRoLmltdWwobnQsaXQpfDAscT1xK01hdGguaW11bCh0dCxMdCl8MCxH''@;'; put 'put ''PShHPUcrTWF0aC5pbXVsKHR0LHd0KXwwKStNYXRoLmltdWwoVWUsTHQpfDAsUT1RK01hdGguaW11bChVZSx3dCl8MCxxPXErTWF0aC5pbXVsKGh0LFFlKXwwLEc9KEc9RytNYXRoLmltdWwoaHQsUHQpfDApK01hdGguaW11bCh2dCxRZSl8MCxRPVErTWF0aC5pbXVsKHZ0LFB0KXwwLHE9cStN''@;'; put 'put ''YXRoLmltdWwoS2UsTmUpfDAsRz0oRz1HK01hdGguaW11bChLZSx5dCl8MCkrTWF0aC5pbXVsKFllLE5lKXwwLFE9UStNYXRoLmltdWwoWWUseXQpfDAscT1xK01hdGguaW11bChiZSxhdCl8MCxHPShHPUcrTWF0aC5pbXVsKGJlLF90KXwwKStNYXRoLmltdWwod2UsYXQpfDAsUT1RK01hdGgu''@;'; put 'put ''aW11bCh3ZSxfdCl8MCxxPXErTWF0aC5pbXVsKHhlLCR0KXwwLEc9KEc9RytNYXRoLmltdWwoeGUsSHQpfDApK01hdGguaW11bChNZSwkdCl8MCxRPVErTWF0aC5pbXVsKE1lLEh0KXwwLHE9cStNYXRoLmltdWwoT2Usbm4pfDAsRz0oRz1HK01hdGguaW11bChPZSxsbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KENlLG5uKXwwLFE9UStNYXRoLmltdWwoQ2UsbG4pfDAscT1xK01hdGguaW11bCh2ZSxhbil8MCxHPShHPUcrTWF0aC5pbXVsKHZlLEd0KXwwKStNYXRoLmltdWwodWUsYW4pfDAsUT1RK01hdGguaW11bCh1ZSxHdCl8MDt2YXIgVmE9KGIrKHE9cStNYXRoLmltdWwoUGUsbWkpfDApfDApKygo''@;'; put 'put ''ODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxmcil8MCkrTWF0aC5pbXVsKFplLG1pKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLGZyKXwwKSsoRz4+PjEzKXwwKSsoVmE+Pj4yNil8MCxWYSY9NjcxMDg4NjMscT1NYXRoLmltdWwoeHQsc24pLEc9KEc9TWF0aC5pbXVsKHh0LGl0''@;'; put 'put ''KSkrTWF0aC5pbXVsKFR0LHNuKXwwLFE9TWF0aC5pbXVsKFR0LGl0KSxxPXErTWF0aC5pbXVsKExlLEx0KXwwLEc9KEc9RytNYXRoLmltdWwoTGUsd3QpfDApK01hdGguaW11bChudCxMdCl8MCxRPVErTWF0aC5pbXVsKG50LHd0KXwwLHE9cStNYXRoLmltdWwodHQsUWUpfDAsRz0oRz1HK01h''@;'; put 'put ''dGguaW11bCh0dCxQdCl8MCkrTWF0aC5pbXVsKFVlLFFlKXwwLFE9UStNYXRoLmltdWwoVWUsUHQpfDAscT1xK01hdGguaW11bChodCxOZSl8MCxHPShHPUcrTWF0aC5pbXVsKGh0LHl0KXwwKStNYXRoLmltdWwodnQsTmUpfDAsUT1RK01hdGguaW11bCh2dCx5dCl8MCxxPXErTWF0aC5pbXVs''@;'; put 'put ''KEtlLGF0KXwwLEc9KEc9RytNYXRoLmltdWwoS2UsX3QpfDApK01hdGguaW11bChZZSxhdCl8MCxRPVErTWF0aC5pbXVsKFllLF90KXwwLHE9cStNYXRoLmltdWwoYmUsJHQpfDAsRz0oRz1HK01hdGguaW11bChiZSxIdCl8MCkrTWF0aC5pbXVsKHdlLCR0KXwwLFE9UStNYXRoLmltdWwod2Us''@;'; put 'put ''SHQpfDAscT1xK01hdGguaW11bCh4ZSxubil8MCxHPShHPUcrTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoTWUsbm4pfDAsUT1RK01hdGguaW11bChNZSxsbil8MCxxPXErTWF0aC5pbXVsKE9lLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChDZSxhbil8''@;'; put 'put ''MCxRPVErTWF0aC5pbXVsKENlLEd0KXwwO3ZhciB1cj0oYisocT1xK01hdGguaW11bCh2ZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKHZlLGZyKXwwKStNYXRoLmltdWwodWUsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwodWUsZnIpfDApKyhHPj4+MTMpfDAp''@;'; put 'put ''Kyh1cj4+PjI2KXwwLHVyJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCxMdCksRz0oRz1NYXRoLmltdWwoeHQsd3QpKStNYXRoLmltdWwoVHQsTHQpfDAsUT1NYXRoLmltdWwoVHQsd3QpLHE9cStNYXRoLmltdWwoTGUsUWUpfDAsRz0oRz1HK01hdGguaW11bChMZSxQdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KG50LFFlKXwwLFE9UStNYXRoLmltdWwobnQsUHQpfDAscT1xK01hdGguaW11bCh0dCxOZSl8MCxHPShHPUcrTWF0aC5pbXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsUT1RK01hdGguaW11bChVZSx5dCl8MCxxPXErTWF0aC5pbXVsKGh0LGF0KXwwLEc9KEc9RytNYXRoLmltdWwo''@;'; put 'put ''aHQsX3QpfDApK01hdGguaW11bCh2dCxhdCl8MCxRPVErTWF0aC5pbXVsKHZ0LF90KXwwLHE9cStNYXRoLmltdWwoS2UsJHQpfDAsRz0oRz1HK01hdGguaW11bChLZSxIdCl8MCkrTWF0aC5pbXVsKFllLCR0KXwwLFE9UStNYXRoLmltdWwoWWUsSHQpfDAscT1xK01hdGguaW11bChiZSxubil8''@;'; put 'put ''MCxHPShHPUcrTWF0aC5pbXVsKGJlLGxuKXwwKStNYXRoLmltdWwod2Usbm4pfDAsUT1RK01hdGguaW11bCh3ZSxsbil8MCxxPXErTWF0aC5pbXVsKHhlLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoeGUsR3QpfDApK01hdGguaW11bChNZSxhbil8MCxRPVErTWF0aC5pbXVsKE1lLEd0KXwwO3Zh''@;'; put 'put ''ciBmYT0oYisocT1xK01hdGguaW11bChPZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKE9lLGZyKXwwKStNYXRoLmltdWwoQ2UsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoQ2UsZnIpfDApKyhHPj4+MTMpfDApKyhmYT4+PjI2KXwwLGZhJj02NzEwODg2Myxx''@;'; put 'put ''PU1hdGguaW11bCh4dCxRZSksRz0oRz1NYXRoLmltdWwoeHQsUHQpKStNYXRoLmltdWwoVHQsUWUpfDAsUT1NYXRoLmltdWwoVHQsUHQpLHE9cStNYXRoLmltdWwoTGUsTmUpfDAsRz0oRz1HK01hdGguaW11bChMZSx5dCl8MCkrTWF0aC5pbXVsKG50LE5lKXwwLFE9UStNYXRoLmltdWwobnQs''@;'; put 'put ''eXQpfDAscT1xK01hdGguaW11bCh0dCxhdCl8MCxHPShHPUcrTWF0aC5pbXVsKHR0LF90KXwwKStNYXRoLmltdWwoVWUsYXQpfDAsUT1RK01hdGguaW11bChVZSxfdCl8MCxxPXErTWF0aC5pbXVsKGh0LCR0KXwwLEc9KEc9RytNYXRoLmltdWwoaHQsSHQpfDApK01hdGguaW11bCh2dCwkdCl8''@;'; put 'put ''MCxRPVErTWF0aC5pbXVsKHZ0LEh0KXwwLHE9cStNYXRoLmltdWwoS2Usbm4pfDAsRz0oRz1HK01hdGguaW11bChLZSxsbil8MCkrTWF0aC5pbXVsKFllLG5uKXwwLFE9UStNYXRoLmltdWwoWWUsbG4pfDAscT1xK01hdGguaW11bChiZSxhbil8MCxHPShHPUcrTWF0aC5pbXVsKGJlLEd0KXww''@;'; put 'put ''KStNYXRoLmltdWwod2UsYW4pfDAsUT1RK01hdGguaW11bCh3ZSxHdCl8MDt2YXIgeGk9KGIrKHE9cStNYXRoLmltdWwoeGUsbWkpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bCh4ZSxmcil8MCkrTWF0aC5pbXVsKE1lLG1pKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKE1l''@;'; put 'put ''LGZyKXwwKSsoRz4+PjEzKXwwKSsoeGk+Pj4yNil8MCx4aSY9NjcxMDg4NjMscT1NYXRoLmltdWwoeHQsTmUpLEc9KEc9TWF0aC5pbXVsKHh0LHl0KSkrTWF0aC5pbXVsKFR0LE5lKXwwLFE9TWF0aC5pbXVsKFR0LHl0KSxxPXErTWF0aC5pbXVsKExlLGF0KXwwLEc9KEc9RytNYXRoLmltdWwo''@;'; put 'put ''TGUsX3QpfDApK01hdGguaW11bChudCxhdCl8MCxRPVErTWF0aC5pbXVsKG50LF90KXwwLHE9cStNYXRoLmltdWwodHQsJHQpfDAsRz0oRz1HK01hdGguaW11bCh0dCxIdCl8MCkrTWF0aC5pbXVsKFVlLCR0KXwwLFE9UStNYXRoLmltdWwoVWUsSHQpfDAscT1xK01hdGguaW11bChodCxubil8''@;'; put 'put ''MCxHPShHPUcrTWF0aC5pbXVsKGh0LGxuKXwwKStNYXRoLmltdWwodnQsbm4pfDAsUT1RK01hdGguaW11bCh2dCxsbil8MCxxPXErTWF0aC5pbXVsKEtlLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bChZZSxhbil8MCxRPVErTWF0aC5pbXVsKFllLEd0KXwwO3Zh''@;'; put 'put ''ciBvYT0oYisocT1xK01hdGguaW11bChiZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKGJlLGZyKXwwKStNYXRoLmltdWwod2UsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwod2UsZnIpfDApKyhHPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02NzEwODg2Myxx''@;'; put 'put ''PU1hdGguaW11bCh4dCxhdCksRz0oRz1NYXRoLmltdWwoeHQsX3QpKStNYXRoLmltdWwoVHQsYXQpfDAsUT1NYXRoLmltdWwoVHQsX3QpLHE9cStNYXRoLmltdWwoTGUsJHQpfDAsRz0oRz1HK01hdGguaW11bChMZSxIdCl8MCkrTWF0aC5pbXVsKG50LCR0KXwwLFE9UStNYXRoLmltdWwobnQs''@;'; put 'put ''SHQpfDAscT1xK01hdGguaW11bCh0dCxubil8MCxHPShHPUcrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsUT1RK01hdGguaW11bChVZSxsbil8MCxxPXErTWF0aC5pbXVsKGh0LGFuKXwwLEc9KEc9RytNYXRoLmltdWwoaHQsR3QpfDApK01hdGguaW11bCh2dCxhbil8''@;'; put 'put ''MCxRPVErTWF0aC5pbXVsKHZ0LEd0KXwwO3ZhciBYaT0oYisocT1xK01hdGguaW11bChLZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKEtlLGZyKXwwKStNYXRoLmltdWwoWWUsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoWWUsZnIpfDApKyhHPj4+MTMpfDAp''@;'; put 'put ''KyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCwkdCksRz0oRz1NYXRoLmltdWwoeHQsSHQpKStNYXRoLmltdWwoVHQsJHQpfDAsUT1NYXRoLmltdWwoVHQsSHQpLHE9cStNYXRoLmltdWwoTGUsbm4pfDAsRz0oRz1HK01hdGguaW11bChMZSxsbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KG50LG5uKXwwLFE9UStNYXRoLmltdWwobnQsbG4pfDAscT1xK01hdGguaW11bCh0dCxhbil8MCxHPShHPUcrTWF0aC5pbXVsKHR0LEd0KXwwKStNYXRoLmltdWwoVWUsYW4pfDAsUT1RK01hdGguaW11bChVZSxHdCl8MDt2YXIgSXI9KGIrKHE9cStNYXRoLmltdWwoaHQsbWkpfDApfDApKygo''@;'; put 'put ''ODE5MSYoRz0oRz1HK01hdGguaW11bChodCxmcil8MCkrTWF0aC5pbXVsKHZ0LG1pKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKHZ0LGZyKXwwKSsoRz4+PjEzKXwwKSsoSXI+Pj4yNil8MCxJciY9NjcxMDg4NjMscT1NYXRoLmltdWwoeHQsbm4pLEc9KEc9TWF0aC5pbXVsKHh0LGxu''@;'; put 'put ''KSkrTWF0aC5pbXVsKFR0LG5uKXwwLFE9TWF0aC5pbXVsKFR0LGxuKSxxPXErTWF0aC5pbXVsKExlLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoTGUsR3QpfDApK01hdGguaW11bChudCxhbil8MCxRPVErTWF0aC5pbXVsKG50LEd0KXwwO3ZhciBibz0oYisocT1xK01hdGguaW11bCh0dCxtaSl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKHR0LGZyKXwwKStNYXRoLmltdWwoVWUsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoVWUsZnIpfDApKyhHPj4+MTMpfDApKyhibz4+PjI2KXwwLGJvJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCxhbiksRz0oRz1NYXRoLmlt''@;'; put 'put ''dWwoeHQsR3QpKStNYXRoLmltdWwoVHQsYW4pfDAsUT1NYXRoLmltdWwoVHQsR3QpO3ZhciBYYT0oYisocT1xK01hdGguaW11bChMZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKExlLGZyKXwwKStNYXRoLmltdWwobnQsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmlt''@;'; put 'put ''dWwobnQsZnIpfDApKyhHPj4+MTMpfDApKyhYYT4+PjI2KXwwLFhhJj02NzEwODg2Mzt2YXIgRmw9KGIrKHE9TWF0aC5pbXVsKHh0LG1pKSl8MCkrKCg4MTkxJihHPShHPU1hdGguaW11bCh4dCxmcikpK01hdGguaW11bChUdCxtaSl8MCkpPDwxMyl8MDtyZXR1cm4gYj0oKFE9TWF0aC5pbXVs''@;'; put 'put ''KFR0LGZyKSkrKEc+Pj4xMyl8MCkrKEZsPj4+MjYpfDAsRmwmPTY3MTA4ODYzLGxbMF09JGksbFsxXT1LaSxsWzJdPVZpLGxbM109cXIsbFs0XT11YSxsWzVdPUZpLGxbNl09UmEsbFs3XT1vaSxsWzhdPVVpLGxbOV09VmEsbFsxMF09dXIsbFsxMV09ZmEsbFsxMl09eGksbFsxM109b2EsbFsx''@;'; put 'put ''NF09WGksbFsxNV09SXIsbFsxNl09Ym8sbFsxN109WGEsbFsxOF09RmwsMCE9PWImJihsWzE5XT1iLGsubGVuZ3RoKyspLGt9O2Z1bmN0aW9uIEsodixwLF8pe18ubmVnYXRpdmU9cC5uZWdhdGl2ZV52Lm5lZ2F0aXZlLF8ubGVuZ3RoPXYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgaz0wLEw9''@;'; put 'put ''MCx5PTA7eTxfLmxlbmd0aC0xO3krKyl7dmFyIGw9TDtMPTA7Zm9yKHZhciBiPTY3MTA4ODYzJmsscT1NYXRoLm1pbih5LHAubGVuZ3RoLTEpLEc9TWF0aC5tYXgoMCx5LXYubGVuZ3RoKzEpO0c8PXE7RysrKXt2YXIgWmU9KDB8di53b3Jkc1t5LUddKSooMHxwLndvcmRzW0ddKSxxZT02NzEw''@;'; put 'put ''ODg2MyZaZTtiPTY3MTA4ODYzJihxZT1xZStifDApLEwrPShsPShsPWwrKFplLzY3MTA4ODY0fDApfDApKyhxZT4+PjI2KXwwKT4+PjI2LGwmPTY3MTA4ODYzfV8ud29yZHNbeV09YixrPWwsbD1MfXJldHVybiAwIT09az9fLndvcmRzW3ldPWs6Xy5sZW5ndGgtLSxfLl9zdHJpcCgpfWZ1bmN0''@;'; put 'put ''aW9uIFgodixwLF8pe3JldHVybiBLKHYscCxfKX1mdW5jdGlvbiBuZSh2LHApe3RoaXMueD12LHRoaXMueT1wfU1hdGguaW11bHx8KFU9WiksZi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxfKXt2YXIgTD10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''MTA9PT1wLmxlbmd0aD9VKHRoaXMscCxfKTpMPDYzP1oodGhpcyxwLF8pOkw8MTAyND9LKHRoaXMscCxfKTpYKHRoaXMscCxfKX0sbmUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBfPW5ldyBBcnJheShwKSxrPWYucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxMPTA7''@;'; put 'put ''TDxwO0wrKylfW0xdPXRoaXMucmV2QmluKEwsayxwKTtyZXR1cm4gX30sbmUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLF8sayl7aWYoMD09PXB8fHA9PT1rLTEpcmV0dXJuIHA7Zm9yKHZhciBMPTAseT0wO3k8Xzt5KyspTHw9KDEmcCk8PF8teS0xLHA+Pj0xO3JldHVybiBMfSxuZS5w''@;'; put 'put ''cm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLF8sayxMLHksbCl7Zm9yKHZhciBiPTA7YjxsO2IrKylMW2JdPV9bcFtiXV0seVtiXT1rW3BbYl1dfSxuZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsXyxrLEwseSxsKXt0aGlzLnBlcm11dGUobCxwLF8sayxMLHkpO2Zvcih2YXIg''@;'; put 'put ''Yj0xO2I8eTtiPDw9MSlmb3IodmFyIHE9Yjw8MSxHPU1hdGguY29zKDIqTWF0aC5QSS9xKSxRPU1hdGguc2luKDIqTWF0aC5QSS9xKSxwZT0wO3BlPHk7cGUrPXEpZm9yKHZhciBQZT1HLFplPVEscWU9MDtxZTxiO3FlKyspe3ZhciB2ZT1rW3BlK3FlXSx1ZT1MW3BlK3FlXSx6ZT1rW3BlK3Fl''@;'; put 'put ''K2JdLE9lPUxbcGUrcWUrYl0sQ2U9UGUqemUtWmUqT2U7T2U9UGUqT2UrWmUqemUsa1twZStxZV09dmUrKHplPUNlKSxMW3BlK3FlXT11ZStPZSxrW3BlK3FlK2JdPXZlLXplLExbcGUrcWUrYl09dWUtT2UscWUhPT1xJiYoQ2U9RypQZS1RKlplLFplPUcqWmUrUSpQZSxQZT1DZSl9fSxuZS5w''@;'; put 'put ''cm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxfKXt2YXIgaz0xfE1hdGgubWF4KF8scCksTD0xJmsseT0wO2ZvcihrPWsvMnwwO2s7az4+Pj0xKXkrKztyZXR1cm4gMTw8eSsxK0x9LG5lLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxfLGspe2lmKCEoazw9MSkpZm9yKHZh''@;'; put 'put ''ciBMPTA7TDxrLzI7TCsrKXt2YXIgeT1wW0xdO3BbTF09cFtrLUwtMV0scFtrLUwtMV09eSx5PV9bTF0sX1tMXT0tX1trLUwtMV0sX1trLUwtMV09LXl9fSxuZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsXyl7Zm9yKHZhciBrPTAsTD0wO0w8Xy8yO0wrKyl7dmFyIHk9ODE5''@;'; put 'put ''MipNYXRoLnJvdW5kKHBbMipMKzFdL18pK01hdGgucm91bmQocFsyKkxdL18pK2s7cFtMXT02NzEwODg2MyZ5LGs9eTw2NzEwODg2ND8wOnkvNjcxMDg4NjR8MH1yZXR1cm4gcH0sbmUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxfLGssTCl7Zm9yKHZhciB5PTAsbD0wO2w8Xzts''@;'; put 'put ''Kyspa1syKmxdPTgxOTEmKHkrPTB8cFtsXSksa1syKmwrMV09ODE5MSYoeT4+Pj0xMykseT4+Pj0xMztmb3IobD0yKl87bDxMOysrbClrW2xdPTA7bygwPT09eSksbyghKC04MTkyJnkpKX0sbmUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBfPW5ldyBBcnJheShwKSxrPTA7''@;'; put 'put ''azxwO2srKylfW2tdPTA7cmV0dXJuIF99LG5lLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsXyxrKXt2YXIgTD0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsXy5sZW5ndGgpLHk9dGhpcy5tYWtlUkJUKEwpLGw9dGhpcy5zdHViKEwpLGI9bmV3IEFycmF5KEwpLHE9bmV3IEFycmF5KEwp''@;'; put 'put ''LEc9bmV3IEFycmF5KEwpLFE9bmV3IEFycmF5KEwpLHBlPW5ldyBBcnJheShMKSxQZT1uZXcgQXJyYXkoTCksWmU9ay53b3JkcztaZS5sZW5ndGg9TCx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxiLEwpLHRoaXMuY29udmVydDEzYihfLndvcmRzLF8ubGVuZ3RoLFEsTCksdGhp''@;'; put 'put ''cy50cmFuc2Zvcm0oYixsLHEsRyxMLHkpLHRoaXMudHJhbnNmb3JtKFEsbCxwZSxQZSxMLHkpO2Zvcih2YXIgcWU9MDtxZTxMO3FlKyspe3ZhciB2ZT1xW3FlXSpwZVtxZV0tR1txZV0qUGVbcWVdO0dbcWVdPXFbcWVdKlBlW3FlXStHW3FlXSpwZVtxZV0scVtxZV09dmV9cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29uanVnYXRlKHEsRyxMKSx0aGlzLnRyYW5zZm9ybShxLEcsWmUsbCxMLHkpLHRoaXMuY29uanVnYXRlKFplLGwsTCksdGhpcy5ub3JtYWxpemUxM2IoWmUsTCksay5uZWdhdGl2ZT1wLm5lZ2F0aXZlXl8ubmVnYXRpdmUsay5sZW5ndGg9cC5sZW5ndGgrXy5sZW5ndGgsay5fc3RyaXAoKX0s''@;'; put 'put ''Zi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBfPW5ldyBmKG51bGwpO3JldHVybiBfLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLF8pfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBfPW5ldyBmKG51bGwpO3JldHVybiBf''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksWCh0aGlzLHAsXyl9LGYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXt2YXIgXz1wPDA7XyYmKHA9LXAp''@;'; put 'put ''LG8oIm51bWJlciI9PXR5cGVvZiBwKSxvKHA8NjcxMDg4NjQpO2Zvcih2YXIgaz0wLEw9MDtMPHRoaXMubGVuZ3RoO0wrKyl7dmFyIHk9KDB8dGhpcy53b3Jkc1tMXSkqcCxsPSg2NzEwODg2MyZ5KSsoNjcxMDg4NjMmayk7az4+PTI2LGsrPXkvNjcxMDg4NjR8MCxrKz1sPj4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tMXT02NzEwODg2MyZsfXJldHVybiAwIT09ayYmKHRoaXMud29yZHNbTF09ayx0aGlzLmxlbmd0aCsrKSxfP3RoaXMuaW5lZygpOnRoaXN9LGYucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sZi5wcm90b3R5cGUuc3FyPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxmLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxmLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIF89ZnVuY3Rpb24geih2KXtmb3IodmFyIHA9bmV3IEFycmF5KHYuYml0TGVu''@;'; put 'put ''Z3RoKCkpLF89MDtfPHAubGVuZ3RoO18rKylwW19dPXYud29yZHNbXy8yNnwwXT4+Pl8lMjYmMTtyZXR1cm4gcH0ocCk7aWYoMD09PV8ubGVuZ3RoKXJldHVybiBuZXcgZigxKTtmb3IodmFyIGs9dGhpcyxMPTA7TDxfLmxlbmd0aCYmMD09PV9bTF07TCsrLGs9ay5zcXIoKSk7aWYoKytMPF8u''@;'; put 'put ''bGVuZ3RoKWZvcih2YXIgeT1rLnNxcigpO0w8Xy5sZW5ndGg7TCsrLHk9eS5zcXIoKSkwIT09X1tMXSYmKGs9ay5tdWwoeSkpO3JldHVybiBrfSxmLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7bygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB5LF89cCUyNixrPShwLV8pLzI2''@;'; put 'put ''LEw9NjcxMDg4NjM+Pj4yNi1fPDwyNi1fO2lmKDAhPT1fKXt2YXIgbD0wO2Zvcih5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciBiPXRoaXMud29yZHNbeV0mTDt0aGlzLndvcmRzW3ldPSgwfHRoaXMud29yZHNbeV0pLWI8PF98bCxsPWI+Pj4yNi1ffWwmJih0aGlzLndvcmRzW3ldPWwsdGhp''@;'; put 'put ''cy5sZW5ndGgrKyl9aWYoMCE9PWspe2Zvcih5PXRoaXMubGVuZ3RoLTE7eT49MDt5LS0pdGhpcy53b3Jkc1t5K2tdPXRoaXMud29yZHNbeV07Zm9yKHk9MDt5PGs7eSsrKXRoaXMud29yZHNbeV09MDt0aGlzLmxlbmd0aCs9a31yZXR1cm4gdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNo''@;'; put 'put ''bG49ZnVuY3Rpb24ocCl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxfLGspe3ZhciBMO28oIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxMPV8/KF8tXyUyNikvMjY6MDt2YXIgeT1wJTI2LGw9TWF0aC5t''@;'; put 'put ''aW4oKHAteSkvMjYsdGhpcy5sZW5ndGgpLGI9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5LHE9aztpZihMLT1sLEw9TWF0aC5tYXgoMCxMKSxxKXtmb3IodmFyIEc9MDtHPGw7RysrKXEud29yZHNbR109dGhpcy53b3Jkc1tHXTtxLmxlbmd0aD1sfWlmKDAhPT1sKWlmKHRoaXMubGVuZ3RoPmwp''@;'; put 'put ''Zm9yKHRoaXMubGVuZ3RoLT1sLEc9MDtHPHRoaXMubGVuZ3RoO0crKyl0aGlzLndvcmRzW0ddPXRoaXMud29yZHNbRytsXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBRPTA7Zm9yKEc9dGhpcy5sZW5ndGgtMTtHPj0wJiYoMCE9PVF8fEc+PUwpO0ctLSl7dmFyIHBl''@;'; put 'put ''PTB8dGhpcy53b3Jkc1tHXTt0aGlzLndvcmRzW0ddPVE8PDI2LXl8cGU+Pj55LFE9cGUmYn1yZXR1cm4gcSYmMCE9PVEmJihxLndvcmRzW3EubGVuZ3RoKytdPVEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5pc2hybj1mdW5jdGlvbihwLF8sayl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsXyxrKX0sZi5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSxmLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sZi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSxmLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sZi5wcm90b3R5cGUudGVz''@;'; put 'put ''dG49ZnVuY3Rpb24ocCl7bygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBfPXAlMjYsaz0ocC1fKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1rfHwhKHRoaXMud29yZHNba10mMTw8XykpfSxmLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7bygibnVtYmVyIj09dHlwZW9mIHAm''@;'; put 'put ''JnA+PTApO3ZhciBfPXAlMjYsaz0ocC1fKS8yNjtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PWs/dGhpczooMCE9PV8mJmsrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihrLHRoaXMubGVuZ3Ro''@;'; put 'put ''KSwwIT09XyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Xzw8XyksdGhpcy5fc3RyaXAoKSl9LGYucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSxmLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gbygibnVtYmVyIj09dHlwZW9mIHApLG8ocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PXA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sZi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBfPTA7Xzx0aGlzLmxlbmd0aCYmdGhpcy53''@;'; put 'put ''b3Jkc1tfXT49NjcxMDg4NjQ7XysrKXRoaXMud29yZHNbX10tPTY3MTA4ODY0LF89PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbXysxXT0xOnRoaXMud29yZHNbXysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxfKzEpLHRoaXN9LGYucHJvdG90eXBlLmlz''@;'; put 'put ''dWJuPWZ1bmN0aW9uKHApe2lmKG8oIm51bWJlciI9PXR5cGVvZiBwKSxvKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRo''@;'; put 'put ''aXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIF89MDtfPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW19dPDA7XysrKXRoaXMud29yZHNbX10rPTY3MTA4''@;'; put 'put ''ODY0LHRoaXMud29yZHNbXysxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSxmLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LGYu''@;'; put 'put ''cHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxmLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxfLGspe3ZhciB5O3RoaXMuX2V4''@;'; put 'put ''cGFuZChwLmxlbmd0aCtrKTt2YXIgbCxiPTA7Zm9yKHk9MDt5PHAubGVuZ3RoO3krKyl7bD0oMHx0aGlzLndvcmRzW3kra10pK2I7dmFyIHE9KDB8cC53b3Jkc1t5XSkqXztiPSgobC09NjcxMDg4NjMmcSk+PjI2KS0ocS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3kra109NjcxMDg4NjMmbH1m''@;'; put 'put ''b3IoO3k8dGhpcy5sZW5ndGgtazt5KyspYj0obD0oMHx0aGlzLndvcmRzW3kra10pK2IpPj4yNix0aGlzLndvcmRzW3kra109NjcxMDg4NjMmbDtpZigwPT09YilyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IobygtMT09PWIpLGI9MCx5PTA7eTx0aGlzLmxlbmd0aDt5KyspYj0obD0tKDB8dGhp''@;'; put 'put ''cy53b3Jkc1t5XSkrYik+PjI2LHRoaXMud29yZHNbeV09NjcxMDg4NjMmbDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsXyl7dmFyIGssTD10aGlzLmNsb25lKCkseT1wLGw9MHx5LndvcmRzW3kubGVuZ3RoLTFd''@;'; put 'put ''OzAhPShrPTI2LXRoaXMuX2NvdW50Qml0cyhsKSkmJih5PXkudXNobG4oayksTC5pdXNobG4oayksbD0wfHkud29yZHNbeS5sZW5ndGgtMV0pO3ZhciBHLHE9TC5sZW5ndGgteS5sZW5ndGg7aWYoIm1vZCIhPT1fKXsoRz1uZXcgZihudWxsKSkubGVuZ3RoPXErMSxHLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eShHLmxlbmd0aCk7Zm9yKHZhciBRPTA7UTxHLmxlbmd0aDtRKyspRy53b3Jkc1tRXT0wfXZhciBwZT1MLmNsb25lKCkuX2lzaGxuc3VibXVsKHksMSxxKTswPT09cGUubmVnYXRpdmUmJihMPXBlLEcmJihHLndvcmRzW3FdPTEpKTtmb3IodmFyIFBlPXEtMTtQZT49MDtQZS0tKXt2YXIgWmU9''@;'; put 'put ''NjcxMDg4NjQqKDB8TC53b3Jkc1t5Lmxlbmd0aCtQZV0pKygwfEwud29yZHNbeS5sZW5ndGgrUGUtMV0pO2ZvcihaZT1NYXRoLm1pbihaZS9sfDAsNjcxMDg4NjMpLEwuX2lzaGxuc3VibXVsKHksWmUsUGUpOzAhPT1MLm5lZ2F0aXZlOylaZS0tLEwubmVnYXRpdmU9MCxMLl9pc2hsbnN1Ym11''@;'; put 'put ''bCh5LDEsUGUpLEwuaXNaZXJvKCl8fChMLm5lZ2F0aXZlXj0xKTtHJiYoRy53b3Jkc1tQZV09WmUpfXJldHVybiBHJiZHLl9zdHJpcCgpLEwuX3N0cmlwKCksImRpdiIhPT1fJiYwIT09ayYmTC5pdXNocm4oaykse2RpdjpHfHxudWxsLG1vZDpMfX0sZi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0''@;'; put 'put ''aW9uKHAsXyxrKXtyZXR1cm4gbyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBmKDApLG1vZDpuZXcgZigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhsPXRoaXMubmVnKCkuZGl2bW9kKHAsXyksIm1vZCIhPT1fJiYoTD1sLmRpdi5uZWcoKSksImRp''@;'; put 'put ''diIhPT1fJiYoeT1sLm1vZC5uZWcoKSxrJiYwIT09eS5uZWdhdGl2ZSYmeS5pYWRkKHApKSx7ZGl2OkwsbW9kOnl9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KGw9dGhpcy5kaXZtb2QocC5uZWcoKSxfKSwibW9kIiE9PV8mJihMPWwuZGl2Lm5lZygpKSx7ZGl2OkwsbW9k''@;'; put 'put ''OmwubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhsPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksXyksImRpdiIhPT1fJiYoeT1sLm1vZC5uZWcoKSxrJiYwIT09eS5uZWdhdGl2ZSYmeS5pc3ViKHApKSx7ZGl2OmwuZGl2LG1vZDp5fSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRo''@;'; put 'put ''aXMuY21wKHApPDA/e2RpdjpuZXcgZigwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Xz97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1fP3tkaXY6bnVsbCxtb2Q6bmV3IGYodGhpcy5tb2RybihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZu''@;'; put 'put ''KHAud29yZHNbMF0pLG1vZDpuZXcgZih0aGlzLm1vZHJuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLF8pO3ZhciBMLHksbH0sZi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LGYucHJvdG90eXBlLm1vZD1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSxmLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LGYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBfPXRoaXMuZGl2bW9kKHApO2lmKF8u''@;'; put 'put ''bW9kLmlzWmVybygpKXJldHVybiBfLmRpdjt2YXIgaz0wIT09Xy5kaXYubmVnYXRpdmU/Xy5tb2QuaXN1YihwKTpfLm1vZCxMPXAudXNocm4oMSkseT1wLmFuZGxuKDEpLGw9ay5jbXAoTCk7cmV0dXJuIGw8MHx8MT09PXkmJjA9PT1sP18uZGl2OjAhPT1fLmRpdi5uZWdhdGl2ZT9fLmRpdi5p''@;'; put 'put ''c3VibigxKTpfLmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24ocCl7dmFyIF89cDwwO18mJihwPS1wKSxvKHA8PTY3MTA4ODYzKTtmb3IodmFyIGs9KDE8PDI2KSVwLEw9MCx5PXRoaXMubGVuZ3RoLTE7eT49MDt5LS0pTD0oaypMKygwfHRoaXMud29yZHNbeV0pKSVw''@;'; put 'put ''O3JldHVybiBfPy1MOkx9LGYucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubW9kcm4ocCl9LGYucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe3ZhciBfPXA8MDtfJiYocD0tcCksbyhwPD02NzEwODg2Myk7Zm9yKHZhciBrPTAsTD10aGlzLmxlbmd0aC0xO0w+PTA7''@;'; put 'put ''TC0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW0xdKSs2NzEwODg2NCprO3RoaXMud29yZHNbTF09eS9wfDAsaz15JXB9cmV0dXJuIHRoaXMuX3N0cmlwKCksXz90aGlzLmluZWcoKTp0aGlzfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9''@;'; put 'put ''LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7bygwPT09cC5uZWdhdGl2ZSksbyghcC5pc1plcm8oKSk7dmFyIF89dGhpcyxrPXAuY2xvbmUoKTtfPTAhPT1fLm5lZ2F0aXZlP18udW1vZChwKTpfLmNsb25lKCk7Zm9yKHZhciBMPW5ldyBmKDEpLHk9bmV3IGYoMCksbD1uZXcgZigwKSxi''@;'; put 'put ''PW5ldyBmKDEpLHE9MDtfLmlzRXZlbigpJiZrLmlzRXZlbigpOylfLml1c2hybigxKSxrLml1c2hybigxKSwrK3E7Zm9yKHZhciBHPWsuY2xvbmUoKSxRPV8uY2xvbmUoKTshXy5pc1plcm8oKTspe2Zvcih2YXIgcGU9MCxQZT0xOyEoXy53b3Jkc1swXSZQZSkmJnBlPDI2OysrcGUsUGU8PD0x''@;'; put 'put ''KTtpZihwZT4wKWZvcihfLml1c2hybihwZSk7cGUtLSA+MDspKEwuaXNPZGQoKXx8eS5pc09kZCgpKSYmKEwuaWFkZChHKSx5LmlzdWIoUSkpLEwuaXVzaHJuKDEpLHkuaXVzaHJuKDEpO2Zvcih2YXIgWmU9MCxxZT0xOyEoay53b3Jkc1swXSZxZSkmJlplPDI2OysrWmUscWU8PD0xKTtpZiha''@;'; put 'put ''ZT4wKWZvcihrLml1c2hybihaZSk7WmUtLSA+MDspKGwuaXNPZGQoKXx8Yi5pc09kZCgpKSYmKGwuaWFkZChHKSxiLmlzdWIoUSkpLGwuaXVzaHJuKDEpLGIuaXVzaHJuKDEpO18uY21wKGspPj0wPyhfLmlzdWIoayksTC5pc3ViKGwpLHkuaXN1YihiKSk6KGsuaXN1YihfKSxsLmlzdWIoTCks''@;'; put 'put ''Yi5pc3ViKHkpKX1yZXR1cm57YTpsLGIsZ2NkOmsuaXVzaGxuKHEpfX0sZi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe28oMD09PXAubmVnYXRpdmUpLG8oIXAuaXNaZXJvKCkpO3ZhciBwZSxfPXRoaXMsaz1wLmNsb25lKCk7Xz0wIT09Xy5uZWdhdGl2ZT9fLnVtb2QocCk6Xy5jbG9u''@;'; put 'put ''ZSgpO2Zvcih2YXIgTD1uZXcgZigxKSx5PW5ldyBmKDApLGw9ay5jbG9uZSgpO18uY21wbigxKT4wJiZrLmNtcG4oMSk+MDspe2Zvcih2YXIgYj0wLHE9MTshKF8ud29yZHNbMF0mcSkmJmI8MjY7KytiLHE8PD0xKTtpZihiPjApZm9yKF8uaXVzaHJuKGIpO2ItLSA+MDspTC5pc09kZCgpJiZM''@;'; put 'put ''LmlhZGQobCksTC5pdXNocm4oMSk7Zm9yKHZhciBHPTAsUT0xOyEoay53b3Jkc1swXSZRKSYmRzwyNjsrK0csUTw8PTEpO2lmKEc+MClmb3Ioay5pdXNocm4oRyk7Ry0tID4wOyl5LmlzT2RkKCkmJnkuaWFkZChsKSx5Lml1c2hybigxKTtfLmNtcChrKT49MD8oXy5pc3ViKGspLEwuaXN1Yih5''@;'; put 'put ''KSk6KGsuaXN1YihfKSx5LmlzdWIoTCkpfXJldHVybihwZT0wPT09Xy5jbXBuKDEpP0w6eSkuY21wbigwKTwwJiZwZS5pYWRkKHApLHBlfSxmLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlz''@;'; put 'put ''LmFicygpO3ZhciBfPXRoaXMuY2xvbmUoKSxrPXAuY2xvbmUoKTtfLm5lZ2F0aXZlPTAsay5uZWdhdGl2ZT0wO2Zvcih2YXIgTD0wO18uaXNFdmVuKCkmJmsuaXNFdmVuKCk7TCsrKV8uaXVzaHJuKDEpLGsuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtfLmlzRXZlbigpOylfLml1c2hybigxKTtm''@;'; put 'put ''b3IoO2suaXNFdmVuKCk7KWsuaXVzaHJuKDEpO3ZhciB5PV8uY21wKGspO2lmKHk8MCl7dmFyIGw9XztfPWssaz1sfWVsc2UgaWYoMD09PXl8fDA9PT1rLmNtcG4oMSkpYnJlYWs7Xy5pc3ViKGspfXJldHVybiBrLml1c2hsbihMKX0sZi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sZi5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGYucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LGYucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe28oIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgXz1wJTI2LGs9KHAtXykvMjYsTD0xPDxfO2lmKHRoaXMubGVuZ3RoPD1rKXJldHVybiB0aGlzLl9leHBhbmQoaysxKSx0aGlzLndvcmRzW2td''@;'; put 'put ''fD1MLHRoaXM7Zm9yKHZhciB5PUwsbD1rOzAhPT15JiZsPHRoaXMubGVuZ3RoO2wrKyl7dmFyIGI9MHx0aGlzLndvcmRzW2xdO3k9KGIrPXkpPj4+MjYsdGhpcy53b3Jkc1tsXT1iJj02NzEwODg2M31yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW2xdPXksdGhpcy5sZW5ndGgrKyksdGhpc30s''@;'; put 'put ''Zi5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGYucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIGssXz1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFfKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlJiZfKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlrPTE7ZWxzZXtfJiYocD0tcCksbyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTD0wfHRoaXMud29yZHNbMF07az1MPT09cD8wOkw8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT8wfC1rOmt9LGYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBfPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmU/MHwtXzpffSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgXz0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIEw9MHx0aGlzLndv''@;'; put 'put ''cmRzW2tdLHk9MHxwLndvcmRzW2tdO2lmKEwhPT15KXtMPHk/Xz0tMTpMPnkmJihfPTEpO2JyZWFrfX1yZXR1cm4gX30sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMu''@;'; put 'put ''Y21wKHApfSxmLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LGYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0s''@;'; put 'put ''Zi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sZi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSxmLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSxmLnByb3RvdHlw''@;'; put 'put ''ZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LGYucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgcyhwKX0sZi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LGYucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gbyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxmLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30s''@;'; put 'put ''Zi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LGYucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVk''@;'; put 'put ''QWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSxmLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBvKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxw''@;'; put 'put ''KX0sZi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBvKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LGYucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIG8odGhpcy5yZWQsInJl''@;'; put 'put ''ZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSxmLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxw''@;'; put 'put ''KX0sZi5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sZi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSxmLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3Fy''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sZi5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5z''@;'; put 'put ''cXJ0KHRoaXMpfSxmLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sZi5wcm90b3R5cGUucmVkTmVnPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGYucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gbyh0aGlzLnJlZCYmIXAucmVk''@;'; put 'put ''LCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgc2U9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBoZSh2LHApe3RoaXMubmFtZT12LHRoaXMucD1uZXcgZihwLDE2''@;'; put 'put ''KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgZigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gX2UoKXtoZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aGUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBGZSgpe2hlLmNhbGwodGhpcywi''@;'; put 'put ''cDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gUigpe2hlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVk''@;'; put 'put ''Iil9ZnVuY3Rpb24gcyh2KXtpZigic3RyaW5nIj09dHlwZW9mIHYpe3ZhciBwPWYuX3ByaW1lKHYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2Ugbyh2Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9u''@;'; put 'put ''IHUodil7cy5jYWxsKHRoaXMsdiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgZigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigp''@;'; put 'put ''KSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1oZS5wcm90b3R5cGUu''@;'; put 'put ''X3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyBmKG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saGUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIGssXz1wO2Rve3RoaXMuc3BsaXQoXyx0aGlzLnRtcCksaz0oXz0oXz10aGlz''@;'; put 'put ''LmltdWxLKF8pKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoaz50aGlzLm4pO3ZhciBMPWs8dGhpcy5uPy0xOl8udWNtcCh0aGlzLnApO3JldHVybiAwPT09TD8oXy53b3Jkc1swXT0wLF8ubGVuZ3RoPTEpOkw+MD9fLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1fLnN0cmlwP18u''@;'; put 'put ''c3RyaXAoKTpfLl9zdHJpcCgpLF99LGhlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLF8pe3AuaXVzaHJuKHRoaXMubiwwLF8pfSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxJKF9lLGhlKSxfZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rp''@;'; put 'put ''b24ocCxfKXtmb3IodmFyIGs9NDE5NDMwMyxMPU1hdGgubWluKHAubGVuZ3RoLDkpLHk9MDt5PEw7eSsrKV8ud29yZHNbeV09cC53b3Jkc1t5XTtpZihfLmxlbmd0aD1MLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgbD1wLndvcmRzWzldO2Zv''@;'; put 'put ''cihfLndvcmRzW18ubGVuZ3RoKytdPWwmayx5PTEwO3k8cC5sZW5ndGg7eSsrKXt2YXIgYj0wfHAud29yZHNbeV07cC53b3Jkc1t5LTEwXT0oYiZrKTw8NHxsPj4+MjIsbD1ifXAud29yZHNbeS0xMF09bD4+Pj0yMixwLmxlbmd0aC09MD09PWwmJnAubGVuZ3RoPjEwPzEwOjl9LF9lLnByb3Rv''@;'; put 'put ''dHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIF89MCxrPTA7azxwLmxlbmd0aDtrKyspe3ZhciBMPTB8cC53b3Jkc1trXTtwLndvcmRzW2tdPTY3MTA4ODYzJihfKz05NzcqTCksXz02NCpM''@;'; put 'put ''KyhfLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEkobWUsaGUpLEkoRmUsaGUpLEkoUixoZSksUi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBf''@;'; put 'put ''PTAsaz0wO2s8cC5sZW5ndGg7aysrKXt2YXIgTD0xOSooMHxwLndvcmRzW2tdKStfLHk9NjcxMDg4NjMmTDtMPj4+PTI2LHAud29yZHNba109eSxfPUx9cmV0dXJuIDAhPT1fJiYocC53b3Jkc1twLmxlbmd0aCsrXT1fKSxwfSxmLl9wcmltZT1mdW5jdGlvbihwKXtpZihzZVtwXSlyZXR1cm4g''@;'; put 'put ''c2VbcF07dmFyIF87aWYoImsyNTYiPT09cClfPW5ldyBfZTtlbHNlIGlmKCJwMjI0Ij09PXApXz1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKV89bmV3IEZlO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO189bmV3IFJ9cmV0dXJuIHNl''@;'; put 'put ''W3BdPV8sX30scy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7bygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHMucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9u''@;'; put 'put ''KHAsXyl7byghKHAubmVnYXRpdmV8Xy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhwLnJlZCYmcC5yZWQ9PT1fLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxzLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6KEQocCxwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLHApfSxzLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVk''@;'; put 'put ''KHRoaXMpfSxzLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxfKXt0aGlzLl92ZXJpZnkyKHAsXyk7dmFyIGs9cC5hZGQoXyk7cmV0dXJuIGsuY21wKHRoaXMubSk+PTAmJmsuaXN1Yih0aGlzLm0pLGsuX2ZvcmNlUmVkKHRoaXMpfSxzLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsXyl7dGhp''@;'; put 'put ''cy5fdmVyaWZ5MihwLF8pO3ZhciBrPXAuaWFkZChfKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksa30scy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsXyl7dGhpcy5fdmVyaWZ5MihwLF8pO3ZhciBrPXAuc3ViKF8pO3JldHVybiBrLmNtcG4oMCk8MCYmay5pYWRk''@;'; put 'put ''KHRoaXMubSksay5fZm9yY2VSZWQodGhpcyl9LHMucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxfKXt0aGlzLl92ZXJpZnkyKHAsXyk7dmFyIGs9cC5pc3ViKF8pO3JldHVybiBrLmNtcG4oMCk8MCYmay5pYWRkKHRoaXMubSksa30scy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsXyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oXykpfSxzLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxfKSx0aGlzLmltb2QocC5pbXVsKF8pKX0scy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3ZlcmlmeTIocCxfKSx0aGlzLmltb2QocC5tdWwoXykpfSxzLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxzLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LHMucHJvdG90eXBlLnNxcnQ9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBfPXRoaXMubS5hbmRsbigzKTtpZihvKF8lMj09MSksMz09PV8pe3ZhciBrPXRoaXMubS5hZGQobmV3IGYoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCxrKX1mb3IodmFyIEw9dGhpcy5tLnN1Ym4oMSks''@;'; put 'put ''eT0wOyFMLmlzWmVybygpJiYwPT09TC5hbmRsbigxKTspeSsrLEwuaXVzaHJuKDEpO28oIUwuaXNaZXJvKCkpO3ZhciBsPW5ldyBmKDEpLnRvUmVkKHRoaXMpLGI9bC5yZWROZWcoKSxxPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxHPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoRz1uZXcgZigy''@;'; put 'put ''KkcqRykudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KEcscSkuY21wKGIpOylHLnJlZElBZGQoYik7Zm9yKHZhciBRPXRoaXMucG93KEcsTCkscGU9dGhpcy5wb3cocCxMLmFkZG4oMSkuaXVzaHJuKDEpKSxQZT10aGlzLnBvdyhwLEwpLFplPXk7MCE9PVBlLmNtcChsKTspe2Zvcih2YXIgcWU9''@;'; put 'put ''UGUsdmU9MDswIT09cWUuY21wKGwpO3ZlKyspcWU9cWUucmVkU3FyKCk7byh2ZTxaZSk7dmFyIHVlPXRoaXMucG93KFEsbmV3IGYoMSkuaXVzaGxuKFplLXZlLTEpKTtwZT1wZS5yZWRNdWwodWUpLFE9dWUucmVkU3FyKCksUGU9UGUucmVkTXVsKFEpLFplPXZlfXJldHVybiBwZX0scy5wcm90''@;'; put 'put ''b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgXz1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Xy5uZWdhdGl2ZT8oXy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChfKS5yZWROZWcoKSk6dGhpcy5pbW9kKF8pfSxzLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxfKXtpZihfLmlzWmVybygpKXJl''@;'; put 'put ''dHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtpZigwPT09Xy5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEw9bmV3IEFycmF5KDE2KTtMWzBdPW5ldyBmKDEpLnRvUmVkKHRoaXMpLExbMV09cDtmb3IodmFyIHk9Mjt5PEwubGVuZ3RoO3krKylMW3ldPXRoaXMubXVsKExbeS0xXSxwKTt2''@;'; put 'put ''YXIgbD1MWzBdLGI9MCxxPTAsRz1fLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09RyYmKEc9MjYpLHk9Xy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBRPV8ud29yZHNbeV0scGU9Ry0xO3BlPj0wO3BlLS0pe3ZhciBQZT1RPj5wZSYxO2whPT1MWzBdJiYobD10aGlzLnNxcihsKSksMCE9PVBl''@;'; put 'put ''fHwwIT09Yj8oYjw8PTEsYnw9UGUsKDQ9PSsrcXx8MD09PXkmJjA9PT1wZSkmJihsPXRoaXMubXVsKGwsTFtiXSkscT0wLGI9MCkpOnE9MH1HPTI2fXJldHVybiBsfSxzLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIF89cC51bW9kKHRoaXMubSk7cmV0dXJuIF89PT1wP18u''@;'; put 'put ''Y2xvbmUoKTpffSxzLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgXz1wLmNsb25lKCk7cmV0dXJuIF8ucmVkPW51bGwsX30sZi5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgdShwKX0sSSh1LHMpLHUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx1LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgXz10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIF8ucmVkPW51bGwsX30sdS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLF8pe2lmKHAuaXNa''@;'; put 'put ''ZXJvKCl8fF8uaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIGs9cC5pbXVsKF8pLEw9ay5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkseT1rLmlzdWIoTCkuaXVzaHJuKHRoaXMuc2hpZnQp''@;'; put 'put ''LGw9eTtyZXR1cm4geS5jbXAodGhpcy5tKT49MD9sPXkuaXN1Yih0aGlzLm0pOnkuY21wbigwKTwwJiYobD15LmlhZGQodGhpcy5tKSksbC5fZm9yY2VSZWQodGhpcyl9LHUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLF8pe2lmKHAuaXNaZXJvKCl8fF8uaXNaZXJvKCkpcmV0dXJuIG5ldyBm''@;'; put 'put ''KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgaz1wLm11bChfKSxMPWsubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHk9ay5pc3ViKEwpLml1c2hybih0aGlzLnNoaWZ0KSxsPXk7cmV0dXJuIHkuY21wKHRoaXMubSk+PTA/bD15''@;'; put 'put ''LmlzdWIodGhpcy5tKTp5LmNtcG4oMCk8MCYmKGw9eS5pYWRkKHRoaXMubSkpLGwuX2ZvcmNlUmVkKHRoaXMpfSx1LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHRlPWQu''@;'; put 'put ''bm1kKHRlKSx0aGlzKX0sOTkzMToodGUsaixkKT0+e3ZhciBTO2Z1bmN0aW9uIGgoSSl7dGhpcy5yYW5kPUl9aWYodGUuZXhwb3J0cz1mdW5jdGlvbihmKXtyZXR1cm4gU3x8KFM9bmV3IGgobnVsbCkpLFMuZ2VuZXJhdGUoZil9LHRlLmV4cG9ydHMuUmFuZD1oLGgucHJvdG90eXBlLmdlbmVy''@;'; put 'put ''YXRlPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLl9yYW5kKGYpfSxoLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihmKXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhmKTtmb3IodmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZiksQT0wO0E8VC5sZW5ndGg7QSsr''@;'; put 'put ''KVRbQV09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gVH0sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/aC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oZil7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZik7cmV0dXJuIHNlbGYu''@;'; put 'put ''Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhUKSxUfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9oLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihmKXt2YXIgVD1uZXcgVWludDhBcnJheShmKTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMo''@;'; put 'put ''VCksVH06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihoLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIG89ZCg5MjE0KTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygby5yYW5kb21CeXRlcyl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtoLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihmKXtyZXR1cm4gby5yYW5kb21CeXRlcyhmKX19Y2F0Y2h7fX0sNDQ5NzoodGUsaixkKT0+e3ZhciBTPWQoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGgoTSl7Uy5pc0J1ZmZlcihNKXx8KE09Uy5m''@;'; put 'put ''cm9tKE0pKTtmb3IodmFyIE89TS5sZW5ndGgvNHwwLEQ9bmV3IEFycmF5KE8pLEU9MDtFPE87RSsrKURbRV09TS5yZWFkVUludDMyQkUoNCpFKTtyZXR1cm4gRH1mdW5jdGlvbiBvKE0pe2Zvcig7MDxNLmxlbmd0aDtNKyspTVswXT0wfWZ1bmN0aW9uIEkoTSxPLEQsRSxCKXtmb3IodmFyIG5l''@;'; put 'put ''LHNlLGhlLF9lLEY9RFswXSxOPURbMV0sSD1EWzJdLHo9RFszXSxaPU1bMF1eT1swXSxVPU1bMV1eT1sxXSxLPU1bMl1eT1syXSxYPU1bM11eT1szXSxtZT00LEZlPTE7RmU8QjtGZSsrKW5lPUZbWj4+PjI0XV5OW1U+Pj4xNiYyNTVdXkhbSz4+PjgmMjU1XV56WzI1NSZYXV5PW21lKytdLHNl''@;'; put 'put ''PUZbVT4+PjI0XV5OW0s+Pj4xNiYyNTVdXkhbWD4+PjgmMjU1XV56WzI1NSZaXV5PW21lKytdLGhlPUZbSz4+PjI0XV5OW1g+Pj4xNiYyNTVdXkhbWj4+PjgmMjU1XV56WzI1NSZVXV5PW21lKytdLF9lPUZbWD4+PjI0XV5OW1o+Pj4xNiYyNTVdXkhbVT4+PjgmMjU1XV56WzI1NSZLXV5PW21l''@;'; put 'put ''KytdLFo9bmUsVT1zZSxLPWhlLFg9X2U7cmV0dXJuIG5lPShFW1o+Pj4yNF08PDI0fEVbVT4+PjE2JjI1NV08PDE2fEVbSz4+PjgmMjU1XTw8OHxFWzI1NSZYXSleT1ttZSsrXSxzZT0oRVtVPj4+MjRdPDwyNHxFW0s+Pj4xNiYyNTVdPDwxNnxFW1g+Pj44JjI1NV08PDh8RVsyNTUmWl0pXk9b''@;'; put 'put ''bWUrK10saGU9KEVbSz4+PjI0XTw8MjR8RVtYPj4+MTYmMjU1XTw8MTZ8RVtaPj4+OCYyNTVdPDw4fEVbMjU1JlVdKV5PW21lKytdLF9lPShFW1g+Pj4yNF08PDI0fEVbWj4+PjE2JjI1NV08PDE2fEVbVT4+PjgmMjU1XTw8OHxFWzI1NSZLXSleT1ttZSsrXSxbbmU+Pj49MCxzZT4+Pj0wLGhl''@;'; put 'put ''Pj4+PTAsX2U+Pj49MF19dmFyIGY9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLFQ9ZnVuY3Rpb24oKXtmb3IodmFyIE09bmV3IEFycmF5KDI1NiksTz0wO088MjU2O08rKylNW09dPU88MTI4P088PDE6Tzw8MV4yODM7Zm9yKHZhciBEPVtdLEU9W10sQj1bW10sW10sW10sW11dLEY9''@;'; put 'put ''W1tdLFtdLFtdLFtdXSxOPTAsSD0wLHo9MDt6PDI1NjsrK3ope3ZhciBaPUheSDw8MV5IPDwyXkg8PDNeSDw8NDtEW05dPVo9Wj4+PjheMjU1JlpeOTksRVtaXT1OO3ZhciBVPU1bTl0sSz1NW1VdLFg9TVtLXSxuZT0yNTcqTVtaXV4xNjg0MzAwOCpaO0JbMF1bTl09bmU8PDI0fG5lPj4+OCxC''@;'; put 'put ''WzFdW05dPW5lPDwxNnxuZT4+PjE2LEJbMl1bTl09bmU8PDh8bmU+Pj4yNCxCWzNdW05dPW5lLEZbMF1bWl09KG5lPTE2ODQzMDA5KlheNjU1MzcqS14yNTcqVV4xNjg0MzAwOCpOKTw8MjR8bmU+Pj44LEZbMV1bWl09bmU8PDE2fG5lPj4+MTYsRlsyXVtaXT1uZTw8OHxuZT4+PjI0LEZbM11b''@;'; put 'put ''Wl09bmUsMD09PU4/Tj1IPTE6KE49VV5NW01bTVtYXlVdXV0sSF49TVtNW0hdXSl9cmV0dXJue1NCT1g6RCxJTlZfU0JPWDpFLFNVQl9NSVg6QixJTlZfU1VCX01JWDpGfX0oKTtmdW5jdGlvbiBBKE0pe3RoaXMuX2tleT1oKE0pLHRoaXMuX3Jlc2V0KCl9QS5ibG9ja1NpemU9MTYsQS5rZXlT''@;'; put 'put ''aXplPTMyLEEucHJvdG90eXBlLmJsb2NrU2l6ZT1BLmJsb2NrU2l6ZSxBLnByb3RvdHlwZS5rZXlTaXplPUEua2V5U2l6ZSxBLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIE09dGhpcy5fa2V5LE89TS5sZW5ndGgsRD1PKzYsRT00KihEKzEpLEI9W10sRj0wO0Y8TztGKysp''@;'; put 'put ''QltGXT1NW0ZdO2ZvcihGPU87RjxFO0YrKyl7dmFyIE49QltGLTFdO0YlTz09MD8oTj1ULlNCT1hbKE49Tjw8OHxOPj4+MjQpPj4+MjRdPDwyNHxULlNCT1hbTj4+PjE2JjI1NV08PDE2fFQuU0JPWFtOPj4+OCYyNTVdPDw4fFQuU0JPWFsyNTUmTl0sTl49ZltGL098MF08PDI0KTpPPjYmJkYl''@;'; put 'put ''Tz09NCYmKE49VC5TQk9YW04+Pj4yNF08PDI0fFQuU0JPWFtOPj4+MTYmMjU1XTw8MTZ8VC5TQk9YW04+Pj44JjI1NV08PDh8VC5TQk9YWzI1NSZOXSksQltGXT1CW0YtT11eTn1mb3IodmFyIEg9W10sej0wO3o8RTt6Kyspe3ZhciBaPUUteixVPUJbWi0oeiU0PzA6NCldO0hbel09ejw0fHxa''@;'; put 'put ''PD00P1U6VC5JTlZfU1VCX01JWFswXVtULlNCT1hbVT4+PjI0XV1eVC5JTlZfU1VCX01JWFsxXVtULlNCT1hbVT4+PjE2JjI1NV1dXlQuSU5WX1NVQl9NSVhbMl1bVC5TQk9YW1U+Pj44JjI1NV1dXlQuSU5WX1NVQl9NSVhbM11bVC5TQk9YWzI1NSZVXV19dGhpcy5fblJvdW5kcz1ELHRoaXMu''@;'; put 'put ''X2tleVNjaGVkdWxlPUIsdGhpcy5faW52S2V5U2NoZWR1bGU9SH0sQS5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKE0pe3JldHVybiBJKE09aChNKSx0aGlzLl9rZXlTY2hlZHVsZSxULlNVQl9NSVgsVC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxBLnByb3RvdHlwZS5lbmNyeXB0''@;'; put 'put ''QmxvY2s9ZnVuY3Rpb24oTSl7dmFyIE89dGhpcy5lbmNyeXB0QmxvY2tSYXcoTSksRD1TLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gRC53cml0ZVVJbnQzMkJFKE9bMF0sMCksRC53cml0ZVVJbnQzMkJFKE9bMV0sNCksRC53cml0ZVVJbnQzMkJFKE9bMl0sOCksRC53cml0ZVVJbnQzMkJFKE9b''@;'; put 'put ''M10sMTIpLER9LEEucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihNKXt2YXIgTz0oTT1oKE0pKVsxXTtNWzFdPU1bM10sTVszXT1PO3ZhciBEPUkoTSx0aGlzLl9pbnZLZXlTY2hlZHVsZSxULklOVl9TVUJfTUlYLFQuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksRT1TLmFsbG9jVW5z''@;'; put 'put ''YWZlKDE2KTtyZXR1cm4gRS53cml0ZVVJbnQzMkJFKERbMF0sMCksRS53cml0ZVVJbnQzMkJFKERbM10sNCksRS53cml0ZVVJbnQzMkJFKERbMl0sOCksRS53cml0ZVVJbnQzMkJFKERbMV0sMTIpLEV9LEEucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7byh0aGlzLl9rZXlTY2hlZHVsZSks''@;'; put 'put ''byh0aGlzLl9pbnZLZXlTY2hlZHVsZSksbyh0aGlzLl9rZXkpfSx0ZS5leHBvcnRzLkFFUz1BfSw0ODQ4Oih0ZSxqLGQpPT57dmFyIFM9ZCg0NDk3KSxoPWQoOTUwOSkuQnVmZmVyLG89ZCgxMDI3KSxJPWQoNTcxNyksZj1kKDMyODgpLFQ9ZCg3Mjk1KSxBPWQoNjg1KTtmdW5jdGlvbiBEKEUs''@;'; put 'put ''QixGLE4pe28uY2FsbCh0aGlzKTt2YXIgSD1oLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBTLkFFUyhCKTt2YXIgej10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEgpO3RoaXMuX2doYXNoPW5ldyBmKHopLEY9ZnVuY3Rpb24gTyhFLEIsRil7aWYoMTI9PT1CLmxlbmd0aClyZXR1cm4g''@;'; put 'put ''RS5fZmluSUQ9aC5jb25jYXQoW0IsaC5mcm9tKFswLDAsMCwxXSldKSxoLmNvbmNhdChbQixoLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBOPW5ldyBmKEYpLEg9Qi5sZW5ndGgsej1IJTE2O04udXBkYXRlKEIpLHomJk4udXBkYXRlKGguYWxsb2Moej0xNi16LDApKSxOLnVwZGF0ZShoLmFsbG9j''@;'; put 'put ''KDgsMCkpO3ZhciBaPTgqSCxVPWguYWxsb2MoOCk7VS53cml0ZVVJbnRCRShaLDAsOCksTi51cGRhdGUoVSksRS5fZmluSUQ9Ti5zdGF0ZTt2YXIgSz1oLmZyb20oRS5fZmluSUQpO3JldHVybiBBKEspLEt9KHRoaXMsRix6KSx0aGlzLl9wcmV2PWguZnJvbShGKSx0aGlzLl9jYWNoZT1oLmFs''@;'; put 'put ''bG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPWguYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1OLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPUUsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1JKEQsbyksRC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbihFKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgQj0xNi10aGlzLl9hbGVuJTE2O0I8MTYmJihCPWguYWxsb2MoQiwwKSx0aGlzLl9naGFzaC51cGRhdGUoQikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgRj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxFKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/RTpGKSx0aGlzLl9sZW4rPUUubGVuZ3RoLEZ9LEQucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxl''@;'; put 'put ''IHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIEU9VCh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBNKEUsQil7dmFyIEY9MDtFLmxlbmd0''@;'; put 'put ''aCE9PUIubGVuZ3RoJiZGKys7Zm9yKHZhciBOPU1hdGgubWluKEUubGVuZ3RoLEIubGVuZ3RoKSxIPTA7SDxOOysrSClGKz1FW0hdXkJbSF07cmV0dXJuIEZ9KEUsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGlj''@;'; put 'put ''YXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPUUsdGhpcy5fY2lwaGVyLnNjcnViKCl9LEQucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhaC5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1''@;'; put 'put ''dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LEQucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oQil7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBz''@;'; put 'put ''dGF0ZSIpO3RoaXMuX2F1dGhUYWc9Qn0sRC5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEIpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShCKSx0aGlzLl9hbGVu''@;'; put 'put ''Kz1CLmxlbmd0aH0sdGUuZXhwb3J0cz1EfSw0Njk2Oih0ZSxqLGQpPT57dmFyIFM9ZCgxNDk0KSxoPWQoNjE5Myksbz1kKDQ5NDYpO2ouY3JlYXRlQ2lwaGVyPWouQ2lwaGVyPVMuY3JlYXRlQ2lwaGVyLGouY3JlYXRlQ2lwaGVyaXY9ai5DaXBoZXJpdj1TLmNyZWF0ZUNpcGhlcml2LGouY3Jl''@;'; put 'put ''YXRlRGVjaXBoZXI9ai5EZWNpcGhlcj1oLmNyZWF0ZURlY2lwaGVyLGouY3JlYXRlRGVjaXBoZXJpdj1qLkRlY2lwaGVyaXY9aC5jcmVhdGVEZWNpcGhlcml2LGoubGlzdENpcGhlcnM9ai5nZXRDaXBoZXJzPWZ1bmN0aW9uIEkoKXtyZXR1cm4gT2JqZWN0LmtleXMobyl9fSw2MTkzOih0ZSxq''@;'; put 'put ''LGQpPT57dmFyIFM9ZCg0ODQ4KSxoPWQoOTUwOSkuQnVmZmVyLG89ZCg0NSksST1kKDU5NjkpLGY9ZCgxMDI3KSxUPWQoNDQ5NyksQT1kKDMwNDgpO2Z1bmN0aW9uIE8oTixILHope2YuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgRCx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9''@;'; put 'put ''bmV3IFQuQUVTKEgpLHRoaXMuX3ByZXY9aC5mcm9tKHopLHRoaXMuX21vZGU9Tix0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBEKCl7dGhpcy5jYWNoZT1oLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEIoTixILHope3ZhciBaPW9bTi50b0xvd2VyQ2FzZSgpXTtpZighWil0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIHomJih6PWguZnJvbSh6KSksIkdDTSIhPT1aLm1vZGUmJnoubGVuZ3RoIT09Wi5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3oubGVuZ3RoKTtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEgmJihIPWguZnJvbShIKSksSC5sZW5ndGghPT1aLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK0gubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVoudHlwZT9uZXcgSShaLm1vZHVsZSxILHosITApOiJhdXRoIj09PVoudHlwZT9uZXcg''@;'; put 'put ''UyhaLm1vZHVsZSxILHosITApOm5ldyBPKFoubW9kdWxlLEgseil9ZCg1NzE3KShPLGYpLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7dGhpcy5fY2FjaGUuYWRkKE4pO2Zvcih2YXIgSCx6LFo9W107SD10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyl6PXRoaXMu''@;'; put 'put ''X21vZGUuZGVjcnlwdCh0aGlzLEgpLFoucHVzaCh6KTtyZXR1cm4gaC5jb25jYXQoWil9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBOPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIEUoTil7dmFyIEg9TlsxNV07aWYo''@;'; put 'put ''SDwxfHxIPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgej0tMTsrK3o8SDspaWYoTlt6KygxNi1IKV0hPT1IKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09SClyZXR1cm4gTi5zbGljZSgwLDE2LUgp''@;'; put 'put ''fSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxOKSk7aWYoTil0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxPLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFOLHRoaXN9LEQu''@;'; put 'put ''cHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXt0aGlzLmNhY2hlPWguY29uY2F0KFt0aGlzLmNhY2hlLE5dKX0sRC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKE4pe3ZhciBIO2lmKE4pe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBIPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5j''@;'; put 'put ''YWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxIfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBIPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxIO3JldHVybiBudWxsfSxELnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigp''@;'; put 'put ''e2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxqLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIEYoTixIKXt2YXIgej1vW04udG9Mb3dlckNhc2UoKV07aWYoIXopdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFo9QShILCExLHoua2V5''@;'; put 'put ''LHouaXYpO3JldHVybiBCKE4sWi5rZXksWi5pdil9LGouY3JlYXRlRGVjaXBoZXJpdj1CfSwxNDk0Oih0ZSxqLGQpPT57dmFyIFM9ZCg0NSksaD1kKDQ4NDgpLG89ZCg5NTA5KS5CdWZmZXIsST1kKDU5NjkpLGY9ZCgxMDI3KSxUPWQoNDQ5NyksQT1kKDMwNDgpO2Z1bmN0aW9uIE8oTixILHop''@;'; put 'put ''e2YuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgRSx0aGlzLl9jaXBoZXI9bmV3IFQuQUVTKEgpLHRoaXMuX3ByZXY9by5mcm9tKHopLHRoaXMuX21vZGU9Tix0aGlzLl9hdXRvcGFkZGluZz0hMH1kKDU3MTcpKE8sZiksTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlzLl9j''@;'; put 'put ''YWNoZS5hZGQoTik7Zm9yKHZhciBILHosWj1bXTtIPXRoaXMuX2NhY2hlLmdldCgpOyl6PXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEgpLFoucHVzaCh6KTtyZXR1cm4gby5jb25jYXQoWil9O3ZhciBEPW8uYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIEUoKXt0aGlzLmNhY2hlPW8uYWxsb2NVbnNh''@;'; put 'put ''ZmUoMCl9ZnVuY3Rpb24gQihOLEgseil7dmFyIFo9U1tOLnRvTG93ZXJDYXNlKCldO2lmKCFaKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgSCYmKEg9by5mcm9tKEgpKSxILmxlbmd0aCE9PVoua2V5LzgpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrSC5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgeiYmKHo9by5mcm9tKHopKSwiR0NNIiE9PVoubW9kZSYmei5sZW5ndGghPT1aLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrei5sZW5ndGgpO3JldHVy''@;'; put 'put ''biJzdHJlYW0iPT09Wi50eXBlP25ldyBJKFoubW9kdWxlLEgseik6ImF1dGgiPT09Wi50eXBlP25ldyBoKFoubW9kdWxlLEgseik6bmV3IE8oWi5tb2R1bGUsSCx6KX1PLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9w''@;'; put 'put ''YWRkaW5nKXJldHVybiBOPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE4pLHRoaXMuX2NpcGhlci5zY3J1YigpLE47aWYoIU4uZXF1YWxzKEQpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LE8ucHJvdG90''@;'; put 'put ''eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIU4sdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe3RoaXMuY2FjaGU9by5jb25jYXQoW3RoaXMuY2FjaGUsTl0pfSxFLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlz''@;'; put 'put ''LmNhY2hlLmxlbmd0aD4xNSl7dmFyIE49dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxOfXJldHVybiBudWxsfSxFLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgTj0xNi10aGlzLmNhY2hlLmxlbmd0aCxIPW8u''@;'; put 'put ''YWxsb2NVbnNhZmUoTiksej0tMTsrK3o8TjspSC53cml0ZVVJbnQ4KE4seik7cmV0dXJuIG8uY29uY2F0KFt0aGlzLmNhY2hlLEhdKX0sai5jcmVhdGVDaXBoZXJpdj1CLGouY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uIEYoTixIKXt2YXIgej1TW04udG9Mb3dlckNhc2UoKV07aWYoIXopdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFo9QShILCExLHoua2V5LHouaXYpO3JldHVybiBCKE4sWi5rZXksWi5pdil9fSwzMjg4Oih0ZSxqLGQpPT57dmFyIFM9ZCg5NTA5KS5CdWZmZXIsaD1TLmFsbG9jKDE2LDApO2Z1bmN0aW9uIEkoVCl7dmFyIEE9Uy5hbGxv''@;'; put 'put ''Y1Vuc2FmZSgxNik7cmV0dXJuIEEud3JpdGVVSW50MzJCRShUWzBdPj4+MCwwKSxBLndyaXRlVUludDMyQkUoVFsxXT4+PjAsNCksQS53cml0ZVVJbnQzMkJFKFRbMl0+Pj4wLDgpLEEud3JpdGVVSW50MzJCRShUWzNdPj4+MCwxMiksQX1mdW5jdGlvbiBmKFQpe3RoaXMuaD1ULHRoaXMuc3Rh''@;'; put 'put ''dGU9Uy5hbGxvYygxNiwwKSx0aGlzLmNhY2hlPVMuYWxsb2NVbnNhZmUoMCl9Zi5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oVCl7Zm9yKHZhciBBPS0xOysrQTxULmxlbmd0aDspdGhpcy5zdGF0ZVtBXV49VFtBXTt0aGlzLl9tdWx0aXBseSgpfSxmLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIE0sRCxUPWZ1bmN0aW9uIG8oVCl7cmV0dXJuW1QucmVhZFVJbnQzMkJFKDApLFQucmVhZFVJbnQzMkJFKDQpLFQucmVhZFVJbnQzMkJFKDgpLFQucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksQT1bMCwwLDAsMF0sRT0tMTsrK0U8MTI4Oyl7Zm9yKCEhKHRoaXMu''@;'; put 'put ''c3RhdGVbfn4oRS84KV0mMTw8Ny1FJTgpJiYoQVswXV49VFswXSxBWzFdXj1UWzFdLEFbMl1ePVRbMl0sQVszXV49VFszXSksRD0hISgxJlRbM10pLE09MztNPjA7TS0tKVRbTV09VFtNXT4+PjF8KDEmVFtNLTFdKTw8MzE7VFswXT1UWzBdPj4+MSxEJiYoVFswXT0tNTIwMDkzNjk2XlRbMF0p''@;'; put 'put ''fXRoaXMuc3RhdGU9SShBKX0sZi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFQpe3RoaXMuY2FjaGU9Uy5jb25jYXQoW3RoaXMuY2FjaGUsVF0pO2Zvcih2YXIgQTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KUE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUu''@;'; put 'put ''c2xpY2UoMTYpLHRoaXMuZ2hhc2goQSl9LGYucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKFQsQSl7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKFMuY29uY2F0KFt0aGlzLmNhY2hlLGhdLDE2KSksdGhpcy5naGFzaChJKFswLFQsMCxBXSkpLHRoaXMuc3RhdGV9LHRlLmV4''@;'; put 'put ''cG9ydHM9Zn0sNjg1OnRlPT57dGUuZXhwb3J0cz1mdW5jdGlvbiBqKGQpe2Zvcih2YXIgaCxTPWQubGVuZ3RoO1MtLTspe2lmKDI1NSE9PShoPWQucmVhZFVJbnQ4KFMpKSl7aCsrLGQud3JpdGVVSW50OChoLFMpO2JyZWFrfWQud3JpdGVVSW50OCgwLFMpfX19LDUyOTI6KHRlLGosZCk9Pnt2''@;'; put 'put ''YXIgUz1kKDcyOTUpO2ouZW5jcnlwdD1mdW5jdGlvbihoLG8pe3ZhciBJPVMobyxoLl9wcmV2KTtyZXR1cm4gaC5fcHJldj1oLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEkpLGguX3ByZXZ9LGouZGVjcnlwdD1mdW5jdGlvbihoLG8pe3ZhciBJPWguX3ByZXY7aC5fcHJldj1vO3ZhciBmPWguX2Np''@;'; put 'put ''cGhlci5kZWNyeXB0QmxvY2sobyk7cmV0dXJuIFMoZixJKX19LDYzMTE6KHRlLGosZCk9Pnt2YXIgUz1kKDk1MDkpLkJ1ZmZlcixoPWQoNzI5NSk7ZnVuY3Rpb24gbyhJLGYsVCl7dmFyIEE9Zi5sZW5ndGgsTT1oKGYsSS5fY2FjaGUpO3JldHVybiBJLl9jYWNoZT1JLl9jYWNoZS5zbGljZShB''@;'; put 'put ''KSxJLl9wcmV2PVMuY29uY2F0KFtJLl9wcmV2LFQ/ZjpNXSksTX1qLmVuY3J5cHQ9ZnVuY3Rpb24oSSxmLFQpe2Zvcih2YXIgTSxBPVMuYWxsb2NVbnNhZmUoMCk7Zi5sZW5ndGg7KXtpZigwPT09SS5fY2FjaGUubGVuZ3RoJiYoSS5fY2FjaGU9SS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJLl9w''@;'; put 'put ''cmV2KSxJLl9wcmV2PVMuYWxsb2NVbnNhZmUoMCkpLCEoSS5fY2FjaGUubGVuZ3RoPD1mLmxlbmd0aCkpe0E9Uy5jb25jYXQoW0EsbyhJLGYsVCldKTticmVha31BPVMuY29uY2F0KFtBLG8oSSxmLnNsaWNlKDAsTT1JLl9jYWNoZS5sZW5ndGgpLFQpXSksZj1mLnNsaWNlKE0pfXJldHVybiBB''@;'; put 'put ''fX0sMTUxMDoodGUsaixkKT0+e3ZhciBTPWQoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGgoSSxmLFQpe2Zvcih2YXIgRSxCLE09LTEsRD0wOysrTTw4OylEKz0oMTI4JihCPUkuX2NpcGhlci5lbmNyeXB0QmxvY2soSS5fcHJldilbMF1eKEU9ZiYxPDw3LU0/MTI4OjApKSk+Pk0lOCxJLl9wcmV2''@;'; put 'put ''PW8oSS5fcHJldixUP0U6Qik7cmV0dXJuIER9ZnVuY3Rpb24gbyhJLGYpe3ZhciBUPUkubGVuZ3RoLEE9LTEsTT1TLmFsbG9jVW5zYWZlKEkubGVuZ3RoKTtmb3IoST1TLmNvbmNhdChbSSxTLmZyb20oW2ZdKV0pOysrQTxUOylNW0FdPUlbQV08PDF8SVtBKzFdPj43O3JldHVybiBNfWouZW5j''@;'; put 'put ''cnlwdD1mdW5jdGlvbihJLGYsVCl7Zm9yKHZhciBBPWYubGVuZ3RoLE09Uy5hbGxvY1Vuc2FmZShBKSxPPS0xOysrTzxBOylNW09dPWgoSSxmW09dLFQpO3JldHVybiBNfX0sMTk2NDoodGUsaixkKT0+e3ZhciBTPWQoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGgobyxJLGYpe3ZhciBBPW8uX2Np''@;'; put 'put ''cGhlci5lbmNyeXB0QmxvY2soby5fcHJldilbMF1eSTtyZXR1cm4gby5fcHJldj1TLmNvbmNhdChbby5fcHJldi5zbGljZSgxKSxTLmZyb20oW2Y/STpBXSldKSxBfWouZW5jcnlwdD1mdW5jdGlvbihvLEksZil7Zm9yKHZhciBUPUkubGVuZ3RoLEE9Uy5hbGxvY1Vuc2FmZShUKSxNPS0xOysr''@;'; put 'put ''TTxUOylBW01dPWgobyxJW01dLGYpO3JldHVybiBBfX0sNjAwOToodGUsaixkKT0+e3ZhciBTPWQoNzI5NSksaD1kKDk1MDkpLkJ1ZmZlcixvPWQoNjg1KTtmdW5jdGlvbiBJKFQpe3ZhciBBPVQuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoVC5fcHJldik7cmV0dXJuIG8oVC5fcHJldiksQX1q''@;'; put 'put ''LmVuY3J5cHQ9ZnVuY3Rpb24oVCxBKXt2YXIgTT1NYXRoLmNlaWwoQS5sZW5ndGgvMTYpLE89VC5fY2FjaGUubGVuZ3RoO1QuX2NhY2hlPWguY29uY2F0KFtULl9jYWNoZSxoLmFsbG9jVW5zYWZlKDE2Kk0pXSk7Zm9yKHZhciBEPTA7RDxNO0QrKyl7dmFyIEU9SShUKSxCPU8rMTYqRDtULl9j''@;'; put 'put ''YWNoZS53cml0ZVVJbnQzMkJFKEVbMF0sQiswKSxULl9jYWNoZS53cml0ZVVJbnQzMkJFKEVbMV0sQis0KSxULl9jYWNoZS53cml0ZVVJbnQzMkJFKEVbMl0sQis4KSxULl9jYWNoZS53cml0ZVVJbnQzMkJFKEVbM10sQisxMil9dmFyIEY9VC5fY2FjaGUuc2xpY2UoMCxBLmxlbmd0aCk7cmV0''@;'; put 'put ''dXJuIFQuX2NhY2hlPVQuX2NhY2hlLnNsaWNlKEEubGVuZ3RoKSxTKEEsRil9fSwxMDg0Oih0ZSxqKT0+e2ouZW5jcnlwdD1mdW5jdGlvbihkLFMpe3JldHVybiBkLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFMpfSxqLmRlY3J5cHQ9ZnVuY3Rpb24oZCxTKXtyZXR1cm4gZC5fY2lwaGVyLmRlY3J5''@;'; put 'put ''cHRCbG9jayhTKX19LDQ1Oih0ZSxqLGQpPT57dmFyIFM9e0VDQjpkKDEwODQpLENCQzpkKDUyOTIpLENGQjpkKDYzMTEpLENGQjg6ZCgxOTY0KSxDRkIxOmQoMTUxMCksT0ZCOmQoODg2MSksQ1RSOmQoNjAwOSksR0NNOmQoNjAwOSl9LGg9ZCg0OTQ2KTtmb3IodmFyIG8gaW4gaCloW29dLm1v''@;'; put 'put ''ZHVsZT1TW2hbb10ubW9kZV07dGUuZXhwb3J0cz1ofSw4ODYxOih0ZSxqLGQpPT57dmFyIFM9ZCg4NzY0KS5CdWZmZXIsaD1kKDcyOTUpO2Z1bmN0aW9uIG8oSSl7cmV0dXJuIEkuX3ByZXY9SS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJLl9wcmV2KSxJLl9wcmV2fWouZW5jcnlwdD1mdW5jdGlv''@;'; put 'put ''bihJLGYpe2Zvcig7SS5fY2FjaGUubGVuZ3RoPGYubGVuZ3RoOylJLl9jYWNoZT1TLmNvbmNhdChbSS5fY2FjaGUsbyhJKV0pO3ZhciBUPUkuX2NhY2hlLnNsaWNlKDAsZi5sZW5ndGgpO3JldHVybiBJLl9jYWNoZT1JLl9jYWNoZS5zbGljZShmLmxlbmd0aCksaChmLFQpfX0sNTk2OToodGUs''@;'; put 'put ''aixkKT0+e3ZhciBTPWQoNDQ5NyksaD1kKDk1MDkpLkJ1ZmZlcixvPWQoMTAyNyk7ZnVuY3Rpb24gZihULEEsTSxPKXtvLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBTLkFFUyhBKSx0aGlzLl9wcmV2PWguZnJvbShNKSx0aGlzLl9jYWNoZT1oLmFsbG9jVW5zYWZlKDApLHRoaXMuX3Nl''@;'; put 'put ''Y0NhY2hlPWguYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1PLHRoaXMuX21vZGU9VH1kKDU3MTcpKGYsbyksZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihUKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVCx0aGlzLl9kZWNyeXB0KX0sZi5wcm90b3R5cGUuX2ZpbmFs''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LHRlLmV4cG9ydHM9Zn0sMzYxNDoodGUsaixkKT0+e3ZhciBTPWQoNzY2NyksaD1kKDQ2OTYpLG89ZCg0NSksST1kKDk3MTUpLGY9ZCgzMDQ4KTtmdW5jdGlvbiBNKEUsQixGKXtpZihFPUUudG9Mb3dlckNhc2UoKSxvW0VdKXJldHVy''@;'; put 'put ''biBoLmNyZWF0ZUNpcGhlcml2KEUsQixGKTtpZihJW0VdKXJldHVybiBuZXcgUyh7a2V5OkIsaXY6Rixtb2RlOkV9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiBPKEUsQixGKXtpZihFPUUudG9Mb3dlckNhc2UoKSxvW0VdKXJldHVybiBoLmNy''@;'; put 'put ''ZWF0ZURlY2lwaGVyaXYoRSxCLEYpO2lmKElbRV0pcmV0dXJuIG5ldyBTKHtrZXk6QixpdjpGLG1vZGU6RSxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ai5jcmVhdGVDaXBoZXI9ai5DaXBoZXI9ZnVuY3Rpb24gVChFLEIpe3ZhciBGLE47''@;'; put 'put ''aWYoRT1FLnRvTG93ZXJDYXNlKCksb1tFXSlGPW9bRV0ua2V5LE49b1tFXS5pdjtlbHNle2lmKCFJW0VdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO0Y9OCpJW0VdLmtleSxOPUlbRV0uaXZ9dmFyIEg9ZihCLCExLEYsTik7cmV0dXJuIE0oRSxILmtleSxILml2''@;'; put 'put ''KX0sai5jcmVhdGVDaXBoZXJpdj1qLkNpcGhlcml2PU0sai5jcmVhdGVEZWNpcGhlcj1qLkRlY2lwaGVyPWZ1bmN0aW9uIEEoRSxCKXt2YXIgRixOO2lmKEU9RS50b0xvd2VyQ2FzZSgpLG9bRV0pRj1vW0VdLmtleSxOPW9bRV0uaXY7ZWxzZXtpZighSVtFXSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtGPTgqSVtFXS5rZXksTj1JW0VdLml2fXZhciBIPWYoQiwhMSxGLE4pO3JldHVybiBPKEUsSC5rZXksSC5pdil9LGouY3JlYXRlRGVjaXBoZXJpdj1qLkRlY2lwaGVyaXY9TyxqLmxpc3RDaXBoZXJzPWouZ2V0Q2lwaGVycz1mdW5jdGlvbiBEKCl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5rZXlzKEkpLmNvbmNhdChoLmdldENpcGhlcnMoKSl9fSw3NjY3Oih0ZSxqLGQpPT57dmFyIFM9ZCgxMDI3KSxoPWQoNTI1MSksbz1kKDU3MTcpLEk9ZCg5NTA5KS5CdWZmZXIsZj17ImRlcy1lZGUzLWNiYyI6aC5DQkMuaW5zdGFudGlhdGUoaC5FREUpLCJkZXMtZWRlMyI6''@;'; put 'put ''aC5FREUsImRlcy1lZGUtY2JjIjpoLkNCQy5pbnN0YW50aWF0ZShoLkVERSksImRlcy1lZGUiOmguRURFLCJkZXMtY2JjIjpoLkNCQy5pbnN0YW50aWF0ZShoLkRFUyksImRlcy1lY2IiOmguREVTfTtmdW5jdGlvbiBUKEEpe1MuY2FsbCh0aGlzKTt2YXIgRCxNPUEubW9kZS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpLE89ZltNXTtEPUEuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBFPUEua2V5O0kuaXNCdWZmZXIoRSl8fChFPUkuZnJvbShFKSksKCJkZXMtZWRlIj09PU18fCJkZXMtZWRlLWNiYyI9PT1NKSYmKEU9SS5jb25jYXQoW0UsRS5zbGljZSgwLDgpXSkpO3ZhciBCPUEuaXY7SS5p''@;'; put 'put ''c0J1ZmZlcihCKXx8KEI9SS5mcm9tKEIpKSx0aGlzLl9kZXM9Ty5jcmVhdGUoe2tleTpFLGl2OkIsdHlwZTpEfSl9Zi5kZXM9ZlsiZGVzLWNiYyJdLGYuZGVzMz1mWyJkZXMtZWRlMy1jYmMiXSx0ZS5leHBvcnRzPVQsbyhULFMpLFQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQSl7cmV0''@;'; put 'put ''dXJuIEkuZnJvbSh0aGlzLl9kZXMudXBkYXRlKEEpKX0sVC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIEkuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSw5NzE1Oih0ZSxqKT0+e2pbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0salsiZGVzLWNiYyJdPWouZGVzPXtrZXk6OCxp''@;'; put 'put ''djo4fSxqWyJkZXMtZWRlMy1jYmMiXT1qLmRlczM9e2tleToyNCxpdjo4fSxqWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0salsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LGpbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwzNjYzOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBT''@;'; put 'put ''PWQoMzU1MCksaD1kKDE3OTgpLG89ZCg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSShBKXt2YXIgTyxNPUEubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97Tz1uZXcgUyhoKE0pKX13aGlsZShPLmNtcChBLm1vZHVsdXMpPj0wfHwhTy51bW9kKEEucHJpbWUxKXx8IU8udW1vZChBLnByaW1lMikpO3Jl''@;'; put 'put ''dHVybiBPfWZ1bmN0aW9uIFQoQSxNKXt2YXIgTz1mdW5jdGlvbiBmKEEpe3ZhciBNPUkoQSk7cmV0dXJue2JsaW5kZXI6TS50b1JlZChTLm1vbnQoQS5tb2R1bHVzKSkucmVkUG93KG5ldyBTKEEucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOk0uaW52bShBLm1vZHVsdXMp''@;'; put 'put ''fX0oTSksRD1NLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEU9bmV3IFMoQSkubXVsKE8uYmxpbmRlcikudW1vZChNLm1vZHVsdXMpLEI9RS50b1JlZChTLm1vbnQoTS5wcmltZTEpKSxGPUUudG9SZWQoUy5tb250KE0ucHJpbWUyKSksTj1NLmNvZWZmaWNpZW50LEg9TS5wcmltZTEsej1NLnByaW1l''@;'; put 'put ''MixaPUIucmVkUG93KE0uZXhwb25lbnQxKS5mcm9tUmVkKCksVT1GLnJlZFBvdyhNLmV4cG9uZW50MikuZnJvbVJlZCgpLEs9Wi5pc3ViKFUpLmltdWwoTikudW1vZChIKS5pbXVsKHopO3JldHVybiBVLmlhZGQoSykuaW11bChPLnVuYmxpbmRlcikudW1vZChNLm1vZHVsdXMpLnRvQXJyYXlM''@;'; put 'put ''aWtlKG8sImJlIixEKX1ULmdldHI9SSx0ZS5leHBvcnRzPVR9LDYwNDI6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1kKDUyMDcpfSw0NzQzOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoOTUwOSkuQnVmZmVyLGg9ZCgzNDgyKSxvPWQoMzg3MiksST1kKDU3MTcp''@;'; put 'put ''LGY9ZCgyOTU3KSxUPWQoNzc1MyksQT1kKDUyMDcpO2Z1bmN0aW9uIE0oQil7by5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBGPUFbQl07aWYoIUYpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9Ri5oYXNoLHRoaXMuX2hhc2g9aChGLmhh''@;'; put 'put ''c2gpLHRoaXMuX3RhZz1GLmlkLHRoaXMuX3NpZ25UeXBlPUYuc2lnbn1mdW5jdGlvbiBPKEIpe28uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgRj1BW0JdO2lmKCFGKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9aChGLmhhc2gpLHRoaXMuX3Rh''@;'; put 'put ''Zz1GLmlkLHRoaXMuX3NpZ25UeXBlPUYuc2lnbn1mdW5jdGlvbiBEKEIpe3JldHVybiBuZXcgTShCKX1mdW5jdGlvbiBFKEIpe3JldHVybiBuZXcgTyhCKX1PYmplY3Qua2V5cyhBKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0FbQl0uaWQ9Uy5mcm9tKEFbQl0uaWQsImhleCIpLEFbQi50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpXT1BW0JdfSksSShNLG8uV3JpdGFibGUpLE0ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLE4sSCl7dGhpcy5faGFzaC51cGRhdGUoRiksSCgpfSxNLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRixOKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBGP1MuZnJvbShGLE4pOkYpLHRoaXN9LE0ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRixOKXt0aGlzLmVuZCgpO3ZhciBIPXRoaXMuX2hhc2guZGlnZXN0KCksej1mKEgsRix0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBOP3oudG9TdHJpbmcoTik6''@;'; put 'put ''en0sSShPLG8uV3JpdGFibGUpLE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLE4sSCl7dGhpcy5faGFzaC51cGRhdGUoRiksSCgpfSxPLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRixOKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBGP1MuZnJvbShG''@;'; put 'put ''LE4pOkYpLHRoaXN9LE8ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihGLE4sSCl7dmFyIHo9InN0cmluZyI9PXR5cGVvZiBOP1MuZnJvbShOLEgpOk47dGhpcy5lbmQoKTt2YXIgWj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBUKHosWixGLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9''@;'; put 'put ''LHRlLmV4cG9ydHM9e1NpZ246RCxWZXJpZnk6RSxjcmVhdGVTaWduOkQsY3JlYXRlVmVyaWZ5OkV9fSwyOTU3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoOTUwOSkuQnVmZmVyLGg9ZCg4MzU1KSxvPWQoMzY2MyksST1kKDY5NDgpLmVjLGY9ZCgzNTUwKSxUPWQoOTgwKSxBPWQo''@;'; put 'put ''MTMwOCk7ZnVuY3Rpb24gRihVLEssWCxuZSl7aWYoKFU9Uy5mcm9tKFUudG9BcnJheSgpKSkubGVuZ3RoPEsuYnl0ZUxlbmd0aCgpKXt2YXIgc2U9Uy5hbGxvYyhLLmJ5dGVMZW5ndGgoKS1VLmxlbmd0aCk7VT1TLmNvbmNhdChbc2UsVV0pfXZhciBoZT1YLmxlbmd0aCxfZT1mdW5jdGlvbiBI''@;'; put 'put ''KFUsSyl7VT0oVT1OKFUsSykpLm1vZChLKTt2YXIgWD1TLmZyb20oVS50b0FycmF5KCkpO2lmKFgubGVuZ3RoPEsuYnl0ZUxlbmd0aCgpKXt2YXIgbmU9Uy5hbGxvYyhLLmJ5dGVMZW5ndGgoKS1YLmxlbmd0aCk7WD1TLmNvbmNhdChbbmUsWF0pfXJldHVybiBYfShYLEspLG1lPVMuYWxsb2Mo''@;'; put 'put ''aGUpO21lLmZpbGwoMSk7dmFyIEZlPVMuYWxsb2MoaGUpO3JldHVybiBGZT1oKG5lLEZlKS51cGRhdGUobWUpLnVwZGF0ZShTLmZyb20oWzBdKSkudXBkYXRlKFUpLnVwZGF0ZShfZSkuZGlnZXN0KCksbWU9aChuZSxGZSkudXBkYXRlKG1lKS5kaWdlc3QoKSx7azpGZT1oKG5lLEZlKS51cGRh''@;'; put 'put ''dGUobWUpLnVwZGF0ZShTLmZyb20oWzFdKSkudXBkYXRlKFUpLnVwZGF0ZShfZSkuZGlnZXN0KCksdjptZT1oKG5lLEZlKS51cGRhdGUobWUpLmRpZ2VzdCgpfX1mdW5jdGlvbiBOKFUsSyl7dmFyIFg9bmV3IGYoVSksbmU9KFUubGVuZ3RoPDwzKS1LLmJpdExlbmd0aCgpO3JldHVybiBuZT4w''@;'; put 'put ''JiZYLmlzaHJuKG5lKSxYfWZ1bmN0aW9uIHooVSxLLFgpe3ZhciBuZSxzZTtkb3tmb3IobmU9Uy5hbGxvYygwKTs4Km5lLmxlbmd0aDxVLmJpdExlbmd0aCgpOylLLnY9aChYLEsuaykudXBkYXRlKEsudikuZGlnZXN0KCksbmU9Uy5jb25jYXQoW25lLEsudl0pO3NlPU4obmUsVSksSy5rPWgo''@;'; put 'put ''WCxLLmspLnVwZGF0ZShLLnYpLnVwZGF0ZShTLmZyb20oWzBdKSkuZGlnZXN0KCksSy52PWgoWCxLLmspLnVwZGF0ZShLLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09c2UuY21wKFUpKTtyZXR1cm4gc2V9ZnVuY3Rpb24gWihVLEssWCxuZSl7cmV0dXJuIFUudG9SZWQoZi5tb250KFgpKS5yZWRQ''@;'; put 'put ''b3coSykuZnJvbVJlZCgpLm1vZChuZSl9dGUuZXhwb3J0cz1mdW5jdGlvbiBPKFUsSyxYLG5lLHNlKXt2YXIgaGU9VChLKTtpZihoZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PW5lJiYiZWNkc2EvcnNhIiE9PW5lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbiBEKFUsSyl7dmFyIFg9QVtLLmN1cnZlLmpvaW4oIi4iKV07aWYoIVgpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrSy5jdXJ2ZS5qb2luKCIuIikpO3ZhciBoZT1uZXcgSShYKS5rZXlGcm9tUHJpdmF0ZShLLnByaXZhdGVLZXkpLnNpZ24oVSk7cmV0dXJuIFMu''@;'; put 'put ''ZnJvbShoZS50b0RFUigpKX0oVSxoZSl9aWYoImRzYSI9PT1oZS50eXBlKXtpZigiZHNhIiE9PW5lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBFKFUsSyxYKXtmb3IodmFyIEZlLG5lPUsucGFyYW1zLnByaXZfa2V5LHNlPUsucGFy''@;'; put 'put ''YW1zLnAsaGU9Sy5wYXJhbXMucSxfZT1LLnBhcmFtcy5nLG1lPW5ldyBmKDApLFI9TihVLGhlKS5tb2QoaGUpLHM9ITEsdT1GKG5lLGhlLFUsWCk7ITE9PT1zOyltZT1aKF9lLEZlPXooaGUsdSxYKSxzZSxoZSksMD09PShzPUZlLmludm0oaGUpLmltdWwoUi5hZGQobmUubXVsKG1lKSkpLm1v''@;'; put 'put ''ZChoZSkpLmNtcG4oMCkmJihzPSExLG1lPW5ldyBmKDApKTtyZXR1cm4gZnVuY3Rpb24gQihVLEspe1U9VS50b0FycmF5KCksSz1LLnRvQXJyYXkoKSwxMjgmVVswXSYmKFU9WzBdLmNvbmNhdChVKSksMTI4JktbMF0mJihLPVswXS5jb25jYXQoSykpO3ZhciBuZT1bNDgsVS5sZW5ndGgrSy5s''@;'; put 'put ''ZW5ndGgrNCwyLFUubGVuZ3RoXTtyZXR1cm4gbmU9bmUuY29uY2F0KFUsWzIsSy5sZW5ndGhdLEspLFMuZnJvbShuZSl9KG1lLHMpfShVLGhlLFgpfWlmKCJyc2EiIT09bmUmJiJlY2RzYS9yc2EiIT09bmUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9p''@;'; put 'put ''ZCAwIT09Sy5wYWRkaW5nJiYxIT09Sy5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtVPVMuY29uY2F0KFtzZSxVXSk7Zm9yKHZhciBfZT1oZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxtZT1bMCwxXTtVLmxlbmd0aCttZS5sZW5n''@;'; put 'put ''dGgrMTxfZTspbWUucHVzaCgyNTUpO21lLnB1c2goMCk7Zm9yKHZhciBGZT0tMTsrK0ZlPFUubGVuZ3RoOyltZS5wdXNoKFVbRmVdKTtyZXR1cm4gbyhtZSxoZSl9LHRlLmV4cG9ydHMuZ2V0S2V5PUYsdGUuZXhwb3J0cy5tYWtlS2V5PXp9LDc3NTM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIFM9ZCg5NTA5KS5CdWZmZXIsaD1kKDM1NTApLG89ZCg2OTQ4KS5lYyxJPWQoOTgwKSxmPWQoMTMwOCk7ZnVuY3Rpb24gTyhELEUpe2lmKEQuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoRC5jbXAoRSk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlk''@;'; put 'put ''IHNpZyIpfXRlLmV4cG9ydHM9ZnVuY3Rpb24gVChELEUsQixGLE4pe3ZhciBIPUkoQik7aWYoImVjIj09PUgudHlwZSl7aWYoImVjZHNhIiE9PUYmJiJlY2RzYS9yc2EiIT09Ril0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBBKEQsRSxC''@;'; put 'put ''KXt2YXIgRj1mW0IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighRil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitCLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBvKEYpLnZlcmlmeShFLEQsQi5kYXRhLnN1YmplY3RQcml2YXRl''@;'; put 'put ''S2V5LmRhdGEpfShELEUsSCl9aWYoImRzYSI9PT1ILnR5cGUpe2lmKCJkc2EiIT09Ril0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBNKEQsRSxCKXt2YXIgRj1CLmRhdGEucCxOPUIuZGF0YS5xLEg9Qi5kYXRhLmcsej1CLmRhdGEucHVi''@;'; put 'put ''X2tleSxaPUkuc2lnbmF0dXJlLmRlY29kZShELCJkZXIiKSxVPVoucyxLPVoucjtPKFUsTiksTyhLLE4pO3ZhciBYPWgubW9udChGKSxuZT1VLmludm0oTik7cmV0dXJuIDA9PT1ILnRvUmVkKFgpLnJlZFBvdyhuZXcgaChFKS5tdWwobmUpLm1vZChOKSkuZnJvbVJlZCgpLm11bCh6LnRvUmVk''@;'; put 'put ''KFgpLnJlZFBvdyhLLm11bChuZSkubW9kKE4pKS5mcm9tUmVkKCkpLm1vZChGKS5tb2QoTikuY21wKEspfShELEUsSCl9aWYoInJzYSIhPT1GJiYiZWNkc2EvcnNhIiE9PUYpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtFPVMuY29uY2F0KFtOLEVdKTtmb3IodmFy''@;'; put 'put ''IHo9SC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxaPVsxXSxVPTA7RS5sZW5ndGgrWi5sZW5ndGgrMjx6OylaLnB1c2goMjU1KSxVKz0xO1oucHVzaCgwKTtmb3IodmFyIEs9LTE7KytLPEUubGVuZ3RoOylaLnB1c2goRVtLXSk7Wj1TLmZyb20oWik7dmFyIFg9aC5tb250KEgubW9kdWx1cyk7RD0o''@;'; put 'put ''RD1uZXcgaChEKS50b1JlZChYKSkucmVkUG93KG5ldyBoKEgucHVibGljRXhwb25lbnQpKSxEPVMuZnJvbShELmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciBuZT1VPDg/MTowO2Zvcih6PU1hdGgubWluKEQubGVuZ3RoLFoubGVuZ3RoKSxELmxlbmd0aCE9PVoubGVuZ3RoJiYobmU9MSksSz0t''@;'; put 'put ''MTsrK0s8ejspbmV8PURbS11eWltLXTtyZXR1cm4gMD09PW5lfX0sNDM5MDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDgyMTIpLGg9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEIpe3ZhciBGPVtdO2Zvcih2YXIgTiBpbiBCKUYucHVzaChOKTtyZXR1cm4gRn07dGUuZXhwb3J0cz1P''@;'; put 'put ''O3ZhciBvPU9iamVjdC5jcmVhdGUoZCg2NDk3KSk7by5pbmhlcml0cz1kKDU3MTcpO3ZhciBJPWQoNDk2MCksZj1kKDIwMTApO28uaW5oZXJpdHMoTyxJKTtmb3IodmFyIFQ9aChmLnByb3RvdHlwZSksQT0wO0E8VC5sZW5ndGg7QSsrKXt2YXIgTT1UW0FdO08ucHJvdG90eXBlW01dfHwoTy5w''@;'; put 'put ''cm90b3R5cGVbTV09Zi5wcm90b3R5cGVbTV0pfWZ1bmN0aW9uIE8oQil7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEIpO0kuY2FsbCh0aGlzLEIpLGYuY2FsbCh0aGlzLEIpLEImJiExPT09Qi5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLEImJiExPT09Qi53cml0''@;'; put 'put ''YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxCJiYhMT09PUIuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLEQpfWZ1bmN0aW9uIEQoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZW5kZWR8fFMubmV4dFRpY2soRSx0aGlzKX1mdW5jdGlvbiBFKEIpe0IuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRl''@;'; put 'put ''LmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oQil7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUIsdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5kZXN0cm95ZWQ9Qil9fSksTy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oQixGKXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxTLm5leHRUaWNrKEYsQil9fSwxMjk0Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9bzt2YXIgUz1kKDM5MTIpLGg9T2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZShkKDY0OTcpKTtmdW5jdGlvbiBvKEkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyhJKTtTLmNhbGwodGhpcyxJKX1oLmluaGVyaXRzPWQoNTcxNyksaC5pbmhlcml0cyhvLFMpLG8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oSSxmLFQpe1Qo''@;'; put 'put ''bnVsbCxJKX19LDQ5NjA6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1KSxoPWQoODIxMik7dGUuZXhwb3J0cz1uZTt2YXIgSSxvPWQoNTgyNik7bmUuUmVhZGFibGVTdGF0ZT1YLGQoNzE4Nyk7dmFyIFQ9ZnVuY3Rpb24odWUsemUpe3JldHVybiB1ZS5saXN0ZW5lcnMoemUp''@;'; put 'put ''Lmxlbmd0aH0sQT1kKDk4MTkpLE09ZCgxNTcyKS5CdWZmZXIsTz0odHlwZW9mIGQuZzwidSI/ZC5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEI9T2JqZWN0LmNyZWF0ZShkKDY0OTcpKTtCLmluaGVy''@;'; put 'put ''aXRzPWQoNTcxNyk7dmFyIEY9ZCg2MzUzKSxOPXZvaWQgMDtOPUYmJkYuZGVidWdsb2c/Ri5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBaLEg9ZCgyMjY3KSx6PWQoNTk5Nyk7Qi5pbmhlcml0cyhuZSxBKTt2YXIgVT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1''@;'; put 'put ''c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBYKHVlLHplKXt2YXIgT2U9emUgaW5zdGFuY2VvZihJPUl8fGQoNDM5MCkpO3RoaXMub2JqZWN0TW9kZT0hISh1ZT11ZXx8e30pLm9iamVjdE1vZGUsT2UmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXVlLnJlYWRhYmxlT2JqZWN0''@;'; put 'put ''TW9kZSk7dmFyIENlPXVlLmhpZ2hXYXRlck1hcmssa2U9dWUucmVhZGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1DZXx8MD09PUNlP0NlOk9lJiYoa2V8fDA9PT1rZSk/a2U6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29y''@;'; put 'put ''KHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IEgsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0h''@;'; put 'put ''MCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXVlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRo''@;'; put 'put ''aXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHVlLmVuY29kaW5nJiYoWnx8KFo9ZCgyMjIxKS5zKSx0aGlzLmRlY29kZXI9bmV3IFoodWUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dWUuZW5jb2RpbmcpfWZ1''@;'; put 'put ''bmN0aW9uIG5lKHVlKXtpZihJPUl8fGQoNDM5MCksISh0aGlzIGluc3RhbmNlb2YgbmUpKXJldHVybiBuZXcgbmUodWUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IFgodWUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx1ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB1ZS5yZWFkJiYodGhpcy5fcmVh''@;'; put 'put ''ZD11ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgdWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9dWUuZGVzdHJveSkpLEEuY2FsbCh0aGlzKX1mdW5jdGlvbiBzZSh1ZSx6ZSxPZSxDZSxrZSl7dmFyIE1lLHhlPXVlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09emU/KHhlLnJlYWRp''@;'; put 'put ''bmc9ITEsZnVuY3Rpb24gdSh1ZSx6ZSl7aWYoIXplLmVuZGVkKXtpZih6ZS5kZWNvZGVyKXt2YXIgT2U9emUuZGVjb2Rlci5lbmQoKTtPZSYmT2UubGVuZ3RoJiYoemUuYnVmZmVyLnB1c2goT2UpLHplLmxlbmd0aCs9emUub2JqZWN0TW9kZT8xOk9lLmxlbmd0aCl9emUuZW5kZWQ9ITAsdih1''@;'; put 'put ''ZSl9fSh1ZSx4ZSkpOihrZXx8KE1lPWZ1bmN0aW9uIF9lKHVlLHplKXt2YXIgT2U7cmV0dXJuIWZ1bmN0aW9uIEUodWUpe3JldHVybiBNLmlzQnVmZmVyKHVlKXx8dWUgaW5zdGFuY2VvZiBPfSh6ZSkmJiJzdHJpbmciIT10eXBlb2YgemUmJnZvaWQgMCE9PXplJiYhdWUub2JqZWN0TW9kZSYm''@;'; put 'put ''KE9lPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksT2V9KHhlLHplKSksTWU/dWUuZW1pdCgiZXJyb3IiLE1lKTp4ZS5vYmplY3RNb2RlfHx6ZSYmemUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgemUmJiF4ZS5vYmplY3RNb2RlJiZPYmplY3Qu''@;'; put 'put ''Z2V0UHJvdG90eXBlT2YoemUpIT09TS5wcm90b3R5cGUmJih6ZT1mdW5jdGlvbiBEKHVlKXtyZXR1cm4gTS5mcm9tKHVlKX0oemUpKSxDZT94ZS5lbmRFbWl0dGVkP3VlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOmhlKHVlLHhl''@;'; put 'put ''LHplLCEwKTp4ZS5lbmRlZD91ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooeGUucmVhZGluZz0hMSx4ZS5kZWNvZGVyJiYhT2U/KHplPXhlLmRlY29kZXIud3JpdGUoemUpLHhlLm9iamVjdE1vZGV8fDAhPT16ZS5sZW5ndGg/aGUodWUseGUs''@;'; put 'put ''emUsITEpOl8odWUseGUpKTpoZSh1ZSx4ZSx6ZSwhMSkpKTpDZXx8KHhlLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBtZSh1ZSl7cmV0dXJuIXVlLmVuZGVkJiYodWUubmVlZFJlYWRhYmxlfHx1ZS5sZW5ndGg8dWUuaGlnaFdhdGVyTWFya3x8MD09PXVlLmxlbmd0aCl9KHhlKX1mdW5jdGlvbiBo''@;'; put 'put ''ZSh1ZSx6ZSxPZSxDZSl7emUuZmxvd2luZyYmMD09PXplLmxlbmd0aCYmIXplLnN5bmM/KHVlLmVtaXQoImRhdGEiLE9lKSx1ZS5yZWFkKDApKTooemUubGVuZ3RoKz16ZS5vYmplY3RNb2RlPzE6T2UubGVuZ3RoLENlP3plLmJ1ZmZlci51bnNoaWZ0KE9lKTp6ZS5idWZmZXIucHVzaChPZSks''@;'; put 'put ''emUubmVlZFJlYWRhYmxlJiZ2KHVlKSksXyh1ZSx6ZSl9ZnVuY3Rpb24gcyh1ZSx6ZSl7cmV0dXJuIHVlPD0wfHwwPT09emUubGVuZ3RoJiZ6ZS5lbmRlZD8wOnplLm9iamVjdE1vZGU/MTp1ZSE9dWU/emUuZmxvd2luZyYmemUubGVuZ3RoP3plLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnpl''@;'; put 'put ''Lmxlbmd0aDoodWU+emUuaGlnaFdhdGVyTWFyayYmKHplLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gUih1ZSl7cmV0dXJuIHVlPj04Mzg4NjA4P3VlPTgzODg2MDg6KHVlLS0sdWV8PXVlPj4+MSx1ZXw9dWU+Pj4yLHVlfD11ZT4+PjQsdWV8PXVlPj4+OCx1ZXw9dWU+Pj4xNix1ZSsrKSx1ZX0o''@;'; put 'put ''dWUpKSx1ZTw9emUubGVuZ3RoP3VlOnplLmVuZGVkP3plLmxlbmd0aDooemUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiB2KHVlKXt2YXIgemU9dWUuX3JlYWRhYmxlU3RhdGU7emUubmVlZFJlYWRhYmxlPSExLHplLmVtaXR0ZWRSZWFkYWJsZXx8KE4oImVtaXRSZWFkYWJsZSIsemUu''@;'; put 'put ''Zmxvd2luZyksemUuZW1pdHRlZFJlYWRhYmxlPSEwLHplLnN5bmM/aC5uZXh0VGljayhwLHVlKTpwKHVlKSl9ZnVuY3Rpb24gcCh1ZSl7TigiZW1pdCByZWFkYWJsZSIpLHVlLmVtaXQoInJlYWRhYmxlIikscSh1ZSl9ZnVuY3Rpb24gXyh1ZSx6ZSl7emUucmVhZGluZ01vcmV8fCh6ZS5yZWFk''@;'; put 'put ''aW5nTW9yZT0hMCxoLm5leHRUaWNrKGssdWUsemUpKX1mdW5jdGlvbiBrKHVlLHplKXtmb3IodmFyIE9lPXplLmxlbmd0aDshemUucmVhZGluZyYmIXplLmZsb3dpbmcmJiF6ZS5lbmRlZCYmemUubGVuZ3RoPHplLmhpZ2hXYXRlck1hcmsmJihOKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLHVl''@;'; put 'put ''LnJlYWQoMCksT2UhPT16ZS5sZW5ndGgpOylPZT16ZS5sZW5ndGg7emUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24geSh1ZSl7TigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksdWUucmVhZCgwKX1mdW5jdGlvbiBiKHVlLHplKXt6ZS5yZWFkaW5nfHwoTigicmVzdW1lIHJlYWQgMCIpLHVl''@;'; put 'put ''LnJlYWQoMCkpLHplLnJlc3VtZVNjaGVkdWxlZD0hMSx6ZS5hd2FpdERyYWluPTAsdWUuZW1pdCgicmVzdW1lIikscSh1ZSksemUuZmxvd2luZyYmIXplLnJlYWRpbmcmJnVlLnJlYWQoMCl9ZnVuY3Rpb24gcSh1ZSl7dmFyIHplPXVlLl9yZWFkYWJsZVN0YXRlO2ZvcihOKCJmbG93Iix6ZS5m''@;'; put 'put ''bG93aW5nKTt6ZS5mbG93aW5nJiZudWxsIT09dWUucmVhZCgpOyk7fWZ1bmN0aW9uIEcodWUsemUpe3JldHVybiAwPT09emUubGVuZ3RoP251bGw6KHplLm9iamVjdE1vZGU/T2U9emUuYnVmZmVyLnNoaWZ0KCk6IXVlfHx1ZT49emUubGVuZ3RoPyhPZT16ZS5kZWNvZGVyP3plLmJ1ZmZlci5q''@;'; put 'put ''b2luKCIiKToxPT09emUuYnVmZmVyLmxlbmd0aD96ZS5idWZmZXIuaGVhZC5kYXRhOnplLmJ1ZmZlci5jb25jYXQoemUubGVuZ3RoKSx6ZS5idWZmZXIuY2xlYXIoKSk6T2U9ZnVuY3Rpb24gUSh1ZSx6ZSxPZSl7dmFyIENlO3JldHVybiB1ZTx6ZS5oZWFkLmRhdGEubGVuZ3RoPyhDZT16ZS5o''@;'; put 'put ''ZWFkLmRhdGEuc2xpY2UoMCx1ZSksemUuaGVhZC5kYXRhPXplLmhlYWQuZGF0YS5zbGljZSh1ZSkpOkNlPXVlPT09emUuaGVhZC5kYXRhLmxlbmd0aD96ZS5zaGlmdCgpOk9lP2Z1bmN0aW9uIHBlKHVlLHplKXt2YXIgT2U9emUuaGVhZCxDZT0xLGtlPU9lLmRhdGE7Zm9yKHVlLT1rZS5sZW5n''@;'; put 'put ''dGg7T2U9T2UubmV4dDspe3ZhciB4ZT1PZS5kYXRhLE1lPXVlPnhlLmxlbmd0aD94ZS5sZW5ndGg6dWU7aWYoa2UrPU1lPT09eGUubGVuZ3RoP3hlOnhlLnNsaWNlKDAsdWUpLDA9PSh1ZS09TWUpKXtNZT09PXhlLmxlbmd0aD8oKytDZSx6ZS5oZWFkPU9lLm5leHQ/T2UubmV4dDp6ZS50YWls''@;'; put 'put ''PW51bGwpOih6ZS5oZWFkPU9lLE9lLmRhdGE9eGUuc2xpY2UoTWUpKTticmVha30rK0NlfXJldHVybiB6ZS5sZW5ndGgtPUNlLGtlfSh1ZSx6ZSk6ZnVuY3Rpb24gUGUodWUsemUpe3ZhciBPZT1NLmFsbG9jVW5zYWZlKHVlKSxDZT16ZS5oZWFkLGtlPTE7Zm9yKENlLmRhdGEuY29weShPZSks''@;'; put 'put ''dWUtPUNlLmRhdGEubGVuZ3RoO0NlPUNlLm5leHQ7KXt2YXIgeGU9Q2UuZGF0YSxNZT11ZT54ZS5sZW5ndGg/eGUubGVuZ3RoOnVlO2lmKHhlLmNvcHkoT2UsT2UubGVuZ3RoLXVlLDAsTWUpLDA9PSh1ZS09TWUpKXtNZT09PXhlLmxlbmd0aD8oKytrZSx6ZS5oZWFkPUNlLm5leHQ/Q2UubmV4''@;'; put 'put ''dDp6ZS50YWlsPW51bGwpOih6ZS5oZWFkPUNlLENlLmRhdGE9eGUuc2xpY2UoTWUpKTticmVha30rK2tlfXJldHVybiB6ZS5sZW5ndGgtPWtlLE9lfSh1ZSx6ZSksQ2V9KHVlLHplLmJ1ZmZlcix6ZS5kZWNvZGVyKSxPZSk7dmFyIE9lfWZ1bmN0aW9uIFplKHVlKXt2YXIgemU9dWUuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7aWYoemUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt6ZS5lbmRFbWl0dGVkfHwoemUuZW5kZWQ9ITAsaC5uZXh0VGljayhxZSx6ZSx1ZSkpfWZ1bmN0aW9uIHFlKHVlLHplKXshdWUuZW5kRW1p''@;'; put 'put ''dHRlZCYmMD09PXVlLmxlbmd0aCYmKHVlLmVuZEVtaXR0ZWQ9ITAsemUucmVhZGFibGU9ITEsemUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIHZlKHVlLHplKXtmb3IodmFyIE9lPTAsQ2U9dWUubGVuZ3RoO09lPENlO09lKyspaWYodWVbT2VdPT09emUpcmV0dXJuIE9lO3JldHVybi0xfU9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShuZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHVlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYo''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9dWUpfX0pLG5lLnByb3RvdHlwZS5kZXN0cm95PXouZGVzdHJveSxuZS5wcm90b3R5cGUuX3VuZGVzdHJveT16LnVuZGVzdHJveSxuZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odWUsemUpe3RoaXMucHVzaChudWxsKSx6ZSh1ZSl9''@;'; put 'put ''LG5lLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHVlLHplKXt2YXIgQ2UsT2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gT2Uub2JqZWN0TW9kZT9DZT0hMDoic3RyaW5nIj09dHlwZW9mIHVlJiYoKHplPXplfHxPZS5kZWZhdWx0RW5jb2RpbmcpIT09T2UuZW5jb2RpbmcmJih1ZT1NLmZy''@;'; put 'put ''b20odWUsemUpLHplPSIiKSxDZT0hMCksc2UodGhpcyx1ZSx6ZSwhMSxDZSl9LG5lLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHVlKXtyZXR1cm4gc2UodGhpcyx1ZSxudWxsLCEwLCExKX0sbmUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmZsb3dpbmd9LG5lLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih1ZSl7cmV0dXJuIFp8fChaPWQoMjIyMSkucyksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBaKHVlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXVlLHRoaXN9LG5lLnByb3Rv''@;'; put 'put ''dHlwZS5yZWFkPWZ1bmN0aW9uKHVlKXtOKCJyZWFkIix1ZSksdWU9cGFyc2VJbnQodWUsMTApO3ZhciB6ZT10aGlzLl9yZWFkYWJsZVN0YXRlLE9lPXVlO2lmKDAhPT11ZSYmKHplLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXVlJiZ6ZS5uZWVkUmVhZGFibGUmJih6ZS5sZW5ndGg+PXplLmhp''@;'; put 'put ''Z2hXYXRlck1hcmt8fHplLmVuZGVkKSlyZXR1cm4gTigicmVhZDogZW1pdFJlYWRhYmxlIix6ZS5sZW5ndGgsemUuZW5kZWQpLDA9PT16ZS5sZW5ndGgmJnplLmVuZGVkP1plKHRoaXMpOnYodGhpcyksbnVsbDtpZigwPT09KHVlPXModWUsemUpKSYmemUuZW5kZWQpcmV0dXJuIDA9PT16ZS5s''@;'; put 'put ''ZW5ndGgmJlplKHRoaXMpLG51bGw7dmFyIGtlLENlPXplLm5lZWRSZWFkYWJsZTtyZXR1cm4gTigibmVlZCByZWFkYWJsZSIsQ2UpLCgwPT09emUubGVuZ3RofHx6ZS5sZW5ndGgtdWU8emUuaGlnaFdhdGVyTWFyaykmJk4oImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixDZT0hMCksemUu''@;'; put 'put ''ZW5kZWR8fHplLnJlYWRpbmc/TigicmVhZGluZyBvciBlbmRlZCIsQ2U9ITEpOkNlJiYoTigiZG8gcmVhZCIpLHplLnJlYWRpbmc9ITAsemUuc3luYz0hMCwwPT09emUubGVuZ3RoJiYoemUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHplLmhpZ2hXYXRlck1hcmspLHplLnN5bmM9ITEs''@;'; put 'put ''emUucmVhZGluZ3x8KHVlPXMoT2UsemUpKSksbnVsbD09PShrZT11ZT4wP0codWUsemUpOm51bGwpPyh6ZS5uZWVkUmVhZGFibGU9ITAsdWU9MCk6emUubGVuZ3RoLT11ZSwwPT09emUubGVuZ3RoJiYoemUuZW5kZWR8fCh6ZS5uZWVkUmVhZGFibGU9ITApLE9lIT09dWUmJnplLmVuZGVkJiZa''@;'; put 'put ''ZSh0aGlzKSksbnVsbCE9PWtlJiZ0aGlzLmVtaXQoImRhdGEiLGtlKSxrZX0sbmUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHVlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxuZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih1''@;'; put 'put ''ZSx6ZSl7dmFyIE9lPXRoaXMsQ2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goQ2UucGlwZXNDb3VudCl7Y2FzZSAwOkNlLnBpcGVzPXVlO2JyZWFrO2Nhc2UgMTpDZS5waXBlcz1bQ2UucGlwZXMsdWVdO2JyZWFrO2RlZmF1bHQ6Q2UucGlwZXMucHVzaCh1ZSl9Q2UucGlwZXNDb3VudCs9''@;'; put 'put ''MSxOKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLENlLnBpcGVzQ291bnQsemUpO3ZhciB4ZT16ZSYmITE9PT16ZS5lbmR8fHVlPT09Uy5zdGRvdXR8fHVlPT09Uy5zdGRlcnI/WXQ6SWU7ZnVuY3Rpb24gSWUoKXtOKCJvbmVuZCIpLHVlLmVuZCgpfUNlLmVuZEVtaXR0ZWQ/aC5uZXh0VGljayh4''@;'; put 'put ''ZSk6T2Uub25jZSgiZW5kIix4ZSksdWUub24oInVucGlwZSIsZnVuY3Rpb24gTWUodHQsVWUpe04oIm9udW5waXBlIiksdHQ9PT1PZSYmVWUmJiExPT09VWUuaGFzVW5waXBlZCYmKFVlLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gcHQoKXtOKCJjbGVhbnVwIiksdWUucmVtb3ZlTGlzdGVuZXIo''@;'; put 'put ''ImNsb3NlIixodCksdWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsdnQpLHVlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsYmUpLHVlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscXQpLHVlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLE1lKSxPZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixJZSksT2Uu''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXIoImVuZCIsWXQpLE9lLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixZZSksd2U9ITAsQ2UuYXdhaXREcmFpbiYmKCF1ZS5fd3JpdGFibGVTdGF0ZXx8dWUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmYmUoKX0oKSl9KTt2YXIgYmU9ZnVuY3Rpb24gTCh1ZSl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKCl7dmFyIHplPXVlLl9yZWFkYWJsZVN0YXRlO04oInBpcGVPbkRyYWluIix6ZS5hd2FpdERyYWluKSx6ZS5hd2FpdERyYWluJiZ6ZS5hd2FpdERyYWluLS0sMD09PXplLmF3YWl0RHJhaW4mJlQodWUsImRhdGEiKSYmKHplLmZsb3dpbmc9ITAscSh1ZSkpfX0oT2UpO3VlLm9u''@;'; put 'put ''KCJkcmFpbiIsYmUpO3ZhciB3ZT0hMSxLZT0hMTtmdW5jdGlvbiBZZSh0dCl7Tigib25kYXRhIiksS2U9ITEsITE9PT11ZS53cml0ZSh0dCkmJiFLZSYmKCgxPT09Q2UucGlwZXNDb3VudCYmQ2UucGlwZXM9PT11ZXx8Q2UucGlwZXNDb3VudD4xJiYtMSE9PXZlKENlLnBpcGVzLHVlKSkmJiF3''@;'; put 'put ''ZSYmKE4oImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsQ2UuYXdhaXREcmFpbiksQ2UuYXdhaXREcmFpbisrLEtlPSEwKSxPZS5wYXVzZSgpKX1mdW5jdGlvbiBxdCh0dCl7Tigib25lcnJvciIsdHQpLFl0KCksdWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixxdCksMD09PVQodWUsImVy''@;'; put 'put ''cm9yIikmJnVlLmVtaXQoImVycm9yIix0dCl9ZnVuY3Rpb24gaHQoKXt1ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIix2dCksWXQoKX1mdW5jdGlvbiB2dCgpe04oIm9uZmluaXNoIiksdWUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixodCksWXQoKX1mdW5jdGlvbiBZdCgpe04oInVucGlwZSIp''@;'; put 'put ''LE9lLnVucGlwZSh1ZSl9cmV0dXJuIE9lLm9uKCJkYXRhIixZZSksZnVuY3Rpb24gSyh1ZSx6ZSxPZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHVlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gdWUucHJlcGVuZExpc3RlbmVyKHplLE9lKTt1ZS5fZXZlbnRzJiZ1ZS5fZXZlbnRzW3plXT9vKHVl''@;'; put 'put ''Ll9ldmVudHNbemVdKT91ZS5fZXZlbnRzW3plXS51bnNoaWZ0KE9lKTp1ZS5fZXZlbnRzW3plXT1bT2UsdWUuX2V2ZW50c1t6ZV1dOnVlLm9uKHplLE9lKX0odWUsImVycm9yIixxdCksdWUub25jZSgiY2xvc2UiLGh0KSx1ZS5vbmNlKCJmaW5pc2giLHZ0KSx1ZS5lbWl0KCJwaXBlIixPZSks''@;'; put 'put ''Q2UuZmxvd2luZ3x8KE4oInBpcGUgcmVzdW1lIiksT2UucmVzdW1lKCkpLHVlfSxuZS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHVlKXt2YXIgemU9dGhpcy5fcmVhZGFibGVTdGF0ZSxPZT17aGFzVW5waXBlZDohMX07aWYoMD09PXplLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09''@;'; put 'put ''PXplLnBpcGVzQ291bnQpcmV0dXJuIHVlJiZ1ZSE9PXplLnBpcGVzfHwodWV8fCh1ZT16ZS5waXBlcyksemUucGlwZXM9bnVsbCx6ZS5waXBlc0NvdW50PTAsemUuZmxvd2luZz0hMSx1ZSYmdWUuZW1pdCgidW5waXBlIix0aGlzLE9lKSksdGhpcztpZighdWUpe3ZhciBDZT16ZS5waXBlcyxr''@;'; put 'put ''ZT16ZS5waXBlc0NvdW50O3plLnBpcGVzPW51bGwsemUucGlwZXNDb3VudD0wLHplLmZsb3dpbmc9ITE7Zm9yKHZhciB4ZT0wO3hlPGtlO3hlKyspQ2VbeGVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBNZT12ZSh6ZS5waXBlcyx1ZSk7cmV0''@;'; put 'put ''dXJuLTE9PT1NZXx8KHplLnBpcGVzLnNwbGljZShNZSwxKSx6ZS5waXBlc0NvdW50LT0xLDE9PT16ZS5waXBlc0NvdW50JiYoemUucGlwZXM9emUucGlwZXNbMF0pLHVlLmVtaXQoInVucGlwZSIsdGhpcyxPZSkpLHRoaXN9LG5lLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1uZS5wcm90b3R5cGUu''@;'; put 'put ''b249ZnVuY3Rpb24odWUsemUpe3ZhciBPZT1BLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdWUsemUpO2lmKCJkYXRhIj09PXVlKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PXVlKXt2YXIgQ2U9dGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZTshQ2UuZW5kRW1pdHRlZCYmIUNlLnJlYWRhYmxlTGlzdGVuaW5nJiYoQ2UucmVhZGFibGVMaXN0ZW5pbmc9Q2UubmVlZFJlYWRhYmxlPSEwLENlLmVtaXR0ZWRSZWFkYWJsZT0hMSxDZS5yZWFkaW5nP0NlLmxlbmd0aCYmdih0aGlzKTpoLm5leHRUaWNrKHksdGhpcykpfXJldHVy''@;'; put 'put ''biBPZX0sbmUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB1ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB1ZS5mbG93aW5nfHwoTigicmVzdW1lIiksdWUuZmxvd2luZz0hMCxmdW5jdGlvbiBsKHVlLHplKXt6ZS5yZXN1bWVTY2hlZHVsZWR8fCh6ZS5yZXN1bWVTY2hlZHVs''@;'; put 'put ''ZWQ9ITAsaC5uZXh0VGljayhiLHVlLHplKSl9KHRoaXMsdWUpKSx0aGlzfSxuZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93''@;'; put 'put ''aW5nJiYoTigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxuZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih1ZSl7dmFyIHplPXRoaXMsT2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxDZT0hMTtmb3IodmFyIGtlIGluIHVlLm9u''@;'; put 'put ''KCJlbmQiLGZ1bmN0aW9uKCl7aWYoTigid3JhcHBlZCBlbmQiKSxPZS5kZWNvZGVyJiYhT2UuZW5kZWQpe3ZhciBNZT1PZS5kZWNvZGVyLmVuZCgpO01lJiZNZS5sZW5ndGgmJnplLnB1c2goTWUpfXplLnB1c2gobnVsbCl9KSx1ZS5vbigiZGF0YSIsZnVuY3Rpb24oTWUpe04oIndyYXBwZWQg''@;'; put 'put ''ZGF0YSIpLE9lLmRlY29kZXImJihNZT1PZS5kZWNvZGVyLndyaXRlKE1lKSksT2Uub2JqZWN0TW9kZSYmbnVsbD09TWV8fCEoT2Uub2JqZWN0TW9kZXx8TWUmJk1lLmxlbmd0aCl8fHplLnB1c2goTWUpfHwoQ2U9ITAsdWUucGF1c2UoKSl9KSx1ZSl2b2lkIDA9PT10aGlzW2tlXSYmImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHVlW2tlXSYmKHRoaXNba2VdPWZ1bmN0aW9uKE1lKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdWVbTWVdLmFwcGx5KHVlLGFyZ3VtZW50cyl9fShrZSkpO2Zvcih2YXIgeGU9MDt4ZTxVLmxlbmd0aDt4ZSsrKXVlLm9uKFVbeGVdLHRoaXMuZW1pdC5iaW5kKHRoaXMs''@;'; put 'put ''VVt4ZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihNZSl7Tigid3JhcHBlZCBfcmVhZCIsTWUpLENlJiYoQ2U9ITEsdWUucmVzdW1lKCkpfSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobmUucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiEx''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksbmUuX2Zyb21MaXN0PUd9LDM5MTI6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1JO3ZhciBTPWQoNDM5MCksaD1PYmplY3QuY3JlYXRlKGQoNjQ5NykpO2Z1bmN0aW9u''@;'; put 'put ''IG8oQSxNKXt2YXIgTz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtPLnRyYW5zZm9ybWluZz0hMTt2YXIgRD1PLndyaXRlY2I7aWYoIUQpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigid3JpdGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIikpO08ud3JpdGVjaHVuaz1u''@;'; put 'put ''dWxsLE8ud3JpdGVjYj1udWxsLG51bGwhPU0mJnRoaXMucHVzaChNKSxEKEEpO3ZhciBFPXRoaXMuX3JlYWRhYmxlU3RhdGU7RS5yZWFkaW5nPSExLChFLm5lZWRSZWFkYWJsZXx8RS5sZW5ndGg8RS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChFLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9u''@;'; put 'put ''IEkoQSl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJKEEpO1MuY2FsbCh0aGlzLEEpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpvLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1''@;'; put 'put ''bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxBJiYoImZ1bmN0aW9uIj09dHlwZW9mIEEudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUEudHJhbnNmb3JtKSwiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgQS5mbHVzaCYmKHRoaXMuX2ZsdXNoPUEuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLGYpfWZ1bmN0aW9uIGYoKXt2YXIgQT10aGlzOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbihNLE8pe1QoQSxNLE8pfSk6VCh0aGlz''@;'; put 'put ''LG51bGwsbnVsbCl9ZnVuY3Rpb24gVChBLE0sTyl7aWYoTSlyZXR1cm4gQS5lbWl0KCJlcnJvciIsTSk7aWYobnVsbCE9TyYmQS5wdXNoKE8pLEEuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAw''@;'; put 'put ''Iik7aWYoQS5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIpO3JldHVybiBBLnB1c2gobnVsbCl9aC5pbmhlcml0cz1kKDU3MTcpLGguaW5oZXJpdHMoSSxTKSxJLnByb3Rv''@;'; put 'put ''dHlwZS5wdXNoPWZ1bmN0aW9uKEEsTSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsUy5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsQSxNKX0sSS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihBLE0sTyl7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNm''@;'; put 'put ''b3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEkucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihBLE0sTyl7dmFyIEQ9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoRC53cml0ZWNiPU8sRC53cml0ZWNodW5rPUEsRC53cml0ZWVuY29kaW5nPU0sIUQudHJhbnNmb3JtaW5nKXt2YXIgRT10aGlz''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlOyhELm5lZWRUcmFuc2Zvcm18fEUubmVlZFJlYWRhYmxlfHxFLmxlbmd0aDxFLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEUuaGlnaFdhdGVyTWFyayl9fSxJLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihBKXt2YXIgTT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtu''@;'; put 'put ''dWxsIT09TS53cml0ZWNodW5rJiZNLndyaXRlY2ImJiFNLnRyYW5zZm9ybWluZz8oTS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKE0ud3JpdGVjaHVuayxNLndyaXRlZW5jb2RpbmcsTS5hZnRlclRyYW5zZm9ybSkpOk0ubmVlZFRyYW5zZm9ybT0hMH0sSS5wcm90b3R5cGUuX2Rl''@;'; put 'put ''c3Ryb3k9ZnVuY3Rpb24oQSxNKXt2YXIgTz10aGlzO1MucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxBLGZ1bmN0aW9uKEQpe00oRCksTy5lbWl0KCJjbG9zZSIpfSl9fSwyMDEwOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSksaD1kKDgyMTIpO2Z1bmN0aW9uIEko''@;'; put 'put ''bCl7dmFyIGI9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24geShsLGIscSl7dmFyIEc9bC5lbnRyeTtmb3IobC5lbnRyeT1udWxsO0c7KXt2YXIgUT1HLmNhbGxiYWNrO2IucGVuZGluZ2NiLS0sUShxKSxHPUcubmV4''@;'; put 'put ''dH1iLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWx9KGIsbCl9fXRlLmV4cG9ydHM9VTt2YXIgVCxmPSFTLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoUy52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpoLm5leHRUaWNrO1UuV3JpdGFibGVTdGF0ZT16O3Zh''@;'; put 'put ''ciBBPU9iamVjdC5jcmVhdGUoZCg2NDk3KSk7QS5pbmhlcml0cz1kKDU3MTcpO3ZhciBaLE09e2RlcHJlY2F0ZTpkKDQ5MjcpfSxPPWQoOTgxOSksRD1kKDE1NzIpLkJ1ZmZlcixFPSh0eXBlb2YgZC5nPCJ1Ij9kLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9z''@;'; put 'put ''ZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTj1kKDU5OTcpO2Z1bmN0aW9uIEgoKXt9ZnVuY3Rpb24geihsLGIpe1Q9VHx8ZCg0MzkwKTt2YXIgcT1iIGluc3RhbmNlb2YgVDt0aGlzLm9iamVjdE1vZGU9ISEobD1sfHx7fSkub2JqZWN0TW9kZSxxJiYodGhpcy5vYmplY3RNb2Rl''@;'; put 'put ''PXRoaXMub2JqZWN0TW9kZXx8ISFsLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIEc9bC5oaWdoV2F0ZXJNYXJrLFE9bC53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPUd8fDA9PT1HP0c6cSYmKFF8fDA9PT1RKT9ROnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlz''@;'; put 'put ''LmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5n''@;'; put 'put ''cz0hKCExPT09bC5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1sLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3Jp''@;'; put 'put ''dGU9ZnVuY3Rpb24oWmUpeyFmdW5jdGlvbiBGZShsLGIpe3ZhciBxPWwuX3dyaXRhYmxlU3RhdGUsRz1xLnN5bmMsUT1xLndyaXRlY2I7aWYoZnVuY3Rpb24gbWUobCl7bC53cml0aW5nPSExLGwud3JpdGVjYj1udWxsLGwubGVuZ3RoLT1sLndyaXRlbGVuLGwud3JpdGVsZW49MH0ocSksYikh''@;'; put 'put ''ZnVuY3Rpb24gX2UobCxiLHEsRyxRKXstLWIucGVuZGluZ2NiLHE/KGgubmV4dFRpY2soUSxHKSxoLm5leHRUaWNrKGssbCxiKSxsLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxsLmVtaXQoImVycm9yIixHKSk6KFEoRyksbC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAs''@;'; put 'put ''bC5lbWl0KCJlcnJvciIsRyksayhsLGIpKX0obCxxLEcsYixRKTtlbHNle3ZhciBwZT12KHEpOyFwZSYmIXEuY29ya2VkJiYhcS5idWZmZXJQcm9jZXNzaW5nJiZxLmJ1ZmZlcmVkUmVxdWVzdCYmdShsLHEpLEc/ZihSLGwscSxwZSxRKTpSKGwscSxwZSxRKX19KGIsWmUpfSx0aGlzLndyaXRl''@;'; put 'put ''Y2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0w''@;'; put 'put ''LHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBJKHRoaXMpfWZ1bmN0aW9uIFUobCl7aWYoVD1UfHxkKDQzOTApLCEoWi5jYWxsKFUsdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBUKSlyZXR1cm4gbmV3IFUobCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgeihsLHRoaXMpLHRoaXMud3JpdGFi''@;'; put 'put ''bGU9ITAsbCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBsLndyaXRlJiYodGhpcy5fd3JpdGU9bC53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIGwud3JpdGV2JiYodGhpcy5fd3JpdGV2PWwud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgbC5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1sLmRlc3Ry''@;'; put 'put ''b3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBsLmZpbmFsJiYodGhpcy5fZmluYWw9bC5maW5hbCkpLE8uY2FsbCh0aGlzKX1mdW5jdGlvbiBoZShsLGIscSxHLFEscGUsUGUpe2Iud3JpdGVsZW49RyxiLndyaXRlY2I9UGUsYi53cml0aW5nPSEwLGIuc3luYz0hMCxxP2wuX3dyaXRldihRLGIub253''@;'; put 'put ''cml0ZSk6bC5fd3JpdGUoUSxwZSxiLm9ud3JpdGUpLGIuc3luYz0hMX1mdW5jdGlvbiBSKGwsYixxLEcpe3F8fGZ1bmN0aW9uIHMobCxiKXswPT09Yi5sZW5ndGgmJmIubmVlZERyYWluJiYoYi5uZWVkRHJhaW49ITEsbC5lbWl0KCJkcmFpbiIpKX0obCxiKSxiLnBlbmRpbmdjYi0tLEcoKSxr''@;'; put 'put ''KGwsYil9ZnVuY3Rpb24gdShsLGIpe2IuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgcT1iLmJ1ZmZlcmVkUmVxdWVzdDtpZihsLl93cml0ZXYmJnEmJnEubmV4dCl7dmFyIFE9bmV3IEFycmF5KGIuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHBlPWIuY29ya2VkUmVxdWVzdHNGcmVlO3BlLmVudHJ5''@;'; put 'put ''PXE7Zm9yKHZhciBQZT0wLFplPSEwO3E7KVFbUGVdPXEscS5pc0J1Znx8KFplPSExKSxxPXEubmV4dCxQZSs9MTtRLmFsbEJ1ZmZlcnM9WmUsaGUobCxiLCEwLGIubGVuZ3RoLFEsIiIscGUuZmluaXNoKSxiLnBlbmRpbmdjYisrLGIubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHBlLm5leHQ/''@;'; put 'put ''KGIuY29ya2VkUmVxdWVzdHNGcmVlPXBlLm5leHQscGUubmV4dD1udWxsKTpiLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgSShiKSxiLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3E7KXt2YXIgcWU9cS5jaHVuaztpZihoZShsLGIsITEsYi5vYmplY3RNb2RlPzE6cWUubGVuZ3Ro''@;'; put 'put ''LHFlLHEuZW5jb2RpbmcscS5jYWxsYmFjaykscT1xLm5leHQsYi5idWZmZXJlZFJlcXVlc3RDb3VudC0tLGIud3JpdGluZylicmVha31udWxsPT09cSYmKGIubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1iLmJ1ZmZlcmVkUmVxdWVzdD1xLGIuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlv''@;'; put 'put ''biB2KGwpe3JldHVybiBsLmVuZGluZyYmMD09PWwubGVuZ3RoJiZudWxsPT09bC5idWZmZXJlZFJlcXVlc3QmJiFsLmZpbmlzaGVkJiYhbC53cml0aW5nfWZ1bmN0aW9uIHAobCxiKXtsLl9maW5hbChmdW5jdGlvbihxKXtiLnBlbmRpbmdjYi0tLHEmJmwuZW1pdCgiZXJyb3IiLHEpLGIucHJl''@;'; put 'put ''ZmluaXNoZWQ9ITAsbC5lbWl0KCJwcmVmaW5pc2giKSxrKGwsYil9KX1mdW5jdGlvbiBrKGwsYil7dmFyIHE9dihiKTtyZXR1cm4gcSYmKGZ1bmN0aW9uIF8obCxiKXshYi5wcmVmaW5pc2hlZCYmIWIuZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iPT10eXBlb2YgbC5fZmluYWw/KGIucGVuZGlu''@;'; put 'put ''Z2NiKyssYi5maW5hbENhbGxlZD0hMCxoLm5leHRUaWNrKHAsbCxiKSk6KGIucHJlZmluaXNoZWQ9ITAsbC5lbWl0KCJwcmVmaW5pc2giKSkpfShsLGIpLDA9PT1iLnBlbmRpbmdjYiYmKGIuZmluaXNoZWQ9ITAsbC5lbWl0KCJmaW5pc2giKSkpLHF9QS5pbmhlcml0cyhVLE8pLHoucHJvdG90''@;'; put 'put ''eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgYj10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxxPVtdO2I7KXEucHVzaChiKSxiPWIubmV4dDtyZXR1cm4gcX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6TS5kZXByZWNh''@;'; put 'put ''dGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s''@;'; put 'put ''JiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oWj1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVSxTeW1ib2wuaGFzSW5zdGFuY2Us''@;'; put 'put ''e3ZhbHVlOmZ1bmN0aW9uKGwpe3JldHVybiEhWi5jYWxsKHRoaXMsbCl8fHRoaXM9PT1VJiZsJiZsLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2Ygen19KSk6Wj1mdW5jdGlvbihsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIHRoaXN9LFUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVt''@;'; put 'put ''aXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LFUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGwsYixxKXt2YXIgRz10aGlzLl93cml0YWJsZVN0YXRlLFE9ITEscGU9IUcub2JqZWN0TW9kZSYmZnVuY3Rpb24gRihsKXtyZXR1cm4gRC5pc0J1ZmZl''@;'; put 'put ''cihsKXx8bCBpbnN0YW5jZW9mIEV9KGwpO3JldHVybiBwZSYmIUQuaXNCdWZmZXIobCkmJihsPWZ1bmN0aW9uIEIobCl7cmV0dXJuIEQuZnJvbShsKX0obCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBiJiYocT1iLGI9bnVsbCkscGU/Yj0iYnVmZmVyIjpifHwoYj1HLmRlZmF1bHRFbmNvZGluZyks''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIHEmJihxPUgpLEcuZW5kZWQ/ZnVuY3Rpb24gSyhsLGIpe3ZhciBxPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5kIik7bC5lbWl0KCJlcnJvciIscSksaC5uZXh0VGljayhiLHEpfSh0aGlzLHEpOihwZXx8ZnVuY3Rpb24gWChsLGIscSxHKXt2YXIgUT0hMCxw''@;'; put 'put ''ZT0hMTtyZXR1cm4gbnVsbD09PXE/cGU9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIHEmJnZvaWQgMCE9PXEmJiFiLm9iamVjdE1vZGUmJihwZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVm''@;'; put 'put ''ZmVyIGNodW5rIikpLHBlJiYobC5lbWl0KCJlcnJvciIscGUpLGgubmV4dFRpY2soRyxwZSksUT0hMSksUX0odGhpcyxHLGwscSkpJiYoRy5wZW5kaW5nY2IrKyxRPWZ1bmN0aW9uIHNlKGwsYixxLEcsUSxwZSl7aWYoIXEpe3ZhciBQZT1mdW5jdGlvbiBuZShsLGIscSl7cmV0dXJuIWwub2Jq''@;'; put 'put ''ZWN0TW9kZSYmITEhPT1sLmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgYiYmKGI9RC5mcm9tKGIscSkpLGJ9KGIsRyxRKTtHIT09UGUmJihxPSEwLFE9ImJ1ZmZlciIsRz1QZSl9dmFyIFplPWIub2JqZWN0TW9kZT8xOkcubGVuZ3RoO2IubGVuZ3RoKz1aZTt2YXIgcWU9Yi5sZW5n''@;'; put 'put ''dGg8Yi5oaWdoV2F0ZXJNYXJrO2lmKHFlfHwoYi5uZWVkRHJhaW49ITApLGIud3JpdGluZ3x8Yi5jb3JrZWQpe3ZhciB2ZT1iLmxhc3RCdWZmZXJlZFJlcXVlc3Q7Yi5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpHLGVuY29kaW5nOlEsaXNCdWY6cSxjYWxsYmFjazpwZSxuZXh0Om51bGx9''@;'; put 'put ''LHZlP3ZlLm5leHQ9Yi5sYXN0QnVmZmVyZWRSZXF1ZXN0OmIuYnVmZmVyZWRSZXF1ZXN0PWIubGFzdEJ1ZmZlcmVkUmVxdWVzdCxiLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgaGUobCxiLCExLFplLEcsUSxwZSk7cmV0dXJuIHFlfSh0aGlzLEcscGUsbCxiLHEpKSxRfSxVLnByb3Rv''@;'; put 'put ''dHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sVS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5fd3JpdGFibGVTdGF0ZTtsLmNvcmtlZCYmKGwuY29ya2VkLS0sIWwud3JpdGluZyYmIWwuY29ya2VkJiYhbC5idWZmZXJQcm9j''@;'; put 'put ''ZXNzaW5nJiZsLmJ1ZmZlcmVkUmVxdWVzdCYmdSh0aGlzLGwpKX0sVS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKGIpe2lmKCJzdHJpbmciPT10eXBlb2YgYiYmKGI9Yi50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnki''@;'; put 'put ''LCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChiKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitiKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0''@;'; put 'put ''RW5jb2Rpbmc9Yix0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxVLnByb3RvdHlwZS5fd3Jp''@;'; put 'put ''dGU9ZnVuY3Rpb24obCxiLHEpe3EobmV3IEVycm9yKCJfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LFUucHJvdG90eXBlLl93cml0ZXY9bnVsbCxVLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24obCxiLHEpe3ZhciBHPXRoaXMuX3dyaXRhYmxlU3RhdGU7ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGw/KHE9bCxsPW51bGwsYj1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgYiYmKHE9YixiPW51bGwpLG51bGwhPWwmJnRoaXMud3JpdGUobCxiKSxHLmNvcmtlZCYmKEcuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksRy5lbmRpbmd8fGZ1bmN0aW9uIEwobCxiLHEpe2IuZW5kaW5nPSEwLGsobCxi''@;'; put 'put ''KSxxJiYoYi5maW5pc2hlZD9oLm5leHRUaWNrKHEpOmwub25jZSgiZmluaXNoIixxKSksYi5lbmRlZD0hMCxsLndyaXRhYmxlPSExfSh0aGlzLEcscSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9''@;'; put 'put ''PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24obCl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWwpfX0pLFUucHJvdG90eXBlLmRlc3Ryb3k9Ti5kZXN0cm95LFUucHJvdG90''@;'; put 'put ''eXBlLl91bmRlc3Ryb3k9Ti51bmRlc3Ryb3ksVS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24obCxiKXt0aGlzLmVuZCgpLGIobCl9fSwyMjY3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBoPWQoMTU3MikuQnVmZmVyLG89ZCg2NDE5KTtmdW5jdGlvbiBJKGYsVCxBKXtmLmNvcHko''@;'; put 'put ''VCxBKX10ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZigpeyhmdW5jdGlvbiBTKGYsVCl7aWYoIShmIGluc3RhbmNlb2YgVCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGYpLHRoaXMuaGVhZD1udWxsLHRoaXMu''@;'; put 'put ''dGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGYucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oQSl7dmFyIE09e2RhdGE6QSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9TTp0aGlzLmhlYWQ9TSx0aGlzLnRhaWw9TSwrK3RoaXMubGVuZ3RofSxmLnByb3RvdHlw''@;'; put 'put ''ZS51bnNoaWZ0PWZ1bmN0aW9uKEEpe3ZhciBNPXtkYXRhOkEsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1NKSx0aGlzLmhlYWQ9TSwrK3RoaXMubGVuZ3RofSxmLnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEE9''@;'; put 'put ''dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxBfX0sZi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0s''@;'; put 'put ''Zi5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihBKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBNPXRoaXMuaGVhZCxPPSIiK00uZGF0YTtNPU0ubmV4dDspTys9QStNLmRhdGE7cmV0dXJuIE99LGYucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihBKXtpZigwPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIGguYWxsb2MoMCk7Zm9yKHZhciBNPWguYWxsb2NVbnNhZmUoQT4+PjApLE89dGhpcy5oZWFkLEQ9MDtPOylJKE8uZGF0YSxNLEQpLEQrPU8uZGF0YS5sZW5ndGgsTz1PLm5leHQ7cmV0dXJuIE19LGZ9KCksbyYmby5pbnNwZWN0JiZvLmluc3BlY3QuY3VzdG9tJiYodGUu''@;'; put 'put ''ZXhwb3J0cy5wcm90b3R5cGVbby5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgZj1vLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK2Z9KX0sNTk5NzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDgyMTIp''@;'; put 'put ''O2Z1bmN0aW9uIEkoZixUKXtmLmVtaXQoImVycm9yIixUKX10ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIGgoZixUKXt2YXIgQT10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFQ/VChmKTpmJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLFMubmV4dFRpY2soSSx0aGlzLGYpKTpTLm5leHRUaWNrKEks''@;'; put 'put ''dGhpcyxmKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KGZ8fG51bGwsZnVuY3Rpb24oRCl7IVQm''@;'; put 'put ''JkQ/QS5fd3JpdGFibGVTdGF0ZT9BLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEEuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLFMubmV4dFRpY2soSSxBLEQpKTpTLm5leHRUaWNrKEksQSxEKTpUJiZUKEQpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBvKCl7dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSEx''@;'; put 'put ''LHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KHRlLGosZCk9Pnt0ZS5leHBvcnRzPWQoNzE4NykuRXZlbnRFbWl0dGVyfSwxNTcyOih0ZSxqLGQpPT57dmFyIFM9ZCg4NzY0KSxoPVMuQnVmZmVyO2Z1''@;'; put 'put ''bmN0aW9uIG8oZixUKXtmb3IodmFyIEEgaW4gZilUW0FdPWZbQV19ZnVuY3Rpb24gSShmLFQsQSl7cmV0dXJuIGgoZixULEEpfWguZnJvbSYmaC5hbGxvYyYmaC5hbGxvY1Vuc2FmZSYmaC5hbGxvY1Vuc2FmZVNsb3c/dGUuZXhwb3J0cz1TOihvKFMsaiksai5CdWZmZXI9SSksbyhoLEkpLEku''@;'; put 'put ''ZnJvbT1mdW5jdGlvbihmLFQsQSl7aWYoIm51bWJlciI9PXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGgoZixULEEpfSxJLmFsbG9jPWZ1bmN0aW9uKGYsVCxBKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBNPWgoZik7cmV0dXJuIHZvaWQgMCE9PVQ/InN0cmluZyI9PXR5cGVvZiBBP00uZmlsbChULEEpOk0uZmlsbChUKTpNLmZpbGwoMCksTX0sSS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBoKGYpfSxJLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51''@;'; put 'put ''bWJlciIpO3JldHVybiBTLlNsb3dCdWZmZXIoZil9fSwzODcyOih0ZSxqLGQpPT57KGo9dGUuZXhwb3J0cz1kKDQ5NjApKS5TdHJlYW09aixqLlJlYWRhYmxlPWosai5Xcml0YWJsZT1kKDIwMTApLGouRHVwbGV4PWQoNDM5MCksai5UcmFuc2Zvcm09ZCgzOTEyKSxqLlBhc3NUaHJvdWdoPWQo''@;'; put 'put ''MTI5NCl9LDIyMjE6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCgzMzY0KS5CdWZmZXIsaD1TLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKFUpe3N3aXRjaCgoVT0iIitVKSYmVS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpj''@;'; put 'put ''YXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIGYoVSl7dmFyIEs7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24g''@;'; put 'put ''SShVKXt2YXIgSz1mdW5jdGlvbiBvKFUpe2lmKCFVKXJldHVybiJ1dGY4Ijtmb3IodmFyIEs7Oylzd2l0Y2goVSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYx''@;'; put 'put ''NmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIFU7ZGVmYXVsdDppZihLKXJldHVybjtVPSgiIitVKS50b0xvd2VyQ2FzZSgpLEs9ITB9fShVKTtpZigic3RyaW5nIiE9dHlwZW9mIEsm''@;'; put 'put ''JihTLmlzRW5jb2Rpbmc9PT1ofHwhaChVKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1UpO3JldHVybiBLfHxVfShVKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1CLHRoaXMuZW5kPUYsSz00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxs''@;'; put 'put ''TGFzdD1PLEs9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PU4sdGhpcy5lbmQ9SCxLPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT16LHZvaWQodGhpcy5lbmQ9Wil9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1TLmFsbG9jVW5z''@;'; put 'put ''YWZlKEspfWZ1bmN0aW9uIFQoVSl7cmV0dXJuIFU8PTEyNz8wOlU+PjU9PTY/MjpVPj40PT0xND8zOlU+PjM9PTMwPzQ6VT4+Nj09Mj8tMTotMn1mdW5jdGlvbiBPKFUpe3ZhciBLPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsWD1mdW5jdGlvbiBNKFUsSyl7aWYoMTI4IT0oMTkyJktb''@;'; put 'put ''MF0pKXJldHVybiBVLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoVS5sYXN0TmVlZD4xJiZLLmxlbmd0aD4xKXtpZigxMjghPSgxOTImS1sxXSkpcmV0dXJuIFUubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihVLmxhc3ROZWVkPjImJksubGVuZ3RoPjImJjEyOCE9KDE5MiZLWzJdKSlyZXR1cm4gVS5s''@;'; put 'put ''YXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxVKTtyZXR1cm4gdm9pZCAwIT09WD9YOnRoaXMubGFzdE5lZWQ8PVUubGVuZ3RoPyhVLmNvcHkodGhpcy5sYXN0Q2hhcixLLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90''@;'; put 'put ''YWwpKTooVS5jb3B5KHRoaXMubGFzdENoYXIsSywwLFUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPVUubGVuZ3RoKSl9ZnVuY3Rpb24gQihVLEspe2lmKChVLmxlbmd0aC1LKSUyPT0wKXt2YXIgWD1VLnRvU3RyaW5nKCJ1dGYxNmxlIixLKTtpZihYKXt2YXIgbmU9WC5jaGFyQ29kZUF0''@;'; put 'put ''KFgubGVuZ3RoLTEpO2lmKG5lPj01NTI5NiYmbmU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPVVbVS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1VW1UubGVuZ3RoLTFdLFguc2xpY2UoMCwtMSl9cmV0dXJuIFh9cmV0''@;'; put 'put ''dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09VVtVLmxlbmd0aC0xXSxVLnRvU3RyaW5nKCJ1dGYxNmxlIixLLFUubGVuZ3RoLTEpfWZ1bmN0aW9uIEYoVSl7dmFyIEs9VSYmVS5sZW5ndGg/dGhpcy53cml0ZShVKToiIjtyZXR1cm4gdGhpcy5s''@;'; put 'put ''YXN0TmVlZD9LK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6S31mdW5jdGlvbiBOKFUsSyl7dmFyIFg9KFUubGVuZ3RoLUspJTM7cmV0dXJuIDA9PT1YP1UudG9TdHJpbmcoImJhc2U2NCIsSyk6KHRoaXMubGFzdE5lZWQ9''@;'; put 'put ''My1YLHRoaXMubGFzdFRvdGFsPTMsMT09PVg/dGhpcy5sYXN0Q2hhclswXT1VW1UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPVVbVS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1VW1UubGVuZ3RoLTFdKSxVLnRvU3RyaW5nKCJiYXNlNjQiLEssVS5sZW5ndGgtWCkpfWZ1bmN0aW9u''@;'; put 'put ''IEgoVSl7dmFyIEs9VSYmVS5sZW5ndGg/dGhpcy53cml0ZShVKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9LK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOkt9ZnVuY3Rpb24geihVKXtyZXR1cm4gVS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1m''@;'; put 'put ''dW5jdGlvbiBaKFUpe3JldHVybiBVJiZVLmxlbmd0aD90aGlzLndyaXRlKFUpOiIifWoucz1mLGYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFUpe2lmKDA9PT1VLmxlbmd0aClyZXR1cm4iIjt2YXIgSyxYO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShLPXRoaXMuZmlsbExhc3Qo''@;'; put 'put ''VSkpKXJldHVybiIiO1g9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBYPTA7cmV0dXJuIFg8VS5sZW5ndGg/Sz9LK3RoaXMudGV4dChVLFgpOnRoaXMudGV4dChVLFgpOkt8fCIifSxmLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gRShVKXt2YXIgSz1VJiZVLmxlbmd0aD90aGlz''@;'; put 'put ''LndyaXRlKFUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP0srIlx1ZmZmZCI6S30sZi5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBEKFUsSyl7dmFyIFg9ZnVuY3Rpb24gQShVLEssWCl7dmFyIG5lPUsubGVuZ3RoLTE7aWYobmU8WClyZXR1cm4gMDt2YXIgc2U9VChLW25lXSk7cmV0dXJuIHNl''@;'; put 'put ''Pj0wPyhzZT4wJiYoVS5sYXN0TmVlZD1zZS0xKSxzZSk6LS1uZTxYfHwtMj09PXNlPzA6KHNlPVQoS1tuZV0pKT49MD8oc2U+MCYmKFUubGFzdE5lZWQ9c2UtMiksc2UpOi0tbmU8WHx8LTI9PT1zZT8wOihzZT1UKEtbbmVdKSk+PTA/KHNlPjAmJigyPT09c2U/c2U9MDpVLmxhc3ROZWVkPXNl''@;'; put 'put ''LTMpLHNlKTowfSh0aGlzLFUsSyk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIFUudG9TdHJpbmcoInV0ZjgiLEspO3RoaXMubGFzdFRvdGFsPVg7dmFyIG5lPVUubGVuZ3RoLShYLXRoaXMubGFzdE5lZWQpO3JldHVybiBVLmNvcHkodGhpcy5sYXN0Q2hhciwwLG5lKSxVLnRvU3RyaW5nKCJ1''@;'; put 'put ''dGY4IixLLG5lKX0sZi5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oVSl7aWYodGhpcy5sYXN0TmVlZDw9VS5sZW5ndGgpcmV0dXJuIFUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3Ry''@;'; put 'put ''aW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7VS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLFUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1VLmxlbmd0aH19LDMzNjQ6KHRlLGosZCk9Pnt2YXIgUz1kKDg3NjQpLGg9Uy5CdWZmZXI7''@;'; put 'put ''ZnVuY3Rpb24gbyhmLFQpe2Zvcih2YXIgQSBpbiBmKVRbQV09ZltBXX1mdW5jdGlvbiBJKGYsVCxBKXtyZXR1cm4gaChmLFQsQSl9aC5mcm9tJiZoLmFsbG9jJiZoLmFsbG9jVW5zYWZlJiZoLmFsbG9jVW5zYWZlU2xvdz90ZS5leHBvcnRzPVM6KG8oUyxqKSxqLkJ1ZmZlcj1JKSxvKGgsSSks''@;'; put 'put ''SS5mcm9tPWZ1bmN0aW9uKGYsVCxBKXtpZigibnVtYmVyIj09dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaChmLFQsQSl9LEkuYWxsb2M9ZnVuY3Rpb24oZixULEEpe2lmKCJudW1iZXIiIT10eXBlb2YgZil0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE09aChmKTtyZXR1cm4gdm9pZCAwIT09VD8ic3RyaW5nIj09dHlwZW9mIEE/TS5maWxsKFQsQSk6TS5maWxsKFQpOk0uZmlsbCgwKSxNfSxJLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGYpe2lmKCJudW1iZXIi''@;'; put 'put ''IT10eXBlb2YgZil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGgoZil9LEkuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGYpe2lmKCJudW1iZXIiIT10eXBlb2YgZil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEg''@;'; put 'put ''bnVtYmVyIik7cmV0dXJuIFMuU2xvd0J1ZmZlcihmKX19LDcyOTU6KHRlLGosZCk9Pnt2YXIgUz1kKDg3NjQpLkJ1ZmZlcjt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8sSSl7Zm9yKHZhciBmPU1hdGgubWluKG8ubGVuZ3RoLEkubGVuZ3RoKSxUPW5ldyBTKGYpLEE9MDtBPGY7KytBKVRbQV09b1tB''@;'; put 'put ''XV5JW0FdO3JldHVybiBUfX0sODc2NDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDUxMDgpO2NvbnN0IGg9ZCg5NzQyKSxvPWQoNjQ1KSxJPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51''@;'; put 'put ''dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtqLkJ1ZmZlcj1NLGouU2xvd0J1ZmZlcj1mdW5jdGlvbiBLKFVlKXtyZXR1cm4rVWUhPVVlJiYoVWU9MCksTS5hbGxvYygrVWUpfSxqLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IGY9MjE0NzQ4MzY0NztmdW5jdGlvbiBBKFVlKXtpZihVZT5m''@;'; put 'put ''KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrVWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO2NvbnN0ICRlPW5ldyBVaW50OEFycmF5KFVlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKCRlLE0ucHJvdG90eXBlKSwkZX1mdW5jdGlvbiBNKFVlLCRl''@;'; put 'put ''LExlKXtpZigibnVtYmVyIj09dHlwZW9mIFVlKXtpZigic3RyaW5nIj09dHlwZW9mICRlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBCKFVlKX1yZXR1cm4gTyhV''@;'; put 'put ''ZSwkZSxMZSl9ZnVuY3Rpb24gTyhVZSwkZSxMZSl7aWYoInN0cmluZyI9PXR5cGVvZiBVZSlyZXR1cm4gZnVuY3Rpb24gRihVZSwkZSl7aWYoKCJzdHJpbmciIT10eXBlb2YgJGV8fCIiPT09JGUpJiYoJGU9InV0ZjgiKSwhTS5pc0VuY29kaW5nKCRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJV''@;'; put 'put ''bmtub3duIGVuY29kaW5nOiAiKyRlKTtjb25zdCBMZT0wfFgoVWUsJGUpO2xldCBudD1BKExlKTtjb25zdCBybj1udC53cml0ZShVZSwkZSk7cmV0dXJuIHJuIT09TGUmJihudD1udC5zbGljZSgwLHJuKSksbnR9KFVlLCRlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoVWUpKXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBIKFVlKXtpZihxdChVZSxVaW50OEFycmF5KSl7Y29uc3QgJGU9bmV3IFVpbnQ4QXJyYXkoVWUpO3JldHVybiB6KCRlLmJ1ZmZlciwkZS5ieXRlT2Zmc2V0LCRlLmJ5dGVMZW5ndGgpfXJldHVybiBOKFVlKX0oVWUpO2lmKG51bGw9PVVlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBm''@;'; put 'put ''aXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFVlKTtpZihxdChVZSxBcnJheUJ1ZmZlcil8fFVlJiZxdChVZS5idWZmZXIsQXJyYXlC''@;'; put 'put ''dWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYocXQoVWUsU2hhcmVkQXJyYXlCdWZmZXIpfHxVZSYmcXQoVWUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIHooVWUsJGUsTGUpO2lmKCJudW1iZXIiPT10eXBlb2YgVWUpdGhyb3cgbmV3IFR5cGVFcnJvcign''@;'; put 'put ''VGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7Y29uc3QgbnQ9VWUudmFsdWVPZiYmVWUudmFsdWVPZigpO2lmKG51bGwhPW50JiZudCE9PVVlKXJldHVybiBNLmZyb20obnQsJGUsTGUpO2NvbnN0IHJuPWZ1bmN0''@;'; put 'put ''aW9uIFooVWUpe2lmKE0uaXNCdWZmZXIoVWUpKXtjb25zdCAkZT0wfFUoVWUubGVuZ3RoKSxMZT1BKCRlKTtyZXR1cm4gMD09PUxlLmxlbmd0aHx8VWUuY29weShMZSwwLDAsJGUpLExlfXJldHVybiB2b2lkIDAhPT1VZS5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiBVZS5sZW5ndGh8fGh0KFVl''@;'; put 'put ''Lmxlbmd0aCk/QSgwKTpOKFVlKToiQnVmZmVyIj09PVVlLnR5cGUmJkFycmF5LmlzQXJyYXkoVWUuZGF0YSk/TihVZS5kYXRhKTp2b2lkIDB9KFVlKTtpZihybilyZXR1cm4gcm47aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFVlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIE0uZnJvbShVZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSwkZSxMZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVm''@;'; put 'put ''ZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgVWUpfWZ1bmN0aW9uIEQoVWUpe2lmKCJudW1iZXIiIT10eXBlb2YgVWUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihV''@;'; put 'put ''ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrVWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIEIoVWUpe3JldHVybiBEKFVlKSxBKFVlPDA/MDowfFUoVWUpKX1mdW5jdGlvbiBOKFVlKXtjb25zdCAkZT1VZS5sZW5ndGg8MD8wOjB8VShV''@;'; put 'put ''ZS5sZW5ndGgpLExlPUEoJGUpO2ZvcihsZXQgbnQ9MDtudDwkZTtudCs9MSlMZVtudF09MjU1JlVlW250XTtyZXR1cm4gTGV9ZnVuY3Rpb24geihVZSwkZSxMZSl7aWYoJGU8MHx8VWUuYnl0ZUxlbmd0aDwkZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBi''@;'; put 'put ''dWZmZXIgYm91bmRzJyk7aWYoVWUuYnl0ZUxlbmd0aDwkZSsoTGV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgbnQ7cmV0dXJuIG50PXZvaWQgMD09PSRlJiZ2b2lkIDA9PT1MZT9uZXcgVWludDhBcnJheShVZSk6''@;'; put 'put ''dm9pZCAwPT09TGU/bmV3IFVpbnQ4QXJyYXkoVWUsJGUpOm5ldyBVaW50OEFycmF5KFVlLCRlLExlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YobnQsTS5wcm90b3R5cGUpLG50fWZ1bmN0aW9uIFUoVWUpe2lmKFVlPj1mKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRl''@;'; put 'put ''IEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitmLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8VWV9ZnVuY3Rpb24gWChVZSwkZSl7aWYoTS5pc0J1ZmZlcihVZSkpcmV0dXJuIFVlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoVWUpfHxxdChVZSxBcnJh''@;'; put 'put ''eUJ1ZmZlcikpcmV0dXJuIFVlLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBVZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0''@;'; put 'put ''eXBlb2YgVWUpO2NvbnN0IExlPVVlLmxlbmd0aCxudD1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFudCYmMD09PUxlKXJldHVybiAwO2xldCBybj0hMTtmb3IoOzspc3dpdGNoKCRlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVy''@;'; put 'put ''biBMZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBiZShVZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipMZTtjYXNlImhleCI6cmV0dXJuIExlPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIEtlKFVlKS5s''@;'; put 'put ''ZW5ndGg7ZGVmYXVsdDppZihybilyZXR1cm4gbnQ/LTE6YmUoVWUpLmxlbmd0aDskZT0oIiIrJGUpLnRvTG93ZXJDYXNlKCkscm49ITB9fWZ1bmN0aW9uIG5lKFVlLCRlLExlKXtsZXQgbnQ9ITE7aWYoKHZvaWQgMD09PSRlfHwkZTwwKSYmKCRlPTApLCRlPnRoaXMubGVuZ3RofHwoKHZvaWQg''@;'; put 'put ''MD09PUxlfHxMZT50aGlzLmxlbmd0aCkmJihMZT10aGlzLmxlbmd0aCksTGU8PTApfHwoTGU+Pj49MCk8PSgkZT4+Pj0wKSlyZXR1cm4iIjtmb3IoVWV8fChVZT0idXRmOCIpOzspc3dpdGNoKFVlKXtjYXNlImhleCI6cmV0dXJuIGwodGhpcywkZSxMZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04''@;'; put 'put ''IjpyZXR1cm4gcCh0aGlzLCRlLExlKTtjYXNlImFzY2lpIjpyZXR1cm4gTCh0aGlzLCRlLExlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB5KHRoaXMsJGUsTGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdih0aGlzLCRlLExlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2Ui''@;'; put 'put ''dXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGIodGhpcywkZSxMZSk7ZGVmYXVsdDppZihudCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1VlKTtVZT0oVWUrIiIpLnRvTG93ZXJDYXNlKCksbnQ9ITB9fWZ1bmN0aW9uIHNlKFVlLCRlLExlKXtjb25zdCBu''@;'; put 'put ''dD1VZVskZV07VWVbJGVdPVVlW0xlXSxVZVtMZV09bnR9ZnVuY3Rpb24gaGUoVWUsJGUsTGUsbnQscm4pe2lmKDA9PT1VZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBMZT8obnQ9TGUsTGU9MCk6TGU+MjE0NzQ4MzY0Nz9MZT0yMTQ3NDgzNjQ3OkxlPC0yMTQ3NDgzNjQ4''@;'; put 'put ''JiYoTGU9LTIxNDc0ODM2NDgpLGh0KExlPStMZSkmJihMZT1ybj8wOlVlLmxlbmd0aC0xKSxMZTwwJiYoTGU9VWUubGVuZ3RoK0xlKSxMZT49VWUubGVuZ3RoKXtpZihybilyZXR1cm4tMTtMZT1VZS5sZW5ndGgtMX1lbHNlIGlmKExlPDApe2lmKCFybilyZXR1cm4tMTtMZT0wfWlmKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgJGUmJigkZT1NLmZyb20oJGUsbnQpKSxNLmlzQnVmZmVyKCRlKSlyZXR1cm4gMD09PSRlLmxlbmd0aD8tMTpfZShVZSwkZSxMZSxudCxybik7aWYoIm51bWJlciI9PXR5cGVvZiAkZSlyZXR1cm4gJGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90''@;'; put 'put ''b3R5cGUuaW5kZXhPZj9ybj9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoVWUsJGUsTGUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoVWUsJGUsTGUpOl9lKFVlLFskZV0sTGUsbnQscm4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0''@;'; put 'put ''cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIF9lKFVlLCRlLExlLG50LHJuKXtsZXQgUXQseHQ9MSxUdD1VZS5sZW5ndGgseW49JGUubGVuZ3RoO2lmKHZvaWQgMCE9PW50JiYoInVjczIiPT09KG50PVN0cmluZyhudCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1udHx8InV0''@;'; put 'put ''ZjE2bGUiPT09bnR8fCJ1dGYtMTZsZSI9PT1udCkpe2lmKFVlLmxlbmd0aDwyfHwkZS5sZW5ndGg8MilyZXR1cm4tMTt4dD0yLFR0Lz0yLHluLz0yLExlLz0yfWZ1bmN0aW9uIFh0KFhyLHNuKXtyZXR1cm4gMT09PXh0P1hyW3NuXTpYci5yZWFkVUludDE2QkUoc24qeHQpfWlmKHJuKXtsZXQg''@;'; put 'put ''WHI9LTE7Zm9yKFF0PUxlO1F0PFR0O1F0KyspaWYoWHQoVWUsUXQpPT09WHQoJGUsLTE9PT1Ycj8wOlF0LVhyKSl7aWYoLTE9PT1YciYmKFhyPVF0KSxRdC1YcisxPT09eW4pcmV0dXJuIFhyKnh0fWVsc2UtMSE9PVhyJiYoUXQtPVF0LVhyKSxYcj0tMX1lbHNlIGZvcihMZSt5bj5UdCYmKExl''@;'; put 'put ''PVR0LXluKSxRdD1MZTtRdD49MDtRdC0tKXtsZXQgWHI9ITA7Zm9yKGxldCBzbj0wO3NuPHluO3NuKyspaWYoWHQoVWUsUXQrc24pIT09WHQoJGUsc24pKXtYcj0hMTticmVha31pZihYcilyZXR1cm4gUXR9cmV0dXJuLTF9ZnVuY3Rpb24gbWUoVWUsJGUsTGUsbnQpe0xlPU51bWJlcihMZSl8''@;'; put 'put ''fDA7Y29uc3Qgcm49VWUubGVuZ3RoLUxlO250PyhudD1OdW1iZXIobnQpKT5ybiYmKG50PXJuKTpudD1ybjtjb25zdCB4dD0kZS5sZW5ndGg7bGV0IFR0O2ZvcihudD54dC8yJiYobnQ9eHQvMiksVHQ9MDtUdDxudDsrK1R0KXtjb25zdCB5bj1wYXJzZUludCgkZS5zdWJzdHIoMipUdCwyKSwx''@;'; put 'put ''Nik7aWYoaHQoeW4pKXJldHVybiBUdDtVZVtMZStUdF09eW59cmV0dXJuIFR0fWZ1bmN0aW9uIEZlKFVlLCRlLExlLG50KXtyZXR1cm4gWWUoYmUoJGUsVWUubGVuZ3RoLUxlKSxVZSxMZSxudCl9ZnVuY3Rpb24gUihVZSwkZSxMZSxudCl7cmV0dXJuIFllKGZ1bmN0aW9uIHdlKFVlKXtjb25z''@;'; put 'put ''dCAkZT1bXTtmb3IobGV0IExlPTA7TGU8VWUubGVuZ3RoOysrTGUpJGUucHVzaCgyNTUmVWUuY2hhckNvZGVBdChMZSkpO3JldHVybiAkZX0oJGUpLFVlLExlLG50KX1mdW5jdGlvbiBzKFVlLCRlLExlLG50KXtyZXR1cm4gWWUoS2UoJGUpLFVlLExlLG50KX1mdW5jdGlvbiB1KFVlLCRlLExl''@;'; put 'put ''LG50KXtyZXR1cm4gWWUoZnVuY3Rpb24gcHQoVWUsJGUpe2xldCBMZSxudCxybjtjb25zdCB4dD1bXTtmb3IobGV0IFR0PTA7VHQ8VWUubGVuZ3RoJiYhKCgkZS09Mik8MCk7KytUdClMZT1VZS5jaGFyQ29kZUF0KFR0KSxudD1MZT4+OCxybj1MZSUyNTYseHQucHVzaChybikseHQucHVzaChu''@;'; put 'put ''dCk7cmV0dXJuIHh0fSgkZSxVZS5sZW5ndGgtTGUpLFVlLExlLG50KX1mdW5jdGlvbiB2KFVlLCRlLExlKXtyZXR1cm4gaC5mcm9tQnl0ZUFycmF5KDA9PT0kZSYmTGU9PT1VZS5sZW5ndGg/VWU6VWUuc2xpY2UoJGUsTGUpKX1mdW5jdGlvbiBwKFVlLCRlLExlKXtMZT1NYXRoLm1pbihVZS5s''@;'; put 'put ''ZW5ndGgsTGUpO2NvbnN0IG50PVtdO2xldCBybj0kZTtmb3IoO3JuPExlOyl7Y29uc3QgeHQ9VWVbcm5dO2xldCBUdD1udWxsLHluPXh0PjIzOT80Onh0PjIyMz8zOnh0PjE5MT8yOjE7aWYocm4reW48PUxlKXtsZXQgWHQsUXQsWHIsc247c3dpdGNoKHluKXtjYXNlIDE6eHQ8MTI4JiYoVHQ9''@;'; put 'put ''eHQpO2JyZWFrO2Nhc2UgMjpYdD1VZVtybisxXSwxMjg9PSgxOTImWHQpJiYoc249KDMxJnh0KTw8Nnw2MyZYdCxzbj4xMjcmJihUdD1zbikpO2JyZWFrO2Nhc2UgMzpYdD1VZVtybisxXSxRdD1VZVtybisyXSwxMjg9PSgxOTImWHQpJiYxMjg9PSgxOTImUXQpJiYoc249KDE1Jnh0KTw8MTJ8''@;'; put 'put ''KDYzJlh0KTw8Nnw2MyZRdCxzbj4yMDQ3JiYoc248NTUyOTZ8fHNuPjU3MzQzKSYmKFR0PXNuKSk7YnJlYWs7Y2FzZSA0Olh0PVVlW3JuKzFdLFF0PVVlW3JuKzJdLFhyPVVlW3JuKzNdLDEyOD09KDE5MiZYdCkmJjEyOD09KDE5MiZRdCkmJjEyOD09KDE5MiZYcikmJihzbj0oMTUmeHQpPDwx''@;'; put 'put ''OHwoNjMmWHQpPDwxMnwoNjMmUXQpPDw2fDYzJlhyLHNuPjY1NTM1JiZzbjwxMTE0MTEyJiYoVHQ9c24pKX19bnVsbD09PVR0PyhUdD02NTUzMyx5bj0xKTpUdD42NTUzNSYmKFR0LT02NTUzNixudC5wdXNoKFR0Pj4+MTAmMTAyM3w1NTI5NiksVHQ9NTYzMjB8MTAyMyZUdCksbnQucHVzaChU''@;'; put 'put ''dCkscm4rPXlufXJldHVybiBmdW5jdGlvbiBrKFVlKXtjb25zdCAkZT1VZS5sZW5ndGg7aWYoJGU8PV8pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFVlKTtsZXQgTGU9IiIsbnQ9MDtmb3IoO250PCRlOylMZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJp''@;'; put 'put ''bmcsVWUuc2xpY2UobnQsbnQrPV8pKTtyZXR1cm4gTGV9KG50KX1qLmtNYXhMZW5ndGg9ZiwhKE0uVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBUKCl7dHJ5e2NvbnN0IFVlPW5ldyBVaW50OEFycmF5KDEpLCRlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0''@;'; put 'put ''LnNldFByb3RvdHlwZU9mKCRlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVWUsJGUpLDQyPT09VWUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIFM8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgUy5lcnJvciYmUy5lcnJvcigiVGhpcyBicm93''@;'; put 'put ''c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KE0ucHJvdG90''@;'; put 'put ''eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE0uaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihNLmlz''@;'; put 'put ''QnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksTS5wb29sU2l6ZT04MTkyLE0uZnJvbT1mdW5jdGlvbihVZSwkZSxMZSl7cmV0dXJuIE8oVWUsJGUsTGUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTS5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5z''@;'; put 'put ''ZXRQcm90b3R5cGVPZihNLFVpbnQ4QXJyYXkpLE0uYWxsb2M9ZnVuY3Rpb24oVWUsJGUsTGUpe3JldHVybiBmdW5jdGlvbiBFKFVlLCRlLExlKXtyZXR1cm4gRChVZSksVWU8PTA/QShVZSk6dm9pZCAwIT09JGU/InN0cmluZyI9PXR5cGVvZiBMZT9BKFVlKS5maWxsKCRlLExlKTpBKFVlKS5m''@;'; put 'put ''aWxsKCRlKTpBKFVlKX0oVWUsJGUsTGUpfSxNLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFVlKXtyZXR1cm4gQihVZSl9LE0uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFVlKXtyZXR1cm4gQihVZSl9LE0uaXNCdWZmZXI9ZnVuY3Rpb24oJGUpe3JldHVybiBudWxsIT0kZSYmITA9PT0kZS5faXNC''@;'; put 'put ''dWZmZXImJiRlIT09TS5wcm90b3R5cGV9LE0uY29tcGFyZT1mdW5jdGlvbigkZSxMZSl7aWYocXQoJGUsVWludDhBcnJheSkmJigkZT1NLmZyb20oJGUsJGUub2Zmc2V0LCRlLmJ5dGVMZW5ndGgpKSxxdChMZSxVaW50OEFycmF5KSYmKExlPU0uZnJvbShMZSxMZS5vZmZzZXQsTGUuYnl0ZUxl''@;'; put 'put ''bmd0aCkpLCFNLmlzQnVmZmVyKCRlKXx8IU0uaXNCdWZmZXIoTGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKCRlPT09TGUpcmV0dXJuIDA7bGV0IG50PSRlLmxl''@;'; put 'put ''bmd0aCxybj1MZS5sZW5ndGg7Zm9yKGxldCB4dD0wLFR0PU1hdGgubWluKG50LHJuKTt4dDxUdDsrK3h0KWlmKCRlW3h0XSE9PUxlW3h0XSl7bnQ9JGVbeHRdLHJuPUxlW3h0XTticmVha31yZXR1cm4gbnQ8cm4/LTE6cm48bnQ/MTowfSxNLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oJGUpe3N3aXRj''@;'; put 'put ''aChTdHJpbmcoJGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpy''@;'; put 'put ''ZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sTS5jb25jYXQ9ZnVuY3Rpb24oJGUsTGUpe2lmKCFBcnJheS5pc0FycmF5KCRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PSRlLmxlbmd0aClyZXR1cm4g''@;'; put 'put ''TS5hbGxvYygwKTtsZXQgbnQ7aWYodm9pZCAwPT09TGUpZm9yKExlPTAsbnQ9MDtudDwkZS5sZW5ndGg7KytudClMZSs9JGVbbnRdLmxlbmd0aDtjb25zdCBybj1NLmFsbG9jVW5zYWZlKExlKTtsZXQgeHQ9MDtmb3IobnQ9MDtudDwkZS5sZW5ndGg7KytudCl7bGV0IFR0PSRlW250XTtpZihx''@;'; put 'put ''dChUdCxVaW50OEFycmF5KSl4dCtUdC5sZW5ndGg+cm4ubGVuZ3RoPyhNLmlzQnVmZmVyKFR0KXx8KFR0PU0uZnJvbShUdCkpLFR0LmNvcHkocm4seHQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChybixUdCx4dCk7ZWxzZXtpZighTS5pc0J1ZmZlcihUdCkpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1R0LmNvcHkocm4seHQpfXh0Kz1UdC5sZW5ndGh9cmV0dXJuIHJufSxNLmJ5dGVMZW5ndGg9WCxNLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsTS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3QgJGU9dGhpcy5sZW5ndGg7aWYoJGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IobGV0IExlPTA7TGU8JGU7TGUrPTIpc2UodGhpcyxMZSxMZSsxKTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUu''@;'; put 'put ''c3dhcDMyPWZ1bmN0aW9uKCl7Y29uc3QgJGU9dGhpcy5sZW5ndGg7aWYoJGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IobGV0IExlPTA7TGU8JGU7TGUrPTQpc2UodGhpcyxMZSxMZSszKSxzZSh0aGlz''@;'; put 'put ''LExlKzEsTGUrMik7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe2NvbnN0ICRlPXRoaXMubGVuZ3RoO2lmKCRlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKGxldCBMZT0w''@;'; put 'put ''O0xlPCRlO0xlKz04KXNlKHRoaXMsTGUsTGUrNyksc2UodGhpcyxMZSsxLExlKzYpLHNlKHRoaXMsTGUrMixMZSs1KSxzZSh0aGlzLExlKzMsTGUrNCk7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Y29uc3QgJGU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT0k''@;'; put 'put ''ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9wKHRoaXMsMCwkZSk6bmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxNLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1NLnByb3RvdHlwZS50b1N0cmluZyxNLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oJGUpe2lmKCFNLmlzQnVmZmVyKCRlKSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT0kZXx8MD09PU0uY29tcGFyZSh0aGlzLCRlKX0sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe2xldCAkZT0iIjtjb25zdCBMZT1qLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVy''@;'; put 'put ''biAkZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsTGUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+TGUmJigkZSs9IiAuLi4gIiksIjxCdWZmZXIgIiskZSsiPiJ9LEkmJihNLnByb3RvdHlwZVtJXT1NLnByb3RvdHlwZS5pbnNwZWN0KSxNLnByb3RvdHlwZS5j''@;'; put 'put ''b21wYXJlPWZ1bmN0aW9uKCRlLExlLG50LHJuLHh0KXtpZihxdCgkZSxVaW50OEFycmF5KSYmKCRlPU0uZnJvbSgkZSwkZS5vZmZzZXQsJGUuYnl0ZUxlbmd0aCkpLCFNLmlzQnVmZmVyKCRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUg''@;'; put 'put ''b2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiAkZSk7aWYodm9pZCAwPT09TGUmJihMZT0wKSx2b2lkIDA9PT1udCYmKG50PSRlPyRlLmxlbmd0aDowKSx2b2lkIDA9PT1ybiYmKHJuPTApLHZvaWQgMD09PXh0JiYoeHQ9dGhpcy5sZW5ndGgpLExl''@;'; put 'put ''PDB8fG50PiRlLmxlbmd0aHx8cm48MHx8eHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHJuPj14dCYmTGU+PW50KXJldHVybiAwO2lmKHJuPj14dClyZXR1cm4tMTtpZihMZT49bnQpcmV0dXJuIDE7aWYodGhpcz09PSRlKXJldHVy''@;'; put 'put ''biAwO2xldCBUdD0oeHQ+Pj49MCktKHJuPj4+PTApLHluPShudD4+Pj0wKS0oTGU+Pj49MCk7Y29uc3QgWHQ9TWF0aC5taW4oVHQseW4pLFF0PXRoaXMuc2xpY2Uocm4seHQpLFhyPSRlLnNsaWNlKExlLG50KTtmb3IobGV0IHNuPTA7c248WHQ7KytzbilpZihRdFtzbl0hPT1Ycltzbl0pe1R0''@;'; put 'put ''PVF0W3NuXSx5bj1Ycltzbl07YnJlYWt9cmV0dXJuIFR0PHluPy0xOnluPFR0PzE6MH0sTS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oJGUsTGUsbnQpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKCRlLExlLG50KX0sTS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbigkZSxMZSxudCl7''@;'; put 'put ''cmV0dXJuIGhlKHRoaXMsJGUsTGUsbnQsITApfSxNLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbigkZSxMZSxudCl7cmV0dXJuIGhlKHRoaXMsJGUsTGUsbnQsITEpfSxNLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbigkZSxMZSxudCxybil7aWYodm9pZCAwPT09TGUpcm49InV0Zjgi''@;'; put 'put ''LG50PXRoaXMubGVuZ3RoLExlPTA7ZWxzZSBpZih2b2lkIDA9PT1udCYmInN0cmluZyI9PXR5cGVvZiBMZSlybj1MZSxudD10aGlzLmxlbmd0aCxMZT0wO2Vsc2V7aWYoIWlzRmluaXRlKExlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRb''@;'; put 'put ''LCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7TGU+Pj49MCxpc0Zpbml0ZShudCk/KG50Pj4+PTAsdm9pZCAwPT09cm4mJihybj0idXRmOCIpKToocm49bnQsbnQ9dm9pZCAwKX1jb25zdCB4dD10aGlzLmxlbmd0aC1MZTtpZigodm9pZCAwPT09bnR8fG50Pnh0KSYmKG50PXh0''@;'; put 'put ''KSwkZS5sZW5ndGg+MCYmKG50PDB8fExlPDApfHxMZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtybnx8KHJuPSJ1dGY4Iik7bGV0IFR0PSExO2Zvcig7Oylzd2l0Y2gocm4pe2Nhc2UiaGV4IjpyZXR1''@;'; put 'put ''cm4gbWUodGhpcywkZSxMZSxudCk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRmUodGhpcywkZSxMZSxudCk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gUih0aGlzLCRlLExlLG50KTtjYXNlImJhc2U2NCI6cmV0dXJuIHModGhpcywkZSxMZSxu''@;'; put 'put ''dCk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiB1KHRoaXMsJGUsTGUsbnQpO2RlZmF1bHQ6aWYoVHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitybik7cm49KCIiK3JuKS50b0xvd2VyQ2FzZSgpLFR0''@;'; put 'put ''PSEwfX0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtjb25zdCBfPTQwOTY7ZnVuY3Rpb24gTChVZSwkZSxMZSl7bGV0IG50PSIiO0xlPU1hdGgubWlu''@;'; put 'put ''KFVlLmxlbmd0aCxMZSk7Zm9yKGxldCBybj0kZTtybjxMZTsrK3JuKW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZVZVtybl0pO3JldHVybiBudH1mdW5jdGlvbiB5KFVlLCRlLExlKXtsZXQgbnQ9IiI7TGU9TWF0aC5taW4oVWUubGVuZ3RoLExlKTtmb3IobGV0IHJuPSRlO3JuPExlOysr''@;'; put 'put ''cm4pbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoVWVbcm5dKTtyZXR1cm4gbnR9ZnVuY3Rpb24gbChVZSwkZSxMZSl7Y29uc3QgbnQ9VWUubGVuZ3RoOyghJGV8fCRlPDApJiYoJGU9MCksKCFMZXx8TGU8MHx8TGU+bnQpJiYoTGU9bnQpO2xldCBybj0iIjtmb3IobGV0IHh0PSRlO3h0PExlOysr''@;'; put 'put ''eHQpcm4rPXZ0W1VlW3h0XV07cmV0dXJuIHJufWZ1bmN0aW9uIGIoVWUsJGUsTGUpe2NvbnN0IG50PVVlLnNsaWNlKCRlLExlKTtsZXQgcm49IiI7Zm9yKGxldCB4dD0wO3h0PG50Lmxlbmd0aC0xO3h0Kz0yKXJuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG50W3h0XSsyNTYqbnRbeHQrMV0pO3Jl''@;'; put 'put ''dHVybiBybn1mdW5jdGlvbiBxKFVlLCRlLExlKXtpZihVZSUxIT0wfHxVZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihVZSskZT5MZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1''@;'; put 'put ''bmN0aW9uIEcoVWUsJGUsTGUsbnQscm4seHQpe2lmKCFNLmlzQnVmZmVyKFVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoJGU+cm58fCRlPHh0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3Vt''@;'; put 'put ''ZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihMZStudD5VZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFEoVWUsJGUsTGUsbnQscm4pe0NlKCRlLG50LHJuLFVlLExlLDcpO2xldCB4dD1OdW1iZXIoJGUmQmlnSW50KDQyOTQ5Njcy''@;'; put 'put ''OTUpKTtVZVtMZSsrXT14dCx4dD4+PTgsVWVbTGUrK109eHQseHQ+Pj04LFVlW0xlKytdPXh0LHh0Pj49OCxVZVtMZSsrXT14dDtsZXQgVHQ9TnVtYmVyKCRlPj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIFVlW0xlKytdPVR0LFR0Pj49OCxVZVtMZSsrXT1UdCxUdD4+''@;'; put 'put ''PTgsVWVbTGUrK109VHQsVHQ+Pj04LFVlW0xlKytdPVR0LExlfWZ1bmN0aW9uIHBlKFVlLCRlLExlLG50LHJuKXtDZSgkZSxudCxybixVZSxMZSw3KTtsZXQgeHQ9TnVtYmVyKCRlJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7VWVbTGUrN109eHQseHQ+Pj04LFVlW0xlKzZdPXh0LHh0Pj49OCxVZVtM''@;'; put 'put ''ZSs1XT14dCx4dD4+PTgsVWVbTGUrNF09eHQ7bGV0IFR0PU51bWJlcigkZT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBVZVtMZSszXT1UdCxUdD4+PTgsVWVbTGUrMl09VHQsVHQ+Pj04LFVlW0xlKzFdPVR0LFR0Pj49OCxVZVtMZV09VHQsTGUrOH1mdW5jdGlvbiBQ''@;'; put 'put ''ZShVZSwkZSxMZSxudCxybix4dCl7aWYoTGUrbnQ+VWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihMZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBaZShVZSwkZSxMZSxudCxybil7cmV0''@;'; put 'put ''dXJuICRlPSskZSxMZT4+Pj0wLHJufHxQZShVZSwwLExlLDQpLG8ud3JpdGUoVWUsJGUsTGUsbnQsMjMsNCksTGUrNH1mdW5jdGlvbiBxZShVZSwkZSxMZSxudCxybil7cmV0dXJuICRlPSskZSxMZT4+Pj0wLHJufHxQZShVZSwwLExlLDgpLG8ud3JpdGUoVWUsJGUsTGUsbnQsNTIsOCksTGUr''@;'; put 'put ''OH1NLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbigkZSxMZSl7Y29uc3QgbnQ9dGhpcy5sZW5ndGg7KCRlPX5+JGUpPDA/KCRlKz1udCk8MCYmKCRlPTApOiRlPm50JiYoJGU9bnQpLChMZT12b2lkIDA9PT1MZT9udDp+fkxlKTwwPyhMZSs9bnQpPDAmJihMZT0wKTpMZT5udCYmKExlPW50KSxM''@;'; put 'put ''ZTwkZSYmKExlPSRlKTtjb25zdCBybj10aGlzLnN1YmFycmF5KCRlLExlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHJuLE0ucHJvdG90eXBlKSxybn0sTS5wcm90b3R5cGUucmVhZFVpbnRMRT1NLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKCRlLExlLG50KXskZT4+Pj0w''@;'; put 'put ''LExlPj4+PTAsbnR8fHEoJGUsTGUsdGhpcy5sZW5ndGgpO2xldCBybj10aGlzWyRlXSx4dD0xLFR0PTA7Zm9yKDsrK1R0PExlJiYoeHQqPTI1Nik7KXJuKz10aGlzWyRlK1R0XSp4dDtyZXR1cm4gcm59LE0ucHJvdG90eXBlLnJlYWRVaW50QkU9TS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5j''@;'; put 'put ''dGlvbigkZSxMZSxudCl7JGU+Pj49MCxMZT4+Pj0wLG50fHxxKCRlLExlLHRoaXMubGVuZ3RoKTtsZXQgcm49dGhpc1skZSstLUxlXSx4dD0xO2Zvcig7TGU+MCYmKHh0Kj0yNTYpOylybis9dGhpc1skZSstLUxlXSp4dDtyZXR1cm4gcm59LE0ucHJvdG90eXBlLnJlYWRVaW50OD1NLnByb3Rv''@;'; put 'put ''dHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oJGUsTGUpe3JldHVybiAkZT4+Pj0wLExlfHxxKCRlLDEsdGhpcy5sZW5ndGgpLHRoaXNbJGVdfSxNLnByb3RvdHlwZS5yZWFkVWludDE2TEU9TS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKCRlLExlKXtyZXR1cm4gJGU+Pj49MCxMZXx8''@;'; put 'put ''cSgkZSwyLHRoaXMubGVuZ3RoKSx0aGlzWyRlXXx0aGlzWyRlKzFdPDw4fSxNLnByb3RvdHlwZS5yZWFkVWludDE2QkU9TS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKCRlLExlKXtyZXR1cm4gJGU+Pj49MCxMZXx8cSgkZSwyLHRoaXMubGVuZ3RoKSx0aGlzWyRlXTw8OHx0aGlz''@;'; put 'put ''WyRlKzFdfSxNLnByb3RvdHlwZS5yZWFkVWludDMyTEU9TS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKCRlLExlKXtyZXR1cm4gJGU+Pj49MCxMZXx8cSgkZSw0LHRoaXMubGVuZ3RoKSwodGhpc1skZV18dGhpc1skZSsxXTw8OHx0aGlzWyRlKzJdPDwxNikrMTY3NzcyMTYqdGhp''@;'; put 'put ''c1skZSszXX0sTS5wcm90b3R5cGUucmVhZFVpbnQzMkJFPU0ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbigkZSxMZSl7cmV0dXJuICRlPj4+PTAsTGV8fHEoJGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1skZV0rKHRoaXNbJGUrMV08PDE2fHRoaXNbJGUrMl08PDh8dGhp''@;'; put 'put ''c1skZSszXSl9LE0ucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1ZdChmdW5jdGlvbigkZSl7a2UoJGU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgTGU9dGhpc1skZV0sbnQ9dGhpc1skZSs3XTsodm9pZCAwPT09TGV8fHZvaWQgMD09PW50KSYmeGUoJGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgcm49''@;'; put 'put ''TGUrMjU2KnRoaXNbKyskZV0rNjU1MzYqdGhpc1srKyRlXSt0aGlzWysrJGVdKjIqKjI0LHh0PXRoaXNbKyskZV0rMjU2KnRoaXNbKyskZV0rNjU1MzYqdGhpc1srKyRlXStudCoyKioyNDtyZXR1cm4gQmlnSW50KHJuKSsoQmlnSW50KHh0KTw8QmlnSW50KDMyKSl9KSxNLnByb3RvdHlwZS5y''@;'; put 'put ''ZWFkQmlnVUludDY0QkU9WXQoZnVuY3Rpb24oJGUpe2tlKCRlPj4+PTAsIm9mZnNldCIpO2NvbnN0IExlPXRoaXNbJGVdLG50PXRoaXNbJGUrN107KHZvaWQgMD09PUxlfHx2b2lkIDA9PT1udCkmJnhlKCRlLHRoaXMubGVuZ3RoLTgpO2NvbnN0IHJuPUxlKjIqKjI0KzY1NTM2KnRoaXNbKysk''@;'; put 'put ''ZV0rMjU2KnRoaXNbKyskZV0rdGhpc1srKyRlXSx4dD10aGlzWysrJGVdKjIqKjI0KzY1NTM2KnRoaXNbKyskZV0rMjU2KnRoaXNbKyskZV0rbnQ7cmV0dXJuKEJpZ0ludChybik8PEJpZ0ludCgzMikpK0JpZ0ludCh4dCl9KSxNLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oJGUsTGUs''@;'; put 'put ''bnQpeyRlPj4+PTAsTGU+Pj49MCxudHx8cSgkZSxMZSx0aGlzLmxlbmd0aCk7bGV0IHJuPXRoaXNbJGVdLHh0PTEsVHQ9MDtmb3IoOysrVHQ8TGUmJih4dCo9MjU2KTspcm4rPXRoaXNbJGUrVHRdKnh0O3JldHVybiB4dCo9MTI4LHJuPj14dCYmKHJuLT1NYXRoLnBvdygyLDgqTGUpKSxybn0s''@;'; put 'put ''TS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKCRlLExlLG50KXskZT4+Pj0wLExlPj4+PTAsbnR8fHEoJGUsTGUsdGhpcy5sZW5ndGgpO2xldCBybj1MZSx4dD0xLFR0PXRoaXNbJGUrLS1ybl07Zm9yKDtybj4wJiYoeHQqPTI1Nik7KVR0Kz10aGlzWyRlKy0tcm5dKnh0O3JldHVybiB4''@;'; put 'put ''dCo9MTI4LFR0Pj14dCYmKFR0LT1NYXRoLnBvdygyLDgqTGUpKSxUdH0sTS5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oJGUsTGUpe3JldHVybiAkZT4+Pj0wLExlfHxxKCRlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzWyRlXT8tMSooMjU1LXRoaXNbJGVdKzEpOnRoaXNbJGVdfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbigkZSxMZSl7JGU+Pj49MCxMZXx8cSgkZSwyLHRoaXMubGVuZ3RoKTtjb25zdCBudD10aGlzWyRlXXx0aGlzWyRlKzFdPDw4O3JldHVybiAzMjc2OCZudD80Mjk0OTAxNzYwfG50Om50fSxNLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlv''@;'; put 'put ''bigkZSxMZSl7JGU+Pj49MCxMZXx8cSgkZSwyLHRoaXMubGVuZ3RoKTtjb25zdCBudD10aGlzWyRlKzFdfHRoaXNbJGVdPDw4O3JldHVybiAzMjc2OCZudD80Mjk0OTAxNzYwfG50Om50fSxNLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbigkZSxMZSl7cmV0dXJuICRlPj4+PTAsTGV8''@;'; put 'put ''fHEoJGUsNCx0aGlzLmxlbmd0aCksdGhpc1skZV18dGhpc1skZSsxXTw8OHx0aGlzWyRlKzJdPDwxNnx0aGlzWyRlKzNdPDwyNH0sTS5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oJGUsTGUpe3JldHVybiAkZT4+Pj0wLExlfHxxKCRlLDQsdGhpcy5sZW5ndGgpLHRoaXNbJGVdPDwy''@;'; put 'put ''NHx0aGlzWyRlKzFdPDwxNnx0aGlzWyRlKzJdPDw4fHRoaXNbJGUrM119LE0ucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPVl0KGZ1bmN0aW9uKCRlKXtrZSgkZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBMZT10aGlzWyRlXSxudD10aGlzWyRlKzddO3JldHVybih2b2lkIDA9PT1MZXx8dm9pZCAw''@;'; put 'put ''PT09bnQpJiZ4ZSgkZSx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRoaXNbJGUrNF0rMjU2KnRoaXNbJGUrNV0rNjU1MzYqdGhpc1skZSs2XSsobnQ8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChMZSsyNTYqdGhpc1srKyRlXSs2NTUzNip0aGlzWysrJGVdKzE2Nzc3MjE2KnRoaXNbKyskZV0p''@;'; put 'put ''fSksTS5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9WXQoZnVuY3Rpb24oJGUpe2tlKCRlPj4+PTAsIm9mZnNldCIpO2NvbnN0IExlPXRoaXNbJGVdLG50PXRoaXNbJGUrN107KHZvaWQgMD09PUxlfHx2b2lkIDA9PT1udCkmJnhlKCRlLHRoaXMubGVuZ3RoLTgpO2NvbnN0IHJuPShMZTw8MjQp''@;'; put 'put ''KzY1NTM2KnRoaXNbKyskZV0rMjU2KnRoaXNbKyskZV0rdGhpc1srKyRlXTtyZXR1cm4oQmlnSW50KHJuKTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyskZV0rNjU1MzYqdGhpc1srKyRlXSsyNTYqdGhpc1srKyRlXStudCl9KSxNLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1m''@;'; put 'put ''dW5jdGlvbigkZSxMZSl7cmV0dXJuICRlPj4+PTAsTGV8fHEoJGUsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsJGUsITAsMjMsNCl9LE0ucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKCRlLExlKXtyZXR1cm4gJGU+Pj49MCxMZXx8cSgkZSw0LHRoaXMubGVuZ3RoKSxvLnJlYWQo''@;'; put 'put ''dGhpcywkZSwhMSwyMyw0KX0sTS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKCRlLExlKXtyZXR1cm4gJGU+Pj49MCxMZXx8cSgkZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcywkZSwhMCw1Miw4KX0sTS5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKCRlLExlKXty''@;'; put 'put ''ZXR1cm4gJGU+Pj49MCxMZXx8cSgkZSw4LHRoaXMubGVuZ3RoKSxvLnJlYWQodGhpcywkZSwhMSw1Miw4KX0sTS5wcm90b3R5cGUud3JpdGVVaW50TEU9TS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oJGUsTGUsbnQscm4peyRlPSskZSxMZT4+Pj0wLG50Pj4+PTAscm58fEcodGhp''@;'; put 'put ''cywkZSxMZSxudCxNYXRoLnBvdygyLDgqbnQpLTEsMCk7bGV0IHh0PTEsVHQ9MDtmb3IodGhpc1tMZV09MjU1JiRlOysrVHQ8bnQmJih4dCo9MjU2KTspdGhpc1tMZStUdF09JGUveHQmMjU1O3JldHVybiBMZStudH0sTS5wcm90b3R5cGUud3JpdGVVaW50QkU9TS5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50QkU9ZnVuY3Rpb24oJGUsTGUsbnQscm4peyRlPSskZSxMZT4+Pj0wLG50Pj4+PTAscm58fEcodGhpcywkZSxMZSxudCxNYXRoLnBvdygyLDgqbnQpLTEsMCk7bGV0IHh0PW50LTEsVHQ9MTtmb3IodGhpc1tMZSt4dF09MjU1JiRlOy0teHQ+PTAmJihUdCo9MjU2KTspdGhpc1tMZSt4dF09''@;'; put 'put ''JGUvVHQmMjU1O3JldHVybiBMZStudH0sTS5wcm90b3R5cGUud3JpdGVVaW50OD1NLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKCRlLExlLG50KXtyZXR1cm4gJGU9KyRlLExlPj4+PTAsbnR8fEcodGhpcywkZSxMZSwxLDI1NSwwKSx0aGlzW0xlXT0yNTUmJGUsTGUrMX0sTS5wcm90''@;'; put 'put ''b3R5cGUud3JpdGVVaW50MTZMRT1NLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKCRlLExlLG50KXtyZXR1cm4gJGU9KyRlLExlPj4+PTAsbnR8fEcodGhpcywkZSxMZSwyLDY1NTM1LDApLHRoaXNbTGVdPTI1NSYkZSx0aGlzW0xlKzFdPSRlPj4+OCxMZSsyfSxNLnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZVVpbnQxNkJFPU0ucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oJGUsTGUsbnQpe3JldHVybiAkZT0rJGUsTGU+Pj49MCxudHx8Ryh0aGlzLCRlLExlLDIsNjU1MzUsMCksdGhpc1tMZV09JGU+Pj44LHRoaXNbTGUrMV09MjU1JiRlLExlKzJ9LE0ucHJvdG90eXBlLndy''@;'; put 'put ''aXRlVWludDMyTEU9TS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbigkZSxMZSxudCl7cmV0dXJuICRlPSskZSxMZT4+Pj0wLG50fHxHKHRoaXMsJGUsTGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbTGUrM109JGU+Pj4yNCx0aGlzW0xlKzJdPSRlPj4+MTYsdGhpc1tMZSsxXT0kZT4+''@;'; put 'put ''PjgsdGhpc1tMZV09MjU1JiRlLExlKzR9LE0ucHJvdG90eXBlLndyaXRlVWludDMyQkU9TS5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbigkZSxMZSxudCl7cmV0dXJuICRlPSskZSxMZT4+Pj0wLG50fHxHKHRoaXMsJGUsTGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbTGVdPSRlPj4+''@;'; put 'put ''MjQsdGhpc1tMZSsxXT0kZT4+PjE2LHRoaXNbTGUrMl09JGU+Pj44LHRoaXNbTGUrM109MjU1JiRlLExlKzR9LE0ucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEU9WXQoZnVuY3Rpb24oJGUsTGU9MCl7cmV0dXJuIFEodGhpcywkZSxMZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmYiKSl9KSxNLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPVl0KGZ1bmN0aW9uKCRlLExlPTApe3JldHVybiBwZSh0aGlzLCRlLExlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLE0ucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oJGUsTGUsbnQs''@;'; put 'put ''cm4pe2lmKCRlPSskZSxMZT4+Pj0wLCFybil7Y29uc3QgWHQ9TWF0aC5wb3coMiw4Km50LTEpO0codGhpcywkZSxMZSxudCxYdC0xLC1YdCl9bGV0IHh0PTAsVHQ9MSx5bj0wO2Zvcih0aGlzW0xlXT0yNTUmJGU7Kyt4dDxudCYmKFR0Kj0yNTYpOykkZTwwJiYwPT09eW4mJjAhPT10aGlzW0xl''@;'; put 'put ''K3h0LTFdJiYoeW49MSksdGhpc1tMZSt4dF09KCRlL1R0fDApLXluJjI1NTtyZXR1cm4gTGUrbnR9LE0ucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oJGUsTGUsbnQscm4pe2lmKCRlPSskZSxMZT4+Pj0wLCFybil7Y29uc3QgWHQ9TWF0aC5wb3coMiw4Km50LTEpO0codGhpcywkZSxM''@;'; put 'put ''ZSxudCxYdC0xLC1YdCl9bGV0IHh0PW50LTEsVHQ9MSx5bj0wO2Zvcih0aGlzW0xlK3h0XT0yNTUmJGU7LS14dD49MCYmKFR0Kj0yNTYpOykkZTwwJiYwPT09eW4mJjAhPT10aGlzW0xlK3h0KzFdJiYoeW49MSksdGhpc1tMZSt4dF09KCRlL1R0fDApLXluJjI1NTtyZXR1cm4gTGUrbnR9LE0u''@;'; put 'put ''cHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbigkZSxMZSxudCl7cmV0dXJuICRlPSskZSxMZT4+Pj0wLG50fHxHKHRoaXMsJGUsTGUsMSwxMjcsLTEyOCksJGU8MCYmKCRlPTI1NSskZSsxKSx0aGlzW0xlXT0yNTUmJGUsTGUrMX0sTS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9u''@;'; put 'put ''KCRlLExlLG50KXtyZXR1cm4gJGU9KyRlLExlPj4+PTAsbnR8fEcodGhpcywkZSxMZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tMZV09MjU1JiRlLHRoaXNbTGUrMV09JGU+Pj44LExlKzJ9LE0ucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbigkZSxMZSxudCl7cmV0dXJuICRlPSskZSxM''@;'; put 'put ''ZT4+Pj0wLG50fHxHKHRoaXMsJGUsTGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbTGVdPSRlPj4+OCx0aGlzW0xlKzFdPTI1NSYkZSxMZSsyfSxNLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oJGUsTGUsbnQpe3JldHVybiAkZT0rJGUsTGU+Pj49MCxudHx8Ryh0aGlzLCRlLExlLDQs''@;'; put 'put ''MjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tMZV09MjU1JiRlLHRoaXNbTGUrMV09JGU+Pj44LHRoaXNbTGUrMl09JGU+Pj4xNix0aGlzW0xlKzNdPSRlPj4+MjQsTGUrNH0sTS5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKCRlLExlLG50KXtyZXR1cm4gJGU9KyRlLExlPj4+''@;'; put 'put ''PTAsbnR8fEcodGhpcywkZSxMZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLCRlPDAmJigkZT00Mjk0OTY3Mjk1KyRlKzEpLHRoaXNbTGVdPSRlPj4+MjQsdGhpc1tMZSsxXT0kZT4+PjE2LHRoaXNbTGUrMl09JGU+Pj44LHRoaXNbTGUrM109MjU1JiRlLExlKzR9LE0ucHJvdG90eXBlLndy''@;'; put 'put ''aXRlQmlnSW50NjRMRT1ZdChmdW5jdGlvbigkZSxMZT0wKXtyZXR1cm4gUSh0aGlzLCRlLExlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksTS5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFPVl0KGZ1bmN0aW9uKCRlLExlPTAp''@;'; put 'put ''e3JldHVybiBwZSh0aGlzLCRlLExlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksTS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKCRlLExlLG50KXtyZXR1cm4gWmUodGhpcywkZSxMZSwhMCxudCl9LE0ucHJvdG90''@;'; put 'put ''eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbigkZSxMZSxudCl7cmV0dXJuIFplKHRoaXMsJGUsTGUsITEsbnQpfSxNLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKCRlLExlLG50KXtyZXR1cm4gcWUodGhpcywkZSxMZSwhMCxudCl9LE0ucHJvdG90eXBlLndyaXRlRG91YmxlQkU9''@;'; put 'put ''ZnVuY3Rpb24oJGUsTGUsbnQpe3JldHVybiBxZSh0aGlzLCRlLExlLCExLG50KX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigkZSxMZSxudCxybil7aWYoIU0uaXNCdWZmZXIoJGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKG50fHwo''@;'; put 'put ''bnQ9MCksIXJuJiYwIT09cm4mJihybj10aGlzLmxlbmd0aCksTGU+PSRlLmxlbmd0aCYmKExlPSRlLmxlbmd0aCksTGV8fChMZT0wKSxybj4wJiZybjxudCYmKHJuPW50KSxybj09PW50fHwwPT09JGUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoTGU8MCl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG50PDB8fG50Pj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocm48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTty''@;'; put 'put ''bj50aGlzLmxlbmd0aCYmKHJuPXRoaXMubGVuZ3RoKSwkZS5sZW5ndGgtTGU8cm4tbnQmJihybj0kZS5sZW5ndGgtTGUrbnQpO2NvbnN0IHh0PXJuLW50O3JldHVybiB0aGlzPT09JGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29w''@;'; put 'put ''eVdpdGhpbihMZSxudCxybik6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoJGUsdGhpcy5zdWJhcnJheShudCxybiksTGUpLHh0fSxNLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKCRlLExlLG50LHJuKXtpZigic3RyaW5nIj09dHlwZW9mICRlKXtpZigic3RyaW5nIj09dHlwZW9mIExl''@;'; put 'put ''Pyhybj1MZSxMZT0wLG50PXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIG50JiYocm49bnQsbnQ9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PXJuJiYic3RyaW5nIiE9dHlwZW9mIHJuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHJuJiYhTS5pc0VuY29kaW5nKHJuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3JuKTtpZigxPT09JGUubGVuZ3RoKXtjb25zdCBUdD0kZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1ybiYmVHQ8MTI4fHwibGF0aW4xIj09PXJuKSYmKCRlPVR0''@;'; put 'put ''KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgJGU/JGUmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiAkZSYmKCRlPU51bWJlcigkZSkpO2lmKExlPDB8fHRoaXMubGVuZ3RoPExlfHx0aGlzLmxlbmd0aDxudCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobnQ8PUxl''@;'; put 'put ''KXJldHVybiB0aGlzO2xldCB4dDtpZihMZT4+Pj0wLG50PXZvaWQgMD09PW50P3RoaXMubGVuZ3RoOm50Pj4+MCwkZXx8KCRlPTApLCJudW1iZXIiPT10eXBlb2YgJGUpZm9yKHh0PUxlO3h0PG50OysreHQpdGhpc1t4dF09JGU7ZWxzZXtjb25zdCBUdD1NLmlzQnVmZmVyKCRlKT8kZTpNLmZy''@;'; put 'put ''b20oJGUscm4pLHluPVR0Lmxlbmd0aDtpZigwPT09eW4pdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInKyRlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoeHQ9MDt4dDxudC1MZTsrK3h0KXRoaXNbeHQrTGVdPVR0W3h0JXluXX1yZXR1cm4gdGhpc307''@;'; put 'put ''Y29uc3QgdmU9e307ZnVuY3Rpb24gdWUoVWUsJGUsTGUpe3ZlW1VlXT1jbGFzcyBleHRlbmRzIExle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWVzc2FnZSIse3ZhbHVlOiRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBbJHtVZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdldCBjb2RlKCl7cmV0dXJuIFVlfXNldCBjb2RlKHJuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOnJuLHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske1VlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiB6ZShVZSl7bGV0ICRlPSIiLExlPVVlLmxlbmd0aDtjb25zdCBudD0iLSI9PT1VZVswXT8xOjA7Zm9yKDtMZT49bnQrNDtMZS09Mykk''@;'; put 'put ''ZT1gXyR7VWUuc2xpY2UoTGUtMyxMZSl9JHskZX1gO3JldHVybmAke1VlLnNsaWNlKDAsTGUpfSR7JGV9YH1mdW5jdGlvbiBDZShVZSwkZSxMZSxudCxybix4dCl7aWYoVWU+TGV8fFVlPCRlKXtjb25zdCBUdD0iYmlnaW50Ij09dHlwZW9mICRlPyJuIjoiIjtsZXQgeW47dGhyb3cgeW49eHQ+''@;'; put 'put ''Mz8wPT09JGV8fCRlPT09QmlnSW50KDApP2A+PSAwJHtUdH0gYW5kIDwgMiR7VHR9ICoqICR7OCooeHQrMSl9JHtUdH1gOmA+PSAtKDIke1R0fSAqKiAkezgqKHh0KzEpLTF9JHtUdH0pIGFuZCA8IDIgKiogJHs4Kih4dCsxKS0xfSR7VHR9YDpgPj0gJHskZX0ke1R0fSBhbmQgPD0gJHtMZX0k''@;'; put 'put ''e1R0fWAsbmV3IHZlLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIix5bixVZSl9IWZ1bmN0aW9uIE9lKFVlLCRlLExlKXtrZSgkZSwib2Zmc2V0IiksKHZvaWQgMD09PVVlWyRlXXx8dm9pZCAwPT09VWVbJGUrTGVdKSYmeGUoJGUsVWUubGVuZ3RoLShMZSsxKSl9KG50LHJuLHh0KX1mdW5jdGlv''@;'; put 'put ''biBrZShVZSwkZSl7aWYoIm51bWJlciIhPXR5cGVvZiBVZSl0aHJvdyBuZXcgdmUuRVJSX0lOVkFMSURfQVJHX1RZUEUoJGUsIm51bWJlciIsVWUpfWZ1bmN0aW9uIHhlKFVlLCRlLExlKXt0aHJvdyBNYXRoLmZsb29yKFVlKSE9PVVlPyhrZShVZSxMZSksbmV3IHZlLkVSUl9PVVRfT0ZfUkFO''@;'; put 'put ''R0UoTGV8fCJvZmZzZXQiLCJhbiBpbnRlZ2VyIixVZSkpOiRlPDA/bmV3IHZlLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUzpuZXcgdmUuRVJSX09VVF9PRl9SQU5HRShMZXx8Im9mZnNldCIsYD49ICR7TGU/MTowfSBhbmQgPD0gJHskZX1gLFVlKX11ZSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9V''@;'; put 'put ''TkRTIixmdW5jdGlvbihVZSl7cmV0dXJuIFVlP2Ake1VlfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOiJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzIn0sUmFuZ2VFcnJvciksdWUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihVZSwk''@;'; put 'put ''ZSl7cmV0dXJuYFRoZSAiJHtVZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgJGV9YH0sVHlwZUVycm9yKSx1ZSgiRVJSX09VVF9PRl9SQU5HRSIsZnVuY3Rpb24oVWUsJGUsTGUpe2xldCBudD1gVGhlIHZhbHVlIG9mICIke1VlfSIg''@;'; put 'put ''aXMgb3V0IG9mIHJhbmdlLmAscm49TGU7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoTGUpJiZNYXRoLmFicyhMZSk+NDI5NDk2NzI5Nj9ybj16ZShTdHJpbmcoTGUpKToiYmlnaW50Ij09dHlwZW9mIExlJiYocm49U3RyaW5nKExlKSwoTGU+QmlnSW50KDIpKipCaWdJbnQoMzIpfHxMZTwtKEJp''@;'; put 'put ''Z0ludCgyKSoqQmlnSW50KDMyKSkpJiYocm49emUocm4pKSxybis9Im4iKSxudCs9YCBJdCBtdXN0IGJlICR7JGV9LiBSZWNlaXZlZCAke3JufWAsbnR9LFJhbmdlRXJyb3IpO2NvbnN0IE1lPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gYmUoVWUsJGUpe2xldCBMZTskZT0kZXx8MS8w''@;'; put 'put ''O2NvbnN0IG50PVVlLmxlbmd0aDtsZXQgcm49bnVsbDtjb25zdCB4dD1bXTtmb3IobGV0IFR0PTA7VHQ8bnQ7KytUdCl7aWYoTGU9VWUuY2hhckNvZGVBdChUdCksTGU+NTUyOTUmJkxlPDU3MzQ0KXtpZighcm4pe2lmKExlPjU2MzE5KXsoJGUtPTMpPi0xJiZ4dC5wdXNoKDIzOSwxOTEsMTg5''@;'; put 'put ''KTtjb250aW51ZX1pZihUdCsxPT09bnQpeygkZS09Myk+LTEmJnh0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfXJuPUxlO2NvbnRpbnVlfWlmKExlPDU2MzIwKXsoJGUtPTMpPi0xJiZ4dC5wdXNoKDIzOSwxOTEsMTg5KSxybj1MZTtjb250aW51ZX1MZT02NTUzNisocm4tNTUyOTY8PDEw''@;'; put 'put ''fExlLTU2MzIwKX1lbHNlIHJuJiYoJGUtPTMpPi0xJiZ4dC5wdXNoKDIzOSwxOTEsMTg5KTtpZihybj1udWxsLExlPDEyOCl7aWYoKCRlLT0xKTwwKWJyZWFrO3h0LnB1c2goTGUpfWVsc2UgaWYoTGU8MjA0OCl7aWYoKCRlLT0yKTwwKWJyZWFrO3h0LnB1c2goTGU+PjZ8MTkyLDYzJkxlfDEy''@;'; put 'put ''OCl9ZWxzZSBpZihMZTw2NTUzNil7aWYoKCRlLT0zKTwwKWJyZWFrO3h0LnB1c2goTGU+PjEyfDIyNCxMZT4+NiY2M3wxMjgsNjMmTGV8MTI4KX1lbHNle2lmKCEoTGU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoJGUtPTQpPDApYnJlYWs7eHQu''@;'; put 'put ''cHVzaChMZT4+MTh8MjQwLExlPj4xMiY2M3wxMjgsTGU+PjYmNjN8MTI4LDYzJkxlfDEyOCl9fXJldHVybiB4dH1mdW5jdGlvbiBLZShVZSl7cmV0dXJuIGgudG9CeXRlQXJyYXkoZnVuY3Rpb24gSWUoVWUpe2lmKChVZT0oVWU9VWUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoTWUs''@;'; put 'put ''IiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO1VlLmxlbmd0aCU0IT0wOylVZSs9Ij0iO3JldHVybiBVZX0oVWUpKX1mdW5jdGlvbiBZZShVZSwkZSxMZSxudCl7bGV0IHJuO2Zvcihybj0wO3JuPG50JiYhKHJuK0xlPj0kZS5sZW5ndGh8fHJuPj1VZS5sZW5ndGgpOysrcm4pJGVbcm4rTGVd''@;'; put 'put ''PVVlW3JuXTtyZXR1cm4gcm59ZnVuY3Rpb24gcXQoVWUsJGUpe3JldHVybiBVZSBpbnN0YW5jZW9mICRlfHxudWxsIT1VZSYmbnVsbCE9VWUuY29uc3RydWN0b3ImJm51bGwhPVVlLmNvbnN0cnVjdG9yLm5hbWUmJlVlLmNvbnN0cnVjdG9yLm5hbWU9PT0kZS5uYW1lfWZ1bmN0aW9uIGh0KFVl''@;'; put 'put ''KXtyZXR1cm4gVWUhPVVlfWNvbnN0IHZ0PWZ1bmN0aW9uKCl7Y29uc3QgVWU9IjAxMjM0NTY3ODlhYmNkZWYiLCRlPW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgTGU9MDtMZTwxNjsrK0xlKXtjb25zdCBudD0xNipMZTtmb3IobGV0IHJuPTA7cm48MTY7KytybikkZVtudCtybl09VWVbTGVdK1Vl''@;'; put 'put ''W3JuXX1yZXR1cm4gJGV9KCk7ZnVuY3Rpb24gWXQoVWUpe3JldHVybiB0eXBlb2YgQmlnSW50PiJ1Ij90dDpVZX1mdW5jdGlvbiB0dCgpe3Rocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKX19LDUxMTY6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg4NjEyKSxo''@;'; put 'put ''PWQoMTc2OCksbz1kKDg5MjgpLEk9ZCg5NzcwKTt0ZS5leHBvcnRzPUl8fFMuY2FsbChvLGgpfSwzMTkyOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoODYxMiksaD1kKDE3NjgpLG89ZCg1MTE2KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG8oUyxoLGFyZ3VtZW50cyl9''@;'; put 'put ''fSwxNzY4OnRlPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5fSw4OTI4OnRlPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGx9LDMxOToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg2MTIpLGg9''@;'; put 'put ''ZCg0NDUzKSxvPWQoODkyOCksST1kKDUxMTYpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oVCl7aWYoVC5sZW5ndGg8MXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFRbMF0pdGhyb3cgbmV3IGgoImEgZnVuY3Rpb24gaXMgcmVxdWlyZWQiKTtyZXR1cm4gSShTLG8sVCl9fSw5NzcwOnRlPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3RlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fSwxOTI0Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoMjEwKSxoPWQoNTU1OSksbz1oKFMoIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiIpKTt0ZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KGYsVCl7dmFyIEE9UyhmLCEhVCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEEmJm8oZiwiLnByb3RvdHlwZS4iKT4tMT9oKEEpOkF9fSw1NTU5Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNzc3MSksaD1kKDQ0MjkpLG89ZCgzMTkpLEk9ZCgzMTkyKTt0ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKFQpe3ZhciBBPW8oYXJndW1lbnRzKSxNPVQubGVuZ3RoLShhcmd1bWVudHMubGVuZ3RoLTEpO3JldHVybiBTKEEsMSsoTT4wP006MCksITApfSxoP2godGUuZXhwb3J0cywiYXBwbHkiLHt2YWx1ZTpJfSk6dGUuZXhwb3J0cy5hcHBseT1JfSw3Mzc5Oih0ZSxqLGQpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBTPWQoMjEwKSxoPWQoMzE5KSxvPWgoW1MoIiVTdHJpbmcucHJvdG90eXBlLmluZGV4T2YlIildKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGYsVCl7dmFyIEE9UyhmLCEhVCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEEmJm8oZiwiLnByb3RvdHlwZS4iKT4tMT9oKFtBXSk6''@;'; put 'put ''QX19LDEwMjc6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg5NTA5KS5CdWZmZXIsaD1kKDI4MzApLlRyYW5zZm9ybSxvPWQoMjU1MykucztmdW5jdGlvbiBmKE8pe2guY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgTyx0aGlzLmhhc2hNb2RlP3RoaXNb''@;'; put 'put ''T109dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9ZCg1NzE3KShmLGgpO3Zh''@;'; put 'put ''ciBUPXR5cGVvZiBVaW50OEFycmF5PCJ1IixBPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3JiYoUy5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxTLlRZUEVEX0FSUkFZX1NVUFBPUlQpO2YucHJvdG90eXBl''@;'; put 'put ''LnVwZGF0ZT1mdW5jdGlvbihPLEQsRSl7dmFyIEI9ZnVuY3Rpb24gTShPLEQpe2lmKE8gaW5zdGFuY2VvZiBTKXJldHVybiBPO2lmKCJzdHJpbmciPT10eXBlb2YgTylyZXR1cm4gUy5mcm9tKE8sRCk7aWYoQSYmQXJyYXlCdWZmZXIuaXNWaWV3KE8pKXtpZigwPT09Ty5ieXRlTGVuZ3RoKXJl''@;'; put 'put ''dHVybiBTLmFsbG9jKDApO3ZhciBFPVMuZnJvbShPLmJ1ZmZlcixPLmJ5dGVPZmZzZXQsTy5ieXRlTGVuZ3RoKTtpZihFLmJ5dGVMZW5ndGg9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIEV9aWYoVCYmTyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fFMuaXNCdWZmZXIoTykmJk8uY29uc3RydWN0b3Im''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZPLmNvbnN0cnVjdG9yLmlzQnVmZmVyKE8pKXJldHVybiBTLmZyb20oTyk7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNl''@;'; put 'put ''IG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KE8sRCksRj10aGlzLl91cGRhdGUoQik7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooRSYmKEY9dGhpcy5fdG9TdHJpbmcoRixFKSksRil9LGYucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxmLnBy''@;'; put 'put ''b3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LGYucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0''@;'; put 'put ''YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sZi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxmLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8sRCxFKXt2YXIgQjt0cnl7''@;'; put 'put ''dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoTyk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShPKSl9Y2F0Y2goRil7Qj1GfWZpbmFsbHl7RShCKX19LGYucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgRDt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChFKXtEPUV9''@;'; put 'put ''TyhEKX0sZi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oTyl7dmFyIEQ9dGhpcy5fX2ZpbmFsKCl8fFMuYWxsb2MoMCk7cmV0dXJuIE8mJihEPXRoaXMuX3RvU3RyaW5nKEQsTywhMCkpLER9LGYucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihPLEQsRSl7aWYodGhpcy5f''@;'; put 'put ''ZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IG8oRCksdGhpcy5fZW5jb2Rpbmc9RCksdGhpcy5fZW5jb2RpbmchPT1EKXRocm93IG5ldyBFcnJvcigiY2FuXHUyMDE5dCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEI9dGhpcy5fZGVjb2Rlci53cml0ZShPKTtyZXR1cm4gRSYmKEIrPXRoaXMu''@;'; put 'put ''X2RlY29kZXIuZW5kKCkpLEJ9LHRlLmV4cG9ydHM9Zn0sNTEwODoodGUsaixkKT0+e3ZhciBTPWQoOTUzOSksaD1kKDkyODIpO2Z1bmN0aW9uIG8oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX12YXIgZixJPUFycmF5LnByb3RvdHlwZS5zbGljZSxUPXt9O2Y9dHlwZW9mIGQuZzwidSIm''@;'; put 'put ''JmQuZy5jb25zb2xlP2QuZy5jb25zb2xlOnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZT93aW5kb3cuY29uc29sZTp7fTtmb3IodmFyIEE9W1tmdW5jdGlvbiBCKCl7fSwibG9nIl0sW2Z1bmN0aW9uIEYoKXtmLmxvZy5hcHBseShmLGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0''@;'; put 'put ''aW9uIE4oKXtmLmxvZy5hcHBseShmLGFyZ3VtZW50cyl9LCJ3YXJuIl0sW2Z1bmN0aW9uIEgoKXtmLndhcm4uYXBwbHkoZixhcmd1bWVudHMpfSwiZXJyb3IiXSxbZnVuY3Rpb24geihuZSl7VFtuZV09bygpfSwidGltZSJdLFtmdW5jdGlvbiBaKG5lKXt2YXIgc2U9VFtuZV07aWYoIXNlKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiTm8gc3VjaCBsYWJlbDogIituZSk7ZGVsZXRlIFRbbmVdO3ZhciBoZT1vKCktc2U7Zi5sb2cobmUrIjogIitoZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24gVSgpe3ZhciBuZT1uZXcgRXJyb3I7bmUubmFtZT0iVHJhY2UiLG5lLm1lc3NhZ2U9Uy5mb3JtYXQu''@;'; put 'put ''YXBwbHkobnVsbCxhcmd1bWVudHMpLGYuZXJyb3IobmUuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24gSyhuZSl7Zi5sb2coUy5pbnNwZWN0KG5lKSsiXG4iKX0sImRpciJdLFtmdW5jdGlvbiBYKG5lKXtpZighbmUpe3ZhciBzZT1JLmNhbGwoYXJndW1lbnRzLDEpO2gub2soITEsUy5mb3Jt''@;'; put 'put ''YXQuYXBwbHkobnVsbCxzZSkpfX0sImFzc2VydCJdXSxNPTA7TTxBLmxlbmd0aDtNKyspe3ZhciBPPUFbTV0sRT1PWzFdO2ZbRV18fChmW0VdPU9bMF0pfXRlLmV4cG9ydHM9Zn0sNjQ5NzoodGUsaixkKT0+e3ZhciBTPWQoODc2NCkuQnVmZmVyO2Z1bmN0aW9uIHooWil7cmV0dXJuIE9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChaKX1qLmlzQXJyYXk9ZnVuY3Rpb24gaChaKXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KFopOiJbb2JqZWN0IEFycmF5XSI9PT16KFopfSxqLmlzQm9vbGVhbj1mdW5jdGlvbiBvKFope3JldHVybiJib29sZWFuIj09dHlwZW9m''@;'; put 'put ''IFp9LGouaXNOdWxsPWZ1bmN0aW9uIEkoWil7cmV0dXJuIG51bGw9PT1afSxqLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIGYoWil7cmV0dXJuIG51bGw9PVp9LGouaXNOdW1iZXI9ZnVuY3Rpb24gVChaKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFp9LGouaXNTdHJpbmc9ZnVuY3Rpb24g''@;'; put 'put ''QShaKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFp9LGouaXNTeW1ib2w9ZnVuY3Rpb24gTShaKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFp9LGouaXNVbmRlZmluZWQ9ZnVuY3Rpb24gTyhaKXtyZXR1cm4gdm9pZCAwPT09Wn0sai5pc1JlZ0V4cD1mdW5jdGlvbiBEKFope3JldHVybiJbb2Jq''@;'; put 'put ''ZWN0IFJlZ0V4cF0iPT09eihaKX0sai5pc09iamVjdD1mdW5jdGlvbiBFKFope3JldHVybiJvYmplY3QiPT10eXBlb2YgWiYmbnVsbCE9PVp9LGouaXNEYXRlPWZ1bmN0aW9uIEIoWil7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09eihaKX0sai5pc0Vycm9yPWZ1bmN0aW9uIEYoWil7cmV0dXJu''@;'; put 'put ''IltvYmplY3QgRXJyb3JdIj09PXooWil8fFogaW5zdGFuY2VvZiBFcnJvcn0sai5pc0Z1bmN0aW9uPWZ1bmN0aW9uIE4oWil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFp9LGouaXNQcmltaXRpdmU9ZnVuY3Rpb24gSChaKXtyZXR1cm4gbnVsbD09PVp8fCJib29sZWFuIj09dHlwZW9mIFp8''@;'; put 'put ''fCJudW1iZXIiPT10eXBlb2YgWnx8InN0cmluZyI9PXR5cGVvZiBafHwic3ltYm9sIj09dHlwZW9mIFp8fHR5cGVvZiBaPiJ1In0sai5pc0J1ZmZlcj1TLmlzQnVmZmVyfSw2MzkzOih0ZSxqLGQpPT57dmFyIFM9ZCg4NzY0KS5CdWZmZXIsaD1kKDY5NDgpLG89ZCg2NDI2KTt0ZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKE0pe3JldHVybiBuZXcgZihNKX07dmFyIEk9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTky''@;'; put 'put ''djE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gZihBKXt0aGlz''@;'; put 'put ''LmN1cnZlVHlwZT1JW0FdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6QX0pLHRoaXMuY3VydmU9bmV3IGguZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBUKEEsTSxPKXtBcnJheS5pc0FycmF5KEEpfHwoQT1BLnRvQXJyYXko''@;'; put 'put ''KSk7dmFyIEQ9bmV3IFMoQSk7aWYoTyYmRC5sZW5ndGg8Tyl7dmFyIEU9bmV3IFMoTy1ELmxlbmd0aCk7RS5maWxsKDApLEQ9Uy5jb25jYXQoW0UsRF0pfXJldHVybiBNP0QudG9TdHJpbmcoTSk6RH1JLnAyMjQ9SS5zZWNwMjI0cjEsSS5wMjU2PUkuc2VjcDI1NnIxPUkucHJpbWUyNTZ2MSxJ''@;'; put 'put ''LnAxOTI9SS5zZWNwMTkycjE9SS5wcmltZTE5MnYxLEkucDM4ND1JLnNlY3AzODRyMSxJLnA1MjE9SS5zZWNwNTIxcjEsZi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKEEsTSl7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tl''@;'; put 'put ''eShBLE0pfSxmLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKEEsTSxPKXtyZXR1cm4gTT1NfHwidXRmOCIsUy5pc0J1ZmZlcihBKXx8KEE9bmV3IFMoQSxNKSksVCh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoQSkuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRl''@;'; put 'put ''KCkpLmdldFgoKSxPLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxmLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oQSxNKXt2YXIgTz10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PU0sITApO3JldHVybiJoeWJyaWQiPT09TSYmKE9bMF09T1tPLmxlbmd0aC0x''@;'; put 'put ''XSUyPzc6NiksVChPLEEpfSxmLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKEEpe3JldHVybiBUKHRoaXMua2V5cy5nZXRQcml2YXRlKCksQSl9LGYucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihBLE0pe3JldHVybiBNPU18fCJ1dGY4IixTLmlzQnVmZmVyKEEpfHwo''@;'; put 'put ''QT1uZXcgUyhBLE0pKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhBKSx0aGlzfSxmLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKEEsTSl7TT1NfHwidXRmOCIsUy5pc0J1ZmZlcihBKXx8KEE9bmV3IFMoQSxNKSk7dmFyIE89bmV3IG8oQSk7cmV0dXJuIE89Ty50b1N0cmluZygx''@;'; put 'put ''NiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShPKSx0aGlzfX0sNjQyNjpmdW5jdGlvbih0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKFIscyl7aWYoIVIpdGhyb3cgbmV3IEVycm9yKHN8fCJB''@;'; put 'put ''c3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gSShSLHMpe1Iuc3VwZXJfPXM7dmFyIHU9ZnVuY3Rpb24oKXt9O3UucHJvdG90eXBlPXMucHJvdG90eXBlLFIucHJvdG90eXBlPW5ldyB1LFIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVJ9ZnVuY3Rpb24gZihSLHMsdSl7aWYoZi5pc0JOKFIpKXJl''@;'; put 'put ''dHVybiBSO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1SJiYoKCJsZSI9PT1zfHwiYmUiPT09cykmJih1PXMscz0xMCksdGhpcy5faW5pdChSfHwwLHN8fDEwLHV8fCJiZSIpKX12YXIgVDsib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IFM/Uy5leHBvcnRzPWY6aC5CTj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDg2MjMpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gQShSLHMpe3ZhciB1PVIuY2hhckNvZGVBdChz''@;'; put 'put ''KTtyZXR1cm4gdT49NjUmJnU8PTcwP3UtNTU6dT49OTcmJnU8PTEwMj91LTg3OnUtNDgmMTV9ZnVuY3Rpb24gTShSLHMsdSl7dmFyIHY9QShSLHUpO3JldHVybiB1LTE+PXMmJih2fD1BKFIsdS0xKTw8NCksdn1mdW5jdGlvbiBPKFIscyx1LHYpe2Zvcih2YXIgcD0wLF89TWF0aC5taW4oUi5s''@;'; put 'put ''ZW5ndGgsdSksaz1zO2s8XztrKyspe3ZhciBMPVIuY2hhckNvZGVBdChrKS00ODtwKj12LHArPUw+PTQ5P0wtNDkrMTA6TD49MTc/TC0xNysxMDpMfXJldHVybiBwfWYuaXNCTj1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIGZ8fG51bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMm''@;'; put 'put ''JnMuY29uc3RydWN0b3Iud29yZFNpemU9PT1mLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHMud29yZHMpfSxmLm1heD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmNtcCh1KT4wP3M6dX0sZi5taW49ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk8MD9zOnV9LGYucHJvdG90eXBlLl9pbml0''@;'; put 'put ''PWZ1bmN0aW9uKHMsdSx2KXtpZigibnVtYmVyIj09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocyx1LHYpO2lmKCJvYmplY3QiPT10eXBlb2YgcylyZXR1cm4gdGhpcy5faW5pdEFycmF5KHMsdSx2KTsiaGV4Ij09PXUmJih1PTE2KSxvKHU9PT0oMHx1KSYmdT49MiYmdTw9MzYp''@;'; put 'put ''O3ZhciBwPTA7Ii0iPT09KHM9cy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihwKyssdGhpcy5uZWdhdGl2ZT0xKSxwPHMubGVuZ3RoJiYoMTY9PT11P3RoaXMuX3BhcnNlSGV4KHMscCx2KToodGhpcy5fcGFyc2VCYXNlKHMsdSxwKSwibGUiPT09diYmdGhpcy5faW5pdEFy''@;'; put 'put ''cmF5KHRoaXMudG9BcnJheSgpLHUsdikpKX0sZi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocyx1LHYpe3M8MCYmKHRoaXMubmVnYXRpdmU9MSxzPS1zKSxzPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzXSx0aGlzLmxlbmd0aD0xKTpzPDQ1MDM1OTk2MjczNzA0OTY/''@;'; put 'put ''KHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG8oczw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXYmJnRoaXMuX2luaXRB''@;'; put 'put ''cnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpfSxmLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHMsdSx2KXtpZihvKCJudW1iZXIiPT10eXBlb2Ygcy5sZW5ndGgpLHMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0''@;'; put 'put ''aC5jZWlsKHMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIF8sayxMPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgtMSxfPTA7cD49MDtwLT0zKXRoaXMud29yZHNb''@;'; put 'put ''X118PShrPXNbcF18c1twLTFdPDw4fHNbcC0yXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysxXT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7ZWxzZSBpZigibGUiPT09dilmb3IocD0wLF89MDtwPHMubGVuZ3RoO3ArPTMpdGhpcy53b3Jkc1tfXXw9''@;'; put 'put ''KGs9c1twXXxzW3ArMV08PDh8c1twKzJdPDwxNik8PEwmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPWs+Pj4yNi1MJjY3MTA4ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocyx1LHYpe3RoaXMu''@;'; put 'put ''bGVuZ3RoPU1hdGguY2VpbCgocy5sZW5ndGgtdSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgTCxfPTAsaz0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTE7cD49dTtwLT0y''@;'; put 'put ''KUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O2Vsc2UgZm9yKHA9KHMubGVuZ3RoLXUpJTI9PTA/dSsxOnU7cDxzLmxlbmd0aDtwKz0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9''@;'; put 'put ''NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O3RoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihzLHUsdil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHA9MCxfPTE7Xzw9NjcxMDg4NjM7''@;'; put 'put ''Xyo9dSlwKys7cC0tLF89Xy91fDA7Zm9yKHZhciBrPXMubGVuZ3RoLXYsTD1rJXAseT1NYXRoLm1pbihrLGstTCkrdixsPTAsYj12O2I8eTtiKz1wKWw9TyhzLGIsYitwLHUpLHRoaXMuaW11bG4oXyksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFk''@;'; put 'put ''ZG4obCk7aWYoMCE9PUwpe3ZhciBxPTE7Zm9yKGw9TyhzLGIscy5sZW5ndGgsdSksYj0wO2I8TDtiKyspcSo9dTt0aGlzLmltdWxuKHEpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuY29w''@;'; put 'put ''eT1mdW5jdGlvbihzKXtzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPXRoaXMubGVuZ3RoLHMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxzLnJlZD10aGlzLnJlZH0sZi5w''@;'; put 'put ''cm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHMpLHN9LGYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGYucHJv''@;'; put 'put ''dG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sZi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEQ9WyIiLCIwIiwiMDAiLCIwMDAiLCIw''@;'; put 'put ''MDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxCPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3''@;'; put 'put ''NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3''@;'; put 'put ''OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlO3Zh''@;'; put 'put ''ciB2PVIubGVuZ3RoK3MubGVuZ3RofDA7dS5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Ui53b3Jkc1swXSxfPTB8cy53b3Jkc1swXSxrPXAqXyx5PWsvNjcxMDg4NjR8MDt1LndvcmRzWzBdPTY3MTA4ODYzJms7Zm9yKHZhciBsPTE7bDx2O2wrKyl7Zm9yKHZhciBiPXk+Pj4yNixxPTY3MTA4''@;'; put 'put ''ODYzJnksRz1NYXRoLm1pbihsLHMubGVuZ3RoLTEpLFE9TWF0aC5tYXgoMCxsLVIubGVuZ3RoKzEpO1E8PUc7USsrKWIrPShrPShwPTB8Ui53b3Jkc1tsLVF8MF0pKihfPTB8cy53b3Jkc1tRXSkrcSkvNjcxMDg4NjR8MCxxPTY3MTA4ODYzJms7dS53b3Jkc1tsXT0wfHEseT0wfGJ9cmV0dXJu''@;'; put 'put ''IDAhPT15P3Uud29yZHNbbF09MHx5OnUubGVuZ3RoLS0sdS5zdHJpcCgpfWYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHMsdSl7dmFyIHY7aWYodT0wfHV8fDEsMTY9PT0ocz1zfHwxMCl8fCJoZXgiPT09cyl7dj0iIjtmb3IodmFyIHA9MCxfPTAsaz0wO2s8dGhpcy5sZW5ndGg7aysr''@;'; put 'put ''KXt2YXIgTD10aGlzLndvcmRzW2tdLHk9KDE2Nzc3MjE1JihMPDxwfF8pKS50b1N0cmluZygxNik7Xz1MPj4+MjQtcCYxNjc3NzIxNSwocCs9Mik+PTI2JiYocC09MjYsay0tKSx2PTAhPT1ffHxrIT09dGhpcy5sZW5ndGgtMT9EWzYteS5sZW5ndGhdK3krdjp5K3Z9Zm9yKDAhPT1fJiYodj1f''@;'; put 'put ''LnRvU3RyaW5nKDE2KSt2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9aWYocz09PSgwfHMpJiZzPj0yJiZzPD0zNil7dmFyIGw9RVtzXSxiPUJbc107dj0iIjt2YXIgcT10aGlzLmNsb25lKCk7Zm9yKHEubmVnYXRpdmU9MDsh''@;'; put 'put ''cS5pc1plcm8oKTspe3ZhciBHPXEubW9kbihiKS50b1N0cmluZyhzKTt2PShxPXEuaWRpdm4oYikpLmlzWmVybygpP0crdjpEW2wtRy5sZW5ndGhdK0crdn1mb3IodGhpcy5pc1plcm8oKSYmKHY9IjAiK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAiK3Y7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiYodj0iLSIrdiksdn1vKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGYucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMu''@;'; put 'put ''bGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9zKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXM6c30sZi5wcm90''@;'; put 'put ''b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxmLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihzLHUpe3JldHVybiBvKHR5cGVvZiBUPCJ1IiksdGhpcy50b0FycmF5TGlrZShULHMsdSl9LGYucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocyx1''@;'; put 'put ''KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihzLHUsdil7dmFyIHA9dGhpcy5ieXRlTGVuZ3RoKCksXz12fHxNYXRoLm1heCgxLHApO28ocDw9XywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0''@;'; put 'put ''aCIpLG8oXz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHksbCxrPSJsZSI9PT11LEw9bmV3IHMoXyksYj10aGlzLmNsb25lKCk7aWYoayl7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtsXT15O2Zv''@;'; put 'put ''cig7bDxfO2wrKylMW2xdPTB9ZWxzZXtmb3IobD0wO2w8Xy1wO2wrKylMW2xdPTA7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtfLWwtMV09eX1yZXR1cm4gTH0sZi5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHMp''@;'; put 'put ''e3JldHVybiAzMi1NYXRoLmNsejMyKHMpfTpmdW5jdGlvbihzKXt2YXIgdT1zLHY9MDtyZXR1cm4gdT49NDA5NiYmKHYrPTEzLHU+Pj49MTMpLHU+PTY0JiYodis9Nyx1Pj4+PTcpLHU+PTgmJih2Kz00LHU+Pj49NCksdT49MiYmKHYrPTIsdT4+Pj0yKSx2K3V9LGYucHJvdG90eXBlLl96ZXJv''@;'; put 'put ''Qml0cz1mdW5jdGlvbihzKXtpZigwPT09cylyZXR1cm4gMjY7dmFyIHU9cyx2PTA7cmV0dXJuISg4MTkxJnUpJiYodis9MTMsdT4+Pj0xMyksISgxMjcmdSkmJih2Kz03LHU+Pj49NyksISgxNSZ1KSYmKHYrPTQsdT4+Pj00KSwhKDMmdSkmJih2Kz0yLHU+Pj49MiksISgxJnUpJiZ2Kyssdn0s''@;'; put 'put ''Zi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrdX0sZi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVy''@;'; put 'put ''biAwO2Zvcih2YXIgcz0wLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl7dmFyIHY9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t1XSk7aWYocys9diwyNiE9PXYpYnJlYWt9cmV0dXJuIHN9LGYucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0''@;'; put 'put ''TGVuZ3RoKCkvOCl9LGYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihzKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnRlc3RuKHMt''@;'; put 'put ''MSk/dGhpcy5ub3RuKHMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxmLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sZi5wcm90b3R5''@;'; put 'put ''cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sZi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihzKXtmb3IoO3RoaXMubGVuZ3RoPHMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB1PTA7dTxz''@;'; put 'put ''Lmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdfHMud29yZHNbdV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHMpfSxmLnByb3RvdHlwZS5v''@;'; put 'put ''cj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihzKTpzLmNsb25lKCkuaW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHMpOnMuY2xv''@;'; put 'put ''bmUoKS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihzKXt2YXIgdTt1PXRoaXMubGVuZ3RoPnMubGVuZ3RoP3M6dGhpcztmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPXRoaXMud29yZHNbdl0mcy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5n''@;'; put 'put ''dGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChzKX0sZi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90''@;'; put 'put ''aGlzLmNsb25lKCkuaWFuZChzKTpzLmNsb25lKCkuaWFuZCh0aGlzKX0sZi5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHMpOnMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sZi5wcm90b3R5cGUuaXV4b3I9ZnVu''@;'; put 'put ''Y3Rpb24ocyl7dmFyIHUsdjt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odT10aGlzLHY9cyk6KHU9cyx2PXRoaXMpO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXV52LndvcmRzW3BdO2lmKHRoaXMhPT11KWZvcig7cDx1Lmxlbmd0aDtwKyspdGhpcy53''@;'; put 'put ''b3Jkc1twXT11LndvcmRzW3BdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1eG9yKHMpfSxmLnByb3RvdHlwZS54b3I9ZnVuY3Rp''@;'; put 'put ''b24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHMpOnMuY2xvbmUoKS5peG9yKHRoaXMpfSxmLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Iocyk6cy5jbG9uZSgp''@;'; put 'put ''Lml1eG9yKHRoaXMpfSxmLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9MHxNYXRoLmNlaWwocy8yNiksdj1zJTI2O3RoaXMuX2V4cGFuZCh1KSx2PjAmJnUtLTtmb3IodmFyIHA9MDtwPHU7cCsrKXRoaXMud29yZHNbcF09Njcx''@;'; put 'put ''MDg4NjMmfnRoaXMud29yZHNbcF07cmV0dXJuIHY+MCYmKHRoaXMud29yZHNbcF09fnRoaXMud29yZHNbcF0mNjcxMDg4NjM+PjI2LXYpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHMpfSxmLnByb3RvdHlwZS5z''@;'; put 'put ''ZXRuPWZ1bmN0aW9uKHMsdSl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB2PXMvMjZ8MCxwPXMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl09dT90aGlzLndvcmRzW3ZdfDE8PHA6dGhpcy53b3Jkc1t2XSZ+KDE8PHApLHRoaXMuc3RyaXAoKX0sZi5w''@;'; put 'put ''cm90b3R5cGUuaWFkZD1mdW5jdGlvbihzKXt2YXIgdSx2LHA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdT10aGlzLmlzdWIocyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh2PXRoaXMscD1zKToodj1zLHA9dGhpcyk7Zm9yKHZhciBfPTAsaz0wO2s8cC5sZW5ndGg7aysrKXRoaXMud29y''@;'; put 'put ''ZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrKDB8cC53b3Jkc1trXSkrXyksXz11Pj4+MjY7Zm9yKDswIT09XyYmazx2Lmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKStfKSxfPXU+Pj4yNjtpZih0aGlzLmxlbmd0aD12Lmxlbmd0aCww''@;'; put 'put ''IT09Xyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1fLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih2IT09dGhpcylmb3IoO2s8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109di53b3Jkc1trXTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMpe3ZhciB1O3JldHVybiAwIT09''@;'; put 'put ''cy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHMubmVnYXRpdmU9MCx1PXRoaXMuc3ViKHMpLHMubmVnYXRpdmVePTEsdSk6MD09PXMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsdT1zLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsdSk6dGhpcy5s''@;'; put 'put ''ZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocyk6cy5jbG9uZSgpLmlhZGQodGhpcyl9LGYucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyl7aWYoMCE9PXMubmVnYXRpdmUpe3MubmVnYXRpdmU9MDt2YXIgdT10aGlzLmlhZGQocyk7cmV0dXJuIHMubmVnYXRpdmU9MSx1Ll9ub3Jt''@;'; put 'put ''U2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBwLF8sdj10aGlzLmNtcChzKTtpZigwPT09dilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEs''@;'; put 'put ''dGhpcy53b3Jkc1swXT0wLHRoaXM7dj4wPyhwPXRoaXMsXz1zKToocD1zLF89dGhpcyk7Zm9yKHZhciBrPTAsTD0wO0w8Xy5sZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSktKDB8Xy53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNbTF09NjcxMDg4NjMmdTtmb3IoOzAhPT1rJiZMPHAu''@;'; put 'put ''bGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7aWYoMD09PWsmJkw8cC5sZW5ndGgmJnAhPT10aGlzKWZvcig7TDxwLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT1wLndvcmRzW0xdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1h''@;'; put 'put ''eCh0aGlzLmxlbmd0aCxMKSxwIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHMpfTt2YXIgSD1mdW5jdGlvbihzLHUsdil7dmFyIHksbCxiLHA9cy53b3JkcyxfPXUud29y''@;'; put 'put ''ZHMsaz12LndvcmRzLEw9MCxxPTB8cFswXSxHPTgxOTEmcSxRPXE+Pj4xMyxwZT0wfHBbMV0sUGU9ODE5MSZwZSxaZT1wZT4+PjEzLHFlPTB8cFsyXSx2ZT04MTkxJnFlLHVlPXFlPj4+MTMsemU9MHxwWzNdLE9lPTgxOTEmemUsQ2U9emU+Pj4xMyxrZT0wfHBbNF0seGU9ODE5MSZrZSxNZT1r''@;'; put 'put ''ZT4+PjEzLEllPTB8cFs1XSxiZT04MTkxJkllLHdlPUllPj4+MTMscHQ9MHxwWzZdLEtlPTgxOTEmcHQsWWU9cHQ+Pj4xMyxxdD0wfHBbN10saHQ9ODE5MSZxdCx2dD1xdD4+PjEzLFl0PTB8cFs4XSx0dD04MTkxJll0LFVlPVl0Pj4+MTMsJGU9MHxwWzldLExlPTgxOTEmJGUsbnQ9JGU+Pj4x''@;'; put 'put ''Myxybj0wfF9bMF0seHQ9ODE5MSZybixUdD1ybj4+PjEzLHluPTB8X1sxXSxYdD04MTkxJnluLFF0PXluPj4+MTMsWHI9MHxfWzJdLHNuPTgxOTEmWHIsaXQ9WHI+Pj4xMyxDcj0wfF9bM10sTHQ9ODE5MSZDcix3dD1Dcj4+PjEzLFJuPTB8X1s0XSxRZT04MTkxJlJuLFB0PVJuPj4+MTMsUXI9''@;'; put 'put ''MHxfWzVdLE5lPTgxOTEmUXIseXQ9UXI+Pj4xMyxycj0wfF9bNl0sYXQ9ODE5MSZycixfdD1ycj4+PjEzLHduPTB8X1s3XSwkdD04MTkxJnduLEh0PXduPj4+MTMsc2k9MHxfWzhdLG5uPTgxOTEmc2ksbG49c2k+Pj4xMyxraT0wfF9bOV0sYW49ODE5MSZraSxHdD1raT4+PjEzO3YubmVnYXRp''@;'; put 'put ''dmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPTE5O3ZhciBlYT0oTCsoeT1NYXRoLmltdWwoRyx4dCkpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoRyxUdCkpK01hdGguaW11bChRLHh0KXwwKSk8PDEzKXwwO0w9KChiPU1hdGguaW11bChRLFR0KSkrKGw+Pj4xMyl8MCkrKGVh''@;'; put 'put ''Pj4+MjYpfDAsZWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFBlLHh0KSxsPShsPU1hdGguaW11bChQZSxUdCkpK01hdGguaW11bChaZSx4dCl8MCxiPU1hdGguaW11bChaZSxUdCk7dmFyIG1pPShMKyh5PXkrTWF0aC5pbXVsKEcsWHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChH''@;'; put 'put ''LFF0KXwwKStNYXRoLmltdWwoUSxYdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFF0KXwwKSsobD4+PjEzKXwwKSsobWk+Pj4yNil8MCxtaSY9NjcxMDg4NjMseT1NYXRoLmltdWwodmUseHQpLGw9KGw9TWF0aC5pbXVsKHZlLFR0KSkrTWF0aC5pbXVsKHVlLHh0KXwwLGI9TWF0''@;'; put 'put ''aC5pbXVsKHVlLFR0KSx5PXkrTWF0aC5pbXVsKFBlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChaZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFplLFF0KXwwO3ZhciBmcj0oTCsoeT15K01hdGguaW11bChHLHNuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwoRyxpdCl8MCkrTWF0aC5pbXVsKFEsc24pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxpdCl8MCkrKGw+Pj4xMyl8MCkrKGZyPj4+MjYpfDAsZnImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE9lLHh0KSxsPShsPU1hdGguaW11bChPZSxUdCkpK01hdGguaW11bChDZSx4dCl8MCxi''@;'; put 'put ''PU1hdGguaW11bChDZSxUdCkseT15K01hdGguaW11bCh2ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFF0KXwwKStNYXRoLmltdWwodWUsWHQpfDAsYj1iK01hdGguaW11bCh1ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKFBlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsaXQpfDApK01hdGgu''@;'; put 'put ''aW11bChaZSxzbil8MCxiPWIrTWF0aC5pbXVsKFplLGl0KXwwO3ZhciAkaT0oTCsoeT15K01hdGguaW11bChHLEx0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx3dCl8MCkrTWF0aC5pbXVsKFEsTHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx3dCl8MCkrKGw+''@;'; put 'put ''Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHhlLHh0KSxsPShsPU1hdGguaW11bCh4ZSxUdCkpK01hdGguaW11bChNZSx4dCl8MCxiPU1hdGguaW11bChNZSxUdCkseT15K01hdGguaW11bChPZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoQ2UsWHQpfDAsYj1iK01hdGguaW11bChDZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHZlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHVlLGl0KXwwLHk9eStNYXRoLmltdWwoUGUsTHQpfDAsbD0obD1sK01h''@;'; put 'put ''dGguaW11bChQZSx3dCl8MCkrTWF0aC5pbXVsKFplLEx0KXwwLGI9YitNYXRoLmltdWwoWmUsd3QpfDA7dmFyIEtpPShMKyh5PXkrTWF0aC5pbXVsKEcsUWUpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFB0KXwwKStNYXRoLmltdWwoUSxRZSl8MCkpPDwxMyl8MDtMPSgoYj1i''@;'; put 'put ''K01hdGguaW11bChRLFB0KXwwKSsobD4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoYmUseHQpLGw9KGw9TWF0aC5pbXVsKGJlLFR0KSkrTWF0aC5pbXVsKHdlLHh0KXwwLGI9TWF0aC5pbXVsKHdlLFR0KSx5PXkrTWF0aC5pbXVsKHhlLFh0KXwwLGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoeGUsUXQpfDApK01hdGguaW11bChNZSxYdCl8MCxiPWIrTWF0aC5pbXVsKE1lLFF0KXwwLHk9eStNYXRoLmltdWwoT2Usc24pfDAsbD0obD1sK01hdGguaW11bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLGI9YitNYXRoLmltdWwoQ2UsaXQpfDAseT15K01hdGgu''@;'; put 'put ''aW11bCh2ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAsYj1iK01hdGguaW11bCh1ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKFBlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUHQpfDApK01hdGguaW11bChaZSxRZSl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KFplLFB0KXwwO3ZhciBWaT0oTCsoeT15K01hdGguaW11bChHLE5lKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx5dCl8MCkrTWF0aC5pbXVsKFEsTmUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx5dCl8MCkrKGw+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3''@;'; put 'put ''MTA4ODYzLHk9TWF0aC5pbXVsKEtlLHh0KSxsPShsPU1hdGguaW11bChLZSxUdCkpK01hdGguaW11bChZZSx4dCl8MCxiPU1hdGguaW11bChZZSxUdCkseT15K01hdGguaW11bChiZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFF0KXwwKStNYXRoLmltdWwod2UsWHQpfDAsYj1iK01hdGgu''@;'; put 'put ''aW11bCh3ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHhlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsaXQpfDApK01hdGguaW11bChNZSxzbil8MCxiPWIrTWF0aC5pbXVsKE1lLGl0KXwwLHk9eStNYXRoLmltdWwoT2UsTHQpfDAsbD0obD1sK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KENlLEx0KXwwLGI9YitNYXRoLmltdWwoQ2Usd3QpfDAseT15K01hdGguaW11bCh2ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAsYj1iK01hdGguaW11bCh1ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKFBlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''UGUseXQpfDApK01hdGguaW11bChaZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFplLHl0KXwwO3ZhciBxcj0oTCsoeT15K01hdGguaW11bChHLGF0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxfdCl8MCkrTWF0aC5pbXVsKFEsYXQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmlt''@;'; put 'put ''dWwoUSxfdCl8MCkrKGw+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGh0LHh0KSxsPShsPU1hdGguaW11bChodCxUdCkpK01hdGguaW11bCh2dCx4dCl8MCxiPU1hdGguaW11bCh2dCxUdCkseT15K01hdGguaW11bChLZSxYdCl8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKEtlLFF0KXwwKStNYXRoLmltdWwoWWUsWHQpfDAsYj1iK01hdGguaW11bChZZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGJlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsaXQpfDApK01hdGguaW11bCh3ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHdlLGl0KXwwLHk9eStNYXRoLmltdWwoeGUs''@;'; put 'put ''THQpfDAsbD0obD1sK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1lLEx0KXwwLGI9YitNYXRoLmltdWwoTWUsd3QpfDAseT15K01hdGguaW11bChPZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2UsUWUpfDAsYj1iK01hdGguaW11bChDZSxQdCl8''@;'; put 'put ''MCx5PXkrTWF0aC5pbXVsKHZlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodmUseXQpfDApK01hdGguaW11bCh1ZSxOZSl8MCxiPWIrTWF0aC5pbXVsKHVlLHl0KXwwLHk9eStNYXRoLmltdWwoUGUsYXQpfDAsbD0obD1sK01hdGguaW11bChQZSxfdCl8MCkrTWF0aC5pbXVsKFplLGF0KXwwLGI9''@;'; put 'put ''YitNYXRoLmltdWwoWmUsX3QpfDA7dmFyIHVhPShMKyh5PXkrTWF0aC5pbXVsKEcsJHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLEh0KXwwKStNYXRoLmltdWwoUSwkdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLEh0KXwwKSsobD4+PjEzKXwwKSsodWE+Pj4y''@;'; put 'put ''Nil8MCx1YSY9NjcxMDg4NjMseT1NYXRoLmltdWwodHQseHQpLGw9KGw9TWF0aC5pbXVsKHR0LFR0KSkrTWF0aC5pbXVsKFVlLHh0KXwwLGI9TWF0aC5pbXVsKFVlLFR0KSx5PXkrTWF0aC5pbXVsKGh0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUXQpfDApK01hdGguaW11bCh2dCxYdCl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKHZ0LFF0KXwwLHk9eStNYXRoLmltdWwoS2Usc24pfDAsbD0obD1sK01hdGguaW11bChLZSxpdCl8MCkrTWF0aC5pbXVsKFllLHNuKXwwLGI9YitNYXRoLmltdWwoWWUsaXQpfDAseT15K01hdGguaW11bChiZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHd0KXww''@;'; put 'put ''KStNYXRoLmltdWwod2UsTHQpfDAsYj1iK01hdGguaW11bCh3ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHhlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11bChNZSxRZSl8MCxiPWIrTWF0aC5pbXVsKE1lLFB0KXwwLHk9eStNYXRoLmltdWwoT2UsTmUpfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLGI9YitNYXRoLmltdWwoQ2UseXQpfDAseT15K01hdGguaW11bCh2ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsYj1iK01hdGguaW11bCh1ZSxfdCl8MCx5PXkrTWF0aC5p''@;'; put 'put ''bXVsKFBlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsSHQpfDApK01hdGguaW11bChaZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFplLEh0KXwwO3ZhciBGaT0oTCsoeT15K01hdGguaW11bChHLG5uKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxsbil8MCkrTWF0aC5pbXVsKFEs''@;'; put 'put ''bm4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxsbil8MCkrKGw+Pj4xMyl8MCkrKEZpPj4+MjYpfDAsRmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHh0KSxsPShsPU1hdGguaW11bChMZSxUdCkpK01hdGguaW11bChudCx4dCl8MCxiPU1hdGguaW11bChudCxUdCkseT15K01h''@;'; put 'put ''dGguaW11bCh0dCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFF0KXwwKStNYXRoLmltdWwoVWUsWHQpfDAsYj1iK01hdGguaW11bChVZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGh0LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsaXQpfDApK01hdGguaW11bCh2dCxzbil8MCxiPWIrTWF0aC5p''@;'; put 'put ''bXVsKHZ0LGl0KXwwLHk9eStNYXRoLmltdWwoS2UsTHQpfDAsbD0obD1sK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLEx0KXwwLGI9YitNYXRoLmltdWwoWWUsd3QpfDAseT15K01hdGguaW11bChiZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFB0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''d2UsUWUpfDAsYj1iK01hdGguaW11bCh3ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHhlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUseXQpfDApK01hdGguaW11bChNZSxOZSl8MCxiPWIrTWF0aC5pbXVsKE1lLHl0KXwwLHk9eStNYXRoLmltdWwoT2UsYXQpfDAsbD0obD1sK01hdGguaW11bChP''@;'; put 'put ''ZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLGI9YitNYXRoLmltdWwoQ2UsX3QpfDAseT15K01hdGguaW11bCh2ZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLEh0KXwwKStNYXRoLmltdWwodWUsJHQpfDAsYj1iK01hdGguaW11bCh1ZSxIdCl8MCx5PXkrTWF0aC5pbXVsKFBlLG5uKXww''@;'; put 'put ''LGw9KGw9bCtNYXRoLmltdWwoUGUsbG4pfDApK01hdGguaW11bChaZSxubil8MCxiPWIrTWF0aC5pbXVsKFplLGxuKXwwO3ZhciBSYT0oTCsoeT15K01hdGguaW11bChHLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxHdCl8MCkrTWF0aC5pbXVsKFEsYW4pfDApKTw8MTMp''@;'; put 'put ''fDA7TD0oKGI9YitNYXRoLmltdWwoUSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFh0KSxsPShsPU1hdGguaW11bChMZSxRdCkpK01hdGguaW11bChudCxYdCl8MCxiPU1hdGguaW11bChudCxRdCkseT15K01hdGguaW11bCh0dCxz''@;'; put 'put ''bil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGl0KXwwKStNYXRoLmltdWwoVWUsc24pfDAsYj1iK01hdGguaW11bChVZSxpdCl8MCx5PXkrTWF0aC5pbXVsKGh0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsd3QpfDApK01hdGguaW11bCh2dCxMdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LHd0KXww''@;'; put 'put ''LHk9eStNYXRoLmltdWwoS2UsUWUpfDAsbD0obD1sK01hdGguaW11bChLZSxQdCl8MCkrTWF0aC5pbXVsKFllLFFlKXwwLGI9YitNYXRoLmltdWwoWWUsUHQpfDAseT15K01hdGguaW11bChiZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHl0KXwwKStNYXRoLmltdWwod2UsTmUpfDAsYj1i''@;'; put 'put ''K01hdGguaW11bCh3ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKHhlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsX3QpfDApK01hdGguaW11bChNZSxhdCl8MCxiPWIrTWF0aC5pbXVsKE1lLF90KXwwLHk9eStNYXRoLmltdWwoT2UsJHQpfDAsbD0obD1sK01hdGguaW11bChPZSxIdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKENlLCR0KXwwLGI9YitNYXRoLmltdWwoQ2UsSHQpfDAseT15K01hdGguaW11bCh2ZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKHZlLGxuKXwwKStNYXRoLmltdWwodWUsbm4pfDAsYj1iK01hdGguaW11bCh1ZSxsbil8MDt2YXIgb2k9KEwrKHk9eStNYXRoLmltdWwoUGUsYW4pfDAp''@;'; put 'put ''fDApKygoODE5MSYobD0obD1sK01hdGguaW11bChQZSxHdCl8MCkrTWF0aC5pbXVsKFplLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFplLEd0KXwwKSsobD4+PjEzKXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsc24pLGw9KGw9TWF0aC5pbXVs''@;'; put 'put ''KExlLGl0KSkrTWF0aC5pbXVsKG50LHNuKXwwLGI9TWF0aC5pbXVsKG50LGl0KSx5PXkrTWF0aC5pbXVsKHR0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsd3QpfDApK01hdGguaW11bChVZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFVlLHd0KXwwLHk9eStNYXRoLmltdWwoaHQsUWUpfDAsbD0o''@;'; put 'put ''bD1sK01hdGguaW11bChodCxQdCl8MCkrTWF0aC5pbXVsKHZ0LFFlKXwwLGI9YitNYXRoLmltdWwodnQsUHQpfDAseT15K01hdGguaW11bChLZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLHl0KXwwKStNYXRoLmltdWwoWWUsTmUpfDAsYj1iK01hdGguaW11bChZZSx5dCl8MCx5PXkrTWF0''@;'; put 'put ''aC5pbXVsKGJlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsX3QpfDApK01hdGguaW11bCh3ZSxhdCl8MCxiPWIrTWF0aC5pbXVsKHdlLF90KXwwLHk9eStNYXRoLmltdWwoeGUsJHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxIdCl8MCkrTWF0aC5pbXVsKE1lLCR0KXwwLGI9YitNYXRoLmlt''@;'; put 'put ''dWwoTWUsSHQpfDAseT15K01hdGguaW11bChPZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGxuKXwwKStNYXRoLmltdWwoQ2Usbm4pfDAsYj1iK01hdGguaW11bChDZSxsbil8MDt2YXIgVWk9KEwrKHk9eStNYXRoLmltdWwodmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11''@;'; put 'put ''bCh2ZSxHdCl8MCkrTWF0aC5pbXVsKHVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHVlLEd0KXwwKSsobD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTHQpLGw9KGw9TWF0aC5pbXVsKExlLHd0KSkrTWF0aC5pbXVsKG50LEx0KXww''@;'; put 'put ''LGI9TWF0aC5pbXVsKG50LHd0KSx5PXkrTWF0aC5pbXVsKHR0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsUHQpfDApK01hdGguaW11bChVZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFVlLFB0KXwwLHk9eStNYXRoLmltdWwoaHQsTmUpfDAsbD0obD1sK01hdGguaW11bChodCx5dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZ0LE5lKXwwLGI9YitNYXRoLmltdWwodnQseXQpfDAseT15K01hdGguaW11bChLZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLF90KXwwKStNYXRoLmltdWwoWWUsYXQpfDAsYj1iK01hdGguaW11bChZZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGJlLCR0KXwwLGw9KGw9bCtNYXRo''@;'; put 'put ''LmltdWwoYmUsSHQpfDApK01hdGguaW11bCh3ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHdlLEh0KXwwLHk9eStNYXRoLmltdWwoeGUsbm4pfDAsbD0obD1sK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKE1lLG5uKXwwLGI9YitNYXRoLmltdWwoTWUsbG4pfDA7dmFyIFZhPShMKyh5PXkr''@;'; put 'put ''TWF0aC5pbXVsKE9lLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChDZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChDZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFZhPj4+MjYpfDAsVmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExl''@;'; put 'put ''LFFlKSxsPShsPU1hdGguaW11bChMZSxQdCkpK01hdGguaW11bChudCxRZSl8MCxiPU1hdGguaW11bChudCxQdCkseT15K01hdGguaW11bCh0dCxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsYj1iK01hdGguaW11bChVZSx5dCl8MCx5PXkrTWF0''@;'; put 'put ''aC5pbXVsKGh0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsX3QpfDApK01hdGguaW11bCh2dCxhdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LF90KXwwLHk9eStNYXRoLmltdWwoS2UsJHQpfDAsbD0obD1sK01hdGguaW11bChLZSxIdCl8MCkrTWF0aC5pbXVsKFllLCR0KXwwLGI9YitNYXRoLmlt''@;'; put 'put ''dWwoWWUsSHQpfDAseT15K01hdGguaW11bChiZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGxuKXwwKStNYXRoLmltdWwod2Usbm4pfDAsYj1iK01hdGguaW11bCh3ZSxsbil8MDt2YXIgdXI9KEwrKHk9eStNYXRoLmltdWwoeGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11''@;'; put 'put ''bCh4ZSxHdCl8MCkrTWF0aC5pbXVsKE1lLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKE1lLEd0KXwwKSsobD4+PjEzKXwwKSsodXI+Pj4yNil8MCx1ciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTmUpLGw9KGw9TWF0aC5pbXVsKExlLHl0KSkrTWF0aC5pbXVsKG50LE5lKXww''@;'; put 'put ''LGI9TWF0aC5pbXVsKG50LHl0KSx5PXkrTWF0aC5pbXVsKHR0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsX3QpfDApK01hdGguaW11bChVZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFVlLF90KXwwLHk9eStNYXRoLmltdWwoaHQsJHQpfDAsbD0obD1sK01hdGguaW11bChodCxIdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZ0LCR0KXwwLGI9YitNYXRoLmltdWwodnQsSHQpfDAseT15K01hdGguaW11bChLZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUsbm4pfDAsYj1iK01hdGguaW11bChZZSxsbil8MDt2YXIgZmE9KEwrKHk9eStNYXRoLmltdWwoYmUsYW4pfDAp''@;'; put 'put ''fDApKygoODE5MSYobD0obD1sK01hdGguaW11bChiZSxHdCl8MCkrTWF0aC5pbXVsKHdlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHdlLEd0KXwwKSsobD4+PjEzKXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsYXQpLGw9KGw9TWF0aC5pbXVs''@;'; put 'put ''KExlLF90KSkrTWF0aC5pbXVsKG50LGF0KXwwLGI9TWF0aC5pbXVsKG50LF90KSx5PXkrTWF0aC5pbXVsKHR0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsSHQpfDApK01hdGguaW11bChVZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFVlLEh0KXwwLHk9eStNYXRoLmltdWwoaHQsbm4pfDAsbD0o''@;'; put 'put ''bD1sK01hdGguaW11bChodCxsbil8MCkrTWF0aC5pbXVsKHZ0LG5uKXwwLGI9YitNYXRoLmltdWwodnQsbG4pfDA7dmFyIHhpPShMKyh5PXkrTWF0aC5pbXVsKEtlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bChZZSxhbil8MCkpPDwxMyl8''@;'; put 'put ''MDtMPSgoYj1iK01hdGguaW11bChZZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLCR0KSxsPShsPU1hdGguaW11bChMZSxIdCkpK01hdGguaW11bChudCwkdCl8MCxiPU1hdGguaW11bChudCxIdCkseT15K01hdGguaW11bCh0dCxu''@;'; put 'put ''bil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsYj1iK01hdGguaW11bChVZSxsbil8MDt2YXIgb2E9KEwrKHk9eStNYXRoLmltdWwoaHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChodCxHdCl8MCkrTWF0aC5pbXVsKHZ0LGFuKXww''@;'; put 'put ''KSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHZ0LEd0KXwwKSsobD4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsbm4pLGw9KGw9TWF0aC5pbXVsKExlLGxuKSkrTWF0aC5pbXVsKG50LG5uKXwwLGI9TWF0aC5pbXVsKG50LGxuKTt2YXIgWGk9KEwr''@;'; put 'put ''KHk9eStNYXRoLmltdWwodHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh0dCxHdCl8MCkrTWF0aC5pbXVsKFVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFVlLEd0KXwwKSsobD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjM7dmFyIElyPShM''@;'; put 'put ''Kyh5PU1hdGguaW11bChMZSxhbikpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoTGUsR3QpKStNYXRoLmltdWwobnQsYW4pfDApKTw8MTMpfDA7cmV0dXJuIEw9KChiPU1hdGguaW11bChudCxHdCkpKyhsPj4+MTMpfDApKyhJcj4+PjI2KXwwLElyJj02NzEwODg2MyxrWzBdPWVhLGtbMV09''@;'; put 'put ''bWksa1syXT1mcixrWzNdPSRpLGtbNF09S2ksa1s1XT1WaSxrWzZdPXFyLGtbN109dWEsa1s4XT1GaSxrWzldPVJhLGtbMTBdPW9pLGtbMTFdPVVpLGtbMTJdPVZhLGtbMTNdPXVyLGtbMTRdPWZhLGtbMTVdPXhpLGtbMTZdPW9hLGtbMTddPVhpLGtbMThdPUlyLDAhPT1MJiYoa1sxOV09TCx2''@;'; put 'put ''Lmxlbmd0aCsrKSx2fTtmdW5jdGlvbiBaKFIscyx1KXtyZXR1cm4obmV3IFUpLm11bHAoUixzLHUpfWZ1bmN0aW9uIFUoUixzKXt0aGlzLng9Uix0aGlzLnk9c31NYXRoLmltdWx8fChIPU4pLGYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10aGlzLmxlbmd0aCtzLmxl''@;'; put 'put ''bmd0aDtyZXR1cm4gdj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXMubGVuZ3RoP0godGhpcyxzLHUpOnA8NjM/Tih0aGlzLHMsdSk6cDwxMDI0P2Z1bmN0aW9uIHooUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlLHUubGVuZ3RoPVIubGVuZ3RoK3MubGVuZ3RoO2Zvcih2''@;'; put 'put ''YXIgdj0wLHA9MCxfPTA7Xzx1Lmxlbmd0aC0xO18rKyl7dmFyIGs9cDtwPTA7Zm9yKHZhciBMPTY3MTA4ODYzJnYseT1NYXRoLm1pbihfLHMubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCxfLVIubGVuZ3RoKzEpO2w8PXk7bCsrKXt2YXIgUT0oMHxSLndvcmRzW18tbF0pKigwfHMud29yZHNbbF0p''@;'; put 'put ''LHBlPTY3MTA4ODYzJlE7TD02NzEwODg2MyYocGU9cGUrTHwwKSxwKz0oaz0oaz1rKyhRLzY3MTA4ODY0fDApfDApKyhwZT4+PjI2KXwwKT4+PjI2LGsmPTY3MTA4ODYzfXUud29yZHNbX109TCx2PWssaz1wfXJldHVybiAwIT09dj91LndvcmRzW19dPXY6dS5sZW5ndGgtLSx1LnN0cmlwKCl9''@;'; put 'put ''KHRoaXMscyx1KTpaKHRoaXMscyx1KSx2fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT1uZXcgQXJyYXkocyksdj1mLnByb3RvdHlwZS5fY291bnRCaXRzKHMpLTEscD0wO3A8cztwKyspdVtwXT10aGlzLnJldkJpbihwLHYscyk7cmV0dXJuIHV9LFUucHJvdG90''@;'; put 'put ''eXBlLnJldkJpbj1mdW5jdGlvbihzLHUsdil7aWYoMD09PXN8fHM9PT12LTEpcmV0dXJuIHM7Zm9yKHZhciBwPTAsXz0wO188dTtfKyspcHw9KDEmcyk8PHUtXy0xLHM+Pj0xO3JldHVybiBwfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHMsdSx2LHAsXyxrKXtmb3IodmFyIEw9MDtM''@;'; put 'put ''PGs7TCsrKXBbTF09dVtzW0xdXSxfW0xdPXZbc1tMXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihzLHUsdixwLF8sayl7dGhpcy5wZXJtdXRlKGsscyx1LHYscCxfKTtmb3IodmFyIEw9MTtMPF87TDw8PTEpZm9yKHZhciB5PUw8PDEsbD1NYXRoLmNvcygyKk1hdGguUEkveSks''@;'; put 'put ''Yj1NYXRoLnNpbigyKk1hdGguUEkveSkscT0wO3E8XztxKz15KWZvcih2YXIgRz1sLFE9YixwZT0wO3BlPEw7cGUrKyl7dmFyIFBlPXZbcStwZV0sWmU9cFtxK3BlXSxxZT12W3ErcGUrTF0sdmU9cFtxK3BlK0xdLHVlPUcqcWUtUSp2ZTt2ZT1HKnZlK1EqcWUsdltxK3BlXT1QZSsocWU9dWUp''@;'; put 'put ''LHBbcStwZV09WmUrdmUsdltxK3BlK0xdPVBlLXFlLHBbcStwZStMXT1aZS12ZSxwZSE9PXkmJih1ZT1sKkctYipRLFE9bCpRK2IqRyxHPXVlKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHMsdSl7dmFyIHY9MXxNYXRoLm1heCh1LHMpLHA9MSZ2LF89MDtmb3Iodj12LzJ8''@;'; put 'put ''MDt2O3Y+Pj49MSlfKys7cmV0dXJuIDE8PF8rMStwfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocyx1LHYpe2lmKCEodjw9MSkpZm9yKHZhciBwPTA7cDx2LzI7cCsrKXt2YXIgXz1zW3BdO3NbcF09c1t2LXAtMV0sc1t2LXAtMV09XyxfPXVbcF0sdVtwXT0tdVt2LXAtMV0sdVt2''@;'; put 'put ''LXAtMV09LV99fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9MCxwPTA7cDx1LzI7cCsrKXt2YXIgXz04MTkyKk1hdGgucm91bmQoc1syKnArMV0vdSkrTWF0aC5yb3VuZChzWzIqcF0vdSkrdjtzW3BdPTY3MTA4ODYzJl8sdj1fPDY3MTA4ODY0PzA6''@;'; put 'put ''Xy82NzEwODg2NHwwfXJldHVybiBzfSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHMsdSx2LHApe2Zvcih2YXIgXz0wLGs9MDtrPHU7aysrKXZbMiprXT04MTkxJihfKz0wfHNba10pLHZbMiprKzFdPTgxOTEmKF8+Pj49MTMpLF8+Pj49MTM7Zm9yKGs9Mip1O2s8cDsrK2spdltr''@;'; put 'put ''XT0wO28oMD09PV8pLG8oISgtODE5MiZfKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PW5ldyBBcnJheShzKSx2PTA7djxzO3YrKyl1W3ZdPTA7cmV0dXJuIHV9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPTIqdGhpcy5ndWVzc0xlbjEz''@;'; put 'put ''YihzLmxlbmd0aCx1Lmxlbmd0aCksXz10aGlzLm1ha2VSQlQocCksaz10aGlzLnN0dWIocCksTD1uZXcgQXJyYXkocCkseT1uZXcgQXJyYXkocCksbD1uZXcgQXJyYXkocCksYj1uZXcgQXJyYXkocCkscT1uZXcgQXJyYXkocCksRz1uZXcgQXJyYXkocCksUT12LndvcmRzO1EubGVuZ3RoPXAs''@;'; put 'put ''dGhpcy5jb252ZXJ0MTNiKHMud29yZHMscy5sZW5ndGgsTCxwKSx0aGlzLmNvbnZlcnQxM2IodS53b3Jkcyx1Lmxlbmd0aCxiLHApLHRoaXMudHJhbnNmb3JtKEwsayx5LGwscCxfKSx0aGlzLnRyYW5zZm9ybShiLGsscSxHLHAsXyk7Zm9yKHZhciBwZT0wO3BlPHA7cGUrKyl7dmFyIFBlPXlb''@;'; put 'put ''cGVdKnFbcGVdLWxbcGVdKkdbcGVdO2xbcGVdPXlbcGVdKkdbcGVdK2xbcGVdKnFbcGVdLHlbcGVdPVBlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh5LGwscCksdGhpcy50cmFuc2Zvcm0oeSxsLFEsayxwLF8pLHRoaXMuY29uanVnYXRlKFEsayxwKSx0aGlzLm5vcm1hbGl6ZTEzYihRLHApLHYu''@;'; put 'put ''bmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPXMubGVuZ3RoK3UubGVuZ3RoLHYuc3RyaXAoKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksdGhp''@;'; put 'put ''cy5tdWxUbyhzLHUpfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksWih0aGlzLHMsdSl9LGYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5tdWxUbyhzLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KTtmb3IodmFyIHU9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKnMsXz0oNjcxMDg4NjMmcCkrKDY3''@;'; put 'put ''MTA4ODYzJnUpO3U+Pj0yNix1Kz1wLzY3MTA4ODY0fDAsdSs9Xz4+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmX31yZXR1cm4gMCE9PXUmJih0aGlzLndvcmRzW3ZdPXUsdGhpcy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmltdWxuKHMpfSxmLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihzKXt2YXIgdT1mdW5jdGlv''@;'; put 'put ''biBGKFIpe2Zvcih2YXIgcz1uZXcgQXJyYXkoUi5iaXRMZW5ndGgoKSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gbmV3IGYoMSk7Zm9yKHZhciB2PXRoaXMs''@;'; put 'put ''cD0wO3A8dS5sZW5ndGgmJjA9PT11W3BdO3ArKyx2PXYuc3FyKCkpO2lmKCsrcDx1Lmxlbmd0aClmb3IodmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHMpe28o''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgXyx1PXMlMjYsdj0ocy11KS8yNixwPTY3MTA4ODYzPj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19dJnA7dGhpcy53b3Jkc1tfXT0oMHx0aGlzLndv''@;'; put 'put ''cmRzW19dKS1MPDx1fGssaz1MPj4+MjYtdX1rJiYodGhpcy53b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRoaXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7Xzx2O18rKyl0aGlzLndvcmRzW19dPTA7dGhp''@;'; put 'put ''cy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1LHYpe3ZhciBwO28oIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBzJiZzPj0wKSxwPXU/KHUtdSUyNikvMjY6MDt2YXIgXz1zJTI2LGs9TWF0aC5taW4oKHMtXykvMjYsdGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFyIGw9MDtsPGs7bCsrKXkud29yZHNbbF09dGhp''@;'; put 'put ''cy53b3Jkc1tsXTt5Lmxlbmd0aD1rfWlmKDAhPT1rKWlmKHRoaXMubGVuZ3RoPmspZm9yKHRoaXMubGVuZ3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBiPTA7Zm9y''@;'; put 'put ''KGw9dGhpcy5sZW5ndGgtMTtsPj0wJiYoMCE9PWJ8fGw+PXApO2wtLSl7dmFyIHE9MHx0aGlzLndvcmRzW2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29y''@;'; put 'put ''ZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXNobG4ocyl9LGYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHMpfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhpcy53b3Jkc1t2XSYxPDx1KSl9LGYucHJvdG90''@;'; put 'put ''eXBlLmltYXNrbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9dj90aGlzOigw''@;'; put 'put ''IT09dSYmdisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHYsdGhpcy5sZW5ndGgpLDAhPT11JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51PDx1KSx0aGlzLnN0cmlwKCkpfSxmLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLmltYXNrbihzKX0sZi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MD90aGlzLmlzdWJuKC1zKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHM/''@;'; put 'put ''KHRoaXMud29yZHNbMF09cy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihzKX0sZi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHMpe3RoaXMud29y''@;'; put 'put ''ZHNbMF0rPXM7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XT49NjcxMDg4NjQ7dSsrKXRoaXMud29yZHNbdV0tPTY3MTA4ODY0LHU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbdSsxXT0xOnRoaXMud29yZHNbdSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRo''@;'; put 'put ''Lm1heCh0aGlzLmxlbmd0aCx1KzEpLHRoaXN9LGYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHMpe2lmKG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MClyZXR1cm4gdGhpcy5pYWRkbigtcyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzLmlhZGRuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3Ro''@;'; put 'put ''JiZ0aGlzLndvcmRzW3VdPDA7dSsrKXRoaXMud29yZHNbdV0rPTY3MTA4ODY0LHRoaXMud29yZHNbdSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocyl9LGYucHJvdG90eXBlLnN1Ym49ZnVu''@;'; put 'put ''Y3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihzKX0sZi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sZi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGYucHJvdG90eXBlLl9p''@;'; put 'put ''c2hsbnN1Ym11bD1mdW5jdGlvbihzLHUsdil7dmFyIF87dGhpcy5fZXhwYW5kKHMubGVuZ3RoK3YpO3ZhciBrLEw9MDtmb3IoXz0wO188cy5sZW5ndGg7XysrKXtrPSgwfHRoaXMud29yZHNbXyt2XSkrTDt2YXIgeT0oMHxzLndvcmRzW19dKSp1O0w9KChrLT02NzEwODg2MyZ5KT4+MjYpLSh5''@;'; put 'put ''LzY3MTA4ODY0fDApLHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrfWZvcig7Xzx0aGlzLmxlbmd0aC12O18rKylMPShrPSgwfHRoaXMud29yZHNbXyt2XSkrTCk+PjI2LHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrO2lmKDA9PT1MKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG8oLTE9PT1M''@;'; put 'put ''KSxMPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUw9KGs9LSgwfHRoaXMud29yZHNbX10pK0wpPj4yNix0aGlzLndvcmRzW19dPTY3MTA4ODYzJms7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10''@;'; put 'put ''aGlzLmNsb25lKCksXz1zLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdOzAhPSh2PTI2LXRoaXMuX2NvdW50Qml0cyhrKSkmJihfPV8udXNobG4odikscC5pdXNobG4odiksaz0wfF8ud29yZHNbXy5sZW5ndGgtMV0pO3ZhciBsLHk9cC5sZW5ndGgtXy5sZW5ndGg7aWYoIm1vZCIhPT11KXsobD1u''@;'; put 'put ''ZXcgZihudWxsKSkubGVuZ3RoPXkrMSxsLndvcmRzPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKHZhciBiPTA7YjxsLmxlbmd0aDtiKyspbC53b3Jkc1tiXT0wfXZhciBxPXAuY2xvbmUoKS5faXNobG5zdWJtdWwoXywxLHkpOzA9PT1xLm5lZ2F0aXZlJiYocD1xLGwmJihsLndvcmRzW3ldPTEp''@;'; put 'put ''KTtmb3IodmFyIEc9eS0xO0c+PTA7Ry0tKXt2YXIgUT02NzEwODg2NCooMHxwLndvcmRzW18ubGVuZ3RoK0ddKSsoMHxwLndvcmRzW18ubGVuZ3RoK0ctMV0pO2ZvcihRPU1hdGgubWluKFEva3wwLDY3MTA4ODYzKSxwLl9pc2hsbnN1Ym11bChfLFEsRyk7MCE9PXAubmVnYXRpdmU7KVEtLSxw''@;'; put 'put ''Lm5lZ2F0aXZlPTAscC5faXNobG5zdWJtdWwoXywxLEcpLHAuaXNaZXJvKCl8fChwLm5lZ2F0aXZlXj0xKTtsJiYobC53b3Jkc1tHXT1RKX1yZXR1cm4gbCYmbC5zdHJpcCgpLHAuc3RyaXAoKSwiZGl2IiE9PXUmJjAhPT12JiZwLml1c2hybih2KSx7ZGl2Omx8fG51bGwsbW9kOnB9fSxmLnBy''@;'; put 'put ''b3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocyx1LHYpe3JldHVybiBvKCFzLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGYoMCksbW9kOm5ldyBmKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocyx1KSwibW9kIiE9PXUm''@;'; put 'put ''JihwPWsuZGl2Lm5lZygpKSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlhZGQocykpLHtkaXY6cCxtb2Q6X30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZT8oaz10aGlzLmRpdm1vZChzLm5lZygpLHUpLCJtb2QiIT09dSYmKHA9ay5k''@;'; put 'put ''aXYubmVnKCkpLHtkaXY6cCxtb2Q6ay5tb2R9KTp0aGlzLm5lZ2F0aXZlJnMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocy5uZWcoKSx1KSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlzdWIocykpLHtkaXY6ay5kaXYsbW9kOl99KTpzLmxl''@;'; put 'put ''bmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocyk8MD97ZGl2Om5ldyBmKDApLG1vZDp0aGlzfToxPT09cy5sZW5ndGg/ImRpdiI9PT11P3tkaXY6dGhpcy5kaXZuKHMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXU/e2RpdjpudWxsLG1vZDpuZXcgZih0aGlzLm1vZG4ocy53b3Jkc1sw''@;'; put 'put ''XSkpfTp7ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihzLHUpO3ZhciBwLF8sa30sZi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJkaXYiLCExKS5kaXZ9LGYucHJv''@;'; put 'put ''dG90eXBlLm1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMSkubW9kfSxmLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJtb2QiLCEwKS5tb2R9LGYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHMpe3ZhciB1PXRo''@;'; put 'put ''aXMuZGl2bW9kKHMpO2lmKHUubW9kLmlzWmVybygpKXJldHVybiB1LmRpdjt2YXIgdj0wIT09dS5kaXYubmVnYXRpdmU/dS5tb2QuaXN1YihzKTp1Lm1vZCxwPXMudXNocm4oMSksXz1zLmFuZGxuKDEpLGs9di5jbXAocCk7cmV0dXJuIGs8MHx8MT09PV8mJjA9PT1rP3UuZGl2OjAhPT11LmRp''@;'; put 'put ''di5uZWdhdGl2ZT91LmRpdi5pc3VibigxKTp1LmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9KDE8PDI2KSVzLHY9MCxwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdj0odSp2KygwfHRoaXMud29yZHNbcF0pKSVzO3Jl''@;'; put 'put ''dHVybiB2fSxmLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKzY3MTA4ODY0KnU7dGhpcy53b3Jkc1t2XT1wL3N8MCx1PXAlc31yZXR1cm4gdGhpcy5z''@;'; put 'put ''dHJpcCgpfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocyl9LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0''@;'; put 'put ''aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz1uZXcgZigwKSxMPW5ldyBmKDEpLHk9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpOyl1Lml1c2hybigxKSx2Lml1c2hybigxKSwrK3k7Zm9yKHZhciBsPXYuY2xvbmUoKSxiPXUuY2xvbmUoKTsh''@;'; put 'put ''dS5pc1plcm8oKTspe2Zvcih2YXIgcT0wLEc9MTshKHUud29yZHNbMF0mRykmJnE8MjY7KytxLEc8PD0xKTtpZihxPjApZm9yKHUuaXVzaHJuKHEpO3EtLSA+MDspKHAuaXNPZGQoKXx8Xy5pc09kZCgpKSYmKHAuaWFkZChsKSxfLmlzdWIoYikpLHAuaXVzaHJuKDEpLF8uaXVzaHJuKDEpO2Zv''@;'; put 'put ''cih2YXIgUT0wLHBlPTE7ISh2LndvcmRzWzBdJnBlKSYmUTwyNjsrK1EscGU8PD0xKTtpZihRPjApZm9yKHYuaXVzaHJuKFEpO1EtLSA+MDspKGsuaXNPZGQoKXx8TC5pc09kZCgpKSYmKGsuaWFkZChsKSxMLmlzdWIoYikpLGsuaXVzaHJuKDEpLEwuaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1''@;'; put 'put ''LmlzdWIodikscC5pc3ViKGspLF8uaXN1YihMKSk6KHYuaXN1Yih1KSxrLmlzdWIocCksTC5pc3ViKF8pKX1yZXR1cm57YTprLGI6TCxnY2Q6di5pdXNobG4oeSl9fSxmLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHEs''@;'; put 'put ''dT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUubmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3IodmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPXYuY2xvbmUoKTt1LmNtcG4oMSk+MCYmdi5jbXBuKDEpPjA7KXtmb3IodmFyIEw9MCx5PTE7ISh1LndvcmRzWzBdJnkpJiZMPDI2Oysr''@;'; put 'put ''TCx5PDw9MSk7aWYoTD4wKWZvcih1Lml1c2hybihMKTtMLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKGspLHAuaXVzaHJuKDEpO2Zvcih2YXIgbD0wLGI9MTshKHYud29yZHNbMF0mYikmJmw8MjY7KytsLGI8PD0xKTtpZihsPjApZm9yKHYuaXVzaHJuKGwpO2wtLSA+MDspXy5pc09kZCgpJiZf''@;'; put 'put ''LmlhZGQoayksXy5pdXNocm4oMSk7dS5jbXAodik+PTA/KHUuaXN1Yih2KSxwLmlzdWIoXykpOih2LmlzdWIodSksXy5pc3ViKHApKX1yZXR1cm4ocT0wPT09dS5jbXBuKDEpP3A6XykuY21wbigwKTwwJiZxLmlhZGQocykscX0sZi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHMpe2lmKHRoaXMu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIHMuYWJzKCk7aWYocy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgdT10aGlzLmNsb25lKCksdj1zLmNsb25lKCk7dS5uZWdhdGl2ZT0wLHYubmVnYXRpdmU9MDtmb3IodmFyIHA9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpO3ArKyl1Lml1c2hybigxKSx2''@;'; put 'put ''Lml1c2hybigxKTtmb3IoOzspe2Zvcig7dS5pc0V2ZW4oKTspdS5pdXNocm4oMSk7Zm9yKDt2LmlzRXZlbigpOyl2Lml1c2hybigxKTt2YXIgXz11LmNtcCh2KTtpZihfPDApe3ZhciBrPXU7dT12LHY9a31lbHNlIGlmKDA9PT1ffHwwPT09di5jbXBuKDEpKWJyZWFrO3UuaXN1Yih2KX1yZXR1''@;'; put 'put ''cm4gdi5pdXNobG4ocCl9LGYucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZWdjZChzKS5hLnVtb2Qocyl9LGYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4hKDEmfnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZzfSxmLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2Ygcyk7dmFyIHU9cyUyNix2PShzLXUpLzI2LHA9MTw8dTtpZih0aGlz''@;'; put 'put ''Lmxlbmd0aDw9dilyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XXw9cCx0aGlzO2Zvcih2YXIgXz1wLGs9djswIT09XyYmazx0aGlzLmxlbmd0aDtrKyspe3ZhciBMPTB8dGhpcy53b3Jkc1trXTtfPShMKz1fKT4+PjI2LHRoaXMud29yZHNba109TCY9NjcxMDg4NjN9cmV0''@;'; put 'put ''dXJuIDAhPT1fJiYodGhpcy53b3Jkc1trXT1fLHRoaXMubGVuZ3RoKyspLHRoaXN9LGYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxmLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHMpe3ZhciB2LHU9czwwO2lm''@;'; put 'put ''KDAhPT10aGlzLm5lZ2F0aXZlJiYhdSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl2PTE7ZWxzZXt1JiYocz0tcyksbyhzPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgcD0wfHRoaXMud29y''@;'; put 'put ''ZHNbMF07dj1wPT09cz8wOnA8cz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC12OnZ9LGYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihzKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiAxO3ZhciB1PXRoaXMudWNtcChzKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdTp1fSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHMpe2lmKHRoaXMubGVuZ3RoPnMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHMubGVuZ3RoKXJldHVybi0xO2Zvcih2''@;'; put 'put ''YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9MHx0aGlzLndvcmRzW3ZdLF89MHxzLndvcmRzW3ZdO2lmKHAhPT1fKXtwPF8/dT0tMTpwPl8mJih1PTEpO2JyZWFrfX1yZXR1cm4gdX0sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHMpe3JldHVybiAxPT09dGhpcy5jbXBu''@;'; put 'put ''KHMpfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wKHMpfSxmLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcG4ocyk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXAocyk+PTB9LGYucHJv''@;'; put 'put ''dG90eXBlLmx0bj1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPD0wfSxmLnByb3RvdHlwZS5s''@;'; put 'put ''dGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPD0wfSxmLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXAocyl9LGYucmVkPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biBuZXcgbWUocyl9LGYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG8oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscy5jb252ZXJ0''@;'; put 'put ''VG8odGhpcykuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sZi5wcm90b3R5''@;'; put 'put ''cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnJlZD1zLHRoaXN9LGYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHMpfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSUFkZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHMpfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTaGwg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscyks''@;'; put 'put ''dGhpcy5yZWQubXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLmltdWwodGhpcyxzKX0sZi5wcm90''@;'; put 'put ''b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0''@;'; put 'put ''aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sZi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx''@;'; put 'put ''KHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5yZWRQb3c9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQmJiFzLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxzKX07dmFyIEs9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxs''@;'; put 'put ''fTtmdW5jdGlvbiBYKFIscyl7dGhpcy5uYW1lPVIsdGhpcy5wPW5ldyBmKHMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBmKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBuZSgpe1guY2FsbCh0aGlz''@;'; put 'put ''LCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBzZSgpe1guY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAw''@;'; put 'put ''MDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBoZSgpe1guY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBfZSgpe1guY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBtZShSKXtpZigic3RyaW5nIj09dHlwZW9mIFIpe3ZhciBzPWYuX3ByaW1lKFIpO3RoaXMubT1zLnAsdGhpcy5wcmltZT1zfWVsc2UgbyhSLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0''@;'; put 'put ''ZXIgdGhhbiAxIiksdGhpcy5tPVIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEZlKFIpe21lLmNhbGwodGhpcyxSKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBmKDEpLml1''@;'; put 'put ''c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5y''@;'; put 'put ''KSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVgucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gcy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHN9LFgucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocyl7dmFy''@;'; put 'put ''IHYsdT1zO2Rve3RoaXMuc3BsaXQodSx0aGlzLnRtcCksdj0odT0odT10aGlzLmltdWxLKHUpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUodj50aGlzLm4pO3ZhciBwPXY8dGhpcy5uPy0xOnUudWNtcCh0aGlzLnApO3JldHVybiAwPT09cD8odS53b3Jkc1swXT0wLHUubGVu''@;'; put 'put ''Z3RoPTEpOnA+MD91LmlzdWIodGhpcy5wKTp2b2lkIDAhPT11LnN0cmlwP3Uuc3RyaXAoKTp1Ll9zdHJpcCgpLHV9LFgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7cy5pdXNocm4odGhpcy5uLDAsdSl9LFgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe3JldHVybiBzLmltdWwo''@;'; put 'put ''dGhpcy5rKX0sSShuZSxYKSxuZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9NDE5NDMwMyxwPU1hdGgubWluKHMubGVuZ3RoLDkpLF89MDtfPHA7XysrKXUud29yZHNbX109cy53b3Jkc1tfXTtpZih1Lmxlbmd0aD1wLHMubGVuZ3RoPD05KXJldHVybiBzLndvcmRz''@;'; put 'put ''WzBdPTAsdm9pZChzLmxlbmd0aD0xKTt2YXIgaz1zLndvcmRzWzldO2Zvcih1LndvcmRzW3UubGVuZ3RoKytdPWsmdixfPTEwO188cy5sZW5ndGg7XysrKXt2YXIgTD0wfHMud29yZHNbX107cy53b3Jkc1tfLTEwXT0oTCZ2KTw8NHxrPj4+MjIsaz1MfXMud29yZHNbXy0xMF09az4+Pj0yMixz''@;'; put 'put ''Lmxlbmd0aC09MD09PWsmJnMubGVuZ3RoPjEwPzEwOjl9LG5lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtzLndvcmRzW3MubGVuZ3RoXT0wLHMud29yZHNbcy5sZW5ndGgrMV09MCxzLmxlbmd0aCs9Mjtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTB8cy53b3Jk''@;'; put 'put ''c1t2XTtzLndvcmRzW3ZdPTY3MTA4ODYzJih1Kz05NzcqcCksdT02NCpwKyh1LzY3MTA4ODY0fDApfXJldHVybiAwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmKHMubGVuZ3RoLS0sMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJnMubGVuZ3RoLS0pLHN9LEkoc2UsWCksSShoZSxYKSxJKF9lLFgp''@;'; put 'put ''LF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTE5KigwfHMud29yZHNbdl0pK3UsXz02NzEwODg2MyZwO3A+Pj49MjYscy53b3Jkc1t2XT1fLHU9cH1yZXR1cm4gMCE9PXUmJihzLndvcmRzW3MubGVuZ3RoKytdPXUp''@;'; put 'put ''LHN9LGYuX3ByaW1lPWZ1bmN0aW9uKHMpe2lmKEtbc10pcmV0dXJuIEtbc107dmFyIHU7aWYoImsyNTYiPT09cyl1PW5ldyBuZTtlbHNlIGlmKCJwMjI0Ij09PXMpdT1uZXcgc2U7ZWxzZSBpZigicDE5MiI9PT1zKXU9bmV3IGhlO2Vsc2V7aWYoInAyNTUxOSIhPT1zKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5rbm93biBwcmltZSAiK3MpO3U9bmV3IF9lfXJldHVybiBLW3NdPXUsdX0sbWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpfSxtZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocyx1KXtvKCEocy5uZWdhdGl2ZXx1Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHMucmVkJiZzLnJlZD09PXUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9''@;'; put 'put ''LG1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShzKS5fZm9yY2VSZWQodGhpcyk6cy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHMpe3JldHVybiBzLmlzWmVybygp''@;'; put 'put ''P3MuY2xvbmUoKTp0aGlzLm0uc3ViKHMpLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdi5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LG1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuaWFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIg''@;'; put 'put ''dj1zLnN1Yih1KTtyZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlzdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5t''@;'; put 'put ''KSx2fSxtZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocyksdGhpcy5pbW9kKHMudXNobG4odSkpfSxtZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMsdSksdGhpcy5pbW9kKHMuaW11bCh1KSl9LG1l''@;'; put 'put ''LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChzLm11bCh1KSl9LG1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltdWwocyxzLmNsb25lKCkpfSxtZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3JldHVybiB0aGlzLm11bChzLHMpfSxtZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihzKXtpZihzLmlzWmVybygpKXJldHVybiBzLmNsb25lKCk7dmFyIHU9dGhpcy5tLmFuZGxuKDMpO2lmKG8odSUyPT0xKSwzPT09dSl7dmFyIHY9dGhpcy5tLmFkZChuZXcgZigxKSkuaXVzaHJuKDIpO3Jl''@;'; put 'put ''dHVybiB0aGlzLnBvdyhzLHYpfWZvcih2YXIgcD10aGlzLm0uc3VibigxKSxfPTA7IXAuaXNaZXJvKCkmJjA9PT1wLmFuZGxuKDEpOylfKysscC5pdXNocm4oMSk7byghcC5pc1plcm8oKSk7dmFyIGs9bmV3IGYoMSkudG9SZWQodGhpcyksTD1rLnJlZE5lZygpLHk9dGhpcy5tLnN1Ym4oMSku''@;'; put 'put ''aXVzaHJuKDEpLGw9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihsPW5ldyBmKDIqbCpsKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobCx5KS5jbXAoTCk7KWwucmVkSUFkZChMKTtmb3IodmFyIGI9dGhpcy5wb3cobCxwKSxxPXRoaXMucG93KHMscC5hZGRuKDEpLml1c2hybigxKSksRz10aGlz''@;'; put 'put ''LnBvdyhzLHApLFE9XzswIT09Ry5jbXAoayk7KXtmb3IodmFyIHBlPUcsUGU9MDswIT09cGUuY21wKGspO1BlKyspcGU9cGUucmVkU3FyKCk7byhQZTxRKTt2YXIgWmU9dGhpcy5wb3coYixuZXcgZigxKS5pdXNobG4oUS1QZS0xKSk7cT1xLnJlZE11bChaZSksYj1aZS5yZWRTcXIoKSxHPUcu''@;'; put 'put ''cmVkTXVsKGIpLFE9UGV9cmV0dXJuIHF9LG1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3ZhciB1PXMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT11Lm5lZ2F0aXZlPyh1Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHUpLnJlZE5lZygpKTp0aGlzLmltb2QodSl9LG1lLnByb3RvdHlwZS5w''@;'; put 'put ''b3c9ZnVuY3Rpb24ocyx1KXtpZih1LmlzWmVybygpKXJldHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtpZigwPT09dS5jbXBuKDEpKXJldHVybiBzLmNsb25lKCk7dmFyIHA9bmV3IEFycmF5KDE2KTtwWzBdPW5ldyBmKDEpLnRvUmVkKHRoaXMpLHBbMV09cztmb3IodmFyIF89MjtfPHAubGVu''@;'; put 'put ''Z3RoO18rKylwW19dPXRoaXMubXVsKHBbXy0xXSxzKTt2YXIgaz1wWzBdLEw9MCx5PTAsbD11LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLF89dS5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciBiPXUud29yZHNbX10scT1sLTE7cT49MDtxLS0pe3ZhciBHPWI+PnEmMTtrIT09''@;'; put 'put ''cFswXSYmKGs9dGhpcy5zcXIoaykpLDAhPT1HfHwwIT09TD8oTDw8PTEsTHw9RywoND09Kyt5fHwwPT09XyYmMD09PXEpJiYoaz10aGlzLm11bChrLHBbTF0pLHk9MCxMPTApKTp5PTB9bD0yNn1yZXR1cm4ga30sbWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihzKXt2YXIgdT1zLnVt''@;'; put 'put ''b2QodGhpcy5tKTtyZXR1cm4gdT09PXM/dS5jbG9uZSgpOnV9LG1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT1zLmNsb25lKCk7cmV0dXJuIHUucmVkPW51bGwsdX0sZi5tb250PWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgRmUocyl9LEkoRmUsbWUpLEZlLnByb3Rv''@;'; put 'put ''dHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLnVzaGxuKHRoaXMuc2hpZnQpKX0sRmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuaW1vZChzLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gdS5yZWQ9bnVsbCx1fSxGZS5wcm90''@;'; put 'put ''b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIHMud29yZHNbMF09MCxzLmxlbmd0aD0xLHM7dmFyIHY9cy5pbXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMu''@;'; put 'put ''bSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtpZihz''@;'; put 'put ''LmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBuZXcgZigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHY9cy5tdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxfPXYuaXN1YihwKS5pdXNocm4odGhpcy5zaGlm''@;'; put 'put ''dCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLl9pbnZtcCh0aGlzLm0pLm11''@;'; put 'put ''bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odGU9ZC5ubWQodGUpLHRoaXMpfSwzNDgyOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNTcxNyksaD1kKDIzMTgpLG89ZCg5Nzg1KSxJPWQoOTA3MiksZj1kKDEwMjcpO2Z1bmN0aW9uIFQoQSl7Zi5jYWxsKHRoaXMsImRpZ2Vz''@;'; put 'put ''dCIpLHRoaXMuX2hhc2g9QX1TKFQsZiksVC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihBKXt0aGlzLl9oYXNoLnVwZGF0ZShBKX0sVC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LHRlLmV4cG9ydHM9ZnVuY3Rpb24oTSl7cmV0dXJu''@;'; put 'put ''Im1kNSI9PT0oTT1NLnRvTG93ZXJDYXNlKCkpP25ldyBoOiJybWQxNjAiPT09TXx8InJpcGVtZDE2MCI9PT1NP25ldyBvOm5ldyBUKEkoTSkpfX0sODAyODoodGUsaixkKT0+e3ZhciBTPWQoMjMxOCk7dGUuZXhwb3J0cz1mdW5jdGlvbihoKXtyZXR1cm4obmV3IFMpLnVwZGF0ZShoKS5kaWdl''@;'; put 'put ''c3QoKX19LDgzNTU6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg1NzE3KSxoPWQoMTAzMSksbz1kKDEwMjcpLEk9ZCg5NTA5KS5CdWZmZXIsZj1kKDgwMjgpLFQ9ZCg5Nzg1KSxBPWQoOTA3MiksTT1JLmFsbG9jKDEyOCk7ZnVuY3Rpb24gTyhELEUpe28uY2FsbCh0aGlzLCJkaWdl''@;'; put 'put ''c3QiKSwic3RyaW5nIj09dHlwZW9mIEUmJihFPUkuZnJvbShFKSk7dmFyIEI9InNoYTUxMiI9PT1EfHwic2hhMzg0Ij09PUQ/MTI4OjY0O3RoaXMuX2FsZz1ELHRoaXMuX2tleT1FLEUubGVuZ3RoPkI/RT0oInJtZDE2MCI9PT1EP25ldyBUOkEoRCkpLnVwZGF0ZShFKS5kaWdlc3QoKTpFLmxl''@;'; put 'put ''bmd0aDxCJiYoRT1JLmNvbmNhdChbRSxNXSxCKSk7Zm9yKHZhciBOPXRoaXMuX2lwYWQ9SS5hbGxvY1Vuc2FmZShCKSxIPXRoaXMuX29wYWQ9SS5hbGxvY1Vuc2FmZShCKSx6PTA7ejxCO3orKylOW3pdPTU0XkVbel0sSFt6XT05Ml5FW3pdO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1EP25ldyBU''@;'; put 'put ''OkEoRCksdGhpcy5faGFzaC51cGRhdGUoTil9UyhPLG8pLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRCl7dGhpcy5faGFzaC51cGRhdGUoRCl9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhp''@;'; put 'put ''cy5fYWxnP25ldyBUOkEodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShEKS5kaWdlc3QoKX0sdGUuZXhwb3J0cz1mdW5jdGlvbihFLEIpe3JldHVybiJybWQxNjAiPT09KEU9RS50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1FP25ldyBPKCJybWQxNjAiLEIpOiJt''@;'; put 'put ''ZDUiPT09RT9uZXcgaChmLEIpOm5ldyBPKEUsQil9fSwxMDMxOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNTcxNyksaD1kKDk1MDkpLkJ1ZmZlcixvPWQoMTAyNyksST1oLmFsbG9jKDEyOCksZj02NDtmdW5jdGlvbiBUKEEsTSl7by5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgTSYmKE09aC5mcm9tKE0pKSx0aGlzLl9hbGc9QSx0aGlzLl9rZXk9TSxNLmxlbmd0aD5mP009QShNKTpNLmxlbmd0aDxmJiYoTT1oLmNvbmNhdChbTSxJXSxmKSk7Zm9yKHZhciBPPXRoaXMuX2lwYWQ9aC5hbGxvY1Vuc2FmZShmKSxEPXRoaXMuX29wYWQ9aC5hbGxvY1Vu''@;'; put 'put ''c2FmZShmKSxFPTA7RTxmO0UrKylPW0VdPTU0Xk1bRV0sRFtFXT05Ml5NW0VdO3RoaXMuX2hhc2g9W09dfVMoVCxvKSxULnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEEpe3RoaXMuX2hhc2gucHVzaChBKX0sVC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5fYWxn''@;'; put 'put ''KGguY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKGguY29uY2F0KFt0aGlzLl9vcGFkLEFdKSl9LHRlLmV4cG9ydHM9VH0sNTgzNToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0IjtqLnJhbmRvbUJ5dGVzPWoucm5nPWoucHNldWRvUmFuZG9tQnl0ZXM9ai5wcm5nPWQoMTc5OCks''@;'; put 'put ''ai5jcmVhdGVIYXNoPWouSGFzaD1kKDM0ODIpLGouY3JlYXRlSG1hYz1qLkhtYWM9ZCg4MzU1KTt2YXIgUz1kKDYwNDIpLGg9T2JqZWN0LmtleXMoUyksbz1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoaCk7ai5nZXRI''@;'; put 'put ''YXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gb307dmFyIEk9ZCg1NjMyKTtqLnBia2RmMj1JLnBia2RmMixqLnBia2RmMlN5bmM9SS5wYmtkZjJTeW5jO3ZhciBmPWQoMzYxNCk7ai5DaXBoZXI9Zi5DaXBoZXIsai5jcmVhdGVDaXBoZXI9Zi5jcmVhdGVDaXBoZXIsai5DaXBoZXJpdj1mLkNpcGhl''@;'; put 'put ''cml2LGouY3JlYXRlQ2lwaGVyaXY9Zi5jcmVhdGVDaXBoZXJpdixqLkRlY2lwaGVyPWYuRGVjaXBoZXIsai5jcmVhdGVEZWNpcGhlcj1mLmNyZWF0ZURlY2lwaGVyLGouRGVjaXBoZXJpdj1mLkRlY2lwaGVyaXYsai5jcmVhdGVEZWNpcGhlcml2PWYuY3JlYXRlRGVjaXBoZXJpdixqLmdldENp''@;'; put 'put ''cGhlcnM9Zi5nZXRDaXBoZXJzLGoubGlzdENpcGhlcnM9Zi5saXN0Q2lwaGVyczt2YXIgVD1kKDI2MDcpO2ouRGlmZmllSGVsbG1hbkdyb3VwPVQuRGlmZmllSGVsbG1hbkdyb3VwLGouY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVQuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLGouZ2V0RGlm''@;'; put 'put ''ZmllSGVsbG1hbj1ULmdldERpZmZpZUhlbGxtYW4sai5jcmVhdGVEaWZmaWVIZWxsbWFuPVQuY3JlYXRlRGlmZmllSGVsbG1hbixqLkRpZmZpZUhlbGxtYW49VC5EaWZmaWVIZWxsbWFuO3ZhciBBPWQoNDc0Myk7ai5jcmVhdGVTaWduPUEuY3JlYXRlU2lnbixqLlNpZ249QS5TaWduLGouY3Jl''@;'; put 'put ''YXRlVmVyaWZ5PUEuY3JlYXRlVmVyaWZ5LGouVmVyaWZ5PUEuVmVyaWZ5LGouY3JlYXRlRUNESD1kKDYzOTMpO3ZhciBNPWQoNzkwMCk7ai5wdWJsaWNFbmNyeXB0PU0ucHVibGljRW5jcnlwdCxqLnByaXZhdGVFbmNyeXB0PU0ucHJpdmF0ZUVuY3J5cHQsai5wdWJsaWNEZWNyeXB0PU0ucHVi''@;'; put 'put ''bGljRGVjcnlwdCxqLnByaXZhdGVEZWNyeXB0PU0ucHJpdmF0ZURlY3J5cHQ7dmFyIE89ZCg3OTYzKTtqLnJhbmRvbUZpbGw9Ty5yYW5kb21GaWxsLGoucmFuZG9tRmlsbFN5bmM9Ty5yYW5kb21GaWxsU3luYyxqLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldFxud2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Iil9LGouY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1F''@;'; put 'put ''OjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFE''@;'; put 'put ''RElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0s''@;'; put 'put ''MjI5NjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ0MjkpLGg9ZCgzNDY0KSxvPWQoNDQ1MyksST1kKDcyOTYpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oVCxBLE0pe2lmKCFUfHwib2JqZWN0IiE9dHlwZW9mIFQmJiJmdW5jdGlvbiIhPXR5cGVvZiBUKXRocm93IG5ldyBvKCJgb2Jq''@;'; put 'put ''YCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCIpO2lmKCJzdHJpbmciIT10eXBlb2YgQSYmInN5bWJvbCIhPXR5cGVvZiBBKXRocm93IG5ldyBvKCJgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xgIik7aWYoYXJndW1lbnRzLmxlbmd0aD4zJiYiYm9vbGVh''@;'; put 'put ''biIhPXR5cGVvZiBhcmd1bWVudHNbM10mJm51bGwhPT1hcmd1bWVudHNbM10pdGhyb3cgbmV3IG8oImBub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjQmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50''@;'; put 'put ''c1s0XSYmbnVsbCE9PWFyZ3VtZW50c1s0XSl0aHJvdyBuZXcgbygiYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjUmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s1XSYmbnVsbCE9PWFyZ3VtZW50''@;'; put 'put ''c1s1XSl0aHJvdyBuZXcgbygiYG5vbkNvbmZpZ3VyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD42JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNl0pdGhyb3cgbmV3IG8oImBsb29zZWAsIGlmIHByb3ZpZGVk''@;'; put 'put ''LCBtdXN0IGJlIGEgYm9vbGVhbiIpO3ZhciBPPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106bnVsbCxEPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCxFPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06bnVsbCxCPWFyZ3VtZW50cy5sZW5ndGg+NiYm''@;'; put 'put ''YXJndW1lbnRzWzZdLEY9ISFJJiZJKFQsQSk7aWYoUylTKFQsQSx7Y29uZmlndXJhYmxlOm51bGw9PT1FJiZGP0YuY29uZmlndXJhYmxlOiFFLGVudW1lcmFibGU6bnVsbD09PU8mJkY/Ri5lbnVtZXJhYmxlOiFPLHZhbHVlOk0sd3JpdGFibGU6bnVsbD09PUQmJkY/Ri53cml0YWJsZTohRH0p''@;'; put 'put ''O2Vsc2V7aWYoIUImJihPfHxEfHxFKSl0aHJvdyBuZXcgaCgiVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4iKTtUW0FdPU19fX0sNDI4OToodGUs''@;'; put 'put ''aixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDIyMTUpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImZvbyIpLG89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPUFycmF5LnByb3RvdHlwZS5jb25jYXQsZj1kKDIyOTYpLEE9ZCgxMDQ0''@;'; put 'put ''KSgpLE09ZnVuY3Rpb24oRCxFLEIsRil7aWYoRSBpbiBEKWlmKCEwPT09Ril7aWYoRFtFXT09PUIpcmV0dXJufWVsc2UgaWYoIWZ1bmN0aW9uKEQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBEJiYiW29iamVjdCBGdW5jdGlvbl0iPT09by5jYWxsKEQpfShGKXx8IUYoKSlyZXR1cm47QT9m''@;'; put 'put ''KEQsRSxCLCEwKTpmKEQsRSxCKX0sTz1mdW5jdGlvbihELEUpe3ZhciBCPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06e30sRj1TKEUpO2gmJihGPUkuY2FsbChGLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoRSkpKTtmb3IodmFyIE49MDtOPEYubGVuZ3RoO04rPTEpTShE''@;'; put 'put ''LEZbTl0sRVtGW05dXSxCW0ZbTl1dKX07Ty5zdXBwb3J0c0Rlc2NyaXB0b3JzPSEhQSx0ZS5leHBvcnRzPU99LDUyNTE6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7ai51dGlscz1kKDEyNzgpLGouQ2lwaGVyPWQoNTc1Niksai5ERVM9ZCg3NzgpLGouQ0JDPWQoOTA1MSksai5FREU9ZCg2NTEp''@;'; put 'put ''fSw5MDUxOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoOTc0NiksaD1kKDU3MTcpLG89e307ZnVuY3Rpb24gSShUKXtTLmVxdWFsKFQubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBBPTA7QTx0aGlzLml2Lmxlbmd0aDtB''@;'; put 'put ''KyspdGhpcy5pdltBXT1UW0FdfWouaW5zdGFudGlhdGU9ZnVuY3Rpb24gZihUKXtmdW5jdGlvbiBBKEUpe1QuY2FsbCh0aGlzLEUpLHRoaXMuX2NiY0luaXQoKX1oKEEsVCk7Zm9yKHZhciBNPU9iamVjdC5rZXlzKG8pLE89MDtPPE0ubGVuZ3RoO08rKyl7dmFyIEQ9TVtPXTtBLnByb3RvdHlw''@;'; put 'put ''ZVtEXT1vW0RdfXJldHVybiBBLmNyZWF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gbmV3IEEoQil9LEF9LG8uX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgQT1uZXcgSSh0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUF9LG8uX3VwZGF0ZT1mdW5jdGlvbihBLE0sTyxEKXt2YXIgQj10aGlz''@;'; put 'put ''LmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsRj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgTj0wO048dGhpcy5ibG9ja1NpemU7TisrKUZbTl1ePUFbTStOXTtmb3IoQi5fdXBkYXRlLmNhbGwodGhpcyxGLDAsTyxEKSxOPTA7Tjx0aGlz''@;'; put 'put ''LmJsb2NrU2l6ZTtOKyspRltOXT1PW0QrTl19ZWxzZXtmb3IoQi5fdXBkYXRlLmNhbGwodGhpcyxBLE0sTyxEKSxOPTA7Tjx0aGlzLmJsb2NrU2l6ZTtOKyspT1tEK05dXj1GW05dO2ZvcihOPTA7Tjx0aGlzLmJsb2NrU2l6ZTtOKyspRltOXT1BW00rTl19fX0sNTc1NjoodGUsaixkKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgUz1kKDk3NDYpO2Z1bmN0aW9uIGgobyl7dGhpcy5vcHRpb25zPW8sdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9''@;'; put 'put ''MCx0aGlzLnBhZGRpbmc9ITEhPT1vLnBhZGRpbmd9dGUuZXhwb3J0cz1oLGgucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxoLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSSl7cmV0dXJuIDA9PT1JLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVj''@;'; put 'put ''cnlwdChJKTp0aGlzLl91cGRhdGVFbmNyeXB0KEkpfSxoLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKEksZil7Zm9yKHZhciBUPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixJLmxlbmd0aC1mKSxBPTA7QTxUO0ErKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZl''@;'; put 'put ''ck9mZitBXT1JW2YrQV07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1ULFR9LGgucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihJLGYpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxJLGYpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LGgucHJvdG90eXBl''@;'; put 'put ''Ll91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKEkpe3ZhciBmPTAsVD0wLE09bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrSS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJihmKz10aGlzLl9idWZmZXIoSSxmKSx0aGlzLmJ1ZmZl''@;'; put 'put ''ck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKFQrPXRoaXMuX2ZsdXNoQnVmZmVyKE0sVCkpKTtmb3IodmFyIE89SS5sZW5ndGgtKEkubGVuZ3RoLWYpJXRoaXMuYmxvY2tTaXplO2Y8TztmKz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoSSxmLE0sVCksVCs9dGhpcy5ibG9ja1NpemU7''@;'; put 'put ''Zm9yKDtmPEkubGVuZ3RoO2YrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1JW2ZdO3JldHVybiBNfSxoLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihJKXtmb3IodmFyIGY9MCxUPTAsQT1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK0ku''@;'; put 'put ''bGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxNPW5ldyBBcnJheShBKnRoaXMuYmxvY2tTaXplKTtBPjA7QS0tKWYrPXRoaXMuX2J1ZmZlcihJLGYpLFQrPXRoaXMuX2ZsdXNoQnVmZmVyKE0sVCk7cmV0dXJuIGYrPXRoaXMuX2J1ZmZlcihJLGYpLE19LGgucHJvdG90eXBlLmZpbmFsPWZ1bmN0''@;'; put 'put ''aW9uKEkpe3ZhciBmLFQ7cmV0dXJuIEkmJihmPXRoaXMudXBkYXRlKEkpKSxUPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxmP2YuY29uY2F0KFQpOlR9LGgucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oSSxmKXtpZigwPT09''@;'; put 'put ''ZilyZXR1cm4hMTtmb3IoO2Y8SS5sZW5ndGg7KUlbZisrXT0wO3JldHVybiEwfSxoLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIEk9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXpl''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSwwKSxJfSxoLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEl9LGgucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXtTLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3Qg''@;'; put 'put ''ZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBJPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKEksMCksdGhpcy5fdW5wYWQoSSl9fSw3Nzg6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg5NzQ2KSxoPWQoNTcxNyksbz1kKDEyNzgp''@;'; put 'put ''LEk9ZCg1NzU2KTtmdW5jdGlvbiBmKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIFQoTSl7SS5jYWxsKHRoaXMsTSk7dmFyIE89bmV3IGY7dGhpcy5fZGVzU3RhdGU9Tyx0aGlzLmRlcml2ZUtleXMoTyxNLmtleSl9aChULEkpLHRlLmV4cG9ydHM9VCxU''@;'; put 'put ''LmNyZWF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gbmV3IFQoTyl9O3ZhciBBPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtULnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKE8sRCl7Ty5rZXlzPW5ldyBBcnJheSgzMiksUy5lcXVhbChELmxlbmd0aCx0aGlzLmJsb2NrU2l6''@;'; put 'put ''ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEU9by5yZWFkVUludDMyQkUoRCwwKSxCPW8ucmVhZFVJbnQzMkJFKEQsNCk7by5wYzEoRSxCLE8udG1wLDApLEU9Ty50bXBbMF0sQj1PLnRtcFsxXTtmb3IodmFyIEY9MDtGPE8ua2V5cy5sZW5ndGg7Ris9Mil7dmFyIE49QVtGPj4+MV07RT1v''@;'; put 'put ''LnIyOHNobChFLE4pLEI9by5yMjhzaGwoQixOKSxvLnBjMihFLEIsTy5rZXlzLEYpfX0sVC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPLEQsRSxCKXt2YXIgRj10aGlzLl9kZXNTdGF0ZSxOPW8ucmVhZFVJbnQzMkJFKE8sRCksSD1vLnJlYWRVSW50MzJCRShPLEQrNCk7by5pcChOLEgs''@;'; put 'put ''Ri50bXAsMCksTj1GLnRtcFswXSxIPUYudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KEYsTixILEYudG1wLDApOnRoaXMuX2RlY3J5cHQoRixOLEgsRi50bXAsMCksSD1GLnRtcFsxXSxvLndyaXRlVUludDMyQkUoRSxOPUYudG1wWzBdLEIpLG8ud3JpdGVVSW50''@;'; put 'put ''MzJCRShFLEgsQis0KX0sVC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihPLEQpe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgRT1PLmxlbmd0aC1ELEI9RDtCPE8ubGVuZ3RoO0IrKylPW0JdPUU7cmV0dXJuITB9LFQucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihPKXtp''@;'; put 'put ''ZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gTztmb3IodmFyIEQ9T1tPLmxlbmd0aC0xXSxFPU8ubGVuZ3RoLUQ7RTxPLmxlbmd0aDtFKyspUy5lcXVhbChPW0VdLEQpO3JldHVybiBPLnNsaWNlKDAsTy5sZW5ndGgtRCl9LFQucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKE8sRCxFLEIs''@;'; put 'put ''Ril7Zm9yKHZhciBOPUQsSD1FLHo9MDt6PE8ua2V5cy5sZW5ndGg7eis9Mil7dmFyIFo9Ty5rZXlzW3pdLFU9Ty5rZXlzW3orMV07by5leHBhbmQoSCxPLnRtcCwwKTt2YXIgSz1vLnN1YnN0aXR1dGUoWl49Ty50bXBbMF0sVV49Ty50bXBbMV0pLG5lPUg7SD0oTl5vLnBlcm11dGUoSykpPj4+''@;'; put 'put ''MCxOPW5lfW8ucmlwKEgsTixCLEYpfSxULnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihPLEQsRSxCLEYpe2Zvcih2YXIgTj1FLEg9RCx6PU8ua2V5cy5sZW5ndGgtMjt6Pj0wO3otPTIpe3ZhciBaPU8ua2V5c1t6XSxVPU8ua2V5c1t6KzFdO28uZXhwYW5kKE4sTy50bXAsMCk7dmFyIEs9''@;'; put 'put ''by5zdWJzdGl0dXRlKFpePU8udG1wWzBdLFVePU8udG1wWzFdKSxuZT1OO049KEheby5wZXJtdXRlKEspKT4+PjAsSD1uZX1vLnJpcChOLEgsQixGKX19LDY1MToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk3NDYpLGg9ZCg1NzE3KSxvPWQoNTc1NiksST1kKDc3OCk7ZnVuY3Rp''@;'; put 'put ''b24gZihBLE0pe1MuZXF1YWwoTS5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBPPU0uc2xpY2UoMCw4KSxEPU0uc2xpY2UoOCwxNiksRT1NLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09QT9bSS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpPfSks''@;'; put 'put ''SS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpEfSksSS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpFfSldOltJLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OkV9KSxJLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5OkR9KSxJLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok99''@;'; put 'put ''KV19ZnVuY3Rpb24gVChBKXtvLmNhbGwodGhpcyxBKTt2YXIgTT1uZXcgZih0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9TX1oKFQsbyksdGUuZXhwb3J0cz1ULFQuY3JlYXRlPWZ1bmN0aW9uKE0pe3JldHVybiBuZXcgVChNKX0sVC5wcm90b3R5cGUuX3VwZGF0''@;'; put 'put ''ZT1mdW5jdGlvbihNLE8sRCxFKXt2YXIgQj10aGlzLl9lZGVTdGF0ZTtCLmNpcGhlcnNbMF0uX3VwZGF0ZShNLE8sRCxFKSxCLmNpcGhlcnNbMV0uX3VwZGF0ZShELEUsRCxFKSxCLmNpcGhlcnNbMl0uX3VwZGF0ZShELEUsRCxFKX0sVC5wcm90b3R5cGUuX3BhZD1JLnByb3RvdHlwZS5fcGFk''@;'; put 'put ''LFQucHJvdG90eXBlLl91bnBhZD1JLnByb3RvdHlwZS5fdW5wYWR9LDEyNzg6KHRlLGopPT57InVzZSBzdHJpY3QiO2oucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEksZil7cmV0dXJuKElbMCtmXTw8MjR8SVsxK2ZdPDwxNnxJWzIrZl08PDh8SVszK2ZdKT4+PjB9LGoud3JpdGVVSW50MzJCRT1m''@;'; put 'put ''dW5jdGlvbihJLGYsVCl7SVswK1RdPWY+Pj4yNCxJWzErVF09Zj4+PjE2JjI1NSxJWzIrVF09Zj4+PjgmMjU1LElbMytUXT0yNTUmZn0sai5pcD1mdW5jdGlvbihJLGYsVCxBKXtmb3IodmFyIE09MCxPPTAsRD02O0Q+PTA7RC09Mil7Zm9yKHZhciBFPTA7RTw9MjQ7RSs9OClNPDw9MSxNfD1m''@;'; put 'put ''Pj4+RStEJjE7Zm9yKEU9MDtFPD0yNDtFKz04KU08PD0xLE18PUk+Pj5FK0QmMX1mb3IoRD02O0Q+PTA7RC09Mil7Zm9yKEU9MTtFPD0yNTtFKz04KU88PD0xLE98PWY+Pj5FK0QmMTtmb3IoRT0xO0U8PTI1O0UrPTgpTzw8PTEsT3w9ST4+PkUrRCYxfVRbQSswXT1NPj4+MCxUW0ErMV09Tz4+''@;'; put 'put ''PjB9LGoucmlwPWZ1bmN0aW9uKEksZixULEEpe2Zvcih2YXIgTT0wLE89MCxEPTA7RDw0O0QrKylmb3IodmFyIEU9MjQ7RT49MDtFLT04KU08PD0xLE18PWY+Pj5FK0QmMSxNPDw9MSxNfD1JPj4+RStEJjE7Zm9yKEQ9NDtEPDg7RCsrKWZvcihFPTI0O0U+PTA7RS09OClPPDw9MSxPfD1mPj4+''@;'; put 'put ''RStEJjEsTzw8PTEsT3w9ST4+PkUrRCYxO1RbQSswXT1NPj4+MCxUW0ErMV09Tz4+PjB9LGoucGMxPWZ1bmN0aW9uKEksZixULEEpe2Zvcih2YXIgTT0wLE89MCxEPTc7RD49NTtELS0pe2Zvcih2YXIgRT0wO0U8PTI0O0UrPTgpTTw8PTEsTXw9Zj4+RStEJjE7Zm9yKEU9MDtFPD0yNDtFKz04''@;'; put 'put ''KU08PD0xLE18PUk+PkUrRCYxfWZvcihFPTA7RTw9MjQ7RSs9OClNPDw9MSxNfD1mPj5FK0QmMTtmb3IoRD0xO0Q8PTM7RCsrKXtmb3IoRT0wO0U8PTI0O0UrPTgpTzw8PTEsT3w9Zj4+RStEJjE7Zm9yKEU9MDtFPD0yNDtFKz04KU88PD0xLE98PUk+PkUrRCYxfWZvcihFPTA7RTw9MjQ7RSs9''@;'; put 'put ''OClPPDw9MSxPfD1JPj5FK0QmMTtUW0ErMF09TT4+PjAsVFtBKzFdPU8+Pj4wfSxqLnIyOHNobD1mdW5jdGlvbihJLGYpe3JldHVybiBJPDxmJjI2ODQzNTQ1NXxJPj4+MjgtZn07dmFyIGQ9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEs''@;'; put 'put ''OCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07ai5wYzI9ZnVuY3Rpb24oSSxmLFQsQSl7Zm9yKHZhciBNPTAsTz0wLEQ9ZC5sZW5ndGg+Pj4xLEU9MDtFPEQ7RSsrKU08PD0xLE18PUk+Pj5kW0VdJjE7Zm9yKEU9''@;'; put 'put ''RDtFPGQubGVuZ3RoO0UrKylPPDw9MSxPfD1mPj4+ZFtFXSYxO1RbQSswXT1NPj4+MCxUW0ErMV09Tz4+PjB9LGouZXhwYW5kPWZ1bmN0aW9uKEksZixUKXt2YXIgQT0wLE09MDtBPSgxJkkpPDw1fEk+Pj4yNztmb3IodmFyIE89MjM7Tz49MTU7Ty09NClBPDw9NixBfD1JPj4+TyY2Mztmb3Io''@;'; put 'put ''Tz0xMTtPPj0zO08tPTQpTXw9ST4+Pk8mNjMsTTw8PTY7TXw9KDMxJkkpPDwxfEk+Pj4zMSxmW1QrMF09QT4+PjAsZltUKzFdPU0+Pj4wfTt2YXIgUz1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQs''@;'; put 'put ''MTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAs''@;'; put 'put ''MTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDks''@;'; put 'put ''Myw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1''@;'; put 'put ''LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAs''@;'; put 'put ''NSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwx''@;'; put 'put ''MSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywx''@;'; put 'put ''LDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtqLnN1YnN0aXR1dGU9ZnVu''@;'; put 'put ''Y3Rpb24oSSxmKXtmb3IodmFyIFQ9MCxBPTA7QTw0O0ErKylUPDw9NCxUfD1TWzY0KkErKEk+Pj4xOC02KkEmNjMpXTtmb3IoQT0wO0E8NDtBKyspVDw8PTQsVHw9U1syNTYrNjQqQSsoZj4+PjE4LTYqQSY2MyldO3JldHVybiBUPj4+MH07dmFyIGg9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwz''@;'; put 'put ''MSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO2oucGVybXV0ZT1mdW5jdGlvbihJKXtmb3IodmFyIGY9MCxUPTA7VDxoLmxlbmd0aDtUKyspZjw8PTEsZnw9ST4+PmhbVF0mMTtyZXR1cm4gZj4+PjB9LGoucGFkU3BsaXQ9ZnVu''@;'; put 'put ''Y3Rpb24oSSxmLFQpe2Zvcih2YXIgQT1JLnRvU3RyaW5nKDIpO0EubGVuZ3RoPGY7KUE9IjAiK0E7Zm9yKHZhciBNPVtdLE89MDtPPGY7Tys9VClNLnB1c2goQS5zbGljZShPLE8rVCkpO3JldHVybiBNLmpvaW4oIiAiKX19LDI2MDc6KHRlLGosZCk9Pnt2YXIgUz1kKDg3NjQpLkJ1ZmZlcixo''@;'; put 'put ''PWQoMzU5MCksbz1kKDk3OTkpLEk9ZCg3NDI2KSxUPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07ai5EaWZmaWVIZWxsbWFuR3JvdXA9ai5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9ai5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIGYoTSl7dmFyIE89bmV3IFMob1tNXS5wcmltZSwi''@;'; put 'put ''aGV4IiksRD1uZXcgUyhvW01dLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBJKE8sRCl9LGouY3JlYXRlRGlmZmllSGVsbG1hbj1qLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gQShNLE8sRCxFKXtyZXR1cm4gUy5pc0J1ZmZlcihPKXx8dm9pZCAwPT09VFtPXT9BKE0sImJpbmFyeSIsTyxEKTooTz1P''@;'; put 'put ''fHwiYmluYXJ5IixFPUV8fCJiaW5hcnkiLEQ9RHx8bmV3IFMoWzJdKSxTLmlzQnVmZmVyKEQpfHwoRD1uZXcgUyhELEUpKSwibnVtYmVyIj09dHlwZW9mIE0/bmV3IEkoaChNLEQpLEQsITApOihTLmlzQnVmZmVyKE0pfHwoTT1uZXcgUyhNLE8pKSxuZXcgSShNLEQsITApKSl9fSw3NDI2Oih0''@;'; put 'put ''ZSxqLGQpPT57dmFyIFM9ZCg4NzY0KS5CdWZmZXIsaD1kKDM2MjApLEk9bmV3KGQoMzA0NykpLGY9bmV3IGgoMjQpLFQ9bmV3IGgoMTEpLEE9bmV3IGgoMTApLE09bmV3IGgoMyksTz1uZXcgaCg3KSxEPWQoMzU5MCksRT1kKDE3OTgpO2Z1bmN0aW9uIEIoVSxLKXtyZXR1cm4gSz1LfHwidXRm''@;'; put 'put ''OCIsUy5pc0J1ZmZlcihVKXx8KFU9bmV3IFMoVSxLKSksdGhpcy5fcHViPW5ldyBoKFUpLHRoaXN9ZnVuY3Rpb24gRihVLEspe3JldHVybiBLPUt8fCJ1dGY4IixTLmlzQnVmZmVyKFUpfHwoVT1uZXcgUyhVLEspKSx0aGlzLl9wcml2PW5ldyBoKFUpLHRoaXN9dGUuZXhwb3J0cz16O3ZhciBO''@;'; put 'put ''PXt9O2Z1bmN0aW9uIHooVSxLLFgpe3RoaXMuc2V0R2VuZXJhdG9yKEspLHRoaXMuX19wcmltZT1uZXcgaChVKSx0aGlzLl9wcmltZT1oLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1VLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3By''@;'; put 'put ''aW1lQ29kZT12b2lkIDAsWD8odGhpcy5zZXRQdWJsaWNLZXk9Qix0aGlzLnNldFByaXZhdGVLZXk9Rik6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gWihVLEspe3ZhciBYPW5ldyBTKFUudG9BcnJheSgpKTtyZXR1cm4gSz9YLnRvU3RyaW5nKEspOlh9T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KHoucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gSChVLEspe3ZhciBYPUsudG9TdHJpbmcoImhleCIpLG5lPVtYLFUudG9T''@;'; put 'put ''dHJpbmcoMTYpXS5qb2luKCJfIik7aWYobmUgaW4gTilyZXR1cm4gTltuZV07dmFyIGhlLHNlPTA7aWYoVS5pc0V2ZW4oKXx8IUQuc2ltcGxlU2lldmV8fCFELmZlcm1hdFRlc3QoVSl8fCFJLnRlc3QoVSkpcmV0dXJuIHNlKz0xLE5bbmVdPXNlKz0iMDIiPT09WHx8IjA1Ij09PVg/ODo0LHNl''@;'; put 'put ''O3N3aXRjaChJLnRlc3QoVS5zaHJuKDEpKXx8KHNlKz0yKSxYKXtjYXNlIjAyIjpVLm1vZChmKS5jbXAoVCkmJihzZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KGhlPVUubW9kKEEpKS5jbXAoTSkmJmhlLmNtcChPKSYmKHNlKz04KTticmVhaztkZWZhdWx0OnNlKz00fXJldHVybiBOW25lXT1zZSxz''@;'; put 'put ''ZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksei5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBoKEUodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1Jl''@;'; put 'put ''ZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSx6LnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFUpe3ZhciBLPShVPShVPW5ldyBoKFUpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5m''@;'; put 'put ''cm9tUmVkKCksWD1uZXcgUyhLLnRvQXJyYXkoKSksbmU9dGhpcy5nZXRQcmltZSgpO2lmKFgubGVuZ3RoPG5lLmxlbmd0aCl7dmFyIHNlPW5ldyBTKG5lLmxlbmd0aC1YLmxlbmd0aCk7c2UuZmlsbCgwKSxYPVMuY29uY2F0KFtzZSxYXSl9cmV0dXJuIFh9LHoucHJvdG90eXBlLmdldFB1Ymxp''@;'; put 'put ''Y0tleT1mdW5jdGlvbihLKXtyZXR1cm4gWih0aGlzLl9wdWIsSyl9LHoucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oSyl7cmV0dXJuIFoodGhpcy5fcHJpdixLKX0sei5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oVSl7cmV0dXJuIFoodGhpcy5fX3ByaW1lLFUpfSx6LnBy''@;'; put 'put ''b3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oVSl7cmV0dXJuIFoodGhpcy5fZ2VuLFUpfSx6LnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oVSxLKXtyZXR1cm4gSz1LfHwidXRmOCIsUy5pc0J1ZmZlcihVKXx8KFU9bmV3IFMoVSxLKSksdGhpcy5fX2dlbj1VLHRoaXMuX2dl''@;'; put 'put ''bj1uZXcgaChVKSx0aGlzfX0sMzU5MDoodGUsaixkKT0+e3ZhciBTPWQoMTc5OCk7dGUuZXhwb3J0cz1uZSxuZS5zaW1wbGVTaWV2ZT1LLG5lLmZlcm1hdFRlc3Q9WDt2YXIgaD1kKDM2MjApLG89bmV3IGgoMjQpLGY9bmV3KGQoMzA0NykpLFQ9bmV3IGgoMSksQT1uZXcgaCgyKSxNPW5ldyBo''@;'; put 'put ''KDUpLEU9KG5ldyBoKDE2KSxuZXcgaCg4KSxuZXcgaCgxMCkpLEI9bmV3IGgoMyksTj0obmV3IGgoNyksbmV3IGgoMTEpKSxIPW5ldyBoKDQpLFo9KG5ldyBoKDEyKSxudWxsKTtmdW5jdGlvbiBLKHNlKXtmb3IodmFyIGhlPWZ1bmN0aW9uIFUoKXtpZihudWxsIT09WilyZXR1cm4gWjt2YXIg''@;'; put 'put ''aGU9W107aGVbMF09Mjtmb3IodmFyIF9lPTEsbWU9MzttZTwxMDQ4NTc2O21lKz0yKXtmb3IodmFyIEZlPU1hdGguY2VpbChNYXRoLnNxcnQobWUpKSxSPTA7UjxfZSYmaGVbUl08PUZlJiZtZSVoZVtSXSE9MDtSKyspO19lIT09UiYmaGVbUl08PUZlfHwoaGVbX2UrK109bWUpfXJldHVybiBa''@;'; put 'put ''PWhlLGhlfSgpLF9lPTA7X2U8aGUubGVuZ3RoO19lKyspaWYoMD09PXNlLm1vZG4oaGVbX2VdKSlyZXR1cm4gMD09PXNlLmNtcG4oaGVbX2VdKTtyZXR1cm4hMH1mdW5jdGlvbiBYKHNlKXt2YXIgaGU9aC5tb250KHNlKTtyZXR1cm4gMD09PUEudG9SZWQoaGUpLnJlZFBvdyhzZS5zdWJuKDEp''@;'; put 'put ''KS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBuZShzZSxoZSl7aWYoc2U8MTYpcmV0dXJuIG5ldyBoKDI9PT1oZXx8NT09PWhlP1sxNDAsMTIzXTpbMTQwLDM5XSk7aGU9bmV3IGgoaGUpO2Zvcih2YXIgX2UsbWU7Oyl7Zm9yKF9lPW5ldyBoKFMoTWF0aC5jZWlsKHNlLzgpKSk7X2UuYml0''@;'; put 'put ''TGVuZ3RoKCk+c2U7KV9lLmlzaHJuKDEpO2lmKF9lLmlzRXZlbigpJiZfZS5pYWRkKFQpLF9lLnRlc3RuKDEpfHxfZS5pYWRkKEEpLGhlLmNtcChBKSl7aWYoIWhlLmNtcChNKSlmb3IoO19lLm1vZChFKS5jbXAoQik7KV9lLmlhZGQoSCl9ZWxzZSBmb3IoO19lLm1vZChvKS5jbXAoTik7KV9l''@;'; put 'put ''LmlhZGQoSCk7aWYoSyhtZT1fZS5zaHJuKDEpKSYmSyhfZSkmJlgobWUpJiZYKF9lKSYmZi50ZXN0KG1lKSYmZi50ZXN0KF9lKSlyZXR1cm4gX2V9fX0sMzYyMDpmdW5jdGlvbih0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKFIscyl7aWYoIVIpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKHN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gSShSLHMpe1Iuc3VwZXJfPXM7dmFyIHU9ZnVuY3Rpb24oKXt9O3UucHJvdG90eXBlPXMucHJvdG90eXBlLFIucHJvdG90eXBlPW5ldyB1LFIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVJ9ZnVuY3Rpb24gZihSLHMsdSl7''@;'; put 'put ''aWYoZi5pc0JOKFIpKXJldHVybiBSO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1SJiYoKCJsZSI9PT1zfHwiYmUiPT09cykmJih1PXMscz0xMCksdGhpcy5faW5pdChSfHwwLHN8fDEwLHV8fCJiZSIpKX12YXIgVDsi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIFM/Uy5leHBvcnRzPWY6aC5CTj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gQShSLHMpe3ZhciB1''@;'; put 'put ''PVIuY2hhckNvZGVBdChzKTtyZXR1cm4gdT49NjUmJnU8PTcwP3UtNTU6dT49OTcmJnU8PTEwMj91LTg3OnUtNDgmMTV9ZnVuY3Rpb24gTShSLHMsdSl7dmFyIHY9QShSLHUpO3JldHVybiB1LTE+PXMmJih2fD1BKFIsdS0xKTw8NCksdn1mdW5jdGlvbiBPKFIscyx1LHYpe2Zvcih2YXIgcD0w''@;'; put 'put ''LF89TWF0aC5taW4oUi5sZW5ndGgsdSksaz1zO2s8XztrKyspe3ZhciBMPVIuY2hhckNvZGVBdChrKS00ODtwKj12LHArPUw+PTQ5P0wtNDkrMTA6TD49MTc/TC0xNysxMDpMfXJldHVybiBwfWYuaXNCTj1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIGZ8fG51bGwhPT1zJiYib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIHMmJnMuY29uc3RydWN0b3Iud29yZFNpemU9PT1mLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHMud29yZHMpfSxmLm1heD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmNtcCh1KT4wP3M6dX0sZi5taW49ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk8MD9zOnV9LGYu''@;'; put 'put ''cHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHMsdSx2KXtpZigibnVtYmVyIj09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocyx1LHYpO2lmKCJvYmplY3QiPT10eXBlb2YgcylyZXR1cm4gdGhpcy5faW5pdEFycmF5KHMsdSx2KTsiaGV4Ij09PXUmJih1PTE2KSxvKHU9PT0oMHx1''@;'; put 'put ''KSYmdT49MiYmdTw9MzYpO3ZhciBwPTA7Ii0iPT09KHM9cy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihwKyssdGhpcy5uZWdhdGl2ZT0xKSxwPHMubGVuZ3RoJiYoMTY9PT11P3RoaXMuX3BhcnNlSGV4KHMscCx2KToodGhpcy5fcGFyc2VCYXNlKHMsdSxwKSwibGUiPT09''@;'; put 'put ''diYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHUsdikpKX0sZi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocyx1LHYpe3M8MCYmKHRoaXMubmVnYXRpdmU9MSxzPS1zKSxzPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzXSx0aGlzLmxlbmd0aD0xKTpzPDQ1''@;'; put 'put ''MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG8oczw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09''@;'; put 'put ''PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpfSxmLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHMsdSx2KXtpZihvKCJudW1iZXIiPT10eXBlb2Ygcy5sZW5ndGgpLHMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7''@;'; put 'put ''dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIF8sayxMPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgtMSxfPTA7cD49MDtw''@;'; put 'put ''LT0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twLTFdPDw4fHNbcC0yXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysxXT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7ZWxzZSBpZigibGUiPT09dilmb3IocD0wLF89MDtwPHMubGVuZ3RoO3ArPTMp''@;'; put 'put ''dGhpcy53b3Jkc1tfXXw9KGs9c1twXXxzW3ArMV08PDh8c1twKzJdPDwxNik8PEwmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPWs+Pj4yNi1MJjY3MTA4ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rp''@;'; put 'put ''b24ocyx1LHYpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocy5sZW5ndGgtdSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgTCxfPTAsaz0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVu''@;'; put 'put ''Z3RoLTE7cD49dTtwLT0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O2Vsc2UgZm9yKHA9KHMubGVuZ3RoLXUpJTI9PTA/dSsxOnU7cDxzLmxlbmd0aDtwKz0yKUw9TShzLHUscCk8PF8s''@;'; put 'put ''dGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O3RoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihzLHUsdil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHA9MCxf''@;'; put 'put ''PTE7Xzw9NjcxMDg4NjM7Xyo9dSlwKys7cC0tLF89Xy91fDA7Zm9yKHZhciBrPXMubGVuZ3RoLXYsTD1rJXAseT1NYXRoLm1pbihrLGstTCkrdixsPTAsYj12O2I8eTtiKz1wKWw9TyhzLGIsYitwLHUpLHRoaXMuaW11bG4oXyksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNb''@;'; put 'put ''MF0rPWw6dGhpcy5faWFkZG4obCk7aWYoMCE9PUwpe3ZhciBxPTE7Zm9yKGw9TyhzLGIscy5sZW5ndGgsdSksYj0wO2I8TDtiKyspcSo9dTt0aGlzLmltdWxuKHEpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRoaXMuc3RyaXAoKX0s''@;'; put 'put ''Zi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihzKXtzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPXRoaXMubGVuZ3RoLHMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxzLnJl''@;'; put 'put ''ZD10aGlzLnJlZH0sZi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHMpLHN9LGYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0''@;'; put 'put ''dXJuIHRoaXN9LGYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sZi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEQ9WyIiLCIw''@;'; put 'put ''IiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxCPVswLDAsMzM1NTQ0''@;'; put 'put ''MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUx''@;'; put 'put ''NTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2''@;'; put 'put ''ZV5SLm5lZ2F0aXZlO3ZhciB2PVIubGVuZ3RoK3MubGVuZ3RofDA7dS5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Ui53b3Jkc1swXSxfPTB8cy53b3Jkc1swXSxrPXAqXyx5PWsvNjcxMDg4NjR8MDt1LndvcmRzWzBdPTY3MTA4ODYzJms7Zm9yKHZhciBsPTE7bDx2O2wrKyl7Zm9yKHZhciBi''@;'; put 'put ''PXk+Pj4yNixxPTY3MTA4ODYzJnksRz1NYXRoLm1pbihsLHMubGVuZ3RoLTEpLFE9TWF0aC5tYXgoMCxsLVIubGVuZ3RoKzEpO1E8PUc7USsrKWIrPShrPShwPTB8Ui53b3Jkc1tsLVF8MF0pKihfPTB8cy53b3Jkc1tRXSkrcSkvNjcxMDg4NjR8MCxxPTY3MTA4ODYzJms7dS53b3Jkc1tsXT0w''@;'; put 'put ''fHEseT0wfGJ9cmV0dXJuIDAhPT15P3Uud29yZHNbbF09MHx5OnUubGVuZ3RoLS0sdS5zdHJpcCgpfWYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHMsdSl7dmFyIHY7aWYodT0wfHV8fDEsMTY9PT0ocz1zfHwxMCl8fCJoZXgiPT09cyl7dj0iIjtmb3IodmFyIHA9MCxfPTAsaz0wO2s8''@;'; put 'put ''dGhpcy5sZW5ndGg7aysrKXt2YXIgTD10aGlzLndvcmRzW2tdLHk9KDE2Nzc3MjE1JihMPDxwfF8pKS50b1N0cmluZygxNik7Xz1MPj4+MjQtcCYxNjc3NzIxNSwocCs9Mik+PTI2JiYocC09MjYsay0tKSx2PTAhPT1ffHxrIT09dGhpcy5sZW5ndGgtMT9EWzYteS5sZW5ndGhdK3krdjp5K3Z9''@;'; put 'put ''Zm9yKDAhPT1fJiYodj1fLnRvU3RyaW5nKDE2KSt2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9aWYocz09PSgwfHMpJiZzPj0yJiZzPD0zNil7dmFyIGw9RVtzXSxiPUJbc107dj0iIjt2YXIgcT10aGlzLmNsb25lKCk7Zm9y''@;'; put 'put ''KHEubmVnYXRpdmU9MDshcS5pc1plcm8oKTspe3ZhciBHPXEubW9kbihiKS50b1N0cmluZyhzKTt2PShxPXEuaWRpdm4oYikpLmlzWmVybygpP0crdjpEW2wtRy5sZW5ndGhdK0crdn1mb3IodGhpcy5pc1plcm8oKSYmKHY9IjAiK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAiK3Y7cmV0dXJuIDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYodj0iLSIrdiksdn1vKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGYucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3MrPTY3MTA4ODY0KnRoaXMud29y''@;'; put 'put ''ZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9zKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/LXM6c30sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxmLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihzLHUpe3JldHVybiBvKHR5cGVvZiBUPCJ1IiksdGhpcy50b0FycmF5TGlrZShULHMsdSl9LGYucHJvdG90eXBlLnRvQXJy''@;'; put 'put ''YXk9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihzLHUsdil7dmFyIHA9dGhpcy5ieXRlTGVuZ3RoKCksXz12fHxNYXRoLm1heCgxLHApO28ocDw9XywiYnl0ZSBhcnJheSBsb25nZXIgdGhh''@;'; put 'put ''biBkZXNpcmVkIGxlbmd0aCIpLG8oXz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHksbCxrPSJsZSI9PT11LEw9bmV3IHMoXyksYj10aGlzLmNsb25lKCk7aWYoayl7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNo''@;'; put 'put ''cm4oOCksTFtsXT15O2Zvcig7bDxfO2wrKylMW2xdPTB9ZWxzZXtmb3IobD0wO2w8Xy1wO2wrKylMW2xdPTA7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtfLWwtMV09eX1yZXR1cm4gTH0sZi5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNs''@;'; put 'put ''ejMyP2Z1bmN0aW9uKHMpe3JldHVybiAzMi1NYXRoLmNsejMyKHMpfTpmdW5jdGlvbihzKXt2YXIgdT1zLHY9MDtyZXR1cm4gdT49NDA5NiYmKHYrPTEzLHU+Pj49MTMpLHU+PTY0JiYodis9Nyx1Pj4+PTcpLHU+PTgmJih2Kz00LHU+Pj49NCksdT49MiYmKHYrPTIsdT4+Pj0yKSx2K3V9LGYu''@;'; put 'put ''cHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihzKXtpZigwPT09cylyZXR1cm4gMjY7dmFyIHU9cyx2PTA7cmV0dXJuISg4MTkxJnUpJiYodis9MTMsdT4+Pj0xMyksISgxMjcmdSkmJih2Kz03LHU+Pj49NyksISgxNSZ1KSYmKHYrPTQsdT4+Pj00KSwhKDMmdSkmJih2Kz0yLHU+Pj49Miks''@;'; put 'put ''ISgxJnUpJiZ2Kyssdn0sZi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrdX0sZi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlz''@;'; put 'put ''LmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcz0wLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl7dmFyIHY9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t1XSk7aWYocys9diwyNiE9PXYpYnJlYWt9cmV0dXJuIHN9LGYucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0''@;'; put 'put ''aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihzKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biB0aGlzLnRlc3RuKHMtMSk/dGhpcy5ub3RuKHMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxmLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlu''@;'; put 'put ''ZWcoKX0sZi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sZi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihzKXtmb3IoO3RoaXMubGVuZ3RoPHMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7''@;'; put 'put ''Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdfHMud29yZHNbdV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHMp''@;'; put 'put ''fSxmLnByb3RvdHlwZS5vcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihzKTpzLmNsb25lKCkuaW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUo''@;'; put 'put ''KS5pdW9yKHMpOnMuY2xvbmUoKS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihzKXt2YXIgdTt1PXRoaXMubGVuZ3RoPnMubGVuZ3RoP3M6dGhpcztmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPXRoaXMud29yZHNbdl0mcy53b3Jkc1t2XTty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChzKX0sZi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChzKTpzLmNsb25lKCkuaWFuZCh0aGlzKX0sZi5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHMpOnMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sZi5wcm90''@;'; put 'put ''b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocyl7dmFyIHUsdjt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odT10aGlzLHY9cyk6KHU9cyx2PXRoaXMpO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXV52LndvcmRzW3BdO2lmKHRoaXMhPT11KWZvcig7cDx1Lmxl''@;'; put 'put ''bmd0aDtwKyspdGhpcy53b3Jkc1twXT11LndvcmRzW3BdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1eG9yKHMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS54b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHMpOnMuY2xvbmUoKS5peG9yKHRoaXMpfSxmLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4''@;'; put 'put ''b3Iocyk6cy5jbG9uZSgpLml1eG9yKHRoaXMpfSxmLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9MHxNYXRoLmNlaWwocy8yNiksdj1zJTI2O3RoaXMuX2V4cGFuZCh1KSx2PjAmJnUtLTtmb3IodmFyIHA9MDtwPHU7cCsrKXRo''@;'; put 'put ''aXMud29yZHNbcF09NjcxMDg4NjMmfnRoaXMud29yZHNbcF07cmV0dXJuIHY+MCYmKHRoaXMud29yZHNbcF09fnRoaXMud29yZHNbcF0mNjcxMDg4NjM+PjI2LXYpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHMp''@;'; put 'put ''fSxmLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHMsdSl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB2PXMvMjZ8MCxwPXMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl09dT90aGlzLndvcmRzW3ZdfDE8PHA6dGhpcy53b3Jkc1t2XSZ+KDE8PHApLHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzKXt2YXIgdSx2LHA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdT10aGlzLmlzdWIocyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh2PXRoaXMscD1zKToodj1zLHA9dGhpcyk7Zm9yKHZhciBfPTAsaz0wO2s8cC5sZW5n''@;'; put 'put ''dGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrKDB8cC53b3Jkc1trXSkrXyksXz11Pj4+MjY7Zm9yKDswIT09XyYmazx2Lmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKStfKSxfPXU+Pj4yNjtpZih0aGlzLmxl''@;'; put 'put ''bmd0aD12Lmxlbmd0aCwwIT09Xyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1fLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih2IT09dGhpcylmb3IoO2s8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109di53b3Jkc1trXTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMpe3Zh''@;'; put 'put ''ciB1O3JldHVybiAwIT09cy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHMubmVnYXRpdmU9MCx1PXRoaXMuc3ViKHMpLHMubmVnYXRpdmVePTEsdSk6MD09PXMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsdT1zLnN1Yih0aGlzKSx0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTEsdSk6dGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocyk6cy5jbG9uZSgpLmlhZGQodGhpcyl9LGYucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyl7aWYoMCE9PXMubmVnYXRpdmUpe3MubmVnYXRpdmU9MDt2YXIgdT10aGlzLmlhZGQocyk7cmV0dXJuIHMubmVn''@;'; put 'put ''YXRpdmU9MSx1Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBwLF8sdj10aGlzLmNtcChzKTtpZigwPT09dilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dj4wPyhwPXRoaXMsXz1zKToocD1zLF89dGhpcyk7Zm9yKHZhciBrPTAsTD0wO0w8Xy5sZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSktKDB8Xy53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNbTF09NjcxMDg4NjMmdTtm''@;'; put 'put ''b3IoOzAhPT1rJiZMPHAubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7aWYoMD09PWsmJkw8cC5sZW5ndGgmJnAhPT10aGlzKWZvcig7TDxwLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT1wLndvcmRzW0xdO3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxMKSxwIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHMpfTt2YXIgSD1mdW5jdGlvbihzLHUsdil7dmFyIHksbCxiLHA9''@;'; put 'put ''cy53b3JkcyxfPXUud29yZHMsaz12LndvcmRzLEw9MCxxPTB8cFswXSxHPTgxOTEmcSxRPXE+Pj4xMyxwZT0wfHBbMV0sUGU9ODE5MSZwZSxaZT1wZT4+PjEzLHFlPTB8cFsyXSx2ZT04MTkxJnFlLHVlPXFlPj4+MTMsemU9MHxwWzNdLE9lPTgxOTEmemUsQ2U9emU+Pj4xMyxrZT0wfHBbNF0s''@;'; put 'put ''eGU9ODE5MSZrZSxNZT1rZT4+PjEzLEllPTB8cFs1XSxiZT04MTkxJkllLHdlPUllPj4+MTMscHQ9MHxwWzZdLEtlPTgxOTEmcHQsWWU9cHQ+Pj4xMyxxdD0wfHBbN10saHQ9ODE5MSZxdCx2dD1xdD4+PjEzLFl0PTB8cFs4XSx0dD04MTkxJll0LFVlPVl0Pj4+MTMsJGU9MHxwWzldLExlPTgx''@;'; put 'put ''OTEmJGUsbnQ9JGU+Pj4xMyxybj0wfF9bMF0seHQ9ODE5MSZybixUdD1ybj4+PjEzLHluPTB8X1sxXSxYdD04MTkxJnluLFF0PXluPj4+MTMsWHI9MHxfWzJdLHNuPTgxOTEmWHIsaXQ9WHI+Pj4xMyxDcj0wfF9bM10sTHQ9ODE5MSZDcix3dD1Dcj4+PjEzLFJuPTB8X1s0XSxRZT04MTkxJlJu''@;'; put 'put ''LFB0PVJuPj4+MTMsUXI9MHxfWzVdLE5lPTgxOTEmUXIseXQ9UXI+Pj4xMyxycj0wfF9bNl0sYXQ9ODE5MSZycixfdD1ycj4+PjEzLHduPTB8X1s3XSwkdD04MTkxJnduLEh0PXduPj4+MTMsc2k9MHxfWzhdLG5uPTgxOTEmc2ksbG49c2k+Pj4xMyxraT0wfF9bOV0sYW49ODE5MSZraSxHdD1r''@;'; put 'put ''aT4+PjEzO3YubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPTE5O3ZhciBlYT0oTCsoeT1NYXRoLmltdWwoRyx4dCkpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoRyxUdCkpK01hdGguaW11bChRLHh0KXwwKSk8PDEzKXwwO0w9KChiPU1hdGguaW11bChRLFR0KSkr''@;'; put 'put ''KGw+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFBlLHh0KSxsPShsPU1hdGguaW11bChQZSxUdCkpK01hdGguaW11bChaZSx4dCl8MCxiPU1hdGguaW11bChaZSxUdCk7dmFyIG1pPShMKyh5PXkrTWF0aC5pbXVsKEcsWHQpfDApfDApKygoODE5MSYobD0o''@;'; put 'put ''bD1sK01hdGguaW11bChHLFF0KXwwKStNYXRoLmltdWwoUSxYdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFF0KXwwKSsobD4+PjEzKXwwKSsobWk+Pj4yNil8MCxtaSY9NjcxMDg4NjMseT1NYXRoLmltdWwodmUseHQpLGw9KGw9TWF0aC5pbXVsKHZlLFR0KSkrTWF0aC5pbXVs''@;'; put 'put ''KHVlLHh0KXwwLGI9TWF0aC5pbXVsKHVlLFR0KSx5PXkrTWF0aC5pbXVsKFBlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChaZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFplLFF0KXwwO3ZhciBmcj0oTCsoeT15K01hdGguaW11bChHLHNuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KGw9KGw9bCtNYXRoLmltdWwoRyxpdCl8MCkrTWF0aC5pbXVsKFEsc24pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxpdCl8MCkrKGw+Pj4xMyl8MCkrKGZyPj4+MjYpfDAsZnImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE9lLHh0KSxsPShsPU1hdGguaW11bChPZSxUdCkpK01hdGgu''@;'; put 'put ''aW11bChDZSx4dCl8MCxiPU1hdGguaW11bChDZSxUdCkseT15K01hdGguaW11bCh2ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFF0KXwwKStNYXRoLmltdWwodWUsWHQpfDAsYj1iK01hdGguaW11bCh1ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKFBlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''UGUsaXQpfDApK01hdGguaW11bChaZSxzbil8MCxiPWIrTWF0aC5pbXVsKFplLGl0KXwwO3ZhciAkaT0oTCsoeT15K01hdGguaW11bChHLEx0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx3dCl8MCkrTWF0aC5pbXVsKFEsTHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmlt''@;'; put 'put ''dWwoUSx3dCl8MCkrKGw+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHhlLHh0KSxsPShsPU1hdGguaW11bCh4ZSxUdCkpK01hdGguaW11bChNZSx4dCl8MCxiPU1hdGguaW11bChNZSxUdCkseT15K01hdGguaW11bChPZSxYdCl8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKE9lLFF0KXwwKStNYXRoLmltdWwoQ2UsWHQpfDAsYj1iK01hdGguaW11bChDZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHZlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHVlLGl0KXwwLHk9eStNYXRoLmltdWwoUGUs''@;'; put 'put ''THQpfDAsbD0obD1sK01hdGguaW11bChQZSx3dCl8MCkrTWF0aC5pbXVsKFplLEx0KXwwLGI9YitNYXRoLmltdWwoWmUsd3QpfDA7dmFyIEtpPShMKyh5PXkrTWF0aC5pbXVsKEcsUWUpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFB0KXwwKStNYXRoLmltdWwoUSxRZSl8MCkp''@;'; put 'put ''PDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFB0KXwwKSsobD4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoYmUseHQpLGw9KGw9TWF0aC5pbXVsKGJlLFR0KSkrTWF0aC5pbXVsKHdlLHh0KXwwLGI9TWF0aC5pbXVsKHdlLFR0KSx5PXkrTWF0aC5pbXVs''@;'; put 'put ''KHhlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUXQpfDApK01hdGguaW11bChNZSxYdCl8MCxiPWIrTWF0aC5pbXVsKE1lLFF0KXwwLHk9eStNYXRoLmltdWwoT2Usc24pfDAsbD0obD1sK01hdGguaW11bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLGI9YitNYXRoLmltdWwoQ2Us''@;'; put 'put ''aXQpfDAseT15K01hdGguaW11bCh2ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAsYj1iK01hdGguaW11bCh1ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKFBlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUHQpfDApK01hdGguaW11bChaZSxRZSl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKFplLFB0KXwwO3ZhciBWaT0oTCsoeT15K01hdGguaW11bChHLE5lKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx5dCl8MCkrTWF0aC5pbXVsKFEsTmUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx5dCl8MCkrKGw+Pj4xMyl8MCkrKFZp''@;'; put 'put ''Pj4+MjYpfDAsVmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEtlLHh0KSxsPShsPU1hdGguaW11bChLZSxUdCkpK01hdGguaW11bChZZSx4dCl8MCxiPU1hdGguaW11bChZZSxUdCkseT15K01hdGguaW11bChiZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFF0KXwwKStNYXRoLmltdWwod2Us''@;'; put 'put ''WHQpfDAsYj1iK01hdGguaW11bCh3ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHhlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsaXQpfDApK01hdGguaW11bChNZSxzbil8MCxiPWIrTWF0aC5pbXVsKE1lLGl0KXwwLHk9eStNYXRoLmltdWwoT2UsTHQpfDAsbD0obD1sK01hdGguaW11bChPZSx3''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKENlLEx0KXwwLGI9YitNYXRoLmltdWwoQ2Usd3QpfDAseT15K01hdGguaW11bCh2ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAsYj1iK01hdGguaW11bCh1ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKFBlLE5lKXwwLGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwoUGUseXQpfDApK01hdGguaW11bChaZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFplLHl0KXwwO3ZhciBxcj0oTCsoeT15K01hdGguaW11bChHLGF0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxfdCl8MCkrTWF0aC5pbXVsKFEsYXQpfDApKTw8MTMpfDA7''@;'; put 'put ''TD0oKGI9YitNYXRoLmltdWwoUSxfdCl8MCkrKGw+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGh0LHh0KSxsPShsPU1hdGguaW11bChodCxUdCkpK01hdGguaW11bCh2dCx4dCl8MCxiPU1hdGguaW11bCh2dCxUdCkseT15K01hdGguaW11bChLZSxYdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKEtlLFF0KXwwKStNYXRoLmltdWwoWWUsWHQpfDAsYj1iK01hdGguaW11bChZZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGJlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsaXQpfDApK01hdGguaW11bCh3ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHdlLGl0KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwoeGUsTHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1lLEx0KXwwLGI9YitNYXRoLmltdWwoTWUsd3QpfDAseT15K01hdGguaW11bChPZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2UsUWUpfDAsYj1iK01h''@;'; put 'put ''dGguaW11bChDZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHZlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodmUseXQpfDApK01hdGguaW11bCh1ZSxOZSl8MCxiPWIrTWF0aC5pbXVsKHVlLHl0KXwwLHk9eStNYXRoLmltdWwoUGUsYXQpfDAsbD0obD1sK01hdGguaW11bChQZSxfdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFplLGF0KXwwLGI9YitNYXRoLmltdWwoWmUsX3QpfDA7dmFyIHVhPShMKyh5PXkrTWF0aC5pbXVsKEcsJHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLEh0KXwwKStNYXRoLmltdWwoUSwkdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLEh0KXwwKSsobD4+''@;'; put 'put ''PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMseT1NYXRoLmltdWwodHQseHQpLGw9KGw9TWF0aC5pbXVsKHR0LFR0KSkrTWF0aC5pbXVsKFVlLHh0KXwwLGI9TWF0aC5pbXVsKFVlLFR0KSx5PXkrTWF0aC5pbXVsKGh0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUXQpfDApK01h''@;'; put 'put ''dGguaW11bCh2dCxYdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LFF0KXwwLHk9eStNYXRoLmltdWwoS2Usc24pfDAsbD0obD1sK01hdGguaW11bChLZSxpdCl8MCkrTWF0aC5pbXVsKFllLHNuKXwwLGI9YitNYXRoLmltdWwoWWUsaXQpfDAseT15K01hdGguaW11bChiZSxMdCl8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKGJlLHd0KXwwKStNYXRoLmltdWwod2UsTHQpfDAsYj1iK01hdGguaW11bCh3ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHhlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11bChNZSxRZSl8MCxiPWIrTWF0aC5pbXVsKE1lLFB0KXwwLHk9eStNYXRoLmltdWwo''@;'; put 'put ''T2UsTmUpfDAsbD0obD1sK01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLGI9YitNYXRoLmltdWwoQ2UseXQpfDAseT15K01hdGguaW11bCh2ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsYj1iK01hdGguaW11bCh1ZSxf''@;'; put 'put ''dCl8MCx5PXkrTWF0aC5pbXVsKFBlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsSHQpfDApK01hdGguaW11bChaZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFplLEh0KXwwO3ZhciBGaT0oTCsoeT15K01hdGguaW11bChHLG5uKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxsbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFEsbm4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxsbil8MCkrKGw+Pj4xMyl8MCkrKEZpPj4+MjYpfDAsRmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHh0KSxsPShsPU1hdGguaW11bChMZSxUdCkpK01hdGguaW11bChudCx4dCl8MCxiPU1hdGguaW11''@;'; put 'put ''bChudCxUdCkseT15K01hdGguaW11bCh0dCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFF0KXwwKStNYXRoLmltdWwoVWUsWHQpfDAsYj1iK01hdGguaW11bChVZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGh0LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsaXQpfDApK01hdGguaW11bCh2dCxz''@;'; put 'put ''bil8MCxiPWIrTWF0aC5pbXVsKHZ0LGl0KXwwLHk9eStNYXRoLmltdWwoS2UsTHQpfDAsbD0obD1sK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLEx0KXwwLGI9YitNYXRoLmltdWwoWWUsd3QpfDAseT15K01hdGguaW11bChiZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFB0''@;'; put 'put ''KXwwKStNYXRoLmltdWwod2UsUWUpfDAsYj1iK01hdGguaW11bCh3ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHhlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUseXQpfDApK01hdGguaW11bChNZSxOZSl8MCxiPWIrTWF0aC5pbXVsKE1lLHl0KXwwLHk9eStNYXRoLmltdWwoT2UsYXQpfDAsbD0o''@;'; put 'put ''bD1sK01hdGguaW11bChPZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLGI9YitNYXRoLmltdWwoQ2UsX3QpfDAseT15K01hdGguaW11bCh2ZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLEh0KXwwKStNYXRoLmltdWwodWUsJHQpfDAsYj1iK01hdGguaW11bCh1ZSxIdCl8MCx5PXkrTWF0''@;'; put 'put ''aC5pbXVsKFBlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsbG4pfDApK01hdGguaW11bChaZSxubil8MCxiPWIrTWF0aC5pbXVsKFplLGxuKXwwO3ZhciBSYT0oTCsoeT15K01hdGguaW11bChHLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxHdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFEsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFh0KSxsPShsPU1hdGguaW11bChMZSxRdCkpK01hdGguaW11bChudCxYdCl8MCxiPU1hdGguaW11bChudCxRdCkseT15''@;'; put 'put ''K01hdGguaW11bCh0dCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGl0KXwwKStNYXRoLmltdWwoVWUsc24pfDAsYj1iK01hdGguaW11bChVZSxpdCl8MCx5PXkrTWF0aC5pbXVsKGh0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsd3QpfDApK01hdGguaW11bCh2dCxMdCl8MCxiPWIrTWF0''@;'; put 'put ''aC5pbXVsKHZ0LHd0KXwwLHk9eStNYXRoLmltdWwoS2UsUWUpfDAsbD0obD1sK01hdGguaW11bChLZSxQdCl8MCkrTWF0aC5pbXVsKFllLFFlKXwwLGI9YitNYXRoLmltdWwoWWUsUHQpfDAseT15K01hdGguaW11bChiZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHl0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwod2UsTmUpfDAsYj1iK01hdGguaW11bCh3ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKHhlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsX3QpfDApK01hdGguaW11bChNZSxhdCl8MCxiPWIrTWF0aC5pbXVsKE1lLF90KXwwLHk9eStNYXRoLmltdWwoT2UsJHQpfDAsbD0obD1sK01hdGguaW11''@;'; put 'put ''bChPZSxIdCl8MCkrTWF0aC5pbXVsKENlLCR0KXwwLGI9YitNYXRoLmltdWwoQ2UsSHQpfDAseT15K01hdGguaW11bCh2ZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKHZlLGxuKXwwKStNYXRoLmltdWwodWUsbm4pfDAsYj1iK01hdGguaW11bCh1ZSxsbil8MDt2YXIgb2k9KEwrKHk9eStNYXRo''@;'; put 'put ''LmltdWwoUGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChQZSxHdCl8MCkrTWF0aC5pbXVsKFplLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFplLEd0KXwwKSsobD4+PjEzKXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsc24p''@;'; put 'put ''LGw9KGw9TWF0aC5pbXVsKExlLGl0KSkrTWF0aC5pbXVsKG50LHNuKXwwLGI9TWF0aC5pbXVsKG50LGl0KSx5PXkrTWF0aC5pbXVsKHR0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsd3QpfDApK01hdGguaW11bChVZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFVlLHd0KXwwLHk9eStNYXRoLmlt''@;'; put 'put ''dWwoaHQsUWUpfDAsbD0obD1sK01hdGguaW11bChodCxQdCl8MCkrTWF0aC5pbXVsKHZ0LFFlKXwwLGI9YitNYXRoLmltdWwodnQsUHQpfDAseT15K01hdGguaW11bChLZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLHl0KXwwKStNYXRoLmltdWwoWWUsTmUpfDAsYj1iK01hdGguaW11bChZ''@;'; put 'put ''ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGJlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsX3QpfDApK01hdGguaW11bCh3ZSxhdCl8MCxiPWIrTWF0aC5pbXVsKHdlLF90KXwwLHk9eStNYXRoLmltdWwoeGUsJHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxIdCl8MCkrTWF0aC5pbXVsKE1lLCR0''@;'; put 'put ''KXwwLGI9YitNYXRoLmltdWwoTWUsSHQpfDAseT15K01hdGguaW11bChPZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGxuKXwwKStNYXRoLmltdWwoQ2Usbm4pfDAsYj1iK01hdGguaW11bChDZSxsbil8MDt2YXIgVWk9KEwrKHk9eStNYXRoLmltdWwodmUsYW4pfDApfDApKygoODE5MSYo''@;'; put 'put ''bD0obD1sK01hdGguaW11bCh2ZSxHdCl8MCkrTWF0aC5pbXVsKHVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHVlLEd0KXwwKSsobD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTHQpLGw9KGw9TWF0aC5pbXVsKExlLHd0KSkrTWF0''@;'; put 'put ''aC5pbXVsKG50LEx0KXwwLGI9TWF0aC5pbXVsKG50LHd0KSx5PXkrTWF0aC5pbXVsKHR0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsUHQpfDApK01hdGguaW11bChVZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFVlLFB0KXwwLHk9eStNYXRoLmltdWwoaHQsTmUpfDAsbD0obD1sK01hdGguaW11''@;'; put 'put ''bChodCx5dCl8MCkrTWF0aC5pbXVsKHZ0LE5lKXwwLGI9YitNYXRoLmltdWwodnQseXQpfDAseT15K01hdGguaW11bChLZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLF90KXwwKStNYXRoLmltdWwoWWUsYXQpfDAsYj1iK01hdGguaW11bChZZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGJlLCR0''@;'; put 'put ''KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsSHQpfDApK01hdGguaW11bCh3ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHdlLEh0KXwwLHk9eStNYXRoLmltdWwoeGUsbm4pfDAsbD0obD1sK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKE1lLG5uKXwwLGI9YitNYXRoLmltdWwoTWUsbG4pfDA7''@;'; put 'put ''dmFyIFZhPShMKyh5PXkrTWF0aC5pbXVsKE9lLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChDZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChDZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFZhPj4+MjYpfDAsVmEmPTY3MTA4ODYz''@;'; put 'put ''LHk9TWF0aC5pbXVsKExlLFFlKSxsPShsPU1hdGguaW11bChMZSxQdCkpK01hdGguaW11bChudCxRZSl8MCxiPU1hdGguaW11bChudCxQdCkseT15K01hdGguaW11bCh0dCxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsYj1iK01hdGguaW11bChV''@;'; put 'put ''ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGh0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsX3QpfDApK01hdGguaW11bCh2dCxhdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LF90KXwwLHk9eStNYXRoLmltdWwoS2UsJHQpfDAsbD0obD1sK01hdGguaW11bChLZSxIdCl8MCkrTWF0aC5pbXVsKFllLCR0''@;'; put 'put ''KXwwLGI9YitNYXRoLmltdWwoWWUsSHQpfDAseT15K01hdGguaW11bChiZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGxuKXwwKStNYXRoLmltdWwod2Usbm4pfDAsYj1iK01hdGguaW11bCh3ZSxsbil8MDt2YXIgdXI9KEwrKHk9eStNYXRoLmltdWwoeGUsYW4pfDApfDApKygoODE5MSYo''@;'; put 'put ''bD0obD1sK01hdGguaW11bCh4ZSxHdCl8MCkrTWF0aC5pbXVsKE1lLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKE1lLEd0KXwwKSsobD4+PjEzKXwwKSsodXI+Pj4yNil8MCx1ciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTmUpLGw9KGw9TWF0aC5pbXVsKExlLHl0KSkrTWF0''@;'; put 'put ''aC5pbXVsKG50LE5lKXwwLGI9TWF0aC5pbXVsKG50LHl0KSx5PXkrTWF0aC5pbXVsKHR0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsX3QpfDApK01hdGguaW11bChVZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFVlLF90KXwwLHk9eStNYXRoLmltdWwoaHQsJHQpfDAsbD0obD1sK01hdGguaW11''@;'; put 'put ''bChodCxIdCl8MCkrTWF0aC5pbXVsKHZ0LCR0KXwwLGI9YitNYXRoLmltdWwodnQsSHQpfDAseT15K01hdGguaW11bChLZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUsbm4pfDAsYj1iK01hdGguaW11bChZZSxsbil8MDt2YXIgZmE9KEwrKHk9eStNYXRo''@;'; put 'put ''LmltdWwoYmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChiZSxHdCl8MCkrTWF0aC5pbXVsKHdlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHdlLEd0KXwwKSsobD4+PjEzKXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsYXQp''@;'; put 'put ''LGw9KGw9TWF0aC5pbXVsKExlLF90KSkrTWF0aC5pbXVsKG50LGF0KXwwLGI9TWF0aC5pbXVsKG50LF90KSx5PXkrTWF0aC5pbXVsKHR0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsSHQpfDApK01hdGguaW11bChVZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFVlLEh0KXwwLHk9eStNYXRoLmlt''@;'; put 'put ''dWwoaHQsbm4pfDAsbD0obD1sK01hdGguaW11bChodCxsbil8MCkrTWF0aC5pbXVsKHZ0LG5uKXwwLGI9YitNYXRoLmltdWwodnQsbG4pfDA7dmFyIHhpPShMKyh5PXkrTWF0aC5pbXVsKEtlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bChZ''@;'; put 'put ''ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChZZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLCR0KSxsPShsPU1hdGguaW11bChMZSxIdCkpK01hdGguaW11bChudCwkdCl8MCxiPU1hdGguaW11bChudCxIdCkseT15''@;'; put 'put ''K01hdGguaW11bCh0dCxubil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsYj1iK01hdGguaW11bChVZSxsbil8MDt2YXIgb2E9KEwrKHk9eStNYXRoLmltdWwoaHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChodCxHdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZ0LGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHZ0LEd0KXwwKSsobD4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsbm4pLGw9KGw9TWF0aC5pbXVsKExlLGxuKSkrTWF0aC5pbXVsKG50LG5uKXwwLGI9TWF0aC5pbXVsKG50''@;'; put 'put ''LGxuKTt2YXIgWGk9KEwrKHk9eStNYXRoLmltdWwodHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh0dCxHdCl8MCkrTWF0aC5pbXVsKFVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFVlLEd0KXwwKSsobD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9Njcx''@;'; put 'put ''MDg4NjM7dmFyIElyPShMKyh5PU1hdGguaW11bChMZSxhbikpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoTGUsR3QpKStNYXRoLmltdWwobnQsYW4pfDApKTw8MTMpfDA7cmV0dXJuIEw9KChiPU1hdGguaW11bChudCxHdCkpKyhsPj4+MTMpfDApKyhJcj4+PjI2KXwwLElyJj02NzEwODg2''@;'; put 'put ''MyxrWzBdPWVhLGtbMV09bWksa1syXT1mcixrWzNdPSRpLGtbNF09S2ksa1s1XT1WaSxrWzZdPXFyLGtbN109dWEsa1s4XT1GaSxrWzldPVJhLGtbMTBdPW9pLGtbMTFdPVVpLGtbMTJdPVZhLGtbMTNdPXVyLGtbMTRdPWZhLGtbMTVdPXhpLGtbMTZdPW9hLGtbMTddPVhpLGtbMThdPUlyLDAh''@;'; put 'put ''PT1MJiYoa1sxOV09TCx2Lmxlbmd0aCsrKSx2fTtmdW5jdGlvbiBaKFIscyx1KXtyZXR1cm4obmV3IFUpLm11bHAoUixzLHUpfWZ1bmN0aW9uIFUoUixzKXt0aGlzLng9Uix0aGlzLnk9c31NYXRoLmltdWx8fChIPU4pLGYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10''@;'; put 'put ''aGlzLmxlbmd0aCtzLmxlbmd0aDtyZXR1cm4gdj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXMubGVuZ3RoP0godGhpcyxzLHUpOnA8NjM/Tih0aGlzLHMsdSk6cDwxMDI0P2Z1bmN0aW9uIHooUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlLHUubGVuZ3RoPVIubGVuZ3Ro''@;'; put 'put ''K3MubGVuZ3RoO2Zvcih2YXIgdj0wLHA9MCxfPTA7Xzx1Lmxlbmd0aC0xO18rKyl7dmFyIGs9cDtwPTA7Zm9yKHZhciBMPTY3MTA4ODYzJnYseT1NYXRoLm1pbihfLHMubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCxfLVIubGVuZ3RoKzEpO2w8PXk7bCsrKXt2YXIgUT0oMHxSLndvcmRzW18tbF0p''@;'; put 'put ''KigwfHMud29yZHNbbF0pLHBlPTY3MTA4ODYzJlE7TD02NzEwODg2MyYocGU9cGUrTHwwKSxwKz0oaz0oaz1rKyhRLzY3MTA4ODY0fDApfDApKyhwZT4+PjI2KXwwKT4+PjI2LGsmPTY3MTA4ODYzfXUud29yZHNbX109TCx2PWssaz1wfXJldHVybiAwIT09dj91LndvcmRzW19dPXY6dS5sZW5n''@;'; put 'put ''dGgtLSx1LnN0cmlwKCl9KHRoaXMscyx1KTpaKHRoaXMscyx1KSx2fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT1uZXcgQXJyYXkocyksdj1mLnByb3RvdHlwZS5fY291bnRCaXRzKHMpLTEscD0wO3A8cztwKyspdVtwXT10aGlzLnJldkJpbihwLHYscyk7cmV0''@;'; put 'put ''dXJuIHV9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihzLHUsdil7aWYoMD09PXN8fHM9PT12LTEpcmV0dXJuIHM7Zm9yKHZhciBwPTAsXz0wO188dTtfKyspcHw9KDEmcyk8PHUtXy0xLHM+Pj0xO3JldHVybiBwfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHMsdSx2LHAsXyxr''@;'; put 'put ''KXtmb3IodmFyIEw9MDtMPGs7TCsrKXBbTF09dVtzW0xdXSxfW0xdPXZbc1tMXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihzLHUsdixwLF8sayl7dGhpcy5wZXJtdXRlKGsscyx1LHYscCxfKTtmb3IodmFyIEw9MTtMPF87TDw8PTEpZm9yKHZhciB5PUw8PDEsbD1NYXRoLmNv''@;'; put 'put ''cygyKk1hdGguUEkveSksYj1NYXRoLnNpbigyKk1hdGguUEkveSkscT0wO3E8XztxKz15KWZvcih2YXIgRz1sLFE9YixwZT0wO3BlPEw7cGUrKyl7dmFyIFBlPXZbcStwZV0sWmU9cFtxK3BlXSxxZT12W3ErcGUrTF0sdmU9cFtxK3BlK0xdLHVlPUcqcWUtUSp2ZTt2ZT1HKnZlK1EqcWUsdltx''@;'; put 'put ''K3BlXT1QZSsocWU9dWUpLHBbcStwZV09WmUrdmUsdltxK3BlK0xdPVBlLXFlLHBbcStwZStMXT1aZS12ZSxwZSE9PXkmJih1ZT1sKkctYipRLFE9bCpRK2IqRyxHPXVlKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHMsdSl7dmFyIHY9MXxNYXRoLm1heCh1LHMpLHA9MSZ2''@;'; put 'put ''LF89MDtmb3Iodj12LzJ8MDt2O3Y+Pj49MSlfKys7cmV0dXJuIDE8PF8rMStwfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocyx1LHYpe2lmKCEodjw9MSkpZm9yKHZhciBwPTA7cDx2LzI7cCsrKXt2YXIgXz1zW3BdO3NbcF09c1t2LXAtMV0sc1t2LXAtMV09XyxfPXVbcF0sdVtw''@;'; put 'put ''XT0tdVt2LXAtMV0sdVt2LXAtMV09LV99fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9MCxwPTA7cDx1LzI7cCsrKXt2YXIgXz04MTkyKk1hdGgucm91bmQoc1syKnArMV0vdSkrTWF0aC5yb3VuZChzWzIqcF0vdSkrdjtzW3BdPTY3MTA4ODYzJl8s''@;'; put 'put ''dj1fPDY3MTA4ODY0PzA6Xy82NzEwODg2NHwwfXJldHVybiBzfSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHMsdSx2LHApe2Zvcih2YXIgXz0wLGs9MDtrPHU7aysrKXZbMiprXT04MTkxJihfKz0wfHNba10pLHZbMiprKzFdPTgxOTEmKF8+Pj49MTMpLF8+Pj49MTM7Zm9yKGs9''@;'; put 'put ''Mip1O2s8cDsrK2spdltrXT0wO28oMD09PV8pLG8oISgtODE5MiZfKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PW5ldyBBcnJheShzKSx2PTA7djxzO3YrKyl1W3ZdPTA7cmV0dXJuIHV9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPTIq''@;'; put 'put ''dGhpcy5ndWVzc0xlbjEzYihzLmxlbmd0aCx1Lmxlbmd0aCksXz10aGlzLm1ha2VSQlQocCksaz10aGlzLnN0dWIocCksTD1uZXcgQXJyYXkocCkseT1uZXcgQXJyYXkocCksbD1uZXcgQXJyYXkocCksYj1uZXcgQXJyYXkocCkscT1uZXcgQXJyYXkocCksRz1uZXcgQXJyYXkocCksUT12Lndv''@;'; put 'put ''cmRzO1EubGVuZ3RoPXAsdGhpcy5jb252ZXJ0MTNiKHMud29yZHMscy5sZW5ndGgsTCxwKSx0aGlzLmNvbnZlcnQxM2IodS53b3Jkcyx1Lmxlbmd0aCxiLHApLHRoaXMudHJhbnNmb3JtKEwsayx5LGwscCxfKSx0aGlzLnRyYW5zZm9ybShiLGsscSxHLHAsXyk7Zm9yKHZhciBwZT0wO3BlPHA7''@;'; put 'put ''cGUrKyl7dmFyIFBlPXlbcGVdKnFbcGVdLWxbcGVdKkdbcGVdO2xbcGVdPXlbcGVdKkdbcGVdK2xbcGVdKnFbcGVdLHlbcGVdPVBlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh5LGwscCksdGhpcy50cmFuc2Zvcm0oeSxsLFEsayxwLF8pLHRoaXMuY29uanVnYXRlKFEsayxwKSx0aGlzLm5vcm1h''@;'; put 'put ''bGl6ZTEzYihRLHApLHYubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPXMubGVuZ3RoK3UubGVuZ3RoLHYuc3RyaXAoKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCtzLmxlbmd0aCksdGhpcy5tdWxUbyhzLHUpfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksWih0aGlzLHMsdSl9LGYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhzLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KTtmb3IodmFyIHU9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKnMsXz0o''@;'; put 'put ''NjcxMDg4NjMmcCkrKDY3MTA4ODYzJnUpO3U+Pj0yNix1Kz1wLzY3MTA4ODY0fDAsdSs9Xz4+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmX31yZXR1cm4gMCE9PXUmJih0aGlzLndvcmRzW3ZdPXUsdGhpcy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihzKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHMpfSxmLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihz''@;'; put 'put ''KXt2YXIgdT1mdW5jdGlvbiBGKFIpe2Zvcih2YXIgcz1uZXcgQXJyYXkoUi5iaXRMZW5ndGgoKSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gbmV3IGYoMSk7''@;'; put 'put ''Zm9yKHZhciB2PXRoaXMscD0wO3A8dS5sZW5ndGgmJjA9PT11W3BdO3ArKyx2PXYuc3FyKCkpO2lmKCsrcDx1Lmxlbmd0aClmb3IodmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90b3R5cGUuaXVzaGxu''@;'; put 'put ''PWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgXyx1PXMlMjYsdj0ocy11KS8yNixwPTY3MTA4ODYzPj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19dJnA7dGhpcy53b3Jk''@;'; put 'put ''c1tfXT0oMHx0aGlzLndvcmRzW19dKS1MPDx1fGssaz1MPj4+MjYtdX1rJiYodGhpcy53b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRoaXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7Xzx2O18rKyl0aGlz''@;'; put 'put ''LndvcmRzW19dPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1LHYpe3ZhciBwO28o''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBzJiZzPj0wKSxwPXU/KHUtdSUyNikvMjY6MDt2YXIgXz1zJTI2LGs9TWF0aC5taW4oKHMtXykvMjYsdGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFyIGw9MDtsPGs7bCsr''@;'; put 'put ''KXkud29yZHNbbF09dGhpcy53b3Jkc1tsXTt5Lmxlbmd0aD1rfWlmKDAhPT1rKWlmKHRoaXMubGVuZ3RoPmspZm9yKHRoaXMubGVuZ3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0''@;'; put 'put ''aD0xO3ZhciBiPTA7Zm9yKGw9dGhpcy5sZW5ndGgtMTtsPj0wJiYoMCE9PWJ8fGw+PXApO2wtLSl7dmFyIHE9MHx0aGlzLndvcmRzW2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIpLDA9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaXNobG4ocyl9LGYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJvdG90eXBlLnVzaHJu''@;'; put 'put ''PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHMpfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhpcy53b3Jkc1t2XSYx''@;'; put 'put ''PDx1KSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxl''@;'; put 'put ''bmd0aDw9dj90aGlzOigwIT09dSYmdisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHYsdGhpcy5sZW5ndGgpLDAhPT11JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51PDx1KSx0aGlzLnN0cmlwKCkpfSxmLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihz''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihzKX0sZi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MD90aGlzLmlzdWJuKC1zKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRo''@;'; put 'put ''aXMud29yZHNbMF0pPHM/KHRoaXMud29yZHNbMF09cy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihzKX0sZi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0''@;'; put 'put ''aW9uKHMpe3RoaXMud29yZHNbMF0rPXM7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XT49NjcxMDg4NjQ7dSsrKXRoaXMud29yZHNbdV0tPTY3MTA4ODY0LHU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbdSsxXT0xOnRoaXMud29yZHNbdSsxXSsrO3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx1KzEpLHRoaXN9LGYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHMpe2lmKG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MClyZXR1cm4gdGhpcy5pYWRkbigtcyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHU9''@;'; put 'put ''MDt1PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3VdPDA7dSsrKXRoaXMud29yZHNbdV0rPTY3MTA4ODY0LHRoaXMud29yZHNbdSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocyl9LGYucHJv''@;'; put 'put ''dG90eXBlLnN1Ym49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihzKX0sZi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sZi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9''@;'; put 'put ''LGYucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihzLHUsdil7dmFyIF87dGhpcy5fZXhwYW5kKHMubGVuZ3RoK3YpO3ZhciBrLEw9MDtmb3IoXz0wO188cy5sZW5ndGg7XysrKXtrPSgwfHRoaXMud29yZHNbXyt2XSkrTDt2YXIgeT0oMHxzLndvcmRzW19dKSp1O0w9KChrLT02NzEw''@;'; put 'put ''ODg2MyZ5KT4+MjYpLSh5LzY3MTA4ODY0fDApLHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrfWZvcig7Xzx0aGlzLmxlbmd0aC12O18rKylMPShrPSgwfHRoaXMud29yZHNbXyt2XSkrTCk+PjI2LHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrO2lmKDA9PT1MKXJldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCk7Zm9yKG8oLTE9PT1MKSxMPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUw9KGs9LSgwfHRoaXMud29yZHNbX10pK0wpPj4yNix0aGlzLndvcmRzW19dPTY3MTA4ODYzJms7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9u''@;'; put 'put ''KHMsdSl7dmFyIHYscD10aGlzLmNsb25lKCksXz1zLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdOzAhPSh2PTI2LXRoaXMuX2NvdW50Qml0cyhrKSkmJihfPV8udXNobG4odikscC5pdXNobG4odiksaz0wfF8ud29yZHNbXy5sZW5ndGgtMV0pO3ZhciBsLHk9cC5sZW5ndGgtXy5sZW5ndGg7aWYo''@;'; put 'put ''Im1vZCIhPT11KXsobD1uZXcgZihudWxsKSkubGVuZ3RoPXkrMSxsLndvcmRzPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKHZhciBiPTA7YjxsLmxlbmd0aDtiKyspbC53b3Jkc1tiXT0wfXZhciBxPXAuY2xvbmUoKS5faXNobG5zdWJtdWwoXywxLHkpOzA9PT1xLm5lZ2F0aXZlJiYocD1xLGwm''@;'; put 'put ''JihsLndvcmRzW3ldPTEpKTtmb3IodmFyIEc9eS0xO0c+PTA7Ry0tKXt2YXIgUT02NzEwODg2NCooMHxwLndvcmRzW18ubGVuZ3RoK0ddKSsoMHxwLndvcmRzW18ubGVuZ3RoK0ctMV0pO2ZvcihRPU1hdGgubWluKFEva3wwLDY3MTA4ODYzKSxwLl9pc2hsbnN1Ym11bChfLFEsRyk7MCE9PXAu''@;'; put 'put ''bmVnYXRpdmU7KVEtLSxwLm5lZ2F0aXZlPTAscC5faXNobG5zdWJtdWwoXywxLEcpLHAuaXNaZXJvKCl8fChwLm5lZ2F0aXZlXj0xKTtsJiYobC53b3Jkc1tHXT1RKX1yZXR1cm4gbCYmbC5zdHJpcCgpLHAuc3RyaXAoKSwiZGl2IiE9PXUmJjAhPT12JiZwLml1c2hybih2KSx7ZGl2Omx8fG51''@;'; put 'put ''bGwsbW9kOnB9fSxmLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocyx1LHYpe3JldHVybiBvKCFzLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGYoMCksbW9kOm5ldyBmKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qo''@;'; put 'put ''cyx1KSwibW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlhZGQocykpLHtkaXY6cCxtb2Q6X30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZT8oaz10aGlzLmRpdm1vZChzLm5lZygpLHUpLCJt''@;'; put 'put ''b2QiIT09dSYmKHA9ay5kaXYubmVnKCkpLHtkaXY6cCxtb2Q6ay5tb2R9KTp0aGlzLm5lZ2F0aXZlJnMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocy5uZWcoKSx1KSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlzdWIocykpLHtkaXY6ay5k''@;'; put 'put ''aXYsbW9kOl99KTpzLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocyk8MD97ZGl2Om5ldyBmKDApLG1vZDp0aGlzfToxPT09cy5sZW5ndGg/ImRpdiI9PT11P3tkaXY6dGhpcy5kaXZuKHMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXU/e2RpdjpudWxsLG1vZDpuZXcgZih0aGlz''@;'; put 'put ''Lm1vZG4ocy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihzLHUpO3ZhciBwLF8sa30sZi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJkaXYi''@;'; put 'put ''LCExKS5kaXZ9LGYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMSkubW9kfSxmLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJtb2QiLCEwKS5tb2R9LGYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0''@;'; put 'put ''aW9uKHMpe3ZhciB1PXRoaXMuZGl2bW9kKHMpO2lmKHUubW9kLmlzWmVybygpKXJldHVybiB1LmRpdjt2YXIgdj0wIT09dS5kaXYubmVnYXRpdmU/dS5tb2QuaXN1YihzKTp1Lm1vZCxwPXMudXNocm4oMSksXz1zLmFuZGxuKDEpLGs9di5jbXAocCk7cmV0dXJuIGs8MHx8MT09PV8mJjA9PT1r''@;'; put 'put ''P3UuZGl2OjAhPT11LmRpdi5uZWdhdGl2ZT91LmRpdi5pc3VibigxKTp1LmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9KDE8PDI2KSVzLHY9MCxwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdj0odSp2KygwfHRoaXMu''@;'; put 'put ''d29yZHNbcF0pKSVzO3JldHVybiB2fSxmLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKzY3MTA4ODY0KnU7dGhpcy53b3Jkc1t2XT1wL3N8MCx1PXAl''@;'; put 'put ''c31yZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocyl9LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHU9dGhpcyx2PXMuY2xvbmUo''@;'; put 'put ''KTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz1uZXcgZigwKSxMPW5ldyBmKDEpLHk9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpOyl1Lml1c2hybigxKSx2Lml1c2hybigxKSwrK3k7Zm9yKHZhciBsPXYuY2xvbmUo''@;'; put 'put ''KSxiPXUuY2xvbmUoKTshdS5pc1plcm8oKTspe2Zvcih2YXIgcT0wLEc9MTshKHUud29yZHNbMF0mRykmJnE8MjY7KytxLEc8PD0xKTtpZihxPjApZm9yKHUuaXVzaHJuKHEpO3EtLSA+MDspKHAuaXNPZGQoKXx8Xy5pc09kZCgpKSYmKHAuaWFkZChsKSxfLmlzdWIoYikpLHAuaXVzaHJuKDEp''@;'; put 'put ''LF8uaXVzaHJuKDEpO2Zvcih2YXIgUT0wLHBlPTE7ISh2LndvcmRzWzBdJnBlKSYmUTwyNjsrK1EscGU8PD0xKTtpZihRPjApZm9yKHYuaXVzaHJuKFEpO1EtLSA+MDspKGsuaXNPZGQoKXx8TC5pc09kZCgpKSYmKGsuaWFkZChsKSxMLmlzdWIoYikpLGsuaXVzaHJuKDEpLEwuaXVzaHJuKDEp''@;'; put 'put ''O3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3ViKGspLF8uaXN1YihMKSk6KHYuaXN1Yih1KSxrLmlzdWIocCksTC5pc3ViKF8pKX1yZXR1cm57YTprLGI6TCxnY2Q6di5pdXNobG4oeSl9fSxmLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5p''@;'; put 'put ''c1plcm8oKSk7dmFyIHEsdT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUubmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3IodmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPXYuY2xvbmUoKTt1LmNtcG4oMSk+MCYmdi5jbXBuKDEpPjA7KXtmb3IodmFyIEw9MCx5PTE7ISh1LndvcmRz''@;'; put 'put ''WzBdJnkpJiZMPDI2OysrTCx5PDw9MSk7aWYoTD4wKWZvcih1Lml1c2hybihMKTtMLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKGspLHAuaXVzaHJuKDEpO2Zvcih2YXIgbD0wLGI9MTshKHYud29yZHNbMF0mYikmJmw8MjY7KytsLGI8PD0xKTtpZihsPjApZm9yKHYuaXVzaHJuKGwpO2wtLSA+''@;'; put 'put ''MDspXy5pc09kZCgpJiZfLmlhZGQoayksXy5pdXNocm4oMSk7dS5jbXAodik+PTA/KHUuaXN1Yih2KSxwLmlzdWIoXykpOih2LmlzdWIodSksXy5pc3ViKHApKX1yZXR1cm4ocT0wPT09dS5jbXBuKDEpP3A6XykuY21wbigwKTwwJiZxLmlhZGQocykscX0sZi5wcm90b3R5cGUuZ2NkPWZ1bmN0''@;'; put 'put ''aW9uKHMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHMuYWJzKCk7aWYocy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgdT10aGlzLmNsb25lKCksdj1zLmNsb25lKCk7dS5uZWdhdGl2ZT0wLHYubmVnYXRpdmU9MDtmb3IodmFyIHA9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpO3Ar''@;'; put 'put ''Kyl1Lml1c2hybigxKSx2Lml1c2hybigxKTtmb3IoOzspe2Zvcig7dS5pc0V2ZW4oKTspdS5pdXNocm4oMSk7Zm9yKDt2LmlzRXZlbigpOyl2Lml1c2hybigxKTt2YXIgXz11LmNtcCh2KTtpZihfPDApe3ZhciBrPXU7dT12LHY9a31lbHNlIGlmKDA9PT1ffHwwPT09di5jbXBuKDEpKWJyZWFr''@;'; put 'put ''O3UuaXN1Yih2KX1yZXR1cm4gdi5pdXNobG4ocCl9LGYucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZWdjZChzKS5hLnVtb2Qocyl9LGYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuaXNPZGQ9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZzfSxmLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2Ygcyk7dmFyIHU9cyUyNix2PShzLXUpLzI2''@;'; put 'put ''LHA9MTw8dTtpZih0aGlzLmxlbmd0aDw9dilyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XXw9cCx0aGlzO2Zvcih2YXIgXz1wLGs9djswIT09XyYmazx0aGlzLmxlbmd0aDtrKyspe3ZhciBMPTB8dGhpcy53b3Jkc1trXTtfPShMKz1fKT4+PjI2LHRoaXMud29yZHNba109''@;'; put 'put ''TCY9NjcxMDg4NjN9cmV0dXJuIDAhPT1fJiYodGhpcy53b3Jkc1trXT1fLHRoaXMubGVuZ3RoKyspLHRoaXN9LGYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxmLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3ZhciB2LHU9czwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhdSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl2PTE7ZWxzZXt1JiYocz0tcyksbyhzPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2''@;'; put 'put ''YXIgcD0wfHRoaXMud29yZHNbMF07dj1wPT09cz8wOnA8cz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC12OnZ9LGYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihzKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJjAhPT1zLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB1PXRoaXMudWNtcChzKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdTp1fSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHMpe2lmKHRoaXMubGVuZ3RoPnMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHMubGVuZ3Ro''@;'; put 'put ''KXJldHVybi0xO2Zvcih2YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9MHx0aGlzLndvcmRzW3ZdLF89MHxzLndvcmRzW3ZdO2lmKHAhPT1fKXtwPF8/dT0tMTpwPl8mJih1PTEpO2JyZWFrfX1yZXR1cm4gdX0sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biAxPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wKHMpfSxmLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcG4ocyk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bXAocyk+PTB9LGYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPD0w''@;'; put 'put ''fSxmLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPD0wfSxmLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXAocyl9LGYucmVkPWZ1''@;'; put 'put ''bmN0aW9uKHMpe3JldHVybiBuZXcgbWUocyl9LGYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG8oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRp''@;'; put 'put ''dmVzIikscy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0''@;'; put 'put ''aGlzKX0sZi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnJlZD1zLHRoaXN9LGYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2Zv''@;'; put 'put ''cmNlUmVkKHMpfSxmLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlz''@;'; put 'put ''LnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1''@;'; put 'put ''Yih0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRo''@;'; put 'put ''aXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkyKHRoaXMscyksdGhpcy5yZWQubXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLmltdWwo''@;'; put 'put ''dGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxcnQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sZi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVn''@;'; put 'put ''KHRoaXMpfSxmLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQmJiFzLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxzKX07dmFyIEs9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5Mjpu''@;'; put 'put ''dWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBYKFIscyl7dGhpcy5uYW1lPVIsdGhpcy5wPW5ldyBmKHMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBmKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBu''@;'; put 'put ''ZSgpe1guY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBzZSgpe1guY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBoZSgpe1guY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBfZSgpe1guY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBtZShSKXtpZigic3RyaW5nIj09dHlwZW9mIFIpe3ZhciBzPWYuX3ByaW1lKFIpO3RoaXMubT1zLnAsdGhpcy5wcmltZT1zfWVsc2UgbyhSLmd0bigxKSwibW9kdWx1''@;'; put 'put ''cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEZlKFIpe21lLmNhbGwodGhpcyxSKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhp''@;'; put 'put ''cy5yPW5ldyBmKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5t''@;'; put 'put ''aW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVgucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gcy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHN9LFgucHJvdG90eXBlLmlyZWR1Y2U9''@;'; put 'put ''ZnVuY3Rpb24ocyl7dmFyIHYsdT1zO2Rve3RoaXMuc3BsaXQodSx0aGlzLnRtcCksdj0odT0odT10aGlzLmltdWxLKHUpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUodj50aGlzLm4pO3ZhciBwPXY8dGhpcy5uPy0xOnUudWNtcCh0aGlzLnApO3JldHVybiAwPT09cD8odS53''@;'; put 'put ''b3Jkc1swXT0wLHUubGVuZ3RoPTEpOnA+MD91LmlzdWIodGhpcy5wKTp2b2lkIDAhPT11LnN0cmlwP3Uuc3RyaXAoKTp1Ll9zdHJpcCgpLHV9LFgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7cy5pdXNocm4odGhpcy5uLDAsdSl9LFgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3JldHVybiBzLmltdWwodGhpcy5rKX0sSShuZSxYKSxuZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9NDE5NDMwMyxwPU1hdGgubWluKHMubGVuZ3RoLDkpLF89MDtfPHA7XysrKXUud29yZHNbX109cy53b3Jkc1tfXTtpZih1Lmxlbmd0aD1wLHMubGVuZ3RoPD05''@;'; put 'put ''KXJldHVybiBzLndvcmRzWzBdPTAsdm9pZChzLmxlbmd0aD0xKTt2YXIgaz1zLndvcmRzWzldO2Zvcih1LndvcmRzW3UubGVuZ3RoKytdPWsmdixfPTEwO188cy5sZW5ndGg7XysrKXt2YXIgTD0wfHMud29yZHNbX107cy53b3Jkc1tfLTEwXT0oTCZ2KTw8NHxrPj4+MjIsaz1MfXMud29yZHNb''@;'; put 'put ''Xy0xMF09az4+Pj0yMixzLmxlbmd0aC09MD09PWsmJnMubGVuZ3RoPjEwPzEwOjl9LG5lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtzLndvcmRzW3MubGVuZ3RoXT0wLHMud29yZHNbcy5sZW5ndGgrMV09MCxzLmxlbmd0aCs9Mjtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kysp''@;'; put 'put ''e3ZhciBwPTB8cy53b3Jkc1t2XTtzLndvcmRzW3ZdPTY3MTA4ODYzJih1Kz05NzcqcCksdT02NCpwKyh1LzY3MTA4ODY0fDApfXJldHVybiAwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmKHMubGVuZ3RoLS0sMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJnMubGVuZ3RoLS0pLHN9LEkoc2UsWCks''@;'; put 'put ''SShoZSxYKSxJKF9lLFgpLF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTE5KigwfHMud29yZHNbdl0pK3UsXz02NzEwODg2MyZwO3A+Pj49MjYscy53b3Jkc1t2XT1fLHU9cH1yZXR1cm4gMCE9PXUmJihzLndvcmRz''@;'; put 'put ''W3MubGVuZ3RoKytdPXUpLHN9LGYuX3ByaW1lPWZ1bmN0aW9uKHMpe2lmKEtbc10pcmV0dXJuIEtbc107dmFyIHU7aWYoImsyNTYiPT09cyl1PW5ldyBuZTtlbHNlIGlmKCJwMjI0Ij09PXMpdT1uZXcgc2U7ZWxzZSBpZigicDE5MiI9PT1zKXU9bmV3IGhlO2Vsc2V7aWYoInAyNTUxOSIhPT1z''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3MpO3U9bmV3IF9lfXJldHVybiBLW3NdPXUsdX0sbWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCwicmVkIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocyx1KXtvKCEocy5uZWdhdGl2ZXx1Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHMucmVkJiZzLnJlZD09PXUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIil9LG1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShzKS5fZm9yY2VSZWQodGhpcyk6cy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHMpe3Jl''@;'; put 'put ''dHVybiBzLmlzWmVybygpP3MuY2xvbmUoKTp0aGlzLm0uc3ViKHMpLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdi5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuaWFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3Zl''@;'; put 'put ''cmlmeTIocyx1KTt2YXIgdj1zLnN1Yih1KTtyZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlzdWIodSk7cmV0dXJuIHYuY21wbigwKTww''@;'; put 'put ''JiZ2LmlhZGQodGhpcy5tKSx2fSxtZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocyksdGhpcy5pbW9kKHMudXNobG4odSkpfSxtZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMsdSksdGhpcy5pbW9k''@;'; put 'put ''KHMuaW11bCh1KSl9LG1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChzLm11bCh1KSl9LG1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltdWwocyxzLmNsb25lKCkpfSxtZS5wcm90b3R5cGUu''@;'; put 'put ''c3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLm11bChzLHMpfSxtZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihzKXtpZihzLmlzWmVybygpKXJldHVybiBzLmNsb25lKCk7dmFyIHU9dGhpcy5tLmFuZGxuKDMpO2lmKG8odSUyPT0xKSwzPT09dSl7dmFyIHY9dGhpcy5tLmFkZChuZXcgZigx''@;'; put 'put ''KSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhzLHYpfWZvcih2YXIgcD10aGlzLm0uc3VibigxKSxfPTA7IXAuaXNaZXJvKCkmJjA9PT1wLmFuZGxuKDEpOylfKysscC5pdXNocm4oMSk7byghcC5pc1plcm8oKSk7dmFyIGs9bmV3IGYoMSkudG9SZWQodGhpcyksTD1rLnJlZE5lZygpLHk9''@;'; put 'put ''dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGw9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihsPW5ldyBmKDIqbCpsKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobCx5KS5jbXAoTCk7KWwucmVkSUFkZChMKTtmb3IodmFyIGI9dGhpcy5wb3cobCxwKSxxPXRoaXMucG93KHMscC5hZGRuKDEpLml1''@;'; put 'put ''c2hybigxKSksRz10aGlzLnBvdyhzLHApLFE9XzswIT09Ry5jbXAoayk7KXtmb3IodmFyIHBlPUcsUGU9MDswIT09cGUuY21wKGspO1BlKyspcGU9cGUucmVkU3FyKCk7byhQZTxRKTt2YXIgWmU9dGhpcy5wb3coYixuZXcgZigxKS5pdXNobG4oUS1QZS0xKSk7cT1xLnJlZE11bChaZSksYj1a''@;'; put 'put ''ZS5yZWRTcXIoKSxHPUcucmVkTXVsKGIpLFE9UGV9cmV0dXJuIHF9LG1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3ZhciB1PXMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT11Lm5lZ2F0aXZlPyh1Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHUpLnJlZE5lZygpKTp0aGlzLmltb2QodSl9''@;'; put 'put ''LG1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyx1KXtpZih1LmlzWmVybygpKXJldHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtpZigwPT09dS5jbXBuKDEpKXJldHVybiBzLmNsb25lKCk7dmFyIHA9bmV3IEFycmF5KDE2KTtwWzBdPW5ldyBmKDEpLnRvUmVkKHRoaXMpLHBbMV09cztmb3Io''@;'; put 'put ''dmFyIF89MjtfPHAubGVuZ3RoO18rKylwW19dPXRoaXMubXVsKHBbXy0xXSxzKTt2YXIgaz1wWzBdLEw9MCx5PTAsbD11LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLF89dS5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciBiPXUud29yZHNbX10scT1sLTE7cT49MDtxLS0pe3Zh''@;'; put 'put ''ciBHPWI+PnEmMTtrIT09cFswXSYmKGs9dGhpcy5zcXIoaykpLDAhPT1HfHwwIT09TD8oTDw8PTEsTHw9RywoND09Kyt5fHwwPT09XyYmMD09PXEpJiYoaz10aGlzLm11bChrLHBbTF0pLHk9MCxMPTApKTp5PTB9bD0yNn1yZXR1cm4ga30sbWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlv''@;'; put 'put ''bihzKXt2YXIgdT1zLnVtb2QodGhpcy5tKTtyZXR1cm4gdT09PXM/dS5jbG9uZSgpOnV9LG1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT1zLmNsb25lKCk7cmV0dXJuIHUucmVkPW51bGwsdX0sZi5tb250PWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgRmUocyl9LEko''@;'; put 'put ''RmUsbWUpLEZlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLnVzaGxuKHRoaXMuc2hpZnQpKX0sRmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuaW1vZChzLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gdS5yZWQ9''@;'; put 'put ''bnVsbCx1fSxGZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIHMud29yZHNbMF09MCxzLmxlbmd0aD0xLHM7dmFyIHY9cy5pbXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5z''@;'; put 'put ''aGlmdCkubXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5tdWw9ZnVu''@;'; put 'put ''Y3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBuZXcgZigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHY9cy5tdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxfPXYuaXN1YihwKS5p''@;'; put 'put ''dXNocm4odGhpcy5zaGlmdCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLl9p''@;'; put 'put ''bnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odGU9ZC5ubWQodGUpLHRoaXMpfSw2NTA0Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBvLFM9ZCgzMTkpLGg9ZCg3Mjk2KTt0cnl7bz1bXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGV9Y2F0Y2goQSl7''@;'; put 'put ''aWYoIUF8fCJvYmplY3QiIT10eXBlb2YgQXx8ISgiY29kZSJpbiBBKXx8IkVSUl9QUk9UT19BQ0NFU1MiIT09QS5jb2RlKXRocm93IEF9dmFyIEk9ISFvJiZoJiZoKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLGY9T2JqZWN0LFQ9Zi5nZXRQcm90b3R5cGVPZjt0ZS5leHBvcnRzPUkm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBJLmdldD9TKFtJLmdldF0pOiJmdW5jdGlvbiI9PXR5cGVvZiBUJiZmdW5jdGlvbihNKXtyZXR1cm4gVChudWxsPT1NP006ZihNKSl9fSw2OTQ4Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWo7Uy52ZXJzaW9uPWQoODU5NykuaTgsUy51dGlscz1k''@;'; put 'put ''KDk1MyksUy5yYW5kPWQoOTkzMSksUy5jdXJ2ZT1kKDgyNTQpLFMuY3VydmVzPWQoNTQyNyksUy5lYz1kKDc5NTQpLFMuZWRkc2E9ZCg1OTgwKX0sNDkxODoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM3ODUpLGg9ZCg5NTMpLG89aC5nZXROQUYsST1oLmdldEpTRixmPWguYXNz''@;'; put 'put ''ZXJ0O2Z1bmN0aW9uIFQoTSxPKXt0aGlzLnR5cGU9TSx0aGlzLnA9bmV3IFMoTy5wLDE2KSx0aGlzLnJlZD1PLnByaW1lP1MucmVkKE8ucHJpbWUpOlMubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgUygwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IFMoMSkudG9SZWQodGhpcy5y''@;'; put 'put ''ZWQpLHRoaXMudHdvPW5ldyBTKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49Ty5uJiZuZXcgUyhPLm4sMTYpLHRoaXMuZz1PLmcmJnRoaXMucG9pbnRGcm9tSlNPTihPLmcsTy5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5f''@;'; put 'put ''d25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIEQ9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IUR8fEQuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21h''@;'; put 'put ''eHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gQShNLE8pe3RoaXMuY3VydmU9TSx0aGlzLnR5cGU9Tyx0aGlzLnByZWNvbXB1dGVkPW51bGx9dGUuZXhwb3J0cz1ULFQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sVC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxULnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oTyxEKXtmKE8ucHJlY29tcHV0ZWQpO3ZhciBFPU8uX2dldERvdWJs''@;'; put 'put ''ZXMoKSxCPW8oRCwxLHRoaXMuX2JpdExlbmd0aCksRj0oMTw8RS5zdGVwKzEpLShFLnN0ZXAlMj09MD8yOjEpO0YvPTM7dmFyIEgseixOPVtdO2ZvcihIPTA7SDxCLmxlbmd0aDtIKz1FLnN0ZXApe3o9MDtmb3IodmFyIFo9SCtFLnN0ZXAtMTtaPj1IO1otLSl6PSh6PDwxKStCW1pdO04ucHVz''@;'; put 'put ''aCh6KX1mb3IodmFyIFU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLEs9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFg9RjtYPjA7WC0tKXtmb3IoSD0wO0g8Ti5sZW5ndGg7SCsrKSh6PU5bSF0pPT09WD9LPUsubWl4ZWRBZGQoRS5wb2ludHNbSF0pOno9PT0tWCYmKEs9Sy5taXhl''@;'; put 'put ''ZEFkZChFLnBvaW50c1tIXS5uZWcoKSkpO1U9VS5hZGQoSyl9cmV0dXJuIFUudG9QKCl9LFQucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKE8sRCl7Zm9yKHZhciBFPTQsQj1PLl9nZXROQUZQb2ludHMoRSksRj1CLnBvaW50cyxOPW8oRCxFPUIud25kLHRoaXMuX2JpdExlbmd0aCksSD10''@;'; put 'put ''aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksej1OLmxlbmd0aC0xO3o+PTA7ei0tKXtmb3IodmFyIFo9MDt6Pj0wJiYwPT09Tlt6XTt6LS0pWisrO2lmKHo+PTAmJlorKyxIPUguZGJscChaKSx6PDApYnJlYWs7dmFyIFU9Tlt6XTtmKDAhPT1VKSxIPSJhZmZpbmUiPT09Ty50eXBlP0gubWl4''@;'; put 'put ''ZWRBZGQoVT4wP0ZbVS0xPj4xXTpGWy1VLTE+PjFdLm5lZygpKTpILmFkZChVPjA/RltVLTE+PjFdOkZbLVUtMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09Ty50eXBlP0gudG9QKCk6SH0sVC5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oTyxELEUsQixGKXt2YXIgVSxLLFgs''@;'; put 'put ''Tj10aGlzLl93bmFmVDEsSD10aGlzLl93bmFmVDIsej10aGlzLl93bmFmVDMsWj0wO2ZvcihVPTA7VTxCO1UrKyl7dmFyIG5lPShYPURbVV0pLl9nZXROQUZQb2ludHMoTyk7TltVXT1uZS53bmQsSFtVXT1uZS5wb2ludHN9Zm9yKFU9Qi0xO1U+PTE7VS09Mil7dmFyIHNlPVUtMSxoZT1VO2lm''@;'; put 'put ''KDE9PT1OW3NlXSYmMT09PU5baGVdKXt2YXIgX2U9W0Rbc2VdLG51bGwsbnVsbCxEW2hlXV07MD09PURbc2VdLnkuY21wKERbaGVdLnkpPyhfZVsxXT1EW3NlXS5hZGQoRFtoZV0pLF9lWzJdPURbc2VdLnRvSigpLm1peGVkQWRkKERbaGVdLm5lZygpKSk6MD09PURbc2VdLnkuY21wKERbaGVd''@;'; put 'put ''LnkucmVkTmVnKCkpPyhfZVsxXT1EW3NlXS50b0ooKS5taXhlZEFkZChEW2hlXSksX2VbMl09RFtzZV0uYWRkKERbaGVdLm5lZygpKSk6KF9lWzFdPURbc2VdLnRvSigpLm1peGVkQWRkKERbaGVdKSxfZVsyXT1EW3NlXS50b0ooKS5taXhlZEFkZChEW2hlXS5uZWcoKSkpO3ZhciBtZT1bLTMs''@;'; put 'put ''LTEsLTUsLTcsMCw3LDUsMSwzXSxGZT1JKEVbc2VdLEVbaGVdKTtmb3IoWj1NYXRoLm1heChGZVswXS5sZW5ndGgsWikseltzZV09bmV3IEFycmF5KFopLHpbaGVdPW5ldyBBcnJheShaKSxLPTA7SzxaO0srKyl6W3NlXVtLXT1tZVszKigxKygwfEZlWzBdW0tdKSkrKDErKDB8RmVbMV1bS10p''@;'; put 'put ''KV0seltoZV1bS109MCxIW3NlXT1fZX1lbHNlIHpbc2VdPW8oRVtzZV0sTltzZV0sdGhpcy5fYml0TGVuZ3RoKSx6W2hlXT1vKEVbaGVdLE5baGVdLHRoaXMuX2JpdExlbmd0aCksWj1NYXRoLm1heCh6W3NlXS5sZW5ndGgsWiksWj1NYXRoLm1heCh6W2hlXS5sZW5ndGgsWil9dmFyIHU9dGhp''@;'; put 'put ''cy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHY9dGhpcy5fd25hZlQ0O2ZvcihVPVo7VT49MDtVLS0pe2Zvcih2YXIgcD0wO1U+PTA7KXt2YXIgXz0hMDtmb3IoSz0wO0s8QjtLKyspdltLXT0wfHpbS11bVV0sMCE9PXZbS10mJihfPSExKTtpZighXylicmVhaztwKyssVS0tfWlmKFU+PTAmJnAr''@;'; put 'put ''Kyx1PXUuZGJscChwKSxVPDApYnJlYWs7Zm9yKEs9MDtLPEI7SysrKXt2YXIgaz12W0tdOzAhPT1rJiYoaz4wP1g9SFtLXVtrLTE+PjFdOms8MCYmKFg9SFtLXVstay0xPj4xXS5uZWcoKSksdT0iYWZmaW5lIj09PVgudHlwZT91Lm1peGVkQWRkKFgpOnUuYWRkKFgpKX19Zm9yKFU9MDtVPEI7''@;'; put 'put ''VSsrKUhbVV09bnVsbDtyZXR1cm4gRj91OnUudG9QKCl9LFQuQmFzZVBvaW50PUEsQS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxBLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlk''@;'; put 'put ''YXRlKHRoaXMpfSxULnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihPLEQpe089aC50b0FycmF5KE8sRCk7dmFyIEU9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PU9bMF18fDY9PT1PWzBdfHw3PT09T1swXSkmJk8ubGVuZ3RoLTE9PTIqRSlyZXR1cm4gNj09PU9bMF0/ZihPW08u''@;'; put 'put ''bGVuZ3RoLTFdJTI9PTApOjc9PT1PWzBdJiZmKE9bTy5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludChPLnNsaWNlKDEsMStFKSxPLnNsaWNlKDErRSwxKzIqRSkpO2lmKCgyPT09T1swXXx8Mz09PU9bMF0pJiZPLmxlbmd0aC0xPT09RSlyZXR1cm4gdGhpcy5wb2ludEZyb21YKE8uc2xpY2Uo''@;'; put 'put ''MSwxK0UpLDM9PT1PWzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LEEucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuZW5jb2RlKE8sITApfSxBLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKE8pe3ZhciBEPXRo''@;'; put 'put ''aXMuY3VydmUucC5ieXRlTGVuZ3RoKCksRT10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsRCk7cmV0dXJuIE8/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KEUpOls0XS5jb25jYXQoRSx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsRCkpfSxBLnByb3RvdHlwZS5lbmNvZGU9ZnVu''@;'; put 'put ''Y3Rpb24oTyxEKXtyZXR1cm4gaC5lbmNvZGUodGhpcy5fZW5jb2RlKEQpLE8pfSxBLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKE8pe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIEQ9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBELm5h''@;'; put 'put ''Zj10aGlzLl9nZXROQUZQb2ludHMoOCksRC5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCxPKSxELmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9RCx0aGlzfSxBLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihPKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1''@;'; put 'put ''cm4hMTt2YXIgRD10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFEJiZELnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoTy5iaXRMZW5ndGgoKSsxKS9ELnN0ZXApfSxBLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihPLEQpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMu''@;'; put 'put ''cHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgRT1bdGhpc10sQj10aGlzLEY9MDtGPEQ7Ris9Tyl7Zm9yKHZhciBOPTA7TjxPO04rKylCPUIuZGJsKCk7RS5wdXNoKEIpfXJldHVybntzdGVwOk8scG9pbnRzOkV9fSxBLnByb3RvdHlw''@;'; put 'put ''ZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKE8pe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIEQ9W3RoaXNdLEU9KDE8PE8pLTEsQj0xPT09RT9udWxsOnRoaXMuZGJsKCksRj0xO0Y8RTtGKyspRFtG''@;'; put 'put ''XT1EW0YtMV0uYWRkKEIpO3JldHVybnt3bmQ6Tyxwb2ludHM6RH19LEEucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LEEucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oTyl7Zm9yKHZhciBEPXRoaXMsRT0wO0U8TztFKyspRD1ELmRibCgpO3JldHVybiBEfX0sMTEz''@;'; put 'put ''ODoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk1MyksaD1kKDM3ODUpLG89ZCg1NzE3KSxJPWQoNDkxOCksZj1TLmFzc2VydDtmdW5jdGlvbiBUKE0pe3RoaXMudHdpc3RlZD0xIT0oMHxNLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8TS5hKSx0aGlzLmV4dGVu''@;'; put 'put ''ZGVkPXRoaXMubU9uZUEsSS5jYWxsKHRoaXMsImVkd2FyZHMiLE0pLHRoaXMuYT1uZXcgaChNLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBoKE0uYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNx''@;'; put 'put ''cigpLHRoaXMuZD1uZXcgaChNLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxmKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxNLmMpfWZ1bmN0aW9uIEEoTSxPLEQsRSxCKXtJLkJh''@;'; put 'put ''c2VQb2ludC5jYWxsKHRoaXMsTSwicHJvamVjdGl2ZSIpLG51bGw9PT1PJiZudWxsPT09RCYmbnVsbD09PUU/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0h''@;'; put 'put ''MCk6KHRoaXMueD1uZXcgaChPLDE2KSx0aGlzLnk9bmV3IGgoRCwxNiksdGhpcy56PUU/bmV3IGgoRSwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PUImJm5ldyBoKEIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRo''@;'; put 'put ''aXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRo''@;'; put 'put ''aXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfW8oVCxJKSx0ZS5leHBvcnRzPVQsVC5wcm90b3R5cGUuX211bEE9''@;'; put 'put ''ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMubU9uZUE/Ty5yZWROZWcoKTp0aGlzLmEucmVkTXVsKE8pfSxULnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5vbmVDP086dGhpcy5jLnJlZE11bChPKX0sVC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKE8sRCxFLEIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnBvaW50KE8sRCxFLEIpfSxULnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE8sRCl7KE89bmV3IGgoTywxNikpLnJlZHx8KE89Ty50b1JlZCh0aGlzLnJlZCkpO3ZhciBFPU8ucmVkU3FyKCksQj10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKEUpKSxGPXRoaXMu''@;'; put 'put ''b25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChFKSksTj1CLnJlZE11bChGLnJlZEludm0oKSksSD1OLnJlZFNxcnQoKTtpZigwIT09SC5yZWRTcXIoKS5yZWRTdWIoTikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIHo9''@;'; put 'put ''SC5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oRCYmIXp8fCFEJiZ6KSYmKEg9SC5yZWROZWcoKSksdGhpcy5wb2ludChPLEgpfSxULnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKE8sRCl7KE89bmV3IGgoTywxNikpLnJlZHx8KE89Ty50b1JlZCh0aGlzLnJlZCkpO3ZhciBFPU8ucmVk''@;'; put 'put ''U3FyKCksQj1FLnJlZFN1Yih0aGlzLmMyKSxGPUUucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLE49Qi5yZWRNdWwoRi5yZWRJbnZtKCkpO2lmKDA9PT1OLmNtcCh0aGlzLnplcm8pKXtpZihEKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3Jl''@;'; put 'put ''dHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxPKX12YXIgSD1OLnJlZFNxcnQoKTtpZigwIT09SC5yZWRTcXIoKS5yZWRTdWIoTikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIEguZnJvbVJlZCgpLmlzT2RkKCkhPT1EJiYoSD1ILnJlZE5l''@;'; put 'put ''ZygpKSx0aGlzLnBvaW50KEgsTyl9LFQucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE8pe2lmKE8uaXNJbmZpbml0eSgpKXJldHVybiEwO08ubm9ybWFsaXplKCk7dmFyIEQ9Ty54LnJlZFNxcigpLEU9Ty55LnJlZFNxcigpLEI9RC5yZWRNdWwodGhpcy5hKS5yZWRBZGQoRSksRj10aGlz''@;'; put 'put ''LmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChEKS5yZWRNdWwoRSkpKTtyZXR1cm4gMD09PUIuY21wKEYpfSxvKEEsSS5CYXNlUG9pbnQpLFQucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTyl7cmV0dXJuIEEuZnJvbUpTT04odGhpcyxPKX0sVC5wcm90''@;'; put 'put ''b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTyxELEUsQil7cmV0dXJuIG5ldyBBKHRoaXMsTyxELEUsQil9LEEuZnJvbUpTT049ZnVuY3Rpb24oTyxEKXtyZXR1cm4gbmV3IEEoTyxEWzBdLERbMV0sRFsyXSl9LEEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmlu''@;'; put 'put ''aXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sQS5wcm90''@;'; put 'put ''b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxBLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIE89dGhpcy54''@;'; put 'put ''LnJlZFNxcigpLEQ9dGhpcy55LnJlZFNxcigpLEU9dGhpcy56LnJlZFNxcigpO0U9RS5yZWRJQWRkKEUpO3ZhciBCPXRoaXMuY3VydmUuX211bEEoTyksRj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihPKS5yZWRJU3ViKEQpLE49Qi5yZWRBZGQoRCksSD1OLnJlZFN1''@;'; put 'put ''YihFKSx6PUIucmVkU3ViKEQpLFo9Ri5yZWRNdWwoSCksVT1OLnJlZE11bCh6KSxLPUYucmVkTXVsKHopLFg9SC5yZWRNdWwoTik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWixVLFgsSyl9LEEucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEIsRixOLEgseixaLE89dGhpcy54''@;'; put 'put ''LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLEQ9dGhpcy54LnJlZFNxcigpLEU9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIFU9KEg9dGhpcy5jdXJ2ZS5fbXVsQShEKSkucmVkQWRkKEUpO3RoaXMuek9uZT8oQj1PLnJlZFN1YihEKS5yZWRTdWIoRSkucmVkTXVs''@;'; put 'put ''KFUucmVkU3ViKHRoaXMuY3VydmUudHdvKSksRj1VLnJlZE11bChILnJlZFN1YihFKSksTj1VLnJlZFNxcigpLnJlZFN1YihVKS5yZWRTdWIoVSkpOih6PXRoaXMuei5yZWRTcXIoKSxaPVUucmVkU3ViKHopLnJlZElTdWIoeiksQj1PLnJlZFN1YihEKS5yZWRJU3ViKEUpLnJlZE11bChaKSxG''@;'; put 'put ''PVUucmVkTXVsKEgucmVkU3ViKEUpKSxOPVUucmVkTXVsKFopKX1lbHNlIEg9RC5yZWRBZGQoRSksej10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksWj1ILnJlZFN1Yih6KS5yZWRTdWIoeiksQj10aGlzLmN1cnZlLl9tdWxDKE8ucmVkSVN1YihIKSkucmVkTXVsKFopLEY9dGhp''@;'; put 'put ''cy5jdXJ2ZS5fbXVsQyhIKS5yZWRNdWwoRC5yZWRJU3ViKEUpKSxOPUgucmVkTXVsKFopO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsRixOKX0sQS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlz''@;'; put 'put ''Ll9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEEucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oTyl7dmFyIEQ9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChPLnkucmVkU3ViKE8ueCkpLEU9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChPLnkucmVkQWRkKE8ueCkpLEI9dGhp''@;'; put 'put ''cy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoTy50KSxGPXRoaXMuei5yZWRNdWwoTy56LnJlZEFkZChPLnopKSxOPUUucmVkU3ViKEQpLEg9Ri5yZWRTdWIoQiksej1GLnJlZEFkZChCKSxaPUUucmVkQWRkKEQpLFU9Ti5yZWRNdWwoSCksSz16LnJlZE11bChaKSxYPU4ucmVkTXVs''@;'; put 'put ''KFopLG5lPUgucmVkTXVsKHopO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUsSyxuZSxYKX0sQS5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oTyl7dmFyIEssWCxEPXRoaXMuei5yZWRNdWwoTy56KSxFPUQucmVkU3FyKCksQj10aGlzLngucmVkTXVsKE8ueCksRj10aGlzLnkucmVkTXVs''@;'; put 'put ''KE8ueSksTj10aGlzLmN1cnZlLmQucmVkTXVsKEIpLnJlZE11bChGKSxIPUUucmVkU3ViKE4pLHo9RS5yZWRBZGQoTiksWj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKE8ueC5yZWRBZGQoTy55KSkucmVkSVN1YihCKS5yZWRJU3ViKEYpLFU9RC5yZWRNdWwoSCkucmVkTXVsKFopO3Jl''@;'; put 'put ''dHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KEs9RC5yZWRNdWwoeikucmVkTXVsKEYucmVkU3ViKHRoaXMuY3VydmUuX211bEEoQikpKSxYPUgucmVkTXVsKHopKTooSz1ELnJlZE11bCh6KS5yZWRNdWwoRi5yZWRTdWIoQikpLFg9dGhpcy5jdXJ2ZS5fbXVsQyhIKS5yZWRNdWwoeikpLHRoaXMu''@;'; put 'put ''Y3VydmUucG9pbnQoVSxLLFgpfSxBLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP086Ty5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChPKTp0aGlzLl9wcm9qQWRkKE8pfSxBLnByb3RvdHlwZS5tdWw9''@;'; put 'put ''ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoTyk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxPKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTyl9LEEucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihPLEQsRSl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQo''@;'; put 'put ''MSxbdGhpcyxEXSxbTyxFXSwyLCExKX0sQS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihPLEQsRSl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxEXSxbTyxFXSwyLCEwKX0sQS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVy''@;'; put 'put ''biB0aGlzO3ZhciBPPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKE8pLHRoaXMueT10aGlzLnkucmVkTXVsKE8pLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKE8pKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEEucHJv''@;'; put 'put ''dG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sQS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9t''@;'; put 'put ''UmVkKCl9LEEucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxBLnByb3RvdHlwZS5lcT1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcz09PU98fDA9PT10aGlzLmdldFgoKS5jbXAoTy5nZXRYKCkpJiYwPT09dGhpcy5nZXRZ''@;'; put 'put ''KCkuY21wKE8uZ2V0WSgpKX0sQS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKE8pe3ZhciBEPU8udG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKEQpKXJldHVybiEwO2Zvcih2YXIgRT1PLmNsb25lKCksQj10aGlzLmN1cnZlLnJlZE4ucmVk''@;'; put 'put ''TXVsKHRoaXMueik7Oyl7aWYoRS5pYWRkKHRoaXMuY3VydmUubiksRS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihELnJlZElBZGQoQiksMD09PXRoaXMueC5jbXAoRCkpcmV0dXJuITB9fSxBLnByb3RvdHlwZS50b1A9QS5wcm90b3R5cGUubm9ybWFsaXplLEEucHJvdG90eXBl''@;'; put 'put ''Lm1peGVkQWRkPUEucHJvdG90eXBlLmFkZH0sODI1NDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1qO1MuYmFzZT1kKDQ5MTgpLFMuc2hvcnQ9ZCg2NjczKSxTLm1vbnQ9ZCgyODgxKSxTLmVkd2FyZHM9ZCgxMTM4KX0sMjg4MToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1k''@;'; put 'put ''KDM3ODUpLGg9ZCg1NzE3KSxvPWQoNDkxOCksST1kKDk1Myk7ZnVuY3Rpb24gZihBKXtvLmNhbGwodGhpcywibW9udCIsQSksdGhpcy5hPW5ldyBTKEEuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgUyhBLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBTKDQpLnRv''@;'; put 'put ''UmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IFMoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBUKEEsTSxPKXtvLkJhc2VQb2ludC5jYWxsKHRoaXMsQSwicHJvamVjdGl2ZSIpLG51''@;'; put 'put ''bGw9PT1NJiZudWxsPT09Tz8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IFMoTSwxNiksdGhpcy56PW5ldyBTKE8sMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8''@;'; put 'put ''KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9aChmLG8pLHRlLmV4cG9ydHM9ZixmLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihNKXt2YXIgTz1NLm5vcm1hbGl6ZSgpLngsRD1PLnJlZFNxcigpLEU9RC5yZWRNdWwoTykucmVkQWRkKEQucmVkTXVsKHRoaXMuYSkp''@;'; put 'put ''LnJlZEFkZChPKTtyZXR1cm4gMD09PUUucmVkU3FydCgpLnJlZFNxcigpLmNtcChFKX0saChULG8uQmFzZVBvaW50KSxmLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihNLE8pe3JldHVybiB0aGlzLnBvaW50KEkudG9BcnJheShNLE8pLDEpfSxmLnByb3RvdHlwZS5wb2ludD1mdW5j''@;'; put 'put ''dGlvbihNLE8pe3JldHVybiBuZXcgVCh0aGlzLE0sTyl9LGYucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTSl7cmV0dXJuIFQuZnJvbUpTT04odGhpcyxNKX0sVC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sVC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LFQuZnJvbUpTT049ZnVuY3Rpb24oTSxPKXtyZXR1cm4gbmV3IFQoTSxPWzBdLE9bMV18fE0ub25lKX0sVC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlz''@;'; put 'put ''SW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxULnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IDA9PT10aGlzLnouY21wbigwKX0sVC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIE89dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEU9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEI9Ty5yZWRTdWIoRSksRj1PLnJlZE11bChFKSxOPUIucmVkTXVsKEUucmVkQWRk''@;'; put 'put ''KHRoaXMuY3VydmUuYTI0LnJlZE11bChCKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEYsTil9LFQucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFQucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rp''@;'; put 'put ''b24oTSxPKXt2YXIgRD10aGlzLngucmVkQWRkKHRoaXMueiksRT10aGlzLngucmVkU3ViKHRoaXMueiksQj1NLngucmVkQWRkKE0ueiksTj1NLngucmVkU3ViKE0ueikucmVkTXVsKEQpLEg9Qi5yZWRNdWwoRSksej1PLnoucmVkTXVsKE4ucmVkQWRkKEgpLnJlZFNxcigpKSxaPU8ueC5yZWRN''@;'; put 'put ''dWwoTi5yZWRJU3ViKEgpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh6LFopfSxULnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTSl7Zm9yKHZhciBPPU0uY2xvbmUoKSxEPXRoaXMsRT10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksRj1bXTswIT09Ty5jbXBuKDApO08uaXVz''@;'; put 'put ''aHJuKDEpKUYucHVzaChPLmFuZGxuKDEpKTtmb3IodmFyIE49Ri5sZW5ndGgtMTtOPj0wO04tLSkwPT09RltOXT8oRD1ELmRpZmZBZGQoRSx0aGlzKSxFPUUuZGJsKCkpOihFPUQuZGlmZkFkZChFLHRoaXMpLEQ9RC5kYmwoKSk7cmV0dXJuIEV9LFQucHJvdG90eXBlLm11bEFkZD1mdW5jdGlv''@;'; put 'put ''bigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFQucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxULnByb3RvdHlwZS5lcT1mdW5jdGlv''@;'; put 'put ''bihNKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChNLmdldFgoKSl9LFQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sVC5wcm90b3R5cGUuZ2V0''@;'; put 'put ''WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NjczOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoOTUzKSxoPWQoMzc4NSksbz1kKDU3MTcpLEk9ZCg0OTE4KSxmPVMuYXNzZXJ0O2Z1bmN0aW9uIFQoTyl7SS5jYWxsKHRoaXMs''@;'; put 'put ''InNob3J0IixPKSx0aGlzLmE9bmV3IGgoTy5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBoKE8uYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVB''@;'; put 'put ''PTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oTyksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gQShPLEQsRSxCKXtJLkJhc2VQ''@;'; put 'put ''b2ludC5jYWxsKHRoaXMsTywiYWZmaW5lIiksbnVsbD09PUQmJm51bGw9PT1FPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgaChELDE2KSx0aGlzLnk9bmV3IGgoRSwxNiksQiYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55''@;'; put 'put ''LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBNKE8sRCxFLEIpe0kuQmFz''@;'; put 'put ''ZVBvaW50LmNhbGwodGhpcyxPLCJqYWNvYmlhbiIpLG51bGw9PT1EJiZudWxsPT09RSYmbnVsbD09PUI/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBoKDApKToodGhpcy54PW5ldyBoKEQsMTYpLHRoaXMueT1uZXcgaChFLDE2KSx0aGlz''@;'; put 'put ''Lno9bmV3IGgoQiwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkp''@;'; put 'put ''LHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1vKFQsSSksdGUuZXhwb3J0cz1ULFQucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oRCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEUsQjtpZihELmJldGEp''@;'; put 'put ''RT1uZXcgaChELmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBGPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO0U9KEU9RlswXS5jbXAoRlsxXSk8MD9GWzBdOkZbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihELmxhbWJkYSlCPW5ldyBoKEQubGFtYmRhLDE2KTtlbHNle3ZhciBO''@;'; put 'put ''PXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKE5bMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChFKSk/Qj1OWzBdOmYoMD09PXRoaXMuZy5tdWwoQj1OWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoRSkpKX1yZXR1cm57YmV0YTpFLGxhbWJkYTpCLGJhc2lzOkQu''@;'; put 'put ''YmFzaXM/RC5iYXNpcy5tYXAoZnVuY3Rpb24oeil7cmV0dXJue2E6bmV3IGgoei5hLDE2KSxiOm5ldyBoKHouYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKEIpfX19LFQucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oRCl7dmFyIEU9RD09PXRoaXMucD90aGlzLnJlZDpoLm1v''@;'; put 'put ''bnQoRCksQj1uZXcgaCgyKS50b1JlZChFKS5yZWRJbnZtKCksRj1CLnJlZE5lZygpLE49bmV3IGgoMykudG9SZWQoRSkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChCKTtyZXR1cm5bRi5yZWRBZGQoTikuZnJvbVJlZCgpLEYucmVkU3ViKE4pLmZyb21SZWQoKV19LFQucHJvdG90eXBlLl9n''@;'; put 'put ''ZXRFbmRvQmFzaXM9ZnVuY3Rpb24oRCl7Zm9yKHZhciBVLEssWCxuZSxzZSxoZSxfZSxGZSxSLEU9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxCPUQsRj10aGlzLm4uY2xvbmUoKSxOPW5ldyBoKDEpLEg9bmV3IGgoMCksej1uZXcgaCgwKSxaPW5ldyBo''@;'; put 'put ''KDEpLG1lPTA7MCE9PUIuY21wbigwKTspe3ZhciBzPUYuZGl2KEIpO0ZlPUYuc3ViKHMubXVsKEIpKSxSPXouc3ViKHMubXVsKE4pKTt2YXIgdT1aLnN1YihzLm11bChIKSk7aWYoIVgmJkZlLmNtcChFKTwwKVU9X2UubmVnKCksSz1OLFg9RmUubmVnKCksbmU9UjtlbHNlIGlmKFgmJjI9PSsr''@;'; put 'put ''bWUpYnJlYWs7X2U9RmUsRj1CLEI9RmUsej1OLE49UixaPUgsSD11fXNlPUZlLm5lZygpLGhlPVI7dmFyIHY9WC5zcXIoKS5hZGQobmUuc3FyKCkpO3JldHVybiBzZS5zcXIoKS5hZGQoaGUuc3FyKCkpLmNtcCh2KT49MCYmKHNlPVUsaGU9SyksWC5uZWdhdGl2ZSYmKFg9WC5uZWcoKSxuZT1u''@;'; put 'put ''ZS5uZWcoKSksc2UubmVnYXRpdmUmJihzZT1zZS5uZWcoKSxoZT1oZS5uZWcoKSksW3thOlgsYjpuZX0se2E6c2UsYjpoZX1dfSxULnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKEQpe3ZhciBFPXRoaXMuZW5kby5iYXNpcyxCPUVbMF0sRj1FWzFdLE49Ri5iLm11bChEKS5kaXZSb3Vu''@;'; put 'put ''ZCh0aGlzLm4pLEg9Qi5iLm5lZygpLm11bChEKS5kaXZSb3VuZCh0aGlzLm4pLHo9Ti5tdWwoQi5hKSxaPUgubXVsKEYuYSksVT1OLm11bChCLmIpLEs9SC5tdWwoRi5iKTtyZXR1cm57azE6RC5zdWIoeikuc3ViKFopLGsyOlUuYWRkKEspLm5lZygpfX0sVC5wcm90b3R5cGUucG9pbnRGcm9t''@;'; put 'put ''WD1mdW5jdGlvbihELEUpeyhEPW5ldyBoKEQsMTYpKS5yZWR8fChEPUQudG9SZWQodGhpcy5yZWQpKTt2YXIgQj1ELnJlZFNxcigpLnJlZE11bChEKS5yZWRJQWRkKEQucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxGPUIucmVkU3FydCgpO2lmKDAhPT1GLnJlZFNxcigpLnJlZFN1''@;'; put 'put ''YihCKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgTj1GLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihFJiYhTnx8IUUmJk4pJiYoRj1GLnJlZE5lZygpKSx0aGlzLnBvaW50KEQsRil9LFQucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKEQp''@;'; put 'put ''e2lmKEQuaW5mKXJldHVybiEwO3ZhciBFPUQueCxCPUQueSxGPXRoaXMuYS5yZWRNdWwoRSksTj1FLnJlZFNxcigpLnJlZE11bChFKS5yZWRJQWRkKEYpLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PUIucmVkU3FyKCkucmVkSVN1YihOKS5jbXBuKDApfSxULnByb3RvdHlwZS5fZW5kb1du''@;'; put 'put ''YWZNdWxBZGQ9ZnVuY3Rpb24oRCxFLEIpe2Zvcih2YXIgRj10aGlzLl9lbmRvV25hZlQxLE49dGhpcy5fZW5kb1duYWZUMixIPTA7SDxELmxlbmd0aDtIKyspe3ZhciB6PXRoaXMuX2VuZG9TcGxpdChFW0hdKSxaPURbSF0sVT1aLl9nZXRCZXRhKCk7ei5rMS5uZWdhdGl2ZSYmKHouazEuaW5l''@;'; put 'put ''ZygpLFo9Wi5uZWcoITApKSx6LmsyLm5lZ2F0aXZlJiYoei5rMi5pbmVnKCksVT1VLm5lZyghMCkpLEZbMipIXT1aLEZbMipIKzFdPVUsTlsyKkhdPXouazEsTlsyKkgrMV09ei5rMn1mb3IodmFyIEs9dGhpcy5fd25hZk11bEFkZCgxLEYsTiwyKkgsQiksWD0wO1g8MipIO1grKylGW1hdPW51''@;'; put 'put ''bGwsTltYXT1udWxsO3JldHVybiBLfSxvKEEsSS5CYXNlUG9pbnQpLFQucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKEQsRSxCKXtyZXR1cm4gbmV3IEEodGhpcyxELEUsQil9LFQucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oRCxFKXtyZXR1cm4gQS5mcm9tSlNPTih0aGlzLEQs''@;'; put 'put ''RSl9LEEucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgRD10aGlzLnByZWNvbXB1dGVkO2lmKEQmJkQuYmV0YSlyZXR1cm4gRC5iZXRhO3ZhciBFPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSks''@;'; put 'put ''dGhpcy55KTtpZihEKXt2YXIgQj10aGlzLmN1cnZlLEY9ZnVuY3Rpb24oTil7cmV0dXJuIEIucG9pbnQoTi54LnJlZE11bChCLmVuZG8uYmV0YSksTi55KX07RC5iZXRhPUUsRS5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpELm5hZiYme3duZDpELm5hZi53bmQscG9pbnRzOkQubmFmLnBv''@;'; put 'put ''aW50cy5tYXAoRil9LGRvdWJsZXM6RC5kb3VibGVzJiZ7c3RlcDpELmRvdWJsZXMuc3RlcCxwb2ludHM6RC5kb3VibGVzLnBvaW50cy5tYXAoRil9fX1yZXR1cm4gRX19LEEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55''@;'; put 'put ''LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYm''@;'; put 'put ''e3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LEEuZnJvbUpTT049ZnVuY3Rpb24oRCxFLEIpeyJzdHJpbmciPT10eXBlb2YgRSYmKEU9SlNPTi5wYXJzZShFKSk7dmFyIEY9''@;'; put 'put ''RC5wb2ludChFWzBdLEVbMV0sQik7aWYoIUVbMl0pcmV0dXJuIEY7ZnVuY3Rpb24gTih6KXtyZXR1cm4gRC5wb2ludCh6WzBdLHpbMV0sQil9dmFyIEg9RVsyXTtyZXR1cm4gRi5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6SC5kb3VibGVzJiZ7c3RlcDpILmRvdWJsZXMuc3RlcCxw''@;'; put 'put ''b2ludHM6W0ZdLmNvbmNhdChILmRvdWJsZXMucG9pbnRzLm1hcChOKSl9LG5hZjpILm5hZiYme3duZDpILm5hZi53bmQscG9pbnRzOltGXS5jb25jYXQoSC5uYWYucG9pbnRzLm1hcChOKSl9fSxGfSxBLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0''@;'; put 'put ''eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEEucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''bmZ9LEEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihEKXtpZih0aGlzLmluZilyZXR1cm4gRDtpZihELmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKEQpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoRCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigw''@;'; put 'put ''PT09dGhpcy54LmNtcChELngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEU9dGhpcy55LnJlZFN1YihELnkpOzAhPT1FLmNtcG4oMCkmJihFPUUucmVkTXVsKHRoaXMueC5yZWRTdWIoRC54KS5yZWRJbnZtKCkpKTt2YXIgQj1FLnJlZFNxcigpLnJlZElTdWIodGhp''@;'; put 'put ''cy54KS5yZWRJU3ViKEQueCksRj1FLnJlZE11bCh0aGlzLngucmVkU3ViKEIpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoQixGKX0sQS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIEQ9dGhpcy55LnJlZEFkZCh0''@;'; put 'put ''aGlzLnkpO2lmKDA9PT1ELmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgRT10aGlzLmN1cnZlLmEsQj10aGlzLngucmVkU3FyKCksRj1ELnJlZEludm0oKSxOPUIucmVkQWRkKEIpLnJlZElBZGQoQikucmVkSUFkZChFKS5yZWRNdWwoRiksSD1OLnJlZFNx''@;'; put 'put ''cigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSx6PU4ucmVkTXVsKHRoaXMueC5yZWRTdWIoSCkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChILHopfSxBLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LEEu''@;'; put 'put ''cHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sQS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEQpe3JldHVybiBEPW5ldyBoKEQsMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhEKT90aGlzLmN1cnZlLl9maXhlZE5hZk11''@;'; put 'put ''bCh0aGlzLEQpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW0RdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsRCl9LEEucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihELEUsQil7dmFyIEY9W3RoaXMsRV0sTj1bRCxCXTtyZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKEYsTik6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLEYsTiwyKX0sQS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihELEUsQil7dmFyIEY9W3RoaXMsRV0sTj1bRCxCXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3Vy''@;'; put 'put ''dmUuX2VuZG9XbmFmTXVsQWRkKEYsTiwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLEYsTiwyLCEwKX0sQS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oRCl7cmV0dXJuIHRoaXM9PT1EfHx0aGlzLmluZj09PUQuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKEQueCkmJjA9PT10aGlz''@;'; put 'put ''LnkuY21wKEQueSkpfSxBLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oRCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIEU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihEJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgQj10aGlzLnByZWNvbXB1dGVkLEY9ZnVu''@;'; put 'put ''Y3Rpb24oTil7cmV0dXJuIE4ubmVnKCl9O0UucHJlY29tcHV0ZWQ9e25hZjpCLm5hZiYme3duZDpCLm5hZi53bmQscG9pbnRzOkIubmFmLnBvaW50cy5tYXAoRil9LGRvdWJsZXM6Qi5kb3VibGVzJiZ7c3RlcDpCLmRvdWJsZXMuc3RlcCxwb2ludHM6Qi5kb3VibGVzLnBvaW50cy5tYXAoRil9''@;'; put 'put ''fX1yZXR1cm4gRX0sQS5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0sbyhNLEkuQmFzZVBvaW50KSxULnByb3RvdHlw''@;'; put 'put ''ZS5qcG9pbnQ9ZnVuY3Rpb24oRCxFLEIpe3JldHVybiBuZXcgTSh0aGlzLEQsRSxCKX0sTS5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgRD10aGlzLnoucmVkSW52bSgpLEU9RC5yZWRT''@;'; put 'put ''cXIoKSxCPXRoaXMueC5yZWRNdWwoRSksRj10aGlzLnkucmVkTXVsKEUpLnJlZE11bChEKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChCLEYpfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnop''@;'; put 'put ''fSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oRCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIEQ7aWYoRC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEU9RC56LnJlZFNxcigpLEI9dGhpcy56LnJlZFNxcigpLEY9dGhpcy54LnJlZE11bChFKSxOPUQueC5yZWRNdWwoQiksSD10''@;'; put 'put ''aGlzLnkucmVkTXVsKEUucmVkTXVsKEQueikpLHo9RC55LnJlZE11bChCLnJlZE11bCh0aGlzLnopKSxaPUYucmVkU3ViKE4pLFU9SC5yZWRTdWIoeik7aWYoMD09PVouY21wbigwKSlyZXR1cm4gMCE9PVUuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5k''@;'; put 'put ''YmwoKTt2YXIgSz1aLnJlZFNxcigpLFg9Sy5yZWRNdWwoWiksbmU9Ri5yZWRNdWwoSyksc2U9VS5yZWRTcXIoKS5yZWRJQWRkKFgpLnJlZElTdWIobmUpLnJlZElTdWIobmUpLGhlPVUucmVkTXVsKG5lLnJlZElTdWIoc2UpKS5yZWRJU3ViKEgucmVkTXVsKFgpKSxfZT10aGlzLnoucmVkTXVs''@;'; put 'put ''KEQueikucmVkTXVsKFopO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChzZSxoZSxfZSl9LE0ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKEQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBELnRvSigpO2lmKEQuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBFPXRoaXMuei5y''@;'; put 'put ''ZWRTcXIoKSxCPXRoaXMueCxGPUQueC5yZWRNdWwoRSksTj10aGlzLnksSD1ELnkucmVkTXVsKEUpLnJlZE11bCh0aGlzLnopLHo9Qi5yZWRTdWIoRiksWj1OLnJlZFN1YihIKTtpZigwPT09ei5jbXBuKDApKXJldHVybiAwIT09Wi5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVs''@;'; put 'put ''bCxudWxsKTp0aGlzLmRibCgpO3ZhciBVPXoucmVkU3FyKCksSz1VLnJlZE11bCh6KSxYPUIucmVkTXVsKFUpLG5lPVoucmVkU3FyKCkucmVkSUFkZChLKS5yZWRJU3ViKFgpLnJlZElTdWIoWCksc2U9Wi5yZWRNdWwoWC5yZWRJU3ViKG5lKSkucmVkSVN1YihOLnJlZE11bChLKSksaGU9dGhp''@;'; put 'put ''cy56LnJlZE11bCh6KTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobmUsc2UsaGUpfSxNLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEQpe2lmKDA9PT1EKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFEKXJldHVybiB0aGlzLmRibCgpO3ZhciBFO2lm''@;'; put 'put ''KHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgQj10aGlzO2ZvcihFPTA7RTxEO0UrKylCPUIuZGJsKCk7cmV0dXJuIEJ9dmFyIEY9dGhpcy5jdXJ2ZS5hLE49dGhpcy5jdXJ2ZS50aW52LEg9dGhpcy54LHo9dGhpcy55LFo9dGhpcy56LFU9Wi5yZWRTcXIoKS5yZWRT''@;'; put 'put ''cXIoKSxLPXoucmVkQWRkKHopO2ZvcihFPTA7RTxEO0UrKyl7dmFyIFg9SC5yZWRTcXIoKSxuZT1LLnJlZFNxcigpLHNlPW5lLnJlZFNxcigpLGhlPVgucmVkQWRkKFgpLnJlZElBZGQoWCkucmVkSUFkZChGLnJlZE11bChVKSksX2U9SC5yZWRNdWwobmUpLG1lPWhlLnJlZFNxcigpLnJlZElT''@;'; put 'put ''dWIoX2UucmVkQWRkKF9lKSksRmU9X2UucmVkSVN1YihtZSksUj1oZS5yZWRNdWwoRmUpO1I9Ui5yZWRJQWRkKFIpLnJlZElTdWIoc2UpO3ZhciBzPUsucmVkTXVsKFopO0UrMTxEJiYoVT1VLnJlZE11bChzZSkpLEg9bWUsWj1zLEs9Un1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoSCxLLnJl''@;'; put 'put ''ZE11bChOKSxaKX0sTS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sTS5wcm90b3R5cGUuX3pl''@;'; put 'put ''cm9EYmw9ZnVuY3Rpb24oKXt2YXIgRCxFLEI7aWYodGhpcy56T25lKXt2YXIgRj10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksSD1OLnJlZFNxcigpLHo9dGhpcy54LnJlZEFkZChOKS5yZWRTcXIoKS5yZWRJU3ViKEYpLnJlZElTdWIoSCk7ej16LnJlZElBZGQoeik7dmFyIFo9''@;'; put 'put ''Ri5yZWRBZGQoRikucmVkSUFkZChGKSxVPVoucmVkU3FyKCkucmVkSVN1Yih6KS5yZWRJU3ViKHopLEs9SC5yZWRJQWRkKEgpO0s9KEs9Sy5yZWRJQWRkKEspKS5yZWRJQWRkKEspLEQ9VSxFPVoucmVkTXVsKHoucmVkSVN1YihVKSkucmVkSVN1YihLKSxCPXRoaXMueS5yZWRBZGQodGhpcy55''@;'; put 'put ''KX1lbHNle3ZhciBYPXRoaXMueC5yZWRTcXIoKSxuZT10aGlzLnkucmVkU3FyKCksc2U9bmUucmVkU3FyKCksaGU9dGhpcy54LnJlZEFkZChuZSkucmVkU3FyKCkucmVkSVN1YihYKS5yZWRJU3ViKHNlKTtoZT1oZS5yZWRJQWRkKGhlKTt2YXIgX2U9WC5yZWRBZGQoWCkucmVkSUFkZChYKSxt''@;'; put 'put ''ZT1fZS5yZWRTcXIoKSxGZT1zZS5yZWRJQWRkKHNlKTtGZT0oRmU9RmUucmVkSUFkZChGZSkpLnJlZElBZGQoRmUpLEQ9bWUucmVkSVN1YihoZSkucmVkSVN1YihoZSksRT1fZS5yZWRNdWwoaGUucmVkSVN1YihEKSkucmVkSVN1YihGZSksQj0oQj10aGlzLnkucmVkTXVsKHRoaXMueikpLnJl''@;'; put 'put ''ZElBZGQoQil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEQsRSxCKX0sTS5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIEQsRSxCO2lmKHRoaXMuek9uZSl7dmFyIEY9dGhpcy54LnJlZFNxcigpLE49dGhpcy55LnJlZFNxcigpLEg9Ti5yZWRTcXIoKSx6PXRoaXMueC5yZWRB''@;'; put 'put ''ZGQoTikucmVkU3FyKCkucmVkSVN1YihGKS5yZWRJU3ViKEgpO3o9ei5yZWRJQWRkKHopO3ZhciBaPUYucmVkQWRkKEYpLnJlZElBZGQoRikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLFU9Wi5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoeik7RD1VO3ZhciBLPUgucmVkSUFkZChIKTtLPShL''@;'; put 'put ''PUsucmVkSUFkZChLKSkucmVkSUFkZChLKSxFPVoucmVkTXVsKHoucmVkSVN1YihVKSkucmVkSVN1YihLKSxCPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBYPXRoaXMuei5yZWRTcXIoKSxuZT10aGlzLnkucmVkU3FyKCksc2U9dGhpcy54LnJlZE11bChuZSksaGU9dGhpcy54LnJl''@;'; put 'put ''ZFN1YihYKS5yZWRNdWwodGhpcy54LnJlZEFkZChYKSk7aGU9aGUucmVkQWRkKGhlKS5yZWRJQWRkKGhlKTt2YXIgX2U9c2UucmVkSUFkZChzZSksbWU9KF9lPV9lLnJlZElBZGQoX2UpKS5yZWRBZGQoX2UpO0Q9aGUucmVkU3FyKCkucmVkSVN1YihtZSksQj10aGlzLnkucmVkQWRkKHRoaXMu''@;'; put 'put ''eikucmVkU3FyKCkucmVkSVN1YihuZSkucmVkSVN1YihYKTt2YXIgRmU9bmUucmVkU3FyKCk7RmU9KEZlPShGZT1GZS5yZWRJQWRkKEZlKSkucmVkSUFkZChGZSkpLnJlZElBZGQoRmUpLEU9aGUucmVkTXVsKF9lLnJlZElTdWIoRCkpLnJlZElTdWIoRmUpfXJldHVybiB0aGlzLmN1cnZlLmpw''@;'; put 'put ''b2ludChELEUsQil9LE0ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLmN1cnZlLmEsRT10aGlzLngsQj10aGlzLnksRj10aGlzLnosTj1GLnJlZFNxcigpLnJlZFNxcigpLEg9RS5yZWRTcXIoKSx6PUIucmVkU3FyKCksWj1ILnJlZEFkZChIKS5yZWRJQWRkKEgpLnJlZElB''@;'; put 'put ''ZGQoRC5yZWRNdWwoTikpLFU9RS5yZWRBZGQoRSksSz0oVT1VLnJlZElBZGQoVSkpLnJlZE11bCh6KSxYPVoucmVkU3FyKCkucmVkSVN1YihLLnJlZEFkZChLKSksbmU9Sy5yZWRJU3ViKFgpLHNlPXoucmVkU3FyKCk7c2U9KHNlPShzZT1zZS5yZWRJQWRkKHNlKSkucmVkSUFkZChzZSkpLnJl''@;'; put 'put ''ZElBZGQoc2UpO3ZhciBoZT1aLnJlZE11bChuZSkucmVkSVN1YihzZSksX2U9Qi5yZWRBZGQoQikucmVkTXVsKEYpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChYLGhlLF9lKX0sTS5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRi''@;'; put 'put ''bCgpLmFkZCh0aGlzKTt2YXIgRD10aGlzLngucmVkU3FyKCksRT10aGlzLnkucmVkU3FyKCksQj10aGlzLnoucmVkU3FyKCksRj1FLnJlZFNxcigpLE49RC5yZWRBZGQoRCkucmVkSUFkZChEKSxIPU4ucmVkU3FyKCksej10aGlzLngucmVkQWRkKEUpLnJlZFNxcigpLnJlZElTdWIoRCkucmVk''@;'; put 'put ''SVN1YihGKSxaPSh6PSh6PSh6PXoucmVkSUFkZCh6KSkucmVkQWRkKHopLnJlZElBZGQoeikpLnJlZElTdWIoSCkpLnJlZFNxcigpLFU9Ri5yZWRJQWRkKEYpO1U9KFU9KFU9VS5yZWRJQWRkKFUpKS5yZWRJQWRkKFUpKS5yZWRJQWRkKFUpO3ZhciBLPU4ucmVkSUFkZCh6KS5yZWRTcXIoKS5y''@;'; put 'put ''ZWRJU3ViKEgpLnJlZElTdWIoWikucmVkSVN1YihVKSxYPUUucmVkTXVsKEspO1g9KFg9WC5yZWRJQWRkKFgpKS5yZWRJQWRkKFgpO3ZhciBuZT10aGlzLngucmVkTXVsKFopLnJlZElTdWIoWCk7bmU9KG5lPW5lLnJlZElBZGQobmUpKS5yZWRJQWRkKG5lKTt2YXIgc2U9dGhpcy55LnJlZE11''@;'; put 'put ''bChLLnJlZE11bChVLnJlZElTdWIoSykpLnJlZElTdWIoei5yZWRNdWwoWikpKTtzZT0oc2U9KHNlPXNlLnJlZElBZGQoc2UpKS5yZWRJQWRkKHNlKSkucmVkSUFkZChzZSk7dmFyIGhlPXRoaXMuei5yZWRBZGQoeikucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFopO3JldHVybiB0aGlz''@;'; put 'put ''LmN1cnZlLmpwb2ludChuZSxzZSxoZSl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihELEUpe3JldHVybiBEPW5ldyBoKEQsRSksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEQpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihEKXtpZigiYWZmaW5lIj09PUQudHlwZSlyZXR1cm4gdGhpcy5l''@;'; put 'put ''cShELnRvSigpKTtpZih0aGlzPT09RClyZXR1cm4hMDt2YXIgRT10aGlzLnoucmVkU3FyKCksQj1ELnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoQikucmVkSVN1YihELngucmVkTXVsKEUpKS5jbXBuKDApKXJldHVybiExO3ZhciBGPUUucmVkTXVsKHRoaXMueiksTj1CLnJlZE11''@;'; put 'put ''bChELnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChOKS5yZWRJU3ViKEQueS5yZWRNdWwoRikpLmNtcG4oMCl9LE0ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihEKXt2YXIgRT10aGlzLnoucmVkU3FyKCksQj1ELnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoRSk7aWYoMD09PXRo''@;'; put 'put ''aXMueC5jbXAoQikpcmV0dXJuITA7Zm9yKHZhciBGPUQuY2xvbmUoKSxOPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoRSk7Oyl7aWYoRi5pYWRkKHRoaXMuY3VydmUubiksRi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihCLnJlZElBZGQoTiksMD09PXRoaXMueC5jbXAoQikpcmV0''@;'; put 'put ''dXJuITB9fSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhp''@;'; put 'put ''cy56LnRvU3RyaW5nKDE2LDIpKyI+In0sTS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBNLFM9aixoPWQoMzcxNSksbz1kKDgyNTQpLGY9ZCg5NTMpLmFzc2VydDtmdW5j''@;'; put 'put ''dGlvbiBUKE8pe3RoaXMuY3VydmU9InNob3J0Ij09PU8udHlwZT9uZXcgby5zaG9ydChPKToiZWR3YXJkcyI9PT1PLnR5cGU/bmV3IG8uZWR3YXJkcyhPKTpuZXcgby5tb250KE8pLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9Ty5oYXNoLGYodGhp''@;'; put 'put ''cy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSxmKHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gQShPLEQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLE8se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3ZhciBFPW5ldyBUKEQpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoUyxPLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpFfSksRX19KX1TLlByZXNldEN1cnZlPVQsQSgicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoi''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2''@;'; put 'put ''YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6aC5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2''@;'; put 'put ''MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksQSgicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5''@;'; put 'put ''NDUgNWM1YzJhM2QiLGhhc2g6aC5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2Uz''@;'; put 'put ''NCJdfSksQSgicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjlj''@;'; put 'put ''YWMyIGZjNjMyNTUxIixoYXNoOmguc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVl''@;'; put 'put ''Y2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEEoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZm''@;'; put 'put ''ZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZl''@;'; put 'put ''IGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2''@;'; put 'put ''YSBjY2M1Mjk3MyIsaGFzaDpoLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZm''@;'; put 'put ''IDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxBKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRh''@;'; put 'put ''NzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6aC5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0''@;'; put 'put ''NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0''@;'; put 'put ''OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksQSgiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOmguc2hhMjU2LGdSZWQ6ITEs''@;'; put 'put ''ZzpbIjkiXX0pLEEoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3''@;'; put 'put ''OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpoLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUy''@;'; put 'put ''MzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e009ZCgxMDM3KX1jYXRjaHtNPXZvaWQgMH1BKCJzZWNwMjU2azEiLHt0eXBlOiJz''@;'; put 'put ''aG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBi''@;'; put 'put ''ZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpoLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3''@;'; put 'put ''OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZj''@;'; put 'put ''OTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixNXX0p''@;'; put 'put ''fSw3OTU0Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoMzc4NSksaD1kKDIxNTYpLG89ZCg5NTMpLEk9ZCg1NDI3KSxmPWQoOTkzMSksVD1vLmFzc2VydCxBPWQoMTI1MSksTT1kKDYxMSk7ZnVuY3Rpb24gTyhEKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8o''@;'; put 'put ''RCk7InN0cmluZyI9PXR5cGVvZiBEJiYoVChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSSxEKSwiVW5rbm93biBjdXJ2ZSAiK0QpLEQ9SVtEXSksRCBpbnN0YW5jZW9mIEkuUHJlc2V0Q3VydmUmJihEPXtjdXJ2ZTpEfSksdGhpcy5jdXJ2ZT1ELmN1cnZlLmN1cnZlLHRo''@;'; put 'put ''aXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9RC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKEQuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9RC5oYXNofHxELmN1cnZlLmhhc2h9dGUuZXhwb3J0cz1P''@;'; put 'put ''LE8ucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBBKHRoaXMsRSl9LE8ucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKEUsQil7cmV0dXJuIEEuZnJvbVByaXZhdGUodGhpcyxFLEIpfSxPLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEUs''@;'; put 'put ''Qil7cmV0dXJuIEEuZnJvbVB1YmxpYyh0aGlzLEUsQil9LE8ucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oRSl7RXx8KEU9e30pO2Zvcih2YXIgQj1uZXcgaCh7aGFzaDp0aGlzLmhhc2gscGVyczpFLnBlcnMscGVyc0VuYzpFLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OkUuZW50cm9w''@;'; put 'put ''eXx8Zih0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkUuZW50cm9weSYmRS5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLEY9dGhpcy5uLmJ5dGVMZW5ndGgoKSxOPXRoaXMubi5zdWIobmV3IFMoMikpOzspe3ZhciBIPW5ldyBTKEIuZ2VuZXJh''@;'; put 'put ''dGUoRikpO2lmKCEoSC5jbXAoTik+MCkpcmV0dXJuIEguaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShIKX19LE8ucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihFLEIsRil7dmFyIE47aWYoUy5pc0JOKEUpfHwibnVtYmVyIj09dHlwZW9mIEUpTj0oRT1uZXcgUyhFLDE2KSku''@;'; put 'put ''Ynl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBFKU49RS5sZW5ndGgsRT1uZXcgUyhFLDE2KTtlbHNle3ZhciBIPUUudG9TdHJpbmcoKTtOPUgubGVuZ3RoKzE+Pj4xLEU9bmV3IFMoSCwxNil9Im51bWJlciIhPXR5cGVvZiBGJiYoRj04Kk4pO3ZhciB6PUYtdGhpcy5uLmJp''@;'; put 'put ''dExlbmd0aCgpO3JldHVybiB6PjAmJihFPUUudXNocm4oeikpLCFCJiZFLmNtcCh0aGlzLm4pPj0wP0Uuc3ViKHRoaXMubik6RX0sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihFLEIsRixOKXtpZigib2JqZWN0Ij09dHlwZW9mIEYmJihOPUYsRj1udWxsKSxOfHwoTj17fSksInN0cmluZyIh''@;'; put 'put ''PXR5cGVvZiBFJiYibnVtYmVyIiE9dHlwZW9mIEUmJiFTLmlzQk4oRSkpe1QoIm9iamVjdCI9PXR5cGVvZiBFJiZFJiYibnVtYmVyIj09dHlwZW9mIEUubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3IgYSBCTiBpbnN0YW5jZSIp''@;'; put 'put ''LFQoRS5sZW5ndGg+Pj4wPT09RS5sZW5ndGgpO2Zvcih2YXIgSD0wO0g8RS5sZW5ndGg7SCsrKVQoKDI1NSZFW0hdKT09PUVbSF0pfUI9dGhpcy5rZXlGcm9tUHJpdmF0ZShCLEYpLEU9dGhpcy5fdHJ1bmNhdGVUb04oRSwhMSxOLm1zZ0JpdExlbmd0aCksVCghRS5pc05lZygpLCJDYW4gbm90''@;'; put 'put ''IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHo9dGhpcy5uLmJ5dGVMZW5ndGgoKSxaPUIuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIix6KSxVPUUudG9BcnJheSgiYmUiLHopO1QobmV3IFMoVSkuZXEoRSksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZhciBLPW5ldyBoKHto''@;'; put 'put ''YXNoOnRoaXMuaGFzaCxlbnRyb3B5Olosbm9uY2U6VSxwZXJzOk4ucGVycyxwZXJzRW5jOk4ucGVyc0VuY3x8InV0ZjgifSksWD10aGlzLm4uc3ViKG5ldyBTKDEpKSxuZT0wOztuZSsrKXt2YXIgc2U9Ti5rP04uayhuZSk6bmV3IFMoSy5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7''@;'; put 'put ''aWYoISgoc2U9dGhpcy5fdHJ1bmNhdGVUb04oc2UsITApKS5jbXBuKDEpPD0wfHxzZS5jbXAoWCk+PTApKXt2YXIgaGU9dGhpcy5nLm11bChzZSk7aWYoIWhlLmlzSW5maW5pdHkoKSl7dmFyIF9lPWhlLmdldFgoKSxtZT1fZS51bW9kKHRoaXMubik7aWYoMCE9PW1lLmNtcG4oMCkpe3ZhciBG''@;'; put 'put ''ZT1zZS5pbnZtKHRoaXMubikubXVsKG1lLm11bChCLmdldFByaXZhdGUoKSkuaWFkZChFKSk7aWYoMCE9PShGZT1GZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBSPShoZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09X2UuY21wKG1lKT8yOjApO3JldHVybiBOLmNhbm9uaWNhbCYmRmUu''@;'; put 'put ''Y21wKHRoaXMubmgpPjAmJihGZT10aGlzLm4uc3ViKEZlKSxSXj0xKSxuZXcgTSh7cjptZSxzOkZlLHJlY292ZXJ5UGFyYW06Un0pfX19fX19LE8ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihFLEIsRixOLEgpe0h8fChIPXt9KSxFPXRoaXMuX3RydW5jYXRlVG9OKEUsITEsSC5tc2dCaXRM''@;'; put 'put ''ZW5ndGgpLEY9dGhpcy5rZXlGcm9tUHVibGljKEYsTik7dmFyIHo9KEI9bmV3IE0oQiwiaGV4IikpLnIsWj1CLnM7aWYoei5jbXBuKDEpPDB8fHouY21wKHRoaXMubik+PTB8fFouY21wbigxKTwwfHxaLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBuZSxVPVouaW52bSh0aGlzLm4pLEs9''@;'; put 'put ''VS5tdWwoRSkudW1vZCh0aGlzLm4pLFg9VS5tdWwoeikudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShuZT10aGlzLmcuam11bEFkZChLLEYuZ2V0UHVibGljKCksWCkpLmlzSW5maW5pdHkoKSYmbmUuZXFYVG9QKHopOiEobmU9dGhpcy5nLm11bEFkZChL''@;'; put 'put ''LEYuZ2V0UHVibGljKCksWCkpLmlzSW5maW5pdHkoKSYmMD09PW5lLmdldFgoKS51bW9kKHRoaXMubikuY21wKHopfSxPLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKEQsRSxCLEYpe1QoKDMmQik9PT1CLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRz''@;'; put 'put ''IiksRT1uZXcgTShFLEYpO3ZhciBOPXRoaXMubixIPW5ldyBTKEQpLHo9RS5yLFo9RS5zLFU9MSZCLEs9Qj4+MTtpZih6LmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmSyl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0''@;'; put 'put ''ZSIpO3o9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKEs/ei5hZGQodGhpcy5jdXJ2ZS5uKTp6LFUpO3ZhciBYPUUuci5pbnZtKE4pLG5lPU4uc3ViKEgpLm11bChYKS51bW9kKE4pLHNlPVoubXVsKFgpLnVtb2QoTik7cmV0dXJuIHRoaXMuZy5tdWxBZGQobmUseixzZSl9LE8ucHJvdG90eXBlLmdl''@;'; put 'put ''dEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oRCxFLEIsRil7aWYobnVsbCE9PShFPW5ldyBNKEUsRikpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIEUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIE49MDtOPDQ7TisrKXt2YXIgSDt0cnl7SD10aGlzLnJlY292ZXJQdWJLZXkoRCxFLE4pfWNhdGNoe2Nv''@;'; put 'put ''bnRpbnVlfWlmKEguZXEoQikpcmV0dXJuIE59dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDEyNTE6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCgzNzg1KSxvPWQoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gSShmLFQpe3RoaXMu''@;'; put 'put ''ZWM9Zix0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFQucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShULnByaXYsVC5wcml2RW5jKSxULnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFQucHViLFQucHViRW5jKX10ZS5leHBvcnRzPUksSS5mcm9tUHVibGljPWZ1bmN0aW9uKFQsQSxNKXty''@;'; put 'put ''ZXR1cm4gQSBpbnN0YW5jZW9mIEk/QTpuZXcgSShULHtwdWI6QSxwdWJFbmM6TX0pfSxJLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFQsQSxNKXtyZXR1cm4gQSBpbnN0YW5jZW9mIEk/QTpuZXcgSShULHtwcml2OkEscHJpdkVuYzpNfSl9LEkucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFQ9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gVC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlQudmFsaWRhdGUoKT9ULm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0''@;'; put 'put ''OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEkucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihULEEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgVCYmKEE9VCxUPW51bGwpLHRoaXMucHVi''@;'; put 'put ''fHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxBP3RoaXMucHViLmVuY29kZShBLFQpOnRoaXMucHVifSxJLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFQpe3JldHVybiJoZXgiPT09VD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxJLnByb3Rv''@;'; put 'put ''dHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihULEEpe3RoaXMucHJpdj1uZXcgUyhULEF8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sSS5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihULEEpe2lmKFQueHx8VC55KXJldHVybiJtb250''@;'; put 'put ''Ij09PXRoaXMuZWMuY3VydmUudHlwZT9vKFQueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmbyhULngmJlQueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhp''@;'; put 'put ''cy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChULngsVC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChULEEpfSxJLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oVCl7cmV0dXJuIFQudmFsaWRhdGUoKXx8byhULnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFs''@;'; put 'put ''aWRhdGVkIiksVC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEkucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oVCxBLE0pe3JldHVybiB0aGlzLmVjLnNpZ24oVCx0aGlzLEEsTSl9LEkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihULEEsTSl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFQsQSx0aGlz''@;'; put 'put ''LHZvaWQgMCxNKX0sSS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDYxMToodGUsaixkKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgUz1kKDM3ODUpLGg9ZCg5NTMpLG89aC5hc3NlcnQ7ZnVuY3Rpb24gSShPLEQpe2lmKE8gaW5zdGFuY2VvZiBJKXJldHVybiBPO3RoaXMuX2ltcG9ydERFUihPLEQpfHwobyhPLnImJk8ucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBTKE8u''@;'; put 'put ''ciwxNiksdGhpcy5zPW5ldyBTKE8ucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PU8ucmVjb3ZlcnlQYXJhbT9udWxsOk8ucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gZigpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBUKE8sRCl7dmFyIEU9T1tELnBsYWNlKytdO2lmKCEoMTI4JkUp''@;'; put 'put ''KXJldHVybiBFO3ZhciBCPTE1JkU7aWYoMD09PUJ8fEI+NHx8MD09PU9bRC5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBGPTAsTj0wLEg9RC5wbGFjZTtOPEI7TisrLEgrKylGPDw9OCxGfD1PW0hdLEY+Pj49MDtyZXR1cm4hKEY8PTEyNykmJihELnBsYWNlPUgsRil9ZnVuY3Rpb24gQShPKXtm''@;'; put 'put ''b3IodmFyIEQ9MCxFPU8ubGVuZ3RoLTE7IU9bRF0mJiEoMTI4Jk9bRCsxXSkmJkQ8RTspRCsrO3JldHVybiAwPT09RD9POk8uc2xpY2UoRCl9ZnVuY3Rpb24gTShPLEQpe2lmKEQ8MTI4KU8ucHVzaChEKTtlbHNle3ZhciBFPTErKE1hdGgubG9nKEQpL01hdGguTE4yPj4+Myk7Zm9yKE8ucHVz''@;'; put 'put ''aCgxMjh8RSk7LS1FOylPLnB1c2goRD4+PihFPDwzKSYyNTUpO08ucHVzaChEKX19dGUuZXhwb3J0cz1JLEkucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oRCxFKXtEPWgudG9BcnJheShELEUpO3ZhciBCPW5ldyBmO2lmKDQ4IT09RFtCLnBsYWNlKytdKXJldHVybiExO3ZhciBGPVQo''@;'; put 'put ''RCxCKTtpZighMT09PUZ8fEYrQi5wbGFjZSE9PUQubGVuZ3RofHwyIT09RFtCLnBsYWNlKytdKXJldHVybiExO3ZhciBOPVQoRCxCKTtpZighMT09PU58fDEyOCZEW0IucGxhY2VdKXJldHVybiExO3ZhciBIPUQuc2xpY2UoQi5wbGFjZSxOK0IucGxhY2UpO2lmKEIucGxhY2UrPU4sMiE9PURb''@;'; put 'put ''Qi5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgej1UKEQsQik7aWYoITE9PT16fHxELmxlbmd0aCE9PXorQi5wbGFjZXx8MTI4JkRbQi5wbGFjZV0pcmV0dXJuITE7dmFyIFo9RC5zbGljZShCLnBsYWNlLHorQi5wbGFjZSk7aWYoMD09PUhbMF0pe2lmKCEoMTI4JkhbMV0pKXJldHVybiExO0g9SC5z''@;'; put 'put ''bGljZSgxKX1pZigwPT09WlswXSl7aWYoISgxMjgmWlsxXSkpcmV0dXJuITE7Wj1aLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IFMoSCksdGhpcy5zPW5ldyBTKFopLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxJLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihEKXt2YXIgRT10aGlz''@;'; put 'put ''LnIudG9BcnJheSgpLEI9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JkVbMF0mJihFPVswXS5jb25jYXQoRSkpLDEyOCZCWzBdJiYoQj1bMF0uY29uY2F0KEIpKSxFPUEoRSksQj1BKEIpOyEoQlswXXx8MTI4JkJbMV0pOylCPUIuc2xpY2UoMSk7dmFyIEY9WzJdO00oRixFLmxlbmd0aCksKEY9''@;'; put 'put ''Ri5jb25jYXQoRSkpLnB1c2goMiksTShGLEIubGVuZ3RoKTt2YXIgTj1GLmNvbmNhdChCKSxIPVs0OF07cmV0dXJuIE0oSCxOLmxlbmd0aCksSD1ILmNvbmNhdChOKSxoLmVuY29kZShILEQpfX0sNTk4MDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM3MTUpLGg9ZCg1NDI3KSxv''@;'; put 'put ''PWQoOTUzKSxJPW8uYXNzZXJ0LGY9by5wYXJzZUJ5dGVzLFQ9ZCg5MDg3KSxBPWQoMzYyMik7ZnVuY3Rpb24gTShPKXtpZihJKCJlZDI1NTE5Ij09PU8sIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBNKSlyZXR1cm4gbmV3IE0oTyk7dGhpcy5j''@;'; put 'put ''dXJ2ZT1PPWhbT10uY3VydmUsdGhpcy5nPU8uZyx0aGlzLmcucHJlY29tcHV0ZShPLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPU8ucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbChPLm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPVMu''@;'; put 'put ''c2hhNTEyfXRlLmV4cG9ydHM9TSxNLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEQsRSl7RD1mKEQpO3ZhciBCPXRoaXMua2V5RnJvbVNlY3JldChFKSxGPXRoaXMuaGFzaEludChCLm1lc3NhZ2VQcmVmaXgoKSxEKSxOPXRoaXMuZy5tdWwoRiksSD10aGlzLmVuY29kZVBvaW50KE4pLHo9dGhp''@;'; put 'put ''cy5oYXNoSW50KEgsQi5wdWJCeXRlcygpLEQpLm11bChCLnByaXYoKSksWj1GLmFkZCh6KS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpOLFM6WixSZW5jb2RlZDpIfSl9LE0ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihELEUsQil7aWYoRD1mKEQp''@;'; put 'put ''LChFPXRoaXMubWFrZVNpZ25hdHVyZShFKSkuUygpLmd0ZShFLmVkZHNhLmN1cnZlLm4pfHxFLlMoKS5pc05lZygpKXJldHVybiExO3ZhciBGPXRoaXMua2V5RnJvbVB1YmxpYyhCKSxOPXRoaXMuaGFzaEludChFLlJlbmNvZGVkKCksRi5wdWJCeXRlcygpLEQpLEg9dGhpcy5nLm11bChFLlMo''@;'; put 'put ''KSk7cmV0dXJuIEUuUigpLmFkZChGLnB1YigpLm11bChOKSkuZXEoSCl9LE0ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIEQ9dGhpcy5oYXNoKCksRT0wO0U8YXJndW1lbnRzLmxlbmd0aDtFKyspRC51cGRhdGUoYXJndW1lbnRzW0VdKTtyZXR1cm4gby5pbnRGcm9tTEUo''@;'; put 'put ''RC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxNLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEQpe3JldHVybiBULmZyb21QdWJsaWModGhpcyxEKX0sTS5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihEKXtyZXR1cm4gVC5mcm9tU2VjcmV0KHRoaXMsRCl9''@;'; put 'put ''LE0ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBBP0Q6bmV3IEEodGhpcyxEKX0sTS5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oRCl7dmFyIEU9RC5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3Jl''@;'; put 'put ''dHVybiBFW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PUQuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsRX0sTS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oRCl7dmFyIEU9KEQ9by5wYXJzZUJ5dGVzKEQpKS5sZW5ndGgtMSxCPUQuc2xpY2UoMCxFKS5jb25jYXQoLTEyOSZEW0VdKSxGPSEh''@;'; put 'put ''KDEyOCZEW0VdKSxOPW8uaW50RnJvbUxFKEIpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoTixGKX0sTS5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKEQpe3JldHVybiBELnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sTS5wcm90b3R5cGUuZGVjb2RlSW50PWZ1''@;'; put 'put ''bmN0aW9uKEQpe3JldHVybiBvLmludEZyb21MRShEKX0sTS5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihEKXtyZXR1cm4gRCBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDkwODc6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg5NTMpLGg9Uy5hc3NlcnQsbz1TLnBhcnNl''@;'; put 'put ''Qnl0ZXMsST1TLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIGYoVCxBKXt0aGlzLmVkZHNhPVQsdGhpcy5fc2VjcmV0PW8oQS5zZWNyZXQpLFQuaXNQb2ludChBLnB1Yik/dGhpcy5fcHViPUEucHViOnRoaXMuX3B1YkJ5dGVzPW8oQS5wdWIpfWYuZnJvbVB1YmxpYz1mdW5jdGlvbihBLE0pe3Jl''@;'; put 'put ''dHVybiBNIGluc3RhbmNlb2YgZj9NOm5ldyBmKEEse3B1YjpNfSl9LGYuZnJvbVNlY3JldD1mdW5jdGlvbihBLE0pe3JldHVybiBNIGluc3RhbmNlb2YgZj9NOm5ldyBmKEEse3NlY3JldDpNfSl9LGYucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LEko''@;'; put 'put ''ZiwicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxJKGYsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11''@;'; put 'put ''bCh0aGlzLnByaXYoKSl9KSxJKGYsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgQT10aGlzLmVkZHNhLE09dGhpcy5oYXNoKCksTz1BLmVuY29kaW5nTGVuZ3RoLTEsRD1NLnNsaWNlKDAsQS5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIERbMF0mPTI0OCxEW09dJj0xMjcsRFtPXXw9NjQsRH0p''@;'; put 'put ''LEkoZiwicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxJKGYsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLEkoZiwibWVzc2FnZVBy''@;'; put 'put ''ZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxmLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEEpe3JldHVybiBoKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24o''@;'; put 'put ''QSx0aGlzKX0sZi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEEsTSl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KEEsTSx0aGlzKX0sZi5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKEEpe3JldHVybiBoKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLFMuZW5j''@;'; put 'put ''b2RlKHRoaXMuc2VjcmV0KCksQSl9LGYucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihBKXtyZXR1cm4gUy5lbmNvZGUodGhpcy5wdWJCeXRlcygpLEEpfSx0ZS5leHBvcnRzPWZ9LDM2MjI6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCgzNzg1KSxoPWQoOTUzKSxvPWguYXNz''@;'; put 'put ''ZXJ0LEk9aC5jYWNoZWRQcm9wZXJ0eSxmPWgucGFyc2VCeXRlcztmdW5jdGlvbiBUKEEsTSl7dGhpcy5lZGRzYT1BLCJvYmplY3QiIT10eXBlb2YgTSYmKE09ZihNKSksQXJyYXkuaXNBcnJheShNKSYmKG8oTS5sZW5ndGg9PT0yKkEuZW5jb2RpbmdMZW5ndGgsIlNpZ25hdHVyZSBoYXMgaW52''@;'; put 'put ''YWxpZCBzaXplIiksTT17UjpNLnNsaWNlKDAsQS5lbmNvZGluZ0xlbmd0aCksUzpNLnNsaWNlKEEuZW5jb2RpbmdMZW5ndGgpfSksbyhNLlImJk0uUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksQS5pc1BvaW50KE0uUikmJih0aGlzLl9SPU0uUiksTS5TIGluc3RhbmNlb2YgUyYmKHRo''@;'; put 'put ''aXMuX1M9TS5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KE0uUik/TS5SOk0uUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShNLlMpP00uUzpNLlNlbmNvZGVkfUkoVCwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5j''@;'; put 'put ''b2RlZCgpKX0pLEkoVCwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSksSShULCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxJKFQsIlNlbmNvZGVkIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxULnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sVC5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gaC5l''@;'; put 'put ''bmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LHRlLmV4cG9ydHM9VH0sMTAzNzp0ZT0+e3RlLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZk''@;'; put 'put ''ZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2''@;'; put 'put ''ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVm''@;'; put 'put ''YTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYz''@;'; put 'put ''YzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZh''@;'; put 'put ''NmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5''@;'; put 'put ''YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2''@;'; put 'put ''YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZh''@;'; put 'put ''MDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdi''@;'; put 'put ''ZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3''@;'; put 'put ''NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNk''@;'; put 'put ''YTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMy''@;'; put 'put ''MDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMz''@;'; put 'put ''MjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2''@;'; put 'put ''ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgy''@;'; put 'put ''YTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0''@;'; put 'put ''OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1''@;'; put 'put ''ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1''@;'; put 'put ''ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBh''@;'; put 'put ''ZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUw''@;'; put 'put ''NTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQz''@;'; put 'put ''NWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4''@;'; put 'put ''NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2''@;'; put 'put ''NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYx''@;'; put 'put ''YTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3''@;'; put 'put ''ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1''@;'; put 'put ''ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0''@;'; put 'put ''ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2''@;'; put 'put ''NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNi''@;'; put 'put ''M2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYx''@;'; put 'put ''NmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRj''@;'; put 'put ''ODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNk''@;'; put 'put ''ZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3''@;'; put 'put ''ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFm''@;'; put 'put ''MGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQz''@;'; put 'put ''MmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNh''@;'; put 'put ''YyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYz''@;'; put 'put ''YTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQw''@;'; put 'put ''NDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2Iw''@;'; put 'put ''YjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNm''@;'; put 'put ''N2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4''@;'; put 'put ''MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJj''@;'; put 'put ''ZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVl''@;'; put 'put ''ZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYx''@;'; put 'put ''NjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdj''@;'; put 'put ''NzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3''@;'; put 'put ''ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2''@;'; put 'put ''MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlm''@;'; put 'put ''Y2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5''@;'; put 'put ''MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNj''@;'; put 'put ''MjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3''@;'; put 'put ''NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRi''@;'; put 'put ''YTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBk''@;'; put 'put ''NDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUx''@;'; put 'put ''NjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5''@;'; put 'put ''ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVk''@;'; put 'put ''YjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0''@;'; put 'put ''YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4''@;'; put 'put ''NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDcz''@;'; put 'put ''YTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZi''@;'; put 'put ''NTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVj''@;'; put 'put ''ZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEz''@;'; put 'put ''NDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4''@;'; put 'put ''NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3''@;'; put 'put ''OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0''@;'; put 'put ''ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUz''@;'; put 'put ''MTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJk''@;'; put 'put ''NmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkz''@;'; put 'put ''ZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2''@;'; put 'put ''NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdh''@;'; put 'put ''ZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2''@;'; put 'put ''OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNm''@;'; put 'put ''NDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZj''@;'; put 'put ''OTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3''@;'; put 'put ''Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRh''@;'; put 'put ''ZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUx''@;'; put 'put ''NWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJk''@;'; put 'put ''NmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0''@;'; put 'put ''OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJk''@;'; put 'put ''MTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRj''@;'; put 'put ''Y2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNm''@;'; put 'put ''IiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMw''@;'; put 'put ''Yzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2Fm''@;'; put 'put ''ZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0''@;'; put 'put ''NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5''@;'; put 'put ''NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3''@;'; put 'put ''YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQx''@;'; put 'put ''ZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdl''@;'; put 'put ''Il0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2''@;'; put 'put ''NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQz''@;'; put 'put ''ZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAz''@;'; put 'put ''ZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFl''@;'; put 'put ''NDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQw''@;'; put 'put ''ZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlh''@;'; put 'put ''NzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTli''@;'; put 'put ''MyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMw''@;'; put 'put ''MTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYy''@;'; put 'put ''YTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYw''@;'; put 'put ''ZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1''@;'; put 'put ''OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQx''@;'; put 'put ''MmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1''@;'; put 'put ''ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2Rj''@;'; put 'put ''Il0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0''@;'; put 'put ''MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFl''@;'; put 'put ''NjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0''@;'; put 'put ''OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5''@;'; put 'put ''Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQx''@;'; put 'put ''YTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQz''@;'; put 'put ''ODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIs''@;'; put 'put ''IjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRl''@;'; put 'put ''ZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVl''@;'; put 'put ''OTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2Zl''@;'; put 'put ''YTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJh''@;'; put 'put ''MTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0''@;'; put 'put ''NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRi''@;'; put 'put ''YzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsi''@;'; put 'put ''ZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNl''@;'; put 'put ''MzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1''@;'; put 'put ''Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRl''@;'; put 'put ''NzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQw''@;'; put 'put ''Yjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2Iy''@;'; put 'put ''N2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3''@;'; put 'put ''NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVh''@;'; put 'put ''N2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2''@;'; put 'put ''NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEy''@;'; put 'put ''ZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEy''@;'; put 'put ''ZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5''@;'; put 'put ''NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1''@;'; put 'put ''NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBh''@;'; put 'put ''ZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRm''@;'; put 'put ''ZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4''@;'; put 'put ''MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0''@;'; put 'put ''NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFm''@;'; put 'put ''M2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3''@;'; put 'put ''MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFk''@;'; put 'put ''NTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFj''@;'; put 'put ''YTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNk''@;'; put 'put ''YjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3''@;'; put 'put ''YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2Fm''@;'; put 'put ''YTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIx''@;'; put 'put ''MGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2Yjlm''@;'; put 'put ''MmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRk''@;'; put 'put ''MjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2''@;'; put 'put ''NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNm''@;'; put 'put ''YWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2''@;'; put 'put ''YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlm''@;'; put 'put ''MDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUw''@;'; put 'put ''MTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1''@;'; put 'put ''OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVm''@;'; put 'put ''Y2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1''@;'; put 'put ''N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQx''@;'; put 'put ''YWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJi''@;'; put 'put ''MjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJl''@;'; put 'put ''ZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQx''@;'; put 'put ''NjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFl''@;'; put 'put ''ZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjll''@;'; put 'put ''Yjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUx''@;'; put 'put ''MzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFi''@;'; put 'put ''Mzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LDk1MzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgUz1qLGg9ZCgzNzg1KSxvPWQoOTc0NiksST1kKDQ1MDQpO1MuYXNzZXJ0PW8sUy50b0FycmF5PUkudG9BcnJheSxTLnplcm8yPUkuemVybzIsUy50b0hleD1JLnRvSGV4LFMuZW5jb2RlPUkuZW5jb2RlLFMuZ2V0TkFGPWZ1bmN0aW9uIGYoRCxFLEIpe3ZhciBOLEY9bmV3IEFycmF5KE1h''@;'; put 'put ''dGgubWF4KEQuYml0TGVuZ3RoKCksQikrMSk7Zm9yKE49MDtOPEYubGVuZ3RoO04rPTEpRltOXT0wO3ZhciBIPTE8PEUrMSx6PUQuY2xvbmUoKTtmb3IoTj0wO048Ri5sZW5ndGg7TisrKXt2YXIgWixVPXouYW5kbG4oSC0xKTt6LmlzT2RkKCk/ei5pc3VibihaPVU+KEg+PjEpLTE/KEg+PjEp''@;'; put 'put ''LVU6VSk6Wj0wLEZbTl09Wix6Lml1c2hybigxKX1yZXR1cm4gRn0sUy5nZXRKU0Y9ZnVuY3Rpb24gVChELEUpe3ZhciBCPVtbXSxbXV07RD1ELmNsb25lKCksRT1FLmNsb25lKCk7Zm9yKHZhciBILEY9MCxOPTA7RC5jbXBuKC1GKT4wfHxFLmNtcG4oLU4pPjA7KXt2YXIgVSxLLHo9RC5hbmRs''@;'; put 'put ''bigzKStGJjMsWj1FLmFuZGxuKDMpK04mMzszPT09eiYmKHo9LTEpLDM9PT1aJiYoWj0tMSksVT0xJno/MyE9KEg9RC5hbmRsbig3KStGJjcpJiY1IT09SHx8MiE9PVo/ejotejowLEJbMF0ucHVzaChVKSxLPTEmWj8zIT0oSD1FLmFuZGxuKDcpK04mNykmJjUhPT1IfHwyIT09ej9aOi1aOjAs''@;'; put 'put ''QlsxXS5wdXNoKEspLDIqRj09PVUrMSYmKEY9MS1GKSwyKk49PT1LKzEmJihOPTEtTiksRC5pdXNocm4oMSksRS5pdXNocm4oMSl9cmV0dXJuIEJ9LFMuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gQShELEUsQil7dmFyIEY9Il8iK0U7RC5wcm90b3R5cGVbRV09ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dm9pZCAwIT09dGhpc1tGXT90aGlzW0ZdOnRoaXNbRl09Qi5jYWxsKHRoaXMpfX0sUy5wYXJzZUJ5dGVzPWZ1bmN0aW9uIE0oRCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBEP1MudG9BcnJheShELCJoZXgiKTpEfSxTLmludEZyb21MRT1mdW5jdGlvbiBPKEQpe3JldHVybiBuZXcgaChELCJo''@;'; put 'put ''ZXgiLCJsZSIpfX0sMzc4NTpmdW5jdGlvbih0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKFIscyl7aWYoIVIpdGhyb3cgbmV3IEVycm9yKHN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gSShSLHMpe1Iuc3VwZXJfPXM7dmFyIHU9ZnVuY3Rpb24o''@;'; put 'put ''KXt9O3UucHJvdG90eXBlPXMucHJvdG90eXBlLFIucHJvdG90eXBlPW5ldyB1LFIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVJ9ZnVuY3Rpb24gZihSLHMsdSl7aWYoZi5pc0JOKFIpKXJldHVybiBSO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJl''@;'; put 'put ''ZD1udWxsLG51bGwhPT1SJiYoKCJsZSI9PT1zfHwiYmUiPT09cykmJih1PXMscz0xMCksdGhpcy5faW5pdChSfHwwLHN8fDEwLHV8fCJiZSIpKX12YXIgVDsib2JqZWN0Ij09dHlwZW9mIFM/Uy5leHBvcnRzPWY6aC5CTj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVvZiB3aW5k''@;'; put 'put ''b3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDU1NjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gQShSLHMpe3ZhciB1PVIuY2hhckNvZGVBdChzKTtyZXR1cm4gdT49NjUmJnU8PTcwP3UtNTU6dT49OTcmJnU8PTEwMj91LTg3OnUtNDgmMTV9ZnVuY3Rp''@;'; put 'put ''b24gTShSLHMsdSl7dmFyIHY9QShSLHUpO3JldHVybiB1LTE+PXMmJih2fD1BKFIsdS0xKTw8NCksdn1mdW5jdGlvbiBPKFIscyx1LHYpe2Zvcih2YXIgcD0wLF89TWF0aC5taW4oUi5sZW5ndGgsdSksaz1zO2s8XztrKyspe3ZhciBMPVIuY2hhckNvZGVBdChrKS00ODtwKj12LHArPUw+PTQ5''@;'; put 'put ''P0wtNDkrMTA6TD49MTc/TC0xNysxMDpMfXJldHVybiBwfWYuaXNCTj1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIGZ8fG51bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuY29uc3RydWN0b3Iud29yZFNpemU9PT1mLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHMud29yZHMp''@;'; put 'put ''fSxmLm1heD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmNtcCh1KT4wP3M6dX0sZi5taW49ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk8MD9zOnV9LGYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHMsdSx2KXtpZigibnVtYmVyIj09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXROdW1i''@;'; put 'put ''ZXIocyx1LHYpO2lmKCJvYmplY3QiPT10eXBlb2YgcylyZXR1cm4gdGhpcy5faW5pdEFycmF5KHMsdSx2KTsiaGV4Ij09PXUmJih1PTE2KSxvKHU9PT0oMHx1KSYmdT49MiYmdTw9MzYpO3ZhciBwPTA7Ii0iPT09KHM9cy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihwKyss''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xKSxwPHMubGVuZ3RoJiYoMTY9PT11P3RoaXMuX3BhcnNlSGV4KHMscCx2KToodGhpcy5fcGFyc2VCYXNlKHMsdSxwKSwibGUiPT09diYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHUsdikpKX0sZi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24o''@;'; put 'put ''cyx1LHYpe3M8MCYmKHRoaXMubmVnYXRpdmU9MSxzPS1zKSxzPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzXSx0aGlzLmxlbmd0aD0xKTpzPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6''@;'; put 'put ''KG8oczw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpfSxmLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHMs''@;'; put 'put ''dSx2KXtpZihvKCJudW1iZXIiPT10eXBlb2Ygcy5sZW5ndGgpLHMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFy''@;'; put 'put ''IHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIF8sayxMPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgtMSxfPTA7cD49MDtwLT0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twLTFdPDw4fHNbcC0yXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysx''@;'; put 'put ''XT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7ZWxzZSBpZigibGUiPT09dilmb3IocD0wLF89MDtwPHMubGVuZ3RoO3ArPTMpdGhpcy53b3Jkc1tfXXw9KGs9c1twXXxzW3ArMV08PDh8c1twKzJdPDwxNik8PEwmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPWs+''@;'; put 'put ''Pj4yNi1MJjY3MTA4ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocyx1LHYpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocy5sZW5ndGgtdSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5s''@;'; put 'put ''ZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgTCxfPTAsaz0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTE7cD49dTtwLT0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53''@;'; put 'put ''b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O2Vsc2UgZm9yKHA9KHMubGVuZ3RoLXUpJTI9PTA/dSsxOnU7cDxzLmxlbmd0aDtwKz0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O3RoaXMu''@;'; put 'put ''c3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihzLHUsdil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHA9MCxfPTE7Xzw9NjcxMDg4NjM7Xyo9dSlwKys7cC0tLF89Xy91fDA7Zm9yKHZhciBrPXMubGVuZ3RoLXYsTD1rJXAseT1NYXRoLm1pbihr''@;'; put 'put ''LGstTCkrdixsPTAsYj12O2I8eTtiKz1wKWw9TyhzLGIsYitwLHUpLHRoaXMuaW11bG4oXyksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCk7aWYoMCE9PUwpe3ZhciBxPTE7Zm9yKGw9TyhzLGIscy5sZW5ndGgsdSksYj0wO2I8TDtiKysp''@;'; put 'put ''cSo9dTt0aGlzLmltdWxuKHEpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihzKXtzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB1PTA7dTx0''@;'; put 'put ''aGlzLmxlbmd0aDt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPXRoaXMubGVuZ3RoLHMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxzLnJlZD10aGlzLnJlZH0sZi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5''@;'; put 'put ''KHMpLHN9LGYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0''@;'; put 'put ''aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sZi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGYucHJvdG90eXBl''@;'; put 'put ''Lmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEQ9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCww''@;'; put 'put ''LDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxCPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3''@;'; put 'put ''MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2''@;'; put 'put ''MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlO3ZhciB2PVIubGVuZ3RoK3MubGVuZ3RofDA7dS5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Ui53b3Jkc1sw''@;'; put 'put ''XSxfPTB8cy53b3Jkc1swXSxrPXAqXyx5PWsvNjcxMDg4NjR8MDt1LndvcmRzWzBdPTY3MTA4ODYzJms7Zm9yKHZhciBsPTE7bDx2O2wrKyl7Zm9yKHZhciBiPXk+Pj4yNixxPTY3MTA4ODYzJnksRz1NYXRoLm1pbihsLHMubGVuZ3RoLTEpLFE9TWF0aC5tYXgoMCxsLVIubGVuZ3RoKzEpO1E8''@;'; put 'put ''PUc7USsrKWIrPShrPShwPTB8Ui53b3Jkc1tsLVF8MF0pKihfPTB8cy53b3Jkc1tRXSkrcSkvNjcxMDg4NjR8MCxxPTY3MTA4ODYzJms7dS53b3Jkc1tsXT0wfHEseT0wfGJ9cmV0dXJuIDAhPT15P3Uud29yZHNbbF09MHx5OnUubGVuZ3RoLS0sdS5zdHJpcCgpfWYucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nPWZ1bmN0aW9uKHMsdSl7dmFyIHY7aWYodT0wfHV8fDEsMTY9PT0ocz1zfHwxMCl8fCJoZXgiPT09cyl7dj0iIjtmb3IodmFyIHA9MCxfPTAsaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgTD10aGlzLndvcmRzW2tdLHk9KDE2Nzc3MjE1JihMPDxwfF8pKS50b1N0cmluZygxNik7Xz1M''@;'; put 'put ''Pj4+MjQtcCYxNjc3NzIxNSwocCs9Mik+PTI2JiYocC09MjYsay0tKSx2PTAhPT1ffHxrIT09dGhpcy5sZW5ndGgtMT9EWzYteS5sZW5ndGhdK3krdjp5K3Z9Zm9yKDAhPT1fJiYodj1fLnRvU3RyaW5nKDE2KSt2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmKHY9Ii0iK3YpLHZ9aWYocz09PSgwfHMpJiZzPj0yJiZzPD0zNil7dmFyIGw9RVtzXSxiPUJbc107dj0iIjt2YXIgcT10aGlzLmNsb25lKCk7Zm9yKHEubmVnYXRpdmU9MDshcS5pc1plcm8oKTspe3ZhciBHPXEubW9kbihiKS50b1N0cmluZyhzKTt2PShxPXEuaWRpdm4oYikpLmlz''@;'; put 'put ''WmVybygpP0crdjpEW2wtRy5sZW5ndGhdK0crdn1mb3IodGhpcy5pc1plcm8oKSYmKHY9IjAiK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAiK3Y7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodj0iLSIrdiksdn1vKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGYucHJv''@;'; put 'put ''dG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9zKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMu''@;'; put 'put ''d29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXM6c30sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxmLnByb3RvdHlw''@;'; put 'put ''ZS50b0J1ZmZlcj1mdW5jdGlvbihzLHUpe3JldHVybiBvKHR5cGVvZiBUPCJ1IiksdGhpcy50b0FycmF5TGlrZShULHMsdSl9LGYucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5TGlr''@;'; put 'put ''ZT1mdW5jdGlvbihzLHUsdil7dmFyIHA9dGhpcy5ieXRlTGVuZ3RoKCksXz12fHxNYXRoLm1heCgxLHApO28ocDw9XywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG8oXz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHks''@;'; put 'put ''bCxrPSJsZSI9PT11LEw9bmV3IHMoXyksYj10aGlzLmNsb25lKCk7aWYoayl7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtsXT15O2Zvcig7bDxfO2wrKylMW2xdPTB9ZWxzZXtmb3IobD0wO2w8Xy1wO2wrKylMW2xdPTA7Zm9yKGw9MDshYi5p''@;'; put 'put ''c1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtfLWwtMV09eX1yZXR1cm4gTH0sZi5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHMpe3JldHVybiAzMi1NYXRoLmNsejMyKHMpfTpmdW5jdGlvbihzKXt2YXIgdT1zLHY9MDtyZXR1cm4gdT49''@;'; put 'put ''NDA5NiYmKHYrPTEzLHU+Pj49MTMpLHU+PTY0JiYodis9Nyx1Pj4+PTcpLHU+PTgmJih2Kz00LHU+Pj49NCksdT49MiYmKHYrPTIsdT4+Pj0yKSx2K3V9LGYucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihzKXtpZigwPT09cylyZXR1cm4gMjY7dmFyIHU9cyx2PTA7cmV0dXJuISg4MTkx''@;'; put 'put ''JnUpJiYodis9MTMsdT4+Pj0xMyksISgxMjcmdSkmJih2Kz03LHU+Pj49NyksISgxNSZ1KSYmKHYrPTQsdT4+Pj00KSwhKDMmdSkmJih2Kz0yLHU+Pj49MiksISgxJnUpJiZ2Kyssdn0sZi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fY291bnRCaXRzKHRoaXMu''@;'; put 'put ''d29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrdX0sZi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcz0wLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl7dmFyIHY9dGhpcy5femVyb0JpdHMo''@;'; put 'put ''dGhpcy53b3Jkc1t1XSk7aWYocys9diwyNiE9PXYpYnJlYWt9cmV0dXJuIHN9LGYucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihzKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnRlc3RuKHMtMSk/dGhpcy5ub3RuKHMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmlz''@;'; put 'put ''TmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxmLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sZi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSks''@;'; put 'put ''dGhpc30sZi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihzKXtmb3IoO3RoaXMubGVuZ3RoPHMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdfHMud29yZHNbdV07cmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHMpfSxmLnByb3RvdHlwZS5vcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihz''@;'; put 'put ''KTpzLmNsb25lKCkuaW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHMpOnMuY2xvbmUoKS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihzKXt2YXIgdTt1PXRoaXMu''@;'; put 'put ''bGVuZ3RoPnMubGVuZ3RoP3M6dGhpcztmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPXRoaXMud29yZHNbdl0mcy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChzKX0sZi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChzKTpzLmNsb25lKCkuaWFuZCh0aGlzKX0sZi5wcm90b3R5cGUudWFuZD1m''@;'; put 'put ''dW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHMpOnMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sZi5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocyl7dmFyIHUsdjt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odT10aGlzLHY9cyk6KHU9cyx2PXRo''@;'; put 'put ''aXMpO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXV52LndvcmRzW3BdO2lmKHRoaXMhPT11KWZvcig7cDx1Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT11LndvcmRzW3BdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LGYucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1eG9yKHMpfSxmLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHMpOnMuY2xv''@;'; put 'put ''bmUoKS5peG9yKHRoaXMpfSxmLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Iocyk6cy5jbG9uZSgpLml1eG9yKHRoaXMpfSxmLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgcyYmcz49MCk7dmFyIHU9MHxNYXRoLmNlaWwocy8yNiksdj1zJTI2O3RoaXMuX2V4cGFuZCh1KSx2PjAmJnUtLTtmb3IodmFyIHA9MDtwPHU7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmfnRoaXMud29yZHNbcF07cmV0dXJuIHY+MCYmKHRoaXMud29yZHNbcF09fnRoaXMud29yZHNb''@;'; put 'put ''cF0mNjcxMDg4NjM+PjI2LXYpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHMpfSxmLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHMsdSl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB2PXMvMjZ8MCxw''@;'; put 'put ''PXMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl09dT90aGlzLndvcmRzW3ZdfDE8PHA6dGhpcy53b3Jkc1t2XSZ+KDE8PHApLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzKXt2YXIgdSx2LHA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9''@;'; put 'put ''PT1zLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdT10aGlzLmlzdWIocyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHMubmVnYXRp''@;'; put 'put ''dmU9MSx1Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh2PXRoaXMscD1zKToodj1zLHA9dGhpcyk7Zm9yKHZhciBfPTAsaz0wO2s8cC5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrKDB8cC53b3Jkc1trXSkrXyksXz11Pj4+MjY7''@;'; put 'put ''Zm9yKDswIT09XyYmazx2Lmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKStfKSxfPXU+Pj4yNjtpZih0aGlzLmxlbmd0aD12Lmxlbmd0aCwwIT09Xyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1fLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih2IT09dGhp''@;'; put 'put ''cylmb3IoO2s8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109di53b3Jkc1trXTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMpe3ZhciB1O3JldHVybiAwIT09cy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHMubmVnYXRpdmU9MCx1PXRoaXMuc3ViKHMpLHMu''@;'; put 'put ''bmVnYXRpdmVePTEsdSk6MD09PXMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsdT1zLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsdSk6dGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocyk6cy5jbG9uZSgpLmlhZGQodGhpcyl9LGYu''@;'; put 'put ''cHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyl7aWYoMCE9PXMubmVnYXRpdmUpe3MubmVnYXRpdmU9MDt2YXIgdT10aGlzLmlhZGQocyk7cmV0dXJuIHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRk''@;'; put 'put ''KHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBwLF8sdj10aGlzLmNtcChzKTtpZigwPT09dilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dj4wPyhwPXRoaXMsXz1zKToocD1zLF89dGhpcyk7Zm9yKHZhciBr''@;'; put 'put ''PTAsTD0wO0w8Xy5sZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSktKDB8Xy53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNbTF09NjcxMDg4NjMmdTtmb3IoOzAhPT1rJiZMPHAubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYz''@;'; put 'put ''JnU7aWYoMD09PWsmJkw8cC5sZW5ndGgmJnAhPT10aGlzKWZvcig7TDxwLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT1wLndvcmRzW0xdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxMKSxwIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxm''@;'; put 'put ''LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHMpfTt2YXIgSD1mdW5jdGlvbihzLHUsdil7dmFyIHksbCxiLHA9cy53b3JkcyxfPXUud29yZHMsaz12LndvcmRzLEw9MCxxPTB8cFswXSxHPTgxOTEmcSxRPXE+Pj4xMyxwZT0wfHBbMV0sUGU9ODE5''@;'; put 'put ''MSZwZSxaZT1wZT4+PjEzLHFlPTB8cFsyXSx2ZT04MTkxJnFlLHVlPXFlPj4+MTMsemU9MHxwWzNdLE9lPTgxOTEmemUsQ2U9emU+Pj4xMyxrZT0wfHBbNF0seGU9ODE5MSZrZSxNZT1rZT4+PjEzLEllPTB8cFs1XSxiZT04MTkxJkllLHdlPUllPj4+MTMscHQ9MHxwWzZdLEtlPTgxOTEmcHQs''@;'; put 'put ''WWU9cHQ+Pj4xMyxxdD0wfHBbN10saHQ9ODE5MSZxdCx2dD1xdD4+PjEzLFl0PTB8cFs4XSx0dD04MTkxJll0LFVlPVl0Pj4+MTMsJGU9MHxwWzldLExlPTgxOTEmJGUsbnQ9JGU+Pj4xMyxybj0wfF9bMF0seHQ9ODE5MSZybixUdD1ybj4+PjEzLHluPTB8X1sxXSxYdD04MTkxJnluLFF0PXlu''@;'; put 'put ''Pj4+MTMsWHI9MHxfWzJdLHNuPTgxOTEmWHIsaXQ9WHI+Pj4xMyxDcj0wfF9bM10sTHQ9ODE5MSZDcix3dD1Dcj4+PjEzLFJuPTB8X1s0XSxRZT04MTkxJlJuLFB0PVJuPj4+MTMsUXI9MHxfWzVdLE5lPTgxOTEmUXIseXQ9UXI+Pj4xMyxycj0wfF9bNl0sYXQ9ODE5MSZycixfdD1ycj4+PjEz''@;'; put 'put ''LHduPTB8X1s3XSwkdD04MTkxJnduLEh0PXduPj4+MTMsc2k9MHxfWzhdLG5uPTgxOTEmc2ksbG49c2k+Pj4xMyxraT0wfF9bOV0sYW49ODE5MSZraSxHdD1raT4+PjEzO3YubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPTE5O3ZhciBlYT0oTCsoeT1NYXRoLmltdWwo''@;'; put 'put ''Ryx4dCkpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoRyxUdCkpK01hdGguaW11bChRLHh0KXwwKSk8PDEzKXwwO0w9KChiPU1hdGguaW11bChRLFR0KSkrKGw+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFBlLHh0KSxsPShsPU1hdGguaW11bChQZSxU''@;'; put 'put ''dCkpK01hdGguaW11bChaZSx4dCl8MCxiPU1hdGguaW11bChaZSxUdCk7dmFyIG1pPShMKyh5PXkrTWF0aC5pbXVsKEcsWHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFF0KXwwKStNYXRoLmltdWwoUSxYdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFF0KXww''@;'; put 'put ''KSsobD4+PjEzKXwwKSsobWk+Pj4yNil8MCxtaSY9NjcxMDg4NjMseT1NYXRoLmltdWwodmUseHQpLGw9KGw9TWF0aC5pbXVsKHZlLFR0KSkrTWF0aC5pbXVsKHVlLHh0KXwwLGI9TWF0aC5pbXVsKHVlLFR0KSx5PXkrTWF0aC5pbXVsKFBlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUXQp''@;'; put 'put ''fDApK01hdGguaW11bChaZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFplLFF0KXwwO3ZhciBmcj0oTCsoeT15K01hdGguaW11bChHLHNuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxpdCl8MCkrTWF0aC5pbXVsKFEsc24pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxp''@;'; put 'put ''dCl8MCkrKGw+Pj4xMyl8MCkrKGZyPj4+MjYpfDAsZnImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE9lLHh0KSxsPShsPU1hdGguaW11bChPZSxUdCkpK01hdGguaW11bChDZSx4dCl8MCxiPU1hdGguaW11bChDZSxUdCkseT15K01hdGguaW11bCh2ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZl''@;'; put 'put ''LFF0KXwwKStNYXRoLmltdWwodWUsWHQpfDAsYj1iK01hdGguaW11bCh1ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKFBlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsaXQpfDApK01hdGguaW11bChaZSxzbil8MCxiPWIrTWF0aC5pbXVsKFplLGl0KXwwO3ZhciAkaT0oTCsoeT15K01hdGguaW11''@;'; put 'put ''bChHLEx0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx3dCl8MCkrTWF0aC5pbXVsKFEsTHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx3dCl8MCkrKGw+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHhlLHh0KSxsPShsPU1h''@;'; put 'put ''dGguaW11bCh4ZSxUdCkpK01hdGguaW11bChNZSx4dCl8MCxiPU1hdGguaW11bChNZSxUdCkseT15K01hdGguaW11bChPZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFF0KXwwKStNYXRoLmltdWwoQ2UsWHQpfDAsYj1iK01hdGguaW11bChDZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHZlLHNu''@;'; put 'put ''KXwwLGw9KGw9bCtNYXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHVlLGl0KXwwLHk9eStNYXRoLmltdWwoUGUsTHQpfDAsbD0obD1sK01hdGguaW11bChQZSx3dCl8MCkrTWF0aC5pbXVsKFplLEx0KXwwLGI9YitNYXRoLmltdWwoWmUsd3QpfDA7''@;'; put 'put ''dmFyIEtpPShMKyh5PXkrTWF0aC5pbXVsKEcsUWUpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFB0KXwwKStNYXRoLmltdWwoUSxRZSl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFB0KXwwKSsobD4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMseT1N''@;'; put 'put ''YXRoLmltdWwoYmUseHQpLGw9KGw9TWF0aC5pbXVsKGJlLFR0KSkrTWF0aC5pbXVsKHdlLHh0KXwwLGI9TWF0aC5pbXVsKHdlLFR0KSx5PXkrTWF0aC5pbXVsKHhlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUXQpfDApK01hdGguaW11bChNZSxYdCl8MCxiPWIrTWF0aC5pbXVsKE1lLFF0''@;'; put 'put ''KXwwLHk9eStNYXRoLmltdWwoT2Usc24pfDAsbD0obD1sK01hdGguaW11bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLGI9YitNYXRoLmltdWwoQ2UsaXQpfDAseT15K01hdGguaW11bCh2ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAs''@;'; put 'put ''Yj1iK01hdGguaW11bCh1ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKFBlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUHQpfDApK01hdGguaW11bChaZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFplLFB0KXwwO3ZhciBWaT0oTCsoeT15K01hdGguaW11bChHLE5lKXwwKXwwKSsoKDgxOTEmKGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoRyx5dCl8MCkrTWF0aC5pbXVsKFEsTmUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx5dCl8MCkrKGw+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEtlLHh0KSxsPShsPU1hdGguaW11bChLZSxUdCkpK01hdGguaW11bChZ''@;'; put 'put ''ZSx4dCl8MCxiPU1hdGguaW11bChZZSxUdCkseT15K01hdGguaW11bChiZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFF0KXwwKStNYXRoLmltdWwod2UsWHQpfDAsYj1iK01hdGguaW11bCh3ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHhlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsaXQp''@;'; put 'put ''fDApK01hdGguaW11bChNZSxzbil8MCxiPWIrTWF0aC5pbXVsKE1lLGl0KXwwLHk9eStNYXRoLmltdWwoT2UsTHQpfDAsbD0obD1sK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKENlLEx0KXwwLGI9YitNYXRoLmltdWwoQ2Usd3QpfDAseT15K01hdGguaW11bCh2ZSxRZSl8MCxsPShs''@;'; put 'put ''PWwrTWF0aC5pbXVsKHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAsYj1iK01hdGguaW11bCh1ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKFBlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUseXQpfDApK01hdGguaW11bChaZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFplLHl0KXwwO3ZhciBxcj0o''@;'; put 'put ''TCsoeT15K01hdGguaW11bChHLGF0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxfdCl8MCkrTWF0aC5pbXVsKFEsYXQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxfdCl8MCkrKGw+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHk9TWF0aC5pbXVs''@;'; put 'put ''KGh0LHh0KSxsPShsPU1hdGguaW11bChodCxUdCkpK01hdGguaW11bCh2dCx4dCl8MCxiPU1hdGguaW11bCh2dCxUdCkseT15K01hdGguaW11bChLZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLFF0KXwwKStNYXRoLmltdWwoWWUsWHQpfDAsYj1iK01hdGguaW11bChZZSxRdCl8MCx5PXkr''@;'; put 'put ''TWF0aC5pbXVsKGJlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsaXQpfDApK01hdGguaW11bCh3ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHdlLGl0KXwwLHk9eStNYXRoLmltdWwoeGUsTHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1lLEx0KXwwLGI9YitNYXRo''@;'; put 'put ''LmltdWwoTWUsd3QpfDAseT15K01hdGguaW11bChPZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2UsUWUpfDAsYj1iK01hdGguaW11bChDZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHZlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodmUseXQpfDApK01hdGguaW11''@;'; put 'put ''bCh1ZSxOZSl8MCxiPWIrTWF0aC5pbXVsKHVlLHl0KXwwLHk9eStNYXRoLmltdWwoUGUsYXQpfDAsbD0obD1sK01hdGguaW11bChQZSxfdCl8MCkrTWF0aC5pbXVsKFplLGF0KXwwLGI9YitNYXRoLmltdWwoWmUsX3QpfDA7dmFyIHVhPShMKyh5PXkrTWF0aC5pbXVsKEcsJHQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobD0obD1sK01hdGguaW11bChHLEh0KXwwKStNYXRoLmltdWwoUSwkdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLEh0KXwwKSsobD4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMseT1NYXRoLmltdWwodHQseHQpLGw9KGw9TWF0aC5pbXVsKHR0LFR0KSkr''@;'; put 'put ''TWF0aC5pbXVsKFVlLHh0KXwwLGI9TWF0aC5pbXVsKFVlLFR0KSx5PXkrTWF0aC5pbXVsKGh0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUXQpfDApK01hdGguaW11bCh2dCxYdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LFF0KXwwLHk9eStNYXRoLmltdWwoS2Usc24pfDAsbD0obD1sK01hdGgu''@;'; put 'put ''aW11bChLZSxpdCl8MCkrTWF0aC5pbXVsKFllLHNuKXwwLGI9YitNYXRoLmltdWwoWWUsaXQpfDAseT15K01hdGguaW11bChiZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHd0KXwwKStNYXRoLmltdWwod2UsTHQpfDAsYj1iK01hdGguaW11bCh3ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHhl''@;'; put 'put ''LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11bChNZSxRZSl8MCxiPWIrTWF0aC5pbXVsKE1lLFB0KXwwLHk9eStNYXRoLmltdWwoT2UsTmUpfDAsbD0obD1sK01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLGI9YitNYXRoLmltdWwoQ2UseXQp''@;'; put 'put ''fDAseT15K01hdGguaW11bCh2ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsYj1iK01hdGguaW11bCh1ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKFBlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsSHQpfDApK01hdGguaW11bChaZSwkdCl8MCxi''@;'; put 'put ''PWIrTWF0aC5pbXVsKFplLEh0KXwwO3ZhciBGaT0oTCsoeT15K01hdGguaW11bChHLG5uKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxsbil8MCkrTWF0aC5pbXVsKFEsbm4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxsbil8MCkrKGw+Pj4xMyl8MCkrKEZpPj4+''@;'; put 'put ''MjYpfDAsRmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHh0KSxsPShsPU1hdGguaW11bChMZSxUdCkpK01hdGguaW11bChudCx4dCl8MCxiPU1hdGguaW11bChudCxUdCkseT15K01hdGguaW11bCh0dCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFF0KXwwKStNYXRoLmltdWwoVWUsWHQp''@;'; put 'put ''fDAsYj1iK01hdGguaW11bChVZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGh0LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsaXQpfDApK01hdGguaW11bCh2dCxzbil8MCxiPWIrTWF0aC5pbXVsKHZ0LGl0KXwwLHk9eStNYXRoLmltdWwoS2UsTHQpfDAsbD0obD1sK01hdGguaW11bChLZSx3dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFllLEx0KXwwLGI9YitNYXRoLmltdWwoWWUsd3QpfDAseT15K01hdGguaW11bChiZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFB0KXwwKStNYXRoLmltdWwod2UsUWUpfDAsYj1iK01hdGguaW11bCh3ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHhlLE5lKXwwLGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoeGUseXQpfDApK01hdGguaW11bChNZSxOZSl8MCxiPWIrTWF0aC5pbXVsKE1lLHl0KXwwLHk9eStNYXRoLmltdWwoT2UsYXQpfDAsbD0obD1sK01hdGguaW11bChPZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLGI9YitNYXRoLmltdWwoQ2UsX3QpfDAseT15K01hdGgu''@;'; put 'put ''aW11bCh2ZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLEh0KXwwKStNYXRoLmltdWwodWUsJHQpfDAsYj1iK01hdGguaW11bCh1ZSxIdCl8MCx5PXkrTWF0aC5pbXVsKFBlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsbG4pfDApK01hdGguaW11bChaZSxubil8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KFplLGxuKXwwO3ZhciBSYT0oTCsoeT15K01hdGguaW11bChHLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxHdCl8MCkrTWF0aC5pbXVsKFEsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3''@;'; put 'put ''MTA4ODYzLHk9TWF0aC5pbXVsKExlLFh0KSxsPShsPU1hdGguaW11bChMZSxRdCkpK01hdGguaW11bChudCxYdCl8MCxiPU1hdGguaW11bChudCxRdCkseT15K01hdGguaW11bCh0dCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGl0KXwwKStNYXRoLmltdWwoVWUsc24pfDAsYj1iK01hdGgu''@;'; put 'put ''aW11bChVZSxpdCl8MCx5PXkrTWF0aC5pbXVsKGh0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsd3QpfDApK01hdGguaW11bCh2dCxMdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LHd0KXwwLHk9eStNYXRoLmltdWwoS2UsUWUpfDAsbD0obD1sK01hdGguaW11bChLZSxQdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFllLFFlKXwwLGI9YitNYXRoLmltdWwoWWUsUHQpfDAseT15K01hdGguaW11bChiZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHl0KXwwKStNYXRoLmltdWwod2UsTmUpfDAsYj1iK01hdGguaW11bCh3ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKHhlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''eGUsX3QpfDApK01hdGguaW11bChNZSxhdCl8MCxiPWIrTWF0aC5pbXVsKE1lLF90KXwwLHk9eStNYXRoLmltdWwoT2UsJHQpfDAsbD0obD1sK01hdGguaW11bChPZSxIdCl8MCkrTWF0aC5pbXVsKENlLCR0KXwwLGI9YitNYXRoLmltdWwoQ2UsSHQpfDAseT15K01hdGguaW11bCh2ZSxubil8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKHZlLGxuKXwwKStNYXRoLmltdWwodWUsbm4pfDAsYj1iK01hdGguaW11bCh1ZSxsbil8MDt2YXIgb2k9KEwrKHk9eStNYXRoLmltdWwoUGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChQZSxHdCl8MCkrTWF0aC5pbXVsKFplLGFuKXwwKSk8''@;'; put 'put ''PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFplLEd0KXwwKSsobD4+PjEzKXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsc24pLGw9KGw9TWF0aC5pbXVsKExlLGl0KSkrTWF0aC5pbXVsKG50LHNuKXwwLGI9TWF0aC5pbXVsKG50LGl0KSx5PXkrTWF0aC5pbXVs''@;'; put 'put ''KHR0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsd3QpfDApK01hdGguaW11bChVZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFVlLHd0KXwwLHk9eStNYXRoLmltdWwoaHQsUWUpfDAsbD0obD1sK01hdGguaW11bChodCxQdCl8MCkrTWF0aC5pbXVsKHZ0LFFlKXwwLGI9YitNYXRoLmltdWwodnQs''@;'; put 'put ''UHQpfDAseT15K01hdGguaW11bChLZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLHl0KXwwKStNYXRoLmltdWwoWWUsTmUpfDAsYj1iK01hdGguaW11bChZZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGJlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsX3QpfDApK01hdGguaW11bCh3ZSxhdCl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKHdlLF90KXwwLHk9eStNYXRoLmltdWwoeGUsJHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxIdCl8MCkrTWF0aC5pbXVsKE1lLCR0KXwwLGI9YitNYXRoLmltdWwoTWUsSHQpfDAseT15K01hdGguaW11bChPZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGxuKXww''@;'; put 'put ''KStNYXRoLmltdWwoQ2Usbm4pfDAsYj1iK01hdGguaW11bChDZSxsbil8MDt2YXIgVWk9KEwrKHk9eStNYXRoLmltdWwodmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh2ZSxHdCl8MCkrTWF0aC5pbXVsKHVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHVl''@;'; put 'put ''LEd0KXwwKSsobD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTHQpLGw9KGw9TWF0aC5pbXVsKExlLHd0KSkrTWF0aC5pbXVsKG50LEx0KXwwLGI9TWF0aC5pbXVsKG50LHd0KSx5PXkrTWF0aC5pbXVsKHR0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''dHQsUHQpfDApK01hdGguaW11bChVZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFVlLFB0KXwwLHk9eStNYXRoLmltdWwoaHQsTmUpfDAsbD0obD1sK01hdGguaW11bChodCx5dCl8MCkrTWF0aC5pbXVsKHZ0LE5lKXwwLGI9YitNYXRoLmltdWwodnQseXQpfDAseT15K01hdGguaW11bChLZSxhdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKEtlLF90KXwwKStNYXRoLmltdWwoWWUsYXQpfDAsYj1iK01hdGguaW11bChZZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGJlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsSHQpfDApK01hdGguaW11bCh3ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHdlLEh0KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwoeGUsbm4pfDAsbD0obD1sK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKE1lLG5uKXwwLGI9YitNYXRoLmltdWwoTWUsbG4pfDA7dmFyIFZhPShMKyh5PXkrTWF0aC5pbXVsKE9lLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoT2UsR3QpfDApK01h''@;'; put 'put ''dGguaW11bChDZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChDZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFZhPj4+MjYpfDAsVmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFFlKSxsPShsPU1hdGguaW11bChMZSxQdCkpK01hdGguaW11bChudCxRZSl8MCxiPU1hdGguaW11bChu''@;'; put 'put ''dCxQdCkseT15K01hdGguaW11bCh0dCxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsYj1iK01hdGguaW11bChVZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGh0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsX3QpfDApK01hdGguaW11bCh2dCxhdCl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKHZ0LF90KXwwLHk9eStNYXRoLmltdWwoS2UsJHQpfDAsbD0obD1sK01hdGguaW11bChLZSxIdCl8MCkrTWF0aC5pbXVsKFllLCR0KXwwLGI9YitNYXRoLmltdWwoWWUsSHQpfDAseT15K01hdGguaW11bChiZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGxuKXww''@;'; put 'put ''KStNYXRoLmltdWwod2Usbm4pfDAsYj1iK01hdGguaW11bCh3ZSxsbil8MDt2YXIgdXI9KEwrKHk9eStNYXRoLmltdWwoeGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh4ZSxHdCl8MCkrTWF0aC5pbXVsKE1lLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKE1l''@;'; put 'put ''LEd0KXwwKSsobD4+PjEzKXwwKSsodXI+Pj4yNil8MCx1ciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTmUpLGw9KGw9TWF0aC5pbXVsKExlLHl0KSkrTWF0aC5pbXVsKG50LE5lKXwwLGI9TWF0aC5pbXVsKG50LHl0KSx5PXkrTWF0aC5pbXVsKHR0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''dHQsX3QpfDApK01hdGguaW11bChVZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFVlLF90KXwwLHk9eStNYXRoLmltdWwoaHQsJHQpfDAsbD0obD1sK01hdGguaW11bChodCxIdCl8MCkrTWF0aC5pbXVsKHZ0LCR0KXwwLGI9YitNYXRoLmltdWwodnQsSHQpfDAseT15K01hdGguaW11bChLZSxubil8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUsbm4pfDAsYj1iK01hdGguaW11bChZZSxsbil8MDt2YXIgZmE9KEwrKHk9eStNYXRoLmltdWwoYmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChiZSxHdCl8MCkrTWF0aC5pbXVsKHdlLGFuKXwwKSk8''@;'; put 'put ''PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHdlLEd0KXwwKSsobD4+PjEzKXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsYXQpLGw9KGw9TWF0aC5pbXVsKExlLF90KSkrTWF0aC5pbXVsKG50LGF0KXwwLGI9TWF0aC5pbXVsKG50LF90KSx5PXkrTWF0aC5pbXVs''@;'; put 'put ''KHR0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsSHQpfDApK01hdGguaW11bChVZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFVlLEh0KXwwLHk9eStNYXRoLmltdWwoaHQsbm4pfDAsbD0obD1sK01hdGguaW11bChodCxsbil8MCkrTWF0aC5pbXVsKHZ0LG5uKXwwLGI9YitNYXRoLmltdWwodnQs''@;'; put 'put ''bG4pfDA7dmFyIHhpPShMKyh5PXkrTWF0aC5pbXVsKEtlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bChZZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChZZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3''@;'; put 'put ''MTA4ODYzLHk9TWF0aC5pbXVsKExlLCR0KSxsPShsPU1hdGguaW11bChMZSxIdCkpK01hdGguaW11bChudCwkdCl8MCxiPU1hdGguaW11bChudCxIdCkseT15K01hdGguaW11bCh0dCxubil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsYj1iK01hdGgu''@;'; put 'put ''aW11bChVZSxsbil8MDt2YXIgb2E9KEwrKHk9eStNYXRoLmltdWwoaHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChodCxHdCl8MCkrTWF0aC5pbXVsKHZ0LGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHZ0LEd0KXwwKSsobD4+PjEzKXwwKSsob2E+Pj4yNil8''@;'; put 'put ''MCxvYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsbm4pLGw9KGw9TWF0aC5pbXVsKExlLGxuKSkrTWF0aC5pbXVsKG50LG5uKXwwLGI9TWF0aC5pbXVsKG50LGxuKTt2YXIgWGk9KEwrKHk9eStNYXRoLmltdWwodHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh0dCxHdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFVlLEd0KXwwKSsobD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjM7dmFyIElyPShMKyh5PU1hdGguaW11bChMZSxhbikpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoTGUsR3QpKStNYXRo''@;'; put 'put ''LmltdWwobnQsYW4pfDApKTw8MTMpfDA7cmV0dXJuIEw9KChiPU1hdGguaW11bChudCxHdCkpKyhsPj4+MTMpfDApKyhJcj4+PjI2KXwwLElyJj02NzEwODg2MyxrWzBdPWVhLGtbMV09bWksa1syXT1mcixrWzNdPSRpLGtbNF09S2ksa1s1XT1WaSxrWzZdPXFyLGtbN109dWEsa1s4XT1GaSxr''@;'; put 'put ''WzldPVJhLGtbMTBdPW9pLGtbMTFdPVVpLGtbMTJdPVZhLGtbMTNdPXVyLGtbMTRdPWZhLGtbMTVdPXhpLGtbMTZdPW9hLGtbMTddPVhpLGtbMThdPUlyLDAhPT1MJiYoa1sxOV09TCx2Lmxlbmd0aCsrKSx2fTtmdW5jdGlvbiBaKFIscyx1KXtyZXR1cm4obmV3IFUpLm11bHAoUixzLHUpfWZ1''@;'; put 'put ''bmN0aW9uIFUoUixzKXt0aGlzLng9Uix0aGlzLnk9c31NYXRoLmltdWx8fChIPU4pLGYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10aGlzLmxlbmd0aCtzLmxlbmd0aDtyZXR1cm4gdj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXMubGVuZ3RoP0godGhpcyxzLHUpOnA8''@;'; put 'put ''NjM/Tih0aGlzLHMsdSk6cDwxMDI0P2Z1bmN0aW9uIHooUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlLHUubGVuZ3RoPVIubGVuZ3RoK3MubGVuZ3RoO2Zvcih2YXIgdj0wLHA9MCxfPTA7Xzx1Lmxlbmd0aC0xO18rKyl7dmFyIGs9cDtwPTA7Zm9yKHZhciBMPTY3MTA4''@;'; put 'put ''ODYzJnYseT1NYXRoLm1pbihfLHMubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCxfLVIubGVuZ3RoKzEpO2w8PXk7bCsrKXt2YXIgUT0oMHxSLndvcmRzW18tbF0pKigwfHMud29yZHNbbF0pLHBlPTY3MTA4ODYzJlE7TD02NzEwODg2MyYocGU9cGUrTHwwKSxwKz0oaz0oaz1rKyhRLzY3MTA4ODY0''@;'; put 'put ''fDApfDApKyhwZT4+PjI2KXwwKT4+PjI2LGsmPTY3MTA4ODYzfXUud29yZHNbX109TCx2PWssaz1wfXJldHVybiAwIT09dj91LndvcmRzW19dPXY6dS5sZW5ndGgtLSx1LnN0cmlwKCl9KHRoaXMscyx1KTpaKHRoaXMscyx1KSx2fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHMpe2Zv''@;'; put 'put ''cih2YXIgdT1uZXcgQXJyYXkocyksdj1mLnByb3RvdHlwZS5fY291bnRCaXRzKHMpLTEscD0wO3A8cztwKyspdVtwXT10aGlzLnJldkJpbihwLHYscyk7cmV0dXJuIHV9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihzLHUsdil7aWYoMD09PXN8fHM9PT12LTEpcmV0dXJuIHM7Zm9yKHZh''@;'; put 'put ''ciBwPTAsXz0wO188dTtfKyspcHw9KDEmcyk8PHUtXy0xLHM+Pj0xO3JldHVybiBwfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHMsdSx2LHAsXyxrKXtmb3IodmFyIEw9MDtMPGs7TCsrKXBbTF09dVtzW0xdXSxfW0xdPXZbc1tMXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5j''@;'; put 'put ''dGlvbihzLHUsdixwLF8sayl7dGhpcy5wZXJtdXRlKGsscyx1LHYscCxfKTtmb3IodmFyIEw9MTtMPF87TDw8PTEpZm9yKHZhciB5PUw8PDEsbD1NYXRoLmNvcygyKk1hdGguUEkveSksYj1NYXRoLnNpbigyKk1hdGguUEkveSkscT0wO3E8XztxKz15KWZvcih2YXIgRz1sLFE9YixwZT0wO3Bl''@;'; put 'put ''PEw7cGUrKyl7dmFyIFBlPXZbcStwZV0sWmU9cFtxK3BlXSxxZT12W3ErcGUrTF0sdmU9cFtxK3BlK0xdLHVlPUcqcWUtUSp2ZTt2ZT1HKnZlK1EqcWUsdltxK3BlXT1QZSsocWU9dWUpLHBbcStwZV09WmUrdmUsdltxK3BlK0xdPVBlLXFlLHBbcStwZStMXT1aZS12ZSxwZSE9PXkmJih1ZT1s''@;'; put 'put ''KkctYipRLFE9bCpRK2IqRyxHPXVlKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHMsdSl7dmFyIHY9MXxNYXRoLm1heCh1LHMpLHA9MSZ2LF89MDtmb3Iodj12LzJ8MDt2O3Y+Pj49MSlfKys7cmV0dXJuIDE8PF8rMStwfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rp''@;'; put 'put ''b24ocyx1LHYpe2lmKCEodjw9MSkpZm9yKHZhciBwPTA7cDx2LzI7cCsrKXt2YXIgXz1zW3BdO3NbcF09c1t2LXAtMV0sc1t2LXAtMV09XyxfPXVbcF0sdVtwXT0tdVt2LXAtMV0sdVt2LXAtMV09LV99fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9''@;'; put 'put ''MCxwPTA7cDx1LzI7cCsrKXt2YXIgXz04MTkyKk1hdGgucm91bmQoc1syKnArMV0vdSkrTWF0aC5yb3VuZChzWzIqcF0vdSkrdjtzW3BdPTY3MTA4ODYzJl8sdj1fPDY3MTA4ODY0PzA6Xy82NzEwODg2NHwwfXJldHVybiBzfSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHMsdSx2''@;'; put 'put ''LHApe2Zvcih2YXIgXz0wLGs9MDtrPHU7aysrKXZbMiprXT04MTkxJihfKz0wfHNba10pLHZbMiprKzFdPTgxOTEmKF8+Pj49MTMpLF8+Pj49MTM7Zm9yKGs9Mip1O2s8cDsrK2spdltrXT0wO28oMD09PV8pLG8oISgtODE5MiZfKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocyl7Zm9y''@;'; put 'put ''KHZhciB1PW5ldyBBcnJheShzKSx2PTA7djxzO3YrKyl1W3ZdPTA7cmV0dXJuIHV9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPTIqdGhpcy5ndWVzc0xlbjEzYihzLmxlbmd0aCx1Lmxlbmd0aCksXz10aGlzLm1ha2VSQlQocCksaz10aGlzLnN0dWIocCksTD1uZXcg''@;'; put 'put ''QXJyYXkocCkseT1uZXcgQXJyYXkocCksbD1uZXcgQXJyYXkocCksYj1uZXcgQXJyYXkocCkscT1uZXcgQXJyYXkocCksRz1uZXcgQXJyYXkocCksUT12LndvcmRzO1EubGVuZ3RoPXAsdGhpcy5jb252ZXJ0MTNiKHMud29yZHMscy5sZW5ndGgsTCxwKSx0aGlzLmNvbnZlcnQxM2IodS53b3Jk''@;'; put 'put ''cyx1Lmxlbmd0aCxiLHApLHRoaXMudHJhbnNmb3JtKEwsayx5LGwscCxfKSx0aGlzLnRyYW5zZm9ybShiLGsscSxHLHAsXyk7Zm9yKHZhciBwZT0wO3BlPHA7cGUrKyl7dmFyIFBlPXlbcGVdKnFbcGVdLWxbcGVdKkdbcGVdO2xbcGVdPXlbcGVdKkdbcGVdK2xbcGVdKnFbcGVdLHlbcGVdPVBl''@;'; put 'put ''fXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh5LGwscCksdGhpcy50cmFuc2Zvcm0oeSxsLFEsayxwLF8pLHRoaXMuY29uanVnYXRlKFEsayxwKSx0aGlzLm5vcm1hbGl6ZTEzYihRLHApLHYubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPXMubGVuZ3RoK3UubGVuZ3RoLHYu''@;'; put 'put ''c3RyaXAoKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksdGhpcy5tdWxUbyhzLHUpfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwp''@;'; put 'put ''O3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksWih0aGlzLHMsdSl9LGYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhzLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KTtmb3IodmFyIHU9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKnMsXz0oNjcxMDg4NjMmcCkrKDY3MTA4ODYzJnUpO3U+Pj0yNix1Kz1wLzY3MTA4ODY0fDAsdSs9Xz4+PjI2LHRoaXMud29yZHNbdl09Njcx''@;'; put 'put ''MDg4NjMmX31yZXR1cm4gMCE9PXUmJih0aGlzLndvcmRzW3ZdPXUsdGhpcy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHMpfSxmLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhp''@;'; put 'put ''cyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihzKXt2YXIgdT1mdW5jdGlvbiBGKFIpe2Zvcih2YXIgcz1uZXcgQXJyYXkoUi5iaXRMZW5ndGgoKSksdT0wO3U8cy5sZW5ndGg7dSsr''@;'; put 'put ''KXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gbmV3IGYoMSk7Zm9yKHZhciB2PXRoaXMscD0wO3A8dS5sZW5ndGgmJjA9PT11W3BdO3ArKyx2PXYuc3FyKCkpO2lmKCsrcDx1Lmxlbmd0aClmb3Io''@;'; put 'put ''dmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgXyx1PXMlMjYsdj0ocy11KS8yNixwPTY3MTA4ODYz''@;'; put 'put ''Pj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19dJnA7dGhpcy53b3Jkc1tfXT0oMHx0aGlzLndvcmRzW19dKS1MPDx1fGssaz1MPj4+MjYtdX1rJiYodGhpcy53b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKysp''@;'; put 'put ''fWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRoaXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7Xzx2O18rKyl0aGlzLndvcmRzW19dPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24o''@;'; put 'put ''cyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1LHYpe3ZhciBwO28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKSxwPXU/KHUtdSUyNikvMjY6MDt2YXIgXz1zJTI2LGs9TWF0aC5taW4oKHMtXykvMjYs''@;'; put 'put ''dGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFyIGw9MDtsPGs7bCsrKXkud29yZHNbbF09dGhpcy53b3Jkc1tsXTt5Lmxlbmd0aD1rfWlmKDAhPT1rKWlmKHRoaXMubGVuZ3RoPmspZm9yKHRoaXMubGVu''@;'; put 'put ''Z3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBiPTA7Zm9yKGw9dGhpcy5sZW5ndGgtMTtsPj0wJiYoMCE9PWJ8fGw+PXApO2wtLSl7dmFyIHE9MHx0aGlzLndvcmRz''@;'; put 'put ''W2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0''@;'; put 'put ''aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocyl9LGYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHMpfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihzKXtv''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhpcy53b3Jkc1t2XSYxPDx1KSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUy''@;'; put 'put ''Nix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9dj90aGlzOigwIT09dSYmdisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHYsdGhpcy5sZW5ndGgpLDAhPT11JiYodGhpcy53''@;'; put 'put ''b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51PDx1KSx0aGlzLnN0cmlwKCkpfSxmLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihzKX0sZi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MD90aGlzLmlzdWJuKC1zKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHM/KHRoaXMud29yZHNbMF09cy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihzKX0sZi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHMpe3RoaXMud29yZHNbMF0rPXM7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XT49NjcxMDg4NjQ7''@;'; put 'put ''dSsrKXRoaXMud29yZHNbdV0tPTY3MTA4ODY0LHU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbdSsxXT0xOnRoaXMud29yZHNbdSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx1KzEpLHRoaXN9LGYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHMpe2lm''@;'; put 'put ''KG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MClyZXR1cm4gdGhpcy5pYWRkbigtcyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXMsMT09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3VdPDA7dSsrKXRoaXMud29yZHNbdV0rPTY3MTA4ODY0LHRoaXMud29yZHNbdSsx''@;'; put 'put ''XS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocyl9LGYucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihzKX0sZi5wcm90b3R5cGUuaWFicz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sZi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGYucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihzLHUsdil7dmFyIF87dGhpcy5fZXhwYW5kKHMubGVuZ3RoK3YpO3Zh''@;'; put 'put ''ciBrLEw9MDtmb3IoXz0wO188cy5sZW5ndGg7XysrKXtrPSgwfHRoaXMud29yZHNbXyt2XSkrTDt2YXIgeT0oMHxzLndvcmRzW19dKSp1O0w9KChrLT02NzEwODg2MyZ5KT4+MjYpLSh5LzY3MTA4ODY0fDApLHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrfWZvcig7Xzx0aGlzLmxlbmd0aC12''@;'; put 'put ''O18rKylMPShrPSgwfHRoaXMud29yZHNbXyt2XSkrTCk+PjI2LHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrO2lmKDA9PT1MKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG8oLTE9PT1MKSxMPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUw9KGs9LSgwfHRoaXMud29yZHNbX10pK0wpPj4yNix0''@;'; put 'put ''aGlzLndvcmRzW19dPTY3MTA4ODYzJms7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10aGlzLmNsb25lKCksXz1zLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdOzAhPSh2PTI2LXRoaXMuX2NvdW50''@;'; put 'put ''Qml0cyhrKSkmJihfPV8udXNobG4odikscC5pdXNobG4odiksaz0wfF8ud29yZHNbXy5sZW5ndGgtMV0pO3ZhciBsLHk9cC5sZW5ndGgtXy5sZW5ndGg7aWYoIm1vZCIhPT11KXsobD1uZXcgZihudWxsKSkubGVuZ3RoPXkrMSxsLndvcmRzPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKHZhciBi''@;'; put 'put ''PTA7YjxsLmxlbmd0aDtiKyspbC53b3Jkc1tiXT0wfXZhciBxPXAuY2xvbmUoKS5faXNobG5zdWJtdWwoXywxLHkpOzA9PT1xLm5lZ2F0aXZlJiYocD1xLGwmJihsLndvcmRzW3ldPTEpKTtmb3IodmFyIEc9eS0xO0c+PTA7Ry0tKXt2YXIgUT02NzEwODg2NCooMHxwLndvcmRzW18ubGVuZ3Ro''@;'; put 'put ''K0ddKSsoMHxwLndvcmRzW18ubGVuZ3RoK0ctMV0pO2ZvcihRPU1hdGgubWluKFEva3wwLDY3MTA4ODYzKSxwLl9pc2hsbnN1Ym11bChfLFEsRyk7MCE9PXAubmVnYXRpdmU7KVEtLSxwLm5lZ2F0aXZlPTAscC5faXNobG5zdWJtdWwoXywxLEcpLHAuaXNaZXJvKCl8fChwLm5lZ2F0aXZlXj0x''@;'; put 'put ''KTtsJiYobC53b3Jkc1tHXT1RKX1yZXR1cm4gbCYmbC5zdHJpcCgpLHAuc3RyaXAoKSwiZGl2IiE9PXUmJjAhPT12JiZwLml1c2hybih2KSx7ZGl2Omx8fG51bGwsbW9kOnB9fSxmLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocyx1LHYpe3JldHVybiBvKCFzLmlzWmVybygpKSx0aGlzLmlz''@;'; put 'put ''WmVybygpP3tkaXY6bmV3IGYoMCksbW9kOm5ldyBmKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocyx1KSwibW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZl''@;'; put 'put ''JiZfLmlhZGQocykpLHtkaXY6cCxtb2Q6X30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZT8oaz10aGlzLmRpdm1vZChzLm5lZygpLHUpLCJtb2QiIT09dSYmKHA9ay5kaXYubmVnKCkpLHtkaXY6cCxtb2Q6ay5tb2R9KTp0aGlzLm5lZ2F0aXZlJnMubmVnYXRpdmU/KGs9dGhp''@;'; put 'put ''cy5uZWcoKS5kaXZtb2Qocy5uZWcoKSx1KSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlzdWIocykpLHtkaXY6ay5kaXYsbW9kOl99KTpzLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocyk8MD97ZGl2Om5ldyBmKDApLG1vZDp0aGlzfToxPT09''@;'; put 'put ''cy5sZW5ndGg/ImRpdiI9PT11P3tkaXY6dGhpcy5kaXZuKHMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXU/e2RpdjpudWxsLG1vZDpuZXcgZih0aGlzLm1vZG4ocy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNb''@;'; put 'put ''MF0pKX06dGhpcy5fd29yZERpdihzLHUpO3ZhciBwLF8sa30sZi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJkaXYiLCExKS5kaXZ9LGYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMSkubW9kfSxm''@;'; put 'put ''LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJtb2QiLCEwKS5tb2R9LGYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuZGl2bW9kKHMpO2lmKHUubW9kLmlzWmVybygpKXJldHVybiB1LmRpdjt2YXIgdj0wIT09dS5kaXYu''@;'; put 'put ''bmVnYXRpdmU/dS5tb2QuaXN1YihzKTp1Lm1vZCxwPXMudXNocm4oMSksXz1zLmFuZGxuKDEpLGs9di5jbXAocCk7cmV0dXJuIGs8MHx8MT09PV8mJjA9PT1rP3UuZGl2OjAhPT11LmRpdi5uZWdhdGl2ZT91LmRpdi5pc3VibigxKTp1LmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kbj1m''@;'; put 'put ''dW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9KDE8PDI2KSVzLHY9MCxwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdj0odSp2KygwfHRoaXMud29yZHNbcF0pKSVzO3JldHVybiB2fSxmLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFy''@;'; put 'put ''IHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKzY3MTA4ODY0KnU7dGhpcy53b3Jkc1t2XT1wL3N8MCx1PXAlc31yZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRp''@;'; put 'put ''dm4ocyl9LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz1uZXcg''@;'; put 'put ''ZigwKSxMPW5ldyBmKDEpLHk9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpOyl1Lml1c2hybigxKSx2Lml1c2hybigxKSwrK3k7Zm9yKHZhciBsPXYuY2xvbmUoKSxiPXUuY2xvbmUoKTshdS5pc1plcm8oKTspe2Zvcih2YXIgcT0wLEc9MTshKHUud29yZHNbMF0mRykmJnE8MjY7KytxLEc8PD0x''@;'; put 'put ''KTtpZihxPjApZm9yKHUuaXVzaHJuKHEpO3EtLSA+MDspKHAuaXNPZGQoKXx8Xy5pc09kZCgpKSYmKHAuaWFkZChsKSxfLmlzdWIoYikpLHAuaXVzaHJuKDEpLF8uaXVzaHJuKDEpO2Zvcih2YXIgUT0wLHBlPTE7ISh2LndvcmRzWzBdJnBlKSYmUTwyNjsrK1EscGU8PD0xKTtpZihRPjApZm9y''@;'; put 'put ''KHYuaXVzaHJuKFEpO1EtLSA+MDspKGsuaXNPZGQoKXx8TC5pc09kZCgpKSYmKGsuaWFkZChsKSxMLmlzdWIoYikpLGsuaXVzaHJuKDEpLEwuaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3ViKGspLF8uaXN1YihMKSk6KHYuaXN1Yih1KSxrLmlzdWIocCksTC5pc3ViKF8p''@;'; put 'put ''KX1yZXR1cm57YTprLGI6TCxnY2Q6di5pdXNobG4oeSl9fSxmLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHEsdT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUubmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3Io''@;'; put 'put ''dmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPXYuY2xvbmUoKTt1LmNtcG4oMSk+MCYmdi5jbXBuKDEpPjA7KXtmb3IodmFyIEw9MCx5PTE7ISh1LndvcmRzWzBdJnkpJiZMPDI2OysrTCx5PDw9MSk7aWYoTD4wKWZvcih1Lml1c2hybihMKTtMLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKGsp''@;'; put 'put ''LHAuaXVzaHJuKDEpO2Zvcih2YXIgbD0wLGI9MTshKHYud29yZHNbMF0mYikmJmw8MjY7KytsLGI8PD0xKTtpZihsPjApZm9yKHYuaXVzaHJuKGwpO2wtLSA+MDspXy5pc09kZCgpJiZfLmlhZGQoayksXy5pdXNocm4oMSk7dS5jbXAodik+PTA/KHUuaXN1Yih2KSxwLmlzdWIoXykpOih2Lmlz''@;'; put 'put ''dWIodSksXy5pc3ViKHApKX1yZXR1cm4ocT0wPT09dS5jbXBuKDEpP3A6XykuY21wbigwKTwwJiZxLmlhZGQocykscX0sZi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHMuYWJzKCk7aWYocy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIg''@;'; put 'put ''dT10aGlzLmNsb25lKCksdj1zLmNsb25lKCk7dS5uZWdhdGl2ZT0wLHYubmVnYXRpdmU9MDtmb3IodmFyIHA9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpO3ArKyl1Lml1c2hybigxKSx2Lml1c2hybigxKTtmb3IoOzspe2Zvcig7dS5pc0V2ZW4oKTspdS5pdXNocm4oMSk7Zm9yKDt2LmlzRXZl''@;'; put 'put ''bigpOyl2Lml1c2hybigxKTt2YXIgXz11LmNtcCh2KTtpZihfPDApe3ZhciBrPXU7dT12LHY9a31lbHNlIGlmKDA9PT1ffHwwPT09di5jbXBuKDEpKWJyZWFrO3UuaXN1Yih2KX1yZXR1cm4gdi5pdXNobG4ocCl9LGYucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZWdj''@;'; put 'put ''ZChzKS5hLnVtb2Qocyl9LGYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihzKXtyZXR1cm4g''@;'; put 'put ''dGhpcy53b3Jkc1swXSZzfSxmLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2Ygcyk7dmFyIHU9cyUyNix2PShzLXUpLzI2LHA9MTw8dTtpZih0aGlzLmxlbmd0aDw9dilyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XXw9cCx0aGlzO2Zv''@;'; put 'put ''cih2YXIgXz1wLGs9djswIT09XyYmazx0aGlzLmxlbmd0aDtrKyspe3ZhciBMPTB8dGhpcy53b3Jkc1trXTtfPShMKz1fKT4+PjI2LHRoaXMud29yZHNba109TCY9NjcxMDg4NjN9cmV0dXJuIDAhPT1fJiYodGhpcy53b3Jkc1trXT1fLHRoaXMubGVuZ3RoKyspLHRoaXN9LGYucHJvdG90eXBl''@;'; put 'put ''LmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxmLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHMpe3ZhciB2LHU9czwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhdSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdSlyZXR1''@;'; put 'put ''cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl2PTE7ZWxzZXt1JiYocz0tcyksbyhzPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgcD0wfHRoaXMud29yZHNbMF07dj1wPT09cz8wOnA8cz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC12OnZ9LGYu''@;'; put 'put ''cHJvdG90eXBlLmNtcD1mdW5jdGlvbihzKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB1PXRoaXMudWNtcChzKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwt''@;'; put 'put ''dTp1fSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHMpe2lmKHRoaXMubGVuZ3RoPnMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHMubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9MHx0aGlzLndvcmRzW3ZdLF89MHxz''@;'; put 'put ''LndvcmRzW3ZdO2lmKHAhPT1fKXtwPF8/dT0tMTpwPl8mJih1PTEpO2JyZWFrfX1yZXR1cm4gdX0sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHMpe3JldHVybiAxPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wKHMpfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcG4ocyk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXAocyk+PTB9LGYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUu''@;'; put 'put ''bHQ9ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPD0wfSxmLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPD0wfSxmLnByb3RvdHlwZS5lcW49ZnVuY3Rp''@;'; put 'put ''b24ocyl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXAocyl9LGYucmVkPWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgbWUocyl9LGYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJl''@;'; put 'put ''ZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG8oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IG8odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sZi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnJlZD1zLHRoaXN9LGYucHJvdG90eXBl''@;'; put 'put ''LmZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscyl9LGYucHJvdG90''@;'; put 'put ''eXBlLnJlZFN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscyl9LGYucHJvdG90''@;'; put 'put ''eXBlLnJlZE11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscyksdGhpcy5yZWQubXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocyl7cmV0dXJu''@;'; put 'put ''IG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLmltdWwodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0s''@;'; put 'put ''Zi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBvKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQmJiFzLnJlZCwicmVkUG93KG5v''@;'; put 'put ''cm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxzKX07dmFyIEs9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBYKFIscyl7dGhpcy5uYW1lPVIsdGhpcy5wPW5ldyBmKHMsMTYpLHRoaXMubj10aGlz''@;'; put 'put ''LnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBmKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBuZSgpe1guY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBzZSgpe1guY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBoZSgpe1guY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBfZSgpe1guY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBtZShS''@;'; put 'put ''KXtpZigic3RyaW5nIj09dHlwZW9mIFIpe3ZhciBzPWYuX3ByaW1lKFIpO3RoaXMubT1zLnAsdGhpcy5wcmltZT1zfWVsc2UgbyhSLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEZlKFIpe21lLmNhbGwo''@;'; put 'put ''dGhpcyxSKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBmKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10''@;'; put 'put ''aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVgucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gcy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHN9LFgucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocyl7dmFyIHYsdT1zO2Rve3RoaXMuc3BsaXQodSx0aGlzLnRtcCksdj0odT0odT10aGlzLmltdWxLKHUpKS5pYWRk''@;'; put 'put ''KHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUodj50aGlzLm4pO3ZhciBwPXY8dGhpcy5uPy0xOnUudWNtcCh0aGlzLnApO3JldHVybiAwPT09cD8odS53b3Jkc1swXT0wLHUubGVuZ3RoPTEpOnA+MD91LmlzdWIodGhpcy5wKTp2b2lkIDAhPT11LnN0cmlwP3Uuc3RyaXAoKTp1Ll9zdHJp''@;'; put 'put ''cCgpLHV9LFgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7cy5pdXNocm4odGhpcy5uLDAsdSl9LFgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe3JldHVybiBzLmltdWwodGhpcy5rKX0sSShuZSxYKSxuZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9''@;'; put 'put ''NDE5NDMwMyxwPU1hdGgubWluKHMubGVuZ3RoLDkpLF89MDtfPHA7XysrKXUud29yZHNbX109cy53b3Jkc1tfXTtpZih1Lmxlbmd0aD1wLHMubGVuZ3RoPD05KXJldHVybiBzLndvcmRzWzBdPTAsdm9pZChzLmxlbmd0aD0xKTt2YXIgaz1zLndvcmRzWzldO2Zvcih1LndvcmRzW3UubGVuZ3Ro''@;'; put 'put ''KytdPWsmdixfPTEwO188cy5sZW5ndGg7XysrKXt2YXIgTD0wfHMud29yZHNbX107cy53b3Jkc1tfLTEwXT0oTCZ2KTw8NHxrPj4+MjIsaz1MfXMud29yZHNbXy0xMF09az4+Pj0yMixzLmxlbmd0aC09MD09PWsmJnMubGVuZ3RoPjEwPzEwOjl9LG5lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlv''@;'; put 'put ''bihzKXtzLndvcmRzW3MubGVuZ3RoXT0wLHMud29yZHNbcy5sZW5ndGgrMV09MCxzLmxlbmd0aCs9Mjtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTB8cy53b3Jkc1t2XTtzLndvcmRzW3ZdPTY3MTA4ODYzJih1Kz05NzcqcCksdT02NCpwKyh1LzY3MTA4ODY0fDApfXJl''@;'; put 'put ''dHVybiAwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmKHMubGVuZ3RoLS0sMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJnMubGVuZ3RoLS0pLHN9LEkoc2UsWCksSShoZSxYKSxJKF9lLFgpLF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2''@;'; put 'put ''Kyspe3ZhciBwPTE5KigwfHMud29yZHNbdl0pK3UsXz02NzEwODg2MyZwO3A+Pj49MjYscy53b3Jkc1t2XT1fLHU9cH1yZXR1cm4gMCE9PXUmJihzLndvcmRzW3MubGVuZ3RoKytdPXUpLHN9LGYuX3ByaW1lPWZ1bmN0aW9uKHMpe2lmKEtbc10pcmV0dXJuIEtbc107dmFyIHU7aWYoImsyNTYi''@;'; put 'put ''PT09cyl1PW5ldyBuZTtlbHNlIGlmKCJwMjI0Ij09PXMpdT1uZXcgc2U7ZWxzZSBpZigicDE5MiI9PT1zKXU9bmV3IGhlO2Vsc2V7aWYoInAyNTUxOSIhPT1zKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3MpO3U9bmV3IF9lfXJldHVybiBLW3NdPXUsdX0sbWUucHJvdG90eXBl''@;'; put 'put ''Ll92ZXJpZnkxPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocyx1KXtvKCEocy5uZWdhdGl2''@;'; put 'put ''ZXx1Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHMucmVkJiZzLnJlZD09PXUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LG1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUu''@;'; put 'put ''aXJlZHVjZShzKS5fZm9yY2VSZWQodGhpcyk6cy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHMpe3JldHVybiBzLmlzWmVybygpP3MuY2xvbmUoKTp0aGlzLm0uc3ViKHMpLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmFkZD1m''@;'; put 'put ''dW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdi5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMu''@;'; put 'put ''aWFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLnN1Yih1KTtyZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0aGlzLm0pLHYuX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxtZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlzdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5tKSx2fSxtZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocyks''@;'; put 'put ''dGhpcy5pbW9kKHMudXNobG4odSkpfSxtZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMsdSksdGhpcy5pbW9kKHMuaW11bCh1KSl9LG1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMu''@;'; put 'put ''aW1vZChzLm11bCh1KSl9LG1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltdWwocyxzLmNsb25lKCkpfSxtZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLm11bChzLHMpfSxtZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihzKXtpZihzLmlz''@;'; put 'put ''WmVybygpKXJldHVybiBzLmNsb25lKCk7dmFyIHU9dGhpcy5tLmFuZGxuKDMpO2lmKG8odSUyPT0xKSwzPT09dSl7dmFyIHY9dGhpcy5tLmFkZChuZXcgZigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhzLHYpfWZvcih2YXIgcD10aGlzLm0uc3VibigxKSxfPTA7IXAuaXNaZXJvKCkm''@;'; put 'put ''JjA9PT1wLmFuZGxuKDEpOylfKysscC5pdXNocm4oMSk7byghcC5pc1plcm8oKSk7dmFyIGs9bmV3IGYoMSkudG9SZWQodGhpcyksTD1rLnJlZE5lZygpLHk9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGw9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihsPW5ldyBmKDIqbCpsKS50b1JlZCh0aGlz''@;'; put 'put ''KTswIT09dGhpcy5wb3cobCx5KS5jbXAoTCk7KWwucmVkSUFkZChMKTtmb3IodmFyIGI9dGhpcy5wb3cobCxwKSxxPXRoaXMucG93KHMscC5hZGRuKDEpLml1c2hybigxKSksRz10aGlzLnBvdyhzLHApLFE9XzswIT09Ry5jbXAoayk7KXtmb3IodmFyIHBlPUcsUGU9MDswIT09cGUuY21wKGsp''@;'; put 'put ''O1BlKyspcGU9cGUucmVkU3FyKCk7byhQZTxRKTt2YXIgWmU9dGhpcy5wb3coYixuZXcgZigxKS5pdXNobG4oUS1QZS0xKSk7cT1xLnJlZE11bChaZSksYj1aZS5yZWRTcXIoKSxHPUcucmVkTXVsKGIpLFE9UGV9cmV0dXJuIHF9LG1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3ZhciB1''@;'; put 'put ''PXMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT11Lm5lZ2F0aXZlPyh1Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHUpLnJlZE5lZygpKTp0aGlzLmltb2QodSl9LG1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyx1KXtpZih1LmlzWmVybygpKXJldHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtp''@;'; put 'put ''ZigwPT09dS5jbXBuKDEpKXJldHVybiBzLmNsb25lKCk7dmFyIHA9bmV3IEFycmF5KDE2KTtwWzBdPW5ldyBmKDEpLnRvUmVkKHRoaXMpLHBbMV09cztmb3IodmFyIF89MjtfPHAubGVuZ3RoO18rKylwW19dPXRoaXMubXVsKHBbXy0xXSxzKTt2YXIgaz1wWzBdLEw9MCx5PTAsbD11LmJpdExl''@;'; put 'put ''bmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLF89dS5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciBiPXUud29yZHNbX10scT1sLTE7cT49MDtxLS0pe3ZhciBHPWI+PnEmMTtrIT09cFswXSYmKGs9dGhpcy5zcXIoaykpLDAhPT1HfHwwIT09TD8oTDw8PTEsTHw9RywoND09Kyt5fHwwPT09''@;'; put 'put ''XyYmMD09PXEpJiYoaz10aGlzLm11bChrLHBbTF0pLHk9MCxMPTApKTp5PTB9bD0yNn1yZXR1cm4ga30sbWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihzKXt2YXIgdT1zLnVtb2QodGhpcy5tKTtyZXR1cm4gdT09PXM/dS5jbG9uZSgpOnV9LG1lLnByb3RvdHlwZS5jb252ZXJ0RnJv''@;'; put 'put ''bT1mdW5jdGlvbihzKXt2YXIgdT1zLmNsb25lKCk7cmV0dXJuIHUucmVkPW51bGwsdX0sZi5tb250PWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgRmUocyl9LEkoRmUsbWUpLEZlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLnVzaGxuKHRoaXMuc2hp''@;'; put 'put ''ZnQpKX0sRmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuaW1vZChzLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gdS5yZWQ9bnVsbCx1fSxGZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIHMu''@;'; put 'put ''d29yZHNbMF09MCxzLmxlbmd0aD0xLHM7dmFyIHY9cy5pbXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49''@;'; put 'put ''MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBuZXcgZigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHY9''@;'; put 'put ''cy5tdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxfPXYuaXN1YihwKS5pdXNocm4odGhpcy5zaGlmdCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAm''@;'; put 'put ''JihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odGU9ZC5ubWQodGUpLHRoaXMpfSw0NDI5OnRlPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBqPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ITE7aWYoail0cnl7aih7fSwiYSIse3ZhbHVlOjF9KX1jYXRjaHtqPSExfXRlLmV4cG9ydHM9an0sMzk4MTp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUV2YWxFcnJvcn0sMTY0ODp0ZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt0ZS5leHBvcnRzPUVycm9yfSw0NzI2OnRlPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9UmFuZ2VFcnJvcn0sNjcxMjp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPVJlZmVyZW5jZUVycm9yfSwzNDY0OnRlPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9U3ludGF4RXJyb3J9LDQ0''@;'; put 'put ''NTM6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1UeXBlRXJyb3J9LDM5MTU6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1VUklFcnJvcn0sODg5Mjp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPU9iamVjdH0sNzE4NzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxT''@;'; put 'put ''PWQoNTEwOCksaD0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLG89aCYmImZ1bmN0aW9uIj09dHlwZW9mIGguYXBwbHk/aC5hcHBseTpmdW5jdGlvbihoZSxfZSxtZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGhlLF9lLG1lKX07ST1oJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgaC5vd25LZXlzP2gub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGhlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlKSl9OmZ1bmN0aW9u''@;'; put 'put ''KGhlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGUpfTt2YXIgVD1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGUhPWhlfTtmdW5jdGlvbiBBKCl7QS5pbml0LmNhbGwodGhpcyl9dGUuZXhwb3J0cz1BLHRlLmV4cG9ydHMub25jZT1mdW5jdGlvbiBLKHNl''@;'; put 'put ''LGhlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oX2UsbWUpe2Z1bmN0aW9uIEZlKHMpe3NlLnJlbW92ZUxpc3RlbmVyKGhlLFIpLG1lKHMpfWZ1bmN0aW9uIFIoKXsiZnVuY3Rpb24iPT10eXBlb2Ygc2UucmVtb3ZlTGlzdGVuZXImJnNlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRmUp''@;'; put 'put ''LF9lKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9bmUoc2UsaGUsUix7b25jZTohMH0pLCJlcnJvciIhPT1oZSYmZnVuY3Rpb24gWChzZSxoZSxfZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHNlLm9uJiZuZShzZSwiZXJyb3IiLGhlLF9lKX0oc2UsRmUse29uY2U6ITB9KX0pfSxBLkV2ZW50RW1p''@;'; put 'put ''dHRlcj1BLEEucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEEucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEEucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBNPTEwO2Z1bmN0aW9uIE8oc2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdU''@;'; put 'put ''aGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2Ygc2UpfWZ1bmN0aW9uIEQoc2Upe3JldHVybiB2b2lkIDA9PT1zZS5fbWF4TGlzdGVuZXJzP0EuZGVmYXVsdE1heExpc3RlbmVyczpzZS5fbWF4TGlzdGVuZXJzfWZ1''@;'; put 'put ''bmN0aW9uIEUoc2UsaGUsX2UsbWUpe3ZhciBGZSxSLHM7aWYoTyhfZSksdm9pZCAwPT09KFI9c2UuX2V2ZW50cyk/KFI9c2UuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHNlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09Ui5uZXdMaXN0ZW5lciYmKHNlLmVtaXQoIm5ld0xpc3RlbmVy''@;'; put 'put ''IixoZSxfZS5saXN0ZW5lcj9fZS5saXN0ZW5lcjpfZSksUj1zZS5fZXZlbnRzKSxzPVJbaGVdKSx2b2lkIDA9PT1zKXM9UltoZV09X2UsKytzZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygcz9zPVJbaGVdPW1lP1tfZSxzXTpbcyxfZV06bWU/cy51bnNoaWZ0KF9l''@;'; put 'put ''KTpzLnB1c2goX2UpLChGZT1EKHNlKSk+MCYmcy5sZW5ndGg+RmUmJiFzLndhcm5lZCl7cy53YXJuZWQ9ITA7dmFyIHU9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrcy5sZW5ndGgrIiAiK1N0cmluZyhoZSkrIiBsaXN0ZW5lcnMgYWRk''@;'; put 'put ''ZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7dS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHUuZW1pdHRlcj1zZSx1LnR5cGU9aGUsdS5jb3VudD1zLmxlbmd0aCxmdW5jdGlvbiBmKHNlKXtTJiZTLndhcm4mJlMud2Fybihz''@;'; put 'put ''ZSl9KHUpfXJldHVybiBzZX1mdW5jdGlvbiBCKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJn''@;'; put 'put ''ZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBGKHNlLGhlLF9lKXt2YXIgbWU9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OnNlLHR5cGU6aGUsbGlzdGVuZXI6X2V9LEZlPUIuYmluZChtZSk7cmV0dXJuIEZlLmxpc3RlbmVyPV9l''@;'; put 'put ''LG1lLndyYXBGbj1GZSxGZX1mdW5jdGlvbiBOKHNlLGhlLF9lKXt2YXIgbWU9c2UuX2V2ZW50cztpZih2b2lkIDA9PT1tZSlyZXR1cm5bXTt2YXIgRmU9bWVbaGVdO3JldHVybiB2b2lkIDA9PT1GZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgRmU/X2U/W0ZlLmxpc3RlbmVyfHxGZV06W0ZlXTpf''@;'; put 'put ''ZT9mdW5jdGlvbiBVKHNlKXtmb3IodmFyIGhlPW5ldyBBcnJheShzZS5sZW5ndGgpLF9lPTA7X2U8aGUubGVuZ3RoOysrX2UpaGVbX2VdPXNlW19lXS5saXN0ZW5lcnx8c2VbX2VdO3JldHVybiBoZX0oRmUpOnooRmUsRmUubGVuZ3RoKX1mdW5jdGlvbiBIKHNlKXt2YXIgaGU9dGhpcy5fZXZl''@;'; put 'put ''bnRzO2lmKHZvaWQgMCE9PWhlKXt2YXIgX2U9aGVbc2VdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBfZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1fZSlyZXR1cm4gX2UubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHooc2UsaGUpe2Zvcih2YXIgX2U9bmV3IEFycmF5KGhlKSxtZT0wO21lPGhlOysr''@;'; put 'put ''bWUpX2VbbWVdPXNlW21lXTtyZXR1cm4gX2V9ZnVuY3Rpb24gbmUoc2UsaGUsX2UsbWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZS5vbiltZS5vbmNlP3NlLm9uY2UoaGUsX2UpOnNlLm9uKGhlLF9lKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZS5hZGRFdmVudExpc3RlbmVyKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBzZSk7c2UuYWRkRXZlbnRMaXN0ZW5lcihoZSxmdW5jdGlvbiBGZShSKXttZS5vbmNlJiZzZS5yZW1vdmVFdmVudExpc3Rl''@;'; put 'put ''bmVyKGhlLEZlKSxfZShSKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE19LHNldDpmdW5jdGlvbihzZSl7aWYoIm51bWJlciIhPXR5cGVvZiBzZXx8c2U8MHx8VChzZSkpdGhyb3cg''@;'; put 'put ''bmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytzZSsiLiIpO009c2V9fSksQS5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2''@;'; put 'put ''ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxBLnBy''@;'; put 'put ''b3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oaGUpe2lmKCJudW1iZXIiIT10eXBlb2YgaGV8fGhlPDB8fFQoaGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJl''@;'; put 'put ''Y2VpdmVkICcraGUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWhlLHRoaXN9LEEucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBEKHRoaXMpfSxBLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGhlKXtmb3IodmFyIF9lPVtdLG1lPTE7bWU8YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aDttZSsrKV9lLnB1c2goYXJndW1lbnRzW21lXSk7dmFyIEZlPSJlcnJvciI9PT1oZSxSPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1SKUZlPUZlJiZ2b2lkIDA9PT1SLmVycm9yO2Vsc2UgaWYoIUZlKXJldHVybiExO2lmKEZlKXt2YXIgcztpZihfZS5sZW5ndGg+MCYmKHM9''@;'; put 'put ''X2VbMF0pLHMgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBzO3ZhciB1PW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKHM/IiAoIitzLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgdS5jb250ZXh0PXMsdX12YXIgdj1SW2hlXTtpZih2b2lkIDA9PT12KXJldHVybiExO2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiB2KW8odix0aGlzLF9lKTtlbHNle3ZhciBwPXYubGVuZ3RoLF89eih2LHApO2ZvcihtZT0wO21lPHA7KyttZSlvKF9bbWVdLHRoaXMsX2UpfXJldHVybiEwfSxBLnByb3RvdHlwZS5vbj1BLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihoZSxfZSl7cmV0dXJuIEUodGhp''@;'; put 'put ''cyxoZSxfZSwhMSl9LEEucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihoZSxfZSl7cmV0dXJuIEUodGhpcyxoZSxfZSwhMCl9LEEucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oaGUsX2Upe3JldHVybiBPKF9lKSx0aGlzLm9uKGhlLEYodGhpcyxoZSxfZSkpLHRoaXN9LEEucHJv''@;'; put 'put ''dG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oaGUsX2Upe3JldHVybiBPKF9lKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihoZSxGKHRoaXMsaGUsX2UpKSx0aGlzfSxBLnByb3RvdHlwZS5vZmY9QS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oaGUsX2Upe3ZhciBt''@;'; put 'put ''ZSxGZSxSLHMsdTtpZihPKF9lKSx2b2lkIDA9PT0oRmU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0obWU9RmVbaGVdKSlyZXR1cm4gdGhpcztpZihtZT09PV9lfHxtZS5saXN0ZW5lcj09PV9lKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVj''@;'; put 'put ''dC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBGZVtoZV0sRmUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGhlLG1lLmxpc3RlbmVyfHxfZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG1lKXtmb3IoUj0tMSxzPW1lLmxlbmd0aC0xO3M+PTA7cy0tKWlmKG1l''@;'; put 'put ''W3NdPT09X2V8fG1lW3NdLmxpc3RlbmVyPT09X2Upe3U9bWVbc10ubGlzdGVuZXIsUj1zO2JyZWFrfWlmKFI8MClyZXR1cm4gdGhpczswPT09Uj9tZS5zaGlmdCgpOmZ1bmN0aW9uIFooc2UsaGUpe2Zvcig7aGUrMTxzZS5sZW5ndGg7aGUrKylzZVtoZV09c2VbaGUrMV07c2UucG9wKCl9KG1l''@;'; put 'put ''LFIpLDE9PT1tZS5sZW5ndGgmJihGZVtoZV09bWVbMF0pLHZvaWQgMCE9PUZlLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixoZSx1fHxfZSl9cmV0dXJuIHRoaXN9LEEucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihoZSl7dmFyIF9lLG1l''@;'; put 'put ''LEZlO2lmKHZvaWQgMD09PShtZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW1lLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAw''@;'; put 'put ''IT09bWVbaGVdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbWVbaGVdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgcyxSPU9iamVjdC5rZXlzKG1lKTtmb3IoRmU9MDtGZTxSLmxlbmd0aDsrK0ZlKSJy''@;'; put 'put ''ZW1vdmVMaXN0ZW5lciIhPT0ocz1SW0ZlXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKHMpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mKF9lPW1lW2hlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihoZSxfZSk7ZWxzZSBpZih2b2lkIDAhPT1fZSlmb3IoRmU9X2UubGVuZ3RoLTE7RmU+PTA7RmUtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKGhlLF9lW0ZlXSk7cmV0dXJuIHRoaXN9LEEucHJvdG90eXBlLmxp''@;'; put 'put ''c3RlbmVycz1mdW5jdGlvbihoZSl7cmV0dXJuIE4odGhpcyxoZSwhMCl9LEEucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihoZSl7cmV0dXJuIE4odGhpcyxoZSwhMSl9LEEubGlzdGVuZXJDb3VudD1mdW5jdGlvbihzZSxoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHNlLmxp''@;'; put 'put ''c3RlbmVyQ291bnQ/c2UubGlzdGVuZXJDb3VudChoZSk6SC5jYWxsKHNlLGhlKX0sQS5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1ILEEucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9JKHRoaXMuX2V2ZW50cyk6W119fSwzMDQ4Oih0''@;'; put 'put ''ZSxqLGQpPT57dmFyIFM9ZCg5NTA5KS5CdWZmZXIsaD1kKDIzMTgpO3RlLmV4cG9ydHM9ZnVuY3Rpb24gbyhJLGYsVCxBKXtpZihTLmlzQnVmZmVyKEkpfHwoST1TLmZyb20oSSwiYmluYXJ5IikpLGYmJihTLmlzQnVmZmVyKGYpfHwoZj1TLmZyb20oZiwiYmluYXJ5IikpLDghPT1mLmxlbmd0''@;'; put 'put ''aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIE09VC84LE89Uy5hbGxvYyhNKSxEPVMuYWxsb2MoQXx8MCksRT1TLmFsbG9jKDApO00+MHx8QT4wOyl7dmFyIEI9bmV3IGg7Qi51cGRhdGUoRSksQi51cGRh''@;'; put 'put ''dGUoSSksZiYmQi51cGRhdGUoZiksRT1CLmRpZ2VzdCgpO3ZhciBGPTA7aWYoTT4wKXt2YXIgTj1PLmxlbmd0aC1NO0Y9TWF0aC5taW4oTSxFLmxlbmd0aCksRS5jb3B5KE8sTiwwLEYpLE0tPUZ9aWYoRjxFLmxlbmd0aCYmQT4wKXt2YXIgSD1ELmxlbmd0aC1BLHo9TWF0aC5taW4oQSxFLmxl''@;'; put 'put ''bmd0aC1GKTtFLmNvcHkoRCxILEYsRit6KSxBLT16fX1yZXR1cm4gRS5maWxsKDApLHtrZXk6TyxpdjpEfX19LDQwMjk6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg1MzIwKSxoPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5O3RlLmV4cG9ydHM9ZnVuY3Rpb24oTyxELEUpe2lmKCFTKEQpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBCO2FyZ3VtZW50cy5sZW5ndGg+PTMmJihCPUUpLGZ1bmN0aW9uIEEoTSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWgu''@;'; put 'put ''Y2FsbChNKX0oTyk/ZnVuY3Rpb24oTyxELEUpe2Zvcih2YXIgQj0wLEY9Ty5sZW5ndGg7QjxGO0IrKylvLmNhbGwoTyxCKSYmKG51bGw9PUU/RChPW0JdLEIsTyk6RC5jYWxsKEUsT1tCXSxCLE8pKX0oTyxELEIpOiJzdHJpbmciPT10eXBlb2YgTz9mdW5jdGlvbihPLEQsRSl7Zm9yKHZhciBC''@;'; put 'put ''PTAsRj1PLmxlbmd0aDtCPEY7QisrKW51bGw9PUU/RChPLmNoYXJBdChCKSxCLE8pOkQuY2FsbChFLE8uY2hhckF0KEIpLEIsTyl9KE8sRCxCKTpmdW5jdGlvbihPLEQsRSl7Zm9yKHZhciBCIGluIE8pby5jYWxsKE8sQikmJihudWxsPT1FP0QoT1tCXSxCLE8pOkQuY2FsbChFLE9bQl0sQixP''@;'; put 'put ''KSl9KE8sRCxCKX19LDYyMzA6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGF9LDM4NzM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1KTtjb25zdCBoPWQoNzcpLG89ZCgyNTIw''@;'; put 'put ''KSxJPWQoMTM4MSkubWtkaXJzU3luYyxmPWQoMzE4KS51dGltZXNNaWxsaXNTeW5jLFQ9ZCgyNzMzKTtmdW5jdGlvbiBNKGhlLF9lLG1lLEZlKXtjb25zdCBzPShGZS5kZXJlZmVyZW5jZT9oLnN0YXRTeW5jOmgubHN0YXRTeW5jKShfZSk7aWYocy5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBaKGhlLF9lLG1lLEZlLFIpe3JldHVybiBfZT9LKG1lLEZlLFIpOmZ1bmN0aW9uIFUoaGUsX2UsbWUsRmUpe3JldHVybiBoLm1rZGlyU3luYyhtZSksSyhfZSxtZSxGZSksSChtZSxoZSl9KGhlLm1vZGUsbWUsRmUsUil9KHMsaGUsX2UsbWUsRmUpO2lmKHMuaXNGaWxlKCl8fHMuaXND''@;'; put 'put ''aGFyYWN0ZXJEZXZpY2UoKXx8cy5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIE8oaGUsX2UsbWUsRmUsUil7cmV0dXJuIF9lP2Z1bmN0aW9uIEQoaGUsX2UsbWUsRmUpe2lmKEZlLm92ZXJ3cml0ZSlyZXR1cm4gaC51bmxpbmtTeW5jKG1lKSxFKGhlLF9lLG1lLEZlKTtpZihGZS5l''@;'; put 'put ''cnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHttZX0nIGFscmVhZHkgZXhpc3RzYCl9KGhlLG1lLEZlLFIpOkUoaGUsbWUsRmUsUil9KHMsaGUsX2UsbWUsRmUpO2lmKHMuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24gbmUoaGUsX2UsbWUsRmUpe2xldCBSPWgucmVhZGxp''@;'; put 'put ''bmtTeW5jKF9lKTtpZihGZS5kZXJlZmVyZW5jZSYmKFI9by5yZXNvbHZlKFMuY3dkKCksUikpLGhlKXtsZXQgczt0cnl7cz1oLnJlYWRsaW5rU3luYyhtZSl9Y2F0Y2godSl7aWYoIkVJTlZBTCI9PT11LmNvZGV8fCJVTktOT1dOIj09PXUuY29kZSlyZXR1cm4gaC5zeW1saW5rU3luYyhSLG1l''@;'; put 'put ''KTt0aHJvdyB1fWlmKEZlLmRlcmVmZXJlbmNlJiYocz1vLnJlc29sdmUoUy5jd2QoKSxzKSksVC5pc1NyY1N1YmRpcihSLHMpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Un0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7c30nLmApO2lmKFQuaXNTcmNTdWJkaXIo''@;'; put 'put ''cyxSKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7c30nIHdpdGggJyR7Un0nLmApO3JldHVybiBmdW5jdGlvbiBzZShoZSxfZSl7cmV0dXJuIGgudW5saW5rU3luYyhfZSksaC5zeW1saW5rU3luYyhoZSxfZSl9KFIsbWUpfXJldHVybiBoLnN5bWxpbmtTeW5jKFIsbWUp''@;'; put 'put ''fShoZSxfZSxtZSxGZSk7dGhyb3cgcy5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtfZX1gKTpzLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7X2V9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7X2V9''@;'; put 'put ''YCl9ZnVuY3Rpb24gRShoZSxfZSxtZSxGZSl7cmV0dXJuIGguY29weUZpbGVTeW5jKF9lLG1lKSxGZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJmZ1bmN0aW9uIEIoaGUsX2UsbWUpeyhmdW5jdGlvbiBGKGhlKXtyZXR1cm4hKDEyOCZoZSl9KShoZSkmJmZ1bmN0aW9uIE4oaGUsX2Upe0goaGUsMTI4''@;'; put 'put ''fF9lKX0obWUsaGUpLGZ1bmN0aW9uIHooaGUsX2Upe2NvbnN0IG1lPWguc3RhdFN5bmMoaGUpO2YoX2UsbWUuYXRpbWUsbWUubXRpbWUpfShfZSxtZSl9KGhlLm1vZGUsX2UsbWUpLEgobWUsaGUubW9kZSl9ZnVuY3Rpb24gSChoZSxfZSl7cmV0dXJuIGguY2htb2RTeW5jKGhlLF9lKX1mdW5j''@;'; put 'put ''dGlvbiBLKGhlLF9lLG1lKXtjb25zdCBGZT1oLm9wZW5kaXJTeW5jKGhlKTt0cnl7bGV0IFI7Zm9yKDtudWxsIT09KFI9RmUucmVhZFN5bmMoKSk7KVgoUi5uYW1lLGhlLF9lLG1lKX1maW5hbGx5e0ZlLmNsb3NlU3luYygpfX1mdW5jdGlvbiBYKGhlLF9lLG1lLEZlKXtjb25zdCBSPW8uam9p''@;'; put 'put ''bihfZSxoZSkscz1vLmpvaW4obWUsaGUpO2lmKEZlLmZpbHRlciYmIUZlLmZpbHRlcihSLHMpKXJldHVybjtjb25zdHtkZXN0U3RhdDp1fT1ULmNoZWNrUGF0aHNTeW5jKFIscywiY29weSIsRmUpO3JldHVybiBNKHUsUixzLEZlKX10ZS5leHBvcnRzPWZ1bmN0aW9uIEEoaGUsX2UsbWUpeyJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBtZSYmKG1lPXtmaWx0ZXI6bWV9KSwobWU9bWV8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gbWUpfHwhIW1lLmNsb2JiZXIsbWUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gbWU/ISFtZS5vdmVyd3JpdGU6bWUuY2xvYmJlcixtZS5wcmVzZXJ2ZVRpbWVzdGFt''@;'; put 'put ''cHMmJiJpYTMyIj09PVMuYXJjaCYmUy5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNz''@;'; put 'put ''dWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMiIpO2NvbnN0e3NyY1N0YXQ6RmUsZGVzdFN0YXQ6Un09VC5jaGVja1BhdGhzU3luYyhoZSxfZSwiY29weSIsbWUpO2lmKFQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoaGUsRmUsX2UsImNvcHkiKSxtZS5maWx0ZXImJiFtZS5maWx0''@;'; put 'put ''ZXIoaGUsX2UpKXJldHVybjtjb25zdCBzPW8uZGlybmFtZShfZSk7cmV0dXJuIGguZXhpc3RzU3luYyhzKXx8SShzKSxNKFIsaGUsX2UsbWUpfX0sNzE4OToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQxNTUpO2NvbnN0IGg9ZCg3NzQ5KSxvPWQoMjUyMCkse21rZGlyczpJfT1k''@;'; put 'put ''KDEzODEpLHtwYXRoRXhpc3RzOmZ9PWQoOTI1Nykse3V0aW1lc01pbGxpczpUfT1kKDMxOCksQT1kKDI3MzMpO2Z1bmN0aW9uIE8oKXtyZXR1cm4oTz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooX2UsbWUsRmU9e30peyJmdW5jdGlvbiI9PXR5cGVvZiBGZSYmKEZlPXtmaWx0ZXI6RmV9''@;'; put 'put ''KSxGZS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gRmUpfHwhIUZlLmNsb2JiZXIsRmUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gRmU/ISFGZS5vdmVyd3JpdGU6RmUuY2xvYmJlcixGZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PVMuYXJjaCYmUy5lbWl0V2FybmluZygiVXNpbmcgdGhl''@;'; put 'put ''IHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMSIpO2NvbnN0''@;'; put 'put ''e3NyY1N0YXQ6UixkZXN0U3RhdDpzfT15aWVsZCBBLmNoZWNrUGF0aHMoX2UsbWUsImNvcHkiLEZlKTtpZih5aWVsZCBBLmNoZWNrUGFyZW50UGF0aHMoX2UsUixtZSwiY29weSIpLCEoeWllbGQgRChfZSxtZSxGZSkpKXJldHVybjtjb25zdCB2PW8uZGlybmFtZShtZSk7KHlpZWxkIGYodikp''@;'; put 'put ''fHwoeWllbGQgSSh2KSkseWllbGQgQihzLF9lLG1lLEZlKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRChfZSxtZSxGZSl7cmV0dXJuIEUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEUoKXtyZXR1cm4oRT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooX2Us''@;'; put 'put ''bWUsRmUpe3JldHVybiFGZS5maWx0ZXJ8fEZlLmZpbHRlcihfZSxtZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEIoX2UsbWUsRmUsUil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEYoKXtyZXR1cm4gRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5j''@;'; put 'put ''dGlvbiooX2UsbWUsRmUsUil7Y29uc3QgdT15aWVsZChSLmRlcmVmZXJlbmNlP2guc3RhdDpoLmxzdGF0KShtZSk7aWYodS5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBYKF9lLG1lLEZlLFIscyl7cmV0dXJuIG5lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0odSxfZSxtZSxGZSxSKTtp''@;'; put 'put ''Zih1LmlzRmlsZSgpfHx1LmlzQ2hhcmFjdGVyRGV2aWNlKCl8fHUuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbiBOKF9lLG1lLEZlLFIscyl7cmV0dXJuIEguYXBwbHkodGhpcyxhcmd1bWVudHMpfSh1LF9lLG1lLEZlLFIpO2lmKHUuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gc2UoX2UsbWUsRmUsUil7cmV0dXJuIGhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oX2UsbWUsRmUsUik7dGhyb3cgdS5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHttZX1gKTp1LmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkg''@;'; put 'put ''YSBGSUZPIHBpcGU6ICR7bWV9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7bWV9YCl9KSxGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBIKCl7cmV0dXJuKEg9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKF9lLG1lLEZlLFIscyl7aWYoIW1lKXJldHVybiB6KF9lLEZl''@;'; put 'put ''LFIscyk7aWYocy5vdmVyd3JpdGUpcmV0dXJuIHlpZWxkIGgudW5saW5rKFIpLHooX2UsRmUsUixzKTtpZihzLmVycm9yT25FeGlzdCl0aHJvdyBuZXcgRXJyb3IoYCcke1J9JyBhbHJlYWR5IGV4aXN0c2ApfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB6KF9lLG1lLEZlLFIp''@;'; put 'put ''e3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBaKCl7cmV0dXJuKFo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKF9lLG1lLEZlLFIpe2lmKHlpZWxkIGguY29weUZpbGUobWUsRmUpLFIucHJlc2VydmVUaW1lc3RhbXBzKXsoZnVuY3Rpb24gVShfZSl7cmV0dXJu''@;'; put 'put ''ISgxMjgmX2UpfSkoX2UubW9kZSkmJih5aWVsZCBmdW5jdGlvbiBLKF9lLG1lKXtyZXR1cm4gaC5jaG1vZChfZSwxMjh8bWUpfShGZSxfZS5tb2RlKSk7Y29uc3Qgcz15aWVsZCBoLnN0YXQobWUpO3lpZWxkIFQoRmUscy5hdGltZSxzLm10aW1lKX1yZXR1cm4gaC5jaG1vZChGZSxfZS5tb2Rl''@;'; put 'put ''KX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbmUoKXtyZXR1cm4obmU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKF9lLG1lLEZlLFIscyl7bWV8fCh5aWVsZCBoLm1rZGlyKFIpKTtjb25zdCB1PVtdO3ZhciBfLHY9ITEscD0hMTt0cnl7Zm9yKHZhciBMLGs9X2FzeW5j''@;'; put 'put ''SXRlcmF0b3IoeWllbGQgaC5vcGVuZGlyKEZlKSk7dj0hKEw9eWllbGQgay5uZXh0KCkpLmRvbmU7dj0hMSl7Y29uc3QgeT1MLnZhbHVlO3tjb25zdCBsPW8uam9pbihGZSx5Lm5hbWUpLGI9by5qb2luKFIseS5uYW1lKTt1LnB1c2goRChsLGIscykudGhlbihxPT57aWYocSlyZXR1cm4gQS5j''@;'; put 'put ''aGVja1BhdGhzKGwsYiwiY29weSIscykudGhlbigoe2Rlc3RTdGF0Okd9KT0+QihHLGwsYixzKSl9KSl9fX1jYXRjaCh5KXtwPSEwLF89eX1maW5hbGx5e3RyeXt2JiZudWxsIT1rLnJldHVybiYmKHlpZWxkIGsucmV0dXJuKCkpfWZpbmFsbHl7aWYocCl0aHJvdyBffX15aWVsZCBQcm9taXNl''@;'; put 'put ''LmFsbCh1KSxtZXx8KHlpZWxkIGguY2htb2QoUixfZS5tb2RlKSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGhlKCl7cmV0dXJuKGhlPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihfZSxtZSxGZSxSKXtsZXQgcz15aWVsZCBoLnJlYWRsaW5rKG1lKTtpZihSLmRlcmVm''@;'; put 'put ''ZXJlbmNlJiYocz1vLnJlc29sdmUoUy5jd2QoKSxzKSksIV9lKXJldHVybiBoLnN5bWxpbmsocyxGZSk7bGV0IHU9bnVsbDt0cnl7dT15aWVsZCBoLnJlYWRsaW5rKEZlKX1jYXRjaCh2KXtpZigiRUlOVkFMIj09PXYuY29kZXx8IlVOS05PV04iPT09di5jb2RlKXJldHVybiBoLnN5bWxpbmso''@;'; put 'put ''cyxGZSk7dGhyb3cgdn1pZihSLmRlcmVmZXJlbmNlJiYodT1vLnJlc29sdmUoUy5jd2QoKSx1KSksQS5pc1NyY1N1YmRpcihzLHUpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7c30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7dX0nLmApO2lmKEEuaXNTcmNTdWJk''@;'; put 'put ''aXIodSxzKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7dX0nIHdpdGggJyR7c30nLmApO3JldHVybiB5aWVsZCBoLnVubGluayhGZSksaC5zeW1saW5rKHMsRmUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX10ZS5leHBvcnRzPWZ1bmN0aW9uIE0oX2UsbWUpe3JldHVy''@;'; put 'put ''biBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDY0NjQ6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUz1kKDg5ODEpLmZyb21Qcm9taXNlO3RlLmV4cG9ydHM9e2NvcHk6UyhkKDcxODkpKSxjb3B5U3luYzpkKDM4NzMpfX0sNTU5MDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25z''@;'; put 'put ''dCBTPWQoODk4MSkuZnJvbVByb21pc2UsaD1kKDc3NDkpLG89ZCgyNTIwKSxJPWQoMTM4MSksZj1kKDQ1NDIpLFQ9UyhmdW5jdGlvbigpe3ZhciBNPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihEKXtsZXQgRTt0cnl7RT15aWVsZCBoLnJlYWRkaXIoRCl9Y2F0Y2h7cmV0dXJuIEkubWtk''@;'; put 'put ''aXJzKEQpfXJldHVybiBQcm9taXNlLmFsbChFLm1hcChCPT5mLnJlbW92ZShvLmpvaW4oRCxCKSkpKX0pO3JldHVybiBmdW5jdGlvbiBPKEQpe3JldHVybiBNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpO2Z1bmN0aW9uIEEoTSl7bGV0IE87dHJ5e089aC5yZWFkZGlyU3luYyhNKX1jYXRj''@;'; put 'put ''aHtyZXR1cm4gSS5ta2RpcnNTeW5jKE0pfU8uZm9yRWFjaChEPT57RD1vLmpvaW4oTSxEKSxmLnJlbW92ZVN5bmMoRCl9KX10ZS5leHBvcnRzPXtlbXB0eURpclN5bmM6QSxlbXB0eWRpclN5bmM6QSxlbXB0eURpcjpULGVtcHR5ZGlyOlR9fSw2NTMwOih0ZSxqLGQpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NvbnN0IFM9ZCg4OTgxKS5mcm9tUHJvbWlzZSxoPWQoMjUyMCksbz1kKDc3NDkpLEk9ZCgxMzgxKTtmdW5jdGlvbiBUKCl7cmV0dXJuKFQ9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE0pe2xldCBPO3RyeXtPPXlpZWxkIG8uc3RhdChNKX1jYXRjaHt9aWYoTyYmTy5pc0ZpbGUoKSly''@;'; put 'put ''ZXR1cm47Y29uc3QgRD1oLmRpcm5hbWUoTSk7bGV0IEU9bnVsbDt0cnl7RT15aWVsZCBvLnN0YXQoRCl9Y2F0Y2goQil7aWYoIkVOT0VOVCI9PT1CLmNvZGUpcmV0dXJuIHlpZWxkIEkubWtkaXJzKEQpLHZvaWQoeWllbGQgby53cml0ZUZpbGUoTSwiIikpO3Rocm93IEJ9RS5pc0RpcmVjdG9y''@;'; put 'put ''eSgpP3lpZWxkIG8ud3JpdGVGaWxlKE0sIiIpOnlpZWxkIG8ucmVhZGRpcihEKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dGUuZXhwb3J0cz17Y3JlYXRlRmlsZTpTKGZ1bmN0aW9uIGYoTSl7cmV0dXJuIFQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlRmlsZVN5bmM6ZnVuY3Rp''@;'; put 'put ''b24gQShNKXtsZXQgTzt0cnl7Tz1vLnN0YXRTeW5jKE0pfWNhdGNoe31pZihPJiZPLmlzRmlsZSgpKXJldHVybjtjb25zdCBEPWguZGlybmFtZShNKTt0cnl7by5zdGF0U3luYyhEKS5pc0RpcmVjdG9yeSgpfHxvLnJlYWRkaXJTeW5jKEQpfWNhdGNoKEUpe2lmKCFFfHwiRU5PRU5UIiE9PUUu''@;'; put 'put ''Y29kZSl0aHJvdyBFO0kubWtkaXJzU3luYyhEKX1vLndyaXRlRmlsZVN5bmMoTSwiIil9fX0sMTcyMDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtjcmVhdGVGaWxlOlMsY3JlYXRlRmlsZVN5bmM6aH09ZCg2NTMwKSx7Y3JlYXRlTGluazpvLGNyZWF0ZUxpbmtTeW5jOkl9PWQoNDE0''@;'; put 'put ''Nykse2NyZWF0ZVN5bWxpbms6ZixjcmVhdGVTeW1saW5rU3luYzpUfT1kKDM2MzUpO3RlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6UyxjcmVhdGVGaWxlU3luYzpoLGVuc3VyZUZpbGU6UyxlbnN1cmVGaWxlU3luYzpoLGNyZWF0ZUxpbms6byxjcmVhdGVMaW5rU3luYzpJLGVuc3VyZUxpbms6byxl''@;'; put 'put ''bnN1cmVMaW5rU3luYzpJLGNyZWF0ZVN5bWxpbms6ZixjcmVhdGVTeW1saW5rU3luYzpULGVuc3VyZVN5bWxpbms6ZixlbnN1cmVTeW1saW5rU3luYzpUfX0sNDE0NzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBTPWQoODk4MSkuZnJvbVByb21pc2UsaD1kKDI1MjApLG89ZCg3NzQ5''@;'; put 'put ''KSxJPWQoMTM4MSkse3BhdGhFeGlzdHM6Zn09ZCg5MjU3KSx7YXJlSWRlbnRpY2FsOlR9PWQoMjczMyk7ZnVuY3Rpb24gTSgpe3JldHVybihNPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihELEUpe2xldCBCLEY7dHJ5e0I9eWllbGQgby5sc3RhdChFKX1jYXRjaHt9dHJ5e0Y9eWllbGQg''@;'; put 'put ''by5sc3RhdChEKX1jYXRjaCh6KXt0aHJvdyB6Lm1lc3NhZ2U9ei5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLHp9aWYoQiYmVChGLEIpKXJldHVybjtjb25zdCBOPWguZGlybmFtZShFKTsoeWllbGQgZihOKSl8fCh5aWVsZCBJLm1rZGlycyhOKSkseWllbGQgby5saW5r''@;'; put 'put ''KEQsRSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXRlLmV4cG9ydHM9e2NyZWF0ZUxpbms6UyhmdW5jdGlvbiBBKEQsRSl7cmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rpb24gTyhELEUpe2xldCBCO3RyeXtCPW8ubHN0YXRTeW5jKEUpfWNh''@;'; put 'put ''dGNoe310cnl7Y29uc3QgSD1vLmxzdGF0U3luYyhEKTtpZihCJiZUKEgsQikpcmV0dXJufWNhdGNoKEgpe3Rocm93IEgubWVzc2FnZT1ILm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksSH1jb25zdCBGPWguZGlybmFtZShFKTtyZXR1cm4gby5leGlzdHNTeW5jKEYpfHxJ''@;'; put 'put ''Lm1rZGlyc1N5bmMoRiksby5saW5rU3luYyhELEUpfX19LDYwNzI6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUz1kKDI1MjApLGg9ZCg3NzQ5KSx7cGF0aEV4aXN0czpvfT1kKDkyNTcpLEk9ZCg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBUKCl7cmV0dXJuKFQ9X2FzeW5jVG9H''@;'; put 'put ''ZW5lcmF0b3IoZnVuY3Rpb24qKE0sTyl7aWYoUy5pc0Fic29sdXRlKE0pKXt0cnl7eWllbGQgaC5sc3RhdChNKX1jYXRjaChGKXt0aHJvdyBGLm1lc3NhZ2U9Ri5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLEZ9cmV0dXJue3RvQ3dkOk0sdG9Ec3Q6TX19Y29uc3Qg''@;'; put 'put ''RD1TLmRpcm5hbWUoTyksRT1TLmpvaW4oRCxNKTtpZih5aWVsZCBvKEUpKXJldHVybnt0b0N3ZDpFLHRvRHN0Ok19O3RyeXt5aWVsZCBoLmxzdGF0KE0pfWNhdGNoKEYpe3Rocm93IEYubWVzc2FnZT1GLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksRn1yZXR1cm57''@;'; put 'put ''dG9Dd2Q6TSx0b0RzdDpTLnJlbGF0aXZlKEQsTSl9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX10ZS5leHBvcnRzPXtzeW1saW5rUGF0aHM6SShmdW5jdGlvbiBmKE0sTyl7cmV0dXJuIFQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksc3ltbGlua1BhdGhzU3luYzpmdW5jdGlvbiBBKE0sTyl7''@;'; put 'put ''aWYoUy5pc0Fic29sdXRlKE0pKXtpZighaC5leGlzdHNTeW5jKE0pKXRocm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpNLHRvRHN0Ok19fWNvbnN0IEQ9Uy5kaXJuYW1lKE8pLEU9Uy5qb2luKEQsTSk7aWYoaC5leGlzdHNTeW5j''@;'; put 'put ''KEUpKXJldHVybnt0b0N3ZDpFLHRvRHN0Ok19O2lmKCFoLmV4aXN0c1N5bmMoTSkpdGhyb3cgbmV3IEVycm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOk0sdG9Ec3Q6Uy5yZWxhdGl2ZShELE0pfX19fSw5MjU5Oih0ZSxqLGQpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO2NvbnN0IFM9ZCg3NzQ5KSxoPWQoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gSSgpe3JldHVybihJPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihULEEpe2lmKEEpcmV0dXJuIEE7bGV0IE07dHJ5e009eWllbGQgUy5sc3RhdChUKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJu''@;'; put 'put ''IE0mJk0uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXRlLmV4cG9ydHM9e3N5bWxpbmtUeXBlOmgoZnVuY3Rpb24gbyhULEEpe3JldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtUeXBlU3luYzpmdW5jdGlvbiBmKFQsQSl7''@;'; put 'put ''aWYoQSlyZXR1cm4gQTtsZXQgTTt0cnl7TT1TLmxzdGF0U3luYyhUKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIE0mJk0uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0sMzYzNToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBTPWQoODk4MSkuZnJvbVByb21pc2UsaD1kKDI1''@;'; put 'put ''MjApLG89ZCg3NzQ5KSx7bWtkaXJzOkksbWtkaXJzU3luYzpmfT1kKDEzODEpLHtzeW1saW5rUGF0aHM6VCxzeW1saW5rUGF0aHNTeW5jOkF9PWQoNjA3Mikse3N5bWxpbmtUeXBlOk0sc3ltbGlua1R5cGVTeW5jOk99PWQoOTI1OSkse3BhdGhFeGlzdHM6RH09ZCg5MjU3KSx7YXJlSWRlbnRp''@;'; put 'put ''Y2FsOkV9PWQoMjczMyk7ZnVuY3Rpb24gRigpe3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihILHosWil7bGV0IFU7dHJ5e1U9eWllbGQgby5sc3RhdCh6KX1jYXRjaHt9aWYoVSYmVS5pc1N5bWJvbGljTGluaygpKXtjb25zdFtzZSxoZV09eWllbGQgUHJvbWlzZS5hbGwo''@;'; put 'put ''W28uc3RhdChIKSxvLnN0YXQoeildKTtpZihFKHNlLGhlKSlyZXR1cm59Y29uc3QgSz15aWVsZCBUKEgseik7SD1LLnRvRHN0O2NvbnN0IFg9eWllbGQgTShLLnRvQ3dkLFopLG5lPWguZGlybmFtZSh6KTtyZXR1cm4oeWllbGQgRChuZSkpfHwoeWllbGQgSShuZSkpLG8uc3ltbGluayhILHos''@;'; put 'put ''WCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXRlLmV4cG9ydHM9e2NyZWF0ZVN5bWxpbms6UyhmdW5jdGlvbiBCKEgseixaKXtyZXR1cm4gRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbiBOKEgseixaKXtsZXQgVTt0cnl7VT1vLmxzdGF0U3lu''@;'; put 'put ''Yyh6KX1jYXRjaHt9aWYoVSYmVS5pc1N5bWJvbGljTGluaygpKXtjb25zdCBzZT1vLnN0YXRTeW5jKEgpLGhlPW8uc3RhdFN5bmMoeik7aWYoRShzZSxoZSkpcmV0dXJufWNvbnN0IEs9QShILHopO0g9Sy50b0RzdCxaPU8oSy50b0N3ZCxaKTtjb25zdCBYPWguZGlybmFtZSh6KTtyZXR1cm4g''@;'; put 'put ''by5leGlzdHNTeW5jKFgpfHxmKFgpLG8uc3ltbGlua1N5bmMoSCx6LFopfX19LDc3NDk6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1KTtjb25zdCBoPWQoODk4MSkuZnJvbUNhbGxiYWNrLG89ZCg3NyksST1bImFjY2VzcyIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNob3du''@;'; put 'put ''IiwiY2xvc2UiLCJjb3B5RmlsZSIsImNwIiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFzeW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0ZSIsImZ1dGltZXMiLCJnbG9iIiwibGNobW9kIiwibGNob3duIiwibHV0aW1lcyIsImxpbmsiLCJsc3RhdCIsIm1rZGlyIiwibWtkdGVtcCIsIm9w''@;'; put 'put ''ZW4iLCJvcGVuZGlyIiwicmVhZGRpciIsInJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInJtIiwicm1kaXIiLCJzdGF0Iiwic3RhdGZzIiwic3ltbGluayIsInRydW5jYXRlIiwidW5saW5rIiwidXRpbWVzIiwid3JpdGVGaWxlIl0uZmlsdGVyKGY9PiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBvW2ZdKTtPYmplY3QuYXNzaWduKGosbyksSS5mb3JFYWNoKGY9PntqW2ZdPWgob1tmXSl9KSxqLmV4aXN0cz1mdW5jdGlvbihmLFQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBUP28uZXhpc3RzKGYsVCk6bmV3IFByb21pc2UoQT0+by5leGlzdHMoZixBKSl9LGoucmVh''@;'; put 'put ''ZD1mdW5jdGlvbihmLFQsQSxNLE8sRCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEQ/by5yZWFkKGYsVCxBLE0sTyxEKTpuZXcgUHJvbWlzZSgoRSxCKT0+e28ucmVhZChmLFQsQSxNLE8sKEYsTixIKT0+e2lmKEYpcmV0dXJuIEIoRik7RSh7Ynl0ZXNSZWFkOk4sYnVmZmVyOkh9KX0pfSl9''@;'; put 'put ''LGoud3JpdGU9ZnVuY3Rpb24oZixULC4uLkEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBBW0EubGVuZ3RoLTFdP28ud3JpdGUoZixULC4uLkEpOm5ldyBQcm9taXNlKChNLE8pPT57by53cml0ZShmLFQsLi4uQSwoRCxFLEIpPT57aWYoRClyZXR1cm4gTyhEKTtNKHtieXRlc1dyaXR0ZW46''@;'; put 'put ''RSxidWZmZXI6Qn0pfSl9KX0sai5yZWFkdj1mdW5jdGlvbihmLFQsLi4uQSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEFbQS5sZW5ndGgtMV0/by5yZWFkdihmLFQsLi4uQSk6bmV3IFByb21pc2UoKE0sTyk9PntvLnJlYWR2KGYsVCwuLi5BLChELEUsQik9PntpZihEKXJldHVybiBPKEQp''@;'; put 'put ''O00oe2J5dGVzUmVhZDpFLGJ1ZmZlcnM6Qn0pfSl9KX0sai53cml0ZXY9ZnVuY3Rpb24oZixULC4uLkEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBBW0EubGVuZ3RoLTFdP28ud3JpdGV2KGYsVCwuLi5BKTpuZXcgUHJvbWlzZSgoTSxPKT0+e28ud3JpdGV2KGYsVCwuLi5BLChELEUsQik9''@;'; put 'put ''PntpZihEKXJldHVybiBPKEQpO00oe2J5dGVzV3JpdHRlbjpFLGJ1ZmZlcnM6Qn0pfSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIG8ucmVhbHBhdGgubmF0aXZlP2oucmVhbHBhdGgubmF0aXZlPWgoby5yZWFscGF0aC5uYXRpdmUpOlMuZW1pdFdhcm5pbmcoImZzLnJlYWxwYXRoLm5hdGl2ZSBp''@;'; put 'put ''cyBub3QgYSBmdW5jdGlvbi4gSXMgZnMgYmVpbmcgbW9ua2V5LXBhdGNoZWQ/IiwiV2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAzIil9LDU2NzQ6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz17Li4uZCg3NzQ5KSwuLi5kKDY0NjQpLC4uLmQoNTU5MCksLi4uZCgxNzIwKSwu''@;'; put 'put ''Li5kKDY1NzMpLC4uLmQoMTM4MSksLi4uZCg1MzApLC4uLmQoNDY3MCksLi4uZCg5MjU3KSwuLi5kKDQ1NDIpfX0sNjU3MzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBTPWQoODk4MSkuZnJvbVByb21pc2UsaD1kKDcxODMpO2gub3V0cHV0SnNvbj1TKGQoMzUwOCkpLGgub3V0cHV0''@;'; put 'put ''SnNvblN5bmM9ZCg5NTc4KSxoLm91dHB1dEpTT049aC5vdXRwdXRKc29uLGgub3V0cHV0SlNPTlN5bmM9aC5vdXRwdXRKc29uU3luYyxoLndyaXRlSlNPTj1oLndyaXRlSnNvbixoLndyaXRlSlNPTlN5bmM9aC53cml0ZUpzb25TeW5jLGgucmVhZEpTT049aC5yZWFkSnNvbixoLnJlYWRKU09O''@;'; put 'put ''U3luYz1oLnJlYWRKc29uU3luYyx0ZS5leHBvcnRzPWh9LDcxODM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUz1kKDY4MTMpO3RlLmV4cG9ydHM9e3JlYWRKc29uOlMucmVhZEZpbGUscmVhZEpzb25TeW5jOlMucmVhZEZpbGVTeW5jLHdyaXRlSnNvbjpTLndyaXRlRmlsZSx3cml0''@;'; put 'put ''ZUpzb25TeW5jOlMud3JpdGVGaWxlU3luY319LDk1Nzg6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5OlN9PWQoNjc4MCkse291dHB1dEZpbGVTeW5jOmh9PWQoNDY3MCk7dGUuZXhwb3J0cz1mdW5jdGlvbiBvKEksZixUKXtjb25zdCBBPVMoZixUKTtoKEksQSxUKX19''@;'; put 'put ''LDM1MDg6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5OlN9PWQoNjc4MCkse291dHB1dEZpbGU6aH09ZCg0NjcwKTtmdW5jdGlvbiBJKCl7cmV0dXJuKEk9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKGYsVCxBPXt9KXtjb25zdCBNPVMoVCxBKTt5aWVsZCBoKGYs''@;'; put 'put ''TSxBKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dGUuZXhwb3J0cz1mdW5jdGlvbiBvKGYsVCl7cmV0dXJuIEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sMTM4MToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBTPWQoODk4MSkuZnJvbVByb21pc2Use21ha2VEaXI6aCxtYWtlRGly''@;'; put 'put ''U3luYzpvfT1kKDgyMzMpLEk9UyhoKTt0ZS5leHBvcnRzPXtta2RpcnM6SSxta2RpcnNTeW5jOm8sbWtkaXJwOkksbWtkaXJwU3luYzpvLGVuc3VyZURpcjpJLGVuc3VyZURpclN5bmM6b319LDgyMzM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUz1kKDc3NDkpLHtjaGVja1BhdGg6''@;'; put 'put ''aH09ZCgzNDY4KSxvPUk9PiJudW1iZXIiPT10eXBlb2YgST9JOnttb2RlOjUxMSwuLi5JfS5tb2RlO3RlLmV4cG9ydHMubWFrZURpcj1mdW5jdGlvbigpe3ZhciBJPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihmLFQpe3JldHVybiBoKGYpLFMubWtkaXIoZix7bW9kZTpvKFQpLHJlY3Vy''@;'; put 'put ''c2l2ZTohMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKGYsVCl7cmV0dXJuIEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx0ZS5leHBvcnRzLm1ha2VEaXJTeW5jPShJLGYpPT4oaChJKSxTLm1rZGlyU3luYyhJLHttb2RlOm8oZikscmVjdXJzaXZlOiEwfSkpfSwzNDY4Oih0ZSxqLGQpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSk7Y29uc3QgaD1kKDI1MjApO3RlLmV4cG9ydHMuY2hlY2tQYXRoPWZ1bmN0aW9uKEkpe2lmKCJ3aW4zMiI9PT1TLnBsYXRmb3JtJiYvWzw+OiJ8PypdLy50ZXN0KEkucmVwbGFjZShoLnBhcnNlKEkpLnJvb3QsIiIpKSl7Y29uc3QgVD1uZXcgRXJyb3Io''@;'; put 'put ''YFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke0l9YCk7dGhyb3cgVC5jb2RlPSJFSU5WQUwiLFR9fX0sNTMwOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFM9ZCg4OTgxKS5mcm9tUHJvbWlzZTt0ZS5leHBvcnRzPXttb3ZlOlMoZCg0MzYpKSxtb3ZlU3luYzpkKDM3''@;'; put 'put ''MzYpfX0sMzczNjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBTPWQoNzcpLGg9ZCgyNTIwKSxvPWQoNjQ2NCkuY29weVN5bmMsST1kKDQ1NDIpLnJlbW92ZVN5bmMsZj1kKDEzODEpLm1rZGlycFN5bmMsVD1kKDI3MzMpO2Z1bmN0aW9uIEQoQixGLE4pe3RyeXtTLnJlbmFtZVN5bmMo''@;'; put 'put ''QixGKX1jYXRjaChIKXtpZigiRVhERVYiIT09SC5jb2RlKXRocm93IEg7cmV0dXJuIGZ1bmN0aW9uIEUoQixGLE4pe3JldHVybiBvKEIsRix7b3ZlcndyaXRlOk4sZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1wczohMH0pLEkoQil9KEIsRixOKX19dGUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biBBKEIsRixOKXtjb25zdCBIPShOPU58fHt9KS5vdmVyd3JpdGV8fE4uY2xvYmJlcnx8ITEse3NyY1N0YXQ6eixpc0NoYW5naW5nQ2FzZTpaPSExfT1ULmNoZWNrUGF0aHNTeW5jKEIsRiwibW92ZSIsTik7cmV0dXJuIFQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoQix6LEYsIm1vdmUiKSxmdW5j''@;'; put 'put ''dGlvbiBNKEIpe2NvbnN0IEY9aC5kaXJuYW1lKEIpO3JldHVybiBoLnBhcnNlKEYpLnJvb3Q9PT1GfShGKXx8ZihoLmRpcm5hbWUoRikpLGZ1bmN0aW9uIE8oQixGLE4sSCl7aWYoSClyZXR1cm4gRChCLEYsTik7aWYoTilyZXR1cm4gSShGKSxEKEIsRixOKTtpZihTLmV4aXN0c1N5bmMoRikp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpO3JldHVybiBEKEIsRixOKX0oQixGLEgsWil9fSw0MzY6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUz1kKDc3NDkpLGg9ZCgyNTIwKSx7Y29weTpvfT1kKDY0NjQpLHtyZW1vdmU6SX09ZCg0NTQyKSx7bWtkaXJw''@;'; put 'put ''OmZ9PWQoMTM4MSkse3BhdGhFeGlzdHM6VH09ZCg5MjU3KSxBPWQoMjczMyk7ZnVuY3Rpb24gTygpe3JldHVybiBPPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOLEgsej17fSl7Y29uc3QgWj16Lm92ZXJ3cml0ZXx8ei5jbG9iYmVyfHwhMSx7c3JjU3RhdDpVLGlzQ2hhbmdpbmdDYXNl''@;'; put 'put ''Oks9ITF9PXlpZWxkIEEuY2hlY2tQYXRocyhOLEgsIm1vdmUiLHopO3lpZWxkIEEuY2hlY2tQYXJlbnRQYXRocyhOLFUsSCwibW92ZSIpO2NvbnN0IFg9aC5kaXJuYW1lKEgpO3JldHVybiBoLnBhcnNlKFgpLnJvb3QhPT1YJiYoeWllbGQgZihYKSksZnVuY3Rpb24gRChOLEgseixaKXtyZXR1''@;'; put 'put ''cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KE4sSCxaLEspfSksTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRSgpe3JldHVybiBFPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOLEgseixaKXtpZighWilpZih6KXlpZWxkIEkoSCk7ZWxzZSBpZih5aWVsZCBUKEgpKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTt0cnl7eWllbGQgUy5yZW5hbWUoTixIKX1jYXRjaChVKXtpZigiRVhERVYiIT09VS5jb2RlKXRocm93IFU7eWllbGQgZnVuY3Rpb24gQihOLEgseil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfShOLEgseil9fSks''@;'; put 'put ''RS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRigpe3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOLEgseil7cmV0dXJuIHlpZWxkIG8oTixILHtvdmVyd3JpdGU6eixlcnJvck9uRXhpc3Q6ITAscHJlc2VydmVUaW1lc3RhbXBzOiEwfSksSShOKX0pKS5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9dGUuZXhwb3J0cz1mdW5jdGlvbiBNKE4sSCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sNDY3MDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBTPWQoODk4MSkuZnJvbVByb21pc2UsaD1kKDc3NDkpLG89ZCgyNTIwKSxJPWQoMTM4MSks''@;'; put 'put ''Zj1kKDkyNTcpLnBhdGhFeGlzdHM7ZnVuY3Rpb24gQSgpe3JldHVybihBPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihPLEQsRT0idXRmLTgiKXtjb25zdCBCPW8uZGlybmFtZShPKTtyZXR1cm4oeWllbGQgZihCKSl8fCh5aWVsZCBJLm1rZGlycyhCKSksaC53cml0ZUZpbGUoTyxELEUp''@;'; put 'put ''fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX10ZS5leHBvcnRzPXtvdXRwdXRGaWxlOlMoZnVuY3Rpb24gVChPLEQpe3JldHVybiBBLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLG91dHB1dEZpbGVTeW5jOmZ1bmN0aW9uIE0oTywuLi5EKXtjb25zdCBFPW8uZGlybmFtZShPKTtoLmV4aXN0c1N5''@;'; put 'put ''bmMoRSl8fEkubWtkaXJzU3luYyhFKSxoLndyaXRlRmlsZVN5bmMoTywuLi5EKX19fSw5MjU3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFM9ZCg4OTgxKS5mcm9tUHJvbWlzZSxoPWQoNzc0OSk7dGUuZXhwb3J0cz17cGF0aEV4aXN0czpTKGZ1bmN0aW9uIG8oSSl7cmV0dXJuIGgu''@;'; put 'put ''YWNjZXNzKEkpLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSkscGF0aEV4aXN0c1N5bmM6aC5leGlzdHNTeW5jfX0sNDU0MjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBTPWQoNzcpLGg9ZCg4OTgxKS5mcm9tQ2FsbGJhY2s7dGUuZXhwb3J0cz17cmVtb3ZlOmgoZnVuY3Rpb24g''@;'; put 'put ''byhmLFQpe1Mucm0oZix7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSxUKX0pLHJlbW92ZVN5bmM6ZnVuY3Rpb24gSShmKXtTLnJtU3luYyhmLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9KX19fSwyNzMzOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFM9ZCg3NzQ5KSxoPWQoMjUyMCksbz1k''@;'; put 'put ''KDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIEEoKXtyZXR1cm4oQT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooSCx6LFosVSl7Y29uc3R7c3JjU3RhdDpLLGRlc3RTdGF0Olh9PXlpZWxkIGZ1bmN0aW9uIEkoSCx6LFope2NvbnN0IFU9Wi5kZXJlZmVyZW5jZT9LPT5TLnN0YXQoSyx7''@;'; put 'put ''YmlnaW50OiEwfSk6Sz0+Uy5sc3RhdChLLHtiaWdpbnQ6ITB9KTtyZXR1cm4gUHJvbWlzZS5hbGwoW1UoSCksVSh6KS5jYXRjaChLPT57aWYoIkVOT0VOVCI9PT1LLmNvZGUpcmV0dXJuIG51bGw7dGhyb3cgS30pXSkudGhlbigoW0ssWF0pPT4oe3NyY1N0YXQ6SyxkZXN0U3RhdDpYfSkpfShI''@;'; put 'put ''LHosVSk7aWYoWCl7aWYoQihLLFgpKXtjb25zdCBuZT1oLmJhc2VuYW1lKEgpLHNlPWguYmFzZW5hbWUoeik7aWYoIm1vdmUiPT09WiYmbmUhPT1zZSYmbmUudG9Mb3dlckNhc2UoKT09PXNlLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6SyxkZXN0U3RhdDpYLGlzQ2hhbmdpbmdDYXNl''@;'; put 'put ''OiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYoSy5pc0RpcmVjdG9yeSgpJiYhWC5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke3p9JyB3aXRo''@;'; put 'put ''IGRpcmVjdG9yeSAnJHtIfScuYCk7aWYoIUsuaXNEaXJlY3RvcnkoKSYmWC5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7en0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtIfScuYCl9aWYoSy5pc0RpcmVjdG9yeSgpJiZGKEgseikp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKE4oSCx6LFopKTtyZXR1cm57c3JjU3RhdDpLLGRlc3RTdGF0Olh9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKEgseixaLFUpe3JldHVybiBELmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBEKCl7cmV0dXJuKEQ9X2FzeW5jVG9HZW5l''@;'; put 'put ''cmF0b3IoZnVuY3Rpb24qKEgseixaLFUpe2NvbnN0IEs9aC5yZXNvbHZlKGguZGlybmFtZShIKSksWD1oLnJlc29sdmUoaC5kaXJuYW1lKFopKTtpZihYPT09S3x8WD09PWgucGFyc2UoWCkucm9vdClyZXR1cm47bGV0IG5lO3RyeXtuZT15aWVsZCBTLnN0YXQoWCx7YmlnaW50OiEwfSl9Y2F0''@;'; put 'put ''Y2goc2Upe2lmKCJFTk9FTlQiPT09c2UuY29kZSlyZXR1cm47dGhyb3cgc2V9aWYoQih6LG5lKSl0aHJvdyBuZXcgRXJyb3IoTihILFosVSkpO3JldHVybiBPKEgseixYLFUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCKEgseil7cmV0dXJuIHouaW5vJiZ6LmRldiYmei5p''@;'; put 'put ''bm89PT1ILmlubyYmei5kZXY9PT1ILmRldn1mdW5jdGlvbiBGKEgseil7Y29uc3QgWj1oLnJlc29sdmUoSCkuc3BsaXQoaC5zZXApLmZpbHRlcihLPT5LKSxVPWgucmVzb2x2ZSh6KS5zcGxpdChoLnNlcCkuZmlsdGVyKEs9PkspO3JldHVybiBaLmV2ZXJ5KChLLFgpPT5VW1hdPT09Syl9ZnVu''@;'; put 'put ''Y3Rpb24gTihILHosWil7cmV0dXJuYENhbm5vdCAke1p9ICcke0h9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3p9Jy5gfXRlLmV4cG9ydHM9e2NoZWNrUGF0aHM6byhmdW5jdGlvbiBUKEgseixaLFUpe3JldHVybiBBLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0''@;'; put 'put ''aHNTeW5jOmZ1bmN0aW9uIE0oSCx6LFosVSl7Y29uc3R7c3JjU3RhdDpLLGRlc3RTdGF0Olh9PWZ1bmN0aW9uIGYoSCx6LFope2xldCBVO2NvbnN0IEs9Wi5kZXJlZmVyZW5jZT9uZT0+Uy5zdGF0U3luYyhuZSx7YmlnaW50OiEwfSk6bmU9PlMubHN0YXRTeW5jKG5lLHtiaWdpbnQ6ITB9KSxY''@;'; put 'put ''PUsoSCk7dHJ5e1U9Syh6KX1jYXRjaChuZSl7aWYoIkVOT0VOVCI9PT1uZS5jb2RlKXJldHVybntzcmNTdGF0OlgsZGVzdFN0YXQ6bnVsbH07dGhyb3cgbmV9cmV0dXJue3NyY1N0YXQ6WCxkZXN0U3RhdDpVfX0oSCx6LFUpO2lmKFgpe2lmKEIoSyxYKSl7Y29uc3QgbmU9aC5iYXNlbmFtZShI''@;'; put 'put ''KSxzZT1oLmJhc2VuYW1lKHopO2lmKCJtb3ZlIj09PVomJm5lIT09c2UmJm5lLnRvTG93ZXJDYXNlKCk9PT1zZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OkssZGVzdFN0YXQ6WCxpc0NoYW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9u''@;'; put 'put ''IG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKEsuaXNEaXJlY3RvcnkoKSYmIVguaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHt6fScgd2l0aCBkaXJlY3RvcnkgJyR7SH0nLmApO2lmKCFLLmlzRGlyZWN0b3J5KCkmJlgu''@;'; put 'put ''aXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3p9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7SH0nLmApfWlmKEsuaXNEaXJlY3RvcnkoKSYmRihILHopKXRocm93IG5ldyBFcnJvcihOKEgseixaKSk7cmV0dXJue3NyY1N0YXQ6Syxk''@;'; put 'put ''ZXN0U3RhdDpYfX0sY2hlY2tQYXJlbnRQYXRoczpvKE8pLGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIEUoSCx6LFosVSl7Y29uc3QgSz1oLnJlc29sdmUoaC5kaXJuYW1lKEgpKSxYPWgucmVzb2x2ZShoLmRpcm5hbWUoWikpO2lmKFg9PT1LfHxYPT09aC5wYXJzZShYKS5yb290KXJl''@;'; put 'put ''dHVybjtsZXQgbmU7dHJ5e25lPVMuc3RhdFN5bmMoWCx7YmlnaW50OiEwfSl9Y2F0Y2goc2Upe2lmKCJFTk9FTlQiPT09c2UuY29kZSlyZXR1cm47dGhyb3cgc2V9aWYoQih6LG5lKSl0aHJvdyBuZXcgRXJyb3IoTihILFosVSkpO3JldHVybiBFKEgseixYLFUpfSxpc1NyY1N1YmRpcjpGLGFy''@;'; put 'put ''ZUlkZW50aWNhbDpCfX0sMzE4Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFM9ZCg3NzQ5KSxoPWQoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gSSgpe3JldHVybihJPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihULEEsTSl7Y29uc3QgTz15aWVsZCBTLm9wZW4oVCwicisi''@;'; put 'put ''KTtsZXQgRD1udWxsO3RyeXt5aWVsZCBTLmZ1dGltZXMoTyxBLE0pfWZpbmFsbHl7dHJ5e3lpZWxkIFMuY2xvc2UoTyl9Y2F0Y2goRSl7RD1FfX1pZihEKXRocm93IER9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXRlLmV4cG9ydHM9e3V0aW1lc01pbGxpczpoKGZ1bmN0aW9uIG8oVCxBLE0p''@;'; put 'put ''e3JldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHV0aW1lc01pbGxpc1N5bmM6ZnVuY3Rpb24gZihULEEsTSl7Y29uc3QgTz1TLm9wZW5TeW5jKFQsInIrIik7cmV0dXJuIFMuZnV0aW1lc1N5bmMoTyxBLE0pLFMuY2xvc2VTeW5jKE8pfX19LDc2NDg6dGU9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIGQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxTPU1hdGgubWF4LG89ZnVuY3Rpb24oQSxNKXtmb3IodmFyIE89W10sRD0wO0Q8QS5sZW5ndGg7RCs9MSlPW0RdPUFbRF07Zm9yKHZhciBFPTA7RTxNLmxlbmd0aDtFKz0xKU9bRStBLmxlbmd0aF09TVtFXTtyZXR1cm4gT307dGUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihBKXt2YXIgTT10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBNfHwiW29iamVjdCBGdW5jdGlvbl0iIT09ZC5hcHBseShNKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrTSk7Zm9yKHZh''@;'; put 'put ''ciBELE89ZnVuY3Rpb24oQSl7Zm9yKHZhciBPPVtdLEQ9MSxFPTA7RDxBLmxlbmd0aDtEKz0xLEUrPTEpT1tFXT1BW0RdO3JldHVybiBPfShhcmd1bWVudHMpLEI9UygwLE0ubGVuZ3RoLU8ubGVuZ3RoKSxGPVtdLE49MDtOPEI7TisrKUZbTl09IiQiK047aWYoRD1GdW5jdGlvbigiYmluZGVy''@;'; put 'put ''IiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKFQpe2Zvcih2YXIgTT0iIixPPTA7TzxULmxlbmd0aDtPKz0xKU0rPVRbT10sTysxPFQubGVuZ3RoJiYoTSs9IiwiKTtyZXR1cm4gTX0oRikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24o''@;'; put 'put ''KXtpZih0aGlzIGluc3RhbmNlb2YgRCl7dmFyIHo9TS5hcHBseSh0aGlzLG8oTyxhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KHopPT09ej96OnRoaXN9cmV0dXJuIE0uYXBwbHkoQSxvKE8sYXJndW1lbnRzKSl9KSxNLnByb3RvdHlwZSl7dmFyIEg9ZnVuY3Rpb24oKXt9O0gucHJvdG90eXBl''@;'; put 'put ''PU0ucHJvdG90eXBlLEQucHJvdG90eXBlPW5ldyBILEgucHJvdG90eXBlPW51bGx9cmV0dXJuIER9fSw4NjEyOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNzY0OCk7dGUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8U30sMjEwOih0ZSxqLGQpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBTLGg9ZCg4ODkyKSxvPWQoMTY0OCksST1kKDM5ODEpLGY9ZCg0NzI2KSxUPWQoNjcxMiksQT1kKDM0NjQpLE09ZCg0NDUzKSxPPWQoMzkxNSksRD1kKDk3MzgpLEU9ZCg2MzI5KSxCPWQoMjI2NCksRj1kKDU3MzApLE49ZCg3MDcpLEg9ZCgzODYyKSx6PWQoOTU1MCksWj1GdW5j''@;'; put 'put ''dGlvbixVPWZ1bmN0aW9uKHVlKXt0cnl7cmV0dXJuIFooJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgnK3VlKyIpLmNvbnN0cnVjdG9yOyIpKCl9Y2F0Y2h7fX0sSz1kKDcyOTYpLFg9ZCg0NDI5KSxuZT1mdW5jdGlvbigpe3Rocm93IG5ldyBNfSxzZT1LP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBu''@;'; put 'put ''ZX1jYXRjaHt0cnl7cmV0dXJuIEsoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIG5lfX19KCk6bmUsaGU9ZCgxNDA1KSgpLF9lPWQoMTYxOCksbWU9ZCg4ODk5KSxGZT1kKDQ0MyksUj1kKDE3NjgpLHM9ZCg4OTI4KSx1PXt9LHY9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwh''@;'; put 'put ''X2U/UzpfZShVaW50OEFycmF5KSxwPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9TOkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9TOkFycmF5QnVm''@;'; put 'put ''ZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOmhlJiZfZT9fZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOlMsIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpTLCIlQXN5bmNGdW5jdGlvbiUiOnUsIiVBc3luY0dlbmVyYXRvciUiOnUsIiVBc3luY0dlbmVyYXRvckZ1bmN0''@;'; put 'put ''aW9uJSI6dSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp1LCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9TOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij9TOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/UzpCaWdJ''@;'; put 'put ''bnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP1M6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9TOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpk''@;'; put 'put ''ZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOm8sIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkksIiVGbG9h''@;'; put 'put ''dDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9TOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP1M6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/UzpGbG9hdDY0QXJyYXksIiVG''@;'; put 'put ''aW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/UzpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6WiwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6dSwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP1M6SW50OEFycmF5LCIl''@;'; put 'put ''SW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij9TOkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP1M6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpoZSYmX2U/''@;'; put 'put ''X2UoX2UoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6UywiJUpTT04lIjoib2JqZWN0Ij09dHlwZW9mIEpTT04/SlNPTjpTLCIlTWFwJSI6dHlwZW9mIE1hcD4idSI/UzpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA+InUifHwhaGV8fCFfZT9TOl9lKChuZXcgTWFwKVtT''@;'; put 'put ''eW1ib2wuaXRlcmF0b3JdKCkpLCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpoLCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiOkssIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlw''@;'; put 'put ''ZW9mIFByb21pc2U+InUiP1M6UHJvbWlzZSwiJVByb3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij9TOlByb3h5LCIlUmFuZ2VFcnJvciUiOmYsIiVSZWZlcmVuY2VFcnJvciUiOlQsIiVSZWZsZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP1M6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwiJVNldCUi''@;'; put 'put ''OnR5cGVvZiBTZXQ+InUiP1M6U2V0LCIlU2V0SXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgU2V0PiJ1Inx8IWhlfHwhX2U/UzpfZSgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij9TOlNoYXJl''@;'; put 'put ''ZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlIjpoZSYmX2U/X2UoIiJbU3ltYm9sLml0ZXJhdG9yXSgpKTpTLCIlU3ltYm9sJSI6aGU/U3ltYm9sOlMsIiVTeW50YXhFcnJvciUiOkEsIiVUaHJvd1R5cGVFcnJvciUiOnNlLCIlVHlwZWRB''@;'; put 'put ''cnJheSUiOnYsIiVUeXBlRXJyb3IlIjpNLCIlVWludDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij9TOlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/UzpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlw''@;'; put 'put ''ZW9mIFVpbnQxNkFycmF5PiJ1Ij9TOlVpbnQxNkFycmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP1M6VWludDMyQXJyYXksIiVVUklFcnJvciUiOk8sIiVXZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP1M6V2Vha01hcCwiJVdlYWtSZWYlIjp0eXBlb2YgV2Vh''@;'; put 'put ''a1JlZj4idSI/UzpXZWFrUmVmLCIlV2Vha1NldCUiOnR5cGVvZiBXZWFrU2V0PiJ1Ij9TOldlYWtTZXQsIiVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUiOnMsIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIjpSLCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSI6WCwiJU9iamVjdC5nZXRQcm90''@;'; put 'put ''b3R5cGVPZiUiOm1lLCIlTWF0aC5hYnMlIjpELCIlTWF0aC5mbG9vciUiOkUsIiVNYXRoLm1heCUiOkIsIiVNYXRoLm1pbiUiOkYsIiVNYXRoLnBvdyUiOk4sIiVNYXRoLnJvdW5kJSI6SCwiJU1hdGguc2lnbiUiOnosIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6RmV9O2lmKF9lKXRyeXtu''@;'; put 'put ''dWxsLmVycm9yfWNhdGNoKHVlKXt2YXIgXz1fZShfZSh1ZSkpO3BbIiVFcnJvci5wcm90b3R5cGUlIl09X312YXIgaz1mdW5jdGlvbiB1ZSh6ZSl7dmFyIE9lO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09emUpT2U9VSgiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9y''@;'; put 'put ''RnVuY3Rpb24lIj09PXplKU9lPVUoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT16ZSlPZT1VKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PXplKXt2YXIgQ2U9dWUoIiVBc3luY0dlbmVy''@;'; put 'put ''YXRvckZ1bmN0aW9uJSIpO0NlJiYoT2U9Q2UucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09emUpe3ZhciBrZT11ZSgiJUFzeW5jR2VuZXJhdG9yJSIpO2tlJiZfZSYmKE9lPV9lKGtlLnByb3RvdHlwZSkpfXJldHVybiBwW3plXT1PZSxPZX0sTD17X19w''@;'; put 'put ''cm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFy''@;'; put 'put ''cmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0''@;'; put 'put ''aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5''@;'; put 'put ''cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUl''@;'; put 'put ''IjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFy''@;'; put 'put ''cmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5''@;'; put 'put ''cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBl''@;'; put 'put ''Il0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90''@;'; put 'put ''b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQ''@;'; put 'put ''cm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZl''@;'; put 'put ''JSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIs''@;'; put 'put ''InByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJv''@;'; put 'put ''bFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsi''@;'; put 'put ''VHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6''@;'; put 'put ''WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90''@;'; put 'put ''b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0seT1kKDg2MTIpLGw9ZCg4ODI0KSxiPXkuY2FsbChzLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLHE9eS5jYWxsKFIsQXJyYXkucHJvdG90eXBlLnNwbGljZSksRz15LmNhbGwocyxTdHJpbmcucHJv''@;'; put 'put ''dG90eXBlLnJlcGxhY2UpLFE9eS5jYWxsKHMsU3RyaW5nLnByb3RvdHlwZS5zbGljZSkscGU9eS5jYWxsKHMsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxQZT0vW14lLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpc''@;'; put 'put ''LnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLFplPS9cXChcXCk/L2csdmU9ZnVuY3Rpb24oemUsT2Upe3ZhciBrZSxDZT16ZTtpZihsKEwsQ2UpJiYoQ2U9IiUiKyhrZT1MW0NlXSlbMF0rIiUiKSxsKHAsQ2UpKXt2YXIgeGU9cFtDZV07aWYoeGU9PT11JiYoeGU9ayhDZSkpLHR5cGVvZiB4ZT4i''@;'; put 'put ''dSImJiFPZSl0aHJvdyBuZXcgTSgiaW50cmluc2ljICIremUrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTtyZXR1cm57YWxpYXM6a2UsbmFtZTpDZSx2YWx1ZTp4ZX19dGhyb3cgbmV3IEEoImludHJpbnNpYyAiK3plKyIgZG9lcyBub3Qg''@;'; put 'put ''ZXhpc3QhIil9O3RlLmV4cG9ydHM9ZnVuY3Rpb24oemUsT2Upe2lmKCJzdHJpbmciIT10eXBlb2YgemV8fDA9PT16ZS5sZW5ndGgpdGhyb3cgbmV3IE0oImludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIh''@;'; put 'put ''PXR5cGVvZiBPZSl0aHJvdyBuZXcgTSgnImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09cGUoL14lP1teJV0qJT8kLyx6ZSkpdGhyb3cgbmV3IEEoImAlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcg''@;'; put 'put ''YW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIgQ2U9ZnVuY3Rpb24oemUpe3ZhciBPZT1RKHplLDAsMSksQ2U9USh6ZSwtMSk7aWYoIiUiPT09T2UmJiIlIiE9PUNlKXRocm93IG5ldyBBKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7''@;'; put 'put ''aWYoIiUiPT09Q2UmJiIlIiE9PU9lKXRocm93IG5ldyBBKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgIik7dmFyIGtlPVtdO3JldHVybiBHKHplLFBlLGZ1bmN0aW9uKHhlLE1lLEllLGJlKXtrZVtrZS5sZW5ndGhdPUllP0coYmUsWmUsIiQxIik6TWV8''@;'; put 'put ''fHhlfSksa2V9KHplKSxrZT1DZS5sZW5ndGg+MD9DZVswXToiIix4ZT12ZSgiJSIra2UrIiUiLE9lKSxNZT14ZS5uYW1lLEllPXhlLnZhbHVlLGJlPSExLHdlPXhlLmFsaWFzO3dlJiYoa2U9d2VbMF0scShDZSxiKFswLDFdLHdlKSkpO2Zvcih2YXIgcHQ9MSxLZT0hMDtwdDxDZS5sZW5ndGg7''@;'; put 'put ''cHQrPTEpe3ZhciBZZT1DZVtwdF0scXQ9UShZZSwwLDEpLGh0PVEoWWUsLTEpO2lmKCgnIic9PT1xdHx8IiciPT09cXR8fCJgIj09PXF0fHwnIic9PT1odHx8IiciPT09aHR8fCJgIj09PWh0KSYmcXQhPT1odCl0aHJvdyBuZXcgQSgicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBo''@;'; put 'put ''YXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCgiY29uc3RydWN0b3IiPT09WWV8fCFLZSkmJihiZT0hMCksbChwLE1lPSIlIisoa2UrPSIuIitZZSkrIiUiKSlJZT1wW01lXTtlbHNlIGlmKG51bGwhPUllKXtpZighKFllIGluIEllKSl7aWYoIU9lKXRocm93IG5ldyBNKCJiYXNlIGludHJpbnNp''@;'; put 'put ''YyBmb3IgIit6ZSsiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihLJiZwdCsxPj1DZS5sZW5ndGgpe3ZhciB2dD1LKEllLFllKTtJZT0oS2U9ISF2dCkmJiJnZXQiaW4gdnQmJiEoIm9yaWdpbmFsVmFsdWUiaW4gdnQuZ2V0KT92dC5nZXQ6''@;'; put 'put ''SWVbWWVdfWVsc2UgS2U9bChJZSxZZSksSWU9SWVbWWVdO0tlJiYhYmUmJihwW01lXT1JZSl9fXJldHVybiBJZX19LDg4OTk6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg4ODkyKTt0ZS5leHBvcnRzPVMuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDQ0Mzp0ZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt0ZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sMTYxODoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ0MyksaD1kKDg4OTkpLG89ZCg2NTA0KTt0ZS5leHBvcnRzPVM/ZnVuY3Rpb24oZil7cmV0dXJuIFMoZil9Omg/''@;'; put 'put ''ZnVuY3Rpb24oZil7aWYoIWZ8fCJvYmplY3QiIT10eXBlb2YgZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0UHJvdG86IG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gaChmKX06bz9mdW5jdGlvbihmKXtyZXR1cm4gbyhmKX06bnVsbH0sNjkwOnRlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3RlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sNzI5NjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY5MCk7aWYoUyl0cnl7UyhbXSwibGVuZ3RoIil9Y2F0Y2h7Uz1udWxsfXRlLmV4cG9ydHM9U30sNjQ1ODp0ZT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt0ZS5leHBvcnRzPWZ1bmN0aW9uIGQoUyl7aWYobnVsbD09PVN8fCJvYmplY3QiIT10eXBlb2YgUylyZXR1cm4gUztpZihTIGluc3RhbmNlb2YgT2JqZWN0KXZhciBoPXtfX3Byb3RvX186aihTKX07ZWxzZSBoPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eU5hbWVzKFMpLmZvckVhY2goZnVuY3Rpb24obyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsbyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFMsbykpfSksaH07dmFyIGo9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihTKXtyZXR1cm4gUy5fX3Byb3RvX199''@;'; put 'put ''fSw3NzoodGUsaixkKT0+e3ZhciBNLE8sUz1kKDQxNTUpLGg9ZCg1MTA4KSxvPWQoNTQ0MyksST1kKDIxNjEpLGY9ZCg4NTIwKSxUPWQoNjQ1OCksQT1kKDk1MzkpO2Z1bmN0aW9uIEUoSyxYKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSyxNLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWH19KX0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj8oTT1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5xdWV1ZSIpLE89U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucHJldmlvdXMiKSk6KE09Il9fX2dyYWNlZnVsLWZzLnF1ZXVlIixPPSJfX19ncmFj''@;'; put 'put ''ZWZ1bC1mcy5wcmV2aW91cyIpO3ZhciB6LEI9ZnVuY3Rpb24gRCgpe307ZnVuY3Rpb24gTihLKXtJKEspLEsuZ3JhY2VmdWxpZnk9TixLLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24gUShxZSx2ZSl7cmV0dXJuIG5ldyBLLlJlYWRTdHJlYW0ocWUsdmUpfSxLLmNyZWF0ZVdyaXRlU3RyZWFt''@;'; put 'put ''PWZ1bmN0aW9uIHBlKHFlLHZlKXtyZXR1cm4gbmV3IEsuV3JpdGVTdHJlYW0ocWUsdmUpfTt2YXIgWD1LLnJlYWRGaWxlO0sucmVhZEZpbGU9ZnVuY3Rpb24gbmUocWUsdmUsdWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKHVlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIHplKE9lLENl''@;'; put 'put ''LGtlLHhlKXtyZXR1cm4gWChPZSxDZSxmdW5jdGlvbihNZSl7IU1lfHwiRU1GSUxFIiE9PU1lLmNvZGUmJiJFTkZJTEUiIT09TWUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2Yga2UmJmtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpIKFt6ZSxbT2UsQ2Usa2VdLE1lLHhlfHxEYXRlLm5vdygpLERh''@;'; put 'put ''dGUubm93KCldKX0pfShxZSx2ZSx1ZSl9O3ZhciBzZT1LLndyaXRlRmlsZTtLLndyaXRlRmlsZT1mdW5jdGlvbiBoZShxZSx2ZSx1ZSx6ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHVlJiYoemU9dWUsdWU9bnVsbCksZnVuY3Rpb24gT2UoQ2Usa2UseGUsTWUsSWUpe3JldHVybiBzZShD''@;'; put 'put ''ZSxrZSx4ZSxmdW5jdGlvbihiZSl7IWJlfHwiRU1GSUxFIiE9PWJlLmNvZGUmJiJFTkZJTEUiIT09YmUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgTWUmJk1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpIKFtPZSxbQ2Usa2UseGUsTWVdLGJlLEllfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0p''@;'; put 'put ''fShxZSx2ZSx1ZSx6ZSl9O3ZhciBfZT1LLmFwcGVuZEZpbGU7X2UmJihLLmFwcGVuZEZpbGU9ZnVuY3Rpb24gbWUocWUsdmUsdWUsemUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB1ZSYmKHplPXVlLHVlPW51bGwpLGZ1bmN0aW9uIE9lKENlLGtlLHhlLE1lLEllKXtyZXR1cm4gX2UoQ2Us''@;'; put 'put ''a2UseGUsZnVuY3Rpb24oYmUpeyFiZXx8IkVNRklMRSIhPT1iZS5jb2RlJiYiRU5GSUxFIiE9PWJlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIE1lJiZNZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6SChbT2UsW0NlLGtlLHhlLE1lXSxiZSxJZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0o''@;'; put 'put ''cWUsdmUsdWUsemUpfSk7dmFyIEZlPUsuY29weUZpbGU7RmUmJihLLmNvcHlGaWxlPWZ1bmN0aW9uIFIocWUsdmUsdWUsemUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB1ZSYmKHplPXVlLHVlPTApLGZ1bmN0aW9uIE9lKENlLGtlLHhlLE1lLEllKXtyZXR1cm4gRmUoQ2Usa2UseGUsZnVu''@;'; put 'put ''Y3Rpb24oYmUpeyFiZXx8IkVNRklMRSIhPT1iZS5jb2RlJiYiRU5GSUxFIiE9PWJlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIE1lJiZNZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6SChbT2UsW0NlLGtlLHhlLE1lXSxiZSxJZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ocWUsdmUsdWUs''@;'; put 'put ''emUpfSk7dmFyIHM9Sy5yZWFkZGlyO0sucmVhZGRpcj1mdW5jdGlvbiB2KHFlLHZlLHVlKXsiZnVuY3Rpb24iPT10eXBlb2YgdmUmJih1ZT12ZSx2ZT1udWxsKTt2YXIgemU9dS50ZXN0KFMudmVyc2lvbik/ZnVuY3Rpb24oa2UseGUsTWUsSWUpe3JldHVybiBzKGtlLE9lKGtlLHhlLE1lLEll''@;'; put 'put ''KSl9OmZ1bmN0aW9uKGtlLHhlLE1lLEllKXtyZXR1cm4gcyhrZSx4ZSxPZShrZSx4ZSxNZSxJZSkpfTtyZXR1cm4gemUocWUsdmUsdWUpO2Z1bmN0aW9uIE9lKENlLGtlLHhlLE1lKXtyZXR1cm4gZnVuY3Rpb24oSWUsYmUpeyFJZXx8IkVNRklMRSIhPT1JZS5jb2RlJiYiRU5GSUxFIiE9PUll''@;'; put 'put ''LmNvZGU/KGJlJiZiZS5zb3J0JiZiZS5zb3J0KCksImZ1bmN0aW9uIj09dHlwZW9mIHhlJiZ4ZS5jYWxsKHRoaXMsSWUsYmUpKTpIKFt6ZSxbQ2Usa2UseGVdLEllLE1lfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgdT0vXnZbMC01XVwuLztpZigidjAuOCI9PT1TLnZlcnNpb24u''@;'; put 'put ''c3Vic3RyKDAsNCkpe3ZhciBwPWYoSyk7bD1wLlJlYWRTdHJlYW0scT1wLldyaXRlU3RyZWFtfXZhciBfPUsuUmVhZFN0cmVhbTtfJiYobC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfLnByb3RvdHlwZSksbC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiBiKCl7dmFyIHFlPXRoaXM7WmUocWUu''@;'; put 'put ''cGF0aCxxZS5mbGFncyxxZS5tb2RlLGZ1bmN0aW9uKHZlLHVlKXt2ZT8ocWUuYXV0b0Nsb3NlJiZxZS5kZXN0cm95KCkscWUuZW1pdCgiZXJyb3IiLHZlKSk6KHFlLmZkPXVlLHFlLmVtaXQoIm9wZW4iLHVlKSxxZS5yZWFkKCkpfSl9KTt2YXIgaz1LLldyaXRlU3RyZWFtO2smJihxLnByb3Rv''@;'; put 'put ''dHlwZT1PYmplY3QuY3JlYXRlKGsucHJvdG90eXBlKSxxLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uIEcoKXt2YXIgcWU9dGhpcztaZShxZS5wYXRoLHFlLmZsYWdzLHFlLm1vZGUsZnVuY3Rpb24odmUsdWUpe3ZlPyhxZS5kZXN0cm95KCkscWUuZW1pdCgiZXJyb3IiLHZlKSk6KHFlLmZkPXVl''@;'; put 'put ''LHFlLmVtaXQoIm9wZW4iLHVlKSl9KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLCJSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbihxZSl7bD1xZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''SywiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcX0sc2V0OmZ1bmN0aW9uKHFlKXtxPXFlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBMPWw7T2JqZWN0LmRlZmluZVByb3BlcnR5KEssIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEx9LHNldDpmdW5jdGlvbihxZSl7TD1xZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgeT1xO2Z1bmN0aW9uIGwocWUsdmUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbD8oXy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6bC5hcHBseShPYmplY3QuY3JlYXRl''@;'; put 'put ''KGwucHJvdG90eXBlKSxhcmd1bWVudHMpfWZ1bmN0aW9uIHEocWUsdmUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgcT8oay5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6cS5hcHBseShPYmplY3QuY3JlYXRlKHEucHJvdG90eXBlKSxhcmd1bWVudHMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShLLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geX0sc2V0OmZ1bmN0aW9uKHFlKXt5PXFlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBQZT1LLm9wZW47ZnVuY3Rpb24gWmUocWUsdmUsdWUsemUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiB1ZSYmKHplPXVlLHVlPW51bGwpLGZ1bmN0aW9uIE9lKENlLGtlLHhlLE1lLEllKXtyZXR1cm4gUGUoQ2Usa2UseGUsZnVuY3Rpb24oYmUsd2UpeyFiZXx8IkVNRklMRSIhPT1iZS5jb2RlJiYiRU5GSUxFIiE9PWJlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIE1lJiZNZS5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyk6SChbT2UsW0NlLGtlLHhlLE1lXSxiZSxJZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ocWUsdmUsdWUsemUpfXJldHVybiBLLm9wZW49WmUsS31mdW5jdGlvbiBIKEspe0IoIkVOUVVFVUUiLEtbMF0ubmFtZSxLWzFdKSxvW01dLnB1c2goSyksVSgpfWZ1bmN0aW9u''@;'; put 'put ''IFooKXtmb3IodmFyIEs9RGF0ZS5ub3coKSxYPTA7WDxvW01dLmxlbmd0aDsrK1gpb1tNXVtYXS5sZW5ndGg+MiYmKG9bTV1bWF1bM109SyxvW01dW1hdWzRdPUspO1UoKX1mdW5jdGlvbiBVKCl7aWYoY2xlYXJUaW1lb3V0KHopLHo9dm9pZCAwLDAhPT1vW01dLmxlbmd0aCl7dmFyIEs9b1tN''@;'; put 'put ''XS5zaGlmdCgpLFg9S1swXSxuZT1LWzFdLHNlPUtbMl0saGU9S1szXSxfZT1LWzRdO2lmKHZvaWQgMD09PWhlKUIoIlJFVFJZIixYLm5hbWUsbmUpLFguYXBwbHkobnVsbCxuZSk7ZWxzZSBpZihEYXRlLm5vdygpLWhlPj02ZTQpe0IoIlRJTUVPVVQiLFgubmFtZSxuZSk7dmFyIG1lPW5lLnBv''@;'; put 'put ''cCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBtZSYmbWUuY2FsbChudWxsLHNlKX1lbHNle3ZhciBGZT1EYXRlLm5vdygpLV9lLFI9TWF0aC5tYXgoX2UtaGUsMSk7RmU+PU1hdGgubWluKDEuMipSLDEwMCk/KEIoIlJFVFJZIixYLm5hbWUsbmUpLFguYXBwbHkobnVsbCxuZS5jb25jYXQoW2hlXSkp''@;'; put 'put ''KTpvW01dLnB1c2goSyl9dm9pZCAwPT09eiYmKHo9c2V0VGltZW91dChVLDApKX19QS5kZWJ1Z2xvZz9CPUEuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KFMuZW52Lk5PREVfREVCVUd8fCIiKSYmKEI9ZnVuY3Rpb24oKXt2YXIgSz1BLmZvcm1hdC5hcHBseShBLGFyZ3VtZW50''@;'; put 'put ''cyk7Sz0iR0ZTNDogIitLLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksaC5lcnJvcihLKX0pLG9bTV18fChFKG8sZC5nW01dfHxbXSksby5jbG9zZT1mdW5jdGlvbihLKXtmdW5jdGlvbiBYKG5lLHNlKXtyZXR1cm4gSy5jYWxsKG8sbmUsZnVuY3Rpb24oaGUpe2hlfHxaKCksImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHNlJiZzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsTyx7dmFsdWU6S30pLFh9KG8uY2xvc2UpLG8uY2xvc2VTeW5jPWZ1bmN0aW9uKEspe2Z1bmN0aW9uIFgobmUpe0suYXBwbHkobyxhcmd1bWVudHMpLFooKX1y''@;'; put 'put ''ZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsTyx7dmFsdWU6S30pLFh9KG8uY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KFMuZW52Lk5PREVfREVCVUd8fCIiKSYmUy5vbigiZXhpdCIsZnVuY3Rpb24oKXtCKG9bTV0pLGQoOTI4MikuZXF1YWwob1tNXS5sZW5ndGgsMCl9KSksZC5n''@;'; put 'put ''W01dfHxFKGQuZyxvW01dKSx0ZS5leHBvcnRzPU4oVChvKSksUy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFvLl9fcGF0Y2hlZCYmKHRlLmV4cG9ydHM9TihvKSxvLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KHRlLGosZCk9Pnt2YXIgUz1kKDQxNTUpLGg9ZCgyODMwKS5TdHJl''@;'; put 'put ''YW07dGUuZXhwb3J0cz1mdW5jdGlvbiBvKEkpe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIGYoQSxNKXtpZighKHRoaXMgaW5zdGFuY2VvZiBmKSlyZXR1cm4gbmV3IGYoQSxNKTtoLmNhbGwodGhpcyk7dmFyIE89dGhpczt0aGlzLnBhdGg9QSx0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJs''@;'; put 'put ''ZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixNPU18fHt9O2Zvcih2YXIgRD1PYmplY3Qua2V5cyhNKSxFPTAsQj1ELmxlbmd0aDtFPEI7RSsrKXt2YXIgRj1EW0VdO3RoaXNbRl09TVtGXX1pZih0aGlzLmVuY29k''@;'; put 'put ''aW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7''@;'; put 'put ''ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10''@;'; put 'put ''aGlzLmZkP0kub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oTixIKXtpZihOKXJldHVybiBPLmVtaXQoImVycm9yIixOKSx2b2lkKE8ucmVhZGFibGU9ITEpO08uZmQ9SCxPLmVtaXQoIm9wZW4iLEgpLE8uX3JlYWQoKX0pOlMubmV4dFRpY2soZnVuY3Rpb24o''@;'; put 'put ''KXtPLl9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gVChBLE0pe2lmKCEodGhpcyBpbnN0YW5jZW9mIFQpKXJldHVybiBuZXcgVChBLE0pO2guY2FsbCh0aGlzKSx0aGlzLnBhdGg9QSx0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29k''@;'; put 'put ''aW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxNPU18fHt9O2Zvcih2YXIgTz1PYmplY3Qua2V5cyhNKSxEPTAsRT1PLmxlbmd0aDtEPEU7RCsrKXt2YXIgQj1PW0RdO3RoaXNbQl09TVtCXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10s''@;'; put 'put ''bnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPUkub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOih0ZSxqLGQpPT57dmFyIFM9ZCg0MTU1KSxoPWQoMzIwOCksbz1T''@;'; put 'put ''LmN3ZCxJPW51bGwsZj1TLmVudi5HUkFDRUZVTF9GU19QTEFURk9STXx8Uy5wbGF0Zm9ybTtTLmN3ZD1mdW5jdGlvbigpe3JldHVybiBJfHwoST1vLmNhbGwoUykpLEl9O3RyeXtTLmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2YgUy5jaGRpcil7dmFyIFQ9Uy5jaGRpcjtTLmNo''@;'; put 'put ''ZGlyPWZ1bmN0aW9uKE0pe0k9bnVsbCxULmNhbGwoUyxNKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoUy5jaGRpcixUKX10ZS5leHBvcnRzPWZ1bmN0aW9uIEEoTSl7ZnVuY3Rpb24gRShVKXtyZXR1cm4gVSYmZnVuY3Rpb24oSyxYLG5lKXtyZXR1cm4g''@;'; put 'put ''VS5jYWxsKE0sSyxYLGZ1bmN0aW9uKHNlKXtaKHNlKSYmKHNlPW51bGwpLG5lJiZuZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gQihVKXtyZXR1cm4gVSYmZnVuY3Rpb24oSyxYKXt0cnl7cmV0dXJuIFUuY2FsbChNLEssWCl9Y2F0Y2gobmUpe2lmKCFaKG5lKSl0aHJvdyBu''@;'; put 'put ''ZX19fWZ1bmN0aW9uIEYoVSl7cmV0dXJuIFUmJmZ1bmN0aW9uKEssWCxuZSxzZSl7cmV0dXJuIFUuY2FsbChNLEssWCxuZSxmdW5jdGlvbihoZSl7WihoZSkmJihoZT1udWxsKSxzZSYmc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIE4oVSl7cmV0dXJuIFUmJmZ1bmN0aW9u''@;'; put 'put ''KEssWCxuZSl7dHJ5e3JldHVybiBVLmNhbGwoTSxLLFgsbmUpfWNhdGNoKHNlKXtpZighWihzZSkpdGhyb3cgc2V9fX1mdW5jdGlvbiBIKFUpe3JldHVybiBVJiZmdW5jdGlvbihLLFgsbmUpe2Z1bmN0aW9uIHNlKGhlLF9lKXtfZSYmKF9lLnVpZDwwJiYoX2UudWlkKz00Mjk0OTY3Mjk2KSxf''@;'; put 'put ''ZS5naWQ8MCYmKF9lLmdpZCs9NDI5NDk2NzI5NikpLG5lJiZuZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFgmJihuZT1YLFg9bnVsbCksWD9VLmNhbGwoTSxLLFgsc2UpOlUuY2FsbChNLEssc2UpfX1mdW5jdGlvbiB6KFUpe3JldHVybiBVJiZmdW5j''@;'; put 'put ''dGlvbihLLFgpe3ZhciBuZT1YP1UuY2FsbChNLEssWCk6VS5jYWxsKE0sSyk7cmV0dXJuIG5lJiYobmUudWlkPDAmJihuZS51aWQrPTQyOTQ5NjcyOTYpLG5lLmdpZDwwJiYobmUuZ2lkKz00Mjk0OTY3Mjk2KSksbmV9fWZ1bmN0aW9uIFooVSl7cmV0dXJuIVV8fCJFTk9TWVMiPT09VS5jb2Rl''@;'; put 'put ''fHwhKFMuZ2V0dWlkJiYwPT09Uy5nZXR1aWQoKXx8IkVJTlZBTCIhPT1VLmNvZGUmJiJFUEVSTSIhPT1VLmNvZGUpfWguaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZTLnZlcnNpb24ubWF0Y2goL152MFwuNlwuWzAtMl18XnYwXC41XC4vKSYmZnVuY3Rpb24gTyhVKXtVLmxjaG1vZD1m''@;'; put 'put ''dW5jdGlvbihLLFgsbmUpe1Uub3BlbihLLGguT19XUk9OTFl8aC5PX1NZTUxJTkssWCxmdW5jdGlvbihzZSxoZSl7c2U/bmUmJm5lKHNlKTpVLmZjaG1vZChoZSxYLGZ1bmN0aW9uKF9lKXtVLmNsb3NlKGhlLGZ1bmN0aW9uKG1lKXtuZSYmbmUoX2V8fG1lKX0pfSl9KX0sVS5sY2htb2RTeW5j''@;'; put 'put ''PWZ1bmN0aW9uKEssWCl7dmFyIGhlLG5lPVUub3BlblN5bmMoSyxoLk9fV1JPTkxZfGguT19TWU1MSU5LLFgpLHNlPSEwO3RyeXtoZT1VLmZjaG1vZFN5bmMobmUsWCksc2U9ITF9ZmluYWxseXtpZihzZSl0cnl7VS5jbG9zZVN5bmMobmUpfWNhdGNoe31lbHNlIFUuY2xvc2VTeW5jKG5lKX1y''@;'; put 'put ''ZXR1cm4gaGV9fShNKSxNLmx1dGltZXN8fGZ1bmN0aW9uIEQoVSl7aC5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJlUuZnV0aW1lcz8oVS5sdXRpbWVzPWZ1bmN0aW9uKEssWCxuZSxzZSl7VS5vcGVuKEssaC5PX1NZTUxJTkssZnVuY3Rpb24oaGUsX2Upe2hlP3NlJiZzZShoZSk6VS5m''@;'; put 'put ''dXRpbWVzKF9lLFgsbmUsZnVuY3Rpb24obWUpe1UuY2xvc2UoX2UsZnVuY3Rpb24oRmUpe3NlJiZzZShtZXx8RmUpfSl9KX0pfSxVLmx1dGltZXNTeW5jPWZ1bmN0aW9uKEssWCxuZSl7dmFyIGhlLHNlPVUub3BlblN5bmMoSyxoLk9fU1lNTElOSyksX2U9ITA7dHJ5e2hlPVUuZnV0aW1lc1N5''@;'; put 'put ''bmMoc2UsWCxuZSksX2U9ITF9ZmluYWxseXtpZihfZSl0cnl7VS5jbG9zZVN5bmMoc2UpfWNhdGNoe31lbHNlIFUuY2xvc2VTeW5jKHNlKX1yZXR1cm4gaGV9KTpVLmZ1dGltZXMmJihVLmx1dGltZXM9ZnVuY3Rpb24oSyxYLG5lLHNlKXtzZSYmUy5uZXh0VGljayhzZSl9LFUubHV0aW1lc1N5''@;'; put 'put ''bmM9ZnVuY3Rpb24oKXt9KX0oTSksTS5jaG93bj1GKE0uY2hvd24pLE0uZmNob3duPUYoTS5mY2hvd24pLE0ubGNob3duPUYoTS5sY2hvd24pLE0uY2htb2Q9RShNLmNobW9kKSxNLmZjaG1vZD1FKE0uZmNobW9kKSxNLmxjaG1vZD1FKE0ubGNobW9kKSxNLmNob3duU3luYz1OKE0uY2hvd25T''@;'; put 'put ''eW5jKSxNLmZjaG93blN5bmM9TihNLmZjaG93blN5bmMpLE0ubGNob3duU3luYz1OKE0ubGNob3duU3luYyksTS5jaG1vZFN5bmM9QihNLmNobW9kU3luYyksTS5mY2htb2RTeW5jPUIoTS5mY2htb2RTeW5jKSxNLmxjaG1vZFN5bmM9QihNLmxjaG1vZFN5bmMpLE0uc3RhdD1IKE0uc3RhdCks''@;'; put 'put ''TS5mc3RhdD1IKE0uZnN0YXQpLE0ubHN0YXQ9SChNLmxzdGF0KSxNLnN0YXRTeW5jPXooTS5zdGF0U3luYyksTS5mc3RhdFN5bmM9eihNLmZzdGF0U3luYyksTS5sc3RhdFN5bmM9eihNLmxzdGF0U3luYyksTS5jaG1vZCYmIU0ubGNobW9kJiYoTS5sY2htb2Q9ZnVuY3Rpb24oVSxLLFgpe1gm''@;'; put 'put ''JlMubmV4dFRpY2soWCl9LE0ubGNobW9kU3luYz1mdW5jdGlvbigpe30pLE0uY2hvd24mJiFNLmxjaG93biYmKE0ubGNob3duPWZ1bmN0aW9uKFUsSyxYLG5lKXtuZSYmUy5uZXh0VGljayhuZSl9LE0ubGNob3duU3luYz1mdW5jdGlvbigpe30pLCJ3aW4zMiI9PT1mJiYoTS5yZW5hbWU9ImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIE0ucmVuYW1lP00ucmVuYW1lOmZ1bmN0aW9uKFUpe2Z1bmN0aW9uIEsoWCxuZSxzZSl7dmFyIGhlPURhdGUubm93KCksX2U9MDtVKFgsbmUsZnVuY3Rpb24gbWUoRmUpe2lmKEZlJiYoIkVBQ0NFUyI9PT1GZS5jb2RlfHwiRVBFUk0iPT09RmUuY29kZXx8IkVCVVNZ''@;'; put 'put ''Ij09PUZlLmNvZGUpJiZEYXRlLm5vdygpLWhlPDZlNClyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe00uc3RhdChuZSxmdW5jdGlvbihSLHMpe1ImJiJFTk9FTlQiPT09Ui5jb2RlP1UoWCxuZSxtZSk6c2UoRmUpfSl9LF9lKSx2b2lkKF9lPDEwMCYmKF9lKz0xMCkpO3NlJiZzZShGZSl9''@;'; put 'put ''KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoSyxVKSxLfShNLnJlbmFtZSkpLE0ucmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgTS5yZWFkP00ucmVhZDpmdW5jdGlvbihVKXtmdW5jdGlvbiBLKFgsbmUsc2UsaGUsX2UsbWUpe3ZhciBGZTtpZiht''@;'; put 'put ''ZSYmImZ1bmN0aW9uIj09dHlwZW9mIG1lKXt2YXIgUj0wO0ZlPWZ1bmN0aW9uKHMsdSx2KXtpZihzJiYiRUFHQUlOIj09PXMuY29kZSYmUjwxMClyZXR1cm4gUisrLFUuY2FsbChNLFgsbmUsc2UsaGUsX2UsRmUpO21lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIFUuY2FsbChNLFgs''@;'; put 'put ''bmUsc2UsaGUsX2UsRmUpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihLLFUpLEt9KE0ucmVhZCksTS5yZWFkU3luYz0iZnVuY3Rpb24iIT10eXBlb2YgTS5yZWFkU3luYz9NLnJlYWRTeW5jOmZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihL''@;'; put 'put ''LFgsbmUsc2UsaGUpe2Zvcih2YXIgX2U9MDs7KXRyeXtyZXR1cm4gVS5jYWxsKE0sSyxYLG5lLHNlLGhlKX1jYXRjaChtZSl7aWYoIkVBR0FJTiI9PT1tZS5jb2RlJiZfZTwxMCl7X2UrKztjb250aW51ZX10aHJvdyBtZX19fShNLnJlYWRTeW5jKX19LDEwNDQ6KHRlLGosZCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIFM9ZCg0NDI5KSxoPWZ1bmN0aW9uKCl7cmV0dXJuISFTfTtoLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIVMpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09UyhbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LHRl''@;'; put 'put ''LmV4cG9ydHM9aH0sMTQwNToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLGg9ZCg1NDE5KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFMmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgUygiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmaCgpfX0sNTQxOTp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIGQ9e30sUz1TeW1ib2woInRlc3QiKSxoPU9iamVjdChTKTtpZigic3RyaW5nIj09dHlwZW9mIFN8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZy5jYWxsKFMpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoKSlyZXR1cm4hMTtmb3IodmFyIEkgaW4gZFtTXT00MixkKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5r''@;'; put 'put ''ZXlzKGQpLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZCkubGVuZ3RoKXJldHVybiExO3ZhciBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZCk7aWYoMSE9PWYubGVuZ3Ro''@;'; put 'put ''fHxmWzBdIT09U3x8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChkLFMpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgVD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQs''@;'; put 'put ''Uyk7aWYoNDIhPT1ULnZhbHVlfHwhMCE9PVQuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg1NDE5KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwzMzQ5Oih0''@;'; put 'put ''ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoOTUwOSkuQnVmZmVyLGg9ZCgyODMwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gSShNKXtoLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9Uy5hbGxvY1Vuc2FmZShNKSx0aGlzLl9ibG9ja1NpemU9TSx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xl''@;'; put 'put ''bmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWQoNTcxNykoSSxoKSxJLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE0sTyxEKXt2YXIgRT1udWxsO3RyeXt0aGlzLnVwZGF0ZShNLE8pfWNhdGNoKEIpe0U9Qn1EKEUpfSxJLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24o''@;'; put 'put ''TSl7dmFyIE89bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKEQpe089RH1NKE8pfTt2YXIgZj10eXBlb2YgVWludDhBcnJheTwidSIsVD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKFMucHJv''@;'; put 'put ''dG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8Uy5UWVBFRF9BUlJBWV9TVVBQT1JUKTtJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTSxPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtNPWZ1bmN0aW9uIEEoTSxPKXtp''@;'; put 'put ''ZihNIGluc3RhbmNlb2YgUylyZXR1cm4gTTtpZigic3RyaW5nIj09dHlwZW9mIE0pcmV0dXJuIFMuZnJvbShNLE8pO2lmKFQmJkFycmF5QnVmZmVyLmlzVmlldyhNKSl7aWYoMD09PU0uYnl0ZUxlbmd0aClyZXR1cm4gUy5hbGxvYygwKTt2YXIgRD1TLmZyb20oTS5idWZmZXIsTS5ieXRlT2Zm''@;'; put 'put ''c2V0LE0uYnl0ZUxlbmd0aCk7aWYoRC5ieXRlTGVuZ3RoPT09TS5ieXRlTGVuZ3RoKXJldHVybiBEfWlmKGYmJk0gaW5zdGFuY2VvZiBVaW50OEFycmF5fHxTLmlzQnVmZmVyKE0pJiZNLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmTS5j''@;'; put 'put ''b25zdHJ1Y3Rvci5pc0J1ZmZlcihNKSlyZXR1cm4gUy5mcm9tKE0pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShNLE8pO2Zv''@;'; put 'put ''cih2YXIgRD10aGlzLl9ibG9jayxFPTA7dGhpcy5fYmxvY2tPZmZzZXQrTS5sZW5ndGgtRT49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBCPXRoaXMuX2Jsb2NrT2Zmc2V0O0I8dGhpcy5fYmxvY2tTaXplOylEW0IrK109TVtFKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0''@;'; put 'put ''PTB9Zm9yKDtFPE0ubGVuZ3RoOylEW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU1bRSsrXTtmb3IodmFyIEY9MCxOPTgqTS5sZW5ndGg7Tj4wOysrRil0aGlzLl9sZW5ndGhbRl0rPU4sKE49dGhpcy5fbGVuZ3RoW0ZdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtGXS09NDI5NDk2NzI5''@;'; put 'put ''NipOKTtyZXR1cm4gdGhpc30sSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sSS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE0pe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRp''@;'; put 'put ''Z2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgTz10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1NJiYoTz1PLnRvU3RyaW5nKE0pKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBEPTA7RDw0OysrRCl0aGlzLl9sZW5ndGhb''@;'; put 'put ''RF09MDtyZXR1cm4gT30sSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdGUuZXhwb3J0cz1JfSwzNzE1Oih0ZSxqLGQpPT57dmFyIFM9ajtTLnV0aWxzPWQoNjQzNiksUy5jb21tb249ZCg1NzcyKSxT''@;'; put 'put ''LnNoYT1kKDkwNDEpLFMucmlwZW1kPWQoMjk0OSksUy5obWFjPWQoMjM0NCksUy5zaGExPVMuc2hhLnNoYTEsUy5zaGEyNTY9Uy5zaGEuc2hhMjU2LFMuc2hhMjI0PVMuc2hhLnNoYTIyNCxTLnNoYTM4ND1TLnNoYS5zaGEzODQsUy5zaGE1MTI9Uy5zaGEuc2hhNTEyLFMucmlwZW1kMTYwPVMu''@;'; put 'put ''cmlwZW1kLnJpcGVtZDE2MH0sNTc3MjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY0MzYpLGg9ZCg5NzQ2KTtmdW5jdGlvbiBvKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0''@;'; put 'put ''aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMu''@;'; put 'put ''YmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1qLkJsb2NrSGFzaD1vLG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihmLFQpe2lmKGY9Uy50b0FycmF5KGYsVCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KGYpOmYsdGhp''@;'; put 'put ''cy5wZW5kaW5nVG90YWwrPWYubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEE9KGY9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz1mLnNsaWNlKGYubGVuZ3RoLUEsZi5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVu''@;'; put 'put ''Z3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLGY9Uy5qb2luMzIoZiwwLGYubGVuZ3RoLUEsdGhpcy5lbmRpYW4pO2Zvcih2YXIgTT0wO008Zi5sZW5ndGg7TSs9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUoZixNLE0rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmRp''@;'; put 'put ''Z2VzdD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLGgobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KGYpfSxvLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5wZW5kaW5nVG90YWwsVD10aGlzLl9kZWx0YTgsQT1ULShmK3Ro''@;'; put 'put ''aXMucGFkTGVuZ3RoKSVULE09bmV3IEFycmF5KEErdGhpcy5wYWRMZW5ndGgpO01bMF09MTI4O2Zvcih2YXIgTz0xO088QTtPKyspTVtPXT0wO2lmKGY8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgRD04O0Q8dGhpcy5wYWRMZW5ndGg7RCsrKU1bTysrXT0wO01bTysrXT0wLE1b''@;'; put 'put ''TysrXT0wLE1bTysrXT0wLE1bTysrXT0wLE1bTysrXT1mPj4+MjQmMjU1LE1bTysrXT1mPj4+MTYmMjU1LE1bTysrXT1mPj4+OCYyNTUsTVtPKytdPTI1NSZmfWVsc2UgZm9yKE1bTysrXT0yNTUmZixNW08rK109Zj4+PjgmMjU1LE1bTysrXT1mPj4+MTYmMjU1LE1bTysrXT1mPj4+MjQmMjU1''@;'; put 'put ''LE1bTysrXT0wLE1bTysrXT0wLE1bTysrXT0wLE1bTysrXT0wLEQ9ODtEPHRoaXMucGFkTGVuZ3RoO0QrKylNW08rK109MDtyZXR1cm4gTX19LDIzNDQ6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg2NDM2KSxoPWQoOTc0Nik7ZnVuY3Rpb24gbyhJLGYsVCl7aWYoISh0aGlzIGlu''@;'; put 'put ''c3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKEksZixUKTt0aGlzLkhhc2g9SSx0aGlzLmJsb2NrU2l6ZT1JLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1JLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoUy50b0FycmF5KGYsVCkpfXRlLmV4cG9y''@;'; put 'put ''dHM9byxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihmKXtmLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKGY9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShmKS5kaWdlc3QoKSksaChmLmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgVD1mLmxlbmd0aDtUPHRoaXMuYmxvY2tTaXplO1Qr''@;'; put 'put ''KylmLnB1c2goMCk7Zm9yKFQ9MDtUPGYubGVuZ3RoO1QrKylmW1RdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGYpLFQ9MDtUPGYubGVuZ3RoO1QrKylmW1RdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGYpfSxvLnByb3RvdHlwZS51''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24oZixUKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoZixUKSx0aGlzfSxvLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KGYpfX0sMjk0OToodGUs''@;'; put 'put ''aixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY0MzYpLGg9ZCg1NzcyKSxvPVMucm90bDMyLEk9Uy5zdW0zMixmPVMuc3VtMzJfMyxUPVMuc3VtMzJfNCxBPWguQmxvY2tIYXNoO2Z1bmN0aW9uIE0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBNKSlyZXR1cm4gbmV3IE07QS5jYWxsKHRoaXMp''@;'; put 'put ''LHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIE8oeixaLFUsSyl7cmV0dXJuIHo8PTE1P1peVV5LOno8PTMxP1omVXx+WiZLOno8PTQ3PyhafH5VKV5LOno8PTYzP1omS3xV''@;'; put 'put ''Jn5LOlpeKFV8fkspfWZ1bmN0aW9uIEUoeil7cmV0dXJuIHo8PTE1PzEzNTI4Mjk5MjY6ejw9MzE/MTU0ODYwMzY4NDp6PD00Nz8xODM2MDcyNjkxOno8PTYzPzIwNTM5OTQyMTc6MH1TLmluaGVyaXRzKE0sQSksai5yaXBlbWQxNjA9TSxNLmJsb2NrU2l6ZT01MTIsTS5vdXRTaXplPTE2MCxN''@;'; put 'put ''LmhtYWNTdHJlbmd0aD0xOTIsTS5wYWRMZW5ndGg9NjQsTS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihaLFUpe2Zvcih2YXIgSz10aGlzLmhbMF0sWD10aGlzLmhbMV0sbmU9dGhpcy5oWzJdLHNlPXRoaXMuaFszXSxoZT10aGlzLmhbNF0sX2U9SyxtZT1YLEZlPW5lLFI9c2Uscz1oZSx1''@;'; put 'put ''PTA7dTw4MDt1Kyspe3ZhciB2PUkobyhUKEssTyh1LFgsbmUsc2UpLFpbQlt1XStVXSwoej11KTw9MTU/MDp6PD0zMT8xNTE4NTAwMjQ5Ono8PTQ3PzE4NTk3NzUzOTM6ejw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4KSxOW3VdKSxoZSk7Sz1oZSxoZT1zZSxzZT1vKG5lLDEwKSxuZT1YLFg9''@;'; put 'put ''dix2PUkobyhUKF9lLE8oNzktdSxtZSxGZSxSKSxaW0ZbdV0rVV0sRSh1KSksSFt1XSkscyksX2U9cyxzPVIsUj1vKEZlLDEwKSxGZT1tZSxtZT12fXZhciB6O3Y9Zih0aGlzLmhbMV0sbmUsUiksdGhpcy5oWzFdPWYodGhpcy5oWzJdLHNlLHMpLHRoaXMuaFsyXT1mKHRoaXMuaFszXSxoZSxf''@;'; put 'put ''ZSksdGhpcy5oWzNdPWYodGhpcy5oWzRdLEssbWUpLHRoaXMuaFs0XT1mKHRoaXMuaFswXSxYLEZlKSx0aGlzLmhbMF09dn0sTS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihaKXtyZXR1cm4iaGV4Ij09PVo/Uy50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6Uy5zcGxpdDMyKHRoaXMuaCwi''@;'; put 'put ''bGl0dGxlIil9O3ZhciBCPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUs''@;'; put 'put ''NiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLEY9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0''@;'; put 'put ''LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sTj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcs''@;'; put 'put ''MTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sSD1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywx''@;'; put 'put ''Miw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KHRlLGosZCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7ai5zaGExPWQoNDc2MSksai5zaGEyMjQ9ZCg3OTkpLGouc2hhMjU2PWQoOTM0NCksai5zaGEzODQ9ZCg3NzIpLGouc2hhNTEyPWQoNTkwMCl9LDQ3NjE6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg2NDM2KSxoPWQoNTc3Miksbz1kKDcwMzgpLEk9Uy5y''@;'; put 'put ''b3RsMzIsZj1TLnN1bTMyLFQ9Uy5zdW0zMl81LEE9by5mdF8xLE09aC5CbG9ja0hhc2gsTz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gRCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEQpKXJldHVybiBuZXcgRDtNLmNhbGwodGhpcyksdGhp''@;'; put 'put ''cy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9Uy5pbmhlcml0cyhELE0pLHRlLmV4cG9ydHM9RCxELmJsb2NrU2l6ZT01MTIsRC5vdXRTaXplPTE2MCxELmhtYWNTdHJlbmd0aD04MCxELnBhZExl''@;'; put 'put ''bmd0aD02NCxELnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEIsRil7Zm9yKHZhciBOPXRoaXMuVyxIPTA7SDwxNjtIKyspTltIXT1CW0YrSF07Zm9yKDtIPE4ubGVuZ3RoO0grKylOW0hdPUkoTltILTNdXk5bSC04XV5OW0gtMTRdXk5bSC0xNl0sMSk7dmFyIHo9dGhpcy5oWzBdLFo9dGhp''@;'; put 'put ''cy5oWzFdLFU9dGhpcy5oWzJdLEs9dGhpcy5oWzNdLFg9dGhpcy5oWzRdO2ZvcihIPTA7SDxOLmxlbmd0aDtIKyspe3ZhciBuZT1+fihILzIwKSxzZT1UKEkoeiw1KSxBKG5lLFosVSxLKSxYLE5bSF0sT1tuZV0pO1g9SyxLPVUsVT1JKFosMzApLFo9eix6PXNlfXRoaXMuaFswXT1mKHRoaXMu''@;'; put 'put ''aFswXSx6KSx0aGlzLmhbMV09Zih0aGlzLmhbMV0sWiksdGhpcy5oWzJdPWYodGhpcy5oWzJdLFUpLHRoaXMuaFszXT1mKHRoaXMuaFszXSxLKSx0aGlzLmhbNF09Zih0aGlzLmhbNF0sWCl9LEQucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oQil7cmV0dXJuImhleCI9PT1CP1MudG9IZXgz''@;'; put 'put ''Mih0aGlzLmgsImJpZyIpOlMuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNjQzNiksaD1kKDkzNDQpO2Z1bmN0aW9uIG8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG87aC5jYWxsKHRoaXMpLHRoaXMuaD1b''@;'; put 'put ''MzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19Uy5pbmhlcml0cyhvLGgpLHRlLmV4cG9ydHM9byxvLmJsb2NrU2l6ZT01MTIsby5vdXRTaXplPTIyNCxvLmhtYWNTdHJlbmd0aD0xOTIs''@;'; put 'put ''by5wYWRMZW5ndGg9NjQsby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihmKXtyZXR1cm4iaGV4Ij09PWY/Uy50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTpTLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTM0NDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgUz1kKDY0MzYpLGg9ZCg1NzcyKSxvPWQoNzAzOCksST1kKDk3NDYpLGY9Uy5zdW0zMixUPVMuc3VtMzJfNCxBPVMuc3VtMzJfNSxNPW8uY2gzMixPPW8ubWFqMzIsRD1vLnMwXzI1NixFPW8uczFfMjU2LEI9by5nMF8yNTYsRj1vLmcxXzI1NixOPWguQmxvY2tIYXNoLEg9WzExMTYzNTI0''@;'; put 'put ''MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAs''@;'; put 'put ''MzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgy''@;'; put 'put ''NDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcx''@;'; put 'put ''OTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMy''@;'; put 'put ''MDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24geigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgejtOLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2''@;'; put 'put ''MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPUgsdGhpcy5XPW5ldyBBcnJheSg2NCl9Uy5pbmhlcml0cyh6LE4pLHRlLmV4cG9ydHM9eix6LmJsb2NrU2l6ZT01MTIsei5vdXRTaXplPTI1Nix6LmhtYWNTdHJlbmd0aD0xOTIsei5wYWRMZW5ndGg9NjQsei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv''@;'; put 'put ''bihVLEspe2Zvcih2YXIgWD10aGlzLlcsbmU9MDtuZTwxNjtuZSsrKVhbbmVdPVVbSytuZV07Zm9yKDtuZTxYLmxlbmd0aDtuZSsrKVhbbmVdPVQoRihYW25lLTJdKSxYW25lLTddLEIoWFtuZS0xNV0pLFhbbmUtMTZdKTt2YXIgc2U9dGhpcy5oWzBdLGhlPXRoaXMuaFsxXSxfZT10aGlzLmhb''@;'; put 'put ''Ml0sbWU9dGhpcy5oWzNdLEZlPXRoaXMuaFs0XSxSPXRoaXMuaFs1XSxzPXRoaXMuaFs2XSx1PXRoaXMuaFs3XTtmb3IoSSh0aGlzLmsubGVuZ3RoPT09WC5sZW5ndGgpLG5lPTA7bmU8WC5sZW5ndGg7bmUrKyl7dmFyIHY9QSh1LEUoRmUpLE0oRmUsUixzKSx0aGlzLmtbbmVdLFhbbmVdKSxw''@;'; put 'put ''PWYoRChzZSksTyhzZSxoZSxfZSkpO3U9cyxzPVIsUj1GZSxGZT1mKG1lLHYpLG1lPV9lLF9lPWhlLGhlPXNlLHNlPWYodixwKX10aGlzLmhbMF09Zih0aGlzLmhbMF0sc2UpLHRoaXMuaFsxXT1mKHRoaXMuaFsxXSxoZSksdGhpcy5oWzJdPWYodGhpcy5oWzJdLF9lKSx0aGlzLmhbM109Zih0''@;'; put 'put ''aGlzLmhbM10sbWUpLHRoaXMuaFs0XT1mKHRoaXMuaFs0XSxGZSksdGhpcy5oWzVdPWYodGhpcy5oWzVdLFIpLHRoaXMuaFs2XT1mKHRoaXMuaFs2XSxzKSx0aGlzLmhbN109Zih0aGlzLmhbN10sdSl9LHoucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oVSl7cmV0dXJuImhleCI9PT1VP1Mu''@;'; put 'put ''dG9IZXgzMih0aGlzLmgsImJpZyIpOlMuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNjQzNiksaD1kKDU5MDApO2Z1bmN0aW9uIG8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG87aC5jYWxsKHRoaXMpLHRo''@;'; put 'put ''aXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4''@;'; put 'put ''MTMsMzIwNDA3NTQyOF19Uy5pbmhlcml0cyhvLGgpLHRlLmV4cG9ydHM9byxvLmJsb2NrU2l6ZT0xMDI0LG8ub3V0U2l6ZT0zODQsby5obWFjU3RyZW5ndGg9MTkyLG8ucGFkTGVuZ3RoPTEyOCxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGYpe3JldHVybiJoZXgiPT09Zj9TLnRvSGV4''@;'; put 'put ''MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTpTLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg2NDM2KSxoPWQoNTc3Miksbz1kKDk3NDYpLEk9Uy5yb3RyNjRfaGksZj1TLnJvdHI2NF9sbyxUPVMuc2hy''@;'; put 'put ''NjRfaGksQT1TLnNocjY0X2xvLE09Uy5zdW02NCxPPVMuc3VtNjRfaGksRD1TLnN1bTY0X2xvLEU9Uy5zdW02NF80X2hpLEI9Uy5zdW02NF80X2xvLEY9Uy5zdW02NF81X2hpLE49Uy5zdW02NF81X2xvLEg9aC5CbG9ja0hhc2gsej1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEs''@;'; put 'put ''NjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMx''@;'; put 'put ''MDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYx''@;'; put 'put ''MzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgy''@;'; put 'put ''LDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2''@;'; put 'put ''MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3''@;'; put 'put ''NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMz''@;'; put 'put ''NDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0''@;'; put 'put ''Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkz''@;'; put 'put ''NTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1''@;'; put 'put ''NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3''@;'; put 'put ''MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIFooKXtpZighKHRoaXMgaW5zdGFuY2VvZiBaKSlyZXR1cm4gbmV3IFo7SC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQy''@;'; put 'put ''LDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXosdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIFUodixw''@;'; put 'put ''LF8sayxMKXt2YXIgeT12Jl9efnYmTDtyZXR1cm4geTwwJiYoeSs9NDI5NDk2NzI5NikseX1mdW5jdGlvbiBLKHYscCxfLGssTCx5KXt2YXIgbD1wJmtefnAmeTtyZXR1cm4gbDwwJiYobCs9NDI5NDk2NzI5NiksbH1mdW5jdGlvbiBYKHYscCxfLGssTCl7dmFyIHk9diZfXnYmTF5fJkw7cmV0''@;'; put 'put ''dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYpLHl9ZnVuY3Rpb24gbmUodixwLF8sayxMLHkpe3ZhciBsPXAma15wJnleayZ5O3JldHVybiBsPDAmJihsKz00Mjk0OTY3Mjk2KSxsfWZ1bmN0aW9uIHNlKHYscCl7dmFyIHk9SSh2LHAsMjgpXkkocCx2LDIpXkkocCx2LDcpO3JldHVybiB5PDAmJih5''@;'; put 'put ''Kz00Mjk0OTY3Mjk2KSx5fWZ1bmN0aW9uIGhlKHYscCl7dmFyIHk9Zih2LHAsMjgpXmYocCx2LDIpXmYocCx2LDcpO3JldHVybiB5PDAmJih5Kz00Mjk0OTY3Mjk2KSx5fWZ1bmN0aW9uIF9lKHYscCl7dmFyIHk9SSh2LHAsMTQpXkkodixwLDE4KV5JKHAsdiw5KTtyZXR1cm4geTwwJiYoeSs9''@;'; put 'put ''NDI5NDk2NzI5NikseX1mdW5jdGlvbiBtZSh2LHApe3ZhciB5PWYodixwLDE0KV5mKHYscCwxOCleZihwLHYsOSk7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYpLHl9ZnVuY3Rpb24gRmUodixwKXt2YXIgeT1JKHYscCwxKV5JKHYscCw4KV5UKHYscCw3KTtyZXR1cm4geTwwJiYoeSs9NDI5''@;'; put 'put ''NDk2NzI5NikseX1mdW5jdGlvbiBSKHYscCl7dmFyIHk9Zih2LHAsMSleZih2LHAsOCleQSh2LHAsNyk7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYpLHl9ZnVuY3Rpb24gcyh2LHApe3ZhciB5PUkodixwLDE5KV5JKHAsdiwyOSleVCh2LHAsNik7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5Njcy''@;'; put 'put ''OTYpLHl9ZnVuY3Rpb24gdSh2LHApe3ZhciB5PWYodixwLDE5KV5mKHAsdiwyOSleQSh2LHAsNik7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYpLHl9Uy5pbmhlcml0cyhaLEgpLHRlLmV4cG9ydHM9WixaLmJsb2NrU2l6ZT0xMDI0LFoub3V0U2l6ZT01MTIsWi5obWFjU3RyZW5ndGg9MTky''@;'; put 'put ''LFoucGFkTGVuZ3RoPTEyOCxaLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKHAsXyl7Zm9yKHZhciBrPXRoaXMuVyxMPTA7TDwzMjtMKyspa1tMXT1wW18rTF07Zm9yKDtMPGsubGVuZ3RoO0wrPTIpe3ZhciB5PXMoa1tMLTRdLGtbTC0zXSksbD11KGtbTC00XSxrW0wtM10pLGI9''@;'; put 'put ''a1tMLTE0XSxxPWtbTC0xM10sRz1GZShrW0wtMzBdLGtbTC0yOV0pLFE9UihrW0wtMzBdLGtbTC0yOV0pLHBlPWtbTC0zMl0sUGU9a1tMLTMxXTtrW0xdPUUoeSxsLGIscSxHLFEscGUsUGUpLGtbTCsxXT1CKHksbCxiLHEsRyxRLHBlLFBlKX19LFoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24ocCxfKXt0aGlzLl9wcmVwYXJlQmxvY2socCxfKTt2YXIgaz10aGlzLlcsTD10aGlzLmhbMF0seT10aGlzLmhbMV0sbD10aGlzLmhbMl0sYj10aGlzLmhbM10scT10aGlzLmhbNF0sRz10aGlzLmhbNV0sUT10aGlzLmhbNl0scGU9dGhpcy5oWzddLFBlPXRoaXMuaFs4XSxaZT10aGlzLmhb''@;'; put 'put ''OV0scWU9dGhpcy5oWzEwXSx2ZT10aGlzLmhbMTFdLHVlPXRoaXMuaFsxMl0semU9dGhpcy5oWzEzXSxPZT10aGlzLmhbMTRdLENlPXRoaXMuaFsxNV07byh0aGlzLmsubGVuZ3RoPT09ay5sZW5ndGgpO2Zvcih2YXIga2U9MDtrZTxrLmxlbmd0aDtrZSs9Mil7dmFyIHhlPU9lLE1lPUNlLEll''@;'; put 'put ''PV9lKFBlLFplKSxiZT1tZShQZSxaZSksd2U9VShQZSwwLHFlLDAsdWUpLHB0PUsoMCxaZSwwLHZlLDAsemUpLEtlPXRoaXMua1trZV0sWWU9dGhpcy5rW2tlKzFdLHF0PWtba2VdLGh0PWtba2UrMV0sdnQ9Rih4ZSxNZSxJZSxiZSx3ZSxwdCxLZSxZZSxxdCxodCksWXQ9Tih4ZSxNZSxJZSxi''@;'; put 'put ''ZSx3ZSxwdCxLZSxZZSxxdCxodCk7eGU9c2UoTCx5KSxNZT1oZShMLHkpLEllPVgoTCwwLGwsMCxxKSxiZT1uZSgwLHksMCxiLDAsRyk7dmFyIHR0PU8oeGUsTWUsSWUsYmUpLFVlPUQoeGUsTWUsSWUsYmUpO09lPXVlLENlPXplLHVlPXFlLHplPXZlLHFlPVBlLHZlPVplLFBlPU8oUSxwZSx2''@;'; put 'put ''dCxZdCksWmU9RChwZSxwZSx2dCxZdCksUT1xLHBlPUcscT1sLEc9YixsPUwsYj15LEw9Tyh2dCxZdCx0dCxVZSkseT1EKHZ0LFl0LHR0LFVlKX1NKHRoaXMuaCwwLEwseSksTSh0aGlzLmgsMixsLGIpLE0odGhpcy5oLDQscSxHKSxNKHRoaXMuaCw2LFEscGUpLE0odGhpcy5oLDgsUGUsWmUp''@;'; put 'put ''LE0odGhpcy5oLDEwLHFlLHZlKSxNKHRoaXMuaCwxMix1ZSx6ZSksTSh0aGlzLmgsMTQsT2UsQ2UpfSxaLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHApe3JldHVybiJoZXgiPT09cD9TLnRvSGV4MzIodGhpcy5oLCJiaWciKTpTLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcwMzg6KHRl''@;'; put 'put ''LGosZCk9PnsidXNlIHN0cmljdCI7dmFyIGg9ZCg2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gSShFLEIsRil7cmV0dXJuIEUmQl5+RSZGfWZ1bmN0aW9uIGYoRSxCLEYpe3JldHVybiBFJkJeRSZGXkImRn1mdW5jdGlvbiBUKEUsQixGKXtyZXR1cm4gRV5CXkZ9ai5mdF8xPWZ1bmN0aW9uIG8oRSxC''@;'; put 'put ''LEYsTil7cmV0dXJuIDA9PT1FP0koQixGLE4pOjE9PT1FfHwzPT09RT9UKEIsRixOKToyPT09RT9mKEIsRixOKTp2b2lkIDB9LGouY2gzMj1JLGoubWFqMzI9ZixqLnAzMj1ULGouczBfMjU2PWZ1bmN0aW9uIEEoRSl7cmV0dXJuIGgoRSwyKV5oKEUsMTMpXmgoRSwyMil9LGouczFfMjU2PWZ1''@;'; put 'put ''bmN0aW9uIE0oRSl7cmV0dXJuIGgoRSw2KV5oKEUsMTEpXmgoRSwyNSl9LGouZzBfMjU2PWZ1bmN0aW9uIE8oRSl7cmV0dXJuIGgoRSw3KV5oKEUsMTgpXkU+Pj4zfSxqLmcxXzI1Nj1mdW5jdGlvbiBEKEUpe3JldHVybiBoKEUsMTcpXmgoRSwxOSleRT4+PjEwfX0sNjQzNjoodGUsaixkKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk3NDYpLGg9ZCg1NzE3KTtmdW5jdGlvbiBvKHUsdil7cmV0dXJuISg1NTI5NiE9KDY0NTEyJnUuY2hhckNvZGVBdCh2KSl8fHY8MHx8disxPj11Lmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImdS5jaGFyQ29kZUF0KHYrMSkpfWZ1bmN0aW9uIFQodSl7cmV0''@;'; put 'put ''dXJuKHU+Pj4yNHx1Pj4+OCY2NTI4MHx1PDw4JjE2NzExNjgwfCgyNTUmdSk8PDI0KT4+PjB9ZnVuY3Rpb24gTSh1KXtyZXR1cm4gMT09PXUubGVuZ3RoPyIwIit1OnV9ZnVuY3Rpb24gTyh1KXtyZXR1cm4gNz09PXUubGVuZ3RoPyIwIit1OjY9PT11Lmxlbmd0aD8iMDAiK3U6NT09PXUubGVu''@;'; put 'put ''Z3RoPyIwMDAiK3U6ND09PXUubGVuZ3RoPyIwMDAwIit1OjM9PT11Lmxlbmd0aD8iMDAwMDAiK3U6Mj09PXUubGVuZ3RoPyIwMDAwMDAiK3U6MT09PXUubGVuZ3RoPyIwMDAwMDAwIit1OnV9ai5pbmhlcml0cz1oLGoudG9BcnJheT1mdW5jdGlvbiBJKHUsdil7aWYoQXJyYXkuaXNBcnJheSh1''@;'; put 'put ''KSlyZXR1cm4gdS5zbGljZSgpO2lmKCF1KXJldHVybltdO3ZhciBwPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdSlpZih2KXtpZigiaGV4Ij09PXYpZm9yKCh1PXUucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYodT0iMCIrdSksaz0wO2s8dS5sZW5ndGg7ays9Milw''@;'; put 'put ''LnB1c2gocGFyc2VJbnQodVtrXSt1W2srMV0sMTYpKX1lbHNlIGZvcih2YXIgXz0wLGs9MDtrPHUubGVuZ3RoO2srKyl7dmFyIEw9dS5jaGFyQ29kZUF0KGspO0w8MTI4P3BbXysrXT1MOkw8MjA0OD8ocFtfKytdPUw+PjZ8MTkyLHBbXysrXT02MyZMfDEyOCk6byh1LGspPyhMPTY1NTM2Kygo''@;'; put 'put ''MTAyMyZMKTw8MTApKygxMDIzJnUuY2hhckNvZGVBdCgrK2spKSxwW18rK109TD4+MTh8MjQwLHBbXysrXT1MPj4xMiY2M3wxMjgscFtfKytdPUw+PjYmNjN8MTI4LHBbXysrXT02MyZMfDEyOCk6KHBbXysrXT1MPj4xMnwyMjQscFtfKytdPUw+PjYmNjN8MTI4LHBbXysrXT02MyZMfDEyOCl9''@;'; put 'put ''ZWxzZSBmb3Ioaz0wO2s8dS5sZW5ndGg7aysrKXBba109MHx1W2tdO3JldHVybiBwfSxqLnRvSGV4PWZ1bmN0aW9uIGYodSl7Zm9yKHZhciB2PSIiLHA9MDtwPHUubGVuZ3RoO3ArKyl2Kz1NKHVbcF0udG9TdHJpbmcoMTYpKTtyZXR1cm4gdn0sai5odG9ubD1ULGoudG9IZXgzMj1mdW5jdGlv''@;'; put 'put ''biBBKHUsdil7Zm9yKHZhciBwPSIiLF89MDtfPHUubGVuZ3RoO18rKyl7dmFyIGs9dVtfXTsibGl0dGxlIj09PXYmJihrPVQoaykpLHArPU8oay50b1N0cmluZygxNikpfXJldHVybiBwfSxqLnplcm8yPU0sai56ZXJvOD1PLGouam9pbjMyPWZ1bmN0aW9uIEQodSx2LHAsXyl7dmFyIGs9cC12''@;'; put 'put ''O1MoayU0PT0wKTtmb3IodmFyIEw9bmV3IEFycmF5KGsvNCkseT0wLGw9djt5PEwubGVuZ3RoO3krKyxsKz00KUxbeV09KCJiaWciPT09Xz91W2xdPDwyNHx1W2wrMV08PDE2fHVbbCsyXTw8OHx1W2wrM106dVtsKzNdPDwyNHx1W2wrMl08PDE2fHVbbCsxXTw8OHx1W2xdKT4+PjA7cmV0dXJu''@;'; put 'put ''IEx9LGouc3BsaXQzMj1mdW5jdGlvbiBFKHUsdil7Zm9yKHZhciBwPW5ldyBBcnJheSg0KnUubGVuZ3RoKSxfPTAsaz0wO188dS5sZW5ndGg7XysrLGsrPTQpe3ZhciBMPXVbX107ImJpZyI9PT12PyhwW2tdPUw+Pj4yNCxwW2srMV09TD4+PjE2JjI1NSxwW2srMl09TD4+PjgmMjU1LHBbaysz''@;'; put 'put ''XT0yNTUmTCk6KHBbayszXT1MPj4+MjQscFtrKzJdPUw+Pj4xNiYyNTUscFtrKzFdPUw+Pj44JjI1NSxwW2tdPTI1NSZMKX1yZXR1cm4gcH0sai5yb3RyMzI9ZnVuY3Rpb24gQih1LHYpe3JldHVybiB1Pj4+dnx1PDwzMi12fSxqLnJvdGwzMj1mdW5jdGlvbiBGKHUsdil7cmV0dXJuIHU8PHZ8''@;'; put 'put ''dT4+PjMyLXZ9LGouc3VtMzI9ZnVuY3Rpb24gTih1LHYpe3JldHVybiB1K3Y+Pj4wfSxqLnN1bTMyXzM9ZnVuY3Rpb24gSCh1LHYscCl7cmV0dXJuIHUrditwPj4+MH0sai5zdW0zMl80PWZ1bmN0aW9uIHoodSx2LHAsXyl7cmV0dXJuIHUrditwK18+Pj4wfSxqLnN1bTMyXzU9ZnVuY3Rpb24g''@;'; put 'put ''Wih1LHYscCxfLGspe3JldHVybiB1K3YrcCtfK2s+Pj4wfSxqLnN1bTY0PWZ1bmN0aW9uIFUodSx2LHAsXyl7dmFyIHk9Xyt1W3YrMV0+Pj4wO3Vbdl09KHk8Xz8xOjApK3ArdVt2XT4+PjAsdVt2KzFdPXl9LGouc3VtNjRfaGk9ZnVuY3Rpb24gSyh1LHYscCxfKXtyZXR1cm4oditfPj4+MDx2''@;'; put 'put ''PzE6MCkrdStwPj4+MH0sai5zdW02NF9sbz1mdW5jdGlvbiBYKHUsdixwLF8pe3JldHVybiB2K18+Pj4wfSxqLnN1bTY0XzRfaGk9ZnVuY3Rpb24gbmUodSx2LHAsXyxrLEwseSxsKXt2YXIgYj0wLHE9djtyZXR1cm4gYis9KHE9cStfPj4+MCk8dj8xOjAsYis9KHE9cStMPj4+MCk8TD8xOjAs''@;'; put 'put ''dStwK2sreSsoYis9KHE9cStsPj4+MCk8bD8xOjApPj4+MH0sai5zdW02NF80X2xvPWZ1bmN0aW9uIHNlKHUsdixwLF8sayxMLHksbCl7cmV0dXJuIHYrXytMK2w+Pj4wfSxqLnN1bTY0XzVfaGk9ZnVuY3Rpb24gaGUodSx2LHAsXyxrLEwseSxsLGIscSl7dmFyIEc9MCxRPXY7cmV0dXJuIEcr''@;'; put 'put ''PShRPVErXz4+PjApPHY/MTowLEcrPShRPVErTD4+PjApPEw/MTowLEcrPShRPVErbD4+PjApPGw/MTowLHUrcCtrK3krYisoRys9KFE9UStxPj4+MCk8cT8xOjApPj4+MH0sai5zdW02NF81X2xvPWZ1bmN0aW9uIF9lKHUsdixwLF8sayxMLHksbCxiLHEpe3JldHVybiB2K18rTCtsK3E+Pj4w''@;'; put 'put ''fSxqLnJvdHI2NF9oaT1mdW5jdGlvbiBtZSh1LHYscCl7cmV0dXJuKHY8PDMyLXB8dT4+PnApPj4+MH0sai5yb3RyNjRfbG89ZnVuY3Rpb24gRmUodSx2LHApe3JldHVybih1PDwzMi1wfHY+Pj5wKT4+PjB9LGouc2hyNjRfaGk9ZnVuY3Rpb24gUih1LHYscCl7cmV0dXJuIHU+Pj5wfSxqLnNo''@;'; put 'put ''cjY0X2xvPWZ1bmN0aW9uIHModSx2LHApe3JldHVybih1PDwzMi1wfHY+Pj5wKT4+PjB9fSw4ODI0Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxvPWQoODYxMik7dGUuZXhwb3J0''@;'; put 'put ''cz1vLmNhbGwoUyxoKX0sMjE1NjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM3MTUpLGg9ZCg0NTA0KSxvPWQoOTc0Nik7ZnVuY3Rpb24gSShmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEkoZik7dGhpcy5oYXNoPWYuaGFzaCx0aGlzLnByZWRSZXNpc3Q9''@;'; put 'put ''ISFmLnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PWYubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7''@;'; put 'put ''dmFyIFQ9aC50b0FycmF5KGYuZW50cm9weSxmLmVudHJvcHlFbmN8fCJoZXgiKSxBPWgudG9BcnJheShmLm5vbmNlLGYubm9uY2VFbmN8fCJoZXgiKSxNPWgudG9BcnJheShmLnBlcnMsZi5wZXJzRW5jfHwiaGV4Iik7byhULmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2gg''@;'; put 'put ''ZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChULEEsTSl9dGUuZXhwb3J0cz1JLEkucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFQsQSxNKXt2YXIgTz1ULmNvbmNhdChBKS5jb25jYXQoTSk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91''@;'; put 'put ''dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5WLmxlbmd0aDtEKyspdGhpcy5LW0RdPTAsdGhpcy5WW0RdPTE7dGhpcy5fdXBkYXRlKE8pLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxJ''@;'; put 'put ''LnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgUy5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxJLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFQpe3ZhciBBPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtUJiYoQT1BLnVwZGF0ZShUKSksdGhp''@;'; put 'put ''cy5LPUEuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxUJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoVCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5k''@;'; put 'put ''aWdlc3QoKSl9LEkucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihULEEsTSxPKXsic3RyaW5nIiE9dHlwZW9mIEEmJihPPU0sTT1BLEE9bnVsbCksVD1oLnRvQXJyYXkoVCxBKSxNPWgudG9BcnJheShNLE8pLG8oVC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJv''@;'; put 'put ''cHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShULmNvbmNhdChNfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxJLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihULEEsTSxPKXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgQSYmKE89TSxNPUEsQT1udWxsKSxNJiYoTT1oLnRvQXJyYXkoTSxPfHwiaGV4IiksdGhpcy5fdXBkYXRlKE0pKTtmb3IodmFyIEQ9W107RC5sZW5ndGg8VDspdGhpcy5WPXRoaXMuX2htYWMoKS51''@;'; put 'put ''cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxEPUQuY29uY2F0KHRoaXMuVik7dmFyIEU9RC5zbGljZSgwLFQpO3JldHVybiB0aGlzLl91cGRhdGUoTSksdGhpcy5fcmVzZWVkKyssaC5lbmNvZGUoRSxBKX19LDY0NToodGUsaik9PntqLnJlYWQ9ZnVuY3Rpb24oZCxTLGgsbyxJKXt2YXIgZixULEE9''@;'; put 'put ''OCpJLW8tMSxNPSgxPDxBKS0xLE89TT4+MSxEPS03LEU9aD9JLTE6MCxCPWg/LTE6MSxGPWRbUytFXTtmb3IoRSs9QixmPUYmKDE8PC1EKS0xLEY+Pj0tRCxEKz1BO0Q+MDtmPTI1NipmK2RbUytFXSxFKz1CLEQtPTgpO2ZvcihUPWYmKDE8PC1EKS0xLGY+Pj0tRCxEKz1vO0Q+MDtUPTI1NipU''@;'; put 'put ''K2RbUytFXSxFKz1CLEQtPTgpO2lmKDA9PT1mKWY9MS1PO2Vsc2V7aWYoZj09PU0pcmV0dXJuIFQ/TmFOOjEvMCooRj8tMToxKTtUKz1NYXRoLnBvdygyLG8pLGYtPU99cmV0dXJuKEY/LTE6MSkqVCpNYXRoLnBvdygyLGYtbyl9LGoud3JpdGU9ZnVuY3Rpb24oZCxTLGgsbyxJLGYpe3ZhciBU''@;'; put 'put ''LEEsTSxPPTgqZi1JLTEsRD0oMTw8TyktMSxFPUQ+PjEsQj0yMz09PUk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLEY9bz8wOmYtMSxOPW8/MTotMSxIPVM8MHx8MD09PVMmJjEvUzwwPzE6MDtmb3IoUz1NYXRoLmFicyhTKSxpc05hTihTKXx8Uz09PTEvMD8oQT1pc05hTihT''@;'; put 'put ''KT8xOjAsVD1EKTooVD1NYXRoLmZsb29yKE1hdGgubG9nKFMpL01hdGguTE4yKSxTKihNPU1hdGgucG93KDIsLVQpKTwxJiYoVC0tLE0qPTIpLChTKz1UK0U+PTE/Qi9NOkIqTWF0aC5wb3coMiwxLUUpKSpNPj0yJiYoVCsrLE0vPTIpLFQrRT49RD8oQT0wLFQ9RCk6VCtFPj0xPyhBPShTKk0t''@;'; put 'put ''MSkqTWF0aC5wb3coMixJKSxUKz1FKTooQT1TKk1hdGgucG93KDIsRS0xKSpNYXRoLnBvdygyLEkpLFQ9MCkpO0k+PTg7ZFtoK0ZdPTI1NSZBLEYrPU4sQS89MjU2LEktPTgpO2ZvcihUPVQ8PEl8QSxPKz1JO08+MDtkW2grRl09MjU1JlQsRis9TixULz0yNTYsTy09OCk7ZFtoK0YtTl18PTEy''@;'; put 'put ''OCpIfX0sNTcxNzp0ZT0+e3RlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZCxTKXtTJiYoZC5zdXBlcl89UyxkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZCxlbnVtZXJhYmxlOiExLHdy''@;'; put 'put ''aXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKGQsUyl7aWYoUyl7ZC5zdXBlcl89Uzt2YXIgaD1mdW5jdGlvbigpe307aC5wcm90b3R5cGU9Uy5wcm90b3R5cGUsZC5wcm90b3R5cGU9bmV3IGgsZC5wcm90b3R5cGUuY29uc3RydWN0b3I9ZH19fSwyNTg0Oih0ZSxqLGQp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNjQxMCkoKSxvPWQoNzM3OSkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxJPWZ1bmN0aW9uKE0pe3JldHVybiEoUyYmTSYmIm9iamVjdCI9PXR5cGVvZiBNJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gTSkmJiJbb2JqZWN0IEFyZ3VtZW50c10i''@;'; put 'put ''PT09byhNKX0sZj1mdW5jdGlvbihNKXtyZXR1cm4hIUkoTSl8fG51bGwhPT1NJiYib2JqZWN0Ij09dHlwZW9mIE0mJiJsZW5ndGgiaW4gTSYmIm51bWJlciI9PXR5cGVvZiBNLmxlbmd0aCYmTS5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSIhPT1vKE0pJiYiY2FsbGVlImluIE0mJiJbb2Jq''@;'; put 'put ''ZWN0IEZ1bmN0aW9uXSI9PT1vKE0uY2FsbGVlKX0sVD1mdW5jdGlvbigpe3JldHVybiBJKGFyZ3VtZW50cyl9KCk7SS5pc0xlZ2FjeUFyZ3VtZW50cz1mLHRlLmV4cG9ydHM9VD9JOmZ9LDUzMjA6dGU9PnsidXNlIHN0cmljdCI7dmFyIFMsaCxqPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmlu''@;'; put 'put ''ZyxkPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e1M9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgi''@;'; put 'put ''LHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBofX0pLGg9e30sZChmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLFMpfWNhdGNoKFope1ohPT1oJiYoZD1udWxsKX1lbHNlIGQ9bnVsbDt2YXIgbz0vXlxzKmNsYXNzXGIvLEk9ZnVuY3Rpb24oVSl7dHJ5e3ZhciBLPWouY2FsbChVKTtyZXR1cm4gby50''@;'; put 'put ''ZXN0KEspfWNhdGNoe3JldHVybiExfX0sZj1mdW5jdGlvbihVKXt0cnl7cmV0dXJuIUkoVSkmJihqLmNhbGwoVSksITApfWNhdGNoe3JldHVybiExfX0sVD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcs''@;'; put 'put ''Tj0hKDAgaW5bLF0pLEg9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIHo9ZG9jdW1lbnQuYWxsO1QuY2FsbCh6KT09PVQuY2FsbChkb2N1bWVudC5hbGwpJiYoSD1mdW5jdGlvbihVKXtpZigoTnx8IVUpJiYodHlwZW9mIFU+InUifHwib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIFUpKXRyeXt2YXIgSz1ULmNhbGwoVSk7cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT1LfHwiW29iamVjdCBIVE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09S3x8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PUt8fCJbb2JqZWN0IE9iamVjdF0i''@;'; put 'put ''PT09SykmJm51bGw9PVUoIiIpfWNhdGNoe31yZXR1cm4hMX0pfXRlLmV4cG9ydHM9ZD9mdW5jdGlvbihVKXtpZihIKFUpKXJldHVybiEwO2lmKCFVfHwiZnVuY3Rpb24iIT10eXBlb2YgVSYmIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3RyeXtkKFUsbnVsbCxTKX1jYXRjaChLKXtpZihL''@;'; put 'put ''IT09aClyZXR1cm4hMX1yZXR1cm4hSShVKSYmZihVKX06ZnVuY3Rpb24oVSl7aWYoSChVKSlyZXR1cm4hMDtpZighVXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFUmJiJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTtpZihGKXJldHVybiBmKFUpO2lmKEkoVSkpcmV0dXJuITE7dmFyIEs9VC5jYWxs''@;'; put 'put ''KFUpO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PUsmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1LJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KEspKSYmZihVKX19LDg2NjI6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIE8sUz1kKDczNzkpLG89ZCg5MjQ2KSgvXlxz''@;'; put 'put ''Kig/OmZ1bmN0aW9uKT9cKi8pLEk9ZCg2NDEwKSgpLGY9ZCgxNjE4KSxUPVMoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxBPVMoIkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyIpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oRSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEUpcmV0dXJuITE7''@;'; put 'put ''aWYobyhBKEUpKSlyZXR1cm4hMDtpZighSSlyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT09VChFKTtpZighZilyZXR1cm4hMTtpZih0eXBlb2YgTz4idSIpe3ZhciBGPWZ1bmN0aW9uKCl7aWYoIUkpcmV0dXJuITE7dHJ5e3JldHVybiBGdW5jdGlvbigicmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKigpIHt9IikoKX1jYXRjaHt9fSgpO089ISFGJiZmKEYpfXJldHVybiBmKEUpPT09T319LDg2MTE6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1mdW5jdGlvbihkKXtyZXR1cm4gZCE9ZH19LDM2MDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU1NTkpLGg9ZCg0Mjg5''@;'; put 'put ''KSxvPWQoODYxMSksST1kKDk0MTUpLGY9ZCgzMTk0KSxUPVMoSSgpLE51bWJlcik7aChULHtnZXRQb2x5ZmlsbDpJLGltcGxlbWVudGF0aW9uOm8sc2hpbTpmfSksdGUuZXhwb3J0cz1UfSw5NDE1Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoODYxMSk7dGUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4mJk51bWJlci5pc05hTihOYU4pJiYhTnVtYmVyLmlzTmFOKCJhIik/TnVtYmVyLmlzTmFOOlN9fSwzMTk0Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDI4OSksaD1kKDk0MTUpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1o''@;'; put 'put ''KCk7cmV0dXJuIFMoTnVtYmVyLHtpc05hTjpJfSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09SX19KSxJfX0sODQyMDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZixTPWQoNzM3OSksaD1kKDY0MTApKCksbz1kKDg4MjQpLEk9ZCg3Mjk2KTtpZihoKXt2YXIg''@;'; put 'put ''VD1TKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxBPXt9LE09ZnVuY3Rpb24oKXt0aHJvdyBBfSxPPXt0b1N0cmluZzpNLHZhbHVlT2Y6TX07InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUmJihPW1N5bWJvbC50b1ByaW1pdGl2ZV09TSksZj1mdW5jdGlvbihGKXtpZighRnx8''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBGKXJldHVybiExO3ZhciBOPUkoRiwibGFzdEluZGV4Iik7aWYoIU58fCFvKE4sInZhbHVlIikpcmV0dXJuITE7dHJ5e1QoRixPKX1jYXRjaCh6KXtyZXR1cm4gej09PUF9fX1lbHNle3ZhciBEPVMoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKTtmPWZ1bmN0''@;'; put 'put ''aW9uKEYpe3JldHVybiEoIUZ8fCJvYmplY3QiIT10eXBlb2YgRiYmImZ1bmN0aW9uIiE9dHlwZW9mIEYpJiYiW29iamVjdCBSZWdFeHBdIj09PUQoRil9fXRlLmV4cG9ydHM9Zn0sNTY5MjoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY0MzApO3RlLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''byl7cmV0dXJuISFTKG8pfX0sNTgyNjp0ZT0+e3ZhciBqPXt9LnRvU3RyaW5nO3RlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09ai5jYWxsKGQpfX0sNjgxMzoodGUsaixkKT0+e2xldCBTO3RyeXtTPWQoNzcpfWNhdGNoe1M9ZCg0''@;'; put 'put ''MTI5KX1jb25zdCBoPWQoODk4MSkse3N0cmluZ2lmeTpvLHN0cmlwQm9tOkl9PWQoNjc4MCk7ZnVuY3Rpb24gVCgpe3JldHVybihUPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOLEg9e30peyJzdHJpbmciPT10eXBlb2YgSCYmKEg9e2VuY29kaW5nOkh9KTtjb25zdCB6PUguZnN8fFMs''@;'; put 'put ''Wj0hKCJ0aHJvd3MiaW4gSCl8fEgudGhyb3dzO2xldCBLLFU9eWllbGQgaC5mcm9tQ2FsbGJhY2soei5yZWFkRmlsZSkoTixIKTtVPUkoVSk7dHJ5e0s9SlNPTi5wYXJzZShVLEg/SC5yZXZpdmVyOm51bGwpfWNhdGNoKFgpe2lmKFopdGhyb3cgWC5tZXNzYWdlPWAke059OiAke1gubWVzc2Fn''@;'; put 'put ''ZX1gLFg7cmV0dXJuIG51bGx9cmV0dXJuIEt9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEE9aC5mcm9tUHJvbWlzZShmdW5jdGlvbiBmKE4pe3JldHVybiBULmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO2Z1bmN0aW9uIEQoKXtyZXR1cm4oRD1fYXN5bmNUb0dlbmVyYXRvcihmdW5j''@;'; put 'put ''dGlvbiooTixILHo9e30pe2NvbnN0IFo9ei5mc3x8UyxVPW8oSCx6KTt5aWVsZCBoLmZyb21DYWxsYmFjayhaLndyaXRlRmlsZSkoTixVLHopfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBFPWguZnJvbVByb21pc2UoZnVuY3Rpb24gTyhOLEgpe3JldHVybiBELmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX0pO3RlLmV4cG9ydHM9e3JlYWRGaWxlOkEscmVhZEZpbGVTeW5jOmZ1bmN0aW9uIE0oTixIPXt9KXsic3RyaW5nIj09dHlwZW9mIEgmJihIPXtlbmNvZGluZzpIfSk7Y29uc3Qgej1ILmZzfHxTLFo9ISgidGhyb3dzImluIEgpfHxILnRocm93czt0cnl7bGV0IFU9ei5yZWFk''@;'; put 'put ''RmlsZVN5bmMoTixIKTtyZXR1cm4gVT1JKFUpLEpTT04ucGFyc2UoVSxILnJldml2ZXIpfWNhdGNoKFUpe2lmKFopdGhyb3cgVS5tZXNzYWdlPWAke059OiAke1UubWVzc2FnZX1gLFU7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6RSx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uIEIoTixILHo9e30p''@;'; put 'put ''e2NvbnN0IFo9ei5mc3x8UyxVPW8oSCx6KTtyZXR1cm4gWi53cml0ZUZpbGVTeW5jKE4sVSx6KX19fSw2NzgwOih0ZSxqLGQpPT57dmFyIFM9ZCg4NzY0KS5CdWZmZXI7dGUuZXhwb3J0cz17c3RyaW5naWZ5OmZ1bmN0aW9uIGgoSSx7RU9MOmY9IlxuIixmaW5hbEVPTDpUPSEwLHJlcGxhY2Vy''@;'; put 'put ''OkE9bnVsbCxzcGFjZXM6TX09e30pe2NvbnN0IE89VD9mOiIiO3JldHVybiBKU09OLnN0cmluZ2lmeShJLEEsTSkucmVwbGFjZSgvXG4vZyxmKStPfSxzdHJpcEJvbTpmdW5jdGlvbiBvKEkpe3JldHVybiBTLmlzQnVmZmVyKEkpJiYoST1JLnRvU3RyaW5nKCJ1dGY4IikpLEkucmVwbGFjZSgv''@;'; put 'put ''Xlx1RkVGRi8sIiIpfX19LDYyNDU6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUyhBKXt0aGlzLm1lc3NhZ2U9QX1kLnIoaiksZC5kKGose0ludmFsaWRUb2tlbkVycm9yOigpPT5JLGRlZmF1bHQ6KCk9PlR9KSwoUy5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlk''@;'; put 'put ''Q2hhcmFjdGVyRXJyb3IiO3ZhciBoPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihBKXt2YXIgTT1TdHJpbmcoQSkucmVwbGFjZSgvPSskLywiIik7aWYoTS5sZW5ndGglND09MSl0aHJvdyBuZXcgUygiJ2F0b2InIGZh''@;'; put 'put ''aWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFyIE8sRCxFPTAsQj0wLEY9IiI7RD1NLmNoYXJBdChCKyspO35EJiYoTz1FJTQ/NjQqTytEOkQsRSsrJTQpP0YrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1Jk8+PigtMipFJjYp''@;'; put 'put ''KTowKUQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5pbmRleE9mKEQpO3JldHVybiBGfTtmdW5jdGlvbiBJKEEpe3RoaXMubWVzc2FnZT1BfShJLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tl''@;'; put 'put ''bkVycm9yIjtjb25zdCBUPWZ1bmN0aW9uIGYoQSxNKXtpZigic3RyaW5nIiE9dHlwZW9mIEEpdGhyb3cgbmV3IEkoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIE89ITA9PT0oTT1NfHx7fSkuaGVhZGVyPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZnVuY3Rpb24gbyhBKXt2YXIg''@;'; put 'put ''TT1BLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpO3N3aXRjaChNLmxlbmd0aCU0KXtjYXNlIDA6YnJlYWs7Y2FzZSAyOk0rPSI9PSI7YnJlYWs7Y2FzZSAzOk0rPSI9IjticmVhaztkZWZhdWx0OnRocm93IklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyEifXRyeXtyZXR1cm4g''@;'; put 'put ''ZGVjb2RlVVJJQ29tcG9uZW50KGgoTSkucmVwbGFjZSgvKC4pL2csZnVuY3Rpb24oRCxFKXt2YXIgQj1FLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEIubGVuZ3RoPDImJihCPSIwIitCKSwiJSIrQn0pKX1jYXRjaHtyZXR1cm4gaChNKX19KEEuc3Bs''@;'; put 'put ''aXQoIi4iKVtPXSkpfWNhdGNoKEQpe3Rocm93IG5ldyBJKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogIitELm1lc3NhZ2UpfX19LDE2NTg6KHRlLGosZCk9Pnt2YXIgUz0xLzAsbz0vW1xcXiQuKis/KClbXF17fXxdL2csST1SZWdFeHAoby5zb3VyY2UpLFQ9Im9iamVjdCI9PXR5cGVvZiBz''@;'; put 'put ''ZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixBPSJvYmplY3QiPT10eXBlb2YgZC5nJiZkLmcmJmQuZy5PYmplY3Q9PT1PYmplY3QmJmQuZ3x8VHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxPPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRD1BLlN5bWJvbCxFPUQ/''@;'; put 'put ''RC5wcm90b3R5cGU6dm9pZCAwLEI9RT9FLnRvU3RyaW5nOnZvaWQgMDt0ZS5leHBvcnRzPWZ1bmN0aW9uIFooVSl7cmV0dXJuKFU9ZnVuY3Rpb24geihVKXtyZXR1cm4gbnVsbD09VT8iIjpmdW5jdGlvbiBGKFUpe2lmKCJzdHJpbmciPT10eXBlb2YgVSlyZXR1cm4gVTtpZihmdW5jdGlvbiBI''@;'; put 'put ''KFUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgVXx8ZnVuY3Rpb24gTihVKXtyZXR1cm4hIVUmJiJvYmplY3QiPT10eXBlb2YgVX0oVSkmJiJbb2JqZWN0IFN5bWJvbF0iPT1PLmNhbGwoVSl9KFUpKXJldHVybiBCP0IuY2FsbChVKToiIjt2YXIgSz1VKyIiO3JldHVybiIwIj09SyYmMS9VPT0t''@;'; put 'put ''Uz8iLTAiOkt9KFUpfShVKSkmJkkudGVzdChVKT9VLnJlcGxhY2UobywiXFwkJiIpOlV9fSw4MDk0OnRlPT57dmFyIFM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt0ZS5leHBvcnRzPWZ1bmN0aW9uIGgoSSl7cmV0dXJuITA9PT1JfHwhMT09PUl8fGZ1bmN0aW9uIG8oSSl7cmV0dXJuISFJ''@;'; put 'put ''JiYib2JqZWN0Ij09dHlwZW9mIEl9KEkpJiYiW29iamVjdCBCb29sZWFuXSI9PVMuY2FsbChJKX19LDIzMDc6KHRlLGosZCk9Pnt0ZT1kLm5tZCh0ZSk7dmFyIGg9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLGY9OTAwNzE5OTI1NDc0MDk5MSxUPSJbb2JqZWN0IEFyZ3VtZW50c10iLEE9''@;'; put 'put ''IltvYmplY3QgQXJyYXldIixPPSJbb2JqZWN0IEJvb2xlYW5dIixEPSJbb2JqZWN0IERhdGVdIixFPSJbb2JqZWN0IEVycm9yXSIsQj0iW29iamVjdCBGdW5jdGlvbl0iLE49IltvYmplY3QgTWFwXSIsSD0iW29iamVjdCBOdW1iZXJdIixaPSJbb2JqZWN0IE9iamVjdF0iLFU9IltvYmplY3Qg''@;'; put 'put ''UHJvbWlzZV0iLFg9IltvYmplY3QgUmVnRXhwXSIsbmU9IltvYmplY3QgU2V0XSIsc2U9IltvYmplY3QgU3RyaW5nXSIsbWU9IltvYmplY3QgV2Vha01hcF0iLEZlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsUj0iW29iamVjdCBEYXRhVmlld10iLHE9L15cW29iamVjdCAuKz9Db25zdHJ1Y3Rv''@;'; put 'put ''clxdJC8sRz0vXig/OjB8WzEtOV1cZCopJC8sUT17fTtRWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1RWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1RWyJbb2JqZWN0IEludDhBcnJheV0iXT1RWyJbb2JqZWN0IEludDE2QXJyYXldIl09UVsiW29iamVjdCBJbnQzMkFycmF5XSJdPVFbIltv''@;'; put 'put ''YmplY3QgVWludDhBcnJheV0iXT1RWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPVFbIltvYmplY3QgVWludDE2QXJyYXldIl09UVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxRW1RdPVFbQV09UVtGZV09UVtPXT1RW1JdPVFbRF09UVtFXT1RW0JdPVFbTl09UVtIXT1RW1pdPVFb''@;'; put 'put ''WF09UVtuZV09UVtzZV09UVttZV09ITE7dmFyIHBlPSJvYmplY3QiPT10eXBlb2YgZC5nJiZkLmcmJmQuZy5PYmplY3Q9PT1PYmplY3QmJmQuZyxQZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLFplPXBlfHxQZXx8RnVuY3Rpb24oInJl''@;'; put 'put ''dHVybiB0aGlzIikoKSxxZT1qJiYhai5ub2RlVHlwZSYmaix2ZT1xZSYmdGUmJiF0ZS5ub2RlVHlwZSYmdGUsdWU9dmUmJnZlLmV4cG9ydHM9PT1xZSx6ZT11ZSYmcGUucHJvY2VzcyxPZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gemUmJnplLmJpbmRpbmcmJnplLmJpbmRpbmcoInV0aWwiKX1j''@;'; put 'put ''YXRjaHt9fSgpLENlPU9lJiZPZS5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gTWUoQ24scW4pe2Zvcih2YXIgZ2k9LTEsQWE9bnVsbD09Q24/MDpDbi5sZW5ndGg7KytnaTxBYTspaWYocW4oQ25bZ2ldLGdpLENuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB3ZShDbixxbil7cmV0dXJuIENu''@;'; put 'put ''Lmhhcyhxbil9ZnVuY3Rpb24gS2UoQ24pe3ZhciBxbj0tMSxnaT1BcnJheShDbi5zaXplKTtyZXR1cm4gQ24uZm9yRWFjaChmdW5jdGlvbihBYSxicyl7Z2lbKytxbl09W2JzLEFhXX0pLGdpfWZ1bmN0aW9uIHF0KENuKXt2YXIgcW49LTEsZ2k9QXJyYXkoQ24uc2l6ZSk7cmV0dXJuIENuLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oQWEpe2dpWysrcW5dPUFhfSksZ2l9dmFyIENuLGh0PUFycmF5LnByb3RvdHlwZSxZdD1PYmplY3QucHJvdG90eXBlLHR0PVplWyJfX2NvcmUtanNfc2hhcmVkX18iXSxVZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsJGU9WXQuaGFzT3duUHJvcGVydHksTGU9''@;'; put 'put ''KENuPS9bXi5dKyQvLmV4ZWModHQmJnR0LmtleXMmJnR0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitDbjoiIixudD1ZdC50b1N0cmluZyxybj1SZWdFeHAoIl4iK1VlLmNhbGwoJGUpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgv''@;'; put 'put ''aGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLHh0PXVlP1plLkJ1ZmZlcjp2b2lkIDAsVHQ9WmUuU3ltYm9sLHluPVplLlVpbnQ4QXJyYXksWHQ9WXQucHJvcGVydHlJc0VudW1lcmFibGUsUXQ9aHQuc3BsaWNlLFhy''@;'; put 'put ''PVR0P1R0LnRvU3RyaW5nVGFnOnZvaWQgMCxzbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGl0PXh0P3h0LmlzQnVmZmVyOnZvaWQgMCxDcj1mdW5jdGlvbiBZZShDbixxbil7cmV0dXJuIGZ1bmN0aW9uKGdpKXtyZXR1cm4gQ24ocW4oZ2kpKX19KE9iamVjdC5rZXlzLE9iamVjdCks''@;'; put 'put ''THQ9S2goWmUsIkRhdGFWaWV3Iiksd3Q9S2goWmUsIk1hcCIpLFJuPUtoKFplLCJQcm9taXNlIiksUWU9S2goWmUsIlNldCIpLFB0PUtoKFplLCJXZWFrTWFwIiksUXI9S2goT2JqZWN0LCJjcmVhdGUiKSxOZT1WYyhMdCkseXQ9VmMod3QpLHJyPVZjKFJuKSxhdD1WYyhRZSksX3Q9VmMoUHQp''@;'; put 'put ''LHduPVR0P1R0LnByb3RvdHlwZTp2b2lkIDAsJHQ9d24/d24udmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gSHQoQ24pe3ZhciBxbj0tMSxnaT1udWxsPT1Dbj8wOkNuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrcW48Z2k7KXt2YXIgQWE9Q25bcW5dO3RoaXMuc2V0KEFhWzBdLEFhWzFdKX19''@;'; put 'put ''ZnVuY3Rpb24gR3QoQ24pe3ZhciBxbj0tMSxnaT1udWxsPT1Dbj8wOkNuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrcW48Z2k7KXt2YXIgQWE9Q25bcW5dO3RoaXMuc2V0KEFhWzBdLEFhWzFdKX19ZnVuY3Rpb24gVmkoQ24pe3ZhciBxbj0tMSxnaT1udWxsPT1Dbj8wOkNuLmxlbmd0aDtm''@;'; put 'put ''b3IodGhpcy5jbGVhcigpOysrcW48Z2k7KXt2YXIgQWE9Q25bcW5dO3RoaXMuc2V0KEFhWzBdLEFhWzFdKX19ZnVuY3Rpb24gVWkoQ24pe3ZhciBxbj0tMSxnaT1udWxsPT1Dbj8wOkNuLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgVmk7KytxbjxnaTspdGhpcy5hZGQoQ25bcW5dKX1m''@;'; put 'put ''dW5jdGlvbiBmYShDbil7dmFyIHFuPXRoaXMuX19kYXRhX189bmV3IEd0KENuKTt0aGlzLnNpemU9cW4uc2l6ZX1mdW5jdGlvbiBGbChDbixxbil7Zm9yKHZhciBnaT1Dbi5sZW5ndGg7Z2ktLTspaWYodG0oQ25bZ2ldWzBdLHFuKSlyZXR1cm4gZ2k7cmV0dXJuLTF9ZnVuY3Rpb24gaXUoQ24p''@;'; put 'put ''e3JldHVybiBudWxsPT1Dbj92b2lkIDA9PT1Dbj8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6WHImJlhyIGluIE9iamVjdChDbik/ZnVuY3Rpb24gZDMoQ24pe3ZhciBxbj0kZS5jYWxsKENuLFhyKSxnaT1DbltYcl07dHJ5e0NuW1hyXT12b2lkIDA7dmFyIEFhPSEwfWNh''@;'; put 'put ''dGNoe312YXIgYnM9bnQuY2FsbChDbik7cmV0dXJuIEFhJiYocW4/Q25bWHJdPWdpOmRlbGV0ZSBDbltYcl0pLGJzfShDbik6ZnVuY3Rpb24gWDIoQ24pe3JldHVybiBudC5jYWxsKENuKX0oQ24pfWZ1bmN0aW9uIHkwKENuKXtyZXR1cm4gTDEoQ24pJiZpdShDbik9PVR9ZnVuY3Rpb24gb3Io''@;'; put 'put ''Q24scW4sZ2ksQWEsYnMpe3JldHVybiBDbj09PXFufHwobnVsbD09Q258fG51bGw9PXFufHwhTDEoQ24pJiYhTDEocW4pP0NuIT1DbiYmcW4hPXFuOmZ1bmN0aW9uIERhKENuLHFuLGdpLEFhLGJzLHJhKXt2YXIgdmE9V3UoQ24pLExvPVd1KHFuKSxGbz12YT9BOlJvKENuKSxnbD1Mbz9BOlJv''@;'; put 'put ''KHFuKSxzYz0oRm89Rm89PVQ/WjpGbyk9PVosVW89KGdsPWdsPT1UP1o6Z2wpPT1aLFZvPUZvPT1nbDtpZihWbyYmUjEoQ24pKXtpZighUjEocW4pKXJldHVybiExO3ZhPSEwLHNjPSExfWlmKFZvJiYhc2MpcmV0dXJuIHJhfHwocmE9bmV3IGZhKSx2YXx8WXMoQ24pP0YwKENuLHFuLGdpLEFh''@;'; put 'put ''LGJzLHJhKTpmdW5jdGlvbiAkbyhDbixxbixnaSxBYSxicyxyYSx2YSl7c3dpdGNoKGdpKXtjYXNlIFI6aWYoQ24uYnl0ZUxlbmd0aCE9cW4uYnl0ZUxlbmd0aHx8Q24uYnl0ZU9mZnNldCE9cW4uYnl0ZU9mZnNldClyZXR1cm4hMTtDbj1Dbi5idWZmZXIscW49cW4uYnVmZmVyO2Nhc2UgRmU6''@;'; put 'put ''cmV0dXJuIShDbi5ieXRlTGVuZ3RoIT1xbi5ieXRlTGVuZ3RofHwhcmEobmV3IHluKENuKSxuZXcgeW4ocW4pKSk7Y2FzZSBPOmNhc2UgRDpjYXNlIEg6cmV0dXJuIHRtKCtDbiwrcW4pO2Nhc2UgRTpyZXR1cm4gQ24ubmFtZT09cW4ubmFtZSYmQ24ubWVzc2FnZT09cW4ubWVzc2FnZTtjYXNl''@;'; put 'put ''IFg6Y2FzZSBzZTpyZXR1cm4gQ249PXFuKyIiO2Nhc2UgTjp2YXIgTG89S2U7Y2FzZSBuZTppZihMb3x8KExvPXF0KSxDbi5zaXplIT1xbi5zaXplJiYhKDEmQWEpKXJldHVybiExO3ZhciBnbD12YS5nZXQoQ24pO2lmKGdsKXJldHVybiBnbD09cW47QWF8PTIsdmEuc2V0KENuLHFuKTt2YXIg''@;'; put 'put ''c2M9RjAoTG8oQ24pLExvKHFuKSxBYSxicyxyYSx2YSk7cmV0dXJuIHZhLmRlbGV0ZShDbiksc2M7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKCR0KXJldHVybiAkdC5jYWxsKENuKT09JHQuY2FsbChxbil9cmV0dXJuITF9KENuLHFuLEZvLGdpLEFhLGJzLHJhKTtpZighKDEmZ2kpKXt2YXIg''@;'; put 'put ''SGw9c2MmJiRlLmNhbGwoQ24sIl9fd3JhcHBlZF9fIiksQXU9VW8mJiRlLmNhbGwocW4sIl9fd3JhcHBlZF9fIik7aWYoSGx8fEF1KXt2YXIgYTE9SGw/Q24udmFsdWUoKTpDbixHcz1BdT9xbi52YWx1ZSgpOnFuO3JldHVybiByYXx8KHJhPW5ldyBmYSksYnMoYTEsR3MsZ2ksQWEscmEpfX1y''@;'; put 'put ''ZXR1cm4hIVZvJiYocmF8fChyYT1uZXcgZmEpLGZ1bmN0aW9uIEV1KENuLHFuLGdpLEFhLGJzLHJhKXt2YXIgdmE9MSZnaSxMbz16cihDbiksRm89TG8ubGVuZ3RoO2lmKEZvIT16cihxbikubGVuZ3RoJiYhdmEpcmV0dXJuITE7Zm9yKHZhciBVbz1GbztVby0tOyl7dmFyIFZvPUxvW1VvXTtp''@;'; put 'put ''ZighKHZhP1ZvIGluIHFuOiRlLmNhbGwocW4sVm8pKSlyZXR1cm4hMX12YXIgSGw9cmEuZ2V0KENuKTtpZihIbCYmcmEuZ2V0KHFuKSlyZXR1cm4gSGw9PXFuO3ZhciBBdT0hMDtyYS5zZXQoQ24scW4pLHJhLnNldChxbixDbik7Zm9yKHZhciBhMT12YTsrK1VvPEZvOyl7dmFyIEdzPUNuW1Zv''@;'; put 'put ''PUxvW1VvXV0sb2w9cW5bVm9dO2lmKEFhKXZhciBIcj12YT9BYShvbCxHcyxWbyxxbixDbixyYSk6QWEoR3Msb2wsVm8sQ24scW4scmEpO2lmKCEodm9pZCAwPT09SHI/R3M9PT1vbHx8YnMoR3Msb2wsZ2ksQWEscmEpOkhyKSl7QXU9ITE7YnJlYWt9YTF8fChhMT0iY29uc3RydWN0b3IiPT1W''@;'; put 'put ''byl9aWYoQXUmJiFhMSl7dmFyIEJvPUNuLmNvbnN0cnVjdG9yLEN0PXFuLmNvbnN0cnVjdG9yO0JvIT1DdCYmImNvbnN0cnVjdG9yImluIENuJiYiY29uc3RydWN0b3IiaW4gcW4mJiEoImZ1bmN0aW9uIj09dHlwZW9mIEJvJiZCbyBpbnN0YW5jZW9mIEJvJiYiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Q3QmJkN0IGluc3RhbmNlb2YgQ3QpJiYoQXU9ITEpfXJldHVybiByYS5kZWxldGUoQ24pLHJhLmRlbGV0ZShxbiksQXV9KENuLHFuLGdpLEFhLGJzLHJhKSl9KENuLHFuLGdpLEFhLG9yLGJzKSl9ZnVuY3Rpb24gRjAoQ24scW4sZ2ksQWEsYnMscmEpe3ZhciB2YT0xJmdpLExvPUNuLmxlbmd0''@;'; put 'put ''aCxGbz1xbi5sZW5ndGg7aWYoTG8hPUZvJiYhKHZhJiZGbz5MbykpcmV0dXJuITE7dmFyIGdsPXJhLmdldChDbik7aWYoZ2wmJnJhLmdldChxbikpcmV0dXJuIGdsPT1xbjt2YXIgc2M9LTEsVW89ITAsVm89MiZnaT9uZXcgVWk6dm9pZCAwO2ZvcihyYS5zZXQoQ24scW4pLHJhLnNldChxbixD''@;'; put 'put ''bik7KytzYzxMbzspe3ZhciBIbD1DbltzY10sQXU9cW5bc2NdO2lmKEFhKXZhciBhMT12YT9BYShBdSxIbCxzYyxxbixDbixyYSk6QWEoSGwsQXUsc2MsQ24scW4scmEpO2lmKHZvaWQgMCE9PWExKXtpZihhMSljb250aW51ZTtVbz0hMTticmVha31pZihWbyl7aWYoIU1lKHFuLGZ1bmN0aW9u''@;'; put 'put ''KEdzLG9sKXtpZighd2UoVm8sb2wpJiYoSGw9PT1Hc3x8YnMoSGwsR3MsZ2ksQWEscmEpKSlyZXR1cm4gVm8ucHVzaChvbCl9KSl7VW89ITE7YnJlYWt9fWVsc2UgaWYoSGwhPT1BdSYmIWJzKEhsLEF1LGdpLEFhLHJhKSl7VW89ITE7YnJlYWt9fXJldHVybiByYS5kZWxldGUoQ24pLHJhLmRl''@;'; put 'put ''bGV0ZShxbiksVW99ZnVuY3Rpb24genIoQ24pe3JldHVybiBmdW5jdGlvbiBJMShDbixxbixnaSl7dmFyIEFhPXFuKENuKTtyZXR1cm4gV3UoQ24pP0FhOmZ1bmN0aW9uIHhlKENuLHFuKXtmb3IodmFyIGdpPS0xLEFhPXFuLmxlbmd0aCxicz1Dbi5sZW5ndGg7KytnaTxBYTspQ25bYnMrZ2ld''@;'; put 'put ''PXFuW2dpXTtyZXR1cm4gQ259KEFhLGdpKENuKSl9KENuLEoyLGZnKX1mdW5jdGlvbiBLMihDbixxbil7dmFyIGdpPUNuLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBrcihDbil7dmFyIHFuPXR5cGVvZiBDbjtyZXR1cm4ic3RyaW5nIj09cW58fCJudW1iZXIiPT1xbnx8InN5bWJvbCI9PXFu''@;'; put 'put ''fHwiYm9vbGVhbiI9PXFuPyJfX3Byb3RvX18iIT09Q246bnVsbD09PUNufShxbik/Z2lbInN0cmluZyI9PXR5cGVvZiBxbj8ic3RyaW5nIjoiaGFzaCJdOmdpLm1hcH1mdW5jdGlvbiBLaChDbixxbil7dmFyIGdpPWZ1bmN0aW9uIHB0KENuLHFuKXtyZXR1cm4gQ24/Lltxbl19KENuLHFuKTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gbmkoQ24pe3JldHVybiEoIWkxKENuKXx8ZnVuY3Rpb24gcGcoQ24pe3JldHVybiEhTGUmJkxlIGluIENufShDbikpJiYocTIoQ24pP3JuOnEpLnRlc3QoVmMoQ24pKX0oZ2kpP2dpOnZvaWQgMH1IdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gc2koKXt0aGlzLl9f''@;'; put 'put ''ZGF0YV9fPVFyP1FyKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxIdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIG5uKENuKXt2YXIgcW49dGhpcy5oYXMoQ24pJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tDbl07cmV0dXJuIHRoaXMuc2l6ZS09cW4/MTowLHFufSxIdC5wcm90b3R5cGUuZ2V0PWZ1''@;'; put 'put ''bmN0aW9uIGxuKENuKXt2YXIgcW49dGhpcy5fX2RhdGFfXztpZihRcil7dmFyIGdpPXFuW0NuXTtyZXR1cm4gZ2k9PT1oP3ZvaWQgMDpnaX1yZXR1cm4gJGUuY2FsbChxbixDbik/cW5bQ25dOnZvaWQgMH0sSHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBraShDbil7dmFyIHFuPXRoaXMuX19k''@;'; put 'put ''YXRhX187cmV0dXJuIFFyP3ZvaWQgMCE9PXFuW0NuXTokZS5jYWxsKHFuLENuKX0sSHQucHJvdG90eXBlLnNldD1mdW5jdGlvbiBhbihDbixxbil7dmFyIGdpPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoQ24pPzA6MSxnaVtDbl09UXImJnZvaWQgMD09PXFuP2g6''@;'; put 'put ''cW4sdGhpc30sR3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGVhKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sR3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBtaShDbil7dmFyIHFuPXRoaXMuX19kYXRhX18sZ2k9RmwocW4sQ24pO3JldHVybiEoZ2k8MHx8KGdpPT1xbi5s''@;'; put 'put ''ZW5ndGgtMT9xbi5wb3AoKTpRdC5jYWxsKHFuLGdpLDEpLC0tdGhpcy5zaXplLDApKX0sR3QucHJvdG90eXBlLmdldD1mdW5jdGlvbiBmcihDbil7dmFyIHFuPXRoaXMuX19kYXRhX18sZ2k9RmwocW4sQ24pO3JldHVybiBnaTwwP3ZvaWQgMDpxbltnaV1bMV19LEd0LnByb3RvdHlwZS5oYXM9''@;'; put 'put ''ZnVuY3Rpb24gJGkoQ24pe3JldHVybiBGbCh0aGlzLl9fZGF0YV9fLENuKT4tMX0sR3QucHJvdG90eXBlLnNldD1mdW5jdGlvbiBLaShDbixxbil7dmFyIGdpPXRoaXMuX19kYXRhX18sQWE9RmwoZ2ksQ24pO3JldHVybiBBYTwwPygrK3RoaXMuc2l6ZSxnaS5wdXNoKFtDbixxbl0pKTpnaVtB''@;'; put 'put ''YV1bMV09cW4sdGhpc30sVmkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHFyKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgSHQsbWFwOm5ldyh3dHx8R3QpLHN0cmluZzpuZXcgSHR9fSxWaS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIHVhKENuKXt2YXIgcW49SzIo''@;'; put 'put ''dGhpcyxDbikuZGVsZXRlKENuKTtyZXR1cm4gdGhpcy5zaXplLT1xbj8xOjAscW59LFZpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gRmkoQ24pe3JldHVybiBLMih0aGlzLENuKS5nZXQoQ24pfSxWaS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFJhKENuKXtyZXR1cm4gSzIodGhpcyxDbikuaGFz''@;'; put 'put ''KENuKX0sVmkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBvaShDbixxbil7dmFyIGdpPUsyKHRoaXMsQ24pLEFhPWdpLnNpemU7cmV0dXJuIGdpLnNldChDbixxbiksdGhpcy5zaXplKz1naS5zaXplPT1BYT8wOjEsdGhpc30sVWkucHJvdG90eXBlLmFkZD1VaS5wcm90b3R5cGUucHVzaD1mdW5j''@;'; put 'put ''dGlvbiBWYShDbil7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KENuLGgpLHRoaXN9LFVpLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gdXIoQ24pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhDbil9LGZhLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB4aSgpe3RoaXMuX19kYXRhX189bmV3IEd0''@;'; put 'put ''LHRoaXMuc2l6ZT0wfSxmYS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIG9hKENuKXt2YXIgcW49dGhpcy5fX2RhdGFfXyxnaT1xbi5kZWxldGUoQ24pO3JldHVybiB0aGlzLnNpemU9cW4uc2l6ZSxnaX0sZmEucHJvdG90eXBlLmdldD1mdW5jdGlvbiBYaShDbil7cmV0dXJuIHRoaXMuX19k''@;'; put 'put ''YXRhX18uZ2V0KENuKX0sZmEucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBJcihDbil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKENuKX0sZmEucHJvdG90eXBlLnNldD1mdW5jdGlvbiBibyhDbixxbil7dmFyIGdpPXRoaXMuX19kYXRhX187aWYoZ2kgaW5zdGFuY2VvZiBHdCl7dmFyIEFhPWdp''@;'; put 'put ''Ll9fZGF0YV9fO2lmKCF3dHx8QWEubGVuZ3RoPDE5OSlyZXR1cm4gQWEucHVzaChbQ24scW5dKSx0aGlzLnNpemU9KytnaS5zaXplLHRoaXM7Z2k9dGhpcy5fX2RhdGFfXz1uZXcgVmkoQWEpfXJldHVybiBnaS5zZXQoQ24scW4pLHRoaXMuc2l6ZT1naS5zaXplLHRoaXN9O3ZhciBmZz1zbj9m''@;'; put 'put ''dW5jdGlvbihDbil7cmV0dXJuIG51bGw9PUNuP1tdOihDbj1PYmplY3QoQ24pLGZ1bmN0aW9uIGtlKENuLHFuKXtmb3IodmFyIGdpPS0xLEFhPW51bGw9PUNuPzA6Q24ubGVuZ3RoLGJzPTAscmE9W107KytnaTxBYTspe3ZhciB2YT1DbltnaV07cW4odmEsZ2ksQ24pJiYocmFbYnMrK109dmEp''@;'; put 'put ''fXJldHVybiByYX0oc24oQ24pLGZ1bmN0aW9uKHFuKXtyZXR1cm4gWHQuY2FsbChDbixxbil9KSl9OmZ1bmN0aW9uIGdnKCl7cmV0dXJuW119LFJvPWl1O2Z1bmN0aW9uIG9jKENuLHFuKXtyZXR1cm4hIShxbj1xbj8/ZikmJigibnVtYmVyIj09dHlwZW9mIENufHxHLnRlc3QoQ24pKSYmQ24+''@;'; put 'put ''LTEmJkNuJTE9PTAmJkNuPHFufWZ1bmN0aW9uIFZjKENuKXtpZihudWxsIT1Dbil7dHJ5e3JldHVybiBVZS5jYWxsKENuKX1jYXRjaHt9dHJ5e3JldHVybiBDbisiIn1jYXRjaHt9fXJldHVybiIifWZ1bmN0aW9uIHRtKENuLHFuKXtyZXR1cm4gQ249PT1xbnx8Q24hPUNuJiZxbiE9cW59KEx0''@;'; put 'put ''JiZSbyhuZXcgTHQobmV3IEFycmF5QnVmZmVyKDEpKSkhPVJ8fHd0JiZSbyhuZXcgd3QpIT1OfHxSbiYmUm8oUm4ucmVzb2x2ZSgpKSE9VXx8UWUmJlJvKG5ldyBRZSkhPW5lfHxQdCYmUm8obmV3IFB0KSE9bWUpJiYoUm89ZnVuY3Rpb24oQ24pe3ZhciBxbj1pdShDbiksZ2k9cW49PVo/Q24u''@;'; put 'put ''Y29uc3RydWN0b3I6dm9pZCAwLEFhPWdpP1ZjKGdpKToiIjtpZihBYSlzd2l0Y2goQWEpe2Nhc2UgTmU6cmV0dXJuIFI7Y2FzZSB5dDpyZXR1cm4gTjtjYXNlIHJyOnJldHVybiBVO2Nhc2UgYXQ6cmV0dXJuIG5lO2Nhc2UgX3Q6cmV0dXJuIG1lfXJldHVybiBxbn0pO3ZhciBYaD15MChmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP3kwOmZ1bmN0aW9uKENuKXtyZXR1cm4gTDEoQ24pJiYkZS5jYWxsKENuLCJjYWxsZWUiKSYmIVh0LmNhbGwoQ24sImNhbGxlZSIpfSxXdT1BcnJheS5pc0FycmF5LFIxPWl0fHxmdW5jdGlvbiB1cygpe3JldHVybiExfTtmdW5jdGlvbiBxMihD''@;'; put 'put ''bil7aWYoIWkxKENuKSlyZXR1cm4hMTt2YXIgcW49aXUoQ24pO3JldHVybiBxbj09Qnx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09cW58fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09cW58fCJbb2JqZWN0IFByb3h5XSI9PXFufWZ1bmN0aW9uIGdkKENuKXtyZXR1cm4ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIENuJiZDbj4tMSYmQ24lMT09MCYmQ248PWZ9ZnVuY3Rpb24gaTEoQ24pe3ZhciBxbj10eXBlb2YgQ247cmV0dXJuIG51bGwhPUNuJiYoIm9iamVjdCI9PXFufHwiZnVuY3Rpb24iPT1xbil9ZnVuY3Rpb24gTDEoQ24pe3JldHVybiBudWxsIT1DbiYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBDbn12YXIgWXM9Q2U/ZnVuY3Rpb24gYmUoQ24pe3JldHVybiBmdW5jdGlvbihxbil7cmV0dXJuIENuKHFuKX19KENlKTpmdW5jdGlvbiBPdChDbil7cmV0dXJuIEwxKENuKSYmZ2QoQ24ubGVuZ3RoKSYmISFRW2l1KENuKV19O2Z1bmN0aW9uIEoyKENuKXtyZXR1cm4gZnVuY3Rpb24gVHUo''@;'; put 'put ''Q24pe3JldHVybiBudWxsIT1DbiYmZ2QoQ24ubGVuZ3RoKSYmIXEyKENuKX0oQ24pP2Z1bmN0aW9uIFhhKENuLHFuKXt2YXIgZ2k9V3UoQ24pLEFhPSFnaSYmWGgoQ24pLGJzPSFnaSYmIUFhJiZSMShDbikscmE9IWdpJiYhQWEmJiFicyYmWXMoQ24pLHZhPWdpfHxBYXx8YnN8fHJhLExvPXZh''@;'; put 'put ''P2Z1bmN0aW9uIEllKENuLHFuKXtmb3IodmFyIGdpPS0xLEFhPUFycmF5KENuKTsrK2dpPENuOylBYVtnaV09cW4oZ2kpO3JldHVybiBBYX0oQ24ubGVuZ3RoLFN0cmluZyk6W10sRm89TG8ubGVuZ3RoO2Zvcih2YXIgZ2wgaW4gQ24pKHFufHwkZS5jYWxsKENuLGdsKSkmJighdmF8fCEoImxl''@;'; put 'put ''bmd0aCI9PWdsfHxicyYmKCJvZmZzZXQiPT1nbHx8InBhcmVudCI9PWdsKXx8cmEmJigiYnVmZmVyIj09Z2x8fCJieXRlTGVuZ3RoIj09Z2x8fCJieXRlT2Zmc2V0Ij09Z2wpfHxvYyhnbCxGbykpKSYmTG8ucHVzaChnbCk7cmV0dXJuIExvfShDbik6ZnVuY3Rpb24gSnIoQ24pe2lmKCFmdW5j''@;'; put 'put ''dGlvbiBfYyhDbil7dmFyIHFuPUNuJiZDbi5jb25zdHJ1Y3RvcjtyZXR1cm4gQ249PT0oImZ1bmN0aW9uIj09dHlwZW9mIHFuJiZxbi5wcm90b3R5cGV8fFl0KX0oQ24pKXJldHVybiBDcihDbik7dmFyIHFuPVtdO2Zvcih2YXIgZ2kgaW4gT2JqZWN0KENuKSkkZS5jYWxsKENuLGdpKSYmImNv''@;'; put 'put ''bnN0cnVjdG9yIiE9Z2kmJnFuLnB1c2goZ2kpO3JldHVybiBxbn0oQ24pfXRlLmV4cG9ydHM9ZnVuY3Rpb24gcjEoQ24scW4pe3JldHVybiBvcihDbixxbil9fSw4NDIzOih0ZSxqLGQpPT57dmFyIE09Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYm''@;'; put 'put ''c2VsZixPPSJvYmplY3QiPT10eXBlb2YgZC5nJiZkLmcmJmQuZy5PYmplY3Q9PT1PYmplY3QmJmQuZ3x8TXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxEPU9iamVjdC5wcm90b3R5cGUsRT1ELmhhc093blByb3BlcnR5LEI9RC50b1N0cmluZyxGPU8uU3ltYm9sLE49Rj9GLnRvU3RyaW5n''@;'; put 'put ''VGFnOnZvaWQgMDt0ZS5leHBvcnRzPWZ1bmN0aW9uIFUoWCl7aWYoIWZ1bmN0aW9uIEsoWCl7dmFyIG5lPXR5cGVvZiBYO3JldHVybiBudWxsIT1YJiYoIm9iamVjdCI9PW5lfHwiZnVuY3Rpb24iPT1uZSl9KFgpKXJldHVybiExO3ZhciBuZT1mdW5jdGlvbiBIKFgpe3JldHVybiBudWxsPT1Y''@;'; put 'put ''P3ZvaWQgMD09PVg/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOk4mJk4gaW4gT2JqZWN0KFgpP2Z1bmN0aW9uIHooWCl7dmFyIG5lPUUuY2FsbChYLE4pLHNlPVhbTl07dHJ5e1hbTl09dm9pZCAwO3ZhciBoZT0hMH1jYXRjaHt9dmFyIF9lPUIuY2FsbChYKTtyZXR1cm4g''@;'; put 'put ''aGUmJihuZT9YW05dPXNlOmRlbGV0ZSBYW05dKSxfZX0oWCk6ZnVuY3Rpb24gWihYKXtyZXR1cm4gQi5jYWxsKFgpfShYKX0oWCk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09bmV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PW5lfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9''@;'; put 'put ''PW5lfHwiW29iamVjdCBQcm94eV0iPT1uZX19LDk3MjI6dGU9Pnt0ZS5leHBvcnRzPWZ1bmN0aW9uIGooZCl7cmV0dXJuIG51bGw9PWR9fSw5NzM4OnRlPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9TWF0aC5hYnN9LDYzMjk6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1NYXRoLmZs''@;'; put 'put ''b29yfSwzNjc4OnRlPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihkKXtyZXR1cm4gZCE9ZH19LDIyNjQ6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1NYXRoLm1heH0sNTczMDp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPU1hdGgubWlu''@;'; put 'put ''fSw3MDc6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1NYXRoLnBvd30sMzg2Mjp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPU1hdGgucm91bmR9LDk1NTA6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCgzNjc4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiBT''@;'; put 'put ''KG8pfHwwPT09bz9vOm88MD8tMToxfX0sMjMxODoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU3MTcpLGg9ZCgzMzQ5KSxvPWQoOTUwOSkuQnVmZmVyLEk9bmV3IEFycmF5KDE2KTtmdW5jdGlvbiBmKCl7aC5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9i''@;'; put 'put ''PTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIFQoRSxCKXtyZXR1cm4gRTw8QnxFPj4+MzItQn1mdW5jdGlvbiBBKEUsQixGLE4sSCx6LFope3JldHVybiBUKEUrKEImRnx+QiZOKStIK3p8MCxaKStCfDB9ZnVuY3Rpb24gTShFLEIsRixO''@;'; put 'put ''LEgseixaKXtyZXR1cm4gVChFKyhCJk58RiZ+TikrSCt6fDAsWikrQnwwfWZ1bmN0aW9uIE8oRSxCLEYsTixILHosWil7cmV0dXJuIFQoRSsoQl5GXk4pK0grenwwLFopK0J8MH1mdW5jdGlvbiBEKEUsQixGLE4sSCx6LFope3JldHVybiBUKEUrKEZeKEJ8fk4pKStIK3p8MCxaKStCfDB9Uyhm''@;'; put 'put ''LGgpLGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEU9SSxCPTA7QjwxNjsrK0IpRVtCXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkIpO3ZhciBGPXRoaXMuX2EsTj10aGlzLl9iLEg9dGhpcy5fYyx6PXRoaXMuX2Q7Rj1BKEYsTixILHosRVswXSwzNjE0MDkwMzYw''@;'; put 'put ''LDcpLHo9QSh6LEYsTixILEVbMV0sMzkwNTQwMjcxMCwxMiksSD1BKEgseixGLE4sRVsyXSw2MDYxMDU4MTksMTcpLE49QShOLEgseixGLEVbM10sMzI1MDQ0MTk2NiwyMiksRj1BKEYsTixILHosRVs0XSw0MTE4NTQ4Mzk5LDcpLHo9QSh6LEYsTixILEVbNV0sMTIwMDA4MDQyNiwxMiksSD1B''@;'; put 'put ''KEgseixGLE4sRVs2XSwyODIxNzM1OTU1LDE3KSxOPUEoTixILHosRixFWzddLDQyNDkyNjEzMTMsMjIpLEY9QShGLE4sSCx6LEVbOF0sMTc3MDAzNTQxNiw3KSx6PUEoeixGLE4sSCxFWzldLDIzMzY1NTI4NzksMTIpLEg9QShILHosRixOLEVbMTBdLDQyOTQ5MjUyMzMsMTcpLE49QShOLEgs''@;'; put 'put ''eixGLEVbMTFdLDIzMDQ1NjMxMzQsMjIpLEY9QShGLE4sSCx6LEVbMTJdLDE4MDQ2MDM2ODIsNyksej1BKHosRixOLEgsRVsxM10sNDI1NDYyNjE5NSwxMiksSD1BKEgseixGLE4sRVsxNF0sMjc5Mjk2NTAwNiwxNyksRj1NKEYsTj1BKE4sSCx6LEYsRVsxNV0sMTIzNjUzNTMyOSwyMiksSCx6''@;'; put 'put ''LEVbMV0sNDEyOTE3MDc4Niw1KSx6PU0oeixGLE4sSCxFWzZdLDMyMjU0NjU2NjQsOSksSD1NKEgseixGLE4sRVsxMV0sNjQzNzE3NzEzLDE0KSxOPU0oTixILHosRixFWzBdLDM5MjEwNjk5OTQsMjApLEY9TShGLE4sSCx6LEVbNV0sMzU5MzQwODYwNSw1KSx6PU0oeixGLE4sSCxFWzEwXSwz''@;'; put 'put ''ODAxNjA4Myw5KSxIPU0oSCx6LEYsTixFWzE1XSwzNjM0NDg4OTYxLDE0KSxOPU0oTixILHosRixFWzRdLDM4ODk0Mjk0NDgsMjApLEY9TShGLE4sSCx6LEVbOV0sNTY4NDQ2NDM4LDUpLHo9TSh6LEYsTixILEVbMTRdLDMyNzUxNjM2MDYsOSksSD1NKEgseixGLE4sRVszXSw0MTA3NjAzMzM1''@;'; put 'put ''LDE0KSxOPU0oTixILHosRixFWzhdLDExNjM1MzE1MDEsMjApLEY9TShGLE4sSCx6LEVbMTNdLDI4NTAyODU4MjksNSksej1NKHosRixOLEgsRVsyXSw0MjQzNTYzNTEyLDkpLEg9TShILHosRixOLEVbN10sMTczNTMyODQ3MywxNCksRj1PKEYsTj1NKE4sSCx6LEYsRVsxMl0sMjM2ODM1OTU2''@;'; put 'put ''MiwyMCksSCx6LEVbNV0sNDI5NDU4ODczOCw0KSx6PU8oeixGLE4sSCxFWzhdLDIyNzIzOTI4MzMsMTEpLEg9TyhILHosRixOLEVbMTFdLDE4MzkwMzA1NjIsMTYpLE49TyhOLEgseixGLEVbMTRdLDQyNTk2NTc3NDAsMjMpLEY9TyhGLE4sSCx6LEVbMV0sMjc2Mzk3NTIzNiw0KSx6PU8oeixG''@;'; put 'put ''LE4sSCxFWzRdLDEyNzI4OTMzNTMsMTEpLEg9TyhILHosRixOLEVbN10sNDEzOTQ2OTY2NCwxNiksTj1PKE4sSCx6LEYsRVsxMF0sMzIwMDIzNjY1NiwyMyksRj1PKEYsTixILHosRVsxM10sNjgxMjc5MTc0LDQpLHo9Tyh6LEYsTixILEVbMF0sMzkzNjQzMDA3NCwxMSksSD1PKEgseixGLE4s''@;'; put 'put ''RVszXSwzNTcyNDQ1MzE3LDE2KSxOPU8oTixILHosRixFWzZdLDc2MDI5MTg5LDIzKSxGPU8oRixOLEgseixFWzldLDM2NTQ2MDI4MDksNCksej1PKHosRixOLEgsRVsxMl0sMzg3MzE1MTQ2MSwxMSksSD1PKEgseixGLE4sRVsxNV0sNTMwNzQyNTIwLDE2KSxGPUQoRixOPU8oTixILHosRixF''@;'; put 'put ''WzJdLDMyOTk2Mjg2NDUsMjMpLEgseixFWzBdLDQwOTYzMzY0NTIsNiksej1EKHosRixOLEgsRVs3XSwxMTI2ODkxNDE1LDEwKSxIPUQoSCx6LEYsTixFWzE0XSwyODc4NjEyMzkxLDE1KSxOPUQoTixILHosRixFWzVdLDQyMzc1MzMyNDEsMjEpLEY9RChGLE4sSCx6LEVbMTJdLDE3MDA0ODU1''@;'; put 'put ''NzEsNiksej1EKHosRixOLEgsRVszXSwyMzk5OTgwNjkwLDEwKSxIPUQoSCx6LEYsTixFWzEwXSw0MjkzOTE1NzczLDE1KSxOPUQoTixILHosRixFWzFdLDIyNDAwNDQ0OTcsMjEpLEY9RChGLE4sSCx6LEVbOF0sMTg3MzMxMzM1OSw2KSx6PUQoeixGLE4sSCxFWzE1XSw0MjY0MzU1NTUyLDEw''@;'; put 'put ''KSxIPUQoSCx6LEYsTixFWzZdLDI3MzQ3Njg5MTYsMTUpLE49RChOLEgseixGLEVbMTNdLDEzMDkxNTE2NDksMjEpLEY9RChGLE4sSCx6LEVbNF0sNDE0OTQ0NDIyNiw2KSx6PUQoeixGLE4sSCxFWzExXSwzMTc0NzU2OTE3LDEwKSxIPUQoSCx6LEYsTixFWzJdLDcxODc4NzI1OSwxNSksTj1E''@;'; put 'put ''KE4sSCx6LEYsRVs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErRnwwLHRoaXMuX2I9dGhpcy5fYitOfDAsdGhpcy5fYz10aGlzLl9jK0h8MCx0aGlzLl9kPXRoaXMuX2QrenwwfSxmLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tP''@;'; put 'put ''ZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2Nr''@;'; put 'put ''LndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEU9by5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEUud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksRS53cml0ZUludDMy''@;'; put 'put ''TEUodGhpcy5fYiw0KSxFLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEUud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEV9LHRlLmV4cG9ydHM9Zn0sMzA0NzoodGUsaixkKT0+e3ZhciBTPWQoNjI0MCksaD1kKDk5MzEpO2Z1bmN0aW9uIG8oSSl7dGhpcy5yYW5kPUl8fG5ldyBoLlJhbmR9dGUu''@;'; put 'put ''ZXhwb3J0cz1vLG8uY3JlYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBuZXcgbyhmKX0sby5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbihmKXt2YXIgVD1mLmJpdExlbmd0aCgpLEE9TWF0aC5jZWlsKFQvOCk7ZG97dmFyIE09bmV3IFModGhpcy5yYW5kLmdlbmVyYXRlKEEpKX13aGlsZShN''@;'; put 'put ''LmNtcChmKT49MCk7cmV0dXJuIE19LG8ucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24oZixUKXt2YXIgQT1ULnN1YihmKTtyZXR1cm4gZi5hZGQodGhpcy5fcmFuZGJlbG93KEEpKX0sby5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihmLFQsQSl7dmFyIE09Zi5iaXRMZW5ndGgoKSxPPVMu''@;'; put 'put ''bW9udChmKSxEPW5ldyBTKDEpLnRvUmVkKE8pO1R8fChUPU1hdGgubWF4KDEsTS80OHwwKSk7Zm9yKHZhciBFPWYuc3VibigxKSxCPTA7IUUudGVzdG4oQik7QisrKTtmb3IodmFyIEY9Zi5zaHJuKEIpLE49RS50b1JlZChPKTtUPjA7VC0tKXt2YXIgej10aGlzLl9yYW5kcmFuZ2UobmV3IFMo''@;'; put 'put ''MiksRSk7QSYmQSh6KTt2YXIgWj16LnRvUmVkKE8pLnJlZFBvdyhGKTtpZigwIT09Wi5jbXAoRCkmJjAhPT1aLmNtcChOKSl7Zm9yKHZhciBVPTE7VTxCO1UrKyl7aWYoMD09PShaPVoucmVkU3FyKCkpLmNtcChEKSlyZXR1cm4hMTtpZigwPT09Wi5jbXAoTikpYnJlYWt9aWYoVT09PUIpcmV0''@;'; put 'put ''dXJuITF9fXJldHVybiEwfSxvLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKGYsVCl7dmFyIEE9Zi5iaXRMZW5ndGgoKSxNPVMubW9udChmKSxPPW5ldyBTKDEpLnRvUmVkKE0pO1R8fChUPU1hdGgubWF4KDEsQS80OHwwKSk7Zm9yKHZhciBEPWYuc3VibigxKSxFPTA7IUQudGVzdG4o''@;'; put 'put ''RSk7RSsrKTtmb3IodmFyIEI9Zi5zaHJuKEUpLEY9RC50b1JlZChNKTtUPjA7VC0tKXt2YXIgTj10aGlzLl9yYW5kcmFuZ2UobmV3IFMoMiksRCksSD1mLmdjZChOKTtpZigwIT09SC5jbXBuKDEpKXJldHVybiBIO3ZhciB6PU4udG9SZWQoTSkucmVkUG93KEIpO2lmKDAhPT16LmNtcChPKSYm''@;'; put 'put ''MCE9PXouY21wKEYpKXtmb3IodmFyIFo9MTtaPEU7WisrKXtpZigwPT09KHo9ei5yZWRTcXIoKSkuY21wKE8pKXJldHVybiB6LmZyb21SZWQoKS5zdWJuKDEpLmdjZChmKTtpZigwPT09ei5jbXAoRikpYnJlYWt9aWYoWj09PUUpcmV0dXJuKHo9ei5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4o''@;'; put 'put ''MSkuZ2NkKGYpfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24odGUsaixkKXshZnVuY3Rpb24oUyxoKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhSLHMpe2lmKCFSKXRocm93IG5ldyBFcnJvcihzfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEkoUixzKXtSLnN1cGVyXz1zO3ZhciB1''@;'; put 'put ''PWZ1bmN0aW9uKCl7fTt1LnByb3RvdHlwZT1zLnByb3RvdHlwZSxSLnByb3RvdHlwZT1uZXcgdSxSLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SfWZ1bmN0aW9uIGYoUixzLHUpe2lmKGYuaXNCTihSKSlyZXR1cm4gUjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09UiYmKCgibGUiPT09c3x8ImJlIj09PXMpJiYodT1zLHM9MTApLHRoaXMuX2luaXQoUnx8MCxzfHwxMCx1fHwiYmUiKSl9dmFyIFQ7Im9iamVjdCI9PXR5cGVvZiBTP1MuZXhwb3J0cz1mOmguQk49ZixmLkJOPWYsZi53b3JkU2l6ZT0yNjt0cnl7VD10''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6ZCg2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEEoUixzKXt2YXIgdT1SLmNoYXJDb2RlQXQocyk7cmV0dXJuIHU+PTY1JiZ1PD03MD91LTU1OnU+PTk3JiZ1PD0xMDI/dS04Nzp1LTQ4''@;'; put 'put ''JjE1fWZ1bmN0aW9uIE0oUixzLHUpe3ZhciB2PUEoUix1KTtyZXR1cm4gdS0xPj1zJiYodnw9QShSLHUtMSk8PDQpLHZ9ZnVuY3Rpb24gTyhSLHMsdSx2KXtmb3IodmFyIHA9MCxfPU1hdGgubWluKFIubGVuZ3RoLHUpLGs9cztrPF87aysrKXt2YXIgTD1SLmNoYXJDb2RlQXQoayktNDg7cCo9''@;'; put 'put ''dixwKz1MPj00OT9MLTQ5KzEwOkw+PTE3P0wtMTcrMTA6TH1yZXR1cm4gcH1mLmlzQk49ZnVuY3Rpb24ocyl7cmV0dXJuIHMgaW5zdGFuY2VvZiBmfHxudWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmNvbnN0cnVjdG9yLndvcmRTaXplPT09Zi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJh''@;'; put 'put ''eShzLndvcmRzKX0sZi5tYXg9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk+MD9zOnV9LGYubWluPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHMuY21wKHUpPDA/czp1fSxmLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihzLHUsdil7aWYoIm51bWJlciI9PXR5cGVvZiBzKXJldHVybiB0aGlz''@;'; put 'put ''Ll9pbml0TnVtYmVyKHMsdSx2KTtpZigib2JqZWN0Ij09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShzLHUsdik7ImhleCI9PT11JiYodT0xNiksbyh1PT09KDB8dSkmJnU+PTImJnU8PTM2KTt2YXIgcD0wOyItIj09PShzPXMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikp''@;'; put 'put ''WzBdJiYocCsrLHRoaXMubmVnYXRpdmU9MSkscDxzLmxlbmd0aCYmKDE2PT09dT90aGlzLl9wYXJzZUhleChzLHAsdik6KHRoaXMuX3BhcnNlQmFzZShzLHUscCksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpKSl9LGYucHJvdG90eXBlLl9pbml0TnVtYmVy''@;'; put 'put ''PWZ1bmN0aW9uKHMsdSx2KXtzPDAmJih0aGlzLm5lZ2F0aXZlPTEscz0tcyksczw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmc10sdGhpcy5sZW5ndGg9MSk6czw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTIpOihvKHM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcyxzLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT12JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksdSx2KX0sZi5wcm90b3R5cGUuX2luaXRBcnJheT1m''@;'; put 'put ''dW5jdGlvbihzLHUsdil7aWYobygibnVtYmVyIj09dHlwZW9mIHMubGVuZ3RoKSxzLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChzLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT0wO3ZhciBfLGssTD0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTEsXz0wO3A+PTA7cC09Myl0aGlzLndvcmRzW19dfD0oaz1zW3BdfHNbcC0xXTw8OHxzW3AtMl08PDE2KTw8TCY2NzEwODg2Myx0aGlz''@;'; put 'put ''LndvcmRzW18rMV09az4+PjI2LUwmNjcxMDg4NjMsKEwrPTI0KT49MjYmJihMLT0yNixfKyspO2Vsc2UgaWYoImxlIj09PXYpZm9yKHA9MCxfPTA7cDxzLmxlbmd0aDtwKz0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twKzFdPDw4fHNbcCsyXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29y''@;'; put 'put ''ZHNbXysxXT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHMsdSx2KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHMubGVuZ3RoLXUpLzYpLHRoaXMud29yZHM9bmV3IEFy''@;'; put 'put ''cmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIEwsXz0wLGs9MDtpZigiYmUiPT09dilmb3IocD1zLmxlbmd0aC0xO3A+PXU7cC09MilMPU0ocyx1LHApPDxfLHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49MTg/KF8t''@;'; put 'put ''PTE4LHRoaXMud29yZHNbays9MV18PUw+Pj4yNik6Xys9ODtlbHNlIGZvcihwPShzLmxlbmd0aC11KSUyPT0wP3UrMTp1O3A8cy5sZW5ndGg7cCs9MilMPU0ocyx1LHApPDxfLHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49MTg/KF8tPTE4LHRoaXMud29yZHNbays9MV18PUw+Pj4yNik6''@;'; put 'put ''Xys9ODt0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocyx1LHYpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBwPTAsXz0xO188PTY3MTA4ODYzO18qPXUpcCsrO3AtLSxfPV8vdXwwO2Zvcih2YXIgaz1zLmxlbmd0aC12LEw9ayVwLHk9''@;'; put 'put ''TWF0aC5taW4oayxrLUwpK3YsbD0wLGI9djtiPHk7Yis9cClsPU8ocyxiLGIrcCx1KSx0aGlzLmltdWxuKF8pLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpO2lmKDAhPT1MKXt2YXIgcT0xO2ZvcihsPU8ocyxiLHMubGVuZ3RoLHUpLGI9''@;'; put 'put ''MDtiPEw7YisrKXEqPXU7dGhpcy5pbXVsbihxKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKX10aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocyl7cy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2''@;'; put 'put ''YXIgdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD10aGlzLmxlbmd0aCxzLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscy5yZWQ9dGhpcy5yZWR9LGYucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJu''@;'; put 'put ''IHRoaXMuY29weShzKSxzfSxmLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHMpe2Zvcig7dGhpcy5sZW5ndGg8czspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxmLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGYucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxm''@;'; put 'put ''LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBEPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCJdLEU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sQj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIx''@;'; put 'put ''LDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5''@;'; put 'put ''LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBOKFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZTt2YXIgdj1SLmxlbmd0aCtzLmxlbmd0aHwwO3UubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0w''@;'; put 'put ''fFIud29yZHNbMF0sXz0wfHMud29yZHNbMF0saz1wKl8seT1rLzY3MTA4ODY0fDA7dS53b3Jkc1swXT02NzEwODg2MyZrO2Zvcih2YXIgbD0xO2w8djtsKyspe2Zvcih2YXIgYj15Pj4+MjYscT02NzEwODg2MyZ5LEc9TWF0aC5taW4obCxzLmxlbmd0aC0xKSxRPU1hdGgubWF4KDAsbC1SLmxl''@;'; put 'put ''bmd0aCsxKTtRPD1HO1ErKyliKz0oaz0ocD0wfFIud29yZHNbbC1RfDBdKSooXz0wfHMud29yZHNbUV0pK3EpLzY3MTA4ODY0fDAscT02NzEwODg2MyZrO3Uud29yZHNbbF09MHxxLHk9MHxifXJldHVybiAwIT09eT91LndvcmRzW2xdPTB8eTp1Lmxlbmd0aC0tLHUuc3RyaXAoKX1mLnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZz1mdW5jdGlvbihzLHUpe3ZhciB2O2lmKHU9MHx1fHwxLDE2PT09KHM9c3x8MTApfHwiaGV4Ij09PXMpe3Y9IiI7Zm9yKHZhciBwPTAsXz0wLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl7dmFyIEw9dGhpcy53b3Jkc1trXSx5PSgxNjc3NzIxNSYoTDw8cHxfKSkudG9TdHJp''@;'; put 'put ''bmcoMTYpO189TD4+PjI0LXAmMTY3NzcyMTUsKHArPTIpPj0yNiYmKHAtPTI2LGstLSksdj0wIT09X3x8ayE9PXRoaXMubGVuZ3RoLTE/RFs2LXkubGVuZ3RoXSt5K3Y6eSt2fWZvcigwIT09XyYmKHY9Xy50b1N0cmluZygxNikrdik7di5sZW5ndGgldSE9MDspdj0iMCIrdjtyZXR1cm4gMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJih2PSItIit2KSx2fWlmKHM9PT0oMHxzKSYmcz49MiYmczw9MzYpe3ZhciBsPUVbc10sYj1CW3NdO3Y9IiI7dmFyIHE9dGhpcy5jbG9uZSgpO2ZvcihxLm5lZ2F0aXZlPTA7IXEuaXNaZXJvKCk7KXt2YXIgRz1xLm1vZG4oYikudG9TdHJpbmcocyk7dj0ocT1xLmlk''@;'; put 'put ''aXZuKGIpKS5pc1plcm8oKT9HK3Y6RFtsLUcubGVuZ3RoXStHK3Z9Zm9yKHRoaXMuaXNaZXJvKCkmJih2PSIwIit2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAz''@;'; put 'put ''NiIpfSxmLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBzPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9zKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEw''@;'; put 'put ''ODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1zOnN9LGYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0s''@;'; put 'put ''Zi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gbyh0eXBlb2YgVDwidSIpLHRoaXMudG9BcnJheUxpa2UoVCxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscyx1KX0sZi5wcm90b3R5cGUu''@;'; put 'put ''dG9BcnJheUxpa2U9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPXRoaXMuYnl0ZUxlbmd0aCgpLF89dnx8TWF0aC5tYXgoMSxwKTtvKHA8PV8sImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxvKF8+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJp''@;'; put 'put ''cCgpO3ZhciB5LGwsaz0ibGUiPT09dSxMPW5ldyBzKF8pLGI9dGhpcy5jbG9uZSgpO2lmKGspe2ZvcihsPTA7IWIuaXNaZXJvKCk7bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbbF09eTtmb3IoO2w8XztsKyspTFtsXT0wfWVsc2V7Zm9yKGw9MDtsPF8tcDtsKyspTFtsXT0wO2Zv''@;'; put 'put ''cihsPTA7IWIuaXNaZXJvKCk7bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbXy1sLTFdPXl9cmV0dXJuIEx9LGYucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihzKXtyZXR1cm4gMzItTWF0aC5jbHozMihzKX06ZnVuY3Rpb24ocyl7dmFyIHU9cyx2PTA7''@;'; put 'put ''cmV0dXJuIHU+PTQwOTYmJih2Kz0xMyx1Pj4+PTEzKSx1Pj02NCYmKHYrPTcsdT4+Pj03KSx1Pj04JiYodis9NCx1Pj4+PTQpLHU+PTImJih2Kz0yLHU+Pj49Miksdit1fSxmLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocyl7aWYoMD09PXMpcmV0dXJuIDI2O3ZhciB1PXMsdj0wO3Jl''@;'; put 'put ''dHVybiEoODE5MSZ1KSYmKHYrPTEzLHU+Pj49MTMpLCEoMTI3JnUpJiYodis9Nyx1Pj4+PTcpLCEoMTUmdSkmJih2Kz00LHU+Pj49NCksISgzJnUpJiYodis9Mix1Pj4+PTIpLCEoMSZ1KSYmdisrLHZ9LGYucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB1PXRoaXMuX2NvdW50''@;'; put 'put ''Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3V9LGYucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHM9MCx1PTA7dTx0aGlzLmxlbmd0aDt1Kyspe3ZhciB2PXRoaXMu''@;'; put 'put ''X3plcm9CaXRzKHRoaXMud29yZHNbdV0pO2lmKHMrPXYsMjYhPT12KWJyZWFrfXJldHVybiBzfSxmLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxmLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocyl7cmV0dXJu''@;'; put 'put ''IDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxmLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy50ZXN0bihzLTEpP3RoaXMubm90bihzKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sZi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGYucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVn''@;'; put 'put ''YXRpdmVePTEpLHRoaXN9LGYucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1XXxzLndvcmRzW3Vd''@;'; put 'put ''O3JldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlvcj1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihzKX0sZi5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pb3Iocyk6cy5jbG9uZSgpLmlvcih0aGlzKX0sZi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihzKTpzLmNsb25lKCkuaXVvcih0aGlzKX0sZi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocyl7dmFy''@;'; put 'put ''IHU7dT10aGlzLmxlbmd0aD5zLmxlbmd0aD9zOnRoaXM7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT10aGlzLndvcmRzW3ZdJnMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPXUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFuZD1mdW5jdGlv''@;'; put 'put ''bihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocyl9LGYucHJvdG90eXBlLmFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocyk6cy5jbG9uZSgpLmlhbmQodGhpcyl9LGYucHJvdG90''@;'; put 'put ''eXBlLnVhbmQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChzKTpzLmNsb25lKCkuaXVhbmQodGhpcyl9LGYucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHMpe3ZhciB1LHY7dGhpcy5sZW5ndGg+cy5sZW5ndGg/KHU9dGhpcyx2PXMp''@;'; put 'put ''Oih1PXMsdj10aGlzKTtmb3IodmFyIHA9MDtwPHYubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXUud29yZHNbcF1edi53b3Jkc1twXTtpZih0aGlzIT09dSlmb3IoO3A8dS5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhp''@;'; put 'put ''cy5zdHJpcCgpfSxmLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihzKX0sZi5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXhv''@;'; put 'put ''cihzKTpzLmNsb25lKCkuaXhvcih0aGlzKX0sZi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHMpOnMuY2xvbmUoKS5pdXhvcih0aGlzKX0sZi5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocyl7bygibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB1PTB8TWF0aC5jZWlsKHMvMjYpLHY9cyUyNjt0aGlzLl9leHBhbmQodSksdj4wJiZ1LS07Zm9yKHZhciBwPTA7cDx1O3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJn50aGlzLndvcmRzW3BdO3JldHVybiB2PjAmJih0aGlzLndvcmRzW3BdPX50''@;'; put 'put ''aGlzLndvcmRzW3BdJjY3MTA4ODYzPj4yNi12KSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihzKX0sZi5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihzLHUpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIg''@;'; put 'put ''dj1zLzI2fDAscD1zJTI2O3JldHVybiB0aGlzLl9leHBhbmQodisxKSx0aGlzLndvcmRzW3ZdPXU/dGhpcy53b3Jkc1t2XXwxPDxwOnRoaXMud29yZHNbdl0mfigxPDxwKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocyl7dmFyIHUsdixwO2lmKDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiYwPT09cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmUpcmV0dXJuIHMubmVnYXRpdmU9MCx1PXRoaXMuaXN1Yihz''@;'; put 'put ''KSxzLm5lZ2F0aXZlPTEsdS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odj10aGlzLHA9cyk6KHY9cyxwPXRoaXMpO2Zvcih2YXIgXz0wLGs9MDtrPHAubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPTY3MTA4ODYzJih1PSgwfHYud29yZHNba10pKygwfHAud29yZHNba10pK18p''@;'; put 'put ''LF89dT4+PjI2O2Zvcig7MCE9PV8mJms8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrXyksXz11Pj4+MjY7aWYodGhpcy5sZW5ndGg9di5sZW5ndGgsMCE9PV8pdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Xyx0aGlzLmxlbmd0aCsrO2Vsc2Ug''@;'; put 'put ''aWYodiE9PXRoaXMpZm9yKDtrPHYubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPXYud29yZHNba107cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzKXt2YXIgdTtyZXR1cm4gMCE9PXMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhzLm5lZ2F0aXZlPTAsdT10aGlz''@;'; put 'put ''LnN1YihzKSxzLm5lZ2F0aXZlXj0xLHUpOjA9PT1zLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHU9cy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHUpOnRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHMpOnMuY2xvbmUoKS5pYWRk''@;'; put 'put ''KHRoaXMpfSxmLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHMpe2lmKDAhPT1zLm5lZ2F0aXZlKXtzLm5lZ2F0aXZlPTA7dmFyIHU9dGhpcy5pYWRkKHMpO3JldHVybiBzLm5lZ2F0aXZlPTEsdS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMuaWFkZChzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcCxfLHY9dGhpcy5jbXAocyk7aWYoMD09PXYpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3Y+MD8ocD10aGlzLF89cyk6KHA9cyxfPXRoaXMp''@;'; put 'put ''O2Zvcih2YXIgaz0wLEw9MDtMPF8ubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pLSgwfF8ud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7Zm9yKDswIT09ayYmTDxwLmxlbmd0aDtMKyspaz0odT0oMHxwLndvcmRzW0xdKStrKT4+MjYsdGhpcy53b3Jkc1tM''@;'; put 'put ''XT02NzEwODg2MyZ1O2lmKDA9PT1rJiZMPHAubGVuZ3RoJiZwIT09dGhpcylmb3IoO0w8cC5sZW5ndGg7TCsrKXRoaXMud29yZHNbTF09cC53b3Jkc1tMXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsTCkscCE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sZi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihzKX07dmFyIEg9ZnVuY3Rpb24ocyx1LHYpe3ZhciB5LGwsYixwPXMud29yZHMsXz11LndvcmRzLGs9di53b3JkcyxMPTAscT0wfHBbMF0sRz04MTkxJnEsUT1xPj4+MTMscGU9MHxw''@;'; put 'put ''WzFdLFBlPTgxOTEmcGUsWmU9cGU+Pj4xMyxxZT0wfHBbMl0sdmU9ODE5MSZxZSx1ZT1xZT4+PjEzLHplPTB8cFszXSxPZT04MTkxJnplLENlPXplPj4+MTMsa2U9MHxwWzRdLHhlPTgxOTEma2UsTWU9a2U+Pj4xMyxJZT0wfHBbNV0sYmU9ODE5MSZJZSx3ZT1JZT4+PjEzLHB0PTB8cFs2XSxL''@;'; put 'put ''ZT04MTkxJnB0LFllPXB0Pj4+MTMscXQ9MHxwWzddLGh0PTgxOTEmcXQsdnQ9cXQ+Pj4xMyxZdD0wfHBbOF0sdHQ9ODE5MSZZdCxVZT1ZdD4+PjEzLCRlPTB8cFs5XSxMZT04MTkxJiRlLG50PSRlPj4+MTMscm49MHxfWzBdLHh0PTgxOTEmcm4sVHQ9cm4+Pj4xMyx5bj0wfF9bMV0sWHQ9ODE5''@;'; put 'put ''MSZ5bixRdD15bj4+PjEzLFhyPTB8X1syXSxzbj04MTkxJlhyLGl0PVhyPj4+MTMsQ3I9MHxfWzNdLEx0PTgxOTEmQ3Isd3Q9Q3I+Pj4xMyxSbj0wfF9bNF0sUWU9ODE5MSZSbixQdD1Sbj4+PjEzLFFyPTB8X1s1XSxOZT04MTkxJlFyLHl0PVFyPj4+MTMscnI9MHxfWzZdLGF0PTgxOTEmcnIs''@;'; put 'put ''X3Q9cnI+Pj4xMyx3bj0wfF9bN10sJHQ9ODE5MSZ3bixIdD13bj4+PjEzLHNpPTB8X1s4XSxubj04MTkxJnNpLGxuPXNpPj4+MTMsa2k9MHxfWzldLGFuPTgxOTEma2ksR3Q9a2k+Pj4xMzt2Lm5lZ2F0aXZlPXMubmVnYXRpdmVedS5uZWdhdGl2ZSx2Lmxlbmd0aD0xOTt2YXIgZWE9KEwrKHk9''@;'; put 'put ''TWF0aC5pbXVsKEcseHQpKXwwKSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKEcsVHQpKStNYXRoLmltdWwoUSx4dCl8MCkpPDwxMyl8MDtMPSgoYj1NYXRoLmltdWwoUSxUdCkpKyhsPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2Myx5PU1hdGguaW11bChQZSx4dCksbD0obD1NYXRo''@;'; put 'put ''LmltdWwoUGUsVHQpKStNYXRoLmltdWwoWmUseHQpfDAsYj1NYXRoLmltdWwoWmUsVHQpO3ZhciBtaT0oTCsoeT15K01hdGguaW11bChHLFh0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxRdCl8MCkrTWF0aC5pbXVsKFEsWHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmlt''@;'; put 'put ''dWwoUSxRdCl8MCkrKGw+Pj4xMyl8MCkrKG1pPj4+MjYpfDAsbWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHZlLHh0KSxsPShsPU1hdGguaW11bCh2ZSxUdCkpK01hdGguaW11bCh1ZSx4dCl8MCxiPU1hdGguaW11bCh1ZSxUdCkseT15K01hdGguaW11bChQZSxYdCl8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKFBlLFF0KXwwKStNYXRoLmltdWwoWmUsWHQpfDAsYj1iK01hdGguaW11bChaZSxRdCl8MDt2YXIgZnI9KEwrKHk9eStNYXRoLmltdWwoRyxzbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsaXQpfDApK01hdGguaW11bChRLHNuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0''@;'; put 'put ''aC5pbXVsKFEsaXQpfDApKyhsPj4+MTMpfDApKyhmcj4+PjI2KXwwLGZyJj02NzEwODg2Myx5PU1hdGguaW11bChPZSx4dCksbD0obD1NYXRoLmltdWwoT2UsVHQpKStNYXRoLmltdWwoQ2UseHQpfDAsYj1NYXRoLmltdWwoQ2UsVHQpLHk9eStNYXRoLmltdWwodmUsWHQpfDAsbD0obD1sK01h''@;'; put 'put ''dGguaW11bCh2ZSxRdCl8MCkrTWF0aC5pbXVsKHVlLFh0KXwwLGI9YitNYXRoLmltdWwodWUsUXQpfDAseT15K01hdGguaW11bChQZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKFBlLGl0KXwwKStNYXRoLmltdWwoWmUsc24pfDAsYj1iK01hdGguaW11bChaZSxpdCl8MDt2YXIgJGk9KEwrKHk9''@;'; put 'put ''eStNYXRoLmltdWwoRyxMdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsd3QpfDApK01hdGguaW11bChRLEx0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsd3QpfDApKyhsPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2Myx5PU1hdGguaW11bCh4ZSx4''@;'; put 'put ''dCksbD0obD1NYXRoLmltdWwoeGUsVHQpKStNYXRoLmltdWwoTWUseHQpfDAsYj1NYXRoLmltdWwoTWUsVHQpLHk9eStNYXRoLmltdWwoT2UsWHQpfDAsbD0obD1sK01hdGguaW11bChPZSxRdCl8MCkrTWF0aC5pbXVsKENlLFh0KXwwLGI9YitNYXRoLmltdWwoQ2UsUXQpfDAseT15K01hdGgu''@;'; put 'put ''aW11bCh2ZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHZlLGl0KXwwKStNYXRoLmltdWwodWUsc24pfDAsYj1iK01hdGguaW11bCh1ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKFBlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsd3QpfDApK01hdGguaW11bChaZSxMdCl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KFplLHd0KXwwO3ZhciBLaT0oTCsoeT15K01hdGguaW11bChHLFFlKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxQdCl8MCkrTWF0aC5pbXVsKFEsUWUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxQdCl8MCkrKGw+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3''@;'; put 'put ''MTA4ODYzLHk9TWF0aC5pbXVsKGJlLHh0KSxsPShsPU1hdGguaW11bChiZSxUdCkpK01hdGguaW11bCh3ZSx4dCl8MCxiPU1hdGguaW11bCh3ZSxUdCkseT15K01hdGguaW11bCh4ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLFF0KXwwKStNYXRoLmltdWwoTWUsWHQpfDAsYj1iK01hdGgu''@;'; put 'put ''aW11bChNZSxRdCl8MCx5PXkrTWF0aC5pbXVsKE9lLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsaXQpfDApK01hdGguaW11bChDZSxzbil8MCxiPWIrTWF0aC5pbXVsKENlLGl0KXwwLHk9eStNYXRoLmltdWwodmUsTHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSx3dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHVlLEx0KXwwLGI9YitNYXRoLmltdWwodWUsd3QpfDAseT15K01hdGguaW11bChQZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLFB0KXwwKStNYXRoLmltdWwoWmUsUWUpfDAsYj1iK01hdGguaW11bChaZSxQdCl8MDt2YXIgVmk9KEwrKHk9eStNYXRoLmltdWwoRyxOZSl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihsPShsPWwrTWF0aC5pbXVsKEcseXQpfDApK01hdGguaW11bChRLE5lKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEseXQpfDApKyhsPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2Myx5PU1hdGguaW11bChLZSx4dCksbD0obD1NYXRoLmltdWwoS2UsVHQpKStN''@;'; put 'put ''YXRoLmltdWwoWWUseHQpfDAsYj1NYXRoLmltdWwoWWUsVHQpLHk9eStNYXRoLmltdWwoYmUsWHQpfDAsbD0obD1sK01hdGguaW11bChiZSxRdCl8MCkrTWF0aC5pbXVsKHdlLFh0KXwwLGI9YitNYXRoLmltdWwod2UsUXQpfDAseT15K01hdGguaW11bCh4ZSxzbil8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKHhlLGl0KXwwKStNYXRoLmltdWwoTWUsc24pfDAsYj1iK01hdGguaW11bChNZSxpdCl8MCx5PXkrTWF0aC5pbXVsKE9lLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChDZSxMdCl8MCxiPWIrTWF0aC5pbXVsKENlLHd0KXwwLHk9eStNYXRoLmltdWwodmUs''@;'; put 'put ''UWUpfDAsbD0obD1sK01hdGguaW11bCh2ZSxQdCl8MCkrTWF0aC5pbXVsKHVlLFFlKXwwLGI9YitNYXRoLmltdWwodWUsUHQpfDAseT15K01hdGguaW11bChQZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLHl0KXwwKStNYXRoLmltdWwoWmUsTmUpfDAsYj1iK01hdGguaW11bChaZSx5dCl8''@;'; put 'put ''MDt2YXIgcXI9KEwrKHk9eStNYXRoLmltdWwoRyxhdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsX3QpfDApK01hdGguaW11bChRLGF0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsX3QpfDApKyhsPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx5''@;'; put 'put ''PU1hdGguaW11bChodCx4dCksbD0obD1NYXRoLmltdWwoaHQsVHQpKStNYXRoLmltdWwodnQseHQpfDAsYj1NYXRoLmltdWwodnQsVHQpLHk9eStNYXRoLmltdWwoS2UsWHQpfDAsbD0obD1sK01hdGguaW11bChLZSxRdCl8MCkrTWF0aC5pbXVsKFllLFh0KXwwLGI9YitNYXRoLmltdWwoWWUs''@;'; put 'put ''UXQpfDAseT15K01hdGguaW11bChiZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGl0KXwwKStNYXRoLmltdWwod2Usc24pfDAsYj1iK01hdGguaW11bCh3ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKHhlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChNZSxMdCl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKE1lLHd0KXwwLHk9eStNYXRoLmltdWwoT2UsUWUpfDAsbD0obD1sK01hdGguaW11bChPZSxQdCl8MCkrTWF0aC5pbXVsKENlLFFlKXwwLGI9YitNYXRoLmltdWwoQ2UsUHQpfDAseT15K01hdGguaW11bCh2ZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHl0KXww''@;'; put 'put ''KStNYXRoLmltdWwodWUsTmUpfDAsYj1iK01hdGguaW11bCh1ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKFBlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsX3QpfDApK01hdGguaW11bChaZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFplLF90KXwwO3ZhciB1YT0oTCsoeT15K01hdGguaW11bChHLCR0''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxIdCl8MCkrTWF0aC5pbXVsKFEsJHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxIdCl8MCkrKGw+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHR0LHh0KSxsPShsPU1hdGguaW11''@;'; put 'put ''bCh0dCxUdCkpK01hdGguaW11bChVZSx4dCl8MCxiPU1hdGguaW11bChVZSxUdCkseT15K01hdGguaW11bChodCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LFF0KXwwKStNYXRoLmltdWwodnQsWHQpfDAsYj1iK01hdGguaW11bCh2dCxRdCl8MCx5PXkrTWF0aC5pbXVsKEtlLHNuKXwwLGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwoS2UsaXQpfDApK01hdGguaW11bChZZSxzbil8MCxiPWIrTWF0aC5pbXVsKFllLGl0KXwwLHk9eStNYXRoLmltdWwoYmUsTHQpfDAsbD0obD1sK01hdGguaW11bChiZSx3dCl8MCkrTWF0aC5pbXVsKHdlLEx0KXwwLGI9YitNYXRoLmltdWwod2Usd3QpfDAseT15K01h''@;'; put 'put ''dGguaW11bCh4ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLFB0KXwwKStNYXRoLmltdWwoTWUsUWUpfDAsYj1iK01hdGguaW11bChNZSxQdCl8MCx5PXkrTWF0aC5pbXVsKE9lLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UseXQpfDApK01hdGguaW11bChDZSxOZSl8MCxiPWIrTWF0aC5p''@;'; put 'put ''bXVsKENlLHl0KXwwLHk9eStNYXRoLmltdWwodmUsYXQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxfdCl8MCkrTWF0aC5pbXVsKHVlLGF0KXwwLGI9YitNYXRoLmltdWwodWUsX3QpfDAseT15K01hdGguaW11bChQZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLEh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''WmUsJHQpfDAsYj1iK01hdGguaW11bChaZSxIdCl8MDt2YXIgRmk9KEwrKHk9eStNYXRoLmltdWwoRyxubil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsbG4pfDApK01hdGguaW11bChRLG5uKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsbG4pfDApKyhsPj4+MTMp''@;'; put 'put ''fDApKyhGaT4+PjI2KXwwLEZpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSx4dCksbD0obD1NYXRoLmltdWwoTGUsVHQpKStNYXRoLmltdWwobnQseHQpfDAsYj1NYXRoLmltdWwobnQsVHQpLHk9eStNYXRoLmltdWwodHQsWHQpfDAsbD0obD1sK01hdGguaW11bCh0dCxRdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFVlLFh0KXwwLGI9YitNYXRoLmltdWwoVWUsUXQpfDAseT15K01hdGguaW11bChodCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGh0LGl0KXwwKStNYXRoLmltdWwodnQsc24pfDAsYj1iK01hdGguaW11bCh2dCxpdCl8MCx5PXkrTWF0aC5pbXVsKEtlLEx0KXwwLGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwoS2Usd3QpfDApK01hdGguaW11bChZZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFllLHd0KXwwLHk9eStNYXRoLmltdWwoYmUsUWUpfDAsbD0obD1sK01hdGguaW11bChiZSxQdCl8MCkrTWF0aC5pbXVsKHdlLFFlKXwwLGI9YitNYXRoLmltdWwod2UsUHQpfDAseT15K01hdGguaW11bCh4ZSxO''@;'; put 'put ''ZSl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLHl0KXwwKStNYXRoLmltdWwoTWUsTmUpfDAsYj1iK01hdGguaW11bChNZSx5dCl8MCx5PXkrTWF0aC5pbXVsKE9lLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsX3QpfDApK01hdGguaW11bChDZSxhdCl8MCxiPWIrTWF0aC5pbXVsKENlLF90KXww''@;'; put 'put ''LHk9eStNYXRoLmltdWwodmUsJHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxIdCl8MCkrTWF0aC5pbXVsKHVlLCR0KXwwLGI9YitNYXRoLmltdWwodWUsSHQpfDAseT15K01hdGguaW11bChQZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKFBlLGxuKXwwKStNYXRoLmltdWwoWmUsbm4pfDAsYj1i''@;'; put 'put ''K01hdGguaW11bChaZSxsbil8MDt2YXIgUmE9KEwrKHk9eStNYXRoLmltdWwoRyxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsR3QpfDApK01hdGguaW11bChRLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsR3QpfDApKyhsPj4+MTMpfDApKyhSYT4+PjI2''@;'; put 'put ''KXwwLFJhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxYdCksbD0obD1NYXRoLmltdWwoTGUsUXQpKStNYXRoLmltdWwobnQsWHQpfDAsYj1NYXRoLmltdWwobnQsUXQpLHk9eStNYXRoLmltdWwodHQsc24pfDAsbD0obD1sK01hdGguaW11bCh0dCxpdCl8MCkrTWF0aC5pbXVsKFVlLHNuKXww''@;'; put 'put ''LGI9YitNYXRoLmltdWwoVWUsaXQpfDAseT15K01hdGguaW11bChodCxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LHd0KXwwKStNYXRoLmltdWwodnQsTHQpfDAsYj1iK01hdGguaW11bCh2dCx3dCl8MCx5PXkrTWF0aC5pbXVsKEtlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsUHQpfDAp''@;'; put 'put ''K01hdGguaW11bChZZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFllLFB0KXwwLHk9eStNYXRoLmltdWwoYmUsTmUpfDAsbD0obD1sK01hdGguaW11bChiZSx5dCl8MCkrTWF0aC5pbXVsKHdlLE5lKXwwLGI9YitNYXRoLmltdWwod2UseXQpfDAseT15K01hdGguaW11bCh4ZSxhdCl8MCxsPShsPWwr''@;'; put 'put ''TWF0aC5pbXVsKHhlLF90KXwwKStNYXRoLmltdWwoTWUsYXQpfDAsYj1iK01hdGguaW11bChNZSxfdCl8MCx5PXkrTWF0aC5pbXVsKE9lLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsSHQpfDApK01hdGguaW11bChDZSwkdCl8MCxiPWIrTWF0aC5pbXVsKENlLEh0KXwwLHk9eStNYXRoLmlt''@;'; put 'put ''dWwodmUsbm4pfDAsbD0obD1sK01hdGguaW11bCh2ZSxsbil8MCkrTWF0aC5pbXVsKHVlLG5uKXwwLGI9YitNYXRoLmltdWwodWUsbG4pfDA7dmFyIG9pPShMKyh5PXkrTWF0aC5pbXVsKFBlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoUGUsR3QpfDApK01hdGguaW11bCha''@;'; put 'put ''ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChaZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKG9pPj4+MjYpfDAsb2kmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHNuKSxsPShsPU1hdGguaW11bChMZSxpdCkpK01hdGguaW11bChudCxzbil8MCxiPU1hdGguaW11bChudCxpdCkseT15''@;'; put 'put ''K01hdGguaW11bCh0dCxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHd0KXwwKStNYXRoLmltdWwoVWUsTHQpfDAsYj1iK01hdGguaW11bChVZSx3dCl8MCx5PXkrTWF0aC5pbXVsKGh0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUHQpfDApK01hdGguaW11bCh2dCxRZSl8MCxiPWIrTWF0''@;'; put 'put ''aC5pbXVsKHZ0LFB0KXwwLHk9eStNYXRoLmltdWwoS2UsTmUpfDAsbD0obD1sK01hdGguaW11bChLZSx5dCl8MCkrTWF0aC5pbXVsKFllLE5lKXwwLGI9YitNYXRoLmltdWwoWWUseXQpfDAseT15K01hdGguaW11bChiZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLF90KXwwKStNYXRoLmlt''@;'; put 'put ''dWwod2UsYXQpfDAsYj1iK01hdGguaW11bCh3ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKHhlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsSHQpfDApK01hdGguaW11bChNZSwkdCl8MCxiPWIrTWF0aC5pbXVsKE1lLEh0KXwwLHk9eStNYXRoLmltdWwoT2Usbm4pfDAsbD0obD1sK01hdGguaW11''@;'; put 'put ''bChPZSxsbil8MCkrTWF0aC5pbXVsKENlLG5uKXwwLGI9YitNYXRoLmltdWwoQ2UsbG4pfDA7dmFyIFVpPShMKyh5PXkrTWF0aC5pbXVsKHZlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwodmUsR3QpfDApK01hdGguaW11bCh1ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01h''@;'; put 'put ''dGguaW11bCh1ZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLEx0KSxsPShsPU1hdGguaW11bChMZSx3dCkpK01hdGguaW11bChudCxMdCl8MCxiPU1hdGguaW11bChudCx3dCkseT15K01hdGguaW11bCh0dCxRZSl8MCxsPShsPWwr''@;'; put 'put ''TWF0aC5pbXVsKHR0LFB0KXwwKStNYXRoLmltdWwoVWUsUWUpfDAsYj1iK01hdGguaW11bChVZSxQdCl8MCx5PXkrTWF0aC5pbXVsKGh0LE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQseXQpfDApK01hdGguaW11bCh2dCxOZSl8MCxiPWIrTWF0aC5pbXVsKHZ0LHl0KXwwLHk9eStNYXRoLmlt''@;'; put 'put ''dWwoS2UsYXQpfDAsbD0obD1sK01hdGguaW11bChLZSxfdCl8MCkrTWF0aC5pbXVsKFllLGF0KXwwLGI9YitNYXRoLmltdWwoWWUsX3QpfDAseT15K01hdGguaW11bChiZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLEh0KXwwKStNYXRoLmltdWwod2UsJHQpfDAsYj1iK01hdGguaW11bCh3''@;'; put 'put ''ZSxIdCl8MCx5PXkrTWF0aC5pbXVsKHhlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bChNZSxubil8MCxiPWIrTWF0aC5pbXVsKE1lLGxuKXwwO3ZhciBWYT0oTCsoeT15K01hdGguaW11bChPZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKE9l''@;'; put 'put ''LEd0KXwwKStNYXRoLmltdWwoQ2UsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoQ2UsR3QpfDApKyhsPj4+MTMpfDApKyhWYT4+PjI2KXwwLFZhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxRZSksbD0obD1NYXRoLmltdWwoTGUsUHQpKStNYXRoLmltdWwobnQsUWUpfDAsYj1N''@;'; put 'put ''YXRoLmltdWwobnQsUHQpLHk9eStNYXRoLmltdWwodHQsTmUpfDAsbD0obD1sK01hdGguaW11bCh0dCx5dCl8MCkrTWF0aC5pbXVsKFVlLE5lKXwwLGI9YitNYXRoLmltdWwoVWUseXQpfDAseT15K01hdGguaW11bChodCxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LF90KXwwKStNYXRoLmlt''@;'; put 'put ''dWwodnQsYXQpfDAsYj1iK01hdGguaW11bCh2dCxfdCl8MCx5PXkrTWF0aC5pbXVsKEtlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsSHQpfDApK01hdGguaW11bChZZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFllLEh0KXwwLHk9eStNYXRoLmltdWwoYmUsbm4pfDAsbD0obD1sK01hdGguaW11''@;'; put 'put ''bChiZSxsbil8MCkrTWF0aC5pbXVsKHdlLG5uKXwwLGI9YitNYXRoLmltdWwod2UsbG4pfDA7dmFyIHVyPShMKyh5PXkrTWF0aC5pbXVsKHhlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoeGUsR3QpfDApK01hdGguaW11bChNZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01h''@;'; put 'put ''dGguaW11bChNZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLE5lKSxsPShsPU1hdGguaW11bChMZSx5dCkpK01hdGguaW11bChudCxOZSl8MCxiPU1hdGguaW11bChudCx5dCkseT15K01hdGguaW11bCh0dCxhdCl8MCxsPShsPWwr''@;'; put 'put ''TWF0aC5pbXVsKHR0LF90KXwwKStNYXRoLmltdWwoVWUsYXQpfDAsYj1iK01hdGguaW11bChVZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGh0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsSHQpfDApK01hdGguaW11bCh2dCwkdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LEh0KXwwLHk9eStNYXRoLmlt''@;'; put 'put ''dWwoS2Usbm4pfDAsbD0obD1sK01hdGguaW11bChLZSxsbil8MCkrTWF0aC5pbXVsKFllLG5uKXwwLGI9YitNYXRoLmltdWwoWWUsbG4pfDA7dmFyIGZhPShMKyh5PXkrTWF0aC5pbXVsKGJlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoYmUsR3QpfDApK01hdGguaW11bCh3''@;'; put 'put ''ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh3ZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKGZhPj4+MjYpfDAsZmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLGF0KSxsPShsPU1hdGguaW11bChMZSxfdCkpK01hdGguaW11bChudCxhdCl8MCxiPU1hdGguaW11bChudCxfdCkseT15''@;'; put 'put ''K01hdGguaW11bCh0dCwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LEh0KXwwKStNYXRoLmltdWwoVWUsJHQpfDAsYj1iK01hdGguaW11bChVZSxIdCl8MCx5PXkrTWF0aC5pbXVsKGh0LG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsbG4pfDApK01hdGguaW11bCh2dCxubil8MCxiPWIrTWF0''@;'; put 'put ''aC5pbXVsKHZ0LGxuKXwwO3ZhciB4aT0oTCsoeT15K01hdGguaW11bChLZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwoWWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoWWUsR3QpfDApKyhsPj4+MTMpfDApKyh4aT4+PjI2''@;'; put 'put ''KXwwLHhpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSwkdCksbD0obD1NYXRoLmltdWwoTGUsSHQpKStNYXRoLmltdWwobnQsJHQpfDAsYj1NYXRoLmltdWwobnQsSHQpLHk9eStNYXRoLmltdWwodHQsbm4pfDAsbD0obD1sK01hdGguaW11bCh0dCxsbil8MCkrTWF0aC5pbXVsKFVlLG5uKXww''@;'; put 'put ''LGI9YitNYXRoLmltdWwoVWUsbG4pfDA7dmFyIG9hPShMKyh5PXkrTWF0aC5pbXVsKGh0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoaHQsR3QpfDApK01hdGguaW11bCh2dCxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh2dCxHdCl8MCkrKGw+Pj4xMyl8MCkr''@;'; put 'put ''KG9hPj4+MjYpfDAsb2EmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLG5uKSxsPShsPU1hdGguaW11bChMZSxsbikpK01hdGguaW11bChudCxubil8MCxiPU1hdGguaW11bChudCxsbik7dmFyIFhpPShMKyh5PXkrTWF0aC5pbXVsKHR0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwodHQsR3QpfDApK01hdGguaW11bChVZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChVZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzO3ZhciBJcj0oTCsoeT1NYXRoLmltdWwoTGUsYW4pKXwwKSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKExl''@;'; put 'put ''LEd0KSkrTWF0aC5pbXVsKG50LGFuKXwwKSk8PDEzKXwwO3JldHVybiBMPSgoYj1NYXRoLmltdWwobnQsR3QpKSsobD4+PjEzKXwwKSsoSXI+Pj4yNil8MCxJciY9NjcxMDg4NjMsa1swXT1lYSxrWzFdPW1pLGtbMl09ZnIsa1szXT0kaSxrWzRdPUtpLGtbNV09Vmksa1s2XT1xcixrWzddPXVh''@;'; put 'put ''LGtbOF09Rmksa1s5XT1SYSxrWzEwXT1vaSxrWzExXT1VaSxrWzEyXT1WYSxrWzEzXT11cixrWzE0XT1mYSxrWzE1XT14aSxrWzE2XT1vYSxrWzE3XT1YaSxrWzE4XT1JciwwIT09TCYmKGtbMTldPUwsdi5sZW5ndGgrKyksdn07ZnVuY3Rpb24gWihSLHMsdSl7cmV0dXJuKG5ldyBVKS5tdWxw''@;'; put 'put ''KFIscyx1KX1mdW5jdGlvbiBVKFIscyl7dGhpcy54PVIsdGhpcy55PXN9TWF0aC5pbXVsfHwoSD1OKSxmLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihzLHUpe3ZhciB2LHA9dGhpcy5sZW5ndGgrcy5sZW5ndGg7cmV0dXJuIHY9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1zLmxlbmd0aD9IKHRo''@;'; put 'put ''aXMscyx1KTpwPDYzP04odGhpcyxzLHUpOnA8MTAyND9mdW5jdGlvbiB6KFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZSx1Lmxlbmd0aD1SLmxlbmd0aCtzLmxlbmd0aDtmb3IodmFyIHY9MCxwPTAsXz0wO188dS5sZW5ndGgtMTtfKyspe3ZhciBrPXA7cD0wO2Zvcih2''@;'; put 'put ''YXIgTD02NzEwODg2MyZ2LHk9TWF0aC5taW4oXyxzLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsXy1SLmxlbmd0aCsxKTtsPD15O2wrKyl7dmFyIFE9KDB8Ui53b3Jkc1tfLWxdKSooMHxzLndvcmRzW2xdKSxwZT02NzEwODg2MyZRO0w9NjcxMDg4NjMmKHBlPXBlK0x8MCkscCs9KGs9KGs9ayso''@;'; put 'put ''US82NzEwODg2NHwwKXwwKSsocGU+Pj4yNil8MCk+Pj4yNixrJj02NzEwODg2M311LndvcmRzW19dPUwsdj1rLGs9cH1yZXR1cm4gMCE9PXY/dS53b3Jkc1tfXT12OnUubGVuZ3RoLS0sdS5zdHJpcCgpfSh0aGlzLHMsdSk6Wih0aGlzLHMsdSksdn0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5j''@;'; put 'put ''dGlvbihzKXtmb3IodmFyIHU9bmV3IEFycmF5KHMpLHY9Zi5wcm90b3R5cGUuX2NvdW50Qml0cyhzKS0xLHA9MDtwPHM7cCsrKXVbcF09dGhpcy5yZXZCaW4ocCx2LHMpO3JldHVybiB1fSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocyx1LHYpe2lmKDA9PT1zfHxzPT09di0xKXJldHVy''@;'; put 'put ''biBzO2Zvcih2YXIgcD0wLF89MDtfPHU7XysrKXB8PSgxJnMpPDx1LV8tMSxzPj49MTtyZXR1cm4gcH0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihzLHUsdixwLF8sayl7Zm9yKHZhciBMPTA7TDxrO0wrKylwW0xdPXVbc1tMXV0sX1tMXT12W3NbTF1dfSxVLnByb3RvdHlwZS50cmFu''@;'; put 'put ''c2Zvcm09ZnVuY3Rpb24ocyx1LHYscCxfLGspe3RoaXMucGVybXV0ZShrLHMsdSx2LHAsXyk7Zm9yKHZhciBMPTE7TDxfO0w8PD0xKWZvcih2YXIgeT1MPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3kpLGI9TWF0aC5zaW4oMipNYXRoLlBJL3kpLHE9MDtxPF87cSs9eSlmb3IodmFyIEc9bCxR''@;'; put 'put ''PWIscGU9MDtwZTxMO3BlKyspe3ZhciBQZT12W3ErcGVdLFplPXBbcStwZV0scWU9dltxK3BlK0xdLHZlPXBbcStwZStMXSx1ZT1HKnFlLVEqdmU7dmU9Ryp2ZStRKnFlLHZbcStwZV09UGUrKHFlPXVlKSxwW3ErcGVdPVplK3ZlLHZbcStwZStMXT1QZS1xZSxwW3ErcGUrTF09WmUtdmUscGUh''@;'; put 'put ''PT15JiYodWU9bCpHLWIqUSxRPWwqUStiKkcsRz11ZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihzLHUpe3ZhciB2PTF8TWF0aC5tYXgodSxzKSxwPTEmdixfPTA7Zm9yKHY9di8yfDA7djt2Pj4+PTEpXysrO3JldHVybiAxPDxfKzErcH0sVS5wcm90b3R5cGUuY29uanVn''@;'; put 'put ''YXRlPWZ1bmN0aW9uKHMsdSx2KXtpZighKHY8PTEpKWZvcih2YXIgcD0wO3A8di8yO3ArKyl7dmFyIF89c1twXTtzW3BdPXNbdi1wLTFdLHNbdi1wLTFdPV8sXz11W3BdLHVbcF09LXVbdi1wLTFdLHVbdi1wLTFdPS1ffX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHMsdSl7''@;'; put 'put ''Zm9yKHZhciB2PTAscD0wO3A8dS8yO3ArKyl7dmFyIF89ODE5MipNYXRoLnJvdW5kKHNbMipwKzFdL3UpK01hdGgucm91bmQoc1syKnBdL3UpK3Y7c1twXT02NzEwODg2MyZfLHY9Xzw2NzEwODg2ND8wOl8vNjcxMDg4NjR8MH1yZXR1cm4gc30sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5j''@;'; put 'put ''dGlvbihzLHUsdixwKXtmb3IodmFyIF89MCxrPTA7azx1O2srKyl2WzIqa109ODE5MSYoXys9MHxzW2tdKSx2WzIqaysxXT04MTkxJihfPj4+PTEzKSxfPj4+PTEzO2ZvcihrPTIqdTtrPHA7KytrKXZba109MDtvKDA9PT1fKSxvKCEoLTgxOTImXykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0''@;'; put 'put ''aW9uKHMpe2Zvcih2YXIgdT1uZXcgQXJyYXkocyksdj0wO3Y8czt2KyspdVt2XT0wO3JldHVybiB1fSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcD0yKnRoaXMuZ3Vlc3NMZW4xM2Iocy5sZW5ndGgsdS5sZW5ndGgpLF89dGhpcy5tYWtlUkJUKHApLGs9dGhpcy5zdHVi''@;'; put 'put ''KHApLEw9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApLGw9bmV3IEFycmF5KHApLGI9bmV3IEFycmF5KHApLHE9bmV3IEFycmF5KHApLEc9bmV3IEFycmF5KHApLFE9di53b3JkcztRLmxlbmd0aD1wLHRoaXMuY29udmVydDEzYihzLndvcmRzLHMubGVuZ3RoLEwscCksdGhpcy5jb252ZXJ0''@;'; put 'put ''MTNiKHUud29yZHMsdS5sZW5ndGgsYixwKSx0aGlzLnRyYW5zZm9ybShMLGsseSxsLHAsXyksdGhpcy50cmFuc2Zvcm0oYixrLHEsRyxwLF8pO2Zvcih2YXIgcGU9MDtwZTxwO3BlKyspe3ZhciBQZT15W3BlXSpxW3BlXS1sW3BlXSpHW3BlXTtsW3BlXT15W3BlXSpHW3BlXStsW3BlXSpxW3Bl''@;'; put 'put ''XSx5W3BlXT1QZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoeSxsLHApLHRoaXMudHJhbnNmb3JtKHksbCxRLGsscCxfKSx0aGlzLmNvbmp1Z2F0ZShRLGsscCksdGhpcy5ub3JtYWxpemUxM2IoUSxwKSx2Lm5lZ2F0aXZlPXMubmVnYXRpdmVedS5uZWdhdGl2ZSx2Lmxlbmd0aD1zLmxlbmd0aCt1''@;'; put 'put ''Lmxlbmd0aCx2LnN0cmlwKCl9LGYucHJvdG90eXBlLm11bD1mdW5jdGlvbihzKXt2YXIgdT1uZXcgZihudWxsKTtyZXR1cm4gdS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLHRoaXMubXVsVG8ocyx1KX0sZi5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihzKXt2YXIgdT1u''@;'; put 'put ''ZXcgZihudWxsKTtyZXR1cm4gdS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLFoodGhpcyxzLHUpfSxmLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocyx0aGlzKX0sZi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocyl7''@;'; put 'put ''bygibnVtYmVyIj09dHlwZW9mIHMpLG8oczw2NzEwODg2NCk7Zm9yKHZhciB1PTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgcD0oMHx0aGlzLndvcmRzW3ZdKSpzLF89KDY3MTA4ODYzJnApKyg2NzEwODg2MyZ1KTt1Pj49MjYsdSs9cC82NzEwODg2NHwwLHUrPV8+Pj4yNix0aGlzLndv''@;'; put 'put ''cmRzW3ZdPTY3MTA4ODYzJl99cmV0dXJuIDAhPT11JiYodGhpcy53b3Jkc1t2XT11LHRoaXMubGVuZ3RoKyspLHRoaXN9LGYucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihzKX0sZi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubXVsKHRoaXMpfSxmLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxmLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyl7dmFyIHU9ZnVuY3Rpb24gRihSKXtmb3IodmFyIHM9bmV3IEFycmF5KFIuYml0TGVuZ3RoKCkpLHU9MDt1PHMu''@;'; put 'put ''bGVuZ3RoO3UrKyl7dmFyIHA9dSUyNjtzW3VdPShSLndvcmRzW3UvMjZ8MF0mMTw8cCk+Pj5wfXJldHVybiBzfShzKTtpZigwPT09dS5sZW5ndGgpcmV0dXJuIG5ldyBmKDEpO2Zvcih2YXIgdj10aGlzLHA9MDtwPHUubGVuZ3RoJiYwPT09dVtwXTtwKyssdj12LnNxcigpKTtpZigrK3A8dS5s''@;'; put 'put ''ZW5ndGgpZm9yKHZhciBfPXYuc3FyKCk7cDx1Lmxlbmd0aDtwKyssXz1fLnNxcigpKTAhPT11W3BdJiYodj12Lm11bChfKSk7cmV0dXJuIHZ9LGYucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIF8sdT1zJTI2LHY9KHMtdSkvMjYs''@;'; put 'put ''cD02NzEwODg2Mz4+PjI2LXU8PDI2LXU7aWYoMCE9PXUpe3ZhciBrPTA7Zm9yKF89MDtfPHRoaXMubGVuZ3RoO18rKyl7dmFyIEw9dGhpcy53b3Jkc1tfXSZwO3RoaXMud29yZHNbX109KDB8dGhpcy53b3Jkc1tfXSktTDw8dXxrLGs9TD4+PjI2LXV9ayYmKHRoaXMud29yZHNbX109ayx0aGlz''@;'; put 'put ''Lmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKF89dGhpcy5sZW5ndGgtMTtfPj0wO18tLSl0aGlzLndvcmRzW18rdl09dGhpcy53b3Jkc1tfXTtmb3IoXz0wO188djtfKyspdGhpcy53b3Jkc1tfXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaGxu''@;'; put 'put ''PWZ1bmN0aW9uKHMpe3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihzKX0sZi5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcDtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCkscD11Pyh1LXUlMjYpLzI2OjA7dmFyIF89cyUyNixrPU1hdGgubWlu''@;'; put 'put ''KChzLV8pLzI2LHRoaXMubGVuZ3RoKSxMPTY3MTA4ODYzXjY3MTA4ODYzPj4+Xzw8Xyx5PXY7aWYocC09ayxwPU1hdGgubWF4KDAscCkseSl7Zm9yKHZhciBsPTA7bDxrO2wrKyl5LndvcmRzW2xdPXRoaXMud29yZHNbbF07eS5sZW5ndGg9a31pZigwIT09aylpZih0aGlzLmxlbmd0aD5rKWZv''@;'; put 'put ''cih0aGlzLmxlbmd0aC09ayxsPTA7bDx0aGlzLmxlbmd0aDtsKyspdGhpcy53b3Jkc1tsXT10aGlzLndvcmRzW2wra107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgYj0wO2ZvcihsPXRoaXMubGVuZ3RoLTE7bD49MCYmKDAhPT1ifHxsPj1wKTtsLS0pe3ZhciBxPTB8''@;'; put 'put ''dGhpcy53b3Jkc1tsXTt0aGlzLndvcmRzW2xdPWI8PDI2LV98cT4+Pl8sYj1xJkx9cmV0dXJuIHkmJjAhPT1iJiYoeS53b3Jkc1t5Lmxlbmd0aCsrXT1iKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5p''@;'; put 'put ''c2hybj1mdW5jdGlvbihzLHUsdil7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHMsdSx2KX0sZi5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHMpfSxmLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihzKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLml1c2hsbihzKX0sZi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHMpfSxmLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihzKX0sZi5wcm90b3R5cGUudGVzdG49ZnVu''@;'; put 'put ''Y3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB1PXMlMjYsdj0ocy11KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD12fHwhKHRoaXMud29yZHNbdl0mMTw8dSkpfSxmLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTAp''@;'; put 'put ''O3ZhciB1PXMlMjYsdj0ocy11KS8yNjtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXY/dGhpczooMCE9PXUmJnYrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih2LHRoaXMubGVuZ3RoKSwwIT09''@;'; put 'put ''dSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+dTw8dSksdGhpcy5zdHJpcCgpKX0sZi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocyl9LGYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHMpe3Jl''@;'; put 'put ''dHVybiBvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxzPDA/dGhpcy5pc3Vibigtcyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxzPyh0aGlzLndvcmRzWzBdPXMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocyl9LGYucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihzKXt0aGlzLndvcmRzWzBdKz1zO2Zvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbdV0+''@;'; put 'put ''PTY3MTA4ODY0O3UrKyl0aGlzLndvcmRzW3VdLT02NzEwODg2NCx1PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3UrMV09MTp0aGlzLndvcmRzW3UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsdSsxKSx0aGlzfSxmLnByb3RvdHlwZS5pc3Vibj1mdW5j''@;'; put 'put ''dGlvbihzKXtpZihvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxzPDApcmV0dXJuIHRoaXMuaWFkZG4oLXMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRz''@;'; put 'put ''WzBdLT1zLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XTwwO3UrKyl0aGlzLndvcmRzW3VdKz02NzEwODg2NCx0aGlz''@;'; put 'put ''LndvcmRzW3UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHMpfSxmLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocyl9LGYucHJvdG90eXBl''@;'; put 'put ''LmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxmLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocyx1LHYpe3ZhciBfO3RoaXMuX2V4cGFuZChzLmxl''@;'; put 'put ''bmd0aCt2KTt2YXIgayxMPTA7Zm9yKF89MDtfPHMubGVuZ3RoO18rKyl7az0oMHx0aGlzLndvcmRzW18rdl0pK0w7dmFyIHk9KDB8cy53b3Jkc1tfXSkqdTtMPSgoay09NjcxMDg4NjMmeSk+PjI2KS0oeS82NzEwODg2NHwwKSx0aGlzLndvcmRzW18rdl09NjcxMDg4NjMma31mb3IoO188dGhp''@;'; put 'put ''cy5sZW5ndGgtdjtfKyspTD0oaz0oMHx0aGlzLndvcmRzW18rdl0pK0wpPj4yNix0aGlzLndvcmRzW18rdl09NjcxMDg4NjMmaztpZigwPT09TClyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihvKC0xPT09TCksTD0wLF89MDtfPHRoaXMubGVuZ3RoO18rKylMPShrPS0oMHx0aGlzLndvcmRzW19d''@;'; put 'put ''KStMKT4+MjYsdGhpcy53b3Jkc1tfXT02NzEwODg2MyZrO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihzLHUpe3ZhciB2LHA9dGhpcy5jbG9uZSgpLF89cyxrPTB8Xy53b3Jkc1tfLmxlbmd0aC0xXTswIT0odj0yNi10''@;'; put 'put ''aGlzLl9jb3VudEJpdHMoaykpJiYoXz1fLnVzaGxuKHYpLHAuaXVzaGxuKHYpLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdKTt2YXIgbCx5PXAubGVuZ3RoLV8ubGVuZ3RoO2lmKCJtb2QiIT09dSl7KGw9bmV3IGYobnVsbCkpLmxlbmd0aD15KzEsbC53b3Jkcz1uZXcgQXJyYXkobC5sZW5ndGgp''@;'; put 'put ''O2Zvcih2YXIgYj0wO2I8bC5sZW5ndGg7YisrKWwud29yZHNbYl09MH12YXIgcT1wLmNsb25lKCkuX2lzaGxuc3VibXVsKF8sMSx5KTswPT09cS5uZWdhdGl2ZSYmKHA9cSxsJiYobC53b3Jkc1t5XT0xKSk7Zm9yKHZhciBHPXktMTtHPj0wO0ctLSl7dmFyIFE9NjcxMDg4NjQqKDB8cC53b3Jk''@;'; put 'put ''c1tfLmxlbmd0aCtHXSkrKDB8cC53b3Jkc1tfLmxlbmd0aCtHLTFdKTtmb3IoUT1NYXRoLm1pbihRL2t8MCw2NzEwODg2MykscC5faXNobG5zdWJtdWwoXyxRLEcpOzAhPT1wLm5lZ2F0aXZlOylRLS0scC5uZWdhdGl2ZT0wLHAuX2lzaGxuc3VibXVsKF8sMSxHKSxwLmlzWmVybygpfHwocC5u''@;'; put 'put ''ZWdhdGl2ZV49MSk7bCYmKGwud29yZHNbR109USl9cmV0dXJuIGwmJmwuc3RyaXAoKSxwLnN0cmlwKCksImRpdiIhPT11JiYwIT09diYmcC5pdXNocm4odikse2RpdjpsfHxudWxsLG1vZDpwfX0sZi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbyghcy5pc1plcm8o''@;'; put 'put ''KSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBmKDApLG1vZDpuZXcgZigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKHMsdSksIm1vZCIhPT11JiYocD1rLmRpdi5uZWcoKSksImRpdiIhPT11JiYoXz1rLm1vZC5uZWcoKSx2JiYwIT09''@;'; put 'put ''Xy5uZWdhdGl2ZSYmXy5pYWRkKHMpKSx7ZGl2OnAsbW9kOl99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmU/KGs9dGhpcy5kaXZtb2Qocy5uZWcoKSx1KSwibW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSx7ZGl2OnAsbW9kOmsubW9kfSk6dGhpcy5uZWdhdGl2ZSZzLm5lZ2F0''@;'; put 'put ''aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKHMubmVnKCksdSksImRpdiIhPT11JiYoXz1rLm1vZC5uZWcoKSx2JiYwIT09Xy5uZWdhdGl2ZSYmXy5pc3ViKHMpKSx7ZGl2OmsuZGl2LG1vZDpffSk6cy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHMpPDA/e2RpdjpuZXcgZigwKSxtb2Q6''@;'; put 'put ''dGhpc306MT09PXMubGVuZ3RoPyJkaXYiPT09dT97ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT11P3tkaXY6bnVsbCxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocy53b3Jkc1swXSksbW9kOm5ldyBmKHRoaXMubW9k''@;'; put 'put ''bihzLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocyx1KTt2YXIgcCxfLGt9LGYucHJvdG90eXBlLmRpdj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywiZGl2IiwhMSkuZGl2fSxmLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGl2bW9kKHMsIm1vZCIs''@;'; put 'put ''ITEpLm1vZH0sZi5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMCkubW9kfSxmLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihzKXt2YXIgdT10aGlzLmRpdm1vZChzKTtpZih1Lm1vZC5pc1plcm8oKSlyZXR1cm4gdS5kaXY7dmFyIHY9''@;'; put 'put ''MCE9PXUuZGl2Lm5lZ2F0aXZlP3UubW9kLmlzdWIocyk6dS5tb2QscD1zLnVzaHJuKDEpLF89cy5hbmRsbigxKSxrPXYuY21wKHApO3JldHVybiBrPDB8fDE9PT1fJiYwPT09az91LmRpdjowIT09dS5kaXYubmVnYXRpdmU/dS5kaXYuaXN1Ym4oMSk6dS5kaXYuaWFkZG4oMSl9LGYucHJvdG90''@;'; put 'put ''eXBlLm1vZG49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2Myk7Zm9yKHZhciB1PSgxPDwyNiklcyx2PTAscD10aGlzLmxlbmd0aC0xO3A+PTA7cC0tKXY9KHUqdisoMHx0aGlzLndvcmRzW3BdKSklcztyZXR1cm4gdn0sZi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2''@;'; put 'put ''Myk7Zm9yKHZhciB1PTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXt2YXIgcD0oMHx0aGlzLndvcmRzW3ZdKSs2NzEwODg2NCp1O3RoaXMud29yZHNbdl09cC9zfDAsdT1wJXN9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLmlkaXZuKHMpfSxmLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUpLG8oIXMuaXNaZXJvKCkpO3ZhciB1PXRoaXMsdj1zLmNsb25lKCk7dT0wIT09dS5uZWdhdGl2ZT91LnVtb2Qocyk6dS5jbG9uZSgpO2Zvcih2YXIgcD1uZXcgZigxKSxfPW5ldyBm''@;'; put 'put ''KDApLGs9bmV3IGYoMCksTD1uZXcgZigxKSx5PTA7dS5pc0V2ZW4oKSYmdi5pc0V2ZW4oKTspdS5pdXNocm4oMSksdi5pdXNocm4oMSksKyt5O2Zvcih2YXIgbD12LmNsb25lKCksYj11LmNsb25lKCk7IXUuaXNaZXJvKCk7KXtmb3IodmFyIHE9MCxHPTE7ISh1LndvcmRzWzBdJkcpJiZxPDI2''@;'; put 'put ''OysrcSxHPDw9MSk7aWYocT4wKWZvcih1Lml1c2hybihxKTtxLS0gPjA7KShwLmlzT2RkKCl8fF8uaXNPZGQoKSkmJihwLmlhZGQobCksXy5pc3ViKGIpKSxwLml1c2hybigxKSxfLml1c2hybigxKTtmb3IodmFyIFE9MCxwZT0xOyEodi53b3Jkc1swXSZwZSkmJlE8MjY7KytRLHBlPDw9MSk7''@;'; put 'put ''aWYoUT4wKWZvcih2Lml1c2hybihRKTtRLS0gPjA7KShrLmlzT2RkKCl8fEwuaXNPZGQoKSkmJihrLmlhZGQobCksTC5pc3ViKGIpKSxrLml1c2hybigxKSxMLml1c2hybigxKTt1LmNtcCh2KT49MD8odS5pc3ViKHYpLHAuaXN1YihrKSxfLmlzdWIoTCkpOih2LmlzdWIodSksay5pc3ViKHAp''@;'; put 'put ''LEwuaXN1YihfKSl9cmV0dXJue2E6ayxiOkwsZ2NkOnYuaXVzaGxuKHkpfX0sZi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUpLG8oIXMuaXNaZXJvKCkpO3ZhciBxLHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNs''@;'; put 'put ''b25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz12LmNsb25lKCk7dS5jbXBuKDEpPjAmJnYuY21wbigxKT4wOyl7Zm9yKHZhciBMPTAseT0xOyEodS53b3Jkc1swXSZ5KSYmTDwyNjsrK0wseTw8PTEpO2lmKEw+MClmb3IodS5pdXNocm4oTCk7TC0tID4wOylwLmlzT2RkKCkm''@;'; put 'put ''JnAuaWFkZChrKSxwLml1c2hybigxKTtmb3IodmFyIGw9MCxiPTE7ISh2LndvcmRzWzBdJmIpJiZsPDI2OysrbCxiPDw9MSk7aWYobD4wKWZvcih2Lml1c2hybihsKTtsLS0gPjA7KV8uaXNPZGQoKSYmXy5pYWRkKGspLF8uaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3Vi''@;'; put 'put ''KF8pKToodi5pc3ViKHUpLF8uaXN1YihwKSl9cmV0dXJuKHE9MD09PXUuY21wbigxKT9wOl8pLmNtcG4oMCk8MCYmcS5pYWRkKHMpLHF9LGYucHJvdG90eXBlLmdjZD1mdW5jdGlvbihzKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBzLmFicygpO2lmKHMuaXNaZXJvKCkpcmV0dXJuIHRoaXMu''@;'; put 'put ''YWJzKCk7dmFyIHU9dGhpcy5jbG9uZSgpLHY9cy5jbG9uZSgpO3UubmVnYXRpdmU9MCx2Lm5lZ2F0aXZlPTA7Zm9yKHZhciBwPTA7dS5pc0V2ZW4oKSYmdi5pc0V2ZW4oKTtwKyspdS5pdXNocm4oMSksdi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3UuaXNFdmVuKCk7KXUuaXVzaHJuKDEpO2Zv''@;'; put 'put ''cig7di5pc0V2ZW4oKTspdi5pdXNocm4oMSk7dmFyIF89dS5jbXAodik7aWYoXzwwKXt2YXIgaz11O3U9dix2PWt9ZWxzZSBpZigwPT09X3x8MD09PXYuY21wbigxKSlicmVhazt1LmlzdWIodil9cmV0dXJuIHYuaXVzaGxuKHApfSxmLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biB0aGlzLmVnY2QocykuYS51bW9kKHMpfSxmLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LGYucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24o''@;'; put 'put ''cyl7cmV0dXJuIHRoaXMud29yZHNbMF0mc30sZi5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMpO3ZhciB1PXMlMjYsdj0ocy11KS8yNixwPTE8PHU7aWYodGhpcy5sZW5ndGg8PXYpcmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl18''@;'; put 'put ''PXAsdGhpcztmb3IodmFyIF89cCxrPXY7MCE9PV8mJms8dGhpcy5sZW5ndGg7aysrKXt2YXIgTD0wfHRoaXMud29yZHNba107Xz0oTCs9Xyk+Pj4yNix0aGlzLndvcmRzW2tdPUwmPTY3MTA4ODYzfXJldHVybiAwIT09XyYmKHRoaXMud29yZHNba109Xyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxm''@;'; put 'put ''LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sZi5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihzKXt2YXIgdix1PXM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJnUpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpdj0xO2Vsc2V7dSYmKHM9LXMpLG8oczw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHA9MHx0aGlzLndvcmRzWzBdO3Y9cD09PXM/MDpwPHM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''MHwtdjp2fSxmLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgdT10aGlzLnVjbXAocyk7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPzB8LXU6dX0sZi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihzKXtpZih0aGlzLmxlbmd0aD5zLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxzLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPTB8dGhpcy53b3Jk''@;'; put 'put ''c1t2XSxfPTB8cy53b3Jkc1t2XTtpZihwIT09Xyl7cDxfP3U9LTE6cD5fJiYodT0xKTticmVha319cmV0dXJuIHV9LGYucHJvdG90eXBlLmd0bj1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIDE9PT10aGlzLmNt''@;'; put 'put ''cChzKX0sZi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPj0wfSxmLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPj0wfSxmLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocyl9LGYu''@;'; put 'put ''cHJvdG90eXBlLmx0PWZ1bmN0aW9uKHMpe3JldHVybi0xPT09dGhpcy5jbXAocyl9LGYucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wbihzKTw9MH0sZi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcChzKTw9MH0sZi5wcm90b3R5cGUu''@;'; put 'put ''ZXFuPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5lcT1mdW5jdGlvbihzKXtyZXR1cm4gMD09PXRoaXMuY21wKHMpfSxmLnJlZD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IG1lKHMpfSxmLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihzKXtyZXR1cm4g''@;'; put 'put ''byghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxvKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChzKX0sZi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBvKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGYucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5yZWQ9cyx0aGlzfSxm''@;'; put 'put ''LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChzKX0sZi5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRB''@;'; put 'put ''ZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHMp''@;'; put 'put ''fSxmLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVk''@;'; put 'put ''SVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHMp''@;'; put 'put ''fSxmLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLm11bCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxzKSx0aGlzLnJlZC5pbXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXIg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sZi5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNx''@;'; put 'put ''cnQodGhpcyl9LGYucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxmLnByb3RvdHlwZS5yZWROZWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sZi5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkJiYhcy5yZWQs''@;'; put 'put ''InJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscyl9O3ZhciBLPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gWChSLHMpe3RoaXMubmFtZT1SLHRoaXMucD1uZXcgZihzLDE2KSx0''@;'; put 'put ''aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgZigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbmUoKXtYLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gc2UoKXtYLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gaGUoKXtYLmNhbGwodGhpcywicDE5MiIs''@;'; put 'put ''ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gX2UoKXtYLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVu''@;'; put 'put ''Y3Rpb24gbWUoUil7aWYoInN0cmluZyI9PXR5cGVvZiBSKXt2YXIgcz1mLl9wcmltZShSKTt0aGlzLm09cy5wLHRoaXMucHJpbWU9c31lbHNlIG8oUi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1SLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGZShS''@;'; put 'put ''KXttZS5jYWxsKHRoaXMsUiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgZigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0''@;'; put 'put ''aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1YLnByb3RvdHlwZS5fdG1w''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJuIHMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxzfSxYLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHMpe3ZhciB2LHU9cztkb3t0aGlzLnNwbGl0KHUsdGhpcy50bXApLHY9KHU9KHU9dGhpcy5pbXVs''@;'; put 'put ''Syh1KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHY+dGhpcy5uKTt2YXIgcD12PHRoaXMubj8tMTp1LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXA/KHUud29yZHNbMF09MCx1Lmxlbmd0aD0xKTpwPjA/dS5pc3ViKHRoaXMucCk6dm9pZCAwIT09dS5zdHJpcD91LnN0cmlw''@;'; put 'put ''KCk6dS5fc3RyaXAoKSx1fSxYLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihzLHUpe3MuaXVzaHJuKHRoaXMubiwwLHUpfSxYLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtyZXR1cm4gcy5pbXVsKHRoaXMuayl9LEkobmUsWCksbmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7''@;'; put 'put ''Zm9yKHZhciB2PTQxOTQzMDMscD1NYXRoLm1pbihzLmxlbmd0aCw5KSxfPTA7XzxwO18rKyl1LndvcmRzW19dPXMud29yZHNbX107aWYodS5sZW5ndGg9cCxzLmxlbmd0aDw9OSlyZXR1cm4gcy53b3Jkc1swXT0wLHZvaWQocy5sZW5ndGg9MSk7dmFyIGs9cy53b3Jkc1s5XTtmb3IodS53b3Jk''@;'; put 'put ''c1t1Lmxlbmd0aCsrXT1rJnYsXz0xMDtfPHMubGVuZ3RoO18rKyl7dmFyIEw9MHxzLndvcmRzW19dO3Mud29yZHNbXy0xMF09KEwmdik8PDR8az4+PjIyLGs9TH1zLndvcmRzW18tMTBdPWs+Pj49MjIscy5sZW5ndGgtPTA9PT1rJiZzLmxlbmd0aD4xMD8xMDo5fSxuZS5wcm90b3R5cGUuaW11''@;'; put 'put ''bEs9ZnVuY3Rpb24ocyl7cy53b3Jkc1tzLmxlbmd0aF09MCxzLndvcmRzW3MubGVuZ3RoKzFdPTAscy5sZW5ndGgrPTI7Zm9yKHZhciB1PTAsdj0wO3Y8cy5sZW5ndGg7disrKXt2YXIgcD0wfHMud29yZHNbdl07cy53b3Jkc1t2XT02NzEwODg2MyYodSs9OTc3KnApLHU9NjQqcCsodS82NzEw''@;'; put 'put ''ODg2NHwwKX1yZXR1cm4gMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJihzLmxlbmd0aC0tLDA9PT1zLndvcmRzW3MubGVuZ3RoLTFdJiZzLmxlbmd0aC0tKSxzfSxJKHNlLFgpLEkoaGUsWCksSShfZSxYKSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PTAsdj0wO3Y8''@;'; put 'put ''cy5sZW5ndGg7disrKXt2YXIgcD0xOSooMHxzLndvcmRzW3ZdKSt1LF89NjcxMDg4NjMmcDtwPj4+PTI2LHMud29yZHNbdl09Xyx1PXB9cmV0dXJuIDAhPT11JiYocy53b3Jkc1tzLmxlbmd0aCsrXT11KSxzfSxmLl9wcmltZT1mdW5jdGlvbihzKXtpZihLW3NdKXJldHVybiBLW3NdO3ZhciB1''@;'; put 'put ''O2lmKCJrMjU2Ij09PXMpdT1uZXcgbmU7ZWxzZSBpZigicDIyNCI9PT1zKXU9bmV3IHNlO2Vsc2UgaWYoInAxOTIiPT09cyl1PW5ldyBoZTtlbHNle2lmKCJwMjU1MTkiIT09cyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitzKTt1PW5ldyBfZX1yZXR1cm4gS1tzXT11LHV9LG1l''@;'; put 'put ''LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihzKXtvKDA9PT1zLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8ocy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sbWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHMsdSl7bygh''@;'; put 'put ''KHMubmVnYXRpdmV8dS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCYmcy5yZWQ9PT11LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5wcmltZT90''@;'; put 'put ''aGlzLnByaW1lLmlyZWR1Y2UocykuX2ZvcmNlUmVkKHRoaXMpOnMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihzKXtyZXR1cm4gcy5pc1plcm8oKT9zLmNsb25lKCk6dGhpcy5tLnN1YihzKS5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3Rv''@;'; put 'put ''dHlwZS5hZGQ9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5hZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1Yih0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1''@;'; put 'put ''KTt2YXIgdj1zLmlhZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1Yih0aGlzLm0pLHZ9LG1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5zdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5tKSx2Ll9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5pc3ViKHUpO3JldHVybiB2LmNtcG4oMCk8MCYmdi5pYWRkKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkxKHMpLHRoaXMuaW1vZChzLnVzaGxuKHUpKX0sbWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChzLmltdWwodSkpfSxtZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''cyx1KSx0aGlzLmltb2Qocy5tdWwodSkpfSxtZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5pbXVsKHMscy5jbG9uZSgpKX0sbWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5tdWwocyxzKX0sbWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24o''@;'; put 'put ''cyl7aWYocy5pc1plcm8oKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciB1PXRoaXMubS5hbmRsbigzKTtpZihvKHUlMj09MSksMz09PXUpe3ZhciB2PXRoaXMubS5hZGQobmV3IGYoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocyx2KX1mb3IodmFyIHA9dGhpcy5tLnN1Ym4oMSksXz0wOyFw''@;'; put 'put ''LmlzWmVybygpJiYwPT09cC5hbmRsbigxKTspXysrLHAuaXVzaHJuKDEpO28oIXAuaXNaZXJvKCkpO3ZhciBrPW5ldyBmKDEpLnRvUmVkKHRoaXMpLEw9ay5yZWROZWcoKSx5PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxsPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobD1uZXcgZigyKmwqbCku''@;'; put 'put ''dG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGwseSkuY21wKEwpOylsLnJlZElBZGQoTCk7Zm9yKHZhciBiPXRoaXMucG93KGwscCkscT10aGlzLnBvdyhzLHAuYWRkbigxKS5pdXNocm4oMSkpLEc9dGhpcy5wb3cocyxwKSxRPV87MCE9PUcuY21wKGspOyl7Zm9yKHZhciBwZT1HLFBlPTA7MCE9''@;'; put 'put ''PXBlLmNtcChrKTtQZSsrKXBlPXBlLnJlZFNxcigpO28oUGU8USk7dmFyIFplPXRoaXMucG93KGIsbmV3IGYoMSkuaXVzaGxuKFEtUGUtMSkpO3E9cS5yZWRNdWwoWmUpLGI9WmUucmVkU3FyKCksRz1HLnJlZE11bChiKSxRPVBlfXJldHVybiBxfSxtZS5wcm90b3R5cGUuaW52bT1mdW5jdGlv''@;'; put 'put ''bihzKXt2YXIgdT1zLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09dS5uZWdhdGl2ZT8odS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh1KS5yZWROZWcoKSk6dGhpcy5pbW9kKHUpfSxtZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHMsdSl7aWYodS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMSkudG9S''@;'; put 'put ''ZWQodGhpcyk7aWYoMD09PXUuY21wbigxKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciBwPW5ldyBBcnJheSgxNik7cFswXT1uZXcgZigxKS50b1JlZCh0aGlzKSxwWzFdPXM7Zm9yKHZhciBfPTI7XzxwLmxlbmd0aDtfKyspcFtfXT10aGlzLm11bChwW18tMV0scyk7dmFyIGs9cFswXSxMPTAseT0w''@;'; put 'put ''LGw9dS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxfPXUubGVuZ3RoLTE7Xz49MDtfLS0pe2Zvcih2YXIgYj11LndvcmRzW19dLHE9bC0xO3E+PTA7cS0tKXt2YXIgRz1iPj5xJjE7ayE9PXBbMF0mJihrPXRoaXMuc3FyKGspKSwwIT09R3x8MCE9PUw/KEw8PD0xLEx8PUcsKDQ9''@;'; put 'put ''PSsreXx8MD09PV8mJjA9PT1xKSYmKGs9dGhpcy5tdWwoayxwW0xdKSx5PTAsTD0wKSk6eT0wfWw9MjZ9cmV0dXJuIGt9LG1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7dmFyIHU9cy51bW9kKHRoaXMubSk7cmV0dXJuIHU9PT1zP3UuY2xvbmUoKTp1fSxtZS5wcm90b3R5cGUu''@;'; put 'put ''Y29udmVydEZyb209ZnVuY3Rpb24ocyl7dmFyIHU9cy5jbG9uZSgpO3JldHVybiB1LnJlZD1udWxsLHV9LGYubW9udD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IEZlKHMpfSxJKEZlLG1lKSxGZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltb2Qocy51c2hs''@;'; put 'put ''bih0aGlzLnNoaWZ0KSl9LEZlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT10aGlzLmltb2Qocy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHUucmVkPW51bGwsdX0sRmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygp''@;'; put 'put ''KXJldHVybiBzLndvcmRzWzBdPTAscy5sZW5ndGg9MSxzO3ZhciB2PXMuaW11bCh1KSxwPXYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLF89di5pc3ViKHApLml1c2hybih0aGlzLnNoaWZ0KSxrPV87cmV0dXJuIF8uY21w''@;'; put 'put ''KHRoaXMubSk+PTA/az1fLmlzdWIodGhpcy5tKTpfLmNtcG4oMCk8MCYmKGs9Xy5pYWRkKHRoaXMubSkpLGsuX2ZvcmNlUmVkKHRoaXMpfSxGZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMsdSl7aWYocy5pc1plcm8oKXx8dS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMCkuX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpO3ZhciB2PXMubXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8u''@;'; put 'put ''Y21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltb2Qocy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHRlPWQubm1kKHRlKSx0aGlzKX0s''@;'; put 'put ''OTc0Njp0ZT0+e2Z1bmN0aW9uIGooZCxTKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoU3x8IkFzc2VydGlvbiBmYWlsZWQiKX10ZS5leHBvcnRzPWosai5lcXVhbD1mdW5jdGlvbihTLGgsbyl7aWYoUyE9aCl0aHJvdyBuZXcgRXJyb3Iob3x8IkFzc2VydGlvbiBmYWlsZWQ6ICIrUysiICE9ICIr''@;'; put 'put ''aCl9fSw0NTA0Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZD1qO2Z1bmN0aW9uIGgoSSl7cmV0dXJuIDE9PT1JLmxlbmd0aD8iMCIrSTpJfWZ1bmN0aW9uIG8oSSl7Zm9yKHZhciBmPSIiLFQ9MDtUPEkubGVuZ3RoO1QrKylmKz1oKElbVF0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZn1kLnRv''@;'; put 'put ''QXJyYXk9ZnVuY3Rpb24gUyhJLGYpe2lmKEFycmF5LmlzQXJyYXkoSSkpcmV0dXJuIEkuc2xpY2UoKTtpZighSSlyZXR1cm5bXTt2YXIgVD1bXTtpZigic3RyaW5nIiE9dHlwZW9mIEkpe2Zvcih2YXIgQT0wO0E8SS5sZW5ndGg7QSsrKVRbQV09MHxJW0FdO3JldHVybiBUfWlmKCJoZXgiPT09''@;'; put 'put ''Zilmb3IoKEk9SS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihJPSIwIitJKSxBPTA7QTxJLmxlbmd0aDtBKz0yKVQucHVzaChwYXJzZUludChJW0FdK0lbQSsxXSwxNikpO2Vsc2UgZm9yKEE9MDtBPEkubGVuZ3RoO0ErKyl7dmFyIE09SS5jaGFyQ29kZUF0KEEp''@;'; put 'put ''LE89TT4+OCxEPTI1NSZNO08/VC5wdXNoKE8sRCk6VC5wdXNoKEQpfXJldHVybiBUfSxkLnplcm8yPWgsZC50b0hleD1vLGQuZW5jb2RlPWZ1bmN0aW9uKGYsVCl7cmV0dXJuImhleCI9PT1UP28oZik6Zn19LDQyNDQ6dGU9PnsidXNlIHN0cmljdCI7dmFyIGo9ZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IGQhPWR9O3RlLmV4cG9ydHM9ZnVuY3Rpb24oUyxoKXtyZXR1cm4gMD09PVMmJjA9PT1oPzEvUz09MS9oOiEhKFM9PT1ofHxqKFMpJiZqKGgpKX19LDYwOToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQyODkpLGg9ZCg1NTU5KSxvPWQoNDI0NCksST1kKDU2MjQpLGY9ZCgyMjgx''@;'; put 'put ''KSxUPWgoSSgpLE9iamVjdCk7UyhULHtnZXRQb2x5ZmlsbDpJLGltcGxlbWVudGF0aW9uOm8sc2hpbTpmfSksdGUuZXhwb3J0cz1UfSw1NjI0Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDI0NCk7dGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBPYmplY3QuaXM/T2JqZWN0LmlzOlN9fSwyMjgxOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNTYyNCksaD1kKDQyODkpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1TKCk7cmV0dXJuIGgoT2JqZWN0LHtpczpJfSx7aXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0Lmlz''@;'; put 'put ''IT09SX19KSxJfX0sODk4NzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUztpZighT2JqZWN0LmtleXMpe3ZhciBoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEk9ZCgxNDE0KSxmPU9iamVjdC5wcm90b3R5cGUucHJvcGVy''@;'; put 'put ''dHlJc0VudW1lcmFibGUsVD0hZi5jYWxsKHt0b1N0cmluZzpudWxsfSwidG9TdHJpbmciKSxBPWYuY2FsbChmdW5jdGlvbigpe30sInByb3RvdHlwZSIpLE09WyJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInBy''@;'; put 'put ''b3BlcnR5SXNFbnVtZXJhYmxlIiwiY29uc3RydWN0b3IiXSxPPWZ1bmN0aW9uKEYpe3ZhciBOPUYuY29uc3RydWN0b3I7cmV0dXJuIE4mJk4ucHJvdG90eXBlPT09Rn0sRD17JGFwcGxpY2F0aW9uQ2FjaGU6ITAsJGNvbnNvbGU6ITAsJGV4dGVybmFsOiEwLCRmcmFtZTohMCwkZnJhbWVFbGVt''@;'; put 'put ''ZW50OiEwLCRmcmFtZXM6ITAsJGlubmVySGVpZ2h0OiEwLCRpbm5lcldpZHRoOiEwLCRvbm1vemZ1bGxzY3JlZW5jaGFuZ2U6ITAsJG9ubW96ZnVsbHNjcmVlbmVycm9yOiEwLCRvdXRlckhlaWdodDohMCwkb3V0ZXJXaWR0aDohMCwkcGFnZVhPZmZzZXQ6ITAsJHBhZ2VZT2Zmc2V0OiEwLCRw''@;'; put 'put ''YXJlbnQ6ITAsJHNjcm9sbExlZnQ6ITAsJHNjcm9sbFRvcDohMCwkc2Nyb2xsWDohMCwkc2Nyb2xsWTohMCwkc2VsZjohMCwkd2Via2l0SW5kZXhlZERCOiEwLCR3ZWJraXRTdG9yYWdlSW5mbzohMCwkd2luZG93OiEwfSxFPWZ1bmN0aW9uKCl7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJu''@;'; put 'put ''ITE7Zm9yKHZhciBGIGluIHdpbmRvdyl0cnl7aWYoIURbIiQiK0ZdJiZoLmNhbGwod2luZG93LEYpJiZudWxsIT09d2luZG93W0ZdJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvd1tGXSl0cnl7Tyh3aW5kb3dbRl0pfWNhdGNoe3JldHVybiEwfX1jYXRjaHtyZXR1cm4hMH1yZXR1cm4hMX0oKTtT''@;'; put 'put ''PWZ1bmN0aW9uKE4pe3ZhciBIPW51bGwhPT1OJiYib2JqZWN0Ij09dHlwZW9mIE4sej0iW29iamVjdCBGdW5jdGlvbl0iPT09by5jYWxsKE4pLFo9SShOKSxVPUgmJiJbb2JqZWN0IFN0cmluZ10iPT09by5jYWxsKE4pLEs9W107aWYoIUgmJiF6JiYhWil0aHJvdyBuZXcgVHlwZUVycm9yKCJP''@;'; put 'put ''YmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIFg9QSYmejtpZihVJiZOLmxlbmd0aD4wJiYhaC5jYWxsKE4sMCkpZm9yKHZhciBuZT0wO25lPE4ubGVuZ3RoOysrbmUpSy5wdXNoKFN0cmluZyhuZSkpO2lmKFomJk4ubGVuZ3RoPjApZm9yKHZhciBzZT0wO3NlPE4ubGVu''@;'; put 'put ''Z3RoOysrc2UpSy5wdXNoKFN0cmluZyhzZSkpO2Vsc2UgZm9yKHZhciBoZSBpbiBOKSghWHx8InByb3RvdHlwZSIhPT1oZSkmJmguY2FsbChOLGhlKSYmSy5wdXNoKFN0cmluZyhoZSkpO2lmKFQpZm9yKHZhciBfZT1mdW5jdGlvbihGKXtpZih0eXBlb2Ygd2luZG93PiJ1Inx8IUUpcmV0dXJu''@;'; put 'put ''IE8oRik7dHJ5e3JldHVybiBPKEYpfWNhdGNoe3JldHVybiExfX0oTiksbWU9MDttZTxNLmxlbmd0aDsrK21lKSghX2V8fCJjb25zdHJ1Y3RvciIhPT1NW21lXSkmJmguY2FsbChOLE1bbWVdKSYmSy5wdXNoKE1bbWVdKTtyZXR1cm4gS319dGUuZXhwb3J0cz1TfSwyMjE1Oih0ZSxqLGQpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBTPUFycmF5LnByb3RvdHlwZS5zbGljZSxoPWQoMTQxNCksbz1PYmplY3Qua2V5cyxJPW8/ZnVuY3Rpb24oQSl7cmV0dXJuIG8oQSl9OmQoODk4NyksZj1PYmplY3Qua2V5cztJLnNoaW09ZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyl7dmFyIEE9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTT1PYmplY3Qua2V5cyhhcmd1bWVudHMpO3JldHVybiBNJiZNLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5ndGh9KDEsMik7QXx8KE9iamVjdC5rZXlzPWZ1bmN0aW9uKE8pe3JldHVybiBoKE8pP2YoUy5jYWxsKE8pKTpmKE8pfSl9ZWxzZSBPYmplY3Qua2V5cz1JO3JldHVybiBPYmpl''@;'; put 'put ''Y3Qua2V5c3x8SX0sdGUuZXhwb3J0cz1JfSwxNDE0OnRlPT57InVzZSBzdHJpY3QiO3ZhciBqPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dGUuZXhwb3J0cz1mdW5jdGlvbihTKXt2YXIgaD1qLmNhbGwoUyksbz0iW29iamVjdCBBcmd1bWVudHNdIj09PWg7cmV0dXJuIG98fChvPSJbb2Jq''@;'; put 'put ''ZWN0IEFycmF5XSIhPT1oJiZudWxsIT09UyYmIm9iamVjdCI9PXR5cGVvZiBTJiYibnVtYmVyIj09dHlwZW9mIFMubGVuZ3RoJiZTLmxlbmd0aD49MCYmIltvYmplY3QgRnVuY3Rpb25dIj09PWouY2FsbChTLmNhbGxlZSkpLG99fSwyODM3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBT''@;'; put 'put ''PWQoMjIxNSksaD1kKDU0MTkpKCksbz1kKDczNzkpLEk9ZCg4ODkyKSxmPW8oIkFycmF5LnByb3RvdHlwZS5wdXNoIiksVD1vKCJPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlIiksQT1oP0kuZ2V0T3duUHJvcGVydHlTeW1ib2xzOm51bGw7dGUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihPLEQpe2lmKG51bGw9PU8pdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dmFyIEU9SShPKTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gRTtmb3IodmFyIEI9MTtCPGFyZ3VtZW50cy5sZW5ndGg7KytCKXt2YXIgRj1JKGFyZ3VtZW50c1tC''@;'; put 'put ''XSksTj1TKEYpLEg9aCYmKEkuZ2V0T3duUHJvcGVydHlTeW1ib2xzfHxBKTtpZihIKWZvcih2YXIgej1IKEYpLFo9MDtaPHoubGVuZ3RoOysrWil7dmFyIFU9eltaXTtUKEYsVSkmJmYoTixVKX1mb3IodmFyIEs9MDtLPE4ubGVuZ3RoOysrSyl7dmFyIFg9TltLXTtUKEYsWCkmJihFW1hdPUZb''@;'; put 'put ''WF0pfX1yZXR1cm4gRX19LDgxNjI6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM3KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7Zm9yKHZhciBJPSJhYmNkZWZnaGlqa2xt''@;'; put 'put ''bm9wcXJzdCIsZj1JLnNwbGl0KCIiKSxUPXt9LEE9MDtBPGYubGVuZ3RoOysrQSlUW2ZbQV1dPWZbQV07dmFyIE09T2JqZWN0LmFzc2lnbih7fSxUKSxPPSIiO2Zvcih2YXIgRCBpbiBNKU8rPUQ7cmV0dXJuIEkhPT1PfSgpfHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWdufHwhT2JqZWN0''@;'; put 'put ''LnByZXZlbnRFeHRlbnNpb25zKXJldHVybiExO3ZhciBJPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7MToyfSk7dHJ5e09iamVjdC5hc3NpZ24oSSwieHkiKX1jYXRjaHtyZXR1cm4ieSI9PT1JWzFdfXJldHVybiExfSgpP1M6T2JqZWN0LmFzc2lnbn19LDc0MzU6KHRlLGopPT57ai5lbmRp''@;'; put 'put ''YW5uZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIkxFIn0sai5ob3N0bmFtZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbG9jYXRpb248InUiP2xvY2F0aW9uLmhvc3RuYW1lOiIifSxqLmxvYWRhdmc9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sai51cHRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sai5m''@;'; put 'put ''cmVlbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LGoudG90YWxtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sai5jcHVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGoudHlwZT1mdW5jdGlvbigpe3JldHVybiJCcm93c2VyIn0sai5yZWxlYXNlPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiP25hdmlnYXRvci5hcHBWZXJzaW9uOiIifSxqLm5ldHdvcmtJbnRlcmZhY2VzPWouZ2V0TmV0d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sai5hcmNoPWZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQifSxq''@;'; put 'put ''LnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0dXJuImJyb3dzZXIifSxqLnRtcGRpcj1qLnRtcERpcj1mdW5jdGlvbigpe3JldHVybiIvdG1wIn0sai5FT0w9IlxuIixqLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSwyODE4Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoOTgw''@;'; put 'put ''OSk7ai5jZXJ0aWZpY2F0ZT1kKDE5MzQpO3ZhciBoPVMuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQo''@;'; put 'put ''KSx0aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIp''@;'; put 'put ''LmludCgpKX0pO2ouUlNBUHJpdmF0ZUtleT1oO3ZhciBvPVMuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtqLlJTQVB1YmxpY0tleT1vO3Zh''@;'; put 'put ''ciBJPVMuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0''@;'; put 'put ''aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLGY9Uy5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRo''@;'; put 'put ''aXMua2V5KCJhbGdvcml0aG0iKS51c2UoSSksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtqLlB1YmxpY0tleT1mO3ZhciBUPVMuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgp''@;'; put 'put ''LHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoSSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7ai5Qcml2YXRlS2V5PVQ7dmFyIEE9Uy5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJh''@;'; put 'put ''bGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgi''@;'; put 'put ''c2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7''@;'; put 'put ''ai5FbmNyeXB0ZWRQcml2YXRlS2V5PUE7dmFyIE09Uy5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQo''@;'; put 'put ''KSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO2ouRFNBUHJpdmF0ZUtleT1NLGouRFNBcGFyYW09Uy5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgTz1TLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5j''@;'; put 'put ''dGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksRD1TLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtl''@;'; put 'put ''eSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKE8pLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO2ouRUNQcml2YXRlS2V5PUQsai5zaWduYXR1cmU9Uy5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDE5MzQ6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg5ODA5KSxoPVMuZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgp''@;'; put 'put ''LGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxvPVMuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLEk9Uy5kZWZpbmUoIkFsZ29yaXRobUlk''@;'; put 'put ''ZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSxmPVMuZGVmaW5lKCJTdWJqZWN0UHVibGlj''@;'; put 'put ''S2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEkpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksVD1TLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9m''@;'; put 'put ''KG8pfSksQT1TLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihUKX0pLE09Uy5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKEEpfSl9KSxPPVMuZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlz''@;'; put 'put ''LnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKGgpLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShoKSl9KSxEPVMuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2Fs''@;'; put 'put ''IikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLEU9Uy5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgi''@;'; put 'put ''c2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShJKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKE0pLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZShPKSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShNKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51''@;'; put 'put ''c2UoZiksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9m''@;'; put 'put ''KEQpLm9wdGlvbmFsKCkpfSksQj1TLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShFKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKEkpLHRoaXMua2V5KCJzaWduYXR1cmVW''@;'; put 'put ''YWx1ZSIpLmJpdHN0cigpKX0pO3RlLmV4cG9ydHM9Qn0sNzYzMToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05''@;'; put 'put ''QS16XG5ccisvPV0rKVtcblxyXSsvbSxoPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxvPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLEk9ZCgzMDQ4KSxm''@;'; put 'put ''PWQoNDY5NiksVD1kKDk1MDkpLkJ1ZmZlcjt0ZS5leHBvcnRzPWZ1bmN0aW9uKEEsTSl7dmFyIEUsTz1BLnRvU3RyaW5nKCksRD1PLm1hdGNoKFMpO2lmKEQpe3ZhciBGPSJhZXMiK0RbMV0sTj1ULmZyb20oRFsyXSwiaGV4IiksSD1ULmZyb20oRFszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiks''@;'; put 'put ''ImJhc2U2NCIpLHo9SShNLE4uc2xpY2UoMCw4KSxwYXJzZUludChEWzFdLDEwKSkua2V5LFo9W10sVT1mLmNyZWF0ZURlY2lwaGVyaXYoRix6LE4pO1oucHVzaChVLnVwZGF0ZShIKSksWi5wdXNoKFUuZmluYWwoKSksRT1ULmNvbmNhdChaKX1lbHNle3ZhciBCPU8ubWF0Y2gobyk7RT1ULmZy''@;'; put 'put ''b20oQlsyXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6Ty5tYXRjaChoKVsxXSxkYXRhOkV9fX0sOTgwOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgxOCksaD1kKDI1NjIpLG89ZCg3NjMxKSxJPWQoNDY5NiksZj1kKDU2MzIpLFQ9ZCg5NTA5''@;'; put 'put ''KS5CdWZmZXI7ZnVuY3Rpb24gTShPKXt2YXIgRDsib2JqZWN0Ij09dHlwZW9mIE8mJiFULmlzQnVmZmVyKE8pJiYoRD1PLnBhc3NwaHJhc2UsTz1PLmtleSksInN0cmluZyI9PXR5cGVvZiBPJiYoTz1ULmZyb20oTykpO3ZhciBOLEgsRT1vKE8sRCksQj1FLnRhZyxGPUUuZGF0YTtzd2l0Y2go''@;'; put 'put ''Qil7Y2FzZSJDRVJUSUZJQ0FURSI6SD1TLmNlcnRpZmljYXRlLmRlY29kZShGLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChIfHwoSD1TLlB1YmxpY0tleS5kZWNvZGUoRiwiZGVyIikpLE49SC5hbGdvcml0aG0uYWxn''@;'; put 'put ''b3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIFMuUlNBUHVibGljS2V5LmRlY29kZShILnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIEguc3ViamVjdFByaXZhdGVLZXk9SC5zdWJqZWN0''@;'; put 'put ''UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpIfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gSC5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9Uy5EU0FwYXJhbS5kZWNvZGUoSC5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6SC5hbGdvcml0aG0u''@;'; put 'put ''cGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitOKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRFIEtFWSI6Rj1mdW5jdGlvbiBBKE8sRCl7dmFyIEU9Ty5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsQj1wYXJzZUludChPLmFsZ29yaXRo''@;'; put 'put ''bS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksRj1oW08uYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxOPU8uYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LEg9Ty5zdWJqZWN0UHJpdmF0ZUtleSx6PXBhcnNlSW50KEYuc3BsaXQo''@;'; put 'put ''Ii0iKVsxXSwxMCkvOCxaPWYucGJrZGYyU3luYyhELEUsQix6LCJzaGExIiksVT1JLmNyZWF0ZURlY2lwaGVyaXYoRixaLE4pLEs9W107cmV0dXJuIEsucHVzaChVLnVwZGF0ZShIKSksSy5wdXNoKFUuZmluYWwoKSksVC5jb25jYXQoSyl9KEY9Uy5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29k''@;'; put 'put ''ZShGLCJkZXIiKSxEKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goTj0oSD1TLlByaXZhdGVLZXkuZGVjb2RlKEYsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIFMuUlNBUHJpdmF0ZUtleS5kZWNvZGUoSC5z''@;'; put 'put ''dWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOkguYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6Uy5FQ1ByaXZhdGVLZXkuZGVjb2RlKEguc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4x''@;'; put 'put ''MDA0MC40LjEiOnJldHVybiBILmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9Uy5EU0FwYXJhbS5kZWNvZGUoSC5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOkguYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5''@;'; put 'put ''IGlkICIrTil9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIFMuUlNBUHVibGljS2V5LmRlY29kZShGLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIFMuUlNBUHJpdmF0ZUtleS5kZWNvZGUoRiwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJk''@;'; put 'put ''c2EiLHBhcmFtczpTLkRTQVByaXZhdGVLZXkuZGVjb2RlKEYsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KEY9Uy5FQ1ByaXZhdGVLZXkuZGVjb2RlKEYsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6Ri5wcml2YXRlS2V5fTtkZWZhdWx0OnRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK0IpfX1NLnNpZ25hdHVyZT1TLnNpZ25hdHVyZSx0ZS5leHBvcnRzPU19LDE3MjU6dGU9Pnt0ZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGQsUyl7ZC5zdXBlcl89UyxkLnByb3RvdHlw''@;'; put 'put ''ZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oZCxTKXtkLnN1cGVyXz1TO3ZhciBoPWZ1bmN0aW9uKCl7fTtoLnByb3RvdHlwZT1TLnByb3RvdHlwZSxk''@;'; put 'put ''LnByb3RvdHlwZT1uZXcgaCxkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kfX0sMjk3NDp0ZT0+e3RlLmV4cG9ydHM9ZnVuY3Rpb24oZCl7cmV0dXJuIGQmJiJvYmplY3QiPT10eXBlb2YgZCYmImZ1bmN0aW9uIj09dHlwZW9mIGQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIGQuZmlsbCYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGQucmVhZFVJbnQ4fX0sODA1OToodGUsaixkKT0+e3ZhciBTPWQoNDE1NSksaD1kKDUxMDgpLG89LyVbc2RqJV0vZztqLmZvcm1hdD1mdW5jdGlvbih5KXtpZighbmUoeSkpe2Zvcih2YXIgbD1bXSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKylsLnB1c2goVChh''@;'; put 'put ''cmd1bWVudHNbYl0pKTtyZXR1cm4gbC5qb2luKCIgIil9Yj0xO2Zvcih2YXIgcT1hcmd1bWVudHMsRz1xLmxlbmd0aCxRPVN0cmluZyh5KS5yZXBsYWNlKG8sZnVuY3Rpb24oUGUpe2lmKCIlJSI9PT1QZSlyZXR1cm4iJSI7aWYoYj49RylyZXR1cm4gUGU7c3dpdGNoKFBlKXtjYXNlIiVzIjpy''@;'; put 'put ''ZXR1cm4gU3RyaW5nKHFbYisrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihxW2IrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocVtiKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gUGV9fSkscGU9cVtiXTtiPEc7cGU9cVsrK2JdKVUo''@;'; put 'put ''cGUpfHwhbWUocGUpP1ErPSIgIitwZTpRKz0iICIrVChwZSk7cmV0dXJuIFF9LGouZGVwcmVjYXRlPWZ1bmN0aW9uKHksbCl7aWYoaGUoZC5nLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBqLmRlcHJlY2F0ZSh5LGwpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1T''@;'; put 'put ''Lm5vRGVwcmVjYXRpb24pcmV0dXJuIHk7dmFyIGI9ITE7cmV0dXJuIGZ1bmN0aW9uIHEoKXtpZighYil7aWYoUy50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihsKTtTLnRyYWNlRGVwcmVjYXRpb24/aC50cmFjZShsKTpoLmVycm9yKGwpLGI9ITB9cmV0dXJuIHkuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfX07dmFyIGYsST17fTtmdW5jdGlvbiBUKHksbCl7dmFyIGI9e3NlZW46W10sc3R5bGl6ZTpNfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKGIuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoYi5jb2xvcnM9YXJndW1lbnRzWzNdKSxa''@;'; put 'put ''KGwpP2Iuc2hvd0hpZGRlbj1sOmwmJmouX2V4dGVuZChiLGwpLGhlKGIuc2hvd0hpZGRlbikmJihiLnNob3dIaWRkZW49ITEpLGhlKGIuZGVwdGgpJiYoYi5kZXB0aD0yKSxoZShiLmNvbG9ycykmJihiLmNvbG9ycz0hMSksaGUoYi5jdXN0b21JbnNwZWN0KSYmKGIuY3VzdG9tSW5zcGVjdD0h''@;'; put 'put ''MCksYi5jb2xvcnMmJihiLnN0eWxpemU9QSksRChiLHksYi5kZXB0aCl9ZnVuY3Rpb24gQSh5LGwpe3ZhciBiPVQuc3R5bGVzW2xdO3JldHVybiBiPyJceDFiWyIrVC5jb2xvcnNbYl1bMF0rIm0iK3krIlx4MWJbIitULmNvbG9yc1tiXVsxXSsibSI6eX1mdW5jdGlvbiBNKHksbCl7cmV0dXJu''@;'; put 'put ''IHl9ZnVuY3Rpb24gRCh5LGwsYil7aWYoeS5jdXN0b21JbnNwZWN0JiZsJiZzKGwuaW5zcGVjdCkmJmwuaW5zcGVjdCE9PWouaW5zcGVjdCYmKCFsLmNvbnN0cnVjdG9yfHxsLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWwpKXt2YXIgcT1sLmluc3BlY3QoYix5KTtyZXR1cm4gbmUocSl8fChx''@;'; put 'put ''PUQoeSxxLGIpKSxxfXZhciBHPWZ1bmN0aW9uIEUoeSxsKXtpZihoZShsKSlyZXR1cm4geS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihuZShsKSl7dmFyIGI9IiciK0pTT04uc3RyaW5naWZ5KGwpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIiku''@;'; put 'put ''cmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHkuc3R5bGl6ZShiLCJzdHJpbmciKX1yZXR1cm4gWChsKT95LnN0eWxpemUoIiIrbCwibnVtYmVyIik6WihsKT95LnN0eWxpemUoIiIrbCwiYm9vbGVhbiIpOlUobCk/eS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oeSxsKTtp''@;'; put 'put ''ZihHKXJldHVybiBHO3ZhciBRPU9iamVjdC5rZXlzKGwpLHBlPWZ1bmN0aW9uIE8oeSl7dmFyIGw9e307cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihiLHEpe2xbYl09ITB9KSxsfShRKTtpZih5LnNob3dIaWRkZW4mJihRPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGwpKSxSKGwpJiYo''@;'; put 'put ''US5pbmRleE9mKCJtZXNzYWdlIik+PTB8fFEuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIEIobCk7aWYoMD09PVEubGVuZ3RoKXtpZihzKGwpKXJldHVybiB5LnN0eWxpemUoIltGdW5jdGlvbiIrKGwubmFtZT8iOiAiK2wubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYoX2Uo''@;'; put 'put ''bCkpcmV0dXJuIHkuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobCksInJlZ2V4cCIpO2lmKEZlKGwpKXJldHVybiB5LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKSwiZGF0ZSIpO2lmKFIobCkpcmV0dXJuIEIobCl9dmFyIHplLFplPSIiLHFl''@;'; put 'put ''PSExLHZlPVsieyIsIn0iXTtyZXR1cm4geihsKSYmKHFlPSEwLHZlPVsiWyIsIl0iXSkscyhsKSYmKFplPSIgW0Z1bmN0aW9uIisobC5uYW1lPyI6ICIrbC5uYW1lOiIiKSsiXSIpLF9lKGwpJiYoWmU9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKSksRmUobCkmJihaZT0i''@;'; put 'put ''ICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChsKSksUihsKSYmKFplPSIgIitCKGwpKSwwIT09US5sZW5ndGh8fHFlJiYwIT1sLmxlbmd0aD9iPDA/X2UobCk/eS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKSwicmVnZXhwIik6eS5zdHlsaXplKCJb''@;'; put 'put ''T2JqZWN0XSIsInNwZWNpYWwiKTooeS5zZWVuLnB1c2gobCksemU9cWU/ZnVuY3Rpb24gRih5LGwsYixxLEcpe2Zvcih2YXIgUT1bXSxwZT0wLFBlPWwubGVuZ3RoO3BlPFBlOysrcGUpTChsLFN0cmluZyhwZSkpP1EucHVzaChOKHksbCxiLHEsU3RyaW5nKHBlKSwhMCkpOlEucHVzaCgiIik7''@;'; put 'put ''cmV0dXJuIEcuZm9yRWFjaChmdW5jdGlvbihaZSl7WmUubWF0Y2goL15cZCskLyl8fFEucHVzaChOKHksbCxiLHEsWmUsITApKX0pLFF9KHksbCxiLHBlLFEpOlEubWFwKGZ1bmN0aW9uKE9lKXtyZXR1cm4gTih5LGwsYixwZSxPZSxxZSl9KSx5LnNlZW4ucG9wKCksZnVuY3Rpb24gSCh5LGws''@;'; put 'put ''Yil7dmFyIEc9eS5yZWR1Y2UoZnVuY3Rpb24oUSxwZSl7cmV0dXJuIHBlLmluZGV4T2YoIlxuIiksUStwZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIEc+NjA/YlswXSsoIiI9PT1sPyIiOmwrIlxuICIpKyIgIit5LmpvaW4oIixcbiAgIikrIiAi''@;'; put 'put ''K2JbMV06YlswXStsKyIgIit5LmpvaW4oIiwgIikrIiAiK2JbMV19KHplLFplLHZlKSk6dmVbMF0rWmUrdmVbMV19ZnVuY3Rpb24gQih5KXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSkrIl0ifWZ1bmN0aW9uIE4oeSxsLGIscSxHLFEpe3ZhciBwZSxQZSxaZTtp''@;'; put 'put ''ZigoWmU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLEcpfHx7dmFsdWU6bFtHXX0pLmdldD9QZT15LnN0eWxpemUoWmUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpaZS5zZXQmJihQZT15LnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIp''@;'; put 'put ''KSxMKHEsRyl8fChwZT0iWyIrRysiXSIpLFBlfHwoeS5zZWVuLmluZGV4T2YoWmUudmFsdWUpPDA/KFBlPVUoYik/RCh5LFplLnZhbHVlLG51bGwpOkQoeSxaZS52YWx1ZSxiLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoUGU9UT9QZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ocWUpe3JldHVy''@;'; put 'put ''biIgICIrcWV9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK1BlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihxZSl7cmV0dXJuIiAgICIrcWV9KS5qb2luKCJcbiIpKTpQZT15LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLGhlKHBlKSl7aWYoUSYmRy5tYXRjaCgvXlxkKyQv''@;'; put 'put ''KSlyZXR1cm4gUGU7KHBlPUpTT04uc3RyaW5naWZ5KCIiK0cpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyhwZT1wZS5zdWJzdHIoMSxwZS5sZW5ndGgtMikscGU9eS5zdHlsaXplKHBlLCJuYW1lIikpOihwZT1wZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2Uo''@;'; put 'put ''L1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIikscGU9eS5zdHlsaXplKHBlLCJzdHJpbmciKSl9cmV0dXJuIHBlKyI6ICIrUGV9ZnVuY3Rpb24geih5KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh5KX1mdW5jdGlvbiBaKHkpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHl9ZnVuY3Rp''@;'; put 'put ''b24gVSh5KXtyZXR1cm4gbnVsbD09PXl9ZnVuY3Rpb24gWCh5KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHl9ZnVuY3Rpb24gbmUoeSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB5fWZ1bmN0aW9uIGhlKHkpe3JldHVybiB2b2lkIDA9PT15fWZ1bmN0aW9uIF9lKHkpe3JldHVybiBtZSh5KSYm''@;'; put 'put ''IltvYmplY3QgUmVnRXhwXSI9PT12KHkpfWZ1bmN0aW9uIG1lKHkpe3JldHVybiJvYmplY3QiPT10eXBlb2YgeSYmbnVsbCE9PXl9ZnVuY3Rpb24gRmUoeSl7cmV0dXJuIG1lKHkpJiYiW29iamVjdCBEYXRlXSI9PT12KHkpfWZ1bmN0aW9uIFIoeSl7cmV0dXJuIG1lKHkpJiYoIltvYmplY3Qg''@;'; put 'put ''RXJyb3JdIj09PXYoeSl8fHkgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gcyh5KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeX1mdW5jdGlvbiB2KHkpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSl9ZnVuY3Rpb24gcCh5KXtyZXR1cm4geTwxMD8iMCIreS50''@;'; put 'put ''b1N0cmluZygxMCk6eS50b1N0cmluZygxMCl9ai5kZWJ1Z2xvZz1mdW5jdGlvbih5KXtpZihoZShmKSYmKGY9Uy5lbnYuTk9ERV9ERUJVR3x8IiIpLHk9eS50b1VwcGVyQ2FzZSgpLCFJW3ldKWlmKG5ldyBSZWdFeHAoIlxcYiIreSsiXFxiIiwiaSIpLnRlc3QoZikpe3ZhciBsPVMucGlkO0lb''@;'; put 'put ''eV09ZnVuY3Rpb24oKXt2YXIgYj1qLmZvcm1hdC5hcHBseShqLGFyZ3VtZW50cyk7aC5lcnJvcigiJXMgJWQ6ICVzIix5LGwsYil9fWVsc2UgSVt5XT1mdW5jdGlvbigpe307cmV0dXJuIElbeV19LGouaW5zcGVjdD1ULFQuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVy''@;'; put 'put ''bGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxULnN0eWxlcz17c3Bl''@;'; put 'put ''Y2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LGouaXNBcnJheT16LGouaXNCb29sZWFuPVosai5pc051bGw9VSxqLmlzTnVsbE9y''@;'; put 'put ''VW5kZWZpbmVkPWZ1bmN0aW9uIEsoeSl7cmV0dXJuIG51bGw9PXl9LGouaXNOdW1iZXI9WCxqLmlzU3RyaW5nPW5lLGouaXNTeW1ib2w9ZnVuY3Rpb24gc2UoeSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB5fSxqLmlzVW5kZWZpbmVkPWhlLGouaXNSZWdFeHA9X2Usai5pc09iamVjdD1tZSxq''@;'; put 'put ''LmlzRGF0ZT1GZSxqLmlzRXJyb3I9UixqLmlzRnVuY3Rpb249cyxqLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIHUoeSl7cmV0dXJuIG51bGw9PT15fHwiYm9vbGVhbiI9PXR5cGVvZiB5fHwibnVtYmVyIj09dHlwZW9mIHl8fCJzdHJpbmciPT10eXBlb2YgeXx8InN5bWJvbCI9PXR5cGVvZiB5fHx0''@;'; put 'put ''eXBlb2YgeT4idSJ9LGouaXNCdWZmZXI9ZCgyOTc0KTt2YXIgXz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIEwoeSxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eS5jYWxsKHksbCl9ai5sb2c9ZnVuY3Rpb24oKXtoLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gaygpe3ZhciB5PW5ldyBEYXRlLGw9W3AoeS5nZXRIb3VycygpKSxwKHkuZ2V0TWludXRlcygpKSxwKHkuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVyblt5LmdldERhdGUoKSxfW3kuZ2V0''@;'; put 'put ''TW9udGgoKV0sbF0uam9pbigiICIpfSgpLGouZm9ybWF0LmFwcGx5KGosYXJndW1lbnRzKSl9LGouaW5oZXJpdHM9ZCgxNzI1KSxqLl9leHRlbmQ9ZnVuY3Rpb24oeSxsKXtpZighbHx8IW1lKGwpKXJldHVybiB5O2Zvcih2YXIgYj1PYmplY3Qua2V5cyhsKSxxPWIubGVuZ3RoO3EtLTspeVti''@;'; put 'put ''W3FdXT1sW2JbcV1dO3JldHVybiB5fX0sMjUyMDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQxNTUpLGg9IndpbjMyIj09PVMucGxhdGZvcm0sbz1kKDgwNTkpO2Z1bmN0aW9uIEkoSCx6KXtmb3IodmFyIFo9W10sVT0wO1U8SC5sZW5ndGg7VSsrKXt2YXIgSz1IW1VdOyFLfHwi''@;'; put 'put ''LiI9PT1LfHwoIi4uIj09PUs/Wi5sZW5ndGgmJiIuLiIhPT1aW1oubGVuZ3RoLTFdP1oucG9wKCk6eiYmWi5wdXNoKCIuLiIpOloucHVzaChLKSl9cmV0dXJuIFp9ZnVuY3Rpb24gZihIKXtmb3IodmFyIHo9SC5sZW5ndGgtMSxaPTA7Wjw9eiYmIUhbWl07WisrKTtmb3IodmFyIFU9ejtVPj0w''@;'; put 'put ''JiYhSFtVXTtVLS0pO3JldHVybiAwPT09WiYmVT09PXo/SDpaPlU/W106SC5zbGljZShaLFUrMSl9dmFyIFQ9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sQT0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9d''@;'; put 'put ''Kz98KShcLlteLlwvXFxdKnwpKSg/OltcXFwvXSopJC8sTT17fTtmdW5jdGlvbiBPKEgpe3ZhciB6PVQuZXhlYyhIKSxaPSh6WzFdfHwiIikrKHpbMl18fCIiKSxLPUEuZXhlYyh6WzNdfHwiIik7cmV0dXJuW1osS1sxXSxLWzJdLEtbM11dfWZ1bmN0aW9uIEQoSCl7dmFyIHo9VC5leGVjKEgp''@;'; put 'put ''LFo9elsxXXx8IiIsVT0hIVomJiI6IiE9PVpbMV07cmV0dXJue2RldmljZTpaLGlzVW5jOlUsaXNBYnNvbHV0ZTpVfHwhIXpbMl0sdGFpbDp6WzNdfX1mdW5jdGlvbiBFKEgpe3JldHVybiJcXFxcIitILnJlcGxhY2UoL15bXFxcL10rLywiIikucmVwbGFjZSgvW1xcXC9dKy9nLCJcXCIpfU0u''@;'; put 'put ''cmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgSD0iIix6PSIiLFo9ITEsVT1hcmd1bWVudHMubGVuZ3RoLTE7VT49LTE7VS0tKXt2YXIgSztpZihVPj0wP0s9YXJndW1lbnRzW1VdOkg/KCEoSz1TLmVudlsiPSIrSF0pfHxLLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCkhPT1ILnRvTG93ZXJD''@;'; put 'put ''YXNlKCkrIlxcIikmJihLPUgrIlxcIik6Sz1TLmN3ZCgpLCFvLmlzU3RyaW5nKEspKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoSyl7dmFyIFg9RChLKSxuZT1YLmRldmljZSxzZT1YLmlzVW5jLGhlPVguaXNBYnNv''@;'; put 'put ''bHV0ZSxfZT1YLnRhaWw7aWYoKCFuZXx8IUh8fG5lLnRvTG93ZXJDYXNlKCk9PT1ILnRvTG93ZXJDYXNlKCkpJiYoSHx8KEg9bmUpLFp8fCh6PV9lKyJcXCIreixaPWhlKSxIJiZaKSlicmVha319cmV0dXJuIHNlJiYoSD1FKEgpKSxIKyhaPyJcXCI6IiIpKyh6PUkoei5zcGxpdCgvW1xcXC9d''@;'; put 'put ''Ky8pLCFaKS5qb2luKCJcXCIpKXx8Ii4ifSxNLm5vcm1hbGl6ZT1mdW5jdGlvbihIKXt2YXIgej1EKEgpLFo9ei5kZXZpY2UsVT16LmlzVW5jLEs9ei5pc0Fic29sdXRlLFg9ei50YWlsLG5lPS9bXFxcL10kLy50ZXN0KFgpO3JldHVybiEoWD1JKFguc3BsaXQoL1tcXFwvXSsvKSwhSykuam9p''@;'; put 'put ''bigiXFwiKSkmJiFLJiYoWD0iLiIpLFgmJm5lJiYoWCs9IlxcIiksVSYmKFo9RShaKSksWisoSz8iXFwiOiIiKStYfSxNLmlzQWJzb2x1dGU9ZnVuY3Rpb24oSCl7cmV0dXJuIEQoSCkuaXNBYnNvbHV0ZX0sTS5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBIPVtdLHo9MDt6PGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg7eisrKXt2YXIgWj1hcmd1bWVudHNbel07aWYoIW8uaXNTdHJpbmcoWikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtaJiZILnB1c2goWil9dmFyIFU9SC5qb2luKCJcXCIpO3JldHVybi9eW1xcXC9dezJ9W15cXFwv''@;'; put 'put ''XS8udGVzdChIWzBdKXx8KFU9VS5yZXBsYWNlKC9eW1xcXC9dezIsfS8sIlxcIikpLE0ubm9ybWFsaXplKFUpfSxNLnJlbGF0aXZlPWZ1bmN0aW9uKEgseil7SD1NLnJlc29sdmUoSCksej1NLnJlc29sdmUoeik7Zm9yKHZhciBaPUgudG9Mb3dlckNhc2UoKSxVPXoudG9Mb3dlckNhc2UoKSxL''@;'; put 'put ''PWYoei5zcGxpdCgiXFwiKSksWD1mKFouc3BsaXQoIlxcIikpLG5lPWYoVS5zcGxpdCgiXFwiKSksc2U9TWF0aC5taW4oWC5sZW5ndGgsbmUubGVuZ3RoKSxoZT1zZSxfZT0wO19lPHNlO19lKyspaWYoWFtfZV0hPT1uZVtfZV0pe2hlPV9lO2JyZWFrfWlmKDA9PWhlKXJldHVybiB6O3ZhciBt''@;'; put 'put ''ZT1bXTtmb3IoX2U9aGU7X2U8WC5sZW5ndGg7X2UrKyltZS5wdXNoKCIuLiIpO3JldHVybihtZT1tZS5jb25jYXQoSy5zbGljZShoZSkpKS5qb2luKCJcXCIpfSxNLl9tYWtlTG9uZz1mdW5jdGlvbihIKXtpZighby5pc1N0cmluZyhIKSlyZXR1cm4gSDtpZighSClyZXR1cm4iIjt2YXIgej1N''@;'; put 'put ''LnJlc29sdmUoSCk7cmV0dXJuL15bYS16QS1aXVw6XFwvLnRlc3Qoeik/IlxcXFw/XFwiK3o6L15cXFxcW14/Ll0vLnRlc3Qoeik/IlxcXFw/XFxVTkNcXCIrei5zdWJzdHJpbmcoMik6SH0sTS5kaXJuYW1lPWZ1bmN0aW9uKEgpe3ZhciB6PU8oSCksWj16WzBdLFU9elsxXTtyZXR1cm4gWnx8''@;'; put 'put ''VT8oVSYmKFU9VS5zdWJzdHIoMCxVLmxlbmd0aC0xKSksWitVKToiLiJ9LE0uYmFzZW5hbWU9ZnVuY3Rpb24oSCx6KXt2YXIgWj1PKEgpWzJdO3JldHVybiB6JiZaLnN1YnN0cigtMSp6Lmxlbmd0aCk9PT16JiYoWj1aLnN1YnN0cigwLFoubGVuZ3RoLXoubGVuZ3RoKSksWn0sTS5leHRuYW1l''@;'; put 'put ''PWZ1bmN0aW9uKEgpe3JldHVybiBPKEgpWzNdfSxNLmZvcm1hdD1mdW5jdGlvbihIKXtpZighby5pc09iamVjdChIKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgSCk7aWYoIW8uaXNTdHJpbmcoSC5y''@;'; put 'put ''b290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBILnJvb3QpO3ZhciBaPUguZGlyLFU9SC5iYXNlfHwiIjtyZXR1cm4gWj9aW1oubGVuZ3RoLTFdPT09TS5zZXA/WitVOlorTS5z''@;'; put 'put ''ZXArVTpVfSxNLnBhcnNlPWZ1bmN0aW9uKEgpe2lmKCFvLmlzU3RyaW5nKEgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIEgpO3ZhciB6PU8oSCk7aWYoIXp8fDQhPT16Lmxlbmd0aCl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrSCsiJyIpO3JldHVybntyb290OnpbMF0sZGlyOnpbMF0relsxXS5zbGljZSgwLC0xKSxiYXNlOnpbMl0sZXh0OnpbM10sbmFtZTp6WzJdLnNsaWNlKDAselsyXS5sZW5ndGgtelszXS5sZW5ndGgpfX0sTS5zZXA9IlxcIixNLmRlbGltaXRlcj0i''@;'; put 'put ''OyI7dmFyIEI9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLEY9e307ZnVuY3Rpb24gTihIKXtyZXR1cm4gQi5leGVjKEgpLnNsaWNlKDEpfUYucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgSD0iIix6PSExLFo9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aC0xO1o+PS0xJiYhejtaLS0pe3ZhciBVPVo+PTA/YXJndW1lbnRzW1pdOlMuY3dkKCk7aWYoIW8uaXNTdHJpbmcoVSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtVJiYoSD1VKyIvIitILHo9Ii8iPT09''@;'; put 'put ''VVswXSl9cmV0dXJuKHo/Ii8iOiIiKSsoSD1JKEguc3BsaXQoIi8iKSwheikuam9pbigiLyIpKXx8Ii4ifSxGLm5vcm1hbGl6ZT1mdW5jdGlvbihIKXt2YXIgej1GLmlzQWJzb2x1dGUoSCksWj1IJiYiLyI9PT1IW0gubGVuZ3RoLTFdO3JldHVybiEoSD1JKEguc3BsaXQoIi8iKSwheikuam9p''@;'; put 'put ''bigiLyIpKSYmIXomJihIPSIuIiksSCYmWiYmKEgrPSIvIiksKHo/Ii8iOiIiKStIfSxGLmlzQWJzb2x1dGU9ZnVuY3Rpb24oSCl7cmV0dXJuIi8iPT09SC5jaGFyQXQoMCl9LEYuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgSD0iIix6PTA7ejxhcmd1bWVudHMubGVuZ3RoO3orKyl7dmFyIFo9''@;'; put 'put ''YXJndW1lbnRzW3pdO2lmKCFvLmlzU3RyaW5nKFopKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7WiYmKEgrPUg/Ii8iK1o6Wil9cmV0dXJuIEYubm9ybWFsaXplKEgpfSxGLnJlbGF0aXZlPWZ1bmN0aW9uKEgseil7SD1GLnJl''@;'; put 'put ''c29sdmUoSCkuc3Vic3RyKDEpLHo9Ri5yZXNvbHZlKHopLnN1YnN0cigxKTtmb3IodmFyIFo9ZihILnNwbGl0KCIvIikpLFU9Zih6LnNwbGl0KCIvIikpLEs9TWF0aC5taW4oWi5sZW5ndGgsVS5sZW5ndGgpLFg9SyxuZT0wO25lPEs7bmUrKylpZihaW25lXSE9PVVbbmVdKXtYPW5lO2JyZWFr''@;'; put 'put ''fXZhciBzZT1bXTtmb3IobmU9WDtuZTxaLmxlbmd0aDtuZSsrKXNlLnB1c2goIi4uIik7cmV0dXJuKHNlPXNlLmNvbmNhdChVLnNsaWNlKFgpKSkuam9pbigiLyIpfSxGLl9tYWtlTG9uZz1mdW5jdGlvbihIKXtyZXR1cm4gSH0sRi5kaXJuYW1lPWZ1bmN0aW9uKEgpe3ZhciB6PU4oSCksWj16''@;'; put 'put ''WzBdLFU9elsxXTtyZXR1cm4gWnx8VT8oVSYmKFU9VS5zdWJzdHIoMCxVLmxlbmd0aC0xKSksWitVKToiLiJ9LEYuYmFzZW5hbWU9ZnVuY3Rpb24oSCx6KXt2YXIgWj1OKEgpWzJdO3JldHVybiB6JiZaLnN1YnN0cigtMSp6Lmxlbmd0aCk9PT16JiYoWj1aLnN1YnN0cigwLFoubGVuZ3RoLXou''@;'; put 'put ''bGVuZ3RoKSksWn0sRi5leHRuYW1lPWZ1bmN0aW9uKEgpe3JldHVybiBOKEgpWzNdfSxGLmZvcm1hdD1mdW5jdGlvbihIKXtpZighby5pc09iamVjdChIKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2Yg''@;'; put 'put ''SCk7aWYoIW8uaXNTdHJpbmcoSC5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBILnJvb3QpO3JldHVybihILmRpcj9ILmRpcitGLnNlcDoiIikrKEguYmFzZXx8IiIpfSxG''@;'; put 'put ''LnBhcnNlPWZ1bmN0aW9uKEgpe2lmKCFvLmlzU3RyaW5nKEgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIEgpO3ZhciB6PU4oSCk7aWYoIXp8fDQhPT16Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJJbnZhbGlkIHBhdGggJyIrSCsiJyIpO3JldHVybiB6WzFdPXpbMV18fCIiLHpbMl09elsyXXx8IiIselszXT16WzNdfHwiIix7cm9vdDp6WzBdLGRpcjp6WzBdK3pbMV0uc2xpY2UoMCwtMSksYmFzZTp6WzJdLGV4dDp6WzNdLG5hbWU6elsyXS5zbGljZSgwLHpbMl0ubGVuZ3RoLXpbM10u''@;'; put 'put ''bGVuZ3RoKX19LEYuc2VwPSIvIixGLmRlbGltaXRlcj0iOiIsdGUuZXhwb3J0cz1oP006Rix0ZS5leHBvcnRzLnBvc2l4PUYsdGUuZXhwb3J0cy53aW4zMj1NfSw1NjMyOih0ZSxqLGQpPT57ai5wYmtkZjI9ZCg4NjM4KSxqLnBia2RmMlN5bmM9ZCgxMjU3KX0sODYzODoodGUsaixkKT0+e3Zh''@;'; put 'put ''ciBULEUsUz1kKDk1MDkpLkJ1ZmZlcixoPWQoNzM1Nyksbz1kKDIzNjgpLEk9ZCgxMjU3KSxmPWQoNzc3NyksQT1kLmcuY3J5cHRvJiZkLmcuY3J5cHRvLnN1YnRsZSxNPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYi''@;'; put 'put ''OiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSxPPVtdO2Z1bmN0aW9uIEIoKXtyZXR1cm4gRXx8KEU9ZC5nLnByb2Nlc3MmJmQuZy5wcm9jZXNzLm5leHRUaWNrP2QuZy5wcm9jZXNzLm5l''@;'; put 'put ''eHRUaWNrOmQuZy5xdWV1ZU1pY3JvdGFzaz9kLmcucXVldWVNaWNyb3Rhc2s6ZC5nLnNldEltbWVkaWF0ZT9kLmcuc2V0SW1tZWRpYXRlOmQuZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBGKEgseixaLFUsSyl7cmV0dXJuIEEuaW1wb3J0S2V5KCJyYXciLEgse25hbWU6IlBCS0RGMiJ9LCExLFsi''@;'; put 'put ''ZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKFgpe3JldHVybiBBLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDp6LGl0ZXJhdGlvbnM6WixoYXNoOntuYW1lOkt9fSxYLFU8PDMpfSkudGhlbihmdW5jdGlvbihYKXtyZXR1cm4gUy5mcm9tKFgpfSl9dGUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihILHosWixVLEssWCl7ImZ1bmN0aW9uIj09dHlwZW9mIEsmJihYPUssSz12b2lkIDApO3ZhciBuZT1NWyhLPUt8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYobmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBkLmcuUHJvbWlzZSl7aWYoaChaLFUpLEg9ZihILG8sIlBhc3N3b3JkIiksej1mKHos''@;'; put 'put ''bywiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBYKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0aW9uIE4oSCx6KXtILnRoZW4oZnVuY3Rpb24oWil7QigpKGZ1bmN0aW9uKCl7eihudWxsLFopfSl9LGZ1bmN0aW9uKFope0IoKShmdW5j''@;'; put 'put ''dGlvbigpe3ooWil9KX0pfShmdW5jdGlvbiBEKEgpe2lmKGQuZy5wcm9jZXNzJiYhZC5nLnByb2Nlc3MuYnJvd3Nlcnx8IUF8fCFBLmltcG9ydEtleXx8IUEuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT1PW0hdKXJldHVybiBPW0hdO3ZhciB6PUYo''@;'; put 'put ''VD1UfHxTLmFsbG9jKDgpLFQsMTAsMTI4LEgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4gT1tIXT16LHp9KG5lKS50aGVuKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2U/RihILHosWixVLG5lKTpJKEgseixaLFUsSyl9KSxYKX1l''@;'; put 'put ''bHNlIEIoKShmdW5jdGlvbigpe3ZhciBzZTt0cnl7c2U9SShILHosWixVLEspfWNhdGNoKGhlKXtyZXR1cm4gWChoZSl9WChudWxsLHNlKX0pfX0sMjM2ODoodGUsaixkKT0+e3ZhciBoLFM9ZCg0MTU1KTtoPWQuZy5wcm9jZXNzJiZkLmcucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6ZC5nLnBy''@;'; put 'put ''b2Nlc3MmJmQuZy5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQoUy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04Iix0ZS5leHBvcnRzPWh9LDczNTc6dGU9Pnt2YXIgaj1NYXRoLnBvdygyLDMwKS0xO3RlLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oZCxTKXtpZigibnVtYmVyIiE9dHlwZW9mIGQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihkPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIFMpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''S2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihTPDB8fFM+anx8UyE9Uyl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sMTI1NzoodGUsaixkKT0+e3ZhciBTPWQoODAyOCksaD1kKDk3ODUpLG89ZCg5MDcyKSxJPWQoOTUwOSkuQnVmZmVyLGY9ZCg3MzU3KSxUPWQo''@;'; put 'put ''MjM2OCksQT1kKDc3NzcpLE09SS5hbGxvYygxMjgpLE89e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBEKEYsTixIKXt2YXIgej1mdW5jdGlvbiBFKEYpe3JldHVybiJybWQxNjAi''@;'; put 'put ''PT09Rnx8InJpcGVtZDE2MCI9PT1GP2Z1bmN0aW9uIEgoeil7cmV0dXJuKG5ldyBoKS51cGRhdGUoeikuZGlnZXN0KCl9OiJtZDUiPT09Rj9TOmZ1bmN0aW9uIE4oeil7cmV0dXJuIG8oRikudXBkYXRlKHopLmRpZ2VzdCgpfX0oRiksWj0ic2hhNTEyIj09PUZ8fCJzaGEzODQiPT09Rj8xMjg6''@;'; put 'put ''NjQ7Ti5sZW5ndGg+Wj9OPXooTik6Ti5sZW5ndGg8WiYmKE49SS5jb25jYXQoW04sTV0sWikpO2Zvcih2YXIgVT1JLmFsbG9jVW5zYWZlKForT1tGXSksSz1JLmFsbG9jVW5zYWZlKForT1tGXSksWD0wO1g8WjtYKyspVVtYXT01NF5OW1hdLEtbWF09OTJeTltYXTt2YXIgbmU9SS5hbGxvY1Vu''@;'; put 'put ''c2FmZShaK0grNCk7VS5jb3B5KG5lLDAsMCxaKSx0aGlzLmlwYWQxPW5lLHRoaXMuaXBhZDI9VSx0aGlzLm9wYWQ9Syx0aGlzLmFsZz1GLHRoaXMuYmxvY2tzaXplPVosdGhpcy5oYXNoPXosdGhpcy5zaXplPU9bRl19RC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKEYsTil7cmV0dXJuIEYuY29w''@;'; put 'put ''eShOLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goTikuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSx0ZS5leHBvcnRzPWZ1bmN0aW9uIEIoRixOLEgseixaKXtmKEgseik7dmFyIFU9bmV3IEQoWj1afHwic2hhMSIsRj1BKEYsVCwiUGFzc3dv''@;'; put 'put ''cmQiKSwoTj1BKE4sVCwiU2FsdCIpKS5sZW5ndGgpLEs9SS5hbGxvY1Vuc2FmZSh6KSxYPUkuYWxsb2NVbnNhZmUoTi5sZW5ndGgrNCk7Ti5jb3B5KFgsMCwwLE4ubGVuZ3RoKTtmb3IodmFyIG5lPTAsc2U9T1taXSxoZT1NYXRoLmNlaWwoei9zZSksX2U9MTtfZTw9aGU7X2UrKyl7WC53cml0''@;'; put 'put ''ZVVJbnQzMkJFKF9lLE4ubGVuZ3RoKTtmb3IodmFyIG1lPVUucnVuKFgsVS5pcGFkMSksRmU9bWUsUj0xO1I8SDtSKyspe0ZlPVUucnVuKEZlLFUuaXBhZDIpO2Zvcih2YXIgcz0wO3M8c2U7cysrKW1lW3NdXj1GZVtzXX1tZS5jb3B5KEssbmUpLG5lKz1zZX1yZXR1cm4gS319LDc3Nzc6KHRl''@;'; put 'put ''LGosZCk9Pnt2YXIgUz1kKDk1MDkpLkJ1ZmZlcjt0ZS5leHBvcnRzPWZ1bmN0aW9uKGgsbyxJKXtpZihTLmlzQnVmZmVyKGgpKXJldHVybiBoO2lmKCJzdHJpbmciPT10eXBlb2YgaClyZXR1cm4gUy5mcm9tKGgsbyk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGgpKXJldHVybiBTLmZyb20oaC5i''@;'; put 'put ''dWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IoSSsiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LDk5MDg6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1bIkZsb2F0MTZBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRB''@;'; put 'put ''cnJheSIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSJdfSw4MjEyOih0ZSxqLGQpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBTPWQoNDE1NSk7dGUuZXhwb3J0cz10eXBlb2YgUz4idSJ8fCFTLnZlcnNpb258fDA9PT1TLnZlcnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1TLnZlcnNpb24uaW5kZXhPZigidjEuIikmJjAhPT1TLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT97bmV4dFRpY2s6ZnVuY3Rpb24g''@;'; put 'put ''aChvLEksZixUKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciBNLE8sQT1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChBKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBTLm5leHRUaWNr''@;'; put 'put ''KG8pO2Nhc2UgMjpyZXR1cm4gUy5uZXh0VGljayhmdW5jdGlvbigpe28uY2FsbChudWxsLEkpfSk7Y2FzZSAzOnJldHVybiBTLm5leHRUaWNrKGZ1bmN0aW9uKCl7by5jYWxsKG51bGwsSSxmKX0pO2Nhc2UgNDpyZXR1cm4gUy5uZXh0VGljayhmdW5jdGlvbigpe28uY2FsbChudWxsLEksZixU''@;'; put 'put ''KX0pO2RlZmF1bHQ6Zm9yKE09bmV3IEFycmF5KEEtMSksTz0wO088TS5sZW5ndGg7KU1bTysrXT1hcmd1bWVudHNbT107cmV0dXJuIFMubmV4dFRpY2soZnVuY3Rpb24oKXtvLmFwcGx5KG51bGwsTSl9KX19fTpTfSw0MTU1OnRlPT57dmFyIGQsUyxqPXRlLmV4cG9ydHM9e307ZnVuY3Rpb24g''@;'; put 'put ''aCgpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIG8oKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIEkoTil7aWYoZD09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRp''@;'; put 'put ''bWVvdXQoTiwwKTtpZigoZD09PWh8fCFkKSYmc2V0VGltZW91dClyZXR1cm4gZD1zZXRUaW1lb3V0LHNldFRpbWVvdXQoTiwwKTt0cnl7cmV0dXJuIGQoTiwwKX1jYXRjaHt0cnl7cmV0dXJuIGQuY2FsbChudWxsLE4sMCl9Y2F0Y2h7cmV0dXJuIGQuY2FsbCh0aGlzLE4sMCl9fX0hZnVuY3Rp''@;'; put 'put ''b24oKXt0cnl7ZD0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Omh9Y2F0Y2h7ZD1ofXRyeXtTPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om99Y2F0Y2h7Uz1vfX0oKTt2YXIgTSxUPVtdLEE9ITEsTz0tMTtmdW5jdGlvbiBEKCl7''@;'; put 'put ''IUF8fCFNfHwoQT0hMSxNLmxlbmd0aD9UPU0uY29uY2F0KFQpOk89LTEsVC5sZW5ndGgmJkUoKSl9ZnVuY3Rpb24gRSgpe2lmKCFBKXt2YXIgTj1JKEQpO0E9ITA7Zm9yKHZhciBIPVQubGVuZ3RoO0g7KXtmb3IoTT1ULFQ9W107KytPPEg7KU0mJk1bT10ucnVuKCk7Tz0tMSxIPVQubGVuZ3Ro''@;'; put 'put ''fU09bnVsbCxBPSExLGZ1bmN0aW9uIGYoTil7aWYoUz09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KE4pO2lmKChTPT09b3x8IVMpJiZjbGVhclRpbWVvdXQpcmV0dXJuIFM9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChOKTt0cnl7cmV0dXJuIFMoTil9Y2F0Y2h7dHJ5e3Jl''@;'; put 'put ''dHVybiBTLmNhbGwobnVsbCxOKX1jYXRjaHtyZXR1cm4gUy5jYWxsKHRoaXMsTil9fX0oTil9fWZ1bmN0aW9uIEIoTixIKXt0aGlzLmZ1bj1OLHRoaXMuYXJyYXk9SH1mdW5jdGlvbiBGKCl7fWoubmV4dFRpY2s9ZnVuY3Rpb24oTil7dmFyIEg9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgt''@;'; put 'put ''MSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgej0xO3o8YXJndW1lbnRzLmxlbmd0aDt6KyspSFt6LTFdPWFyZ3VtZW50c1t6XTtULnB1c2gobmV3IEIoTixIKSksMT09PVQubGVuZ3RoJiYhQSYmSShFKX0sQi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHko''@;'; put 'put ''bnVsbCx0aGlzLmFycmF5KX0sai50aXRsZT0iYnJvd3NlciIsai5icm93c2VyPSEwLGouZW52PXt9LGouYXJndj1bXSxqLnZlcnNpb249IiIsai52ZXJzaW9ucz17fSxqLm9uPUYsai5hZGRMaXN0ZW5lcj1GLGoub25jZT1GLGoub2ZmPUYsai5yZW1vdmVMaXN0ZW5lcj1GLGoucmVtb3ZlQWxs''@;'; put 'put ''TGlzdGVuZXJzPUYsai5lbWl0PUYsai5wcmVwZW5kTGlzdGVuZXI9RixqLnByZXBlbmRPbmNlTGlzdGVuZXI9RixqLmxpc3RlbmVycz1mdW5jdGlvbihOKXtyZXR1cm5bXX0sai5iaW5kaW5nPWZ1bmN0aW9uKE4pe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBw''@;'; put 'put ''b3J0ZWQiKX0sai5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LGouY2hkaXI9ZnVuY3Rpb24oTil7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sai51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sNzkwMDoodGUsaixkKT0+e2oucHVibGljRW5j''@;'; put 'put ''cnlwdD1kKDY1NTkpLGoucHJpdmF0ZURlY3J5cHQ9ZCg2MTM4KSxqLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKGgsbyl7cmV0dXJuIGoucHVibGljRW5jcnlwdChoLG8sITApfSxqLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oaCxvKXtyZXR1cm4gai5wcml2YXRlRGVjcnlwdChoLG8sITApfX0s''@;'; put 'put ''OTE5OToodGUsaixkKT0+e3ZhciBTPWQoMzQ4MiksaD1kKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBvKEkpe3ZhciBmPWguYWxsb2NVbnNhZmUoNCk7cmV0dXJuIGYud3JpdGVVSW50MzJCRShJLDApLGZ9dGUuZXhwb3J0cz1mdW5jdGlvbihJLGYpe2Zvcih2YXIgTSxUPWguYWxsb2MoMCksQT0w''@;'; put 'put ''O1QubGVuZ3RoPGY7KU09byhBKyspLFQ9aC5jb25jYXQoW1QsUygic2hhMSIpLnVwZGF0ZShJKS51cGRhdGUoTSkuZGlnZXN0KCldKTtyZXR1cm4gVC5zbGljZSgwLGYpfX0sMjE0NDpmdW5jdGlvbih0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKFIscyl7''@;'; put 'put ''aWYoIVIpdGhyb3cgbmV3IEVycm9yKHN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gSShSLHMpe1Iuc3VwZXJfPXM7dmFyIHU9ZnVuY3Rpb24oKXt9O3UucHJvdG90eXBlPXMucHJvdG90eXBlLFIucHJvdG90eXBlPW5ldyB1LFIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVJ9ZnVuY3Rp''@;'; put 'put ''b24gZihSLHMsdSl7aWYoZi5pc0JOKFIpKXJldHVybiBSO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1SJiYoKCJsZSI9PT1zfHwiYmUiPT09cykmJih1PXMscz0xMCksdGhpcy5faW5pdChSfHwwLHN8fDEwLHV8fCJi''@;'; put 'put ''ZSIpKX12YXIgVDsib2JqZWN0Ij09dHlwZW9mIFM/Uy5leHBvcnRzPWY6aC5CTj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDcxMDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24g''@;'; put 'put ''QShSLHMpe3ZhciB1PVIuY2hhckNvZGVBdChzKTtyZXR1cm4gdT49NjUmJnU8PTcwP3UtNTU6dT49OTcmJnU8PTEwMj91LTg3OnUtNDgmMTV9ZnVuY3Rpb24gTShSLHMsdSl7dmFyIHY9QShSLHUpO3JldHVybiB1LTE+PXMmJih2fD1BKFIsdS0xKTw8NCksdn1mdW5jdGlvbiBPKFIscyx1LHYp''@;'; put 'put ''e2Zvcih2YXIgcD0wLF89TWF0aC5taW4oUi5sZW5ndGgsdSksaz1zO2s8XztrKyspe3ZhciBMPVIuY2hhckNvZGVBdChrKS00ODtwKj12LHArPUw+PTQ5P0wtNDkrMTA6TD49MTc/TC0xNysxMDpMfXJldHVybiBwfWYuaXNCTj1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIGZ8fG51''@;'; put 'put ''bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuY29uc3RydWN0b3Iud29yZFNpemU9PT1mLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHMud29yZHMpfSxmLm1heD1mdW5jdGlvbihzLHUpe3JldHVybiBzLmNtcCh1KT4wP3M6dX0sZi5taW49ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAo''@;'; put 'put ''dSk8MD9zOnV9LGYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHMsdSx2KXtpZigibnVtYmVyIj09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocyx1LHYpO2lmKCJvYmplY3QiPT10eXBlb2YgcylyZXR1cm4gdGhpcy5faW5pdEFycmF5KHMsdSx2KTsiaGV4Ij09PXUmJih1PTE2''@;'; put 'put ''KSxvKHU9PT0oMHx1KSYmdT49MiYmdTw9MzYpO3ZhciBwPTA7Ii0iPT09KHM9cy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihwKyssdGhpcy5uZWdhdGl2ZT0xKSxwPHMubGVuZ3RoJiYoMTY9PT11P3RoaXMuX3BhcnNlSGV4KHMscCx2KToodGhpcy5fcGFyc2VCYXNlKHMs''@;'; put 'put ''dSxwKSwibGUiPT09diYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHUsdikpKX0sZi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocyx1LHYpe3M8MCYmKHRoaXMubmVnYXRpdmU9MSxzPS1zKSxzPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzXSx0aGlzLmxl''@;'; put 'put ''bmd0aD0xKTpzPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG8oczw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5n''@;'; put 'put ''dGg9MyksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpfSxmLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHMsdSx2KXtpZihvKCJudW1iZXIiPT10eXBlb2Ygcy5sZW5ndGgpLHMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxl''@;'; put 'put ''bmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIF8sayxMPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgt''@;'; put 'put ''MSxfPTA7cD49MDtwLT0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twLTFdPDw4fHNbcC0yXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysxXT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7ZWxzZSBpZigibGUiPT09dilmb3IocD0wLF89MDtwPHMu''@;'; put 'put ''bGVuZ3RoO3ArPTMpdGhpcy53b3Jkc1tfXXw9KGs9c1twXXxzW3ArMV08PDh8c1twKzJdPDwxNik8PEwmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPWs+Pj4yNi1MJjY3MTA4ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fcGFy''@;'; put 'put ''c2VIZXg9ZnVuY3Rpb24ocyx1LHYpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocy5sZW5ndGgtdSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgTCxfPTAsaz0wO2lmKCJiZSI9PT12''@;'; put 'put ''KWZvcihwPXMubGVuZ3RoLTE7cD49dTtwLT0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O2Vsc2UgZm9yKHA9KHMubGVuZ3RoLXUpJTI9PTA/dSsxOnU7cDxzLmxlbmd0aDtwKz0yKUw9''@;'; put 'put ''TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O3RoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihzLHUsdil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtm''@;'; put 'put ''b3IodmFyIHA9MCxfPTE7Xzw9NjcxMDg4NjM7Xyo9dSlwKys7cC0tLF89Xy91fDA7Zm9yKHZhciBrPXMubGVuZ3RoLXYsTD1rJXAseT1NYXRoLm1pbihrLGstTCkrdixsPTAsYj12O2I8eTtiKz1wKWw9TyhzLGIsYitwLHUpLHRoaXMuaW11bG4oXyksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0''@;'; put 'put ''P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCk7aWYoMCE9PUwpe3ZhciBxPTE7Zm9yKGw9TyhzLGIscy5sZW5ndGgsdSksYj0wO2I8TDtiKyspcSo9dTt0aGlzLmltdWxuKHEpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRo''@;'; put 'put ''aXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihzKXtzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPXRoaXMubGVuZ3RoLHMubmVnYXRpdmU9dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSxzLnJlZD10aGlzLnJlZH0sZi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHMpLHN9LGYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzOyl0aGlzLndvcmRzW3RoaXMubGVu''@;'; put 'put ''Z3RoKytdPTA7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sZi5wcm90b3R5cGUuX25vcm1TaWduPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07''@;'; put 'put ''dmFyIEQ9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxC''@;'; put 'put ''PVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRl''@;'; put 'put ''Niw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oUixzLHUpe3UubmVnYXRp''@;'; put 'put ''dmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlO3ZhciB2PVIubGVuZ3RoK3MubGVuZ3RofDA7dS5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Ui53b3Jkc1swXSxfPTB8cy53b3Jkc1swXSxrPXAqXyx5PWsvNjcxMDg4NjR8MDt1LndvcmRzWzBdPTY3MTA4ODYzJms7Zm9yKHZhciBsPTE7bDx2O2wr''@;'; put 'put ''Kyl7Zm9yKHZhciBiPXk+Pj4yNixxPTY3MTA4ODYzJnksRz1NYXRoLm1pbihsLHMubGVuZ3RoLTEpLFE9TWF0aC5tYXgoMCxsLVIubGVuZ3RoKzEpO1E8PUc7USsrKWIrPShrPShwPTB8Ui53b3Jkc1tsLVF8MF0pKihfPTB8cy53b3Jkc1tRXSkrcSkvNjcxMDg4NjR8MCxxPTY3MTA4ODYzJms7''@;'; put 'put ''dS53b3Jkc1tsXT0wfHEseT0wfGJ9cmV0dXJuIDAhPT15P3Uud29yZHNbbF09MHx5OnUubGVuZ3RoLS0sdS5zdHJpcCgpfWYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHMsdSl7dmFyIHY7aWYodT0wfHV8fDEsMTY9PT0ocz1zfHwxMCl8fCJoZXgiPT09cyl7dj0iIjtmb3IodmFyIHA9''@;'; put 'put ''MCxfPTAsaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgTD10aGlzLndvcmRzW2tdLHk9KDE2Nzc3MjE1JihMPDxwfF8pKS50b1N0cmluZygxNik7Xz1MPj4+MjQtcCYxNjc3NzIxNSwocCs9Mik+PTI2JiYocC09MjYsay0tKSx2PTAhPT1ffHxrIT09dGhpcy5sZW5ndGgtMT9EWzYteS5sZW5n''@;'; put 'put ''dGhdK3krdjp5K3Z9Zm9yKDAhPT1fJiYodj1fLnRvU3RyaW5nKDE2KSt2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9aWYocz09PSgwfHMpJiZzPj0yJiZzPD0zNil7dmFyIGw9RVtzXSxiPUJbc107dj0iIjt2YXIgcT10aGlz''@;'; put 'put ''LmNsb25lKCk7Zm9yKHEubmVnYXRpdmU9MDshcS5pc1plcm8oKTspe3ZhciBHPXEubW9kbihiKS50b1N0cmluZyhzKTt2PShxPXEuaWRpdm4oYikpLmlzWmVybygpP0crdjpEW2wtRy5sZW5ndGhdK0crdn1mb3IodGhpcy5pc1plcm8oKSYmKHY9IjAiK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAi''@;'; put 'put ''K3Y7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodj0iLSIrdiksdn1vKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGYucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3MrPTY3MTA4''@;'; put 'put ''ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9zKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/LXM6c30sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxmLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihzLHUpe3JldHVybiBvKHR5cGVvZiBUPCJ1IiksdGhpcy50b0FycmF5TGlrZShULHMsdSl9LGYucHJv''@;'; put 'put ''dG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihzLHUsdil7dmFyIHA9dGhpcy5ieXRlTGVuZ3RoKCksXz12fHxNYXRoLm1heCgxLHApO28ocDw9XywiYnl0ZSBhcnJh''@;'; put 'put ''eSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG8oXz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHksbCxrPSJsZSI9PT11LEw9bmV3IHMoXyksYj10aGlzLmNsb25lKCk7aWYoayl7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxu''@;'; put 'put ''KDI1NSksYi5pdXNocm4oOCksTFtsXT15O2Zvcig7bDxfO2wrKylMW2xdPTB9ZWxzZXtmb3IobD0wO2w8Xy1wO2wrKylMW2xdPTA7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtfLWwtMV09eX1yZXR1cm4gTH0sZi5wcm90b3R5cGUuX2NvdW50''@;'; put 'put ''Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHMpe3JldHVybiAzMi1NYXRoLmNsejMyKHMpfTpmdW5jdGlvbihzKXt2YXIgdT1zLHY9MDtyZXR1cm4gdT49NDA5NiYmKHYrPTEzLHU+Pj49MTMpLHU+PTY0JiYodis9Nyx1Pj4+PTcpLHU+PTgmJih2Kz00LHU+Pj49NCksdT49MiYmKHYrPTIsdT4+''@;'; put 'put ''Pj0yKSx2K3V9LGYucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihzKXtpZigwPT09cylyZXR1cm4gMjY7dmFyIHU9cyx2PTA7cmV0dXJuISg4MTkxJnUpJiYodis9MTMsdT4+Pj0xMyksISgxMjcmdSkmJih2Kz03LHU+Pj49NyksISgxNSZ1KSYmKHYrPTQsdT4+Pj00KSwhKDMmdSkmJih2''@;'; put 'put ''Kz0yLHU+Pj49MiksISgxJnUpJiZ2Kyssdn0sZi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrdX0sZi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rp''@;'; put 'put ''b24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcz0wLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl7dmFyIHY9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t1XSk7aWYocys9diwyNiE9PXYpYnJlYWt9cmV0dXJuIHN9LGYucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihzKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0''@;'; put 'put ''aW9uKHMpe3JldHVybiB0aGlzLnRlc3RuKHMtMSk/dGhpcy5ub3RuKHMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxmLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmluZWcoKX0sZi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sZi5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihzKXtmb3IoO3RoaXMubGVuZ3RoPHMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoKytdPTA7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdfHMud29yZHNbdV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSks''@;'; put 'put ''dGhpcy5pdW9yKHMpfSxmLnByb3RvdHlwZS5vcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihzKTpzLmNsb25lKCkuaW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3Ro''@;'; put 'put ''P3RoaXMuY2xvbmUoKS5pdW9yKHMpOnMuY2xvbmUoKS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihzKXt2YXIgdTt1PXRoaXMubGVuZ3RoPnMubGVuZ3RoP3M6dGhpcztmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPXRoaXMud29yZHNbdl0m''@;'; put 'put ''cy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChzKX0sZi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChzKTpzLmNsb25lKCkuaWFuZCh0aGlzKX0sZi5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHMpOnMuY2xvbmUoKS5pdWFuZCh0''@;'; put 'put ''aGlzKX0sZi5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocyl7dmFyIHUsdjt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odT10aGlzLHY9cyk6KHU9cyx2PXRoaXMpO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXV52LndvcmRzW3BdO2lmKHRoaXMhPT11''@;'; put 'put ''KWZvcig7cDx1Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT11LndvcmRzW3BdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1eG9y''@;'; put 'put ''KHMpfSxmLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHMpOnMuY2xvbmUoKS5peG9yKHRoaXMpfSxmLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlz''@;'; put 'put ''LmNsb25lKCkuaXV4b3Iocyk6cy5jbG9uZSgpLml1eG9yKHRoaXMpfSxmLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9MHxNYXRoLmNlaWwocy8yNiksdj1zJTI2O3RoaXMuX2V4cGFuZCh1KSx2PjAmJnUtLTtmb3IodmFyIHA9''@;'; put 'put ''MDtwPHU7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmfnRoaXMud29yZHNbcF07cmV0dXJuIHY+MCYmKHRoaXMud29yZHNbcF09fnRoaXMud29yZHNbcF0mNjcxMDg4NjM+PjI2LXYpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlub3RuKHMpfSxmLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHMsdSl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB2PXMvMjZ8MCxwPXMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl09dT90aGlzLndvcmRzW3ZdfDE8PHA6dGhpcy53b3Jkc1t2''@;'; put 'put ''XSZ+KDE8PHApLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzKXt2YXIgdSx2LHA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdT10aGlzLmlzdWIocyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3Jt''@;'; put 'put ''U2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh2PXRoaXMscD1zKToodj1zLHA9dGhpcyk7Zm9yKHZhciBfPTAs''@;'; put 'put ''az0wO2s8cC5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrKDB8cC53b3Jkc1trXSkrXyksXz11Pj4+MjY7Zm9yKDswIT09XyYmazx2Lmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKStfKSxfPXU+Pj4y''@;'; put 'put ''NjtpZih0aGlzLmxlbmd0aD12Lmxlbmd0aCwwIT09Xyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1fLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih2IT09dGhpcylmb3IoO2s8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109di53b3Jkc1trXTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuYWRkPWZ1''@;'; put 'put ''bmN0aW9uKHMpe3ZhciB1O3JldHVybiAwIT09cy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHMubmVnYXRpdmU9MCx1PXRoaXMuc3ViKHMpLHMubmVnYXRpdmVePTEsdSk6MD09PXMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsdT1zLnN1Yih0aGlz''@;'; put 'put ''KSx0aGlzLm5lZ2F0aXZlPTEsdSk6dGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocyk6cy5jbG9uZSgpLmlhZGQodGhpcyl9LGYucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyl7aWYoMCE9PXMubmVnYXRpdmUpe3MubmVnYXRpdmU9MDt2YXIgdT10aGlzLmlhZGQocyk7''@;'; put 'put ''cmV0dXJuIHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBwLF8sdj10aGlzLmNtcChzKTtpZigwPT09dilyZXR1cm4gdGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dj4wPyhwPXRoaXMsXz1zKToocD1zLF89dGhpcyk7Zm9yKHZhciBrPTAsTD0wO0w8Xy5sZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSktKDB8Xy53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNbTF09''@;'; put 'put ''NjcxMDg4NjMmdTtmb3IoOzAhPT1rJiZMPHAubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7aWYoMD09PWsmJkw8cC5sZW5ndGgmJnAhPT10aGlzKWZvcig7TDxwLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT1wLndvcmRzW0xd''@;'; put 'put ''O3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxMKSxwIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHMpfTt2YXIgSD1mdW5jdGlvbihzLHUsdil7''@;'; put 'put ''dmFyIHksbCxiLHA9cy53b3JkcyxfPXUud29yZHMsaz12LndvcmRzLEw9MCxxPTB8cFswXSxHPTgxOTEmcSxRPXE+Pj4xMyxwZT0wfHBbMV0sUGU9ODE5MSZwZSxaZT1wZT4+PjEzLHFlPTB8cFsyXSx2ZT04MTkxJnFlLHVlPXFlPj4+MTMsemU9MHxwWzNdLE9lPTgxOTEmemUsQ2U9emU+Pj4x''@;'; put 'put ''MyxrZT0wfHBbNF0seGU9ODE5MSZrZSxNZT1rZT4+PjEzLEllPTB8cFs1XSxiZT04MTkxJkllLHdlPUllPj4+MTMscHQ9MHxwWzZdLEtlPTgxOTEmcHQsWWU9cHQ+Pj4xMyxxdD0wfHBbN10saHQ9ODE5MSZxdCx2dD1xdD4+PjEzLFl0PTB8cFs4XSx0dD04MTkxJll0LFVlPVl0Pj4+MTMsJGU9''@;'; put 'put ''MHxwWzldLExlPTgxOTEmJGUsbnQ9JGU+Pj4xMyxybj0wfF9bMF0seHQ9ODE5MSZybixUdD1ybj4+PjEzLHluPTB8X1sxXSxYdD04MTkxJnluLFF0PXluPj4+MTMsWHI9MHxfWzJdLHNuPTgxOTEmWHIsaXQ9WHI+Pj4xMyxDcj0wfF9bM10sTHQ9ODE5MSZDcix3dD1Dcj4+PjEzLFJuPTB8X1s0''@;'; put 'put ''XSxRZT04MTkxJlJuLFB0PVJuPj4+MTMsUXI9MHxfWzVdLE5lPTgxOTEmUXIseXQ9UXI+Pj4xMyxycj0wfF9bNl0sYXQ9ODE5MSZycixfdD1ycj4+PjEzLHduPTB8X1s3XSwkdD04MTkxJnduLEh0PXduPj4+MTMsc2k9MHxfWzhdLG5uPTgxOTEmc2ksbG49c2k+Pj4xMyxraT0wfF9bOV0sYW49''@;'; put 'put ''ODE5MSZraSxHdD1raT4+PjEzO3YubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPTE5O3ZhciBlYT0oTCsoeT1NYXRoLmltdWwoRyx4dCkpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoRyxUdCkpK01hdGguaW11bChRLHh0KXwwKSk8PDEzKXwwO0w9KChiPU1hdGgu''@;'; put 'put ''aW11bChRLFR0KSkrKGw+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFBlLHh0KSxsPShsPU1hdGguaW11bChQZSxUdCkpK01hdGguaW11bChaZSx4dCl8MCxiPU1hdGguaW11bChaZSxUdCk7dmFyIG1pPShMKyh5PXkrTWF0aC5pbXVsKEcsWHQpfDApfDAp''@;'; put 'put ''KygoODE5MSYobD0obD1sK01hdGguaW11bChHLFF0KXwwKStNYXRoLmltdWwoUSxYdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFF0KXwwKSsobD4+PjEzKXwwKSsobWk+Pj4yNil8MCxtaSY9NjcxMDg4NjMseT1NYXRoLmltdWwodmUseHQpLGw9KGw9TWF0aC5pbXVsKHZlLFR0''@;'; put 'put ''KSkrTWF0aC5pbXVsKHVlLHh0KXwwLGI9TWF0aC5pbXVsKHVlLFR0KSx5PXkrTWF0aC5pbXVsKFBlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChaZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFplLFF0KXwwO3ZhciBmcj0oTCsoeT15K01hdGguaW11bChHLHNuKXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxpdCl8MCkrTWF0aC5pbXVsKFEsc24pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxpdCl8MCkrKGw+Pj4xMyl8MCkrKGZyPj4+MjYpfDAsZnImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE9lLHh0KSxsPShsPU1hdGguaW11bChP''@;'; put 'put ''ZSxUdCkpK01hdGguaW11bChDZSx4dCl8MCxiPU1hdGguaW11bChDZSxUdCkseT15K01hdGguaW11bCh2ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFF0KXwwKStNYXRoLmltdWwodWUsWHQpfDAsYj1iK01hdGguaW11bCh1ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKFBlLHNuKXwwLGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoUGUsaXQpfDApK01hdGguaW11bChaZSxzbil8MCxiPWIrTWF0aC5pbXVsKFplLGl0KXwwO3ZhciAkaT0oTCsoeT15K01hdGguaW11bChHLEx0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx3dCl8MCkrTWF0aC5pbXVsKFEsTHQpfDApKTw8MTMpfDA7TD0o''@;'; put 'put ''KGI9YitNYXRoLmltdWwoUSx3dCl8MCkrKGw+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHhlLHh0KSxsPShsPU1hdGguaW11bCh4ZSxUdCkpK01hdGguaW11bChNZSx4dCl8MCxiPU1hdGguaW11bChNZSxUdCkseT15K01hdGguaW11bChPZSxYdCl8MCxs''@;'; put 'put ''PShsPWwrTWF0aC5pbXVsKE9lLFF0KXwwKStNYXRoLmltdWwoQ2UsWHQpfDAsYj1iK01hdGguaW11bChDZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHZlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHVlLGl0KXwwLHk9eStN''@;'; put 'put ''YXRoLmltdWwoUGUsTHQpfDAsbD0obD1sK01hdGguaW11bChQZSx3dCl8MCkrTWF0aC5pbXVsKFplLEx0KXwwLGI9YitNYXRoLmltdWwoWmUsd3QpfDA7dmFyIEtpPShMKyh5PXkrTWF0aC5pbXVsKEcsUWUpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFB0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUSxRZSl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFB0KXwwKSsobD4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoYmUseHQpLGw9KGw9TWF0aC5pbXVsKGJlLFR0KSkrTWF0aC5pbXVsKHdlLHh0KXwwLGI9TWF0aC5pbXVsKHdlLFR0KSx5''@;'; put 'put ''PXkrTWF0aC5pbXVsKHhlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUXQpfDApK01hdGguaW11bChNZSxYdCl8MCxiPWIrTWF0aC5pbXVsKE1lLFF0KXwwLHk9eStNYXRoLmltdWwoT2Usc24pfDAsbD0obD1sK01hdGguaW11bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLGI9YitN''@;'; put 'put ''YXRoLmltdWwoQ2UsaXQpfDAseT15K01hdGguaW11bCh2ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAsYj1iK01hdGguaW11bCh1ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKFBlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUHQpfDApK01hdGgu''@;'; put 'put ''aW11bChaZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFplLFB0KXwwO3ZhciBWaT0oTCsoeT15K01hdGguaW11bChHLE5lKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx5dCl8MCkrTWF0aC5pbXVsKFEsTmUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx5dCl8MCkrKGw+''@;'; put 'put ''Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEtlLHh0KSxsPShsPU1hdGguaW11bChLZSxUdCkpK01hdGguaW11bChZZSx4dCl8MCxiPU1hdGguaW11bChZZSxUdCkseT15K01hdGguaW11bChiZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwod2UsWHQpfDAsYj1iK01hdGguaW11bCh3ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHhlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsaXQpfDApK01hdGguaW11bChNZSxzbil8MCxiPWIrTWF0aC5pbXVsKE1lLGl0KXwwLHk9eStNYXRoLmltdWwoT2UsTHQpfDAsbD0obD1sK01h''@;'; put 'put ''dGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKENlLEx0KXwwLGI9YitNYXRoLmltdWwoQ2Usd3QpfDAseT15K01hdGguaW11bCh2ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAsYj1iK01hdGguaW11bCh1ZSxQdCl8MCx5PXkrTWF0aC5pbXVs''@;'; put 'put ''KFBlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUseXQpfDApK01hdGguaW11bChaZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFplLHl0KXwwO3ZhciBxcj0oTCsoeT15K01hdGguaW11bChHLGF0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxfdCl8MCkrTWF0aC5pbXVsKFEsYXQp''@;'; put 'put ''fDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxfdCl8MCkrKGw+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGh0LHh0KSxsPShsPU1hdGguaW11bChodCxUdCkpK01hdGguaW11bCh2dCx4dCl8MCxiPU1hdGguaW11bCh2dCxUdCkseT15K01hdGgu''@;'; put 'put ''aW11bChLZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLFF0KXwwKStNYXRoLmltdWwoWWUsWHQpfDAsYj1iK01hdGguaW11bChZZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGJlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsaXQpfDApK01hdGguaW11bCh3ZSxzbil8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KHdlLGl0KXwwLHk9eStNYXRoLmltdWwoeGUsTHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1lLEx0KXwwLGI9YitNYXRoLmltdWwoTWUsd3QpfDAseT15K01hdGguaW11bChPZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2Us''@;'; put 'put ''UWUpfDAsYj1iK01hdGguaW11bChDZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHZlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodmUseXQpfDApK01hdGguaW11bCh1ZSxOZSl8MCxiPWIrTWF0aC5pbXVsKHVlLHl0KXwwLHk9eStNYXRoLmltdWwoUGUsYXQpfDAsbD0obD1sK01hdGguaW11bChQZSxf''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFplLGF0KXwwLGI9YitNYXRoLmltdWwoWmUsX3QpfDA7dmFyIHVhPShMKyh5PXkrTWF0aC5pbXVsKEcsJHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLEh0KXwwKStNYXRoLmltdWwoUSwkdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChR''@;'; put 'put ''LEh0KXwwKSsobD4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMseT1NYXRoLmltdWwodHQseHQpLGw9KGw9TWF0aC5pbXVsKHR0LFR0KSkrTWF0aC5pbXVsKFVlLHh0KXwwLGI9TWF0aC5pbXVsKFVlLFR0KSx5PXkrTWF0aC5pbXVsKGh0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''aHQsUXQpfDApK01hdGguaW11bCh2dCxYdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LFF0KXwwLHk9eStNYXRoLmltdWwoS2Usc24pfDAsbD0obD1sK01hdGguaW11bChLZSxpdCl8MCkrTWF0aC5pbXVsKFllLHNuKXwwLGI9YitNYXRoLmltdWwoWWUsaXQpfDAseT15K01hdGguaW11bChiZSxMdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKGJlLHd0KXwwKStNYXRoLmltdWwod2UsTHQpfDAsYj1iK01hdGguaW11bCh3ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHhlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11bChNZSxRZSl8MCxiPWIrTWF0aC5pbXVsKE1lLFB0KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwoT2UsTmUpfDAsbD0obD1sK01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLGI9YitNYXRoLmltdWwoQ2UseXQpfDAseT15K01hdGguaW11bCh2ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsYj1iK01h''@;'; put 'put ''dGguaW11bCh1ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKFBlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsSHQpfDApK01hdGguaW11bChaZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFplLEh0KXwwO3ZhciBGaT0oTCsoeT15K01hdGguaW11bChHLG5uKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRo''@;'; put 'put ''LmltdWwoRyxsbil8MCkrTWF0aC5pbXVsKFEsbm4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxsbil8MCkrKGw+Pj4xMyl8MCkrKEZpPj4+MjYpfDAsRmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHh0KSxsPShsPU1hdGguaW11bChMZSxUdCkpK01hdGguaW11bChudCx4dCl8''@;'; put 'put ''MCxiPU1hdGguaW11bChudCxUdCkseT15K01hdGguaW11bCh0dCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFF0KXwwKStNYXRoLmltdWwoVWUsWHQpfDAsYj1iK01hdGguaW11bChVZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGh0LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsaXQpfDApK01h''@;'; put 'put ''dGguaW11bCh2dCxzbil8MCxiPWIrTWF0aC5pbXVsKHZ0LGl0KXwwLHk9eStNYXRoLmltdWwoS2UsTHQpfDAsbD0obD1sK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLEx0KXwwLGI9YitNYXRoLmltdWwoWWUsd3QpfDAseT15K01hdGguaW11bChiZSxRZSl8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKGJlLFB0KXwwKStNYXRoLmltdWwod2UsUWUpfDAsYj1iK01hdGguaW11bCh3ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHhlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUseXQpfDApK01hdGguaW11bChNZSxOZSl8MCxiPWIrTWF0aC5pbXVsKE1lLHl0KXwwLHk9eStNYXRoLmltdWwo''@;'; put 'put ''T2UsYXQpfDAsbD0obD1sK01hdGguaW11bChPZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLGI9YitNYXRoLmltdWwoQ2UsX3QpfDAseT15K01hdGguaW11bCh2ZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLEh0KXwwKStNYXRoLmltdWwodWUsJHQpfDAsYj1iK01hdGguaW11bCh1ZSxI''@;'; put 'put ''dCl8MCx5PXkrTWF0aC5pbXVsKFBlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsbG4pfDApK01hdGguaW11bChaZSxubil8MCxiPWIrTWF0aC5pbXVsKFplLGxuKXwwO3ZhciBSYT0oTCsoeT15K01hdGguaW11bChHLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxHdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFEsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFh0KSxsPShsPU1hdGguaW11bChMZSxRdCkpK01hdGguaW11bChudCxYdCl8MCxiPU1hdGguaW11''@;'; put 'put ''bChudCxRdCkseT15K01hdGguaW11bCh0dCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGl0KXwwKStNYXRoLmltdWwoVWUsc24pfDAsYj1iK01hdGguaW11bChVZSxpdCl8MCx5PXkrTWF0aC5pbXVsKGh0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsd3QpfDApK01hdGguaW11bCh2dCxM''@;'; put 'put ''dCl8MCxiPWIrTWF0aC5pbXVsKHZ0LHd0KXwwLHk9eStNYXRoLmltdWwoS2UsUWUpfDAsbD0obD1sK01hdGguaW11bChLZSxQdCl8MCkrTWF0aC5pbXVsKFllLFFlKXwwLGI9YitNYXRoLmltdWwoWWUsUHQpfDAseT15K01hdGguaW11bChiZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHl0''@;'; put 'put ''KXwwKStNYXRoLmltdWwod2UsTmUpfDAsYj1iK01hdGguaW11bCh3ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKHhlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsX3QpfDApK01hdGguaW11bChNZSxhdCl8MCxiPWIrTWF0aC5pbXVsKE1lLF90KXwwLHk9eStNYXRoLmltdWwoT2UsJHQpfDAsbD0o''@;'; put 'put ''bD1sK01hdGguaW11bChPZSxIdCl8MCkrTWF0aC5pbXVsKENlLCR0KXwwLGI9YitNYXRoLmltdWwoQ2UsSHQpfDAseT15K01hdGguaW11bCh2ZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKHZlLGxuKXwwKStNYXRoLmltdWwodWUsbm4pfDAsYj1iK01hdGguaW11bCh1ZSxsbil8MDt2YXIgb2k9''@;'; put 'put ''KEwrKHk9eStNYXRoLmltdWwoUGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChQZSxHdCl8MCkrTWF0aC5pbXVsKFplLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFplLEd0KXwwKSsobD4+PjEzKXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMseT1NYXRo''@;'; put 'put ''LmltdWwoTGUsc24pLGw9KGw9TWF0aC5pbXVsKExlLGl0KSkrTWF0aC5pbXVsKG50LHNuKXwwLGI9TWF0aC5pbXVsKG50LGl0KSx5PXkrTWF0aC5pbXVsKHR0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsd3QpfDApK01hdGguaW11bChVZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFVlLHd0KXww''@;'; put 'put ''LHk9eStNYXRoLmltdWwoaHQsUWUpfDAsbD0obD1sK01hdGguaW11bChodCxQdCl8MCkrTWF0aC5pbXVsKHZ0LFFlKXwwLGI9YitNYXRoLmltdWwodnQsUHQpfDAseT15K01hdGguaW11bChLZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLHl0KXwwKStNYXRoLmltdWwoWWUsTmUpfDAsYj1i''@;'; put 'put ''K01hdGguaW11bChZZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGJlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsX3QpfDApK01hdGguaW11bCh3ZSxhdCl8MCxiPWIrTWF0aC5pbXVsKHdlLF90KXwwLHk9eStNYXRoLmltdWwoeGUsJHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxIdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE1lLCR0KXwwLGI9YitNYXRoLmltdWwoTWUsSHQpfDAseT15K01hdGguaW11bChPZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGxuKXwwKStNYXRoLmltdWwoQ2Usbm4pfDAsYj1iK01hdGguaW11bChDZSxsbil8MDt2YXIgVWk9KEwrKHk9eStNYXRoLmltdWwodmUsYW4pfDAp''@;'; put 'put ''fDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh2ZSxHdCl8MCkrTWF0aC5pbXVsKHVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHVlLEd0KXwwKSsobD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTHQpLGw9KGw9TWF0aC5pbXVs''@;'; put 'put ''KExlLHd0KSkrTWF0aC5pbXVsKG50LEx0KXwwLGI9TWF0aC5pbXVsKG50LHd0KSx5PXkrTWF0aC5pbXVsKHR0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsUHQpfDApK01hdGguaW11bChVZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFVlLFB0KXwwLHk9eStNYXRoLmltdWwoaHQsTmUpfDAsbD0o''@;'; put 'put ''bD1sK01hdGguaW11bChodCx5dCl8MCkrTWF0aC5pbXVsKHZ0LE5lKXwwLGI9YitNYXRoLmltdWwodnQseXQpfDAseT15K01hdGguaW11bChLZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLF90KXwwKStNYXRoLmltdWwoWWUsYXQpfDAsYj1iK01hdGguaW11bChZZSxfdCl8MCx5PXkrTWF0''@;'; put 'put ''aC5pbXVsKGJlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsSHQpfDApK01hdGguaW11bCh3ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHdlLEh0KXwwLHk9eStNYXRoLmltdWwoeGUsbm4pfDAsbD0obD1sK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKE1lLG5uKXwwLGI9YitNYXRoLmlt''@;'; put 'put ''dWwoTWUsbG4pfDA7dmFyIFZhPShMKyh5PXkrTWF0aC5pbXVsKE9lLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChDZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChDZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFZhPj4+MjYpfDAs''@;'; put 'put ''VmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFFlKSxsPShsPU1hdGguaW11bChMZSxQdCkpK01hdGguaW11bChudCxRZSl8MCxiPU1hdGguaW11bChudCxQdCkseT15K01hdGguaW11bCh0dCxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsYj1i''@;'; put 'put ''K01hdGguaW11bChVZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGh0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsX3QpfDApK01hdGguaW11bCh2dCxhdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LF90KXwwLHk9eStNYXRoLmltdWwoS2UsJHQpfDAsbD0obD1sK01hdGguaW11bChLZSxIdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFllLCR0KXwwLGI9YitNYXRoLmltdWwoWWUsSHQpfDAseT15K01hdGguaW11bChiZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGxuKXwwKStNYXRoLmltdWwod2Usbm4pfDAsYj1iK01hdGguaW11bCh3ZSxsbil8MDt2YXIgdXI9KEwrKHk9eStNYXRoLmltdWwoeGUsYW4pfDAp''@;'; put 'put ''fDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh4ZSxHdCl8MCkrTWF0aC5pbXVsKE1lLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKE1lLEd0KXwwKSsobD4+PjEzKXwwKSsodXI+Pj4yNil8MCx1ciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTmUpLGw9KGw9TWF0aC5pbXVs''@;'; put 'put ''KExlLHl0KSkrTWF0aC5pbXVsKG50LE5lKXwwLGI9TWF0aC5pbXVsKG50LHl0KSx5PXkrTWF0aC5pbXVsKHR0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsX3QpfDApK01hdGguaW11bChVZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFVlLF90KXwwLHk9eStNYXRoLmltdWwoaHQsJHQpfDAsbD0o''@;'; put 'put ''bD1sK01hdGguaW11bChodCxIdCl8MCkrTWF0aC5pbXVsKHZ0LCR0KXwwLGI9YitNYXRoLmltdWwodnQsSHQpfDAseT15K01hdGguaW11bChLZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUsbm4pfDAsYj1iK01hdGguaW11bChZZSxsbil8MDt2YXIgZmE9''@;'; put 'put ''KEwrKHk9eStNYXRoLmltdWwoYmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChiZSxHdCl8MCkrTWF0aC5pbXVsKHdlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHdlLEd0KXwwKSsobD4+PjEzKXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMseT1NYXRo''@;'; put 'put ''LmltdWwoTGUsYXQpLGw9KGw9TWF0aC5pbXVsKExlLF90KSkrTWF0aC5pbXVsKG50LGF0KXwwLGI9TWF0aC5pbXVsKG50LF90KSx5PXkrTWF0aC5pbXVsKHR0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsSHQpfDApK01hdGguaW11bChVZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFVlLEh0KXww''@;'; put 'put ''LHk9eStNYXRoLmltdWwoaHQsbm4pfDAsbD0obD1sK01hdGguaW11bChodCxsbil8MCkrTWF0aC5pbXVsKHZ0LG5uKXwwLGI9YitNYXRoLmltdWwodnQsbG4pfDA7dmFyIHhpPShMKyh5PXkrTWF0aC5pbXVsKEtlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoS2UsR3QpfDAp''@;'; put 'put ''K01hdGguaW11bChZZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChZZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLCR0KSxsPShsPU1hdGguaW11bChMZSxIdCkpK01hdGguaW11bChudCwkdCl8MCxiPU1hdGguaW11''@;'; put 'put ''bChudCxIdCkseT15K01hdGguaW11bCh0dCxubil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsYj1iK01hdGguaW11bChVZSxsbil8MDt2YXIgb2E9KEwrKHk9eStNYXRoLmltdWwoaHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCho''@;'; put 'put ''dCxHdCl8MCkrTWF0aC5pbXVsKHZ0LGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHZ0LEd0KXwwKSsobD4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsbm4pLGw9KGw9TWF0aC5pbXVsKExlLGxuKSkrTWF0aC5pbXVsKG50LG5uKXwwLGI9''@;'; put 'put ''TWF0aC5pbXVsKG50LGxuKTt2YXIgWGk9KEwrKHk9eStNYXRoLmltdWwodHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh0dCxHdCl8MCkrTWF0aC5pbXVsKFVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFVlLEd0KXwwKSsobD4+PjEzKXwwKSsoWGk+Pj4y''@;'; put 'put ''Nil8MCxYaSY9NjcxMDg4NjM7dmFyIElyPShMKyh5PU1hdGguaW11bChMZSxhbikpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoTGUsR3QpKStNYXRoLmltdWwobnQsYW4pfDApKTw8MTMpfDA7cmV0dXJuIEw9KChiPU1hdGguaW11bChudCxHdCkpKyhsPj4+MTMpfDApKyhJcj4+PjI2KXww''@;'; put 'put ''LElyJj02NzEwODg2MyxrWzBdPWVhLGtbMV09bWksa1syXT1mcixrWzNdPSRpLGtbNF09S2ksa1s1XT1WaSxrWzZdPXFyLGtbN109dWEsa1s4XT1GaSxrWzldPVJhLGtbMTBdPW9pLGtbMTFdPVVpLGtbMTJdPVZhLGtbMTNdPXVyLGtbMTRdPWZhLGtbMTVdPXhpLGtbMTZdPW9hLGtbMTddPVhp''@;'; put 'put ''LGtbMThdPUlyLDAhPT1MJiYoa1sxOV09TCx2Lmxlbmd0aCsrKSx2fTtmdW5jdGlvbiBaKFIscyx1KXtyZXR1cm4obmV3IFUpLm11bHAoUixzLHUpfWZ1bmN0aW9uIFUoUixzKXt0aGlzLng9Uix0aGlzLnk9c31NYXRoLmltdWx8fChIPU4pLGYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHMs''@;'; put 'put ''dSl7dmFyIHYscD10aGlzLmxlbmd0aCtzLmxlbmd0aDtyZXR1cm4gdj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXMubGVuZ3RoP0godGhpcyxzLHUpOnA8NjM/Tih0aGlzLHMsdSk6cDwxMDI0P2Z1bmN0aW9uIHooUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlLHUubGVu''@;'; put 'put ''Z3RoPVIubGVuZ3RoK3MubGVuZ3RoO2Zvcih2YXIgdj0wLHA9MCxfPTA7Xzx1Lmxlbmd0aC0xO18rKyl7dmFyIGs9cDtwPTA7Zm9yKHZhciBMPTY3MTA4ODYzJnYseT1NYXRoLm1pbihfLHMubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCxfLVIubGVuZ3RoKzEpO2w8PXk7bCsrKXt2YXIgUT0oMHxS''@;'; put 'put ''LndvcmRzW18tbF0pKigwfHMud29yZHNbbF0pLHBlPTY3MTA4ODYzJlE7TD02NzEwODg2MyYocGU9cGUrTHwwKSxwKz0oaz0oaz1rKyhRLzY3MTA4ODY0fDApfDApKyhwZT4+PjI2KXwwKT4+PjI2LGsmPTY3MTA4ODYzfXUud29yZHNbX109TCx2PWssaz1wfXJldHVybiAwIT09dj91LndvcmRz''@;'; put 'put ''W19dPXY6dS5sZW5ndGgtLSx1LnN0cmlwKCl9KHRoaXMscyx1KTpaKHRoaXMscyx1KSx2fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT1uZXcgQXJyYXkocyksdj1mLnByb3RvdHlwZS5fY291bnRCaXRzKHMpLTEscD0wO3A8cztwKyspdVtwXT10aGlzLnJldkJp''@;'; put 'put ''bihwLHYscyk7cmV0dXJuIHV9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihzLHUsdil7aWYoMD09PXN8fHM9PT12LTEpcmV0dXJuIHM7Zm9yKHZhciBwPTAsXz0wO188dTtfKyspcHw9KDEmcyk8PHUtXy0xLHM+Pj0xO3JldHVybiBwfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9u''@;'; put 'put ''KHMsdSx2LHAsXyxrKXtmb3IodmFyIEw9MDtMPGs7TCsrKXBbTF09dVtzW0xdXSxfW0xdPXZbc1tMXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihzLHUsdixwLF8sayl7dGhpcy5wZXJtdXRlKGsscyx1LHYscCxfKTtmb3IodmFyIEw9MTtMPF87TDw8PTEpZm9yKHZhciB5PUw8''@;'; put 'put ''PDEsbD1NYXRoLmNvcygyKk1hdGguUEkveSksYj1NYXRoLnNpbigyKk1hdGguUEkveSkscT0wO3E8XztxKz15KWZvcih2YXIgRz1sLFE9YixwZT0wO3BlPEw7cGUrKyl7dmFyIFBlPXZbcStwZV0sWmU9cFtxK3BlXSxxZT12W3ErcGUrTF0sdmU9cFtxK3BlK0xdLHVlPUcqcWUtUSp2ZTt2ZT1H''@;'; put 'put ''KnZlK1EqcWUsdltxK3BlXT1QZSsocWU9dWUpLHBbcStwZV09WmUrdmUsdltxK3BlK0xdPVBlLXFlLHBbcStwZStMXT1aZS12ZSxwZSE9PXkmJih1ZT1sKkctYipRLFE9bCpRK2IqRyxHPXVlKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHMsdSl7dmFyIHY9MXxNYXRoLm1h''@;'; put 'put ''eCh1LHMpLHA9MSZ2LF89MDtmb3Iodj12LzJ8MDt2O3Y+Pj49MSlfKys7cmV0dXJuIDE8PF8rMStwfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocyx1LHYpe2lmKCEodjw9MSkpZm9yKHZhciBwPTA7cDx2LzI7cCsrKXt2YXIgXz1zW3BdO3NbcF09c1t2LXAtMV0sc1t2LXAtMV09''@;'; put 'put ''XyxfPXVbcF0sdVtwXT0tdVt2LXAtMV0sdVt2LXAtMV09LV99fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9MCxwPTA7cDx1LzI7cCsrKXt2YXIgXz04MTkyKk1hdGgucm91bmQoc1syKnArMV0vdSkrTWF0aC5yb3VuZChzWzIqcF0vdSkrdjtzW3Bd''@;'; put 'put ''PTY3MTA4ODYzJl8sdj1fPDY3MTA4ODY0PzA6Xy82NzEwODg2NHwwfXJldHVybiBzfSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHMsdSx2LHApe2Zvcih2YXIgXz0wLGs9MDtrPHU7aysrKXZbMiprXT04MTkxJihfKz0wfHNba10pLHZbMiprKzFdPTgxOTEmKF8+Pj49MTMpLF8+''@;'; put 'put ''Pj49MTM7Zm9yKGs9Mip1O2s8cDsrK2spdltrXT0wO28oMD09PV8pLG8oISgtODE5MiZfKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PW5ldyBBcnJheShzKSx2PTA7djxzO3YrKyl1W3ZdPTA7cmV0dXJuIHV9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocyx1''@;'; put 'put ''LHYpe3ZhciBwPTIqdGhpcy5ndWVzc0xlbjEzYihzLmxlbmd0aCx1Lmxlbmd0aCksXz10aGlzLm1ha2VSQlQocCksaz10aGlzLnN0dWIocCksTD1uZXcgQXJyYXkocCkseT1uZXcgQXJyYXkocCksbD1uZXcgQXJyYXkocCksYj1uZXcgQXJyYXkocCkscT1uZXcgQXJyYXkocCksRz1uZXcgQXJy''@;'; put 'put ''YXkocCksUT12LndvcmRzO1EubGVuZ3RoPXAsdGhpcy5jb252ZXJ0MTNiKHMud29yZHMscy5sZW5ndGgsTCxwKSx0aGlzLmNvbnZlcnQxM2IodS53b3Jkcyx1Lmxlbmd0aCxiLHApLHRoaXMudHJhbnNmb3JtKEwsayx5LGwscCxfKSx0aGlzLnRyYW5zZm9ybShiLGsscSxHLHAsXyk7Zm9yKHZh''@;'; put 'put ''ciBwZT0wO3BlPHA7cGUrKyl7dmFyIFBlPXlbcGVdKnFbcGVdLWxbcGVdKkdbcGVdO2xbcGVdPXlbcGVdKkdbcGVdK2xbcGVdKnFbcGVdLHlbcGVdPVBlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh5LGwscCksdGhpcy50cmFuc2Zvcm0oeSxsLFEsayxwLF8pLHRoaXMuY29uanVnYXRlKFEsayxw''@;'; put 'put ''KSx0aGlzLm5vcm1hbGl6ZTEzYihRLHApLHYubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPXMubGVuZ3RoK3UubGVuZ3RoLHYuc3RyaXAoKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksdGhpcy5tdWxUbyhzLHUpfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksWih0aGlzLHMsdSl9LGYucHJvdG90eXBlLmltdWw9''@;'; put 'put ''ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhzLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KTtmb3IodmFyIHU9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciBwPSgwfHRoaXMud29y''@;'; put 'put ''ZHNbdl0pKnMsXz0oNjcxMDg4NjMmcCkrKDY3MTA4ODYzJnUpO3U+Pj0yNix1Kz1wLzY3MTA4ODY0fDAsdSs9Xz4+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmX31yZXR1cm4gMCE9PXUmJih0aGlzLndvcmRzW3ZdPXUsdGhpcy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUubXVsbj1m''@;'; put 'put ''dW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHMpfSxmLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBv''@;'; put 'put ''dz1mdW5jdGlvbihzKXt2YXIgdT1mdW5jdGlvbiBGKFIpe2Zvcih2YXIgcz1uZXcgQXJyYXkoUi5iaXRMZW5ndGgoKSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1''@;'; put 'put ''cm4gbmV3IGYoMSk7Zm9yKHZhciB2PXRoaXMscD0wO3A8dS5sZW5ndGgmJjA9PT11W3BdO3ArKyx2PXYuc3FyKCkpO2lmKCsrcDx1Lmxlbmd0aClmb3IodmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90''@;'; put 'put ''b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgXyx1PXMlMjYsdj0ocy11KS8yNixwPTY3MTA4ODYzPj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19d''@;'; put 'put ''JnA7dGhpcy53b3Jkc1tfXT0oMHx0aGlzLndvcmRzW19dKS1MPDx1fGssaz1MPj4+MjYtdX1rJiYodGhpcy53b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRoaXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7''@;'; put 'put ''Xzx2O18rKyl0aGlzLndvcmRzW19dPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1''@;'; put 'put ''LHYpe3ZhciBwO28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKSxwPXU/KHUtdSUyNikvMjY6MDt2YXIgXz1zJTI2LGs9TWF0aC5taW4oKHMtXykvMjYsdGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFy''@;'; put 'put ''IGw9MDtsPGs7bCsrKXkud29yZHNbbF09dGhpcy53b3Jkc1tsXTt5Lmxlbmd0aD1rfWlmKDAhPT1rKWlmKHRoaXMubGVuZ3RoPmspZm9yKHRoaXMubGVuZ3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09''@;'; put 'put ''MCx0aGlzLmxlbmd0aD0xO3ZhciBiPTA7Zm9yKGw9dGhpcy5sZW5ndGgtMTtsPj0wJiYoMCE9PWJ8fGw+PXApO2wtLSl7dmFyIHE9MHx0aGlzLndvcmRzW2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIp''@;'; put 'put ''LDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1''@;'; put 'put ''bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocyl9LGYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJv''@;'; put 'put ''dG90eXBlLnVzaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHMpfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhp''@;'; put 'put ''cy53b3Jkc1t2XSYxPDx1KSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLmxlbmd0aDw9dj90aGlzOigwIT09dSYmdisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHYsdGhpcy5sZW5ndGgpLDAhPT11JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51PDx1KSx0aGlzLnN0cmlwKCkpfSxmLnByb3RvdHlwZS5tYXNr''@;'; put 'put ''bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihzKX0sZi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MD90aGlzLmlzdWJuKC1zKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHM/KHRoaXMud29yZHNbMF09cy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihzKX0sZi5wcm90b3R5cGUu''@;'; put 'put ''X2lhZGRuPWZ1bmN0aW9uKHMpe3RoaXMud29yZHNbMF0rPXM7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XT49NjcxMDg4NjQ7dSsrKXRoaXMud29yZHNbdV0tPTY3MTA4ODY0LHU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbdSsxXT0xOnRoaXMud29yZHNbdSsx''@;'; put 'put ''XSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx1KzEpLHRoaXN9LGYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHMpe2lmKG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MClyZXR1cm4gdGhpcy5pYWRkbigtcyk7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxz''@;'; put 'put ''ZSBmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3VdPDA7dSsrKXRoaXMud29yZHNbdV0rPTY3MTA4ODY0LHRoaXMud29yZHNbdSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFk''@;'; put 'put ''ZG4ocyl9LGYucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihzKX0sZi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sZi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pYWJzKCl9LGYucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihzLHUsdil7dmFyIF87dGhpcy5fZXhwYW5kKHMubGVuZ3RoK3YpO3ZhciBrLEw9MDtmb3IoXz0wO188cy5sZW5ndGg7XysrKXtrPSgwfHRoaXMud29yZHNbXyt2XSkrTDt2YXIgeT0oMHxzLndvcmRzW19dKSp1''@;'; put 'put ''O0w9KChrLT02NzEwODg2MyZ5KT4+MjYpLSh5LzY3MTA4ODY0fDApLHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrfWZvcig7Xzx0aGlzLmxlbmd0aC12O18rKylMPShrPSgwfHRoaXMud29yZHNbXyt2XSkrTCk+PjI2LHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrO2lmKDA9PT1MKXJldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCk7Zm9yKG8oLTE9PT1MKSxMPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUw9KGs9LSgwfHRoaXMud29yZHNbX10pK0wpPj4yNix0aGlzLndvcmRzW19dPTY3MTA4ODYzJms7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl93b3Jk''@;'; put 'put ''RGl2PWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10aGlzLmNsb25lKCksXz1zLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdOzAhPSh2PTI2LXRoaXMuX2NvdW50Qml0cyhrKSkmJihfPV8udXNobG4odikscC5pdXNobG4odiksaz0wfF8ud29yZHNbXy5sZW5ndGgtMV0pO3ZhciBsLHk9cC5sZW5ndGgt''@;'; put 'put ''Xy5sZW5ndGg7aWYoIm1vZCIhPT11KXsobD1uZXcgZihudWxsKSkubGVuZ3RoPXkrMSxsLndvcmRzPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKHZhciBiPTA7YjxsLmxlbmd0aDtiKyspbC53b3Jkc1tiXT0wfXZhciBxPXAuY2xvbmUoKS5faXNobG5zdWJtdWwoXywxLHkpOzA9PT1xLm5lZ2F0''@;'; put 'put ''aXZlJiYocD1xLGwmJihsLndvcmRzW3ldPTEpKTtmb3IodmFyIEc9eS0xO0c+PTA7Ry0tKXt2YXIgUT02NzEwODg2NCooMHxwLndvcmRzW18ubGVuZ3RoK0ddKSsoMHxwLndvcmRzW18ubGVuZ3RoK0ctMV0pO2ZvcihRPU1hdGgubWluKFEva3wwLDY3MTA4ODYzKSxwLl9pc2hsbnN1Ym11bChf''@;'; put 'put ''LFEsRyk7MCE9PXAubmVnYXRpdmU7KVEtLSxwLm5lZ2F0aXZlPTAscC5faXNobG5zdWJtdWwoXywxLEcpLHAuaXNaZXJvKCl8fChwLm5lZ2F0aXZlXj0xKTtsJiYobC53b3Jkc1tHXT1RKX1yZXR1cm4gbCYmbC5zdHJpcCgpLHAuc3RyaXAoKSwiZGl2IiE9PXUmJjAhPT12JiZwLml1c2hybih2''@;'; put 'put ''KSx7ZGl2Omx8fG51bGwsbW9kOnB9fSxmLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocyx1LHYpe3JldHVybiBvKCFzLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGYoMCksbW9kOm5ldyBmKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmU/KGs9dGhpcy5u''@;'; put 'put ''ZWcoKS5kaXZtb2Qocyx1KSwibW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlhZGQocykpLHtkaXY6cCxtb2Q6X30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZT8oaz10aGlzLmRpdm1vZChz''@;'; put 'put ''Lm5lZygpLHUpLCJtb2QiIT09dSYmKHA9ay5kaXYubmVnKCkpLHtkaXY6cCxtb2Q6ay5tb2R9KTp0aGlzLm5lZ2F0aXZlJnMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocy5uZWcoKSx1KSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlzdWIo''@;'; put 'put ''cykpLHtkaXY6ay5kaXYsbW9kOl99KTpzLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocyk8MD97ZGl2Om5ldyBmKDApLG1vZDp0aGlzfToxPT09cy5sZW5ndGg/ImRpdiI9PT11P3tkaXY6dGhpcy5kaXZuKHMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXU/e2RpdjpudWxsLG1v''@;'; put 'put ''ZDpuZXcgZih0aGlzLm1vZG4ocy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihzLHUpO3ZhciBwLF8sa30sZi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRp''@;'; put 'put ''dm1vZChzLCJkaXYiLCExKS5kaXZ9LGYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMSkubW9kfSxmLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJtb2QiLCEwKS5tb2R9LGYucHJvdG90eXBlLmRp''@;'; put 'put ''dlJvdW5kPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuZGl2bW9kKHMpO2lmKHUubW9kLmlzWmVybygpKXJldHVybiB1LmRpdjt2YXIgdj0wIT09dS5kaXYubmVnYXRpdmU/dS5tb2QuaXN1YihzKTp1Lm1vZCxwPXMudXNocm4oMSksXz1zLmFuZGxuKDEpLGs9di5jbXAocCk7cmV0dXJuIGs8MHx8''@;'; put 'put ''MT09PV8mJjA9PT1rP3UuZGl2OjAhPT11LmRpdi5uZWdhdGl2ZT91LmRpdi5pc3VibigxKTp1LmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9KDE8PDI2KSVzLHY9MCxwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdj0o''@;'; put 'put ''dSp2KygwfHRoaXMud29yZHNbcF0pKSVzO3JldHVybiB2fSxmLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKzY3MTA4ODY0KnU7dGhpcy53b3Jkc1t2''@;'; put 'put ''XT1wL3N8MCx1PXAlc31yZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocyl9LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHU9dGhp''@;'; put 'put ''cyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz1uZXcgZigwKSxMPW5ldyBmKDEpLHk9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpOyl1Lml1c2hybigxKSx2Lml1c2hybigxKSwrK3k7Zm9yKHZh''@;'; put 'put ''ciBsPXYuY2xvbmUoKSxiPXUuY2xvbmUoKTshdS5pc1plcm8oKTspe2Zvcih2YXIgcT0wLEc9MTshKHUud29yZHNbMF0mRykmJnE8MjY7KytxLEc8PD0xKTtpZihxPjApZm9yKHUuaXVzaHJuKHEpO3EtLSA+MDspKHAuaXNPZGQoKXx8Xy5pc09kZCgpKSYmKHAuaWFkZChsKSxfLmlzdWIoYikp''@;'; put 'put ''LHAuaXVzaHJuKDEpLF8uaXVzaHJuKDEpO2Zvcih2YXIgUT0wLHBlPTE7ISh2LndvcmRzWzBdJnBlKSYmUTwyNjsrK1EscGU8PD0xKTtpZihRPjApZm9yKHYuaXVzaHJuKFEpO1EtLSA+MDspKGsuaXNPZGQoKXx8TC5pc09kZCgpKSYmKGsuaWFkZChsKSxMLmlzdWIoYikpLGsuaXVzaHJuKDEp''@;'; put 'put ''LEwuaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3ViKGspLF8uaXN1YihMKSk6KHYuaXN1Yih1KSxrLmlzdWIocCksTC5pc3ViKF8pKX1yZXR1cm57YTprLGI6TCxnY2Q6di5pdXNobG4oeSl9fSxmLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdh''@;'; put 'put ''dGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHEsdT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUubmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3IodmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPXYuY2xvbmUoKTt1LmNtcG4oMSk+MCYmdi5jbXBuKDEpPjA7KXtmb3IodmFyIEw9MCx5''@;'; put 'put ''PTE7ISh1LndvcmRzWzBdJnkpJiZMPDI2OysrTCx5PDw9MSk7aWYoTD4wKWZvcih1Lml1c2hybihMKTtMLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKGspLHAuaXVzaHJuKDEpO2Zvcih2YXIgbD0wLGI9MTshKHYud29yZHNbMF0mYikmJmw8MjY7KytsLGI8PD0xKTtpZihsPjApZm9yKHYuaXVz''@;'; put 'put ''aHJuKGwpO2wtLSA+MDspXy5pc09kZCgpJiZfLmlhZGQoayksXy5pdXNocm4oMSk7dS5jbXAodik+PTA/KHUuaXN1Yih2KSxwLmlzdWIoXykpOih2LmlzdWIodSksXy5pc3ViKHApKX1yZXR1cm4ocT0wPT09dS5jbXBuKDEpP3A6XykuY21wbigwKTwwJiZxLmlhZGQocykscX0sZi5wcm90b3R5''@;'; put 'put ''cGUuZ2NkPWZ1bmN0aW9uKHMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHMuYWJzKCk7aWYocy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgdT10aGlzLmNsb25lKCksdj1zLmNsb25lKCk7dS5uZWdhdGl2ZT0wLHYubmVnYXRpdmU9MDtmb3IodmFyIHA9MDt1LmlzRXZlbigpJiZ2''@;'; put 'put ''LmlzRXZlbigpO3ArKyl1Lml1c2hybigxKSx2Lml1c2hybigxKTtmb3IoOzspe2Zvcig7dS5pc0V2ZW4oKTspdS5pdXNocm4oMSk7Zm9yKDt2LmlzRXZlbigpOyl2Lml1c2hybigxKTt2YXIgXz11LmNtcCh2KTtpZihfPDApe3ZhciBrPXU7dT12LHY9a31lbHNlIGlmKDA9PT1ffHwwPT09di5j''@;'; put 'put ''bXBuKDEpKWJyZWFrO3UuaXN1Yih2KX1yZXR1cm4gdi5pdXNobG4ocCl9LGYucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZWdjZChzKS5hLnVtb2Qocyl9LGYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sZi5wcm90''@;'; put 'put ''b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZzfSxmLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2Ygcyk7dmFyIHU9cyUy''@;'; put 'put ''Nix2PShzLXUpLzI2LHA9MTw8dTtpZih0aGlzLmxlbmd0aDw9dilyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XXw9cCx0aGlzO2Zvcih2YXIgXz1wLGs9djswIT09XyYmazx0aGlzLmxlbmd0aDtrKyspe3ZhciBMPTB8dGhpcy53b3Jkc1trXTtfPShMKz1fKT4+PjI2LHRo''@;'; put 'put ''aXMud29yZHNba109TCY9NjcxMDg4NjN9cmV0dXJuIDAhPT1fJiYodGhpcy53b3Jkc1trXT1fLHRoaXMubGVuZ3RoKyspLHRoaXN9LGYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxmLnByb3RvdHlwZS5jbXBu''@;'; put 'put ''PWZ1bmN0aW9uKHMpe3ZhciB2LHU9czwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhdSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl2PTE7ZWxzZXt1JiYocz0tcyksbyhzPD02NzEwODg2MywiTnVtYmVyIGlz''@;'; put 'put ''IHRvbyBiaWciKTt2YXIgcD0wfHRoaXMud29yZHNbMF07dj1wPT09cz8wOnA8cz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC12OnZ9LGYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihzKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB1PXRoaXMudWNtcChzKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdTp1fSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHMpe2lmKHRoaXMubGVuZ3RoPnMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVu''@;'; put 'put ''Z3RoPHMubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9MHx0aGlzLndvcmRzW3ZdLF89MHxzLndvcmRzW3ZdO2lmKHAhPT1fKXtwPF8/dT0tMTpwPl8mJih1PTEpO2JyZWFrfX1yZXR1cm4gdX0sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0''@;'; put 'put ''aW9uKHMpe3JldHVybiAxPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wKHMpfSxmLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcG4ocyk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihzKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbXAocyk+PTB9LGYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbXBuKHMpPD0wfSxmLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPD0wfSxmLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXAo''@;'; put 'put ''cyl9LGYucmVkPWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgbWUocyl9LGYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG8oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcG9zaXRpdmVzIikscy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5j''@;'; put 'put ''b252ZXJ0RnJvbSh0aGlzKX0sZi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnJlZD1zLHRoaXN9LGYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4''@;'; put 'put ''dCIpLHRoaXMuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihzKXty''@;'; put 'put ''ZXR1cm4gbyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLnN1Yih0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3JldHVybiBvKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscyksdGhpcy5yZWQubXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRo''@;'; put 'put ''aXMucmVkLmltdWwodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGYucHJvdG90eXBlLnJl''@;'; put 'put ''ZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5y''@;'; put 'put ''ZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sZi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks''@;'; put 'put ''dGhpcy5yZWQubmVnKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQmJiFzLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxzKX07dmFyIEs9e2syNTY6bnVsbCxwMjI0''@;'; put 'put ''Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBYKFIscyl7dGhpcy5uYW1lPVIsdGhpcy5wPW5ldyBmKHMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBmKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAo''@;'; put 'put ''KX1mdW5jdGlvbiBuZSgpe1guY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBzZSgpe1guY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBoZSgpe1guY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBfZSgpe1guY2FsbCh0aGlzLCIyNTUx''@;'; put 'put ''OSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBtZShSKXtpZigic3RyaW5nIj09dHlwZW9mIFIpe3ZhciBzPWYuX3ByaW1lKFIpO3RoaXMubT1zLnAsdGhpcy5wcmltZT1zfWVsc2UgbyhSLmd0''@;'; put 'put ''bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEZlKFIpe21lLmNhbGwodGhpcyxSKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5z''@;'; put 'put ''aGlmdCUyNiksdGhpcy5yPW5ldyBmKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlz''@;'; put 'put ''Lm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVgucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gcy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHN9LFgucHJvdG90''@;'; put 'put ''eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocyl7dmFyIHYsdT1zO2Rve3RoaXMuc3BsaXQodSx0aGlzLnRtcCksdj0odT0odT10aGlzLmltdWxLKHUpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUodj50aGlzLm4pO3ZhciBwPXY8dGhpcy5uPy0xOnUudWNtcCh0aGlzLnApO3JldHVy''@;'; put 'put ''biAwPT09cD8odS53b3Jkc1swXT0wLHUubGVuZ3RoPTEpOnA+MD91LmlzdWIodGhpcy5wKTp2b2lkIDAhPT11LnN0cmlwP3Uuc3RyaXAoKTp1Ll9zdHJpcCgpLHV9LFgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7cy5pdXNocm4odGhpcy5uLDAsdSl9LFgucHJvdG90eXBlLmltdWxL''@;'; put 'put ''PWZ1bmN0aW9uKHMpe3JldHVybiBzLmltdWwodGhpcy5rKX0sSShuZSxYKSxuZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9NDE5NDMwMyxwPU1hdGgubWluKHMubGVuZ3RoLDkpLF89MDtfPHA7XysrKXUud29yZHNbX109cy53b3Jkc1tfXTtpZih1Lmxlbmd0aD1w''@;'; put 'put ''LHMubGVuZ3RoPD05KXJldHVybiBzLndvcmRzWzBdPTAsdm9pZChzLmxlbmd0aD0xKTt2YXIgaz1zLndvcmRzWzldO2Zvcih1LndvcmRzW3UubGVuZ3RoKytdPWsmdixfPTEwO188cy5sZW5ndGg7XysrKXt2YXIgTD0wfHMud29yZHNbX107cy53b3Jkc1tfLTEwXT0oTCZ2KTw8NHxrPj4+MjIs''@;'; put 'put ''az1MfXMud29yZHNbXy0xMF09az4+Pj0yMixzLmxlbmd0aC09MD09PWsmJnMubGVuZ3RoPjEwPzEwOjl9LG5lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtzLndvcmRzW3MubGVuZ3RoXT0wLHMud29yZHNbcy5sZW5ndGgrMV09MCxzLmxlbmd0aCs9Mjtmb3IodmFyIHU9MCx2PTA7djxz''@;'; put 'put ''Lmxlbmd0aDt2Kyspe3ZhciBwPTB8cy53b3Jkc1t2XTtzLndvcmRzW3ZdPTY3MTA4ODYzJih1Kz05NzcqcCksdT02NCpwKyh1LzY3MTA4ODY0fDApfXJldHVybiAwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmKHMubGVuZ3RoLS0sMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJnMubGVuZ3RoLS0p''@;'; put 'put ''LHN9LEkoc2UsWCksSShoZSxYKSxJKF9lLFgpLF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTE5KigwfHMud29yZHNbdl0pK3UsXz02NzEwODg2MyZwO3A+Pj49MjYscy53b3Jkc1t2XT1fLHU9cH1yZXR1cm4gMCE9''@;'; put 'put ''PXUmJihzLndvcmRzW3MubGVuZ3RoKytdPXUpLHN9LGYuX3ByaW1lPWZ1bmN0aW9uKHMpe2lmKEtbc10pcmV0dXJuIEtbc107dmFyIHU7aWYoImsyNTYiPT09cyl1PW5ldyBuZTtlbHNlIGlmKCJwMjI0Ij09PXMpdT1uZXcgc2U7ZWxzZSBpZigicDE5MiI9PT1zKXU9bmV3IGhlO2Vsc2V7aWYo''@;'; put 'put ''InAyNTUxOSIhPT1zKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3MpO3U9bmV3IF9lfXJldHVybiBLW3NdPXUsdX0sbWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJl''@;'; put 'put ''ZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocyx1KXtvKCEocy5uZWdhdGl2ZXx1Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHMucmVkJiZzLnJlZD09PXUucmVkLCJyZWQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LG1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShzKS5fZm9yY2VSZWQodGhpcyk6cy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUubmVnPWZ1''@;'; put 'put ''bmN0aW9uKHMpe3JldHVybiBzLmlzWmVybygpP3MuY2xvbmUoKTp0aGlzLm0uc3ViKHMpLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3Vi''@;'; put 'put ''KHRoaXMubSksdi5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuaWFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihz''@;'; put 'put ''LHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLnN1Yih1KTtyZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlzdWIodSk7cmV0dXJu''@;'; put 'put ''IHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5tKSx2fSxtZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocyksdGhpcy5pbW9kKHMudXNobG4odSkpfSxtZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMs''@;'; put 'put ''dSksdGhpcy5pbW9kKHMuaW11bCh1KSl9LG1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChzLm11bCh1KSl9LG1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltdWwocyxzLmNsb25lKCkpfSxt''@;'; put 'put ''ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLm11bChzLHMpfSxtZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihzKXtpZihzLmlzWmVybygpKXJldHVybiBzLmNsb25lKCk7dmFyIHU9dGhpcy5tLmFuZGxuKDMpO2lmKG8odSUyPT0xKSwzPT09dSl7dmFyIHY9dGhpcy5t''@;'; put 'put ''LmFkZChuZXcgZigxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhzLHYpfWZvcih2YXIgcD10aGlzLm0uc3VibigxKSxfPTA7IXAuaXNaZXJvKCkmJjA9PT1wLmFuZGxuKDEpOylfKysscC5pdXNocm4oMSk7byghcC5pc1plcm8oKSk7dmFyIGs9bmV3IGYoMSkudG9SZWQodGhpcyksTD1r''@;'; put 'put ''LnJlZE5lZygpLHk9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGw9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihsPW5ldyBmKDIqbCpsKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobCx5KS5jbXAoTCk7KWwucmVkSUFkZChMKTtmb3IodmFyIGI9dGhpcy5wb3cobCxwKSxxPXRoaXMucG93KHMs''@;'; put 'put ''cC5hZGRuKDEpLml1c2hybigxKSksRz10aGlzLnBvdyhzLHApLFE9XzswIT09Ry5jbXAoayk7KXtmb3IodmFyIHBlPUcsUGU9MDswIT09cGUuY21wKGspO1BlKyspcGU9cGUucmVkU3FyKCk7byhQZTxRKTt2YXIgWmU9dGhpcy5wb3coYixuZXcgZigxKS5pdXNobG4oUS1QZS0xKSk7cT1xLnJl''@;'; put 'put ''ZE11bChaZSksYj1aZS5yZWRTcXIoKSxHPUcucmVkTXVsKGIpLFE9UGV9cmV0dXJuIHF9LG1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3ZhciB1PXMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT11Lm5lZ2F0aXZlPyh1Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHUpLnJlZE5lZygpKTp0''@;'; put 'put ''aGlzLmltb2QodSl9LG1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyx1KXtpZih1LmlzWmVybygpKXJldHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtpZigwPT09dS5jbXBuKDEpKXJldHVybiBzLmNsb25lKCk7dmFyIHA9bmV3IEFycmF5KDE2KTtwWzBdPW5ldyBmKDEpLnRvUmVkKHRoaXMp''@;'; put 'put ''LHBbMV09cztmb3IodmFyIF89MjtfPHAubGVuZ3RoO18rKylwW19dPXRoaXMubXVsKHBbXy0xXSxzKTt2YXIgaz1wWzBdLEw9MCx5PTAsbD11LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLF89dS5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciBiPXUud29yZHNbX10scT1sLTE7''@;'; put 'put ''cT49MDtxLS0pe3ZhciBHPWI+PnEmMTtrIT09cFswXSYmKGs9dGhpcy5zcXIoaykpLDAhPT1HfHwwIT09TD8oTDw8PTEsTHw9RywoND09Kyt5fHwwPT09XyYmMD09PXEpJiYoaz10aGlzLm11bChrLHBbTF0pLHk9MCxMPTApKTp5PTB9bD0yNn1yZXR1cm4ga30sbWUucHJvdG90eXBlLmNvbnZl''@;'; put 'put ''cnRUbz1mdW5jdGlvbihzKXt2YXIgdT1zLnVtb2QodGhpcy5tKTtyZXR1cm4gdT09PXM/dS5jbG9uZSgpOnV9LG1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT1zLmNsb25lKCk7cmV0dXJuIHUucmVkPW51bGwsdX0sZi5tb250PWZ1bmN0aW9uKHMpe3JldHVybiBu''@;'; put 'put ''ZXcgRmUocyl9LEkoRmUsbWUpLEZlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLnVzaGxuKHRoaXMuc2hpZnQpKX0sRmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuaW1vZChzLm11bCh0aGlzLnJpbnYpKTty''@;'; put 'put ''ZXR1cm4gdS5yZWQ9bnVsbCx1fSxGZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIHMud29yZHNbMF09MCxzLmxlbmd0aD0xLHM7dmFyIHY9cy5pbXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5p''@;'; put 'put ''bWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3Rv''@;'; put 'put ''dHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBuZXcgZigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHY9cy5tdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxf''@;'; put 'put ''PXYuaXN1YihwKS5pdXNocm4odGhpcy5zaGlmdCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW1vZChzLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odGU9ZC5ubWQodGUpLHRoaXMpfSw2MTM4Oih0ZSxqLGQpPT57dmFyIFM9ZCg5ODApLGg9ZCg5MTk5KSxvPWQoNzg1OSksST1kKDIxNDQpLGY9ZCgzNjYzKSxUPWQoMzQ4MiksQT1kKDQ4MTgp''@;'; put 'put ''LE09ZCg5NTA5KS5CdWZmZXI7dGUuZXhwb3J0cz1mdW5jdGlvbihGLE4sSCl7dmFyIHo7ej1GLnBhZGRpbmc/Ri5wYWRkaW5nOkg/MTo0O3ZhciBLLFo9UyhGKSxVPVoubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoTi5sZW5ndGg+VXx8bmV3IEkoTikuY21wKFoubW9kdWx1cyk+PTApdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Sz1IP0EobmV3IEkoTiksWik6ZihOLFopO3ZhciBYPU0uYWxsb2MoVS1LLmxlbmd0aCk7aWYoSz1NLmNvbmNhdChbWCxLXSxVKSw0PT09eilyZXR1cm4gZnVuY3Rpb24gTyhCLEYpe3ZhciBOPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCksSD1U''@;'; put 'put ''KCJzaGExIikudXBkYXRlKE0uYWxsb2MoMCkpLmRpZ2VzdCgpLHo9SC5sZW5ndGg7aWYoMCE9PUZbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIFo9Ri5zbGljZSgxLHorMSksVT1GLnNsaWNlKHorMSksSz1vKFosaChVLHopKSxYPW8oVSxoKEssTi16LTEpKTtp''@;'; put 'put ''ZihmdW5jdGlvbiBFKEIsRil7Qj1NLmZyb20oQiksRj1NLmZyb20oRik7dmFyIE49MCxIPUIubGVuZ3RoO0IubGVuZ3RoIT09Ri5sZW5ndGgmJihOKyssSD1NYXRoLm1pbihCLmxlbmd0aCxGLmxlbmd0aCkpO2Zvcih2YXIgej0tMTsrK3o8SDspTis9Qlt6XV5GW3pdO3JldHVybiBOfShILFgu''@;'; put 'put ''c2xpY2UoMCx6KSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBuZT16OzA9PT1YW25lXTspbmUrKztpZigxIT09WFtuZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gWC5zbGljZShuZSl9KFosSyk7aWYoMT09PXopcmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIEQoQixGLE4pe2Zvcih2YXIgSD1GLnNsaWNlKDAsMiksej0yLFo9MDswIT09Rlt6KytdOylpZih6Pj1GLmxlbmd0aCl7WisrO2JyZWFrfXZhciBVPUYuc2xpY2UoMix6LTEpO2lmKCgiMDAwMiIhPT1ILnRvU3RyaW5nKCJoZXgiKSYmIU58fCIwMDAxIiE9PUgudG9TdHJp''@;'; put 'put ''bmcoImhleCIpJiZOKSYmWisrLFUubGVuZ3RoPDgmJlorKyxaKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBGLnNsaWNlKHopfSgwLEssSCk7aWYoMz09PXopcmV0dXJuIEs7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDY1NTk6KHRlLGos''@;'; put 'put ''ZCk9Pnt2YXIgUz1kKDk4MCksaD1kKDE3OTgpLG89ZCgzNDgyKSxJPWQoOTE5OSksZj1kKDc4NTkpLFQ9ZCgyMTQ0KSxBPWQoNDgxOCksTT1kKDM2NjMpLE89ZCg5NTA5KS5CdWZmZXI7dGUuZXhwb3J0cz1mdW5jdGlvbihOLEgseil7dmFyIFo7Wj1OLnBhZGRpbmc/Ti5wYWRkaW5nOno/MTo0''@;'; put 'put ''O3ZhciBLLFU9UyhOKTtpZig0PT09WilLPWZ1bmN0aW9uIEQoRixOKXt2YXIgSD1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHo9Ti5sZW5ndGgsWj1vKCJzaGExIikudXBkYXRlKE8uYWxsb2MoMCkpLmRpZ2VzdCgpLFU9Wi5sZW5ndGgsSz0yKlU7aWYoej5ILUstMil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Im1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgWD1PLmFsbG9jKEgtei1LLTIpLG5lPUgtVS0xLHNlPWgoVSksaGU9ZihPLmNvbmNhdChbWixYLE8uYWxsb2MoMSwxKSxOXSxuZSksSShzZSxuZSkpLF9lPWYoc2UsSShoZSxVKSk7cmV0dXJuIG5ldyBUKE8uY29uY2F0KFtPLmFsbG9jKDEpLF9lLGhl''@;'; put 'put ''XSxIKSl9KFUsSCk7ZWxzZSBpZigxPT09WilLPWZ1bmN0aW9uIEUoRixOLEgpe3ZhciBVLHo9Ti5sZW5ndGgsWj1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKHo+Wi0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gVT1IP08uYWxsb2MoWi16LTMsMjU1KTpm''@;'; put 'put ''dW5jdGlvbiBCKEYpe2Zvcih2YXIgVSxOPU8uYWxsb2NVbnNhZmUoRiksSD0wLHo9aCgyKkYpLFo9MDtIPEY7KVo9PT16Lmxlbmd0aCYmKHo9aCgyKkYpLFo9MCksKFU9eltaKytdKSYmKE5bSCsrXT1VKTtyZXR1cm4gTn0oWi16LTMpLG5ldyBUKE8uY29uY2F0KFtPLmZyb20oWzAsSD8xOjJd''@;'; put 'put ''KSxVLE8uYWxsb2MoMSksTl0sWikpfShVLEgseik7ZWxzZXtpZigzIT09Wil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKChLPW5ldyBUKEgpKS5jbXAoVS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4g''@;'; put 'put ''ej9NKEssVSk6QShLLFUpfX0sNDgxODoodGUsaixkKT0+e3ZhciBTPWQoMjE0NCksaD1kKDk1MDkpLkJ1ZmZlcjt0ZS5leHBvcnRzPWZ1bmN0aW9uIG8oSSxmKXtyZXR1cm4gaC5mcm9tKEkudG9SZWQoUy5tb250KGYubW9kdWx1cykpLnJlZFBvdyhuZXcgUyhmLnB1YmxpY0V4cG9uZW50KSku''@;'; put 'put ''ZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSw3ODU5OnRlPT57dGUuZXhwb3J0cz1mdW5jdGlvbihkLFMpe2Zvcih2YXIgaD1kLmxlbmd0aCxvPS0xOysrbzxoOylkW29dXj1TW29dO3JldHVybiBkfX0sMzY4OToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0IjtkLnIoaiksZC5kKGose2RlY29kZTooKT0+''@;'; put 'put ''bWUsZGVmYXVsdDooKT0+dixlbmNvZGU6KCk9PkZlLHRvQVNDSUk6KCk9PnMsdG9Vbmljb2RlOigpPT5SLHVjczJkZWNvZGU6KCk9PlgsdWNzMmVuY29kZTooKT0+bmV9KTtjb25zdCBTPTIxNDc0ODM2NDcsaD0zNixEPS9eeG4tLS8sRT0vW15cMC1ceDdGXS8sQj0vW1x4MkVcdTMwMDJcdUZG''@;'; put 'put ''MEVcdUZGNjFdL2csRj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0''@;'; put 'put ''In0sSD1NYXRoLmZsb29yLHo9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBaKHApe3Rocm93IG5ldyBSYW5nZUVycm9yKEZbcF0pfWZ1bmN0aW9uIEsocCxfKXtjb25zdCBrPXAuc3BsaXQoIkAiKTtsZXQgTD0iIjtrLmxlbmd0aD4xJiYoTD1rWzBdKyJAIixwPWtbMV0pO2NvbnN0IGw9''@;'; put 'put ''ZnVuY3Rpb24gVShwLF8pe2NvbnN0IGs9W107bGV0IEw9cC5sZW5ndGg7Zm9yKDtMLS07KWtbTF09XyhwW0xdKTtyZXR1cm4ga30oKHA9cC5yZXBsYWNlKEIsIi4iKSkuc3BsaXQoIi4iKSxfKS5qb2luKCIuIik7cmV0dXJuIEwrbH1mdW5jdGlvbiBYKHApe2NvbnN0IF89W107bGV0IGs9MDtj''@;'; put 'put ''b25zdCBMPXAubGVuZ3RoO2Zvcig7azxMOyl7Y29uc3QgeT1wLmNoYXJDb2RlQXQoaysrKTtpZih5Pj01NTI5NiYmeTw9NTYzMTkmJms8TCl7Y29uc3QgbD1wLmNoYXJDb2RlQXQoaysrKTs1NjMyMD09KDY0NTEyJmwpP18ucHVzaCgoKDEwMjMmeSk8PDEwKSsoMTAyMyZsKSs2NTUzNik6KF8u''@;'; put 'put ''cHVzaCh5KSxrLS0pfWVsc2UgXy5wdXNoKHkpfXJldHVybiBffWNvbnN0IG5lPXA9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLnApLHNlPWZ1bmN0aW9uKHApe3JldHVybiBwPj00OCYmcDw1OD9wLTQ4KzI2OnA+PTY1JiZwPDkxP3AtNjU6cD49OTcmJnA8MTIzP3AtOTc6aH0saGU9ZnVuY3Rp''@;'; put 'put ''b24ocCxfKXtyZXR1cm4gcCsyMis3NSoocDwyNiktKCgwIT1fKTw8NSl9LF9lPWZ1bmN0aW9uKHAsXyxrKXtsZXQgTD0wO2ZvcihwPWs/SChwLzcwMCk6cD4+MSxwKz1IKHAvXyk7cD40NTU7TCs9aClwPUgocC8zNSk7cmV0dXJuIEgoTCszNipwLyhwKzM4KSl9LG1lPWZ1bmN0aW9uKHApe2Nv''@;'; put 'put ''bnN0IF89W10saz1wLmxlbmd0aDtsZXQgTD0wLHk9MTI4LGw9NzIsYj1wLmxhc3RJbmRleE9mKCItIik7YjwwJiYoYj0wKTtmb3IobGV0IHE9MDtxPGI7KytxKXAuY2hhckNvZGVBdChxKT49MTI4JiZaKCJub3QtYmFzaWMiKSxfLnB1c2gocC5jaGFyQ29kZUF0KHEpKTtmb3IobGV0IHE9Yj4w''@;'; put 'put ''P2IrMTowO3E8azspe2NvbnN0IEc9TDtmb3IobGV0IHBlPTEsUGU9aDs7UGUrPWgpe3E+PWsmJlooImludmFsaWQtaW5wdXQiKTtjb25zdCBaZT1zZShwLmNoYXJDb2RlQXQocSsrKSk7WmU+PWgmJlooImludmFsaWQtaW5wdXQiKSxaZT5IKChTLUwpL3BlKSYmWigib3ZlcmZsb3ciKSxMKz1a''@;'; put 'put ''ZSpwZTtjb25zdCBxZT1QZTw9bD8xOlBlPj1sKzI2PzI2OlBlLWw7aWYoWmU8cWUpYnJlYWs7Y29uc3QgdmU9aC1xZTtwZT5IKFMvdmUpJiZaKCJvdmVyZmxvdyIpLHBlKj12ZX1jb25zdCBRPV8ubGVuZ3RoKzE7bD1fZShMLUcsUSwwPT1HKSxIKEwvUSk+Uy15JiZaKCJvdmVyZmxvdyIpLHkr''@;'; put 'put ''PUgoTC9RKSxMJT1RLF8uc3BsaWNlKEwrKywwLHkpfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5fKX0sRmU9ZnVuY3Rpb24ocCl7Y29uc3QgXz1bXSxrPShwPVgocCkpLmxlbmd0aDtsZXQgTD0xMjgseT0wLGw9NzI7Zm9yKGNvbnN0IEcgb2YgcClHPDEyOCYmXy5wdXNoKHooRykp''@;'; put 'put ''O2NvbnN0IGI9Xy5sZW5ndGg7bGV0IHE9Yjtmb3IoYiYmXy5wdXNoKCItIik7cTxrOyl7bGV0IEc9Uztmb3IoY29uc3QgcGUgb2YgcClwZT49TCYmcGU8RyYmKEc9cGUpO2NvbnN0IFE9cSsxO0ctTD5IKChTLXkpL1EpJiZaKCJvdmVyZmxvdyIpLHkrPShHLUwpKlEsTD1HO2Zvcihjb25zdCBw''@;'; put 'put ''ZSBvZiBwKWlmKHBlPEwmJisreT5TJiZaKCJvdmVyZmxvdyIpLHBlPT09TCl7bGV0IFBlPXk7Zm9yKGxldCBaZT1oOztaZSs9aCl7Y29uc3QgcWU9WmU8PWw/MTpaZT49bCsyNj8yNjpaZS1sO2lmKFBlPHFlKWJyZWFrO2NvbnN0IHZlPVBlLXFlLHVlPWgtcWU7Xy5wdXNoKHooaGUocWUrdmUl''@;'; put 'put ''dWUsMCkpKSxQZT1IKHZlL3VlKX1fLnB1c2goeihoZShQZSwwKSkpLGw9X2UoeSxRLHE9PT1iKSx5PTAsKytxfSsreSwrK0x9cmV0dXJuIF8uam9pbigiIil9LFI9ZnVuY3Rpb24ocCl7cmV0dXJuIEsocCxmdW5jdGlvbihfKXtyZXR1cm4gRC50ZXN0KF8pP21lKF8uc2xpY2UoNCkudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSk6X30pfSxzPWZ1bmN0aW9uKHApe3JldHVybiBLKHAsZnVuY3Rpb24oXyl7cmV0dXJuIEUudGVzdChfKT8ieG4tLSIrRmUoXyk6X30pfSx2PXt2ZXJzaW9uOiIyLjMuMSIsdWNzMjp7ZGVjb2RlOlgsZW5jb2RlOm5lfSxkZWNvZGU6bWUsZW5jb2RlOkZlLHRvQVNDSUk6cyx0b1Vu''@;'; put 'put ''aWNvZGU6Un19LDcxMjk6KHRlLGopPT57InVzZSBzdHJpY3QiO3ZhciBkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaChUKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChULnJlcGxhY2UoL1wrL2csIiAiKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0''@;'; put 'put ''aW9uIG8oVCl7dHJ5e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoVCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWouc3RyaW5naWZ5PWZ1bmN0aW9uIGYoVCxBKXtBPUF8fCIiO3ZhciBPLEQsTT1bXTtmb3IoRCBpbiJzdHJpbmciIT10eXBlb2YgQSYmKEE9Ij8iKSxUKWlmKGQuY2FsbChULEQpKXtp''@;'; put 'put ''ZighKE89VFtEXSkmJihudWxsPT1PfHxpc05hTihPKSkmJihPPSIiKSxEPW8oRCksTz1vKE8pLG51bGw9PT1EfHxudWxsPT09Tyljb250aW51ZTtNLnB1c2goRCsiPSIrTyl9cmV0dXJuIE0ubGVuZ3RoP0ErTS5qb2luKCImIik6IiJ9LGoucGFyc2U9ZnVuY3Rpb24gSShUKXtmb3IodmFyIE8s''@;'; put 'put ''QT0vKFtePT8jJl0rKT0/KFteJl0qKS9nLE09e307Tz1BLmV4ZWMoVCk7KXt2YXIgRD1oKE9bMV0pLEU9aChPWzJdKTtudWxsPT09RHx8bnVsbD09PUV8fEQgaW4gTXx8KE1bRF09RSl9cmV0dXJuIE19fSwxNzk4Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSksaD02NTUz''@;'; put 'put ''NixmPWQoOTUwOSkuQnVmZmVyLFQ9ZC5nLmNyeXB0b3x8ZC5nLm1zQ3J5cHRvO3RlLmV4cG9ydHM9VCYmVC5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24gQShNLE8pe2lmKE0+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIp''@;'; put 'put ''O3ZhciBEPWYuYWxsb2NVbnNhZmUoTSk7aWYoTT4wKWlmKE0+aClmb3IodmFyIEU9MDtFPE07RSs9aClULmdldFJhbmRvbVZhbHVlcyhELnNsaWNlKEUsRStoKSk7ZWxzZSBULmdldFJhbmRvbVZhbHVlcyhEKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTz9TLm5leHRUaWNrKGZ1bmN0aW9u''@;'; put 'put ''KCl7TyhudWxsLEQpfSk6RH06ZnVuY3Rpb24gSSgpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDc5''@;'; put 'put ''NjM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1KTtmdW5jdGlvbiBoKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0''@;'; put 'put ''IEV4cGxvcmVyIDExIil9dmFyIG89ZCg5NTA5KSxJPWQoMTc5OCksZj1vLkJ1ZmZlcixUPW8ua01heExlbmd0aCxBPWQuZy5jcnlwdG98fGQuZy5tc0NyeXB0byxNPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gTyhOLEgpe2lmKCJudW1iZXIiIT10eXBlb2YgTnx8TiE9Til0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKE4+TXx8TjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoTj5UfHxOPkgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBEKE4s''@;'; put 'put ''SCx6KXtpZigibnVtYmVyIiE9dHlwZW9mIE58fE4hPU4pdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoTj5NfHxOPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoTitIPnp8fE4+VCl0aHJvdyBuZXcgUmFuZ2VF''@;'; put 'put ''cnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIEIoTixILHosWil7aWYoUy5icm93c2VyKXt2YXIgSz1uZXcgVWludDhBcnJheShOLmJ1ZmZlcixILHopO3JldHVybiBBLmdldFJhbmRvbVZhbHVlcyhLKSxaP3ZvaWQgUy5uZXh0VGljayhmdW5jdGlvbigpe1oobnVsbCxOKX0pOk59''@;'; put 'put ''aWYoIVopcmV0dXJuIEkoeikuY29weShOLEgpLE47SSh6LGZ1bmN0aW9uKG5lLHNlKXtpZihuZSlyZXR1cm4gWihuZSk7c2UuY29weShOLEgpLFoobnVsbCxOKX0pfUEmJkEuZ2V0UmFuZG9tVmFsdWVzfHwhUy5icm93c2VyPyhqLnJhbmRvbUZpbGw9ZnVuY3Rpb24gRShOLEgseixaKXtpZigh''@;'; put 'put ''KGYuaXNCdWZmZXIoTil8fE4gaW5zdGFuY2VvZiBkLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEgpWj1ILEg9MCx6PU4ubGVuZ3RoO2Vsc2UgaWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIHopWj16LHo9Ti5sZW5ndGgtSDtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBaKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIE8oSCxOLmxlbmd0aCksRCh6LEgsTi5sZW5ndGgpLEIoTixI''@;'; put 'put ''LHosWil9LGoucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gRihOLEgseil7aWYodHlwZW9mIEg+InUiJiYoSD0wKSwhKGYuaXNCdWZmZXIoTil8fE4gaW5zdGFuY2VvZiBkLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBv''@;'; put 'put ''ciBVaW50OEFycmF5Jyk7cmV0dXJuIE8oSCxOLmxlbmd0aCksdm9pZCAwPT09eiYmKHo9Ti5sZW5ndGgtSCksRCh6LEgsTi5sZW5ndGgpLEIoTixILHopfSk6KGoucmFuZG9tRmlsbD1oLGoucmFuZG9tRmlsbFN5bmM9aCl9LDQyODE6dGU9PnsidXNlIHN0cmljdCI7dmFyIGQ9e307ZnVuY3Rp''@;'; put 'put ''b24gUyhULEEsTSl7TXx8KE09RXJyb3IpO3ZhciBEPWZ1bmN0aW9uKEUpe2Z1bmN0aW9uIEIoRixOLEgpe3JldHVybiBFLmNhbGwodGhpcyxmdW5jdGlvbiBPKEUsQixGKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEE/QTpBKEUsQixGKX0oRixOLEgpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''aihULEEpe1QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQS5wcm90b3R5cGUpLFQucHJvdG90eXBlLmNvbnN0cnVjdG9yPVQsVC5fX3Byb3RvX189QX0oQixFKSxCfShNKTtELnByb3RvdHlwZS5uYW1lPU0ubmFtZSxELnByb3RvdHlwZS5jb2RlPVQsZFtUXT1EfWZ1bmN0aW9uIGgoVCxBKXtp''@;'; put 'put ''ZihBcnJheS5pc0FycmF5KFQpKXt2YXIgTT1ULmxlbmd0aDtyZXR1cm4gVD1ULm1hcChmdW5jdGlvbihPKXtyZXR1cm4gU3RyaW5nKE8pfSksTT4yPyJvbmUgb2YgIi5jb25jYXQoQSwiICIpLmNvbmNhdChULnNsaWNlKDAsTS0xKS5qb2luKCIsICIpLCIsIG9yICIpK1RbTS0xXToyPT09TT8i''@;'; put 'put ''b25lIG9mICIuY29uY2F0KEEsIiAiKS5jb25jYXQoVFswXSwiIG9yICIpLmNvbmNhdChUWzFdKToib2YgIi5jb25jYXQoQSwiICIpLmNvbmNhdChUWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoQSwiICIpLmNvbmNhdChTdHJpbmcoVCkpfVMoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rp''@;'; put 'put ''b24oVCxBKXtyZXR1cm4nVGhlIHZhbHVlICInK0ErJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1QrJyInfSxUeXBlRXJyb3IpLFMoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihULEEsTSl7dmFyIE8sRDtpZigic3RyaW5nIj09dHlwZW9mIEEmJmZ1bmN0aW9uIG8oVCxBLE0p''@;'; put 'put ''e3JldHVybiBULnN1YnN0cighTXx8TTwwPzA6K00sQS5sZW5ndGgpPT09QX0oQSwibm90ICIpPyhPPSJtdXN0IG5vdCBiZSIsQT1BLnJlcGxhY2UoL15ub3QgLywiIikpOk89Im11c3QgYmUiLGZ1bmN0aW9uIEkoVCxBLE0pe3JldHVybih2b2lkIDA9PT1NfHxNPlQubGVuZ3RoKSYmKE09VC5s''@;'; put 'put ''ZW5ndGgpLFQuc3Vic3RyaW5nKE0tQS5sZW5ndGgsTSk9PT1BfShULCIgYXJndW1lbnQiKSlEPSJUaGUgIi5jb25jYXQoVCwiICIpLmNvbmNhdChPLCIgIikuY29uY2F0KGgoQSwidHlwZSIpKTtlbHNle3ZhciBFPWZ1bmN0aW9uIGYoVCxBLE0pe3JldHVybiJudW1iZXIiIT10eXBlb2YgTSYm''@;'; put 'put ''KE09MCksIShNK0EubGVuZ3RoPlQubGVuZ3RoKSYmLTEhPT1ULmluZGV4T2YoQSxNKX0oVCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtEPSdUaGUgIicuY29uY2F0KFQsJyIgJykuY29uY2F0KEUsIiAiKS5jb25jYXQoTywiICIpLmNvbmNhdChoKEEsInR5cGUiKSl9cmV0dXJuIEQrIi4g''@;'; put 'put ''UmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgTSl9LFR5cGVFcnJvciksUygiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksUygiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFQpe3JldHVybiJUaGUgIitUKyIgbWV0''@;'; put 'put ''aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxTKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLFMoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihUKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitUKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3ll''@;'; put 'put ''ZCJ9KSxTKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxTKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLFMoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIg''@;'; put 'put ''ZW5kIiksUygiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLFMoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihUKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitUfSxUeXBlRXJyb3IpLFMoIkVS''@;'; put 'put ''Ul9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLHRlLmV4cG9ydHMucT1kfSw2NzUzOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSksaD1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oRSl7dmFyIEI9W107''@;'; put 'put ''Zm9yKHZhciBGIGluIEUpQi5wdXNoKEYpO3JldHVybiBCfTt0ZS5leHBvcnRzPU07dmFyIG89ZCg5NDgxKSxJPWQoNDIyOSk7ZCg1NzE3KShNLG8pO2Zvcih2YXIgZj1oKEkucHJvdG90eXBlKSxUPTA7VDxmLmxlbmd0aDtUKyspe3ZhciBBPWZbVF07TS5wcm90b3R5cGVbQV18fChNLnByb3Rv''@;'; put 'put ''dHlwZVtBXT1JLnByb3RvdHlwZVtBXSl9ZnVuY3Rpb24gTShFKXtpZighKHRoaXMgaW5zdGFuY2VvZiBNKSlyZXR1cm4gbmV3IE0oRSk7by5jYWxsKHRoaXMsRSksSS5jYWxsKHRoaXMsRSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEUmJighMT09PUUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxl''@;'; put 'put ''PSExKSwhMT09PUUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PUUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsTykpKX1mdW5jdGlvbiBPKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8Uy5uZXh0VGljayhELHRoaXMp''@;'; put 'put ''fWZ1bmN0aW9uIEQoRSl7RS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoTS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoTS5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTS5wcm90b3R5''@;'; put 'put ''cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE0ucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihCKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Qix0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1CKX19KX0sMjcyNToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPWg7dmFyIFM9ZCg0NjA1KTtm''@;'; put 'put ''dW5jdGlvbiBoKG8pe2lmKCEodGhpcyBpbnN0YW5jZW9mIGgpKXJldHVybiBuZXcgaChvKTtTLmNhbGwodGhpcyxvKX1kKDU3MTcpKGgsUyksaC5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihvLEksZil7ZihudWxsLG8pfX0sOTQ4MToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''aCxTPWQoNDE1NSk7dGUuZXhwb3J0cz1zLHMuUmVhZGFibGVTdGF0ZT1SLGQoNzE4Nyk7dmFyIEUsST1mdW5jdGlvbih4ZSxNZSl7cmV0dXJuIHhlLmxpc3RlbmVycyhNZSkubGVuZ3RofSxmPWQoMjUwMyksVD1kKDg3NjQpLkJ1ZmZlcixBPSh0eXBlb2YgZC5nPCJ1Ij9kLmc6dHlwZW9mIHdp''@;'; put 'put ''bmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sRD1kKDQ2MTYpO0U9RCYmRC5kZWJ1Z2xvZz9ELmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIG5lLHNlLGhlLEI9ZCg3MzI3KSxGPWQoMTE5NSksSD1kKDI0''@;'; put 'put ''NTcpLmdldEhpZ2hXYXRlck1hcmssej1kKDQyODEpLnEsWj16LkVSUl9JTlZBTElEX0FSR19UWVBFLFU9ei5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLEs9ei5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxYPXouRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtkKDU3MTcp''@;'; put 'put ''KHMsZik7dmFyIF9lPUYuZXJyb3JPckRlc3Ryb3ksbWU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gUihrZSx4ZSxNZSl7aD1ofHxkKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIE1lJiYoTWU9eGUgaW5zdGFuY2VvZiBoKSx0aGlzLm9iamVj''@;'; put 'put ''dE1vZGU9ISEoa2U9a2V8fHt9KS5vYmplY3RNb2RlLE1lJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFrZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1IKHRoaXMsa2UsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsTWUpLHRoaXMuYnVmZmVyPW5l''@;'; put 'put ''dyBCLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVk''@;'; put 'put ''UmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PWtlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEha2UuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhp''@;'; put 'put ''cy5kZWZhdWx0RW5jb2Rpbmc9a2UuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsa2UuZW5jb2RpbmcmJihuZXx8KG5lPWQoMjU1MykucyksdGhpcy5kZWNvZGVy''@;'; put 'put ''PW5ldyBuZShrZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1rZS5lbmNvZGluZyl9ZnVuY3Rpb24gcyhrZSl7aWYoaD1ofHxkKDY3NTMpLCEodGhpcyBpbnN0YW5jZW9mIHMpKXJldHVybiBuZXcgcyhrZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgUihrZSx0aGlzLHRoaXMgaW5zdGFuY2Vv''@;'; put 'put ''ZiBoKSx0aGlzLnJlYWRhYmxlPSEwLGtlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGtlLnJlYWQmJih0aGlzLl9yZWFkPWtlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBrZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1rZS5kZXN0cm95KSksZi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHUoa2UseGUs''@;'; put 'put ''TWUsSWUsYmUpe0UoInJlYWRhYmxlQWRkQ2h1bmsiLHhlKTt2YXIgcHQsd2U9a2UuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PXhlKXdlLnJlYWRpbmc9ITEsZnVuY3Rpb24geShrZSx4ZSl7aWYoRSgib25Fb2ZDaHVuayIpLCF4ZS5lbmRlZCl7aWYoeGUuZGVjb2Rlcil7dmFyIE1lPXhlLmRl''@;'; put 'put ''Y29kZXIuZW5kKCk7TWUmJk1lLmxlbmd0aCYmKHhlLmJ1ZmZlci5wdXNoKE1lKSx4ZS5sZW5ndGgrPXhlLm9iamVjdE1vZGU/MTpNZS5sZW5ndGgpfXhlLmVuZGVkPSEwLHhlLnN5bmM/bChrZSk6KHhlLm5lZWRSZWFkYWJsZT0hMSx4ZS5lbWl0dGVkUmVhZGFibGV8fCh4ZS5lbWl0dGVkUmVh''@;'; put 'put ''ZGFibGU9ITAsYihrZSkpKX19KGtlLHdlKTtlbHNlIGlmKGJlfHwocHQ9ZnVuY3Rpb24gcChrZSx4ZSl7dmFyIE1lO3JldHVybiFmdW5jdGlvbiBPKGtlKXtyZXR1cm4gVC5pc0J1ZmZlcihrZSl8fGtlIGluc3RhbmNlb2YgQX0oeGUpJiYic3RyaW5nIiE9dHlwZW9mIHhlJiZ2b2lkIDAhPT14''@;'; put 'put ''ZSYmIWtlLm9iamVjdE1vZGUmJihNZT1uZXcgWigiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLHhlKSksTWV9KHdlLHhlKSkscHQpX2Uoa2UscHQpO2Vsc2UgaWYod2Uub2JqZWN0TW9kZXx8eGUmJnhlLmxlbmd0aD4wKWlmKCJzdHJpbmciIT10eXBlb2YgeGUmJiF3''@;'; put 'put ''ZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoeGUpIT09VC5wcm90b3R5cGUmJih4ZT1mdW5jdGlvbiBNKGtlKXtyZXR1cm4gVC5mcm9tKGtlKX0oeGUpKSxJZSl3ZS5lbmRFbWl0dGVkP19lKGtlLG5ldyBYKTp2KGtlLHdlLHhlLCEwKTtlbHNlIGlmKHdlLmVuZGVkKV9lKGtl''@;'; put 'put ''LG5ldyBVKTtlbHNle2lmKHdlLmRlc3Ryb3llZClyZXR1cm4hMTt3ZS5yZWFkaW5nPSExLHdlLmRlY29kZXImJiFNZT8oeGU9d2UuZGVjb2Rlci53cml0ZSh4ZSksd2Uub2JqZWN0TW9kZXx8MCE9PXhlLmxlbmd0aD92KGtlLHdlLHhlLCExKTpxKGtlLHdlKSk6dihrZSx3ZSx4ZSwhMSl9ZWxz''@;'; put 'put ''ZSBJZXx8KHdlLnJlYWRpbmc9ITEscShrZSx3ZSkpO3JldHVybiF3ZS5lbmRlZCYmKHdlLmxlbmd0aDx3ZS5oaWdoV2F0ZXJNYXJrfHwwPT09d2UubGVuZ3RoKX1mdW5jdGlvbiB2KGtlLHhlLE1lLEllKXt4ZS5mbG93aW5nJiYwPT09eGUubGVuZ3RoJiYheGUuc3luYz8oeGUuYXdhaXREcmFp''@;'; put 'put ''bj0wLGtlLmVtaXQoImRhdGEiLE1lKSk6KHhlLmxlbmd0aCs9eGUub2JqZWN0TW9kZT8xOk1lLmxlbmd0aCxJZT94ZS5idWZmZXIudW5zaGlmdChNZSk6eGUuYnVmZmVyLnB1c2goTWUpLHhlLm5lZWRSZWFkYWJsZSYmbChrZSkpLHEoa2UseGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnBy''@;'; put 'put ''b3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih4ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZGVzdHJveWVkPXhlKX19KSxzLnByb3RvdHlwZS5kZXN0cm95PUYuZGVzdHJveSxzLnByb3RvdHlwZS5fdW5kZXN0cm95PUYudW5kZXN0cm95LHMucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGtlLHhlKXt4ZShrZSl9LHMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24o''@;'; put 'put ''a2UseGUpe3ZhciBJZSxNZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBNZS5vYmplY3RNb2RlP0llPSEwOiJzdHJpbmciPT10eXBlb2Yga2UmJigoeGU9eGV8fE1lLmRlZmF1bHRFbmNvZGluZykhPT1NZS5lbmNvZGluZyYmKGtlPVQuZnJvbShrZSx4ZSkseGU9IiIpLEllPSEwKSx1KHRo''@;'; put 'put ''aXMsa2UseGUsITEsSWUpfSxzLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGtlKXtyZXR1cm4gdSh0aGlzLGtlLG51bGwsITAsITEpfSxzLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzLnByb3RvdHlwZS5z''@;'; put 'put ''ZXRFbmNvZGluZz1mdW5jdGlvbihrZSl7bmV8fChuZT1kKDI1NTMpLnMpO3ZhciB4ZT1uZXcgbmUoa2UpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj14ZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFy''@;'; put 'put ''IE1lPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsSWU9IiI7bnVsbCE9PU1lOylJZSs9eGUud3JpdGUoTWUuZGF0YSksTWU9TWUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PUllJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5w''@;'; put 'put ''dXNoKEllKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1JZS5sZW5ndGgsdGhpc307dmFyIF89MTA3Mzc0MTgyNDtmdW5jdGlvbiBMKGtlLHhlKXtyZXR1cm4ga2U8PTB8fDA9PT14ZS5sZW5ndGgmJnhlLmVuZGVkPzA6eGUub2JqZWN0TW9kZT8xOmtlIT1rZT94ZS5mbG93aW5nJiZ4ZS5s''@;'; put 'put ''ZW5ndGg/eGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6eGUubGVuZ3RoOihrZT54ZS5oaWdoV2F0ZXJNYXJrJiYoeGUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBrKGtlKXtyZXR1cm4ga2U+PV8/a2U9Xzooa2UtLSxrZXw9a2U+Pj4xLGtlfD1rZT4+PjIsa2V8PWtlPj4+NCxrZXw9a2U+Pj44''@;'; put 'put ''LGtlfD1rZT4+PjE2LGtlKyspLGtlfShrZSkpLGtlPD14ZS5sZW5ndGg/a2U6eGUuZW5kZWQ/eGUubGVuZ3RoOih4ZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIGwoa2Upe3ZhciB4ZT1rZS5fcmVhZGFibGVTdGF0ZTtFKCJlbWl0UmVhZGFibGUiLHhlLm5lZWRSZWFkYWJsZSx4ZS5l''@;'; put 'put ''bWl0dGVkUmVhZGFibGUpLHhlLm5lZWRSZWFkYWJsZT0hMSx4ZS5lbWl0dGVkUmVhZGFibGV8fChFKCJlbWl0UmVhZGFibGUiLHhlLmZsb3dpbmcpLHhlLmVtaXR0ZWRSZWFkYWJsZT0hMCxTLm5leHRUaWNrKGIsa2UpKX1mdW5jdGlvbiBiKGtlKXt2YXIgeGU9a2UuX3JlYWRhYmxlU3RhdGU7''@;'; put 'put ''RSgiZW1pdFJlYWRhYmxlXyIseGUuZGVzdHJveWVkLHhlLmxlbmd0aCx4ZS5lbmRlZCksIXhlLmRlc3Ryb3llZCYmKHhlLmxlbmd0aHx8eGUuZW5kZWQpJiYoa2UuZW1pdCgicmVhZGFibGUiKSx4ZS5lbWl0dGVkUmVhZGFibGU9ITEpLHhlLm5lZWRSZWFkYWJsZT0heGUuZmxvd2luZyYmIXhl''@;'; put 'put ''LmVuZGVkJiZ4ZS5sZW5ndGg8PXhlLmhpZ2hXYXRlck1hcmssdmUoa2UpfWZ1bmN0aW9uIHEoa2UseGUpe3hlLnJlYWRpbmdNb3JlfHwoeGUucmVhZGluZ01vcmU9ITAsUy5uZXh0VGljayhHLGtlLHhlKSl9ZnVuY3Rpb24gRyhrZSx4ZSl7Zm9yKDsheGUucmVhZGluZyYmIXhlLmVuZGVkJiYo''@;'; put 'put ''eGUubGVuZ3RoPHhlLmhpZ2hXYXRlck1hcmt8fHhlLmZsb3dpbmcmJjA9PT14ZS5sZW5ndGgpOyl7dmFyIE1lPXhlLmxlbmd0aDtpZihFKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLGtlLnJlYWQoMCksTWU9PT14ZS5sZW5ndGgpYnJlYWt9eGUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gcGUo''@;'; put 'put ''a2Upe3ZhciB4ZT1rZS5fcmVhZGFibGVTdGF0ZTt4ZS5yZWFkYWJsZUxpc3RlbmluZz1rZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAseGUucmVzdW1lU2NoZWR1bGVkJiYheGUucGF1c2VkP3hlLmZsb3dpbmc9ITA6a2UubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJmtlLnJlc3VtZSgp''@;'; put 'put ''fWZ1bmN0aW9uIFBlKGtlKXtFKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxrZS5yZWFkKDApfWZ1bmN0aW9uIHFlKGtlLHhlKXtFKCJyZXN1bWUiLHhlLnJlYWRpbmcpLHhlLnJlYWRpbmd8fGtlLnJlYWQoMCkseGUucmVzdW1lU2NoZWR1bGVkPSExLGtlLmVtaXQoInJlc3VtZSIpLHZl''@;'; put 'put ''KGtlKSx4ZS5mbG93aW5nJiYheGUucmVhZGluZyYma2UucmVhZCgwKX1mdW5jdGlvbiB2ZShrZSl7dmFyIHhlPWtlLl9yZWFkYWJsZVN0YXRlO2ZvcihFKCJmbG93Iix4ZS5mbG93aW5nKTt4ZS5mbG93aW5nJiZudWxsIT09a2UucmVhZCgpOyk7fWZ1bmN0aW9uIHVlKGtlLHhlKXtyZXR1cm4g''@;'; put 'put ''MD09PXhlLmxlbmd0aD9udWxsOih4ZS5vYmplY3RNb2RlP01lPXhlLmJ1ZmZlci5zaGlmdCgpOiFrZXx8a2U+PXhlLmxlbmd0aD8oTWU9eGUuZGVjb2Rlcj94ZS5idWZmZXIuam9pbigiIik6MT09PXhlLmJ1ZmZlci5sZW5ndGg/eGUuYnVmZmVyLmZpcnN0KCk6eGUuYnVmZmVyLmNvbmNhdCh4''@;'; put 'put ''ZS5sZW5ndGgpLHhlLmJ1ZmZlci5jbGVhcigpKTpNZT14ZS5idWZmZXIuY29uc3VtZShrZSx4ZS5kZWNvZGVyKSxNZSk7dmFyIE1lfWZ1bmN0aW9uIHplKGtlKXt2YXIgeGU9a2UuX3JlYWRhYmxlU3RhdGU7RSgiZW5kUmVhZGFibGUiLHhlLmVuZEVtaXR0ZWQpLHhlLmVuZEVtaXR0ZWR8fCh4''@;'; put 'put ''ZS5lbmRlZD0hMCxTLm5leHRUaWNrKE9lLHhlLGtlKSl9ZnVuY3Rpb24gT2Uoa2UseGUpe2lmKEUoImVuZFJlYWRhYmxlTlQiLGtlLmVuZEVtaXR0ZWQsa2UubGVuZ3RoKSwha2UuZW5kRW1pdHRlZCYmMD09PWtlLmxlbmd0aCYmKGtlLmVuZEVtaXR0ZWQ9ITAseGUucmVhZGFibGU9ITEseGUu''@;'; put 'put ''ZW1pdCgiZW5kIiksa2UuYXV0b0Rlc3Ryb3kpKXt2YXIgTWU9eGUuX3dyaXRhYmxlU3RhdGU7KCFNZXx8TWUuYXV0b0Rlc3Ryb3kmJk1lLmZpbmlzaGVkKSYmeGUuZGVzdHJveSgpfX1mdW5jdGlvbiBDZShrZSx4ZSl7Zm9yKHZhciBNZT0wLEllPWtlLmxlbmd0aDtNZTxJZTtNZSsrKWlmKGtl''@;'; put 'put ''W01lXT09PXhlKXJldHVybiBNZTtyZXR1cm4tMX1zLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGtlKXtFKCJyZWFkIixrZSksa2U9cGFyc2VJbnQoa2UsMTApO3ZhciB4ZT10aGlzLl9yZWFkYWJsZVN0YXRlLE1lPWtlO2lmKDAhPT1rZSYmKHhlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PWtl''@;'; put 'put ''JiZ4ZS5uZWVkUmVhZGFibGUmJigoMCE9PXhlLmhpZ2hXYXRlck1hcms/eGUubGVuZ3RoPj14ZS5oaWdoV2F0ZXJNYXJrOnhlLmxlbmd0aD4wKXx8eGUuZW5kZWQpKXJldHVybiBFKCJyZWFkOiBlbWl0UmVhZGFibGUiLHhlLmxlbmd0aCx4ZS5lbmRlZCksMD09PXhlLmxlbmd0aCYmeGUuZW5k''@;'; put 'put ''ZWQ/emUodGhpcyk6bCh0aGlzKSxudWxsO2lmKDA9PT0oa2U9TChrZSx4ZSkpJiZ4ZS5lbmRlZClyZXR1cm4gMD09PXhlLmxlbmd0aCYmemUodGhpcyksbnVsbDt2YXIgYmUsSWU9eGUubmVlZFJlYWRhYmxlO3JldHVybiBFKCJuZWVkIHJlYWRhYmxlIixJZSksKDA9PT14ZS5sZW5ndGh8fHhl''@;'; put 'put ''Lmxlbmd0aC1rZTx4ZS5oaWdoV2F0ZXJNYXJrKSYmRSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLEllPSEwKSx4ZS5lbmRlZHx8eGUucmVhZGluZz9FKCJyZWFkaW5nIG9yIGVuZGVkIixJZT0hMSk6SWUmJihFKCJkbyByZWFkIikseGUucmVhZGluZz0hMCx4ZS5zeW5jPSEwLDA9PT14''@;'; put 'put ''ZS5sZW5ndGgmJih4ZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoeGUuaGlnaFdhdGVyTWFyaykseGUuc3luYz0hMSx4ZS5yZWFkaW5nfHwoa2U9TChNZSx4ZSkpKSxudWxsPT09KGJlPWtlPjA/dWUoa2UseGUpOm51bGwpPyh4ZS5uZWVkUmVhZGFibGU9eGUubGVuZ3RoPD14ZS5oaWdo''@;'; put 'put ''V2F0ZXJNYXJrLGtlPTApOih4ZS5sZW5ndGgtPWtlLHhlLmF3YWl0RHJhaW49MCksMD09PXhlLmxlbmd0aCYmKHhlLmVuZGVkfHwoeGUubmVlZFJlYWRhYmxlPSEwKSxNZSE9PWtlJiZ4ZS5lbmRlZCYmemUodGhpcykpLG51bGwhPT1iZSYmdGhpcy5lbWl0KCJkYXRhIixiZSksYmV9LHMucHJv''@;'; put 'put ''dG90eXBlLl9yZWFkPWZ1bmN0aW9uKGtlKXtfZSh0aGlzLG5ldyBLKCJfcmVhZCgpIikpfSxzLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGtlLHhlKXt2YXIgTWU9dGhpcyxJZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChJZS5waXBlc0NvdW50KXtjYXNlIDA6SWUucGlwZXM9a2U7YnJl''@;'; put 'put ''YWs7Y2FzZSAxOkllLnBpcGVzPVtJZS5waXBlcyxrZV07YnJlYWs7ZGVmYXVsdDpJZS5waXBlcy5wdXNoKGtlKX1JZS5waXBlc0NvdW50Kz0xLEUoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsSWUucGlwZXNDb3VudCx4ZSk7dmFyIHdlPXhlJiYhMT09PXhlLmVuZHx8a2U9PT1TLnN0ZG91dHx8''@;'; put 'put ''a2U9PT1TLnN0ZGVycj8kZTpLZTtmdW5jdGlvbiBLZSgpe0UoIm9uZW5kIiksa2UuZW5kKCl9SWUuZW5kRW1pdHRlZD9TLm5leHRUaWNrKHdlKTpNZS5vbmNlKCJlbmQiLHdlKSxrZS5vbigidW5waXBlIixmdW5jdGlvbiBwdChMZSxudCl7RSgib251bnBpcGUiKSxMZT09PU1lJiZudCYmITE9''@;'; put 'put ''PT1udC5oYXNVbnBpcGVkJiYobnQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBodCgpe0UoImNsZWFudXAiKSxrZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHR0KSxrZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVZSksa2UucmVtb3ZlTGlzdGVuZXIoImRyYWluIixZZSksa2UucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImVycm9yIixZdCksa2UucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIscHQpLE1lLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEtlKSxNZS5yZW1vdmVMaXN0ZW5lcigiZW5kIiwkZSksTWUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLHZ0KSxxdD0hMCxJZS5hd2FpdERyYWluJiYoIWtlLl93cml0''@;'; put 'put ''YWJsZVN0YXRlfHxrZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZZZSgpfSgpKX0pO3ZhciBZZT1mdW5jdGlvbiBRKGtlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTWU9a2UuX3JlYWRhYmxlU3RhdGU7RSgicGlwZU9uRHJhaW4iLE1lLmF3YWl0RHJhaW4pLE1lLmF3YWl0RHJhaW4mJk1l''@;'; put 'put ''LmF3YWl0RHJhaW4tLSwwPT09TWUuYXdhaXREcmFpbiYmSShrZSwiZGF0YSIpJiYoTWUuZmxvd2luZz0hMCx2ZShrZSkpfX0oTWUpO2tlLm9uKCJkcmFpbiIsWWUpO3ZhciBxdD0hMTtmdW5jdGlvbiB2dChMZSl7RSgib25kYXRhIik7dmFyIG50PWtlLndyaXRlKExlKTtFKCJkZXN0LndyaXRl''@;'; put 'put ''IixudCksITE9PT1udCYmKCgxPT09SWUucGlwZXNDb3VudCYmSWUucGlwZXM9PT1rZXx8SWUucGlwZXNDb3VudD4xJiYtMSE9PUNlKEllLnBpcGVzLGtlKSkmJiFxdCYmKEUoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsSWUuYXdhaXREcmFpbiksSWUuYXdhaXREcmFpbisrKSxNZS5w''@;'; put 'put ''YXVzZSgpKX1mdW5jdGlvbiBZdChMZSl7RSgib25lcnJvciIsTGUpLCRlKCksa2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixZdCksMD09PUkoa2UsImVycm9yIikmJl9lKGtlLExlKX1mdW5jdGlvbiB0dCgpe2tlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFVlKSwkZSgpfWZ1bmN0aW9uIFVl''@;'; put 'put ''KCl7RSgib25maW5pc2giKSxrZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHR0KSwkZSgpfWZ1bmN0aW9uICRlKCl7RSgidW5waXBlIiksTWUudW5waXBlKGtlKX1yZXR1cm4gTWUub24oImRhdGEiLHZ0KSxmdW5jdGlvbiBGZShrZSx4ZSxNZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGtlLnBy''@;'; put 'put ''ZXBlbmRMaXN0ZW5lcilyZXR1cm4ga2UucHJlcGVuZExpc3RlbmVyKHhlLE1lKTtrZS5fZXZlbnRzJiZrZS5fZXZlbnRzW3hlXT9BcnJheS5pc0FycmF5KGtlLl9ldmVudHNbeGVdKT9rZS5fZXZlbnRzW3hlXS51bnNoaWZ0KE1lKTprZS5fZXZlbnRzW3hlXT1bTWUsa2UuX2V2ZW50c1t4ZV1d''@;'; put 'put ''OmtlLm9uKHhlLE1lKX0oa2UsImVycm9yIixZdCksa2Uub25jZSgiY2xvc2UiLHR0KSxrZS5vbmNlKCJmaW5pc2giLFVlKSxrZS5lbWl0KCJwaXBlIixNZSksSWUuZmxvd2luZ3x8KEUoInBpcGUgcmVzdW1lIiksTWUucmVzdW1lKCkpLGtlfSxzLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24o''@;'; put 'put ''a2Upe3ZhciB4ZT10aGlzLl9yZWFkYWJsZVN0YXRlLE1lPXtoYXNVbnBpcGVkOiExfTtpZigwPT09eGUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09eGUucGlwZXNDb3VudClyZXR1cm4ga2UmJmtlIT09eGUucGlwZXN8fChrZXx8KGtlPXhlLnBpcGVzKSx4ZS5waXBlcz1udWxsLHhl''@;'; put 'put ''LnBpcGVzQ291bnQ9MCx4ZS5mbG93aW5nPSExLGtlJiZrZS5lbWl0KCJ1bnBpcGUiLHRoaXMsTWUpKSx0aGlzO2lmKCFrZSl7dmFyIEllPXhlLnBpcGVzLGJlPXhlLnBpcGVzQ291bnQ7eGUucGlwZXM9bnVsbCx4ZS5waXBlc0NvdW50PTAseGUuZmxvd2luZz0hMTtmb3IodmFyIHdlPTA7d2U8''@;'; put 'put ''YmU7d2UrKylJZVt3ZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIHB0PUNlKHhlLnBpcGVzLGtlKTtyZXR1cm4tMT09PXB0fHwoeGUucGlwZXMuc3BsaWNlKHB0LDEpLHhlLnBpcGVzQ291bnQtPTEsMT09PXhlLnBpcGVzQ291bnQmJih4ZS5w''@;'; put 'put ''aXBlcz14ZS5waXBlc1swXSksa2UuZW1pdCgidW5waXBlIix0aGlzLE1lKSksdGhpc30scy5wcm90b3R5cGUuYWRkTGlzdGVuZXI9cy5wcm90b3R5cGUub249ZnVuY3Rpb24oa2UseGUpe3ZhciBNZT1mLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsa2UseGUpLEllPXRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGU7cmV0dXJuImRhdGEiPT09a2U/KEllLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09SWUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PWtlJiYhSWUuZW5kRW1pdHRlZCYmIUllLnJlYWRhYmxlTGlzdGVuaW5nJiYo''@;'; put 'put ''SWUucmVhZGFibGVMaXN0ZW5pbmc9SWUubmVlZFJlYWRhYmxlPSEwLEllLmZsb3dpbmc9ITEsSWUuZW1pdHRlZFJlYWRhYmxlPSExLEUoIm9uIHJlYWRhYmxlIixJZS5sZW5ndGgsSWUucmVhZGluZyksSWUubGVuZ3RoP2wodGhpcyk6SWUucmVhZGluZ3x8Uy5uZXh0VGljayhQZSx0aGlzKSks''@;'; put 'put ''TWV9LHMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGtlLHhlKXt2YXIgTWU9Zi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLGtlLHhlKTtyZXR1cm4icmVhZGFibGUiPT09a2UmJlMubmV4dFRpY2socGUsdGhpcyksTWV9LHMucHJvdG90eXBlLnJlbW92ZUFs''@;'; put 'put ''bExpc3RlbmVycz1mdW5jdGlvbihrZSl7dmFyIHhlPWYucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1rZXx8dm9pZCAwPT09a2UpJiZTLm5leHRUaWNrKHBlLHRoaXMpLHhlfSxzLnByb3RvdHlwZS5yZXN1bWU9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIga2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4ga2UuZmxvd2luZ3x8KEUoInJlc3VtZSIpLGtlLmZsb3dpbmc9IWtlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIFplKGtlLHhlKXt4ZS5yZXN1bWVTY2hlZHVsZWR8fCh4ZS5yZXN1bWVTY2hlZHVsZWQ9ITAs''@;'; put 'put ''Uy5uZXh0VGljayhxZSxrZSx4ZSkpfSh0aGlzLGtlKSksa2UucGF1c2VkPSExLHRoaXN9LHMucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEUoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUuZmxvd2luZyYmKEUoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30scy5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihrZSl7dmFyIHhlPXRoaXMsTWU9dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZSxJZT0hMTtmb3IodmFyIGJlIGluIGtlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoRSgid3JhcHBlZCBlbmQiKSxNZS5kZWNvZGVyJiYhTWUuZW5kZWQpe3ZhciBwdD1NZS5kZWNvZGVyLmVuZCgpO3B0JiZwdC5sZW5ndGgmJnhlLnB1c2gocHQpfXhlLnB1c2gobnVsbCl9KSxr''@;'; put 'put ''ZS5vbigiZGF0YSIsZnVuY3Rpb24ocHQpe0UoIndyYXBwZWQgZGF0YSIpLE1lLmRlY29kZXImJihwdD1NZS5kZWNvZGVyLndyaXRlKHB0KSksTWUub2JqZWN0TW9kZSYmbnVsbD09cHR8fCEoTWUub2JqZWN0TW9kZXx8cHQmJnB0Lmxlbmd0aCl8fHhlLnB1c2gocHQpfHwoSWU9ITAsa2UucGF1''@;'; put 'put ''c2UoKSl9KSxrZSl2b2lkIDA9PT10aGlzW2JlXSYmImZ1bmN0aW9uIj09dHlwZW9mIGtlW2JlXSYmKHRoaXNbYmVdPWZ1bmN0aW9uKEtlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4ga2VbS2VdLmFwcGx5KGtlLGFyZ3VtZW50cyl9fShiZSkpO2Zvcih2YXIgd2U9MDt3ZTxtZS5sZW5ndGg7''@;'; put 'put ''d2UrKylrZS5vbihtZVt3ZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxtZVt3ZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihwdCl7RSgid3JhcHBlZCBfcmVhZCIscHQpLEllJiYoSWU9ITEsa2UucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocy5wcm90''@;'; put 'put ''b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXNlJiYoc2U9ZCg1ODUwKSksc2UodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocy5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbih4ZSl7dGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz14ZSl9fSkscy5fZnJvbUxpc3Q9dWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihzLmZyb209ZnVuY3Rpb24oa2UseGUpe3JldHVybiB2b2lkIDA9PT1oZSYmKGhlPWQoNTE2NykpLGhlKHMsa2UseGUpfSl9LDQ2MDU6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1NO3ZhciBT''@;'; put 'put ''PWQoNDI4MSkucSxoPVMuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsbz1TLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxJPVMuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxmPVMuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLFQ9ZCg2NzUzKTtmdW5jdGlvbiBBKEUsQil7''@;'; put 'put ''dmFyIEY9dGhpcy5fdHJhbnNmb3JtU3RhdGU7Ri50cmFuc2Zvcm1pbmc9ITE7dmFyIE49Ri53cml0ZWNiO2lmKG51bGw9PT1OKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgbyk7Ri53cml0ZWNodW5rPW51bGwsRi53cml0ZWNiPW51bGwsbnVsbCE9QiYmdGhpcy5wdXNoKEIpLE4oRSk7''@;'; put 'put ''dmFyIEg9dGhpcy5fcmVhZGFibGVTdGF0ZTtILnJlYWRpbmc9ITEsKEgubmVlZFJlYWRhYmxlfHxILmxlbmd0aDxILmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEguaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gTShFKXtpZighKHRoaXMgaW5zdGFuY2VvZiBNKSlyZXR1cm4gbmV3IE0oRSk7''@;'; put 'put ''VC5jYWxsKHRoaXMsRSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOkEuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEUmJigiZnVuY3Rpb24iPT10eXBlb2YgRS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09RS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBFLmZsdXNoJiYodGhpcy5fZmx1c2g9RS5mbHVzaCkpLHRo''@;'; put 'put ''aXMub24oInByZWZpbmlzaCIsTyl9ZnVuY3Rpb24gTygpe3ZhciBFPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9EKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihCLEYpe0QoRSxCLEYpfSl9ZnVu''@;'; put 'put ''Y3Rpb24gRChFLEIsRil7aWYoQilyZXR1cm4gRS5lbWl0KCJlcnJvciIsQik7aWYobnVsbCE9RiYmRS5wdXNoKEYpLEUuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBmO2lmKEUuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgSTtyZXR1cm4gRS5wdXNoKG51''@;'; put 'put ''bGwpfWQoNTcxNykoTSxUKSxNLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEUsQil7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsVC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRSxCKX0sTS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihFLEIsRil7''@;'; put 'put ''RihuZXcgaCgiX3RyYW5zZm9ybSgpIikpfSxNLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oRSxCLEYpe3ZhciBOPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKE4ud3JpdGVjYj1GLE4ud3JpdGVjaHVuaz1FLE4ud3JpdGVlbmNvZGluZz1CLCFOLnRyYW5zZm9ybWluZyl7dmFyIEg9dGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZTsoTi5uZWVkVHJhbnNmb3JtfHxILm5lZWRSZWFkYWJsZXx8SC5sZW5ndGg8SC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChILmhpZ2hXYXRlck1hcmspfX0sTS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRSl7dmFyIEI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVs''@;'; put 'put ''bD09PUIud3JpdGVjaHVua3x8Qi50cmFuc2Zvcm1pbmc/Qi5uZWVkVHJhbnNmb3JtPSEwOihCLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oQi53cml0ZWNodW5rLEIud3JpdGVlbmNvZGluZyxCLmFmdGVyVHJhbnNmb3JtKSl9LE0ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9u''@;'; put 'put ''KEUsQil7VC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEUsZnVuY3Rpb24oRil7QihGKX0pfX0sNDIyOToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxTPWQoNDE1NSk7ZnVuY3Rpb24gbyh2ZSl7dmFyIHVlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRo''@;'; put 'put ''aXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIHFlKHZlLHVlLHplKXt2YXIgT2U9dmUuZW50cnk7Zm9yKHZlLmVudHJ5PW51bGw7T2U7KXt2YXIgQ2U9T2UuY2FsbGJhY2s7dWUucGVuZGluZ2NiLS0sQ2UoemUpLE9lPU9lLm5leHR9dWUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9dmV9''@;'; put 'put ''KHVlLHZlKX19dGUuZXhwb3J0cz1SLFIuV3JpdGFibGVTdGF0ZT1tZTt2YXIgRmUsZj17ZGVwcmVjYXRlOmQoNDkyNyl9LFQ9ZCgyNTAzKSxBPWQoODc2NCkuQnVmZmVyLE09KHR5cGVvZiBkLmc8InUiP2QuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6''@;'; put 'put ''e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxFPWQoMTE5NSksRj1kKDI0NTcpLmdldEhpZ2hXYXRlck1hcmssTj1kKDQyODEpLnEsSD1OLkVSUl9JTlZBTElEX0FSR19UWVBFLHo9Ti5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxaPU4uRVJSX01VTFRJUExFX0NBTExCQUNLLFU9Ti5F''@;'; put 'put ''UlJfU1RSRUFNX0NBTk5PVF9QSVBFLEs9Ti5FUlJfU1RSRUFNX0RFU1RST1lFRCxYPU4uRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxuZT1OLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELHNlPU4uRVJSX1VOS05PV05fRU5DT0RJTkcsaGU9RS5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBfZSgp''@;'; put 'put ''e31mdW5jdGlvbiBtZSh2ZSx1ZSx6ZSl7ST1JfHxkKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIHplJiYoemU9dWUgaW5zdGFuY2VvZiBJKSx0aGlzLm9iamVjdE1vZGU9ISEodmU9dmV8fHt9KS5vYmplY3RNb2RlLHplJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF2ZS53''@;'; put 'put ''cml0YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1GKHRoaXMsdmUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsemUpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMu''@;'; put 'put ''ZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09dmUuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhp''@;'; put 'put ''cy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihDZSl7IWZ1bmN0aW9uIHkodmUsdWUpe3ZhciB6ZT12ZS5fd3JpdGFibGVTdGF0ZSxPZT16ZS5zeW5jLENlPXplLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIENlKXRocm93IG5ldyBaO2lmKGZ1bmN0aW9u''@;'; put 'put ''IEwodmUpe3ZlLndyaXRpbmc9ITEsdmUud3JpdGVjYj1udWxsLHZlLmxlbmd0aC09dmUud3JpdGVsZW4sdmUud3JpdGVsZW49MH0oemUpLHVlKSFmdW5jdGlvbiBrKHZlLHVlLHplLE9lLENlKXstLXVlLnBlbmRpbmdjYix6ZT8oUy5uZXh0VGljayhDZSxPZSksUy5uZXh0VGljayhQZSx2ZSx1''@;'; put 'put ''ZSksdmUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGhlKHZlLE9lKSk6KENlKE9lKSx2ZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsaGUodmUsT2UpLFBlKHZlLHVlKSl9KHZlLHplLE9lLHVlLENlKTtlbHNle3ZhciBrZT1HKHplKXx8dmUuZGVzdHJveWVkOyFrZSYm''@;'; put 'put ''IXplLmNvcmtlZCYmIXplLmJ1ZmZlclByb2Nlc3NpbmcmJnplLmJ1ZmZlcmVkUmVxdWVzdCYmcSh2ZSx6ZSksT2U/Uy5uZXh0VGljayhsLHZlLHplLGtlLENlKTpsKHZlLHplLGtlLENlKX19KHVlLENlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRS''@;'; put 'put ''ZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09dmUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISF2ZS5hdXRvRGVzdHJv''@;'; put 'put ''eSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IG8odGhpcyl9ZnVuY3Rpb24gUih2ZSl7dmFyIHVlPXRoaXMgaW5zdGFuY2VvZihJPUl8fGQoNjc1MykpO2lmKCF1ZSYmIUZlLmNhbGwoUix0aGlzKSlyZXR1cm4gbmV3IFIodmUpO3RoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGU9bmV3IG1lKHZlLHRoaXMsdWUpLHRoaXMud3JpdGFibGU9ITAsdmUmJigiZnVuY3Rpb24iPT10eXBlb2YgdmUud3JpdGUmJih0aGlzLl93cml0ZT12ZS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIHZlLndyaXRldiYmKHRoaXMuX3dyaXRldj12ZS53cml0ZXYpLCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiB2ZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT12ZS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgdmUuZmluYWwmJih0aGlzLl9maW5hbD12ZS5maW5hbCkpLFQuY2FsbCh0aGlzKX1mdW5jdGlvbiBfKHZlLHVlLHplLE9lLENlLGtlLHhlKXt1ZS53cml0ZWxl''@;'; put 'put ''bj1PZSx1ZS53cml0ZWNiPXhlLHVlLndyaXRpbmc9ITAsdWUuc3luYz0hMCx1ZS5kZXN0cm95ZWQ/dWUub253cml0ZShuZXcgSygid3JpdGUiKSk6emU/dmUuX3dyaXRldihDZSx1ZS5vbndyaXRlKTp2ZS5fd3JpdGUoQ2Usa2UsdWUub253cml0ZSksdWUuc3luYz0hMX1mdW5jdGlvbiBsKHZl''@;'; put 'put ''LHVlLHplLE9lKXt6ZXx8ZnVuY3Rpb24gYih2ZSx1ZSl7MD09PXVlLmxlbmd0aCYmdWUubmVlZERyYWluJiYodWUubmVlZERyYWluPSExLHZlLmVtaXQoImRyYWluIikpfSh2ZSx1ZSksdWUucGVuZGluZ2NiLS0sT2UoKSxQZSh2ZSx1ZSl9ZnVuY3Rpb24gcSh2ZSx1ZSl7dWUuYnVmZmVyUHJv''@;'; put 'put ''Y2Vzc2luZz0hMDt2YXIgemU9dWUuYnVmZmVyZWRSZXF1ZXN0O2lmKHZlLl93cml0ZXYmJnplJiZ6ZS5uZXh0KXt2YXIgQ2U9bmV3IEFycmF5KHVlLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxrZT11ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7a2UuZW50cnk9emU7Zm9yKHZhciB4ZT0wLE1lPSEwO3pl''@;'; put 'put ''OylDZVt4ZV09emUsemUuaXNCdWZ8fChNZT0hMSksemU9emUubmV4dCx4ZSs9MTtDZS5hbGxCdWZmZXJzPU1lLF8odmUsdWUsITAsdWUubGVuZ3RoLENlLCIiLGtlLmZpbmlzaCksdWUucGVuZGluZ2NiKyssdWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLGtlLm5leHQ/KHVlLmNvcmtlZFJl''@;'; put 'put ''cXVlc3RzRnJlZT1rZS5uZXh0LGtlLm5leHQ9bnVsbCk6dWUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBvKHVlKSx1ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDt6ZTspe3ZhciBJZT16ZS5jaHVuaztpZihfKHZlLHVlLCExLHVlLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgsSWUs''@;'; put 'put ''emUuZW5jb2RpbmcsemUuY2FsbGJhY2spLHplPXplLm5leHQsdWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx1ZS53cml0aW5nKWJyZWFrfW51bGw9PT16ZSYmKHVlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9dWUuYnVmZmVyZWRSZXF1ZXN0PXplLHVlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9''@;'; put 'put ''ZnVuY3Rpb24gRyh2ZSl7cmV0dXJuIHZlLmVuZGluZyYmMD09PXZlLmxlbmd0aCYmbnVsbD09PXZlLmJ1ZmZlcmVkUmVxdWVzdCYmIXZlLmZpbmlzaGVkJiYhdmUud3JpdGluZ31mdW5jdGlvbiBRKHZlLHVlKXt2ZS5fZmluYWwoZnVuY3Rpb24oemUpe3VlLnBlbmRpbmdjYi0tLHplJiZoZSh2''@;'; put 'put ''ZSx6ZSksdWUucHJlZmluaXNoZWQ9ITAsdmUuZW1pdCgicHJlZmluaXNoIiksUGUodmUsdWUpfSl9ZnVuY3Rpb24gUGUodmUsdWUpe3ZhciB6ZT1HKHVlKTtpZih6ZSYmKGZ1bmN0aW9uIHBlKHZlLHVlKXshdWUucHJlZmluaXNoZWQmJiF1ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiB2ZS5fZmluYWx8fHVlLmRlc3Ryb3llZD8odWUucHJlZmluaXNoZWQ9ITAsdmUuZW1pdCgicHJlZmluaXNoIikpOih1ZS5wZW5kaW5nY2IrKyx1ZS5maW5hbENhbGxlZD0hMCxTLm5leHRUaWNrKFEsdmUsdWUpKSl9KHZlLHVlKSwwPT09dWUucGVuZGluZ2NiJiYodWUuZmluaXNoZWQ9''@;'; put 'put ''ITAsdmUuZW1pdCgiZmluaXNoIiksdWUuYXV0b0Rlc3Ryb3kpKSl7dmFyIE9lPXZlLl9yZWFkYWJsZVN0YXRlOyghT2V8fE9lLmF1dG9EZXN0cm95JiZPZS5lbmRFbWl0dGVkKSYmdmUuZGVzdHJveSgpfXJldHVybiB6ZX1kKDU3MTcpKFIsVCksbWUucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgdWU9dGhpcy5idWZmZXJlZFJlcXVlc3QsemU9W107dWU7KXplLnB1c2godWUpLHVlPXVlLm5leHQ7cmV0dXJuIHplfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkobWUucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Zi5kZXByZWNhdGUoZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wu''@;'; put 'put ''aGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oRmU9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFIsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpm''@;'; put 'put ''dW5jdGlvbih1ZSl7cmV0dXJuISFGZS5jYWxsKHRoaXMsdWUpfHx0aGlzPT09UiYmdWUmJnVlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgbWV9fSkpOkZlPWZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUgaW5zdGFuY2VvZiB0aGlzfSxSLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7aGUodGhp''@;'; put 'put ''cyxuZXcgVSl9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHZlLHVlLHplKXt2YXIgT2U9dGhpcy5fd3JpdGFibGVTdGF0ZSxDZT0hMSxrZT0hT2Uub2JqZWN0TW9kZSYmZnVuY3Rpb24gRCh2ZSl7cmV0dXJuIEEuaXNCdWZmZXIodmUpfHx2ZSBpbnN0YW5jZW9mIE19KHZlKTtyZXR1cm4g''@;'; put 'put ''a2UmJiFBLmlzQnVmZmVyKHZlKSYmKHZlPWZ1bmN0aW9uIE8odmUpe3JldHVybiBBLmZyb20odmUpfSh2ZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiB1ZSYmKHplPXVlLHVlPW51bGwpLGtlP3VlPSJidWZmZXIiOnVlfHwodWU9T2UuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''emUmJih6ZT1fZSksT2UuZW5kaW5nP2Z1bmN0aW9uIHModmUsdWUpe3ZhciB6ZT1uZXcgbmU7aGUodmUsemUpLFMubmV4dFRpY2sodWUsemUpfSh0aGlzLHplKTooa2V8fGZ1bmN0aW9uIHUodmUsdWUsemUsT2Upe3ZhciBDZTtyZXR1cm4gbnVsbD09PXplP0NlPW5ldyBYOiJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgemUmJiF1ZS5vYmplY3RNb2RlJiYoQ2U9bmV3IEgoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLHplKSksIUNlfHwoaGUodmUsQ2UpLFMubmV4dFRpY2soT2UsQ2UpLCExKX0odGhpcyxPZSx2ZSx6ZSkpJiYoT2UucGVuZGluZ2NiKyssQ2U9ZnVuY3Rpb24gcCh2ZSx1ZSx6ZSxP''@;'; put 'put ''ZSxDZSxrZSl7aWYoIXplKXt2YXIgeGU9ZnVuY3Rpb24gdih2ZSx1ZSx6ZSl7cmV0dXJuIXZlLm9iamVjdE1vZGUmJiExIT09dmUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB1ZSYmKHVlPUEuZnJvbSh1ZSx6ZSkpLHVlfSh1ZSxPZSxDZSk7T2UhPT14ZSYmKHplPSEwLENlPSJi''@;'; put 'put ''dWZmZXIiLE9lPXhlKX12YXIgTWU9dWUub2JqZWN0TW9kZT8xOk9lLmxlbmd0aDt1ZS5sZW5ndGgrPU1lO3ZhciBJZT11ZS5sZW5ndGg8dWUuaGlnaFdhdGVyTWFyaztpZihJZXx8KHVlLm5lZWREcmFpbj0hMCksdWUud3JpdGluZ3x8dWUuY29ya2VkKXt2YXIgYmU9dWUubGFzdEJ1ZmZlcmVk''@;'; put 'put ''UmVxdWVzdDt1ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpPZSxlbmNvZGluZzpDZSxpc0J1Zjp6ZSxjYWxsYmFjazprZSxuZXh0Om51bGx9LGJlP2JlLm5leHQ9dWUubGFzdEJ1ZmZlcmVkUmVxdWVzdDp1ZS5idWZmZXJlZFJlcXVlc3Q9dWUubGFzdEJ1ZmZlcmVkUmVxdWVzdCx1ZS5i''@;'; put 'put ''dWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF8odmUsdWUsITEsTWUsT2UsQ2Usa2UpO3JldHVybiBJZX0odGhpcyxPZSxrZSx2ZSx1ZSx6ZSkpLENlfSxSLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sUi5wcm90b3R5cGUudW5jb3Jr''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHZlPXRoaXMuX3dyaXRhYmxlU3RhdGU7dmUuY29ya2VkJiYodmUuY29ya2VkLS0sIXZlLndyaXRpbmcmJiF2ZS5jb3JrZWQmJiF2ZS5idWZmZXJQcm9jZXNzaW5nJiZ2ZS5idWZmZXJlZFJlcXVlc3QmJnEodGhpcyx2ZSkpfSxSLnByb3RvdHlwZS5zZXREZWZhdWx0''@;'; put 'put ''RW5jb2Rpbmc9ZnVuY3Rpb24odWUpe2lmKCJzdHJpbmciPT10eXBlb2YgdWUmJih1ZT11ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRl''@;'; put 'put ''eE9mKCh1ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBzZSh1ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXVlLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiEx''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLFIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih2ZSx1ZSx6ZSl7emUobmV3IHooIl93cml0ZSgpIikpfSxSLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHZlLHVlLHpl''@;'; put 'put ''KXt2YXIgT2U9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmU/KHplPXZlLHZlPW51bGwsdWU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHVlJiYoemU9dWUsdWU9bnVsbCksbnVsbCE9dmUmJnRoaXMud3JpdGUodmUsdWUpLE9lLmNvcmtlZCYmKE9lLmNv''@;'; put 'put ''cmtlZD0xLHRoaXMudW5jb3JrKCkpLE9lLmVuZGluZ3x8ZnVuY3Rpb24gWmUodmUsdWUsemUpe3VlLmVuZGluZz0hMCxQZSh2ZSx1ZSksemUmJih1ZS5maW5pc2hlZD9TLm5leHRUaWNrKHplKTp2ZS5vbmNlKCJmaW5pc2giLHplKSksdWUuZW5kZWQ9ITAsdmUud3JpdGFibGU9ITF9KHRoaXMs''@;'; put 'put ''T2UsemUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUs''@;'; put 'put ''ImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odWUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlLmRlc3Ryb3llZD11ZSl9fSksUi5wcm90b3R5cGUuZGVzdHJveT1FLmRlc3Ryb3ksUi5wcm90b3R5cGUuX3VuZGVzdHJveT1FLnVuZGVzdHJveSxSLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih2ZSx1ZSl7dWUodmUpfX0sNTg1MDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''aCxTPWQoNDE1NSk7ZnVuY3Rpb24gbyhuZSxzZSxoZSl7cmV0dXJuIHNlPWZ1bmN0aW9uIEkobmUpe3ZhciBzZT1mdW5jdGlvbiBmKG5lLHNlKXtpZigib2JqZWN0IiE9dHlwZW9mIG5lfHxudWxsPT09bmUpcmV0dXJuIG5lO3ZhciBoZT1uZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWhlKXt2YXIgX2U9aGUuY2FsbChuZSxzZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIF9lKXJldHVybiBfZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXNlP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKG5lKX0obmUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Ygc2U/c2U6U3RyaW5nKHNlKX0oc2UpLHNlIGluIG5lP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxzZSx7dmFsdWU6aGUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpuZVtzZV09aGUsbmV9dmFyIFQ9ZCg4NjEwKSxBPVN5bWJvbCgibGFzdFJlc29sdmUiKSxNPVN5bWJvbCgibGFzdFJlamVjdCIpLE89U3ltYm9sKCJlcnJvciIpLEQ9U3ltYm9sKCJlbmRlZCIpLEU9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEI9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksRj1T''@;'; put 'put ''eW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIE4obmUsc2Upe3JldHVybnt2YWx1ZTpuZSxkb25lOnNlfX1mdW5jdGlvbiBIKG5lKXt2YXIgc2U9bmVbQV07aWYobnVsbCE9PXNlKXt2YXIgaGU9bmVbRl0ucmVhZCgpO251bGwhPT1oZSYmKG5lW0VdPW51bGwsbmVbQV09bnVsbCxuZVtNXT1udWxs''@;'; put 'put ''LHNlKE4oaGUsITEpKSl9fWZ1bmN0aW9uIHoobmUpe1MubmV4dFRpY2soSCxuZSl9dmFyIFU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksSz1PYmplY3Quc2V0UHJvdG90eXBlT2YoKG8oaD17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW0ZdfSxuZXh0OmZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIHNlPXRoaXMsaGU9dGhpc1tPXTtpZihudWxsIT09aGUpcmV0dXJuIFByb21pc2UucmVqZWN0KGhlKTtpZih0aGlzW0RdKXJldHVybiBQcm9taXNlLnJlc29sdmUoTih2b2lkIDAsITApKTtpZih0aGlzW0ZdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oUixzKXtT''@;'; put 'put ''Lm5leHRUaWNrKGZ1bmN0aW9uKCl7c2VbT10/cyhzZVtPXSk6UihOKHZvaWQgMCwhMCkpfSl9KTt2YXIgbWUsX2U9dGhpc1tFXTtpZihfZSltZT1uZXcgUHJvbWlzZShmdW5jdGlvbiBaKG5lLHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUsX2Upe25lLnRoZW4oZnVuY3Rpb24oKXtzZVtEXT9oZShO''@;'; put 'put ''KHZvaWQgMCwhMCkpOnNlW0JdKGhlLF9lKX0sX2UpfX0oX2UsdGhpcykpO2Vsc2V7dmFyIEZlPXRoaXNbRl0ucmVhZCgpO2lmKG51bGwhPT1GZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKE4oRmUsITEpKTttZT1uZXcgUHJvbWlzZSh0aGlzW0JdKX1yZXR1cm4gdGhpc1tFXT1tZSxtZX19LFN5''@;'; put 'put ''bWJvbC5hc3luY0l0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvKGgsInJldHVybiIsZnVuY3Rpb24oKXt2YXIgc2U9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaGUsX2Upe3NlW0ZdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihtZSl7bWU/X2UobWUpOmhlKE4odm9p''@;'; put 'put ''ZCAwLCEwKSl9KX0pfSksaCksVSk7dGUuZXhwb3J0cz1mdW5jdGlvbihzZSl7dmFyIGhlLF9lPU9iamVjdC5jcmVhdGUoSywobyhoZT17fSxGLHt2YWx1ZTpzZSx3cml0YWJsZTohMH0pLG8oaGUsQSx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLG8oaGUsTSx7dmFsdWU6bnVsbCx3cml0YWJs''@;'; put 'put ''ZTohMH0pLG8oaGUsTyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLG8oaGUsRCx7dmFsdWU6c2UuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLG8oaGUsQix7dmFsdWU6ZnVuY3Rpb24oRmUsUil7dmFyIHM9X2VbRl0ucmVhZCgpO3M/KF9lW0VdPW51bGwsX2VbQV09''@;'; put 'put ''bnVsbCxfZVtNXT1udWxsLEZlKE4ocywhMSkpKTooX2VbQV09RmUsX2VbTV09Uil9LHdyaXRhYmxlOiEwfSksaGUpKTtyZXR1cm4gX2VbRV09bnVsbCxUKHNlLGZ1bmN0aW9uKG1lKXtpZihtZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PW1lLmNvZGUpe3ZhciBGZT1fZVtNXTty''@;'; put 'put ''ZXR1cm4gbnVsbCE9PUZlJiYoX2VbRV09bnVsbCxfZVtBXT1udWxsLF9lW01dPW51bGwsRmUobWUpKSx2b2lkKF9lW09dPW1lKX12YXIgUj1fZVtBXTtudWxsIT09UiYmKF9lW0VdPW51bGwsX2VbQV09bnVsbCxfZVtNXT1udWxsLFIoTih2b2lkIDAsITApKSksX2VbRF09ITB9KSxzZS5vbigi''@;'; put 'put ''cmVhZGFibGUiLHouYmluZChudWxsLF9lKSksX2V9fSw3MzI3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFMoSCx6KXt2YXIgWj1PYmplY3Qua2V5cyhIKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgVT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xz''@;'; put 'put ''KEgpO3omJihVPVUuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEgsSykuZW51bWVyYWJsZX0pKSxaLnB1c2guYXBwbHkoWixVKX1yZXR1cm4gWn1mdW5jdGlvbiBoKEgpe2Zvcih2YXIgej0xO3o8YXJndW1lbnRzLmxlbmd0aDt6Kysp''@;'; put 'put ''e3ZhciBaPW51bGwhPWFyZ3VtZW50c1t6XT9hcmd1bWVudHNbel06e307eiUyP1MoT2JqZWN0KFopLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKFUpe28oSCxVLFpbVV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSCxPYmplY3QuZ2V0''@;'; put 'put ''T3duUHJvcGVydHlEZXNjcmlwdG9ycyhaKSk6UyhPYmplY3QoWikpLmZvckVhY2goZnVuY3Rpb24oVSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEgsVSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFosVSkpfSl9cmV0dXJuIEh9ZnVuY3Rpb24gbyhILHosWil7cmV0dXJuKHo9QSh6''@;'; put 'put ''KSlpbiBIP09iamVjdC5kZWZpbmVQcm9wZXJ0eShILHose3ZhbHVlOlosZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpIW3pdPVosSH1mdW5jdGlvbiBmKEgseil7Zm9yKHZhciBaPTA7Wjx6Lmxlbmd0aDtaKyspe3ZhciBVPXpbWl07VS5lbnVtZXJhYmxlPVUu''@;'; put 'put ''ZW51bWVyYWJsZXx8ITEsVS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFUmJihVLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSCxBKFUua2V5KSxVKX19ZnVuY3Rpb24gQShIKXt2YXIgej1mdW5jdGlvbiBNKEgseil7aWYoIm9iamVjdCIhPXR5cGVvZiBIfHxudWxsPT09''@;'; put 'put ''SClyZXR1cm4gSDt2YXIgWj1IW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09Wil7dmFyIFU9Wi5jYWxsKEgsenx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuIFU7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy''@;'; put 'put ''aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT16P1N0cmluZzpOdW1iZXIpKEgpfShILCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHo/ejpTdHJpbmcoeil9dmFyIEQ9ZCg4NzY0KS5CdWZmZXIsQj1kKDIzNjEpLmluc3BlY3QsRj1CJiZCLmN1c3RvbXx8Imluc3Bl''@;'; put 'put ''Y3QiO2Z1bmN0aW9uIE4oSCx6LFope0QucHJvdG90eXBlLmNvcHkuY2FsbChILHosWil9dGUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIEgoKXsoZnVuY3Rpb24gSShILHope2lmKCEoSCBpbnN0YW5jZW9mIHopKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3Mg''@;'; put 'put ''YXMgYSBmdW5jdGlvbiIpfSkodGhpcyxIKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBUKEgseixaKXt6JiZmKEgucHJvdG90eXBlLHopLFomJmYoSCxaKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSCwicHJvdG90eXBlIix7d3Jp''@;'; put 'put ''dGFibGU6ITF9KX0oSCxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oWil7dmFyIFU9e2RhdGE6WixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9VTp0aGlzLmhlYWQ9VSx0aGlzLnRhaWw9VSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVu''@;'; put 'put ''Y3Rpb24oWil7dmFyIFU9e2RhdGE6WixuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPVUpLHRoaXMuaGVhZD1VLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBaPXRoaXMuaGVhZC5k''@;'; put 'put ''YXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsWn19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6Impv''@;'; put 'put ''aW4iLHZhbHVlOmZ1bmN0aW9uKFope2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFU9dGhpcy5oZWFkLEs9IiIrVS5kYXRhO1U9VS5uZXh0OylLKz1aK1UuZGF0YTtyZXR1cm4gS319LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oWil7aWYoMD09PXRoaXMubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBELmFsbG9jKDApO2Zvcih2YXIgVT1ELmFsbG9jVW5zYWZlKFo+Pj4wKSxLPXRoaXMuaGVhZCxYPTA7SzspTihLLmRhdGEsVSxYKSxYKz1LLmRhdGEubGVuZ3RoLEs9Sy5uZXh0O3JldHVybiBVfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oWixVKXt2YXIgSztyZXR1''@;'; put 'put ''cm4gWjx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KEs9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxaKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShaKSk6Sz1aPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpVP3RoaXMuX2dldFN0cmluZyhaKTp0aGlzLl9n''@;'; put 'put ''ZXRCdWZmZXIoWiksS319LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKFope3ZhciBVPXRoaXMuaGVhZCxLPTEsWD1VLmRhdGE7Zm9yKFotPVgubGVuZ3RoO1U9VS5uZXh0Oyl7dmFy''@;'; put 'put ''IG5lPVUuZGF0YSxzZT1aPm5lLmxlbmd0aD9uZS5sZW5ndGg6WjtpZihYKz1zZT09PW5lLmxlbmd0aD9uZTpuZS5zbGljZSgwLFopLDA9PShaLT1zZSkpe3NlPT09bmUubGVuZ3RoPygrK0ssdGhpcy5oZWFkPVUubmV4dD9VLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9VSxVLmRh''@;'; put 'put ''dGE9bmUuc2xpY2Uoc2UpKTticmVha30rK0t9cmV0dXJuIHRoaXMubGVuZ3RoLT1LLFh9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihaKXt2YXIgVT1ELmFsbG9jVW5zYWZlKFopLEs9dGhpcy5oZWFkLFg9MTtmb3IoSy5kYXRhLmNvcHkoVSksWi09Sy5kYXRhLmxlbmd0aDtL''@;'; put 'put ''PUsubmV4dDspe3ZhciBuZT1LLmRhdGEsc2U9Wj5uZS5sZW5ndGg/bmUubGVuZ3RoOlo7aWYobmUuY29weShVLFUubGVuZ3RoLVosMCxzZSksMD09KFotPXNlKSl7c2U9PT1uZS5sZW5ndGg/KCsrWCx0aGlzLmhlYWQ9Sy5uZXh0P0submV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1L''@;'; put 'put ''LEsuZGF0YT1uZS5zbGljZShzZSkpO2JyZWFrfSsrWH1yZXR1cm4gdGhpcy5sZW5ndGgtPVgsVX19LHtrZXk6Rix2YWx1ZTpmdW5jdGlvbihaLFUpe3JldHVybiBCKHRoaXMsaChoKHt9LFUpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLEh9KCl9LDExOTU6KHRlLGosZCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1KTtmdW5jdGlvbiBvKE0sTyl7VChNLE8pLEkoTSl9ZnVuY3Rpb24gSShNKXtNLl93cml0YWJsZVN0YXRlJiYhTS5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE0uX3JlYWRhYmxlU3RhdGUmJiFNLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8''@;'; put 'put ''TS5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIFQoTSxPKXtNLmVtaXQoImVycm9yIixPKX10ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIGgoTSxPKXt2YXIgRD10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KE8/TyhNKTpNJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLFMubmV4dFRpY2soVCx0aGlzLE0p''@;'; put 'put ''KTpTLm5leHRUaWNrKFQsdGhpcyxNKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KE18fG51bGws''@;'; put 'put ''ZnVuY3Rpb24oRil7IU8mJkY/RC5fd3JpdGFibGVTdGF0ZT9ELl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9TLm5leHRUaWNrKEksRCk6KEQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLFMubmV4dFRpY2sobyxELEYpKTpTLm5leHRUaWNrKG8sRCxGKTpPPyhTLm5leHRUaWNr''@;'; put 'put ''KEksRCksTyhGKSk6Uy5uZXh0VGljayhJLEQpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBmKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''LmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBBKE0sTyl7''@;'; put 'put ''dmFyIEQ9TS5fcmVhZGFibGVTdGF0ZSxFPU0uX3dyaXRhYmxlU3RhdGU7RCYmRC5hdXRvRGVzdHJveXx8RSYmRS5hdXRvRGVzdHJveT9NLmRlc3Ryb3koTyk6TS5lbWl0KCJlcnJvciIsTyl9fX0sODYxMDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQyODEpLnEuRVJSX1NUUkVB''@;'; put 'put ''TV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gbygpe310ZS5leHBvcnRzPWZ1bmN0aW9uIGYoVCxBLE0pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBBKXJldHVybiBmKFQsbnVsbCxBKTtBfHwoQT17fSksTT1mdW5jdGlvbiBoKFQpe3ZhciBBPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFBKXtB''@;'; put 'put ''PSEwO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLE89bmV3IEFycmF5KE0pLEQ9MDtEPE07RCsrKU9bRF09YXJndW1lbnRzW0RdO1QuYXBwbHkodGhpcyxPKX19fShNfHxvKTt2YXIgTz1BLnJlYWRhYmxlfHwhMSE9PUEucmVhZGFibGUmJlQucmVhZGFibGUsRD1BLndyaXRhYmxlfHwhMSE9''@;'; put 'put ''PUEud3JpdGFibGUmJlQud3JpdGFibGUsRT1mdW5jdGlvbigpe1Qud3JpdGFibGV8fEYoKX0sQj1ULl93cml0YWJsZVN0YXRlJiZULl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLEY9ZnVuY3Rpb24oKXtEPSExLEI9ITAsT3x8TS5jYWxsKFQpfSxOPVQuX3JlYWRhYmxlU3RhdGUmJlQuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuZW5kRW1pdHRlZCxIPWZ1bmN0aW9uKCl7Tz0hMSxOPSEwLER8fE0uY2FsbChUKX0sej1mdW5jdGlvbihYKXtNLmNhbGwoVCxYKX0sWj1mdW5jdGlvbigpe3ZhciBYO3JldHVybiBPJiYhTj8oKCFULl9yZWFkYWJsZVN0YXRlfHwhVC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihY''@;'; put 'put ''PW5ldyBTKSxNLmNhbGwoVCxYKSk6RCYmIUI/KCghVC5fd3JpdGFibGVTdGF0ZXx8IVQuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYoWD1uZXcgUyksTS5jYWxsKFQsWCkpOnZvaWQgMH0sVT1mdW5jdGlvbigpe1QucmVxLm9uKCJmaW5pc2giLEYpfTtyZXR1cm4gZnVuY3Rpb24gSShUKXtyZXR1''@;'; put 'put ''cm4gVC5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBULmFib3J0fShUKT8oVC5vbigiY29tcGxldGUiLEYpLFQub24oImFib3J0IixaKSxULnJlcT9VKCk6VC5vbigicmVxdWVzdCIsVSkpOkQmJiFULl93cml0YWJsZVN0YXRlJiYoVC5vbigiZW5kIixFKSxULm9uKCJjbG9zZSIsRSkp''@;'; put 'put ''LFQub24oImVuZCIsSCksVC5vbigiZmluaXNoIixGKSwhMSE9PUEuZXJyb3ImJlQub24oImVycm9yIix6KSxULm9uKCJjbG9zZSIsWiksZnVuY3Rpb24oKXtULnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsRiksVC5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLFopLFQucmVtb3ZlTGlzdGVuZXIo''@;'; put 'put ''InJlcXVlc3QiLFUpLFQucmVxJiZULnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixGKSxULnJlbW92ZUxpc3RlbmVyKCJlbmQiLEUpLFQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixFKSxULnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLEYpLFQucmVtb3ZlTGlzdGVuZXIoImVuZCIsSCksVC5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHopLFQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixaKX19fSw1MTY3OnRlPT57dGUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5OTQ2Oih0ZSxq''@;'; put 'put ''LGQpPT57InVzZSBzdHJpY3QiO3ZhciBTLG89ZCg0MjgxKS5xLEk9by5FUlJfTUlTU0lOR19BUkdTLGY9by5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBUKEYpe2lmKEYpdGhyb3cgRn1mdW5jdGlvbiBPKEYpe0YoKX1mdW5jdGlvbiBEKEYsTil7cmV0dXJuIEYucGlwZShOKX10ZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIEIoKXtmb3IodmFyIEY9YXJndW1lbnRzLmxlbmd0aCxOPW5ldyBBcnJheShGKSxIPTA7SDxGO0grKylOW0hdPWFyZ3VtZW50c1tIXTt2YXIgej1mdW5jdGlvbiBFKEYpe3JldHVybiBGLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIEZbRi5sZW5ndGgtMV0/Ri5w''@;'; put 'put ''b3AoKTpUfShOKTtpZihBcnJheS5pc0FycmF5KE5bMF0pJiYoTj1OWzBdKSxOLmxlbmd0aDwyKXRocm93IG5ldyBJKCJzdHJlYW1zIik7dmFyIFosVT1OLm1hcChmdW5jdGlvbihLLFgpe3ZhciBuZT1YPE4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uIE0oRixOLEgseil7ej1mdW5jdGlvbiBo''@;'; put 'put ''KEYpe3ZhciBOPSExO3JldHVybiBmdW5jdGlvbigpe058fChOPSEwLEYuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0oeik7dmFyIFo9ITE7Ri5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Wj0hMH0pLHZvaWQgMD09PVMmJihTPWQoODYxMCkpLFMoRix7cmVhZGFibGU6Tix3cml0YWJsZTpIfSxm''@;'; put 'put ''dW5jdGlvbihLKXtpZihLKXJldHVybiB6KEspO1o9ITAseigpfSk7dmFyIFU9ITE7cmV0dXJuIGZ1bmN0aW9uKEspe2lmKCFaJiYhVSl7aWYoVT0hMCxmdW5jdGlvbiBBKEYpe3JldHVybiBGLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIEYuYWJvcnR9KEYpKXJldHVybiBGLmFib3J0''@;'; put 'put ''KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEYuZGVzdHJveSlyZXR1cm4gRi5kZXN0cm95KCk7eihLfHxuZXcgZigicGlwZSIpKX19fShLLG5lLFg+MCxmdW5jdGlvbihoZSl7Wnx8KFo9aGUpLGhlJiZVLmZvckVhY2goTyksIW5lJiYoVS5mb3JFYWNoKE8pLHooWikpfSl9KTtyZXR1cm4gTi5y''@;'; put 'put ''ZWR1Y2UoRCl9fSwyNDU3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNDI4MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7dGUuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBvKEksZixULEEpe3ZhciBNPWZ1bmN0aW9uIGgoSSxmLFQpe3JldHVybiBudWxsIT1J''@;'; put 'put ''LmhpZ2hXYXRlck1hcms/SS5oaWdoV2F0ZXJNYXJrOmY/SVtUXTpudWxsfShmLEEsVCk7aWYobnVsbCE9TSl7aWYoIWlzRmluaXRlKE0pfHxNYXRoLmZsb29yKE0pIT09TXx8TTwwKXRocm93IG5ldyBTKEE/VDoiaGlnaFdhdGVyTWFyayIsTSk7cmV0dXJuIE1hdGguZmxvb3IoTSl9cmV0dXJu''@;'; put 'put ''IEkub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOih0ZSxqLGQpPT57dGUuZXhwb3J0cz1kKDcxODcpLkV2ZW50RW1pdHRlcn0sNzQxODp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPWZ1bmN0aW9uKGQsUyl7aWYoUz1TLnNwbGl0KCI6IilbMF0sIShkPStkKSlyZXR1cm4hMTtzd2l0''@;'; put 'put ''Y2goUyl7Y2FzZSJodHRwIjpjYXNlIndzIjpyZXR1cm4gODAhPT1kO2Nhc2UiaHR0cHMiOmNhc2Uid3NzIjpyZXR1cm4gNDQzIT09ZDtjYXNlImZ0cCI6cmV0dXJuIDIxIT09ZDtjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09ZDtjYXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09ZH19LDk3''@;'; put 'put ''ODU6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg4NzY0KS5CdWZmZXIsaD1kKDU3MTcpLG89ZCgzMzQ5KSxJPW5ldyBBcnJheSgxNiksZj1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMs''@;'; put 'put ''MTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxUPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAs''@;'; put 'put ''MTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEE9WzExLDE0LDE1LDEyLDUsOCw3LDks''@;'; put 'put ''MTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIs''@;'; put 'put ''MTMsMTQsMTEsOCw1LDZdLE09WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwx''@;'; put 'put ''Miw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLE89WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sRD1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBF''@;'; put 'put ''KCl7by5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBCKFUsSyl7cmV0dXJuIFU8PEt8VT4+PjMyLUt9ZnVuY3Rpb24gRihVLEss''@;'; put 'put ''WCxuZSxzZSxoZSxfZSxtZSl7cmV0dXJuIEIoVSsoS15YXm5lKStoZStfZXwwLG1lKStzZXwwfWZ1bmN0aW9uIE4oVSxLLFgsbmUsc2UsaGUsX2UsbWUpe3JldHVybiBCKFUrKEsmWHx+SyZuZSkraGUrX2V8MCxtZSkrc2V8MH1mdW5jdGlvbiBIKFUsSyxYLG5lLHNlLGhlLF9lLG1lKXtyZXR1''@;'; put 'put ''cm4gQihVKygoS3x+WClebmUpK2hlK19lfDAsbWUpK3NlfDB9ZnVuY3Rpb24geihVLEssWCxuZSxzZSxoZSxfZSxtZSl7cmV0dXJuIEIoVSsoSyZuZXxYJn5uZSkraGUrX2V8MCxtZSkrc2V8MH1mdW5jdGlvbiBaKFUsSyxYLG5lLHNlLGhlLF9lLG1lKXtyZXR1cm4gQihVKyhLXihYfH5uZSkp''@;'; put 'put ''K2hlK19lfDAsbWUpK3NlfDB9aChFLG8pLEUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIFU9SSxLPTA7SzwxNjsrK0spVVtLXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkspO2Zvcih2YXIgWD0wfHRoaXMuX2EsbmU9MHx0aGlzLl9iLHNlPTB8dGhpcy5fYyxoZT0w''@;'; put 'put ''fHRoaXMuX2QsX2U9MHx0aGlzLl9lLG1lPTB8dGhpcy5fYSxGZT0wfHRoaXMuX2IsUj0wfHRoaXMuX2Mscz0wfHRoaXMuX2QsdT0wfHRoaXMuX2Usdj0wO3Y8ODA7dis9MSl7dmFyIHAsXzt2PDE2PyhwPUYoWCxuZSxzZSxoZSxfZSxVW2Zbdl1dLE9bMF0sQVt2XSksXz1aKG1lLEZlLFIscyx1''@;'; put 'put ''LFVbVFt2XV0sRFswXSxNW3ZdKSk6djwzMj8ocD1OKFgsbmUsc2UsaGUsX2UsVVtmW3ZdXSxPWzFdLEFbdl0pLF89eihtZSxGZSxSLHMsdSxVW1Rbdl1dLERbMV0sTVt2XSkpOnY8NDg/KHA9SChYLG5lLHNlLGhlLF9lLFVbZlt2XV0sT1syXSxBW3ZdKSxfPUgobWUsRmUsUixzLHUsVVtUW3Zd''@;'; put 'put ''XSxEWzJdLE1bdl0pKTp2PDY0PyhwPXooWCxuZSxzZSxoZSxfZSxVW2Zbdl1dLE9bM10sQVt2XSksXz1OKG1lLEZlLFIscyx1LFVbVFt2XV0sRFszXSxNW3ZdKSk6KHA9WihYLG5lLHNlLGhlLF9lLFVbZlt2XV0sT1s0XSxBW3ZdKSxfPUYobWUsRmUsUixzLHUsVVtUW3ZdXSxEWzRdLE1bdl0p''@;'; put 'put ''KSxYPV9lLF9lPWhlLGhlPUIoc2UsMTApLHNlPW5lLG5lPXAsbWU9dSx1PXMscz1CKFIsMTApLFI9RmUsRmU9X312YXIgaz10aGlzLl9iK3NlK3N8MDt0aGlzLl9iPXRoaXMuX2MraGUrdXwwLHRoaXMuX2M9dGhpcy5fZCtfZSttZXwwLHRoaXMuX2Q9dGhpcy5fZStYK0ZlfDAsdGhpcy5fZT10''@;'; put 'put ''aGlzLl9hK25lK1J8MCx0aGlzLl9hPWt9LEUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3Vw''@;'; put 'put ''ZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlz''@;'; put 'put ''Ll91cGRhdGUoKTt2YXIgVT1TLmFsbG9jP1MuYWxsb2MoMjApOm5ldyBTKDIwKTtyZXR1cm4gVS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksVS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksVS53cml0''@;'; put 'put ''ZUludDMyTEUodGhpcy5fZSwxNiksVX0sdGUuZXhwb3J0cz1FfSw5NTA5Oih0ZSxqLGQpPT57dmFyIFM9ZCg4NzY0KSxoPVMuQnVmZmVyO2Z1bmN0aW9uIG8oZixUKXtmb3IodmFyIEEgaW4gZilUW0FdPWZbQV19ZnVuY3Rpb24gSShmLFQsQSl7cmV0dXJuIGgoZixULEEpfWguZnJvbSYmaC5h''@;'; put 'put ''bGxvYyYmaC5hbGxvY1Vuc2FmZSYmaC5hbGxvY1Vuc2FmZVNsb3c/dGUuZXhwb3J0cz1TOihvKFMsaiksai5CdWZmZXI9SSksSS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSksbyhoLEkpLEkuZnJvbT1mdW5jdGlvbihmLFQsQSl7aWYoIm51bWJlciI9PXR5cGVvZiBmKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGgoZixULEEpfSxJLmFsbG9jPWZ1bmN0aW9uKGYsVCxBKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3Zh''@;'; put 'put ''ciBNPWgoZik7cmV0dXJuIHZvaWQgMCE9PVQ/InN0cmluZyI9PXR5cGVvZiBBP00uZmlsbChULEEpOk0uZmlsbChUKTpNLmZpbGwoMCksTX0sSS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBi''@;'; put 'put ''ZSBhIG51bWJlciIpO3JldHVybiBoKGYpfSxJLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBTLlNsb3dCdWZmZXIoZil9fSw5MjQ2Oih0ZSxqLGQp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNzM3OSksaD1kKDg0MjApLG89UygiUmVnRXhwLnByb3RvdHlwZS5leGVjIiksST1kKDQ0NTMpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oVCl7aWYoIWgoVCkpdGhyb3cgbmV3IEkoImByZWdleGAgbXVzdCBiZSBhIFJlZ0V4cCIpO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihNKXtyZXR1cm4gbnVsbCE9PW8oVCxNKX19fSw3NzcxOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoMjEwKSxoPWQoMjI5Niksbz1kKDEwNDQpKCksST1kKDcyOTYpLGY9ZCg0NDUzKSxUPVMoIiVNYXRoLmZsb29yJSIpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oTSxPKXtpZigiZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2YgTSl0aHJvdyBuZXcgZigiYGZuYCBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJudW1iZXIiIT10eXBlb2YgT3x8TzwwfHxPPjQyOTQ5NjcyOTV8fFQoTykhPT1PKXRocm93IG5ldyBmKCJgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIiKTt2''@;'; put 'put ''YXIgRD1hcmd1bWVudHMubGVuZ3RoPjImJiEhYXJndW1lbnRzWzJdLEU9ITAsQj0hMDtpZigibGVuZ3RoImluIE0mJkkpe3ZhciBGPUkoTSwibGVuZ3RoIik7RiYmIUYuY29uZmlndXJhYmxlJiYoRT0hMSksRiYmIUYud3JpdGFibGUmJihCPSExKX1yZXR1cm4oRXx8Qnx8IUQpJiYobz9oKE0s''@;'; put 'put ''Imxlbmd0aCIsTywhMCwhMCk6aChNLCJsZW5ndGgiLE8pKSxNfX0sNDE4OToodGUsaixkKT0+e3ZhciBTPWQoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGgobyxJKXt0aGlzLl9ibG9jaz1TLmFsbG9jKG8pLHRoaXMuX2ZpbmFsU2l6ZT1JLHRoaXMuX2Jsb2NrU2l6ZT1vLHRoaXMuX2xlbj0wfWgu''@;'; put 'put ''cHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihvLEkpeyJzdHJpbmciPT10eXBlb2YgbyYmKG89Uy5mcm9tKG8sST1JfHwidXRmOCIpKTtmb3IodmFyIGY9dGhpcy5fYmxvY2ssVD10aGlzLl9ibG9ja1NpemUsQT1vLmxlbmd0aCxNPXRoaXMuX2xlbixPPTA7TzxBOyl7Zm9yKHZhciBEPU0lVCxF''@;'; put 'put ''PU1hdGgubWluKEEtTyxULUQpLEI9MDtCPEU7QisrKWZbRCtCXT1vW08rQl07Tys9RSwoTSs9RSklVD09MCYmdGhpcy5fdXBkYXRlKGYpfXJldHVybiB0aGlzLl9sZW4rPUEsdGhpc30saC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKG8pe3ZhciBJPXRoaXMuX2xlbiV0aGlzLl9ibG9ja1Np''@;'; put 'put ''emU7dGhpcy5fYmxvY2tbSV09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCxJKzEpLEk+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIGY9OCp0aGlzLl9sZW47aWYoZjw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0''@;'; put 'put ''ZVVJbnQzMkJFKGYsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIFQ9KDQyOTQ5NjcyOTUmZik+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKGYtVCkvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShULHRoaXMuX2Jsb2NrU2l6''@;'; put 'put ''ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBNPXRoaXMuX2hhc2goKTtyZXR1cm4gbz9NLnRvU3RyaW5nKG8pOk19LGgucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIp''@;'; put 'put ''fSx0ZS5leHBvcnRzPWh9LDkwNzI6KHRlLGosZCk9Pnt2YXIgUz10ZS5leHBvcnRzPWZ1bmN0aW9uKG8pe289by50b0xvd2VyQ2FzZSgpO3ZhciBJPVNbb107aWYoIUkpdGhyb3cgbmV3IEVycm9yKG8rIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1''@;'; put 'put ''cm4gbmV3IEl9O1Muc2hhPWQoNDQ0OCksUy5zaGExPWQoODMzNiksUy5zaGEyMjQ9ZCg4NDMyKSxTLnNoYTI1Nj1kKDc0OTkpLFMuc2hhMzg0PWQoMTY4NiksUy5zaGE1MTI9ZCg3ODE2KX0sNDQ0ODoodGUsaixkKT0+e3ZhciBTPWQoNTcxNyksaD1kKDQxODkpLG89ZCg5NTA5KS5CdWZmZXIs''@;'; put 'put ''ST1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLGY9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBUKCl7dGhpcy5pbml0KCksdGhpcy5fdz1mLGguY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBBKEQpe3JldHVybiBEPDw1fEQ+Pj4yN31mdW5jdGlvbiBNKEQp''@;'; put 'put ''e3JldHVybiBEPDwzMHxEPj4+Mn1mdW5jdGlvbiBPKEQsRSxCLEYpe3JldHVybiAwPT09RD9FJkJ8fkUmRjoyPT09RD9FJkJ8RSZGfEImRjpFXkJeRn1TKFQsaCksVC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3''@;'; put 'put ''LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sVC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihEKXtmb3IodmFyIEU9dGhpcy5fdyxCPTB8dGhpcy5fYSxGPTB8dGhpcy5fYixOPTB8dGhpcy5fYyxIPTB8dGhpcy5fZCx6PTB8''@;'; put 'put ''dGhpcy5fZSxaPTA7WjwxNjsrK1opRVtaXT1ELnJlYWRJbnQzMkJFKDQqWik7Zm9yKDtaPDgwOysrWilFW1pdPUVbWi0zXV5FW1otOF1eRVtaLTE0XV5FW1otMTZdO2Zvcih2YXIgVT0wO1U8ODA7KytVKXt2YXIgSz1+fihVLzIwKSxYPUEoQikrTyhLLEYsTixIKSt6K0VbVV0rSVtLXXwwO3o9''@;'; put 'put ''SCxIPU4sTj1NKEYpLEY9QixCPVh9dGhpcy5fYT1CK3RoaXMuX2F8MCx0aGlzLl9iPUYrdGhpcy5fYnwwLHRoaXMuX2M9Tit0aGlzLl9jfDAsdGhpcy5fZD1IK3RoaXMuX2R8MCx0aGlzLl9lPXordGhpcy5fZXwwfSxULnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBEPW8uYWxsb2NV''@;'; put 'put ''bnNhZmUoMjApO3JldHVybiBELndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksRC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxELndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLEQud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksRH0sdGUu''@;'; put 'put ''ZXhwb3J0cz1UfSw4MzM2Oih0ZSxqLGQpPT57dmFyIFM9ZCg1NzE3KSxoPWQoNDE4OSksbz1kKDk1MDkpLkJ1ZmZlcixJPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sZj1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFQoKXt0aGlzLmluaXQoKSx0aGlzLl93''@;'; put 'put ''PWYsaC5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEEoRSl7cmV0dXJuIEU8PDF8RT4+PjMxfWZ1bmN0aW9uIE0oRSl7cmV0dXJuIEU8PDV8RT4+PjI3fWZ1bmN0aW9uIE8oRSl7cmV0dXJuIEU8PDMwfEU+Pj4yfWZ1bmN0aW9uIEQoRSxCLEYsTil7cmV0dXJuIDA9PT1FP0ImRnx+QiZOOjI9''@;'; put 'put ''PT1FP0ImRnxCJk58RiZOOkJeRl5OfVMoVCxoKSxULnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxU''@;'; put 'put ''LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUpe2Zvcih2YXIgQj10aGlzLl93LEY9MHx0aGlzLl9hLE49MHx0aGlzLl9iLEg9MHx0aGlzLl9jLHo9MHx0aGlzLl9kLFo9MHx0aGlzLl9lLFU9MDtVPDE2OysrVSlCW1VdPUUucmVhZEludDMyQkUoNCpVKTtmb3IoO1U8ODA7KytVKUJbVV09''@;'; put 'put ''QShCW1UtM11eQltVLThdXkJbVS0xNF1eQltVLTE2XSk7Zm9yKHZhciBLPTA7Szw4MDsrK0spe3ZhciBYPX5+KEsvMjApLG5lPU0oRikrRChYLE4sSCx6KStaK0JbS10rSVtYXXwwO1o9eix6PUgsSD1PKE4pLE49RixGPW5lfXRoaXMuX2E9Rit0aGlzLl9hfDAsdGhpcy5fYj1OK3RoaXMuX2J8''@;'; put 'put ''MCx0aGlzLl9jPUgrdGhpcy5fY3wwLHRoaXMuX2Q9eit0aGlzLl9kfDAsdGhpcy5fZT1aK3RoaXMuX2V8MH0sVC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRT1vLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gRS53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEUud3JpdGVJbnQzMkJF''@;'; put 'put ''KDB8dGhpcy5fYiw0KSxFLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksRS53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxFLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLEV9LHRlLmV4cG9ydHM9VH0sODQzMjoodGUsaixkKT0+e3ZhciBTPWQoNTcxNyksaD1kKDc0OTkpLG89ZCg0MTg5''@;'; put 'put ''KSxJPWQoOTUwOSkuQnVmZmVyLGY9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBUKCl7dGhpcy5pbml0KCksdGhpcy5fdz1mLG8uY2FsbCh0aGlzLDY0LDU2KX1TKFQsaCksVC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2''@;'; put 'put ''NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxULnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBBPUkuYWxsb2NV''@;'; put 'put ''bnNhZmUoMjgpO3JldHVybiBBLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEEud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksQS53cml0ZUludDMyQkUodGhpcy5fYyw4KSxBLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxBLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxBLndyaXRlSW50MzJCRSh0''@;'; put 'put ''aGlzLl9mLDIwKSxBLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxBfSx0ZS5leHBvcnRzPVR9LDc0OTk6KHRlLGosZCk9Pnt2YXIgUz1kKDU3MTcpLGg9ZCg0MTg5KSxvPWQoOTUwOSkuQnVmZmVyLEk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3''@;'; put 'put ''MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2Mjgs''@;'; put 'put ''NzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYx''@;'; put 'put ''ODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1''@;'; put 'put ''Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sZj1uZXcgQXJyYXkoNjQpO2Z1bmN0''@;'; put 'put ''aW9uIFQoKXt0aGlzLmluaXQoKSx0aGlzLl93PWYsaC5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEEoRixOLEgpe3JldHVybiBIXkYmKE5eSCl9ZnVuY3Rpb24gTShGLE4sSCl7cmV0dXJuIEYmTnxIJihGfE4pfWZ1bmN0aW9uIE8oRil7cmV0dXJuKEY+Pj4yfEY8PDMwKV4oRj4+PjEzfEY8''@;'; put 'put ''PDE5KV4oRj4+PjIyfEY8PDEwKX1mdW5jdGlvbiBEKEYpe3JldHVybihGPj4+NnxGPDwyNileKEY+Pj4xMXxGPDwyMSleKEY+Pj4yNXxGPDw3KX1mdW5jdGlvbiBFKEYpe3JldHVybihGPj4+N3xGPDwyNSleKEY+Pj4xOHxGPDwxNCleRj4+PjN9ZnVuY3Rpb24gQihGKXtyZXR1cm4oRj4+PjE3''@;'; put 'put ''fEY8PDE1KV4oRj4+PjE5fEY8PDEzKV5GPj4+MTB9UyhULGgpLFQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzEx''@;'; put 'put ''OSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LFQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7Zm9yKHZhciBOPXRoaXMuX3csSD0wfHRoaXMuX2Esej0wfHRoaXMuX2IsWj0wfHRoaXMuX2MsVT0wfHRoaXMuX2QsSz0w''@;'; put 'put ''fHRoaXMuX2UsWD0wfHRoaXMuX2YsbmU9MHx0aGlzLl9nLHNlPTB8dGhpcy5faCxoZT0wO2hlPDE2OysraGUpTltoZV09Ri5yZWFkSW50MzJCRSg0KmhlKTtmb3IoO2hlPDY0OysraGUpTltoZV09QihOW2hlLTJdKStOW2hlLTddK0UoTltoZS0xNV0pK05baGUtMTZdfDA7Zm9yKHZhciBfZT0w''@;'; put 'put ''O19lPDY0OysrX2Upe3ZhciBtZT1zZStEKEspK0EoSyxYLG5lKStJW19lXStOW19lXXwwLEZlPU8oSCkrTShILHosWil8MDtzZT1uZSxuZT1YLFg9SyxLPVUrbWV8MCxVPVosWj16LHo9SCxIPW1lK0ZlfDB9dGhpcy5fYT1IK3RoaXMuX2F8MCx0aGlzLl9iPXordGhpcy5fYnwwLHRoaXMuX2M9''@;'; put 'put ''Wit0aGlzLl9jfDAsdGhpcy5fZD1VK3RoaXMuX2R8MCx0aGlzLl9lPUsrdGhpcy5fZXwwLHRoaXMuX2Y9WCt0aGlzLl9mfDAsdGhpcy5fZz1uZSt0aGlzLl9nfDAsdGhpcy5faD1zZSt0aGlzLl9ofDB9LFQucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEY9by5hbGxvY1Vuc2FmZSgz''@;'; put 'put ''Mik7cmV0dXJuIEYud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksRi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxGLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2Ys''@;'; put 'put ''MjApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLEZ9LHRlLmV4cG9ydHM9VH0sMTY4NjoodGUsaixkKT0+e3ZhciBTPWQoNTcxNyksaD1kKDc4MTYpLG89ZCg0MTg5KSxJPWQoOTUwOSkuQnVmZmVyLGY9bmV3IEFycmF5KDE2MCk7ZnVuY3Rp''@;'; put 'put ''b24gVCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ZixvLmNhbGwodGhpcywxMjgsMTEyKX1TKFQsaCksVC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0''@;'; put 'put ''NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0''@;'; put 'put ''aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LFQucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEE9SS5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gTShPLEQsRSl7QS53cml0ZUlu''@;'; put 'put ''dDMyQkUoTyxFKSxBLndyaXRlSW50MzJCRShELEUrNCl9cmV0dXJuIE0odGhpcy5fYWgsdGhpcy5fYWwsMCksTSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxNKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxNKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxNKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxNKHRoaXMu''@;'; put 'put ''X2ZoLHRoaXMuX2ZsLDQwKSxBfSx0ZS5leHBvcnRzPVR9LDc4MTY6KHRlLGosZCk9Pnt2YXIgUz1kKDU3MTcpLGg9ZCg0MTg5KSxvPWQoOTUwOSkuQnVmZmVyLEk9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAw''@;'; put 'put ''OTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2''@;'; put 'put ''NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIz''@;'; put 'put ''NDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5''@;'; put 'put ''OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0''@;'; put 'put ''LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEs''@;'; put 'put ''MzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5''@;'; put 'put ''NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAw''@;'; put 'put ''MTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0''@;'; put 'put ''LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3''@;'; put 'put ''MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkx''@;'; put 'put ''XSxmPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFQoKXt0aGlzLmluaXQoKSx0aGlzLl93PWYsaC5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gQSh6LFosVSl7cmV0dXJuIFVeeiYoWl5VKX1mdW5jdGlvbiBNKHosWixVKXtyZXR1cm4geiZafFUmKHp8Wil9ZnVuY3Rpb24gTyh6LFope3Jl''@;'; put 'put ''dHVybih6Pj4+Mjh8Wjw8NCleKFo+Pj4yfHo8PDMwKV4oWj4+Pjd8ejw8MjUpfWZ1bmN0aW9uIEQoeixaKXtyZXR1cm4oej4+PjE0fFo8PDE4KV4oej4+PjE4fFo8PDE0KV4oWj4+Pjl8ejw8MjMpfWZ1bmN0aW9uIEUoeixaKXtyZXR1cm4oej4+PjF8Wjw8MzEpXih6Pj4+OHxaPDwyNCleej4+''@;'; put 'put ''Pjd9ZnVuY3Rpb24gQih6LFope3JldHVybih6Pj4+MXxaPDwzMSleKHo+Pj44fFo8PDI0KV4oej4+Pjd8Wjw8MjUpfWZ1bmN0aW9uIEYoeixaKXtyZXR1cm4oej4+PjE5fFo8PDEzKV4oWj4+PjI5fHo8PDMpXno+Pj42fWZ1bmN0aW9uIE4oeixaKXtyZXR1cm4oej4+PjE5fFo8PDEzKV4oWj4+''@;'; put 'put ''PjI5fHo8PDMpXih6Pj4+NnxaPDwyNil9ZnVuY3Rpb24gSCh6LFope3JldHVybiB6Pj4+MDxaPj4+MD8xOjB9UyhULGgpLFQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIs''@;'; put 'put ''dGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5f''@;'; put 'put ''ZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxULnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgWj10aGlzLl93LFU9MHx0aGlzLl9haCxLPTB8''@;'; put 'put ''dGhpcy5fYmgsWD0wfHRoaXMuX2NoLG5lPTB8dGhpcy5fZGgsc2U9MHx0aGlzLl9laCxoZT0wfHRoaXMuX2ZoLF9lPTB8dGhpcy5fZ2gsbWU9MHx0aGlzLl9oaCxGZT0wfHRoaXMuX2FsLFI9MHx0aGlzLl9ibCxzPTB8dGhpcy5fY2wsdT0wfHRoaXMuX2RsLHY9MHx0aGlzLl9lbCxwPTB8dGhp''@;'; put 'put ''cy5fZmwsXz0wfHRoaXMuX2dsLGs9MHx0aGlzLl9obCxMPTA7TDwzMjtMKz0yKVpbTF09ei5yZWFkSW50MzJCRSg0KkwpLFpbTCsxXT16LnJlYWRJbnQzMkJFKDQqTCs0KTtmb3IoO0w8MTYwO0wrPTIpe3ZhciB5PVpbTC0zMF0sbD1aW0wtMzArMV0sYj1FKHksbCkscT1CKGwseSksRz1GKHk9''@;'; put 'put ''WltMLTRdLGw9WltMLTQrMV0pLFE9TihsLHkpLFplPVpbTC0zMl0scWU9WltMLTMyKzFdLHZlPXErWltMLTE0KzFdfDAsdWU9YitaW0wtMTRdK0godmUscSl8MDt1ZT0odWU9dWUrRytIKHZlPXZlK1F8MCxRKXwwKStaZStIKHZlPXZlK3FlfDAscWUpfDAsWltMXT11ZSxaW0wrMV09dmV9Zm9y''@;'; put 'put ''KHZhciB6ZT0wO3plPDE2MDt6ZSs9Mil7dWU9Wlt6ZV0sdmU9Wlt6ZSsxXTt2YXIgT2U9TShVLEssWCksQ2U9TShGZSxSLHMpLGtlPU8oVSxGZSkseGU9TyhGZSxVKSxNZT1EKHNlLHYpLEllPUQodixzZSksYmU9SVt6ZV0sd2U9SVt6ZSsxXSxwdD1BKHNlLGhlLF9lKSxLZT1BKHYscCxfKSxZ''@;'; put 'put ''ZT1rK0llfDAscXQ9bWUrTWUrSChZZSxrKXwwO3F0PShxdD0ocXQ9cXQrcHQrSChZZT1ZZStLZXwwLEtlKXwwKStiZStIKFllPVllK3dlfDAsd2UpfDApK3VlK0goWWU9WWUrdmV8MCx2ZSl8MDt2YXIgaHQ9eGUrQ2V8MCx2dD1rZStPZStIKGh0LHhlKXwwO21lPV9lLGs9XyxfZT1oZSxfPXAs''@;'; put 'put ''aGU9c2UscD12LHNlPW5lK3F0K0godj11K1llfDAsdSl8MCxuZT1YLHU9cyxYPUsscz1SLEs9VSxSPUZlLFU9cXQrdnQrSChGZT1ZZStodHwwLFllKXwwfXRoaXMuX2FsPXRoaXMuX2FsK0ZlfDAsdGhpcy5fYmw9dGhpcy5fYmwrUnwwLHRoaXMuX2NsPXRoaXMuX2NsK3N8MCx0aGlzLl9kbD10''@;'; put 'put ''aGlzLl9kbCt1fDAsdGhpcy5fZWw9dGhpcy5fZWwrdnwwLHRoaXMuX2ZsPXRoaXMuX2ZsK3B8MCx0aGlzLl9nbD10aGlzLl9nbCtffDAsdGhpcy5faGw9dGhpcy5faGwra3wwLHRoaXMuX2FoPXRoaXMuX2FoK1UrSCh0aGlzLl9hbCxGZSl8MCx0aGlzLl9iaD10aGlzLl9iaCtLK0godGhpcy5f''@;'; put 'put ''YmwsUil8MCx0aGlzLl9jaD10aGlzLl9jaCtYK0godGhpcy5fY2wscyl8MCx0aGlzLl9kaD10aGlzLl9kaCtuZStIKHRoaXMuX2RsLHUpfDAsdGhpcy5fZWg9dGhpcy5fZWgrc2UrSCh0aGlzLl9lbCx2KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK2hlK0godGhpcy5fZmwscCl8MCx0aGlzLl9naD10''@;'; put 'put ''aGlzLl9naCtfZStIKHRoaXMuX2dsLF8pfDAsdGhpcy5faGg9dGhpcy5faGgrbWUrSCh0aGlzLl9obCxrKXwwfSxULnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB6PW8uYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIFooVSxLLFgpe3oud3JpdGVJbnQzMkJFKFUsWCksei53cml0ZUlu''@;'; put 'put ''dDMyQkUoSyxYKzQpfXJldHVybiBaKHRoaXMuX2FoLHRoaXMuX2FsLDApLFoodGhpcy5fYmgsdGhpcy5fYmwsOCksWih0aGlzLl9jaCx0aGlzLl9jbCwxNiksWih0aGlzLl9kaCx0aGlzLl9kbCwyNCksWih0aGlzLl9laCx0aGlzLl9lbCwzMiksWih0aGlzLl9maCx0aGlzLl9mbCw0MCksWih0''@;'; put 'put ''aGlzLl9naCx0aGlzLl9nbCw0OCksWih0aGlzLl9oaCx0aGlzLl9obCw1Niksen0sdGUuZXhwb3J0cz1UfSwyODMwOih0ZSxqLGQpPT57dGUuZXhwb3J0cz1vO3ZhciBTPWQoNzE4NykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIG8oKXtTLmNhbGwodGhpcyl9ZCg1NzE3KShvLFMpLG8uUmVhZGFi''@;'; put 'put ''bGU9ZCg5NDgxKSxvLldyaXRhYmxlPWQoNDIyOSksby5EdXBsZXg9ZCg2NzUzKSxvLlRyYW5zZm9ybT1kKDQ2MDUpLG8uUGFzc1Rocm91Z2g9ZCgyNzI1KSxvLmZpbmlzaGVkPWQoODYxMCksby5waXBlbGluZT1kKDk5NDYpLG8uU3RyZWFtPW8sby5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihJ''@;'; put 'put ''LGYpe3ZhciBUPXRoaXM7ZnVuY3Rpb24gQShOKXtJLndyaXRhYmxlJiYhMT09PUkud3JpdGUoTikmJlQucGF1c2UmJlQucGF1c2UoKX1mdW5jdGlvbiBNKCl7VC5yZWFkYWJsZSYmVC5yZXN1bWUmJlQucmVzdW1lKCl9VC5vbigiZGF0YSIsQSksSS5vbigiZHJhaW4iLE0pLCFJLl9pc1N0ZGlv''@;'; put 'put ''JiYoIWZ8fCExIT09Zi5lbmQpJiYoVC5vbigiZW5kIixEKSxULm9uKCJjbG9zZSIsRSkpO3ZhciBPPSExO2Z1bmN0aW9uIEQoKXtPfHwoTz0hMCxJLmVuZCgpKX1mdW5jdGlvbiBFKCl7T3x8KE89ITAsImZ1bmN0aW9uIj09dHlwZW9mIEkuZGVzdHJveSYmSS5kZXN0cm95KCkpfWZ1bmN0aW9u''@;'; put 'put ''IEIoTil7aWYoRigpLDA9PT1TLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBOfWZ1bmN0aW9uIEYoKXtULnJlbW92ZUxpc3RlbmVyKCJkYXRhIixBKSxJLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsTSksVC5yZW1vdmVMaXN0ZW5lcigiZW5kIixEKSxULnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJjbG9zZSIsRSksVC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEIpLEkucmVtb3ZlTGlzdGVuZXIoImVycm9yIixCKSxULnJlbW92ZUxpc3RlbmVyKCJlbmQiLEYpLFQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixGKSxJLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRil9cmV0dXJuIFQub24oImVy''@;'; put 'put ''cm9yIixCKSxJLm9uKCJlcnJvciIsQiksVC5vbigiZW5kIixGKSxULm9uKCJjbG9zZSIsRiksSS5vbigiY2xvc2UiLEYpLEkuZW1pdCgicGlwZSIsVCksSX19LDI1NTM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg5NTA5KS5CdWZmZXIsaD1TLmlzRW5jb2Rpbmd8fGZ1bmN0aW9u''@;'; put 'put ''KFUpe3N3aXRjaCgoVT0iIitVKSYmVS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNl''@;'; put 'put ''InJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIGYoVSl7dmFyIEs7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gSShVKXt2YXIgSz1mdW5jdGlvbiBvKFUpe2lmKCFVKXJldHVybiJ1dGY4Ijtmb3IodmFyIEs7Oylzd2l0Y2goVSl7Y2FzZSJ1dGY4IjpjYXNl''@;'; put 'put ''InV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6''@;'; put 'put ''cmV0dXJuIFU7ZGVmYXVsdDppZihLKXJldHVybjtVPSgiIitVKS50b0xvd2VyQ2FzZSgpLEs9ITB9fShVKTtpZigic3RyaW5nIiE9dHlwZW9mIEsmJihTLmlzRW5jb2Rpbmc9PT1ofHwhaChVKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1UpO3JldHVybiBLfHxVfShV''@;'; put 'put ''KSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1CLHRoaXMuZW5kPUYsSz00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1PLEs9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PU4sdGhpcy5lbmQ9SCxLPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhp''@;'; put 'put ''cy53cml0ZT16LHZvaWQodGhpcy5lbmQ9Wil9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1TLmFsbG9jVW5zYWZlKEspfWZ1bmN0aW9uIFQoVSl7cmV0dXJuIFU8PTEyNz8wOlU+PjU9PTY/MjpVPj40PT0xND8zOlU+PjM9PTMwPzQ6VT4+Nj09Mj8tMTot''@;'; put 'put ''Mn1mdW5jdGlvbiBPKFUpe3ZhciBLPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsWD1mdW5jdGlvbiBNKFUsSyl7aWYoMTI4IT0oMTkyJktbMF0pKXJldHVybiBVLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoVS5sYXN0TmVlZD4xJiZLLmxlbmd0aD4xKXtpZigxMjghPSgxOTImS1sxXSkp''@;'; put 'put ''cmV0dXJuIFUubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihVLmxhc3ROZWVkPjImJksubGVuZ3RoPjImJjEyOCE9KDE5MiZLWzJdKSlyZXR1cm4gVS5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxVKTtyZXR1cm4gdm9pZCAwIT09WD9YOnRoaXMubGFzdE5lZWQ8PVUubGVuZ3RoPyhVLmNvcHko''@;'; put 'put ''dGhpcy5sYXN0Q2hhcixLLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooVS5jb3B5KHRoaXMubGFzdENoYXIsSywwLFUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPVUubGVuZ3RoKSl9ZnVuY3Rpb24g''@;'; put 'put ''QihVLEspe2lmKChVLmxlbmd0aC1LKSUyPT0wKXt2YXIgWD1VLnRvU3RyaW5nKCJ1dGYxNmxlIixLKTtpZihYKXt2YXIgbmU9WC5jaGFyQ29kZUF0KFgubGVuZ3RoLTEpO2lmKG5lPj01NTI5NiYmbmU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlz''@;'; put 'put ''Lmxhc3RDaGFyWzBdPVVbVS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1VW1UubGVuZ3RoLTFdLFguc2xpY2UoMCwtMSl9cmV0dXJuIFh9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09VVtVLmxlbmd0aC0xXSxVLnRvU3RyaW5nKCJ1''@;'; put 'put ''dGYxNmxlIixLLFUubGVuZ3RoLTEpfWZ1bmN0aW9uIEYoVSl7dmFyIEs9VSYmVS5sZW5ndGg/dGhpcy53cml0ZShVKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9LK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6S31mdW5j''@;'; put 'put ''dGlvbiBOKFUsSyl7dmFyIFg9KFUubGVuZ3RoLUspJTM7cmV0dXJuIDA9PT1YP1UudG9TdHJpbmcoImJhc2U2NCIsSyk6KHRoaXMubGFzdE5lZWQ9My1YLHRoaXMubGFzdFRvdGFsPTMsMT09PVg/dGhpcy5sYXN0Q2hhclswXT1VW1UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPVVbVS5s''@;'; put 'put ''ZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1VW1UubGVuZ3RoLTFdKSxVLnRvU3RyaW5nKCJiYXNlNjQiLEssVS5sZW5ndGgtWCkpfWZ1bmN0aW9uIEgoVSl7dmFyIEs9VSYmVS5sZW5ndGg/dGhpcy53cml0ZShVKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9LK3RoaXMubGFzdENoYXIudG9T''@;'; put 'put ''dHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOkt9ZnVuY3Rpb24geihVKXtyZXR1cm4gVS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBaKFUpe3JldHVybiBVJiZVLmxlbmd0aD90aGlzLndyaXRlKFUpOiIifWoucz1mLGYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9u''@;'; put 'put ''KFUpe2lmKDA9PT1VLmxlbmd0aClyZXR1cm4iIjt2YXIgSyxYO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShLPXRoaXMuZmlsbExhc3QoVSkpKXJldHVybiIiO1g9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBYPTA7cmV0dXJuIFg8VS5sZW5ndGg/Sz9LK3RoaXMu''@;'; put 'put ''dGV4dChVLFgpOnRoaXMudGV4dChVLFgpOkt8fCIifSxmLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gRShVKXt2YXIgSz1VJiZVLmxlbmd0aD90aGlzLndyaXRlKFUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP0srIlx1ZmZmZCI6S30sZi5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBEKFUsSyl7''@;'; put 'put ''dmFyIFg9ZnVuY3Rpb24gQShVLEssWCl7dmFyIG5lPUsubGVuZ3RoLTE7aWYobmU8WClyZXR1cm4gMDt2YXIgc2U9VChLW25lXSk7cmV0dXJuIHNlPj0wPyhzZT4wJiYoVS5sYXN0TmVlZD1zZS0xKSxzZSk6LS1uZTxYfHwtMj09PXNlPzA6KHNlPVQoS1tuZV0pKT49MD8oc2U+MCYmKFUubGFz''@;'; put 'put ''dE5lZWQ9c2UtMiksc2UpOi0tbmU8WHx8LTI9PT1zZT8wOihzZT1UKEtbbmVdKSk+PTA/KHNlPjAmJigyPT09c2U/c2U9MDpVLmxhc3ROZWVkPXNlLTMpLHNlKTowfSh0aGlzLFUsSyk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIFUudG9TdHJpbmcoInV0ZjgiLEspO3RoaXMubGFzdFRvdGFs''@;'; put 'put ''PVg7dmFyIG5lPVUubGVuZ3RoLShYLXRoaXMubGFzdE5lZWQpO3JldHVybiBVLmNvcHkodGhpcy5sYXN0Q2hhciwwLG5lKSxVLnRvU3RyaW5nKCJ1dGY4IixLLG5lKX0sZi5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oVSl7aWYodGhpcy5sYXN0TmVlZDw9VS5sZW5ndGgpcmV0dXJuIFUu''@;'; put 'put ''Y29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7VS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0''@;'; put 'put ''TmVlZCwwLFUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1VLmxlbmd0aH19LDc4NTc6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUz1kKDM2ODkpLGg9ZCg0NTY0KSxvPWQoNzUyKSxJPWQoMjIyNCkueSxmPWQoNTc2MSkubSxUPWQoODk3MSkuVSxBPWQoNzY1MiksTT1kKDQ1Nikse2Zy''@;'; put 'put ''b21DYWxsYmFjazpPfT1kKDcwNDEpLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOkR9PWQoMTI2OSksRT0vXltceDIxXHgyMy1ceDJCXHgyRC1ceDNBXHgzQy1ceDVCXHg1RC1ceDdFXSskLyxCPS9bXHgwMC1ceDFGXS8sRj1bIlxuIiwiXHIiLCJcMCJdLE49L1tceDIwLVx4M0FceDNDLVx4N0Vd''@;'; put 'put ''Ky8sSD0vW1x4MDlceDIwLVx4MkZceDNCLVx4NDBceDVCLVx4NjBceDdCLVx4N0VdLyx6PXtqYW46MCxmZWI6MSxtYXI6MixhcHI6MyxtYXk6NCxqdW46NSxqdWw6NixhdWc6NyxzZXA6OCxvY3Q6OSxub3Y6MTAsZGVjOjExfSxaPTIxNDc0ODM2NDdlMyxLPSdJbnZhbGlkIHNhbWVTaXRlQ29u''@;'; put 'put ''dGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiBYKE9lKXtBLnZhbGlkYXRlKEEuaXNOb25FbXB0eVN0cmluZyhPZSksT2UpO2NvbnN0IENlPVN0cmluZyhPZSkudG9Mb3dlckNhc2UoKTtyZXR1''@;'; put 'put ''cm4ibm9uZSI9PT1DZXx8ImxheCI9PT1DZXx8InN0cmljdCI9PT1DZT9DZTpudWxsfWNvbnN0IG5lPU9iamVjdC5mcmVlemUoe1NJTEVOVDoic2lsZW50IixTVFJJQ1Q6InN0cmljdCIsRElTQUJMRUQ6InVuc2FmZS1kaXNhYmxlZCJ9KSxzZT0vKD86Xig/OjI1WzAtNV18MlswLTRdXGR8MVxk''@;'; put 'put ''XGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9JCl8KD86Xig/Oig/OlthLWZcZF17MSw0fTopezd9KD86W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxk''@;'; put 'put ''fFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTld''@;'; put 'put ''XGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDJ9fDopfCg/OlthLWZcZF17MSw0fTopezR9KD86KD86OlthLWZcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXsz''@;'; put 'put ''fXwoPzo6W2EtZlxkXXsxLDR9KXsxLDN9fDopfCg/OlthLWZcZF17MSw0fTopezN9KD86KD86OlthLWZcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2Et''@;'; put 'put ''ZlxkXXsxLDR9KXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezJ9KD86KD86OlthLWZcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9''@;'; put 'put ''KXsxLDV9fDopfCg/OlthLWZcZF17MSw0fTopezF9KD86KD86OlthLWZcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDZ9fDop''@;'; put 'put ''fCg/OjooPzooPzo6W2EtZlxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsN318OikpKSQpLyxoZT0iXG5cXFs/KD86XG4oPzpb''@;'; put 'put ''YS1mQS1GXFxkXXsxLDR9Oil7N30oPzpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXsz''@;'; put 'put ''fXw6W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsx''@;'; put 'put ''LDR9KXsxLDJ9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezR9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwo''@;'; put 'put ''Pzo6W2EtZkEtRlxcZF17MSw0fSl7MSwzfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXszfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEt''@;'; put 'put ''OV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00''@;'; put 'put ''XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDV9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezF9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwu''@;'; put 'put ''KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw2fXw6KXxcbig/OjooPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoy''@;'; put 'put ''NVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDd9fDopKVxuKSg/OiVbMC05YS16QS1aXXsxLH0pP1xcXT9cbiIucmVwbGFjZSgvXHMqXC9cLy4qJC9nbSwiIikucmVwbGFjZSgvXG4vZywiIikudHJpbSgpLF9lPW5ldyBS''@;'; put 'put ''ZWdFeHAoYF4ke2hlfSRgKTtmdW5jdGlvbiBtZShPZSxDZSxrZSx4ZSl7bGV0IE1lPTA7Zm9yKDtNZTxPZS5sZW5ndGg7KXtjb25zdCBJZT1PZS5jaGFyQ29kZUF0KE1lKTtpZihJZTw9NDd8fEllPj01OClicmVhaztNZSsrfXJldHVybiBNZTxDZXx8TWU+a2V8fCF4ZSYmTWUhPU9lLmxlbmd0''@;'; put 'put ''aD9udWxsOnBhcnNlSW50KE9lLnN1YnN0cigwLE1lKSwxMCl9ZnVuY3Rpb24gRmUoT2Upe2NvbnN0IENlPU9lLnNwbGl0KCI6Iiksa2U9WzAsMCwwXTtpZigzIT09Q2UubGVuZ3RoKXJldHVybiBudWxsO2ZvcihsZXQgeGU9MDt4ZTwzO3hlKyspe2NvbnN0IEllPW1lKENlW3hlXSwxLDIsMj09''@;'; put 'put ''eGUpO2lmKG51bGw9PT1JZSlyZXR1cm4gbnVsbDtrZVt4ZV09SWV9cmV0dXJuIGtlfWZ1bmN0aW9uIFIoT2Upe09lPVN0cmluZyhPZSkuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKTtjb25zdCBDZT16W09lXTtyZXR1cm4gQ2U+PTA/Q2U6bnVsbH1mdW5jdGlvbiBzKE9lKXtpZighT2UpcmV0''@;'; put 'put ''dXJuO2NvbnN0IENlPU9lLnNwbGl0KEgpO2lmKCFDZSlyZXR1cm47bGV0IGtlPW51bGwseGU9bnVsbCxNZT1udWxsLEllPW51bGwsYmU9bnVsbCx3ZT1udWxsO2ZvcihsZXQgcHQ9MDtwdDxDZS5sZW5ndGg7cHQrKyl7Y29uc3QgS2U9Q2VbcHRdLnRyaW0oKTtpZighS2UubGVuZ3RoKWNvbnRp''@;'; put 'put ''bnVlO2xldCBZZTtudWxsPT09TWUmJihZZT1GZShLZSksWWUpPyhrZT1ZZVswXSx4ZT1ZZVsxXSxNZT1ZZVsyXSk6bnVsbCE9PUllfHwoWWU9bWUoS2UsMSwyLCEwKSxudWxsPT09WWUpP251bGwhPT1iZXx8KFllPVIoS2UpLG51bGw9PT1ZZSk/bnVsbD09PXdlJiYoWWU9bWUoS2UsMiw0LCEw''@;'; put 'put ''KSxudWxsIT09WWUmJih3ZT1ZZSx3ZT49NzAmJndlPD05OT93ZSs9MTkwMDp3ZT49MCYmd2U8PTY5JiYod2UrPTJlMykpKTpiZT1ZZTpJZT1ZZX1yZXR1cm4gbnVsbD09PUllfHxudWxsPT09YmV8fG51bGw9PT13ZXx8bnVsbD09PU1lfHxJZTwxfHxJZT4zMXx8d2U8MTYwMXx8a2U+MjN8fHhl''@;'; put 'put ''PjU5fHxNZT41OT92b2lkIDA6bmV3IERhdGUoRGF0ZS5VVEMod2UsYmUsSWUsa2UseGUsTWUpKX1mdW5jdGlvbiB1KE9lKXtyZXR1cm4gQS52YWxpZGF0ZShBLmlzRGF0ZShPZSksT2UpLE9lLnRvVVRDU3RyaW5nKCl9ZnVuY3Rpb24gdihPZSl7cmV0dXJuIG51bGw9PU9lP251bGw6KE9lPU9l''@;'; put 'put ''LnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKSxfZS50ZXN0KE9lKSYmKE9lPU9lLnJlcGxhY2UoIlsiLCIiKS5yZXBsYWNlKCJdIiwiIikpLFMmJi9bXlx1MDAwMS1cdTAwN2ZdLy50ZXN0KE9lKSYmKE9lPVMudG9BU0NJSShPZSkpLE9lLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHAoT2UsQ2Us''@;'; put 'put ''a2Upe2lmKG51bGw9PU9lfHxudWxsPT1DZSlyZXR1cm4gbnVsbDtpZighMSE9PWtlJiYoT2U9dihPZSksQ2U9dihDZSkpLE9lPT1DZSlyZXR1cm4hMDtjb25zdCB4ZT1PZS5sYXN0SW5kZXhPZihDZSk7cmV0dXJuISh4ZTw9MHx8T2UubGVuZ3RoIT09Q2UubGVuZ3RoK3hlfHwiLiIhPT1PZS5z''@;'; put 'put ''dWJzdHIoeGUtMSwxKXx8c2UudGVzdChPZSkpfWZ1bmN0aW9uIF8oT2Upe2lmKCFPZXx8Ii8iIT09T2Uuc3Vic3RyKDAsMSkpcmV0dXJuIi8iO2lmKCIvIj09PU9lKXJldHVybiBPZTtjb25zdCBDZT1PZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiAwPT09Q2U/Ii8iOk9lLnNsaWNlKDAsQ2Up''@;'; put 'put ''fWZ1bmN0aW9uIHkoT2UsQ2Upe2lmKCghQ2V8fCJvYmplY3QiIT10eXBlb2YgQ2UpJiYoQ2U9e30pLEEuaXNFbXB0eVN0cmluZyhPZSl8fCFBLmlzU3RyaW5nKE9lKSlyZXR1cm4gbnVsbDtjb25zdCBrZT0oT2U9T2UudHJpbSgpKS5pbmRleE9mKCI7IiksTWU9ZnVuY3Rpb24gTChPZSxDZSl7''@;'; put 'put ''T2U9ZnVuY3Rpb24gayhPZSl7aWYoQS5pc0VtcHR5U3RyaW5nKE9lKSlyZXR1cm4gT2U7Zm9yKGxldCBDZT0wO0NlPEYubGVuZ3RoO0NlKyspe2NvbnN0IGtlPU9lLmluZGV4T2YoRltDZV0pOy0xIT09a2UmJihPZT1PZS5zdWJzdHIoMCxrZSkpfXJldHVybiBPZX0oT2UpLEEudmFsaWRhdGUo''@;'; put 'put ''QS5pc1N0cmluZyhPZSksT2UpO2xldCB4ZSxNZSxrZT1PZS5pbmRleE9mKCI9Iik7aWYoQ2UpMD09PWtlJiYoa2U9KE9lPU9lLnN1YnN0cigxKSkuaW5kZXhPZigiPSIpKTtlbHNlIGlmKGtlPD0wKXJldHVybjtpZihrZTw9MD8oeGU9IiIsTWU9T2UudHJpbSgpKTooeGU9T2Uuc3Vic3RyKDAs''@;'; put 'put ''a2UpLnRyaW0oKSxNZT1PZS5zdWJzdHIoa2UrMSkudHJpbSgpKSxCLnRlc3QoeGUpfHxCLnRlc3QoTWUpKXJldHVybjtjb25zdCBJZT1uZXcgcWU7cmV0dXJuIEllLmtleT14ZSxJZS52YWx1ZT1NZSxJZX0oLTE9PT1rZT9PZTpPZS5zdWJzdHIoMCxrZSksISFDZS5sb29zZSk7aWYoIU1lKXJl''@;'; put 'put ''dHVybjtpZigtMT09PWtlKXJldHVybiBNZTtjb25zdCBJZT1PZS5zbGljZShrZSsxKS50cmltKCk7aWYoMD09PUllLmxlbmd0aClyZXR1cm4gTWU7Y29uc3QgYmU9SWUuc3BsaXQoIjsiKTtmb3IoO2JlLmxlbmd0aDspe2NvbnN0IHdlPWJlLnNoaWZ0KCkudHJpbSgpO2lmKDA9PT13ZS5sZW5n''@;'; put 'put ''dGgpY29udGludWU7Y29uc3QgcHQ9d2UuaW5kZXhPZigiPSIpO2xldCBLZSxZZTtzd2l0Y2goLTE9PT1wdD8oS2U9d2UsWWU9bnVsbCk6KEtlPXdlLnN1YnN0cigwLHB0KSxZZT13ZS5zdWJzdHIocHQrMSkpLEtlPUtlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFllJiYoWWU9WWUudHJpbSgpKSxL''@;'; put 'put ''ZSl7Y2FzZSJleHBpcmVzIjppZihZZSl7Y29uc3QgaHQ9cyhZZSk7aHQmJihNZS5leHBpcmVzPWh0KX1icmVhaztjYXNlIm1heC1hZ2UiOmlmKFllJiYvXi0/WzAtOV0rJC8udGVzdChZZSkpe2NvbnN0IGh0PXBhcnNlSW50KFllLDEwKTtNZS5zZXRNYXhBZ2UoaHQpfWJyZWFrO2Nhc2UiZG9t''@;'; put 'put ''YWluIjppZihZZSl7Y29uc3QgaHQ9WWUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpO2h0JiYoTWUuZG9tYWluPWh0LnRvTG93ZXJDYXNlKCkpfWJyZWFrO2Nhc2UicGF0aCI6TWUucGF0aD1ZZSYmIi8iPT09WWVbMF0/WWU6bnVsbDticmVhaztjYXNlInNlY3VyZSI6TWUuc2VjdXJlPSEwO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiaHR0cG9ubHkiOk1lLmh0dHBPbmx5PSEwO2JyZWFrO2Nhc2Uic2FtZXNpdGUiOnN3aXRjaChZZT9ZZS50b0xvd2VyQ2FzZSgpOiIiKXtjYXNlInN0cmljdCI6TWUuc2FtZVNpdGU9InN0cmljdCI7YnJlYWs7Y2FzZSJsYXgiOk1lLnNhbWVTaXRlPSJsYXgiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bm9uZSI6TWUuc2FtZVNpdGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6TWUuc2FtZVNpdGU9dm9pZCAwfWJyZWFrO2RlZmF1bHQ6TWUuZXh0ZW5zaW9ucz1NZS5leHRlbnNpb25zfHxbXSxNZS5leHRlbnNpb25zLnB1c2god2UpfX1yZXR1cm4gTWV9ZnVuY3Rpb24gcShPZSl7bGV0IENlO3RyeXtD''@;'; put 'put ''ZT1KU09OLnBhcnNlKE9lKX1jYXRjaChrZSl7cmV0dXJuIGtlfXJldHVybiBDZX1mdW5jdGlvbiBHKE9lKXtpZighT2V8fEEuaXNFbXB0eVN0cmluZyhPZSkpcmV0dXJuIG51bGw7bGV0IENlO2lmKCJzdHJpbmciPT10eXBlb2YgT2Upe2lmKENlPXEoT2UpLENlIGluc3RhbmNlb2YgRXJyb3Ip''@;'; put 'put ''cmV0dXJuIG51bGx9ZWxzZSBDZT1PZTtjb25zdCBrZT1uZXcgcWU7Zm9yKGxldCB4ZT0wO3hlPHFlLnNlcmlhbGl6YWJsZVByb3BlcnRpZXMubGVuZ3RoO3hlKyspe2NvbnN0IE1lPXFlLnNlcmlhbGl6YWJsZVByb3BlcnRpZXNbeGVdO3ZvaWQgMD09PUNlW01lXXx8Q2VbTWVdPT09WmVbTWVd''@;'; put 'put ''fHwoa2VbTWVdPSJleHBpcmVzIj09PU1lfHwiY3JlYXRpb24iPT09TWV8fCJsYXN0QWNjZXNzZWQiPT09TWU/bnVsbD09PUNlW01lXT9udWxsOiJJbmZpbml0eSI9PUNlW01lXT8iSW5maW5pdHkiOm5ldyBEYXRlKENlW01lXSk6Q2VbTWVdKX1yZXR1cm4ga2V9ZnVuY3Rpb24gUShPZSxDZSl7''@;'; put 'put ''QS52YWxpZGF0ZShBLmlzT2JqZWN0KE9lKSxPZSksQS52YWxpZGF0ZShBLmlzT2JqZWN0KENlKSxDZSk7bGV0IGtlPTA7cmV0dXJuIGtlPShDZS5wYXRoP0NlLnBhdGgubGVuZ3RoOjApLShPZS5wYXRoP09lLnBhdGgubGVuZ3RoOjApLDAhPT1rZXx8KGtlPShPZS5jcmVhdGlvbj9PZS5jcmVh''@;'; put 'put ''dGlvbi5nZXRUaW1lKCk6WiktKENlLmNyZWF0aW9uP0NlLmNyZWF0aW9uLmdldFRpbWUoKTpaKSwwIT09a2V8fChrZT1PZS5jcmVhdGlvbkluZGV4LUNlLmNyZWF0aW9uSW5kZXgpKSxrZX1mdW5jdGlvbiBQZShPZSl7aWYoT2UgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIE9lO3RyeXtPZT1k''@;'; put 'put ''ZWNvZGVVUkkoT2UpfWNhdGNoe31yZXR1cm4gaChPZSl9Y29uc3QgWmU9e2tleToiIix2YWx1ZToiIixleHBpcmVzOiJJbmZpbml0eSIsbWF4QWdlOm51bGwsZG9tYWluOm51bGwscGF0aDpudWxsLHNlY3VyZTohMSxodHRwT25seTohMSxleHRlbnNpb25zOm51bGwsaG9zdE9ubHk6bnVsbCxw''@;'; put 'put ''YXRoSXNEZWZhdWx0Om51bGwsY3JlYXRpb246bnVsbCxsYXN0QWNjZXNzZWQ6bnVsbCxzYW1lU2l0ZTp2b2lkIDB9O2NsYXNzIHFle2NvbnN0cnVjdG9yKENlPXt9KXtjb25zdCBrZT1EKCk7a2UmJih0aGlzW2tlXT10aGlzLmluc3BlY3QpLE9iamVjdC5hc3NpZ24odGhpcyxaZSxDZSksdGhp''@;'; put 'put ''cy5jcmVhdGlvbj10aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY3JlYXRpb25JbmRleCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOisrcWUuY29va2llc0NyZWF0ZWR9KX1pbnNwZWN0KCl7Y29uc3Qg''@;'; put 'put ''Q2U9RGF0ZS5ub3coKSxrZT1udWxsIT10aGlzLmhvc3RPbmx5P3RoaXMuaG9zdE9ubHk6Ij8iLHhlPXRoaXMuY3JlYXRpb24/Q2UtdGhpcy5jcmVhdGlvbi5nZXRUaW1lKCkrIm1zIjoiPyIsTWU9dGhpcy5sYXN0QWNjZXNzZWQ/Q2UtdGhpcy5sYXN0QWNjZXNzZWQuZ2V0VGltZSgpKyJtcyI6''@;'; put 'put ''Ij8iO3JldHVybmBDb29raWU9IiR7dGhpcy50b1N0cmluZygpfTsgaG9zdE9ubHk9JHtrZX07IGFBZ2U9JHtNZX07IGNBZ2U9JHt4ZX0iYH10b0pTT04oKXtjb25zdCBDZT17fTtmb3IoY29uc3Qga2Ugb2YgcWUuc2VyaWFsaXphYmxlUHJvcGVydGllcyl0aGlzW2tlXSE9PVplW2tlXSYmKCJl''@;'; put 'put ''eHBpcmVzIj09PWtlfHwiY3JlYXRpb24iPT09a2V8fCJsYXN0QWNjZXNzZWQiPT09a2U/Q2Vba2VdPW51bGw9PT10aGlzW2tlXT9udWxsOiJJbmZpbml0eSI9PXRoaXNba2VdPyJJbmZpbml0eSI6dGhpc1trZV0udG9JU09TdHJpbmcoKToibWF4QWdlIj09PWtlP251bGwhPT10aGlzW2tlXSYm''@;'; put 'put ''KENlW2tlXT10aGlzW2tlXT09MS8wfHx0aGlzW2tlXT09LTEvMD90aGlzW2tlXS50b1N0cmluZygpOnRoaXNba2VdKTp0aGlzW2tlXSE9PVplW2tlXSYmKENlW2tlXT10aGlzW2tlXSkpO3JldHVybiBDZX1jbG9uZSgpe3JldHVybiBHKHRoaXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIUUu''@;'; put 'put ''dGVzdCh0aGlzLnZhbHVlKXx8dGhpcy5leHBpcmVzIT0xLzAmJiEodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZSkmJiFzKHRoaXMuZXhwaXJlcyl8fG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZTw9MHx8bnVsbCE9dGhpcy5wYXRoJiYhTi50ZXN0KHRoaXMucGF0aCkpcmV0dXJu''@;'; put 'put ''ITE7Y29uc3QgQ2U9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShDZSYmKENlLm1hdGNoKC9cLiQvKXx8bnVsbD09by5nZXRQdWJsaWNTdWZmaXgoQ2UpKSl9c2V0RXhwaXJlcyhDZSl7dGhpcy5leHBpcmVzPUNlIGluc3RhbmNlb2YgRGF0ZT9DZTpzKENlKXx8IkluZmluaXR5In1zZXRNYXhBZ2Uo''@;'; put 'put ''Q2Upe3RoaXMubWF4QWdlPUNlPT09MS8wfHxDZT09PS0xLzA/Q2UudG9TdHJpbmcoKTpDZX1jb29raWVTdHJpbmcoKXtsZXQgQ2U9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09Q2UmJihDZT0iIiksIiI9PT10aGlzLmtleT9DZTpgJHt0aGlzLmtleX09JHtDZX1gfXRvU3RyaW5nKCl7bGV0IENl''@;'; put 'put ''PXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP0NlKz1gOyBFeHBpcmVzPSR7dSh0aGlzLmV4cGlyZXMpfWA6Q2UrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMu''@;'; put 'put ''bWF4QWdlIT0xLzAmJihDZSs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25seSYmKENlKz1gOyBEb21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBhdGgmJihDZSs9YDsgUGF0aD0ke3RoaXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKENlKz0i''@;'; put 'put ''OyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYoQ2UrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7Y29uc3Qga2U9cWUuc2FtZVNpdGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpXTtDZSs9YDsgU2FtZVNpdGU9JHtrZXx8''@;'; put 'put ''dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKGtlPT57Q2UrPWA7ICR7a2V9YH0pLENlfVRUTChDZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdlPD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBrZT10''@;'; put 'put ''aGlzLmV4cGlyZXM7cmV0dXJuIGtlIT0xLzA/KGtlIGluc3RhbmNlb2YgRGF0ZXx8KGtlPXMoa2UpfHwxLzApLGtlPT0xLzA/MS8wOmtlLmdldFRpbWUoKS0oQ2V8fERhdGUubm93KCkpKToxLzB9ZXhwaXJ5VGltZShDZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2Upe2NvbnN0IHhlPXRoaXMubWF4''@;'; put 'put ''QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihDZXx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUoKSt4ZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0ZShDZSl7Y29uc3Qga2U9dGhpcy5leHBpcnlU''@;'; put 'put ''aW1lKENlKTtyZXR1cm4ga2U9PTEvMD9uZXcgRGF0ZShaKTprZT09LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShrZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMubWF4QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1jYW5vbmljYWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9PXRo''@;'; put 'put ''aXMuZG9tYWluP251bGw6dih0aGlzLmRvbWFpbil9Y2RvbWFpbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24gdmUoT2Upe2lmKG51bGwhPU9lKXtjb25zdCBDZT1PZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChDZSl7Y2FzZSBuZS5TVFJJQ1Q6Y2FzZSBuZS5T''@;'; put 'put ''SUxFTlQ6Y2FzZSBuZS5ESVNBQkxFRDpyZXR1cm4gQ2V9fXJldHVybiBuZS5TSUxFTlR9cWUuY29va2llc0NyZWF0ZWQ9MCxxZS5wYXJzZT15LHFlLmZyb21KU09OPUcscWUuc2VyaWFsaXphYmxlUHJvcGVydGllcz1PYmplY3Qua2V5cyhaZSkscWUuc2FtZVNpdGVMZXZlbD17c3RyaWN0OjMs''@;'; put 'put ''bGF4OjIsbm9uZToxfSxxZS5zYW1lU2l0ZUNhbm9uaWNhbD17c3RyaWN0OiJTdHJpY3QiLGxheDoiTGF4In07Y2xhc3MgdWV7Y29uc3RydWN0b3IoQ2Usa2U9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOiEwfSl7ImJvb2xlYW4iPT10eXBlb2Yga2UmJihrZT17cmVqZWN0UHVibGljU3VmZml4ZXM6''@;'; put 'put ''a2V9KSxBLnZhbGlkYXRlKEEuaXNPYmplY3Qoa2UpLGtlKSx0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzPWtlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLHRoaXMuZW5hYmxlTG9vc2VNb2RlPSEha2UubG9vc2VNb2RlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluPSJib29sZWFuIiE9dHlwZW9m''@;'; put 'put ''IGtlLmFsbG93U3BlY2lhbFVzZURvbWFpbnx8a2UuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHRoaXMuc3RvcmU9Q2V8fG5ldyBmLHRoaXMucHJlZml4U2VjdXJpdHk9dmUoa2UucHJlZml4U2VjdXJpdHkpLHRoaXMuX2Nsb25lU3luYz16ZSgiY2xvbmUiKSx0aGlzLl9pbXBvcnRDb29raWVzU3lu''@;'; put 'put ''Yz16ZSgiX2ltcG9ydENvb2tpZXMiKSx0aGlzLmdldENvb2tpZXNTeW5jPXplKCJnZXRDb29raWVzIiksdGhpcy5nZXRDb29raWVTdHJpbmdTeW5jPXplKCJnZXRDb29raWVTdHJpbmciKSx0aGlzLmdldFNldENvb2tpZVN0cmluZ3NTeW5jPXplKCJnZXRTZXRDb29raWVTdHJpbmdzIiksdGhp''@;'; put 'put ''cy5yZW1vdmVBbGxDb29raWVzU3luYz16ZSgicmVtb3ZlQWxsQ29va2llcyIpLHRoaXMuc2V0Q29va2llU3luYz16ZSgic2V0Q29va2llIiksdGhpcy5zZXJpYWxpemVTeW5jPXplKCJzZXJpYWxpemUiKX1zZXRDb29raWUoQ2Usa2UseGUsTWUpe2xldCBJZTtpZihBLnZhbGlkYXRlKEEuaXNO''@;'; put 'put ''b25FbXB0eVN0cmluZyhrZSksTWUseGUpLEEuaXNGdW5jdGlvbihrZSkpcmV0dXJuKE1lPWtlKShuZXcgRXJyb3IoIk5vIFVSTCB3YXMgc3BlY2lmaWVkIikpO2NvbnN0IGJlPVBlKGtlKTtpZihBLmlzRnVuY3Rpb24oeGUpJiYoTWU9eGUseGU9e30pLEEudmFsaWRhdGUoQS5pc0Z1bmN0aW9u''@;'; put 'put ''KE1lKSxNZSksIUEuaXNOb25FbXB0eVN0cmluZyhDZSkmJiFBLmlzT2JqZWN0KENlKSYmQ2UgaW5zdGFuY2VvZiBTdHJpbmcmJjA9PUNlLmxlbmd0aClyZXR1cm4gTWUobnVsbCk7Y29uc3Qgd2U9dihiZS5ob3N0bmFtZSkscHQ9eGUubG9vc2V8fHRoaXMuZW5hYmxlTG9vc2VNb2RlO2xldCBL''@;'; put 'put ''ZT1udWxsO2lmKHhlLnNhbWVTaXRlQ29udGV4dCYmKEtlPVgoeGUuc2FtZVNpdGVDb250ZXh0KSwhS2UpKXJldHVybiBNZShuZXcgRXJyb3IoSykpO2lmKCJzdHJpbmciPT10eXBlb2YgQ2V8fENlIGluc3RhbmNlb2YgU3RyaW5nKXtpZighKENlPXFlLnBhcnNlKENlLHtsb29zZTpwdH0pKSly''@;'; put 'put ''ZXR1cm4gSWU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksTWUoeGUuaWdub3JlRXJyb3I/bnVsbDpJZSl9ZWxzZSBpZighKENlIGluc3RhbmNlb2YgcWUpKXJldHVybiBJZT1uZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEgQ29va2ll''@;'; put 'put ''IG9iamVjdCBvciBzdHJpbmciKSxNZSh4ZS5pZ25vcmVFcnJvcj9udWxsOkllKTtjb25zdCBZZT14ZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJkNlLmRvbWFpbiYmbnVsbD09by5nZXRQdWJsaWNTdWZmaXgoQ2UuY2RvbWFpbigpLHthbGxvd1NwZWNpYWxV''@;'; put 'put ''c2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4saWdub3JlRXJyb3I6eGUuaWdub3JlRXJyb3J9KSYmIV9lLnRlc3QoQ2UuZG9tYWluKSlyZXR1cm4gSWU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksTWUoeGUuaWdub3JlRXJy''@;'; put 'put ''b3I/bnVsbDpJZSk7aWYoQ2UuZG9tYWluKXtpZighcCh3ZSxDZS5jZG9tYWluKCksITEpKXJldHVybiBJZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtDZS5jZG9tYWluKCl9IFJlcXVlc3Q6JHt3ZX1gKSxNZSh4ZS5pZ25vcmVFcnJvcj9u''@;'; put 'put ''dWxsOkllKTtudWxsPT1DZS5ob3N0T25seSYmKENlLmhvc3RPbmx5PSExKX1lbHNlIENlLmhvc3RPbmx5PSEwLENlLmRvbWFpbj13ZTtpZigoIUNlLnBhdGh8fCIvIiE9PUNlLnBhdGhbMF0pJiYoQ2UucGF0aD1fKGJlLnBhdGhuYW1lKSxDZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PXhlLmh0''@;'; put 'put ''dHAmJkNlLmh0dHBPbmx5KXJldHVybiBJZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLE1lKHhlLmlnbm9yZUVycm9yP251bGw6SWUpO2lmKCJub25lIiE9PUNlLnNhbWVTaXRlJiZ2b2lkIDAhPT1DZS5zYW1lU2l0ZSYmS2UmJiJu''@;'; put 'put ''b25lIj09PUtlKXJldHVybiBJZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksTWUoeGUuaWdub3JlRXJyb3I/bnVsbDpJZSk7Y29uc3QgcXQ9dGhpcy5wcmVmaXhTZWN1cml0eT09PW5lLlNJTEVOVDtpZih0aGlzLnBy''@;'; put 'put ''ZWZpeFNlY3VyaXR5IT09bmUuRElTQUJMRUQpe2xldCBVZSx0dD0hMTtpZihmdW5jdGlvbiBsKE9lKXtyZXR1cm4gQS52YWxpZGF0ZShBLmlzT2JqZWN0KE9lKSxPZSksIU9lLmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8T2Uuc2VjdXJlfShDZSk/ZnVuY3Rpb24gYihPZSl7cmV0dXJu''@;'; put 'put ''IEEudmFsaWRhdGUoQS5pc09iamVjdChPZSkpLCFPZS5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxPZS5zZWN1cmUmJk9lLmhvc3RPbmx5JiZudWxsIT1PZS5wYXRoJiYiLyI9PT1PZS5wYXRofShDZSl8fCh0dD0hMCxVZT0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIg''@;'; put 'put ''U2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOih0dD0hMCxVZT0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90IHNldCIpLHR0KXJldHVybiBNZSh4ZS5pZ25vcmVFcnJvcnx8cXQ/''@;'; put 'put ''bnVsbDpuZXcgRXJyb3IoVWUpKX1jb25zdCB2dD10aGlzLnN0b3JlO3Z0LnVwZGF0ZUNvb2tpZXx8KHZ0LnVwZGF0ZUNvb2tpZT1mdW5jdGlvbih0dCxVZSwkZSl7dGhpcy5wdXRDb29raWUoVWUsJGUpfSksdnQuZmluZENvb2tpZShDZS5kb21haW4sQ2UucGF0aCxDZS5rZXksZnVuY3Rpb24g''@;'; put 'put ''WXQodHQsVWUpe2lmKHR0KXJldHVybiBNZSh0dCk7Y29uc3QgJGU9ZnVuY3Rpb24oTGUpe2lmKExlKXJldHVybiBNZShMZSk7TWUobnVsbCxDZSl9O2lmKFVlKXtpZighMT09PXhlLmh0dHAmJlVlLmh0dHBPbmx5KXJldHVybiB0dD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkg''@;'; put 'put ''YW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxNZSh4ZS5pZ25vcmVFcnJvcj9udWxsOnR0KTtDZS5jcmVhdGlvbj1VZS5jcmVhdGlvbixDZS5jcmVhdGlvbkluZGV4PVVlLmNyZWF0aW9uSW5kZXgsQ2UubGFzdEFjY2Vzc2VkPVllLHZ0LnVwZGF0ZUNvb2tpZShVZSxDZSwkZSl9ZWxzZSBD''@;'; put 'put ''ZS5jcmVhdGlvbj1DZS5sYXN0QWNjZXNzZWQ9WWUsdnQucHV0Q29va2llKENlLCRlKX0pfWdldENvb2tpZXMoQ2Usa2UseGUpe0EudmFsaWRhdGUoQS5pc05vbkVtcHR5U3RyaW5nKENlKSx4ZSxDZSk7Y29uc3QgTWU9UGUoQ2UpO0EuaXNGdW5jdGlvbihrZSkmJih4ZT1rZSxrZT17fSksQS52''@;'; put 'put ''YWxpZGF0ZShBLmlzT2JqZWN0KGtlKSx4ZSxrZSksQS52YWxpZGF0ZShBLmlzRnVuY3Rpb24oeGUpLHhlKTtjb25zdCBJZT12KE1lLmhvc3RuYW1lKSxiZT1NZS5wYXRobmFtZXx8Ii8iO2xldCB3ZT1rZS5zZWN1cmU7bnVsbD09d2UmJk1lLnByb3RvY29sJiYoImh0dHBzOiI9PU1lLnByb3Rv''@;'; put 'put ''Y29sfHwid3NzOiI9PU1lLnByb3RvY29sKSYmKHdlPSEwKTtsZXQgcHQ9MDtpZihrZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IHR0PVgoa2Uuc2FtZVNpdGVDb250ZXh0KTtpZihwdD1xZS5zYW1lU2l0ZUxldmVsW3R0XSwhcHQpcmV0dXJuIHhlKG5ldyBFcnJvcihLKSl9bGV0IEtlPWtlLmh0''@;'; put 'put ''dHA7bnVsbD09S2UmJihLZT0hMCk7Y29uc3QgWWU9a2Uubm93fHxEYXRlLm5vdygpLHF0PSExIT09a2UuZXhwaXJlLGh0PSEha2UuYWxsUGF0aHMsdnQ9dGhpcy5zdG9yZTtmdW5jdGlvbiBZdCh0dCl7aWYodHQuaG9zdE9ubHkpe2lmKHR0LmRvbWFpbiE9SWUpcmV0dXJuITF9ZWxzZSBpZigh''@;'; put 'put ''cChJZSx0dC5kb21haW4sITEpKXJldHVybiExO3JldHVybiEoIWh0JiYhVChiZSx0dC5wYXRoKXx8dHQuc2VjdXJlJiYhd2V8fHR0Lmh0dHBPbmx5JiYhS2V8fHB0JiZxZS5zYW1lU2l0ZUxldmVsW3R0LnNhbWVTaXRlfHwibm9uZSJdPnB0fHxxdCYmdHQuZXhwaXJ5VGltZSgpPD1ZZSYmKHZ0''@;'; put 'put ''LnJlbW92ZUNvb2tpZSh0dC5kb21haW4sdHQucGF0aCx0dC5rZXksKCk9Pnt9KSwxKSl9dnQuZmluZENvb2tpZXMoSWUsaHQ/bnVsbDpiZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbiwodHQsVWUpPT57aWYodHQpcmV0dXJuIHhlKHR0KTtVZT1VZS5maWx0ZXIoWXQpLCExIT09a2Uuc29y''@;'; put 'put ''dCYmKFVlPVVlLnNvcnQoUSkpO2NvbnN0ICRlPW5ldyBEYXRlO2Zvcihjb25zdCBMZSBvZiBVZSlMZS5sYXN0QWNjZXNzZWQ9JGU7eGUobnVsbCxVZSl9KX1nZXRDb29raWVTdHJpbmcoLi4uQ2Upe2NvbnN0IGtlPUNlLnBvcCgpO0EudmFsaWRhdGUoQS5pc0Z1bmN0aW9uKGtlKSxrZSksQ2Uu''@;'; put 'put ''cHVzaChmdW5jdGlvbihNZSxJZSl7TWU/a2UoTWUpOmtlKG51bGwsSWUuc29ydChRKS5tYXAoYmU9PmJlLmNvb2tpZVN0cmluZygpKS5qb2luKCI7ICIpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLENlKX1nZXRTZXRDb29raWVTdHJpbmdzKC4uLkNlKXtjb25zdCBrZT1DZS5wb3Ao''@;'; put 'put ''KTtBLnZhbGlkYXRlKEEuaXNGdW5jdGlvbihrZSksa2UpLENlLnB1c2goZnVuY3Rpb24oTWUsSWUpe01lP2tlKE1lKTprZShudWxsLEllLm1hcChiZT0+YmUudG9TdHJpbmcoKSkpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsQ2UpfXNlcmlhbGl6ZShDZSl7QS52YWxpZGF0ZShBLmlz''@;'; put 'put ''RnVuY3Rpb24oQ2UpLENlKTtsZXQga2U9dGhpcy5zdG9yZS5jb25zdHJ1Y3Rvci5uYW1lO0EuaXNPYmplY3Qoa2UpJiYoa2U9bnVsbCk7Y29uc3QgeGU9e3ZlcnNpb246YHRvdWdoLWNvb2tpZUAke019YCxzdG9yZVR5cGU6a2UscmVqZWN0UHVibGljU3VmZml4ZXM6ISF0aGlzLnJlamVjdFB1''@;'; put 'put ''YmxpY1N1ZmZpeGVzLGVuYWJsZUxvb3NlTW9kZTohIXRoaXMuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjohIXRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHByZWZpeFNlY3VyaXR5OnZlKHRoaXMucHJlZml4U2VjdXJpdHkpLGNvb2tpZXM6W119O2lmKCF0aGlzLnN0''@;'; put 'put ''b3JlLmdldEFsbENvb2tpZXN8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMpcmV0dXJuIENlKG5ldyBFcnJvcigic3RvcmUgZG9lcyBub3Qgc3VwcG9ydCBnZXRBbGxDb29raWVzIGFuZCBjYW5ub3QgYmUgc2VyaWFsaXplZCIpKTt0aGlzLnN0b3JlLmdldEFs''@;'; put 'put ''bENvb2tpZXMoKE1lLEllKT0+TWU/Q2UoTWUpOih4ZS5jb29raWVzPUllLm1hcChiZT0+KGRlbGV0ZShiZT1iZSBpbnN0YW5jZW9mIHFlP2JlLnRvSlNPTigpOmJlKS5jcmVhdGlvbkluZGV4LGJlKSksQ2UobnVsbCx4ZSkpKX10b0pTT04oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVTeW5jKCl9''@;'; put 'put ''X2ltcG9ydENvb2tpZXMoQ2Usa2Upe2xldCB4ZT1DZS5jb29raWVzO2lmKCF4ZXx8IUFycmF5LmlzQXJyYXkoeGUpKXJldHVybiBrZShuZXcgRXJyb3IoInNlcmlhbGl6ZWQgamFyIGhhcyBubyBjb29raWVzIGFycmF5IikpO3hlPXhlLnNsaWNlKCk7Y29uc3QgTWU9SWU9PntpZihJZSlyZXR1''@;'; put 'put ''cm4ga2UoSWUpO2lmKCF4ZS5sZW5ndGgpcmV0dXJuIGtlKEllLHRoaXMpO2xldCBiZTt0cnl7YmU9Ryh4ZS5zaGlmdCgpKX1jYXRjaCh3ZSl7cmV0dXJuIGtlKHdlKX1pZihudWxsPT09YmUpcmV0dXJuIE1lKG51bGwpO3RoaXMuc3RvcmUucHV0Q29va2llKGJlLE1lKX07TWUoKX1jbG9uZShD''@;'; put 'put ''ZSxrZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihrZT1DZSxDZT1udWxsKSx0aGlzLnNlcmlhbGl6ZSgoeGUsTWUpPT57aWYoeGUpcmV0dXJuIGtlKHhlKTt1ZS5kZXNlcmlhbGl6ZShNZSxDZSxrZSl9KX1jbG9uZVN5bmMoQ2Upe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlz''@;'; put 'put ''Ll9jbG9uZVN5bmMoKTtpZighQ2Uuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgY2xvbmUgZGVzdGluYXRpb24gc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuX2Nsb25lU3luYyhDZSl9cmVtb3ZlQWxs''@;'; put 'put ''Q29va2llcyhDZSl7QS52YWxpZGF0ZShBLmlzRnVuY3Rpb24oQ2UpLENlKTtjb25zdCBrZT10aGlzLnN0b3JlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBrZS5yZW1vdmVBbGxDb29raWVzJiZrZS5yZW1vdmVBbGxDb29raWVzIT09SS5wcm90b3R5cGUucmVtb3ZlQWxsQ29va2llcylyZXR1cm4g''@;'; put 'put ''a2UucmVtb3ZlQWxsQ29va2llcyhDZSk7a2UuZ2V0QWxsQ29va2llcygoeGUsTWUpPT57aWYoeGUpcmV0dXJuIENlKHhlKTtpZigwPT09TWUubGVuZ3RoKXJldHVybiBDZShudWxsKTtsZXQgSWU9MDtjb25zdCBiZT1bXTtmdW5jdGlvbiB3ZShwdCl7aWYocHQmJmJlLnB1c2gocHQpLEllKyss''@;'; put 'put ''SWU9PT1NZS5sZW5ndGgpcmV0dXJuIENlKGJlLmxlbmd0aD9iZVswXTpudWxsKX1NZS5mb3JFYWNoKHB0PT57a2UucmVtb3ZlQ29va2llKHB0LmRvbWFpbixwdC5wYXRoLHB0LmtleSx3ZSl9KX0pfXN0YXRpYyBkZXNlcmlhbGl6ZShDZSxrZSx4ZSl7bGV0IE1lO2lmKDMhPT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoJiYoeGU9a2Usa2U9bnVsbCksQS52YWxpZGF0ZShBLmlzRnVuY3Rpb24oeGUpLHhlKSwic3RyaW5nIj09dHlwZW9mIENlKXtpZihNZT1xKENlKSxNZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiB4ZShNZSl9ZWxzZSBNZT1DZTtjb25zdCBJZT1uZXcgdWUoa2Use3JlamVjdFB1Ymxp''@;'; put 'put ''Y1N1ZmZpeGVzOk1lLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpNZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOk1lLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpNZS5wcmVmaXhTZWN1cml0eX0pO0llLl9pbXBvcnRDb29raWVzKE1l''@;'; put 'put ''LGJlPT57aWYoYmUpcmV0dXJuIHhlKGJlKTt4ZShudWxsLEllKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoQ2Usa2Upe2NvbnN0IHhlPSJzdHJpbmciPT10eXBlb2YgQ2U/SlNPTi5wYXJzZShDZSk6Q2UsTWU9bmV3IHVlKGtlLHtyZWplY3RQdWJsaWNTdWZmaXhlczp4ZS5yZWplY3RQdWJs''@;'; put 'put ''aWNTdWZmaXhlcyxsb29zZU1vZGU6eGUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIU1lLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBNZS5faW1wb3J0Q29v''@;'; put 'put ''a2llc1N5bmMoeGUpLE1lfX1mdW5jdGlvbiB6ZShPZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLkNlKXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQg''@;'; put 'put ''a2UseGU7aWYodGhpc1tPZV0oLi4uQ2UsKE1lLEllKT0+e2tlPU1lLHhlPUllfSksa2UpdGhyb3cga2U7cmV0dXJuIHhlfX11ZS5mcm9tSlNPTj11ZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNl''@;'; put 'put ''dENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaChPZT0+e3VlLnByb3RvdHlwZVtPZV09Tyh1ZS5wcm90b3R5cGVbT2VdKX0pLHVlLmRlc2VyaWFsaXplPU8odWUuZGVzZXJpYWxpemUpLGoudmVyc2lvbj1NLGouQ29va2ll''@;'; put 'put ''SmFyPXVlLGouQ29va2llPXFlLGouU3RvcmU9SSxqLk1lbW9yeUNvb2tpZVN0b3JlPWYsai5wYXJzZURhdGU9cyxqLmZvcm1hdERhdGU9dSxqLnBhcnNlPXksai5mcm9tSlNPTj1HLGouZG9tYWluTWF0Y2g9cCxqLmRlZmF1bHRQYXRoPV8sai5wYXRoTWF0Y2g9VCxqLmdldFB1YmxpY1N1ZmZp''@;'; put 'put ''eD1vLmdldFB1YmxpY1N1ZmZpeCxqLmNvb2tpZUNvbXBhcmU9USxqLnBlcm11dGVEb21haW49ZCg3MzI0KS5wZXJtdXRlRG9tYWluLGoucGVybXV0ZVBhdGg9ZnVuY3Rpb24gcGUoT2Upe2lmKEEudmFsaWRhdGUoQS5pc1N0cmluZyhPZSkpLCIvIj09PU9lKXJldHVyblsiLyJdO2NvbnN0IENl''@;'; put 'put ''PVtPZV07Zm9yKDtPZS5sZW5ndGg+MTspe2NvbnN0IGtlPU9lLmxhc3RJbmRleE9mKCIvIik7aWYoMD09PWtlKWJyZWFrO09lPU9lLnN1YnN0cigwLGtlKSxDZS5wdXNoKE9lKX1yZXR1cm4gQ2UucHVzaCgiLyIpLENlfSxqLmNhbm9uaWNhbERvbWFpbj12LGouUHJlZml4U2VjdXJpdHlFbnVt''@;'; put 'put ''PW5lLGouUGFyYW1ldGVyRXJyb3I9QS5QYXJhbWV0ZXJFcnJvcn0sNTc2MToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6aH09ZCg3MDQxKSxvPWQoMjIyNCkueSxJPWQoNzMyNCkucGVybXV0ZURvbWFpbixmPWQoODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVjdFN5''@;'; put 'put ''bWJvbDpULGdldFV0aWxJbnNwZWN0OkF9PWQoMTI2OSk7Y2xhc3MgTSBleHRlbmRzIG97Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBGPVQoKTtGJiYodGhpc1tGXT10aGlzLmluc3BlY3QpfWluc3Bl''@;'; put 'put ''Y3QoKXtyZXR1cm5geyBpZHg6ICR7QShPKSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tpZShGLE4sSCx6KXtyZXR1cm4geihudWxsLHRoaXMuaWR4W0ZdJiZ0aGlzLmlkeFtGXVtOXT90aGlzLmlkeFtGXVtOXVtIXXx8bnVsbDp2b2lkIDApfWZpbmRDb29raWVzKEYsTixILHope2NvbnN0''@;'; put 'put ''IFo9W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIEgmJih6PUgsSD0hMCksIUYpcmV0dXJuIHoobnVsbCxbXSk7bGV0IFU7VT1OP2Z1bmN0aW9uKHNlKXtPYmplY3Qua2V5cyhzZSkuZm9yRWFjaChoZT0+e2lmKGYoTixoZSkpe2NvbnN0IF9lPXNlW2hlXTtmb3IoY29uc3QgbWUgaW4gX2UpWi5w''@;'; put 'put ''dXNoKF9lW21lXSl9fSl9OmZ1bmN0aW9uKHNlKXtmb3IoY29uc3QgaGUgaW4gc2Upe2NvbnN0IF9lPXNlW2hlXTtmb3IoY29uc3QgbWUgaW4gX2UpWi5wdXNoKF9lW21lXSl9fTtjb25zdCBLPUkoRixIKXx8W0ZdLFg9dGhpcy5pZHg7Sy5mb3JFYWNoKG5lPT57Y29uc3Qgc2U9WFtuZV07c2Um''@;'; put 'put ''JlUoc2UpfSkseihudWxsLFopfXB1dENvb2tpZShGLE4pe3RoaXMuaWR4W0YuZG9tYWluXXx8KHRoaXMuaWR4W0YuZG9tYWluXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtGLmRvbWFpbl1bRi5wYXRoXXx8KHRoaXMuaWR4W0YuZG9tYWluXVtGLnBhdGhdPU9iamVjdC5jcmVhdGUo''@;'; put 'put ''bnVsbCkpLHRoaXMuaWR4W0YuZG9tYWluXVtGLnBhdGhdW0Yua2V5XT1GLE4obnVsbCl9dXBkYXRlQ29va2llKEYsTixIKXt0aGlzLnB1dENvb2tpZShOLEgpfXJlbW92ZUNvb2tpZShGLE4sSCx6KXt0aGlzLmlkeFtGXSYmdGhpcy5pZHhbRl1bTl0mJnRoaXMuaWR4W0ZdW05dW0hdJiZkZWxl''@;'; put 'put ''dGUgdGhpcy5pZHhbRl1bTl1bSF0seihudWxsKX1yZW1vdmVDb29raWVzKEYsTixIKXtyZXR1cm4gdGhpcy5pZHhbRl0mJihOP2RlbGV0ZSB0aGlzLmlkeFtGXVtOXTpkZWxldGUgdGhpcy5pZHhbRl0pLEgobnVsbCl9cmVtb3ZlQWxsQ29va2llcyhGKXtyZXR1cm4gdGhpcy5pZHg9T2JqZWN0''@;'; put 'put ''LmNyZWF0ZShudWxsKSxGKG51bGwpfWdldEFsbENvb2tpZXMoRil7Y29uc3QgTj1bXSxIPXRoaXMuaWR4O09iamVjdC5rZXlzKEgpLmZvckVhY2goWj0+e09iamVjdC5rZXlzKEhbWl0pLmZvckVhY2goSz0+e09iamVjdC5rZXlzKEhbWl1bS10pLmZvckVhY2gobmU9PntudWxsIT09bmUmJk4u''@;'; put 'put ''cHVzaChIW1pdW0tdW25lXSl9KX0pfSksTi5zb3J0KChaLFUpPT4oWi5jcmVhdGlvbkluZGV4fHwwKS0oVS5jcmVhdGlvbkluZGV4fHwwKSksRihudWxsLE4pfX1mdW5jdGlvbiBPKEIpe2NvbnN0IEY9T2JqZWN0LmtleXMoQik7aWYoMD09PUYubGVuZ3RoKXJldHVybiJbT2JqZWN0OiBudWxs''@;'; put 'put ''IHByb3RvdHlwZV0ge30iO2xldCBOPSJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuIjtyZXR1cm4gT2JqZWN0LmtleXMoQikuZm9yRWFjaCgoSCx6KT0+e04rPWZ1bmN0aW9uIEQoQixGKXtsZXQgSD1gICAnJHtCfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBP''@;'; put 'put ''YmplY3Qua2V5cyhGKS5mb3JFYWNoKCh6LFosVSk9PntIKz1mdW5jdGlvbiBFKEIsRil7Y29uc3QgTj0iICAgICI7bGV0IEg9YCR7Tn0nJHtCfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhGKS5mb3JFYWNoKCh6LFosVSk9PntIKz1gICAgICAg''@;'; put 'put ''JHt6fTogJHtGW3pdLmluc3BlY3QoKX1gLFo8VS5sZW5ndGgtMSYmKEgrPSIsIiksSCs9IlxuIn0pLEgrPWAke059fWAsSH0oeixGW3pdKSxaPFUubGVuZ3RoLTEmJihIKz0iLCIpLEgrPSJcbiJ9KSxIKz0iICB9IixIfShILEJbSF0pLHo8Ri5sZW5ndGgtMSYmKE4rPSIsIiksTis9IlxuIn0p''@;'; put 'put ''LE4rPSJ9IixOfVsiZmluZENvb2tpZSIsImZpbmRDb29raWVzIiwicHV0Q29va2llIiwidXBkYXRlQ29va2llIiwicmVtb3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIsInJlbW92ZUFsbENvb2tpZXMiLCJnZXRBbGxDb29raWVzIl0uZm9yRWFjaChCPT57TS5wcm90b3R5cGVbQl09aChNLnBy''@;'; put 'put ''b3RvdHlwZVtCXSl9KSxqLm09TX0sODk3MToodGUsaik9PnsidXNlIHN0cmljdCI7ai5VPWZ1bmN0aW9uIGQoUyxoKXtyZXR1cm4gaD09PVN8fDA9PT1TLmluZGV4T2YoaCkmJigiLyI9PT1oLnN1YnN0cigtMSl8fCIvIj09PVMuc3Vic3RyKGgubGVuZ3RoLDEpKX19LDczMjQ6KHRlLGosZCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7Y29uc3QgUz1kKDc1Mik7ai5wZXJtdXRlRG9tYWluPWZ1bmN0aW9uIGgobyxJKXtjb25zdCBmPVMuZ2V0UHVibGljU3VmZml4KG8se2FsbG93U3BlY2lhbFVzZURvbWFpbjpJfSk7aWYoIWYpcmV0dXJuIG51bGw7aWYoZj09bylyZXR1cm5bb107Ii4iPT1vLnNsaWNl''@;'; put 'put ''KC0xKSYmKG89by5zbGljZSgwLC0xKSk7Y29uc3QgQT1vLnNsaWNlKDAsLShmLmxlbmd0aCsxKSkuc3BsaXQoIi4iKS5yZXZlcnNlKCk7bGV0IE09Zjtjb25zdCBPPVtNXTtmb3IoO0EubGVuZ3RoOylNPWAke0Euc2hpZnQoKX0uJHtNfWAsTy5wdXNoKE0pO3JldHVybiBPfX0sNzUyOih0ZSxq''@;'; put 'put ''LGQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFM9ZCg4NTY2KSxoPVsibG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxvY2FsaG9zdCIsInRlc3QiXSxvPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO2ouZ2V0UHVibGljU3VmZml4PWZ1bmN0aW9uIEkoZixUPXt9KXtjb25zdCBBPWYuc3BsaXQo''@;'; put 'put ''Ii4iKSxNPUFbQS5sZW5ndGgtMV0sRD0hIVQuaWdub3JlRXJyb3I7aWYoVC5hbGxvd1NwZWNpYWxVc2VEb21haW4mJmguaW5jbHVkZXMoTSkpe2lmKEEubGVuZ3RoPjEpcmV0dXJuYCR7QVtBLmxlbmd0aC0yXX0uJHtNfWA7aWYoby5pbmNsdWRlcyhNKSlyZXR1cm5gJHtNfWB9aWYoIUQmJmgu''@;'; put 'put ''aW5jbHVkZXMoTSkpdGhyb3cgbmV3IEVycm9yKGBDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gdGhlIHB1YmxpYyBzdWZmaXggIiR7TX0iIHdoaWNoIGlzIGEgc3BlY2lhbCB1c2UgZG9tYWluLiBUbyBhbGxvdyB0aGlzLCBjb25maWd1cmUgeW91ciBDb29raWVKYXIgd2l0aCB7YWxsb3dTcGVj''@;'; put 'put ''aWFsVXNlRG9tYWluOnRydWUsIHJlamVjdFB1YmxpY1N1ZmZpeGVzOiBmYWxzZX0uYCk7cmV0dXJuIFMuZ2V0KGYpfX0sMjIyNDoodGUsaik9PnsidXNlIHN0cmljdCI7ai55PWNsYXNzIGR7Y29uc3RydWN0b3IoKXt0aGlzLnN5bmNocm9ub3VzPSExfWZpbmRDb29raWUoaCxvLEksZil7dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJmaW5kQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWZpbmRDb29raWVzKGgsbyxJLGYpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cHV0Q29va2llKGgsbyl7dGhyb3cgbmV3IEVycm9yKCJwdXRDb29raWUgaXMgbm90''@;'; put 'put ''IGltcGxlbWVudGVkIil9dXBkYXRlQ29va2llKGgsbyxJKXt0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWUoaCxvLEksZil7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3Zl''@;'; put 'put ''Q29va2llcyhoLG8sSSl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUFsbENvb2tpZXMoaCl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWdldEFsbENvb2tpZXMoaCl7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJnZXRBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCAodGhlcmVmb3JlIGphciBjYW5ub3QgYmUgc2VyaWFsaXplZCkiKX19fSwxMjY5Oih0ZSxqLGQpPT57ZnVuY3Rpb24gUygpe3RyeXtyZXR1cm4gZCg5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gaCgp''@;'; put 'put ''e3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpfWouZ2V0VXRpbEluc3BlY3Q9ZnVuY3Rpb24oZixUPXt9KXtjb25zdCBNPShULnJlcXVpcmVVdGlsfHxTKSgpO3JldHVybiBmdW5jdGlvbihELEUsQil7cmV0dXJuIE0/TS5pbnNwZWN0KEQsRSxCKTpmKEQp''@;'; put 'put ''fX0sai5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKGY9e30pe3JldHVybihmLmxvb2t1cEN1c3RvbUluc3BlY3RTeW1ib2x8fGgpKCl8fGZ1bmN0aW9uIG8oSSl7Y29uc3QgVD0oSS5yZXF1aXJlVXRpbHx8UykoKTtyZXR1cm4gVD9ULmluc3BlY3QuY3VzdG9tOm51bGx9KGYpfX0s''@;'; put 'put ''NzY1MjoodGUsaik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChEKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRH1mdW5jdGlvbiBJKEQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgRHx8RCBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiBmKEQpe3JldHVybiJbb2JqZWN0IE9iamVjdF0i''@;'; put 'put ''PT09dG9TdHJpbmcuY2FsbChEKX1jbGFzcyBPIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uRSl7c3VwZXIoLi4uRSl9fWouUGFyYW1ldGVyRXJyb3I9TyxqLmlzRnVuY3Rpb249ZCxqLmlzTm9uRW1wdHlTdHJpbmc9ZnVuY3Rpb24gUyhEKXtyZXR1cm4gSShEKSYmIiIhPT1EfSxqLmlz''@;'; put 'put ''RGF0ZT1mdW5jdGlvbiBoKEQpe3JldHVybiBmdW5jdGlvbiBUKEQsRSl7dHJ5e3JldHVybiBEIGluc3RhbmNlb2YgRX1jYXRjaHtyZXR1cm4hMX19KEQsRGF0ZSkmJmZ1bmN0aW9uIEEoRCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBEJiZEJTE9PTB9KEQuZ2V0VGltZSgpKX0sai5pc0VtcHR5''@;'; put 'put ''U3RyaW5nPWZ1bmN0aW9uIG8oRCl7cmV0dXJuIiI9PT1EfHxEIGluc3RhbmNlb2YgU3RyaW5nJiYiIj09PUQudG9TdHJpbmcoKX0sai5pc1N0cmluZz1JLGouaXNPYmplY3Q9ZixqLnZhbGlkYXRlPWZ1bmN0aW9uIE0oRCxFLEIpe2lmKGQoRSl8fChCPUUsRT1udWxsKSxmKEIpfHwoQj17RXJy''@;'; put 'put ''b3I6IkZhaWxlZCBDaGVjayJ9KSwhRCl7aWYoIUUpdGhyb3cgbmV3IE8oQik7RShuZXcgTyhCKSl9fX0sNDU2OnRlPT57dGUuZXhwb3J0cz0iNC4xLjMifSw3MDQxOih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtqLmZyb21DYWxsYmFjaz1mdW5jdGlvbihkKXtyZXR1cm4gT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoUyxoKT0+e2FyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoXT0obyxJKT0+e2lmKG8pcmV0dXJuIGgobyk7UyhJKX0sYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCsrLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJuYW1lIix7dmFsdWU6ZC5uYW1lfSl9LGouZnJvbVByb21pc2U9ZnVuY3Rpb24oZCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2NvbnN0IFM9YXJndW1l''@;'; put 'put ''bnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFMpcmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxhcmd1bWVudHMubGVuZ3RoLS0sZC5hcHBseSh0aGlzLGFyZ3VtZW50cykudGhlbiho''@;'; put 'put ''PT5TKG51bGwsaCksUyl9LCJuYW1lIix7dmFsdWU6ZC5uYW1lfSl9fSw2NzI6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGYsVCxBLE0pe3JldHVybiBuZXcoQXx8KEE9UHJvbWlzZSkpKGZ1bmN0aW9uKEQsRSl7ZnVu''@;'; put 'put ''Y3Rpb24gQihIKXt0cnl7TihNLm5leHQoSCkpfWNhdGNoKHope0Uoeil9fWZ1bmN0aW9uIEYoSCl7dHJ5e04oTS50aHJvdyhIKSl9Y2F0Y2goeil7RSh6KX19ZnVuY3Rpb24gTihIKXtILmRvbmU/RChILnZhbHVlKTpmdW5jdGlvbiBPKEQpe3JldHVybiBEIGluc3RhbmNlb2YgQT9EOm5ldyBB''@;'; put 'put ''KGZ1bmN0aW9uKEUpe0UoRCl9KX0oSC52YWx1ZSkudGhlbihCLEYpfU4oKE09TS5hcHBseShmLFR8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Db250ZXh0TWFuYWdlcj12b2lkIDA7Y29uc3QgaD1kKDU5MjgpLG89''@;'; put 'put ''ZCg5Nzc4KTtqLkNvbnRleHRNYW5hZ2VyPWNsYXNzIEl7Z2V0IGdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzfWdldCBnZXREZWZhdWx0TGF1bmNoZXJDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRl''@;'; put 'put ''eHRzfWNvbnN0cnVjdG9yKFQsQSl7dGhpcy5zZXJ2ZXJVcmw9VCx0aGlzLnJlcXVlc3RDbGllbnQ9QSx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIkRhdGEgTWluaW5nIGNvbXB1dGUgY29udGV4dCIsIkltcG9ydCA5''@;'; put 'put ''IHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgY29tcHV0ZSBjb250ZXh0IiwiU0FTIFN0dWRpbyBjb21wdXRlIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGNvbXB1dGUgY29udGV4''@;'; put 'put ''dCJdLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJEYXRhIE1pbmluZyBsYXVuY2hlciBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiSm9iIEZsb3cgRXhlY3V0aW9uIGxhdW5j''@;'; put 'put ''aGVyIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgbGF1bmNoZXIgY29udGV4dCIsIlNBUyBTdHVkaW8gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgbGF1bmNoZXIgY29udGV4dCJdLFQmJigw''@;'; put 'put ''LGguaXNVcmwpKFQpfWdldENvbXB1dGVDb250ZXh0cyhUKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OkF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAw''@;'; put 'put ''MDBgLFQpLmNhdGNoKE89Pnt0aHJvdygwLG8ucHJlZml4TWVzc2FnZSkoTywiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHRzLiAiKX0pO3JldHVybihBJiZBLml0ZW1zP0EuaXRlbXM6W10pLm1hcChPPT4oe2NyZWF0ZWRCeTpPLmNyZWF0ZWRCeSxpZDpPLmlkLG5hbWU6Ty5u''@;'; put 'put ''YW1lLHZlcnNpb246Ty52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9KX1nZXRMYXVuY2hlckNvbnRleHRzKFQpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6QX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVy''@;'; put 'put ''bH0vbGF1bmNoZXIvY29udGV4dHM/bGltaXQ9MTAwMDBgLFQpLmNhdGNoKE89Pnt0aHJvdygwLG8ucHJlZml4TWVzc2FnZSkoTywiRXJyb3Igd2hpbGUgZ2V0dGluZyBsYXVuY2hlciBjb250ZXh0cy4gIil9KTtyZXR1cm4oQSYmQS5pdGVtcz9BLml0ZW1zOltdKS5tYXAoTz0+KHtjcmVhdGVk''@;'; put 'put ''Qnk6Ty5jcmVhdGVkQnksaWQ6Ty5pZCxuYW1lOk8ubmFtZSx2ZXJzaW9uOk8udmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkpfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoVCxBLE0sTyxELEUpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnZhbGlkYXRlQ29u''@;'; put 'put ''dGV4dE5hbWUoVCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFQsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLGBDb21wdXRlIGNvbnRleHQgJyR7VH0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0cyhEKSkuZmluZChaPT5aLm5hbWU9PT1UKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoYENvbXB1dGUgY29udGV4dCAnJHtUfScgYWxyZWFkeSBleGlzdHMuYCk7aWYoQSYmIXRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMuaW5jbHVkZXMoQSkmJiEoeWllbGQgdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKEQpKS5maW5kKFU9PlUubmFtZT09PUEpKXtjb25z''@;'; put 'put ''dCBVPWBUaGUgbGF1bmNoZXIgY29udGV4dCBmb3IgJHtBfWAsWD15aWVsZCB0aGlzLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChBLFUsImRpcmVjdCIsRCkuY2F0Y2gobmU9Pnt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICR7bmV9YCl9KTtp''@;'; put 'put ''ZighWHx8IVgubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuIik7QT1YLm5hbWV9bGV0IE49e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfTtNJiYoTj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sTikse3J1blNlcnZlckFz''@;'; put 'put ''Ok19KSk7Y29uc3QgSD17bmFtZTpULGxhdW5jaENvbnRleHQ6e2NvbnRleHROYW1lOkF8fCIifSxhdHRyaWJ1dGVzOk59O0UmJkUubGVuZ3RoP0guYXV0aG9yaXplZFVzZXJzPUU6SC5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAsTyYmKEguZW52aXJvbm1lbnQ9e2F1dG9FeGVj''@;'; put 'put ''TGluZXM6T30pO2NvbnN0e3Jlc3VsdDp6fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2AsSCxEKS5jYXRjaChaPT57dGhyb3coMCxvLnByZWZpeE1lc3NhZ2UpKFosIkVycm9yIHdoaWxlIGNyZWF0aW5nIGNvbXB1dGUg''@;'; put 'put ''Y29udGV4dC4gIil9KTtyZXR1cm4gen0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChULEEsTT0iZGlyZWN0IixPKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIVQpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIik7aWYodGhpcy5p''@;'; put 'put ''c0RlZmF1bHRDb250ZXh0KFQsdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cyxgTGF1bmNoZXIgY29udGV4dCAnJHtUfScgYWxyZWFkeSBleGlzdHMuYCksKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhPKSkuZmluZChOPT5OLm5hbWU9PT1UKSl0aHJvdyBuZXcgRXJyb3IoYExh''@;'; put 'put ''dW5jaGVyIGNvbnRleHQgJyR7VH0nIGFscmVhZHkgZXhpc3RzLmApO2NvbnN0IEI9e25hbWU6VCxkZXNjcmlwdGlvbjpBLGxhdW5jaFR5cGU6TX0se3Jlc3VsdDpGfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vbGF1bmNoZXIvY29udGV4dHNgLEIs''@;'; put 'put ''TykuY2F0Y2goTj0+e3Rocm93KDAsby5wcmVmaXhNZXNzYWdlKShOLCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiAiKX0pO3JldHVybiBGfSl9ZWRpdENvbXB1dGVDb250ZXh0KFQsQSxNKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0''@;'; put 'put ''IE87dGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFQpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChULHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRWRpdGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApLE89eWllbGQgdGhpcy5nZXRDb21wdXRl''@;'; put 'put ''Q29udGV4dEJ5TmFtZShULE0pLE98fChPPXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKEEuaWQsTSkpO2NvbnN0e3Jlc3VsdDpELGV0YWc6RX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke08uaWR9YCxN''@;'; put 'put ''KS5jYXRjaChCPT57dGhyb3cgQiYmNDA0PT09Qi5zdGF0dXM/bmV3IEVycm9yKGBUaGUgY29udGV4dCAnJHtUfScgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci5gKTpCfSk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wdXQoYC9jb21wdXRlL2NvbnRleHRzLyR7RC5pZH1g''@;'; put 'put ''LE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEQpLEEpLHthdHRyaWJ1dGVzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxELmF0dHJpYnV0ZXMpLEEuYXR0cmlidXRlcyl9KSxNLHsiSWYtTWF0Y2giOkV9KX0pfWdldENvbXB1dGVDb250ZXh0QnlO''@;'; put 'put ''YW1lKFQsQSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpNfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2ZpbHRlcj1lcShuYW1lLCAiJHtUfSIpYCxBKS5jYXRjaChP''@;'; put 'put ''PT57dGhyb3coMCxvLnByZWZpeE1lc3NhZ2UpKE8sIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IG5hbWUuICIpfSk7aWYoIU18fCFNLml0ZW1zfHwhTS5pdGVtcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGV4dCAnJHtUfScgd2FzIG5vdCBmb3VuZCBh''@;'; put 'put ''dCAnJHt0aGlzLnNlcnZlclVybH0nLmApO3JldHVybiBNLml0ZW1zWzBdfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKFQsQSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpNfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMu''@;'; put 'put ''c2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7VH1gLEEpLmNhdGNoKE89Pnt0aHJvdygwLG8ucHJlZml4TWVzc2FnZSkoTywiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgaWQuICIpfSk7cmV0dXJuIE19KX1nZXRFeGVjdXRhYmxlQ29udGV4dHMoVCxBKXtyZXR1''@;'; put 'put ''cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ok19PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgLEE/LmFjY2Vzc190b2tlbikuY2F0Y2goRj0+e3Rocm93KDAs''@;'; put 'put ''by5wcmVmaXhNZXNzYWdlKShGLCJFcnJvciB3aGlsZSBmZXRjaGluZyBjb21wdXRlIGNvbnRleHRzLiIpfSksTz1NLml0ZW1zfHxbXSxEPVtdLEU9Ty5tYXAoRj0+e2NvbnN0IE49WyIlcHV0ICY9c3lzdXNlcmlkOyJdO3JldHVybigpPT5UKGB0ZXN0LSR7Ri5uYW1lfWAsTixGLm5hbWUsQSxu''@;'; put 'put ''dWxsLCExLCEwLCEwKS5jYXRjaChIPT5IKX0pO2xldCBCPVtdO2Zvcihjb25zdCBGIG9mIEUpQi5wdXNoKHlpZWxkIEYoKSk7cmV0dXJuIEIuZm9yRWFjaCgoRixOKT0+e2lmKEYmJkYubG9nKXRyeXtsZXQgej0iIjtjb25zdCBaPUYubG9nLnNwbGl0KCJcbiIpLmZpbmQoVT0+VS5zdGFydHNX''@;'; put 'put ''aXRoKCJTWVNVU0VSSUQ9IikpO1omJih6PVoucmVwbGFjZSgiU1lTVVNFUklEPSIsIiIpLEQucHVzaCh7Y3JlYXRlZEJ5Ok9bTl0uY3JlYXRlZEJ5LGlkOk9bTl0uaWQsbmFtZTpPW05dLm5hbWUsdmVyc2lvbjpPW05dLnZlcnNpb24sYXR0cmlidXRlczp7c3lzVXNlcklkOnp9fSkpfWNhdGNo''@;'; put 'put ''KEgpe3Rocm93IEh9fSksRH0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KFQsQSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShUKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoVCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMs''@;'; put 'put ''IkRlbGV0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFsbG93ZWQuIiwhMCk7Y29uc3QgTz15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFQsQSk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoYCR7dGhpcy5zZXJ2ZXJVcmx9''@;'; put 'put ''L2NvbXB1dGUvY29udGV4dHMvJHtPLmlkfWAsQSl9KX12YWxpZGF0ZUNvbnRleHROYW1lKFQpe2lmKCFUKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpfWlzRGVmYXVsdENvbnRleHQoVCxBPXRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cyxNPSIiLE89ITEp''@;'; put 'put ''e2lmKEEuaW5jbHVkZXMoVCkpdGhyb3cgbmV3IEVycm9yKGAke019JHtPPyJcbkRlZmF1bHQgY29udGV4dHM6IitBLm1hcCgoRCxFKT0+YFxuJHtFKzF9LiAke0R9YCk6IiJ9YCl9fX0sODMwNjpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fYXdhaXRl''@;'; put 'put ''cnx8ZnVuY3Rpb24oTyxELEUsQil7cmV0dXJuIG5ldyhFfHwoRT1Qcm9taXNlKSkoZnVuY3Rpb24oTixIKXtmdW5jdGlvbiB6KEspe3RyeXtVKEIubmV4dChLKSl9Y2F0Y2goWCl7SChYKX19ZnVuY3Rpb24gWihLKXt0cnl7VShCLnRocm93KEspKX1jYXRjaChYKXtIKFgpfX1mdW5jdGlvbiBV''@;'; put 'put ''KEspe0suZG9uZT9OKEsudmFsdWUpOmZ1bmN0aW9uIEYoTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBFP046bmV3IEUoZnVuY3Rpb24oSCl7SChOKX0pfShLLnZhbHVlKS50aGVuKHosWil9VSgoQj1CLmFwcGx5KE8sRHx8W10pKS5uZXh0KCkpfSl9LGg9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1''@;'; put 'put ''bHR8fGZ1bmN0aW9uKE8pe3JldHVybiBPJiZPLl9fZXNNb2R1bGU/Tzp7ZGVmYXVsdDpPfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU0FTOUFwaUNsaWVudD12b2lkIDA7Y29uc3Qgbz1kKDc3NTcpLEk9aChkKDYyMzApKSxmPWQoNzk1KSxU''@;'; put 'put ''PWQoNTkyOCk7ai5TQVM5QXBpQ2xpZW50PWNsYXNzIEF7Y29uc3RydWN0b3IoRCxFLEIpe3RoaXMuc2VydmVyVXJsPUQsdGhpcy5qb2JzUGF0aD1FLEQmJigwLFQuaXNVcmwpKEQpLHRoaXMucmVxdWVzdENsaWVudD1uZXcgZi5TYXM5UmVxdWVzdENsaWVudChELEIpfWdldENvbmZpZygpe3Jl''@;'; put 'put ''dHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fXNldENvbmZpZyhEKXtEJiYodGhpcy5zZXJ2ZXJVcmw9RCl9ZXhlY3V0ZVNjcmlwdChELEUsQil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihFLEIsdGhp''@;'; put 'put ''cy5qb2JzUGF0aCk7Y29uc3QgTj1NKFsuLi5ELCJkYXRhIF9udWxsXzsiLCJmaWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRlZCBzYXNqcyBydW4nOyIsInJ1bjsiXS5qb2luKCJcbiIpKSxIPWAvVXNlciBGb2xkZXJzLyR7RX0vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmAsej0ibXVsdGlwYXJ0''@;'; put 'put ''L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitOLmdldEJvdW5kYXJ5KCksVT17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOnosIkNvbnRlbnQtTGVuZ3RoIjpOLmdldExlbmd0aFN5bmMoKSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0sSz1gJHt0''@;'; put 'put ''aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitIKyImX2RlYnVnPWxvZyJ9YDtyZXR1cm4oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoSyxOLHZvaWQgMCx6LFUpKS5yZXN1bHR9KX19O2NvbnN0IE09Tz0+e2NvbnN0IEQ9bmV3IEkuZGVmYXVsdCxFPWBzYXNqcy1leGVjdXRlLXNh''@;'; put 'put ''czktJHsoMCxvLmdlbmVyYXRlVGltZXN0YW1wKSgiIil9LnNhc2A7cmV0dXJuIEQuYXBwZW5kKEUsTyx7ZmlsZW5hbWU6RSxjb250ZW50VHlwZToidGV4dC9wbGFpbiJ9KSxEfX0sOTgyMTpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQxNTUpLGg9ZCg1MTA4KSxvPXRo''@;'; put 'put ''aXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihLLFgsbmUsc2Upe3JldHVybiBuZXcobmV8fChuZT1Qcm9taXNlKSkoZnVuY3Rpb24oX2UsbWUpe2Z1bmN0aW9uIEZlKHUpe3RyeXtzKHNlLm5leHQodSkpfWNhdGNoKHYpe21lKHYpfX1mdW5jdGlvbiBSKHUpe3RyeXtzKHNlLnRocm93KHUp''@;'; put 'put ''KX1jYXRjaCh2KXttZSh2KX19ZnVuY3Rpb24gcyh1KXt1LmRvbmU/X2UodS52YWx1ZSk6ZnVuY3Rpb24gaGUoX2Upe3JldHVybiBfZSBpbnN0YW5jZW9mIG5lP19lOm5ldyBuZShmdW5jdGlvbihtZSl7bWUoX2UpfSl9KHUudmFsdWUpLnRoZW4oRmUsUil9cygoc2U9c2UuYXBwbHkoSyxYfHxb''@;'; put 'put ''XSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oSyl7cmV0dXJuIEsmJksuX19lc01vZHVsZT9LOntkZWZhdWx0Okt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5TQVNWaXlhQXBpQ2xpZW50PXZv''@;'; put 'put ''aWQgMDtjb25zdCBmPWQoNTkyOCksVD1JKGQoNjIzMCkpLEE9ZCgxMzk1KSxNPWQoNjkwMyksTz1kKDY3MiksRD1kKDkwOTcpLEU9ZCg5Nzc4KSxCPWQoMTM0MyksRj1kKDcwNCksTj1kKDY0OTYpLEg9ZCgxNjIyKSx6PWQoMzU2OSksWj1kKDM2Nik7ai5TQVNWaXlhQXBpQ2xpZW50PWNsYXNz''@;'; put 'put ''IFV7Y29uc3RydWN0b3IoWCxuZSxzZSxoZSl7dGhpcy5zZXJ2ZXJVcmw9WCx0aGlzLnJvb3RGb2xkZXJOYW1lPW5lLHRoaXMuY29udGV4dE5hbWU9c2UsdGhpcy5yZXF1ZXN0Q2xpZW50PWhlLHRoaXMuX2RlYnVnPSExLHRoaXMuc2Vzc2lvbk1hbmFnZXI9bmV3IE0uU2Vzc2lvbk1hbmFnZXIo''@;'; put 'put ''dGhpcy5zZXJ2ZXJVcmwsdGhpcy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuY29udGV4dE1hbmFnZXI9bmV3IE8uQ29udGV4dE1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmZvbGRlck1hcD1uZXcgTWFwLHRoaXMuZmlsZUV4dGVu''@;'; put 'put ''c2lvbk1hcD1uZXcgTWFwLHRoaXMuYm9vbEV4dGVuc2lvbk1hcD0hMSxYJiYoMCxmLmlzVXJsKShYKX1hcHBlbmRSZXF1ZXN0KFgsbmUsc2Upe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFgsbmUsc2UpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWco''@;'; put 'put ''WCl7dGhpcy5fZGVidWc9WCx0aGlzLnNlc3Npb25NYW5hZ2VyJiYodGhpcy5zZXNzaW9uTWFuYWdlci5kZWJ1Zz1YKX1nZXRKb2JzSW5Gb2xkZXIoWCl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG5lPSgwLGYuaXNSZWxhdGl2ZVBhdGgpKFgpP2Ake3Ro''@;'; put 'put ''aXMucm9vdEZvbGRlck5hbWV9LyR7WH1gOlg7cmV0dXJuIHRoaXMuZm9sZGVyTWFwLmdldChuZSl8fCh5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKG5lKSksdGhpcy5mb2xkZXJNYXAuZ2V0KG5lKX0pfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwscm9v''@;'; put 'put ''dEZvbGRlck5hbWU6dGhpcy5yb290Rm9sZGVyTmFtZX19c2V0Q29uZmlnKFgsbmUpe1gmJih0aGlzLnNlcnZlclVybD1YKSxuZSYmKHRoaXMucm9vdEZvbGRlck5hbWU9bmUpfWdldENvbXB1dGVDb250ZXh0cyhYKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0''@;'; put 'put ''dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRzKFgpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhYKXtyZXR1cm4g''@;'; put 'put ''byh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0TGF1bmNoZXJDb250ZXh0cyhYKX0pfWdldEV4ZWN1dGFibGVDb250ZXh0cyhYKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbmU9''@;'; put 'put ''dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyk7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKG5lLFgpfSl9Y3JlYXRlU2Vzc2lvbihYLG5lKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0''@;'; put 'put ''OmhlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIsbmUpLF9lPWhlLml0ZW1zJiZoZS5pdGVtcy5sZW5ndGg/aGUuaXRlbXMuZmluZChGZT0+RmUubmFtZT09PVgpOm51bGw7aWYoIV9lKXRocm93IG5ldyBFcnJvcihgRXhlY3V0''@;'; put 'put ''aW9uIGNvbnRleHQgJHtYfSBub3QgZm91bmQuYCk7Y29uc3R7cmVzdWx0Om1lfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgL2NvbXB1dGUvY29udGV4dHMvJHtfZS5pZH0vc2Vzc2lvbnNgLHt9LG5lKTtyZXR1cm4gbWV9KX1jcmVhdGVDb21wdXRlQ29udGV4dChYLG5lLHNlLGhl''@;'; put 'put ''LF9lLG1lKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuY3JlYXRlQ29tcHV0ZUNvbnRleHQoWCxuZSxzZSxoZSxfZSxtZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoWCxuZSxzZT0iZGlyZWN0IixoZSl7''@;'; put 'put ''cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChYLG5lLHNlLGhlKX0pfWVkaXRDb21wdXRlQ29udGV4dChYLG5lLHNlKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KFgsbmUsc2UpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoWCxuZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRl''@;'; put 'put ''eHRNYW5hZ2VyLmRlbGV0ZUNvbXB1dGVDb250ZXh0KFgsbmUpfSl9ZXhlY3V0ZVNjcmlwdChYLG5lLHNlLGhlLF9lPW51bGwsbWU9ITEsRmU9ITEsUj0hMCxzLHU9ITEsdil7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLEguZXhlY3V0ZU9uQ29tcHV0''@;'; put 'put ''ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9sZGVyTmFtZSxYLG5lLHNlLGhlLF9lLG1lLEZlLFIscyx1LHYpfSl9Z2V0RmlsZUNvbnRlbnQoWCxuZSxzZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0''@;'; put 'put ''IGhlPXlpZWxkIHRoaXMuZ2V0RmlsZVVyaShYLG5lLHNlKS5jYXRjaChfZT0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShfZSxgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7bmV9IGluIGZvbGRlcjogJHtYfS4gYCl9KTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke2hlfS9jb250ZW50YCxzZSkudGhlbihfZT0+X2UucmVzdWx0KX0pfXVwZGF0ZUZpbGVDb250ZW50KFgsbmUsc2UsaGUpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBfZT15aWVsZCB0aGlzLmdldEZpbGVV''@;'; put 'put ''cmkoWCxuZSxoZSkuY2F0Y2goUj0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShSLGBFcnJvciB3aGlsZSBnZXR0aW5nIGZpbGUgVVJJIGZvcjogJHtuZX0gaW4gZm9sZGVyOiAke1h9LiBgKX0pLHtyZXN1bHQ6bWUsZXRhZzpGZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0''@;'; put 'put ''aGlzLnNlcnZlclVybH0ke19lfWAsaGUpO2lmKCFtZXx8IUZlKXRocm93IG5ldyBFcnJvcihgRmlsZSAke25lfSBkb2VzIG5vdCBoYXZlIGFuIEVUYWcsIG9yIHJlcXVlc3QgZmFpbGVkLmApO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucHV0KGAke3RoaXMuc2VydmVyVXJsfSR7''@;'; put 'put ''X2V9L2NvbnRlbnRgLHNlLGhlLHsiSWYtTWF0Y2giOkZlLCJDb250ZW50LVR5cGUiOm1lLmNvbnRlbnRUeXBlfSkudGhlbihSPT5SLnJlc3VsdCl9KX1nZXRGb2xkZXIoWCxuZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtYfWAsbmUpLnRoZW4oc2U9PnNlLnJlc3VsdCl9KX1jcmVhdGVGaWxlKFgsbmUsc2UsaGUsX2Upe3ZhciBtZTtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXNlJiYhaGUpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTshaGUmJnNlJiYoaGU9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoc2UsX2UpKTtjb25zdCBGZT17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQtRGlz''@;'; put 'put ''cG9zaXRpb24iOmBmaWxlbmFtZT0iJHtYfSI7YH0sUj1uZXcgVC5kZWZhdWx0O2xldCBzLHU7Ui5hcHBlbmQoImZpbGUiLG5lLFgpO2NvbnN0IHY9bnVsbD09PShtZT1YLnNwbGl0KCIuIikucG9wKCkpfHx2b2lkIDA9PT1tZT92b2lkIDA6bWUudG9Mb3dlckNhc2UoKTtpZih2KXt0aGlzLmJv''@;'; put 'put ''b2xFeHRlbnNpb25NYXB8fCgoeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL3R5cGVzL3R5cGVzP2xpbWl0PTk5OTk5OSIsX2UpKS5yZXN1bHQuaXRlbXMuZmlsdGVyKHk9PnkuZXh0ZW5zaW9ucykuZm9yRWFjaCh5PT57dmFyIGw7bnVsbD09PShsPXkuZXh0ZW5zaW9ucyl8fHZvaWQg''@;'; put 'put ''MD09PWx8fGwuZm9yRWFjaChiPT57dGhpcy5maWxlRXh0ZW5zaW9uTWFwLnNldChiLHt0eXBlRGVmTmFtZTp5Lm5hbWUmJnkubmFtZS50cmltKCkubGVuZ3RoP3kubmFtZS50cmltKCk6dm9pZCAwLHByb3BlcnRpZXM6eS5wcm9wZXJ0aWVzfSl9KX0pLHRoaXMuYm9vbEV4dGVuc2lvbk1hcD0h''@;'; put 'put ''MCk7Y29uc3QgXz10aGlzLmZpbGVFeHRlbnNpb25NYXAuZ2V0KHYpO18mJihzPV8udHlwZURlZk5hbWUsXy5wcm9wZXJ0aWVzJiYodT17bmFtZTpYLHByb3BlcnRpZXM6Xy5wcm9wZXJ0aWVzfSkpfWNvbnN0IHA9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9maWxlcy9maWxlcz9w''@;'; put 'put ''YXJlbnRGb2xkZXJVcmk9JHtoZX0mdHlwZURlZk5hbWU9JHtzPz8iZmlsZSJ9I3Jhd1VwbG9hZGAsUixfZSwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitSLl9ib3VuZGFyeSxGZSk7aWYodSl0cnl7Y29uc3QgXz17QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiSWYtTWF0Y2gi''@;'; put 'put ''OiIqIn0saz1wLnJlc3VsdC5saW5rcy5maWx0ZXIoTD0+IlBBVENIIj09TC5tZXRob2QmJiJwYXRjaCI9PUwucmVsKVswXS51cmk7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wYXRjaChgJHtrfWAsdSxfZSxfKSkucmVzdWx0fWNhdGNoKF8pe3Rocm93IG5ldyBFcnJvcihgRXJy''@;'; put 'put ''b3IgcGF0Y2hpbmcgZmlsZSAke1h9LlxuJHtfLm1lc3NhZ2V9YCl9cmV0dXJuIHAucmVzdWx0fSl9Y3JlYXRlRm9sZGVyKFgsbmUsc2UsaGUsX2Upe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT1TLmxvZ2dlcnx8aDtpZighbmUmJiFzZSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO2lmKCFzZSYmbmUpaWYoc2U9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobmUsaGUpKXtpZihfZSl7Y29uc3QgUj1uZSsiLyIrWDsoeWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoUixoZSkpJiYo''@;'; put 'put ''eWllbGQgdGhpcy5kZWxldGVGb2xkZXIobmUrIi8iK1gsaGUpKX19ZWxzZXttZS5pbmZvKGBQYXJlbnQgZm9sZGVyIGF0IHBhdGggJyR7bmV9JyBpcyBub3QgcHJlc2VudC5gKTtjb25zdCBSPW5lLnN1YnN0cmluZygwLG5lLmxhc3RJbmRleE9mKCIvIikpLHM9YCR7bmUuc3BsaXQoIi8iKS5w''@;'; put 'put ''b3AoKX1gO2lmKCIiPT09Uil0aHJvdyBuZXcgQS5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihuZSx0aGlzLnNlcnZlclVybCxoZSk7bWUuaW5mbyhgQ3JlYXRpbmcgcGFyZW50IGZvbGRlcjpcbicke3N9JyBpbiAnJHtSfSdgKTtjb25zdCB1PXlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKHMsUix2''@;'; put 'put ''b2lkIDAsaGUpO21lLmluZm8oYFBhcmVudCBmb2xkZXIgJyR7c30nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLmApLHNlPWAvZm9sZGVycy9mb2xkZXJzLyR7dS5pZH1gfWNvbnN0e3Jlc3VsdDpGZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9mb2xkZXJzL2ZvbGRl''@;'; put 'put ''cnM/cGFyZW50Rm9sZGVyVXJpPSR7c2V9YCx7bmFtZTpYLHR5cGU6ImZvbGRlciJ9LGhlKS5jYXRjaChSPT57Y29uc3R7bWVzc2FnZTpzLHJlc3BvbnNlOnV9PVI7aWYocyYmdSYmdS5kYXRhJiZ1LmRhdGEubWVzc2FnZSl7Y29uc3R7c3RhdHVzOnZ9PXUse21lc3NhZ2U6cH09dS5kYXRhLF89''@;'; put 'put ''W3MscF0ubWFwKEw9Pi9cLiQvLnRlc3QoTCk/TDpgJHtMfS5gKTt0aHJvdyFfZSYmNDA5PT09diYmXy5wdXNoKCdUbyBvdmVycmlkZSwgcGxlYXNlIHNldCAiaXNGb3JjZWQiIHRvICJ0cnVlIi4nKSxfLmpvaW4oIiAiKX10aHJvdyBSfSk7cmV0dXJuIHlpZWxkIHRoaXMucG9wdWxhdGVGb2xk''@;'; put 'put ''ZXJNYXAoYCR7bmV9LyR7WH1gLGhlKSxGZX0pfWNyZWF0ZUpvYkRlZmluaXRpb24oWCxuZSxzZSxoZSxfZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFzZSYmIWhlKXRocm93IG5ldyBFcnJvcigiUGF0aCB0byBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xk''@;'; put 'put ''ZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJuIWhlJiZzZSYmKGhlPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKHNlLF9lKSkseWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkRlZmluaXRpb25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0ke2hl''@;'; put 'put ''fWAse25hbWU6WCxwYXJhbWV0ZXJzOlt7bmFtZToiX2FkZGplc2JlZ2luZW5kbWFjcm9zIix0eXBlOiJDSEFSQUNURVIiLGRlZmF1bHRWYWx1ZToiZmFsc2UifV0sdHlwZToiQ29tcHV0ZSIsY29kZTpuZX0sX2UpfSl9Z2V0QXV0aENvZGUoWCl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2NvbnN0IG5lPWAke3RoaXMuc2VydmVyVXJsfS9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSR7WH0mcmVzcG9uc2VfdHlwZT1jb2RlYDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChuZSx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVu''@;'; put 'put ''KGhlPT5oZS5yZXN1bHQpLnRoZW4oaGU9Pm8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBfZT0iIjtpZigoMCxELmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKShoZSkpe2NvbnN0IEZlPSh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuYXV0aG9yaXplKGhlKSkuc3BsaXQoIjxi''@;'; put 'put ''b2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gUi5pbm5lckhUTUw9RmUsX2U9Ui5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCxfZX17Y29uc3QgbWU9aGUuc3BsaXQoIjxib2R5PiIpWzFdLnNw''@;'; put 'put ''bGl0KCI8L2JvZHk+IilbMF0sRmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIEZlLmlubmVySFRNTD1tZSxGZSYmKF9lPUZlLnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0KSxfZX19KSkuY2F0Y2goKCk9Pm51bGwpfSl9Z2V0QWNjZXNzVG9rZW4o''@;'; put 'put ''WCxuZSxzZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLHouZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsWCxuZSxzZSl9KX1yZWZyZXNoVG9rZW5zKFgsbmUsc2Upe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtyZXR1cm4oMCxaLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsWCxuZSxzZSl9KX1kZWxldGVDbGllbnQoWCxuZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHNlPXRoaXMuc2VydmVyVXJsK2Avb2F1dGgv''@;'; put 'put ''Y2xpZW50cy8ke1h9YDtyZXR1cm4oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShzZSxuZSkpLnJlc3VsdH0pfWV4ZWN1dGVDb21wdXRlSm9iKFgsbmUsc2UsaGUsX2UsbWU9ITAsRmU9ITEsUixzPSExLHUpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXts''@;'; put 'put ''ZXQgdj0oX2V8fHt9KS5hY2Nlc3NfdG9rZW47aWYoX2UmJih7YWNjZXNzX3Rva2VuOnZ9PXlpZWxkKDAsRi5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxfZSkpLCgwLGYuaXNSZWxhdGl2ZVBhdGgpKFgpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0''@;'; put 'put ''aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUiKTtjb25zdCBwPVguc3BsaXQoIi8iKSxfPXAucG9wKCksaz1wLmpvaW4oIi8iKSxMPSgwLGYuaXNSZWxhdGl2ZVBhdGgpKFgpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7a31g''@;'; put 'put ''Oms7eWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChMLHYpLmNhdGNoKEc9Pnt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoRywiRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmb2xkZXIgbWFwLiAiKX0pO2NvbnN0IHk9dGhpcy5mb2xkZXJNYXAuZ2V0KEwpO2lmKCF5KXRocm93IG5ldyBFcnJv''@;'; put 'put ''cihgVGhlIGZvbGRlciAnJHtMfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nYCk7Y29uc3QgbD15Py5maW5kKEc9PkcubmFtZT09PV8pO2lmKCFsKXRocm93IG5ldyBFcnJvcigiSm9iIHdhcyBub3QgZm91bmQuIik7bGV0IGI9bD8uY29kZTtpZighYil7Y29uc3QgRz1s''@;'; put 'put ''Py5saW5rcy5maW5kKHBlPT4iZ2V0UmVzb3VyY2UiPT09cGUucmVsKTtpZighRyl0aHJvdyBuZXcgRXJyb3IoIlVSSSBvZiBqb2IgZGVmaW5pdGlvbiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0e3Jlc3VsdDpRfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJs''@;'; put 'put ''fSR7Ry5ocmVmfWAsdikuY2F0Y2gocGU9Pnt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkocGUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSk7Yj1RLmNvZGUsbC5jb2RlPWJ9Ynx8KGI9IiIpO2NvbnN0IHE9Yi5yZXBsYWNlKC9cclxuL2csIlxuIikuc3BsaXQoIlxu''@;'; put 'put ''Iik7cmV0dXJuIHlpZWxkIHRoaXMuZXhlY3V0ZVNjcmlwdChYLHEsbmUsX2UsaGUsc2UsRmUsbWUsUixzLHUpfSl9ZXhlY3V0ZUpvYihYLG5lLHNlLGhlLF9lKXt2YXIgbWUsRmUsUjtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHM9KF9lfHx7fSkuYWNjZXNz''@;'; put 'put ''X3Rva2VuO2lmKF9lJiYoe2FjY2Vzc190b2tlbjpzfT15aWVsZCgwLEYuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsX2UpKSwoMCxmLmlzUmVsYXRpdmVQYXRoKShYKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUg''@;'; put 'put ''dXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lLiIpO2NvbnN0IHU9WC5zcGxpdCgiLyIpLHY9dS5wb3AoKSxwPXUuam9pbigiLyIpLF89KDAsZi5pc1JlbGF0aXZlUGF0aCkoWCk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtwfWA6cDt5aWVsZCB0aGlzLnBvcHVs''@;'; put 'put ''YXRlRm9sZGVyTWFwKF8scyk7Y29uc3Qgaz10aGlzLmZvbGRlck1hcC5nZXQoXyk7aWYoIWspdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke199JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfScuYCk7Y29uc3QgTD1rPy5maW5kKGtlPT5rZS5uYW1lPT09dik7bGV0''@;'; put 'put ''IHk9W107aWYoaGUmJk9iamVjdC5rZXlzKGhlKS5sZW5ndGgmJih5PXlpZWxkIHRoaXMudXBsb2FkVGFibGVzKGhlLHMpKSwhTCl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0IGw9bnVsbD09PShtZT1MPy5saW5rcy5maW5kKGtlPT4iZ2V0UmVzb3VyY2UiPT09''@;'; put 'put ''a2UucmVsKSl8fHZvaWQgMD09PW1lP3ZvaWQgMDptZS5ocmVmLHtyZXN1bHQ6Yn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke2x9YCxzKSxxPXtfY29udGV4dE5hbWU6bmUsX3Byb2dyYW06YCR7X30vJHt2fWAsX3dlYmluX2ZpbGVfY291bnQ6eS5s''@;'; put 'put ''ZW5ndGgsX09NSVRKU09OTElTVElORzohMCxfT01JVEpTT05MT0c6ITAsX29taXRTZXNzaW9uUmVzdWx0czohMSxfT01JVFRFWFRMSVNUSU5HOiEwLF9PTUlUVEVYVExPRzohMH07c2UmJihxLl9PTUlUVEVYVExPRz0iZmFsc2UiLHEuX29taXRTZXNzaW9uUmVzdWx0cz0iZmFsc2UiLHEuX0RF''@;'; put 'put ''QlVHPTEzMSkseS5mb3JFYWNoKChrZSx4ZSk9PntxW2Bfd2ViaW5fZmlsZXVyaSR7eGUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7a2UuZmlsZS5pZH1gLHFbYF93ZWJpbl9uYW1lJHt4ZSsxfWBdPWtlLnRhYmxlTmFtZX0pO2NvbnN0IEc9e307Zm9yKGNvbnN0IGtlIG9mIE9iamVjdC5rZXlzKHEp''@;'; put 'put ''KUdba2VdPVN0cmluZyhxW2tlXSk7Y29uc3QgUT17bmFtZTpgZXhlYy0ke3Z9YCxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpiLGFyZ3VtZW50czpHfSx7cmVzdWx0OnBlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVy''@;'; put 'put ''bH0vam9iRXhlY3V0aW9uL2pvYnM/X2FjdGlvbj13YWl0YCxRLHMpLFBlPXlpZWxkIHRoaXMucG9sbEpvYlN0YXRlKHBlLF9lKS5jYXRjaChrZT0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShrZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pLHtyZXN1bHQ6WmV9PXlp''@;'; put 'put ''ZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2JzLyR7cGUuaWR9YCxzKTtsZXQgcWUsdmU7Y29uc3QgdWU9WmUucmVzdWx0c1siX3dlYm91dC5qc29uIl0semU9WmUubGlua3MuZmluZChrZT0+ImxvZyI9PT1rZS5yZWwpO2lmKHVl''@;'; put 'put ''JiYocWU9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3VlfS9jb250ZW50YCxzLCJ0ZXh0L3BsYWluIikpLHNlJiZ6ZSYmKHZlPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt6ZS5ocmVmfS9jb250ZW50YCxz''@;'; put 'put ''KS50aGVuKGtlPT5rZS5yZXN1bHQuaXRlbXMubWFwKHhlPT54ZS5saW5lKS5qb2luKCJcbiIpKSksImZhaWxlZCI9PT1QZSl0aHJvdyBuZXcgQS5Kb2JFeGVjdXRpb25FcnJvcihudWxsPT09KEZlPVplLmVycm9yKXx8dm9pZCAwPT09RmU/dm9pZCAwOkZlLmVycm9yQ29kZSxudWxsPT09KFI9''@;'; put 'put ''WmUuZXJyb3IpfHx2b2lkIDA9PT1SP3ZvaWQgMDpSLm1lc3NhZ2UsdmUpO2NvbnN0IE9lPXtyZXN1bHQ6cWU/LnJlc3VsdCxsb2c6dmV9LHtlcnJvcjpDZX09WmU7cmV0dXJuIENlJiYoT2UuZXJyb3I9Q2UpLE9lfSl9cG9wdWxhdGVGb2xkZXJNYXAoWCxuZSl7cmV0dXJuIG8odGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHNlPSgwLGYuaXNSZWxhdGl2ZVBhdGgpKFgpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7WH1gOlg7aWYodGhpcy5mb2xkZXJNYXAuZ2V0KHNlKSlyZXR1cm47Y29uc3QgaGU9Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK3NlLHty''@;'; put 'put ''ZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7aGV9YCxuZSkuY2F0Y2goUj0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShSLCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KTtpZighX2UpdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCAke3NlfSBkb2Vz''@;'; put 'put ''IG5vdCBleGlzdCBvbiAke3RoaXMuc2VydmVyVXJsfWApO2NvbnN0e3Jlc3VsdDptZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy8ke19lLmlkfS9tZW1iZXJzP2xpbWl0PSR7X2UubWVtYmVyQ291bnQ8NTAwPzUwMDpfZS5tZW1iZXJDb3VudH1gLG5l''@;'; put 'put ''KS5jYXRjaChSPT57dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFIsIkVycm9yIHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KTt0aGlzLmZvbGRlck1hcC5zZXQoc2UsbWUuaXRlbXMpfSl9cG9sbEpvYlN0YXRlKFgsbmUsc2Upe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtyZXR1cm4oMCxCLnBvbGxKb2JTdGF0ZSkodGhpcy5yZXF1ZXN0Q2xpZW50LFgsdGhpcy5kZWJ1ZyxuZSxzZSl9KX11cGxvYWRUYWJsZXMoWCxuZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLE4udXBsb2FkVGFibGVzKSh0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQsWCxuZSl9KX1nZXRGb2xkZXJEZXRhaWxzKFgsbmUpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBzZT0oMCxmLmlzVXJpKShYKT9YOmAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtYfWAse3Jlc3VsdDpoZX09eWllbGQgdGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3NlfWAsbmUpLmNhdGNoKF9lPT57aWYoX2UgaW5zdGFuY2VvZiBBLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgX2U7cmV0dXJue3Jlc3VsdDpudWxsfX0pO2lmKGhlKXJldHVybiBoZX0pfWdldEZvbGRlclVyaShYLG5lKXtyZXR1''@;'; put 'put ''cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qgc2U9eWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKFgsbmUpO2lmKHNlKXJldHVybmAvZm9sZGVycy9mb2xkZXJzLyR7c2UuaWR9YH0pfWdldEZpbGVVcmkoWCxuZSxzZSl7dmFyIGhlO3JldHVybiBvKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBfZT15aWVsZCB0aGlzLmxpc3RGb2xkZXIoWCxzZSwxZTMse3JldHVybkRldGFpbHM6ITB9KS5jYXRjaChGZT0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShGZSxgRXJyb3Igd2hpbGUgbGlzdGluZyBmb2xkZXI6ICR7WH0uIGApfSk7aWYo''@;'; put 'put ''IV9lfHwhX2UubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTm8gbWVtYmVycyBmb3VuZCBpbiBmb2xkZXI6ICR7WH1gKTtjb25zdCBtZT1udWxsPT09KGhlPV9lLmZpbmQoRmU9PkZlLm5hbWU9PT1uZSkpfHx2b2lkIDA9PT1oZT92b2lkIDA6aGUudXJpO2lmKCFtZSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''YEZpbGUgJHtuZX0gbm90IGZvdW5kIGluIGZvbGRlcjogJHtYfWApO3JldHVybiBtZX0pfWdldFJlY3ljbGVCaW5VcmkoWCl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlz''@;'; put 'put ''LnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BteVJlY3ljbGVCaW5gLFgpLmNhdGNoKGhlPT57aWYoaGUgaW5zdGFuY2VvZiBBLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgaGU7cmV0dXJue3Jlc3VsdDpudWxsfX0pO2lmKHNlKXJldHVybmAvZm9sZGVycy9mb2xkZXJzLyR7c2UuaWR9YH0p''@;'; put 'put ''fWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFgsbmUpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShYLG5lKX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChYLG5lKXty''@;'; put 'put ''ZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFgsbmUpfSl9bGlzdEZvbGRlcihYLG5lLHNlPTIwLGhlKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7Y29uc3QgX2U9KDAsZi5pc1VyaSkoWCk/WDp5aWVsZCB0aGlzLmdldEZvbGRlclVyaShYLG5lKSx7cmVzdWx0Om1lfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7X2V9L21lbWJlcnM/bGltaXQ9JHtzZX1gLG5lKTtsZXQgRmU9W107cmV0dXJu''@;'; put 'put ''IG1lJiZtZS5pdGVtcyYmKEZlPWhlPy5yZXR1cm5EZXRhaWxzP21lLml0ZW1zOm1lLml0ZW1zLm1hcChSPT5SLm5hbWUpKSxGZX0pfW1vdmVGb2xkZXIoWCxuZSxzZSxoZSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPVguc3BsaXQoIi8iKS5wb3Ao''@;'; put 'put ''KTtpZih5aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMobmUsaGUpKXNlPV9lO2Vsc2V7bGV0IHY9bmUuc3BsaXQoIi8iKTt2LnNwbGljZSh2Lmxlbmd0aC0xLDEpLG5lPXYuam9pbigiLyIpfWNvbnN0IEZlPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKFgsaGUpLFI9eWllbGQgdGhpcy5nZXRG''@;'; put 'put ''b2xkZXJVcmkobmUsaGUpO2lmKCFGZSlyZXR1cm47Y29uc3Qgcz1GZT8uc3BsaXQoIi8iKS5wb3AoKSx7cmVzdWx0OnV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wYXRjaChgJHt0aGlzLnNlcnZlclVybH0ke0ZlfWAse2lkOnMsbmFtZTpzZSxwYXJlbnRGb2xkZXJVcmk6Un0saGUpLmNh''@;'; put 'put ''dGNoKHY9Pnt0aHJvdyB2LmNvZGUmJiJFTk9URk9VTkQiPT09di5jb2RlP3tib2R5OnttZXNzYWdlOmBGb2xkZXIgJyR7WC5zcGxpdCgiLyIpLnBvcCgpfScgd2FzIG5vdCBmb3VuZC5gfX06dn0pO3JldHVybiB1fHx2b2lkIDB9KX1kZWxldGVGb2xkZXIoWCxuZSl7cmV0dXJuIG8odGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHNlPXlpZWxkIHRoaXMuZ2V0UmVjeWNsZUJpblVyaShuZSksaGU9WC5zcGxpdCgiLyIpLnBvcCgpfHwiIixfZT1uZXcgRGF0ZSxGZT1oZSsiICIrX2UudG9Mb2NhbGVEYXRlU3RyaW5nKCkrIiAiK19lLnRvTG9jYWxlVGltZVN0cmluZygp''@;'; put 'put ''O3JldHVybiB5aWVsZCB0aGlzLm1vdmVGb2xkZXIoWCxzZSxGZSxuZSl9KX19fSw1OTU2OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEgseixaKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihL''@;'; put 'put ''LFgpe2Z1bmN0aW9uIG5lKF9lKXt0cnl7aGUoWi5uZXh0KF9lKSl9Y2F0Y2gobWUpe1gobWUpfX1mdW5jdGlvbiBzZShfZSl7dHJ5e2hlKFoudGhyb3coX2UpKX1jYXRjaChtZSl7WChtZSl9fWZ1bmN0aW9uIGhlKF9lKXtfZS5kb25lP0soX2UudmFsdWUpOmZ1bmN0aW9uIFUoSyl7cmV0dXJu''@;'; put 'put ''IEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oWCl7WChLKX0pfShfZS52YWx1ZSkudGhlbihuZSxzZSl9aGUoKFo9Wi5hcHBseShOLEh8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgaD1kKDU5Mjgp''@;'; put 'put ''LG89ZCgxMjMwKSxJPWQoOTgyMSksZj1kKDgzMDYpLFQ9ZCgzNDY3KSxBPWQoMTUyNyksTT1kKDM5MDApLE89ZCg0NTg4KSxEPWQoMzYwMiksRT1kKDgyMTcpLEI9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9j''@;'; put 'put ''ZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6TS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFw''@;'; put 'put ''aTpudWxsLGxvZ2luTWVjaGFuaXNtOm8uTG9naW5NZWNoYW5pc20uRGVmYXVsdH07ai5kZWZhdWx0PWNsYXNzIEZ7Y29uc3RydWN0b3IoSCl7dGhpcy5zYXNqc0NvbmZpZz1uZXcgby5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRoaXMu''@;'; put 'put ''c2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51bGws''@;'; put 'put ''dGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+Uyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHosWixVLEssWDt5aWVsZCBu''@;'; put 'put ''dWxsPT09KHo9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PXo/dm9pZCAwOnoucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShaPXRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Wj92b2lkIDA6Wi5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVs''@;'; put 'put ''ZCBudWxsPT09KFU9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PVU/dm9pZCAwOlUucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShLPXRoaXMuZmlsZVVwbG9hZGVyKXx8dm9pZCAwPT09Sz92b2lkIDA6Sy5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBu''@;'; put 'put ''dWxsPT09KFg9dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09WD92b2lkIDA6WC5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKX0pLHRoaXMuc2V0VmVyYm9zZU1vZGU9ej0+e3ZhciBaO251bGw9PT0oWj10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1afHxaLnNldFZlcmJvc2VN''@;'; put 'put ''b2RlKHopfSx0aGlzLnNhc2pzQ29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxCKSxIKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpfWdldENzcmZUb2tlbihIPSJnZW5lcmFsIil7dmFyIHo7cmV0dXJuIG51bGw9PT0oej10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9''@;'; put 'put ''PT16P3ZvaWQgMDp6LmdldENzcmZUb2tlbihIKX1leGVjdXRlU2NyaXB0KHtsaW5lc09mQ29kZTpILGZpbGVOYW1lOnosY29udGV4dE5hbWU6WixydW5UaW1lOlUsYXV0aENvbmZpZzpLLGF1dGhDb25maWdTYXM5OlgsZGVidWc6bmV9KXt2YXIgc2UsaGU7cmV0dXJuIFModGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtNLlNlcnZlclR5cGUuU2FzOSxNLlNlcnZlclR5cGUuU2FzanMsTS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUu''@;'; put 'put ''U2FzOSl7aWYoIVgpdGhyb3cgbmV3IEVycm9yKCJBdXRoIGNvbmZpZyBmb3Igc2FzOSBpcyBub3QgcHJvdmlkZWQiKTtyZXR1cm4geWllbGQgbnVsbD09PShzZT10aGlzLnNhczlBcGlDbGllbnQpfHx2b2lkIDA9PT1zZT92b2lkIDA6c2UuZXhlY3V0ZVNjcmlwdChILFgudXNlck5hbWUsWC5w''@;'; put 'put ''YXNzd29yZCl9aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09TS5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB5aWVsZCBudWxsPT09KGhlPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1oZT92b2lkIDA6aGUuZXhlY3V0ZVNjcmlwdChILmpvaW4oIlxuIiksVSxLKTtpZih0''@;'; put 'put ''aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUuU2FzVml5YSl7aWYoIShaPVp8fHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4g''@;'; put 'put ''eW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7aWYoIXopdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5hbWUgaXMgcmVxdWlyZWQgaW4gY2FzZSBvZiBTQVMgVklZQS4gUGxlYXNlIHByb3ZpZGUgYSBgZmlsZU5hbWVgLiIpO3JldHVybiB5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQu''@;'; put 'put ''ZXhlY3V0ZVNjcmlwdCh6LEgsWixLLG51bGwsbmV8fHRoaXMuc2FzanNDb25maWcuZGVidWcpfX0pfWV4ZWN1dGVKb2IoSCx6LFope3ZhciBVO3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlw''@;'; put 'put ''dCIsW00uU2VydmVyVHlwZS5TYXNqc10pLHlpZWxkIG51bGw9PT0oVT10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09VT92b2lkIDA6VS5leGVjdXRlSm9iKEgseixaKX0pfWdldENvbXB1dGVDb250ZXh0cyhIKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0cyIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0cyhIKX0pfWdldExhdW5jaGVyQ29udGV4dHMoSCl7cmV0dXJuIFModGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRMYXVuY2hlckNvbnRleHRzIixbTS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0TGF1bmNoZXJDb250ZXh0cyhIKX0pfWdldERlZmF1bHRD''@;'; put 'put ''b21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cyIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKX1nZXRFeGVjdXRhYmxlQ29u''@;'; put 'put ''dGV4dHMoSCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRFeGVjdXRhYmxlQ29udGV4dHMiLFtNLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRFeGVjdXRh''@;'; put 'put ''YmxlQ29udGV4dHMoSCl9KX1jcmVhdGVDb21wdXRlQ29udGV4dChILHosWixVLEssWCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVDb21wdXRlQ29udGV4dCIsW00uU2VydmVyVHlwZS5TYXNWaXlh''@;'; put 'put ''XSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUNvbXB1dGVDb250ZXh0KEgseixaLFUsSyxYKX0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChILHosWixVKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0''@;'; put 'put ''ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dChILHosWixVKX0pfWVkaXRDb21wdXRlQ29udGV4dChILHosWil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJlZGl0Q29tcHV0ZUNvbnRleHQiLFtNLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5lZGl0Q29tcHV0ZUNvbnRleHQoSCx6LFopfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQo''@;'; put 'put ''SCx6KXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbTS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNv''@;'; put 'put ''bnRleHQoSCx6KX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKEgseil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWll''@;'; put 'put ''bGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEgseil9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoSCx6KXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVD''@;'; put 'put ''b250ZXh0QnlJZCIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZChILHopfSl9Y3JlYXRlU2Vzc2lvbihILHope3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24oSCx6KX0pfWNyZWF0ZUZvbGRlcihILHosWixVLEssWCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiBLP3lpZWxkIEsuY3JlYXRlRm9sZGVyKEgseixaLFUsWCk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUZvbGRlcihILHosWixVLFgpfSl9Y3JlYXRlRmlsZShILHosWixVLEssWCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp''@;'; put 'put ''e3JldHVybiBYP3lpZWxkIFguY3JlYXRlRmlsZShILHosWixVLEspOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGaWxlKEgseixaLFUsSyl9KX1nZXRGaWxlQ29udGVudChILHosWil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlz''@;'; put 'put ''LmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRGaWxlQ29udGVudCIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZpbGVDb250ZW50KEgseixaKX0pfXVwZGF0ZUZpbGVDb250ZW50KEgseixaLFUpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgidXBkYXRlRmlsZUNvbnRlbnQiLFtNLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC51cGRhdGVGaWxlQ29udGVudChILHosWixVKX0pfWdldEZvbGRlcihILHope3JldHVy''@;'; put 'put ''biBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbTS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKEgseil9KX1kZWxldGVGb2xkZXIoSCx6KXt2''@;'; put 'put ''YXIgWjtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUZvbGRlciIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShaPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PVo/''@;'; put 'put ''dm9pZCAwOlouZGVsZXRlRm9sZGVyKEgseil9KX1saXN0Rm9sZGVyKEgseixaLFU9ITEpe3ZhciBLO3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZvbGRlciIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSks''@;'; put 'put ''eWllbGQgbnVsbD09PShLPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUs/dm9pZCAwOksubGlzdEZvbGRlcihILHosWix7cmV0dXJuRGV0YWlsczpVfSl9KX1tb3ZlRm9sZGVyKEgseixaLFUpe3ZhciBLO3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibW92ZUZvbGRlciIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShLPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUs/dm9pZCAwOksubW92ZUZvbGRlcihILHosWixVKX0pfWNyZWF0ZUpvYkRlZmluaXRp''@;'; put 'put ''b24oSCx6LFosVSxLLFgpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlSm9iRGVmaW5pdGlvbiIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSksWD95aWVsZCBYLmNyZWF0ZUpvYkRlZmluaXRpb24oSCx6''@;'; put 'put ''LFosVSxLKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlSm9iRGVmaW5pdGlvbihILHosWixVLEspfSl9Z2V0QXV0aENvZGUoSCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBdXRoQ29k''@;'; put 'put ''ZSIsW00uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEF1dGhDb2RlKEgpfSl9Z2V0QWNjZXNzVG9rZW4oSCx6LFope3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgi''@;'; put 'put ''Z2V0QWNjZXNzVG9rZW4iLFtNLlNlcnZlclR5cGUuU2FzVml5YSxNLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihILFopOnlpZWxkIHRoaXMu''@;'; put 'put ''c2FzVml5YUFwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihILHosWil9KX1yZWZyZXNoVG9rZW5zKEgseixaKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtNLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''Vml5YSxNLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKFopOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKEgseixa''@;'; put 'put ''KX0pfWRlbGV0ZUNsaWVudChILHope3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlQ2xpZW50IixbTS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRl''@;'; put 'put ''Q2xpZW50KEgseil9KX1nZXRTYXNqc0NvbmZpZygpe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnfWdldFVzZXJOYW1lKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIudXNlck5hbWV9c2V0U0FTanNDb25maWcoSCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMu''@;'; put 'put ''c2FzanNDb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLEgpLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9KX1zZXREZWJ1Z1N0YXRlKEgpe3RoaXMuc2FzanNDb25maWcuZGVidWc9SCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQmJih0aGlzLnNh''@;'; put 'put ''c1ZpeWFBcGlDbGllbnQuZGVidWc9SCl9Y2hlY2tTZXNzaW9uKCl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmNoZWNrU2Vzc2lvbigpfSl9bG9nSW4oSCx6LFosVT17fSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5NZWNoYW5pc209PT1vLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHQpe2lmKCFIfHwheil0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxv''@;'; put 'put ''Z2luIG1lY2hhbmlzbS4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dJbihILHopfWlmKHR5cGVvZiB3aW5kb3c+InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7''@;'; put 'put ''cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKFUpfSl9bG9nT3V0KCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9dXBsb2FkRmlsZShILHosWixVPXt9LEspe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtVPU9iamVjdC5hc3Np''@;'; put 'put ''Z24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxVKTtjb25zdCBYPXtmaWxlczp6LHBhcmFtczpafTtyZXR1cm4geWllbGQgdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZShILFgsVSxLKX0pfXJlcXVlc3QoSCx6LFo9e30sVSxLLFg9W10pe3JldHVybiBTKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtaPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxaKTtjb25zdCBuZT0oMCxoLnZhbGlkYXRlSW5wdXQpKHopO3JldHVybiBuZS5zdGF0dXM/Wi5zZXJ2ZXJUeXBlPT09TS5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRo''@;'; put 'put ''aXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKEgseixaLFUsSyxYKTpaLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUuU2FzVml5YSYmbnVsbCE9Wi51c2VDb21wdXRlQXBpP1oudXNlQ29tcHV0ZUFwaT95aWVsZCB0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKEgseixaLFUsSyk6''@;'; put 'put ''KFouY29udGV4dE5hbWV8fChaPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxaKSx7Y29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9KSkseWllbGQgdGhpcy5qZXNKb2JFeGVjdXRvci5leGVjdXRlKEgseixaLFUsSyxYKSk6Wi5zZXJ2ZXJUeXBl''@;'; put 'put ''PT09TS5TZXJ2ZXJUeXBlLlNhczkmJloudXNlcm5hbWUmJloucGFzc3dvcmQ/eWllbGQgdGhpcy5zYXM5Sm9iRXhlY3V0b3IuZXhlY3V0ZShILHosWik6eWllbGQgdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKEgseixaLFUsSyxYKTpQcm9taXNlLnJlamVjdChuZXcgby5FcnJvclJlc3Bv''@;'; put 'put ''bnNlKG5lLm1zZykpfSl9ZGVwbG95U2VydmljZVBhY2soSCx6LFosVSxLPSExKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVwbG95U2VydmljZVBhY2siLFtNLlNlcnZlclR5cGUuU2FzVml5YV0pO2xldCBYPW51bGw7''@;'; put 'put ''aWYoWnx8eilafHwoWj10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCksenx8KHo9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU0uU2VydmVyVHlwZS5TYXNWaXlhPyhYPW5ldyBJLlNBU1ZpeWFBcGlDbGllbnQoWix6LHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSxYLmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU0uU2VydmVyVHlwZS5TYXM5JiYoWD1uZXcgZi5TQVM5QXBpQ2xpZW50KFosdGhpcy5qb2JzUGF0aCx0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSk7ZWxzZXtsZXQgc2U9bnVsbDt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUuU2FzVml5YT9zZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29uZmlnKCk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09''@;'; put 'put ''TS5TZXJ2ZXJUeXBlLlNhczkmJihzZT10aGlzLnNhczlBcGlDbGllbnQuZ2V0Q29uZmlnKCkpLFo9c2Uuc2VydmVyVXJsLHo9c2Uucm9vdEZvbGRlck5hbWV9SC5tZW1iZXJzWzBdLm1lbWJlcnMmJkgubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQoc2U9PiJmb2xkZXIiPT09c2UudHlwZT8tMTox''@;'; put 'put ''KTtjb25zdCBuZT1ILm1lbWJlcnM7eWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoeixuZSxVLFgsSyl9KX1zdGFydENvbXB1dGVKb2IoSCx6LFo9e30sVSxLLFgsbmU9ITEsc2UsaGUpe3ZhciBfZSxtZSxGZSxSO3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtpZihaPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxaKSx0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtNLlNlcnZlclR5cGUuU2FzVml5YV0pLCFaLmNvbnRleHROYW1lKXRocm93IG5ldyBFcnJvcigiQ29udGV4''@;'; put 'put ''dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7cmV0dXJuIGhlPyhudWxsPT09KF9lPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PV9lfHxfZS5zZXRWZXJib3NlTW9kZShoZSksbnVs''@;'; put 'put ''bD09PShtZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1tZXx8bWUuZW5hYmxlVmVyYm9zZU1vZGUoKSk6ITE9PT1oZSYmKG51bGw9PT0oRmU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09RmV8fEZlLmRpc2FibGVWZXJib3NlTW9kZSgpKSxudWxsPT09KFI9dGhpcy5zYXNW''@;'; put 'put ''aXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Uj92b2lkIDA6Ui5leGVjdXRlQ29tcHV0ZUpvYihILFouY29udGV4dE5hbWUsWi5kZWJ1Zyx6LFUsISFLLCExLFgsbmUsc2UpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChILHope3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXty''@;'; put 'put ''ZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChILHopLnRoZW4oWj0+e2lmKCFaKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgby5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFJlc3BvbnNlIHdhcyBub3QgcHJvdmlkZWQuIikpO3RyeXtyZXR1cm4g''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoWi5yZXN1bHQpfWNhdGNoKFUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgby5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsVSkpfX0pfSl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm5bLi4u''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCldLnNvcnQoaC5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5zYXNqc0NvbmZpZy5z''@;'; put 'put ''ZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IEg9YCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKEg9YCR7SH06JHtsb2NhdGlvbi5wb3J0fWApLHRoaXMu''@;'; put 'put ''c2FzanNDb25maWcuc2VydmVyVXJsPUh9ZWxzZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgw''@;'; put 'put ''LC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGU9PT1NLlNlcnZlclR5cGUuU2FzanM/RC5TYXNqc1JlcXVlc3RDbGllbnQ6Ty5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3RvcnlMaW1pdCx0aGlz''@;'; put 'put ''LnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09TS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUuU2FzOT90''@;'; put 'put ''aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IEEuQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlz''@;'; put 'put ''LnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09TS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBJLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRo''@;'; put 'put ''aXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IGYuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1NLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgVC5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IEUuRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgRS5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2Jz''@;'; put 'put ''UGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IEUuU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9i''@;'; put 'put ''RXhlY3V0b3I9bmV3IEUuU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1''@;'; put 'put ''dGVKb2JFeGVjdXRvcj1uZXcgRS5Db21wdXRlSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyBFLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudCl9Y3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKEgseixaLFUsSyl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkKDAsaC5hc3luY0ZvckVhY2gpKHosWD0+Uyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7c3dpdGNoKFgudHlw''@;'; put 'put ''ZSl7Y2FzZSJmb2xkZXIiOnlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKFgubmFtZSxILHZvaWQgMCxaLFUsSyk7YnJlYWs7Y2FzZSJmaWxlIjp5aWVsZCB0aGlzLmNyZWF0ZUZpbGUoWC5uYW1lLFguY29kZSxILHZvaWQgMCxaLFUpO2JyZWFrO2Nhc2Uic2VydmljZSI6eWllbGQgdGhpcy5jcmVh''@;'; put 'put ''dGVKb2JEZWZpbml0aW9uKFgubmFtZSxYLmNvZGUsSCx2b2lkIDAsWixVKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5pZGVudGlmaWVkIG1lbWJlciAnJHtYLm5hbWV9JyBwcm92aWRlZC5gKX0iZm9sZGVyIj09PVgudHlwZSYmWC5tZW1iZXJzJiZYLm1lbWJlcnMubGVuZ3Ro''@;'; put 'put ''JiYoeWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoYCR7SH0vJHtYLm5hbWV9YCxYLm1lbWJlcnMsWixVLEspKX0pKX0pfWlzTWV0aG9kU3VwcG9ydGVkKEgseil7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZXx8IXouaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5z''@;'; put 'put ''ZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtIfScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHt6LmpvaW4oIiwgIil9IHNlcnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoSCx6KXt2YXIgWjtudWxsPT09KFo9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09Wnx8Wi5l''@;'; put 'put ''bmFibGVWZXJib3NlTW9kZShILHopfWRpc2FibGVWZXJib3NlTW9kZSgpe3ZhciBIO251bGw9PT0oSD10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1IfHxILmRpc2FibGVWZXJib3NlTW9kZSgpfVRhYmxlcyhILHope3JldHVybiBuZXcgby5UYWJsZXMoSCx6KX19fSwzNDY3OmZ1bmN0''@;'; put 'put ''aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihELEUsQixGKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihILHope2Z1bmN0aW9uIFooWCl7dHJ5e0soRi5uZXh0KFgpKX1jYXRjaChuZSl7eihuZSl9fWZ1bmN0''@;'; put 'put ''aW9uIFUoWCl7dHJ5e0soRi50aHJvdyhYKSl9Y2F0Y2gobmUpe3oobmUpfX1mdW5jdGlvbiBLKFgpe1guZG9uZT9IKFgudmFsdWUpOmZ1bmN0aW9uIE4oSCl7cmV0dXJuIEggaW5zdGFuY2VvZiBCP0g6bmV3IEIoZnVuY3Rpb24oeil7eihIKX0pfShYLnZhbHVlKS50aGVuKFosVSl9SygoRj1G''@;'; put 'put ''LmFwcGx5KEQsRXx8W10pKS5uZXh0KCkpfSl9LGg9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEQpe3JldHVybiBEJiZELl9fZXNNb2R1bGU/RDp7ZGVmYXVsdDpEfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU0FTanNB''@;'; put 'put ''cGlDbGllbnQ9dm9pZCAwO2NvbnN0IG89aChkKDYyMzApKSxJPWQoMzkwMCksZj1kKDk3NzgpLFQ9ZCg1NyksQT1kKDI0OSksTT1kKDcwNCk7ai5TQVNqc0FwaUNsaWVudD1jbGFzcyBPe2NvbnN0cnVjdG9yKEUpe3RoaXMucmVxdWVzdENsaWVudD1FfWdldEFjY2Vzc1Rva2VuRm9yUmVxdWVz''@;'; put 'put ''dChFKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoRSl7Y29uc3R7YWNjZXNzX3Rva2VuOkJ9PXlpZWxkKDAsTS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxFLEkuU2VydmVyVHlwZS5TYXNqcyk7cmV0dXJuIEJ9fSl9ZGVwbG95KEUsQixGKXtyZXR1''@;'; put 'put ''cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTj15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChGKTtFLmFwcExvYz1FLmFwcExvY3x8Qjtjb25zdHtyZXN1bHQ6SH09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZl''@;'; put 'put ''L2RlcGxveSIsRSxOLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEgpfSl9ZGVwbG95WmlwRmlsZShFLEIpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVS''@;'; put 'put ''ZWFkU3RyZWFtOkZ9PWQoMjk3NSksTj15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChCKSxIPXlpZWxkIEYoRSksej1uZXcgby5kZWZhdWx0O3ouYXBwZW5kKCJmaWxlIixIKTtjb25zdCBaPWBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke3ouZ2V0Qm91bmRhcnko''@;'; put 'put ''KX1gLHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLHosTixaLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoVSl9KX1leGVjdXRlSm9i''@;'; put 'put ''KEUsQixGKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTj1GP0YuYWNjZXNzX3Rva2VuOnZvaWQgMDtsZXQgSDtIPUUuX3Byb2dyYW0uc3RhcnRzV2l0aCgiLyIpP0UuX3Byb2dyYW06YCR7Qn0vJHtFLl9wcm9ncmFtfWA7Y29uc3Qgej15aWVsZCB0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7X2RlYnVnOjEzMX0sRSkse19wcm9ncmFtOkh9KSxOKTtyZXR1cm57cmVzdWx0OnoucmVzdWx0LGxvZzp6LmxvZ319KX1leGVjdXRlU2NyaXB0KEUsQj0ic2FzIixG''@;'; put 'put ''KXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTj15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChGKSxIPXtsb2c6IiJ9O3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29k''@;'; put 'put ''ZTpFLHJ1blRpbWU6Qn0sTikudGhlbih6PT57Y29uc3R7bG9nOloscHJpbnRPdXRwdXQ6VSxyZXN1bHQ6S309ejtILmxvZz1aLFUmJihILnByaW50T3V0cHV0PVUpLEsmJihILndlYm91dD1LKX0pLmNhdGNoKHo9Pnt0aHJvdygwLGYucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgc2Vu''@;'; put 'put ''ZGluZyBQT1NUIHJlcXVlc3QgdG8gZXhlY3V0ZSBjb2RlLiAiKX0pLEh9KX1nZXRBY2Nlc3NUb2tlbihFLEIpe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxULmdldEFjY2Vzc1Rva2VuRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxFLEIpfSl9''@;'; put 'put ''cmVmcmVzaFRva2VucyhFKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsQS5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxFKX0pfX19LDY5MDM6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1''@;'; put 'put ''KSxoPWQoNTEwOCksbz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRCxFLEIsRil7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oSCx6KXtmdW5jdGlvbiBaKFgpe3RyeXtLKEYubmV4dChYKSl9Y2F0Y2gobmUpe3oobmUpfX1mdW5jdGlvbiBVKFgpe3RyeXtLKEYu''@;'; put 'put ''dGhyb3coWCkpfWNhdGNoKG5lKXt6KG5lKX19ZnVuY3Rpb24gSyhYKXtYLmRvbmU/SChYLnZhbHVlKTpmdW5jdGlvbiBOKEgpe3JldHVybiBIIGluc3RhbmNlb2YgQj9IOm5ldyBCKGZ1bmN0aW9uKHope3ooSCl9KX0oWC52YWx1ZSkudGhlbihaLFUpfUsoKEY9Ri5hcHBseShELEV8fFtdKSku''@;'; put 'put ''bmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5TZXNzaW9uTWFuYWdlcj12b2lkIDA7Y29uc3QgST1kKDEyMzApLGY9ZCgxMzk1KSxUPWQoNTkyOCksQT1kKDk3NzgpO2ouU2Vzc2lvbk1hbmFnZXI9Y2xhc3MgT3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihFLEIsRil7dGhpcy5zZXJ2ZXJVcmw9RSx0aGlzLmNvbnRleHROYW1lPUIsdGhpcy5yZXF1ZXN0Q2xpZW50PUYsdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vz''@;'; put 'put ''c2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1udWxsLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlPXtwcmludGVkOiExLHN0YXRlOkkuU2Vzc2lvblN0YXRlLk5vU3RhdGV9LEUmJigwLFQuaXNVcmwpKEUpfWdldCBkZWJ1''@;'; put 'put ''Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoRSl7dGhpcy5fZGVidWc9RX1pc1Nlc3Npb25WYWxpZChFKXtpZighRSlyZXR1cm4hMTtjb25zdCBCPSgobmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShFLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4h''@;'; put 'put ''KCFFLmF0dHJpYnV0ZXN8fEI+PUUuYXR0cmlidXRlcy5zZXNzaW9uSW5hY3RpdmVUaW1lb3V0KX1yZW1vdmVTZXNzaW9uRnJvbVBvb2woRSl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihCPT5CLmlkIT09RS5pZCl9cmVtb3ZlRXhwaXJlZFNlc3Npb25zKCl7dGhpcy5zZXNz''@;'; put 'put ''aW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihFPT50aGlzLmlzU2Vzc2lvblZhbGlkKEUpKX10aHJvd0Vycm9ycyhFLEIpe3Rocm93IEI/KDAsQS5wcmVmaXhNZXNzYWdlKShuZXcgRXJyb3IoRS5qb2luKCIuICIpKSxCKTpuZXcgRXJyb3IoRS5tYXAoRj0+Ri5tZXNzYWdlP0YubWVzc2FnZTpG''@;'; put 'put ''KS5qb2luKCIuICIpKX1nZXRTZXNzaW9uKEUpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBCPVtdO2xldCBGPSExO2NvbnN0IE49KCk9PntCLmxlbmd0aCYmIUYmJihGPSEwLHRoaXMudGhyb3dFcnJvcnMoQikpfTtpZih0aGlzLnJlbW92ZUV4cGlyZWRT''@;'; put 'put ''ZXNzaW9ucygpLHRoaXMuc2Vzc2lvbnMubGVuZ3RoKXtjb25zdCBIPXRoaXMuc2Vzc2lvbnNbMF07cmV0dXJuIHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKEgpLHRoaXMuY3JlYXRlU2Vzc2lvbnMoRSkuY2F0Y2goej0+e0IucHVzaCh6KX0pLHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Np''@;'; put 'put ''b24oRSkuY2F0Y2goej0+e0IucHVzaCh6KX0pLE4oKSxIfXt0aGlzLmNyZWF0ZVNlc3Npb25zKEUpLmNhdGNoKHo9PntCLnB1c2goeil9KSx5aWVsZCB0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEUpLmNhdGNoKHo9PntCLnB1c2goeil9KSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9u''@;'; put 'put ''cygpO2NvbnN0IEg9dGhpcy5zZXNzaW9ucy5wb3AoKTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woSCksTigpLEh9fSl9Z2V0RXJyb3JNZXNzYWdlKEUsQixGKXtyZXR1cm5gJHtGfSByZXF1ZXN0IHRvICR7Qn0gZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJHtFLnJlc3BvbnNl''@;'; put 'put ''LnN0YXR1c3x8InVua25vd24ifS4gYCtFLnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8IiJ9Y2xlYXJTZXNzaW9uKEUsQil7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEY9YC9jb21wdXRlL3Nlc3Npb25zLyR7RX1gO3JldHVybiB5aWVsZCB0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQuZGVsZXRlKEYsQikudGhlbigoKT0+e3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoTj0+Ti5pZCE9PUUpfSkuY2F0Y2goTj0+e3Rocm93KDAsQS5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShOLEYsIkRFTEVURSIpLCJFcnJvciB3aGlsZSBk''@;'; put 'put ''ZWxldGluZyBzZXNzaW9uLiAiKX0pfSl9Y3JlYXRlU2Vzc2lvbnMoRSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEI9W107dGhpcy5zZXNzaW9ucy5sZW5ndGh8fCh5aWVsZCgwLFQuYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksKCk9Pm8odGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oRSkuY2F0Y2goRj0+e0IucHVzaChGKX0pfSkpKSxCLmxlbmd0aCYmdGhpcy50aHJvd0Vycm9ycyhCLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pfXdhaXRGb3JDdXJy''@;'; put 'put ''ZW50Q29udGV4dCgpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoRT0+e2NvbnN0IEI9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLmN1cnJlbnRDb250ZXh0JiYodGhpcy5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKEIpLEUo''@;'; put 'put ''KSl9LDEwMCl9KX0pfWNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEUpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmN1cnJlbnRDb250ZXh0fHwodGhpcy5zZXR0aW5nQ29udGV4dD95aWVsZCB0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpOnlpZWxkIHRo''@;'; put 'put ''aXMuc2V0Q3VycmVudENvbnRleHQoRSkpO2NvbnN0IEI9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt0aGlzLmN1cnJlbnRDb250ZXh0LmlkfS9zZXNzaW9uc2Ase3Jlc3VsdDpGLGV0YWc6Tn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoQix7fSxFKS5jYXRj''@;'; put 'put ''aCh6PT57dGhyb3coMCxBLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHosQiwiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pO0YuZXRhZz1OO2NvbnN0IEg9Ri5saW5rcy5maW5kKHo9PiJzdGF0ZSI9PT16LnJlbCk7aWYoIUgpdGhyb3cgdGhp''@;'; put 'put ''cy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIEYuc3RhdGVVcmw9SC5ocmVmLHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oRixOLEUpLHRoaXMuc2Vzc2lvbnMucHVzaChGKSxGfSl9c2V0Q3VycmVudENvbnRleHQoRSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2lmKCF0aGlzLmN1cnJlbnRDb250ZXh0KXtjb25zdCBCPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYDt0aGlzLnNldHRpbmdDb250ZXh0PSEwO2NvbnN0e3Jlc3VsdDpGfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEIsRSkuY2F0Y2go''@;'; put 'put ''ej0+e3Rocm93KDAsQS5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZSh6LEIsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxpc3Qgb2YgY29udGV4dHMuICIpfSksSD0oRiYmRi5pdGVtcyYmRi5pdGVtcy5sZW5ndGg/Ri5pdGVtczpbXSkuZmluZCh6PT56Lm5hbWU9PT10''@;'; put 'put ''aGlzLmNvbnRleHROYW1lKTtpZighSCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke3RoaXMuY29udGV4dE5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2ZXIgJHt0aGlzLnNlcnZlclVybH0uYCk7dGhpcy5jdXJyZW50Q29udGV4dD1ILFByb21pc2UucmVzb2x2ZSgpfX0p''@;'; put 'put ''fXdhaXRGb3JTZXNzaW9uKEUsQixGKXt2YXIgTjtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0e3N0YXRlOkh9PUU7Y29uc3R7c3RhdGVVcmw6en09RSxaPVMubG9nZ2VyfHxoO2lmKEg9PT1JLlNlc3Npb25TdGF0ZS5QZW5kaW5nfHxIPT09SS5TZXNzaW9uU3Rh''@;'; put 'put ''dGUuUnVubmluZ3x8SD09PUkuU2Vzc2lvblN0YXRlLk5vU3RhdGUpe2lmKHope3RoaXMuZGVidWcmJiF0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZCYmKFouaW5mbyhgUG9sbGluZzogJHt0aGlzLnNlcnZlclVybCt6fWApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVk''@;'; put 'put ''PSEwKTtjb25zdCBVPWAke3RoaXMuc2VydmVyVXJsfSR7en0/d2FpdD0zMGAse3Jlc3VsdDpLLHJlc3BvbnNlU3RhdHVzOlh9PXlpZWxkIHRoaXMuZ2V0U2Vzc2lvblN0YXRlKFUsQixGKS5jYXRjaChuZT0+e3Rocm93KDAsQS5wcmVmaXhNZXNzYWdlKShuZSwiRXJyb3Igd2hpbGUgd2FpdGlu''@;'; put 'put ''ZyBmb3Igc2Vzc2lvbi4gIil9KTtpZihIPUsudHJpbSgpLHRoaXMuZGVidWcmJnRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZSE9PUgmJihaLmluZm8oYEN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBpcyAnJHtIfSdgKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGU9SCx0aGlzLnBy''@;'; put 'put ''aW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMSksIUgpe2NvbnN0IG5lPW5ldyBmLk5vU2Vzc2lvblN0YXRlRXJyb3IoWCx0aGlzLnNlcnZlclVybCt6LG51bGw9PT0oTj1FLmxpbmtzLmZpbmQoc2U9PiJsb2ciPT09c2UucmVsKSl8fHZvaWQgMD09PU4/dm9pZCAwOk4uaHJlZik7cmV0dXJu''@;'; put 'put ''IHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQoc2U9PnNlLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09bmUuc2VydmVyUmVzcG9uc2VTdGF0dXMpfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChuZSksWi5pbmZvKG5lLm1lc3NhZ2UpKSx5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKEUsQixGKX1yZXR1''@;'; put 'put ''cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sSH10aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcn1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sSH0pfWdldFNlc3Npb25TdGF0ZShFLEIsRil7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVs''@;'; put 'put ''ZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEUsRiwidGV4dC9wbGFpbiIseyJJZi1Ob25lLU1hdGNoIjpCfSkudGhlbihOPT4oe3Jlc3VsdDpOLnJlc3VsdCxyZXNwb25zZVN0YXR1czpOLnN0YXR1c30pKS5jYXRjaChOPT57dGhyb3coMCxBLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JN''@;'; put 'put ''ZXNzYWdlKE4sRSwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZS4gIil9KX0pfWdldFZhcmlhYmxlKEUsQixGKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTj1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9zZXNzaW9ucy8k''@;'; put 'put ''e0V9L3ZhcmlhYmxlcy8ke0J9YDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChOLEYpLmNhdGNoKEg9Pnt0aHJvdygwLEEucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoSCxOLCJHRVQiKSxgRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc2Vzc2lvbiB2YXJpYWJs''@;'; put 'put ''ZSAnJHtCfScuIGApfSl9KX19fSwxNjIyOmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSksaD1kKDUxMDgpLG89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTixILHope3JldHVybiBuZXcoSHx8KEg9UHJvbWlzZSkpKGZ1bmN0aW9uKFUsSyl7ZnVu''@;'; put 'put ''Y3Rpb24gWChoZSl7dHJ5e3NlKHoubmV4dChoZSkpfWNhdGNoKF9lKXtLKF9lKX19ZnVuY3Rpb24gbmUoaGUpe3RyeXtzZSh6LnRocm93KGhlKSl9Y2F0Y2goX2Upe0soX2UpfX1mdW5jdGlvbiBzZShoZSl7aGUuZG9uZT9VKGhlLnZhbHVlKTpmdW5jdGlvbiBaKFUpe3JldHVybiBVIGluc3Rh''@;'; put 'put ''bmNlb2YgSD9VOm5ldyBIKGZ1bmN0aW9uKEspe0soVSl9KX0oaGUudmFsdWUpLnRoZW4oWCxuZSl9c2UoKHo9ei5hcHBseShGLE58fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5leGVjdXRlT25Db21wdXRlQXBpPXZv''@;'; put 'put ''aWQgMDtjb25zdCBJPWQoNzc1NyksZj1kKDk3NzgpLFQ9ZCgzNjA3KSxBPWQoNzA0KSxNPWQoNTkyOCksTz1kKDcxNCksRD1kKDEzNDMpLEU9ZCg2NDk2KTtqLmV4ZWN1dGVPbkNvbXB1dGVBcGk9ZnVuY3Rpb24gQihGLE4sSCx6LFosVSxLLFg9bnVsbCxuZT0hMSxzZT0hMSxoZT0hMCxfZSxt''@;'; put 'put ''ZT0hMSxGZSl7dmFyIFIscztyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHU9KEt8fHt9KS5hY2Nlc3NfdG9rZW47SyYmKHthY2Nlc3NfdG9rZW46dX09eWllbGQoMCxBLmdldFRva2VucykoRixLKSk7Y29uc3Qgdj1TLmxvZ2dlcnx8aDt0cnl7bGV0IHA7Y29u''@;'; put 'put ''c3QgXz15aWVsZCBOLmdldFNlc3Npb24odSkuY2F0Y2godmU9Pnt0aHJvdygwLGYucHJlZml4TWVzc2FnZSkodmUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9KTtpZihwPV8uaWQsbWUpe2NvbnN0e3Jlc3VsdDp2ZX09eWllbGQgTi5nZXRWYXJpYWJsZShwLCJTWVNKT0JJRCIs''@;'; put 'put ''dSkuY2F0Y2godWU9Pnt0aHJvdygwLGYucHJlZml4TWVzc2FnZSkodWUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KTtpZih2ZSYmdmUudmFsdWUpe2NvbnN0IHVlPUg/ei5zcGxpdChIKS5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIiKTp6OyhTLmxvZ2dlcnx8''@;'; put 'put ''aCkuaW5mbyhgVHJpZ2dlcmluZyAnJHt1ZX0nIHdpdGggUElEICR7dmUudmFsdWV9IGF0ICR7KDAsSS50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgpfWApfX1sZXQgaztrPSgwLE0uaXNSZWxhdGl2ZVBhdGgpKHopP2BleGVjLSR7ei5pbmNsdWRlcygiLyIpP3ouc3BsaXQoIi8iKVsxXTp6''@;'; put 'put ''fWA6ei5zcGxpdCgiLyIpLnBvcCgpO2xldCBMPXtTWVNfSkVTX0pPQl9VUkk6IiIsX3Byb2dyYW06KDAsTS5pc1JlbGF0aXZlUGF0aCkoeik/SCsiLyIrejp6fTtGZSYmKEw9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEwpLEZlKSksbmUmJihMPU9iamVjdC5hc3NpZ24oT2JqZWN0''@;'; put 'put ''LmFzc2lnbih7fSxMKSx7X0RFQlVHOjEzMX0pKTtsZXQgeT1bXTtYJiYoSlNPTi5zdHJpbmdpZnkoWCkuaW5jbHVkZXMoIjsiKT8oeT15aWVsZCgwLEUudXBsb2FkVGFibGVzKShGLFgsdSkuY2F0Y2godmU9Pnt0aHJvdygwLGYucHJlZml4TWVzc2FnZSkodmUsIkVycm9yIHdoaWxlIHVwbG9h''@;'; put 'put ''ZGluZyB0YWJsZXMuICIpfSksTC5fd2ViaW5fZmlsZV9jb3VudD15Lmxlbmd0aCx5LmZvckVhY2goKHZlLHVlKT0+e0xbYF93ZWJpbl9maWxldXJpJHt1ZSsxfWBdPWAvZmlsZXMvZmlsZXMvJHt2ZS5maWxlLmlkfWAsTFtgX3dlYmluX25hbWUke3VlKzF9YF09dmUudGFibGVOYW1lfSkpOkw9''@;'; put 'put ''T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEwpLCgwLE8uZm9ybWF0RGF0YUZvclJlcXVlc3QpKFgpKSk7Y29uc3QgbD17bmFtZTprfHwiRGVmYXVsdCBKb2IgTmFtZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6Wix2YXJpYWJsZXM6TCx2ZXJzaW9uOjJ9LHty''@;'; put 'put ''ZXN1bHQ6Yn09eWllbGQgRi5wb3N0KGAvY29tcHV0ZS9zZXNzaW9ucy8ke3B9L2pvYnNgLGwsdSkuY2F0Y2godmU9Pnt0aHJvdygwLGYucHJlZml4TWVzc2FnZSkodmUsIkVycm9yIHdoaWxlIHBvc3Rpbmcgam9iLiAiKX0pO2lmKCFoZSlyZXR1cm4gXztuZSYmKHYuaW5mbyhgSm9iIGhhcyBi''@;'; put 'put ''ZWVuIHN1Ym1pdHRlZCBmb3IgJyR7a30nLmApLHYuaW5mbyhgWW91IGNhbiBtb25pdG9yIHRoZSBqb2IgcHJvZ3Jlc3MgYXQgJyR7Ri5nZXRCYXNlVXJsKCl9JHtiLmxpbmtzLmZpbmQodmU9PiJzdGF0ZSI9PT12ZS5yZWwpLmhyZWZ9Jy5gKSk7Y29uc3QgRz15aWVsZCgwLEQucG9sbEpvYlN0''@;'; put 'put ''YXRlKShGLGIsbmUsSyxfZSx7c2Vzc2lvbjpfLHNlc3Npb25NYW5hZ2VyOk59KS5jYXRjaCh2ZT0+byh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHVlLHplO2NvbnN0IE9lPW51bGw9PT0odWU9dmU/LnJlc3BvbnNlKXx8dm9pZCAwPT09dWU/dm9pZCAwOnVlLmRhdGEsQ2U9''@;'; put 'put ''L2Vycj1bMC05XSosLy5leGVjKE9lKTtpZigiNTExMyI9PT0obnVsbD09PSh6ZT1DZT8uWzBdKXx8dm9pZCAwPT09emU/dm9pZCAwOnplLnNsaWNlKDQsLTEpKSl7Y29uc3QgTWU9Yi5saW5rcy5maW5kKEllPT4idXAiPT09SWUucmVsKS5ocmVmKyIvbG9nIjt2ZS5sb2c9eWllbGQoMCxNLmZl''@;'; put 'put ''dGNoTG9nQnlDaHVua3MpKEYsdSxNZSwxZTYpfXRocm93KDAsZi5wcmVmaXhNZXNzYWdlKSh2ZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pKTtLJiYoe2FjY2Vzc190b2tlbjp1fT15aWVsZCgwLEEuZ2V0VG9rZW5zKShGLEspKTtjb25zdHtyZXN1bHQ6UX09eWllbGQg''@;'; put 'put ''Ri5nZXQoYC9jb21wdXRlL3Nlc3Npb25zLyR7cH0vam9icy8ke2IuaWR9YCx1KS5jYXRjaCh2ZT0+e3Rocm93KDAsZi5wcmVmaXhNZXNzYWdlKSh2ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSk7bGV0IHBlLFBlPSIiO2NvbnN0IFplPVEubGlua3MuZmluZCh2ZT0+ImxvZyI9PT12''@;'; put 'put ''ZS5yZWwpO2lmKG5lJiZaZSl7Y29uc3QgdmU9YCR7WmUuaHJlZn0vY29udGVudGAsdWU9bnVsbCE9PShzPW51bGw9PT0oUj1RLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1SP3ZvaWQgMDpSLmxpbmVDb3VudCkmJnZvaWQgMCE9PXM/czoxZTY7UGU9eWllbGQoMCxNLmZldGNoTG9nQnlDaHVu''@;'; put 'put ''a3MpKEYsdSx2ZSx1ZSl9aWYoRz09PUQuSm9iU3RhdGUuRmFpbGVkfHxHPT09RC5Kb2JTdGF0ZS5FcnJvcil0aHJvdyBuZXcgVC5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3IoUSxQZSk7aWYoIXNlKXJldHVybntqb2I6USxsb2c6UGV9O2NvbnN0IHFlPWAvY29tcHV0ZS9zZXNzaW9ucy8ke3B9''@;'; put 'put ''L2ZpbGVyZWZzL193ZWJvdXQvY29udGVudGA7cmV0dXJuIHBlPXlpZWxkIEYuZ2V0KHFlLHUsInRleHQvcGxhaW4iKS5jYXRjaCh2ZT0+byh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHVlLHplO2lmKHZlIGluc3RhbmNlb2YgVC5Ob3RGb3VuZEVycm9yJiZaZSl7Y29uc3Qg''@;'; put 'put ''T2U9YCR7WmUuaHJlZn0vY29udGVudGAsQ2U9bnVsbCE9PSh6ZT1udWxsPT09KHVlPVEubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PXVlP3ZvaWQgMDp1ZS5saW5lQ291bnQpJiZ2b2lkIDAhPT16ZT96ZToxZTY7cmV0dXJuIFBlPXlpZWxkKDAsTS5mZXRjaExvZ0J5Q2h1bmtzKShGLHUsT2Us''@;'; put 'put ''Q2UpLFByb21pc2UucmVqZWN0KHtzdGF0dXM6NTAwLGxvZzpQZX0pfXJldHVybntyZXN1bHQ6SlNPTi5zdHJpbmdpZnkodmUpfX0pKSx5aWVsZCBOLmNsZWFyU2Vzc2lvbihwLHUpLmNhdGNoKHZlPT57dGhyb3coMCxmLnByZWZpeE1lc3NhZ2UpKHZlLCJFcnJvciB3aGlsZSBjbGVhcmluZyBz''@;'; put 'put ''ZXNzaW9uLiAiKX0pLHtyZXN1bHQ6cGU/LnJlc3VsdCxsb2c6UGV9fWNhdGNoKHApe2lmKDQwND09PXAuc3RhdHVzKXJldHVybiBCKEYsTixILHosWixVLEssWCxuZSwhMSwhMCk7dGhyb3coMCxmLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpfX0p''@;'; put 'put ''fX0sNzQ1ODpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQxNTUpLGg9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFQsQSxNLE8pe3JldHVybiBuZXcoTXx8KE09UHJvbWlzZSkpKGZ1bmN0aW9uKEUsQil7ZnVuY3Rpb24gRih6KXt0cnl7SChPLm5leHQoeikp''@;'; put 'put ''fWNhdGNoKFope0IoWil9fWZ1bmN0aW9uIE4oeil7dHJ5e0goTy50aHJvdyh6KSl9Y2F0Y2goWil7QihaKX19ZnVuY3Rpb24gSCh6KXt6LmRvbmU/RSh6LnZhbHVlKTpmdW5jdGlvbiBEKEUpe3JldHVybiBFIGluc3RhbmNlb2YgTT9FOm5ldyBNKGZ1bmN0aW9uKEIpe0IoRSl9KX0oei52YWx1''@;'; put 'put ''ZSkudGhlbihGLE4pfUgoKE89Ty5hcHBseShULEF8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRGaWxlU3RyZWFtPXZvaWQgMDtjb25zdCBvPWQoMjk3NSksST1kKDc3NTcpO2ouZ2V0RmlsZVN0cmVhbT0oVCxB''@;'; put 'put ''KT0+aCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVXcml0ZVN0cmVhbTpNfT1kKDI5NzUpLE89QXx8Uy5jd2QoKTtpZih5aWVsZCgwLG8uaXNGb2xkZXIpKE8pKXtjb25zdCBFPWAke1QubmFtZXx8ImpvYiJ9LSR7KDAsSS5nZW5lcmF0ZVRpbWVzdGFtcCko''@;'; put 'put ''KX0ubG9nYCxGPWQoMjUyMCkuam9pbihBfHxTLmN3ZCgpLEUpO3JldHVybiB5aWVsZCBNKEYpfXJldHVybiB5aWVsZCBNKE8pfSl9LDEzNDM6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1KSxoPWQoNTEwOCksbz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp''@;'; put 'put ''b24oTixILHosWil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxYKXtmdW5jdGlvbiBuZShfZSl7dHJ5e2hlKFoubmV4dChfZSkpfWNhdGNoKG1lKXtYKG1lKX19ZnVuY3Rpb24gc2UoX2Upe3RyeXtoZShaLnRocm93KF9lKSl9Y2F0Y2gobWUpe1gobWUpfX1mdW5jdGlv''@;'; put 'put ''biBoZShfZSl7X2UuZG9uZT9LKF9lLnZhbHVlKTpmdW5jdGlvbiBVKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFgpe1goSyl9KX0oX2UudmFsdWUpLnRoZW4obmUsc2UpfWhlKChaPVouYXBwbHkoTixIfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZG9Qb2xsPWoucG9sbEpvYlN0YXRlPWouSm9iU3RhdGU9dm9pZCAwO2NvbnN0IEk9ZCg3MDQpLGY9ZCgxMzk1KSxUPWQoMTIzMCksQT1kKDU5MjgpO3ZhciBNLE47KE49TT1qLkpvYlN0YXRlfHwoai5Kb2JTdGF0ZT17fSkpLkNv''@;'; put 'put ''bXBsZXRlZD0iY29tcGxldGVkIixOLlJ1bm5pbmc9InJ1bm5pbmciLE4uUGVuZGluZz0icGVuZGluZyIsTi5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLE4uTm9TdGF0ZT0iIixOLkZhaWxlZD0iZmFpbGVkIixOLkVycm9yPSJlcnJvciIsai5wb2xsSm9iU3RhdGU9ZnVuY3Rpb24gTyhOLEgs''@;'; put 'put ''eixaLFUsSyl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFg9Uy5sb2dnZXJ8fGgsbmU9VT8uc3RyZWFtTG9nfHwhMSxzZT1be21heFBvbGxDb3VudDoyMDAscG9sbEludGVydmFsOjMwMH0se21heFBvbGxDb3VudDozMDAscG9sbEludGVydmFsOjNlM30s''@;'; put 'put ''e21heFBvbGxDb3VudDo1MDAscG9sbEludGVydmFsOjNlNH0se21heFBvbGxDb3VudDozNDAwLHBvbGxJbnRlcnZhbDo2ZTR9XTtsZXQgaGU7aWYodm9pZCAwIT09VSl7aGU9W1VdO2xldHtwb2xsU3RyYXRlZ3k6dn09VTt2b2lkIDAhPT12PyhGKHYpLHY9di5zb3J0KChwLF8pPT5wLm1heFBv''@;'; put 'put ''bGxDb3VudC1fLm1heFBvbGxDb3VudCksaGU9Wy4uLmhlLC4uLnZdKTpoZT1bLi4uaGUsLi4uc2VdfWVsc2UgaGU9c2U7bGV0IF9lPWhlLnNwbGljZSgwLDEpWzBdO1U9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LF9lKSxVfHx7fSk7Y29uc3QgbWU9SC5saW5rcy5maW5kKHY9PiJz''@;'; put 'put ''dGF0ZSI9PT12LnJlbCk7aWYoIW1lKXRocm93IG5ldyBFcnJvcigiSm9iIHN0YXRlIGxpbmsgd2FzIG5vdCBmb3VuZC4iKTtsZXQgcyxGZT15aWVsZCBEKE4sSCxNLk5vU3RhdGUseixaKS5jYXRjaCh2PT4oWC5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHttZS5ocmVm''@;'; put 'put ''fS4gU3RhcnRpbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCx2KSxNLlVuYXZhaWxhYmxlKSksUj0wO2lmKEZlPT09TS5Db21wbGV0ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZShGZSk7aWYobmUmJigwLEEuaXNOb2RlKSgpKXtjb25zdHtnZXRGaWxlU3RyZWFtOnZ9PWQo''@;'; put 'put ''NzQ1OCk7cz15aWVsZCB2KEgsVS5sb2dGb2xkZXJQYXRoKX1sZXQgdT15aWVsZCgwLGouZG9Qb2xsKShOLEgsRmUseixSLFUsWixuZSxzLEspO2lmKEZlPXUuc3RhdGUsUj11LnBvbGxDb3VudCwhRShGZSl8fFI+PVUubWF4UG9sbENvdW50JiYhaGUubGVuZ3RoKXJldHVybiBGZTtmb3IoO2hl''@;'; put 'put ''Lmxlbmd0aCYmRShGZSk7KV9lPWhlLnNwbGljZSgwLDEpWzBdLFUmJihfZS5sb2dGb2xkZXJQYXRoPVUubG9nRm9sZGVyUGF0aCksdT15aWVsZCgwLGouZG9Qb2xsKShOLEgsRmUseixSLF9lLFosbmUscyxLKSxGZT11LnN0YXRlLFI9dS5wb2xsQ291bnQ7cmV0dXJuIHMmJnMuZW5kKCksRmV9''@;'; put 'put ''KX07Y29uc3QgRD0oTixILHosWixVKT0+byh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPUgubGlua3MuZmluZChYPT4ic3RhdGUiPT09WC5yZWwpO2lmKEUoeikpe2xldCBYO1UmJihYPXlpZWxkKDAsSS5nZXRUb2tlbnMpKE4sVSkpO2NvbnN0e3Jlc3VsdDpuZX09''@;'; put 'put ''eWllbGQgTi5nZXQoYCR7Sy5ocmVmfT9fYWN0aW9uPXdhaXQmd2FpdD0zMDBgLFg/LmFjY2Vzc190b2tlbiwidGV4dC9wbGFpbiIse30sWikuY2F0Y2goc2U9Pnt0aHJvdyBuZXcgZi5Kb2JTdGF0ZVBvbGxFcnJvcihILmlkLHNlKX0pO3JldHVybiBuZS50cmltKCl9cmV0dXJuIHp9KSxFPU49''@;'; put 'put ''Pk49PT1NLlJ1bm5pbmd8fE49PT1NLk5vU3RhdGV8fE49PT1NLlBlbmRpbmd8fE49PT1NLlVuYXZhaWxhYmxlO2ouZG9Qb2xsPShOLEgseixaLFUsSyxYLG5lLHNlLGhlKT0+byh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgX2UsbWU7Y29uc3R7bWF4UG9sbENvdW50OkZl''@;'; put 'put ''LHBvbGxJbnRlcnZhbDpSfT1LLHM9Uy5sb2dnZXJ8fGgsdT1ILmxpbmtzLmZpbmQoeT0+InN0YXRlIj09PXkucmVsKTtsZXQgcD0wLF89eixrPU0uTm9TdGF0ZSxMPTA7Zm9yKDtFKF8pJiZVPD1GZTspe2lmKGhlJiZVJiZVJTEwPT0wJiZYKXtjb25zdHtzZXNzaW9uOmwsc2Vzc2lvbk1hbmFn''@;'; put 'put ''ZXI6Yn09aGUse3N0YXRlVXJsOnEsZXRhZzpHLGlkOlF9PWwse2FjY2Vzc190b2tlbjpwZX09WCx7aWQ6UGV9PUgse3Jlc3VsdDpaZSxyZXNwb25zZVN0YXR1czpxZX09eWllbGQgYi5nZXRTZXNzaW9uU3RhdGUocSxHLHBlKS5jYXRjaCh1ZT0+e3Rocm93IG5ldyBmLkpvYlN0YXRlUG9sbEVy''@;'; put 'put ''cm9yKFBlLHVlKX0pLHZlPXVlPT5bVC5TZXNzaW9uU3RhdGUuUnVubmluZyxULlNlc3Npb25TdGF0ZS5JZGxlXS5pbmNsdWRlcyh1ZSk7aWYoIXZlKFplKXx8MjAwIT09cWUpe2IuY2xlYXJTZXNzaW9uKFEscGUpO2NvbnN0IHVlPXZlKFplKT9gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMg''@;'; put 'put ''bm90IDIwMC4gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgJHtxZX0uYDpgU2Vzc2lvbiBzdGF0ZSBvZiB0aGUgam9iIGlzIG5vdCAncnVubmluZycgb3IgJ2lkbGUnLiBTZXNzaW9uIHN0YXRlIGlzICcke1plfSdgO3Rocm93IG5ldyBmLkpvYlN0YXRlUG9sbEVycm9yKFBlLG5ldyBFcnJv''@;'; put 'put ''cih1ZSkpfX1fPXlpZWxkIEQoTixILF8sWixYKS5jYXRjaChsPT57aWYocCsrLFU+PUZlfHxwPj01KXRocm93IGw7cmV0dXJuIHMuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7dS5ocmVmfS4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcu''@;'; put 'put ''YCxsKSxNLlVuYXZhaWxhYmxlfSksVSsrO2NvbnN0IHk9SC5saW5rcy5maW5kKGw9PiJzZWxmIj09PWwucmVsKS5ocmVmO2lmKG5lKXtjb25zdHtyZXN1bHQ6bH09eWllbGQgTi5nZXQoeSxYPy5hY2Nlc3NfdG9rZW4pLGI9bnVsbCE9PShtZT1udWxsPT09KF9lPWwubG9nU3RhdGlzdGljcyl8''@;'; put 'put ''fHZvaWQgMD09PV9lP3ZvaWQgMDpfZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1tZT9tZToxZTYse3NhdmVMb2c6cX09KDAsQS5pc05vZGUpKCk/ZCgyMDgwKTp7c2F2ZUxvZzpudWxsfTtxJiYoeWllbGQgcShILE4sTCxiLHNlLFg/LmFjY2Vzc190b2tlbikpLEwrPWJ9WiYmayE9PV8mJihzLmlu''@;'; put 'put ''Zm8oYFBvbGxpbmc6ICR7Ti5nZXRCYXNlVXJsKCkreX0vc3RhdGVgKSxzLmluZm8oYEN1cnJlbnQgam9iIHN0YXRlOiAke199YCksaz1fKSxfIT09TS5VbmF2YWlsYWJsZSYmcD4wJiYocD0wKSxfIT09TS5Db21wbGV0ZWQmJih5aWVsZCgwLEEuZGVsYXkpKFIpKX1yZXR1cm57c3RhdGU6Xyxw''@;'; put 'put ''b2xsQ291bnQ6VX19KTtjb25zdCBGPU49Pntjb25zdCBIPSh6LFopPT57dGhyb3cgbmV3IEVycm9yKGBQb2xsIHN0cmF0ZWdpZXMgYXJlIG5vdCB2YWxpZC4ke3o/YCAke3p9YDoiIn0ke1o/YCBJbnZhbGlkIHBvbGwgc3RyYXRlZ3k6IFxuJHtKU09OLnN0cmluZ2lmeShaLG51bGwsMil9YDoi''@;'; put 'put ''In1gKX07Ti5mb3JFYWNoKCh6LFopPT57Y29uc3R7bWF4UG9sbENvdW50OlUscG9sbEludGVydmFsOkt9PXo7VTwxP0goIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLHopOjAhPT1aP1U8PU5bWi0xXS5tYXhQb2xsQ291bnQmJkgoIidtYXhQb2xsQ291bnQnIGhh''@;'; put 'put ''cyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLHopOks8MSYmSCgiJ3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIseil9KX19LDIwODA6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9''@;'; put 'put ''ZCg0MTU1KSxoPWQoNTEwOCksbz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQSxNLE8sRCl7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oQixGKXtmdW5jdGlvbiBOKFope3RyeXt6KEQubmV4dChaKSl9Y2F0Y2goVSl7RihVKX19ZnVuY3Rpb24gSChaKXt0cnl7''@;'; put 'put ''eihELnRocm93KFopKX1jYXRjaChVKXtGKFUpfX1mdW5jdGlvbiB6KFope1ouZG9uZT9CKFoudmFsdWUpOmZ1bmN0aW9uIEUoQil7cmV0dXJuIEIgaW5zdGFuY2VvZiBPP0I6bmV3IE8oZnVuY3Rpb24oRil7RihCKX0pfShaLnZhbHVlKS50aGVuKE4sSCl9eigoRD1ELmFwcGx5KEEsTXx8W10p''@;'; put 'put ''KS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnNhdmVMb2c9dm9pZCAwO2NvbnN0IEk9ZCg1OTI4KSxmPWQoNjEzMSk7ai5zYXZlTG9nPWZ1bmN0aW9uIFQoQSxNLE8sRCxFLEIpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXtpZighQil0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpvYiAke0EuaWR9IGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nlc3MgdG9rZW4uYCk7aWYoIUUpdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZvciBqb2IgJHtBLmlkfSBjYW5ub3QgYmUgd3Jp''@;'; put 'put ''dHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLmApO2NvbnN0IEY9Uy5sb2dnZXJ8fGgsTj1BLmxpbmtzLmZpbmQoej0+ImxvZyI9PT16LnJlbCk7aWYoIU4pdGhyb3cgbmV3IEVycm9yKGBMb2cgVVJMIGZvciBqb2IgJHtBLmlkfSB3YXMgbm90IGZvdW5kLmApO2NvbnN0IEg9eWll''@;'; put 'put ''bGQoMCxJLmZldGNoTG9nKShNLEIsYCR7Ti5ocmVmfS9jb250ZW50YCxPLEQpO0YuaW5mbyhgV3JpdGluZyBsb2dzIHRvICR7RS5wYXRofWApLHlpZWxkKDAsZi53cml0ZVN0cmVhbSkoRSxIfHwiIil9KX19LDY0OTY6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYm''@;'; put 'put ''dGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGYsVCxBLE0pe3JldHVybiBuZXcoQXx8KEE9UHJvbWlzZSkpKGZ1bmN0aW9uKEQsRSl7ZnVuY3Rpb24gQihIKXt0cnl7TihNLm5leHQoSCkpfWNhdGNoKHope0Uoeil9fWZ1bmN0aW9uIEYoSCl7dHJ5e04oTS50aHJvdyhIKSl9Y2F0Y2goeil7RSh6''@;'; put 'put ''KX19ZnVuY3Rpb24gTihIKXtILmRvbmU/RChILnZhbHVlKTpmdW5jdGlvbiBPKEQpe3JldHVybiBEIGluc3RhbmNlb2YgQT9EOm5ldyBBKGZ1bmN0aW9uKEUpe0UoRCl9KX0oSC52YWx1ZSkudGhlbihCLEYpfU4oKE09TS5hcHBseShmLFR8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai51cGxvYWRUYWJsZXM9dm9pZCAwO2NvbnN0IGg9ZCg5Nzc4KSxvPWQoMjQwMik7ai51cGxvYWRUYWJsZXM9ZnVuY3Rpb24gSShmLFQsQSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE09''@;'; put 'put ''W107Zm9yKGNvbnN0IE8gaW4gVCl7aWYoKDAsby5pc0Zvcm1hdHNUYWJsZSkoTykpY29udGludWU7Y29uc3QgRD0oMCxvLmNvbnZlcnRUb0NTVikoVCxPKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09RCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3Ry''@;'; put 'put ''aW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Y29uc3QgRT15aWVsZCBmLnVwbG9hZEZpbGUoIi9maWxlcy9maWxlcyNyYXdVcGxvYWQiLEQsQSkuY2F0Y2goQj0+e3Rocm93KDAsaC5wcmVmaXhNZXNzYWdlKShCLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4g''@;'; put 'put ''Iil9KTtNLnB1c2goe3RhYmxlTmFtZTpPLGZpbGU6RS5yZXN1bHR9KX1yZXR1cm4gTX0pfX0sNjEzMTpmdW5jdGlvbih0ZSxqKXsidXNlIHN0cmljdCI7dmFyIGQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGgsbyxJLGYpe3JldHVybiBuZXcoSXx8KEk9UHJvbWlzZSkpKGZ1bmN0''@;'; put 'put ''aW9uKEEsTSl7ZnVuY3Rpb24gTyhCKXt0cnl7RShmLm5leHQoQikpfWNhdGNoKEYpe00oRil9fWZ1bmN0aW9uIEQoQil7dHJ5e0UoZi50aHJvdyhCKSl9Y2F0Y2goRil7TShGKX19ZnVuY3Rpb24gRShCKXtCLmRvbmU/QShCLnZhbHVlKTpmdW5jdGlvbiBUKEEpe3JldHVybiBBIGluc3RhbmNl''@;'; put 'put ''b2YgST9BOm5ldyBJKGZ1bmN0aW9uKE0pe00oQSl9KX0oQi52YWx1ZSkudGhlbihPLEQpfUUoKGY9Zi5hcHBseShoLG98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai53cml0ZVN0cmVhbT12b2lkIDAsai53cml0ZVN0''@;'; put 'put ''cmVhbT0oaCxvKT0+ZCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKEksZik9PntoLndyaXRlKG8rIlxuIixUPT57VD9mKFQpOkkoITApfSl9KX0pfSwyODUxOmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTEwOCksaD1k''@;'; put 'put ''KDQxNTUpLG89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sSCx6LFope3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssWCl7ZnVuY3Rpb24gbmUoX2Upe3RyeXtoZShaLm5leHQoX2UpKX1jYXRjaChtZSl7WChtZSl9fWZ1bmN0aW9uIHNlKF9lKXt0cnl7aGUo''@;'; put 'put ''Wi50aHJvdyhfZSkpfWNhdGNoKG1lKXtYKG1lKX19ZnVuY3Rpb24gaGUoX2Upe19lLmRvbmU/SyhfZS52YWx1ZSk6ZnVuY3Rpb24gVShLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihYKXtYKEspfSl9KF9lLnZhbHVlKS50aGVuKG5lLHNlKX1oZSgoWj1aLmFwcGx5''@;'; put 'put ''KE4sSHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkF1dGhNYW5hZ2VyPXZvaWQgMDtjb25zdCBJPWQoMzkwMCksZj1kKDEzOTUpLFQ9ZCg1OTI4KSxBPWQoMTE3MCksTT1kKDU0MTgpLE89ZCg0NTgyKSxEPWQoNjU0''@;'; put 'put ''NyksRT1kKDE1MjcpO2ouQXV0aE1hbmFnZXI9Y2xhc3MgQntjb25zdHJ1Y3RvcihILHosWixVKXt0aGlzLnNlcnZlclVybD1ILHRoaXMuc2VydmVyVHlwZT16LHRoaXMucmVxdWVzdENsaWVudD1aLHRoaXMubG9naW5DYWxsYmFjaz1VLHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05h''@;'; put 'put ''bWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9Sz0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgSS5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIEs/LmlkO2Nhc2UgSS5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuIiI7Y2Fz''@;'; put 'put ''ZSBJLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIEs/LnVzZXJuYW1lO2RlZmF1bHQ6cmV0dXJuIFMuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZT1LPT57c3dpdGNoKHRoaXMuc2Vy''@;'; put 'put ''dmVyVHlwZSl7Y2FzZSBJLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gSz8ubmFtZTtjYXNlIEkuU2VydmVyVHlwZS5TYXM5OnJldHVybigwLEEuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKEspO2Nhc2UgSS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBLPy5kaXNwbGF5TmFtZTtkZWZhdWx0''@;'; put 'put ''OnJldHVybiBTLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPUs9PntsZXQgWD1LWzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1YWzBdKXtYPVguc3Vic3RyKDEpO2NvbnN0IG5lPXRo''@;'; put 'put ''aXMuc2VydmVyVXJsP2Ake3RoaXMuc2VydmVyVXJsfS8ke1h9YDpgJHtYfWA7dGhpcy5sb2dpblVybD10aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzVml5YT9uZTpuZS5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5V''@;'; put 'put ''cmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09SS5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24v''@;'; put 'put ''bG9nb3V0Iix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD10aGlzLnNlcnZlclVybCt0aGlzLnJlZGlyZWN0ZWRMb2dpblVybH1yZWRpcmVjdGVkTG9nSW4oe29uTG9nZ2VkT3V0Okh9KXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7aXNMb2dnZWRJbjp6LHVz''@;'; put 'put ''ZXJOYW1lOlosdXNlckxvbmdOYW1lOlV9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2lmKHopcmV0dXJuKGgubG9nZ2VyfHxTKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMubG9naW5DYWxsYmFj''@;'; put 'put ''aygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOlosdXNlckxvbmdOYW1lOlV9O2NvbnN0IEs9eWllbGQoMCxNLm9wZW5XZWJQYWdlKSh0aGlzLnJlZGlyZWN0ZWRMb2dpblVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0sSCk7aWYoIUspcmV0dXJue2lzTG9nZ2VkSW46ITEs''@;'; put 'put ''dXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifTtjb25zdHtpc0xvZ2dlZEluOlh9PXRoaXMuc2VydmVyVHlwZT09PUkuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsRC52ZXJpZnlTYXNWaXlhTG9naW4pKEspOnlpZWxkKDAsTy52ZXJpZnlTYXM5TG9naW4pKEspO2lmKEsuY2xvc2UoKSxY''@;'; put 'put ''KXt0aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSk7Y29uc3R7dXNlck5hbWU6bmUsdXNlckxvbmdOYW1lOnNlfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtyZXR1cm4geWllbGQgdGhpcy5sb2dpbkNh''@;'; put 'put ''bGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6bmUsdXNlckxvbmdOYW1lOnNlfX1yZXR1cm57aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9fSl9bG9nSW4oSCx6KXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWj17''@;'; put 'put ''X3NlcnZpY2U6ImRlZmF1bHQiLHVzZXJuYW1lOkgscGFzc3dvcmQ6en07dGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIjtsZXR7aXNMb2dnZWRJbjpVLGxvZ2luRm9ybTpLLHVzZXJMb25nTmFtZTpYfT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO2lmKFUpcmV0dXJuKGgu''@;'; put 'put ''bG9nZ2VyfHxTKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9Wi51c2VybmFtZSx0aGlzLnVzZXJMb25nTmFtZT1YLHtpc0xvZ2dlZEluOiEwLHVz''@;'; put 'put ''ZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfTtsZXQgbmU9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KEssWiksc2U9KDAsRS5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQpKHRoaXMuc2VydmVyVHlwZSxuZSk7aWYoIXNlKXtpZihGKG5l''@;'; put 'put ''KSl7Y29uc3QgX2U9eWllbGQgdGhpcy5nZXRMb2dpbkZvcm0obmUpO25lPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVzdChfZSxaKX1jb25zdCBoZT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO3NlPWhlLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9aGUudXNlckxvbmdOYW1lfXJl''@;'; put 'put ''dHVybiBzZSYmKHRoaXMuc2VydmVyVHlwZT09PUkuU2VydmVyVHlwZS5TYXM5JiYoeWllbGQgdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpKSx0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPVoudXNlcm5hbWUpLHtpc0xvZ2dlZEluOnNlLHVzZXJOYW1lOnRoaXMudXNl''@;'; put 'put ''ck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfX0pfXBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEg9YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU1N0b3JlZFByb2Nlc3Mval9zcHJpbmdfY2FzX3Nl''@;'; put 'put ''Y3VyaXR5X2NoZWNrYDt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvU0FTTG9nb24vbG9naW4/c2VydmljZT0ke0h9YCx2b2lkIDApLmNhdGNoKHo9PntpZighKHogaW5zdGFuY2VvZiBmLk5vdEZvdW5kRXJyb3IpKXRocm93IHp9KX0pfXNlbmRMb2dpblJlcXVlc3QoSCx6KXtyZXR1''@;'; put 'put ''cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09SS5TZXJ2ZXJUeXBlLlNhc2pzKXtjb25zdHt1c2VybmFtZTpLLHBhc3N3b3JkOlh9PXose3Jlc3VsdDpuZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCx7''@;'; put 'put ''dXNlcm5hbWU6SyxwYXNzd29yZDpYfSx2b2lkIDApO3JldHVybiBuZX1mb3IoY29uc3QgSyBpbiBIKXpbS109SFtLXTtjb25zdCBaPSgwLFQuc2VyaWFsaXplKSh6KSx7cmVzdWx0OlV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwsWix2b2lkIDAsInRleHQv''@;'; put 'put ''cGxhaW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9KTtyZXR1cm4gVX0pfWNoZWNrU2Vzc2lvbigpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOkgsdXNlck5h''@;'; put 'put ''bWU6eix1c2VyTG9uZ05hbWU6Wn09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7bGV0IFU9bnVsbDtyZXR1cm4gSHx8KHlpZWxkIHRoaXMubG9nT3V0KCksVT15aWVsZCB0aGlzLmdldE5ld0xvZ2luRm9ybSgpKSxQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46SCx1c2VyTmFtZTp6LHVz''@;'; put 'put ''ZXJMb25nTmFtZTpaLGxvZ2luRm9ybTpVfSl9KX1nZXROZXdMb2dpbkZvcm0oKXtyZXR1cm4gbyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09SS5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lk''@;'; put 'put ''IDApLnRoZW4oKHtyZXN1bHQ6en0pPT57dmFyIFo7Y29uc3QgVT1udWxsPT09KFo9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHopKXx8dm9pZCAwPT09''@;'; put 'put ''Wj92b2lkIDA6WlsxXTtVJiYoZG9jdW1lbnQuY29va2llPVUpfSk7Y29uc3R7cmVzdWx0Okh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dpblVybC5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKSx2b2lkIDAsInRleHQvcGxhaW4i''@;'; put 'put ''KTtyZXR1cm4geWllbGQgdGhpcy5nZXRMb2dpbkZvcm0oSCl9KX1mZXRjaFVzZXJOYW1lKCl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEg9dGhpcy5zZXJ2ZXJUeXBlPT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/YCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50''@;'; put 'put ''aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyYDp0aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzOT9gJHt0aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzc2A6YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU2pzQXBpL3Nlc3Npb25gLHtyZXN1bHQ6en09eWllbGQgdGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50LmdldChILHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKFU9Pih7cmVzdWx0OiJhdXRoRXJyIn0pKSxaPSJhdXRoRXJyIiE9PXo7cmV0dXJuIFo/e2lzTG9nZ2VkSW46Wix1c2VyTmFtZTp0aGlzLmV4dHJhY3RVc2VyTmFtZSh6KSx1c2VyTG9uZ05hbWU6dGhpcy5leHRyYWN0VXNl''@;'; put 'put ''ckxvbmdOYW1lKHopfTooeWllbGQgdGhpcy5sb2dPdXQoKSx7aXNMb2dnZWRJbjpaLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn0pfSl9Z2V0TG9naW5Gb3JtKEgpe2NvbnN0IFo9Lzxmb3JtLithY3Rpb249IiguKihMb2dvbnxsb2dpbilbXiJdKikuKj4vLmV4ZWMoSCksVT17fTtpZiha''@;'; put 'put ''JiZaLmxlbmd0aCl7dGhpcy5zZXRMb2dpblVybChaKTtjb25zdCBLPShIPUgucmVwbGFjZSgvPGlucHV0L2csIlxuPGlucHV0IikpLm1hdGNoKC88aW5wdXQuKiJoaWRkZW4iW14+XSo+L2cpO0smJksuZm9yRWFjaChYPT57Y29uc3QgbmU9WC5tYXRjaCgvbmFtZT0iKFteIl0qKSJcc3ZhbHVl''@;'; put 'put ''PSIoW14iXSopLyk7bmUmJm5lLmxlbmd0aCYmKFVbbmVbMV1dPW5lWzJdKX0pfXJldHVybiBPYmplY3Qua2V5cyhVKS5sZW5ndGg/VTpudWxsfWxvZ091dCgpe3JldHVybiBvKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyQ3Ny''@;'; put 'put ''ZlRva2VucygpLHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dvdXRVcmwsdm9pZCAwKS50aGVuKCgpPT4hMCl9KX19O2NvbnN0IEY9Tj0+L0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHZlcmlmeWluZyB5b3VyIGNyZWRlbnRpYWxzLiBQbGVhc2UgZW50ZXIg''@;'; put 'put ''eW91ciBjcmVkZW50aWFscyBhZ2Fpbi4vZ20udGVzdChOKX0sNTc6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFQsQSxNLE8pe3JldHVybiBuZXcoTXx8KE09UHJvbWlzZSkpKGZ1bmN0aW9uKEUsQil7ZnVuY3Rpb24g''@;'; put 'put ''Rih6KXt0cnl7SChPLm5leHQoeikpfWNhdGNoKFope0IoWil9fWZ1bmN0aW9uIE4oeil7dHJ5e0goTy50aHJvdyh6KSl9Y2F0Y2goWil7QihaKX19ZnVuY3Rpb24gSCh6KXt6LmRvbmU/RSh6LnZhbHVlKTpmdW5jdGlvbiBEKEUpe3JldHVybiBFIGluc3RhbmNlb2YgTT9FOm5ldyBNKGZ1bmN0''@;'; put 'put ''aW9uKEIpe0IoRSl9KX0oei52YWx1ZSkudGhlbihGLE4pfUgoKE89Ty5hcHBseShULEF8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPXZvaWQgMDtjb25zdCBoPWQoOTc3OCks''@;'; put 'put ''bz1kKDkwMTcpLEk9ZCgzOTAwKTtqLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24gZihULEEsTSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89Ii9TQVNqc0FwaS9hdXRoL3Rva2VuIixEPXtjbGllbnRJZDpBLGNvZGU6TX07cmV0dXJuIHlp''@;'; put 'put ''ZWxkIFQucG9zdChPLEQsdm9pZCAwKS50aGVuKEU9Pntjb25zdCBCPUUucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46Qi5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOkIucmVmcmVzaFRva2VufX0pLmNhdGNoKEU9Pnt0aHJvdygwLGgucHJlZml4TWVzc2FnZSkoRSwoMCxvLmdldFRva2Vu''@;'; put 'put ''UmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcyIsSS5TZXJ2ZXJUeXBlLlNhc2pzLE8sRCxBKSl9KX0pfX0sMzU2OTpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg3NjQpLkJ1ZmZlcixoPXRoaXMm''@;'; put 'put ''JnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihNLE8sRCxFKXtyZXR1cm4gbmV3KER8fChEPVByb21pc2UpKShmdW5jdGlvbihGLE4pe2Z1bmN0aW9uIEgoVSl7dHJ5e1ooRS5uZXh0KFUpKX1jYXRjaChLKXtOKEspfX1mdW5jdGlvbiB6KFUpe3RyeXtaKEUudGhyb3coVSkpfWNhdGNoKEspe04o''@;'; put 'put ''Syl9fWZ1bmN0aW9uIFooVSl7VS5kb25lP0YoVS52YWx1ZSk6ZnVuY3Rpb24gQihGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEQ/RjpuZXcgRChmdW5jdGlvbihOKXtOKEYpfSl9KFUudmFsdWUpLnRoZW4oSCx6KX1aKChFPUUuYXBwbHkoTSxPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPXZvaWQgMDtjb25zdCBvPWQoMzkwMCksST1kKDk3NzgpLGY9ZCgxMzk1KSxUPWQoOTAxNyk7ai5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24gQShNLE8sRCxFKXtyZXR1cm4g''@;'; put 'put ''aCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IEI7Qj10eXBlb2YgUz4idSI/YnRvYShPKyI6IitEKTpTLmZyb20oTysiOiIrRCkudG9TdHJpbmcoImJhc2U2NCIpO2NvbnN0IEY9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsTj17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitCLEFj''@;'; put 'put ''Y2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LEg9bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOkV9KSx6PW5ldyBVUkxTZWFyY2hQYXJhbXMoSCk7cmV0dXJuIHlpZWxkIE0ucG9zdChGLHosdm9pZCAwLCJhcHBsaWNhdGlvbi94LXd3dy1m''@;'; put 'put ''b3JtLXVybGVuY29kZWQiLE4pLnRoZW4oVT0+VS5yZXN1bHQpLmNhdGNoKFU9Pnt0aHJvdyBVIGluc3RhbmNlb2YgZi5DZXJ0aWZpY2F0ZUVycm9yP1U6KDAsSS5wcmVmaXhNZXNzYWdlKShVLCgwLFQuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4i''@;'; put 'put ''LCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLG8uU2VydmVyVHlwZS5TYXNWaXlhLEYsSCxOLE8sRCkpfSl9KX19LDkwMTc6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQ''@;'; put 'put ''cmVmaXhSZXNwb25zZT1qLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDtjb25zdCBTPWQoMzkwMCksbz1UPT5gUmVzcG9uc2UgZnJvbSAkeyhUPT5UPT09Uy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/IlZpeWEiOiJTYXNqcyIpKFQpfSBpcyBiZWxvdy5gO2ouZ2V0VG9rZW5SZXF1ZXN0''@;'; put 'put ''RXJyb3JQcmVmaXg9KFQsQSxNLE8sRCxFLEIsRik9Pntjb25zdCBOPXo9PkpTT04uc3RyaW5naWZ5KHosbnVsbCwyKSxIPVtgRXJyb3Igd2hpbGUgJHtUfSBmcm9tICR7T31gLGBUaHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICR7QX0gZnVuY3Rpb24uYF07cmV0dXJuIEQmJihILnB1c2go''@;'; put 'put ''IlBheWxvYWQ6IiksSC5wdXNoKE4oRCkpKSxFJiYoSC5wdXNoKCJIZWFkZXJzOiIpLEgucHVzaChOKEUpKSksQiYmSC5wdXNoKGBDbGllbnRJZDogJHtCfWApLEYmJkgucHVzaChgQ2xpZW50U2VjcmV0OiAke0Z9YCksSC5wdXNoKCIiKSxILnB1c2goYCR7byhNKX1gKSxILnB1c2goIiIpLEgu''@;'; put 'put ''am9pbigiXG4iKX0sai5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPShULEEpPT5ULnNwbGl0KGAke28oQSl9XG5gKS5wb3AoKX0sNzA0OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDE1NSksaD1kKDUxMDgpLG89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8''@;'; put 'put ''fGZ1bmN0aW9uKE8sRCxFLEIpe3JldHVybiBuZXcoRXx8KEU9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sSCl7ZnVuY3Rpb24geihLKXt0cnl7VShCLm5leHQoSykpfWNhdGNoKFgpe0goWCl9fWZ1bmN0aW9uIFooSyl7dHJ5e1UoQi50aHJvdyhLKSl9Y2F0Y2goWCl7SChYKX19ZnVuY3Rpb24gVShL''@;'; put 'put ''KXtLLmRvbmU/TihLLnZhbHVlKTpmdW5jdGlvbiBGKE4pe3JldHVybiBOIGluc3RhbmNlb2YgRT9OOm5ldyBFKGZ1bmN0aW9uKEgpe0goTil9KX0oSy52YWx1ZSkudGhlbih6LFopfVUoKEI9Qi5hcHBseShPLER8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRUb2tlbnM9dm9pZCAwO2NvbnN0IEk9ZCg2Nzk5KSxmPWQoMzkwMCksVD1kKDM2NiksQT1kKDI0OSk7ai5nZXRUb2tlbnM9ZnVuY3Rpb24gTShPLEQsRT1mLlNlcnZlclR5cGUuU2FzVml5YSl7cmV0dXJuIG8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IEI9Uy5sb2dnZXJ8fGg7bGV0e2FjY2Vzc190b2tlbjpGLHJlZnJlc2hfdG9rZW46TixjbGllbnQ6SCxzZWNyZXQ6en09RDtpZigoMCxJLmlzQWNjZXNzVG9rZW5FeHBpcmluZykoRil8fCgwLEkuaXNSZWZyZXNoVG9rZW5FeHBpcmluZykoTikpe2lmKCgwLEkuaGFz''@;'; put 'put ''VG9rZW5FeHBpcmVkKShOKSl7Y29uc3QgVT0iVW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIjt0aHJvdyBCLmVycm9yKFUpLG5ldyBFcnJvcihVKX1CLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZyZXNoIHRv''@;'; put 'put ''a2Vucy4iKSwoe2FjY2Vzc190b2tlbjpGLHJlZnJlc2hfdG9rZW46Tn09RT09PWYuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsVC5yZWZyZXNoVG9rZW5zRm9yVml5YSkoTyxILHosTik6eWllbGQoMCxBLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoTyxOKSl9cmV0dXJue2FjY2Vzc190b2tl''@;'; put 'put ''bjpGLHJlZnJlc2hfdG9rZW46TixjbGllbnQ6SCxzZWNyZXQ6en19KX19LDE1Mjc6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG8sSSxmLFQpe3ZvaWQgMD09PVQmJihUPWYpO3Zh''@;'; put 'put ''ciBBPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSSxmKTsoIUF8fCgiZ2V0ImluIEE/IUkuX19lc01vZHVsZTpBLndyaXRhYmxlfHxBLmNvbmZpZ3VyYWJsZSkpJiYoQT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSVtmXX19KSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkobyxULEEpfTpmdW5jdGlvbihvLEksZixUKXt2b2lkIDA9PT1UJiYoVD1mKSxvW1RdPUlbZl19KSxoPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihvLEkpe2Zvcih2YXIgZiBpbiBvKSJkZWZhdWx0IiE9PWYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''LmNhbGwoSSxmKSYmUyhJLG8sZil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxoKGQoMjg1MSksaiksaChkKDkwOTcpLGopLGgoZCg5MTY2KSxqKSxoKGQoNjY0Myksail9LDkwOTc6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPXZvaWQgMCxqLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPVM9Pi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblwvb2F1dGhcL2F1dGhvcml6ZVteIl0qKS4qPi9nbS50ZXN0KFMpfSw5MTY2''@;'; put 'put ''Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5pc0xvZ0luUmVxdWlyZWQ9dm9pZCAwLGouaXNMb2dJblJlcXVpcmVkPVM9Pi88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb24pfChsb2dpbilbXiJdKikuKj4vZ20u''@;'; put 'put ''dGVzdChTKX0sNjY0MzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQ9ai5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj1qLmxvZ2luU3VjY2Vzc0hl''@;'; put 'put ''YWRlcnM9ai5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleT12b2lkIDA7Y29uc3QgUz1kKDM5MDApLGg9ZCg1OTI4KSxvPSJZb3UgaGF2ZSBzaWduZWQgaW4uIjtqLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PSJkZWZhdWx0IixqLmxvZ2luU3VjY2Vzc0hlYWRlcnM9e2VzOiJZYSBzZSBoYSBpbmlj''@;'; put 'put ''aWFkbyBsYSBzZXNpXHhmM24uIix0aDoiXHUwZTA0XHUwZTM4XHUwZTEzXHUwZTI1XHUwZTA3XHUwZTBhXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTQwXHUwZTAyXHUwZTQ5XHUwZTMyXHUwZTQzXHUwZTBhXHUwZTQ5XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IixqYToiXHUzMGI1XHUzMGE0XHUz''@;'; put 'put ''MGYzXHUzMGE0XHUzMGYzXHUzMDU3XHUzMDdlXHUzMDU3XHUzMDVmXHUzMDAyIixuYjoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixzbDoiUHJpamF2aWxpIHN0ZSBzZS4iLGFyOiJcdTA2NDRcdTA2NDJcdTA2MmYgXHUwNjQyXHUwNjQ1XHUwNjJhICIsc2s6IlByaWhsXHhlMXNpbGkgc3Rl''@;'; put 'put ''IHNhLiIsemhfSEs6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsemhfQ046Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NWY1NVx1MzAwMiIsaXQ6IkwndXRlbnRlIHNpIFx4ZTggY29ubmVzc28uIixzdjoiRHUgaGFyIGxvZ2dhdCBpbi4iLGhlOiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1''@;'; put 'put ''ZTFcdTA1ZWEgIixubDoiVSBoZWJ0IHppY2ggYWFuZ2VtZWxkLiIscGw6Ilpvc3RhXHUwMTQyZVx1MDE1YiB6YWxvZ293YW55LiIsa286Ilx1Yjg1Y1x1YWRmOFx1Yzc3OFx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4iLHpoX1RXOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHRy''@;'; put 'put ''OiJPdHVydW0gYVx4ZTd0XHUwMTMxblx1MDEzMXouIixpdzoiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsZnI6IlZvdXMgXHhlYXRlcyBjb25uZWN0XHhlOS4iLHVrOiJcdTA0MTJcdTA0MzggXHUwNDMyXHUwNDMyXHUwNDU2XHUwNDM5XHUwNDQ4XHUwNDNiXHUwNDM4IFx1MDQz''@;'; put 'put ''MiBcdTA0M2VcdTA0MzFcdTA0M2JcdTA0NTZcdTA0M2FcdTA0M2VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDM3XHUwNDMwXHUwNDNmXHUwNDM4XHUwNDQxLiIscHRfQlI6IlZvY1x4ZWEgc2UgY29uZWN0b3UuIixubzoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixjczoiSnN0ZSBwXHUwMTU5''@;'; put 'put ''aWhsXHhlMVx1MDE2MWVuaS4iLGZpOiJPbGV0IGtpcmphdXR1bnV0IHNpc1x4ZTRceGU0bi4iLHJ1OiJcdTA0MTJcdTA0NGIgXHUwNDMyXHUwNDRiXHUwNDNmXHUwNDNlXHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNiXHUwNDM4IFx1MDQzMlx1MDQ0NVx1MDQzZVx1MDQzNCBcdTA0MzIgXHUwNDQx''@;'; put 'put ''XHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDQzLiIsZWw6Ilx1MDM4OFx1MDNjN1x1MDNiNVx1MDNjNFx1MDNiNSBcdTAzYzNcdTAzYzVcdTAzYmRcdTAzYjRcdTAzYjVcdTAzYjhcdTAzYjVcdTAzYWYuIixocjoiUHJpamF2aWxpIHN0ZSBzZS4iLGRhOiJEdSBlciBsb2dnZXQg''@;'; put 'put ''cFx4ZTUuIixkZToiU2llIHNpbmQgamV0enQgYW5nZW1lbGRldC4iLHNoOiJQcmlqYXZsamVuaSBzdGUuIixwdDoiSW5pY2lvdSBzZXNzXHhlM28uIixodToiQmVqZWxlbnRrZXpldHQuIixzcjoiUHJpamF2bGplbmkgc3RlLiIsZW46byxbai5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV06b30s''@;'; put 'put ''ai5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj0oKT0+e2xldCBUPWoubG9naW5TdWNjZXNzSGVhZGVyc1tqLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTtjb25zdCBBPSgwLGguZ2V0VXNlckxhbmd1YWdlKSgpO2lmKEEpe2xldCBNPWoubG9naW5TdWNjZXNzSGVhZGVyc1tBXTtpZihN''@;'; put 'put ''KVQ9TTtlbHNle2NvbnN0IEQ9T2JqZWN0LmtleXMoai5sb2dpblN1Y2Nlc3NIZWFkZXJzKS5maW5kKEU9Pm5ldyBSZWdFeHAoRSwiaSIpLnRlc3QoQSkpO0QmJihUPWoubG9naW5TdWNjZXNzSGVhZGVyc1tEXSl9fXJldHVybiBUfSxqLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD0oVCxB''@;'; put 'put ''KT0+VD09PVMuU2VydmVyVHlwZS5TYXNqcz9BPy5sb2dnZWRJbjpuZXcgUmVnRXhwKCgwLGouZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCksImdtIikudGVzdChBKX0sNTQxODpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8''@;'; put 'put ''ZnVuY3Rpb24oZixULEEsTSl7cmV0dXJuIG5ldyhBfHwoQT1Qcm9taXNlKSkoZnVuY3Rpb24oRCxFKXtmdW5jdGlvbiBCKEgpe3RyeXtOKE0ubmV4dChIKSl9Y2F0Y2goeil7RSh6KX19ZnVuY3Rpb24gRihIKXt0cnl7TihNLnRocm93KEgpKX1jYXRjaCh6KXtFKHopfX1mdW5jdGlvbiBOKEgp''@;'; put 'put ''e0guZG9uZT9EKEgudmFsdWUpOmZ1bmN0aW9uIE8oRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBBP0Q6bmV3IEEoZnVuY3Rpb24oRSl7RShEKX0pfShILnZhbHVlKS50aGVuKEIsRil9TigoTT1NLmFwcGx5KGYsVHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxqLm9wZW5XZWJQYWdlPXZvaWQgMDtjb25zdCBoPWQoMTIxMCksbz17d2lkdGg6NTAwLGhlaWdodDo2MDB9O2oub3BlbldlYlBhZ2U9ZnVuY3Rpb24gSShmLFQ9IiIsQT1vLE0pe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25z''@;'; put 'put ''dHt3aWR0aDpPLGhlaWdodDpEfT1BLEU9c2NyZWVuLndpZHRoLzItTy8yLEI9c2NyZWVuLmhlaWdodC8yLUQvMjtyZXR1cm4gd2luZG93Lm9wZW4oZixULGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHtPfSxoZWlnaHQ9JHtEfSxsZWZ0PSR7RX0sdG9wPSR7Qn1gKXx8''@;'; put 'put ''KCh5aWVsZChNPz9oLm9wZW5Mb2dpblByb21wdCkoKSk/d2luZG93Lm9wZW4oZixULGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHtPfSxoZWlnaHQ9JHtEfSxsZWZ0PSR7RX0sdG9wPSR7Qn1gKTpudWxsKX0pfX0sMjQ5OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihULEEsTSxPKXtyZXR1cm4gbmV3KE18fChNPVByb21pc2UpKShmdW5jdGlvbihFLEIpe2Z1bmN0aW9uIEYoeil7dHJ5e0goTy5uZXh0KHopKX1jYXRjaChaKXtCKFopfX1mdW5jdGlvbiBOKHope3RyeXtIKE8udGhyb3co''@;'; put 'put ''eikpfWNhdGNoKFope0IoWil9fWZ1bmN0aW9uIEgoeil7ei5kb25lP0Uoei52YWx1ZSk6ZnVuY3Rpb24gRChFKXtyZXR1cm4gRSBpbnN0YW5jZW9mIE0/RTpuZXcgTShmdW5jdGlvbihCKXtCKEUpfSl9KHoudmFsdWUpLnRoZW4oRixOKX1IKChPPU8uYXBwbHkoVCxBfHxbXSkpLm5leHQoKSl9''@;'; put 'put ''KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoucmVmcmVzaFRva2Vuc0ZvclNhc2pzPXZvaWQgMDtjb25zdCBoPWQoOTc3OCksbz1kKDkwMTcpLEk9ZCgzOTAwKTtqLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz1mdW5jdGlvbiBmKFQsQSl7cmV0dXJu''@;'; put 'put ''IFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE09Ii9TQVNqc0FwaS9hdXRoL3JlZnJlc2giLE89e0F1dGhvcml6YXRpb246IkJlYXJlciAiK0F9O3JldHVybiB5aWVsZCBULnBvc3QoTSx2b2lkIDAsdm9pZCAwLHZvaWQgMCxPKS50aGVuKEU9Pntjb25zdCBCPUUucmVz''@;'; put 'put ''dWx0O3JldHVybnthY2Nlc3NfdG9rZW46Qi5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOkIucmVmcmVzaFRva2VufX0pLmNhdGNoKEU9Pnt0aHJvdygwLGgucHJlZml4TWVzc2FnZSkoRSwoMCxvLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZy''@;'; put 'put ''ZXNoVG9rZW5zRm9yU2FzanMiLEkuU2VydmVyVHlwZS5TYXNqcyxNKSl9KX0pfX0sMzY2OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODc2NCkuQnVmZmVyLGg9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEQsRSxCLEYpe3JldHVybiBuZXcoQnx8KEI9UHJv''@;'; put 'put ''bWlzZSkpKGZ1bmN0aW9uKEgseil7ZnVuY3Rpb24gWihYKXt0cnl7SyhGLm5leHQoWCkpfWNhdGNoKG5lKXt6KG5lKX19ZnVuY3Rpb24gVShYKXt0cnl7SyhGLnRocm93KFgpKX1jYXRjaChuZSl7eihuZSl9fWZ1bmN0aW9uIEsoWCl7WC5kb25lP0goWC52YWx1ZSk6ZnVuY3Rpb24gTihIKXty''@;'; put 'put ''ZXR1cm4gSCBpbnN0YW5jZW9mIEI/SDpuZXcgQihmdW5jdGlvbih6KXt6KEgpfSl9KFgudmFsdWUpLnRoZW4oWixVKX1LKChGPUYuYXBwbHkoRCxFfHxbXSkpLm5leHQoKSl9KX0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRCl7cmV0dXJuIEQmJkQuX19lc01vZHVs''@;'; put 'put ''ZT9EOntkZWZhdWx0OkR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5yZWZyZXNoVG9rZW5zRm9yVml5YT12b2lkIDA7Y29uc3QgST1kKDM5MDApLGY9ZCg5Nzc4KSxUPW8oZCg2MjMwKSksQT1kKDU5MjgpLE09ZCg5MDE3KTtqLnJlZnJlc2hU''@;'; put 'put ''b2tlbnNGb3JWaXlhPWZ1bmN0aW9uIE8oRCxFLEIsRil7cmV0dXJuIGgodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCEoMCxBLmlzTm9kZSkoKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAncmVmcmVzaFRva2Vuc0ZvclZpeWEnIGNhbiBvbmx5IGJlIHVzZWQgYnkgTm9kZS4i''@;'; put 'put ''KTtjb25zdCBOPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHo9e0F1dGhvcml6YXRpb246IkJhc2ljICIrKHR5cGVvZiBTPiJ1Ij9idG9hKEUrIjoiK0IpOlMuZnJvbShFKyI6IitCKS50b1N0cmluZygiYmFzZTY0IikpfSxaPW5ldyBULmRlZmF1bHQ7cmV0dXJuIFouYXBwZW5kKCJncmFudF90''@;'; put 'put ''eXBlIiwicmVmcmVzaF90b2tlbiIpLFouYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixGKSx5aWVsZCBELnBvc3QoTixaLHZvaWQgMCwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitaLl9ib3VuZGFyeSx6KS50aGVuKEs9PksucmVzdWx0KS5jYXRjaChLPT57dGhyb3coMCxmLnByZWZp''@;'; put 'put ''eE1lc3NhZ2UpKEssKDAsTS5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclZpeWEiLEkuU2VydmVyVHlwZS5TYXNWaXlhLE4sWix6LEUsQikpfSl9KX19LDQ1ODI6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IFM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGYsVCxBLE0pe3JldHVybiBuZXcoQXx8KEE9UHJvbWlzZSkpKGZ1bmN0aW9uKEQsRSl7ZnVuY3Rpb24gQihIKXt0cnl7TihNLm5leHQoSCkpfWNhdGNoKHope0Uoeil9fWZ1bmN0aW9uIEYoSCl7dHJ5e04oTS50aHJvdyhIKSl9Y2F0''@;'; put 'put ''Y2goeil7RSh6KX19ZnVuY3Rpb24gTihIKXtILmRvbmU/RChILnZhbHVlKTpmdW5jdGlvbiBPKEQpe3JldHVybiBEIGluc3RhbmNlb2YgQT9EOm5ldyBBKGZ1bmN0aW9uKEUpe0UoRCl9KX0oSC52YWx1ZSkudGhlbihCLEYpfU4oKE09TS5hcHBseShmLFR8fFtdKSkubmV4dCgpKX0pfTtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai52ZXJpZnlTYXM5TG9naW49dm9pZCAwO2NvbnN0IGg9ZCg1OTI4KSxvPWQoMTUyNyk7ai52ZXJpZnlTYXM5TG9naW49ZnVuY3Rpb24gSShmKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7bGV0IFQ9ITEsQT1uZXcgRGF0ZSxNPTA7ZG97aWYoeWllbGQoMCxoLmRlbGF5KSgxZTMpLGYuY2xvc2VkKWJyZWFrO1Q9Zi53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKSYmZi53aW5kb3cuZG9jdW1lbnQuYm9keS5pbm5lclRleHQuaW5jbHVkZXMoKDAsby5n''@;'; put 'put ''ZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSksTT0oKG5ldyBEYXRlKS52YWx1ZU9mKCktQS52YWx1ZU9mKCkpLzFlM313aGlsZSghVCYmTTwzMDApO3JldHVybntpc0xvZ2dlZEluOlR9fSl9fSw2NTQ3OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRo''@;'; put 'put ''aXMuX19hd2FpdGVyfHxmdW5jdGlvbihULEEsTSxPKXtyZXR1cm4gbmV3KE18fChNPVByb21pc2UpKShmdW5jdGlvbihFLEIpe2Z1bmN0aW9uIEYoeil7dHJ5e0goTy5uZXh0KHopKX1jYXRjaChaKXtCKFopfX1mdW5jdGlvbiBOKHope3RyeXtIKE8udGhyb3coeikpfWNhdGNoKFope0IoWil9''@;'; put 'put ''fWZ1bmN0aW9uIEgoeil7ei5kb25lP0Uoei52YWx1ZSk6ZnVuY3Rpb24gRChFKXtyZXR1cm4gRSBpbnN0YW5jZW9mIE0/RTpuZXcgTShmdW5jdGlvbihCKXtCKEUpfSl9KHoudmFsdWUpLnRoZW4oRixOKX1IKChPPU8uYXBwbHkoVCxBfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouaXNMb2dnZWRJblNBU1ZJWUE9ai52ZXJpZnlTYXNWaXlhTG9naW49dm9pZCAwO2NvbnN0IGg9ZCg1OTI4KSxvPWQoMTUyNyk7ai52ZXJpZnlTYXNWaXlhTG9naW49ZnVuY3Rpb24gSShUKXt2YXIgQSxNO3JldHVybiBTKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgTz0hMSxEPW5ldyBEYXRlLEU9MDtkb3tpZih5aWVsZCgwLGguZGVsYXkpKDFlMyksVC5jbG9zZWQpYnJlYWs7Tz0oMCxqLmlzTG9nZ2VkSW5TQVNWSVlBKSgpLEU9KChuZXcgRGF0ZSkudmFsdWVPZigpLUQudmFsdWVPZigpKS8xZTN9d2hp''@;'; put 'put ''bGUoIU8mJkU8MzAwKTtsZXQgQj0hMTtEPW5ldyBEYXRlO2Rve2lmKHlpZWxkKDAsaC5kZWxheSkoMWUzKSxULmNsb3NlZClicmVhaztCPVQud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIil8fChudWxsPT09KE09bnVsbD09PShBPVQud2luZG93LmRvY3VtZW50LmJv''@;'; put 'put ''ZHkpfHx2b2lkIDA9PT1BP3ZvaWQgMDpBLmlubmVyVGV4dCl8fHZvaWQgMD09PU0/dm9pZCAwOk0uaW5jbHVkZXMoKDAsby5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSkpLEU9KChuZXcgRGF0ZSkudmFsdWVPZigpLUQudmFsdWVPZigpKS8xZTN9d2hpbGUoIUImJkU8MzAwKTty''@;'; put 'put ''ZXR1cm57aXNMb2dnZWRJbjpPJiZCfX0pfSxqLmlzTG9nZ2VkSW5TQVNWSVlBPSgpPT5kb2N1bWVudC5jb29raWUuaW5jbHVkZXMoIkN1cnJlbnQtVXNlciIpJiZkb2N1bWVudC5jb29raWUuaW5jbHVkZXMoInVzZXJJZCIpfSw0MDM3Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IFM9ZCgyNDAyKSxoPWQoNTkyOCk7ai5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPShJLGYpPT57Zm9yKGNvbnN0IFQgaW4gZil7aWYoIUFycmF5LmlzQXJy''@;'; put 'put ''YXkoZltUXSkpY29udGludWU7Y29uc3QgQT1ULE09KDAsUy5jb252ZXJ0VG9DU1YpKGYsVCk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU0pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0''@;'; put 'put ''ZXJzLiIpO2lmKCgwLGguaXNOb2RlKSgpKUkuYXBwZW5kKEEsTSx7ZmlsZW5hbWU6YCR7QX0uY3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7Y29uc3QgTz1uZXcgQmxvYihbTV0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtJLmFwcGVuZChBLE8sYCR7QX0uY3N2''@;'; put 'put ''YCl9fXJldHVybiBJfX0sMjE3MDoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7Y29uc3QgUz1kKDI0MDIpLGg9ZCg0Nzk5KTtqLmdlbmVyYXRlVGFi''@;'; put 'put ''bGVVcGxvYWRGb3JtPShJLGYpPT57Y29uc3QgVD1bXSxBPXt9O2xldCBNPTA7Zm9yKGNvbnN0IE8gaW4gZil7TSsrLCgwLFMuaXNGb3JtYXRzVGFibGUpKE8pfHxULnB1c2goTyk7Y29uc3QgRD0oMCxTLmNvbnZlcnRUb0NTVikoZixPKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgi''@;'; put 'put ''PT09RCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7RC5sZW5ndGg+MTZlMz8oMCxoLnNwbGl0Q2h1bmtzKShEKS5tYXAoQj0+e0kuYXBwZW5kKGBzYXNqcyR7TX1kYXRhYCxCKX0pOkFbYHNh''@;'; put 'put ''c2pzJHtNfWRhdGFgXT1EfXJldHVybiBBLnNhc2pzX3RhYmxlcz1ULmpvaW4oIiAiKSx7Zm9ybURhdGE6SSxyZXF1ZXN0UGFyYW1zOkF9fX0sMzYwNzpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/''@;'; put 'put ''ZnVuY3Rpb24oZixULEEsTSl7dm9pZCAwPT09TSYmKE09QSk7dmFyIE89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihULEEpOyghT3x8KCJnZXQiaW4gTz8hVC5fX2VzTW9kdWxlOk8ud3JpdGFibGV8fE8uY29uZmlndXJhYmxlKSkmJihPPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBUW0FdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLE0sTyl9OmZ1bmN0aW9uKGYsVCxBLE0pe3ZvaWQgMD09PU0mJihNPUEpLGZbTV09VFtBXX0pLGg9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGYsVCl7Zm9yKHZhciBBIGluIGYpImRlZmF1bHQi''@;'; put 'put ''IT09QSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChULEEpJiZTKFQsZixBKX0sbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZil7cmV0dXJuIGYmJmYuX19lc01vZHVsZT9mOntkZWZhdWx0OmZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgST1vKGQoNTk1NikpO2goZCgxMjMwKSxqKSxoKGQoMTM5NSksaiksaChkKDk4MjEpLGopLGgoZCg4MzA2KSxqKSxoKGQoMzQ2NyksaiksaChkKDM2MDIpLGopLGouZGVmYXVsdD1JLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24odGUsaixkKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFQsQSxNLE8pe3JldHVybiBuZXcoTXx8KE09UHJvbWlzZSkpKGZ1bmN0aW9uKEUsQil7ZnVuY3Rpb24gRih6KXt0cnl7SChPLm5leHQoeikpfWNhdGNoKFope0IoWil9fWZ1bmN0aW9uIE4oeil7dHJ5e0go''@;'; put 'put ''Ty50aHJvdyh6KSl9Y2F0Y2goWil7QihaKX19ZnVuY3Rpb24gSCh6KXt6LmRvbmU/RSh6LnZhbHVlKTpmdW5jdGlvbiBEKEUpe3JldHVybiBFIGluc3RhbmNlb2YgTT9FOm5ldyBNKGZ1bmN0aW9uKEIpe0IoRSl9KX0oei52YWx1ZSkudGhlbihGLE4pfUgoKE89Ty5hcHBseShULEF8fFtdKSku''@;'; put 'put ''bmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGg9ZCgzOTAwKSxvPWQoMTM5NSksST1kKDYxMTgpO2ouQ29tcHV0ZUpvYkV4ZWN1dG9yPWNsYXNzIGYgZXh0ZW5kcyBJLkJh''@;'; put 'put ''c2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihBLE0pe3N1cGVyKEEsaC5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD1NfWV4ZWN1dGUoQSxNLE8sRCxFKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgQj1EfHwoKCk9PlByb21p''@;'; put 'put ''c2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21pc2UoKHosWik9Pnt2YXIgVTtudWxsPT09KFU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09VXx8VS5leGVjdXRlQ29tcHV0ZUpvYihBLE8uY29udGV4dE5hbWUsTy5kZWJ1ZyxNLEUsITAsITApLnRoZW4oSz0+e3RoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEssQSxPLmRlYnVnKSx6KEsucmVzdWx0KX0pLmNhdGNoKEs9PlModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0sgaW5zdGFuY2VvZiBvLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBl''@;'; put 'put ''bmRSZXF1ZXN0KEssQSxPLmRlYnVnKSxaKG5ldyBvLkVycm9yUmVzcG9uc2UoSz8ubWVzc2FnZSxLKSkpLEsgaW5zdGFuY2VvZiBvLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEEsTSxPLEQpLnRoZW4oWD0+e3ooWCl9LFg9''@;'; put 'put ''PntaKFgpfSkpLHlpZWxkIEIoKSk6WihuZXcgby5FcnJvclJlc3BvbnNlKEs/Lm1lc3NhZ2UsSykpfSkpfSl9KX19fSwzNDkxOmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihBLE0sTyxEKXtyZXR1cm4gbmV3KE98fChP''@;'; put 'put ''PVByb21pc2UpKShmdW5jdGlvbihCLEYpe2Z1bmN0aW9uIE4oWil7dHJ5e3ooRC5uZXh0KFopKX1jYXRjaChVKXtGKFUpfX1mdW5jdGlvbiBIKFope3RyeXt6KEQudGhyb3coWikpfWNhdGNoKFUpe0YoVSl9fWZ1bmN0aW9uIHooWil7Wi5kb25lP0IoWi52YWx1ZSk6ZnVuY3Rpb24gRShCKXty''@;'; put 'put ''ZXR1cm4gQiBpbnN0YW5jZW9mIE8/QjpuZXcgTyhmdW5jdGlvbihGKXtGKEIpfSl9KFoudmFsdWUpLnRoZW4oTixIKX16KChEPUQuYXBwbHkoQSxNfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouRmlsZVVwbG9hZGVy''@;'; put 'put ''PXZvaWQgMDtjb25zdCBoPWQoNTkyOCksbz1kKDEzOTUpLEk9ZCgzOTAwKSxmPWQoNjExOCk7ai5GaWxlVXBsb2FkZXI9Y2xhc3MgVCBleHRlbmRzIGYuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKE0sTyxELEUpe3N1cGVyKE0sTyksdGhpcy5qb2JzUGF0aD1ELHRoaXMucmVxdWVzdENs''@;'; put 'put ''aWVudD1FfWV4ZWN1dGUoTSxPLEQsRSl7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2ZpbGVzOkIscGFyYW1zOkZ9PU8sTj1FfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtpZighQj8ubGVuZ3RoKXRocm93IG5ldyBvLkVycm9yUmVzcG9uc2UoIkF0IGxl''@;'; put 'put ''YXN0IG9uZSBmaWxlIG11c3QgYmUgcHJvdmlkZWQuIik7aWYoIU18fCIiPT09TSl0aHJvdyBuZXcgby5FcnJvclJlc3BvbnNlKCJzYXNKb2IgbXVzdCBiZSBwcm92aWRlZC4iKTtsZXQgSD0iIjtmb3IobGV0IHNlIGluIEYpRi5oYXNPd25Qcm9wZXJ0eShzZSkmJihIKz1gJiR7c2V9PSR7Rltz''@;'; put 'put ''ZV19YCk7Y29uc3Qgej1ELmFwcExvYz9ELmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK00ucmVwbGFjZSgvXlwvLywiIik6TSxaPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3p9JHtIfWAsVT1uZXcgRm9ybURhdGE7Zm9yKGxldCBzZSBvZiBCKVUuYXBwZW5kKCJmaWxlIixz''@;'; put 'put ''ZS5maWxlLHNlLmZpbGVOYW1lKTtjb25zdCBLPXRoaXMucmVxdWVzdENsaWVudC5nZXRDc3JmVG9rZW4oImZpbGUiKTtLJiZVLmFwcGVuZCgiX2NzcmYiLEsudmFsdWUpLEQuZGVidWcmJlUuYXBwZW5kKCJfZGVidWciLCIxMzEiKSxELnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzVml5''@;'; put 'put ''YSYmRC5jb250ZXh0TmFtZSYmVS5hcHBlbmQoIl9jb250ZXh0bmFtZSIsRC5jb250ZXh0TmFtZSk7Y29uc3QgWD17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn07cmV0dXJuIG5ldyBQcm9taXNlKChzZSxoZSk9Pnt0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQucG9zdChaLFUsdm9pZCAwLCJhcHBsaWNhdGlvbi9qc29uIixYKS50aGVuKF9lPT5TKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChfZSxNLEQuZGVidWcpO2xldCBtZT1fZS5yZXN1bHQ7aWYo''@;'; put 'put ''RC5kZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEkuU2VydmVyVHlwZS5TYXNWaXlhOm1lPXlpZWxkKDAsaC5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShfZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LEQuc2VydmVyVXJsKTticmVhaztjYXNlIEkuU2VydmVyVHlwZS5T''@;'; put 'put ''YXM5Om1lPSJzdHJpbmciPT10eXBlb2YgX2UucmVzdWx0PygwLGgucGFyc2VXZWJvdXRSZXNwb25zZSkoX2UucmVzdWx0LFopOl9lLnJlc3VsdDticmVhaztjYXNlIEkuU2VydmVyVHlwZS5TYXNqczptZT0ic3RyaW5nIj09dHlwZW9mIF9lLnJlc3VsdD8oMCxoLmdldFZhbGlkSnNvbikoX2Uu''@;'; put 'put ''cmVzdWx0KTpfZS5yZXN1bHR9ZWxzZSBtZT0ic3RyaW5nIj09dHlwZW9mIF9lLnJlc3VsdD8oMCxoLmdldFZhbGlkSnNvbikoX2UucmVzdWx0KTpfZS5yZXN1bHQ7c2UobWUpfSkpLmNhdGNoKF9lPT5TKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtfZSBpbnN0YW5jZW9mIG8uSm9i''@;'; put 'put ''RXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChfZSxNLEQuZGVidWcpLGhlKG5ldyBvLkVycm9yUmVzcG9uc2UoX2U/Lm1lc3NhZ2UsX2UpKSksX2UgaW5zdGFuY2VvZiBvLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVz''@;'; put 'put ''dCgoKT0+dGhpcy5leGVjdXRlKE0sTyxELEUpLnRoZW4obWU9PntzZShtZSl9LG1lPT57aGUobWUpfSkpLHlpZWxkIE4oKSk6aGUobmV3IG8uRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixfZSkpfSkpfSl9KX19fSw0NDQ2OmZ1bmN0aW9uKHRlLGosZCl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihBLE0sTyxEKXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihCLEYpe2Z1bmN0aW9uIE4oWil7dHJ5e3ooRC5uZXh0KFopKX1jYXRjaChVKXtGKFUpfX1mdW5jdGlvbiBIKFope3RyeXt6KEQu''@;'; put 'put ''dGhyb3coWikpfWNhdGNoKFUpe0YoVSl9fWZ1bmN0aW9uIHooWil7Wi5kb25lP0IoWi52YWx1ZSk6ZnVuY3Rpb24gRShCKXtyZXR1cm4gQiBpbnN0YW5jZW9mIE8/QjpuZXcgTyhmdW5jdGlvbihGKXtGKEIpfSl9KFoudmFsdWUpLnRoZW4oTixIKX16KChEPUQuYXBwbHkoQSxNfHxbXSkpLm5l''@;'; put 'put ''eHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouSmVzSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGg9ZCgzOTAwKSxvPWQoMTM5NSksST1kKDYxMTgpLGY9ZCg1OTI4KTtqLkplc0pvYkV4ZWN1dG9yPWNsYXNzIFQgZXh0ZW5kcyBJLkJh''@;'; put 'put ''c2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihNLE8pe3N1cGVyKE0saC5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD1PfWV4ZWN1dGUoTSxPLEQsRSxCLEY9W10pe3JldHVybiBTKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBOPUV8fCgoKT0+''@;'; put 'put ''UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgoeixaKT0+e3ZhciBVO251bGw9PT0oVT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1VfHxVLmV4ZWN1dGVKb2IoTSxELmNvbnRleHROYW1lLEQuZGVidWcsTyxCKS50aGVuKEs9Pnt0aGlzLnNhc1ZpeWFBcGlD''@;'; put 'put ''bGllbnQuYXBwZW5kUmVxdWVzdChLLE0sRC5kZWJ1Zyk7Y29uc3QgWD0oMCxmLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShLLEYpO3ooWCl9KS5jYXRjaChLPT5TKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtLIGluc3RhbmNlb2Ygby5Kb2JFeGVjdXRpb25FcnJvciYm''@;'; put 'put ''KHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEssTSxELmRlYnVnKSxaKG5ldyBvLkVycm9yUmVzcG9uc2UoSz8ubWVzc2FnZSxLKSkpLEsgaW5zdGFuY2VvZiBvLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRl''@;'; put 'put ''KE0sTyxELEUsQixGKS50aGVuKFg9Pnt6KFgpfSxYPT57WihYKX0pKSx5aWVsZCBOKCkpOloobmV3IG8uRXJyb3JSZXNwb25zZShLPy5tZXNzYWdlLEspKX0pKX0pfSl9fX0sNjExODpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVu''@;'; put 'put ''Y3Rpb24oSSxmLFQsQSl7cmV0dXJuIG5ldyhUfHwoVD1Qcm9taXNlKSkoZnVuY3Rpb24oTyxEKXtmdW5jdGlvbiBFKE4pe3RyeXtGKEEubmV4dChOKSl9Y2F0Y2goSCl7RChIKX19ZnVuY3Rpb24gQihOKXt0cnl7RihBLnRocm93KE4pKX1jYXRjaChIKXtEKEgpfX1mdW5jdGlvbiBGKE4pe04u''@;'; put 'put ''ZG9uZT9PKE4udmFsdWUpOmZ1bmN0aW9uIE0oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiBUP086bmV3IFQoZnVuY3Rpb24oRCl7RChPKX0pfShOLnZhbHVlKS50aGVuKEUsQil9RigoQT1BLmFwcGx5KEksZnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KSxqLkJhc2VKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgaD1kKDU5MjgpO2ouQmFzZUpvYkV4ZWN1dG9yPWNsYXNzIG97Y29uc3RydWN0b3IoZixUKXt0aGlzLnNlcnZlclVybD1mLHRoaXMuc2VydmVyVHlwZT1ULHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdLHRoaXMu''@;'; put 'put ''cmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT5TKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLGguYXN5bmNGb3JFYWNoKSh0aGlzLndhaXRpbmdSZXF1ZXN0cyxBPT5TKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBBKCl9KSksdGhpcy53YWl0aW5n''@;'; put 'put ''UmVxdWVzdHM9W119KX1hcHBlbmRXYWl0aW5nUmVxdWVzdChmKXt0aGlzLndhaXRpbmdSZXF1ZXN0cy5wdXNoKGYpfWdldFJlcXVlc3RQYXJhbXMoZil7Y29uc3QgVD17fTtyZXR1cm4gZi5kZWJ1ZyYmKFQuX29taXR0ZXh0bG9nPSJmYWxzZSIsVC5fb21pdFNlc3Npb25SZXN1bHRzPSJmYWxz''@;'; put 'put ''ZSIsVC5fZGVidWc9MTMxKSxUfX19LDI2OTM6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEQsRSxCLEYpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEgseil7ZnVuY3Rpb24gWihYKXt0cnl7SyhG''@;'; put 'put ''Lm5leHQoWCkpfWNhdGNoKG5lKXt6KG5lKX19ZnVuY3Rpb24gVShYKXt0cnl7SyhGLnRocm93KFgpKX1jYXRjaChuZSl7eihuZSl9fWZ1bmN0aW9uIEsoWCl7WC5kb25lP0goWC52YWx1ZSk6ZnVuY3Rpb24gTihIKXtyZXR1cm4gSCBpbnN0YW5jZW9mIEI/SDpuZXcgQihmdW5jdGlvbih6KXt6''@;'; put 'put ''KEgpfSl9KFgudmFsdWUpLnRoZW4oWixVKX1LKChGPUYuYXBwbHkoRCxFfHxbXSkpLm5leHQoKSl9KX0saD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRCl7cmV0dXJuIEQmJkQuX19lc01vZHVsZT9EOntkZWZhdWx0OkR9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5TYXM5Sm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IG89aChkKDYyMzApKSxJPWQoMTM5NSksZj1kKDU5MjgpLFQ9ZCg2MTE4KSxBPWQoNzk1KTtqLlNhczlKb2JFeGVjdXRvcj1jbGFzcyBNIGV4dGVuZHMgVC5CYXNlSm9iRXhlY3V0b3J7Y29uc3Ry''@;'; put 'put ''dWN0b3IoRSxCLEYsTixIKXtzdXBlcihFLEIpLHRoaXMuam9ic1BhdGg9Rix0aGlzLnJlcXVlc3RDbGllbnQ9Tix0aGlzLnNhczlSZXF1ZXN0Q2xpZW50PW5ldyBBLlNhczlSZXF1ZXN0Q2xpZW50KEUsSCl9ZXhlY3V0ZShFLEIsRil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2NvbnN0IE49KDAsZi5pc1JlbGF0aXZlUGF0aCkoRSkmJkYuYXBwTG9jP0YuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrRS5yZXBsYWNlKC9eXC8vLCIiKTpFO2xldCBIPWAke0Yuc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0/JHsiX3Byb2dyYW09IitOfWA7SD1gJHtIfSR7''@;'; put 'put ''Ri51c2VybmFtZSYmRi5wYXNzd29yZD8iJl91c2VybmFtZT0iK0YudXNlcm5hbWUrIiZfcGFzc3dvcmQ9IitGLnBhc3N3b3JkOiIifWAsSD1gJHtIfSR7Ri5kZWJ1Zz8iJl9kZWJ1Zz0xMzEiOiIifWA7bGV0IHo9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoRikpLFo9''@;'; put 'put ''bmV3IG8uZGVmYXVsdDtpZihCKXRyeXtaPU8oWixCKX1jYXRjaChYKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEkuRXJyb3JSZXNwb25zZShYPy5tZXNzYWdlLFgpKX1lbHNlIEI9IiI7Zm9yKGNvbnN0IFggaW4geil6Lmhhc093blByb3BlcnR5KFgpJiZaLmFwcGVuZChYLHpbWF0pO3lp''@;'; put 'put ''ZWxkIHRoaXMuc2FzOVJlcXVlc3RDbGllbnQubG9naW4oRi51c2VybmFtZSxGLnBhc3N3b3JkLHRoaXMuam9ic1BhdGgpO2NvbnN0IFU9QiYmT2JqZWN0LmtleXMoQikubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK1ouX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIjtyZXR1''@;'; put 'put ''cm4gbmV3IFByb21pc2UoKFgsbmUpPT50aGlzLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoSCxaLHZvaWQgMCxVLHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKHNlPT57dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3Qoc2UsRSxGLmRlYnVnKSxYKHNl''@;'; put 'put ''KX0pLmNhdGNoKHNlPT57bGV0IGhlPXNlO3NlLnJlc3VsdCYmIiIhPT1zZS5yZXN1bHQ/aGU9c2UucmVzdWx0OnNlLm1lc3NhZ2UmJihoZT1zZS5tZXNzYWdlKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChoZSxFLEYuZGVidWcpLG5lKG5ldyBJLkVycm9yUmVzcG9uc2Uoc2U/''@;'; put 'put ''Lm1lc3NhZ2Usc2UpKX0pKX0pfWdldFJlcXVlc3RQYXJhbXMoRSl7Y29uc3QgQj17fTtyZXR1cm4gRS5kZWJ1ZyYmKEIuX2RlYnVnPTEzMSksQn19O2NvbnN0IE89KEQsRSk9Pntmb3IoY29uc3QgQiBpbiBFKXtjb25zdCBGPUIsTj0oMCxmLmNvbnZlcnRUb0NTVikoRSxCKTtpZigiRVJST1I6''@;'; put 'put ''IExBUkdFIFNUUklORyBMRU5HVEgiPT09Til0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7RC5hcHBlbmQoRixOLHtmaWxlbmFtZTpgJHtGfS5jc3ZgLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlv''@;'; put 'put ''bi9jc3YifSl9cmV0dXJuIER9fSwxMDY1OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLEIsRixOKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbih6LFope2Z1bmN0aW9uIFUobmUpe3RyeXtYKE4u''@;'; put 'put ''bmV4dChuZSkpfWNhdGNoKHNlKXtaKHNlKX19ZnVuY3Rpb24gSyhuZSl7dHJ5e1goTi50aHJvdyhuZSkpfWNhdGNoKHNlKXtaKHNlKX19ZnVuY3Rpb24gWChuZSl7bmUuZG9uZT96KG5lLnZhbHVlKTpmdW5jdGlvbiBIKHope3JldHVybiB6IGluc3RhbmNlb2YgRj96Om5ldyBGKGZ1bmN0aW9u''@;'; put 'put ''KFope1ooeil9KX0obmUudmFsdWUpLnRoZW4oVSxLKX1YKChOPU4uYXBwbHkoRSxCfHxbXSkpLm5leHQoKSl9KX0saD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJkUuX19lc01vZHVsZT9FOntkZWZhdWx0OkV9fTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBvPWgoZCg2MjMwKSksST1kKDM5MDApLGY9ZCgxMzk1KSxUPWQoNDAzNyksQT1kKDU5MjgpLE09ZCg1OTI4KSxPPWQoNjExOCk7ai5TYXNqc0pvYkV4ZWN1dG9yPWNsYXNzIEQgZXh0''@;'; put 'put ''ZW5kcyBPLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihCLEYsTil7c3VwZXIoQixJLlNlcnZlclR5cGUuU2FzanMpLHRoaXMuam9ic1BhdGg9Rix0aGlzLnJlcXVlc3RDbGllbnQ9Tn1leGVjdXRlKEIsRixOLEgseixaPVtdKXtyZXR1cm4gUyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp''@;'; put 'put ''b24qKCl7Y29uc3QgVT1ILEs9KDAsTS5pc1JlbGF0aXZlUGF0aCkoQikmJk4uYXBwTG9jP04uYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrQi5yZXBsYWNlKC9eXC8vLCIiKTpCO2xldCBYPWAke04uc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrS31gLG5lPU9i''@;'; put 'put ''amVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKE4pKSxzZT0oMCxBLmdldEZvcm1EYXRhKSgpO2lmKEYpdHJ5e3NlPSgwLFQuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoc2UsRil9Y2F0Y2gobWUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZi5FcnJvclJlc3BvbnNlKG1l''@;'; put 'put ''Py5tZXNzYWdlLG1lKSl9Zm9yKGNvbnN0IG1lIGluIG5lKW5lLmhhc093blByb3BlcnR5KG1lKSYmc2UuYXBwZW5kKG1lLG5lW21lXSk7Y29uc3QgaGU9c2UgaW5zdGFuY2VvZiBvLmRlZmF1bHQmJnR5cGVvZiBGb3JtRGF0YT4idSI/YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7''@;'; put 'put ''c2UuZ2V0SGVhZGVycygpWyJjb250ZW50LXR5cGUiXX1gOiJtdWx0aXBhcnQvZm9ybS1kYXRhIjtyZXR1cm4gbmV3IFByb21pc2UoKG1lLEZlKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KFgsc2Usej8uYWNjZXNzX3Rva2VuLGhlKS50aGVuKFI9PlModGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2lmKE9iamVjdC5lbnRyaWVzKFIucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgZi5Kb2JFeGVjdXRpb25FcnJvcigwLGBObyB3ZWJvdXQgd2FzIHJldHVybmVkIGJ5IGpvYiAke0t9LiAgUGxlYXNlIGNoZWNrIHRoZSBTQVMgbG9nIGZvciBtb3JlIGluZm8uYCxSLmxvZyk7''@;'; put 'put ''Y29uc3R7cmVzdWx0OnN9PVI7cyYmInN0cmluZyI9PXR5cGVvZiBzJiZzLnRyaW0oKSYmKFIucmVzdWx0PSgwLE0uZ2V0VmFsaWRKc29uKShzKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoUixCLE4uZGVidWcpO2NvbnN0IHU9KDAsTS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0''@;'; put 'put ''cmlidXRlcykoUixaKTttZSh1KX0pKS5jYXRjaChSPT5TKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtSIGluc3RhbmNlb2YgZi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFIsQixOLmRlYnVnKSxGZShuZXcgZi5FcnJvclJlc3Bv''@;'; put 'put ''bnNlKFI/Lm1lc3NhZ2UsUikpKSxSIGluc3RhbmNlb2YgZi5Mb2dpblJlcXVpcmVkRXJyb3I/KEh8fEZlKG5ldyBmLkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixS''@;'; put 'put ''KSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEIsRixOLEgseixaKS50aGVuKHM9PnttZShzKX0scz0+e0ZlKHMpfSkpLFUmJih5aWVsZCBVKCkpKTpGZShuZXcgZi5FcnJvclJlc3BvbnNlKFI/Lm1lc3NhZ2UsUikpfSkpfSl9KX19fSw2MDg0OmZ1bmN0aW9u''@;'; put 'put ''KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLEIsRixOKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbih6LFope2Z1bmN0aW9uIFUobmUpe3RyeXtYKE4ubmV4dChuZSkpfWNhdGNoKHNlKXtaKHNlKX19ZnVuY3Rp''@;'; put 'put ''b24gSyhuZSl7dHJ5e1goTi50aHJvdyhuZSkpfWNhdGNoKHNlKXtaKHNlKX19ZnVuY3Rpb24gWChuZSl7bmUuZG9uZT96KG5lLnZhbHVlKTpmdW5jdGlvbiBIKHope3JldHVybiB6IGluc3RhbmNlb2YgRj96Om5ldyBGKGZ1bmN0aW9uKFope1ooeil9KX0obmUudmFsdWUpLnRoZW4oVSxLKX1Y''@;'; put 'put ''KChOPU4uYXBwbHkoRSxCfHxbXSkpLm5leHQoKSl9KX0saD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJkUuX19lc01vZHVsZT9FOntkZWZhdWx0OkV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5X''@;'; put 'put ''ZWJKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3Qgbz1oKGQoNjIzMCkpLEk9ZCgzOTAwKSxmPWQoMTM5NSksVD1kKDQwMzcpLEE9ZCgyMTcwKSxNPWQoNTkyOCksTz1kKDYxMTgpO2ouV2ViSm9iRXhlY3V0b3I9Y2xhc3MgRCBleHRlbmRzIE8uQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEIs''@;'; put 'put ''RixOLEgseil7c3VwZXIoQixGKSx0aGlzLmpvYnNQYXRoPU4sdGhpcy5yZXF1ZXN0Q2xpZW50PUgsdGhpcy5zYXNWaXlhQXBpQ2xpZW50PXp9ZXhlY3V0ZShCLEYsTixILHosWj1bXSl7dmFyIFU7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SCxYPSgw''@;'; put 'put ''LE0uaXNSZWxhdGl2ZVBhdGgpKEIpJiZOLmFwcExvYz9OLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0IucmVwbGFjZSgvXlwvLywiIik6QjtsZXQgbmU9YCR7Ti5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitYfWA7aWYoTi5zZXJ2ZXJUeXBlPT09SS5TZXJ2''@;'; put 'put ''ZXJUeXBlLlNhc1ZpeWEpe2xldCBGZTt0cnl7RmU9eWllbGQgdGhpcy5nZXRKb2JVcmkoQil9Y2F0Y2goUil7cmV0dXJuIG5ldyBQcm9taXNlKChzLHUpPT5TKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtSIGluc3RhbmNlb2YgZi5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBw''@;'; put 'put ''ZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShCLEYsTixILHosWikudGhlbih2PT57cyh2KX0sdj0+e3Uodil9KSksSyYmKHlpZWxkIEsoKSkpOnUobmV3IGYuRXJyb3JSZXNwb25zZShSPy5tZXNzYWdlLFIpKX0pKX1uZSs9RmUubGVuZ3RoPjA/IiZfam9iPSIrRmU6IiIsRmUu''@;'; put 'put ''bGVuZ3RoPjAmJihuZSs9IiZfam9iPSIrRmUsbmU9bmUucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSxuZSs9bnVsbCE9PShVPU4uY29udGV4dE5hbWUpJiZ2b2lkIDAhPT1VJiZVLnRyaW0oKT9gJl9jb250ZXh0bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChOLmNvbnRleHRO''@;'; put 'put ''YW1lKX1gOiIifWxldCBzZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhOKSksaGU9KDAsTS5nZXRGb3JtRGF0YSkoKTtpZihGKXtjb25zdCBGZT1KU09OLnN0cmluZ2lmeShGKTtpZihOLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzOXx8RmUubGVuZ3RoPjVl''@;'; put 'put ''NXx8RmUuaW5jbHVkZXMoIjsiKSl0cnl7aGU9KDAsVC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShoZSxGKX1jYXRjaChSKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGYuRXJyb3JSZXNwb25zZShSPy5tZXNzYWdlLFIpKX1lbHNlIHRyeXtjb25zdHtmb3JtRGF0YTpSLHJlcXVlc3RQYXJh''@;'; put 'put ''bXM6c309KDAsQS5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybSkoaGUsRik7aGU9UixzZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sc2UpLHMpfWNhdGNoKFIpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZi5FcnJvclJlc3BvbnNlKFI/Lm1lc3NhZ2UsUikpfX1mb3IoY29uc3Qg''@;'; put 'put ''RmUgaW4gc2Upc2UuaGFzT3duUHJvcGVydHkoRmUpJiZoZS5hcHBlbmQoRmUsc2VbRmVdKTtjb25zdCBfZT1oZSBpbnN0YW5jZW9mIG8uZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtoZS5nZXRIZWFkZXJzKClbImNvbnRlbnQt''@;'; put 'put ''dHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoRmUsUik9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChuZSxoZSx6Py5hY2Nlc3NfdG9rZW4sX2UpLnRoZW4ocz0+Uyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LmFwcGVuZFJlcXVlc3QocyxCLE4uZGVidWcpO2xldCB1PXMucmVzdWx0O2lmKE4uZGVidWcpc3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBJLlNlcnZlclR5cGUuU2FzVml5YTp1PXlpZWxkKDAsTS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShzLnJlc3VsdCx0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgSS5TZXJ2ZXJUeXBlLlNhczk6dT0ic3RyaW5nIj09dHlwZW9mIHMucmVzdWx0PygwLE0ucGFyc2VXZWJvdXRSZXNwb25zZSkocy5yZXN1bHQsbmUpOnMucmVzdWx0fWNvbnN0IHY9KDAsTS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0''@;'; put 'put ''cmlidXRlcykoe3Jlc3VsdDp1LGxvZzpzLmxvZ30sWik7RmUodil9KSkuY2F0Y2gocz0+Uyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cyBpbnN0YW5jZW9mIGYuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChzLEIsTi5kZWJ1Zyks''@;'; put 'put ''UihuZXcgZi5FcnJvclJlc3BvbnNlKHM/Lm1lc3NhZ2UscykpKSxzIGluc3RhbmNlb2YgZi5Mb2dpblJlcXVpcmVkRXJyb3I/KEh8fFIobmV3IGYuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxp''@;'; put 'put ''ZCBjcmVkZW50aWFscy4iLHMpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoQixGLE4sSCx6LFopLnRoZW4odT0+e0ZlKHUpfSx1PT57Uih1KX0pKSxLJiYoeWllbGQgSygpKSk6UihuZXcgZi5FcnJvclJlc3BvbnNlKHM/Lm1lc3NhZ2UscykpfSkpfSl9KX1n''@;'; put 'put ''ZXRKb2JVcmkoQil7cmV0dXJuIFModGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLnNhc1ZpeWFBcGlDbGllbnQpcmV0dXJuIiI7bGV0IE4sSCxGPSIiO2lmKCgwLE0uaXNSZWxhdGl2ZVBhdGgpKEIpKXtjb25zdCBaPUIuc3BsaXQoIi8iKTtOPVoubGVuZ3RoPjE/Wlsw''@;'; put 'put ''XToiIixIPVoubGVuZ3RoPjE/WlsxXToiIn1lbHNle2NvbnN0IFo9Qi5zcGxpdCgiLyIpO0g9Wi5wb3AoKXx8IiIsTj1aLmpvaW4oIi8iKX1pZighSCl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtjb25zdCB6PXlpZWxkIHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoTik7aWYoeil7Y29uc3QgWj16LmZpbmQoVT0+VS5uYW1lPT09SCYmImpvYkRlZmluaXRpb24iPT09VS5jb250ZW50VHlwZSk7WiYmKEY9Wi51cmkpfXJldHVybiBGfSl9fX0sODIxNzpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgUz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obyxJLGYsVCl7dm9pZCAwPT09VCYmKFQ9Zik7dmFyIEE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJLGYpOyghQXx8KCJnZXQiaW4gQT8hSS5fX2VzTW9kdWxlOkEud3JpdGFi''@;'; put 'put ''bGV8fEEuY29uZmlndXJhYmxlKSkmJihBPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJW2ZdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLFQsQSl9OmZ1bmN0aW9uKG8sSSxmLFQpe3ZvaWQgMD09PVQmJihUPWYpLG9bVF09SVtmXX0pLGg9dGhpcyYmdGhpcy5fX2V4''@;'; put 'put ''cG9ydFN0YXJ8fGZ1bmN0aW9uKG8sSSl7Zm9yKHZhciBmIGluIG8pImRlZmF1bHQiIT09ZiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChJLGYpJiZTKEksbyxmKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGgoZCgxNTcw''@;'; put 'put ''KSxqKSxoKGQoMzQ5MSksaiksaChkKDQ0NDYpLGopLGgoZCg2MTE4KSxqKSxoKGQoMjY5MyksaiksaChkKDYwODQpLGopLGgoZCgxMDY1KSxqKX0sNDU4ODpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQxNTUpLGg9ZCg1MTA4KSxvPXRoaXMmJnRoaXMuX19jcmVhdGVC''@;'; put 'put ''aW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihLLFgsbmUsc2Upe3ZvaWQgMD09PXNlJiYoc2U9bmUpO3ZhciBoZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFgsbmUpOyghaGV8fCgiZ2V0ImluIGhlPyFYLl9fZXNNb2R1bGU6aGUud3JpdGFibGV8fGhlLmNvbmZpZ3Vy''@;'; put 'put ''YWJsZSkpJiYoaGU9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFhbbmVdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLHNlLGhlKX06ZnVuY3Rpb24oSyxYLG5lLHNlKXt2b2lkIDA9PT1zZSYmKHNlPW5lKSxLW3NlXT1YW25lXX0pLEk9dGhpcyYmdGhpcy5fX3NldE1v''@;'; put 'put ''ZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEssWCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEssImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOlh9KX06ZnVuY3Rpb24oSyxYKXtLLmRlZmF1bHQ9WH0pLGY9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9u''@;'; put 'put ''KEspe2lmKEsmJksuX19lc01vZHVsZSlyZXR1cm4gSzt2YXIgWD17fTtpZihudWxsIT1LKWZvcih2YXIgbmUgaW4gSykiZGVmYXVsdCIhPT1uZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEssbmUpJiZvKFgsSyxuZSk7cmV0dXJuIEkoWCxLKSxYfSxUPXRoaXMmJnRo''@;'; put 'put ''aXMuX19hd2FpdGVyfHxmdW5jdGlvbihLLFgsbmUsc2Upe3JldHVybiBuZXcobmV8fChuZT1Qcm9taXNlKSkoZnVuY3Rpb24oX2UsbWUpe2Z1bmN0aW9uIEZlKHUpe3RyeXtzKHNlLm5leHQodSkpfWNhdGNoKHYpe21lKHYpfX1mdW5jdGlvbiBSKHUpe3RyeXtzKHNlLnRocm93KHUpKX1jYXRj''@;'; put 'put ''aCh2KXttZSh2KX19ZnVuY3Rpb24gcyh1KXt1LmRvbmU/X2UodS52YWx1ZSk6ZnVuY3Rpb24gaGUoX2Upe3JldHVybiBfZSBpbnN0YW5jZW9mIG5lP19lOm5ldyBuZShmdW5jdGlvbihtZSl7bWUoX2UpfSl9KHUudmFsdWUpLnRoZW4oRmUsUil9cygoc2U9c2UuYXBwbHkoSyxYfHxbXSkpLm5l''@;'; put 'put ''eHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoudGhyb3dJZkVycm9yPWouUmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3QgQT1mKGQoODM3MykpLE09ZCgxNTI3KSxPPWQoMTM5NSksRD1kKDI4MTMpLEU9ZCg5Nzc4KSxCPWQoOTUyNiks''@;'; put 'put ''Rj1kKDU5MjgpLE49ZCgxMDA1KSxIPWQoOTUzOSk7ai5SZXF1ZXN0Q2xpZW50PWNsYXNzIHp7Y29uc3RydWN0b3IoWCxuZSxzZSxoZSl7dGhpcy5iYXNlVXJsPVgsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNzcmZUb2tl''@;'; put 'put ''bj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5nZXRSZXF1ZXN0cz0oKT0+dGhpcy5yZXF1ZXN0cyx0aGlzLmNsZWFyUmVxdWVzdHM9KCk9Pnt0aGlzLnJlcXVlc3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1fZT0+VCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IG1lPW51''@;'; put 'put ''bGw7Y29uc3QgRmU9e30sUj1fZS5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3MuaW5uZXJIVE1MPVI7Y29uc3QgdT1zLnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIik7bWU9dT90''@;'; put 'put ''aGlzLmJhc2VVcmwrdS5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOm51bGw7Y29uc3Qgdj11Py5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpO2Zvcihjb25zdCBrIG9mIHYpInVzZXJfb2F1dGhfYXBwcm92YWwiPT09ay5uYW1lJiYoay52YWx1ZT0idHJ1ZSIpLEZlW2submFtZV09ay52YWx1ZTtj''@;'; put 'put ''b25zdCBwPU9iamVjdC5rZXlzKEZlKS5maW5kKGs9Pms/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImNzcmYiKSk7cCYmKHRoaXMuY3NyZlRva2VuLnZhbHVlPUZlW3BdLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWU9dGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZXx8IngtY3NyZi10b2tlbiIp''@;'; put 'put ''O2NvbnN0IF89bmV3IEZvcm1EYXRhO2Zvcihjb25zdCBrIGluIEZlKUZlLmhhc093blByb3BlcnR5KGspJiZfLmFwcGVuZChrLEZlW2tdKTtpZighbWUpdGhyb3cgbmV3IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiB5aWVsZCB0aGlzLmh0dHBD''@;'; put 'put ''bGllbnQucG9zdChtZSxfLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6e0FjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9fSkudGhlbihrPT5rLmRhdGEpLmNhdGNoKGs9PnsoUy5sb2dnZXJ8fGgpLmVycm9yKGspfSl9KSx0aGlzLnByZXR0aWZ5U3RyaW5nPV9l''@;'; put 'put ''PT4oMCxILmluc3BlY3QpKF9lLHtjb2xvcnM6ImJsZWFjaGVkIiE9PXRoaXMudmVyYm9zZU1vZGV9KSx0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5PV9lPT57aWYoIV9lKXJldHVybiIiO2xldCBtZTtpZigic3RyaW5nIj09dHlwZW9mIF9lKXRyeXttZT1KU09OLnBhcnNlKF9lKX1jYXRjaHtt''@;'; put 'put ''ZT1fZX1lbHNlIG1lPV9lO2NvbnN0IEZlPXRoaXMucHJldHRpZnlTdHJpbmcobWUpLnNwbGl0KCJcbiIpO3JldHVybiBGZS5sZW5ndGg+NTEmJihGZS5zcGxpY2UoNTApLEZlLnB1c2goIi4uLiIpKSxGZS5qb2luKCJcbiIpfSx0aGlzLmhhbmRsZUF4aW9zUmVzcG9uc2U9X2U9Pnt2YXIgbWUs''@;'; put 'put ''RmUsUixzO2NvbnN0e3N0YXR1czp1LGNvbmZpZzp2LHJlcXVlc3Q6cCxkYXRhOl99PV9lLGs9bnVsbCE9PShtZT1wPy5faGVhZGVyKSYmdm9pZCAwIT09bWU/bWU6Ik5vdCBwcm92aWRlZFxuIixMPW51bGwhPT0oUj1udWxsPT09KEZlPXA/LnJlcyl8fHZvaWQgMD09PUZlP3ZvaWQgMDpGZS5y''@;'; put 'put ''YXdIZWFkZXJzKSYmdm9pZCAwIT09Uj9SOlsiTm90IHByb3ZpZGVkIl0seT10aGlzLmZvcm1hdEhlYWRlcnMoTCksbD10aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KF8pO3JldHVybiBudWxsPT09KHM9Uy5sb2dnZXIpfHx2b2lkIDA9PT1zfHxzLmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3Qg''@;'; put 'put ''NTAgbGluZXMpOlxuJHtrfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keSh2LmRhdGEpfVxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICR7dGhpcy5wcmV0dGlmeVN0cmluZyh1KX1cblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuJHt5fSR7bD9gXG5cbiR7bH1gOiIifVxuYCks''@;'; put 'put ''X2V9LHRoaXMuaGFuZGxlQXhpb3NFcnJvcj1fZT0+e3ZhciBtZSxGZSxSLHMsdSx2O2NvbnN0IHA9Ik5vdCBwcm92aWRlZCIse3Jlc3BvbnNlOl8scmVxdWVzdDprLGNvbmZpZzpMfT1fZTtsZXQgeT17X2hlYWRlcjpgJHtwfVxuYCxyZXM6e3Jhd0hlYWRlcnM6W3BdfX07ayYmKHk9e19oZWFk''@;'; put 'put ''ZXI6bnVsbCE9PShSPW51bGwhPT0obWU9ay5faGVhZGVyKSYmdm9pZCAwIT09bWU/bWU6bnVsbD09PShGZT1rLl9jdXJyZW50UmVxdWVzdCl8fHZvaWQgMD09PUZlP3ZvaWQgMDpGZS5faGVhZGVyKSYmdm9pZCAwIT09Uj9SOnAscmVzOntyYXdIZWFkZXJzOm51bGwhPT0odT1udWxsPT09KHM9''@;'; put 'put ''ay5yZXMpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnJhd0hlYWRlcnMpJiZ2b2lkIDAhPT11P3U6W3BdfX0pO2xldCBsPV98fHtzdGF0dXM6cCxyZXF1ZXN0OnksY29uZmlnOkx8fHtkYXRhOnAsaGVhZGVyczp7fX0sZGF0YTpwfTtjb25zdHtzdGF0dXM6YixyZXF1ZXN0OnEsZGF0YTpHfT1sLHtf''@;'; put 'put ''aGVhZGVyOlEscmVzOnBlfT1xLFBlPXRoaXMuZm9ybWF0SGVhZGVycyhwZS5yYXdIZWFkZXJzKSxaZT10aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KEcpO3JldHVybiBudWxsPT09KHY9Uy5sb2dnZXIpfHx2b2lkIDA9PT12fHx2LmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMp''@;'; put 'put ''OlxuJHtRfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShMPy5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoYil9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7UGV9JHtaZT9gXG5cbiR7WmV9YDoiIn1cbmApLF9lfSx0''@;'; put 'put ''aGlzLmZvcm1hdEhlYWRlcnM9X2U9Pl9lLnJlZHVjZSgobWUsRmUsUik9Pm1lKyhSJTI9PTA/YCR7MD09PVI/IiI6IlxuIn0ke0ZlfWA6YDogJHtGZX1gKSwiIiksdGhpcy5zZXRWZXJib3NlTW9kZT1fZT0+e3RoaXMudmVyYm9zZU1vZGU9X2UsdGhpcy52ZXJib3NlTW9kZT90aGlzLmVuYWJs''@;'; put 'put ''ZVZlcmJvc2VNb2RlKCk6dGhpcy5kaXNhYmxlVmVyYm9zZU1vZGUoKX0sdGhpcy5lbmFibGVWZXJib3NlTW9kZT0oX2U9dGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlLG1lPXRoaXMuaGFuZGxlQXhpb3NFcnJvcik9Pnt0aGlzLmh0dHBJbnRlcmNlcHRvcj10aGlzLmh0dHBDbGllbnQuaW50ZXJj''@;'; put 'put ''ZXB0b3JzLnJlc3BvbnNlLnVzZShfZSxtZSl9LHRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlPSgpPT57dGhpcy5odHRwSW50ZXJjZXB0b3ImJnRoaXMuaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QodGhpcy5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdldEhlYWRlcnM9KF9l''@;'; put 'put ''LG1lKT0+e2NvbnN0IEZlPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09bWUmJihGZVsiQ29udGVudC1UeXBlIl09bWUpLEZlLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1tZT8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsX2UmJihGZS5BdXRob3Jp''@;'; put 'put ''emF0aW9uPWBCZWFyZXIgJHtfZX1gKSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZSYmKEZlW3RoaXMuY3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuY3NyZlRva2VuLnZhbHVlKSxGZX0sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW49''@;'; put 'put ''X2U9Pntjb25zdCBtZT10aGlzLnBhcnNlQ3NyZlRva2VuKF9lKTttZSYmKHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj1tZSl9LHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW49X2U9Pntjb25zdCBtZT10aGlzLnBhcnNlQ3NyZlRva2VuKF9lKTttZSYmKHRoaXMuY3NyZlRva2VuPW1lKX0sdGhp''@;'; put 'put ''cy5wYXJzZUNzcmZUb2tlbj1fZT0+e3ZhciBtZTtjb25zdCBGZT1udWxsPT09KG1lPV9lLmhlYWRlcnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PW1lP3ZvaWQgMDptZS50b0xvd2VyQ2FzZSgpO2lmKEZlKXJldHVybntoZWFkZXJOYW1lOkZlLHZhbHVlOl9lLmhlYWRlcnNbRmVdfHwi''@;'; put 'put ''In19LHRoaXMuaGFuZGxlRXJyb3I9KF9lLG1lLEZlPSExKT0+VCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgUj1fZS5yZXNwb25zZTtpZihfZSBpbnN0YW5jZW9mIE8uQXV0aG9yaXplRXJyb3Ipe2NvbnN0IHM9eWllbGQgdGhpcy5odHRwQ2xpZW50LmdldChfZS5jb25m''@;'; put 'put ''aXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2godT0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKSh1LCJFcnJvciB3aGlsZSBnZXR0aW5nIGVycm9yIGNvbmZpcm1VcmwuICIpfSk7cmV0''@;'; put 'put ''dXJuKDAsTS5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkocz8uZGF0YSkmJih5aWVsZCB0aGlzLmF1dGhvcml6ZShzLmRhdGEpLmNhdGNoKHU9Pnt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkodSwiRXJyb3Igd2hpbGUgYXV0aG9yaXppbmcgcmVxdWVzdC4gIil9KSkseWllbGQgbWUoKS5jYXRj''@;'; put 'put ''aCh1PT57dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKHUsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KX1pZihfZSBpbnN0YW5jZW9mIE8uTG9naW5SZXF1aXJlZEVycm9yKXRocm93IHRoaXMuY2xlYXJDc3JmVG9rZW5zKCksX2U7aWYoX2UgaW5z''@;'; put 'put ''dGFuY2VvZiBOLkludmFsaWRTQVNqc0NzcmZFcnJvcilyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LmdldCgiLyIse3dpdGhYU1JGVG9rZW46ITB9KS50aGVuKHM9Pnt2YXIgdTtjb25zdCB2PW51bGw9PT0odT0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7''@;'; put 'put ''IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMocy5kYXRhKSl8fHZvaWQgMD09PXU/dm9pZCAwOnVbMV07diYmKGRvY3VtZW50LmNvb2tpZT12KX0pLmNhdGNoKHM9Pnt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkocywiRXJyb3Igd2hp''@;'; put 'put ''bGUgcmUtZmV0Y2hpbmcgQ1NSRiB0b2tlbi4iKX0pLHlpZWxkIG1lKCkuY2F0Y2gocz0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShzLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7aWYoNDAzPT09Uj8uc3RhdHVzfHw0NDk9PT1SPy5zdGF0''@;'; put 'put ''dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW4oUiksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUpcmV0dXJuIHlpZWxkIG1lKCkuY2F0Y2gocz0+e3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShzLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2Fs''@;'; put 'put ''bGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7dGhyb3cgX2V9aWYoNDA0PT09Uj8uc3RhdHVzKXRocm93IG5ldyBPLk5vdEZvdW5kRXJyb3IoUi5jb25maWcudXJsKTtpZig1MDIhPT1SPy5zdGF0dXMpdGhyb3cgX2UuaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05B''@;'; put 'put ''VFVSRSI9PT1fZS5jb2RlP25ldyBPLkNlcnRpZmljYXRlRXJyb3IoX2UubWVzc2FnZSk6X2UubWVzc2FnZT9fZTooMCxFLnByZWZpeE1lc3NhZ2UpKF9lLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIik7aWYoRmUpdGhyb3cgbmV3IE8uSW50ZXJuYWxTZXJ2ZXJFcnJvcn0pLHRoaXMu''@;'; put 'put ''Y3JlYXRlSHR0cENsaWVudChYLG5lKSxzZSYmKHRoaXMucmVxdWVzdHNMaW1pdD1zZSksaGUmJih0aGlzLnNldFZlcmJvc2VNb2RlKGhlKSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCkpfXNldENvbmZpZyhYLG5lKXt0aGlzLmNyZWF0ZUh0dHBDbGllbnQoWCxuZSl9c2F2ZUxvY2FsU3RvcmFn''@;'; put 'put ''ZVRva2VuKFgsbmUpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsWCksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsbmUpfWdldENzcmZUb2tlbihYPSJnZW5lcmFsIil7cmV0dXJuImZpbGUiPT09WD90aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW46dGhpcy5j''@;'; put 'put ''c3JmVG9rZW59Y2xlYXJDc3JmVG9rZW5zKCl7dGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn19Y2xlYXJMb2NhbFN0b3JhZ2VUb2tlbnMoKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgi''@;'; put 'put ''YWNjZXNzVG9rZW4iLCIiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIiwiIil9Z2V0QmFzZVVybCgpe3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuYmFzZVVSTHx8IiJ9YXBwZW5kUmVxdWVzdChYLG5lLHNlKXtsZXQgaGU9IiIsX2U9IiIsbWU9bnVsbDtzZSYm''@;'; put 'put ''KFg/LmxvZz8oaGU9KDAsRi5wYXJzZVNvdXJjZUNvZGUpKFgubG9nKSxfZT0oMCxGLnBhcnNlR2VuZXJhdGVkQ29kZSkoWC5sb2cpLG1lPVg/LnJlc3VsdD9YLnJlc3VsdC5XT1JLOlgubG9nKTpYPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9mIFgucmVzdWx0JiYoaGU9KDAsRi5wYXJzZVNv''@;'; put 'put ''dXJjZUNvZGUpKFgucmVzdWx0KSxfZT0oMCxGLnBhcnNlR2VuZXJhdGVkQ29kZSkoWC5yZXN1bHQpKSxtZT1YLnJlc3VsdC5XT1JLKSk7Y29uc3QgRmU9InN0cmluZyI9PXR5cGVvZiBYPy5yZXN1bHQ/WD8ucmVzdWx0OkpTT04uc3RyaW5naWZ5KFg/LnJlc3VsdCxudWxsLDIpO3RoaXMucmVx''@;'; put 'put ''dWVzdHMucHVzaCh7bG9nRmlsZTpYPy5sb2d8fEZlfHxYLHNlcnZpY2VMaW5rOm5lLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VDb2RlOmhlLGdlbmVyYXRlZENvZGU6X2UsU0FTV09SSzptZX0pLHRoaXMucmVxdWVzdHMubGVuZ3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0''@;'; put 'put ''cy5zcGxpY2UoMCwxKX1nZXQoWCxuZSxzZT0iYXBwbGljYXRpb24vanNvbiIsaGU9e30sX2U9ITEpe3JldHVybiBUKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBGZT17aGVhZGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKG5l''@;'; put 'put ''LHNlKSksaGUpLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1zZT8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVybiJ0ZXh0L3BsYWluIj09PXNlJiYoRmUudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0aGlzLmh0dHBDbGllbnQuZ2V0KFgsRmUpLnRoZW4oUj0+KCgw''@;'; put 'put ''LGoudGhyb3dJZkVycm9yKShSKSx0aGlzLnBhcnNlUmVzcG9uc2UoUikpKS5jYXRjaChSPT5UKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihSLCgpPT50aGlzLmdldChYLG5lLHNlLGhlKS5jYXRjaChzPT57dGhyb3coMCxFLnBy''@;'; put 'put ''ZWZpeE1lc3NhZ2UpKHMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSksX2UpfSkpfSl9cG9zdChYLG5lLHNlLGhlPSJhcHBsaWNhdGlvbi9qc29uIixfZT17fSxtZT17fSl7cmV0dXJuIFQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2Nv''@;'; put 'put ''bnN0IEZlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoc2UsaGUpKSxfZSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFgsbmUsT2JqZWN0LmFzc2lnbih7aGVhZGVyczpGZSx3aXRoWFNSRlRva2VuOiEwfSxtZSkpLnRoZW4oUj0+KCgwLGoudGhy''@;'; put 'put ''b3dJZkVycm9yKShSKSx0aGlzLnBhcnNlUmVzcG9uc2UoUikpKS5jYXRjaChSPT5UKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihSLCgpPT50aGlzLnBvc3QoWCxuZSxzZSxoZSxfZSkpfSkpfSl9cHV0KFgsbmUsc2UsaGU9e30p''@;'; put 'put ''e3JldHVybiBUKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBfZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKHNlLCJhcHBsaWNhdGlvbi9qc29uIikpLGhlKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnB1dChYLG5lLHtoZWFkZXJz''@;'; put 'put ''Ol9lLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKG1lPT4oKDAsai50aHJvd0lmRXJyb3IpKG1lKSx0aGlzLnBhcnNlUmVzcG9uc2UobWUpKSkuY2F0Y2gobWU9PlQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKG1lLCgpPT50aGlz''@;'; put 'put ''LnB1dChYLG5lLHNlLGhlKSl9KSl9KX1kZWxldGUoWCxuZSl7cmV0dXJuIFQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHNlPXRoaXMuZ2V0SGVhZGVycyhuZSwiYXBwbGljYXRpb24vanNvbiIpO3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVsZXRlKFgse2hlYWRlcnM6''@;'; put 'put ''c2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oaGU9PigoMCxqLnRocm93SWZFcnJvcikoaGUpLHRoaXMucGFyc2VSZXNwb25zZShoZSkpKS5jYXRjaChoZT0+VCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoaGUsKCk9PnRoaXMu''@;'; put 'put ''ZGVsZXRlKFgsbmUpKX0pKX0pfXBhdGNoKFgsbmU9e30sc2UsaGU9e30pe3JldHVybiBUKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBfZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKHNlLCJhcHBsaWNhdGlvbi9qc29uIikpLGhl''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBhdGNoKFgsbmUse2hlYWRlcnM6X2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4obWU9PigoMCxqLnRocm93SWZFcnJvcikobWUpLHRoaXMucGFyc2VSZXNwb25zZShtZSkpKS5jYXRjaChtZT0+VCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IobWUsKCk9PnRoaXMucGF0Y2goWCxuZSxzZSkpfSkpfSl9dXBsb2FkRmlsZShYLG5lLHNlKXt2YXIgaGU7cmV0dXJuIFQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXRoaXMuZ2V0SGVhZGVycyhzZSwiYXBw''@;'; put 'put ''bGljYXRpb24vanNvbiIpO251bGwhPT0oaGU9dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKSYmdm9pZCAwIT09aGUmJmhlLnZhbHVlJiYoX2VbdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi52YWx1ZSk7dHJ5e2NvbnN0IG1lPXlp''@;'; put 'put ''ZWxkIHRoaXMuaHR0cENsaWVudC5wb3N0KFgsbmUse2hlYWRlcnM6X2UsdHJhbnNmb3JtUmVxdWVzdDpGZT0+RmV9KTtyZXR1cm57cmVzdWx0Om1lLmRhdGEsZXRhZzptZS5oZWFkZXJzLmV0YWd9fWNhdGNoKG1lKXtjb25zdCBGZT1tZS5yZXNwb25zZTtpZig0MDM9PT1GZT8uc3RhdHVzfHw0''@;'; put 'put ''NDk9PT1GZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbihGZSksdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0aGlzLnVwbG9hZEZpbGUoWCxuZSxzZSk7dGhyb3cgbWV9dGhyb3cgbWV9fSl9cGFyc2VSZXNwb25zZShYKXtjb25zdCBuZT1Y''@;'; put 'put ''Py5oZWFkZXJzP1guaGVhZGVycy5ldGFnOiIiO2xldCBzZSxoZT0hMTt0cnl7c2U9InN0cmluZyI9PXR5cGVvZiBYLmRhdGE/SlNPTi5wYXJzZShYLmRhdGEpOlguZGF0YX1jYXRjaHt0cnl7c2U9SlNPTi5wYXJzZSgoMCxELnBhcnNlV2Vib3V0UmVzcG9uc2UpKFguZGF0YSkpfWNhdGNoe3Nl''@;'; put 'put ''PVguZGF0YX1oZT0hMH1sZXQgX2U9e3Jlc3VsdDpzZSxldGFnOm5lLHN0YXR1czpYLnN0YXR1c307cmV0dXJuIGhlJiYoX2UubG9nPVguZGF0YSksX2V9Y3JlYXRlSHR0cENsaWVudChYLG5lKXtjb25zdCBzZT1uZT9uZXcgQS5BZ2VudChuZSk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxG''@;'; put 'put ''LmNyZWF0ZUF4aW9zSW5zdGFuY2UpKFgsc2UpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1oZT0+aGU+PTIwMCYmaGU8PTQwMX19LGoudGhyb3dJZkVycm9yPUs9Pnt2YXIgWCxuZSxzZSxoZSxfZSxtZSxGZTtzd2l0Y2goSy5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgSy5kYXRhJiYiaW52YWxpZF9ncmFudCI9PT1LLmRhdGEuZXJyb3IpdGhyb3cgbmV3IE8uTG9naW5SZXF1aXJlZEVycm9yKEsuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiBLLmRhdGEmJiJpbnZhbGlkIGNzcmYgdG9rZW4hIj09PUsuZGF0YS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KXRocm93IG5ldyBOLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgSy5kYXRhP25ldyBPLkxvZ2luUmVxdWlyZWRFcnJvcihLLmRhdGEpOm5ldyBPLkxvZ2luUmVxdWlyZWRFcnJvcn1pZihudWxsIT09KG5lPW51bGw9PT0oWD1LLmRh''@;'; put 'put ''dGEpfHx2b2lkIDA9PT1YP3ZvaWQgMDpYLmVudGl0eUlEKSYmdm9pZCAwIT09bmUmJm5lLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyBPLkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5nIj09dHlwZW9mIEsuZGF0YSYmKDAsTS5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoSy5kYXRh''@;'; put 'put ''KSl0aHJvdyBuZXcgTy5BdXRob3JpemVFcnJvcigiQXV0aG9yaXphdGlvbiByZXF1aXJlZCIsSy5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIEsuZGF0YSYmKDAsTS5pc0xvZ0luUmVxdWlyZWQpKEsuZGF0YSkmJihudWxsPT09KGhlPW51bGw9PT0oc2U9Sy5jb25m''@;'; put 'put ''aWcpfHx2b2lkIDA9PT1zZT92b2lkIDA6c2UudXJsKXx8dm9pZCAwPT09aGV8fCFoZS5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyBPLkxvZ2luUmVxdWlyZWRFcnJvcjtpZihudWxsIT09KF9lPUsuZGF0YSkmJnZvaWQgMCE9PV9lJiZfZS5hdXRoX3JlcXVlc3QpdGhy''@;'; put 'put ''b3cgbmV3IE8uQXV0aG9yaXplRXJyb3IoSy5kYXRhLm1lc3NhZ2UsSy5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KEZlPW51bGw9PT0obWU9Sy5jb25maWcpfHx2b2lkIDA9PT1tZT92b2lkIDA6bWUudXJsKSYmdm9pZCAwIT09RmUmJkZlLmluY2x1ZGVzKCJzYXNBdXRoRXJyb3Ii''@;'; put 'put ''KSl0aHJvdyBuZXcgQi5TQVM5QXV0aEVycm9yO2NvbnN0IFI9VShLLmRhdGEpO2lmKFIpdGhyb3cgUn07Y29uc3QgVT1LPT57aWYoIUspcmV0dXJuIG51bGw7dHJ5e2NvbnN0IFg9SlNPTi5wYXJzZShLPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihYLmVycm9yQ29kZSYmWC5tZXNzYWdl''@;'; put 'put ''KXJldHVybiBuZXcgTy5Kb2JFeGVjdXRpb25FcnJvcihYLmVycm9yQ29kZSxYLm1lc3NhZ2UsSz8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSl9Y2F0Y2h7fXRyeXtpZihLPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3QgbmU9Sy5zcGxpdCgneyJlcnJvckNvZGUnKTtpZihuZS5sZW5n''@;'; put 'put ''dGg+MSl7Y29uc3Qgc2U9J3siZXJyb3JDb2RlJytuZVsxXS5zcGxpdCgnIn0nKVswXSsnIn0nLGhlPUpTT04ucGFyc2Uoc2UucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5ldyBPLkpvYkV4ZWN1dGlvbkVycm9yKGhlLmVycm9yQ29kZSxoZS5tZXNzYWdlLEs/LnJlcGxhY2UoL1tc''@;'; put 'put ''blxyXS9nLCJcbiIpKX19fWNhdGNoe310cnl7aWYoSz8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKXtjb25zdCBuZT1LLnNwbGl0KC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKTtpZihuZS5sZW5ndGg+MSl7Y29uc3Qgc2U9bmVbMV0uc3BsaXQoIjxpPiIpWzFd''@;'; put 'put ''LnNwbGl0KCI8L2k+IilbMF0saGU9c2UuZW5kc1dpdGgoInJ1bm5lciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhlIGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pzLmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2RlIGZvciByZWdpc3RlcmluZyB0aGUgU0FT''@;'; put 'put ''anMgcnVubmVyIjpgU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAke3NlfWA7cmV0dXJuIG5ldyBPLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxoZSwiIil9fX1jYXRjaHt9dHJ5e2lmKCFLPy5tYXRjaCgvPj53ZWJvdXRCRUdJTjw8LykmJks/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9p''@;'; put 'put ''KSYmSz8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuL2kpKXtjb25zdCBuZT1LLnNwbGl0KCI8aDI+U0FTIExvZzwvaDI+Iik7aWYobmUubGVuZ3RoPjEpe2NvbnN0IHNlPW5lWzFdLnNwbGl0KCI8cHJlPiIpWzFdLnNwbGl0KCI8L3ByZT4iKVswXTtyZXR1cm4g''@;'; put 'put ''bmV3IE8uSm9iRXhlY3V0aW9uRXJyb3IoNTAwLCJUaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLiIsc2UpfX19Y2F0Y2h7fXJldHVybiBudWxsfX0sNzk1OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZT9mdW5jdGlvbihFLEIsRixOKXt2b2lkIDA9PT1OJiYoTj1GKTt2YXIgSD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsRik7KCFIfHwoImdldCJpbiBIPyFCLl9fZXNNb2R1bGU6SC53cml0YWJsZXx8SC5jb25maWd1cmFibGUpKSYmKEg9e2VudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbRl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsTixIKX06ZnVuY3Rpb24oRSxCLEYsTil7dm9pZCAwPT09TiYmKE49RiksRVtOXT1CW0ZdfSksaD10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rp''@;'; put 'put ''b24oRSxCKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6Qn0pfTpmdW5jdGlvbihFLEIpe0UuZGVmYXVsdD1CfSksbz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oRSl7aWYoRSYmRS5fX2VzTW9kdWxlKXJldHVybiBFO3Zh''@;'; put 'put ''ciBCPXt9O2lmKG51bGwhPUUpZm9yKHZhciBGIGluIEUpImRlZmF1bHQiIT09RiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsRikmJlMoQixFLEYpO3JldHVybiBoKEIsRSksQn0sST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxCLEYsTil7cmV0dXJu''@;'; put 'put ''IG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oeixaKXtmdW5jdGlvbiBVKG5lKXt0cnl7WChOLm5leHQobmUpKX1jYXRjaChzZSl7WihzZSl9fWZ1bmN0aW9uIEsobmUpe3RyeXtYKE4udGhyb3cobmUpKX1jYXRjaChzZSl7WihzZSl9fWZ1bmN0aW9uIFgobmUpe25lLmRvbmU/eihuZS52''@;'; put 'put ''YWx1ZSk6ZnVuY3Rpb24gSCh6KXtyZXR1cm4geiBpbnN0YW5jZW9mIEY/ejpuZXcgRihmdW5jdGlvbihaKXtaKHopfSl9KG5lLnZhbHVlKS50aGVuKFUsSyl9WCgoTj1OLmFwcGx5KEUsQnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxqLlNhczlSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBmPWQoODIyNCksVD1vKGQoNzg1NykpLEE9ZCg5Nzc4KSxNPWQoNDU4OCksTz1kKDEzOTUpO2ouU2FzOVJlcXVlc3RDbGllbnQ9Y2xhc3MgRCBleHRlbmRzIE0uUmVxdWVzdENsaWVudHtjb25zdHJ1Y3RvcihCLEYpe3N1''@;'; put 'put ''cGVyKEIsRiksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLm1heFJlZGlyZWN0cz0wLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1OPT5OPj0yMDAmJk48MzAzLGYud3JhcHBlciYmKCgwLGYud3JhcHBlcikodGhpcy5odHRwQ2xpZW50KSx0aGlzLmh0dHBDbGllbnQu''@;'; put 'put ''ZGVmYXVsdHMuamFyPW5ldyBULkNvb2tpZUphcil9bG9naW4oQixGLE4pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBIPWAvVXNlciBGb2xkZXJzLyR7Qn0vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmA7dGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphciYm''@;'; put 'put ''KHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXIucmVtb3ZlQWxsQ29va2llcygpLHlpZWxkIHRoaXMuZ2V0KGAke059P19wcm9ncmFtPSR7SH0mX3VzZXJuYW1lPSR7Qn0mX3Bhc3N3b3JkPSR7Rn1gLHZvaWQgMCwidGV4dC9wbGFpbiIpKX0pfWdldChCLEYsTj0iYXBwbGljYXRpb24vanNv''@;'; put 'put ''biIsSD17fSx6PSExKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVT17aGVhZGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKEYsTikpLEgpLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1OPyJ0ZXh0Ijoi''@;'; put 'put ''anNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09TiYmKFUudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0aGlzLmh0dHBDbGllbnQuZ2V0KEIsVSkudGhlbihLPT4zMDI9PT1LLnN0YXR1cz90aGlzLmdldChLLmhlYWRlcnMubG9jYXRpb24sRixOKTooKDAsTS50''@;'; put 'put ''aHJvd0lmRXJyb3IpKEspLHRoaXMucGFyc2VSZXNwb25zZShLKSkpLmNhdGNoKEs9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKEsgaW5zdGFuY2VvZiBPLkpvYkV4ZWN1dGlvbkVycm9yKXRocm93IEs7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoSywoKT0+dGhp''@;'; put 'put ''cy5nZXQoQixGLE4sSCkuY2F0Y2goWD0+e3Rocm93KDAsQS5wcmVmaXhNZXNzYWdlKShYLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLHopLmNhdGNoKFg9Pnt0aHJvdygwLEEucHJlZml4TWVzc2FnZSkoWCwiRXJyb3Igd2hpbGUgaGFuZGxpbmcg''@;'; put 'put ''ZXJyb3IuICIpfSl9KSl9KX1wb3N0KEIsRixOLEg9ImFwcGxpY2F0aW9uL2pzb24iLHo9e30pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBaPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoTixIKSkseik7cmV0dXJu''@;'; put 'put ''IHRoaXMuaHR0cENsaWVudC5wb3N0KEIsRix7aGVhZGVyczpaLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKFU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiAzMDI9PT1VLnN0YXR1cz95aWVsZCB0aGlzLmdldChVLmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLEgseik6''@;'; put 'put ''KCgwLE0udGhyb3dJZkVycm9yKShVKSx0aGlzLnBhcnNlUmVzcG9uc2UoVSkpfSkpLmNhdGNoKFU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFUsKCk9PnRoaXMucG9zdChCLEYsTixILHopKX0pKX0pfX19LDM2MDI6KHRl''@;'; put 'put ''LGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouU0FTSlNfTE9HU19TRVBBUkFUT1I9ai5TYXNqc1JlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IFM9ZCg0NTg4KTtqLlNhc2pzUmVxdWVzdENsaWVudD1jbGFzcyBo''@;'; put 'put ''IGV4dGVuZHMgUy5SZXF1ZXN0Q2xpZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldEhlYWRlcnM9KEksZik9Pnt2YXIgVDtjb25zdCBBPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09ZiYmKEFbIkNvbnRlbnQtVHlwZSJd''@;'; put 'put ''PWYpLEEuQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PWY/ZjoiKi8qIiwhSSYmdHlwZW9mIHdpbmRvdzwidSImJihJPW51bGwhPT0oVD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4iKSkmJnZvaWQgMCE9PVQ/VDp2b2lkIDApLEkmJihBLkF1dGhvcml6YXRpb249YEJlYXJl''@;'; put 'put ''ciAke0l9YCksQX19cGFyc2VSZXNwb25zZShJKXtjb25zdCBmPUk/LmhlYWRlcnM/SS5oZWFkZXJzLmV0YWc6IiI7bGV0IEEsTSxPLFQ9e307dHJ5e1Q9InN0cmluZyI9PXR5cGVvZiBJLmRhdGE/SlNPTi5wYXJzZShJLmRhdGEpOkkuZGF0YX1jYXRjaHtpZihJLmRhdGEuaW5jbHVkZXMoai5T''@;'; put 'put ''QVNKU19MT0dTX1NFUEFSQVRPUikpe2NvbnN0e2RhdGE6Qn09SSxGPUIuc3BsaXQoai5TQVNKU19MT0dTX1NFUEFSQVRPUik7QT1GLnNwbGljZSgwLDEpWzBdLHZvaWQgMCE9PUEmJihUPUEpO2NvbnN0IE49Ri5zcGxpY2UoMCxGLmxlbmd0aC0xKSxIPW5ldyBSZWdFeHAoYCR7ai5TQVNKU19M''@;'; put 'put ''T0dTX1NFUEFSQVRPUn0kYCksej1GWzBdO3omJihILnRlc3QoQik/Ti5sZW5ndGg+MSYmTi5wdXNoKHopOk89eiksTT1OLmpvaW4oai5TQVNKU19MT0dTX1NFUEFSQVRPUil9ZWxzZSBUPUkuZGF0YX1jb25zdCBEPXtyZXN1bHQ6VCxsb2c6TXx8IiIsZXRhZzpmLHN0YXR1czpJLnN0YXR1c307''@;'; put 'put ''cmV0dXJuIE8mJihELnByaW50T3V0cHV0PU8pLER9fSxqLlNBU0pTX0xPR1NfU0VQQVJBVE9SPSJTQVNKU19MT0dTX1NFUEFSQVRPUl8xNjNlZTE3YjZmZjI0ZjAyODkyODk3MmQ4MGEyNjc4NCJ9LDQ3MDoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NjY2Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KX0sNTc2NjoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OTc1Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9''@;'; put 'put ''LDIxNToodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NzgyOih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQxNjg6KHRlLGop''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzODQwOih0ZSxqKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDMxNTM6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTQyODoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOih0ZSxqKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUyxoO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkxvZ2luTWVjaGFuaXNtPWouU0FTanNDb25maWc9dm9pZCAw''@;'; put 'put ''LGouU0FTanNDb25maWc9Y2xhc3MgZHtjb25zdHJ1Y3Rvcigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIiLHRoaXMucGF0aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMu''@;'; put 'put ''dmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRoaXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMubG9naW5NZWNoYW5pc209Uy5EZWZhdWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMH19LChoPVM9ai5Mb2dpbk1lY2hhbmlzbXx8KGouTG9naW5NZWNoYW5pc209e30pKS5EZWZh''@;'; put 'put ''dWx0PSJEZWZhdWx0IixoLlJlZGlyZWN0ZWQ9IlJlZGlyZWN0ZWQifSw2MDM4Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUztPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5TZXNzaW9uU3RhdGU9dm9pZCAwLChTPWouU2Vzc2lvblN0YXRlfHwo''@;'; put 'put ''ai5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsUy5SdW5uaW5nPSJydW5uaW5nIixTLlBlbmRpbmc9InBlbmRpbmciLFMuSWRsZT0iaWRsZSIsUy5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLFMuTm9TdGF0ZT0iIixTLkZhaWxlZD0iZmFpbGVkIixTLkVycm9yPSJl''@;'; put 'put ''cnJvciJ9LDMwNzc6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouVGFibGVzPXZvaWQgMDtjb25zdCBTPWQoMTM5NSk7ai5UYWJsZXM9Y2xhc3MgaHtjb25zdHJ1Y3RvcihJLGYpe3RoaXMuX3RhYmxlcz17''@;'; put 'put ''fSx0aGlzLmFkZChJLGYpfWFkZChJLGYpe2lmKCFJfHwhZil0aHJvdyBuZXcgUy5Bcmd1bWVudEVycm9yKCJNaXNzaW5nIGFyZ3VtZW50cyIpO2lmKCEoSSBpbnN0YW5jZW9mIEFycmF5KSl0aHJvdyBuZXcgUy5Bcmd1bWVudEVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFycmF5Iik7''@;'; put 'put ''aWYoInN0cmluZyIhPXR5cGVvZiBmKXRocm93IG5ldyBTLkFyZ3VtZW50RXJyb3IoIlNlY29uZCBhcmd1bWVudCBtdXN0IGJlIHN0cmluZyIpO2lmKCFpc05hTihOdW1iZXIoZltmLmxlbmd0aC0xXSkpKXRocm93IG5ldyBTLkFyZ3VtZW50RXJyb3IoIk1hY3JvIG5hbWUgY2Fubm90IGhhdmUg''@;'; put 'put ''bnVtYmVyIGF0IHRoZSBlbmQiKTt0aGlzLl90YWJsZXNbZl09SX19fSw5NDkzOih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg2NTA6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTY0NDoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouQXJndW1lbnRFcnJvcj12b2lkIDA7Y2xhc3MgZCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGgp''@;'; put 'put ''e3N1cGVyKGgpLHRoaXMubWVzc2FnZT1oLHRoaXMubmFtZT0iQXJndW1lbnRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsZC5wcm90b3R5cGUpfX1qLkFyZ3VtZW50RXJyb3I9ZH0sMTI0Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksai5BdXRob3JpemVFcnJvcj12b2lkIDA7Y2xhc3MgZCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGgsbyl7c3VwZXIoaCksdGhpcy5tZXNzYWdlPWgsdGhpcy5jb25maXJtVXJsPW8sdGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFBy''@;'; put 'put ''b3RvdHlwZU9mKHRoaXMsZC5wcm90b3R5cGUpfX1qLkF1dGhvcml6ZUVycm9yPWR9LDk0NjU6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkNlcnRpZmljYXRlRXJyb3I9dm9pZCAwO2NsYXNzIFMgZXh0ZW5k''@;'; put 'put ''cyBFcnJvcntjb25zdHJ1Y3RvcihvKXtzdXBlcihgJHtvfVxuUGxlYXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoaXMgaXNzdWU6XG4tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNqcy9jbGkvaXNzdWVzLzExODEjaXNzdWVjb21tZW50LTEwOTA2''@;'; put 'put ''Mzg1ODRcbmApLHRoaXMubmFtZT0iQ2VydGlmaWNhdGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsUy5wcm90b3R5cGUpfX1qLkNlcnRpZmljYXRlRXJyb3I9U30sNTI2NzoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLGouQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyBkIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoaCxvKXtzdXBlcigiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIiksdGhpcy5qb2I9aCx0aGlzLmxvZz1vLHRoaXMubmFtZT0iQ29tcHV0ZUpv''@;'; put 'put ''YkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxkLnByb3RvdHlwZSl9fWouQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPWR9LDkyMzI6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxq''@;'; put 'put ''LkVycm9yUmVzcG9uc2U9dm9pZCAwLGouRXJyb3JSZXNwb25zZT1jbGFzcyBke2NvbnN0cnVjdG9yKGgsbyxJKXtsZXQgZj1vO2lmKCJvYmplY3QiIT10eXBlb2Ygbyl0cnl7Zj1KU09OLnBhcnNlKG8pfWNhdGNoe0k9byxmPSIifXRoaXMuZXJyb3I9e21lc3NhZ2U6aCxkZXRhaWxzOmYscmF3''@;'; put 'put ''Okl9fX19LDUxMDk6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkludGVybmFsU2VydmVyRXJyb3I9dm9pZCAwO2NsYXNzIGQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFcnJvcjogSW50''@;'; put 'put ''ZXJuYWwgc2VydmVyIGVycm9yLiIpLHRoaXMubmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsZC5wcm90b3R5cGUpfX1qLkludGVybmFsU2VydmVyRXJyb3I9ZH0sNTUxODoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouSW52YWxpZEpzb25FcnJvcj12b2lkIDA7Y2xhc3MgZCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBpbnZhbGlkIEpzb24gc3RyaW5nIiksdGhpcy5uYW1lPSJJbnZhbGlkSnNvbkVycm9yIixPYmplY3Qu''@;'; put 'put ''c2V0UHJvdG90eXBlT2YodGhpcyxkLnByb3RvdHlwZSl9fWouSW52YWxpZEpzb25FcnJvcj1kfSwxMDA1Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5JbnZhbGlkU0FTanNDc3JmRXJyb3I9dm9pZCAwO2Ns''@;'; put 'put ''YXNzIGQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJBdXRoIGVycm9yOiBJbnZhbGlkIENTUkYgdG9rZW4hIiksdGhpcy5uYW1lPSJJbnZhbGlkU0FTanNDc3JmRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGQucHJvdG90eXBlKX19ai5JbnZhbGlkU0FTanND''@;'; put 'put ''c3JmRXJyb3I9ZH0sODUzMToodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIGQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihoLG8sSSl7c3VwZXIoYEVy''@;'; put 'put ''cm9yIENvZGUgJHtofTogJHtvfWApLHRoaXMuZXJyb3JDb2RlPWgsdGhpcy5lcnJvck1lc3NhZ2U9byx0aGlzLnJlc3VsdD1JLHRoaXMubmFtZT0iSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGQucHJvdG90eXBlKX19ai5Kb2JFeGVjdXRpb25FcnJvcj1k''@;'; put 'put ''fSw5MDc5Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Kb2JTdGF0ZVBvbGxFcnJvcj12b2lkIDA7Y2xhc3MgZCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGgsbyl7c3VwZXIoYEVycm9yIHdoaWxlIHBv''@;'; put 'put ''bGxpbmcgam9iIHN0YXRlIGZvciBqb2IgJHtofTogJHtvLm1lc3NhZ2V8fG99YCksdGhpcy5vcmlnaW5hbEVycm9yPW8sdGhpcy5uYW1lPSJKb2JTdGF0ZVBvbGxFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsZC5wcm90b3R5cGUpfX1qLkpvYlN0YXRlUG9sbEVycm9yPWR9LDMw''@;'; put 'put ''OTY6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLkpzb25QYXJzZUFycmF5RXJyb3I9dm9pZCAwO2NsYXNzIGQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW4gbm90IHBhcnNlIGFycmF5''@;'; put 'put ''IG9iamVjdCB0byBqc29uLiIpLHRoaXMubmFtZT0iSnNvblBhcnNlQXJyYXlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsZC5wcm90b3R5cGUpfX1qLkpzb25QYXJzZUFycmF5RXJyb3I9ZH0sNjc0MzoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDtjbGFzcyBkIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoaCl7c3VwZXIoYEF1dGggZXJyb3I6ICR7aD9KU09OLnN0cmluZ2lmeShoLG51bGwsMik6IllvdSBtdXN0IGJlIGxvZ2dlZCBpbiB0''@;'; put 'put ''byBhY2Nlc3MgdGhpcyByZXNvdXJjZSJ9YCksdGhpcy5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGQucHJvdG90eXBlKX19ai5Mb2dpblJlcXVpcmVkRXJyb3I9ZH0sNzg2NDoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouTm9TZXNzaW9uU3RhdGVFcnJvcj12b2lkIDA7Y2xhc3MgZCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGgsbyxJKXtzdXBlcihgQ291bGQgbm90IGdldCBzZXNzaW9uIHN0YXRlLiBTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggJHto''@;'; put 'put ''fSB3aGlsc3QgY2hlY2tpbmcgc3RhdGU6ICR7b31gKSx0aGlzLnNlcnZlclJlc3BvbnNlU3RhdHVzPWgsdGhpcy5zZXNzaW9uU3RhdGVVcmw9byx0aGlzLmxvZ1VybD1JLHRoaXMubmFtZT0iTm9TZXNzaW9uU3RhdHVzIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxkLnByb3RvdHlwZSl9''@;'; put 'put ''fWouTm9TZXNzaW9uU3RhdGVFcnJvcj1kfSw5NTc3Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Ob3RGb3VuZEVycm9yPXZvaWQgMDtjbGFzcyBkIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoaCl7c3Vw''@;'; put 'put ''ZXIoYEVycm9yOiBSZXNvdXJjZSBhdCAke2h9IHdhcyBub3QgZm91bmRgKSx0aGlzLnVybD1oLHRoaXMubmFtZT0iTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsZC5wcm90b3R5cGUpfX1qLk5vdEZvdW5kRXJyb3I9ZH0sOTI3OToodGUsaixkKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj12b2lkIDA7Y29uc3QgUz1kKDY3OTkpO2NsYXNzIGggZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihJLGYsVCl7bGV0IEE9YFJvb3QgZm9sZGVyICR7''@;'; put 'put ''SX0gd2FzIG5vdCBmb3VuZC5cblBsZWFzZSBjaGVjayAke2Z9L1NBU0RyaXZlLlxuSWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVybWlzc2lvbiBwcm9ibGVtLlxuYDtpZihUKXtsZXQgTz0oMCxTLmRlY29kZVRva2VuKShUKS5zY29wZTtPPU8ubWFwKEQ9''@;'; put 'put ''PiIqICIrRCksQSs9IllvdXIgYWNjZXNzIHRva2VuIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2NvcGVzOlxuIitPLmpvaW4oIlxuIil9c3VwZXIoQSksdGhpcy5uYW1lPSJSb290Rm9sZGVyTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsaC5wcm90b3R5cGUpfX1q''@;'; put 'put ''LlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPWh9LDk1MjY6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLlNBUzlBdXRoRXJyb3I9dm9pZCAwO2NsYXNzIGQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1''@;'; put 'put ''cGVyKCJUaGUgY3JlZGVudGlhbHMgeW91IHByb3ZpZGVkIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNldCBvZiBjcmVkZW50aWFscy4iKSx0aGlzLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxkLnByb3Rv''@;'; put 'put ''dHlwZSl9fWouU0FTOUF1dGhFcnJvcj1kfSw4ODc1Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5XZWJvdXRSZXNwb25zZUVycm9yPXZvaWQgMDtjbGFzcyBkIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Io''@;'; put 'put ''aCl7c3VwZXIoYEVycm9yOiBlcnJvciB3aGlsZSBwYXJzaW5nIHJlc3BvbnNlIGZyb20gJHtofWApLHRoaXMudXJsPWgsdGhpcy5uYW1lPSJXZWJvdXRSZXNwb25zZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxkLnByb3RvdHlwZSl9fWouV2Vib3V0UmVzcG9uc2VFcnJvcj1k''@;'; put 'put ''fSwxMzk1OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihvLEksZixUKXt2b2lkIDA9PT1UJiYoVD1mKTt2YXIgQT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEksZik7''@;'; put 'put ''KCFBfHwoImdldCJpbiBBPyFJLl9fZXNNb2R1bGU6QS53cml0YWJsZXx8QS5jb25maWd1cmFibGUpKSYmKEE9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIElbZl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sVCxBKX06ZnVuY3Rpb24obyxJLGYsVCl7dm9pZCAwPT09''@;'; put 'put ''VCYmKFQ9Ziksb1tUXT1JW2ZdfSksaD10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24obyxJKXtmb3IodmFyIGYgaW4gbykiZGVmYXVsdCIhPT1mJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEksZikmJlMoSSxvLGYpfTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksaChkKDU2NDQpLGopLGgoZCgxMjQpLGopLGgoZCg5NDY1KSxqKSxoKGQoNTI2NyksaiksaChkKDkyMzIpLGopLGgoZCg1MTA5KSxqKSxoKGQoNTUxOCksaiksaChkKDg1MzEpLGopLGgoZCg5MDc5KSxqKSxoKGQoMzA5NiksaiksaChkKDY3''@;'; put 'put ''NDMpLGopLGgoZCg3ODY0KSxqKSxoKGQoOTU3NyksaiksaChkKDkyNzkpLGopLGgoZCg4ODc1KSxqKX0sMTIzMDpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obyxJLGYsVCl7dm9p''@;'; put 'put ''ZCAwPT09VCYmKFQ9Zik7dmFyIEE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJLGYpOyghQXx8KCJnZXQiaW4gQT8hSS5fX2VzTW9kdWxlOkEud3JpdGFibGV8fEEuY29uZmlndXJhYmxlKSkmJihBPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJW2ZdfX0p''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLFQsQSl9OmZ1bmN0aW9uKG8sSSxmLFQpe3ZvaWQgMD09PVQmJihUPWYpLG9bVF09SVtmXX0pLGg9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKG8sSSl7Zm9yKHZhciBmIGluIG8pImRlZmF1bHQiIT09ZiYmIU9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChJLGYpJiZTKEksbyxmKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGgoZCg0NzApLGopLGgoZCg0NjY2KSxqKSxoKGQoNDk3NSksaiksaChkKDU3NjYpLGopLGgoZCgyMTUpLGopLGgoZCg0NzgyKSxqKSxo''@;'; put 'put ''KGQoNDE2OCksaiksaChkKDg1MTYpLGopLGgoZCgzODQwKSxqKSxoKGQoNTg0MSksaiksaChkKDE0MjgpLGopLGgoZCg2MDM4KSxqKSxoKGQoOTQ5MyksaiksaChkKDMxNTMpLGopLGgoZCg4NjUwKSxqKSxoKGQoNjE3NyksaiksaChkKDEzOTUpLGopLGgoZCgzMDc3KSxqKX0sMzMwMjpmdW5j''@;'; put 'put ''dGlvbih0ZSxqKXsidXNlIHN0cmljdCI7dmFyIGQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGgsbyxJLGYpe3JldHVybiBuZXcoSXx8KEk9UHJvbWlzZSkpKGZ1bmN0aW9uKEEsTSl7ZnVuY3Rpb24gTyhCKXt0cnl7RShmLm5leHQoQikpfWNhdGNoKEYpe00oRil9fWZ1bmN0aW9u''@;'; put 'put ''IEQoQil7dHJ5e0UoZi50aHJvdyhCKSl9Y2F0Y2goRil7TShGKX19ZnVuY3Rpb24gRShCKXtCLmRvbmU/QShCLnZhbHVlKTpmdW5jdGlvbiBUKEEpe3JldHVybiBBIGluc3RhbmNlb2YgST9BOm5ldyBJKGZ1bmN0aW9uKE0pe00oQSl9KX0oQi52YWx1ZSkudGhlbihPLEQpfUUoKGY9Zi5hcHBs''@;'; put 'put ''eShoLG98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz12b2lkIDAsai5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbiBTKGgsbyl7cmV0dXJu''@;'; put 'put ''IGQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBJPXt9O2lmKG8/Lmxlbmd0aCl7Y29uc3QgZj1vLnJlZHVjZSgoVCxBKT0+KFRbQV09aFtBXSxUKSx7fSk7ST1PYmplY3QuYXNzaWduKHtyZXN1bHQ6aC5yZXN1bHR9LGYpfWVsc2UgST1oLnJlc3VsdDtyZXR1cm4gSX0pfX0s''@;'; put 'put ''NzkyMjpmdW5jdGlvbih0ZSxqKXsidXNlIHN0cmljdCI7dmFyIGQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGgsbyxJLGYpe3JldHVybiBuZXcoSXx8KEk9UHJvbWlzZSkpKGZ1bmN0aW9uKEEsTSl7ZnVuY3Rpb24gTyhCKXt0cnl7RShmLm5leHQoQikpfWNhdGNoKEYpe00oRil9''@;'; put 'put ''fWZ1bmN0aW9uIEQoQil7dHJ5e0UoZi50aHJvdyhCKSl9Y2F0Y2goRil7TShGKX19ZnVuY3Rpb24gRShCKXtCLmRvbmU/QShCLnZhbHVlKTpmdW5jdGlvbiBUKEEpe3JldHVybiBBIGluc3RhbmNlb2YgST9BOm5ldyBJKGZ1bmN0aW9uKE0pe00oQSl9KX0oQi52YWx1ZSkudGhlbihPLEQpfUUo''@;'; put 'put ''KGY9Zi5hcHBseShoLG98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5hc3luY0ZvckVhY2g9dm9pZCAwLGouYXN5bmNGb3JFYWNoPWZ1bmN0aW9uIFMoaCxvKXtyZXR1cm4gZCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7Zm9yKGxldCBJPTA7STxoLmxlbmd0aDtJKyspeWllbGQgbyhoW0ldLEksaCl9KX19LDM3OTM6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmNvbXBhcmVUaW1lc3RhbXBzPXZvaWQgMCxqLmNv''@;'; put 'put ''bXBhcmVUaW1lc3RhbXBzPShTLGgpPT5oLnRpbWVzdGFtcC5nZXRUaW1lKCktUy50aW1lc3RhbXAuZ2V0VGltZSgpfSwyNDAyOih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouaXNG''@;'; put 'put ''b3JtYXRzVGFibGU9ai5jb252ZXJ0VG9DU1Y9dm9pZCAwO2NvbnN0IGg9ZCg2NDY3KSxvPWQoOTc3OCk7ai5jb252ZXJ0VG9DU1Y9KEEsTSk9Pnt2YXIgTztpZighQVtNXSl7Y29uc3QgWj0oMCxvLnByZWZpeE1lc3NhZ2UpKCJObyB0YWJsZSBwcm92aWRlZCB0byBiZSBjb252ZXJ0ZWQgdG8g''@;'; put 'put ''Q1NWLiIsIkVycm9yIHdoaWxlIGNvbnZlcnRpbmcgdG8gQ1NWLiAiKTt0aHJvdyJzdHJpbmciPT10eXBlb2YgWj9uZXcgRXJyb3IoWik6Wn1jb25zdCBEPUFbTV07aWYoIUFycmF5LmlzQXJyYXkoRCkpcmV0dXJuIiI7bGV0IEYsRT1udWxsPT09KE89QVtgJCR7TX1gXSl8fHZvaWQgMD09PU8/''@;'; put 'put ''dm9pZCAwOk8uZm9ybWF0cyxCPVtdLE49ITE7RSYmKEI9T2JqZWN0LmtleXMoRSkubWFwKFo9PmAke1p9OiR7RVtaXX1gKSk7Y29uc3QgSD1PYmplY3Qua2V5cyhEWzBdKTtyZXR1cm4gSC5mb3JFYWNoKFo9PntpZighRXx8IU9iamVjdC5rZXlzKEUpLmluY2x1ZGVzKFopKXtsZXQgVT0hMSxL''@;'; put 'put ''PSExO2lmKEQuZm9yRWFjaChYPT57bnVsbD09PVhbWl18fCJudW1iZXIiPT10eXBlb2YgWFtaXT9VPSEwOiJzdHJpbmciPT10eXBlb2YgWFtaXSYmKDAsaC5pc1NwZWNpYWxNaXNzaW5nKShYW1pdKSYmKEs9ITApfSksVSYmSylCLnB1c2goYCR7Wn06YmVzdC5gKSxFfHwoRT17fSksRVtaXT0i''@;'; put 'put ''YmVzdC4iO2Vsc2V7bGV0IFg9bnVsbCxuZT0hMSxzZT0tMTtjb25zdCBoZT1ELm1hcCgoX2UsbWUpPT57aWYoX2VbWl18fCIiPT09X2VbWl0pe2xldCBGZTtyZXR1cm4gWD9uZXx8KG5lPSgiIj09PV9lW1pdfHwic3RyaW5nIj09dHlwZW9mIF9lW1pdPyJjaGFycyI6Im51bWJlciIpIT09WCxz''@;'; put 'put ''ZT1uZT9tZSsxOi0xKTpYPSIiPT09X2VbWl18fCJzdHJpbmciPT10eXBlb2YgX2VbWl0/ImNoYXJzIjoibnVtYmVyIiwic3RyaW5nIj09dHlwZW9mIF9lW1pdJiYoRmU9VChfZVtaXSkpLEZlfX0pLnNvcnQoKF9lLG1lKT0+bWUtX2UpWzBdO2hlJiZoZT4zMjc2NSYmKE49ITApLG5lJiZTLmVy''@;'; put 'put ''cm9yKGBSb3cgKCR7c2V9KSwgQ29sdW1uICgke1p9KSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9SYCksQi5wdXNoKGAke1p9OiR7ImNoYXJzIj09PVg/IiRjaGFyIjoiIn0ke2hlfHwoImNoYXJzIj09PVg/IjEiOiJiZXN0Iil9LmApfX19KSxFJiYoQj1CLnNvcnQoKFosVSk9PkguaW5kZXhPZiha''@;'; put 'put ''LnJlcGxhY2UoLzouKi8sIiIpKS1ILmluZGV4T2YoVS5yZXBsYWNlKC86LiovLCIiKSkpKSxOPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KEY9RC5tYXAoWj0+T2JqZWN0LmtleXMoWikubWFwKChLLFgpPT57bGV0IG5lO2NvbnN0IHNlPVpbS107aWYoIm51bWJlciI9PXR5cGVvZiBz''@;'; put 'put ''ZSlyZXR1cm4gc2U7aWYobmU9bnVsbD09PXNlPyIiOnNlLEUmJiJiZXN0LiI9PT1FW0tdKXtpZihuZSYmISgwLGguaXNTcGVjaWFsTWlzc2luZykobmUpKXRocm93IG5ldyBFcnJvcigiQSBTcGVjaWFsIG1pc3NpbmcgdmFsdWUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20g''@;'; put 'put ''J0EnIHRvICdaJywgJ18nLCAnLlthLXpdJywgJy5fJyIpO3JldHVybmAke25lLmluY2x1ZGVzKCIuIik/IiI6Ii4ifSR7bmUudG9Mb3dlckNhc2UoKX1gfXJldHVybiBuZT1uZS5yZXBsYWNlKC8iL2csJyIiJyksbmU9YCIke25lfSJgLG5lLnN1YnN0cmluZygxLG5lLmxlbmd0aC0xKS5zZWFy''@;'; put 'put ''Y2goLyhcdHxcbnxccnwsfFwnfFwiKS9nbSk8MCYmKG5lPW5lLnN1YnN0cmluZygxLG5lLmxlbmd0aC0xKSksbmU9bmUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKSwiIj09PW5lJiZCW1hdLmluY2x1ZGVzKCJiZXN0IikmJihuZT0iLiIpLG5lfSkuam9pbigiLCIpKSxCLmpvaW4oIiwiKS5yZXBs''@;'; put 'put ''YWNlKC8sL2csIiAiKSsiXHJcbiIrRi5qb2luKCJcclxuIikpfSxqLmlzRm9ybWF0c1RhYmxlPUE9Pi9eXCQuKi8udGVzdChBKTtjb25zdCBUPUE9PntsZXQgTT1BLmxlbmd0aDtmb3IobGV0IE89QS5sZW5ndGgtMTtPPj0wO08tLSl7Y29uc3QgRD1BLmNoYXJDb2RlQXQoTyk7RD4xMjcmJkQ8''@;'; put 'put ''PTIwNDc/TSsrOkQ+MjA0NyYmRDw9NjU1MzUmJihNKz0yKSxEPj01NjMyMCYmRDw9NTczNDMmJk8tLX1yZXR1cm4gTX19LDYxMTY6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEkpe3JldHVybiBJJiZJLl9f''@;'; put 'put ''ZXNNb2R1bGU/STp7ZGVmYXVsdDpJfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouY3JlYXRlQXhpb3NJbnN0YW5jZT12b2lkIDA7Y29uc3QgaD1TKGQoNzIxOCkpO2ouY3JlYXRlQXhpb3NJbnN0YW5jZT0oSSxmKT0+aC5kZWZhdWx0LmNyZWF0''@;'; put 'put ''ZSh7YmFzZVVSTDpJLGh0dHBzQWdlbnQ6Zn0pfSw5ODI1Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5kZWxheT12b2lkIDAsai5kZWxheT1TPT5uZXcgUHJvbWlzZShoPT5zZXRUaW1lb3V0KGgsUykpfSw5''@;'; put 'put ''OTA6ZnVuY3Rpb24odGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MTU1KSxoPWQoNTEwOCksbz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQSxNLE8sRCl7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oQixGKXtmdW5jdGlvbiBOKFope3RyeXt6KEQubmV4''@;'; put 'put ''dChaKSl9Y2F0Y2goVSl7RihVKX19ZnVuY3Rpb24gSChaKXt0cnl7eihELnRocm93KFopKX1jYXRjaChVKXtGKFUpfX1mdW5jdGlvbiB6KFope1ouZG9uZT9CKFoudmFsdWUpOmZ1bmN0aW9uIEUoQil7cmV0dXJuIEIgaW5zdGFuY2VvZiBPP0I6bmV3IE8oZnVuY3Rpb24oRil7RihCKX0pfSha''@;'; put 'put ''LnZhbHVlKS50aGVuKE4sSCl9eigoRD1ELmFwcGx5KEEsTXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmZldGNoTG9nPWouZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7Y29uc3QgST1kKDk3NzgpO2ouZmV0Y2hMb2dC''@;'; put 'put ''eUNodW5rcz0oQSxNLE8sRCk9Pm8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkKDAsai5mZXRjaExvZykoQSxNLE8sMCxEKX0pLGouZmV0Y2hMb2c9KEEsTSxPLEQsRSk9Pm8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgQj1TLmxv''@;'; put 'put ''Z2dlcnx8aDtsZXQgRj0iIjtjb25zdCBOPUU8MWU0P0U6MWU0O2Rve0IuaW5mbyhgRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICR7RCsxfSB0byAke0QrTn0gb2YgJHtFfS5gKTtjb25zdCBIPXlpZWxkIEEuZ2V0KGAke099P3N0YXJ0PSR7RH0mbGltaXQ9JHtOfWAsTSkudGhlbihaPT5a''@;'; put 'put ''LnJlc3VsdCkuY2F0Y2goWj0+e3Rocm93KDAsSS5wcmVmaXhNZXNzYWdlKShaLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4gIil9KTtpZigwPT09SC5pdGVtcy5sZW5ndGgpYnJlYWs7Ris9SC5pdGVtcy5tYXAoWj0+Wi5saW5lKS5qb2luKCJcbiIpLEQrPU59d2hpbGUoRDxFKTtyZXR1cm4g''@;'; put 'put ''Rn0pfSw3MTQ6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouZm9ybWF0RGF0YUZvclJlcXVlc3Q9dm9pZCAwO2NvbnN0IFM9ZCgyNDAyKSxoPWQoNDc5OSk7ai5mb3JtYXREYXRhRm9yUmVxdWVzdD1JPT57''@;'; put 'put ''Y29uc3QgZj1bXTtsZXQgVD0wO2NvbnN0IEE9e307Zm9yKGNvbnN0IE0gaW4gSSl7aWYoKDAsUy5pc0Zvcm1hdHNUYWJsZSkoTSkmJk9iamVjdC5rZXlzKEkpLmluY2x1ZGVzKE0ucmVwbGFjZSgvXlwkLywiIikpKWNvbnRpbnVlO1QrKywoMCxTLmlzRm9ybWF0c1RhYmxlKShNKXx8Zi5wdXNo''@;'; put 'put ''KE0pO2NvbnN0IE89KDAsUy5jb252ZXJ0VG9DU1YpKEksTSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU8pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKE8ubGVuZ3Ro''@;'; put 'put ''PjE2ZTMpe2NvbnN0IEQ9KDAsaC5zcGxpdENodW5rcykoTyk7QVtgc2FzanMke1R9ZGF0YTBgXT1ELmxlbmd0aCxELmZvckVhY2goKEUsQik9PntBW2BzYXNqcyR7VH1kYXRhJHtCKzF9YF09RX0pfWVsc2UgQVtgc2FzanMke1R9ZGF0YWBdPU99cmV0dXJuIEEuc2FzanNfdGFibGVzPWYuam9p''@;'; put 'put ''bigiICIpLEF9fSw4NDU4OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihmKXtyZXR1cm4gZiYmZi5fX2VzTW9kdWxlP2Y6e2RlZmF1bHQ6Zn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxqLmdldEZvcm1EYXRhPXZvaWQgMDtjb25zdCBoPWQoNTkyOCksbz1TKGQoNjIzMCkpO2ouZ2V0Rm9ybURhdGE9KCk9PigwLGguaXNOb2RlKSgpP25ldyBvLmRlZmF1bHQ6bmV3IEZvcm1EYXRhfSwzMjYwOih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRVc2VyTGFuZ3VhZ2U9dm9pZCAwLGouZ2V0VXNlckxhbmd1YWdlPSgpPT53aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZX0sMTg4NDoodGUsaixkKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5nZXRWYWxpZEpzb249dm9pZCAwO2NvbnN0IFM9ZCgxMzk1KTtqLmdldFZhbGlkSnNvbj1vPT57dHJ5e2lmKG51bGw9PW8pdGhyb3cgbmV3IFMuSW52YWxpZEpzb25FcnJvcjtpZihBcnJheS5p''@;'; put 'put ''c0FycmF5KG8pKXRocm93IG5ldyBTLkpzb25QYXJzZUFycmF5RXJyb3I7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBvP286IiI9PT1vP3t9OkpTT04ucGFyc2Uobyl9Y2F0Y2goSSl7dGhyb3cgSSBpbnN0YW5jZW9mIFMuSnNvblBhcnNlQXJyYXlFcnJvcj9JOm5ldyBTLkludmFsaWRKc29uRXJy''@;'; put 'put ''b3J9fX0sNTkyODpmdW5jdGlvbih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obyxJLGYsVCl7dm9pZCAwPT09VCYmKFQ9Zik7dmFyIEE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJ''@;'; put 'put ''LGYpOyghQXx8KCJnZXQiaW4gQT8hSS5fX2VzTW9kdWxlOkEud3JpdGFibGV8fEEuY29uZmlndXJhYmxlKSkmJihBPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJW2ZdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLFQsQSl9OmZ1bmN0aW9uKG8sSSxmLFQpe3ZvaWQg''@;'; put 'put ''MD09PVQmJihUPWYpLG9bVF09SVtmXX0pLGg9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKG8sSSl7Zm9yKHZhciBmIGluIG8pImRlZmF1bHQiIT09ZiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChJLGYpJiZTKEksbyxmKX07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGgoZCgzMzAyKSxqKSxoKGQoNzkyMiksaiksaChkKDM3OTMpLGopLGgoZCgyNDAyKSxqKSxoKGQoNjExNiksaiksaChkKDk4MjUpLGopLGgoZCg5OTApLGopLGgoZCgxODg0KSxqKSxoKGQoNDI0MyksaiksaChkKDI1NyksaiksaChk''@;'; put 'put ''KDIpLGopLGgoZCgyNjE1KSxqKSxoKGQoMjkyMCksaiksaChkKDI0MjIpLGopLGgoZCgzMSksaiksaChkKDY1MTUpLGopLGgoZCg2NDE2KSxqKSxoKGQoMjgxMyksaiksaChkKDk4OTYpLGopLGgoZCg0Nzk5KSxqKSxoKGQoNDUxNiksaiksaChkKDg0NTgpLGopLGgoZCgzMjYwKSxqKX0sNDI0''@;'; put 'put ''MzoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzTm9kZT12b2lkIDAsai5pc05vZGU9KCk9PnR5cGVvZiBTPCJ1IiYmbnVsbCE9Uy52ZXJzaW9ucyYmbnVsbCE9Uy52ZXJzaW9u''@;'; put 'put ''cy5ub2RlfSwyNTc6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzUmVsYXRpdmVQYXRoPXZvaWQgMCxqLmlzUmVsYXRpdmVQYXRoPVM9PiEhUyYmIVMuc3RhcnRzV2l0aCgiLyIpfSwyOih0ZSxqKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5pc1VyaT12b2lkIDAsai5pc1VyaT1TPT4vXlwvZm9sZGVyc1wvZm9sZGVyc1wvLy50ZXN0KFMpfSwyNjE1Oih0ZSxqKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5pc1VybD12b2lkIDAsai5pc1VybD1TPT57Y29uc3QgaD1bImh0dHA6IiwiaHR0cHM6Il07dHJ5e2NvbnN0IG89bmV3IFVSTChTKTtpZighaC5pbmNsdWRlcyhvLnByb3RvY29sKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4h''@;'; put 'put ''MH19LDEyMTA6ZnVuY3Rpb24odGUsail7InVzZSBzdHJpY3QiO3ZhciBkPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihBLE0sTyxEKXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihCLEYpe2Z1bmN0aW9uIE4oWil7dHJ5e3ooRC5uZXh0KFopKX1jYXRjaChVKXtG''@;'; put 'put ''KFUpfX1mdW5jdGlvbiBIKFope3RyeXt6KEQudGhyb3coWikpfWNhdGNoKFUpe0YoVSl9fWZ1bmN0aW9uIHooWil7Wi5kb25lP0IoWi52YWx1ZSk6ZnVuY3Rpb24gRShCKXtyZXR1cm4gQiBpbnN0YW5jZW9mIE8/QjpuZXcgTyhmdW5jdGlvbihGKXtGKEIpfSl9KFoudmFsdWUpLnRoZW4oTixI''@;'; put 'put ''KX16KChEPUQuYXBwbHkoQSxNfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoub3BlbkxvZ2luUHJvbXB0PXZvaWQgMDt2YXIgUz1mdW5jdGlvbihBKXtyZXR1cm4gQS5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIs''@;'; put 'put ''QS5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixBLmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiLEF9KFN8fHt9KTtjb25zdCBoPSJzYXNqcy1hZGFwdGVyIixvPXtwb3BVcDpgJHtofXBvcFVwYCxwb3BVcEJHOmAke2h9cG9wVXBCR2B9O2oub3BlbkxvZ2luUHJv''@;'; put 'put ''bXB0PSgpPT5uZXcgUHJvbWlzZShBPT5kKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtNLmlkPVMuc3R5bGVzLE0uaW5uZXJUZXh0PVQ7Y29uc3QgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtP''@;'; put 'put ''LmlkPVMub3ZlcmxheSxPLmNsYXNzTGlzdC5hZGQoby5wb3BVcEJHKTtjb25zdCBEPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0QuaWQ9Uy5kaWFsb2csRC5jbGFzc0xpc3QuYWRkKG8ucG9wVXApO2NvbnN0IEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKTtFLmlubmVyVGV4''@;'; put 'put ''dD0iU2Vzc2lvbiBFeHBpcmVkISIsRC5hcHBlbmRDaGlsZChFKTtjb25zdCBCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO0YuaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBPSyB0byBsb2dpbi4iLEIu''@;'; put 'put ''YXBwZW5kQ2hpbGQoRiksRC5hcHBlbmRDaGlsZChCKTtjb25zdCBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO04uY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksTi5pbm5lclRleHQ9IkNhbmNlbCIsTi5vbmNsaWNrPSgpPT57ZigpLEEoITEpfSxELmFwcGVuZENoaWxkKE4pO2Nv''@;'; put 'put ''bnN0IEg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7SC5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksSC5pbm5lclRleHQ9Ik9rIixILm9uY2xpY2s9KCk9PntmKCksQSghMCl9LEQuYXBwZW5kQ2hpbGQoSCksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixk''@;'; put 'put ''b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKE0pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChEKX0pKTtjb25zdCBmPSgpPT57T2JqZWN0LnZhbHVlcyhTKS5mb3JFYWNoKEE9Pnt2YXIgTTtjb25zdCBPPWRvY3VtZW50LmdldEVsZW1lbnRC''@;'; put 'put ''eUlkKEEpO251bGw9PT0oTT1PPy5wYXJlbnROb2RlKXx8dm9pZCAwPT09TXx8TS5yZW1vdmVDaGlsZChPKX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxUPWBcbi4ke28ucG9wVXBCR30gLFxuLiR7by5wb3BVcH0ge1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4ke28u''@;'; put 'put ''cG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1''@;'; put 'put ''MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3Jv''@;'; put 'put ''dW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiR7by5wb3BV''@;'; put 'put ''cH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4g''@;'; put 'put ''IGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1c''@;'; put 'put ''bi4ke28ucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAg''@;'; put 'put ''LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzog''@;'; put 'put ''YXV0bztcbn1cbi4ke28ucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46''@;'; put 'put ''IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiR7by5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiR7by5wb3BVcH0gLmNv''@;'; put 'put ''bmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtvLnBvcFVwfSA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBh''@;'; put 'put ''ZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIp''@;'; put 'put ''O1xufVxuLiR7by5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtvLnBvcFVwQkd9IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAw''@;'; put 'put ''JTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG5gfSwyOTIwOih0ZSxqKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksai5uZWVkc1JldHJ5PXZvaWQgMCxqLm5lZWRzUmV0cnk9Uz0+ISFTJiYoUy5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJlMuaW5jbHVkZXMoIl9jc3JmIikmJlMuaW5jbHVkZXMoIlgt''@;'; put 'put ''Q1NSRi1UT0tFTiIpfHxTLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmUy5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxTLmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmUy5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIp''@;'; put 'put ''KX0sMjQyMjoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxqLnBhcnNlR2VuZXJhdGVkQ29kZT1TPT5TLnNwbGl0KCJcbiIpLmZpbHRlcihmPT5mLnRyaW0oKS5z''@;'; put 'put ''dGFydHNXaXRoKCJNUFJJTlQiKSkuam9pbigiXHJcbiIpfSwzMToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnBhcnNlU2FzVml5YUxvZz12b2lkIDAsai5wYXJzZVNhc1ZpeWFM''@;'; put 'put ''b2c9bz0+e2xldCBJO3RyeXtJPW8uaXRlbXM/by5pdGVtcy5tYXAoZj0+Zi5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KG8pfWNhdGNoKGYpe1MuZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2UiLGYpLEk9b31yZXR1cm4g''@;'; put 'put ''SX19LDY1MTU6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnBhcnNlU291cmNlQ29kZT12b2lkIDAsai5wYXJzZVNvdXJjZUNvZGU9Uz0+Uy5zcGxpdCgiXG4iKS5maWx0ZXIoST0+SS50cmltKCkuc3Vic3Ry''@;'; put 'put ''aW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKSkuam9pbigiXHJcbiIpfSw2NDE2OmZ1bmN0aW9uKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihJLGYsVCxBKXtyZXR1cm4gbmV3KFR8fChUPVByb21pc2UpKShmdW5jdGlv''@;'; put 'put ''bihPLEQpe2Z1bmN0aW9uIEUoTil7dHJ5e0YoQS5uZXh0KE4pKX1jYXRjaChIKXtEKEgpfX1mdW5jdGlvbiBCKE4pe3RyeXtGKEEudGhyb3coTikpfWNhdGNoKEgpe0QoSCl9fWZ1bmN0aW9uIEYoTil7Ti5kb25lP08oTi52YWx1ZSk6ZnVuY3Rpb24gTShPKXtyZXR1cm4gTyBpbnN0YW5jZW9m''@;'; put 'put ''IFQ/TzpuZXcgVChmdW5jdGlvbihEKXtEKE8pfSl9KE4udmFsdWUpLnRoZW4oRSxCKX1GKChBPUEuYXBwbHkoSSxmfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGoucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT12b2lk''@;'; put 'put ''IDA7Y29uc3QgaD1kKDU5MjgpO2oucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oSSxmLFQpPT5TKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEE9SS5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIgc3JjPSJ8PGlmcmFtZSBz''@;'; put 'put ''dHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sTT1BP0Euc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGw7aWYoIU0pdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB3ZWJvdXQgZmls''@;'; put 'put ''ZSBVUkwuIik7cmV0dXJuIGYuZ2V0KFQrTSx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKE89PigwLGguZ2V0VmFsaWRKc29uKShPLnJlc3VsdCkpfSl9LDI4MTM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksai5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDtjb25zdCBoPWQoMTM5NSk7ai5wYXJzZVdlYm91dFJlc3BvbnNlPShJLGYpPT57bGV0IFQ9IiI7aWYoSS5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e1Q9SS5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8Iilb''@;'; put 'put ''MV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChBKXtpZihmKXRocm93IG5ldyBoLldlYm91dFJlc3BvbnNlRXJyb3IoZik7VD0iIixTLmVycm9yKEEpfXJldHVybiBUfX0sMTE3MDoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGosIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLGouZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2NvbnN0IGQ9WyJMb2cgT2ZmIl07ai5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1oPT57Y29uc3QgST1oPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xldCBmPUk/LlswXS5zcGxpdCgiOiIpWzFdLnRy''@;'; put 'put ''aW0oKSxUPWY/LmluZGV4T2YoIiAiKTtyZXR1cm4gZj8oZC5tYXAoQT0+e2NvbnN0IE09Zj8uaW5kZXhPZihBKXx8LTE7TT4tMSYmKFQ9TStBLmxlbmd0aCl9KSxmLnNsaWNlKFQsLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjoodGUsaik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGouc2VyaWFsaXplPXZvaWQgMCxqLnNlcmlhbGl6ZT1TPT57Y29uc3QgaD1bXTtmb3IoY29uc3QgbyBpbiBTKWlmKFMuaGFzT3duUHJvcGVydHkobykpaWYoU1tvXWluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBJPTAsZj1TW29d''@;'; put 'put ''Lmxlbmd0aDtJPGY7SSsrKWgucHVzaChlbmNvZGVVUklDb21wb25lbnQobykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChTW29dW0ldKSk7ZWxzZSBoLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KG8pKyI9IitlbmNvZGVVUklDb21wb25lbnQoU1tvXSkpO3JldHVybiBoLmpvaW4oIiYiKX19LDQ3''@;'; put 'put ''OTk6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnNwbGl0Q2h1bmtzPXZvaWQgMCxqLnNwbGl0Q2h1bmtzPVM9Pntjb25zdCBvPU1hdGguY2VpbChTLmxlbmd0aC8xNmUzKSxJPW5ldyBBcnJheShvKTtmb3Io''@;'; put 'put ''bGV0IGY9MCxUPTA7ZjxvOysrZixUKz0xNmUzKUlbZl09Uy5zdWJzdHIoVCwxNmUzKTtyZXR1cm4gSX19LDQ1MTY6KHRlLGopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLnZhbGlkYXRlSW5wdXQ9ai5JTlZBTElEX1RB''@;'; put 'put ''QkxFX1NUUlVDVFVSRT1qLk1PUkVfSU5GTz12b2lkIDAsai5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsai5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1gUGFyYW1ldGVyIGRhdGEgY29udGFpbnMg''@;'; put 'put ''aW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICR7ai5NT1JFX0lORk99YCxqLnZhbGlkYXRlSW5wdXQ9aD0+e2lmKG51bGw9PT1oKXJldHVybntzdGF0dXM6ITAsbXNnOiIifTtpZigib2JqZWN0IiE9PVMoaCkpcmV0dXJue3N0YXR1czohMSxtc2c6ai5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07''@;'; put 'put ''Y29uc3Qgbz1JPT5JLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyhoKS5pbmNsdWRlcyhJLnJlcGxhY2UoL15cJC8sIiIpKTtmb3IoY29uc3QgSSBpbiBoKXtpZighSS5tYXRjaCgvXlthLXpBLVpfXS8pJiYhbyhJKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRh''@;'; put 'put ''YmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFJLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIW8oSSkpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihJLmxlbmd0aD4zMilyZXR1''@;'; put 'put ''cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09UyhoW0ldKSYmIW8oSSkpcmV0dXJue3N0YXR1czohMSxtc2c6ai5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShoW0ldKSlmb3IoY29uc3QgZiBvZiBoW0ldKXtpZigib2JqZWN0IiE9PVMoZikpcmV0dXJue3N0YXR1czohMSxtc2c6YFRhYmxlICR7SX0gY29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICR7ai5NT1JFX0lORk99YH07e2NvbnN0IFQ9T2JqZWN0LmtleXMoZik7Zm9yKGNvbnN0IEEgb2Yg''@;'; put 'put ''VClpZih2b2lkIDA9PT1mW0FdKXJldHVybntzdGF0dXM6ITEsbXNnOmBBIHJvdyBpbiB0YWJsZSAke0l9IGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gJHtBfS5gfX19fXJldHVybntzdGF0dXM6ITAsbXNnOiIifX07Y29uc3QgUz1oPT5BcnJheS5p''@;'; put 'put ''c0FycmF5KGgpPyJBcnJheSI6dHlwZW9mIGh9LDg5ODE6KHRlLGopPT57InVzZSBzdHJpY3QiO2ouZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKGQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uUyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFNbUy5sZW5ndGgtMV0pcmV0''@;'; put 'put ''dXJuIG5ldyBQcm9taXNlKChoLG8pPT57Uy5wdXNoKChJLGYpPT5udWxsIT1JP28oSSk6aChmKSksZC5hcHBseSh0aGlzLFMpfSk7ZC5hcHBseSh0aGlzLFMpfSwibmFtZSIse3ZhbHVlOmQubmFtZX0pfSxqLmZyb21Qcm9taXNlPWZ1bmN0aW9uKGQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoZnVuY3Rpb24oLi4uUyl7Y29uc3QgaD1TW1MubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoKXJldHVybiBkLmFwcGx5KHRoaXMsUyk7Uy5wb3AoKSxkLmFwcGx5KHRoaXMsUykudGhlbihvPT5oKG51bGwsbyksaCl9LCJuYW1lIix7dmFsdWU6ZC5uYW1lfSl9fSw0NTY0''@;'; put 'put ''Oih0ZSxqLGQpPT57InVzZSBzdHJpY3QiO3ZhciBTPWQoNzQxOCksaD1kKDcxMjkpLG89L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxJPS9bXG5cclx0XS9nLGY9L15bQS1aYS16XVtBLVphLXowLTkr''@;'; put 'put ''LS5dKjpcL1wvLyxUPS86XGQrJC8sQT0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxNPS9eW2EtekEtWl06LztmdW5jdGlvbiBPKEspe3JldHVybihLfHwiIikudG9TdHJpbmcoKS5yZXBsYWNlKG8sIiIpfXZhciBEPVtbIiMiLCJoYXNoIl0sWyI/''@;'; put 'put ''IiwicXVlcnkiXSxmdW5jdGlvbihYLG5lKXtyZXR1cm4gRihuZS5wcm90b2NvbCk/WC5yZXBsYWNlKC9cXC9nLCIvIik6WH0sWyIvIiwicGF0aG5hbWUiXSxbIkAiLCJhdXRoIiwxXSxbTmFOLCJob3N0Iix2b2lkIDAsMSwxXSxbLzooXGQqKSQvLCJwb3J0Iix2b2lkIDAsMV0sW05hTiwiaG9z''@;'; put 'put ''dG5hbWUiLHZvaWQgMCwxLDFdXSxFPXtoYXNoOjEscXVlcnk6MX07ZnVuY3Rpb24gQihLKXt2YXIgWDtYPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZC5nPCJ1Ij9kLmc6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307dmFyIF9lLHNlPXt9LGhlPXR5cGVvZihLPUt8fFgubG9jYXRp''@;'; put 'put ''b258fHt9KTtpZigiYmxvYjoiPT09Sy5wcm90b2NvbClzZT1uZXcgeih1bmVzY2FwZShLLnBhdGhuYW1lKSx7fSk7ZWxzZSBpZigic3RyaW5nIj09PWhlKWZvcihfZSBpbiBzZT1uZXcgeihLLHt9KSxFKWRlbGV0ZSBzZVtfZV07ZWxzZSBpZigib2JqZWN0Ij09PWhlKXtmb3IoX2UgaW4gSylf''@;'; put 'put ''ZSBpbiBFfHwoc2VbX2VdPUtbX2VdKTt2b2lkIDA9PT1zZS5zbGFzaGVzJiYoc2Uuc2xhc2hlcz1mLnRlc3QoSy5ocmVmKSl9cmV0dXJuIHNlfWZ1bmN0aW9uIEYoSyl7cmV0dXJuImZpbGU6Ij09PUt8fCJmdHA6Ij09PUt8fCJodHRwOiI9PT1LfHwiaHR0cHM6Ij09PUt8fCJ3czoiPT09S3x8''@;'; put 'put ''IndzczoiPT09S31mdW5jdGlvbiBOKEssWCl7Sz0oSz1PKEspKS5yZXBsYWNlKEksIiIpLFg9WHx8e307dmFyIEZlLG5lPUEuZXhlYyhLKSxzZT1uZVsxXT9uZVsxXS50b0xvd2VyQ2FzZSgpOiIiLGhlPSEhbmVbMl0sX2U9ISFuZVszXSxtZT0wO3JldHVybiBoZT9fZT8oRmU9bmVbMl0rbmVb''@;'; put 'put ''M10rbmVbNF0sbWU9bmVbMl0ubGVuZ3RoK25lWzNdLmxlbmd0aCk6KEZlPW5lWzJdK25lWzRdLG1lPW5lWzJdLmxlbmd0aCk6X2U/KEZlPW5lWzNdK25lWzRdLG1lPW5lWzNdLmxlbmd0aCk6RmU9bmVbNF0sImZpbGU6Ij09PXNlP21lPj0yJiYoRmU9RmUuc2xpY2UoMikpOkYoc2UpP0ZlPW5l''@;'; put 'put ''WzRdOnNlP2hlJiYoRmU9RmUuc2xpY2UoMikpOm1lPj0yJiZGKFgucHJvdG9jb2wpJiYoRmU9bmVbNF0pLHtwcm90b2NvbDpzZSxzbGFzaGVzOmhlfHxGKHNlKSxzbGFzaGVzQ291bnQ6bWUscmVzdDpGZX19ZnVuY3Rpb24geihLLFgsbmUpe2lmKEs9KEs9TyhLKSkucmVwbGFjZShJLCIiKSwh''@;'; put 'put ''KHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyxYLG5lKTt2YXIgc2UsaGUsX2UsbWUsRmUsUixzPUQuc2xpY2UoKSx1PXR5cGVvZiBYLHY9dGhpcyxwPTA7Zm9yKCJvYmplY3QiIT09dSYmInN0cmluZyIhPT11JiYobmU9WCxYPW51bGwpLG5lJiYiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''bmUmJihuZT1oLnBhcnNlKSxzZT0hKGhlPU4oS3x8IiIsWD1CKFgpKSkucHJvdG9jb2wmJiFoZS5zbGFzaGVzLHYuc2xhc2hlcz1oZS5zbGFzaGVzfHxzZSYmWC5zbGFzaGVzLHYucHJvdG9jb2w9aGUucHJvdG9jb2x8fFgucHJvdG9jb2x8fCIiLEs9aGUucmVzdCwoImZpbGU6Ij09PWhlLnBy''@;'; put 'put ''b3RvY29sJiYoMiE9PWhlLnNsYXNoZXNDb3VudHx8TS50ZXN0KEspKXx8IWhlLnNsYXNoZXMmJihoZS5wcm90b2NvbHx8aGUuc2xhc2hlc0NvdW50PDJ8fCFGKHYucHJvdG9jb2wpKSkmJihzWzNdPVsvKC4qKS8sInBhdGhuYW1lIl0pO3A8cy5sZW5ndGg7cCsrKSJmdW5jdGlvbiIhPXR5cGVv''@;'; put 'put ''ZihtZT1zW3BdKT8oUj1tZVsxXSwoX2U9bWVbMF0pIT1fZT92W1JdPUs6InN0cmluZyI9PXR5cGVvZiBfZT9+KEZlPSJAIj09PV9lP0subGFzdEluZGV4T2YoX2UpOksuaW5kZXhPZihfZSkpJiYoIm51bWJlciI9PXR5cGVvZiBtZVsyXT8odltSXT1LLnNsaWNlKDAsRmUpLEs9Sy5zbGljZShG''@;'; put 'put ''ZSttZVsyXSkpOih2W1JdPUsuc2xpY2UoRmUpLEs9Sy5zbGljZSgwLEZlKSkpOihGZT1fZS5leGVjKEspKSYmKHZbUl09RmVbMV0sSz1LLnNsaWNlKDAsRmUuaW5kZXgpKSx2W1JdPXZbUl18fHNlJiZtZVszXSYmWFtSXXx8IiIsbWVbNF0mJih2W1JdPXZbUl0udG9Mb3dlckNhc2UoKSkpOks9''@;'; put 'put ''bWUoSyx2KTtuZSYmKHYucXVlcnk9bmUodi5xdWVyeSkpLHNlJiZYLnNsYXNoZXMmJiIvIiE9PXYucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT12LnBhdGhuYW1lfHwiIiE9PVgucGF0aG5hbWUpJiYodi5wYXRobmFtZT1mdW5jdGlvbiBIKEssWCl7aWYoIiI9PT1LKXJldHVybiBYO2Zvcih2''@;'; put 'put ''YXIgbmU9KFh8fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQoSy5zcGxpdCgiLyIpKSxzZT1uZS5sZW5ndGgsaGU9bmVbc2UtMV0sX2U9ITEsbWU9MDtzZS0tOykiLiI9PT1uZVtzZV0/bmUuc3BsaWNlKHNlLDEpOiIuLiI9PT1uZVtzZV0/KG5lLnNwbGljZShzZSwxKSxtZSsr''@;'; put 'put ''KTptZSYmKDA9PT1zZSYmKF9lPSEwKSxuZS5zcGxpY2Uoc2UsMSksbWUtLSk7cmV0dXJuIF9lJiZuZS51bnNoaWZ0KCIiKSwoIi4iPT09aGV8fCIuLiI9PT1oZSkmJm5lLnB1c2goIiIpLG5lLmpvaW4oIi8iKX0odi5wYXRobmFtZSxYLnBhdGhuYW1lKSksIi8iIT09di5wYXRobmFtZS5jaGFy''@;'; put 'put ''QXQoMCkmJkYodi5wcm90b2NvbCkmJih2LnBhdGhuYW1lPSIvIit2LnBhdGhuYW1lKSxTKHYucG9ydCx2LnByb3RvY29sKXx8KHYuaG9zdD12Lmhvc3RuYW1lLHYucG9ydD0iIiksdi51c2VybmFtZT12LnBhc3N3b3JkPSIiLHYuYXV0aCYmKH4oRmU9di5hdXRoLmluZGV4T2YoIjoiKSk/KHYu''@;'; put 'put ''dXNlcm5hbWU9di5hdXRoLnNsaWNlKDAsRmUpLHYudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh2LnVzZXJuYW1lKSksdi5wYXNzd29yZD12LmF1dGguc2xpY2UoRmUrMSksdi5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9u''@;'; put 'put ''ZW50KHYucGFzc3dvcmQpKSk6di51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHYuYXV0aCkpLHYuYXV0aD12LnBhc3N3b3JkP3YudXNlcm5hbWUrIjoiK3YucGFzc3dvcmQ6di51c2VybmFtZSksdi5vcmlnaW49ImZpbGU6IiE9PXYucHJvdG9jb2wmJkYo''@;'; put 'put ''di5wcm90b2NvbCkmJnYuaG9zdD92LnByb3RvY29sKyIvLyIrdi5ob3N0OiJudWxsIix2LmhyZWY9di50b1N0cmluZygpfXoucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24gWihLLFgsbmUpe3ZhciBzZT10aGlzO3N3aXRjaChLKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIFgmJlgubGVu''@;'; put 'put ''Z3RoJiYoWD0obmV8fGgucGFyc2UpKFgpKSxzZVtLXT1YO2JyZWFrO2Nhc2UicG9ydCI6c2VbS109WCxTKFgsc2UucHJvdG9jb2wpP1gmJihzZS5ob3N0PXNlLmhvc3RuYW1lKyI6IitYKTooc2UuaG9zdD1zZS5ob3N0bmFtZSxzZVtLXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6c2VbS109''@;'; put 'put ''WCxzZS5wb3J0JiYoWCs9IjoiK3NlLnBvcnQpLHNlLmhvc3Q9WDticmVhaztjYXNlImhvc3QiOnNlW0tdPVgsVC50ZXN0KFgpPyhYPVguc3BsaXQoIjoiKSxzZS5wb3J0PVgucG9wKCksc2UuaG9zdG5hbWU9WC5qb2luKCI6IikpOihzZS5ob3N0bmFtZT1YLHNlLnBvcnQ9IiIpO2JyZWFrO2Nh''@;'; put 'put ''c2UicHJvdG9jb2wiOnNlLnByb3RvY29sPVgudG9Mb3dlckNhc2UoKSxzZS5zbGFzaGVzPSFuZTticmVhaztjYXNlInBhdGhuYW1lIjpjYXNlImhhc2giOmlmKFgpe3ZhciBoZT0icGF0aG5hbWUiPT09Sz8iLyI6IiMiO3NlW0tdPVguY2hhckF0KDApIT09aGU/aGUrWDpYfWVsc2Ugc2VbS109''@;'; put 'put ''WDticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjpzZVtLXT1lbmNvZGVVUklDb21wb25lbnQoWCk7YnJlYWs7Y2FzZSJhdXRoIjp2YXIgX2U9WC5pbmRleE9mKCI6Iik7fl9lPyhzZS51c2VybmFtZT1YLnNsaWNlKDAsX2UpLHNlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVu''@;'; put 'put ''dChkZWNvZGVVUklDb21wb25lbnQoc2UudXNlcm5hbWUpKSxzZS5wYXNzd29yZD1YLnNsaWNlKF9lKzEpLHNlLnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoc2UucGFzc3dvcmQpKSk6c2UudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVS''@;'; put 'put ''SUNvbXBvbmVudChYKSl9Zm9yKHZhciBtZT0wO21lPEQubGVuZ3RoO21lKyspe3ZhciBGZT1EW21lXTtGZVs0XSYmKHNlW0ZlWzFdXT1zZVtGZVsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIHNlLmF1dGg9c2UucGFzc3dvcmQ/c2UudXNlcm5hbWUrIjoiK3NlLnBhc3N3b3JkOnNlLnVzZXJu''@;'; put 'put ''YW1lLHNlLm9yaWdpbj0iZmlsZToiIT09c2UucHJvdG9jb2wmJkYoc2UucHJvdG9jb2wpJiZzZS5ob3N0P3NlLnByb3RvY29sKyIvLyIrc2UuaG9zdDoibnVsbCIsc2UuaHJlZj1zZS50b1N0cmluZygpLHNlfSx0b1N0cmluZzpmdW5jdGlvbiBVKEspeyghS3x8ImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IEspJiYoSz1oLnN0cmluZ2lmeSk7dmFyIFgsbmU9dGhpcyxzZT1uZS5ob3N0LGhlPW5lLnByb3RvY29sO2hlJiYiOiIhPT1oZS5jaGFyQXQoaGUubGVuZ3RoLTEpJiYoaGUrPSI6Iik7dmFyIF9lPWhlKyhuZS5wcm90b2NvbCYmbmUuc2xhc2hlc3x8RihuZS5wcm90b2NvbCk/Ii8vIjoiIik7''@;'; put 'put ''cmV0dXJuIG5lLnVzZXJuYW1lPyhfZSs9bmUudXNlcm5hbWUsbmUucGFzc3dvcmQmJihfZSs9IjoiK25lLnBhc3N3b3JkKSxfZSs9IkAiKTpuZS5wYXNzd29yZD8oX2UrPSI6IituZS5wYXNzd29yZCxfZSs9IkAiKToiZmlsZToiIT09bmUucHJvdG9jb2wmJkYobmUucHJvdG9jb2wpJiYhc2Um''@;'; put 'put ''JiIvIiE9PW5lLnBhdGhuYW1lJiYoX2UrPSJAIiksKCI6Ij09PXNlW3NlLmxlbmd0aC0xXXx8VC50ZXN0KG5lLmhvc3RuYW1lKSYmIW5lLnBvcnQpJiYoc2UrPSI6IiksX2UrPXNlK25lLnBhdGhuYW1lLChYPSJvYmplY3QiPT10eXBlb2YgbmUucXVlcnk/SyhuZS5xdWVyeSk6bmUucXVlcnkp''@;'; put 'put ''JiYoX2UrPSI/IiE9PVguY2hhckF0KDApPyI/IitYOlgpLG5lLmhhc2gmJihfZSs9bmUuaGFzaCksX2V9fSx6LmV4dHJhY3RQcm90b2NvbD1OLHoubG9jYXRpb249Qix6LnRyaW1MZWZ0PU8sei5xcz1oLHRlLmV4cG9ydHM9en0sNDkyNzoodGUsaixkKT0+e3ZhciBTPWQoNTEwOCk7ZnVuY3Rp''@;'; put 'put ''b24gbyhJKXt0cnl7aWYoIWQuZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIGY9ZC5nLmxvY2FsU3RvcmFnZVtJXTtyZXR1cm4gbnVsbCE9ZiYmInRydWUiPT09U3RyaW5nKGYpLnRvTG93ZXJDYXNlKCl9dGUuZXhwb3J0cz1mdW5jdGlvbiBoKEksZil7aWYobygi''@;'; put 'put ''bm9EZXByZWNhdGlvbiIpKXJldHVybiBJO3ZhciBUPSExO3JldHVybiBmdW5jdGlvbiBBKCl7aWYoIVQpe2lmKG8oInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3IoZik7bygidHJhY2VEZXByZWNhdGlvbiIpP1MudHJhY2UoZik6Uy53YXJuKGYpLFQ9ITB9cmV0dXJuIEkuYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpfX19LDM4NDp0ZT0+e3RlLmV4cG9ydHM9ZnVuY3Rpb24oZCl7cmV0dXJuIGQmJiJvYmplY3QiPT10eXBlb2YgZCYmImZ1bmN0aW9uIj09dHlwZW9mIGQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIGQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIGQucmVhZFVJ''@;'; put 'put ''bnQ4fX0sNTk1NToodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI1ODQpLGg9ZCg4NjYyKSxvPWQoNjQzMCksST1kKDU2OTIpO2Z1bmN0aW9uIGYod2Upe3JldHVybiB3ZS5jYWxsLmJpbmQod2UpfXZhciBUPXR5cGVvZiBCaWdJbnQ8InUiLEE9dHlwZW9mIFN5bWJvbDwidSIsTT1m''@;'; put 'put ''KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLE89ZihOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLEQ9ZihTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLEU9ZihCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtpZihUKXZhciBCPWYoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihBKXZh''@;'; put 'put ''ciBGPWYoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiBOKHdlLHB0KXtpZigib2JqZWN0IiE9dHlwZW9mIHdlKXJldHVybiExO3RyeXtyZXR1cm4gcHQod2UpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBzKHdlKXtyZXR1cm4iW29iamVjdCBNYXBdIj09PU0od2UpfWZ1''@;'; put 'put ''bmN0aW9uIHYod2Upe3JldHVybiJbb2JqZWN0IFNldF0iPT09TSh3ZSl9ZnVuY3Rpb24gXyh3ZSl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09TSh3ZSl9ZnVuY3Rpb24gTCh3ZSl7cmV0dXJuIltvYmplY3QgV2Vha1NldF0iPT09TSh3ZSl9ZnVuY3Rpb24gbCh3ZSl7cmV0dXJuIltvYmpl''@;'; put 'put ''Y3QgQXJyYXlCdWZmZXJdIj09PU0od2UpfWZ1bmN0aW9uIGIod2Upe3JldHVybiEodHlwZW9mIEFycmF5QnVmZmVyPiJ1IikmJihsLndvcmtpbmc/bCh3ZSk6d2UgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gcSh3ZSl7cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIj09PU0od2Up''@;'; put 'put ''fWZ1bmN0aW9uIEcod2Upe3JldHVybiEodHlwZW9mIERhdGFWaWV3PiJ1IikmJihxLndvcmtpbmc/cSh3ZSk6d2UgaW5zdGFuY2VvZiBEYXRhVmlldyl9ai5pc0FyZ3VtZW50c09iamVjdD1TLGouaXNHZW5lcmF0b3JGdW5jdGlvbj1oLGouaXNUeXBlZEFycmF5PUksai5pc1Byb21pc2U9ZnVu''@;'; put 'put ''Y3Rpb24gSCh3ZSl7cmV0dXJuIHR5cGVvZiBQcm9taXNlPCJ1IiYmd2UgaW5zdGFuY2VvZiBQcm9taXNlfHxudWxsIT09d2UmJiJvYmplY3QiPT10eXBlb2Ygd2UmJiJmdW5jdGlvbiI9PXR5cGVvZiB3ZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2UuY2F0Y2h9LGouaXNBcnJheUJ1ZmZl''@;'; put 'put ''clZpZXc9ZnVuY3Rpb24geih3ZSl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcod2UpOkkod2UpfHxHKHdlKX0sai5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24gWih3ZSl7cmV0dXJuIlVpbnQ4QXJyYXkiPT09byh3ZSl9''@;'; put 'put ''LGouaXNVaW50OENsYW1wZWRBcnJheT1mdW5jdGlvbiBVKHdlKXtyZXR1cm4iVWludDhDbGFtcGVkQXJyYXkiPT09byh3ZSl9LGouaXNVaW50MTZBcnJheT1mdW5jdGlvbiBLKHdlKXtyZXR1cm4iVWludDE2QXJyYXkiPT09byh3ZSl9LGouaXNVaW50MzJBcnJheT1mdW5jdGlvbiBYKHdlKXty''@;'; put 'put ''ZXR1cm4iVWludDMyQXJyYXkiPT09byh3ZSl9LGouaXNJbnQ4QXJyYXk9ZnVuY3Rpb24gbmUod2Upe3JldHVybiJJbnQ4QXJyYXkiPT09byh3ZSl9LGouaXNJbnQxNkFycmF5PWZ1bmN0aW9uIHNlKHdlKXtyZXR1cm4iSW50MTZBcnJheSI9PT1vKHdlKX0sai5pc0ludDMyQXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24gaGUod2Upe3JldHVybiJJbnQzMkFycmF5Ij09PW8od2UpfSxqLmlzRmxvYXQzMkFycmF5PWZ1bmN0aW9uIF9lKHdlKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PW8od2UpfSxqLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uIG1lKHdlKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PW8od2UpfSxq''@;'; put 'put ''LmlzQmlnSW50NjRBcnJheT1mdW5jdGlvbiBGZSh3ZSl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09byh3ZSl9LGouaXNCaWdVaW50NjRBcnJheT1mdW5jdGlvbiBSKHdlKXtyZXR1cm4iQmlnVWludDY0QXJyYXkiPT09byh3ZSl9LHMud29ya2luZz10eXBlb2YgTWFwPCJ1IiYmcyhuZXcgTWFw''@;'; put 'put ''KSxqLmlzTWFwPWZ1bmN0aW9uIHUod2Upe3JldHVybiEodHlwZW9mIE1hcD4idSIpJiYocy53b3JraW5nP3Mod2UpOndlIGluc3RhbmNlb2YgTWFwKX0sdi53b3JraW5nPXR5cGVvZiBTZXQ8InUiJiZ2KG5ldyBTZXQpLGouaXNTZXQ9ZnVuY3Rpb24gcCh3ZSl7cmV0dXJuISh0eXBlb2YgU2V0''@;'; put 'put ''PiJ1IikmJih2Lndvcmtpbmc/dih3ZSk6d2UgaW5zdGFuY2VvZiBTZXQpfSxfLndvcmtpbmc9dHlwZW9mIFdlYWtNYXA8InUiJiZfKG5ldyBXZWFrTWFwKSxqLmlzV2Vha01hcD1mdW5jdGlvbiBrKHdlKXtyZXR1cm4hKHR5cGVvZiBXZWFrTWFwPiJ1IikmJihfLndvcmtpbmc/Xyh3ZSk6d2Ug''@;'; put 'put ''aW5zdGFuY2VvZiBXZWFrTWFwKX0sTC53b3JraW5nPXR5cGVvZiBXZWFrU2V0PCJ1IiYmTChuZXcgV2Vha1NldCksai5pc1dlYWtTZXQ9ZnVuY3Rpb24geSh3ZSl7cmV0dXJuIEwod2UpfSxsLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbChuZXcgQXJyYXlCdWZmZXIpLGouaXNB''@;'; put 'put ''cnJheUJ1ZmZlcj1iLHEud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgRGF0YVZpZXc8InUiJiZxKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSksMCwxKSksai5pc0RhdGFWaWV3PUc7dmFyIFE9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRB''@;'; put 'put ''cnJheUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gcGUod2Upe3JldHVybiJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1NKHdlKX1mdW5jdGlvbiBQZSh3ZSl7cmV0dXJuISh0eXBlb2YgUT4idSIpJiYodHlwZW9mIHBlLndvcmtpbmc+InUiJiYocGUud29ya2luZz1wZShuZXcgUSkpLHBl''@;'; put 'put ''Lndvcmtpbmc/cGUod2UpOndlIGluc3RhbmNlb2YgUSl9ZnVuY3Rpb24gT2Uod2Upe3JldHVybiBOKHdlLE8pfWZ1bmN0aW9uIENlKHdlKXtyZXR1cm4gTih3ZSxEKX1mdW5jdGlvbiBrZSh3ZSl7cmV0dXJuIE4od2UsRSl9ZnVuY3Rpb24geGUod2Upe3JldHVybiBUJiZOKHdlLEIpfWZ1bmN0''@;'; put 'put ''aW9uIE1lKHdlKXtyZXR1cm4gQSYmTih3ZSxGKX1qLmlzU2hhcmVkQXJyYXlCdWZmZXI9UGUsai5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24gWmUod2Upe3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09PU0od2UpfSxqLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24gcWUod2Upe3JldHVy''@;'; put 'put ''biJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09TSh3ZSl9LGouaXNTZXRJdGVyYXRvcj1mdW5jdGlvbiB2ZSh3ZSl7cmV0dXJuIltvYmplY3QgU2V0IEl0ZXJhdG9yXSI9PT1NKHdlKX0sai5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbiB1ZSh3ZSl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9y''@;'; put 'put ''XSI9PT1NKHdlKX0sai5pc1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGU9ZnVuY3Rpb24gemUod2Upe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09TSh3ZSl9LGouaXNOdW1iZXJPYmplY3Q9T2Usai5pc1N0cmluZ09iamVjdD1DZSxqLmlzQm9vbGVhbk9iamVjdD1rZSxq''@;'; put 'put ''LmlzQmlnSW50T2JqZWN0PXhlLGouaXNTeW1ib2xPYmplY3Q9TWUsai5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uIEllKHdlKXtyZXR1cm4gT2Uod2UpfHxDZSh3ZSl8fGtlKHdlKXx8eGUod2UpfHxNZSh3ZSl9LGouaXNBbnlBcnJheUJ1ZmZlcj1mdW5jdGlvbiBiZSh3ZSl7cmV0dXJuIHR5''@;'; put 'put ''cGVvZiBVaW50OEFycmF5PCJ1IiYmKGIod2UpfHxQZSh3ZSkpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHdlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaix3ZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlv''@;'; put 'put ''bigpe3Rocm93IG5ldyBFcnJvcih3ZSsiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5Oih0ZSxqLGQpPT57dmFyIFM9ZCg0MTU1KSxoPWQoNTEwOCksbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24ocGUpe2Zvcih2YXIgUGU9T2Jq''@;'; put 'put ''ZWN0LmtleXMocGUpLFplPXt9LHFlPTA7cWU8UGUubGVuZ3RoO3FlKyspWmVbUGVbcWVdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBlLFBlW3FlXSk7cmV0dXJuIFplfSxJPS8lW3NkaiVdL2c7ai5mb3JtYXQ9ZnVuY3Rpb24oUSl7aWYoIWhlKFEpKXtmb3IodmFyIHBlPVtd''@;'; put 'put ''LFBlPTA7UGU8YXJndW1lbnRzLmxlbmd0aDtQZSsrKXBlLnB1c2goTShhcmd1bWVudHNbUGVdKSk7cmV0dXJuIHBlLmpvaW4oIiAiKX1QZT0xO2Zvcih2YXIgWmU9YXJndW1lbnRzLHFlPVplLmxlbmd0aCx2ZT1TdHJpbmcoUSkucmVwbGFjZShJLGZ1bmN0aW9uKHplKXtpZigiJSUiPT09emUp''@;'; put 'put ''cmV0dXJuIiUiO2lmKFBlPj1xZSlyZXR1cm4gemU7c3dpdGNoKHplKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKFplW1BlKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKFplW1BlKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFplW1BlKytdKX1jYXRjaHtyZXR1cm4i''@;'; put 'put ''W0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gemV9fSksdWU9WmVbUGVdO1BlPHFlO3VlPVplWysrUGVdKVgodWUpfHwhUih1ZSk/dmUrPSIgIit1ZTp2ZSs9IiAiK00odWUpO3JldHVybiB2ZX0sai5kZXByZWNhdGU9ZnVuY3Rpb24oUSxwZSl7aWYodHlwZW9mIFM8InUiJiYhMD09PVMubm9E''@;'; put 'put ''ZXByZWNhdGlvbilyZXR1cm4gUTtpZih0eXBlb2YgUz4idSIpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGouZGVwcmVjYXRlKFEscGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIFBlPSExO3JldHVybiBmdW5jdGlvbiBaZSgpe2lmKCFQZSl7aWYoUy50aHJvd0RlcHJlY2F0aW9uKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcihwZSk7Uy50cmFjZURlcHJlY2F0aW9uP2gudHJhY2UocGUpOmguZXJyb3IocGUpLFBlPSEwfXJldHVybiBRLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBmPXt9LFQ9L14kLztpZihTLmVudi5OT0RFX0RFQlVHKXt2YXIgQT1TLmVudi5OT0RFX0RFQlVHO0E9QS5y''@;'; put 'put ''ZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksVD1uZXcgUmVnRXhwKCJeIitBKyIkIiwiaSIpfWZ1bmN0aW9uIE0oUSxwZSl7dmFyIFBlPXtzZWVuOltdLHN0eWxpemU6RH07cmV0''@;'; put 'put ''dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihQZS5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihQZS5jb2xvcnM9YXJndW1lbnRzWzNdKSxLKHBlKT9QZS5zaG93SGlkZGVuPXBlOnBlJiZqLl9leHRlbmQoUGUscGUpLG1lKFBlLnNob3dIaWRkZW4pJiYoUGUuc2hv''@;'; put 'put ''d0hpZGRlbj0hMSksbWUoUGUuZGVwdGgpJiYoUGUuZGVwdGg9MiksbWUoUGUuY29sb3JzKSYmKFBlLmNvbG9ycz0hMSksbWUoUGUuY3VzdG9tSW5zcGVjdCkmJihQZS5jdXN0b21JbnNwZWN0PSEwKSxQZS5jb2xvcnMmJihQZS5zdHlsaXplPU8pLEIoUGUsUSxQZS5kZXB0aCl9ZnVuY3Rpb24g''@;'; put 'put ''TyhRLHBlKXt2YXIgUGU9TS5zdHlsZXNbcGVdO3JldHVybiBQZT8iXHgxYlsiK00uY29sb3JzW1BlXVswXSsibSIrUSsiXHgxYlsiK00uY29sb3JzW1BlXVsxXSsibSI6UX1mdW5jdGlvbiBEKFEscGUpe3JldHVybiBRfWZ1bmN0aW9uIEIoUSxwZSxQZSl7aWYoUS5jdXN0b21JbnNwZWN0JiZw''@;'; put 'put ''ZSYmdihwZS5pbnNwZWN0KSYmcGUuaW5zcGVjdCE9PWouaW5zcGVjdCYmKCFwZS5jb25zdHJ1Y3Rvcnx8cGUuY29uc3RydWN0b3IucHJvdG90eXBlIT09cGUpKXt2YXIgWmU9cGUuaW5zcGVjdChQZSxRKTtyZXR1cm4gaGUoWmUpfHwoWmU9QihRLFplLFBlKSksWmV9dmFyIHFlPWZ1bmN0aW9u''@;'; put 'put ''IEYoUSxwZSl7aWYobWUocGUpKXJldHVybiBRLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGhlKHBlKSl7dmFyIFBlPSInIitKU09OLnN0cmluZ2lmeShwZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyIn''@;'; put 'put ''IjtyZXR1cm4gUS5zdHlsaXplKFBlLCJzdHJpbmciKX1yZXR1cm4gc2UocGUpP1Euc3R5bGl6ZSgiIitwZSwibnVtYmVyIik6SyhwZSk/US5zdHlsaXplKCIiK3BlLCJib29sZWFuIik6WChwZSk/US5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oUSxwZSk7aWYocWUpcmV0dXJuIHFl''@;'; put 'put ''O3ZhciB2ZT1PYmplY3Qua2V5cyhwZSksdWU9ZnVuY3Rpb24gRShRKXt2YXIgcGU9e307cmV0dXJuIFEuZm9yRWFjaChmdW5jdGlvbihQZSxaZSl7cGVbUGVdPSEwfSkscGV9KHZlKTtpZihRLnNob3dIaWRkZW4mJih2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwZSkpLHUocGUpJiYo''@;'; put 'put ''dmUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHx2ZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gTihwZSk7aWYoMD09PXZlLmxlbmd0aCl7aWYodihwZSkpcmV0dXJuIFEuc3R5bGl6ZSgiW0Z1bmN0aW9uIisocGUubmFtZT8iOiAiK3BlLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIp''@;'; put 'put ''O2lmKEZlKHBlKSlyZXR1cm4gUS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwZSksInJlZ2V4cCIpO2lmKHMocGUpKXJldHVybiBRLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwZSksImRhdGUiKTtpZih1KHBlKSlyZXR1cm4gTihwZSl9dmFy''@;'; put 'put ''IE1lLE9lPSIiLENlPSExLGtlPVsieyIsIn0iXTtyZXR1cm4gVShwZSkmJihDZT0hMCxrZT1bIlsiLCJdIl0pLHYocGUpJiYoT2U9IiBbRnVuY3Rpb24iKyhwZS5uYW1lPyI6ICIrcGUubmFtZToiIikrIl0iKSxGZShwZSkmJihPZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxs''@;'; put 'put ''KHBlKSkscyhwZSkmJihPZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChwZSkpLHUocGUpJiYoT2U9IiAiK04ocGUpKSwwIT09dmUubGVuZ3RofHxDZSYmMCE9cGUubGVuZ3RoP1BlPDA/RmUocGUpP1Euc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo''@;'; put 'put ''cGUpLCJyZWdleHAiKTpRLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihRLnNlZW4ucHVzaChwZSksTWU9Q2U/ZnVuY3Rpb24gSChRLHBlLFBlLFplLHFlKXtmb3IodmFyIHZlPVtdLHVlPTAsemU9cGUubGVuZ3RoO3VlPHplOysrdWUpbChwZSxTdHJpbmcodWUpKT92ZS5wdXNoKHoo''@;'; put 'put ''USxwZSxQZSxaZSxTdHJpbmcodWUpLCEwKSk6dmUucHVzaCgiIik7cmV0dXJuIHFlLmZvckVhY2goZnVuY3Rpb24oT2Upe09lLm1hdGNoKC9eXGQrJC8pfHx2ZS5wdXNoKHooUSxwZSxQZSxaZSxPZSwhMCkpfSksdmV9KFEscGUsUGUsdWUsdmUpOnZlLm1hcChmdW5jdGlvbihJZSl7cmV0dXJu''@;'; put 'put ''IHooUSxwZSxQZSx1ZSxJZSxDZSl9KSxRLnNlZW4ucG9wKCksZnVuY3Rpb24gWihRLHBlLFBlKXt2YXIgcWU9US5yZWR1Y2UoZnVuY3Rpb24odmUsdWUpe3JldHVybiB1ZS5pbmRleE9mKCJcbiIpLHZlK3VlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1''@;'; put 'put ''cm4gcWU+NjA/UGVbMF0rKCIiPT09cGU/IiI6cGUrIlxuICIpKyIgIitRLmpvaW4oIixcbiAgIikrIiAiK1BlWzFdOlBlWzBdK3BlKyIgIitRLmpvaW4oIiwgIikrIiAiK1BlWzFdfShNZSxPZSxrZSkpOmtlWzBdK09lK2tlWzFdfWZ1bmN0aW9uIE4oUSl7cmV0dXJuIlsiK0Vycm9yLnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZy5jYWxsKFEpKyJdIn1mdW5jdGlvbiB6KFEscGUsUGUsWmUscWUsdmUpe3ZhciB1ZSx6ZSxPZTtpZigoT2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwZSxxZSl8fHt2YWx1ZTpwZVtxZV19KS5nZXQ/emU9US5zdHlsaXplKE9lLnNldD8iW0dldHRlci9T''@;'; put 'put ''ZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6T2Uuc2V0JiYoemU9US5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksbChaZSxxZSl8fCh1ZT0iWyIrcWUrIl0iKSx6ZXx8KFEuc2Vlbi5pbmRleE9mKE9lLnZhbHVlKTwwPyh6ZT1YKFBlKT9CKFEsT2UudmFsdWUsbnVsbCk6QihR''@;'; put 'put ''LE9lLnZhbHVlLFBlLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoemU9dmU/emUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKENlKXtyZXR1cm4iICAiK0NlfSkuam9pbigiXG4iKS5zbGljZSgyKToiXG4iK3plLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihDZSl7cmV0dXJuIiAgICIrQ2V9KS5q''@;'; put 'put ''b2luKCJcbiIpKTp6ZT1RLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLG1lKHVlKSl7aWYodmUmJnFlLm1hdGNoKC9eXGQrJC8pKXJldHVybiB6ZTsodWU9SlNPTi5zdHJpbmdpZnkoIiIrcWUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh1ZT11ZS5z''@;'; put 'put ''bGljZSgxLC0xKSx1ZT1RLnN0eWxpemUodWUsIm5hbWUiKSk6KHVlPXVlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSx1ZT1RLnN0eWxpemUodWUsInN0cmluZyIpKX1yZXR1cm4gdWUrIjogIit6ZX1mdW5jdGlvbiBVKFEp''@;'; put 'put ''e3JldHVybiBBcnJheS5pc0FycmF5KFEpfWZ1bmN0aW9uIEsoUSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgUX1mdW5jdGlvbiBYKFEpe3JldHVybiBudWxsPT09UX1mdW5jdGlvbiBzZShRKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFF9ZnVuY3Rpb24gaGUoUSl7cmV0dXJuInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBRfWZ1bmN0aW9uIG1lKFEpe3JldHVybiB2b2lkIDA9PT1RfWZ1bmN0aW9uIEZlKFEpe3JldHVybiBSKFEpJiYiW29iamVjdCBSZWdFeHBdIj09PV8oUSl9ZnVuY3Rpb24gUihRKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIFEmJm51bGwhPT1RfWZ1bmN0aW9uIHMoUSl7cmV0dXJu''@;'; put 'put ''IFIoUSkmJiJbb2JqZWN0IERhdGVdIj09PV8oUSl9ZnVuY3Rpb24gdShRKXtyZXR1cm4gUihRKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1fKFEpfHxRIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIHYoUSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFF9ZnVuY3Rpb24gXyhRKXtyZXR1cm4g''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFEpfWZ1bmN0aW9uIGsoUSl7cmV0dXJuIFE8MTA/IjAiK1EudG9TdHJpbmcoMTApOlEudG9TdHJpbmcoMTApfWouZGVidWdsb2c9ZnVuY3Rpb24oUSl7aWYoUT1RLnRvVXBwZXJDYXNlKCksIWZbUV0paWYoVC50ZXN0KFEpKXt2YXIgcGU9''@;'; put 'put ''Uy5waWQ7ZltRXT1mdW5jdGlvbigpe3ZhciBQZT1qLmZvcm1hdC5hcHBseShqLGFyZ3VtZW50cyk7aC5lcnJvcigiJXMgJWQ6ICVzIixRLHBlLFBlKX19ZWxzZSBmW1FdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZltRXX0sai5pbnNwZWN0PU0sTS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpb''@;'; put 'put ''MywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LE0u''@;'; put 'put ''c3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sai50eXBlcz1kKDU5NTUpLGouaXNBcnJheT1VLGouaXNCb29s''@;'; put 'put ''ZWFuPUssai5pc051bGw9WCxqLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIG5lKFEpe3JldHVybiBudWxsPT1RfSxqLmlzTnVtYmVyPXNlLGouaXNTdHJpbmc9aGUsai5pc1N5bWJvbD1mdW5jdGlvbiBfZShRKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFF9LGouaXNVbmRlZmluZWQ9bWUs''@;'; put 'put ''ai5pc1JlZ0V4cD1GZSxqLnR5cGVzLmlzUmVnRXhwPUZlLGouaXNPYmplY3Q9UixqLmlzRGF0ZT1zLGoudHlwZXMuaXNEYXRlPXMsai5pc0Vycm9yPXUsai50eXBlcy5pc05hdGl2ZUVycm9yPXUsai5pc0Z1bmN0aW9uPXYsai5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBwKFEpe3JldHVybiBudWxs''@;'; put 'put ''PT09UXx8ImJvb2xlYW4iPT10eXBlb2YgUXx8Im51bWJlciI9PXR5cGVvZiBRfHwic3RyaW5nIj09dHlwZW9mIFF8fCJzeW1ib2wiPT10eXBlb2YgUXx8dHlwZW9mIFE+InUifSxqLmlzQnVmZmVyPWQoMzg0KTt2YXIgTD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1''@;'; put 'put ''bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIGwoUSxwZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChRLHBlKX1qLmxvZz1mdW5jdGlvbigpe2gubG9nKCIlcyAtICVzIixmdW5jdGlvbiB5KCl7dmFyIFE9bmV3IERhdGUscGU9''@;'; put 'put ''W2soUS5nZXRIb3VycygpKSxrKFEuZ2V0TWludXRlcygpKSxrKFEuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltRLmdldERhdGUoKSxMW1EuZ2V0TW9udGgoKV0scGVdLmpvaW4oIiAiKX0oKSxqLmZvcm1hdC5hcHBseShqLGFyZ3VtZW50cykpfSxqLmluaGVyaXRzPWQoNTcxNyks''@;'; put 'put ''ai5fZXh0ZW5kPWZ1bmN0aW9uKFEscGUpe2lmKCFwZXx8IVIocGUpKXJldHVybiBRO2Zvcih2YXIgUGU9T2JqZWN0LmtleXMocGUpLFplPVBlLmxlbmd0aDtaZS0tOylRW1BlW1plXV09cGVbUGVbWmVdXTtyZXR1cm4gUX07dmFyIGI9dHlwZW9mIFN5bWJvbDwidSI/U3ltYm9sKCJ1dGlsLnBy''@;'; put 'put ''b21pc2lmeS5jdXN0b20iKTp2b2lkIDA7ZnVuY3Rpb24gcShRLHBlKXtpZighUSl7dmFyIFBlPW5ldyBFcnJvcigiUHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCBhIGZhbHN5IHZhbHVlIik7UGUucmVhc29uPVEsUT1QZX1yZXR1cm4gcGUoUSl9ai5wcm9taXNpZnk9ZnVuY3Rpb24ocGUpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiIhPXR5cGVvZiBwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtpZihiJiZwZVtiXSl7dmFyIFBlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZihQZT1wZVtiXSkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignVGhlICJ1dGlsLnByb21pc2lmeS5jdXN0b20iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGUsYix7dmFsdWU6UGUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxQZX1mdW5jdGlv''@;'; put 'put ''biBQZSgpe2Zvcih2YXIgWmUscWUsdmU9bmV3IFByb21pc2UoZnVuY3Rpb24oT2UsQ2Upe1plPU9lLHFlPUNlfSksdWU9W10semU9MDt6ZTxhcmd1bWVudHMubGVuZ3RoO3plKyspdWUucHVzaChhcmd1bWVudHNbemVdKTt1ZS5wdXNoKGZ1bmN0aW9uKE9lLENlKXtPZT9xZShPZSk6WmUoQ2Up''@;'; put 'put ''fSk7dHJ5e3BlLmFwcGx5KHRoaXMsdWUpfWNhdGNoKE9lKXtxZShPZSl9cmV0dXJuIHZlfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoUGUsT2JqZWN0LmdldFByb3RvdHlwZU9mKHBlKSksYiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFBlLGIse3ZhbHVlOlBlLGVudW1lcmFibGU6ITEs''@;'; put 'put ''d3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUGUsbyhwZSkpfSxqLnByb21pc2lmeS5jdXN0b209YixqLmNhbGxiYWNraWZ5PWZ1bmN0aW9uIEcoUSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFEpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJv''@;'; put 'put ''cmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7ZnVuY3Rpb24gcGUoKXtmb3IodmFyIFBlPVtdLFplPTA7WmU8YXJndW1lbnRzLmxlbmd0aDtaZSsrKVBlLnB1c2goYXJndW1lbnRzW1plXSk7dmFyIHFlPVBlLnBvcCgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBx''@;'; put 'put ''ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24iKTt2YXIgdmU9dGhpcyx1ZT1mdW5jdGlvbigpe3JldHVybiBxZS5hcHBseSh2ZSxhcmd1bWVudHMpfTtRLmFwcGx5KHRoaXMsUGUpLnRoZW4oZnVuY3Rpb24oemUpe1MubmV4''@;'; put 'put ''dFRpY2sodWUuYmluZChudWxsLG51bGwsemUpKX0sZnVuY3Rpb24oemUpe1MubmV4dFRpY2socS5iaW5kKG51bGwsemUsdWUpKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocGUsT2JqZWN0LmdldFByb3RvdHlwZU9mKFEpKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwZSxvKFEp''@;'; put 'put ''KSxwZX19LDQ4MToodGUsaixkKT0+eyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5leHBvcnRzLmlzX3VyaT1vLFMuZXhwb3J0cy5pc19odHRwX3VyaT1JLFMuZXhwb3J0cy5pc19odHRwc191cmk9ZixTLmV4cG9ydHMuaXNfd2ViX3VyaT1ULFMuZXhwb3J0cy5pc1VyaT1vLFMuZXhwb3J0''@;'; put 'put ''cy5pc0h0dHBVcmk9SSxTLmV4cG9ydHMuaXNIdHRwc1VyaT1mLFMuZXhwb3J0cy5pc1dlYlVyaT1UO3ZhciBoPWZ1bmN0aW9uKEEpe3JldHVybiBBLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtm''@;'; put 'put ''dW5jdGlvbiBvKEEpe2lmKEEmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoQSkmJiEvJVteMC05YS1mXS9pLnRlc3QoQSkmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChBKSl7dmFyIE0sRCxFLEIsRixP''@;'; put 'put ''PSIiLE49IiI7aWYoRD0oTT1oKEEpKVsyXSxFPU1bM10sQj1NWzRdLEY9TVs1XSwoTz1NWzFdKSYmTy5sZW5ndGgmJkUubGVuZ3RoPj0wKXtpZihEJiZELmxlbmd0aCl7aWYoMCE9PUUubGVuZ3RoJiYhL15cLy8udGVzdChFKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoRSkpcmV0dXJu''@;'; put 'put ''O2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KE8udG9Mb3dlckNhc2UoKSkpcmV0dXJuIE4rPU8rIjoiLEQmJkQubGVuZ3RoJiYoTis9Ii8vIitEKSxOKz1FLEImJkIubGVuZ3RoJiYoTis9Ij8iK0IpLEYmJkYubGVuZ3RoJiYoTis9IiMiK0YpLE59fX1mdW5jdGlvbiBJKEEsTSl7''@;'; put 'put ''aWYobyhBKSl7dmFyIE8sQixOLEgsRD0iIixFPSIiLEY9IiIsej0iIjtpZihFPShPPWgoQSkpWzJdLEI9T1szXSxOPU9bNF0sSD1PWzVdLEQ9T1sxXSl7aWYoTSl7aWYoImh0dHBzIiE9RC50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9RC50b0xvd2VyQ2FzZSgpKXJldHVy''@;'; put 'put ''bjtpZihFKXJldHVybi86KFxkKykkLy50ZXN0KEUpJiYoRj1FLm1hdGNoKC86KFxkKykkLylbMF0sRT1FLnJlcGxhY2UoLzpcZCskLywiIikpLHorPUQrIjoiLHorPSIvLyIrRSxGJiYoeis9Rikseis9QixOJiZOLmxlbmd0aCYmKHorPSI/IitOKSxIJiZILmxlbmd0aCYmKHorPSIjIitIKSx6''@;'; put 'put ''fX19ZnVuY3Rpb24gZihBKXtyZXR1cm4gSShBLCEwKX1mdW5jdGlvbiBUKEEpe3JldHVybiBJKEEpfHxmKEEpfX0odGU9ZC5ubWQodGUpKX0sNTE0MDooX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9Pnt2YXIgaW5kZXhPZj1mdW5jdGlvbih0ZSxqKXtpZih0ZS5pbmRleE9mKXJl''@;'; put 'put ''dHVybiB0ZS5pbmRleE9mKGopO2Zvcih2YXIgZD0wO2Q8dGUubGVuZ3RoO2QrKylpZih0ZVtkXT09PWopcmV0dXJuIGQ7cmV0dXJuLTF9LE9iamVjdF9rZXlzPWZ1bmN0aW9uKHRlKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXModGUpO3ZhciBqPVtdO2Zvcih2YXIgZCBpbiB0''@;'; put 'put ''ZSlqLnB1c2goZCk7cmV0dXJuIGp9LGZvckVhY2g9ZnVuY3Rpb24odGUsail7aWYodGUuZm9yRWFjaClyZXR1cm4gdGUuZm9yRWFjaChqKTtmb3IodmFyIGQ9MDtkPHRlLmxlbmd0aDtkKyspaih0ZVtkXSxkLHRlKX0sZGVmaW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KHt9LCJfIix7fSksZnVuY3Rpb24odGUsaixkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsaix7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6ZH0pfX1jYXRjaHtyZXR1cm4gZnVuY3Rpb24oaixkLFMpe2pbZF09U319fSgpLGds''@;'; put 'put ''b2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50''@;'; put 'put ''YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmlu''@;'; put 'put ''ZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihqKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KGopO3RoaXMuY29kZT1qfTtTY3JpcHQu''@;'; put 'put ''cHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbih0ZSl7aWYoISh0ZSBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LiIpO3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2ouc3R5bGV8fChq''@;'; put 'put ''LnN0eWxlPXt9KSxqLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaik7dmFyIGQ9ai5jb250ZW50V2luZG93LFM9ZC5ldmFsLGg9ZC5leGVjU2NyaXB0OyFTJiZoJiYoaC5jYWxsKGQsIm51bGwiKSxTPWQuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyh0''@;'; put 'put ''ZSksZnVuY3Rpb24oZil7ZFtmXT10ZVtmXX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbihmKXt0ZVtmXSYmKGRbZl09dGVbZl0pfSk7dmFyIG89T2JqZWN0X2tleXMoZCksST1TLmNhbGwoZCx0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKGQpLGZ1bmN0aW9uKGYpeyhm''@;'; put 'put ''IGluIHRlfHwtMT09PWluZGV4T2YobyxmKSkmJih0ZVtmXT1kW2ZdKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbihmKXtmIGluIHRlfHxkZWZpbmVQcm9wKHRlLGYsZFtmXSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGopLEl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29u''@;'; put 'put ''dGV4dD1mdW5jdGlvbigpe3JldHVybiBldmFsKHRoaXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKHRlKXt2YXIgaj1TY3JpcHQuY3JlYXRlQ29udGV4dCh0ZSksZD10aGlzLnJ1bkluQ29udGV4dChqKTtyZXR1cm4gdGUmJmZvckVhY2goT2JqZWN0''@;'; put 'put ''X2tleXMoaiksZnVuY3Rpb24oUyl7dGVbU109altTXX0pLGR9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24odGUpe2V4cG9ydHNbdGVdPVNjcmlwdFt0ZV09ZnVuY3Rpb24oail7dmFyIGQ9U2NyaXB0KGopO3JldHVybiBkW3RlXS5hcHBseShkLFtdLnNs''@;'; put 'put ''aWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbih0ZSl7cmV0dXJuIHRlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24odGUpe3JldHVybiBleHBvcnRzLlNjcmlwdCh0ZSl9LGV4cG9ydHMuY3JlYXRlQ29u''@;'; put 'put ''dGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbih0ZSl7dmFyIGo9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0ZSYmZm9yRWFjaChPYmplY3Rfa2V5cyh0ZSksZnVuY3Rpb24oZCl7altkXT10ZVtkXX0pLGp9fSw2NDMwOih0ZSxqLGQpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBTPWQoNDAyOSksaD1kKDMwODMpLG89ZCg1NTU5KSxJPWQoNzM3OSksZj1kKDcyOTYpLFQ9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEE9ZCg2NDEwKSgpLE09dHlwZW9mIGdsb2JhbFRoaXM+InUiP2QuZzpnbG9iYWxUaGlzLE89aCgpLEQ9SSgiU3RyaW5nLnByb3RvdHlw''@;'; put 'put ''ZS5zbGljZSIpLEU9T2JqZWN0LmdldFByb3RvdHlwZU9mLEI9SSgiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oWixVKXtmb3IodmFyIEs9MDtLPFoubGVuZ3RoO0srPTEpaWYoWltLXT09PVUpcmV0dXJuIEs7cmV0dXJuLTF9LEY9e19fcHJvdG9fXzpudWxsfTtTKE8s''@;'; put 'put ''QSYmZiYmRT9mdW5jdGlvbih6KXt2YXIgWj1uZXcgTVt6XTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gWil7dmFyIFU9RShaKSxLPWYoVSxTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFLKXt2YXIgWD1FKFUpO0s9ZihYLFN5bWJvbC50b1N0cmluZ1RhZyl9RlsiJCIrel09byhLLmdldCl9fTpm''@;'; put 'put ''dW5jdGlvbih6KXt2YXIgWj1uZXcgTVt6XSxVPVouc2xpY2V8fFouc2V0O1UmJihGWyIkIit6XT1vKFUpKX0pLHRlLmV4cG9ydHM9ZnVuY3Rpb24oWil7aWYoIVp8fCJvYmplY3QiIT10eXBlb2YgWilyZXR1cm4hMTtpZighQSl7dmFyIFU9RChUKFopLDgsLTEpO3JldHVybiBCKE8sVSk+LTE/''@;'; put 'put ''VToiT2JqZWN0Ij09PVUmJmZ1bmN0aW9uKFope3ZhciBVPSExO3JldHVybiBTKEYsZnVuY3Rpb24oSyxYKXtpZighVSl0cnl7SyhaKSxVPUQoWCwxKX1jYXRjaHt9fSksVX0oWil9cmV0dXJuIGY/ZnVuY3Rpb24oWil7dmFyIFU9ITE7cmV0dXJuIFMoRixmdW5jdGlvbihLLFgpe2lmKCFVKXRy''@;'; put 'put ''eXsiJCIrSyhaKT09PVgmJihVPUQoWCwxKSl9Y2F0Y2h7fX0pLFV9KFopOm51bGx9fSw4NjQ2OigpPT57fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDkyMTQ6KCk9Pnt9LDY0MTk6KCk9Pnt9LDYzNTM6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9LDU0NDM6KCk9''@;'; put 'put ''Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KHRlLGosZCk9PnsidXNlIHN0cmljdCI7dmFyIFM9ZCg5OTA4KSxoPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9kLmc6Z2xvYmFsVGhpczt0ZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBJPVtdLGY9MDtmPFMubGVuZ3RoO2YrKykiZnVuY3Rpb24iPT10eXBlb2YgaFtTW2ZdXSYmKElbSS5sZW5ndGhdPVNbZl0pO3JldHVybiBJfX0sNzIxODoodGUsaixkKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQxNTUpLGg9ZCg4NzY0KS5CdWZmZXIs''@;'; put 'put ''bz1kKDUxMDgpO2Z1bmN0aW9uIEkoQ3QsdXQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBDdC5hcHBseSh1dCxhcmd1bWVudHMpfX1jb25zdHt0b1N0cmluZzpmfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpUfT1PYmplY3Qse2l0ZXJhdG9yOkEsdG9TdHJpbmdUYWc6TX09''@;'; put 'put ''U3ltYm9sLE89KEN0PT51dD0+e2NvbnN0IEp0PWYuY2FsbCh1dCk7cmV0dXJuIEN0W0p0XXx8KEN0W0p0XT1KdC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEQ9Q3Q9PihDdD1DdC50b0xvd2VyQ2FzZSgpLHV0PT5PKHV0KT09PUN0KSxFPUN0PT51''@;'; put 'put ''dD0+dHlwZW9mIHV0PT09Q3Qse2lzQXJyYXk6Qn09QXJyYXksRj1FKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBOKEN0KXtyZXR1cm4gbnVsbCE9PUN0JiYhRihDdCkmJm51bGwhPT1DdC5jb25zdHJ1Y3RvciYmIUYoQ3QuY29uc3RydWN0b3IpJiZVKEN0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYm''@;'; put 'put ''Q3QuY29uc3RydWN0b3IuaXNCdWZmZXIoQ3QpfWNvbnN0IEg9RCgiQXJyYXlCdWZmZXIiKSxaPUUoInN0cmluZyIpLFU9RSgiZnVuY3Rpb24iKSxLPUUoIm51bWJlciIpLFg9Q3Q9Pm51bGwhPT1DdCYmIm9iamVjdCI9PXR5cGVvZiBDdCxzZT1DdD0+e2lmKCJvYmplY3QiIT09TyhDdCkpcmV0''@;'; put 'put ''dXJuITE7Y29uc3QgdXQ9VChDdCk7cmV0dXJuIShudWxsIT09dXQmJnV0IT09T2JqZWN0LnByb3RvdHlwZSYmbnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih1dCl8fE0gaW4gQ3R8fEEgaW4gQ3QpfSxfZT1EKCJEYXRlIiksbWU9RCgiRmlsZSIpLHM9RCgiQmxvYiIpLHU9RCgiRmlsZUxp''@;'; put 'put ''c3QiKSxfPWZ1bmN0aW9uIHAoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBkLmc8InUiP2QuZzp7fX0oKSxrPXR5cGVvZiBfLkZvcm1EYXRhPCJ1Ij9fLkZvcm1EYXRh''@;'; put 'put ''OnZvaWQgMCx5PUQoIlVSTFNlYXJjaFBhcmFtcyIpLFtsLGIscSxHXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChEKTtmdW5jdGlvbiBwZShDdCx1dCx7YWxsT3duS2V5czpKdD0hMX09e30pe2lmKG51bGw9PT1DdHx8dHlwZW9mIEN0PiJ1''@;'; put 'put ''IilyZXR1cm47bGV0IGNuLEFuO2lmKCJvYmplY3QiIT10eXBlb2YgQ3QmJihDdD1bQ3RdKSxCKEN0KSlmb3IoY249MCxBbj1DdC5sZW5ndGg7Y248QW47Y24rKyl1dC5jYWxsKG51bGwsQ3RbY25dLGNuLEN0KTtlbHNle2lmKE4oQ3QpKXJldHVybjtjb25zdCBLbj1KdD9PYmplY3QuZ2V0T3du''@;'; put 'put ''UHJvcGVydHlOYW1lcyhDdCk6T2JqZWN0LmtleXMoQ3QpLHNyPUtuLmxlbmd0aDtsZXQgdW47Zm9yKGNuPTA7Y248c3I7Y24rKyl1bj1Lbltjbl0sdXQuY2FsbChudWxsLEN0W3VuXSx1bixDdCl9fWZ1bmN0aW9uIFBlKEN0LHV0KXtpZihOKEN0KSlyZXR1cm4gbnVsbDt1dD11dC50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpO2NvbnN0IEp0PU9iamVjdC5rZXlzKEN0KTtsZXQgQW4sY249SnQubGVuZ3RoO2Zvcig7Y24tLSA+MDspaWYoQW49SnRbY25dLHV0PT09QW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gQW47cmV0dXJuIG51bGx9Y29uc3QgWmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6''@;'; put 'put ''dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OmQuZyxxZT1DdD0+IUYoQ3QpJiZDdCE9PVplLE1lPShDdD0+dXQ9PkN0JiZ1dCBpbnN0YW5jZW9mIEN0KSh0eXBlb2YgVWludDhBcnJheTwidSImJlQoVWludDhBcnJheSkpLHdlPUQoIkhUTUxGb3JtRWxlbWVu''@;'; put 'put ''dCIpLEtlPSgoe2hhc093blByb3BlcnR5OkN0fSk9Pih1dCxKdCk9PkN0LmNhbGwodXQsSnQpKShPYmplY3QucHJvdG90eXBlKSxZZT1EKCJSZWdFeHAiKSxxdD0oQ3QsdXQpPT57Y29uc3QgSnQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQ3QpLGNuPXt9O3BlKEp0LChBbixL''@;'; put 'put ''bik9PntsZXQgc3I7ITEhPT0oc3I9dXQoQW4sS24sQ3QpKSYmKGNuW0tuXT1zcnx8QW4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ3QsY24pfSxMZT1EKCJBc3luY0Z1bmN0aW9uIikscm49KEN0PSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUsdXQ9VShaZS5wb3N0TWVzc2Fn''@;'; put 'put ''ZSksQ3Q/c2V0SW1tZWRpYXRlOnV0PyhKdD1gYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsY249W10sWmUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6QW4sZGF0YTpLbn0pPT57QW49PT1aZSYmS249PT1KdCYmY24ubGVuZ3RoJiZjbi5zaGlmdCgpKCl9LCExKSxBbj0+e2Nu''@;'; put 'put ''LnB1c2goQW4pLFplLnBvc3RNZXNzYWdlKEp0LCIqIil9KTpKdD0+c2V0VGltZW91dChKdCkpLHh0PXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZChaZSk6dHlwZW9mIFM8InUiJiZTLm5leHRUaWNrfHxybjt2YXIgQ3QsdXQsSnQsY24seW49e2lzQXJyYXk6''@;'; put 'put ''Qixpc0FycmF5QnVmZmVyOkgsaXNCdWZmZXI6Tixpc0Zvcm1EYXRhOkN0PT57aWYoIUN0KXJldHVybiExO2lmKGsmJkN0IGluc3RhbmNlb2YgaylyZXR1cm4hMDtjb25zdCB1dD1UKEN0KTtpZighdXR8fHV0PT09T2JqZWN0LnByb3RvdHlwZXx8IVUoQ3QuYXBwZW5kKSlyZXR1cm4hMTtjb25z''@;'; put 'put ''dCBKdD1PKEN0KTtyZXR1cm4iZm9ybWRhdGEiPT09SnR8fCJvYmplY3QiPT09SnQmJlUoQ3QudG9TdHJpbmcpJiYiW29iamVjdCBGb3JtRGF0YV0iPT09Q3QudG9TdHJpbmcoKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24geihDdCl7bGV0IHV0O3JldHVybiB1dD10eXBlb2YgQXJyYXlC''@;'; put 'put ''dWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KEN0KTpDdCYmQ3QuYnVmZmVyJiZIKEN0LmJ1ZmZlciksdXR9LGlzU3RyaW5nOlosaXNOdW1iZXI6Syxpc0Jvb2xlYW46Q3Q9PiEwPT09Q3R8fCExPT09Q3QsaXNPYmplY3Q6WCxpc1BsYWluT2JqZWN0OnNl''@;'; put 'put ''LGlzRW1wdHlPYmplY3Q6Q3Q9PntpZighWChDdCl8fE4oQ3QpKXJldHVybiExO3RyeXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKEN0KS5sZW5ndGgmJk9iamVjdC5nZXRQcm90b3R5cGVPZihDdCk9PT1PYmplY3QucHJvdG90eXBlfWNhdGNoe3JldHVybiExfX0saXNSZWFkYWJsZVN0cmVhbTps''@;'; put 'put ''LGlzUmVxdWVzdDpiLGlzUmVzcG9uc2U6cSxpc0hlYWRlcnM6Ryxpc1VuZGVmaW5lZDpGLGlzRGF0ZTpfZSxpc0ZpbGU6bWUsaXNSZWFjdE5hdGl2ZUJsb2I6Q3Q9PiEhKEN0JiZ0eXBlb2YgQ3QudXJpPCJ1IiksaXNSZWFjdE5hdGl2ZTpDdD0+Q3QmJnR5cGVvZiBDdC5nZXRQYXJ0czwidSIs''@;'; put 'put ''aXNCbG9iOnMsaXNSZWdFeHA6WWUsaXNGdW5jdGlvbjpVLGlzU3RyZWFtOkN0PT5YKEN0KSYmVShDdC5waXBlKSxpc1VSTFNlYXJjaFBhcmFtczp5LGlzVHlwZWRBcnJheTpNZSxpc0ZpbGVMaXN0OnUsZm9yRWFjaDpwZSxtZXJnZTpmdW5jdGlvbiB2ZSguLi5DdCl7Y29uc3R7Y2FzZWxlc3M6''@;'; put 'put ''dXQsc2tpcFVuZGVmaW5lZDpKdH09cWUodGhpcykmJnRoaXN8fHt9LGNuPXt9LEFuPShLbixzcik9PntpZigiX19wcm90b19fIj09PXNyfHwiY29uc3RydWN0b3IiPT09c3J8fCJwcm90b3R5cGUiPT09c3IpcmV0dXJuO2NvbnN0IHVuPXV0JiZQZShjbixzcil8fHNyLHlpPUtlKGNuLHVuKT9j''@;'; put 'put ''blt1bl06dm9pZCAwO3NlKHlpKSYmc2UoS24pP2NuW3VuXT12ZSh5aSxLbik6c2UoS24pP2NuW3VuXT12ZSh7fSxLbik6QihLbik/Y25bdW5dPUtuLnNsaWNlKCk6KCFKdHx8IUYoS24pKSYmKGNuW3VuXT1Lbil9O2ZvcihsZXQgS249MCxzcj1DdC5sZW5ndGg7S248c3I7S24rKylDdFtLbl0m''@;'; put 'put ''JnBlKEN0W0tuXSxBbik7cmV0dXJuIGNufSxleHRlbmQ6KEN0LHV0LEp0LHthbGxPd25LZXlzOmNufT17fSk9PihwZSh1dCwoQW4sS24pPT57SnQmJlUoQW4pP09iamVjdC5kZWZpbmVQcm9wZXJ0eShDdCxLbix7X19wcm90b19fOm51bGwsdmFsdWU6SShBbixKdCksd3JpdGFibGU6ITAsZW51''@;'; put 'put ''bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTpPYmplY3QuZGVmaW5lUHJvcGVydHkoQ3QsS24se19fcHJvdG9fXzpudWxsLHZhbHVlOkFuLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9LHthbGxPd25LZXlzOmNufSksQ3QpLHRyaW06Q3Q9PkN0LnRyaW0/''@;'; put 'put ''Q3QudHJpbSgpOkN0LnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSxzdHJpcEJPTTpDdD0+KDY1Mjc5PT09Q3QuY2hhckNvZGVBdCgwKSYmKEN0PUN0LnNsaWNlKDEpKSxDdCksaW5oZXJpdHM6KEN0LHV0LEp0LGNuKT0+e0N0LnByb3RvdHlwZT1PYmpl''@;'; put 'put ''Y3QuY3JlYXRlKHV0LnByb3RvdHlwZSxjbiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEN0LnByb3RvdHlwZSwiY29uc3RydWN0b3IiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpDdCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShDdCwic3VwZXIiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTp1dC5wcm90b3R5cGV9KSxKdCYmT2JqZWN0LmFzc2lnbihDdC5wcm90b3R5cGUsSnQpfSx0b0ZsYXRPYmplY3Q6KEN0LHV0LEp0LGNuKT0+e2xldCBBbixLbixzcjtjb25zdCB1bj17fTtpZih1dD11dHx8e30sbnVsbD09Q3QpcmV0''@;'; put 'put ''dXJuIHV0O2Rve2ZvcihBbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhDdCksS249QW4ubGVuZ3RoO0tuLS0gPjA7KXNyPUFuW0tuXSwoIWNufHxjbihzcixDdCx1dCkpJiYhdW5bc3JdJiYodXRbc3JdPUN0W3NyXSx1bltzcl09ITApO0N0PSExIT09SnQmJlQoQ3QpfXdoaWxlKEN0JiYo''@;'; put 'put ''IUp0fHxKdChDdCx1dCkpJiZDdCE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB1dH0sa2luZE9mOk8sa2luZE9mVGVzdDpELGVuZHNXaXRoOihDdCx1dCxKdCk9PntDdD1TdHJpbmcoQ3QpLCh2b2lkIDA9PT1KdHx8SnQ+Q3QubGVuZ3RoKSYmKEp0PUN0Lmxlbmd0aCk7Y29uc3QgY249Q3Qu''@;'; put 'put ''aW5kZXhPZih1dCxKdC09dXQubGVuZ3RoKTtyZXR1cm4tMSE9PWNuJiZjbj09PUp0fSx0b0FycmF5OkN0PT57aWYoIUN0KXJldHVybiBudWxsO2lmKEIoQ3QpKXJldHVybiBDdDtsZXQgdXQ9Q3QubGVuZ3RoO2lmKCFLKHV0KSlyZXR1cm4gbnVsbDtjb25zdCBKdD1uZXcgQXJyYXkodXQpO2Zv''@;'; put 'put ''cig7dXQtLSA+MDspSnRbdXRdPUN0W3V0XTtyZXR1cm4gSnR9LGZvckVhY2hFbnRyeTooQ3QsdXQpPT57Y29uc3QgY249KEN0JiZDdFtBXSkuY2FsbChDdCk7bGV0IEFuO2Zvcig7KEFuPWNuLm5leHQoKSkmJiFBbi5kb25lOyl7Y29uc3QgS249QW4udmFsdWU7dXQuY2FsbChDdCxLblswXSxL''@;'; put 'put ''blsxXSl9fSxtYXRjaEFsbDooQ3QsdXQpPT57bGV0IEp0O2NvbnN0IGNuPVtdO2Zvcig7bnVsbCE9PShKdD1DdC5leGVjKHV0KSk7KWNuLnB1c2goSnQpO3JldHVybiBjbn0saXNIVE1MRm9ybTp3ZSxoYXNPd25Qcm9wZXJ0eTpLZSxoYXNPd25Qcm9wOktlLHJlZHVjZURlc2NyaXB0b3JzOnF0''@;'; put 'put ''LGZyZWV6ZU1ldGhvZHM6Q3Q9PntxdChDdCwodXQsSnQpPT57aWYoVShDdCkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5jbHVkZXMoSnQpKXJldHVybiExO2lmKFUoQ3RbSnRdKSl7aWYodXQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdXQpcmV0dXJuIHZvaWQodXQu''@;'; put 'put ''d3JpdGFibGU9ITEpO3V0LnNldHx8KHV0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIitKdCsiJyIpfSl9fSl9LHRvT2JqZWN0U2V0OihDdCx1dCk9Pntjb25zdCBKdD17fSxjbj1Bbj0+e0FuLmZvckVhY2goS249PntKdFtLbl09ITB9''@;'; put 'put ''KX07cmV0dXJuIEIoQ3QpP2NuKEN0KTpjbihTdHJpbmcoQ3QpLnNwbGl0KHV0KSksSnR9LHRvQ2FtZWxDYXNlOkN0PT5DdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24oSnQsY24sQW4pe3JldHVybiBjbi50b1VwcGVyQ2FzZSgpK0FufSks''@;'; put 'put ''bm9vcDooKT0+e30sdG9GaW5pdGVOdW1iZXI6KEN0LHV0KT0+bnVsbCE9Q3QmJk51bWJlci5pc0Zpbml0ZShDdD0rQ3QpP0N0OnV0LGZpbmRLZXk6UGUsZ2xvYmFsOlplLGlzQ29udGV4dERlZmluZWQ6cWUsaXNTcGVjQ29tcGxpYW50Rm9ybTpmdW5jdGlvbiBVZShDdCl7cmV0dXJuISEoQ3Qm''@;'; put 'put ''JlUoQ3QuYXBwZW5kKSYmIkZvcm1EYXRhIj09PUN0W01dJiZDdFtBXSl9LHRvSlNPTk9iamVjdDpDdD0+e2NvbnN0IHV0PW5ldyBBcnJheSgxMCksSnQ9KGNuLEFuKT0+e2lmKFgoY24pKXtpZih1dC5pbmRleE9mKGNuKT49MClyZXR1cm47aWYoTihjbikpcmV0dXJuIGNuO2lmKCEoInRvSlNP''@;'; put 'put ''TiJpbiBjbikpe3V0W0FuXT1jbjtjb25zdCBLbj1CKGNuKT9bXTp7fTtyZXR1cm4gcGUoY24sKHNyLHVuKT0+e2NvbnN0IHlpPUp0KHNyLEFuKzEpOyFGKHlpKSYmKEtuW3VuXT15aSl9KSx1dFtBbl09dm9pZCAwLEtufX1yZXR1cm4gY259O3JldHVybiBKdChDdCwwKX0saXNBc3luY0ZuOkxl''@;'; put 'put ''LGlzVGhlbmFibGU6Q3Q9PkN0JiYoWChDdCl8fFUoQ3QpKSYmVShDdC50aGVuKSYmVShDdC5jYXRjaCksc2V0SW1tZWRpYXRlOnJuLGFzYXA6eHQsaXNJdGVyYWJsZTpDdD0+bnVsbCE9Q3QmJlUoQ3RbQV0pfTtjb25zdCBYdD15bi50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24i''@;'; put 'put ''LCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0''@;'; put 'put ''aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxYcj1TeW1ib2woImludGVybmFscyIpLHNuPS9bXlx4MDlceDIwLVx4N0VceDgwLVx4RkZdL2c7ZnVuY3Rpb24gQ3IoQ3Qpe3JldHVybiBDdCYmU3RyaW5nKEN0KS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlv''@;'; put 'put ''biB3dChDdCl7cmV0dXJuITE9PT1DdHx8bnVsbD09Q3Q/Q3Q6eW4uaXNBcnJheShDdCk/Q3QubWFwKHd0KTpmdW5jdGlvbiBMdChDdCl7cmV0dXJuIGZ1bmN0aW9uIGl0KEN0KXtsZXQgdXQ9MCxKdD1DdC5sZW5ndGg7Zm9yKDt1dDxKdDspe2NvbnN0IGNuPUN0LmNoYXJDb2RlQXQodXQpO2lm''@;'; put 'put ''KDkhPT1jbiYmMzIhPT1jbilicmVhazt1dCs9MX1mb3IoO0p0PnV0Oyl7Y29uc3QgY249Q3QuY2hhckNvZGVBdChKdC0xKTtpZig5IT09Y24mJjMyIT09Y24pYnJlYWs7SnQtPTF9cmV0dXJuIDA9PT11dCYmSnQ9PT1DdC5sZW5ndGg/Q3Q6Q3Quc2xpY2UodXQsSnQpfShDdC5yZXBsYWNlKHNu''@;'; put 'put ''LCIiKSl9KFN0cmluZyhDdCkpfWZ1bmN0aW9uIFB0KEN0LHV0LEp0LGNuLEFuKXtpZih5bi5pc0Z1bmN0aW9uKGNuKSlyZXR1cm4gY24uY2FsbCh0aGlzLHV0LEp0KTtpZihBbiYmKHV0PUp0KSx5bi5pc1N0cmluZyh1dCkpe2lmKHluLmlzU3RyaW5nKGNuKSlyZXR1cm4tMSE9PXV0LmluZGV4''@;'; put 'put ''T2YoY24pO2lmKHluLmlzUmVnRXhwKGNuKSlyZXR1cm4gY24udGVzdCh1dCl9fWNsYXNzIHl0e2NvbnN0cnVjdG9yKHV0KXt1dCYmdGhpcy5zZXQodXQpfXNldCh1dCxKdCxjbil7Y29uc3QgQW49dGhpcztmdW5jdGlvbiBLbih1bix5aSx6bil7Y29uc3QgRGk9Q3IoeWkpO2lmKCFEaSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7Y29uc3QgcG89eW4uZmluZEtleShBbixEaSk7KCFwb3x8dm9pZCAwPT09QW5bcG9dfHwhMD09PXpufHx2b2lkIDA9PT16biYmITEhPT1Bbltwb10pJiYoQW5bcG98fHlpXT13dCh1bikpfWNvbnN0''@;'; put 'put ''IHNyPSh1bix5aSk9PnluLmZvckVhY2godW4sKHpuLERpKT0+S24oem4sRGkseWkpKTtpZih5bi5pc1BsYWluT2JqZWN0KHV0KXx8dXQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKXNyKHV0LEp0KTtlbHNlIGlmKHluLmlzU3RyaW5nKHV0KSYmKHV0PXV0LnRyaW0oKSkmJiEoQ3Q9Pi9e''@;'; put 'put ''Wy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQ3QudHJpbSgpKSkodXQpKXNyKChDdD0+e2NvbnN0IHV0PXt9O2xldCBKdCxjbixBbjtyZXR1cm4gQ3QmJkN0LnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24oc3Ipe0FuPXNyLmluZGV4T2YoIjoiKSxKdD1zci5zdWJzdHJp''@;'; put 'put ''bmcoMCxBbikudHJpbSgpLnRvTG93ZXJDYXNlKCksY249c3Iuc3Vic3RyaW5nKEFuKzEpLnRyaW0oKSwhKCFKdHx8dXRbSnRdJiZYdFtKdF0pJiYoInNldC1jb29raWUiPT09SnQ/dXRbSnRdP3V0W0p0XS5wdXNoKGNuKTp1dFtKdF09W2NuXTp1dFtKdF09dXRbSnRdP3V0W0p0XSsiLCAiK2Nu''@;'; put 'put ''OmNuKX0pLHV0fSkodXQpLEp0KTtlbHNlIGlmKHluLmlzT2JqZWN0KHV0KSYmeW4uaXNJdGVyYWJsZSh1dCkpe2xldCB5aSx6bix1bj17fTtmb3IoY29uc3QgRGkgb2YgdXQpe2lmKCF5bi5pc0FycmF5KERpKSl0aHJvdyBUeXBlRXJyb3IoIk9iamVjdCBpdGVyYXRvciBtdXN0IHJldHVybiBh''@;'; put 'put ''IGtleS12YWx1ZSBwYWlyIik7dW5bem49RGlbMF1dPSh5aT11blt6bl0pP3luLmlzQXJyYXkoeWkpP1suLi55aSxEaVsxXV06W3lpLERpWzFdXTpEaVsxXX1zcih1bixKdCl9ZWxzZSBudWxsIT11dCYmS24oSnQsdXQsY24pO3JldHVybiB0aGlzfWdldCh1dCxKdCl7aWYodXQ9Q3IodXQpKXtj''@;'; put 'put ''b25zdCBjbj15bi5maW5kS2V5KHRoaXMsdXQpO2lmKGNuKXtjb25zdCBBbj10aGlzW2NuXTtpZighSnQpcmV0dXJuIEFuO2lmKCEwPT09SnQpcmV0dXJuIGZ1bmN0aW9uIFJuKEN0KXtjb25zdCB1dD1PYmplY3QuY3JlYXRlKG51bGwpLEp0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10r''@;'; put 'put ''KSk/L2c7bGV0IGNuO2Zvcig7Y249SnQuZXhlYyhDdCk7KXV0W2NuWzFdXT1jblsyXTtyZXR1cm4gdXR9KEFuKTtpZih5bi5pc0Z1bmN0aW9uKEp0KSlyZXR1cm4gSnQuY2FsbCh0aGlzLEFuLGNuKTtpZih5bi5pc1JlZ0V4cChKdCkpcmV0dXJuIEp0LmV4ZWMoQW4pO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModXQsSnQpe2lmKHV0PUNyKHV0KSl7Y29uc3QgY249eW4uZmluZEtleSh0aGlzLHV0KTtyZXR1cm4hKCFjbnx8dm9pZCAwPT09dGhpc1tjbl18fEp0JiYhUHQoMCx0aGlzW2NuXSxjbixKdCkpfXJl''@;'; put 'put ''dHVybiExfWRlbGV0ZSh1dCxKdCl7Y29uc3QgY249dGhpcztsZXQgQW49ITE7ZnVuY3Rpb24gS24oc3Ipe2lmKHNyPUNyKHNyKSl7Y29uc3QgdW49eW4uZmluZEtleShjbixzcik7dW4mJighSnR8fFB0KDAsY25bdW5dLHVuLEp0KSkmJihkZWxldGUgY25bdW5dLEFuPSEwKX19cmV0dXJuIHlu''@;'; put 'put ''LmlzQXJyYXkodXQpP3V0LmZvckVhY2goS24pOktuKHV0KSxBbn1jbGVhcih1dCl7Y29uc3QgSnQ9T2JqZWN0LmtleXModGhpcyk7bGV0IGNuPUp0Lmxlbmd0aCxBbj0hMTtmb3IoO2NuLS07KXtjb25zdCBLbj1KdFtjbl07KCF1dHx8UHQoMCx0aGlzW0tuXSxLbix1dCwhMCkpJiYoZGVsZXRl''@;'; put 'put ''IHRoaXNbS25dLEFuPSEwKX1yZXR1cm4gQW59bm9ybWFsaXplKHV0KXtjb25zdCBKdD10aGlzLGNuPXt9O3JldHVybiB5bi5mb3JFYWNoKHRoaXMsKEFuLEtuKT0+e2NvbnN0IHNyPXluLmZpbmRLZXkoY24sS24pO2lmKHNyKXJldHVybiBKdFtzcl09d3QoQW4pLHZvaWQgZGVsZXRlIEp0W0tu''@;'; put 'put ''XTtjb25zdCB1bj11dD9mdW5jdGlvbiBRcihDdCl7cmV0dXJuIEN0LnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKHV0LEp0LGNuKT0+SnQudG9VcHBlckNhc2UoKStjbil9KEtuKTpTdHJpbmcoS24pLnRyaW0oKTt1biE9PUtuJiZkZWxldGUgSnRbS25d''@;'; put 'put ''LEp0W3VuXT13dChBbiksY25bdW5dPSEwfSksdGhpc31jb25jYXQoLi4udXQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnV0KX10b0pTT04odXQpe2NvbnN0IEp0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHluLmZvckVhY2godGhpcywoY24sQW4pPT57bnVs''@;'; put 'put ''bCE9Y24mJiExIT09Y24mJihKdFtBbl09dXQmJnluLmlzQXJyYXkoY24pP2NuLmpvaW4oIiwgIik6Y24pfSksSnR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVj''@;'; put 'put ''dC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3V0LEp0XSk9PnV0KyI6ICIrSnQpLmpvaW4oIlxuIil9Z2V0U2V0Q29va2llKCl7cmV0dXJuIHRoaXMuZ2V0KCJzZXQtY29va2llIil8fFtdfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGlj''@;'; put 'put ''IGZyb20odXQpe3JldHVybiB1dCBpbnN0YW5jZW9mIHRoaXM/dXQ6bmV3IHRoaXModXQpfXN0YXRpYyBjb25jYXQodXQsLi4uSnQpe2NvbnN0IGNuPW5ldyB0aGlzKHV0KTtyZXR1cm4gSnQuZm9yRWFjaChBbj0+Y24uc2V0KEFuKSksY259c3RhdGljIGFjY2Vzc29yKHV0KXtjb25zdCBjbj0o''@;'; put 'put ''dGhpc1tYcl09dGhpc1tYcl09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxBbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBLbihzcil7Y29uc3QgdW49Q3Ioc3IpO2NuW3VuXXx8KGZ1bmN0aW9uIE5lKEN0LHV0KXtjb25zdCBKdD15bi50b0NhbWVsQ2FzZSgiICIrdXQpO1siZ2V0Iiwic2V0''@;'; put 'put ''IiwiaGFzIl0uZm9yRWFjaChjbj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShDdCxjbitKdCx7X19wcm90b19fOm51bGwsdmFsdWU6ZnVuY3Rpb24oQW4sS24sc3Ipe3JldHVybiB0aGlzW2NuXS5jYWxsKHRoaXMsdXQsQW4sS24sc3IpfSxjb25maWd1cmFibGU6ITB9KX0pfShBbixzciksY25b''@;'; put 'put ''dW5dPSEwKX1yZXR1cm4geW4uaXNBcnJheSh1dCk/dXQuZm9yRWFjaChLbik6S24odXQpLHRoaXN9fXl0LmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKSx5bi5y''@;'; put 'put ''ZWR1Y2VEZXNjcmlwdG9ycyh5dC5wcm90b3R5cGUsKHt2YWx1ZTpDdH0sdXQpPT57bGV0IEp0PXV0WzBdLnRvVXBwZXJDYXNlKCkrdXQuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+Q3Qsc2V0KGNuKXt0aGlzW0p0XT1jbn19fSkseW4uZnJlZXplTWV0aG9kcyh5dCk7bGV0IHduPSgoKT0+e2Ns''@;'; put 'put ''YXNzIEN0IGV4dGVuZHMgRXJyb3J7c3RhdGljIGZyb20oSnQsY24sQW4sS24sc3IsdW4pe2NvbnN0IHlpPW5ldyBDdChKdC5tZXNzYWdlLGNufHxKdC5jb2RlLEFuLEtuLHNyKTtyZXR1cm4geWkuY2F1c2U9SnQseWkubmFtZT1KdC5uYW1lLG51bGwhPUp0LnN0YXR1cyYmbnVsbD09eWkuc3Rh''@;'; put 'put ''dHVzJiYoeWkuc3RhdHVzPUp0LnN0YXR1cyksdW4mJk9iamVjdC5hc3NpZ24oeWksdW4pLHlpfWNvbnN0cnVjdG9yKEp0LGNuLEFuLEtuLHNyKXtzdXBlcihKdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm1lc3NhZ2UiLHtfX3Byb3RvX186bnVsbCx2YWx1ZTpKdCxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdGhpcy5pc0F4aW9zRXJyb3I9ITAsY24mJih0aGlzLmNvZGU9Y24pLEFuJiYodGhpcy5jb25maWc9QW4pLEtuJiYodGhpcy5yZXF1ZXN0PUtuKSxzciYmKHRoaXMucmVzcG9uc2U9c3IsdGhp''@;'; put 'put ''cy5zdGF0dXM9c3Iuc3RhdHVzKX10b0pTT04oKXtjb25zdCBKdD10aGlzLmNvbmZpZyxjbj1KdCYmeW4uaGFzT3duUHJvcChKdCwicmVkYWN0Iik/SnQucmVkYWN0OnZvaWQgMCxBbj15bi5pc0FycmF5KGNuKSYmY24ubGVuZ3RoPjA/ZnVuY3Rpb24gX3QoQ3QsdXQpe2NvbnN0IEp0PW5ldyBT''@;'; put 'put ''ZXQodXQubWFwKEtuPT5TdHJpbmcoS24pLnRvTG93ZXJDYXNlKCkpKSxjbj1bXSxBbj1Lbj0+e2lmKG51bGw9PT1Lbnx8Im9iamVjdCIhPXR5cGVvZiBLbnx8eW4uaXNCdWZmZXIoS24pKXJldHVybiBLbjtpZigtMSE9PWNuLmluZGV4T2YoS24pKXJldHVybjtsZXQgc3I7aWYoS24gaW5zdGFu''@;'; put 'put ''Y2VvZiB5dCYmKEtuPUtuLnRvSlNPTigpKSxjbi5wdXNoKEtuKSx5bi5pc0FycmF5KEtuKSlzcj1bXSxLbi5mb3JFYWNoKCh1bix5aSk9Pntjb25zdCB6bj1Bbih1bik7eW4uaXNVbmRlZmluZWQoem4pfHwoc3JbeWldPXpuKX0pO2Vsc2V7aWYoIXluLmlzUGxhaW5PYmplY3QoS24pJiZmdW5j''@;'; put 'put ''dGlvbiBhdChDdCl7aWYoeW4uaGFzT3duUHJvcChDdCwidG9KU09OIikpcmV0dXJuITA7bGV0IHV0PU9iamVjdC5nZXRQcm90b3R5cGVPZihDdCk7Zm9yKDt1dCYmdXQhPT1PYmplY3QucHJvdG90eXBlOyl7aWYoeW4uaGFzT3duUHJvcCh1dCwidG9KU09OIikpcmV0dXJuITA7dXQ9T2JqZWN0''@;'; put 'put ''LmdldFByb3RvdHlwZU9mKHV0KX1yZXR1cm4hMX0oS24pKXJldHVybiBjbi5wb3AoKSxLbjtzcj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFt1bix5aV1vZiBPYmplY3QuZW50cmllcyhLbikpe2NvbnN0IHpuPUp0Lmhhcyh1bi50b0xvd2VyQ2FzZSgpKT8iW1JFREFDVEVEICoqKipd''@;'; put 'put ''IjpBbih5aSk7eW4uaXNVbmRlZmluZWQoem4pfHwoc3JbdW5dPXpuKX19cmV0dXJuIGNuLnBvcCgpLHNyfTtyZXR1cm4gQW4oQ3QpfShKdCxjbik6eW4udG9KU09OT2JqZWN0KEp0KTtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5k''@;'; put 'put ''ZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6QW4sY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMu''@;'; put 'put ''c3RhdHVzfX19cmV0dXJuIEN0LkVSUl9CQURfT1BUSU9OX1ZBTFVFPSJFUlJfQkFEX09QVElPTl9WQUxVRSIsQ3QuRVJSX0JBRF9PUFRJT049IkVSUl9CQURfT1BUSU9OIixDdC5FQ09OTkFCT1JURUQ9IkVDT05OQUJPUlRFRCIsQ3QuRVRJTUVET1VUPSJFVElNRURPVVQiLEN0LkVDT05OUkVG''@;'; put 'put ''VVNFRD0iRUNPTk5SRUZVU0VEIixDdC5FUlJfTkVUV09SSz0iRVJSX05FVFdPUksiLEN0LkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFM9IkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLEN0LkVSUl9ERVBSRUNBVEVEPSJFUlJfREVQUkVDQVRFRCIsQ3QuRVJSX0JBRF9SRVNQT05TRT0iRVJS''@;'; put 'put ''X0JBRF9SRVNQT05TRSIsQ3QuRVJSX0JBRF9SRVFVRVNUPSJFUlJfQkFEX1JFUVVFU1QiLEN0LkVSUl9DQU5DRUxFRD0iRVJSX0NBTkNFTEVEIixDdC5FUlJfTk9UX1NVUFBPUlQ9IkVSUl9OT1RfU1VQUE9SVCIsQ3QuRVJSX0lOVkFMSURfVVJMPSJFUlJfSU5WQUxJRF9VUkwiLEN0LkVSUl9G''@;'; put 'put ''T1JNX0RBVEFfREVQVEhfRVhDRUVERUQ9IkVSUl9GT1JNX0RBVEFfREVQVEhfRVhDRUVERUQiLEN0fSkoKTtmdW5jdGlvbiBIdChDdCl7cmV0dXJuIHluLmlzUGxhaW5PYmplY3QoQ3QpfHx5bi5pc0FycmF5KEN0KX1mdW5jdGlvbiBzaShDdCl7cmV0dXJuIHluLmVuZHNXaXRoKEN0LCJbXSIp''@;'; put 'put ''P0N0LnNsaWNlKDAsLTIpOkN0fWZ1bmN0aW9uIG5uKEN0LHV0LEp0KXtyZXR1cm4gQ3Q/Q3QuY29uY2F0KHV0KS5tYXAoZnVuY3Rpb24oQW4sS24pe3JldHVybiBBbj1zaShBbiksIUp0JiZLbj8iWyIrQW4rIl0iOkFufSkuam9pbihKdD8iLiI6IiIpOnV0fWNvbnN0IGtpPXluLnRvRmxhdE9i''@;'; put 'put ''amVjdCh5bix7fSxudWxsLGZ1bmN0aW9uKHV0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QodXQpfSk7ZnVuY3Rpb24gYW4oQ3QsdXQsSnQpe2lmKCF5bi5pc09iamVjdChDdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dXQ9dXR8fG5ldyBGb3JtRGF0''@;'; put 'put ''YTtjb25zdCBjbj0oSnQ9eW4udG9GbGF0T2JqZWN0KEp0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oZ2EseGEpe3JldHVybiF5bi5pc1VuZGVmaW5lZCh4YVtnYV0pfSkpLm1ldGFUb2tlbnMsQW49SnQudmlzaXRvcnx8cG8sS249SnQuZG90cyxzcj1K''@;'; put 'put ''dC5pbmRleGVzLHVuPUp0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYix5aT12b2lkIDA9PT1KdC5tYXhEZXB0aD8xMDA6SnQubWF4RGVwdGgsem49dW4mJnluLmlzU3BlY0NvbXBsaWFudEZvcm0odXQpO2lmKCF5bi5pc0Z1bmN0aW9uKEFuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNp''@;'; put 'put ''dG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIERpKEJhKXtpZihudWxsPT09QmEpcmV0dXJuIiI7aWYoeW4uaXNEYXRlKEJhKSlyZXR1cm4gQmEudG9JU09TdHJpbmcoKTtpZih5bi5pc0Jvb2xlYW4oQmEpKXJldHVybiBCYS50b1N0cmluZygpO2lmKCF6biYmeW4uaXNCbG9iKEJh''@;'; put 'put ''KSl0aHJvdyBuZXcgd24oIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIHluLmlzQXJyYXlCdWZmZXIoQmEpfHx5bi5pc1R5cGVkQXJyYXkoQmEpP3puJiYiZnVuY3Rpb24iPT10eXBlb2YgQmxvYj9uZXcgQmxvYihbQmFdKTpoLmZyb20oQmEp''@;'; put 'put ''OkJhfWZ1bmN0aW9uIHBvKEJhLGdhLHhhKXtsZXQgS3I9QmE7aWYoeW4uaXNSZWFjdE5hdGl2ZSh1dCkmJnluLmlzUmVhY3ROYXRpdmVCbG9iKEJhKSlyZXR1cm4gdXQuYXBwZW5kKG5uKHhhLGdhLEtuKSxEaShCYSkpLCExO2lmKEJhJiYheGEmJiJvYmplY3QiPT10eXBlb2YgQmEpaWYoeW4u''@;'; put 'put ''ZW5kc1dpdGgoZ2EsInt9IikpZ2E9Y24/Z2E6Z2Euc2xpY2UoMCwtMiksQmE9SlNPTi5zdHJpbmdpZnkoQmEpO2Vsc2UgaWYoeW4uaXNBcnJheShCYSkmJmZ1bmN0aW9uIGxuKEN0KXtyZXR1cm4geW4uaXNBcnJheShDdCkmJiFDdC5zb21lKEh0KX0oQmEpfHwoeW4uaXNGaWxlTGlzdChCYSl8''@;'; put 'put ''fHluLmVuZHNXaXRoKGdhLCJbXSIpKSYmKEtyPXluLnRvQXJyYXkoQmEpKSlyZXR1cm4gZ2E9c2koZ2EpLEtyLmZvckVhY2goZnVuY3Rpb24oSmksU2EpeyF5bi5pc1VuZGVmaW5lZChKaSkmJm51bGwhPT1KaSYmdXQuYXBwZW5kKCEwPT09c3I/bm4oW2dhXSxTYSxLbik6bnVsbD09PXNyP2dh''@;'; put 'put ''OmdhKyJbXSIsRGkoSmkpKX0pLCExO3JldHVybiEhSHQoQmEpfHwodXQuYXBwZW5kKG5uKHhhLGdhLEtuKSxEaShCYSkpLCExKX1jb25zdCBLbz1bXSxQYT1PYmplY3QuYXNzaWduKGtpLHtkZWZhdWx0VmlzaXRvcjpwbyxjb252ZXJ0VmFsdWU6RGksaXNWaXNpdGFibGU6SHR9KTtpZigheW4u''@;'; put 'put ''aXNPYmplY3QoQ3QpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gV28oQmEsZ2EseGE9MCl7aWYoIXluLmlzVW5kZWZpbmVkKEJhKSl7aWYoeGE+eWkpdGhyb3cgbmV3IHduKCJPYmplY3QgaXMgdG9vIGRlZXBseSBuZXN0ZWQg''@;'; put 'put ''KCIreGErIiBsZXZlbHMpLiBNYXggZGVwdGg6ICIreWksd24uRVJSX0ZPUk1fREFUQV9ERVBUSF9FWENFRURFRCk7aWYoLTEhPT1Lby5pbmRleE9mKEJhKSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrZ2Euam9pbigiLiIpKTtLby5wdXNoKEJhKSx5bi5m''@;'; put 'put ''b3JFYWNoKEJhLGZ1bmN0aW9uKHdyLEppKXshMD09PSghKHluLmlzVW5kZWZpbmVkKHdyKXx8bnVsbD09PXdyKSYmQW4uY2FsbCh1dCx3cix5bi5pc1N0cmluZyhKaSk/SmkudHJpbSgpOkppLGdhLFBhKSkmJldvKHdyLGdhP2dhLmNvbmNhdChKaSk6W0ppXSx4YSsxKX0pLEtvLnBvcCgpfX0o''@;'; put 'put ''Q3QpLHV0fWZ1bmN0aW9uIEd0KEN0KXtjb25zdCB1dD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQ3QpLnJlcGxhY2UoL1shJygpfl18JTIwL2csZnVuY3Rpb24oY24pe3JldHVy''@;'; put 'put ''biB1dFtjbl19KX1mdW5jdGlvbiBlYShDdCx1dCl7dGhpcy5fcGFpcnM9W10sQ3QmJmFuKEN0LHRoaXMsdXQpfWNvbnN0IG1pPWVhLnByb3RvdHlwZTtmdW5jdGlvbiBmcihDdCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChDdCkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0''@;'; put 'put ''L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpfWZ1bmN0aW9uICRpKEN0LHV0LEp0KXtpZighdXQpcmV0dXJuIEN0O2NvbnN0IGNuPUp0JiZKdC5lbmNvZGV8fGZyLEFuPXluLmlzRnVuY3Rpb24oSnQpP3tzZXJpYWxpemU6SnR9Okp0LEtuPUFuJiZBbi5z''@;'; put 'put ''ZXJpYWxpemU7bGV0IHNyO2lmKHNyPUtuP0tuKHV0LEFuKTp5bi5pc1VSTFNlYXJjaFBhcmFtcyh1dCk/dXQudG9TdHJpbmcoKTpuZXcgZWEodXQsQW4pLnRvU3RyaW5nKGNuKSxzcil7Y29uc3QgdW49Q3QuaW5kZXhPZigiIyIpOy0xIT09dW4mJihDdD1DdC5zbGljZSgwLHVuKSksQ3QrPSgt''@;'; put 'put ''MT09PUN0LmluZGV4T2YoIj8iKT8iPyI6IiYiKStzcn1yZXR1cm4gQ3R9bWkuYXBwZW5kPWZ1bmN0aW9uKHV0LEp0KXt0aGlzLl9wYWlycy5wdXNoKFt1dCxKdF0pfSxtaS50b1N0cmluZz1mdW5jdGlvbih1dCl7Y29uc3QgSnQ9dXQ/ZnVuY3Rpb24oY24pe3JldHVybiB1dC5jYWxsKHRoaXMs''@;'; put 'put ''Y24sR3QpfTpHdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKEFuKXtyZXR1cm4gSnQoQW5bMF0pKyI9IitKdChBblsxXSl9LCIiKS5qb2luKCImIil9O2NsYXNzIEtpe2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodXQsSnQsY24pe3JldHVybiB0aGlzLmhhbmRs''@;'; put 'put ''ZXJzLnB1c2goe2Z1bGZpbGxlZDp1dCxyZWplY3RlZDpKdCxzeW5jaHJvbm91czohIWNuJiZjbi5zeW5jaHJvbm91cyxydW5XaGVuOmNuP2NuLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodXQpe3RoaXMuaGFuZGxlcnNbdXRdJiYodGhpcy5oYW5kbGVyc1t1''@;'; put 'put ''dF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh1dCl7eW4uZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGNuKXtudWxsIT09Y24mJnV0KGNuKX0pfX12YXIgVmk9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJz''@;'; put 'put ''aW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITEsbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzohMH0sUmE9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmVhLEZvcm1EYXRhOnR5''@;'; put 'put ''cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbCxCbG9iOnR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGx9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTtjb25zdCBvaT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1''@;'; put 'put ''IixVaT0ib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yfHx2b2lkIDAsVmE9b2kmJighVWl8fFsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoVWkucHJvZHVjdCk8MCksdXI9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0''@;'; put 'put ''YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzLGZhPW9pJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciBvYT17Li4uT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaGFzQnJvd3NlckVu''@;'; put 'put ''djpvaSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6VmEsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OnVyLG5hdmlnYXRvcjpVaSxvcmlnaW46ZmF9KSwuLi5SYX07ZnVuY3Rpb24gWGEoQ3Qpe2Z1bmN0aW9uIHV0KEp0LGNuLEFuLEtuKXtsZXQgc3I9SnRbS24rK107aWYoIl9fcHJvdG9f''@;'; put 'put ''XyI9PT1zcilyZXR1cm4hMDtjb25zdCB1bj1OdW1iZXIuaXNGaW5pdGUoK3NyKSx5aT1Lbj49SnQubGVuZ3RoO3JldHVybiBzcj0hc3ImJnluLmlzQXJyYXkoQW4pP0FuLmxlbmd0aDpzcix5aT8oQW5bc3JdPXluLmhhc093blByb3AoQW4sc3IpP3luLmlzQXJyYXkoQW5bc3JdKT9Bbltzcl0u''@;'; put 'put ''Y29uY2F0KGNuKTpbQW5bc3JdLGNuXTpjbiwhdW4pOigoIUFuW3NyXXx8IXluLmlzT2JqZWN0KEFuW3NyXSkpJiYoQW5bc3JdPVtdKSx1dChKdCxjbixBbltzcl0sS24pJiZ5bi5pc0FycmF5KEFuW3NyXSkmJihBbltzcl09ZnVuY3Rpb24gYm8oQ3Qpe2NvbnN0IHV0PXt9LEp0PU9iamVjdC5r''@;'; put 'put ''ZXlzKEN0KTtsZXQgY247Y29uc3QgQW49SnQubGVuZ3RoO2xldCBLbjtmb3IoY249MDtjbjxBbjtjbisrKUtuPUp0W2NuXSx1dFtLbl09Q3RbS25dO3JldHVybiB1dH0oQW5bc3JdKSksIXVuKX1pZih5bi5pc0Zvcm1EYXRhKEN0KSYmeW4uaXNGdW5jdGlvbihDdC5lbnRyaWVzKSl7Y29uc3Qg''@;'; put 'put ''SnQ9e307cmV0dXJuIHluLmZvckVhY2hFbnRyeShDdCwoY24sQW4pPT57dXQoZnVuY3Rpb24gSXIoQ3Qpe3JldHVybiB5bi5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQ3QpLm1hcCh1dD0+IltdIj09PXV0WzBdPyIiOnV0WzFdfHx1dFswXSl9KGNuKSxBbixKdCwwKX0pLEp0fXJldHVybiBu''@;'; put 'put ''dWxsfWNvbnN0IEZsPShDdCx1dCk9Pm51bGwhPUN0JiZ5bi5oYXNPd25Qcm9wKEN0LHV0KT9DdFt1dF06dm9pZCAwLGl1PXt0cmFuc2l0aW9uYWw6VmksYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHV0LEp0KXtjb25zdCBjbj1KdC5n''@;'; put 'put ''ZXRDb250ZW50VHlwZSgpfHwiIixBbj1jbi5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsS249eW4uaXNPYmplY3QodXQpO2lmKEtuJiZ5bi5pc0hUTUxGb3JtKHV0KSYmKHV0PW5ldyBGb3JtRGF0YSh1dCkpLHluLmlzRm9ybURhdGEodXQpKXJldHVybiBBbj9KU09OLnN0cmluZ2lm''@;'; put 'put ''eShYYSh1dCkpOnV0O2lmKHluLmlzQXJyYXlCdWZmZXIodXQpfHx5bi5pc0J1ZmZlcih1dCl8fHluLmlzU3RyZWFtKHV0KXx8eW4uaXNGaWxlKHV0KXx8eW4uaXNCbG9iKHV0KXx8eW4uaXNSZWFkYWJsZVN0cmVhbSh1dCkpcmV0dXJuIHV0O2lmKHluLmlzQXJyYXlCdWZmZXJWaWV3KHV0KSly''@;'; put 'put ''ZXR1cm4gdXQuYnVmZmVyO2lmKHluLmlzVVJMU2VhcmNoUGFyYW1zKHV0KSlyZXR1cm4gSnQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdXQudG9TdHJpbmcoKTtsZXQgdW47aWYoS24pe2NvbnN0IHlpPUZsKHRo''@;'; put 'put ''aXMsImZvcm1TZXJpYWxpemVyIik7aWYoY24uaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGZ1bmN0aW9uIFhpKEN0LHV0KXtyZXR1cm4gYW4oQ3QsbmV3IG9hLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLHt2aXNpdG9yOmZ1bmN0aW9uKEp0''@;'; put 'put ''LGNuLEFuLEtuKXtyZXR1cm4gb2EuaXNOb2RlJiZ5bi5pc0J1ZmZlcihKdCk/KHRoaXMuYXBwZW5kKGNuLEp0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOktuLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sLi4udXR9KX0odXQseWkpLnRvU3RyaW5nKCk7aWYoKHVuPXlu''@;'; put 'put ''LmlzRmlsZUxpc3QodXQpKXx8Y24uaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtjb25zdCB6bj1GbCh0aGlzLCJlbnYiKSxEaT16biYmem4uRm9ybURhdGE7cmV0dXJuIGFuKHVuP3siZmlsZXNbXSI6dXR9OnV0LERpJiZuZXcgRGkseWkpfX1yZXR1cm4gS258fEFuPyhKdC5z''@;'; put 'put ''ZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGZ1bmN0aW9uIEkxKEN0LHV0LEp0KXtpZih5bi5pc1N0cmluZyhDdCkpdHJ5e3JldHVybih1dHx8SlNPTi5wYXJzZSkoQ3QpLHluLnRyaW0oQ3QpfWNhdGNoKGNuKXtpZigiU3ludGF4RXJyb3IiIT09Y24ubmFtZSl0aHJvdyBj''@;'; put 'put ''bn1yZXR1cm4oSnR8fEpTT04uc3RyaW5naWZ5KShDdCl9KHV0KSk6dXR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odXQpe2NvbnN0IEp0PUZsKHRoaXMsInRyYW5zaXRpb25hbCIpfHxpdS50cmFuc2l0aW9uYWwsY249SnQmJkp0LmZvcmNlZEpTT05QYXJzaW5nLEFuPUZsKHRoaXMs''@;'; put 'put ''InJlc3BvbnNlVHlwZSIpLEtuPSJqc29uIj09PUFuO2lmKHluLmlzUmVzcG9uc2UodXQpfHx5bi5pc1JlYWRhYmxlU3RyZWFtKHV0KSlyZXR1cm4gdXQ7aWYodXQmJnluLmlzU3RyaW5nKHV0KSYmKGNuJiYhQW58fEtuKSl7Y29uc3QgdW49IShKdCYmSnQuc2lsZW50SlNPTlBhcnNpbmcpJiZL''@;'; put 'put ''bjt0cnl7cmV0dXJuIEpTT04ucGFyc2UodXQsRmwodGhpcywicGFyc2VSZXZpdmVyIikpfWNhdGNoKHlpKXtpZih1bil0aHJvdyJTeW50YXhFcnJvciI9PT15aS5uYW1lP3duLmZyb20oeWksd24uRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsRmwodGhpcywicmVzcG9uc2UiKSk6eWl9fXJl''@;'; put 'put ''dHVybiB1dH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6b2EuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOm9hLmNsYXNzZXMu''@;'; put 'put ''QmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odXQpe3JldHVybiB1dD49MjAwJiZ1dDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtmdW5jdGlvbiB5MChDdCx1dCl7Y29u''@;'; put 'put ''c3QgSnQ9dGhpc3x8aXUsY249dXR8fEp0LEFuPXl0LmZyb20oY24uaGVhZGVycyk7bGV0IEtuPWNuLmRhdGE7cmV0dXJuIHluLmZvckVhY2goQ3QsZnVuY3Rpb24odW4pe0tuPXVuLmNhbGwoSnQsS24sQW4ubm9ybWFsaXplKCksdXQ/dXQuc3RhdHVzOnZvaWQgMCl9KSxBbi5ub3JtYWxpemUo''@;'; put 'put ''KSxLbn1mdW5jdGlvbiBvcihDdCl7cmV0dXJuISghQ3R8fCFDdC5fX0NBTkNFTF9fKX15bi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsInF1ZXJ5Il0sQ3Q9PntpdS5oZWFkZXJzW0N0XT17fX0pO2NsYXNzIERhIGV4dGVuZHMgd257Y29uc3Ry''@;'; put 'put ''dWN0b3IodXQsSnQsY24pe3N1cGVyKHV0Pz8iY2FuY2VsZWQiLHduLkVSUl9DQU5DRUxFRCxKdCxjbiksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIix0aGlzLl9fQ0FOQ0VMX189ITB9fWZ1bmN0aW9uIG5pKEN0LHV0LEp0KXtjb25zdCBjbj1KdC5jb25maWcudmFsaWRhdGVTdGF0dXM7SnQu''@;'; put 'put ''c3RhdHVzJiZjbiYmIWNuKEp0LnN0YXR1cyk/dXQobmV3IHduKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSnQuc3RhdHVzLEp0LnN0YXR1cz49NDAwJiZKdC5zdGF0dXM8NTAwP3duLkVSUl9CQURfUkVRVUVTVDp3bi5FUlJfQkFEX1JFU1BPTlNFLEp0LmNvbmZpZyxKdC5y''@;'; put 'put ''ZXF1ZXN0LEp0KSk6Q3QoSnQpfWNvbnN0ICRvPShDdCx1dCxKdD0zKT0+e2xldCBjbj0wO2NvbnN0IEFuPWZ1bmN0aW9uIEpyKEN0LHV0KXtDdD1DdHx8MTA7Y29uc3QgSnQ9bmV3IEFycmF5KEN0KSxjbj1uZXcgQXJyYXkoQ3QpO2xldCBzcixBbj0wLEtuPTA7cmV0dXJuIHV0PXZvaWQgMCE9''@;'; put 'put ''PXV0P3V0OjFlMyxmdW5jdGlvbih5aSl7Y29uc3Qgem49RGF0ZS5ub3coKSxEaT1jbltLbl07c3J8fChzcj16biksSnRbQW5dPXlpLGNuW0FuXT16bjtsZXQgcG89S24sS289MDtmb3IoO3BvIT09QW47KUtvKz1KdFtwbysrXSxwbyU9Q3Q7aWYoQW49KEFuKzEpJUN0LEFuPT09S24mJihLbj0o''@;'; put 'put ''S24rMSklQ3QpLHpuLXNyPHV0KXJldHVybjtjb25zdCBQYT1EaSYmem4tRGk7cmV0dXJuIFBhP01hdGgucm91bmQoMWUzKktvL1BhKTp2b2lkIDB9fSg1MCwyNTApO3JldHVybiBmdW5jdGlvbiBGMChDdCx1dCl7bGV0IEFuLEtuLEp0PTAsY249MWUzL3V0O2NvbnN0IHNyPSh6bixEaT1EYXRl''@;'; put 'put ''Lm5vdygpKT0+e0p0PURpLEFuPW51bGwsS24mJihjbGVhclRpbWVvdXQoS24pLEtuPW51bGwpLEN0KC4uLnpuKX07cmV0dXJuWyguLi56bik9Pntjb25zdCBEaT1EYXRlLm5vdygpLHBvPURpLUp0O3BvPj1jbj9zcih6bixEaSk6KEFuPXpuLEtufHwoS249c2V0VGltZW91dCgoKT0+e0tuPW51''@;'; put 'put ''bGwsc3IoQW4pfSxjbi1wbykpKX0sKCk9PkFuJiZzcihBbildfShLbj0+e2NvbnN0IHNyPUtuLmxvYWRlZCx1bj1Lbi5sZW5ndGhDb21wdXRhYmxlP0tuLnRvdGFsOnZvaWQgMCx5aT1udWxsIT11bj9NYXRoLm1pbihzcix1bik6c3Isem49TWF0aC5tYXgoMCx5aS1jbiksRGk9QW4oem4pO2Nu''@;'; put 'put ''PU1hdGgubWF4KGNuLHlpKSxDdCh7bG9hZGVkOnlpLHRvdGFsOnVuLHByb2dyZXNzOnVuP3lpL3VuOnZvaWQgMCxieXRlczp6bixyYXRlOkRpfHx2b2lkIDAsZXN0aW1hdGVkOkRpJiZ1bj8odW4teWkpL0RpOnZvaWQgMCxldmVudDpLbixsZW5ndGhDb21wdXRhYmxlOm51bGwhPXVuLFt1dD8i''@;'; put 'put ''ZG93bmxvYWQiOiJ1cGxvYWQiXTohMH0pfSxKdCl9LEV1PShDdCx1dCk9Pntjb25zdCBKdD1udWxsIT1DdDtyZXR1cm5bY249PnV0WzBdKHtsZW5ndGhDb21wdXRhYmxlOkp0LHRvdGFsOkN0LGxvYWRlZDpjbn0pLHV0WzFdXX0senI9Q3Q9PiguLi51dCk9PnluLmFzYXAoKCk9PkN0KC4uLnV0''@;'; put 'put ''KSk7dmFyIEsyPW9hLmhhc1N0YW5kYXJkQnJvd3NlckVudj8oKEN0LHV0KT0+SnQ9PihKdD1uZXcgVVJMKEp0LG9hLm9yaWdpbiksQ3QucHJvdG9jb2w9PT1KdC5wcm90b2NvbCYmQ3QuaG9zdD09PUp0Lmhvc3QmJih1dHx8Q3QucG9ydD09PUp0LnBvcnQpKSkobmV3IFVSTChvYS5vcmlnaW4p''@;'; put 'put ''LG9hLm5hdmlnYXRvciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChvYS5uYXZpZ2F0b3IudXNlckFnZW50KSk6KCk9PiEwLEtoPW9hLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQ3QsdXQsSnQsY24sQW4sS24sc3Ipe2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2NvbnN0IHVu''@;'; put 'put ''PVtgJHtDdH09JHtlbmNvZGVVUklDb21wb25lbnQodXQpfWBdO3luLmlzTnVtYmVyKEp0KSYmdW4ucHVzaChgZXhwaXJlcz0ke25ldyBEYXRlKEp0KS50b1VUQ1N0cmluZygpfWApLHluLmlzU3RyaW5nKGNuKSYmdW4ucHVzaChgcGF0aD0ke2NufWApLHluLmlzU3RyaW5nKEFuKSYmdW4ucHVz''@;'; put 'put ''aChgZG9tYWluPSR7QW59YCksITA9PT1LbiYmdW4ucHVzaCgic2VjdXJlIikseW4uaXNTdHJpbmcoc3IpJiZ1bi5wdXNoKGBTYW1lU2l0ZT0ke3NyfWApLGRvY3VtZW50LmNvb2tpZT11bi5qb2luKCI7ICIpfSxyZWFkKEN0KXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0IHV0PWRvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyIpO2ZvcihsZXQgSnQ9MDtKdDx1dC5sZW5ndGg7SnQrKyl7Y29uc3QgY249dXRbSnRdLnJlcGxhY2UoL15ccysvLCIiKSxBbj1jbi5pbmRleE9mKCI9Iik7aWYoLTEhPT1BbiYmY24uc2xpY2UoMCxBbik9PT1DdClyZXR1cm4gZGVjb2Rl''@;'; put 'put ''VVJJQ29tcG9uZW50KGNuLnNsaWNlKEFuKzEpKX1yZXR1cm4gbnVsbH0scmVtb3ZlKEN0KXt0aGlzLndyaXRlKEN0LCIiLERhdGUubm93KCktODY0ZTUsIi8iKX19Ont3cml0ZSgpe30scmVhZDooKT0+bnVsbCxyZW1vdmUoKXt9fTtmdW5jdGlvbiBSbyhDdCx1dCxKdCl7bGV0IGNuPSFmdW5j''@;'; put 'put ''dGlvbiBkMyhDdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDdCYmL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChDdCl9KHV0KTtyZXR1cm4gQ3QmJihjbnx8ITE9PT1KdCk/ZnVuY3Rpb24gZmcoQ3QsdXQpe3JldHVybiB1dD9DdC5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIr''@;'; put 'put ''dXQucmVwbGFjZSgvXlwvKy8sIiIpOkN0fShDdCx1dCk6dXR9Y29uc3Qgb2M9Q3Q9PkN0IGluc3RhbmNlb2YgeXQ/ey4uLkN0fTpDdDtmdW5jdGlvbiBrcihDdCx1dCl7dXQ9dXR8fHt9O2NvbnN0IEp0PU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gY24oem4sRGkscG8sS28pe3JldHVy''@;'; put 'put ''biB5bi5pc1BsYWluT2JqZWN0KHpuKSYmeW4uaXNQbGFpbk9iamVjdChEaSk/eW4ubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6S299LHpuLERpKTp5bi5pc1BsYWluT2JqZWN0KERpKT95bi5tZXJnZSh7fSxEaSk6eW4uaXNBcnJheShEaSk/RGkuc2xpY2UoKTpEaX1mdW5jdGlvbiBBbih6bixEaSxw''@;'; put 'put ''byxLbyl7cmV0dXJuIHluLmlzVW5kZWZpbmVkKERpKT95bi5pc1VuZGVmaW5lZCh6bik/dm9pZCAwOmNuKHZvaWQgMCx6biwwLEtvKTpjbih6bixEaSwwLEtvKX1mdW5jdGlvbiBLbih6bixEaSl7aWYoIXluLmlzVW5kZWZpbmVkKERpKSlyZXR1cm4gY24odm9pZCAwLERpKX1mdW5jdGlvbiBz''@;'; put 'put ''cih6bixEaSl7cmV0dXJuIHluLmlzVW5kZWZpbmVkKERpKT95bi5pc1VuZGVmaW5lZCh6bik/dm9pZCAwOmNuKHZvaWQgMCx6bik6Y24odm9pZCAwLERpKX1mdW5jdGlvbiB1bih6bixEaSxwbyl7cmV0dXJuIHluLmhhc093blByb3AodXQscG8pP2NuKHpuLERpKTp5bi5oYXNPd25Qcm9wKEN0''@;'; put 'put ''LHBvKT9jbih2b2lkIDAsem4pOnZvaWQgMH1PYmplY3QuZGVmaW5lUHJvcGVydHkoSnQsImhhc093blByb3BlcnR5Iix7X19wcm90b19fOm51bGwsdmFsdWU6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0p''@;'; put 'put ''O2NvbnN0IHlpPXt1cmw6S24sbWV0aG9kOktuLGRhdGE6S24sYmFzZVVSTDpzcix0cmFuc2Zvcm1SZXF1ZXN0OnNyLHRyYW5zZm9ybVJlc3BvbnNlOnNyLHBhcmFtc1NlcmlhbGl6ZXI6c3IsdGltZW91dDpzcix0aW1lb3V0TWVzc2FnZTpzcix3aXRoQ3JlZGVudGlhbHM6c3Isd2l0aFhTUkZU''@;'; put 'put ''b2tlbjpzcixhZGFwdGVyOnNyLHJlc3BvbnNlVHlwZTpzcix4c3JmQ29va2llTmFtZTpzcix4c3JmSGVhZGVyTmFtZTpzcixvblVwbG9hZFByb2dyZXNzOnNyLG9uRG93bmxvYWRQcm9ncmVzczpzcixkZWNvbXByZXNzOnNyLG1heENvbnRlbnRMZW5ndGg6c3IsbWF4Qm9keUxlbmd0aDpzcixi''@;'; put 'put ''ZWZvcmVSZWRpcmVjdDpzcix0cmFuc3BvcnQ6c3IsaHR0cEFnZW50OnNyLGh0dHBzQWdlbnQ6c3IsY2FuY2VsVG9rZW46c3Isc29ja2V0UGF0aDpzcixhbGxvd2VkU29ja2V0UGF0aHM6c3IscmVzcG9uc2VFbmNvZGluZzpzcix2YWxpZGF0ZVN0YXR1czp1bixoZWFkZXJzOih6bixEaSxwbyk9''@;'; put 'put ''PkFuKG9jKHpuKSxvYyhEaSksMCwhMCl9O3JldHVybiB5bi5mb3JFYWNoKE9iamVjdC5rZXlzKHsuLi5DdCwuLi51dH0pLGZ1bmN0aW9uKERpKXtpZigiX19wcm90b19fIj09PURpfHwiY29uc3RydWN0b3IiPT09RGl8fCJwcm90b3R5cGUiPT09RGkpcmV0dXJuO2NvbnN0IHBvPXluLmhhc093''@;'; put 'put ''blByb3AoeWksRGkpP3lpW0RpXTpBbixXbz1wbyh5bi5oYXNPd25Qcm9wKEN0LERpKT9DdFtEaV06dm9pZCAwLHluLmhhc093blByb3AodXQsRGkpP3V0W0RpXTp2b2lkIDAsRGkpO3luLmlzVW5kZWZpbmVkKFdvKSYmcG8hPT11bnx8KEp0W0RpXT1Xbyl9KSxKdH1jb25zdCBwZz1bImNvbnRl''@;'; put 'put ''bnQtdHlwZSIsImNvbnRlbnQtbGVuZ3RoIl07dmFyIFZjPUN0PT57Y29uc3QgdXQ9a3Ioe30sQ3QpLEp0PUtvPT55bi5oYXNPd25Qcm9wKHV0LEtvKT91dFtLb106dm9pZCAwLGNuPUp0KCJkYXRhIik7bGV0IEFuPUp0KCJ3aXRoWFNSRlRva2VuIik7Y29uc3QgS249SnQoInhzcmZIZWFkZXJO''@;'; put 'put ''YW1lIiksc3I9SnQoInhzcmZDb29raWVOYW1lIik7bGV0IHVuPUp0KCJoZWFkZXJzIik7Y29uc3QgeWk9SnQoImF1dGgiKSx6bj1KdCgiYmFzZVVSTCIpLERpPUp0KCJhbGxvd0Fic29sdXRlVXJscyIpLHBvPUp0KCJ1cmwiKTtpZih1dC5oZWFkZXJzPXVuPXl0LmZyb20odW4pLHV0LnVybD0k''@;'; put 'put ''aShSbyh6bixwbyxEaSksQ3QucGFyYW1zLEN0LnBhcmFtc1NlcmlhbGl6ZXIpLHlpJiZ1bi5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKHlpLnVzZXJuYW1lfHwiIikrIjoiKyh5aS5wYXNzd29yZD8oQ3Q9PmVuY29kZVVSSUNvbXBvbmVudChDdCkucmVwbGFjZSgvJShbMC05''@;'; put 'put ''QS1GXXsyfSkvZ2ksKHV0LEp0KT0+U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChKdCwxNikpKSkoeWkucGFzc3dvcmQpOiIiKSkpLHluLmlzRm9ybURhdGEoY24pJiYob2EuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxvYS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY/dW4uc2V0''@;'; put 'put ''Q29udGVudFR5cGUodm9pZCAwKTp5bi5pc0Z1bmN0aW9uKGNuLmdldEhlYWRlcnMpJiZmdW5jdGlvbiBfYyhDdCx1dCxKdCl7ImNvbnRlbnQtb25seSI9PT1KdD9PYmplY3QuZW50cmllcyh1dCkuZm9yRWFjaCgoW2NuLEFuXSk9PntwZy5pbmNsdWRlcyhjbi50b0xvd2VyQ2FzZSgpKSYmQ3Qu''@;'; put 'put ''c2V0KGNuLEFuKX0pOkN0LnNldCh1dCl9KHVuLGNuLmdldEhlYWRlcnMoKSxKdCgiZm9ybURhdGFIZWFkZXJQb2xpY3kiKSkpLG9hLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHluLmlzRnVuY3Rpb24oQW4pJiYoQW49QW4odXQpKSwhMD09PUFufHxudWxsPT1BbiYmSzIodXQudXJsKSkpe2Nv''@;'; put 'put ''bnN0IFBhPUtuJiZzciYmS2gucmVhZChzcik7UGEmJnVuLnNldChLbixQYSl9cmV0dXJuIHV0fSxYaD10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiJiZmdW5jdGlvbihDdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEp0LGNuKXtjb25zdCBBbj1WYyhDdCk7bGV0IEtuPUFuLmRhdGE7''@;'; put 'put ''Y29uc3Qgc3I9eXQuZnJvbShBbi5oZWFkZXJzKS5ub3JtYWxpemUoKTtsZXQgRGkscG8sS28sUGEsV28se3Jlc3BvbnNlVHlwZTp1bixvblVwbG9hZFByb2dyZXNzOnlpLG9uRG93bmxvYWRQcm9ncmVzczp6bn09QW47ZnVuY3Rpb24gQmEoKXtQYSYmUGEoKSxXbyYmV28oKSxBbi5jYW5jZWxU''@;'; put 'put ''b2tlbiYmQW4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoRGkpLEFuLnNpZ25hbCYmQW4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixEaSl9bGV0IGdhPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiB4YSgpe2lmKCFnYSlyZXR1cm47Y29uc3Qgd3I9eXQuZnJvbSgiZ2V0''@;'; put 'put ''QWxsUmVzcG9uc2VIZWFkZXJzImluIGdhJiZnYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7bmkoZnVuY3Rpb24obGMpe0p0KGxjKSxCYSgpfSxmdW5jdGlvbihsYyl7Y24obGMpLEJhKCl9LHtkYXRhOnVuJiYidGV4dCIhPT11biYmImpzb24iIT09dW4/Z2EucmVzcG9uc2U6Z2EucmVzcG9u''@;'; put 'put ''c2VUZXh0LHN0YXR1czpnYS5zdGF0dXMsc3RhdHVzVGV4dDpnYS5zdGF0dXNUZXh0LGhlYWRlcnM6d3IsY29uZmlnOkN0LHJlcXVlc3Q6Z2F9KSxnYT1udWxsfWdhLm9wZW4oQW4ubWV0aG9kLnRvVXBwZXJDYXNlKCksQW4udXJsLCEwKSxnYS50aW1lb3V0PUFuLnRpbWVvdXQsIm9ubG9hZGVu''@;'; put 'put ''ZCJpbiBnYT9nYS5vbmxvYWRlbmQ9eGE6Z2Eub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWdhfHw0IT09Z2EucmVhZHlTdGF0ZXx8MD09PWdhLnN0YXR1cyYmKCFnYS5yZXNwb25zZVVSTHx8IWdhLnJlc3BvbnNlVVJMLnN0YXJ0c1dpdGgoImZpbGU6IikpfHxzZXRUaW1lb3V0KHhh''@;'; put 'put ''KX0sZ2Eub25hYm9ydD1mdW5jdGlvbigpe2dhJiYoY24obmV3IHduKCJSZXF1ZXN0IGFib3J0ZWQiLHduLkVDT05OQUJPUlRFRCxDdCxnYSkpLEJhKCksZ2E9bnVsbCl9LGdhLm9uZXJyb3I9ZnVuY3Rpb24oSmkpe2NvbnN0IG1kPW5ldyB3bihKaSYmSmkubWVzc2FnZT9KaS5tZXNzYWdlOiJO''@;'; put 'put ''ZXR3b3JrIEVycm9yIix3bi5FUlJfTkVUV09SSyxDdCxnYSk7bWQuZXZlbnQ9Sml8fG51bGwsY24obWQpLEJhKCksZ2E9bnVsbH0sZ2Eub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IEppPUFuLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQg''@;'; put 'put ''ZXhjZWVkZWQiO0FuLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihKaT1Bbi50aW1lb3V0RXJyb3JNZXNzYWdlKSxjbihuZXcgd24oSmksKEFuLnRyYW5zaXRpb25hbHx8VmkpLmNsYXJpZnlUaW1lb3V0RXJyb3I/d24uRVRJTUVET1VUOnduLkVDT05OQUJPUlRFRCxDdCxnYSkpLEJhKCksZ2E9bnVs''@;'; put 'put ''bH0sdm9pZCAwPT09S24mJnNyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGdhJiZ5bi5mb3JFYWNoKHNyLnRvSlNPTigpLGZ1bmN0aW9uKEppLFNhKXtnYS5zZXRSZXF1ZXN0SGVhZGVyKFNhLEppKX0pLHluLmlzVW5kZWZpbmVkKEFuLndpdGhDcmVkZW50aWFs''@;'; put 'put ''cyl8fChnYS53aXRoQ3JlZGVudGlhbHM9ISFBbi53aXRoQ3JlZGVudGlhbHMpLHVuJiYianNvbiIhPT11biYmKGdhLnJlc3BvbnNlVHlwZT1Bbi5yZXNwb25zZVR5cGUpLHpuJiYoW0tvLFdvXT0kbyh6biwhMCksZ2EuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEtvKSkseWkmJmdhLnVw''@;'; put 'put ''bG9hZCYmKFtwbyxQYV09JG8oeWkpLGdhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscG8pLGdhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixQYSkpLChBbi5jYW5jZWxUb2tlbnx8QW4uc2lnbmFsKSYmKERpPXdyPT57Z2EmJihjbighd3J8fHdyLnR5cGU/''@;'; put 'put ''bmV3IERhKG51bGwsQ3QsZ2EpOndyKSxnYS5hYm9ydCgpLEJhKCksZ2E9bnVsbCl9LEFuLmNhbmNlbFRva2VuJiZBbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoRGkpLEFuLnNpZ25hbCYmKEFuLnNpZ25hbC5hYm9ydGVkP0RpKCk6QW4uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixE''@;'; put 'put ''aSkpKTtjb25zdCBLcj1mdW5jdGlvbiBPdChDdCl7Y29uc3QgdXQ9L14oWy0rXHddezEsMjV9KTooPzpcL1wvKT8vLmV4ZWMoQ3QpO3JldHVybiB1dCYmdXRbMV18fCIifShBbi51cmwpOyFLcnx8b2EucHJvdG9jb2xzLmluY2x1ZGVzKEtyKT9nYS5zZW5kKEtufHxudWxsKTpjbihuZXcgd24o''@;'; put 'put ''IlVuc3VwcG9ydGVkIHByb3RvY29sICIrS3IrIjoiLHduLkVSUl9CQURfUkVRVUVTVCxDdCkpfSl9O2NvbnN0IFd1PShDdCx1dCk9Pntjb25zdHtsZW5ndGg6SnR9PUN0PUN0P0N0LmZpbHRlcihCb29sZWFuKTpbXTtpZih1dHx8SnQpe2xldCBBbixjbj1uZXcgQWJvcnRDb250cm9sbGVyO2Nv''@;'; put 'put ''bnN0IEtuPWZ1bmN0aW9uKHpuKXtpZighQW4pe0FuPSEwLHVuKCk7Y29uc3QgRGk9em4gaW5zdGFuY2VvZiBFcnJvcj96bjp0aGlzLnJlYXNvbjtjbi5hYm9ydChEaSBpbnN0YW5jZW9mIHduP0RpOm5ldyBEYShEaSBpbnN0YW5jZW9mIEVycm9yP0RpLm1lc3NhZ2U6RGkpKX19O2xldCBzcj11''@;'; put 'put ''dCYmc2V0VGltZW91dCgoKT0+e3NyPW51bGwsS24obmV3IHduKGB0aW1lb3V0IG9mICR7dXR9bXMgZXhjZWVkZWRgLHduLkVUSU1FRE9VVCkpfSx1dCk7Y29uc3QgdW49KCk9PntDdCYmKHNyJiZjbGVhclRpbWVvdXQoc3IpLHNyPW51bGwsQ3QuZm9yRWFjaCh6bj0+e3puLnVuc3Vic2NyaWJl''@;'; put 'put ''P3puLnVuc3Vic2NyaWJlKEtuKTp6bi5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsS24pfSksQ3Q9bnVsbCl9O0N0LmZvckVhY2goem49PnpuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixLbikpO2NvbnN0e3NpZ25hbDp5aX09Y247cmV0dXJuIHlpLnVuc3Vic2NyaWJlPSgpPT55bi5h''@;'; put 'put ''c2FwKHVuKSx5aX19LFR1PWZ1bmN0aW9uKihDdCx1dCl7bGV0IEp0PUN0LmJ5dGVMZW5ndGg7aWYoSnQ8dXQpcmV0dXJuIHZvaWQoeWllbGQgQ3QpO2xldCBBbixjbj0wO2Zvcig7Y248SnQ7KUFuPWNuK3V0LHlpZWxkIEN0LnNsaWNlKGNuLEFuKSxjbj1Bbn0sUjE9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Q3Q9X3dyYXBBc3luY0dlbmVyYXRvcihmdW5jdGlvbioodXQsSnQpe3ZhciBLbixjbj0hMSxBbj0hMTt0cnl7Zm9yKHZhciB1bixzcj1fYXN5bmNJdGVyYXRvcihyMSh1dCkpO2NuPSEodW49eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3Ioc3IubmV4dCgpKSkuZG9uZTtjbj0hMSl7Y29uc3Qg''@;'; put 'put ''eWk9dW4udmFsdWU7eWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoVHUoeWksSnQpKSxfYXdhaXRBc3luY0dlbmVyYXRvcil9fWNhdGNoKHlpKXtBbj0hMCxLbj15aX1maW5hbGx5e3RyeXtjbiYmbnVsbCE9c3IucmV0dXJuJiYoeWllbGQgX2F3YWl0QXN5bmNH''@;'; put 'put ''ZW5lcmF0b3Ioc3IucmV0dXJuKCkpKX1maW5hbGx5e2lmKEFuKXRocm93IEtufX19KTtyZXR1cm4gZnVuY3Rpb24oSnQsY24pe3JldHVybiBDdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHIxPWZ1bmN0aW9uKCl7dmFyIEN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKHV0KXtp''@;'; put 'put ''Zih1dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pcmV0dXJuIHZvaWQoeWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IodXQpLF9hd2FpdEFzeW5jR2VuZXJhdG9yKSk7Y29uc3QgSnQ9dXQuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7ZG9uZTpjbix2YWx1''@;'; put 'put ''ZTpBbn09eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IoSnQucmVhZCgpKTtpZihjbilicmVhazt5aWVsZCBBbn19ZmluYWxseXt5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihKdC5jYW5jZWwoKSl9fSk7cmV0dXJuIGZ1bmN0aW9uKEp0KXtyZXR1cm4gQ3QuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfX0oKSxxMj0oQ3QsdXQsSnQsY24pPT57Y29uc3QgQW49UjEoQ3QsdXQpO2xldCBzcixLbj0wLHVuPXlpPT57c3J8fChzcj0hMCxjbiYmY24oeWkpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7cHVsbDp5aT0+X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e2NvbnN0''@;'; put 'put ''e2RvbmU6em4sdmFsdWU6RGl9PXlpZWxkIEFuLm5leHQoKTtpZih6bilyZXR1cm4gdW4oKSx2b2lkIHlpLmNsb3NlKCk7aWYoSnQpe2xldCBLbz1Lbis9RGkuYnl0ZUxlbmd0aDtKdChLbyl9eWkuZW5xdWV1ZShuZXcgVWludDhBcnJheShEaSkpfWNhdGNoKHpuKXt0aHJvdyB1bih6biksem59''@;'; put 'put ''fSkoKSxjYW5jZWw6eWk9Pih1bih5aSksQW4ucmV0dXJuKCkpfSx7aGlnaFdhdGVyTWFyazoyfSl9LHtpc0Z1bmN0aW9uOllzfT15bixKMj0oQ3QsLi4udXQpPT57dHJ5e3JldHVybiEhQ3QoLi4udXQpfWNhdGNoe3JldHVybiExfX0sZ2c9Q3Q9Pntjb25zdCB1dD15bi5nbG9iYWw/P2dsb2Jh''@;'; put 'put ''bFRoaXMse1JlYWRhYmxlU3RyZWFtOkp0LFRleHRFbmNvZGVyOmNufT11dDtDdD15bi5tZXJnZS5jYWxsKHtza2lwVW5kZWZpbmVkOiEwfSx7UmVxdWVzdDp1dC5SZXF1ZXN0LFJlc3BvbnNlOnV0LlJlc3BvbnNlfSxDdCk7Y29uc3R7ZmV0Y2g6QW4sUmVxdWVzdDpLbixSZXNwb25zZTpzcn09''@;'; put 'put ''Q3QsdW49QW4/WXMoQW4pOiJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCx5aT1ZcyhLbiksem49WXMoc3IpO2lmKCF1bilyZXR1cm4hMTtjb25zdCBEaT11biYmWXMoSnQpLHBvPXVuJiYoImZ1bmN0aW9uIj09dHlwZW9mIGNuPyh4YT0+S3I9PnhhLmVuY29kZShLcikpKG5ldyBjbik6ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgeGE9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEtyKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeWllbGQgbmV3IEtuKEtyKS5hcnJheUJ1ZmZlcigpKX0pO3JldHVybiBmdW5jdGlvbihLcil7cmV0dXJuIHhhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLEtvPXlpJiZE''@;'; put 'put ''aSYmSjIoKCk9PntsZXQgeGE9ITE7Y29uc3QgS3I9bmV3IEtuKG9hLm9yaWdpbix7Ym9keTpuZXcgSnQsbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIHhhPSEwLCJoYWxmIn19KSx3cj1Lci5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIG51bGwhPUtyLmJvZHkm''@;'; put 'put ''JktyLmJvZHkuY2FuY2VsKCkseGEmJiF3cn0pLFBhPXpuJiZEaSYmSjIoKCk9PnluLmlzUmVhZGFibGVTdHJlYW0obmV3IHNyKCIiKS5ib2R5KSksV289e3N0cmVhbTpQYSYmKHhhPT54YS5ib2R5KX07dW4mJlsidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFt''@;'; put 'put ''Il0uZm9yRWFjaCh4YT0+eyFXb1t4YV0mJihXb1t4YV09KEtyLHdyKT0+e2xldCBKaT1LciYmS3JbeGFdO2lmKEppKXJldHVybiBKaS5jYWxsKEtyKTt0aHJvdyBuZXcgd24oYFJlc3BvbnNlIHR5cGUgJyR7eGF9JyBpcyBub3Qgc3VwcG9ydGVkYCx3bi5FUlJfTk9UX1NVUFBPUlQsd3IpfSl9''@;'; put 'put ''KTtjb25zdCBCYT1mdW5jdGlvbigpe3ZhciB4YT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooS3Ipe3JldHVybiBudWxsPT1Lcj8wOnluLmlzQmxvYihLcik/S3Iuc2l6ZTp5bi5pc1NwZWNDb21wbGlhbnRGb3JtKEtyKT8oeWllbGQgbmV3IEtuKG9hLm9yaWdpbix7bWV0aG9kOiJQT1NU''@;'; put 'put ''Iixib2R5OktyfSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDp5bi5pc0FycmF5QnVmZmVyVmlldyhLcil8fHluLmlzQXJyYXlCdWZmZXIoS3IpP0tyLmJ5dGVMZW5ndGg6KHluLmlzVVJMU2VhcmNoUGFyYW1zKEtyKSYmKEtyKz0iIikseW4uaXNTdHJpbmcoS3IpPyh5aWVsZCBwbyhLcikp''@;'; put 'put ''LmJ5dGVMZW5ndGg6dm9pZCAwKX0pO3JldHVybiBmdW5jdGlvbih3cil7cmV0dXJuIHhhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZ2E9ZnVuY3Rpb24oKXt2YXIgeGE9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEtyLHdyKXtyZXR1cm4geW4udG9GaW5pdGVOdW1iZXIoS3IuZ2V0''@;'; put 'put ''Q29udGVudExlbmd0aCgpKT8/QmEod3IpfSk7cmV0dXJuIGZ1bmN0aW9uKHdyLEppKXtyZXR1cm4geGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeGE9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEtyKXtsZXR7dXJsOndyLG1ldGhvZDpKaSxk''@;'; put 'put ''YXRhOlNhLHNpZ25hbDptZCxjYW5jZWxUb2tlbjpsYyx0aW1lb3V0OmVoLG9uRG93bmxvYWRQcm9ncmVzczpvMSxvblVwbG9hZFByb2dyZXNzOlEyLHJlc3BvbnNlVHlwZTpadSxoZWFkZXJzOmNjLHdpdGhDcmVkZW50aWFsczprYz0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpubSxtYXhD''@;'; put 'put ''b250ZW50TGVuZ3RoOkgwLG1heEJvZHlMZW5ndGg6dmR9PVZjKEtyKTtjb25zdCBFcz15bi5pc051bWJlcihIMCkmJkgwPi0xLG1nPXluLmlzTnVtYmVyKHZkKSYmdmQ+LTE7bGV0IHZnPUFufHxmZXRjaDtadT1adT8oWnUrIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldCBCYz1XdShbbWQs''@;'; put 'put ''bGMmJmxjLnRvQWJvcnRTaWduYWwoKV0sZWgpLHNsPW51bGw7Y29uc3QgWXU9QmMmJkJjLnVuc3Vic2NyaWJlJiYoKCk9PntCYy51bnN1YnNjcmliZSgpfSk7bGV0IG9vO3RyeXtpZihFcyYmInN0cmluZyI9PXR5cGVvZiB3ciYmd3Iuc3RhcnRzV2l0aCgiZGF0YToiKSYmZnVuY3Rpb24gZ2Qo''@;'; put 'put ''Q3Qpe2lmKCFDdHx8InN0cmluZyIhPXR5cGVvZiBDdHx8IUN0LnN0YXJ0c1dpdGgoImRhdGE6IikpcmV0dXJuIDA7Y29uc3QgdXQ9Q3QuaW5kZXhPZigiLCIpO2lmKHV0PDApcmV0dXJuIDA7Y29uc3QgSnQ9Q3Quc2xpY2UoNSx1dCksY249Q3Quc2xpY2UodXQrMSk7aWYoLztiYXNlNjQvaS50''@;'; put 'put ''ZXN0KEp0KSl7bGV0IHNyPWNuLmxlbmd0aDtjb25zdCB1bj1jbi5sZW5ndGg7Zm9yKGxldCBQYT0wO1BhPHVuO1BhKyspaWYoMzc9PT1jbi5jaGFyQ29kZUF0KFBhKSYmUGErMjx1bil7Y29uc3QgV289Y24uY2hhckNvZGVBdChQYSsxKSxCYT1jbi5jaGFyQ29kZUF0KFBhKzIpOyhXbz49NDgm''@;'; put 'put ''JldvPD01N3x8V28+PTY1JiZXbzw9NzB8fFdvPj05NyYmV288PTEwMikmJihCYT49NDgmJkJhPD01N3x8QmE+PTY1JiZCYTw9NzB8fEJhPj05NyYmQmE8PTEwMikmJihzci09MixQYSs9Mil9bGV0IHlpPTAsem49dW4tMTtjb25zdCBEaT1QYT0+UGE+PTImJjM3PT09Y24uY2hhckNvZGVBdChQ''@;'; put 'put ''YS0yKSYmNTE9PT1jbi5jaGFyQ29kZUF0KFBhLTEpJiYoNjg9PT1jbi5jaGFyQ29kZUF0KFBhKXx8MTAwPT09Y24uY2hhckNvZGVBdChQYSkpO3puPj0wJiYoNjE9PT1jbi5jaGFyQ29kZUF0KHpuKT8oeWkrKyx6bi0tKTpEaSh6bikmJih5aSsrLHpuLT0zKSksMT09PXlpJiZ6bj49MCYmKDYx''@;'; put 'put ''PT09Y24uY2hhckNvZGVBdCh6bil8fERpKHpuKSkmJnlpKys7Y29uc3QgS289MypNYXRoLmZsb29yKHNyLzQpLSh5aXx8MCk7cmV0dXJuIEtvPjA/S286MH1pZih0eXBlb2YgaDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBoLmJ5dGVMZW5ndGgpcmV0dXJuIGguYnl0ZUxlbmd0aChjbiwidXRm''@;'; put 'put ''OCIpO2xldCBLbj0wO2ZvcihsZXQgc3I9MCx1bj1jbi5sZW5ndGg7c3I8dW47c3IrKyl7Y29uc3QgeWk9Y24uY2hhckNvZGVBdChzcik7aWYoeWk8MTI4KUtuKz0xO2Vsc2UgaWYoeWk8MjA0OClLbis9MjtlbHNlIGlmKHlpPj01NTI5NiYmeWk8PTU2MzE5JiZzcisxPHVuKXtjb25zdCB6bj1j''@;'; put 'put ''bi5jaGFyQ29kZUF0KHNyKzEpO3puPj01NjMyMCYmem48PTU3MzQzPyhLbis9NCxzcisrKTpLbis9M31lbHNlIEtuKz0zfXJldHVybiBLbn0od3IpPkgwKXRocm93IG5ldyB3bigibWF4Q29udGVudExlbmd0aCBzaXplIG9mICIrSDArIiBleGNlZWRlZCIsd24uRVJSX0JBRF9SRVNQT05TRSxL''@;'; put 'put ''cixzbCk7aWYobWcmJiJnZXQiIT09SmkmJiJoZWFkIiE9PUppKXtjb25zdCBCcz15aWVsZCBnYShjYyxTYSk7aWYoIm51bWJlciI9PXR5cGVvZiBCcyYmaXNGaW5pdGUoQnMpJiZCcz52ZCl0aHJvdyBuZXcgd24oIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0''@;'; put 'put ''Iix3bi5FUlJfQkFEX1JFUVVFU1QsS3Isc2wpfWlmKFEyJiZLbyYmImdldCIhPT1KaSYmImhlYWQiIT09SmkmJjAhPT0ob289eWllbGQgZ2EoY2MsU2EpKSl7bGV0IE4wLEJzPW5ldyBLbih3cix7bWV0aG9kOiJQT1NUIixib2R5OlNhLGR1cGxleDoiaGFsZiJ9KTtpZih5bi5pc0Zvcm1EYXRh''@;'; put 'put ''KFNhKSYmKE4wPUJzLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJmNjLnNldENvbnRlbnRUeXBlKE4wKSxCcy5ib2R5KXtjb25zdFtNbyx5ZF09RXUob28sJG8oenIoUTIpKSk7U2E9cTIoQnMuYm9keSw2NTUzNixNbyx5ZCl9fXluLmlzU3RyaW5nKGtjKXx8KGtjPWtjPyJpbmNsdWRl''@;'; put 'put ''Ijoib21pdCIpO2NvbnN0IHRvPXlpJiYiY3JlZGVudGlhbHMiaW4gS24ucHJvdG90eXBlO2lmKHluLmlzRm9ybURhdGEoU2EpKXtjb25zdCBCcz1jYy5nZXRDb250ZW50VHlwZSgpO0JzJiYvXm11bHRpcGFydFwvZm9ybS1kYXRhL2kudGVzdChCcykmJiEvYm91bmRhcnk9L2kudGVzdChCcykm''@;'; put 'put ''JmNjLmRlbGV0ZSgiY29udGVudC10eXBlIil9Y2Muc2V0KCJVc2VyLUFnZW50IiwiYXhpb3MvMS4xNi4wIiwhMSk7Y29uc3QgcWg9ey4uLm5tLHNpZ25hbDpCYyxtZXRob2Q6SmkudG9VcHBlckNhc2UoKSxoZWFkZXJzOmNjLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6U2EsZHVwbGV4OiJo''@;'; put 'put ''YWxmIixjcmVkZW50aWFsczp0bz9rYzp2b2lkIDB9O3NsPXlpJiZuZXcgS24od3IscWgpO2xldCBzMT15aWVsZCB5aT92ZyhzbCxubSk6dmcod3IscWgpO2lmKEVzKXtjb25zdCBCcz15bi50b0Zpbml0ZU51bWJlcihzMS5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSk7aWYobnVsbCE9''@;'; put 'put ''QnMmJkJzPkgwKXRocm93IG5ldyB3bigibWF4Q29udGVudExlbmd0aCBzaXplIG9mICIrSDArIiBleGNlZWRlZCIsd24uRVJSX0JBRF9SRVNQT05TRSxLcixzbCl9Y29uc3QgR3U9UGEmJigic3RyZWFtIj09PVp1fHwicmVzcG9uc2UiPT09WnUpO2lmKFBhJiZzMS5ib2R5JiYobzF8fEVzfHxH''@;'; put 'put ''dSYmWXUpKXtjb25zdCBCcz17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaCh0aD0+e0JzW3RoXT1zMVt0aF19KTtjb25zdCBOMD15bi50b0Zpbml0ZU51bWJlcihzMS5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW01vLHlkXT1vMSYmRXUoTjAsJG8o''@;'; put 'put ''enIobzEpLCEwKSl8fFtdO2xldCBMcD0wO3MxPW5ldyBzcihxMihzMS5ib2R5LDY1NTM2LHRoPT57aWYoRXMmJihMcD10aCxMcD5IMCkpdGhyb3cgbmV3IHduKCJtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgIitIMCsiIGV4Y2VlZGVkIix3bi5FUlJfQkFEX1JFU1BPTlNFLEtyLHNsKTtNbyYm''@;'; put 'put ''TW8odGgpfSwoKT0+e3lkJiZ5ZCgpLFl1JiZZdSgpfSksQnMpfVp1PVp1fHwidGV4dCI7bGV0ICR1PXlpZWxkIFdvW3luLmZpbmRLZXkoV28sWnUpfHwidGV4dCJdKHMxLEtyKTtpZihFcyYmIVBhJiYhR3Upe2xldCBCcztpZihudWxsIT0kdSYmKCJudW1iZXIiPT10eXBlb2YgJHUuYnl0ZUxl''@;'; put 'put ''bmd0aD9Ccz0kdS5ieXRlTGVuZ3RoOiJudW1iZXIiPT10eXBlb2YgJHUuc2l6ZT9Ccz0kdS5zaXplOiJzdHJpbmciPT10eXBlb2YgJHUmJihCcz0iZnVuY3Rpb24iPT10eXBlb2YgY24/KG5ldyBjbikuZW5jb2RlKCR1KS5ieXRlTGVuZ3RoOiR1Lmxlbmd0aCkpLCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''QnMmJkJzPkgwKXRocm93IG5ldyB3bigibWF4Q29udGVudExlbmd0aCBzaXplIG9mICIrSDArIiBleGNlZWRlZCIsd24uRVJSX0JBRF9SRVNQT05TRSxLcixzbCl9cmV0dXJuIUd1JiZZdSYmWXUoKSx5aWVsZCBuZXcgUHJvbWlzZSgoQnMsTjApPT57bmkoQnMsTjAse2RhdGE6JHUsaGVhZGVy''@;'; put 'put ''czp5dC5mcm9tKHMxLmhlYWRlcnMpLHN0YXR1czpzMS5zdGF0dXMsc3RhdHVzVGV4dDpzMS5zdGF0dXNUZXh0LGNvbmZpZzpLcixyZXF1ZXN0OnNsfSl9KX1jYXRjaCh0byl7aWYoWXUmJll1KCksQmMmJkJjLmFib3J0ZWQmJkJjLnJlYXNvbiBpbnN0YW5jZW9mIHduKXtjb25zdCBxaD1CYy5y''@;'; put 'put ''ZWFzb247dGhyb3cgcWguY29uZmlnPUtyLHNsJiYocWgucmVxdWVzdD1zbCksdG8hPT1xaCYmKHFoLmNhdXNlPXRvKSxxaH10aHJvdyB0byYmIlR5cGVFcnJvciI9PT10by5uYW1lJiYvTG9hZCBmYWlsZWR8ZmV0Y2gvaS50ZXN0KHRvLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHduKCJO''@;'; put 'put ''ZXR3b3JrIEVycm9yIix3bi5FUlJfTkVUV09SSyxLcixzbCx0byYmdG8ucmVzcG9uc2UpLHtjYXVzZTp0by5jYXVzZXx8dG99KTp3bi5mcm9tKHRvLHRvJiZ0by5jb2RlLEtyLHNsLHRvJiZ0by5yZXNwb25zZSl9fSk7cmV0dXJuIGZ1bmN0aW9uKEtyKXtyZXR1cm4geGEuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfX0oKX0sdXM9bmV3IE1hcCxDbj1DdD0+e2xldCB1dD1DdCYmQ3QuZW52fHx7fTtjb25zdHtmZXRjaDpKdCxSZXF1ZXN0OmNuLFJlc3BvbnNlOkFufT11dCxLbj1bY24sQW4sSnRdO2xldCB5aSx6bix1bj1Lbi5sZW5ndGgsRGk9dXM7Zm9yKDt1bi0tOyl5aT1Lblt1bl0sem49''@;'; put 'put ''RGkuZ2V0KHlpKSx2b2lkIDA9PT16biYmRGkuc2V0KHlpLHpuPXVuP25ldyBNYXA6Z2codXQpKSxEaT16bjtyZXR1cm4gem59O0NuKCk7Y29uc3QgcW49e2h0dHA6bnVsbCx4aHI6WGgsZmV0Y2g6e2dldDpDbn19O3luLmZvckVhY2gocW4sKEN0LHV0KT0+e2lmKEN0KXt0cnl7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KEN0LCJuYW1lIix7X19wcm90b19fOm51bGwsdmFsdWU6dXR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEN0LCJhZGFwdGVyTmFtZSIse19fcHJvdG9fXzpudWxsLHZhbHVlOnV0fSl9fSk7Y29uc3QgZ2k9Q3Q9PmAtICR7Q3R9YCxBYT1DdD0+eW4uaXNGdW5j''@;'; put 'put ''dGlvbihDdCl8fG51bGw9PT1DdHx8ITE9PT1DdDt2YXIgcmFfZ2V0QWRhcHRlcj1mdW5jdGlvbiBicyhDdCx1dCl7Q3Q9eW4uaXNBcnJheShDdCk/Q3Q6W0N0XTtjb25zdHtsZW5ndGg6SnR9PUN0O2xldCBjbixBbjtjb25zdCBLbj17fTtmb3IobGV0IHNyPTA7c3I8SnQ7c3IrKyl7bGV0IHVu''@;'; put 'put ''O2lmKGNuPUN0W3NyXSxBbj1jbiwhQWEoY24pJiYoQW49cW5bKHVuPVN0cmluZyhjbikpLnRvTG93ZXJDYXNlKCldLHZvaWQgMD09PUFuKSl0aHJvdyBuZXcgd24oYFVua25vd24gYWRhcHRlciAnJHt1bn0nYCk7aWYoQW4mJih5bi5pc0Z1bmN0aW9uKEFuKXx8KEFuPUFuLmdldCh1dCkpKSli''@;'; put 'put ''cmVhaztLblt1bnx8IiMiK3NyXT1Bbn1pZighQW4pe2NvbnN0IHNyPU9iamVjdC5lbnRyaWVzKEtuKS5tYXAoKFt5aSx6bl0pPT5gYWRhcHRlciAke3lpfSBgKyghMT09PXpuPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1''@;'; put 'put ''aWxkIikpO2xldCB1bj1KdD9zci5sZW5ndGg+MT8ic2luY2UgOlxuIitzci5tYXAoZ2kpLmpvaW4oIlxuIik6IiAiK2dpKHNyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB3bigiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVx''@;'; put 'put ''dWVzdCAiK3VuLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gQW59O2Z1bmN0aW9uIHZhKEN0KXtpZihDdC5jYW5jZWxUb2tlbiYmQ3QuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEN0LnNpZ25hbCYmQ3Quc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IERhKG51bGwsQ3QpfWZ1bmN0''@;'; put 'put ''aW9uIExvKEN0KXtyZXR1cm4gdmEoQ3QpLEN0LmhlYWRlcnM9eXQuZnJvbShDdC5oZWFkZXJzKSxDdC5kYXRhPXkwLmNhbGwoQ3QsQ3QudHJhbnNmb3JtUmVxdWVzdCksLTEhPT1bInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQ3QubWV0aG9kKSYmQ3QuaGVhZGVycy5zZXRDb250ZW50''@;'; put 'put ''VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSkscmFfZ2V0QWRhcHRlcihDdC5hZGFwdGVyfHxpdS5hZGFwdGVyLEN0KShDdCkudGhlbihmdW5jdGlvbihjbil7dmEoQ3QpLEN0LnJlc3BvbnNlPWNuO3RyeXtjbi5kYXRhPXkwLmNhbGwoQ3QsQ3QudHJhbnNmb3Jt''@;'; put 'put ''UmVzcG9uc2UsY24pfWZpbmFsbHl7ZGVsZXRlIEN0LnJlc3BvbnNlfXJldHVybiBjbi5oZWFkZXJzPXl0LmZyb20oY24uaGVhZGVycyksY259LGZ1bmN0aW9uKGNuKXtpZighb3IoY24pJiYodmEoQ3QpLGNuJiZjbi5yZXNwb25zZSkpe0N0LnJlc3BvbnNlPWNuLnJlc3BvbnNlO3RyeXtjbi5y''@;'; put 'put ''ZXNwb25zZS5kYXRhPXkwLmNhbGwoQ3QsQ3QudHJhbnNmb3JtUmVzcG9uc2UsY24ucmVzcG9uc2UpfWZpbmFsbHl7ZGVsZXRlIEN0LnJlc3BvbnNlfWNuLnJlc3BvbnNlLmhlYWRlcnM9eXQuZnJvbShjbi5yZXNwb25zZS5oZWFkZXJzKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QoY24pfSl9Y29u''@;'; put 'put ''c3QgRm89e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChDdCx1dCk9PntGb1tDdF09ZnVuY3Rpb24oY24pe3JldHVybiB0eXBlb2YgY249PT1DdHx8ImEiKyh1dDwxPyJuICI6IiAiKStDdH19KTtjb25zdCBnbD17''@;'; put 'put ''fTtGby50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odXQsSnQsY24pe2Z1bmN0aW9uIEFuKEtuLHNyKXtyZXR1cm4iW0F4aW9zIHYxLjE2LjBdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrS24rIiciK3NyKyhjbj8iLiAiK2NuOiIiKX1yZXR1cm4oS24sc3IsdW4pPT57aWYoITE9PT11dCl0aHJvdyBu''@;'; put 'put ''ZXcgd24oQW4oc3IsIiBoYXMgYmVlbiByZW1vdmVkIisoSnQ/IiBpbiAiK0p0OiIiKSksd24uRVJSX0RFUFJFQ0FURUQpO3JldHVybiBKdCYmIWdsW3NyXSYmKGdsW3NyXT0hMCxvLndhcm4oQW4oc3IsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK0p0KyIgYW5kIHdpbGwgYmUgcmVt''@;'; put 'put ''b3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCF1dHx8dXQoS24sc3IsdW4pfX0sRm8uc3BlbGxpbmc9ZnVuY3Rpb24odXQpe3JldHVybihKdCxjbik9PihvLndhcm4oYCR7Y259IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7dXR9YCksITApfTt2YXIgVW89e2Fzc2VydE9wdGlvbnM6''@;'; put 'put ''ZnVuY3Rpb24gc2MoQ3QsdXQsSnQpe2lmKCJvYmplY3QiIT10eXBlb2YgQ3QpdGhyb3cgbmV3IHduKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix3bi5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29uc3QgY249T2JqZWN0LmtleXMoQ3QpO2xldCBBbj1jbi5sZW5ndGg7Zm9yKDtBbi0tID4w''@;'; put 'put ''Oyl7Y29uc3QgS249Y25bQW5dLHNyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1dCxLbik/dXRbS25dOnZvaWQgMDtpZihzcil7Y29uc3QgdW49Q3RbS25dLHlpPXZvaWQgMD09PXVufHxzcih1bixLbixDdCk7aWYoITAhPT15aSl0aHJvdyBuZXcgd24oIm9wdGlvbiAi''@;'; put 'put ''K0tuKyIgbXVzdCBiZSAiK3lpLHduLkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09SnQpdGhyb3cgbmV3IHduKCJVbmtub3duIG9wdGlvbiAiK0tuLHduLkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6Rm99O2NvbnN0IFZvPVVvLnZhbGlkYXRvcnM7Y2xhc3MgSGx7Y29u''@;'; put 'put ''c3RydWN0b3IodXQpe3RoaXMuZGVmYXVsdHM9dXR8fHt9LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBLaSxyZXNwb25zZTpuZXcgS2l9fXJlcXVlc3QodXQsSnQpe3ZhciBjbj10aGlzO3JldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxk''@;'; put 'put ''IGNuLl9yZXF1ZXN0KHV0LEp0KX1jYXRjaChBbil7aWYoQW4gaW5zdGFuY2VvZiBFcnJvcil7bGV0IEtuPXt9O0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKEtuKTpLbj1uZXcgRXJyb3I7Y29uc3Qgc3I9KCgpPT57aWYoIUtuLnN0YWNrKXJldHVybiIi''@;'; put 'put ''O2NvbnN0IHVuPUtuLnN0YWNrLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT11bj8iIjpLbi5zdGFjay5zbGljZSh1bisxKX0pKCk7dHJ5e2lmKEFuLnN0YWNrKXtpZihzcil7Y29uc3QgdW49c3IuaW5kZXhPZigiXG4iKSx5aT0tMT09PXVuPy0xOnNyLmluZGV4T2YoIlxuIix1bisxKSx6bj0t''@;'; put 'put ''MT09PXlpPyIiOnNyLnNsaWNlKHlpKzEpO1N0cmluZyhBbi5zdGFjaykuZW5kc1dpdGgoem4pfHwoQW4uc3RhY2srPSJcbiIrc3IpfX1lbHNlIEFuLnN0YWNrPXNyfWNhdGNoe319dGhyb3cgQW59fSkoKX1fcmVxdWVzdCh1dCxKdCl7InN0cmluZyI9PXR5cGVvZiB1dD8oSnQ9SnR8fHt9KS51''@;'; put 'put ''cmw9dXQ6SnQ9dXR8fHt9LEp0PWtyKHRoaXMuZGVmYXVsdHMsSnQpO2NvbnN0e3RyYW5zaXRpb25hbDpjbixwYXJhbXNTZXJpYWxpemVyOkFuLGhlYWRlcnM6S259PUp0O3ZvaWQgMCE9PWNuJiZVby5hc3NlcnRPcHRpb25zKGNuLHtzaWxlbnRKU09OUGFyc2luZzpWby50cmFuc2l0aW9uYWwo''@;'; put 'put ''Vm8uYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6Vm8udHJhbnNpdGlvbmFsKFZvLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Vm8udHJhbnNpdGlvbmFsKFZvLmJvb2xlYW4pLGxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc6Vm8udHJhbnNpdGlvbmFsKFZvLmJvb2xlYW4p''@;'; put 'put ''fSwhMSksbnVsbCE9QW4mJih5bi5pc0Z1bmN0aW9uKEFuKT9KdC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6QW59OlVvLmFzc2VydE9wdGlvbnMoQW4se2VuY29kZTpWby5mdW5jdGlvbixzZXJpYWxpemU6Vm8uZnVuY3Rpb259LCEwKSksdm9pZCAwIT09SnQuYWxsb3dBYnNvbHV0ZVVy''@;'; put 'put ''bHN8fChKdC5hbGxvd0Fic29sdXRlVXJscz12b2lkIDA9PT10aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzfHx0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzKSxVby5hc3NlcnRPcHRpb25zKEp0LHtiYXNlVXJsOlZvLnNwZWxsaW5nKCJiYXNlVVJMIiksd2l0aFhzcmZUb2tl''@;'; put 'put ''bjpWby5zcGVsbGluZygid2l0aFhTUkZUb2tlbiIpfSwhMCksSnQubWV0aG9kPShKdC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgc3I9S24mJnluLm1lcmdlKEtuLmNvbW1vbixLbltKdC5tZXRob2RdKTtLbiYmeW4uZm9yRWFjaChbImRl''@;'; put 'put ''bGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJxdWVyeSIsImNvbW1vbiJdLFdvPT57ZGVsZXRlIEtuW1dvXX0pLEp0LmhlYWRlcnM9eXQuY29uY2F0KHNyLEtuKTtjb25zdCB1bj1bXTtsZXQgeWk9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKEJhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQmEucnVuV2hlbiYmITE9PT1CYS5ydW5XaGVuKEp0KSlyZXR1cm47eWk9eWkmJkJhLnN5bmNocm9ub3VzO2NvbnN0IGdhPUp0LnRyYW5zaXRpb25hbHx8Vmk7Z2EmJmdhLmxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc/dW4u''@;'; put 'put ''dW5zaGlmdChCYS5mdWxmaWxsZWQsQmEucmVqZWN0ZWQpOnVuLnB1c2goQmEuZnVsZmlsbGVkLEJhLnJlamVjdGVkKX0pO2NvbnN0IHpuPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oQmEpe3puLnB1c2goQmEuZnVsZmlsbGVkLEJhLnJlamVjdGVkKX0p''@;'; put 'put ''O2xldCBEaSxLbyxwbz0wO2lmKCF5aSl7Y29uc3QgV289W0xvLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoV28udW5zaGlmdCguLi51biksV28ucHVzaCguLi56biksS289V28ubGVuZ3RoLERpPVByb21pc2UucmVzb2x2ZShKdCk7cG88S287KURpPURpLnRoZW4oV29bcG8rK10sV29bcG8rK10p''@;'; put 'put ''O3JldHVybiBEaX1Lbz11bi5sZW5ndGg7bGV0IFBhPUp0O2Zvcig7cG88S287KXtjb25zdCBXbz11bltwbysrXSxCYT11bltwbysrXTt0cnl7UGE9V28oUGEpfWNhdGNoKGdhKXtCYS5jYWxsKHRoaXMsZ2EpO2JyZWFrfX10cnl7RGk9TG8uY2FsbCh0aGlzLFBhKX1jYXRjaChXbyl7cmV0dXJu''@;'; put 'put ''IFByb21pc2UucmVqZWN0KFdvKX1mb3IocG89MCxLbz16bi5sZW5ndGg7cG88S287KURpPURpLnRoZW4oem5bcG8rK10sem5bcG8rK10pO3JldHVybiBEaX1nZXRVcmkodXQpe3JldHVybiAkaShSbygodXQ9a3IodGhpcy5kZWZhdWx0cyx1dCkpLmJhc2VVUkwsdXQudXJsLHV0LmFsbG93QWJz''@;'; put 'put ''b2x1dGVVcmxzKSx1dC5wYXJhbXMsdXQucGFyYW1zU2VyaWFsaXplcil9fXluLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHV0KXtIbC5wcm90b3R5cGVbdXRdPWZ1bmN0aW9uKEp0LGNuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGtyKGNufHx7fSx7''@;'; put 'put ''bWV0aG9kOnV0LHVybDpKdCxkYXRhOihjbnx8e30pLmRhdGF9KSl9fSkseW4uZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCIsInF1ZXJ5Il0sZnVuY3Rpb24odXQpe2Z1bmN0aW9uIEp0KGNuKXtyZXR1cm4gZnVuY3Rpb24oS24sc3IsdW4pe3JldHVybiB0aGlzLnJlcXVlc3Qoa3IodW58''@;'; put 'put ''fHt9LHttZXRob2Q6dXQsaGVhZGVyczpjbj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6S24sZGF0YTpzcn0pKX19SGwucHJvdG90eXBlW3V0XT1KdCgpLCJxdWVyeSIhPT11dCYmKEhsLnByb3RvdHlwZVt1dCsiRm9ybSJdPUp0KCEwKSl9KTtjbGFzcyBB''@;'; put 'put ''dXtjb25zdHJ1Y3Rvcih1dCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHV0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgSnQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKEtuKXtKdD1Lbn0pO2NvbnN0IGNuPXRoaXM7dGhp''@;'; put 'put ''cy5wcm9taXNlLnRoZW4oQW49PntpZighY24uX2xpc3RlbmVycylyZXR1cm47bGV0IEtuPWNuLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7S24tLSA+MDspY24uX2xpc3RlbmVyc1tLbl0oQW4pO2NuLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPUFuPT57bGV0IEtuO2NvbnN0''@;'; put 'put ''IHNyPW5ldyBQcm9taXNlKHVuPT57Y24uc3Vic2NyaWJlKHVuKSxLbj11bn0pLnRoZW4oQW4pO3JldHVybiBzci5jYW5jZWw9ZnVuY3Rpb24oKXtjbi51bnN1YnNjcmliZShLbil9LHNyfSx1dChmdW5jdGlvbihLbixzcix1bil7Y24ucmVhc29ufHwoY24ucmVhc29uPW5ldyBEYShLbixzcix1''@;'; put 'put ''biksSnQoY24ucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHV0KXt0aGlzLnJlYXNvbj91dCh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHV0KTp0aGlzLl9saXN0''@;'; put 'put ''ZW5lcnM9W3V0XX11bnN1YnNjcmliZSh1dCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgSnQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodXQpOy0xIT09SnQmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoSnQsMSl9dG9BYm9ydFNpZ25hbCgpe2NvbnN0IHV0PW5ldyBBYm9ydENv''@;'; put 'put ''bnRyb2xsZXIsSnQ9Y249Pnt1dC5hYm9ydChjbil9O3JldHVybiB0aGlzLnN1YnNjcmliZShKdCksdXQuc2lnbmFsLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKEp0KSx1dC5zaWduYWx9c3RhdGljIHNvdXJjZSgpe2xldCB1dDtyZXR1cm57dG9rZW46bmV3IEF1KGZ1bmN0aW9u''@;'; put 'put ''KEFuKXt1dD1Bbn0pLGNhbmNlbDp1dH19fWNvbnN0IG9sPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMs''@;'; put 'put ''Tm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RN''@;'; put 'put ''b2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9k''@;'; put 'put ''Tm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0''@;'; put 'put ''MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWls''@;'; put 'put ''ZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5h''@;'; put 'put ''bFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFn''@;'; put 'put ''ZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExLFdlYlNlcnZlcklzRG93bjo1MjEsQ29ubmVjdGlvblRpbWVkT3V0OjUyMixPcmlnaW5Jc1VucmVhY2hhYmxlOjUyMyxUaW1lb3V0T2NjdXJyZWQ6NTI0LFNzbEhh''@;'; put 'put ''bmRzaGFrZUZhaWxlZDo1MjUsSW52YWxpZFNzbENlcnRpZmljYXRlOjUyNn07T2JqZWN0LmVudHJpZXMob2wpLmZvckVhY2goKFtDdCx1dF0pPT57b2xbdXRdPUN0fSk7Y29uc3QgQm89ZnVuY3Rpb24gSHIoQ3Qpe2NvbnN0IHV0PW5ldyBIbChDdCksSnQ9SShIbC5wcm90b3R5cGUucmVxdWVz''@;'; put 'put ''dCx1dCk7cmV0dXJuIHluLmV4dGVuZChKdCxIbC5wcm90b3R5cGUsdXQse2FsbE93bktleXM6ITB9KSx5bi5leHRlbmQoSnQsdXQsbnVsbCx7YWxsT3duS2V5czohMH0pLEp0LmNyZWF0ZT1mdW5jdGlvbihBbil7cmV0dXJuIEhyKGtyKEN0LEFuKSl9LEp0fShpdSk7Qm8uQXhpb3M9SGwsQm8u''@;'; put 'put ''Q2FuY2VsZWRFcnJvcj1EYSxCby5DYW5jZWxUb2tlbj1BdSxCby5pc0NhbmNlbD1vcixCby5WRVJTSU9OPSIxLjE2LjAiLEJvLnRvRm9ybURhdGE9YW4sQm8uQXhpb3NFcnJvcj13bixCby5DYW5jZWw9Qm8uQ2FuY2VsZWRFcnJvcixCby5hbGw9ZnVuY3Rpb24odXQpe3JldHVybiBQcm9taXNl''@;'; put 'put ''LmFsbCh1dCl9LEJvLnNwcmVhZD1mdW5jdGlvbiBhMShDdCl7cmV0dXJuIGZ1bmN0aW9uKEp0KXtyZXR1cm4gQ3QuYXBwbHkobnVsbCxKdCl9fSxCby5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24gR3MoQ3Qpe3JldHVybiB5bi5pc09iamVjdChDdCkmJiEwPT09Q3QuaXNBeGlvc0Vycm9yfSxCby5t''@;'; put 'put ''ZXJnZUNvbmZpZz1rcixCby5BeGlvc0hlYWRlcnM9eXQsQm8uZm9ybVRvSlNPTj1DdD0+WGEoeW4uaXNIVE1MRm9ybShDdCk/bmV3IEZvcm1EYXRhKEN0KTpDdCksQm8uZ2V0QWRhcHRlcj1yYV9nZXRBZGFwdGVyLEJvLkh0dHBTdGF0dXNDb2RlPW9sLEJvLmRlZmF1bHQ9Qm8sdGUuZXhwb3J0''@;'; put 'put ''cz1Cb30sODU2NjoodGUsaik9PnsidXNlIHN0cmljdCI7dmFyIFMsaDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhqLHtfX2VzTW9kdWxlOnt2YWx1ZTohMH0sW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOiJNb2R1bGUifX0pO2NvbnN0IGY9ZnVuY3Rpb24gZChIKXtyZXR1cm4gSCYmSC5f''@;'; put 'put ''X2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSCwiZGVmYXVsdCIpP0guZGVmYXVsdDpIfShmdW5jdGlvbiBvKCl7aWYoaClyZXR1cm4gUztoPTE7Y29uc3QgSD0yMTQ3NDgzNjQ3LHo9MzYsX2U9L154bi0tLyxtZT0vW15cMC1ceDdGXS8sRmU9L1tceDJF''@;'; put 'put ''XHUzMDAyXHVGRjBFXHVGRjYxXS9nLFI9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52''@;'; put 'put ''YWxpZCBpbnB1dCJ9LHU9TWF0aC5mbG9vcix2PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gcChwZSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoUltwZV0pfWZ1bmN0aW9uIGsocGUsUGUpe2NvbnN0IFplPXBlLnNwbGl0KCJAIik7bGV0IHFlPSIiO1plLmxlbmd0aD4xJiYocWU9WmVbMF0r''@;'; put 'put ''IkAiLHBlPVplWzFdKTtjb25zdCB1ZT1mdW5jdGlvbiBfKHBlLFBlKXtjb25zdCBaZT1bXTtsZXQgcWU9cGUubGVuZ3RoO2Zvcig7cWUtLTspWmVbcWVdPVBlKHBlW3FlXSk7cmV0dXJuIFplfSgocGU9cGUucmVwbGFjZShGZSwiLiIpKS5zcGxpdCgiLiIpLFBlKS5qb2luKCIuIik7cmV0dXJu''@;'; put 'put ''IHFlK3VlfWZ1bmN0aW9uIEwocGUpe2NvbnN0IFBlPVtdO2xldCBaZT0wO2NvbnN0IHFlPXBlLmxlbmd0aDtmb3IoO1plPHFlOyl7Y29uc3QgdmU9cGUuY2hhckNvZGVBdChaZSsrKTtpZih2ZT49NTUyOTYmJnZlPD01NjMxOSYmWmU8cWUpe2NvbnN0IHVlPXBlLmNoYXJDb2RlQXQoWmUrKyk7''@;'; put 'put ''NTYzMjA9PSg2NDUxMiZ1ZSk/UGUucHVzaCgoKDEwMjMmdmUpPDwxMCkrKDEwMjMmdWUpKzY1NTM2KTooUGUucHVzaCh2ZSksWmUtLSl9ZWxzZSBQZS5wdXNoKHZlKX1yZXR1cm4gUGV9Y29uc3QgbD1mdW5jdGlvbihwZSl7cmV0dXJuIHBlPj00OCYmcGU8NTg/cGUtNDgrMjY6cGU+PTY1JiZw''@;'; put 'put ''ZTw5MT9wZS02NTpwZT49OTcmJnBlPDEyMz9wZS05Nzp6fSxiPWZ1bmN0aW9uKHBlLFBlKXtyZXR1cm4gcGUrMjIrNzUqKHBlPDI2KS0oKDAhPVBlKTw8NSl9LHE9ZnVuY3Rpb24ocGUsUGUsWmUpe2xldCBxZT0wO2ZvcihwZT1aZT91KHBlLzcwMCk6cGU+PjEscGUrPXUocGUvUGUpO3BlPjQ1''@;'; put 'put ''NTtxZSs9eilwZT11KHBlLzM1KTtyZXR1cm4gdShxZSszNipwZS8ocGUrMzgpKX0sRz1mdW5jdGlvbihwZSl7Y29uc3QgUGU9W10sWmU9cGUubGVuZ3RoO2xldCBxZT0wLHZlPTEyOCx1ZT03Mix6ZT1wZS5sYXN0SW5kZXhPZigiLSIpO3plPDAmJih6ZT0wKTtmb3IobGV0IE9lPTA7T2U8emU7''@;'; put 'put ''KytPZSlwZS5jaGFyQ29kZUF0KE9lKT49MTI4JiZwKCJub3QtYmFzaWMiKSxQZS5wdXNoKHBlLmNoYXJDb2RlQXQoT2UpKTtmb3IobGV0IE9lPXplPjA/emUrMTowO09lPFplOyl7Y29uc3QgQ2U9cWU7Zm9yKGxldCB4ZT0xLE1lPXo7O01lKz16KXtPZT49WmUmJnAoImludmFsaWQtaW5wdXQi''@;'; put 'put ''KTtjb25zdCBJZT1sKHBlLmNoYXJDb2RlQXQoT2UrKykpO0llPj16JiZwKCJpbnZhbGlkLWlucHV0IiksSWU+dSgoSC1xZSkveGUpJiZwKCJvdmVyZmxvdyIpLHFlKz1JZSp4ZTtjb25zdCBiZT1NZTw9dWU/MTpNZT49dWUrMjY/MjY6TWUtdWU7aWYoSWU8YmUpYnJlYWs7Y29uc3Qgd2U9ei1i''@;'; put 'put ''ZTt4ZT51KEgvd2UpJiZwKCJvdmVyZmxvdyIpLHhlKj13ZX1jb25zdCBrZT1QZS5sZW5ndGgrMTt1ZT1xKHFlLUNlLGtlLDA9PUNlKSx1KHFlL2tlKT5ILXZlJiZwKCJvdmVyZmxvdyIpLHZlKz11KHFlL2tlKSxxZSU9a2UsUGUuc3BsaWNlKHFlKyssMCx2ZSl9cmV0dXJuIFN0cmluZy5mcm9t''@;'; put 'put ''Q29kZVBvaW50KC4uLlBlKX0sUT1mdW5jdGlvbihwZSl7Y29uc3QgUGU9W10sWmU9KHBlPUwocGUpKS5sZW5ndGg7bGV0IHFlPTEyOCx2ZT0wLHVlPTcyO2Zvcihjb25zdCBDZSBvZiBwZSlDZTwxMjgmJlBlLnB1c2godihDZSkpO2NvbnN0IHplPVBlLmxlbmd0aDtsZXQgT2U9emU7Zm9yKHpl''@;'; put 'put ''JiZQZS5wdXNoKCItIik7T2U8WmU7KXtsZXQgQ2U9SDtmb3IoY29uc3QgeGUgb2YgcGUpeGU+PXFlJiZ4ZTxDZSYmKENlPXhlKTtjb25zdCBrZT1PZSsxO0NlLXFlPnUoKEgtdmUpL2tlKSYmcCgib3ZlcmZsb3ciKSx2ZSs9KENlLXFlKSprZSxxZT1DZTtmb3IoY29uc3QgeGUgb2YgcGUpaWYo''@;'; put 'put ''eGU8cWUmJisrdmU+SCYmcCgib3ZlcmZsb3ciKSx4ZT09PXFlKXtsZXQgTWU9dmU7Zm9yKGxldCBJZT16OztJZSs9eil7Y29uc3QgYmU9SWU8PXVlPzE6SWU+PXVlKzI2PzI2OkllLXVlO2lmKE1lPGJlKWJyZWFrO2NvbnN0IHdlPU1lLWJlLHB0PXotYmU7UGUucHVzaCh2KGIoYmUrd2UlcHQs''@;'; put 'put ''MCkpKSxNZT11KHdlL3B0KX1QZS5wdXNoKHYoYihNZSwwKSkpLHVlPXEodmUsa2UsT2U9PT16ZSksdmU9MCwrK09lfSsrdmUsKytxZX1yZXR1cm4gUGUuam9pbigiIil9O3JldHVybiBTPXt2ZXJzaW9uOiIyLjMuMSIsdWNzMjp7ZGVjb2RlOkwsZW5jb2RlOnBlPT5TdHJpbmcuZnJvbUNvZGVQ''@;'; put 'put ''b2ludCguLi5wZSl9LGRlY29kZTpHLGVuY29kZTpRLHRvQVNDSUk6ZnVuY3Rpb24ocGUpe3JldHVybiBrKHBlLGZ1bmN0aW9uKFBlKXtyZXR1cm4gbWUudGVzdChQZSk/InhuLS0iK1EoUGUpOlBlfSl9LHRvVW5pY29kZTpmdW5jdGlvbihwZSl7cmV0dXJuIGsocGUsZnVuY3Rpb24oUGUpe3Jl''@;'; put 'put ''dHVybiBfZS50ZXN0KFBlKT9HKFBlLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlBlfSl9fX0oKSksQT1bImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibWlsLmFjIiwibmV0LmFjIiwib3JnLmFjIiwiYWQiLCJhZSIsImFjLmFlIiwiY28uYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJu''@;'; put 'put ''ZXQuYWUiLCJvcmcuYWUiLCJzY2guYWUiLCJhZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFl''@;'; put 'put ''cm8iLCJhZ2VudHMuYWVybyIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpci10cmFmZmljLWNvbnRyb2wuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcu''@;'; put 'put ''YWVybyIsImJyb2tlci5hZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5hZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJv''@;'; put 'put ''IiwiY29uc3VsdGFudC5hZXJvIiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVjYXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFl''@;'; put 'put ''cm8iLCJlbnRlcnRhaW5tZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZyZWlnaHQuYWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIs''@;'; put 'put ''Imdyb3VuZGhhbmRsaW5nLmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhvbWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFl''@;'; put 'put ''cm8iLCJtYWludGVuYW5jZS5hZXJvIiwibWFya2V0cGxhY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmlnYXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0''@;'; put 'put ''aW9uLmFlcm8iLCJwaWxvdC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJvIiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJz''@;'; put 'put ''ZXJ2aWNlcy5hZXJvIiwic2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVudC5hZXJvIiwidGF4aS5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5nLmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3''@;'; put 'put ''b3Jrcy5hZXJvIiwiYWYiLCJjb20uYWYiLCJlZHUuYWYiLCJnb3YuYWYiLCJuZXQuYWYiLCJvcmcuYWYiLCJhZyIsImNvLmFnIiwiY29tLmFnIiwibmV0LmFnIiwibm9tLmFnIiwib3JnLmFnIiwiYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvZmYuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIs''@;'; put 'put ''ImVkdS5hbCIsImdvdi5hbCIsIm1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJjby5hbyIsImVkLmFvIiwiZWR1LmFvIiwiZ292LmFvIiwiZ3YuYW8iLCJpdC5hbyIsIm9nLmFvIiwib3Jn''@;'; put 'put ''LmFvIiwicGIuYW8iLCJhcSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5hciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEi''@;'; put 'put ''LCJlMTY0LmFycGEiLCJob21lLmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMuYXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFjLmF0Iiwic3RoLmFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0IiwiYXUiLCJhc24u''@;'; put 'put ''YXUiLCJjb20uYXUiLCJlZHUuYXUiLCJnb3YuYXUiLCJpZC5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2EuYXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xp''@;'; put 'put ''Yy5lZHUuYXUiLCJuc3cuZWR1LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNhLmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2No''@;'; put 'put ''b29scy5uc3cuZWR1LmF1IiwiYXciLCJjb20uYXciLCJheCIsImF6IiwiYml6LmF6IiwiY29tLmF6IiwiZWR1LmF6IiwiZ292LmF6IiwiaW5mby5heiIsImludC5heiIsIm1pbC5heiIsIm5hbWUuYXoiLCJuZXQuYXoiLCJvcmcuYXoiLCJwcC5heiIsInByby5heiIsImJhIiwiY29tLmJhIiwi''@;'; put 'put ''ZWR1LmJhIiwiZ292LmJhIiwibWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJvcmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIs''@;'; put 'put ''Imdvdi5iZiIsImJnIiwiMC5iZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJlLmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5i''@;'; put 'put ''ZyIsIm0uYmciLCJuLmJnIiwiby5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJnIiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiYmgiLCJjb20uYmgiLCJlZHUuYmgiLCJnb3YuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJiaSIsImNvLmJpIiwi''@;'; put 'put ''Y29tLmJpIiwiZWR1LmJpIiwib3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFmcmljYS5iaiIsImFncm8uYmoiLCJhcmNoaXRlY3Rlcy5iaiIsImFzc3VyLmJqIiwiYXZvY2F0cy5iaiIsImNvLmJqIiwiY29tLmJqIiwiZWNvLmJqIiwiZWNvbm8uYmoiLCJlZHUuYmoiLCJpbmZvLmJqIiwi''@;'; put 'put ''bG9pc2lycy5iaiIsIm1vbmV5LmJqIiwibmV0LmJqIiwib3JnLmJqIiwib3RlLmJqIiwicmVzdGF1cmFudC5iaiIsInJlc3RvLmJqIiwidG91cmlzbS5iaiIsInVuaXYuYmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwi''@;'; put 'put ''ZWR1LmJuIiwiZ292LmJuIiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8iLCJpbnQuYm8iLCJtaWwuYm8iLCJuZXQuYm8iLCJvcmcuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwi''@;'; put 'put ''Ym9saXZpYS5ibyIsImNpZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRlLmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIs''@;'; put 'put ''Im1vdmltaWVudG8uYm8iLCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8iLCJwYXRyaWEuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIs''@;'; put 'put ''InRlY25vbG9naWEuYm8iLCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3UuYnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJy''@;'; put 'put ''IiwiYXJ0LmJyIiwiYXRvLmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJldC5iciIsImJoei5iciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNh''@;'; put 'put ''eGlhcy5iciIsImNpbS5iciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5iciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJy''@;'; put 'put ''IiwiZWR1LmJyIiwiZW1wLmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwiZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwi''@;'; put 'put ''ZzEyLmJyIiwiZ2VvLmJyIiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdvdi5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5i''@;'; put 'put ''ciIsIm1nLmdvdi5iciIsIm1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBlLmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdv''@;'; put 'put ''di5iciIsInNlLmdvdi5iciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5iciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVpbGFvLmJyIiwibGVs''@;'; put 'put ''LmJyIiwibG9nLmJyIiwibG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwibWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIi''@;'; put 'put ''LCIqLm5vbS5iciIsIm5vdC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5iciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwi''@;'; put 'put ''cmVjaWZlLmJyIiwicmVwLmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIiLCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcu''@;'; put 'put ''YnIiLCJzamMuYnIiLCJzbGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5iciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxv''@;'; put 'put ''Zy5iciIsIndpa2kuYnIiLCJ6bGcuYnIiLCJicyIsImNvbS5icyIsImVkdS5icyIsImdvdi5icyIsIm5ldC5icyIsIm9yZy5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnki''@;'; put 'put ''LCJtaWwuYnkiLCJjb20uYnkiLCJvZi5ieSIsImJ6IiwiY28uYnoiLCJjb20uYnoiLCJlZHUuYnoiLCJnb3YuYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9u''@;'; put 'put ''LmNhIiwicGUuY2EiLCJxYy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3YuY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImFjLmNpIiwiYVx4ZTlyb3BvcnQuY2kiLCJhc3NvLmNpIiwiY28uY2kiLCJjb20uY2kiLCJlZC5jaSIsImVkdS5jaSIsImdvLmNp''@;'; put 'put ''IiwiZ291di5jaSIsImludC5jaSIsIm5ldC5jaSIsIm9yLmNpIiwib3JnLmNpIiwiKi5jayIsIiF3d3cuY2siLCJjbCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24i''@;'; put 'put ''LCJlZHUuY24iLCJnb3YuY24iLCJtaWwuY24iLCJuZXQuY24iLCJvcmcuY24iLCJcdTUxNmNcdTUzZjguY24iLCJcdTdkYjJcdTdkNjEuY24iLCJcdTdmNTFcdTdlZGMuY24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJneC5jbiIsImd6LmNuIiwi''@;'; put 'put ''aGEuY24iLCJoYi5jbiIsImhlLmNuIiwiaGkuY24iLCJoay5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5jbiIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm1vLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNu''@;'; put 'put ''IiwidHcuY24iLCJ4ai5jbiIsInh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImNvIiwiY29tLmNvIiwiZWR1LmNvIiwiZ292LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwiY29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5j''@;'; put 'put ''ciIsIm9yLmNyIiwic2EuY3IiLCJjdSIsImNvbS5jdSIsImVkdS5jdSIsImdvYi5jdSIsImluZi5jdSIsIm5hdC5jdSIsIm5ldC5jdSIsIm9yZy5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaWQuY3YiLCJpbnQuY3YiLCJuZXQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwicHVibC5jdiIs''@;'; put 'put ''ImN3IiwiY29tLmN3IiwiZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJjeSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5Iiwi''@;'; put 'put ''dG0uY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiY28uZG0iLCJjb20uZG0iLCJlZHUuZG0iLCJnb3YuZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNs''@;'; put 'put ''ZC5kbyIsIndlYi5kbyIsImR6IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIsImdvdi5keiIsIm5ldC5keiIsIm9yZy5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJlZHUuZWMiLCJmaW4uZWMiLCJnb2IuZWMiLCJnb3YuZWMiLCJpbmZv''@;'; put 'put ''LmVjIiwiazEyLmVjIiwibWVkLmVjIiwibWlsLmVjIiwibmV0LmVjIiwib3JnLmVjIiwicHJvLmVjIiwiZWR1IiwiZWUiLCJhaXAuZWUiLCJjb20uZWUiLCJlZHUuZWUiLCJmaWUuZWUiLCJnb3YuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJvcmcuZWUiLCJwcmkuZWUiLCJyaWlrLmVlIiwiZWci''@;'; put 'put ''LCJhYy5lZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsImluZm8uZWciLCJtZS5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCJzcG9ydC5lZyIsInR2LmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwiZWR1LmVzIiwiZ29iLmVz''@;'; put 'put ''Iiwibm9tLmVzIiwib3JnLmVzIiwiZXQiLCJiaXouZXQiLCJjb20uZXQiLCJlZHUuZXQiLCJnb3YuZXQiLCJpbmZvLmV0IiwibmFtZS5ldCIsIm5ldC5ldCIsIm9yZy5ldCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZv''@;'; put 'put ''LmZqIiwibWlsLmZqIiwibmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJmbSIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwi''@;'; put 'put ''YXZvdWVzLmZyIiwiY2NpLmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwiZ2EiLCJnYiIsImdkIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJuZXQuZ2UiLCJvcmcuZ2UiLCJwdnQuZ2UiLCJzY2hvb2wuZ2UiLCJnZiIsImdn''@;'; put 'put ''IiwiY28uZ2ciLCJuZXQuZ2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm1pbC5naCIsIm9yZy5naCIsImdpIiwiY29tLmdpIiwiZWR1LmdpIiwiZ292LmdpIiwibHRkLmdpIiwibW9kLmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5n''@;'; put 'put ''bCIsIm5ldC5nbCIsIm9yZy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIsIm5ldC5nbiIsIm9yZy5nbiIsImdvdiIsImdwIiwiYXNzby5ncCIsImNvbS5ncCIsImVkdS5ncCIsIm1vYmkuZ3AiLCJuZXQuZ3AiLCJvcmcuZ3AiLCJncSIsImdyIiwiY29t''@;'; put 'put ''LmdyIiwiZWR1LmdyIiwiZ292LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5ndCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3Ui''@;'; put 'put ''LCJuZXQuZ3UiLCJvcmcuZ3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJnb3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NGUyYVx1NGViYS5o''@;'; put 'put ''ayIsIlx1NTAwYlx1NGViYS5oayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NjU0ZVx1ODBiMi5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsIlx1N2RiMlx1N2Q2MS5oayIs''@;'; put 'put ''Ilx1N2RiMlx1N2VkYy5oayIsIlx1N2VjNFx1N2U1NC5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Y1MVx1N2Q2MS5oayIsIlx1N2Y1MVx1N2VkYy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUuaG4iLCJnb2IuaG4iLCJtaWwuaG4iLCJuZXQuaG4iLCJvcmcuaG4iLCJociIsImNvbS5o''@;'; put 'put ''ciIsImZyb20uaHIiLCJpei5ociIsIm5hbWUuaHIiLCJodCIsImFkdWx0Lmh0IiwiYXJ0Lmh0IiwiYXNzby5odCIsImNvbS5odCIsImNvb3AuaHQiLCJlZHUuaHQiLCJmaXJtLmh0IiwiZ291di5odCIsImluZm8uaHQiLCJtZWQuaHQiLCJuZXQuaHQiLCJvcmcuaHQiLCJwZXJzby5odCIsInBv''@;'; put 'put ''bC5odCIsInByby5odCIsInJlbC5odCIsInNob3AuaHQiLCJodSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiY28uaHUiLCJlcm90aWNhLmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwu''@;'; put 'put ''aHUiLCJpbmZvLmh1IiwiaW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxha2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzcG9ydC5odSIsInN1bGkuaHUiLCJzemV4Lmh1''@;'; put 'put ''IiwidG0uaHUiLCJ0b3pzZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXouaWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdv''@;'; put 'put ''di5pZSIsImlsIiwiYWMuaWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwiLCJuZXQuaWwiLCJvcmcuaWwiLCJcdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDBcdTA1ZTdcdTA1ZDNcdTA1ZGVcdTA1ZDlcdTA1ZDQuXHUwNWQ5XHUwNWU5''@;'; put 'put ''XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWQ5XHUwNWU5XHUwNWQ1XHUwNWQxLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVlNlx1MDVkNFx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZGVcdTA1ZGVcdTA1ZTlcdTA1ZGMuXHUwNWQ5XHUw''@;'; put 'put ''NWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiaW0iLCJhYy5pbSIsImNvLmltIiwibHRkLmNvLmltIiwicGxjLmNvLmltIiwiY29tLmltIiwibmV0LmltIiwib3JnLmltIiwidHQuaW0iLCJ0di5pbSIsImluIiwiNWcuaW4iLCI2Zy5pbiIsImFjLmluIiwiYWkuaW4iLCJhbS5pbiIsImJpaGFyLmlu''@;'; put 'put ''IiwiYml6LmluIiwiYnVzaW5lc3MuaW4iLCJjYS5pbiIsImNuLmluIiwiY28uaW4iLCJjb20uaW4iLCJjb29wLmluIiwiY3MuaW4iLCJkZWxoaS5pbiIsImRyLmluIiwiZWR1LmluIiwiZXIuaW4iLCJmaXJtLmluIiwiZ2VuLmluIiwiZ292LmluIiwiZ3VqYXJhdC5pbiIsImluZC5pbiIsImlu''@;'; put 'put ''Zm8uaW4iLCJpbnQuaW4iLCJpbnRlcm5ldC5pbiIsImlvLmluIiwibWUuaW4iLCJtaWwuaW4iLCJuZXQuaW4iLCJuaWMuaW4iLCJvcmcuaW4iLCJwZy5pbiIsInBvc3QuaW4iLCJwcm8uaW4iLCJyZXMuaW4iLCJ0cmF2ZWwuaW4iLCJ0di5pbiIsInVrLmluIiwidXAuaW4iLCJ1cy5pbiIsImlu''@;'; put 'put ''Zm8iLCJpbnQiLCJldS5pbnQiLCJpbyIsImNvLmlvIiwiY29tLmlvIiwiZWR1LmlvIiwiZ292LmlvIiwibWlsLmlvIiwibmV0LmlvIiwibm9tLmlvIiwib3JnLmlvIiwiaXEiLCJjb20uaXEiLCJlZHUuaXEiLCJnb3YuaXEiLCJtaWwuaXEiLCJuZXQuaXEiLCJvcmcuaXEiLCJpciIsImFjLmly''@;'; put 'put ''IiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwiaXQiLCJlZHUuaXQiLCJnb3YuaXQiLCJhYnIuaXQiLCJh''@;'; put 'put ''YnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIs''@;'; put 'put ''ImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2''@;'; put 'put ''ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJs''@;'; put 'put ''b21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJz''@;'; put 'put ''YXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRp''@;'; put 'put ''cm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5pdCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJl''@;'; put 'put ''bnRpbm8tcy10aXJvbC5pdCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0Iiwi''@;'; put 'put ''dHJlbnRpbm8tc3VlZHRpcm9sLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQt''@;'; put 'put ''dGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZj''@;'; put 'put ''ZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEu''@;'; put 'put ''aXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4''@;'; put 'put ''ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5l''@;'; put 'put ''dG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRy''@;'; put 'put ''aWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3Rp''@;'; put 'put ''Lml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4uaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxl''@;'; put 'put ''dHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm96''@;'; put 'put ''ZW4uaXQiLCJib3plbi1zdWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9sLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNc''@;'; put 'put ''eGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIs''@;'; put 'put ''ImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9y''@;'; put 'put ''bGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJj''@;'; put 'put ''ei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQi''@;'; put 'put ''LCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9z''@;'; put 'put ''c2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQi''@;'; put 'put ''LCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0''@;'; put 'put ''ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS5pdCIsIm1vbnphLWJy''@;'; put 'put ''aWFuemEuaXQiLCJtb256YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQi''@;'; put 'put ''LCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJw''@;'; put 'put ''YXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIs''@;'; put 'put ''InBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5p''@;'; put 'put ''dCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJp''@;'; put 'put ''Lml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdWVkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0Iiwi''@;'; put 'put ''dGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRy''@;'; put 'put ''aWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Bl''@;'; put 'put ''c2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2''@;'; put 'put ''aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImFncmkuam8iLCJhaS5qbyIsImNvbS5qbyIsImVkdS5qbyIsImVuZy5qbyIsImZtLmpvIiwiZ292LmpvIiwibWls''@;'; put 'put ''LmpvIiwibmV0LmpvIiwib3JnLmpvIiwicGVyLmpvIiwicGhkLmpvIiwic2NoLmpvIiwidHYuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwi''@;'; put 'put ''YW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0''@;'; put 'put ''ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpw''@;'; put 'put ''Iiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRv''@;'; put 'put ''eWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJc''@;'; put 'put ''dTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAi''@;'; put 'put ''LCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJc''@;'; put 'put ''dTYxMWJcdTVhOWIuanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTc5''@;'; put 'put ''NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJc''@;'; put 'put ''dTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAi''@;'; put 'put ''LCIhY2l0eS5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiIWNpdHkua29iZS5qcCIsIioubmFnb3lhLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiouc2VuZGFpLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIs''@;'; put 'put ''IiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFp''@;'; put 'put ''Y2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJr''@;'; put 'put ''YW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5h''@;'; put 'put ''aWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFp''@;'; put 'put ''Y2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1l''@;'; put 'put ''LmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRh''@;'; put 'put ''aXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0''@;'; put 'put ''YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5l''@;'; put 'put ''LmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpv''@;'; put 'put ''LmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hp''@;'; put 'put ''LmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmku''@;'; put 'put ''anAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4u''@;'; put 'put ''Y2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJp''@;'; put 'put ''Y2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJh''@;'; put 'put ''LmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJh''@;'; put 'put ''LmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGli''@;'; put 'put ''YS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNo''@;'; put 'put ''aWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5''@;'; put 'put ''by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5q''@;'; put 'put ''cCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5l''@;'; put 'put ''aGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVu''@;'; put 'put ''LmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8u''@;'; put 'put ''ZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hp''@;'; put 'put ''a3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwi''@;'; put 'put ''aGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwi''@;'; put 'put ''a2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEu''@;'; put 'put ''ZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3Jp''@;'; put 'put ''LmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwi''@;'; put 'put ''c2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpw''@;'; put 'put ''IiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1''@;'; put 'put ''b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGlt''@;'; put 'put ''YS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hp''@;'; put 'put ''bWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3Vz''@;'; put 'put ''aGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIs''@;'; put 'put ''Im9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVr''@;'; put 'put ''dXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGlt''@;'; put 'put ''YS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUu''@;'; put 'put ''anAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5n''@;'; put 'put ''aWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5n''@;'; put 'put ''aWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAi''@;'; put 'put ''LCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5t''@;'; put 'put ''YS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1''@;'; put 'put ''bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEu''@;'; put 'put ''Z3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRh''@;'; put 'put ''dGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0''@;'; put 'put ''YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3No''@;'; put 'put ''aW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGku''@;'; put 'put ''aGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGly''@;'; put 'put ''b3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5q''@;'; put 'put ''cCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlk''@;'; put 'put ''by5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1v''@;'; put 'put ''Lmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAi''@;'; put 'put ''LCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5q''@;'; put 'put ''cCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1p''@;'; put 'put ''emF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJr''@;'; put 'put ''YXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3No''@;'; put 'put ''aW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2Uu''@;'; put 'put ''aG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2th''@;'; put 'put ''aWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpw''@;'; put 'put ''IiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmly''@;'; put 'put ''YS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pv''@;'; put 'put ''cmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwi''@;'; put 'put ''c2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIs''@;'; put 'put ''InNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2Fn''@;'; put 'put ''YS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIs''@;'; put 'put ''InRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWku''@;'; put 'put ''aG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIs''@;'; put 'put ''ImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAi''@;'; put 'put ''LCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5''@;'; put 'put ''b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNl''@;'; put 'put ''bi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vu''@;'; put 'put ''by5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWku''@;'; put 'put ''aWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFr''@;'; put 'put ''aS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImth''@;'; put 'put ''c3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJh''@;'; put 'put ''cmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAi''@;'; put 'put ''LCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRz''@;'; put 'put ''dWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwi''@;'; put 'put ''YW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3''@;'; put 'put ''YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3''@;'; put 'put ''YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5q''@;'; put 'put ''cCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3''@;'; put 'put ''YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5v''@;'; put 'put ''ZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRl''@;'; put 'put ''LmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1h''@;'; put 'put ''cnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6''@;'; put 'put ''dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hp''@;'; put 'put ''bWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1p''@;'; put 'put ''dGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwi''@;'; put 'put ''YWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdh''@;'; put 'put ''LmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2Eu''@;'; put 'put ''anAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFn''@;'; put 'put ''YXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtv''@;'; put 'put ''Y2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29j''@;'; put 'put ''aGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2th''@;'; put 'put ''d2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5r''@;'; put 'put ''b2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIs''@;'; put 'put ''ImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJu''@;'; put 'put ''YWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFt''@;'; put 'put ''YWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lv''@;'; put 'put ''dG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5r''@;'; put 'put ''eW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5q''@;'; put 'put ''cCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJp''@;'; put 'put ''bmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWth''@;'; put 'put ''Lm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpw''@;'; put 'put ''IiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hp''@;'; put 'put ''bWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1p''@;'; put 'put ''c2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2ku''@;'; put 'put ''anAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2ku''@;'; put 'put ''anAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlh''@;'; put 'put ''emFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwi''@;'; put 'put ''a29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmlj''@;'; put 'put ''aGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5''@;'; put 'put ''YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJj''@;'; put 'put ''aGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5q''@;'; put 'put ''cCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3Vz''@;'; put 'put ''aGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1p''@;'; put 'put ''bmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5h''@;'; put 'put ''Z2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8u''@;'; put 'put ''anAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5h''@;'; put 'put ''Z2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5h''@;'; put 'put ''Z2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIs''@;'; put 'put ''Inlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2Fo''@;'; put 'put ''YXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2Fr''@;'; put 'put ''aS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwi''@;'; put 'put ''dW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAi''@;'; put 'put ''LCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAi''@;'; put 'put ''LCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1h''@;'; put 'put ''Lm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFr''@;'; put 'put ''YWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEu''@;'; put 'put ''anAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlp''@;'; put 'put ''Z2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJz''@;'; put 'put ''ZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIs''@;'; put 'put ''InVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5q''@;'; put 'put ''cCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9p''@;'; put 'put ''dGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5''@;'; put 'put ''YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9r''@;'; put 'put ''YXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9r''@;'; put 'put ''YXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5h''@;'; put 'put ''d2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9r''@;'; put 'put ''aW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWlu''@;'; put 'put ''YW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwi''@;'; put 'put ''b2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpw''@;'; put 'put ''IiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIs''@;'; put 'put ''ImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2Fz''@;'; put 'put ''aGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwi''@;'; put 'put ''a2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5v''@;'; put 'put ''c2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNh''@;'; put 'put ''eWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAi''@;'; put 'put ''LCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNh''@;'; put 'put ''Z2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIs''@;'; put 'put ''Imthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3Vj''@;'; put 'put ''aGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5z''@;'; put 'put ''YWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNh''@;'; put 'put ''aXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAi''@;'; put 'put ''LCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2Fp''@;'; put 'put ''dGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0''@;'; put 'put ''by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9n''@;'; put 'put ''YXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5z''@;'; put 'put ''YWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEu''@;'; put 'put ''anAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1h''@;'; put 'put ''LmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFu''@;'; put 'put ''LnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJv''@;'; put 'put ''bWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2Eu''@;'; put 'put ''anAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwi''@;'; put 'put ''a2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFu''@;'; put 'put ''ZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpw''@;'; put 'put ''IiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5z''@;'; put 'put ''aGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwi''@;'; put 'put ''a2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1p''@;'; put 'put ''aXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6''@;'; put 'put ''dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRv''@;'; put 'put ''Y2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1p''@;'; put 'put ''YnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50''@;'; put 'put ''b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGln''@;'; put 'put ''aS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5v''@;'; put 'put ''LnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9r''@;'; put 'put ''dXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9r''@;'; put 'put ''eW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2Eu''@;'; put 'put ''dG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1h''@;'; put 'put ''dG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2Rh''@;'; put 'put ''aXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpw''@;'; put 'put ''IiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1''@;'; put 'put ''dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJz''@;'; put 'put ''dW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAi''@;'; put 'put ''LCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpw''@;'; put 'put ''IiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRv''@;'; put 'put ''eWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEu''@;'; put 'put ''anAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndh''@;'; put 'put ''a2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImth''@;'; put 'put ''aW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFt''@;'; put 'put ''YS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpw''@;'; put 'put ''Iiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdh''@;'; put 'put ''dGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5q''@;'; put 'put ''cCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFt''@;'; put 'put ''YWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0''@;'; put 'put ''YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0''@;'; put 'put ''YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1Lnlh''@;'; put 'put ''bWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3Vj''@;'; put 'put ''aGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2Fn''@;'; put 'put ''dWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJr''@;'; put 'put ''b3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJh''@;'; put 'put ''c2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFy''@;'; put 'put ''YS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsImNvbS5rZyIsImVk''@;'; put 'put ''dS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIm5ldC5rZyIsIm9yZy5rZyIsIioua2giLCJraSIsImJpei5raSIsImNvbS5raSIsImVkdS5raSIsImdvdi5raSIsImluZm8ua2kiLCJuZXQua2kiLCJvcmcua2kiLCJrbSIsImFzcy5rbSIsImNvbS5rbSIsImVkdS5rbSIsImdvdi5rbSIsIm1pbC5r''@;'; put 'put ''bSIsIm5vbS5rbSIsIm9yZy5rbSIsInByZC5rbSIsInRtLmttIiwiYXNzby5rbSIsImNvb3Aua20iLCJnb3V2LmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwicGhhcm1hY2llbnMua20iLCJwcmVzc2Uua20iLCJ2ZXRlcmluYWlyZS5rbSIsImtuIiwiZWR1LmtuIiwiZ292LmtuIiwi''@;'; put 'put ''bmV0LmtuIiwib3JnLmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBl''@;'; put 'put ''LmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmty''@;'; put 'put ''IiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcu''@;'; put 'put ''a3kiLCJreiIsImNvbS5reiIsImVkdS5reiIsImdvdi5reiIsIm1pbC5reiIsIm5ldC5reiIsIm9yZy5reiIsImxhIiwiY29tLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwiaW5mby5sYSIsImludC5sYSIsIm5ldC5sYSIsIm9yZy5sYSIsInBlci5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwi''@;'; put 'put ''Z292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjby5sYyIsImNvbS5sYyIsImVkdS5sYyIsImdvdi5sYyIsIm5ldC5sYyIsIm9yZy5sYyIsImxpIiwibGsiLCJhYy5sayIsImFzc24ubGsiLCJjb20ubGsiLCJlZHUubGsiLCJnb3YubGsiLCJncnAubGsiLCJob3RlbC5sayIsImludC5s''@;'; put 'put ''ayIsImx0ZC5sayIsIm5ldC5sayIsIm5nby5sayIsIm9yZy5sayIsInNjaC5sayIsInNvYy5sayIsIndlYi5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwibmV0LmxyIiwib3JnLmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwi''@;'; put 'put ''aW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiYXNuLmx2IiwiY29tLmx2IiwiY29uZi5sdiIsImVkdS5sdiIsImdvdi5sdiIsImlkLmx2IiwibWlsLmx2IiwibmV0Lmx2Iiwib3JnLmx2IiwibHkiLCJjb20ubHkiLCJlZHUubHkiLCJn''@;'; put 'put ''b3YubHkiLCJpZC5seSIsIm1lZC5seSIsIm5ldC5seSIsIm9yZy5seSIsInBsYy5seSIsInNjaC5seSIsIm1hIiwiYWMubWEiLCJjby5tYSIsImdvdi5tYSIsIm5ldC5tYSIsIm9yZy5tYSIsInByZXNzLm1hIiwibWMiLCJhc3NvLm1jIiwidG0ubWMiLCJtZCIsIm1lIiwiYWMubWUiLCJjby5t''@;'; put 'put ''ZSIsImVkdS5tZSIsImdvdi5tZSIsIml0cy5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsInByaXYubWUiLCJtZyIsImNvLm1nIiwiY29tLm1nIiwiZWR1Lm1nIiwiZ292Lm1nIiwibWlsLm1nIiwibm9tLm1nIiwib3JnLm1nIiwicHJkLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsImVkdS5t''@;'; put 'put ''ayIsImdvdi5tayIsImluZi5tayIsIm5hbWUubWsiLCJuZXQubWsiLCJvcmcubWsiLCJtbCIsImNvbS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJlZHUubW4iLCJnb3YubW4iLCJvcmcubW4iLCJtbyIs''@;'; put 'put ''ImNvbS5tbyIsImVkdS5tbyIsImdvdi5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10''@;'; put 'put ''IiwibXUiLCJhYy5tdSIsImNvLm11IiwiY29tLm11IiwiZ292Lm11IiwibmV0Lm11Iiwib3IubXUiLCJvcmcubXUiLCJtdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIs''@;'; put 'put ''Im11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJlZHUubXgi''@;'; put 'put ''LCJnb2IubXgiLCJuZXQubXgiLCJvcmcubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJu''@;'; put 'put ''ZXQubXoiLCJvcmcubXoiLCJuYSIsImFsdC5uYSIsImNvLm5hIiwiY29tLm5hIiwiZ292Lm5hIiwibmV0Lm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJhcnRzLm5mIiwiY29tLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJuZXQu''@;'; put 'put ''bmYiLCJvdGhlci5uZiIsInBlci5uZiIsInJlYy5uZiIsInN0b3JlLm5mIiwid2ViLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6''@;'; put 'put ''Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwiZm9sa2ViaWJsLm5vIiwiZnlsa2VzYmlibC5ubyIsImlk''@;'; put 'put ''cmV0dC5ubyIsIm11c2V1bS5ubyIsInByaXYubm8iLCJ2Z3Mubm8iLCJkZXAubm8iLCJoZXJhZC5ubyIsImtvbW11bmUubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJu''@;'; put 'put ''bC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIs''@;'; put 'put ''ImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIu''@;'; put 'put ''bm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwi''@;'; put 'put ''ZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQu''@;'; put 'put ''bm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nq''@;'; put 'put ''b2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5u''@;'; put 'put ''byIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhYXJib3J0ZS5ubyIsImFl''@;'; put 'put ''anJpZS5ubyIsImFmam9yZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJuZXMuYWtlcnNodXMubm8iLCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsZXN1''@;'; put 'put ''bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRc''@;'; put 'put ''eGY4eS5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc2t2b2xsLm5vIiwiYXNuZXMu''@;'; put 'put ''bm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5v''@;'; put 'put ''IiwiYmFkYWRkamEubm8iLCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJceGU2cnVtLm5vIiwiYmFoY2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJhamRk''@;'; put 'put ''YXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbGVzdHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxzZmpvcmQubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJhcnVtLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwi''@;'; put 'put ''YmVhcmFsdmFoa2kubm8iLCJiZWFyYWx2XHhlMWhraS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwiYmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8i''@;'; put 'put ''LCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJib2tuLm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIsImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnVk''@;'; put 'put ''ZWpqdS5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImNhaGNlc3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwiZGF2dmVzaWlkYS5ubyIsImRlYXRudS5ubyIsImRpZWxkZGFu''@;'; put 'put ''dW9ycmkubm8iLCJkaXZ0YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwiZG9ubmEubm8iLCJkXHhmOG5uYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5nZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNi''@;'; put 'put ''ZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmVuZXMubm8i''@;'; put 'put ''LCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZmVkamUubm8iLCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVsbC5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZsYWtzdGFkLm5vIiwi''@;'; put 'put ''ZmxhdGFuZ2VyLm5vIiwiZmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZm9sbGRhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJmb3JzYW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJceGU2bmEubm8iLCJmcmFuYS5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIs''@;'; put 'put ''ImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVvaXNrdS5ubyIsImZ1b3Nza28ubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwiZ2Ft''@;'; put 'put ''dmlrLm5vIiwiZ2FuZ2F2aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5ubyIsImdhdXNkYWwubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJn''@;'; put 'put ''amVyc3RhZC5ubyIsImdqZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJncnVlLm5vIiwiZ3VsZW4u''@;'; put 'put ''bm8iLCJndW92ZGFnZWFpZG51Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5ubyIsImhhZHNlbC5ubyIsImhceGU2Z2Vib3N0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJo''@;'; put 'put ''YW1tYXJmZWFzdGEubm8iLCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiaGF1Z2VzdW5kLm5vIiwi''@;'; put 'put ''b3MuaGVkbWFyay5ubyIsInZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwubm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5u''@;'; put 'put ''byIsImhvbC5ubyIsImhvbGUubm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4ubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4''@;'; put 'put ''Zjh5bGFuZGV0Lm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiaXZndS5ubyIsImpldm5ha2VyLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0''@;'; put 'put ''ZXIubm8iLCJqb25kYWwubm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJhc2pvay5ubyIsImthcmxzb3kubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwia2xh''@;'; put 'put ''YnUubm8iLCJrbFx4ZTZidS5ubyIsImtsZXBwLm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImty''@;'; put 'put ''b2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJrdlx4ZTZuYW5nZW4ubm8iLCJrdmFmam9yZC5ubyIsImt2YWxzdW5kLm5vIiwia3ZhbS5ubyIsImt2YW5hbmdlbi5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8i''@;'; put 'put ''LCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsImxceGU2cmRhbC5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImxhcmRhbC5ubyIsImxhcnZpay5ubyIsImxhdmFnaXMubm8iLCJsYXZhbmdlbi5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUw''@;'; put 'put ''MTRiZ2F2aWlrYS5ubyIsImxlYmVzYnkubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlcmRhbC5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIu''@;'; put 'put ''bm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsaW5kZXNuZXMubm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNr''@;'; put 'put ''b2cubm8iLCJsb3Rlbi5ubyIsImxceGY4dGVuLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm1hbHNlbHYubm8i''@;'; put 'put ''LCJtXHhlNWxzZWx2Lm5vIiwibWFsdmlrLm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtYXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsIm1lbGFuZC5u''@;'; put 'put ''byIsIm1lbGRhbC5ubyIsIm1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwibWVyXHhlNWtlci5ubyIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIsIm1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5v''@;'; put 'put ''IiwibW9sZGUubm8iLCJoZXJveS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8i''@;'; put 'put ''LCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhlNW1lc2pldnVlbWllLm5vIiwiblx4ZTZyXHhmOHkubm8iLCJuYW1kYWxzZWlkLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcm95Lm5vIiwibmFy''@;'; put 'put ''dmlpa2Eubm8iLCJuYXJ2aWsubm8iLCJuYXVzdGRhbC5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5v''@;'; put 'put ''cmQtYXVyZGFsLm5vIiwibm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIsIm5vcmRrYXBwLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJub3JkcmUtbGFuZC5u''@;'; put 'put ''byIsIm5vcmRyZWlzYS5ubyIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib21hc3Z1b3RuYS5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwi''@;'; put 'put ''b3BwZWdceGU1cmQubm8iLCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJvcnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIs''@;'; put 'put ''InZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8i''@;'; put 'put ''LCJveXN0cmUtc2xpZHJlLm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBvcnNncnVubi5ubyIsInJhZGUubm8iLCJyXHhlNWRlLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJceGU2bGlu''@;'; put 'put ''Z2VuLm5vIiwicmFoa2tlcmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsInJhaXNhLm5vIiwiclx4ZTFpc2Eubm8iLCJyYWtrZXN0YWQubm8iLCJyYWxpbmdlbi5ubyIsInJhbmEubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIs''@;'; put 'put ''InJlbm5lc295Lm5vIiwicmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtlLm5vIiwicmluZ3Nha2VyLm5vIiwicmlzb3Iubm8iLCJyaXNceGY4ci5ubyIsInJpc3NhLm5vIiwicm9hbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb2xs''@;'; put 'put ''YWcubm8iLCJyb21zYS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJydW92YXQubm8iLCJy''@;'; put 'put ''eWdnZS5ubyIsInNhbGFuZ2VuLm5vIiwic2FsYXQubm8iLCJzXHhlMWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic2FsdGRhbC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwi''@;'; put 'put ''c2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2llbGxhay5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5ubyIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1''@;'; put 'put ''bmxhbmQubm8iLCJza2F1bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNraWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tpcHR2ZXQubm8iLCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNrb2RqZS5ubyIs''@;'; put 'put ''InNtb2xhLm5vIiwic21ceGY4bGEubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25pbGxmam9yZC5ubyIsInNub2FzYS5ubyIsInNvZ25kYWwubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8i''@;'; put 'put ''LCJzb2x1bmQubm8iLCJzb21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJzXHhmOG5kcmUtbGFuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFs''@;'; put 'put ''Lm5vIiwic1x4ZjhyLW9kYWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVpc2Eubm8iLCJzb3J0bGFuZC5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJzcHlk''@;'; put 'put ''ZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwi''@;'; put 'put ''c3RyYW5kLm5vIiwic3RyYW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIsInN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2ZW4ubm8iLCJ0YW5hLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhm''@;'; put 'put ''OC50ZWxlbWFyay5ubyIsInRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1bmQubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRvbnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ0b3Jza2VuLm5vIiwidHJceGU2bmEu''@;'; put 'put ''bm8iLCJ0cmFuYS5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb2FuZGluLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInRyb21zYS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb25kaGVpbS5ubyIsInRyeXNpbC5ubyIsInR2ZWRlc3RyYW5k''@;'; put 'put ''Lm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsInR5c25lcy5ubyIsInR5c3ZceGU2ci5ubyIsInR5c3Zhci5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsInV0c2lyYS5ubyIs''@;'; put 'put ''InZhYXBzdGUubm8iLCJ2YWRzby5ubyIsInZhZHNceGY4Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhLm5vIiwidlx4ZTVnXHhlNS5ubyIsInZhZ2FuLm5vIiwidlx4ZTVnYW4ubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5n''@;'; put 'put ''Lm5vIiwidmFueWx2ZW4ubm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdnXHhlMXQubm8iLCJ2YXJveS5ubyIsInZlZnNuLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5v''@;'; put 'put ''IiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdveS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5v''@;'; put 'put ''IiwidmluZGFmam9yZC5ubyIsInZvYWdhdC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsIioubnAiLCJuciIsImJpei5uciIsImNvbS5uciIsImVkdS5uciIsImdvdi5uciIsImluZm8ubnIiLCJuZXQubnIiLCJvcmcubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdl''@;'; put 'put ''ZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibVx1MDEwMW9yaS5ueiIsIm1pbC5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1''@;'; put 'put ''Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIsImFiby5wYSIsImFjLnBhIiwiY29tLnBhIiwiZWR1LnBhIiwiZ29iLnBhIiwiaW5nLnBhIiwibWVkLnBhIiwibmV0LnBhIiwibm9tLnBhIiwib3Jn''@;'; put 'put ''LnBhIiwic2xkLnBhIiwicGUiLCJjb20ucGUiLCJlZHUucGUiLCJnb2IucGUiLCJtaWwucGUiLCJuZXQucGUiLCJub20ucGUiLCJvcmcucGUiLCJwZiIsImNvbS5wZiIsImVkdS5wZiIsIm9yZy5wZiIsIioucGciLCJwaCIsImNvbS5waCIsImVkdS5waCIsImdvdi5waCIsImkucGgiLCJtaWwu''@;'; put 'put ''cGgiLCJuZXQucGgiLCJuZ28ucGgiLCJvcmcucGgiLCJwayIsImFjLnBrIiwiYml6LnBrIiwiY29tLnBrIiwiZWR1LnBrIiwiZmFtLnBrIiwiZ2twLnBrIiwiZ29iLnBrIiwiZ29nLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiZ292LnBrIiwibmV0LnBrIiwib3Jn''@;'; put 'put ''LnBrIiwid2ViLnBrIiwicGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhZ3JvLnBsIiwiYWlkLnBsIiwiYXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtZWRpYS5wbCIsIm1pYXN0YS5wbCIs''@;'; put 'put ''Im1pbC5wbCIsIm5pZXJ1Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwiLCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRv''@;'; put 'put ''dXJpc20ucGwiLCJ0cmF2ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJncml3Lmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cC5nb3YucGwiLCJrd3BzcC5n''@;'; put 'put ''b3YucGwiLCJtdXAuZ292LnBsIiwibXcuZ292LnBsIiwib2lhLmdvdi5wbCIsIm9pcm0uZ292LnBsIiwib2tlLmdvdi5wbCIsIm9vdy5nb3YucGwiLCJvc2Noci5nb3YucGwiLCJvdW0uZ292LnBsIiwicGEuZ292LnBsIiwicGluYi5nb3YucGwiLCJwaXcuZ292LnBsIiwicG8uZ292LnBsIiwi''@;'; put 'put ''cHIuZ292LnBsIiwicHNwLmdvdi5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwic2EuZ292LnBsIiwic2RuLmdvdi5wbCIsInNrby5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwidWcuZ292LnBsIiwidWdpbS5n''@;'; put 'put ''b3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXBwby5nb3YucGwiLCJ1cy5nb3YucGwiLCJ1dy5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lmLmdvdi5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBs''@;'; put 'put ''Iiwid2l3Lmdvdi5wbCIsIndrei5nb3YucGwiLCJ3c2EuZ292LnBsIiwid3Nrci5nb3YucGwiLCJ3c3NlLmdvdi5wbCIsInd1b3ouZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInpwLmdvdi5wbCIsInpwaXNkbi5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4u''@;'; put 'put ''cGwiLCJiZXNraWR5LnBsIiwiYmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJieXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xl''@;'; put 'put ''a2EucGwiLCJlbGJsYWcucGwiLCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5pYS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6''@;'; put 'put ''eS5wbCIsImthc3p1YnkucGwiLCJrYXRvd2ljZS5wbCIsImthemltaWVyei1kb2xueS5wbCIsImtlcG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29sb2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5''@;'; put 'put ''LnBsIiwibGVib3JrLnBsIiwibGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsucGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMu''@;'; put 'put ''cGwiLCJtaWVsbm8ucGwiLCJtcmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwiLCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwi''@;'; put 'put ''b3N0cm93aWVjLnBsIiwib3N0cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3Jza2llLnBsIiwicG9tb3J6ZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIs''@;'; put 'put ''InB1bGF3eS5wbCIsInJhZG9tLnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNrb2N6b3cucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInN0YXJhY2hvd2lj''@;'; put 'put ''ZS5wbCIsInN0YXJnYXJkLnBsIiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRhcm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5w''@;'; put 'put ''bCIsIndhbGJyenljaC5wbCIsIndhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNsYXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2Fu''@;'; put 'put ''LnBsIiwiemFyb3cucGwiLCJ6Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJjby5wbiIsImVkdS5wbiIsImdvdi5wbiIsIm5ldC5wbiIsIm9yZy5wbiIsInBvc3QiLCJwciIsImJpei5wciIsImNvbS5wciIsImVkdS5wciIsImdvdi5wciIsImluZm8ucHIiLCJpc2xhLnByIiwi''@;'; put 'put ''bmFtZS5wciIsIm5ldC5wciIsIm9yZy5wciIsInByby5wciIsImFjLnByIiwiZXN0LnByIiwicHJvZi5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJvIiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJt''@;'; put 'put ''ZWQucHJvIiwicmVjaHQucHJvIiwicHMiLCJjb20ucHMiLCJlZHUucHMiLCJnb3YucHMiLCJuZXQucHMiLCJvcmcucHMiLCJwbG8ucHMiLCJzZWMucHMiLCJwdCIsImNvbS5wdCIsImVkdS5wdCIsImdvdi5wdCIsImludC5wdCIsIm5ldC5wdCIsIm5vbWUucHQiLCJvcmcucHQiLCJwdWJsLnB0''@;'; put 'put ''IiwicHciLCJiZWxhdS5wdyIsImNvLnB3IiwiZWQucHciLCJnby5wdyIsIm9yLnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1l''@;'; put 'put ''LnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJy''@;'; put 'put ''cyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwiZWR1LnNhIiwiZ292LnNhIiwibWVkLnNh''@;'; put 'put ''IiwibmV0LnNhIiwib3JnLnNhIiwicHViLnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImVkdS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsInNkIiwiY29tLnNkIiwiZWR1LnNkIiwiZ292''@;'; put 'put ''LnNkIiwiaW5mby5zZCIsIm1lZC5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsInR2LnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIs''@;'; put 'put ''Imkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2Ui''@;'; put 'put ''LCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJlZHUuc2ciLCJnb3Yuc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJzaCIsImNvbS5zaCIsImdvdi5zaCIsIm1pbC5zaCIsIm5ldC5zaCIsIm9yZy5zaCIs''@;'; put 'put ''InNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwiZWR1LnNsIiwiZ292LnNsIiwibmV0LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIs''@;'; put 'put ''Imdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvLnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3MiLCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1''@;'; put 'put ''LnN0IiwiZW1iYWl4YWRhLnN0IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2IiwiY29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImNvbS5z''@;'; put 'put ''eSIsImVkdS5zeSIsImdvdi5zeSIsIm1pbC5zeSIsIm5ldC5zeSIsIm9yZy5zeSIsInN6IiwiYWMuc3oiLCJjby5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgi''@;'; put 'put ''LCJ0aiIsImFjLnRqIiwiYml6LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJuZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwi''@;'; put 'put ''Y28udG0iLCJjb20udG0iLCJlZHUudG0iLCJnb3YudG0iLCJtaWwudG0iLCJuZXQudG0iLCJub20udG0iLCJvcmcudG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZpbi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0''@;'; put 'put ''LnRuIiwib3JnLnRuIiwicGVyc28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJlZHUudG8iLCJnb3YudG8iLCJtaWwudG8iLCJuZXQudG8iLCJvcmcudG8iLCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJn''@;'; put 'put ''ZW4udHIiLCJnb3YudHIiLCJpbmZvLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibWlsLnRyIiwibmFtZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImJpei50dCIsImNvLnR0''@;'; put 'put ''IiwiY29tLnR0IiwiZWR1LnR0IiwiZ292LnR0IiwiaW5mby50dCIsIm1pbC50dCIsIm5hbWUudHQiLCJuZXQudHQiLCJvcmcudHQiLCJwcm8udHQiLCJ0diIsInR3IiwiY2x1Yi50dyIsImNvbS50dyIsImViaXoudHciLCJlZHUudHciLCJnYW1lLnR3IiwiZ292LnR3IiwiaWR2LnR3IiwibWls''@;'; put 'put ''LnR3IiwibmV0LnR3Iiwib3JnLnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3RlbC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwi''@;'; put 'put ''aW4udWEiLCJuZXQudWEiLCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNoZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVhIiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51''@;'; put 'put ''YSIsImRuZXByb3BldHJvdnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwiZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIsImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxu''@;'; put 'put ''eXRza3lpLnVhIiwia2lldi51YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3JvcHl2bnl0c2t5aS51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHVoYW5zay51YSIsImx1dHNrLnVhIiwibHYu''@;'; put 'put ''dWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9w''@;'; put 'put ''b2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInV6aGhvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIsInZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInpha2FycGF0dGlhLnVhIiwiemFwb3Jp''@;'; put 'put ''emh6aGUudWEiLCJ6YXBvcml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6dC51YSIsInVnIiwiYWMudWciLCJjby51ZyIsImNvbS51ZyIsImdvLnVnIiwibmUudWciLCJvci51ZyIsIm9yZy51ZyIsInNjLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwi''@;'; put 'put ''Z292LnVrIiwibHRkLnVrIiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVzIiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVz''@;'; put 'put ''IiwiYXoudXMiLCJjYS51cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMiLCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1p''@;'; put 'put ''LnVzIiwibW4udXMiLCJtby51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gudXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIs''@;'; put 'put ''InRuLnVzIiwidHgudXMiLCJ1dC51cyIsInZhLnVzIiwidmkudXMiLCJ2dC51cyIsIndhLnVzIiwid2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwiazEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwi''@;'; put 'put ''azEyLmN0LnVzIiwiazEyLmRjLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwiazEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVz''@;'; put 'put ''IiwiazEyLm1lLnVzIiwiazEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVzIiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9o''@;'; put 'put ''LnVzIiwiazEyLm9rLnVzIiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0LnVzIiwiazEyLnZhLnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiY2Mu''@;'; put 'put ''YWsudXMiLCJsaWIuYWsudXMiLCJjYy5hbC51cyIsImxpYi5hbC51cyIsImNjLmFyLnVzIiwibGliLmFyLnVzIiwiY2MuYXMudXMiLCJsaWIuYXMudXMiLCJjYy5hei51cyIsImxpYi5hei51cyIsImNjLmNhLnVzIiwibGliLmNhLnVzIiwiY2MuY28udXMiLCJsaWIuY28udXMiLCJjYy5jdC51''@;'; put 'put ''cyIsImxpYi5jdC51cyIsImNjLmRjLnVzIiwibGliLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNjLmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxh''@;'; put 'put ''LnVzIiwiY2MubWEudXMiLCJjYy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNjLm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52''@;'; put 'put ''LnVzIiwiY2MubnkudXMiLCJjYy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNjLnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmEudXMiLCJjYy52aS51cyIsImNjLnZ0''@;'; put 'put ''LnVzIiwiY2Mud2EudXMiLCJjYy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJrMTIud3kudXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMiLCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3Mu''@;'; put 'put ''dXMiLCJsaWIua3kudXMiLCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8udXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIu''@;'; put 'put ''bmgudXMiLCJsaWIubmoudXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIucGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJs''@;'; put 'put ''aWIudHgudXMiLCJsaWIudXQudXMiLCJsaWIudmEudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJwdnQuazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwi''@;'; put 'put ''Y29nLm1pLnVzIiwiZHN0Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIsImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJj''@;'; put 'put ''b20udXoiLCJuZXQudXoiLCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwiZWR1LnZjIiwiZ292LnZjIiwibWlsLnZjIiwibmV0LnZjIiwib3JnLnZjIiwidmUiLCJhcnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZl''@;'; put 'put ''IiwiZ292LnZlIiwiaW5mby52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwidGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZp''@;'; put 'put ''Iiwidm4iLCJhYy52biIsImFpLnZuIiwiYml6LnZuIiwiY29tLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaGVhbHRoLnZuIiwiaWQudm4iLCJpbmZvLnZuIiwiaW50LnZuIiwiaW8udm4iLCJuYW1lLnZuIiwibmV0LnZuIiwib3JnLnZuIiwicHJvLnZuIiwiYW5naWFuZy52biIsImJhY2dpYW5n''@;'; put 'put ''LnZuIiwiYmFja2FuLnZuIiwiYmFjbGlldS52biIsImJhY25pbmgudm4iLCJiYXJpYS12dW5ndGF1LnZuIiwiYmVudHJlLnZuIiwiYmluaGRpbmgudm4iLCJiaW5oZHVvbmcudm4iLCJiaW5ocGh1b2Mudm4iLCJiaW5odGh1YW4udm4iLCJjYW1hdS52biIsImNhbnRoby52biIsImNhb2Jhbmcu''@;'; put 'put ''dm4iLCJkYWtsYWsudm4iLCJkYWtub25nLnZuIiwiZGFuYW5nLnZuIiwiZGllbmJpZW4udm4iLCJkb25nbmFpLnZuIiwiZG9uZ3RoYXAudm4iLCJnaWFsYWkudm4iLCJoYWdpYW5nLnZuIiwiaGFpZHVvbmcudm4iLCJoYWlwaG9uZy52biIsImhhbmFtLnZuIiwiaGFub2kudm4iLCJoYXRpbmgu''@;'; put 'put ''dm4iLCJoYXVnaWFuZy52biIsImhvYWJpbmgudm4iLCJodW5neWVuLnZuIiwia2hhbmhob2Eudm4iLCJraWVuZ2lhbmcudm4iLCJrb250dW0udm4iLCJsYWljaGF1LnZuIiwibGFtZG9uZy52biIsImxhbmdzb24udm4iLCJsYW9jYWkudm4iLCJsb25nYW4udm4iLCJuYW1kaW5oLnZuIiwibmdo''@;'; put 'put ''ZWFuLnZuIiwibmluaGJpbmgudm4iLCJuaW5odGh1YW4udm4iLCJwaHV0aG8udm4iLCJwaHV5ZW4udm4iLCJxdWFuZ2Jpbmgudm4iLCJxdWFuZ25hbS52biIsInF1YW5nbmdhaS52biIsInF1YW5nbmluaC52biIsInF1YW5ndHJpLnZuIiwic29jdHJhbmcudm4iLCJzb25sYS52biIsInRheW5p''@;'; put 'put ''bmgudm4iLCJ0aGFpYmluaC52biIsInRoYWluZ3V5ZW4udm4iLCJ0aGFuaGhvYS52biIsInRoYW5ocGhvaG9jaGltaW5oLnZuIiwidGh1YXRoaWVuaHVlLnZuIiwidGllbmdpYW5nLnZuIiwidHJhdmluaC52biIsInR1eWVucXVhbmcudm4iLCJ2aW5obG9uZy52biIsInZpbmhwaHVjLnZuIiwi''@;'; put 'put ''eWVuYmFpLnZuIiwidnUiLCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIsIndzIiwiY29tLndzIiwiZWR1LndzIiwiZ292LndzIiwibmV0LndzIiwib3JnLndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFc''@;'; put 'put ''dTA1NzUiLCJcdTA5YWNcdTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MmNcdTA2MzJcdTA2MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAz''@;'; put 'put ''YmIiLCJcdTk5OTlcdTZlMmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1N2Ri''@;'; put 'put ''Mlx1N2Q2MS5cdTk5OTlcdTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRcdTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5''@;'; put 'put ''NGJcdTA5MjQiLCJcdTA2ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBcdTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRc''@;'; put 'put ''dTBjM2VcdTBjMzBcdTBjMjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBhMmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2Nc''@;'; put 'put ''dTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBl''@;'; put 'put ''YjJcdTBlYTciLCJcdTBkYmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNc''@;'; put 'put ''dTk1ODAiLCJcdTZmYjNcdTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFc''@;'; put 'put ''dTA2MjdcdTA2NDYiLCJcdTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0''@;'; put 'put ''NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEi''@;'; put 'put ''LCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJc''@;'; put 'put ''dTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUw''@;'; put 'put ''ZTA4Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0''@;'; put 'put ''NFx1MGUxN1x1MGUyMiIsIlx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAi''@;'; put 'put ''LCJcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVkdS55ZSIsImdvdi55ZSIsIm1pbC55ZSIsIm5ldC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEi''@;'; put 'put ''LCJsYXcuemEiLCJtaWwuemEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJub20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8u''@;'; put 'put ''em0iLCJtaWwuem0iLCJuZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28uenciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRl''@;'; put 'put ''bXkiLCJhY2NlbnR1cmUiLCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxp''@;'; put 'put ''YmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwi''@;'; put 'put ''YW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVk''@;'; put 'put ''aWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF3cyIsImF4YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFy''@;'; put 'put ''Z2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwi''@;'; put 'put ''YmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9v''@;'; put 'put ''IiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwi''@;'; put 'put ''YnV5IiwiYnV6eiIsImJ6aCIsImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNh''@;'; put 'put ''cmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJj''@;'; put 'put ''aGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjbGFpbXMiLCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIs''@;'; put 'put ''ImNsb3VkIiwiY2x1YiIsImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVnZSIsImNvbG9nbmUiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0''@;'; put 'put ''aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwiY3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1''@;'; put 'put ''aXNlIiwiY3J1aXNlcyIsImN1aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwiLCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9p''@;'; put 'put ''dHRlIiwiZGVsdGEiLCJkZW1vY3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVjdG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9j''@;'; put 'put ''cyIsImRvY3RvciIsImRvZyIsImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgiLCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwi''@;'; put 'put ''ZW5lcmd5IiwiZW5naW5lZXIiLCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVz''@;'; put 'put ''cyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWRlbGl0eSIsImZpZG8iLCJm''@;'; put 'put ''aWxtIiwiZmluYWwiLCJmaW5hbmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNzIiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJm''@;'; put 'put ''b290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJn''@;'; put 'put ''YWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIs''@;'; put 'put ''Imdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwi''@;'; put 'put ''Z3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJo''@;'; put 'put ''ZXJlIiwiaGVybWVzIiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIs''@;'; put 'put ''Imhvc3RpbmciLCJob3QiLCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwiaHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIs''@;'; put 'put ''ImluYyIsImluZHVzdHJpZXMiLCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImluc3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1''@;'; put 'put ''IiwiaXR2IiwiamFndWFyIiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJqaW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxz''@;'; put 'put ''Iiwia2Vycnlsb2dpc3RpY3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwia2ltIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFj''@;'; put 'put ''YWl4YSIsImxhbWJvcmdoaW5pIiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdv''@;'; put 'put ''IiwibGV4dXMiLCJsZ2J0IiwibGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxv''@;'; put 'put ''YW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5kYmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFu''@;'; put 'put ''YWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51''@;'; put 'put ''IiwibWVyY2siLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1v''@;'; put 'put ''cnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm5hYiIsIm5hZ295YSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIs''@;'; put 'put ''Im5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwi''@;'; put 'put ''b2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGxvIiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xlIiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90''@;'; put 'put ''dCIsIm92aCIsInBhZ2UiLCJwYW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFydHkiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhhcm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwi''@;'; put 'put ''cGh5c2lvIiwicGljcyIsInBpY3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3RhdGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwi''@;'; put 'put ''cHJhbWVyaWNhIiwicHJheGkiLCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWVi''@;'; put 'put ''ZWMiLCJxdWVzdCIsInJhY2luZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1icmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIs''@;'; put 'put ''InJlbnRhbHMiLCJyZXBhaXIiLCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNoYXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29t''@;'; put 'put ''IiwicnN2cCIsInJ1Z2J5IiwicnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIsInNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJs''@;'; put 'put ''Iiwic2FzIiwic2F2ZSIsInNheG8iLCJzYmkiLCJzYnMiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsi''@;'; put 'put ''LCJzZWxlY3QiLCJzZW5lciIsInNlcnZpY2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hhbmdyaWxhIiwic2hhcnAiLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2lsayIsInNpbmEiLCJz''@;'; put 'put ''aW5nbGVzIiwic2l0ZSIsInNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWlsZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEi''@;'; put 'put ''LCJzcGFjZSIsInNwb3J0Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJhbmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNr''@;'; put 'put ''cyIsInN1cHBsaWVzIiwic3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dhdGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIs''@;'; put 'put ''InRheCIsInRheGkiLCJ0Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwidGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRq''@;'; put 'put ''eCIsInRrbWF4eCIsInRtYWxsIiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxl''@;'; put 'put ''cnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIs''@;'; put 'put ''InZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2x2byIsInZvdGUiLCJ2b3Rp''@;'; put 'put ''bmciLCJ2b3RvIiwidm95YWdlIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5uZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWQiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWly''@;'; put 'put ''Iiwid2hvc3dobyIsIndpZW4iLCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3JrIiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhp''@;'; put 'put ''aHVhbiIsInhpbiIsIlx1MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIs''@;'; put 'put ''Ilx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQz''@;'; put 'put ''Mlx1MDQzMCIsIlx1MDQzYVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1''@;'; put 'put ''NWMxYSIsIlx1NWZhZVx1NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBiN1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1''@;'; put 'put ''MzBmMyIsIlx1YzBiY1x1YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIsIlx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1''@;'; put 'put ''MDY0NSIsIlx1NGUyZFx1NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1''@;'; put 'put ''NWU5NyIsIlx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2VkYyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1''@;'; put 'put ''MDYyN1x1MDYzMVx1MDYyN1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYy''@;'; put 'put ''N1x1MDYyYlx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1''@;'; put 'put ''MDYyOCIsIlx1NjczYVx1Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1''@;'; put 'put ''NGUxNlx1NzU0YyIsIlx1NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUx''@;'; put 'put ''YSIsIlx1NGZlMVx1NjA2ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFt''@;'; put 'put ''YSIsInlvdSIsInlvdXR1YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVyaWNoIiwiY28ua3JkIiwiZWR1LmtyZCIsImFydC5wbCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJsaWIu''@;'; put 'put ''ZGUudXMiLCIxMmNoYXJzLmRldiIsIjEyY2hhcnMuaXQiLCIxMmNoYXJzLnBybyIsImNjLnVhIiwiaW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiYTJob3N0ZWQuY29tIiwiY3BzZXJ2ZXIuY29tIiwiYWFhLnZvZGthIiwiKi5vbi1hY29ybi5pbyIsImFjdGl2ZXRyYWlsLmJpeiIsImFkYXB0''@;'; put 'put ''YWJsZS5hcHAiLCJhZG9iZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiYWVtLmxpdmUiLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiYWVtLnBhZ2UiLCJobHgucGFnZSIsImhseDMucGFnZSIsImFkb2JlaW8tc3RhdGljLm5ldCIsImFkb2JlaW9ydW50''@;'; put 'put ''aW1lLm5ldCIsImFmcmljYS5jb20iLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImFrYWRucy5uZXQiLCJha2FtYWkubmV0IiwiYWthbWFpLXN0YWdpbmcubmV0IiwiYWthbWFpZWRnZS5uZXQi''@;'; put 'put ''LCJha2FtYWllZGdlLXN0YWdpbmcubmV0IiwiYWthbWFpaGQubmV0IiwiYWthbWFpaGQtc3RhZ2luZy5uZXQiLCJha2FtYWlvcmlnaW4ubmV0IiwiYWthbWFpb3JpZ2luLXN0YWdpbmcubmV0IiwiYWthbWFpemVkLm5ldCIsImFrYW1haXplZC1zdGFnaW5nLm5ldCIsImVkZ2VrZXkubmV0Iiwi''@;'; put 'put ''ZWRnZWtleS1zdGFnaW5nLm5ldCIsImVkZ2VzdWl0ZS5uZXQiLCJlZGdlc3VpdGUtc3RhZ2luZy5uZXQiLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdvcmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsIm15YW1h''@;'; put 'put ''emUubmV0IiwiZXhlY3V0ZS1hcGkuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImV4ZWN1dGUtYXBpLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLWVhc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMy5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImV4''@;'; put 'put ''ZWN1dGUtYXBpLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUt''@;'; put 'put ''YXBpLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51''@;'; put 'put ''cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiY2xvdWRmcm9udC5uZXQiLCJhdXRoLmFmLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhl''@;'; put 'put ''YXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMi5hbWF6b25j''@;'; put 'put ''b2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTQuYW1hem9uY29nbml0''@;'; put 'put ''by5jb20iLCJhdXRoLmNhLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2Etd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUt''@;'; put 'put ''bm9ydGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTIuYW1hem9uY29nbml0by5j''@;'; put 'put ''b20iLCJhdXRoLmV1LXdlc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguaWwtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnNhLWVhc3Qt''@;'; put 'put ''MS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMi5hbWF6b25jb2duaXRv''@;'; put 'put ''LmNvbSIsImF1dGgtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRo''@;'; put 'put ''LWZpcHMudXMtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY24tbm9y''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwi''@;'; put 'put ''ZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFmLXNv''@;'; put 'put ''dXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFw''@;'; put 'put ''LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJl''@;'; put 'put ''bXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0''@;'; put 'put ''LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9v''@;'; put 'put ''a3MtcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVt''@;'; put 'put ''cnN0dWRpby1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1w''@;'; put 'put ''cm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9k''@;'; put 'put ''LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVk''@;'; put 'put ''aW8tcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LW5vcnRoLTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5l''@;'; put 'put ''dS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2Qu''@;'; put 'put ''ZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1w''@;'; put 'put ''cm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJz''@;'; put 'put ''dHVkaW8tcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnNhLWVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0y''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXBy''@;'; put 'put ''b2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImVtcm5vdGVib29rcy1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIiouY24tbm9ydGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmNuLW5vcnRod2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouYWYtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCIqLmFwLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFw''@;'; put 'put ''LXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFz''@;'; put 'put ''dC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTQuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTEuYWlyZmxv''@;'; put 'put ''dy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiKi5ldS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5pbC1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1jZW50cmFsLTEu''@;'; put 'put ''YWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouc2EtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsIioudXMtd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tLmNuIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtZGVwcmVjYXRlZC5jbi1ub3J0aC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2lu''@;'; put 'put ''dC5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aHdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRl''@;'; put 'put ''LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUu''@;'; put 'put ''YWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1l''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFs''@;'; put 'put ''c3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1v''@;'; put 'put ''YmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVh''@;'; put 'put ''c3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxh''@;'; put 'put ''bWJkYS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLXdlYnNpdGUuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0y''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1z''@;'; put 'put ''b3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3Rh''@;'; put 'put ''Y2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0zLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNv''@;'; put 'put ''dXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3Qt''@;'; put 'put ''NS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFj''@;'; put 'put ''Y2Vzc3BvaW50LmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC01LmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''Zmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl''@;'; put 'put ''c3Nwb2ludC1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNr''@;'; put 'put ''LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWFjY2Vzc3BvaW50LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2Vu''@;'; put 'put ''dHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5k''@;'; put 'put ''dWFsc3RhY2suZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1''@;'; put 'put ''LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFj''@;'; put 'put ''ay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNj''@;'; put 'put ''ZXNzcG9pbnQuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vz''@;'; put 'put ''c3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRl''@;'; put 'put ''cHJlY2F0ZWQuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv''@;'; put 'put ''aW50LmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5l''@;'; put 'put ''dS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMu''@;'; put 'put ''ZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmlsLWNl''@;'; put 'put ''bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFj''@;'; put 'put ''Y2Vzc3BvaW50LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtY2VudHJhbC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3Rh''@;'; put 'put ''Y2subWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLXNvdXRo''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9y''@;'; put 'put ''dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50''@;'; put 'put ''cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLWZpcHMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJtcmFwLmFjY2Vzc3BvaW50LnMzLWdsb2JhbC5hbWF6b25hd3MuY29tIiwiczMtbWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy13ZWJzaXRlLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtd2Vic2l0ZS1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRl''@;'; put 'put ''LXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMt''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5k''@;'; put 'put ''dWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVh''@;'; put 'put ''c3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LWVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFj''@;'; put 'put ''ay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9i''@;'; put 'put ''amVjdC1sYW1iZGEudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3Mi''@;'; put 'put ''LCJsYWJlbGluZy5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcu''@;'; put 'put ''ZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3''@;'; put 'put ''cyIsImxhYmVsaW5nLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9y''@;'; put 'put ''dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMS5zYWdl''@;'; put 'put ''bWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtNC5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5h''@;'; put 'put ''d3MiLCJub3RlYm9vay1maXBzLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3Rl''@;'; put 'put ''Ym9vay5ldS1jZW50cmFsLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LW5vcnRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMS5zYWdl''@;'; put 'put ''bWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2subWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9v''@;'; put 'put ''ay5tZS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMi5zYWdlbWFr''@;'; put 'put ''ZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIu''@;'; put 'put ''YXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVi''@;'; put 'put ''b29rLWZpcHMudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJub3RlYm9vay5jbi1ub3J0aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1lYXN0''@;'; put 'put ''LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3Mi''@;'; put 'put ''LCJzdHVkaW8uYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtY2Vu''@;'; put 'put ''dHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8u''@;'; put 'put ''ZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwi''@;'; put 'put ''c3R1ZGlvLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi1lYXN0LTEuc2Fn''@;'; put 'put ''ZW1ha2VyLmF3cyIsInN0dWRpby51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8u''@;'; put 'put ''Y24tbm9ydGgtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCIqLmV4cGVyaW1lbnRzLnNhZ2VtYWtlci5hd3MiLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3''@;'; put 'put ''YXkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXku''@;'; put 'put ''dXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImFtcGxpZnlhcHAuY29tIiwiKi5hd3NhcHBydW5uZXIuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMu''@;'; put 'put ''Y2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNz''@;'; put 'put ''ZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFw''@;'; put 'put ''LW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1h''@;'; put 'put ''c3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xv''@;'; put 'put ''dWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuY2EtY2VudHJh''@;'; put 'put ''bC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InZmcy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtbm9ydGgt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3''@;'; put 'put ''LWFzc2V0cy5jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRz''@;'; put 'put ''LmF3cy1jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5pbC1jZW50cmFsLTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInZmcy5jbG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5''@;'; put 'put ''Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''d2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVz''@;'; put 'put ''LWVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMu''@;'; put 'put ''Y2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhd3NhcHBzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFmLXNv''@;'; put 'put ''dXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5z''@;'; put 'put ''dGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2Vu''@;'; put 'put ''dHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtbm9ydGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20i''@;'; put 'put ''LCJldS13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJpbC1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJtZS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsu''@;'; put 'put ''Y29tIiwidXMtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2Jl''@;'; put 'put ''YW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tLmNuIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsIioucHJpdmF0ZS5yZXBvc3QuYXdzIiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0''@;'; put 'put ''YWdlLm9ubGluZSIsImFwaWdlZS5pbyIsInBhbmVsLmRldiIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQuY29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJmNS5zaSIsImFydmFuZWRnZS5pciIsInVzZXIuYXNlaW5ldC5u''@;'; put 'put ''ZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIs''@;'; put 'put ''Im15ZnJpdHoubGluayIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJm''@;'; put 'put ''YXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCJiZWFnbGVib2FyZC5pbyIsIiouYmVnZXQuYXBwIiwicGFnZXMuZ2F5IiwiYm5yLmxhIiwiYml0YnVj''@;'; put 'put ''a2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5u''@;'; put 'put ''ZXQiLCIqLnMuYnJhdmUuaW8iLCJzaG9wLmJyZW5kbHkuaHIiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20i''@;'; put 'put ''LCJjYW52YS1hcHBzLmNuIiwiKi5teS5jYW52YXNpdGUuY24iLCJjYW52YS1hcHBzLmNvbSIsIioubXkuY2FudmEuc2l0ZSIsImRyci5hYyIsInV3dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUubXAiLCJhcGkuZ292LnVrIiwiY2RuNzctc3RvcmFnZS5jb20iLCJyc2MuY29udGVudHBy''@;'; put 'put ''b3h5OS5jeiIsInIuY2RuNzcubmV0IiwiY2RuNzctc3NsLm5ldCIsImMuY2RuNzcub3JnIiwicnNjLmNkbjc3Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsInphLmJ6IiwiYnIuY29tIiwiY24uY29tIiwiZGUuY29tIiwiZXUuY29tIiwianBuLmNvbSIsIm1leC5jb20iLCJy''@;'; put 'put ''dS5jb20iLCJzYS5jb20iLCJ1ay5jb20iLCJ1cy5jb20iLCJ6YS5jb20iLCJjb20uZGUiLCJnYi5uZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJzZS5uZXQiLCJ1ay5uZXQiLCJhZS5vcmciLCJjb20uc2UiLCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xlcmsu''@;'; put 'put ''YXBwIiwiY2xlcmtzdGFnZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xldmVyYXBwcy5jYyIsIiouc2VydmljZXMuY2xldmVyLWNsb3VkLmNvbSIsImNsZXZlcmFwcHMuaW8iLCJjbGV2ZXJhcHBzLnRlY2giLCJjbGlj''@;'; put 'put ''a3Jpc2luZy5uZXQiLCJjbG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJlIiwiY2xvdWQtaXAuYml6IiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5jaCIsImNsb3VkbnMuY2wiLCJjbG91ZG5zLmNsdWIiLCJkbnNhYnIuY29tIiwiaXAtZGRucy5jb20iLCJjbG91ZG5zLmN4Iiwi''@;'; put 'put ''Y2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJkZG5zLWlwLm5ldCIsImRucy1jbG91ZC5uZXQiLCJkbnMtZHluYW1pYy5uZXQiLCJjbG91ZG5zLm56IiwiY2xvdWRucy5vcmciLCJpcC1keW5hbWljLm9yZyIsImNsb3VkbnMucGgiLCJjbG91ZG5zLnBybyIsImNsb3Vk''@;'; put 'put ''bnMucHciLCJjbG91ZG5zLnVzIiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiKi5jbG91ZGVyYS5zaXRlIiwiY2Yt''@;'; put 'put ''aXBmcy5jb20iLCJjbG91ZGZsYXJlLWlwZnMuY29tIiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJwYWdlcy5kZXYiLCJyMi5kZXYiLCJ3b3JrZXJzLmRldiIsImNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmVhbnljYXN0Lm5ldCIsImNkbi5jbG91ZGZs''@;'; put 'put ''YXJlY24ubmV0IiwiY2RuLmNsb3VkZmxhcmVnbG9iYWwubmV0IiwiY3VzdC5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5scGcuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMucm1hLmNsb3Vkc2NhbGUuY2giLCJ3bmV4dC5hcHAiLCJjbnB5LmdkbiIsIioub3RhcC5jbyIsImNvLmNhIiwiY28uY29t''@;'; put 'put ''IiwiY29kZWJlcmcucGFnZSIsImNzYi5hcHAiLCJwcmV2aWV3LmNzYi5hcHAiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImN0ZmNsb3VkLm5ldCIsImNvbnZleC5zaXRlIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJt''@;'; put 'put ''aWwucnUiLCJ0ZXN0LnJ1IiwiZHluLmNvc2lkbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFj''@;'; put 'put ''Y2Vzcy5uZXQiLCJjcmFmdC5tZSIsInJlYWxtLmN6Iiwib24uY3Jpc3AuZW1haWwiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cnYuZGV2IiwiY2ZvbGtzLnBsIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwi''@;'; put 'put ''Yml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCJidWlsdHdpdGhkYXJrLmNvbSIsImRhcmtsYW5nLmlvIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwi''@;'; put 'put ''ZGF0dG9sb2NhbC5jb20iLCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImRkbnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluLWlwMjQuZGUiLCJkeW5kbnMxLmRlIiwi''@;'; put 'put ''aG9tZS13ZWJzZXJ2ZXIuZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwiZGRuc3Mub3JnIiwiZGViaWFuLm5ldCIsImRlZmluaW1hLmlvIiwiZGVmaW5pbWEubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFw''@;'; put 'put ''cCIsImRldGEuZGV2IiwiZGZpcm1hLnBsIiwiZGtvbnRvLnBsIiwieW91Mi5wbCIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsInVzLmtnIiwicnNzLm15LmlkIiwiZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5j''@;'; put 'put ''b20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsImR1cnVtaXMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiZHku''@;'; put 'put ''ZmkiLCJ0dW5rLm9yZyIsImR5bmRucy5iaXoiLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6Iiwic2VsZmlwLmJpeiIsIndlYmhvcC5iaXoiLCJmdHBhY2Nlc3MuY2MiLCJnYW1lLXNlcnZlci5jYyIsIm15cGhvdG9zLmNjIiwic2Ny''@;'; put 'put ''YXBwaW5nLmNjIiwiYmxvZ2Rucy5jb20iLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2Rvam8uY29tIiwiZG9lc250ZXhpc3QuY29tIiwiZG9udGV4aXN0LmNvbSIsImRvb21kbnMuY29tIiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5kbnMtYXQtaG9tZS5j''@;'; put 'put ''b20iLCJkeW5kbnMtYXQtd29yay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3Rl''@;'; put 'put ''LmNvbSIsImR5bmRucy1zZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5kbnMtd29yay5jb20iLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20i''@;'; put 'put ''LCJmcm9tLWFrLmNvbSIsImZyb20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWNhLmNvbSIsImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5j''@;'; put 'put ''b20iLCJmcm9tLWlsLmNvbSIsImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1u''@;'; put 'put ''Yy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJv''@;'; put 'put ''bS1yaS5jb20iLCJmcm9tLXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJmcm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwi''@;'; put 'put ''Z2V0bXlpcC5jb20iLCJnb3RkbnMuY29tIiwiaG9iYnktc2l0ZS5jb20iLCJob21lbGludXguY29tIiwiaG9tZXVuaXguY29tIiwiaWFtYWxsYW1hLmNvbSIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1idWxscy1m''@;'; put 'put ''YW4uY29tIiwiaXMtYS1jYXRlcmVyLmNvbSIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIs''@;'; put 'put ''ImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1s''@;'; put 'put ''aWJlcmFsLmNvbSIsImlzLWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhv''@;'; put 'put ''dG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBp''@;'; put 'put ''c3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtY2VydGlm''@;'; put 'put ''aWVkLmNvbSIsImlzLWdvbmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMtaW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zbGljay5jb20iLCJpcy11YmVy''@;'; put 'put ''bGVldC5jb20iLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2NhbmR5LmNvbSIsIm5lYXQtdXJsLmNvbSIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2Vs''@;'; put 'put ''ZmlwLmNvbSIsInNlbGxzLWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlcnZlYmJzLmNvbSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJ0ZWFjaGVzLXlvZ2EuY29tIiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiYXRoLmN4IiwiZnVldHRlcnRkYXNuZXR6''@;'; put 'put ''LmRlIiwiaXN0ZWluZ2Vlay5kZSIsImlzdG1laW4uZGUiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIsInRyYWV1bXRnZXJhZGUuZGUiLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiZHluZG5zLmluZm8iLCJmb3Itb3VyLmlu''@;'; put 'put ''Zm8iLCJncm9rcy10aGUuaW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImtub3dzaXRhbGwuaW5mbyIsInNlbGZpcC5pbmZvIiwid2ViaG9wLmluZm8iLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJhdC1iYW5kLWNhbXAubmV0IiwiYmxv''@;'; put 'put ''Z2Rucy5uZXQiLCJicm9rZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImRuc2FsaWFzLm5ldCIsImRuc2Rvam8ubmV0IiwiZG9lcy1pdC5uZXQiLCJkb250ZXhpc3QubmV0IiwiZHluYWxpYXMubmV0IiwiZHluYXRob21lLm5ldCIsImVuZG9maW50ZXJuZXQubmV0IiwiZnJvbS1hei5uZXQi''@;'; put 'put ''LCJmcm9tLWNvLm5ldCIsImZyb20tbGEubmV0IiwiZnJvbS1ueS5uZXQiLCJnZXRzLWl0Lm5ldCIsImhhbS1yYWRpby1vcC5uZXQiLCJob21lZnRwLm5ldCIsImhvbWVpcC5uZXQiLCJob21lbGludXgubmV0IiwiaG9tZXVuaXgubmV0IiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1jaGVmLm5l''@;'; put 'put ''dCIsImlzLWEtZ2Vlay5uZXQiLCJpc2EtZ2Vlay5uZXQiLCJraWNrcy1hc3MubmV0Iiwib2ZmaWNlLW9uLXRoZS5uZXQiLCJwb2R6b25lLm5ldCIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2VsZmlwLm5ldCIsInNlbGxzLWl0Lm5ldCIsInNlcnZlYmJzLm5ldCIsInNlcnZlZnRwLm5ldCIsInRo''@;'; put 'put ''cnVoZXJlLm5ldCIsIndlYmhvcC5uZXQiLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJzaGFja25ldC5udSIsImJsb2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9yZyIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8ub3JnIiwiZG9lc250ZXhpc3Qub3JnIiwi''@;'; put 'put ''ZG9udGV4aXN0Lm9yZyIsImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bmFsaWFzLm9yZyIsImR5bmRucy5vcmciLCJnby5keW5kbnMub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiZW5kb2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImZyb20tbWUub3JnIiwiZ2Ft''@;'; put 'put ''ZS1ob3N0Lm9yZyIsImdvdGRucy5vcmciLCJob2JieS1zaXRlLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5vcmciLCJob21lbGludXgub3JnIiwiaG9tZXVuaXgub3JnIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIs''@;'; put 'put ''ImlzLWEtY2hlZi5vcmciLCJpcy1hLWdlZWsub3JnIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1saW51eC11c2VyLm9yZyIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1hLXNveGZhbi5vcmciLCJpcy1mb3VuZC5vcmciLCJpcy1sb3N0Lm9yZyIsImlzLXNhdmVkLm9yZyIsImlzLXZlcnktYmFk''@;'; put 'put ''Lm9yZyIsImlzLXZlcnktZXZpbC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXNhLWdlZWsub3JnIiwia2lja3MtYXNzLm9yZyIsIm1pc2NvbmZ1c2VkLm9yZyIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJz''@;'; put 'put ''ZWxmaXAub3JnIiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic3R1ZmYtNC1zYWxlLm9yZyIsIndlYmhvcC5vcmciLCJiZXR0ZXItdGhhbi50diIsImR5bmRucy50diIsIm9uLXRoZS13ZWIudHYiLCJ3b3JzZS10aGFu''@;'; put 'put ''LnR2IiwiaXMtYnkudXMiLCJsYW5kLTQtc2FsZS51cyIsInN0dWZmLTQtc2FsZS51cyIsImR5bmRucy53cyIsIm15cGV0cy53cyIsImRkbnNmcmVlLmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5''@;'; put 'put ''LmNvbSIsInRoZXdvcmtwYy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiZHludjYubmV0IiwiZTQuY3oiLCJlYXN5cGFu''@;'; put 'put ''ZWwuYXBwIiwiZWFzeXBhbmVsLmhvc3QiLCIqLmV3cC5saXZlIiwidHdtYWlsLmNjIiwidHdtYWlsLm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJhdC5lbWYuY2FtcCIsInJ0Lmh0IiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1y''@;'; put 'put ''b290LmZyIiwibXl0dWxlYXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBpLmNvbSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJn''@;'; put 'put ''LmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmci''@;'; put 'put ''LCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUu''@;'; put 'put ''b3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNl''@;'; put 'put ''LmV1Lm9yZyIsInNpLmV1Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2RlLmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVz''@;'; put 'put ''LTEuZXZlbm5vZGUuY29tIiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZlbm5vZGUuY29tIiwicmVsYXkuZXZlcnZhdWx0LmFwcCIsInJlbGF5LmV2ZXJ2YXVsdC5kZXYiLCJleHBvLmFwcCIsInN0YWdpbmcuZXhwby5hcHAiLCJvbmZhYnJpY2EuY29t''@;'; put 'put ''IiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUi''@;'; put 'put ''LCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3Ui''@;'; put 'put ''LCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3Zv''@;'; put 'put ''LnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1''@;'; put 'put ''IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3Ui''@;'; put 'put ''LCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdl''@;'; put 'put ''Y29tcHV0ZS5hcHAiLCJmYXN0bHktZWRnZS5jb20iLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZyZWV0bHMuZmFzdGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZh''@;'; put 'put ''c3RseS5uZXQiLCJnbG9iYWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIubmV0IiwiKi51c2VyLmZtIiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJjb25u''@;'; put 'put ''LnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwibXlkb2Jpc3MuY29t''@;'; put 'put ''IiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZsZHJ2LmNvbSIsImZsdXR0ZXJmbG93LmFwcCIsImZseS5kZXYiLCJzaHcuaW8iLCJlZGdlYXBwLm5ldCIsImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5haSIsImZy''@;'; put 'put ''YW1lci5hcHAiLCJmcmFtZXJjYW52YXMuY29tIiwiZnJhbWVyLm1lZGlhIiwiZnJhbWVyLnBob3RvcyIsImZyYW1lci53ZWJzaXRlIiwiZnJhbWVyLndpa2kiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1v''@;'; put 'put ''cy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIiouZnJ1c2t5LmRlIiwid2llbi5mdW5rZmV1ZXIuYXQiLCJkYWVtb24uYXNpYSIsImRpeC5hc2lhIiwibXlkbnMuYnoiLCIwYW0uanAiLCIwZzAuanAiLCIwajAuanAiLCIwdDAuanAiLCJteWRu''@;'; put 'put ''cy5qcCIsInBndy5qcCIsIndqZy5qcCIsImtleXdvcmQtb24ubmV0IiwibGl2ZS1vbi5uZXQiLCJzZXJ2ZXItb24ubmV0IiwibXlkbnMudHciLCJteWRucy52YyIsIiouZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3Rpbmcu''@;'; put 'put ''YXQiLCJmdXR1cmVtYWlsaW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwiYWxpYXNlczEyMS5jb20iLCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJp''@;'; put 'put ''bmRlcGVuZGVudC1pbnF1ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQu''@;'; put 'put ''anAiLCJnZW50YXBwcy5jb20iLCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImxvY2FsY2VydC5uZXQiLCJsb2NhbGhvc3RjZXJ0Lm5ldCIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwi''@;'; put 'put ''Z2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0''@;'; put 'put ''dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNo''@;'; put 'put ''dS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5Lmpw''@;'; put 'put ''IiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIs''@;'; put 'put ''ImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpw''@;'; put 'put ''IiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAi''@;'; put 'put ''LCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNy''@;'; put 'put ''ZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2Vi''@;'; put 'put ''bGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJncmFwaGljLmRlc2lnbiIsImdvaXAuZGUiLCJibG9nc3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCIqLmhvc3RlZC5hcHAiLCIqLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiYmxvZ3Nwb3Qu''@;'; put 'put ''Y29tLmFyIiwiYmxvZ3Nwb3QuY28uYXQiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5iYSIsImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJi''@;'; put 'put ''bG9nc3BvdC5jaCIsImJsb2dzcG90LmNsIiwiYmxvZ3Nwb3QuY29tLmNvIiwiKi4wZW1tLmNvbSIsImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiYmxvZ3Nwb3QuY29tIiwiY29kZXNwb3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1v''@;'; put 'put ''YmlsaXplci5jb20iLCJ3aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsIiouZ2F0ZXdheS5kZXYiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90''@;'; put 'put ''LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJjbG91ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJs''@;'; put 'put ''b2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90LmluIiwiYmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9n''@;'; put 'put ''c3BvdC5sdSIsImJsb2dzcG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5teCIsImJsb2dzcG90Lm15IiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LmNvLm56''@;'; put 'put ''IiwiYmxvZ3Nwb3QucGUiLCJibG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5zZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90''@;'; put 'put ''LnNuIiwiYmxvZ3Nwb3QudGQiLCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC50dyIsImJsb2dzcG90LnVnIiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC52biIsImJsb2dzcG90LmNvLnphIiwiZ291cGlsZS5mciIsInB5bW50LnVrIiwiY2xvdWRhcHBz''@;'; put 'put ''LmRpZ2l0YWwiLCJsb25kb24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJnb3YubmwiLCJncmFmYW5hLWRldi5uZXQiLCJncmF5amF5bGVhZ3Vlcy5jb20iLCJnXHhmY25zdGlnYmVzdGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEu''@;'; put 'put ''cnMiLCJjb25mLnNlIiwiaFx4ZTRra2luZW4uZmkiLCJocnNuLmRldiIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJoYXRlbmFibG9nLmNvbSIsImhhdGVuYWRpYXJ5LmNvbSIsImhhdGVibG8uanAiLCJoYXRlbmFibG9nLmpwIiwiaGF0ZW5hZGlhcnkuanAi''@;'; put 'put ''LCJoYXRlbmFkaWFyeS5vcmciLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJwYWdlcy1yZXNlYXJjaC5pdC5ocy1oZWlsYnJvbm4uZGUiLCJoZWl5dS5zcGFjZSIsImhlbGlvaG8uc3QiLCJoZWxpb2hvc3QudXMiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3Ns''@;'; put 'put ''LmNvbSIsImhleWZsb3cucGFnZSIsImhleWZsb3cuc2l0ZSIsInJhdmVuZGIuY2xvdWQiLCJyYXZlbmRiLmNvbW11bml0eSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwiKi5raW4ub25lIiwiKi5pZC5wdWIiLCIqLmtpbi5wdWIiLCJzZWNhYXMuaGsi''@;'; put 'put ''LCJob3BsaXguc2hvcCIsIm9yeC5iaXoiLCJiaXouZ2wiLCJiaXoubmciLCJjby5iaXoubmciLCJkbC5iaXoubmciLCJnby5iaXoubmciLCJsZy5iaXoubmciLCJvbi5iaXoubmciLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwicGxjLm5nIiwiaWUudWEi''@;'; put 'put ''LCJob3N0eWhvc3RpbmcuaW8iLCJoZi5zcGFjZSIsInN0YXRpYy5oZi5zcGFjZSIsImh5cGVybm9kZS5pbyIsImlvYmIubmV0IiwiY28uY3oiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQiLCJnci5jb20iLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJzbXVz''@;'; put 'put ''aGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tdnBuLmRlIiwiaW4tZHNsLm5l''@;'; put 'put ''dCIsImluLXZwbi5uZXQiLCJpbi1kc2wub3JnIiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJy''@;'; put 'put ''IiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVn''@;'; put 'put ''LmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImFwcHMtMWFuZDEuY29tIiwibGl2ZS13ZWJzaXRlLmNvbSIsImFwcHMtMWFuZDEubmV0Iiwid2Vic2l0ZWJ1aWxkZXIub25saW5l''@;'; put 'put ''IiwiYXBwLWlvbm9zLnNwYWNlIiwiaW9wc3lzLnNlIiwiKi5kd2ViLmxpbmsiLCJpcGlmb255Lm5ldCIsImlyLm1kIiwiaXMtYS1nb29kLmRldiIsImlzLWEuZGV2IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIs''@;'; put 'put ''InRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3VkLmludGVyaG9zdHNvbHV0aW9ucy5iZSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFz''@;'; put 'put ''dGljLmNsb3VkIiwiamVsZS5jbG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQiLCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRl''@;'; put 'put ''bC5jbG91ZCIsInVrLnByaW1ldGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUudHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiZG9wYWFzLmNvbSIsInBhYXMu''@;'; put 'put ''aG9zdGVkLWJ5LXByZXZpZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMuaWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwicGFhcy5tYXNzaXZlZ3Jp''@;'; put 'put ''ZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9z''@;'; put 'put ''dCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImpjLm5lZW4uaXQiLCJqY2xvdWQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZyYTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImps''@;'; put 'put ''cy1zdG8xLmVsYXN0eC5uZXQiLCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3Np''@;'; put 'put ''dmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNs''@;'; put 'put ''b3VkLnBsIiwibWlyY2xvdWQucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5y''@;'; put 'put ''dSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwid2ViYWRvcnNpdGUuY29tIiwiam91d3dlYi5zaXRlIiwiKi5jbnMuam95ZW50LmNvbSIsIioudHJpdG9uLnpvbmUiLCJqcy5vcmciLCJrYWFz''@;'; put 'put ''LmdnIiwia2hwbGF5Lm5sIiwia2Fwc2kuZmkiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwia3VsZXV2ZW4uY2xvdWQiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIndlYnRoaW5ncy5pbyIsImty''@;'; put 'put ''ZWxsaWFuLm5ldCIsIm95YS50byIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXguc2l0ZSIsImxpYnAycC5kaXJlY3QiLCJydW5jb250YWluZXJzLmRldiIs''@;'; put 'put ''ImNvLmJ1c2luZXNzIiwiY28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29yayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIsImxpbmt5YXJkLWNsb3VkLmNoIiwibGlua3lhcmQuY2xvdWQiLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxh''@;'; put 'put ''bmNlci5saW5vZGUuY29tIiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIsIndlLmJzIiwiZmlsZWdlYXItc2cubWUiLCJnZ2ZmLm5ldCIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9kei5wbCIsInBhYmlhbmljZS5wbCIsInBsb2NrLnBsIiwic2ll''@;'; put 'put ''cmFkei5wbCIsInNraWVybmlld2ljZS5wbCIsInpnaWVyei5wbCIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJsb2htdXMubWUiLCJzZXJ2ZXJzLnJ1biIsImtyYXNuaWsucGwiLCJs''@;'; put 'put ''ZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY2x1YiIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIs''@;'; put 'put ''ImJhcnN5LmRlIiwiYmFyc3kuZGV2IiwiYmFyc3kuZXUiLCJiYXJzeS5nciIsImJhcnN5LmluIiwiYmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3lvbmxpbmUubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJi''@;'; put 'put ''YXJzeS5vcmciLCJiYXJzeS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnJzIiwiYmFyc3kuc2hvcCIsImJhcnN5b25saW5lLnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3kuc3RvcmUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCJiYXJzeS5jby51ayIsImJhcnN5b25s''@;'; put 'put ''aW5lLmNvLnVrIiwiKi5tYWdlbnRvc2l0ZS5jbG91ZCIsImhiLmNsZG1haWwucnUiLCJtYXRsYWIuY2xvdWQiLCJtb2RlbHNjYXBlLmNvbSIsIm13Y2xvdWRub25wcm9kLmNvbSIsInBvbHlzcGFjZS5jb20iLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwibWF6ZXBsYXkuY29tIiwi''@;'; put 'put ''bWNkaXIubWUiLCJtY2Rpci5ydSIsInZwcy5tY2Rpci5ydSIsIm1jcHJlLnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtZWR1c2Fqcy5hcHAiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCJhdG1ldGEuY29tIiwi''@;'; put 'put ''YXBwcy5mYnNieC5jb20iLCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVy''@;'; put 'put ''LmlvIiwiYXp1cmUtYXBpLm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJhenVyZWVkZ2UubmV0IiwiYXp1cmVmZC5uZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0IiwiMi5henVyZXN0YXRpY2FwcHMubmV0IiwiMy5henVyZXN0YXRpY2FwcHMubmV0Iiwi''@;'; put 'put ''NC5henVyZXN0YXRpY2FwcHMubmV0IiwiNS5henVyZXN0YXRpY2FwcHMubmV0IiwiNi5henVyZXN0YXRpY2FwcHMubmV0IiwiNy5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVz''@;'; put 'put ''Mi5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiYXp1cmV3ZWJzaXRlcy5uZXQiLCJjbG91ZGFwcC5uZXQiLCJ0cmFmZmljbWFuYWdlci5uZXQiLCJibG9iLmNvcmUud2luZG93cy5uZXQi''@;'; put 'put ''LCJzZXJ2aWNlYnVzLndpbmRvd3MubmV0Iiwicm91dGluZ3RoZWNsb3VkLmNvbSIsInNuLm15bmV0bmFtZS5uZXQiLCJyb3V0aW5ndGhlY2xvdWQubmV0Iiwicm91dGluZ3RoZWNsb3VkLm9yZyIsImNzeC5jYyIsIm15ZGJzZXJ2ZXIuY29tIiwid2Vic3BhY2Vjb25maWcuZGUiLCJtaXR0d2Fs''@;'; put 'put ''ZC5pbmZvIiwibWl0dHdhbGRzZXJ2ZXIuaW5mbyIsInR5cG8zc2VydmVyLmluZm8iLCJwcm9qZWN0LnNwYWNlIiwibW9keC5kZXYiLCJibW9hdHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20i''@;'; put 'put ''LCJjdXN0b21lci5teXRoaWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5teXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwi''@;'; put 'put ''c3BoaW54Lm15dGhpYy1iZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMuY29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0Znku''@;'; put 'put ''YXBwIiwibmV0bGlmeS5hcHAiLCI0dS5jb20iLCJuZnNob3N0LmNvbSIsImlwZnMubmZ0c3RvcmFnZS5saW5rIiwibmdvLnVzIiwibmdyb2suYXBwIiwibmdyb2stZnJlZS5hcHAiLCJuZ3Jvay5kZXYiLCJuZ3Jvay1mcmVlLmRldiIsIm5ncm9rLmlvIiwiYXAubmdyb2suaW8iLCJhdS5uZ3Jv''@;'; put 'put ''ay5pbyIsImV1Lm5ncm9rLmlvIiwiaW4ubmdyb2suaW8iLCJqcC5uZ3Jvay5pbyIsInNhLm5ncm9rLmlvIiwidXMubmdyb2suaW8iLCJuZ3Jvay5waXp6YSIsIm5ncm9rLnBybyIsInRvcnVuLnBsIiwibmgtc2Vydi5jby51ayIsIm5pbXNpdGUudWsiLCJtbWFmYW4uYml6IiwibXlmdHAuYml6''@;'; put 'put ''Iiwibm8taXAuYml6Iiwibm8taXAuY2EiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ290ZG5zLmNoIiwiM3V0aWxpdGllcy5jb20iLCJibG9nc3l0ZS5jb20iLCJjaXNjb2ZyZWFrLmNvbSIsImRhbW5zZXJ2ZXIuY29tIiwiZGRuc2tpbmcuY29tIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zaXNraW5r''@;'; put 'put ''eS5jb20iLCJkeW5ucy5jb20iLCJnZWVrZ2FsYXh5LmNvbSIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15dm5jLmNvbSIsIm5l''@;'; put 'put ''dC1mcmVha3MuY29tIiwib250aGV3aWZpLmNvbSIsInBvaW50MnRoaXMuY29tIiwicXVpY2tzeXRlcy5jb20iLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmViZWVyLmNvbSIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNl''@;'; put 'put ''cnZlZ2FtZS5jb20iLCJzZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwi''@;'; put 'put ''c3R1ZmZ0b3JlYWQuY29tIiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiZHZyY2FtLmluZm8iLCJpbG92ZWNvbGxlZ2UuaW5mbyIsIm5vLWlwLmluZm8iLCJicmFzaWxpYS5tZSIsImRkbnMubWUiLCJkbnNmb3IubWUiLCJob3B0by5tZSIsImxvZ2ludG8ubWUiLCJu''@;'; put 'put ''b2lwLm1lIiwid2ViaG9wLm1lIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibmhsZmFuLm5ldCIsIm5v''@;'; put 'put ''LWlwLm5ldCIsInBnYWZhbi5uZXQiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicmVkaXJlY3RtZS5uZXQiLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVtaW5lY3JhZnQubmV0Iiwic3l0ZXMubmV0IiwiY2FibGUtbW9kZW0ub3JnIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0''@;'; put 'put ''b2ZyaWVzLm9yZyIsImhvcHRvLm9yZyIsIm1sYmZhbi5vcmciLCJteWZ0cC5vcmciLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5mbGZhbi5vcmciLCJuby1pcC5vcmciLCJyZWFkLWJvb2tzLm9yZyIsInVmY2Zhbi5vcmciLCJ6YXB0by5vcmciLCJuby1pcC5jby51ayIsImdvbGZmYW4udXMi''@;'; put 'put ''LCJub2lwLnVzIiwicG9pbnR0by51cyIsInN0YWdlLm5vZGVhcnQuaW8iLCIqLmRldmVsb3Blci5hcHAiLCJub29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUu''@;'; put 'put ''bmV3cyIsIm5vdGlvbi5zaXRlIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3d3cuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCJzb3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5u''@;'; put 'put ''ZXQiLCJ2cG5kbnMubmV0IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwibnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwibnljLm1uIiwicHJ2Y3kucGFnZSIsIm9ibC5vbmciLCJvYnNlcnZh''@;'; put 'put ''YmxlaHEuY2xvdWQiLCJzdGF0aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsIm9tZy5sb2wiLCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwiMTIzd2Vic2VpdGUuYXQiLCIxMjN3ZWJzaXRlLmJlIiwic2ltcGxlc2l0ZS5jb20uYnIiLCIxMjN3ZWJzaXRlLmNoIiwic2lt''@;'; put 'put ''cGxlc2l0ZS5jb20iLCIxMjN3ZWJzZWl0ZS5kZSIsIjEyM2hqZW1tZXNpZGUuZGsiLCIxMjNtaXdlYi5lcyIsIjEyM2tvdGlzaXZ1LmZpIiwiMTIzc2l0ZXdlYi5mciIsInNpbXBsZXNpdGUuZ3IiLCIxMjNob21lcGFnZS5pdCIsIjEyM3dlYnNpdGUubHUiLCIxMjN3ZWJzaXRlLm5sIiwiMTIz''@;'; put 'put ''aGplbW1lc2lkZS5ubyIsInNlcnZpY2Uub25lIiwic2ltcGxlc2l0ZS5wbCIsIjEyM3BhZ2luYXdlYi5wdCIsIjEyM21pbnNpZGEuc2UiLCJpcy1hLWZ1bGxzdGFjay5kZXYiLCJpcy1jb29sLmRldiIsImlzLW5vdC1hLmRldiIsImxvY2FscGxheWVyLmRldiIsImlzLWxvY2FsLm9yZyIsIm9w''@;'; put 'put ''ZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29t''@;'; put 'put ''IiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsIioub3JhY2xlY2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLnVrIiwidGVjaC5vcmFuZ2UiLCJjYW4ucmUiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5j''@;'; put 'put ''b20iLCJza3lnZWFyYXBwLmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIioud2VicGFhcy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZXhsLmNvbSIs''@;'; put 'put ''ImdvdHBhbnRoZW9uLmNvbSIsInBhbnRoZW9uc2l0ZS5pbyIsIioucGF5d2hpcmwuY29tIiwiKi54bWl0LmNvIiwieG1pdC5kZXYiLCJtYWRldGhpcy5zaXRlIiwic3J2LnVzIiwiZ2guc3J2LnVzIiwiZ2wuc3J2LnVzIiwibGszLnJ1IiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIs''@;'; put 'put ''Im9uLXdlYi5mciIsIioudXBzdW4uYXBwIiwidXBzdW5hcHAuY29tIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBs''@;'; put 'put ''YXR0ZXJwLnVzIiwicGxleS5nYW1lcyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1lY2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcm90b25ldC5p''@;'; put 'put ''byIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29tIiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsIm15cW5hcGNsb3VkLmNuIiwiYWxw''@;'; put 'put ''aGEtbXlxbmFwY2xvdWQuY29tIiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsIm15Y2xvdWRuYXMuY29tIiwibXluYXNjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwibGFkZXNrLmNvbSIsInFidXNlci5jb20iLCIqLnF1aXBlbGVtZW50cy5j''@;'; put 'put ''b20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJteXJhZHdlYi5uZXQiLCJzZXJ2ZXJuYW1lLnVzIiwid2ViLmluIiwiaW4ubmV0IiwibXlyZGJ4LmlvIiwic2l0ZS5yYi1ob3N0aW5nLmlv''@;'; put 'put ''IiwiKi5vbi1yYW5jaGVyLmNsb3VkIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJpby5pbyIsInJhdnBhZ2UuY28uaWwiLCJyZWFkdGhlZG9jcy1ob3N0ZWQuY29tIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImluc3RhbmNlcy5zcGF3bi5jYyIsIm9ucmVuZGVyLmNvbSIsImFwcC5y''@;'; put 'put ''ZW5kZXIuY29tIiwicmVwbGl0LmFwcCIsImlkLnJlcGxpdC5hcHAiLCJmaXJld2FsbGVkcmVwbGl0LmNvIiwiaWQuZmlyZXdhbGxlZHJlcGxpdC5jbyIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbGl0LmRldiIsImFyY2hlci5yZXBsaXQuZGV2IiwiYm9uZXMucmVwbGl0LmRldiIsImNh''@;'; put 'put ''bmFyeS5yZXBsaXQuZGV2IiwiZ2xvYmFsLnJlcGxpdC5kZXYiLCJoYWNrZXIucmVwbGl0LmRldiIsImlkLnJlcGxpdC5kZXYiLCJqYW5ld2F5LnJlcGxpdC5kZXYiLCJraW0ucmVwbGl0LmRldiIsImtpcmEucmVwbGl0LmRldiIsImtpcmsucmVwbGl0LmRldiIsIm9kby5yZXBsaXQuZGV2Iiwi''@;'; put 'put ''cGFyaXMucmVwbGl0LmRldiIsInBpY2FyZC5yZXBsaXQuZGV2IiwicGlrZS5yZXBsaXQuZGV2IiwicHJlcmVsZWFzZS5yZXBsaXQuZGV2IiwicmVlZC5yZXBsaXQuZGV2IiwicmlrZXIucmVwbGl0LmRldiIsInNpc2tvLnJlcGxpdC5kZXYiLCJzcG9jay5yZXBsaXQuZGV2Iiwic3RhZ2luZy5y''@;'; put 'put ''ZXBsaXQuZGV2Iiwic3VsdS5yZXBsaXQuZGV2IiwidGFycGl0LnJlcGxpdC5kZXYiLCJ0ZWFtcy5yZXBsaXQuZGV2IiwidHVja2VyLnJlcGxpdC5kZXYiLCJ3ZXNsZXkucmVwbGl0LmRldiIsIndvcmYucmVwbGl0LmRldiIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJl''@;'; put 'put ''c2luc3RhZ2luZy5pbyIsImh6Yy5pbyIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwiYXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwicnViLmRlIiwicnVoci11bmktYm9jaHVtLmRlIiwiaW8ubm9jLnJ1aHIt''@;'; put 'put ''dW5pLWJvY2h1bS5kZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0''@;'; put 'put ''NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0''@;'; put 'put ''M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCJyYXMucnUiLCJueWF0LmFwcCIsIjE4MHIuY29tIiwiZG9qaW4uY29tIiwic2FrdXJhdGFuLmNvbSIsInNh''@;'; put 'put ''a3VyYXdlYi5jb20iLCJ4MC5jb20iLCIyLWQuanAiLCJib25hLmpwIiwiY3JhcC5qcCIsImRheW5pZ2h0LmpwIiwiZWVrLmpwIiwiZmxvcC5qcCIsImhhbGZtb29uLmpwIiwiamVlei5qcCIsIm1hdHJpeC5qcCIsIm1pbW96YS5qcCIsIml2b3J5Lm5lLmpwIiwibWFpbC1ib3gubmUuanAiLCJt''@;'; put 'put ''aW50cy5uZS5qcCIsIm1va3VyZW4ubmUuanAiLCJvcGFsLm5lLmpwIiwic2FrdXJhLm5lLmpwIiwic3Vtb21vLm5lLmpwIiwidG9wYXoubmUuanAiLCJuZXRnYW1lcnMuanAiLCJueWFudGEuanAiLCJvMG8wLmpwIiwicmR5LmpwIiwicmdyLmpwIiwicnVsZXouanAiLCJzMy5pc2swMS5zYWt1''@;'; put 'put ''cmFzdG9yYWdlLmpwIiwiczMuaXNrMDIuc2FrdXJhc3RvcmFnZS5qcCIsInNhbG9vbi5qcCIsInNibG8uanAiLCJza3IuanAiLCJ0YW5rLmpwIiwidWgtb2guanAiLCJ1bmRvLmpwIiwicnMud2ViYWNjZWwuanAiLCJ1c2VyLndlYmFjY2VsLmpwIiwid2Vic296YWkuanAiLCJ4aWkuanAiLCJz''@;'; put 'put ''cXVhcmVzLm5ldCIsImpwbi5vcmciLCJraXJhcmEuc3QiLCJ4MC50byIsImZyb20udHYiLCJzYWt1cmEudHYiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsIiouMDAxLnRlc3QuY29kZS1idWlsZGVyLXN0Zy5w''@;'; put 'put ''bGF0Zm9ybS5zYWxlc2ZvcmNlLmNvbSIsIiouZC5jcm0uZGV2IiwiKi53LmNybS5kZXYiLCIqLndhLmNybS5kZXYiLCIqLndiLmNybS5kZXYiLCIqLndjLmNybS5kZXYiLCIqLndkLmNybS5kZXYiLCIqLndlLmNybS5kZXYiLCIqLndmLmNybS5kZXYiLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5j''@;'; put 'put ''b20iLCJsb2dvaXAuZGUiLCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJjb2NrcGl0LmZyLXBhci5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0''@;'; put 'put ''aW9ucy5mbmMuZnItcGFyLnNjdy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3Rh''@;'; put 'put ''bmNlcy5zY3cuY2xvdWQiLCJwdWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQiLCJjb2NrcGl0Lm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdl''@;'; put 'put ''YnNpdGUubmwtYW1zLnNjdy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiY29ja3BpdC5wbC13YXcuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdh''@;'; put 'put ''dy5zY3cuY2xvdWQiLCJzY2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImNsaWVudC5zY3J5cHRlZC5pbyIsImZpcmV3YWxs''@;'; put 'put ''LWdhdGV3YXkuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQiLCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRh''@;'; put 'put ''dC5uZXQiLCJzZWxsZnkuc3RvcmUiLCJtaW5pc2l0ZS5tcyIsInNlbnNlZXJpbmcubmV0Iiwic2VydmVib2x0LmNsb3VkIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsImFzLnNoLmNuIiwic2hlZXp5LmdhbWVzIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlm''@;'; put 'put ''eS5jb20iLCJzaG9waXRzaXRlLmNvbSIsInNob3B3YXJlLnNob3AiLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0Iiwic21h''@;'; put 'put ''bGwtd2ViLm9yZyIsImFlcm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmlu''@;'; put 'put ''YWlyZS5mciIsInZwNC5tZSIsIiouc25vd2ZsYWtlLmFwcCIsIioucHJpdmF0ZWxpbmsuc25vd2ZsYWtlLmFwcCIsInN0cmVhbWxpdC5hcHAiLCJzdHJlYW1saXRhcHAuY29tIiwidHJ5LXNub3dwbG93LmNvbSIsIm1hZmVsby5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJzcmh0LnNp''@;'; put 'put ''dGUiLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiaW5kLm1vbSIsImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIsIm15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNw''@;'; put 'put ''cmVhZHNob3AuY2giLCJteXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZpIiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJl''@;'; put 'put ''YWRzaG9wLm5ldCIsIm15c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51ayIsInctY29ycC1zdGF0aWNibGl0ei5jb20iLCJ3LWNyZWRlbnRpYWxsZXNzLXN0YXRpY2JsaXR6LmNvbSIs''@;'; put 'put ''Inctc3RhdGljYmxpdHouY29tIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwicnVucy5vbnN0YWNraXQuY2xvdWQiLCJzdGFja2l0LmdnIiwic3RhY2tpdC5yb2NrcyIsInN0YWNraXQucnVuIiwic3RhY2tpdC56b25lIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwiYXBpLnN0ZGxp''@;'; put 'put ''Yi5jb20iLCJmZWVkYmFjay5hYyIsImZvcm1zLmFjIiwiYXNzZXNzbWVudHMuY3giLCJjYWxjdWxhdG9ycy5jeCIsImZ1bm5lbHMuY3giLCJwYXlub3cuY3giLCJxdWl6emVzLmN4IiwicmVzZWFyY2hlZC5jeCIsInRlc3RzLmN4Iiwic3VydmV5cy5zbyIsInN0b3JlYmFzZS5zdG9yZSIsInN0''@;'; put 'put ''b3JpcHJlc3MuYXBwIiwic3RvcmouZmFybSIsInN0cmFwaWFwcC5jb20iLCJtZWRpYS5zdHJhcGlhcHAuY29tIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5qcy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0Iiwi''@;'; put 'put ''c3RyZWFrLWxpbmsuY29tIiwic3RyZWFrbGlua3MuY29tIiwic3RyZWFrdXNlcmNvbnRlbnQuY29tIiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInV0d2VudGUuaW8iLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3lu''@;'; put 'put ''Y2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFz''@;'; put 'put ''Lm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwiZGlyZWN0LnF1aWNrY29ubmVjdC50byIsInZwbnBsdXMudG8iLCJteXRhYml0LmNvbSIsIm15dGFiaXQuY28uaWwiLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsInRzLm5ldCIsIiou''@;'; put 'put ''Yy50cy5uZXQiLCJnZGEucGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInRhdmV1c2VyY29udGVudC5jb20iLCJwLnRhd2suZW1haWwiLCJwLnRhd2t0by5lbWFpbCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9y''@;'; put 'put ''ZyIsInRlbGViaXQuYXBwIiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIs''@;'; put 'put ''ImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdv''@;'; put 'put ''cmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwidG93bm5ld3Mtc3RhZ2luZy5jb20iLCIxMmhwLmF0IiwiMml4LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwi''@;'; put 'put ''NGxpbWEuY2giLCJsaW1hLWNpdHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVzIiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxp''@;'; put 'put ''bWEuem9uZSIsIioudHJhbnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1Iiwic2l0ZS50cmFuc2lwLm1lIiwiKi50cmFuc3VybC5ubCIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdv''@;'; put 'put ''ci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJkaXNrc3RhdGlvbi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwiKi51YmVy''@;'; put 'put ''c3BhY2UuZGUiLCJ1YmVyLnNwYWNlIiwiaGsuY29tIiwiaW5jLmhrIiwibHRkLmhrIiwiaGsub3JnIiwiaXQuY29tIiwidW5pc29uLXNlcnZpY2VzLmNsb3VkIiwidmlydHVhbC11c2VyLmRlIiwidmlydHVhbHVzZXIuZGUiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwi''@;'; put 'put ''b3JnLnl0IiwicnMuYmEiLCJiaWVsc2tvLnBsIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmluZm8iLCJ1cy5vcmciLCJ2LnVhIiwiZXhwcmVzcy52YWwucnVuIiwid2ViLnZhbC5ydW4iLCJ2ZXJjZWwuYXBwIiwidjAuYnVpbGQiLCJ2ZXJjZWwuZGV2IiwidnVzZXJjb250''@;'; put 'put ''ZW50Lm5ldCIsIm5vdy5zaCIsIjIwMzguaW8iLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9vcmxvcGVyLmNsb3VkIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5jb20iLCJ3ZWJmbG93LmlvIiwid2ViZmxvd3Rlc3QuaW8iLCIqLndlYmhhcmUuZGV2Iiwi''@;'; put 'put ''Ym9va29ubGluZS5hcHAiLCJob3RlbHdpdGhmbGlnaHQuY29tIiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwiY3ByYXBpZC5jb20iLCJwbGVza25zLmNvbSIsIndwMi5ob3N0IiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsIndwc3F1YXJlZC5zaXRlIiwiKi53''@;'; put 'put ''YWRsLnRvcCIsInJlbW90ZXdkLmNvbSIsImJveC5jYSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsIndtZmxhYnMub3JnIiwid2RoLmFwcCIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwid2l4c2l0ZS5jb20iLCJ3aXhzdHVkaW8uY29t''@;'; put 'put ''IiwiZWRpdG9yeC5pbyIsIndpeHN0dWRpby5pbyIsIndpeC5ydW4iLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWlu''@;'; put 'put ''Zm9ydW0ubmV0IiwiYWZmaW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWtseWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20i''@;'; put 'put ''LCJ1Mi1sb2NhbC54bmJheS5jb20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIs''@;'; put 'put ''InlvbWJvLm1lIiwieW5oLmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9yZyIsInphcC5jbG91ZCIsInplYWJ1ci5hcHAiLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0ucmVkdWNlKChI''@;'; put 'put ''LHopPT57Y29uc3QgWj16LnJlcGxhY2UoL14oXCpcLnxcISkvLCIiKSxVPWYudG9BU0NJSShaKSxLPXouY2hhckF0KDApO2lmKEguaGFzKFUpKXRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgcnVsZXMgZm91bmQgZm9yICR7en0gKCR7VX0pYCk7cmV0dXJuIEguc2V0KFUse3J1bGU6eixzdWZm''@;'; put 'put ''aXg6WixwdW55U3VmZml4OlUsd2lsZGNhcmQ6IioiPT09SyxleGNlcHRpb246IiEiPT09S30pLEh9LG5ldyBNYXApLE89e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBu''@;'; put 'put ''byBtb3JlIHRoYW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVM''@;'; put 'put ''X1RPT19MT05HOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBu''@;'; put 'put ''YW1lIGxhYmVsIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVzLiJ9LEU9SD0+e2lmKCJzdHJpbmciIT10eXBlb2YgSCl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO2xldCB6PUguc2xpY2UoMCkudG9M''@;'; put 'put ''b3dlckNhc2UoKTsiLiI9PT16LmNoYXJBdCh6Lmxlbmd0aC0xKSYmKHo9ei5zbGljZSgwLHoubGVuZ3RoLTEpKTtjb25zdCBaPShIPT57Y29uc3Qgej1mLnRvQVNDSUkoSCk7aWYoei5sZW5ndGg8MSlyZXR1cm4iRE9NQUlOX1RPT19TSE9SVCI7aWYoei5sZW5ndGg+MjU1KXJldHVybiJET01B''@;'; put 'put ''SU5fVE9PX0xPTkciO2NvbnN0IFo9ei5zcGxpdCgiLiIpO2xldCBVO2ZvcihsZXQgSz0wO0s8Wi5sZW5ndGg7KytLKXtpZihVPVpbS10sIVUubGVuZ3RoKXJldHVybiJMQUJFTF9UT09fU0hPUlQiO2lmKFUubGVuZ3RoPjYzKXJldHVybiJMQUJFTF9UT09fTE9ORyI7aWYoIi0iPT09VS5jaGFy''@;'; put 'put ''QXQoMCkpcmV0dXJuIkxBQkVMX1NUQVJUU19XSVRIX0RBU0giO2lmKCItIj09PVUuY2hhckF0KFUubGVuZ3RoLTEpKXJldHVybiJMQUJFTF9FTkRTX1dJVEhfREFTSCI7aWYoIS9eW2EtejAtOVwtX10rJC8udGVzdChVKSlyZXR1cm4iTEFCRUxfSU5WQUxJRF9DSEFSUyJ9fSkoeik7aWYoWily''@;'; put 'put ''ZXR1cm57aW5wdXQ6SCxlcnJvcjp7bWVzc2FnZTpPW1pdLGNvZGU6Wn19O2NvbnN0IFU9e2lucHV0OkgsdGxkOm51bGwsc2xkOm51bGwsZG9tYWluOm51bGwsc3ViZG9tYWluOm51bGwsbGlzdGVkOiExfSxLPXouc3BsaXQoIi4iKTtpZigibG9jYWwiPT09S1tLLmxlbmd0aC0xXSlyZXR1cm4g''@;'; put 'put ''VTtjb25zdCBYPSgpPT4oL3huLS0vLnRlc3QoeikmJihVLmRvbWFpbiYmKFUuZG9tYWluPWYudG9BU0NJSShVLmRvbWFpbikpLFUuc3ViZG9tYWluJiYoVS5zdWJkb21haW49Zi50b0FTQ0lJKFUuc3ViZG9tYWluKSkpLFUpLG5lPShIPT57Y29uc3Qgej1mLnRvQVNDSUkoSCkuc3BsaXQoIi4i''@;'; put 'put ''KTtmb3IobGV0IFo9MDtaPHoubGVuZ3RoO1orKyl7Y29uc3QgVT16LnNsaWNlKFopLmpvaW4oIi4iKSxLPUEuZ2V0KFUpO2lmKEspcmV0dXJuIEt9cmV0dXJuIG51bGx9KSh6KTtpZighbmUpcmV0dXJuIEsubGVuZ3RoPDI/VTooVS50bGQ9Sy5wb3AoKSxVLnNsZD1LLnBvcCgpLFUuZG9tYWlu''@;'; put 'put ''PVtVLnNsZCxVLnRsZF0uam9pbigiLiIpLEsubGVuZ3RoJiYoVS5zdWJkb21haW49Sy5wb3AoKSksWCgpKTtVLmxpc3RlZD0hMDtjb25zdCBzZT1uZS5zdWZmaXguc3BsaXQoIi4iKSxoZT1LLnNsaWNlKDAsSy5sZW5ndGgtc2UubGVuZ3RoKTtyZXR1cm4gbmUuZXhjZXB0aW9uJiZoZS5wdXNo''@;'; put 'put ''KHNlLnNoaWZ0KCkpLFUudGxkPXNlLmpvaW4oIi4iKSwhaGUubGVuZ3RofHwobmUud2lsZGNhcmQmJihzZS51bnNoaWZ0KGhlLnBvcCgpKSxVLnRsZD1zZS5qb2luKCIuIikpLCFoZS5sZW5ndGgpfHwoVS5zbGQ9aGUucG9wKCksVS5kb21haW49W1Uuc2xkLFUudGxkXS5qb2luKCIuIiksaGUu''@;'; put 'put ''bGVuZ3RoJiYoVS5zdWJkb21haW49aGUuam9pbigiLiIpKSksWCgpfSxCPUg9PkgmJkUoSCkuZG9tYWlufHxudWxsLEY9SD0+e2NvbnN0IHo9RShIKTtyZXR1cm4hKCF6LmRvbWFpbnx8IXoubGlzdGVkKX07ai5kZWZhdWx0PXtwYXJzZTpFLGdldDpCLGlzVmFsaWQ6Rn0sai5lcnJvckNvZGVz''@;'; put 'put ''PU8sai5nZXQ9QixqLmlzVmFsaWQ9RixqLnBhcnNlPUV9LDQ5NDY6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTky''@;'; put 'put ''LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhl''@;'; put 'put ''ciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJr''@;'; put 'put ''ZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2Rl''@;'; put 'put ''IjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoi''@;'; put 'put ''c3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0s''@;'; put 'put ''ImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1j''@;'; put 'put ''ZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7''@;'; put 'put ''ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6''@;'; put 'put ''IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtl''@;'; put 'put ''eSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJp''@;'; put 'put ''diI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6''@;'; put 'put ''IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDUyMDc6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQw''@;'; put 'put ''NTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1NiIsImlk''@;'; put 'put ''IjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24i''@;'; put 'put ''Onsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1''@;'; put 'put ''MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBNTEyIjp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQi''@;'; put 'put ''OiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9LCJlY2RzYS13aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNo''@;'; put 'put ''YTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwic2hhMzg0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJz''@;'; put 'put ''aGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJkc2EiLCJo''@;'; put 'put ''YXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhh''@;'; put 'put ''c2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6''@;'; put 'put ''InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoi''@;'; put 'put ''cm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5''@;'; put 'put ''MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0sIlJTQS1NRDUiOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMw''@;'; put 'put ''MjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScpfSwxMzA4OnRlPT57InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIi''@;'; put 'put ''LCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMzIwODp0ZT0+eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNf''@;'; put 'put ''SUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkxNTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMx''@;'; put 'put ''MDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwiU19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19J''@;'; put 'put ''WFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJFQUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDks''@;'; put 'put ''IkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExL''@;'; put 'put ''IjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjkyLCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8i''@;'; put 'put ''OjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04iOjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6''@;'; put 'put ''MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJPVE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTks''@;'; put 'put ''IkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIsIkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6''@;'; put 'put ''MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VUIjo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4''@;'; put 'put ''LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lHVVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6''@;'; put 'put ''MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwiU0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQ''@;'; put 'put ''Uk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwiU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NM''@;'; put 'put ''X09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjow''@;'; put 'put ''LCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JV''@;'; put 'put ''RyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9O''@;'; put 'put ''IjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNTTF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2''@;'; put 'put ''Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NMX09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjox''@;'; put 'put ''MDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1''@;'; put 'put ''X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01FVEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lO''@;'; put 'put ''RV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1''@;'; put 'put ''NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNB''@;'; put 'put ''X1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9QU1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoy''@;'; put 'put ''LCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9Jyl9LDk3OTk6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1KU09OLnBh''@;'; put 'put ''cnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRm''@;'; put 'put ''ZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVh''@;'; put 'put ''NjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2''@;'; put 'put ''NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIz''@;'; put 'put ''MDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNm''@;'; put 'put ''YThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIx''@;'; put 'put ''NjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2Yjdl''@;'; put 'put ''ZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0''@;'; put 'put ''NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAx''@;'; put 'put ''NSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFj''@;'; put 'put ''MjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFj''@;'; put 'put ''NjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYx''@;'; put 'put ''ODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThh''@;'; put 'put ''MDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoi''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0''@;'; put 'put ''MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcw''@;'; put 'put ''OTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQy''@;'; put 'put ''ZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFm''@;'; put 'put ''MmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2Ey''@;'; put 'put ''YWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMw''@;'; put 'put ''OGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVm''@;'; put 'put ''OTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgz''@;'; put 'put ''NjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRj''@;'; put 'put ''NTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcx''@;'; put 'put ''ZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNj''@;'; put 'put ''MTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2Vl''@;'; put 'put ''MmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFl''@;'; put 'put ''YjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3''@;'; put 'put ''MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhh''@;'; put 'put ''MWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJm''@;'; put 'put ''ZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRl''@;'; put 'put ''NGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3''@;'; put 'put ''YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2Ji''@;'; put 'put ''ZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJk''@;'; put 'put ''YjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAy''@;'; put 'put ''ODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIz''@;'; put 'put ''MzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3''@;'; put 'put ''YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3''@;'; put 'put ''NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJk''@;'; put 'put ''ZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdl''@;'; put 'put ''ODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2''@;'; put 'put ''NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDg1OTc6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz17aTg6IjYuNi4xIn19LDI1NjI6dGU9PnsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQw''@;'; put 'put ''LjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMu''@;'; put 'put ''NC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40''@;'; put 'put ''MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVf''@;'; put 'put ''Xz17fTtmdW5jdGlvbiBfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkzMzY3OV9fKHRlKXt2YXIgaj1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdGVdO2lmKHZvaWQgMCE9PWopcmV0dXJuIGouZXhwb3J0czt2YXIgZD1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdGVdPXtpZDp0ZSxsb2Fk''@;'; put 'put ''ZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdGVdLmNhbGwoZC5leHBvcnRzLGQsZC5leHBvcnRzLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yOTMzNjc5X18pLGQubG9hZGVkPSEwLGQuZXhwb3J0c31fX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkzMzY3''@;'; put 'put ''OV9fLmQ9KHRlLGopPT57Zm9yKHZhciBkIGluIGopX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI5MzM2NzlfXy5vKGosZCkmJiFfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkzMzY3OV9fLm8odGUsZCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSxkLHtlbnVtZXJhYmxlOiEwLGdldDpq''@;'; put 'put ''W2RdfSl9LF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yOTMzNjc5X18uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoe2lmKCJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yOTMzNjc5X18ubz0odGUsaik9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxqKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkzMzY3OV9fLnI9dGU9''@;'; put 'put ''Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LF9fbmVzdGVkX3dl''@;'; put 'put ''YnBhY2tfcmVxdWlyZV8yOTMzNjc5X18ubm1kPXRlPT4odGUucGF0aHM9W10sdGUuY2hpbGRyZW58fCh0ZS5jaGlsZHJlbj1bXSksdGUpO3ZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz1fX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkzMzY3OV9fKDM2MDcpO3JldHVybiBfX25lc3Rl''@;'; put 'put ''ZF93ZWJwYWNrX2V4cG9ydHNfX30pKCksbW9kdWxlLmV4cG9ydHM9ZCgpfSw1OTQ4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihBKXtyZXR1cm4gQSYmQS5fX2VzTW9kdWxlP0E6e2RlZmF1bHQ6QX19O09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShqLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxqLmlzU3BlY2lhbE1pc3Npbmc9ai5jaG9pY2VWYWxpZGF0b3I9ai5jb25maXJtYXRpb25WYWxpZGF0b3I9ai51cmxWYWxpZGF0b3I9dm9pZCAwO2NvbnN0IGg9UyhkKDEyOTU0KSk7ai51cmxWYWxpZGF0b3I9KEEsTSk9PiEh''@;'; put 'put ''aC5kZWZhdWx0LmlzSHR0cFVyaShBKXx8ISFoLmRlZmF1bHQuaXNIdHRwc1VyaShBKXx8IiI9PT1BfHxNLGouY29uZmlybWF0aW9uVmFsaWRhdG9yPUE9PiEwPT09QXx8ITE9PT1BLGouY2hvaWNlVmFsaWRhdG9yPShBLE0sTyk9PkE+MCYmQTw9TXx8TyxqLmlzU3BlY2lhbE1pc3Npbmc9QT0+''@;'; put 'put ''KCJzdHJpbmciIT10eXBlb2YgQXx8IUEuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChBKX0sMTMyNDcodGUsail7InVzZSBzdHJpY3QiO3ZhciBoO2ouWT12b2lkIDAsKGg9ai5ZfHwoai5ZPXt9KSkuU2FzVml5YT0iU0FTVklZQSIs''@;'; put 'put ''aC5TYXM5PSJTQVM5IixoLlNhc2pzPSJTQVNKUyJ9LDI1MDAxKHRlLGopeyJ1c2Ugc3RyaWN0IjtqLkM9dm9pZCAwLGouQz0oaCxvPTEsST0xMDk5NTExNjI3Nzc2KT0+e2lmKDA9PT1oKXJldHVybiIwIEIiO2g9aD5JP0k6aDtjb25zdCBBPW88MD8wOm8sTT1NYXRoLmZsb29yKE1hdGgubG9n''@;'; put 'put ''KGgpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oaC9NYXRoLnBvdygxMDI0LE0pKS50b0ZpeGVkKEEpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW01dfX0sNDI5MjQodGUpe3ZhciBqPXt2ZXJzaW9uOiIxLjE1LjAifTtqWzQzN109ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4''@;'; put 'put ''MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ''@;'; put 'put ''WltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUy''@;'; put 'put ''MGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTVi''@;'; put 'put ''XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUy''@;'; put 'put ''NTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1''@;'; put 'put ''MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzYyMF09ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+''@;'; put 'put ''P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUwMTA1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2''@;'; put 'put ''XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAxN2NceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUy''@;'; put 'put ''NTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4''@;'; put 'put ''XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVc''@;'; put 'put ''dTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQo''@;'; put 'put ''byldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgx''@;'; put 'put ''OVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUw''@;'; put 'put ''Mzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2Jh''@;'; put 'put ''XHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUy''@;'; put 'put ''NTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZh''@;'; put 'put ''XHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNh''@;'; put 'put ''YVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1vKSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6aCxkZWM6U319''@;'; put 'put ''KCksals4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAx''@;'; put 'put ''MjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhm''@;'; put 'put ''Nlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1''@;'; put 'put ''MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThc''@;'; put 'put ''dTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIs''@;'; put 'put ''Uz1bXSxoPXt9LG89MDsyNTYhPW87KytvKTY1NTMzIT09ZC5jaGFyQ29kZUF0KG8pJiYoaFtkLmNoYXJBdChvKV09byksU1tvXT1kLmNoYXJBdChvKTtyZXR1cm57ZW5jOmgsZGVjOlN9fSgpLGpbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc''@;'; put 'put ''eDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWpr''@;'; put 'put ''bG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1''@;'; put 'put ''MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFc''@;'; put 'put ''dTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNl''@;'; put 'put ''XHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhm''@;'; put 'put ''N1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzg1N109''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7''@;'; put 'put ''PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhm''@;'; put 'put ''Ylx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1''@;'; put 'put ''MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThc''@;'; put 'put ''dTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEw''@;'; put 'put ''IixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1vKSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6aCxkZWM6U319KCksals4NjFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgw''@;'; put 'put ''Nlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hp''@;'; put 'put ''amtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVk''@;'; put 'put ''XHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUz''@;'; put 'put ''NFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1''@;'; put 'put ''MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhi''@;'; put 'put ''N1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1vKSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6aCxkZWM6U319KCksals4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBk''@;'; put 'put ''PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5P''@;'; put 'put ''UFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4Zjhc''@;'; put 'put ''eGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1''@;'; put 'put ''MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2''@;'; put 'put ''YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1''@;'; put 'put ''MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1vKSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6aCxkZWM6U319KCks''@;'; put 'put ''als4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0''@;'; put 'put ''NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1''@;'; put 'put ''MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQz''@;'; put 'put ''OVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1''@;'; put 'put ''MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0''@;'; put 'put ''MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2''@;'; put 'put ''XHhhNFx1MjVhMFx4YTAiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzg3NF09ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJc''@;'; put 'put ''eDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc''@;'; put 'put ''XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk''@;'; put 'put ''XHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUx''@;'; put 'put ''MFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1''@;'; put 'put ''MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0''@;'; put 'put ''N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIsUz1bXSxoPXt9LG89MDsyNTYh''@;'; put 'put ''PW87KytvKTY1NTMzIT09ZC5jaGFyQ29kZUF0KG8pJiYoaFtkLmNoYXJBdChvKV09byksU1tvXT1kLmNoYXJBdChvKTtyZXR1cm57ZW5jOmgsZGVjOlN9fSgpLGpbODk1XT1mdW5jdGlvbigpe2Zvcih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgw''@;'; put 'put ''ZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9''@;'; put 'put ''flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUwMTdlXHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAx''@;'; put 'put ''NjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNc''@;'; put 'put ''dTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1''@;'; put 'put ''MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFc''@;'; put 'put ''eGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsUz1bXSxoPXt9LG89MDsyNTYhPW87KytvKTY1NTMzIT09ZC5jaGFyQ29kZUF0KG8pJiYoaFtkLmNoYXJBdChvKV09byksU1tvXT1kLmNoYXJBdChvKTtyZXR1cm57ZW5jOmgsZGVjOlN9fSgpLGpbOTMy''@;'; put 'put ''XT1mdW5jdGlvbigpe3ZhciBvLGQ9W10sUz17fSxoPVtdO2ZvcihoWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQl''@;'; put 'put ''JicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1''@;'; put 'put ''ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1ZmY3N1x1ZmY3OFx1ZmY3OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4''@;'; put 'put ''Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5Mlx1ZmY5M1x1ZmY5NFx1ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1''@;'; put 'put ''ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMF1bb11dPTArbyxkWzArb109aFswXVtvXSk7Zm9yKGhbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVc''@;'; put 'put ''dTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMw''@;'; put 'put ''MDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUy''@;'; put 'put ''MTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1''@;'; put 'put ''MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1''@;'; put 'put ''MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMjldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEyOV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMjldW29dXT0zMzAyNCtvLGRbMzMwMjQrb109aFsxMjldW29dKTtmb3IoaFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZc''@;'; put 'put ''dWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZm''@;'; put 'put ''MzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNc''@;'; put 'put ''dWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMw''@;'; put 'put ''NGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVc''@;'; put 'put ''dTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMw''@;'; put 'put ''ODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzMF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzBdW29dXT0zMzI4MCtvLGRbMzMyODArb109aFsxMzBdW29dKTtmb3IoaFsxMzFdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRc''@;'; put 'put ''dTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMw''@;'; put 'put ''ZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZmZmRcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFc''@;'; put 'put ''dTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAz''@;'; put 'put ''OThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNc''@;'; put 'put ''dTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzMV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzFdW29dXT0zMzUzNitvLGRbMzM1MzYrb109aFsxMzFdW29dKTtmb3IoaFsxMzJd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBc''@;'; put 'put ''dTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZc''@;'; put 'put ''dTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1''@;'; put 'put ''MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzMl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzJdW29dXT0zMzc5MitvLGRbMzM3OTIrb109aFsxMzJdW29d''@;'; put 'put ''KTtmb3IoaFsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZc''@;'; put 'put ''dTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMz''@;'; put 'put ''MjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVc''@;'; put 'put ''dTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzNV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzVdW29dXT0zNDU2MCtvLGRbMzQ1NjAr''@;'; put 'put ''b109aFsxMzVdW29dKTtmb3IoaFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1''@;'; put 'put ''MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVc''@;'; put 'put ''dTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcw''@;'; put 'put ''YmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFc''@;'; put 'put ''dTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzNl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzZdW29dXT0zNDgx''@;'; put 'put ''NitvLGRbMzQ4MTYrb109aFsxMzZdW29dKTtmb3IoaFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZc''@;'; put 'put ''dTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2''@;'; put 'put ''ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRc''@;'; put 'put ''dTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVm''@;'; put 'put ''ZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNc''@;'; put 'put ''dTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgy''@;'; put 'put ''ZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNc''@;'; put 'put ''dTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzN11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsx''@;'; put 'put ''MzddW29dXT0zNTA3MitvLGRbMzUwNzIrb109aFsxMzddW29dKTtmb3IoaFsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3Zjlc''@;'; put 'put ''dTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0''@;'; put 'put ''MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2Zc''@;'; put 'put ''dTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4''@;'; put 'put ''MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJc''@;'; put 'put ''dTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0''@;'; put 'put ''NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFc''@;'; put 'put ''dTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzOF1bb10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKFNbaFsxMzhdW29dXT0zNTMyOCtvLGRbMzUzMjgrb109aFsxMzhdW29dKTtmb3IoaFsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNc''@;'; put 'put ''dTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThi''@;'; put 'put ''NzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFc''@;'; put 'put ''dWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5''@;'; put 'put ''YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFc''@;'; put 'put ''dTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkz''@;'; put 'put ''MjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZc''@;'; put 'put ''dTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzOV1b''@;'; put 'put ''b10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzldW29dXT0zNTU4NCtvLGRbMzU1ODQrb109aFsxMzldW29dKTtmb3IoaFsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFc''@;'; put 'put ''dTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVm''@;'; put 'put ''ODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhc''@;'; put 'put ''dThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4''@;'; put 'put ''MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNc''@;'; put 'put ''dTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcy''@;'; put 'put ''ZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVc''@;'; put 'put ''dThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDBdLmxlbmd0aDsrK28pNjU1''@;'; put 'put ''MzMhPT1oWzE0MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDBdW29dXT0zNTg0MCtvLGRbMzU4NDArb109aFsxNDBdW29dKTtmb3IoaFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJc''@;'; put 'put ''dTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZk''@;'; put 'put ''NjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFc''@;'; put 'put ''dTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTcz''@;'; put 'put ''NDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJc''@;'; put 'put ''dTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4''@;'; put 'put ''M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVc''@;'; put 'put ''dTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDFdLmxl''@;'; put 'put ''bmd0aDsrK28pNjU1MzMhPT1oWzE0MV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDFdW29dXT0zNjA5NitvLGRbMzYwOTYrb109aFsxNDFdW29dKTtmb3IoaFsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZc''@;'; put 'put ''dTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThi''@;'; put 'put ''ODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZc''@;'; put 'put ''dTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4''@;'; put 'put ''ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThc''@;'; put 'put ''dTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVj''@;'; put 'put ''MDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZc''@;'; put 'put ''dTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7''@;'; put 'put ''byE9aFsxNDJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDJdW29dXT0zNjM1MitvLGRbMzYzNTIrb109aFsxNDJdW29dKTtmb3IoaFsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUx''@;'; put 'put ''NDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNc''@;'; put 'put ''dTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1''@;'; put 'put ''YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFc''@;'; put 'put ''dTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4''@;'; put 'put ''NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhc''@;'; put 'put ''dTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxvPTA7byE9aFsxNDNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDNdW29dXT0zNjYwOCtvLGRbMzY2MDgrb109aFsxNDNdW29dKTtmb3IoaFsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5''@;'; put 'put ''OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVc''@;'; put 'put ''dThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0''@;'; put 'put ''NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdc''@;'; put 'put ''dTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2''@;'; put 'put ''YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZc''@;'; put 'put ''dTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0NF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDRdW29dXT0zNjg2NCtvLGRbMzY4NjQrb109aFsxNDRdW29dKTtmb3IoaFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdj''@;'; put 'put ''Y2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFc''@;'; put 'put ''dTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdk''@;'; put 'put ''OWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZc''@;'; put 'put ''dTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYy''@;'; put 'put ''NTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFc''@;'; put 'put ''dTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUz''@;'; put 'put ''ZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDVdW29dXT0zNzEyMCtvLGRbMzcxMjArb109aFsxNDVdW29dKTtmb3IoaFsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1''@;'; put 'put ''ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVc''@;'; put 'put ''dTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3''@;'; put 'put ''ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFc''@;'; put 'put ''dTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZk''@;'; put 'put ''MjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNc''@;'; put 'put ''dTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThh''@;'; put 'put ''ZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDZdW29dXT0zNzM3NitvLGRbMzczNzYrb109aFsxNDZdW29dKTtmb3IoaFsxNDddPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTky''@;'; put 'put ''NDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFc''@;'; put 'put ''dTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYy''@;'; put 'put ''OTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZc''@;'; put 'put ''dTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcy''@;'; put 'put ''NzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2Yzdc''@;'; put 'put ''dTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2''@;'; put 'put ''NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDddW29dXT0zNzYzMitvLGRbMzc2MzIrb109aFsxNDddW29dKTtmb3IoaFsx''@;'; put 'put ''NDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0''@;'; put 'put ''OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVc''@;'; put 'put ''dTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODVcdWZmZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3''@;'; put 'put ''N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdc''@;'; put 'put ''dTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVl''@;'; put 'put ''MDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFc''@;'; put 'put ''dTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVj''@;'; put 'put ''M2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDhdW29dXT0zNzg4OCtvLGRbMzc4ODgrb109aFsxNDhd''@;'; put 'put ''W29dKTtmb3IoaFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4''@;'; put 'put ''NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNc''@;'; put 'put ''dTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgx''@;'; put 'put ''OWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdc''@;'; put 'put ''dTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVl''@;'; put 'put ''NzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlc''@;'; put 'put ''dTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVj''@;'; put 'put ''ZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDldW29dXT0zODE0NCtvLGRbMzgx''@;'; put 'put ''NDQrb109aFsxNDldW29dKTtmb3IoaFsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkw''@;'; put 'put ''YTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJc''@;'; put 'put ''dTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3''@;'; put 'put ''Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJc''@;'; put 'put ''dTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUx''@;'; put 'put ''YTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlc''@;'; put 'put ''dTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1''@;'; put 'put ''YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTBdW29dXT0z''@;'; put 'put ''ODQwMCtvLGRbMzg0MDArb109aFsxNTBdW29dKTtmb3IoaFsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYz''@;'; put 'put ''ZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhc''@;'; put 'put ''dTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdm''@;'; put 'put ''Y2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZc''@;'; put 'put ''dTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRl''@;'; put 'put ''ODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNc''@;'; put 'put ''dTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZi''@;'; put 'put ''NzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1MV1bb10uY2hhckNvZGVBdCgwKSYmKFNb''@;'; put 'put ''aFsxNTFdW29dXT0zODY1NitvLGRbMzg2NTYrb109aFsxNTFdW29dKTtmb3IoaFsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3''@;'; put 'put ''MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRc''@;'; put 'put ''dTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRl''@;'; put 'put ''YjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZc''@;'; put 'put ''dTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUw''@;'; put 'put ''NDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1Ml1bb10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKFNbaFsxNTJdW29dXT0zODkxMitvLGRbMzg5MTIrb109aFsxNTJdW29dKTtmb3IoaFsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUw''@;'; put 'put ''ZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBc''@;'; put 'put ''dTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUx''@;'; put 'put ''ZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRc''@;'; put 'put ''dTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUz''@;'; put 'put ''MGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBc''@;'; put 'put ''dTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0''@;'; put 'put ''NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1''@;'; put 'put ''M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTNdW29dXT0zOTE2OCtvLGRbMzkxNjgrb109aFsxNTNdW29dKTtmb3IoaFsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0''@;'; put 'put ''ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2Jc''@;'; put 'put ''dTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2''@;'; put 'put ''MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNc''@;'; put 'put ''dTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3''@;'; put 'put ''ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVc''@;'; put 'put ''dTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5''@;'; put 'put ''MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTRdLmxlbmd0aDsrK28p''@;'; put 'put ''NjU1MzMhPT1oWzE1NF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTRdW29dXT0zOTQyNCtvLGRbMzk0MjQrb109aFsxNTRdW29dKTtmb3IoaFsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRm''@;'; put 'put ''NWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJc''@;'; put 'put ''dTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTVi''@;'; put 'put ''NzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNc''@;'; put 'put ''dTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVj''@;'; put 'put ''YmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZc''@;'; put 'put ''dTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVl''@;'; put 'put ''NDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTVd''@;'; put 'put ''Lmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTVdW29dXT0zOTY4MCtvLGRbMzk2ODArb109aFsxNTVdW29dKTtmb3IoaFsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVl''@;'; put 'put ''ZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNc''@;'; put 'put ''dTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVm''@;'; put 'put ''ZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNc''@;'; put 'put ''dTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYw''@;'; put 'put ''ZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNc''@;'; put 'put ''dTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYx''@;'; put 'put ''YzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxv''@;'; put 'put ''PTA7byE9aFsxNTZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTZdW29dXT0zOTkzNitvLGRbMzk5MzYrb109aFsxNTZdW29dKTtmb3IoaFsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJc''@;'; put 'put ''dTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYz''@;'; put 'put ''ODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdc''@;'; put 'put ''dTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0''@;'; put 'put ''ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJc''@;'; put 'put ''dTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2''@;'; put 'put ''MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxvPTA7byE9aFsxNTddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTddW29dXT00MDE5MitvLGRbNDAxOTIrb109aFsxNTddW29dKTtmb3IoaFsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVc''@;'; put 'put ''dTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3''@;'; put 'put ''Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRc''@;'; put 'put ''dTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5''@;'; put 'put ''MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZc''@;'; put 'put ''dTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZh''@;'; put 'put ''MWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNThdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNThdW29dXT00MDQ0OCtvLGRbNDA0NDgrb109aFsxNThdW29dKTtmb3IoaFsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhc''@;'; put 'put ''dTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZi''@;'; put 'put ''YjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFc''@;'; put 'put ''dTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZk''@;'; put 'put ''MzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThc''@;'; put 'put ''dTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZl''@;'; put 'put ''MzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJc''@;'; put 'put ''dTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTldW29dXT00MDcwNCtvLGRbNDA3MDQrb109aFsxNTldW29dKTtmb3IoaFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNc''@;'; put 'put ''dTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcw''@;'; put 'put ''M2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdWZmZmRcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZc''@;'; put 'put ''dTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcy''@;'; put 'put ''MzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFc''@;'; put 'put ''dTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTcz''@;'; put 'put ''YmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2Fc''@;'; put 'put ''dTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyNF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjRdW29dXT01NzM0NCtvLGRbNTczNDQrb109aFsyMjRdW29dKTtmb3IoaFsyMjVdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVc''@;'; put 'put ''dTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1''@;'; put 'put ''YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZc''@;'; put 'put ''dTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2''@;'; put 'put ''ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRc''@;'; put 'put ''dTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3''@;'; put 'put ''YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRc''@;'; put 'put ''dTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyNV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjVdW29dXT01NzYwMCtvLGRbNTc2MDArb109aFsyMjVdW29dKTtmb3Io''@;'; put 'put ''aFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNc''@;'; put 'put ''dTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdh''@;'; put 'put ''MzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2Rc''@;'; put 'put ''dTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdi''@;'; put 'put ''NGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRc''@;'; put 'put ''dTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdj''@;'; put 'put ''NThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJc''@;'; put 'put ''dTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyNl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjZdW29dXT01Nzg1NitvLGRbNTc4NTYrb109aFsy''@;'; put 'put ''MjZdW29dKTtmb3IoaFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJc''@;'; put 'put ''dTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdk''@;'; put 'put ''ZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVc''@;'; put 'put ''dTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdm''@;'; put 'put ''NGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVc''@;'; put 'put ''dTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgw''@;'; put 'put ''NTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFc''@;'; put 'put ''dTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyN11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjddW29dXT01ODExMitvLGRb''@;'; put 'put ''NTgxMTIrb109aFsyMjddW29dKTtmb3IoaFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhc''@;'; put 'put ''dTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgx''@;'; put 'put ''ZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJc''@;'; put 'put ''dTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgz''@;'; put 'put ''MzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBc''@;'; put 'put ''dTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0''@;'; put 'put ''NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRc''@;'; put 'put ''dTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyOF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjhdW29d''@;'; put 'put ''XT01ODM2OCtvLGRbNTgzNjgrb109aFsyMjhdW29dKTtmb3IoaFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRc''@;'; put 'put ''dTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2''@;'; put 'put ''M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJc''@;'; put 'put ''dTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3''@;'; put 'put ''NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZc''@;'; put 'put ''dTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4''@;'; put 'put ''ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNc''@;'; put 'put ''dTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyOV1bb10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KFNbaFsyMjldW29dXT01ODYyNCtvLGRbNTg2MjQrb109aFsyMjldW29dKTtmb3IoaFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNc''@;'; put 'put ''dTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThh''@;'; put 'put ''MzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRc''@;'; put 'put ''dThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThi''@;'; put 'put ''NTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhc''@;'; put 'put ''dThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThk''@;'; put 'put ''MDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJc''@;'; put 'put ''dThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzMF1bb10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKFNbaFsyMzBdW29dXT01ODg4MCtvLGRbNTg4ODArb109aFsyMzBdW29dKTtmb3IoaFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRc''@;'; put 'put ''dThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThl''@;'; put 'put ''ZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdc''@;'; put 'put ''dThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkw''@;'; put 'put ''MGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZc''@;'; put 'put ''dTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkx''@;'; put 'put ''YWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhc''@;'; put 'put ''dTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzFdLmxlbmd0aDsrK28pNjU1MzMhPT1o''@;'; put 'put ''WzIzMV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzFdW29dXT01OTEzNitvLGRbNTkxMzYrb109aFsyMzFdW29dKTtmb3IoaFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2Fc''@;'; put 'put ''dTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0''@;'; put 'put ''MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRc''@;'; put 'put ''dTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2''@;'; put 'put ''MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2Jc''@;'; put 'put ''dTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3''@;'; put 'put ''NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNc''@;'; put 'put ''dTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzJdLmxlbmd0aDsr''@;'; put 'put ''K28pNjU1MzMhPT1oWzIzMl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzJdW29dXT01OTM5MitvLGRbNTkzOTIrb109aFsyMzJdW29dKTtmb3IoaFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNc''@;'; put 'put ''dTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5''@;'; put 'put ''NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJc''@;'; put 'put ''dTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlh''@;'; put 'put ''ZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZc''@;'; put 'put ''dTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTli''@;'; put 'put ''ZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhc''@;'; put 'put ''dTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsy''@;'; put 'put ''MzNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzM11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzNdW29dXT01OTY0OCtvLGRbNTk2NDgrb109aFsyMzNdW29dKTtmb3IoaFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRc''@;'; put 'put ''dTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlk''@;'; put 'put ''ZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRc''@;'; put 'put ''dTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlm''@;'; put 'put ''NjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxvPTA7byE9aFsyMzRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzNF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzRdW29dXT01OTkwNCtvLGRbNTk5MDQrb109aFsyMzRdW29dKTtmb3IoaFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRm''@;'; put 'put ''ZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFc''@;'; put 'put ''dTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVj''@;'; put 'put ''YmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZc''@;'; put 'put ''dTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3''@;'; put 'put ''YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2Zc''@;'; put 'put ''dTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzN11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzddW29dXT02MDY3MitvLGRbNjA2NzIrb109aFsyMzddW29dKTtmb3IoaFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2''@;'; put 'put ''YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdc''@;'; put 'put ''dTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZmZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThi''@;'; put 'put ''NTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2Nc''@;'; put 'put ''dTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkz''@;'; put 'put ''YzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNc''@;'; put 'put ''dTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzOF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzhdW29dXT02MDkyOCtvLGRbNjA5Mjgrb109aFsyMzhdW29dKTtmb3IoaFsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZm''@;'; put 'put ''MDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFc''@;'; put 'put ''dTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUz''@;'; put 'put ''OTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZc''@;'; put 'put ''dTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYx''@;'; put 'put ''MzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVc''@;'; put 'put ''dWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZk''@;'; put 'put ''ODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNTBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI1MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNTBdW29dXT02NGUzK28sZFs2NGUzK29dPWhbMjUwXVtvXSk7Zm9yKGhbMjUxXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0''@;'; put 'put ''XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3''@;'; put 'put ''NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVj''@;'; put 'put ''XHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4''@;'; put 'put ''YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEw''@;'; put 'put ''XHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5''@;'; put 'put ''MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJj''@;'; put 'put ''XHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjUxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNTFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjUxXVtvXV09NjQyNTYrbyxkWzY0MjU2K29dPWhbMjUxXVtvXSk7Zm9yKGhbMjUyXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjUyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNTJdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjUyXVtvXV09NjQ1MTIrbyxkWzY0NTEyK29dPWhbMjUyXVtvXSk7cmV0''@;'; put 'put ''dXJue2VuYzpTLGRlYzpkfX0oKSxqWzkzNl09ZnVuY3Rpb24oKXt2YXIgbyxkPVtdLFM9e30saD1bXTtmb3IoaFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4''@;'; put 'put ''MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFswXS5sZW5ndGg7KytvKTY1NTMzIT09aFswXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzBdW29dXT0wK28sZFswK29dPWhbMF1bb10pO2Zvciho''@;'; put 'put ''WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1''@;'; put 'put ''NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3''@;'; put 'put ''NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1''@;'; put 'put ''NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVl''@;'; put 'put ''Zlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1''@;'; put 'put ''NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2''@;'; put 'put ''Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1''@;'; put 'put ''NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEyOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTI5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEyOV1bb11dPTMzMDI0K28sZFszMzAyNCtvXT1oWzEy''@;'; put 'put ''OV1bb10pO2ZvcihoWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMFx1NGZiMVx1NGZiMlx1NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZiOFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1''@;'; put 'put ''NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1NGZkNlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZm''@;'; put 'put ''Mlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAwNlx1NTAwN1x1NTAwOFx1NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1''@;'; put 'put ''NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1NTAzNFx1NTAzNVx1NTAzNlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0''@;'; put 'put ''Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1Ylx1NTA1ZFx1NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1''@;'; put 'put ''NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4''@;'; put 'put ''Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5ZFx1NTA5ZVx1NTA5Zlx1NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1''@;'; put 'put ''NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTMwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzMF1bb11dPTMzMjgwK28sZFsz''@;'; put 'put ''MzI4MCtvXT1oWzEzMF1bb10pO2ZvcihoWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1''@;'; put 'put ''NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBkZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBl''@;'; put 'put ''YVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1''@;'; put 'put ''NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTExZlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEy''@;'; put 'put ''Ylx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1''@;'; put 'put ''NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4''@;'; put 'put ''ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1''@;'; put 'put ''NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzMV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTMxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzMV1bb11d''@;'; put 'put ''PTMzNTM2K28sZFszMzUzNitvXT1oWzEzMV1bb10pO2ZvcihoWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1''@;'; put 'put ''NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIy''@;'; put 'put ''Nlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1''@;'; put 'put ''NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4''@;'; put 'put ''M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1''@;'; put 'put ''NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJk''@;'; put 'put ''N1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1''@;'; put 'put ''NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzMl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTMyXVtvXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''U1toWzEzMl1bb11dPTMzNzkyK28sZFszMzc5MitvXT1oWzEzMl1bb10pO2ZvcihoWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1''@;'; put 'put ''NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1NTMzNlx1NTMzN1x1NTMzOFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0''@;'; put 'put ''ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1''@;'; put 'put ''NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNhYlx1NTNhY1x1NTNhZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNi''@;'; put 'put ''OFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1''@;'; put 'put ''NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0''@;'; put 'put ''OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2YVx1NTQ2Ylx1NTQ2Y1x1NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1''@;'; put 'put ''NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTMzXVtvXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoU1toWzEzM11bb11dPTM0MDQ4K28sZFszNDA0OCtvXT1oWzEzM11bb10pO2ZvcihoWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1''@;'; put 'put ''NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRlNFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRm''@;'; put 'put ''OVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1''@;'; put 'put ''NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1''@;'; put 'put ''M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1''@;'; put 'put ''NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVhNFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTVi''@;'; put 'put ''MFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1''@;'; put 'put ''NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhb''@;'; put 'put ''MTM0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzNF1bb11dPTM0MzA0K28sZFszNDMwNCtvXT1oWzEzNF1bb10pO2ZvcihoWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1''@;'; put 'put ''NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYz''@;'; put 'put ''OFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1''@;'; put 'put ''NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4''@;'; put 'put ''NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1''@;'; put 'put ''NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZj''@;'; put 'put ''NFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1''@;'; put 'put ''NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzNV0ubGVuZ3RoOysr''@;'; put 'put ''byk2NTUzMyE9PWhbMTM1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzNV1bb11dPTM0NTYwK28sZFszNDU2MCtvXT1oWzEzNV1bb10pO2ZvcihoWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1''@;'; put 'put ''NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1NTczMVx1NTczMlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0''@;'; put 'put ''MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1''@;'; put 'put ''NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1NTc5NFx1NTc5NVx1NTc5Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdh''@;'; put 'put ''NVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdiZVx1NTdiZlx1NTdjMFx1NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdjN1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1''@;'; put 'put ''NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1NTdlOVx1NTdlYVx1NTdlYlx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdm''@;'; put 'put ''N1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1''@;'; put 'put ''NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1NTgzN1x1NTgzOFx1NTgzOVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEz''@;'; put 'put ''Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTM2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzNl1bb11dPTM0ODE2K28sZFszNDgxNitvXT1oWzEzNl1bb10pO2ZvcihoWzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1''@;'; put 'put ''NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2''@;'; put 'put ''MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1NTg3NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1''@;'; put 'put ''NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThh''@;'; put 'put ''Nlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1NThiOVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1''@;'; put 'put ''NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThkOVx1NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThl''@;'; put 'put ''NVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1NThmZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1''@;'; put 'put ''NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG89MDtvIT1oWzEzN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTM3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzN11bb11dPTM1MDcyK28sZFszNTA3MitvXT1oWzEzN11bb10pO2ZvcihoWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2''@;'; put 'put ''YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1''@;'; put 'put ''NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTlj''@;'; put 'put ''Mlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1''@;'; put 'put ''NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWEx''@;'; put 'put ''OVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1''@;'; put 'put ''NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTM4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzOF1bb11dPTM1MzI4K28sZFszNTMyOCtvXT1oWzEzOF1bb10pO2ZvcihoWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1NWE3MVx1NWE3Mlx1NWE3M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4''@;'; put 'put ''Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5M1x1NWE5NFx1NWE5NVx1NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1''@;'; put 'put ''NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFhOVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1NWFiMVx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFj''@;'; put 'put ''M1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1''@;'; put 'put ''NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFmNVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1NWFmZFx1NWFmZVx1NWFmZlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIw''@;'; put 'put ''OFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIxYlx1NWIxY1x1NWIxZFx1NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIyMlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1''@;'; put 'put ''NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIyZlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1NWIzYVx1NWIzYlx1NWIzY1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0''@;'; put 'put ''Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzEzOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTM5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzEzOV1bb11dPTM1NTg0K28sZFszNTU4NCtvXT1oWzEzOV1bb10pO2ZvcihoWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3''@;'; put 'put ''N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1''@;'; put 'put ''NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJkNVx1NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJl''@;'; put 'put ''Nlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1''@;'; put 'put ''NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0''@;'; put 'put ''N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1NWM2OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1''@;'; put 'put ''NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNh''@;'; put 'put ''NVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0MF1bb11dPTM1ODQwK28sZFszNTg0MCtvXT1oWzE0MF1bb10pO2ZvcihoWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNj''@;'; put 'put ''YVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1''@;'; put 'put ''NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQx''@;'; put 'put ''MVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1''@;'; put 'put ''NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1''@;'; put 'put ''YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1''@;'; put 'put ''NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5''@;'; put 'put ''YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0MV1bb11dPTM2MDk2K28sZFszNjA5NitvXT1oWzE0MV1bb10pO2ZvcihoWzE0Ml09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1NWRhOFx1NWRhOVx1NWRhYVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRi''@;'; put 'put ''M1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRiY1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRjNFx1NWRjNlx1NWRjN1x1NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRjY1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1''@;'; put 'put ''NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZFx1ZmZmZFx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUw''@;'; put 'put ''MFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyNFx1NWUyNVx1NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUyY1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1''@;'; put 'put ''NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1NWU0ZFx1NWU0ZVx1NWU0Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1''@;'; put 'put ''YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2ZVx1NWU2Zlx1NWU3MFx1NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1''@;'; put 'put ''NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1NWVhYlx1NWVhY1x1NWVhZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWVi''@;'; put 'put ''ZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0Ml1bb11dPTM2MzUyK28sZFszNjM1MitvXT1oWzE0Ml1bb10pO2Zv''@;'; put 'put ''cihoWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVjZFx1NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVk''@;'; put 'put ''ZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1NWVmMFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1''@;'; put 'put ''NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYz''@;'; put 'put ''NFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1NWY0OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1''@;'; put 'put ''NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5''@;'; put 'put ''M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1''@;'; put 'put ''NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZm''@;'; put 'put ''MFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0M11bb11dPTM2NjA4K28sZFszNjYwOCtvXT1o''@;'; put 'put ''WzE0M11bb10pO2ZvcihoWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAy''@;'; put 'put ''NFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1''@;'; put 'put ''NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4''@;'; put 'put ''OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1''@;'; put 'put ''NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBl''@;'; put 'put ''M1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1''@;'; put 'put ''NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEz''@;'; put 'put ''YVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQ0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0NF1bb11dPTM2ODY0K28s''@;'; put 'put ''ZFszNjg2NCtvXT1oWzE0NF1bb10pO2ZvcihoWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1''@;'; put 'put ''OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2ZFx1NjE2ZVx1NjE2Zlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1''@;'; put 'put ''NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1NjE4ZFx1NjE4Zlx1NjE5MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5''@;'; put 'put ''OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFhZVx1NjFhZlx1NjFiMFx1NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFiNVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1''@;'; put 'put ''NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFjNFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1NjFkMFx1NjFkM1x1NjFkNVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFk''@;'; put 'put ''ZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFlZlx1NjFmMFx1NjFmMVx1NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFmN1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1''@;'; put 'put ''NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIwNFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIz''@;'; put 'put ''MVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQ1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0NV1b''@;'; put 'put ''b11dPTM3MTIwK28sZFszNzEyMCtvXT1oWzE0NV1bb10pO2ZvcihoWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1''@;'; put 'put ''Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1''@;'; put 'put ''NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJj''@;'; put 'put ''Ylx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1''@;'; put 'put ''NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0''@;'; put 'put ''MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1NjM1ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1''@;'; put 'put ''NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5''@;'; put 'put ''ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQ2XVtvXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoU1toWzE0Nl1bb11dPTM3Mzc2K28sZFszNzM3NitvXT1oWzE0Nl1bb10pO2ZvcihoWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNj''@;'; put 'put ''Y1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1''@;'; put 'put ''NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZm''@;'; put 'put ''ZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1''@;'; put 'put ''NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3''@;'; put 'put ''MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1''@;'; put 'put ''NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRj''@;'; put 'put ''MVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTQ3XVtvXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoU1toWzE0N11bb11dPTM3NjMyK28sZFszNzYzMitvXT1oWzE0N11bb10pO2ZvcihoWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRl''@;'; put 'put ''M1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRlY1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRmNVx1NjRmNlx1NjRmN1x1NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRmY1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1''@;'; put 'put ''NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1NjUxNFx1NjUxNVx1NjUxNlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUy''@;'; put 'put ''MFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUyN1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1''@;'; put 'put ''NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3''@;'; put 'put ''Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1''@;'; put 'put ''NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1NjViN1x1NjViOFx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVj''@;'; put 'put ''YVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0OF0ubGVuZ3RoOysrbyk2NTUzMyE9''@;'; put 'put ''PWhbMTQ4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0OF1bb11dPTM3ODg4K28sZFszNzg4OCtvXT1oWzE0OF1bb10pO2ZvcihoWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVm''@;'; put 'put ''OFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1''@;'; put 'put ''NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0''@;'; put 'put ''ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1''@;'; put 'put ''NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZh''@;'; put 'put ''MVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1''@;'; put 'put ''NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZkM1x1NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZl''@;'; put 'put ''Mlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE0OV0ubGVuZ3Ro''@;'; put 'put ''Oysrbyk2NTUzMyE9PWhbMTQ5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE0OV1bb11dPTM4MTQ0K28sZFszODE0NCtvXT1oWzE0OV1bb10pO2ZvcihoWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1Njcw''@;'; put 'put ''Nlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1''@;'; put 'put ''NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2''@;'; put 'put ''Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1''@;'; put 'put ''Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1Njdj''@;'; put 'put ''YVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1''@;'; put 'put ''NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1Njgy''@;'; put 'put ''Ylx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1o''@;'; put 'put ''WzE1MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTUwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1MF1bb11dPTM4NDAwK28sZFszODQwMCtvXT1oWzE1MF1bb10pO2ZvcihoWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1''@;'; put 'put ''Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1''@;'; put 'put ''Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1Njg5ZFx1Njg5ZVx1Njg5Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1Njhh''@;'; put 'put ''Y1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1NjhjMVx1NjhjM1x1NjhjNFx1NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1''@;'; put 'put ''NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYlx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1NjhlN1x1NjhlOFx1NjhlOVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1Njhm''@;'; put 'put ''Nlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1NjkwY1x1NjkwZlx1NjkxMVx1NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1NjkxN1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1''@;'; put 'put ''NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0''@;'; put 'put ''MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1MVx1Njk1Mlx1Njk1M1x1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG89MDtvIT1oWzE1MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTUxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1MV1bb11dPTM4NjU2K28sZFszODY1NitvXT1oWzE1MV1bb10pO2ZvcihoWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1Njk3NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1''@;'; put 'put ''Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1NjlhMVx1NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1Njli''@;'; put 'put ''MFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1NjljNVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1''@;'; put 'put ''NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1NjllOFx1NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1Njlm''@;'; put 'put ''NVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1NmEwOFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1''@;'; put 'put ''NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEz''@;'; put 'put ''OFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1NmE0ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTUyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1Ml1bb11dPTM4OTEyK28sZFszODkxMitvXT1oWzE1Ml1bb10pO2ZvcihoWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1''@;'; put 'put ''NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5''@;'; put 'put ''YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1''@;'; put 'put ''NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFk''@;'; put 'put ''NFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1''@;'; put 'put ''NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIw''@;'; put 'put ''Ylx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1''@;'; put 'put ''NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTUzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1M11bb11dPTM5MTY4K28sZFszOTE2OCtvXT1oWzE1M11bb10pO2ZvcihoWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1''@;'; put 'put ''NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1NmI2MFx1NmI2MVx1NmI2OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3''@;'; put 'put ''Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1''@;'; put 'put ''NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1NmJiMVx1NmJiMlx1NmJiNlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJj''@;'; put 'put ''M1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJjYVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJkZlx1NmJlMFx1NmJlMlx1NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJlN1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1''@;'; put 'put ''NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1NmMwM1x1NmMwNFx1NmMwOFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMx''@;'; put 'put ''ZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1''@;'; put 'put ''NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTU0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1NF1bb11dPTM5NDI0K28sZFszOTQyNCtvXT1oWzE1NF1bb10pO2ZvcihoWzE1NV09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1NmM2ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1''@;'; put 'put ''NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNi''@;'; put 'put ''N1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1''@;'; put 'put ''NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQy''@;'; put 'put ''M1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1''@;'; put 'put ''NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4''@;'; put 'put ''YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1''@;'; put 'put ''NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTU1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1NV1bb11dPTM5NjgwK28sZFszOTY4MCtvXT1oWzE1NV1bb10pO2ZvcihoWzE1Nl09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1''@;'; put 'put ''NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUx''@;'; put 'put ''NVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1''@;'; put 'put ''NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2''@;'; put 'put ''Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1''@;'; put 'put ''NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVh''@;'; put 'put ''ZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1''@;'; put 'put ''NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTU2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1Nl1bb11dPTM5OTM2K28sZFszOTkzNitvXT1oWzE1Nl1bb10p''@;'; put 'put ''O2ZvcihoWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVmZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1''@;'; put 'put ''NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1NmYxOVx1NmYxYVx1NmYxYlx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYy''@;'; put 'put ''Nlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYzZlx1NmY0MFx1NmY0MVx1NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1''@;'; put 'put ''NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3''@;'; put 'put ''MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1''@;'; put 'put ''NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1NmZhYVx1NmZhYlx1NmZhY1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZi''@;'; put 'put ''N1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZjYlx1NmZjY1x1NmZjZFx1NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZkNFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1''@;'; put 'put ''NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTU3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1N11bb11dPTQwMTkyK28sZFs0MDE5Mitv''@;'; put 'put ''XT1oWzE1N11bb10pO2ZvcihoWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1''@;'; put 'put ''NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAwNlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAx''@;'; put 'put ''Mlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1''@;'; put 'put ''NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0''@;'; put 'put ''ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1''@;'; put 'put ''NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5''@;'; put 'put ''ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1''@;'; put 'put ''NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTU4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1OF1bb11dPTQwNDQ4''@;'; put 'put ''K28sZFs0MDQ0OCtvXT1oWzE1OF1bb10pO2ZvcihoWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1''@;'; put 'put ''NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzEx''@;'; put 'put ''NFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1''@;'; put 'put ''NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1''@;'; put 'put ''OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1''@;'; put 'put ''NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFh''@;'; put 'put ''M1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1''@;'; put 'put ''NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE1OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTU5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE1''@;'; put 'put ''OV1bb11dPTQwNzA0K28sZFs0MDcwNCtvXT1oWzE1OV1bb10pO2ZvcihoWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzFkNlx1NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFkYlx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1''@;'; put 'put ''NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1NzFmNFx1NzFmNVx1NzFmNlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIw''@;'; put 'put ''MFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIwNVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIxMVx1NzIxMlx1NzIxM1x1NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIxOFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1''@;'; put 'put ''NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0''@;'; put 'put ''NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1''@;'; put 'put ''NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5''@;'; put 'put ''Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJhMVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJhZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJiY1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1''@;'; put 'put ''NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTYwXVtvXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoU1toWzE2MF1bb11dPTQwOTYwK28sZFs0MDk2MCtvXT1oWzE2MF1bb10pO2ZvcihoWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBh''@;'; put 'put ''XHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUy''@;'; put 'put ''MjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1''@;'; put 'put ''XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTYxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNjFdW29dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihTW2hbMTYxXVtvXV09NDEyMTYrbyxkWzQxMjE2K29dPWhbMTYxXVtvXSk7Zm9yKGhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhk''@;'; put 'put ''XHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUy''@;'; put 'put ''NDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4''@;'; put 'put ''XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTYyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNjJdW29dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihTW2hbMTYyXVtvXV09NDE0NzIrbyxkWzQxNDcyK29dPWhbMTYyXVtvXSk7Zm9yKGhbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0''@;'; put 'put ''XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVm''@;'; put 'put ''ZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRi''@;'; put 'put ''XHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTYzXS5sZW5ndGg7KytvKTY1NTMzIT09''@;'; put 'put ''aFsxNjNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTYzXVtvXV09NDE3MjgrbyxkWzQxNzI4K29dPWhbMTYzXVtvXSk7Zm9yKGhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUy''@;'; put 'put ''XHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUz''@;'; put 'put ''MDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5''@;'; put 'put ''XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTY0XS5sZW5ndGg7''@;'; put 'put ''KytvKTY1NTMzIT09aFsxNjRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTY0XVtvXV09NDE5ODQrbyxkWzQxOTg0K29dPWhbMTY0XVtvXSk7Zm9yKGhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIw''@;'; put 'put ''XHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUz''@;'; put 'put ''MGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3''@;'; put 'put ''XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhb''@;'; put 'put ''MTY1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNjVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTY1XVtvXV09NDIyNDArbyxkWzQyMjQwK29dPWhbMTY1XVtvXSk7Zm9yKGhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzll''@;'; put 'put ''XHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUw''@;'; put 'put ''M2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQw''@;'; put 'put ''XHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''Iiksbz0wO28hPWhbMTY2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNjZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTY2XVtvXV09NDI0OTYrbyxkWzQyNDk2K29dPWhbMTY2XVtvXSk7Zm9yKGhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFh''@;'; put 'put ''XHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQx''@;'; put 'put ''XHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTY3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNjddW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTY3XVtvXV09NDI3NTIrbyxkWzQyNzUyK29dPWhbMTY3XVtvXSk7Zm9yKGhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUy''@;'; put 'put ''NTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZm''@;'; put 'put ''XHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUyNThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUy''@;'; put 'put ''NWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVj''@;'; put 'put ''XHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVmZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUz''@;'; put 'put ''MTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1''@;'; put 'put ''XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''Iiksbz0wO28hPWhbMTY4XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNjhdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTY4XVtvXV09NDMwMDgrbyxkWzQzMDA4K29dPWhbMTY4XVtvXSk7Zm9yKGhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUz''@;'; put 'put ''MjMxXHVmZmZkXHUyMDEwXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVmZTRiXHVmZTRjXHVmZTRkXHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVmZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3''@;'; put 'put ''XHVmZTU5XHVmZTVhXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4XHVmZTY5XHVmZTZhXHVmZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4''@;'; put 'put ''XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUy''@;'; put 'put ''NTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNm''@;'; put 'put ''XHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTY5XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNjldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTY5XVtvXV09NDMyNjQrbyxkWzQzMjY0K29dPWhbMTY5XVtvXSk7Zm9yKGhbMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3''@;'; put 'put ''MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNi''@;'; put 'put ''XHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3''@;'; put 'put ''MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3MzcwXHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTcwXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTcwXVtvXV09NDM1MjArbyxkWzQzNTIwK29dPWhbMTcwXVtvXSk7Zm9yKGhbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3''@;'; put 'put ''MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzXHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1''@;'; put 'put ''XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3''@;'; put 'put ''M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTcxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTcxXVtvXV09NDM3NzYrbyxkWzQzNzc2K29dPWhbMTcxXVtvXSk7Zm9yKGhbMTcyXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDAyXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3''@;'; put 'put ''NDEzXHU3NDE0XHU3NDE1XHU3NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNk''@;'; put 'put ''XHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZkXHU3NDRlXHU3NDRmXHU3NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3''@;'; put 'put ''NDYxXHU3NDYyXHU3NDYzXHU3NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3NDczXHU3NDc0XHU3NDc1XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTcyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzJdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTcyXVtvXV09NDQwMzIrbyxkWzQ0MDMyK29dPWhbMTcyXVtvXSk7Zm9yKGhbMTczXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3''@;'; put 'put ''NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3NGFhXHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1''@;'; put 'put ''XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2XHU3NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3''@;'; put 'put ''NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3NGU5XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTczXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTczXVtvXV09NDQyODgrbyxkWzQ0Mjg4K29dPWhbMTczXVtvXSk7''@;'; put 'put ''Zm9yKGhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3''@;'; put 'put ''NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIxXHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNj''@;'; put 'put ''XHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3''@;'; put 'put ''NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdiXHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTc0XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTc0XVtvXV09NDQ1NDQrbyxkWzQ0NTQ0K29d''@;'; put 'put ''PWhbMTc0XVtvXSk7Zm9yKGhbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3''@;'; put 'put ''NWE2XHU3NWE3XHU3NWE4XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUw''@;'; put 'put ''XHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3''@;'; put 'put ''NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTc1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTc1XVtvXV09NDQ4MDAr''@;'; put 'put ''byxkWzQ0ODAwK29dPWhbMTc1XVtvXSk7Zm9yKGhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1XHU3NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3''@;'; put 'put ''NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3NjY4XHU3NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1''@;'; put 'put ''XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3''@;'; put 'put ''NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMw''@;'; put 'put ''XHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2''@;'; put 'put ''NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYy''@;'; put 'put ''XHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2''@;'; put 'put ''OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTc2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTc2''@;'; put 'put ''XVtvXV09NDUwNTYrbyxkWzQ1MDU2K29dPWhbMTc2XVtvXSk7Zm9yKGhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3''@;'; put 'put ''NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1''@;'; put 'put ''XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3''@;'; put 'put ''NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2''@;'; put 'put ''XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1''@;'; put 'put ''OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3''@;'; put 'put ''XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2''@;'; put 'put ''MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTc3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzddW29dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihTW2hbMTc3XVtvXV09NDUzMTIrbyxkWzQ1MzEyK29dPWhbMTc3XVtvXSk7Zm9yKGhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3''@;'; put 'put ''NzZkXHU3NzZlXHU3NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0''@;'; put 'put ''XHU3Nzk1XHU3Nzk2XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVm''@;'; put 'put ''ZmZkXHU3N2JjXHU3N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2QwXHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2Rh''@;'; put 'put ''XHU3N2RkXHU3N2RlXHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2''@;'; put 'put ''MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVk''@;'; put 'put ''XHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1''@;'; put 'put ''Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTc4XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxNzhdW29d''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihTW2hbMTc4XVtvXV09NDU1NjgrbyxkWzQ1NTY4K29dPWhbMTc4XVtvXSk7Zm9yKGhbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3''@;'; put 'put ''N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0''@;'; put 'put ''XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3''@;'; put 'put ''ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3ODY5XHU3ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdh''@;'; put 'put ''XHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3''@;'; put 'put ''MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRh''@;'; put 'put ''XHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3''@;'; put 'put ''NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTc5XS5sZW5ndGg7KytvKTY1NTMz''@;'; put 'put ''IT09aFsxNzldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTc5XVtvXV09NDU4MjQrbyxkWzQ1ODI0K29dPWhbMTc5XVtvXSk7Zm9yKGhbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3''@;'; put 'put ''ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJh''@;'; put 'put ''XHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3''@;'; put 'put ''OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYxXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAw''@;'; put 'put ''XHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1''@;'; put 'put ''ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUw''@;'; put 'put ''XHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2''@;'; put 'put ''NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTgwXS5sZW5n''@;'; put 'put ''dGg7KytvKTY1NTMzIT09aFsxODBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTgwXVtvXV09NDYwODArbyxkWzQ2MDgwK29dPWhbMTgwXVtvXSk7Zm9yKGhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3''@;'; put 'put ''OTBmXHU3OTEwXHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3OTIxXHU3OTIyXHU3OTIzXHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJk''@;'; put 'put ''XHU3OTJlXHU3OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRlXHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3''@;'; put 'put ''OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3OTcyXHU3OTczXHU3OTc0XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgy''@;'; put 'put ''XHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4''@;'; put 'put ''NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkz''@;'; put 'put ''XHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3''@;'; put 'put ''NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksbz0wO28h''@;'; put 'put ''PWhbMTgxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTgxXVtvXV09NDYzMzYrbyxkWzQ2MzM2K29dPWhbMTgxXVtvXSk7Zm9yKGhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3''@;'; put 'put ''OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0XHU3OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIw''@;'; put 'put ''XHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3''@;'; put 'put ''OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2XHU3OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4''@;'; put 'put ''XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2''@;'; put 'put ''MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIx''@;'; put 'put ''XHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4''@;'; put 'put ''ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksbz0wO28hPWhbMTgyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODJdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTgyXVtvXV09NDY1OTIrbyxkWzQ2NTkyK29dPWhbMTgyXVtvXSk7Zm9yKGhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQw''@;'; put 'put ''XHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3''@;'; put 'put ''YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1''@;'; put 'put ''XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3''@;'; put 'put ''NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVl''@;'; put 'put ''XHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2''@;'; put 'put ''N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTgzXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTgzXVtvXV09NDY4NDgrbyxkWzQ2ODQ4K29dPWhbMTgzXVtvXSk7Zm9yKGhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3YWI1XHU3YWI2XHU3YWI3XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMx''@;'; put 'put ''XHU3YWMyXHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQyXHU3YWQzXHU3YWQ0XHU3YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3''@;'; put 'put ''YWU0XHU3YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3YWY3XHU3YWY4XHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBj''@;'; put 'put ''XHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5''@;'; put 'put ''MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgy''@;'; put 'put ''XHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3''@;'; put 'put ''Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0''@;'; put 'put ''XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTg0XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTg0XVtvXV09NDcxMDQrbyxkWzQ3MTA0K29dPWhbMTg0XVtvXSk7Zm9yKGhbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUz''@;'; put 'put ''XHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3YjZjXHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3''@;'; put 'put ''YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0''@;'; put 'put ''XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3YmMwXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5''@;'; put 'put ''ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQx''@;'; put 'put ''XHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2''@;'; put 'put ''MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZk''@;'; put 'put ''XHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTg1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTg1XVtvXV09NDczNjArbyxkWzQ3MzYwK29dPWhbMTg1XVtvXSk7Zm9yKGhbMTg2XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUw''@;'; put 'put ''XHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3''@;'; put 'put ''YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZkXHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1''@;'; put 'put ''XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1''@;'; put 'put ''YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmVi''@;'; put 'put ''XHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3''@;'; put 'put ''MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2''@;'; put 'put ''XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTg2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTg2XVtvXV09NDc2MTYrbyxkWzQ3NjE2K29dPWhbMTg2XVtvXSk7Zm9yKGhbMTg3''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3YzQ5XHU3YzRhXHU3YzRiXHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1''@;'; put 'put ''XHU3YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1XHU3YzY2XHU3YzY3XHU3YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZjXHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3''@;'; put 'put ''YzcxXHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3Yzg2XHU3Yzg3XHVmZmZkXHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3Yzkz''@;'; put 'put ''XHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0XHU3Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2''@;'; put 'put ''MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYy''@;'; put 'put ''XHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2''@;'; put 'put ''MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4''@;'; put 'put ''XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTg3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODddW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTg3XVtvXV09NDc4NzIrbyxkWzQ3ODcyK29dPWhbMTg3XVtv''@;'; put 'put ''XSk7Zm9yKGhbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4''@;'; put 'put ''XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3Y2VlXHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3''@;'; put 'put ''Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBkXHU3ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3''@;'; put 'put ''XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5''@;'; put 'put ''OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgw''@;'; put 'put ''XHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1''@;'; put 'put ''MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZh''@;'; put 'put ''XHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTg4XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODhdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTg4XVtvXV09NDgxMjgrbyxkWzQ4MTI4''@;'; put 'put ''K29dPWhbMTg4XVtvXSk7Zm9yKGhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0''@;'; put 'put ''XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3''@;'; put 'put ''ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdj''@;'; put 'put ''XHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3''@;'; put 'put ''ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0''@;'; put 'put ''XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5''@;'; put 'put ''NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1''@;'; put 'put ''XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTg5XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxODldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTg5XVtvXV09NDgz''@;'; put 'put ''ODQrbyxkWzQ4Mzg0K29dPWhbMTg5XVtvXSk7Zm9yKGhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDk5XHU3ZDlhXHU3ZDliXHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0''@;'; put 'put ''XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2XHU3ZGI3XHU3ZGI4XHU3ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJkXHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3''@;'; put 'put ''ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3ZGQyXHU3ZGQzXHU3ZGQ0XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRj''@;'; put 'put ''XHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVjXHU3ZGVkXHU3ZGVlXHU3ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYzXHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3''@;'; put 'put ''ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRm''@;'; put 'put ''XHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4''@;'; put 'put ''M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJi''@;'; put 'put ''XHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTkwXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOTBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hb''@;'; put 'put ''MTkwXVtvXV09NDg2NDArbyxkWzQ4NjQwK29dPWhbMTkwXVtvXSk7Zm9yKGhbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0''@;'; put 'put ''XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3ZTE1XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3''@;'; put 'put ''ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMwXHU3ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNh''@;'; put 'put ''XHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3ZTRlXHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3''@;'; put 'put ''ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2Uw''@;'; put 'put ''XHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1''@;'; put 'put ''NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNl''@;'; put 'put ''XHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTkxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOTFdW29dLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihTW2hbMTkxXVtvXV09NDg4OTYrbyxkWzQ4ODk2K29dPWhbMTkxXVtvXSk7Zm9yKGhbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1''@;'; put 'put ''XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3''@;'; put 'put ''ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTll''@;'; put 'put ''XHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3''@;'; put 'put ''ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2''@;'; put 'put ''XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1''@;'; put 'put ''OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEz''@;'; put 'put ''XHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTkyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOTJd''@;'; put 'put ''W29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTkyXVtvXV09NDkxNTIrbyxkWzQ5MTUyK29dPWhbMTkyXVtvXSk7Zm9yKGhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVl''@;'; put 'put ''XHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyXHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2XHU3''@;'; put 'put ''Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3ZmFk''@;'; put 'put ''XHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQwXHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2XHU3''@;'; put 'put ''ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4''@;'; put 'put ''XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2''@;'; put 'put ''NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1''@;'; put 'put ''XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTkzXS5sZW5ndGg7KytvKTY1''@;'; put 'put ''NTMzIT09aFsxOTNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTkzXVtvXV09NDk0MDgrbyxkWzQ5NDA4K29dPWhbMTkzXVtvXSk7Zm9yKGhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVh''@;'; put 'put ''XHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4''@;'; put 'put ''MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUx''@;'; put 'put ''XHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4MDY1XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4''@;'; put 'put ''MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0''@;'; put 'put ''XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1''@;'; put 'put ''Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4''@;'; put 'put ''XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTk0XS5s''@;'; put 'put ''ZW5ndGg7KytvKTY1NTMzIT09aFsxOTRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTk0XVtvXV09NDk2NjQrbyxkWzQ5NjY0K29dPWhbMTk0XVtvXSk7Zm9yKGhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgx''@;'; put 'put ''XHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4''@;'; put 'put ''MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAx''@;'; put 'put ''XHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4''@;'; put 'put ''MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAy''@;'; put 'put ''XHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3''@;'; put 'put ''NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYy''@;'; put 'put ''XHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksbz0w''@;'; put 'put ''O28hPWhbMTk1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOTVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTk1XVtvXV09NDk5MjArbyxkWzQ5OTIwK29dPWhbMTk1XVtvXSk7Zm9yKGhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViXHU4MTVjXHU4MTVkXHU4MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4''@;'; put 'put ''MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4MTk0XHU4MTk1XHU4MTk2XHU4MTk3XHU4MTk5''@;'; put 'put ''XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFmXHU4MWIwXHU4MWIxXHU4MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3XHU4MWI4XHU4MWI5XHU4MWJjXHU4MWJkXHU4''@;'; put 'put ''MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2Fi''@;'; put 'put ''XHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3''@;'; put 'put ''ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNm''@;'; put 'put ''XHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksbz0wO28hPWhbMTk2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOTZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTk2XVtvXV09NTAxNzYrbyxkWzUwMTc2K29dPWhbMTk2XVtvXSk7Zm9yKGhbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4''@;'; put 'put ''MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0''@;'; put 'put ''XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4''@;'; put 'put ''MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0''@;'; put 'put ''XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1''@;'; put 'put ''Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0''@;'; put 'put ''XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2''@;'; put 'put ''YmQ3XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTk3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOTddW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTk3XVtvXV09NTA0MzIrbyxkWzUwNDMyK29dPWhbMTk3XVtvXSk7Zm9yKGhbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4''@;'; put 'put ''Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3''@;'; put 'put ''XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4''@;'; put 'put ''MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZj''@;'; put 'put ''XHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1''@;'; put 'put ''YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0''@;'; put 'put ''XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2''@;'; put 'put ''Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTk4XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOThdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTk4XVtvXV09NTA2ODgrbyxkWzUwNjg4K29dPWhbMTk4XVtvXSk7Zm9yKGhbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRjXHU4MzRkXHU4MzRlXHU4MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4XHU4MzU5XHU4MzVkXHU4MzYyXHU4MzcwXHU4''@;'; put 'put ''MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3''@;'; put 'put ''XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2FmXHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4''@;'; put 'put ''M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQz''@;'; put 'put ''XHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2''@;'; put 'put ''NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRk''@;'; put 'put ''XHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2''@;'; put 'put ''NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTk5XS5sZW5ndGg7KytvKTY1NTMzIT09aFsxOTldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTk5XVtvXV09NTA5NDQrbyxkWzUwOTQ0K29dPWhbMTk5XVtvXSk7Zm9yKGhbMjAwXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4''@;'; put 'put ''NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4NDI5XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1''@;'; put 'put ''XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5XHVmZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4''@;'; put 'put ''NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2Ji''@;'; put 'put ''XHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2''@;'; put 'put ''NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2''@;'; put 'put ''XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4''@;'; put 'put ''NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjAwXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjAwXVtvXV09NTEyMDArbyxkWzUxMjAwK29dPWhbMjAwXVtvXSk7Zm9yKGhb''@;'; put 'put ''MjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4''@;'; put 'put ''NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3''@;'; put 'put ''XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4''@;'; put 'put ''NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUx''@;'; put 'put ''XHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3''@;'; put 'put ''MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4''@;'; put 'put ''XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4''@;'; put 'put ''MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjAxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjAxXVtvXV09NTE0NTYrbyxkWzUxNDU2K29dPWhbMjAx''@;'; put 'put ''XVtvXSk7Zm9yKGhbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2XHU4NTA3XHU4NTA4XHU4NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4''@;'; put 'put ''NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4NTI5XHU4NTJhXHU4NTJkXHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4NTMyXHU4NTMzXHU4NTM0XHU4NTM1XHU4NTM2''@;'; put 'put ''XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUxXHU4NTUyXHU4NTUzXHU4NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4''@;'; put 'put ''NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4NTcxXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAx''@;'; put 'put ''XHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1''@;'; put 'put ''ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4''@;'; put 'put ''XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1''@;'; put 'put ''YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjAyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDJdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjAyXVtvXV09NTE3MTIrbyxkWzUx''@;'; put 'put ''NzEyK29dPWhbMjAyXVtvXSk7Zm9yKGhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4''@;'; put 'put ''NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2''@;'; put 'put ''XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNhXHU4NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4''@;'; put 'put ''NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4NWVjXHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3''@;'; put 'put ''XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1''@;'; put 'put ''NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1''@;'; put 'put ''XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4''@;'; put 'put ''NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjAzXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjAzXVtvXV09''@;'; put 'put ''NTE5NjgrbyxkWzUxOTY4K29dPWhbMjAzXVtvXSk7Zm9yKGhbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4''@;'; put 'put ''NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0''@;'; put 'put ''XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4''@;'; put 'put ''NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3''@;'; put 'put ''XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1''@;'; put 'put ''NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4''@;'; put 'put ''XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3''@;'; put 'put ''NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjA0XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDRdW29dLmNoYXJDb2RlQXQoMCkmJihT''@;'; put 'put ''W2hbMjA0XVtvXV09NTIyMjQrbyxkWzUyMjI0K29dPWhbMjA0XVtvXSk7Zm9yKGhbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4NjczXHU4Njc0XHU4Njc1XHU4Njc2XHU4Njc3XHU4''@;'; put 'put ''Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4Njk4XHU4Njk5XHU4NjlhXHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4NmExXHU4NmEyXHU4NmE1XHU4NmE2XHU4NmFi''@;'; put 'put ''XHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjXHVmZmZkXHU4''@;'; put 'put ''NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBl''@;'; put 'put ''XHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1''@;'; put 'put ''OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1''@;'; put 'put ''XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3''@;'; put 'put ''Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjA1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDVdW29dLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihTW2hbMjA1XVtvXV09NTI0ODArbyxkWzUyNDgwK29dPWhbMjA1XVtvXSk7Zm9yKGhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4''@;'; put 'put ''NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRm''@;'; put 'put ''XHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2XHU4NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4''@;'; put 'put ''Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4NzhmXHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4Nzlj''@;'; put 'put ''XHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4''@;'; put 'put ''NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGEx''@;'; put 'put ''XHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2''@;'; put 'put ''MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjA2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsy''@;'; put 'put ''MDZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjA2XVtvXV09NTI3MzYrbyxkWzUyNzM2K29dPWhbMjA2XVtvXSk7Zm9yKGhbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4''@;'; put 'put ''N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1''@;'; put 'put ''XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4''@;'; put 'put ''N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3''@;'; put 'put ''XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5''@;'; put 'put ''NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0''@;'; put 'put ''XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4''@;'; put 'put ''YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjA3XS5sZW5ndGg7Kytv''@;'; put 'put ''KTY1NTMzIT09aFsyMDddW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjA3XVtvXV09NTI5OTIrbyxkWzUyOTkyK29dPWhbMjA3XVtvXSk7Zm9yKGhbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI0XHU4ODI1XHU4ODI2XHU4''@;'; put 'put ''ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4ODM4XHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2XHU4ODQ3XHU4ODQ4''@;'; put 'put ''XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVkXHU4ODVlXHU4ODVmXHU4ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4''@;'; put 'put ''ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4ODk4XHU4ODk5XHU4ODlhXHU4ODliXHU4ODlk''@;'; put 'put ''XHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2''@;'; put 'put ''NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjEx''@;'; put 'put ''XHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5''@;'; put 'put ''NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjA4''@;'; put 'put ''XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDhdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjA4XVtvXV09NTMyNDgrbyxkWzUzMjQ4K29dPWhbMjA4XVtvXSk7Zm9yKGhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4''@;'; put 'put ''OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQz''@;'; put 'put ''XHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVkXHU4OGVlXHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4''@;'; put 'put ''OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4OTE1XHU4OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0''@;'; put 'put ''XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4''@;'; put 'put ''YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJk''@;'; put 'put ''XHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3''@;'; put 'put ''MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''bz0wO28hPWhbMjA5XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMDldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjA5XVtvXV09NTM1MDQrbyxkWzUzNTA0K29dPWhbMjA5XVtvXSk7Zm9yKGhbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0''@;'; put 'put ''XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4''@;'; put 'put ''OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTky''@;'; put 'put ''XHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1''@;'; put 'put ''NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYw''@;'; put 'put ''XHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1''@;'; put 'put ''ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbz0wO28hPWhbMjEwXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjEwXVtvXV09NTM3NjArbyxkWzUzNzYwK29dPWhbMjEwXVtvXSk7Zm9yKGhbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4OWFmXHU4OWIwXHU4OWIxXHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWI4XHU4OWI5XHU4OWJh''@;'; put 'put ''XHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4''@;'; put 'put ''OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4OWZmXHU4YTAxXHU4YTAyXHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4YTA4XHU4YTA5XHU4YTBhXHU4YTBiXHU4YTBj''@;'; put 'put ''XHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFjXHU4YTFkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4''@;'; put 'put ''MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEw''@;'; put 'put ''XHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5''@;'; put 'put ''MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIy''@;'; put 'put ''XHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjExXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjExXVtvXV09NTQwMTYrbyxkWzU0MDE2K29dPWhbMjExXVtvXSk7Zm9yKGhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4YTI5XHU4YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0''@;'; put 'put ''XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1XHU4YTQ2XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4''@;'; put 'put ''YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4YTYxXHU4YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZj''@;'; put 'put ''XHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdkXHU4YTdlXHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1''@;'; put 'put ''MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1''@;'; put 'put ''XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4''@;'; put 'put ''MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIz''@;'; put 'put ''XHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjEyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTJdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjEyXVtvXV09NTQyNzIrbyxkWzU0MjcyK29dPWhbMjEyXVtvXSk7Zm9yKGhbMjEzXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4''@;'; put 'put ''XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4''@;'; put 'put ''YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNl''@;'; put 'put ''XHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0''@;'; put 'put ''ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUw''@;'; put 'put ''XHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4''@;'; put 'put ''Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5''@;'; put 'put ''XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjEzXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjEzXVtvXV09NTQ1MjgrbyxkWzU0NTI4K29dPWhbMjEzXVtvXSk7Zm9yKGhbMjE0XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4YWViXHU4YWVjXHU4YWVkXHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4YWYyXHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2''@;'; put 'put ''XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2XHU4YjA4XHU4YjA5XHU4YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBlXHU4YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4''@;'; put 'put ''YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4YjIzXHVmZmZkXHU4YjI0XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4YjJhXHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJl''@;'; put 'put ''XHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNlXHU4YjNmXHU4YjQwXHU4YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1XHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4''@;'; put 'put ''MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3''@;'; put 'put ''XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1''@;'; put 'put ''NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNi''@;'; put 'put ''XHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjE0XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjE0XVtvXV09NTQ3ODQrbyxkWzU0Nzg0K29dPWhbMjE0XVtvXSk7Zm9y''@;'; put 'put ''KGhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4YjRiXHU4YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2''@;'; put 'put ''XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3XHU4YjY4XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4''@;'; put 'put ''Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4Yjg0XHU4Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4Yjhl''@;'; put 'put ''XHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4YjllXHU4YjlmXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3''@;'; put 'put ''OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5''@;'; put 'put ''XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1''@;'; put 'put ''Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2Rl''@;'; put 'put ''XHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjE1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjE1XVtvXV09NTUwNDArbyxkWzU1MDQwK29dPWhb''@;'; put 'put ''MjE1XVtvXSk7Zm9yKGhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRh''@;'; put 'put ''XHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4''@;'; put 'put ''YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4Yzkw''@;'; put 'put ''XHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0''@;'; put 'put ''ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2''@;'; put 'put ''XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1''@;'; put 'put ''MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIy''@;'; put 'put ''XHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjE2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjE2XVtvXV09NTUyOTYrbyxk''@;'; put 'put ''WzU1Mjk2K29dPWhbMjE2XVtvXSk7Zm9yKGhbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4Y2FmXHU4Y2IwXHU4Y2IxXHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2Jh''@;'; put 'put ''XHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2NhXHU4Y2NiXHU4Y2NjXHU4Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2QxXHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4''@;'; put 'put ''Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4Y2U2XHU4Y2U3XHU4Y2U4XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVmZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2Yw''@;'; put 'put ''XHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAwXHU4ZDAxXHU4ZDAyXHU4ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4''@;'; put 'put ''ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4''@;'; put 'put ''XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1''@;'; put 'put ''MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIz''@;'; put 'put ''XHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjE3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTddW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjE3XVtv''@;'; put 'put ''XV09NTU1NTIrbyxkWzU1NTUyK29dPWhbMjE3XVtvXSk7Zm9yKGhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4''@;'; put 'put ''XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4''@;'; put 'put ''ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4XHU4ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0''@;'; put 'put ''XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4''@;'; put 'put ''ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRm''@;'; put 'put ''XHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4''@;'; put 'put ''YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5Njcy''@;'; put 'put ''XHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjE4XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMThdW29dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihTW2hbMjE4XVtvXV09NTU4MDgrbyxkWzU1ODA4K29dPWhbMjE4XVtvXSk7Zm9yKGhbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2''@;'; put 'put ''XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4''@;'; put 'put ''ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZk''@;'; put 'put ''XHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4''@;'; put 'put ''ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMx''@;'; put 'put ''XHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1''@;'; put 'put ''N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1Nzhj''@;'; put 'put ''XHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjE5XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMTldW29dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihTW2hbMjE5XVtvXV09NTYwNjQrbyxkWzU2MDY0K29dPWhbMjE5XVtvXSk7Zm9yKGhbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1XHU4ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdi''@;'; put 'put ''XHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1XHU4ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4''@;'; put 'put ''ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4ZWI1XHU4ZWI2XHU4ZWI3XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJjXHU4ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMx''@;'; put 'put ''XHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQxXHU4ZWQyXHU4ZWQzXHU4ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4ZWQ4XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4''@;'; put 'put ''ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4Mjdk''@;'; put 'put ''XHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4''@;'; put 'put ''MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4''@;'; put 'put ''XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjIwXS5sZW5ndGg7KytvKTY1NTMzIT09''@;'; put 'put ''aFsyMjBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjIwXVtvXV09NTYzMjArbyxkWzU2MzIwK29dPWhbMjIwXVtvXSk7Zm9yKGhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5''@;'; put 'put ''XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4ZWZhXHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4''@;'; put 'put ''ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1XHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIw''@;'; put 'put ''XHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4ZjMwXHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4''@;'; put 'put ''ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2''@;'; put 'put ''XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4''@;'; put 'put ''M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNk''@;'; put 'put ''XHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjIxXS5sZW5ndGg7''@;'; put 'put ''KytvKTY1NTMzIT09aFsyMjFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjIxXVtvXV09NTY1NzYrbyxkWzU2NTc2K29dPWhbMjIxXVtvXSk7Zm9yKGhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3''@;'; put 'put ''XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4''@;'; put 'put ''ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJi''@;'; put 'put ''XHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4''@;'; put 'put ''ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4''@;'; put 'put ''XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1''@;'; put 'put ''YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2Fl''@;'; put 'put ''XHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhb''@;'; put 'put ''MjIyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjJdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjIyXVtvXV09NTY4MzIrbyxkWzU2ODMyK29dPWhbMjIyXVtvXSk7Zm9yKGhbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5''@;'; put 'put ''XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5''@;'; put 'put ''MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmXHU5MDcwXHU5MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3''@;'; put 'put ''XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhkXHU5MDhlXHU5MDhmXHU5MDkwXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5''@;'; put 'put ''MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBi''@;'; put 'put ''XHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1''@;'; put 'put ''NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0''@;'; put 'put ''XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''Iiksbz0wO28hPWhbMjIzXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjIzXVtvXV09NTcwODgrbyxkWzU3MDg4K29dPWhbMjIzXVtvXSk7Zm9yKGhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5''@;'; put 'put ''MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3XHU5MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEy''@;'; put 'put ''XHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5MTI2XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5''@;'; put 'put ''MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIx''@;'; put 'put ''XHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1''@;'; put 'put ''NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2''@;'; put 'put ''XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjI0XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjI0XVtvXV09NTczNDQrbyxkWzU3MzQ0K29dPWhbMjI0XVtvXSk7Zm9yKGhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5''@;'; put 'put ''MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5''@;'; put 'put ''XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5''@;'; put 'put ''MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1Yzkw''@;'; put 'put ''XHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1''@;'; put 'put ''ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1Zjhj''@;'; put 'put ''XHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3''@;'; put 'put ''MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjI1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjI1XVtvXV09NTc2MDArbyxkWzU3NjAwK29dPWhbMjI1XVtvXSk7Zm9yKGhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYwXHU5MWYxXHU5MWYyXHU5MWYzXHU5MWY0XHU5MWY1XHU5MWY2XHU5MWY3XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5''@;'; put 'put ''MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5MjBjXHU5MjBkXHU5MjBlXHU5MjBmXHU5MjEwXHU5MjExXHU5MjEyXHU5MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3''@;'; put 'put ''XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2XHU5MjI3XHU5MjI4XHU5MjI5XHU5MjJhXHU5MjJiXHU5MjJjXHU5MjJkXHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5''@;'; put 'put ''MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5MjQyXHU5MjQzXHU5MjQ0XHU5MjQ1XHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1''@;'; put 'put ''XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5''@;'; put 'put ''OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJh''@;'; put 'put ''XHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2''@;'; put 'put ''MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjI2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjI2XVtvXV09NTc4NTYrbyxkWzU3ODU2K29dPWhbMjI2XVtvXSk7Zm9yKGhbMjI3XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5''@;'; put 'put ''MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZhXHU5MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2''@;'; put 'put ''XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5Mjg2XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5''@;'; put 'put ''MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEyXHU5MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlk''@;'; put 'put ''XHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2''@;'; put 'put ''MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNm''@;'; put 'put ''XHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2''@;'; put 'put ''Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjI3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjddW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjI3XVtvXV09NTgxMTIrbyxkWzU4MTEyK29dPWhbMjI3XVtvXSk7Zm9yKGhbMjI4XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5''@;'; put 'put ''MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3''@;'; put 'put ''XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5''@;'; put 'put ''MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQz''@;'; put 'put ''XHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2''@;'; put 'put ''ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4''@;'; put 'put ''XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2''@;'; put 'put ''Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjI4XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjhdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjI4XVtvXV09NTgzNjgrbyxkWzU4MzY4K29dPWhbMjI4XVtvXSk7''@;'; put 'put ''Zm9yKGhbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBlXHU5MzBmXHU5MzEwXHU5MzExXHU5MzEyXHU5MzEzXHU5MzE0XHU5MzE1XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5''@;'; put 'put ''MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5MzJhXHU5MzJiXHU5MzJjXHU5MzJkXHU5MzJlXHU5MzJmXHU5MzMwXHU5MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1''@;'; put 'put ''XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2XHU5MzQ3XHU5MzQ4XHU5MzQ5XHVmZmZkXHU5MzRhXHU5MzRiXHU5MzRjXHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5''@;'; put 'put ''MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5MzYxXHU5MzYyXHU5MzYzXHU5MzY0XHU5MzY1XHU5MzY2XHU5MzY3XHU5MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3''@;'; put 'put ''XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1''@;'; put 'put ''YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUy''@;'; put 'put ''XHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4''@;'; put 'put ''Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjI5XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMjldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjI5XVtvXV09NTg2MjQrbyxkWzU4NjI0K29d''@;'; put 'put ''PWhbMjI5XVtvXSk7Zm9yKGhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5''@;'; put 'put ''MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5MzhhXHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2''@;'; put 'put ''XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5''@;'; put 'put ''M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2MxXHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2Nk''@;'; put 'put ''XHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1''@;'; put 'put ''YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQw''@;'; put 'put ''XHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5''@;'; put 'put ''YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjMwXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjMwXVtvXV09NTg4ODAr''@;'; put 'put ''byxkWzU4ODgwK29dPWhbMjMwXVtvXSk7Zm9yKGhbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5''@;'; put 'put ''M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2''@;'; put 'put ''XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5''@;'; put 'put ''NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJj''@;'; put 'put ''XHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3''@;'; put 'put ''ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJm''@;'; put 'put ''XHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3''@;'; put 'put ''M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjMxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjMx''@;'; put 'put ''XVtvXV09NTkxMzYrbyxkWzU5MTM2K29dPWhbMjMxXVtvXSk7Zm9yKGhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDJmXHU5NDMwXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5''@;'; put 'put ''NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5NDRhXHU5NDRiXHU5NDRjXHU5NDRkXHU5NDRlXHU5NDRmXHU5NDUwXHU5NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1''@;'; put 'put ''XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1XHU5NDY2XHU5NDY3XHU5NDY4XHU5NDY5XHU5NDZhXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5''@;'; put 'put ''NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5NDgxXHU5NDgyXHU5NDgzXHU5NDg0XHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRh''@;'; put 'put ''XHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5''@;'; put 'put ''N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBj''@;'; put 'put ''XHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2''@;'; put 'put ''ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjMyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzJdW29dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihTW2hbMjMyXVtvXV09NTkzOTIrbyxkWzU5MzkyK29dPWhbMjMyXVtvXSk7Zm9yKGhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5''@;'; put 'put ''NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5NTg0XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThm''@;'; put 'put ''XHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlmXHU5NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVm''@;'; put 'put ''ZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5NWJhXHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1''@;'; put 'put ''XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2''@;'; put 'put ''OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEw''@;'; put 'put ''XHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4''@;'; put 'put ''ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjMzXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzNdW29d''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihTW2hbMjMzXVtvXV09NTk2NDgrbyxkWzU5NjQ4K29dPWhbMjMzXVtvXSk7Zm9yKGhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5''@;'; put 'put ''NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUyXHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFi''@;'; put 'put ''XHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5''@;'; put 'put ''NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZmXHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5Njdm''@;'; put 'put ''XHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3''@;'; put 'put ''NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3''@;'; put 'put ''XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4''@;'; put 'put ''OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjM0XS5sZW5ndGg7KytvKTY1NTMz''@;'; put 'put ''IT09aFsyMzRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjM0XVtvXV09NTk5MDQrbyxkWzU5OTA0K29dPWhbMjM0XVtvXSk7Zm9yKGhbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5''@;'; put 'put ''NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5NmE5XHU5NmFhXHU5NmFiXHU5NmFjXHU5NmFkXHU5NmFlXHU5NmFmXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3''@;'; put 'put ''XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4XHU5NmQ5XHU5NmRhXHU5NmRiXHU5NmRjXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5''@;'; put 'put ''NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEy''@;'; put 'put ''XHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2''@;'; put 'put ''YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVh''@;'; put 'put ''XHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4''@;'; put 'put ''MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjM1XS5sZW5n''@;'; put 'put ''dGg7KytvKTY1NTMzIT09aFsyMzVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjM1XVtvXV09NjAxNjArbyxkWzYwMTYwK29dPWhbMjM1XVtvXSk7Zm9yKGhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5''@;'; put 'put ''NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5NzM3XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1''@;'; put 'put ''XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5''@;'; put 'put ''NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5NzdmXHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5Nzhj''@;'; put 'put ''XHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1''@;'; put 'put ''ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2''@;'; put 'put ''XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2''@;'; put 'put ''MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksbz0wO28h''@;'; put 'put ''PWhbMjM2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzZdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjM2XVtvXV09NjA0MTYrbyxkWzYwNDE2K29dPWhbMjM2XVtvXSk7Zm9yKGhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5''@;'; put 'put ''NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2Mw''@;'; put 'put ''XHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5''@;'; put 'put ''N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAw''@;'; put 'put ''XHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2''@;'; put 'put ''MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5''@;'; put 'put ''XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3''@;'; put 'put ''OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksbz0wO28hPWhbMjM3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzddW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjM3XVtvXV09NjA2NzIrbyxkWzYwNjcyK29dPWhbMjM3XVtvXSk7Zm9yKGhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5ODFkXHU5ODFlXHU5ODFmXHU5ODIwXHU5ODIxXHU5ODIyXHU5ODIzXHU5ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4''@;'; put 'put ''XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4XHU5ODM5XHU5ODNhXHU5ODNiXHU5ODNjXHU5ODNkXHU5ODNlXHU5ODNmXHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5''@;'; put 'put ''ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU0XHU5ODU1XHU5ODU2XHU5ODU3XHU5ODU4XHU5ODU5XHU5ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVl''@;'; put 'put ''XHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZlXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3''@;'; put 'put ''N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhi''@;'; put 'put ''XHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5''@;'; put 'put ''NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVh''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjM4XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzhdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjM4XVtvXV09NjA5MjgrbyxkWzYwOTI4K29dPWhbMjM4XVtvXSk7Zm9yKGhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIz''@;'; put 'put ''XHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMzXHU5OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5''@;'; put 'put ''OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5OGVhXHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1''@;'; put 'put ''XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1XHU5OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5''@;'; put 'put ''NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMx''@;'; put 'put ''XHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5''@;'; put 'put ''NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAy''@;'; put 'put ''XHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjM5XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyMzldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjM5XVtvXV09NjExODQrbyxkWzYxMTg0K29dPWhbMjM5XVtvXSk7Zm9yKGhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFm''@;'; put 'put ''XHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5''@;'; put 'put ''OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRiXHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4''@;'; put 'put ''XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3''@;'; put 'put ''NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4''@;'; put 'put ''XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3''@;'; put 'put ''NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBh''@;'; put 'put ''XHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQwXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQwXVtvXV09NjE0NDArbyxkWzYxNDQwK29dPWhbMjQwXVtvXSk7Zm9yKGhbMjQxXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5OWEwXHU5OWExXHU5OWEyXHU5OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFk''@;'; put 'put ''XHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJkXHU5OWJlXHU5OWJmXHU5OWMwXHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5''@;'; put 'put ''OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVmZmZkXHU5OWQ5XHU5OWRhXHU5OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUz''@;'; put 'put ''XHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYzXHU5OWY0XHU5OWY1XHU5OWY2XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3''@;'; put 'put ''NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIz''@;'; put 'put ''XHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4''@;'; put 'put ''OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUy''@;'; put 'put ''XHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQxXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQxXVtvXV09NjE2OTYrbyxkWzYxNjk2K29dPWhbMjQxXVtvXSk7Zm9yKGhbMjQy''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5YTAwXHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBi''@;'; put 'put ''XHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFiXHU5YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5''@;'; put 'put ''YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5YTM3XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQx''@;'; put 'put ''XHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUxXHU5YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5''@;'; put 'put ''ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5''@;'; put 'put ''XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4''@;'; put 'put ''NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYz''@;'; put 'put ''XHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQyXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDJdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQyXVtvXV09NjE5NTIrbyxkWzYxOTUyK29dPWhbMjQyXVtv''@;'; put 'put ''XSk7Zm9yKGhbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVlXHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5''@;'; put 'put ''XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5''@;'; put 'put ''YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1''@;'; put 'put ''XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4''@;'; put 'put ''Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNj''@;'; put 'put ''XHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3''@;'; put 'put ''YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRk''@;'; put 'put ''XHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQzXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDNdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQzXVtvXV09NjIyMDgrbyxkWzYyMjA4''@;'; put 'put ''K29dPWhbMjQzXVtvXSk7Zm9yKGhbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5YjBhXHU5YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3''@;'; put 'put ''XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJiXHU5YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMxXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5''@;'; put 'put ''YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1XHU5YjU2XHU5YjU3XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVm''@;'; put 'put ''XHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZmXHU5YjcwXHU5YjcxXHU5YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5''@;'; put 'put ''YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRi''@;'; put 'put ''XHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3''@;'; put 'put ''Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0''@;'; put 'put ''XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQ0XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDRdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQ0XVtvXV09NjI0''@;'; put 'put ''NjQrbyxkWzYyNDY0K29dPWhbMjQ0XVtvXSk7Zm9yKGhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdjXHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3''@;'; put 'put ''XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3XHU5Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5''@;'; put 'put ''YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmIzXHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJk''@;'; put 'put ''XHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNkXHU5YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5''@;'; put 'put ''YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1''@;'; put 'put ''XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4''@;'; put 'put ''ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0''@;'; put 'put ''XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQ1XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDVdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hb''@;'; put 'put ''MjQ1XVtvXV09NjI3MjArbyxkWzYyNzIwK29dPWhbMjQ1XVtvXSk7Zm9yKGhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1''@;'; put 'put ''XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5''@;'; put 'put ''YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzExXHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFi''@;'; put 'put ''XHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5''@;'; put 'put ''YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3''@;'; put 'put ''XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5''@;'; put 'put ''Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2Ix''@;'; put 'put ''XHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQ2XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDZdW29dLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihTW2hbMjQ2XVtvXV09NjI5NzYrbyxkWzYyOTc2K29dPWhbMjQ2XVtvXSk7Zm9yKGhbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQz''@;'; put 'put ''XHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUzXHU5YzU0XHU5YzU1XHU5YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVhXHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5''@;'; put 'put ''YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5YzZmXHU5YzcwXHU5YzcxXHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5Yzdh''@;'; put 'put ''XHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2JmXHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5''@;'; put 'put ''Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2Fm''@;'; put 'put ''XHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5''@;'; put 'put ''OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRi''@;'; put 'put ''XHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQ3XS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNDdd''@;'; put 'put ''W29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQ3XVtvXV09NjMyMzIrbyxkWzYzMjMyK29dPWhbMjQ3XVtvXSk7Zm9yKGhbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4''@;'; put 'put ''XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5''@;'; put 'put ''ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5ZDE0XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFm''@;'; put 'put ''XHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJlXHU5ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5''@;'; put 'put ''ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQ4XS5sZW5ndGg7KytvKTY1''@;'; put 'put ''NTMzIT09aFsyNDhdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQ4XVtvXV09NjM0ODgrbyxkWzYzNDg4K29dPWhbMjQ4XVtvXSk7Zm9yKGhbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2''@;'; put 'put ''XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5''@;'; put 'put ''ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcyXHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdk''@;'; put 'put ''XHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5''@;'; put 'put ''ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMjQ5XS5s''@;'; put 'put ''ZW5ndGg7KytvKTY1NTMzIT09aFsyNDldW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjQ5XVtvXV09NjM3NDQrbyxkWzYzNzQ0K29dPWhbMjQ5XVtvXSk7Zm9yKGhbMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0''@;'; put 'put ''XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0XHU5ZGI1XHU5ZGI2XHU5ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJiXHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5''@;'; put 'put ''ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5ZGQwXHU5ZGQxXHU5ZGQyXHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRi''@;'; put 'put ''XHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVhXHU5ZGViXHU5ZGVjXHU5ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYxXHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5''@;'; put 'put ''ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0w''@;'; put 'put ''O28hPWhbMjUwXS5sZW5ndGg7KytvKTY1NTMzIT09aFsyNTBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMjUwXVtvXV09NjRlMytvLGRbNjRlMytvXT1oWzI1MF1bb10pO2ZvcihoWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxM1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUx''@;'; put 'put ''ZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1''@;'; put 'put ''OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5''@;'; put 'put ''OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG89MDtvIT1oWzI1MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjUxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI1MV1bb11dPTY0MjU2K28sZFs2NDI1NitvXT1oWzI1MV1bb10pO2ZvcihoWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVj''@;'; put 'put ''Ylx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1''@;'; put 'put ''OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYx''@;'; put 'put ''ZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI1Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjUyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI1Ml1bb11dPTY0NTEyK28sZFs2NDUxMitvXT1oWzI1Ml1bb10pO2ZvcihoWzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1OWY0M1x1OWY0NVx1OWY0Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0''@;'; put 'put ''Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Mlx1OWY2M1x1OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1''@;'; put 'put ''OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1OWY3Y1x1OWY3ZFx1OWY3ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5''@;'; put 'put ''M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5NVx1ZjllN1x1ZjlmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI1M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjUzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI1M11bb11dPTY0NzY4K28sZFs2NDc2OCtvXT1oWzI1M11bb10pO2ZvcihoWzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI1NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjU0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI1NF1bb11dPTY1MDI0K28sZFs2NTAyNCtvXT1oWzI1NF1bb10pO3JldHVybntlbmM6UyxkZWM6ZH19''@;'; put 'put ''KCksals5NDldPWZ1bmN0aW9uKCl7dmFyIG8sZD1bXSxTPXt9LGg9W107Zm9yKGhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgx''@;'; put 'put ''ZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFswXVtvXV09MCtvLGRbMCtvXT1oWzBdW29dKTtmb3IoaFsxMjldPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFjMGVcdWFjMGZcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhc''@;'; put 'put ''dWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJcdWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFj''@;'; put 'put ''NDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFc''@;'; put 'put ''dWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNcdWFjNzVcdWFjNzZcdWFjNzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2VcdWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFj''@;'; put 'put ''OGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFjYTRcdWFjYTVcdWFjYTZcdWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVc''@;'; put 'put ''dWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2VcdWFjY2ZcdWFjZDBcdWFjZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZcdWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFj''@;'; put 'put ''ZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFjZjlcdWFjZmFcdWFjZmJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlc''@;'; put 'put ''dWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMjldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEyOV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMjldW29dXT0zMzAyNCtvLGRbMzMwMjQrb109aFsxMjldW29dKTtmb3IoaFsxMzBd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdc''@;'; put 'put ''dWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFk''@;'; put 'put ''NDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBc''@;'; put 'put ''dWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFk''@;'; put 'put ''OGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFcdWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRc''@;'; put 'put ''dWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFkYmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFk''@;'; put 'put ''Y2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZc''@;'; put 'put ''dWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzMF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzBdW29dXT0zMzI4MCtvLGRbMzMyODArb109aFsxMzBdW29d''@;'; put 'put ''KTtmb3IoaFsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBc''@;'; put 'put ''dWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFl''@;'; put 'put ''MjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdc''@;'; put 'put ''dWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFl''@;'; put 'put ''NzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdc''@;'; put 'put ''dWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFl''@;'; put 'put ''YjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFc''@;'; put 'put ''dWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzMV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzFdW29dXT0zMzUzNitvLGRbMzM1MzYr''@;'; put 'put ''b109aFsxMzFdW29dKTtmb3IoaFsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZcdWFlZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFlZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZc''@;'; put 'put ''dWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFm''@;'; put 'put ''MTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFcdWFmMjJcdWFmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdc''@;'; put 'put ''dWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFmM2VcdWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJcdWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFm''@;'; put 'put ''NTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJcdWFmNjNcdWFmNjZcdWFmNjdcdWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFmNmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBc''@;'; put 'put ''dWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFmODJcdWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJcdWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFm''@;'; put 'put ''OTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNcdWFmYTRcdWFmYTVcdWFmYTZcdWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFmYWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZc''@;'; put 'put ''dWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzMl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzJdW29dXT0zMzc5''@;'; put 'put ''MitvLGRbMzM3OTIrb109aFsxMzJdW29dKTtmb3IoaFsxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBc''@;'; put 'put ''dWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFm''@;'; put 'put ''ZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVcdWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZc''@;'; put 'put ''dWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIwMWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIw''@;'; put 'put ''MjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhcdWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNc''@;'; put 'put ''dWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIwNjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIw''@;'; put 'put ''NmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2JcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFc''@;'; put 'put ''dWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzM11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsx''@;'; put 'put ''MzNdW29dXT0zNDA0OCtvLGRbMzQwNDgrb109aFsxMzNdW29dKTtmb3IoaFsxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlc''@;'; put 'put ''dWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIw''@;'; put 'put ''ZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIx''@;'; put 'put ''MTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2Rc''@;'; put 'put ''dWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIx''@;'; put 'put ''NjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRc''@;'; put 'put ''dWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzNF1bb10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKFNbaFsxMzRdW29dXT0zNDMwNCtvLGRbMzQzMDQrb109aFsxMzRdW29dKTtmb3IoaFsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIxYTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRc''@;'; put 'put ''dWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRcdWIxYjVcdWIxYjZcdWIxYjdcdWIxYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIx''@;'; put 'put ''YmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIxY2FcdWIxY2JcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVcdWIxZTZcdWIxZTdcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFcdWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIx''@;'; put 'put ''ZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGRcdWIyMGVcdWIyMGZcdWIyMTBcdWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIyMThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRc''@;'; put 'put ''dWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRcdWIyMmVcdWIyMmZcdWIyMzBcdWIyMzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZcdWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIy''@;'; put 'put ''M2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIyNGJcdWIyNGNcdWIyNGRcdWIyNGVcdWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIyNTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdc''@;'; put 'put ''dWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJcdWIyNmNcdWIyNmRcdWIyNmVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzNV1b''@;'; put 'put ''b10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzVdW29dXT0zNDU2MCtvLGRbMzQ1NjArb109aFsxMzVdW29dKTtmb3IoaFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNc''@;'; put 'put ''dWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIyOGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIy''@;'; put 'put ''OGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIyYzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIy''@;'; put 'put ''ZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFc''@;'; put 'put ''dWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIzMjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIz''@;'; put 'put ''MmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2NcdWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdc''@;'; put 'put ''dWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzZdLmxlbmd0aDsrK28pNjU1''@;'; put 'put ''MzMhPT1oWzEzNl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzZdW29dXT0zNDgxNitvLGRbMzQ4MTYrb109aFsxMzZdW29dKTtmb3IoaFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFc''@;'; put 'put ''dWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIz''@;'; put 'put ''YzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVc''@;'; put 'put ''dWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0''@;'; put 'put ''MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRc''@;'; put 'put ''dWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxMzddLmxl''@;'; put 'put ''bmd0aDsrK28pNjU1MzMhPT1oWzEzN11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzddW29dXT0zNTA3MitvLGRbMzUwNzIrb109aFsxMzddW29dKTtmb3IoaFsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVc''@;'; put 'put ''dWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTlcdWI0NWFcdWI0NWJcdWI0NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJcdWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJcdWI0NzNcdWI0NzRcdWI0NzVcdWI0NzZcdWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2Zc''@;'; put 'put ''dWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0OGFcdWI0OGJcdWI0OGNcdWI0OGRcdWI0OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJcdWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0''@;'; put 'put ''OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFcdWI0YWJcdWI0YWRcdWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0Yjhc''@;'; put 'put ''dWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0Y2JcdWI0Y2NcdWI0Y2RcdWI0Y2VcdWI0Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0''@;'; put 'put ''ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJcdWI0ZjNcdWI0ZjRcdWI0ZjVcdWI0ZjZcdWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBc''@;'; put 'put ''dWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1MGZcdWI1MTBcdWI1MTFcdWI1MTJcdWI1MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7''@;'; put 'put ''byE9aFsxMzhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzOF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzhdW29dXT0zNTMyOCtvLGRbMzUzMjgrb109aFsxMzhdW29dKTtmb3IoaFsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZcdWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZc''@;'; put 'put ''dWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1''@;'; put 'put ''N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNcdWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdc''@;'; put 'put ''dWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1''@;'; put 'put ''YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlcdWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRc''@;'; put 'put ''dWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxvPTA7byE9aFsxMzldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzEzOV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxMzldW29dXT0zNTU4NCtvLGRbMzU1ODQrb109aFsxMzldW29dKTtmb3IoaFsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2''@;'; put 'put ''MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNc''@;'; put 'put ''dWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2''@;'; put 'put ''NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2Njdc''@;'; put 'put ''dWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2''@;'; put 'put ''ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJc''@;'; put 'put ''dWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2''@;'; put 'put ''YzJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDBdW29dXT0zNTg0MCtvLGRbMzU4NDArb109aFsxNDBdW29dKTtmb3IoaFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2JcdWI2Y2NcdWI2Y2RcdWI2Y2VcdWI2Y2ZcdWI2ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVcdWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2''@;'; put 'put ''ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2ZTJcdWI2ZTNcdWI2ZTRcdWI2ZTVcdWI2ZTZcdWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZc''@;'; put 'put ''dWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZmJcdWI2ZmNcdWI2ZmRcdWI2ZmVcdWI2ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZcdWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3''@;'; put 'put ''MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3MTlcdWI3MWFcdWI3MWJcdWI3MWNcdWI3MWRcdWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZc''@;'; put 'put ''dWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2NcdWI3M2RcdWI3M2VcdWI3M2ZcdWI3NDBcdWI3NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3''@;'; put 'put ''NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3NWRcdWI3NWVcdWI3NWZcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRc''@;'; put 'put ''dWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODVcdWI3ODZcdWI3ODdcdWI3ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3''@;'; put 'put ''OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0MV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDFdW29dXT0zNjA5NitvLGRbMzYwOTYrb109aFsxNDFdW29dKTtmb3IoaFsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3''@;'; put 'put ''YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZcdWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNc''@;'; put 'put ''dWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3''@;'; put 'put ''ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJcdWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJc''@;'; put 'put ''dWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4''@;'; put 'put ''M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRcdWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFc''@;'; put 'put ''dWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4''@;'; put 'put ''ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDJdW29dXT0zNjM1MitvLGRbMzYzNTIrb109aFsxNDJdW29dKTtmb3IoaFsxNDNdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4''@;'; put 'put ''OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVc''@;'; put 'put ''dWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4''@;'; put 'put ''Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZc''@;'; put 'put ''dWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5''@;'; put 'put ''MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVc''@;'; put 'put ''dWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5''@;'; put 'put ''NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDNdW29dXT0zNjYwOCtvLGRbMzY2MDgrb109aFsxNDNdW29dKTtmb3IoaFsx''@;'; put 'put ''NDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjFcdWI5NjJcdWI5NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5NjdcdWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5''@;'; put 'put ''NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5N2VcdWI5N2ZcdWI5ODBcdWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBc''@;'; put 'put ''dWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5OWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFcdWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5''@;'; put 'put ''YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5YjdcdWI5YjhcdWI5YjlcdWI5YmFcdWI5YmJcdWI5YmVcdWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2Jc''@;'; put 'put ''dWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJcdWI5ZWRcdWI5ZWVcdWI5ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNcdWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5''@;'; put 'put ''ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVcdWJhMGZcdWJhMTBcdWJhMTFcdWJhMTJcdWJhMTNcdWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJhMTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRc''@;'; put 'put ''dWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJhMmJcdWJhMmNcdWJhMmRcdWJhMmVcdWJhMmZcdWJhMzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRcdWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJh''@;'; put 'put ''M2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0NF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDRdW29dXT0zNjg2NCtvLGRbMzY4NjQrb109aFsxNDRd''@;'; put 'put ''W29dKTtmb3IoaFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJh''@;'; put 'put ''NWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2Rc''@;'; put 'put ''dWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJh''@;'; put 'put ''OThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNc''@;'; put 'put ''dWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJhZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJh''@;'; put 'put ''ZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRcdWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhc''@;'; put 'put ''dWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJiMGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJi''@;'; put 'put ''MWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDVdW29dXT0zNzEyMCtvLGRbMzcx''@;'; put 'put ''MjArb109aFsxNDVdW29dKTtmb3IoaFsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJi''@;'; put 'put ''M2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNc''@;'; put 'put ''dWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJi''@;'; put 'put ''NzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNc''@;'; put 'put ''dWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJi''@;'; put 'put ''YjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRc''@;'; put 'put ''dWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJi''@;'; put 'put ''ZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDZdW29dXT0z''@;'; put 'put ''NzM3NitvLGRbMzczNzYrb109aFsxNDZdW29dKTtmb3IoaFsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMDNcdWJjMDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJj''@;'; put 'put ''MTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJjMzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2Nc''@;'; put 'put ''dWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJcdWJjNTNcdWJjNTRcdWJjNTVcdWJjNTZcdWJjNTdcdWJjNThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJj''@;'; put 'put ''NWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJjNjlcdWJjNmFcdWJjNmJcdWJjNmNcdWJjNmRcdWJjNmVcdWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJjNzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdc''@;'; put 'put ''dWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGZcdWJjOTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZcdWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJj''@;'; put 'put ''OWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJjYjJcdWJjYjZcdWJjYjdcdWJjYjhcdWJjYjlcdWJjYmFcdWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdc''@;'; put 'put ''dWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGRcdWJjZGVcdWJjZGZcdWJjZTBcdWJjZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVcdWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJj''@;'; put 'put ''ZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0N11bb10uY2hhckNvZGVBdCgwKSYmKFNb''@;'; put 'put ''aFsxNDddW29dXT0zNzYzMitvLGRbMzc2MzIrb109aFsxNDddW29dKTtmb3IoaFsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJk''@;'; put 'put ''MGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNcdWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFc''@;'; put 'put ''dWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJkMzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJc''@;'; put 'put ''dWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJkNmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJk''@;'; put 'put ''NzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJc''@;'; put 'put ''dWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJkYjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJk''@;'; put 'put ''YzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0OF1bb10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKFNbaFsxNDhdW29dXT0zNzg4OCtvLGRbMzc4ODgrb109aFsxNDhdW29dKTtmb3IoaFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJk''@;'; put 'put ''ZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNc''@;'; put 'put ''dWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBc''@;'; put 'put ''dWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJl''@;'; put 'put ''NTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2Zc''@;'; put 'put ''dWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJl''@;'; put 'put ''YTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNDldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE0''@;'; put 'put ''OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNDldW29dXT0zODE0NCtvLGRbMzgxNDQrb109aFsxNDldW29dKTtmb3IoaFsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJl''@;'; put 'put ''YmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhcdWJlYzlcdWJlY2FcdWJlY2JcdWJlY2NcdWJlY2RcdWJlY2VcdWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJlZTdcdWJlZThcdWJlZTlcdWJlZWFcdWJlZWJcdWJlZWRcdWJlZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJcdWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRcdWJlZmVcdWJlZmZcdWJmMDBcdWJmMDJcdWJmMDNcdWJmMDRcdWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJmMGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZc''@;'; put 'put ''dWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJmMjFcdWJmMjJcdWJmMjNcdWJmMjRcdWJmMjVcdWJmMjZcdWJmMjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJcdWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJm''@;'; put 'put ''MzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2NcdWJmM2RcdWJmM2VcdWJmM2ZcdWJmNDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJmNGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZc''@;'; put 'put ''dWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJmNWZcdWJmNjBcdWJmNjFcdWJmNjJcdWJmNjNcdWJmNjRcdWJmNjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlcdWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJm''@;'; put 'put ''NmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2FcdWJmN2JcdWJmN2NcdWJmN2RcdWJmN2VcdWJmN2ZcdWJmODBcdWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTBdLmxlbmd0aDsrK28p''@;'; put 'put ''NjU1MzMhPT1oWzE1MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTBdW29dXT0zODQwMCtvLGRbMzg0MDArb109aFsxNTBdW29dKTtmb3IoaFsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJm''@;'; put 'put ''ODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZcdWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJmYWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJm''@;'; put 'put ''YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJcdWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFc''@;'; put 'put ''dWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJmZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJm''@;'; put 'put ''ZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFcdWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNc''@;'; put 'put ''dWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMwMWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMw''@;'; put 'put ''MjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhcdWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTFd''@;'; put 'put ''Lmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1MV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTFdW29dXT0zODY1NitvLGRbMzg2NTYrb109aFsxNTFdW29dKTtmb3IoaFsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMw''@;'; put 'put ''NDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMw''@;'; put 'put ''NzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNc''@;'; put 'put ''dWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMw''@;'; put 'put ''YjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJc''@;'; put 'put ''dWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMx''@;'; put 'put ''MDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxv''@;'; put 'put ''PTA7byE9aFsxNTJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTJdW29dXT0zODkxMitvLGRbMzg5MTIrb109aFsxNTJdW29dKTtmb3IoaFsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMxNDVcdWMxNDZcdWMxNDdcdWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMxNTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZcdWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNcdWMxNjZcdWMxNmFcdWMxNmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMx''@;'; put 'put ''NzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMxN2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMxODFcdWMxODJcdWMxODNcdWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMxODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFc''@;'; put 'put ''dWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNcdWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMx''@;'; put 'put ''YjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2JcdWMxY2RcdWMxY2VcdWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMxZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFc''@;'; put 'put ''dWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlcdWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRcdWMxZWVcdWMxZWZcdWMxZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdcdWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMx''@;'; put 'put ''ZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMyMGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMyMTRcdWMyMTVcdWMyMTZcdWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxvPTA7byE9aFsxNTNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTNdW29dXT0zOTE2OCtvLGRbMzkxNjgrb109aFsxNTNdW29dKTtmb3IoaFsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhcdWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNc''@;'; put 'put ''dWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMyNGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMy''@;'; put 'put ''NWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFcdWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlc''@;'; put 'put ''dWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMyOTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMy''@;'; put 'put ''OWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZcdWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNc''@;'; put 'put ''dWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMyZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMy''@;'; put 'put ''ZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVc''@;'; put 'put ''dWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1NF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTRdW29dXT0zOTQyNCtvLGRbMzk0MjQrb109aFsxNTRdW29dKTtmb3IoaFsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVc''@;'; put 'put ''dWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMz''@;'; put 'put ''NDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFc''@;'; put 'put ''dWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMz''@;'; put 'put ''N2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRc''@;'; put 'put ''dWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMz''@;'; put 'put ''YjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVc''@;'; put 'put ''dWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTVdW29dXT0zOTY4MCtvLGRbMzk2ODArb109aFsxNTVdW29dKTtmb3IoaFsxNTZdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMzZTdcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMzZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdc''@;'; put 'put ''dWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJcdWM0MDNcdWM0MDRcdWM0MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFcdWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0''@;'; put 'put ''MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0MWJcdWM0MWNcdWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZc''@;'; put 'put ''dWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0MzlcdWM0M2FcdWM0M2JcdWM0M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJcdWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0''@;'; put 'put ''NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNcdWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0NThcdWM0NTlcdWM0NWFcdWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNc''@;'; put 'put ''dWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2FcdWM0N2JcdWM0N2NcdWM0N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJcdWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0''@;'; put 'put ''ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJcdWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0OThcdWM0OTlcdWM0OWFcdWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRc''@;'; put 'put ''dWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTZdW29dXT0zOTkzNitvLGRbMzk5MzYrb109aFsxNTZdW29dKTtmb3IoaFsxNTddPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBcdWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRc''@;'; put 'put ''dWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0''@;'; put 'put ''ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThc''@;'; put 'put ''dWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1''@;'; put 'put ''MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFcdWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZc''@;'; put 'put ''dWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1''@;'; put 'put ''NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1NzlcdWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlc''@;'; put 'put ''dWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTddW29dXT00MDE5MitvLGRbNDAxOTIrb109aFsxNTddW29dKTtmb3Io''@;'; put 'put ''aFsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFc''@;'; put 'put ''dWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1''@;'; put 'put ''ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJc''@;'; put 'put ''dWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2''@;'; put 'put ''MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRc''@;'; put 'put ''dWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2''@;'; put 'put ''NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFc''@;'; put 'put ''dWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNThdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNThdW29dXT00MDQ0OCtvLGRbNDA0NDgrb109aFsx''@;'; put 'put ''NThdW29dKTtmb3IoaFsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2YWJcdWM2YWNcdWM2YWRcdWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNc''@;'; put 'put ''dWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2JcdWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVcdWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2''@;'; put 'put ''ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2Zjdc''@;'; put 'put ''dWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVcdWM3MGZcdWM3MTBcdWM3MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThcdWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3''@;'; put 'put ''MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZc''@;'; put 'put ''dWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRcdWM3NjVcdWM3NjZcdWM3NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRcdWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3''@;'; put 'put ''NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThc''@;'; put 'put ''dWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjdcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNTldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE1OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNTldW29dXT00MDcwNCtvLGRb''@;'; put 'put ''NDA3MDQrb109aFsxNTldW29dKTtmb3IoaFsxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2Fc''@;'; put 'put ''dWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3''@;'; put 'put ''ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3ZjhcdWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRc''@;'; put 'put ''dWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4''@;'; put 'put ''MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJc''@;'; put 'put ''dWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4''@;'; put 'put ''NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2ZcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNc''@;'; put 'put ''dWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjBdW29d''@;'; put 'put ''XT00MDk2MCtvLGRbNDA5NjArb109aFsxNjBdW29dKTtmb3IoaFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZc''@;'; put 'put ''dWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4''@;'; put 'put ''YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZc''@;'; put 'put ''dWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5''@;'; put 'put ''MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRc''@;'; put 'put ''dTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUy''@;'; put 'put ''XHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIy''@;'; put 'put ''Ylx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTYxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2MV1bb11dPTQx''@;'; put 'put ''MjE2K28sZFs0MTIxNitvXT1oWzE2MV1bb10pO2ZvcihoWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkxMFx1YzkxMlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1Yzkx''@;'; put 'put ''Y1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1YzkyZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1''@;'; put 'put ''YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1YzkzZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1Yzk0NFx1Yzk0NVx1Yzk0Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0''@;'; put 'put ''OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1ZFx1Yzk1ZVx1Yzk1Zlx1Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1''@;'; put 'put ''Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUy''@;'; put 'put ''NjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1''@;'; put 'put ''MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjJdW29dXT00MTQ3''@;'; put 'put ''MitvLGRbNDE0NzIrb109aFsxNjJdW29dKTtmb3IoaFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2Rc''@;'; put 'put ''dWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5''@;'; put 'put ''OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJcdWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBc''@;'; put 'put ''dWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5''@;'; put 'put ''ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlc''@;'; put 'put ''dWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZm''@;'; put 'put ''MzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBc''@;'; put 'put ''dWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsx''@;'; put 'put ''NjNdW29dXT00MTcyOCtvLGRbNDE3Mjgrb109aFsxNjNdW29dKTtmb3IoaFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFc''@;'; put 'put ''dWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNh''@;'; put 'put ''MGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNh''@;'; put 'put ''NDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdc''@;'; put 'put ''dTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMx''@;'; put 'put ''NjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2Vc''@;'; put 'put ''dTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2NF1bb10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKFNbaFsxNjRdW29dXT00MTk4NCtvLGRbNDE5ODQrb109aFsxNjRdW29dKTtmb3IoaFsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNhNDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZc''@;'; put 'put ''dWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJcdWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZcdWNhNjdcdWNhNjlcdWNhNmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNh''@;'; put 'put ''NmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNhNzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNhN2VcdWNhN2ZcdWNhODBcdWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNhODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVcdWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRcdWNhOTVcdWNhOTZcdWNhOTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNcdWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNh''@;'; put 'put ''YTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVc''@;'; put 'put ''dTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAz''@;'; put 'put ''YTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNc''@;'; put 'put ''dTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2NV1b''@;'; put 'put ''b10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjVdW29dXT00MjI0MCtvLGRbNDIyNDArb109aFsxNjVdW29dKTtmb3IoaFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNc''@;'; put 'put ''dWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNh''@;'; put 'put ''YzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRcdWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNhZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNi''@;'; put 'put ''MDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNc''@;'; put 'put ''dTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1''@;'; put 'put ''MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjZdLmxlbmd0aDsrK28pNjU1''@;'; put 'put ''MzMhPT1oWzE2Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjZdW29dXT00MjQ5NitvLGRbNDI0OTYrb109aFsxNjZdW29dKTtmb3IoaFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRc''@;'; put 'put ''dWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNi''@;'; put 'put ''NjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZc''@;'; put 'put ''dTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMz''@;'; put 'put ''ODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNc''@;'; put 'put ''dTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjddLmxl''@;'; put 'put ''bmd0aDsrK28pNjU1MzMhPT1oWzE2N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjddW29dXT00Mjc1MitvLGRbNDI3NTIrb109aFsxNjddW29dKTtmb3IoaFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRc''@;'; put 'put ''dWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNiNzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2ZcdWNiODBcdWNiODFcdWNiODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZcdWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVcdWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNiOTVcdWNiOTZcdWNiOTdcdWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNiOWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFc''@;'; put 'put ''dWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNiYTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJcdWNiYWNcdWNiYWRcdWNiYWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJcdWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNi''@;'; put 'put ''YjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFcdWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZmZmRcdTAxMzJcdWZmZmRcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBc''@;'; put 'put ''dTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMyNmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBcdTMyNzFcdTMyNzJcdTMyNzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdcdTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0''@;'; put 'put ''ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlcdTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0ZTBcdTI0ZTFcdTI0ZTJcdTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFc''@;'; put 'put ''dTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVcdTIxNWJcdTIxNWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjhdLmxlbmd0aDsr''@;'; put 'put ''K28pNjU1MzMhPT1oWzE2OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjhdW29dXT00MzAwOCtvLGRbNDMwMDgrb109aFsxNjhdW29dKTtmb3IoaFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZc''@;'; put 'put ''dWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNiZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBcdWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJc''@;'; put 'put ''dWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNjMDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNj''@;'; put 'put ''MTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIw''@;'; put 'put ''MVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1''@;'; put 'put ''MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRhZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3''@;'; put 'put ''Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2OV0ubGVuZ3RoOysrbyk2''@;'; put 'put ''NTUzMyE9PWhbMTY5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2OV1bb11dPTQzMjY0K28sZFs0MzI2NCtvXT1oWzE2OV1bb10pO2ZvcihoWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2My''@;'; put 'put ''YVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3''@;'; put 'put ''Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1''@;'; put 'put ''Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1''@;'; put 'put ''MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1''@;'; put 'put ''MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4''@;'; put 'put ''OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3MF0u''@;'; put 'put ''bGVuZ3RoOysrbyk2NTUzMyE9PWhbMTcwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3MF1bb11dPTQzNTIwK28sZFs0MzUyMCtvXT1oWzE3MF1bb10pO2ZvcihoWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5''@;'; put 'put ''NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2NhYVx1Y2NhZVx1Y2NhZlx1Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2NiNlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1Y2NjYlx1Y2NjY1x1Y2NjZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2Nk''@;'; put 'put ''OFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NkYlx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2NlMlx1Y2NlM1x1Y2NlNVx1Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2NlYVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1''@;'; put 'put ''Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBh''@;'; put 'put ''Zlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1''@;'; put 'put ''MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBl''@;'; put 'put ''Nlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89''@;'; put 'put ''MDtvIT1oWzE3MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTcxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3MV1bb11dPTQzNzc2K28sZFs0Mzc3NitvXT1oWzE3MV1bb10pO2ZvcihoWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2QyZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2Qz''@;'; put 'put ''YVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1''@;'; put 'put ''Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQx''@;'; put 'put ''Ylx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG89MDtvIT1oWzE3Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTcyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3Ml1bb11dPTQ0MDMyK28sZFs0NDAzMitvXT1oWzE3Ml1bb10pO2ZvcihoWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1''@;'; put 'put ''Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5''@;'; put 'put ''N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1''@;'; put 'put ''Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTczXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3M11bb11dPTQ0Mjg4K28sZFs0NDI4OCtvXT1oWzE3M11bb10pO2ZvcihoWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2RkMlx1Y2RkM1x1Y2RkNFx1Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2RkOVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1''@;'; put 'put ''Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2Rm''@;'; put 'put ''Nlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2UwZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1''@;'; put 'put ''Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2UxZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2UyOVx1Y2UyYVx1Y2UyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3NF1bb11dPTQ0NTQ0K28sZFs0NDU0NCtvXT1oWzE3NF1bb10pO2ZvcihoWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1Y2UzOVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1''@;'; put 'put ''Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0ZVx1Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1''@;'; put 'put ''Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U2ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1''@;'; put 'put ''Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3NV1bb11dPTQ0ODAwK28sZFs0NDgwMCtvXT1oWzE3NV1bb10pO2ZvcihoWzE3Nl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1''@;'; put 'put ''Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2Vj''@;'; put 'put ''OVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1''@;'; put 'put ''Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMw''@;'; put 'put ''OFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1''@;'; put 'put ''YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNh''@;'; put 'put ''OFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1''@;'; put 'put ''YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3Nl1bb11dPTQ1MDU2K28sZFs0NTA1NitvXT1oWzE3Nl1bb10pO2Zvciho''@;'; put 'put ''WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2YwOVx1Y2YwYVx1Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2YwZlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1''@;'; put 'put ''Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YyNVx1Y2YyNlx1Y2YyN1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2Yz''@;'; put 'put ''NVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2YzZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1''@;'; put 'put ''Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1Y2Y2MFx1Y2Y2MVx1Y2Y2Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQw''@;'; put 'put ''Zlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1''@;'; put 'put ''YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRm''@;'; put 'put ''Zlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1''@;'; put 'put ''YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3N11bb11dPTQ1MzEyK28sZFs0NTMxMitvXT1oWzE3''@;'; put 'put ''N11bb10pO2ZvcihoWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1''@;'; put 'put ''Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5''@;'; put 'put ''N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1''@;'; put 'put ''Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2ZjMFx1Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3''@;'; put 'put ''OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1''@;'; put 'put ''YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5''@;'; put 'put ''Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1''@;'; put 'put ''YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3OF1bb11dPTQ1NTY4K28sZFs0''@;'; put 'put ''NTU2OCtvXT1oWzE3OF1bb10pO2ZvcihoWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1''@;'; put 'put ''Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2Zm''@;'; put 'put ''NFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1''@;'; put 'put ''ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAy''@;'; put 'put ''Ylx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1''@;'; put 'put ''YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEy''@;'; put 'put ''M1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1''@;'; put 'put ''YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3OV1bb11d''@;'; put 'put ''PTQ1ODI0K28sZFs0NTgyNCtvXT1oWzE3OV1bb10pO2ZvcihoWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAyZVx1ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAzM1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1''@;'; put 'put ''ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1''@;'; put 'put ''N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2OVx1ZDA2YVx1ZDA2Ylx1ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1''@;'; put 'put ''ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1ZDA4Nlx1ZDA4N1x1ZDA4OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5''@;'; put 'put ''MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1''@;'; put 'put ''YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJk''@;'; put 'put ''OFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmN1x1YjJmOFx1YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1''@;'; put 'put ''YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTgwXVtvXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''U1toWzE4MF1bb11dPTQ2MDgwK28sZFs0NjA4MCtvXT1oWzE4MF1bb10pO2ZvcihoWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1''@;'; put 'put ''ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBiMVx1ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBi''@;'; put 'put ''YVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1ZDBkMlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBmM1x1ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBm''@;'; put 'put ''Zlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1''@;'; put 'put ''YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2''@;'; put 'put ''MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1''@;'; put 'put ''YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTgxXVtvXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoU1toWzE4MV1bb11dPTQ2MzM2K28sZFs0NjMzNitvXT1oWzE4MV1bb10pO2ZvcihoWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1''@;'; put 'put ''ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEy''@;'; put 'put ''MVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2''@;'; put 'put ''NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1''@;'; put 'put ''YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2''@;'; put 'put ''OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1''@;'; put 'put ''Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhb''@;'; put 'put ''MTgyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4Ml1bb11dPTQ2NTkyK28sZFs0NjU5MitvXT1oWzE4Ml1bb10pO2ZvcihoWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1''@;'; put 'put ''ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1ZDE4M1x1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5YVx1ZDE5Ylx1ZDE5Y1x1ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFj''@;'; put 'put ''Nlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFjZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1''@;'; put 'put ''YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1''@;'; put 'put ''Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1''@;'; put 'put ''YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4M10ubGVuZ3RoOysr''@;'; put 'put ''byk2NTUzMyE9PWhbMTgzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4M11bb11dPTQ2ODQ4K28sZFs0Njg0OCtvXT1oWzE4M11bb10pO2ZvcihoWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1''@;'; put 'put ''ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFlM1x1ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1ZDFmYlx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1''@;'; put 'put ''ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIxM1x1ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIx''@;'; put 'put ''ZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1''@;'; put 'put ''YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1Yjlm''@;'; put 'put ''OFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1''@;'; put 'put ''YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4''@;'; put 'put ''NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4NF1bb11dPTQ3MTA0K28sZFs0NzEwNCtvXT1oWzE4NF1bb10pO2ZvcihoWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1''@;'; put 'put ''ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3''@;'; put 'put ''Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1''@;'; put 'put ''YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJk''@;'; put 'put ''MFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1''@;'; put 'put ''YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG89MDtvIT1oWzE4NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4NV1bb11dPTQ3MzYwK28sZFs0NzM2MCtvXT1oWzE4NV1bb10pO2ZvcihoWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJh''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJiYVx1ZDJiYlx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJjNVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1''@;'; put 'put ''ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJl''@;'; put 'put ''N1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1''@;'; put 'put ''YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0''@;'; put 'put ''Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1''@;'; put 'put ''YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4Nl1bb11dPTQ3NjE2K28sZFs0NzYxNitvXT1oWzE4Nl1bb10pO2ZvcihoWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMwYlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMx''@;'; put 'put ''ZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1''@;'; put 'put ''ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0ZFx1ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1''@;'; put 'put ''OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1ZDM2OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1''@;'; put 'put ''YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYx''@;'; put 'put ''ZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1''@;'; put 'put ''YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBk''@;'; put 'put ''ZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4N11bb11dPTQ3ODcyK28sZFs0Nzg3MitvXT1oWzE4N11bb10pO2ZvcihoWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4''@;'; put 'put ''Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1''@;'; put 'put ''ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNi''@;'; put 'put ''ZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1''@;'; put 'put ''YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0''@;'; put 'put ''ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1''@;'; put 'put ''YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIy''@;'; put 'put ''OFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4OF1bb11dPTQ4MTI4K28sZFs0ODEyOCtvXT1oWzE4OF1bb10pO2ZvcihoWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1ZDNlMFx1ZDNlMlx1ZDNlNFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNl''@;'; put 'put ''Zlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQwNlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1''@;'; put 'put ''ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQxN1x1ZDQxOFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQy''@;'; put 'put ''Mlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQyOFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQzMlx1ZDQzM1x1ZDQzNFx1ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1''@;'; put 'put ''YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJi''@;'; put 'put ''OVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1''@;'; put 'put ''YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNm''@;'; put 'put ''OFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4OV1bb11dPTQ4Mzg0K28sZFs0ODM4NCtvXT1oWzE4OV1bb10pO2ZvcihoWzE5MF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQzZVx1ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0''@;'; put 'put ''Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1ZDQ1Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1''@;'; put 'put ''ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3''@;'; put 'put ''ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1ZDQ5N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1''@;'; put 'put ''YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUy''@;'; put 'put ''Y1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1''@;'; put 'put ''YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVj''@;'; put 'put ''NVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5MF1bb11dPTQ4NjQwK28sZFs0ODY0MCtvXT1oWzE5MF1bb10pO2Zv''@;'; put 'put ''cihoWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRh''@;'; put 'put ''ZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1''@;'; put 'put ''ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRk''@;'; put 'put ''ZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1''@;'; put 'put ''YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYx''@;'; put 'put ''Ylx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1''@;'; put 'put ''YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZj''@;'; put 'put ''NVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5MV1bb11dPTQ4ODk2K28sZFs0ODg5NitvXT1o''@;'; put 'put ''WzE5MV1bb10pO2ZvcihoWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1ZDUwMFx1ZDUwMVx1ZDUwMlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUw''@;'; put 'put ''ZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUyMlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1''@;'; put 'put ''ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUyY1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1ZDUzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUz''@;'; put 'put ''ZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1NFx1ZDU1NVx1ZDU1Nlx1ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1''@;'; put 'put ''YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0''@;'; put 'put ''YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1''@;'; put 'put ''Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1Yzdj''@;'; put 'put ''ZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5Ml1bb11dPTQ5MTUyK28s''@;'; put 'put ''ZFs0OTE1MitvXT1oWzE5Ml1bb10pO2ZvcihoWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3''@;'; put 'put ''Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1''@;'; put 'put ''ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVhNFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVh''@;'; put 'put ''YVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1''@;'; put 'put ''ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3''@;'; put 'put ''YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1''@;'; put 'put ''YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5''@;'; put 'put ''MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5M11b''@;'; put 'put ''b11dPTQ5NDA4K28sZFs0OTQwOCtvXT1oWzE5M11bb10pO2ZvcihoWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVk''@;'; put 'put ''Nlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1''@;'; put 'put ''ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYx''@;'; put 'put ''Nlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1''@;'; put 'put ''ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2Ew''@;'; put 'put ''ZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1''@;'; put 'put ''Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2Mw''@;'; put 'put ''ZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk0XVtvXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoU1toWzE5NF1bb11dPTQ5NjY0K28sZFs0OTY2NCtvXT1oWzE5NF1bb10pO2ZvcihoWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0''@;'; put 'put ''Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1Zlx1ZDY2MFx1ZDY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1''@;'; put 'put ''ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1ZDY3YVx1ZDY3Ylx1ZDY3Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NVx1ZDY5Nlx1ZDY5N1x1ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1''@;'; put 'put ''ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2Nh''@;'; put 'put ''MFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1''@;'; put 'put ''Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2Rm''@;'; put 'put ''MFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk1XVtvXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoU1toWzE5NV1bb11dPTQ5OTIwK28sZFs0OTkyMCtvXT1oWzE5NV1bb10pO2ZvcihoWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZi''@;'; put 'put ''Mlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1''@;'; put 'put ''ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1''@;'; put 'put ''ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5''@;'; put 'put ''MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1''@;'; put 'put ''Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2Zi''@;'; put 'put ''MFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5Nl0ubGVuZ3RoOysrbyk2NTUzMyE9''@;'; put 'put ''PWhbMTk2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5Nl1bb11dPTUwMTc2K28sZFs1MDE3NitvXT1oWzE5Nl1bb10pO2ZvcihoWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcx''@;'; put 'put ''YVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1''@;'; put 'put ''ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBh''@;'; put 'put ''OFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1''@;'; put 'put ''ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFi''@;'; put 'put ''MVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5N10ubGVuZ3Ro''@;'; put 'put ''Oysrbyk2NTUzMyE9PWhbMTk3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5N11bb11dPTUwNDMyK28sZFs1MDQzMitvXT1oWzE5N11bb10pO2ZvcihoWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4''@;'; put 'put ''ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdhM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJi''@;'; put 'put ''Y1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1''@;'; put 'put ''ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNh''@;'; put 'put ''MFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1o''@;'; put 'put ''WzE5OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5OF1bb11dPTUwNjg4K28sZFs1MDY4OCtvXT1oWzE5OF1bb10pO2ZvcihoWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4''@;'; put 'put ''MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1''@;'; put 'put ''ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVj''@;'; put 'put ''Y1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG89MDtvIT1oWzE5OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5OV1bb11dPTUwOTQ0K28sZFs1MDk0NCtvXT1oWzE5OV1bb10pO2ZvcihoWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1''@;'; put 'put ''MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1''@;'; put 'put ''ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0''@;'; put 'put ''N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjAwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwMF1bb11dPTUxMjAwK28sZFs1MTIwMCtvXT1oWzIwMF1bb10pO2ZvcihoWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFj''@;'; put 'put ''MVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1''@;'; put 'put ''ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2''@;'; put 'put ''Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1''@;'; put 'put ''OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwMl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjAyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwMl1bb11dPTUxNzEyK28sZFs1MTcxMitvXT1oWzIwMl1bb10pO2ZvcihoWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgw''@;'; put 'put ''OFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1''@;'; put 'put ''NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2''@;'; put 'put ''ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1''@;'; put 'put ''NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjAzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwM11bb11dPTUxOTY4K28sZFs1MTk2OCtvXT1oWzIwM11bb10pO2ZvcihoWzIwNF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZm''@;'; put 'put ''Mlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1''@;'; put 'put ''NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4''@;'; put 'put ''NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1''@;'; put 'put ''NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwNF1bb11dPTUyMjI0K28sZFs1MjIyNCtvXT1oWzIwNF1bb10pO2ZvcihoWzIwNV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3''@;'; put 'put ''OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1''@;'; put 'put ''NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMz''@;'; put 'put ''N1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1''@;'; put 'put ''ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwNV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwNV1bb11dPTUyNDgwK28sZFs1MjQ4MCtvXT1oWzIwNV1bb10p''@;'; put 'put ''O2ZvcihoWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNk''@;'; put 'put ''M1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1''@;'; put 'put ''NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1Njlk''@;'; put 'put ''MFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1''@;'; put 'put ''OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwNl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwNl1bb11dPTUyNzM2K28sZFs1MjczNitv''@;'; put 'put ''XT1oWzIwNl1bb10pO2ZvcihoWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1''@;'; put 'put ''N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5''@;'; put 'put ''OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1''@;'; put 'put ''OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwN11bb11dPTUyOTky''@;'; put 'put ''K28sZFs1Mjk5MitvXT1oWzIwN11bb10pO2ZvcihoWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1''@;'; put 'put ''NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4''@;'; put 'put ''ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1''@;'; put 'put ''NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIw''@;'; put 'put ''OF1bb11dPTUzMjQ4K28sZFs1MzI0OCtvXT1oWzIwOF1bb10pO2ZvcihoWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1''@;'; put 'put ''Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEz''@;'; put 'put ''YVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1ZjkxNVx1ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1''@;'; put 'put ''ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA5XVtvXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoU1toWzIwOV1bb11dPTUzNTA0K28sZFs1MzUwNCtvXT1oWzIwOV1bb10pO2ZvcihoWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1''@;'; put 'put ''NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzM1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1Zjkz''@;'; put 'put ''ZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1''@;'; put 'put ''OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjEwXVtv''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoU1toWzIxMF1bb11dPTUzNzYwK28sZFs1Mzc2MCtvXT1oWzIxMF1bb10pO2ZvcihoWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1''@;'; put 'put ''OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1''@;'; put 'put ''ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1''@;'; put 'put ''NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1NjM4OVx1NjQxN1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxMV0ubGVuZ3RoOysrbyk2NTUz''@;'; put 'put ''MyE9PWhbMjExXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxMV1bb11dPTU0MDE2K28sZFs1NDAxNitvXT1oWzIxMV1bb10pO2ZvcihoWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1''@;'; put 'put ''OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4''@;'; put 'put ''MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1''@;'; put 'put ''OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxMl0ubGVu''@;'; put 'put ''Z3RoOysrbyk2NTUzMyE9PWhbMjEyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxMl1bb11dPTU0MjcyK28sZFs1NDI3MitvXT1oWzIxMl1bb10pO2ZvcihoWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1''@;'; put 'put ''NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2''@;'; put 'put ''Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1''@;'; put 'put ''NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtv''@;'; put 'put ''IT1oWzIxM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjEzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxM11bb11dPTU0NTI4K28sZFs1NDUyOCtvXT1oWzIxM11bb10pO2ZvcihoWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1''@;'; put 'put ''ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1Nzlh''@;'; put 'put ''ZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1''@;'; put 'put ''OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG89MDtvIT1oWzIxNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxNF1bb11dPTU0Nzg0K28sZFs1NDc4NCtvXT1oWzIxNF1bb10pO2ZvcihoWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1''@;'; put 'put ''N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYy''@;'; put 'put ''YVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1''@;'; put 'put ''NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1Nzgy''@;'; put 'put ''Y1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxNV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxNV1bb11dPTU1MDQwK28sZFs1NTA0MCtvXT1oWzIxNV1bb10pO2ZvcihoWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1''@;'; put 'put ''OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUx''@;'; put 'put ''Y1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1''@;'; put 'put ''N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2''@;'; put 'put ''Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxNl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxNl1bb11dPTU1Mjk2K28sZFs1NTI5NitvXT1oWzIxNl1bb10pO2ZvcihoWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1''@;'; put 'put ''NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1Nzdk''@;'; put 'put ''Ylx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1''@;'; put 'put ''N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAx''@;'; put 'put ''MVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxN11bb11dPTU1NTUyK28sZFs1NTU1MitvXT1oWzIxN11bb10pO2ZvcihoWzIxOF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1''@;'; put 'put ''OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFh''@;'; put 'put ''Ylx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1''@;'; put 'put ''ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgx''@;'; put 'put ''Mlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxOF1bb11dPTU1ODA4K28sZFs1NTgwOCtvXT1oWzIxOF1bb10pO2ZvcihoWzIx''@;'; put 'put ''OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1''@;'; put 'put ''OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIx''@;'; put 'put ''N1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1''@;'; put 'put ''NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNk''@;'; put 'put ''NVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxOV1bb11dPTU2MDY0K28sZFs1NjA2NCtvXT1oWzIxOV1b''@;'; put 'put ''b10pO2ZvcihoWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1''@;'; put 'put ''ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2Fk''@;'; put 'put ''ZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1''@;'; put 'put ''ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUw''@;'; put 'put ''ZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyMF1bb11dPTU2MzIwK28sZFs1NjMy''@;'; put 'put ''MCtvXT1oWzIyMF1bb10pO2ZvcihoWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBl''@;'; put 'put ''OFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1''@;'; put 'put ''NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJk''@;'; put 'put ''OFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyMV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyMV1bb11dPTU2''@;'; put 'put ''NTc2K28sZFs1NjU3NitvXT1oWzIyMV1bb10pO2ZvcihoWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNk''@;'; put 'put ''M1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1''@;'; put 'put ''NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhk''@;'; put 'put ''Zlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyMl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1to''@;'; put 'put ''WzIyMl1bb11dPTU2ODMyK28sZFs1NjgzMitvXT1oWzIyMl1bb10pO2ZvcihoWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5''@;'; put 'put ''Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1''@;'; put 'put ''NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWVi''@;'; put 'put ''Nlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3Mlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIzXVtvXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoU1toWzIyM11bb11dPTU3MDg4K28sZFs1NzA4OCtvXT1oWzIyM11bb10pO2ZvcihoWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1Nzhh''@;'; put 'put ''OVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1''@;'; put 'put ''ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4''@;'; put 'put ''M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI0''@;'; put 'put ''XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyNF1bb11dPTU3MzQ0K28sZFs1NzM0NCtvXT1oWzIyNF1bb10pO2ZvcihoWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMw''@;'; put 'put ''Zlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1''@;'; put 'put ''OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAw''@;'; put 'put ''MVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyNV0ubGVuZ3RoOysrbyk2''@;'; put 'put ''NTUzMyE9PWhbMjI1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyNV1bb11dPTU3NjAwK28sZFs1NzYwMCtvXT1oWzIyNV1bb10pO2ZvcihoWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYy''@;'; put 'put ''Nlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1''@;'; put 'put ''OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRm''@;'; put 'put ''M1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyNl0u''@;'; put 'put ''bGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyNl1bb11dPTU3ODU2K28sZFs1Nzg1NitvXT1oWzIyNl1bb10pO2ZvcihoWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3''@;'; put 'put ''Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1''@;'; put 'put ''OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjVi''@;'; put 'put ''MFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLG89''@;'; put 'put ''MDtvIT1oWzIyN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyN11bb11dPTU4MTEyK28sZFs1ODExMitvXT1oWzIyN11bb10pO2ZvcihoWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZj''@;'; put 'put ''NFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1''@;'; put 'put ''OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJj''@;'; put 'put ''ZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG89MDtvIT1oWzIyOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyOF1bb11dPTU4MzY4K28sZFs1ODM2OCtvXT1oWzIyOF1bb10pO2ZvcihoWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1Njkz''@;'; put 'put ''MFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1''@;'; put 'put ''NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEw''@;'; put 'put ''NFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1''@;'; put 'put ''Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyOV1bb11dPTU4NjI0K28sZFs1ODYyNCtvXT1oWzIyOV1bb10pO2ZvcihoWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0''@;'; put 'put ''NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1''@;'; put 'put ''NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2Uy''@;'; put 'put ''Zlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1''@;'; put 'put ''NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjMwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzMF1bb11dPTU4ODgwK28sZFs1ODg4MCtvXT1oWzIzMF1bb10pO2ZvcihoWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFj''@;'; put 'put ''MVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1''@;'; put 'put ''NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYw''@;'; put 'put ''Mlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1''@;'; put 'put ''NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzMV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjMxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzMV1bb11dPTU5MTM2K28sZFs1OTEzNitvXT1oWzIzMV1bb10pO2ZvcihoWzIzMl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcw''@;'; put 'put ''OFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1''@;'; put 'put ''N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2''@;'; put 'put ''YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1''@;'; put 'put ''NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzMl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjMyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzMl1bb11dPTU5MzkyK28sZFs1OTM5MitvXT1oWzIzMl1bb10pO2Zvciho''@;'; put 'put ''WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0''@;'; put 'put ''N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1''@;'; put 'put ''NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1''@;'; put 'put ''Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1''@;'; put 'put ''NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjMzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzM11bb11dPTU5NjQ4K28sZFs1OTY0OCtvXT1oWzIz''@;'; put 'put ''M11bb10pO2ZvcihoWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0''@;'; put 'put ''Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1''@;'; put 'put ''ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2''@;'; put 'put ''Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1''@;'; put 'put ''ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzNF1bb11dPTU5OTA0K28sZFs1''@;'; put 'put ''OTkwNCtvXT1oWzIzNF1bb10pO2ZvcihoWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1''@;'; put 'put ''ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2''@;'; put 'put ''OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1''@;'; put 'put ''NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzNV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzNV1bb11d''@;'; put 'put ''PTYwMTYwK28sZFs2MDE2MCtvXT1oWzIzNV1bb10pO2ZvcihoWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1''@;'; put 'put ''NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3''@;'; put 'put ''MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1''@;'; put 'put ''OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzNl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM2XVtvXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''U1toWzIzNl1bb11dPTYwNDE2K28sZFs2MDQxNitvXT1oWzIzNl1bb10pO2ZvcihoWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1''@;'; put 'put ''NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3''@;'; put 'put ''YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1''@;'; put 'put ''ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM3XVtvXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoU1toWzIzN11bb11dPTYwNjcyK28sZFs2MDY3MitvXT1oWzIzN11bb10pO2ZvcihoWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1''@;'; put 'put ''OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBi''@;'; put 'put ''OFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1''@;'; put 'put ''NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZiMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhb''@;'; put 'put ''MjM4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzOF1bb11dPTYwOTI4K28sZFs2MDkyOCtvXT1oWzIzOF1bb10pO2ZvcihoWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1''@;'; put 'put ''OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1''@;'; put 'put ''Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1''@;'; put 'put ''NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzOV0ubGVuZ3RoOysr''@;'; put 'put ''byk2NTUzMyE9PWhbMjM5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzOV1bb11dPTYxMTg0K28sZFs2MTE4NCtvXT1oWzIzOV1bb10pO2ZvcihoWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1''@;'; put 'put ''ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYx''@;'; put 'put ''NVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1''@;'; put 'put ''OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0''@;'; put 'put ''MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0MF1bb11dPTYxNDQwK28sZFs2MTQ0MCtvXT1oWzI0MF1bb10pO2ZvcihoWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1''@;'; put 'put ''NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4''@;'; put 'put ''NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1''@;'; put 'put ''OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG89MDtvIT1oWzI0MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0MV1bb11dPTYxNjk2K28sZFs2MTY5NitvXT1oWzI0MV1bb10pO2ZvcihoWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1''@;'; put 'put ''NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3''@;'; put 'put ''NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1''@;'; put 'put ''OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0Ml1bb11dPTYxOTUyK28sZFs2MTk1MitvXT1oWzI0Ml1bb10pO2ZvcihoWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1''@;'; put 'put ''NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5''@;'; put 'put ''YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1''@;'; put 'put ''NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1Njdm''@;'; put 'put ''NVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0M11bb11dPTYyMjA4K28sZFs2MjIwOCtvXT1oWzI0M11bb10pO2ZvcihoWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1''@;'; put 'put ''NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFl''@;'; put 'put ''N1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1''@;'; put 'put ''NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5''@;'; put 'put ''NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0NF1bb11dPTYyNDY0K28sZFs2MjQ2NCtvXT1oWzI0NF1bb10pO2ZvcihoWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1''@;'; put 'put ''NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBh''@;'; put 'put ''NFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1''@;'; put 'put ''OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdm''@;'; put 'put ''Mlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0NV1bb11dPTYyNzIwK28sZFs2MjcyMCtvXT1oWzI0NV1bb10pO2ZvcihoWzI0Nl09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1''@;'; put 'put ''NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVk''@;'; put 'put ''NFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1''@;'; put 'put ''OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRl''@;'; put 'put ''Mlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0Nl1bb11dPTYyOTc2K28sZFs2Mjk3NitvXT1oWzI0Nl1bb10pO2Zv''@;'; put 'put ''cihoWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1''@;'; put 'put ''NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0''@;'; put 'put ''Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1''@;'; put 'put ''ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRk''@;'; put 'put ''Ylx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0N11bb11dPTYzMjMyK28sZFs2MzIzMitvXT1o''@;'; put 'put ''WzI0N11bb10pO2ZvcihoWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0''@;'; put 'put ''ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1''@;'; put 'put ''NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2''@;'; put 'put ''YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0OF1bb11dPTYzNDg4K28s''@;'; put 'put ''ZFs2MzQ4OCtvXT1oWzI0OF1bb10pO2ZvcihoWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAz''@;'; put 'put ''Y1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1''@;'; put 'put ''N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVh''@;'; put 'put ''Mlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0OV1b''@;'; put 'put ''b11dPTYzNzQ0K28sZFs2Mzc0NCtvXT1oWzI0OV1bb10pO2ZvcihoWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAx''@;'; put 'put ''Nlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1''@;'; put 'put ''OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZl''@;'; put 'put ''MFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI1MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjUwXVtvXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoU1toWzI1MF1bb11dPTY0ZTMrbyxkWzY0ZTMrb109aFsyNTBdW29dKTtmb3IoaFsyNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlc''@;'; put 'put ''dThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0''@;'; put 'put ''ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFc''@;'; put 'put ''dTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNTFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI1MV1bb10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKFNbaFsyNTFdW29dXT02NDI1NitvLGRbNjQyNTYrb109aFsyNTFdW29dKTtmb3IoaFsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNc''@;'; put 'put ''dTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZl''@;'; put 'put ''NWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFc''@;'; put 'put ''dTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNTJdLmxlbmd0aDsrK28pNjU1MzMhPT1o''@;'; put 'put ''WzI1Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNTJdW29dXT02NDUxMitvLGRbNjQ1MTIrb109aFsyNTJdW29dKTtmb3IoaFsyNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJc''@;'; put 'put ''dTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcw''@;'; put 'put ''Y2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhc''@;'; put 'put ''dTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNTNdLmxlbmd0aDsr''@;'; put 'put ''K28pNjU1MzMhPT1oWzI1M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNTNdW29dXT02NDc2OCtvLGRbNjQ3Njgrb109aFsyNTNdW29dKTtyZXR1cm57ZW5jOlMsZGVjOmR9fSgpLGpbOTUwXT1mdW5jdGlvbigpe3ZhciBvLGQ9W10sUz17fSxoPVtdO2ZvcihoWzBdPSJcMFx4MDFceDAyXHgw''@;'; put 'put ''M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd''@;'; put 'put ''Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1o''@;'; put 'put ''WzBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzBdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMF1bb11dPTArbyxkWzArb109aFswXVtvXSk7Zm9yKGhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUz''@;'; put 'put ''MDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1''@;'; put 'put ''ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAw''@;'; put 'put ''Zlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdc''@;'; put 'put ''dTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYw''@;'; put 'put ''XHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUz''@;'; put 'put ''M2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIiksbz0wO28hPWhbMTYxXS5sZW5ndGg7Kytv''@;'; put 'put ''KTY1NTMzIT09aFsxNjFdW29dLmNoYXJDb2RlQXQoMCkmJihTW2hbMTYxXVtvXV09NDEyMTYrbyxkWzQxMjE2K29dPWhbMTYxXVtvXSk7Zm9yKGhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVm''@;'; put 'put ''ZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1''@;'; put 'put ''NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUw''@;'; put 'put ''Y1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYx''@;'; put 'put ''Mlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1''@;'; put 'put ''NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYz''@;'; put 'put ''YVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2Ml0u''@;'; put 'put ''bGVuZ3RoOysrbyk2NTUzMyE9PWhbMTYyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2Ml1bb11dPTQxNDcyK28sZFs0MTQ3MitvXT1oWzE2Ml1bb10pO2ZvcihoWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1''@;'; put 'put ''OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1''@;'; put 'put ''MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEw''@;'; put 'put ''OVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzEx''@;'; put 'put ''ZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89''@;'; put 'put ''MDtvIT1oWzE2M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTYzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2M11bb11dPTQxNzI4K28sZFs0MTcyOCtvXT1oWzE2M11bb10pO2ZvcihoWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1''@;'; put 'put ''NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRm''@;'; put 'put ''MVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5''@;'; put 'put ''NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1''@;'; put 'put ''NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUy''@;'; put 'put ''Zlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG89MDtvIT1oWzE2NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTY0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2NF1bb11dPTQxOTg0K28sZFs0MTk4NCtvXT1oWzE2NF1bb10pO2ZvcihoWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1''@;'; put 'put ''NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNl''@;'; put 'put ''Nlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUw''@;'; put 'put ''Mlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1''@;'; put 'put ''NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1''@;'; put 'put ''Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1''@;'; put 'put ''NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTY1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2NV1bb11dPTQyMjQwK28sZFs0MjI0MCtvXT1oWzE2NV1bb10pO2ZvcihoWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1''@;'; put 'put ''NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1''@;'; put 'put ''N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2''@;'; put 'put ''M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1''@;'; put 'put ''NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIx''@;'; put 'put ''Zlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1''@;'; put 'put ''NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTY2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2Nl1bb11dPTQyNDk2K28sZFs0MjQ5NitvXT1oWzE2Nl1bb10pO2ZvcihoWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1''@;'; put 'put ''NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQy''@;'; put 'put ''MFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThl''@;'; put 'put ''Zlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1''@;'; put 'put ''NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4''@;'; put 'put ''MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1''@;'; put 'put ''Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTY3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2N11bb11dPTQyNzUyK28sZFs0Mjc1MitvXT1oWzE2N11bb10pO2ZvcihoWzE2OF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1''@;'; put 'put ''NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZl''@;'; put 'put ''Zlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEw''@;'; put 'put ''MFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1''@;'; put 'put ''OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4''@;'; put 'put ''Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1''@;'; put 'put ''NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTY4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2OF1bb11dPTQzMDA4K28sZFs0MzAwOCtvXT1oWzE2OF1bb10pO2Zvciho''@;'; put 'put ''WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1''@;'; put 'put ''NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTlj''@;'; put 'put ''Ylx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNh''@;'; put 'put ''MVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1''@;'; put 'put ''NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJk''@;'; put 'put ''Mlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1''@;'; put 'put ''NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE2OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTY5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE2OV1bb11dPTQzMjY0K28sZFs0MzI2NCtvXT1oWzE2''@;'; put 'put ''OV1bb10pO2ZvcihoWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1''@;'; put 'put ''Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNh''@;'; put 'put ''Ylx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5''@;'; put 'put ''NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1''@;'; put 'put ''NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFm''@;'; put 'put ''ZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1''@;'; put 'put ''OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTcwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3MF1bb11dPTQzNTIwK28sZFs0''@;'; put 'put ''MzUyMCtvXT1oWzE3MF1bb10pO2ZvcihoWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1''@;'; put 'put ''NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0''@;'; put 'put ''N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1''@;'; put 'put ''NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVh''@;'; put 'put ''MFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1''@;'; put 'put ''NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTcxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3MV1bb11d''@;'; put 'put ''PTQzNzc2K28sZFs0Mzc3NitvXT1oWzE3MV1bb10pO2ZvcihoWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1''@;'; put 'put ''NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1Njdj''@;'; put 'put ''Zlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1''@;'; put 'put ''NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4''@;'; put 'put ''OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1''@;'; put 'put ''N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTcyXVtvXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''U1toWzE3Ml1bb11dPTQ0MDMyK28sZFs0NDAzMitvXT1oWzE3Ml1bb10pO2ZvcihoWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1''@;'; put 'put ''ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJk''@;'; put 'put ''M1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1''@;'; put 'put ''OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAy''@;'; put 'put ''MVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1''@;'; put 'put ''NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTczXVtvXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoU1toWzE3M11bb11dPTQ0Mjg4K28sZFs0NDI4OCtvXT1oWzE3M11bb10pO2ZvcihoWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1''@;'; put 'put ''NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJi''@;'; put 'put ''NFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1''@;'; put 'put ''NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1''@;'; put 'put ''NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0''@;'; put 'put ''MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1''@;'; put 'put ''Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhb''@;'; put 'put ''MTc0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3NF1bb11dPTQ0NTQ0K28sZFs0NDU0NCtvXT1oWzE3NF1bb10pO2ZvcihoWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1''@;'; put 'put ''NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1''@;'; put 'put ''NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1''@;'; put 'put ''NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1''@;'; put 'put ''NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2Zj''@;'; put 'put ''MVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1''@;'; put 'put ''ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3NV0ubGVuZ3RoOysr''@;'; put 'put ''byk2NTUzMyE9PWhbMTc1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3NV1bb11dPTQ0ODAwK28sZFs0NDgwMCtvXT1oWzE3NV1bb10pO2ZvcihoWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1''@;'; put 'put ''ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNh''@;'; put 'put ''Mlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1''@;'; put 'put ''OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1''@;'; put 'put ''NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMw''@;'; put 'put ''Zlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1''@;'; put 'put ''NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3''@;'; put 'put ''Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3Nl1bb11dPTQ1MDU2K28sZFs0NTA1NitvXT1oWzE3Nl1bb10pO2ZvcihoWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1''@;'; put 'put ''NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQy''@;'; put 'put ''NFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1''@;'; put 'put ''NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1''@;'; put 'put ''NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2''@;'; put 'put ''OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1''@;'; put 'put ''NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG89MDtvIT1oWzE3N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3N11bb11dPTQ1MzEyK28sZFs0NTMxMitvXT1oWzE3N11bb10pO2ZvcihoWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUx''@;'; put 'put ''YVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1''@;'; put 'put ''NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1''@;'; put 'put ''NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2Iy''@;'; put 'put ''ZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1''@;'; put 'put ''ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3OF1bb11dPTQ1NTY4K28sZFs0NTU2OCtvXT1oWzE3OF1bb10pO2ZvcihoWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEy''@;'; put 'put ''YVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1''@;'; put 'put ''OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1''@;'; put 'put ''OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5''@;'; put 'put ''OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1''@;'; put 'put ''NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThm''@;'; put 'put ''YVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE3OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTc5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE3OV1bb11dPTQ1ODI0K28sZFs0NTgyNCtvXT1oWzE3OV1bb10pO2ZvcihoWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0''@;'; put 'put ''MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1''@;'; put 'put ''NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1''@;'; put 'put ''NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1Njhk''@;'; put 'put ''NVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1''@;'; put 'put ''NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0''@;'; put 'put ''M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTgwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4MF1bb11dPTQ2MDgwK28sZFs0NjA4MCtvXT1oWzE4MF1bb10pO2ZvcihoWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMy''@;'; put 'put ''NVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1''@;'; put 'put ''NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1''@;'; put 'put ''N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4''@;'; put 'put ''NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1''@;'; put 'put ''ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEz''@;'; put 'put ''Ylx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTgxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4MV1bb11dPTQ2MzM2K28sZFs0NjMzNitvXT1oWzE4MV1bb10pO2ZvcihoWzE4Ml09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNi''@;'; put 'put ''N1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1''@;'; put 'put ''OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1''@;'; put 'put ''OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVj''@;'; put 'put ''M1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1''@;'; put 'put ''NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0''@;'; put 'put ''Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTgyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4Ml1bb11dPTQ2NTkyK28sZFs0NjU5MitvXT1oWzE4Ml1bb10pO2Zv''@;'; put 'put ''cihoWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjEx''@;'; put 'put ''Zlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1''@;'; put 'put ''NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1Njk5NFx1Njk2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1''@;'; put 'put ''Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5''@;'; put 'put ''ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1''@;'; put 'put ''NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVm''@;'; put 'put ''Zlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTgzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4M11bb11dPTQ2ODQ4K28sZFs0Njg0OCtvXT1o''@;'; put 'put ''WzE4M11bb10pO2ZvcihoWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3''@;'; put 'put ''Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1''@;'; put 'put ''N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcw''@;'; put 'put ''OFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1''@;'; put 'put ''OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRl''@;'; put 'put ''OFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4NF1bb11dPTQ3MTA0K28s''@;'; put 'put ''ZFs0NzEwNCtvXT1oWzE4NF1bb10pO2ZvcihoWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0''@;'; put 'put ''ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1''@;'; put 'put ''OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4''@;'; put 'put ''M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1''@;'; put 'put ''NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4''@;'; put 'put ''NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4NV1b''@;'; put 'put ''b11dPTQ3MzYwK28sZFs0NzM2MCtvXT1oWzE4NV1bb10pO2ZvcihoWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4''@;'; put 'put ''N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1''@;'; put 'put ''NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIz''@;'; put 'put ''ZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1''@;'; put 'put ''NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2Ri''@;'; put 'put ''ZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg2XVtvXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoU1toWzE4Nl1bb11dPTQ3NjE2K28sZFs0NzYxNitvXT1oWzE4Nl1bb10pO2ZvcihoWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4''@;'; put 'put ''MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1''@;'; put 'put ''ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZh''@;'; put 'put ''M1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1''@;'; put 'put ''OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0''@;'; put 'put ''MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTg3XVtvXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoU1toWzE4N11bb11dPTQ3ODcyK28sZFs0Nzg3MitvXT1oWzE4N11bb10pO2ZvcihoWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNi''@;'; put 'put ''Mlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1''@;'; put 'put ''NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1''@;'; put 'put ''NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4''@;'; put 'put ''OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1''@;'; put 'put ''NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3''@;'; put 'put ''YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4OF0ubGVuZ3RoOysrbyk2NTUzMyE9''@;'; put 'put ''PWhbMTg4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4OF1bb11dPTQ4MTI4K28sZFs0ODEyOCtvXT1oWzE4OF1bb10pO2ZvcihoWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYy''@;'; put 'put ''OVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1''@;'; put 'put ''N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2Rm''@;'; put 'put ''OVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUy''@;'; put 'put ''MVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1''@;'; put 'put ''OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNl''@;'; put 'put ''MVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE4OV0ubGVuZ3Ro''@;'; put 'put ''Oysrbyk2NTUzMyE9PWhbMTg5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE4OV1bb11dPTQ4Mzg0K28sZFs0ODM4NCtvXT1oWzE4OV1bb10pO2ZvcihoWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2''@;'; put 'put ''ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1''@;'; put 'put ''OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0''@;'; put 'put ''NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5''@;'; put 'put ''M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1''@;'; put 'put ''NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZj''@;'; put 'put ''NFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1o''@;'; put 'put ''WzE5MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5MF1bb11dPTQ4NjQwK28sZFs0ODY0MCtvXT1oWzE5MF1bb10pO2ZvcihoWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZj''@;'; put 'put ''M1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1''@;'; put 'put ''NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2Jl''@;'; put 'put ''NFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAy''@;'; put 'put ''OFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1''@;'; put 'put ''ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUz''@;'; put 'put ''OVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG89MDtvIT1oWzE5MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5MV1bb11dPTQ4ODk2K28sZFs0ODg5NitvXT1oWzE5MV1bb10pO2ZvcihoWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1''@;'; put 'put ''OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEy''@;'; put 'put ''YVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY4Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRi''@;'; put 'put ''Y1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1''@;'; put 'put ''NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZk''@;'; put 'put ''NVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5Ml1bb11dPTQ5MTUyK28sZFs0OTE1MitvXT1oWzE5Ml1bb10pO2ZvcihoWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1''@;'; put 'put ''N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFj''@;'; put 'put ''M1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4''@;'; put 'put ''YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1''@;'; put 'put ''OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0''@;'; put 'put ''ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1''@;'; put 'put ''OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTkzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5M11bb11dPTQ5NDA4K28sZFs0OTQwOCtvXT1oWzE5M11bb10pO2ZvcihoWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1''@;'; put 'put ''NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZm''@;'; put 'put ''YVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2''@;'; put 'put ''MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1''@;'; put 'put ''ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVj''@;'; put 'put ''MFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1''@;'; put 'put ''OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5NF1bb11dPTQ5NjY0K28sZFs0OTY2NCtvXT1oWzE5NF1bb10pO2ZvcihoWzE5NV09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1''@;'; put 'put ''OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJmNVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFl''@;'; put 'put ''NVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4''@;'; put 'put ''Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1''@;'; put 'put ''ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3''@;'; put 'put ''Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1''@;'; put 'put ''OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5NV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5NV1bb11dPTQ5OTIwK28sZFs0OTkyMCtvXT1oWzE5NV1bb10pO2ZvcihoWzE5Nl09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1''@;'; put 'put ''OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3''@;'; put 'put ''Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFk''@;'; put 'put ''YVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1''@;'; put 'put ''OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZj''@;'; put 'put ''Mlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1''@;'; put 'put ''ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5Nl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5Nl1bb11dPTUwMTc2K28sZFs1MDE3NitvXT1oWzE5Nl1bb10p''@;'; put 'put ''O2ZvcihoWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1''@;'; put 'put ''OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEz''@;'; put 'put ''Y1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2''@;'; put 'put ''MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1''@;'; put 'put ''OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYz''@;'; put 'put ''OFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1''@;'; put 'put ''NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5N11bb11dPTUwNDMyK28sZFs1MDQzMitv''@;'; put 'put ''XT1oWzE5N11bb10pO2ZvcihoWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1''@;'; put 'put ''OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdj''@;'; put 'put ''OVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzE5OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMTk4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzE5OF1bb11dPTUwNjg4''@;'; put 'put ''K28sZFs1MDY4OCtvXT1oWzE5OF1bb10pO2ZvcihoWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1''@;'; put 'put ''NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVl''@;'; put 'put ''OVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1''@;'; put 'put ''NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMy''@;'; put 'put ''NVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1''@;'; put 'put ''NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwMV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjAxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIw''@;'; put 'put ''MV1bb11dPTUxNDU2K28sZFs1MTQ1NitvXT1oWzIwMV1bb10pO2ZvcihoWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1''@;'; put 'put ''ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1''@;'; put 'put ''OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1''@;'; put 'put ''NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYx''@;'; put 'put ''ZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1''@;'; put 'put ''NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwMl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjAyXVtvXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoU1toWzIwMl1bb11dPTUxNzEyK28sZFs1MTcxMitvXT1oWzIwMl1bb10pO2ZvcihoWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1''@;'; put 'put ''NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJj''@;'; put 'put ''M1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1''@;'; put 'put ''NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIz''@;'; put 'put ''Mlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1''@;'; put 'put ''NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3NFx1NTc2Mlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjAzXVtv''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoU1toWzIwM11bb11dPTUxOTY4K28sZFs1MTk2OCtvXT1oWzIwM11bb10pO2ZvcihoWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1''@;'; put 'put ''NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNh''@;'; put 'put ''Y1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1''@;'; put 'put ''NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1''@;'; put 'put ''NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYx''@;'; put 'put ''MVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1''@;'; put 'put ''NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwNF0ubGVuZ3RoOysrbyk2NTUz''@;'; put 'put ''MyE9PWhbMjA0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwNF1bb11dPTUyMjI0K28sZFs1MjIyNCtvXT1oWzIwNF1bb10pO2ZvcihoWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1''@;'; put 'put ''NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJj''@;'; put 'put ''OVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1''@;'; put 'put ''NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1''@;'; put 'put ''ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZj''@;'; put 'put ''Ylx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1''@;'; put 'put ''NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwNV0ubGVu''@;'; put 'put ''Z3RoOysrbyk2NTUzMyE9PWhbMjA1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwNV1bb11dPTUyNDgwK28sZFs1MjQ4MCtvXT1oWzIwNV1bb10pO2ZvcihoWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1''@;'; put 'put ''NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5''@;'; put 'put ''YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1''@;'; put 'put ''NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1''@;'; put 'put ''NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0''@;'; put 'put ''Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1''@;'; put 'put ''NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtv''@;'; put 'put ''IT1oWzIwNl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwNl1bb11dPTUyNzM2K28sZFs1MjczNitvXT1oWzIwNl1bb10pO2ZvcihoWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1Njdh''@;'; put 'put ''ZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1''@;'; put 'put ''NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1''@;'; put 'put ''NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNj''@;'; put 'put ''OFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1''@;'; put 'put ''NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG89MDtvIT1oWzIwN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwN11bb11dPTUyOTkyK28sZFs1Mjk5MitvXT1oWzIwN11bb10pO2ZvcihoWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBk''@;'; put 'put ''MVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1''@;'; put 'put ''ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1''@;'; put 'put ''ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0''@;'; put 'put ''ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1''@;'; put 'put ''NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRm''@;'; put 'put ''MVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwOF1bb11dPTUzMjQ4K28sZFs1MzI0OCtvXT1oWzIwOF1bb10pO2ZvcihoWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdi''@;'; put 'put ''OVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1''@;'; put 'put ''NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1''@;'; put 'put ''NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0''@;'; put 'put ''N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1''@;'; put 'put ''NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4''@;'; put 'put ''OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIwOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjA5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIwOV1bb11dPTUzNTA0K28sZFs1MzUwNCtvXT1oWzIwOV1bb10pO2ZvcihoWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1''@;'; put 'put ''ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1''@;'; put 'put ''NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1''@;'; put 'put ''NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzVi''@;'; put 'put ''MFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1''@;'; put 'put ''NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4''@;'; put 'put ''Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjEwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxMF1bb11dPTUzNzYwK28sZFs1Mzc2MCtvXT1oWzIxMF1bb10pO2ZvcihoWzIxMV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2Qw''@;'; put 'put ''ZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1''@;'; put 'put ''ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1''@;'; put 'put ''ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4''@;'; put 'put ''Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1''@;'; put 'put ''OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBl''@;'; put 'put ''NVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxMV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjExXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxMV1bb11dPTU0MDE2K28sZFs1NDAxNitvXT1oWzIxMV1bb10pO2ZvcihoWzIx''@;'; put 'put ''Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1''@;'; put 'put ''M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1''@;'; put 'put ''NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1''@;'; put 'put ''NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdl''@;'; put 'put ''NVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1''@;'; put 'put ''NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQx''@;'; put 'put ''ZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxMl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjEyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxMl1bb11dPTU0MjcyK28sZFs1NDI3MitvXT1oWzIxMl1b''@;'; put 'put ''b10pO2ZvcihoWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5''@;'; put 'put ''Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1''@;'; put 'put ''NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1''@;'; put 'put ''NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3''@;'; put 'put ''NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1''@;'; put 'put ''NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRk''@;'; put 'put ''Ylx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjEzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxM11bb11dPTU0NTI4K28sZFs1NDUy''@;'; put 'put ''OCtvXT1oWzIxM11bb10pO2ZvcihoWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEw''@;'; put 'put ''Y1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1''@;'; put 'put ''NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1''@;'; put 'put ''MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1''@;'; put 'put ''N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5''@;'; put 'put ''NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxNF1bb11dPTU0''@;'; put 'put ''Nzg0K28sZFs1NDc4NCtvXT1oWzIxNF1bb10pO2ZvcihoWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEy''@;'; put 'put ''Y1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1''@;'; put 'put ''ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhh''@;'; put 'put ''MVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1''@;'; put 'put ''OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBl''@;'; put 'put ''Y1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxNV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1to''@;'; put 'put ''WzIxNV1bb11dPTU1MDQwK28sZFs1NTA0MCtvXT1oWzIxNV1bb10pO2ZvcihoWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2''@;'; put 'put ''Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1''@;'; put 'put ''NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5''@;'; put 'put ''Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1''@;'; put 'put ''NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQz''@;'; put 'put ''Mlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxNl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE2XVtvXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoU1toWzIxNl1bb11dPTU1Mjk2K28sZFs1NTI5NitvXT1oWzIxNl1bb10pO2ZvcihoWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBm''@;'; put 'put ''Y1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1''@;'; put 'put ''NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVk''@;'; put 'put ''Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1Njhl''@;'; put 'put ''Ylx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1''@;'; put 'put ''NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4''@;'; put 'put ''OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE3''@;'; put 'put ''XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxN11bb11dPTU1NTUyK28sZFs1NTU1MitvXT1oWzIxN11bb10pO2ZvcihoWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2''@;'; put 'put ''MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1''@;'; put 'put ''NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQz''@;'; put 'put ''MFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVk''@;'; put 'put ''ZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1''@;'; put 'put ''Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2Nh''@;'; put 'put ''MVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxOF0ubGVuZ3RoOysrbyk2''@;'; put 'put ''NTUzMyE9PWhbMjE4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxOF1bb11dPTU1ODA4K28sZFs1NTgwOCtvXT1oWzIxOF1bb10pO2ZvcihoWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2Zh''@;'; put 'put ''MVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1''@;'; put 'put ''ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNk''@;'; put 'put ''ZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZk''@;'; put 'put ''OFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1''@;'; put 'put ''ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNi''@;'; put 'put ''YVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIxOV0u''@;'; put 'put ''bGVuZ3RoOysrbyk2NTUzMyE9PWhbMjE5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIxOV1bb11dPTU2MDY0K28sZFs1NjA2NCtvXT1oWzIxOV1bb10pO2ZvcihoWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVl''@;'; put 'put ''Nlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1''@;'; put 'put ''OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3''@;'; put 'put ''Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNl''@;'; put 'put ''Nlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1''@;'; put 'put ''NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0''@;'; put 'put ''ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLG89''@;'; put 'put ''MDtvIT1oWzIyMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyMF1bb11dPTU2MzIwK28sZFs1NjMyMCtvXT1oWzIyMF1bb10pO2ZvcihoWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1''@;'; put 'put ''NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIy''@;'; put 'put ''NFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQy''@;'; put 'put ''OFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1''@;'; put 'put ''Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0''@;'; put 'put ''NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG89MDtvIT1oWzIyMV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyMV1bb11dPTU2NTc2K28sZFs1NjU3NitvXT1oWzIyMV1bb10pO2ZvcihoWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1''@;'; put 'put ''NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3''@;'; put 'put ''OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0''@;'; put 'put ''Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1''@;'; put 'put ''NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2''@;'; put 'put ''ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1''@;'; put 'put ''N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyMl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyMl1bb11dPTU2ODMyK28sZFs1NjgzMitvXT1oWzIyMl1bb10pO2ZvcihoWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1''@;'; put 'put ''N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2''@;'; put 'put ''NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRm''@;'; put 'put ''MVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1''@;'; put 'put ''ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2''@;'; put 'put ''ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1''@;'; put 'put ''ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyM10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjIzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyM11bb11dPTU3MDg4K28sZFs1NzA4OCtvXT1oWzIyM11bb10pO2ZvcihoWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1''@;'; put 'put ''OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRl''@;'; put 'put ''N1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTEx''@;'; put 'put ''MVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1''@;'; put 'put ''OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgw''@;'; put 'put ''Zlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1''@;'; put 'put ''NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyNF1bb11dPTU3MzQ0K28sZFs1NzM0NCtvXT1oWzIyNF1bb10pO2ZvcihoWzIyNV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1''@;'; put 'put ''NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFk''@;'; put 'put ''NVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3''@;'; put 'put ''ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1''@;'; put 'put ''NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1''@;'; put 'put ''ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1''@;'; put 'put ''NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyNV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyNV1bb11dPTU3NjAwK28sZFs1NzYwMCtvXT1oWzIyNV1bb10pO2Zvciho''@;'; put 'put ''WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1''@;'; put 'put ''NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVj''@;'; put 'put ''ZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVm''@;'; put 'put ''OVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1''@;'; put 'put ''NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYx''@;'; put 'put ''Nlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1''@;'; put 'put ''NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyNl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyNl1bb11dPTU3ODU2K28sZFs1Nzg1NitvXT1oWzIy''@;'; put 'put ''Nl1bb10pO2ZvcihoWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1''@;'; put 'put ''N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5''@;'; put 'put ''ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAy''@;'; put 'put ''NFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1''@;'; put 'put ''ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2''@;'; put 'put ''Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1''@;'; put 'put ''ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyN11bb11dPTU4MTEyK28sZFs1''@;'; put 'put ''ODExMitvXT1oWzIyN11bb10pO2ZvcihoWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1''@;'; put 'put ''OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEy''@;'; put 'put ''M1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1''@;'; put 'put ''OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTli''@;'; put 'put ''YVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1''@;'; put 'put ''NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIyOF1bb11d''@;'; put 'put ''PTU4MzY4K28sZFs1ODM2OCtvXT1oWzIyOF1bb10pO2ZvcihoWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1''@;'; put 'put ''NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRh''@;'; put 'put ''Mlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1''@;'; put 'put ''NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1Njll''@;'; put 'put ''Y1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1''@;'; put 'put ''NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIyOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjI5XVtvXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''U1toWzIyOV1bb11dPTU4NjI0K28sZFs1ODYyNCtvXT1oWzIyOV1bb10pO2ZvcihoWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1''@;'; put 'put ''NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5''@;'; put 'put ''Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1''@;'; put 'put ''NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2Ez''@;'; put 'put ''OVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1''@;'; put 'put ''N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5Zlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzMF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjMwXVtvXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoU1toWzIzMF1bb11dPTU4ODgwK28sZFs1ODg4MCtvXT1oWzIzMF1bb10pO2ZvcihoWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1''@;'; put 'put ''ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRl''@;'; put 'put ''Ylx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1''@;'; put 'put ''ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1''@;'; put 'put ''ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlh''@;'; put 'put ''M1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1''@;'; put 'put ''OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzMV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhb''@;'; put 'put ''MjMxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzMV1bb11dPTU5MTM2K28sZFs1OTEzNitvXT1oWzIzMV1bb10pO2ZvcihoWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1''@;'; put 'put ''OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4''@;'; put 'put ''NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1''@;'; put 'put ''OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1''@;'; put 'put ''OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlk''@;'; put 'put ''OFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1''@;'; put 'put ''OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzMl0ubGVuZ3RoOysr''@;'; put 'put ''byk2NTUzMyE9PWhbMjMyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzMl1bb11dPTU5MzkyK28sZFs1OTM5MitvXT1oWzIzMl1bb10pO2ZvcihoWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1''@;'; put 'put ''NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRh''@;'; put 'put ''Y1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1''@;'; put 'put ''NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1''@;'; put 'put ''NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEz''@;'; put 'put ''Ylx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1''@;'; put 'put ''NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIz''@;'; put 'put ''M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjMzXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzM11bb11dPTU5NjQ4K28sZFs1OTY0OCtvXT1oWzIzM11bb10pO2ZvcihoWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1''@;'; put 'put ''NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2''@;'; put 'put ''Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1''@;'; put 'put ''NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1''@;'; put 'put ''N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2Nk''@;'; put 'put ''MFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1''@;'; put 'put ''ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG89MDtvIT1oWzIzNF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM0XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzNF1bb11dPTU5OTA0K28sZFs1OTkwNCtvXT1oWzIzNF1bb10pO2ZvcihoWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2''@;'; put 'put ''NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1''@;'; put 'put ''ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1''@;'; put 'put ''OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGVi''@;'; put 'put ''ZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1''@;'; put 'put ''OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzNV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzNV1bb11dPTYwMTYwK28sZFs2MDE2MCtvXT1oWzIzNV1bb10pO2ZvcihoWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdm''@;'; put 'put ''OFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1''@;'; put 'put ''OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1''@;'; put 'put ''OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3''@;'; put 'put ''ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1''@;'; put 'put ''NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5''@;'; put 'put ''M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzNl0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzNl1bb11dPTYwNDE2K28sZFs2MDQxNitvXT1oWzIzNl1bb10pO2ZvcihoWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZl''@;'; put 'put ''Nlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1''@;'; put 'put ''NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1''@;'; put 'put ''NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2Mw''@;'; put 'put ''Mlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1''@;'; put 'put ''N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3''@;'; put 'put ''Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzN10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzN11bb11dPTYwNjcyK28sZFs2MDY3MitvXT1oWzIzN11bb10pO2ZvcihoWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5''@;'; put 'put ''OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1''@;'; put 'put ''ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1''@;'; put 'put ''OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4''@;'; put 'put ''NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1''@;'; put 'put ''OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcx''@;'; put 'put ''OFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzOF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzOF1bb11dPTYwOTI4K28sZFs2MDkyOCtvXT1oWzIzOF1bb10pO2ZvcihoWzIzOV09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTky''@;'; put 'put ''ZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1''@;'; put 'put ''OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1''@;'; put 'put ''OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3''@;'; put 'put ''MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1''@;'; put 'put ''NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZm''@;'; put 'put ''N1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzIzOV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjM5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzIzOV1bb11dPTYxMTg0K28sZFs2MTE4NCtvXT1oWzIzOV1bb10pO2Zv''@;'; put 'put ''cihoWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1''@;'; put 'put ''YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1''@;'; put 'put ''N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1''@;'; put 'put ''ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdk''@;'; put 'put ''Ylx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1''@;'; put 'put ''OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQw''@;'; put 'put ''Mlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0MF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQwXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0MF1bb11dPTYxNDQwK28sZFs2MTQ0MCtvXT1o''@;'; put 'put ''WzI0MF1bb10pO2ZvcihoWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFh''@;'; put 'put ''OFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1''@;'; put 'put ''OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIw''@;'; put 'put ''NFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1''@;'; put 'put ''OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZh''@;'; put 'put ''N1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0MV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQxXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0MV1bb11dPTYxNjk2K28s''@;'; put 'put ''ZFs2MTY5NitvXT1oWzI0MV1bb10pO2ZvcihoWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFl''@;'; put 'put ''N1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1''@;'; put 'put ''NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0''@;'; put 'put ''YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1''@;'; put 'put ''ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1''@;'; put 'put ''OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0Ml0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQyXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0Ml1b''@;'; put 'put ''b11dPTYxOTUyK28sZFs2MTk1MitvXT1oWzI0Ml1bb10pO2ZvcihoWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQw''@;'; put 'put ''OVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1''@;'; put 'put ''OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEy''@;'; put 'put ''NFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1''@;'; put 'put ''OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3''@;'; put 'put ''Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0M10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQzXVtvXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoU1toWzI0M11bb11dPTYyMjA4K28sZFs2MjIwOCtvXT1oWzI0M11bb10pO2ZvcihoWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZj''@;'; put 'put ''MFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1''@;'; put 'put ''NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2''@;'; put 'put ''OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1''@;'; put 'put ''OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNm''@;'; put 'put ''ZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0NF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ0XVtvXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoU1toWzI0NF1bb11dPTYyNDY0K28sZFs2MjQ2NCtvXT1oWzI0NF1bb10pO2ZvcihoWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVl''@;'; put 'put ''MFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1''@;'; put 'put ''OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5''@;'; put 'put ''MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVl''@;'; put 'put ''NVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1''@;'; put 'put ''NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4''@;'; put 'put ''Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1ODYxZVx1ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0NV0ubGVuZ3RoOysrbyk2NTUzMyE9''@;'; put 'put ''PWhbMjQ1XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0NV1bb11dPTYyNzIwK28sZFs2MjcyMCtvXT1oWzI0NV1bb10pO2ZvcihoWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgy''@;'; put 'put ''NFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1''@;'; put 'put ''OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0''@;'; put 'put ''NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRi''@;'; put 'put ''N1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1''@;'; put 'put ''OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1''@;'; put 'put ''Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0Nl0ubGVuZ3Ro''@;'; put 'put ''Oysrbyk2NTUzMyE9PWhbMjQ2XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0Nl1bb11dPTYyOTc2K28sZFs2Mjk3NitvXT1oWzI0Nl1bb10pO2ZvcihoWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5''@;'; put 'put ''MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1''@;'; put 'put ''OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1''@;'; put 'put ''M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0''@;'; put 'put ''MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1''@;'; put 'put ''OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4''@;'; put 'put ''Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1o''@;'; put 'put ''WzI0N10ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ3XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0N11bb11dPTYzMjMyK28sZFs2MzIzMitvXT1oWzI0N11bb10pO2ZvcihoWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4''@;'; put 'put ''Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1''@;'; put 'put ''OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVm''@;'; put 'put ''M1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2''@;'; put 'put ''MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1''@;'; put 'put ''OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRm''@;'; put 'put ''Zlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG89MDtvIT1oWzI0OF0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ4XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0OF1bb11dPTYzNDg4K28sZFs2MzQ4OCtvXT1oWzI0OF1bb10pO2ZvcihoWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1''@;'; put 'put ''OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3''@;'; put 'put ''NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVj''@;'; put 'put ''OVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1''@;'; put 'put ''OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1''@;'; put 'put ''YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG89MDtvIT1oWzI0OV0ubGVuZ3RoOysrbyk2NTUzMyE9PWhbMjQ5XVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzI0OV1bb11dPTYzNzQ0K28sZFs2Mzc0NCtvXT1oWzI0OV1bb10pO3JldHVybntlbmM6UyxkZWM6ZH19KCksalsxMjUwXT1mdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpL''@;'; put 'put ''TE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThc''@;'; put 'put ''dTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4''@;'; put 'put ''YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0''@;'; put 'put ''M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAx''@;'; put 'put ''NDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1vKSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6''@;'; put 'put ''aCxkZWM6U319KCksalsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYn''@;'; put 'put ''KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlc''@;'; put 'put ''dTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAx''@;'; put 'put ''XHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdc''@;'; put 'put ''dTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0''@;'; put 'put ''MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVc''@;'; put 'put ''dTA0NGYiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzEyNTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRc''@;'; put 'put ''eDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJj''@;'; put 'put ''ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1''@;'; put 'put ''MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhi''@;'; put 'put ''YVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUz''@;'; put 'put ''XHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsUz1bXSxoPXt9LG89MDsyNTYhPW87KytvKTY1NTMzIT09ZC5jaGFyQ29kZUF0KG8pJiYo''@;'; put 'put ''aFtkLmNoYXJBdChvKV09byksU1tvXT1kLmNoYXJBdChvKTtyZXR1cm57ZW5jOmgsZGVjOlN9fSgpLGpbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx''@;'; put 'put ''Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUy''@;'; put 'put ''MDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUw''@;'; put 'put ''MzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2Fk''@;'; put 'put ''XHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUw''@;'; put 'put ''M2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1vKSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6aCxkZWM6U319KCksalsxMjU0XT1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFC''@;'; put 'put ''Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFc''@;'; put 'put ''eGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRh''@;'; put 'put ''XHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLFM9W10s''@;'; put 'put ''aD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzEyNTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdc''@;'; put 'put ''Ylx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5v''@;'; put 'put ''cHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1''@;'; put 'put ''MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNc''@;'; put 'put ''eGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRc''@;'; put 'put ''dTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpo''@;'; put 'put ''LGRlYzpTfX0oKSxqWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJico''@;'; put 'put ''KSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1''@;'; put 'put ''MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZi''@;'; put 'put ''ZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2''@;'; put 'put ''MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlc''@;'; put 'put ''eGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYm''@;'; put 'put ''KGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4''@;'; put 'put ''MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1''@;'; put 'put ''MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBc''@;'; put 'put ''dWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1''@;'; put 'put ''MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdc''@;'; put 'put ''eGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsUz1bXSxoPXt9LG89''@;'; put 'put ''MDsyNTYhPW87KytvKTY1NTMzIT09ZC5jaGFyQ29kZUF0KG8pJiYoaFtkLmNoYXJBdChvKV09byksU1tvXT1kLmNoYXJBdChvKTtyZXR1cm57ZW5jOmgsZGVjOlN9fSgpLGpbMTI1OF09ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2''@;'; put 'put ''XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2''@;'; put 'put ''d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUy''@;'; put 'put ''MTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4''@;'; put 'put ''YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhl''@;'; put 'put ''NFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiIsUz1bXSxoPXt9LG89MDsyNTYhPW87KytvKTY1NTMzIT09ZC5jaGFyQ29k''@;'; put 'put ''ZUF0KG8pJiYoaFtkLmNoYXJBdChvKV09byksU1tvXT1kLmNoYXJBdChvKTtyZXR1cm57ZW5jOmgsZGVjOlN9fSgpLGpbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx''@;'; put 'put ''NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhk''@;'; put 'put ''MVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4''@;'; put 'put ''YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVc''@;'; put 'put ''dTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNj''@;'; put 'put ''XHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNb''@;'; put 'put ''b109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4''@;'; put 'put ''MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0''@;'; put 'put ''XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUy''@;'; put 'put ''MjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1''@;'; put 'put ''MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZc''@;'; put 'put ''dTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLFM9W10saD17fSxvPTA7''@;'; put 'put ''MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzEwMDA3XT1mdW5jdGlvbigpe2Zvcih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZc''@;'; put 'put ''ZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3''@;'; put 'put ''eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0''@;'; put 'put ''MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhc''@;'; put 'put ''dTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4''@;'; put 'put ''XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0''@;'; put 'put ''MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109''@;'; put 'put ''ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBvLGQ9W10sUz17fSxoPVtdO2ZvcihoWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZc''@;'; put 'put ''eDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJc''@;'; put 'put ''dWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4''@;'; put 'put ''ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxvPTA7byE9aFswXS5sZW5ndGg7KytvKTY1NTMzIT09aFswXVtvXS5jaGFyQ29kZUF0KDApJiYoU1toWzBdW29dXT0wK28sZFswK29d''@;'; put 'put ''PWhbMF1bb10pO2ZvcihoWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZc''@;'; put 'put ''dTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIy''@;'; put 'put ''NjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFc''@;'; put 'put ''dTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2MV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjFdW29dXT00MTIxNitvLGRbNDEyMTYrb109aFsx''@;'; put 'put ''NjFdW29dKTtmb3IoaFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNc''@;'; put 'put ''dTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0''@;'; put 'put ''ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJc''@;'; put 'put ''dTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjJdW29dXT00MTQ3MitvLGRb''@;'; put 'put ''NDE0NzIrb109aFsxNjJdW29dKTtmb3IoaFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFc''@;'; put 'put ''dWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZm''@;'; put 'put ''MzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFc''@;'; put 'put ''dWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjNdW29d''@;'; put 'put ''XT00MTcyOCtvLGRbNDE3Mjgrb109aFsxNjNdW29dKTtmb3IoaFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThc''@;'; put 'put ''dTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMw''@;'; put 'put ''NzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZc''@;'; put 'put ''dTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2NF1bb10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KFNbaFsxNjRdW29dXT00MTk4NCtvLGRbNDE5ODQrb109aFsxNjRdW29dKTtmb3IoaFsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZc''@;'; put 'put ''dTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMw''@;'; put 'put ''ZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRc''@;'; put 'put ''dTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE2NV1bb10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKFNbaFsxNjVdW29dXT00MjI0MCtvLGRbNDIyNDArb109aFsxNjVdW29dKTtmb3IoaFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVc''@;'; put 'put ''dTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAz''@;'; put 'put ''YzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjZdLmxlbmd0aDsrK28pNjU1MzMhPT1o''@;'; put 'put ''WzE2Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjZdW29dXT00MjQ5NitvLGRbNDI0OTYrb109aFsxNjZdW29dKTtmb3IoaFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBc''@;'; put 'put ''dTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdc''@;'; put 'put ''dTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjddLmxlbmd0aDsr''@;'; put 'put ''K28pNjU1MzMhPT1oWzE2N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjddW29dXT00Mjc1MitvLGRbNDI3NTIrb109aFsxNjddW29dKTtmb3IoaFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRc''@;'; put 'put ''eGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMx''@;'; put 'put ''MTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjhdLmxlbmd0aDsrK28pNjU1MzMhPT1o''@;'; put 'put ''WzE2OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjhdW29dXT00MzAwOCtvLGRbNDMwMDgrb109aFsxNjhdW29dKTtmb3IoaFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVc''@;'; put 'put ''dTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1''@;'; put 'put ''MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVc''@;'; put 'put ''dTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNjldLmxlbmd0aDsr''@;'; put 'put ''K28pNjU1MzMhPT1oWzE2OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNjldW29dXT00MzI2NCtvLGRbNDMyNjQrb109aFsxNjldW29dKTtmb3IoaFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRc''@;'; put 'put ''dTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1''@;'; put 'put ''YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVc''@;'; put 'put ''dTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsx''@;'; put 'put ''NzZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE3Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNzZdW29dXT00NTA1NitvLGRbNDUwNTYrb109aFsxNzZdW29dKTtmb3IoaFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFc''@;'; put 'put ''dTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdi''@;'; put 'put ''MTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVc''@;'; put 'put ''dThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxvPTA7byE9aFsxNzddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE3N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNzddW29dXT00NTMxMitvLGRbNDUzMTIrb109aFsxNzddW29dKTtmb3IoaFsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJc''@;'; put 'put ''dTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThl''@;'; put 'put ''MjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJc''@;'; put 'put ''dThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNzhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE3OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNzhdW29dXT00NTU2OCtvLGRbNDU1Njgrb109aFsxNzhdW29dKTtmb3IoaFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFc''@;'; put 'put ''dTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5''@;'; put 'put ''ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVc''@;'; put 'put ''dTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2''@;'; put 'put ''NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxNzldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE3OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxNzldW29dXT00NTgyNCtvLGRbNDU4MjQrb109aFsxNzldW29dKTtmb3IoaFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRc''@;'; put 'put ''dTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgz''@;'; put 'put ''MjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNc''@;'; put 'put ''dTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThk''@;'; put 'put ''MzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODBdW29dXT00NjA4MCtvLGRbNDYwODArb109aFsxODBdW29dKTtmb3IoaFsxODFdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhc''@;'; put 'put ''dTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVm''@;'; put 'put ''YjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJc''@;'; put 'put ''dTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcy''@;'; put 'put ''MzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4MV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODFdW29dXT00NjMzNitvLGRbNDYzMzYrb109aFsxODFdW29dKTtmb3IoaFsxODJdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlc''@;'; put 'put ''dTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcy''@;'; put 'put ''ZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRc''@;'; put 'put ''dTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYw''@;'; put 'put ''NjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODJdW29dXT00NjU5MitvLGRbNDY1OTIrb109aFsxODJdW29dKTtm''@;'; put 'put ''b3IoaFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFc''@;'; put 'put ''dTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgw''@;'; put 'put ''YWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFc''@;'; put 'put ''dTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTVi''@;'; put 'put ''NzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODNdW29dXT00Njg0OCtvLGRbNDY4NDgrb109''@;'; put 'put ''aFsxODNdW29dKTtmb3IoaFsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThi''@;'; put 'put ''YTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhc''@;'; put 'put ''dTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2''@;'; put 'put ''MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4NF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODRdW29dXT00NzEwNCtv''@;'; put 'put ''LGRbNDcxMDQrb109aFsxODRdW29dKTtmb3IoaFsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThk''@;'; put 'put ''MmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBc''@;'; put 'put ''dTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3''@;'; put 'put ''ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODVd''@;'; put 'put ''W29dXT00NzM2MCtvLGRbNDczNjArb109aFsxODVdW29dKTtmb3IoaFsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcx''@;'; put 'put ''MGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNc''@;'; put 'put ''dTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTcz''@;'; put 'put ''MzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4Nl1bb10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKFNbaFsxODZdW29dXT00NzYxNitvLGRbNDc2MTYrb109aFsxODZdW29dKTtmb3IoaFsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZi''@;'; put 'put ''MjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVc''@;'; put 'put ''dTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThj''@;'; put 'put ''NDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE4N11bb10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKFNbaFsxODddW29dXT00Nzg3MitvLGRbNDc4NzIrb109aFsxODddW29dKTtmb3IoaFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUz''@;'; put 'put ''NzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3Yjdc''@;'; put 'put ''dTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgz''@;'; put 'put ''MjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODhdLmxlbmd0aDsrK28pNjU1MzMh''@;'; put 'put ''PT1oWzE4OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODhdW29dXT00ODEyOCtvLGRbNDgxMjgrb109aFsxODhdW29dKTtmb3IoaFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThi''@;'; put 'put ''YjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVc''@;'; put 'put ''dThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRl''@;'; put 'put ''Y2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxODldLmxlbmd0''@;'; put 'put ''aDsrK28pNjU1MzMhPT1oWzE4OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxODldW29dXT00ODM4NCtvLGRbNDgzODQrb109aFsxODldW29dKTtmb3IoaFsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2''@;'; put 'put ''NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVc''@;'; put 'put ''dTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUy''@;'; put 'put ''NjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9''@;'; put 'put ''aFsxOTBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTBdW29dXT00ODY0MCtvLGRbNDg2NDArb109aFsxOTBdW29dKTtmb3IoaFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYx''@;'; put 'put ''NjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZc''@;'; put 'put ''dTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3''@;'; put 'put ''YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxvPTA7byE9aFsxOTFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5MV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTFdW29dXT00ODg5NitvLGRbNDg4OTYrb109aFsxOTFdW29dKTtmb3IoaFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3''@;'; put 'put ''ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNc''@;'; put 'put ''dTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5''@;'; put 'put ''NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOTJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5Ml1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTJdW29dXT00OTE1MitvLGRbNDkxNTIrb109aFsxOTJdW29dKTtmb3IoaFsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgw''@;'; put 'put ''NTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFc''@;'; put 'put ''dTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTcz''@;'; put 'put ''YjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlc''@;'; put 'put ''dTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOTNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTNdW29dXT00OTQwOCtvLGRbNDk0MDgrb109aFsxOTNdW29dKTtmb3IoaFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdi''@;'; put 'put ''ZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVc''@;'; put 'put ''dTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkw''@;'; put 'put ''M2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFc''@;'; put 'put ''dTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOTRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5NF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTRdW29dXT00OTY2NCtvLGRbNDk2NjQrb109aFsxOTRdW29dKTtmb3IoaFsxOTVdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVm''@;'; put 'put ''ZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2Mjdc''@;'; put 'put ''dTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVl''@;'; put 'put ''NDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZc''@;'; put 'put ''dTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOTVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTVdW29dXT00OTkyMCtvLGRbNDk5MjArb109aFsxOTVdW29dKTtmb3IoaFsxOTZd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgx''@;'; put 'put ''OWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVc''@;'; put 'put ''dTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVh''@;'; put 'put ''ZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVc''@;'; put 'put ''dTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOTZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTZdW29dXT01MDE3NitvLGRbNTAxNzYrb109aFsxOTZdW29d''@;'; put 'put ''KTtmb3IoaFsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZj''@;'; put 'put ''ZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRc''@;'; put 'put ''dTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUy''@;'; put 'put ''MjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZc''@;'; put 'put ''dTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOTddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOTddW29dXT01MDQzMitvLGRbNTA0MzIr''@;'; put 'put ''b109aFsxOTddW29dKTtmb3IoaFsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlc''@;'; put 'put ''dTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThj''@;'; put 'put ''MzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVc''@;'; put 'put ''dTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOThdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5OF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsxOThdW29dXT01MDY4''@;'; put 'put ''OCtvLGRbNTA2ODgrb109aFsxOThdW29dKTtmb3IoaFsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFc''@;'; put 'put ''dTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0''@;'; put 'put ''YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThc''@;'; put 'put ''dTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsxOTldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzE5OV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsx''@;'; put 'put ''OTldW29dXT01MDk0NCtvLGRbNTA5NDQrb109aFsxOTldW29dKTtmb3IoaFsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVc''@;'; put 'put ''dTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYy''@;'; put 'put ''NTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVc''@;'; put 'put ''dTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwMF1bb10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKFNbaFsyMDBdW29dXT01MTIwMCtvLGRbNTEyMDArb109aFsyMDBdW29dKTtmb3IoaFsyMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJc''@;'; put 'put ''dTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4''@;'; put 'put ''ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhc''@;'; put 'put ''dThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwMV1b''@;'; put 'put ''b10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDFdW29dXT01MTQ1NitvLGRbNTE0NTYrb109aFsyMDFdW29dKTtmb3IoaFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZc''@;'; put 'put ''dTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZj''@;'; put 'put ''MGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVc''@;'; put 'put ''dTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDJdLmxlbmd0aDsrK28pNjU1''@;'; put 'put ''MzMhPT1oWzIwMl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDJdW29dXT01MTcxMitvLGRbNTE3MTIrb109aFsyMDJdW29dKTtmb3IoaFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVc''@;'; put 'put ''dTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkw''@;'; put 'put ''MDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNc''@;'; put 'put ''dTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDNdLmxl''@;'; put 'put ''bmd0aDsrK28pNjU1MzMhPT1oWzIwM11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDNdW29dXT01MTk2OCtvLGRbNTE5Njgrb109aFsyMDNdW29dKTtmb3IoaFsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFc''@;'; put 'put ''dThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThk''@;'; put 'put ''OWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZc''@;'; put 'put ''dTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7''@;'; put 'put ''byE9aFsyMDRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwNF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDRdW29dXT01MjIyNCtvLGRbNTIyMjQrb109aFsyMDRdW29dKTtmb3IoaFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNc''@;'; put 'put ''dTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3''@;'; put 'put ''MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZc''@;'; put 'put ''dTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxvPTA7byE9aFsyMDVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwNV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDVdW29dXT01MjQ4MCtvLGRbNTI0ODArb109aFsyMDVdW29dKTtmb3IoaFsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRc''@;'; put 'put ''dTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0''@;'; put 'put ''M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRc''@;'; put 'put ''dTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcy''@;'; put 'put ''N2FcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwNl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDZdW29dXT01MjczNitvLGRbNTI3MzYrb109aFsyMDZdW29dKTtmb3IoaFsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZc''@;'; put 'put ''dTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0''@;'; put 'put ''MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2Zjhc''@;'; put 'put ''dTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTVi''@;'; put 'put ''YjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwN11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDddW29dXT01Mjk5MitvLGRbNTI5OTIrb109aFsyMDddW29dKTtmb3IoaFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhc''@;'; put 'put ''dTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVm''@;'; put 'put ''ZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVc''@;'; put 'put ''dTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1''@;'; put 'put ''YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwOF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDhdW29dXT01MzI0OCtvLGRbNTMyNDgrb109aFsyMDhdW29dKTtmb3IoaFsyMDldPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRc''@;'; put 'put ''dTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2''@;'; put 'put ''OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRc''@;'; put 'put ''dTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUx''@;'; put 'put ''N2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMDldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIwOV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMDldW29dXT01MzUwNCtvLGRbNTM1MDQrb109aFsyMDldW29dKTtmb3IoaFsy''@;'; put 'put ''MTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVc''@;'; put 'put ''dTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0''@;'; put 'put ''ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZc''@;'; put 'put ''dTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5''@;'; put 'put ''ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxMF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMTBdW29dXT01Mzc2MCtvLGRbNTM3NjArb109aFsyMTBd''@;'; put 'put ''W29dKTtmb3IoaFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBc''@;'; put 'put ''dTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0''@;'; put 'put ''OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJc''@;'; put 'put ''dTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkw''@;'; put 'put ''YzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxMV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMTFdW29dXT01NDAxNitvLGRbNTQw''@;'; put 'put ''MTYrb109aFsyMTFdW29dKTtmb3IoaFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2''@;'; put 'put ''ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2Vc''@;'; put 'put ''dTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUy''@;'; put 'put ''MTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxMl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMTJdW29dXT01''@;'; put 'put ''NDI3MitvLGRbNTQyNzIrb109aFsyMTJdW29dKTtmb3IoaFsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVj''@;'; put 'put ''NTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVc''@;'; put 'put ''dTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3''@;'; put 'put ''MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxM11bb10uY2hhckNvZGVBdCgwKSYmKFNb''@;'; put 'put ''aFsyMTNdW29dXT01NDUyOCtvLGRbNTQ1Mjgrb109aFsyMTNdW29dKTtmb3IoaFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3''@;'; put 'put ''NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBc''@;'; put 'put ''dTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThi''@;'; put 'put ''ZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxNF1bb10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKFNbaFsyMTRdW29dXT01NDc4NCtvLGRbNTQ3ODQrb109aFsyMTRdW29dKTtmb3IoaFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5''@;'; put 'put ''MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRc''@;'; put 'put ''dTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2''@;'; put 'put ''MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIx''@;'; put 'put ''NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMTVdW29dXT01NTA0MCtvLGRbNTUwNDArb109aFsyMTVdW29dKTtmb3IoaFsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcy''@;'; put 'put ''M2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFc''@;'; put 'put ''dTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRl''@;'; put 'put ''YzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTZdLmxlbmd0aDsrK28p''@;'; put 'put ''NjU1MzMhPT1oWzIxNl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMTZdW29dXT01NTI5NitvLGRbNTUyOTYrb109aFsyMTZdW29dKTtmb3IoaFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRm''@;'; put 'put ''ZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNc''@;'; put 'put ''dTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUy''@;'; put 'put ''ZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMTdd''@;'; put 'put ''Lmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxN11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMTddW29dXT01NTU1MitvLGRbNTU1NTIrb109aFsyMTddW29dKTtmb3IoaFsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThi''@;'; put 'put ''Y2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFc''@;'; put 'put ''dThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2''@;'; put 'put ''MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxv''@;'; put 'put ''PTA7byE9aFsyMThdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxOF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMThdW29dXT01NTgwOCtvLGRbNTU4MDgrb109aFsyMThdW29dKTtmb3IoaFsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkw''@;'; put 'put ''ZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRc''@;'; put 'put ''dTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3''@;'; put 'put ''ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxvPTA7byE9aFsyMTldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIxOV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMTldW29dXT01NjA2NCtvLGRbNTYwNjQrb109aFsyMTldW29dKTtmb3IoaFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4''@;'; put 'put ''NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdc''@;'; put 'put ''dTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgz''@;'; put 'put ''MDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZc''@;'; put 'put ''dTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyMF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjBdW29dXT01NjMyMCtvLGRbNTYzMjArb109aFsyMjBdW29dKTtmb3IoaFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgz''@;'; put 'put ''NzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRc''@;'; put 'put ''dTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0''@;'; put 'put ''M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBc''@;'; put 'put ''dTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyMV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjFdW29dXT01NjU3NitvLGRbNTY1NzYrb109aFsyMjFdW29dKTtmb3IoaFsyMjJdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1''@;'; put 'put ''NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2Nc''@;'; put 'put ''dTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYz''@;'; put 'put ''ZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZc''@;'; put 'put ''dTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyMl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjJdW29dXT01NjgzMitvLGRbNTY4MzIrb109aFsyMjJdW29dKTtmb3IoaFsyMjNdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0''@;'; put 'put ''YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNc''@;'; put 'put ''dTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0''@;'; put 'put ''ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVc''@;'; put 'put ''dTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyM11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjNdW29dXT01NzA4OCtvLGRbNTcwODgrb109aFsyMjNdW29dKTtmb3Io''@;'; put 'put ''aFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1''@;'; put 'put ''NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFc''@;'; put 'put ''dTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2''@;'; put 'put ''MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFc''@;'; put 'put ''dTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyNF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjRdW29dXT01NzM0NCtvLGRbNTczNDQrb109aFsy''@;'; put 'put ''MjRdW29dKTtmb3IoaFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVl''@;'; put 'put ''MzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJc''@;'; put 'put ''dTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVk''@;'; put 'put ''OWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2Rc''@;'; put 'put ''dTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyNV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjVdW29dXT01NzYwMCtvLGRb''@;'; put 'put ''NTc2MDArb109aFsyMjVdW29dKTtmb3IoaFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJc''@;'; put 'put ''dTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVl''@;'; put 'put ''YjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZc''@;'; put 'put ''dTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyNl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjZdW29d''@;'; put 'put ''XT01Nzg1NitvLGRbNTc4NTYrb109aFsyMjZdW29dKTtmb3IoaFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBc''@;'; put 'put ''dTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2''@;'; put 'put ''MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRc''@;'; put 'put ''dTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyN11bb10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KFNbaFsyMjddW29dXT01ODExMitvLGRbNTgxMTIrb109aFsyMjddW29dKTtmb3IoaFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBc''@;'; put 'put ''dTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZl''@;'; put 'put ''NWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRc''@;'; put 'put ''dTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIyOF1bb10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKFNbaFsyMjhdW29dXT01ODM2OCtvLGRbNTgzNjgrb109aFsyMjhdW29dKTtmb3IoaFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVc''@;'; put 'put ''dTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkw''@;'; put 'put ''MGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJc''@;'; put 'put ''dTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMjldLmxlbmd0aDsrK28pNjU1MzMhPT1o''@;'; put 'put ''WzIyOV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMjldW29dXT01ODYyNCtvLGRbNTg2MjQrb109aFsyMjldW29dKTtmb3IoaFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNc''@;'; put 'put ''dTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVh''@;'; put 'put ''ZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhc''@;'; put 'put ''dTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzBdLmxlbmd0aDsr''@;'; put 'put ''K28pNjU1MzMhPT1oWzIzMF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzBdW29dXT01ODg4MCtvLGRbNTg4ODArb109aFsyMzBdW29dKTtmb3IoaFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThc''@;'; put 'put ''dTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdm''@;'; put 'put ''MjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFc''@;'; put 'put ''dTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsy''@;'; put 'put ''MzFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzMV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzFdW29dXT01OTEzNitvLGRbNTkxMzYrb109aFsyMzFdW29dKTtmb3IoaFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFc''@;'; put 'put ''dTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3''@;'; put 'put ''OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJc''@;'; put 'put ''dTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxvPTA7byE9aFsyMzJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzMl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzJdW29dXT01OTM5MitvLGRbNTkzOTIrb109aFsyMzJdW29dKTtmb3IoaFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRc''@;'; put 'put ''dTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5''@;'; put 'put ''ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJc''@;'; put 'put ''dTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzNdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzM11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzNdW29dXT01OTY0OCtvLGRbNTk2NDgrb109aFsyMzNdW29dKTtmb3IoaFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZc''@;'; put 'put ''dTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2''@;'; put 'put ''MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZc''@;'; put 'put ''dThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYz''@;'; put 'put ''MzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzRdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzNF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzRdW29dXT01OTkwNCtvLGRbNTk5MDQrb109aFsyMzRdW29dKTtmb3IoaFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlc''@;'; put 'put ''dTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgw''@;'; put 'put ''YmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJc''@;'; put 'put ''dThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgx''@;'; put 'put ''Y2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzNV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzVdW29dXT02MDE2MCtvLGRbNjAxNjArb109aFsyMzVdW29dKTtmb3IoaFsyMzZdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNc''@;'; put 'put ''dTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcw''@;'; put 'put ''YmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdc''@;'; put 'put ''dTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5''@;'; put 'put ''OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzNl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzZdW29dXT02MDQxNitvLGRbNjA0MTYrb109aFsyMzZdW29dKTtmb3IoaFsyMzddPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdc''@;'; put 'put ''dTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4''@;'; put 'put ''MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4Yjlc''@;'; put 'put ''dTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3''@;'; put 'put ''MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzN11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzddW29dXT02MDY3MitvLGRbNjA2NzIrb109aFsyMzddW29dKTtm''@;'; put 'put ''b3IoaFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVc''@;'; put 'put ''dTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdm''@;'; put 'put ''NzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZc''@;'; put 'put ''dTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0''@;'; put 'put ''ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzhdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzOF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzhdW29dXT02MDkyOCtvLGRbNjA5Mjgrb109''@;'; put 'put ''aFsyMzhdW29dKTtmb3IoaFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1''@;'; put 'put ''MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJc''@;'; put 'put ''dTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3''@;'; put 'put ''ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyMzldLmxlbmd0aDsrK28pNjU1MzMhPT1oWzIzOV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyMzldW29dXT02MTE4NCtv''@;'; put 'put ''LGRbNjExODQrb109aFsyMzldW29dKTtmb3IoaFsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTll''@;'; put 'put ''MzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJc''@;'; put 'put ''dTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2''@;'; put 'put ''MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNDBdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI0MF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNDBd''@;'; put 'put ''W29dXT02MTQ0MCtvLGRbNjE0NDArb109aFsyNDBdW29dKTtmb3IoaFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdh''@;'; put 'put ''ODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNc''@;'; put 'put ''dTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgw''@;'; put 'put ''MjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNDFdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI0MV1bb10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKFNbaFsyNDFdW29dXT02MTY5NitvLGRbNjE2OTYrb109aFsyNDFdW29dKTtmb3IoaFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2''@;'; put 'put ''YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNc''@;'; put 'put ''dTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3''@;'; put 'put ''N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNDJdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI0Ml1bb10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKFNbaFsyNDJdW29dXT02MTk1MitvLGRbNjE5NTIrb109aFsyNDJdW29dKTtmb3IoaFsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3''@;'; put 'put ''ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlc''@;'; put 'put ''dTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdi''@;'; put 'put ''ODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNDNdLmxlbmd0aDsrK28pNjU1MzMh''@;'; put 'put ''PT1oWzI0M11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNDNdW29dXT02MjIwOCtvLGRbNjIyMDgrb109aFsyNDNdW29dKTtmb3IoaFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgy''@;'; put 'put ''MjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlc''@;'; put 'put ''dTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdj''@;'; put 'put ''ZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNDRdLmxlbmd0''@;'; put 'put ''aDsrK28pNjU1MzMhPT1oWzI0NF1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNDRdW29dXT02MjQ2NCtvLGRbNjI0NjQrb109aFsyNDRdW29dKTtmb3IoaFsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkx''@;'; put 'put ''YTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJc''@;'; put 'put ''dThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThl''@;'; put 'put ''NTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9''@;'; put 'put ''aFsyNDVdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI0NV1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNDVdW29dXT02MjcyMCtvLGRbNjI3MjArb109aFsyNDVdW29dKTtmb3IoaFsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3''@;'; put 'put ''MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2Vc''@;'; put 'put ''dTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTlj''@;'; put 'put ''YTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxvPTA7byE9aFsyNDZdLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI0Nl1bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNDZdW29dXT02Mjk3NitvLGRbNjI5NzYrb109aFsyNDZdW29dKTtmb3IoaFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTlj''@;'; put 'put ''ZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFc''@;'; put 'put ''dTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdl''@;'; put 'put ''M2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxvPTA7byE9aFsyNDddLmxlbmd0aDsrK28pNjU1MzMhPT1oWzI0N11bb10uY2hhckNvZGVBdCgwKSYmKFNbaFsyNDddW29dXT02MzIzMitvLGRbNjMyMzIrb109aFsyNDddW29dKTtyZXR1cm57ZW5jOlMsZGVjOmR9fSgpLGpbMTAwMjldPWZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBkPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJ''@;'; put 'put ''SktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUw''@;'; put 'put ''MTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAx''@;'; put 'put ''MmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAx''@;'; put 'put ''NFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4''@;'; put 'put ''ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3IixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1v''@;'; put 'put ''KSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6aCxkZWM6U319KCksalsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4''@;'; put 'put ''MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4''@;'; put 'put ''ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhi''@;'; put 'put ''MVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1''@;'; put 'put ''MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEz''@;'; put 'put ''MVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixTPVtdLGg9e30sbz0wOzI1NiE9bzsrK28pNjU1MzMhPT1kLmNoYXJDb2RlQXQobykmJihoW2QuY2hhckF0KG8pXT1vKSxTW29dPWQuY2hhckF0KG8pO3JldHVybntlbmM6aCxkZWM6U319''@;'; put 'put ''KCksalsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIGQ9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4v''@;'; put 'put ''MDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNc''@;'; put 'put ''eGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIy''@;'; put 'put ''MGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZc''@;'; put 'put ''dTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1''@;'; put 'put ''MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLFM9W10saD17fSxvPTA7MjU2IT1vOysrbyk2NTUzMyE9PWQuY2hhckNvZGVBdChvKSYmKGhbZC5jaGFyQXQobyldPW8pLFNbb109ZC5jaGFyQXQobyk7cmV0dXJue2VuYzpoLGRlYzpTfX0oKSxqWzI4NTkxXT1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgZD0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI''@;'; put 'put ''SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4''@;'; put 'put ''OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhj''@;'; put 'put ''M1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVj''@;'; put 'put ''XHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsUz1bXSxoPXt9LG89MDsyNTYhPW87KytvKTY1NTMzIT09ZC5jaGFyQ29kZUF0KG8pJiYoaFtkLmNoYXJBdChvKV09byksU1tvXT1kLmNoYXJBdChvKTty''@;'; put 'put ''ZXR1cm57ZW5jOmgsZGVjOlN9fSgpLHRlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKHRlLmV4cG9ydHM9aiksZnVuY3Rpb24oZCxTKXsidXNlIHN0cmljdCI7aWYodHlwZW9mIGo+InUiKXt2YXIgaD1qO3RlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQ''@;'; put 'put ''T1JUX0NPREVQQUdFPiJ1Ij90ZS5leHBvcnRzPVMoaCk6ZC5jcHRhYmxlPVMoaCl9ZWxzZSBqPVMoail9KHRoaXMsZnVuY3Rpb24oZCl7InVzZSBzdHJpY3QiO3ZhciBTPXsxMjAwOiJ1dGYxNmxlIiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYzMmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6''@;'; put 'put ''InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSxoPVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRdLG89WzkzMiw5MzYsOTQ5LDk1MF0sST1bNjUwMDFdLGY9e30sVD17fSxBPXt9LE09e30sTz1mdW5jdGlvbihMKXtyZXR1''@;'; put 'put ''cm4gU3RyaW5nLmZyb21DaGFyQ29kZShMKX0sRD1mdW5jdGlvbihMKXtyZXR1cm4gTC5jaGFyQ29kZUF0KDApfSxFPXR5cGVvZiBCdWZmZXI8InUiLEI9ZnVuY3Rpb24oKXt9O2lmKEUpe3ZhciBGPSFCdWZmZXIuZnJvbTtpZighRil0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRj''@;'; put 'put ''aHtGPSEwfUI9Rj9mdW5jdGlvbihrLEwpe3JldHVybiBMP25ldyBCdWZmZXIoayxMKTpuZXcgQnVmZmVyKGspfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgQnVmZmVyKGspfSk7''@;'; put 'put ''dmFyIE49MTAyNCxIPUJ1ZmZlci5hbGxvY1Vuc2FmZShOKSxaPWZ1bmN0aW9uKEwpe3ZhciB5PWZ1bmN0aW9uKEwpe2Zvcih2YXIgeT1CdWZmZXIuYWxsb2NVbnNhZmUoNjU1MzYpLGw9MDtsPDY1NTM2OysrbCl5W2xdPTA7Zm9yKHZhciBiPU9iamVjdC5rZXlzKEwpLHE9Yi5sZW5ndGgsRz0w''@;'; put 'put ''LFE9YltHXTtHPHE7KytHKShRPWJbR10pJiYoeVtRLmNoYXJDb2RlQXQoMCldPUxbUV0pO3JldHVybiB5fShkW0xdLmVuYyk7cmV0dXJuIGZ1bmN0aW9uKGIscSl7dmFyIFEsRz1iLmxlbmd0aCxwZT0wLFBlPTAsWmU9MCxxZT0wO2lmKCJzdHJpbmciPT10eXBlb2YgYilmb3IoUT1CdWZmZXIu''@;'; put 'put ''YWxsb2NVbnNhZmUoRykscGU9MDtwZTxHOysrcGUpUVtwZV09eVtiLmNoYXJDb2RlQXQocGUpXTtlbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihiKSl7Zm9yKFE9QnVmZmVyLmFsbG9jVW5zYWZlKDIqRyksUGU9MCxwZT0wO3BlPEc7KytwZSkoWmU9YltwZV0pPDEyOD9RW1BlKytdPXlbWmVdOlpl''@;'; put 'put ''PDIyND8oUVtQZSsrXT15WygoMzEmWmUpPDw2KSsoNjMmYltwZSsxXSldLCsrcGUpOlplPDI0MD8oUVtQZSsrXT15WygoMTUmWmUpPDwxMikrKCg2MyZiW3BlKzFdKTw8NikrKDYzJmJbcGUrMl0pXSxwZSs9Mik6KHFlPSgoNyZaZSk8PDE4KSsoKDYzJmJbcGUrMV0pPDwxMikrKCg2MyZiW3Bl''@;'; put 'put ''KzJdKTw8NikrKDYzJmJbcGUrM10pLHBlKz0zLHFlPDY1NTM2P1FbUGUrK109eVtxZV06KFFbUGUrK109eVs1NTI5NisoKHFlLT02NTUzNik+PjEwJjEwMjMpXSxRW1BlKytdPXlbNTYzMjArKDEwMjMmcWUpXSkpO1E9US5zbGljZSgwLFBlKX1lbHNlIGZvcihRPUJ1ZmZlci5hbGxvY1Vuc2Fm''@;'; put 'put ''ZShHKSxwZT0wO3BlPEc7KytwZSlRW3BlXT15W2JbcGVdLmNoYXJDb2RlQXQoMCldO3JldHVybiBxJiYiYnVmIiE9PXE/ImFyciIhPT1xP1EudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoUSk6UX19LFU9ZnVuY3Rpb24oTCl7dmFyIHk9ZFtMXS5kZWMsbD1CdWZmZXIuYWxsb2NV''@;'; put 'put ''bnNhZmUoMTMxMDcyKSxiPTAscT0iIjtmb3IoYj0wO2I8eS5sZW5ndGg7KytiKWlmKHE9eVtiXSl7dmFyIEc9cS5jaGFyQ29kZUF0KDApO2xbMipiXT0yNTUmRyxsWzIqYisxXT1HPj44fXJldHVybiBmdW5jdGlvbihwZSl7dmFyIFBlPXBlLmxlbmd0aCxaZT0wLHFlPTA7aWYoMipQZT5OJiYo''@;'; put 'put ''Tj0yKlBlLEg9QnVmZmVyLmFsbG9jVW5zYWZlKE4pKSxCdWZmZXIuaXNCdWZmZXIocGUpKWZvcihaZT0wO1plPFBlO1plKyspSFsyKlplXT1sW3FlPTIqcGVbWmVdXSxIWzIqWmUrMV09bFtxZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgcGUpZm9yKFplPTA7WmU8UGU7WmUrKylxZT0y''@;'; put 'put ''KnBlLmNoYXJDb2RlQXQoWmUpLEhbMipaZV09bFtxZV0sSFsyKlplKzFdPWxbcWUrMV07ZWxzZSBmb3IoWmU9MDtaZTxQZTtaZSsrKUhbMipaZV09bFtxZT0yKnBlW1plXV0sSFsyKlplKzFdPWxbcWUrMV07cmV0dXJuIEguc2xpY2UoMCwyKlBlKS50b1N0cmluZygidWNzMiIpfX0sSz1mdW5j''@;'; put 'put ''dGlvbihMKXtmb3IodmFyIHk9ZFtMXS5lbmMsbD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxiPTA7YjwxMzEwNzI7KytiKWxbYl09MDtmb3IodmFyIHE9T2JqZWN0LmtleXMoeSksRz0wLFE9cVtHXTtHPHEubGVuZ3RoOysrRylpZihRPXFbR10pe3ZhciBwZT1RLmNoYXJDb2RlQXQoMCk7''@;'; put 'put ''bFsyKnBlXT0yNTUmeVtRXSxsWzIqcGUrMV09eVtRXT4+OH1yZXR1cm4gZnVuY3Rpb24oWmUscWUpe3ZhciB2ZT1aZS5sZW5ndGgsdWU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqdmUpLHplPTAsT2U9MCxDZT0wLGtlPTAseGU9MDtpZigic3RyaW5nIj09dHlwZW9mIFplKXtmb3IoemU9a2U9MDt6''@;'; put 'put ''ZTx2ZTsrK3plKU9lPTIqWmUuY2hhckNvZGVBdCh6ZSksdWVba2UrK109bFtPZSsxXXx8bFtPZV0sbFtPZSsxXT4wJiYodWVba2UrK109bFtPZV0pO3VlPXVlLnNsaWNlKDAsa2UpfWVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKFplKSl7Zm9yKHplPWtlPTA7emU8dmU7Kyt6ZSkoeGU9WmVbemVd''@;'; put 'put ''KTwxMjg/T2U9eGU6eGU8MjI0PyhPZT0oKDMxJnhlKTw8NikrKDYzJlplW3plKzFdKSwrK3plKTp4ZTwyNDA/KE9lPSgoMTUmeGUpPDwxMikrKCg2MyZaZVt6ZSsxXSk8PDYpKyg2MyZaZVt6ZSsyXSksemUrPTIpOihPZT0oKDcmeGUpPDwxOCkrKCg2MyZaZVt6ZSsxXSk8PDEyKSsoKDYzJlpl''@;'; put 'put ''W3plKzJdKTw8NikrKDYzJlplW3plKzNdKSx6ZSs9MyksT2U8NjU1MzY/KHVlW2tlKytdPWxbMSsoT2UqPTIpXXx8bFtPZV0sbFtPZSsxXT4wJiYodWVba2UrK109bFtPZV0pKToodWVba2UrK109bFsxKyhPZT0yKig1NTI5NisoKENlPU9lLTY1NTM2KT4+MTAmMTAyMykpKV18fGxbT2VdLGxb''@;'; put 'put ''T2UrMV0+MCYmKHVlW2tlKytdPWxbT2VdKSx1ZVtrZSsrXT1sWzErKE9lPTIqKDU2MzIwKygxMDIzJkNlKSkpXXx8bFtPZV0sbFtPZSsxXT4wJiYodWVba2UrK109bFtPZV0pKTt1ZT11ZS5zbGljZSgwLGtlKX1lbHNlIGZvcih6ZT1rZT0wO3plPHZlO3plKyspT2U9MipaZVt6ZV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSx1ZVtrZSsrXT1sW09lKzFdfHxsW09lXSxsW09lKzFdPjAmJih1ZVtrZSsrXT1sW09lXSk7cmV0dXJuIHFlJiYiYnVmIiE9PXFlPyJhcnIiIT09cWU/dWUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwodWUpOnVlfX0sWD1mdW5jdGlvbihMKXt2YXIgcSx5PWRbTF0u''@;'; put 'put ''ZGVjLGw9QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksYj0wLEc9MCxRPTAscGU9MDtmb3IocGU9MDtwZTw2NTUzNjsrK3BlKWxbMipwZV09MjU1LGxbMipwZSsxXT0yNTM7Zm9yKGI9MDtiPHkubGVuZ3RoOysrYikocT15W2JdKSYmKEc9cS5jaGFyQ29kZUF0KDApLGxbUT0yKmJdPTI1NSZH''@;'; put 'put ''LGxbUSsxXT1HPj44KTtyZXR1cm4gZnVuY3Rpb24oWmUpe3ZhciBxZT1aZS5sZW5ndGgsdmU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqcWUpLHVlPTAsemU9MCxPZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihaZSkpZm9yKHVlPTA7dWU8cWU7dWUrKykyNTU9PT1sW3plPTIqWmVbdWVdXSYmMjUzPT09''@;'; put 'put ''bFt6ZSsxXSYmKHplPTIqKChaZVt1ZV08PDgpK1plW3VlKzFdKSwrK3VlKSx2ZVtPZSsrXT1sW3plXSx2ZVtPZSsrXT1sW3plKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBaZSlmb3IodWU9MDt1ZTxxZTt1ZSsrKXplPTIqWmUuY2hhckNvZGVBdCh1ZSksMjU1PT09bFt6ZV0mJjI1Mz09''@;'; put 'put ''PWxbemUrMV0mJih6ZT0yKigoWmUuY2hhckNvZGVBdCh1ZSk8PDgpK1plLmNoYXJDb2RlQXQodWUrMSkpLCsrdWUpLHZlW09lKytdPWxbemVdLHZlW09lKytdPWxbemUrMV07ZWxzZSBmb3IodWU9MDt1ZTxxZTt1ZSsrKTI1NT09PWxbemU9MipaZVt1ZV1dJiYyNTM9PT1sW3plKzFdJiYoemU9''@;'; put 'put ''MiooKFplW3VlXTw8OCkrWmVbdWUrMV0pLCsrdWUpLHZlW09lKytdPWxbemVdLHZlW09lKytdPWxbemUrMV07cmV0dXJuIHZlLnNsaWNlKDAsT2UpLnRvU3RyaW5nKCJ1Y3MyIil9fTtmWzY1MDAxXT1mdW5jdGlvbiBrKEwpe2lmKCJzdHJpbmciPT10eXBlb2YgTClyZXR1cm4gayhMLnNwbGl0''@;'; put 'put ''KCIiKS5tYXAoRCkpO3ZhciB5PUwubGVuZ3RoLGw9MCxiPTA7NCp5Pk4mJihOPTQqeSxIPUJ1ZmZlci5hbGxvY1Vuc2FmZShOKSk7dmFyIHE9MDt5Pj0zJiYyMzk9PUxbMF0mJjE4Nz09TFsxXSYmMTkxPT1MWzJdJiYocT0zKTtmb3IodmFyIEc9MSxRPTAscGU9MDtxPHk7cSs9RylHPTEsKHBl''@;'; put 'put ''PUxbcV0pPDEyOD9sPXBlOnBlPDIyND8obD02NCooMzEmcGUpKyg2MyZMW3ErMV0pLEc9Mik6cGU8MjQwPyhsPSgoMTUmcGUpPDwxMikrNjQqKDYzJkxbcSsxXSkrKDYzJkxbcSsyXSksRz0zKToobD0yNjIxNDQqKDcmcGUpKygoNjMmTFtxKzFdKTw8MTIpKzY0Kig2MyZMW3ErMl0pKyg2MyZM''@;'; put 'put ''W3ErM10pLEc9NCksbDw2NTUzNj8oSFtRKytdPTI1NSZsLEhbUSsrXT1sPj44KTooYj01NTI5NisoKGwtPTY1NTM2KT4+MTAmMTAyMyksbD01NjMyMCsoMTAyMyZsKSxIW1ErK109MjU1JmIsSFtRKytdPWI+Pj44LEhbUSsrXT0yNTUmbCxIW1ErK109bD4+PjgmMjU1KTtyZXR1cm4gSC5zbGlj''@;'; put 'put ''ZSgwLFEpLnRvU3RyaW5nKCJ1Y3MyIil9LFRbNjUwMDFdPWZ1bmN0aW9uKEwseSl7aWYoRSYmQnVmZmVyLmlzQnVmZmVyKEwpKXJldHVybiB5JiYiYnVmIiE9PXk/ImFyciIhPT15P0wudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoTCk6TDt2YXIgbD1MLmxlbmd0aCxiPTAscT0w''@;'; put 'put ''LEc9MCxRPSJzdHJpbmciPT10eXBlb2YgTDs0Kmw+TiYmKE49NCpsLEg9QnVmZmVyLmFsbG9jVW5zYWZlKE4pKTtmb3IodmFyIHBlPTA7cGU8bDsrK3BlKShiPVE/TC5jaGFyQ29kZUF0KHBlKTpMW3BlXS5jaGFyQ29kZUF0KDApKTw9MTI3P0hbRysrXT1iOmI8PTIwNDc/KEhbRysrXT0xOTIr''@;'; put 'put ''KGI+PjYpLEhbRysrXT0xMjgrKDYzJmIpKTpiPj01NTI5NiYmYjw9NTczNDM/KGItPTU1Mjk2LCsrcGUscT0oUT9MLmNoYXJDb2RlQXQocGUpOkxbcGVdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyhiPDwxMCksSFtHKytdPTI0MCsocT4+PjE4JjcpLEhbRysrXT0xNDQrKHE+Pj4xMiY2MyksSFtH''@;'; put 'put ''KytdPTEyOCsocT4+PjYmNjMpLEhbRysrXT0xMjgrKDYzJnEpKTooSFtHKytdPTIyNCsoYj4+MTIpLEhbRysrXT0xMjgrKGI+PjYmNjMpLEhbRysrXT0xMjgrKDYzJmIpKTtyZXR1cm4geSYmImJ1ZiIhPT15PyJhcnIiIT09eT9ILnNsaWNlKDAsRykudG9TdHJpbmcoImJpbmFyeSIpOltdLnNs''@;'; put 'put ''aWNlLmNhbGwoSCwwLEcpOkguc2xpY2UoMCxHKX19dmFyIG5lPWZ1bmN0aW9uKCl7aWYoRSl7aWYoQVtoWzBdXSlyZXR1cm47dmFyIEw9MCx5PTA7Zm9yKEw9MDtMPGgubGVuZ3RoOysrTClkW3k9aFtMXV0mJihBW3ldPVUoeSksTVt5XT1aKHkpKTtmb3IoTD0wO0w8by5sZW5ndGg7KytMKWRb''@;'; put 'put ''eT1vW0xdXSYmKEFbeV09WCh5KSxNW3ldPUsoeSkpO2ZvcihMPTA7TDxJLmxlbmd0aDsrK0wpZlt5PUlbTF1dJiYoQVt5XT1mW3ldKSxUW3ldJiYoTVt5XT1UW3ldKX19LHNlPWZ1bmN0aW9uKGssTCl7cmV0dXJuIiJ9LGhlPWZ1bmN0aW9uKEwpe2RlbGV0ZSBBW0xdLGRlbGV0ZSBNW0xdfSxt''@;'; put 'put ''ZT17ZW5jYWNoZTpuZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoRSl7aWYoIUFbaFswXV0pcmV0dXJuO2guZm9yRWFjaChoZSksby5mb3JFYWNoKGhlKSxJLmZvckVhY2goaGUpfXM9c2UsdT0wfSxzYmNzOmgsZGJjczpvfTtuZSgpO3ZhciBGZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVph''@;'; put 'put ''YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscz1zZSx1PTA7cmV0dXJuIGQudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBrKEwseSl7dmFyIGw7aWYobD1BW0xdKXJldHVybiBsKHkpO2lmKCJzdHJpbmciPT10eXBlb2YgeSlyZXR1cm4gayhMLHkuc3BsaXQoIiIpLm1hcChE''@;'; put 'put ''KSk7dmFyIHVlLGI9eS5sZW5ndGgscT1uZXcgQXJyYXkoYiksRz0iIixRPTAscGU9MCxQZT0xLFplPTAscWU9MCx2ZT1kW0xdLHplPSIiO2lmKHZlJiYodWU9dmUuZGVjKSlmb3IocGU9MDtwZTxiO3BlKz1QZSl7aWYoUGU9MiwoRz11ZVsoeVtwZV08PDgpK3lbcGUrMV1dKXx8KFBlPTEsRz11''@;'; put 'put ''ZVt5W3BlXV0pLCFHKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIreVtwZV0rIiAiK3lbcGUrUGUtMV0rIiAiK3BlKyIgIitQZSsiICIrdWVbeVtwZV1dKTtxW1plKytdPUd9ZWxzZXtpZighKHplPVNbTF0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAi''@;'; put 'put ''K0wpO3N3aXRjaCh6ZSl7Y2FzZSJ1dGY4Ijpmb3IoYj49MyYmMjM5PT15WzBdJiYxODc9PXlbMV0mJjE5MT09eVsyXSYmKHBlPTMpO3BlPGI7cGUrPVBlKVBlPTEseVtwZV08MTI4P1E9eVtwZV06eVtwZV08MjI0PyhRPTY0KigzMSZ5W3BlXSkrKDYzJnlbcGUrMV0pLFBlPTIpOnlbcGVdPDI0''@;'; put 'put ''MD8oUT0oKDE1JnlbcGVdKTw8MTIpKzY0Kig2MyZ5W3BlKzFdKSsoNjMmeVtwZSsyXSksUGU9Myk6KFE9MjYyMTQ0Kig3JnlbcGVdKSsoKDYzJnlbcGUrMV0pPDwxMikrNjQqKDYzJnlbcGUrMl0pKyg2MyZ5W3BlKzNdKSxQZT00KSxRPDY1NTM2fHwocWU9NTUyOTYrKChRLT02NTUzNik+PjEw''@;'; put 'put ''JjEwMjMpLFE9NTYzMjArKDEwMjMmUSkscVtaZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHFlKSkscVtaZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFEpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKEUmJkJ1ZmZlci5pc0J1ZmZlcih5KSlyZXR1cm4geS50b1N0cmluZyh6ZSk7Zm9yKHBlPTA7cGU8''@;'; put 'put ''YjtwZSsrKXFbcGVdPVN0cmluZy5mcm9tQ2hhckNvZGUoeVtwZV0pO1plPWI7YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZihiPj0yJiYyNTU9PXlbMF0mJjI1ND09eVsxXSYmKHBlPTIpLEUmJkJ1ZmZlci5pc0J1ZmZlcih5KSlyZXR1cm4geS50b1N0cmluZyh6ZSk7Zm9yKFBlPTI7cGUrMTxiO3Bl''@;'; put 'put ''Kz1QZSlxW1plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKHlbcGUrMV08PDgpK3lbcGVdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihiPj0yJiYyNTQ9PXlbMF0mJjI1NT09eVsxXSYmKHBlPTIpLFBlPTI7cGUrMTxiO3BlKz1QZSlxW1plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKHlbcGVd''@;'; put 'put ''PDw4KSt5W3BlKzFdKTticmVhaztjYXNlInV0ZjMybGUiOmZvcihiPj00JiYyNTU9PXlbMF0mJjI1ND09eVsxXSYmMD09PXlbMl0mJjA9PT15WzNdJiYocGU9NCksUGU9NDtwZTxiO3BlKz1QZSkoUT0oeVtwZSszXTw8MjQpKyh5W3BlKzJdPDwxNikrKHlbcGUrMV08PDgpK3lbcGVdKT42NTUz''@;'; put 'put ''NT8oUS09NjU1MzYscVtaZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhRPj4xMCYxMDIzKSkscVtaZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJlEpKSk6cVtaZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFEpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKGI+PTQm''@;'; put 'put ''JjI1NT09eVszXSYmMjU0PT15WzJdJiYwPT09eVsxXSYmMD09PXlbMF0mJihwZT00KSxQZT00O3BlPGI7cGUrPVBlKShRPSh5W3BlXTw8MjQpKyh5W3BlKzFdPDwxNikrKHlbcGUrMl08PDgpK3lbcGUrM10pPjY1NTM1PyhRLT02NTUzNixxW1plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUy''@;'; put 'put ''OTYrKFE+PjEwJjEwMjMpKSxxW1plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmUSkpKTpxW1plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoUSk7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoYj49NCYmNDM9PXlbMF0mJjQ3PT15WzFdJiYxMTg9PXlbMl0mJihiPj01JiY1Nj09eVsz''@;'; put 'put ''XSYmNDU9PXlbNF0/cGU9NTooNTY9PXlbM118fDU3PT15WzNdfHw0Mz09eVszXXx8NDc9PXlbM10pJiYocGU9NCkpO3BlPGI7cGUrPVBlKWlmKDQzPT09eVtwZV0paWYoUGU9MSw0NSE9PXlbcGUrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZSh5W3BlK1BlXSkubWF0Y2goL1tBLVphLXow''@;'; put 'put ''LTkrXC9dLyk7KVBlKys7dmFyIE9lPTA7NDU9PT15W3BlK1BlXSYmKCsrUGUsT2U9MSk7Zm9yKHZhciBDZT1bXSxrZT0iIixiZT0wLHdlPTAscHQ9MCxLZT0wLFllPTE7WWU8UGUtT2UmJihiZT1GZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoeVtwZStZZSsrXSkpLHdlPUZlLmluZGV4''@;'; put 'put ''T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh5W3BlK1llKytdKSksQ2UucHVzaChiZTw8Mnx3ZT4+NCksLTEhPT0ocHQ9RmUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHlbcGUrWWUrK10pKSkmJihDZS5wdXNoKCgxNSZ3ZSk8PDR8cHQ+PjIpLC0xIT09KEtlPUZlLmluZGV4T2YoU3RyaW5n''@;'; put 'put ''LmZyb21DaGFyQ29kZSh5W3BlK1llKytdKSkpKSk7KUtlPDY0JiZDZS5wdXNoKCgzJnB0KTw8NnxLZSk7Zm9yKGtlPWsoMTIwMSxDZSksWWU9MDtZZTxrZS5sZW5ndGg7KytZZSlxW1plKytdPWtlLmNoYXJBdChZZSl9ZWxzZSBQZT0yLHFbWmUrK109IisiO2Vsc2UgUGU9MSxxW1plKytdPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoeVtwZV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitMKyIgIitTW0xdKX19cmV0dXJuIHEuc2xpY2UoMCxaZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBrKEwseSxsKXtpZihMPT09dSYmcylyZXR1cm4g''@;'; put 'put ''cyh5LGwpO2lmKE1bTF0pcmV0dXJuKHM9TVt1PUxdKSh5LGwpO0UmJkJ1ZmZlci5pc0J1ZmZlcih5KSYmKHk9eS50b1N0cmluZygidXRmOCIpKTt2YXIgcWUsYj15Lmxlbmd0aCxxPUU/QnVmZmVyLmFsbG9jVW5zYWZlKDQqYik6W10sRz0wLFE9MCxwZT0wLFBlPTAsWmU9ZFtMXSx2ZT0iIix1''@;'; put 'put ''ZT0ic3RyaW5nIj09dHlwZW9mIHk7aWYoWmUmJihxZT1aZS5lbmMpKWZvcihRPTA7UTxiOysrUSwrK3BlKShHPXFlW3VlP3kuY2hhckF0KFEpOnlbUV1dKT4yNTU/KHFbcGVdPUc+PjgscVsrK3BlXT0yNTUmRyk6cVtwZV09MjU1Jkc7ZWxzZXtpZighKHZlPVNbTF0pKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5yZWNvZ25pemVkIENQOiAiK0wpO3N3aXRjaCh2ZSl7Y2FzZSJ1dGY4IjppZihFJiZ1ZSl7cGU9KHE9Qih5LHZlKSkubGVuZ3RoO2JyZWFrfWZvcihRPTA7UTxiOysrUSwrK3BlKShHPXVlP3kuY2hhckNvZGVBdChRKTp5W1FdLmNoYXJDb2RlQXQoMCkpPD0xMjc/cVtwZV09RzpHPD0y''@;'; put 'put ''MDQ3PyhxW3BlXT0xOTIrKEc+PjYpLHFbKytwZV09MTI4Kyg2MyZHKSk6Rz49NTUyOTYmJkc8PTU3MzQzPyhHLT01NTI5NixQZT0odWU/eS5jaGFyQ29kZUF0KCsrUSk6eVsrK1FdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyhHPDwxMCkscVtwZV09MjQwKyhQZT4+PjE4JjcpLHFbKytwZV09MTQ0''@;'; put 'put ''KyhQZT4+PjEyJjYzKSxxWysrcGVdPTEyOCsoUGU+Pj42JjYzKSxxWysrcGVdPTEyOCsoNjMmUGUpKToocVtwZV09MjI0KyhHPj4xMikscVsrK3BlXT0xMjgrKEc+PjYmNjMpLHFbKytwZV09MTI4Kyg2MyZHKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoRSYmInN0cmluZyI9PXR5cGVvZiB5KXtw''@;'; put 'put ''ZT0ocT1CKHksdmUpKS5sZW5ndGg7YnJlYWt9Zm9yKFE9MDtRPGI7KytRLCsrcGUpe2lmKCEoKEc9dWU/eS5jaGFyQ29kZUF0KFEpOnlbUV0uY2hhckNvZGVBdCgwKSk8PTEyNykpdGhyb3cgbmV3IEVycm9yKCJiYWQgYXNjaWkgIitHKTtxW3BlXT1HfWJyZWFrO2Nhc2UidXRmMTZsZSI6aWYo''@;'; put 'put ''RSYmInN0cmluZyI9PXR5cGVvZiB5KXtwZT0ocT1CKHksdmUpKS5sZW5ndGg7YnJlYWt9Zm9yKFE9MDtRPGI7KytRKUc9dWU/eS5jaGFyQ29kZUF0KFEpOnlbUV0uY2hhckNvZGVBdCgwKSxxW3BlKytdPTI1NSZHLHFbcGUrK109Rz4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihRPTA7UTxi''@;'; put 'put ''OysrUSlHPXVlP3kuY2hhckNvZGVBdChRKTp5W1FdLmNoYXJDb2RlQXQoMCkscVtwZSsrXT1HPj44LHFbcGUrK109MjU1Jkc7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoUT0wO1E8YjsrK1EpKEc9dWU/eS5jaGFyQ29kZUF0KFEpOnlbUV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZHPD01NzM0''@;'; put 'put ''MyYmKEc9NjU1MzYrKEctNTUyOTY8PDEwKSsoeVsrK1FdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxxW3BlKytdPTI1NSZHLHFbcGUrK109MjU1JihHPj49OCkscVtwZSsrXT0yNTUmKEc+Pj04KSxxW3BlKytdPTI1NSYoRz4+PTgpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKFE9MDtRPGI7KytR''@;'; put 'put ''KShHPXVlP3kuY2hhckNvZGVBdChRKTp5W1FdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmRzw9NTczNDMmJihHPTY1NTM2KyhHLTU1Mjk2PDwxMCkrKHlbKytRXS5jaGFyQ29kZUF0KDApLTU2MzIwKSkscVtwZSszXT0yNTUmRyxxW3BlKzJdPTI1NSYoRz4+PTgpLHFbcGUrMV09MjU1JihHPj49''@;'; put 'put ''OCkscVtwZV09MjU1JihHPj49OCkscGUrPTQ7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoUT0wO1E8YjtRKyspe3ZhciB6ZT11ZT95LmNoYXJBdChRKTp5W1FdLmNoYXJBdCgwKTtpZigiKyIhPT16ZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5''@;'; put 'put ''ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoemUpPi0xKXFbcGUrK109emUuY2hhckNvZGVBdCgwKTtlbHNle3ZhciBPZT1rKDEyMDEsemUpO3FbcGUrK109NDMscVtwZSsrXT1GZS5jaGFyQ29kZUF0KE9lWzBdPj4yKSxxW3BlKytdPUZlLmNoYXJDb2RlQXQoKCgzJk9lWzBdKTw8NCkr''@;'; put 'put ''KChPZVsxXXx8MCk+PjQpKSxxW3BlKytdPUZlLmNoYXJDb2RlQXQoKCgxNSZPZVsxXSk8PDIpKygoT2VbMl18fDApPj42KSkscVtwZSsrXT00NX1lbHNlIHFbcGUrK109NDMscVtwZSsrXT00NX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIrTCsi''@;'; put 'put ''ICIrU1tMXSl9fXJldHVybiBxPXEuc2xpY2UoMCxwZSksRT9sJiYiYnVmIiE9PWw/ImFyciIhPT1sP3EudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwocSk6cToic3RyIj09bD9xLm1hcChPKS5qb2luKCIiKTpxfSxoYXNjcDpmdW5jdGlvbihMKXtyZXR1cm4hKCFkW0xdJiYhU1tM''@;'; put 'put ''XSl9LG1hZ2ljOlMsY2FjaGU6bWV9LGR9KX0sMzE3OSh0ZSxqKXt2YXIgZCxTLGg7IWZ1bmN0aW9uKG8pe2lmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1Iil0ZS5leHBvcnRzPW8oKTtlbHNlIGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilKU1ppcFN5bmM9bygpLFM9''@;'; put 'put ''W10sdm9pZCAwIT09KGg9ImZ1bmN0aW9uIj09dHlwZW9mKGQ9byk/ZC5hcHBseShqLFMpOmQpJiYodGUuZXhwb3J0cz1oKTtlbHNle3ZhciBJO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9JPWdsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/ST13aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/ST1n''@;'; put 'put ''bG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9JPSQuZ2xvYmFsOnR5cGVvZiBzZWxmPCJ1IiYmKEk9c2VsZiksSS5KU1ppcFN5bmM9bygpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gVChBLE0sTyl7ZnVuY3Rpb24gRChGLE4pe2lmKCFNW0ZdKXtpZighQVtGXSl7aWYoRSlyZXR1''@;'; put 'put ''cm4gRShGLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitGKyInIil9dmFyIHo9TVtGXT17ZXhwb3J0czp7fX07QVtGXVswXS5jYWxsKHouZXhwb3J0cyxmdW5jdGlvbihaKXtyZXR1cm4gRChBW0ZdWzFdW1pdfHxaKX0seix6LmV4cG9ydHMsVCxBLE0sTyl9cmV0''@;'; put 'put ''dXJuIE1bRl0uZXhwb3J0c31mb3IodmFyIEU9dm9pZCAwLEI9MDtCPE8ubGVuZ3RoO0IrKylEKE9bQl0pO3JldHVybiBEfSh7MTpbZnVuY3Rpb24oVCxBLE0peyJ1c2Ugc3RyaWN0Ijt2YXIgTz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx''@;'; put 'put ''MjM0NTY3ODkrLz0iO00uZW5jb2RlPWZ1bmN0aW9uKEQsRSl7Zm9yKHZhciBGLE4sSCx6LFosVSxLLEI9IiIsWD0wO1g8RC5sZW5ndGg7KXo9KEY9RC5jaGFyQ29kZUF0KFgrKykpPj4yLFo9KDMmRik8PDR8KE49RC5jaGFyQ29kZUF0KFgrKykpPj40LFU9KDE1Jk4pPDwyfChIPUQuY2hhckNv''@;'; put 'put ''ZGVBdChYKyspKT4+NixLPTYzJkgsaXNOYU4oTik/VT1LPTY0OmlzTmFOKEgpJiYoSz02NCksQj1CK08uY2hhckF0KHopK08uY2hhckF0KFopK08uY2hhckF0KFUpK08uY2hhckF0KEspO3JldHVybiBCfSxNLmRlY29kZT1mdW5jdGlvbihELEUpe3ZhciBOLEgseixaLFUsSyxCPSIiLFg9MDtm''@;'; put 'put ''b3IoRD1ELnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtYPEQubGVuZ3RoOyl6PU8uaW5kZXhPZihELmNoYXJBdChYKyspKSxOPSgxNSYoWj1PLmluZGV4T2YoRC5jaGFyQXQoWCsrKSkpKTw8NHwoVT1PLmluZGV4T2YoRC5jaGFyQXQoWCsrKSkpPj4yLEg9KDMmVSk8PDZ8KEs9''@;'; put 'put ''Ty5pbmRleE9mKEQuY2hhckF0KFgrKykpKSxCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHo8PDJ8Wj4+NCksNjQhPVUmJihCKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE4pKSw2NCE9SyYmKEIrPVN0cmluZy5mcm9tQ2hhckNvZGUoSCkpO3JldHVybiBCfX0se31dLDI6W2Z1bmN0aW9uKFQsQSxNKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7ZnVuY3Rpb24gTygpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH1PLnByb3RvdHlwZT17Z2V0Q29udGVudDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sQS5leHBvcnRzPU99LHt9XSwzOltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO00uU1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzczpmdW5jdGlvbihPKXtyZXR1''@;'; put 'put ''cm4gT30sdW5jb21wcmVzczpmdW5jdGlvbihPKXtyZXR1cm4gT30sY29tcHJlc3NJbnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LE0uREVGTEFURT1UKCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6OH1dLDQ6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89''@;'; put 'put ''VCgiLi91dGlscyIpLEQ9WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwzODg3NjA3''@;'; put 'put ''MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEzNjU0NjUs''@;'; put 'put ''NDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0NTEsMTE3''@;'; put 'put ''MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIsNzk1ODM1''@;'; put 'put ''NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4MzAwNDAs''@;'; put 'put ''MjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIwMiw0MjQw''@;'; put 'put ''MDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5NiwyOTA5MjQz''@;'; put 'put ''NDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIxMzg3NzYs''@;'; put 'put ''Mjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMwLDI0ODk1''@;'; put 'put ''OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3NTMxMzUy''@;'; put 'put ''NiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYzODg1OSwz''@;'; put 'put ''NjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMzLDE0MjY0''@;'; put 'put ''MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkxMzA4Nzg3''@;'; put 'put ''Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkxMTUsMTg3''@;'; put 'put ''MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwzNDk1OTU4''@;'; put 'put ''MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQyMDc0OTMs''@;'; put 'put ''MzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtBLmV4cG9ydHM9ZnVuY3Rpb24oQixGKXtpZih0eXBlb2YgQj4idSJ8fCFCLmxl''@;'; put 'put ''bmd0aClyZXR1cm4gMDt2YXIgTj0ic3RyaW5nIiE9PU8uZ2V0VHlwZU9mKEIpO3R5cGVvZiBGPiJ1IiYmKEY9MCk7dmFyIFo9MDtGPX5GO2Zvcih2YXIgVT0wLEs9Qi5sZW5ndGg7VTxLO1UrKylaPU4/QltVXTpCLmNoYXJDb2RlQXQoVSksRj1GPj4+OF5EWzI1NSYoRl5aKV07cmV0dXJufkZ9''@;'; put 'put ''fSx7Ii4vdXRpbHMiOjIxfV0sNTpbZnVuY3Rpb24oVCxBLE0peyJ1c2Ugc3RyaWN0Ijt2YXIgTz1UKCIuL3V0aWxzIik7ZnVuY3Rpb24gRChFKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH1ELnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oRSl7dGhp''@;'; put 'put ''cy5jaGVja0luZGV4KHRoaXMuaW5kZXgrRSl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oRSl7aWYodGhpcy5sZW5ndGg8RXx8RTwwKXRocm93IG5ldyBFcnJvcigiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiK3RoaXMubGVuZ3RoKyIsIGFza2VkIGluZGV4ID0gIitFKyIpLiBD''@;'; put 'put ''b3JydXB0ZWQgemlwID8iKX0sc2V0SW5kZXg6ZnVuY3Rpb24oRSl7dGhpcy5jaGVja0luZGV4KEUpLHRoaXMuaW5kZXg9RX0sc2tpcDpmdW5jdGlvbihFKXt0aGlzLnNldEluZGV4KHRoaXMuaW5kZXgrRSl9LGJ5dGVBdDpmdW5jdGlvbihFKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oRSl7dmFyIEYs''@;'; put 'put ''Qj0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KEUpLEY9dGhpcy5pbmRleCtFLTE7Rj49dGhpcy5pbmRleDtGLS0pQj0oQjw8OCkrdGhpcy5ieXRlQXQoRik7cmV0dXJuIHRoaXMuaW5kZXgrPUUsQn0scmVhZFN0cmluZzpmdW5jdGlvbihFKXtyZXR1cm4gTy50cmFuc2Zvcm1Ubygic3RyaW5nIix0''@;'; put 'put ''aGlzLnJlYWREYXRhKEUpKX0scmVhZERhdGE6ZnVuY3Rpb24oRSl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbihFKXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZSgxOTgwKyhFPj4yNSYxMjcpLChFPj4yMSYxNSktMSxF''@;'; put 'put ''Pj4xNiYzMSxFPj4xMSYzMSxFPj41JjYzLCgzMSZFKTw8MSl9fSxBLmV4cG9ydHM9RH0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7TS5iYXNlNjQ9ITEsTS5iaW5hcnk9ITEsTS5kaXI9ITEsTS5jcmVhdGVGb2xkZXJzPSExLE0uZGF0ZT1udWxsLE0u''@;'; put 'put ''Y29tcHJlc3Npb249bnVsbCxNLmNvbW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89VCgiLi91dGlscyIpO00uc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihEKXtyZXR1cm4gTy5zdHJpbmcyYmluYXJ5KEQpfSxNLnN0cmluZzJVaW50OEFycmF5PWZ1''@;'; put 'put ''bmN0aW9uKEQpe3JldHVybiBPLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixEKX0sTS51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihEKXtyZXR1cm4gTy50cmFuc2Zvcm1Ubygic3RyaW5nIixEKX0sTS5zdHJpbmcyQmxvYj1mdW5jdGlvbihEKXt2YXIgRT1PLnRyYW5zZm9ybVRvKCJhcnJh''@;'; put 'put ''eWJ1ZmZlciIsRCk7cmV0dXJuIE8uYXJyYXlCdWZmZXIyQmxvYihFKX0sTS5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKEQpe3JldHVybiBPLmFycmF5QnVmZmVyMkJsb2IoRCl9LE0udHJhbnNmb3JtVG89ZnVuY3Rpb24oRCxFKXtyZXR1cm4gTy50cmFuc2Zvcm1UbyhELEUpfSxNLmdldFR5''@;'; put 'put ''cGVPZj1mdW5jdGlvbihEKXtyZXR1cm4gTy5nZXRUeXBlT2YoRCl9LE0uY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKEQpe3JldHVybiBPLmNoZWNrU3VwcG9ydChEKX0sTS5NQVhfVkFMVUVfMTZCSVRTPU8uTUFYX1ZBTFVFXzE2QklUUyxNLk1BWF9WQUxVRV8zMkJJVFM9Ty5NQVhfVkFMVUVfMzJC''@;'; put 'put ''SVRTLE0ucHJldHR5PWZ1bmN0aW9uKEQpe3JldHVybiBPLnByZXR0eShEKX0sTS5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oRCl7cmV0dXJuIE8uZmluZENvbXByZXNzaW9uKEQpfSxNLmlzUmVnRXhwPWZ1bmN0aW9uKEQpe3JldHVybiBPLmlzUmVnRXhwKEQpfX0seyIuL3V0aWxzIjoyMX1d''@;'; put 'put ''LDg6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgVWludDMyQXJyYXk8InUiLEQ9VCgicGFrbyIpO00udW5jb21wcmVzc0lucHV0VHlwZT1PPyJ1aW50OGFycmF5IjoiYXJyYXki''@;'; put 'put ''LE0uY29tcHJlc3NJbnB1dFR5cGU9Tz8idWludDhhcnJheSI6ImFycmF5IixNLm1hZ2ljPSJcYlwwIixNLmNvbXByZXNzPWZ1bmN0aW9uKEUpe3JldHVybiBELmRlZmxhdGVSYXcoRSl9LE0udW5jb21wcmVzcz1mdW5jdGlvbihFKXtyZXR1cm4gRC5pbmZsYXRlUmF3KEUpfX0se3Bha286MjR9''@;'; put 'put ''XSw5OltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO3ZhciBPPVQoIi4vYmFzZTY0Iik7ZnVuY3Rpb24gRChFLEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEQpKXJldHVybiBuZXcgRChFLEIpO3RoaXMuZmlsZXM9e30sdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PSIiLEUmJnRoaXMu''@;'; put 'put ''bG9hZChFLEIpLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgRDtmb3IodmFyIE4gaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tOXSYmKEZbTl09dGhpc1tOXSk7cmV0dXJuIEZ9fShELnByb3RvdHlwZT1UKCIuL29iamVjdCIpKS5sb2FkPVQoIi4vbG9hZCIpLEQuc3Vw''@;'; put 'put ''cG9ydD1UKCIuL3N1cHBvcnQiKSxELmRlZmF1bHRzPVQoIi4vZGVmYXVsdHMiKSxELnV0aWxzPVQoIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksRC5iYXNlNjQ9e2VuY29kZTpmdW5jdGlvbihFKXtyZXR1cm4gTy5lbmNvZGUoRSl9LGRlY29kZTpmdW5jdGlvbihFKXtyZXR1cm4gTy5kZWNv''@;'; put 'put ''ZGUoRSl9fSxELmNvbXByZXNzaW9ucz1UKCIuL2NvbXByZXNzaW9ucyIpLEEuZXhwb3J0cz1EfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9kZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBw''@;'; put 'put ''b3J0IjoxN31dLDEwOltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO3ZhciBPPVQoIi4vYmFzZTY0IiksRD1UKCIuL3ppcEVudHJpZXMiKTtBLmV4cG9ydHM9ZnVuY3Rpb24oRSxCKXt2YXIgRixOLEgsejtmb3IoKEI9Qnx8e30pLmJhc2U2NCYmKEU9Ty5kZWNvZGUoRSkpLEY9KE49bmV3''@;'; put 'put ''IEQoRSxCKSkuZmlsZXMsSD0wO0g8Ri5sZW5ndGg7SCsrKXRoaXMuZmlsZSgoej1GW0hdKS5maWxlTmFtZSx6LmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRlOnouZGF0ZSxkaXI6ei5kaXIsY29tbWVudDp6LmZpbGVDb21tZW50Lmxlbmd0aD96''@;'; put 'put ''LmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpCLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gTi56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1OLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKFQsQSxN''@;'; put 'put ''KXsoZnVuY3Rpb24oTyl7InVzZSBzdHJpY3QiO3ZhciBEPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgTzwidSIpe3ZhciBFPSFPLmZyb207aWYoIUUpdHJ5e08uZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe0U9ITB9RD1FP2Z1bmN0aW9uKEIsRil7cmV0dXJuIEY/bmV3IE8oQixGKTpuZXcgTyhC''@;'; put 'put ''KX06Ty5mcm9tLmJpbmQoTyksTy5hbGxvY3x8KE8uYWxsb2M9ZnVuY3Rpb24oQil7cmV0dXJuIG5ldyBPKEIpfSl9QS5leHBvcnRzPWZ1bmN0aW9uKEIsRil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBCP08uYWxsb2MoQik6RChCLEYpfSxBLmV4cG9ydHMudGVzdD1mdW5jdGlvbihCKXtyZXR1''@;'; put 'put ''cm4gTy5pc0J1ZmZlcihCKX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oVCxBLE0peyJ1c2Ugc3RyaWN0Ijt2YXIgTz1UKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBEKEUpe3RoaXMuZGF0YT1FLHRoaXMubGVu''@;'; put 'put ''Z3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShELnByb3RvdHlwZT1uZXcgTykucmVhZERhdGE9ZnVuY3Rpb24oRSl7dGhpcy5jaGVja09mZnNldChFKTt2YXIgQj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0UpO3JldHVybiB0aGlzLmluZGV4Kz1FLEJ9''@;'; put 'put ''LEEuZXhwb3J0cz1EfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oVCxBLE0peyJ1c2Ugc3RyaWN0Ijt2YXIgTz1UKCIuL3N1cHBvcnQiKSxEPVQoIi4vdXRpbHMiKSxFPVQoIi4vY3JjMzIiKSxCPVQoIi4vc2lnbmF0dXJlIiksRj1UKCIuL2RlZmF1bHRzIiksTj1U''@;'; put 'put ''KCIuL2Jhc2U2NCIpLEg9VCgiLi9jb21wcmVzc2lvbnMiKSx6PVQoIi4vY29tcHJlc3NlZE9iamVjdCIpLFo9VCgiLi9ub2RlQnVmZmVyIiksVT1UKCIuL3V0ZjgiKSxLPVQoIi4vc3RyaW5nV3JpdGVyIiksWD1UKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSxuZT1mdW5jdGlvbihMKXtpZihMLl9k''@;'; put 'put ''YXRhIGluc3RhbmNlb2YgeiYmKEwuX2RhdGE9TC5fZGF0YS5nZXRDb250ZW50KCksTC5vcHRpb25zLmJpbmFyeT0hMCxMLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PUQuZ2V0VHlwZU9mKEwuX2RhdGEpKSl7dmFyIHk9TC5fZGF0YTtMLl9kYXRhPW5ldyBVaW50OEFycmF5KHku''@;'; put 'put ''bGVuZ3RoKSwwIT09eS5sZW5ndGgmJkwuX2RhdGEuc2V0KHksMCl9cmV0dXJuIEwuX2RhdGF9LHNlPWZ1bmN0aW9uKEwpe3ZhciB5PW5lKEwpO3JldHVybiJzdHJpbmciPT09RC5nZXRUeXBlT2YoeSk/IUwub3B0aW9ucy5iaW5hcnkmJk8ubm9kZWJ1ZmZlcj9aKHksInV0Zi04Iik6TC5hc0Jp''@;'; put 'put ''bmFyeSgpOnl9LGhlPWZ1bmN0aW9uKEwpe3ZhciB5PW5lKHRoaXMpO3JldHVybiBudWxsPT09eXx8dHlwZW9mIHk+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYoeT1OLmRlY29kZSh5KSkseT1MJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P2sudXRmOGRlY29kZSh5KTpELnRyYW5zZm9ybVRv''@;'; put 'put ''KCJzdHJpbmciLHkpLCFMJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKHk9RC50cmFuc2Zvcm1Ubygic3RyaW5nIixrLnV0ZjhlbmNvZGUoeSkpKSx5KX0sX2U9ZnVuY3Rpb24oTCx5LGwpe3RoaXMubmFtZT1MLHRoaXMuZGlyPWwuZGlyLHRoaXMuZGF0ZT1sLmRhdGUsdGhpcy5jb21tZW50PWwu''@;'; put 'put ''Y29tbWVudCx0aGlzLl9kYXRhPXksdGhpcy5vcHRpb25zPWwsdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6bC5kaXIsZGF0ZTpsLmRhdGV9fTtfZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBoZS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBoZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgTD1zZSh0aGlzKTtyZXR1cm4gRC50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsTCl9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBMPXNlKHRoaXMpO3JldHVybiBELnRyYW5zZm9ybVRvKCJ1aW50OGFy''@;'; put 'put ''cmF5IixMKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciBtZT1mdW5jdGlvbihMLHkpe3ZhciBiLGw9IiI7Zm9yKGI9MDtiPHk7YisrKWwrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JkwpLEw+Pj49ODtyZXR1cm4gbH0s''@;'; put 'put ''RmU9ZnVuY3Rpb24oKXt2YXIgeSxsLEw9e307Zm9yKHk9MDt5PGFyZ3VtZW50cy5sZW5ndGg7eSsrKWZvcihsIGluIGFyZ3VtZW50c1t5XSlhcmd1bWVudHNbeV0uaGFzT3duUHJvcGVydHkobCkmJnR5cGVvZiBMW2xdPiJ1IiYmKExbbF09YXJndW1lbnRzW3ldW2xdKTtyZXR1cm4gTH0scz1m''@;'; put 'put ''dW5jdGlvbihMLHksbCl7dmFyIHEsYj1ELmdldFR5cGVPZih5KTtpZihsPWZ1bmN0aW9uKEwpe3JldHVybiEwPT09KEw9THx8e30pLmJhc2U2NCYmbnVsbD09TC5iaW5hcnkmJihMLmJpbmFyeT0hMCksKEw9RmUoTCxGKSkuZGF0ZT1MLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1MLmNvbXByZXNz''@;'; put 'put ''aW9uJiYoTC5jb21wcmVzc2lvbj1MLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLEx9KGwpLGwuY3JlYXRlRm9sZGVycyYmKHE9dShMKSkmJnYuY2FsbCh0aGlzLHEsITApLGwuZGlyfHxudWxsPT09eXx8dHlwZW9mIHk+InUiKWwuYmFzZTY0PSExLGwuYmluYXJ5PSExLHk9bnVsbDtlbHNl''@;'; put 'put ''IGlmKCJzdHJpbmciPT09YilsLmJpbmFyeSYmIWwuYmFzZTY0JiYhMCE9PWwub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYoeT1ELnN0cmluZzJiaW5hcnkoeSkpO2Vsc2V7aWYobC5iYXNlNjQ9ITEsbC5iaW5hcnk9ITAsIShifHx5IGluc3RhbmNlb2YgeikpdGhyb3cgbmV3IEVycm9yKCJUaGUg''@;'; put 'put ''ZGF0YSBvZiAnIitMKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PWImJih5PUQudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHkpKX12YXIgRz1uZXcgX2UoTCx5LGwpO3JldHVybiB0aGlzLmZpbGVzW0xdPUcsR30sdT1mdW5jdGlvbihMKXsiLyI9''@;'; put 'put ''PUwuc2xpY2UoLTEpJiYoTD1MLnN1YnN0cmluZygwLEwubGVuZ3RoLTEpKTt2YXIgeT1MLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIHk+MD9MLnN1YnN0cmluZygwLHkpOiIifSx2PWZ1bmN0aW9uKEwseSl7cmV0dXJuIi8iIT1MLnNsaWNlKC0xKSYmKEwrPSIvIikseT10eXBlb2YgeTwidSIm''@;'; put 'put ''JnksdGhpcy5maWxlc1tMXXx8cy5jYWxsKHRoaXMsTCxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczp5fSksdGhpcy5maWxlc1tMXX0scD1mdW5jdGlvbihMLHkpe3ZhciBiLGw9bmV3IHo7cmV0dXJuIEwuX2RhdGEgaW5zdGFuY2VvZiB6PyhsLnVuY29tcHJlc3NlZFNpemU9TC5fZGF0YS51''@;'; put 'put ''bmNvbXByZXNzZWRTaXplLGwuY3JjMzI9TC5fZGF0YS5jcmMzMiwwPT09bC51bmNvbXByZXNzZWRTaXplfHxMLmRpcj8oeT1ILlNUT1JFLGwuY29tcHJlc3NlZENvbnRlbnQ9IiIsbC5jcmMzMj0wKTpMLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09eS5tYWdpYz9sLmNvbXByZXNzZWRDb250''@;'; put 'put ''ZW50PUwuX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKTooYj1MLl9kYXRhLmdldENvbnRlbnQoKSxsLmNvbXByZXNzZWRDb250ZW50PXkuY29tcHJlc3MoRC50cmFuc2Zvcm1Ubyh5LmNvbXByZXNzSW5wdXRUeXBlLGIpKSkpOigoIShiPXNlKEwpKXx8MD09PWIubGVuZ3RofHxMLmRpcikm''@;'; put 'put ''Jih5PUguU1RPUkUsYj0iIiksbC51bmNvbXByZXNzZWRTaXplPWIubGVuZ3RoLGwuY3JjMzI9RShiKSxsLmNvbXByZXNzZWRDb250ZW50PXkuY29tcHJlc3MoRC50cmFuc2Zvcm1Ubyh5LmNvbXByZXNzSW5wdXRUeXBlLGIpKSksbC5jb21wcmVzc2VkU2l6ZT1sLmNvbXByZXNzZWRDb250ZW50''@;'; put 'put ''Lmxlbmd0aCxsLmNvbXByZXNzaW9uTWV0aG9kPXkubWFnaWMsbH0sXz1mdW5jdGlvbihMLHksbCxiKXt2YXIgdmUsdWUsa2UseGUsRz1ELnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZSh5Lm5hbWUpKSxRPXkuY29tbWVudHx8IiIscGU9RC50cmFuc2Zvcm1Ubygic3RyaW5nIixV''@;'; put 'put ''LnV0ZjhlbmNvZGUoUSkpLFBlPUcubGVuZ3RoIT09eS5uYW1lLmxlbmd0aCxaZT1wZS5sZW5ndGghPT1RLmxlbmd0aCxxZT15Lm9wdGlvbnMsemU9IiIsT2U9IiIsQ2U9IiI7a2U9eS5faW5pdGlhbE1ldGFkYXRhLmRpciE9PXkuZGlyP3kuZGlyOnFlLmRpcix2ZT0oeGU9eS5faW5pdGlhbE1l''@;'; put 'put ''dGFkYXRhLmRhdGUhPT15LmRhdGU/eS5kYXRlOnFlLmRhdGUpLmdldEhvdXJzKCksdmU8PD02LHZlfD14ZS5nZXRNaW51dGVzKCksdmU8PD01LHZlfD14ZS5nZXRTZWNvbmRzKCkvMix1ZT14ZS5nZXRGdWxsWWVhcigpLTE5ODAsdWU8PD00LHVlfD14ZS5nZXRNb250aCgpKzEsdWU8PD01LHVl''@;'; put 'put ''fD14ZS5nZXREYXRlKCksUGUmJihPZT1tZSgxLDEpK21lKEUoRyksNCkrRyx6ZSs9InVwIittZShPZS5sZW5ndGgsMikrT2UpLFplJiYoQ2U9bWUoMSwxKSttZSh0aGlzLmNyYzMyKHBlKSw0KStwZSx6ZSs9InVjIittZShDZS5sZW5ndGgsMikrQ2UpO3ZhciBNZT0iIjtyZXR1cm4gTWUrPSJc''@;'; put 'put ''blwwIixNZSs9UGV8fFplPyJcMFxiIjoiXDBcMCIsTWUrPWwuY29tcHJlc3Npb25NZXRob2QsTWUrPW1lKHZlLDIpLE1lKz1tZSh1ZSwyKSxNZSs9bWUobC5jcmMzMiw0KSxNZSs9bWUobC5jb21wcmVzc2VkU2l6ZSw0KSxNZSs9bWUobC51bmNvbXByZXNzZWRTaXplLDQpLE1lKz1tZShHLmxl''@;'; put 'put ''bmd0aCwyKSxNZSs9bWUoemUubGVuZ3RoLDIpLHtmaWxlUmVjb3JkOkIuTE9DQUxfRklMRV9IRUFERVIrTWUrRyt6ZSxkaXJSZWNvcmQ6Qi5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK01lK21lKHBlLmxlbmd0aCwyKSsiXDBcMFwwXDAiKyghMD09PWtlPyJceDEwXDBcMFwwIjoiXDBc''@;'; put 'put ''MFwwXDAiKSttZShiLDQpK0cremUrcGUsY29tcHJlc3NlZE9iamVjdDpsfX0saz17bG9hZDpmdW5jdGlvbihMLHkpe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMgbm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlwLWxvYWQuanMgaW5jbHVkZWQgPyIpfSxmaWx0ZXI6ZnVuY3Rp''@;'; put 'put ''b24oTCl7dmFyIGwsYixxLEcseT1bXTtmb3IobCBpbiB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkobCkmJihHPW5ldyBfZSgocT10aGlzLmZpbGVzW2xdKS5uYW1lLHEuX2RhdGEsRmUocS5vcHRpb25zKSksYj1sLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgsbC5sZW5ndGgp''@;'; put 'put ''LGwuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmTChiLEcpJiZ5LnB1c2goRykpO3JldHVybiB5fSxmaWxlOmZ1bmN0aW9uKEwseSxsKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoRC5pc1JlZ0V4cChMKSl7dmFyIGI9TDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVu''@;'; put 'put ''Y3Rpb24ocSxHKXtyZXR1cm4hRy5kaXImJmIudGVzdChxKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihxLEcpe3JldHVybiFHLmRpciYmcT09PUx9KVswXXx8bnVsbH1yZXR1cm4gcy5jYWxsKHRoaXMsTD10aGlzLnJvb3QrTCx5LGwpLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihMKXtp''@;'; put 'put ''ZighTClyZXR1cm4gdGhpcztpZihELmlzUmVnRXhwKEwpKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihxLEcpe3JldHVybiBHLmRpciYmTC50ZXN0KHEpfSk7dmFyIGw9di5jYWxsKHRoaXMsdGhpcy5yb290K0wpLGI9dGhpcy5jbG9uZSgpO3JldHVybiBiLnJvb3Q9bC5uYW1lLGJ9LHJl''@;'; put 'put ''bW92ZTpmdW5jdGlvbihMKXt2YXIgeT10aGlzLmZpbGVzW0w9dGhpcy5yb290K0xdO2lmKHl8fCgiLyIhPUwuc2xpY2UoLTEpJiYoTCs9Ii8iKSx5PXRoaXMuZmlsZXNbTF0pLHkmJiF5LmRpcilkZWxldGUgdGhpcy5maWxlc1tMXTtlbHNlIGZvcih2YXIgbD10aGlzLmZpbHRlcihmdW5jdGlv''@;'; put 'put ''bihxLEcpe3JldHVybiBHLm5hbWUuc2xpY2UoMCxMLmxlbmd0aCk9PT1MfSksYj0wO2I8bC5sZW5ndGg7YisrKWRlbGV0ZSB0aGlzLmZpbGVzW2xbYl0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKEwpe0w9RmUoTHx8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RP''@;'; put 'put ''UkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksRC5jaGVja1N1cHBvcnQoTC50eXBlKTt2YXIgcSxHLHplLHk9W10sbD0wLGI9MCxRPUQudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy51dGY4ZW5jb2RlKEwuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgcGUgaW4g''@;'; put 'put ''dGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KHBlKSl7dmFyIFBlPXRoaXMuZmlsZXNbcGVdLFplPVBlLm9wdGlvbnMuY29tcHJlc3Npb258fEwuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxxZT1IW1plXTtpZighcWUpdGhyb3cgbmV3IEVycm9yKFplKyIgaXMgbm90''@;'; put 'put ''IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgdmU9cC5jYWxsKHRoaXMsUGUscWUpLHVlPV8uY2FsbCh0aGlzLHBlLFBlLHZlLGwpO2wrPXVlLmZpbGVSZWNvcmQubGVuZ3RoK3ZlLmNvbXByZXNzZWRTaXplLGIrPXVlLmRpclJlY29yZC5sZW5ndGgseS5wdXNoKHVlKX16ZT1C''@;'; put 'put ''LkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK21lKHkubGVuZ3RoLDIpK21lKHkubGVuZ3RoLDIpK21lKGIsNCkrbWUobCw0KSttZShRLmxlbmd0aCwyKStRO3ZhciBPZT1MLnR5cGUudG9Mb3dlckNhc2UoKTtmb3IocT0idWludDhhcnJheSI9PT1PZXx8ImFycmF5YnVmZmVyIj09''@;'; put 'put ''PU9lfHwiYmxvYiI9PT1PZXx8Im5vZGVidWZmZXIiPT09T2U/bmV3IFgobCtiK3plLmxlbmd0aCk6bmV3IEsobCtiK3plLmxlbmd0aCksRz0wO0c8eS5sZW5ndGg7RysrKXEuYXBwZW5kKHlbR10uZmlsZVJlY29yZCkscS5hcHBlbmQoeVtHXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRD''@;'; put 'put ''b250ZW50KTtmb3IoRz0wO0c8eS5sZW5ndGg7RysrKXEuYXBwZW5kKHlbR10uZGlyUmVjb3JkKTtxLmFwcGVuZCh6ZSk7dmFyIENlPXEuZmluYWxpemUoKTtzd2l0Y2goTC50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVm''@;'; put 'put ''ZmVyIjpyZXR1cm4gRC50cmFuc2Zvcm1UbyhMLnR5cGUudG9Mb3dlckNhc2UoKSxDZSk7Y2FzZSJibG9iIjpyZXR1cm4gRC5hcnJheUJ1ZmZlcjJCbG9iKEQudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixDZSkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTC5iYXNlNjQ/Ti5lbmNvZGUoQ2UpOkNl''@;'; put 'put ''O2RlZmF1bHQ6cmV0dXJuIENlfX0sY3JjMzI6ZnVuY3Rpb24oTCx5KXtyZXR1cm4gRShMLHkpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKEwpe3JldHVybiBELnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShMKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIFUudXRmOGRl''@;'; put 'put ''Y29kZShMKX19O0EuZXhwb3J0cz1rfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9z''@;'; put 'put ''dXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oVCxBLE0peyJ1c2Ugc3RyaWN0IjtNLkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0IixNLkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLE0u''@;'; put 'put ''Q0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2IixNLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLE0uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2IixNLkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1''@;'; put 'put ''bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89VCgiLi9kYXRhUmVhZGVyIiksRD1UKCIuL3V0aWxzIik7ZnVuY3Rpb24gRShCLEYpe3RoaXMuZGF0YT1CLEZ8fCh0aGlzLmRhdGE9RC5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgs''@;'; put 'put ''dGhpcy5pbmRleD0wfShFLnByb3RvdHlwZT1uZXcgTykuYnl0ZUF0PWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChCKX0sRS5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihCKX0sRS5w''@;'; put 'put ''cm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oQil7dGhpcy5jaGVja09mZnNldChCKTt2YXIgRj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0IpO3JldHVybiB0aGlzLmluZGV4Kz1CLEZ9LEEuZXhwb3J0cz1FfSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9''@;'; put 'put ''XSwxNjpbZnVuY3Rpb24oVCxBLE0peyJ1c2Ugc3RyaWN0Ijt2YXIgTz1UKCIuL3V0aWxzIiksRD1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07RC5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihFKXtFPU8udHJhbnNmb3JtVG8oInN0cmluZyIsRSksdGhpcy5kYXRhLnB1c2goRSl9LGZpbmFs''@;'; put 'put ''aXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LEEuZXhwb3J0cz1EfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKFQsQSxNKXsoZnVuY3Rpb24oTyl7InVzZSBzdHJpY3QiO2lmKE0uYmFzZTY0PSEwLE0uYXJyYXk9ITAsTS5zdHJpbmc9ITAsTS5hcnJheWJ1''@;'; put 'put ''ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsTS5ub2RlYnVmZmVyPXR5cGVvZiBPPCJ1IixNLnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpTS5ibG9iPSExO2Vsc2V7dmFyIEQ9bmV3IEFycmF5''@;'; put 'put ''QnVmZmVyKDApO3RyeXtNLmJsb2I9MD09PW5ldyBCbG9iKFtEXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBCPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cu''@;'; put 'put ''TVNCbG9iQnVpbGRlcik7Qi5hcHBlbmQoRCksTS5ibG9iPTA9PT1CLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7TS5ibG9iPSExfX19fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKFQsQSxNKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIE89VCgiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gRChFKXtFJiYodGhpcy5kYXRhPUUsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfShELnByb3RvdHlwZT1uZXcgTykuYnl0ZUF0PWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRhdGFbRV19''@;'; put 'put ''LEQucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEUpe2Zvcih2YXIgQj1FLmNoYXJDb2RlQXQoMCksRj1FLmNoYXJDb2RlQXQoMSksTj1FLmNoYXJDb2RlQXQoMiksSD1FLmNoYXJDb2RlQXQoMyksej10aGlzLmxlbmd0aC00O3o+PTA7LS16KWlmKHRoaXMuZGF0YVt6''@;'; put 'put ''XT09PUImJnRoaXMuZGF0YVt6KzFdPT09RiYmdGhpcy5kYXRhW3orMl09PT1OJiZ0aGlzLmRhdGFbeiszXT09PUgpcmV0dXJuIHo7cmV0dXJuLTF9LEQucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEUpe2lmKHRoaXMuY2hlY2tPZmZzZXQoRSksMD09PUUpcmV0dXJuIG5ldyBVaW50OEFy''@;'; put 'put ''cmF5KDApO3ZhciBCPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrRSk7cmV0dXJuIHRoaXMuaW5kZXgrPUUsQn0sQS5leHBvcnRzPUR9LHsiLi9kYXRhUmVhZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89VCgiLi91dGlscyIp''@;'; put 'put ''LEQ9ZnVuY3Rpb24oRSl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KEUpLHRoaXMuaW5kZXg9MH07RC5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihFKXswIT09RS5sZW5ndGgmJihFPU8udHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEUpLHRoaXMuZGF0YS5zZXQoRSx0aGlzLmluZGV4KSx0''@;'; put 'put ''aGlzLmluZGV4Kz1FLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEEuZXhwb3J0cz1EfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7Zm9yKHZhciBPPVQoIi4vdXRpbHMiKSxEPVQoIi4vc3VwcG9ydCIpLEU9''@;'; put 'put ''VCgiLi9ub2RlQnVmZmVyIiksQj1uZXcgQXJyYXkoMjU2KSxGPTA7RjwyNTY7RisrKUJbRl09Rj49MjUyPzY6Rj49MjQ4PzU6Rj49MjQwPzQ6Rj49MjI0PzM6Rj49MTkyPzI6MTtCWzI1NF09QlsyNTRdPTE7dmFyIEg9ZnVuY3Rpb24oWixVKXt2YXIgSztmb3IoKFU9VXx8Wi5sZW5ndGgpPlou''@;'; put 'put ''bGVuZ3RoJiYoVT1aLmxlbmd0aCksSz1VLTE7Sz49MCYmMTI4PT0oMTkyJlpbS10pOylLLS07cmV0dXJuIEs8MHx8MD09PUs/VTpLK0JbWltLXV0+VT9LOlV9LHo9ZnVuY3Rpb24oWil7dmFyIEssWCxuZSxzZSxoZT1aLmxlbmd0aCxfZT1uZXcgQXJyYXkoMipoZSk7Zm9yKFg9MCxLPTA7Szxo''@;'; put 'put ''ZTspaWYoKG5lPVpbSysrXSk8MTI4KV9lW1grK109bmU7ZWxzZSBpZigoc2U9QltuZV0pPjQpX2VbWCsrXT02NTUzMyxLKz1zZS0xO2Vsc2V7Zm9yKG5lJj0yPT09c2U/MzE6Mz09PXNlPzE1Ojc7c2U+MSYmSzxoZTspbmU9bmU8PDZ8NjMmWltLKytdLHNlLS07c2U+MT9fZVtYKytdPTY1NTMz''@;'; put 'put ''Om5lPDY1NTM2P19lW1grK109bmU6KF9lW1grK109NTUyOTZ8KG5lLT02NTUzNik+PjEwJjEwMjMsX2VbWCsrXT01NjMyMHwxMDIzJm5lKX1yZXR1cm4gX2UubGVuZ3RoIT09WCYmKF9lLnN1YmFycmF5P19lPV9lLnN1YmFycmF5KDAsWCk6X2UubGVuZ3RoPVgpLE8uYXBwbHlGcm9tQ2hhckNv''@;'; put 'put ''ZGUoX2UpfTtNLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oVSl7cmV0dXJuIEQubm9kZWJ1ZmZlcj9FKFUsInV0Zi04Iik6ZnVuY3Rpb24oWil7dmFyIFUsSyxYLG5lLHNlLGhlPVoubGVuZ3RoLF9lPTA7Zm9yKG5lPTA7bmU8aGU7bmUrKyk1NTI5Nj09KDY0NTEyJihLPVouY2hhckNvZGVBdChuZSkp''@;'; put 'put ''KSYmbmUrMTxoZSYmNTYzMjA9PSg2NDUxMiYoWD1aLmNoYXJDb2RlQXQobmUrMSkpKSYmKEs9NjU1MzYrKEstNTUyOTY8PDEwKSsoWC01NjMyMCksbmUrKyksX2UrPUs8MTI4PzE6SzwyMDQ4PzI6Szw2NTUzNj8zOjQ7Zm9yKFU9RC51aW50OGFycmF5P25ldyBVaW50OEFycmF5KF9lKTpuZXcg''@;'; put 'put ''QXJyYXkoX2UpLHNlPTAsbmU9MDtzZTxfZTtuZSsrKTU1Mjk2PT0oNjQ1MTImKEs9Wi5jaGFyQ29kZUF0KG5lKSkpJiZuZSsxPGhlJiY1NjMyMD09KDY0NTEyJihYPVouY2hhckNvZGVBdChuZSsxKSkpJiYoSz02NTUzNisoSy01NTI5Njw8MTApKyhYLTU2MzIwKSxuZSsrKSxLPDEyOD9VW3Nl''@;'; put 'put ''KytdPUs6SzwyMDQ4PyhVW3NlKytdPTE5MnxLPj4+NixVW3NlKytdPTEyOHw2MyZLKTpLPDY1NTM2PyhVW3NlKytdPTIyNHxLPj4+MTIsVVtzZSsrXT0xMjh8Sz4+PjYmNjMsVVtzZSsrXT0xMjh8NjMmSyk6KFVbc2UrK109MjQwfEs+Pj4xOCxVW3NlKytdPTEyOHxLPj4+MTImNjMsVVtzZSsr''@;'; put 'put ''XT0xMjh8Sz4+PjYmNjMsVVtzZSsrXT0xMjh8NjMmSyk7cmV0dXJuIFV9KFUpfSxNLnV0ZjhkZWNvZGU9ZnVuY3Rpb24oVSl7aWYoRC5ub2RlYnVmZmVyKXJldHVybiBPLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixVKS50b1N0cmluZygidXRmLTgiKTtmb3IodmFyIEs9W10sWD0wLG5lPShV''@;'; put 'put ''PU8udHJhbnNmb3JtVG8oRC51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLFUpKS5sZW5ndGg7WDxuZTspe3ZhciBoZT1IKFUsTWF0aC5taW4oWCs2NTUzNixuZSkpO0sucHVzaCh6KEQudWludDhhcnJheT9VLnN1YmFycmF5KFgsaGUpOlUuc2xpY2UoWCxoZSkpKSxYPWhlfXJldHVy''@;'; put 'put ''biBLLmpvaW4oIiIpfX0seyIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3LCIuL3V0aWxzIjoyMX1dLDIxOltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO3ZhciBPPVQoIi4vc3VwcG9ydCIpLEQ9VCgiLi9jb21wcmVzc2lvbnMiKSxFPVQoIi4vbm9kZUJ1ZmZlciIpO2Z1bmN0''@;'; put 'put ''aW9uIEIoWil7cmV0dXJuIFp9ZnVuY3Rpb24gRihaLFUpe2Zvcih2YXIgSz0wO0s8Wi5sZW5ndGg7KytLKVVbS109MjU1JlouY2hhckNvZGVBdChLKTtyZXR1cm4gVX1mdW5jdGlvbiBOKFope3ZhciBVPTY1NTM2LEs9W10sWD1aLmxlbmd0aCxuZT1NLmdldFR5cGVPZihaKSxzZT0wLGhlPSEw''@;'; put 'put ''O3RyeXtzd2l0Y2gobmUpe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxFKDApKX19Y2F0Y2h7aGU9ITF9aWYoIWhlKXtm''@;'; put 'put ''b3IodmFyIF9lPSIiLG1lPTA7bWU8Wi5sZW5ndGg7bWUrKylfZSs9U3RyaW5nLmZyb21DaGFyQ29kZShaW21lXSk7cmV0dXJuIF9lfWZvcig7c2U8WCYmVT4xOyl0cnl7Sy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwiYXJyYXkiPT09bmV8fCJub2RlYnVmZmVyIj09PW5l''@;'; put 'put ''P1ouc2xpY2Uoc2UsTWF0aC5taW4oc2UrVSxYKSk6Wi5zdWJhcnJheShzZSxNYXRoLm1pbihzZStVLFgpKSkpLHNlKz1VfWNhdGNoe1U9TWF0aC5mbG9vcihVLzIpfXJldHVybiBLLmpvaW4oIiIpfWZ1bmN0aW9uIEgoWixVKXtmb3IodmFyIEs9MDtLPFoubGVuZ3RoO0srKylVW0tdPVpbS107''@;'; put 'put ''cmV0dXJuIFV9TS5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKFope2Zvcih2YXIgVT0iIixLPTA7SzxaLmxlbmd0aDtLKyspVSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmWi5jaGFyQ29kZUF0KEspKTtyZXR1cm4gVX0sTS5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKFope00uY2hlY2tTdXBw''@;'; put 'put ''b3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbWl0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KX1jYXRjaHt0cnl7dmFyIEs9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JC''@;'; put 'put ''dWlsZGVyKTtyZXR1cm4gSy5hcHBlbmQoWiksSy5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fSxNLmFwcGx5RnJvbUNoYXJDb2RlPU47dmFyIHo9e307ei5zdHJpbmc9e3N0cmluZzpC''@;'; put 'put ''LGFycmF5OmZ1bmN0aW9uKFope3JldHVybiBGKFosbmV3IEFycmF5KFoubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKFope3JldHVybiB6LnN0cmluZy51aW50OGFycmF5KFopLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihaKXtyZXR1cm4gRihaLG5ldyBVaW50OEFycmF5KFou''@;'; put 'put ''bGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWil7cmV0dXJuIEYoWixFKFoubGVuZ3RoKSl9fSx6LmFycmF5PXtzdHJpbmc6TixhcnJheTpCLGFycmF5YnVmZmVyOmZ1bmN0aW9uKFope3JldHVybiBuZXcgVWludDhBcnJheShaKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oWil7''@;'; put 'put ''cmV0dXJuIG5ldyBVaW50OEFycmF5KFopfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFope3JldHVybiBFKFopfX0sei5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKFope3JldHVybiBOKG5ldyBVaW50OEFycmF5KFopKX0sYXJyYXk6ZnVuY3Rpb24oWil7cmV0dXJuIEgobmV3IFVpbnQ4QXJy''@;'; put 'put ''YXkoWiksbmV3IEFycmF5KFouYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpCLHVpbnQ4YXJyYXk6ZnVuY3Rpb24oWil7cmV0dXJuIG5ldyBVaW50OEFycmF5KFopfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFope3JldHVybiBFKG5ldyBVaW50OEFycmF5KFopKX19LHoudWludDhhcnJheT17c3Ry''@;'; put 'put ''aW5nOk4sYXJyYXk6ZnVuY3Rpb24oWil7cmV0dXJuIEgoWixuZXcgQXJyYXkoWi5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWil7cmV0dXJuIFouYnVmZmVyfSx1aW50OGFycmF5OkIsbm9kZWJ1ZmZlcjpmdW5jdGlvbihaKXtyZXR1cm4gRShaKX19LHoubm9kZWJ1ZmZlcj17c3Ry''@;'; put 'put ''aW5nOk4sYXJyYXk6ZnVuY3Rpb24oWil7cmV0dXJuIEgoWixuZXcgQXJyYXkoWi5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWil7cmV0dXJuIHoubm9kZWJ1ZmZlci51aW50OGFycmF5KFopLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihaKXtyZXR1cm4gSChaLG5ldyBVaW50''@;'; put 'put ''OEFycmF5KFoubGVuZ3RoKSl9LG5vZGVidWZmZXI6Qn0sTS50cmFuc2Zvcm1Ubz1mdW5jdGlvbihaLFUpe2lmKFV8fChVPSIiKSwhWilyZXR1cm4gVTtNLmNoZWNrU3VwcG9ydChaKTt2YXIgSz1NLmdldFR5cGVPZihVKTtyZXR1cm4geltLXVtaXShVKX0sTS5nZXRUeXBlT2Y9ZnVuY3Rpb24o''@;'; put 'put ''Wil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBaPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoWik/ImFycmF5IjpPLm5vZGVidWZmZXImJkUudGVzdChaKT8ibm9kZWJ1ZmZlciI6Ty51aW50OGFycmF5JiZaIGluc3RhbmNlb2YgVWlu''@;'; put 'put ''dDhBcnJheT8idWludDhhcnJheSI6Ty5hcnJheWJ1ZmZlciYmWiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6dm9pZCAwfSxNLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihaKXtpZighT1taLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihaKyIgaXMgbm90IHN1cHBv''@;'; put 'put ''cnRlZCBieSB0aGlzIGJyb3dzZXIiKX0sTS5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LE0uTUFYX1ZBTFVFXzMyQklUUz0tMSxNLnByZXR0eT1mdW5jdGlvbihaKXt2YXIgSyxYLFU9IiI7Zm9yKFg9MDtYPChafHwiIikubGVuZ3RoO1grKylVKz0iXFx4IisoKEs9Wi5jaGFyQ29kZUF0KFgpKTwx''@;'; put 'put ''Nj8iMCI6IiIpK0sudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIFV9LE0uZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKFope2Zvcih2YXIgVSBpbiBEKWlmKEQuaGFzT3duUHJvcGVydHkoVSkmJkRbVV0ubWFnaWM9PT1aKXJldHVybiBEW1VdO3JldHVybiBudWxsfSxNLmlzUmVn''@;'; put 'put ''RXhwPWZ1bmN0aW9uKFope3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFopfX0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBPPVQoIi4vc3RyaW5nUmVhZGVyIiksRD1UKCIuL25vZGVCdWZmZXJSZWFkZXIiKSxFPVQoIi4vdWludDhBcnJheVJlYWRlciIpLEI9VCgiLi91dGlscyIpLEY9VCgiLi9zaWduYXR1cmUiKSxOPVQoIi4vemlwRW50cnkiKSxIPVQoIi4vc3VwcG9ydCIpLHo9VCgiLi9vYmplY3QiKTtm''@;'; put 'put ''dW5jdGlvbiBaKFUsSyl7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPUssVSYmdGhpcy5sb2FkKFUpfVoucHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbihVKXt2YXIgSz10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO2lmKEshPT1VKXRocm93IG5ldyBFcnJvcigiQ29y''@;'; put 'put ''cnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoIitCLnByZXR0eShLKSsiLCBleHBlY3RlZCAiK0IucHJldHR5KFUpKyIpIil9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMu''@;'; put 'put ''ZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJT''@;'; put 'put ''aXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy56aXBDb21tZW50PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGhpcy56aXBD''@;'; put 'put ''b21tZW50TGVuZ3RoKSx0aGlzLnppcENvbW1lbnQ9ei51dGY4ZGVjb2RlKHRoaXMuemlwQ29tbWVudCl9LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnZlcnNpb25NYWRl''@;'; put 'put ''Qnk9dGhpcy5yZWFkZXIucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhp''@;'; put 'put ''cy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10''@;'; put 'put ''aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIFgsbmUsc2UsVT10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPFU7KVg9dGhpcy5yZWFkZXIucmVhZEludCgyKSxuZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHNlPXRoaXMucmVh''@;'; put 'put ''ZGVyLnJlYWRTdHJpbmcobmUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtYXT17aWQ6WCxsZW5ndGg6bmUsdmFsdWU6c2V9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFk''@;'; put 'put ''ZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMg''@;'; put 'put ''emlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIFUsSztmb3IoVT0wO1U8dGhpcy5maWxlcy5sZW5ndGg7VSsrKXRoaXMucmVhZGVyLnNldEluZGV4KChLPXRoaXMuZmlsZXNbVV0pLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0''@;'; put 'put ''dXJlKEYuTE9DQUxfRklMRV9IRUFERVIpLEsucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksSy5oYW5kbGVVVEY4KCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIFU7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVh''@;'; put 'put ''ZFN0cmluZyg0KT09PUYuQ0VOVFJBTF9GSUxFX0hFQURFUjspKFU9bmV3IE4oe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChVKX0scmVhZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciBV''@;'; put 'put ''PXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKEYuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtpZigtMT09PVUpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChV''@;'; put 'put ''KSx0aGlzLmNoZWNrU2lnbmF0dXJlKEYuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PUIuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PUIuTUFYX1ZBTFVFXzE2QklUU3x8''@;'; put 'put ''dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1CLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1CLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1CLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09''@;'; put 'put ''PUIuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwtMT09PShVPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKEYuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJ''@;'; put 'put ''UDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoVSksdGhpcy5jaGVja1NpZ25hdHVyZShGLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksdGhpcy5y''@;'; put 'put ''ZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKEYuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9fSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9u''@;'; put 'put ''KFUpe3ZhciBLPUIuZ2V0VHlwZU9mKFUpO3RoaXMucmVhZGVyPSJzdHJpbmciIT09S3x8SC51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PUs/bmV3IEQoVSk6bmV3IEUoQi50cmFuc2Zvcm1UbygidWludDhhcnJheSIsVSkpOm5ldyBPKFUsdGhpcy5sb2FkT3B0aW9ucy5vcHRpbWl6ZWRCaW5h''@;'; put 'put ''cnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKFUpe3RoaXMucHJlcGFyZVJlYWRlcihVKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sQS5leHBvcnRzPVp9LHsiLi9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmpl''@;'; put 'put ''Y3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjoxOCwiLi91dGlscyI6MjEsIi4vemlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89VCgiLi9zdHJpbmdS''@;'; put 'put ''ZWFkZXIiKSxEPVQoIi4vdXRpbHMiKSxFPVQoIi4vY29tcHJlc3NlZE9iamVjdCIpLEI9VCgiLi9vYmplY3QiKTtmdW5jdGlvbiBGKE4sSCl7dGhpcy5vcHRpb25zPU4sdGhpcy5sb2FkT3B0aW9ucz1IfUYucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiEoMSZ+dGhp''@;'; put 'put ''cy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiEoMjA0OCZ+dGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKE4sSCx6KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgWj1OLmluZGV4O04uc2V0SW5kZXgoSCk7dmFyIFU9Ti5yZWFkRGF0YSh6''@;'; put 'put ''KTtyZXR1cm4gTi5zZXRJbmRleChaKSxVfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oTixILHosWixVKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgSz1ELnRyYW5zZm9ybVRvKFoudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLFg9Wi51bmNvbXByZXNz''@;'; put 'put ''KEspO2lmKFgubGVuZ3RoIT09VSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTtyZXR1cm4gWH19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oTil7dmFyIEgsejtpZihOLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Ti5yZWFkSW50''@;'; put 'put ''KDIpLHo9Ti5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Ti5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLE4uc2tpcCh6KSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlw''@;'; put 'put ''IDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oSD1ELmZpbmRDb21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9k''@;'; put 'put ''KSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitELnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcgRSx0aGlzLmRlY29t''@;'; put 'put ''cHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25N''@;'; put 'put ''ZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChOLE4uaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxIKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMu''@;'; put 'put ''cHJlcGFyZUNvbnRlbnQoTixOLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsSCx0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPUQudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29u''@;'; put 'put ''dGVudCgpKSxCLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihOKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9Ti5yZWFkU3RyaW5nKDIp''@;'; put 'put ''LHRoaXMudmVyc2lvbk5lZWRlZD1OLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPU4ucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPU4ucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Ti5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9Ti5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9''@;'; put 'put ''Ti5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1OLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1OLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1OLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1OLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVt''@;'; put 'put ''YmVyU3RhcnQ9Ti5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1OLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPU4ucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PU4ucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1OLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoTiksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChOKSx0aGlzLmZpbGVDb21tZW50PU4u''@;'; put 'put ''cmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihOKXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgSD1uZXcgTyh0aGlzLmV4dHJhRmllbGRz''@;'; put 'put ''WzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1ELk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9SC5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09RC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1ILnJlYWRJbnQo''@;'; put 'put ''OCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1ELk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PUgucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1ELk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1ILnJlYWRJbnQoNCkp''@;'; put 'put ''fX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKE4pe3ZhciB6LFosVSxIPU4uaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307Ti5pbmRleDxIK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KXo9Ti5yZWFkSW50KDIpLFo9Ti5yZWFkSW50KDIpLFU9Ti5yZWFk''@;'; put 'put ''U3RyaW5nKFopLHRoaXMuZXh0cmFGaWVsZHNbel09e2lkOnosbGVuZ3RoOlosdmFsdWU6VX19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUIudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PUIudXRmOGRlY29k''@;'; put 'put ''ZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBOPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1OJiYodGhpcy5maWxlTmFtZT1OKTt2YXIgSD10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09SCYmKHRoaXMuZmlsZUNvbW1lbnQ9SCl9''@;'; put 'put ''fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoTil7dmFyIEg9bmV3IE8oTi52YWx1ZSk7cmV0dXJuIDEhPT1ILnJlYWRJbnQoMSl8fEIuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1ILnJlYWRJbnQoNCk/bnVsbDpC''@;'; put 'put ''LnV0ZjhkZWNvZGUoSC5yZWFkU3RyaW5nKE4ubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBOPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKE4pe3ZhciBIPW5ldyBPKE4udmFsdWUpO3JldHVybiAxIT09SC5yZWFk''@;'; put 'put ''SW50KDEpfHxCLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09SC5yZWFkSW50KDQpP251bGw6Qi51dGY4ZGVjb2RlKEgucmVhZFN0cmluZyhOLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxBLmV4cG9ydHM9Rn0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJp''@;'; put 'put ''bmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO3ZhciBGPXt9OygwLFQoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoRixUKCIuL2xpYi9kZWZsYXRlIiksVCgiLi9saWIvaW5mbGF0ZSIpLFQoIi4vbGliL3psaWIvY29uc3Rh''@;'; put 'put ''bnRzIikpLEEuZXhwb3J0cz1GfSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89VCgiLi96bGliL2RlZmxh''@;'; put 'put ''dGUuanMiKSxEPVQoIi4vdXRpbHMvY29tbW9uIiksRT1UKCIuL3V0aWxzL3N0cmluZ3MiKSxCPVQoIi4vemxpYi9tZXNzYWdlcyIpLEY9VCgiLi96bGliL3pzdHJlYW0iKSxuZT1mdW5jdGlvbihtZSl7dGhpcy5vcHRpb25zPUQuYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6''@;'; put 'put ''MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LG1lfHx7fSk7dmFyIEZlPXRoaXMub3B0aW9ucztGZS5yYXcmJkZlLndpbmRvd0JpdHM+MD9GZS53aW5kb3dCaXRzPS1GZS53aW5kb3dCaXRzOkZlLmd6aXAmJkZlLndpbmRvd0JpdHM+MCYmRmUud2luZG93''@;'; put 'put ''Qml0czwxNiYmKEZlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBGLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgUj1PLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sRmUubGV2ZWwsRmUubWV0''@;'; put 'put ''aG9kLEZlLndpbmRvd0JpdHMsRmUubWVtTGV2ZWwsRmUuc3RyYXRlZ3kpO2lmKDAhPT1SKXRocm93IG5ldyBFcnJvcihCW1JdKTtGZS5oZWFkZXImJk8uZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sRmUuaGVhZGVyKX07ZnVuY3Rpb24gc2UobWUsRmUpe3ZhciBSPW5ldyBuZShGZSk7aWYo''@;'; put 'put ''Ui5wdXNoKG1lLCEwKSxSLmVycil0aHJvdyBSLm1zZztyZXR1cm4gUi5yZXN1bHR9bmUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obWUsRmUpe3ZhciB1LHYsUj10aGlzLnN0cm0scz10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7dj1GZT09PX5+RmU/RmU6''@;'; put 'put ''ITA9PT1GZT80OjAsUi5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIG1lP0Uuc3RyaW5nMmJ1ZihtZSk6bWUsUi5uZXh0X2luPTAsUi5hdmFpbF9pbj1SLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09Ui5hdmFpbF9vdXQmJihSLm91dHB1dD1uZXcgRC5CdWY4KHMpLFIubmV4dF9vdXQ9MCxSLmF2YWls''@;'; put 'put ''X291dD1zKSwxIT09KHU9Ty5kZWZsYXRlKFIsdikpJiYwIT09dSlyZXR1cm4gdGhpcy5vbkVuZCh1KSx0aGlzLmVuZGVkPSEwLCExOygwPT09Ui5hdmFpbF9vdXR8fDA9PT1SLmF2YWlsX2luJiY0PT09dikmJnRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP0UuYnVmMmJp''@;'; put 'put ''bnN0cmluZyhELnNocmlua0J1ZihSLm91dHB1dCxSLm5leHRfb3V0KSk6RC5zaHJpbmtCdWYoUi5vdXRwdXQsUi5uZXh0X291dCkpfXdoaWxlKChSLmF2YWlsX2luPjB8fDA9PT1SLmF2YWlsX291dCkmJjEhPT11KTtyZXR1cm4gNCE9PXZ8fCh1PU8uZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRo''@;'; put 'put ''aXMub25FbmQodSksdGhpcy5lbmRlZD0hMCwwPT09dSl9LG5lLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24obWUpe3RoaXMuY2h1bmtzLnB1c2gobWUpfSxuZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24obWUpezA9PT1tZSYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25z''@;'; put 'put ''LnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkQuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPW1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LE0uRGVmbGF0ZT1uZSxNLmRlZmxhdGU9c2UsTS5kZWZsYXRlUmF3PWZ1bmN0aW9uIGhlKG1lLEZlKXty''@;'; put 'put ''ZXR1cm4oRmU9RmV8fHt9KS5yYXc9ITAsc2UobWUsRmUpfSxNLmd6aXA9ZnVuY3Rpb24gX2UobWUsRmUpe3JldHVybihGZT1GZXx8e30pLmd6aXA9ITAsc2UobWUsRmUpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwi''@;'; put 'put ''Li96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89VCgiLi96bGliL2luZmxhdGUuanMiKSxEPVQoIi4vdXRpbHMvY29tbW9uIiksRT1UKCIuL3V0aWxzL3N0cmluZ3MiKSxCPVQoIi4vemxpYi9jb25z''@;'; put 'put ''dGFudHMiKSxGPVQoIi4vemxpYi9tZXNzYWdlcyIpLE49VCgiLi96bGliL3pzdHJlYW0iKSxIPVQoIi4vemxpYi9nemhlYWRlciIpLHo9ZnVuY3Rpb24oSyl7dGhpcy5vcHRpb25zPUQuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxLfHx7fSk7dmFyIFg9dGhp''@;'; put 'put ''cy5vcHRpb25zO1gucmF3JiZYLndpbmRvd0JpdHM+PTAmJlgud2luZG93Qml0czwxNiYmKFgud2luZG93Qml0cz0tWC53aW5kb3dCaXRzLDA9PT1YLndpbmRvd0JpdHMmJihYLndpbmRvd0JpdHM9LTE1KSksWC53aW5kb3dCaXRzPj0wJiZYLndpbmRvd0JpdHM8MTYmJiEoSyYmSy53aW5kb3dC''@;'; put 'put ''aXRzKSYmKFgud2luZG93Qml0cys9MzIpLFgud2luZG93Qml0cz4xNSYmWC53aW5kb3dCaXRzPDQ4JiYhKDE1Jlgud2luZG93Qml0cykmJihYLndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBO''@;'; put 'put ''LHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbmU9Ty5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLFgud2luZG93Qml0cyk7aWYobmUhPT1CLlpfT0spdGhyb3cgbmV3IEVycm9yKEZbbmVdKTt0aGlzLmhlYWRlcj1uZXcgSCxPLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVy''@;'; put 'put ''KX07ZnVuY3Rpb24gWihLLFgpe3ZhciBuZT1uZXcgeihYKTtpZihuZS5wdXNoKEssITApLG5lLmVycil0aHJvdyBuZS5tc2c7cmV0dXJuIG5lLnJlc3VsdH16LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEssWCl7dmFyIGhlLF9lLG1lLEZlLFIsbmU9dGhpcy5zdHJtLHNlPXRoaXMub3B0aW9u''@;'; put 'put ''cy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtfZT1YPT09fn5YP1g6ITA9PT1YP0IuWl9GSU5JU0g6Qi5aX05PX0ZMVVNILG5lLmlucHV0PSJzdHJpbmciPT10eXBlb2YgSz9FLmJpbnN0cmluZzJidWYoSyk6SyxuZS5uZXh0X2luPTAsbmUuYXZhaWxfaW49bmUuaW5wdXQubGVu''@;'; put 'put ''Z3RoO2Rve2lmKDA9PT1uZS5hdmFpbF9vdXQmJihuZS5vdXRwdXQ9bmV3IEQuQnVmOChzZSksbmUubmV4dF9vdXQ9MCxuZS5hdmFpbF9vdXQ9c2UpLChoZT1PLmluZmxhdGUobmUsQi5aX05PX0ZMVVNIKSkhPT1CLlpfU1RSRUFNX0VORCYmaGUhPT1CLlpfT0spcmV0dXJuIHRoaXMub25FbmQo''@;'; put 'put ''aGUpLHRoaXMuZW5kZWQ9ITAsITE7bmUubmV4dF9vdXQmJigwPT09bmUuYXZhaWxfb3V0fHxoZT09PUIuWl9TVFJFQU1fRU5EfHwwPT09bmUuYXZhaWxfaW4mJl9lPT09Qi5aX0ZJTklTSCkmJigic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz8obWU9RS51dGY4Ym9yZGVyKG5lLm91dHB1dCxu''@;'; put 'put ''ZS5uZXh0X291dCksRmU9bmUubmV4dF9vdXQtbWUsUj1FLmJ1ZjJzdHJpbmcobmUub3V0cHV0LG1lKSxuZS5uZXh0X291dD1GZSxuZS5hdmFpbF9vdXQ9c2UtRmUsRmUmJkQuYXJyYXlTZXQobmUub3V0cHV0LG5lLm91dHB1dCxtZSxGZSwwKSx0aGlzLm9uRGF0YShSKSk6dGhpcy5vbkRhdGEo''@;'; put 'put ''RC5zaHJpbmtCdWYobmUub3V0cHV0LG5lLm5leHRfb3V0KSkpfXdoaWxlKG5lLmF2YWlsX2luPjAmJmhlIT09Qi5aX1NUUkVBTV9FTkQpO3JldHVybiBoZT09PUIuWl9TVFJFQU1fRU5EJiYoX2U9Qi5aX0ZJTklTSCksX2UhPT1CLlpfRklOSVNIfHwoaGU9Ty5pbmZsYXRlRW5kKHRoaXMuc3Ry''@;'; put 'put ''bSksdGhpcy5vbkVuZChoZSksdGhpcy5lbmRlZD0hMCxoZT09PUIuWl9PSyl9LHoucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihLKXt0aGlzLmNodW5rcy5wdXNoKEspfSx6LnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihLKXtLPT09Qi5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10''@;'; put 'put ''aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6RC5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9Syx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxNLkluZmxhdGU9eixNLmluZmxhdGU9WixNLmluZmxhdGVSYXc9ZnVuY3Rpb24gVShL''@;'; put 'put ''LFgpe3JldHVybihYPVh8fHt9KS5yYXc9ITAsWihLLFgpfSxNLnVuZ3ppcD1afSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21l''@;'; put 'put ''c3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7TS5hc3NpZ249ZnVuY3Rpb24oQil7Zm9y''@;'; put 'put ''KHZhciBGPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtGLmxlbmd0aDspe3ZhciBOPUYuc2hpZnQoKTtpZihOKXtpZigib2JqZWN0IiE9dHlwZW9mIE4pdGhyb3cgbmV3IFR5cGVFcnJvcihOKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIEggaW4gTilOLmhh''@;'; put 'put ''c093blByb3BlcnR5KEgpJiYoQltIXT1OW0hdKX19cmV0dXJuIEJ9LE0uc2hyaW5rQnVmPWZ1bmN0aW9uKEIsRil7cmV0dXJuIEIubGVuZ3RoPT09Rj9COkIuc3ViYXJyYXk/Qi5zdWJhcnJheSgwLEYpOihCLmxlbmd0aD1GLEIpfTt2YXIgRD17YXJyYXlTZXQ6ZnVuY3Rpb24oQixGLE4sSCx6''@;'; put 'put ''KXtpZihGLnN1YmFycmF5JiZCLnN1YmFycmF5KUIuc2V0KEYuc3ViYXJyYXkoTixOK0gpLHopO2Vsc2UgZm9yKHZhciBaPTA7WjxIO1orKylCW3orWl09RltOK1pdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEIpe3ZhciBGLE4sSCx6LFosVTtmb3IoSD0wLEY9MCxOPUIubGVuZ3RoO0Y8TjtG''@;'; put 'put ''KyspSCs9QltGXS5sZW5ndGg7Zm9yKFU9bmV3IFVpbnQ4QXJyYXkoSCksej0wLEY9MCxOPUIubGVuZ3RoO0Y8TjtGKyspVS5zZXQoWj1CW0ZdLHopLHorPVoubGVuZ3RoO3JldHVybiBVfX0sRT17YXJyYXlTZXQ6ZnVuY3Rpb24oQixGLE4sSCx6KXtmb3IodmFyIFo9MDtaPEg7WisrKUJbeita''@;'; put 'put ''XT1GW04rWl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oQil7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLEIpfX07TS5zZXRUeXBlZD1mdW5jdGlvbihCKXtCPyhNLkJ1Zjg9VWludDhBcnJheSxNLkJ1ZjE2PVVpbnQxNkFycmF5LE0uQnVmMzI9SW50MzJBcnJheSxNLmFzc2lnbihNLEQpKToo''@;'; put 'put ''TS5CdWY4PUFycmF5LE0uQnVmMTY9QXJyYXksTS5CdWYzMj1BcnJheSxNLmFzc2lnbihNLEUpKX0sTS5zZXRUeXBlZChPKX0se31dLDI4OltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO3ZhciBPPVQoIi4vY29tbW9uIiksRD0hMCxFPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFw''@;'; put 'put ''cGx5KG51bGwsWzBdKX1jYXRjaHtEPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoe0U9ITF9Zm9yKHZhciBCPW5ldyBPLkJ1ZjgoMjU2KSxGPTA7RjwyNTY7RisrKUJbRl09Rj49MjUyPzY6Rj49MjQ4PzU6Rj49MjQwPzQ6Rj49''@;'; put 'put ''MjI0PzM6Rj49MTkyPzI6MTtmdW5jdGlvbiBOKEgseil7aWYoejw2NTUzNyYmKEguc3ViYXJyYXkmJkV8fCFILnN1YmFycmF5JiZEKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLE8uc2hyaW5rQnVmKEgseikpO2Zvcih2YXIgWj0iIixVPTA7VTx6O1UrKylaKz1TdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlKEhbVV0pO3JldHVybiBafUJbMjU0XT1CWzI1NF09MSxNLnN0cmluZzJidWY9ZnVuY3Rpb24oSCl7dmFyIHosWixVLEssWCxuZT1ILmxlbmd0aCxzZT0wO2ZvcihLPTA7SzxuZTtLKyspNTUyOTY9PSg2NDUxMiYoWj1ILmNoYXJDb2RlQXQoSykpKSYmSysxPG5lJiY1''@;'; put 'put ''NjMyMD09KDY0NTEyJihVPUguY2hhckNvZGVBdChLKzEpKSkmJihaPTY1NTM2KyhaLTU1Mjk2PDwxMCkrKFUtNTYzMjApLEsrKyksc2UrPVo8MTI4PzE6WjwyMDQ4PzI6Wjw2NTUzNj8zOjQ7Zm9yKHo9bmV3IE8uQnVmOChzZSksWD0wLEs9MDtYPHNlO0srKyk1NTI5Nj09KDY0NTEyJihaPUgu''@;'; put 'put ''Y2hhckNvZGVBdChLKSkpJiZLKzE8bmUmJjU2MzIwPT0oNjQ1MTImKFU9SC5jaGFyQ29kZUF0KEsrMSkpKSYmKFo9NjU1MzYrKFotNTUyOTY8PDEwKSsoVS01NjMyMCksSysrKSxaPDEyOD96W1grK109WjpaPDIwNDg/KHpbWCsrXT0xOTJ8Wj4+PjYseltYKytdPTEyOHw2MyZaKTpaPDY1NTM2''@;'; put 'put ''Pyh6W1grK109MjI0fFo+Pj4xMix6W1grK109MTI4fFo+Pj42JjYzLHpbWCsrXT0xMjh8NjMmWik6KHpbWCsrXT0yNDB8Wj4+PjE4LHpbWCsrXT0xMjh8Wj4+PjEyJjYzLHpbWCsrXT0xMjh8Wj4+PjYmNjMseltYKytdPTEyOHw2MyZaKTtyZXR1cm4gen0sTS5idWYyYmluc3RyaW5nPWZ1bmN0''@;'; put 'put ''aW9uKEgpe3JldHVybiBOKEgsSC5sZW5ndGgpfSxNLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oSCl7Zm9yKHZhciB6PW5ldyBPLkJ1ZjgoSC5sZW5ndGgpLFo9MCxVPXoubGVuZ3RoO1o8VTtaKyspeltaXT1ILmNoYXJDb2RlQXQoWik7cmV0dXJuIHp9LE0uYnVmMnN0cmluZz1mdW5jdGlvbihI''@;'; put 'put ''LHope3ZhciBaLFUsSyxYLG5lPXp8fEgubGVuZ3RoLHNlPW5ldyBBcnJheSgyKm5lKTtmb3IoVT0wLFo9MDtaPG5lOylpZigoSz1IW1orK10pPDEyOClzZVtVKytdPUs7ZWxzZSBpZigoWD1CW0tdKT40KXNlW1UrK109NjU1MzMsWis9WC0xO2Vsc2V7Zm9yKEsmPTI9PT1YPzMxOjM9PT1YPzE1''@;'; put 'put ''Ojc7WD4xJiZaPG5lOylLPUs8PDZ8NjMmSFtaKytdLFgtLTtYPjE/c2VbVSsrXT02NTUzMzpLPDY1NTM2P3NlW1UrK109Szooc2VbVSsrXT01NTI5NnwoSy09NjU1MzYpPj4xMCYxMDIzLHNlW1UrK109NTYzMjB8MTAyMyZLKX1yZXR1cm4gTihzZSxVKX0sTS51dGY4Ym9yZGVyPWZ1bmN0aW9u''@;'; put 'put ''KEgseil7dmFyIFo7Zm9yKCh6PXp8fEgubGVuZ3RoKT5ILmxlbmd0aCYmKHo9SC5sZW5ndGgpLFo9ei0xO1o+PTAmJjEyOD09KDE5MiZIW1pdKTspWi0tO3JldHVybiBaPDB8fDA9PT1aP3o6WitCW0hbWl1dPno/Wjp6fX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVuY3Rpb24oVCxBLE0peyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtBLmV4cG9ydHM9ZnVuY3Rpb24gTyhELEUsQixGKXtmb3IodmFyIE49NjU1MzUmRCxIPUQ+Pj4xNiY2NTUzNSx6PTA7MCE9PUI7KXtCLT16PUI+MmUzPzJlMzpCO2Rve0g9SCsoTj1OK0VbRisrXXwwKXwwfXdoaWxlKC0teik7TiU9NjU1MjEsSCU9NjU1MjF9cmV0dXJuIE58''@;'; put 'put ''SDw8MTZ9fSx7fV0sMzA6W2Z1bmN0aW9uKFQsQSxNKXtBLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9E''@;'; put 'put ''SUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZG''@;'; put 'put ''TUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSwzMTpbZnVuY3Rpb24oVCxBLE0peyJ1c2Ugc3RyaWN0Ijt2YXIgRD1mdW5jdGlvbiBPKCl7Zm9yKHZhciBCLEY9''@;'; put 'put ''W10sTj0wO048MjU2O04rKyl7Qj1OO2Zvcih2YXIgSD0wO0g8ODtIKyspQj0xJkI/Mzk4ODI5MjM4NF5CPj4+MTpCPj4+MTtGW05dPUJ9cmV0dXJuIEZ9KCk7QS5leHBvcnRzPWZ1bmN0aW9uIEUoQixGLE4sSCl7dmFyIHo9RCxaPUgrTjtCPX5CO2Zvcih2YXIgVT1IO1U8WjtVKyspQj1CPj4+''@;'; put 'put ''OF56WzI1NSYoQl5GW1VdKV07cmV0dXJufkJ9fSx7fV0sMzI6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89VCgiLi4vdXRpbHMvY29tbW9uIiksRD1UKCIuL3RyZWVzIiksRT1UKCIuL2FkbGVyMzIiKSxCPVQoIi4vY3JjMzIiKSxGPVQoIi4vbWVzc2FnZXMiKSxxZT0yNjI7''@;'; put 'put ''ZnVuY3Rpb24gWWUoTmUseXQpe3JldHVybiBOZS5tc2c9Rlt5dF0seXR9ZnVuY3Rpb24gcXQoTmUpe3JldHVybihOZTw8MSktKE5lPjQ/OTowKX1mdW5jdGlvbiBodChOZSl7Zm9yKHZhciB5dD1OZS5sZW5ndGg7LS15dD49MDspTmVbeXRdPTB9ZnVuY3Rpb24gdnQoTmUpe3ZhciB5dD1OZS5z''@;'; put 'put ''dGF0ZSxycj15dC5wZW5kaW5nO3JyPk5lLmF2YWlsX291dCYmKHJyPU5lLmF2YWlsX291dCksMCE9PXJyJiYoTy5hcnJheVNldChOZS5vdXRwdXQseXQucGVuZGluZ19idWYseXQucGVuZGluZ19vdXQscnIsTmUubmV4dF9vdXQpLE5lLm5leHRfb3V0Kz1ycix5dC5wZW5kaW5nX291dCs9cnIs''@;'; put 'put ''TmUudG90YWxfb3V0Kz1ycixOZS5hdmFpbF9vdXQtPXJyLHl0LnBlbmRpbmctPXJyLDA9PT15dC5wZW5kaW5nJiYoeXQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIFl0KE5lLHl0KXtELl90cl9mbHVzaF9ibG9jayhOZSxOZS5ibG9ja19zdGFydD49MD9OZS5ibG9ja19zdGFydDotMSxOZS5z''@;'; put 'put ''dHJzdGFydC1OZS5ibG9ja19zdGFydCx5dCksTmUuYmxvY2tfc3RhcnQ9TmUuc3Ryc3RhcnQsdnQoTmUuc3RybSl9ZnVuY3Rpb24gdHQoTmUseXQpe05lLnBlbmRpbmdfYnVmW05lLnBlbmRpbmcrK109eXR9ZnVuY3Rpb24gVWUoTmUseXQpe05lLnBlbmRpbmdfYnVmW05lLnBlbmRpbmcrK109''@;'; put 'put ''eXQ+Pj44JjI1NSxOZS5wZW5kaW5nX2J1ZltOZS5wZW5kaW5nKytdPTI1NSZ5dH1mdW5jdGlvbiAkZShOZSx5dCxycixhdCl7dmFyIF90PU5lLmF2YWlsX2luO3JldHVybiBfdD5hdCYmKF90PWF0KSwwPT09X3Q/MDooTmUuYXZhaWxfaW4tPV90LE8uYXJyYXlTZXQoeXQsTmUuaW5wdXQsTmUu''@;'; put 'put ''bmV4dF9pbixfdCxyciksMT09PU5lLnN0YXRlLndyYXA/TmUuYWRsZXI9RShOZS5hZGxlcix5dCxfdCxycik6Mj09PU5lLnN0YXRlLndyYXAmJihOZS5hZGxlcj1CKE5lLmFkbGVyLHl0LF90LHJyKSksTmUubmV4dF9pbis9X3QsTmUudG90YWxfaW4rPV90LF90KX1mdW5jdGlvbiBMZShOZSx5''@;'; put 'put ''dCl7dmFyIF90LHduLHJyPU5lLm1heF9jaGFpbl9sZW5ndGgsYXQ9TmUuc3Ryc3RhcnQsJHQ9TmUucHJldl9sZW5ndGgsSHQ9TmUubmljZV9tYXRjaCxzaT1OZS5zdHJzdGFydD5OZS53X3NpemUtcWU/TmUuc3Ryc3RhcnQtKE5lLndfc2l6ZS1xZSk6MCxubj1OZS53aW5kb3csbG49TmUud19t''@;'; put 'put ''YXNrLGtpPU5lLnByZXYsYW49TmUuc3Ryc3RhcnQrMjU4LEd0PW5uW2F0KyR0LTFdLGVhPW5uW2F0KyR0XTtOZS5wcmV2X2xlbmd0aD49TmUuZ29vZF9tYXRjaCYmKHJyPj49MiksSHQ+TmUubG9va2FoZWFkJiYoSHQ9TmUubG9va2FoZWFkKTtkb3tpZihublsoX3Q9eXQpKyR0XT09PWVhJiZu''@;'; put 'put ''bltfdCskdC0xXT09PUd0JiZubltfdF09PT1ublthdF0mJm5uWysrX3RdPT09bm5bYXQrMV0pe2F0Kz0yLF90Kys7ZG97fXdoaWxlKG5uWysrYXRdPT09bm5bKytfdF0mJm5uWysrYXRdPT09bm5bKytfdF0mJm5uWysrYXRdPT09bm5bKytfdF0mJm5uWysrYXRdPT09bm5bKytfdF0mJm5uWysr''@;'; put 'put ''YXRdPT09bm5bKytfdF0mJm5uWysrYXRdPT09bm5bKytfdF0mJm5uWysrYXRdPT09bm5bKytfdF0mJm5uWysrYXRdPT09bm5bKytfdF0mJmF0PGFuKTtpZih3bj0yNTgtKGFuLWF0KSxhdD1hbi0yNTgsd24+JHQpe2lmKE5lLm1hdGNoX3N0YXJ0PXl0LCR0PXduLHduPj1IdClicmVhaztHdD1u''@;'; put 'put ''blthdCskdC0xXSxlYT1ublthdCskdF19fX13aGlsZSgoeXQ9a2lbeXQmbG5dKT5zaSYmMCE9LS1ycik7cmV0dXJuICR0PD1OZS5sb29rYWhlYWQ/JHQ6TmUubG9va2FoZWFkfWZ1bmN0aW9uIG50KE5lKXt2YXIgcnIsYXQsX3Qsd24sJHQseXQ9TmUud19zaXplO2Rve2lmKHduPU5lLndpbmRv''@;'; put 'put ''d19zaXplLU5lLmxvb2thaGVhZC1OZS5zdHJzdGFydCxOZS5zdHJzdGFydD49eXQrKHl0LXFlKSl7Ty5hcnJheVNldChOZS53aW5kb3csTmUud2luZG93LHl0LHl0LDApLE5lLm1hdGNoX3N0YXJ0LT15dCxOZS5zdHJzdGFydC09eXQsTmUuYmxvY2tfc3RhcnQtPXl0LHJyPWF0PU5lLmhhc2hf''@;'; put 'put ''c2l6ZTtkb3tfdD1OZS5oZWFkWy0tcnJdLE5lLmhlYWRbcnJdPV90Pj15dD9fdC15dDowfXdoaWxlKC0tYXQpO3JyPWF0PXl0O2Rve190PU5lLnByZXZbLS1ycl0sTmUucHJldltycl09X3Q+PXl0P190LXl0OjB9d2hpbGUoLS1hdCk7d24rPXl0fWlmKDA9PT1OZS5zdHJtLmF2YWlsX2luKWJy''@;'; put 'put ''ZWFrO2lmKGF0PSRlKE5lLnN0cm0sTmUud2luZG93LE5lLnN0cnN0YXJ0K05lLmxvb2thaGVhZCx3biksTmUubG9va2FoZWFkKz1hdCxOZS5sb29rYWhlYWQrTmUuaW5zZXJ0Pj0zKWZvcihOZS5pbnNfaD1OZS53aW5kb3dbJHQ9TmUuc3Ryc3RhcnQtTmUuaW5zZXJ0XSxOZS5pbnNfaD0oTmUu''@;'; put 'put ''aW5zX2g8PE5lLmhhc2hfc2hpZnReTmUud2luZG93WyR0KzFdKSZOZS5oYXNoX21hc2s7TmUuaW5zZXJ0JiYoTmUuaW5zX2g9KE5lLmluc19oPDxOZS5oYXNoX3NoaWZ0Xk5lLndpbmRvd1skdCszLTFdKSZOZS5oYXNoX21hc2ssTmUucHJldlskdCZOZS53X21hc2tdPU5lLmhlYWRbTmUuaW5z''@;'; put 'put ''X2hdLE5lLmhlYWRbTmUuaW5zX2hdPSR0LCR0KyssTmUuaW5zZXJ0LS0sIShOZS5sb29rYWhlYWQrTmUuaW5zZXJ0PDMpKTspO313aGlsZShOZS5sb29rYWhlYWQ8cWUmJjAhPT1OZS5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiB4dChOZSx5dCl7Zm9yKHZhciBycixhdDs7KXtpZihOZS5sb29r''@;'; put 'put ''YWhlYWQ8cWUpe2lmKG50KE5lKSxOZS5sb29rYWhlYWQ8cWUmJjA9PT15dClyZXR1cm4gMTtpZigwPT09TmUubG9va2FoZWFkKWJyZWFrfWlmKHJyPTAsTmUubG9va2FoZWFkPj0zJiYoTmUuaW5zX2g9KE5lLmluc19oPDxOZS5oYXNoX3NoaWZ0Xk5lLndpbmRvd1tOZS5zdHJzdGFydCszLTFd''@;'; put 'put ''KSZOZS5oYXNoX21hc2sscnI9TmUucHJldltOZS5zdHJzdGFydCZOZS53X21hc2tdPU5lLmhlYWRbTmUuaW5zX2hdLE5lLmhlYWRbTmUuaW5zX2hdPU5lLnN0cnN0YXJ0KSwwIT09cnImJk5lLnN0cnN0YXJ0LXJyPD1OZS53X3NpemUtcWUmJihOZS5tYXRjaF9sZW5ndGg9TGUoTmUscnIpKSxO''@;'; put 'put ''ZS5tYXRjaF9sZW5ndGg+PTMpaWYoYXQ9RC5fdHJfdGFsbHkoTmUsTmUuc3Ryc3RhcnQtTmUubWF0Y2hfc3RhcnQsTmUubWF0Y2hfbGVuZ3RoLTMpLE5lLmxvb2thaGVhZC09TmUubWF0Y2hfbGVuZ3RoLE5lLm1hdGNoX2xlbmd0aDw9TmUubWF4X2xhenlfbWF0Y2gmJk5lLmxvb2thaGVhZD49''@;'; put 'put ''Myl7TmUubWF0Y2hfbGVuZ3RoLS07ZG97TmUuc3Ryc3RhcnQrKyxOZS5pbnNfaD0oTmUuaW5zX2g8PE5lLmhhc2hfc2hpZnReTmUud2luZG93W05lLnN0cnN0YXJ0KzMtMV0pJk5lLmhhc2hfbWFzayxycj1OZS5wcmV2W05lLnN0cnN0YXJ0Jk5lLndfbWFza109TmUuaGVhZFtOZS5pbnNfaF0s''@;'; put 'put ''TmUuaGVhZFtOZS5pbnNfaF09TmUuc3Ryc3RhcnR9d2hpbGUoMCE9LS1OZS5tYXRjaF9sZW5ndGgpO05lLnN0cnN0YXJ0Kyt9ZWxzZSBOZS5zdHJzdGFydCs9TmUubWF0Y2hfbGVuZ3RoLE5lLm1hdGNoX2xlbmd0aD0wLE5lLmluc19oPU5lLndpbmRvd1tOZS5zdHJzdGFydF0sTmUuaW5zX2g9''@;'; put 'put ''KE5lLmluc19oPDxOZS5oYXNoX3NoaWZ0Xk5lLndpbmRvd1tOZS5zdHJzdGFydCsxXSkmTmUuaGFzaF9tYXNrO2Vsc2UgYXQ9RC5fdHJfdGFsbHkoTmUsMCxOZS53aW5kb3dbTmUuc3Ryc3RhcnRdKSxOZS5sb29rYWhlYWQtLSxOZS5zdHJzdGFydCsrO2lmKGF0JiYoWXQoTmUsITEpLDA9PT1O''@;'; put 'put ''ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIE5lLmluc2VydD1OZS5zdHJzdGFydDwyP05lLnN0cnN0YXJ0OjIsND09PXl0PyhZdChOZSwhMCksMD09PU5lLnN0cm0uYXZhaWxfb3V0PzM6NCk6TmUubGFzdF9saXQmJihZdChOZSwhMSksMD09PU5lLnN0cm0uYXZhaWxfb3V0KT8x''@;'; put 'put ''OjJ9ZnVuY3Rpb24gVHQoTmUseXQpe2Zvcih2YXIgcnIsYXQsX3Q7Oyl7aWYoTmUubG9va2FoZWFkPHFlKXtpZihudChOZSksTmUubG9va2FoZWFkPHFlJiYwPT09eXQpcmV0dXJuIDE7aWYoMD09PU5lLmxvb2thaGVhZClicmVha31pZihycj0wLE5lLmxvb2thaGVhZD49MyYmKE5lLmluc19o''@;'; put 'put ''PShOZS5pbnNfaDw8TmUuaGFzaF9zaGlmdF5OZS53aW5kb3dbTmUuc3Ryc3RhcnQrMy0xXSkmTmUuaGFzaF9tYXNrLHJyPU5lLnByZXZbTmUuc3Ryc3RhcnQmTmUud19tYXNrXT1OZS5oZWFkW05lLmluc19oXSxOZS5oZWFkW05lLmluc19oXT1OZS5zdHJzdGFydCksTmUucHJldl9sZW5ndGg9''@;'; put 'put ''TmUubWF0Y2hfbGVuZ3RoLE5lLnByZXZfbWF0Y2g9TmUubWF0Y2hfc3RhcnQsTmUubWF0Y2hfbGVuZ3RoPTIsMCE9PXJyJiZOZS5wcmV2X2xlbmd0aDxOZS5tYXhfbGF6eV9tYXRjaCYmTmUuc3Ryc3RhcnQtcnI8PU5lLndfc2l6ZS1xZSYmKE5lLm1hdGNoX2xlbmd0aD1MZShOZSxyciksTmUu''@;'; put 'put ''bWF0Y2hfbGVuZ3RoPD01JiYoMT09PU5lLnN0cmF0ZWd5fHwzPT09TmUubWF0Y2hfbGVuZ3RoJiZOZS5zdHJzdGFydC1OZS5tYXRjaF9zdGFydD40MDk2KSYmKE5lLm1hdGNoX2xlbmd0aD0yKSksTmUucHJldl9sZW5ndGg+PTMmJk5lLm1hdGNoX2xlbmd0aDw9TmUucHJldl9sZW5ndGgpe190''@;'; put 'put ''PU5lLnN0cnN0YXJ0K05lLmxvb2thaGVhZC0zLGF0PUQuX3RyX3RhbGx5KE5lLE5lLnN0cnN0YXJ0LTEtTmUucHJldl9tYXRjaCxOZS5wcmV2X2xlbmd0aC0zKSxOZS5sb29rYWhlYWQtPU5lLnByZXZfbGVuZ3RoLTEsTmUucHJldl9sZW5ndGgtPTI7ZG97KytOZS5zdHJzdGFydDw9X3QmJihO''@;'; put 'put ''ZS5pbnNfaD0oTmUuaW5zX2g8PE5lLmhhc2hfc2hpZnReTmUud2luZG93W05lLnN0cnN0YXJ0KzMtMV0pJk5lLmhhc2hfbWFzayxycj1OZS5wcmV2W05lLnN0cnN0YXJ0Jk5lLndfbWFza109TmUuaGVhZFtOZS5pbnNfaF0sTmUuaGVhZFtOZS5pbnNfaF09TmUuc3Ryc3RhcnQpfXdoaWxlKDAh''@;'; put 'put ''PS0tTmUucHJldl9sZW5ndGgpO2lmKE5lLm1hdGNoX2F2YWlsYWJsZT0wLE5lLm1hdGNoX2xlbmd0aD0yLE5lLnN0cnN0YXJ0KyssYXQmJihZdChOZSwhMSksMD09PU5lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlmKE5lLm1hdGNoX2F2YWlsYWJsZSl7aWYoKGF0PUQuX3RyX3Rh''@;'; put 'put ''bGx5KE5lLDAsTmUud2luZG93W05lLnN0cnN0YXJ0LTFdKSkmJll0KE5lLCExKSxOZS5zdHJzdGFydCsrLE5lLmxvb2thaGVhZC0tLDA9PT1OZS5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIE5lLm1hdGNoX2F2YWlsYWJsZT0xLE5lLnN0cnN0YXJ0KyssTmUubG9va2FoZWFkLS19cmV0''@;'; put 'put ''dXJuIE5lLm1hdGNoX2F2YWlsYWJsZSYmKGF0PUQuX3RyX3RhbGx5KE5lLDAsTmUud2luZG93W05lLnN0cnN0YXJ0LTFdKSxOZS5tYXRjaF9hdmFpbGFibGU9MCksTmUuaW5zZXJ0PU5lLnN0cnN0YXJ0PDI/TmUuc3Ryc3RhcnQ6Miw0PT09eXQ/KFl0KE5lLCEwKSwwPT09TmUuc3RybS5hdmFp''@;'; put 'put ''bF9vdXQ/Mzo0KTpOZS5sYXN0X2xpdCYmKFl0KE5lLCExKSwwPT09TmUuc3RybS5hdmFpbF9vdXQpPzE6Mn12YXIgWHIsUXQ9ZnVuY3Rpb24oTmUseXQscnIsYXQsX3Qpe3RoaXMuZ29vZF9sZW5ndGg9TmUsdGhpcy5tYXhfbGF6eT15dCx0aGlzLm5pY2VfbGVuZ3RoPXJyLHRoaXMubWF4X2No''@;'; put 'put ''YWluPWF0LHRoaXMuZnVuYz1fdH07ZnVuY3Rpb24gaXQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhl''@;'; put 'put ''YWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD04LHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0''@;'; put 'put ''aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlz''@;'; put 'put ''LnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMu''@;'; put 'put ''bmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBPLkJ1ZjE2KDExNDYpLHRoaXMuZHluX2R0cmVlPW5ldyBPLkJ1ZjE2KDEyMiksdGhpcy5ibF90cmVlPW5ldyBPLkJ1ZjE2KDc4KSxodCh0aGlzLmR5bl9sdHJlZSksaHQodGhpcy5keW5fZHRyZWUpLGh0KHRoaXMuYmxfdHJlZSksdGhp''@;'; put 'put ''cy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IE8uQnVmMTYoMTYpLHRoaXMuaGVhcD1uZXcgTy5CdWYxNig1NzMpLGh0KHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5l''@;'; put 'put ''dyBPLkJ1ZjE2KDU3MyksaHQodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9''@;'; put 'put ''MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gQ3IoTmUpe3ZhciB5dDtyZXR1cm4gTmUmJk5lLnN0YXRlPyhOZS50b3RhbF9pbj1OZS50b3RhbF9vdXQ9MCxOZS5kYXRhX3R5cGU9MiwoeXQ9TmUuc3RhdGUpLnBlbmRpbmc9MCx5dC5wZW5kaW5nX291dD0wLHl0LndyYXA8MCYmKHl0LndyYXA9''@;'; put 'put ''LXl0LndyYXApLHl0LnN0YXR1cz15dC53cmFwPzQyOjExMyxOZS5hZGxlcj0yPT09eXQud3JhcD8wOjEseXQubGFzdF9mbHVzaD0wLEQuX3RyX2luaXQoeXQpLDApOlllKE5lLC0yKX1mdW5jdGlvbiBMdChOZSl7dmFyIHl0PUNyKE5lKTtyZXR1cm4gMD09PXl0JiZmdW5jdGlvbiBzbihOZSl7''@;'; put 'put ''TmUud2luZG93X3NpemU9MipOZS53X3NpemUsaHQoTmUuaGVhZCksTmUubWF4X2xhenlfbWF0Y2g9WHJbTmUubGV2ZWxdLm1heF9sYXp5LE5lLmdvb2RfbWF0Y2g9WHJbTmUubGV2ZWxdLmdvb2RfbGVuZ3RoLE5lLm5pY2VfbWF0Y2g9WHJbTmUubGV2ZWxdLm5pY2VfbGVuZ3RoLE5lLm1heF9j''@;'; put 'put ''aGFpbl9sZW5ndGg9WHJbTmUubGV2ZWxdLm1heF9jaGFpbixOZS5zdHJzdGFydD0wLE5lLmJsb2NrX3N0YXJ0PTAsTmUubG9va2FoZWFkPTAsTmUuaW5zZXJ0PTAsTmUubWF0Y2hfbGVuZ3RoPU5lLnByZXZfbGVuZ3RoPTIsTmUubWF0Y2hfYXZhaWxhYmxlPTAsTmUuaW5zX2g9MH0oTmUuc3Rh''@;'; put 'put ''dGUpLHl0fWZ1bmN0aW9uIFJuKE5lLHl0LHJyLGF0LF90LHduKXtpZighTmUpcmV0dXJuLTI7dmFyICR0PTE7aWYoLTE9PT15dCYmKHl0PTYpLGF0PDA/KCR0PTAsYXQ9LWF0KTphdD4xNSYmKCR0PTIsYXQtPTE2KSxfdDwxfHxfdD45fHw4IT09cnJ8fGF0PDh8fGF0PjE1fHx5dDwwfHx5dD45''@;'; put 'put ''fHx3bjwwfHx3bj40KXJldHVybiBZZShOZSwtMik7OD09PWF0JiYoYXQ9OSk7dmFyIEh0PW5ldyBpdDtyZXR1cm4gTmUuc3RhdGU9SHQsSHQuc3RybT1OZSxIdC53cmFwPSR0LEh0Lmd6aGVhZD1udWxsLEh0LndfYml0cz1hdCxIdC53X3NpemU9MTw8SHQud19iaXRzLEh0LndfbWFzaz1IdC53''@;'; put 'put ''X3NpemUtMSxIdC5oYXNoX2JpdHM9X3QrNyxIdC5oYXNoX3NpemU9MTw8SHQuaGFzaF9iaXRzLEh0Lmhhc2hfbWFzaz1IdC5oYXNoX3NpemUtMSxIdC5oYXNoX3NoaWZ0PX5+KChIdC5oYXNoX2JpdHMrMy0xKS8zKSxIdC53aW5kb3c9bmV3IE8uQnVmOCgyKkh0Lndfc2l6ZSksSHQuaGVhZD1u''@;'; put 'put ''ZXcgTy5CdWYxNihIdC5oYXNoX3NpemUpLEh0LnByZXY9bmV3IE8uQnVmMTYoSHQud19zaXplKSxIdC5saXRfYnVmc2l6ZT0xPDxfdCs2LEh0LnBlbmRpbmdfYnVmX3NpemU9NCpIdC5saXRfYnVmc2l6ZSxIdC5wZW5kaW5nX2J1Zj1uZXcgTy5CdWY4KEh0LnBlbmRpbmdfYnVmX3NpemUpLEh0''@;'; put 'put ''LmRfYnVmPUh0LmxpdF9idWZzaXplPj4xLEh0LmxfYnVmPTMqSHQubGl0X2J1ZnNpemUsSHQubGV2ZWw9eXQsSHQuc3RyYXRlZ3k9d24sSHQubWV0aG9kPXJyLEx0KE5lKX1Ycj1bbmV3IFF0KDAsMCwwLDAsZnVuY3Rpb24gcm4oTmUseXQpe3ZhciBycj02NTUzNTtmb3IocnI+TmUucGVuZGlu''@;'; put 'put ''Z19idWZfc2l6ZS01JiYocnI9TmUucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihOZS5sb29rYWhlYWQ8PTEpe2lmKG50KE5lKSwwPT09TmUubG9va2FoZWFkJiYwPT09eXQpcmV0dXJuIDE7aWYoMD09PU5lLmxvb2thaGVhZClicmVha31OZS5zdHJzdGFydCs9TmUubG9va2FoZWFkLE5lLmxv''@;'; put 'put ''b2thaGVhZD0wO3ZhciBhdD1OZS5ibG9ja19zdGFydCtycjtpZigoMD09PU5lLnN0cnN0YXJ0fHxOZS5zdHJzdGFydD49YXQpJiYoTmUubG9va2FoZWFkPU5lLnN0cnN0YXJ0LWF0LE5lLnN0cnN0YXJ0PWF0LFl0KE5lLCExKSwwPT09TmUuc3RybS5hdmFpbF9vdXQpfHxOZS5zdHJzdGFydC1O''@;'; put 'put ''ZS5ibG9ja19zdGFydD49TmUud19zaXplLXFlJiYoWXQoTmUsITEpLDA9PT1OZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIE5lLmluc2VydD0wLDQ9PT15dD8oWXQoTmUsITApLDA9PT1OZS5zdHJtLmF2YWlsX291dD8zOjQpOihOZS5zdHJzdGFydD5OZS5ibG9ja19zdGFydCYm''@;'; put 'put ''WXQoTmUsITEpLDEpfSksbmV3IFF0KDQsNCw4LDQseHQpLG5ldyBRdCg0LDUsMTYsOCx4dCksbmV3IFF0KDQsNiwzMiwzMix4dCksbmV3IFF0KDQsNCwxNiwxNixUdCksbmV3IFF0KDgsMTYsMzIsMzIsVHQpLG5ldyBRdCg4LDE2LDEyOCwxMjgsVHQpLG5ldyBRdCg4LDMyLDEyOCwyNTYsVHQp''@;'; put 'put ''LG5ldyBRdCgzMiwxMjgsMjU4LDEwMjQsVHQpLG5ldyBRdCgzMiwyNTgsMjU4LDQwOTYsVHQpXSxNLmRlZmxhdGVJbml0PWZ1bmN0aW9uIFFlKE5lLHl0KXtyZXR1cm4gUm4oTmUseXQsOCwxNSw4LDApfSxNLmRlZmxhdGVJbml0Mj1SbixNLmRlZmxhdGVSZXNldD1MdCxNLmRlZmxhdGVSZXNl''@;'; put 'put ''dEtlZXA9Q3IsTS5kZWZsYXRlU2V0SGVhZGVyPWZ1bmN0aW9uIHd0KE5lLHl0KXtyZXR1cm4gTmUmJk5lLnN0YXRlJiYyPT09TmUuc3RhdGUud3JhcD8oTmUuc3RhdGUuZ3poZWFkPXl0LDApOi0yfSxNLmRlZmxhdGU9ZnVuY3Rpb24gUHQoTmUseXQpe3ZhciBycixhdCxfdCx3bjtpZighTmV8''@;'; put 'put ''fCFOZS5zdGF0ZXx8eXQ+NXx8eXQ8MClyZXR1cm4gTmU/WWUoTmUsLTIpOi0yO2lmKGF0PU5lLnN0YXRlLCFOZS5vdXRwdXR8fCFOZS5pbnB1dCYmMCE9PU5lLmF2YWlsX2lufHw2NjY9PT1hdC5zdGF0dXMmJjQhPT15dClyZXR1cm4gWWUoTmUsMD09PU5lLmF2YWlsX291dD8tNTotMik7aWYo''@;'; put 'put ''YXQuc3RybT1OZSxycj1hdC5sYXN0X2ZsdXNoLGF0Lmxhc3RfZmx1c2g9eXQsNDI9PT1hdC5zdGF0dXMpaWYoMj09PWF0LndyYXApTmUuYWRsZXI9MCx0dChhdCwzMSksdHQoYXQsMTM5KSx0dChhdCw4KSxhdC5nemhlYWQ/KHR0KGF0LChhdC5nemhlYWQudGV4dD8xOjApKyhhdC5nemhlYWQu''@;'; put 'put ''aGNyYz8yOjApKyhhdC5nemhlYWQuZXh0cmE/NDowKSsoYXQuZ3poZWFkLm5hbWU/ODowKSsoYXQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLHR0KGF0LDI1NSZhdC5nemhlYWQudGltZSksdHQoYXQsYXQuZ3poZWFkLnRpbWU+PjgmMjU1KSx0dChhdCxhdC5nemhlYWQudGltZT4+MTYmMjU1KSx0''@;'; put 'put ''dChhdCxhdC5nemhlYWQudGltZT4+MjQmMjU1KSx0dChhdCw5PT09YXQubGV2ZWw/MjphdC5zdHJhdGVneT49Mnx8YXQubGV2ZWw8Mj80OjApLHR0KGF0LDI1NSZhdC5nemhlYWQub3MpLGF0Lmd6aGVhZC5leHRyYSYmYXQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKHR0KGF0LDI1NSZhdC5nemhl''@;'; put 'put ''YWQuZXh0cmEubGVuZ3RoKSx0dChhdCxhdC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLGF0Lmd6aGVhZC5oY3JjJiYoTmUuYWRsZXI9QihOZS5hZGxlcixhdC5wZW5kaW5nX2J1ZixhdC5wZW5kaW5nLDApKSxhdC5nemluZGV4PTAsYXQuc3RhdHVzPTY5KToodHQoYXQsMCksdHQoYXQs''@;'; put 'put ''MCksdHQoYXQsMCksdHQoYXQsMCksdHQoYXQsMCksdHQoYXQsOT09PWF0LmxldmVsPzI6YXQuc3RyYXRlZ3k+PTJ8fGF0LmxldmVsPDI/NDowKSx0dChhdCwzKSxhdC5zdGF0dXM9MTEzKTtlbHNle3ZhciAkdD04KyhhdC53X2JpdHMtODw8NCk8PDg7JHR8PShhdC5zdHJhdGVneT49Mnx8YXQu''@;'; put 'put ''bGV2ZWw8Mj8wOmF0LmxldmVsPDY/MTo2PT09YXQubGV2ZWw/MjozKTw8NiwwIT09YXQuc3Ryc3RhcnQmJigkdHw9MzIpLCR0Kz0zMS0kdCUzMSxhdC5zdGF0dXM9MTEzLFVlKGF0LCR0KSwwIT09YXQuc3Ryc3RhcnQmJihVZShhdCxOZS5hZGxlcj4+PjE2KSxVZShhdCw2NTUzNSZOZS5hZGxl''@;'; put 'put ''cikpLE5lLmFkbGVyPTF9aWYoNjk9PT1hdC5zdGF0dXMpaWYoYXQuZ3poZWFkLmV4dHJhKXtmb3IoX3Q9YXQucGVuZGluZzthdC5nemluZGV4PCg2NTUzNSZhdC5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKGF0LnBlbmRpbmchPT1hdC5wZW5kaW5nX2J1Zl9zaXplfHwoYXQuZ3poZWFkLmhjcmMm''@;'; put 'put ''JmF0LnBlbmRpbmc+X3QmJihOZS5hZGxlcj1CKE5lLmFkbGVyLGF0LnBlbmRpbmdfYnVmLGF0LnBlbmRpbmctX3QsX3QpKSx2dChOZSksX3Q9YXQucGVuZGluZyxhdC5wZW5kaW5nIT09YXQucGVuZGluZ19idWZfc2l6ZSkpOyl0dChhdCwyNTUmYXQuZ3poZWFkLmV4dHJhW2F0Lmd6aW5kZXhd''@;'; put 'put ''KSxhdC5nemluZGV4Kys7YXQuZ3poZWFkLmhjcmMmJmF0LnBlbmRpbmc+X3QmJihOZS5hZGxlcj1CKE5lLmFkbGVyLGF0LnBlbmRpbmdfYnVmLGF0LnBlbmRpbmctX3QsX3QpKSxhdC5nemluZGV4PT09YXQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGF0Lmd6aW5kZXg9MCxhdC5zdGF0dXM9NzMp''@;'; put 'put ''fWVsc2UgYXQuc3RhdHVzPTczO2lmKDczPT09YXQuc3RhdHVzKWlmKGF0Lmd6aGVhZC5uYW1lKXtfdD1hdC5wZW5kaW5nO2Rve2lmKGF0LnBlbmRpbmc9PT1hdC5wZW5kaW5nX2J1Zl9zaXplJiYoYXQuZ3poZWFkLmhjcmMmJmF0LnBlbmRpbmc+X3QmJihOZS5hZGxlcj1CKE5lLmFkbGVyLGF0''@;'; put 'put ''LnBlbmRpbmdfYnVmLGF0LnBlbmRpbmctX3QsX3QpKSx2dChOZSksX3Q9YXQucGVuZGluZyxhdC5wZW5kaW5nPT09YXQucGVuZGluZ19idWZfc2l6ZSkpe3duPTE7YnJlYWt9d249YXQuZ3ppbmRleDxhdC5nemhlYWQubmFtZS5sZW5ndGg/MjU1JmF0Lmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQo''@;'; put 'put ''YXQuZ3ppbmRleCsrKTowLHR0KGF0LHduKX13aGlsZSgwIT09d24pO2F0Lmd6aGVhZC5oY3JjJiZhdC5wZW5kaW5nPl90JiYoTmUuYWRsZXI9QihOZS5hZGxlcixhdC5wZW5kaW5nX2J1ZixhdC5wZW5kaW5nLV90LF90KSksMD09PXduJiYoYXQuZ3ppbmRleD0wLGF0LnN0YXR1cz05MSl9ZWxz''@;'; put 'put ''ZSBhdC5zdGF0dXM9OTE7aWYoOTE9PT1hdC5zdGF0dXMpaWYoYXQuZ3poZWFkLmNvbW1lbnQpe190PWF0LnBlbmRpbmc7ZG97aWYoYXQucGVuZGluZz09PWF0LnBlbmRpbmdfYnVmX3NpemUmJihhdC5nemhlYWQuaGNyYyYmYXQucGVuZGluZz5fdCYmKE5lLmFkbGVyPUIoTmUuYWRsZXIsYXQu''@;'; put 'put ''cGVuZGluZ19idWYsYXQucGVuZGluZy1fdCxfdCkpLHZ0KE5lKSxfdD1hdC5wZW5kaW5nLGF0LnBlbmRpbmc9PT1hdC5wZW5kaW5nX2J1Zl9zaXplKSl7d249MTticmVha313bj1hdC5nemluZGV4PGF0Lmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmYXQuZ3poZWFkLmNvbW1lbnQuY2hhckNv''@;'; put 'put ''ZGVBdChhdC5nemluZGV4KyspOjAsdHQoYXQsd24pfXdoaWxlKDAhPT13bik7YXQuZ3poZWFkLmhjcmMmJmF0LnBlbmRpbmc+X3QmJihOZS5hZGxlcj1CKE5lLmFkbGVyLGF0LnBlbmRpbmdfYnVmLGF0LnBlbmRpbmctX3QsX3QpKSwwPT09d24mJihhdC5zdGF0dXM9MTAzKX1lbHNlIGF0LnN0''@;'; put 'put ''YXR1cz0xMDM7aWYoMTAzPT09YXQuc3RhdHVzJiYoYXQuZ3poZWFkLmhjcmM/KGF0LnBlbmRpbmcrMj5hdC5wZW5kaW5nX2J1Zl9zaXplJiZ2dChOZSksYXQucGVuZGluZysyPD1hdC5wZW5kaW5nX2J1Zl9zaXplJiYodHQoYXQsMjU1Jk5lLmFkbGVyKSx0dChhdCxOZS5hZGxlcj4+OCYyNTUp''@;'; put 'put ''LE5lLmFkbGVyPTAsYXQuc3RhdHVzPTExMykpOmF0LnN0YXR1cz0xMTMpLDAhPT1hdC5wZW5kaW5nKXtpZih2dChOZSksMD09PU5lLmF2YWlsX291dClyZXR1cm4gYXQubGFzdF9mbHVzaD0tMSwwfWVsc2UgaWYoMD09PU5lLmF2YWlsX2luJiZxdCh5dCk8PXF0KHJyKSYmNCE9PXl0KXJldHVy''@;'; put 'put ''biBZZShOZSwtNSk7aWYoNjY2PT09YXQuc3RhdHVzJiYwIT09TmUuYXZhaWxfaW4pcmV0dXJuIFllKE5lLC01KTtpZigwIT09TmUuYXZhaWxfaW58fDAhPT1hdC5sb29rYWhlYWR8fDAhPT15dCYmNjY2IT09YXQuc3RhdHVzKXt2YXIgc2k9Mj09PWF0LnN0cmF0ZWd5P2Z1bmN0aW9uIFh0KE5l''@;'; put 'put ''LHl0KXtmb3IodmFyIHJyOzspe2lmKDA9PT1OZS5sb29rYWhlYWQmJihudChOZSksMD09PU5lLmxvb2thaGVhZCkpe2lmKDA9PT15dClyZXR1cm4gMTticmVha31pZihOZS5tYXRjaF9sZW5ndGg9MCxycj1ELl90cl90YWxseShOZSwwLE5lLndpbmRvd1tOZS5zdHJzdGFydF0pLE5lLmxvb2th''@;'; put 'put ''aGVhZC0tLE5lLnN0cnN0YXJ0KysscnImJihZdChOZSwhMSksMD09PU5lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gTmUuaW5zZXJ0PTAsND09PXl0PyhZdChOZSwhMCksMD09PU5lLnN0cm0uYXZhaWxfb3V0PzM6NCk6TmUubGFzdF9saXQmJihZdChOZSwhMSksMD09PU5lLnN0''@;'; put 'put ''cm0uYXZhaWxfb3V0KT8xOjJ9KGF0LHl0KTozPT09YXQuc3RyYXRlZ3k/ZnVuY3Rpb24geW4oTmUseXQpe2Zvcih2YXIgcnIsYXQsX3Qsd24sJHQ9TmUud2luZG93Ozspe2lmKE5lLmxvb2thaGVhZDw9MjU4KXtpZihudChOZSksTmUubG9va2FoZWFkPD0yNTgmJjA9PT15dClyZXR1cm4gMTtp''@;'; put 'put ''ZigwPT09TmUubG9va2FoZWFkKWJyZWFrfWlmKE5lLm1hdGNoX2xlbmd0aD0wLE5lLmxvb2thaGVhZD49MyYmTmUuc3Ryc3RhcnQ+MCYmKGF0PSR0W190PU5lLnN0cnN0YXJ0LTFdKT09PSR0WysrX3RdJiZhdD09PSR0WysrX3RdJiZhdD09PSR0WysrX3RdKXt3bj1OZS5zdHJzdGFydCsyNTg7''@;'; put 'put ''ZG97fXdoaWxlKGF0PT09JHRbKytfdF0mJmF0PT09JHRbKytfdF0mJmF0PT09JHRbKytfdF0mJmF0PT09JHRbKytfdF0mJmF0PT09JHRbKytfdF0mJmF0PT09JHRbKytfdF0mJmF0PT09JHRbKytfdF0mJmF0PT09JHRbKytfdF0mJl90PHduKTtOZS5tYXRjaF9sZW5ndGg9MjU4LSh3bi1fdCks''@;'; put 'put ''TmUubWF0Y2hfbGVuZ3RoPk5lLmxvb2thaGVhZCYmKE5lLm1hdGNoX2xlbmd0aD1OZS5sb29rYWhlYWQpfWlmKE5lLm1hdGNoX2xlbmd0aD49Mz8ocnI9RC5fdHJfdGFsbHkoTmUsMSxOZS5tYXRjaF9sZW5ndGgtMyksTmUubG9va2FoZWFkLT1OZS5tYXRjaF9sZW5ndGgsTmUuc3Ryc3RhcnQr''@;'; put 'put ''PU5lLm1hdGNoX2xlbmd0aCxOZS5tYXRjaF9sZW5ndGg9MCk6KHJyPUQuX3RyX3RhbGx5KE5lLDAsTmUud2luZG93W05lLnN0cnN0YXJ0XSksTmUubG9va2FoZWFkLS0sTmUuc3Ryc3RhcnQrKykscnImJihZdChOZSwhMSksMD09PU5lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4g''@;'; put 'put ''TmUuaW5zZXJ0PTAsND09PXl0PyhZdChOZSwhMCksMD09PU5lLnN0cm0uYXZhaWxfb3V0PzM6NCk6TmUubGFzdF9saXQmJihZdChOZSwhMSksMD09PU5lLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KGF0LHl0KTpYclthdC5sZXZlbF0uZnVuYyhhdCx5dCk7aWYoKDM9PT1zaXx8ND09PXNpKSYmKGF0''@;'; put 'put ''LnN0YXR1cz02NjYpLDE9PT1zaXx8Mz09PXNpKXJldHVybiAwPT09TmUuYXZhaWxfb3V0JiYoYXQubGFzdF9mbHVzaD0tMSksMDtpZigyPT09c2kmJigxPT09eXQ/RC5fdHJfYWxpZ24oYXQpOjUhPT15dCYmKEQuX3RyX3N0b3JlZF9ibG9jayhhdCwwLDAsITEpLDM9PT15dCYmKGh0KGF0Lmhl''@;'; put 'put ''YWQpLDA9PT1hdC5sb29rYWhlYWQmJihhdC5zdHJzdGFydD0wLGF0LmJsb2NrX3N0YXJ0PTAsYXQuaW5zZXJ0PTApKSksdnQoTmUpLDA9PT1OZS5hdmFpbF9vdXQpKXJldHVybiBhdC5sYXN0X2ZsdXNoPS0xLDB9cmV0dXJuIDQhPT15dD8wOmF0LndyYXA8PTA/MTooMj09PWF0LndyYXA/KHR0''@;'; put 'put ''KGF0LDI1NSZOZS5hZGxlciksdHQoYXQsTmUuYWRsZXI+PjgmMjU1KSx0dChhdCxOZS5hZGxlcj4+MTYmMjU1KSx0dChhdCxOZS5hZGxlcj4+MjQmMjU1KSx0dChhdCwyNTUmTmUudG90YWxfaW4pLHR0KGF0LE5lLnRvdGFsX2luPj44JjI1NSksdHQoYXQsTmUudG90YWxfaW4+PjE2JjI1NSks''@;'; put 'put ''dHQoYXQsTmUudG90YWxfaW4+PjI0JjI1NSkpOihVZShhdCxOZS5hZGxlcj4+PjE2KSxVZShhdCw2NTUzNSZOZS5hZGxlcikpLHZ0KE5lKSxhdC53cmFwPjAmJihhdC53cmFwPS1hdC53cmFwKSwwIT09YXQucGVuZGluZz8wOjEpfSxNLmRlZmxhdGVFbmQ9ZnVuY3Rpb24gUXIoTmUpe3ZhciB5''@;'; put 'put ''dDtyZXR1cm4gTmUmJk5lLnN0YXRlPzQyIT09KHl0PU5lLnN0YXRlLnN0YXR1cykmJjY5IT09eXQmJjczIT09eXQmJjkxIT09eXQmJjEwMyE9PXl0JiYxMTMhPT15dCYmNjY2IT09eXQ/WWUoTmUsLTIpOihOZS5zdGF0ZT1udWxsLDExMz09PXl0P1llKE5lLC0zKTowKTotMn0sTS5kZWZsYXRl''@;'; put 'put ''SW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vbWVzc2FnZXMiOjM3LCIuL3RyZWVzIjozOH1dLDMzOltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO0EuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbiBPKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sMzQ6W2Z1bmN0''@;'; put 'put ''aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7QS5leHBvcnRzPWZ1bmN0aW9uKEIsRil7dmFyIE4sSCx6LFosVSxLLFgsbmUsc2UsaGUsX2UsbWUsRmUsUixzLHUsdixwLF8sayxMLHksbCxiLHE7Yj1CLmlucHV0LHo9KEg9Qi5uZXh0X2luKSsoQi5hdmFpbF9pbi01KSxxPUIub3V0cHV0LFU9KFo9''@;'; put 'put ''Qi5uZXh0X291dCktKEYtQi5hdmFpbF9vdXQpLEs9WisoQi5hdmFpbF9vdXQtMjU3KSxYPShOPUIuc3RhdGUpLmRtYXgsbmU9Ti53c2l6ZSxzZT1OLndoYXZlLGhlPU4ud25leHQsX2U9Ti53aW5kb3csbWU9Ti5ob2xkLEZlPU4uYml0cyxSPU4ubGVuY29kZSxzPU4uZGlzdGNvZGUsdT0oMTw8''@;'; put 'put ''Ti5sZW5iaXRzKS0xLHY9KDE8PE4uZGlzdGJpdHMpLTE7ZTpkb3tGZTwxNSYmKG1lKz1iW0grK108PEZlLG1lKz1iW0grK108PChGZSs9OCksRmUrPTgpLHA9UlttZSZ1XTt0OmZvcig7Oyl7aWYobWU+Pj49Xz1wPj4+MjQsRmUtPV8sMD09KF89cD4+PjE2JjI1NSkpcVtaKytdPTY1NTM1JnA7''@;'; put 'put ''ZWxzZXtpZighKDE2Jl8pKXtpZig2NCZfKXtpZigzMiZfKXtOLm1vZGU9MTI7YnJlYWsgZX1CLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixOLm1vZGU9MzA7YnJlYWsgZX1wPVJbKDY1NTM1JnApKyhtZSYoMTw8XyktMSldO2NvbnRpbnVlIHR9Zm9yKGs9NjU1MzUmcCwoXyY9''@;'; put 'put ''MTUpJiYoRmU8XyYmKG1lKz1iW0grK108PEZlLEZlKz04KSxrKz1tZSYoMTw8XyktMSxtZT4+Pj1fLEZlLT1fKSxGZTwxNSYmKG1lKz1iW0grK108PEZlLG1lKz1iW0grK108PChGZSs9OCksRmUrPTgpLHA9c1ttZSZ2XTs7KXtpZihtZT4+Pj1fPXA+Pj4yNCxGZS09XywxNiYoXz1wPj4+MTYm''@;'; put 'put ''MjU1KSl7aWYoTD02NTUzNSZwLEZlPChfJj0xNSkmJihtZSs9YltIKytdPDxGZSwoRmUrPTgpPF8mJihtZSs9YltIKytdPDxGZSxGZSs9OCkpLChMKz1tZSYoMTw8XyktMSk+WCl7Qi5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixOLm1vZGU9MzA7YnJlYWsgZX1pZihtZT4+''@;'; put 'put ''Pj1fLEZlLT1fLEw+KF89Wi1VKSl7aWYoKF89TC1fKT5zZSYmTi5zYW5lKXtCLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLE4ubW9kZT0zMDticmVhayBlfWlmKHk9MCxsPV9lLDA9PT1oZSl7aWYoeSs9bmUtXyxfPGspe2stPV87ZG97cVtaKytdPV9lW3krK119d2hpbGUo''@;'; put 'put ''LS1fKTt5PVotTCxsPXF9fWVsc2UgaWYoaGU8Xyl7aWYoeSs9bmUraGUtXywoXy09aGUpPGspe2stPV87ZG97cVtaKytdPV9lW3krK119d2hpbGUoLS1fKTtpZih5PTAsaGU8ayl7ay09Xz1oZTtkb3txW1orK109X2VbeSsrXX13aGlsZSgtLV8pO3k9Wi1MLGw9cX19fWVsc2UgaWYoeSs9aGUt''@;'; put 'put ''XyxfPGspe2stPV87ZG97cVtaKytdPV9lW3krK119d2hpbGUoLS1fKTt5PVotTCxsPXF9Zm9yKDtrPjI7KXFbWisrXT1sW3krK10scVtaKytdPWxbeSsrXSxxW1orK109bFt5KytdLGstPTM7ayYmKHFbWisrXT1sW3krK10saz4xJiYocVtaKytdPWxbeSsrXSkpfWVsc2V7eT1aLUw7ZG97cVta''@;'; put 'put ''KytdPXFbeSsrXSxxW1orK109cVt5KytdLHFbWisrXT1xW3krK10say09M313aGlsZShrPjIpO2smJihxW1orK109cVt5KytdLGs+MSYmKHFbWisrXT1xW3krK10pKX1icmVha31pZig2NCZfKXtCLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixOLm1vZGU9MzA7YnJlYWsgZX1wPXNbKDY1''@;'; put 'put ''NTM1JnApKyhtZSYoMTw8XyktMSldfX1icmVha319d2hpbGUoSDx6JiZaPEspO21lJj0oMTw8KEZlLT0oaz1GZT4+Myk8PDMpKS0xLEIubmV4dF9pbj1ILT1rLEIubmV4dF9vdXQ9WixCLmF2YWlsX2luPUg8ej96LUgrNTo1LShILXopLEIuYXZhaWxfb3V0PVo8Sz9LLVorMjU3OjI1Ny0oWi1L''@;'; put 'put ''KSxOLmhvbGQ9bWUsTi5iaXRzPUZlfX0se31dLDM1OltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO3ZhciBPPVQoIi4uL3V0aWxzL2NvbW1vbiIpLEQ9VCgiLi9hZGxlcjMyIiksRT1UKCIuL2NyYzMyIiksQj1UKCIuL2luZmZhc3QiKSxGPVQoIi4vaW5mdHJlZXMiKSxHPTEyO2Z1bmN0''@;'; put 'put ''aW9uIFVlKHd0KXtyZXR1cm4od3Q+Pj4yNCYyNTUpKyh3dD4+PjgmNjUyODApKygoNjUyODAmd3QpPDw4KSsoKDI1NSZ3dCk8PDI0KX1mdW5jdGlvbiAkZSgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRt''@;'; put 'put ''YXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9''@;'; put 'put ''MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgTy5C''@;'; put 'put ''dWYxNigzMjApLHRoaXMud29yaz1uZXcgTy5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBMZSh3dCl7dmFyIFJuO3JldHVybiB3dCYmd3Quc3RhdGU/KHd0LnRvdGFsX2luPXd0''@;'; put 'put ''LnRvdGFsX291dD0oUm49d3Quc3RhdGUpLnRvdGFsPTAsd3QubXNnPSIiLFJuLndyYXAmJih3dC5hZGxlcj0xJlJuLndyYXApLFJuLm1vZGU9MSxSbi5sYXN0PTAsUm4uaGF2ZWRpY3Q9MCxSbi5kbWF4PTMyNzY4LFJuLmhlYWQ9bnVsbCxSbi5ob2xkPTAsUm4uYml0cz0wLFJuLmxlbmNvZGU9''@;'; put 'put ''Um4ubGVuZHluPW5ldyBPLkJ1ZjMyKDg1MiksUm4uZGlzdGNvZGU9Um4uZGlzdGR5bj1uZXcgTy5CdWYzMig1OTIpLFJuLnNhbmU9MSxSbi5iYWNrPS0xLDApOi0yfWZ1bmN0aW9uIG50KHd0KXt2YXIgUm47cmV0dXJuIHd0JiZ3dC5zdGF0ZT8oKFJuPXd0LnN0YXRlKS53c2l6ZT0wLFJuLndo''@;'; put 'put ''YXZlPTAsUm4ud25leHQ9MCxMZSh3dCkpOi0yfWZ1bmN0aW9uIHJuKHd0LFJuKXt2YXIgUWUsUHQ7cmV0dXJuIXd0fHwhd3Quc3RhdGV8fChQdD13dC5zdGF0ZSxSbjwwPyhRZT0wLFJuPS1Sbik6KFFlPTErKFJuPj40KSxSbjw0OCYmKFJuJj0xNSkpLFJuJiYoUm48OHx8Um4+MTUpKT8tMjoo''@;'; put 'put ''bnVsbCE9PVB0LndpbmRvdyYmUHQud2JpdHMhPT1SbiYmKFB0LndpbmRvdz1udWxsKSxQdC53cmFwPVFlLFB0LndiaXRzPVJuLG50KHd0KSl9ZnVuY3Rpb24geHQod3QsUm4pe3ZhciBRZSxQdDtyZXR1cm4gd3Q/KFB0PW5ldyAkZSx3dC5zdGF0ZT1QdCxQdC53aW5kb3c9bnVsbCwwIT09KFFl''@;'; put 'put ''PXJuKHd0LFJuKSkmJih3dC5zdGF0ZT1udWxsKSxRZSk6LTJ9dmFyIFh0LFF0LHluPSEwO2Z1bmN0aW9uIFhyKHd0KXtpZih5bil7dmFyIFJuO2ZvcihYdD1uZXcgTy5CdWYzMig1MTIpLFF0PW5ldyBPLkJ1ZjMyKDMyKSxSbj0wO1JuPDE0NDspd3QubGVuc1tSbisrXT04O2Zvcig7Um48MjU2''@;'; put 'put ''Oyl3dC5sZW5zW1JuKytdPTk7Zm9yKDtSbjwyODA7KXd0LmxlbnNbUm4rK109Nztmb3IoO1JuPDI4ODspd3QubGVuc1tSbisrXT04O2ZvcihGKDEsd3QubGVucywwLDI4OCxYdCwwLHd0Lndvcmsse2JpdHM6OX0pLFJuPTA7Um48MzI7KXd0LmxlbnNbUm4rK109NTtGKDIsd3QubGVucywwLDMy''@;'; put 'put ''LFF0LDAsd3Qud29yayx7Yml0czo1fSkseW49ITF9d3QubGVuY29kZT1YdCx3dC5sZW5iaXRzPTksd3QuZGlzdGNvZGU9UXQsd3QuZGlzdGJpdHM9NX1NLmluZmxhdGVSZXNldD1udCxNLmluZmxhdGVSZXNldDI9cm4sTS5pbmZsYXRlUmVzZXRLZWVwPUxlLE0uaW5mbGF0ZUluaXQ9ZnVuY3Rp''@;'; put 'put ''b24gVHQod3Qpe3JldHVybiB4dCh3dCwxNSl9LE0uaW5mbGF0ZUluaXQyPXh0LE0uaW5mbGF0ZT1mdW5jdGlvbiBpdCh3dCxSbil7dmFyIFFlLFB0LFFyLE5lLHl0LHJyLGF0LF90LHduLCR0LEh0LHNpLG5uLGxuLGFuLEd0LGVhLG1pLGZyLCRpLEtpLFZpLHVhLEZpLGtpPTAscXI9bmV3IE8u''@;'; put 'put ''QnVmOCg0KSxSYT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIXd0fHwhd3Quc3RhdGV8fCF3dC5vdXRwdXR8fCF3dC5pbnB1dCYmMCE9PXd0LmF2YWlsX2luKXJldHVybi0yOyhRZT13dC5zdGF0ZSkubW9kZT09PUcmJihRZS5tb2RlPTEzKSx5''@;'; put 'put ''dD13dC5uZXh0X291dCxRcj13dC5vdXRwdXQsTmU9d3QubmV4dF9pbixQdD13dC5pbnB1dCxfdD1RZS5ob2xkLHduPVFlLmJpdHMsJHQ9cnI9d3QuYXZhaWxfaW4sSHQ9YXQ9d3QuYXZhaWxfb3V0LFZpPTA7ZTpmb3IoOzspc3dpdGNoKFFlLm1vZGUpe2Nhc2UgMTppZigwPT09UWUud3JhcCl7''@;'; put 'put ''UWUubW9kZT0xMzticmVha31mb3IoO3duPDE2Oyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fWlmKDImUWUud3JhcCYmMzU2MTU9PT1fdCl7UWUuY2hlY2s9MCxxclswXT0yNTUmX3QscXJbMV09X3Q+Pj44JjI1NSxRZS5jaGVjaz1FKFFlLmNoZWNrLHFy''@;'; put 'put ''LDIsMCksX3Q9MCx3bj0wLFFlLm1vZGU9MjticmVha31pZihRZS5mbGFncz0wLFFlLmhlYWQmJihRZS5oZWFkLmRvbmU9ITEpLCEoMSZRZS53cmFwKXx8KCgoMjU1Jl90KTw8OCkrKF90Pj44KSklMzEpe3d0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsUWUubW9kZT0zMDticmVha31p''@;'; put 'put ''Zig4IT0oMTUmX3QpKXt3dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixRZS5tb2RlPTMwO2JyZWFrfWlmKHduLT00LEtpPTgrKDE1JihfdD4+Pj00KSksMD09PVFlLndiaXRzKVFlLndiaXRzPUtpO2Vsc2UgaWYoS2k+UWUud2JpdHMpe3d0Lm1zZz0iaW52YWxpZCB3aW5kb3cg''@;'; put 'put ''c2l6ZSIsUWUubW9kZT0zMDticmVha31RZS5kbWF4PTE8PEtpLHd0LmFkbGVyPVFlLmNoZWNrPTEsUWUubW9kZT01MTImX3Q/MTA6RyxfdD0wLHduPTA7YnJlYWs7Y2FzZSAyOmZvcig7d248MTY7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLF90Kz1QdFtOZSsrXTw8d24sd24rPTh9aWYoUWUu''@;'; put 'put ''ZmxhZ3M9X3QsOCE9KDI1NSZRZS5mbGFncykpe3d0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLFFlLm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmUWUuZmxhZ3Mpe3d0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixRZS5tb2RlPTMwO2JyZWFrfVFlLmhlYWQmJihRZS5o''@;'; put 'put ''ZWFkLnRleHQ9X3Q+PjgmMSksNTEyJlFlLmZsYWdzJiYocXJbMF09MjU1Jl90LHFyWzFdPV90Pj4+OCYyNTUsUWUuY2hlY2s9RShRZS5jaGVjayxxciwyLDApKSxfdD0wLHduPTAsUWUubW9kZT0zO2Nhc2UgMzpmb3IoO3duPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUr''@;'; put 'put ''K108PHduLHduKz04fVFlLmhlYWQmJihRZS5oZWFkLnRpbWU9X3QpLDUxMiZRZS5mbGFncyYmKHFyWzBdPTI1NSZfdCxxclsxXT1fdD4+PjgmMjU1LHFyWzJdPV90Pj4+MTYmMjU1LHFyWzNdPV90Pj4+MjQmMjU1LFFlLmNoZWNrPUUoUWUuY2hlY2sscXIsNCwwKSksX3Q9MCx3bj0wLFFlLm1v''@;'; put 'put ''ZGU9NDtjYXNlIDQ6Zm9yKDt3bjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sX3QrPVB0W05lKytdPDx3bix3bis9OH1RZS5oZWFkJiYoUWUuaGVhZC54ZmxhZ3M9MjU1Jl90LFFlLmhlYWQub3M9X3Q+PjgpLDUxMiZRZS5mbGFncyYmKHFyWzBdPTI1NSZfdCxxclsxXT1fdD4+PjgmMjU1''@;'; put 'put ''LFFlLmNoZWNrPUUoUWUuY2hlY2sscXIsMiwwKSksX3Q9MCx3bj0wLFFlLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZRZS5mbGFncyl7Zm9yKDt3bjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sX3QrPVB0W05lKytdPDx3bix3bis9OH1RZS5sZW5ndGg9X3QsUWUuaGVhZCYmKFFlLmhlYWQu''@;'; put 'put ''ZXh0cmFfbGVuPV90KSw1MTImUWUuZmxhZ3MmJihxclswXT0yNTUmX3QscXJbMV09X3Q+Pj44JjI1NSxRZS5jaGVjaz1FKFFlLmNoZWNrLHFyLDIsMCkpLF90PTAsd249MH1lbHNlIFFlLmhlYWQmJihRZS5oZWFkLmV4dHJhPW51bGwpO1FlLm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZRZS5mbGFn''@;'; put 'put ''cyYmKChzaT1RZS5sZW5ndGgpPnJyJiYoc2k9cnIpLHNpJiYoUWUuaGVhZCYmKEtpPVFlLmhlYWQuZXh0cmFfbGVuLVFlLmxlbmd0aCxRZS5oZWFkLmV4dHJhfHwoUWUuaGVhZC5leHRyYT1uZXcgQXJyYXkoUWUuaGVhZC5leHRyYV9sZW4pKSxPLmFycmF5U2V0KFFlLmhlYWQuZXh0cmEsUHQs''@;'; put 'put ''TmUsc2ksS2kpKSw1MTImUWUuZmxhZ3MmJihRZS5jaGVjaz1FKFFlLmNoZWNrLFB0LHNpLE5lKSkscnItPXNpLE5lKz1zaSxRZS5sZW5ndGgtPXNpKSxRZS5sZW5ndGgpKWJyZWFrIGU7UWUubGVuZ3RoPTAsUWUubW9kZT03O2Nhc2UgNzppZigyMDQ4JlFlLmZsYWdzKXtpZigwPT09cnIpYnJl''@;'; put 'put ''YWsgZTtzaT0wO2Rve0tpPVB0W05lK3NpKytdLFFlLmhlYWQmJktpJiZRZS5sZW5ndGg8NjU1MzYmJihRZS5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoS2kpKX13aGlsZShLaSYmc2k8cnIpO2lmKDUxMiZRZS5mbGFncyYmKFFlLmNoZWNrPUUoUWUuY2hlY2ssUHQsc2ksTmUpKSxy''@;'; put 'put ''ci09c2ksTmUrPXNpLEtpKWJyZWFrIGV9ZWxzZSBRZS5oZWFkJiYoUWUuaGVhZC5uYW1lPW51bGwpO1FlLmxlbmd0aD0wLFFlLm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZRZS5mbGFncyl7aWYoMD09PXJyKWJyZWFrIGU7c2k9MDtkb3tLaT1QdFtOZStzaSsrXSxRZS5oZWFkJiZLaSYmUWUubGVu''@;'; put 'put ''Z3RoPDY1NTM2JiYoUWUuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEtpKSl9d2hpbGUoS2kmJnNpPHJyKTtpZig1MTImUWUuZmxhZ3MmJihRZS5jaGVjaz1FKFFlLmNoZWNrLFB0LHNpLE5lKSkscnItPXNpLE5lKz1zaSxLaSlicmVhayBlfWVsc2UgUWUuaGVhZCYmKFFlLmhl''@;'; put 'put ''YWQuY29tbWVudD1udWxsKTtRZS5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZRZS5mbGFncyl7Zm9yKDt3bjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sX3QrPVB0W05lKytdPDx3bix3bis9OH1pZihfdCE9PSg2NTUzNSZRZS5jaGVjaykpe3d0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIs''@;'; put 'put ''UWUubW9kZT0zMDticmVha31fdD0wLHduPTB9UWUuaGVhZCYmKFFlLmhlYWQuaGNyYz1RZS5mbGFncz4+OSYxLFFlLmhlYWQuZG9uZT0hMCksd3QuYWRsZXI9UWUuY2hlY2s9MCxRZS5tb2RlPUc7YnJlYWs7Y2FzZSAxMDpmb3IoO3duPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9''@;'; put 'put ''UHRbTmUrK108PHduLHduKz04fXd0LmFkbGVyPVFlLmNoZWNrPVVlKF90KSxfdD0wLHduPTAsUWUubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1RZS5oYXZlZGljdClyZXR1cm4gd3QubmV4dF9vdXQ9eXQsd3QuYXZhaWxfb3V0PWF0LHd0Lm5leHRfaW49TmUsd3QuYXZhaWxfaW49cnIsUWUuaG9s''@;'; put 'put ''ZD1fdCxRZS5iaXRzPXduLDI7d3QuYWRsZXI9UWUuY2hlY2s9MSxRZS5tb2RlPUc7Y2FzZSBHOmlmKDU9PT1Sbnx8Nj09PVJuKWJyZWFrIGU7Y2FzZSAxMzppZihRZS5sYXN0KXtfdD4+Pj03JnduLHduLT03JnduLFFlLm1vZGU9Mjc7YnJlYWt9Zm9yKDt3bjwzOyl7aWYoMD09PXJyKWJyZWFr''@;'; put 'put ''IGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fXN3aXRjaChRZS5sYXN0PTEmX3Qsd24tPTEsMyYoX3Q+Pj49MSkpe2Nhc2UgMDpRZS5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZihYcihRZSksUWUubW9kZT0yMCw2PT09Um4pe190Pj4+PTIsd24tPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6''@;'; put 'put ''UWUubW9kZT0xNzticmVhaztjYXNlIDM6d3QubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLFFlLm1vZGU9MzB9X3Q+Pj49Mix3bi09MjticmVhaztjYXNlIDE0OmZvcihfdD4+Pj03JnduLHduLT03JnduO3duPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHdu''@;'; put 'put ''Kz04fWlmKCg2NTUzNSZfdCkhPShfdD4+PjE2XjY1NTM1KSl7d3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixRZS5tb2RlPTMwO2JyZWFrfWlmKFFlLmxlbmd0aD02NTUzNSZfdCxfdD0wLHduPTAsUWUubW9kZT0xNSw2PT09Um4pYnJlYWsgZTtjYXNlIDE1OlFlLm1vZGU9''@;'; put 'put ''MTY7Y2FzZSAxNjppZihzaT1RZS5sZW5ndGgpe2lmKHNpPnJyJiYoc2k9cnIpLHNpPmF0JiYoc2k9YXQpLDA9PT1zaSlicmVhayBlO08uYXJyYXlTZXQoUXIsUHQsTmUsc2kseXQpLHJyLT1zaSxOZSs9c2ksYXQtPXNpLHl0Kz1zaSxRZS5sZW5ndGgtPXNpO2JyZWFrfVFlLm1vZGU9RzticmVh''@;'; put 'put ''aztjYXNlIDE3OmZvcig7d248MTQ7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLF90Kz1QdFtOZSsrXTw8d24sd24rPTh9aWYoUWUubmxlbj0yNTcrKDMxJl90KSx3bi09NSxRZS5uZGlzdD0xKygzMSYoX3Q+Pj49NSkpLHduLT01LFFlLm5jb2RlPTQrKDE1JihfdD4+Pj01KSksX3Q+Pj49NCx3''@;'; put 'put ''bi09NCxRZS5ubGVuPjI4Nnx8UWUubmRpc3Q+MzApe3d0Lm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLFFlLm1vZGU9MzA7YnJlYWt9UWUuaGF2ZT0wLFFlLm1vZGU9MTg7Y2FzZSAxODpmb3IoO1FlLmhhdmU8UWUubmNvZGU7KXtmb3IoO3duPDM7KXtpZigwPT09''@;'; put 'put ''cnIpYnJlYWsgZTtyci0tLF90Kz1QdFtOZSsrXTw8d24sd24rPTh9UWUubGVuc1tSYVtRZS5oYXZlKytdXT03Jl90LF90Pj4+PTMsd24tPTN9Zm9yKDtRZS5oYXZlPDE5OylRZS5sZW5zW1JhW1FlLmhhdmUrK11dPTA7aWYoUWUubGVuY29kZT1RZS5sZW5keW4sUWUubGVuYml0cz03LFZpPUYo''@;'; put 'put ''MCxRZS5sZW5zLDAsMTksUWUubGVuY29kZSwwLFFlLndvcmssdWE9e2JpdHM6UWUubGVuYml0c30pLFFlLmxlbmJpdHM9dWEuYml0cyxWaSl7d3QubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLFFlLm1vZGU9MzA7YnJlYWt9UWUuaGF2ZT0wLFFlLm1vZGU9MTk7Y2FzZSAxOTpmb3Io''@;'; put 'put ''O1FlLmhhdmU8UWUubmxlbitRZS5uZGlzdDspe2Zvcig7R3Q9KGtpPVFlLmxlbmNvZGVbX3QmKDE8PFFlLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxlYT02NTUzNSZraSwhKChhbj1raT4+PjI0KTw9d24pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fWlm''@;'; put 'put ''KGVhPDE2KV90Pj4+PWFuLHduLT1hbixRZS5sZW5zW1FlLmhhdmUrK109ZWE7ZWxzZXtpZigxNj09PWVhKXtmb3IoRmk9YW4rMjt3bjxGaTspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sX3QrPVB0W05lKytdPDx3bix3bis9OH1pZihfdD4+Pj1hbix3bi09YW4sMD09PVFlLmhhdmUpe3d0Lm1z''@;'; put 'put ''Zz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsUWUubW9kZT0zMDticmVha31LaT1RZS5sZW5zW1FlLmhhdmUtMV0sc2k9MysoMyZfdCksX3Q+Pj49Mix3bi09Mn1lbHNlIGlmKDE3PT09ZWEpe2ZvcihGaT1hbiszO3duPEZpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUr''@;'; put 'put ''K108PHduLHduKz04fXduLT1hbixLaT0wLHNpPTMrKDcmKF90Pj4+PWFuKSksX3Q+Pj49Myx3bi09M31lbHNle2ZvcihGaT1hbis3O3duPEZpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fXduLT1hbixLaT0wLHNpPTExKygxMjcmKF90Pj4+PWFuKSks''@;'; put 'put ''X3Q+Pj49Nyx3bi09N31pZihRZS5oYXZlK3NpPlFlLm5sZW4rUWUubmRpc3Qpe3d0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsUWUubW9kZT0zMDticmVha31mb3IoO3NpLS07KVFlLmxlbnNbUWUuaGF2ZSsrXT1LaX19aWYoMzA9PT1RZS5tb2RlKWJyZWFrO2lmKDA9PT1RZS5s''@;'; put 'put ''ZW5zWzI1Nl0pe3d0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixRZS5tb2RlPTMwO2JyZWFrfWlmKFFlLmxlbmJpdHM9OSxWaT1GKDEsUWUubGVucywwLFFlLm5sZW4sUWUubGVuY29kZSwwLFFlLndvcmssdWE9e2JpdHM6UWUubGVuYml0c30pLFFlLmxlbmJp''@;'; put 'put ''dHM9dWEuYml0cyxWaSl7d3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLFFlLm1vZGU9MzA7YnJlYWt9aWYoUWUuZGlzdGJpdHM9NixRZS5kaXN0Y29kZT1RZS5kaXN0ZHluLFZpPUYoMixRZS5sZW5zLFFlLm5sZW4sUWUubmRpc3QsUWUuZGlzdGNvZGUsMCxRZS53b3JrLHVh''@;'; put 'put ''PXtiaXRzOlFlLmRpc3RiaXRzfSksUWUuZGlzdGJpdHM9dWEuYml0cyxWaSl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLFFlLm1vZGU9MzA7YnJlYWt9aWYoUWUubW9kZT0yMCw2PT09Um4pYnJlYWsgZTtjYXNlIDIwOlFlLm1vZGU9MjE7Y2FzZSAyMTppZihycj49NiYmYXQ+PTI1''@;'; put 'put ''OCl7d3QubmV4dF9vdXQ9eXQsd3QuYXZhaWxfb3V0PWF0LHd0Lm5leHRfaW49TmUsd3QuYXZhaWxfaW49cnIsUWUuaG9sZD1fdCxRZS5iaXRzPXduLEIod3QsSHQpLHl0PXd0Lm5leHRfb3V0LFFyPXd0Lm91dHB1dCxhdD13dC5hdmFpbF9vdXQsTmU9d3QubmV4dF9pbixQdD13dC5pbnB1dCxy''@;'; put 'put ''cj13dC5hdmFpbF9pbixfdD1RZS5ob2xkLHduPVFlLmJpdHMsUWUubW9kZT09PUcmJihRZS5iYWNrPS0xKTticmVha31mb3IoUWUuYmFjaz0wO0d0PShraT1RZS5sZW5jb2RlW190JigxPDxRZS5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsZWE9NjU1MzUma2ksISgoYW49a2k+Pj4yNCk8PXduKTsp''@;'; put 'put ''e2lmKDA9PT1ycilicmVhayBlO3JyLS0sX3QrPVB0W05lKytdPDx3bix3bis9OH1pZihHdCYmISgyNDAmR3QpKXtmb3IobWk9YW4sZnI9R3QsJGk9ZWE7R3Q9KGtpPVFlLmxlbmNvZGVbJGkrKChfdCYoMTw8bWkrZnIpLTEpPj5taSldKT4+PjE2JjI1NSxlYT02NTUzNSZraSwhKG1pKyhhbj1r''@;'; put 'put ''aT4+PjI0KTw9d24pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fV90Pj4+PW1pLHduLT1taSxRZS5iYWNrKz1taX1pZihfdD4+Pj1hbix3bi09YW4sUWUuYmFjays9YW4sUWUubGVuZ3RoPWVhLDA9PT1HdCl7UWUubW9kZT0yNjticmVha31pZigzMiZH''@;'; put 'put ''dCl7UWUuYmFjaz0tMSxRZS5tb2RlPUc7YnJlYWt9aWYoNjQmR3Qpe3d0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixRZS5tb2RlPTMwO2JyZWFrfVFlLmV4dHJhPTE1Jkd0LFFlLm1vZGU9MjI7Y2FzZSAyMjppZihRZS5leHRyYSl7Zm9yKEZpPVFlLmV4dHJhO3duPEZpOyl7''@;'; put 'put ''aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fVFlLmxlbmd0aCs9X3QmKDE8PFFlLmV4dHJhKS0xLF90Pj4+PVFlLmV4dHJhLHduLT1RZS5leHRyYSxRZS5iYWNrKz1RZS5leHRyYX1RZS53YXM9UWUubGVuZ3RoLFFlLm1vZGU9MjM7Y2FzZSAyMzpmb3IoO0d0''@;'; put 'put ''PShraT1RZS5kaXN0Y29kZVtfdCYoMTw8UWUuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxlYT02NTUzNSZraSwhKChhbj1raT4+PjI0KTw9d24pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fWlmKCEoMjQwJkd0KSl7Zm9yKG1pPWFuLGZyPUd0LCRpPWVh''@;'; put 'put ''O0d0PShraT1RZS5kaXN0Y29kZVskaSsoKF90JigxPDxtaStmciktMSk+Pm1pKV0pPj4+MTYmMjU1LGVhPTY1NTM1JmtpLCEobWkrKGFuPWtpPj4+MjQpPD13bik7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLF90Kz1QdFtOZSsrXTw8d24sd24rPTh9X3Q+Pj49bWksd24tPW1pLFFlLmJhY2sr''@;'; put 'put ''PW1pfWlmKF90Pj4+PWFuLHduLT1hbixRZS5iYWNrKz1hbiw2NCZHdCl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLFFlLm1vZGU9MzA7YnJlYWt9UWUub2Zmc2V0PWVhLFFlLmV4dHJhPTE1Jkd0LFFlLm1vZGU9MjQ7Y2FzZSAyNDppZihRZS5leHRyYSl7Zm9yKEZpPVFlLmV4dHJh''@;'; put 'put ''O3duPEZpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fVFlLm9mZnNldCs9X3QmKDE8PFFlLmV4dHJhKS0xLF90Pj4+PVFlLmV4dHJhLHduLT1RZS5leHRyYSxRZS5iYWNrKz1RZS5leHRyYX1pZihRZS5vZmZzZXQ+UWUuZG1heCl7d3QubXNnPSJpbnZh''@;'; put 'put ''bGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsUWUubW9kZT0zMDticmVha31RZS5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PWF0KWJyZWFrIGU7aWYoUWUub2Zmc2V0PihzaT1IdC1hdCkpe2lmKChzaT1RZS5vZmZzZXQtc2kpPlFlLndoYXZlJiZRZS5zYW5lKXt3dC5tc2c9ImludmFsaWQgZGlz''@;'; put 'put ''dGFuY2UgdG9vIGZhciBiYWNrIixRZS5tb2RlPTMwO2JyZWFrfW5uPXNpPlFlLnduZXh0P1FlLndzaXplLShzaS09UWUud25leHQpOlFlLnduZXh0LXNpLHNpPlFlLmxlbmd0aCYmKHNpPVFlLmxlbmd0aCksbG49UWUud2luZG93fWVsc2UgbG49UXIsbm49eXQtUWUub2Zmc2V0LHNpPVFlLmxl''@;'; put 'put ''bmd0aDtzaT5hdCYmKHNpPWF0KSxhdC09c2ksUWUubGVuZ3RoLT1zaTtkb3tRclt5dCsrXT1sbltubisrXX13aGlsZSgtLXNpKTswPT09UWUubGVuZ3RoJiYoUWUubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09YXQpYnJlYWsgZTtRclt5dCsrXT1RZS5sZW5ndGgsYXQtLSxRZS5tb2Rl''@;'; put 'put ''PTIxO2JyZWFrO2Nhc2UgMjc6aWYoUWUud3JhcCl7Zm9yKDt3bjwzMjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sX3R8PVB0W05lKytdPDx3bix3bis9OH1pZih3dC50b3RhbF9vdXQrPUh0LT1hdCxRZS50b3RhbCs9SHQsSHQmJih3dC5hZGxlcj1RZS5jaGVjaz1RZS5mbGFncz9FKFFlLmNo''@;'; put 'put ''ZWNrLFFyLEh0LHl0LUh0KTpEKFFlLmNoZWNrLFFyLEh0LHl0LUh0KSksSHQ9YXQsKFFlLmZsYWdzP190OlVlKF90KSkhPT1RZS5jaGVjayl7d3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsUWUubW9kZT0zMDticmVha31fdD0wLHduPTB9UWUubW9kZT0yODtjYXNlIDI4OmlmKFFlLndy''@;'; put 'put ''YXAmJlFlLmZsYWdzKXtmb3IoO3duPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxfdCs9UHRbTmUrK108PHduLHduKz04fWlmKF90IT09KDQyOTQ5NjcyOTUmUWUudG90YWwpKXt3dC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLFFlLm1vZGU9MzA7YnJlYWt9X3Q9MCx3bj0wfVFl''@;'; put 'put ''Lm1vZGU9Mjk7Y2FzZSAyOTpWaT0xO2JyZWFrIGU7Y2FzZSAzMDpWaT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4tMn1yZXR1cm4gd3QubmV4dF9vdXQ9eXQsd3QuYXZhaWxfb3V0PWF0LHd0Lm5leHRfaW49TmUsd3QuYXZhaWxfaW49cnIsUWUuaG9sZD1fdCxR''@;'; put 'put ''ZS5iaXRzPXduLChRZS53c2l6ZXx8SHQhPT13dC5hdmFpbF9vdXQmJlFlLm1vZGU8MzAmJihRZS5tb2RlPDI3fHw0IT09Um4pKSYmZnVuY3Rpb24gc24od3QsUm4sUWUsUHQpe3ZhciBRcixOZT13dC5zdGF0ZTtyZXR1cm4gbnVsbD09PU5lLndpbmRvdyYmKE5lLndzaXplPTE8PE5lLndiaXRz''@;'; put 'put ''LE5lLnduZXh0PTAsTmUud2hhdmU9MCxOZS53aW5kb3c9bmV3IE8uQnVmOChOZS53c2l6ZSkpLFB0Pj1OZS53c2l6ZT8oTy5hcnJheVNldChOZS53aW5kb3csUm4sUWUtTmUud3NpemUsTmUud3NpemUsMCksTmUud25leHQ9MCxOZS53aGF2ZT1OZS53c2l6ZSk6KChRcj1OZS53c2l6ZS1OZS53''@;'; put 'put ''bmV4dCk+UHQmJihRcj1QdCksTy5hcnJheVNldChOZS53aW5kb3csUm4sUWUtUHQsUXIsTmUud25leHQpLChQdC09UXIpPyhPLmFycmF5U2V0KE5lLndpbmRvdyxSbixRZS1QdCxQdCwwKSxOZS53bmV4dD1QdCxOZS53aGF2ZT1OZS53c2l6ZSk6KE5lLnduZXh0Kz1RcixOZS53bmV4dD09PU5l''@;'; put 'put ''LndzaXplJiYoTmUud25leHQ9MCksTmUud2hhdmU8TmUud3NpemUmJihOZS53aGF2ZSs9UXIpKSksMH0od3Qsd3Qub3V0cHV0LHd0Lm5leHRfb3V0LEh0LXd0LmF2YWlsX291dCk/KFFlLm1vZGU9MzEsLTQpOihIdC09d3QuYXZhaWxfb3V0LHd0LnRvdGFsX2luKz0kdC09d3QuYXZhaWxfaW4s''@;'; put 'put ''d3QudG90YWxfb3V0Kz1IdCxRZS50b3RhbCs9SHQsUWUud3JhcCYmSHQmJih3dC5hZGxlcj1RZS5jaGVjaz1RZS5mbGFncz9FKFFlLmNoZWNrLFFyLEh0LHd0Lm5leHRfb3V0LUh0KTpEKFFlLmNoZWNrLFFyLEh0LHd0Lm5leHRfb3V0LUh0KSksd3QuZGF0YV90eXBlPVFlLmJpdHMrKFFlLmxh''@;'; put 'put ''c3Q/NjQ6MCkrKFFlLm1vZGU9PT1HPzEyODowKSsoMjA9PT1RZS5tb2RlfHwxNT09PVFlLm1vZGU/MjU2OjApLCgwPT09JHQmJjA9PT1IdHx8ND09PVJuKSYmMD09PVZpJiYoVmk9LTUpLFZpKX0sTS5pbmZsYXRlRW5kPWZ1bmN0aW9uIENyKHd0KXtpZighd3R8fCF3dC5zdGF0ZSlyZXR1cm4t''@;'; put 'put ''Mjt2YXIgUm49d3Quc3RhdGU7cmV0dXJuIFJuLndpbmRvdyYmKFJuLndpbmRvdz1udWxsKSx3dC5zdGF0ZT1udWxsLDB9LE0uaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBMdCh3dCxSbil7dmFyIFFlO3JldHVybiB3dCYmd3Quc3RhdGUmJjImKFFlPXd0LnN0YXRlKS53cmFwPyhRZS5oZWFk''@;'; put 'put ''PVJuLFJuLmRvbmU9ITEsMCk6LTJ9LE0uaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZhc3QiOjM0LCIuL2luZnRyZWVzIjozNn1dLDM2OltmdW5j''@;'; put 'put ''dGlvbihULEEsTSl7InVzZSBzdHJpY3QiO3ZhciBPPVQoIi4uL3V0aWxzL2NvbW1vbiIpLHo9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxaPVsxNiwxNiwxNiwxNiwxNiwx''@;'; put 'put ''NiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcs''@;'; put 'put ''NjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sSz1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO0EuZXhwb3J0cz1mdW5jdGlvbihuZSxzZSxoZSxfZSxt''@;'; put 'put ''ZSxGZSxSLHMpe3ZhciBRLHBlLFBlLFplLHFlLHplLE1lLEllLGJlLHU9cy5iaXRzLHY9MCxwPTAsXz0wLGs9MCxMPTAseT0wLGw9MCxiPTAscT0wLEc9MCx2ZT1udWxsLHVlPTAsT2U9bmV3IE8uQnVmMTYoMTYpLENlPW5ldyBPLkJ1ZjE2KDE2KSxrZT1udWxsLHhlPTA7Zm9yKHY9MDt2PD0x''@;'; put 'put ''NTt2KyspT2Vbdl09MDtmb3IocD0wO3A8X2U7cCsrKU9lW3NlW2hlK3BdXSsrO2ZvcihMPXUsaz0xNTtrPj0xJiYwPT09T2Vba107ay0tKTtpZihMPmsmJihMPWspLDA9PT1rKXJldHVybiBtZVtGZSsrXT0yMDk3MTUyMCxtZVtGZSsrXT0yMDk3MTUyMCxzLmJpdHM9MSwwO2ZvcihfPTE7Xzxr''@;'; put 'put ''JiYwPT09T2VbX107XysrKTtmb3IoTDxfJiYoTD1fKSxiPTEsdj0xO3Y8PTE1O3YrKylpZihiPDw9MSwoYi09T2Vbdl0pPDApcmV0dXJuLTE7aWYoYj4wJiYoMD09PW5lfHwxIT09aykpcmV0dXJuLTE7Zm9yKENlWzFdPTAsdj0xO3Y8MTU7disrKUNlW3YrMV09Q2Vbdl0rT2Vbdl07Zm9yKHA9''@;'; put 'put ''MDtwPF9lO3ArKykwIT09c2VbaGUrcF0mJihSW0NlW3NlW2hlK3BdXSsrXT1wKTtpZigwPT09bmU/KHZlPWtlPVIsemU9MTkpOjE9PT1uZT8odmU9eix1ZS09MjU3LGtlPVoseGUtPTI1Nyx6ZT0yNTYpOih2ZT1VLGtlPUssemU9LTEpLEc9MCxwPTAsdj1fLHFlPUZlLHk9TCxsPTAsUGU9LTEs''@;'; put 'put ''WmU9KHE9MTw8TCktMSwxPT09bmUmJnE+ODUyfHwyPT09bmUmJnE+NTkyKXJldHVybiAxO2Zvcig7Oyl7TWU9di1sLFJbcF08emU/KEllPTAsYmU9UltwXSk6UltwXT56ZT8oSWU9a2VbeGUrUltwXV0sYmU9dmVbdWUrUltwXV0pOihJZT05NixiZT0wKSxRPTE8PHYtbCxfPXBlPTE8PHk7ZG97''@;'; put 'put ''bWVbcWUrKEc+PmwpKyhwZS09USldPU1lPDwyNHxJZTw8MTZ8YmV9d2hpbGUoMCE9PXBlKTtmb3IoUT0xPDx2LTE7RyZROylRPj49MTtpZigwIT09UT8oRyY9US0xLEcrPVEpOkc9MCxwKyssMD09LS1PZVt2XSl7aWYodj09PWspYnJlYWs7dj1zZVtoZStSW3BdXX1pZih2PkwmJihHJlplKSE9''@;'; put 'put ''PVBlKXtmb3IoMD09PWwmJihsPUwpLHFlKz1fLGI9MTw8KHk9di1sKTt5K2w8ayYmISgoYi09T2VbeStsXSk8PTApOyl5KyssYjw8PTE7aWYocSs9MTw8eSwxPT09bmUmJnE+ODUyfHwyPT09bmUmJnE+NTkyKXJldHVybiAxO21lW1BlPUcmWmVdPUw8PDI0fHk8PDE2fHFlLUZlfX1yZXR1cm4g''@;'; put 'put ''MCE9PUcmJihtZVtxZStHXT12LWw8PDI0fDY0PDwxNikscy5iaXRzPUwsMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO0EuZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUg''@;'; put 'put ''ZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0sMzg6W2Z1bmN0aW9uKFQsQSxNKXsidXNlIHN0cmljdCI7dmFyIE89''@;'; put 'put ''VCgiLi4vdXRpbHMvY29tbW9uIik7ZnVuY3Rpb24gTihpdCl7Zm9yKHZhciBDcj1pdC5sZW5ndGg7LS1Dcj49MDspaXRbQ3JdPTB9dmFyIGs9WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0sTD1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0''@;'; put 'put ''LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10seT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10sbD1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0scT1uZXcgQXJyYXkoNTc2KTtOKHEpO3Zh''@;'; put 'put ''ciBHPW5ldyBBcnJheSg2MCk7TihHKTt2YXIgUT1uZXcgQXJyYXkoNTEyKTtOKFEpO3ZhciBwZT1uZXcgQXJyYXkoMjU2KTtOKHBlKTt2YXIgUGU9bmV3IEFycmF5KDI5KTtOKFBlKTt2YXIgWmU9bmV3IEFycmF5KDMwKTtOKFplKTt2YXIgdmUsdWUsemUscWU9ZnVuY3Rpb24oaXQsQ3IsTHQs''@;'; put 'put ''d3QsUm4pe3RoaXMuc3RhdGljX3RyZWU9aXQsdGhpcy5leHRyYV9iaXRzPUNyLHRoaXMuZXh0cmFfYmFzZT1MdCx0aGlzLmVsZW1zPXd0LHRoaXMubWF4X2xlbmd0aD1Sbix0aGlzLmhhc19zdHJlZT1pdCYmaXQubGVuZ3RofSxPZT1mdW5jdGlvbihpdCxDcil7dGhpcy5keW5fdHJlZT1pdCx0''@;'; put 'put ''aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9Q3J9O2Z1bmN0aW9uIENlKGl0KXtyZXR1cm4gaXQ8MjU2P1FbaXRdOlFbMjU2KyhpdD4+PjcpXX1mdW5jdGlvbiBrZShpdCxDcil7aXQucGVuZGluZ19idWZbaXQucGVuZGluZysrXT0yNTUmQ3IsaXQucGVuZGluZ19idWZbaXQucGVuZGlu''@;'; put 'put ''ZysrXT1Dcj4+PjgmMjU1fWZ1bmN0aW9uIHhlKGl0LENyLEx0KXtpdC5iaV92YWxpZD4xNi1MdD8oaXQuYmlfYnVmfD1Dcjw8aXQuYmlfdmFsaWQmNjU1MzUsa2UoaXQsaXQuYmlfYnVmKSxpdC5iaV9idWY9Q3I+PjE2LWl0LmJpX3ZhbGlkLGl0LmJpX3ZhbGlkKz1MdC0xNik6KGl0LmJpX2J1''@;'; put 'put ''Znw9Q3I8PGl0LmJpX3ZhbGlkJjY1NTM1LGl0LmJpX3ZhbGlkKz1MdCl9ZnVuY3Rpb24gTWUoaXQsQ3IsTHQpe3hlKGl0LEx0WzIqQ3JdLEx0WzIqQ3IrMV0pfWZ1bmN0aW9uIEllKGl0LENyKXt2YXIgTHQ9MDtkb3tMdHw9MSZpdCxpdD4+Pj0xLEx0PDw9MX13aGlsZSgtLUNyPjApO3JldHVy''@;'; put 'put ''biBMdD4+PjF9ZnVuY3Rpb24gcHQoaXQsQ3IsTHQpe3ZhciBRZSxQdCx3dD1uZXcgQXJyYXkoMTYpLFJuPTA7Zm9yKFFlPTE7UWU8PTE1O1FlKyspd3RbUWVdPVJuPVJuK0x0W1FlLTFdPDwxO2ZvcihQdD0wO1B0PD1DcjtQdCsrKXt2YXIgUXI9aXRbMipQdCsxXTswIT09UXImJihpdFsyKlB0''@;'; put 'put ''XT1JZSh3dFtRcl0rKyxRcikpfX1mdW5jdGlvbiBZZShpdCl7dmFyIENyO2ZvcihDcj0wO0NyPDI4NjtDcisrKWl0LmR5bl9sdHJlZVsyKkNyXT0wO2ZvcihDcj0wO0NyPDMwO0NyKyspaXQuZHluX2R0cmVlWzIqQ3JdPTA7Zm9yKENyPTA7Q3I8MTk7Q3IrKylpdC5ibF90cmVlWzIqQ3JdPTA7''@;'; put 'put ''aXQuZHluX2x0cmVlWzUxMl09MSxpdC5vcHRfbGVuPWl0LnN0YXRpY19sZW49MCxpdC5sYXN0X2xpdD1pdC5tYXRjaGVzPTB9ZnVuY3Rpb24gcXQoaXQpe2l0LmJpX3ZhbGlkPjg/a2UoaXQsaXQuYmlfYnVmKTppdC5iaV92YWxpZD4wJiYoaXQucGVuZGluZ19idWZbaXQucGVuZGluZysrXT1p''@;'; put 'put ''dC5iaV9idWYpLGl0LmJpX2J1Zj0wLGl0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gdnQoaXQsQ3IsTHQsd3Qpe3ZhciBSbj0yKkNyLFFlPTIqTHQ7cmV0dXJuIGl0W1JuXTxpdFtRZV18fGl0W1JuXT09PWl0W1FlXSYmd3RbQ3JdPD13dFtMdF19ZnVuY3Rpb24gWXQoaXQsQ3IsTHQpe2Zvcih2YXIg''@;'; put 'put ''d3Q9aXQuaGVhcFtMdF0sUm49THQ8PDE7Um48PWl0LmhlYXBfbGVuJiYoUm48aXQuaGVhcF9sZW4mJnZ0KENyLGl0LmhlYXBbUm4rMV0saXQuaGVhcFtSbl0saXQuZGVwdGgpJiZSbisrLCF2dChDcix3dCxpdC5oZWFwW1JuXSxpdC5kZXB0aCkpOylpdC5oZWFwW0x0XT1pdC5oZWFwW1JuXSxM''@;'; put 'put ''dD1SbixSbjw8PTE7aXQuaGVhcFtMdF09d3R9ZnVuY3Rpb24gdHQoaXQsQ3IsTHQpe3ZhciB3dCxSbixQdCxRcixRZT0wO2lmKDAhPT1pdC5sYXN0X2xpdClkb3t3dD1pdC5wZW5kaW5nX2J1ZltpdC5kX2J1ZisyKlFlXTw8OHxpdC5wZW5kaW5nX2J1ZltpdC5kX2J1ZisyKlFlKzFdLFJuPWl0''@;'; put 'put ''LnBlbmRpbmdfYnVmW2l0LmxfYnVmK1FlXSxRZSsrLDA9PT13dD9NZShpdCxSbixDcik6KE1lKGl0LChQdD1wZVtSbl0pKzI1NisxLENyKSwwIT09KFFyPWtbUHRdKSYmeGUoaXQsUm4tPVBlW1B0XSxRciksTWUoaXQsUHQ9Q2UoLS13dCksTHQpLDAhPT0oUXI9TFtQdF0pJiZ4ZShpdCx3dC09''@;'; put 'put ''WmVbUHRdLFFyKSl9d2hpbGUoUWU8aXQubGFzdF9saXQpO01lKGl0LDI1NixDcil9ZnVuY3Rpb24gVWUoaXQsQ3Ipe3ZhciBQdCxRcix5dCxMdD1Dci5keW5fdHJlZSx3dD1Dci5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsUm49Q3Iuc3RhdF9kZXNjLmhhc19zdHJlZSxRZT1Dci5zdGF0X2Rlc2Mu''@;'; put 'put ''ZWxlbXMsTmU9LTE7Zm9yKGl0LmhlYXBfbGVuPTAsaXQuaGVhcF9tYXg9NTczLFB0PTA7UHQ8UWU7UHQrKykwIT09THRbMipQdF0/KGl0LmhlYXBbKytpdC5oZWFwX2xlbl09TmU9UHQsaXQuZGVwdGhbUHRdPTApOkx0WzIqUHQrMV09MDtmb3IoO2l0LmhlYXBfbGVuPDI7KUx0WzIqKHl0PWl0''@;'; put 'put ''LmhlYXBbKytpdC5oZWFwX2xlbl09TmU8Mj8rK05lOjApXT0xLGl0LmRlcHRoW3l0XT0wLGl0Lm9wdF9sZW4tLSxSbiYmKGl0LnN0YXRpY19sZW4tPXd0WzIqeXQrMV0pO2ZvcihDci5tYXhfY29kZT1OZSxQdD1pdC5oZWFwX2xlbj4+MTtQdD49MTtQdC0tKVl0KGl0LEx0LFB0KTt5dD1RZTtk''@;'; put 'put ''b3tQdD1pdC5oZWFwWzFdLGl0LmhlYXBbMV09aXQuaGVhcFtpdC5oZWFwX2xlbi0tXSxZdChpdCxMdCwxKSxRcj1pdC5oZWFwWzFdLGl0LmhlYXBbLS1pdC5oZWFwX21heF09UHQsaXQuaGVhcFstLWl0LmhlYXBfbWF4XT1RcixMdFsyKnl0XT1MdFsyKlB0XStMdFsyKlFyXSxpdC5kZXB0aFt5''@;'; put 'put ''dF09KGl0LmRlcHRoW1B0XT49aXQuZGVwdGhbUXJdP2l0LmRlcHRoW1B0XTppdC5kZXB0aFtRcl0pKzEsTHRbMipQdCsxXT1MdFsyKlFyKzFdPXl0LGl0LmhlYXBbMV09eXQrKyxZdChpdCxMdCwxKX13aGlsZShpdC5oZWFwX2xlbj49Mik7aXQuaGVhcFstLWl0LmhlYXBfbWF4XT1pdC5oZWFw''@;'; put 'put ''WzFdLGZ1bmN0aW9uIHdlKGl0LENyKXt2YXIgeXQscnIsYXQsX3Qsd24sJHQsTHQ9Q3IuZHluX3RyZWUsd3Q9Q3IubWF4X2NvZGUsUm49Q3Iuc3RhdF9kZXNjLnN0YXRpY190cmVlLFFlPUNyLnN0YXRfZGVzYy5oYXNfc3RyZWUsUHQ9Q3Iuc3RhdF9kZXNjLmV4dHJhX2JpdHMsUXI9Q3Iuc3Rh''@;'; put 'put ''dF9kZXNjLmV4dHJhX2Jhc2UsTmU9Q3Iuc3RhdF9kZXNjLm1heF9sZW5ndGgsSHQ9MDtmb3IoX3Q9MDtfdDw9MTU7X3QrKylpdC5ibF9jb3VudFtfdF09MDtmb3IoTHRbMippdC5oZWFwW2l0LmhlYXBfbWF4XSsxXT0wLHl0PWl0LmhlYXBfbWF4KzE7eXQ8NTczO3l0KyspKF90PUx0WzIqTHRb''@;'; put 'put ''MioocnI9aXQuaGVhcFt5dF0pKzFdKzFdKzEpPk5lJiYoX3Q9TmUsSHQrKyksTHRbMipycisxXT1fdCwhKHJyPnd0KSYmKGl0LmJsX2NvdW50W190XSsrLHduPTAscnI+PVFyJiYod249UHRbcnItUXJdKSxpdC5vcHRfbGVuKz0oJHQ9THRbMipycl0pKihfdCt3biksUWUmJihpdC5zdGF0aWNf''@;'; put 'put ''bGVuKz0kdCooUm5bMipycisxXSt3bikpKTtpZigwIT09SHQpe2Rve2ZvcihfdD1OZS0xOzA9PT1pdC5ibF9jb3VudFtfdF07KV90LS07aXQuYmxfY291bnRbX3RdLS0saXQuYmxfY291bnRbX3QrMV0rPTIsaXQuYmxfY291bnRbTmVdLS0sSHQtPTJ9d2hpbGUoSHQ+MCk7Zm9yKF90PU5lOzAh''@;'; put 'put ''PT1fdDtfdC0tKWZvcihycj1pdC5ibF9jb3VudFtfdF07MCE9PXJyOykhKChhdD1pdC5oZWFwWy0teXRdKT53dCkmJihMdFsyKmF0KzFdIT09X3QmJihpdC5vcHRfbGVuKz0oX3QtTHRbMiphdCsxXSkqTHRbMiphdF0sTHRbMiphdCsxXT1fdCkscnItLSl9fShpdCxDcikscHQoTHQsTmUsaXQu''@;'; put 'put ''YmxfY291bnQpfWZ1bmN0aW9uICRlKGl0LENyLEx0KXt2YXIgd3QsUWUsUm49LTEsUHQ9Q3JbMV0sUXI9MCxOZT03LHl0PTQ7Zm9yKDA9PT1QdCYmKE5lPTEzOCx5dD0zKSxDclsyKihMdCsxKSsxXT02NTUzNSx3dD0wO3d0PD1MdDt3dCsrKVFlPVB0LFB0PUNyWzIqKHd0KzEpKzFdLCEoKytR''@;'; put 'put ''cjxOZSYmUWU9PT1QdCkmJihRcjx5dD9pdC5ibF90cmVlWzIqUWVdKz1RcjowIT09UWU/KFFlIT09Um4mJml0LmJsX3RyZWVbMipRZV0rKyxpdC5ibF90cmVlWzMyXSsrKTpRcjw9MTA/aXQuYmxfdHJlZVszNF0rKzppdC5ibF90cmVlWzM2XSsrLFFyPTAsUm49UWUsMD09PVB0PyhOZT0xMzgs''@;'; put 'put ''eXQ9Myk6UWU9PT1QdD8oTmU9Nix5dD0zKTooTmU9Nyx5dD00KSl9ZnVuY3Rpb24gTGUoaXQsQ3IsTHQpe3ZhciB3dCxRZSxSbj0tMSxQdD1DclsxXSxRcj0wLE5lPTcseXQ9NDtmb3IoMD09PVB0JiYoTmU9MTM4LHl0PTMpLHd0PTA7d3Q8PUx0O3d0KyspaWYoUWU9UHQsUHQ9Q3JbMiood3Qr''@;'; put 'put ''MSkrMV0sISgrK1FyPE5lJiZRZT09PVB0KSl7aWYoUXI8eXQpZG97TWUoaXQsUWUsaXQuYmxfdHJlZSl9d2hpbGUoMCE9LS1Rcik7ZWxzZSAwIT09UWU/KFFlIT09Um4mJihNZShpdCxRZSxpdC5ibF90cmVlKSxRci0tKSxNZShpdCwxNixpdC5ibF90cmVlKSx4ZShpdCxRci0zLDIpKTpRcjw9''@;'; put 'put ''MTA/KE1lKGl0LDE3LGl0LmJsX3RyZWUpLHhlKGl0LFFyLTMsMykpOihNZShpdCwxOCxpdC5ibF90cmVlKSx4ZShpdCxRci0xMSw3KSk7UXI9MCxSbj1RZSwwPT09UHQ/KE5lPTEzOCx5dD0zKTpRZT09PVB0PyhOZT02LHl0PTMpOihOZT03LHl0PTQpfX12YXIgVHQ9ITE7ZnVuY3Rpb24gWHQo''@;'; put 'put ''aXQsQ3IsTHQsd3Qpe3hlKGl0LDArKHd0PzE6MCksMyksZnVuY3Rpb24gaHQoaXQsQ3IsTHQsd3Qpe3F0KGl0KSx3dCYmKGtlKGl0LEx0KSxrZShpdCx+THQpKSxPLmFycmF5U2V0KGl0LnBlbmRpbmdfYnVmLGl0LndpbmRvdyxDcixMdCxpdC5wZW5kaW5nKSxpdC5wZW5kaW5nKz1MdH0oaXQs''@;'; put 'put ''Q3IsTHQsITApfU0uX3RyX2luaXQ9ZnVuY3Rpb24geW4oaXQpe1R0fHwoZnVuY3Rpb24gS2UoKXt2YXIgaXQsQ3IsTHQsd3QsUm4sUWU9bmV3IEFycmF5KDE2KTtmb3IoTHQ9MCx3dD0wO3d0PDI4O3d0KyspZm9yKFBlW3d0XT1MdCxpdD0wO2l0PDE8PGtbd3RdO2l0KyspcGVbTHQrK109d3Q7''@;'; put 'put ''Zm9yKHBlW0x0LTFdPXd0LFJuPTAsd3Q9MDt3dDwxNjt3dCsrKWZvcihaZVt3dF09Um4saXQ9MDtpdDwxPDxMW3d0XTtpdCsrKVFbUm4rK109d3Q7Zm9yKFJuPj49Nzt3dDwzMDt3dCsrKWZvcihaZVt3dF09Um48PDcsaXQ9MDtpdDwxPDxMW3d0XS03O2l0KyspUVsyNTYrUm4rK109d3Q7Zm9y''@;'; put 'put ''KENyPTA7Q3I8PTE1O0NyKyspUWVbQ3JdPTA7Zm9yKGl0PTA7aXQ8PTE0MzspcVsyKml0KzFdPTgsaXQrKyxRZVs4XSsrO2Zvcig7aXQ8PTI1NTspcVsyKml0KzFdPTksaXQrKyxRZVs5XSsrO2Zvcig7aXQ8PTI3OTspcVsyKml0KzFdPTcsaXQrKyxRZVs3XSsrO2Zvcig7aXQ8PTI4NzspcVsy''@;'; put 'put ''Kml0KzFdPTgsaXQrKyxRZVs4XSsrO2ZvcihwdChxLDI4NyxRZSksaXQ9MDtpdDwzMDtpdCsrKUdbMippdCsxXT01LEdbMippdF09SWUoaXQsNSk7dmU9bmV3IHFlKHEsaywyNTcsMjg2LDE1KSx1ZT1uZXcgcWUoRyxMLDAsMzAsMTUpLHplPW5ldyBxZShuZXcgQXJyYXkoMCkseSwwLDE5LDcp''@;'; put 'put ''fSgpLFR0PSEwKSxpdC5sX2Rlc2M9bmV3IE9lKGl0LmR5bl9sdHJlZSx2ZSksaXQuZF9kZXNjPW5ldyBPZShpdC5keW5fZHRyZWUsdWUpLGl0LmJsX2Rlc2M9bmV3IE9lKGl0LmJsX3RyZWUsemUpLGl0LmJpX2J1Zj0wLGl0LmJpX3ZhbGlkPTAsWWUoaXQpfSxNLl90cl9zdG9yZWRfYmxvY2s9''@;'; put 'put ''WHQsTS5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gWHIoaXQsQ3IsTHQsd3Qpe3ZhciBSbixRZSxQdD0wO2l0LmxldmVsPjA/KDI9PT1pdC5zdHJtLmRhdGFfdHlwZSYmKGl0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIHh0KGl0KXt2YXIgTHQsQ3I9NDA5MzYyNDQ0Nztmb3IoTHQ9MDtMdDw9''@;'; put 'put ''MzE7THQrKyxDcj4+Pj0xKWlmKDEmQ3ImJjAhPT1pdC5keW5fbHRyZWVbMipMdF0pcmV0dXJuIDA7aWYoMCE9PWl0LmR5bl9sdHJlZVsxOF18fDAhPT1pdC5keW5fbHRyZWVbMjBdfHwwIT09aXQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoTHQ9MzI7THQ8MjU2O0x0KyspaWYoMCE9PWl0''@;'; put 'put ''LmR5bl9sdHJlZVsyKkx0XSlyZXR1cm4gMTtyZXR1cm4gMH0oaXQpKSxVZShpdCxpdC5sX2Rlc2MpLFVlKGl0LGl0LmRfZGVzYyksUHQ9ZnVuY3Rpb24gbnQoaXQpe3ZhciBDcjtmb3IoJGUoaXQsaXQuZHluX2x0cmVlLGl0LmxfZGVzYy5tYXhfY29kZSksJGUoaXQsaXQuZHluX2R0cmVlLGl0''@;'; put 'put ''LmRfZGVzYy5tYXhfY29kZSksVWUoaXQsaXQuYmxfZGVzYyksQ3I9MTg7Q3I+PTMmJjA9PT1pdC5ibF90cmVlWzIqbFtDcl0rMV07Q3ItLSk7cmV0dXJuIGl0Lm9wdF9sZW4rPTMqKENyKzEpKzUrNSs0LENyfShpdCksKFFlPWl0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShSbj1pdC5vcHRfbGVu''@;'; put 'put ''KzMrNz4+PjMpJiYoUm49UWUpKTpSbj1RZT1MdCs1LEx0KzQ8PVJuJiYtMSE9PUNyP1h0KGl0LENyLEx0LHd0KTo0PT09aXQuc3RyYXRlZ3l8fFFlPT09Um4/KHhlKGl0LDIrKHd0PzE6MCksMyksdHQoaXQscSxHKSk6KHhlKGl0LDQrKHd0PzE6MCksMyksZnVuY3Rpb24gcm4oaXQsQ3IsTHQs''@;'; put 'put ''d3Qpe3ZhciBSbjtmb3IoeGUoaXQsQ3ItMjU3LDUpLHhlKGl0LEx0LTEsNSkseGUoaXQsd3QtNCw0KSxSbj0wO1JuPHd0O1JuKyspeGUoaXQsaXQuYmxfdHJlZVsyKmxbUm5dKzFdLDMpO0xlKGl0LGl0LmR5bl9sdHJlZSxDci0xKSxMZShpdCxpdC5keW5fZHRyZWUsTHQtMSl9KGl0LGl0Lmxf''@;'; put 'put ''ZGVzYy5tYXhfY29kZSsxLGl0LmRfZGVzYy5tYXhfY29kZSsxLFB0KzEpLHR0KGl0LGl0LmR5bl9sdHJlZSxpdC5keW5fZHRyZWUpKSxZZShpdCksd3QmJnF0KGl0KX0sTS5fdHJfdGFsbHk9ZnVuY3Rpb24gc24oaXQsQ3IsTHQpe3JldHVybiBpdC5wZW5kaW5nX2J1ZltpdC5kX2J1ZisyKml0''@;'; put 'put ''Lmxhc3RfbGl0XT1Dcj4+PjgmMjU1LGl0LnBlbmRpbmdfYnVmW2l0LmRfYnVmKzIqaXQubGFzdF9saXQrMV09MjU1JkNyLGl0LnBlbmRpbmdfYnVmW2l0LmxfYnVmK2l0Lmxhc3RfbGl0XT0yNTUmTHQsaXQubGFzdF9saXQrKywwPT09Q3I/aXQuZHluX2x0cmVlWzIqTHRdKys6KGl0Lm1hdGNo''@;'; put 'put ''ZXMrKyxDci0tLGl0LmR5bl9sdHJlZVsyKihwZVtMdF0rMjU2KzEpXSsrLGl0LmR5bl9kdHJlZVsyKkNlKENyKV0rKyksaXQubGFzdF9saXQ9PT1pdC5saXRfYnVmc2l6ZS0xfSxNLl90cl9hbGlnbj1mdW5jdGlvbiBRdChpdCl7eGUoaXQsMiwzKSxNZShpdCwyNTYscSksZnVuY3Rpb24gYmUo''@;'; put 'put ''aXQpezE2PT09aXQuYmlfdmFsaWQ/KGtlKGl0LGl0LmJpX2J1ZiksaXQuYmlfYnVmPTAsaXQuYmlfdmFsaWQ9MCk6aXQuYmlfdmFsaWQ+PTgmJihpdC5wZW5kaW5nX2J1ZltpdC5wZW5kaW5nKytdPTI1NSZpdC5iaV9idWYsaXQuYmlfYnVmPj49OCxpdC5iaV92YWxpZC09OCl9KGl0KX19LHsi''@;'; put 'put ''Li4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihULEEsTSl7InVzZSBzdHJpY3QiO0EuZXhwb3J0cz1mdW5jdGlvbiBPKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5l''@;'; put 'put ''eHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSw2MzU3OCh0ZSxqLGQpeyFmdW5jdGlvbiBoKGYpe2YudmVyc2lvbj0iMS4y''@;'; put 'put ''MDIxMTEyMi4xIjt2YXIgVD0xMjAwLEE9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT1kKDQyOTI0KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPWQoNDI5MjQpKSk7Zm9yKHZhciBNPVs4NzQsOTMyLDkzNiw5NDks''@;'; put 'put ''OTUwLDFlNF0sTz0wO088PTg7KytPKU0ucHVzaCgxMjUwK08pO3ZhciBEPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4Njox''@;'; put 'put ''MjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0sRT1mdW5jdGlvbihnKXstMSE9TS5pbmRleE9mKGcpJiYoQT1EWzBdPWcpfSxGPWZ1bmN0aW9uKGcpe1Q9ZyxFKGcpfTtmdW5jdGlvbiBOKCl7RigxMjAwKSxmdW5jdGlvbiBCKCl7RSgxMjUyKX0oKX1mdW5j''@;'; put 'put ''dGlvbiBIKGcpe2Zvcih2YXIgeD1bXSx3PTAsVj1nLmxlbmd0aDt3PFY7Kyt3KXhbd109Zy5jaGFyQ29kZUF0KHcpO3JldHVybiB4fXZhciBVPWZ1bmN0aW9uKGcpe3ZhciB4PWcuY2hhckNvZGVBdCgwKSx3PWcuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT14JiYyNTQ9PXc/ZnVuY3Rpb24g''@;'; put 'put ''eihnKXtmb3IodmFyIHg9W10sdz0wO3c8Zy5sZW5ndGg+PjE7Kyt3KXhbd109U3RyaW5nLmZyb21DaGFyQ29kZShnLmNoYXJDb2RlQXQoMip3KSsoZy5jaGFyQ29kZUF0KDIqdysxKTw8OCkpO3JldHVybiB4LmpvaW4oIiIpfShnLnNsaWNlKDIpKToyNTQ9PXgmJjI1NT09dz9mdW5jdGlvbiBa''@;'; put 'put ''KGcpe2Zvcih2YXIgeD1bXSx3PTA7dzxnLmxlbmd0aD4+MTsrK3cpeFt3XT1TdHJpbmcuZnJvbUNoYXJDb2RlKGcuY2hhckNvZGVBdCgyKncrMSkrKGcuY2hhckNvZGVBdCgyKncpPDw4KSk7cmV0dXJuIHguam9pbigiIil9KGcuc2xpY2UoMikpOjY1Mjc5PT14P2cuc2xpY2UoMSk6Z30sSz1m''@;'; put 'put ''dW5jdGlvbih4KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh4KX0sWD1mdW5jdGlvbih4KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh4KX07dHlwZW9mIGNwdGFibGU8InUiJiYoRj1mdW5jdGlvbihnKXtUPWcsRShnKX0sVT1mdW5jdGlvbihnKXtyZXR1cm4gMjU1PT09Zy5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYyNTQ9PT1nLmNoYXJDb2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxIKGcuc2xpY2UoMikpKTpnfSxLPWZ1bmN0aW9uKHgpe3JldHVybiAxMjAwPT09VD9TdHJpbmcuZnJvbUNoYXJDb2RlKHgpOmNwdGFibGUudXRpbHMuZGVjb2RlKFQsWzI1NSZ4LHg+Pjhd''@;'; put 'put ''KVswXX0sWD1mdW5jdGlvbih4KXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoQSxbeF0pWzBdfSk7dmFyIGhlPWZ1bmN0aW9uKCl7dmFyIHg9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtyZXR1cm57ZW5jb2Rl''@;'; put 'put ''OmZ1bmN0aW9uKHcpe2Zvcih2YXIgVj0iIixXPTAsZWU9MCxsZT0wLG9lPTAsZGU9MCxEZT0wLFJlPTAsVmU9MDtWZTx3Lmxlbmd0aDspb2U9KFc9dy5jaGFyQ29kZUF0KFZlKyspKT4+MixkZT0oMyZXKTw8NHwoZWU9dy5jaGFyQ29kZUF0KFZlKyspKT4+NCxEZT0oMTUmZWUpPDwyfChsZT13''@;'; put 'put ''LmNoYXJDb2RlQXQoVmUrKykpPj42LFJlPTYzJmxlLGlzTmFOKGVlKT9EZT1SZT02NDppc05hTihsZSkmJihSZT02NCksVis9eC5jaGFyQXQob2UpK3guY2hhckF0KGRlKSt4LmNoYXJBdChEZSkreC5jaGFyQXQoUmUpO3JldHVybiBWfSxkZWNvZGU6ZnVuY3Rpb24oVil7dmFyIFc9IiIsZGU9''@;'; put 'put ''MCxEZT0wLFJlPTAsVmU9MDtWPVYucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBHZT0wO0dlPFYubGVuZ3RoOylkZT14LmluZGV4T2YoVi5jaGFyQXQoR2UrKykpLERlPXguaW5kZXhPZihWLmNoYXJBdChHZSsrKSksVys9U3RyaW5nLmZyb21DaGFyQ29kZShkZTw8MnxEZT4+''@;'; put 'put ''NCksNjQhPT0oUmU9eC5pbmRleE9mKFYuY2hhckF0KEdlKyspKSkmJihXKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZEZSk8PDR8UmU+PjIpKSw2NCE9PShWZT14LmluZGV4T2YoVi5jaGFyQXQoR2UrKykpKSYmKFcrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmUmUpPDw2fFZlKSk7cmV0dXJu''@;'; put 'put ''IFd9fX0oKSxfZT10eXBlb2YgQnVmZmVyPCJ1IiYmdHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9uczwidSImJiEhcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLG1lPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgQnVmZmVyPCJ1Iil7dmFyIEZlPSFCdWZmZXIuZnJvbTtpZigh''@;'; put 'put ''RmUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7RmU9ITB9bWU9RmU/ZnVuY3Rpb24oZyx4KXtyZXR1cm4geD9uZXcgQnVmZmVyKGcseCk6bmV3IEJ1ZmZlcihnKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY3x8KEJ1ZmZlci5hbGxvYz1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gbmV3IEJ1ZmZlcihnKX0pLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEJ1ZmZlcihnKX0pfWZ1bmN0aW9uIFIoZyl7cmV0dXJuIF9lP0J1ZmZlci5hbGxvYyhnKTpuZXcgQXJyYXkoZyl9ZnVuY3Rpb24g''@;'; put 'put ''cyhnKXtyZXR1cm4gX2U/QnVmZmVyLmFsbG9jVW5zYWZlKGcpOm5ldyBBcnJheShnKX12YXIgdT1mdW5jdGlvbih4KXtyZXR1cm4gX2U/bWUoeCwiYmluYXJ5Iik6eC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHcpe3JldHVybiAyNTUmdy5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHYoZyl7''@;'; put 'put ''aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1IilyZXR1cm4gdShnKTtmb3IodmFyIHg9bmV3IEFycmF5QnVmZmVyKGcubGVuZ3RoKSx3PW5ldyBVaW50OEFycmF5KHgpLFY9MDtWIT1nLmxlbmd0aDsrK1Ypd1tWXT0yNTUmZy5jaGFyQ29kZUF0KFYpO3JldHVybiB4fWZ1bmN0aW9uIHAoZyl7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheShnKSlyZXR1cm4gZy5tYXAoZnVuY3Rpb24oVil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoVil9KS5qb2luKCIiKTtmb3IodmFyIHg9W10sdz0wO3c8Zy5sZW5ndGg7Kyt3KXhbd109U3RyaW5nLmZyb21DaGFyQ29kZShnW3ddKTtyZXR1cm4geC5qb2luKCIiKX1m''@;'; put 'put ''dW5jdGlvbiBrKGcpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO2lmKGcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gayhuZXcgVWludDhBcnJheShnKSk7Zm9yKHZhciB4PW5ldyBBcnJheShnLmxlbmd0aCksdz0wO3c8Zy5s''@;'; put 'put ''ZW5ndGg7Kyt3KXhbd109Z1t3XTtyZXR1cm4geH12YXIgTD1mdW5jdGlvbihnKXt2YXIgeD1bXTtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKHcpe0FycmF5LmlzQXJyYXkodyk/eD14LmNvbmNhdCh3KToodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ3IGluc3RhbmNlb2YgVWludDhBcnJheXx8''@;'; put 'put ''dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSYmKHg9eC5jb25jYXQoayh3KSkpfSkseH0seT0vXHUwMDAwL2csbD0vW1x1MDAwMS1cdTAwMDZdL2csYj17fSxxPWZ1bmN0aW9uKHgpe2Z1bmN0aW9uIHcoZW4pe2Zvcih2YXIgTW49IiIsVW49ZW4ubGVu''@;'; put 'put ''Z3RoLTE7VW4+PTA7KU1uKz1lbi5jaGFyQXQoVW4tLSk7cmV0dXJuIE1ufWZ1bmN0aW9uIFYoZW4sTW4pe2Zvcih2YXIgVW49IiI7VW4ubGVuZ3RoPE1uOylVbis9ZW47cmV0dXJuIFVufWZ1bmN0aW9uIFcoZW4sTW4pe3ZhciBVbj0iIitlbjtyZXR1cm4gVW4ubGVuZ3RoPj1Nbj9VbjpWKCIw''@;'; put 'put ''IixNbi1Vbi5sZW5ndGgpK1VufWZ1bmN0aW9uIGVlKGVuLE1uKXt2YXIgVW49IiIrZW47cmV0dXJuIFVuLmxlbmd0aD49TW4/VW46VigiICIsTW4tVW4ubGVuZ3RoKStVbn1mdW5jdGlvbiBsZShlbixNbil7dmFyIFVuPSIiK2VuO3JldHVybiBVbi5sZW5ndGg+PU1uP1VuOlVuK1YoIiAiLE1u''@;'; put 'put ''LVVuLmxlbmd0aCl9eC52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBEZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBSZShlbixNbil7cmV0dXJuIGVuPkRlfHxlbjwtRGU/ZnVuY3Rpb24gb2UoZW4sTW4pe3ZhciBVbj0iIitNYXRoLnJvdW5kKGVuKTtyZXR1cm4gVW4ubGVuZ3RoPj1Nbj9V''@;'; put 'put ''bjpWKCIwIixNbi1Vbi5sZW5ndGgpK1VufShlbixNbik6ZnVuY3Rpb24gZGUoZW4sTW4pe3ZhciBVbj0iIitlbjtyZXR1cm4gVW4ubGVuZ3RoPj1Nbj9VbjpWKCIwIixNbi1Vbi5sZW5ndGgpK1VufShNYXRoLnJvdW5kKGVuKSxNbil9ZnVuY3Rpb24gVmUoZW4sTW4pe3JldHVybiBlbi5sZW5n''@;'; put 'put ''dGg+PTcrKE1uPU1ufHwwKSYmMTAzPT0oMzJ8ZW4uY2hhckNvZGVBdChNbikpJiYxMDE9PSgzMnxlbi5jaGFyQ29kZUF0KE1uKzEpKSYmMTEwPT0oMzJ8ZW4uY2hhckNvZGVBdChNbisyKSkmJjEwMT09KDMyfGVuLmNoYXJDb2RlQXQoTW4rMykpJiYxMTQ9PSgzMnxlbi5jaGFyQ29kZUF0KE1u''@;'; put 'put ''KzQpKSYmOTc9PSgzMnxlbi5jaGFyQ29kZUF0KE1uKzUpKSYmMTA4PT0oMzJ8ZW4uY2hhckNvZGVBdChNbis2KSl9ZnVuY3Rpb24gR2UoZW4pe2Zvcih2YXIgTW49W10sVW49T2JqZWN0LmtleXMoZW4pLHdpPTA7d2khPT1Vbi5sZW5ndGg7Kyt3aSlNbltlbltVblt3aV1dXT1Vblt3aV07cmV0''@;'; put 'put ''dXJuIE1ufXZhciBldD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0sWyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxidD1bWyJKIiwiSmFuIiwiSmFudWFy''@;'; put 'put ''eSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsiSiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVy''@;'; put 'put ''Il0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVuY3Rpb24gSmUoZW4pe2VuWzBdPSJHZW5lcmFsIixlblsxXT0iMCIsZW5bMl09IjAuMDAiLGVuWzNdPSIjLCMjMCIsZW5bNF09IiMsIyMwLjAwIixlbls5XT0i''@;'; put 'put ''MCUiLGVuWzEwXT0iMC4wMCUiLGVuWzExXT0iMC4wMEUrMDAiLGVuWzEyXT0iIyA/Lz8iLGVuWzEzXT0iIyA/Py8/PyIsZW5bMTRdPSJtL2QveXkiLGVuWzE1XT0iZC1tbW0teXkiLGVuWzE2XT0iZC1tbW0iLGVuWzE3XT0ibW1tLXl5IixlblsxOF09Img6bW0gQU0vUE0iLGVuWzE5XT0iaDpt''@;'; put 'put ''bTpzcyBBTS9QTSIsZW5bMjBdPSJoOm1tIixlblsyMV09Img6bW06c3MiLGVuWzIyXT0ibS9kL3l5IGg6bW0iLGVuWzM3XT0iIywjIzAgOygjLCMjMCkiLGVuWzM4XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIsZW5bMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixlbls0MF09IiMsIyMwLjAwO1tS''@;'; put 'put ''ZWRdKCMsIyMwLjAwKSIsZW5bNDVdPSJtbTpzcyIsZW5bNDZdPSJbaF06bW06c3MiLGVuWzQ3XT0ibW1zcy4wIixlbls0OF09IiMjMC4wRSswIixlbls0OV09IkAiLGVuWzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLExu''@;'; put 'put ''KGVuKX12YXIgZnQ9e307SmUoZnQpO3ZhciBSdD1bXSxTdD0wO2ZvcihTdD01O1N0PD04OysrU3QpUnRbU3RdPTMyK1N0O2ZvcihTdD0yMztTdDw9MjY7KytTdClSdFtTdF09MDtmb3IoU3Q9Mjc7U3Q8PTMxOysrU3QpUnRbU3RdPTE0O2ZvcihTdD01MDtTdDw9NTg7KytTdClSdFtTdF09MTQ7''@;'; put 'put ''Zm9yKFN0PTU5O1N0PD02MjsrK1N0KVJ0W1N0XT1TdC01ODtmb3IoU3Q9Njc7U3Q8PTY4OysrU3QpUnRbU3RdPVN0LTU4O2ZvcihTdD03MjtTdDw9NzU7KytTdClSdFtTdF09U3QtNTg7Zm9yKFN0PTY3O1N0PD02ODsrK1N0KVJ0W1N0XT1TdC01Nztmb3IoU3Q9NzY7U3Q8PTc4OysrU3QpUnRb''@;'; put 'put ''U3RdPVN0LTU2O2ZvcihTdD03OTtTdDw9ODE7KytTdClSdFtTdF09U3QtMzQ7dmFyIEF0PVtdO2Z1bmN0aW9uIHp0KGVuLE1uLFVuKXtmb3IodmFyIHdpPWVuPDA/LTE6MSxjcj1lbip3aSxSaT0wLHlyPTEsTGk9MCxRYT0xLE5pPTAsX2E9MCxPaT1NYXRoLmZsb29yKGNyKTtOaTxNbiYmKExp''@;'; put 'put ''PShPaT1NYXRoLmZsb29yKGNyKSkqeXIrUmksX2E9T2kqTmkrUWEsIShjci1PaTw1ZS04KSk7KWNyPTEvKGNyLU9pKSxSaT15cix5cj1MaSxRYT1OaSxOaT1fYTtpZihfYT5NbiYmKE5pPk1uPyhfYT1RYSxMaT1SaSk6KF9hPU5pLExpPXlyKSksIVVuKXJldHVyblswLHdpKkxpLF9hXTt2YXIg''@;'; put 'put ''UnM9TWF0aC5mbG9vcih3aSpMaS9fYSk7cmV0dXJuW1JzLHdpKkxpLVJzKl9hLF9hXX1mdW5jdGlvbiBTbihlbixNbixVbil7aWYoZW4+Mjk1ODQ2NXx8ZW48MClyZXR1cm4gbnVsbDt2YXIgd2k9MHxlbixjcj1NYXRoLmZsb29yKDg2NDAwKihlbi13aSkpLFJpPTAseXI9W10sTGk9e0Q6d2ks''@;'; put 'put ''VDpjcix1Ojg2NDAwKihlbi13aSktY3IseTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhMaS51KTwxZS02JiYoTGkudT0wKSxNbiYmTW4uZGF0ZTE5MDQmJih3aSs9MTQ2MiksTGkudT4uOTk5OSYmKExpLnU9MCw4NjQwMD09KytjciYmKExpLlQ9Y3I9MCwrK3dpLCsr''@;'; put 'put ''TGkuRCkpLDYwPT09d2kpeXI9VW4/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLFJpPTM7ZWxzZSBpZigwPT09d2kpeXI9VW4/WzEzMTcsOCwyOV06WzE5MDAsMSwwXSxSaT02O2Vsc2V7d2k+NjAmJi0td2k7dmFyIFFhPW5ldyBEYXRlKDE5MDAsMCwxKTtRYS5zZXREYXRlKFFhLmdldERhdGUo''@;'; put 'put ''KSt3aS0xKSx5cj1bUWEuZ2V0RnVsbFllYXIoKSxRYS5nZXRNb250aCgpKzEsUWEuZ2V0RGF0ZSgpXSxSaT1RYS5nZXREYXkoKSx3aTw2MCYmKFJpPShSaSs2KSU3KSxVbiYmKFJpPWZ1bmN0aW9uIGFvKGVuLE1uKXtNblswXS09NTgxO3ZhciBVbj1lbi5nZXREYXkoKTtyZXR1cm4gZW48NjAm''@;'; put 'put ''JihVbj0oVW4rNiklNyksVW59KFFhLHlyKSl9cmV0dXJuIExpLnk9eXJbMF0sTGkubT15clsxXSxMaS5kPXlyWzJdLExpLlM9Y3IlNjAsY3I9TWF0aC5mbG9vcihjci82MCksTGkuTT1jciU2MCxjcj1NYXRoLmZsb29yKGNyLzYwKSxMaS5IPWNyLExpLnE9UmksTGl9QXRbNV09QXRbNjNdPSci''@;'; put 'put ''JCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyxBdFs2XT1BdFs2NF09JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsQXRbN109QXRbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxBdFs4XT1BdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4w''@;'; put 'put ''MFxcKScsQXRbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxBdFs0Ml09J18oIiQiKiAjLCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLEF0WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18o''@;'; put 'put ''KiAiLSI/P18pO18oQF8pJyxBdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKScseC5wYXJzZV9kYXRlX2NvZGU9U247dmFyIGxyPW5ldyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLG1uPWxyLmdldFRpbWUoKSxkcj1uZXcg''@;'; put 'put ''RGF0ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gR24oZW4sTW4pe3ZhciBVbj1lbi5nZXRUaW1lKCk7cmV0dXJuIE1uP1VuLT0xMjYyMzA0ZTU6ZW4+PWRyJiYoVW4rPTg2NGU1KSwoVW4tKG1uKzZlNCooZW4uZ2V0VGltZXpvbmVPZmZzZXQoKS1sci5nZXRUaW1lem9uZU9mZnNldCgpKSkp''@;'; put 'put ''Lzg2NGU1fXZhciBIbj0iIixocj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwiOiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRlIjp7eToiaiIsZDoidCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0sIml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19''@;'; put 'put ''LE5uPWhyW0huLnRvTG93ZXJDYXNlKCldfHxoclsiZW4tdXMiXSx0cj1HZShObiksdmk9IiQiLFBpPSIiLElpPSIsIixTcj0iLiIsRm49Ii8iO2Z1bmN0aW9uIExuKGVuKXtzd2l0Y2goKEhufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6ZW5bMjddPSJbJC00MDRdZS9tL2QiLGVu''@;'; put 'put ''WzI4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsZW5bMjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxlblszMF09J20iLyJkIi8ieXknLGVuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxlblszMl09J2hoIlx1NjY0MiJt''@;'; put 'put ''bSJcdTUyMDYiJyxlblszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsZW5bMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxlblszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJc''@;'; put 'put ''dTc5ZDIiJyxlblszNl09IlskLTQwNF1lL20vZCIsZW5bNTBdPSJbJC00MDRdZS9tL2QiLGVuWzUxXT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsZW5bNTJdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxlbls1M109J1x1NGUw''@;'; put 'put ''YVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxlbls1NF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGVuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsZW5bNTZdPSdcdTRl''@;'; put 'put ''MGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsZW5bNTddPSJbJC00MDRdZS9tL2QiLGVuWzU4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6ZW5bMjddPSd5eXl5Ilx1NWU3NCJtIlx1Njcw''@;'; put 'put ''OCInLGVuWzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxlblsyOV09J20iXHU2NzA4ImQiXHU2NWU1IicsZW5bMzBdPSdtIi0iZCItInl5JyxlblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsZW5bMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyxlblszM109J2giXHU2NWY2''@;'; put 'put ''Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxlblszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsZW5bMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxlblszNl09J3l5eXkiXHU1ZTc0Im0i''@;'; put 'put ''XHU2NzA4IicsZW5bNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGVuWzUxXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxlbls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsZW5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGVuWzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxlbls1NV09J1x1''@;'; put 'put ''NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsZW5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxlbls1N109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsZW5bNThdPSdtIlx1NjcwOCJkIlx1NjVl''@;'; put 'put ''NSInO2JyZWFrO2Nhc2UiamEtanAiOmVuWzI3XT0nWyQtNDExXWdlIi4ibSIuImQnLGVuWzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsZW5bMjldPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxlblszMF09J20iLyJkIi8ieXknLGVu''@;'; put 'put ''WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxlblszMl09J2giXHU2NjQyIm1tIlx1NTIwNiInLGVuWzMzXT0naCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGVuWzM0XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxlblszNV09J20iXHU2NzA4ImQiXHU2NWU1Iics''@;'; put 'put ''ZW5bMzZdPSdbJC00MTFdZ2UiLiJtIi4iZCcsZW5bNTBdPSdbJC00MTFdZ2UiLiJtIi4iZCcsZW5bNTFdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxlbls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsZW5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGVuWzU0''@;'; put 'put ''XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsZW5bNTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGVuWzU2XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxlbls1N109J1skLTQxMV1nZSIuIm0iLiJkJyxlbls1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJk''@;'; put 'put ''Ilx1NjVlNSInO2JyZWFrO2Nhc2Uia28ta3IiOmVuWzI3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsZW5bMjhdPSJtbS1kZCIsZW5bMjldPSJtbS1kZCIsZW5bMzBdPSJtbS1kZC15eSIsZW5bMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyxl''@;'; put 'put ''blszMl09J2giXHVjMmRjIiBtbSJcdWJkODQiJyxlblszM109J2giXHVjMmRjIiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLGVuWzM0XT0ieXl5eS1tbS1kZCIsZW5bMzVdPSJ5eXl5LW1tLWRkIixlblszNl09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGVuWzUwXT0neXl5''@;'; put 'put ''eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsZW5bNTFdPSJtbS1kZCIsZW5bNTJdPSJ5eXl5LW1tLWRkIixlbls1M109Inl5eXktbW0tZGQiLGVuWzU0XT0ibW0tZGQiLGVuWzU1XT0ieXl5eS1tbS1kZCIsZW5bNTZdPSJ5eXl5LW1tLWRkIixlbls1N109J3l5eXkiXHU1ZTc0IiBt''@;'; put 'put ''bSJcdTY3MDgiIGRkIlx1NjVlNSInLGVuWzU4XT0ibW0tZGQiO2JyZWFrO2Nhc2UidGgtdGgiOmVuWzU5XT0nInQiMCcsZW5bNjBdPScidCIwLjAwJyxlbls2MV09JyJ0IiMsIyMwJyxlbls2Ml09JyJ0IiMsIyMwLjAwJyxlbls2N109InQwJSIsZW5bNjhdPSJ0MC4wMCUiLGVuWzY5XT0idCMg''@;'; put 'put ''Py8/Iixlbls3MF09InQjID8/Lz8/Iixlbls3MV09J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYicsZW5bNzJdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLGVuWzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Jyxl''@;'; put 'put ''bls3NF09J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsZW5bNzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGVuWzc2XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxlbls3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1''@;'; put 'put ''MGUxYiBcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGVuWzc4XT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxlbls3OV09J1tcdTBlMGFdXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxlbls4MF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyxlbls4MV09ImQvbS9iYiJ9''@;'; put 'put ''fXguX2dlbmVyYWxfaW50PWZ1bmN0aW9uIFppKGVuKXtyZXR1cm4gZW4udG9TdHJpbmcoMTApfTt2YXIgX2k9ZnVuY3Rpb24oKXt2YXIgTW49Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC87ZnVuY3Rpb24gVW4oTmkpe3JldHVybi0xPT1OaS5pbmRleE9mKCIuIik/Tmk6TmkucmVwbGFjZShN''@;'; put 'put ''biwiJDEiKX12YXIgd2k9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sY3I9LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0aW9uKF9hKXt2YXIgT2k9ZnVuY3Rpb24gUWEoTmkpe3ZhciBPaSxfYT1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKE5pKSkqTWF0aC5MT0cxMEUpO3Jl''@;'; put 'put ''dHVybiBPaT1fYT49LTQmJl9hPD0tMT9OaS50b1ByZWNpc2lvbigxMCtfYSk6TWF0aC5hYnMoX2EpPD05P2Z1bmN0aW9uIHlyKE5pKXt2YXIgX2E9Tmk8MD8xMjoxMSxPaT1VbihOaS50b0ZpeGVkKDEyKSk7cmV0dXJuIE9pLmxlbmd0aDw9X2F8fChPaT1OaS50b1ByZWNpc2lvbigxMCkpLmxl''@;'; put 'put ''bmd0aDw9X2E/T2k6TmkudG9FeHBvbmVudGlhbCg1KX0oTmkpOjEwPT09X2E/TmkudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1bmN0aW9uIExpKE5pKXt2YXIgX2E9VW4oTmkudG9GaXhlZCgxMSkpO3JldHVybiBfYS5sZW5ndGg+KE5pPDA/MTI6MTEpfHwiMCI9PT1fYXx8Ii0wIj09PV9h''@;'; put 'put ''P05pLnRvUHJlY2lzaW9uKDYpOl9hfShOaSksVW4oZnVuY3Rpb24gUmkoTmkpe3JldHVybi0xPT1OaS5pbmRleE9mKCJFIik/Tmk6TmkucmVwbGFjZSh3aSwiJDFFIikucmVwbGFjZShjciwiJDEwJDIiKX0oT2kudG9VcHBlckNhc2UoKSkpfShfYSk7cmV0dXJuIiwiPT09SWkmJiIuIj09PVNy''@;'; put 'put ''P09pOk9pLnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbihScyl7cmV0dXJuIiwiPT1Scz9JaTpTcn0pfX0oKTtmdW5jdGlvbiBwYShlbixNbil7c3dpdGNoKHR5cGVvZiBlbil7Y2FzZSJzdHJpbmciOnJldHVybiBlbjtjYXNlImJvb2xlYW4iOnJldHVybiBlbj8iVFJVRSI6IkZBTFNFIjtjYXNl''@;'; put 'put ''Im51bWJlciI6cmV0dXJuKDB8ZW4pPT09ZW4/ZW4udG9TdHJpbmcoMTApOl9pKGVuKTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7Y2FzZSJvYmplY3QiOmlmKG51bGw9PWVuKXJldHVybiIiO2lmKGVuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gVTEoMTQsR24oZW4sTW4mJk1uLmRhdGUxOTA0''@;'; put 'put ''KSxNbil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBHZW5lcmFsIGZvcm1hdDogIitlbil9eC5fZ2VuZXJhbF9udW09X2kseC5fZ2VuZXJhbD1wYTt2YXIgUWk9Ilx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1''@;'; put 'put ''OSIuc3BsaXQoIiIpO2Z1bmN0aW9uIERvKGVuLE1uLFVuLHdpKXt2YXIgUWEsY3I9IiIsUmk9MCx5cj0wLExpPVVuLnksTmk9MDtzd2l0Y2goZW4pe2Nhc2UgOTg6TGk9VW4ueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKE1uLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpRYT1MaSUxMDAsTmk9MjticmVh''@;'; put 'put ''aztkZWZhdWx0OlFhPUxpJTFlNCxOaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRjaChNbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6UWE9VW4ubSxOaT1Nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBidFtVbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gYnRbVW4ubS0xXVswXTtkZWZhdWx0OnJl''@;'; put 'put ''dHVybiBidFtVbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChNbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6UWE9VW4uZCxOaT1Nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBldFtVbi5xXVswXTtkZWZhdWx0OnJldHVybiBldFtVbi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0''@;'; put 'put ''Y2goTW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlFhPTErKFVuLkgrMTEpJTEyLE5pPU1uLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitNbn1icmVhaztjYXNlIDcyOnN3aXRjaChNbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6UWE9VW4uSCxOaT1Nbi5sZW5n''@;'; put 'put ''dGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrTW59YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goTW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlFhPVVuLk0sTmk9TW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrTW59YnJlYWs7Y2Fz''@;'; put 'put ''ZSAxMTU6aWYoInMiIT1NbiYmInNzIiE9TW4mJiIuMCIhPU1uJiYiLjAwIiE9TW4mJiIuMDAwIiE9TW4pdGhyb3ciYmFkIHNlY29uZCBmb3JtYXQ6ICIrTW47cmV0dXJuIDAhPT1Vbi51fHwicyIhPU1uJiYic3MiIT1Nbj8oeXI9d2k+PTI/Mz09PXdpPzFlMzoxMDA6MT09PXdpPzEwOjEsKFJp''@;'; put 'put ''PU1hdGgucm91bmQoeXIqKFVuLlMrVW4udSkpKT49NjAqeXImJihSaT0wKSwicyI9PT1Nbj8wPT09Umk/IjAiOiIiK1JpL3lyOihjcj1XKFJpLDIrd2kpLCJzcyI9PT1Nbj9jci5zdWJzdHIoMCwyKToiLiIrY3Iuc3Vic3RyKDIsTW4ubGVuZ3RoLTEpKSk6VyhVbi5TLE1uLmxlbmd0aCk7Y2Fz''@;'; put 'put ''ZSA5MDpzd2l0Y2goTW4pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOlFhPTI0KlVuLkQrVW4uSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjpRYT02MCooMjQqVW4u''@;'; put 'put ''RCtVbi5IKStVbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10iOlFhPTYwKig2MCooMjQqVW4uRCtVbi5IKStVbi5NKStNYXRoLnJvdW5kKFVuLlMrVW4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3Jt''@;'; put 'put ''YXQ6ICIrTW59Tmk9Mz09PU1uLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6UWE9TGksTmk9MTticmVhaztjYXNlIDM2MjM6UWE9VW4uZCxOaT1Nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaChNbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6UWE9VW4ubSxOaT1Nbi5sZW5ndGg7YnJl''@;'; put 'put ''YWs7Y2FzZSAzOnJldHVybiBidFtVbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gYnRbVW4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBidFtVbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMzYxMTpzd2l0Y2goTGk9VW4ueSs1NDMsTW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlFhPUxpJTEwMCxOaT0yO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6UWE9TGklMWU0LE5pPTR9YnJlYWs7Y2FzZSAzNTk0OlFhPVVuLkgsTmk9TW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwOTpRYT1Vbi5NLE5pPU1uLmxlbmd0aDticmVhaztjYXNlIDM2MDc6UWE9VW4uUyxOaT1Nbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBlbi50b1N0''@;'; put 'put ''cmluZygxNil9dmFyIF9hPU5pPjA/VyhRYSxOaSk6IiI7cmV0dXJuKDkwPT1lbj9Nbi5jaGFyQ29kZUF0KDEpPDM1ODQ6ZW48MzU4NCk/X2E6X2EucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihPaSl7cmV0dXJuIFFpWytPaV19KX1mdW5jdGlvbiBqYShlbil7aWYoZW4ubGVuZ3RoPD0zKXJl''@;'; put 'put ''dHVybiBlbjtmb3IodmFyIFVuPWVuLmxlbmd0aCUzLHdpPWVuLnN1YnN0cigwLFVuKTtVbiE9ZW4ubGVuZ3RoO1VuKz0zKXdpKz0od2kubGVuZ3RoPjA/IiwiOiIiKStlbi5zdWJzdHIoVW4sMyk7cmV0dXJuIHdpfXZhciBtbz1mdW5jdGlvbigpe3ZhciBNbj0vJS9nO2Z1bmN0aW9uIGNyKGhu''@;'; put 'put ''LE50KXt2YXIgS3Qsdm49aG4uaW5kZXhPZigiRSIpLWhuLmluZGV4T2YoIi4iKS0xO2lmKGhuLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1OdClyZXR1cm4iMC4wRSswIjtpZihOdDwwKXJldHVybiItIitjcihobiwtTnQpO3ZhciBqbj1obi5pbmRleE9mKCIuIik7LTE9PT1qbiYmKGpu''@;'; put 'put ''PWhuLmluZGV4T2YoIkUiKSk7dmFyIG1yPU1hdGguZmxvb3IoTWF0aC5sb2coTnQpKk1hdGguTE9HMTBFKSVqbjtpZihtcjwwJiYobXIrPWpuKSwtMT09PShLdD0oTnQvTWF0aC5wb3coMTAsbXIpKS50b1ByZWNpc2lvbih2bisxKyhqbittciklam4pKS5pbmRleE9mKCJlIikpe3ZhciBOcj1N''@;'; put 'put ''YXRoLmZsb29yKE1hdGgubG9nKE50KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09S3QuaW5kZXhPZigiLiIpP0t0PUt0LmNoYXJBdCgwKSsiLiIrS3Quc3Vic3RyKDEpKyJFKyIrKE5yLUt0Lmxlbmd0aCttcik6S3QrPSJFKyIrKE5yLW1yKTsiMC4iPT09S3Quc3Vic3RyKDAsMik7KUt0PShLdD1L''@;'; put 'put ''dC5jaGFyQXQoMCkrS3Quc3Vic3RyKDIsam4pKyIuIitLdC5zdWJzdHIoMitqbikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIpLnJlcGxhY2UoL14wK1wuLywiMC4iKTtLdD1LdC5yZXBsYWNlKC9cKy0vLCItIil9S3Q9S3QucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxm''@;'; put 'put ''dW5jdGlvbihDaSwkcixZaSxqaSl7cmV0dXJuICRyK1lpK2ppLnN1YnN0cigwLChqbittciklam4pKyIuIitqaS5zdWJzdHIobXIpKyJFIn0pfWVsc2UgS3Q9TnQudG9FeHBvbmVudGlhbCh2bik7cmV0dXJuIGhuLm1hdGNoKC9FXCswMCQvKSYmS3QubWF0Y2goL2VbKy1dXGQkLykmJihLdD1L''@;'; put 'put ''dC5zdWJzdHIoMCxLdC5sZW5ndGgtMSkrIjAiK0t0LmNoYXJBdChLdC5sZW5ndGgtMSkpLGhuLm1hdGNoKC9FXC0vKSYmS3QubWF0Y2goL2VcKy8pJiYoS3Q9S3QucmVwbGFjZSgvZVwrLywiZSIpKSxLdC5yZXBsYWNlKCJlIiwiRSIpfXZhciBSaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8s''@;'; put 'put ''UWE9L14jKjAqXC4oWzAjXSspLyxOaT0vXCkuKlswI10vLF9hPS9cKCMjI1wpICMjI1xcPy0jIyMjLztmdW5jdGlvbiBPaShobil7Zm9yKHZhciBLdCxOdD0iIix2bj0wO3ZuIT1obi5sZW5ndGg7Kyt2bilzd2l0Y2goS3Q9aG4uY2hhckNvZGVBdCh2bikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2''@;'; put 'put ''MzpOdCs9IiAiO2JyZWFrO2Nhc2UgNDg6TnQrPSIwIjticmVhaztkZWZhdWx0Ok50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEt0KX1yZXR1cm4gTnR9ZnVuY3Rpb24gUnMoaG4sTnQpe3ZhciBLdD1NYXRoLnBvdygxMCxOdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChobipLdCkvS3R9ZnVuY3Rpb24g''@;'; put 'put ''VHMoaG4sTnQpe2lmKE50PjExKXJldHVybiBUcyhobiwxMSkqTWF0aC5wb3coMTAsTnQtMTEpO3ZhciBLdD1obi1NYXRoLmZsb29yKGhuKSx2bj1NYXRoLnBvdygxMCxOdCk7cmV0dXJuIE50PCgiIitNYXRoLnJvdW5kKEt0KnZuKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChLdCp2bil9ZnVuY3Rp''@;'; put 'put ''b24gQmwoaG4sTnQsS3Qpe2lmKDQwPT09aG4uY2hhckNvZGVBdCgwKSYmIU50Lm1hdGNoKE5pKSl7dmFyIHZuPU50LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBLdD49MD9CbCgibiIsdm4sS3QpOiIoIitCbCgibiIsdm4sLUt0''@;'; put 'put ''KSsiKSJ9aWYoNDQ9PT1OdC5jaGFyQ29kZUF0KE50Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gd2koaG4sTnQsS3Qpe2Zvcih2YXIgdm49TnQubGVuZ3RoLTE7NDQ9PT1OdC5jaGFyQ29kZUF0KHZuLTEpOyktLXZuO3JldHVybiBtbyhobixOdC5zdWJzdHIoMCx2biksS3QvTWF0aC5wb3co''@;'; put 'put ''MTAsMyooTnQubGVuZ3RoLXZuKSkpfShobixOdCxLdCk7aWYoLTEhPT1OdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIFVuKGhuLE50LEt0KXt2YXIgdm49TnQucmVwbGFjZShNbiwiIiksam49TnQubGVuZ3RoLXZuLmxlbmd0aDtyZXR1cm4gbW8oaG4sdm4sS3QqTWF0aC5wb3coMTAs''@;'; put 'put ''MipqbikpK1YoIiUiLGpuKX0oaG4sTnQsS3QpO2lmKC0xIT09TnQuaW5kZXhPZigiRSIpKXJldHVybiBjcihOdCxLdCk7aWYoMzY9PT1OdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitCbChobixOdC5zdWJzdHIoIiAiPT1OdC5jaGFyQXQoMSk/MjoxKSxLdCk7dmFyIGpuLG1yLE5yLENpLCRy''@;'; put 'put ''PU1hdGguYWJzKEt0KSxZaT1LdDwwPyItIjoiIjtpZihOdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gWWkrUmUoJHIsTnQubGVuZ3RoKTtpZihOdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiIwIj09PShqbj1SZShLdCwwKSkmJihqbj0iIiksam4ubGVuZ3RoPk50Lmxlbmd0aD9qbjpPaShOdC5z''@;'; put 'put ''dWJzdHIoMCxOdC5sZW5ndGgtam4ubGVuZ3RoKSkram47aWYobXI9TnQubWF0Y2goUmkpKXJldHVybiBmdW5jdGlvbiB5cihobixOdCxLdCl7dmFyIHZuPXBhcnNlSW50KGhuWzRdLDEwKSxqbj1NYXRoLnJvdW5kKE50KnZuKSxtcj1NYXRoLmZsb29yKGpuL3ZuKSxOcj1qbi1tcip2bixDaT12''@;'; put 'put ''bjtyZXR1cm4gS3QrKDA9PT1tcj8iIjoiIittcikrIiAiKygwPT09TnI/VigiICIsaG5bMV0ubGVuZ3RoKzEraG5bNF0ubGVuZ3RoKTplZShOcixoblsxXS5sZW5ndGgpK2huWzJdKyIvIitoblszXStXKENpLGhuWzRdLmxlbmd0aCkpfShtciwkcixZaSk7aWYoTnQubWF0Y2goL14jKzArJC8p''@;'; put 'put ''KXJldHVybiBZaStSZSgkcixOdC5sZW5ndGgtTnQuaW5kZXhPZigiMCIpKTtpZihtcj1OdC5tYXRjaChRYSkpcmV0dXJuIGpuPVJzKEt0LG1yWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrT2kobXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitPaShtclsxXSkpLnJlcGxh''@;'; put 'put ''Y2UoL1wuKFxkKikkLyxmdW5jdGlvbihObyx5bCl7cmV0dXJuIi4iK3lsK1YoIjAiLE9pKG1yWzFdKS5sZW5ndGgteWwubGVuZ3RoKX0pLC0xIT09TnQuaW5kZXhPZigiMC4iKT9qbjpqbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKE50PU50LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbXI9''@;'; put 'put ''TnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBZaStScygkcixtclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG1yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobXI9TnQubWF0''@;'; put 'put ''Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIFlpK2phKFJlKCRyLDApKTtpZihtcj1OdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gS3Q8MD8iLSIrQmwoaG4sTnQsLUt0KTpqYSgiIisoTWF0aC5mbG9vcihLdCkrZnVuY3Rpb24gb3UoaG4sTnQpe3JldHVybiBOdDwo''@;'; put 'put ''IiIrTWF0aC5yb3VuZCgoaG4tTWF0aC5mbG9vcihobikpKk1hdGgucG93KDEwLE50KSkpLmxlbmd0aD8xOjB9KEt0LG1yWzFdLmxlbmd0aCkpKSsiLiIrVyhUcyhLdCxtclsxXS5sZW5ndGgpLG1yWzFdLmxlbmd0aCk7aWYobXI9TnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIEJsKGhuLE50''@;'; put 'put ''LnJlcGxhY2UoL14jLCMqLC8sIiIpLEt0KTtpZihtcj1OdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gam49dyhCbChobixOdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxLdCkpLE5yPTAsdyh3KE50LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVu''@;'; put 'put ''Y3Rpb24oTm8pe3JldHVybiBOcjxqbi5sZW5ndGg/am4uY2hhckF0KE5yKyspOiIwIj09PU5vPyIwIjoiIn0pKTtpZihOdC5tYXRjaChfYSkpcmV0dXJuIigiKyhqbj1CbChobiwiIyMjIyMjIyMjIyIsS3QpKS5zdWJzdHIoMCwzKSsiKSAiK2puLnN1YnN0cigzLDMpKyItIitqbi5zdWJzdHIo''@;'; put 'put ''Nik7dmFyIGppPSIiO2lmKG1yPU50Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gTnI9TWF0aC5taW4obXJbNF0ubGVuZ3RoLDcpLENpPXp0KCRyLE1hdGgucG93KDEwLE5yKS0xLCExKSxqbj0iIitZaSwiICI9PShqaT1tbygibiIsbXJbMV0sQ2lbMV0pKS5j''@;'; put 'put ''aGFyQXQoamkubGVuZ3RoLTEpJiYoamk9amkuc3Vic3RyKDAsamkubGVuZ3RoLTEpKyIwIiksam4rPWppK21yWzJdKyIvIittclszXSwoamk9bGUoQ2lbMl0sTnIpKS5sZW5ndGg8bXJbNF0ubGVuZ3RoJiYoamk9T2kobXJbNF0uc3Vic3RyKG1yWzRdLmxlbmd0aC1qaS5sZW5ndGgpKStqaSks''@;'; put 'put ''am4rPWppO2lmKG1yPU50Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBOcj1NYXRoLm1pbihNYXRoLm1heChtclsxXS5sZW5ndGgsbXJbNF0ubGVuZ3RoKSw3KSxZaSsoKENpPXp0KCRyLE1hdGgucG93KDEwLE5yKS0xLCEwKSlbMF18fChDaVsxXT8iIjoi''@;'; put 'put ''MCIpKSsiICIrKENpWzFdP2VlKENpWzFdLE5yKSttclsyXSsiLyIrbXJbM10rbGUoQ2lbMl0sTnIpOlYoIiAiLDIqTnIrMSttclsyXS5sZW5ndGgrbXJbM10ubGVuZ3RoKSk7aWYobXI9TnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIGpuPVJlKEt0LDApLE50Lmxlbmd0aDw9am4ubGVuZ3Ro''@;'; put 'put ''P2puOk9pKE50LnN1YnN0cigwLE50Lmxlbmd0aC1qbi5sZW5ndGgpKStqbjtpZihtcj1OdC5tYXRjaCgvXihbIzA/XSspXC4oWyMwXSspJC8pKXtqbj0iIitLdC50b0ZpeGVkKE1hdGgubWluKG1yWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksTnI9am4uaW5kZXhP''@;'; put 'put ''ZigiLiIpO3ZhciB1bz1OdC5pbmRleE9mKCIuIiktTnIsJGE9TnQubGVuZ3RoLWpuLmxlbmd0aC11bztyZXR1cm4gT2koTnQuc3Vic3RyKDAsdW8pK2puK050LnN1YnN0cihOdC5sZW5ndGgtJGEpKX1pZihtcj1OdC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIE5yPVRzKEt0''@;'; put 'put ''LG1yWzFdLmxlbmd0aCksS3Q8MD8iLSIrQmwoaG4sTnQsLUt0KTpqYShmdW5jdGlvbiB0MChobil7cmV0dXJuIGhuPDIxNDc0ODM2NDcmJmhuPi0yMTQ3NDgzNjQ4PyIiKyhobj49MD8wfGhuOmhuLTF8MCk6IiIrTWF0aC5mbG9vcihobil9KEt0KSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAk''@;'; put 'put ''JiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihObyl7cmV0dXJuIjAwLCIrKE5vLmxlbmd0aDwzP1coMCwzLU5vLmxlbmd0aCk6IiIpK05vfSkrIi4iK1coTnIsbXJbMV0ubGVuZ3RoKTtzd2l0Y2goTnQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIEJsKGhuLCIjLCMjMC4wMCIsS3QpO2Nh''@;'; put 'put ''c2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBiYT1qYShSZSgkciwwKSk7cmV0dXJuIjAiIT09YmE/WWkrYmE6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gQmwoaG4sIiMjIywjIzAuMDAiLEt0KS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJl''@;'; put 'put ''dHVybiBCbChobiwiIywjIzAuMDAiLEt0KS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK050KyJ8Iil9ZnVuY3Rpb24gZG4oaG4sTnQpe3ZhciBLdCx2bj1obi5pbmRleE9mKCJFIiktaG4uaW5kZXhPZigiLiIpLTE7aWYoaG4ubWF0''@;'; put 'put ''Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PU50KXJldHVybiIwLjBFKzAiO2lmKE50PDApcmV0dXJuIi0iK2RuKGhuLC1OdCk7dmFyIGpuPWhuLmluZGV4T2YoIi4iKTstMT09PWpuJiYoam49aG4uaW5kZXhPZigiRSIpKTt2YXIgbXI9TWF0aC5mbG9vcihNYXRoLmxvZyhOdCkqTWF0aC5MT0cx''@;'; put 'put ''MEUpJWpuO2lmKG1yPDAmJihtcis9am4pLCEoS3Q9KE50L01hdGgucG93KDEwLG1yKSkudG9QcmVjaXNpb24odm4rMSsoam4rbXIpJWpuKSkubWF0Y2goL1tFZV0vKSl7dmFyIE5yPU1hdGguZmxvb3IoTWF0aC5sb2coTnQpKk1hdGguTE9HMTBFKTstMT09PUt0LmluZGV4T2YoIi4iKT9LdD1L''@;'; put 'put ''dC5jaGFyQXQoMCkrIi4iK0t0LnN1YnN0cigxKSsiRSsiKyhOci1LdC5sZW5ndGgrbXIpOkt0Kz0iRSsiKyhOci1tciksS3Q9S3QucmVwbGFjZSgvXCstLywiLSIpfUt0PUt0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oQ2ksJHIsWWksamkpe3JldHVybiAk''@;'; put 'put ''citZaStqaS5zdWJzdHIoMCwoam4rbXIpJWpuKSsiLiIramkuc3Vic3RyKG1yKSsiRSJ9KX1lbHNlIEt0PU50LnRvRXhwb25lbnRpYWwodm4pO3JldHVybiBobi5tYXRjaCgvRVwrMDAkLykmJkt0Lm1hdGNoKC9lWystXVxkJC8pJiYoS3Q9S3Quc3Vic3RyKDAsS3QubGVuZ3RoLTEpKyIwIitL''@;'; put 'put ''dC5jaGFyQXQoS3QubGVuZ3RoLTEpKSxobi5tYXRjaCgvRVwtLykmJkt0Lm1hdGNoKC9lXCsvKSYmKEt0PUt0LnJlcGxhY2UoL2VcKy8sImUiKSksS3QucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBUbihobixOdCxLdCl7aWYoNDA9PT1obi5jaGFyQ29kZUF0KDApJiYhTnQubWF0Y2goTmkp''@;'; put 'put ''KXt2YXIgdm49TnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIEt0Pj0wP1RuKCJuIix2bixLdCk6IigiK1RuKCJuIix2biwtS3QpKyIpIn1pZig0ND09PU50LmNoYXJDb2RlQXQoTnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBYcChobixOdCxLdCl7Zm9yKHZhciB2bj1OdC5sZW5ndGgtMTs0ND09PU50LmNoYXJDb2RlQXQodm4tMSk7KS0tdm47cmV0dXJuIG1vKGhuLE50LnN1YnN0cigwLHZuKSxLdC9NYXRoLnBvdygxMCwzKihOdC5sZW5ndGgtdm4pKSl9KGhuLE50LEt0KTtpZigtMSE9PU50LmluZGV4T2YoIiUi''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gWWcoaG4sTnQsS3Qpe3ZhciB2bj1OdC5yZXBsYWNlKE1uLCIiKSxqbj1OdC5sZW5ndGgtdm4ubGVuZ3RoO3JldHVybiBtbyhobix2bixLdCpNYXRoLnBvdygxMCwyKmpuKSkrVigiJSIsam4pfShobixOdCxLdCk7aWYoLTEhPT1OdC5pbmRleE9mKCJFIikpcmV0''@;'; put 'put ''dXJuIGRuKE50LEt0KTtpZigzNj09PU50LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK1RuKGhuLE50LnN1YnN0cigiICI9PU50LmNoYXJBdCgxKT8yOjEpLEt0KTt2YXIgam4sbXIsTnIsQ2ksJHI9TWF0aC5hYnMoS3QpLFlpPUt0PDA/Ii0iOiIiO2lmKE50Lm1hdGNoKC9eMDArJC8pKXJldHVy''@;'; put 'put ''biBZaStXKCRyLE50Lmxlbmd0aCk7aWYoTnQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gam49IiIrS3QsMD09PUt0JiYoam49IiIpLGpuLmxlbmd0aD5OdC5sZW5ndGg/am46T2koTnQuc3Vic3RyKDAsTnQubGVuZ3RoLWpuLmxlbmd0aCkpK2puO2lmKG1yPU50Lm1hdGNoKFJpKSlyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gTGkoaG4sTnQsS3Qpe3JldHVybiBLdCsoMD09PU50PyIiOiIiK050KStWKCIgIixoblsxXS5sZW5ndGgrMitobls0XS5sZW5ndGgpfShtciwkcixZaSk7aWYoTnQubWF0Y2goL14jKzArJC8pKXJldHVybiBZaStXKCRyLE50Lmxlbmd0aC1OdC5pbmRleE9mKCIwIikpO2lmKG1y''@;'; put 'put ''PU50Lm1hdGNoKFFhKSlyZXR1cm4gam49KGpuPSgiIitLdCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrT2kobXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitPaShtclsxXSkpKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oTm8seWwpe3JldHVybiIuIit5bCtWKCIwIixPaShtclsx''@;'; put 'put ''XSkubGVuZ3RoLXlsLmxlbmd0aCl9KSwtMSE9PU50LmluZGV4T2YoIjAuIik/am46am4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihOdD1OdC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLG1yPU50Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gWWkrKCIiKyRyKS5yZXBsYWNlKC9cLihc''@;'; put 'put ''ZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyxtclsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKG1yPU50Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBZaStqYSgiIiskcik7aWYobXI9TnQubWF0Y2goL14jLCMjMFwu''@;'; put 'put ''KFsjMF0qMCkkLykpcmV0dXJuIEt0PDA/Ii0iK1RuKGhuLE50LC1LdCk6amEoIiIrS3QpKyIuIitWKCIwIixtclsxXS5sZW5ndGgpO2lmKG1yPU50Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBUbihobixOdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxLdCk7aWYobXI9TnQubWF0Y2goL14oWzAj''@;'; put 'put ''XSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIGpuPXcoVG4oaG4sTnQucmVwbGFjZSgvW1xcLV0vZywiIiksS3QpKSxOcj0wLHcodyhOdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKE5vKXtyZXR1cm4gTnI8am4ubGVuZ3RoP2puLmNoYXJBdChOcisrKToi''@;'; put 'put ''MCI9PT1Obz8iMCI6IiJ9KSk7aWYoTnQubWF0Y2goX2EpKXJldHVybiIoIisoam49VG4oaG4sIiMjIyMjIyMjIyMiLEt0KSkuc3Vic3RyKDAsMykrIikgIitqbi5zdWJzdHIoMywzKSsiLSIram4uc3Vic3RyKDYpO3ZhciBqaT0iIjtpZihtcj1OdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/''@;'; put 'put ''KShbIzA/XSspLykpcmV0dXJuIE5yPU1hdGgubWluKG1yWzRdLmxlbmd0aCw3KSxDaT16dCgkcixNYXRoLnBvdygxMCxOciktMSwhMSksam49IiIrWWksIiAiPT0oamk9bW8oIm4iLG1yWzFdLENpWzFdKSkuY2hhckF0KGppLmxlbmd0aC0xKSYmKGppPWppLnN1YnN0cigwLGppLmxlbmd0aC0x''@;'; put 'put ''KSsiMCIpLGpuKz1qaSttclsyXSsiLyIrbXJbM10sKGppPWxlKENpWzJdLE5yKSkubGVuZ3RoPG1yWzRdLmxlbmd0aCYmKGppPU9pKG1yWzRdLnN1YnN0cihtcls0XS5sZW5ndGgtamkubGVuZ3RoKSkramkpLGpuKz1qaTtpZihtcj1OdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsj''@;'; put 'put ''MD9dKykvKSlyZXR1cm4gTnI9TWF0aC5taW4oTWF0aC5tYXgobXJbMV0ubGVuZ3RoLG1yWzRdLmxlbmd0aCksNyksWWkrKChDaT16dCgkcixNYXRoLnBvdygxMCxOciktMSwhMCkpWzBdfHwoQ2lbMV0/IiI6IjAiKSkrIiAiKyhDaVsxXT9lZShDaVsxXSxOcikrbXJbMl0rIi8iK21yWzNdK2xl''@;'; put 'put ''KENpWzJdLE5yKTpWKCIgIiwyKk5yKzErbXJbMl0ubGVuZ3RoK21yWzNdLmxlbmd0aCkpO2lmKG1yPU50Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBOdC5sZW5ndGg8PShqbj0iIitLdCkubGVuZ3RoP2puOk9pKE50LnN1YnN0cigwLE50Lmxlbmd0aC1qbi5sZW5ndGgpKStqbjtpZihtcj1O''@;'; put 'put ''dC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe2puPSIiK0t0LnRvRml4ZWQoTWF0aC5taW4obXJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxOcj1qbi5pbmRleE9mKCIuIik7dmFyIHVvPU50LmluZGV4T2YoIi4iKS1OciwkYT1OdC5sZW5ndGgtam4ubGVu''@;'; put 'put ''Z3RoLXVvO3JldHVybiBPaShOdC5zdWJzdHIoMCx1bykram4rTnQuc3Vic3RyKE50Lmxlbmd0aC0kYSkpfWlmKG1yPU50Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gS3Q8MD8iLSIrVG4oaG4sTnQsLUt0KTpqYSgiIitLdCkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIp''@;'; put 'put ''LnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihObyl7cmV0dXJuIjAwLCIrKE5vLmxlbmd0aDwzP1coMCwzLU5vLmxlbmd0aCk6IiIpK05vfSkrIi4iK1coMCxtclsxXS5sZW5ndGgpO3ZhciBiYT1qYSgiIiskcik7c3dpdGNoKE50KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMs''@;'; put 'put ''IyMjIjpyZXR1cm4iMCIhPT1iYT9ZaStiYToiIjtjYXNlIiMsIzAwIjpyZXR1cm4iMDAiIT09KGJhPVcoYmEsMikpP1lpK2JhOiIiO2RlZmF1bHQ6aWYoTnQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBUbihobixOdC5zbGljZSgwLE50Lmxhc3RJbmRleE9mKCIuIikpLEt0KStPaShOdC5z''@;'; put 'put ''bGljZShOdC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrTnQrInwiKX1yZXR1cm4gZnVuY3Rpb24oTnQsS3Qsdm4pe3JldHVybiIwLDAiPT1LdCYmKEt0PSIjLCMwMCIpLCgwfHZuKT09PXZuP1RuKE50LEt0LHZuKTpCbChOdCxLdCx2''@;'; put 'put ''bil9fSgpO2Z1bmN0aW9uIGNvKGVuKXtmb3IodmFyIE1uPVtdLFVuPSExLHdpPTAsY3I9MDt3aTxlbi5sZW5ndGg7Kyt3aSlzd2l0Y2goZW4uY2hhckNvZGVBdCh3aSkpe2Nhc2UgMzQ6VW49IVVuO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrd2k7YnJlYWs7Y2FzZSA1OTpNbltN''@;'; put 'put ''bi5sZW5ndGhdPWVuLnN1YnN0cihjcix3aS1jciksY3I9d2krMX1pZihNbltNbi5sZW5ndGhdPWVuLnN1YnN0cihjciksITA9PT1Vbil0aHJvdyBuZXcgRXJyb3IoIkZvcm1hdCB8IitlbisifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBNbn14Ll9zcGxpdD1jbzt2YXIgQmk9L1xb''@;'; put 'put ''W0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIGtsKGVuKXtmb3IodmFyIE1uPTAsVW49IiIsd2k9IiI7TW48ZW4ubGVuZ3RoOylzd2l0Y2goVW49ZW4uY2hhckF0KE1uKSl7Y2FzZSJHIjpWZShlbixNbikmJihNbis9NiksTW4rKzticmVhaztjYXNlJyInOmZvcig7MzQh''@;'; put 'put ''PT1lbi5jaGFyQ29kZUF0KCsrTW4pJiZNbjxlbi5sZW5ndGg7KTsrK01uO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6TW4rPTI7YnJlYWs7Y2FzZSJAIjorK01uO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1lbi5jaGFyQXQoTW4rMSl8fCIyIj09PWVuLmNoYXJBdChNbisxKSlyZXR1''@;'; put 'put ''cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT1lbi5zdWJz''@;'; put 'put ''dHIoTW4sMykudG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PWVuLnN1YnN0cihNbiw1KS50b1VwcGVyQ2FzZSgpfHwiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1lbi5zdWJzdHIoTW4sNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK01uO2JyZWFrO2Nhc2UiWyI6Zm9yKHdpPVVuOyJd''@;'; put 'put ''IiE9PWVuLmNoYXJBdChNbisrKSYmTW48ZW4ubGVuZ3RoOyl3aSs9ZW4uY2hhckF0KE1uKTtpZih3aS5tYXRjaChCaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtNbjxlbi5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKFVuPWVuLmNoYXJBdCgrK01u''@;'; put 'put ''KSk+LTF8fCJcXCI9PVVuJiYiLSI9PWVuLmNoYXJBdChNbisxKSYmIjAjIi5pbmRleE9mKGVuLmNoYXJBdChNbisyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3IoO2VuLmNoYXJBdCgrK01uKT09PVVuOyk7YnJlYWs7Y2FzZSIqIjorK01uLCgiICI9PWVuLmNoYXJBdChNbil8fCIqIj09ZW4u''@;'; put 'put ''Y2hhckF0KE1uKSkmJisrTW47YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisrTW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKDtNbjxlbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGVu''@;'; put 'put ''LmNoYXJBdCgrK01uKSk+LTE7KTticmVhaztkZWZhdWx0OisrTW59cmV0dXJuITF9ZnVuY3Rpb24gT24oZW4sTW4sVW4sd2kpe2Zvcih2YXIgTmksX2EsT2ksY3I9W10sUmk9IiIseXI9MCxMaT0iIixRYT0idCIsUnM9IkgiO3lyPGVuLmxlbmd0aDspc3dpdGNoKExpPWVuLmNoYXJBdCh5cikp''@;'; put 'put ''e2Nhc2UiRyI6aWYoIVZlKGVuLHlyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitMaSsiIGluICIrZW4pO2NyW2NyLmxlbmd0aF09e3Q6IkciLHY6IkdlbmVyYWwifSx5cis9NzticmVhaztjYXNlJyInOmZvcihSaT0iIjszNCE9PShPaT1lbi5jaGFyQ29kZUF0''@;'; put 'put ''KCsreXIpKSYmeXI8ZW4ubGVuZ3RoOylSaSs9U3RyaW5nLmZyb21DaGFyQ29kZShPaSk7Y3JbY3IubGVuZ3RoXT17dDoidCIsdjpSaX0sKyt5cjticmVhaztjYXNlIlxcIjp2YXIgVHM9ZW4uY2hhckF0KCsreXIpO2NyW2NyLmxlbmd0aF09e3Q6IigiPT09VHN8fCIpIj09PVRzP1RzOiJ0Iix2''@;'; put 'put ''OlRzfSwrK3lyO2JyZWFrO2Nhc2UiXyI6Y3JbY3IubGVuZ3RoXT17dDoidCIsdjoiICJ9LHlyKz0yO2JyZWFrO2Nhc2UiQCI6Y3JbY3IubGVuZ3RoXT17dDoiVCIsdjpNbn0sKyt5cjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09ZW4uY2hhckF0KHlyKzEpfHwiMiI9PT1lbi5jaGFy''@;'; put 'put ''QXQoeXIrMSkpe2lmKG51bGw9PU5pJiZudWxsPT0oTmk9U24oTW4sVW4sIjIiPT09ZW4uY2hhckF0KHlyKzEpKSkpcmV0dXJuIiI7Y3JbY3IubGVuZ3RoXT17dDoiWCIsdjplbi5zdWJzdHIoeXIsMil9LFFhPUxpLHlyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6''@;'; put 'put ''Y2FzZSJTIjpjYXNlIkUiOkxpPUxpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUw''@;'; put 'put ''ZTE3IjppZihNbjwwfHxudWxsPT1OaSYmbnVsbD09KE5pPVNuKE1uLFVuKSkpcmV0dXJuIiI7Zm9yKFJpPUxpOysreXI8ZW4ubGVuZ3RoJiZlbi5jaGFyQXQoeXIpLnRvTG93ZXJDYXNlKCk9PT1MaTspUmkrPUxpOyJtIj09PUxpJiYiaCI9PT1RYS50b0xvd2VyQ2FzZSgpJiYoTGk9Ik0iKSwi''@;'; put 'put ''aCI9PT1MaSYmKExpPVJzKSxjcltjci5sZW5ndGhdPXt0OkxpLHY6Uml9LFFhPUxpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6dmFyIHQwPXt0OkxpLHY6TGl9O2lmKG51bGw9PU5pJiYoTmk9U24oTW4sVW4pKSwiQS9QIj09PWVuLnN1YnN0cih5ciwzKS50b1VwcGVyQ2Fz''@;'; put 'put ''ZSgpPyhudWxsIT1OaSYmKHQwLnY9TmkuSD49MTI/IlAiOiJBIiksdDAudD0iVCIsUnM9ImgiLHlyKz0zKToiQU0vUE0iPT09ZW4uc3Vic3RyKHlyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPU5pJiYodDAudj1OaS5IPj0xMj8iUE0iOiJBTSIpLHQwLnQ9IlQiLHlyKz01LFJzPSJoIik6Ilx1''@;'; put 'put ''NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09ZW4uc3Vic3RyKHlyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPU5pJiYodDAudj1OaS5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksdDAudD0iVCIseXIrPTUsUnM9ImgiKToodDAudD0idCIsKyt5ciksbnVsbD09TmkmJiJU''@;'; put 'put ''Ij09PXQwLnQpcmV0dXJuIiI7Y3JbY3IubGVuZ3RoXT10MCxRYT1MaTticmVhaztjYXNlIlsiOmZvcihSaT1MaTsiXSIhPT1lbi5jaGFyQXQoeXIrKykmJnlyPGVuLmxlbmd0aDspUmkrPWVuLmNoYXJBdCh5cik7aWYoIl0iIT09Umkuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIg''@;'; put 'put ''YmxvY2s6IHwnK1JpKyJ8IjtpZihSaS5tYXRjaChCaSkpe2lmKG51bGw9PU5pJiZudWxsPT0oTmk9U24oTW4sVW4pKSlyZXR1cm4iIjtjcltjci5sZW5ndGhdPXt0OiJaIix2OlJpLnRvTG93ZXJDYXNlKCl9LFFhPVJpLmNoYXJBdCgxKX1lbHNlIFJpLmluZGV4T2YoIiQiKT4tMSYmKFJpPShS''@;'; put 'put ''aS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixrbChlbil8fChjcltjci5sZW5ndGhdPXt0OiJ0Iix2OlJpfSkpO2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9Tmkpe2ZvcihSaT1MaTsrK3lyPGVuLmxlbmd0aCYmIjAiPT09KExpPWVuLmNoYXJBdCh5cikpOylSaSs9TGk7Y3Jb''@;'; put 'put ''Y3IubGVuZ3RoXT17dDoicyIsdjpSaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMiOmZvcihSaT1MaTsrK3lyPGVuLmxlbmd0aCYmIjAjPy4sRSstJSIuaW5kZXhPZihMaT1lbi5jaGFyQXQoeXIpKT4tMTspUmkrPUxpO2NyW2NyLmxlbmd0aF09e3Q6Im4iLHY6Uml9O2JyZWFrO2Nhc2UiPyI6Zm9y''@;'; put 'put ''KFJpPUxpO2VuLmNoYXJBdCgrK3lyKT09PUxpOylSaSs9TGk7Y3JbY3IubGVuZ3RoXT17dDpMaSx2OlJpfSxRYT1MaTticmVhaztjYXNlIioiOisreXIsKCIgIj09ZW4uY2hhckF0KHlyKXx8IioiPT1lbi5jaGFyQXQoeXIpKSYmKyt5cjticmVhaztjYXNlIigiOmNhc2UiKSI6Y3JbY3IubGVu''@;'; put 'put ''Z3RoXT17dDoxPT09d2k/InQiOkxpLHY6TGl9LCsreXI7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKFJpPUxpO3lyPGVuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoZW4uY2hhckF0''@;'; put 'put ''KCsreXIpKT4tMTspUmkrPWVuLmNoYXJBdCh5cik7Y3JbY3IubGVuZ3RoXT17dDoiRCIsdjpSaX07YnJlYWs7Y2FzZSIgIjpjcltjci5sZW5ndGhdPXt0OkxpLHY6TGl9LCsreXI7YnJlYWs7Y2FzZSIkIjpjcltjci5sZW5ndGhdPXt0OiJ0Iix2OnZpfSwrK3lyO2JyZWFrO2Nhc2UiLyI6Y3Jb''@;'; put 'put ''Y3IubGVuZ3RoXT1jci5sZW5ndGg+MCYma2woY3JbY3IubGVuZ3RoLTFdLnYpP3t0OiJ0Iix2OkZufTp7dDoidCIsdjoiLyJ9LCsreXI7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoTGkpKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK0xpKyIgaW4gIitlbik7Y3JbY3IubGVuZ3RoXT17dDoidCIsdjpMaX0sKyt5cn12YXIgWWcsQmw9MCxYcD0wO2Zvcih5cj1jci5sZW5ndGgtMSxRYT0idCI7eXI+PTA7LS15cilzd2l0Y2goY3JbeXJdLnQpe2Nhc2UiaCI6Y2FzZSJI''@;'; put 'put ''Ijpjclt5cl0udD1ScyxRYT0iaCIsQmw8MSYmKEJsPTEpO2JyZWFrO2Nhc2UicyI6KFlnPWNyW3lyXS52Lm1hdGNoKC9cLjArJC8pKSYmKFhwPU1hdGgubWF4KFhwLFlnWzBdLmxlbmd0aC0xKSksQmw8MyYmKEJsPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6UWE9Y3JbeXJd''@;'; put 'put ''LnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT1RYSYmKGNyW3lyXS50PSJNIixCbDwyJiYoQmw9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpCbDwxJiZjclt5cl0udi5tYXRjaCgvW0hoXS8pJiYoQmw9MSksQmw8MiYmY3JbeXJdLnYubWF0Y2goL1tNbV0vKSYmKEJsPTIpLEJsPDMmJmNy''@;'; put 'put ''W3lyXS52Lm1hdGNoKC9bU3NdLykmJihCbD0zKX1zd2l0Y2goQmwpe2Nhc2UgMDpicmVhaztjYXNlIDE6TmkudT49LjUmJihOaS51PTAsKytOaS5TKSxOaS5TPj02MCYmKE5pLlM9MCwrK05pLk0pLE5pLk0+PTYwJiYoTmkuTT0wLCsrTmkuSCk7YnJlYWs7Y2FzZSAyOk5pLnU+PS41JiYoTmku''@;'; put 'put ''dT0wLCsrTmkuUyksTmkuUz49NjAmJihOaS5TPTAsKytOaS5NKX12YXIgVG4sZG49IiI7Zm9yKHlyPTA7eXI8Y3IubGVuZ3RoOysreXIpc3dpdGNoKGNyW3lyXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6Y3JbeXJdLnY9IiIsY3JbeXJdLnQ9Ijsi''@;'; put 'put ''O2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6''@;'; put 'put ''Y3JbeXJdLnY9RG8oY3JbeXJdLnQuY2hhckNvZGVBdCgwKSxjclt5cl0udixOaSxYcCksY3JbeXJdLnQ9InQiO2JyZWFrO2Nhc2UibiI6Y2FzZSI/Ijpmb3IoVG49eXIrMTtudWxsIT1jcltUbl0mJigiPyI9PT0oTGk9Y3JbVG5dLnQpfHwiRCI9PT1MaXx8KCIgIj09PUxpfHwidCI9PT1MaSkm''@;'; put 'put ''Jm51bGwhPWNyW1RuKzFdJiYoIj8iPT09Y3JbVG4rMV0udHx8InQiPT09Y3JbVG4rMV0udCYmIi8iPT09Y3JbVG4rMV0udil8fCIoIj09PWNyW3lyXS50JiYoIiAiPT09TGl8fCJuIj09PUxpfHwiKSI9PT1MaSl8fCJ0Ij09PUxpJiYoIi8iPT09Y3JbVG5dLnZ8fCIgIj09PWNyW1RuXS52JiZu''@;'; put 'put ''dWxsIT1jcltUbisxXSYmIj8iPT1jcltUbisxXS50KSk7KWNyW3lyXS52Kz1jcltUbl0udixjcltUbl09e3Y6IiIsdDoiOyJ9LCsrVG47ZG4rPWNyW3lyXS52LHlyPVRuLTE7YnJlYWs7Y2FzZSJHIjpjclt5cl0udD0idCIsY3JbeXJdLnY9cGEoTW4sVW4pfXZhciBOdCxLdCxobj0iIjtpZihk''@;'; put 'put ''bi5sZW5ndGg+MCl7NDA9PWRuLmNoYXJDb2RlQXQoMCk/KE50PU1uPDAmJjQ1PT09ZG4uY2hhckNvZGVBdCgwKT8tTW46TW4sS3Q9bW8oIm4iLGRuLE50KSk6KEt0PW1vKCJuIixkbixOdD1NbjwwJiZ3aT4xPy1NbjpNbiksTnQ8MCYmY3JbMF0mJiJ0Ij09Y3JbMF0udCYmKEt0PUt0LnN1YnN0''@;'; put 'put ''cigxKSxjclswXS52PSItIitjclswXS52KSksVG49KEt0PUt0LnJlcGxhY2UoL1ssXC5dL2csZnVuY3Rpb24oTnIpe3JldHVybiIuIj09TnI/U3I6SWl9KSkubGVuZ3RoLTE7dmFyIHZuPWNyLmxlbmd0aDtmb3IoeXI9MDt5cjxjci5sZW5ndGg7Kyt5cilpZihudWxsIT1jclt5cl0mJiJ0IiE9''@;'; put 'put ''Y3JbeXJdLnQmJmNyW3lyXS52LmluZGV4T2YoIi4iKT4tMSl7dm49eXI7YnJlYWt9dmFyIGpuPWNyLmxlbmd0aDtpZih2bj09PWNyLmxlbmd0aCYmLTE9PT1LdC5pbmRleE9mKCJFIikpe2Zvcih5cj1jci5sZW5ndGgtMTt5cj49MDstLXlyKW51bGw9PWNyW3lyXXx8LTE9PT0ibj8iLmluZGV4''@;'; put 'put ''T2YoY3JbeXJdLnQpfHwoVG4+PWNyW3lyXS52Lmxlbmd0aC0xP2NyW3lyXS52PUt0LnN1YnN0cigxKyhUbi09Y3JbeXJdLnYubGVuZ3RoKSxjclt5cl0udi5sZW5ndGgpOlRuPDA/Y3JbeXJdLnY9IiI6KGNyW3lyXS52PUt0LnN1YnN0cigwLFRuKzEpLFRuPS0xKSxjclt5cl0udD0idCIsam49''@;'; put 'put ''eXIpO1RuPj0wJiZqbjxjci5sZW5ndGgmJihjcltqbl0udj1LdC5zdWJzdHIoMCxUbisxKStjcltqbl0udil9ZWxzZSBpZih2biE9PWNyLmxlbmd0aCYmLTE9PT1LdC5pbmRleE9mKCJFIikpe2ZvcihUbj1LdC5pbmRleE9mKFNyKS0xLHlyPXZuO3lyPj0wOy0teXIpaWYobnVsbCE9Y3JbeXJd''@;'; put 'put ''JiYtMSE9PSJuPyIuaW5kZXhPZihjclt5cl0udCkpe2ZvcihfYT1jclt5cl0udi5pbmRleE9mKCIuIik+LTEmJnlyPT09dm4/Y3JbeXJdLnYuaW5kZXhPZigiLiIpLTE6Y3JbeXJdLnYubGVuZ3RoLTEsaG49Y3JbeXJdLnYuc3Vic3RyKF9hKzEpO19hPj0wOy0tX2EpVG4+PTAmJigiMCI9PT1j''@;'; put 'put ''clt5cl0udi5jaGFyQXQoX2EpfHwiIyI9PT1jclt5cl0udi5jaGFyQXQoX2EpKSYmKGhuPUt0LmNoYXJBdChUbi0tKStobik7Y3JbeXJdLnY9aG4sY3JbeXJdLnQ9InQiLGpuPXlyfWZvcihUbj49MCYmam48Y3IubGVuZ3RoJiYoY3Jbam5dLnY9S3Quc3Vic3RyKDAsVG4rMSkrY3Jbam5dLnYp''@;'; put 'put ''LFRuPUt0LmluZGV4T2YoU3IpKzEseXI9dm47eXI8Y3IubGVuZ3RoOysreXIpaWYobnVsbCE9Y3JbeXJdJiYoLTEhPT0ibj8oIi5pbmRleE9mKGNyW3lyXS50KXx8eXI9PT12bikpe2ZvcihfYT1jclt5cl0udi5pbmRleE9mKFNyKT4tMSYmeXI9PT12bj9jclt5cl0udi5pbmRleE9mKFNyKSsx''@;'; put 'put ''OjAsaG49Y3JbeXJdLnYuc3Vic3RyKDAsX2EpO19hPGNyW3lyXS52Lmxlbmd0aDsrK19hKVRuPEt0Lmxlbmd0aCYmKGhuKz1LdC5jaGFyQXQoVG4rKykpO2NyW3lyXS52PWhuLGNyW3lyXS50PSJ0Iixqbj15cn19fWZvcih5cj0wO3lyPGNyLmxlbmd0aDsrK3lyKW51bGwhPWNyW3lyXSYmIm4/''@;'; put 'put ''Ii5pbmRleE9mKGNyW3lyXS50KT4tMSYmKGNyW3lyXS52PW1vKGNyW3lyXS50LGNyW3lyXS52LE50PXdpPjEmJk1uPDAmJnlyPjAmJiItIj09PWNyW3lyLTFdLnY/LU1uOk1uKS5yZXBsYWNlKC9cLi9nLFNyKS5yZXBsYWNlKC8sLyxJaSksY3JbeXJdLnQ9InQiKTt2YXIgbXI9IiI7Zm9yKHly''@;'; put 'put ''PTA7eXIhPT1jci5sZW5ndGg7Kyt5ciludWxsIT1jclt5cl0mJihtcis9Y3JbeXJdLnYpO3JldHVybiBtcn14LmlzX2RhdGU9a2wseC5fZXZhbD1Pbjt2YXIgUHM9L1xbWz08Pl0vLFpjPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBEYyhlbixNbil7''@;'; put 'put ''aWYobnVsbD09TW4pcmV0dXJuITE7dmFyIFVuPXBhcnNlRmxvYXQoTW5bMl0pO3N3aXRjaChNblsxXSl7Y2FzZSI9IjppZihlbj09VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihlbj5VbilyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKGVuPFVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPD4i''@;'; put 'put ''OmlmKGVuIT1VbilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihlbj49VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYoZW48PVVuKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFUxKGVuLE1uLFVuKXtudWxsPT1VbiYmKFVuPXt9KTt2YXIgd2k9IiI7c3dpdGNoKHR5cGVvZiBlbil7''@;'; put 'put ''Y2FzZSJzdHJpbmciOndpPSJtL2QveXkiPT1lbiYmVW4uZGF0ZU5GP1VuLmRhdGVORjplbjticmVhaztjYXNlIm51bWJlciI6bnVsbD09KHdpPTE0PT1lbiYmVW4uZGF0ZU5GP1VuLmRhdGVORjoobnVsbCE9VW4udGFibGU/VW4udGFibGU6ZnQpW2VuXSkmJih3aT1Vbi50YWJsZSYmVW4udGFi''@;'; put 'put ''bGVbUnRbZW5dXXx8ZnRbUnRbZW5dXSksbnVsbD09d2kmJih3aT1BdFtlbl18fCJHZW5lcmFsIil9aWYoVmUod2ksMCkpcmV0dXJuIHBhKE1uLFVuKTtNbiBpbnN0YW5jZW9mIERhdGUmJihNbj1HbihNbixVbi5kYXRlMTkwNCkpO3ZhciBjcj1mdW5jdGlvbiBJYyhlbixNbil7dmFyIFVuPWNv''@;'; put 'put ''KGVuKSx3aT1Vbi5sZW5ndGgsY3I9VW5bd2ktMV0uaW5kZXhPZigiQCIpO2lmKHdpPDQmJmNyPi0xJiYtLXdpLFVuLmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IitVbi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIE1u''@;'; put 'put ''KXJldHVybls0LDQ9PT1Vbi5sZW5ndGh8fGNyPi0xP1VuW1VuLmxlbmd0aC0xXToiQCJdO3N3aXRjaChVbi5sZW5ndGgpe2Nhc2UgMTpVbj1jcj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsVW5bMF1dOltVblswXSxVblswXSxVblswXSwiQCJdO2JyZWFrO2Nhc2UgMjpVbj1j''@;'; put 'put ''cj4tMT9bVW5bMF0sVW5bMF0sVW5bMF0sVW5bMV1dOltVblswXSxVblsxXSxVblswXSwiQCJdO2JyZWFrO2Nhc2UgMzpVbj1jcj4tMT9bVW5bMF0sVW5bMV0sVW5bMF0sVW5bMl1dOltVblswXSxVblsxXSxVblsyXSwiQCJdfXZhciBSaT1Nbj4wP1VuWzBdOk1uPDA/VW5bMV06VW5bMl07aWYo''@;'; put 'put ''LTE9PT1VblswXS5pbmRleE9mKCJbIikmJi0xPT09VW5bMV0uaW5kZXhPZigiWyIpKXJldHVyblt3aSxSaV07aWYobnVsbCE9VW5bMF0ubWF0Y2goUHMpfHxudWxsIT1VblsxXS5tYXRjaChQcykpe3ZhciB5cj1VblswXS5tYXRjaChaYyksTGk9VW5bMV0ubWF0Y2goWmMpO3JldHVybiBEYyhN''@;'; put 'put ''bix5cik/W3dpLFVuWzBdXTpEYyhNbixMaSk/W3dpLFVuWzFdXTpbd2ksVW5bbnVsbCE9eXImJm51bGwhPUxpPzI6MV1dfXJldHVyblt3aSxSaV19KHdpLE1uKTtpZihWZShjclsxXSkpcmV0dXJuIHBhKE1uLFVuKTtpZighMD09PU1uKU1uPSJUUlVFIjtlbHNlIGlmKCExPT09TW4pTW49IkZB''@;'; put 'put ''TFNFIjtlbHNlIGlmKCIiPT09TW58fG51bGw9PU1uKXJldHVybiIiO3JldHVybiBPbihjclsxXSxNbixVbixjclswXSl9ZnVuY3Rpb24gaGMoZW4sTW4pe2lmKCJudW1iZXIiIT10eXBlb2YgTW4pe01uPStNbnx8LTE7Zm9yKHZhciBVbj0wO1VuPDM5MjsrK1VuKWlmKG51bGwhPWZ0W1VuXSl7''@;'; put 'put ''aWYoZnRbVW5dPT1lbil7TW49VW47YnJlYWt9fWVsc2UgTW48MCYmKE1uPVVuKTtNbjwwJiYoTW49MzkxKX1yZXR1cm4gZnRbTW5dPWVuLE1ufXgubG9hZD1oYyx4Ll90YWJsZT1mdCx4LmdldF90YWJsZT1mdW5jdGlvbigpe3JldHVybiBmdH0seC5sb2FkX3RhYmxlPWZ1bmN0aW9uKE1uKXtm''@;'; put 'put ''b3IodmFyIFVuPTA7MzkyIT1VbjsrK1VuKXZvaWQgMCE9PU1uW1VuXSYmaGMoTW5bVW5dLFVuKX0seC5pbml0X3RhYmxlPUplLHguZm9ybWF0PVUxLHguZ2V0bG9jYWxlPWZ1bmN0aW9uIExyKCl7cmV0dXJuIEhufHwiZW4tVVMifSx4LnNldGxvY2FsZT1mdW5jdGlvbiBwcihlbil7aWYoZnVu''@;'; put 'put ''Y3Rpb24gUHIoZW4pe3ZhciBNbj0wO3N3aXRjaCgoSG58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpjYXNlInpoLWNuIjpjYXNlImphLWpwIjpjYXNlImtvLWtyIjpmb3IoTW49Mjc7TW48PTM2OysrTW4pZGVsZXRlIGVuW01uXTtmb3IoTW49NTA7TW48PTU4OysrTW4pZGVsZXRl''@;'; put 'put ''IGVuW01uXTticmVhaztjYXNlInRoLXRoIjpmb3IoTW49NTk7TW48PTYyOysrTW4pZGVsZXRlIGVuW01uXTtmb3IoTW49Njc7TW48PTgxOysrTW4pZGVsZXRlIGVuW01uXX19KGZ0KSxIbj1lbixMbihmdCksdHlwZW9mIEludGw8InUiKXt2YXIgTW49SW50bC5EYXRlVGltZUZvcm1hdChlbik7''@;'; put 'put ''aWYoTW4uZm9ybWF0VG9QYXJ0cyl7Zm9yKHZhciBVbj1Nbi5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1LDAsMCwwKSksd2k9MDt3aTw3Oysrd2kpZXRbd2ldWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoZW4se3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgy''@;'; put 'put ''MDIwLDAsNSt3aSwwLDAsMCkpWzBdLnZhbHVlLGV0W3dpXVswXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGVuLHt3ZWVrZGF5OiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K3dpLDAsMCwwKSlbMF0udmFsdWU7Zm9yKHZhciBjcj0wO2NyPDEyOysrY3IpYnRbY3JdWzJd''@;'; put 'put ''PUludGwuRGF0ZVRpbWVGb3JtYXQoZW4se21vbnRoOiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxjciwyLDAsMCwwKSlbMF0udmFsdWUsYnRbY3JdWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoZW4se21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIw''@;'; put 'put ''MjAsY3IsMiwwLDAsMCkpWzBdLnZhbHVlLGJ0W2NyXVswXT1idFtjcl1bMV0uc2xpY2UoMCwxKTtmb3IodmFyIFJpPSIiLHlyPTA7eXI8VW4ubGVuZ3RoOysreXIpe3ZhciBMaT1Vblt5cl0udmFsdWU7c3dpdGNoKFVuW3lyXS50eXBlKXtjYXNlInllYXIiOlJpKz0yPT1MaS5sZW5ndGg/Inl5''@;'; put 'put ''IjoieXl5eSI7YnJlYWs7Y2FzZSJtb250aCI6UmkrPSIxIj09TGk/Im0iOiIwMSI9PUxpPyJtbSI6TGk9PWJ0WzBdWzFdPyJtbW0iOkxpPT1idFswXVsyXT8ibW1tbSI6TGk9PWJ0WzBdWzBdPyJtbW1tbSI6Im1tIjticmVhaztjYXNlImRheSI6UmkrPSI1Ij09TGk/ImQiOiIwNSI9PUxpPyJk''@;'; put 'put ''ZCI6TGk9PWV0WzBdWzBdPyJkZGQiOkxpPT1ldFswXVsxXT8iZGRkZCI6ImRkIjticmVhaztjYXNlImxpdGVyYWwiOlJpKz1MaS5yZXBsYWNlKC8uL2csIlxcJCYiKSwxPT1MaS5sZW5ndGgmJihGbj1MaSl9fShlbi5tYXRjaCgvZW4vaSkmJmVuLm1hdGNoKC91cy9pKXx8IWVuKSYmKFJpPSJt''@;'; put 'put ''L2QveXkiKSxmdFsxNF09Uml9ZWxzZSJqYS1qcCI9PWVuLnRvTG93ZXJDYXNlKCkmJihmdFsxNF09Inl5eXlcXC9tXFwvZCIpO3ZhciBRYT1JbnRsLk51bWJlckZvcm1hdChlbix7fSkuZm9ybWF0KDEyMzQ1NjcuODkpO1FhJiYoSWk9KFFhLm1hdGNoKC8xKC4qKTIvKXx8W10pWzFdLFNyPShR''@;'; put 'put ''YS5tYXRjaCgvNyguKik4Lyl8fFtdKVsxXSl9aHJbZW4udG9Mb3dlckNhc2UoKV18fChocltlbi50b0xvd2VyQ2FzZSgpXT17Ii4iOlNyLCIsIjpJaX0pLHRyPUdlKE5uPWhyW2VuLnRvTG93ZXJDYXNlKCldfHxoclsiZW4tdXMiXSl9LHgubm9ybWFsaXplPWZ1bmN0aW9uIHdzKGVuKXtmb3Io''@;'; put 'put ''dmFyIE1uPTAsVW49MCx3aT0iIixjcj0iIixSaT0iIix5cj1Obi55fHwieSIsTGk9eXIudG9VcHBlckNhc2UoKSxRYT1Obi5kfHwiZCIsTmk9UWEudG9VcHBlckNhc2UoKSxfYT1OblsiLiJdLE9pPU5uWyIsIl0sUnM9IjAjP0UrLSUiK05uWyIsIl0rX2E7TW48ZW4ubGVuZ3RoOylzd2l0Y2go''@;'; put 'put ''d2k9ZW4uY2hhckF0KE1uKSl7Y2FzZSJHIjpNbisrLFJpKz13aTticmVhaztjYXNlJyInOmZvcihSaSs9d2k7MzQhPT0oVW49ZW4uY2hhckNvZGVBdCgrK01uKSkmJk1uPGVuLmxlbmd0aDspUmkrPVN0cmluZy5mcm9tQ2hhckNvZGUoVW4pO1JpKz0nIicsKytNbjticmVhaztjYXNlIlxcIjpj''@;'; put 'put ''YXNlIl8iOlJpKz1lbi5zbGljZShNbixNbisyKSxNbis9MjticmVhaztjYXNlIkAiOlJpKz13aSwrK01uO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjorK01uLFJpKz13aTticmVhaztjYXNlIHlyOmNhc2UgTGk6Y2FzZSBRYTpjYXNlIE5pOlJpKz10clt3aS50b0xvd2VyQ2FzZSgpXSwrK01uO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiTSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiQSI6Y2FzZSJhIjpSaSs9d2ksKytNbjticmVhaztjYXNlIlsiOmZvcihjcj13aTsiXSIhPT1lbi5jaGFyQXQoTW4rKykmJk1uPGVuLmxlbmd0aDsp''@;'; put 'put ''Y3IrPWVuLmNoYXJBdChNbik7UmkrPWNyO2JyZWFrO2Nhc2UgT2k6UmkrPSciJyt3aSsnIicsKytNbjticmVhaztjYXNlIF9hOmlmKCEoTW48ZW4ubGVuZ3RoJiYoUnMuaW5kZXhPZih3aT1lbi5jaGFyQXQoKytNbikpPi0xfHwiXFwiPT13aSYmIi0iPT1lbi5jaGFyQXQoTW4rMSkmJiIwIyIu''@;'; put 'put ''aW5kZXhPZihlbi5jaGFyQXQoTW4rMikpPi0xKSkpe1JpKz0nIicrX2ErJyInO2JyZWFrfXdpPV9hLC0tTW47Y2FzZSIwIjpjYXNlIiMiOmZvcihSaSs9dHJbd2kudG9Mb3dlckNhc2UoKV18fHdpO01uPGVuLmxlbmd0aCYmKFJzLmluZGV4T2Yod2k9ZW4uY2hhckF0KCsrTW4pKT4tMXx8Ilxc''@;'; put 'put ''Ij09d2kmJiItIj09ZW4uY2hhckF0KE1uKzEpJiYiMCMiLmluZGV4T2YoZW4uY2hhckF0KE1uKzIpKT4tMSk7KVJpKz10clt3aS50b0xvd2VyQ2FzZSgpXXx8d2k7YnJlYWs7Y2FzZSI/Ijpmb3IoUmkrPXdpO2VuLmNoYXJBdCgrK01uKT09PXdpOylSaSs9d2k7YnJlYWs7Y2FzZSIqIjpSaSs9''@;'; put 'put ''d2ksKytNbiwoIiAiPT1lbi5jaGFyQXQoTW4pfHwiKiI9PWVuLmNoYXJBdChNbikpJiYoUmkrPWVuLmNoYXJBdChNbiksKytNbik7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOlJpKz13aSwrK01uO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNh''@;'; put 'put ''c2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihSaSs9d2k7TW48ZW4ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihlbi5jaGFyQXQoKytNbikpPi0xOylSaSs9ZW4uY2hhckF0KE1uKTticmVhaztkZWZhdWx0OlJpKz13aSwrK01ufXJldHVybiBSaX0seC5nZXRjdXJyZW5jeT1mdW5jdGlv''@;'; put 'put ''biBxaSgpe3JldHVybiBQaXx8IlVTRCJ9LHguc2V0Y3VycmVuY3k9ZnVuY3Rpb24gdGEoZW4pe1BpPWVuLHZpPXR5cGVvZiBJbnRsPCJ1Ij9JbnRsLk51bWJlckZvcm1hdChIbix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6ZW59KS5mb3JtYXQo''@;'; put 'put ''MCkucmVwbGFjZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O3EoYik7dmFyIHZlLEc9eyJHZW5lcmFsIE51bWJlciI6IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOmIuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoiZGRkZCwgbW1tbSBkZCwgeXl5eSIsIk1lZGl1bSBEYXRlIjpiLl90YWJsZVsxNV0s''@;'; put 'put ''IlNob3J0IERhdGUiOmIuX3RhYmxlWzE0XSwiTG9uZyBUaW1lIjpiLl90YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjpiLl90YWJsZVsxOF0sIlNob3J0IFRpbWUiOmIuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxGaXhlZDpiLl90YWJs''@;'; put 'put ''ZVsyXSxTdGFuZGFyZDpiLl90YWJsZVs0XSxQZXJjZW50OmIuX3RhYmxlWzEwXSxTY2llbnRpZmljOmIuX3RhYmxlWzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJUcnVlIjsiVHJ1ZSI7IkZhbHNlIjtAJywiT24vT2ZmIjonIlllcyI7IlllcyI7Ik5v''@;'; put 'put ''IjtAJ30sUT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwy''@;'; put 'put ''NDoiR2VuZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoibS9kL3l5IiwyODoibS9kL3l5IiwyOToibS9kL3l5IiwzMDoibS9kL3l5IiwzMToibS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6''@;'; put 'put ''J18oKiAjLCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiAoIywjIzApO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMw''@;'; put 'put ''LjAwXyk7XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhAXyknLDUwOiJtL2QveXkiLDUxOiJtL2QveXkiLDUyOiJtL2QveXkiLDUzOiJtL2QveXkiLDU0OiJtL2QveXkiLDU1OiJtL2QveXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoi''@;'; put 'put ''MC4wMCIsNjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIj''@;'; put 'put ''LCMjMC4wMFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIsNzA6IiMgPz8vPz8iLDcxOiJtL2QveXkiLDcyOiJtL2QveXkiLDczOiJkLW1tbS15eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNz''@;'; put 'put ''Iiw4MDoiW2hdOm1tOnNzIiw4MToibW1zcy4wIn0scGU9L1tkRF0rfFttTV0rfFt5WWVFXSt8W0hoXSt8W1NzXSsvZzshZnVuY3Rpb24oZyl7Zy52ZXJzaW9uPSIxLjIuMCI7dmFyIHc9ZnVuY3Rpb24geCgpe2Zvcih2YXIgb2U9MCxkZT1uZXcgQXJyYXkoMjU2KSxEZT0wOzI1NiE9RGU7KytE''@;'; put 'put ''ZSlkZVtEZV09b2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9MSYob2U9RGUpPy0zMDY2NzQ5MTJeb2U+Pj4xOm9lPj4+MSk/LTMwNjY3NDkxMl5vZT4+PjE6b2U+Pj4xKT8tMzA2Njc0OTEyXm9lPj4+MTpvZT4+PjEpPy0zMDY2NzQ5MTJeb2U+Pj4xOm9lPj4+''@;'; put 'put ''MSk/LTMwNjY3NDkxMl5vZT4+PjE6b2U+Pj4xKT8tMzA2Njc0OTEyXm9lPj4+MTpvZT4+PjEpPy0zMDY2NzQ5MTJeb2U+Pj4xOm9lPj4+MSk/LTMwNjY3NDkxMl5vZT4+PjE6b2U+Pj4xO3JldHVybiB0eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoZGUpOmRlfSgpO2cudGFi''@;'; put 'put ''bGU9dyxnLmJzdHI9ZnVuY3Rpb24gVihvZSxkZSl7Zm9yKHZhciBEZT1+ZGUsUmU9b2UubGVuZ3RoLTEsVmU9MDtWZTxSZTspRGU9KERlPURlPj4+OF53WzI1NSYoRGVeb2UuY2hhckNvZGVBdChWZSsrKSldKT4+Pjhed1syNTUmKERlXm9lLmNoYXJDb2RlQXQoVmUrKykpXTtyZXR1cm4gVmU9''@;'; put 'put ''PT1SZSYmKERlPURlPj4+OF53WzI1NSYoRGVeb2UuY2hhckNvZGVBdChWZSkpXSksfkRlfSxnLmJ1Zj1mdW5jdGlvbiBXKG9lLGRlKXtpZihvZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBlZShvZSxkZSl7Zm9yKHZhciBEZT1+ZGUsUmU9b2UubGVuZ3RoLTcsVmU9MDtWZTxSZTspRGU9''@;'; put 'put ''KERlPShEZT0oRGU9KERlPShEZT0oRGU9KERlPURlPj4+OF53WzI1NSYoRGVeb2VbVmUrK10pXSk+Pj44XndbMjU1JihEZV5vZVtWZSsrXSldKT4+Pjhed1syNTUmKERlXm9lW1ZlKytdKV0pPj4+OF53WzI1NSYoRGVeb2VbVmUrK10pXSk+Pj44XndbMjU1JihEZV5vZVtWZSsrXSldKT4+Pjhe''@;'; put 'put ''d1syNTUmKERlXm9lW1ZlKytdKV0pPj4+OF53WzI1NSYoRGVeb2VbVmUrK10pXSk+Pj44XndbMjU1JihEZV5vZVtWZSsrXSldO2Zvcig7VmU8UmUrNzspRGU9RGU+Pj44XndbMjU1JihEZV5vZVtWZSsrXSldO3JldHVybn5EZX0ob2UsZGUpO2Zvcih2YXIgRGU9fmRlLFJlPW9lLmxlbmd0aC0z''@;'; put 'put ''LFZlPTA7VmU8UmU7KURlPShEZT0oRGU9KERlPURlPj4+OF53WzI1NSYoRGVeb2VbVmUrK10pXSk+Pj44XndbMjU1JihEZV5vZVtWZSsrXSldKT4+Pjhed1syNTUmKERlXm9lW1ZlKytdKV0pPj4+OF53WzI1NSYoRGVeb2VbVmUrK10pXTtmb3IoO1ZlPFJlKzM7KURlPURlPj4+OF53WzI1NSYo''@;'; put 'put ''RGVeb2VbVmUrK10pXTtyZXR1cm5+RGV9LGcuc3RyPWZ1bmN0aW9uIGxlKG9lLGRlKXtmb3IodmFyIEdlLGV0LERlPX5kZSxSZT0wLFZlPW9lLmxlbmd0aDtSZTxWZTspKEdlPW9lLmNoYXJDb2RlQXQoUmUrKykpPDEyOD9EZT1EZT4+Pjhed1syNTUmKERlXkdlKV06R2U8MjA0OD9EZT0oRGU9''@;'; put 'put ''RGU+Pj44XndbMjU1JihEZV4oMTkyfEdlPj42JjMxKSldKT4+Pjhed1syNTUmKERlXigxMjh8NjMmR2UpKV06R2U+PTU1Mjk2JiZHZTw1NzM0ND8oR2U9NjQrKDEwMjMmR2UpLGV0PTEwMjMmb2UuY2hhckNvZGVBdChSZSsrKSxEZT0oRGU9KERlPShEZT1EZT4+Pjhed1syNTUmKERlXigyNDB8''@;'; put 'put ''R2U+PjgmNykpXSk+Pj44XndbMjU1JihEZV4oMTI4fEdlPj4yJjYzKSldKT4+Pjhed1syNTUmKERlXigxMjh8ZXQ+PjYmMTV8KDMmR2UpPDw0KSldKT4+Pjhed1syNTUmKERlXigxMjh8NjMmZXQpKV0pOkRlPShEZT0oRGU9RGU+Pj44XndbMjU1JihEZV4oMjI0fEdlPj4xMiYxNSkpXSk+Pj44''@;'; put 'put ''XndbMjU1JihEZV4oMTI4fEdlPj42JjYzKSldKT4+Pjhed1syNTUmKERlXigxMjh8NjMmR2UpKV07cmV0dXJufkRlfX0odmU9e30pO3ZhciB6ZSx1ZT1mdW5jdGlvbigpe3ZhciBkZSx4PXt9O2Z1bmN0aW9uIFYoZG4pe2lmKCIvIj09ZG4uY2hhckF0KGRuLmxlbmd0aC0xKSlyZXR1cm4tMT09''@;'; put 'put ''PWRuLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9kbjpWKGRuLnNsaWNlKDAsLTEpKTt2YXIgVG49ZG4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PVRuP2RuOmRuLnNsaWNlKDAsVG4rMSl9ZnVuY3Rpb24gVyhkbil7aWYoIi8iPT1kbi5jaGFyQXQoZG4ubGVuZ3RoLTEpKXJldHVybiBX''@;'; put 'put ''KGRuLnNsaWNlKDAsLTEpKTt2YXIgVG49ZG4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PVRuP2RuOmRuLnNsaWNlKFRuKzEpfWZ1bmN0aW9uIGVlKGRuLFRuKXsic3RyaW5nIj09dHlwZW9mIFRuJiYoVG49bmV3IERhdGUoVG4pKTt2YXIgaG49VG4uZ2V0SG91cnMoKTtobj0oaG49aG48''@;'; put 'put ''PDZ8VG4uZ2V0TWludXRlcygpKTw8NXxUbi5nZXRTZWNvbmRzKCk+Pj4xLGRuLndyaXRlX3NoaWZ0KDIsaG4pO3ZhciBOdD1Ubi5nZXRGdWxsWWVhcigpLTE5ODA7TnQ9KE50PU50PDw0fFRuLmdldE1vbnRoKCkrMSk8PDV8VG4uZ2V0RGF0ZSgpLGRuLndyaXRlX3NoaWZ0KDIsTnQpfWZ1bmN0''@;'; put 'put ''aW9uIG9lKGRuKXtHcyhkbiwwKTtmb3IodmFyIFRuPXt9LGhuPTA7ZG4ubDw9ZG4ubGVuZ3RoLTQ7KXt2YXIgTnQ9ZG4ucmVhZF9zaGlmdCgyKSxLdD1kbi5yZWFkX3NoaWZ0KDIpLHZuPWRuLmwrS3Qsam49e307MjE1ODk9PT1OdCYmKDEmKGhuPWRuLnJlYWRfc2hpZnQoMSkpJiYoam4ubXRp''@;'; put 'put ''bWU9ZG4ucmVhZF9zaGlmdCg0KSksS3Q+NSYmKDImaG4mJihqbi5hdGltZT1kbi5yZWFkX3NoaWZ0KDQpKSw0JmhuJiYoam4uY3RpbWU9ZG4ucmVhZF9zaGlmdCg0KSkpLGpuLm10aW1lJiYoam4ubXQ9bmV3IERhdGUoMWUzKmpuLm10aW1lKSkpLGRuLmw9dm4sVG5bTnRdPWpufXJldHVybiBU''@;'; put 'put ''bn1mdW5jdGlvbiBEZSgpe3JldHVybiBkZXx8KGRlPWQoODMzMzcpKX1mdW5jdGlvbiBSZShkbixUbil7aWYoODA9PWRuWzBdJiY3NT09ZG5bMV0pcmV0dXJuIE9pKGRuLFRuKTtpZihkbi5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK2RuLmxlbmd0aCsiIDwg''@;'; put 'put ''NTEyIik7dmFyIGhuLEt0LHZuLGpuLG1yLE5yLE50PTUxMixDaT1bXSwkcj1kbi5zbGljZSgwLDUxMik7R3MoJHIsMCk7dmFyIFlpPWZ1bmN0aW9uIFZlKGRuKXtpZig4MD09ZG5bZG4ubF0mJjc1PT1kbltkbi5sKzFdKXJldHVyblswLDBdO2RuLmNoayh2aSwiSGVhZGVyIFNpZ25hdHVyZTog''@;'; put 'put ''IiksZG4ubCs9MTY7dmFyIFRuPWRuLnJlYWRfc2hpZnQoMiwidSIpO3JldHVybltkbi5yZWFkX3NoaWZ0KDIsInUiKSxUbl19KCRyKTtzd2l0Y2goaG49WWlbMF0pe2Nhc2UgMzpOdD01MTI7YnJlYWs7Y2FzZSA0Ok50PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PVlpWzFdKXJldHVybiBPaShk''@;'; put 'put ''bixUbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIitobil9NTEyIT09TnQmJkdzKCRyPWRuLnNsaWNlKDAsTnQpLDI4KTt2YXIgamk9ZG4uc2xpY2UoMCxOdCk7IWZ1bmN0aW9uIEdlKGRuLFRuKXt2YXIgaG47c3dpdGNoKGRu''@;'; put 'put ''LmwrPTIsaG49ZG4ucmVhZF9zaGlmdCgyKSl7Y2FzZSA5OmlmKDMhPVRuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK2huKTticmVhaztjYXNlIDEyOmlmKDQhPVRuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcg''@;'; put 'put ''Iitobik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIitobil9ZG4uY2hrKCIwNjAwIiwiTWluaSBTZWN0b3IgU2hpZnQ6ICIpLGRuLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfSgkcixobik7dmFyIHVv''@;'; put 'put ''PSRyLnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1obiYmMCE9PXVvKXRocm93IG5ldyBFcnJvcigiIyBEaXJlY3RvcnkgU2VjdG9yczogRXhwZWN0ZWQgMCBzYXcgIit1byk7JHIubCs9NCxqbj0kci5yZWFkX3NoaWZ0KDQsImkiKSwkci5sKz00LCRyLmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0''@;'; put 'put ''cmVhbSBDdXRvZmYgU2l6ZTogIiksbXI9JHIucmVhZF9zaGlmdCg0LCJpIiksS3Q9JHIucmVhZF9zaGlmdCg0LCJpIiksTnI9JHIucmVhZF9zaGlmdCg0LCJpIiksdm49JHIucmVhZF9zaGlmdCg0LCJpIik7Zm9yKHZhciAkYT0tMSxiYT0wO2JhPDEwOSYmISgoJGE9JHIucmVhZF9zaGlmdCg0''@;'; put 'put ''LCJpIikpPDApOysrYmEpQ2lbYmFdPSRhO3ZhciBObz1mdW5jdGlvbiBldChkbixUbil7Zm9yKHZhciBobj1NYXRoLmNlaWwoZG4ubGVuZ3RoL1RuKS0xLE50PVtdLEt0PTE7S3Q8aG47KytLdClOdFtLdC0xXT1kbi5zbGljZShLdCpUbiwoS3QrMSkqVG4pO3JldHVybiBOdFtobi0xXT1kbi5z''@;'; put 'put ''bGljZShobipUbiksTnR9KGRuLE50KTtmdChOcix2bixObyxOdCxDaSk7dmFyIHlsPWZ1bmN0aW9uIFN0KGRuLFRuLGhuLE50KXt2YXIgS3Q9ZG4ubGVuZ3RoLHZuPVtdLGpuPVtdLG1yPVtdLE5yPVtdLENpPU50LTEsJHI9MCxZaT0wLGppPTAsdW89MDtmb3IoJHI9MDskcjxLdDsrKyRyKWlm''@;'; put 'put ''KG1yPVtdLChqaT0kcitUbik+PUt0JiYoamktPUt0KSwham5bamldKXtOcj1bXTt2YXIgJGE9W107Zm9yKFlpPWppO1lpPj0wOyl7JGFbWWldPSEwLGpuW1lpXT0hMCxtclttci5sZW5ndGhdPVlpLE5yLnB1c2goZG5bWWldKTt2YXIgYmE9aG5bTWF0aC5mbG9vcig0KllpL050KV07aWYoTnQ8''@;'; put 'put ''NCsodW89NCpZaSZDaSkpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitZaSsiIDQgIitOdCk7aWYoIWRuW2JhXXx8JGFbWWk9Rm8oZG5bYmFdLHVvKV0pYnJlYWt9dm5bamldPXtub2RlczptcixkYXRhOl9jKFtOcl0pfX1yZXR1cm4gdm59KE5vLGpuLENpLE50KTt5''@;'; put 'put ''bFtqbl0ubmFtZT0iIURpcmVjdG9yeSIsS3Q+MCYmbXIhPT10ciYmKHlsW21yXS5uYW1lPSIhTWluaUZBVCIpLHlsW0NpWzBdXS5uYW1lPSIhRkFUIix5bC5mYXRfYWRkcnM9Q2kseWwuc3N6PU50O3ZhciBTMD1bXSxiMT1bXSx1Nj1bXTsoZnVuY3Rpb24gQXQoZG4sVG4saG4sTnQsS3Qsdm4s''@;'; put 'put ''am4sbXIpe2Zvcih2YXIgdW8sTnI9MCxDaT1OdC5sZW5ndGg/MjowLCRyPVRuW2RuXS5kYXRhLFlpPTAsamk9MDtZaTwkci5sZW5ndGg7WWkrPTEyOCl7dmFyICRhPSRyLnNsaWNlKFlpLFlpKzEyOCk7R3MoJGEsNjQpLGppPSRhLnJlYWRfc2hpZnQoMiksdW89VmMoJGEsMCxqaS1DaSksTnQu''@;'; put 'put ''cHVzaCh1byk7dmFyIGJhPXtuYW1lOnVvLHR5cGU6JGEucmVhZF9zaGlmdCgxKSxjb2xvcjokYS5yZWFkX3NoaWZ0KDEpLEw6JGEucmVhZF9zaGlmdCg0LCJpIiksUjokYS5yZWFkX3NoaWZ0KDQsImkiKSxDOiRhLnJlYWRfc2hpZnQoNCwiaSIpLGNsc2lkOiRhLnJlYWRfc2hpZnQoMTYpLHN0''@;'; put 'put ''YXRlOiRhLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0OjAsc2l6ZTowfTswIT09JGEucmVhZF9zaGlmdCgyKSskYS5yZWFkX3NoaWZ0KDIpKyRhLnJlYWRfc2hpZnQoMikrJGEucmVhZF9zaGlmdCgyKSYmKGJhLmN0PXp0KCRhLCRhLmwtOCkpLDAhPT0kYS5yZWFkX3NoaWZ0KDIpKyRhLnJlYWRf''@;'; put 'put ''c2hpZnQoMikrJGEucmVhZF9zaGlmdCgyKSskYS5yZWFkX3NoaWZ0KDIpJiYoYmEubXQ9enQoJGEsJGEubC04KSksYmEuc3RhcnQ9JGEucmVhZF9zaGlmdCg0LCJpIiksYmEuc2l6ZT0kYS5yZWFkX3NoaWZ0KDQsImkiKSxiYS5zaXplPDAmJmJhLnN0YXJ0PDAmJihiYS5zaXplPWJhLnR5cGU9''@;'; put 'put ''MCxiYS5zdGFydD10cixiYS5uYW1lPSIiKSw1PT09YmEudHlwZT8oTnI9YmEuc3RhcnQsS3Q+MCYmTnIhPT10ciYmKFRuW05yXS5uYW1lPSIhU3RyZWFtRGF0YSIpKTpiYS5zaXplPj00MDk2PyhiYS5zdG9yYWdlPSJmYXQiLHZvaWQgMD09PVRuW2JhLnN0YXJ0XSYmKFRuW2JhLnN0YXJ0XT1S''@;'; put 'put ''dChobixiYS5zdGFydCxUbi5mYXRfYWRkcnMsVG4uc3N6KSksVG5bYmEuc3RhcnRdLm5hbWU9YmEubmFtZSxiYS5jb250ZW50PVRuW2JhLnN0YXJ0XS5kYXRhLnNsaWNlKDAsYmEuc2l6ZSkpOihiYS5zdG9yYWdlPSJtaW5pZmF0IixiYS5zaXplPDA/YmEuc2l6ZT0wOk5yIT09dHImJmJhLnN0''@;'; put 'put ''YXJ0IT09dHImJlRuW05yXSYmKGJhLmNvbnRlbnQ9SmUoYmEsVG5bTnJdLmRhdGEsKFRuW21yXXx8e30pLmRhdGEpKSksYmEuY29udGVudCYmR3MoYmEuY29udGVudCwwKSx2blt1b109YmEsam4ucHVzaChiYSl9fSkoam4seWwsTm8sUzAsS3Qse30sYjEsbXIpLGZ1bmN0aW9uIGJ0KGRuLFRu''@;'; put 'put ''LGhuKXtmb3IodmFyIE50PTAsS3Q9MCx2bj0wLGpuPTAsbXI9MCxOcj1obi5sZW5ndGgsQ2k9W10sJHI9W107TnQ8TnI7KytOdClDaVtOdF09JHJbTnRdPU50LFRuW050XT1obltOdF07Zm9yKDttcjwkci5sZW5ndGg7KyttcilLdD1kbltOdD0kclttcl1dLkwsdm49ZG5bTnRdLlIsam49ZG5b''@;'; put 'put ''TnRdLkMsQ2lbTnRdPT09TnQmJigtMSE9PUt0JiZDaVtLdF0hPT1LdCYmKENpW050XT1DaVtLdF0pLC0xIT09dm4mJkNpW3ZuXSE9PXZuJiYoQ2lbTnRdPUNpW3ZuXSkpLC0xIT09am4mJihDaVtqbl09TnQpLC0xIT09S3QmJk50IT1DaVtOdF0mJihDaVtLdF09Q2lbTnRdLCRyLmxhc3RJbmRl''@;'; put 'put ''eE9mKEt0KTxtciYmJHIucHVzaChLdCkpLC0xIT09dm4mJk50IT1DaVtOdF0mJihDaVt2bl09Q2lbTnRdLCRyLmxhc3RJbmRleE9mKHZuKTxtciYmJHIucHVzaCh2bikpO2ZvcihOdD0xO050PE5yOysrTnQpQ2lbTnRdPT09TnQmJigtMSE9PXZuJiZDaVt2bl0hPT12bj9DaVtOdF09Q2lbdm5d''@;'; put 'put ''Oi0xIT09S3QmJkNpW0t0XSE9PUt0JiYoQ2lbTnRdPUNpW0t0XSkpO2ZvcihOdD0xO050PE5yOysrTnQpaWYoMCE9PWRuW050XS50eXBlKXtpZigobXI9TnQpIT1DaVttcl0pZG97VG5bTnRdPVRuW21yPUNpW21yXV0rIi8iK1RuW050XX13aGlsZSgwIT09bXImJi0xIT09Q2lbbXJdJiZtciE9''@;'; put 'put ''Q2lbbXJdKTtDaVtOdF09LTF9Zm9yKFRuWzBdKz0iLyIsTnQ9MTtOdDxOcjsrK050KTIhPT1kbltOdF0udHlwZSYmKFRuW050XSs9Ii8iKX0oYjEsdTYsUzApLFMwLnNoaWZ0KCk7dmFyIHg5PXtGaWxlSW5kZXg6YjEsRnVsbFBhdGhzOnU2fTtyZXR1cm4gVG4mJlRuLnJhdyYmKHg5LnJhdz17''@;'; put 'put ''aGVhZGVyOmppLHNlY3RvcnM6Tm99KSx4OX1mdW5jdGlvbiBKZShkbixUbixobil7Zm9yKHZhciBLdD1kbi5zaXplLHZuPVtdLGpuPWRuLnN0YXJ0O2huJiZLdD4wJiZqbj49MDspdm4ucHVzaChUbi5zbGljZShqbipObixqbipObitObikpLEt0LT1Obixqbj1Gbyhobiw0KmpuKTtyZXR1cm4g''@;'; put 'put ''MD09PXZuLmxlbmd0aD9IcigwKTpMKHZuKS5zbGljZSgwLGRuLnNpemUpfWZ1bmN0aW9uIGZ0KGRuLFRuLGhuLE50LEt0KXt2YXIgdm49dHI7aWYoZG49PT10cil7aWYoMCE9PVRuKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigt''@;'; put 'put ''MSE9PWRuKXt2YXIgam49aG5bZG5dLG1yPShOdD4+PjIpLTE7aWYoIWpuKXJldHVybjtmb3IodmFyIE5yPTA7TnI8bXImJih2bj1Gbyhqbiw0Kk5yKSkhPT10cjsrK05yKUt0LnB1c2godm4pO2Z0KEZvKGpuLE50LTQpLFRuLTEsaG4sTnQsS3QpfX1mdW5jdGlvbiBSdChkbixUbixobixOdCxL''@;'; put 'put ''dCl7dmFyIHZuPVtdLGpuPVtdO0t0fHwoS3Q9W10pO3ZhciBtcj1OdC0xLE5yPTAsQ2k9MDtmb3IoTnI9VG47TnI+PTA7KXtLdFtOcl09ITAsdm5bdm4ubGVuZ3RoXT1Ocixqbi5wdXNoKGRuW05yXSk7dmFyICRyPWhuW01hdGguZmxvb3IoNCpOci9OdCldO2lmKE50PDQrKENpPTQqTnImbXIp''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrTnIrIiA0ICIrTnQpO2lmKCFkblskcl0pYnJlYWs7TnI9Rm8oZG5bJHJdLENpKX1yZXR1cm57bm9kZXM6dm4sZGF0YTpfYyhbam5dKX19ZnVuY3Rpb24genQoZG4sVG4pe3JldHVybiBuZXcgRGF0ZSgxZTMqKExvKGRu''@;'; put 'put ''LFRuKzQpLzFlNypNYXRoLnBvdygyLDMyKStMbyhkbixUbikvMWU3LTExNjQ0NDczNjAwKSl9ZnVuY3Rpb24gbW4oZG4sVG4pe3ZhciBobj1Ubnx8e30sTnQ9aG4ucm9vdHx8IlJvb3QgRW50cnkiO2lmKGRuLkZ1bGxQYXRoc3x8KGRuLkZ1bGxQYXRocz1bXSksZG4uRmlsZUluZGV4fHwoZG4u''@;'; put 'put ''RmlsZUluZGV4PVtdKSxkbi5GdWxsUGF0aHMubGVuZ3RoIT09ZG4uRmlsZUluZGV4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImluY29uc2lzdGVudCBDRkIgc3RydWN0dXJlIik7MD09PWRuLkZ1bGxQYXRocy5sZW5ndGgmJihkbi5GdWxsUGF0aHNbMF09TnQrIi8iLGRuLkZpbGVJbmRleFsw''@;'; put 'put ''XT17bmFtZTpOdCx0eXBlOjV9KSxobi5DTFNJRCYmKGRuLkZpbGVJbmRleFswXS5jbHNpZD1obi5DTFNJRCksZnVuY3Rpb24gZHIoZG4pe3ZhciBUbj0iXHgwMVNoMzN0SjUiO2lmKCF1ZS5maW5kKGRuLCIvIitUbikpe3ZhciBobj1Icig0KTtoblswXT01NSxoblsxXT1oblszXT01MCxoblsy''@;'; put 'put ''XT01NCxkbi5GaWxlSW5kZXgucHVzaCh7bmFtZTpUbix0eXBlOjIsY29udGVudDpobixzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxkbi5GdWxsUGF0aHMucHVzaChkbi5GdWxsUGF0aHNbMF0rVG4pLEduKGRuKX19KGRuKX1mdW5jdGlvbiBHbihkbixUbil7bW4oZG4pO2Zvcih2YXIgaG49ITEs''@;'; put 'put ''TnQ9ITEsS3Q9ZG4uRnVsbFBhdGhzLmxlbmd0aC0xO0t0Pj0wOy0tS3Qpe3ZhciB2bj1kbi5GaWxlSW5kZXhbS3RdO3N3aXRjaCh2bi50eXBlKXtjYXNlIDA6TnQ/aG49ITA6KGRuLkZpbGVJbmRleC5wb3AoKSxkbi5GdWxsUGF0aHMucG9wKCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1''@;'; put 'put ''Ok50PSEwLGlzTmFOKHZuLlIqdm4uTCp2bi5DKSYmKGhuPSEwKSx2bi5SPi0xJiZ2bi5MPi0xJiZ2bi5SPT12bi5MJiYoaG49ITApO2JyZWFrO2RlZmF1bHQ6aG49ITB9fWlmKGhufHxUbil7dmFyIGpuPW5ldyBEYXRlKDE5ODcsMSwxOSksbXI9MCxOcj1bXTtmb3IoS3Q9MDtLdDxkbi5GdWxs''@;'; put 'put ''UGF0aHMubGVuZ3RoOysrS3QpMCE9PWRuLkZpbGVJbmRleFtLdF0udHlwZSYmTnIucHVzaChbZG4uRnVsbFBhdGhzW0t0XSxkbi5GaWxlSW5kZXhbS3RdXSk7Zm9yKEt0PTA7S3Q8TnIubGVuZ3RoOysrS3Qpe3ZhciBDaT1WKE5yW0t0XVswXSk7Zm9yKE50PSExLG1yPTA7bXI8TnIubGVuZ3Ro''@;'; put 'put ''OysrbXIpTnJbbXJdWzBdPT09Q2kmJihOdD0hMCk7TnR8fE5yLnB1c2goW0NpLHtuYW1lOlcoQ2kpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6cWksY3Q6am4sbXQ6am4sY29udGVudDpudWxsfV0pfWZvcihOci5zb3J0KGZ1bmN0aW9uKGppLHVvKXtyZXR1cm4gZnVuY3Rpb24gdyhk''@;'; put 'put ''bixUbil7Zm9yKHZhciBobj1kbi5zcGxpdCgiLyIpLE50PVRuLnNwbGl0KCIvIiksS3Q9MCx2bj0wLGpuPU1hdGgubWluKGhuLmxlbmd0aCxOdC5sZW5ndGgpO0t0PGpuOysrS3Qpe2lmKHZuPWhuW0t0XS5sZW5ndGgtTnRbS3RdLmxlbmd0aClyZXR1cm4gdm47aWYoaG5bS3RdIT1OdFtLdF0p''@;'; put 'put ''cmV0dXJuIGhuW0t0XTxOdFtLdF0/LTE6MX1yZXR1cm4gaG4ubGVuZ3RoLU50Lmxlbmd0aH0oamlbMF0sdW9bMF0pfSksZG4uRnVsbFBhdGhzPVtdLGRuLkZpbGVJbmRleD1bXSxLdD0wO0t0PE5yLmxlbmd0aDsrK0t0KWRuLkZ1bGxQYXRoc1tLdF09TnJbS3RdWzBdLGRuLkZpbGVJbmRleFtL''@;'; put 'put ''dF09TnJbS3RdWzFdO2ZvcihLdD0wO0t0PE5yLmxlbmd0aDsrK0t0KXt2YXIgJHI9ZG4uRmlsZUluZGV4W0t0XSxZaT1kbi5GdWxsUGF0aHNbS3RdO2lmKCRyLm5hbWU9VyhZaSkucmVwbGFjZSgiLyIsIiIpLCRyLkw9JHIuUj0kci5DPS0oJHIuY29sb3I9MSksJHIuc2l6ZT0kci5jb250ZW50''@;'; put 'put ''PyRyLmNvbnRlbnQubGVuZ3RoOjAsJHIuc3RhcnQ9MCwkci5jbHNpZD0kci5jbHNpZHx8cWksMD09PUt0KSRyLkM9TnIubGVuZ3RoPjE/MTotMSwkci5zaXplPTAsJHIudHlwZT01O2Vsc2UgaWYoIi8iPT1ZaS5zbGljZSgtMSkpe2Zvcihtcj1LdCsxO21yPE5yLmxlbmd0aCYmVihkbi5GdWxs''@;'; put 'put ''UGF0aHNbbXJdKSE9WWk7Kyttcik7Zm9yKCRyLkM9bXI+PU5yLmxlbmd0aD8tMTptcixtcj1LdCsxO21yPE5yLmxlbmd0aCYmVihkbi5GdWxsUGF0aHNbbXJdKSE9VihZaSk7Kyttcik7JHIuUj1tcj49TnIubGVuZ3RoPy0xOm1yLCRyLnR5cGU9MX1lbHNlIFYoZG4uRnVsbFBhdGhzW0t0KzFd''@;'; put 'put ''fHwiIik9PVYoWWkpJiYoJHIuUj1LdCsxKSwkci50eXBlPTJ9fX1mdW5jdGlvbiBIbihkbixUbil7dmFyIGhuPVRufHx7fTtpZihHbihkbiksInppcCI9PWhuLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBUcyhkbixUbil7dmFyIGhuPVRufHx7fSxOdD1bXSxLdD1bXSx2bj1IcigxKSxqbj1o''@;'; put 'put ''bi5jb21wcmVzc2lvbj84OjAsbXI9MCxDaT0wLCRyPTAsWWk9MCxqaT0wLHVvPWRuLkZ1bGxQYXRoc1swXSwkYT11byxiYT1kbi5GaWxlSW5kZXhbMF0sTm89W10seWw9MDtmb3IoQ2k9MTtDaTxkbi5GdWxsUGF0aHMubGVuZ3RoOysrQ2kpaWYoJGE9ZG4uRnVsbFBhdGhzW0NpXS5zbGljZSh1''@;'; put 'put ''by5sZW5ndGgpLChiYT1kbi5GaWxlSW5kZXhbQ2ldKS5zaXplJiZiYS5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT0kYSl7dmFyIFcxPVlpLFMwPUhyKCRhLmxlbmd0aCk7Zm9yKCRyPTA7JHI8JGEubGVuZ3RoOysrJHIpUzAud3JpdGVfc2hpZnQoMSwxMjcmJGEuY2hhckNvZGVBdCgkcikpO1Mw''@;'; put 'put ''PVMwLnNsaWNlKDAsUzAubCksTm9bamldPXZlLmJ1ZihiYS5jb250ZW50LDApO3ZhciBiMT1iYS5jb250ZW50Ozg9PWpuJiYoYjE9UHIoYjEpKSwodm49SHIoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSx2bi53cml0ZV9zaGlmdCgyLDIwKSx2bi53cml0ZV9zaGlmdCgyLG1yKSx2bi53''@;'; put 'put ''cml0ZV9zaGlmdCgyLGpuKSxiYS5tdD9lZSh2bixiYS5tdCk6dm4ud3JpdGVfc2hpZnQoNCwwKSx2bi53cml0ZV9zaGlmdCgtNCw4Jm1yPzA6Tm9bamldKSx2bi53cml0ZV9zaGlmdCg0LDgmbXI/MDpiMS5sZW5ndGgpLHZuLndyaXRlX3NoaWZ0KDQsOCZtcj8wOmJhLmNvbnRlbnQubGVuZ3Ro''@;'; put 'put ''KSx2bi53cml0ZV9zaGlmdCgyLFMwLmxlbmd0aCksdm4ud3JpdGVfc2hpZnQoMiwwKSxZaSs9dm4ubGVuZ3RoLE50LnB1c2godm4pLFlpKz1TMC5sZW5ndGgsTnQucHVzaChTMCksWWkrPWIxLmxlbmd0aCxOdC5wdXNoKGIxKSw4Jm1yJiYoKHZuPUhyKDEyKSkud3JpdGVfc2hpZnQoLTQsTm9b''@;'; put 'put ''amldKSx2bi53cml0ZV9zaGlmdCg0LGIxLmxlbmd0aCksdm4ud3JpdGVfc2hpZnQoNCxiYS5jb250ZW50Lmxlbmd0aCksWWkrPXZuLmwsTnQucHVzaCh2bikpLCh2bj1Icig0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLHZuLndyaXRlX3NoaWZ0KDIsMCksdm4ud3JpdGVfc2hpZnQoMiwy''@;'; put 'put ''MCksdm4ud3JpdGVfc2hpZnQoMixtciksdm4ud3JpdGVfc2hpZnQoMixqbiksdm4ud3JpdGVfc2hpZnQoNCwwKSx2bi53cml0ZV9zaGlmdCgtNCxOb1tqaV0pLHZuLndyaXRlX3NoaWZ0KDQsYjEubGVuZ3RoKSx2bi53cml0ZV9zaGlmdCg0LGJhLmNvbnRlbnQubGVuZ3RoKSx2bi53cml0ZV9z''@;'; put 'put ''aGlmdCgyLFMwLmxlbmd0aCksdm4ud3JpdGVfc2hpZnQoMiwwKSx2bi53cml0ZV9zaGlmdCgyLDApLHZuLndyaXRlX3NoaWZ0KDIsMCksdm4ud3JpdGVfc2hpZnQoMiwwKSx2bi53cml0ZV9zaGlmdCg0LDApLHZuLndyaXRlX3NoaWZ0KDQsVzEpLHlsKz12bi5sLEt0LnB1c2godm4pLHlsKz1T''@;'; put 'put ''MC5sZW5ndGgsS3QucHVzaChTMCksKytqaX1yZXR1cm4odm49SHIoMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1Niksdm4ud3JpdGVfc2hpZnQoMiwwKSx2bi53cml0ZV9zaGlmdCgyLDApLHZuLndyaXRlX3NoaWZ0KDIsamkpLHZuLndyaXRlX3NoaWZ0KDIsamkpLHZuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQseWwpLHZuLndyaXRlX3NoaWZ0KDQsWWkpLHZuLndyaXRlX3NoaWZ0KDIsMCksTChbTChOdCksTChLdCksdm5dKX0oZG4saG4pO3ZhciBOdD1mdW5jdGlvbih1byl7Zm9yKHZhciAkYT0wLGJhPTAsTm89MDtObzx1by5GaWxlSW5kZXgubGVuZ3RoOysrTm8pe3ZhciB5bD11by5GaWxlSW5k''@;'; put 'put ''ZXhbTm9dO2lmKHlsLmNvbnRlbnQpe3ZhciBXMT15bC5jb250ZW50Lmxlbmd0aDtXMT4wJiYoVzE8NDA5Nj8kYSs9VzErNjM+PjY6YmErPVcxKzUxMT4+OSl9fWZvcih2YXIgUzA9dW8uRnVsbFBhdGhzLmxlbmd0aCszPj4yLHU2PSRhKzEyNz4+Nyx4OT0oJGErNz4+MykrYmErUzArdTYscXA9''@;'; put 'put ''eDkrMTI3Pj43LFZiPXFwPD0xMDk/MDpNYXRoLmNlaWwoKHFwLTEwOSkvMTI3KTt4OStxcCtWYisxMjc+Pjc+cXA7KVZiPSsrcXA8PTEwOT8wOk1hdGguY2VpbCgocXAtMTA5KS8xMjcpO3ZhciBKcD1bMSxWYixxcCx1NixTMCxiYSwkYSwwXTtyZXR1cm4gdW8uRmlsZUluZGV4WzBdLnNpemU9''@;'; put 'put ''JGE8PDYsSnBbN109KHVvLkZpbGVJbmRleFswXS5zdGFydD1KcFswXStKcFsxXStKcFsyXStKcFszXStKcFs0XStKcFs1XSkrKEpwWzZdKzc+PjMpLEpwfShkbiksS3Q9SHIoTnRbN108PDkpLHZuPTAsam49MDtmb3Iodm49MDt2bjw4Oysrdm4pS3Qud3JpdGVfc2hpZnQoMSxQaVt2bl0pO2Zv''@;'; put 'put ''cih2bj0wO3ZuPDg7Kyt2bilLdC53cml0ZV9zaGlmdCgyLDApO2ZvcihLdC53cml0ZV9zaGlmdCgyLDYyKSxLdC53cml0ZV9zaGlmdCgyLDMpLEt0LndyaXRlX3NoaWZ0KDIsNjU1MzQpLEt0LndyaXRlX3NoaWZ0KDIsOSksS3Qud3JpdGVfc2hpZnQoMiw2KSx2bj0wO3ZuPDM7Kyt2bilLdC53''@;'; put 'put ''cml0ZV9zaGlmdCgyLDApO2ZvcihLdC53cml0ZV9zaGlmdCg0LDApLEt0LndyaXRlX3NoaWZ0KDQsTnRbMl0pLEt0LndyaXRlX3NoaWZ0KDQsTnRbMF0rTnRbMV0rTnRbMl0rTnRbM10tMSksS3Qud3JpdGVfc2hpZnQoNCwwKSxLdC53cml0ZV9zaGlmdCg0LDQwOTYpLEt0LndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsTnRbM10/TnRbMF0rTnRbMV0rTnRbMl0tMTp0ciksS3Qud3JpdGVfc2hpZnQoNCxOdFszXSksS3Qud3JpdGVfc2hpZnQoLTQsTnRbMV0/TnRbMF0tMTp0ciksS3Qud3JpdGVfc2hpZnQoNCxOdFsxXSksdm49MDt2bjwxMDk7Kyt2bilLdC53cml0ZV9zaGlmdCgtNCx2bjxOdFsyXT9OdFsx''@;'; put 'put ''XSt2bjotMSk7aWYoTnRbMV0pZm9yKGpuPTA7am48TnRbMV07Kytqbil7Zm9yKDt2bjwyMzYrMTI3KmpuOysrdm4pS3Qud3JpdGVfc2hpZnQoLTQsdm48TnRbMl0/TnRbMV0rdm46LTEpO0t0LndyaXRlX3NoaWZ0KC00LGpuPT09TnRbMV0tMT90cjpqbisxKX12YXIgbXI9ZnVuY3Rpb24odW8p''@;'; put 'put ''e2Zvcihqbis9dW87dm48am4tMTsrK3ZuKUt0LndyaXRlX3NoaWZ0KC00LHZuKzEpO3VvJiYoKyt2bixLdC53cml0ZV9zaGlmdCgtNCx0cikpfTtmb3Ioam49dm49MCxqbis9TnRbMV07dm48am47Kyt2bilLdC53cml0ZV9zaGlmdCgtNCx0YS5ESUZTRUNUKTtmb3Ioam4rPU50WzJdO3ZuPGpu''@;'; put 'put ''Oysrdm4pS3Qud3JpdGVfc2hpZnQoLTQsdGEuRkFUU0VDVCk7bXIoTnRbM10pLG1yKE50WzRdKTtmb3IodmFyIE5yPTAsQ2k9MCwkcj1kbi5GaWxlSW5kZXhbMF07TnI8ZG4uRmlsZUluZGV4Lmxlbmd0aDsrK05yKSgkcj1kbi5GaWxlSW5kZXhbTnJdKS5jb250ZW50JiYhKChDaT0kci5jb250''@;'; put 'put ''ZW50Lmxlbmd0aCk8NDA5NikmJigkci5zdGFydD1qbixtcihDaSs1MTE+PjkpKTtmb3IobXIoTnRbNl0rNz4+Myk7NTExJkt0Lmw7KUt0LndyaXRlX3NoaWZ0KC00LHRhLkVORE9GQ0hBSU4pO2Zvcihqbj12bj0wLE5yPTA7TnI8ZG4uRmlsZUluZGV4Lmxlbmd0aDsrK05yKSgkcj1kbi5GaWxl''@;'; put 'put ''SW5kZXhbTnJdKS5jb250ZW50JiYoQ2k9JHIuY29udGVudC5sZW5ndGgpJiYhKENpPj00MDk2KSYmKCRyLnN0YXJ0PWpuLG1yKENpKzYzPj42KSk7Zm9yKDs1MTEmS3QubDspS3Qud3JpdGVfc2hpZnQoLTQsdGEuRU5ET0ZDSEFJTik7Zm9yKHZuPTA7dm48TnRbNF08PDI7Kyt2bil7dmFyIFlp''@;'; put 'put ''PWRuLkZ1bGxQYXRoc1t2bl07aWYoWWkmJjAhPT1ZaS5sZW5ndGgpeyRyPWRuLkZpbGVJbmRleFt2bl0sMD09PXZuJiYoJHIuc3RhcnQ9JHIuc2l6ZT8kci5zdGFydC0xOnRyKTt2YXIgamk9MD09PXZuJiZobi5yb290fHwkci5uYW1lO2lmKENpPTIqKGppLmxlbmd0aCsxKSxLdC53cml0ZV9z''@;'; put 'put ''aGlmdCg2NCxqaSwidXRmMTZsZSIpLEt0LndyaXRlX3NoaWZ0KDIsQ2kpLEt0LndyaXRlX3NoaWZ0KDEsJHIudHlwZSksS3Qud3JpdGVfc2hpZnQoMSwkci5jb2xvciksS3Qud3JpdGVfc2hpZnQoLTQsJHIuTCksS3Qud3JpdGVfc2hpZnQoLTQsJHIuUiksS3Qud3JpdGVfc2hpZnQoLTQsJHIu''@;'; put 'put ''QyksJHIuY2xzaWQpS3Qud3JpdGVfc2hpZnQoMTYsJHIuY2xzaWQsImhleCIpO2Vsc2UgZm9yKE5yPTA7TnI8NDsrK05yKUt0LndyaXRlX3NoaWZ0KDQsMCk7S3Qud3JpdGVfc2hpZnQoNCwkci5zdGF0ZXx8MCksS3Qud3JpdGVfc2hpZnQoNCwwKSxLdC53cml0ZV9zaGlmdCg0LDApLEt0Lndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsMCksS3Qud3JpdGVfc2hpZnQoNCwwKSxLdC53cml0ZV9zaGlmdCg0LCRyLnN0YXJ0KSxLdC53cml0ZV9zaGlmdCg0LCRyLnNpemUpLEt0LndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoTnI9MDtOcjwxNzsrK05yKUt0LndyaXRlX3NoaWZ0KDQsMCk7Zm9yKE5yPTA7TnI8''@;'; put 'put ''MzsrK05yKUt0LndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihOcj0wO05yPDEyOysrTnIpS3Qud3JpdGVfc2hpZnQoNCwwKX19Zm9yKHZuPTE7dm48ZG4uRmlsZUluZGV4Lmxlbmd0aDsrK3ZuKWlmKCgkcj1kbi5GaWxlSW5kZXhbdm5dKS5zaXplPj00MDk2KXtmb3IoS3QubD0kci5zdGFydCsxPDw5''@;'; put 'put ''LE5yPTA7TnI8JHIuc2l6ZTsrK05yKUt0LndyaXRlX3NoaWZ0KDEsJHIuY29udGVudFtOcl0pO2Zvcig7NTExJk5yOysrTnIpS3Qud3JpdGVfc2hpZnQoMSwwKX1mb3Iodm49MTt2bjxkbi5GaWxlSW5kZXgubGVuZ3RoOysrdm4paWYoKCRyPWRuLkZpbGVJbmRleFt2bl0pLnNpemU+MCYmJHIu''@;'; put 'put ''c2l6ZTw0MDk2KXtmb3IoTnI9MDtOcjwkci5zaXplOysrTnIpS3Qud3JpdGVfc2hpZnQoMSwkci5jb250ZW50W05yXSk7Zm9yKDs2MyZOcjsrK05yKUt0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDtLdC5sPEt0Lmxlbmd0aDspS3Qud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gS3R9eC52ZXJzaW9u''@;'; put 'put ''PSIxLjEuNCI7dmFyIExyLE5uPTY0LHRyPS0yLHZpPSJkMGNmMTFlMGExYjExYWUxIixQaT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLHFpPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsdGE9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVO''@;'; put 'put ''RE9GQ0hBSU46dHIsRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTp2aSxIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpxaSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMi''@;'; put 'put ''LCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24gU3IoZG4pe2Zvcih2YXIgVG49bmV3IEFycmF5KGRuLmxlbmd0aCksaG49MDtobjxkbi5sZW5ndGg7KytobilUbltobl09U3RyaW5nLmZyb21DaGFyQ29kZShkbltobl0pO3JldHVybiBUbi5qb2luKCIiKX1mdW5jdGlvbiBQcihkbil7cmV0''@;'; put 'put ''dXJuIExyP0xyLmRlZmxhdGVSYXdTeW5jKGRuKTpJYyhkbil9Zm9yKHZhciBkbixUbixaaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sX2k9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMs''@;'; put 'put ''OTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLHBhPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLFFpPXR5cGVvZiBVaW50OEFycmF5''@;'; put 'put ''PCJ1IixEbz1RaT9uZXcgVWludDhBcnJheSgyNTYpOltdLGphPTA7amE8MjU2OysramEpRG9bamFdPSh2b2lkIDAsMjU1JigoVG49MTM5NTM2JigoZG49amEpPDwxfGRuPDwxMSl8NTU4MTQ0Jihkbjw8NXxkbjw8MTUpKT4+MTZ8VG4+Pjh8VG4pKTtmdW5jdGlvbiBtbyhkbixUbil7dmFyIGhu''@;'; put 'put ''PURvWzI1NSZkbl07cmV0dXJuIFRuPD04P2huPj4+OC1UbjooaG49aG48PDh8RG9bZG4+PjgmMjU1XSxUbjw9MTY/aG4+Pj4xNi1UbjooaG49aG48PDh8RG9bZG4+PjE2JjI1NV0pPj4+MjQtVG4pfWZ1bmN0aW9uIGNvKGRuLFRuKXt2YXIgaG49NyZUbixOdD1Ubj4+PjM7cmV0dXJuKGRuW050''@;'; put 'put ''XXwoaG48PTY/MDpkbltOdCsxXTw8OCkpPj4+aG4mM31mdW5jdGlvbiBCaShkbixUbil7dmFyIGhuPTcmVG4sTnQ9VG4+Pj4zO3JldHVybihkbltOdF18KGhuPD01PzA6ZG5bTnQrMV08PDgpKT4+PmhuJjd9ZnVuY3Rpb24gT24oZG4sVG4pe3ZhciBobj03JlRuLE50PVRuPj4+MztyZXR1cm4o''@;'; put 'put ''ZG5bTnRdfChobjw9Mz8wOmRuW050KzFdPDw4KSk+Pj5obiYzMX1mdW5jdGlvbiB3cyhkbixUbil7dmFyIGhuPTcmVG4sTnQ9VG4+Pj4zO3JldHVybihkbltOdF18KGhuPD0xPzA6ZG5bTnQrMV08PDgpKT4+PmhuJjEyN31mdW5jdGlvbiBQcyhkbixUbixobil7dmFyIE50PTcmVG4sS3Q9VG4+''@;'; put 'put ''Pj4zLGpuPWRuW0t0XT4+Pk50O3JldHVybiBobjw4LU50fHwoam58PWRuW0t0KzFdPDw4LU50LGhuPDE2LU50KXx8KGpufD1kbltLdCsyXTw8MTYtTnQsaG48MjQtTnQpfHwoam58PWRuW0t0KzNdPDwyNC1OdCksam4mKDE8PGhuKS0xfWZ1bmN0aW9uIFpjKGRuLFRuKXt2YXIgaG49ZG4ubGVu''@;'; put 'put ''Z3RoLE50PTIqaG4+VG4/MipobjpUbis1LEt0PTA7aWYoaG4+PVRuKXJldHVybiBkbjtpZihfZSl7dmFyIHZuPXMoTnQpO2lmKGRuLmNvcHkpZG4uY29weSh2bik7ZWxzZSBmb3IoO0t0PGRuLmxlbmd0aDsrK0t0KXZuW0t0XT1kbltLdF07cmV0dXJuIHZufWlmKFFpKXt2YXIgam49bmV3IFVp''@;'; put 'put ''bnQ4QXJyYXkoTnQpO2lmKGpuLnNldClqbi5zZXQoZG4pO2Vsc2UgZm9yKDtLdDxkbi5sZW5ndGg7KytLdClqbltLdF09ZG5bS3RdO3JldHVybiBqbn1yZXR1cm4gZG4ubGVuZ3RoPU50LGRufWZ1bmN0aW9uIERjKGRuKXtmb3IodmFyIFRuPW5ldyBBcnJheShkbiksaG49MDtobjxkbjsrK2hu''@;'; put 'put ''KVRuW2huXT0wO3JldHVybiBUbn12YXIgSWM9ZnVuY3Rpb24oKXt2YXIgZG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oaG4sTnQpe2Zvcih2YXIgS3Q9MDtLdDxobi5sZW5ndGg7KXt2YXIgdm49TWF0aC5taW4oNjU1MzUsaG4ubGVuZ3RoLUt0KTtmb3IoTnQud3JpdGVfc2hpZnQoMSwr''@;'; put 'put ''KEt0K3ZuPT1obi5sZW5ndGgpKSxOdC53cml0ZV9zaGlmdCgyLHZuKSxOdC53cml0ZV9zaGlmdCgyLDY1NTM1Jn52bik7dm4tLSA+MDspTnRbTnQubCsrXT1obltLdCsrXX1yZXR1cm4gTnQubH19KCk7cmV0dXJuIGZ1bmN0aW9uKFRuKXt2YXIgaG49SHIoNTArTWF0aC5mbG9vcigxLjEqVG4u''@;'; put 'put ''bGVuZ3RoKSksTnQ9ZG4oVG4saG4pO3JldHVybiBobi5zbGljZSgwLE50KX19KCk7ZnVuY3Rpb24gVTEoZG4sVG4saG4pe3ZhciBOdD0xLEt0PTAsdm49MCxqbj0wLG1yPTAsTnI9ZG4ubGVuZ3RoLENpPVFpP25ldyBVaW50MTZBcnJheSgzMik6RGMoMzIpO2Zvcih2bj0wO3ZuPDMyOysrdm4p''@;'; put 'put ''Q2lbdm5dPTA7Zm9yKHZuPU5yO3ZuPGhuOysrdm4pZG5bdm5dPTA7TnI9ZG4ubGVuZ3RoO3ZhciAkcj1RaT9uZXcgVWludDE2QXJyYXkoTnIpOkRjKE5yKTtmb3Iodm49MDt2bjxOcjsrK3ZuKUNpW0t0PWRuW3ZuXV0rKyxOdDxLdCYmKE50PUt0KSwkclt2bl09MDtmb3IoQ2lbMF09MCx2bj0x''@;'; put 'put ''O3ZuPD1OdDsrK3ZuKUNpW3ZuKzE2XT1tcj1tcitDaVt2bi0xXTw8MTtmb3Iodm49MDt2bjxOcjsrK3ZuKTAhPShtcj1kblt2bl0pJiYoJHJbdm5dPUNpW21yKzE2XSsrKTt2YXIgWWk9MDtmb3Iodm49MDt2bjxOcjsrK3ZuKWlmKDAhPShZaT1kblt2bl0pKWZvcihtcj1tbygkclt2bl0sTnQp''@;'; put 'put ''Pj5OdC1ZaSxqbj0oMTw8TnQrNC1ZaSktMTtqbj49MDstLWpuKVRuW21yfGpuPDxZaV09MTUmWWl8dm48PDQ7cmV0dXJuIE50fXZhciBoYz1RaT9uZXcgVWludDE2QXJyYXkoNTEyKTpEYyg1MTIpLGVuPVFpP25ldyBVaW50MTZBcnJheSgzMik6RGMoMzIpO2lmKCFRaSl7Zm9yKHZhciBNbj0w''@;'; put 'put ''O01uPDUxMjsrK01uKWhjW01uXT0wO2ZvcihNbj0wO01uPDMyOysrTW4pZW5bTW5dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBkbj1bXSxUbj0wO1RuPDMyO1RuKyspZG4ucHVzaCg1KTtVMShkbixlbiwzMik7dmFyIGhuPVtdO2ZvcihUbj0wO1RuPD0xNDM7VG4rKylobi5wdXNoKDgpO2Zvcig7''@;'; put 'put ''VG48PTI1NTtUbisrKWhuLnB1c2goOSk7Zm9yKDtUbjw9Mjc5O1RuKyspaG4ucHVzaCg3KTtmb3IoO1RuPD0yODc7VG4rKylobi5wdXNoKDgpO1UxKGhuLGhjLDI4OCl9KCk7dmFyIFVuPVFpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6RGMoMzI3NjgpLHdpPVFpP25ldyBVaW50MTZBcnJheSgz''@;'; put 'put ''Mjc2OCk6RGMoMzI3NjgpLGNyPVFpP25ldyBVaW50MTZBcnJheSgxMjgpOkRjKDEyOCksUmk9MSx5cj0xO2Z1bmN0aW9uIExpKGRuLFRuKXt2YXIgaG49T24oZG4sVG4pKzI1NyxOdD1PbihkbixUbis9NSkrMSxLdD1mdW5jdGlvbiBrbChkbixUbil7dmFyIGhuPTcmVG4sTnQ9VG4+Pj4zO3Jl''@;'; put 'put ''dHVybihkbltOdF18KGhuPD00PzA6ZG5bTnQrMV08PDgpKT4+PmhuJjE1fShkbixUbis9NSkrNDtUbis9NDtmb3IodmFyIHZuPTAsam49UWk/bmV3IFVpbnQ4QXJyYXkoMTkpOkRjKDE5KSxtcj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sTnI9MSxDaT1RaT9uZXcg''@;'; put 'put ''VWludDhBcnJheSg4KTpEYyg4KSwkcj1RaT9uZXcgVWludDhBcnJheSg4KTpEYyg4KSxZaT1qbi5sZW5ndGgsamk9MDtqaTxLdDsrK2ppKWpuW1ppW2ppXV09dm49QmkoZG4sVG4pLE5yPHZuJiYoTnI9dm4pLENpW3ZuXSsrLFRuKz0zO3ZhciB1bz0wO2ZvcihDaVswXT0wLGppPTE7amk8PU5y''@;'; put 'put ''OysramkpJHJbamldPXVvPXVvK0NpW2ppLTFdPDwxO2ZvcihqaT0wO2ppPFlpOysramkpMCE9KHVvPWpuW2ppXSkmJihtcltqaV09JHJbdW9dKyspO3ZhciAkYT0wO2ZvcihqaT0wO2ppPFlpOysramkpaWYoMCE9KCRhPWpuW2ppXSkpe3VvPURvW21yW2ppXV0+PjgtJGE7Zm9yKHZhciBiYT0o''@;'; put 'put ''MTw8Ny0kYSktMTtiYT49MDstLWJhKWNyW3VvfGJhPDwkYV09NyYkYXxqaTw8M312YXIgTm89W107Zm9yKE5yPTE7Tm8ubGVuZ3RoPGhuK050Oylzd2l0Y2godW89Y3Jbd3MoZG4sVG4pXSxUbis9NyZ1byx1bz4+Pj0zKXtjYXNlIDE2OmZvcih2bj0zK2NvKGRuLFRuKSxUbis9Mix1bz1Ob1tO''@;'; put 'put ''by5sZW5ndGgtMV07dm4tLSA+MDspTm8ucHVzaCh1byk7YnJlYWs7Y2FzZSAxNzpmb3Iodm49MytCaShkbixUbiksVG4rPTM7dm4tLSA+MDspTm8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcih2bj0xMSt3cyhkbixUbiksVG4rPTc7dm4tLSA+MDspTm8ucHVzaCgwKTticmVhaztkZWZhdWx0''@;'; put 'put ''Ok5vLnB1c2godW8pLE5yPHVvJiYoTnI9dW8pfXZhciB5bD1Oby5zbGljZSgwLGhuKSxXMT1Oby5zbGljZShobik7Zm9yKGppPWhuO2ppPDI4NjsrK2ppKXlsW2ppXT0wO2ZvcihqaT1OdDtqaTwzMDsrK2ppKVcxW2ppXT0wO3JldHVybiBSaT1VMSh5bCxVbiwyODYpLHlyPVUxKFcxLHdpLDMw''@;'; put 'put ''KSxUbn1mdW5jdGlvbiBOaShkbixUbil7dmFyIE50PWZ1bmN0aW9uIFFhKGRuLFRuKXtpZigzPT1kblswXSYmISgzJmRuWzFdKSlyZXR1cm5bUihUbiksMl07Zm9yKHZhciBobj0wLE50PTAsS3Q9cyhUbnx8MTw8MTgpLHZuPTAsam49S3QubGVuZ3RoPj4+MCxtcj0wLE5yPTA7ISgxJk50KTsp''@;'; put 'put ''aWYoTnQ9QmkoZG4saG4pLGhuKz0zLE50Pj4+MSlmb3IoTnQ+Pj4xPT0xPyhtcj05LE5yPTUpOihobj1MaShkbixobiksbXI9UmksTnI9eXIpLCFUbiYmam48dm4rMzI3NjcmJihqbj0oS3Q9WmMoS3Qsdm4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciAkcj1QcyhkbixobixtciksWWk9TnQ+Pj4x''@;'; put 'put ''PT0xP2hjWyRyXTpVblskcl07aWYoaG4rPTE1JllpLChZaT4+Pj00KT4+PjgmMjU1KXtpZigyNTY9PVlpKWJyZWFrO3ZhciBqaT0oWWktPTI1Nyk8OD8wOllpLTQ+PjI7amk+NSYmKGppPTApO3ZhciB1bz12bitfaVtZaV07amk+MCYmKHVvKz1QcyhkbixobixqaSksaG4rPWppKSwkcj1Qcyhk''@;'; put 'put ''bixobixOciksaG4rPTE1JihZaT1OdD4+PjE9PTE/ZW5bJHJdOndpWyRyXSk7dmFyICRhPShZaT4+Pj00KTw0PzA6WWktMj4+MSxiYT1wYVtZaV07Zm9yKCRhPjAmJihiYSs9UHMoZG4saG4sJGEpLGhuKz0kYSksIVRuJiZqbjx1byYmKGpuPShLdD1aYyhLdCx1bykpLmxlbmd0aCk7dm48dW87''@;'; put 'put ''KUt0W3ZuXT1LdFt2bi1iYV0sKyt2bn1lbHNlIEt0W3ZuKytdPVlpfWVsc2V7NyZobiYmKGhuKz04LSg3JmhuKSk7dmFyIENpPWRuW2huPj4+M118ZG5bMSsoaG4+Pj4zKV08PDg7aWYoaG4rPTMyLCFUbiYmam48dm4rQ2kmJihqbj0oS3Q9WmMoS3Qsdm4rQ2kpKS5sZW5ndGgpLCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBkbi5jb3B5KWRuLmNvcHkoS3Qsdm4saG4+Pj4zLChobj4+PjMpK0NpKSx2bis9Q2ksaG4rPTgqQ2k7ZWxzZSBmb3IoO0NpLS0gPjA7KUt0W3ZuKytdPWRuW2huPj4+M10saG4rPTh9cmV0dXJuW1RuP0t0Okt0LnNsaWNlKDAsdm4pLGhuKzc+Pj4zXX0oZG4uc2xpY2UoZG4u''@;'; put 'put ''bHx8MCksVG4pO3JldHVybiBkbi5sKz1OdFsxXSxOdFswXX1mdW5jdGlvbiBfYShkbixUbil7aWYoIWRuKXRocm93IG5ldyBFcnJvcihUbik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9yKFRuKX1mdW5jdGlvbiBPaShkbixUbil7dmFyIGhuPWRuO0dzKGhuLDApO3ZhciB2bj17''@;'; put 'put ''RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07bW4odm4se3Jvb3Q6VG4ucm9vdH0pO2Zvcih2YXIgam49aG4ubGVuZ3RoLTQ7KDgwIT1obltqbl18fDc1IT1obltqbisxXXx8NSE9aG5bam4rMl18fDYhPWhuW2puKzNdKSYmam4+PTA7KS0tam47aG4ubD1qbis0LGhuLmwrPTQ7dmFyIG1yPWhu''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7aG4ubCs9Njt2YXIgTnI9aG4ucmVhZF9zaGlmdCg0KTtmb3IoaG4ubD1Ocixqbj0wO2puPG1yOysram4pe2huLmwrPTIwO3ZhciBDaT1obi5yZWFkX3NoaWZ0KDQpLCRyPWhuLnJlYWRfc2hpZnQoNCksWWk9aG4ucmVhZF9zaGlmdCgyKSxqaT1obi5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLHVvPWhuLnJlYWRfc2hpZnQoMik7aG4ubCs9ODt2YXIgJGE9aG4ucmVhZF9zaGlmdCg0KSxiYT1vZShobi5zbGljZShobi5sK1lpLGhuLmwrWWkramkpKTtobi5sKz1ZaStqaSt1bzt2YXIgTm89aG4ubDtobi5sPSRhKzQsUnMoaG4sQ2ksJHIsdm4sYmEpLGhuLmw9Tm99cmV0dXJuIHZu''@;'; put 'put ''fWZ1bmN0aW9uIFJzKGRuLFRuLGhuLE50LEt0KXtkbi5sKz0yO3ZhciB2bj1kbi5yZWFkX3NoaWZ0KDIpLGpuPWRuLnJlYWRfc2hpZnQoMiksbXI9ZnVuY3Rpb24gbGUoZG4pe3ZhciBUbj02NTUzNSZkbi5yZWFkX3NoaWZ0KDIpLGhuPTY1NTM1JmRuLnJlYWRfc2hpZnQoMiksTnQ9bmV3IERh''@;'; put 'put ''dGUsS3Q9MzEmaG4sdm49MTUmKGhuPj4+PTUpO2huPj4+PTQsTnQuc2V0TWlsbGlzZWNvbmRzKDApLE50LnNldEZ1bGxZZWFyKGhuKzE5ODApLE50LnNldE1vbnRoKHZuLTEpLE50LnNldERhdGUoS3QpO3ZhciBqbj0zMSZUbixtcj02MyYoVG4+Pj49NSk7cmV0dXJuIE50LnNldEhvdXJzKFRu''@;'; put 'put ''Pj4+PTYpLE50LnNldE1pbnV0ZXMobXIpLE50LnNldFNlY29uZHMoam48PDEpLE50fShkbik7aWYoODI1NyZ2bil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciBOcj1kbi5yZWFkX3NoaWZ0KDQpLENpPWRuLnJlYWRfc2hpZnQoNCksJHI9ZG4u''@;'; put 'put ''cmVhZF9zaGlmdCg0KSxZaT1kbi5yZWFkX3NoaWZ0KDIpLGppPWRuLnJlYWRfc2hpZnQoMiksdW89IiIsJGE9MDskYTxZaTsrKyRhKXVvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGRuW2RuLmwrK10pO2lmKGppKXt2YXIgYmE9b2UoZG4uc2xpY2UoZG4ubCxkbi5sK2ppKSk7KGJhWzIxNTg5XXx8''@;'; put 'put ''e30pLm10JiYobXI9YmFbMjE1ODldLm10KSwoKEt0fHx7fSlbMjE1ODldfHx7fSkubXQmJihtcj1LdFsyMTU4OV0ubXQpfWRuLmwrPWppO3ZhciBObz1kbi5zbGljZShkbi5sLGRuLmwrQ2kpO3N3aXRjaChqbil7Y2FzZSA4Ok5vPWZ1bmN0aW9uIExuKGRuLFRuKXtpZighTHIpcmV0dXJuIE5p''@;'; put 'put ''KGRuLFRuKTt2YXIgTnQ9bmV3KDAsTHIuSW5mbGF0ZVJhdyksS3Q9TnQuX3Byb2Nlc3NDaHVuayhkbi5zbGljZShkbi5sKSxOdC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gZG4ubCs9TnQuYnl0ZXNSZWFkLEt0fShkbiwkcik7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIram4pfXZhciB5bD0hMTs4JnZuJiYoMTM0Njk1NzYwPT0oTnI9ZG4ucmVhZF9zaGlmdCg0KSkmJihOcj1kbi5yZWFkX3NoaWZ0KDQpLHlsPSEwKSxDaT1kbi5yZWFkX3NoaWZ0KDQpLCRyPWRuLnJlYWRfc2hpZnQo''@;'; put 'put ''NCkpLENpIT1UbiYmX2EoeWwsIkJhZCBjb21wcmVzc2VkIHNpemU6ICIrVG4rIiAhPSAiK0NpKSwkciE9aG4mJl9hKHlsLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIraG4rIiAhPSAiKyRyKTt2YXIgVzE9dmUuYnVmKE5vLDApOygwfE5yKSE9KDB8VzEpJiZfYSh5bCwiQmFkIENSQzMyIGNo''@;'; put 'put ''ZWNrc3VtOiAiK05yKyIgIT0gIitXMSksdDAoTnQsdW8sTm8se3Vuc2FmZTohMCxtdDptcn0pfWZ1bmN0aW9uIHQwKGRuLFRuLGhuLE50KXt2YXIgS3Q9TnQmJk50LnVuc2FmZTtLdHx8bW4oZG4pO3ZhciB2bj0hS3QmJnVlLmZpbmQoZG4sVG4pO2lmKCF2bil7dmFyIGpuPWRuLkZ1bGxQYXRo''@;'; put 'put ''c1swXTtUbi5zbGljZSgwLGpuLmxlbmd0aCk9PWpuP2puPVRuOigiLyIhPWpuLnNsaWNlKC0xKSYmKGpuKz0iLyIpLGpuPShqbitUbikucmVwbGFjZSgiLy8iLCIvIikpLHZuPXtuYW1lOlcoVG4pLHR5cGU6Mn0sZG4uRmlsZUluZGV4LnB1c2godm4pLGRuLkZ1bGxQYXRocy5wdXNoKGpuKSxL''@;'; put 'put ''dHx8dWUudXRpbHMuY2ZiX2djKGRuKX1yZXR1cm4gdm4uY29udGVudD1obix2bi5zaXplPWhuP2huLmxlbmd0aDowLE50JiYoTnQuQ0xTSUQmJih2bi5jbHNpZD1OdC5DTFNJRCksTnQubXQmJih2bi5tdD1OdC5tdCksTnQuY3QmJih2bi5jdD1OdC5jdCkpLHZufXJldHVybiB4LmZpbmQ9ZnVu''@;'; put 'put ''Y3Rpb24gaHIoZG4sVG4pe3ZhciBobj1kbi5GdWxsUGF0aHMubWFwKGZ1bmN0aW9uKE5yKXtyZXR1cm4gTnIudG9VcHBlckNhc2UoKX0pLE50PWhuLm1hcChmdW5jdGlvbihOcil7dmFyIENpPU5yLnNwbGl0KCIvIik7cmV0dXJuIENpW0NpLmxlbmd0aC0oIi8iPT1Oci5zbGljZSgtMSk/Mjox''@;'; put 'put ''KV19KSxLdD0hMTs0Nz09PVRuLmNoYXJDb2RlQXQoMCk/KEt0PSEwLFRuPWhuWzBdLnNsaWNlKDAsLTEpK1RuKTpLdD0tMSE9PVRuLmluZGV4T2YoIi8iKTt2YXIgdm49VG4udG9VcHBlckNhc2UoKSxqbj0hMD09PUt0P2huLmluZGV4T2Yodm4pOk50LmluZGV4T2Yodm4pO2lmKC0xIT09am4p''@;'; put 'put ''cmV0dXJuIGRuLkZpbGVJbmRleFtqbl07dmFyIG1yPSF2bi5tYXRjaChsKTtmb3Iodm49dm4ucmVwbGFjZSh5LCIiKSxtciYmKHZuPXZuLnJlcGxhY2UobCwiISIpKSxqbj0wO2puPGhuLmxlbmd0aDsrK2puKWlmKChtcj9obltqbl0ucmVwbGFjZShsLCIhIik6aG5bam5dKS5yZXBsYWNlKHks''@;'; put 'put ''IiIpPT12bnx8KG1yP050W2puXS5yZXBsYWNlKGwsIiEiKTpOdFtqbl0pLnJlcGxhY2UoeSwiIik9PXZuKXJldHVybiBkbi5GaWxlSW5kZXhbam5dO3JldHVybiBudWxsfSx4LnJlYWQ9ZnVuY3Rpb24gbHIoZG4sVG4pe3N3aXRjaChUbiYmVG4udHlwZXx8ImJhc2U2NCIpe2Nhc2UiZmlsZSI6''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIFNuKGRuLFRuKXtyZXR1cm4gRGUoKSxSZShkZS5yZWFkRmlsZVN5bmMoZG4pLFRuKX0oZG4sVG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUmUodShoZS5kZWNvZGUoZG4pKSxUbik7Y2FzZSJiaW5hcnkiOnJldHVybiBSZSh1KGRuKSxUbil9cmV0dXJuIFJlKGRuLFRu''@;'; put 'put ''KX0seC5wYXJzZT1SZSx4LndyaXRlPWZ1bmN0aW9uIEZuKGRuLFRuKXt2YXIgaG49SG4oZG4sVG4pO3N3aXRjaChUbiYmVG4udHlwZSl7Y2FzZSJmaWxlIjpyZXR1cm4gRGUoKSxkZS53cml0ZUZpbGVTeW5jKFRuLmZpbGVuYW1lLGhuKSxobjtjYXNlImJpbmFyeSI6cmV0dXJuIFNyKGhuKTtj''@;'; put 'put ''YXNlImJhc2U2NCI6cmV0dXJuIGhlLmVuY29kZShTcihobikpfXJldHVybiBobn0seC53cml0ZUZpbGU9ZnVuY3Rpb24gSWkoZG4sVG4saG4pe0RlKCk7dmFyIE50PUhuKGRuLGhuKTtkZS53cml0ZUZpbGVTeW5jKFRuLE50KX0seC51dGlscz17Y2ZiX25ldzpmdW5jdGlvbiBvdShkbil7dmFy''@;'; put 'put ''IFRuPXt9O3JldHVybiBtbihUbixkbiksVG59LGNmYl9hZGQ6dDAsY2ZiX2RlbDpmdW5jdGlvbiBCbChkbixUbil7bW4oZG4pO3ZhciBobj11ZS5maW5kKGRuLFRuKTtpZihobilmb3IodmFyIE50PTA7TnQ8ZG4uRmlsZUluZGV4Lmxlbmd0aDsrK050KWlmKGRuLkZpbGVJbmRleFtOdF09PWhu''@;'; put 'put ''KXJldHVybiBkbi5GaWxlSW5kZXguc3BsaWNlKE50LDEpLGRuLkZ1bGxQYXRocy5zcGxpY2UoTnQsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gWHAoZG4sVG4saG4pe21uKGRuKTt2YXIgTnQ9dWUuZmluZChkbixUbik7aWYoTnQpZm9yKHZhciBLdD0wO0t0PGRuLkZpbGVJbmRl''@;'; put 'put ''eC5sZW5ndGg7KytLdClpZihkbi5GaWxlSW5kZXhbS3RdPT1OdClyZXR1cm4gZG4uRmlsZUluZGV4W0t0XS5uYW1lPVcoaG4pLGRuLkZ1bGxQYXRoc1tLdF09aG4sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiBZZyhkbil7R24oZG4sITApfSxSZWFkU2hpZnQ6c2MsQ2hlY2tGaWVsZDph''@;'; put 'put ''MSxwcmVwX2Jsb2I6R3MsYmNvbmNhdDpMLHVzZV96bGliOmZ1bmN0aW9uIHByKGRuKXt0cnl7dmFyIGhuPW5ldygwLGRuLkluZmxhdGVSYXcpO2lmKGhuLl9wcm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLGhuLl9maW5pc2hGbHVzaEZsYWcpLCFobi5ieXRlc1JlYWQpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTtMcj1kbn1jYXRjaChOdCl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRpdmUgemxpYjogIisoTnQubWVzc2FnZXx8TnQpKX19LF9kZWZsYXRlUmF3OkljLF9pbmZsYXRlUmF3Ok5pLGNvbnN0czp0YX0seH0o''@;'; put 'put ''KTt0cnl7emU9ZCg4MzMzNyl9Y2F0Y2h7fWZ1bmN0aW9uIE9lKGcpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZz92KGcpOkFycmF5LmlzQXJyYXkoZyk/ZnVuY3Rpb24gXyhnKXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBu''@;'; put 'put ''ZXcgVWludDhBcnJheShnKX0oZyk6Z31mdW5jdGlvbiBDZShnLHgsdyl7aWYodHlwZW9mIHplPCJ1IiYmemUud3JpdGVGaWxlU3luYylyZXR1cm4gdz96ZS53cml0ZUZpbGVTeW5jKGcseCx3KTp6ZS53cml0ZUZpbGVTeW5jKGcseCk7dmFyIFY9InV0ZjgiPT13P1hhKHgpOng7aWYodHlwZW9m''@;'; put 'put ''IElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoVixnKTtpZih0eXBlb2YgQmxvYjwidSIpe3ZhciBXPW5ldyBCbG9iKFtPZShWKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2Ip''@;'; put 'put ''cmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKFcsZyk7aWYodHlwZW9mIHNhdmVBczwidSIpcmV0dXJuIHNhdmVBcyhXLGcpO2lmKHR5cGVvZiBVUkw8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgZWU9''@;'; put 'put ''VVJMLmNyZWF0ZU9iamVjdFVSTChXKTtpZigib2JqZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNocm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1''@;'; put 'put ''bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChlZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOmVlLGZpbGVuYW1lOmcsc2F2ZUFzOiEwfSk7dmFyIGxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1sZS5kb3dubG9hZClyZXR1cm4gbGUuZG93''@;'; put 'put ''bmxvYWQ9ZyxsZS5ocmVmPWVlLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGUpLGxlLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9r''@;'; put 'put ''ZU9iamVjdFVSTChlZSl9LDZlNCksZWV9fWlmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIG9lPUZpbGUoZyk7cmV0dXJuIG9lLm9wZW4oInciKSxvZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KHgpJiYoeD1wKHgpKSxv''@;'; put 'put ''ZS53cml0ZSh4KSxvZS5jbG9zZSgpLHh9Y2F0Y2goZGUpe2lmKCFkZS5tZXNzYWdlfHwhZGUubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBkZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzYXZlIGZpbGUgIitnKX1mdW5jdGlvbiB4ZShnKXtmb3IodmFyIHg9T2JqZWN0LmtleXMo''@;'; put 'put ''Zyksdz1bXSxWPTA7Vjx4Lmxlbmd0aDsrK1YpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGcseFtWXSkmJncucHVzaCh4W1ZdKTtyZXR1cm4gd31mdW5jdGlvbiBNZShnLHgpe2Zvcih2YXIgdz1bXSxWPXhlKGcpLFc9MDtXIT09Vi5sZW5ndGg7KytXKW51bGw9PXdbZ1tW''@;'; put 'put ''W1ddXVt4XV0mJih3W2dbVltXXV1beF1dPVZbV10pO3JldHVybiB3fWZ1bmN0aW9uIEllKGcpe2Zvcih2YXIgeD1bXSx3PXhlKGcpLFY9MDtWIT09dy5sZW5ndGg7KytWKXhbZ1t3W1ZdXV09d1tWXTtyZXR1cm4geH1mdW5jdGlvbiBiZShnKXtmb3IodmFyIHg9W10sdz14ZShnKSxWPTA7ViE9''@;'; put 'put ''PXcubGVuZ3RoOysrVil4W2dbd1tWXV1dPXBhcnNlSW50KHdbVl0sMTApO3JldHVybiB4fXZhciBZZSxxdCxwdD1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCwwKSxLZT0wO2Z1bmN0aW9uIGh0KCl7S2U9cHQuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLXB0''@;'; put 'put ''LmdldFRpbWV6b25lT2Zmc2V0KCkpLFllPWZ1bmN0aW9uKHgsdyl7dmFyIFY9eC5nZXRUaW1lKCk7cmV0dXJuIHcmJihWLT0xMjYzMTY4ZTUpLChWLUtlKS84NjRlNX0scXQ9ZnVuY3Rpb24oeCl7dmFyIHc9bmV3IERhdGU7cmV0dXJuIHcuc2V0VGltZSgyNCp4KjYwKjYwKjFlMytLZSksd319''@;'; put 'put ''ZnVuY3Rpb24gdHQoZyl7dmFyIHg9MCx3PTAsVj0hMSxXPWcubWF0Y2goL1AoWzAtOVwuXStZKT8oWzAtOVwuXStNKT8oWzAtOVwuXStEKT9UKFswLTlcLl0rSCk/KFswLTlcLl0rTSk/KFswLTlcLl0rUyk/Lyk7aWYoIVcpdGhyb3cgbmV3IEVycm9yKCJ8IitnKyJ8IGlzIG5vdCBhbiBJU084''@;'; put 'put ''NjAxIER1cmF0aW9uIik7Zm9yKHZhciBlZT0xO2VlIT1XLmxlbmd0aDsrK2VlKWlmKFdbZWVdKXtzd2l0Y2godz0xLGVlPjMmJihWPSEwKSxXW2VlXS5zbGljZShXW2VlXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6''@;'; put 'put ''ICIrV1tlZV0uc2xpY2UoV1tlZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOncqPTI0O2Nhc2UiSCI6dyo9NjA7Y2FzZSJNIjppZighVil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO3cqPTYwfXgrPXcqcGFyc2VJbnQoV1tlZV0sMTApfXJldHVybiB4''@;'; put 'put ''fWh0KCk7dmFyIFVlPW5ldyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFoiKTtpc05hTihVZS5nZXRGdWxsWWVhcigpKSYmKFVlPW5ldyBEYXRlKCIyLzE5LzE3IikpO3ZhciAkZT0yMDE3PT1VZS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIExlKGcseCl7dmFyIHc9bmV3IERhdGUoZyk7''@;'; put 'put ''aWYoJGUpcmV0dXJuIHg+MD93LnNldFRpbWUody5nZXRUaW1lKCkrNjAqdy5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6eDwwJiZ3LnNldFRpbWUody5nZXRUaW1lKCktNjAqdy5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyksdztpZihnIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZztpZigxOTE3''@;'; put 'put ''PT1VZS5nZXRGdWxsWWVhcigpJiYhaXNOYU4ody5nZXRGdWxsWWVhcigpKSl7dmFyIFY9dy5nZXRGdWxsWWVhcigpO3JldHVybiBnLmluZGV4T2YoIiIrVik+LTF8fHcuc2V0RnVsbFllYXIody5nZXRGdWxsWWVhcigpKzEwMCksd312YXIgVz1nLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIi''@;'; put 'put ''LCIxOSIsIjAiLCIwIiwiMCJdLGVlPW5ldyBEYXRlKCtXWzBdLCtXWzFdLTEsK1dbMl0sK1dbM118fDAsK1dbNF18fDAsK1dbNV18fDApO3JldHVybiBnLmluZGV4T2YoIloiKT4tMSYmKGVlPW5ldyBEYXRlKGVlLmdldFRpbWUoKS02MCplZS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykpLGVl''@;'; put 'put ''fWZ1bmN0aW9uIG50KGcpe2Zvcih2YXIgeD0iIix3PTA7dyE9Zy5sZW5ndGg7Kyt3KXgrPVN0cmluZy5mcm9tQ2hhckNvZGUoZ1t3XSk7cmV0dXJuIHh9ZnVuY3Rpb24gcm4oZyl7aWYoIm9iamVjdCIhPXR5cGVvZiBnfHxudWxsPT1nKXJldHVybiBnO2lmKGcgaW5zdGFuY2VvZiBEYXRlKXJl''@;'; put 'put ''dHVybiBuZXcgRGF0ZShnLmdldFRpbWUoKSk7aWYoQXJyYXkuaXNBcnJheShnKSlyZXR1cm4gZnVuY3Rpb24geHQoZyl7Zm9yKHZhciB4PVtdLHc9MDt3PGcubGVuZ3RoOysrdyl7dmFyIFY9Z1t3XTsib2JqZWN0Ij09dHlwZW9mIFY/eFt3XT1ybihWKTpudWxsIT1WJiYoeFt3XT1WKX1yZXR1''@;'; put 'put ''cm4geH0oZyk7dmFyIHg9e307Zm9yKHZhciB3IGluIGcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGcsdykmJih4W3ddPXJuKGdbd10pKTtyZXR1cm4geH1mdW5jdGlvbiBUdChnLHgpe2lmKCJvYmplY3QiIT10eXBlb2YgeHx8bnVsbD09eClyZXR1cm4gZztmb3IodmFy''@;'; put 'put ''IHcgaW4geClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCx3KSYmKGdbd109cm4oeFt3XSkpO3JldHVybiBnfWZ1bmN0aW9uIHluKGcseCl7Zm9yKHZhciB3PSIiO3cubGVuZ3RoPHg7KXcrPWc7cmV0dXJuIHd9ZnVuY3Rpb24gWHQoZyl7dmFyIHg9TnVtYmVyKGcpO2lm''@;'; put 'put ''KCFpc05hTih4KSlyZXR1cm4gaXNGaW5pdGUoeCk/eDpOYU47aWYoIS9cZC8udGVzdChnKSlyZXR1cm4geDt2YXIgdz0xLFY9Zy5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gdyo9MTAw''@;'; put 'put ''LCIifSk7cmV0dXJuIGlzTmFOKHg9TnVtYmVyKFYpKSYmKFY9Vi5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihXLGVlKXtyZXR1cm4gdz0tdyxlZX0pLGlzTmFOKHg9TnVtYmVyKFYpKSk/eDp4L3d9ZnVuY3Rpb24gUXQoZyl7dmFyIHg9bmV3IERhdGUoZyksdz1uZXcgRGF0ZShOYU4p''@;'; put 'put ''LFY9eC5nZXRZZWFyKCksVz14LmdldE1vbnRoKCksZWU9eC5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKGVlKXx8VjwwfHxWPjgwOTk/dzooVz4wfHxlZT4xKSYmMTAxIT1WfHxnLnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8''@;'; put 'put ''ZGVjLyk/eDpnLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/dzp4fWZ1bmN0aW9uIFhyKGcseCl7aWYoeCYmeC5yYXcpcmV0dXJue3Q6InMiLHY6Z307aWYoIWcpcmV0dXJue3Q6InoifTtpZigiVFJVRSI9PT1nKXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09ZylyZXR1cm57dDoiYiIs''@;'; put 'put ''djohMX07dmFyIHc9IiIsVj1OdW1iZXIoZyk7aWYoaXNGaW5pdGUoVikpcmV0dXJue3Q6Im4iLHY6Vn07aWYoaXNOYU4oVikmJi9cZC8udGVzdChnKSl7dmFyIFc9MSxlZT1nLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihHZSxldCxidCl7cmV0dXJuIHd8fCh3PSIjLCMjMCIp''@;'; put 'put ''LGV0K2J0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihHZSl7d3x8KHc9IjAiKSx3Kz0iLiI7Zm9yKHZhciBldD0yO2V0PD1HZS5sZW5ndGg7KytldCl3Kz0iMCI7cmV0dXJuIEdlfSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gVyo9MTAw''@;'; put 'put ''LHd8fCh3PSIwIiksdys9IiUiLCIifSk7aWYoIWlzTmFOKFY9TnVtYmVyKGVlKSkpcmV0dXJue3Q6Im4iLHY6Vi9XLHo6d307aWYoZWU9ZWUucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oR2UsZXQpe3JldHVybiBXPS1XLGV0fSksIWlzTmFOKFY9TnVtYmVyKGVlKSkpcmV0dXJue3Q6''@;'; put 'put ''Im4iLHY6Vi9XLHo6KHd8fCIwIikrIl8pOygiKyh3fHwiMCIpKyIpO0AifX1lOmlmKCF4fHwheC5yYXdEYXRlcyl7dmFyIGxlPXgmJnguY2VsbERhdGVzLG9lPW5ldyBEYXRlKGcpLERlPW9lLmdldFllYXIoKSxSZT1vZS5nZXRNb250aCgpLFZlPW9lLmdldERhdGUoKTtpZihpc05hTihWZSl8''@;'; put 'put ''fERlPDB8fERlPjgwOTkpYnJlYWsgZTtpZigoUmU+MHx8VmU+MSkmJjEwMSE9RGUpcmV0dXJue3Q6bGU/ImQiOiJuIix2OmxlP29lOlllKG9lKSx6OnguZGF0ZU5GfHxiLl90YWJsZVsxNF19O2lmKGcudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1''@;'; put 'put ''Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDpsZT8iZCI6Im4iLHY6bGU/b2U6WWUob2UpLHo6eC5kYXRlTkZ8fGIuX3RhYmxlWzE0XX07aWYoZy5tYXRjaCgvW14tMC05OixcL1xcXS8pKWJyZWFrIGU7cmV0dXJuIG9lfXJldHVybnt0OiJzIix2Omd9fXZhciBIdCxzbj01PT0iYWJhY2Fi''@;'; put 'put ''YSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBMdChnKXtyZXR1cm4gbnVsbCE9ZyYmIWd9ZnVuY3Rpb24gd3QoZyl7cmV0dXJuIGcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZy5zbGljZSgxKX1mdW5jdGlvbiBSbihnKXtyZXR1cm4gZz9nLmRhdGE/VShnLmRhdGEpOmcuYXNO''@;'; put 'put ''b2RlQnVmZmVyJiZfZT9VKGcuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmcoImJpbmFyeSIpKTpnLmFzQmluYXJ5P1UoZy5hc0JpbmFyeSgpKTpnLl9kYXRhJiZnLl9kYXRhLmdldENvbnRlbnQ/VShudChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnLl9kYXRhLmdldENvbnRlbnQoKSwwKSkp''@;'; put 'put ''OmcuY29udGVudCYmZy50eXBlP1UobnQoZy5jb250ZW50KSk6bnVsbDpudWxsfWZ1bmN0aW9uIFFlKGcpe2lmKCFnKXJldHVybiBudWxsO2lmKGcuZGF0YSlyZXR1cm4gSChnLmRhdGEpO2lmKGcuYXNOb2RlQnVmZmVyJiZfZSlyZXR1cm4gZy5hc05vZGVCdWZmZXIoKTtpZihnLl9kYXRhJiZn''@;'; put 'put ''Ll9kYXRhLmdldENvbnRlbnQpe3ZhciB4PWcuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgeD9IKHgpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHgpfXJldHVybiBnLmNvbnRlbnQmJmcudHlwZT9nLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBRcihnLHgpe2Zv''@;'; put 'put ''cih2YXIgdz1nLkZ1bGxQYXRoc3x8eGUoZy5maWxlcyksVj14LnRvTG93ZXJDYXNlKCksVz1WLnJlcGxhY2UoL1wvL2csIlxcIiksZWU9MDtlZTx3Lmxlbmd0aDsrK2VlKXt2YXIgbGU9d1tlZV0udG9Mb3dlckNhc2UoKTtpZihWPT1sZXx8Vz09bGUpcmV0dXJuIGcuZmlsZXNbd1tlZV1dfXJl''@;'; put 'put ''dHVybiBudWxsfWZ1bmN0aW9uIE5lKGcseCl7dmFyIHc9UXIoZyx4KTtpZihudWxsPT13KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK3grIiBpbiB6aXAiKTtyZXR1cm4gd31mdW5jdGlvbiB5dChnLHgsdyl7aWYoIXcpcmV0dXJuIGZ1bmN0aW9uIFB0KGcpe3JldHVybiBn''@;'; put 'put ''JiYiLmJpbiI9PT1nLm5hbWUuc2xpY2UoLTQpP1FlKGcpOlJuKGcpfShOZShnLHgpKTtpZigheClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIHl0KGcseCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHJyKGcseCx3KXtpZighdylyZXR1cm4gUm4oTmUoZyx4KSk7aWYoIXgpcmV0dXJuIG51''@;'; put 'put ''bGw7dHJ5e3JldHVybiBycihnLHgpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBhdChnLHgsdyl7aWYoIXcpcmV0dXJuIFFlKE5lKGcseCkpO2lmKCF4KXJldHVybiBudWxsO3RyeXtyZXR1cm4gYXQoZyx4KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gd24oZyx4LHcpe2cuRnVs''@;'; put 'put ''bFBhdGhzP3VlLnV0aWxzLmNmYl9hZGQoZyx4LHcpOmcuZmlsZSh4LHcpfWZ1bmN0aW9uIHNpKCl7cmV0dXJuIEh0P25ldyBIdDp1ZS51dGlscy5jZmJfbmV3KCl9ZnVuY3Rpb24gbm4oZyx4KXt2YXIgdztpZihIdClzd2l0Y2goeC50eXBlKXtjYXNlImJhc2U2NCI6dz1uZXcgSHQoZyx7YmFz''@;'; put 'put ''ZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOnc9bmV3IEh0KGcse2Jhc2U2NDohMX0pO2JyZWFrO2Nhc2UiYnVmZmVyIjp3PW5ldyBIdChnKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIit4LnR5cGUpfWVsc2Ugc3dpdGNo''@;'; put 'put ''KHgudHlwZSl7Y2FzZSJiYXNlNjQiOnc9dWUucmVhZChnLHt0eXBlOiJiYXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOnc9dWUucmVhZChnLHt0eXBlOiJiaW5hcnkifSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnc9dWUucmVhZChnLHt0eXBlOiJidWZmZXIifSk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIreC50eXBlKX1yZXR1cm4gd31mdW5jdGlvbiBsbihnLHgpe2lmKCIvIj09Zy5jaGFyQXQoMCkpcmV0dXJuIGcuc2xpY2UoMSk7dmFyIHc9eC5zcGxpdCgiLyIpOyIvIiE9eC5zbGljZSgtMSkmJncucG9wKCk7Zm9y''@;'; put 'put ''KHZhciBWPWcuc3BsaXQoIi8iKTswIT09Vi5sZW5ndGg7KXt2YXIgVz1WLnNoaWZ0KCk7Ii4uIj09PVc/dy5wb3AoKToiLiIhPT1XJiZ3LnB1c2goVyl9cmV0dXJuIHcuam9pbigiLyIpfXR5cGVvZiBKU1ppcFN5bmM8InUiJiYoSHQ9SlNaaXBTeW5jKSx0ZS5leHBvcnRzJiZ0eXBlb2YgSHQ+''@;'; put 'put ''InUiJiYoSHQ9ZCgzMTc5KSk7dmFyIGtpPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicsYW49Lyg/OlteIlxzPz5cL10rKVxzKj1ccyooKD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXiddKj8pKD86Jyl8KD86W14nIj5c''@;'; put 'put ''c10rKSkvZyxHdD0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytbXiJccz8+XC9dK1xzKj1ccyooPzoiW14iXSoifCdbXiddKid8W14nIj5ccz1dKykpKlxzP1tcL1w/XT8+L2c7a2kubWF0Y2goR3QpfHwoR3Q9LzxbXj5dKj4vZyk7dmFyIGVhPS88XHcqOi8sbWk9LzwoXC8/KVx3Kzov''@;'; put 'put ''O2Z1bmN0aW9uIGZyKGcseCx3KXtmb3IodmFyIFY9e30sVz0wLGVlPTA7VyE9PWcubGVuZ3RoJiYzMiE9PShlZT1nLmNoYXJDb2RlQXQoVykpJiYxMCE9PWVlJiYxMyE9PWVlOysrVyk7aWYoeHx8KFZbMF09Zy5zbGljZSgwLFcpKSxXPT09Zy5sZW5ndGgpcmV0dXJuIFY7dmFyIGxlPWcubWF0''@;'; put 'put ''Y2goYW4pLG9lPTAsZGU9IiIsRGU9MCxSZT0iIixWZT0iIixHZT0xO2lmKGxlKWZvcihEZT0wO0RlIT1sZS5sZW5ndGg7KytEZSl7Zm9yKFZlPWxlW0RlXSxlZT0wO2VlIT1WZS5sZW5ndGgmJjYxIT09VmUuY2hhckNvZGVBdChlZSk7KytlZSk7Zm9yKFJlPVZlLnNsaWNlKDAsZWUpLnRyaW0o''@;'; put 'put ''KTszMj09VmUuY2hhckNvZGVBdChlZSsxKTspKytlZTtmb3IoR2U9MzQ9PShXPVZlLmNoYXJDb2RlQXQoZWUrMSkpfHwzOT09Vz8xOjAsZGU9VmUuc2xpY2UoZWUrMStHZSxWZS5sZW5ndGgtR2UpLG9lPTA7b2UhPVJlLmxlbmd0aCYmNTghPT1SZS5jaGFyQ29kZUF0KG9lKTsrK29lKTtpZihv''@;'; put 'put ''ZT09PVJlLmxlbmd0aClSZS5pbmRleE9mKCJfIik+MCYmKFJlPVJlLnNsaWNlKDAsUmUuaW5kZXhPZigiXyIpKSksVltSZV09ZGUsd3x8KFZbUmUudG9Mb3dlckNhc2UoKV09ZGUpO2Vsc2V7dmFyIGV0PSg1PT09b2UmJiJ4bWxucyI9PT1SZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK1JlLnNs''@;'; put 'put ''aWNlKG9lKzEpO2lmKFZbZXRdJiYiZXh0Ij09UmUuc2xpY2Uob2UtMyxvZSkpY29udGludWU7VltldF09ZGUsd3x8KFZbZXQudG9Mb3dlckNhc2UoKV09ZGUpfX1yZXR1cm4gVn1mdW5jdGlvbiAkaShnKXtyZXR1cm4gZy5yZXBsYWNlKG1pLCI8JDEiKX12YXIgS2k9eyImcXVvdDsiOiciJywi''@;'; put 'put ''JmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSxWaT1JZShLaSkscXI9ZnVuY3Rpb24oKXt2YXIgZz0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dpLHg9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''dyhWKXt2YXIgVz1WKyIiLGVlPVcuaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWVlKXJldHVybiBXLnJlcGxhY2UoZyxmdW5jdGlvbihvZSxkZSl7cmV0dXJuIEtpW29lXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChkZSxvZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8b2V9''@;'; put 'put ''KS5yZXBsYWNlKHgsZnVuY3Rpb24ob2UsZGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGRlLDE2KSl9KTt2YXIgbGU9Vy5pbmRleE9mKCJdXT4iKTtyZXR1cm4gdyhXLnNsaWNlKDAsZWUpKStXLnNsaWNlKGVlKzksbGUpK3coVy5zbGljZShsZSszKSl9fSgpLHVhPS9b''@;'; put 'put ''Jjw+JyJdL2csRmk9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0vZyxSYT0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBvaShnKXtyZXR1cm4oZysiIikucmVwbGFjZShSYSwiX3gwMDVGJCYiKS5yZXBsYWNlKHVhLGZ1bmN0aW9uKHcpe3JldHVybiBWaVt3XX0pLnJlcGxhY2Uo''@;'; put 'put ''RmksZnVuY3Rpb24odyl7cmV0dXJuIl94IisoIjAwMCIrdy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIFVpKGcpe3JldHVybiBvaShnKS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gVmEoZyl7cmV0dXJuIG9pKGcpLnJlcGxh''@;'; put 'put ''Y2UoLyAvZywiX3gwMDIwXyIpfXZhciB1cj0vW1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gZmEoZyl7cmV0dXJuKGcrIiIpLnJlcGxhY2UodWEsZnVuY3Rpb24odyl7cmV0dXJuIFZpW3ddfSkucmVwbGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKHVyLGZ1bmN0aW9uKHcpe3JldHVybiIm''@;'; put 'put ''I3giKygiMDAwIit3LmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24geGkoZyl7cmV0dXJuKGcrIiIpLnJlcGxhY2UodWEsZnVuY3Rpb24odyl7cmV0dXJuIFZpW3ddfSkucmVwbGFjZSh1cixmdW5jdGlvbih3KXtyZXR1cm4iJiN4Iit3LmNoYXJD''@;'; put 'put ''b2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9dmFyIG9hPWZ1bmN0aW9uKCl7dmFyIGc9LyYjKFxkKyk7L2c7ZnVuY3Rpb24geCh3LFYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFYsMTApKX1yZXR1cm4gZnVuY3Rpb24oVil7cmV0dXJuIFYu''@;'; put 'put ''cmVwbGFjZShnLHgpfX0oKSxYaT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4geC5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7Iil9fSgpO2Z1bmN0aW9uIElyKGcpe3N3aXRjaChnKXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUi''@;'; put 'put ''OnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBibz1mdW5jdGlvbih4KXtmb3IodmFyIHc9IiIsVj0wLFc9MCxlZT0wLGxlPTAsb2U9MCxkZT0wO1Y8eC5sZW5ndGg7KShXPXguY2hhckNvZGVBdChWKyspKTwxMjg/dys9U3RyaW5nLmZyb21DaGFyQ29kZShXKTooZWU9eC5jaGFyQ29k''@;'; put 'put ''ZUF0KFYrKyksVz4xOTEmJlc8MjI0PyhvZT0oMzEmVyk8PDYsb2V8PTYzJmVlLHcrPVN0cmluZy5mcm9tQ2hhckNvZGUob2UpKToobGU9eC5jaGFyQ29kZUF0KFYrKyksVzwyNDA/dys9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmVyk8PDEyfCg2MyZlZSk8PDZ8NjMmbGUpOihkZT0oKDcmVyk8''@;'; put 'put ''PDE4fCg2MyZlZSk8PDEyfCg2MyZsZSk8PDZ8NjMmKG9lPXguY2hhckNvZGVBdChWKyspKSktNjU1MzYsdys9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZGU+Pj4xMCYxMDIzKSksdys9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZkZSkpKSkpO3JldHVybiB3fSxYYT1mdW5j''@;'; put 'put ''dGlvbihnKXtmb3IodmFyIHg9W10sdz0wLFY9MCxXPTA7dzxnLmxlbmd0aDspc3dpdGNoKFY9Zy5jaGFyQ29kZUF0KHcrKyksITApe2Nhc2UgVjwxMjg6eC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoVikpO2JyZWFrO2Nhc2UgVjwyMDQ4OngucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5''@;'; put 'put ''MisoVj4+NikpKSx4LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJlYpKSk7YnJlYWs7Y2FzZSBWPj01NTI5NiYmVjw1NzM0NDpWLT01NTI5NixXPWcuY2hhckNvZGVBdCh3KyspLTU2MzIwKyhWPDwxMCkseC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhXPj4xOCY3KSkp''@;'; put 'put ''LHgucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsoVz4+MTImNjMpKSkseC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhXPj42JjYzKSkpLHgucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmVykpKTticmVhaztkZWZhdWx0OngucHVzaChTdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKDIyNCsoVj4+MTIpKSkseC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhWPj42JjYzKSkpLHgucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmVikpKX1yZXR1cm4geC5qb2luKCIiKX07aWYoX2Upe3ZhciBGbD1mdW5jdGlvbih4KXt2YXIgVixXLGRlLHc9QnVmZmVy''@;'; put 'put ''LmFsbG9jKDIqeC5sZW5ndGgpLGVlPTEsbGU9MCxvZT0wO2ZvcihXPTA7Vzx4Lmxlbmd0aDtXKz1lZSllZT0xLChkZT14LmNoYXJDb2RlQXQoVykpPDEyOD9WPWRlOmRlPDIyND8oVj02NCooMzEmZGUpKyg2MyZ4LmNoYXJDb2RlQXQoVysxKSksZWU9Mik6ZGU8MjQwPyhWPTQwOTYqKDE1JmRl''@;'; put 'put ''KSs2NCooNjMmeC5jaGFyQ29kZUF0KFcrMSkpKyg2MyZ4LmNoYXJDb2RlQXQoVysyKSksZWU9Myk6KGVlPTQsVj0yNjIxNDQqKDcmZGUpKzQwOTYqKDYzJnguY2hhckNvZGVBdChXKzEpKSs2NCooNjMmeC5jaGFyQ29kZUF0KFcrMikpKyg2MyZ4LmNoYXJDb2RlQXQoVyszKSksb2U9NTUyOTYr''@;'; put 'put ''KChWLT02NTUzNik+Pj4xMCYxMDIzKSxWPTU2MzIwKygxMDIzJlYpKSwwIT09b2UmJih3W2xlKytdPTI1NSZvZSx3W2xlKytdPW9lPj4+OCxvZT0wKSx3W2xlKytdPVYlMjU2LHdbbGUrK109Vj4+Pjg7cmV0dXJuIHcuc2xpY2UoMCxsZSkudG9TdHJpbmcoInVjczIiKX0sSTE9ImZvbyBiYXIg''@;'; put 'put ''YmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7Ym8oSTEpPT1GbChJMSkmJihibz1GbCk7dmFyIGl1PWZ1bmN0aW9uKHgpe3JldHVybiBtZSh4LCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtibyhJMSk9PWl1KEkxKSYmKGJvPWl1KSxYYT1mdW5jdGlvbihnKXtyZXR1cm4gbWUo''@;'; put 'put ''ZywidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIGcseTA9ZnVuY3Rpb24oKXt2YXIgZz17fTtyZXR1cm4gZnVuY3Rpb24odyxWKXt2YXIgVz13KyJ8IisoVnx8IiIpO3JldHVybiBnW1ddP2dbV106Z1tXXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIrdysnKD86IHhtbDpzcGFjZT0i''@;'; put 'put ''cHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/Jyt3KyI+IixWfHwiIil9fSgpLG9yPShnPVtbIm5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxbImd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1h''@;'; put 'put ''cChmdW5jdGlvbih4KXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIreFswXSsiOyIsImlnIikseFsxXV19KSxmdW5jdGlvbih3KXtmb3IodmFyIFY9dy5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVw''@;'; put 'put ''bGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksVz0wO1c8Zy5sZW5ndGg7KytXKVY9Vi5yZXBsYWNlKGdbV11bMF0sZ1tXXVsxXSk7cmV0dXJuIFZ9KSxEYT1mdW5jdGlvbigpe3ZhciBnPXt9O3JldHVybiBmdW5jdGlvbih3KXtyZXR1cm4g''@;'; put 'put ''dm9pZCAwIT09Z1t3XT9nW3ddOmdbd109bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/Iit3KyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIrdysiPiIsImciKX19KCksbmk9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+L2csT3Q9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBKcihnLHgp''@;'; put 'put ''e3ZhciB3PWZyKGcpLFY9Zy5tYXRjaChEYSh3LmJhc2VUeXBlKSl8fFtdLFc9W107aWYoVi5sZW5ndGghPXcuc2l6ZSl7aWYoeC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggIitWLmxlbmd0aCsiICE9ICIrdy5zaXplKTtyZXR1cm4gV31yZXR1cm4gVi5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKGVlKXt2YXIgbGU9ZWUucmVwbGFjZShuaSwiIikubWF0Y2goT3QpO2xlJiZXLnB1c2goe3Y6Ym8obGVbMl0pLHQ6bGVbMV19KX0pLFd9dmFyIEYwPS8oXlxzfFxzJHxcbikvO2Z1bmN0aW9uICRvKGcseCl7cmV0dXJuIjwiK2crKHgubWF0Y2goRjApPycgeG1sOnNw''@;'; put 'put ''YWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIreCsiPC8iK2crIj4ifWZ1bmN0aW9uIEV1KGcpe3JldHVybiB4ZShnKS5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIiAiK3grJz0iJytnW3hdKyciJ30pLmpvaW4oIiIpfWZ1bmN0aW9uIHpyKGcseCx3KXtyZXR1cm4iPCIrZysobnVsbCE9dz9FdSh3KToi''@;'; put 'put ''IikrKG51bGwhPXg/KHgubWF0Y2goRjApPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIreCsiPC8iK2c6Ii8iKSsiPiJ9ZnVuY3Rpb24gZDMoZyx4KXt0cnl7cmV0dXJuIGcudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKHcpe2lmKHgpdGhyb3cgd31yZXR1''@;'; put 'put ''cm4iIn12YXIgSjIsZ2csUm89e2RjOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29t''@;'; put 'put ''L29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3Jl''@;'; put 'put ''LXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hN''@;'; put 'put ''TFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2Vs''@;'; put 'put ''LzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSxvY19vPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiLG9jX3g9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOmV4Y2VsIixvY19zcz0i''@;'; put 'put ''dXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXQiLG9jX3Y9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIixfYz1mdW5jdGlvbihnKXtmb3IodmFyIHg9W10sVj0wO1Y8Z1swXS5sZW5ndGg7KytWKWlmKGdbMF1bVl0pZm9yKHZhciBXPTAsZWU9Z1swXVtW''@;'; put 'put ''XS5sZW5ndGg7VzxlZTtXKz0xMDI0MCl4LnB1c2guYXBwbHkoeCxnWzBdW1ZdLnNsaWNlKFcsVysxMDI0MCkpO3JldHVybiB4fSxYMj1fYyxWYz1mdW5jdGlvbihnLHgsdyl7Zm9yKHZhciBWPVtdLFc9eDtXPHc7Vys9MilWLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShyYShnLFcpKSk7cmV0''@;'; put 'put ''dXJuIFYuam9pbigiIikucmVwbGFjZSh5LCIiKX0sdG09VmMsWGg9ZnVuY3Rpb24oZyx4LHcpe2Zvcih2YXIgVj1bXSxXPXg7Vzx4K3c7KytXKVYucHVzaCgoIjAiK2dbV10udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO3JldHVybiBWLmpvaW4oIiIpfSxXdT1YaCxUdT1mdW5jdGlvbihnLHgs''@;'; put 'put ''dyl7Zm9yKHZhciBWPVtdLFc9eDtXPHc7VysrKVYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJzKGcsVykpKTtyZXR1cm4gVi5qb2luKCIiKX0sUjE9VHUscjE9ZnVuY3Rpb24oZyx4KXt2YXIgdz1MbyhnLHgpO3JldHVybiB3PjA/VHUoZyx4KzQseCs0K3ctMSk6IiJ9LHEyPXIxLGdkPWZ1''@;'; put 'put ''bmN0aW9uKGcseCl7dmFyIHc9TG8oZyx4KTtyZXR1cm4gdz4wP1R1KGcseCs0LHgrNCt3LTEpOiIifSxpMT1nZCxMMT1mdW5jdGlvbihnLHgpe3ZhciB3PTIqTG8oZyx4KTtyZXR1cm4gdz4wP1R1KGcseCs0LHgrNCt3LTEpOiIifSxZcz1MMTtKMj1nZz1mdW5jdGlvbih4LHcpe3ZhciBWPUxv''@;'; put 'put ''KHgsdyk7cmV0dXJuIFY+MD9WYyh4LHcrNCx3KzQrVik6IiJ9O3ZhciBxbixnaSx1cz1mdW5jdGlvbihnLHgpe3ZhciB3PUxvKGcseCk7cmV0dXJuIHc+MD9UdShnLHgrNCx4KzQrdyk6IiJ9LENuPXVzO3FuPWdpPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGZ1bmN0aW9uIGtyKGcseCl7Zm9yKHZh''@;'; put 'put ''ciB3PTEtMiooZ1t4KzddPj4+NyksVj0oKDEyNyZnW3grN10pPDw0KSsoZ1t4KzZdPj4+NCYxNSksVz0xNSZnW3grNl0sZWU9NTtlZT49MDstLWVlKVc9MjU2KlcrZ1t4K2VlXTtyZXR1cm4gMjA0Nz09Vj8wPT1XP3cqKDEvMCk6TmFOOigwPT1WP1Y9LTEwMjI6KFYtPTEwMjMsVys9TWF0aC5w''@;'; put 'put ''b3coMiw1MikpLHcqTWF0aC5wb3coMixWLTUyKSpXKX0oZyx4KX07dmFyIEFhPWZ1bmN0aW9uKHgpe3JldHVybiBBcnJheS5pc0FycmF5KHgpfTtfZSYmKFZjPWZ1bmN0aW9uKGcseCx3KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGcpP2cudG9TdHJpbmcoInV0ZjE2bGUiLHgsdykucmVwbGFj''@;'; put 'put ''ZSh5LCIiKTp0bShnLHgsdyl9LFhoPWZ1bmN0aW9uKGcseCx3KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGcpP2cudG9TdHJpbmcoImhleCIseCx4K3cpOld1KGcseCx3KX0scjE9ZnVuY3Rpb24oeCx3KXtpZighQnVmZmVyLmlzQnVmZmVyKHgpKXJldHVybiBxMih4LHcpO3ZhciBWPXgucmVh''@;'; put 'put ''ZFVJbnQzMkxFKHcpO3JldHVybiBWPjA/eC50b1N0cmluZygidXRmOCIsdys0LHcrNCtWLTEpOiIifSxnZD1mdW5jdGlvbih4LHcpe2lmKCFCdWZmZXIuaXNCdWZmZXIoeCkpcmV0dXJuIGkxKHgsdyk7dmFyIFY9eC5yZWFkVUludDMyTEUodyk7cmV0dXJuIFY+MD94LnRvU3RyaW5nKCJ1dGY4''@;'; put 'put ''Iix3KzQsdys0K1YtMSk6IiJ9LEwxPWZ1bmN0aW9uKHgsdyl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih4KSlyZXR1cm4gWXMoeCx3KTt2YXIgVj0yKngucmVhZFVJbnQzMkxFKHcpO3JldHVybiB4LnRvU3RyaW5nKCJ1dGYxNmxlIix3KzQsdys0K1YtMSl9LEoyPWZ1bmN0aW9uKHgsdyl7aWYoIUJ1''@;'; put 'put ''ZmZlci5pc0J1ZmZlcih4KSlyZXR1cm4gZ2coeCx3KTt2YXIgVj14LnJlYWRVSW50MzJMRSh3KTtyZXR1cm4geC50b1N0cmluZygidXRmMTZsZSIsdys0LHcrNCtWKX0sdXM9ZnVuY3Rpb24oeCx3KXtpZighQnVmZmVyLmlzQnVmZmVyKHgpKXJldHVybiBDbih4LHcpO3ZhciBWPXgucmVhZFVJ''@;'; put 'put ''bnQzMkxFKHcpO3JldHVybiB4LnRvU3RyaW5nKCJ1dGY4Iix3KzQsdys0K1YpfSxUdT1mdW5jdGlvbih4LHcsVil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih4KT94LnRvU3RyaW5nKCJ1dGY4Iix3LFYpOlIxKHgsdyxWKX0sX2M9ZnVuY3Rpb24oZyl7cmV0dXJuIGdbMF0ubGVuZ3RoPjAmJkJ1''@;'; put 'put ''ZmZlci5pc0J1ZmZlcihnWzBdWzBdKT9CdWZmZXIuY29uY2F0KGdbMF0pOlgyKGcpfSxMPWZ1bmN0aW9uKGcpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoZ1swXSk/QnVmZmVyLmNvbmNhdChnKTpbXS5jb25jYXQuYXBwbHkoW10sZyl9LHFuPWZ1bmN0aW9uKHgsdyl7cmV0dXJuIEJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcih4KT94LnJlYWREb3VibGVMRSh3KTpnaSh4LHcpfSxBYT1mdW5jdGlvbih4KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHgpfHxBcnJheS5pc0FycmF5KHgpfSksdHlwZW9mIGNwdGFibGU8InUiJiYoVmM9ZnVuY3Rpb24oZyx4LHcpe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29k''@;'; put 'put ''ZSgxMjAwLGcuc2xpY2UoeCx3KSkucmVwbGFjZSh5LCIiKX0sVHU9ZnVuY3Rpb24oZyx4LHcpe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxnLnNsaWNlKHgsdykpfSxyMT1mdW5jdGlvbihnLHgpe3ZhciB3PUxvKGcseCk7cmV0dXJuIHc+MD9jcHRhYmxlLnV0aWxzLmRlY29k''@;'; put 'put ''ZShBLGcuc2xpY2UoeCs0LHgrNCt3LTEpKToiIn0sZ2Q9ZnVuY3Rpb24oZyx4KXt2YXIgdz1MbyhnLHgpO3JldHVybiB3PjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoVCxnLnNsaWNlKHgrNCx4KzQrdy0xKSk6IiJ9LEwxPWZ1bmN0aW9uKGcseCl7dmFyIHc9MipMbyhnLHgpO3JldHVybiB3PjA/''@;'; put 'put ''Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxnLnNsaWNlKHgrNCx4KzQrdy0xKSk6IiJ9LEoyPWZ1bmN0aW9uKGcseCl7dmFyIHc9TG8oZyx4KTtyZXR1cm4gdz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsZy5zbGljZSh4KzQseCs0K3cpKToiIn0sdXM9ZnVuY3Rpb24oZyx4KXt2YXIg''@;'; put 'put ''dz1MbyhnLHgpO3JldHVybiB3PjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsZy5zbGljZSh4KzQseCs0K3cpKToiIn0pO3ZhciBicz1mdW5jdGlvbihnLHgpe3JldHVybiBnW3hdfSxyYT1mdW5jdGlvbihnLHgpe3JldHVybiAyNTYqZ1t4KzFdK2dbeF19LHZhPWZ1bmN0aW9uKGcseCl7''@;'; put 'put ''dmFyIHc9MjU2KmdbeCsxXStnW3hdO3JldHVybiB3PDMyNzY4P3c6LTEqKDY1NTM1LXcrMSl9LExvPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGdbeCszXSooMTw8MjQpKyhnW3grMl08PDE2KSsoZ1t4KzFdPDw4KStnW3hdfSxGbz1mdW5jdGlvbihnLHgpe3JldHVybiBnW3grM108PDI0fGdbeCsy''@;'; put 'put ''XTw8MTZ8Z1t4KzFdPDw4fGdbeF19LGdsPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGdbeF08PDI0fGdbeCsxXTw8MTZ8Z1t4KzJdPDw4fGdbeCszXX07ZnVuY3Rpb24gc2MoZyx4KXt2YXIgVixXLGxlLG9lLGRlLERlLHc9IiIsZWU9W107c3dpdGNoKHgpe2Nhc2UiZGJjcyI6aWYoRGU9dGhpcy5s''@;'; put 'put ''LF9lJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpdz10aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipnKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGRlPTA7ZGU8ZzsrK2RlKXcrPVN0cmluZy5mcm9tQ2hhckNvZGUocmEodGhpcyxEZSkpLERlKz0yO2cqPTI7YnJlYWs7Y2FzZSJ1dGY4''@;'; put 'put ''Ijp3PVR1KHRoaXMsdGhpcy5sLHRoaXMubCtnKTticmVhaztjYXNlInV0ZjE2bGUiOnc9VmModGhpcyx0aGlzLmwsdGhpcy5sKyhnKj0yKSk7YnJlYWs7Y2FzZSJ3c3RyIjppZighKHR5cGVvZiBjcHRhYmxlPCJ1IikpcmV0dXJuIHNjLmNhbGwodGhpcyxnLCJkYmNzIik7dz1jcHRhYmxlLnV0''@;'; put 'put ''aWxzLmRlY29kZShULHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKmcpKSxnKj0yO2JyZWFrO2Nhc2UibHBzdHItYW5zaSI6dz1yMSh0aGlzLHRoaXMubCksZz00K0xvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjp3PWdkKHRoaXMsdGhpcy5sKSxnPTQrTG8odGhpcyx0aGlz''@;'; put 'put ''LmwpO2JyZWFrO2Nhc2UibHB3c3RyIjp3PUwxKHRoaXMsdGhpcy5sKSxnPTQrMipMbyh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0IjpnPTQrTG8odGhpcyx0aGlzLmwpLHc9SjIodGhpcyx0aGlzLmwpLDImZyYmKGcrPTIpO2JyZWFrO2Nhc2UiOGxwcDQiOmc9NCtMbyh0aGlzLHRoaXMu''@;'; put 'put ''bCksdz11cyh0aGlzLHRoaXMubCksMyZnJiYoZys9NC0oMyZnKSk7YnJlYWs7Y2FzZSJjc3RyIjpmb3IoZz0wLHc9IiI7MCE9PShsZT1icyh0aGlzLHRoaXMubCtnKyspKTspZWUucHVzaChLKGxlKSk7dz1lZS5qb2luKCIiKTticmVhaztjYXNlIl93c3RyIjpmb3IoZz0wLHc9IiI7MCE9PShs''@;'; put 'put ''ZT1yYSh0aGlzLHRoaXMubCtnKSk7KWVlLnB1c2goSyhsZSkpLGcrPTI7Zys9Mix3PWVlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3Iodz0iIixEZT10aGlzLmwsZGU9MDtkZTxnOysrZGUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihEZSkpcmV0dXJu''@;'; put 'put ''IGxlPWJzKHRoaXMsRGUpLHRoaXMubD1EZSsxLG9lPXNjLmNhbGwodGhpcyxnLWRlLGxlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxlZS5qb2luKCIiKStvZTtlZS5wdXNoKEsocmEodGhpcyxEZSkpKSxEZSs9Mn13PWVlLmpvaW4oIiIpLGcqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlw''@;'; put 'put ''ZW9mIGNwdGFibGU8InUiKXt3PWNwdGFibGUudXRpbHMuZGVjb2RlKFQsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK2cpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKHc9IiIsRGU9dGhpcy5sLGRlPTA7ZGUhPWc7KytkZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9m''@;'; put 'put ''KERlKSlyZXR1cm4gbGU9YnModGhpcyxEZSksdGhpcy5sPURlKzEsb2U9c2MuY2FsbCh0aGlzLGctZGUsbGU/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGVlLmpvaW4oIiIpK29lO2VlLnB1c2goSyhicyh0aGlzLERlKSkpLERlKz0xfXc9ZWUuam9pbigiIik7YnJlYWs7ZGVmYXVsdDpzd2l0''@;'; put 'put ''Y2goZyl7Y2FzZSAxOnJldHVybiBWPWJzKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxWO2Nhc2UgMjpyZXR1cm4gVj0oImkiPT09eD92YTpyYSkodGhpcyx0aGlzLmwpLHRoaXMubCs9MixWO2Nhc2UgNDpjYXNlLTQ6cmV0dXJuImkiIT09eCYmMTI4JnRoaXNbdGhpcy5sKzNdPyhXPUxvKHRoaXMs''@;'; put 'put ''dGhpcy5sKSx0aGlzLmwrPTQsVyk6KFY9KGc+MD9GbzpnbCkodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxWKTtjYXNlIDg6Y2FzZS04OmlmKCJmIj09PXgpcmV0dXJuIFc9OD09Zz9xbih0aGlzLHRoaXMubCk6cW4oW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVd''@;'; put 'put ''LHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgsVztnPTg7Y2FzZSAxNjp3PVhoKHRoaXMsdGhpcy5sLGcpfX1yZXR1cm4gdGhpcy5sKz1nLHd9dmFyIFVvPWZ1bmN0aW9uKGcseCx3''@;'; put 'put ''KXtnW3ddPTI1NSZ4LGdbdysxXT14Pj4+OCYyNTUsZ1t3KzJdPXg+Pj4xNiYyNTUsZ1t3KzNdPXg+Pj4yNCYyNTV9LFZvPWZ1bmN0aW9uKGcseCx3KXtnW3ddPTI1NSZ4LGdbdysxXT14Pj44JjI1NSxnW3crMl09eD4+MTYmMjU1LGdbdyszXT14Pj4yNCYyNTV9LEhsPWZ1bmN0aW9uKGcseCx3''@;'; put 'put ''KXtnW3ddPTI1NSZ4LGdbdysxXT14Pj4+OCYyNTV9O2Z1bmN0aW9uIEF1KGcseCx3KXt2YXIgVj0wLFc9MDtpZigiZGJjcyI9PT13KXtmb3IoVz0wO1chPXgubGVuZ3RoOysrVylIbCh0aGlzLHguY2hhckNvZGVBdChXKSx0aGlzLmwrMipXKTtWPTIqeC5sZW5ndGh9ZWxzZSBpZigic2JjcyI9''@;'; put 'put ''PT13KXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09QSlmb3IoVz0wO1chPXgubGVuZ3RoOysrVyl7dmFyIGVlPWNwdGFibGUudXRpbHMuZW5jb2RlKEEseC5jaGFyQXQoVykpO3RoaXNbdGhpcy5sK1ddPWVlWzBdfWVsc2UgZm9yKHg9eC5yZXBsYWNlKC9bXlx4MDAtXHg3Rl0vZywiXyIp''@;'; put 'put ''LFc9MDtXIT14Lmxlbmd0aDsrK1cpdGhpc1t0aGlzLmwrV109MjU1JnguY2hhckNvZGVBdChXKTtWPXgubGVuZ3RofWVsc2V7aWYoImhleCI9PT13KXtmb3IoO1c8ZzsrK1cpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoeC5zbGljZSgyKlcsMipXKzIpLDE2KXx8MDtyZXR1cm4gdGhpc31pZigi''@;'; put 'put ''dXRmMTZsZSI9PT13KXt2YXIgbGU9TWF0aC5taW4odGhpcy5sK2csdGhpcy5sZW5ndGgpO2ZvcihXPTA7VzxNYXRoLm1pbih4Lmxlbmd0aCxnKTsrK1cpe3ZhciBvZT14LmNoYXJDb2RlQXQoVyk7dGhpc1t0aGlzLmwrK109MjU1Jm9lLHRoaXNbdGhpcy5sKytdPW9lPj44fWZvcig7dGhpcy5s''@;'; put 'put ''PGxlOyl0aGlzW3RoaXMubCsrXT0wO3JldHVybiB0aGlzfXN3aXRjaChnKXtjYXNlIDE6Vj0xLHRoaXNbdGhpcy5sXT0yNTUmeDticmVhaztjYXNlIDI6Vj0yLHRoaXNbdGhpcy5sXT0yNTUmeCx0aGlzW3RoaXMubCsxXT0yNTUmKHg+Pj49OCk7YnJlYWs7Y2FzZSAzOlY9Myx0aGlzW3RoaXMu''@;'; put 'put ''bF09MjU1JngsdGhpc1t0aGlzLmwrMV09MjU1Jih4Pj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoeD4+Pj04KTticmVhaztjYXNlIDQ6Vj00LFVvKHRoaXMseCx0aGlzLmwpO2JyZWFrO2Nhc2UgODppZihWPTgsImYiPT09dyl7IWZ1bmN0aW9uIHBnKGcseCx3KXt2YXIgVj0oeDwwfHwxL3g9''@;'; put 'put ''PS0xLzA/MTowKTw8NyxXPTAsZWU9MCxsZT1WPy14Ong7aXNGaW5pdGUobGUpPzA9PWxlP1c9ZWU9MDooVz1NYXRoLmZsb29yKE1hdGgubG9nKGxlKS9NYXRoLkxOMiksZWU9bGUqTWF0aC5wb3coMiw1Mi1XKSxXPD0tMTAyMyYmKCFpc0Zpbml0ZShlZSl8fGVlPE1hdGgucG93KDIsNTIpKT9X''@;'; put 'put ''PS0xMDIyOihlZS09TWF0aC5wb3coMiw1MiksVys9MTAyMykpOihXPTIwNDcsZWU9aXNOYU4oeCk/MjY5ODU6MCk7Zm9yKHZhciBvZT0wO29lPD01Oysrb2UsZWUvPTI1NilnW3crb2VdPTI1NSZlZTtnW3crNl09KDE1JlcpPDw0fDE1JmVlLGdbdys3XT1XPj40fFZ9KHRoaXMseCx0aGlzLmwp''@;'; put 'put ''O2JyZWFrfWNhc2UgMTY6YnJlYWs7Y2FzZS00OlY9NCxWbyh0aGlzLHgsdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9Vix0aGlzfWZ1bmN0aW9uIGExKGcseCl7dmFyIHc9WGgodGhpcyx0aGlzLmwsZy5sZW5ndGg+PjEpO2lmKHchPT1nKXRocm93IG5ldyBFcnJvcih4KyJFeHBlY3RlZCAiK2cr''@;'; put 'put ''IiBzYXcgIit3KTt0aGlzLmwrPWcubGVuZ3RoPj4xfWZ1bmN0aW9uIEdzKGcseCl7Zy5sPXgsZy5yZWFkX3NoaWZ0PXNjLGcuY2hrPWExLGcud3JpdGVfc2hpZnQ9QXV9ZnVuY3Rpb24gb2woZyx4KXtnLmwrPXh9ZnVuY3Rpb24gSHIoZyl7dmFyIHg9UihnKTtyZXR1cm4gR3MoeCwwKSx4fWZ1''@;'; put 'put ''bmN0aW9uIEJvKGcseCx3KXtpZihnKXt2YXIgVixXLGVlO0dzKGcsZy5sfHwwKTtmb3IodmFyIGxlPWcubGVuZ3RoLG9lPTAsZGU9MDtnLmw8bGU7KXsxMjgmKG9lPWcucmVhZF9zaGlmdCgxKSkmJihvZT0oMTI3Jm9lKSsoKDEyNyZnLnJlYWRfc2hpZnQoMSkpPDw3KSk7dmFyIERlPVlwW29l''@;'; put 'put ''XXx8WXBbNjU1MzVdO2ZvcihlZT0xMjcmKFY9Zy5yZWFkX3NoaWZ0KDEpKSxXPTE7Vzw0JiYxMjgmVjsrK1cpZWUrPSgxMjcmKFY9Zy5yZWFkX3NoaWZ0KDEpKSk8PDcqVztkZT1nLmwrZWU7dmFyIFJlPShEZS5mfHxvbCkoZyxlZSx3KTtpZihnLmw9ZGUseChSZSxEZS5uLG9lKSlyZXR1cm59''@;'; put 'put ''fX1mdW5jdGlvbiBDdCgpe3ZhciBnPVtdLHg9X2U/MjU2OjIwNDgsdz1mdW5jdGlvbihEZSl7dmFyIFJlPUhyKERlKTtyZXR1cm4gR3MoUmUsMCksUmV9LFY9dyh4KSxXPWZ1bmN0aW9uKCl7ViYmKFYubGVuZ3RoPlYubCYmKChWPVYuc2xpY2UoMCxWLmwpKS5sPVYubGVuZ3RoKSxWLmxlbmd0''@;'; put 'put ''aD4wJiZnLnB1c2goViksVj1udWxsKX0sZWU9ZnVuY3Rpb24oRGUpe3JldHVybiBWJiZEZTxWLmxlbmd0aC1WLmw/VjooVygpLFY9dyhNYXRoLm1heChEZSsxLHgpKSl9O3JldHVybntuZXh0OmVlLHB1c2g6ZnVuY3Rpb24oRGUpe1coKSxudWxsPT0oVj1EZSkubCYmKFYubD1WLmxlbmd0aCks''@;'; put 'put ''ZWUoeCl9LGVuZDpmdW5jdGlvbigpe3JldHVybiBXKCksX2MoW2ddKX0sX2J1ZnM6Z319ZnVuY3Rpb24gdXQoZyx4LHcsVil7dmFyIGVlLFc9K3A5W3hdO2lmKCFpc05hTihXKSl7Vnx8KFY9WXBbV10ucHx8KHd8fFtdKS5sZW5ndGh8fDApLGVlPTErKFc+PTEyOD8xOjApKzEsVj49MTI4JiYr''@;'; put 'put ''K2VlLFY+PTE2Mzg0JiYrK2VlLFY+PTIwOTcxNTImJisrZWU7dmFyIGxlPWcubmV4dChlZSk7Vzw9MTI3P2xlLndyaXRlX3NoaWZ0KDEsVyk6KGxlLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmVykpLGxlLndyaXRlX3NoaWZ0KDEsVz4+NykpO2Zvcih2YXIgb2U9MDs0IT1vZTsrK29lKXtpZigh''@;'; put 'put ''KFY+PTEyOCkpe2xlLndyaXRlX3NoaWZ0KDEsVik7YnJlYWt9bGUud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZWKSksVj4+PTd9Vj4wJiZBYSh3KSYmZy5wdXNoKHcpfX1mdW5jdGlvbiBKdChnLHgsdyl7dmFyIFY9cm4oZyk7aWYoeC5zPyhWLmNSZWwmJihWLmMrPXgucy5jKSxWLnJSZWwmJihW''@;'; put 'put ''LnIrPXgucy5yKSk6KFYuY1JlbCYmKFYuYys9eC5jKSxWLnJSZWwmJihWLnIrPXgucikpLCF3fHx3LmJpZmY8MTIpe2Zvcig7Vi5jPj0yNTY7KVYuYy09MjU2O2Zvcig7Vi5yPj02NTUzNjspVi5yLT02NTUzNn1yZXR1cm4gVn1mdW5jdGlvbiBjbihnLHgsdyl7dmFyIFY9cm4oZyk7cmV0dXJu''@;'; put 'put ''IFYucz1KdChWLnMseC5zLHcpLFYuZT1KdChWLmUseC5zLHcpLFZ9ZnVuY3Rpb24gQW4oZyx4KXtpZihnLmNSZWwmJmcuYzwwKWZvcihnPXJuKGcpO2cuYzwwOylnLmMrPXg+OD8xNjM4NDoyNTY7aWYoZy5yUmVsJiZnLnI8MClmb3IoZz1ybihnKTtnLnI8MDspZy5yKz14Pjg/MTA0ODU3Njp4''@;'; put 'put ''PjU/NjU1MzY6MTYzODQ7aWYoZy5jUmVsJiZnLmM+PSh4Pjg/MTYzODQ6MjU2KSlmb3IoZz1ybihnKTtnLmM+PSh4Pjg/MTYzODQ6MjU2KTspZy5jLT14Pjg/MTYzODQ6MjU2O2lmKGcuclJlbCYmZy5yPj0xMDQ4NTc2KWZvcihnPXJuKGcpO2cucj49MTA0ODU3NjspZy5yLT0xMDQ4NTc2O3Zh''@;'; put 'put ''ciB3PUtyKGcpO3JldHVybiFnLmNSZWwmJm51bGwhPWcuY1JlbCYmKHc9ZnVuY3Rpb24gV28oZyl7cmV0dXJuIGcucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KHcpKSwhZy5yUmVsJiZudWxsIT1nLnJSZWwmJih3PWZ1bmN0aW9uIERpKGcpe3JldHVybiBnLnJlcGxhY2UoLyhbQS1aXXxe''@;'; put 'put ''KShcZCspJC8sIiQxJCQkMiIpfSh3KSksd31mdW5jdGlvbiBLbihnLHgpe3JldHVybiAwIT1nLnMucnx8Zy5zLnJSZWx8fGcuZS5yIT0oeC5iaWZmPj0xMj8xMDQ4NTc1OnguYmlmZj49OD82NTUzNjoxNjM4NCl8fGcuZS5yUmVsPzAhPWcucy5jfHxnLnMuY1JlbHx8Zy5lLmMhPSh4LmJpZmY+''@;'; put 'put ''PTEyPzE2MzgzOjI1NSl8fGcuZS5jUmVsP0FuKGcucyx4LmJpZmYpKyI6IitBbihnLmUseC5iaWZmKTooZy5zLnJSZWw/IiI6IiQiKSt6bihnLnMucikrIjoiKyhnLmUuclJlbD8iIjoiJCIpK3puKGcuZS5yKTooZy5zLmNSZWw/IiI6IiQiKStQYShnLnMuYykrIjoiKyhnLmUuY1JlbD8iIjoi''@;'; put 'put ''JCIpK1BhKGcuZS5jKX12YXIgc3I9e307ZnVuY3Rpb24geWkoZyl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIHBvKGcpe3JldHVybiBnLnJlcGxhY2UoL1wkKFxkKykkLywiJDEiKX0oZyksMTApLTF9ZnVuY3Rpb24gem4oZyl7cmV0dXJuIiIrKGcrMSl9ZnVuY3Rpb24gS28oZyl7Zm9yKHZh''@;'; put 'put ''ciB4PWZ1bmN0aW9uIEJhKGcpe3JldHVybiBnLnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfShnKSx3PTAsVj0wO1YhPT14Lmxlbmd0aDsrK1Ypdz0yNip3K3guY2hhckNvZGVBdChWKS02NDtyZXR1cm4gdy0xfWZ1bmN0aW9uIFBhKGcpe2lmKGc8MCl0aHJvdyBuZXcgRXJyb3IoImludmFs''@;'; put 'put ''aWQgY29sdW1uICIrZyk7dmFyIHg9IiI7Zm9yKCsrZztnO2c9TWF0aC5mbG9vcigoZy0xKS8yNikpeD1TdHJpbmcuZnJvbUNoYXJDb2RlKChnLTEpJTI2KzY1KSt4O3JldHVybiB4fWZ1bmN0aW9uIHhhKGcpe2Zvcih2YXIgeD0wLHc9MCxWPTA7VjxnLmxlbmd0aDsrK1Ype3ZhciBXPWcuY2hh''@;'; put 'put ''ckNvZGVBdChWKTtXPj00OCYmVzw9NTc/eD0xMCp4KyhXLTQ4KTpXPj02NSYmVzw9OTAmJih3PTI2KncrKFctNjQpKX1yZXR1cm57Yzp3LTEscjp4LTF9fWZ1bmN0aW9uIEtyKGcpe2Zvcih2YXIgeD1nLmMrMSx3PSIiO3g7eD0oeC0xKS8yNnwwKXc9U3RyaW5nLmZyb21DaGFyQ29kZSgoeC0x''@;'; put 'put ''KSUyNis2NSkrdztyZXR1cm4gdysoZy5yKzEpfWZ1bmN0aW9uIHdyKGcpe3ZhciB4PWcuaW5kZXhPZigiOiIpO3JldHVybi0xPT14P3tzOnhhKGcpLGU6eGEoZyl9OntzOnhhKGcuc2xpY2UoMCx4KSksZTp4YShnLnNsaWNlKHgrMSkpfX1mdW5jdGlvbiBKaShnLHgpe3JldHVybiB0eXBlb2Yg''@;'; put 'put ''eD4idSJ8fCJudW1iZXIiPT10eXBlb2YgeD9KaShnLnMsZy5lKTooInN0cmluZyIhPXR5cGVvZiBnJiYoZz1LcihnKSksInN0cmluZyIhPXR5cGVvZiB4JiYoeD1Lcih4KSksZz09eD9nOmcrIjoiK3gpfWZ1bmN0aW9uIFNhKGcpe3ZhciB4PUpTT04ucGFyc2UoJ3sicyI6eyJjIjowLCJyIjow''@;'; put 'put ''fSwiZSI6eyJjIjowLCJyIjowfX0nKSx3PTAsVj0wLFc9MCxlZT1nLmxlbmd0aDtmb3Iodz0wO1Y8ZWUmJiEoKFc9Zy5jaGFyQ29kZUF0KFYpLTY0KTwxfHxXPjI2KTsrK1Ypdz0yNip3K1c7Zm9yKHgucy5jPS0tdyx3PTA7VjxlZSYmISgoVz1nLmNoYXJDb2RlQXQoViktNDgpPDB8fFc+OSk7''@;'; put 'put ''KytWKXc9MTAqdytXO2lmKHgucy5yPS0tdyxWPT09ZWV8fDU4PT09Zy5jaGFyQ29kZUF0KCsrVikpcmV0dXJuIHguZS5jPXgucy5jLHguZS5yPXgucy5yLHg7Zm9yKHc9MDtWIT1lZSYmISgoVz1nLmNoYXJDb2RlQXQoViktNjQpPDF8fFc+MjYpOysrVil3PTI2KncrVztmb3IoeC5lLmM9LS13''@;'; put 'put ''LHc9MDtWIT1lZSYmISgoVz1nLmNoYXJDb2RlQXQoViktNDgpPDB8fFc+OSk7KytWKXc9MTAqdytXO3JldHVybiB4LmUucj0tLXcseH1mdW5jdGlvbiBtZChnLHgpe3ZhciB3PSJkIj09Zy50JiZ4IGluc3RhbmNlb2YgRGF0ZTtpZihudWxsIT1nLnopdHJ5e3JldHVybiBnLnc9Yi5mb3JtYXQo''@;'; put 'put ''Zy56LHc/WWUoeCk6eCl9Y2F0Y2h7fXRyeXtyZXR1cm4gZy53PWIuZm9ybWF0KChnLlhGfHx7fSkubnVtRm10SWR8fCh3PzE0OjApLHc/WWUoeCk6eCl9Y2F0Y2h7cmV0dXJuIiIreH19ZnVuY3Rpb24gbGMoZyx4LHcpe3JldHVybiBudWxsPT1nfHxudWxsPT1nLnR8fCJ6Ij09Zy50PyIiOnZv''@;'; put 'put ''aWQgMCE9PWcudz9nLnc6KCJkIj09Zy50JiYhZy56JiZ3JiZ3LmRhdGVORiYmKGcuej13LmRhdGVORiksImUiPT1nLnQ/VjBbZy52XXx8Zy52Om1kKGcsbnVsbD09eD9nLnY6eCkpfWZ1bmN0aW9uIGVoKGcseCl7dmFyIHc9eCYmeC5zaGVldD94LnNoZWV0OiJTaGVldDEiLFY9e307cmV0dXJu''@;'; put 'put ''IFZbd109Zyx7U2hlZXROYW1lczpbd10sU2hlZXRzOlZ9fWZ1bmN0aW9uIG8xKGcseCx3KXt2YXIgVj13fHx7fSxXPWc/QXJyYXkuaXNBcnJheShnKTpWLmRlbnNlLGVlPWd8fChXP1tdOnt9KSxsZT0wLG9lPTA7aWYoZWUmJm51bGwhPVYub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIFYu''@;'; put 'put ''b3JpZ2luKWxlPVYub3JpZ2luO2Vsc2V7dmFyIGRlPSJzdHJpbmciPT10eXBlb2YgVi5vcmlnaW4/eGEoVi5vcmlnaW4pOlYub3JpZ2luO2xlPWRlLnIsb2U9ZGUuY31lZVsiIXJlZiJdfHwoZWVbIiFyZWYiXT0iQTE6QTEiKX12YXIgRGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07''@;'; put 'put ''aWYoZWVbIiFyZWYiXSl7dmFyIFJlPVNhKGVlWyIhcmVmIl0pO0RlLnMuYz1SZS5zLmMsRGUucy5yPVJlLnMucixEZS5lLmM9TWF0aC5tYXgoRGUuZS5jLFJlLmUuYyksRGUuZS5yPU1hdGgubWF4KERlLmUucixSZS5lLnIpLC0xPT1sZSYmKERlLmUucj1sZT1SZS5lLnIrMSl9Zm9yKHZhciBW''@;'; put 'put ''ZT0wO1ZlIT14Lmxlbmd0aDsrK1ZlKWlmKHhbVmVdKXtpZighQXJyYXkuaXNBcnJheSh4W1ZlXSkpdGhyb3cgbmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIEdlPTA7R2UhPXhbVmVdLmxlbmd0aDsrK0dlKWlmKCEodHlwZW9mIHhb''@;'; put 'put ''VmVdW0dlXT4idSIpKXt2YXIgZXQ9e3Y6eFtWZV1bR2VdfSxidD1sZStWZSxKZT1vZStHZTtpZihEZS5zLnI+YnQmJihEZS5zLnI9YnQpLERlLnMuYz5KZSYmKERlLnMuYz1KZSksRGUuZS5yPGJ0JiYoRGUuZS5yPWJ0KSxEZS5lLmM8SmUmJihEZS5lLmM9SmUpLCF4W1ZlXVtHZV18fCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgeFtWZV1bR2VdfHxBcnJheS5pc0FycmF5KHhbVmVdW0dlXSl8fHhbVmVdW0dlXWluc3RhbmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGV0LnYpJiYoZXQuZj14W1ZlXVtHZV1bMV0sZXQudj1ldC52WzBdKSxudWxsPT09ZXQudilpZihldC5mKWV0LnQ9Im4iO2Vsc2Ug''@;'; put 'put ''aWYoVi5udWxsRXJyb3IpZXQudD0iZSIsZXQudj0wO2Vsc2V7aWYoIVYuc2hlZXRTdHVicyljb250aW51ZTtldC50PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiBldC52P2V0LnQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGV0LnY/ZXQudD0iYiI6ZXQudiBpbnN0YW5jZW9mIERhdGU/KGV0Lno9''@;'; put 'put ''Vi5kYXRlTkZ8fGIuX3RhYmxlWzE0XSxWLmNlbGxEYXRlcz8oZXQudD0iZCIsZXQudz1iLmZvcm1hdChldC56LFllKGV0LnYpKSk6KGV0LnQ9Im4iLGV0LnY9WWUoZXQudiksZXQudz1iLmZvcm1hdChldC56LGV0LnYpKSk6ZXQudD0icyI7ZWxzZSBldD14W1ZlXVtHZV07aWYoZXQmJmV0Lmgp''@;'; put 'put ''dHJ5e2V0LlI9eGQuaHRtbF90b19ycyhldC5oKSxldC52PSIiO2Zvcih2YXIgZnQ9MDtmdDxldC5SLmxlbmd0aDsrK2Z0KWV0LnYrPWV0LlJbZnRdLnZ8fCIifWNhdGNoe31pZihXKWVlW2J0XXx8KGVlW2J0XT1bXSksZWVbYnRdW0plXSYmZWVbYnRdW0plXS5zJiYoZXQucz1lZVtidF1bSmVd''@;'; put 'put ''LnMpLGVlW2J0XVtKZV0mJmVlW2J0XVtKZV0ueiYmKGV0Lno9ZWVbYnRdW0plXS56KSxlZVtidF1bSmVdPWV0O2Vsc2V7dmFyIFJ0PUtyKHtjOkplLHI6YnR9KTtlZVtSdF0mJmVlW1J0XS5zJiYoZXQucz1lZVtSdF0ucyksZWVbUnRdJiZlZVtSdF0ueiYmKGV0Lno9ZWVbUnRdLnopLGVlW1J0''@;'; put 'put ''XT1ldH19fXJldHVybiBEZS5zLmM8MWU3JiYoZWVbIiFyZWYiXT1KaShEZSkpLGVlfWZ1bmN0aW9uIFEyKGcseCl7cmV0dXJuIG8xKG51bGwsZyx4KX1mdW5jdGlvbiBadShnLHgpe3JldHVybiB4fHwoeD1Icig0KSkseC53cml0ZV9zaGlmdCg0LGcpLHh9ZnVuY3Rpb24gY2MoZyl7dmFyIHg9''@;'; put 'put ''Zy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09eD8iIjpnLnJlYWRfc2hpZnQoeCwiZGJjcyIpfWZ1bmN0aW9uIGtjKGcseCl7dmFyIHc9ITE7cmV0dXJuIG51bGw9PXgmJih3PSEwLHg9SHIoNCsyKmcubGVuZ3RoKSkseC53cml0ZV9zaGlmdCg0LGcubGVuZ3RoKSxnLmxlbmd0aD4wJiZ4Lndy''@;'; put 'put ''aXRlX3NoaWZ0KDAsZywiZGJjcyIpLHc/eC5zbGljZSgwLHgubCk6eH1mdW5jdGlvbiBIMChnKXtyZXR1cm57aWNoOmcucmVhZF9zaGlmdCgyKSxpZm50OmcucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gRXMoZyx4KXt2YXIgdz1nLmwsVj1nLnJlYWRfc2hpZnQoMSksVz1jYyhnKSxlZT1bXSxs''@;'; put 'put ''ZT17dDpXLGg6V307aWYoMSZWKXtmb3IodmFyIG9lPWcucmVhZF9zaGlmdCg0KSxkZT0wO2RlIT1vZTsrK2RlKWVlLnB1c2goSDAoZykpO2xlLnI9ZWV9ZWxzZSBsZS5yPVt7aWNoOjAsaWZudDowfV07cmV0dXJuIGcubD13K3gsbGV9IWZ1bmN0aW9uKGcseCl7dmFyIHc7aWYodHlwZW9mIGNy''@;'; put 'put ''eXB0b0Jyb3dzZXJpZnk8InUiKXc9Y3J5cHRvQnJvd3NlcmlmeTtlbHNlIGlmKHR5cGVvZiB4PCJ1Iil3PXg7ZWxzZSB0cnl7dz1kKDkxNDI2KX1jYXRjaHt3PW51bGx9Zy5yYzQ9ZnVuY3Rpb24oVixXKXt2YXIgZWU9bmV3IEFycmF5KDI1NiksbGU9MCxvZT0wLGRlPTAsRGU9MDtmb3Iob2U9''@;'; put 'put ''MDsyNTYhPW9lOysrb2UpZWVbb2VdPW9lO2ZvcihvZT0wOzI1NiE9b2U7KytvZSlkZT1kZStlZVtvZV0rVltvZSVWLmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTUsRGU9ZWVbb2VdLGVlW29lXT1lZVtkZV0sZWVbZGVdPURlO29lPWRlPTA7dmFyIFJlPVIoVy5sZW5ndGgpO2ZvcihsZT0wO2xl''@;'; put 'put ''IT1XLmxlbmd0aDsrK2xlKURlPWVlW29lPW9lKzEmMjU1XSxlZVtvZV09ZWVbZGU9KGRlK2VlW29lXSklMjU2XSxlZVtkZV09RGUsUmVbbGVdPVdbbGVdXmVlW2VlW29lXStlZVtkZV0mMjU1XTtyZXR1cm4gUmV9LGcubWQ1PWZ1bmN0aW9uKFYpe2lmKCF3KXRocm93IG5ldyBFcnJvcigiVW5z''@;'; put 'put ''dXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIHcuY3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKFYpKS5kaWdlc3QoImhleCIpfX0oc3IsdHlwZW9mIGNyeXB0bzwidSI/Y3J5cHRvOnZvaWQgMCk7dmFyIHZnPUVzO2Z1bmN0aW9uIHNsKGcpe3ZhciB4PWcucmVhZF9zaGlmdCg0''@;'; put 'put ''KSx3PWcucmVhZF9zaGlmdCgyKTtyZXR1cm4gdys9Zy5yZWFkX3NoaWZ0KDEpPDwxNixnLmwrKyx7Yzp4LGlTdHlsZVJlZjp3fX1mdW5jdGlvbiBZdShnLHgpe3JldHVybiBudWxsPT14JiYoeD1Icig4KSkseC53cml0ZV9zaGlmdCgtNCxnLmMpLHgud3JpdGVfc2hpZnQoMyxnLmlTdHlsZVJl''@;'; put 'put ''Znx8Zy5zKSx4LndyaXRlX3NoaWZ0KDEsMCkseH1mdW5jdGlvbiBvbyhnKXt2YXIgeD1nLnJlYWRfc2hpZnQoMik7cmV0dXJuIHgrPWcucmVhZF9zaGlmdCgxKTw8MTYsZy5sKysse2M6LTEsaVN0eWxlUmVmOnh9fWZ1bmN0aW9uIHRvKGcseCl7cmV0dXJuIG51bGw9PXgmJih4PUhyKDQpKSx4''@;'; put 'put ''LndyaXRlX3NoaWZ0KDMsZy5pU3R5bGVSZWZ8fGcucykseC53cml0ZV9zaGlmdCgxLDApLHh9dmFyIHFoPWNjLHMxPWtjO2Z1bmN0aW9uIEd1KGcpe3ZhciB4PWcucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PXh8fDQyOTQ5NjcyOTU9PT14PyIiOmcucmVhZF9zaGlmdCh4LCJkYmNzIil9ZnVu''@;'; put 'put ''Y3Rpb24gJHUoZyx4KXt2YXIgdz0hMTtyZXR1cm4gbnVsbD09eCYmKHc9ITAseD1IcigxMjcpKSx4LndyaXRlX3NoaWZ0KDQsZy5sZW5ndGg+MD9nLmxlbmd0aDo0Mjk0OTY3Mjk1KSxnLmxlbmd0aD4wJiZ4LndyaXRlX3NoaWZ0KDAsZywiZGJjcyIpLHc/eC5zbGljZSgwLHgubCk6eH12YXIg''@;'; put 'put ''QnM9Y2MsTjA9R3UsTW89JHU7ZnVuY3Rpb24geWQoZyl7dmFyIHg9Zy5zbGljZShnLmwsZy5sKzQpLHc9MSZ4WzBdLFY9MiZ4WzBdO2cubCs9NCx4WzBdJj0yNTI7dmFyIFc9MD09PVY/cW4oWzAsMCwwLDAseFswXSx4WzFdLHhbMl0seFszXV0sMCk6Rm8oeCwwKT4+MjtyZXR1cm4gdz9XLzEw''@;'; put 'put ''MDpXfWZ1bmN0aW9uIExwKGcseCl7bnVsbD09eCYmKHg9SHIoNCkpO3ZhciB3PTAsVj0wLFc9MTAwKmc7aWYoZz09KDB8ZykmJmc+PS0oMTw8MjkpJiZnPDE8PDI5P1Y9MTpXPT0oMHxXKSYmVz49LSgxPDwyOSkmJlc8MTw8MjkmJihWPTEsdz0xKSwhVil0aHJvdyBuZXcgRXJyb3IoInVuc3Vw''@;'; put 'put ''cG9ydGVkIFJrTnVtYmVyICIrZyk7eC53cml0ZV9zaGlmdCgtNCwoKHc/VzpnKTw8MikrKHcrMikpfWZ1bmN0aW9uIGpjKGcpe3ZhciB4PXtzOnt9LGU6e319O3JldHVybiB4LnMucj1nLnJlYWRfc2hpZnQoNCkseC5lLnI9Zy5yZWFkX3NoaWZ0KDQpLHgucy5jPWcucmVhZF9zaGlmdCg0KSx4''@;'; put 'put ''LmUuYz1nLnJlYWRfc2hpZnQoNCkseH12YXIgbmg9amMsT3A9ZnVuY3Rpb24gdGgoZyx4KXtyZXR1cm4geHx8KHg9SHIoMTYpKSx4LndyaXRlX3NoaWZ0KDQsZy5zLnIpLHgud3JpdGVfc2hpZnQoNCxnLmUucikseC53cml0ZV9zaGlmdCg0LGcucy5jKSx4LndyaXRlX3NoaWZ0KDQsZy5lLmMp''@;'; put 'put ''LHh9O2Z1bmN0aW9uIGVmKGcpe2Zvcih2YXIgeD1nLnJlYWRfc2hpZnQoNCksdz1bXSxWPTA7Vjx4OysrVil7dmFyIFc9bmgoZyk7dy5wdXNoKEppKFcpKX1yZXR1cm4gdy5qb2luKCIsIil9ZnVuY3Rpb24gTmwoZyl7aWYoZy5sZW5ndGgtZy5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVu''@;'; put 'put ''ZGVyZmxvdyI7cmV0dXJuIGcucmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gS3UoZyx4KXtyZXR1cm4oeHx8SHIoOCkpLndyaXRlX3NoaWZ0KDgsZywiZiIpfWZ1bmN0aW9uIHlnKGcpe3ZhciB4PXt9LFY9Zy5yZWFkX3NoaWZ0KDEpPj4+MSxXPWcucmVhZF9zaGlmdCgxKSxlZT1nLnJlYWRf''@;'; put 'put ''c2hpZnQoMiwiaSIpLGxlPWcucmVhZF9zaGlmdCgxKSxvZT1nLnJlYWRfc2hpZnQoMSksZGU9Zy5yZWFkX3NoaWZ0KDEpO3N3aXRjaChnLmwrKyxWKXtjYXNlIDA6eC5hdXRvPTE7YnJlYWs7Y2FzZSAxOnguaW5kZXg9Vzt2YXIgRGU9dmxbV107RGUmJih4LnJnYj1pMihEZSkpO2JyZWFrO2Nh''@;'; put 'put ''c2UgMjp4LnJnYj1pMihbbGUsb2UsZGVdKTticmVhaztjYXNlIDM6eC50aGVtZT1XfXJldHVybiAwIT1lZSYmKHgudGludD1lZT4wP2VlLzMyNzY3OmVlLzMyNzY4KSx4fWZ1bmN0aW9uIF9nKGcseCl7aWYoeHx8KHg9SHIoOCkpLCFnfHxnLmF1dG8pcmV0dXJuIHgud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KSx4LndyaXRlX3NoaWZ0KDQsMCkseDtudWxsIT1nLmluZGV4Pyh4LndyaXRlX3NoaWZ0KDEsMikseC53cml0ZV9zaGlmdCgxLGcuaW5kZXgpKTpudWxsIT1nLnRoZW1lPyh4LndyaXRlX3NoaWZ0KDEsNikseC53cml0ZV9zaGlmdCgxLGcudGhlbWUpKTooeC53cml0ZV9zaGlmdCgxLDUpLHgu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwwKSk7dmFyIHc9Zy50aW50fHwwO2lmKHc+MD93Kj0zMjc2Nzp3PDAmJih3Kj0zMjc2OCkseC53cml0ZV9zaGlmdCgyLHcpLGcucmdiJiZudWxsPT1nLnRoZW1lKXt2YXIgVj1nLnJnYnx8IkZGRkZGRiI7Im51bWJlciI9PXR5cGVvZiBWJiYoVj0oIjAwMDAwMCIrVi50''@;'; put 'put ''b1N0cmluZygxNikpLnNsaWNlKC02KSkseC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFYuc2xpY2UoMCwyKSwxNikpLHgud3JpdGVfc2hpZnQoMSxwYXJzZUludChWLnNsaWNlKDIsNCksMTYpKSx4LndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoVi5zbGljZSg0LDYpLDE2KSkseC53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDI1NSl9ZWxzZSB4LndyaXRlX3NoaWZ0KDIsMCkseC53cml0ZV9zaGlmdCgxLDApLHgud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4geH1mdW5jdGlvbiBhXyhnKXt2YXIgeD1nLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGcubCsrLHtmQm9sZDoxJngsZkl0YWxpYzoyJngsZlVuZGVybGluZTo0''@;'; put 'put ''JngsZlN0cmlrZW91dDo4JngsZk91dGxpbmU6MTYmeCxmU2hhZG93OjMyJngsZkNvbmRlbnNlOjY0JngsZkV4dGVuZDoxMjgmeH19ZnVuY3Rpb24gc18oZyx4KXt2YXIgVj1nLnJlYWRfc2hpZnQoNCk7c3dpdGNoKFYpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0''@;'; put 'put ''OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUifVtnLnJlYWRfc2hpZnQoNCldfHwiIn1pZihWPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIitWLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGcu''@;'; put 'put ''bC09NCxnLnJlYWRfc2hpZnQoMCwxPT14PyJscHN0ciI6Imxwd3N0ciIpfXZhciBmMz1bODAsODFdLGU3PXsxOntuOiJDb2RlUGFnZSIsdDoyfSwyOntuOiJDYXRlZ29yeSIsdDo4MH0sMzp7bjoiUHJlc2VudGF0aW9uRm9ybWF0Iix0OjgwfSw0OntuOiJCeXRlQ291bnQiLHQ6M30sNTp7bjoi''@;'; put 'put ''TGluZUNvdW50Iix0OjN9LDY6e246IlBhcmFncmFwaENvdW50Iix0OjN9LDc6e246IlNsaWRlQ291bnQiLHQ6M30sODp7bjoiTm90ZUNvdW50Iix0OjN9LDk6e246IkhpZGRlbkNvdW50Iix0OjN9LDEwOntuOiJNdWx0aW1lZGlhQ2xpcENvdW50Iix0OjN9LDExOntuOiJTY2FsZUNyb3AiLHQ6''@;'; put 'put ''MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6NDEwOH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OjN9LDE5''@;'; put 'put ''OntuOiJTaGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNpb24iLHQ6MyxwOiJ2ZXJzaW9uIn0sMjQ6e246IkRpZ1NpZyIsdDo2NX0sMjY6e246IkNvbnRlbnRUeXBlIix0OjgwfSwyNzp7bjoiQ29udGVudFN0YXR1cyIsdDo4MH0s''@;'; put 'put ''Mjg6e246Ikxhbmd1YWdlIix0OjgwfSwyOTp7bjoiVmVyc2lvbiIsdDo4MH0sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4MzY1MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LFh1PXsxOntuOiJDb2RlUGFnZSIsdDoyfSwyOntuOiJUaXRsZSIs''@;'; put 'put ''dDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntu''@;'; put 'put ''OiJFZGl0VGltZSIsdDo2NH0sMTE6e246Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6M30sMTU6e246IldvcmRDb3VudCIsdDozfSwxNjp7bjoiQ2hhckNvdW50Iix0OjN9''@;'; put 'put ''LDE3OntuOiJUaHVtYm5haWwiLHQ6NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OjN9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxuZj1NZShl''@;'; put 'put ''NywibiIpLGltPU1lKFh1LCJuIiksd2c9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4''@;'; put 'put ''OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oi''@;'; put 'put ''LDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LGFtPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIs''@;'; put 'put ''ImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5''@;'; put 'put ''MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBvbShnKXtyZXR1cm4gZy5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuW3g+PjE2JjI1NSx4Pj44JjI1NSwyNTUmeF19KX12YXIgc209b20oWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3Nzcy''@;'; put 'put ''MTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0''@;'; put 'put ''MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2''@;'; put 'put ''NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pLHZsPXJuKHNtKSx0Nz1vbShbMTI2MzIyNTYs''@;'; put 'put ''OTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQz''@;'; put 'put ''NTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAsNzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0pLFYwPXsw''@;'; put 'put ''OiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sUHA9YmUoVjApLEIwPXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4''@;'; put 'put ''Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWwi''@;'; put 'put ''OiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3ht''@;'; put 'put ''bCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m''@;'; put 'put ''ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMiLCJhcHBs''@;'; put 'put ''aWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRh''@;'; put 'put ''ZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hlcyIsImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3Jt''@;'; put 'put ''YXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxz''@;'; put 'put ''IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs''@;'; put 'put ''LnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8iLCJhcHBs''@;'; put 'put ''aWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQu''@;'; put 'put ''dGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs''@;'; put 'put ''LlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVw''@;'; put 'put ''ZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiY3Ry''@;'; put 'put ''bHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2lu''@;'; put 'put ''Z21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5n''@;'; put 'put ''bWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3''@;'; put 'put ''aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hl''@;'; put 'put ''ZXQ6ImpzIn0sa3M9ZnVuY3Rpb24oKXt2YXIgZz17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3Jv''@;'; put 'put ''RW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24vdm5kLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMi''@;'; put 'put ''fSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z''@;'; put 'put ''cHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNy''@;'; put 'put ''b3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3By''@;'; put 'put ''ZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0''@;'; put 'put ''aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVybiB4ZShn''@;'; put 'put ''KS5mb3JFYWNoKGZ1bmN0aW9uKHgpe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKHcpe2dbeF1bd118fChnW3hdW3ddPWdbeF0ueGxzeCl9KX0pLHhlKGcpLmZvckVhY2goZnVuY3Rpb24oeCl7eGUoZ1t4XSkuZm9yRWFjaChmdW5jdGlvbih3KXtCMFtnW3hdW3ddXT14fSl9KSxn''@;'; put 'put ''fSgpLGwxPWZ1bmN0aW9uIHdlKGcpe2Zvcih2YXIgeD1bXSx3PXhlKGcpLFY9MDtWIT09dy5sZW5ndGg7KytWKW51bGw9PXhbZ1t3W1ZdXV0mJih4W2dbd1tWXV1dPVtdKSx4W2dbd1tWXV1dLnB1c2god1tWXSk7cmV0dXJuIHh9KEIwKTtSby5DVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZv''@;'; put 'put ''cm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgbG09enIoIlR5cGVzIixudWxsLHt4bWxuczpSby5DVCwieG1sbnM6eHNkIjpSby54c2QsInhtbG5zOnhzaSI6Um8ueHNpfSksYzE9W1sieG1sIiwiYXBwbGljYXRpb24veG1sIl0sWyJiaW4iLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5tb2RlbCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdlL3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYiXSxbImpwZyIsImltYWdlL2pwZWciXSxbImpwZWciLCJpbWFnZS9qcGVnIl0sWyJ0''@;'; put 'put ''aWYiLCJpbWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwiYXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIixsMS5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKGcpe3JldHVybiB6cigiRGVmYXVsdCIsbnVsbCx7RXh0ZW5zaW9uOmdbMF0sQ29udGVudFR5cGU6Z1sxXX0pfSks''@;'; put 'put ''eWE9e1dCOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw''@;'; put 'put ''cy9vZmZpY2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3Jl''@;'; put 'put ''bGF0aW9uc2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIsWE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYv''@;'; put 'put ''cmVsYXRpb25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIsWExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sUHJvcHMiLFZCQToiaHR0cDovL3NjaGVt''@;'; put 'put ''YXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3QifTtmdW5jdGlvbiBhdShnKXt2YXIgeD1nLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIGcuc2xpY2UoMCx4KzEpKyJfcmVscy8iK2cuc2xpY2UoeCsxKSsiLnJlbHMifWZ1bmN0aW9uIHUxKGcseCl7''@;'; put 'put ''dmFyIHc9eyIhaWQiOnt9fTtpZighZylyZXR1cm4gdzsiLyIhPT14LmNoYXJBdCgwKSYmKHg9Ii8iK3gpO3ZhciBWPXt9O3JldHVybihnLm1hdGNoKEd0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oVyl7dmFyIGVlPWZyKFcpO2lmKCI8UmVsYXRpb25zaGlwIj09PWVlWzBdKXt2YXIgbGU9e307''@;'; put 'put ''bGUuVHlwZT1lZS5UeXBlLGxlLlRhcmdldD1lZS5UYXJnZXQsbGUuSWQ9ZWUuSWQsbGUuVGFyZ2V0TW9kZT1lZS5UYXJnZXRNb2RlO3ZhciBvZT0iRXh0ZXJuYWwiPT09ZWUuVGFyZ2V0TW9kZT9lZS5UYXJnZXQ6bG4oZWUuVGFyZ2V0LHgpO3dbb2VdPWxlLFZbZWUuSWRdPWxlfX0pLHdbIiFp''@;'; put 'put ''ZCJdPVYsd31Sby5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3ZhciBfZD16cigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6Um8uUkVMU30pO2Z1bmN0aW9uIHJoKGcpe3ZhciB4PVtraSxfZF07cmV0dXJuIHhl''@;'; put 'put ''KGdbIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3hbeC5sZW5ndGhdPXpyKCJSZWxhdGlvbnNoaXAiLG51bGwsZ1siIWlkIl1bd10pfSkseC5sZW5ndGg+MiYmKHhbeC5sZW5ndGhdPSI8L1JlbGF0aW9uc2hpcHM+Iix4WzFdPXhbMV0ucmVwbGFjZSgiLz4iLCI+IikpLHguam9pbigiIil9''@;'; put 'put ''dmFyIGNtPVt5YS5ITElOSyx5YS5YUEFUSCx5YS5YTUlTU107ZnVuY3Rpb24gJHMoZyx4LHcsVixXLGVlKXtpZihXfHwoVz17fSksZ1siIWlkIl18fChnWyIhaWQiXT17fSkseDwwKWZvcih4PTE7Z1siIWlkIl1bInJJZCIreF07Kyt4KTtpZihXLklkPSJySWQiK3gsVy5UeXBlPVYsVy5UYXJn''@;'; put 'put ''ZXQ9dyxlZT9XLlRhcmdldE1vZGU9ZWU6Y20uaW5kZXhPZihXLlR5cGUpPi0xJiYoVy5UYXJnZXRNb2RlPSJFeHRlcm5hbCIpLGdbIiFpZCJdW1cuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgcklkICIreCk7cmV0dXJuIGdbIiFpZCJdW1cuSWRdPVcsZ1soIi8iK1cuVGFy''@;'; put 'put ''Z2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09Vyx4fWZ1bmN0aW9uIHVtKGcseCx3KXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrZysnIj5cbicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4y''@;'; put 'put ''L21ldGEvJysod3x8Im9kZiIpKyIjIit4KyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBhTShnLHgpe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytnKyciPlxuJywnICAgIDxuczA6aGFzUGFydCB4bWxuczpuczA9Imh0''@;'; put 'put ''dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicreCsnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9dmFyIGE3PWZ1bmN0aW9uKCl7dmFyIGc9JzxvZmZpY2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpv''@;'; put 'put ''ZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxu''@;'; put 'put ''czp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcrZi52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4i''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnfX0oKSxkMT1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJj''@;'; put 'put ''cDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVy''@;'; put 'put ''Il0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXTtSby5D''@;'; put 'put ''T1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIseWEuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFk''@;'; put 'put ''YXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIGczPWZ1bmN0aW9uKCl7Zm9yKHZhciBnPW5ldyBBcnJheShkMS5sZW5ndGgpLHg9MDt4PGQxLmxlbmd0aDsrK3gpe3ZhciB3PWQxW3hdLFY9Iig/OiIrd1swXS5zbGljZSgwLHdbMF0uaW5kZXhPZigiOiIpKSsiOikiK3dbMF0uc2xpY2Uod1swXS5p''@;'; put 'put ''bmRleE9mKCI6IikrMSk7Z1t4XT1uZXcgUmVnRXhwKCI8IitWKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrVisiPiIpfXJldHVybiBnfSgpO2Z1bmN0aW9uIGhfKGcpe3ZhciB4PXt9O2c9Ym8oZyk7Zm9yKHZhciB3PTA7dzxkMS5sZW5ndGg7Kyt3KXt2YXIgVj1kMVt3XSxXPWcubWF0Y2goZzNb''@;'; put 'put ''d10pO251bGwhPVcmJlcubGVuZ3RoPjAmJih4W1ZbMV1dPXFyKFdbMV0pKSwiZGF0ZSI9PT1WWzJdJiZ4W1ZbMV1dJiYoeFtWWzFdXT1MZSh4W1ZbMV1dKSl9cmV0dXJuIHh9dmFyIG83PXpyKCJjcDpjb3JlUHJvcGVydGllcyIsbnVsbCx7InhtbG5zOmNwIjpSby5DT1JFX1BST1BTLCJ4bWxu''@;'; put 'put ''czpkYyI6Um8uZGMsInhtbG5zOmRjdGVybXMiOlJvLmRjdGVybXMsInhtbG5zOmRjbWl0eXBlIjpSby5kY21pdHlwZSwieG1sbnM6eHNpIjpSby54c2l9KTtmdW5jdGlvbiBGcChnLHgsdyxWLFcpe251bGwhPVdbZ118fG51bGw9PXh8fCIiPT09eHx8KFdbZ109eCx4PW9pKHgpLFZbVi5sZW5n''@;'; put 'put ''dGhdPXc/enIoZyx4LHcpOiRvKGcseCkpfXZhciBKaD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJp''@;'; put 'put ''dHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJNYW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29s''@;'; put 'put ''Il0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3AiLCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHVjKGcseCx3LFYpe3ZhciBXPVtdO2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''ZylXPUpyKGcsVik7ZWxzZSBmb3IodmFyIGVlPTA7ZWU8Zy5sZW5ndGg7KytlZSlXPVcuY29uY2F0KGdbZWVdLm1hcChmdW5jdGlvbihSZSl7cmV0dXJue3Y6UmV9fSkpO3ZhciBsZT0ic3RyaW5nIj09dHlwZW9mIHg/SnIoeCxWKS5tYXAoZnVuY3Rpb24oUmUpe3JldHVybiBSZS52fSk6eCxv''@;'; put 'put ''ZT0wLGRlPTA7aWYobGUubGVuZ3RoPjApZm9yKHZhciBEZT0wO0RlIT09Vy5sZW5ndGg7RGUrPTIpe3N3aXRjaChkZT0rV1tEZSsxXS52LFdbRGVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRi''@;'; put 'put ''IjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1''@;'; put 'put ''ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3Vs''@;'; put 'put ''byI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjp3LldvcmtzaGVldHM9ZGUsdy5TaGVldE5hbWVzPWxlLnNsaWNlKG9lLG9lK2RlKTticmVhaztjYXNlIk5hbWVkIFJhbmdlcyI6Y2FzZSJSYW5nb3MgY29u''@;'; put 'put ''IG5vbWJyZSI6Y2FzZSJcdTU0MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTciOmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOncuTmFtZWRSYW5nZXM9ZGUsdy5EZWZpbmVkTmFtZXM9bGUuc2xpY2Uob2Usb2UrZGUpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''Q2hhcnRzIjpjYXNlIkRpYWdyYW1tZSI6dy5DaGFydHNoZWV0cz1kZSx3LkNoYXJ0TmFtZXM9bGUuc2xpY2Uob2Usb2UrZGUpfW9lKz1kZX19Um8uRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0''@;'; put 'put ''aWVzIix5YS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIHM3PXpyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpSby5FWFRfUFJPUFMsInhtbG5zOnZ0''@;'; put 'put ''IjpSby52dH0pO1JvLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIix5YS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAw''@;'; put 'put ''Ni9yZWxhdGlvbnNoaXBzL2N1c3RvbS1wcm9wZXJ0aWVzIjt2YXIgc009LzxbXj5dKz5bXjxdKi9nLFNnPXpyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpSby5DVVNUX1BST1BTLCJ4bWxuczp2dCI6Um8udnR9KTt2YXIgbDc9e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0''@;'; put 'put ''aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3Jl''@;'; put 'put ''YXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFu''@;'; put 'put ''Z3VhZ2U6Ikxhbmd1YWdlIn0sbE09SWUobDcpO2Z1bmN0aW9uIGM3KGcseCx3KXtnW3g9bE1beF18fHhdPXd9ZnVuY3Rpb24gTWcoZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDQpLHc9Zy5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKHcvMWU3Kk1hdGgucG93KDIsMzIpK3gvMWU3''@;'; put 'put ''LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIGloKGcseCx3KXt2YXIgVj1nLmwsVz1nLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZih3KWZvcig7Zy5sLVYmMzspKytnLmw7cmV0dXJuIFd9ZnVuY3Rpb24gZ18oZyx4LHcpe3ZhciBW''@;'; put 'put ''PWcucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gdyYmKGcubCs9NC0oVi5sZW5ndGgrMSYzKSYzKSxWfWZ1bmN0aW9uIG1fKGcseCx3KXtyZXR1cm4gMzE9PT14P2dfKGcpOmloKGcsMCx3KX1mdW5jdGlvbiBiYyhnLHgsdyl7cmV0dXJuIG1fKGcseCwhMT09PXc/MDo0KX1mdW5jdGlv''@;'; put 'put ''biBfXyhnKXt2YXIgeD1nLmwsdz1obShnLDgxKTtyZXR1cm4gMD09Z1tnLmxdJiYwPT1nW2cubCsxXSYmZy5sLXgmMiYmKGcubCs9MiksW3csaG0oZywzKV19ZnVuY3Rpb24gYl8oZyx4KXtmb3IodmFyIHc9Zy5yZWFkX3NoaWZ0KDQpLFY9e30sVz0wO1chPXc7KytXKXt2YXIgZWU9Zy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLGxlPWcucmVhZF9zaGlmdCg0KTtWW2VlXT1nLnJlYWRfc2hpZnQobGUsMTIwMD09PXg/InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZSh5LCIiKS5yZXBsYWNlKGwsIiEiKSwxMjAwPT09eCYmbGUlMiYmKGcubCs9Mil9cmV0dXJuIDMmZy5sJiYoZy5sPWcubD4+Mzw8MiksVn1m''@;'; put 'put ''dW5jdGlvbiBkNyhnKXt2YXIgeD1nLnJlYWRfc2hpZnQoNCksdz1nLnNsaWNlKGcubCxnLmwreCk7cmV0dXJuIGcubCs9eCwoMyZ4KT4wJiYoZy5sKz00LSgzJngpJjMpLHd9ZnVuY3Rpb24gaG0oZyx4LHcpe3ZhciBXLFY9Zy5yZWFkX3NoaWZ0KDIpLGVlPXd8fHt9O2lmKGcubCs9MiwxMiE9''@;'; put 'put ''PXgmJlYhPT14JiYtMT09PWYzLmluZGV4T2YoeCkmJig0MTI2IT0oNjU1MzQmeCl8fDQxMjYhPSg2NTUzNCZWKSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIreCsiIHNhdyAiK1YpO3N3aXRjaCgxMj09PXg/Vjp4KXtjYXNlIDI6cmV0dXJuIFc9Zy5yZWFkX3NoaWZ0KDIsImki''@;'; put 'put ''KSxlZS5yYXd8fChnLmwrPTIpLFc7Y2FzZSAzOnJldHVybiBnLnJlYWRfc2hpZnQoNCwiaSIpO2Nhc2UgMTE6cmV0dXJuIDAhPT1nLnJlYWRfc2hpZnQoNCk7Y2FzZSAxOTpyZXR1cm4gZy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIGloKGcsMCw0KS5yZXBsYWNlKHksIiIpO2Nhc2Ug''@;'; put 'put ''MzE6cmV0dXJuIGdfKGcpO2Nhc2UgNjQ6cmV0dXJuIE1nKGcpO2Nhc2UgNjU6cmV0dXJuIGQ3KGcpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0aW9uIHVNKGcpe3ZhciB4PXt9O3JldHVybiB4LlNpemU9Zy5yZWFkX3NoaWZ0KDQpLGcubCs9eC5TaXplKzMtKHguU2l6ZS0xKSU0LHh9KGcpO2Nhc2Ug''@;'; put 'put ''ODA6cmV0dXJuIGJjKGcsViwhZWUucmF3KS5yZXBsYWNlKHksIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIHZfKGcseCl7aWYoIXgpdGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIG1fKGcseCwwKX0oZyxWKS5y''@;'; put 'put ''ZXBsYWNlKHksIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24gY00oZyl7Zm9yKHZhciB4PWcucmVhZF9zaGlmdCg0KSx3PVtdLFY9MDtWPHgvMjsrK1Ypdy5wdXNoKF9fKGcpKTtyZXR1cm4gd30oZyk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09Vj9mdW5jdGlvbiB5Xyhn''@;'; put 'put ''KXtmb3IodmFyIHg9Zy5yZWFkX3NoaWZ0KDQpLHc9W10sVj0wO1YhPXg7KytWKXt2YXIgVz1nLmw7d1tWXT1nLnJlYWRfc2hpZnQoMCwibHB3c3RyIikucmVwbGFjZSh5LCIiKSxnLmwtVyYyJiYoZy5sKz0yKX1yZXR1cm4gd30oZyk6ZnVuY3Rpb24geGcoZyl7Zm9yKHZhciB4PWcucmVhZF9z''@;'; put 'put ''aGlmdCg0KSx3PVtdLFY9MDtWIT14OysrVil3W1ZdPWcucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpLnJlcGxhY2UoeSwiIik7cmV0dXJuIHd9KGcpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit4KyIgIitWKX19ZnVuY3Rp''@;'; put 'put ''b24gZm0oZyx4KXt2YXIgdz1Icig0KSxWPUhyKDQpO3N3aXRjaCh3LndyaXRlX3NoaWZ0KDQsODA9PWc/MzE6ZyksZyl7Y2FzZSAzOlYud3JpdGVfc2hpZnQoLTQseCk7YnJlYWs7Y2FzZSA1OihWPUhyKDgpKS53cml0ZV9zaGlmdCg4LHgsImYiKTticmVhaztjYXNlIDExOlYud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCx4PzE6MCk7YnJlYWs7Y2FzZSA2NDpWPWZ1bmN0aW9uIHJmKGcpe3ZhciB3PSgic3RyaW5nIj09dHlwZW9mIGc/bmV3IERhdGUoRGF0ZS5wYXJzZShnKSk6ZykuZ2V0VGltZSgpLzFlMysxMTY0NDQ3MzYwMCxWPXclTWF0aC5wb3coMiwzMiksVz0ody1WKS9NYXRoLnBvdygyLDMyKTtX''@;'; put 'put ''Kj0xZTc7dmFyIGVlPShWKj0xZTcpL01hdGgucG93KDIsMzIpfDA7ZWU+MCYmKFYlPU1hdGgucG93KDIsMzIpLFcrPWVlKTt2YXIgbGU9SHIoOCk7cmV0dXJuIGxlLndyaXRlX3NoaWZ0KDQsViksbGUud3JpdGVfc2hpZnQoNCxXKSxsZX0oeCk7YnJlYWs7Y2FzZSAzMTpjYXNlIDgwOmZvcigo''@;'; put 'put ''Vj1Icig0KzIqKHgubGVuZ3RoKzEpKyh4Lmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LHgubGVuZ3RoKzEpLFYud3JpdGVfc2hpZnQoMCx4LCJkYmNzIik7Vi5sIT1WLmxlbmd0aDspVi53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFBy''@;'; put 'put ''b3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitnKyIgIit4KX1yZXR1cm4gTChbdyxWXSl9ZnVuY3Rpb24gRjEoZyx4KXt2YXIgdz1nLmwsVj1nLnJlYWRfc2hpZnQoNCksVz1nLnJlYWRfc2hpZnQoNCksZWU9W10sbGU9MCxvZT0wLGRlPS0xLERlPXt9O2ZvcihsZT0wO2xlIT1XOysr''@;'; put 'put ''bGUpe3ZhciBSZT1nLnJlYWRfc2hpZnQoNCksVmU9Zy5yZWFkX3NoaWZ0KDQpO2VlW2xlXT1bUmUsVmUrd119ZWUuc29ydChmdW5jdGlvbihTdCxBdCl7cmV0dXJuIFN0WzFdLUF0WzFdfSk7dmFyIEdlPXt9O2ZvcihsZT0wO2xlIT1XOysrbGUpe2lmKGcubCE9PWVlW2xlXVsxXSl7dmFyIGV0''@;'; put 'put ''PSEwO2lmKGxlPjAmJngpc3dpdGNoKHhbZWVbbGUtMV1bMF1dLnQpe2Nhc2UgMjpnLmwrMj09PWVlW2xlXVsxXSYmKGcubCs9MixldD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQxMDg6Zy5sPD1lZVtsZV1bMV0mJihnLmw9ZWVbbGVdWzFdLGV0PSExKX1pZigoIXh8fDA9PWxlKSYmZy5sPD1l''@;'; put 'put ''ZVtsZV1bMV0mJihldD0hMSxnLmw9ZWVbbGVdWzFdKSxldCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJyb3I6IEV4cGVjdGVkIGFkZHJlc3MgIitlZVtsZV1bMV0rIiBhdCAiK2cubCsiIDoiK2xlKX1pZih4KXt2YXIgYnQ9eFtlZVtsZV1bMF1dO2lmKEdlW2J0Lm5dPWhtKGcsYnQudCx7cmF3''@;'; put 'put ''OiEwfSksInZlcnNpb24iPT09YnQucCYmKEdlW2J0Lm5dPVN0cmluZyhHZVtidC5uXT4+MTYpKyIuIisoIjAwMDAiK1N0cmluZyg2NTUzNSZHZVtidC5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09YnQubilzd2l0Y2goR2VbYnQubl0pe2Nhc2UgMDpHZVtidC5uXT0xMjUyO2Nhc2UgODc0''@;'; put 'put ''OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5OmNhc2UgOTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2FzZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2UgMTI1NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIwMTpjYXNlIDEyNTI6Y2FzZSA2NWUz''@;'; put 'put ''OmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01MzU6RihvZT1HZVtidC5uXT4+PjAmNjU1MzUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2RlUGFnZTogIitHZVtidC5uXSl9fWVsc2UgaWYoMT09PWVlW2xlXVswXSl7aWYob2U9R2UuQ29kZVBhZ2U9aG0o''@;'; put 'put ''ZywyKSxGKG9lKSwtMSE9PWRlKXt2YXIgSmU9Zy5sO2cubD1lZVtkZV1bMV0sRGU9Yl8oZyxvZSksZy5sPUplfX1lbHNlIGlmKDA9PT1lZVtsZV1bMF0pe2lmKDA9PT1vZSl7ZGU9bGUsZy5sPWVlW2xlKzFdWzFdO2NvbnRpbnVlfURlPWJfKGcsb2UpfWVsc2V7dmFyIFJ0LGZ0PURlW2VlW2xl''@;'; put 'put ''XVswXV07c3dpdGNoKGdbZy5sXSl7Y2FzZSA2NTpnLmwrPTQsUnQ9ZDcoZyk7YnJlYWs7Y2FzZSAzMDpjYXNlIDMxOmcubCs9NCxSdD1iYyhnLGdbZy5sLTRdKS5yZXBsYWNlKC9cdTAwMDArJC8sIiIpO2JyZWFrO2Nhc2UgMzpnLmwrPTQsUnQ9Zy5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztj''@;'; put 'put ''YXNlIDE5OmcubCs9NCxSdD1nLnJlYWRfc2hpZnQoNCk7YnJlYWs7Y2FzZSA1OmcubCs9NCxSdD1nLnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrO2Nhc2UgMTE6Zy5sKz00LFJ0PWlhKGcsNCk7YnJlYWs7Y2FzZSA2NDpnLmwrPTQsUnQ9TGUoTWcoZykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIitnW2cubF0pfUdlW2Z0XT1SdH19cmV0dXJuIGcubD13K1YsR2V9dmFyIGpzPVsiQ29kZVBhZ2UiLCJUaHVtYm5haWwiLCJfUElEX0xJTktCQVNFIiwiX1BJRF9ITElOS1MiLCJTeXN0ZW1JZGVudGlmaWVyIiwiRk1USUQiXS5jb25jYXQoWyJXb3Jr''@;'; put 'put ''c2hlZXRzIiwiU2hlZXROYW1lcyIsIk5hbWVkUmFuZ2VzIiwiRGVmaW5lZE5hbWVzIiwiQ2hhcnRzaGVldHMiLCJDaGFydE5hbWVzIl0pO2Z1bmN0aW9uIEhpKGcpe3N3aXRjaCh0eXBlb2YgZyl7Y2FzZSJib29sZWFuIjpyZXR1cm4gMTE7Y2FzZSJudW1iZXIiOnJldHVybigwfGcpPT1nPzM6''@;'; put 'put ''NTtjYXNlInN0cmluZyI6cmV0dXJuIDMxO2Nhc2Uib2JqZWN0IjppZihnIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gNjR9cmV0dXJuLTF9ZnVuY3Rpb24gbG8oZyx4LHcpe3ZhciBWPUhyKDgpLFc9W10sZWU9W10sbGU9OCxvZT0wLGRlPUhyKDgpLERlPUhyKDgpO2lmKGRlLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMiksZGUud3JpdGVfc2hpZnQoNCwxMjAwKSxEZS53cml0ZV9zaGlmdCg0LDEpLGVlLnB1c2goZGUpLFcucHVzaChEZSksbGUrPTgrZGUubGVuZ3RoLCF4KXsoRGU9SHIoOCkpLndyaXRlX3NoaWZ0KDQsMCksVy51bnNoaWZ0KERlKTt2YXIgUmU9W0hyKDQpXTtmb3IoUmVbMF0ud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxnLmxlbmd0aCksb2U9MDtvZTxnLmxlbmd0aDsrK29lKXt2YXIgVmU9Z1tvZV1bMF07Zm9yKChkZT1Icig4KzIqKFZlLmxlbmd0aCsxKSsoVmUubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsb2UrMiksZGUud3JpdGVfc2hpZnQoNCxWZS5sZW5ndGgrMSksZGUud3JpdGVf''@;'; put 'put ''c2hpZnQoMCxWZSwiZGJjcyIpO2RlLmwhPWRlLmxlbmd0aDspZGUud3JpdGVfc2hpZnQoMSwwKTtSZS5wdXNoKGRlKX1kZT1MKFJlKSxlZS51bnNoaWZ0KGRlKSxsZSs9OCtkZS5sZW5ndGh9Zm9yKG9lPTA7b2U8Zy5sZW5ndGg7KytvZSlpZigoIXh8fHhbZ1tvZV1bMF1dKSYmIShqcy5pbmRl''@;'; put 'put ''eE9mKGdbb2VdWzBdKT4tMSkmJm51bGwhPWdbb2VdWzFdKXt2YXIgR2U9Z1tvZV1bMV0sZXQ9MDtpZih4KXt2YXIgYnQ9d1tldD0reFtnW29lXVswXV1dO2lmKCJ2ZXJzaW9uIj09YnQucCYmInN0cmluZyI9PXR5cGVvZiBHZSl7dmFyIEplPUdlLnNwbGl0KCIuIik7R2U9KCtKZVswXTw8MTYp''@;'; put 'put ''KygrSmVbMV18fDApfWRlPWZtKGJ0LnQsR2UpfWVsc2V7dmFyIGZ0PUhpKEdlKTstMT09ZnQmJihmdD0zMSxHZT1TdHJpbmcoR2UpKSxkZT1mbShmdCxHZSl9ZWUucHVzaChkZSksKERlPUhyKDgpKS53cml0ZV9zaGlmdCg0LHg/ZXQ6MitvZSksVy5wdXNoKERlKSxsZSs9OCtkZS5sZW5ndGh9''@;'; put 'put ''dmFyIFJ0PTgqKGVlLmxlbmd0aCsxKTtmb3Iob2U9MDtvZTxlZS5sZW5ndGg7KytvZSlXW29lXS53cml0ZV9zaGlmdCg0LFJ0KSxSdCs9ZWVbb2VdLmxlbmd0aDtyZXR1cm4gVi53cml0ZV9zaGlmdCg0LGxlKSxWLndyaXRlX3NoaWZ0KDQsZWUubGVuZ3RoKSxMKFtWXS5jb25jYXQoVykuY29u''@;'; put 'put ''Y2F0KGVlKSl9ZnVuY3Rpb24gJGwoZyx4LHcpe3ZhciBWPWcuY29udGVudDtpZighVilyZXR1cm57fTtHcyhWLDApO3ZhciBXLGVlLGxlLG9lLGRlPTA7Vi5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxWLnJlYWRfc2hpZnQoMik7dmFyIERlPVYucmVhZF9zaGlmdCg0KSxSZT1WLnJlYWRf''@;'; put 'put ''c2hpZnQoMTYpO2lmKFJlIT09dWUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCYmUmUhPT13KXRocm93IG5ldyBFcnJvcigiQmFkIFByb3BlcnR5U2V0IENMU0lEICIrUmUpO2lmKDEhPT0oVz1WLnJlYWRfc2hpZnQoNCkpJiYyIT09Vyl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAj''@;'; put 'put ''U2V0czogIitXKTtpZihlZT1WLnJlYWRfc2hpZnQoMTYpLG9lPVYucmVhZF9zaGlmdCg0KSwxPT09VyYmb2UhPT1WLmwpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2g6ICIrb2UrIiAhPT0gIitWLmwpOzI9PT1XJiYobGU9Vi5yZWFkX3NoaWZ0KDE2KSxkZT1WLnJlYWRfc2hpZnQo''@;'; put 'put ''NCkpO3ZhciBidCxWZT1GMShWLHgpLEdlPXtTeXN0ZW1JZGVudGlmaWVyOkRlfTtmb3IodmFyIGV0IGluIFZlKUdlW2V0XT1WZVtldF07aWYoR2UuRk1USUQ9ZWUsMT09PVcpcmV0dXJuIEdlO2lmKGRlLVYubD09MiYmKFYubCs9MiksVi5sIT09ZGUpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGgg''@;'; put 'put ''bWlzbWF0Y2ggMjogIitWLmwrIiAhPT0gIitkZSk7dHJ5e2J0PUYxKFYsbnVsbCl9Y2F0Y2h7fWZvcihldCBpbiBidClHZVtldF09YnRbZXRdO3JldHVybiBHZS5GTVRJRD1bZWUsbGVdLEdlfWZ1bmN0aW9uIEVpKGcseCx3LFYsVyxlZSl7dmFyIGxlPUhyKFc/Njg6NDgpLG9lPVtsZV07bGUu''@;'; put 'put ''d3JpdGVfc2hpZnQoMiw2NTUzNCksbGUud3JpdGVfc2hpZnQoMiwwKSxsZS53cml0ZV9zaGlmdCg0LDg0MjQxMjU5OSksbGUud3JpdGVfc2hpZnQoMTYsdWUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCwiaGV4IiksbGUud3JpdGVfc2hpZnQoNCxXPzI6MSksbGUud3JpdGVfc2hpZnQoMTYs''@;'; put 'put ''eCwiaGV4IiksbGUud3JpdGVfc2hpZnQoNCxXPzY4OjQ4KTt2YXIgZGU9bG8oZyx3LFYpO2lmKG9lLnB1c2goZGUpLFcpe3ZhciBEZT1sbyhXLG51bGwsbnVsbCk7bGUud3JpdGVfc2hpZnQoMTYsZWUsImhleCIpLGxlLndyaXRlX3NoaWZ0KDQsNjgrZGUubGVuZ3RoKSxvZS5wdXNoKERlKX1y''@;'; put 'put ''ZXR1cm4gTChvZSl9ZnVuY3Rpb24gVmwoZyx4KXtyZXR1cm4gZy5yZWFkX3NoaWZ0KHgpLG51bGx9ZnVuY3Rpb24gaWEoZyx4KXtyZXR1cm4gMT09PWcucmVhZF9zaGlmdCh4KX1mdW5jdGlvbiBabyhnLHgpe3JldHVybiB4fHwoeD1IcigyKSkseC53cml0ZV9zaGlmdCgyLCshIWcpLHh9ZnVu''@;'; put 'put ''Y3Rpb24gdGwoZyl7cmV0dXJuIGcucmVhZF9zaGlmdCgyLCJ1Iil9ZnVuY3Rpb24gR2EoZyx4KXtyZXR1cm4geHx8KHg9SHIoMikpLHgud3JpdGVfc2hpZnQoMixnKSx4fWZ1bmN0aW9uIGFmKGcseCl7cmV0dXJuIGZ1bmN0aW9uIHYzKGcseCx3KXtmb3IodmFyIFY9W10sVz1nLmwreDtnLmw8''@;'; put 'put ''VzspVi5wdXNoKHcoZyxXLWcubCkpO2lmKFchPT1nLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBWfShnLHgsdGwpfWZ1bmN0aW9uIHkzKGcseCx3KXtyZXR1cm4gd3x8KHc9SHIoMikpLHcud3JpdGVfc2hpZnQoMSwiZSI9PXg/K2c6KyEhZyksdy53cml0ZV9zaGlm''@;'; put 'put ''dCgxLCJlIj09eD8xOjApLHd9ZnVuY3Rpb24gbGwoZyx4LHcpe3ZhciBWPWcucmVhZF9zaGlmdCh3JiZ3LmJpZmY+PTEyPzI6MSksVz0ic2Jjcy1jb250IixlZT1UO3cmJncuYmlmZj49OCYmKFQ9MTIwMCksdyYmOCE9dy5iaWZmPzEyPT13LmJpZmYmJihXPSJ3c3RyIik6Zy5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpJiYoVz0iZGJjcy1jb250Iiksdy5iaWZmPj0yJiZ3LmJpZmY8PTUmJihXPSJjcHN0ciIpO3ZhciBvZT1WP2cucmVhZF9zaGlmdChWLFcpOiIiO3JldHVybiBUPWVlLG9lfWZ1bmN0aW9uIF8zKGcpe3ZhciB4PVQ7VD0xMjAwO3ZhciBkZSx3PWcucmVhZF9zaGlmdCgyKSxWPWcucmVhZF9z''@;'; put 'put ''aGlmdCgxKSxXPTQmVixlZT04JlYsbGU9MSsoMSZWKSxvZT0wLERlPXt9O2VlJiYob2U9Zy5yZWFkX3NoaWZ0KDIpKSxXJiYoZGU9Zy5yZWFkX3NoaWZ0KDQpKTt2YXIgVmU9MD09PXc/IiI6Zy5yZWFkX3NoaWZ0KHcsMj09bGU/ImRiY3MtY29udCI6InNiY3MtY29udCIpO2lmKGVlKWZvcihE''@;'; put 'put ''ZS5fUj1bXTtvZS0tID4wOylEZS5fUi5wdXNoKHtpZHg6Zy5yZWFkX3NoaWZ0KDIpLGlmbnQ6Zy5yZWFkX3NoaWZ0KDIpfSk7cmV0dXJuIFcmJihnLmwrPWRlKSxEZS50PVZlLGVlfHwoRGUucj0iPHQ+IitEZS50KyI8L3Q+IiksVD14LERlfWZ1bmN0aW9uIGowKGcseCl7dmFyIHc9Zy5SJiZn''@;'; put 'put ''LlIubGVuZ3RofHxnLnI7Zy5yJiYoZy5SPXY3KGcucikpO3ZhciBWPSIiLFc9MDt3P2cuUi5mb3JFYWNoKGZ1bmN0aW9uKGJ0KXtXKyssVis9YnQudnx8IiJ9KTooVj1nLnR8fCIiLFc9MSk7dmFyIGVlPUhyKDMrKFc+MT8yOjApKTtlZS53cml0ZV9zaGlmdCgyLFYubGVuZ3RoKSxlZS53cml0''@;'; put 'put ''ZV9zaGlmdCgxLDF8KFc+MT84OjApKSxXPjEmJmVlLndyaXRlX3NoaWZ0KDIsVyk7dmFyIGxlPUhyKDIqVi5sZW5ndGgpO2xlLndyaXRlX3NoaWZ0KDIqVi5sZW5ndGgsViwidXRmMTZsZSIpO3ZhciBvZT1bZWUsbGVdO2lmKHcpe3ZhciBkZT1Icig0KmcuUi5sZW5ndGgpLERlPTA7b2UucHVz''@;'; put 'put ''aChkZSk7Zm9yKHZhciBSZT0wO1JlPGcuUi5sZW5ndGg7KytSZSl7dmFyIFZlPWcuUltSZV07ZGUud3JpdGVfc2hpZnQoMixEZSksRGUrPShWZS52fHwiIikubGVuZ3RoO3ZhciBHZT1WZS5zP3kxKHguY2VsbFhmcyx4LmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6VmUuc30seCk6MCxldD14''@;'; put 'put ''LmNlbGxYZnNbR2VdLmZvbnRJZDtkZS53cml0ZV9zaGlmdCgyLGV0PDQ/ZXQ6ZXQrMSl9fXJldHVybiBMKG9lKX1mdW5jdGlvbiBiMChnLHgsdyl7aWYodyl7aWYody5iaWZmPj0yJiZ3LmJpZmY8PTUpcmV0dXJuIGcucmVhZF9zaGlmdCh4LCJjcHN0ciIpO2lmKHcuYmlmZj49MTIpcmV0dXJu''@;'; put 'put ''IGcucmVhZF9zaGlmdCh4LCJkYmNzLWNvbnQiKX12YXIgVz1nLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGcucmVhZF9zaGlmdCh4LDA9PT1XPyJzYmNzLWNvbnQiOiJkYmNzLWNvbnQiKX1mdW5jdGlvbiBhaChnLHgsdyl7dmFyIFY9Zy5yZWFkX3NoaWZ0KHcmJjI9PXcuYmlmZj8xOjIpO3JldHVy''@;'; put 'put ''biAwPT09Vj8oZy5sKyssIiIpOmIwKGcsVix3KX1mdW5jdGlvbiBvZihnLHgsdyl7aWYody5iaWZmPjUpcmV0dXJuIGFoKGcsMCx3KTt2YXIgVj1nLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1WPyhnLmwrKywiIik6Zy5yZWFkX3NoaWZ0KFYsdy5iaWZmPD00fHwhZy5sZW5zPyJjcHN0ciI6''@;'; put 'put ''InNiY3MtY29udCIpfWZ1bmN0aW9uIFFoKGcseCx3KXtyZXR1cm4gd3x8KHc9SHIoMysyKmcubGVuZ3RoKSksdy53cml0ZV9zaGlmdCgyLGcubGVuZ3RoKSx3LndyaXRlX3NoaWZ0KDEsMSksdy53cml0ZV9zaGlmdCgzMSxnLCJ1dGYxNmxlIiksd31mdW5jdGlvbiBrYShnKXt2YXIgeD1nLnJl''@;'; put 'put ''YWRfc2hpZnQoNCk7cmV0dXJuIHg+MD9nLnJlYWRfc2hpZnQoeCwidXRmMTZsZSIpLnJlcGxhY2UoeSwiIik6IiJ9ZnVuY3Rpb24gSDEoZyx4KXt4fHwoeD1Icig2KzIqZy5sZW5ndGgpKSx4LndyaXRlX3NoaWZ0KDQsMStnLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDsrK3cpeC53''@;'; put 'put ''cml0ZV9zaGlmdCgyLGcuY2hhckNvZGVBdCh3KSk7cmV0dXJuIHgud3JpdGVfc2hpZnQoMiwwKSx4fWZ1bmN0aW9uIG9oKGcpe3ZhciB4PUhyKDUxMiksdz0wLFY9Zy5UYXJnZXQ7ImZpbGU6Ly8iPT1WLnNsaWNlKDAsNykmJihWPVYuc2xpY2UoNykpO3ZhciBXPVYuaW5kZXhPZigiIyIpLGVl''@;'; put 'put ''PVc+LTE/MzE6MjM7c3dpdGNoKFYuY2hhckF0KDApKXtjYXNlIiMiOmVlPTI4O2JyZWFrO2Nhc2UiLiI6ZWUmPS0zfXgud3JpdGVfc2hpZnQoNCwyKSx4LndyaXRlX3NoaWZ0KDQsZWUpO3ZhciBsZT1bOCw2ODE1ODI3LDY2MTkyMzcsNDg0OTc4MCw4M107Zm9yKHc9MDt3PGxlLmxlbmd0aDsr''@;'; put 'put ''K3cpeC53cml0ZV9zaGlmdCg0LGxlW3ddKTtpZigyOD09ZWUpSDEoVj1WLnNsaWNlKDEpLHgpO2Vsc2UgaWYoMiZlZSl7Zm9yKGxlPSJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSx3PTA7dzxsZS5sZW5ndGg7Kyt3KXgud3JpdGVf''@;'; put 'put ''c2hpZnQoMSxwYXJzZUludChsZVt3XSwxNikpO3ZhciBvZT1XPi0xP1Yuc2xpY2UoMCxXKTpWO2Zvcih4LndyaXRlX3NoaWZ0KDQsMioob2UubGVuZ3RoKzEpKSx3PTA7dzxvZS5sZW5ndGg7Kyt3KXgud3JpdGVfc2hpZnQoMixvZS5jaGFyQ29kZUF0KHcpKTt4LndyaXRlX3NoaWZ0KDIsMCks''@;'; put 'put ''OCZlZSYmSDEoVz4tMT9WLnNsaWNlKFcrMSk6IiIseCl9ZWxzZXtmb3IobGU9IjAzIDAzIDAwIDAwIDAwIDAwIDAwIDAwIGMwIDAwIDAwIDAwIDAwIDAwIDAwIDQ2Ii5zcGxpdCgiICIpLHc9MDt3PGxlLmxlbmd0aDsrK3cpeC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KGxlW3ddLDE2KSk7Zm9y''@;'; put 'put ''KHZhciBkZT0wOyIuLi8iPT1WLnNsaWNlKDMqZGUsMypkZSszKXx8Ii4uXFwiPT1WLnNsaWNlKDMqZGUsMypkZSszKTspKytkZTtmb3IoeC53cml0ZV9zaGlmdCgyLGRlKSx4LndyaXRlX3NoaWZ0KDQsVi5sZW5ndGgtMypkZSsxKSx3PTA7dzxWLmxlbmd0aC0zKmRlOysrdyl4LndyaXRlX3No''@;'; put 'put ''aWZ0KDEsMjU1JlYuY2hhckNvZGVBdCh3KzMqZGUpKTtmb3IoeC53cml0ZV9zaGlmdCgxLDApLHgud3JpdGVfc2hpZnQoMiw2NTUzNSkseC53cml0ZV9zaGlmdCgyLDU3MDA1KSx3PTA7dzw2Oysrdyl4LndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIHguc2xpY2UoMCx4LmwpfWZ1bmN0aW9uIFRn''@;'; put 'put ''KGcpe3JldHVybltnLnJlYWRfc2hpZnQoMSksZy5yZWFkX3NoaWZ0KDEpLGcucmVhZF9zaGlmdCgxKSxnLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIHczKGcseCl7dmFyIHc9VGcoZyk7cmV0dXJuIHdbM109MCx3fWZ1bmN0aW9uIERzKGcpe3JldHVybntyOmcucmVhZF9zaGlmdCgyKSxjOmcu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxpeGZlOmcucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gY2woZyx4LHcsVil7cmV0dXJuIFZ8fChWPUhyKDYpKSxWLndyaXRlX3NoaWZ0KDIsZyksVi53cml0ZV9zaGlmdCgyLHgpLFYud3JpdGVfc2hpZnQoMix3fHwwKSxWfWZ1bmN0aW9uIGJkKGcseCx3KXt2YXIgVj13''@;'; put 'put ''LmJpZmY+OD80OjI7cmV0dXJuW2cucmVhZF9zaGlmdChWKSxnLnJlYWRfc2hpZnQoViwiaSIpLGcucmVhZF9zaGlmdChWLCJpIildfWZ1bmN0aW9uIEFnKGcpe3JldHVybltnLnJlYWRfc2hpZnQoMikseWQoZyldfWZ1bmN0aW9uIFYxKGcpe3ZhciB4PWcucmVhZF9zaGlmdCgyKSx3PWcucmVh''@;'; put 'put ''ZF9zaGlmdCgyKTtyZXR1cm57czp7YzpnLnJlYWRfc2hpZnQoMikscjp4fSxlOntjOmcucmVhZF9zaGlmdCgyKSxyOnd9fX1mdW5jdGlvbiBlMihnLHgpe3JldHVybiB4fHwoeD1Icig4KSkseC53cml0ZV9zaGlmdCgyLGcucy5yKSx4LndyaXRlX3NoaWZ0KDIsZy5lLnIpLHgud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixnLnMuYykseC53cml0ZV9zaGlmdCgyLGcuZS5jKSx4fWZ1bmN0aW9uIHdfKGcpe3ZhciB4PWcucmVhZF9zaGlmdCgyKSx3PWcucmVhZF9zaGlmdCgyKTtyZXR1cm57czp7YzpnLnJlYWRfc2hpZnQoMSkscjp4fSxlOntjOmcucmVhZF9zaGlmdCgxKSxyOnd9fX12YXIgQ189d187ZnVu''@;'; put 'put ''Y3Rpb24gU18oZyl7Zy5sKz00O3ZhciB4PWcucmVhZF9zaGlmdCgyKSx3PWcucmVhZF9zaGlmdCgyKSxWPWcucmVhZF9zaGlmdCgyKTtyZXR1cm4gZy5sKz0xMixbdyx4LFZdfWZ1bmN0aW9uIHcwKGcpe2cubCs9MixnLmwrPWcucmVhZF9zaGlmdCgyKX12YXIgeEk9ezA6dzAsNDp3MCw1Oncw''@;'; put 'put ''LDY6dzAsNzpmdW5jdGlvbiBNSShnKXtyZXR1cm4gZy5sKz00LGcuY2Y9Zy5yZWFkX3NoaWZ0KDIpLHt9fSw4OncwLDk6dzAsMTA6dzAsMTE6dzAsMTI6dzAsMTM6ZnVuY3Rpb24gZ20oZyl7dmFyIHg9e307cmV0dXJuIGcubCs9NCxnLmwrPTE2LHguZlNoYXJlZE5vdGU9Zy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLGcubCs9NCx4fSwxNDp3MCwxNTp3MCwxNjp3MCwxNzp3MCwxODp3MCwxOTp3MCwyMDp3MCwyMTpTX307ZnVuY3Rpb24gY2YoZyx4KXt2YXIgdz17QklGRlZlcjowLGR0OjB9O3N3aXRjaCh3LkJJRkZWZXI9Zy5yZWFkX3NoaWZ0KDIpLCh4LT0yKT49MiYmKHcuZHQ9Zy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLGcubC09Miksdy5CSUZGVmVyKXtjYXNlIDE1MzY6Y2FzZSAxMjgwOmNhc2UgMTAyNDpjYXNlIDc2ODpjYXNlIDUxMjpjYXNlIDI6Y2FzZSA3OmJyZWFrO2RlZmF1bHQ6aWYoeD42KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBCSUZGIFZlciAiK3cuQklGRlZlcil9cmV0dXJuIGcu''@;'; put 'put ''cmVhZF9zaGlmdCh4KSx3fWZ1bmN0aW9uIE1fKGcseCx3KXt2YXIgVj0xNTM2LFc9MTY7c3dpdGNoKHcuYm9va1R5cGUpe2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpicmVhaztjYXNlImJpZmY1IjpWPTEyODAsVz04O2JyZWFrO2Nhc2UiYmlmZjQiOlY9NCxXPTY7YnJlYWs7Y2FzZSJiaWZmMyI6''@;'; put 'put ''Vj0zLFc9NjticmVhaztjYXNlImJpZmYyIjpWPTIsVz00O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBCSUZGIHZlcnNpb24iKX12YXIgZWU9SHIoVyk7cmV0dXJuIGVlLndyaXRlX3NoaWZ0KDIsViksZWUud3JpdGVfc2hpZnQoMix4KSxXPjQmJmVlLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMjkyODIpLFc+NiYmZWUud3JpdGVfc2hpZnQoMiwxOTk3KSxXPjgmJihlZS53cml0ZV9zaGlmdCgyLDQ5MTYxKSxlZS53cml0ZV9zaGlmdCgyLDEpLGVlLndyaXRlX3NoaWZ0KDIsMTc5OCksZWUud3JpdGVfc2hpZnQoMiwwKSksZWV9ZnVuY3Rpb24gQzMoZyx4KXt2YXIgdz0h''@;'; put 'put ''eHx8eC5iaWZmPj04PzI6MSxWPUhyKDgrdypnLm5hbWUubGVuZ3RoKTtWLndyaXRlX3NoaWZ0KDQsZy5wb3MpLFYud3JpdGVfc2hpZnQoMSxnLmhzfHwwKSxWLndyaXRlX3NoaWZ0KDEsZy5kdCksVi53cml0ZV9zaGlmdCgxLGcubmFtZS5sZW5ndGgpLHguYmlmZj49OCYmVi53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDEpLFYud3JpdGVfc2hpZnQodypnLm5hbWUubGVuZ3RoLGcubmFtZSx4LmJpZmY8OD8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgVz1WLnNsaWNlKDAsVi5sKTtyZXR1cm4gVy5sPVYubCxXfWZ1bmN0aW9uIGVpKGcpe3JldHVybiBnLnJlYWRfc2hpZnQoNCksbmgoZyl9ZnVuY3Rpb24geG8o''@;'; put 'put ''Zyl7cmV0dXJuIGcucmVhZF9zaGlmdCg0KSxlZihnKX1mdW5jdGlvbiBDMChnLHgsdyl7cmV0dXJuIGcucmVhZF9zaGlmdCg0KSxZb2UoZywwLHcpfWZ1bmN0aW9uIG4yKGcseCx3KXt2YXIgVj0wO3cmJjI9PXcuYmlmZnx8KFY9Zy5yZWFkX3NoaWZ0KDIpKTt2YXIgVz1nLnJlYWRfc2hpZnQo''@;'; put 'put ''Mik7cmV0dXJuIHcmJjI9PXcuYmlmZiYmKFY9MS0oVz4+MTUpLFcmPTMyNzY3KSxbe1Vuc3luY2VkOjEmVixEeVplcm86KDImVik+PjEsRXhBc2M6KDQmVik+PjIsRXhEc2M6KDgmVik+PjN9LFddfWZ1bmN0aW9uIGZNKGcseCx3LFYpe3ZhciBXPXcmJjU9PXcuYmlmZjtWfHwoVj1IcihXPzMr''@;'; put 'put ''eC5sZW5ndGg6NSsyKngubGVuZ3RoKSksVi53cml0ZV9zaGlmdCgyLGcpLFYud3JpdGVfc2hpZnQoVz8xOjIseC5sZW5ndGgpLFd8fFYud3JpdGVfc2hpZnQoMSwxKSxWLndyaXRlX3NoaWZ0KChXPzE6MikqeC5sZW5ndGgseCxXPyJzYmNzIjoidXRmMTZsZSIpO3ZhciBlZT1WLmxlbmd0aD5W''@;'; put 'put ''Lmw/Vi5zbGljZSgwLFYubCk6VjtyZXR1cm4gbnVsbD09ZWUubCYmKGVlLmw9ZWUubGVuZ3RoKSxlZX12YXIgJHo9b2Y7ZnVuY3Rpb24gQ2QoZyx4LHcpe3ZhciBWPWcubCt4LFc9OCE9dy5iaWZmJiZ3LmJpZmY/Mjo0LGVlPWcucmVhZF9zaGlmdChXKSxsZT1nLnJlYWRfc2hpZnQoVyksb2U9''@;'; put 'put ''Zy5yZWFkX3NoaWZ0KDIpLGRlPWcucmVhZF9zaGlmdCgyKTtyZXR1cm4gZy5sPVYse3M6e3I6ZWUsYzpvZX0sZTp7cjpsZSxjOmRlfX19ZnVuY3Rpb24gcDcoZyx4LHcsVil7dmFyIGVlPSF3fHwhdy5iaWZmfHw4PT13LmJpZmY7Vnx8KFY9SHIodyYmNT09dy5iaWZmPzE2OjIwKSksVi53cml0''@;'; put 'put ''ZV9zaGlmdCgyLGVlJiZ3LmNlbGxTdHlsZXMmJmcuZm9udElkJiYoZy5mb250SWQ8ND9nLmZvbnRJZDpnLmZvbnRJZCsxKXx8MCk7dmFyIGxlPTE7Zy5wcm90ZWN0aW9uJiYoZy5wcm90ZWN0aW9uLmVkaXRhYmxlJiYobGUmPS0yKSxnLnByb3RlY3Rpb24uaGlkZGVuJiYobGV8PTIpKSxnLnN0''@;'; put 'put ''eWxlPyhWLndyaXRlX3NoaWZ0KDIsZy5udW1GbXRJZHx8MCksVi53cml0ZV9zaGlmdCgyLDY1NTI0fGxlKSk6KFYud3JpdGVfc2hpZnQoMixnLm51bUZtdElkfHwwKSxWLndyaXRlX3NoaWZ0KDIseDw8NHxsZSkpO3ZhciBvZT1nLmFsaWdubWVudHx8e307aWYoZWUpe3ZhciBkZT0wLERlPTA7''@;'; put 'put ''VV8uaW5kZXhPZihvZS5ob3Jpem9udGFsKT4tMSYmKGRlfD1VXy5pbmRleE9mKG9lLmhvcml6b250YWwpKSxvZS53cmFwVGV4dCYmKGRlfD04KSxXXy5pbmRleE9mKG9lLnZlcnRpY2FsKT4tMT9kZXw9V18uaW5kZXhPZihvZS52ZXJ0aWNhbCk8PDQ6bnVsbD09b2UudmVydGljYWwmJihkZXw9''@;'; put 'put ''MzIpLFYud3JpdGVfc2hpZnQoMSxkZSksVi53cml0ZV9zaGlmdCgxLDApLG9lLnNocmlua1RvRml0JiYoRGV8PTE2KSxWLndyaXRlX3NoaWZ0KDIsRGUpO3ZhciBSZT1udWxsO251bGwhPWcuYm9yZGVySWQmJihSZT13LkJvcmRlcnMmJncuQm9yZGVyc1tnLmJvcmRlcklkfHwwXXx8e30pO3Zh''@;'; put 'put ''ciBWZT0wLEdlPTAsZXQ9MDtSZSYmKG51bGwhPVJlLmxlZnQmJlJlLmxlZnQuc3R5bGUmJihWZXw9KGV0PXppLmluZGV4T2YoUmUubGVmdC5zdHlsZSkpPi0xP2V0OjApLG51bGwhPVJlLnJpZ2h0JiZSZS5yaWdodC5zdHlsZSYmKFZlfD0oKGV0PXppLmluZGV4T2YoUmUucmlnaHQuc3R5bGUp''@;'; put 'put ''KT4tMT9ldDowKTw8NCksbnVsbCE9UmUudG9wJiZSZS50b3Auc3R5bGUmJihHZXw9KGV0PXppLmluZGV4T2YoUmUudG9wLnN0eWxlKSk+LTE/ZXQ6MCksbnVsbCE9UmUuYm90dG9tJiZSZS5ib3R0b20uc3R5bGUmJihHZXw9KChldD16aS5pbmRleE9mKFJlLmJvdHRvbS5zdHlsZSkpPi0xP2V0''@;'; put 'put ''OjApPDw0KSksVi53cml0ZV9zaGlmdCgxLFZlKSxWLndyaXRlX3NoaWZ0KDEsR2UpLFYud3JpdGVfc2hpZnQoMiwwKSxWLndyaXRlX3NoaWZ0KDIsMCksVi53cml0ZV9zaGlmdCgxLDApO3ZhciBidD0wLEplPXcuRmlsbHMmJncuRmlsbHNbZy5maWxsSWR8fDBdfHx7fTsoSmUuZmdDb2xvcnx8''@;'; put 'put ''SmUuYmdDb2xvcikmJihidHw9NCksVi53cml0ZV9zaGlmdCgxLGJ0KTt2YXIgZnQ9MDtmdHw9JE0oSmUuZmdDb2xvciw2NSksZnR8PSRNKEplLmJnQ29sb3IsNjUpPDw3LFYud3JpdGVfc2hpZnQoMixmdCl9ZWxzZSBWLndyaXRlX3NoaWZ0KDQsMCksVi53cml0ZV9zaGlmdCg0LDApLFYud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwwKTtyZXR1cm4gVn1mdW5jdGlvbiBUXyhnLHgsdyl7dmFyIFY9RHMoZyk7KDI9PXcuYmlmZnx8OT09eCkmJisrZy5sO3ZhciBXPWZ1bmN0aW9uIHBtKGcpe3ZhciB4PWcucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PWcucmVhZF9zaGlmdCgxKT94OjE9PT14fShnKTtyZXR1''@;'; put 'put ''cm4gVi52YWw9VyxWLnQ9ITA9PT1XfHwhMT09PVc/ImIiOiJlIixWfXZhciBrXz1mdW5jdGlvbiBoNyhnLHgsdyl7cmV0dXJuIDA9PT14PyIiOm9mKGcsMCx3KX07ZnVuY3Rpb24gTEkoZyx4LHcpe3ZhciBXLFY9Zy5yZWFkX3NoaWZ0KDIpLGVlPXtmQnVpbHRJbjoxJlYsZldhbnRBZHZpc2U6''@;'; put 'put ''Vj4+PjEmMSxmV2FudFBpY3Q6Vj4+PjImMSxmT2xlOlY+Pj4zJjEsZk9sZUxpbms6Vj4+PjQmMSxjZjpWPj4+NSYxMDIzLGZJY29uOlY+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT13LnNiY2NoJiYoVz1mdW5jdGlvbiBoMShnLHgsdyl7Zy5sKz00O3ZhciBWPWcubCsoeC09NCksVz1sbChnLDAs''@;'; put 'put ''dyksZWU9Zy5yZWFkX3NoaWZ0KDIpO2lmKGVlIT09KFYtPWcubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgQWRkaW5VZGY6IHBhZGRpbmcgPSAiK1YrIiAhPSAiK2VlKTtyZXR1cm4gZy5sKz1lZSxXfShnLHgtMix3KSksZWUuYm9keT1XfHxnLnJlYWRfc2hpZnQoeC0yKSwic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIFcmJihlZS5OYW1lPVcpLGVlfXZhciBYej1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVh''@;'; put 'put ''IiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiBPSShnLHgs''@;'; put 'put ''dyl7dmFyIFY9Zy5sK3gsVz1nLnJlYWRfc2hpZnQoMiksZWU9Zy5yZWFkX3NoaWZ0KDEpLGxlPWcucmVhZF9zaGlmdCgxKSxvZT1nLnJlYWRfc2hpZnQodyYmMj09dy5iaWZmPzE6MiksZGU9MDsoIXd8fHcuYmlmZj49NSkmJig1IT13LmJpZmYmJihnLmwrPTIpLGRlPWcucmVhZF9zaGlmdCgy''@;'; put 'put ''KSw1PT13LmJpZmYmJihnLmwrPTIpLGcubCs9NCk7dmFyIERlPWIwKGcsbGUsdyk7MzImVyYmKERlPVh6W0RlLmNoYXJDb2RlQXQoMCldKTt2YXIgUmU9Vi1nLmw7dyYmMj09dy5iaWZmJiYtLVJlO3ZhciBWZT1WIT1nLmwmJjAhPT1vZSYmUmU+MD9mdW5jdGlvbiBpTChnLHgsdyxWKXt2YXIg''@;'; put 'put ''bGUsVz1nLmwreCxlZT1fZihnLFYsdyk7cmV0dXJuIFchPT1nLmwmJihsZT1EMyhnLFctZy5sLGVlLHcpKSxbZWUsbGVdfShnLFJlLHcsb2UpOltdO3JldHVybntjaEtleTplZSxOYW1lOkRlLGl0YWI6ZGUscmdjZTpWZX19ZnVuY3Rpb24gRF8oZyx4LHcpe2lmKHcuYmlmZjw4KXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBSZyhnLHgsdyl7Mz09Z1tnLmwrMV0mJmdbZy5sXSsrO3ZhciBWPWxsKGcsMCx3KTtyZXR1cm4gMz09Vi5jaGFyQ29kZUF0KDApP1Yuc2xpY2UoMSk6Vn0oZywwLHcpO2Zvcih2YXIgVj1bXSxXPWcubCt4LGVlPWcucmVhZF9zaGlmdCh3LmJpZmY+OD80OjIpOzAhPWVlLS07KVYu''@;'; put 'put ''cHVzaChiZChnLDAsdykpO2lmKGcubCE9Vyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBFeHRlcm5TaGVldDogIitnLmwrIiAhPSAiK1cpO3JldHVybiBWfWZ1bmN0aW9uIFBJKGcseCx3KXt2YXIgVj1DXyhnLDYpO3N3aXRjaCh3LmJpZmYpe2Nhc2UgMjpnLmwrKyx4LT03O2JyZWFrO2Nhc2UgMzpj''@;'; put 'put ''YXNlIDQ6Zy5sKz0yLHgtPTg7YnJlYWs7ZGVmYXVsdDpnLmwrPTYseC09MTJ9cmV0dXJuW1YsY1coZyx4LHcpXX12YXIgUW89W107ZnVuY3Rpb24gX00oZyl7dmFyIHg9SHIoMjQpLHc9eGEoZ1swXSk7eC53cml0ZV9zaGlmdCgyLHcucikseC53cml0ZV9zaGlmdCgyLHcucikseC53cml0ZV9z''@;'; put 'put ''aGlmdCgyLHcuYykseC53cml0ZV9zaGlmdCgyLHcuYyk7Zm9yKHZhciBWPSJkMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxXPTA7VzwxNjsrK1cpeC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFZbV10sMTYpKTtyZXR1cm4gTChbeCxv''@;'; put 'put ''aChnWzFdKV0pfWZ1bmN0aW9uIEhJKGcpe3ZhciB4PWdbMV0uVG9vbHRpcCx3PUhyKDEwKzIqKHgubGVuZ3RoKzEpKTt3LndyaXRlX3NoaWZ0KDIsMjA0OCk7dmFyIFY9eGEoZ1swXSk7dy53cml0ZV9zaGlmdCgyLFYuciksdy53cml0ZV9zaGlmdCgyLFYuciksdy53cml0ZV9zaGlmdCgyLFYu''@;'; put 'put ''Yyksdy53cml0ZV9zaGlmdCgyLFYuYyk7Zm9yKHZhciBXPTA7Vzx4Lmxlbmd0aDsrK1cpdy53cml0ZV9zaGlmdCgyLHguY2hhckNvZGVBdChXKSk7cmV0dXJuIHcud3JpdGVfc2hpZnQoMiwwKSx3fWZ1bmN0aW9uIHVmKGcseCx3KXtpZighdy5jZWxsU3R5bGVzKXJldHVybiBvbChnLHgpO3Zh''@;'; put 'put ''ciBWPXcmJncuYmlmZj49MTI/NDoyLFc9Zy5yZWFkX3NoaWZ0KFYpLGVlPWcucmVhZF9zaGlmdChWKSxsZT1nLnJlYWRfc2hpZnQoViksb2U9Zy5yZWFkX3NoaWZ0KFYpLGRlPWcucmVhZF9zaGlmdCgyKTsyPT1WJiYoZy5sKz0yKTt2YXIgRGU9e3M6VyxlOmVlLHc6bGUsaXhmZTpvZSxmbGFn''@;'; put 'put ''czpkZX07cmV0dXJuKHcuYmlmZj49NXx8IXcuYmlmZikmJihEZS5sZXZlbD1kZT4+OCY3KSxEZX1Rb1s4XT1mdW5jdGlvbihnLHgpe3ZhciB3PWcubCt4O2cubCs9MTA7dmFyIFY9Zy5yZWFkX3NoaWZ0KDIpO2cubCs9NCxnLmwrPTIsZy5sKz0yLGcubCs9MixnLmwrPTQ7dmFyIFc9Zy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpO3JldHVybiBnLmwrPVcsZy5sPXcse2ZtdDpWfX07dmFyIG5VPURzLHJVPWFmLHdNPWFoO3ZhciBtNz1mdW5jdGlvbigpe3ZhciBnPXsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2Ojcz''@;'; put 'put ''NywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwxMTo0''@;'; put 'put ''MzcsMTM6NDM3LDE0Ojg1MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0MzcsMjU6NDM3LDI2Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2Niw1''@;'; put 'put ''NTo4NTAsNjQ6ODUyLDc3OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1Ojg1MiwxMzY6ODU3LDIwNDoxMjU3LDI1NToxNjk2OX0seD1JZSh7MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2Niwx''@;'; put 'put ''MDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAz''@;'; put 'put ''OjEyNTMsMDoyMDEyN30pO2Z1bmN0aW9uIFcoZGUsRGUpe3ZhciBSZT1EZXx8e307cmV0dXJuIFJlLmRhdGVORnx8KFJlLmRhdGVORj0ieXl5eW1tZGQiKSxRMihmdW5jdGlvbiBWKGRlLERlKXt2YXIgUmU9W10sVmU9UigxKTtzd2l0Y2goRGUudHlwZSl7Y2FzZSJiYXNlNjQiOlZlPXUoaGUu''@;'; put 'put ''ZGVjb2RlKGRlKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOlZlPXUoZGUpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpWZT1kZX1HcyhWZSwwKTt2YXIgR2U9VmUucmVhZF9zaGlmdCgxKSxldD0hISgxMzYmR2UpLGJ0PSExLEplPSExO3N3aXRjaChHZSl7Y2FzZSAyOmNhc2UgMzpjYXNl''@;'; put 'put ''IDEzMTpjYXNlIDEzOTpjYXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6YnQ9ITAsZXQ9ITA7YnJlYWs7Y2FzZSAxNDA6SmU9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBWZXJzaW9uOiAiK0dlLnRvU3RyaW5nKDE2KSl9dmFyIGZ0PTAsUnQ9''@;'; put 'put ''NTIxOzI9PUdlJiYoZnQ9VmUucmVhZF9zaGlmdCgyKSksVmUubCs9MywyIT1HZSYmKGZ0PVZlLnJlYWRfc2hpZnQoNCkpLGZ0PjEwNDg1NzYmJihmdD0xZTYpLDIhPUdlJiYoUnQ9VmUucmVhZF9zaGlmdCgyKSk7dmFyIFN0PVZlLnJlYWRfc2hpZnQoMiksQXQ9RGUuY29kZXBhZ2V8fDEyNTI7''@;'; put 'put ''MiE9R2UmJihWZS5sKz0xNixWZS5yZWFkX3NoaWZ0KDEpLDAhPT1WZVtWZS5sXSYmKEF0PWdbVmVbVmUubF1dKSxWZS5sKz0xLFZlLmwrPTIpLEplJiYoVmUubCs9MzYpO2Zvcih2YXIgenQ9W10sU249e30sbHI9TWF0aC5taW4oVmUubGVuZ3RoLDI9PUdlPzUyMTpSdC0xMC0oYnQ/MjY0OjAp''@;'; put 'put ''KSxtbj1KZT8zMjoxMTtWZS5sPGxyJiYxMyE9VmVbVmUubF07KXN3aXRjaChTbj17fSxTbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKEF0LFZlLnNsaWNlKFZlLmwsVmUubCttbikpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9nLCIiKSxWZS5sKz1tbixTbi50eXBlPVN0cmluZy5mcm9t''@;'; put 'put ''Q2hhckNvZGUoVmUucmVhZF9zaGlmdCgxKSksMiE9R2UmJiFKZSYmKFNuLm9mZnNldD1WZS5yZWFkX3NoaWZ0KDQpKSxTbi5sZW49VmUucmVhZF9zaGlmdCgxKSwyPT1HZSYmKFNuLm9mZnNldD1WZS5yZWFkX3NoaWZ0KDIpKSxTbi5kZWM9VmUucmVhZF9zaGlmdCgxKSxTbi5uYW1lLmxlbmd0''@;'; put 'put ''aCYmenQucHVzaChTbiksMiE9R2UmJihWZS5sKz1KZT8xMzoxNCksU24udHlwZSl7Y2FzZSJCIjooIWJ0fHw4IT1Tbi5sZW4pJiZEZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK1NuLm5hbWUrIjoiK1NuLnR5cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpEZS5XVEYmJmNvbnNvbGUu''@;'; put 'put ''bG9nKCJTa2lwcGluZyAiK1NuLm5hbWUrIjoiK1NuLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2FzZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitTbi50eXBlKX1pZigxMyE9PVZlW1ZlLmxdJiYoVmUubD1SdC0xKSwxMyE9PVZlLnJlYWRfc2hpZnQoMSkpdGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3QgZm91bmQgIitWZS5sKyIgIitWZVtWZS5sXSk7VmUubD1S''@;'; put 'put ''dDt2YXIgZHI9MCxHbj0wO2ZvcihSZVswXT1bXSxHbj0wO0duIT16dC5sZW5ndGg7KytHbilSZVswXVtHbl09enRbR25dLm5hbWU7Zm9yKDtmdC0tID4wOylpZig0MiE9PVZlW1ZlLmxdKWZvcigrK1ZlLmwsUmVbKytkcl09W10sR249MCxHbj0wO0duIT16dC5sZW5ndGg7KytHbil7dmFyIEhu''@;'; put 'put ''PVZlLnNsaWNlKFZlLmwsVmUubCt6dFtHbl0ubGVuKTtWZS5sKz16dFtHbl0ubGVuLEdzKEhuLDApO3ZhciBocj1jcHRhYmxlLnV0aWxzLmRlY29kZShBdCxIbik7c3dpdGNoKHp0W0duXS50eXBlKXtjYXNlIkMiOmhyLnRyaW0oKS5sZW5ndGgmJihSZVtkcl1bR25dPWhyLnJlcGxhY2UoL1xz''@;'; put 'put ''KyQvLCIiKSk7YnJlYWs7Y2FzZSJEIjpSZVtkcl1bR25dPTg9PT1oci5sZW5ndGg/bmV3IERhdGUoK2hyLnNsaWNlKDAsNCksK2hyLnNsaWNlKDQsNiktMSwraHIuc2xpY2UoNiw4KSk6aHI7YnJlYWs7Y2FzZSJGIjpSZVtkcl1bR25dPXBhcnNlRmxvYXQoaHIudHJpbSgpKTticmVhaztjYXNl''@;'; put 'put ''IisiOmNhc2UiSSI6UmVbZHJdW0duXT1KZT8yMTQ3NDgzNjQ4XkhuLnJlYWRfc2hpZnQoLTQsImkiKTpIbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3aXRjaChoci50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOlJlW2RyXVtHbl09ITA7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJOIjpjYXNlIkYiOlJlW2RyXVtHbl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitocisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIWV0KXRocm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQgTUVN''@;'; put 'put ''TyBmb3IgdHlwZSAiK0dlLnRvU3RyaW5nKDE2KSk7UmVbZHJdW0duXT0iIyNNRU1PIyMiKyhKZT9wYXJzZUludChoci50cmltKCksMTApOkhuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KGhyPWhyLnJlcGxhY2UoL1x1MDAwMC9nLCIiKS50cmltKCkpJiYiLiIhPWhyJiYoUmVbZHJd''@;'; put 'put ''W0duXT0raHJ8fDApO2JyZWFrO2Nhc2UiQCI6UmVbZHJdW0duXT1uZXcgRGF0ZShIbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6UmVbZHJdW0duXT1uZXcgRGF0ZSg4NjRlNSooSG4ucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStIbi5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''KTticmVhaztjYXNlIlkiOlJlW2RyXVtHbl09SG4ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6UmVbZHJdW0duXT0tSG4ucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoYnQmJjg9PXp0W0duXS5sZW4pe1JlW2RyXVtHbl09SG4ucmVhZF9zaGlmdCg4LCJm''@;'; put 'put ''Iik7YnJlYWt9Y2FzZSJHIjpjYXNlIlAiOkhuLmwrPXp0W0duXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT16dFtHbl0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK3p0W0duXS50eXBlKX19ZWxzZSBW''@;'; put 'put ''ZS5sKz1TdDtpZigyIT1HZSYmVmUubDxWZS5sZW5ndGgmJjI2IT1WZVtWZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhWZS5sLTEpKyIgb2YgIitWZS5sZW5ndGgrIiAiK1ZlW1ZlLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gRGUmJkRlLnNoZWV0''@;'; put 'put ''Um93cyYmKFJlPVJlLnNsaWNlKDAsRGUuc2hlZXRSb3dzKSksUmV9KGRlLFJlKSxSZSl9dmFyIGxlPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dmVyc2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVdLHRvX3dvcmtib29rOmZ1bmN0aW9uIGVlKGRlLERlKXt0''@;'; put 'put ''cnl7cmV0dXJuIGVoKFcoZGUsRGUpLERlKX1jYXRjaChSZSl7aWYoRGUmJkRlLldURil0aHJvdyBSZX1yZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSx0b19zaGVldDpXLGZyb21fc2hlZXQ6ZnVuY3Rpb24gb2UoZGUsRGUpe3ZhciBSZT1EZXx8e307aWYoK1JlLmNvZGVwYWdlPj0w''@;'; put 'put ''JiZGKCtSZS5jb2RlcGFnZSksInN0cmluZyI9PVJlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBWZT1DdCgpLEdlPVM5KGRlLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksZXQ9R2VbMF0sYnQ9R2Uuc2xpY2UoMSksSmU9''@;'; put 'put ''MCxmdD0wLFJ0PTAsU3Q9MTtmb3IoSmU9MDtKZTxldC5sZW5ndGg7KytKZSlpZihudWxsIT1KZSl7aWYoKytSdCwibnVtYmVyIj09dHlwZW9mIGV0W0plXSYmKGV0W0plXT1ldFtKZV0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIGV0W0plXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJ''@;'; put 'put ''bnZhbGlkIGNvbHVtbiBuYW1lICIrZXRbSmVdKyIgfCIrdHlwZW9mIGV0W0plXSsifCIpO2lmKGV0LmluZGV4T2YoZXRbSmVdKSE9PUplKWZvcihmdD0wO2Z0PDEwMjQ7KytmdClpZigtMT09ZXQuaW5kZXhPZihldFtKZV0rIl8iK2Z0KSl7ZXRbSmVdKz0iXyIrZnQ7YnJlYWt9fXZhciBBdD1T''@;'; put 'put ''YShkZVsiIXJlZiJdKSx6dD1bXTtmb3IoSmU9MDtKZTw9QXQuZS5jLUF0LnMuYzsrK0plKXt2YXIgU249W107Zm9yKGZ0PTA7ZnQ8YnQubGVuZ3RoOysrZnQpbnVsbCE9YnRbZnRdW0plXSYmU24ucHVzaChidFtmdF1bSmVdKTtpZigwIT1Tbi5sZW5ndGgmJm51bGwhPWV0W0plXSl7dmFyIGxy''@;'; put 'put ''PSIiLG1uPSIiO2ZvcihmdD0wO2Z0PFNuLmxlbmd0aDsrK2Z0KXtzd2l0Y2godHlwZW9mIFNuW2Z0XSl7Y2FzZSJudW1iZXIiOm1uPSJCIjticmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDptbj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjptbj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOm1uPVNu''@;'; put 'put ''W2Z0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KGxyPWxyJiZsciE9bW4/IkMiOm1uKSlicmVha31TdCs9bGVbbHJdfHwwLHp0W0plXT1scn1lbHNlIHp0W0plXT0iPyJ9dmFyIGRyPVZlLm5leHQoMzIpO2Zvcihkci53cml0ZV9zaGlmdCg0LDMxODkwMjU3NiksZHIud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxidC5sZW5ndGgpLGRyLndyaXRlX3NoaWZ0KDIsMjk2KzMyKlJ0KSxkci53cml0ZV9zaGlmdCgyLFN0KSxKZT0wO0plPDQ7KytKZSlkci53cml0ZV9zaGlmdCg0LDApO2Zvcihkci53cml0ZV9zaGlmdCg0LCgreFtBXXx8Myk8PDgpLEplPTAsZnQ9MDtKZTxldC5sZW5ndGg7KytK''@;'; put 'put ''ZSlpZihudWxsIT1ldFtKZV0pe3ZhciBHbj1WZS5uZXh0KDMyKSxIbj0oZXRbSmVdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiKS5zbGljZSgwLDExKTtHbi53cml0ZV9zaGlmdCgxLEhuLCJzYmNzIiksR24ud3JpdGVfc2hpZnQoMSwiPyI9PXp0W0plXT8iQyI6enRbSmVd''@;'; put 'put ''LCJzYmNzIiksR24ud3JpdGVfc2hpZnQoNCxmdCksR24ud3JpdGVfc2hpZnQoMSxsZVt6dFtKZV1dfHwwKSxHbi53cml0ZV9zaGlmdCgxLDApLEduLndyaXRlX3NoaWZ0KDEsMiksR24ud3JpdGVfc2hpZnQoNCwwKSxHbi53cml0ZV9zaGlmdCgxLDApLEduLndyaXRlX3NoaWZ0KDQsMCksR24u''@;'; put 'put ''d3JpdGVfc2hpZnQoNCwwKSxmdCs9bGVbenRbSmVdXXx8MH12YXIgaHI9VmUubmV4dCgyNjQpO2Zvcihoci53cml0ZV9zaGlmdCg0LDEzKSxKZT0wO0plPDY1OysrSmUpaHIud3JpdGVfc2hpZnQoNCwwKTtmb3IoSmU9MDtKZTxidC5sZW5ndGg7KytKZSl7dmFyIE5uPVZlLm5leHQoU3QpO2Zv''@;'; put 'put ''cihObi53cml0ZV9zaGlmdCgxLDApLGZ0PTA7ZnQ8ZXQubGVuZ3RoOysrZnQpaWYobnVsbCE9ZXRbZnRdKXN3aXRjaCh6dFtmdF0pe2Nhc2UiTCI6Tm4ud3JpdGVfc2hpZnQoMSxudWxsPT1idFtKZV1bZnRdPzYzOmJ0W0plXVtmdF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6Tm4ud3JpdGVfc2hp''@;'; put 'put ''ZnQoOCxidFtKZV1bZnRdfHwwLCJmIik7YnJlYWs7Y2FzZSJEIjpidFtKZV1bZnRdPyhObi53cml0ZV9zaGlmdCg0LCgiMDAwMCIrYnRbSmVdW2Z0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSxObi53cml0ZV9zaGlmdCgyLCgiMDAiKyhidFtKZV1bZnRdLmdldE1vbnRoKCkr''@;'; put 'put ''MSkpLnNsaWNlKC0yKSwic2JjcyIpLE5uLndyaXRlX3NoaWZ0KDIsKCIwMCIrYnRbSmVdW2Z0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpObi53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciB0cj1TdHJpbmcoYnRbSmVdW2Z0XXx8IiIp''@;'; put 'put ''O2ZvcihObi53cml0ZV9zaGlmdCgxLHRyLCJzYmNzIiksUnQ9MDtSdDwyNTAtdHIubGVuZ3RoOysrUnQpTm4ud3JpdGVfc2hpZnQoMSwzMil9fXJldHVybiBWZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLFZlLmVuZCgpfX19KCksa3U9ZnVuY3Rpb24oKXt2YXIgZz17QUE6Ilx4YzAiLEJB''@;'; put 'put ''OiJceGMxIixDQToiXHhjMiIsREE6MTk1LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2IiLEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4''@;'; put 'put ''ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcsSGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhl''@;'; put 'put ''ZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixCbzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixDdToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIw''@;'; put 'put ''OSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2''@;'; put 'put ''NSwiJyI6MTY3LCJIICI6MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LHg9bmV3IFJlZ0V4cCgiXHgxYk4oIit4ZShnKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQx''@;'; put 'put ''IikrInxcXHwpIiwiZ20iKSx3PWZ1bmN0aW9uKEdlLGV0KXt2YXIgYnQ9Z1tldF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBidD9YKGJ0KTpidH0sVj1mdW5jdGlvbihHZSxldCxidCl7dmFyIEplPWV0LmNoYXJDb2RlQXQoMCktMzI8PDR8YnQuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9''@;'; put 'put ''PUplP0dlOlgoSmUpfTtmdW5jdGlvbiBlZShHZSxldCl7dmFyIGhyLGJ0PUdlLnNwbGl0KC9bXG5ccl0rLyksSmU9LTEsZnQ9LTEsUnQ9MCxTdD0wLEF0PVtdLHp0PVtdLFNuPW51bGwsbHI9e30sbW49W10sZHI9W10sR249W10sSG49MDtmb3IoK2V0LmNvZGVwYWdlPj0wJiZGKCtldC5jb2Rl''@;'; put 'put ''cGFnZSk7UnQhPT1idC5sZW5ndGg7KytSdCl7SG49MDt2YXIgUGksTm49YnRbUnRdLnRyaW0oKS5yZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNGXSkvZyxWKS5yZXBsYWNlKHgsdyksdHI9Tm4ucmVwbGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbiha''@;'; put 'put ''aSl7cmV0dXJuIFppLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtpZihObi5sZW5ndGg+MClzd2l0Y2godHJbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PXRyWzFdLmNoYXJBdCgwKSYmenQucHVzaChObi5zbGljZSgzKS5y''@;'; put 'put ''ZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIHFpPSExLHRhPSExLElpPSExLFNyPSExLEZuPS0xLExyPS0xO2ZvcihTdD0xO1N0PHRyLmxlbmd0aDsrK1N0KXN3aXRjaCh0cltTdF0uY2hhckF0KDApKXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpmdD1wYXJzZUlu''@;'; put 'put ''dCh0cltTdF0uc2xpY2UoMSkpLTEsdGE9ITA7YnJlYWs7Y2FzZSJZIjpmb3IoSmU9cGFyc2VJbnQodHJbU3RdLnNsaWNlKDEpKS0xLHRhfHwoZnQ9MCksaHI9QXQubGVuZ3RoO2hyPD1KZTsrK2hyKUF0W2hyXT1bXTticmVhaztjYXNlIksiOiciJz09PShQaT10cltTdF0uc2xpY2UoMSkpLmNo''@;'; put 'put ''YXJBdCgwKT9QaT1QaS5zbGljZSgxLFBpLmxlbmd0aC0xKToiVFJVRSI9PT1QaT9QaT0hMDoiRkFMU0UiPT09UGk/UGk9ITE6aXNOYU4oWHQoUGkpKT9pc05hTihRdChQaSkuZ2V0RGF0ZSgpKXx8KFBpPUxlKFBpKSk6KFBpPVh0KFBpKSxudWxsIT09U24mJmIuaXNfZGF0ZShTbikmJihQaT1x''@;'; put 'put ''dChQaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10eXBlb2YgUGkmJiJzdHJpbmciIT0oZXR8fHt9KS50eXBlJiYoZXR8fHt9KS5jb2RlcGFnZSYmKFBpPWNwdGFibGUudXRpbHMuZGVjb2RlKGV0LmNvZGVwYWdlLFBpKSkscWk9ITA7YnJlYWs7Y2FzZSJFIjpTcj0hMDt2YXIg''@;'; put 'put ''cHI9RHUodHJbU3RdLnNsaWNlKDEpLHtyOkplLGM6ZnR9KTtBdFtKZV1bZnRdPVtBdFtKZV1bZnRdLHByXTticmVhaztjYXNlIlMiOklpPSEwLEF0W0plXVtmdF09W0F0W0plXVtmdF0sIlM1UyJdO2JyZWFrO2Nhc2UiUiI6Rm49cGFyc2VJbnQodHJbU3RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nh''@;'; put 'put ''c2UiQyI6THI9cGFyc2VJbnQodHJbU3RdLnNsaWNlKDEpKS0xO2JyZWFrO2RlZmF1bHQ6aWYoZXQmJmV0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK05uKX1pZihxaSYmKEF0W0plXVtmdF0mJjI9PUF0W0plXVtmdF0ubGVuZ3RoP0F0W0plXVtmdF1bMF09UGk6QXRb''@;'; put 'put ''SmVdW2Z0XT1QaSxTbj1udWxsKSxJaSl7aWYoU3IpdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIExuPUZuPi0xJiZBdFtGbl1bTHJdO2lmKCFMbnx8IUxuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9y''@;'; put 'put ''bXVsYSBjYW5ub3QgZmluZCBiYXNlIik7QXRbSmVdW2Z0XVsxXT1VUihMblsxXSx7cjpKZS1GbixjOmZ0LUxyfSl9YnJlYWs7Y2FzZSJGIjp2YXIgUHI9MDtmb3IoU3Q9MTtTdDx0ci5sZW5ndGg7KytTdClzd2l0Y2godHJbU3RdLmNoYXJBdCgwKSl7Y2FzZSJYIjpmdD1wYXJzZUludCh0cltT''@;'; put 'put ''dF0uc2xpY2UoMSkpLTEsKytQcjticmVhaztjYXNlIlkiOmZvcihKZT1wYXJzZUludCh0cltTdF0uc2xpY2UoMSkpLTEsaHI9QXQubGVuZ3RoO2hyPD1KZTsrK2hyKUF0W2hyXT1bXTticmVhaztjYXNlIk0iOkhuPXBhcnNlSW50KHRyW1N0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpj''@;'; put 'put ''YXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6U249enRbcGFyc2VJbnQodHJbU3RdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3IoR249dHJbU3RdLnNsaWNlKDEpLnNwbGl0KCIgIiksaHI9cGFyc2VJbnQoR25bMF0sMTApO2hyPD1wYXJzZUludChHblsx''@;'; put 'put ''XSwxMCk7KytocilIbj1wYXJzZUludChHblsyXSwxMCksZHJbaHItMV09MD09PUhuP3toaWRkZW46ITB9Ont3Y2g6SG59LG0xKGRyW2hyLTFdKTticmVhaztjYXNlIkMiOmRyW2Z0PXBhcnNlSW50KHRyW1N0XS5zbGljZSgxKSktMV18fChkcltmdF09e30pO2JyZWFrO2Nhc2UiUiI6bW5bSmU9''@;'; put 'put ''cGFyc2VJbnQodHJbU3RdLnNsaWNlKDEpKS0xXXx8KG1uW0plXT17fSksSG4+MD8obW5bSmVdLmhwdD1IbixtbltKZV0uaHB4PWxoKEhuKSk6MD09PUhuJiYobW5bSmVdLmhpZGRlbj0hMCk7YnJlYWs7ZGVmYXVsdDppZihldCYmZXQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVj''@;'; put 'put ''b3JkICIrTm4pfVByPDEmJihTbj1udWxsKTticmVhaztkZWZhdWx0OmlmKGV0JiZldC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIitObil9fXJldHVybiBtbi5sZW5ndGg+MCYmKGxyWyIhcm93cyJdPW1uKSxkci5sZW5ndGg+MCYmKGxyWyIhY29scyJdPWRyKSxldCYm''@;'; put 'put ''ZXQuc2hlZXRSb3dzJiYoQXQ9QXQuc2xpY2UoMCxldC5zaGVldFJvd3MpKSxbQXQsbHJdfWZ1bmN0aW9uIGxlKEdlLGV0KXt2YXIgYnQ9ZnVuY3Rpb24gVyhHZSxldCl7c3dpdGNoKGV0LnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gZWUoaGUuZGVjb2RlKEdlKSxldCk7Y2FzZSJiaW5hcnki''@;'; put 'put ''OnJldHVybiBlZShHZSxldCk7Y2FzZSJidWZmZXIiOnJldHVybiBlZShHZS50b1N0cmluZygiYmluYXJ5IiksZXQpO2Nhc2UiYXJyYXkiOnJldHVybiBlZShudChHZSksZXQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitldC50eXBlKX0oR2UsZXQpLGZ0PWJ0WzFdLFJ0''@;'; put 'put ''PVEyKGJ0WzBdLGV0KTtyZXR1cm4geGUoZnQpLmZvckVhY2goZnVuY3Rpb24oU3Qpe1J0W1N0XT1mdFtTdF19KSxSdH1mdW5jdGlvbiBkZShHZSxldCxidCxKZSl7dmFyIGZ0PSJDO1kiKyhidCsxKSsiO1giKyhKZSsxKSsiO0siO3N3aXRjaChHZS50KXtjYXNlIm4iOmZ0Kz1HZS52fHwwLEdl''@;'; put 'put ''LmYmJiFHZS5GJiYoZnQrPSI7RSIra20oR2UuZix7cjpidCxjOkplfSkpO2JyZWFrO2Nhc2UiYiI6ZnQrPUdlLnY/IlRSVUUiOiJGQUxTRSI7YnJlYWs7Y2FzZSJlIjpmdCs9R2Uud3x8R2UudjticmVhaztjYXNlImQiOmZ0Kz0nIicrKEdlLnd8fEdlLnYpKyciJzticmVhaztjYXNlInMiOmZ0''@;'; put 'put ''Kz0nIicrR2Uudi5yZXBsYWNlKC8iL2csIiIpKyciJ31yZXR1cm4gZnR9cmV0dXJuIGdbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIG9lKEdlLGV0KXtyZXR1cm4gZWgobGUoR2UsZXQpLGV0KX0sdG9fc2hlZXQ6bGUsZnJvbV9zaGVldDpmdW5jdGlvbiBWZShHZSxldCl7dmFyIFJ0''@;'; put 'put ''LGJ0PVsiSUQ7UFNoZWV0SlM7TjtFIl0sSmU9W10sZnQ9U2EoR2VbIiFyZWYiXSksU3Q9QXJyYXkuaXNBcnJheShHZSksQXQ9IlxyXG4iO2J0LnB1c2goIlA7UEdlbmVyYWwiKSxidC5wdXNoKCJGO1AwO0RHMEc4O00yNTUiKSxHZVsiIWNvbHMiXSYmZnVuY3Rpb24gRGUoR2UsZXQpe2V0LmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oYnQsSmUpe3ZhciBmdD0iRjtXIisoSmUrMSkrIiAiKyhKZSsxKSsiICI7YnQuaGlkZGVuP2Z0Kz0iMCI6KCJudW1iZXIiPT10eXBlb2YgYnQud2lkdGgmJiFidC53cHgmJihidC53cHg9S2woYnQud2lkdGgpKSwibnVtYmVyIj09dHlwZW9mIGJ0LndweCYmIWJ0Lndj''@;'; put 'put ''aCYmKGJ0LndjaD14NyhidC53cHgpKSwibnVtYmVyIj09dHlwZW9mIGJ0LndjaCYmKGZ0Kz1NYXRoLnJvdW5kKGJ0LndjaCkpKSwiICIhPWZ0LmNoYXJBdChmdC5sZW5ndGgtMSkmJkdlLnB1c2goZnQpfSl9KGJ0LEdlWyIhY29scyJdKSxHZVsiIXJvd3MiXSYmZnVuY3Rpb24gUmUoR2UsZXQp''@;'; put 'put ''e2V0LmZvckVhY2goZnVuY3Rpb24oYnQsSmUpe3ZhciBmdD0iRjsiO2J0LmhpZGRlbj9mdCs9Ik0wOyI6YnQuaHB0P2Z0Kz0iTSIrMjAqYnQuaHB0KyI7IjpidC5ocHgmJihmdCs9Ik0iKzIwKkUzKGJ0LmhweCkrIjsiKSxmdC5sZW5ndGg+MiYmR2UucHVzaChmdCsiUiIrKEplKzEpKX0pfShi''@;'; put 'put ''dCxHZVsiIXJvd3MiXSksYnQucHVzaCgiQjtZIisoZnQuZS5yLWZ0LnMucisxKSsiO1giKyhmdC5lLmMtZnQucy5jKzEpKyI7RCIrW2Z0LnMuYyxmdC5zLnIsZnQuZS5jLGZ0LmUucl0uam9pbigiICIpKTtmb3IodmFyIHp0PWZ0LnMucjt6dDw9ZnQuZS5yOysrenQpZm9yKHZhciBTbj1mdC5z''@;'; put 'put ''LmM7U248PWZ0LmUuYzsrK1NuKXt2YXIgbHI9S3Ioe3I6enQsYzpTbn0pOyhSdD1TdD8oR2VbenRdfHxbXSlbU25dOkdlW2xyXSkmJihudWxsIT1SdC52fHxSdC5mJiYhUnQuRikmJkplLnB1c2goZGUoUnQsMCx6dCxTbikpfXJldHVybiBidC5qb2luKEF0KStBdCtKZS5qb2luKEF0KStBdCsi''@;'; put 'put ''RSIrQXR9fX0oKSx4Mz1mdW5jdGlvbigpe2Z1bmN0aW9uIHgoZWUsbGUpe2Zvcih2YXIgb2U9ZWUuc3BsaXQoIlxuIiksZGU9LTEsRGU9LTEsUmU9MCxWZT1bXTtSZSE9PW9lLmxlbmd0aDsrK1JlKWlmKCJCT1QiIT09b2VbUmVdLnRyaW0oKSl7aWYoIShkZTwwKSl7Zm9yKHZhciBHZT1vZVtS''@;'; put 'put ''ZV0udHJpbSgpLnNwbGl0KCIsIiksZXQ9R2VbMF0sYnQ9R2VbMV0sSmU9b2VbKytSZV18fCIiOzEmKEplLm1hdGNoKC9bIl0vZyl8fFtdKS5sZW5ndGgmJlJlPG9lLmxlbmd0aC0xOylKZSs9IlxuIitvZVsrK1JlXTtzd2l0Y2goSmU9SmUudHJpbSgpLCtldCl7Y2FzZS0xOmlmKCJCT1QiPT09''@;'; put 'put ''SmUpe1ZlWysrZGVdPVtdLERlPTA7Y29udGludWV9aWYoIkVPRCIhPT1KZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBESUYgc3BlY2lhbCBjb21tYW5kICIrSmUpO2JyZWFrO2Nhc2UgMDpWZVtkZV1bRGVdPSJUUlVFIj09PUplfHwiRkFMU0UiIT09SmUmJihpc05hTihYdChidCkp''@;'; put 'put ''P2lzTmFOKFF0KGJ0KS5nZXREYXRlKCkpP2J0OkxlKGJ0KTpYdChidCkpLCsrRGU7YnJlYWs7Y2FzZSAxOihKZT0oSmU9SmUuc2xpY2UoMSxKZS5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJkplLm1hdGNoKC9ePSIuKiIkLykmJihKZT1KZS5zbGljZSgyLC0xKSksVmVbZGVdW0Rl''@;'; put 'put ''KytdPSIiIT09SmU/SmU6bnVsbH1pZigiRU9EIj09PUplKWJyZWFrfX1lbHNlIFZlWysrZGVdPVtdLERlPTA7cmV0dXJuIGxlJiZsZS5zaGVldFJvd3MmJihWZT1WZS5zbGljZSgwLGxlLnNoZWV0Um93cykpLFZlfWZ1bmN0aW9uIHcoZWUsbGUpe3JldHVybiBRMihmdW5jdGlvbiBnKGVlLGxl''@;'; put 'put ''KXtzd2l0Y2gobGUudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiB4KGhlLmRlY29kZShlZSksbGUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4geChlZSxsZSk7Y2FzZSJidWZmZXIiOnJldHVybiB4KGVlLnRvU3RyaW5nKCJiaW5hcnkiKSxsZSk7Y2FzZSJhcnJheSI6cmV0dXJuIHgobnQoZWUpLGxl''@;'; put 'put ''KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrbGUudHlwZSl9KGVlLGxlKSxsZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFYoZWUsbGUpe3JldHVybiBlaCh3KGVlLGxlKSxsZSl9LHRvX3NoZWV0OncsZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBlZT1mdW5j''@;'; put 'put ''dGlvbihkZSxEZSxSZSxWZSxHZSl7ZGUucHVzaChEZSksZGUucHVzaChSZSsiLCIrVmUpLGRlLnB1c2goJyInK0dlLnJlcGxhY2UoLyIvZywnIiInKSsnIicpfSxsZT1mdW5jdGlvbihkZSxEZSxSZSxWZSl7ZGUucHVzaChEZSsiLCIrUmUpLGRlLnB1c2goMT09RGU/JyInK1ZlLnJlcGxhY2Uo''@;'; put 'put ''LyIvZywnIiInKSsnIic6VmUpfTtyZXR1cm4gZnVuY3Rpb24oZGUpe3ZhciBWZSxEZT1bXSxSZT1TYShkZVsiIXJlZiJdKSxHZT1BcnJheS5pc0FycmF5KGRlKTtlZShEZSwiVEFCTEUiLDAsMSwic2hlZXRqcyIpLGVlKERlLCJWRUNUT1JTIiwwLFJlLmUuci1SZS5zLnIrMSwiIiksZWUoRGUs''@;'; put 'put ''IlRVUExFUyIsMCxSZS5lLmMtUmUucy5jKzEsIiIpLGVlKERlLCJEQVRBIiwwLDAsIiIpO2Zvcih2YXIgZXQ9UmUucy5yO2V0PD1SZS5lLnI7KytldCl7bGUoRGUsLTEsMCwiQk9UIik7Zm9yKHZhciBidD1SZS5zLmM7YnQ8PVJlLmUuYzsrK2J0KXt2YXIgSmU9S3Ioe3I6ZXQsYzpidH0pO2lm''@;'; put 'put ''KFZlPUdlPyhkZVtldF18fFtdKVtidF06ZGVbSmVdKXN3aXRjaChWZS50KXtjYXNlIm4iOnZhciBmdD1WZS53OyFmdCYmbnVsbCE9VmUudiYmKGZ0PVZlLnYpLG51bGw9PWZ0P2xlKERlLDEsMCxWZS5mJiYhVmUuRj8iPSIrVmUuZjoiIik6bGUoRGUsMCxmdCwiViIpO2JyZWFrO2Nhc2UiYiI6''@;'; put 'put ''bGUoRGUsMCxWZS52PzE6MCxWZS52PyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlInMiOmxlKERlLDEsMCxpc05hTihWZS52KT9WZS52Oic9IicrVmUudisnIicpO2JyZWFrO2Nhc2UiZCI6VmUud3x8KFZlLnc9Yi5mb3JtYXQoVmUuenx8Yi5fdGFibGVbMTRdLFllKExlKFZlLnYpKSkpLGxl''@;'; put 'put ''KERlLDAsVmUudywiViIpO2JyZWFrO2RlZmF1bHQ6bGUoRGUsMSwwLCIiKX1lbHNlIGxlKERlLDEsMCwiIil9fXJldHVybiBsZShEZSwtMSwwLCJFT0QiKSxEZS5qb2luKCJcclxuIil9fSgpfX0oKSxkbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGcoVmUpe3JldHVybiBWZS5yZXBsYWNlKC9cXGIv''@;'; put 'put ''ZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIHgoVmUpe3JldHVybiBWZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIFYoVmUsR2Upe3JldHVybiBRMihm''@;'; put 'put ''dW5jdGlvbiB3KFZlLEdlKXtmb3IodmFyIGV0PVZlLnNwbGl0KCJcbiIpLGJ0PS0xLEplPS0xLGZ0PTAsUnQ9W107ZnQhPT1ldC5sZW5ndGg7KytmdCl7dmFyIFN0PWV0W2Z0XS50cmltKCkuc3BsaXQoIjoiKTtpZigiY2VsbCI9PT1TdFswXSl7dmFyIEF0PXhhKFN0WzFdKTtpZihSdC5sZW5n''@;'; put 'put ''dGg8PUF0LnIpZm9yKGJ0PVJ0Lmxlbmd0aDtidDw9QXQucjsrK2J0KVJ0W2J0XXx8KFJ0W2J0XT1bXSk7c3dpdGNoKGJ0PUF0LnIsSmU9QXQuYyxTdFsyXSl7Y2FzZSJ0IjpSdFtidF1bSmVdPWcoU3RbM10pO2JyZWFrO2Nhc2UidiI6UnRbYnRdW0plXT0rU3RbM107YnJlYWs7Y2FzZSJ2dGYi''@;'; put 'put ''OnZhciB6dD1TdFtTdC5sZW5ndGgtMV07Y2FzZSJ2dGMiOlJ0W2J0XVtKZV09Im5sIj09PVN0WzNdPyEhK1N0WzRdOitTdFs0XSwidnRmIj09U3RbMl0mJihSdFtidF1bSmVdPVtSdFtidF1bSmVdLHp0XSl9fX1yZXR1cm4gR2UmJkdlLnNoZWV0Um93cyYmKFJ0PVJ0LnNsaWNlKDAsR2Uuc2hl''@;'; put 'put ''ZXRSb3dzKSksUnR9KFZlLEdlKSxHZSl9dmFyIGVlPVsic29jaWFsY2FsYzp2ZXJzaW9uOjEuNSIsIk1JTUUtVmVyc2lvbjogMS4wIiwiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIl0uam9pbigiXG4iKSxs''@;'; put 'put ''ZT1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsb2U9WyIjIFNvY2lhbENhbGMgU3ByZWFkc2hlZXQgQ29udHJvbCBTYXZlIiwicGFydDpzaGVldCJdLmpvaW4oIlxu''@;'; put 'put ''IiksZGU9Ii0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUtLSI7ZnVuY3Rpb24gRGUoVmUpe2lmKCFWZXx8IVZlWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciBidCxHZT1bXSxldD1bXSxKZT0iIixmdD13cihWZVsiIXJlZiJdKSxSdD1BcnJheS5pc0FycmF5KFZlKSxTdD1mdC5z''@;'; put 'put ''LnI7U3Q8PWZ0LmUucjsrK1N0KWZvcih2YXIgQXQ9ZnQucy5jO0F0PD1mdC5lLmM7KytBdClpZihKZT1Lcih7cjpTdCxjOkF0fSksKGJ0PVJ0PyhWZVtTdF18fFtdKVtBdF06VmVbSmVdKSYmbnVsbCE9YnQudiYmInoiIT09YnQudCl7c3dpdGNoKGV0PVsiY2VsbCIsSmUsInQiXSxidC50KXtj''@;'; put 'put ''YXNlInMiOmNhc2Uic3RyIjpldC5wdXNoKHgoYnQudikpO2JyZWFrO2Nhc2UibiI6YnQuZj8oZXRbMl09InZ0ZiIsZXRbM109Im4iLGV0WzRdPWJ0LnYsZXRbNV09eChidC5mKSk6KGV0WzJdPSJ2IixldFszXT1idC52KTticmVhaztjYXNlImIiOmV0WzJdPSJ2dCIrKGJ0LmY/ImYiOiJjIiks''@;'; put 'put ''ZXRbM109Im5sIixldFs0XT1idC52PyIxIjoiMCIsZXRbNV09eChidC5mfHwoYnQudj8iVFJVRSI6IkZBTFNFIikpO2JyZWFrO2Nhc2UiZCI6dmFyIHp0PVllKExlKGJ0LnYpKTtldFsyXT0idnRjIixldFszXT0ibmQiLGV0WzRdPSIiK3p0LGV0WzVdPWJ0Lnd8fGIuZm9ybWF0KGJ0Lnp8fGIu''@;'; put 'put ''X3RhYmxlWzE0XSx6dCk7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX1HZS5wdXNoKGV0LmpvaW4oIjoiKSl9cmV0dXJuIEdlLnB1c2goInNoZWV0OmM6IisoZnQuZS5jLWZ0LnMuYysxKSsiOnI6IisoZnQuZS5yLWZ0LnMucisxKSsiOnR2ZjoxIiksR2UucHVzaCgidmFsdWVmb3JtYXQ6MTp0ZXh0''@;'; put 'put ''LXdpa2kiKSxHZS5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBXKFZlLEdlKXtyZXR1cm4gZWgoVihWZSxHZSksR2UpfSx0b19zaGVldDpWLGZyb21fc2hlZXQ6ZnVuY3Rpb24gUmUoVmUpe3JldHVybltlZSxsZSxvZSxsZSxEZShWZSksZGVdLmpvaW4oIlxuIil9fX0o''@;'; put 'put ''KSxMZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGcoUmUsVmUsR2UsZXQsYnQpe2J0LnJhdz9WZVtHZV1bZXRdPVJlOiIiPT09UmV8fChWZVtHZV1bZXRdPVhyKFJlLGJ0KT9YcihSZSxidCkudjpSZSl9dmFyIHc9ezQ0OiIsIiw5OiJcdCIsNTk6IjsifSxWPXs0NDozLDk6Miw1OToxfTtmdW5jdGlv''@;'; put 'put ''biBXKFJlKXtmb3IodmFyIFZlPXt9LEdlPSExLGV0PTAsYnQ9MDtldDxSZS5sZW5ndGg7KytldCkzND09KGJ0PVJlLmNoYXJDb2RlQXQoZXQpKT9HZT0hR2U6IUdlJiZidCBpbiB3JiYoVmVbYnRdPShWZVtidF18fDApKzEpO2ZvcihldCBpbiBidD1bXSxWZSlPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoVmUsZXQpJiZidC5wdXNoKFtWZVtldF0sZXRdKTtpZighYnQubGVuZ3RoKWZvcihldCBpbiBWZT1WKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWZSxldCkmJmJ0LnB1c2goW1ZlW2V0XSxldF0pO3JldHVybiBidC5zb3J0KGZ1bmN0aW9u''@;'; put 'put ''KEplLGZ0KXtyZXR1cm4gSmVbMF0tZnRbMF18fFZbSmVbMV1dLVZbZnRbMV1dfSksd1tidC5wb3AoKVsxXV19ZnVuY3Rpb24gbGUoUmUsVmUpe3JldHVybiFWZXx8IVZlLlBSTnx8InNlcD0iPT1SZS5zbGljZSgwLDQpfHxSZS5pbmRleE9mKCJcdCIpPj0wfHxSZS5pbmRleE9mKCIsIik+PTB8''@;'; put 'put ''fFJlLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBlZShSZSxWZSl7dmFyIEdlPVZlfHx7fSxldD0iIixidD1HZS5kZW5zZT9bXTp7fSxKZT17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJzZXA9Ij09UmUuc2xpY2UoMCw0KT8xMz09UmUuY2hhckNvZGVBdCg1KSYmMTA9PVJlLmNoYXJDb2Rl''@;'; put 'put ''QXQoNik/KGV0PVJlLmNoYXJBdCg0KSxSZT1SZS5zbGljZSg3KSk6MTM9PVJlLmNoYXJDb2RlQXQoNSl8fDEwPT1SZS5jaGFyQ29kZUF0KDUpPyhldD1SZS5jaGFyQXQoNCksUmU9UmUuc2xpY2UoNikpOmV0PVcoUmUuc2xpY2UoMCwxMDI0KSk6ZXQ9VyhSZS5zbGljZSgwLDEwMjQpKTt2YXIg''@;'; put 'put ''ZnQ9MCxSdD0wLFN0PTAsQXQ9MCx6dD0wLFNuPWV0LmNoYXJDb2RlQXQoMCksbHI9ITEsbW49MCxkcj1SZS5jaGFyQ29kZUF0KDApO1JlPVJlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIEduPW51bGwhPUdlLmRhdGVORj9mdW5jdGlvbiBQZShnKXt2YXIgeD0ibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGc/Yi5fdGFibGVbZ106ZztyZXR1cm4geD14LnJlcGxhY2UocGUsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK3grIiQiKX0oR2UuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIEhuKCl7dmFyIGhyPVJlLnNsaWNlKEF0LHp0KSxObj17fTtpZignIic9PWhyLmNoYXJBdCgwKSYmJyInPT1oci5jaGFy''@;'; put 'put ''QXQoaHIubGVuZ3RoLTEpJiYoaHI9aHIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09aHIubGVuZ3RoKU5uLnQ9InoiO2Vsc2UgaWYoR2UucmF3KU5uLnQ9InMiLE5uLnY9aHI7ZWxzZSBpZigwPT09aHIudHJpbSgpLmxlbmd0aClObi50PSJzIixObi52PWhyO2Vsc2UgaWYo''@;'; put 'put ''NjE9PWhyLmNoYXJDb2RlQXQoMCkpMzQ9PWhyLmNoYXJDb2RlQXQoMSkmJjM0PT1oci5jaGFyQ29kZUF0KGhyLmxlbmd0aC0xKT8oTm4udD0icyIsTm4udj1oci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIHN4KGcpe3JldHVybiAxIT1nLmxlbmd0aH0oaHIpPyhO''@;'; put 'put ''bi50PSJuIixObi5mPWhyLnNsaWNlKDEpKTooTm4udD0icyIsTm4udj1ocik7ZWxzZSBpZigiVFJVRSI9PWhyKU5uLnQ9ImIiLE5uLnY9ITA7ZWxzZSBpZigiRkFMU0UiPT1ocilObi50PSJiIixObi52PSExO2Vsc2UgaWYoaXNOYU4oU3Q9WHQoaHIpKSlpZighaXNOYU4oUXQoaHIpLmdldERh''@;'; put 'put ''dGUoKSl8fEduJiZoci5tYXRjaChHbikpe05uLno9R2UuZGF0ZU5GfHxiLl90YWJsZVsxNF07dmFyIHRyPTA7R24mJmhyLm1hdGNoKEduKSYmKGhyPWZ1bmN0aW9uIFplKGcseCx3KXt2YXIgVj0tMSxXPS0xLGVlPS0xLGxlPS0xLG9lPS0xLGRlPS0xOyh4Lm1hdGNoKHBlKXx8W10pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oVmUsR2Upe3ZhciBldD1wYXJzZUludCh3W0dlKzFdLDEwKTtzd2l0Y2goVmUudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkpe2Nhc2UieSI6Vj1ldDticmVhaztjYXNlImQiOmVlPWV0O2JyZWFrO2Nhc2UiaCI6bGU9ZXQ7YnJlYWs7Y2FzZSJzIjpkZT1ldDticmVhaztjYXNl''@;'; put 'put ''Im0iOmxlPj0wP29lPWV0Olc9ZXR9fSksZGU+PTAmJi0xPT1vZSYmVz49MCYmKG9lPVcsVz0tMSk7dmFyIERlPSgiIisoVj49MD9WOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNlKC00KSsiLSIrKCIwMCIrKFc+PTE/VzoxKSkuc2xpY2UoLTIpKyItIisoIjAwIisoZWU+PTE/ZWU6''@;'; put 'put ''MSkpLnNsaWNlKC0yKTs3PT1EZS5sZW5ndGgmJihEZT0iMCIrRGUpLDg9PURlLmxlbmd0aCYmKERlPSIyMCIrRGUpO3ZhciBSZT0oIjAwIisobGU+PTA/bGU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKG9lPj0wP29lOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhkZT49MD9kZTowKSkuc2xp''@;'; put 'put ''Y2UoLTIpO3JldHVybi0xPT1sZSYmLTE9PW9lJiYtMT09ZGU/RGU6LTE9PVYmJi0xPT1XJiYtMT09ZWU/UmU6RGUrIlQiK1JlfSgwLEdlLmRhdGVORixoci5tYXRjaChHbil8fFtdKSx0cj0xKSxHZS5jZWxsRGF0ZXM/KE5uLnQ9ImQiLE5uLnY9TGUoaHIsdHIpKTooTm4udD0ibiIsTm4udj1Z''@;'; put 'put ''ZShMZShocix0cikpKSwhMSE9PUdlLmNlbGxUZXh0JiYoTm4udz1iLmZvcm1hdChObi56LE5uLnYgaW5zdGFuY2VvZiBEYXRlP1llKE5uLnYpOk5uLnYpKSxHZS5jZWxsTkZ8fGRlbGV0ZSBObi56fWVsc2UgTm4udD0icyIsTm4udj1ocjtlbHNlIE5uLnQ9Im4iLCExIT09R2UuY2VsbFRleHQm''@;'; put 'put ''JihObi53PWhyKSxObi52PVN0O2lmKCJ6Ij09Tm4udHx8KEdlLmRlbnNlPyhidFtmdF18fChidFtmdF09W10pLGJ0W2Z0XVtSdF09Tm4pOmJ0W0tyKHtjOlJ0LHI6ZnR9KV09Tm4pLGRyPVJlLmNoYXJDb2RlQXQoQXQ9enQrMSksSmUuZS5jPFJ0JiYoSmUuZS5jPVJ0KSxKZS5lLnI8ZnQmJihK''@;'; put 'put ''ZS5lLnI9ZnQpLG1uPT1TbikrK1J0O2Vsc2UgaWYoUnQ9MCwrK2Z0LEdlLnNoZWV0Um93cyYmR2Uuc2hlZXRSb3dzPD1mdClyZXR1cm4hMH1lOmZvcig7enQ8UmUubGVuZ3RoOysrenQpc3dpdGNoKG1uPVJlLmNoYXJDb2RlQXQoenQpKXtjYXNlIDM0OjM0PT09ZHImJihscj0hbHIpO2JyZWFr''@;'; put 'put ''O2Nhc2UgU246Y2FzZSAxMDpjYXNlIDEzOmlmKCFsciYmSG4oKSlicmVhayBlfXJldHVybiB6dC1BdD4wJiZIbigpLGJ0WyIhcmVmIl09SmkoSmUpLGJ0fShSZSxWZSk6UTIoZnVuY3Rpb24geChSZSxWZSl7dmFyIEdlPVZlfHx7fSxldD1bXTtpZighUmV8fDA9PT1SZS5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IGV0O2Zvcih2YXIgYnQ9UmUuc3BsaXQoL1tcclxuXS8pLEplPWJ0Lmxlbmd0aC0xO0plPj0wJiYwPT09YnRbSmVdLmxlbmd0aDspLS1KZTtmb3IodmFyIGZ0PTEwLFJ0PTAsU3Q9MDtTdDw9SmU7KytTdCktMT09KFJ0PWJ0W1N0XS5pbmRleE9mKCIgIikpP1J0PWJ0W1N0XS5sZW5ndGg6UnQr''@;'; put 'put ''KyxmdD1NYXRoLm1heChmdCxSdCk7Zm9yKFN0PTA7U3Q8PUplOysrU3Qpe2V0W1N0XT1bXTt2YXIgQXQ9MDtmb3IoZyhidFtTdF0uc2xpY2UoMCxmdCkudHJpbSgpLGV0LFN0LEF0LEdlKSxBdD0xO0F0PD0oYnRbU3RdLmxlbmd0aC1mdCkvMTArMTsrK0F0KWcoYnRbU3RdLnNsaWNlKGZ0KzEw''@;'; put 'put ''KihBdC0xKSxmdCsxMCpBdCkudHJpbSgpLGV0LFN0LEF0LEdlKX1yZXR1cm4gR2Uuc2hlZXRSb3dzJiYoZXQ9ZXQuc2xpY2UoMCxHZS5zaGVldFJvd3MpKSxldH0oUmUsVmUpLFZlKX1mdW5jdGlvbiBvZShSZSxWZSl7dmFyIEdlPSIiLGV0PSJzdHJpbmciPT1WZS50eXBlP1swLDAsMCwwXTpS''@;'; put 'put ''YihSZSxWZSk7c3dpdGNoKFZlLnR5cGUpe2Nhc2UiYmFzZTY0IjpHZT1oZS5kZWNvZGUoUmUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6R2U9UmU7YnJlYWs7Y2FzZSJidWZmZXIiOkdlPTY1MDAxPT1WZS5jb2RlcGFnZT9SZS50b1N0cmluZygidXRmOCIpOlZlLmNvZGVwYWdl''@;'; put 'put ''JiZ0eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoVmUuY29kZXBhZ2UsUmUpOlJlLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpHZT1udChSZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrVmUudHlw''@;'; put 'put ''ZSl9cmV0dXJuIDIzOT09ZXRbMF0mJjE4Nz09ZXRbMV0mJjE5MT09ZXRbMl0/R2U9Ym8oR2Uuc2xpY2UoMykpOiJiaW5hcnkiPT1WZS50eXBlJiZ0eXBlb2YgY3B0YWJsZTwidSImJlZlLmNvZGVwYWdlJiYoR2U9Y3B0YWJsZS51dGlscy5kZWNvZGUoVmUuY29kZXBhZ2UsY3B0YWJsZS51dGls''@;'; put 'put ''cy5lbmNvZGUoMjg1OTEsR2UpKSksInNvY2lhbGNhbGM6dmVyc2lvbjoiPT1HZS5zbGljZSgwLDE5KT9kbC50b19zaGVldCgic3RyaW5nIj09VmUudHlwZT9HZTpibyhHZSksVmUpOmxlKEdlLFZlKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gZGUoUmUsVmUpe3JldHVybiBlaChvZShS''@;'; put 'put ''ZSxWZSksVmUpfSx0b19zaGVldDpvZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIERlKFJlKXtmb3IodmFyIGV0LFZlPVtdLEdlPVNhKFJlWyIhcmVmIl0pLGJ0PUFycmF5LmlzQXJyYXkoUmUpLEplPUdlLnMucjtKZTw9R2UuZS5yOysrSmUpe2Zvcih2YXIgZnQ9W10sUnQ9R2Uucy5jO1J0PD1HZS5l''@;'; put 'put ''LmM7KytSdCl7dmFyIFN0PUtyKHtyOkplLGM6UnR9KTtpZigoZXQ9YnQ/KFJlW0plXXx8W10pW1J0XTpSZVtTdF0pJiZudWxsIT1ldC52KXtmb3IodmFyIEF0PShldC53fHwobGMoZXQpLGV0LncpfHwiIikuc2xpY2UoMCwxMCk7QXQubGVuZ3RoPDEwOylBdCs9IiAiO2Z0LnB1c2goQXQrKDA9''@;'; put 'put ''PT1SdD8iICI6IiIpKX1lbHNlIGZ0LnB1c2goIiAgICAgICAgICAiKX1WZS5wdXNoKGZ0LmpvaW4oIiIpKX1yZXR1cm4gVmUuam9pbigiXG4iKX19fSgpLEVNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZyhGbixMcixwcil7aWYoRm4pe0dzKEZuLEZuLmx8fDApO2Zvcih2YXIgTG49cHIuRW51bXx8''@;'; put 'put ''SWk7Rm4ubDxGbi5sZW5ndGg7KXt2YXIgUHI9Rm4ucmVhZF9zaGlmdCgyKSxaaT1MbltQcl18fExuWzY1NTM1XSxfaT1Gbi5yZWFkX3NoaWZ0KDIpLHBhPUZuLmwrX2ksYW89WmkuZiYmWmkuZihGbixfaSxwcik7aWYoRm4ubD1wYSxMcihhbyxaaSxQcikpcmV0dXJufX19ZnVuY3Rpb24gdyhG''@;'; put 'put ''bixMcil7aWYoIUZuKXJldHVybiBGbjt2YXIgcHI9THJ8fHt9LExuPXByLmRlbnNlP1tdOnt9LFByPSJTaGVldDEiLFppPTAsX2k9e30scGE9W1ByXSxhbz1bXSxRaT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LERvPXByLnNoZWV0Um93c3x8MDtpZigyPT1GblsyXSlwci5FbnVtPUlpLGco''@;'; put 'put ''Rm4sZnVuY3Rpb24oQmksa2wsT24pe3N3aXRjaChPbil7Y2FzZSAwOnByLnZlcnM9QmksQmk+PTQwOTYmJihwci5xcHJvPSEwKTticmVhaztjYXNlIDY6UWk9Qmk7YnJlYWs7Y2FzZSAxNTpjYXNlIDUxOnByLnFwcm98fChCaVsxXS52PUJpWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAx''@;'; put 'put ''NDpjYXNlIDE2OjE0PT1PbiYmISgxMTImfkJpWzJdKSYmKDE1JkJpWzJdKT4xJiYoMTUmQmlbMl0pPDE1JiYoQmlbMV0uej1wci5kYXRlTkZ8fGIuX3RhYmxlWzE0XSxwci5jZWxsRGF0ZXMmJihCaVsxXS50PSJkIixCaVsxXS52PXF0KEJpWzFdLnYpKSk7dmFyIHdzPXByLmRlbnNlPyhMbltC''@;'; put 'put ''aVswXS5yXXx8W10pW0JpWzBdLmNdOkxuW0tyKEJpWzBdKV07aWYod3Mpe3dzLnQ9QmlbMV0udCx3cy52PUJpWzFdLnYsbnVsbCE9QmlbMV0ueiYmKHdzLno9QmlbMV0ueiksbnVsbCE9QmlbMV0uZiYmKHdzLmY9QmlbMV0uZik7YnJlYWt9cHIuZGVuc2U/KExuW0JpWzBdLnJdfHwoTG5bQmlb''@;'; put 'put ''MF0ucl09W10pLExuW0JpWzBdLnJdW0JpWzBdLmNdPUJpWzFdKTpMbltLcihCaVswXSldPUJpWzFdfX0scHIpO2Vsc2V7aWYoMjYhPUZuWzJdJiYxNCE9Rm5bMl0pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgTE9UVVMgQk9GICIrRm5bMl0pO3ByLkVudW09U3IsMTQ9PUZuWzJdJiYo''@;'; put 'put ''cHIucXBybz0hMCxGbi5sPTApLGcoRm4sZnVuY3Rpb24oQmksa2wsT24pe3N3aXRjaChPbil7Y2FzZSAyMjpCaVsxXS52PUJpWzFdLnYuc2xpY2UoMSk7Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAzNzpjYXNlIDM5OmNhc2UgNDA6aWYoQmlbM10+WmkmJihMblsiIXJlZiJdPUppKFFp''@;'; put 'put ''KSxfaVtQcl09TG4sTG49cHIuZGVuc2U/W106e30sUWk9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxwYS5wdXNoKFByPSJTaGVldCIrKChaaT1CaVszXSkrMSkpKSxEbz4wJiZCaVswXS5yPj1EbylicmVhaztwci5kZW5zZT8oTG5bQmlbMF0ucl18fChMbltCaVswXS5yXT1bXSksTG5bQmlb''@;'; put 'put ''MF0ucl1bQmlbMF0uY109QmlbMV0pOkxuW0tyKEJpWzBdKV09QmlbMV0sUWkuZS5jPEJpWzBdLmMmJihRaS5lLmM9QmlbMF0uYyksUWkuZS5yPEJpWzBdLnImJihRaS5lLnI9QmlbMF0ucik7YnJlYWs7Y2FzZSAyNzpCaVsxNGUzXSYmKGFvW0JpWzE0ZTNdWzBdXT1CaVsxNGUzXVsxXSl9fSxw''@;'; put 'put ''cil9aWYoTG5bIiFyZWYiXT1KaShRaSksX2lbUHJdPUxuLCFhby5sZW5ndGgpcmV0dXJue1NoZWV0TmFtZXM6cGEsU2hlZXRzOl9pfTtmb3IodmFyIGphPXt9LG1vPVtdLGNvPTA7Y288YW8ubGVuZ3RoOysrY28pX2lbcGFbY29dXSYmKG1vLnB1c2goYW9bY29dKSxqYVthb1tjb11dPV9pW3Bh''@;'; put 'put ''W2NvXV0pO3JldHVybntTaGVldE5hbWVzOm1vLFNoZWV0czpqYX19ZnVuY3Rpb24gRGUoRm4sTHIscHIpe3ZhciBMbj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBwci5xcHJvJiYyMDc2OCE9cHIudmVycz8oTG5bMF0uYz1Gbi5yZWFkX3NoaWZ0KDEpLEZuLmwrKyxMblswXS5y''@;'; put 'put ''PUZuLnJlYWRfc2hpZnQoMiksRm4ubCs9Mik6KExuWzJdPUZuLnJlYWRfc2hpZnQoMSksTG5bMF0uYz1Gbi5yZWFkX3NoaWZ0KDIpLExuWzBdLnI9Rm4ucmVhZF9zaGlmdCgyKSksTG59ZnVuY3Rpb24gUmUoRm4sTHIscHIpe3ZhciBMbj1Gbi5sK0xyLFByPURlKEZuLDAscHIpO2lmKFByWzFd''@;'; put 'put ''LnQ9InMiLDIwNzY4PT1wci52ZXJzKXtGbi5sKys7dmFyIFppPUZuLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFByWzFdLnY9Rm4ucmVhZF9zaGlmdChaaSwidXRmOCIpLFByfXJldHVybiBwci5xcHJvJiZGbi5sKyssUHJbMV0udj1Gbi5yZWFkX3NoaWZ0KExuLUZuLmwsImNzdHIiKSxQcn1mdW5j''@;'; put 'put ''dGlvbiBWZShGbixMcixwcil7dmFyIExuPUhyKDcrcHIubGVuZ3RoKTtMbi53cml0ZV9zaGlmdCgxLDI1NSksTG4ud3JpdGVfc2hpZnQoMixMciksTG4ud3JpdGVfc2hpZnQoMixGbiksTG4ud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBQcj0wO1ByPExuLmxlbmd0aDsrK1ByKXt2YXIgWmk9''@;'; put 'put ''cHIuY2hhckNvZGVBdChQcik7TG4ud3JpdGVfc2hpZnQoMSxaaT49MTI4Pzk1OlppKX1yZXR1cm4gTG4ud3JpdGVfc2hpZnQoMSwwKSxMbn1mdW5jdGlvbiBldChGbixMcixwcil7dmFyIExuPUhyKDcpO3JldHVybiBMbi53cml0ZV9zaGlmdCgxLDI1NSksTG4ud3JpdGVfc2hpZnQoMixMciks''@;'; put 'put ''TG4ud3JpdGVfc2hpZnQoMixGbiksTG4ud3JpdGVfc2hpZnQoMixwciwiaSIpLExufWZ1bmN0aW9uIEplKEZuLExyLHByKXt2YXIgTG49SHIoMTMpO3JldHVybiBMbi53cml0ZV9zaGlmdCgxLDI1NSksTG4ud3JpdGVfc2hpZnQoMixMciksTG4ud3JpdGVfc2hpZnQoMixGbiksTG4ud3JpdGVf''@;'; put 'put ''c2hpZnQoOCxwciwiZiIpLExufWZ1bmN0aW9uIFJ0KEZuLExyLHByKXt2YXIgTG49MzI3NjgmTHI7cmV0dXJuIExyPShMbj9GbjowKSsoKExyJj0tMzI3NjkpPj04MTkyP0xyLTE2Mzg0OkxyKSwoTG4/IiI6IiQiKSsocHI/UGEoTHIpOnpuKExyKSl9dmFyIEF0PXs1MTpbIkZBTFNFIiwwXSw1''@;'; put 'put ''MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSx6dD1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIisiLCItIiwiKiIsIi8i''@;'; put 'put ''LCJeIiwiPSIsIjw+IiwiPD0iLCI+PSIsIjwiLCI+IiwiIiwiIiwiIiwiIiwiJiIsIiIsIiIsIiIsIiIsIiIsIiIsIiJdO2Z1bmN0aW9uIGxyKEZuKXt2YXIgTHI9W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gTHJbMF0ucj1Gbi5yZWFkX3NoaWZ0KDIpLExyWzNdPUZuW0ZuLmwr''@;'; put 'put ''K10sTHJbMF0uYz1GbltGbi5sKytdLExyfWZ1bmN0aW9uIGRyKEZuLExyLHByLExuKXt2YXIgUHI9SHIoNitMbi5sZW5ndGgpO1ByLndyaXRlX3NoaWZ0KDIsRm4pLFByLndyaXRlX3NoaWZ0KDEscHIpLFByLndyaXRlX3NoaWZ0KDEsTHIpLFByLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIg''@;'; put 'put ''Wmk9MDtaaTxMbi5sZW5ndGg7KytaaSl7dmFyIF9pPUxuLmNoYXJDb2RlQXQoWmkpO1ByLndyaXRlX3NoaWZ0KDEsX2k+PTEyOD85NTpfaSl9cmV0dXJuIFByLndyaXRlX3NoaWZ0KDEsMCksUHJ9ZnVuY3Rpb24gSG4oRm4sTHIpe3ZhciBwcj1scihGbiksTG49Rm4ucmVhZF9zaGlmdCg0KSxQ''@;'; put 'put ''cj1Gbi5yZWFkX3NoaWZ0KDQpLFppPUZuLnJlYWRfc2hpZnQoMik7aWYoNjU1MzU9PVppKXJldHVybiAwPT09TG4mJjMyMjEyMjU0NzI9PT1Qcj8ocHJbMV0udD0iZSIscHJbMV0udj0xNSk6MD09PUxuJiYzNDg5NjYwOTI4PT09UHI/KHByWzFdLnQ9ImUiLHByWzFdLnY9NDIpOnByWzFdLnY9''@;'; put 'put ''MCxwcjt2YXIgX2k9MzI3NjgmWmk7cmV0dXJuIFppPSgzMjc2NyZaaSktMTY0NDYscHJbMV0udj0oMS0yKl9pKSooUHIqTWF0aC5wb3coMixaaSszMikrTG4qTWF0aC5wb3coMixaaSkpLHByfWZ1bmN0aW9uIGhyKEZuLExyLHByLExuKXt2YXIgUHI9SHIoMTQpO2lmKFByLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsRm4pLFByLndyaXRlX3NoaWZ0KDEscHIpLFByLndyaXRlX3NoaWZ0KDEsTHIpLDA9PUxuKXJldHVybiBQci53cml0ZV9zaGlmdCg0LDApLFByLndyaXRlX3NoaWZ0KDQsMCksUHIud3JpdGVfc2hpZnQoMiw2NTUzNSksUHI7dmFyIFppPTAsX2k9MCxhbz0wO3JldHVybiBMbjwwJiYoWmk9''@;'; put 'put ''MSxMbj0tTG4pLF9pPTB8TWF0aC5sb2cyKExuKSwhKDIxNDc0ODM2NDgmKGFvPShMbi89TWF0aC5wb3coMixfaS0zMSkpPj4+MCkpJiYoKytfaSxhbz0oTG4vPTIpPj4+MCksTG4tPWFvLGFvfD0yMTQ3NDgzNjQ4LGFvPj4+PTAsTG4qPU1hdGgucG93KDIsMzIpLFByLndyaXRlX3NoaWZ0KDQs''@;'; put 'put ''TG4+Pj4wKSxQci53cml0ZV9zaGlmdCg0LGFvKSxQci53cml0ZV9zaGlmdCgyLF9pKz0xNjM4MysoWmk/MzI3Njg6MCkpLFByfWZ1bmN0aW9uIHZpKEZuLExyKXt2YXIgcHI9bHIoRm4pLExuPUZuLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVybiBwclsxXS52PUxuLHByfWZ1bmN0aW9uIHRhKEZu''@;'; put 'put ''LExyKXt2YXIgcHI9SHIoNStGbi5sZW5ndGgpO3ByLndyaXRlX3NoaWZ0KDIsMTRlMykscHIud3JpdGVfc2hpZnQoMixMcik7Zm9yKHZhciBMbj0wO0xuPEZuLmxlbmd0aDsrK0xuKXt2YXIgUHI9Rm4uY2hhckNvZGVBdChMbik7cHJbcHIubCsrXT1Qcj4xMjc/OTU6UHJ9cmV0dXJuIHByW3By''@;'; put 'put ''LmwrK109MCxwcn12YXIgSWk9ezA6e246IkJPRiIsZjp0bH0sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01PREUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6e246IlNZTkMifSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiBvZShGbil7dmFyIExyPXtzOntjOjAscjowfSxlOntj''@;'; put 'put ''OjAscjowfX07cmV0dXJuIExyLnMuYz1Gbi5yZWFkX3NoaWZ0KDIpLExyLnMucj1Gbi5yZWFkX3NoaWZ0KDIpLExyLmUuYz1Gbi5yZWFkX3NoaWZ0KDIpLExyLmUucj1Gbi5yZWFkX3NoaWZ0KDIpLDY1NTM1PT1Mci5zLmMmJihMci5zLmM9THIuZS5jPUxyLnMucj1Mci5lLnI9MCksTHJ9fSw3''@;'; put 'put ''OntuOiJXSU5ET1cxIn0sODp7bjoiQ09MVzEifSw5OntuOiJXSU5UV08ifSwxMDp7bjoiQ09MVzIifSwxMTp7bjoiTkFNRSJ9LDEyOntuOiJCTEFOSyJ9LDEzOntuOiJJTlRFR0VSIixmOmZ1bmN0aW9uIEdlKEZuLExyLHByKXt2YXIgTG49RGUoRm4sMCxwcik7cmV0dXJuIExuWzFdLnY9Rm4u''@;'; put 'put ''cmVhZF9zaGlmdCgyLCJpIiksTG59fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIGJ0KEZuLExyLHByKXt2YXIgTG49RGUoRm4sMCxwcik7cmV0dXJuIExuWzFdLnY9Rm4ucmVhZF9zaGlmdCg4LCJmIiksTG59fSwxNTp7bjoiTEFCRUwiLGY6UmV9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0''@;'; put 'put ''aW9uIGZ0KEZuLExyLHByKXt2YXIgTG49Rm4ubCtMcixQcj1EZShGbiwwLHByKTtpZihQclsxXS52PUZuLnJlYWRfc2hpZnQoOCwiZiIpLHByLnFwcm8pRm4ubD1MbjtlbHNle3ZhciBaaT1Gbi5yZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBTbihGbixMcil7R3MoRm4sMCk7Zm9yKHZhciBwcj1b''@;'; put 'put ''XSxMbj0wLFByPSIiLFppPSIiO0ZuLmw8Rm4ubGVuZ3RoOyl7dmFyIF9pPUZuW0ZuLmwrK107c3dpdGNoKF9pKXtjYXNlIDA6cHIucHVzaChGbi5yZWFkX3NoaWZ0KDgsImYiKSk7YnJlYWs7Y2FzZSAxOlppPVJ0KExyWzBdLmMsRm4ucmVhZF9zaGlmdCgyKSwhMCksUHI9UnQoTHJbMF0ucixG''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDIpLCExKSxwci5wdXNoKFppK1ByKTticmVhaztjYXNlIDI6dmFyIHBhPVJ0KExyWzBdLmMsRm4ucmVhZF9zaGlmdCgyKSwhMCksYW89UnQoTHJbMF0ucixGbi5yZWFkX3NoaWZ0KDIpLCExKTtaaT1SdChMclswXS5jLEZuLnJlYWRfc2hpZnQoMiksITApLFByPVJ0KExy''@;'; put 'put ''WzBdLnIsRm4ucmVhZF9zaGlmdCgyKSwhMSkscHIucHVzaChwYSthbysiOiIrWmkrUHIpO2JyZWFrO2Nhc2UgMzppZihGbi5sPEZuLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5kIik7YnJlYWs7Y2FzZSA0OnByLnB1c2goIigiK3By''@;'; put 'put ''LnBvcCgpKyIpIik7YnJlYWs7Y2FzZSA1OnByLnB1c2goRm4ucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgUWk9IiI7X2k9Rm5bRm4ubCsrXTspUWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoX2kpO3ByLnB1c2goJyInK1FpLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFr''@;'; put 'put ''O2Nhc2UgODpwci5wdXNoKCItIitwci5wb3AoKSk7YnJlYWs7Y2FzZSAyMzpwci5wdXNoKCIrIitwci5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpwci5wdXNoKCJOT1QoIitwci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp2YXIgRG89cHIucG9wKCksamE9cHIucG9wKCk7cHIucHVz''@;'; put 'put ''aChbIkFORCIsIk9SIl1bX2ktMjBdKyIoIitqYSsiLCIrRG8rIikiKTticmVhaztkZWZhdWx0OmlmKF9pPDMyJiZ6dFtfaV0pRG89cHIucG9wKCksamE9cHIucG9wKCkscHIucHVzaChqYSt6dFtfaV0rRG8pO2Vsc2V7aWYoIUF0W19pXSlyZXR1cm4gX2k8PTc/Y29uc29sZS5lcnJvcigiV0sx''@;'; put 'put ''IGludmFsaWQgb3Bjb2RlICIrX2kudG9TdHJpbmcoMTYpKTpfaTw9MjQ/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIG9wICIrX2kudG9TdHJpbmcoMTYpKTpfaTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrX2kudG9TdHJpbmcoMTYpKTpfaTw9MTE1P2Nv''@;'; put 'put ''bnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBmdW5jdGlvbiBvcGNvZGUgIitfaS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrX2kudG9TdHJpbmcoMTYpKTtpZig2OT09KExuPUF0W19pXVsxXSkmJihMbj1GbltGbi5sKytdKSxMbj5w''@;'; put 'put ''ci5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitfaS50b1N0cmluZygxNikrIjp8Iitwci5qb2luKCJ8IikrInwiKTt2YXIgbW89cHIuc2xpY2UoLUxuKTtwci5sZW5ndGgtPUxuLHByLnB1c2goQXRbX2ldWzBdKyIoIittby5qb2lu''@;'; put 'put ''KCIsIikrIikiKX19fTE9PXByLmxlbmd0aD9MclsxXS5mPSIiK3ByWzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8Iitwci5qb2luKCJ8IikrInwiKX0pKEZuLnNsaWNlKEZuLmwsRm4ubCtaaSksUHIpLEZuLmwrPVppfXJldHVybiBQcn19LDI0OntuOiJUQUJMRSJ9''@;'; put 'put ''LDI1OntuOiJPUkFOR0UifSwyNjp7bjoiUFJBTkdFIn0sMjc6e246IlNSQU5HRSJ9LDI4OntuOiJGUkFOR0UifSwyOTp7bjoiS1JBTkdFMSJ9LDMyOntuOiJIUkFOR0UifSwzNTp7bjoiS1JBTkdFMiJ9LDM2OntuOiJQUk9URUMifSwzNzp7bjoiRk9PVEVSIn0sMzg6e246IkhFQURFUiJ9LDM5''@;'; put 'put ''OntuOiJTRVRVUCJ9LDQwOntuOiJNQVJHSU5TIn0sNDE6e246IkxBQkVMRk1UIn0sNDI6e246IlRJVExFUyJ9LDQzOntuOiJTSEVFVEpTIn0sNDU6e246IkdSQVBIIn0sNDY6e246Ik5HUkFQSCJ9LDQ3OntuOiJDQUxDQ09VTlQifSw0ODp7bjoiVU5GT1JNQVRURUQifSw0OTp7bjoiQ1VSU09S''@;'; put 'put ''VzEyIn0sNTA6e246IldJTkRPVyJ9LDUxOntuOiJTVFJJTkciLGY6UmV9LDU1OntuOiJQQVNTV09SRCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoiUVVFUllOQU1FIn0sNjI6e246IlBSSU5UIn0sNjM6e246IlBSSU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7''@;'; put 'put ''bjoiR1JBUEhOQU1FIn0sNjY6e246IlpPT00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNST1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntuOiJOTkFNRSJ9LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFDUk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBS''@;'; put 'put ''QU5HRVM/PyJ9LDEwMzp7bjoiUlJBTkdFUz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJNUkFOR0VTPz8ifSw2NTUzNTp7bjoiIn19LFNyPXswOntuOiJCT0YifSwxOntuOiJFT0YifSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNBTENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1Ontu''@;'; put 'put ''OiJTSEVFVENFTExQVFIifSw2OntuOiJTSEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0sODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6e246IlNZU1RFTVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJ''@;'; put 'put ''TEVTRUFMIn0sMTQ6e246IkRBVEFGSUxMTlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoiUFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdSQVBIU1RSSU5HIn0sMTk6e246Ij8/In0sMjA6e246IkVSUkNFTEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxB''@;'; put 'put ''QkVMMTYiLGY6ZnVuY3Rpb24gbW4oRm4sTHIpe3ZhciBwcj1scihGbik7cmV0dXJuIHByWzFdLnQ9InMiLHByWzFdLnY9Rm4ucmVhZF9zaGlmdChMci00LCJjc3RyIikscHJ9fSwyMzp7bjoiTlVNQkVSMTciLGY6SG59LDI0OntuOiJOVU1CRVIxOCIsZjpmdW5jdGlvbiBHbihGbixMcil7dmFy''@;'; put 'put ''IHByPWxyKEZuKTtwclsxXS52PUZuLnJlYWRfc2hpZnQoMik7dmFyIExuPXByWzFdLnY+PjE7aWYoMSZwclsxXS52KXN3aXRjaCg3JkxuKXtjYXNlIDA6TG49NWUzKihMbj4+Myk7YnJlYWs7Y2FzZSAxOkxuPTUwMCooTG4+PjMpO2JyZWFrO2Nhc2UgMjpMbj0oTG4+PjMpLzIwO2JyZWFrO2Nh''@;'; put 'put ''c2UgMzpMbj0oTG4+PjMpLzIwMDticmVhaztjYXNlIDQ6TG49KExuPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkxuPShMbj4+MykvMmU0O2JyZWFrO2Nhc2UgNjpMbj0oTG4+PjMpLzE2O2JyZWFrO2Nhc2UgNzpMbj0oTG4+PjMpLzY0fXJldHVybiBwclsxXS52PUxuLHByfX0sMjU6e246IkZPUk1V''@;'; put 'put ''TEExOSIsZjpmdW5jdGlvbiBObihGbixMcil7dmFyIHByPUhuKEZuKTtyZXR1cm4gRm4ubCs9THItMTQscHJ9fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQiLGY6ZnVuY3Rpb24gcWkoRm4sTHIpe2Zvcih2YXIgcHI9e30sTG49Rm4ubCtMcjtGbi5sPExuOyl7dmFyIFByPUZu''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7aWYoMTRlMz09UHIpe2ZvcihwcltQcl09WzAsIiJdLHByW1ByXVswXT1Gbi5yZWFkX3NoaWZ0KDIpO0ZuW0ZuLmxdOylwcltQcl1bMV0rPVN0cmluZy5mcm9tQ2hhckNvZGUoRm5bRm4ubF0pLEZuLmwrKztGbi5sKyt9fXJldHVybiBwcn19LDI4OntuOiJEVExBQkVM''@;'; put 'put ''TUlTQyJ9LDI5OntuOiJEVExBQkVMQ0VMTCJ9LDMwOntuOiJHUkFQSFdJTkRPVyJ9LDMxOntuOiJDUEEifSwzMjp7bjoiTFBMQVVUTyJ9LDMzOntuOiJRVUVSWSJ9LDM0OntuOiJISURERU5TSEVFVCJ9LDM1OntuOiI/PyJ9LDM3OntuOiJOVU1CRVIyNSIsZjpmdW5jdGlvbiB0cihGbixMcil7''@;'; put 'put ''dmFyIHByPWxyKEZuKSxMbj1Gbi5yZWFkX3NoaWZ0KDQpO3JldHVybiBwclsxXS52PUxuPj42LHByfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOnZpfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIFBpKEZuLExyKXt2YXIgcHI9dmkoRm4pO3JldHVybiBGbi5sKz1Mci0x''@;'; put 'put ''MCxwcn19LDE0Mjp7bjoiPz8ifSwxNDc6e246Ij8/In0sMTUwOntuOiI/PyJ9LDE1MTp7bjoiPz8ifSwxNTI6e246Ij8/In0sMTUzOntuOiI/PyJ9LDE1NDp7bjoiPz8ifSwxNTU6e246Ij8/In0sMTU2OntuOiI/PyJ9LDE2Mzp7bjoiPz8ifSwxNzQ6e246Ij8/In0sMTc1OntuOiI/PyJ9LDE3''@;'; put 'put ''Njp7bjoiPz8ifSwxNzc6e246Ij8/In0sMTg0OntuOiI/PyJ9LDE4NTp7bjoiPz8ifSwxODY6e246Ij8/In0sMTg3OntuOiI/PyJ9LDE4ODp7bjoiPz8ifSwxOTU6e246Ij8/In0sMjAxOntuOiI/PyJ9LDIwNTp7bjoiPz8ifSwyMDY6e246Ij8/In0sMjA3OntuOiI/PyJ9LDIwODp7bjoiPz8i''@;'; put 'put ''fSwyNTY6e246Ij8/In0sMjU5OntuOiI/PyJ9LDI2MDp7bjoiPz8ifSwyNjE6e246Ij8/In0sMjYyOntuOiI/PyJ9LDI2Mzp7bjoiPz8ifSwyNjU6e246Ij8/In0sMjY2OntuOiI/PyJ9LDI2Nzp7bjoiPz8ifSwyNjg6e246Ij8/In0sMjcwOntuOiI/PyJ9LDI3MTp7bjoiPz8ifSwzODQ6e246''@;'; put 'put ''Ij8/In0sMzg5OntuOiI/PyJ9LDM5MDp7bjoiPz8ifSwzOTM6e246Ij8/In0sMzk2OntuOiI/PyJ9LDUxMjp7bjoiPz8ifSw1MTQ6e246Ij8/In0sNTEzOntuOiI/PyJ9LDUxNjp7bjoiPz8ifSw1MTc6e246Ij8/In0sNjQwOntuOiI/PyJ9LDY0MTp7bjoiPz8ifSw2NDI6e246Ij8/In0sNjQz''@;'; put 'put ''OntuOiI/PyJ9LDY0NDp7bjoiPz8ifSw2NDU6e246Ij8/In0sNjQ2OntuOiI/PyJ9LDY0Nzp7bjoiPz8ifSw2NDg6e246Ij8/In0sNjU4OntuOiI/PyJ9LDY1OTp7bjoiPz8ifSw2NjA6e246Ij8/In0sNjYxOntuOiI/PyJ9LDY2Mjp7bjoiPz8ifSw2NjU6e246Ij8/In0sNjY2OntuOiI/PyJ9''@;'; put 'put ''LDc2ODp7bjoiPz8ifSw3NzI6e246Ij8/In0sMTYwMDp7bjoiPz8ifSwxNjAyOntuOiI/PyJ9LDE3OTM6e246Ij8/In0sMTc5NDp7bjoiPz8ifSwxNzk1OntuOiI/PyJ9LDE3OTY6e246Ij8/In0sMTkyMDp7bjoiPz8ifSwyMDQ4OntuOiI/PyJ9LDIwNDk6e246Ij8/In0sMjA1Mjp7bjoiPz8i''@;'; put 'put ''fSwyNjg4OntuOiI/PyJ9LDEwOTk4OntuOiI/PyJ9LDEyODQ5OntuOiI/PyJ9LDI4MjMzOntuOiI/PyJ9LDI4NDg0OntuOiI/PyJ9LDY1NTM1OntuOiIifX07cmV0dXJue3NoZWV0X3RvX3drMTpmdW5jdGlvbiBWKEZuLExyKXt2YXIgcHI9THJ8fHt9O2lmKCtwci5jb2RlcGFnZT49MCYmRigr''@;'; put 'put ''cHIuY29kZXBhZ2UpLCJzdHJpbmciPT1wci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMSB0byBKUyBzdHJpbmciKTt2YXIgTG49Q3QoKSxQcj1TYShGblsiIXJlZiJdKSxaaT1BcnJheS5pc0FycmF5KEZuKSxfaT1bXTtXaShMbiwwLGZ1bmN0aW9uIGVlKEZuKXt2YXIg''@;'; put 'put ''THI9SHIoMik7cmV0dXJuIExyLndyaXRlX3NoaWZ0KDIsRm4pLExyfSgxMDMwKSksV2koTG4sNixmdW5jdGlvbiBkZShGbil7dmFyIExyPUhyKDgpO3JldHVybiBMci53cml0ZV9zaGlmdCgyLEZuLnMuYyksTHIud3JpdGVfc2hpZnQoMixGbi5zLnIpLExyLndyaXRlX3NoaWZ0KDIsRm4uZS5j''@;'; put 'put ''KSxMci53cml0ZV9zaGlmdCgyLEZuLmUuciksTHJ9KFByKSk7Zm9yKHZhciBwYT1Qci5zLnI7cGE8PVByLmUucjsrK3BhKWZvcih2YXIgYW89em4ocGEpLFFpPVByLnMuYztRaTw9UHIuZS5jOysrUWkpe3BhPT09UHIucy5yJiYoX2lbUWldPVBhKFFpKSk7dmFyIGphPVppPyhGbltwYV18fFtd''@;'; put 'put ''KVtRaV06Rm5bX2lbUWldK2FvXTtqYSYmInoiIT1qYS50JiYoIm4iPT1qYS50PygwfGphLnYpPT1qYS52JiZqYS52Pj0tMzI3NjgmJmphLnY8PTMyNzY3P1dpKExuLDEzLGV0KHBhLFFpLGphLnYpKTpXaShMbiwxNCxKZShwYSxRaSxqYS52KSk6V2koTG4sMTUsVmUocGEsUWksbGMoamEpLnNs''@;'; put 'put ''aWNlKDAsMjM5KSkpKX1yZXR1cm4gV2koTG4sMSksTG4uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIFcoRm4sTHIpe3ZhciBwcj1Mcnx8e307aWYoK3ByLmNvZGVwYWdlPj0wJiZGKCtwci5jb2RlcGFnZSksInN0cmluZyI9PXByLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3Jp''@;'; put 'put ''dGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBMbj1DdCgpO1dpKExuLDAsZnVuY3Rpb24gbGUoRm4pe3ZhciBMcj1IcigyNik7THIud3JpdGVfc2hpZnQoMiw0MDk2KSxMci53cml0ZV9zaGlmdCgyLDQpLExyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBwcj0wLExuPTAsUHI9MCxaaT0wO1pp''@;'; put 'put ''PEZuLlNoZWV0TmFtZXMubGVuZ3RoOysrWmkpe3ZhciBwYT1Gbi5TaGVldHNbRm4uU2hlZXROYW1lc1taaV1dO2lmKHBhJiZwYVsiIXJlZiJdKXsrK1ByO3ZhciBhbz13cihwYVsiIXJlZiJdKTtwcjxhby5lLnImJihwcj1hby5lLnIpLExuPGFvLmUuYyYmKExuPWFvLmUuYyl9fXJldHVybiBM''@;'; put 'put ''ci53cml0ZV9zaGlmdCgyLHByKSxMci53cml0ZV9zaGlmdCgxLFByKSxMci53cml0ZV9zaGlmdCgxLExuKSxMci53cml0ZV9zaGlmdCgyLDApLExyLndyaXRlX3NoaWZ0KDIsMCksTHIud3JpdGVfc2hpZnQoMSwxKSxMci53cml0ZV9zaGlmdCgxLDIpLExyLndyaXRlX3NoaWZ0KDQsMCksTHIu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCwwKSxMcn0oRm4pKTtmb3IodmFyIFByPTAsWmk9MDtQcjxGbi5TaGVldE5hbWVzLmxlbmd0aDsrK1ByKShGbi5TaGVldHNbRm4uU2hlZXROYW1lc1tQcl1dfHx7fSlbIiFyZWYiXSYmV2koTG4sMjcsdGEoRm4uU2hlZXROYW1lc1tQcl0sWmkrKykpO3ZhciBfaT0wO2Zv''@;'; put 'put ''cihQcj0wO1ByPEZuLlNoZWV0TmFtZXMubGVuZ3RoOysrUHIpe3ZhciBwYT1Gbi5TaGVldHNbRm4uU2hlZXROYW1lc1tQcl1dO2lmKHBhJiZwYVsiIXJlZiJdKXtmb3IodmFyIGFvPVNhKHBhWyIhcmVmIl0pLFFpPUFycmF5LmlzQXJyYXkocGEpLERvPVtdLGphPWFvLnMucjtqYTw9YW8uZS5y''@;'; put 'put ''OysramEpZm9yKHZhciBtbz16bihqYSksY289YW8ucy5jO2NvPD1hby5lLmM7Kytjbyl7amE9PT1hby5zLnImJihEb1tjb109UGEoY28pKTt2YXIga2w9UWk/KHBhW2phXXx8W10pW2NvXTpwYVtEb1tjb10rbW9dO2tsJiYieiIhPWtsLnQmJigibiI9PWtsLnQ/V2koTG4sMjMsaHIoamEsY28s''@;'; put 'put ''X2ksa2wudikpOldpKExuLDIyLGRyKGphLGNvLF9pLGxjKGtsKS5zbGljZSgwLDIzOSkpKSl9KytfaX19cmV0dXJuIFdpKExuLDEpLExuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiB4KEZuLExyKXtzd2l0Y2goTHIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiB3KHUoaGUuZGVjb2Rl''@;'; put 'put ''KEZuKSksTHIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gdyh1KEZuKSxMcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiB3KEZuLExyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrTHIudHlwZX19fSgpLHY3PWZ1bmN0aW9uKCl7dmFyIGc9eTAoInQiKSx4PXkwKCJyUHIiKTtmdW5j''@;'; put 'put ''dGlvbiB3KGVlKXt2YXIgbGU9ZWUubWF0Y2goZyk7aWYoIWxlKXJldHVybnt0OiJzIix2OiIifTt2YXIgb2U9e3Q6InMiLHY6cXIobGVbMV0pfSxkZT1lZS5tYXRjaCh4KTtyZXR1cm4gZGUmJihvZS5zPWZ1bmN0aW9uIG9VKGcpe3ZhciB4PXt9LHc9Zy5tYXRjaChHdCksVj0wLFc9ITE7aWYo''@;'; put 'put ''dylmb3IoO1YhPXcubGVuZ3RoOysrVil7dmFyIGVlPWZyKHdbVl0pO3N3aXRjaChlZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtjYXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVhaztjYXNlIjxzaGFkb3ciOmlmKCFlZS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hh''@;'; put 'put ''ZG93Lz4iOnguc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09ZWUudmFsKWJyZWFrO3guY3A9RFtwYXJzZUludChlZS52YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighZWUudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+Ijpj''@;'; put 'put ''YXNlIjxvdXRsaW5lLz4iOngub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOngubmFtZT1lZS52YWw7YnJlYWs7Y2FzZSI8c3oiOnguc3o9ZWUudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWVlLnZhbClicmVhaztjYXNlIjxzdHJpa2U+Ijpj''@;'; put 'put ''YXNlIjxzdHJpa2UvPiI6eC5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIWVlLnZhbClicmVhaztzd2l0Y2goZWUudmFsKXtjYXNlImRvdWJsZSI6eC51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOngudW5kZXJsaW5lPTMz''@;'; put 'put ''O2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6eC51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6eC51bmRlcmxpbmV8fCh4LnVuZGVybGluZT0xKTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09ZWUudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxi''@;'; put 'put ''Lz4iOnguYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1lZS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6eC5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjplZS5yZ2ImJih4LmNvbG9yPXtyZ2I6OD09ZWUucmdi''@;'; put 'put ''Lmxlbmd0aD9lZS5yZ2Iuc2xpY2UoMiw4KTooIjAwMDAwMCIrZWUucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHkiOnguZmFtaWx5PWVlLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KGVlLnZhbHx8Im5vbmUiKSYmKHgudmFsaWduPWVlLnZhbC5yZXBsYWNl''@;'; put 'put ''KCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOlc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlc9ITE7YnJlYWs7ZGVmYXVsdDppZig0NyE9PWVlWzBdLmNoYXJDb2RlQXQo''@;'; put 'put ''MSkmJiFXKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrZWVbMF0pfX1yZXR1cm4geH0oZGVbMV0pKSxvZX12YXIgVj0vPCg/Olx3KzopP3I+L2csVz0vPFwvKD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlvbihsZSl7cmV0dXJuIGxlLnJlcGxhY2UoViwiIiku''@;'; put 'put ''c3BsaXQoVykubWFwKHcpLmZpbHRlcihmdW5jdGlvbihvZSl7cmV0dXJuIG9lLnZ9KX19KCksR0k9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LE9nPWZ1bmN0aW9uKCl7dmFyIHg9LyhcclxufFxuKS9nO2Z1bmN0''@;'; put 'put ''aW9uIFYoVyl7dmFyIGVlPVtbXSxXLnYsW11dO3JldHVybiBXLnY/KFcucyYmZnVuY3Rpb24gdyhXLGVlLGxlKXt2YXIgb2U9W107Vy51bmRlcmxpbmUmJm9lLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLFcudW5kZXJsaW5lPjEmJm9lLnB1c2goInRleHQtdW5kZXJsaW5l''@;'; put 'put ''LXN0eWxlOiIrR0lbVy51bmRlcmxpbmVdKyI7IiksVy5zeiYmb2UucHVzaCgiZm9udC1zaXplOiIrVy5zeisicHQ7IiksVy5vdXRsaW5lJiZvZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxXLnNoYWRvdyYmb2UucHVzaCgidGV4dC1zaGFkb3c6IGF1dG87IiksVy5jb2xvciYmVy5j''@;'; put 'put ''b2xvci5yZ2ImJm9lLnB1c2goImNvbG9yOiAjIitNZChXLmNvbG9yLnJnYikrIjsiKSxlZS5wdXNoKCc8c3BhbiBzdHlsZT0iJytvZS5qb2luKCIiKSsnIj4nKSxXLmJvbGQmJihlZS5wdXNoKCI8Yj4iKSxsZS5wdXNoKCI8L2I+IikpLFcuaXRhbGljJiYoZWUucHVzaCgiPGk+IiksbGUucHVz''@;'; put 'put ''aCgiPC9pPiIpKSxXLnN0cmlrZSYmKGVlLnB1c2goIjxzPiIpLGxlLnB1c2goIjwvcz4iKSk7dmFyIGRlPVcudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT1kZXx8InN1cGVyIj09ZGU/ZGU9InN1cCI6InN1YnNjcmlwdCI9PWRlJiYoZGU9InN1YiIpLCIiIT1kZSYmKGVlLnB1c2goIjwiK2Rl''@;'; put 'put ''KyI+IiksbGUucHVzaCgiPC8iK2RlKyI+IikpLGxlLnB1c2goIjwvc3Bhbj4iKX0oVy5zLGVlWzBdLGVlWzJdKSxlZVswXS5qb2luKCIiKStlZVsxXS5yZXBsYWNlKHgsIjxici8+IikrZWVbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihlZSl7cmV0dXJuIGVlLm1hcChWKS5qb2lu''@;'; put 'put ''KCIiKX19KCk7ZnVuY3Rpb24geTcoZyl7cmV0dXJuIGcubWFwKGZ1bmN0aW9uKHcpe3JldHVybiBmdW5jdGlvbiBkZihnKXt2YXIgeD0iIix3PVtdO3JldHVybiBnLnMmJihnLnMuYm9sZCYmdy5wdXNoKCI8Yi8+IiksZy5zLml0YWxpYyYmdy5wdXNoKCI8aS8+IiksZy5zLnN0cmlrZSYmdy5w''@;'; put 'put ''dXNoKCI8c3RyaWtlLz4iKSxnLnMudW5kZXJsaW5lJiZ3LnB1c2goJzx1IHZhbD0iJysodWhbZy5zLnVuZGVybGluZV18fCJzaW5nbGUiKSsnIi8+JyksZy5zLmNvbG9yJiZ3LnB1c2goZ2YoZy5zLmNvbG9yKSksZy5zLnN6JiZ3LnB1c2goJzxzeiB2YWw9IicrZy5zLnN6KyciLz4nKSxnLnMu''@;'; put 'put ''bmFtZSYmdy5wdXNoKCc8ckZvbnQgdmFsPSInK2cucy5uYW1lKyciLz4nKSwoInN1cGVyIj09Zy5zLnZhbGlnbnx8InN1YiI9PWcucy52YWxpZ24pJiZ3LnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK2cucy52YWxpZ24rJ3NjcmlwdCIvPicpKSx3Lmxlbmd0aCYmKHgrPSI8clByPiIrdy5qb2lu''@;'; put 'put ''KCIiKSsiPC9yUHI+IiksIjxyPiIrKHgrPXpyKCJ0IixvaShnLnYpLG51bGwpKSsiPC9yPiJ9KHcpfSkuam9pbigiIil9dmFyIFRNPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLExfPS88KD86XHcrOik/clxiW14+XSo+LyxPXz0vPCg/Olx3KzopP3JQaC4qPz4o''@;'; put 'put ''W1xzXFNdKj8pPFwvKD86XHcrOik/clBoPi9nO2Z1bmN0aW9uIF83KGcseCl7dmFyIHc9IXh8fHguY2VsbEhUTUwsVj17fTtyZXR1cm4gZz8oZy5tYXRjaCgvXlxzKjwoPzpcdys6KT90W14+XSo+Lyk/KFYudD1xcihibyhnLnNsaWNlKGcuaW5kZXhPZigiPiIpKzEpLnNwbGl0KC88XC8oPzpc''@;'; put 'put ''dys6KT90Pi8pWzBdfHwiIikpLFYucj1ibyhnKSx3JiYoVi5oPWZhKFYudCkpKTpnLm1hdGNoKExfKSYmKFYucj1ibyhnKSxWLnQ9cXIoYm8oKGcucmVwbGFjZShPXywiIikubWF0Y2goVE0pfHxbXSkuam9pbigiIikucmVwbGFjZShHdCwiIikpKSxWLlI9djcoVi5yKSx3JiYoVi5oPU9nKFYu''@;'; put 'put ''UikpKSxWKTp7dDoiIn19dmFyICRJPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+LyxLST0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLHNVPS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO3lhLlNTVD0iaHR0cDovL3NjaGVtYXMub3Blbnht''@;'; put 'put ''bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzIjt2YXIgYjc9L15cc3xccyR8W1x0XG5ccl0vO2Z1bmN0aW9uIEFNKGcseCl7aWYoIXguYm9va1NTVClyZXR1cm4iIjt2YXIgdz1ba2ldO3dbdy5sZW5ndGhdPXpyKCJzc3QiLG51bGws''@;'; put 'put ''e3htbG5zOlJvLm1haW5bMF0sY291bnQ6Zy5Db3VudCx1bmlxdWVDb3VudDpnLlVuaXF1ZX0pO2Zvcih2YXIgVj0wO1YhPWcubGVuZ3RoOysrVilpZihudWxsIT1nW1ZdKXt2YXIgVz1nW1ZdLGVlPSI8c2k+IjtXLnI/ZWUrPVcucjooZWUrPSI8dCIsVy50fHwoVy50PSIiKSxXLnQubWF0Y2go''@;'; put 'put ''YjcpJiYoZWUrPScgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxlZSs9Ij4iK29pKFcudCkrIjwvdD4iKSx3W3cubGVuZ3RoXT1lZSs9Ijwvc2k+In1yZXR1cm4gdy5sZW5ndGg+MiYmKHdbdy5sZW5ndGhdPSI8L3NzdD4iLHdbMV09d1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksdy5qb2luKCIiKX12''@;'; put 'put ''YXIgdVU9ZnVuY3Rpb24gbWcoZyx4LHcpe3ZhciBWPTEzKzQqZy50Lmxlbmd0aCxXPWcuUiYmZy5SLmxlbmd0aHx8Zy5yO2cuciYmKGcuUj12NyhnLnIpKSxXJiYoVis9NCs0KmcuUi5sZW5ndGgpO3ZhciBlZT0hMTtpZihudWxsPT13JiYoZWU9ITAsdz1IcihWKSksdy53cml0ZV9zaGlmdCgx''@;'; put 'put ''LFc/MTowKSxrYyhnLnQsdyksVyl7dy53cml0ZV9zaGlmdCg0LGcuUi5sZW5ndGgpO2Zvcih2YXIgbGU9MCxvZT0wO29lPGcuUi5sZW5ndGg7KytvZSl7dmFyIGRlPWcuUltvZV07dy53cml0ZV9zaGlmdCgyLGxlKSxsZSs9KGRlLnZ8fCIiKS5sZW5ndGg7dmFyIERlPWRlLnM/eTEoeC5jZWxs''@;'; put 'put ''WGZzLHguY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpkZS5zfSx4KTowO3cud3JpdGVfc2hpZnQoMix4LmNlbGxYZnNbRGVdLmZvbnRJZCl9fXJldHVybiBlZT93LnNsaWNlKDAsdy5sKTp3fTtmdW5jdGlvbiBFb2UoZyx4KXt2YXIgdz1DdCgpO3V0KHcsIkJydEJlZ2luU3N0IixmdW5jdGlv''@;'; put 'put ''biBjVShnLHgpe3JldHVybiB4fHwoeD1Icig4KSkseC53cml0ZV9zaGlmdCg0LGcuQ291bnQpLHgud3JpdGVfc2hpZnQoNCxnLlVuaXF1ZSkseH0oZykpO2Zvcih2YXIgVj0wO1Y8Zy5sZW5ndGg7KytWKXV0KHcsIkJydFNTVEl0ZW0iLHVVKGdbVl0seCkpO3JldHVybiB1dCh3LCJCcnRFbmRT''@;'; put 'put ''c3QiKSx3LmVuZCgpfWZ1bmN0aW9uIFhJKGcpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUoQSxnKTtmb3IodmFyIHg9W10sdz1nLnNwbGl0KCIiKSxWPTA7Vjx3Lmxlbmd0aDsrK1YpeFtWXT13W1ZdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHh9ZnVu''@;'; put 'put ''Y3Rpb24gaGYoZyx4KXt2YXIgdz17fTtyZXR1cm4gdy5NYWpvcj1nLnJlYWRfc2hpZnQoMiksdy5NaW5vcj1nLnJlYWRfc2hpZnQoMikseD49NCYmKGcubCs9eC00KSx3fWZ1bmN0aW9uIF9tKGcpe2Zvcih2YXIgeD1nLnJlYWRfc2hpZnQoNCksdz1nLmwreC00LFY9e30sVz1nLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksZWU9W107Vy0tID4wOyllZS5wdXNoKHt0OmcucmVhZF9zaGlmdCg0KSx2OmcucmVhZF9zaGlmdCgwLCJscHA0Iil9KTtpZihWLm5hbWU9Zy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxWLmNvbXBzPWVlLGcubCE9dyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTog''@;'; put 'put ''IitnLmwrIiAhPSAiK3cpO3JldHVybiBWfWZ1bmN0aW9uIGJtKGcseCl7dmFyIHc9Zy5sK3gsVj17fTtWLkZsYWdzPTYzJmcucmVhZF9zaGlmdCg0KSxnLmwrPTQsVi5BbGdJRD1nLnJlYWRfc2hpZnQoNCk7dmFyIFc9ITE7c3dpdGNoKFYuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpj''@;'; put 'put ''YXNlIDI2MTI4Olc9MzY9PVYuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpXPTQ9PSg1MiZWLkZsYWdzKTticmVhaztjYXNlIDA6Vz0xNj09Vi5GbGFnc3x8ND09Vi5GbGFnc3x8MzY9PVYuRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06''@;'; put 'put ''ICIrVi5BbGdJRH1pZighVyl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gVi5BbGdJREhhc2g9Zy5yZWFkX3NoaWZ0KDQpLFYuS2V5U2l6ZT1nLnJlYWRfc2hpZnQoNCksVi5Qcm92aWRlclR5cGU9Zy5yZWFkX3NoaWZ0KDQpLGcubCs9''@;'; put 'put ''OCxWLkNTUE5hbWU9Zy5yZWFkX3NoaWZ0KHctZy5sPj4xLCJ1dGYxNmxlIiksZy5sPXcsVn1mdW5jdGlvbiBQXyhnLHgpe3ZhciB3PXt9LFY9Zy5sK3g7cmV0dXJuIGcubCs9NCx3LlNhbHQ9Zy5zbGljZShnLmwsZy5sKzE2KSxnLmwrPTE2LHcuVmVyaWZpZXI9Zy5zbGljZShnLmwsZy5sKzE2''@;'; put 'put ''KSxnLmwrPTE2LGcucmVhZF9zaGlmdCg0KSx3LlZlcmlmaWVySGFzaD1nLnNsaWNlKGcubCxWKSxnLmw9Vix3fWZ1bmN0aW9uIEFvZShnKXtpZigzNiE9KDYzJmcucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciB3PWcucmVhZF9z''@;'; put 'put ''aGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOmJtKGcsdyksdjpQXyhnLGcubGVuZ3RoLWcubCl9fWZ1bmN0aW9uIFFJKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIGVSKGcpe3ZhciB4PVsic2FsdFNp''@;'; put 'put ''emUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtnLmwrPTQ7dmFyIHc9Zy5yZWFkX3NoaWZ0KGcubGVuZ3RoLWcubCwidXRmOCIpLFY9e307cmV0dXJuIHcucmVw''@;'; put 'put ''bGFjZShHdCxmdW5jdGlvbihlZSl7dmFyIGxlPWZyKGVlKTtzd2l0Y2goJGkobGVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4iOmNhc2UiPC9rZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURh''@;'; put 'put ''dGEiOnguZm9yRWFjaChmdW5jdGlvbihvZSl7VltvZV09bGVbb2VdfSk7YnJlYWs7Y2FzZSI8ZGF0YUludGVncml0eSI6Vi5lbmNyeXB0ZWRIbWFjS2V5PWxlLmVuY3J5cHRlZEhtYWNLZXksVi5lbmNyeXB0ZWRIbWFjVmFsdWU9bGUuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtl''@;'; put 'put ''eUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjpWLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9yIjpWLnVyaT1sZS51cmk7YnJlYWs7Y2FzZSI8ZW5jcnlwdGVkS2V5IjpWLmVuY3MucHVzaChsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBsZVswXX19KSxWfWZ1bmN0aW9u''@;'; put 'put ''IElNKGcpe3ZhciB3LGVlLHg9MCxWPVhJKGcpLFc9Vi5sZW5ndGgrMTtmb3IoKHc9UihXKSlbMF09Vi5sZW5ndGgsZWU9MTtlZSE9VzsrK2VlKXdbZWVdPVZbZWUtMV07Zm9yKGVlPVctMTtlZT49MDstLWVlKXg9KCgxNjM4NCZ4PzE6MCl8eDw8MSYzMjc2Nyled1tlZV07cmV0dXJuIDUyODEx''@;'; put 'put ''Xnh9dmFyIEM3PWZ1bmN0aW9uKCl7dmFyIGc9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0seD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwy''@;'; put 'put ''MDE2M10sdz1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2''@;'; put 'put ''NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2''@;'; put 'put ''MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwx''@;'; put 'put ''NDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sVz1mdW5jdGlvbihsZSxvZSl7cmV0dXJuIGZ1bmN0aW9uKGxlKXtyZXR1cm4gMjU1''@;'; put 'put ''JihsZT4+MXxsZTw8Nyl9KGxlXm9lKX07cmV0dXJuIGZ1bmN0aW9uKG9lKXtmb3IodmFyIGRlPVhJKG9lKSxEZT1mdW5jdGlvbihsZSl7Zm9yKHZhciBvZT14W2xlLmxlbmd0aC0xXSxkZT0xMDQsRGU9bGUubGVuZ3RoLTE7RGU+PTA7LS1EZSlmb3IodmFyIFJlPWxlW0RlXSxWZT0wOzchPVZl''@;'; put 'put ''OysrVmUpNjQmUmUmJihvZV49d1tkZV0pLFJlKj0yLC0tZGU7cmV0dXJuIG9lfShkZSksUmU9ZGUubGVuZ3RoLFZlPVIoMTYpLEdlPTA7MTYhPUdlOysrR2UpVmVbR2VdPTA7dmFyIEplO2ZvcighKDEmflJlKSYmKFZlW1JlXT1XKGdbMF0sRGU+PjgpLFZlWy0tUmVdPVcoZGVbZGUubGVuZ3Ro''@;'; put 'put ''LTFdLDI1NSZEZSkpO1JlPjA7KVZlWy0tUmVdPVcoZGVbUmVdLERlPj44KSxWZVstLVJlXT1XKGRlW1JlXSwyNTUmRGUpO2ZvcihSZT0xNSxKZT0xNS1kZS5sZW5ndGg7SmU+MDspVmVbUmVdPVcoZ1tKZV0sRGU+PjgpLC0tSmUsVmVbLS1SZV09VyhkZVtSZV0sMjU1JkRlKSwtLVJlLC0tSmU7''@;'; put 'put ''cmV0dXJuIFZlfX0oKTt2YXIgTl89ZnVuY3Rpb24oKXtmdW5jdGlvbiBnKFcsZWUpe3N3aXRjaChlZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHgoaGUuZGVjb2RlKFcpLGVlKTtjYXNlImJpbmFyeSI6cmV0dXJuIHgoVyxlZSk7Y2FzZSJidWZmZXIiOnJldHVybiB4KFcudG9TdHJpbmco''@;'; put 'put ''ImJpbmFyeSIpLGVlKTtjYXNlImFycmF5IjpyZXR1cm4geChudChXKSxlZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2VlLnR5cGUpfWZ1bmN0aW9uIHgoVyxlZSl7dmFyIG9lPShlZXx8e30pLmRlbnNlP1tdOnt9O2lmKCFXLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3JldHVybiBvZVsiIXJlZiJdPUppKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLG9lfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiB3KFcsZWUpe3JldHVybiBlaChnKFcsZWUpLGVlKX0sdG9fc2hlZXQ6Zyxmcm9tX3NoZWV0OmZ1''@;'; put 'put ''bmN0aW9uIFYoVyl7Zm9yKHZhciBvZSxlZT1bIntcXHJ0ZjFcXGFuc2kiXSxsZT1TYShXWyIhcmVmIl0pLGRlPUFycmF5LmlzQXJyYXkoVyksRGU9bGUucy5yO0RlPD1sZS5lLnI7KytEZSl7ZWUucHVzaCgiXFx0cm93ZFxcdHJhdXRvZml0MSIpO2Zvcih2YXIgUmU9bGUucy5jO1JlPD1sZS5l''@;'; put 'put ''LmM7KytSZSllZS5wdXNoKCJcXGNlbGx4IisoUmUrMSkpO2ZvcihlZS5wdXNoKCJcXHBhcmRcXGludGJsIiksUmU9bGUucy5jO1JlPD1sZS5lLmM7KytSZSl7dmFyIFZlPUtyKHtyOkRlLGM6UmV9KTsob2U9ZGU/KFdbRGVdfHxbXSlbUmVdOldbVmVdKSYmKG51bGwhPW9lLnZ8fG9lLmYmJiFv''@;'; put 'put ''ZS5GKSYmKGVlLnB1c2goIiAiKyhvZS53fHwobGMob2UpLG9lLncpKSksZWUucHVzaCgiXFxjZWxsIikpfWVlLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBlZS5qb2luKCIiKSsifSJ9fX0oKTtmdW5jdGlvbiBWXyhnKXt2YXIgeD1nLnNsaWNlKCIjIj09PWdbMF0/MTowKS5z''@;'; put 'put ''bGljZSgwLDYpO3JldHVybltwYXJzZUludCh4LnNsaWNlKDAsMiksMTYpLHBhcnNlSW50KHguc2xpY2UoMiw0KSwxNikscGFyc2VJbnQoeC5zbGljZSg0LDYpLDE2KV19ZnVuY3Rpb24gaTIoZyl7Zm9yKHZhciB4PTAsdz0xOzMhPXg7Kyt4KXc9MjU2KncrKGdbeF0+MjU1PzI1NTpnW3hdPDA/''@;'; put 'put ''MDpnW3hdKTtyZXR1cm4gdy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX1mdW5jdGlvbiBTZChnLHgpe2lmKG51bGw9PWcpcmV0dXJuIG51bGwhPXg7aWYobnVsbD09eClyZXR1cm4hMDtpZigxPT1nLmF1dG8mJjE9PXguYXV0bylyZXR1cm4hMTtpZighIWcuYXV0byE9ISF4''@;'; put 'put ''LmF1dG98fG51bGw9PWcudGhlbWUhPShudWxsPT14LnRoZW1lKSlyZXR1cm4hMDtpZihudWxsIT1nLnRoZW1lKXJldHVybiBnLnRoZW1lIT14LnRoZW1lfHxnLnRpbnQhPXgudGludDtpZihudWxsPT1nLnJnYiYmbnVsbD09eC5yZ2IpcmV0dXJuITE7dmFyIHc9Zy5yZ2I7Im51bWJlciI9PXR5''@;'; put 'put ''cGVvZiB3JiYodz13LnRvU3RyaW5nKDE2KSksdz13LnNsaWNlKC02KTt2YXIgVj14LnJnYjtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFYmJihWPVYudG9TdHJpbmcoMTYpKSxWPVYuc2xpY2UoLTYpLHcudG9Mb3dlckNhc2UoKSE9Vi50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFM3KGcseCl7cmV0''@;'; put 'put ''dXJuIG51bGw9PWc/bnVsbCE9eDpudWxsPT14P251bGwhPWc6Zy5zdHlsZSE9eC5zdHlsZXx8U2QoZy5jb2xvcix4LmNvbG9yKX1mdW5jdGlvbiBNNyhnLHgpe2lmKDA9PT14KXJldHVybiBnO3ZhciB3PWZ1bmN0aW9uIG5SKGcpe3ZhciB4PWdbMF0vMjU1LHc9Z1sxXS8yNTUsVj1nWzJdLzI1''@;'; put 'put ''NSxXPU1hdGgubWF4KHgsdyxWKSxlZT1NYXRoLm1pbih4LHcsViksbGU9Vy1lZTtpZigwPT09bGUpcmV0dXJuWzAsMCx4XTt2YXIgZGUsb2U9MCxEZT1XK2VlO3N3aXRjaChkZT1sZS8oRGU+MT8yLURlOkRlKSxXKXtjYXNlIHg6b2U9KCh3LVYpL2xlKzYpJTY7YnJlYWs7Y2FzZSB3Om9lPShW''@;'; put 'put ''LXgpL2xlKzI7YnJlYWs7Y2FzZSBWOm9lPSh4LXcpL2xlKzR9cmV0dXJuW29lLzYsZGUsRGUvMl19KFZfKGcpKTtyZXR1cm4gd1syXT14PDA/d1syXSooMSt4KToxLSgxLXdbMl0pKigxLXgpLGkyKGZ1bmN0aW9uIHBVKGcpe3ZhciBkZSx3PWdbMV0sVj1nWzJdLFc9Mip3KihWPC41P1Y6MS1W''@;'; put 'put ''KSxlZT1WLVcvMixsZT1bZWUsZWUsZWVdLG9lPTYqZ1swXTtpZigwIT09dylzd2l0Y2goMHxvZSl7Y2FzZSAwOmNhc2UgNjpkZT1XKm9lLGxlWzBdKz1XLGxlWzFdKz1kZTticmVhaztjYXNlIDE6bGVbMF0rPWRlPVcqKDItb2UpLGxlWzFdKz1XO2JyZWFrO2Nhc2UgMjpkZT1XKihvZS0yKSxs''@;'; put 'put ''ZVsxXSs9VyxsZVsyXSs9ZGU7YnJlYWs7Y2FzZSAzOmxlWzFdKz1kZT1XKig0LW9lKSxsZVsyXSs9VzticmVhaztjYXNlIDQ6ZGU9Vyoob2UtNCksbGVbMl0rPVcsbGVbMF0rPWRlO2JyZWFrO2Nhc2UgNTpsZVsyXSs9ZGU9VyooNi1vZSksbGVbMF0rPVd9Zm9yKHZhciBEZT0wOzMhPURlOysr''@;'; put 'put ''RGUpbGVbRGVdPU1hdGgucm91bmQoMjU1KmxlW0RlXSk7cmV0dXJuIGxlfSh3KSl9dmFyIHhsPTY7ZnVuY3Rpb24gS2woZyl7cmV0dXJuIE1hdGguZmxvb3IoKGcrTWF0aC5yb3VuZCgxMjgveGwpLzI1NikqeGwpfWZ1bmN0aW9uIHg3KGcpe3JldHVybiBNYXRoLmZsb29yKChnLTUpL3hsKjEw''@;'; put 'put ''MCsuNSkvMTAwfWZ1bmN0aW9uIEtzKGcpe3JldHVybiBNYXRoLnJvdW5kKChnKnhsKzUpL3hsKjI1NikvMjU2fWZ1bmN0aW9uIG0xKGcpe2cuYmVzdEZpdCYmZGVsZXRlIGcuYmVzdEZpdCxnLndpZHRoPyhnLndweD1LbChnLndpZHRoKSxnLndjaD14NyhnLndweCksZy5NRFc9eGwpOmcud3B4''@;'; put 'put ''PyhnLndjaD14NyhnLndweCksZy53aWR0aD1LcyhnLndjaCksZy5NRFc9eGwpOiJudW1iZXIiPT10eXBlb2YgZy53Y2gmJihnLndpZHRoPUtzKGcud2NoKSxnLndweD1LbChnLndpZHRoKSxnLk1EVz14bCksZy5jdXN0b21XaWR0aCYmZGVsZXRlIGcuY3VzdG9tV2lkdGh9dmFyIFBnPTk2O2Z1''@;'; put 'put ''bmN0aW9uIEUzKGcpe3JldHVybiA3MipnL1BnfWZ1bmN0aW9uIGxoKGcpe3JldHVybiBnKlBnLzcyfWZ1bmN0aW9uIEZnKGcpe1BnPWc9e29zeDo3Mix3aW46OTYsd2luMTAwOjk2LHdpbjEyNToxMjAsd2luMTUwOjE0NH1bZ118fGd8fDk2LFBNPUNtW2ddfWZ1bmN0aW9uIFQ3KGcpe2cuaHB4''@;'; put 'put ''P2cuaHB0PUUzKGcuaHB4KTpnLmhwdCYmKGcuaHB4PWxoKGcuaHB0KSl9dmFyIGlSPXtOb25lOiJub25lIixTb2xpZDoic29saWQiLEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0''@;'; put 'put ''U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFnQ3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3Ry''@;'; put 'put ''aXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRHcmlkIn0sZ1U9SWUoaVIpLGFSPXtvcmFuZ2U6MTY3NTM5MjAsYmxhY2s6MCxuYXZ5OjEyOCxibHVlOjI1NSxncmVlbjozMjc2OCx0ZWFsOjMyODk2LGxpbWU6''@;'; put 'put ''NjUyODAsYXF1YTo2NTUzNSxzaWx2ZXI6MTI2MzIyNTYsbWFyb29uOjgzODg2MDgscHVycGxlOjgzODg3MzYsb2xpdmU6ODQyMTM3NixncmF5Ojg0MjE1MDQscmVkOjE2NzExNjgwLGZ1Y2hzaWE6MTY3MTE5MzUseWVsbG93OjE2Nzc2OTYwLHdoaXRlOjE2Nzc3MjE1fTtmdW5jdGlvbiB3bShn''@;'; put 'put ''LHgpe2lmKGcucmVwbGFjZSgiIyIsIiIpLm1hdGNoKC9eWzAtOWEtZkEtRl17Nn0kLykpcmV0dXJuIHBhcnNlSW50KGcucmVwbGFjZSgiIyIsIiIpLDE2KTtpZihhUltnXSlyZXR1cm4gYVJbZ107dmFyIHc9Zy5tYXRjaCgvcmdiXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxz''@;'; put 'put ''KlwpLyk7aWYodylyZXR1cm4oK3dbMV08PDE2KSsoK3dbMl08PDgpKyArd1szXTtpZih3PWcubWF0Y2goL3JnYmFcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqKFxkKikvKSlyZXR1cm4gMCE9KHdbNF0mJndbNF0ubGVuZ3RoPjAmJit3WzRdfHwwKXx8K3dbMV0+MHx8K3db''@;'; put 'put ''Ml0+MHx8K3dbM10+MD8oK3dbMV08PDE2KSsoK3dbMl08PDgpKyArd1szXTp4Py0xOjE2Nzc3MjE1O3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBIVE1MIGNvbG9yICIrZyl9dmFyIENtPXt9O2Z1bmN0aW9uIEE3KGcpe2c9Z3x8OTY7dmFyIHg9e0NhbGlicmk6W10sQXJpYWw6W10sIlNwYXJr''@;'; put 'put ''YXNzZSBSZyI6W10sXHU1YjhiXHU0ZjUzOltdLFx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZjpbXSwiQ2VudHVyeSBHb3RoaWMiOltdfTtyZXR1cm4geC5DYWxpYnJpWzExXT03LHguQ2FsaWJyaVsxMl09ezcyOjYsOTY6OCwxMjA6MTAsMTQ0OjEyfVtnXXx8OCx4LkNhbGlicmlbMTNd''@;'; put 'put ''PTEwLHguQ2FsaWJyaVsxNF09MTEseC5DYWxpYnJpWzE2XT0xMix4LkNhbGlicmlbMThdPTE0LHguQ2FsaWJyaVsyMF09MTYseC5cdTViOGJcdTRmNTNbMTFdPTgseC5cdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWZbMTFdPTgseFsiU3Bhcmthc3NlIFJnIl1bMTFdPTcseC5BcmlhbFsx''@;'; put 'put ''MF09Nyx4WyJDZW50dXJ5IEdvdGhpYyJdWzEyXT05LHh9Q21bNzJdPUE3KDcyKSxDbVs5Nl09QTcoOTYpLENtWzEyMF09QTcoMTIwKSxDbVsxNDRdPUE3KDE0NCk7dmFyIFBNPUNtWzk2XTtmdW5jdGlvbiBvUihnKXtyZXR1cm4oUE1bZy5uYW1lfHxnLkZvbnROYW1lXXx8W10pW2cuc3p8fGcu''@;'; put 'put ''U2l6ZV19ZnVuY3Rpb24gU20oZyl7aWYoZyl7dmFyIHg9b1IoZyk7aWYoeClyZXR1cm4geGw9eH1yZXR1cm4geGw9Nn1mdW5jdGlvbiBCXyhnLHgsdyl7cmV0dXJuIGkyKGZ1bmN0aW9uIHNSKGcseCx3KXtyZXR1cm5bTWF0aC5yb3VuZCh4WzBdKncrZ1swXSooMS13KSksTWF0aC5yb3VuZCh4''@;'; put 'put ''WzFdKncrZ1sxXSooMS13KSksTWF0aC5yb3VuZCh4WzJdKncrZ1syXSooMS13KSldfShWXygibnVtYmVyIj09dHlwZW9mIGcucmdiPygiMDAwMDAiK2cudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6Zy5yZ2IpLFZfKCJudW1iZXIiPT10eXBlb2YgeC5yZ2I/KCIwMDAwMCIreC50b1N0cmluZygx''@;'; put 'put ''NikpLnNsaWNlKC02KTp4LnJnYiksdykpfWZ1bmN0aW9uIEhvKGcseCx3KXtpZih3KXN3aXRjaCgrZyl7Y2FzZSA2NDpnPTY1O2JyZWFrO2Nhc2UgNjU6Zz02NH12YXIgVj14JiZ4WytnXXx8dmxbK2ddfHx0N1srZy0yMDBdO2lmKDgxPT0rZyYmKFY9dmxbMV0pLFZ8fChWPXZsWzFdKSwhVil0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImJhZCBJQ1YgaW5kZXggIitnKTtyZXR1cm4gaTIoVil9ZnVuY3Rpb24gbFIoZyx4LHcpe3ZhciBWPXt9O3JldHVybiBudWxsIT1nLmluZGV4ZWQmJihWLmluZGV4PXBhcnNlSW50KGcuaW5kZXhlZCwxMCksVi5yZ2I9SG8oVi5pbmRleCx4LkluZGV4ZWQpKSxudWxs''@;'; put 'put ''IT1nLnRoZW1lJiYoVi50aGVtZT1wYXJzZUludChnLnRoZW1lLDEwKSksbnVsbCE9Zy50aW50JiYoVi50aW50PXBhcnNlRmxvYXQoZy50aW50KSksbnVsbCE9Zy5yZ2ImJihWLnJnYj1nLnJnYi5zbGljZSgtNikpLG51bGwhPVYudGhlbWUmJiFWLnJnYiYmdy50aGVtZUVsZW1lbnRzJiYoVi5y''@;'; put 'put ''Z2I9TTcody50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtWLnRoZW1lXS5yZ2IsVi50aW50fHwwKSxWLnJhd19yZ2I9dy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtWLnRoZW1lXS5yZ2IpLFZ9ZnVuY3Rpb24gY1IoZyx4LHcsVil7eC5Cb3JkZXJzPVtdO3ZhciBXPXt9LGVlPXt9LGxlPSExOyhn''@;'; put 'put ''WzBdLm1hdGNoKEd0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBkZT1mcihvZSk7c3dpdGNoKCRpKGRlWzBdKSl7Y2FzZSI8Ym9yZGVycyI6Y2FzZSI8Ym9yZGVycz4iOmNhc2UiPC9ib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcj4iOmNhc2UiPGxlZnQvPiI6Y2FzZSI8L2xlZnQ+Ijpj''@;'; put 'put ''YXNlIjxyaWdodC8+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0b3AvPiI6Y2FzZSI8L3RvcD4iOmNhc2UiPGJvdHRvbS8+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2FzZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9y''@;'; put 'put ''aXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2FzZSI8dmVydGljYWwvPiI6Y2FzZSI8c3RhcnQiOmNhc2UiPHN0YXJ0PiI6Y2FzZSI8c3RhcnQvPiI6Y2FzZSI8L3N0YXJ0PiI6Y2FzZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNl''@;'; put 'put ''IjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGJvcmRlciI6Y2FzZSI8Ym9yZGVyPiI6Y2FzZSI8Ym9yZGVyLz4iOlc9e30sZGUuZGlhZ29uYWxV''@;'; put 'put ''cCYmKFcuZGlhZ29uYWxVcD1JcihkZS5kaWFnb25hbFVwKSksZGUuZGlhZ29uYWxEb3duJiYoVy5kaWFnb25hbERvd249SXIoZGUuZGlhZ29uYWxEb3duKSkseC5Cb3JkZXJzLnB1c2goVyk7YnJlYWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4iOmVlPVcubGVmdD17fSxkZS5zdHlsZSYmKGVl''@;'; put 'put ''LnN0eWxlPWRlLnN0eWxlKTticmVhaztjYXNlIjxyaWdodCI6Y2FzZSI8cmlnaHQ+IjplZT1XLnJpZ2h0PXt9LGRlLnN0eWxlJiYoZWUuc3R5bGU9ZGUuc3R5bGUpO2JyZWFrO2Nhc2UiPHRvcCI6Y2FzZSI8dG9wPiI6ZWU9Vy50b3A9e30sZGUuc3R5bGUmJihlZS5zdHlsZT1kZS5zdHlsZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjplZT1XLmJvdHRvbT17fSxkZS5zdHlsZSYmKGVlLnN0eWxlPWRlLnN0eWxlKTticmVhaztjYXNlIjwvZGlhZ29uYWw+IjpXLmRpYWdvbmFsPWVlLGVlPXt9O2JyZWFrO2Nhc2UiPC9ob3Jpem9udGFsPiI6Vy5ob3Jpem9udGFsPWVl''@;'; put 'put ''LGVlPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOlcudmVydGljYWw9ZWUsZWU9e307YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6ZWUuY29sb3J8fChlZS5jb2xvcj17fSksZGUuYXV0byYmKGVlLmNvbG9yLmF1dG89SXIoZGUuYXV0bykpLG51bGwhPWRlLnJnYj9lZS5jb2xv''@;'; put 'put ''ci5yZ2I9ZGUucmdiLnNsaWNlKC02KTpkZS5pbmRleGVkPyhlZS5jb2xvci5pbmRleD1wYXJzZUludChkZS5pbmRleGVkLDEwKSxlZS5jb2xvci5yZ2I9SG8oZWUuY29sb3IuaW5kZXgseC5JbmRleGVkLCExKSk6ZGUudGhlbWUmJihlZS5jb2xvci50aGVtZT1wYXJzZUludChkZS50aGVtZSwx''@;'; put 'put ''MCksZGUudGludCYmKGVlLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChkZS50aW50KSksZGUudGhlbWUmJncudGhlbWVFbGVtZW50cyYmdy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGVlLmNvbG9yLnJnYj1NNyh3LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2VlLmNvbG9yLnRoZW1lXS5yZ2Is''@;'; put 'put ''ZWUuY29sb3IudGludHx8MCkpKSwhZGUuYXV0byYmbnVsbD09ZGUucmdiJiYhZGUuaW5kZXhlZCYmZGVsZXRlIGVlLmNvbG9yO2JyZWFrO2Nhc2UiPGV4dCI6bGU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmxlPSExO2JyZWFrO2RlZmF1bHQ6aWYoViYmVi5XVEYmJiFsZSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoInVucmVjb2duaXplZCAiK2RlWzBdKyIgaW4gYm9yZGVycyIpfX0pfWZ1bmN0aW9uIGs3KGcseCl7dmFyIHc9WyI8Iit4XTtyZXR1cm4gZyYmZy5zdHlsZT8ody5wdXNoKCcgc3R5bGU9IicrZy5zdHlsZSsnIicpLGcuY29sb3I/KHcucHVzaCgiPiIpLHcucHVzaChnZihnLmNvbG9yLCEw''@;'; put 'put ''KSksdy5qb2luKCIiKSsiPC8iK3grIj4iKTp3LmpvaW4oIiIpKyIvPiIpOndbMF0rIi8+In1mdW5jdGlvbiBjaChnLHgsdyxWKXt4LkZpbGxzPVtdO3ZhciBXPXt9LGVlPXt9LGxlPSExLG9lPSExOyhnWzBdLm1hdGNoKEd0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oZGUpe3ZhciBEZT1mcihk''@;'; put 'put ''ZSk7c3dpdGNoKCRpKERlWzBdKSl7Y2FzZSI8ZmlsbHMiOmNhc2UiPGZpbGxzPiI6Y2FzZSI8L2ZpbGxzPiI6Y2FzZSI8L2ZpbGw+IjpjYXNlIjwvZ3JhZGllbnRGaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+''@;'; put 'put ''IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxzdG9wLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOnguRmlsbHMucHVzaChXPXt9KTticmVhaztjYXNl''@;'; put 'put ''IjxncmFkaWVudEZpbGw+IjpXLnN0b3BzPVtdO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbCI6Vy5zdG9wcz1bXSxEZS5kZWdyZWUmJihXLmFuZ2xlPStEZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsIjpjYXNlIjxwYXR0ZXJuRmlsbD4iOkRlLnBhdHRlcm5UeXBlJiYoVy5wYXR0''@;'; put 'put ''ZXJuVHlwZT1EZS5wYXR0ZXJuVHlwZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6aWYobGUpdGhyb3cgbmV3IEVycm9yKCJiYWQgc3RvcCIpO2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxiZ0NvbG9yIjpjYXNlIjxmZ0NvbG9yIjp2YXIgUmU9JGko''@;'; put 'put ''RGVbMF0pLnNsaWNlKDEpOyJjb2xvciIhPVJlJiYhV1tSZV0mJihXW1JlXT17fSk7dmFyIFZlPWxlP2VlOldbUmVdO251bGwhPURlLmluZGV4ZWQmJihWZS5pbmRleD1wYXJzZUludChEZS5pbmRleGVkLDEwKSxWZS5yZ2I9SG8oVmUuaW5kZXgseC5JbmRleGVkKSksbnVsbCE9RGUudGhlbWUm''@;'; put 'put ''JihWZS50aGVtZT1wYXJzZUludChEZS50aGVtZSwxMCkpLG51bGwhPURlLnRpbnQmJihWZS50aW50PXBhcnNlRmxvYXQoRGUudGludCkpLG51bGwhPURlLnJnYiYmKFZlLnJnYj1EZS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1EZS5hdXRvJiZkZWxldGUgV1tSZV0sbnVsbCE9VmUudGhlbWUmJiFW''@;'; put 'put ''ZS5yZ2ImJncudGhlbWVFbGVtZW50cyYmKFZlLnJnYj1NNyh3LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1ZlLnRoZW1lXS5yZ2IsVmUudGludHx8MCksVi5XVEYmJihWZS5yYXdfcmdiPXcudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbVmUudGhlbWVdLnJnYikpO2JyZWFrO2Nhc2UiPHN0b3A+''@;'; put 'put ''IjpsZT0hMCxlZT17fTticmVhaztjYXNlIjxzdG9wIjpsZT0hMCxlZT17fSxudWxsIT1EZS5wb3NpdGlvbiYmKGVlLnY9cGFyc2VGbG9hdChEZS5wb3NpdGlvbikpO2JyZWFrO2Nhc2UiPC9zdG9wPiI6bGU9ITEsVy5zdG9wcy5wdXNoKGVlKTticmVhaztjYXNlIjxleHQiOm9lPSEwO2JyZWFr''@;'; put 'put ''O2Nhc2UiPC9leHQ+IjpvZT0hMTticmVhaztkZWZhdWx0OmlmKFYmJlYuV1RGJiYhb2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitEZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24gaFIoZyx4LHcsVil7eC5Gb250cz1bXTt2YXIgVz17fSxlZT0hMTsoZ1swXS5tYXRjaChH''@;'; put 'put ''dCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGxlKXt2YXIgb2U9ZnIobGUpO3N3aXRjaCgkaShvZVswXSkpe2Nhc2UiPGZvbnRzIjpjYXNlIjxmb250cz4iOmNhc2UiPC9mb250cz4iOmJyZWFrO2Nhc2UiPGZvbnQiOmNhc2UiPGZvbnQ+IjppZigiLz4iIT1sZS5zbGljZSgtMikpYnJlYWs7Y2Fz''@;'; put 'put ''ZSI8L2ZvbnQ+IjpjYXNlIjxmb250Lz4iOnguRm9udHMucHVzaChXKSxXPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOm9lLnZhbCYmKFcubmFtZT1ibyhvZS52YWwpKTticmVhaztjYXNlIjxuYW1lLz4iOmNhc2UiPC9uYW1lPiI6YnJlYWs7Y2FzZSI8YiI6Vy5ib2xkPW9lLnZhbD9JcihvZS52YWwp''@;'; put 'put ''OjE7YnJlYWs7Y2FzZSI8Yi8+IjpjYXNlIjxiPiI6Vy5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjpXLml0YWxpYz1vZS52YWw/SXIob2UudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6Y2FzZSI8aT4iOlcuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNl''@;'; put 'put ''Ijx1Ijpzd2l0Y2gob2UudmFsKXtjYXNlIm5vbmUiOlcudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOlcudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSJkb3VibGUiOlcudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpXLnVuZGVybGluZT0zMzticmVhaztjYXNl''@;'; put 'put ''ImRvdWJsZUFjY291bnRpbmciOlcudW5kZXJsaW5lPTM0fWJyZWFrO2Nhc2UiPHUvPiI6Y2FzZSI8dT4iOlcudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxzdHJpa2UiOlcuc3RyaWtlPW9lLnZhbD9JcihvZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOlcu''@;'; put 'put ''c3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGluZSI6Vy5vdXRsaW5lPW9lLnZhbD9JcihvZS52YWwpOjE7YnJlYWs7Y2FzZSI8b3V0bGluZS8+IjpXLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFkb3ciOlcuc2hhZG93PW9lLnZhbD9JcihvZS52YWwpOjE7YnJlYWs7Y2FzZSI8c2hhZG93Lz4i''@;'; put 'put ''Olcuc2hhZG93PTE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UiOlcuY29uZGVuc2U9b2UudmFsP0lyKG9lLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpXLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5kIjpXLmV4dGVuZD1vZS52YWw/SXIob2UudmFsKToxO2JyZWFrO2Nhc2UiPGV4''@;'; put 'put ''dGVuZC8+IjpXLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6IjpvZS52YWwmJihXLnN6PStvZS52YWwpO2JyZWFrO2Nhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmJyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6Im5vbmUiIT0ob2UudmFsfHwibm9uZSIpJiYoVy52YWxpZ249b2UudmFsLnJlcGxhY2UoInNj''@;'; put 'put ''cmlwdCIsIiIpKTticmVhaztjYXNlIjx2ZXJ0QWxpZ24vPiI6Y2FzZSI8L3ZlcnRBbGlnbj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6b2UudmFsJiYoVy5mYW1pbHk9cGFyc2VJbnQob2UudmFsLDEwKSk7YnJlYWs7Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxz''@;'; put 'put ''Y2hlbWUiOm9lLnZhbCYmKFcuc2NoZW1lPW9lLnZhbCk7YnJlYWs7Y2FzZSI8c2NoZW1lLz4iOmNhc2UiPC9zY2hlbWU+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PW9lLnZhbClicmVhaztvZS5jb2RlcGFnZT1EW3BhcnNlSW50KG9lLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9y''@;'; put 'put ''IjpXLmNvbG9yfHwoVy5jb2xvcj17fSksb2UuYXV0byYmKFcuY29sb3IuYXV0bz1JcihvZS5hdXRvKSksb2UucmdiP1cuY29sb3IucmdiPW9lLnJnYi5zbGljZSgtNik6b2UuaW5kZXhlZD8oVy5jb2xvci5pbmRleD1wYXJzZUludChvZS5pbmRleGVkLDEwKSxXLmNvbG9yLnJnYj1IbyhXLmNv''@;'; put 'put ''bG9yLmluZGV4LHguSW5kZXhlZCkpOm9lLnRoZW1lJiYoVy5jb2xvci50aGVtZT1wYXJzZUludChvZS50aGVtZSwxMCksb2UudGludCYmKFcuY29sb3IudGludD1wYXJzZUZsb2F0KG9lLnRpbnQpKSxvZS50aGVtZSYmdy50aGVtZUVsZW1lbnRzJiZ3LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1l''@;'; put 'put ''JiYoVy5jb2xvci5yZ2I9TTcody50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtXLmNvbG9yLnRoZW1lXS5yZ2IsVy5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmVlPSEwO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PC9BbHRlcm5hdGVDb250ZW50PiI6ZWU9ITE7YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjplZT0hMDticmVhaztjYXNlIjwvZXh0PiI6ZWU9ITE7YnJlYWs7ZGVmYXVsdDppZihWJiZWLldURiYmIWVlKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBmb250cyIpfX0pfXZhciB1aD17MDoibm9uZSIsMToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGVBY2NvdW50aW5nIiwzNDoiZG91YmxlQWNjb3VudGluZyJ9LHBmPVsibnVtRm10SWQiLCJmaWxsSWQiLCJmb250SWQiLCJi''@;'; put 'put ''b3JkZXJJZCIsInhmSWQiXSxVMD1bImFwcGx5QWxpZ25tZW50IiwiYXBwbHlCb3JkZXIiLCJhcHBseUZpbGwiLCJhcHBseUZvbnQiLCJhcHBseU51bWJlckZvcm1hdCIsImFwcGx5UHJvdGVjdGlvbiIsInBpdm90QnV0dG9uIiwicXVvdGVQcmVmaXgiXSxqXz1mdW5jdGlvbigpe3ZhciBnPS88''@;'; put 'put ''KD86XHcrOik/Zm9udChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250Pi8seD0vPCg/Olx3KzopP251bUZtdChbXj5dKilcLz4vLHc9LzwoPzpcdys6KT9maWxsKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGw+LyxXPS88KD86XHcrOik/Ym9yZGVyKFtePl0qKT5bXFNcc10q''@;'; put 'put ''PzxcLyg/Olx3KzopP2JvcmRlcj4vO3JldHVybiBmdW5jdGlvbihvZSxkZSxEZSxSZSl7dmFyIGV0LGJ0LFZlPXt9LEdlPXt9O3JldHVybihldD1vZS5tYXRjaChnKSkmJihoUihldCxWZSxEZSxSZSksKFZlLkZvbnRzfHxbXSlbMF0mJlR0KEdlLFZlLkZvbnRzWzBdKSksKGV0PW9lLm1hdGNo''@;'; put 'put ''KHgpKSYmKGJ0PWZyKGJvKGV0WzBdKSksR2Uuej1idC5mb3JtYXRDb2RlP3FyKGJ0LmZvcm1hdENvZGUpOihkZS5OdW1iZXJGbXR8fFtdKVsrYnQubnVtRm10SWRdfHwiR2VuZXJhbCIpLChldD1vZS5tYXRjaCh3KSkmJihjaChldCxWZSxEZSxSZSksKFZlLkZpbGxzfHxbXSlbMF0mJlR0KEdl''@;'; put 'put ''LFZlLkZpbGxzWzBdKSksKGV0PW9lLm1hdGNoKFcpKSYmKGNSKGV0LFZlLERlLFJlKSwoVmUuQm9yZGVyc3x8W10pWzBdJiZUdChHZSxWZS5Cb3JkZXJzWzBdKSksR2V9fSgpLHpfPS88KD86XHcrOik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLEZNPS88KD86XHcrOik/dGFibGVT''@;'; put 'put ''dHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgeVI9ZnVuY3Rpb24oKXt2YXIgeD0vPCg/Olx3KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/bnVtRm10cz4vLHc9LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/''@;'; put 'put ''PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sVj0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLFc9LzwoPzpcdys6KT9jZWxsWGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxYZnM+LyxlZT0vPCg/Olx3KzopP2Zp''@;'; put 'put ''bGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sbGU9LzwoPzpcdys6KT9mb250cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250cz4vLG9lPS88KD86XHcrOik/Ym9yZGVycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9ib3JkZXJzPi8sZGU9LzwoPzpcdys6''@;'; put 'put ''KT9pbmRleGVkQ29sb3JzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2luZGV4ZWRDb2xvcnM+LyxEZT0vPCg/Olx3KzopP3RhYmxlU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP3RhYmxlU3R5bGVzPi8sUmU9LzwoPzpcdys6KT9keGZzKFtePl0qKT5bXFNcc10qPzxcLyg/''@;'; put 'put ''Olx3KzopP2R4ZnM+LztyZXR1cm4gZnVuY3Rpb24oR2UsZXQsYnQpe3ZhciBmdCxKZT17fTtyZXR1cm4gR2U/KChmdD0oR2U9R2UucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKSkubWF0Y2goZGUpKSYm''@;'; put 'put ''ZnVuY3Rpb24gSW9lKGcseCx3KXt4LkluZGV4ZWR8fCh4LkluZGV4ZWQ9W10pO3ZhciBWPSExOyhnWzBdLm1hdGNoKEd0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oVyl7dmFyIGVlPWZyKFcpO3N3aXRjaCgkaShlZVswXSkpe2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29s''@;'; put 'put ''b3JzIjpjYXNlIjxpbmRleGVkQ29sb3JzLz4iOmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8cmdiQ29sb3IiOmRlbGV0ZSBlZVswXTt2YXIgbGU9cGFyc2VJbnQo''@;'; put 'put ''ZWUucmdiLnNsaWNlKC02KSwxNik7eC5JbmRleGVkLnB1c2goW2xlPj4xNiYyNTUsbGU+PjgmMjU1LDI1NSZsZV0pO2JyZWFrO2Nhc2UiPGV4dCI6Vj0hMDticmVhaztjYXNlIjwvZXh0PiI6Vj0hMTticmVhaztkZWZhdWx0OmlmKHcmJncuV1RGJiYhVil0aHJvdyBuZXcgRXJyb3IoInVucmVj''@;'; put 'put ''b2duaXplZCAiK2VlWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShmdCxKZSxidCksKGZ0PUdlLm1hdGNoKHgpKSYmZnVuY3Rpb24gRG9lKGcseCx3KXt4Lk51bWJlckZtdD1bXTtmb3IodmFyIFY9eGUoYi5fdGFibGUpLFc9MDtXPFYubGVuZ3RoOysrVyl4Lk51bWJlckZtdFtWW1ddXT1iLl90''@;'; put 'put ''YWJsZVtWW1ddXTt2YXIgZWU9Z1swXS5tYXRjaChHdCk7aWYoZWUpZm9yKFc9MDtXPGVlLmxlbmd0aDsrK1cpe3ZhciBsZT1mcihlZVtXXSk7c3dpdGNoKCRpKGxlWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+Ijpj''@;'; put 'put ''YXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgb2U9cXIoYm8obGUuZm9ybWF0Q29kZSkpLGRlPXBhcnNlSW50KGxlLm51bUZtdElkLDEwKTtpZih4Lk51bWJlckZtdFtkZV09b2UsZGU+MCl7aWYoZGU+MzkyKXtmb3IoZGU9MzkyO2RlPjYwJiZudWxsIT14Lk51bWJlckZt''@;'; put 'put ''dFtkZV07LS1kZSk7eC5OdW1iZXJGbXRbZGVdPW9lfWIubG9hZChvZSxkZSl9YnJlYWs7ZGVmYXVsdDppZih3LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2xlWzBdKyIgaW4gbnVtRm10cyIpfX19KGZ0LEplLGJ0KSwoZnQ9R2UubWF0Y2gobGUpKSYmaFIoZnQsSmUsZXQs''@;'; put 'put ''YnQpLChmdD1HZS5tYXRjaChlZSkpJiZjaChmdCxKZSxldCxidCksKGZ0PUdlLm1hdGNoKG9lKSkmJmNSKGZ0LEplLGV0LGJ0KSwoZnQ9R2UubWF0Y2godykpJiZmdW5jdGlvbiBZcihnLHgsdyl7eC5DZWxsU3R5bGVYZj1bXTt2YXIgVixXPSExOyhnWzBdLm1hdGNoKEd0KXx8W10pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oZWUpe3ZhciBsZT1mcihlZSksb2U9MDtzd2l0Y2goJGkobGVbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2VsbFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVu''@;'; put 'put ''dD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShWPWxlKVswXSxvZT0wO29lPHBmLmxlbmd0aDsrK29lKVZbcGZb''@;'; put 'put ''b2VdXSYmKFZbcGZbb2VdXT1wYXJzZUludChWW3BmW29lXV0sMTApKTtmb3Iob2U9MDtvZTxVMC5sZW5ndGg7KytvZSlWW1UwW29lXV0mJihWW1UwW29lXV09SXIoVltVMFtvZV1dKSk7aWYoeC5OdW1iZXJGbXQmJlYubnVtRm10SWQ+MzkyKWZvcihvZT0zOTI7b2U+NjA7LS1vZSlpZih4Lk51''@;'; put 'put ''bWJlckZtdFtWLm51bUZtdElkXT09eC5OdW1iZXJGbXRbb2VdKXtWLm51bUZtdElkPW9lO2JyZWFrfXguQ2VsbFN0eWxlWGYucHVzaChWKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgZGU9e307bGUudmVydGljYWwmJihkZS52ZXJ0aWNhbD1sZS52ZXJ0''@;'; put 'put ''aWNhbCksbGUuaG9yaXpvbnRhbCYmKGRlLmhvcml6b250YWw9bGUuaG9yaXpvbnRhbCksbnVsbCE9bGUudGV4dFJvdGF0aW9uJiYoZGUudGV4dFJvdGF0aW9uPWxlLnRleHRSb3RhdGlvbiksbGUuaW5kZW50JiYoZGUuaW5kZW50PWxlLmluZGVudCksbGUud3JhcFRleHQmJihkZS53cmFwVGV4''@;'; put 'put ''dD1sZS53cmFwVGV4dCksbGUuc2hyaW5rVG9GaXQmJihkZS5zaHJpbmtUb0ZpdD1JcihsZS5zaHJpbmtUb0ZpdCkpLFYuYWxpZ25tZW50PWRlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOlYucHJvdGVjdGlvbj17fSxJcihsZS5oaWRkZW4pJiYoVi5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVs''@;'; put 'put ''bCE9bGUubG9ja2VkJiYoVi5wcm90ZWN0aW9uLmVkaXRhYmxlPSFJcihsZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOlc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlc9ITE7YnJlYWs7ZGVmYXVsdDppZih3JiZ3LldURiYmIVcpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitsZVsw''@;'; put 'put ''XSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShmdCxKZSxidCksKGZ0PUdlLm1hdGNoKFYpKSYmZnVuY3Rpb24gZ1IoZyx4LHcpe3guQ2VsbFN0eWxlWGZ8fCh4LkNlbGxTdHlsZVhmPVtdKTt2YXIgVj0hMTsoZ1swXS5tYXRjaChHdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFcpe3ZhciBlZT1m''@;'; put 'put ''cihXKTtzd2l0Y2goJGkoZWVbMF0pKXtjYXNlIjxjZWxsU3R5bGVzIjpjYXNlIjxjZWxsU3R5bGVzPiI6Y2FzZSI8Y2VsbFN0eWxlcy8+IjpjYXNlIjwvY2VsbFN0eWxlcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9jZWxsU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2Ui''@;'; put 'put ''PC9leHRMc3Q+IjpicmVhaztjYXNlIjxjZWxsU3R5bGUiOmNhc2UiPGNlbGxTdHlsZS8+IjpkZWxldGUgZWVbMF07dmFyIGxlPStlZS54ZklkO2lmKHguQ2VsbFN0eWxlWGZbbGVdKXguQ2VsbFN0eWxlWGZbbGVdLnN0eWxlPWJvKGVlLm5hbWUpO2Vsc2UgaWYoIWVlLmJ1aWx0aW5JZCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIENlbGxTdHlsZSAiK2xlKTticmVhaztjYXNlIjxleHQiOlY9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlY9ITE7YnJlYWs7ZGVmYXVsdDppZih3JiZ3LldURiYmIVYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitlZVswXSsiIGluIGNl''@;'; put 'put ''bGxTdHlsZXMiKX19KX0oZnQsSmUsYnQpLChmdD1HZS5tYXRjaChXKSkmJmZ1bmN0aW9uIHBSKGcseCx3KXt4LkNlbGxYZj1bXTt2YXIgVixXPSExOyhnWzBdLm1hdGNoKEd0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBsZT1mcihlZSksb2U9MDtzd2l0Y2goJGkobGVbMF0pKXtj''@;'; put 'put ''YXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+Ijpj''@;'; put 'put ''YXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoVj1sZSlbMF0sb2U9MDtvZTxwZi5sZW5ndGg7KytvZSlWW3BmW29lXV0mJihWW3BmW29lXV09cGFyc2VJbnQoVltwZltvZV1dLDEwKSk7Zm9yKG9lPTA7b2U8VTAubGVuZ3RoOysrb2UpVltVMFtv''@;'; put 'put ''ZV1dJiYoVltVMFtvZV1dPUlyKFZbVTBbb2VdXSkpO2lmKHguTnVtYmVyRm10JiZWLm51bUZtdElkPjM5Milmb3Iob2U9MzkyO29lPjYwOy0tb2UpaWYoeC5OdW1iZXJGbXRbVi5udW1GbXRJZF09PXguTnVtYmVyRm10W29lXSl7Vi5udW1GbXRJZD1vZTticmVha314LkNlbGxTdHlsZVhmJiZW''@;'; put 'put ''LnhmSWQmJnguQ2VsbFN0eWxlWGZbVi54ZklkXSYmeC5DZWxsU3R5bGVYZltWLnhmSWRdLnN0eWxlJiYoVi5zdHlsZT14LkNlbGxTdHlsZVhmW1YueGZJZF0uc3R5bGUpLHguQ2VsbFhmLnB1c2goVik7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGRlPXt9''@;'; put 'put ''O2xlLnZlcnRpY2FsJiYoZGUudmVydGljYWw9bGUudmVydGljYWwpLGxlLmhvcml6b250YWwmJihkZS5ob3Jpem9udGFsPWxlLmhvcml6b250YWwpLG51bGwhPWxlLnRleHRSb3RhdGlvbiYmKGRlLnRleHRSb3RhdGlvbj1sZS50ZXh0Um90YXRpb24pLGxlLmluZGVudCYmKGRlLmluZGVudD1s''@;'; put 'put ''ZS5pbmRlbnQpLGxlLndyYXBUZXh0JiYoZGUud3JhcFRleHQ9SXIobGUud3JhcFRleHQpKSxsZS5zaHJpbmtUb0ZpdCYmKGRlLnNocmlua1RvRml0PUlyKGxlLnNocmlua1RvRml0KSksVi5hbGlnbm1lbnQ9ZGU7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6Vi5wcm90ZWN0aW9uPXt9LElyKGxl''@;'; put 'put ''LmhpZGRlbikmJihWLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1sZS5sb2NrZWQmJihWLnByb3RlY3Rpb24uZWRpdGFibGU9IUlyKGxlLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6Vz0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVu''@;'; put 'put ''dD4iOmNhc2UiPC9leHQ+IjpXPSExO2JyZWFrO2RlZmF1bHQ6aWYodyYmdy5XVEYmJiFXKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbGVbMF0rIiBpbiBjZWxsWGZzIil9fSl9KGZ0LEplLGJ0KSwoZnQ9R2UubWF0Y2goUmUpKSYmZnVuY3Rpb24gdlUoZyx4LHcsVil7eC5EWEZ8''@;'; put 'put ''fCh4LkRYRj1bXSksKGdbMF0ubWF0Y2goel8pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihXKXt4LkRYRi5wdXNoKGpfKFcseCx3LFYpKX0pfShmdCxKZSxldCxidCksKGZ0PUdlLm1hdGNoKERlKSkmJmZ1bmN0aW9uIF9VKGcseCx3LFYpe3guVGFibGV8fCh4LlRhYmxlPVtdKSwoZ1swXS5tYXRj''@;'; put 'put ''aChGTSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFcpe3guVGFibGUucHVzaChmdW5jdGlvbiBKYShnLHgsdyxWKXt2YXIgVz0hMSxlZT17fTtyZXR1cm4oZy5tYXRjaChHdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGxlKXt2YXIgb2U9ZnIobGUpO3N3aXRjaCgkaShvZVswXSkpe2Nhc2UiPHRh''@;'; put 'put ''YmxlU3R5bGU+IjpjYXNlIjx0YWJsZVN0eWxlIjplZS5uYW1lPW9lLm5hbWUucmVwbGFjZSgvXihUYWJsZXxQaXZvdClTdHlsZS8sIiIpLGVlLnJhd25hbWU9b2UubmFtZSxlZS5waXZvdD0hb2UucGl2b3R8fElyKG9lLnBpdm90KSxlZS50YWJsZT0hb2UudGFibGV8fElyKG9lLnRhYmxlKTti''@;'; put 'put ''cmVhaztjYXNlIjx0YWJsZVN0eWxlLz4iOmNhc2UiPC90YWJsZVN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUVsZW1lbnQiOmlmKG9lLnR5cGUmJm9lLmR4ZklkKXtpZigheC5EWEZ8fCF4LkRYRlsrb2Uu''@;'; put 'put ''ZHhmSWRdKXRocm93IG5ldyBFcnJvcihsZSsiIGNhbm5vdCBmaW5kIERYRiIpO2VlW29lLnR5cGVdPXguRFhGWytvZS5keGZJZF19YnJlYWs7Y2FzZSI8ZXh0IjpXPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpXPSExO2JyZWFrO2RlZmF1bHQ6aWYoViYmVi5XVEYmJiFXKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiB0YWJsZVN0eWxlIil9fSksZWV9KFcseCwwLFYpKX0pfShmdCxKZSwwLGJ0KSwoSmUuRm9udHN8fFtdKVswXSYmU20oSmUuRm9udHNbMF0pLEplKTpKZX19KCksTk09enIoInN0eWxlU2hlZXQiLG51bGwse3htbG5zOlJvLm1haW5bMF0sInht''@;'; put 'put ''bG5zOnZ0IjpSby52dH0pO2Z1bmN0aW9uIHdVKGcseCl7dmFyIFYsdz1ba2ksTk1dO2cuU1NGJiZudWxsIT0oVj1mdW5jdGlvbiBmUihnKXt2YXIgeD1bIjxudW1GbXRzPiJdO3JldHVybltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24odyl7Zm9yKHZh''@;'; put 'put ''ciBWPXdbMF07Vjw9d1sxXTsrK1YpbnVsbCE9Z1tWXSYmKHhbeC5sZW5ndGhdPXpyKCJudW1GbXQiLG51bGwse251bUZtdElkOlYsZm9ybWF0Q29kZTpvaShnW1ZdKX0pKX0pLDE9PT14Lmxlbmd0aD8iIjooeFt4Lmxlbmd0aF09IjwvbnVtRm10cz4iLHhbMF09enIoIm51bUZtdHMiLG51bGws''@;'; put 'put ''e2NvdW50OngubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSx4LmpvaW4oIiIpKX0oZy5TU0YpKSYmKHdbdy5sZW5ndGhdPVYpLHdbdy5sZW5ndGhdPWZ1bmN0aW9uIEQ3KGcpe3ZhciB4PVtdO3JldHVybiBnLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIFY9WyI8Zm9udD4iXTt3LmJvbGQm''@;'; put 'put ''JlYucHVzaCgiPGIvPiIpLHcuaXRhbGljJiZWLnB1c2goIjxpLz4iKSx3LnN0cmlrZSYmVi5wdXNoKCI8c3RyaWtlLz4iKSx3LnNoYWRvdyYmVi5wdXNoKCI8c2hhZG93Lz4iKSx1aFsrdy51bmRlcmxpbmVdJiZWLnB1c2goJzx1IHZhbD0iJyt1aFsrdy51bmRlcmxpbmVdKyciLz4nKSx3LnN6''@;'; put 'put ''JiZWLnB1c2goJzxzeiB2YWw9Iicrdy5zeisnIi8+Jyksdy5jb2xvciYmVi5wdXNoKGdmKHcuY29sb3IsITApKSx3Lm5hbWUmJlYucHVzaCgnPG5hbWUgdmFsPSInK3cubmFtZSsnIi8+Jyksdy5mYW1pbHkmJlYucHVzaCgnPGZhbWlseSB2YWw9Iicrdy5mYW1pbHkrJyIvPicpLHcuc2NoZW1l''@;'; put 'put ''JiZWLnB1c2goJzxzY2hlbWUgdmFsPSInK3cuc2NoZW1lKyciLz4nKSx3LnZhbGlnbiYmVi5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt3LnZhbGlnbisoInN1YiI9PXcudmFsaWdufHwic3VwZXIiPT13LnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpLHgucHVzaChWLmpvaW4oIiIpKyI8L2Zv''@;'; put 'put ''bnQ+Iil9KSwnPGZvbnRzIGNvdW50PSInK3gubGVuZ3RoKyciPicreC5qb2luKCIiKSsiPC9mb250cz4ifSgoZy5TdHlsZXN8fHt9KS5Gb250c3x8W10pLHdbdy5sZW5ndGhdPWZ1bmN0aW9uIGRSKGcpe3ZhciB4PVtdO3JldHVybiBnLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIFY9bnVsbDtp''@;'; put 'put ''Zih3LnN0b3BzJiZ3LnN0b3BzLmxlbmd0aCl7dmFyIFc9e307dy5hbmdsZSYmKFcuZGVncmVlPU1hdGgucm91bmQody5hbmdsZSkpLFY9dy5zdG9wcy5tYXAoZnVuY3Rpb24oZWUpe3JldHVybiB6cigic3RvcCIsZ2YoZWUsImNvbG9yIiwhMCksbnVsbCE9ZWUudj97cG9zaXRpb246ZWUudn06''@;'; put 'put ''e30pfSkseC5wdXNoKCI8ZmlsbD4iK3pyKCJncmFkaWVudEZpbGwiLFYuam9pbigiIiksVykrIjwvZmlsbD4iKX1lbHNle2lmKHcuZmdDb2xvcil7aWYoVj0oVnx8IiIpKyI8ZmdDb2xvciAiLHcuZmdDb2xvci50aGVtZSlWKz0ndGhlbWU9Iicrdy5mZ0NvbG9yLnRoZW1lKyciJysody5mZ0Nv''@;'; put 'put ''bG9yLnRpbnQ/JyB0aW50PSInK3cuZmdDb2xvci50aW50KyciJzoiIikrIi8+IjtlbHNlIGlmKG51bGwhPXcuZmdDb2xvci5pbmRleCYmbnVsbD09dy5mZ0NvbG9yLnJnYilWKz0naW5kZXhlZD0iJyt3LmZnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZih3LmZnQ29sb3IuYXV0bylWKz0nYXV0''@;'; put 'put ''bz0iMSIvPic7ZWxzZXtpZihudWxsPT13LmZnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIreGUody5mZ0NvbG9yKS5qb2luKCJ8IikpO1YrPSdyZ2I9IkZGJytNZCh3LmZnQ29sb3IucmdiKSsnIi8+J30ic29saWQiPT13LnBhdHRlcm5UeXBlJiYhdy5iZ0NvbG9yJiYo''@;'; put 'put ''dy5iZ0NvbG9yPXtpbmRleDo2NH0pfWlmKHcuYmdDb2xvcilpZihWPShWfHwiIikrIjxiZ0NvbG9yICIsdy5iZ0NvbG9yLnRoZW1lKVYrPSd0aGVtZT0iJyt3LmJnQ29sb3IudGhlbWUrJyIvPic7ZWxzZSBpZihudWxsIT13LmJnQ29sb3IuaW5kZXgmJm51bGw9PXcuYmdDb2xvci5yZ2IpVis9''@;'; put 'put ''J2luZGV4ZWQ9Iicrdy5iZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYody5iZ0NvbG9yLmF1dG8pVis9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09dy5iZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK3hlKHcuYmdDb2xvcikuam9pbigifCIpKTtWKz0ncmdiPSJG''@;'; put 'put ''RicrTWQody5iZ0NvbG9yLnJnYikrJyIvPid9eC5wdXNoKCI8ZmlsbD4iK3pyKCJwYXR0ZXJuRmlsbCIsVix7cGF0dGVyblR5cGU6dy5wYXR0ZXJuVHlwZX0pKyI8L2ZpbGw+Iil9fSksJzxmaWxscyBjb3VudD0iJyt4Lmxlbmd0aCsnIj4nK3guam9pbigiIikrIjwvZmlsbHM+In0oKGcuU3R5''@;'; put 'put ''bGVzfHx7fSkuRmlsbHN8fFtdKSx3W3cubGVuZ3RoXT1mdW5jdGlvbiB1UihnKXt2YXIgeD1bXTtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKHcpe3ZhciBWPVtdO1YucHVzaChrNyh3LmxlZnQsImxlZnQiKSksVi5wdXNoKGs3KHcucmlnaHQsInJpZ2h0IikpLFYucHVzaChrNyh3LnRvcCwi''@;'; put 'put ''dG9wIikpLFYucHVzaChrNyh3LmJvdHRvbSwiYm90dG9tIikpLFYucHVzaChrNyh3LmRpYWdvbmFsLCJkaWFnb25hbCIpKSx4LnB1c2goIjxib3JkZXI+IitWLmpvaW4oIiIpKyI8L2JvcmRlcj4iKX0pLCc8Ym9yZGVycyBjb3VudD0iJyt4Lmxlbmd0aCsnIj4nK3guam9pbigiIikrIjwvYm9y''@;'; put 'put ''ZGVycz4ifSgoZy5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksd1t3Lmxlbmd0aF09ZnVuY3Rpb24gSTcoZyl7dmFyIHg9Wyc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPiddO2lmKGcpZm9yKHZhciB3PTE7dzxnLmxlbmd0aDsrK3cpeC5wdXNo''@;'; put 'put ''KHpyKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6Z1t3XS5udW1GbXRJZHx8MCxmb250SWQ6Z1t3XS5mb250SWR8fDAsZmlsbElkOmdbd10uZmlsbElkfHwwLGJvcmRlcklkOmdbd10uYm9yZGVySWR8fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMgY291bnQ9IicreC5sZW5ndGgrJyI+Jyt4LmpvaW4o''@;'; put 'put ''IiIpKyI8L2NlbGxTdHlsZVhmcz4ifSh4LmNlbGxTdHlsZVhmcyksKFY9ZnVuY3Rpb24gbVUoZyl7dmFyIHg9W107cmV0dXJuIHhbeC5sZW5ndGhdPXpyKCJjZWxsWGZzIixudWxsKSxnLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIFY9dy5hbGlnbm1lbnQ7ZGVsZXRlIHcuYWxpZ25tZW50O3Zh''@;'; put 'put ''ciBXPXcucHJvdGVjdGlvbjtkZWxldGUgdy5wcm90ZWN0aW9uO3ZhciBlZT1WP3pyKCJhbGlnbm1lbnQiLG51bGwsVik6IiI7ZWUrPVc/enIoInByb3RlY3Rpb24iLG51bGwse2hpZGRlbjpXLmhpZGRlbj8xOjAsbG9ja2VkOlcuZWRpdGFibGU/MDoxfSk6IiIseFt4Lmxlbmd0aF09enIoInhm''@;'; put 'put ''IixlZXx8bnVsbCx3KSxWJiYody5hbGlnbm1lbnQ9ViksVyYmKHcucHJvdGVjdGlvbj1XKX0pLHhbeC5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09eC5sZW5ndGg/IiI6KHhbMF09enIoImNlbGxYZnMiLG51bGwse2NvdW50OngubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSx4LmpvaW4o''@;'; put 'put ''IiIpKX0oeC5jZWxsWGZzKSkmJih3W3cubGVuZ3RoXT1WKSx3W3cubGVuZ3RoXT1mdW5jdGlvbiBtUihnKXt2YXIgeD1bJzxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWlsdGluSWQ9IjAiLz4nXTtpZihnKWZvcih2YXIgdz0xO3c8Zy5sZW5ndGg7Kyt3KXgucHVzaCh6cigi''@;'; put 'put ''Y2VsbFN0eWxlIixudWxsLHtuYW1lOmdbd10ubmFtZSx4ZklkOnd9KSk7cmV0dXJuJzxjZWxsU3R5bGVzIGNvdW50PSInK3gubGVuZ3RoKyciPicreC5qb2luKCIiKSsiPC9jZWxsU3R5bGVzPiJ9KHguY2VsbFN0eWxlWGZzKSxnLlN0eWxlcy5EWEZ8fChnLlN0eWxlcy5EWEY9W10pO3ZhciBX''@;'; put 'put ''PWZ1bmN0aW9uIGJVKGcseCx3KXt2YXIgVj1bJzx0YWJsZVN0eWxlcyBjb3VudD0iJysoZ3x8W10pLmxlbmd0aCsnIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCInXTtyZXR1cm4gZyYmZy5sZW5ndGg/''@;'; put 'put ''KFZbMF0rPSI+IixnLmZvckVhY2goZnVuY3Rpb24oVyl7Vi5wdXNoKGZ1bmN0aW9uIHlVKGcseCl7dmFyIFY9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxhc3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlwZSIs''@;'; put 'put ''ImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRvdGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1YnRv''@;'; put 'put ''dGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3ViaGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93U3Vi''@;'; put 'put ''aGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtpZihnW2VlXSl7dmFyIGxlPW1MKHgsZ1tlZV0pO1YucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50''@;'; put 'put ''IGR4ZklkPSInK2xlKyciIHR5cGU9IicrZWUrJyIvPicpfX0pO3ZhciBXPSc8dGFibGVTdHlsZSBjb3VudD0iJytWLmxlbmd0aCsnIiBwaXZvdD0iJysgKyEhZy5waXZvdCsnIiBuYW1lPSInK2cubmFtZSsnIic7cmV0dXJuIFYubGVuZ3RoP1crIj4iK1Yuam9pbigiIikrIjwvdGFibGVTdHls''@;'; put 'put ''ZT4iOlcrIi8+In0oVyx4KSl9KSxWLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOlZbMF0rIi8+In0oKGcuU3R5bGVzfHx7fSkuVGFibGV8fFtdLGcuU3R5bGVzLkRYRik7cmV0dXJuIHdbdy5sZW5ndGhdPWZ1bmN0aW9uIHZSKGcseCl7aWYoIWcubGVuZ3RoKXJldHVybic8ZHhmcyBjb3Vu''@;'; put 'put ''dD0iMCIvPic7dmFyIHc9Wyc8ZHhmcyBjb3VudD0iJytnLmxlbmd0aCsnIj4nXTtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKFYpe3cucHVzaChmdW5jdGlvbiBITShnLHgpe3ZhciB3PXtib2xkOiJiIixpdGFsaWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sVj1bIjxkeGY+Il0sVz1bXSxl''@;'; put 'put ''ZT1bXSxsZT1bXSxkZT1bXTtyZXR1cm4geGUoZykuZm9yRWFjaChmdW5jdGlvbihSZSl7c3dpdGNoKFJlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRlcmxpbmUiOmNhc2UiY29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNhc2Ui''@;'; put 'put ''b3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6Vy5wdXNoKFJlKTticmVhaztjYXNlImJnQ29sb3IiOmNhc2UiZmdDb2xvciI6bGUucHVzaChSZSk7YnJlYWs7Y2FzZSJ6IjplZS5w''@;'; put 'put ''dXNoKFJlKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjpkZS5wdXNoKFJlKTticmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2Fz''@;'; put 'put ''ZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitSZSsiIGluIERYRiJ9fSksVy5sZW5ndGg+MCYmKFYucHVzaCgiPGZvbnQ+IiksVy5mb3JFYWNoKGZ1bmN0aW9uKFJlKXtzd2l0Y2goUmUpe2Nhc2UiYm9sZCI6''@;'; put 'put ''Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Vi5wdXNoKCI8Iisod1tSZV18fFJlKSsnIHZhbD0iJysoZ1tSZV0/IjEiOiIwIikrJyIvPicpO2JyZWFrO2Nhc2UiY29sb3IiOlYucHVzaChnZihn''@;'; put 'put ''W1JlXSxSZSwhMCkpO2JyZWFrO2Nhc2UiZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjpWLnB1c2goIjwiKyh3W1JlXXx8UmUpKycgdmFsPSInK2dbUmVdKyciLz4nKTticmVhaztjYXNlInVuZGVybGluZSI6Vi5wdXNoKCc8dSB2YWw9IicrdWhbZ1tSZV18fDBdKyci''@;'; put 'put ''Lz4nKTticmVhaztjYXNlInZhbGlnbiI6Vi5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytnLnZhbGlnbisoInN1YiI9PWcudmFsaWdufHwic3VwZXIiPT1nLnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitSZSsiIDogZm9udCBEWEYi''@;'; put 'put ''fX0pLFYucHVzaCgiPC9mb250PiIpKSxlZS5sZW5ndGg+MCYmVi5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9Iicrb2koZy56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBnTChnLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gZzt2YXIgdz14LnJldnNzZltnPz8iR2VuZXJhbCJd''@;'; put 'put ''LFY9NjA7aWYobnVsbD09dylmb3IoO1Y8MzkyOysrVilpZihudWxsPT14LnNzZltWXSlyZXR1cm4gYi5sb2FkKGcsVikseC5zc2ZbVl09Zyx4LnJldnNzZltnXT1WLFY7cmV0dXJuIHd9KGcueix4KSsnIi8+JyksbGUubGVuZ3RoPjAmJihWLnB1c2goIjxmaWxsPiIpLFYucHVzaCgiPHBhdHRl''@;'; put 'put ''cm5GaWxsIisoZy5wYXR0ZXJuVHlwZT8nIHBhdHRlcm5UeXBlPSInK2cucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxsZS5mb3JFYWNoKGZ1bmN0aW9uKFJlKXtzd2l0Y2goUmUpe2Nhc2UicGF0dGVyblR5cGUiOmJyZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjpWLnB1c2goZ2YoZ1tS''@;'; put 'put ''ZV0sUmUsITApKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrUmUrIiA6IGZpbGwgRFhGIn19KSxWLnB1c2goIjwvcGF0dGVybkZpbGw+IiksVi5wdXNoKCI8L2ZpbGw+IikpLGRlLmxlbmd0aD4wPyhWLnB1c2goWyI8Ym9yZGVyIixudWxsIT1nLmRpYWdvbmFsRG93bj8nIGRp''@;'; put 'put ''YWdvbmFsRG93bj0iJysgKyEhZy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPWcuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIWcuZGlhZ29uYWxVcCsnIic6IiIsIj4iXS5qb2luKCIiKSksZGUuZm9yRWFjaChmdW5jdGlvbihSZSl7Vi5wdXNoKGs3KGdbUmVdLFJlKSl9KSxWLnB1''@;'; put 'put ''c2goIjwvYm9yZGVyPiIpKToobnVsbCE9Zy5kaWFnb25hbERvd258fG51bGwhPWcuZGlhZ29uYWxVcCkmJlYucHVzaChbIjxib3JkZXIiLG51bGwhPWcuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISFnLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9Zy5kaWFnb25hbFVwPycg''@;'; put 'put ''ZGlhZ29uYWxVcD0iJysgKyEhZy5kaWFnb25hbFVwKyciJzoiIiwiLz4iXS5qb2luKCIiKSksMT09Vi5sZW5ndGg/IjxkeGYvPiI6Vi5qb2luKCIiKSsiPC9keGY+In0oVix4KSl9KSx3LmpvaW4oIiIpKyI8L2R4ZnM+In0oZy5TdHlsZXMuRFhGLHgpLHdbdy5sZW5ndGhdPVcsdy5sZW5ndGg+''@;'; put 'put ''MiYmKHdbdy5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+Iix3WzFdPXdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLHcuam9pbigiIil9ZnVuY3Rpb24gX1IoZyx4LHcpe3d8fCh3PUhyKDYrNCp4Lmxlbmd0aCkpLHcud3JpdGVfc2hpZnQoMixnKSxrYyh4LHcpO3ZhciBWPXcubGVuZ3RoPncubD93LnNs''@;'; put 'put ''aWNlKDAsdy5sKTp3O3JldHVybiBudWxsPT13LmwmJih3Lmw9dy5sZW5ndGgpLFZ9ZnVuY3Rpb24gTVUoZyl7cmV0dXJue2NvbG9yOnlnKGcpLHBvczpObChnKX19eWEuU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNo''@;'; put 'put ''aXBzL3N0eWxlcyI7dmFyIFZNPVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwi''@;'; put 'put ''LCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFJvZT1JZShWTSksVV89WyJnZW5lcmFsIiwibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250''@;'; put 'put ''aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSxXXz1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIEJwKGcseCx3KXt3fHwodz1IcigxNikpLHcud3JpdGVfc2hpZnQoMix4fHwwKSx3LndyaXRlX3NoaWZ0KDIsZy5udW1GbXRJZHx8MCksdy53''@;'; put 'put ''cml0ZV9zaGlmdCgyLGcuZm9udElkfHwwKSx3LndyaXRlX3NoaWZ0KDIsZy5maWxsSWR8fDApLHcud3JpdGVfc2hpZnQoMixnLmJvcmRlcklkfHwwKSx3LndyaXRlX3NoaWZ0KDEsZy5hbGlnbm1lbnQmJmcuYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksdy53cml0ZV9zaGlmdCgxLGcuYWxp''@;'; put 'put ''Z25tZW50JiZnLmFsaWdubWVudC5pbmRlbnR8fDApO3ZhciBWPTAsVz0wO2lmKGcuYWxpZ25tZW50KXtpZihnLmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgZWU9VV8uaW5kZXhPZihnLmFsaWdubWVudC5ob3Jpem9udGFsKTtlZTwwJiYoZWU9MCksVnw9ZWV9aWYoZy5hbGlnbm1lbnQudmVy''@;'; put 'put ''dGljYWwpe3ZhciBsZT1XXy5pbmRleE9mKGcuYWxpZ25tZW50LnZlcnRpY2FsKTtsZTwwJiYobGU9MiksVnw9bGU8PDN9Zy5hbGlnbm1lbnQud3JhcFRleHQmJihWfD02NCksZy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihXfD0xKX1yZXR1cm4gdy53cml0ZV9zaGlmdCgxLFYpLHcud3JpdGVf''@;'; put 'put ''c2hpZnQoMSxXKSx3LndyaXRlX3NoaWZ0KDEsMCksdy53cml0ZV9zaGlmdCgxLDApLHd9dmFyIHppPVsibm9uZSIsInRoaW4iLCJtZWRpdW0iLCJkYXNoZWQiLCJkb3R0ZWQiLCJ0aGljayIsImRvdWJsZSIsImhhaXIiLCJtZWRpdW1EYXNoZWQiLCJkYXNoRG90IiwibWVkaXVtRGFzaERvdCIs''@;'; put 'put ''ImRhc2hEb3REb3QiLCJtZWRpdW1EYXNoRG90RG90Iiwic2xhbnREYXNoRG90Il07ZnVuY3Rpb24gTW0oZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDEpO2cubCs9MTt2YXIgdz15ZyhnKTtyZXR1cm57c3R5bGU6emlbeF0sY29sb3I6d319ZnVuY3Rpb24geG0oZyx4KXtyZXR1cm4geHx8KHg9SHIo''@;'; put 'put ''MTApKSxnJiZnLnN0eWxlJiYiIiE9Zy5zdHlsZSYmIm5vbmUiIT1nLnN0eWxlJiYtMSE9PXppLmluZGV4T2YoZy5zdHlsZSk/KHgud3JpdGVfc2hpZnQoMSx6aS5pbmRleE9mKGcuc3R5bGUpKSx4LndyaXRlX3NoaWZ0KDEsMCksZy5jb2xvcj9fZyhnLmNvbG9yLHgpOih4LndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMCkseC53cml0ZV9zaGlmdCg0LDApKSk6KHgud3JpdGVfc2hpZnQoMSwwKSx4LndyaXRlX3NoaWZ0KDEsMCkseC53cml0ZV9zaGlmdCg0LDApLHgud3JpdGVfc2hpZnQoNCwwKSkseH1mdW5jdGlvbiBSNyhnLHgpe3JldHVybiB4fHwoeD1Icig1MikpLHgud3JpdGVfc2hpZnQoNCxnLnhm''@;'; put 'put ''SWQpLHgud3JpdGVfc2hpZnQoMiwxKSx4LndyaXRlX3NoaWZ0KDEsK2cuYnVpbHRpbklkKSx4LndyaXRlX3NoaWZ0KDEsMCksJHUoZy5uYW1lfHwiIix4KSx4Lmxlbmd0aD54Lmw/eC5zbGljZSgwLHgubCk6eH1mdW5jdGlvbiBaXyhnLHgpeyF4fHwheC50aGVtZUVsZW1lbnRzfHwheC50aGVt''@;'; put 'put ''ZUVsZW1lbnRzLmNsclNjaGVtZXx8bnVsbCE9Zy50aGVtZSYmKGcucmdiPU03KHgudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbZy50aGVtZV0ucmdiLGcudGludHx8MCkpfWZ1bmN0aW9uIFRVKGcseCl7dmFyIHc9Q3QoKTtyZXR1cm4gdXQodywiQnJ0QmVnaW5TdHlsZVNoZWV0IiksZnVuY3Rp''@;'; put 'put ''b24gTDcoZyx4KXtpZih4KXt2YXIgdz0wO1tbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oVil7Zm9yKHZhciBXPVZbMF07Vzw9VlsxXTsrK1cpbnVsbCE9eFtXXSYmKyt3fSksMCE9dyYmKHV0KGcsIkJydEJlZ2luRm10cyIsWnUodykpLFtbNSw4XSxb''@;'; put 'put ''MjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oVil7Zm9yKHZhciBXPVZbMF07Vzw9VlsxXTsrK1cpbnVsbCE9eFtXXSYmdXQoZywiQnJ0Rm10IixfUihXLHhbV10pKX0pLHV0KGcsIkJydEVuZEZtdHMiKSl9fSh3LGcuU1NGKSxmdW5jdGlvbiBFVShnLHgpe3ZhciB3''@;'; put 'put ''PXgubGVuZ3RoOzAhPXcmJih1dChnLCJCcnRCZWdpbkZvbnRzIixadSh3KSkseC5mb3JFYWNoKGZ1bmN0aW9uKFYpe3V0KGcsIkJydEZvbnQiLGZ1bmN0aW9uIGEyKGcseCl7eHx8KHg9SHIoMTUzKSkseC53cml0ZV9zaGlmdCgyLDIwKmcuc3opLGZ1bmN0aW9uIG9fKGcseCl7eHx8KHg9SHIo''@;'; put 'put ''MikpLHgud3JpdGVfc2hpZnQoMSwoZy5pdGFsaWM/MjowKXwoZy5zdHJpa2U/ODowKXwoZy5vdXRsaW5lPzE2OjApfChnLnNoYWRvdz8zMjowKXwoZy5jb25kZW5zZT82NDowKXwoZy5leHRlbmQ/MTI4OjApKSx4LndyaXRlX3NoaWZ0KDEsMCl9KGcseCkseC53cml0ZV9zaGlmdCgyLGcuYm9s''@;'; put 'put ''ZD83MDA6NDAwKTt2YXIgdz0wOyJzdXBlciI9PWcudmFsaWduP3c9MToic3ViIj09Zy52YWxpZ24mJih3PTIpLHgud3JpdGVfc2hpZnQoMix3KSx4LndyaXRlX3NoaWZ0KDEsZy51bmRlcmxpbmV8fDApLHgud3JpdGVfc2hpZnQoMSxnLmZhbWlseXx8MCkseC53cml0ZV9zaGlmdCgxLGcuY2hh''@;'; put 'put ''cnNldHx8MCkseC53cml0ZV9zaGlmdCgxLDApLF9nKGcuY29sb3IseCk7dmFyIFY9MDtyZXR1cm4ibWFqb3IiPT1nLnNjaGVtZSYmKFY9MSksIm1pbm9yIj09Zy5zY2hlbWUmJihWPTIpLHgud3JpdGVfc2hpZnQoMSxWKSxrYyhnLm5hbWUseCkseC5sZW5ndGg+eC5sP3guc2xpY2UoMCx4Lmwp''@;'; put 'put ''Onh9KFYpKX0pLHV0KGcsIkJydEVuZEZvbnRzIikpfSh3LChnLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gQk0oZyx4KXt2YXIgdz14Lmxlbmd0aDswIT13JiYodXQoZywiQnJ0QmVnaW5GaWxscyIsWnUodykpLHguZm9yRWFjaChmdW5jdGlvbihWKXt1dChnLCJCcnRGaWxsIixm''@;'; put 'put ''dW5jdGlvbiBiUihnLHgpe3h8fCh4PUhyKDg0KSk7dmFyIHc9Um9lW2cucGF0dGVyblR5cGVdO251bGw9PXcmJih3PTQwKSx4LndyaXRlX3NoaWZ0KDQsdz0rdyk7dmFyIFY9MDtpZig0MCE9dylmb3IoX2coZy5mZ0NvbG9yfHx7aW5kZXg6NjR9LHgpLF9nKGcuYmdDb2xvcnx8e2luZGV4OjY1''@;'; put 'put ''fSx4KTtWPDEyOysrVil4LndyaXRlX3NoaWZ0KDQsMCk7ZWxzZXtmb3IoO1Y8NDsrK1YpeC53cml0ZV9zaGlmdCg0LDApO2Zvcig7VjwxMjsrK1YpeC53cml0ZV9zaGlmdCg0LDApfXJldHVybiB4Lmxlbmd0aD54Lmw/eC5zbGljZSgwLHgubCk6eH0oVikpfSksdXQoZywiQnJ0RW5kRmlsbHMi''@;'; put 'put ''KSl9KHcsKGcuU3R5bGVzfHx7fSkuRmlsbHN8fFtdKSxmdW5jdGlvbiBDUihnLHgpe3ZhciB3PXgubGVuZ3RoOzAhPXcmJih1dChnLCJCcnRCZWdpbkJvcmRlcnMiLFp1KHcpKSx4LmZvckVhY2goZnVuY3Rpb24oVil7dXQoZywiQnJ0Qm9yZGVyIixmdW5jdGlvbiBkaChnLHgpe3JldHVybiB4''@;'; put 'put ''fHwoeD1Icig1MSkpLHgud3JpdGVfc2hpZnQoMSwwKSx4bShnLnRvcCx4KSx4bShnLmJvdHRvbSx4KSx4bShnLmxlZnQseCkseG0oZy5yaWdodCx4KSx4bShudWxsLHgpLHgubGVuZ3RoPngubD94LnNsaWNlKDAseC5sKTp4fShWKSl9KSx1dChnLCJCcnRFbmRCb3JkZXJzIikpfSh3LChnLlN0''@;'; put 'put ''eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxmdW5jdGlvbiBPNyhnLHgpe3ZhciB3PTE7aWYoeCYmKHc9eC5sZW5ndGgpLHV0KGcsIkJydEJlZ2luQ2VsbFN0eWxlWEZzIixadSh3KSksdXQoZywiQnJ0WEYiLEJwKHtudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjB9LDY1NTM1''@;'; put 'put ''KSkseClmb3IodmFyIFY9MTtWPHgubGVuZ3RoOysrVil1dChnLCJCcnRYRiIsQnAoe251bUZtdElkOnhbVl0ubnVtRm10SWR8fDAsZm9udElkOnhbVl0uZm9udElkfHwwLGZpbGxJZDp4W1ZdLmZpbGxJZHx8MCxib3JkZXJJZDp4W1ZdLmJvcmRlcklkfHwwfSw2NTUzNSkpO3V0KGcsIkJydEVu''@;'; put 'put ''ZENlbGxTdHlsZVhGcyIpfSh3LHguY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBQNyhnLHgpe3V0KGcsIkJydEJlZ2luQ2VsbFhGcyIsWnUoeC5sZW5ndGgpKSx4LmZvckVhY2goZnVuY3Rpb24odyl7dXQoZywiQnJ0WEYiLEJwKHcsMCkpfSksdXQoZywiQnJ0RW5kQ2VsbFhGcyIpfSh3LHguY2Vs''@;'; put 'put ''bFhmcyksZnVuY3Rpb24gU1IoZyx4KXt2YXIgdz0xO2lmKHgmJih3PXgubGVuZ3RoKSx1dChnLCJCcnRCZWdpblN0eWxlcyIsWnUodykpLHV0KGcsIkJydFN0eWxlIixSNyh7eGZJZDowLGJ1aWx0aW5JZDowLG5hbWU6Ik5vcm1hbCJ9KSkseClmb3IodmFyIFY9MTtWPHgubGVuZ3RoOysrVil1''@;'; put 'put ''dChnLCJCcnRTdHlsZSIsUjcoe3hmSWQ6VixidWlsdGluSWQ6MCxuYW1lOnhbVl0ubmFtZX0pKTt1dChnLCJCcnRFbmRTdHlsZXMiKX0odyx4LmNlbGxTdHlsZVhmcyksZnVuY3Rpb24gWV8oZyl7dXQoZywiQnJ0QmVnaW5EWEZzIixadSgwKSksdXQoZywiQnJ0RW5kRFhGcyIpfSh3KSxmdW5j''@;'; put 'put ''dGlvbiBHXyhnKXt1dChnLCJCcnRCZWdpblRhYmxlU3R5bGVzIixmdW5jdGlvbiB3UihnLHgsdyl7dmFyIFY9SHIoMjA1Mik7cmV0dXJuIFYud3JpdGVfc2hpZnQoNCxnKSwkdSh4LFYpLCR1KHcsViksVi5sZW5ndGg+Vi5sP1Yuc2xpY2UoMCxWLmwpOlZ9KDAsIlRhYmxlU3R5bGVNZWRpdW05''@;'; put 'put ''IiwiUGl2b3RTdHlsZU1lZGl1bTQiKSksdXQoZywiQnJ0RW5kVGFibGVTdHlsZXMiKX0odyksdXQodywiQnJ0RW5kU3R5bGVTaGVldCIpLHcuZW5kKCl9eWEuVEhFTUU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMv''@;'; put 'put ''dGhlbWUiO3ZhciBBVT1bIjwvYTpsdDE+IiwiPC9hOmRrMT4iLCI8L2E6bHQyPiIsIjwvYTpkazI+IiwiPC9hOmFjY2VudDE+IiwiPC9hOmFjY2VudDI+IiwiPC9hOmFjY2VudDM+IiwiPC9hOmFjY2VudDQ+IiwiPC9hOmFjY2VudDU+IiwiPC9hOmFjY2VudDY+IiwiPC9hOmhsaW5rPiIsIjwv''@;'; put 'put ''YTpmb2xIbGluaz4iXTtmdW5jdGlvbiBNUihnLHgsdyl7eC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZT1bXTt2YXIgVj17fTsoZ1swXS5tYXRjaChHdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFcpe3ZhciBlZT1mcihXKTtzd2l0Y2goZWVbMF0pe2Nhc2UiPGE6Y2xyU2NoZW1lIjpjYXNlIjwv''@;'; put 'put ''YTpjbHJTY2hlbWU+IjpjYXNlIjwvYTpzcmdiQ2xyPiI6Y2FzZSI8L2E6c3lzQ2xyPiI6YnJlYWs7Y2FzZSI8YTpzcmdiQ2xyIjpWLnJnYj1lZS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOlYucmdiPWVlLmxhc3RDbHI7YnJlYWs7Y2FzZSI8YTpkazE+IjpjYXNlIjwvYTpkazE+IjpjYXNl''@;'; put 'put ''IjxhOmx0MT4iOmNhc2UiPC9hOmx0MT4iOmNhc2UiPGE6ZGsyPiI6Y2FzZSI8L2E6ZGsyPiI6Y2FzZSI8YTpsdDI+IjpjYXNlIjwvYTpsdDI+IjpjYXNlIjxhOmFjY2VudDE+IjpjYXNlIjwvYTphY2NlbnQxPiI6Y2FzZSI8YTphY2NlbnQyPiI6Y2FzZSI8L2E6YWNjZW50Mj4iOmNhc2UiPGE6''@;'; put 'put ''YWNjZW50Mz4iOmNhc2UiPC9hOmFjY2VudDM+IjpjYXNlIjxhOmFjY2VudDQ+IjpjYXNlIjwvYTphY2NlbnQ0PiI6Y2FzZSI8YTphY2NlbnQ1PiI6Y2FzZSI8L2E6YWNjZW50NT4iOmNhc2UiPGE6YWNjZW50Nj4iOmNhc2UiPC9hOmFjY2VudDY+IjpjYXNlIjxhOmhsaW5rPiI6Y2FzZSI8L2E6''@;'; put 'put ''aGxpbms+IjpjYXNlIjxhOmZvbEhsaW5rPiI6Y2FzZSI8L2E6Zm9sSGxpbms+IjoiLyI9PT1lZVswXS5jaGFyQXQoMSk/KHgudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbQVUuaW5kZXhPZihlZVswXSldPVYsVj17fSk6Vi5uYW1lPWVlWzBdLnNsaWNlKDMsZWVbMF0ubGVuZ3RoLTEpO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYodyYmdy5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgIitlZVswXSsiIGluIGNsclNjaGVtZSIpfX0pfWZ1bmN0aW9uIGpNKCl7fWZ1bmN0aW9uIGtVKCl7fXZhciBEVT0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxCMT0v''@;'; put 'put ''PGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLHpNPS88YTpmbXRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLFVNPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gVzAoZyx4''@;'; put 'put ''KXtpZighZ3x8MD09PWcubGVuZ3RoKXJldHVybiBXMChFbSgpKTt2YXIgdyxWPXt9O2lmKCEodz1nLm1hdGNoKFVNKSkpdGhyb3cgbmV3IEVycm9yKCJ0aGVtZUVsZW1lbnRzIG5vdCBmb3VuZCBpbiB0aGVtZSIpO3JldHVybiBmdW5jdGlvbiB4UihnLHgsdyl7dmFyIFY7eC50aGVtZUVsZW1l''@;'; put 'put ''bnRzPXt9LFtbImNsclNjaGVtZSIsRFUsTVJdLFsiZm9udFNjaGVtZSIsQjEsak1dLFsiZm10U2NoZW1lIix6TSxrVV1dLmZvckVhY2goZnVuY3Rpb24oVyl7aWYoIShWPWcubWF0Y2goV1sxXSkpKXRocm93IG5ldyBFcnJvcihXWzBdKyIgbm90IGZvdW5kIGluIHRoZW1lRWxlbWVudHMiKTtX''@;'; put 'put ''WzJdKFYseCx3KX0pfSh3WzBdLFYseCksVi5yYXc9ZyxWfWZ1bmN0aW9uIEVtKGcseCl7aWYoeCYmeC50aGVtZVhMU1gpcmV0dXJuIHgudGhlbWVYTFNYO2lmKGcmJiJzdHJpbmciPT10eXBlb2YgZy5yYXcpcmV0dXJuIGcucmF3O3ZhciB3PVtraV07cmV0dXJuIHdbdy5sZW5ndGhdPSc8YTp0''@;'; put 'put ''aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0iT2ZmaWNlIFRoZW1lIj4nLHdbdy5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIsd1t3Lmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPics''@;'; put 'put ''d1t3Lmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPicsd1t3Lmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+Jyx3W3cubGVuZ3RoXT0nPGE6ZGsy''@;'; put 'put ''PjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicsd1t3Lmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVFQ0UxIi8+PC9hOmx0Mj4nLHdbdy5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLHdbdy5sZW5ndGhd''@;'; put 'put ''PSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLHdbdy5sZW5ndGhdPSc8YTphY2NlbnQzPjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLHdbdy5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48''@;'; put 'put ''L2E6YWNjZW50ND4nLHdbdy5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4nLHdbdy5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLHdbdy5sZW5ndGhdPSc8YTpobGluaz48YTpz''@;'; put 'put ''cmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicsd1t3Lmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4MDAwODAiLz48L2E6Zm9sSGxpbms+Jyx3W3cubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLHdbdy5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmlj''@;'; put 'put ''ZSI+Jyx3W3cubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIsd1t3Lmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsd1t3Lmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250''@;'; put 'put ''IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLHdbdy5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJU''@;'; put 'put ''aW1lcyBOZXcgUm9tYW4iLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNj''@;'; put 'put ''cmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9u''@;'; put 'put ''dCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZ''@;'; put 'put ''aSBCYWl0aSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9''@;'; put 'put ''IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsd1t3Lmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlh''@;'; put 'put ''biBCYWl0aSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+Jyx3W3cubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLHdbdy5sZW5ndGhdPSI8YTptaW5vckZvbnQ+Iix3W3cubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLHdbdy5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0i''@;'; put 'put ''Ii8+Jyx3W3cubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5n''@;'; put 'put ''IiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2''@;'; put 'put ''MGVcdTlhZDQiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFj''@;'; put 'put ''ZT0iVGFob21hIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVm''@;'; put 'put ''YWNlPSJTaHJ1dGkiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0''@;'; put 'put ''eXBlZmFjZT0iUmFhdmkiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsd1t3Lmxlbmd0aF09JzxhOmZv''@;'; put 'put ''bnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1W''@;'; put 'put ''IEJvbGkiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFj''@;'; put 'put ''ZT0iTGF0aGEiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9''@;'; put 'put ''Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLHdbdy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsd1t3Lmxlbmd0aF09Jzxh''@;'; put 'put ''OmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+Jyx3W3cubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1''@;'; put 'put ''ciIvPicsd1t3Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsd1t3Lmxlbmd0aF09IjwvYTptaW5vckZvbnQ+Iix3W3cubGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+Iix3W3cubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+Jyx3''@;'; put 'put ''W3cubGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIsd1t3Lmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+Jyx3W3cubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLHdbdy5sZW5ndGhdPSI8YTpnc0xzdD4i''@;'; put 'put ''LHdbdy5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHdbdy5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIg''@;'; put 'put ''dmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+Jyx3W3cubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRN''@;'; put 'put ''b2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHdbdy5sZW5ndGhdPSI8L2E6Z3NMc3Q+Iix3W3cubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicsd1t3Lmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHdbdy5sZW5ndGhdPSc8YTpncmFkRmls''@;'; put 'put ''bCByb3RXaXRoU2hhcGU9IjEiPicsd1t3Lmxlbmd0aF09IjxhOmdzTHN0PiIsd1t3Lmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIv''@;'; put 'put ''PjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsd1t3Lmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwv''@;'; put 'put ''YTpncz4nLHdbdy5sZW5ndGhdPSI8L2E6Z3NMc3Q+Iix3W3cubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMCIvPicsd1t3Lmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHdbdy5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIsd1t3Lmxlbmd0aF09IjxhOmxuU3R5bGVM''@;'; put 'put ''c3Q+Iix3W3cubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48''@;'; put 'put ''L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+Jyx3W3cubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6''@;'; put 'put ''cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLHdbdy5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNv''@;'; put 'put ''bGlkIi8+PC9hOmxuPicsd1t3Lmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIsd1t3Lmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0PiIsd1t3Lmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsd1t3Lmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLHdbdy5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1''@;'; put 'put ''clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+Jyx3W3cubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLHdbdy5s''@;'; put 'put ''ZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+Iix3W3cubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+Iix3W3cubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsd1t3Lmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBl''@;'; put 'put ''PSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLHdbdy5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsd1t3Lmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLHdbdy5sZW5ndGhdPSI8YTplZmZlY3RTdHls''@;'; put 'put ''ZT4iLHdbdy5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+Iix3W3cubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48''@;'; put 'put ''L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsd1t3Lmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+Iix3W3cubGVuZ3RoXT0nPGE6c2NlbmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdo''@;'; put 'put ''dFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRSaWc+PC9hOnNjZW5lM2Q+Jyx3W3cubGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+Jyx3W3cubGVuZ3Ro''@;'; put 'put ''XT0iPC9hOmVmZmVjdFN0eWxlPiIsd1t3Lmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLHdbdy5sZW5ndGhdPSI8YTpiZ0ZpbGxTdHlsZUxzdD4iLHdbdy5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsd1t3Lmxlbmd0''@;'; put 'put ''aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+Jyx3W3cubGVuZ3RoXT0iPGE6Z3NMc3Q+Iix3W3cubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVt''@;'; put 'put ''ZUNscj48L2E6Z3M+Jyx3W3cubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHdbdy5s''@;'; put 'put ''ZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHdbdy5sZW5ndGhdPSI8L2E6Z3NMc3Q+Iix3W3cubGVuZ3RoXT0nPGE6cGF0''@;'; put 'put ''aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwvYTpwYXRoPicsd1t3Lmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHdbdy5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsd1t3Lmxlbmd0''@;'; put 'put ''aF09IjxhOmdzTHN0PiIsd1t3Lmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsd1t3Lmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAw''@;'; put 'put ''Ij48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsd1t3Lmxlbmd0aF09IjwvYTpnc0xzdD4iLHdbdy5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRv''@;'; put 'put ''UmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicsd1t3Lmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHdbdy5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+Iix3W3cubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLHdbdy5sZW5ndGhdPSI8L2E6''@;'; put 'put ''dGhlbWVFbGVtZW50cz4iLHdbdy5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLHdbdy5sZW5ndGhdPSI8YTpzcERlZj4iLHdbdy5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFj''@;'; put 'put ''Y2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxh''@;'; put 'put ''OnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLHdbdy5sZW5ndGhdPSI8L2E6c3BEZWY+Iix3W3cubGVuZ3RoXT0iPGE6bG5EZWY+Iix3W3cubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIy''@;'; put 'put ''Ij48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6''@;'; put 'put ''Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+Jyx3W3cubGVuZ3RoXT0iPC9hOmxuRGVmPiIsd1t3Lmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLHdbdy5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+Iix3''@;'; put 'put ''W3cubGVuZ3RoXT0iPC9hOnRoZW1lPiIsdy5qb2luKCIiKX1mdW5jdGlvbiBBUihnKXt2YXIgeD1nLnJlYWRfc2hpZnQoMiksdz1nLnJlYWRfc2hpZnQoMiktNCxWPVt4XTtzd2l0Y2goeCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAx''@;'; put 'put ''MzpWWzFdPWZ1bmN0aW9uIElVKGcpe3ZhciB4PXt9O3N3aXRjaCh4LnhjbHJUeXBlPWcucmVhZF9zaGlmdCgyKSx4Lm5UaW50U2hhZGU9Zy5yZWFkX3NoaWZ0KDIpLHgueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6Zy5sKz00O2JyZWFrO2Nhc2UgMTp4LnhjbHJWYWx1ZT1mdW5jdGlvbiBUUihn''@;'; put 'put ''LHgpe3JldHVybiBvbChnLHgpfShnLDQpO2JyZWFrO2Nhc2UgMjp4LnhjbHJWYWx1ZT1UZyhnKTticmVhaztjYXNlIDM6eC54Y2xyVmFsdWU9ZnVuY3Rpb24gRVIoZyl7cmV0dXJuIGcucmVhZF9zaGlmdCg0KX0oZyl9cmV0dXJuIGcubCs9OCx4fShnKTticmVhaztjYXNlIDY6VlsxXT1mdW5j''@;'; put 'put ''dGlvbiBSVShnLHgpe3JldHVybiBvbChnLHgpfShnLHcpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTpWWzFdPWcucmVhZF9zaGlmdCgxPT09dz8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK3grIiAiK3cpfXJldHVybiBWfWZ1''@;'; put 'put ''bmN0aW9uIGtSKGcseCl7eC5mb3JFYWNoKGZ1bmN0aW9uKHcpe3N3aXRjaCh3WzBdKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTM6Zy5mb250JiZnLmZvbnQuY29sb3ImJkFycmF5''@;'; put 'put ''LmlzQXJyYXkod1sxXS54Y2xyVmFsdWUpJiYoZy5mb250LmNvbG9yLnJnYj1pMih3WzFdLnhjbHJWYWx1ZSkpfX0pfWZ1bmN0aW9uIEVsKGcpe3JldHVybiBnLzkxNDQwMCpQZ31mdW5jdGlvbiBPVShnLHgpe3ZhciB3PXt9O2lmKGcucG9zKXcueD1FbChnLnBvcy54KSx3Lnk9RWwoZy5wb3Mu''@;'; put 'put ''eSk7ZWxzZXtpZighZy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO3cucj1nLmZyb20ucnx8MCx3LmM9Zy5mcm9tLmN8fDAsZy5mcm9tLmNPZmYmJih3Lng9RWwoZy5mcm9tLmNPZmYpKSxnLmZyb20uck9mZiYmKHcueT1FbChnLmZyb20uck9mZikpfWlmKGcuZXh0KXcudz1FbChnLmV4''@;'; put 'put ''dC54KSx3Lmg9RWwoZy5leHQueSk7ZWxzZXtpZighZy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7dy5DPWcudG8uYyx3LlI9Zy50by5yLGcudG8uY09mZiYmKHcuWD1FbChnLnRvLmNPZmYpKSxnLnRvLnJPZmYmJih3Llk9RWwoZy50by5yT2ZmKSl9cmV0dXJuIHd9ZnVuY3Rpb24gRjcoZyx4''@;'; put 'put ''KXt2YXIgdz17eDotMSx5Oi0xLHc6LTEsaDotMX07aWYoZy5wb3Mpdy54PUVsKGcucG9zLngpLHcueT1FbChnLnBvcy55KTtlbHNle2lmKCFnLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7dy54PUI3KHgsZy5mcm9tLmMsIkMiKStFbChnLmZyb20uY09mZiksdy55PUI3KHgsZy5mcm9t''@;'; put 'put ''LnIsIlIiKStFbChnLmZyb20uck9mZil9aWYoZy5leHQpdy53PUVsKGcuZXh0LngpLHcuaD1FbChnLmV4dC55KTtlbHNle2lmKCFnLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjt3Lnc9QjcoeCxnLnRvLmMsIkMiKStFbChnLnRvLmNPZmYpLXcueCx3Lmg9QjcoeCxnLnRvLnIsIlIiKStFbChn''@;'; put 'put ''LnRvLnJPZmYpLXcueX1yZXR1cm4gd31mdW5jdGlvbiAkXyhnLHgpe3ZhciB3PXtyOi0xLGM6LTEseDotMSx5Oi0xLFI6LTEsQzotMSxYOi0xLFk6LTF9O3N3aXRjaChnLnR5cGUpe2Nhc2UidHdvQ2VsbEFuY2hvciI6dy5yPWcuZnJvbS5yLHcueT1FbChnLmZyb20uck9mZiksdy5SPWcudG8u''@;'; put 'put ''cix3Llk9RWwoZy50by5yT2ZmKSx3LmM9Zy5mcm9tLmMsdy54PUVsKGcuZnJvbS5jT2ZmKSx3LkM9Zy50by5jLHcuWD1FbChnLnRvLmNPZmYpO2JyZWFrO2Nhc2Uib25lQ2VsbEFuY2hvciI6dy5yPWcuZnJvbS5yLHcueT1FbChnLmZyb20uck9mZik7dmFyIFY9anAoeCx3LnIsdy55K0VsKGcu''@;'; put 'put ''ZXh0LnkpKTt3LlI9VlswXSx3Llk9VlsxXSx3LmM9Zy5mcm9tLmMsdy54PUVsKGcuZnJvbS5jT2ZmKTt2YXIgVz1HTSh4LHcuYyx3LngrRWwoZy5leHQueCkpO3cuQz1XWzBdLHcuWD1XWzFdO2JyZWFrO2Nhc2UiYWJzb2x1dGVBbmNob3IiOnZhciBlZT1qcCh4LDAsRWwoZy5wb3MueSkpO3cu''@;'; put 'put ''cj1lZVswXSx3Lnk9ZWVbMV07dmFyIGxlPWpwKHgsdy5yLHcueStFbChnLmV4dC55KSk7dy5SPWxlWzBdLHcuWT1sZVsxXTt2YXIgb2U9anAoeCwwLEVsKGcucG9zLngpKTt3LmM9b2VbMF0sdy54PW9lWzFdO3ZhciBkZT1qcCh4LHcuYyx3LngrRWwoZy5leHQueCkpO3cuQz1kZVswXSx3Llg9''@;'; put 'put ''ZGVbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYW5jaG9yIHR5cGUgIitnLnR5cGV9cmV0dXJuIHd9ZnVuY3Rpb24gWk0oZyx4KXt2YXIgdz1nLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pO3hbIiFwb3MiXT17Yzord1swXSx4Oit3WzFdLHI6K3dbMl0seTord1szXSxDOit3WzRdLFg6K3db''@;'; put 'put ''NV0sUjord1s2XSxZOit3WzddfX1mdW5jdGlvbiBZTShnLHgsdyl7dmFyIFY9LTE7aWYobnVsbCE9Zy5SfHxudWxsIT1nLkMpVj0wO2Vsc2V7aWYobnVsbD09Zy54fHxudWxsPT1nLnl8fG51bGw9PWcud3x8bnVsbD09Zy5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0cmlu''@;'; put 'put ''Z2lmeShnKTtWPTErMiohKGcuY3x8Zy5yKX1pZihWIT14KXtzd2l0Y2goeCl7Y2FzZSAwOmNhc2UgMTppZigzIT1WKWJyZWFrO3ZhciBXPUdNKHcsZy5jfHwwLGcueHx8MCk7Zy5jPVdbMF0sZy54PVdbMV07dmFyIGVlPWpwKHcsZy5yfHwwLGcueXx8MCk7Zy5yPWVlWzBdLGcueT1lZVsxXTti''@;'; put 'put ''cmVhaztjYXNlIDM6aWYoMz09VilicmVhazt2YXIgbGU9Zy5jfHwwLG9lPWcueHx8MDtkZWxldGUgZy5jLGRlbGV0ZSBnLngsZy54PShsZT9WNyh3LGxlKTowKStvZTt2YXIgZGU9Zy5yfHwwLERlPWcueXx8MDtkZWxldGUgZy5yLGRlbGV0ZSBnLnksZy55PShkZT9ONyh3LGRlKTowKStEZTti''@;'; put 'put ''cmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIreH1zd2l0Y2goeCl7Y2FzZSAwOmlmKDA9PVYpYnJlYWs7dmFyIFJlPUdNKHcsZy5jfHwwLChnLnh8fDApK2cudyk7ZGVsZXRlIGcudyxnLkM9UmVbMF0sZy5YPVJlWzFdO3ZhciBWZT1qcCh3LGcu''@;'; put 'put ''cnx8MCwoZy55fHwwKStnLmgpO2RlbGV0ZSBnLmgsZy5SPVZlWzBdLGcuWT1WZVsxXTticmVhaztjYXNlIDE6Y2FzZSAzOmlmKDAhPVYpYnJlYWs7dmFyIEdlPWcuQ3x8MCxldD1nLlh8fDA7ZGVsZXRlIGcuQyxkZWxldGUgZy5YLGcudz1WNyh3LEdlKStldC0oZy5jP1Y3KHcsZy5jKTowKS0o''@;'; put 'put ''Zy54fHwwKTt2YXIgYnQ9Zy5SfHwwLEplPWcuWXx8MDtkZWxldGUgZy5SLGRlbGV0ZSBnLlksZy5oPU43KHcsYnQpK0plLShnLnI/TjcodyxnLnIpOjApLShnLnl8fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIit4fX19ZnVuY3Rpb24g''@;'; put 'put ''SDcoZyl7dmFyIHg9W2cuY3x8MCxNYXRoLnJvdW5kKGcueHx8MCksZy5yfHwwLE1hdGgucm91bmQoZy55fHwwKV07cmV0dXJuKHg9eC5jb25jYXQoZy5oJiZnLnc/W3hbMF0sTWF0aC5yb3VuZCh4WzFdK2cudykseFsyXSxNYXRoLnJvdW5kKHhbM10rZy5oKV06W2cuQ3x8MCxNYXRoLnJvdW5k''@;'; put 'put ''KGcuWHx8MCksZy5SfHwwLE1hdGgucm91bmQoZy5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9uIE43KGcseCl7aWYoIWcpcmV0dXJuIDA7Zm9yKHZhciB3PTA7LS14Pj0wOyl7dmFyIFY9KChnWyIhcm93cyJdfHxbXSlbeF18fHt9KS5ocHg7bnVsbD09ViYmKFY9KChnWyIhc2hlZXRGb3Jt''@;'; put 'put ''YXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09ViYmKFY9MjQpLHcrPVZ9cmV0dXJuIHd9ZnVuY3Rpb24gVjcoZyx4KXtpZighZylyZXR1cm4gMDtmb3IodmFyIHc9MDstLXg+PTA7KXt2YXIgVj0oKGdbIiFjb2xzIl18fFtdKVt4XXx8e30pLndweDtpZihudWxsPT1WJiYoVj0oKGdbIiFz''@;'; put 'put ''aGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1WKXt2YXIgVz17d2NoOjguNDN9O20xKFcpLGdbIiFjb2xzIl0mJihnWyIhY29scyJdW3hdPVcpLFY9Vy53cHh9dys9Vn1yZXR1cm4gd31mdW5jdGlvbiBCNyhnLHgsdyl7cmV0dXJuIkMiPT13P1Y3KGcseCk6TjcoZyx4KX1m''@;'; put 'put ''dW5jdGlvbiBqcChnLHgsdyl7dmFyIFY9W3gsd107aWYoIWcpcmV0dXJuIFY7Zm9yKDs7KXt2YXIgVz0oZ1siIXJvd3MiXXx8W10pW1ZbMF1dfHx7fTtpZihXLmhpZGRlbikrK1ZbMF07ZWxzZXt2YXIgZWU9Vy5ocHg7aWYobnVsbD09ZWUmJihlZT0oKGdbIiFzaGVldEZvcm1hdCJdfHx7fSku''@;'; put 'put ''cm93fHx7fSkuaHB4KSxudWxsPT1lZSYmKGVlPWxoKDE1KSksVlsxXTxlZSlicmVhaztWWzBdKyssVlsxXS09ZWV9fXJldHVybiBWfWZ1bmN0aW9uIEdNKGcseCx3KXt2YXIgVj1beCx3XTtpZighZylyZXR1cm4gVjtmb3IoOzspe3ZhciBXPShnWyIhY29scyJdfHxbXSlbVlswXV18fHt9O2lm''@;'; put 'put ''KFcuaGlkZGVufHwwPT09Vy53cHgpKytWWzBdO2Vsc2V7dmFyIGVlPVcud3B4O2lmKG51bGw9PWVlJiYoZWU9KChnWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09ZWUpe3ZhciBsZT17d2NoOjguNDN9O20xKGxlKSxnWyIhY29scyJdJiYoZ1siIWNvbHMiXVtWWzBd''@;'; put 'put ''XT1sZSksZWU9bGUud3B4fWlmKFZbMV08ZWUpYnJlYWs7VlswXSsrLFZbMV0tPWVlfX1yZXR1cm4gVn1mdW5jdGlvbiBNZChnKXtyZXR1cm4oIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgZz9nLnRvU3RyaW5nKDE2KTpnKSkuc2xpY2UoLTYpfWZ1bmN0aW9uIGdmKGcseCx3KXt2YXIgVj0i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIHg/ISF3OiEheDsic3RyaW5nIiE9dHlwZW9mIHgmJih4PSJjb2xvciIpO3ZhciBXPSI8Iit4KyIgIjtyZXR1cm4gZy5hdXRvP1crJ2F1dG89IjEiLz4nOmcuaW5kZXgmJm51bGw9PWcucmdiP1crJ2luZGV4ZWQ9IicrZy5pbmRleCsnIi8+JzpudWxsIT1nLnRoZW1l''@;'; put 'put ''P1crJ3RoZW1lPSInK2cudGhlbWUrJyInKyhnLnRpbnQ/JyB0aW50PSInK2cudGludCsnIic6IiIpKyIvPiI6bnVsbCE9Zy5yZ2I/VysncmdiPSInKyhWPyJGRiI6IiIpK01kKGcucmdiKSsnIi8+JzpXKyIvPiJ9ZnVuY3Rpb24gJE0oZyx4KXtpZighZ3x8bnVsbD09Zy5yZ2IpcmV0dXJuIHg7''@;'; put 'put ''Zm9yKHZhciB3PSgiMDAwMDAwIitnLnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxWPVt3LnNsaWNlKDAsMiksdy5zbGljZSgyLDQpLHcuc2xpY2UoNCw2KV0ubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4gcGFyc2VJbnQobGUsMTYpfSksVz0wO1c8dmwubGVuZ3RoOysrVyl7dmFyIGVlPXZs''@;'; put 'put ''W1ddO2lmKGVlWzBdPT1WWzBdJiZlZVsxXT09VlsxXSYmZWVbMl09PVZbMl0pcmV0dXJuIFd9cmV0dXJuIHZsLmxlbmd0aDw2ND8odmwucHVzaChbVlswXSxWWzFdLFZbMl1dKSx2bC5sZW5ndGgtMSk6eH1mdW5jdGlvbiBtZihnKXt2YXIgeD1bIiIsIiIsIiJdO2lmKCFnKXJldHVybltdO3Zh''@;'; put 'put ''ciB3PSIiLFY9ZyYmZy5zP2Z1bmN0aW9uIFBVKGcpe3ZhciB4PVsiIiwiIl07aWYoIWcpcmV0dXJuIHg7aWYoZy5zeiYmKHhbMF0rPSImIitnLnN6LHhbMV09IiYxMiIreFsxXSksZy5uYW1lJiYoeFswXSs9JyYiJytnLm5hbWUrJyxSZWd1bGFyIicseFsxXT0nJiItLFJlZ3VsYXIiJyt4WzFd''@;'; put 'put ''KSxnLmJvbGQmJih4WzBdKz0iJkIiLHhbMV09IiZCIit4WzFdKSxnLnVuZGVybGluZSl7dmFyIHc9Mj09Zy51bmRlcmxpbmU/IiZFIjoiJlUiO3hbMF0rPXcseFsxXT13K3hbMV19cmV0dXJuIGcuaXRhbGljJiYoeFswXSs9IiZJIix4WzFdPSImSSIreFsxXSksZy5jb2xvciYmbnVsbCE9Zy5j''@;'; put 'put ''b2xvci5yZ2ImJih4WzBdKz0iJksiK01kKGcuY29sb3IucmdiKSx4WzFdKz0iJkswMDAwMDAiKSxnLnN0cmlrZSYmKHhbMF0rPSImUyIseFsxXT0iJlMiK3hbMV0pLCJzdXBlciI9PWcudmFsaWduJiYoeFswXSs9IiZYIix4WzFdPSImWCIreFsxXSksInN1YiI9PWcudmFsaWduJiYoeFswXSs9''@;'; put 'put ''IiZZIix4WzFdPSImWSIreFsxXSkseH0oZy5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgZz9bZyxnLGddOm51bGwhPWcuZmlyc3R8fG51bGwhPWcuZXZlbnx8bnVsbCE9Zy5vZGQ/KG51bGwhPWcub2RkJiYoeFswXT1tZihnLm9kZClbMF0pLHZvaWQgMD09PWcuZmlyc3QmJnhb''@;'; put 'put ''MF0mJih4WzFdPXhbMF0pLG51bGwhPWcuZmlyc3QmJih4WzFdPW1mKGcuZmlyc3QpWzBdKSxudWxsIT1nLmV2ZW4mJih4WzJdPW1mKGcuZXZlbilbMF0pLHgpOmcubGVmdHx8Zy5jZW50ZXJ8fGcucmlnaHQ/KGcubGVmdCYmKHcrPSImTCIrbWYoZy5sZWZ0KVswXSksZy5jZW50ZXImJih3Kz0i''@;'; put 'put ''JkMiK21mKGcuY2VudGVyKVswXSksZy5yaWdodCYmKHcrPSImUiIrbWYoZy5yaWdodClbMF0pLFt3LHcsd10pOm51bGwhPWcudj9bdz1WWzBdK2cudi5yZXBsYWNlKC8mL2csIiYmIikrVlsxXSx3LHddOm51bGwhPWcudz9bdz1WWzBdK2cudytWWzFdLHcsd106QXJyYXkuaXNBcnJheShnLlIp''@;'; put 'put ''PyhnLlIuZm9yRWFjaChmdW5jdGlvbihXKXt3Kz1tZihXKVswXX0pLFt3LHcsd10pOltdfXZhciBEUj17MToiTGV0dGVyIiwzOiJUYWJsb2lkIiw1OiJMZWdhbCIsNzoiRXhlY3V0aXZlIiw4OiJBMyIsOToiQTQiLDExOiJBNSIsMTI6IkI0IiwxMzoiQjUiLDE0OiJGb2xpbyIsMjA6IkVudmVs''@;'; put 'put ''b3BlIiwzNzoiTW9uYXJjaCIsNzA6IkE2In0sS009SWUoRFIpO3lhLkNPTk49Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29ubmVjdGlvbnMiO3ZhciBWVT16cigiZXh0ZXJuYWxMaW5rIixudWxsLHt4bWxuczpS''@;'; put 'put ''by5tYWluWzBdfSk7eWEuSU1HPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIix5YS5EUkFXPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlv''@;'; put 'put ''bnNoaXBzL2RyYXdpbmciO3ZhciBJUj17dDoidG9wIixjdHI6ImNlbnRlciIsYjoiYm90dG9tIixqdXN0OiJ0b3AiLGRpc3Q6InRvcCJ9LFJSPXtjdHI6ImNlbnRlciIsZGlzdDoiY2VudGVyIixqdXN0OiJjZW50ZXIiLGp1c3RMb3c6ImNlbnRlciIsbDoibGVmdCIscjoicmlnaHQiLHRoYWlE''@;'; put 'put ''aXN0OiJjZW50ZXIifTtmdW5jdGlvbiBqVSgpe3ZhciBnPVtraV07cmV0dXJuIGcucHVzaCgnPHhkcjp3c0RyIHhtbG5zOnhkcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L3NwcmVhZHNoZWV0RHJhd2luZyIgeG1sbnM6YT0iaHR0cDovL3NjaGVt''@;'; put 'put ''YXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iLz4nKSxnLmpvaW4oIiIpfWZ1bmN0aW9uIE5nKGcpe3ZhciB3LHg9Z1siIWRhdGEiXTtyZXR1cm4iYmFzZTY0Ij09PWdbIiFkYXRhdHlwZSJdPygodz14Lm1hdGNoKC9eZGF0YTouKiwvKSkmJih4PXguc2xpY2Uod1sw''@;'; put 'put ''XS5sZW5ndGgpKSxoZS5kZWNvZGUoeCkpOnh9eWEuVEFCTEU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGFibGUiO3ZhciBKTT0vPCg/Olx3KzopP3NoYXBlKD86W15cd11bXj5dKik/PihbXHNcU10qPyk8XC8o''@;'; put 'put ''Pzpcdys6KT9zaGFwZT4vZztmdW5jdGlvbiBPUihnLHgsdyxWKXt2YXIgVz1bMjE2MDAsMjE2MDBdLGVlPVsibTAsMGwwIixXWzFdLFdbMF0sV1sxXSxXWzBdLCIweGUiXS5qb2luKCIsIiksbGU9W3pyKCJ4bWwiLG51bGwseyJ4bWxuczp2IjpvY192LCJ4bWxuczpvIjpvY19vLCJ4bWxuczp4''@;'; put 'put ''IjpvY194LCJ4bWxuczptdiI6Imh0dHA6Ly9tYWNWbWxTY2hlbWFVcmkifSkucmVwbGFjZSgvXC8+LywiPiIpLHpyKCJvOnNoYXBlbGF5b3V0Iix6cigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0sb2U9MTAyNCpnLGRlPXd8fFtdO2RlLmxlbmd0''@;'; put 'put ''aD4wJiZsZS5wdXNoKHpyKCJ2OnNoYXBldHlwZSIsW3pyKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSx6cigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9''@;'; put 'put ''KSx6cigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTpXLmpvaW4oIiwiKSwibzpzcHQiOjIwMSxwYXRoOmVlfSkpLGRlLmZvckVhY2goZnVuY3Rpb24oUmUpeysrb2UsbGU9bGUuY29uY2F0''@;'; put 'put ''KGZ1bmN0aW9uIFU3KGcseCl7dmFyIHc9e2lkOiJfeDAwMDBfcyIreCx0eXBlOiIjX3gwMDAwX3QyMDEiLHN0eWxlOiJtc28td3JhcC1zdHlsZTp0aWdodCJ9OygiUmFkaW8iPT1nWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1nWyIhdHlwZSJdfHwiTGlzdCI9PWdbIiF0eXBlIl18fCJEcm9wIj09''@;'; put 'put ''Z1siIXR5cGUiXSkmJih3LnN0cm9rZWQ9ImYiKSwiTGFiZWwiPT1nWyIhdHlwZSJdJiYody5maWxsZWQ9ImYiKTt2YXIgVj0iIjtnLnQmJlhfW2dbIiF0eXBlIl1dJiYoVj1YX1tnWyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxvaShnLnQpKSk7dmFyIFc9W107cmV0dXJuIGcubWFjcm8mJlcu''@;'; put 'put ''cHVzaCgkbygieDpGbWxhTWFjcm8iLGcubWFjcm8pKSxnLmxpbmsmJlcucHVzaCgkbygieDpGbWxhTGluayIsZy5saW5rKSksZy52YWwmJlcucHVzaCgkbygiUmFkaW8iPT1nWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1nWyIhdHlwZSJdPyJ4OkNoZWNrZWQiOiJ4OlZhbCIsU3RyaW5nKGcudmFs''@;'; put 'put ''KSkpLGcucmVmJiZXLnB1c2goJG8oIng6Rm1sYVJhbmdlIixnLnJlZikpLGcuc2VsJiYiTGlzdCI9PWdbIiF0eXBlIl0mJlcucHVzaCgkbygieDpTZWxUeXBlIixnLnNlbCkpLGcubWluJiZXLnB1c2goJG8oIng6TWluIixTdHJpbmcoZy5taW4pKSksZy5tYXgmJlcucHVzaCgkbygieDpNYXgi''@;'; put 'put ''LFN0cmluZyhnLm1heCkpKSxnLnN0ZXAmJlcucHVzaCgkbygieDpJbmMiLFN0cmluZyhnLnN0ZXApKSksZy5wYWdlJiZXLnB1c2goJG8oIng6UGFnZSIsU3RyaW5nKGcucGFnZSkpKSxbXS5jb25jYXQoWyI8djpzaGFwZSIrRXUodykrIj4iXSkuY29uY2F0KHo3W2dbIiF0eXBlIl1dfHxbXSku''@;'; put 'put ''Y29uY2F0KFtWXSkuY29uY2F0KFsnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSInK2dbIiF0eXBlIl0rJyI+JywkbygieDpBbmNob3IiLEg3KGdbIiFwb3MiXSkpLCRvKCJ4OlByaW50T2JqZWN0IiwiRmFsc2UiKV0pLmNvbmNhdChXKS5jb25jYXQoS19bZ1siIXR5cGUiXV18fFtdKS5jb25j''@;'; put 'put ''YXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShSZSxvZSkpfSk7dmFyIERlPXh8fFtdO3JldHVybiBEZS5sZW5ndGg+MCYmbGUucHVzaCh6cigidjpzaGFwZXR5cGUiLFt6cigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksenIoInY6cGF0aCIsbnVsbCx7''@;'; put 'put ''Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpXLmpvaW4oIiwiKSwibzpzcHQiOjIwMixwYXRoOmVlfSkpLERlLmZvckVhY2goZnVuY3Rpb24oUmUpeysrb2UsbGU9bGUuY29uY2F0KGZ1bmN0''@;'; put 'put ''aW9uIHpwKGcseCx3KXt2YXIgVj14YShnWzBdKSxXPWdbMV0uZmlsbHx8e307Z1sxXS5zJiYoVz17dHlwZTpnWzFdLnMucGF0dGVyblR5cGV8fCJzb2xpZCJ9LGdbMV0ucy5mZ0NvbG9yJiYoVy5jb2xvcjI9Vy5jb2xvcjE9IiMiK01kKGdbMV0ucy5mZ0NvbG9yLnJnYikpLGdbMV0ucy5iZ0Nv''@;'; put 'put ''bG9yJiYoVy5jb2xvcjI9IiMiK01kKGdbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgZWU9e2NvbG9yMjpXLmNvbG9yMnx8IiNCRUZGODIiLHR5cGU6Vy50eXBlfHwiZ3JhZGllbnQifTsiZ3JhZGllbnQiPT1lZS50eXBlJiYoZWUuYW5nbGU9Ii0xODAiKTt2YXIgbGU9ImdyYWRpZW50Ij09ZWUu''@;'; put 'put ''dHlwZT96cigibzpmaWxsIixudWxsLHt0eXBlOiJncmFkaWVudFVuc2NhbGVkIiwidjpleHQiOiJ2aWV3In0pOm51bGwsb2U9enIoInY6ZmlsbCIsbGUsZWUpLGRlPXt9O2dbMV0uc2hhZG93JiYoZ1sxXS5zaGFkb3cuY29sb3ImJihkZS5jb2xvcj1nWzFdLnNoYWRvdy5jb2xvciksZ1sxXS5z''@;'; put 'put ''aGFkb3cub24mJihkZS5vbj1nWzFdLnNoYWRvdy5vbikpLGRlLm9ic2N1cmVkPSJ0Ijt2YXIgRGU9ITAsUmU9ITAsVmU9Z1sxXVsiIXBvcyJdP3JuKGdbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gVmUmJihSZT1udWxsPT1WZS5SJiZudWxsPT1WZS5DJiZudWxsPT1WZS5YJiZudWxsPT1WZS5Z''@;'; put 'put ''LERlPSFWZS5yJiYhVmUuYyxZTShWZSwwLHcpKSxbIjx2OnNoYXBlIitFdSh7aWQ6Il94MDAwMF9zIit4LHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3ot''@;'; put 'put ''aW5kZXg6MTAiKyhnWzFdLmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOlcuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KGdbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+IixvZSx6cigidjpzaGFkb3ciLG51bGwsZGUpLHpyKCJ2OnBh''@;'; put 'put ''dGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxEZT8iPHg6TW92ZVdpdGhDZWxscy8+IjoiIixSZT8iPHg6''@;'; put 'put ''U2l6ZVdpdGhDZWxscy8+IjoiIiwkbygieDpBbmNob3IiLFZlP0g3KFZlKTpnWzFdLnJhd2FuY2hvcnx8W1YuYysxLDAsVi5yKzEsMCxWLmMrMywyMCxWLnIrNSwyMF0uam9pbigiLCIpKSwkbygieDpBdXRvRmlsbCIsIkZhbHNlIiksJG8oIng6Um93IixTdHJpbmcoVi5yKSksJG8oIng6Q29s''@;'; put 'put ''dW1uIixTdHJpbmcoVi5jKSksZ1sxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oUmUsb2UsVikpfSksbGUucHVzaCgiPC94bWw+IiksbGUuam9pbigiIil9dmFyIEtfPXtCdXR0b246WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRv''@;'; put 'put ''RmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJl''@;'; put 'put ''bDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+Iiwi''@;'; put 'put ''PHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWdu''@;'; put 'put ''PkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwveDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5D''@;'; put 'put ''b21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3Jt''@;'; put 'put ''YWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jp''@;'; put 'put ''ei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxYXz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0n''@;'; put 'put ''Q2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZv''@;'; put 'put ''bnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0''@;'; put 'put ''LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRp''@;'; put 'put ''diBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86''@;'; put 'put ''c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6ImRhZnVxIn0sejc9e0J1dHRvbjpbJzx2OmZp''@;'; put 'put ''bGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJvcDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJv''@;'; put 'put ''dGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90''@;'; put 'put ''YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxD''@;'; put 'put ''aGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIGV4KGcseCx3LFYpe3ZhciBXPXsiIWlkIjp7fX0sZWU9W3pyKCJ4bWwiLG51bGws''@;'; put 'put ''eyJ4bWxuczp2IjpvY192LCJ4bWxuczpvIjpvY19vLCJ4bWxuczp4IjpvY194fSkucmVwbGFjZSgvXC8+LywiPiIpLHpyKCJvOnNoYXBlbGF5b3V0Iix6cigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsZGF0YToxfSkseyJ2OmV4dCI6ImVkaXQifSksJzx2OnNoYXBldHlwZSBpZD0i''@;'; put 'put ''X3gwMDAwX3Q3NSIgY29vcmRzaXplPSIyMTYwMCwyMTYwMCIgbzpzcHQ9Ijc1IiBvOnByZWZlcnJlbGF0aXZlPSJ0IiBwYXRoPSJtQDRANWxANEAxMUA5QDExQDlANXhlIiBmaWxsZWQ9ImYiIHN0cm9rZWQ9ImYiPicsJzx2OnN0cm9rZSBqb2luc3R5bGU9Im1pdGVyIi8+JywiPHY6Zm9ybXVs''@;'; put 'put ''YXM+IiwnPHY6ZiBlcW49ImlmIGxpbmVEcmF3biBwaXhlbExpbmVXaWR0aCAwIi8+JywnPHY6ZiBlcW49InN1bSBAMCAxIDAiLz4nLCc8djpmIGVxbj0ic3VtIDAgMCBAMSIvPicsJzx2OmYgZXFuPSJwcm9kIEAyIDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsV2lkdGgi''@;'; put 'put ''Lz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMCAxIi8+JywnPHY6ZiBlcW49InByb2QgQDYgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJzdW0gQDggMjE2MDAgMCIv''@;'; put 'put ''PicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMTAgMjE2MDAgMCIvPicsIjwvdjpmb3JtdWxhcz4iLCc8djpwYXRoIG86ZXh0cnVzaW9ub2s9ImYiIGdyYWRpZW50c2hhcGVvaz0idCIgbzpjb25uZWN0dHlwZT0icmVjdCIvPicsJzxv''@;'; put 'put ''OmxvY2sgdjpleHQ9ImVkaXQiIGFzcGVjdHJhdGlvPSJ0Ii8+JywiPC92OnNoYXBldHlwZT4iXSxsZT0xO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihvZSl7VltvZV0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihkZSl7VltvZV1bZGVdJiZb''@;'; put 'put ''ImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oRGUpe2lmKEFycmF5LmlzQXJyYXkoVltvZV1bZGVdW0RlXSkpZm9yKHZhciBSZT0wO1JlPFZbb2VdW2RlXVtEZV0ubGVuZ3RoOysrUmUpaWYoVltvZV1bZGVdW0RlXVtSZV0pe3ZhciBWZT1WW29lXVtkZV1bRGVdW1Jl''@;'; put 'put ''XTtpZigicmVtb3RlIj09VmVbIiFkYXRhdHlwZSJdKXRocm93IkNhbm5vdCB1c2UgbGlua2VkIGltYWdlIGluIGhlYWRlciBvciBmb290ZXIiO2Zvcig7UXIoZywieGwvbWVkaWEvaW1hZ2UiK2xlKyIuanBnIik7KSsrbGU7Zy5maWxlKCJ4bC9tZWRpYS9pbWFnZSIrbGUrIi5qcGciLE5nKFZl''@;'; put 'put ''KSx7YmluYXJ5OiEwfSksJHMoVywtMSwiLi4vbWVkaWEvaW1hZ2UiK2xlKyIuanBnIix5YS5JTUcpO3ZhciBHZT0iX3gwMDAwX3MiKygxMDI1K1ZlLl9jbnQpLGV0PSJwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDt6LWluZGV4OiIrKFZlLl9jbnQrMSkrIjsi''@;'; put 'put ''O2V0Kz0id2lkdGg6IitWZVsiIXBvcyJdLncrInB4OyIsZXQrPSJoZWlnaHQ6IitWZVsiIXBvcyJdLmgrInB4OyI7dmFyIGJ0PURlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK29lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOyJvZGQiIT09ZGUmJihidCs9ZGUudG9VcHBlckNhc2UoKSksVltv''@;'; put 'put ''ZV1bZGVdW0RlXS5sZW5ndGg+MSYmKGJ0Kz1SZSksZWUucHVzaCh6cigidjpzaGFwZSIsWyc8djppbWFnZWRhdGEgbzpyZWxpZD0icklkJysoVmUuX2NudCsxKSsnIiBvOnRpdGxlPSJzaGVldGpzIi8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXS5qb2luKCIiKSx7''@;'; put 'put ''aWQ6YnQsIm86c3BpZCI6R2UsdHlwZToiI194MDAwMF90NzUiLHN0eWxlOmV0fSkpfX0pfSl9KSxlZS5wdXNoKCI8L3htbD4iKSxnLmZpbGUoInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK3crIkhGLnZtbCIsZWUuam9pbigiIikpLGcuZmlsZSgieGwvZHJhd2luZ3MvX3JlbHMvdm1sRHJhd2lu''@;'; put 'put ''ZyIrdysiSEYudm1sLnJlbHMiLHJoKFcpKX15YS5DTU5UPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIjt2YXIgdHg9enIoImNvbW1lbnRzIixudWxsLHt4bWxuczpSby5tYWluWzBdfSk7ZnVuY3Rp''@;'; put 'put ''b24gbngoZyl7dmFyIHg9W2tpLHR4XSx3PVtdO3JldHVybiB4LnB1c2goIjxhdXRob3JzPiIpLGcuZm9yRWFjaChmdW5jdGlvbihWKXtWWzFdLmZvckVhY2goZnVuY3Rpb24oVyl7dmFyIGVlPW9pKFcuYSk7dy5pbmRleE9mKGVlKT4tMXx8KHcucHVzaChlZSkseC5wdXNoKCI8YXV0aG9yPiIr''@;'; put 'put ''ZWUrIjwvYXV0aG9yPiIpKX0pfSkseC5wdXNoKCI8L2F1dGhvcnM+IikseC5wdXNoKCI8Y29tbWVudExpc3Q+IiksZy5mb3JFYWNoKGZ1bmN0aW9uKFYpe1ZbMV0uZm9yRWFjaChmdW5jdGlvbihXKXt4LnB1c2goJzxjb21tZW50IHJlZj0iJytWWzBdKyciIGF1dGhvcklkPSInK3cuaW5kZXhP''@;'; put 'put ''ZihvaShXLmEpKSsnIj48dGV4dD4nKSx4LnB1c2goVy5SP3k3KFcuUik6JG8oInQiLG51bGw9PVcudD8iIjpvaShXLnQpKSkseC5wdXNoKCI8L3RleHQ+PC9jb21tZW50PiIpfSl9KSx4LnB1c2goIjwvY29tbWVudExpc3Q+IikseC5sZW5ndGg+MiYmKHhbeC5sZW5ndGhdPSI8L2NvbW1lbnRz''@;'; put 'put ''PiIseFsxXT14WzFdLnJlcGxhY2UoIi8+IiwiPiIpKSx4LmpvaW4oIiIpfXZhciByeD1jYztmdW5jdGlvbiBIUihnKXt2YXIgeD1DdCgpLHc9W107cmV0dXJuIHV0KHgsIkJydEJlZ2luQ29tbWVudHMiKSx1dCh4LCJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIiksZy5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KFYpe1ZbMV0uZm9yRWFjaChmdW5jdGlvbihXKXt3LmluZGV4T2YoVy5hKT4tMXx8KHcucHVzaChXLmEuc2xpY2UoMCw1NCkpLHV0KHgsIkJydENvbW1lbnRBdXRob3IiLGZ1bmN0aW9uIFRtKGcpe3JldHVybiBrYyhnLnNsaWNlKDAsNTQpKX0oVy5hKSkpfSl9KSx1dCh4LCJCcnRFbmRDb21t''@;'; put 'put ''ZW50QXV0aG9ycyIpLHV0KHgsIkJydEJlZ2luQ29tbWVudExpc3QiKSxnLmZvckVhY2goZnVuY3Rpb24oVil7VlsxXS5mb3JFYWNoKGZ1bmN0aW9uKFcpe1cuaWF1dGhvcj13LmluZGV4T2YoVy5hKTt2YXIgZWU9e3M6eGEoVlswXSksZTp4YShWWzBdKX07dXQoeCwiQnJ0QmVnaW5Db21tZW50''@;'; put 'put ''IixmdW5jdGlvbiBQUihnLHgpe3JldHVybiBudWxsPT14JiYoeD1IcigzNikpLHgud3JpdGVfc2hpZnQoNCxnWzFdLmlhdXRob3IpLE9wKGdbMF0seCkseC53cml0ZV9zaGlmdCg0LDApLHgud3JpdGVfc2hpZnQoNCwwKSx4LndyaXRlX3NoaWZ0KDQsMCkseC53cml0ZV9zaGlmdCg0LDApLHh9''@;'; put 'put ''KFtlZSxXXSkpLFcudCYmVy50Lmxlbmd0aD4wJiZ1dCh4LCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gQmMoZyx4KXt2YXIgdz0hMTtyZXR1cm4gbnVsbD09eCYmKHc9ITAseD1IcigyMys0KmcudC5sZW5ndGgpKSx4LndyaXRlX3NoaWZ0KDEsMSksa2MoZy50LHgpLHgud3JpdGVfc2hpZnQo''@;'; put 'put ''NCwxKSxmdW5jdGlvbiB2ZChnLHgpe3h8fCh4PUhyKDQpKSx4LndyaXRlX3NoaWZ0KDIsZy5pY2h8fDApLHgud3JpdGVfc2hpZnQoMixnLmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSx4KSx3P3guc2xpY2UoMCx4LmwpOnh9KFcpKSx1dCh4LCJCcnRFbmRDb21tZW50IiksZGVsZXRlIFcuaWF1''@;'; put 'put ''dGhvcn0pfSksdXQoeCwiQnJ0RW5kQ29tbWVudExpc3QiKSx1dCh4LCJCcnRFbmRDb21tZW50cyIpLHguZW5kKCl9dmFyIEJSPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEiXTt5YS5EUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50''@;'; put 'put ''LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIseWEuTVM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiO3ZhciBEdT1mdW5jdGlvbigpe3ZhciBnPS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxbMS05''@;'; put 'put ''XVxkKnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFbQS1aYS16MC05X10pL2cseD17cjowLGM6MH07ZnVuY3Rpb24gdyhWLFcsZWUsbGUpe3ZhciBvZT0hMSxkZT0hMTswPT1lZS5sZW5ndGg/ZGU9ITA6IlsiPT1lZS5jaGFyQXQoMCkmJihkZT0hMCxlZT1lZS5zbGljZSgxLC0xKSksMD09''@;'; put 'put ''bGUubGVuZ3RoP29lPSEwOiJbIj09bGUuY2hhckF0KDApJiYob2U9ITAsbGU9bGUuc2xpY2UoMSwtMSkpO3ZhciBEZT1lZS5sZW5ndGg+MD8wfHBhcnNlSW50KGVlLDEwKTowLFJlPWxlLmxlbmd0aD4wPzB8cGFyc2VJbnQobGUsMTApOjA7cmV0dXJuIG9lP1JlKz14LmM6LS1SZSxkZT9EZSs9''@;'; put 'put ''eC5yOi0tRGUsVysob2U/IiI6IiQiKStQYShSZSkrKGRlPyIiOiIkIikrem4oRGUpfXJldHVybiBmdW5jdGlvbihXLGVlKXtyZXR1cm4geD1lZSxXLnJlcGxhY2UoZyx3KX19KCkselI9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18''@;'; put 'put ''WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csa209ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeCx3KXtyZXR1cm4geC5yZXBs''@;'; put 'put ''YWNlKHpSLGZ1bmN0aW9uKFYsVyxlZSxsZSxvZSxkZSl7dmFyIERlPUtvKGxlKS0oZWU/MDp3LmMpLFJlPXlpKGRlKS0ob2U/MDp3LnIpO3JldHVybiBXKyJSIisoMD09UmU/IiI6b2U/UmUrMToiWyIrUmUrIl0iKSsiQyIrKDA9PURlPyIiOmVlP0RlKzE6IlsiK0RlKyJdIil9KX19KCk7ZnVu''@;'; put 'put ''Y3Rpb24gVVIoZyx4KXtyZXR1cm4gZy5yZXBsYWNlKHpSLGZ1bmN0aW9uKHcsVixXLGVlLGxlLG9lKXtyZXR1cm4gVisoIiQiPT1XP1crZWU6UGEoS28oZWUpK3guYykpKygiJCI9PWxlP2xlK29lOnpuKHlpKG9lKSt4LnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24odyxW''@;'; put 'put ''LFcpe3JldHVybiB6bih5aShWKSt4LnIpKyI6Iit6bih5aShXKSt4LnIpfSl9ZnVuY3Rpb24gRG0oZyx4LHcpe3ZhciBXPXdyKHgpLnMsZWU9eGEodyk7cmV0dXJuIFVSKGcse3I6ZWUuci1XLnIsYzplZS5jLVcuY30pfWZ1bmN0aW9uIGx4KGcpe3JldHVybiBnLnJlcGxhY2UoL194bGZuXC4v''@;'; put 'put ''ZywiIil9ZnVuY3Rpb24gVWMoZyl7Zy5sKz0xfWZ1bmN0aW9uIFQzKGcseCl7dmFyIHc9Zy5yZWFkX3NoaWZ0KDE9PXg/MToyKTtyZXR1cm5bMTYzODMmdyx3Pj4xNCYxLHc+PjE1JjFdfWZ1bmN0aW9uIGN4KGcseCx3KXt2YXIgVj0yO2lmKHcpe2lmKHcuYmlmZj49MiYmdy5iaWZmPD01KXJl''@;'; put 'put ''dHVybiBWZyhnKTsxMj09dy5iaWZmJiYoVj00KX12YXIgVz1nLnJlYWRfc2hpZnQoViksZWU9Zy5yZWFkX3NoaWZ0KFYpLGxlPVQzKGcsMiksb2U9VDMoZywyKTtyZXR1cm57czp7cjpXLGM6bGVbMF0sY1JlbDpsZVsxXSxyUmVsOmxlWzJdfSxlOntyOmVlLGM6b2VbMF0sY1JlbDpvZVsxXSxy''@;'; put 'put ''UmVsOm9lWzJdfX19ZnVuY3Rpb24gVmcoZyl7dmFyIHg9VDMoZywyKSx3PVQzKGcsMiksVj1nLnJlYWRfc2hpZnQoMSksVz1nLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6eFswXSxjOlYsY1JlbDp4WzFdLHJSZWw6eFsyXX0sZTp7cjp3WzBdLGM6VyxjUmVsOndbMV0sclJlbDp3WzJdfX19''@;'; put 'put ''ZnVuY3Rpb24gdXgoZyx4LHcpe2lmKHcmJncuYmlmZj49MiYmdy5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBCb2UoZyl7dmFyIHg9VDMoZywyKSx3PWcucmVhZF9zaGlmdCgxKTtyZXR1cm57cjp4WzBdLGM6dyxjUmVsOnhbMV0sclJlbDp4WzJdfX0oZyk7dmFyIFY9Zy5yZWFkX3NoaWZ0KHcm''@;'; put 'put ''JjEyPT13LmJpZmY/NDoyKSxXPVQzKGcsMik7cmV0dXJue3I6VixjOldbMF0sY1JlbDpXWzFdLHJSZWw6V1syXX19ZnVuY3Rpb24gV2MoZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDIpLHc9Zy5yZWFkX3NoaWZ0KDIpO3JldHVybntyOngsYzoyNTUmdyxmUXVvdGVkOiEhKDE2Mzg0JncpLGNSZWw6''@;'; put 'put ''dz4+MTUsclJlbDp3Pj4xNX19ZnVuY3Rpb24gZHgoZyl7cmV0dXJuW2cucmVhZF9zaGlmdCgxKSxnLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIEtSKGcseCl7dmFyIHc9W2cucmVhZF9zaGlmdCgxKV07aWYoMTI9PXgpc3dpdGNoKHdbMF0pe2Nhc2UgMjp3WzBdPTQ7YnJlYWs7Y2FzZSA0Ondb''@;'; put 'put ''MF09MTY7YnJlYWs7Y2FzZSAwOndbMF09MTticmVhaztjYXNlIDE6d1swXT0yfXN3aXRjaCh3WzBdKXtjYXNlIDQ6d1sxXT1pYShnLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT14JiYoZy5sKz03KTticmVhaztjYXNlIDM3OmNhc2UgMTY6d1sxXT1WMFtnW2cubF1dLGcubCs9MTI9PXg/NDo4O2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMDpnLmwrPTg7YnJlYWs7Y2FzZSAxOndbMV09TmwoZyk7YnJlYWs7Y2FzZSAyOndbMV09b2YoZywwLHtiaWZmOng+MCYmeDw4PzI6eH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrd1swXSl9cmV0dXJuIHd9ZnVuY3Rpb24gcVUoZyx4LHcp''@;'; put 'put ''e2Zvcih2YXIgVj1nLnJlYWRfc2hpZnQoMTI9PXcuYmlmZj80OjIpLFc9W10sZWU9MDtlZSE9VjsrK2VlKVcucHVzaCgoMTI9PXcuYmlmZj9uaDpWMSkoZyw4KSk7cmV0dXJuIFd9ZnVuY3Rpb24gem9lKGcseCx3KXt2YXIgVj0wLFc9MDsxMj09dy5iaWZmPyhWPWcucmVhZF9zaGlmdCg0KSxX''@;'; put 'put ''PWcucmVhZF9zaGlmdCg0KSk6KFc9MStnLnJlYWRfc2hpZnQoMSksVj0xK2cucmVhZF9zaGlmdCgyKSksdy5iaWZmPj0yJiZ3LmJpZmY8OCYmKC0tViwwPT0tLVcmJihXPTI1NikpO2Zvcih2YXIgZWU9MCxsZT1bXTtlZSE9ViYmKGxlW2VlXT1bXSk7KytlZSlmb3IodmFyIG9lPTA7b2UhPVc7''@;'; put 'put ''KytvZSlsZVtlZV1bb2VdPUtSKGcsdy5iaWZmKTtyZXR1cm4gbGV9ZnVuY3Rpb24gSG0oZyx4LHcpe3JldHVybiBnLmwrPTIsW1djKGcpXX1mdW5jdGlvbiAkNyhnKXtyZXR1cm4gZy5sKz02LFtdfXZhciBKVT1IbSxRVT0kNyxObT0kNyxLNz1IbTtmdW5jdGlvbiB2eChnKXtyZXR1cm4gZy5s''@;'; put 'put ''Kz0yLFt0bChnKSwxJmcucmVhZF9zaGlmdCgyKV19dmFyIGVXPUhtLHFSPXZ4LFVvZT0kNyxKUj1IbSx0Vz1IbSxRUj1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3Rh''@;'; put 'put ''bHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLF94PXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24gS1UoZyx4LHcpe3JldHVybiBnLmwrKyx3JiYxMj09dy5iaWZmP1tnLnJlYWRfc2hpZnQoNCwiaSIpLDBdOltnLnJlYWRfc2hpZnQoMiksZy5yZWFkX3NoaWZ0KHcmJjI9PXcuYmlmZj8x''@;'; put 'put ''OjIpXX19LDI6e246IlB0Z1RibCIsZjpvbH0sMzp7bjoiUHRnQWRkIixmOlVjfSw0OntuOiJQdGdTdWIiLGY6VWN9LDU6e246IlB0Z011bCIsZjpVY30sNjp7bjoiUHRnRGl2IixmOlVjfSw3OntuOiJQdGdQb3dlciIsZjpVY30sODp7bjoiUHRnQ29uY2F0IixmOlVjfSw5OntuOiJQdGdMdCIs''@;'; put 'put ''ZjpVY30sMTA6e246IlB0Z0xlIixmOlVjfSwxMTp7bjoiUHRnRXEiLGY6VWN9LDEyOntuOiJQdGdHZSIsZjpVY30sMTM6e246IlB0Z0d0IixmOlVjfSwxNDp7bjoiUHRnTmUiLGY6VWN9LDE1OntuOiJQdGdJc2VjdCIsZjpVY30sMTY6e246IlB0Z1VuaW9uIixmOlVjfSwxNzp7bjoiUHRnUmFu''@;'; put 'put ''Z2UiLGY6VWN9LDE4OntuOiJQdGdVcGx1cyIsZjpVY30sMTk6e246IlB0Z1VtaW51cyIsZjpVY30sMjA6e246IlB0Z1BlcmNlbnQiLGY6VWN9LDIxOntuOiJQdGdQYXJlbiIsZjpVY30sMjI6e246IlB0Z01pc3NBcmciLGY6VWN9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gam9lKGcseCx3''@;'; put 'put ''KXtyZXR1cm4gZy5sKyssbGwoZywwLHcpfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIGVMKGcseCx3KXtyZXR1cm4gZy5sKz01LGcubCs9MixnLmwrPTI9PXcuYmlmZj8xOjQsWyJQVEdTSEVFVCJdfX0sMjc6e246IlB0Z0VuZFNoZWV0IixmOmZ1bmN0aW9uIHRMKGcseCx3KXtyZXR1''@;'; put 'put ''cm4gZy5sKz0yPT13LmJpZmY/NDo1LFsiUFRHRU5EU0hFRVQiXX19LDI4OntuOiJQdGdFcnIiLGY6ZnVuY3Rpb24gaHgoZyl7cmV0dXJuIGcubCsrLFYwW2cucmVhZF9zaGlmdCgxKV19fSwyOTp7bjoiUHRnQm9vbCIsZjpmdW5jdGlvbiAkUihnKXtyZXR1cm4gZy5sKyssMCE9PWcucmVhZF9z''@;'; put 'put ''aGlmdCgxKX19LDMwOntuOiJQdGdJbnQiLGY6ZnVuY3Rpb24gR1IoZyl7cmV0dXJuIGcubCsrLGcucmVhZF9zaGlmdCgyKX19LDMxOntuOiJQdGdOdW0iLGY6ZnVuY3Rpb24gWFUoZyl7cmV0dXJuIGcubCsrLE5sKGcpfX0sMzI6e246IlB0Z0FycmF5IixmOmZ1bmN0aW9uIGViKGcseCx3KXt2''@;'; put 'put ''YXIgVj0oOTYmZ1tnLmwrK10pPj41O3JldHVybiBnLmwrPTI9PXcuYmlmZj82OjEyPT13LmJpZmY/MTQ6NyxbVl19fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiB2MShnLHgsdyl7dmFyIFY9KDk2JmdbZy5sXSk+PjU7Zy5sKz0xO3ZhciBXPWcucmVhZF9zaGlmdCh3JiZ3LmJpZmY8PTM/''@;'; put 'put ''MToyKTtyZXR1cm5baFdbV10sdUxbV10sVl19fSwzNDp7bjoiUHRnRnVuY1ZhciIsZjpmdW5jdGlvbiBHVShnLHgsdyl7dmFyIFY9Z1tnLmwrK10sVz1nLnJlYWRfc2hpZnQoMSksZWU9dyYmdy5iaWZmPD0zP1s4OD09Vj8tMTowLGcucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gcXUoZyl7cmV0''@;'; put 'put ''dXJuW2dbZy5sKzFdPj43LDMyNzY3JmcucmVhZF9zaGlmdCgyKV19KGcpO3JldHVybltXLCgwPT09ZWVbMF0/dUw6Y0wpW2VlWzFdXV19fSwzNTp7bjoiUHRnTmFtZSIsZjpmdW5jdGlvbiBuYihnLHgsdyl7dmFyIFY9Zy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGVlPWcucmVhZF9zaGlmdCghd3x8''@;'; put 'put ''dy5iaWZmPj04PzQ6Mik7c3dpdGNoKHcuYmlmZil7Y2FzZSAyOmcubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OmcubCs9ODticmVhaztjYXNlIDU6Zy5sKz0xMn1yZXR1cm5bViwwLGVlXX19LDM2OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gWlIoZyx4LHcpe3ZhciBWPSg5NiZnW2cubF0pPj41''@;'; put 'put ''O3JldHVybiBnLmwrPTEsW1YsdXgoZywwLHcpXX19LDM3OntuOiJQdGdBcmVhIixmOmZ1bmN0aW9uIFRsKGcseCx3KXtyZXR1cm5bKDk2JmdbZy5sKytdKT4+NSxjeChnLDAsdyldfX0sMzg6e246IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24gUG0oZyx4LHcpe3ZhciBWPWcucmVhZF9zaGlmdCgx''@;'; put 'put ''KT4+PjUmMztyZXR1cm4gZy5sKz13JiYyPT13LmJpZmY/Mzo0LFtWLGcucmVhZF9zaGlmdCh3JiYyPT13LmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixmOm9sfSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6b2x9LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIHJiKGcseCx3KXty''@;'; put 'put ''ZXR1cm5bZy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGcucmVhZF9zaGlmdCh3JiYyPT13LmJpZmY/MToyKV19fSw0Mjp7bjoiUHRnUmVmRXJyIixmOmZ1bmN0aW9uIGliKGcseCx3KXt2YXIgVj1nLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIGcubCs9NCx3LmJpZmY8OCYmZy5sLS0sMTI9PXcu''@;'; put 'put ''YmlmZiYmKGcubCs9MiksW1ZdfX0sNDM6e246IlB0Z0FyZWFFcnIiLGY6ZnVuY3Rpb24gUm0oZyx4LHcpe3ZhciBWPSg5NiZnW2cubCsrXSk+PjU7cmV0dXJuIGcubCs9dyYmdy5iaWZmPjg/MTI6dy5iaWZmPDg/Njo4LFtWXX19LDQ0OntuOiJQdGdSZWZOIixmOmZ1bmN0aW9uIFlSKGcseCx3''@;'; put 'put ''KXt2YXIgVj0oOTYmZ1tnLmxdKT4+NTtnLmwrPTE7dmFyIFc9ZnVuY3Rpb24gUV8oZyx4LHcpe3ZhciBWPXcmJncuYmlmZj93LmJpZmY6ODtpZihWPj0yJiZWPD01KXJldHVybiBmdW5jdGlvbiBXUihnKXt2YXIgeD1nLnJlYWRfc2hpZnQoMiksdz1nLnJlYWRfc2hpZnQoMSksVj0oMzI3Njgm''@;'; put 'put ''eCk+PjE1LFc9KDE2Mzg0JngpPj4xNDtyZXR1cm4geCY9MTYzODMsMT09ViYmeD49ODE5MiYmKHgtPTE2Mzg0KSwxPT1XJiZ3Pj0xMjgmJih3LT0yNTYpLHtyOngsYzp3LGNSZWw6VyxyUmVsOlZ9fShnKTt2YXIgVz1nLnJlYWRfc2hpZnQoVj49MTI/NDoyKSxlZT1nLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''bGU9KDE2Mzg0JmVlKT4+MTQsb2U9KDMyNzY4JmVlKT4+MTU7aWYoZWUmPTE2MzgzLDE9PW9lKWZvcig7Vz41MjQyODc7KVctPTEwNDg1NzY7aWYoMT09bGUpZm9yKDtlZT44MTkxOyllZS09MTYzODQ7cmV0dXJue3I6VyxjOmVlLGNSZWw6bGUsclJlbDpvZX19KGcsMCx3KTtyZXR1cm5bVixX''@;'; put 'put ''XX19LDQ1OntuOiJQdGdBcmVhTiIsZjpmdW5jdGlvbiBaNyhnLHgsdyl7dmFyIFY9KDk2JmdbZy5sKytdKT4+NSxXPWZ1bmN0aW9uIHpVKGcseCx3KXtpZih3LmJpZmY8OClyZXR1cm4gVmcoZyk7dmFyIFY9Zy5yZWFkX3NoaWZ0KDEyPT13LmJpZmY/NDoyKSxXPWcucmVhZF9zaGlmdCgxMj09''@;'; put 'put ''dy5iaWZmPzQ6MiksZWU9VDMoZywyKSxsZT1UMyhnLDIpO3JldHVybntzOntyOlYsYzplZVswXSxjUmVsOmVlWzFdLHJSZWw6ZWVbMl19LGU6e3I6VyxjOmxlWzBdLGNSZWw6bGVbMV0sclJlbDpsZVsyXX19fShnLDAsdyk7cmV0dXJuW1YsV119fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6ZnVu''@;'; put 'put ''Y3Rpb24gclcoZyl7cmV0dXJuW2cucmVhZF9zaGlmdCgxKT4+PjUmMyxnLnJlYWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiBpVyhnKXtyZXR1cm5bZy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGcucmVhZF9zaGlmdCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgiLGY6''@;'; put 'put ''ZnVuY3Rpb24gZngoZyx4LHcpe3JldHVybiA1PT13LmJpZmY/ZnVuY3Rpb24gcHgoZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDEpPj4+NSYzLHc9Zy5yZWFkX3NoaWZ0KDIsImkiKTtnLmwrPTg7dmFyIFY9Zy5yZWFkX3NoaWZ0KDIpO3JldHVybiBnLmwrPTEyLFt4LHcsVl19KGcpOltnLnJlYWRf''@;'; put 'put ''c2hpZnQoMSk+Pj41JjMsZy5yZWFkX3NoaWZ0KDIpLGcucmVhZF9zaGlmdCg0KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gRzcoZyx4LHcpe3ZhciBWPSg5NiZnW2cubF0pPj41O2cubCs9MTt2YXIgVz1nLnJlYWRfc2hpZnQoMik7cmV0dXJuIHcmJjU9PXcuYmlmZiYmKGcubCs9''@;'; put 'put ''MTIpLFtWLFcsdXgoZywwLHcpXX19LDU5OntuOiJQdGdBcmVhM2QiLGY6ZnVuY3Rpb24gSW0oZyx4LHcpe3ZhciBWPSg5NiZnW2cubCsrXSk+PjUsVz1nLnJlYWRfc2hpZnQoMiwiaSIpO2lmKHcmJjU9PT13LmJpZmYpZy5sKz0xMjtyZXR1cm5bVixXLGN4KGcsMCx3KV19fSw2MDp7bjoiUHRn''@;'; put 'put ''UmVmRXJyM2QiLGY6ZnVuY3Rpb24gRm0oZyx4LHcpe3ZhciBWPSg5NiZnW2cubCsrXSk+PjUsVz1nLnJlYWRfc2hpZnQoMiksZWU9NDtpZih3KXN3aXRjaCh3LmJpZmYpe2Nhc2UgNTplZT0xNTticmVhaztjYXNlIDEyOmVlPTZ9cmV0dXJuIGcubCs9ZWUsW1YsV119fSw2MTp7bjoiUHRnQXJl''@;'; put 'put ''YUVycjNkIixmOmZ1bmN0aW9uIEEzKGcseCx3KXt2YXIgVj0oOTYmZ1tnLmwrK10pPj41LFc9Zy5yZWFkX3NoaWZ0KDIpLGVlPTg7aWYodylzd2l0Y2gody5iaWZmKXtjYXNlIDU6Zy5sKz0xMixlZT02O2JyZWFrO2Nhc2UgMTI6ZWU9MTJ9cmV0dXJuIGcubCs9ZWUsW1YsV119fSwyNTU6e319''@;'; put 'put ''LGFXPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEw''@;'; put 'put ''ODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX07IWZ1bmN0aW9uKCl7Zm9yKHZhciBnIGluIGFXKV94W2ddPV94W2FXW2dd''@;'; put 'put ''XX0oKTt2YXIgYng9ezE6e246IlB0Z0VsZkxlbCIsZjp2eH0sMjp7bjoiUHRnRWxmUnciLGY6SlJ9LDM6e246IlB0Z0VsZkNvbCIsZjpKVX0sNjp7bjoiUHRnRWxmUndWIixmOnRXfSw3OntuOiJQdGdFbGZDb2xWIixmOks3fSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjplV30sMTE6e246IlB0''@;'; put 'put ''Z0VsZlJhZGljYWxTIixmOlVvZX0sMTM6e246IlB0Z0VsZkNvbFMiLGY6UVV9LDE1OntuOiJQdGdFbGZDb2xTViIsZjpObX0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6cVJ9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIHl4KGcpe2cubCs9Mjt2YXIgeD1nLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''dz1nLnJlYWRfc2hpZnQoMiksVj1nLnJlYWRfc2hpZnQoNCksVz1nLnJlYWRfc2hpZnQoMiksZWU9Zy5yZWFkX3NoaWZ0KDIpO3JldHVybntpeHRpOngsY29sdHlwZTozJncscnQ6UVJbdz4+MiYzMV0saWR4OlYsYzpXLEM6ZWV9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiBuVyhn''@;'; put 'put ''KXtyZXR1cm4gZy5sKz0yLFtnLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxuTD17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gazMoZyl7cmV0dXJuIGcubCs9NCxbMCwwXX19LDE6e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIFlVKGcseCx3KXt2YXIgVj0yNTUmZ1tnLmwrMV0/''@;'; put 'put ''MTowO3JldHVybiBnLmwrPXcmJjI9PXcuYmlmZj8zOjQsW1ZdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIFpVKGcseCx3KXt2YXIgVj0yNTUmZ1tnLmwrMV0/MTowO3JldHVybiBnLmwrPTIsW1YsZy5yZWFkX3NoaWZ0KHcmJjI9PXcuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJD''@;'; put 'put ''aG9vc2UiLGY6ZnVuY3Rpb24gV1UoZyx4LHcpe2cubCs9Mjtmb3IodmFyIFY9Zy5yZWFkX3NoaWZ0KHcmJjI9PXcuYmlmZj8xOjIpLFc9W10sZWU9MDtlZTw9VjsrK2VlKVcucHVzaChnLnJlYWRfc2hpZnQodyYmMj09dy5iaWZmPzE6MikpO3JldHVybiBXfX0sODp7bjoiUHRnQXR0ckdvdG8i''@;'; put 'put ''LGY6ZnVuY3Rpb24gTG0oZyx4LHcpe3ZhciBWPTI1NSZnW2cubCsxXT8xOjA7cmV0dXJuIGcubCs9MixbVixnLnJlYWRfc2hpZnQodyYmMj09dy5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJTdW0iLGY6ZnVuY3Rpb24gJFUoZyx4LHcpe2cubCs9dyYmMj09dy5iaWZmPzM6NH19LDMyOntu''@;'; put 'put ''OiJQdGdBdHRyQmF4Y2VsIixmOmZ1bmN0aW9uIFVVKGcpe3ZhciB4PTEmZ1tnLmwrMV07cmV0dXJuIGcubCs9NCxbeCwxXX19LDY0OntuOiJQdGdBdHRyU3BhY2UiLGY6ZnVuY3Rpb24gWTcoZyl7cmV0dXJuIGcucmVhZF9zaGlmdCgyKSxkeChnKX19LDY1OntuOiJQdGdBdHRyU3BhY2VTZW1p''@;'; put 'put ''IixmOmZ1bmN0aW9uIHRiKGcpe3JldHVybiBnLnJlYWRfc2hpZnQoMiksZHgoZyl9fSwxMjg6e246IlB0Z0F0dHJJZkVycm9yIixmOmZ1bmN0aW9uIE9tKGcpe3ZhciB4PTI1NSZnW2cubCsxXT8xOjA7cmV0dXJuIGcubCs9MixbeCxnLnJlYWRfc2hpZnQoMildfX0sMjU1Ont9fTtmdW5jdGlv''@;'; put 'put ''biBEMyhnLHgsdyxWLFcpe2lmKFYuYmlmZjw4KXJldHVybiBvbChnLHgpO2Zvcih2YXIgZWU9Zy5sK3gsbGU9W10sb2U9MDtvZSE9PXcubGVuZ3RoOysrb2Upc3dpdGNoKHdbb2VdWzBdKXtjYXNlIlB0Z0FycmF5Ijp3W29lXVsxXT16b2UoZywwLFYpLGxlLnB1c2god1tvZV1bMV0pO2JyZWFr''@;'; put 'put ''O2Nhc2UiUHRnTWVtQXJlYSI6d1tvZV1bMl09cVUoZywwLFYpLGxlLnB1c2god1tvZV1bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjpWJiYxMj09Vi5iaWZmJiYod1tvZV1bMV1bMV09Zy5yZWFkX3NoaWZ0KDQpLGxlLnB1c2god1tvZV1bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRn''@;'; put 'put ''RWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIit3W29lXVswXX1yZXR1cm4geD1lZS1nLmwsIVcmJjAhPT14JiZsZS5wdXNoKG9sKGcseCkpLGxlfWZ1bmN0aW9uIF9mKGcseCx3KXtmb3IodmFyIFcsZWUsVj1nLmwreCxs''@;'; put 'put ''ZT1bXTtWIT1nLmw7KXg9Vi1nLmwsVz1feFtlZT1nW2cubF1dLCgyND09PWVlfHwyNT09PWVlKSYmKFc9KDI0PT09ZWU/Yng6bkwpW2dbZy5sKzFdXSksVyYmVy5mP2xlLnB1c2goW1cubixXLmYoZyx4LHcpXSk6b2woZyx4KTtyZXR1cm4gbGV9ZnVuY3Rpb24gb1coZyl7Zm9yKHZhciB4PVtd''@;'; put 'put ''LHc9MDt3PGcubGVuZ3RoOysrdyl7Zm9yKHZhciBWPWdbd10sVz1bXSxlZT0wO2VlPFYubGVuZ3RoOysrZWUpe3ZhciBsZT1WW2VlXTtXLnB1c2gobGU/Mj09PWxlWzBdPyciJytsZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOmxlWzFdOiIiKX14LnB1c2goVy5qb2luKCIsIikpfXJldHVy''@;'; put 'put ''biB4LmpvaW4oIjsiKX1uTFszM109bkxbMzJdO3ZhciByTD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3Vi''@;'; put 'put ''OiItIn0sc1c9bmV3IFJlZ0V4cCgvW15cd1x1NEUwMC1cdTlGRkZcdTMwNDAtXHUzMEZGXS8pO2Z1bmN0aW9uIHd4KGcseCx3KXtpZighZylyZXR1cm4iU0gzM1RKU0VSUjAiO2lmKHcuYmlmZj44JiYoIWcuWFRJfHwhZy5YVElbeF0pKXJldHVybiBnLlNoZWV0TmFtZXNbeF07aWYoIWcuWFRJ''@;'; put 'put ''KXJldHVybiJTSDMzVEpTRVJSNiI7dmFyIFY9Zy5YVElbeF07aWYody5iaWZmPDgpcmV0dXJuIHg+MWU0JiYoeC09NjU1MzYpLHg8MCYmKHg9LXgpLDA9PXg/IiI6Zy5YVElbeC0xXTtpZighVilyZXR1cm4iU0gzM1RKU0VSUjEiO3ZhciBXPSIiO2lmKHcuYmlmZj44KXN3aXRjaChnW1ZbMF1d''@;'; put 'put ''WzBdKXtjYXNlIDM1NzpyZXR1cm4gVz0tMT09VlsxXT8iI1JFRiI6Zy5TaGVldE5hbWVzW1ZbMV1dLFZbMV09PVZbMl0/VzpXKyI6IitnLlNoZWV0TmFtZXNbVlsyXV07Y2FzZSAzNTg6cmV0dXJuIG51bGwhPXcuU0lEP2cuU2hlZXROYW1lc1t3LlNJRF06IlNIMzNUSlNTQU1FIitnW1ZbMF1d''@;'; put 'put ''WzBdO2RlZmF1bHQ6cmV0dXJuIlNIMzNUSlNTUkMiK2dbVlswXV1bMF19c3dpdGNoKGdbVlswXV1bMF1bMF0pe2Nhc2UgMTAyNTpyZXR1cm4gVz0tMT09VlsxXT8iI1JFRiI6Zy5TaGVldE5hbWVzW1ZbMV1dfHwiU0gzM1RKU0VSUjMiLFZbMV09PVZbMl0/VzpXKyI6IitnLlNoZWV0TmFtZXNb''@;'; put 'put ''VlsyXV07Y2FzZSAxNDg0OTpyZXR1cm4gZ1tWWzBdXS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oZWUpe3JldHVybiBlZS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBnW1ZbMF1dWzBdWzNdPyhXPS0xPT1WWzFdPyIjUkVGIjpnW1ZbMF1dWzBdWzNdW1ZbMV1dfHwiU0gzM1RKU0VS''@;'; put 'put ''UjQiLFZbMV09PVZbMl0/VzpXKyI6IitnW1ZbMF1dWzBdWzNdW1ZbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlvbiBDeChnLHgsdyl7cmV0dXJuIGZ1bmN0aW9uIGxXKGcseCl7aWYoIShnfHx4JiZ4LmJpZmY8PTUmJnguYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBu''@;'; put 'put ''YW1lIik7cmV0dXJuLyNSRUYvLnRlc3QoZyk/ZzpzVy50ZXN0KGcpPyInIitnKyInIjpnfSh3eChnLHgsdyksdyl9ZnVuY3Rpb24gSnUoZyx4LHcsVixXLGVlKXt2YXIgRGUsUmUsVmUsYnQsbGU9VyYmVy5iaWZmfHw4LG9lPWVlJiZudWxsIT14P3g6e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9''@;'; put 'put ''fSxkZT1bXSxHZT0wLGV0PTAsSmU9IiI7aWYoIWdbMF18fCFnWzBdWzBdKXJldHVybiIiO2Zvcih2YXIgZnQ9LTEsUnQ9IiIsU3Q9MCxBdD1nWzBdLmxlbmd0aDtTdDxBdDsrK1N0KXt2YXIgenQ9Z1swXVtTdF07c3dpdGNoKHp0WzBdKXtjYXNlIlB0Z1VtaW51cyI6ZGUucHVzaCgiLSIrZGUu''@;'; put 'put ''cG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmRlLnB1c2goIisiK2RlLnBvcCgpKTticmVhaztjYXNlIlB0Z1BlcmNlbnQiOmRlLnB1c2goZGUucG9wKCkrIiUiKTticmVhaztjYXNlIlB0Z0FkZCI6Y2FzZSJQdGdDb25jYXQiOmNhc2UiUHRnRGl2IjpjYXNlIlB0Z0VxIjpjYXNlIlB0Z0dl''@;'; put 'put ''IjpjYXNlIlB0Z0d0IjpjYXNlIlB0Z0xlIjpjYXNlIlB0Z0x0IjpjYXNlIlB0Z011bCI6Y2FzZSJQdGdOZSI6Y2FzZSJQdGdQb3dlciI6Y2FzZSJQdGdTdWIiOmlmKERlPWRlLnBvcCgpLFJlPWRlLnBvcCgpLGZ0Pj0wKXtzd2l0Y2goZ1swXVtmdF1bMV1bMF0pe2Nhc2UgMDpSdD15bigiICIs''@;'; put 'put ''Z1swXVtmdF1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpSdD15bigiXHIiLGdbMF1bZnRdWzFdWzFdKTticmVhaztkZWZhdWx0OmlmKFJ0PSIiLFcuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrZ1swXVtmdF1bMV1bMF0pfVJlKz1SdCxmdD0tMX1kZS5w''@;'; put 'put ''dXNoKFJlK3JMW3p0WzBdXStEZSk7YnJlYWs7Y2FzZSJQdGdJc2VjdCI6RGU9ZGUucG9wKCksUmU9ZGUucG9wKCksZGUucHVzaChSZSsiICIrRGUpO2JyZWFrO2Nhc2UiUHRnVW5pb24iOkRlPWRlLnBvcCgpLFJlPWRlLnBvcCgpLGRlLnB1c2goUmUrIiwiK0RlKTticmVhaztjYXNlIlB0Z1Jh''@;'; put 'put ''bmdlIjpEZT1kZS5wb3AoKSxSZT1kZS5wb3AoKSxkZS5wdXNoKFJlKyI6IitEZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJZiI6Y2FzZSJQdGdBdHRySWZFcnJvciI6Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1p''@;'; put 'put ''IjpjYXNlIlB0Z01lbUFyZWEiOmNhc2UiUHRnVGJsIjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01lbU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNhc2UiUHRnU2hlZXQiOmNhc2UiUHRnRW5kU2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1O''@;'; put 'put ''b01lbSI6YnJlYWs7Y2FzZSJQdGdSZWYiOlZlPUp0KHp0WzFdWzFdLG9lLFcpLGRlLnB1c2goQW4oVmUsbGUpKTticmVhaztjYXNlIlB0Z1JlZk4iOlZlPXc/SnQoenRbMV1bMV0sdyxXKTp6dFsxXVsxXSxkZS5wdXNoKEFuKFZlLGxlKSk7YnJlYWs7Y2FzZSJQdGdSZWYzZCI6R2U9enRbMV1b''@;'; put 'put ''MV0sVmU9SnQoenRbMV1bMl0sb2UsVyksSmU9Q3goVixHZSxXKSxkZS5wdXNoKEplKyIhIitBbihWZSxsZSkpO2JyZWFrO2Nhc2UiUHRnRnVuYyI6Y2FzZSJQdGdGdW5jVmFyIjp2YXIgbHI9enRbMV1bMF0sbW49enRbMV1bMV07bHJ8fChscj0wKTt2YXIgZHI9MD09KGxyJj0xMjcpP1tdOmRl''@;'; put 'put ''LnNsaWNlKC1scik7ZGUubGVuZ3RoLT1sciwiVXNlciI9PT1tbiYmKG1uPWRyLnNoaWZ0KCkpLGRlLnB1c2gobW4rIigiK2RyLmpvaW4oIiwiKSsiKSIpO2JyZWFrO2Nhc2UiUHRnQm9vbCI6ZGUucHVzaCh6dFsxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNhc2UiUHRn''@;'; put 'put ''TnVtIjpkZS5wdXNoKFN0cmluZyh6dFsxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjpkZS5wdXNoKCciJyt6dFsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIlB0Z0VyciI6ZGUucHVzaCh6dFsxXSk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6YnQ9Y24oenRbMV1bMV0sdz97czp3''@;'; put 'put ''fTpvZSxXKSxkZS5wdXNoKEtuKGJ0LFcpKTticmVhaztjYXNlIlB0Z0FyZWEiOmJ0PWNuKHp0WzFdWzFdLG9lLFcpLGRlLnB1c2goS24oYnQsVykpO2JyZWFrO2Nhc2UiUHRnQXJlYTNkIjpHZT16dFsxXVsxXSxidD1jbih6dFsxXVsyXSxvZSxXKSxKZT1DeChWLEdlLFcpLGRlLnB1c2goSmUr''@;'; put 'put ''IiEiK0tuKGJ0LFcpKTticmVhaztjYXNlIlB0Z0F0dHJTdW0iOmRlLnB1c2goIlNVTSgiK2RlLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSJQdGdOYW1lIjp2YXIgR249KFYubmFtZXN8fFtdKVsoZXQ9enRbMV1bMl0pLTFdfHwoVlswXXx8W10pW2V0XSxIbj1Hbj9Hbi5OYW1lOiJTSDMzVEpTTkFN''@;'; put 'put ''RSIrU3RyaW5nKGV0KTtIbiBpbiBkTCYmKEhuPWRMW0huXSksZGUucHVzaChIbik7YnJlYWs7Y2FzZSJQdGdOYW1lWCI6dmFyIE5uLGhyPXp0WzFdWzFdO2lmKGV0PXp0WzFdWzJdLCEoVy5iaWZmPD01KSl7dmFyIHRyPSIiO2lmKDE0ODQ5PT0oKFZbaHJdfHxbXSlbMF18fFtdKVswXXx8KDEw''@;'; put 'put ''MjU9PSgoVltocl18fFtdKVswXXx8W10pWzBdP1ZbaHJdW2V0XSYmVltocl1bZXRdLml0YWI+MCYmKHRyPVYuU2hlZXROYW1lc1tWW2hyXVtldF0uaXRhYi0xXSsiISIpOnRyPVYuU2hlZXROYW1lc1tldC0xXSsiISIpLFZbaHJdJiZWW2hyXVtldF0pdHIrPVZbaHJdW2V0XS5OYW1lO2Vsc2Ug''@;'; put 'put ''aWYoVlswXSYmVlswXVtldF0pdHIrPVZbMF1bZXRdLk5hbWU7ZWxzZXt2YXIgUGk9KHd4KFYsaHIsVyl8fCIiKS5zcGxpdCgiOzsiKTtQaVtldC0xXT90cj1QaVtldC0xXTp0cis9IlNIMzNUSlNFUlJYIn1kZS5wdXNoKHRyKTticmVha31ocjwwJiYoaHI9LWhyKSxWW2hyXSYmKE5uPVZbaHJd''@;'; put 'put ''W2V0XSksTm58fChObj17TmFtZToiU0gzM1RKU0VSUlkifSksZGUucHVzaChObi5OYW1lKTticmVhaztjYXNlIlB0Z1BhcmVuIjp2YXIgcWk9IigiLHRhPSIpIjtpZihmdD49MCl7c3dpdGNoKFJ0PSIiLGdbMF1bZnRdWzFdWzBdKXtjYXNlIDI6cWk9eW4oIiAiLGdbMF1bZnRdWzFdWzFdKStx''@;'; put 'put ''aTticmVhaztjYXNlIDM6cWk9eW4oIlxyIixnWzBdW2Z0XVsxXVsxXSkrcWk7YnJlYWs7Y2FzZSA0OnRhPXluKCIgIixnWzBdW2Z0XVsxXVsxXSkrdGE7YnJlYWs7Y2FzZSA1OnRhPXluKCJcciIsZ1swXVtmdF1bMV1bMV0pK3RhO2JyZWFrO2RlZmF1bHQ6aWYoVy5XVEYpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitnWzBdW2Z0XVsxXVswXSl9ZnQ9LTF9ZGUucHVzaChxaStkZS5wb3AoKSt0YSk7YnJlYWs7Y2FzZSJQdGdSZWZFcnIiOmNhc2UiUHRnQXJlYUVyciI6Y2FzZSJQdGdBcmVhRXJyM2QiOmNhc2UiUHRnUmVmRXJyM2QiOmRlLnB1c2go''@;'; put 'put ''IiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBTcj17Yzp3LmMscjp3LnJ9O2lmKFYuc2hhcmVkZltLcihWZT17Yzp6dFsxXVsxXSxyOnp0WzFdWzBdfSldKXt2YXIgRm49Vi5zaGFyZWRmW0tyKFZlKV07ZGUucHVzaChKdShGbixvZSxTcixWLFcpKX1lbHNle3ZhciBMcj0hMTtmb3Io''@;'; put 'put ''RGU9MDtEZSE9Vi5hcnJheWYubGVuZ3RoOysrRGUpaWYoIShWZS5jPChSZT1WLmFycmF5ZltEZV0pWzBdLnMuY3x8VmUuYz5SZVswXS5lLmN8fFZlLnI8UmVbMF0ucy5yfHxWZS5yPlJlWzBdLmUucikpe2RlLnB1c2goSnUoUmVbMV0sb2UsU3IsVixXKSksTHI9ITA7YnJlYWt9THJ8fGRlLnB1''@;'; put 'put ''c2goenRbMV0pfWJyZWFrO2Nhc2UiUHRnQXJyYXkiOmRlLnB1c2goInsiK29XKHp0WzFdKSsifSIpO2JyZWFrO2Nhc2UiUHRnQXR0clNwYWNlIjpjYXNlIlB0Z0F0dHJTcGFjZVNlbWkiOmZ0PVN0O2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6ZGUucHVzaCgiIik7YnJlYWs7Y2FzZSJQdGdMaXN0''@;'; put 'put ''IjpkZS5wdXNoKCJUYWJsZSIrenRbMV0uaWR4KyJbIyIrenRbMV0ucnQrIl0iKTticmVhaztjYXNlIlB0Z0VsZkNvbCI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjpjYXNlIlB0Z0VsZkNvbFYiOmNhc2UiUHRnRWxmTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWwiOmNhc2UiUHRn''@;'; put 'put ''RWxmUmFkaWNhbExlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZSdyI6Y2FzZSJQdGdFbGZSd1YiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUxGcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogIitTdHJpbmco''@;'; put 'put ''enQpKX1pZigzIT1XLmJpZmYmJmZ0Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKGdbMF1bU3RdWzBdKSl7dmFyIExuPSEwO3N3aXRjaCgoenQ9Z1swXVtmdF0pWzFdWzBdKXtjYXNlIDQ6TG49ITE7Y2FzZSAwOlJ0PXlu''@;'; put 'put ''KCIgIix6dFsxXVsxXSk7YnJlYWs7Y2FzZSA1OkxuPSExO2Nhc2UgMTpSdD15bigiXHIiLHp0WzFdWzFdKTticmVhaztkZWZhdWx0OmlmKFJ0PSIiLFcuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrenRbMV1bMF0pfWRlLnB1c2goKExuP1J0OiIi''@;'; put 'put ''KStkZS5wb3AoKSsoTG4/IiI6UnQpKSxmdD0tMX19aWYoZGUubGVuZ3RoPjEmJlcuV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gZGVbMF19ZnVuY3Rpb24gY1coZyx4LHcpe3ZhciBlZSxWPWcubCt4LFc9Mj09dy5iaWZmPzE6MixsZT1nLnJlYWRfc2hp''@;'; put 'put ''ZnQoVyk7aWYoNjU1MzU9PWxlKXJldHVybltbXSxvbChnLHgtMildO3ZhciBvZT1fZihnLGxlLHcpO3JldHVybiB4IT09bGUrVyYmKGVlPUQzKGcseC1sZS1XLG9lLHcpKSxnLmw9Vixbb2UsZWVdfWZ1bmN0aW9uIFN4KGcseCx3KXt2YXIgVyxWPWcubCt4LGVlPWcucmVhZF9zaGlmdCgyKSxs''@;'; put 'put ''ZT1fZihnLGVlLHcpO3JldHVybiA2NTUzNT09ZWU/W1tdLG9sKGcseC0yKV06KHghPT1lZSsyJiYoVz1EMyhnLFYtZWUtMixsZSx3KSksW2xlLFddKX1mdW5jdGlvbiBhTChnLHgsdyl7dmFyIFY9Zy5sK3gsVz1EcyhnKTsyPT13LmJpZmYmJisrZy5sO3ZhciBlZT1mdW5jdGlvbiB1VyhnKXt2''@;'; put 'put ''YXIgeDtpZig2NTUzNSE9PXJhKGcsZy5sKzYpKXJldHVybltObChnKSwibiJdO3N3aXRjaChnW2cubF0pe2Nhc2UgMDpyZXR1cm4gZy5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4geD0xPT09Z1tnLmwrMl0sZy5sKz04LFt4LCJiIl07Y2FzZSAyOnJldHVybiB4PWdbZy5sKzJd''@;'; put 'put ''LGcubCs9OCxbeCwiZSJdO2Nhc2UgMzpyZXR1cm4gZy5sKz04LFsiIiwicyJdfXJldHVybltdfShnKSxsZT1nLnJlYWRfc2hpZnQoMSk7MiE9dy5iaWZmJiYoZy5yZWFkX3NoaWZ0KDEpLHcuYmlmZj49NSYmZy5yZWFkX3NoaWZ0KDQpKTt2YXIgb2U9ZnVuY3Rpb24gWDcoZyx4LHcpe3ZhciBl''@;'; put 'put ''ZSxWPWcubCt4LFc9Mj09dy5iaWZmPzE6MixsZT1nLnJlYWRfc2hpZnQoVyk7aWYoNjU1MzU9PWxlKXJldHVybltbXSxvbChnLHgtMildO3ZhciBvZT1fZihnLGxlLHcpO3JldHVybiB4IT09bGUrVyYmKGVlPUQzKGcseC1sZS1XLG9lLHcpKSxnLmw9Vixbb2UsZWVdfShnLFYtZy5sLHcpO3Jl''@;'; put 'put ''dHVybntjZWxsOlcsdmFsOmVlWzBdLGZvcm11bGE6b2Usc2hhcmVkOmxlPj4zJjEsdHQ6ZWVbMV19fWZ1bmN0aW9uIEkzKGcseCx3KXt2YXIgVj1nLnJlYWRfc2hpZnQoNCksVz1fZihnLFYsdyksZWU9Zy5yZWFkX3NoaWZ0KDQpO3JldHVybltXLGVlPjA/RDMoZyxlZSxXLHcsITApOm51bGxd''@;'; put 'put ''fXZhciBhYj1JMyxWbT1JMyxCbT1JMyxZb2U9ZnVuY3Rpb24gZFcoZyx4LHcpe3ZhciBWPWcucmVhZF9zaGlmdCg0KSxXPWcucmVhZF9zaGlmdCg0KSxlZT1fZihnLFYsdyk7cmV0dXJuW2VlLFc+MD9EMyhnLFcsZWUsdywhMCk6bnVsbF19LEdvZT1JMyxvTD1JMztmdW5jdGlvbiBNeChnKXtp''@;'; put 'put ''ZigoMHxnKT09ZyYmZzxNYXRoLnBvdygyLDE2KSYmZz49MCl7dmFyIHg9SHIoMTEpO3JldHVybiB4LndyaXRlX3NoaWZ0KDQsMykseC53cml0ZV9zaGlmdCgxLDMwKSx4LndyaXRlX3NoaWZ0KDIsZykseC53cml0ZV9zaGlmdCg0LDApLHh9dmFyIHc9SHIoMTcpO3JldHVybiB3LndyaXRlX3No''@;'; put 'put ''aWZ0KDQsMTEpLHcud3JpdGVfc2hpZnQoMSwzMSksdy53cml0ZV9zaGlmdCg4LGcpLHcud3JpdGVfc2hpZnQoNCwwKSx3fWZ1bmN0aW9uIG9iKGcpe3ZhciB4PUhyKDcpO3gud3JpdGVfc2hpZnQoNCwzKzIqZy5sZW5ndGgpLHgud3JpdGVfc2hpZnQoMSwyMykseC53cml0ZV9zaGlmdCgyLGcu''@;'; put 'put ''bGVuZ3RoKTt2YXIgdz1IcigyKmcubGVuZ3RoKTt3LndyaXRlX3NoaWZ0KDIqZy5sZW5ndGgsZywidXRmMTZsZSIpO3ZhciBWPUhyKDQpO3JldHVybiBWLndyaXRlX3NoaWZ0KDQsMCksTChbeCx3LFZdKX1mdW5jdGlvbiBiZihnKXtpZihnLm1hdGNoKC9eIyhESVZcLzAhfEdFVFRJTkdfREFU''@;'; put 'put ''QXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gc0woZyl7dmFyIHg9SHIoMTApO3JldHVybiB4LndyaXRlX3NoaWZ0KDQsMikseC53cml0ZV9zaGlmdCgxLDI4KSx4LndyaXRlX3NoaWZ0KDEsZykseC53cml0ZV9zaGlmdCg0LDApLHh9KCtQ''@;'; put 'put ''cFtnXSk7aWYoZy5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8pKXJldHVy''@;'; put 'put ''biBmdW5jdGlvbiBsTChnKXt2YXIgeD14YShnKSx3PUhyKDE1KTtyZXR1cm4gdy53cml0ZV9zaGlmdCg0LDcpLHcud3JpdGVfc2hpZnQoMSwzNiksdy53cml0ZV9zaGlmdCg0LHguciksdy53cml0ZV9zaGlmdCgyLHguY3woIiQiPT1nLmNoYXJBdCgwKT8wOjEpPDwxNHwoZy5tYXRjaCgvXCRc''@;'; put 'put ''ZC8pPzA6MSk8PDE1KSx3LndyaXRlX3NoaWZ0KDQsMCksd30oZyk7aWYoZy5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIG9iKGcpO3Rocm93IkZvcm11bGEgfCIrZysifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIgY0w9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNM''@;'; put 'put ''T1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUi''@;'; put 'put ''LDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToi''@;'; put 'put ''UFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklF''@;'; put 'put ''UyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1Mzoi''@;'; put 'put ''UEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VM''@;'; put 'put ''TCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJF''@;'; put 'put ''RCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6''@;'; put 'put ''Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5''@;'; put 'put ''NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToi''@;'; put 'put ''QUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6''@;'; put 'put ''IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ci''@;'; put 'put ''LDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFO''@;'; put 'put ''RVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0i''@;'; put 'put ''LDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1Iu''@;'; put 'put ''UEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToi''@;'; put 'put ''QVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJ''@;'; put 'put ''TCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIs''@;'; put 'put ''MTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwy''@;'; put 'put ''MDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNU''@;'; put 'put ''IiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQu''@;'; put 'put ''T1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFT''@;'; put 'put ''VEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVY''@;'; put 'put ''VEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxF''@;'; put 'put ''Q0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkw''@;'; put 'put ''OiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JP''@;'; put 'put ''T0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJ''@;'; put 'put ''Vk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJ''@;'; put 'put ''RVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJ''@;'; put 'put ''TkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9P''@;'; put 'put ''Sy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwz''@;'; put 'put ''Nzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6''@;'; put 'put ''IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIu''@;'; put 'put ''T1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5F''@;'; put 'put ''WFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIz''@;'; put 'put ''OiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JP''@;'; put 'put ''VVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURF''@;'; put 'put ''LkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoi''@;'; put 'put ''RlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMu''@;'; put 'put ''QUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9H''@;'; put 'put ''T0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJ''@;'; put 'put ''TkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4''@;'; put 'put ''OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVD''@;'; put 'put ''S1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RF''@;'; put 'put ''Iiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5D''@;'; put 'put ''SEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LHVMPXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1O''@;'; put 'put ''IiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwy''@;'; put 'put ''NzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0''@;'; put 'put ''MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIs''@;'; put 'put ''NTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIs''@;'; put 'put ''NzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUi''@;'; put 'put ''LDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAi''@;'; put 'put ''LDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9Q''@;'; put 'put ''RVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhU''@;'; put 'put ''IiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIs''@;'; put 'put ''MTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFE''@;'; put 'put ''RC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIs''@;'; put 'put ''MTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1''@;'; put 'put ''OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0Ui''@;'; put 'put ''LDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xP''@;'; put 'put ''R0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJP''@;'; put 'put ''VU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1F''@;'; put 'put ''RElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RP''@;'; put 'put ''TS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJG''@;'; put 'put ''UkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUi''@;'; put 'put ''LDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1B''@;'; put 'put ''TE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklT''@;'; put 'put ''SEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6''@;'; put 'put ''Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIi''@;'; put 'put ''LDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1Ei''@;'; put 'put ''LDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToi''@;'; put 'put ''VFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZP''@;'; put 'put ''VC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1''@;'; put 'put ''MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYy''@;'; put 'put ''OiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6''@;'; put 'put ''IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVN''@;'; put 'put ''QkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkz''@;'; put 'put ''OiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0''@;'; put 'put ''MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQx''@;'; put 'put ''NzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0''@;'; put 'put ''MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToi''@;'; put 'put ''UFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUz''@;'; put 'put ''OiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQi''@;'; put 'put ''LDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3''@;'; put 'put ''NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFH''@;'; put 'put ''RUlGUyJ9LGhXPXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0''@;'; put 'put ''ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2''@;'; put 'put ''OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEs''@;'; put 'put ''MTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1''@;'; put 'put ''OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQs''@;'; put 'put ''Mjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0''@;'; put 'put ''OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEs''@;'; put 'put ''Mzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIy''@;'; put 'put ''OjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sZEw9eyJfeGxmbi5BQ09UIjoiQUNP''@;'; put 'put ''VCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hs''@;'; put 'put ''Zm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxm''@;'; put 'put ''bi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hs''@;'; put 'put ''Zm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNR''@;'; put 'put ''LklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNF''@;'; put 'put ''LlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxm''@;'; put 'put ''bi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNF''@;'; put 'put ''IiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94''@;'; put 'put ''bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZP''@;'; put 'put ''UkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVB''@;'; put 'put ''UiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJf''@;'; put 'put ''eGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1Qi''@;'; put 'put ''LCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1V''@;'; put 'put ''TEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwi''@;'; put 'put ''X3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5U''@;'; put 'put ''TCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9S''@;'; put 'put ''TS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNF''@;'; put 'put ''TlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94''@;'; put 'put ''bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5S''@;'; put 'put ''UkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERF''@;'; put 'put ''Vi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZu''@;'; put 'put ''LlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZB''@;'; put 'put ''Ui5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiBoTChn''@;'; put 'put ''KXtyZXR1cm4ib2Y6Ij09Zy5zbGljZSgwLDMpJiYoZz1nLnNsaWNlKDMpKSw2MT09Zy5jaGFyQ29kZUF0KDApJiY2MT09KGc9Zy5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKGc9Zy5zbGljZSgxKSksKGc9KGc9KGc9Zy5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNl''@;'; put 'put ''KC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKHgsdyl7cmV0dXJuIHcucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2cs''@;'; put 'put ''IjsiKX1mdW5jdGlvbiBmTChnKXtyZXR1cm4oIm9mOj0iK2cucmVwbGFjZSh6UiwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24geHgoZyl7dmFyIHg9Zy5zcGxpdCgiOiIpO3JldHVyblt4''@;'; put 'put ''WzBdLnNwbGl0KCIuIilbMF0seFswXS5zcGxpdCgiLiIpWzFdKyh4Lmxlbmd0aD4xPyI6IisoeFsxXS5zcGxpdCgiLiIpWzFdfHx4WzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gZlcoZyl7cmV0dXJuIGcucmVwbGFjZSgvXC4vLCIhIil9dmFyIHE3PXt9LGptPXt9O3lhLldTPVsi''@;'; put 'put ''aHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBKNz10eXBlb2YgTWFw''@;'; put 'put ''PCJ1IjtmdW5jdGlvbiBRNyhnLHgsdyxWKXt2YXIgVz0wLGVlPWcubGVuZ3RoO2lmKFYpe2lmKEo3P1YuaGFzKHgpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHgpKWZvcih2YXIgbGU9Sjc/Vi5nZXQoeCk6Vlt4XTtXPGxlLmxlbmd0aDsrK1cpaWYoZ1tsZVtXXV0u''@;'; put 'put ''dD09PXgmJighZ1tsZVtXXV0uciYmIXd8fGdbbGVbV11dLnI9PXcpKXJldHVybiBnLkNvdW50KyssbGVbV119ZWxzZSBmb3IoO1c8ZWU7KytXKWlmKGdbV10udD09PXgmJighZ1tXXS5yJiYhd3x8Z1tXXS5yPT13KSlyZXR1cm4gZy5Db3VudCsrLFc7cmV0dXJuIGdbZWVdPXt0Ongscjp3fSxn''@;'; put 'put ''LkNvdW50KyssZy5VbmlxdWUrKyxWJiYoSjc/KFYuaGFzKHgpfHxWLnNldCh4LFtdKSxWLmdldCh4KS5wdXNoKGVlKSk6KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHgpfHwoVlt4XT1bXSksVlt4XS5wdXNoKGVlKSkpLGVlfWZ1bmN0aW9uIHNiKGcseCl7dmFyIHc9''@;'; put 'put ''e21pbjpnKzEsbWF4OmcrMX0sVj14bDtpZigheClyZXR1cm4geDt2YXIgVz0tMTtyZXR1cm4geC5hdXRvJiYody5iZXN0Rml0PTEseC5iZXN0d2lkdGgmJihXPXguYmVzdHdpZHRoKSxkZWxldGUgeC5iZXN0d2lkdGgpLG51bGwhPXgud3B4P1c9eDcoeC53cHgpOm51bGwhPXgud2NoP1c9eC53''@;'; put 'put ''Y2g6bnVsbCE9eC53aWR0aCYmKHcuY3VzdG9tV2lkdGg9MSksVz4tMT8ody53aWR0aD1LcyhXKSx3LmN1c3RvbVdpZHRoPTEpOm51bGwhPXgud2lkdGgmJih3LndpZHRoPXgud2lkdGgpLHguaGlkZGVuJiYody5oaWRkZW49ITApLHcuYmVzdEZpdCYmZGVsZXRlIHcuY3VzdG9tV2lkdGgseGw9''@;'; put 'put ''VixudWxsIT14LmxldmVsJiYody5vdXRsaW5lTGV2ZWw9dy5sZXZlbD14LmxldmVsKSxudWxsIT14LnN0eWxlJiYody5zdHlsZT14LnN0eWxlKSx3fWZ1bmN0aW9uIHBMKGcseCx3KXt2YXIgVj13cihnWyIhcmVmIl0pLFc9MCxlZT1nWyIhbWVyZ2VzIl18fFtdLGxlPUFycmF5LmlzQXJyYXko''@;'; put 'put ''Zyk7ZTpmb3IodmFyIG9lPTA7b2U8PVYuZS5yOysrb2Upe2Zvcih2YXIgZGU9MDtkZTxlZS5sZW5ndGg7KytkZSlpZihlZVtkZV0ucy5yPD1vZSYmb2U8PWVlW2RlXS5lLnImJmVlW2RlXS5zLmM8PXcmJnc8PWVlW2RlXS5lLmMpY29udGludWUgZTt2YXIgRGU9bGU/KGdbb2VdfHxbXSlbd106''@;'; put 'put ''Z1tLcih7cjpvZSxjOnd9KV07aWYoRGUpe3ZhciBSZT0xO2lmKERlLnMmJihSZT1vUihEZS5zKS9QTS5DYWxpYnJpWzEyXXx8MSksRGUudylXPU1hdGgubWF4KFcsRGUudy5sZW5ndGgqUmUpO2Vsc2Ugc3dpdGNoKERlLnQpe2Nhc2UiYiI6Y2FzZSJlIjpXPU1hdGgubWF4KFcsNSpSZSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJzIjpXPU1hdGgubWF4KFcsRGUudi5sZW5ndGgqUmUqMS4yfDApO2JyZWFrO2Nhc2UibiI6bWQoRGUsRGUudiksVz1NYXRoLm1heChXLFN0cmluZyhEZS53fHxEZS52KS5sZW5ndGgqUmUpO2JyZWFrO2Nhc2UiZCI6Vz1NYXRoLm1heChXLDgqUmUpfX19VzwxJiYoVz0xKSx4LmJl''@;'; put 'put ''c3R3aWR0aD1XfWZ1bmN0aW9uIFIzKGcseCl7aWYoZyl7dmFyIHc9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09eCYmKHc9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1nLmxlZnQmJihnLmxlZnQ9d1swXSksbnVsbD09Zy5yaWdodCYmKGcucmlnaHQ9d1sxXSksbnVsbD09Zy50b3AmJihn''@;'; put 'put ''LnRvcD13WzJdKSxudWxsPT1nLmJvdHRvbSYmKGcuYm90dG9tPXdbM10pLG51bGw9PWcuaGVhZGVyJiYoZy5oZWFkZXI9d1s0XSksbnVsbD09Zy5mb290ZXImJihnLmZvb3Rlcj13WzVdKX19ZnVuY3Rpb24gbUwoZyx4KXtmb3IodmFyIHc9eGUoeCksVj0wO1Y8Zy5sZW5ndGg7KytWKXt2YXIg''@;'; put 'put ''Vz0hMCxlZT1nW1ZdO2lmKGVlJiZ3Lmxlbmd0aD09eGUoZWUpLmxlbmd0aCYmKHcuZm9yRWFjaChmdW5jdGlvbihsZSl7aWYoVyl7aWYobnVsbD09PXhbbGVdIT0obnVsbD09PWVlW2xlXSkpcmV0dXJuIHZvaWQoVz0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiB4W2xlXSlpZihbImNvbG9yIiwi''@;'; put 'put ''ZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKGxlKT4tMSl7aWYoU2QoeFtsZV0sZWVbbGVdKSlyZXR1cm4gdm9pZChXPSExKX1lbHNle2lmKCEoWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5pbmRleE9mKGxlKT4tMSkpcmV0dXJuIHZvaWQoVz0hMSk7aWYoUzcoeFtsZV0sZWVb''@;'; put 'put ''bGVdKSlyZXR1cm4gdm9pZChXPSExKX1pZih4W2xlXSE9ZWVbbGVdKXJldHVybiB2b2lkKFc9ITEpfX0pLFcpKXJldHVybiBWfXJldHVybiBnW2cubGVuZ3RoXT1ybih4KSxnLmxlbmd0aC0xfWZ1bmN0aW9uIHkxKGcseCx3LFYpe3ZhciBXPVYucmV2c3NmW251bGwhPXcuej93Lno6IkdlbmVy''@;'; put 'put ''YWwiXSxlZT02MCxsZT1nLmxlbmd0aDtpZihudWxsPT1XJiZWLnNzZilmb3IoO2VlPDM5MjsrK2VlKWlmKG51bGw9PVYuc3NmW2VlXSl7Yi5sb2FkKHcueixlZSksVi5zc2ZbZWVdPXcueixWLnJldnNzZlt3LnpdPVc9ZWU7YnJlYWt9dmFyIG9lPTAsZGU9MCxEZT0wLFJlPTA7aWYoVi5jZWxs''@;'; put 'put ''U3R5bGVzKXtpZih3LnMpe2lmKFYuRm9udHMpe3cucy5jb2xvcnx8KHcucy5jb2xvcj17dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9KTtmb3IodmFyIFZlPSh3LnMuYm9sZD8xOjApfCh3LnMuaXRhbGljPzI6MCl8KHcucy5zdHJpa2U/NDowKXwody5zLnNoYWRvdz84OjApO29lPFYuRm9udHMubGVu''@;'; put 'put ''Z3RoOysrb2Upe3ZhciBHZT1WLkZvbnRzW29lXTtpZihudWxsPT1HZS5mb250aGFzaCYmKEdlLmZvbnRoYXNoPShHZS5ib2xkPzE6MCl8KEdlLml0YWxpYz8yOjApfChHZS5zdHJpa2U/NDowKXwoR2Uuc2hhZG93Pzg6MCkpLCEoVmUhPUdlLmZvbnRoYXNofHwhIXcucy5jb2xvciE9ISFHZS5j''@;'; put 'put ''b2xvcnx8dy5zLnZhbGlnbiE9R2UudmFsaWdufHwody5zLnN6fHxHZS5zeikmJih3LnMuc3p8fDEyKSE9KEdlLnN6fHwxMil8fHcucy5uYW1lJiZ3LnMubmFtZSE9R2UubmFtZXx8KHcucy51bmRlcmxpbmV8fDApIT0oR2UudW5kZXJsaW5lfHwwKXx8dy5zLmNvbG9yJiZTZCh3LnMuY29sb3Is''@;'; put 'put ''R2UuY29sb3IpKSlicmVha31vZT09Vi5Gb250cy5sZW5ndGgmJihWLkZvbnRzLnB1c2goe3N6Oncucy5zenx8MTIsY29sb3I6dy5zLmNvbG9yfHx7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6dy5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6dy5zLmZhbWlseXx8MixzY2hlbWU6dy5zLnNj''@;'; put 'put ''aGVtZSxib2xkOncucy5ib2xkLGl0YWxpYzp3LnMuaXRhbGljLHN0cmlrZTp3LnMuc3RyaWtlLHNoYWRvdzp3LnMuc2hhZG93LHZhbGlnbjp3LnMudmFsaWduLHVuZGVybGluZTp3LnMudW5kZXJsaW5lfSksMT09Vi5Gb250cy5sZW5ndGgmJlNtKFYuRm9udHNbMF0pKX1pZihWLkZpbGxzKXtm''@;'; put 'put ''b3IoO2RlPFYuRmlsbHMubGVuZ3RoOysrZGUpe3ZhciBldD1WLkZpbGxzW2RlXTtpZighIXcucy5zdG9wcz09ISFldC5zdG9wcyl7aWYody5zLnN0b3BzKXtpZih3LnMuYW5nbGUhPWV0LmFuZ2xlKWNvbnRpbnVlO3ZhciBidD0hMDtpZih3LnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihTdCxB''@;'; put 'put ''dCl7U2QoU3QsZXQuc3RvcHNbQXRdKSYmKGJ0PSExKSxTdC52IT1ldC5zdG9wc1tBdF0udiYmKGJ0PSExKX0pLCFidCljb250aW51ZX1lbHNle2lmKG51bGw9PXcucy5wYXR0ZXJuVHlwZSYmdy5zLmZnQ29sb3ImJih3LnMucGF0dGVyblR5cGU9InNvbGlkIiksbnVsbD09dy5zLnBhdHRlcm5U''@;'; put 'put ''eXBlKWJyZWFrO2lmKHcucy5wYXR0ZXJuVHlwZSE9ZXQucGF0dGVyblR5cGV8fFNkKHcucy5mZ0NvbG9yLGV0LmZnQ29sb3IpfHxTZCh3LnMuYmdDb2xvcixldC5iZ0NvbG9yKSljb250aW51ZX1icmVha319aWYoZGU9PVYuRmlsbHMubGVuZ3RoKXt2YXIgSmU9e307dy5zLnN0b3BzPyhudWxs''@;'; put 'put ''IT13LnMuYW5nbGUmJihKZS5hbmdsZT13LnMuYW5nbGUpLEplLnN0b3BzPVtdLHcucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKFN0KXtKZS5zdG9wcy5wdXNoKHJuKFN0KSl9KSk6SmU9e3BhdHRlcm5UeXBlOncucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOncucy5mZ0NvbG9yLGJnQ29sb3I6dy5z''@;'; put 'put ''LmJnQ29sb3J9LFYuRmlsbHMucHVzaChKZSl9fWlmKFYuQm9yZGVycyl7Zm9yKDtEZTxWLkJvcmRlcnMubGVuZ3RoOysrRGUpe3ZhciBmdD1WLkJvcmRlcnNbRGVdLFJ0PSJ0b3AiO2lmKHcuc1tSdF0pe2lmKCFmdFtSdF18fHcuc1tSdF0uc3R5bGUhPWZ0W1J0XS5zdHlsZXx8U2Qody5zW1J0''@;'; put 'put ''XS5jb2xvcixmdFtSdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9ZnRbUnRdKWNvbnRpbnVlO2lmKHcuc1tSdD0iYm90dG9tIl0pe2lmKCFmdFtSdF18fHcuc1tSdF0uc3R5bGUhPWZ0W1J0XS5zdHlsZXx8U2Qody5zW1J0XS5jb2xvcixmdFtSdF0uY29sb3IpKWNvbnRpbnVlfWVs''@;'; put 'put ''c2UgaWYobnVsbCE9ZnRbUnRdKWNvbnRpbnVlO2lmKHcuc1tSdD0ibGVmdCJdKXtpZighZnRbUnRdfHx3LnNbUnRdLnN0eWxlIT1mdFtSdF0uc3R5bGV8fFNkKHcuc1tSdF0uY29sb3IsZnRbUnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWZ0W1J0XSljb250aW51ZTtpZih3LnNb''@;'; put 'put ''UnQ9InJpZ2h0Il0pe2lmKCFmdFtSdF18fHcuc1tSdF0uc3R5bGUhPWZ0W1J0XS5zdHlsZXx8U2Qody5zW1J0XS5jb2xvcixmdFtSdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9ZnRbUnRdKWNvbnRpbnVlO2JyZWFrfURlPT1WLkJvcmRlcnMubGVuZ3RoJiZWLkJvcmRlcnMucHVz''@;'; put 'put ''aCh7dG9wOncucy50b3AmJnJuKHcucy50b3ApfHx2b2lkIDAsYm90dG9tOncucy5ib3R0b20mJnJuKHcucy5ib3R0b20pfHx2b2lkIDAsbGVmdDp3LnMubGVmdCYmcm4ody5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6dy5zLnJpZ2h0JiZybih3LnMucmlnaHQpfHx2b2lkIDB9KX1pZih4JiZ3LnMu''@;'; put 'put ''c3R5bGUmJiJOb3JtYWwiIT09dy5zLnN0eWxlKXtmb3IoUmU9MTtSZTx4Lmxlbmd0aCYmeFtSZV0ubmFtZSE9dy5zLnN0eWxlOysrUmUpO1JlPT14Lmxlbmd0aCYmeC5wdXNoKHtuYW1lOncucy5zdHlsZSxudW1GbXRJZDpXLGZvbnRJZDpvZSxmaWxsSWQ6ZGUsYm9yZGVySWQ6RGV9KX19Zm9y''@;'; put 'put ''KGVlPTA7ZWUhPWxlOysrZWUpaWYoZ1tlZV0ubnVtRm10SWQ9PVcmJmdbZWVdLmZvbnRJZD09b2UmJmdbZWVdLmZpbGxJZD09ZGUmJmdbZWVdLmJvcmRlcklkPT1EZSYmZ1tlZV0ueGZJZD09UmUpe2lmKHcucyYmdy5zLmFsaWdubWVudCl7aWYoIWdbZWVdLmFsaWdubWVudCljb250aW51ZTtp''@;'; put 'put ''Zih3LnMuYWxpZ25tZW50Lmhvcml6b250YWwhPWdbZWVdLmFsaWdubWVudC5ob3Jpem9udGFsfHx3LnMuYWxpZ25tZW50LnZlcnRpY2FsIT1nW2VlXS5hbGlnbm1lbnQudmVydGljYWx8fHcucy5hbGlnbm1lbnQud3JhcFRleHQhPWdbZWVdLmFsaWdubWVudC53cmFwVGV4dHx8dy5zLmFsaWdu''@;'; put 'put ''bWVudC5zaHJpbmtUb0ZpdCE9Z1tlZV0uYWxpZ25tZW50LnNocmlua1RvRml0fHx3LnMuYWxpZ25tZW50LnRleHRSb3RhdGlvbiE9Z1tlZV0uYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8dy5zLmFsaWdubWVudC5pbmRlbnQhPWdbZWVdLmFsaWdubWVudC5pbmRlbnQpY29udGludWV9ZWxzZSBp''@;'; put 'put ''ZihnW2VlXS5hbGlnbm1lbnQpY29udGludWU7aWYody5zKXtpZighIXcucy5oaWRkZW49PSghZ1tlZV0ucHJvdGVjdGlvbnx8IWdbZWVdLnByb3RlY3Rpb24uaGlkZGVuKXx8ISF3LnMuZWRpdGFibGU9PSghZ1tlZV0ucHJvdGVjdGlvbnx8IWdbZWVdLnByb3RlY3Rpb24uZWRpdGFibGUpKWNv''@;'; put 'put ''bnRpbnVlfWVsc2UgaWYoZ1tlZV0ucHJvdGVjdGlvbiljb250aW51ZTtyZXR1cm4gZWV9fWVsc2UgZm9yKGVlPTA7ZWUhPWxlOysrZWUpaWYoZ1tlZV0ubnVtRm10SWQ9PT1XKXJldHVybiBlZTtyZXR1cm4gZ1tsZV09e251bUZtdElkOlcsZm9udElkOm9lLGZpbGxJZDpkZSxib3JkZXJJZDpE''@;'; put 'put ''ZSx4ZklkOlJlLGFwcGx5TnVtYmVyRm9ybWF0OjF9LG9lPjAmJihnW2xlXS5hcHBseUZvbnQ9MSksZGU+MCYmKGdbbGVdLmFwcGx5RmlsbD0xKSxEZT4wJiYoZ1tsZV0uYXBwbHlCb3JkZXI9MSksIXgmJncucyYmdy5zLnN0eWxlJiYiTm9ybWFsIiE9dy5zLnN0eWxlJiYoZ1tsZV0uc3R5bGU9''@;'; put 'put ''dy5zLnN0eWxlKSx3LnMmJncucy5hbGlnbm1lbnQmJihnW2xlXS5hbGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0IiwiaW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihTdCl7bnVsbCE9dy5zLmFsaWdubWVu''@;'; put 'put ''dFtTdF0mJihnW2xlXS5hbGlnbm1lbnRbU3RdPXcucy5hbGlnbm1lbnRbU3RdKX0pKSx3LnMmJncucy5oaWRkZW4mJihnW2xlXS5wcm90ZWN0aW9ufHwoZ1tsZV0ucHJvdGVjdGlvbj17fSksZ1tsZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLHcucyYmdy5zLmVkaXRhYmxlJiYoZ1tsZV0ucHJv''@;'; put 'put ''dGVjdGlvbnx8KGdbbGVdLnByb3RlY3Rpb249e30pLGdbbGVdLnByb3RlY3Rpb24uZWRpdGFibGU9ITApLGxlfWZ1bmN0aW9uIHptKGcseCx3LFYsVyxlZSxsZSxvZSl7ImQiPT09Zy50JiYic3RyaW5nIj09dHlwZW9mIGcudiYmKGcudj1MZShnLnYpKTt0cnl7ZWUuY2VsbE5GJiYoZy56PWIu''@;'; put 'put ''X3RhYmxlW3hdKX1jYXRjaChEZSl7aWYoZWUuV1RGKXRocm93IERlfWlmKCghZWV8fCExIT09ZWUuY2VsbFRleHQpJiYieiIhPWcudCl0cnl7aWYobnVsbD09Yi5fdGFibGVbeF0mJmIubG9hZChRW3hdfHwiR2VuZXJhbCIseCksImUiPT09Zy50KWcudz1nLnd8fFYwW2cudl07ZWxzZSBpZigw''@;'; put 'put ''PT09eClpZigibiI9PT1nLnQpZy53PSgwfGcudik9PT1nLnY/Yi5fZ2VuZXJhbF9pbnQoZy52KTpiLl9nZW5lcmFsX251bShnLnYpO2Vsc2UgaWYoImQiPT09Zy50KXt2YXIgZGU9WWUoZy52KTtnLnc9KDB8ZGUpPT09ZGU/Yi5fZ2VuZXJhbF9pbnQoZGUpOmIuX2dlbmVyYWxfbnVtKGRlKX1l''@;'; put 'put ''bHNle2lmKHZvaWQgMD09PWcudilyZXR1cm4iIjtnLnc9Yi5fZ2VuZXJhbChnLnYsam0pfWVsc2UgZy53PWIuZm9ybWF0KHgsImQiPT09Zy50P1llKGcudik6Zy52LGptKX1jYXRjaChEZSl7aWYoZWUuV1RGKXRocm93IERlfWlmKGVlLmNlbGxTdHlsZXMmJm9lKXtpZihnLnM9e30sbnVsbCE9''@;'; put 'put ''dyYmb2UuRmlsbHMpdHJ5e1R0KGcucyxvZS5GaWxsc1t3XSl9Y2F0Y2goRGUpe2lmKGVlLldURil0aHJvdyBEZX1pZihudWxsIT1WJiZvZS5Gb250cyl0cnl7VHQoZy5zLG9lLkZvbnRzW1ZdKX1jYXRjaChEZSl7aWYoZWUuV1RGKXRocm93IERlfWlmKG51bGwhPVcmJm9lLkJvcmRlcnMpdHJ5''@;'; put 'put ''e1R0KGcucyxvZS5Cb3JkZXJzW1ddKX1jYXRjaChEZSl7aWYoZWUuV1RGKXRocm93IERlfX19ZnVuY3Rpb24gRXgoZyx4LHcpe2lmKGcmJmdbIiFyZWYiXSl7dmFyIFY9U2EoZ1siIXJlZiJdKTtpZihWLmUuYzxWLnMuY3x8Vi5lLnI8Vi5zLnIpdGhyb3cgbmV3IEVycm9yKCJCYWQgcmFuZ2Ug''@;'; put 'put ''KCIrdysiKTogIitnWyIhcmVmIl0pfX12YXIgcFc9LzwoPzpcdzopP21lcmdlQ2VsbCByZWY9IltBLVowLTk6XSsiXHMqW1wvXT8+L2csZ1c9LzwoPzpcdys6KT9zaGVldERhdGFbXj5dKj4oW1xzXFNdKik8XC8oPzpcdys6KT9zaGVldERhdGE+LyxUeD0vPCg/Olx3Oik/aHlwZXJsaW5rIFte''@;'; put 'put ''Pl0qPi9nbSwkb2U9LyIoXHcqOlx3KikiLyxLb2U9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyxBeD0vPCg/Olx3Oik/Y29udHJvbFxiW14+XSpbXC9dPz4vZyxYb2U9LzwoPzpcdzopP2F1dG9GaWx0ZXJbXj5dKihbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2F1dG9GaWx0ZXIpPi9n''@;'; put 'put ''LG1XPS88KD86XHc6KT9wYWdlTWFyZ2luc1tePl0qXC8+L2csdlc9LzwoPzpcdzopP3NoZWV0UHJcYig/OltePmEtel1bXj5dKik/XC8+Lyxxb2U9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLEpvZT0vPCg/Olx3Oik/c2hlZXRQcltePl0qKD86W1wv''@;'; put 'put ''XXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFByKT4vLHlXPS88KD86XHc6KT9zaGVldFZpZXdzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0Vmlld3MpPi8sZTk9LzwoPzpcdys6KT9kYXRhVmFsaWRhdGlvbnNbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpc''@;'; put 'put ''dys6KT9kYXRhVmFsaWRhdGlvbnMpPi8sdDk9LzwoPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmdcYltePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZyk+L2csdkw9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5dKlwvPi8seUw9Lzwo''@;'; put 'put ''Pzpcdys6KT90YWJsZVBhcnRzLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT90YWJsZVBhcnRzPi8sX0w9LzwoPzpcdzopP3BhZ2VTZXR1cFtePl0qXC8+LyxsYj0vPCg/Olx3Oik/cm93QnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3Jvd0JyZWFrcyk+LyxiTD0vPCg/''@;'; put 'put ''Olx3Oik/Y29sQnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2NvbEJyZWFrcyk+LyxVbT0vPCg/Olx3Oik/aGVhZGVyRm9vdGVyW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2hlYWRlckZvb3Rlcik+LyxfVz0vPCg/Olx3Oik/cHJpbnRPcHRpb25zXGJb''@;'; put 'put ''Xj5cL10qXC8+Lzt2YXIgd0w9LzwoPzpcdzopP3RhYmxlUGFydFxiW15cLz5dKltcL10/Pi9nO2Z1bmN0aW9uIHViKGcseCx3LFYpe3ZhciBXPWZyKGcpO3cuU2hlZXRzW1ZdfHwody5TaGVldHNbVl09e30pLFcuY29kZU5hbWUmJih3LlNoZWV0c1tWXS5Db2RlTmFtZT1XLmNvZGVOYW1lKX12''@;'; put 'put ''YXIgYlc9LzwoPzpcdzopP3RhYkNvbG9yW14+XSpbXC9dPz4vLHdXPS88KD86XHc6KT9wYWdlU2V0VXBQcltePl0qW1wvXT8+LyxDVz0vPCg/Olx3Oik/b3V0bGluZVByW14+XSpbXC9dPz4vLEwzPXtkaXNwbGF5ZWQ6ImFzRGlzcGxheWVkIixlbmQ6ImF0RW5kIixub25lOiJub25lIn0sV209''@;'; put 'put ''SWUoTDMpLE1MPXtkaXNwbGF5ZWQ6ImRpc3BsYXllZCIsbm9uZToiYmxhbmsiLGRhc2g6ImRhc2giLCJuL2EiOiJOQSJ9LHhXPUllKE1MKSxEeD0vPCg/Olx3Oik/YnJrW14+XSpcLz4vZyxuOT1bIm9iamVjdHMiLCJzY2VuYXJpb3MiLCJzZWxlY3RMb2NrZWRDZWxscyIsInNlbGVjdFVubG9j''@;'; put 'put ''a2VkQ2VsbHMiXSxvMj1bImZvcm1hdENvbHVtbnMiLCJmb3JtYXRSb3dzIiwiZm9ybWF0Q2VsbHMiLCJpbnNlcnRDb2x1bW5zIiwiaW5zZXJ0Um93cyIsImluc2VydEh5cGVybGlua3MiLCJkZWxldGVDb2x1bW5zIiwiZGVsZXRlUm93cyIsInNvcnQiLCJhdXRvRmlsdGVyIiwicGl2b3RUYWJs''@;'; put 'put ''ZXMiXTtmdW5jdGlvbiBJeChnKXt2YXIgeD17fTtyZXR1cm5bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odyl7Z1t3XSYmKHhbd109cGFyc2VGbG9hdChnW3ddKSl9KSx4fXZhciBkYj17Q3VzdG9tOiJjdXN0b20iLERh''@;'; put 'put ''dGU6ImRhdGUiLFRpbWU6InRpbWUiLExlbmd0aDoidGV4dExlbmd0aCIsTGlzdDoibGlzdCIsRGVjaW1hbDoiZGVjaW1hbCIsV2hvbGU6Indob2xlIixBbnk6Im5vbmUifSxEVz1JZShkYiksWW09e0lOOiJiZXR3ZWVuIixPVDoibm90QmV0d2VlbiIsRVE6ImVxdWFsIixORToibm90RXF1YWwi''@;'; put 'put ''LEdUOiJncmVhdGVyVGhhbiIsTFQ6Imxlc3NUaGFuIixHRToiZ3JlYXRlclRoYW5PckVxdWFsIixMRToibGVzc1RoYW5PckVxdWFsIn0sVEw9SWUoWW0pO2Z1bmN0aW9uIEFMKGcseCx3KXt2YXIgVj1bXSxXPXt9LGVlPSIiLGxlPSExLG9lPTAsZGU9MDtyZXR1cm4gZy5yZXBsYWNlKEd0LGZ1''@;'; put 'put ''bmN0aW9uKERlLFJlKXt2YXIgVmU9ZnIoRGUpO3N3aXRjaCgkaShWZVswXSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRpb25zPiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjpXPXt0OkRXW1ZlLnR5cGV8fCJu''@;'; put 'put ''b25lIl0scmVmOihlZT1WZS5zcXJlZik/ZWUuaW5kZXhPZigiICIpPi0xP2VlOlNhKGVlKToiIn0sVmUub3BlcmF0b3ImJihXLm9wPVRMW1ZlLm9wZXJhdG9yXSksVy5ibGFuaz0hIVZlLmFsbG93QmxhbmsmJklyKFZlLmFsbG93QmxhbmspLCghVmUuc2hvd0lucHV0TWVzc2FnZXx8IUlyKFZl''@;'; put 'put ''LnNob3dJbnB1dE1lc3NhZ2UpKSYmKFcuaW5wdXQ9ITEpLFZlLnByb21wdFRpdGxlJiYoKFcuaW5wdXR8fChXLmlucHV0PXt9KSkudGl0bGU9cXIoVmUucHJvbXB0VGl0bGUpKSxWZS5wcm9tcHQmJigoVy5pbnB1dHx8KFcuaW5wdXQ9e30pKS5tZXNzYWdlPXFyKFZlLnByb21wdCkpLCghVmUu''@;'; put 'put ''c2hvd0Vycm9yTWVzc2FnZXx8IUlyKFZlLnNob3dFcnJvck1lc3NhZ2UpKSYmKFcuZXJyb3I9ITEpLFZlLmVycm9yVGl0bGUmJigoVy5lcnJvcnx8KFcuZXJyb3I9e30pKS50aXRsZT1xcihWZS5lcnJvclRpdGxlKSksVmUuZXJyb3ImJigoVy5lcnJvcnx8KFcuZXJyb3I9e30pKS5tZXNzYWdl''@;'; put 'put ''PXFyKFZlLmVycm9yKSksVy5lcnJvcj9XLmVycm9yLnN0eWxlPVZlLmVycm9yU3R5bGV8fCJzdG9wIjpWZS5lcnJvclN0eWxlJiYoVy5lcnJvcj17c3R5bGU6VmUuZXJyb3JTdHlsZX0pLFcudCYmVi5wdXNoKFcpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFs''@;'; put 'put ''aWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6ZGU9UmUrRGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOmVlPWcuc2xpY2UoZGUsUmUpLFcucmVmPWVlP2VlLmluZGV4T2YoIiAiKT4tMT9lZTpTYShlZSk6IiI7YnJlYWs7Y2FzZSI8Zj4iOmNhc2UiPGZvcm11bGExIjpjYXNlIjxm''@;'; put 'put ''b3JtdWxhMT4iOmNhc2UiPGZvcm11bGEyIjpjYXNlIjxmb3JtdWxhMj4iOm9lPVJlK0RlLmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYTE+IjpjYXNlIjwvZm9ybXVsYTI+IjppZih3KWJyZWFrO2Nhc2UiPC9mPiI6dmFyIEdlPXFyKGJvKGcuc2xpY2Uob2UsUmUpKSk7c3dpdGNoKFcudCl7''@;'; put 'put ''Y2FzZSJMaXN0IjppZihXLmx8fFcuZilicmVhaztpZigzND09R2UuY2hhckNvZGVBdCgwKSl7Vy5sPUdlLnNsaWNlKDEsLTEpLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOm51bGw9PVcuZiYmKFcuZj1HZSk7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3Ro''@;'; put 'put ''IjpjYXNlIlRpbWUiOmNhc2UiV2hvbGUiOlcub3B8fChXLm9wPSJJTiIpLG51bGw9PVcudj9XLnY9aXNOYU4oK0dlKT9HZTorR2U6KFcubWluPVcudixXLm1heD1pc05hTigrR2UpP0dlOitHZSxkZWxldGUgVy52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9l''@;'; put 'put ''eHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOmxlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpsZT0hMTticmVhaztkZWZhdWx0OmlmKHgmJnguV1RGJiYhbGUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitWZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJldHVybiBEZX0pLFZ9dmFy''@;'; put 'put ''IGtMPXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVuZHNXaXRoIn0sT3g9SWUoa0wpLFB4PXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5XOiJuZXh0V2VlayIsVE06''@;'; put 'put ''InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9LFJXPUllKFB4KTtmdW5jdGlvbiBoYihnKXt2YXIgeD17fTtyZXR1cm4gbnVsbCE9Zy52YWwmJihpc05hTigrZy52YWwpP3guZj1nLnZhbDp4LnY9K2cudmFsKSx4LnQ9Zy50''@;'; put 'put ''eXBlLHh9ZnVuY3Rpb24gQmcoZyl7cmV0dXJuIHpyKCJjZnZvIixudWxsLHt0eXBlOmcudCx2YWw6bnVsbCE9Zy52P2cudjpvaShnLmYpfSl9ZnVuY3Rpb24gR20oZyx4LHcsVil7dmFyIFc9aGIoZyk7cmV0dXJuIFcuY29sb3I9bFIoeCx3LFYpLFd9ZnVuY3Rpb24gZmIoZyx4LHcsVixXKXt2''@;'; put 'put ''YXIgZWU9KGcubWF0Y2goL3NxcmVmPSIoW1x3OiQgXSopIi8pfHxbXSlbMV07cmV0dXJuIGZ1bmN0aW9uIExXKGcseCx3LFYsVyxlZSl7dmFyIGxlPSExLG9lPVtdLGRlPXtmOltdfSxEZT0wLFJlPTAsVmU9e2Nmdm9zOltdLGNvbG9yczpbXX0sR2U9e30sZXQ9LTEsYnQ9MCxKZT0iIjtyZXR1''@;'; put 'put ''cm4gZy5yZXBsYWNlKEd0LGZ1bmN0aW9uKGZ0LFJ0KXt2YXIgU3Q9ZnIoZnQpO3N3aXRjaCgkaShTdFswXSkpe2Nhc2UiPGNvbmRpdGlvbmFsRm9ybWF0dGluZyI6Y2FzZSI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4iOmJyZWFrO2Nhc2UiPGNmUnVsZSI6Y2FzZSI8Y2ZSdWxlPiI6aWYoUmU9''@;'; put 'put ''UnQsR2U9U3QsZGU9e3JlZjp4LGY6W119LCFmdC5tYXRjaCgvXC8+LykpYnJlYWs7Y2FzZSI8L2NmUnVsZT4iOnN3aXRjaChHZS5keGZJZCYmVyYmVy5EWEYmJihkZS5zPVcuRFhGWytHZS5keGZJZF0pLEdlLnR5cGUpe2Nhc2UiZHVwbGljYXRlVmFsdWVzIjpkZS50PSJkdXAiO2JyZWFrO2Nh''@;'; put 'put ''c2UidW5pcXVlVmFsdWVzIjpkZS50PSJ1bmlxdWUiO2JyZWFrO2Nhc2UiY29udGFpbnNCbGFua3MiOmRlLnQ9ImJsYW5rIixkZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNCbGFua3MiOmRlLnQ9ImJsYW5rIixkZS52PSExO2JyZWFrO2Nhc2UiY29udGFpbnNFcnJvcnMiOmRlLnQ9ImVy''@;'; put 'put ''cm9yIixkZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNFcnJvcnMiOmRlLnQ9ImVycm9yIixkZS52PSExO2JyZWFrO2Nhc2UiY2VsbElzIjpzd2l0Y2goR2Uub3BlcmF0b3Ipe2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zIjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5k''@;'; put 'put ''c1dpdGgiOmlmKGRlLnQ9InRleHQiLGRlLm9wPU94W0dlLm9wZXJhdG9yXSxudWxsPT1HZS50ZXh0KXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrZGUub3ArIiBtaXNzaW5nIHRleHQiKTtkZS52PUdlLnRleHQsZGUuZj1kZS5mWzBdLG51bGw9PWRlLmYmJmRlbGV0ZSBkZS5mO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6ZGUudD0idmFsIixkZS5vcD1UTFtHZS5vcGVyYXRvcl0sMT09ZGUuZi5sZW5ndGg/aXNOYU4oK2RlLmZbMF0pP2RlLmY9ZGUuZlswXTooZGUudj0rZGUuZlswXSxkZWxldGUgZGUuZik6KGRlLm1pbj1pc05hTigrZGUuZlswXSk/ZGUuZlswXTorZGUuZlswXSxkZS5tYXg9''@;'; put 'put ''aXNOYU4oK2RlLmZbMV0pP2RlLmZbMV06K2RlLmZbMV0sZGVsZXRlIGRlLmYpfWJyZWFrO2Nhc2UiZXhwcmVzc2lvbiI6ZGUudD0iZm9ybXVsYSIsZGUuZj1kZS5mWzBdO2JyZWFrO2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zVGV4dCI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNl''@;'; put 'put ''ImVuZHNXaXRoIjppZihkZS50PSJ0ZXh0IixkZS5vcD1PeFtHZS50eXBlXSxudWxsPT1HZS50ZXh0JiZkZS5mLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrZGUub3ArIiBtaXNzaW5nIHRleHQiKTtkZS52PW51bGwhPUdlLnRleHQ/R2UudGV4dDpkZS5mWzFdLm1h''@;'; put 'put ''dGNoKC8iLioiLyk/ZGUuZlsxXS5zbGljZSgxLC0xKTpkZS5mWzFdLGRlLmY9ZGUuZlswXSxudWxsPT1kZS5mJiZkZWxldGUgZGUuZjticmVhaztjYXNlImNvbG9yU2NhbGUiOmlmKGRlLnQ9InNjYWxlIiwhZGUuY29sb3JTY2FsZSl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgY29sb3JTY2Fs''@;'; put 'put ''ZSIpO2RlLmNtaW49R20oKFZlPWRlLmNvbG9yU2NhbGUpLmNmdm9zWzBdLFZlLmNvbG9yc1swXSxXLFYpLDM9PVZlLmNmdm9zLmxlbmd0aCYmKGRlLmNtaWQ9R20oVmUuY2Z2b3NbMV0sVmUuY29sb3JzWzFdLFcsVikpLGRlLmNtYXg9R20oVmUuY2Z2b3NbVmUuY2Z2b3MubGVuZ3RoLTFdLFZl''@;'; put 'put ''LmNvbG9yc1tWZS5jZnZvcy5sZW5ndGgtMV0sVyxWKTticmVhaztjYXNlImRhdGFCYXIiOmlmKGRlLnQ9ImJhciIsIWRlLmRhdGFCYXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGRhdGFCYXIiKTsoVmU9ZGUuZGF0YUJhcikuY29sb3JzWzBdJiYoZGUuY29sb3I9bFIoVmUuY29sb3JzWzBd''@;'; put 'put ''LFcsVikpLGRlLmNtaW49aGIoVmUuY2Z2b3NbMF0pLGRlLmNtYXg9aGIoVmUuY2Z2b3NbMV0pO2JyZWFrO2Nhc2UiaWNvblNldCI6aWYoZGUudD0iaWNvbiIsIWRlLmljb25TZXQpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTtkZS50aHJlc2g9KFZlPWRlLmljb25TZXQpLmNm''@;'; put 'put ''dm9zLm1hcChmdW5jdGlvbihBdCl7cmV0dXJuIGhiKEF0KX0pLGRlLnY9VmUudGFnJiZWZS50YWcuaWNvblNldHx8IjNUcmFmZmljTGlnaHRzMSIsZGUucmV2PUlyKFZlLnRhZy5yZXZlcnNlfHwiZmFsc2UiKSxkZS5wY3Q9SXIoVmUudGFnLnBlcmNlbnR8fCJ0cnVlIiksZGUuaGlkZGVuPSFJ''@;'; put 'put ''cihWZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBlcmlvZCI6ZGUudD0iZGF0ZSIsZGUub3A9UldbR2UudGltZVBlcmlvZF07YnJlYWs7Y2FzZSJhYm92ZUF2ZXJhZ2UiOmRlLnQ9ImF2ZyIsZGUub3A9IjAiPT1HZS5hYm92ZUF2ZXJhZ2U/IkwiOiJHIixkZS5vcCs9''@;'; put 'put ''R2Uuc3RkRGV2P0dlLnN0ZERldjpJcihHZS5lcXVhbEF2ZXJhZ2V8fCIwIik/IkUiOiJUIjticmVhaztjYXNlInRvcDEwIjpkZS50PSJyYW5rIixkZS5vcD0oSXIoR2UuYm90dG9tfHwiMCIpPyJCIjoiVCIpKyhJcihHZS5wZXJjZW50fHwiMCIpPyJQIjoiViIpLGRlLnY9K0dlLnJhbms7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIrR2UudHlwZX1pZihkZWxldGUgZGUuY29sb3JTY2FsZSxkZWxldGUgZGUuZGF0YUJhcixkZWxldGUgZGUuaWNvblNldCwhZGUudCl0aHJvdyBjb25zb2xlLmxvZyhnLnNsaWNlKFJlLFJ0K2Z0Lmxlbmd0aCkpLCJiYWQgQ0Yg''@;'; put 'put ''cnVsZSI7bnVsbCE9ZGUuZiYmIWRlLmYubGVuZ3RoJiZkZWxldGUgZGUuZixkZS5kZWx8fG9lLnB1c2goZGUpO2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNhc2UiPGZvcm11bGE+IjpEZT1SdCtmdC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+IjpkZS5mLnB1c2gocXIoZy5zbGljZShEZSxS''@;'; put 'put ''dCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6RGU9UnQrZnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mPiI6ZGUuZi5wdXNoKHFyKGcuc2xpY2UoRGUsUnQpKSk7YnJlYWs7Y2FzZSI8c3FyZWY+IjpidD1SdCtmdC5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6SmU9Zy5zbGljZShidCxS''@;'; put 'put ''dCkseD1KZT9KZS5pbmRleE9mKCIgIik+LTE/SmU6U2EoSmUpOiIiLGRlLnJlZj14LG9lLmZvckVhY2goZnVuY3Rpb24oQXQpe0F0LnJlZj14fSk7YnJlYWs7Y2FzZSI8Y29sb3JTY2FsZSI6Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFCYXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNlIjxp''@;'; put 'put ''Y29uU2V0IjpjYXNlIjxpY29uU2V0PiI6VmU9e2Nmdm9zOltdLGNvbG9yczpbXSx0YWc6U3R9LERlPVJ0K2Z0Lmxlbmd0aDticmVhaztjYXNlIjwvY29sb3JTY2FsZT4iOmRlLmNvbG9yU2NhbGU9VmU7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+IjpkZS5kYXRhQmFyPVZlO2JyZWFrO2Nhc2UiPC9p''@;'; put 'put ''Y29uU2V0PiI6ZGUuaWNvblNldD1WZTticmVhaztjYXNlIjxjZnZvIjpjYXNlIjxjZnZvLz4iOlZlLmNmdm9zLnB1c2goU3QpO2JyZWFrO2Nhc2UiPC9jZnZvPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOlZlLmNvbG9ycy5wdXNoKFN0KTticmVhaztjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3Qi''@;'; put 'put ''OmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOmxlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpsZT0hMTticmVhaztjYXNlIjxuZWdhdGl2ZUZpbGxDb2xvciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3JkZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVCb3Jk''@;'; put 'put ''ZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjpkZS5kZWw9ITA7YnJlYWs7Y2FzZSI8ZHhmPiI6bGU9ITAsZXQ9UnQ7YnJlYWs7Y2FzZSI8L2R4Zj4iOmxlPSExLGRlLnM9al8oZy5zbGljZShldCxSdCtmdC5sZW5ndGgpLFcsVix3KTticmVhaztkZWZhdWx0OmlmKHcmJncuV1RGKXtpZihlZSlicmVh''@;'; put 'put ''aztpZighbGUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitTdFswXSsiIGluIGNvbmRmbXQiKX19cmV0dXJuIGZ0fSksb2V9KGcsZWUseCx3LFYsVyl9dmFyIEZXPS88KD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vZztmdW5jdGlvbiAkbShnLHgpe3ZhciB3''@;'; put 'put ''PTAsVj0wLFc9MCxlZT0wO2lmKCF4fHwheC5DZWxsWGYpcmV0dXJuIG51bGw7dmFyIGxlPXguQ2VsbFhmW2ddO251bGwhPWxlJiYobnVsbCE9bGUubnVtRm10SWQmJih3PWxlLm51bUZtdElkKSxudWxsIT1sZS5maWxsSWQmJihWPWxlLmZpbGxJZCksbnVsbCE9bGUuZm9udElkJiYoVz1sZS5m''@;'; put 'put ''b250SWQpLG51bGwhPWxlLmJvcmRlcklkJiYoZWU9bGUuYm9yZGVySWQpKTt2YXIgb2U9e3Q6InoifTt0cnl7em0ob2UsdyxWLFcsZWUse1dURjoxLGNlbGxTdHlsZXM6ITB9LDAseCl9Y2F0Y2h7fXJldHVybiBvZS5zfWZ1bmN0aW9uIElMKGcseCx3LFYpe2lmKHZvaWQgMD09PWcudiYmdm9p''@;'; put 'put ''ZCAwPT09Zy5mJiZudWxsPT1nLnMmJiFnLmN8fCJ6Ij09PWcudCYmIWcuYyYmIVYuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgVz0iIixlZT1nLnQsbGU9Zy52O2lmKCJ6IiE9PWcudClzd2l0Y2goZy50KXtjYXNlImIiOlc9Zy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJuIjpXPSIiK2cudjticmVh''@;'; put 'put ''aztjYXNlImUiOlc9VjBbZy52XTticmVhaztjYXNlImQiOlYmJlYuY2VsbERhdGVzP1c9TGUoZy52LC0xKS50b0lTT1N0cmluZygpOigoZz1ybihnKSkudD0ibiIsVz0iIisoZy52PVllKExlKGcudikpKSksdHlwZW9mIGcuej4idSImJihnLno9Yi5fdGFibGVbMTRdKTticmVhaztkZWZhdWx0''@;'; put 'put ''Olc9Zy52fXZhciBvZT0ieiI9PWcudD8iIjokbygidiIsb2koVykpLGRlPXtyOnh9LERlPVY/eTEoVi5jZWxsWGZzLFYuY2VsbFN0eWxlWGZzLGcsVik6MDtzd2l0Y2goMCE9PURlJiYoZGUucz1EZSksZy50KXtjYXNlIm4iOmNhc2UieiI6YnJlYWs7Y2FzZSJkIjpkZS50PSJkIjticmVhaztj''@;'; put 'put ''YXNlImIiOmRlLnQ9ImIiO2JyZWFrO2Nhc2UiZSI6ZGUudD0iZSI7YnJlYWs7ZGVmYXVsdDppZihudWxsPT1nLnYpe2RlbGV0ZSBnLnQ7YnJlYWt9aWYoViYmVi5ib29rU1NUKXtvZT0kbygidiIsIiIrUTcoVi5TdHJpbmdzLGcudixnLlI/Zy5yPXk3KGcuUik6bnVsbCxWLnJldlN0cmluZ3Mp''@;'; put 'put ''KSxkZS50PSJzIjticmVha31BcnJheS5pc0FycmF5KGcuUik/KG9lPSI8aXM+Iit5NyhnLlIpKyI8L2lzPiIsZGUudD0iaW5saW5lU3RyIik6ZGUudD0ic3RyIn1pZihnLnQhPWVlJiYoZy50PWVlLGcudj1sZSksZy5mKXt2YXIgUmU9Zy5GJiZnLkYuc2xpY2UoMCx4Lmxlbmd0aCk9PXg/e3Q6''@;'; put 'put ''ImFycmF5IixyZWY6Zy5GfTpudWxsO29lPXpyKCJmIixvaShnLmYpLFJlKSsobnVsbCE9Zy52P29lOiIiKX1yZXR1cm4gZy5sJiZ3WyIhbGlua3MiXS5wdXNoKFt4LGcubF0pLGcuYyYmd1siIWNvbW1lbnRzIl0ucHVzaChbeCxnLmNdKSx6cigiYyIsb2UsZGUpfXZhciBGeD1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciBnPS88KD86XHcrOik/Y1sgXC8+XS8seD0vPFwvKD86XHcrOik/cm93Pi8sdz0vcj1bIiddKFteIiddKilbIiddLyxWPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sVz0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGVlPXkwKCJ2IiksbGU9eTAoImYiKTtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oZGUsRGUsUmUsVmUsR2UsZXQsYnQpe2Zvcih2YXIgbW4sZHIsaHIsTm4sSWksSmU9MCxmdD0iIixSdD1bXSxTdD1bXSxBdD0wLHp0PTAsU249MCxscj0iIixHbj0wLEhuPTAsdHI9MCx2aT0wLFBpPTAscWk9MCx0YT1BcnJheS5pc0FycmF5KGJ0LkNlbGxYZiksU3I9W10s''@;'; put 'put ''Rm49W10sTHI9QXJyYXkuaXNBcnJheShSZSkscHI9W10sTG49e30sUHI9ITEsWmk9ZGUuc3BsaXQoeCksX2k9ISFWZS5zaGVldFN0dWJzLHBhPSEhVmUuY2VsbEhUTUwsYW89ISghMT09PVZlLmNlbGxUZXh0JiYhVmUuY2VsbE5GJiYhVmUuY2VsbFN0eWxlcyksUWk9MCxEbz1aaS5sZW5ndGg7''@;'; put 'put ''UWkhPURvOysrUWkpe3ZhciBqYT0oZnQ9WmlbUWldLnRyaW0oKSkubGVuZ3RoO2lmKDAhPT1qYSl7dmFyIG1vPTA7ZTpmb3IoSmU9MDtKZTxqYTsrK0plKXN3aXRjaChmdFtKZV0pe2Nhc2UiPiI6aWYoIi8iIT1mdFtKZS0xXSl7KytKZTticmVhayBlfVZlLmNlbGxTdHlsZXMmJm51bGwhPShk''@;'; put 'put ''cj1mcihmdC5zbGljZShtbyxKZSksITApKS5yJiZwYXJzZUludChkci5yLDEwKSYmKEduPXBhcnNlSW50KGRyLnIsMTApLExuPXt9LFByPSExLGRyLmh0JiYoUHI9ITAsTG4uaHB0PXBhcnNlRmxvYXQoZHIuaHQpLExuLmhweD1saChMbi5ocHQpKSxkci5keURlc2NlbnQmJihQcj0hMCxMbi5k''@;'; put 'put ''eURlc2NlbnQ9ZHIuZHlEZXNjZW50KSwiMSI9PWRyLmhpZGRlbiYmKFByPSEwLExuLmhpZGRlbj0hMCksbnVsbCE9ZHIub3V0bGluZUxldmVsJiYoUHI9ITAsTG4ubGV2ZWw9K2RyLm91dGxpbmVMZXZlbCksZHIucyYmYnQmJmJ0LkNlbGxYZiYmKFByPSEwLExuLnM9JG0oZHIucyxidCkpLFBy''@;'; put 'put ''JiYocHJbR24tMV09TG4pKTticmVhaztjYXNlIjwiOm1vPUplfWlmKG1vPj1KZSlicmVhaztpZihHbj1udWxsIT0oZHI9ZnIoZnQuc2xpY2UobW8sSmUpLCEwKSkucj9wYXJzZUludChkci5yLDEwKTpHbisxLEhuPS0xLCEoVmUuc2hlZXRSb3dzJiZWZS5zaGVldFJvd3M8R24pKXtWZS5ub2Rp''@;'; put 'put ''bXx8KEdlLnMucj5Hbi0xJiYoR2Uucy5yPUduLTEpLEdlLmUucjxHbi0xJiYoR2UuZS5yPUduLTEpKTt2YXIgY289e3Q6InJvdyIscm93OltdLFI6R24tMSxpZHg6RGV9O1ZlLmNlbGxTdHlsZXMmJihMbj17fSxQcj0hMSxkci5odCYmKFByPSEwLExuLmhwdD1wYXJzZUZsb2F0KGRyLmh0KSxM''@;'; put 'put ''bi5ocHg9bGgoTG4uaHB0KSksZHIuZHlEZXNjZW50JiYoUHI9ITAsTG4uZHlEZXNjZW50PWRyLmR5RGVzY2VudCksIjEiPT1kci5oaWRkZW4mJihQcj0hMCxMbi5oaWRkZW49ITApLG51bGwhPWRyLm91dGxpbmVMZXZlbCYmKFByPSEwLExuLmxldmVsPStkci5vdXRsaW5lTGV2ZWwpLGRyLnMm''@;'; put 'put ''JihQcj0hMCxMbi5zPSRtKGRyLnMsYnQpKSxQciYmKFZlLmNhbGxiYWNrP2NvLnByb3BzPUxuOnByW0duLTFdPUxuKSksUnQ9ZnQuc2xpY2UoSmUpLnNwbGl0KGcpO2Zvcih2YXIgQmk9MDtCaSE9UnQubGVuZ3RoJiYiPCI9PVJ0W0JpXS50cmltKCkuY2hhckF0KDApOysrQmkpO2ZvcihSdD1S''@;'; put 'put ''dC5zbGljZShCaSksSmU9MDtKZSE9UnQubGVuZ3RoOysrSmUpaWYoMCE9PShmdD1SdFtKZV0udHJpbSgpKS5sZW5ndGgpe2lmKFN0PWZ0Lm1hdGNoKHcpLEF0PUplLHp0PTAsU249MCxmdD0iPGMgIisoIjwiPT1mdC5zbGljZSgwLDEpPyI+IjoiIikrZnQsbnVsbCE9U3QmJjI9PT1TdC5sZW5n''@;'; put 'put ''dGgpe2ZvcihBdD0wLGxyPVN0WzFdLHp0PTA7enQhPWxyLmxlbmd0aCYmISgoU249bHIuY2hhckNvZGVBdCh6dCktNjQpPDF8fFNuPjI2KTsrK3p0KUF0PTI2KkF0K1NuO0huPS0tQXR9ZWxzZSsrSG47Zm9yKHp0PTA7enQhPWZ0Lmxlbmd0aCYmNjIhPT1mdC5jaGFyQ29kZUF0KHp0KTsrK3p0''@;'; put 'put ''KTtpZigrK3p0LChkcj1mcihmdC5zbGljZSgwLHp0KSwhMCkpLnJ8fChkci5yPUtyKHtyOkduLTEsYzpIbn0pKSxtbj17dDoiIn0sbnVsbCE9KFN0PShscj1mdC5zbGljZSh6dCkpLm1hdGNoKGVlKSkmJiIiIT09U3RbMV0mJihtbi52PXFyKFN0WzFdKSksVmUuY2VsbEZvcm11bGEpe2lmKG51''@;'; put 'put ''bGwhPShTdD1sci5tYXRjaChsZSkpJiYiIiE9PVN0WzFdKXtpZihtbi5mPXFyKGJvKFN0WzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLFZlLnhsZm58fChtbi5mPWx4KG1uLmYpKSxTdFswXS5pbmRleE9mKCd0PSJhcnJheSInKT4tMSltbi5GPShsci5tYXRjaChXKXx8W10pWzFdLG1uLkYu''@;'; put 'put ''aW5kZXhPZigiOiIpPi0xJiZTci5wdXNoKFtTYShtbi5GKSxtbi5GXSk7ZWxzZSBpZihTdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe05uPWZyKFN0WzBdKTt2YXIga2w9cXIoYm8oU3RbMV0pKTtWZS54bGZufHwoa2w9bHgoa2wpKSxGbltwYXJzZUludChObi5zaSwxMCldPVtObixr''@;'; put 'put ''bCxkci5yXX19ZWxzZShTdD1sci5tYXRjaCgvPGZbXj5dKlwvPi8pKSYmRm5bKE5uPWZyKFN0WzBdKSkuc2ldJiYobW4uZj1EbShGbltObi5zaV1bMV0sRm5bTm4uc2ldWzJdLGRyLnIpKTt2YXIgT249eGEoZHIucik7Zm9yKHp0PTA7enQ8U3IubGVuZ3RoOysrenQpT24ucj49U3JbenRdWzBd''@;'; put 'put ''LnMuciYmT24ucjw9U3JbenRdWzBdLmUuciYmT24uYz49U3JbenRdWzBdLnMuYyYmT24uYzw9U3JbenRdWzBdLmUuYyYmKG1uLkY9U3JbenRdWzFdKX1pZihudWxsPT1kci50JiZ2b2lkIDA9PT1tbi52KWlmKG1uLmZ8fG1uLkYpbW4udj0wLG1uLnQ9Im4iO2Vsc2V7aWYoIV9pKWNvbnRpbnVl''@;'; put 'put ''O21uLnQ9InoifWVsc2UgbW4udD1kci50fHwibiI7c3dpdGNoKEdlLnMuYz5IbiYmKEdlLnMuYz1IbiksR2UuZS5jPEhuJiYoR2UuZS5jPUhuKSxtbi50KXtjYXNlIm4iOmlmKCIiPT1tbi52fHxudWxsPT1tbi52KXtpZighX2kpY29udGludWU7bW4udD0ieiJ9ZWxzZSBtbi52PXBhcnNlRmxv''@;'; put 'put ''YXQobW4udik7YnJlYWs7Y2FzZSJzIjppZih0eXBlb2YgbW4udj4idSIpe2lmKCFfaSljb250aW51ZTttbi50PSJ6In1lbHNlIGhyPXE3W3BhcnNlSW50KG1uLnYsMTApXSxtbi52PWhyLnQsbW4ucj1oci5yLGhyLlImJihtbi5SPWhyLlIpLHBhJiYobW4uaD1oci5oKTticmVhaztjYXNlInN0''@;'; put 'put ''ciI6bW4udD0icyIsbW4udj1udWxsIT1tbi52P2JvKG1uLnYpOiIiLHBhJiYobW4uaD1mYShtbi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOlN0PWxyLm1hdGNoKFYpLG1uLnQ9InMiLG51bGwhPVN0JiYoaHI9XzcoU3RbMV0pKT8obW4udj1oci50LGhyLlImJihtbi5SPWhyLlIpLHBhJiYo''@;'; put 'put ''bW4uaD1oci5oKSk6bW4udj0iIjticmVhaztjYXNlImIiOm1uLnY9SXIobW4udik7YnJlYWs7Y2FzZSJkIjpWZS5jZWxsRGF0ZXM/bW4udj1MZShtbi52LDEpOihtbi52PVllKExlKG1uLnYsMSkpLG1uLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09VmUuY2VsbFRleHQmJihtbi53PW1uLnYp''@;'; put 'put ''LG1uLnY9UHBbbW4udl19aWYoYW8pe3RyPXZpPVBpPXFpPTAsSWk9bnVsbCx0YSYmdm9pZCAwIT09ZHIucyYmbnVsbCE9KElpPWJ0LkNlbGxYZltkci5zXSkmJihudWxsIT1JaS5udW1GbXRJZCYmKHRyPUlpLm51bUZtdElkKSxWZS5jZWxsU3R5bGVzJiYobnVsbCE9SWkuZmlsbElkJiYodmk9''@;'; put 'put ''SWkuZmlsbElkKSxudWxsIT1JaS5mb250SWQmJihQaT1JaS5mb250SWQpLG51bGwhPUlpLmJvcmRlcklkJiYocWk9SWkuYm9yZGVySWQpKSk7dHJ5e3ptKG1uLHRyLHZpLFBpLHFpLFZlLDAsYnQpfWNhdGNoe31WZS5jZWxsU3R5bGVzJiZtbi5zJiYoSWkmJklpLmFsaWdubWVudCYmKG1uLnMu''@;'; put 'put ''YWxpZ25tZW50PXJuKElpLmFsaWdubWVudCkpLElpJiZJaS5wcm90ZWN0aW9uJiYobnVsbCE9SWkucHJvdGVjdGlvbi5oaWRkZW4mJihtbi5zLmhpZGRlbj1JaS5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9SWkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKG1uLnMuZWRpdGFibGU9SWkucHJvdGVj''@;'; put 'put ''dGlvbi5lZGl0YWJsZSkpLElpJiZJaS5zdHlsZSYmKG1uLnMuc3R5bGU9SWkuc3R5bGUpKSxWZS5jZWxsRGF0ZXMmJnRhJiYibiI9PW1uLnQmJmIuaXNfZGF0ZShiLl90YWJsZVt0cl0pJiYobW4udD0iZCIsbW4udj1xdChtbi52KSl9dmFyIHdzO1ZlLm5vZGltJiYod3M9eGEoZHIuciksR2Uu''@;'; put 'put ''cy5yPndzLnImJihHZS5zLnI9d3MuciksR2UuZS5yPHdzLnImJihHZS5lLnI9d3MucikpLFZlLmNhbGxiYWNrPyh3cz14YShkci5yKSxjby5yb3dbd3MuY109bW4pOkxyPyhSZVsod3M9eGEoZHIucikpLnJdfHwoUmVbd3Mucl09W10pLFJlW3dzLnJdW3dzLmNdPW1uKTpSZVtkci5yXT1tbn1W''@;'; put 'put ''ZS5jYWxsYmFjayYmVmUuY2FsbGJhY2soY28pfX19X2kmJiFWZS5jYWxsYmFjayYmJG0oMCxidCkscHIubGVuZ3RoPjAmJihSZVsiIXJvd3MiXT1wcil9fSgpLGpnPXpyKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOlJvLm1haW5bMF0sInhtbG5zOnIiOlJvLnIsInhtbG5zOngxNGFjIjoiaHR0''@;'; put 'put ''cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24g''@;'; put 'put ''UkwoZyx4LHcsVil7dmFyIGxlLFc9W2tpLGpnXSxvZT0iIixkZT13LlNoZWV0c1t3LlNoZWV0TmFtZXNbZ11dO251bGw9PWRlJiYoZGU9e30pO3ZhciBEZT1kZVsiIXJlZiJdfHwiQTEiLFJlPVNhKERlKTtpZihSZS5lLmM+MTYzODN8fFJlLmUucj4xMDQ4NTc1KXtpZih4LldURil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlJhbmdlICIrRGUrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7UmUuZS5jPU1hdGgubWluKFJlLmUuYywxNjM4MyksUmUuZS5yPU1hdGgubWluKFJlLmUuYywxMDQ4NTc1KSxEZT1KaShSZSl9Vnx8KFY9e30pLGRlWyIhY29tbWVudHMiXT1bXTt2YXIg''@;'; put 'put ''VmU9W10sR2U9ZGVbIiFwcmludCJdO2lmKGZ1bmN0aW9uIE1XKGcseCx3LFYsVyl7dmFyIGVlPSExLGxlPXt9LG9lPW51bGw7aWYoInhsc3giIT09Vi5ib29rVHlwZSYmeC52YmFyYXcpe3ZhciBkZT14LlNoZWV0TmFtZXNbd107dHJ5e3guV29ya2Jvb2smJihkZT14Lldvcmtib29rLlNoZWV0''@;'; put 'put ''c1t3XS5Db2RlTmFtZXx8ZGUpfWNhdGNoe31lZT0hMCxsZS5jb2RlTmFtZT1vaShkZSl9ZyYmZ1siIWNvbmRmbXQiXSYmKGxlLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0iMSIpLGcmJmdbIiF0YWJjb2xvciJdJiYob2U9KG9lfHwiIikrJzx0YWJDb2xvciByZ2I9IkZGJytN''@;'; put 'put ''ZChnWyIhdGFiY29sb3IiXS5yZ2IpKyciLz4nKTt2YXIgRGU9ITEsUmU9e307aWYoKCgoZ3x8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoRGU9ITAsUmUuZml0VG9QYWdlPTEpLERlJiYob2U9KG9lfHwiIikrenIoInBhZ2VTZXRVcFByIixudWxsLFJlKSksZyYmZ1siIW91''@;'; put 'put ''dGxpbmUiXSl7dmFyIFZlPXtzdW1tYXJ5QmVsb3c6MSxzdW1tYXJ5UmlnaHQ6MX07Z1siIW91dGxpbmUiXS5hYm92ZSYmKFZlLnN1bW1hcnlCZWxvdz0wKSxnWyIhb3V0bGluZSJdLmxlZnQmJihWZS5zdW1tYXJ5UmlnaHQ9MCksb2U9KG9lfHwiIikrenIoIm91dGxpbmVQciIsbnVsbCxWZSl9''@;'; put 'put ''IWVlJiYhb2V8fChXW1cubGVuZ3RoXT16cigic2hlZXRQciIsb2UsbGUpKX0oZGUsdyxnLHgsVyksV1tXLmxlbmd0aF09enIoImRpbWVuc2lvbiIsbnVsbCx7cmVmOkRlfSksV1tXLmxlbmd0aF09ZnVuY3Rpb24gREwoZyx4LHcsVil7dmFyIFc9e3dvcmtib29rVmlld0lkOiIwIn07aWYoKCgo''@;'; put 'put ''Vnx8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKS5sZW5ndGgpe3ZhciBlZT1WLldvcmtib29rLlZpZXdzLGxlPWVlW3ddfHxlZVswXTtXLnJpZ2h0VG9MZWZ0PWxlLlJUTD8iMSI6IjAiLGxlLnpvb20mJihXLnpvb21TY2FsZT1sZS56b29tKSxudWxsIT1sZS5ncmlkJiYoVy5zaG93R3Jp''@;'; put 'put ''ZExpbmVzPWxlLmdyaWQpLGxlLnZpZXcmJihXLnZpZXc9bGUudmlldyl9bnVsbCE9Z1siIWdyaWRsaW5lcyJdJiYoVy5zaG93R3JpZExpbmVzPSEhZ1siIWdyaWRsaW5lcyJdKTt2YXIgb2U9IiIsZGU9e3I6MCxjOjB9O2lmKGdbIiFzZWwiXSl7aWYoIShkZT1nWyIhc2VsIl0uY2VsbCkpe2lm''@;'; put 'put ''KCFnWyIhc2VsIl0ucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO2RlPXdyKGdbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgZGUmJihkZT14YShkZSkpfXZhciBSZT1nWyIh''@;'; put 'put ''ZnJlZXplIl0/InN0cmluZyI9PXR5cGVvZiBnWyIhZnJlZXplIl0/eGEoZ1siIWZyZWV6ZSJdKTpnWyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKGdbIiFmcmVlemUiXSl7dmFyIFZlPUtyKFJlKSxHZT17c3RhdGU6ImZyb3plbiIseFNwbGl0OlJlLmMseVNwbGl0OlJlLnIsdG9wTGVmdENlbGw6''@;'; put 'put ''VmV9O2dbIiFzZWwiXSYmKEdlLmFjdGl2ZVBhbmU9KGRlLnI+PVJlLnImJlJlLnI+MD8iYm90dG9tIjoidG9wIikrKGRlLmM+PVJlLmMmJlJlLmM+MD8iUmlnaHQiOiJMZWZ0IikpLG9lPXpyKCJwYW5lIixudWxsLEdlKX1pZihnWyIhc2VsIl0pe3ZhciBldD17YWN0aXZlQ2VsbDoic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIGRlP2RlOktyKGRlKX07ZXQuc3FyZWY9Z1siIXNlbCJdLnJhbmdlP2dbIiFzZWwiXS5yYW5nZTpldC5hY3RpdmVDZWxsKyI6IitldC5hY3RpdmVDZWxsLG9lKz16cigic2VsZWN0aW9uIixudWxsLGV0KSxnWyIhZnJlZXplIl0mJihSZS5jPjAmJihldC5wYW5lPSJ0b3BSaWdo''@;'; put 'put ''dCIsb2UrPXpyKCJzZWxlY3Rpb24iLG51bGwsZXQpKSxSZS5yPjAmJihldC5wYW5lPSJib3R0b21MZWZ0IixvZSs9enIoInNlbGVjdGlvbiIsbnVsbCxldCkpLFJlLmM+MCYmUmUucj4wJiYoZXQucGFuZT0iYm90dG9tUmlnaHQiLG9lKz16cigic2VsZWN0aW9uIixudWxsLGV0KSkpfXJldHVy''@;'; put 'put ''biB6cigic2hlZXRWaWV3cyIsenIoInNoZWV0VmlldyIsb2V8fG51bGwsVykse30pfShkZSwwLGcsdykseC5zaGVldEZvcm1hdCl7dmFyIGV0PXtkZWZhdWx0Um93SGVpZ2h0Onguc2hlZXRGb3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6eC5zaGVldEZvcm1hdC5i''@;'; put 'put ''YXNlQ29sV2lkdGh8fCIxMCJ9O251bGwhPXguc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93JiYoZXQub3V0bGluZUxldmVsUm93PXguc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxXW1cubGVuZ3RoXT16cigic2hlZXRGb3JtYXRQciIsbnVsbCxldCl9ZWxzZSBpZihkZVsiIXNoZWV0''@;'; put 'put ''Rm9ybWF0Il0pe3ZhciBidD17fSxKZT0hMTtkZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoZGVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KEplPSEwLGJ0LmRlZmF1bHRSb3dIZWlnaHQ9ZGVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQsYnQuY3VzdG9tSGVpZ2h0PTEpOmRlWyIhc2hlZXRGb3Jt''@;'; put 'put ''YXQiXS5yb3cuaHB4PyhKZT0hMCxidC5kZWZhdWx0Um93SGVpZ2h0PUUzKGRlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxidC5jdXN0b21IZWlnaHQ9MSk6KDA9PT1kZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdHx8MD09PWRlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHxkZVsiIXNoZWV0''@;'; put 'put ''Rm9ybWF0Il0ucm93LmhpZGRlbikmJihKZT0hMCxidC5kZWZhdWx0Um93SGVpZ2h0PWJ0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LGJ0LmN1c3RvbUhlaWdodD0xLGJ0Lnplcm9IZWlnaHQ9MSksZGVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKGJ0WyJ4MTRhYzpkeURlc2NlbnQiXT1kZVsi''@;'; put 'put ''IXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50KSksZGVbIiFzaGVldEZvcm1hdCJdLmNvbCYmKGRlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxtMShkZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSxidC5kZWZhdWx0Q29sV2lkdGg9ZGVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS94bHx8MCxKZT0h''@;'; put 'put ''MCksbnVsbD09YnQuZGVmYXVsdFJvd0hlaWdodCYmKGJ0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PWJ0LmRlZmF1bHRDb2xXaWR0aCYmKGJ0LmRlZmF1bHRDb2xXaWR0aD0xMCksYnQub3V0bGluZUxldmVsUm93PWJ0Lm91dGxpbmVMZXZlbFJvd3x8NyxKZSYmKFdbVy5sZW5ndGhdPXpy''@;'; put 'put ''KCJzaGVldEZvcm1hdFByIixudWxsLGJ0KSl9bnVsbCE9ZGVbIiFjb2xzIl0mJmRlWyIhY29scyJdLmxlbmd0aD4wJiYoV1tXLmxlbmd0aF09ZnVuY3Rpb24gYXNlKGcseCx3KXtmb3IodmFyIFcsVj1bIjxjb2xzPiJdLGVlPTA7ZWUhPXgubGVuZ3RoOysrZWUpaWYoVz14W2VlXSl7aWYoVy5h''@;'; put 'put ''dXRvJiZwTChnLFcsZWUpLFcuc3x8Vy56KXt2YXIgbGU9e3Q6InoifTtudWxsIT1XLnMmJihsZS5zPVcucyksbnVsbCE9Vy56JiYobGUuej1XLnopLFcuc3R5bGU9eTEody5jZWxsWGZzLHcuY2VsbFN0eWxlWGZzLGxlLHcpfVZbVi5sZW5ndGhdPXpyKCJjb2wiLG51bGwsc2IoZWUsVykpfXJl''@;'; put 'put ''dHVybiBWW1YubGVuZ3RoXT0iPC9jb2xzPiIsVi5qb2luKCIiKX0oZGUsZGVbIiFjb2xzIl0seCkpLFdbbGU9Vy5sZW5ndGhdPSI8c2hlZXREYXRhLz4iLGRlWyIhbGlua3MiXT1bXSxudWxsIT1kZVsiIXJlZiJdJiYob2U9ZnVuY3Rpb24gcGIoZyx4KXt2YXIgZGUsZnQsVz1bXSxlZT1bXSxs''@;'; put 'put ''ZT1TYShnWyIhcmVmIl0pLG9lPSIiLERlPSIiLFJlPVtdLFZlPTAsR2U9MCxldD1nWyIhcm93cyJdLGJ0PUFycmF5LmlzQXJyYXkoZyksSmU9e3I6RGV9LFJ0PS0xO2ZvcihHZT1sZS5zLmM7R2U8PWxlLmUuYzsrK0dlKVJlW0dlXT1QYShHZSk7Zm9yKFZlPWxlLnMucjtWZTw9bGUuZS5yOysr''@;'; put 'put ''VmUpe2ZvcihlZT1bXSxEZT16bihWZSksR2U9bGUucy5jO0dlPD1sZS5lLmM7KytHZSl7ZGU9UmVbR2VdK0RlO3ZhciBTdD1idD8oZ1tWZV18fFtdKVtHZV06Z1tkZV07dm9pZCAwIT09U3QmJm51bGwhPShvZT1JTChTdCxkZSxnLHgpKSYmZWUucHVzaChvZSl9KGVlLmxlbmd0aD4wfHxldCYm''@;'; put 'put ''ZXRbVmVdKSYmKEplPXtyOkRlfSxldCYmZXRbVmVdJiYoKGZ0PWV0W1ZlXSkuaGlkZGVuJiYoSmUuaGlkZGVuPTEpLFJ0PS0xLGZ0LmhweD9SdD1FMyhmdC5ocHgpOmZ0LmhwdCYmKFJ0PWZ0LmhwdCksUnQ+LTEmJihKZS5odD1SdCxKZS5jdXN0b21IZWlnaHQ9MSksZnQubGV2ZWwmJihKZS5v''@;'; put 'put ''dXRsaW5lTGV2ZWw9ZnQubGV2ZWwpLGZ0LmR5RGVzY2VudCYmKEplWyJ4MTRhYzpkeURlc2NlbnQiXT1mdC5keURlc2NlbnQpLGZ0LnMmJihKZS5zPXkxKHguY2VsbFhmcyx4LmNlbGxTdHlsZVhmcyx7dDoieiIsczpmdC5zfSx4KSxKZS5jdXN0b21Gb3JtYXQ9MSkpLFdbVy5sZW5ndGhdPXpy''@;'; put 'put ''KCJyb3ciLGVlLmpvaW4oIiIpLEplKSl9aWYoZXQpZm9yKDtWZTxldC5sZW5ndGg7KytWZSlldCYmZXRbVmVdJiYoSmU9e3I6VmUrMX0sKGZ0PWV0W1ZlXSkuaGlkZGVuJiYoSmUuaGlkZGVuPTEpLFJ0PS0xLGZ0LmhweD9SdD1FMyhmdC5ocHgpOmZ0LmhwdCYmKFJ0PWZ0LmhwdCksUnQ+LTEm''@;'; put 'put ''JihKZS5odD1SdCxKZS5jdXN0b21IZWlnaHQ9MSksZnQubGV2ZWwmJihKZS5vdXRsaW5lTGV2ZWw9ZnQubGV2ZWwpLFdbVy5sZW5ndGhdPXpyKCJyb3ciLCIiLEplKSk7cmV0dXJuIFcuam9pbigiIil9KGRlLHgpLG9lLmxlbmd0aD4wJiYoV1tXLmxlbmd0aF09b2UpKSxXLmxlbmd0aD5sZSsx''@;'; put 'put ''JiYoV1tXLmxlbmd0aF09Ijwvc2hlZXREYXRhPiIsV1tsZV09V1tsZV0ucmVwbGFjZSgiLz4iLCI+IikpLGRlWyIhcHJvdGVjdCJdJiYoV1tXLmxlbmd0aF09ZnVuY3Rpb24gWm0oZyl7dmFyIHg9e3NoZWV0OjF9O3JldHVybiBuOS5mb3JFYWNoKGZ1bmN0aW9uKHcpe251bGwhPWdbd10mJmdb''@;'; put 'put ''d10mJih4W3ddPSIxIil9KSxvMi5mb3JFYWNoKGZ1bmN0aW9uKHcpe251bGwhPWdbd10mJiFnW3ddJiYoeFt3XT0iMCIpfSksZy5wYXNzd29yZD94LnBhc3N3b3JkPUlNKGcucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOmcuZW5jcnlwdGlvbiYmKHguYWxnb3JpdGhtTmFt''@;'; put 'put ''ZT1nLmVuY3J5cHRpb24uYWxnbyx4Lmhhc2hWYWx1ZT1nLmVuY3J5cHRpb24uaGFzaCx4LnNhbHRWYWx1ZT1nLmVuY3J5cHRpb24uc2FsdCx4LnNwaW5Db3VudD1nLmVuY3J5cHRpb24uc3BpbiksenIoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCx4KX0oZGVbIiFwcm90ZWN0Il0pKSxudWxsIT1k''@;'; put 'put ''ZVsiIWF1dG9maWx0ZXIiXSYmKFdbVy5sZW5ndGhdPWZ1bmN0aW9uIEx4KGcseCx3LFYpe3ZhciBXPSJzdHJpbmciPT10eXBlb2YgZy5yZWY/Zy5yZWY6SmkoZy5yZWYpO3cuV29ya2Jvb2t8fCh3Lldvcmtib29rPXtTaGVldHM6W119KSx3Lldvcmtib29rLk5hbWVzfHwody5Xb3JrYm9vay5O''@;'; put 'put ''YW1lcz1bXSk7dmFyIGVlPXcuV29ya2Jvb2suTmFtZXMsbGU9d3IoVyk7bGUucy5yPT1sZS5lLnImJihsZS5lLnI9d3IoeFsiIXJlZiJdKS5lLnIsVz1KaShsZSkpO2Zvcih2YXIgb2U9MDtvZTxlZS5sZW5ndGg7KytvZSl7dmFyIGRlPWVlW29lXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNl''@;'; put 'put ''Ij09ZGUuTmFtZSYmZGUuU2hlZXQ9PVYpe2RlLlJlZj0iJyIrdy5TaGVldE5hbWVzW1ZdKyInISIrVzticmVha319cmV0dXJuIG9lPT1lZS5sZW5ndGgmJmVlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6VixSZWY6IiciK3cuU2hlZXROYW1lc1tWXSsiJyEiK1d9''@;'; put 'put ''KSx6cigiYXV0b0ZpbHRlciIsbnVsbCx7cmVmOld9KX0oZGVbIiFhdXRvZmlsdGVyIl0sZGUsdyxnKSksbnVsbCE9ZGVbIiFtZXJnZXMiXSYmZGVbIiFtZXJnZXMiXS5sZW5ndGg+MCYmKFdbVy5sZW5ndGhdPWZ1bmN0aW9uIFNMKGcpe2lmKDA9PT1nLmxlbmd0aClyZXR1cm4iIjtmb3IodmFy''@;'; put 'put ''IHg9JzxtZXJnZUNlbGxzIGNvdW50PSInK2cubGVuZ3RoKyciPicsdz0wO3chPWcubGVuZ3RoOysrdyl4Kz0nPG1lcmdlQ2VsbCByZWY9IicrSmkoZ1t3XSkrJyIvPic7cmV0dXJuIHgrIjwvbWVyZ2VDZWxscz4ifShkZVsiIW1lcmdlcyJdKSksZGVbIiFjb25kZm10Il0mJihXW1cubGVuZ3Ro''@;'; put 'put ''XT1mdW5jdGlvbiBQVyhnLHgpe3JldHVybiBnLm1hcChmdW5jdGlvbih3LFYpe3JldHVybiBmdW5jdGlvbiBPVyhnLHgsdyl7dmFyIFY9Zy5zP21MKHcuRFhGLGcucyk6LTEsVz0ic3RyaW5nIj09dHlwZW9mIGcucmVmP2cucmVmOkppKGcucmVmKSxsZT1TYShXLnJlcGxhY2UoL1xzLiokLywi''@;'; put 'put ''IikpLnM7bGUucjwwJiYobGUucj0wKSxsZS5jPDAmJihsZS5jPTApO3ZhciBvZT0iIixkZT17cHJpb3JpdHk6eCsxfTtzd2l0Y2goVj4tMSYmKGRlLmR4ZklkPVYpLGcudCl7Y2FzZSJ1bmlxdWUiOmRlLnR5cGU9InVuaXF1ZVZhbHVlcyI7YnJlYWs7Y2FzZSJkdXAiOmRlLnR5cGU9ImR1cGxp''@;'; put 'put ''Y2F0ZVZhbHVlcyI7YnJlYWs7Y2FzZSJibGFuayI6ZGUudHlwZT0oZy52PyJjIjoibm90QyIpKyJvbnRhaW5zQmxhbmtzIixvZT0iPGZvcm11bGE+TEVOKFRSSU0oIitLcihsZSkrIikpIisoZy52PyI9IjoiJmd0OyIpKyIwPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJlcnJvciI6ZGUudHlwZT0o''@;'; put 'put ''Zy52PyJjIjoibm90QyIpKyJvbnRhaW5zRXJyb3JzIjticmVhaztjYXNlImZvcm11bGEiOmRlLnR5cGU9ImV4cHJlc3Npb24iLG9lPXpyKCJmb3JtdWxhIixvaShnLmYpLHt9KTticmVhaztjYXNlImRhdGUiOmRlLnR5cGU9InRpbWVQZXJpb2QiLGRlLnRpbWVQZXJpb2Q9UHhbZy5vcF07YnJl''@;'; put 'put ''YWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2goZGUudHlwZT1kZS5vcGVyYXRvcj1rTFtnLm9wXSxkZS50ZXh0PWcudixnLm9wKXtjYXNlIklOIjpvZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK29pKGcudikrJyIsJytLcihsZSkrIikpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiT1QiOm9l''@;'; put 'put ''PSc8Zm9ybXVsYT5JU0VSUk9SKFNFQVJDSCgiJytvaShnLnYpKyciLCcrS3IobGUpKyIpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOm9lPSI8Zm9ybXVsYT5MRUZUKCIrS3IobGUpKycsTEVOKCInK29pKGcudikrJyIpKT0iJytvaShnLnYpKyciPC9mb3JtdWxhPic7YnJlYWs7Y2FzZSJO''@;'; put 'put ''RCI6b2U9Ijxmb3JtdWxhPlJJR0hUKCIrS3IobGUpKycsTEVOKCInK29pKGcudikrJyIpKT0iJytvaShnLnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOmRlLnR5cGU9ImNlbGxJcyIsZGUub3BlcmF0b3I9WW1bZy5vcF0sb2U9bnVsbCE9Zy5taW4/enIoImZvcm11bGEiLG9pKFN0''@;'; put 'put ''cmluZyhnLm1pbikpLHt9KSt6cigiZm9ybXVsYSIsb2koU3RyaW5nKGcubWF4KSkse30pOnpyKCJmb3JtdWxhIixvaShudWxsIT1nLnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2YgZy52PyciJytnLnYucmVwbGFjZSgvIi9nLCciIicpKyciJzpnLnYpOmcuZikse30pO2JyZWFrO2Nhc2UiYXZn''@;'; put 'put ''Ijpzd2l0Y2goZGUudHlwZT0iYWJvdmVBdmVyYWdlIixkZS5hYm92ZUF2ZXJhZ2U9IkwiPT1nLm9wLmNoYXJBdCgwKT8iMCI6IjEiLGcub3AuY2hhckF0KDEpKXtjYXNlIlQiOmRlLmVxdWFsQXZlcmFnZT0iMCI7YnJlYWs7Y2FzZSJFIjpkZS5lcXVhbEF2ZXJhZ2U9IjEiO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6ZGUuc3RkRGV2PWcub3AuY2hhckF0KDEpfWJyZWFrO2Nhc2UicmFuayI6ZGUudHlwZT0idG9wMTAiLGRlLmJvdHRvbT0iQiI9PWcub3AuY2hhckF0KDApPyIxIjoiMCIsZGUucGVyY2VudD0iUCI9PWcub3AuY2hhckF0KDEpPyIxIjoiMCIsZGUucmFuaz1nLnY7YnJlYWs7Y2FzZSJpY29u''@;'; put 'put ''IjpkZS50eXBlPSJpY29uU2V0Ijt2YXIgRGU9e2ljb25TZXQ6Zy52LHBlcmNlbnQ6Zy5wY3Q/InRydWUiOiJmYWxzZSJ9O2cucmV2JiYoRGUucmV2ZXJzZT0idHJ1ZSIpLGcuaGlkZGVuJiYoRGUuc2hvd1ZhbHVlPSJmYWxzZSIpLG9lPXpyKCJpY29uU2V0IixnLnRocmVzaC5tYXAoQmcpLmpv''@;'; put 'put ''aW4oIiIpLERlKTticmVhaztjYXNlInNjYWxlIjpkZS50eXBlPSJjb2xvclNjYWxlIixvZSs9QmcoZy5jbWluKSxnLmNtaWQmJihvZSs9QmcoZy5jbWlkKSksb2UrPUJnKGcuY21heCksb2UrPWdmKGcuY21pbi5jb2xvciksZy5jbWlkJiYob2UrPWdmKGcuY21pZC5jb2xvcikpLG9lPXpyKCJj''@;'; put 'put ''b2xvclNjYWxlIixvZSs9Z2YoZy5jbWF4LmNvbG9yKSx7fSk7YnJlYWs7Y2FzZSJiYXIiOmRlLnR5cGU9ImRhdGFCYXIiLG9lKz1CZyhnLmNtaW4pLG9lKz1CZyhnLmNtYXgpLG9lPXpyKCJkYXRhQmFyIixvZSs9Z2YoZy5jb2xvcikse30pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgY29uc29sZS5s''@;'; put 'put ''b2coZyksIkNGIG1pc3NpbmcgdHlwZSAiK2cudH1yZXR1cm4nPGNvbmRpdGlvbmFsRm9ybWF0dGluZyBzcXJlZj0iJytXKyciPicrenIoImNmUnVsZSIsIiI9PW9lP251bGw6b2UsZGUpKyI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4ifSh3LFYseCl9KS5qb2luKCIiKX0oZGVbIiFjb25kZm10''@;'; put 'put ''Il0seCkpLGRlWyIhdmFsaWRhdGlvbnMiXSYmKFdbVy5sZW5ndGhdPWZ1bmN0aW9uIElXKGcpe2lmKCFnfHwwPT1nLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHg9W10sdz0wLFY9MDtWPGcubGVuZ3RoOysrVil7dmFyIFc9Z1tWXSxlZT1kYltXLnRdO2lmKFcucmVmJiYoInN0cmluZyIhPXR5''@;'; put 'put ''cGVvZiBXLnJlZnx8LTEhPVcucmVmLmluZGV4T2YoIiAiKXx8KFcucmVmPVNhKFcucmVmKSxXLnJlZi5zJiYhKFcucmVmLnMuYzwwKSkpKXsrK3c7dmFyIGxlPXt0eXBlOmVlLGFsbG93Qmxhbms6KygwIT1XLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9Vy5pbnB1dCksc2hvd0Vycm9y''@;'; put 'put ''TWVzc2FnZTorKDAhPVcuZXJyb3IpLHNxcmVmOiJzdHJpbmciPT10eXBlb2YgVy5yZWY/Vy5yZWY6SmkoVy5yZWYpfTtpZihXLmlucHV0JiYoVy5pbnB1dC50aXRsZSYmKGxlLnByb21wdFRpdGxlPVVpKFcuaW5wdXQudGl0bGUpKSxXLmlucHV0Lm1lc3NhZ2UmJihsZS5wcm9tcHQ9VWkoVy5p''@;'; put 'put ''bnB1dC5tZXNzYWdlKSkpLFcuZXJyb3ImJihXLmVycm9yLnRpdGxlJiYobGUuZXJyb3JUaXRsZT1VaShXLmVycm9yLnRpdGxlKSksVy5lcnJvci5tZXNzYWdlJiYobGUuZXJyb3I9VWkoVy5lcnJvci5tZXNzYWdlKSksVy5lcnJvci5zdHlsZSYmKGxlLmVycm9yU3R5bGU9Vy5lcnJvci5zdHls''@;'; put 'put ''ZSkpLCFlZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1cudCk7dmFyIG9lPSIiO3N3aXRjaChXLnQpe2Nhc2UiQW55IjpicmVhaztjYXNlIkxpc3QiOmNhc2UiQ3VzdG9tIjppZihXLmwpe2lmKFcubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkRWIGxlbmd0aCA+IDI1MCB0cmlnZ2VycyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO29lPSc8Zm9ybXVsYTE+Iicrb2koVy5sLmpvaW4oIiwiKSkrJyI8L2Zvcm11bGExPid9ZWxzZSBvZT0iPGZvcm11bGExPiIrb2ko''@;'; put 'put ''Vy5mKSsiPC9mb3JtdWxhMT4iO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJUaW1lIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZighWW1bVy5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitXLm9wKyIgZm9yICIrVy50KTtpZihs''@;'; put 'put ''ZS5vcGVyYXRvcj1ZbVtXLm9wXSxudWxsIT1XLnYpb2U9Ijxmb3JtdWxhMT4iK29pKFN0cmluZyhXLnYgaW5zdGFuY2VvZiBEYXRlP1llKFcudik6Vy52KSkrIjwvZm9ybXVsYTE+IjtlbHNle2lmKG51bGw9PVcubWlufHxudWxsPT1XLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZh''@;'; put 'put ''bGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK1cudCk7b2U9Ijxmb3JtdWxhMT4iK29pKFN0cmluZyhXLm1pbiBpbnN0YW5jZW9mIERhdGU/WWUoVy5taW4pOlcubWluKSkrIjwvZm9ybXVsYTE+PGZvcm11bGEyPiIrb2koU3RyaW5nKFcubWF4IGluc3Rh''@;'; put 'put ''bmNlb2YgRGF0ZT9ZZShXLm1heCk6Vy5tYXgpKSsiPC9mb3JtdWxhMj4ifX14LnB1c2goenIoImRhdGFWYWxpZGF0aW9uIixvZXx8bnVsbCxsZSkpfX1yZXR1cm4gdz4wPyc8ZGF0YVZhbGlkYXRpb25zIGNvdW50PSInK3crJyI+Jyt4LmpvaW4oIiIpKyI8L2RhdGFWYWxpZGF0aW9ucz4iOiIi''@;'; put 'put ''fShkZVsiIXZhbGlkYXRpb25zIl0pKTt2YXIgUnQsZnQ9LTEsU3Q9LTE7aWYoZGVbIiFsaW5rcyJdLmxlbmd0aD4wJiYoV1tXLmxlbmd0aF09IjxoeXBlcmxpbmtzPiIsZGVbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24obW4pe21uWzFdLlRhcmdldCYmKFJ0PXtyZWY6bW5bMF19LCIjIiE9''@;'; put 'put ''bW5bMV0uVGFyZ2V0LmNoYXJBdCgwKSYmKFN0PSRzKFYsLTEsb2kobW5bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIikseWEuSExJTkspLFJ0WyJyOmlkIl09InJJZCIrU3QpLChmdD1tblsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKFJ0LmxvY2F0aW9uPW9pKG1uWzFdLlRhcmdl''@;'; put 'put ''dC5zbGljZShmdCsxKSkpLG1uWzFdLlRvb2x0aXAmJihSdC50b29sdGlwPW9pKG1uWzFdLlRvb2x0aXApKSxXW1cubGVuZ3RoXT16cigiaHlwZXJsaW5rIixudWxsLFJ0KSl9KSxXW1cubGVuZ3RoXT0iPC9oeXBlcmxpbmtzPiIpLGRlbGV0ZSBkZVsiIWxpbmtzIl0sR2Upe3ZhciBBdD1mdW5j''@;'; put 'put ''dGlvbiBuc2UoZyl7aWYoZy5wcm9wcyl7dmFyIHg9e30sdz1nLnByb3BzO3JldHVybiB3LmdyaWRsaW5lcyYmKHguZ3JpZExpbmVzPXguZ3JpZExpbmVzU2V0PTEpLHcuaGVhZGluZ3MmJih4LmhlYWRpbmdzPTEpLHcuY2VudGVyWCYmKHguaG9yaXpvbnRhbENlbnRlcmVkPTEpLHcuY2VudGVy''@;'; put 'put ''WSYmKHgudmVydGljYWxDZW50ZXJlZD0xKSx6cigicHJpbnRPcHRpb25zIixudWxsLHgpfXJldHVybiIifShHZSk7QXQubGVuZ3RoJiYoV1tXLmxlbmd0aF09QXQpfWlmKChudWxsIT1kZVsiIW1hcmdpbnMiXXx8R2UmJkdlLm1hcmdpbnMpJiYoV1tXLmxlbmd0aF09ZnVuY3Rpb24gcnNlKGcp''@;'; put 'put ''e3JldHVybiBSMyhnKSx6cigicGFnZU1hcmdpbnMiLG51bGwsZyl9KGRlWyIhbWFyZ2lucyJdfHxHZS5tYXJnaW5zKSksR2Upe3ZhciB6dD1mdW5jdGlvbiBlc2UoZyl7aWYoZy5wcm9wcyl7dmFyIHg9e30sdz1nLnByb3BzO2lmKHcub3JpZW50YXRpb24mJih4Lm9yaWVudGF0aW9uPXcub3Jp''@;'; put 'put ''ZW50YXRpb24pLHcuc2NhbGUmJih4LnNjYWxlPXcuc2NhbGUpLHcuZml0JiYobnVsbCE9dy5maXQuaGVpZ2h0JiYoeC5maXRUb0hlaWdodD13LmZpdC5oZWlnaHQpLG51bGwhPXcuZml0LndpZHRoJiYoeC5maXRUb1dpZHRoPXcuZml0LndpZHRoKSksdy5kcGkmJih4Lmhvcml6b250YWxEcGk9''@;'; put 'put ''eC52ZXJ0aWNhbERwaT13LmRwaSksbnVsbCE9dy5maXJzdCYmKHguZmlyc3RQYWdlTnVtYmVyPXcuZmlyc3QseC51c2VGaXJzdFBhZ2VOdW1iZXI9MSksdy5idyYmKHguYmxhY2tBbmRXaGl0ZT0xKSx3LmRyYWZ0JiYoeC5kcmFmdD0xKSx3LmNvbW1lbnRzJiYoeC5jZWxsQ29tbWVudHM9TDNb''@;'; put 'put ''dy5jb21tZW50c118fCJub25lIiksdy5lcnJvcnMmJih4LmVycm9ycz1NTFt3LmVycm9yc118fCJub25lIiksdy5wYXBlcilzd2l0Y2godHlwZW9mIHcucGFwZXIpe2Nhc2UibnVtYmVyIjp4LnBhcGVyU2l6ZT13LnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjpLTVt3LnBhcGVyXT94LnBhcGVy''@;'; put 'put ''U2l6ZT1LTVt3LnBhcGVyXTordy5wYXBlciYmKHgucGFwZXJTaXplPSt3LnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIXcucGFwZXIuaGVpZ2h0fHwhdy5wYXBlci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEiO3gucGFw''@;'; put 'put ''ZXJIZWlnaHQ9dy5wYXBlci5oZWlnaHQseC5wYXBlcldpZHRoPXcucGFwZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhPZih3Lm9yZGVyKT4tMSYmKHgucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSx6cigicGFnZVNldHVwIixudWxsLHgpfXJldHVybiIifShHZSk7''@;'; put 'put ''enQubGVuZ3RoJiYoV1tXLmxlbmd0aF09enQpLHp0PWZ1bmN0aW9uIHNzZShnKXt2YXIgeD1bXSx3PSIiLFY9IiIsVz0iIixlZT0iIixsZT0iIixvZT0iIixkZT0iIixEZT1tZihnLmhlYWRlcik7RGUubGVuZ3RoJiYoVj1EZVswXSxvZT1EZVsxXSxlZT1EZVsyXSk7dmFyIFJlPW1mKGcuZm9v''@;'; put 'put ''dGVyKTtyZXR1cm4gUmUubGVuZ3RoJiYoVz1SZVswXSxkZT1SZVsxXSxsZT1SZVsyXSksViYmeC5wdXNoKCI8b2RkSGVhZGVyPiIrb2koVikrIjwvb2RkSGVhZGVyPiIpLFcmJngucHVzaCgiPG9kZEZvb3Rlcj4iK29pKFcpKyI8L29kZEZvb3Rlcj4iKSwobGUhPVd8fGVlIT1WKSYmKHcrPScg''@;'; put 'put ''ZGlmZmVyZW50T2RkRXZlbj0iMSInLHgucHVzaCgiPGV2ZW5IZWFkZXI+IitvaShlZSkrIjwvZXZlbkhlYWRlcj4iKSx4LnB1c2goIjxldmVuRm9vdGVyPiIrb2kobGUpKyI8L2V2ZW5Gb290ZXI+IikpLChkZSE9V3x8b2UhPVYpJiYodys9JyBkaWZmZXJlbnRGaXJzdD0iMSInLHgucHVzaCgi''@;'; put 'put ''PGZpcnN0SGVhZGVyPiIrb2kob2UpKyI8L2ZpcnN0SGVhZGVyPiIpLHgucHVzaCgiPGZpcnN0Rm9vdGVyPiIrb2koZGUpKyI8L2ZpcnN0Rm9vdGVyPiIpKSx4Lmxlbmd0aD8iPGhlYWRlckZvb3RlciIrdysiPiIreC5qb2luKCIiKSsiPC9oZWFkZXJGb290ZXI+IjoiIn0oR2UpLHp0Lmxlbmd0''@;'; put 'put ''aCYmKFdbVy5sZW5ndGhdPXp0KX1pZigobnVsbCE9ZGVbIiFyb3dCcmVha3MiXXx8R2UmJkdlLnJvd0JyZWFrcykmJihXW1cubGVuZ3RoXT1mdW5jdGlvbiBUVyhnKXtpZigwPT1nLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHg9Wyc8cm93QnJlYWtzIGNvdW50PSInK2cubGVuZ3RoKyciIG1h''@;'; put 'put ''bnVhbEJyZWFrQ291bnQ9IicrZy5sZW5ndGgrJyI+J10sdz0wO3c8Zy5sZW5ndGg7Kyt3KXgucHVzaCgnPGJyayBpZD0iJytnW3ddLlIrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIHguam9pbigiIikrIjwvcm93QnJlYWtzPiJ9KGRlWyIhcm93QnJlYWtzIl18fEdlLnJvd0JyZWFrcykpLChudWxs''@;'; put 'put ''IT1kZVsiIWNvbEJyZWFrcyJdfHxHZSYmR2UuY29sQnJlYWtzKSYmKFdbVy5sZW5ndGhdPWZ1bmN0aW9uIGtXKGcpe2lmKDA9PWcubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgeD1bJzxjb2xCcmVha3MgY291bnQ9IicrZy5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytnLmxlbmd0aCsn''@;'; put 'put ''Ij4nXSx3PTA7dzxnLmxlbmd0aDsrK3cpeC5wdXNoKCc8YnJrIGlkPSInK2dbd10uQysnIiBtYW49IjEiLz4nKTtyZXR1cm4geC5qb2luKCIiKSsiPC9jb2xCcmVha3M+In0oZGVbIiFjb2xCcmVha3MiXXx8R2UuY29sQnJlYWtzKSksKCF4fHx4Lmlnbm9yZUVDfHxudWxsPT14Lmlnbm9yZUVD''@;'; put 'put ''KSYmKFdbVy5sZW5ndGhdPSRvKCJpZ25vcmVkRXJyb3JzIix6cigiaWdub3JlZEVycm9yIixudWxsLHtudW1iZXJTdG9yZWRBc1RleHQ6MSxzcXJlZjpEZX0pKSksZGVbIiFjaGFydHMiXSYmVmUucHVzaC5hcHBseShWZSxkZVsiIWNoYXJ0cyJdKSxkZVsiIWltYWdlcyJdJiZWZS5wdXNoLmFw''@;'; put 'put ''cGx5KFZlLGRlWyIhaW1hZ2VzIl0pLGRlWyIhc2hhcGVzIl0mJlZlLnB1c2guYXBwbHkoVmUsZGVbIiFzaGFwZXMiXSksVmUubGVuZ3RoPjAmJihTdD0kcyhWLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoZysxKSsiLnhtbCIseWEuRFJBVyksV1tXLmxlbmd0aF09enIoImRyYXdpbmciLG51''@;'; put 'put ''bGwseyJyOmlkIjoicklkIitTdH0pLGRlWyIhZHJhd2luZyJdPVZlKSwoZGVbIiFjb21tZW50cyJdLmxlbmd0aD4wfHwoZGVbIiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjApJiYoU3Q9JHMoViwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKGcrMSkrIi52bWwiLHlhLlZNTCksV1tXLmxl''@;'; put 'put ''bmd0aF09enIoImxlZ2FjeURyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitTdH0pLGRlWyIhbGVnYWN5Il09U3QpLGRlWyIhcHJpbnQiXSYmZGVbIiFwcmludCJdLmltYWdlcyl7dmFyIFNuPWRlWyIhcHJpbnQiXS5pbWFnZXMsbHI9MDtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24obW4pe1NuW21uXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKGRyKXtTblttbl1bZHJdJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oR24pe2lmKEFycmF5LmlzQXJyYXkoU25bbW5dW2RyXVtHbl0pKWZvcih2YXIgSG49''@;'; put 'put ''MDtIbjxTblttbl1bZHJdW0duXS5sZW5ndGg7KytIbilTblttbl1bZHJdW0duXVtIbl0mJihTblttbl1bZHJdW0duXVtIbl0uX2NudD1scisrKX0pfSl9KSxscj4wJiYoU3Q9JHMoViwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKGcrMSkrIkhGLnZtbCIseWEuVk1MKSxXW1cubGVuZ3Ro''@;'; put 'put ''XT16cigibGVnYWN5RHJhd2luZ0hGIixudWxsLHsicjppZCI6InJJZCIrU3R9KSxkZVsiIWxlZ2FjeUhGIl09U3QpfXJldHVybihkZVsiIXRhYmxlcyJdfHxbXSkubGVuZ3RoPjAmJihXW1cubGVuZ3RoXT0nPHRhYmxlUGFydHMgY291bnQ9IicrZGVbIiF0YWJsZXMiXS5sZW5ndGgrJyI+Jyxk''@;'; put 'put ''ZVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24obW4sZHIpe1N0PSRzKFYsLTEsIi4uL3RhYmxlcy90YWJsZSIrKGcrMSkrIl8iK2RyKyIueG1sIix5YS5UQUJMRSksV1tXLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytTdCsnIi8+J30pLFdbVy5sZW5ndGhdPSI8L3RhYmxlUGFy''@;'; put 'put ''dHM+IiksVy5sZW5ndGg+MSYmKFdbVy5sZW5ndGhdPSI8L3dvcmtzaGVldD4iLFdbMV09V1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksVy5qb2luKCIiKX1mdW5jdGlvbiBPTChnLHgsdyxWKXt2YXIgVz1mdW5jdGlvbiByOShnLHgsdyl7dmFyIFY9SHIoMTQ1KSxXPSh3WyIhcm93cyJdfHxbXSlb''@;'; put 'put ''Z118fHt9O1Yud3JpdGVfc2hpZnQoNCxnKSxWLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGVlPTMyMDtXLmhweD9lZT0yMCpFMyhXLmhweCk6Vy5ocHQmJihlZT0yMCpXLmhwdCksVi53cml0ZV9zaGlmdCgyLGVlKSxWLndyaXRlX3NoaWZ0KDEsMCk7dmFyIGxlPTA7Vy5sZXZlbCYmKGxlfD1XLmxl''@;'; put 'put ''dmVsKSxXLmhpZGRlbiYmKGxlfD0xNiksKFcuaHB4fHxXLmhwdCkmJihsZXw9MzIpLFYud3JpdGVfc2hpZnQoMSxsZSksVi53cml0ZV9zaGlmdCgxLDApO3ZhciBvZT0wLGRlPVYubDtWLmwrPTQ7Zm9yKHZhciBEZT17cjpnLGM6MH0sUmU9MDtSZTwxNjsrK1JlKWlmKCEoeC5zLmM+UmUrMTw8''@;'; put 'put ''MTB8fHguZS5jPFJlPDwxMCkpe2Zvcih2YXIgVmU9LTEsR2U9LTEsZXQ9UmU8PDEwO2V0PFJlKzE8PDEwOysrZXQpRGUuYz1ldCwoQXJyYXkuaXNBcnJheSh3KT8od1tEZS5yXXx8W10pW0RlLmNdOndbS3IoRGUpXSkmJihWZTwwJiYoVmU9ZXQpLEdlPWV0KTtWZTwwfHwoKytvZSxWLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsVmUpLFYud3JpdGVfc2hpZnQoNCxHZSkpfXZhciBKZT1WLmw7cmV0dXJuIFYubD1kZSxWLndyaXRlX3NoaWZ0KDQsb2UpLFYubD1KZSxWLmxlbmd0aD5WLmw/Vi5zbGljZSgwLFYubCk6Vn0oVix3LHgpOyhXLmxlbmd0aD4xN3x8KHhbIiFyb3dzIl18fFtdKVtWXSkmJnV0KGcs''@;'; put 'put ''IkJydFJvd0hkciIsVyl9dmFyIE5XPW5oLFZXPU9wO2Z1bmN0aW9uIE5MKGcpe3JldHVybltvbyhnKSxObChnKSwibiJdfXZhciB6TD1uaCxmc2U9T3AsWkw9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSxhOT1bIkFueSIsIldob2xlIiwiRGVjaW1h''@;'; put 'put ''bCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLEJ4PVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJdO2Z1bmN0aW9uIGp4KGcpe3ZhciB4PUhyKDQpLHc9W3hdLFY9YTkuaW5kZXhPZihnLnQpO2lmKFY8MCl0aHJvdyBuZXcgRXJyb3IoIkJh''@;'; put 'put ''ZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK2cudCk7dmFyIGVlPUJ4LmluZGV4T2YoZy5vcCk7c3dpdGNoKFYpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA3OmVlPTA7YnJlYWs7ZGVmYXVsdDppZigtMT09ZWUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUg''@;'; put 'put ''IitnLm9wKyIgZm9yICIrZy50KX14LndyaXRlX3NoaWZ0KDEsMHxWKSx4LndyaXRlX3NoaWZ0KDEsMSkseC53cml0ZV9zaGlmdCgxLDEyfGVlPDw0KSx4LndyaXRlX3NoaWZ0KDEsMCksdy5wdXNoKGZ1bmN0aW9uIEo4KGcpe3ZhciB4PWcuc3BsaXQoL1xzKixccyovKSx3PUhyKDQpO3cud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCx4Lmxlbmd0aCk7dmFyIFY9W3ddO3JldHVybiB4LmZvckVhY2goZnVuY3Rpb24oVyl7Vi5wdXNoKE9wKFNhKFcpKSl9KSxMKFYpfSgic3RyaW5nIj09dHlwZW9mIGcucmVmP2cucmVmOkppKGcucmVmKSkpO3ZhciBsZT1IcigxNik7bGUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3''@;'; put 'put ''Mjk1KSxsZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGxlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksbGUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSx3LnB1c2gobGUpO3ZhciBvZT1Icig4KTtvZS53cml0ZV9zaGlmdCg0LDApLG9lLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGRlPTE7''@;'; put 'put ''c3dpdGNoKGcudCl7Y2FzZSJBbnkiOncucHVzaChvZSksdy5wdXNoKG9lKTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZihudWxsIT1nLnZ8fG51bGwhPWcuZil3LnB1c2goIm51bWJlciI9PXR5cGVvZiBnLnY/TXgoZy52KTpiZihudWxsPT1nLnY/Zy5m''@;'; put 'put ''OmcudikpO2Vsc2V7aWYobnVsbD09Zy5taW58fG51bGw9PWcubWF4KXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrZy50O3cucHVzaCgibnVtYmVyIj09dHlwZW9mIGcubWluP014KGcubWluKTpiZihnLm1p''@;'; put 'put ''bikpLHcucHVzaCgibnVtYmVyIj09dHlwZW9mIGcubWF4P014KGcubWF4KTpiZihnLm1heCkpLGRlPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihudWxsIT1nLmwpe3cucHVzaChvYihnLmwuam9pbigiLCIpKSk7YnJlYWt9Y2FzZSJDdXN0b20iOmlmKCJudWxsIiE9Zy5mKXt3LnB1c2goYmYoZy5m''@;'; put 'put ''KSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgZmAiKygiTGlzdCI9PWcudD8iIG9yIGBsYCI6IiIpKyIgcmVxdWlyZWQgZm9yIFR5cGUgIitnLnQ7ZGVmYXVsdDp0aHJvdyJYTFNCIGRvZXMgbm90IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitnLnR9''@;'; put 'put ''cmV0dXJuIDE9PWRlJiZ3LnB1c2gob2UpLEwodyl9ZnVuY3Rpb24gengoZyx4LHcsVixXLGVlLGxlKXtpZih2b2lkIDA9PT14LnYmJm51bGw9PXguc3x8InoiPT09eC50JiYhVy5zaGVldFN0dWJzKXJldHVybiExO3ZhciBvZT0iIjtzd2l0Y2goeC50KXtjYXNlImIiOm9lPXgudj8iMSI6IjAi''@;'; put 'put ''O2JyZWFrO2Nhc2UiZCI6KHg9cm4oeCkpLno9eC56fHxiLl90YWJsZVsxNF0seC52PVllKExlKHgudikpLHgudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOm9lPSIiK3gudjticmVhaztkZWZhdWx0Om9lPXgudn12YXIgZGU9e3I6dyxjOlZ9O3N3aXRjaChkZS5zPXkxKFcuY2VsbFhmcyxX''@;'; put 'put ''LmNlbGxTdHlsZVhmcyx4LFcpLHgubCYmZWVbIiFsaW5rcyJdLnB1c2goW0tyKGRlKSx4LmxdKSx4LmMmJmVlWyIhY29tbWVudHMiXS5wdXNoKFtLcihkZSkseC5jXSkseC50KXtjYXNlInMiOmNhc2Uic3RyIjppZihXLmJvb2tTU1Qpe2lmKG9lPVE3KFcuU3RyaW5ncyx4LnYseC5SP3gucj15''@;'; put 'put ''Nyh4LlIpOm51bGwsVy5yZXZTdHJpbmdzKSx4LlIpZm9yKHZhciBEZT0wO0RlPHguUi5sZW5ndGg7KytEZSl4LlJbRGVdLnMmJnkxKFcuY2VsbFhmcyxXLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6eC5SW0RlXS5zfSxXKTtkZS50PSJzIixkZS52PW9lLGxlP3V0KGcsIkJydFNob3J0SXNz''@;'; put 'put ''dCIsZnVuY3Rpb24gJFcoZyx4LHcpe3JldHVybiBudWxsPT13JiYodz1Icig4KSksdG8oeCx3KSx3LndyaXRlX3NoaWZ0KDQseC52KSx3fSgwLGRlKSk6dXQoZywiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIGk5KGcseCx3KXtyZXR1cm4gbnVsbD09dyYmKHc9SHIoMTIpKSxZdSh4LHcpLHcud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCx4LnYpLHd9KDAsZGUpKX1lbHNlIGRlLnQ9InN0ciIsbGU/dXQoZywiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gdXNlKGcseCx3KXtyZXR1cm4gbnVsbD09dyYmKHc9SHIoOCs0Kmcudi5sZW5ndGgpKSx0byh4LHcpLGtjKGcudix3KSx3Lmxlbmd0aD53Lmw/dy5zbGljZSgwLHcu''@;'; put 'put ''bCk6d30oeCxkZSkpOnV0KGcsIkJydENlbGxTdCIsZnVuY3Rpb24gd2YoZyx4LHcpe3JldHVybiBudWxsPT13JiYodz1IcigxMis0Kmcudi5sZW5ndGgpKSxZdSh4LHcpLGtjKGcudix3KSx3Lmxlbmd0aD53Lmw/dy5zbGljZSgwLHcubCk6d30oeCxkZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0''@;'; put 'put ''dXJuIHgudj09KDB8eC52KSYmeC52Pi0xZTMmJngudjwxZTM/bGU/dXQoZywiQnJ0U2hvcnRSayIsZnVuY3Rpb24gVkwoZyx4LHcpe3JldHVybiBudWxsPT13JiYodz1Icig4KSksdG8oeCx3KSxMcChnLnYsdyksd30oeCxkZSkpOnV0KGcsIkJydENlbGxSayIsZnVuY3Rpb24gTngoZyx4LHcp''@;'; put 'put ''e3JldHVybiBudWxsPT13JiYodz1IcigxMikpLFl1KHgsdyksTHAoZy52LHcpLHd9KHgsZGUpKTpsZT91dChnLCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIHFXKGcseCx3KXtyZXR1cm4gbnVsbD09dyYmKHc9SHIoMTIpKSx0byh4LHcpLEt1KGcudix3KSx3fSh4LGRlKSk6dXQoZywiQnJ0Q2Vs''@;'; put 'put ''bFJlYWwiLGZ1bmN0aW9uIFhXKGcseCx3KXtyZXR1cm4gbnVsbD09dyYmKHc9SHIoMTYpKSxZdSh4LHcpLEt1KGcudix3KSx3fSh4LGRlKSksITA7Y2FzZSJiIjpyZXR1cm4gZGUudD0iYiIsbGU/dXQoZywiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiBaVyhnLHgsdyl7cmV0dXJuIG51bGw9PXcm''@;'; put 'put ''Jih3PUhyKDUpKSx0byh4LHcpLHcud3JpdGVfc2hpZnQoMSxnLnY/MTowKSx3fSh4LGRlKSk6dXQoZywiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIFVXKGcseCx3KXtyZXR1cm4gbnVsbD09dyYmKHc9SHIoOSkpLFl1KHgsdyksdy53cml0ZV9zaGlmdCgxLGcudj8xOjApLHd9KHgsZGUpKSwhMDtj''@;'; put 'put ''YXNlImUiOnJldHVybiBkZS50PSJlIixsZT91dChnLCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiBsc2UoZyx4LHcpe3JldHVybiBudWxsPT13JiYodz1Icig4KSksdG8oeCx3KSx3LndyaXRlX3NoaWZ0KDEsZy52KSx3LndyaXRlX3NoaWZ0KDIsMCksdy53cml0ZV9zaGlmdCgxLDApLHd9KHgs''@;'; put 'put ''ZGUpKTp1dChnLCJCcnRDZWxsRXJyb3IiLGZ1bmN0aW9uIEdXKGcseCx3KXtyZXR1cm4gbnVsbD09dyYmKHc9SHIoOSkpLFl1KHgsdyksdy53cml0ZV9zaGlmdCgxLGcudiksd30oeCxkZSkpLCEwfXJldHVybiBsZT91dChnLCJCcnRTaG9ydEJsYW5rIixmdW5jdGlvbiBGTChnLHgsdyl7cmV0''@;'; put 'put ''dXJuIG51bGw9PXcmJih3PUhyKDQpKSx0byh4LHcpfSgwLGRlKSk6dXQoZywiQnJ0Q2VsbEJsYW5rIixmdW5jdGlvbiBqVyhnLHgsdyl7cmV0dXJuIG51bGw9PXcmJih3PUhyKDgpKSxZdSh4LHcpfSgwLGRlKSksITB9ZnVuY3Rpb24gcFooZyx4LHcsVil7dmFyIFc9Q3QoKSxlZT13LlNoZWV0''@;'; put 'put ''TmFtZXNbZ10sbGU9dy5TaGVldHNbZWVdfHx7fSxvZT1lZTt0cnl7dyYmdy5Xb3JrYm9vayYmKG9lPXcuV29ya2Jvb2suU2hlZXRzW2ddLkNvZGVOYW1lfHxvZSl9Y2F0Y2h7fXZhciBkZT1TYShsZVsiIXJlZiJdfHwiQTEiKTtpZihkZS5lLmM+MTYzODN8fGRlLmUucj4xMDQ4NTc1KXtpZih4''@;'; put 'put ''LldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKGxlWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO2RlLmUuYz1NYXRoLm1pbihkZS5lLmMsMTYzODMpLGRlLmUucj1NYXRoLm1pbihkZS5lLmMsMTA0ODU3NSl9cmV0dXJuIGxlWyIhbGlu''@;'; put 'put ''a3MiXT1bXSxsZVsiIWNvbW1lbnRzIl09W10sdXQoVywiQnJ0QmVnaW5TaGVldCIpLCh3LnZiYXJhd3x8bGVbIiFvdXRsaW5lIl0pJiZ1dChXLCJCcnRXc1Byb3AiLGZ1bmN0aW9uIEttKGcseCx3KXtudWxsPT13JiYodz1Icig4NCs0KmcubGVuZ3RoKSk7dmFyIFY9MTkyO3gmJih4LmFib3Zl''@;'; put 'put ''JiYoViY9LTY1KSx4LmxlZnQmJihWJj0tMTI5KSksdy53cml0ZV9zaGlmdCgxLFYpO2Zvcih2YXIgVz0xO1c8MzsrK1cpdy53cml0ZV9zaGlmdCgxLDApO3JldHVybiBfZyh7YXV0bzoxfSx3KSx3LndyaXRlX3NoaWZ0KC00LC0xKSx3LndyaXRlX3NoaWZ0KC00LC0xKSxzMShnLHcpLHcuc2xp''@;'; put 'put ''Y2UoMCx3LmwpfShvZSxsZVsiIW91dGxpbmUiXSkpLHV0KFcsIkJydFdzRGltIixWVyhkZSkpLGZ1bmN0aW9uIGhaKGcseCx3KXt1dChnLCJCcnRCZWdpbldzVmlld3MiKSx1dChnLCJCcnRCZWdpbldzVmlldyIsZnVuY3Rpb24gbFooZyx4LHcpe251bGw9PXcmJih3PUhyKDMwKSk7dmFyIFY9''@;'; put 'put ''OTI0O3JldHVybigoKHh8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiYoVnw9MzIpLEx0KGdbIiFncmlkbGluZXMiXSkmJihWJj0tNSksTHQoKCgoeHx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5ncmlkKSYmKFYmPS01KSx3LndyaXRlX3NoaWZ0KDIsViksdy53cml0ZV9zaGlmdCg0LDAp''@;'; put 'put ''LHcud3JpdGVfc2hpZnQoNCwwKSx3LndyaXRlX3NoaWZ0KDQsMCksdy53cml0ZV9zaGlmdCgxLDApLHcud3JpdGVfc2hpZnQoMSwwKSx3LndyaXRlX3NoaWZ0KDIsMCksdy53cml0ZV9zaGlmdCgyLDEwMCksdy53cml0ZV9zaGlmdCgyLDApLHcud3JpdGVfc2hpZnQoMiwwKSx3LndyaXRlX3No''@;'; put 'put ''aWZ0KDIsMCksdy53cml0ZV9zaGlmdCg0LDApLHd9KHgsdykpLHhbIiFmcmVlemUiXSYmdXQoZywiQnJ0UGFuZSIsZnVuY3Rpb24gblooZyl7dmFyIHg9eGEoZ1siIWZyZWV6ZSJdKSx3PUhyKDI5KTtyZXR1cm4gdy53cml0ZV9zaGlmdCg4LHguYywiZiIpLHcud3JpdGVfc2hpZnQoOCx4LnIs''@;'; put 'put ''ImYiKSx3LndyaXRlX3NoaWZ0KDQseC5yKSx3LndyaXRlX3NoaWZ0KDQseC5jKSx3LndyaXRlX3NoaWZ0KDQsMCksdy53cml0ZV9zaGlmdCgxLDMpLHd9KHgpKSx4WyIhc2VsIl0mJnV0KGcsIkJydFNlbCIsZnVuY3Rpb24gczIoZyx4KXt2YXIgdz1IcigzNiksVj1nLmNlbGw7aWYoIVYpe2lm''@;'; put 'put ''KCFnLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtWPUtyKHdyKGcucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFc9InN0cmluZyI9PXR5cGVvZiBWP3hhKFYpOlY7aWYoeCl7dmFyIGVlPSJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgeD94YSh4KTp4O3cud3JpdGVfc2hpZnQoNCxXLnI+PWVlLnImJlcuYz49ZWUuYz8wOlcucj49ZWUuciYmVy5jPGVlLmM/MjpXLnI8ZWUuciYmVy5jPj1lZS5jPzE6Myl9ZWxzZSB3LndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIHcud3JpdGVfc2hpZnQoNCxXLnIpLHcud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxXLmMpLHcud3JpdGVfc2hpZnQoNCwwKSx3LndyaXRlX3NoaWZ0KDQsMSksdy53cml0ZV9zaGlmdCg0LFcuciksdy53cml0ZV9zaGlmdCg0LFcuciksdy53cml0ZV9zaGlmdCg0LFcuYyksdy53cml0ZV9zaGlmdCg0LFcuYyksd30oeFsiIXNlbCJdLHhbIiFmcmVlemUiXSkpLHV0KGcs''@;'; put 'put ''IkJydEVuZFdzVmlldyIpLHV0KGcsIkJydEVuZFdzVmlld3MiKX0oVyxsZSx3Lldvcmtib29rKSxmdW5jdGlvbiB2YihnLHgpeyF4fHwheFsiIWNvbHMiXXx8KHV0KGcsIkJydEJlZ2luQ29sSW5mb3MiKSx4WyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24odyxWKXt3JiZ1dChnLCJCcnRDb2xJ''@;'; put 'put ''bmZvIixmdW5jdGlvbiBhWihnLHgsdyl7bnVsbD09dyYmKHc9SHIoMTgpKTt2YXIgVj1zYihnLHgpO3cud3JpdGVfc2hpZnQoLTQsZyksdy53cml0ZV9zaGlmdCgtNCxnKSx3LndyaXRlX3NoaWZ0KDQsMjU2KihWLndpZHRofHwxMCkpLHcud3JpdGVfc2hpZnQoNCwwKTt2YXIgVz0wO3JldHVy''@;'; put 'put ''biB4LmhpZGRlbiYmKFd8PTEpLCJudW1iZXIiPT10eXBlb2YgVi53aWR0aCYmKFd8PTIpLHgubGV2ZWwmJihXfD14LmxldmVsPDw4KSx3LndyaXRlX3NoaWZ0KDIsVyksd30oVix3KSl9KSx1dChnLCJCcnRFbmRDb2xJbmZvcyIpKX0oVyxsZSksZnVuY3Rpb24gYWUoZyx4LHcsVil7dmFyIFc9''@;'; put 'put ''U2EoeFsiIXJlZiJdfHwiQTEiKSxsZT0iIixvZT1bXTt1dChnLCJCcnRCZWdpblNoZWV0RGF0YSIpO3ZhciBkZT1BcnJheS5pc0FycmF5KHgpLERlPVcuZS5yO3hbIiFyb3dzIl0mJihEZT1NYXRoLm1heChXLmUucix4WyIhcm93cyJdLmxlbmd0aC0xKSk7Zm9yKHZhciBSZT1XLnMucjtSZTw9''@;'; put 'put ''RGU7KytSZSl7bGU9em4oUmUpLE9MKGcseCxXLFJlKTt2YXIgVmU9ITE7aWYoUmU8PVcuZS5yKWZvcih2YXIgR2U9Vy5zLmM7R2U8PVcuZS5jOysrR2Upe1JlPT09Vy5zLnImJihvZVtHZV09UGEoR2UpKTt2YXIgZXQ9ZGU/KHhbUmVdfHxbXSlbR2VdOnhbb2VbR2VdK2xlXTtWZT0hIWV0JiZ6''@;'; put 'put ''eChnLGV0LFJlLEdlLFYseCxWZSl9fXV0KGcsIkJydEVuZFNoZWV0RGF0YSIpfShXLGxlLDAseCksZnVuY3Rpb24gWEwoZyx4KXt4WyIhcHJvdGVjdCJdJiZ1dChnLCJCcnRTaGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIHVaKGcseCl7cmV0dXJuIG51bGw9PXgmJih4PUhyKDY2KSkseC53cml0''@;'; put 'put ''ZV9zaGlmdCgyLGcucGFzc3dvcmQ/SU0oZy5wYXNzd29yZCk6MCkseC53cml0ZV9zaGlmdCg0LDEpLFtbIm9iamVjdHMiLCExXSxbInNjZW5hcmlvcyIsITFdLFsiZm9ybWF0Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEwXSxbImZvcm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMi''@;'; put 'put ''LCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMiLCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxbInNlbGVjdExvY2tlZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRvRmlsdGVyIiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2Vs''@;'; put 'put ''ZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3gud3JpdGVfc2hpZnQoNCx3WzFdP251bGw9PWdbd1swXV18fGdbd1swXV0/MDoxOm51bGwhPWdbd1swXV0mJmdbd1swXV0/MDoxKX0pLHh9KHhbIiFwcm90ZWN0Il0pKX0oVyxsZSksZnVuY3Rpb24gV3goZyx4LHcs''@;'; put 'put ''Vil7aWYoeFsiIWF1dG9maWx0ZXIiXSl7dmFyIFc9eFsiIWF1dG9maWx0ZXIiXSxlZT0ic3RyaW5nIj09dHlwZW9mIFcucmVmP1cucmVmOkppKFcucmVmKTt3Lldvcmtib29rfHwody5Xb3JrYm9vaz17U2hlZXRzOltdfSksdy5Xb3JrYm9vay5OYW1lc3x8KHcuV29ya2Jvb2suTmFtZXM9W10p''@;'; put 'put ''O3ZhciBsZT13Lldvcmtib29rLk5hbWVzLG9lPXdyKGVlKTtvZS5zLnI9PW9lLmUuciYmKG9lLmUucj13cih4WyIhcmVmIl0pLmUucixlZT1KaShvZSkpO2Zvcih2YXIgZGU9MDtkZTxsZS5sZW5ndGg7KytkZSl7dmFyIERlPWxlW2RlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09RGUu''@;'; put 'put ''TmFtZSYmRGUuU2hlZXQ9PVYpe0RlLlJlZj0iJyIrdy5TaGVldE5hbWVzW1ZdKyInISIrZWU7YnJlYWt9fWRlPT1sZS5sZW5ndGgmJmxlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6VixSZWY6IiciK3cuU2hlZXROYW1lc1tWXSsiJyEiK2VlfSksdXQoZywiQnJ0''@;'; put 'put ''QmVnaW5BRmlsdGVyIixPcChTYShlZSkpKSx1dChnLCJCcnRFbmRBRmlsdGVyIil9fShXLGxlLHcsZyksZnVuY3Rpb24gJEwoZyx4KXsheHx8IXhbIiFtZXJnZXMiXXx8KHV0KGcsIkJydEJlZ2luTWVyZ2VDZWxscyIsZnVuY3Rpb24gZVooZyx4KXtyZXR1cm4gbnVsbD09eCYmKHg9SHIoNCkp''@;'; put 'put ''LHgud3JpdGVfc2hpZnQoNCxnKSx4fSh4WyIhbWVyZ2VzIl0ubGVuZ3RoKSkseFsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24odyl7dXQoZywiQnJ0TWVyZ2VDZWxsIixmc2UodykpfSksdXQoZywiQnJ0RW5kTWVyZ2VDZWxscyIpKX0oVyxsZSksZnVuY3Rpb24gZlooZyx4KXtpZih4KXt1''@;'; put 'put ''dChnLCJCcnRCZWdpbkRWYWxzIixmdW5jdGlvbiBPbyhnLHgpe251bGw9PXgmJih4PUhyKDE4KSkseC53cml0ZV9zaGlmdCgyLDApLHgud3JpdGVfc2hpZnQoNCwwKSx4LndyaXRlX3NoaWZ0KDQsMCkseC53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgdz0wLFY9MDtWPGcubGVuZ3RoOysrViko''@;'; put 'put ''KGdbVl18fHt9KS5yZWZ8fHt9KS5zJiZnW1ZdLnJlZi5zLmM8MHx8Kyt3O3JldHVybiB4LndyaXRlX3NoaWZ0KDQsdykseH0oeCkpO2Zvcih2YXIgdz0wO3c8eC5sZW5ndGg7Kyt3KSgoeFt3XXx8e30pLnJlZnx8e30pLnMmJnhbd10ucmVmLnMuYzwwfHx1dChnLCJCcnREVmFsIixqeCh4W3dd''@;'; put 'put ''KSk7dXQoZywiQnJ0RW5kRFZhbHMiKX19KFcsbGVbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiBLTChnLHgsdyl7eFsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihWKXtpZihWWzFdLlRhcmdldCl7dmFyIFc9JHModywtMSxWWzFdLlRhcmdldC5yZXBsYWNlKC8jLiokLywiIikseWEuSExJ''@;'; put 'put ''TkspO3V0KGcsIkJydEhMaW5rIixmdW5jdGlvbiB0WihnLHgpe3ZhciB3PUhyKDUwKzQqKGdbMV0uVGFyZ2V0Lmxlbmd0aCsoZ1sxXS5Ub29sdGlwfHwiIikubGVuZ3RoKSk7T3Aoe3M6eGEoZ1swXSksZTp4YShnWzBdKX0sdyksTW8oInJJZCIreCx3KTt2YXIgVj1nWzFdLlRhcmdldC5pbmRl''@;'; put 'put ''eE9mKCIjIik7cmV0dXJuIGtjKCgtMT09Vj8iIjpnWzFdLlRhcmdldC5zbGljZShWKzEpKXx8IiIsdyksa2MoZ1sxXS5Ub29sdGlwfHwiIix3KSxrYygiIix3KSx3LnNsaWNlKDAsdy5sKX0oVixXKSl9fSksZGVsZXRlIHhbIiFsaW5rcyJdfShXLGxlLFYpLGxlWyIhbWFyZ2lucyJdJiZ1dChX''@;'; put 'put ''LCJCcnRNYXJnaW5zIixmdW5jdGlvbiBzWihnLHgpe3JldHVybiBudWxsPT14JiYoeD1Icig0OCkpLFIzKGcpLFpMLmZvckVhY2goZnVuY3Rpb24odyl7S3UoZ1t3XSx4KX0pLHh9KGxlWyIhbWFyZ2lucyJdKSksKCF4fHx4Lmlnbm9yZUVDfHxudWxsPT14Lmlnbm9yZUVDKSYmZnVuY3Rpb24g''@;'; put 'put ''VXgoZyx4KXsheHx8IXhbIiFyZWYiXXx8KHV0KGcsIkJydEJlZ2luQ2VsbElnbm9yZUVDcyIpLHV0KGcsIkJydENlbGxJZ25vcmVFQyIsZnVuY3Rpb24gY1ooZyl7dmFyIHg9SHIoMjQpO3JldHVybiB4LndyaXRlX3NoaWZ0KDQsNCkseC53cml0ZV9zaGlmdCg0LDEpLE9wKGcseCkseH0oU2Eo''@;'; put 'put ''eFsiIXJlZiJdKSkpLHV0KGcsIkJydEVuZENlbGxJZ25vcmVFQ3MiKSl9KFcsbGUpLGZ1bmN0aW9uIHliKGcseCx3LFYpe2lmKHhbIiFjb21tZW50cyJdLmxlbmd0aD4wKXt2YXIgVz0kcyhWLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisodysxKSsiLnZtbCIseWEuVk1MKTt1dChnLCJC''@;'; put 'put ''cnRMZWdhY3lEcmF3aW5nIixNbygicklkIitXKSkseFsiIWxlZ2FjeSJdPVd9fShXLGxlLGcsViksdXQoVywiQnJ0RW5kU2hlZXQiKSxXLmVuZCgpfWZ1bmN0aW9uIHFMKGcpe3ZhciBWLHg9W10sdz1nLm1hdGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KGcubWF0Y2goLzxjOnB0IGlkeD0iKFxkKiki''@;'; put 'put ''PiguKj8pPFwvYzpwdD4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihlZSl7dmFyIGxlPWVlLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7bGUmJih4WytsZVsxXV09dz8rbGVbMl06bGVbMl0pfSk7dmFyIFc9cXIoKGcubWF0Y2goLzxjOmZv''@;'; put 'put ''cm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oZy5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihlZSl7Vj1lZS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFt4LFcsVl19eWEuQ0hB''@;'; put 'put ''UlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnQiLHlhLkNIQVJURVg9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTQvcmVsYXRpb25zaGlwcy9jaGFydEV4Ijt2YXIgSkw9Lzwo''@;'; put 'put ''Pzpcdys6KT9jaGFydD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y2hhcnQ+Lyxnc2U9LzwoPzpcdys6KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxtWj0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sdlo9LzwoPzpcdys6''@;'; put 'put ''KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiB5WihnLHgsdyxWLFcsZWUsbGUsb2Upe3ZhciBkZT1lZXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIWcpcmV0dXJuIGVlO2xlJiZsZS5BbmNob3ImJihkZVsiIXBvcyJdPUY3KGxlLkFuY2hvcixvZSksZGVbIiFw''@;'; put 'put ''b3NUeXBlIl09bGUuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksZGVbIiFhYnNwb3MiXT1GNyhsZS5BbmNob3Isb2UpLGRlWyIhcmVscG9zIl09JF8obGUuQW5jaG9yLG9lKSksZGVbIiFwbG90Il09W107dmFyIERlPSIiLFJlPSIiLFZlPWcubWF0Y2goSkwpO1ZlPyhEZT1nLnNs''@;'; put 'put ''aWNlKDAsVmUuaW5kZXgpLFJlPWcuc2xpY2UoVmUuaW5kZXgrVmVbMF0ubGVuZ3RoKSk6RGU9UmU9Zzt2YXIgR2U9W10sZXQ9RGUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fGcubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fFJlLm1hdGNoKC88YzpsYW5nLio/Pi8pO3JldHVybiBldCYmKGRlWyIhbGFu''@;'; put 'put ''ZyJdPShmcihldFswXSl8fHt9KS52YWx8fCJlbi1VUyIpLFZlJiYoKEdlPVZlWzFdLm1hdGNoKHZaKSkmJmZ1bmN0aW9uIGdaKGcseCl7dmFyIHc9IiI7Zy5tYXRjaCgvPGM6cmljaD4vKSYmZy5yZXBsYWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+L2csZnVuY3Rpb24oVixXKXt3Kz1XfSks''@;'; put 'put ''eFsiIXRpdGxlIl09d3x8IkNoYXJ0IFRpdGxlIn0oR2VbMV0sZGUpLGZ1bmN0aW9uIFl4KGcseCl7aWYoZyl7dmFyIHc9MCxWPTAsVz0iQSIsZWU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07Zy5yZXBsYWNlKFp4LGZ1bmN0aW9uKGxlLG9lKXt2YXIgZGU9e3Q6b2UsYzp3LHc6MCxz''@;'; put 'put ''ZXI6W119LERlPVtdLFJlPShsZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxWZT1SZT9sZS5zbGljZSgwLFJlKTpsZTsic2NhdHRlciI9PW9lJiYoRGU9bGUubWF0Y2goLzxjOnNjYXR0ZXJTdHlsZShbXlwvPl0qKVwvPi9tKSkmJmZyKERlWzBdKSwiYmFyIj09b2UmJihEZT1sZS5tYXRj''@;'; put 'put ''aCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKGRlLmJhckRpcj0iYmFyIj09ZnIoRGVbMF0pLnZhbD8iaCI6InYiKSwoRGU9VmUubWF0Y2goLzxjOmdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYmKGRlLmdyb3VwaW5nPWZyKERlWzBdKS52YWx8fCJzdGFuZGFyZCIpLChsZS5tYXRjaChD''@;'; put 'put ''Zil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGV0KXt2YXIgYnQ9W10sSmU9e30sZnQ9W107aWYoZXQubWF0Y2goLzxjOnR4Pi8pKXt2YXIgUnQ9cUwoKGV0Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwvYzp0eD4vKXx8W10pWzFdfHwiIil8fFtdO1J0WzBdJiZSdFswXVswXSYmKEplLm5hbWU9''@;'; put 'put ''UnRbMF1bMF0pLFJ0WzJdJiYoSmUubmFtZXJlZj1SdFsyXSl9WyJ4VmFsIiwieVZhbCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1bmN0aW9uKFN0KXt2YXIgenQsQXQ9ZXQubWF0Y2gobmV3IFJlZ0V4cCgiPGM6IitTdCsiPltcXHNcXFNdKj88XFwvYzoiK1N0KyI+Iiwi''@;'; put 'put ''Z20iKSk7QXQmJigoQXRbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oU24pe3p0PVNuLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksKEF0WzBdLm1hdGNoKC88YzooPzpcdyopQ2FjaGU+W1xzXFNdKj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxb''@;'; put 'put ''XSkuZm9yRWFjaChmdW5jdGlvbihTbil7dmFyIGxyPXFMKFNuKTtlZS5zLnI9ZWUucy5jPTAsZWUuZS5jPXcsVz1QYSh3KSxsclswXS5mb3JFYWNoKGZ1bmN0aW9uKG1uLGRyKXt4W1crem4oZHIpXT17dDoibnVtYmVyIj09dHlwZW9mIG1uPyJuIjoicyIsdjptbix6OmxyWzFdfSxWPWRyfSks''@;'; put 'put ''ZWUuZS5yPFYmJihlZS5lLnI9ViksKyt3LGRlLncrKyxidC5wdXNoKFN0KSwobHJbMl18fHp0KSYmZnQucHVzaChsclsyXXx8enQpLCJ2YWwiPT1TdCYmKEplLno9bHJbMV18fCJHZW5lcmFsIil9KSl9KSwoRGU9bGUubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihKZS5zbW9v''@;'; put 'put ''dGg9bnVsbD09ZnIoRGVbMF0pLnZhbHx8SXIoZnIoRGVbMF0pLnZhbCkpLEplLmNvbHM9YnQsSmUucmFuZ2VzPWZ0LGRlLnNlci5wdXNoKEplKX0pLCJkb3VnaG51dCI9PW9lJiYoRGU9bGUubWF0Y2goLzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKGRlLmhvbGU9KGZyKERlWzBdKS52''@;'; put 'put ''YWx8fDEwKS8xMDApLHhbIiFwbG90Il0ucHVzaChkZSl9KSx3PjAmJih4WyIhcmVmIl09SmkoZWUpKX19KChWZVsxXS5tYXRjaChnc2UpfHxbXSlbMV0sZGUpLG51bGwhPShHZT1WZVsxXS5tYXRjaChtWikpJiZmdW5jdGlvbiBqMShnLHgpe3ZhciB3O3hbIiFsZWdlbmQiXT17cG9zOiJyIn0s''@;'; put 'put ''KHc9Zy5tYXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20pKSYmKHhbIiFsZWdlbmQiXS5wb3M9ZnIod1swXSkudmFsfHwiciIpfShHZVswXSxkZSkpLGRlfXZhciBaeD0vPGM6KCg/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3Vy''@;'; put 'put ''ZmFjZXxidWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10qPyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpP0NoYXJ0Pi9nbSxDZj0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4v''@;'; put 'put ''Z207eWEuQ1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVldCI7dmFyIF9aPXpyKCJjaGFydHNoZWV0IixudWxsLHt4bWxuczpSby5tYWluWzBdLCJ4bWxuczpyIjpSby5yfSk7ZnVuY3Rpb24gUUwo''@;'; put 'put ''Zyx4LHcsVil7dmFyIFc9W2tpLF9aXTtyZXR1cm4gVy5wdXNoKCI8c2hlZXRQci8+IiksVy5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21TY2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLFdbVy5sZW5ndGhdPXpyKCJk''@;'; put 'put ''cmF3aW5nIixudWxsLHsicjppZCI6InJJZDEifSksJHMoViwtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKGcrMSkrIi54bWwiLHlhLkRSQVcpLFcubGVuZ3RoPjImJihXW1cubGVuZ3RoXT0iPC9jaGFydHNoZWV0PiIsV1sxXT1XWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxXLmpvaW4oIiIpfWZ1''@;'; put 'put ''bmN0aW9uIGJaKCl7dmFyIGc9Q3QoKTtyZXR1cm4gdXQoZywiQnJ0QmVnaW5TaGVldCIpLHV0KGcsIkJydEVuZFNoZWV0IiksZy5lbmQoKX12YXIgS3g9W1siYWxsb3dSZWZyZXNoUXVlcnkiLCExLCJib29sIl0sWyJhdXRvQ29tcHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZp''@;'; put 'put ''bGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJdLFsiZGF0ZTE5MDQiLCExLCJib29sIl0sWyJkZWZhdWx0VGhlbWVWZXJzaW9uIiwwLCJpbnQiXSxbImZpbHRlclByaXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExp''@;'; put 'put ''c3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIsITEsImJvb2wiXSxbInJlZnJlc2hBbGxDb25uZWN0aW9ucyIsITEsImJvb2wiXSxbInNhdmVFeHRlcm5hbExpbmtWYWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxl''@;'; put 'put ''Y3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09iamVjdHMiLCJhbGwiXSxbInNob3dQaXZvdENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJdLFsidXBkYXRlTGlua3MiLCJ1c2VyU2V0Il1dLF9iPVtbImFjdGl2ZVRhYiIsMCwiaW50Il0s''@;'; put 'put ''WyJhdXRvRmlsdGVyRGF0ZUdyb3VwaW5nIiwhMCwiYm9vbCJdLFsiZmlyc3RTaGVldCIsMCwiaW50Il0sWyJtaW5pbWl6ZWQiLCExLCJib29sIl0sWyJzaG93SG9yaXpvbnRhbFNjcm9sbCIsITAsImJvb2wiXSxbInNob3dTaGVldFRhYnMiLCEwLCJib29sIl0sWyJzaG93VmVydGljYWxTY3Jv''@;'; put 'put ''bGwiLCEwLCJib29sIl0sWyJ0YWJSYXRpbyIsNjAwLCJpbnQiXSxbInZpc2liaWxpdHkiLCJ2aXNpYmxlIl1dLHdaPVtdLEptPVtbImNhbGNDb21wbGV0ZWQiLCJ0cnVlIl0sWyJjYWxjTW9kZSIsImF1dG8iXSxbImNhbGNPblNhdmUiLCJ0cnVlIl0sWyJjb25jdXJyZW50Q2FsYyIsInRydWUi''@;'; put 'put ''XSxbImZ1bGxDYWxjT25Mb2FkIiwiZmFsc2UiXSxbImZ1bGxQcmVjaXNpb24iLCJ0cnVlIl0sWyJpdGVyYXRlIiwiZmFsc2UiXSxbIml0ZXJhdGVDb3VudCIsIjEwMCJdLFsiaXRlcmF0ZURlbHRhIiwiMC4wMDEiXSxbInJlZk1vZGUiLCJBMSJdXTtmdW5jdGlvbiBVcChnLHgpe2Zvcih2YXIg''@;'; put 'put ''dz0wO3chPWcubGVuZ3RoOysrdylmb3IodmFyIFY9Z1t3XSxXPTA7VyE9eC5sZW5ndGg7KytXKXt2YXIgZWU9eFtXXTtpZihudWxsPT1WW2VlWzBdXSlWW2VlWzBdXT1lZVsxXTtlbHNlIHN3aXRjaChlZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIFZbZWVbMF1dJiYoVltlZVsw''@;'; put 'put ''XV09SXIoVltlZVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBWW2VlWzBdXSYmKFZbZWVbMF1dPXBhcnNlSW50KFZbZWVbMF1dLDEwKSl9fX1mdW5jdGlvbiBiYihnLHgpe2Zvcih2YXIgdz0wO3chPXgubGVuZ3RoOysrdyl7dmFyIFY9eFt3XTtpZihudWxsPT1nW1Zb''@;'; put 'put ''MF1dKWdbVlswXV09VlsxXTtlbHNlIHN3aXRjaChWWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgZ1tWWzBdXSYmKGdbVlswXV09SXIoZ1tWWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIGdbVlswXV0mJihnW1ZbMF1dPXBhcnNlSW50KGdbVlswXV0sMTAp''@;'; put 'put ''KX19fWZ1bmN0aW9uIHdiKGcpe2JiKGcuV0JQcm9wcyxLeCksYmIoZy5DYWxjUHIsSm0pLFVwKGcuV0JWaWV3LF9iKSxVcChnLlNoZWV0cyx3Wiksam0uZGF0ZTE5MDQ9SXIoZy5XQlByb3BzLmRhdGUxOTA0KX12YXIgV3A9Il1bKj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBPMyhnLHgpe2lm''@;'; put 'put ''KGcubGVuZ3RoPjMxKXtpZih4KXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciB3PSEwO3JldHVybiBXcC5mb3JFYWNoKGZ1bmN0aW9uKFYpe2lmKC0xIT1nLmluZGV4T2YoVikpe2lmKCF4KXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''U2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO3c9ITF9fSksd312YXIgU1o9Lzxcdys6d29ya2Jvb2svLHM5PXpyKCJ3b3JrYm9vayIsbnVsbCx7eG1sbnM6Um8ubWFpblswXSwieG1sbnM6ciI6Um8ucn0pO2Z1bmN0aW9uIHF4KGcseCl7dmFyIHc9eHx8e30sVj1b''@;'; put 'put ''a2ldO1ZbVi5sZW5ndGhdPXM5O3ZhciBXPWcuV29ya2Jvb2smJihnLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7Zy5Xb3JrYm9vayYmZy5Xb3JrYm9vay5Nb2RpZnkmJihWW1YubGVuZ3RoXT1mdW5jdGlvbiBNWihnKXt2YXIgeD17fTtyZXR1cm4gZy53YXJuJiYoeC5yZWFkT25seVJl''@;'; put 'put ''Y29tbWVuZGVkPTEpLHgudXNlck5hbWU9Zy51c2VyfHwiU2hlZXQgSlMiLGcuZW5jcnlwdGlvbiYmKGcuZW5jcnlwdGlvbi5hbGdvJiYoeC5hbGdvcml0aG1OYW1lPWcuZW5jcnlwdGlvbi5hbGdvKSxnLmVuY3J5cHRpb24uaGFzaCYmKHguaGFzaFZhbHVlPWcuZW5jcnlwdGlvbi5oYXNoKSxn''@;'; put 'put ''LmVuY3J5cHRpb24uc2FsdCYmKHguc2FsdFZhbHVlPWcuZW5jcnlwdGlvbi5zYWx0KSxnLmVuY3J5cHRpb24uc3BpbiYmKHguc3BpbkNvdW50PWcuZW5jcnlwdGlvbi5zcGluKSksenIoImZpbGVTaGFyaW5nIixudWxsLHgpfShnLldvcmtib29rLk1vZGlmeSkpO3ZhciBlZT17Y29kZU5hbWU6''@;'; put 'put ''IlRoaXNXb3JrYm9vayJ9O2cuV29ya2Jvb2smJmcuV29ya2Jvb2suV0JQcm9wcyYmKEt4LmZvckVhY2goZnVuY3Rpb24oRGUpe251bGwhPWcuV29ya2Jvb2suV0JQcm9wc1tEZVswXV0mJmcuV29ya2Jvb2suV0JQcm9wc1tEZVswXV0hPURlWzFdJiYoZWVbRGVbMF1dPWcuV29ya2Jvb2suV0JQ''@;'; put 'put ''cm9wc1tEZVswXV0pfSksZy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYoZWUuY29kZU5hbWU9Zy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBlZS5Db2RlTmFtZSkpLFZbVi5sZW5ndGhdPXpyKCJ3b3JrYm9va1ByIixudWxsLGVlKSxnLldvcmtib29rJiZnLldvcmtib29r''@;'; put 'put ''LlByb3RlY3Rpb24mJihWW1YubGVuZ3RoXT1mdW5jdGlvbiBYeChnKXt2YXIgeD17fTtyZXR1cm4gZy5sb2NrU3RydWN0dXJlJiYoeC5sb2NrU3RydWN0dXJlPTEpLGcubG9ja1dpbmRvd3MmJih4LmxvY2tXaW5kb3dzPTEpLGcuZW5jcnlwdGlvbiYmKGcuZW5jcnlwdGlvbi5hbGdvJiYoeC53''@;'; put 'put ''b3JrYm9va0FsZ29yaXRobU5hbWU9Zy5lbmNyeXB0aW9uLmFsZ28pLGcuZW5jcnlwdGlvbi5oYXNoJiYoeC53b3JrYm9va0hhc2hWYWx1ZT1nLmVuY3J5cHRpb24uaGFzaCksZy5lbmNyeXB0aW9uLnNhbHQmJih4Lndvcmtib29rU2FsdFZhbHVlPWcuZW5jcnlwdGlvbi5zYWx0KSxnLmVuY3J5''@;'; put 'put ''cHRpb24uc3BpbiYmKHgud29ya2Jvb2tTcGluQ291bnQ9Zy5lbmNyeXB0aW9uLnNwaW4pKSx6cigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLHgpfShnLldvcmtib29rLlByb3RlY3Rpb24pKTt2YXIgbGU9Zy5Xb3JrYm9vayYmZy5Xb3JrYm9vay5TaGVldHN8fFtdLG9lPTA7aWYobGUmJmxl''@;'; put 'put ''WzBdJiZsZVswXS5IaWRkZW4pe2ZvcihWW1YubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLG9lPTA7b2UhPWcuU2hlZXROYW1lcy5sZW5ndGgmJmxlW29lXSYmbGVbb2VdLkhpZGRlbjsrK29lKTtvZT09Zy5TaGVldE5hbWVzLmxlbmd0aCYmKG9lPTApLFZbVi5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3''@;'; put 'put ''IGZpcnN0U2hlZXQ9Iicrb2UrJyIgYWN0aXZlVGFiPSInK29lKyciLz4nLFZbVi5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihWW1YubGVuZ3RoXT0iPHNoZWV0cz4iLG9lPTA7b2UhPWcuU2hlZXROYW1lcy5sZW5ndGg7KytvZSl7dmFyIGRlPXtuYW1lOm9pKGcuU2hlZXROYW1lc1tvZV0u''@;'; put 'put ''c2xpY2UoMCwzMSkpfTtpZihkZS5zaGVldElkPSIiKyhvZSsxKSxkZVsicjppZCJdPSJySWQiKyhvZSsxKSxsZVtvZV0pc3dpdGNoKGxlW29lXS5IaWRkZW4pe2Nhc2UgMTpkZS5zdGF0ZT0iaGlkZGVuIjticmVhaztjYXNlIDI6ZGUuc3RhdGU9InZlcnlIaWRkZW4ifVZbVi5sZW5ndGhdPXpy''@;'; put 'put ''KCJzaGVldCIsbnVsbCxkZSl9cmV0dXJuIFZbVi5sZW5ndGhdPSI8L3NoZWV0cz4iLGcuRXh0ZXJuYWxXQiYmZy5FeHRlcm5hbFdCLmxlbmd0aCYmKFZbVi5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiIsKGcuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oRGUsUmUpe3Zh''@;'; put 'put ''ciBWZT0kcyh3LndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhSZSsxKSsiLnhtbCIseWEuWExJTkspO1ZbVi5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0icklkJytWZSsnIi8+J30pLFZbVi5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxX''@;'; put 'put ''JiYoVltWLmxlbmd0aF09IjxkZWZpbmVkTmFtZXM+IixnLldvcmtib29rJiZnLldvcmtib29rLk5hbWVzJiZnLldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oRGUpe3ZhciBSZT17bmFtZTpEZS5OYW1lfTtEZS5Db21tZW50JiYoUmUuY29tbWVudD1EZS5Db21tZW50KSxudWxsIT1E''@;'; put 'put ''ZS5TaGVldCYmKFJlLmxvY2FsU2hlZXRJZD0iIitEZS5TaGVldCksRGUuSGlkZGVuJiYoUmUuaGlkZGVuPSIxIiksRGUuUmVmJiYoVltWLmxlbmd0aF09enIoImRlZmluZWROYW1lIixvaShEZS5SZWYpLFJlKSl9KSxWW1YubGVuZ3RoXT0iPC9kZWZpbmVkTmFtZXM+IiksdyYmdy5waXZvdHMm''@;'; put 'put ''JncucGl2b3RzLmxlbmd0aD4wJiYoVi5wdXNoKCI8cGl2b3RDYWNoZXM+Iiksdy5waXZvdHMuZm9yRWFjaChmdW5jdGlvbihEZSxSZSl7Vi5wdXNoKCc8cGl2b3RDYWNoZSBjYWNoZUlkPSInKyhSZSsxKSsnIiByOmlkPSJySWQnK0RlWzJdKyciLz4nKX0pLFYucHVzaCgiPC9waXZvdENhY2hl''@;'; put 'put ''cz4iKSksVi5sZW5ndGg+MiYmKFZbVi5sZW5ndGhdPSI8L3dvcmtib29rPiIsVlsxXT1WWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxWLmpvaW4oIiIpfWZ1bmN0aW9uIEVaKGcseCl7cmV0dXJuIHh8fCh4PUhyKDEyNykpLHgud3JpdGVfc2hpZnQoNCxnLkhpZGRlbikseC53cml0ZV9zaGlmdCg0''@;'; put 'put ''LGcuaVRhYklEKSxNbyhnLnN0clJlbElELHgpLGtjKGcubmFtZS5zbGljZSgwLDMxKSx4KSx4Lmxlbmd0aD54Lmw/eC5zbGljZSgwLHgubCk6eH1mdW5jdGlvbiByTyhnLHgpe3ZhciB3PXt9O3JldHVybiBnLnJlYWRfc2hpZnQoNCksdy5BcmNoSUQ9Zy5yZWFkX3NoaWZ0KDQpLGcubCs9eC04''@;'; put 'put ''LHd9ZnVuY3Rpb24gc08oZyx4KXt2YXIgdz1DdCgpO3JldHVybiB1dCh3LCJCcnRCZWdpbkJvb2siKSx1dCh3LCJCcnRGaWxlVmVyc2lvbiIsZnVuY3Rpb24gb08oZyx4KXt4fHwoeD1IcigxMjcpKTtmb3IodmFyIHc9MDs0IT13Oysrdyl4LndyaXRlX3NoaWZ0KDQsMCk7cmV0dXJuIGtjKCJT''@;'; put 'put ''aGVldEpTIix4KSxrYyhmLnZlcnNpb24seCksa2MoZi52ZXJzaW9uLHgpLGtjKCI3MjYyIix4KSx4Lmxlbmd0aD54Lmw/eC5zbGljZSgwLHgubCk6eH0oKSksdXQodywiQnJ0V2JQcm9wIixmdW5jdGlvbiBuTyhnLHgpe3h8fCh4PUhyKDcyKSk7dmFyIHc9MDtyZXR1cm4gZyYmZy5maWx0ZXJQ''@;'; put 'put ''cml2YWN5JiYod3w9OCkseC53cml0ZV9zaGlmdCg0LHcpLHgud3JpdGVfc2hpZnQoNCwwKSxzMShnJiZnLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIix4KSx4LnNsaWNlKDAseC5sKX0oZy5Xb3JrYm9vayYmZy5Xb3JrYm9vay5XQlByb3BzfHxudWxsKSksZnVuY3Rpb24gVWcoZyx4KXtpZih4''@;'; put 'put ''Lldvcmtib29rJiZ4Lldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciB3PXguV29ya2Jvb2suU2hlZXRzLFY9MCxXPS0xLGVlPS0xO1Y8dy5sZW5ndGg7KytWKSF3W1ZdfHwhd1tWXS5IaWRkZW4mJi0xPT1XP1c9VjoxPT13W1ZdLkhpZGRlbiYmLTE9PWVlJiYoZWU9Vik7ZWU+V3x8KHV0KGcsIkJy''@;'; put 'put ''dEJlZ2luQm9va1ZpZXdzIiksdXQoZywiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIENiKGcseCl7cmV0dXJuIHh8fCh4PUhyKDI5KSkseC53cml0ZV9zaGlmdCgtNCwwKSx4LndyaXRlX3NoaWZ0KC00LDQ2MCkseC53cml0ZV9zaGlmdCg0LDI4ODAwKSx4LndyaXRlX3NoaWZ0KDQsMTc2MDApLHgu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCw1MDApLHgud3JpdGVfc2hpZnQoNCxnKSx4LndyaXRlX3NoaWZ0KDQsZykseC53cml0ZV9zaGlmdCgxLDEyMCkseC5sZW5ndGg+eC5sP3guc2xpY2UoMCx4LmwpOnh9KFcpKSx1dChnLCJCcnRFbmRCb29rVmlld3MiKSl9fSh3LGcpLGZ1bmN0aW9uIFF4KGcseCl7dXQo''@;'; put 'put ''ZywiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIHc9MDt3IT14LlNoZWV0TmFtZXMubGVuZ3RoOysrdyl1dChnLCJCcnRCdW5kbGVTaCIsRVooe0hpZGRlbjp4Lldvcmtib29rJiZ4Lldvcmtib29rLlNoZWV0cyYmeC5Xb3JrYm9vay5TaGVldHNbd10mJnguV29ya2Jvb2suU2hlZXRzW3dd''@;'; put 'put ''LkhpZGRlbnx8MCxpVGFiSUQ6dysxLHN0clJlbElEOiJySWQiKyh3KzEpLG5hbWU6eC5TaGVldE5hbWVzW3ddfSkpO3V0KGcsIkJydEVuZEJ1bmRsZVNocyIpfSh3LGcpLHV0KHcsIkJydEVuZEJvb2siKSx3LmVuZCgpfWZ1bmN0aW9uIElaKGcseCx3LFYsVyl7cmV0dXJuKCIuYmluIj09PXgu''@;'; put 'put ''c2xpY2UoLTQpP3BaOlJMKShnLHcsVixXKX1mdW5jdGlvbiBSWihnLHgsdyxWLFcpe3JldHVybigiLmJpbiI9PT14LnNsaWNlKC00KT9iWjpRTCkoZyx3LFYsVyl9ZnVuY3Rpb24gT1ooZyx4LHcpe3JldHVybigiLmJpbiI9PT14LnNsaWNlKC00KT9Fb2U6QU0pKGcsdyl9ZnVuY3Rpb24gUFoo''@;'; put 'put ''Zyx4LHcpe3JldHVybigiLmJpbiI9PT14LnNsaWNlKC00KT9IUjpueCkoZyx3KX12YXIgckU9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZyxpRT0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0''@;'; put 'put ''aW9uIHoxKGcseCl7dmFyIHc9Zy5zcGxpdCgvXHMrLyksVj1bXTtpZih4fHwoVlswXT13WzBdKSwxPT09dy5sZW5ndGgpcmV0dXJuIFY7dmFyIGVlLGxlLGRlLFc9Zy5tYXRjaChyRSk7aWYoVylmb3IoZGU9MDtkZSE9Vy5sZW5ndGg7KytkZSktMT09PShsZT0oZWU9V1tkZV0ubWF0Y2goaUUp''@;'; put 'put ''KVsxXS5pbmRleE9mKCI6IikpP1ZbZWVbMV1dPWVlWzJdLnNsaWNlKDEsZWVbMl0ubGVuZ3RoLTEpOlZbInhtbG5zOiI9PT1lZVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrZWVbMV0uc2xpY2UoNik6ZWVbMV0uc2xpY2UobGUrMSldPWVlWzJdLnNsaWNlKDEsZWVbMl0ubGVuZ3RoLTEpO3JldHVy''@;'; put 'put ''biBWfWZ1bmN0aW9uIGw5KGcpe3ZhciB3PXt9O2lmKDE9PT1nLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIHc7dmFyIFcsZWUsb2UsVj1nLm1hdGNoKHJFKTtpZihWKWZvcihvZT0wO29lIT1WLmxlbmd0aDsrK29lKS0xPT09KGVlPShXPVZbb2VdLm1hdGNoKGlFKSlbMV0uaW5kZXhPZigi''@;'; put 'put ''OiIpKT93W1dbMV1dPVdbMl0uc2xpY2UoMSxXWzJdLmxlbmd0aC0xKTp3WyJ4bWxuczoiPT09V1sxXS5zbGljZSgwLDYpPyJ4bWxucyIrV1sxXS5zbGljZSg2KTpXWzFdLnNsaWNlKGVlKzEpXT1XWzJdLnNsaWNlKDEsV1syXS5sZW5ndGgtMSk7cmV0dXJuIHd9ZnVuY3Rpb24gRlooZyl7dmFy''@;'; put 'put ''IHg9e307aWYoZy5EZWZhdWx0Um93SGVpZ2h0KXt2YXIgdz17aHB4OjQqcGFyc2VJbnQoZy5EZWZhdWx0Um93SGVpZ2h0KS8zfTtUNyh3KSx4LnJvdz13fWlmKGcuRGVmYXVsdENvbFdpZHRoKXt2YXIgVj17d3B4OjQqcGFyc2VJbnQoZy5EZWZhdWx0Q29sV2lkdGgpLzN9O20xKFYpLHguY29s''@;'; put 'put ''PVZ9cmV0dXJuIHh9ZnVuY3Rpb24gaE8oZyx4LHcsVil7dmFyIFc9Vjtzd2l0Y2goKHdbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6Vz1JcihWKTticmVhaztjYXNlImkyIjpjYXNlImludCI6Vz1wYXJzZUludChWLDEwKTticmVhaztj''@;'; put 'put ''YXNlInI0IjpjYXNlImZsb2F0IjpXPXBhcnNlRmxvYXQoVik7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpXPUxlKFYpO2JyZWFrO2Nhc2UiaTgiOmNhc2Uic3RyaW5nIjpjYXNlImZpeGVkIjpjYXNlInV1aWQiOmNhc2UiYmluLmJhc2U2NCI6YnJlYWs7ZGVmYXVsdDp0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoImJhZCBjdXN0cHJvcDoiK3dbMF0pfWdbcXIoeCldPVd9dmFyIHBPPXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3VibGVBY2NvdW50aW5nIn0sSFo9YmUocE8pO2Z1bmN0aW9uIGdPKGcseCx3LFYpe2lmKFYu''@;'; put 'put ''Y2VsbFN0eWxlcyl7aWYodz13LnJlcGxhY2UoL1xzKy9nLCIgIikseC5JbnRlcmlvcil7dmFyIFc9eC5JbnRlcmlvcjtXLlBhdHRlcm4mJihXLnBhdHRlcm5UeXBlPWlSW1cuUGF0dGVybl18fFcuUGF0dGVybiksVy5Db2xvciYmVy5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYoVy5m''@;'; put 'put ''Z0NvbG9yPXtyZ2I6Vy5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBtTyhnKXtnLkJvcmRlcnMmJihnLkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbih4KXt2YXIgdz14LlBvc2l0aW9uLnRvTG93ZXJDYXNlKCk7Z1t3XT17c3R5bGU6YUUoeC5MaW5lU3R5bGUsK3guV2VpZ2h0KSxjb2xvcjp7''@;'; put 'put ''cmdiOih4LkNvbG9yfHwiIzAwMDAwMCIpLnNsaWNlKDEpfX19KSxkZWxldGUgZy5Cb3JkZXJzKX0oeCk7dmFyIGxlLGVlPXcubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTtlZSYmKElyKChsZT1mcihlZVswXSkpLkJvbGQpJiYoeC5Cb2xkPSEwKSxJcihsZS5JdGFsaWMpJiYoeC5J''@;'; put 'put ''dGFsaWM9ITApLElyKGxlLlN0cmlrZVRocm91Z2gpJiYoeC5TdHJpa2U9ITApLGxlLlNpemUmJih4LlNpemU9K2xlLlNpemUpLHguRm9udE5hbWU9bGUuRm9udE5hbWU/bGUuRm9udE5hbWU6IkFyaWFsIixsZS5VbmRlcmxpbmUmJih4LlVuZGVybGluZT1IWltsZS5VbmRlcmxpbmVdKSxsZS5D''@;'; put 'put ''b2xvciYmKHguUkdCPWxlLkNvbG9yLnNsaWNlKC02KSkpLHguQWxpZ25tZW50JiYoeC5hbGlnbm1lbnQ9e30seC5BbGlnbm1lbnQuVmVydGljYWwmJih4LmFsaWdubWVudC52ZXJ0aWNhbD14LkFsaWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSx4LkFsaWdubWVudC5Ib3Jpem9udGFs''@;'; put 'put ''JiYoeC5hbGlnbm1lbnQuaG9yaXpvbnRhbD14LkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJDYXNlKCkpLElyKHguQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP3guYWxpZ25tZW50LndyYXBUZXh0PSEwOm51bGw9PXguQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgeC5hbGlnbm1lbnQu''@;'; put 'put ''d3JhcFRleHQsSXIoeC5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJih4LmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK3guQWxpZ25tZW50LkluZGVudCYmKHguYWxpZ25tZW50LmluZGVudD0reC5BbGlnbm1lbnQuSW5kZW50fHwwKSwreC5BbGlnbm1lbnQuUm90YXRlJiYoeC5hbGln''@;'; put 'put ''bm1lbnQudGV4dFJvdGF0aW9uPSt4LkFsaWdubWVudC5Sb3RhdGV8fDApKX1nW3guSURdPXgsKCJEZWZhdWx0Ij09eC5JRHx8Ik5vcm1hbCI9PXguTmFtZSkmJlNtKHgpfWZ1bmN0aW9uIGFFKGcseCl7c3dpdGNoKGcpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nhc2UiRGFzaCI6cmV0dXJu''@;'; put 'put ''ImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJkb3R0ZWQiO2Nhc2UiRGFzaERvdCI6cmV0dXJuImRhc2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnREYXNoRG90IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJsZSI6cmV0dXJuImRvdWJs''@;'; put 'put ''ZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2goK3h8fDApe2Nhc2UgMDpyZXR1cm4iaGFpciI7Y2FzZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0aGljayJ9cmV0dXJuInRoaW4ifXJldHVybiBnfWZ1bmN0aW9uIHZPKGcseCx3LFYsVyxlZSxs''@;'; put 'put ''ZSxvZSxkZSxEZSl7dmFyIFJlPSJHZW5lcmFsIixWZT1WLlN0eWxlSUQsR2U9e307RGU9RGV8fHt9O3ZhciBldD1bXSxidD0wO2Zvcih2b2lkIDA9PT1WZSYmb2UmJihWZT1vZS5TdHlsZUlEKSx2b2lkIDA9PT1WZSYmbGUmJihWZT1sZS5TdHlsZUlEKTt2b2lkIDAhPT1lZVtWZV07KXt2YXIg''@;'; put 'put ''SmU9ZWVbVmVdO2lmKCJHZW5lcmFsIj09UmUmJkplLm5mJiYoUmU9ZWVbVmVdLm5mKSxKZS5JbnRlcmlvciYmZXQucHVzaChlZVtWZV0uSW50ZXJpb3IpLEplLmFsaWdubWVudCYmKEdlLmFsaWdubWVudHx8KEdlLmFsaWdubWVudD1ybihKZS5hbGlnbm1lbnQpKSksbnVsbD09R2UuYm9sZCYm''@;'; put 'put ''SmUuQm9sZCYmKEdlLmJvbGQ9ITApLG51bGw9PUdlLml0YWxpYyYmSmUuSXRhbGljJiYoR2UuaXRhbGljPSEwKSxudWxsPT1HZS5zdHJpa2UmJkplLlN0cmlrZSYmKEdlLnN0cmlrZT0hMCksbnVsbD09R2Uuc3omJkplLlNpemUmJihHZS5zej1KZS5TaXplKSxudWxsPT1HZS5uYW1lJiZKZS5G''@;'; put 'put ''b250TmFtZSYmKEdlLm5hbWU9SmUuRm9udE5hbWUpLG51bGw9PUdlLnVuZGVybGluZSYmSmUuVW5kZXJsaW5lJiYoR2UudW5kZXJsaW5lPUplLlVuZGVybGluZSksbnVsbD09R2UuY29sb3ImJkplLlJHQiYmKEdlLmNvbG9yPXtyZ2I6SmUuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0Iiwi''@;'; put 'put ''cmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKEF0KXtudWxsPT1HZVtBdF0mJkplW0F0XSYmKEdlW0F0XT1ybihKZVtBdF0pKX0pLCJEZWZhdWx0Ij09VmUpYnJlYWs7VmU9SmUuUGFyZW50fHwiRGVmYXVsdCJ9R2UubmFtZXx8KEdlLm5hbWU9ZWUuRGVmYXVsdCYmZWUuRGVmYXVsdC5Gb250TmFt''@;'; put 'put ''ZXx8IkFyaWFsIiksR2Uuc3p8fChHZS5zej1lZS5EZWZhdWx0JiZlZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgZnQ9IiI7aWYoZ3x8Vi5Gb3JtdWxhfHwiU3RyaW5nIj09dy5UeXBlfHwiTnVtYmVyIj09dy5UeXBlKXN3aXRjaCh3LlR5cGUpe2Nhc2UiQm9vbGVhbiI6Vi50PSJiIixWLnY9SXIo''@;'; put 'put ''Zyk7YnJlYWs7Y2FzZSJTdHJpbmciOlYudD0icyIsZnQ9b2EocXIoZykpLFYudj1nLmluZGV4T2YoIjwiKT4tMT9xcih4fHxnKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmZ0LGcuaW5kZXhPZigiPCIpPi0xJiYoVi5SPXhkLmh0bWxfdG9fcnMocXIoZykpKTticmVhaztjYXNlIkRhdGVUaW1l''@;'; put 'put ''IjoiWiIhPWcuc2xpY2UoLTEpJiYoZys9IloiKSxWLnY9KExlKGcpLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkvODY0ZTUsVi52IT1WLnY/Vi52PXFyKGcpOlYudjw2MCYmKFYudj1WLnYtMSksKCFSZXx8IkdlbmVyYWwiPT1SZSkmJihSZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVt''@;'; put 'put ''YmVyIjp2b2lkIDA9PT1WLnYmJihWLnY9K2cpLFYudHx8KFYudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOlYudD0iZSIsVi52PVBwW2ddLCExIT09RGUuY2VsbFRleHQmJihWLnc9Zyk7YnJlYWs7ZGVmYXVsdDoiIj09ZyYmIiI9PXg/Vi50PSJ6IjooVi50PSJzIixmdD1vYShxcihnKSksVi52''@;'; put 'put ''PWcuaW5kZXhPZigiPCIpPi0xP3FyKHh8fGcpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6ZnQsZy5pbmRleE9mKCI8Iik+LTEmJihWLlI9eGQuaHRtbF90b19ycyhxcihnKSkpKX1lbHNlIFYudD0ieiIsZGVsZXRlIFYudjtpZihmdW5jdGlvbiBmTyhnLHgsdyl7aWYoInoiIT09Zy50KXtpZigh''@;'; put 'put ''d3x8ITEhPT13LmNlbGxUZXh0KXRyeXtnLnc9ImUiPT09Zy50P2cud3x8VjBbZy52XToiR2VuZXJhbCI9PT14PyJuIj09PWcudD8oMHxnLnYpPT09Zy52P2IuX2dlbmVyYWxfaW50KGcudik6Yi5fZ2VuZXJhbF9udW0oZy52KTpiLl9nZW5lcmFsKGcudik6ZnVuY3Rpb24gZE8oZyx4KXt2YXIg''@;'; put 'put ''dz1HW2ddfHxxcihnKTtyZXR1cm4iR2VuZXJhbCI9PT13P2IuX2dlbmVyYWwoeCk6Yi5mb3JtYXQodyx4KX0oeHx8IkdlbmVyYWwiLGcudil9Y2F0Y2goZWUpe2lmKHcuV1RGKXRocm93IGVlfXRyeXt2YXIgVj1HW3hdfHx4fHwiR2VuZXJhbCI7aWYody5jZWxsTkYmJihnLno9Viksdy5jZWxs''@;'; put 'put ''RGF0ZXMmJiJuIj09Zy50JiZiLmlzX2RhdGUoVikpe3ZhciBXPWIucGFyc2VfZGF0ZV9jb2RlKGcudik7VyYmKGcudD0iZCIsZy52PW5ldyBEYXRlKFcueSxXLm0tMSxXLmQsVy5ILFcuTSxXLlMsVy51KSl9fWNhdGNoKGVlKXtpZih3LldURil0aHJvdyBlZX19fShWLFJlLERlKSwhMSE9PURl''@;'; put 'put ''LmNlbGxGb3JtdWxhKWlmKFYuRm9ybXVsYSl7dmFyIFJ0PXFyKFYuRm9ybXVsYSk7NjE9PVJ0LmNoYXJDb2RlQXQoMCkmJihSdD1SdC5zbGljZSgxKSksVi5mPUR1KFJ0LFcpLGRlbGV0ZSBWLkZvcm11bGEsIlJDIj09Vi5BcnJheVJhbmdlP1YuRj1EdSgiUkM6UkMiLFcpOlYuQXJyYXlSYW5n''@;'; put 'put ''ZSYmKFYuRj1EdShWLkFycmF5UmFuZ2UsVyksZGUucHVzaChbU2EoVi5GKSxWLkZdKSl9ZWxzZSBmb3IoYnQ9MDtidDxkZS5sZW5ndGg7KytidClXLnI+PWRlW2J0XVswXS5zLnImJlcucjw9ZGVbYnRdWzBdLmUuciYmVy5jPj1kZVtidF1bMF0ucy5jJiZXLmM8PWRlW2J0XVswXS5lLmMmJihW''@;'; put 'put ''LkY9ZGVbYnRdWzFdKTtpZihEZS5jZWxsU3R5bGVzJiYoZXQuZm9yRWFjaChmdW5jdGlvbihBdCl7IUdlLnBhdHRlcm5UeXBlJiZBdC5wYXR0ZXJuVHlwZSYmKEdlLnBhdHRlcm5UeXBlPUF0LnBhdHRlcm5UeXBlKSwhR2UuZmdDb2xvciYmQXQuZmdDb2xvciYmKEdlLmZnQ29sb3I9QXQuZmdD''@;'; put 'put ''b2xvcil9KSxWLnM9R2UpLHZvaWQgMCE9PVYuU3R5bGVJRCYmKFYuaXhmZT1WLlN0eWxlSUQpLFYuUiYmVi5zKXt2YXIgU3Q9cm4oVi5zKTtkZWxldGUgU3QuYm9sZCxkZWxldGUgU3QuaXRhbGljLGRlbGV0ZSBTdC51bmRlcmxpbmUsZGVsZXRlIFN0LnN0cmlrZSxWLlIuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihBdCl7QXQucz1UdChybihTdCksQXQucyl9KX19ZnVuY3Rpb24gYzkoZyl7Zy50PWcudnx8IiIsZy50PWcudC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxnLnY9Zy53PWcuaXhmZT12b2lkIDB9ZnVuY3Rpb24gTWIoZyl7aWYoX2UmJkJ1ZmZlci5pc0J1''@;'; put 'put ''ZmZlcihnKSlyZXR1cm4gZy50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2YgZylyZXR1cm4gZztpZih0eXBlb2YgVWludDhBcnJheTwidSImJmcgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBibyhwKGsoZykpKTt0aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1dCBmb3Jt''@;'; put 'put ''YXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgdDY9LzwoXC8/KShbXlxzPz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIFpwKGcseCl7dmFyIHc9eHx8e30sVj1VKE1iKGcpKTsoImJpbmFyeSI9PXcudHlwZXx8ImFy''@;'; put 'put ''cmF5Ij09dy50eXBlfHwiYmFzZTY0Ij09dy50eXBlKSYmKFY9dHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLEgoVikpOmJvKFYpKTt2YXIgVz1WLnNsaWNlKDAsMTAyNCkudG9Mb3dlckNhc2UoKSxlZT0hMTtpZigoMTAyMyZXLmluZGV4T2YoIj4iKSk+TWF0''@;'; put 'put ''aC5taW4oMTAyMyZXLmluZGV4T2YoIiwiKSwxMDIzJlcuaW5kZXhPZigiOyIpKSl7dmFyIGxlPXJuKHcpO3JldHVybiBsZS50eXBlPSJzdHJpbmciLExnLnRvX3dvcmtib29rKFYsbGUpfWlmKC0xPT1XLmluZGV4T2YoIjw/eG1sIikmJlsiaHRtbCIsInRhYmxlIiwiaGVhZCIsIm1ldGEiLCJz''@;'; put 'put ''Y3JpcHQiLCJzdHlsZSIsImRpdiJdLmZvckVhY2goZnVuY3Rpb24oVTEpe1cuaW5kZXhPZigiPCIrVTEpPj0wJiYoZWU9ITApfSksZWUpcmV0dXJuIHhkLnRvX3dvcmtib29rKFYsdyk7dmFyIG9lLERlLFNyLGRlPVtdLFJlPXt9LFZlPVtdLEdlPXcuZGVuc2U/W106e30sZXQ9IiIsYnQ9e30s''@;'; put 'put ''SmU9e30sZnQ9e30sUnQ9ejEoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+JyksU3Q9MCxBdD0wLHp0PTAsU249e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sbHI9e30sbW49e30sZHI9IiIsR249MCxIbj1bXSxocj17fSxObj17fSx0cj0wLHZpPVtdLFBpPXt9LHFpPVtdLHRhPXt9LElp''@;'; put 'put ''PVtdLEZuPSExLExyPVtdLHByPVtdLExuPXt9LFByPTAsWmk9MCxfaT17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0scGE9e307dDYubGFzdEluZGV4PTAsVj1WLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIGFvPSIiO29lPXQ2LmV4ZWMoVik7KXN3''@;'; put 'put ''aXRjaChvZVszXT0oYW89b2VbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEiPT1hbyl7aWYoIi8iPT09b2VbMV0pe2lmKChEZT1kZS5wb3AoKSlbMF0hPT1vZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitEZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1vZVsw''@;'; put 'put ''XS5jaGFyQXQob2VbMF0ubGVuZ3RoLTIpJiZkZS5wdXNoKFtvZVszXSwhMF0pO2JyZWFrfWlmKGRlW2RlLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT1vZVsxXT92TyhWLnNsaWNlKFN0LG9lLmluZGV4KSxkcixSdCwiY29tbWVudCI9PWRlW2RlLmxlbmd0aC0xXVswXT90YTpKZSx7YzpBdCxy''@;'; put 'put ''Onp0fSxscixJaVtBdF0sZnQsTHIsdyk6KGRyPSIiLFJ0PXoxKG9lWzBdKSxTdD1vZS5pbmRleCtvZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6aWYoIi8iPT09b2VbMV18fCIvPiI9PT1vZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT1vZVswXS5zbGljZSgtMikpe2lmKChKZT1sOShv''@;'; put 'put ''ZVswXSkpLkluZGV4JiYoQXQ9K0plLkluZGV4LTEpLEF0PFNuLnMuYyYmKFNuLnMuYz1BdCksQXQ+U24uZS5jJiYoU24uZS5jPUF0KSxxaT1bXSwhdy5zaGVldFN0dWJzKXsrK0F0O2JyZWFrfXZPKCIiLCIiLHt9LCJjb21tZW50Ij09ZGVbZGUubGVuZ3RoLTFdWzBdP3RhOkplLHtjOkF0LHI6''@;'; put 'put ''enR9LGxyLElpW0F0XSxmdCxMcix3KX1pZihxaS5sZW5ndGg+MCYmKEplLmM9cWkpLCghdy5zaGVldFJvd3N8fHcuc2hlZXRSb3dzPnp0KSYmKHZvaWQgMCE9PUplLnZ8fHcuc2hlZXRTdHVicykmJih3LmRlbnNlPyhHZVt6dF18fChHZVt6dF09W10pLEdlW3p0XVtBdF09SmUpOkdlW1BhKEF0''@;'; put 'put ''KSt6bih6dCldPUplKSxKZS5IUmVmJiYoSmUubD17VGFyZ2V0OnFyKEplLkhSZWYpfSxKZS5IUmVmU2NyZWVuVGlwJiYoSmUubC5Ub29sdGlwPUplLkhSZWZTY3JlZW5UaXApLGRlbGV0ZSBKZS5IUmVmLGRlbGV0ZSBKZS5IUmVmU2NyZWVuVGlwKSwoSmUuTWVyZ2VBY3Jvc3N8fEplLk1lcmdl''@;'; put 'put ''RG93bikmJihQcj1BdCsoMHxwYXJzZUludChKZS5NZXJnZUFjcm9zcywxMCkpLFppPXp0KygwfHBhcnNlSW50KEplLk1lcmdlRG93biwxMCkpLChQcj5BdHx8Wmk+enQpJiZIbi5wdXNoKHtzOntjOkF0LHI6enR9LGU6e2M6UHIscjpaaX19KSksdy5zaGVldFN0dWJzKWlmKEplLk1lcmdlQWNy''@;'; put 'put ''b3NzfHxKZS5NZXJnZURvd24pe2Zvcih2YXIgUWk9QXQ7UWk8PVByOysrUWkpZm9yKHZhciBEbz16dDtEbzw9Wmk7KytEbykoUWk+QXR8fERvPnp0KSYmKHcuZGVuc2U/KEdlW0RvXXx8KEdlW0RvXT1bXSksR2VbRG9dW1FpXT17dDoieiJ9KTpHZVtQYShRaSkrem4oRG8pXT17dDoieiJ9KTtB''@;'; put 'put ''dD1QcisxfWVsc2UrK0F0O2Vsc2UgSmUuTWVyZ2VBY3Jvc3M/QXQ9UHIrMTorK0F0fWVsc2UoSmU9bDkob2VbMF0pKS5JbmRleCYmKEF0PStKZS5JbmRleC0xKSxBdDxTbi5zLmMmJihTbi5zLmM9QXQpLEF0PlNuLmUuYyYmKFNuLmUuYz1BdCksIi8+Ij09PW9lWzBdLnNsaWNlKC0yKSYmKytB''@;'; put 'put ''dCxxaT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09b2VbMV18fCIvPiI9PT1vZVswXS5zbGljZSgtMik/KHp0PFNuLnMuciYmKFNuLnMucj16dCksenQ+U24uZS5yJiYoU24uZS5yPXp0KSwiLz4iPT09b2VbMF0uc2xpY2UoLTIpJiYoZnQ9ejEob2VbMF0pKS5JbmRleCYmKHp0PStmdC5JbmRl''@;'; put 'put ''eC0xKSxBdD0wLCsrenQpOigoZnQ9ejEob2VbMF0pKS5JbmRleCYmKHp0PStmdC5JbmRleC0xKSxMbj17fSwoIjAiPT1mdC5BdXRvRml0SGVpZ2h0fHxmdC5IZWlnaHQpJiYoTG4uaHB0PXBhcnNlRmxvYXQoZnQuSGVpZ2h0KSxMbi5ocHg9bGgoTG4uaHB0KSxwclt6dF09TG4pLCIxIj09ZnQu''@;'; put 'put ''SGlkZGVuJiYoTG4uaGlkZGVuPSEwLHByW3p0XT1MbikpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT1vZVsxXSl7aWYoKERlPWRlLnBvcCgpKVswXSE9PW9lWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0RlLmpvaW4oInwiKSk7VmUucHVzaChldCksU24ucy5yPD1T''@;'; put 'put ''bi5lLnImJlNuLnMuYzw9U24uZS5jJiYoR2VbIiFyZWYiXT1KaShTbiksdy5zaGVldFJvd3MmJncuc2hlZXRSb3dzPD1Tbi5lLnImJihHZVsiIWZ1bGxyZWYiXT1HZVsiIXJlZiJdLFNuLmUucj13LnNoZWV0Um93cy0xLEdlWyIhcmVmIl09SmkoU24pKSksSG4ubGVuZ3RoJiYoR2VbIiFtZXJn''@;'; put 'put ''ZXMiXT1IbiksSWkubGVuZ3RoPjAmJihHZVsiIWNvbHMiXT1JaSkscHIubGVuZ3RoPjAmJihHZVsiIXJvd3MiXT1wciksYnQmJihHZVsiIXNoZWV0Rm9ybWF0Il09RlooYnQpKSxSZVtldF09R2V9ZWxzZSBTbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSx6dD1BdD0wLGRlLnB1c2go''@;'; put 'put ''W29lWzNdLCExXSksRGU9ejEob2VbMF0pLGV0PXFyKERlLk5hbWUpLEdlPXcuZGVuc2U/W106e30sSG49W10sTHI9W10scHI9W10sX2kuU2hlZXRzLnB1c2gocGE9e25hbWU6ZXQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1vZVsxXSl7aWYoKERlPWRlLnBvcCgpKVsw''@;'; put 'put ''XSE9PW9lWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0RlLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT1vZVswXS5zbGljZSgtMikpYnJlYWs7YnQ9ejEob2VbMF0pLGRlLnB1c2goW29lWzNdLCExXSksSWk9W10sRm49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09b2VbMV0/''@;'; put 'put ''Z08obHIsbW4sZHIsdyk6KG1uPXoxKG9lWzBdKSxkcj0iIik7YnJlYWs7Y2FzZSJudW1iZXJmb3JtYXQiOm1uLm5mPXFyKHoxKG9lWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiksR1ttbi5uZl0mJihtbi5uZj1HW21uLm5mXSk7Zm9yKHZhciBqYT0wOzM5MiE9amEmJmIuX3RhYmxlW2phXSE9bW4u''@;'; put 'put ''bmY7KytqYSk7aWYoMzkyPT1qYSlmb3IoamE9NTc7MzkyIT1qYTsrK2phKWlmKG51bGw9PWIuX3RhYmxlW2phXSl7Yi5sb2FkKG1uLm5mLGphKTticmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PWRlW2RlLmxlbmd0aC0xXVswXXx8Ii8iPT09b2VbMV0pYnJlYWs7aWYoKFNy''@;'; put 'put ''PXoxKG9lWzBdKSkuSGlkZGVuJiYoU3IuaGlkZGVuPSEwLGRlbGV0ZSBTci5IaWRkZW4pLFNyLldpZHRoP1NyLndweD00KnBhcnNlSW50KFNyLldpZHRoLDEwKS8zOitTci5BdXRvRml0V2lkdGgmJihTci5hdXRvPTEpLCFGbiYmU3Iud3B4PjEwKXtGbj0hMCx4bD02O2Zvcih2YXIgbW89MDtt''@;'; put 'put ''bzxJaS5sZW5ndGg7KyttbylJaVttb10mJm0xKElpW21vXSl9Rm4mJm0xKFNyKSxJaVtTci5JbmRleC0xfHxJaS5sZW5ndGhdPVNyO2Zvcih2YXIgY289MDtjbzwrU3IuU3BhbjsrK2NvKUlpW0lpLmxlbmd0aF09cm4oU3IpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09b2VbMV0p''@;'; put 'put ''YnJlYWs7X2kuTmFtZXN8fChfaS5OYW1lcz1bXSk7dmFyIEJpPWZyKG9lWzBdKSxrbD17TmFtZTpCaS5OYW1lLFJlZjpEdShCaS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtfaS5TaGVldHMubGVuZ3RoPjAmJihrbC5TaGVldD1faS5TaGVldHMubGVuZ3RoLTEpLF9pLk5hbWVzLnB1''@;'; put 'put ''c2goa2wpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpi''@;'; put 'put ''cmVhaztjYXNlImFsaWdubWVudCI6aWYoIXcuY2VsbFN0eWxlc3x8Ii8iPT09b2VbMV0pYnJlYWs7bW4uQWxpZ25tZW50PXoxKG9lWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9PW9lWzFdJiYobW4uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PW9lWzFdKWJy''@;'; put 'put ''ZWFrO21uLkJvcmRlcnN8fChtbi5Cb3JkZXJzPVtdKSxtbi5Cb3JkZXJzLnB1c2goejEob2VbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT1vZVswXS5zbGljZSgtMikpe2RyKz1vZVswXTticmVha30iLyI9PT1vZVsxXT9kcis9Vi5zbGljZShHbixvZS5pbmRleCtvZVswXS5sZW5n''@;'; put 'put ''dGgpOkduPW9lLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCF3LmNlbGxTdHlsZXN8fCIvIj09PW9lWzFdKWJyZWFrO21uLkludGVyaW9yPXoxKG9lWzBdKTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtl''@;'; put 'put ''eXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNl''@;'; put 'put ''IjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT1vZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09b2VbMV0/YzcoaHIsYW8sVi5zbGljZSh0cixvZS5pbmRleCkpOnRyPW9lLmlu''@;'; put 'put ''ZGV4K29lWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09b2VbMV0pe2lmKChEZT1kZS5wb3AoKSlbMF0hPT1vZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitEZS5qb2luKCJ8IikpfWVsc2UgZGUucHVzaChbb2VbM10sITFdKTti''@;'; put 'put ''cmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PW9lWzFdKXtpZigoRGU9ZGUucG9wKCkpWzBdIT09b2VbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrRGUuam9pbigifCIpKTtjOSh0YSkscWkucHVzaCh0YSl9ZWxzZSBkZS5wdXNoKFtvZVszXSwhMV0pLHRhPXthOihEZT16MShv''@;'; put 'put ''ZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1vZVsxXSl7aWYoKERlPWRlLnBvcCgpKVswXSE9PW9lWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0RlLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT1vZVswXS5jaGFyQXQob2VbMF0ubGVuZ3Ro''@;'; put 'put ''LTIpKXt2YXIgT249ejEob2VbMF0pO0dlWyIhYXV0b2ZpbHRlciJdPXtyZWY6RHUoT24uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxkZS5wdXNoKFtvZVszXSwhMF0pfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOmlmKEdlWyIhdmFsaWRhdGlvbnMiXXx8KEdlWyIhdmFsaWRhdGlvbnMi''@;'; put 'put ''XT1bXSksIi8iPT09b2VbMV0pe2lmKChEZT1kZS5wb3AoKSlbMF0hPT1vZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitEZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1vZVswXS5jaGFyQXQob2VbMF0ubGVuZ3RoLTIpJiZkZS5wdXNoKFtvZVszXSwhMF0pLFBpPXt9O2JyZWFrO2Nh''@;'; put 'put ''c2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09b2VbMV0pe3ZhciB3cz0rVi5zbGljZShTdCxvZS5pbmRleCk7KDcyPT13c3x8OTY9PXdzKSYmRmcod3MpfWVsc2UgU3Q9b2UuaW5kZXgrb2VbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3Bl''@;'; put 'put ''cnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNl''@;'; put 'put ''InNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PW9lWzFd''@;'; put 'put ''KXtpZigoRGU9ZGUucG9wKCkpWzBdIT09b2VbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrRGUuam9pbigifCIpKX1lbHNlIi8iIT09b2VbMF0uY2hhckF0KG9lWzBdLmxlbmd0aC0yKSYmZGUucHVzaChbb2VbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PWRlLmxlbmd0aCYm''@;'; put 'put ''ImRvY3VtZW50Ij09b2VbM118fDA9PWRlLmxlbmd0aCYmInVvZiI9PW9lWzNdKXJldHVybiBUTyhWLHcpO3ZhciBQcz0hMDtzd2l0Y2goZGVbZGUubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaChvZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1v''@;'; put 'put ''dmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1l''@;'; put 'put ''bmRlZCI6YnJlYWs7ZGVmYXVsdDpQcz0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaChvZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhl''@;'; put 'put ''aWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6UHM9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2gob2VbM10pe2Nhc2UiZGF0ZTE5MDQiOl9pLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQi''@;'; put 'put ''OmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5r''@;'; put 'put ''bm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2Ui''@;'; put 'put ''ZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Ui''@;'; put 'put ''c3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292''@;'; put 'put ''ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6UHM9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRj''@;'; put 'put ''aChvZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpQcz0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChvZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09b2VbMF0uc2xpY2UoLTIpKWlmKCIvIj09PW9l''@;'; put 'put ''WzFdKXN3aXRjaChWLnNsaWNlKHRyLG9lLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6cGEuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOnBhLkhpZGRlbj0yfWVsc2UgdHI9b2UuaW5kZXgrb2VbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpHZVsiIW1hcmdpbnMi''@;'; put 'put ''XXx8UjMoR2VbIiFtYXJnaW5zIl09e30sInhsbWwiKSxHZVsiIW1hcmdpbnMiXS5oZWFkZXI9ZnIob2VbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6R2VbIiFtYXJnaW5zIl18fFIzKEdlWyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksR2VbIiFtYXJnaW5zIl0uZm9vdGVyPWZyKG9lWzBd''@;'; put 'put ''KS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIFpjPWZyKG9lWzBdKTtHZVsiIW1hcmdpbnMiXXx8UjMoR2VbIiFtYXJnaW5zIl09e30sInhsbWwiKSxaYy5Ub3AmJihHZVsiIW1hcmdpbnMiXS50b3A9WmMuVG9wKSxaYy5MZWZ0JiYoR2VbIiFtYXJnaW5zIl0ubGVmdD1aYy5M''@;'; put 'put ''ZWZ0KSxaYy5SaWdodCYmKEdlWyIhbWFyZ2lucyJdLnJpZ2h0PVpjLlJpZ2h0KSxaYy5Cb3R0b20mJihHZVsiIW1hcmdpbnMiXS5ib3R0b209WmMuQm90dG9tKTticmVhaztjYXNlImRpc3BsYXlyaWdodHRvbGVmdCI6X2kuVmlld3N8fChfaS5WaWV3cz1bXSksX2kuVmlld3NbMF18fChfaS5W''@;'; put 'put ''aWV3c1swXT17fSksX2kuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5''@;'; put 'put ''bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVj''@;'; put 'put ''dGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2Fz''@;'; put 'put ''ZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQi''@;'; put 'put ''OmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xz''@;'; put 'put ''IjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2Fz''@;'; put 'put ''ZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxv''@;'; put 'put ''d3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09b2VbMF0uc2xpY2UoLTIp''@;'; put 'put ''KWlmKCIvIj09b2VbMV0pe0dlWyIhZnJlZXplIl18fChHZVsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBEYz14YShHZVsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFsIj09b2VbM10/RGMucj0rVi5zbGljZSh0cixvZS5pbmRleCk6RGMuYz0rVi5zbGljZSh0cixvZS5pbmRleCksR2VbIiFmcmVl''@;'; put 'put ''emUiXT1LcihEYyl9ZWxzZSB0cj1vZS5pbmRleCtvZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOkdlWyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOkdlWyIhb3V0bGluZSJdfHwoR2VbIiFvdXRsaW5lIl09''@;'; put 'put ''e30pLEdlWyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpHZVsiIW91dGxpbmUiXXx8KEdlWyIhb3V0bGluZSJdPXt9KSxHZVsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6UHM9ITF9YnJlYWs7Y2FzZSJwaXZvdHRh''@;'; put 'put ''YmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaChvZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlv''@;'; put 'put ''biI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50Zmll''@;'; put 'put ''bGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpj''@;'; put 'put ''YXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVm''@;'; put 'put ''cmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2''@;'; put 'put ''ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6UHM9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2gob2VbM10pe2Nhc2UiY29sYnJlYWtzIjpj''@;'; put 'put ''YXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OlBzPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKG9lWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4i''@;'; put 'put ''OmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDpQcz0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRjaChvZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9y''@;'; put 'put ''bWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2Ui''@;'; put 'put ''cmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2lt''@;'; put 'put ''YWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25s''@;'; put 'put ''YXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6UHM9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKG9lWzNdKXtjYXNlInJhbmdlIjpQaS5yZWY9b2U7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6''@;'; put 'put ''Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUi''@;'; put 'put ''OmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDpQcz0hMX1icmVhaztjYXNlInNvcnRpbmciOmNh''@;'; put 'put ''c2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2gob2VbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9y''@;'; put 'put ''c3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNh''@;'; put 'put ''c2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6UHM9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2gob2VbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpj''@;'; put 'put ''YXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUi''@;'; put 'put ''OmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpQcz0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpQcz0hMX1pZihQc3x8b2VbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIWRlW2RlLmxlbmd0''@;'; put 'put ''aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK29lWzNdKyJ8IitkZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT1kZVtkZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT1vZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09b2VbMV0/aE8oTm4sYW8sdmks''@;'; put 'put ''Vi5zbGljZSh0cixvZS5pbmRleCkpOih2aT1vZSx0cj1vZS5pbmRleCtvZVswXS5sZW5ndGgpO2JyZWFrfWlmKHcuV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrb2VbM10rInwiK2RlLmpvaW4oInwiKX12YXIgSWM9e307cmV0dXJuIXcuYm9va1NoZWV0cyYmIXcuYm9va1Byb3BzJiYo''@;'; put 'put ''SWMuU2hlZXRzPVJlKSxJYy5TaGVldE5hbWVzPVZlLEljLldvcmtib29rPV9pLEljLlNTRj1iLmdldF90YWJsZSgpLEljLlByb3BzPWhyLEljLkN1c3Rwcm9wcz1ObixJYy5TaGVldHMmJkljLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihVMSl7dmFyIGhjPUljLlNoZWV0c1tVMV07aGNb''@;'; put 'put ''IiFtZXJnZXMiXSYmaGNbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGVuKXsic3RyaW5nIj09dHlwZW9mIGVuJiYoZW49Zi51dGlscy5kZWNvZGVfcmFuZ2UoZW4pKTt2YXIgTW49Zi51dGlscy5lbmNvZGVfY2VsbChlbi5zKSxVbj1BcnJheS5pc0FycmF5KGhjKT8oaGNbZW4ucy5yXXx8''@;'; put 'put ''W10pW2VuLnMuY106aGNbTW5dO1VuJiZVbi5zJiYobnVsbCE9VW4ucy50b3AmJkl1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShoYyxlbix7dG9wOlVuLnMudG9wfSksbnVsbCE9VW4ucy5ib3R0b20mJkl1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShoYyxlbix7Ym90dG9tOlVuLnMuYm90dG9tfSks''@;'; put 'put ''bnVsbCE9VW4ucy5sZWZ0JiZJdS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoaGMsZW4se2xlZnQ6VW4ucy5sZWZ0fSksbnVsbCE9VW4ucy5yaWdodCYmSXUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKGhjLGVuLHtyaWdodDpVbi5zLnJpZ2h0fSkpfSl9KSxJY31mdW5jdGlvbiB1OShnLHgpe3N3aXRj''@;'; put 'put ''aCh2RSh4PXh8fHt9KSx4LnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuIFpwKGhlLmRlY29kZShnKSx4KTtjYXNlImJpbmFyeSI6Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmV0dXJuIFpwKGcseCk7Y2FzZSJhcnJheSI6cmV0dXJuIFpwKHAoZykseCl9fWZ1bmN0aW9uIG42''@;'; put 'put ''KGcpe3JldHVybiB6cigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOmcuTmFtZSwic3M6UmVmZXJzVG8iOiI9IitrbShnLlJlZix7cjowLGM6MH0pfSl9ZnVuY3Rpb24galooZyx4LHcsVixXLGVlLGxlKXtpZighZ3x8bnVsbD09Zy52JiZudWxsPT1nLmYmJiFWLnNoZWV0U3R1YnMpcmV0''@;'; put 'put ''dXJuIiI7dmFyIG9lPXt9O2lmKGcuZiYmKG9lWyJzczpGb3JtdWxhIl09Ij0iK29pKGttKGcuZixsZSkpKSxnLkYmJmcuRi5zbGljZSgwLHgubGVuZ3RoKT09eCl7dmFyIGRlPXhhKGcuRi5zbGljZSh4Lmxlbmd0aCsxKSk7b2VbInNzOkFycmF5UmFuZ2UiXT0iUkM6UiIrKGRlLnI9PWxlLnI/''@;'; put 'put ''IiI6IlsiKyhkZS5yLWxlLnIpKyJdIikrIkMiKyhkZS5jPT1sZS5jPyIiOiJbIisoZGUuYy1sZS5jKSsiXSIpfWlmKGcubCYmZy5sLlRhcmdldCYmKG9lWyJzczpIUmVmIl09b2koZy5sLlRhcmdldCksZy5sLlRvb2x0aXAmJihvZVsieDpIUmVmU2NyZWVuVGlwIl09b2koZy5sLlRvb2x0aXAp''@;'; put 'put ''KSksd1siIW1lcmdlcyJdKWZvcih2YXIgRGU9d1siIW1lcmdlcyJdLFJlPTA7UmUhPURlLmxlbmd0aDsrK1JlKURlW1JlXS5zLmMhPWxlLmN8fERlW1JlXS5zLnIhPWxlLnJ8fChEZVtSZV0uZS5jPkRlW1JlXS5zLmMmJihvZVsic3M6TWVyZ2VBY3Jvc3MiXT1EZVtSZV0uZS5jLURlW1JlXS5z''@;'; put 'put ''LmMpLERlW1JlXS5lLnI+RGVbUmVdLnMuciYmKG9lWyJzczpNZXJnZURvd24iXT1EZVtSZV0uZS5yLURlW1JlXS5zLnIpKTt2YXIgVmU9IiIsR2U9IiI7c3dpdGNoKGcudCl7Y2FzZSJ6IjppZighVi5zaGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2UibiI6VmU9Ik51bWJlciIsR2U9U3Ry''@;'; put 'put ''aW5nKGcudik7YnJlYWs7Y2FzZSJiIjpWZT0iQm9vbGVhbiIsR2U9Zy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJlIjpWZT0iRXJyb3IiLEdlPVYwW2cudl07YnJlYWs7Y2FzZSJkIjpWZT0iRGF0ZVRpbWUiLEdlPW5ldyBEYXRlKGcudikudG9JU09TdHJpbmcoKSxudWxsPT1nLnomJihnLno9Zy56''@;'; put 'put ''fHxiLl90YWJsZVsxNF0pO2JyZWFrO2Nhc2UicyI6VmU9IlN0cmluZyIsR2U9eGkoZy52fHwiIil9dmFyIGV0PXkxKFYuY2VsbFhmcyxudWxsLGcsVik7b2VbInNzOlN0eWxlSUQiXT0icyIrKDIxK2V0KSxvZVsic3M6SW5kZXgiXT1sZS5jKzE7dmFyIGJ0PW51bGwhPWcudj9HZToiIixKZT0i''@;'; put 'put ''eiI9PWcudD8iIjpnLlI/ZnVuY3Rpb24gQlooZyl7cmV0dXJuJzxzczpEYXRhIHNzOlR5cGU9IlN0cmluZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPicrZy5tYXAoZnVuY3Rpb24odyl7dmFyIFY9eGkody52KTtyZXR1cm4gdy5zJiYody5zLmJvbGQmJihWPSI8''@;'; put 'put ''Qj4iK1YrIjwvQj4iKSx3LnMuaXRhbGljJiYoVj0iPEk+IitWKyI8L0k+Iiksdy5zLnN0cmlrZSYmKFY9IjxTPiIrVisiPC9TPiIpLHcucy51bmRlcmxpbmUmJihWPSI8VT4iK1YrIjwvVT4iKSwic3VwZXIiPT13LnMudmFsaWduJiYoVj0iPFN1cD4iK1YrIjwvU3VwPiIpLCJzdWIiPT13LnMu''@;'; put 'put ''dmFsaWduJiYoVj0iPFN1Yj4iK1YrIjwvU3ViPiIpLCh3LnMubmFtZXx8dy5zLnN6fHx3LnMuY29sb3ImJm51bGwhPXcucy5jb2xvci5yZ2IpJiYoVj1bIjxGb250Iix3LnMubmFtZT8nIGh0bWw6RmFjZT0iJyt3LnMubmFtZSsnIic6IiIsdy5zLnN6PycgaHRtbDpTaXplPSInK3cucy5zeisn''@;'; put 'put ''Iic6IiIsdy5zLmNvbG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIHcucy5jb2xvci5yZ2I/dy5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6dy5zLmNvbG9yLnJnYikpLnNsaWNlKC02KSsnIic6IiIsIj4iLFYsIjwvRm9udD4iXS5qb2luKCIiKSkpLFZ9''@;'; put 'put ''KS5qb2luKCIiKSsiPC9EYXRhPiJ9KGcuUik6JzxEYXRhIHNzOlR5cGU9IicrVmUrJyI+JytidCsiPC9EYXRhPiI7cmV0dXJuKGcuY3x8W10pLmxlbmd0aD4wJiYoSmUrPWZ1bmN0aW9uIFZaKGcpe3JldHVybiBnLm1hcChmdW5jdGlvbih4KXt2YXIgVj16cigic3M6RGF0YSIsWGkoeC50fHwi''@;'; put 'put ''Iikse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pO3JldHVybiB6cigiQ29tbWVudCIsVix7InNzOkF1dGhvciI6eC5hfSl9KS5qb2luKCIiKX0oZy5jKSksenIoIkNlbGwiLEplLG9lKX1mdW5jdGlvbiB4YihnLHgpe3ZhciB3PSc8Um93IHNzOkluZGV4PSInKyhn''@;'; put 'put ''KzEpKyciJztyZXR1cm4geCYmKHguaHB4JiYheC5ocHQmJih4LmhwdD1FMyh4LmhweCkpLHguaHB0JiYodys9JyBzczpBdXRvRml0SGVpZ2h0PSIwIiBzczpIZWlnaHQ9IicreC5ocHQrJyInKSx4LmhpZGRlbiYmKHcrPScgc3M6SGlkZGVuPSIxIicpKSx3KyI+In1mdW5jdGlvbiB6WihnLHgs''@;'; put 'put ''dyl7dmFyIFY9W10sZWU9dy5TaGVldHNbdy5TaGVldE5hbWVzW2ddXSxsZT1lZT9mdW5jdGlvbiB5c2UoZyx4LHcsVil7aWYoIWd8fCEoKFZ8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgVz1WLldvcmtib29rLk5hbWVzLGVlPVtdLGxlPTA7bGU8Vy5sZW5ndGg7''@;'; put 'put ''KytsZSl7dmFyIG9lPVdbbGVdO29lLlNoZWV0PT13JiYob2UuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8ZWUucHVzaChuNihvZSkpKX1yZXR1cm4gZWUuam9pbigiIil9KGVlLDAsZyx3KToiIjtyZXR1cm4gbGUubGVuZ3RoPjAmJlYucHVzaCgiPE5hbWVzPiIrbGUrIjwvTmFtZXM+IiksbGU9''@;'; put 'put ''ZWU/ZnVuY3Rpb24gb0UoZyx4KXtpZighZ1siIXJlZiJdKXJldHVybiIiO3ZhciBXPVNhKGdbIiFyZWYiXSksZWU9Z1siIW1lcmdlcyJdfHxbXSxsZT0wLG9lPVtdO2dbIiFjb2xzIl0mJmdbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihmdCxSdCl7bTEoZnQpO3ZhciBTdD0hIWZ0LndpZHRo''@;'; put 'put ''LEF0PXNiKFJ0LGZ0KSx6dD17InNzOkluZGV4IjpSdCsxfTtTdCYmKHp0WyJzczpXaWR0aCJdPUtsKEF0LndpZHRoKSksZnQuaGlkZGVuJiYoenRbInNzOkhpZGRlbiJdPSIxIiksb2UucHVzaCh6cigiQ29sdW1uIixudWxsLHp0KSl9KTtmb3IodmFyIGRlPUFycmF5LmlzQXJyYXkoZyksRGU9''@;'; put 'put ''Vy5zLnI7RGU8PVcuZS5yOysrRGUpe2Zvcih2YXIgUmU9W3hiKERlLChnWyIhcm93cyJdfHxbXSlbRGVdKV0sVmU9Vy5zLmM7VmU8PVcuZS5jOysrVmUpe3ZhciBHZT0hMTtmb3IobGU9MDtsZSE9ZWUubGVuZ3RoOysrbGUpaWYoIShlZVtsZV0ucy5jPlZlfHxlZVtsZV0ucy5yPkRlfHxlZVts''@;'; put 'put ''ZV0uZS5jPFZlfHxlZVtsZV0uZS5yPERlKSl7KGVlW2xlXS5zLmMhPVZlfHxlZVtsZV0ucy5yIT1EZSkmJihHZT0hMCk7YnJlYWt9aWYoIUdlKXt2YXIgZXQ9e3I6RGUsYzpWZX0sYnQ9S3IoZXQpO1JlLnB1c2goalooZGU/KGdbRGVdfHxbXSlbVmVdOmdbYnRdLGJ0LGcseCwwLDAsZXQpKX19''@;'; put 'put ''UmUucHVzaCgiPC9Sb3c+IiksUmUubGVuZ3RoPjImJm9lLnB1c2goUmUuam9pbigiIikpfXJldHVybiBvZS5qb2luKCIiKX0oZWUseCk6IiIsbGUubGVuZ3RoPjAmJlYucHVzaCgiPFRhYmxlPiIrbGUrIjwvVGFibGU+IiksVi5wdXNoKGZ1bmN0aW9uIEFsKGcseCx3LFYpe2lmKCFnKXJldHVy''@;'; put 'put ''biIiO3ZhciBXPVtdO2lmKGdbIiFtYXJnaW5zIl0mJihXLnB1c2goIjxQYWdlU2V0dXA+IiksZ1siIW1hcmdpbnMiXS5oZWFkZXImJlcucHVzaCh6cigiSGVhZGVyIixudWxsLHsieDpNYXJnaW4iOmdbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLGdbIiFtYXJnaW5zIl0uZm9vdGVyJiZXLnB1c2go''@;'; put 'put ''enIoIkZvb3RlciIsbnVsbCx7Ing6TWFyZ2luIjpnWyIhbWFyZ2lucyJdLmZvb3Rlcn0pKSxXLnB1c2goenIoIlBhZ2VNYXJnaW5zIixudWxsLHsieDpCb3R0b20iOmdbIiFtYXJnaW5zIl0uYm90dG9tfHwiMC43NSIsIng6TGVmdCI6Z1siIW1hcmdpbnMiXS5sZWZ0fHwiMC43IiwieDpSaWdo''@;'; put 'put ''dCI6Z1siIW1hcmdpbnMiXS5yaWdodHx8IjAuNyIsIng6VG9wIjpnWyIhbWFyZ2lucyJdLnRvcHx8IjAuNzUifSkpLFcucHVzaCgiPC9QYWdlU2V0dXA+IikpLFYmJlYuV29ya2Jvb2smJlYuV29ya2Jvb2suU2hlZXRzJiZWLldvcmtib29rLlNoZWV0c1t3XSlpZihWLldvcmtib29rLlNoZWV0''@;'; put 'put ''c1t3XS5IaWRkZW4pVy5wdXNoKHpyKCJWaXNpYmxlIiwxPT1WLldvcmtib29rLlNoZWV0c1t3XS5IaWRkZW4/IlNoZWV0SGlkZGVuIjoiU2hlZXRWZXJ5SGlkZGVuIix7fSkpO2Vsc2V7Zm9yKHZhciBlZT0wO2VlPHcmJighVi5Xb3JrYm9vay5TaGVldHNbZWVdfHxWLldvcmtib29rLlNoZWV0''@;'; put 'put ''c1tlZV0uSGlkZGVuKTsrK2VlKTtlZT09dyYmVy5wdXNoKCI8U2VsZWN0ZWQvPiIpfWlmKCgoKChWfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiZXLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLEx0KGdbIiFncmlkbGluZXMiXSkmJlcucHVzaCgiPERv''@;'; put 'put ''Tm90RGlzcGxheUdyaWRsaW5lcy8+IiksZ1siIWZyZWV6ZSJdKXtXLnB1c2goIjxGcmVlemVQYW5lcy8+IiksVy5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIGxlPXhhKGdbIiFmcmVlemUiXSk7bGUucj4wJiYoVy5wdXNoKCRvKCJTcGxpdEhvcml6b250YWwiLCIiK2xlLnIpKSxXLnB1''@;'; put 'put ''c2goJG8oIlRvcFJvd0JvdHRvbVBhbmUiLCIiK2xlLnIpKSksbGUuYz4wJiYoVy5wdXNoKCRvKCJTcGxpdFZlcnRpY2FsIiwiIitsZS5jKSksVy5wdXNoKCRvKCJMZWZ0Q29sdW1uUmlnaHRQYW5lIiwiIitsZS5jKSkpfXJldHVybiBnWyIhcHJvdGVjdCJdJiYoVy5wdXNoKCRvKCJQcm90ZWN0''@;'; put 'put ''Q29udGVudHMiLCJUcnVlIikpLGdbIiFwcm90ZWN0Il0ub2JqZWN0cyYmVy5wdXNoKCRvKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSksZ1siIXByb3RlY3QiXS5zY2VuYXJpb3MmJlcucHVzaCgkbygiUHJvdGVjdFNjZW5hcmlvcyIsIlRydWUiKSksbnVsbD09Z1siIXByb3RlY3QiXS5zZWxl''@;'; put 'put ''Y3RMb2NrZWRDZWxsc3x8Z1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxscz9udWxsIT1nWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJiFnWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJlcucHVzaCgkbygiRW5hYmxlU2VsZWN0aW9uIiwiVW5sb2NrZWRDZWxs''@;'; put 'put ''cyIpKTpXLnB1c2goJG8oIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3MiLCJBbGxvd1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5z''@;'; put 'put ''IiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dEZWxldGVDb2xzIl0sWyJkZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dz''@;'; put 'put ''Il0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXtnWyIhcHJvdGVjdCJdW29lWzBdXSYmVy5wdXNoKCI8IitvZVsxXSsiLz4iKX0pKSwwPT1X''@;'; put 'put ''Lmxlbmd0aD8iIjp6cigiV29ya3NoZWV0T3B0aW9ucyIsVy5qb2luKCIiKSx7eG1sbnM6b2NfeH0pfShlZSwwLGcsdykpLFYuam9pbigiIil9ZnVuY3Rpb24gX3NlKGcseCl7eHx8KHg9e30pLGcuU1NGfHwoZy5TU0Y9Yi5nZXRfdGFibGUoKSksZy5TU0YmJihxKGIpLGIubG9hZF90YWJsZShn''@;'; put 'put ''LlNTRikseC5yZXZzc2Y9YmUoZy5TU0YpLHgucmV2c3NmW2cuU1NGWzY1NTM1XV09MCx4LnNzZj1nLlNTRixnLlN0eWxlcz17Rm9udHM6eC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxG''@;'; put 'put ''aWxsczp4LkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczp4LkJvcmRlcnM9W3t9XX0seC5jZWxsWGZzPVtdLHguY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHkxKHguY2VsbFhmcyxudWxsLHt9LHtyZXZzc2Y6e0dlbmVy''@;'; put 'put ''YWw6MH19KSk7dmFyIHc9W107dy5wdXNoKGZ1bmN0aW9uIGQ5KGcseCl7dmFyIHc9W107cmV0dXJuIGcuUHJvcHMmJncucHVzaChmdW5jdGlvbiB1NyhnLHgpe3ZhciB3PVtdO3JldHVybiB4ZShsNykubWFwKGZ1bmN0aW9uKFYpe2Zvcih2YXIgVz0wO1c8ZDEubGVuZ3RoOysrVylpZihkMVtX''@;'; put 'put ''XVsxXT09VilyZXR1cm4gZDFbV107Zm9yKFc9MDtXPEpoLmxlbmd0aDsrK1cpaWYoSmhbV11bMV09PVYpcmV0dXJuIEpoW1ddO3Rocm93IFZ9KS5mb3JFYWNoKGZ1bmN0aW9uKFYpe2lmKG51bGwhPWdbVlsxXV0pe3ZhciBXPXgmJnguUHJvcHMmJm51bGwhPXguUHJvcHNbVlsxXV0/eC5Qcm9w''@;'; put 'put ''c1tWWzFdXTpnW1ZbMV1dOyJkYXRlIj09PVZbMl0mJihXPW5ldyBEYXRlKFcpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIFc/Vz1TdHJpbmcoVyk6ITA9PT1XfHwhMT09PVc/Vz1XPyIxIjoiMCI6VyBpbnN0YW5jZW9mIERhdGUmJihXPW5l''@;'; put 'put ''dyBEYXRlKFcpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiIikpLHcucHVzaCgkbyhsN1tWWzFdXXx8VlsxXSxXKSl9fSksenIoIkRvY3VtZW50UHJvcGVydGllcyIsdy5qb2luKCIiKSx7eG1sbnM6b2Nfb30pfShnLlByb3BzLHgpKSxnLkN1c3Rwcm9wcyYmdy5wdXNoKGZ1bmN0''@;'; put 'put ''aW9uIFAxKGcseCl7dmFyIHc9WyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyJdLFY9IkN1c3RvbURvY3VtZW50UHJvcGVydGllcyIsVz1bXTtyZXR1cm4gZyYmeGUoZykuZm9yRWFjaChmdW5jdGlvbihlZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGcsZWUpKXtm''@;'; put 'put ''b3IodmFyIGxlPTA7bGU8ZDEubGVuZ3RoOysrbGUpaWYoZWU9PWQxW2xlXVsxXSlyZXR1cm47Zm9yKGxlPTA7bGU8SmgubGVuZ3RoOysrbGUpaWYoZWU9PUpoW2xlXVsxXSlyZXR1cm47Zm9yKGxlPTA7bGU8dy5sZW5ndGg7KytsZSlpZihlZT09d1tsZV0pcmV0dXJuO3ZhciBvZT1nW2VlXSxk''@;'; put 'put ''ZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIG9lPyhkZT0iZmxvYXQiLG9lPVN0cmluZyhvZSkpOiEwPT09b2V8fCExPT09b2U/KGRlPSJib29sZWFuIixvZT1vZT8iMSI6IjAiKTpvZT1TdHJpbmcob2UpLFcucHVzaCh6cihWYShlZSksb2UseyJkdDpkdCI6ZGV9KSl9fSkseCYmeGUoeCku''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihlZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsZWUpJiYoIWd8fCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZyxlZSkpKXt2YXIgbGU9eFtlZV0sb2U9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBsZT8o''@;'; put 'put ''b2U9ImZsb2F0IixsZT1TdHJpbmcobGUpKTohMD09PWxlfHwhMT09PWxlPyhvZT0iYm9vbGVhbiIsbGU9bGU/IjEiOiIwIik6bGUgaW5zdGFuY2VvZiBEYXRlPyhvZT0iZGF0ZVRpbWUudHoiLGxlPWxlLnRvSVNPU3RyaW5nKCkpOmxlPVN0cmluZyhsZSksVy5wdXNoKHpyKFZhKGVlKSxsZSx7''@;'; put 'put ''ImR0OmR0IjpvZX0pKX19KSwiPCIrVisnIHhtbG5zPSInK29jX28rJyI+JytXLmpvaW4oIiIpKyI8LyIrVisiPiJ9KGcuUHJvcHMsZy5DdXN0cHJvcHMpKSx3LmpvaW4oIiIpfShnLHgpKSx3LnB1c2goIiIpLHcucHVzaCgiIiksdy5wdXNoKCIiKTtmb3IodmFyIFY9MDtWPGcuU2hlZXROYW1l''@;'; put 'put ''cy5sZW5ndGg7KytWKXcucHVzaCh6cigiV29ya3NoZWV0Iix6WihWLHgsZykseyJzczpOYW1lIjpvaShnLlNoZWV0TmFtZXNbVl0pfSkpO3JldHVybiB3WzJdPWZ1bmN0aW9uIHlPKGcseCl7dmFyIFY9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpOYW1lPSJOb3JtYWwiPicsJzxBbGln''@;'; put 'put ''bm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIgc3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1iZXJGb3JtYXQvPiIsIjxQcm90ZWN0''@;'; put 'put ''aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4geC5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oVyxlZSl7dmFyIGxlPVtdO2lmKFcuYWxpZ25tZW50KXt2YXIgb2U9e307Vy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihvZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIpLFcuYWxpZ25t''@;'; put 'put ''ZW50LndyYXBUZXh0JiYob2VbInNzOldyYXBUZXh0Il09IjEiKSxXLmFsaWdubWVudC52ZXJ0aWNhbCYmKG9lWyJzczpWZXJ0aWNhbCJdPXd0KFcuYWxpZ25tZW50LnZlcnRpY2FsKSksVy5hbGlnbm1lbnQuaG9yaXpvbnRhbCYmKG9lWyJzczpIb3Jpem9udGFsIl09d3QoVy5hbGlnbm1lbnQu''@;'; put 'put ''aG9yaXpvbnRhbCkpLFcuYWxpZ25tZW50LmluZGVudCYmKG9lWyJzczpJbmRlbnQiXT1XLmFsaWdubWVudC5pbmRlbnQpLFcuYWxpZ25tZW50LnRleHRSb3RhdGlvbiYmKG9lWyJzczpSb3RhdGUiXT1XLmFsaWdubWVudC50ZXh0Um90YXRpb24pLGxlLnB1c2goenIoIkFsaWdubWVudCIsbnVs''@;'; put 'put ''bCxvZSkpfWU6aWYobnVsbCE9Vy5mb250SWQpe3ZhciBkZT14LkZvbnRzW1cuZm9udElkXTtpZighZGUpYnJlYWsgZTt2YXIgRGU9eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJzczpTaXplIjoiMTIifSxSZT0hMTtkZS5ib2xkJiYoUmU9ITAsRGVbInNzOkJvbGQiXT0iMSIpLGRlLml0YWxp''@;'; put 'put ''YyYmKFJlPSEwLERlWyJzczpJdGFsaWMiXT0iMSIpLGRlLnN0cmlrZSYmKFJlPSEwLERlWyJzczpTdHJpa2VUaHJvdWdoIl09IjEiKSxudWxsIT1kZS51bmRlcmxpbmUmJihSZT0hMCxEZVsic3M6VW5kZXJsaW5lIl09cE9bZGUudW5kZXJsaW5lXXx8KGRlLnVuZGVybGluZT8iU2luZ2xlIjoi''@;'; put 'put ''Tm9uZSIpKSxudWxsIT1kZS5zeiYmKFJlPSEwLERlWyJzczpTaXplIl09ZGUuc3opLG51bGwhPWRlLm5hbWUmJihSZT0hMCxEZVsic3M6Rm9udE5hbWUiXT1kZS5uYW1lKSxkZS5jb2xvciYmbnVsbCE9ZGUuY29sb3IucmdiJiYoUmU9ITAsRGVbInNzOkNvbG9yIl09IiMiKygibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGRlLmNvbG9yLnJnYj8iMDAwMDAwIitkZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOmRlLmNvbG9yLnJnYikuc2xpY2UoLTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhPZihkZS52YWxpZ24pPi0xJiYoRGVbInNzOlZlcnRpY2FsQWxpZ24iXT13dChkZS52YWxpZ24pKyJzY3JpcHQi''@;'; put 'put ''KSxSZSYmbGUucHVzaCh6cigiRm9udCIsbnVsbCxEZSkpfWU6aWYoVy5maWxsSWQ+MCl7dmFyIFZlPXguRmlsbHNbVy5maWxsSWRdO2lmKCFWZXx8IVZlLmZnQ29sb3J8fG51bGw9PVZlLmZnQ29sb3IucmdiKWJyZWFrIGU7bGUucHVzaCh6cigiSW50ZXJpb3IiLG51bGwseyJzczpQYXR0ZXJu''@;'; put 'put ''IjpnVVtWZS5wYXR0ZXJuVHlwZV18fCJTb2xpZCIsInNzOkNvbG9yIjoiIyIrKCJudW1iZXIiPT10eXBlb2YgVmUuZmdDb2xvci5yZ2I/IjAwIitWZS5mZ0NvbG9yLnJnYi50b1N0cmluZygxNik6VmUuZmdDb2xvci5yZ2IpLnNsaWNlKC02KX0pKX1sZS5wdXNoKHpyKCJOdW1iZXJGb3JtYXQi''@;'; put 'put ''LG51bGwseyJzczpGb3JtYXQiOm9pKGIuX3RhYmxlW1cubnVtRm10SWRdKX0pKTt2YXIgR2U9eyJzczpJRCI6InMiKygyMStlZSl9O1cuc3R5bGUmJihHZVsic3M6TmFtZSJdPVcuc3R5bGUpLFYucHVzaCh6cigiU3R5bGUiLGxlLmpvaW4oIiIpLEdlKSl9KSx6cigiU3R5bGVzIixWLmpvaW4o''@;'; put 'put ''IiIpKX0oMCx4KSx3WzNdPWZ1bmN0aW9uIHZzZShnKXtpZighKChnfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIHg9Zy5Xb3JrYm9vay5OYW1lcyx3PVtdLFY9MDtWPHgubGVuZ3RoOysrVil7dmFyIFc9eFtWXTtudWxsPT1XLlNoZWV0JiYoVy5OYW1lLm1hdGNo''@;'; put 'put ''KC9eX3hsZm5cLi8pfHx3LnB1c2gobjYoVykpKX1yZXR1cm4genIoIk5hbWVzIix3LmpvaW4oIiIpKX0oZyksa2krenIoIldvcmtib29rIix3LmpvaW4oIiIpLHt4bWxuczpvY19zcywieG1sbnM6byI6b2NfbywieG1sbnM6eCI6b2NfeCwieG1sbnM6c3MiOm9jX3NzLCJ4bWxuczpkdCI6InV1''@;'; put 'put ''aWQ6QzJGNDEwMTAtNjVCMy0xMWQxLUEyOUYtMDBBQTAwQzE0ODgyIiwieG1sbnM6aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSl9ZnVuY3Rpb24gVVooZyx4LHcsVil7dmFyIFc9dyxlZT1bXSxsZT14LnNsaWNlKHgubCx4LmwrVyk7aWYoViYmVi5lbmMmJlYuZW5j''@;'; put 'put ''Lmluc2l0dSYmbGUubGVuZ3RoPjApc3dpdGNoKGcubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3MiOmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJSREluZm8iOmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JFeGNsIjpjYXNlIkVPRiI6Vi5lbmMuaW5zaXR1KG1lKHtsZW5n''@;'; put 'put ''dGg6bGUubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpWLmVuYy5pbnNpdHUobWUoe2xlbmd0aDo0fSksInNraXAiKSxsZT1CdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShsZS5zbGljZSgwLDQpKSxCdWZmZXIuZnJvbShWLmVuYy5pbnNpdHUobGUuc2xpY2UoNCkp''@;'; put 'put ''KV0pO2JyZWFrO2RlZmF1bHQ6bGU9Vi5lbmMuaW5zaXR1KGxlKX1BcnJheS5pc0FycmF5KHgpJiYhQXJyYXkuaXNBcnJheShsZSkmJihsZT1BcnJheS5mcm9tKGxlKSksZWUucHVzaChsZSkseC5sKz1XO2Zvcih2YXIgb2U9ZzlbcmEoeCx4LmwpXSxkZT0wO251bGwhPW9lJiYiQ29udGludWUi''@;'; put 'put ''PT09b2Uubi5zbGljZSgwLDgpOylXPXJhKHgseC5sKzIpLGRlPXgubCs0LFYmJlYuZW5jJiZWLmVuYy5pbnNpdHUmJlYuZW5jLmluc2l0dShtZSh7bGVuZ3RoOjR9KSwic2tpcCIpLCJDb250aW51ZUZydCI9PW9lLm4/ZGUrPTQ6IkNvbnRpbnVlRnJ0Ij09b2Uubi5zbGljZSgwLDExKSYmKGRl''@;'; put 'put ''Kz0xMixWJiZWLmVuYyYmVi5lbmMuaW5zaXR1JiZWLmVuYy5pbnNpdHUobWUoe2xlbmd0aDo4fSksInNraXAiKSksbGU9eC5zbGljZShkZSx4LmwrNCtXKSxWJiZWLmVuYyYmVi5lbmMuaW5zaXR1JiZsZS5sZW5ndGg+MCYmKGxlPVYuZW5jLmluc2l0dShsZSkpLGVlLnB1c2gobGUpLHgubCs9''@;'; put 'put ''NCtXLG9lPWc5W3JhKHgseC5sKV07dmFyIERlPUwoZWUpO0dzKERlLDApO3ZhciBSZT0wO0RlLmxlbnM9W107Zm9yKHZhciBWZT0wO1ZlPGVlLmxlbmd0aDsrK1ZlKURlLmxlbnMucHVzaChSZSksUmUrPWVlW1ZlXS5sZW5ndGg7aWYoRGUubGVuZ3RoPHcpdGhyb3ciWExTIFJlY29yZCAiKyhn''@;'; put 'put ''JiZnLm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK0RlLmxlbmd0aCsiIDwgIit3O3JldHVybiBnLmYoRGUsRGUubGVuZ3RoLFYpfWZ1bmN0aW9uIFNmKGcseCx3KXtpZigieiIhPT1nLnQmJmcuWEYpe3ZhciBWPTA7dHJ5e1Y9Zy56fHxnLlhGLm51bUZtdElkfHwwLHguY2VsbE5GJiYoZy56PWIu''@;'; put 'put ''X3RhYmxlW1ZdKX1jYXRjaChlZSl7aWYoeC5XVEYpdGhyb3cgZWV9aWYoIXh8fCExIT09eC5jZWxsVGV4dCl0cnl7Zy53PSJlIj09PWcudD9nLnd8fFYwW2cudl06MD09PVZ8fCJHZW5lcmFsIj09Vj8ibiI9PT1nLnQ/KDB8Zy52KT09PWcudj9iLl9nZW5lcmFsX2ludChnLnYpOmIuX2dlbmVy''@;'; put 'put ''YWxfbnVtKGcudik6Yi5fZ2VuZXJhbChnLnYpOmIuZm9ybWF0KFYsZy52LHtkYXRlMTkwNDohIXcsZGF0ZU5GOngmJnguZGF0ZU5GfSl9Y2F0Y2goZWUpe2lmKHguV1RGKXRocm93IGVlfWlmKHguY2VsbERhdGVzJiZWJiYibiI9PWcudCYmYi5pc19kYXRlKGIuX3RhYmxlW1ZdfHxTdHJpbmco''@;'; put 'put ''VikpKXt2YXIgVz1iLnBhcnNlX2RhdGVfY29kZShnLnYpO1cmJihnLnQ9ImQiLGcudj1uZXcgRGF0ZShXLnksVy5tLTEsVy5kLFcuSCxXLk0sVy5TLFcudSkpfX19ZnVuY3Rpb24gc0UoZyx4LHcpe3JldHVybnt2OmcsaXhmZTp4LHQ6d319dmFyIFdaPWZ1bmN0aW9uKGcseCx3KXt4WyIhb2Jq''@;'; put 'put ''ZWN0cyJdPWd9LGg5X1NJPSJlMDg1OWZmMmY5NGY2ODEwYWI5MTA4MDAyYjI3YjNkOSIsaDlfRFNJPSIwMmQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSI7ZnVuY3Rpb24gcjYoZyx4KXt2YXIgdyxWLFcsZWU7aWYoeHx8KHg9e30pLHZFKHgpLE4oKSx4LmNvZGVwYWdlJiZFKHguY29k''@;'; put 'put ''ZXBhZ2UpLGcuRnVsbFBhdGhzKXtpZih1ZS5maW5kKGcsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO3c9dWUuZmluZChnLCIhQ29tcE9iaiIpLFY9dWUuZmluZChnLCIvV29ya2Jvb2siKXx8dWUuZmluZChnLCIvQm9vayIpfWVs''@;'; put 'put ''c2V7c3dpdGNoKHgudHlwZSl7Y2FzZSJiYXNlNjQiOmc9dShoZS5kZWNvZGUoZykpO2JyZWFrO2Nhc2UiYmluYXJ5IjpnPXUoZyk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoZyl8fChnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGcpKX1H''@;'; put 'put ''cyhnLDApLFY9e2NvbnRlbnQ6Z319aWYodyYmZnVuY3Rpb24gYnNlKGcpe3ZhciB4PXt9LHc9Zy5jb250ZW50O2lmKHcubD0yOCx4LkFuc2lVc2VyVHlwZT13LnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLHguQW5zaUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBPcihnKXtyZXR1cm4gc18o''@;'; put 'put ''ZywxKX0odyksdy5sZW5ndGgtdy5sPD00KXJldHVybiB4O3ZhciBWPXcucmVhZF9zaGlmdCg0KTtpZigwPT1WfHxWPjQwfHwody5sLT00LHguUmVzZXJ2ZWQxPXcucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksdy5sZW5ndGgtdy5sPD00KXx8MTkwNzUwNTY1MiE9PShWPXcucmVhZF9zaGlm''@;'; put 'put ''dCg0KSl8fCh4LlVuaWNvZGVDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gbF8oZyl7cmV0dXJuIHNfKGcsMil9KHcpLDA9PShWPXcucmVhZF9zaGlmdCg0KSl8fFY+NDApKXJldHVybiB4O3cubC09NCx4LlJlc2VydmVkMj13LnJlYWRfc2hpZnQoMCwibHB3c3RyIil9KHcpLHguYm9va1Byb3Bz''@;'; put 'put ''JiYheC5ib29rU2hlZXRzKVc9e307ZWxzZXt2YXIgbGU9X2U/ImJ1ZmZlciI6ImFycmF5IjtpZihWJiZWLmNvbnRlbnQpVz1mdW5jdGlvbiB3c2UoZyx4KXt2YXIgVmUsZXQsSmUsZnQsQXQsenQsdz17b3B0czp7fX0sVj17fSxXPXguZGVuc2U/W106e30sZWU9e30sbGU9e30sb2U9bnVsbCxk''@;'; put 'put ''ZT1bXSxEZT0iIixSZT17fSxHZT0iIixSdD17fSxTdD1bXSxTbj1bXSxscj1bXSxtbj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfSxWaWV3czpbe31dfSxkcj17fSxHbj17Rm9udHM6W119LEhuPWZ1bmN0aW9uKE9pKXtyZXR1cm4gT2k8OD92bFtPaV06T2k8NjQmJmxyW09pLThd''@;'; put 'put ''fHx2bFtPaV19LGhyPWZ1bmN0aW9uKE9pLFJzKXt2YXIgb3UsVHM9T2kuWEYuZGF0YTtUcyYmKFRzLnBhdHRlcm5UeXBlfHxudWxsIT1Ucy5pY3ZGb3JlKSYmUnMmJlJzLmNlbGxTdHlsZXMmJihPaS5zPXt9LE9pLnMucGF0dGVyblR5cGU9VHMucGF0dGVyblR5cGUsT2kuWEYuZm9udCYmVHQo''@;'; put 'put ''T2kucyxPaS5YRi5mb250KSxUcy5mV3JhcCYmKChPaS5zLmFsaWdubWVudHx8KE9pLnMuYWxpZ25tZW50PXt9KSkud3JhcFRleHQ9ITApLFRzLmZTaHJpbmtUb0ZpdCYmKChPaS5zLmFsaWdubWVudHx8KE9pLnMuYWxpZ25tZW50PXt9KSkuc2hyaW5rVG9GaXQ9ITApLFRzLmhhbGlnbiYmKChP''@;'; put 'put ''aS5zLmFsaWdubWVudHx8KE9pLnMuYWxpZ25tZW50PXt9KSkuaG9yaXpvbnRhbD1Ucy5oYWxpZ24pLFRzLnZhbGlnbiYmKChPaS5zLmFsaWdubWVudHx8KE9pLnMuYWxpZ25tZW50PXt9KSkudmVydGljYWw9VHMudmFsaWduKSxUcy5jSW5kZW50JiYoKE9pLnMuYWxpZ25tZW50fHwoT2kucy5h''@;'; put 'put ''bGlnbm1lbnQ9e30pKS5pbmRlbnQ9VHMuY0luZGVudCksNjQhPVRzLmljdkZvcmUmJjY1IT1Ucy5pY3ZCYWNrJiYoKG91PWkyKEhuKFRzLmljdkZvcmUpKSkmJihPaS5zLmZnQ29sb3I9e3JnYjpvdX0pLChvdT1pMihIbihUcy5pY3ZCYWNrKSkpJiYoT2kucy5iZ0NvbG9yPXtyZ2I6b3V9KSks''@;'; put 'put ''WyJMZWZ0IiwiUmlnaHQiLCJUb3AiLCJCb3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKHQwKXtUc1siZGciK3QwXSYmKE9pLnNbdDAudG9Mb3dlckNhc2UoKV09e3N0eWxlOnppW1RzWyJkZyIrdDBdXSxjb2xvcjp7cmdiOmkyKEhuKFRzWyJpY3YiK3QwXSkpfX0pfSkpfSxObj1mdW5jdGlvbihP''@;'; put 'put ''aSxScyxUcyl7aWYoIShaaT4xfHxUcy5zaGVldFJvd3MmJk9pLnI+PVRzLnNoZWV0Um93cykpe2lmKFRzLmNlbGxTdHlsZXMmJlJzLlhGJiZScy5YRi5kYXRhJiZocihScyxUcyksZGVsZXRlIFJzLml4ZmUsZGVsZXRlIFJzLlhGLFZlPU9pLEdlPUtyKE9pKSwoIWxlfHwhbGUuc3x8IWxlLmUp''@;'; put 'put ''JiYobGU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSksT2kucjxsZS5zLnImJihsZS5zLnI9T2kuciksT2kuYzxsZS5zLmMmJihsZS5zLmM9T2kuYyksT2kucisxPmxlLmUuciYmKGxlLmUucj1PaS5yKzEpLE9pLmMrMT5sZS5lLmMmJihsZS5lLmM9T2kuYysxKSxUcy5jZWxsRm9ybXVsYSYm''@;'; put 'put ''UnMuZilmb3IodmFyIG91PTA7b3U8U3QubGVuZ3RoOysrb3UpaWYoIShTdFtvdV1bMF0ucy5jPk9pLmN8fFN0W291XVswXS5zLnI+T2kucnx8U3Rbb3VdWzBdLmUuYzxPaS5jfHxTdFtvdV1bMF0uZS5yPE9pLnIpKXtScy5GPUppKFN0W291XVswXSksKFN0W291XVswXS5zLmMhPU9pLmN8fFN0''@;'; put 'put ''W291XVswXS5zLnIhPU9pLnIpJiZkZWxldGUgUnMuZixScy5mJiYoUnMuZj0iIitKdShTdFtvdV1bMV0sbGUsT2ksTG4sdHIpKTticmVha31Ucy5kZW5zZT8oV1tPaS5yXXx8KFdbT2kucl09W10pLFdbT2kucl1bT2kuY109UnMpOldbR2VdPVJzfX0sdHI9e2VuYzohMSxzYmNjaDowLHNuYW1l''@;'; put 'put ''czpbXSxzaGFyZWRmOlJ0LGFycmF5ZjpTdCxycnRhYmlkOltdLGxhc3R1c2VyOiIiLGJpZmY6OCxjb2RlcGFnZTowLHdpbmxvY2tlZDowLGNlbGxTdHlsZXM6ISF4JiYhIXguY2VsbFN0eWxlcyxXVEY6ISF4JiYhIXgud3RmfTt0ci5wYXNzd29yZD14LnBhc3N3b3JkP3gucGFzc3dvcmQ6IlZl''@;'; put 'put ''bHZldFN3ZWF0c2hvcCI7dmFyIFBpLHZpPW51bGwscWk9W10sdGE9W10sSWk9W10sU3I9W10scHI9ITEsTG49W107TG4uU2hlZXROYW1lcz10ci5zbmFtZXMsTG4uc2hhcmVkZj10ci5zaGFyZWRmLExuLmFycmF5Zj10ci5hcnJheWYsTG4ubmFtZXM9W10sTG4uWFRJPVtdO3ZhciBRaSxQcj0i''@;'; put 'put ''IixaaT0wLF9pPTAscGE9W10sYW89W107dHIuY29kZXBhZ2U9MTIwMCxGKDEyMDApO2Zvcih2YXIgRG89ITE7Zy5sPGcubGVuZ3RoLTE7KXt2YXIgamE9Zy5sLG1vPWcucmVhZF9zaGlmdCgyKTtpZih0ciYmdHIuZW5jJiZ0ci5lbmMuaW5zaXR1JiZ0ci5lbmMuaW5zaXR1KG1lKFswLDBdKSwi''@;'; put 'put ''aGVhZGVyLTAiKSwwPT09bW8mJiJFT0YiPT09UHIpYnJlYWs7dmFyIGNvPWcubD09PWcubGVuZ3RoPzA6Zy5yZWFkX3NoaWZ0KDIpO3RyJiZ0ci5lbmMmJnRyLmVuYy5pbnNpdHUmJnRyLmVuYy5pbnNpdHUobWUoWzAsMF0pLCJsZW5ndGgtMCIpO3ZhciBCaT1nOVttb107aWYoQmkmJkJpLmYp''@;'; put 'put ''e2lmKHguYm9va1NoZWV0cyYmIkJvdW5kU2hlZXQ4Ij09PVByJiYiQm91bmRTaGVldDgiIT09QmkubilicmVhaztpZihQcj1CaS5uLDI9PT1CaS5yfHwxMj09Qmkucil7dmFyIGtsPWcucmVhZF9zaGlmdCgyKTtpZihjby09Mix0ciYmdHIuZW5jJiZ0ci5lbmMuaW5zaXR1JiZ0ci5lbmMuaW5z''@;'; put 'put ''aXR1KG1lKFswLDBdKSksIXRyLmVuYyYma2whPT1tbyYmKCgyNTUma2wpPDw4fGtsPj44KSE9PW1vKXRocm93IG5ldyBFcnJvcigicnQgbWlzbWF0Y2g6ICIra2wrIiE9Iittbyk7MTI9PUJpLnImJihnLmwrPTEwLGNvLT0xMCx0ciYmdHIuZW5jJiZ0ci5lbmMuaW5zaXR1JiZ0ci5lbmMuaW5z''@;'; put 'put ''aXR1KG1lKFswLDAsMCwwLDAsMCwwLDAsMCwwXSkpKX12YXIgT249VVooQmksZyxjbyx0ciksd3M9QmkubjtpZigwPT1aaSYmIkJPRiIhPXdzKWNvbnRpbnVlO3N3aXRjaCh3cyl7Y2FzZSJEYXRlMTkwNCI6dy5vcHRzLkRhdGUxOTA0PW1uLldCUHJvcHMuZGF0ZTE5MDQ9T247YnJlYWs7Y2Fz''@;'; put 'put ''ZSJXcml0ZVByb3RlY3QiOncub3B0cy5Xcml0ZVByb3RlY3Q9ITA7YnJlYWs7Y2FzZSJGaWxlUGFzcyI6aWYodHIuZW5jfHwoZy5sPTAsWmk9MCksdHIuZW5jPU9uLCF4LnBhc3N3b3JkJiZudWxsPT1Pbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVk''@;'; put 'put ''Iik7aWYobnVsbD09T24udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFPbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIlBhc3N3b3JkIGlzIGluY29ycmVjdCIpO2JyZWFrO2Nhc2UiV3JpdGVBY2Nlc3MiOnRyLmxhc3R1c2VyPU9uO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiRmlsZVNoYXJpbmciOmNhc2UiVGVtcGxhdGUiOmNhc2UiQm9va0Jvb2wiOmNhc2UiVXNlc0VMRnMiOmNhc2UiTVRSU2V0dGluZ3MiOmNhc2UiVW5jYWxjZWQiOmNhc2UiRXh0U1NUIjpjYXNlIkJvb2tFeHQiOmNhc2UiUmljaFRleHRTdHJlYW0iOmNhc2UiQmtIaW0iOmNhc2Ui''@;'; put 'put ''SW5kZXgiOmNhc2UiUHJvdDRSZXYiOmNhc2UiUHJvdDRSZXZQYXNzIjpicmVhaztjYXNlIkNvZGVQYWdlIjp2YXIgUHM9TnVtYmVyKE9uKTtzd2l0Y2goUHMpe2Nhc2UgMjEwMTA6UHM9MTIwMDticmVhaztjYXNlIDMyNzY4OlBzPTFlNDticmVhaztjYXNlIDMyNzY5OlBzPTEyNTJ9Rih0ci5j''@;'; put 'put ''b2RlcGFnZT1QcyksRG89ITA7YnJlYWs7Y2FzZSJSUlRhYklkIjp0ci5ycnRhYmlkPU9uO2JyZWFrO2Nhc2UiV2luUHJvdGVjdCI6dHIud2lubG9ja2VkPU9uO2JyZWFrO2Nhc2UiUmVmcmVzaEFsbCI6Y2FzZSJDYWxjQ291bnQiOmNhc2UiQ2FsY0RlbHRhIjpjYXNlIkNhbGNJdGVyIjpjYXNl''@;'; put 'put ''IkNhbGNNb2RlIjpjYXNlIkNhbGNQcmVjaXNpb24iOmNhc2UiQ2FsY1NhdmVSZWNhbGMiOncub3B0c1t3c109T247YnJlYWs7Y2FzZSJDYWxjUmVmTW9kZSI6dHIuQ2FsY1JlZk1vZGU9T247YnJlYWs7Y2FzZSJGb3JjZUZ1bGxDYWxjdWxhdGlvbiI6dy5vcHRzLkZ1bGxDYWxjPU9uO2JyZWFr''@;'; put 'put ''O2Nhc2UiV3NCb29sIjpPbi5mRGlhbG9nJiYoV1siIXR5cGUiXT0iZGlhbG9nIiksT24uZkJlbG93fHwoKFdbIiFvdXRsaW5lIl18fChXWyIhb3V0bGluZSJdPXt9KSkuYWJvdmU9ITApLE9uLmZSaWdodHx8KChXWyIhb3V0bGluZSJdfHwoV1siIW91dGxpbmUiXT17fSkpLmxlZnQ9ITApO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiWEYiOk9uLmZvbnQ9R24uRm9udHNbT24uaWZudDw0P09uLmlmbnQ6T24uaWZudC0xXSxTbi5wdXNoKE9uKTticmVhaztjYXNlIlN1cEJvb2siOkxuLnB1c2goW09uXSksTG5bTG4ubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIkV4dGVybk5hbWUiOkxuW0xuLmxlbmd0aC0x''@;'; put 'put ''XS5wdXNoKE9uKTticmVhaztjYXNlIkxibCI6UWk9e05hbWU6T24uTmFtZSxSZWY6SnUoT24ucmdjZSxsZSxudWxsLExuLHRyKX0sT24uaXRhYj4wJiYoUWkuU2hlZXQ9T24uaXRhYi0xKSxMbi5uYW1lcy5wdXNoKFFpKSxMblswXXx8KExuWzBdPVtdLExuWzBdLlhUST1bXSksTG5bTG4ubGVu''@;'; put 'put ''Z3RoLTFdLnB1c2goT24pLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1Pbi5OYW1lJiZPbi5pdGFiPjAmJk9uLnJnY2UmJk9uLnJnY2VbMF0mJk9uLnJnY2VbMF1bMF0mJiJQdGdBcmVhM2QiPT1Pbi5yZ2NlWzBdWzBdWzBdJiYoYW9bT24uaXRhYi0xXT17cmVmOkppKE9uLnJnY2VbMF1bMF1b''@;'; put 'put ''MV1bMl0pfSk7YnJlYWs7Y2FzZSJFeHRlcm5Db3VudCI6dHIuRXh0ZXJuQ291bnQ9T247YnJlYWs7Y2FzZSJFeHRlcm5TaGVldCI6MD09TG4ubGVuZ3RoJiYoTG5bMF09W10sTG5bMF0uWFRJPVtdKSxMbltMbi5sZW5ndGgtMV0uWFRJPUxuW0xuLmxlbmd0aC0xXS5YVEkuY29uY2F0KE9uKSxM''@;'; put 'put ''bi5YVEk9TG4uWFRJLmNvbmNhdChPbik7YnJlYWs7Y2FzZSJOYW1lQ210IjppZih0ci5iaWZmPDgpYnJlYWs7bnVsbCE9UWkmJihRaS5Db21tZW50PU9uWzFdKTticmVhaztjYXNlIlByb3RlY3QiOldbIiFwcm90ZWN0Il09T247YnJlYWs7Y2FzZSJQYXNzd29yZCI6MCE9PU9uJiZ0ci5XVEYm''@;'; put 'put ''JmNvbnNvbGUuZXJyb3IoIlBhc3N3b3JkIHZlcmlmaWVyOiAiK09uKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjplZVtPbi5wb3NdPU9uLHRyLnNuYW1lcy5wdXNoKE9uLm5hbWUpO2JyZWFrO2Nhc2UiRU9GIjppZihXWyIhZ3JpZGxpbmVzIl09IXZpfHx2aS5ncmlkLHZpPW51bGwsLS1aaSli''@;'; put 'put ''cmVhaztpZihsZS5lKXtpZihsZS5lLnI+MCYmbGUuZS5jPjApe2lmKGxlLmUuci0tLGxlLmUuYy0tLFdbIiFyZWYiXT1KaShsZSkseC5zaGVldFJvd3MmJnguc2hlZXRSb3dzPD1sZS5lLnIpe3ZhciBaYz1sZS5lLnI7bGUuZS5yPXguc2hlZXRSb3dzLTEsV1siIWZ1bGxyZWYiXT1XWyIhcmVm''@;'; put 'put ''Il0sV1siIXJlZiJdPUppKGxlKSxsZS5lLnI9WmN9bGUuZS5yKyssbGUuZS5jKyt9cWkubGVuZ3RoPjAmJihXWyIhbWVyZ2VzIl09cWkpLHRhLmxlbmd0aD4wJiZXWih0YSxXKSxJaS5sZW5ndGg+MCYmKFdbIiFjb2xzIl09SWkpLFNyLmxlbmd0aD4wJiYoV1siIXJvd3MiXT1TciksbW4uU2hl''@;'; put 'put ''ZXRzLnB1c2goZHIpfSIiPT09RGU/UmU9VzpWW0RlXT1XLFc9eC5kZW5zZT9bXTp7fTticmVhaztjYXNlIkJPRiI6aWYoOD09PXRyLmJpZmYmJih0ci5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVttb118fHs1MTI6Miw3Njg6MywxMDI0OjQsMTI4MDo1LDE1MzY6OCwyOjIsNzoyfVtPbi5CSUZG''@;'; put 'put ''VmVyXXx8OCksdHIuYmlmZmd1ZXNzPTA9PU9uLkJJRkZWZXIsMD09T24uQklGRlZlciYmNDA5Nj09T24uZHQmJih0ci5iaWZmPTUsRG89ITAsRih0ci5jb2RlcGFnZT0yODU5MSkpLDg9PXRyLmJpZmYmJjA9PU9uLkJJRkZWZXImJjE2PT1Pbi5kdCYmKHRyLmJpZmY9MiksWmkrKylicmVhaztp''@;'; put 'put ''ZihXPXguZGVuc2U/W106e30sdHIuYmlmZjw4JiYhRG8mJihEbz0hMCxGKHRyLmNvZGVwYWdlPXguY29kZXBhZ2V8fDEyNTIpKSx0ci5iaWZmPDV8fDA9PU9uLkJJRkZWZXImJjQwOTY9PU9uLmR0KXsiIj09PURlJiYoRGU9IlNoZWV0MSIpLGxlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07''@;'; put 'put ''dmFyIERjPXtwb3M6Zy5sLWNvLG5hbWU6RGV9O2VlW0RjLnBvc109RGMsdHIuc25hbWVzLnB1c2goRGUpfWVsc2UgRGU9KGVlW2phXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Pbi5kdCYmKFdbIiF0eXBlIl09ImNoYXJ0IiksNjQ9PU9uLmR0JiYoV1siIXR5cGUiXT0ibWFjcm8iKSxxaT1bXSx0''@;'; put 'put ''YT1bXSx0ci5hcnJheWY9U3Q9W10sSWk9W10sU3I9W10scHI9ITEsZHI9e0hpZGRlbjooZWVbamFdfHx7aHM6MH0pLmhzLG5hbWU6RGV9O2JyZWFrO2Nhc2UiTnVtYmVyIjpjYXNlIkJJRkYyTlVNIjpjYXNlIkJJRkYySU5UIjoiY2hhcnQiPT1XWyIhdHlwZSJdJiYoeC5kZW5zZT8oV1tPbi5y''@;'; put 'put ''XXx8W10pW09uLmNdOldbS3Ioe2M6T24uYyxyOk9uLnJ9KV0pJiYrK09uLmMsQXQ9e2l4ZmU6T24uaXhmZSxYRjpTbltPbi5peGZlXXx8e30sdjpPbi52YWwsdDoibiJ9LF9pPjAmJihBdC56PXBhW0F0Lml4ZmU+PjgmNjNdKSxTZihBdCx4LHcub3B0cy5EYXRlMTkwNCksTm4oe2M6T24uYyxy''@;'; put 'put ''Ok9uLnJ9LEF0LHgpO2JyZWFrO2Nhc2UiQm9vbEVyciI6QXQ9e2l4ZmU6T24uaXhmZSxYRjpTbltPbi5peGZlXSx2Ok9uLnZhbCx0Ok9uLnR9LF9pPjAmJihBdC56PXBhW0F0Lml4ZmU+PjgmNjNdKSxTZihBdCx4LHcub3B0cy5EYXRlMTkwNCksTm4oe2M6T24uYyxyOk9uLnJ9LEF0LHgpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiUksiOkF0PXtpeGZlOk9uLml4ZmUsWEY6U25bT24uaXhmZV0sdjpPbi5ya251bSx0OiJuIn0sX2k+MCYmKEF0Lno9cGFbQXQuaXhmZT4+OCY2M10pLFNmKEF0LHgsdy5vcHRzLkRhdGUxOTA0KSxObih7YzpPbi5jLHI6T24ucn0sQXQseCk7YnJlYWs7Y2FzZSJNdWxSayI6Zm9y''@;'; put 'put ''KHZhciBJYz1Pbi5jO0ljPD1Pbi5DOysrSWMpe3ZhciBVMT1Pbi5ya3JlY1tJYy1Pbi5jXVswXTtBdD17aXhmZTpVMSxYRjpTbltVMV0sdjpPbi5ya3JlY1tJYy1Pbi5jXVsxXSx0OiJuIn0sX2k+MCYmKEF0Lno9cGFbQXQuaXhmZT4+OCY2M10pLFNmKEF0LHgsdy5vcHRzLkRhdGUxOTA0KSxO''@;'; put 'put ''bih7YzpJYyxyOk9uLnJ9LEF0LHgpfWJyZWFrO2Nhc2UiRm9ybXVsYSI6aWYoIlN0cmluZyI9PU9uLnZhbCl7b2U9T247YnJlYWt9aWYoKEF0PXNFKE9uLnZhbCxPbi5jZWxsLml4ZmUsT24udHQpKS5YRj1TbltBdC5peGZlXSx4LmNlbGxGb3JtdWxhKXt2YXIgaGM9T24uZm9ybXVsYTtpZiho''@;'; put 'put ''YyYmaGNbMF0mJmhjWzBdWzBdJiYiUHRnRXhwIj09aGNbMF1bMF1bMF0pe3ZhciBlbj1oY1swXVswXVsxXVswXSxNbj1oY1swXVswXVsxXVsxXSxVbj1Lcih7cjplbixjOk1ufSk7UnRbVW5dP0F0LmY9IiIrSnUoT24uZm9ybXVsYSxsZSxPbi5jZWxsLExuLHRyKTpBdC5GPSgoeC5kZW5zZT8o''@;'; put 'put ''V1tlbl18fFtdKVtNbl06V1tVbl0pfHx7fSkuRn1lbHNlIEF0LmY9IiIrSnUoT24uZm9ybXVsYSxsZSxPbi5jZWxsLExuLHRyKX1faT4wJiYoQXQuej1wYVtBdC5peGZlPj44JjYzXSksU2YoQXQseCx3Lm9wdHMuRGF0ZTE5MDQpLE5uKE9uLmNlbGwsQXQseCksb2U9T247YnJlYWs7Y2FzZSJT''@;'; put 'put ''dHJpbmciOmlmKCFvZSl0aHJvdyBuZXcgRXJyb3IoIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxhIik7b2UudmFsPU9uLChBdD1zRShPbixvZS5jZWxsLml4ZmUsInMiKSkuWEY9U25bQXQuaXhmZV0seC5jZWxsRm9ybXVsYSYmKEF0LmY9IiIrSnUob2UuZm9ybXVsYSxsZSxvZS5jZWxs''@;'; put 'put ''LExuLHRyKSksX2k+MCYmKEF0Lno9cGFbQXQuaXhmZT4+OCY2M10pLFNmKEF0LHgsdy5vcHRzLkRhdGUxOTA0KSxObihvZS5jZWxsLEF0LHgpLG9lPW51bGw7YnJlYWs7Y2FzZSJBcnJheSI6U3QucHVzaChPbik7dmFyIHdpPUtyKE9uWzBdLnMpO2lmKGV0PXguZGVuc2U/KFdbT25bMF0ucy5y''@;'; put 'put ''XXx8W10pW09uWzBdLnMuY106V1t3aV0seC5jZWxsRm9ybXVsYSYmZXQpe2lmKCFvZXx8IXdpfHwhZXQpYnJlYWs7ZXQuZj0iIitKdShPblsxXSxsZSxPblswXSxMbix0ciksZXQuRj1KaShPblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZigheC5jZWxsRm9ybXVsYSlicmVhaztpZihHZSl7''@;'; put 'put ''aWYoIW9lKWJyZWFrO1J0W0tyKG9lLmNlbGwpXT1PblswXSwoKGV0PXguZGVuc2U/KFdbb2UuY2VsbC5yXXx8W10pW29lLmNlbGwuY106V1tLcihvZS5jZWxsKV0pfHx7fSkuZj0iIitKdShPblswXSxsZSxWZSxMbix0cil9YnJlYWs7Y2FzZSJMYWJlbFNzdCI6QXQ9c0UoZGVbT24uaXNzdF0u''@;'; put 'put ''dCxPbi5peGZlLCJzIiksZGVbT24uaXNzdF0uaCYmKEF0Lmg9ZGVbT24uaXNzdF0uaCksQXQuWEY9U25bQXQuaXhmZV0sX2k+MCYmKEF0Lno9cGFbQXQuaXhmZT4+OCY2M10pLFNmKEF0LHgsdy5vcHRzLkRhdGUxOTA0KSxObih7YzpPbi5jLHI6T24ucn0sQXQseCksZGVbT24uaXNzdF0uUiYm''@;'; put 'put ''KEF0LlI9ZGVbT24uaXNzdF0uUi5tYXAoZnVuY3Rpb24oX2Epe3ZhciBPaT1ybihfYSk7cmV0dXJuIF9hLnM9PUduLkZvbnRzWzBdJiYoT2kucz1BdC5zKSxPaX0pKTticmVhaztjYXNlIkJsYW5rIjp4LnNoZWV0U3R1YnMmJihBdD17aXhmZTpPbi5peGZlLFhGOlNuW09uLml4ZmVdLHQ6Inoi''@;'; put 'put ''fSxfaT4wJiYoQXQuej1wYVtBdC5peGZlPj44JjYzXSksU2YoQXQseCx3Lm9wdHMuRGF0ZTE5MDQpLE5uKHtjOk9uLmMscjpPbi5yfSxBdCx4KSk7YnJlYWs7Y2FzZSJNdWxCbGFuayI6aWYoeC5zaGVldFN0dWJzKWZvcih2YXIgY3I9T24uYztjcjw9T24uQzsrK2NyKXt2YXIgUmk9T24uaXhm''@;'; put 'put ''ZVtjci1Pbi5jXTtBdD17aXhmZTpSaSxYRjpTbltSaV0sdDoieiJ9LF9pPjAmJihBdC56PXBhW0F0Lml4ZmU+PjgmNjNdKSxTZihBdCx4LHcub3B0cy5EYXRlMTkwNCksTm4oe2M6Y3IscjpPbi5yfSxBdCx4KX1icmVhaztjYXNlIlJTdHJpbmciOmNhc2UiTGFiZWwiOmNhc2UiQklGRjJTVFIi''@;'; put 'put ''OihBdD1zRShPbi52YWwsT24uaXhmZSwicyIpKS5YRj1TbltBdC5peGZlXSxfaT4wJiYoQXQuej1wYVtBdC5peGZlPj44JjYzXSksU2YoQXQseCx3Lm9wdHMuRGF0ZTE5MDQpLE5uKHtjOk9uLmMscjpPbi5yfSxBdCx4KTticmVhaztjYXNlIkRpbWVuc2lvbnMiOjE9PT1aaSYmKGxlPU9uKTti''@;'; put 'put ''cmVhaztjYXNlIlNTVCI6KGRlPU9uKS5mb3JFYWNoKGZ1bmN0aW9uKF9hKXtfYS5fUj8oX2EuX1JbMF0mJl9hLl9SWzBdLmlkeD4wJiZfYS5fUi51bnNoaWZ0KHtpZHg6MCxpZm50OjB9KSxfYS5SPV9hLl9SLm1hcChmdW5jdGlvbihPaSxScyl7cmV0dXJue3Q6InMiLHY6X2EudC5zbGljZShP''@;'; put 'put ''aS5pZHgsKF9hLl9SW1JzKzFdfHx7fSkuaWR4KSxzOkduLkZvbnRzW09pLmlmbnQ8ND9PaS5pZm50Ok9pLmlmbnQtMV19fSkseC5jZWxsSFRNTCYmKF9hLmg9T2coX2EuUikpKTp4LmNlbGxIVE1MJiYoX2EuaD1mYShfYS50KSksZGVsZXRlIF9hLl9SfSk7YnJlYWs7Y2FzZSJGb3JtYXQiOmlm''@;'; put 'put ''KDQ9PXRyLmJpZmYpe3BhW19pKytdPU9uWzFdO2Zvcih2YXIgeXI9MDt5cjxfaSsxNjMmJmIuX3RhYmxlW3lyXSE9T25bMV07Kyt5cik7eXI+PTE2MyYmYi5sb2FkKE9uWzFdLF9pKzE2Myl9ZWxzZSBiLmxvYWQoT25bMV0sT25bMF0pO2JyZWFrO2Nhc2UiQklGRjJGT1JNQVQiOnBhW19pKytd''@;'; put 'put ''PU9uO2Zvcih2YXIgTGk9MDtMaTxfaSsxNjMmJmIuX3RhYmxlW0xpXSE9T247KytMaSk7TGk+PTE2MyYmYi5sb2FkKE9uLF9pKzE2Myk7YnJlYWs7Y2FzZSJNZXJnZUNlbGxzIjpxaT1xaS5jb25jYXQoT24pO2JyZWFrO2Nhc2UiT2JqIjp0YVtPbi5jbW9bMF1dPXRyLmxhc3RvYmo9T247YnJl''@;'; put 'put ''YWs7Y2FzZSJUeE8iOnRyLmxhc3RvYmouVHhPPU9uO2JyZWFrO2Nhc2UiSW1EYXRhIjp0ci5sYXN0b2JqLkltRGF0YT1PbjticmVhaztjYXNlIkhMaW5rIjpmb3IoZnQ9T25bMF0ucy5yO2Z0PD1PblswXS5lLnI7KytmdClmb3IoSmU9T25bMF0ucy5jO0plPD1PblswXS5lLmM7KytKZSkoZXQ9''@;'; put 'put ''eC5kZW5zZT8oV1tmdF18fFtdKVtKZV06V1tLcih7YzpKZSxyOmZ0fSldKSYmKGV0Lmw9T25bMV0pO2JyZWFrO2Nhc2UiSExpbmtUb29sdGlwIjpmb3IoZnQ9T25bMF0ucy5yO2Z0PD1PblswXS5lLnI7KytmdClmb3IoSmU9T25bMF0ucy5jO0plPD1PblswXS5lLmM7KytKZSkoZXQ9eC5kZW5z''@;'; put 'put ''ZT8oV1tmdF18fFtdKVtKZV06V1tLcih7YzpKZSxyOmZ0fSldKSYmZXQubCYmKGV0LmwuVG9vbHRpcD1PblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZih0ci5iaWZmPD01JiZ0ci5iaWZmPj0yKWJyZWFrO2V0PXguZGVuc2U/KFdbT25bMF0ucl18fFtdKVtPblswXS5jXTpXW0tyKE9uWzBdKV07''@;'; put 'put ''dmFyIFFhPXRhW09uWzJdXTtldHx8KHguZGVuc2U/KFdbT25bMF0ucl18fChXW09uWzBdLnJdPVtdKSxldD1XW09uWzBdLnJdW09uWzBdLmNdPXt0OiJ6In0pOmV0PVdbS3IoT25bMF0pXT17dDoieiJ9LGxlLmUucj1NYXRoLm1heChsZS5lLnIsT25bMF0uciksbGUucy5yPU1hdGgubWluKGxl''@;'; put 'put ''LnMucixPblswXS5yKSxsZS5lLmM9TWF0aC5tYXgobGUuZS5jLE9uWzBdLmMpLGxlLnMuYz1NYXRoLm1pbihsZS5zLmMsT25bMF0uYykpLGV0LmN8fChldC5jPVtdKSxldC5jLnB1c2goe2E6T25bMV0sdDpRYS5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiQ2xydENs''@;'; put 'put ''aWVudCI6Y2FzZSJIZWFkZXIiOmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hW''@;'; put 'put ''REV4IjpjYXNlIlN4SXZkIjpjYXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2Ui''@;'; put 'put ''RmVhdHVyZTEyIjpjYXNlIkxpc3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3Qi''@;'; put 'put ''OmNhc2UiQ29uZEZtdDEyIjpjYXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENv''@;'; put 'put ''bk5hbWUiOmNhc2UiU1hQSSI6Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJp''@;'; put 'put ''bnRHcmlkIjpjYXNlIlByaW50U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJ''@;'; put 'put ''bmZvIjpjYXNlIk9sZU9iamVjdFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4i''@;'; put 'put ''OmNhc2UiRGJPclBhcmFtUXJ5IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2Ui''@;'; put 'put ''SW50ZXJmYWNlSGRyIjpjYXNlIk1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVn''@;'; put 'put ''aW4iOmNhc2UiVXNlclNWaWV3RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOmtSKFNuW09uLml4ZmVdLE9uLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighdHIuY2VsbFN0eWxlcylicmVhaztmb3IoO09uLmU+PU9uLnM7''@;'; put 'put ''KUlpW09uLmUtLV09e3dpZHRoOk9uLncvMjU2LGxldmVsOk9uLmxldmVsfHwwLGhpZGRlbjohISgxJk9uLmZsYWdzKX0scHJ8fChwcj0hMCksbTEoSWlbT24uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBOaT17fTtudWxsIT1Pbi5sZXZlbCYmKFNyW09uLnJdPU5pLE5pLmxldmVsPU9uLmxl''@;'; put 'put ''dmVsKSxPbi5oaWRkZW4mJihTcltPbi5yXT1OaSxOaS5oaWRkZW49ITApLE9uLmhwdCYmKFNyW09uLnJdPU5pLE5pLmhwdD1Pbi5ocHQsTmkuaHB4PWxoKE9uLmhwdCkpLE9uLml4ZmUmJihTcltPbi5yXT1OaSxocihBdD17aXhmZTpPbi5peGZlLFhGOlNuW09uLml4ZmVdfHx7fSx2OjAsdDoi''@;'; put 'put ''biJ9LHgpLE5pLnM9QXQucyk7YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOldbIiFtYXJnaW5zIl18fFIzKFdbIiFtYXJnaW5zIl09e30pLFdbIiFtYXJnaW5zIl1bd3Muc2xpY2UoMCwtNikudG9Mb3dl''@;'; put 'put ''ckNhc2UoKV09T247YnJlYWs7Y2FzZSJTZWxlY3Rpb24iOldbIiFzZWwiXT1PbjticmVhaztjYXNlIlNldHVwIjpXWyIhbWFyZ2lucyJdfHxSMyhXWyIhbWFyZ2lucyJdPXt9KSxXWyIhbWFyZ2lucyJdLmhlYWRlcj1Pbi5oZWFkZXIsV1siIW1hcmdpbnMiXS5mb290ZXI9T24uZm9vdGVyO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiV2luZG93MiI6T24uUlRMJiYobW4uVmlld3NbMF0uUlRMPSEwKSx2aT1PbjticmVhaztjYXNlIkNvdW50cnkiOnp0PU9uO2JyZWFrO2Nhc2UiRm9udCI6T24uaWN2JiZIbihPbi5pY3YpJiYoT24uY29sb3I9e3JnYjppMihIbihPbi5pY3YpKX0pLGRlbGV0ZSBPbi5pY3YsMD09''@;'; put 'put ''R24uRm9udHMubGVuZ3RoJiZTbShPbiksR24uRm9udHMucHVzaChPbik7YnJlYWs7Y2FzZSJQYWxldHRlIjpscj1PbjticmVhaztjYXNlIlRoZW1lIjpQaT1PbjticmVhaztjYXNlIkNvZGVOYW1lIjpEZT9kci5Db2RlTmFtZT1Pbnx8ZHIubmFtZTptbi5XQlByb3BzLkNvZGVOYW1lPU9ufHwi''@;'; put 'put ''VGhpc1dvcmtib29rIjticmVhaztjYXNlIlBhbmUiOih2aXx8e30pLmZyb3plbiYmKFdbIiFmcmVlemUiXT1Lcih7cjpPbi55fHwwLGM6T24ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3RhcnRCbG9jayI6''@;'; put 'put ''Y2FzZSJFbmRCbG9jayI6Y2FzZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpjYXNlIkNydE1s''@;'; put 'put ''RnJ0IjpjYXNlIkNydE1sRnJ0Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90QXJlYSI6Y2Fz''@;'; put 'put ''ZSJQbG90R3Jvd3RoIjpjYXNlIlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2FzZSJTaHRQcm9w''@;'; put 'put ''cyI6Y2FzZSJEZWZhdWx0VGV4dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2VyRm9ybWF0Ijpj''@;'; put 'put ''YXNlIlN0YXJ0T2JqZWN0IjpjYXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50IjpjYXNlIlBv''@;'; put 'put ''cyI6Y2FzZSJWYWx1ZVJhbmdlIjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2UiUXNpIjpjYXNl''@;'; put 'put ''IlFzaWYiOmNhc2UiUXNpciI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNlIlNvcnREYXRh''@;'; put 'put ''IjpjYXNlIlNoYXBlUHJvcHNTdHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpjYXNlIlBMViI6''@;'; put 'put ''Y2FzZSJIb3Jpem9udGFsUGFnZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6Y2FzZSJGcnRX''@;'; put 'put ''cmFwcGVyIjpicmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xSIjpjYXNlIkJJ''@;'; put 'put ''RkYyRk1UQ05UIjpjYXNlIkJJRkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJTyI6Y2FzZSJE''@;'; put 'put ''Q29uQmluIjpjYXNlIlBpY0YiOmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51IjpjYXNlIkxQciI6''@;'; put 'put ''Y2FzZSJMaXN0T2JqIjpjYXNlIkxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKHguV1RGKXRocm93IlVucmVjb2duaXpl''@;'; put 'put ''ZCBSZWNvcmQgIitCaS5ufX19fX1lbHNlIGcubCs9Y28sdHImJnRyLmVuYyYmdHIuZW5jLmluc2l0dSYmdHIuZW5jLmluc2l0dShtZSh7bGVuZ3RoOmNvfSkpfXJldHVybiB3LlNoZWV0TmFtZXM9eGUoZWUpLnNvcnQoZnVuY3Rpb24oX2EsT2kpe3JldHVybiBOdW1iZXIoX2EpLU51bWJlcihP''@;'; put 'put ''aSl9KS5tYXAoZnVuY3Rpb24oX2Epe3JldHVybiBlZVtfYV0ubmFtZX0pLHguYm9va1NoZWV0c3x8KHcuU2hlZXRzPVYpLCF3LlNoZWV0TmFtZXMubGVuZ3RoJiZSZVsiIXJlZiJdPyh3LlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksdy5TaGVldHMmJih3LlNoZWV0cy5TaGVldDE9UmUpKTp3''@;'; put 'put ''LlByZWFtYmxlPVJlLHcuU2hlZXRzJiZhby5mb3JFYWNoKGZ1bmN0aW9uKF9hLE9pKXt3LlNoZWV0c1t3LlNoZWV0TmFtZXNbT2ldXVsiIWF1dG9maWx0ZXIiXT1fYX0pLHcuU3RyaW5ncz1kZSx3LlNTRj1iLmdldF90YWJsZSgpLHRyLmVuYyYmKHcuRW5jcnlwdGlvbj10ci5lbmMpLFBpJiYo''@;'; put 'put ''dy5UaGVtZXM9UGkpLHcuTWV0YWRhdGE9e30sdm9pZCAwIT09enQmJih3Lk1ldGFkYXRhLkNvdW50cnk9enQpLExuLm5hbWVzLmxlbmd0aD4wJiYobW4uTmFtZXM9TG4ubmFtZXMpLHcuV29ya2Jvb2s9bW4sd30oVi5jb250ZW50LHgpO2Vsc2UgaWYoKGVlPXVlLmZpbmQoZywiUGVyZmVjdE9m''@;'; put 'put ''ZmljZV9NQUlOIikpJiZlZS5jb250ZW50KVc9RU0udG9fd29ya2Jvb2soZWUuY29udGVudCwoeC50eXBlPWxlLHgpKTtlbHNle2lmKCEoZWU9dWUuZmluZChnLCJOYXRpdmVDb250ZW50X01BSU4iKSl8fCFlZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgV29ya2Jvb2sg''@;'; put 'put ''c3RyZWFtIik7Vz1FTS50b193b3JrYm9vayhlZS5jb250ZW50LCh4LnR5cGU9bGUseCkpfXguYm9va1ZCQSYmZy5GdWxsUGF0aHMmJnVlLmZpbmQoZywiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYoVy52YmFyYXc9ZnVuY3Rpb24gaXgoZyl7dmFyIHg9dWUudXRpbHMuY2ZiX25ldyh7''@;'; put 'put ''cm9vdDoiUiJ9KTtyZXR1cm4gZy5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbih3LFYpe2lmKCIvIiE9PXcuc2xpY2UoLTEpJiZ3Lm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBXPXcucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5yZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAw''@;'; put 'put ''MDAqLywiIik7dWUudXRpbHMuY2ZiX2FkZCh4LFcsZy5GaWxlSW5kZXhbVl0uY29udGVudCl9fSksdWUud3JpdGUoeCl9KGcpKX12YXIgb2U9e307cmV0dXJuIGcuRnVsbFBhdGhzJiZmdW5jdGlvbiBaWihnLHgsdyl7dmFyIFY9dWUuZmluZChnLCIhRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRp''@;'; put 'put ''b24iKTtpZihWJiZWLnNpemU+MCl0cnl7dmFyIFc9JGwoVixlNyxoOV9EU0kpO2Zvcih2YXIgZWUgaW4gVyl4W2VlXT1XW2VlXX1jYXRjaChEZSl7aWYody5XVEYpdGhyb3cgRGV9dmFyIGxlPXVlLmZpbmQoZywiIVN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKGxlJiZsZS5zaXplPjApdHJ5e3Zh''@;'; put 'put ''ciBvZT0kbChsZSxYdSxoOV9TSSk7Zm9yKHZhciBkZSBpbiBvZSludWxsPT14W2RlXSYmKHhbZGVdPW9lW2RlXSl9Y2F0Y2goRGUpe2lmKHcuV1RGKXRocm93IERlfXguSGVhZGluZ1BhaXJzJiZ4LlRpdGxlc09mUGFydHMmJih1Yyh4LkhlYWRpbmdQYWlycyx4LlRpdGxlc09mUGFydHMseCx3''@;'; put 'put ''KSxkZWxldGUgeC5IZWFkaW5nUGFpcnMsZGVsZXRlIHguVGl0bGVzT2ZQYXJ0cyl9KGcsb2UseCksVy5Qcm9wcz1XLkN1c3Rwcm9wcz1vZSx4LmJvb2tGaWxlcyYmKFcuY2ZiPWcpLFd9dmFyIFlwPXswOntuOiJCcnRSb3dIZHIiLGY6ZnVuY3Rpb24gTEwoZyx4KXt2YXIgdz17fSxWPWcubCt4''@;'; put 'put ''O3cucj1nLnJlYWRfc2hpZnQoNCksZy5sKz00O3ZhciBXPWcucmVhZF9zaGlmdCgyKTtnLmwrPTE7dmFyIGVlPWcucmVhZF9zaGlmdCgxKTtyZXR1cm4gZy5sPVYsNyZlZSYmKHcubGV2ZWw9NyZlZSksMTYmZWUmJih3LmhpZGRlbj0hMCksMzImZWUmJih3LmhwdD1XLzIwKSx3fX0sMTp7bjoi''@;'; put 'put ''QnJ0Q2VsbEJsYW5rIixmOmZ1bmN0aW9uIHpnKGcpe3JldHVybltzbChnKV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gSlcoZyl7cmV0dXJuW3NsKGcpLHlkKGcpLCJuIl19fSwzOntuOiJCcnRDZWxsRXJyb3IiLGY6ZnVuY3Rpb24gWVcoZyl7cmV0dXJuW3NsKGcpLGcucmVhZF9z''@;'; put 'put ''aGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gelcoZyl7cmV0dXJuW3NsKGcpLGcucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gS1coZyl7cmV0dXJuW3NsKGcpLE5sKGcpLCJuIl19fSw2OntuOiJCcnRDZWxsU3Qi''@;'; put 'put ''LGY6ZnVuY3Rpb24gcW0oZyl7cmV0dXJuW3NsKGcpLGNjKGcpLCJzdHIiXX19LDc6e246IkJydENlbGxJc3N0IixmOmZ1bmN0aW9uIGNzZShnKXtyZXR1cm5bc2woZyksZy5yZWFkX3NoaWZ0KDQpLCJzIl19fSw4OntuOiJCcnRGbWxhU3RyaW5nIixmOmZ1bmN0aW9uIGpMKGcseCx3KXt2YXIg''@;'; put 'put ''Vj1nLmwreCxXPXNsKGcpO1cucj13WyIhcm93Il07dmFyIGxlPVtXLGNjKGcpLCJzdHIiXTtpZih3LmNlbGxGb3JtdWxhKXtnLmwrPTI7dmFyIG9lPVZtKGcsVi1nLmwsdyk7bGVbM109SnUob2UsbnVsbCxXLHcuc3VwYm9va3Msdyl9ZWxzZSBnLmw9VjtyZXR1cm4gbGV9fSw5OntuOiJCcnRG''@;'; put 'put ''bWxhTnVtIixmOmZ1bmN0aW9uIGhzZShnLHgsdyl7dmFyIFY9Zy5sK3gsVz1zbChnKTtXLnI9d1siIXJvdyJdO3ZhciBsZT1bVyxObChnKSwibiJdO2lmKHcuY2VsbEZvcm11bGEpe2cubCs9Mjt2YXIgb2U9Vm0oZyxWLWcubCx3KTtsZVszXT1KdShvZSxudWxsLFcsdy5zdXBib29rcyx3KX1l''@;'; put 'put ''bHNlIGcubD1WO3JldHVybiBsZX19LDEwOntuOiJCcnRGbWxhQm9vbCIsZjpmdW5jdGlvbiBRVyhnLHgsdyl7dmFyIFY9Zy5sK3gsVz1zbChnKTtXLnI9d1siIXJvdyJdO3ZhciBsZT1bVyxnLnJlYWRfc2hpZnQoMSksImIiXTtpZih3LmNlbGxGb3JtdWxhKXtnLmwrPTI7dmFyIG9lPVZtKGcs''@;'; put 'put ''Vi1nLmwsdyk7bGVbM109SnUob2UsbnVsbCxXLHcuc3VwYm9va3Msdyl9ZWxzZSBnLmw9VjtyZXR1cm4gbGV9fSwxMTp7bjoiQnJ0Rm1sYUVycm9yIixmOmZ1bmN0aW9uIGRzZShnLHgsdyl7dmFyIFY9Zy5sK3gsVz1zbChnKTtXLnI9d1siIXJvdyJdO3ZhciBsZT1bVyxnLnJlYWRfc2hpZnQo''@;'; put 'put ''MSksImUiXTtpZih3LmNlbGxGb3JtdWxhKXtnLmwrPTI7dmFyIG9lPVZtKGcsVi1nLmwsdyk7bGVbM109SnUob2UsbnVsbCxXLHcuc3VwYm9va3Msdyl9ZWxzZSBnLmw9VjtyZXR1cm4gbGV9fSwxMjp7bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBIeChnKXtyZXR1cm5bb28oZyldfX0s''@;'; put 'put ''MTM6e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24gWG0oZyl7cmV0dXJuW29vKGcpLHlkKGcpLCJuIl19fSwxNDp7bjoiQnJ0U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBITChnKXtyZXR1cm5bb28oZyksZy5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7bjoiQnJ0U2hvcnRCb29sIixmOmZ1bmN0''@;'; put 'put ''aW9uIFdXKGcpe3JldHVybltvbyhnKSxnLnJlYWRfc2hpZnQoMSksImIiXX19LDE2OntuOiJCcnRTaG9ydFJlYWwiLGY6Tkx9LDE3OntuOiJCcnRTaG9ydFN0IixmOmZ1bmN0aW9uIEJMKGcpe3JldHVybltvbyhnKSxjYyhnKSwic3RyIl19fSwxODp7bjoiQnJ0U2hvcnRJc3N0IixmOmZ1bmN0''@;'; put 'put ''aW9uIGdiKGcpe3JldHVybltvbyhnKSxnLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntuOiJCcnRTU1RJdGVtIixmOkVzfSwyMDp7bjoiQnJ0UENESU1pc3NpbmcifSwyMTp7bjoiQnJ0UENESU51bWJlciJ9LDIyOntuOiJCcnRQQ0RJQm9vbGVhbiJ9LDIzOntuOiJCcnRQQ0RJRXJyb3IifSwy''@;'; put 'put ''NDp7bjoiQnJ0UENESVN0cmluZyJ9LDI1OntuOiJCcnRQQ0RJRGF0ZXRpbWUifSwyNjp7bjoiQnJ0UENESUluZGV4In0sMjc6e246IkJydFBDRElBTWlzc2luZyJ9LDI4OntuOiJCcnRQQ0RJQU51bWJlciJ9LDI5OntuOiJCcnRQQ0RJQUJvb2xlYW4ifSwzMDp7bjoiQnJ0UENESUFFcnJvciJ9''@;'; put 'put ''LDMxOntuOiJCcnRQQ0RJQVN0cmluZyJ9LDMyOntuOiJCcnRQQ0RJQURhdGV0aW1lIn0sMzM6e246IkJydFBDUlJlY29yZCJ9LDM0OntuOiJCcnRQQ1JSZWNvcmREdCJ9LDM1OntuOiJCcnRGUlRCZWdpbiJ9LDM2OntuOiJCcnRGUlRFbmQifSwzNzp7bjoiQnJ0QUNCZWdpbiJ9LDM4OntuOiJC''@;'; put 'put ''cnRBQ0VuZCJ9LDM5OntuOiJCcnROYW1lIixmOmZ1bmN0aW9uIGlPKGcseCx3KXt2YXIgVj1nLmwreDtnLmwrPTQsZy5sKz0xO3ZhciBXPWcucmVhZF9zaGlmdCg0KSxlZT1CcyhnKSxsZT1Hb2UoZywwLHcpLG9lPUd1KGcpO2cubD1WO3ZhciBkZT17TmFtZTplZSxQdGc6bGV9O3JldHVybiBX''@;'; put 'put ''PDI2ODQzNTQ1NSYmKGRlLlNoZWV0PVcpLG9lJiYoZGUuQ29tbWVudD1vZSksZGV9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQiLGY6ZnVuY3Rpb24gU1UoZyx4LHcpe3ZhciBWPXt9O1Yuc3o9Zy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LzIwO3ZhciBXPWFfKGcpO3N3aXRjaChXLmZCb2xkJiYoVi5ib2xkPTEpLFcuZkl0YWxpYyYmKFYuaXRhbGljPTEpLFcuZlVuZGVybGluZSYmKFYudW5kZXJsaW5lPTEpLFcuZkNvbmRlbnNlJiYoVi5jb25kZW5zZT0xKSxXLmZFeHRlbmQmJihWLmV4dGVuZD0xKSxXLmZTaGFkb3cmJihWLnNo''@;'; put 'put ''YWRvdz0xKSxXLmZPdXRsaW5lJiYoVi5vdXRsaW5lPTEpLFcuZlN0cmlrZW91dCYmKFYuc3RyaWtlPTEpLDcwMD09PWcucmVhZF9zaGlmdCgyKSYmKFYuYm9sZD0xKSxnLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpWLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpWLnZhbGlnbj0ic3ViIn12''@;'; put 'put ''YXIgbGU9Zy5yZWFkX3NoaWZ0KDEpOzAhPWxlJiYoVi51bmRlcmxpbmU9bGUpO3ZhciBvZT1nLnJlYWRfc2hpZnQoMSk7b2U+MCYmKFYuZmFtaWx5PW9lKTt2YXIgZGU9Zy5yZWFkX3NoaWZ0KDEpO3N3aXRjaChkZT4wJiYoVi5jaGFyc2V0PWRlKSxnLmwrKyxWLmNvbG9yPXlnKGcpLGcucmVh''@;'; put 'put ''ZF9zaGlmdCgxKSl7Y2FzZSAxOlYuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOlYuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIFYubmFtZT1jYyhnKSxWfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlvbiBDVShnLHgpe3JldHVybltnLnJlYWRfc2hpZnQoMiksY2MoZyldfX0sNDU6e246IkJy''@;'; put 'put ''dEZpbGwiLGY6ZnVuY3Rpb24gTG9lKGcseCl7dmFyIHc9Zy5sK3gsVj17fSxXPWcucmVhZF9zaGlmdCg0KTtpZig0MCE9Vyl7Vi5wYXR0ZXJuVHlwZT1WTVtXXTt2YXIgZWU9eWcoZyk7NjQhPWVlLmluZGV4JiYoVi5mZ0NvbG9yPWVlKTt2YXIgbGU9eWcoZyk7NjUhPWxlLmluZGV4JiYoVi5i''@;'; put 'put ''Z0NvbG9yPWxlKX1lbHNle2cubCs9MTYsZy5yZWFkX3NoaWZ0KDQpLE5sKGcpLE5sKGcpLE5sKGcpLE5sKGcpLE5sKGcpO2Zvcih2YXIgb2U9Zy5yZWFkX3NoaWZ0KDQpLGRlPVtdLERlPTA7RGU8b2U7KytEZSlkZS5wdXNoKE1VKGcpKX1yZXR1cm4gZy5sPXcsVn19LDQ2OntuOiJCcnRCb3Jk''@;'; put 'put ''ZXIiLGY6ZnVuY3Rpb24gT29lKGcpe3ZhciB4PXt9O2cucmVhZF9zaGlmdCgxKTt2YXIgdz1NbShnKTsibm9uZSIhPXcuc3R5bGUmJih4LnRvcD13KTt2YXIgVj1NbShnKTsibm9uZSIhPVYuc3R5bGUmJih4LmJvdHRvbT1WKTt2YXIgVz1NbShnKTsibm9uZSIhPVcuc3R5bGUmJih4LmxlZnQ9''@;'; put 'put ''Vyk7dmFyIGVlPU1tKGcpOyJub25lIiE9ZWUuc3R5bGUmJih4LnJpZ2h0PWVlKTt2YXIgbGU9TW0oZyk7cmV0dXJuIm5vbmUiIT1sZS5zdHlsZSYmKHguZGlhZz1sZSkseH19LDQ3OntuOiJCcnRYRiIsZjpmdW5jdGlvbiB4VShnLHgpe3ZhciB3PWcubCt4LFY9e30sVz1nLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksZWU9Zy5yZWFkX3NoaWZ0KDIpLGxlPWcucmVhZF9zaGlmdCgyKSxvZT1nLnJlYWRfc2hpZnQoMiksZGU9Zy5yZWFkX3NoaWZ0KDIpLERlPWcucmVhZF9zaGlmdCgxKTtnLnJlYWRfc2hpZnQoMSk7dmFyIFJlPWcucmVhZF9zaGlmdCgyKSxWZT1nLnJlYWRfc2hpZnQoMSk7Zy5sPXcsVi54''@;'; put 'put ''ZklkPVcsVi5udW1GbXRJZD1lZSxWLmZvbnRJZD1sZSxWLmZpbGxJZD1vZSxWLmJvcmRlcklkPWRlLDEmVmUmJjAhPVYubnVtRm10SWQmJihWLmFwcGx5TnVtYmVyRm9ybWF0PSEwKSxWLmFsaWdubWVudD17fSxEZT4wJiYoVi5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPURlKTt2YXIgR2U9ITE7''@;'; put 'put ''cmV0dXJuIDcmUmUmJihHZT0hMCxWLmFsaWdubWVudC5ob3Jpem9udGFsPVVfWzcmUmVdKSxWLmFsaWdubWVudC52ZXJ0aWNhbD1XX1tSZT4+PjMmN10sVi5hbGlnbm1lbnQudmVydGljYWwmJihHZT0hMCksUmU+Pj42JjEmJihWLmFsaWdubWVudC53cmFwVGV4dD0hMCksUmU+Pj44JjEmJihW''@;'; put 'put ''LmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksR2V8fGRlbGV0ZSBWLmFsaWdubWVudCw0JlZlJiZHZSYmKFYuYXBwbHlBbGlnbm1lbnQ9ITApLFZ9fSw0ODp7bjoiQnJ0U3R5bGUifSw0OTp7bjoiQnJ0Q2VsbE1ldGEifSw1MDp7bjoiQnJ0VmFsdWVNZXRhIn0sNTE6e246IkJydE1kYiJ9LDUy''@;'; put 'put ''OntuOiJCcnRCZWdpbkZtZCJ9LDUzOntuOiJCcnRFbmRGbWQifSw1NDp7bjoiQnJ0QmVnaW5NZHgifSw1NTp7bjoiQnJ0RW5kTWR4In0sNTY6e246IkJydEJlZ2luTWR4VHVwbGUifSw1Nzp7bjoiQnJ0RW5kTWR4VHVwbGUifSw1ODp7bjoiQnJ0TWR4TWJySXN0ciJ9LDU5OntuOiJCcnRTdHIi''@;'; put 'put ''fSw2MDp7bjoiQnJ0Q29sSW5mbyIsZjp1Zn0sNjI6e246IkJydENlbGxSU3RyaW5nIn0sNjM6e246IkJydENhbGNDaGFpbkl0ZW0kIixmOmZ1bmN0aW9uIE5VKGcpe3ZhciB4PXt9O3guaT1nLnJlYWRfc2hpZnQoNCk7dmFyIHc9e307dy5yPWcucmVhZF9zaGlmdCg0KSx3LmM9Zy5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLHgucj1Lcih3KTt2YXIgVj1nLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImViYmKHgubD0iMSIpLDgmViYmKHguYT0iMSIpLHh9fSw2NDp7bjoiQnJ0RFZhbCIsZjpmdW5jdGlvbiBHTChnLHgsdyl7dmFyIFY9Zy5sK3gsVz1nLnJlYWRfc2hpZnQoNCksZWU9ZWYoZyksbGU9R3UoZyks''@;'; put 'put ''b2U9R3UoZyksZGU9R3UoZyksRGU9R3UoZyksUmU9Qm0oZyx4LHcpLFZlPWcubDxWP0JtKGcseCx3KTpudWxsLEdlPTE1JlcsZXQ9e3Q6YTlbR2VdLHNxcmZ4OmVlLHM6W2xlLG9lLGRlLERlXX07cmV0dXJuIFJlJiYoZXQuZjE9UmUpLFZlJiYoZXQuZjI9VmUpLDA9PUdlfHwzPT1HZXx8Nz09''@;'; put 'put ''R2V8fChldC5vcD1CeFtXPj4yMCYxNV0pLGV0fX0sNjU6e246IkJydFN4dmNlbGxOdW0ifSw2Njp7bjoiQnJ0U3h2Y2VsbFN0ciJ9LDY3OntuOiJCcnRTeHZjZWxsQm9vbCJ9LDY4OntuOiJCcnRTeHZjZWxsRXJyIn0sNjk6e246IkJydFN4dmNlbGxEYXRlIn0sNzA6e246IkJydFN4dmNlbGxO''@;'; put 'put ''aWwifSwxMjg6e246IkJydEZpbGVWZXJzaW9uIn0sMTI5OntuOiJCcnRCZWdpblNoZWV0In0sMTMwOntuOiJCcnRFbmRTaGVldCJ9LDEzMTp7bjoiQnJ0QmVnaW5Cb29rIixmOm9sLHA6MH0sMTMyOntuOiJCcnRFbmRCb29rIn0sMTMzOntuOiJCcnRCZWdpbldzVmlld3MifSwxMzQ6e246IkJy''@;'; put 'put ''dEVuZFdzVmlld3MifSwxMzU6e246IkJydEJlZ2luQm9va1ZpZXdzIn0sMTM2OntuOiJCcnRFbmRCb29rVmlld3MifSwxMzc6e246IkJydEJlZ2luV3NWaWV3IixmOmZ1bmN0aW9uIFlMKGcpe3ZhciB4PWcucmVhZF9zaGlmdCgyKTtyZXR1cm4gZy5sKz0yOCx7UlRMOjMyJngsZ3JpZDohISg0''@;'; put 'put ''JngpfX19LDEzODp7bjoiQnJ0RW5kV3NWaWV3In0sMTM5OntuOiJCcnRCZWdpbkNzVmlld3MifSwxNDA6e246IkJydEVuZENzVmlld3MifSwxNDE6e246IkJydEJlZ2luQ3NWaWV3In0sMTQyOntuOiJCcnRFbmRDc1ZpZXcifSwxNDM6e246IkJydEJlZ2luQnVuZGxlU2hzIn0sMTQ0OntuOiJC''@;'; put 'put ''cnRFbmRCdW5kbGVTaHMifSwxNDU6e246IkJydEJlZ2luU2hlZXREYXRhIn0sMTQ2OntuOiJCcnRFbmRTaGVldERhdGEifSwxNDc6e246IkJydFdzUHJvcCIsZjpmdW5jdGlvbiBCVyhnLHgpe3ZhciB3PXt9LFY9Z1tnLmxdO3JldHVybisrZy5sLHcuYWJvdmU9ISg2NCZWKSx3LmxlZnQ9ISgx''@;'; put 'put ''MjgmViksZy5sKz0xOCx3Lm5hbWU9cWgoZyx4LTE5KSx3fX0sMTQ4OntuOiJCcnRXc0RpbSIsZjpOVyxwOjE2fSwxNTE6e246IkJydFBhbmUiLGY6ZnVuY3Rpb24gVngoZyx4KXt2YXIgdz1nLmwreDtObChnKSxObChnKTt2YXIgVj1nLnJlYWRfc2hpZnQoNCwiaSIpLFc9Zy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQsImkiKTtpZihnLnJlYWRfc2hpZnQoNCksZy5yZWFkX3NoaWZ0KDEpLHchPWcubCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK3crIiAhPSAiK2cubCk7cmV0dXJuW0tyKHtyOlYsYzpXfSldfX0sMTUyOntuOiJCcnRTZWwiLGY6ZnVuY3Rpb24gclooZyx4KXtyZXR1cm4gZy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpLHtjZWxsOktyKHtyOmcucmVhZF9zaGlmdCg0KSxjOmcucmVhZF9zaGlmdCg0KX0pfX19LDE1Mzp7bjoiQnJ0V2JQcm9wIixmOmZ1bmN0aW9uIEp4KGcseCl7dmFyIHc9e30sVj1nLnJlYWRfc2hpZnQoNCk7dy5kZWZhdWx0VGhlbWVWZXJzaW9uPWcucmVhZF9zaGlmdCg0''@;'; put 'put ''KTt2YXIgVz14Pjg/Y2MoZyk6IiI7cmV0dXJuIFcubGVuZ3RoPjAmJih3LkNvZGVOYW1lPVcpLHcuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmViksdy5iYWNrdXBGaWxlPSEhKDY0JlYpLHcuY2hlY2tDb21wYXRpYmlsaXR5PSEhKDQwOTYmViksdy5kYXRlMTkwND0hISgxJlYpLHcu''@;'; put 'put ''ZmlsdGVyUHJpdmFjeT0hISg4JlYpLHcuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmViksdy5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZWKSx3LnB1Ymxpc2hJdGVtcz0hISgyMDQ4JlYpLHcucmVmcmVzaEFsbENvbm5lY3Rpb25zPSEhKDI2MjE0NCZWKSx3LnNhdmVFeHRlcm5hbExpbmtW''@;'; put 'put ''YWx1ZXM9ISEoMTI4JlYpLHcuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZWKSx3LnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJlYpLHcuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25lIl1bVj4+MTMmM10sdy5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2''@;'; put 'put ''OCZWKSx3LnVwZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bVj4+OCYzXSx3fX0sMTU0OntuOiJCcnRXYkZhY3RvaWQifSwxNTU6e246IkJydEZpbGVSZWNvdmVyIn0sMTU2OntuOiJCcnRCdW5kbGVTaCIsZjpmdW5jdGlvbiB4WihnLHgpe3ZhciB3PXt9O3JldHVybiB3''@;'; put 'put ''LkhpZGRlbj1nLnJlYWRfc2hpZnQoNCksdy5pVGFiSUQ9Zy5yZWFkX3NoaWZ0KDQpLHcuc3RyUmVsSUQ9TjAoZyx4LTgpLHcubmFtZT1jYyhnKSx3fX0sMTU3OntuOiJCcnRDYWxjUHJvcCJ9LDE1ODp7bjoiQnJ0Qm9va1ZpZXcifSwxNTk6e246IkJydEJlZ2luU3N0IixmOmZ1bmN0aW9uIGtN''@;'; put 'put ''KGcpe3JldHVybltnLnJlYWRfc2hpZnQoNCksZy5yZWFkX3NoaWZ0KDQpXX19LDE2MDp7bjoiQnJ0RW5kU3N0In0sMTYxOntuOiJCcnRCZWdpbkFGaWx0ZXIiLGY6bmh9LDE2Mjp7bjoiQnJ0RW5kQUZpbHRlciJ9LDE2Mzp7bjoiQnJ0QmVnaW5GaWx0ZXJDb2x1bW4ifSwxNjQ6e246IkJydEVu''@;'; put 'put ''ZEZpbHRlckNvbHVtbiJ9LDE2NTp7bjoiQnJ0QmVnaW5GaWx0ZXJzIn0sMTY2OntuOiJCcnRFbmRGaWx0ZXJzIn0sMTY3OntuOiJCcnRGaWx0ZXIifSwxNjg6e246IkJydENvbG9yRmlsdGVyIn0sMTY5OntuOiJCcnRJY29uRmlsdGVyIn0sMTcwOntuOiJCcnRUb3AxMEZpbHRlciJ9LDE3MTp7''@;'; put 'put ''bjoiQnJ0RHluYW1pY0ZpbHRlciJ9LDE3Mjp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzIn0sMTczOntuOiJCcnRFbmRDdXN0b21GaWx0ZXJzIn0sMTc0OntuOiJCcnRDdXN0b21GaWx0ZXIifSwxNzU6e246IkJydEFGaWx0ZXJEYXRlR3JvdXBJdGVtIn0sMTc2OntuOiJCcnRNZXJnZUNlbGwi''@;'; put 'put ''LGY6ekx9LDE3Nzp7bjoiQnJ0QmVnaW5NZXJnZUNlbGxzIn0sMTc4OntuOiJCcnRFbmRNZXJnZUNlbGxzIn0sMTc5OntuOiJCcnRCZWdpblBpdm90Q2FjaGVEZWYifSwxODA6e246IkJydEVuZFBpdm90Q2FjaGVEZWYifSwxODE6e246IkJydEJlZ2luUENERmllbGRzIn0sMTgyOntuOiJCcnRF''@;'; put 'put ''bmRQQ0RGaWVsZHMifSwxODM6e246IkJydEJlZ2luUENERmllbGQifSwxODQ6e246IkJydEVuZFBDREZpZWxkIn0sMTg1OntuOiJCcnRCZWdpblBDRFNvdXJjZSJ9LDE4Njp7bjoiQnJ0RW5kUENEU291cmNlIn0sMTg3OntuOiJCcnRCZWdpblBDRFNSYW5nZSJ9LDE4ODp7bjoiQnJ0RW5kUENE''@;'; put 'put ''U1JhbmdlIn0sMTg5OntuOiJCcnRCZWdpblBDREZBdGJsIn0sMTkwOntuOiJCcnRFbmRQQ0RGQXRibCJ9LDE5MTp7bjoiQnJ0QmVnaW5QQ0RJUnVuIn0sMTkyOntuOiJCcnRFbmRQQ0RJUnVuIn0sMTkzOntuOiJCcnRCZWdpblBpdm90Q2FjaGVSZWNvcmRzIn0sMTk0OntuOiJCcnRFbmRQaXZv''@;'; put 'put ''dENhY2hlUmVjb3JkcyJ9LDE5NTp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaGllcyJ9LDE5Njp7bjoiQnJ0RW5kUENESGllcmFyY2hpZXMifSwxOTc6e246IkJydEJlZ2luUENESGllcmFyY2h5In0sMTk4OntuOiJCcnRFbmRQQ0RIaWVyYXJjaHkifSwxOTk6e246IkJydEJlZ2luUENESEZpZWxk''@;'; put 'put ''c1VzYWdlIn0sMjAwOntuOiJCcnRFbmRQQ0RIRmllbGRzVXNhZ2UifSwyMDE6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbiJ9LDIwMjp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbiJ9LDIwMzp7bjoiQnJ0QmVnaW5FQ0RiUHJvcHMifSwyMDQ6e246IkJydEVuZEVDRGJQcm9wcyJ9LDIwNTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5FQ09sYXBQcm9wcyJ9LDIwNjp7bjoiQnJ0RW5kRUNPbGFwUHJvcHMifSwyMDc6e246IkJydEJlZ2luUENEU0NvbnNvbCJ9LDIwODp7bjoiQnJ0RW5kUENEU0NvbnNvbCJ9LDIwOTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2VzIn0sMjEwOntuOiJCcnRFbmRQQ0RTQ1BhZ2VzIn0sMjEx''@;'; put 'put ''OntuOiJCcnRCZWdpblBDRFNDUGFnZSJ9LDIxMjp7bjoiQnJ0RW5kUENEU0NQYWdlIn0sMjEzOntuOiJCcnRCZWdpblBDRFNDUEl0ZW0ifSwyMTQ6e246IkJydEVuZFBDRFNDUEl0ZW0ifSwyMTU6e246IkJydEJlZ2luUENEU0NTZXRzIn0sMjE2OntuOiJCcnRFbmRQQ0RTQ1NldHMifSwyMTc6''@;'; put 'put ''e246IkJydEJlZ2luUENEU0NTZXQifSwyMTg6e246IkJydEVuZFBDRFNDU2V0In0sMjE5OntuOiJCcnRCZWdpblBDREZHcm91cCJ9LDIyMDp7bjoiQnJ0RW5kUENERkdyb3VwIn0sMjIxOntuOiJCcnRCZWdpblBDREZHSXRlbXMifSwyMjI6e246IkJydEVuZFBDREZHSXRlbXMifSwyMjM6e246''@;'; put 'put ''IkJydEJlZ2luUENERkdSYW5nZSJ9LDIyNDp7bjoiQnJ0RW5kUENERkdSYW5nZSJ9LDIyNTp7bjoiQnJ0QmVnaW5QQ0RGR0Rpc2NyZXRlIn0sMjI2OntuOiJCcnRFbmRQQ0RGR0Rpc2NyZXRlIn0sMjI3OntuOiJCcnRCZWdpblBDRFNEVHVwbGVDYWNoZSJ9LDIyODp7bjoiQnJ0RW5kUENEU0RU''@;'; put 'put ''dXBsZUNhY2hlIn0sMjI5OntuOiJCcnRCZWdpblBDRFNEVENFbnRyaWVzIn0sMjMwOntuOiJCcnRFbmRQQ0RTRFRDRW50cmllcyJ9LDIzMTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnMifSwyMzI6e246IkJydEVuZFBDRFNEVENFTWVtYmVycyJ9LDIzMzp7bjoiQnJ0QmVnaW5QQ0RTRFRD''@;'; put 'put ''RU1lbWJlciJ9LDIzNDp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXIifSwyMzU6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJpZXMifSwyMzY6e246IkJydEVuZFBDRFNEVENRdWVyaWVzIn0sMjM3OntuOiJCcnRCZWdpblBDRFNEVENRdWVyeSJ9LDIzODp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJ5In0s''@;'; put 'put ''MjM5OntuOiJCcnRCZWdpblBDRFNEVENTZXRzIn0sMjQwOntuOiJCcnRFbmRQQ0RTRFRDU2V0cyJ9LDI0MTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0In0sMjQyOntuOiJCcnRFbmRQQ0RTRFRDU2V0In0sMjQzOntuOiJCcnRCZWdpblBDRENhbGNJdGVtcyJ9LDI0NDp7bjoiQnJ0RW5kUENEQ2Fs''@;'; put 'put ''Y0l0ZW1zIn0sMjQ1OntuOiJCcnRCZWdpblBDRENhbGNJdGVtIn0sMjQ2OntuOiJCcnRFbmRQQ0RDYWxjSXRlbSJ9LDI0Nzp7bjoiQnJ0QmVnaW5QUnVsZSJ9LDI0ODp7bjoiQnJ0RW5kUFJ1bGUifSwyNDk6e246IkJydEJlZ2luUFJGaWx0ZXJzIn0sMjUwOntuOiJCcnRFbmRQUkZpbHRlcnMi''@;'; put 'put ''fSwyNTE6e246IkJydEJlZ2luUFJGaWx0ZXIifSwyNTI6e246IkJydEVuZFBSRmlsdGVyIn0sMjUzOntuOiJCcnRCZWdpblBOYW1lcyJ9LDI1NDp7bjoiQnJ0RW5kUE5hbWVzIn0sMjU1OntuOiJCcnRCZWdpblBOYW1lIn0sMjU2OntuOiJCcnRFbmRQTmFtZSJ9LDI1Nzp7bjoiQnJ0QmVnaW5Q''@;'; put 'put ''TlBhaXJzIn0sMjU4OntuOiJCcnRFbmRQTlBhaXJzIn0sMjU5OntuOiJCcnRCZWdpblBOUGFpciJ9LDI2MDp7bjoiQnJ0RW5kUE5QYWlyIn0sMjYxOntuOiJCcnRCZWdpbkVDV2ViUHJvcHMifSwyNjI6e246IkJydEVuZEVDV2ViUHJvcHMifSwyNjM6e246IkJydEJlZ2luRWNXcFRhYmxlcyJ9''@;'; put 'put ''LDI2NDp7bjoiQnJ0RW5kRUNXUFRhYmxlcyJ9LDI2NTp7bjoiQnJ0QmVnaW5FQ1BhcmFtcyJ9LDI2Njp7bjoiQnJ0RW5kRUNQYXJhbXMifSwyNjc6e246IkJydEJlZ2luRUNQYXJhbSJ9LDI2ODp7bjoiQnJ0RW5kRUNQYXJhbSJ9LDI2OTp7bjoiQnJ0QmVnaW5QQ0RLUElzIn0sMjcwOntuOiJC''@;'; put 'put ''cnRFbmRQQ0RLUElzIn0sMjcxOntuOiJCcnRCZWdpblBDREtQSSJ9LDI3Mjp7bjoiQnJ0RW5kUENES1BJIn0sMjczOntuOiJCcnRCZWdpbkRpbXMifSwyNzQ6e246IkJydEVuZERpbXMifSwyNzU6e246IkJydEJlZ2luRGltIn0sMjc2OntuOiJCcnRFbmREaW0ifSwyNzc6e246IkJydEluZGV4''@;'; put 'put ''UGFydEVuZCJ9LDI3ODp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0In0sMjc5OntuOiJCcnRFbmRTdHlsZVNoZWV0In0sMjgwOntuOiJCcnRCZWdpblNYVmlldyJ9LDI4MTp7bjoiQnJ0RW5kU1hWSSJ9LDI4Mjp7bjoiQnJ0QmVnaW5TWFZJIn0sMjgzOntuOiJCcnRCZWdpblNYVklzIn0sMjg0Ontu''@;'; put 'put ''OiJCcnRFbmRTWFZJcyJ9LDI4NTp7bjoiQnJ0QmVnaW5TWFZEIn0sMjg2OntuOiJCcnRFbmRTWFZEIn0sMjg3OntuOiJCcnRCZWdpblNYVkRzIn0sMjg4OntuOiJCcnRFbmRTWFZEcyJ9LDI4OTp7bjoiQnJ0QmVnaW5TWFBJIn0sMjkwOntuOiJCcnRFbmRTWFBJIn0sMjkxOntuOiJCcnRCZWdp''@;'; put 'put ''blNYUElzIn0sMjkyOntuOiJCcnRFbmRTWFBJcyJ9LDI5Mzp7bjoiQnJ0QmVnaW5TWERJIn0sMjk0OntuOiJCcnRFbmRTWERJIn0sMjk1OntuOiJCcnRCZWdpblNYRElzIn0sMjk2OntuOiJCcnRFbmRTWERJcyJ9LDI5Nzp7bjoiQnJ0QmVnaW5TWExJIn0sMjk4OntuOiJCcnRFbmRTWExJIn0s''@;'; put 'put ''Mjk5OntuOiJCcnRCZWdpblNYTElSd3MifSwzMDA6e246IkJydEVuZFNYTElSd3MifSwzMDE6e246IkJydEJlZ2luU1hMSUNvbHMifSwzMDI6e246IkJydEVuZFNYTElDb2xzIn0sMzAzOntuOiJCcnRCZWdpblNYRm9ybWF0In0sMzA0OntuOiJCcnRFbmRTWEZvcm1hdCJ9LDMwNTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5TWEZvcm1hdHMifSwzMDY6e246IkJydEVuZFN4Rm9ybWF0cyJ9LDMwNzp7bjoiQnJ0QmVnaW5TeFNlbGVjdCJ9LDMwODp7bjoiQnJ0RW5kU3hTZWxlY3QifSwzMDk6e246IkJydEJlZ2luSVNYVkRSd3MifSwzMTA6e246IkJydEVuZElTWFZEUndzIn0sMzExOntuOiJCcnRCZWdpbklT''@;'; put 'put ''WFZEQ29scyJ9LDMxMjp7bjoiQnJ0RW5kSVNYVkRDb2xzIn0sMzEzOntuOiJCcnRFbmRTWExvY2F0aW9uIn0sMzE0OntuOiJCcnRCZWdpblNYTG9jYXRpb24ifSwzMTU6e246IkJydEVuZFNYVmlldyJ9LDMxNjp7bjoiQnJ0QmVnaW5TWFRIcyJ9LDMxNzp7bjoiQnJ0RW5kU1hUSHMifSwzMTg6''@;'; put 'put ''e246IkJydEJlZ2luU1hUSCJ9LDMxOTp7bjoiQnJ0RW5kU1hUSCJ9LDMyMDp7bjoiQnJ0QmVnaW5JU1hUSFJ3cyJ9LDMyMTp7bjoiQnJ0RW5kSVNYVEhSd3MifSwzMjI6e246IkJydEJlZ2luSVNYVEhDb2xzIn0sMzIzOntuOiJCcnRFbmRJU1hUSENvbHMifSwzMjQ6e246IkJydEJlZ2luU1hU''@;'; put 'put ''RE1QUyJ9LDMyNTp7bjoiQnJ0RW5kU1hURE1QcyJ9LDMyNjp7bjoiQnJ0QmVnaW5TWFRETVAifSwzMjc6e246IkJydEVuZFNYVERNUCJ9LDMyODp7bjoiQnJ0QmVnaW5TWFRISXRlbXMifSwzMjk6e246IkJydEVuZFNYVEhJdGVtcyJ9LDMzMDp7bjoiQnJ0QmVnaW5TWFRISXRlbSJ9LDMzMTp7''@;'; put 'put ''bjoiQnJ0RW5kU1hUSEl0ZW0ifSwzMzI6e246IkJydEJlZ2luTWV0YWRhdGEifSwzMzM6e246IkJydEVuZE1ldGFkYXRhIn0sMzM0OntuOiJCcnRCZWdpbkVzbWR0aW5mbyJ9LDMzNTp7bjoiQnJ0TWR0aW5mbyJ9LDMzNjp7bjoiQnJ0RW5kRXNtZHRpbmZvIn0sMzM3OntuOiJCcnRCZWdpbkVz''@;'; put 'put ''bWRiIn0sMzM4OntuOiJCcnRFbmRFc21kYiJ9LDMzOTp7bjoiQnJ0QmVnaW5Fc2ZtZCJ9LDM0MDp7bjoiQnJ0RW5kRXNmbWQifSwzNDE6e246IkJydEJlZ2luU2luZ2xlQ2VsbHMifSwzNDI6e246IkJydEVuZFNpbmdsZUNlbGxzIn0sMzQzOntuOiJCcnRCZWdpbkxpc3QifSwzNDQ6e246IkJy''@;'; put 'put ''dEVuZExpc3QifSwzNDU6e246IkJydEJlZ2luTGlzdENvbHMifSwzNDY6e246IkJydEVuZExpc3RDb2xzIn0sMzQ3OntuOiJCcnRCZWdpbkxpc3RDb2wifSwzNDg6e246IkJydEVuZExpc3RDb2wifSwzNDk6e246IkJydEJlZ2luTGlzdFhtbENQciJ9LDM1MDp7bjoiQnJ0RW5kTGlzdFhtbENQ''@;'; put 'put ''ciJ9LDM1MTp7bjoiQnJ0TGlzdENDRm1sYSJ9LDM1Mjp7bjoiQnJ0TGlzdFRyRm1sYSJ9LDM1Mzp7bjoiQnJ0QmVnaW5FeHRlcm5hbHMifSwzNTQ6e246IkJydEVuZEV4dGVybmFscyJ9LDM1NTp7bjoiQnJ0U3VwQm9va1NyYyIsZjpOMH0sMzU3OntuOiJCcnRTdXBTZWxmIn0sMzU4OntuOiJC''@;'; put 'put ''cnRTdXBTYW1lIn0sMzU5OntuOiJCcnRTdXBUYWJzIn0sMzYwOntuOiJCcnRCZWdpblN1cEJvb2sifSwzNjE6e246IkJydFBsYWNlaG9sZGVyTmFtZSJ9LDM2Mjp7bjoiQnJ0RXh0ZXJuU2hlZXQiLGY6RF99LDM2Mzp7bjoiQnJ0RXh0ZXJuVGFibGVTdGFydCJ9LDM2NDp7bjoiQnJ0RXh0ZXJu''@;'; put 'put ''VGFibGVFbmQifSwzNjY6e246IkJydEV4dGVyblJvd0hkciJ9LDM2Nzp7bjoiQnJ0RXh0ZXJuQ2VsbEJsYW5rIn0sMzY4OntuOiJCcnRFeHRlcm5DZWxsUmVhbCJ9LDM2OTp7bjoiQnJ0RXh0ZXJuQ2VsbEJvb2wifSwzNzA6e246IkJydEV4dGVybkNlbGxFcnJvciJ9LDM3MTp7bjoiQnJ0RXh0''@;'; put 'put ''ZXJuQ2VsbFN0cmluZyJ9LDM3Mjp7bjoiQnJ0QmVnaW5Fc21keCJ9LDM3Mzp7bjoiQnJ0RW5kRXNtZHgifSwzNzQ6e246IkJydEJlZ2luTWR4U2V0In0sMzc1OntuOiJCcnRFbmRNZHhTZXQifSwzNzY6e246IkJydEJlZ2luTWR4TWJyUHJvcCJ9LDM3Nzp7bjoiQnJ0RW5kTWR4TWJyUHJvcCJ9''@;'; put 'put ''LDM3ODp7bjoiQnJ0QmVnaW5NZHhLUEkifSwzNzk6e246IkJydEVuZE1keEtQSSJ9LDM4MDp7bjoiQnJ0QmVnaW5Fc3N0ciJ9LDM4MTp7bjoiQnJ0RW5kRXNzdHIifSwzODI6e246IkJydEJlZ2luUFJGSXRlbSJ9LDM4Mzp7bjoiQnJ0RW5kUFJGSXRlbSJ9LDM4NDp7bjoiQnJ0QmVnaW5QaXZv''@;'; put 'put ''dENhY2hlSURzIn0sMzg1OntuOiJCcnRFbmRQaXZvdENhY2hlSURzIn0sMzg2OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRCJ9LDM4Nzp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEIn0sMzg4OntuOiJCcnRCZWdpbklTWFZJcyJ9LDM4OTp7bjoiQnJ0RW5kSVNYVklzIn0sMzkwOntuOiJCcnRCZWdp''@;'; put 'put ''bkNvbEluZm9zIn0sMzkxOntuOiJCcnRFbmRDb2xJbmZvcyJ9LDM5Mjp7bjoiQnJ0QmVnaW5Sd0JyayJ9LDM5Mzp7bjoiQnJ0RW5kUndCcmsifSwzOTQ6e246IkJydEJlZ2luQ29sQnJrIn0sMzk1OntuOiJCcnRFbmRDb2xCcmsifSwzOTY6e246IkJydEJyayJ9LDM5Nzp7bjoiQnJ0VXNlckJv''@;'; put 'put ''b2tWaWV3In0sMzk4OntuOiJCcnRJbmZvIn0sMzk5OntuOiJCcnRDVXNyIn0sNDAwOntuOiJCcnRVc3IifSw0MDE6e246IkJydEJlZ2luVXNlcnMifSw0MDM6e246IkJydEVPRiJ9LDQwNDp7bjoiQnJ0VUNSIn0sNDA1OntuOiJCcnRSUkluc0RlbCJ9LDQwNjp7bjoiQnJ0UlJFbmRJbnNEZWwi''@;'; put 'put ''fSw0MDc6e246IkJydFJSTW92ZSJ9LDQwODp7bjoiQnJ0UlJFbmRNb3ZlIn0sNDA5OntuOiJCcnRSUkNoZ0NlbGwifSw0MTA6e246IkJydFJSRW5kQ2hnQ2VsbCJ9LDQxMTp7bjoiQnJ0UlJIZWFkZXIifSw0MTI6e246IkJydFJSVXNlclZpZXcifSw0MTM6e246IkJydFJSUmVuU2hlZXQifSw0''@;'; put 'put ''MTQ6e246IkJydFJSSW5zZXJ0U2gifSw0MTU6e246IkJydFJSRGVmTmFtZSJ9LDQxNjp7bjoiQnJ0UlJOb3RlIn0sNDE3OntuOiJCcnRSUkNvbmZsaWN0In0sNDE4OntuOiJCcnRSUlRRU0lGIn0sNDE5OntuOiJCcnRSUkZvcm1hdCJ9LDQyMDp7bjoiQnJ0UlJFbmRGb3JtYXQifSw0MjE6e246''@;'; put 'put ''IkJydFJSQXV0b0ZtdCJ9LDQyMjp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3cyJ9LDQyMzp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3In0sNDI0OntuOiJCcnRFbmRVc2VyU2hWaWV3In0sNDI1OntuOiJCcnRFbmRVc2VyU2hWaWV3cyJ9LDQyNjp7bjoiQnJ0QXJyRm1sYSIsZjpmdW5jdGlvbiBpWihn''@;'; put 'put ''LHgsdyl7dmFyIFY9Zy5sK3gsVz1qYyhnKSxlZT1nLnJlYWRfc2hpZnQoMSksbGU9W1ddO2lmKGxlWzJdPWVlLHcuY2VsbEZvcm11bGEpe3ZhciBvZT1hYihnLFYtZy5sLHcpO2xlWzFdPW9lfWVsc2UgZy5sPVY7cmV0dXJuIGxlfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIFdM''@;'; put 'put ''KGcseCx3KXt2YXIgVj1nLmwreCxlZT1bbmgoZywxNildO2lmKHcuY2VsbEZvcm11bGEpe3ZhciBsZT1vTChnLFYtZy5sLHcpO2VlWzFdPWxlLGcubD1WfWVsc2UgZy5sPVY7cmV0dXJuIGVlfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQz''@;'; put 'put ''MDp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdM''@;'; put 'put ''ZXZlbHMifSw0MzY6e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJl''@;'; put 'put ''Z2luUENESEdMR3JvdXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVt''@;'; put 'put ''YmVyIn0sNDQ3OntuOiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJl''@;'; put 'put ''Z2luRGVsZXRlZE5hbWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUi''@;'; put 'put ''fSw0NjA6e246IkJydEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246''@;'; put 'put ''IkJydEJlZ2luSWNvblNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8i''@;'; put 'put ''fSw0NzI6e246IkJydEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uIG9aKGcpe3ZhciB4PXt9O3Jl''@;'; put 'put ''dHVybiBaTC5mb3JFYWNoKGZ1bmN0aW9uKHcpe3hbd109TmwoZyl9KSx4fX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3OTp7bjoiQnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5TWENydEZvcm1hdCJ9LDQ4Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENydEZvcm1hdHMifSw0ODU6e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiBQTChnKXt2YXIgeD17fSx3PXt9LFY9e30s''@;'; put 'put ''Vz1nLnJlYWRfc2hpZnQoNCksZWU9Zy5yZWFkX3NoaWZ0KDIpO1Yud2NoPVc8PTY1NTM2P1cvMjU2OmVlO3ZhciBsZT1nLnJlYWRfc2hpZnQoMik7dy5ocHQ9bGUvMjA7dmFyIG9lPWcucmVhZF9zaGlmdCgyKTtyZXR1cm4gMiZvZSYmKHcuaGlkZGVuPSEwKSw0Jm9lJiYoeC50b3B0aGljaz0h''@;'; put 'put ''MCksOCZvZSYmKHguYm90dGhpY2s9ITApLHgucm93b3V0bGluZT1nLnJlYWRfc2hpZnQoMSkseC5jb2xvdXRsaW5lPWcucmVhZF9zaGlmdCgxKSxUNyh3KSx4LnJvdz13LG0xKFYpLHguY29sPVYseH19LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoi''@;'; put 'put ''QnJ0QmVnaW5NR01hcHMifSw0ODk6e246IkJydEVuZE1HTWFwcyJ9LDQ5MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJydEJlZ2luTWFwIn0sNDkzOntuOiJCcnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIFVMKGcseCl7dmFyIHc9''@;'; put 'put ''Zy5sK3gsVj1uaChnLDE2KSxXPUd1KGcpLGVlPWNjKGcpLGxlPWNjKGcpLG9lPWNjKGcpO2cubD13O3ZhciBkZT17cmZ4OlYscmVsSWQ6Vyxsb2M6ZWUsZGlzcGxheTpvZX07cmV0dXJuIGxlJiYoZGUuVG9vbHRpcD1sZSksZGV9fSw0OTU6e246IkJydEJlZ2luRENvbiJ9LDQ5Njp7bjoiQnJ0''@;'; put 'put ''RW5kRENvbiJ9LDQ5Nzp7bjoiQnJ0QmVnaW5EUmVmcyJ9LDQ5ODp7bjoiQnJ0RW5kRFJlZnMifSw0OTk6e246IkJydERSZWYifSw1MDA6e246IkJydEJlZ2luU2Nlbk1hbiJ9LDUwMTp7bjoiQnJ0RW5kU2Nlbk1hbiJ9LDUwMjp7bjoiQnJ0QmVnaW5TY3QifSw1MDM6e246IkJydEVuZFNjdCJ9''@;'; put 'put ''LDUwNDp7bjoiQnJ0U2xjIn0sNTA1OntuOiJCcnRCZWdpbkRYRnMifSw1MDY6e246IkJydEVuZERYRnMifSw1MDc6e246IkJydERYRiJ9LDUwODp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlcyJ9LDUwOTp7bjoiQnJ0RW5kVGFibGVTdHlsZXMifSw1MTA6e246IkJydEJlZ2luVGFibGVTdHlsZSJ9''@;'; put 'put ''LDUxMTp7bjoiQnJ0RW5kVGFibGVTdHlsZSJ9LDUxMjp7bjoiQnJ0VGFibGVTdHlsZUVsZW1lbnQifSw1MTM6e246IkJydFRhYmxlU3R5bGVDbGllbnQifSw1MTQ6e246IkJydEJlZ2luVm9sRGVwcyJ9LDUxNTp7bjoiQnJ0RW5kVm9sRGVwcyJ9LDUxNjp7bjoiQnJ0QmVnaW5Wb2xUeXBlIn0s''@;'; put 'put ''NTE3OntuOiJCcnRFbmRWb2xUeXBlIn0sNTE4OntuOiJCcnRCZWdpblZvbE1haW4ifSw1MTk6e246IkJydEVuZFZvbE1haW4ifSw1MjA6e246IkJydEJlZ2luVm9sVG9waWMifSw1MjE6e246IkJydEVuZFZvbFRvcGljIn0sNTIyOntuOiJCcnRWb2xTdWJ0b3BpYyJ9LDUyMzp7bjoiQnJ0Vm9s''@;'; put 'put ''UmVmIn0sNTI0OntuOiJCcnRWb2xOdW0ifSw1MjU6e246IkJydFZvbEVyciJ9LDUyNjp7bjoiQnJ0Vm9sU3RyIn0sNTI3OntuOiJCcnRWb2xCb29sIn0sNTI4OntuOiJCcnRCZWdpbkNhbGNDaGFpbiQifSw1Mjk6e246IkJydEVuZENhbGNDaGFpbiQifSw1MzA6e246IkJydEJlZ2luU29ydFN0''@;'; put 'put ''YXRlIn0sNTMxOntuOiJCcnRFbmRTb3J0U3RhdGUifSw1MzI6e246IkJydEJlZ2luU29ydENvbmQifSw1MzM6e246IkJydEVuZFNvcnRDb25kIn0sNTM0OntuOiJCcnRCb29rUHJvdGVjdGlvbiJ9LDUzNTp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uIn0sNTM2OntuOiJCcnRSYW5nZVByb3RlY3Rp''@;'; put 'put ''b24ifSw1Mzc6e246IkJydFBob25ldGljSW5mbyJ9LDUzODp7bjoiQnJ0QmVnaW5FQ1R4dFdpeiJ9LDUzOTp7bjoiQnJ0RW5kRUNUeHRXaXoifSw1NDA6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QifSw1NDE6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0In0sNTQyOntuOiJCcnRCZWdpbkVD''@;'; put 'put ''VHdGbGRJbmZvIn0sNTQ4OntuOiJCcnRGaWxlU2hhcmluZyJ9LDU0OTp7bjoiQnJ0T2xlU2l6ZSJ9LDU1MDp7bjoiQnJ0RHJhd2luZyIsZjpOMH0sNTUxOntuOiJCcnRMZWdhY3lEcmF3aW5nIn0sNTUyOntuOiJCcnRMZWdhY3lEcmF3aW5nSEYifSw1NTM6e246IkJydFdlYk9wdCJ9LDU1NDp7''@;'; put 'put ''bjoiQnJ0QmVnaW5XZWJQdWJJdGVtcyJ9LDU1NTp7bjoiQnJ0RW5kV2ViUHViSXRlbXMifSw1NTY6e246IkJydEJlZ2luV2ViUHViSXRlbSJ9LDU1Nzp7bjoiQnJ0RW5kV2ViUHViSXRlbSJ9LDU1ODp7bjoiQnJ0QmVnaW5TWENvbmRGbXQifSw1NTk6e246IkJydEVuZFNYQ29uZEZtdCJ9LDU2''@;'; put 'put ''MDp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzIn0sNTYxOntuOiJCcnRFbmRTWENvbmRGbXRzIn0sNTYyOntuOiJCcnRCa0hpbSJ9LDU2NDp7bjoiQnJ0Q29sb3IifSw1NjU6e246IkJydEJlZ2luSW5kZXhlZENvbG9ycyJ9LDU2Njp7bjoiQnJ0RW5kSW5kZXhlZENvbG9ycyJ9LDU2OTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5NUlVDb2xvcnMifSw1NzA6e246IkJydEVuZE1SVUNvbG9ycyJ9LDU3Mjp7bjoiQnJ0TVJVQ29sb3IifSw1NzM6e246IkJydEJlZ2luRFZhbHMifSw1NzQ6e246IkJydEVuZERWYWxzIn0sNTc3OntuOiJCcnRTdXBOYW1lU3RhcnQifSw1Nzg6e246IkJydFN1cE5hbWVWYWx1ZVN0YXJ0''@;'; put 'put ''In0sNTc5OntuOiJCcnRTdXBOYW1lVmFsdWVFbmQifSw1ODA6e246IkJydFN1cE5hbWVOdW0ifSw1ODE6e246IkJydFN1cE5hbWVFcnIifSw1ODI6e246IkJydFN1cE5hbWVTdCJ9LDU4Mzp7bjoiQnJ0U3VwTmFtZU5pbCJ9LDU4NDp7bjoiQnJ0U3VwTmFtZUJvb2wifSw1ODU6e246IkJydFN1''@;'; put 'put ''cE5hbWVGbWxhIn0sNTg2OntuOiJCcnRTdXBOYW1lQml0cyJ9LDU4Nzp7bjoiQnJ0U3VwTmFtZUVuZCJ9LDU4ODp7bjoiQnJ0RW5kU3VwQm9vayJ9LDU4OTp7bjoiQnJ0Q2VsbFNtYXJ0VGFnUHJvcGVydHkifSw1OTA6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFnIn0sNTkxOntuOiJCcnRFbmRD''@;'; put 'put ''ZWxsU21hcnRUYWcifSw1OTI6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFncyJ9LDU5Mzp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFncyJ9LDU5NDp7bjoiQnJ0QmVnaW5TbWFydFRhZ3MifSw1OTU6e246IkJydEVuZFNtYXJ0VGFncyJ9LDU5Njp7bjoiQnJ0U21hcnRUYWdUeXBlIn0sNTk3OntuOiJC''@;'; put 'put ''cnRCZWdpblNtYXJ0VGFnVHlwZXMifSw1OTg6e246IkJydEVuZFNtYXJ0VGFnVHlwZXMifSw1OTk6e246IkJydEJlZ2luU1hGaWx0ZXJzIn0sNjAwOntuOiJCcnRFbmRTWEZpbHRlcnMifSw2MDE6e246IkJydEJlZ2luU1hGSUxURVIifSw2MDI6e246IkJydEVuZFNYRmlsdGVyIn0sNjAzOntu''@;'; put 'put ''OiJCcnRCZWdpbkZpbGxzIn0sNjA0OntuOiJCcnRFbmRGaWxscyJ9LDYwNTp7bjoiQnJ0QmVnaW5DZWxsV2F0Y2hlcyJ9LDYwNjp7bjoiQnJ0RW5kQ2VsbFdhdGNoZXMifSw2MDc6e246IkJydENlbGxXYXRjaCJ9LDYwODp7bjoiQnJ0QmVnaW5DUkVycnMifSw2MDk6e246IkJydEVuZENSRXJy''@;'; put 'put ''cyJ9LDYxMDp7bjoiQnJ0Q3Jhc2hSZWNFcnIifSw2MTE6e246IkJydEJlZ2luRm9udHMifSw2MTI6e246IkJydEVuZEZvbnRzIn0sNjEzOntuOiJCcnRCZWdpbkJvcmRlcnMifSw2MTQ6e246IkJydEVuZEJvcmRlcnMifSw2MTU6e246IkJydEJlZ2luRm10cyJ9LDYxNjp7bjoiQnJ0RW5kRm10''@;'; put 'put ''cyJ9LDYxNzp7bjoiQnJ0QmVnaW5DZWxsWEZzIn0sNjE4OntuOiJCcnRFbmRDZWxsWEZzIn0sNjE5OntuOiJCcnRCZWdpblN0eWxlcyJ9LDYyMDp7bjoiQnJ0RW5kU3R5bGVzIn0sNjI1OntuOiJCcnRCaWdOYW1lIn0sNjI2OntuOiJCcnRCZWdpbkNlbGxTdHlsZVhGcyJ9LDYyNzp7bjoiQnJ0''@;'; put 'put ''RW5kQ2VsbFN0eWxlWEZzIn0sNjI4OntuOiJCcnRCZWdpbkNvbW1lbnRzIn0sNjI5OntuOiJCcnRFbmRDb21tZW50cyJ9LDYzMDp7bjoiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyJ9LDYzMTp7bjoiQnJ0RW5kQ29tbWVudEF1dGhvcnMifSw2MzI6e246IkJydENvbW1lbnRBdXRob3IiLGY6cnh9''@;'; put 'put ''LDYzMzp7bjoiQnJ0QmVnaW5Db21tZW50TGlzdCJ9LDYzNDp7bjoiQnJ0RW5kQ29tbWVudExpc3QifSw2MzU6e246IkJydEJlZ2luQ29tbWVudCIsZjpmdW5jdGlvbiBKXyhnKXt2YXIgeD17fTt4LmlhdXRob3I9Zy5yZWFkX3NoaWZ0KDQpO3ZhciB3PW5oKGcsMTYpO3JldHVybiB4LnJmeD13''@;'; put 'put ''LnMseC5yZWY9S3Iody5zKSxnLmwrPTE2LHh9fSw2MzY6e246IkJydEVuZENvbW1lbnQifSw2Mzc6e246IkJydENvbW1lbnRUZXh0IixmOnZnfSw2Mzg6e246IkJydEJlZ2luT2xlT2JqZWN0cyJ9LDYzOTp7bjoiQnJ0T2xlT2JqZWN0In0sNjQwOntuOiJCcnRFbmRPbGVPYmplY3RzIn0sNjQx''@;'; put 'put ''OntuOiJCcnRCZWdpblN4cnVsZXMifSw2NDI6e246IkJydEVuZFN4UnVsZXMifSw2NDM6e246IkJydEJlZ2luQWN0aXZlWENvbnRyb2xzIn0sNjQ0OntuOiJCcnRBY3RpdmVYIn0sNjQ1OntuOiJCcnRFbmRBY3RpdmVYQ29udHJvbHMifSw2NDY6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJz''@;'; put 'put ''U29ydEJ5In0sNjQ4OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MifSw2NDk6e246IkJydENlbGxJZ25vcmVFQyJ9LDY1MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDcyJ9LDY1MTp7bjoiQnJ0Q3NQcm9wIixmOmZ1bmN0aW9uIEd4KGcseCl7cmV0dXJuIGcubCs9MTAse25hbWU6Y2MoZyl9fX0s''@;'; put 'put ''NjUyOntuOiJCcnRDc1BhZ2VTZXR1cCJ9LDY1Mzp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3cyJ9LDY1NDp7bjoiQnJ0RW5kVXNlckNzVmlld3MifSw2NTU6e246IkJydEJlZ2luVXNlckNzVmlldyJ9LDY1Njp7bjoiQnJ0RW5kVXNlckNzVmlldyJ9LDY1Nzp7bjoiQnJ0QmVnaW5QY2RTRkNJRW50''@;'; put 'put ''cmllcyJ9LDY1ODp7bjoiQnJ0RW5kUENEU0ZDSUVudHJpZXMifSw2NTk6e246IkJydFBDRFNGQ0lFbnRyeSJ9LDY2MDp7bjoiQnJ0QmVnaW5MaXN0UGFydHMifSw2NjE6e246IkJydExpc3RQYXJ0In0sNjYyOntuOiJCcnRFbmRMaXN0UGFydHMifSw2NjM6e246IkJydFNoZWV0Q2FsY1Byb3Ai''@;'; put 'put ''fSw2NjQ6e246IkJydEJlZ2luRm5Hcm91cCJ9LDY2NTp7bjoiQnJ0Rm5Hcm91cCJ9LDY2Njp7bjoiQnJ0RW5kRm5Hcm91cCJ9LDY2Nzp7bjoiQnJ0U3VwQWRkaW4ifSw2Njg6e246IkJydFNYVERNUE9yZGVyIn0sNjY5OntuOiJCcnRDc1Byb3RlY3Rpb24ifSw2NzE6e246IkJydEJlZ2luV3NT''@;'; put 'put ''b3J0TWFwIn0sNjcyOntuOiJCcnRFbmRXc1NvcnRNYXAifSw2NzM6e246IkJydEJlZ2luUlJTb3J0In0sNjc0OntuOiJCcnRFbmRSUlNvcnQifSw2NzU6e246IkJydFJSU29ydEl0ZW0ifSw2NzY6e246IkJydEZpbGVTaGFyaW5nSXNvIn0sNjc3OntuOiJCcnRCb29rUHJvdGVjdGlvbklzbyJ9''@;'; put 'put ''LDY3ODp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uSXNvIn0sNjc5OntuOiJCcnRDc1Byb3RlY3Rpb25Jc28ifSw2ODA6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbyJ9LDY4MTp7bjoiQnJ0RFZhbExpc3QifSwxMDI0OntuOiJCcnRSd0Rlc2NlbnQifSwxMDI1OntuOiJCcnRLbm93bkZvbnRzIn0s''@;'; put 'put ''MTAyNjp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0In0sMTAyNzp7bjoiQnJ0RW5kU1hUdXBsZVNldCJ9LDEwMjg6e246IkJydEJlZ2luU1hUdXBsZVNldEhlYWRlciJ9LDEwMjk6e246IkJydEVuZFNYVHVwbGVTZXRIZWFkZXIifSwxMDMwOntuOiJCcnRTWFR1cGxlU2V0SGVhZGVySXRlbSJ9LDEw''@;'; put 'put ''MzE6e246IkJydEJlZ2luU1hUdXBsZVNldERhdGEifSwxMDMyOntuOiJCcnRFbmRTWFR1cGxlU2V0RGF0YSJ9LDEwMzM6e246IkJydEJlZ2luU1hUdXBsZVNldFJvdyJ9LDEwMzQ6e246IkJydEVuZFNYVHVwbGVTZXRSb3cifSwxMDM1OntuOiJCcnRTWFR1cGxlU2V0Um93SXRlbSJ9LDEwMzY6''@;'; put 'put ''e246IkJydE5hbWVFeHQifSwxMDM3OntuOiJCcnRQQ0RIMTQifSwxMDM4OntuOiJCcnRCZWdpblBDRENhbGNNZW0xNCJ9LDEwMzk6e246IkJydEVuZFBDRENhbGNNZW0xNCJ9LDEwNDA6e246IkJydFNYVEgxNCJ9LDEwNDE6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXAifSwxMDQyOntuOiJC''@;'; put 'put ''cnRFbmRTcGFya2xpbmVHcm91cCJ9LDEwNDM6e246IkJydFNwYXJrbGluZSJ9LDEwNDQ6e246IkJydFNYREkxNCJ9LDEwNDU6e246IkJydFdzRm10SW5mb0V4MTQifSwxMDQ2OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0Nzp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxG''@;'; put 'put ''b3JtYXR0aW5nMTQifSwxMDQ4OntuOiJCcnRCZWdpbkNGUnVsZTE0In0sMTA0OTp7bjoiQnJ0RW5kQ0ZSdWxlMTQifSwxMDUwOntuOiJCcnRDRlZPMTQifSwxMDUxOntuOiJCcnRCZWdpbkRhdGFiYXIxNCJ9LDEwNTI6e246IkJydEJlZ2luSWNvblNldDE0In0sMTA1Mzp7bjoiQnJ0RFZhbDE0''@;'; put 'put ''IixmOmZ1bmN0aW9uIG1iKGcseCx3KXt2YXIgVj1mdW5jdGlvbiBXdChnLHgsdyl7dmFyIFY9Zy5yZWFkX3NoaWZ0KDQpLFc9e307cmV0dXJuIDEmViYmKFcucmVmcz1mdW5jdGlvbiAkbihnKXtmb3IodmFyIHg9Zy5yZWFkX3NoaWZ0KDQpLHc9W107eC0tID4wOyl3LnB1c2goZWkoZykpO3Jl''@;'; put 'put ''dHVybiB3fShnKSksMiZWJiYoVy5zcXJlZnM9ZnVuY3Rpb24gTGEoZyl7Zm9yKHZhciB4PWcucmVhZF9zaGlmdCg0KSx3PVtdO3gtLSA+MDspdy5wdXNoKHhvKGcpKTtyZXR1cm4gd30oZykpLDQmViYmKFcuZm9ybXVsYXM9ZnVuY3Rpb24gZHMoZyx4LHcpe2Zvcih2YXIgVj1nLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksVz1bXTtWLS0gPjA7KVcucHVzaChDMChnLDAsdykpO3JldHVybiBXfShnLDAsdykpLDgmViYmKFcucmVsSUQ9ZnVuY3Rpb24gbm0oZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDIpO3JldHVybiAwPT09eD8iIjpnLnJlYWRfc2hpZnQoeCwidXRmMTZsZSIpfShnKSksV30oZywwLHcpLFc9''@;'; put 'put ''Zy5yZWFkX3NoaWZ0KDQpLGVlPUd1KGcpLGxlPUd1KGcpLG9lPUd1KGcpLGRlPUd1KGcpLERlPShWLmZvcm11bGFzfHxbXSlbMF0sUmU9KFYuZm9ybXVsYXN8fFtdKVsxXSxWZT0xNSZXLEdlPXt0OmE5W1ZlXSxzcXJmeDpWLnNxcmVmc1swXSxzOltlZSxsZSxvZSxkZV19O3JldHVybiBEZSYm''@;'; put 'put ''KEdlLmYxPURlKSxSZSYmKEdlLmYyPVJlKSwwPT1WZXx8Mz09VmV8fDc9PVZlfHwoR2Uub3A9QnhbVz4+MjAmMTVdKSxHZX19LDEwNTQ6e246IkJydEJlZ2luRFZhbHMxNCJ9LDEwNTU6e246IkJydENvbG9yMTQifSwxMDU2OntuOiJCcnRCZWdpblNwYXJrbGluZXMifSwxMDU3OntuOiJCcnRF''@;'; put 'put ''bmRTcGFya2xpbmVzIn0sMTA1ODp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cHMifSwxMDU5OntuOiJCcnRFbmRTcGFya2xpbmVHcm91cHMifSwxMDYxOntuOiJCcnRTWFZEMTQifSwxMDYyOntuOiJCcnRCZWdpblNYVmlldzE0In0sMTA2Mzp7bjoiQnJ0RW5kU1hWaWV3MTQifSwxMDY0Ontu''@;'; put 'put ''OiJCcnRCZWdpblNYVmlldzE2In0sMTA2NTp7bjoiQnJ0RW5kU1hWaWV3MTYifSwxMDY2OntuOiJCcnRCZWdpblBDRDE0In0sMTA2Nzp7bjoiQnJ0RW5kUENEMTQifSwxMDY4OntuOiJCcnRCZWdpbkV4dENvbm4xNCJ9LDEwNjk6e246IkJydEVuZEV4dENvbm4xNCJ9LDEwNzA6e246IkJydEJl''@;'; put 'put ''Z2luU2xpY2VyQ2FjaGVJRHMifSwxMDcxOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEcyJ9LDEwNzI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRCJ9LDEwNzM6e246IkJydEVuZFNsaWNlckNhY2hlSUQifSwxMDc1OntuOiJCcnRCZWdpblNsaWNlckNhY2hlIn0sMTA3Njp7bjoiQnJ0RW5kU2xp''@;'; put 'put ''Y2VyQ2FjaGUifSwxMDc3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlRGVmIn0sMTA3ODp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVEZWYifSwxMDc5OntuOiJCcnRCZWdpblNsaWNlcnNFeCJ9LDEwODA6e246IkJydEVuZFNsaWNlcnNFeCJ9LDEwODE6e246IkJydEJlZ2luU2xpY2VyRXgifSwxMDgy''@;'; put 'put ''OntuOiJCcnRFbmRTbGljZXJFeCJ9LDEwODM6e246IkJydEJlZ2luU2xpY2VyIn0sMTA4NDp7bjoiQnJ0RW5kU2xpY2VyIn0sMTA4NTp7bjoiQnJ0U2xpY2VyQ2FjaGVQaXZvdFRhYmxlcyJ9LDEwODY6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODc6e246IkJydEVuZFNs''@;'; put 'put ''aWNlckNhY2hlT2xhcEltcGwifSwxMDg4OntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwODk6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwOTA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkxOntuOiJCcnRFbmRTbGljZXJDYWNo''@;'; put 'put ''ZUxldmVsRGF0YSJ9LDEwOTI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTM6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDk0OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTU6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZSJ9LDEw''@;'; put 'put ''OTY6e246IkJydFNsaWNlckNhY2hlT2xhcEl0ZW0ifSwxMDk3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDEwOTg6e246IkJydFNsaWNlckNhY2hlU2VsZWN0aW9uIn0sMTA5OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTEwMDp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''bGljZXJDYWNoZU5hdGl2ZSJ9LDExMDE6e246IkJydEVuZFNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMjp7bjoiQnJ0U2xpY2VyQ2FjaGVOYXRpdmVJdGVtIn0sMTEwMzp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uMTQifSwxMTA0OntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28xNCJ9LDExMDU6e246''@;'; put 'put ''IkJydENlbGxJZ25vcmVFQzE0In0sMTExMTp7bjoiQnJ0TGlzdDE0In0sMTExMjp7bjoiQnJ0Q0ZJY29uIn0sMTExMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTU6e246IkJydEJl''@;'; put 'put ''Z2luU2xpY2VycyJ9LDExMTY6e246IkJydEVuZFNsaWNlcnMifSwxMTE3OntuOiJCcnRXYlByb3AxNCJ9LDExMTg6e246IkJydEJlZ2luU1hFZGl0In0sMTExOTp7bjoiQnJ0RW5kU1hFZGl0In0sMTEyMDp7bjoiQnJ0QmVnaW5TWEVkaXRzIn0sMTEyMTp7bjoiQnJ0RW5kU1hFZGl0cyJ9LDEx''@;'; put 'put ''MjI6e246IkJydEJlZ2luU1hDaGFuZ2UifSwxMTIzOntuOiJCcnRFbmRTWENoYW5nZSJ9LDExMjQ6e246IkJydEJlZ2luU1hDaGFuZ2VzIn0sMTEyNTp7bjoiQnJ0RW5kU1hDaGFuZ2VzIn0sMTEyNjp7bjoiQnJ0U1hUdXBsZUl0ZW1zIn0sMTEyODp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZSJ9''@;'; put 'put ''LDExMjk6e246IkJydEVuZFNsaWNlclN0eWxlIn0sMTEzMDp7bjoiQnJ0U2xpY2VyU3R5bGVFbGVtZW50In0sMTEzMTp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0RXh0MTQifSwxMTMyOntuOiJCcnRFbmRTdHlsZVNoZWV0RXh0MTQifSwxMTMzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90''@;'; put 'put ''Q2FjaGVJRCJ9LDExMzQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzU6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzY6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM3OntuOiJCcnRCZWdpblBDRENhbGNNZW1FeHQi''@;'; put 'put ''fSwxMTM4OntuOiJCcnRFbmRQQ0RDYWxjTWVtRXh0In0sMTEzOTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtc0V4dCJ9LDExNDA6e246IkJydEVuZFBDRENhbGNNZW1zRXh0In0sMTE0MTp7bjoiQnJ0UENERmllbGQxNCJ9LDExNDI6e246IkJydEJlZ2luU2xpY2VyU3R5bGVzIn0sMTE0Mzp7bjoi''@;'; put 'put ''QnJ0RW5kU2xpY2VyU3R5bGVzIn0sMTE0NDp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0NTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDY6e246IkJydENGUnVsZUV4dCJ9LDExNDc6e246IkJydEJlZ2luU1hDb25kRm10MTQifSwxMTQ4OntuOiJCcnRF''@;'; put 'put ''bmRTWENvbmRGbXQxNCJ9LDExNDk6e246IkJydEJlZ2luU1hDb25kRm10czE0In0sMTE1MDp7bjoiQnJ0RW5kU1hDb25kRm10czE0In0sMTE1Mjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZDE0In0sMTE1Mzp7bjoiQnJ0RW5kU29ydENvbmQxNCJ9LDExNTQ6e246IkJydEVuZERWYWxzMTQifSwxMTU1''@;'; put 'put ''OntuOiJCcnRFbmRJY29uU2V0MTQifSwxMTU2OntuOiJCcnRFbmREYXRhYmFyMTQifSwxMTU3OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUxNCJ9LDExNTg6e246IkJydEVuZENvbG9yU2NhbGUxNCJ9LDExNTk6e246IkJydEJlZ2luU3hydWxlczE0In0sMTE2MDp7bjoiQnJ0RW5kU3hydWxlczE0''@;'; put 'put ''In0sMTE2MTp7bjoiQnJ0QmVnaW5QUnVsZTE0In0sMTE2Mjp7bjoiQnJ0RW5kUFJ1bGUxNCJ9LDExNjM6e246IkJydEJlZ2luUFJGaWx0ZXJzMTQifSwxMTY0OntuOiJCcnRFbmRQUkZpbHRlcnMxNCJ9LDExNjU6e246IkJydEJlZ2luUFJGaWx0ZXIxNCJ9LDExNjY6e246IkJydEVuZFBSRmls''@;'; put 'put ''dGVyMTQifSwxMTY3OntuOiJCcnRCZWdpblBSRkl0ZW0xNCJ9LDExNjg6e246IkJydEVuZFBSRkl0ZW0xNCJ9LDExNjk6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDczE0In0sMTE3MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDczE0In0sMTE3MTp7bjoiQnJ0RHhmMTQifSwxMTcyOntuOiJCcnRC''@;'; put 'put ''ZWdpbkR4RjE0cyJ9LDExNzM6e246IkJydEVuZER4ZjE0cyJ9LDExNzc6e246IkJydEZpbHRlcjE0In0sMTE3ODp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzMTQifSwxMTgwOntuOiJCcnRDdXN0b21GaWx0ZXIxNCJ9LDExODE6e246IkJydEljb25GaWx0ZXIxNCJ9LDExODI6e246IkJydFBp''@;'; put 'put ''dm90Q2FjaGVDb25uZWN0aW9uTmFtZSJ9LDIwNDg6e246IkJydEJlZ2luRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNDk6e246IkJydEVuZERlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDUwOntuOiJCcnREZWNvdXBsZWRQaXZvdENhY2hlSUQifSwyMDUxOntuOiJCcnRCZWdpblBpdm90''@;'; put 'put ''VGFibGVSZWZzIn0sMjA1Mjp7bjoiQnJ0RW5kUGl2b3RUYWJsZVJlZnMifSwyMDUzOntuOiJCcnRQaXZvdFRhYmxlUmVmIn0sMjA1NDp7bjoiQnJ0U2xpY2VyQ2FjaGVCb29rUGl2b3RUYWJsZXMifSwyMDU1OntuOiJCcnRCZWdpblN4dmNlbGxzIn0sMjA1Njp7bjoiQnJ0RW5kU3h2Y2VsbHMi''@;'; put 'put ''fSwyMDU3OntuOiJCcnRCZWdpblN4Um93In0sMjA1ODp7bjoiQnJ0RW5kU3hSb3cifSwyMDYwOntuOiJCcnRQY2RDYWxjTWVtMTUifSwyMDY3OntuOiJCcnRRc2kxNSJ9LDIwNjg6e246IkJydEJlZ2luV2ViRXh0ZW5zaW9ucyJ9LDIwNjk6e246IkJydEVuZFdlYkV4dGVuc2lvbnMifSwyMDcw''@;'; put 'put ''OntuOiJCcnRXZWJFeHRlbnNpb24ifSwyMDcxOntuOiJCcnRBYnNQYXRoMTUifSwyMDcyOntuOiJCcnRCZWdpblBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3Mzp7bjoiQnJ0RW5kUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDc1OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSURzIn0sMjA3Njp7''@;'; put 'put ''bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEIn0sMjA3Nzp7bjoiQnJ0QmVnaW5UYWJsZVNsaWNlckNhY2hlIn0sMjA3ODp7bjoiQnJ0RW5kVGFibGVTbGljZXJDYWNoZSJ9LDIwNzk6e246IkJydFN4RmlsdGVyMTUifSwyMDgwOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURz''@;'; put 'put ''In0sMjA4MTp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgyOntuOiJCcnRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEIn0sMjA4Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSURzIn0sMjA4NDp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEcyJ9LDIwODU6e246''@;'; put 'put ''IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEIn0sMjA4Njp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEIn0sMjA4Nzp7bjoiQnJ0QmVnaW5UaW1lbGluZXNFeCJ9LDIwODg6e246IkJydEVuZFRpbWVsaW5lc0V4In0sMjA4OTp7bjoiQnJ0QmVnaW5UaW1lbGluZUV4In0sMjA5MDp7bjoiQnJ0RW5k''@;'; put 'put ''VGltZWxpbmVFeCJ9LDIwOTE6e246IkJydFdvcmtCb29rUHIxNSJ9LDIwOTI6e246IkJydFBDREgxNSJ9LDIwOTM6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZSJ9LDIwOTQ6e246IkJydEVuZFRpbWVsaW5lU3R5bGUifSwyMDk1OntuOiJCcnRUaW1lbGluZVN0eWxlRWxlbWVudCJ9LDIwOTY6''@;'; put 'put ''e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk3OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTg6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXMifSwyMDk5OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlcyJ9LDIxMDA6e246IkJydEJlZ2luVGlt''@;'; put 'put ''ZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMjp7bjoiQnJ0RHhmMTUifSwyMTAzOntuOiJCcnRCZWdpbkR4ZnMxNSJ9LDIxMDQ6e246ImJydEVuZER4ZnMxNSJ9LDIxMDU6e246IkJydFNsaWNlckNhY2hlSGlkZUl0ZW1zV2l0''@;'; put 'put ''aE5vRGF0YSJ9LDIxMDY6e246IkJydEJlZ2luSXRlbVVuaXF1ZU5hbWVzIn0sMjEwNzp7bjoiQnJ0RW5kSXRlbVVuaXF1ZU5hbWVzIn0sMjEwODp7bjoiQnJ0SXRlbVVuaXF1ZU5hbWUifSwyMTA5OntuOiJCcnRCZWdpbkV4dENvbm4xNSJ9LDIxMTA6e246IkJydEVuZEV4dENvbm4xNSJ9LDIx''@;'; put 'put ''MTE6e246IkJydEJlZ2luT2xlZGJQcjE1In0sMjExMjp7bjoiQnJ0RW5kT2xlZGJQcjE1In0sMjExMzp7bjoiQnJ0QmVnaW5EYXRhRmVlZFByMTUifSwyMTE0OntuOiJCcnRFbmREYXRhRmVlZFByMTUifSwyMTE1OntuOiJCcnRUZXh0UHIxNSJ9LDIxMTY6e246IkJydFJhbmdlUHIxNSJ9LDIx''@;'; put 'put ''MTc6e246IkJydERiQ29tbWFuZDE1In0sMjExODp7bjoiQnJ0QmVnaW5EYlRhYmxlczE1In0sMjExOTp7bjoiQnJ0RW5kRGJUYWJsZXMxNSJ9LDIxMjA6e246IkJydERiVGFibGUxNSJ9LDIxMjE6e246IkJydEJlZ2luRGF0YU1vZGVsIn0sMjEyMjp7bjoiQnJ0RW5kRGF0YU1vZGVsIn0sMjEy''@;'; put 'put ''Mzp7bjoiQnJ0QmVnaW5Nb2RlbFRhYmxlcyJ9LDIxMjQ6e246IkJydEVuZE1vZGVsVGFibGVzIn0sMjEyNTp7bjoiQnJ0TW9kZWxUYWJsZSJ9LDIxMjY6e246IkJydEJlZ2luTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyNzp7bjoiQnJ0RW5kTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyODp7bjoi''@;'; put 'put ''QnJ0TW9kZWxSZWxhdGlvbnNoaXAifSwyMTI5OntuOiJCcnRCZWdpbkVDVHh0V2l6MTUifSwyMTMwOntuOiJCcnRFbmRFQ1R4dFdpejE1In0sMjEzMTp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdDE1In0sMjEzMjp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzM6e246IkJydEJl''@;'; put 'put ''Z2luRUNUV0ZsZEluZm8xNSJ9LDIxMzQ6e246IkJydEZpZWxkTGlzdEFjdGl2ZUl0ZW0ifSwyMTM1OntuOiJCcnRQaXZvdENhY2hlSWRWZXJzaW9uIn0sMjEzNjp7bjoiQnJ0U1hESTE1In0sMjEzNzp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZ3MifSwyMTM4OntuOiJCcnRFbmRNb2Rl''@;'; put 'put ''bFRpbWVHcm91cGluZ3MifSwyMTM5OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MDp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQxOntuOiJCcnRNb2RlbFRpbWVHcm91cGluZ0NhbGNDb2wifSwzMDcyOntuOiJCcnRVaWQifSwzMDczOntuOiJCcnRSZXZpc2lv''@;'; put 'put ''blB0ciJ9LDUwOTU6e246IkJydEJlZ2luQ2FsY0ZlYXR1cmVzIn0sNTA5Njp7bjoiQnJ0RW5kQ2FsY0ZlYXR1cmVzIn0sNTA5Nzp7bjoiQnJ0Q2FsY0ZlYXR1cmUifSw2NTUzNTp7bjoiIn19LHA5PU1lKFlwLCJuIik7cDkuQnJ0RlJUQXJjaElEJD0xNjt2YXIgZzk9ezY6e246IkZvcm11bGEi''@;'; put 'put ''LGY6YUx9LDEwOntuOiJFT0YiLGY6Vmx9LDEyOntuOiJDYWxjQ291bnQiLGY6dGx9LDEzOntuOiJDYWxjTW9kZSIsZjp0bH0sMTQ6e246IkNhbGNQcmVjaXNpb24iLGY6aWF9LDE1OntuOiJDYWxjUmVmTW9kZSIsZjppYX0sMTY6e246IkNhbGNEZWx0YSIsZjpObH0sMTc6e246IkNhbGNJdGVy''@;'; put 'put ''IixmOmlhfSwxODp7bjoiUHJvdGVjdCIsZjppYX0sMTk6e246IlBhc3N3b3JkIixmOnRsfSwyMDp7bjoiSGVhZGVyIixmOmtffSwyMTp7bjoiRm9vdGVyIixmOmtffSwyMzp7bjoiRXh0ZXJuU2hlZXQiLGY6RF99LDI0OntuOiJMYmwiLGY6T0l9LDI1OntuOiJXaW5Qcm90ZWN0IixmOmlhfSwy''@;'; put 'put ''Njp7bjoiVmVydGljYWxQYWdlQnJlYWtzIn0sMjc6e246Ikhvcml6b250YWxQYWdlQnJlYWtzIn0sMjg6e246Ik5vdGUiLGY6ZnVuY3Rpb24gVXIoZyx4LHcpe3JldHVybiBmdW5jdGlvbiBlVShnLHgsdyl7aWYoISh3LmJpZmY8OCkpe3ZhciBWPWcucmVhZF9zaGlmdCgyKSxXPWcucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxlZT1nLnJlYWRfc2hpZnQoMiksbGU9Zy5yZWFkX3NoaWZ0KDIpLG9lPW9mKGcsMCx3KTtyZXR1cm4gdy5iaWZmPDgmJmcucmVhZF9zaGlmdCgxKSxbe3I6VixjOld9LG9lLGxlLGVlXX19KGcsMCx3KX19LDI5OntuOiJTZWxlY3Rpb24iLGY6ZnVuY3Rpb24gQ00oZyx4LHcpe3Jl''@;'; put 'put ''dHVybiB3JiZ3LmJpZmY8NT8oZy5sKz14LHtjZWxsOntyOjAsYzowfX0pOihnLnJlYWRfc2hpZnQoMSkse2NlbGw6S3Ioe3I6Zy5yZWFkX3NoaWZ0KDIpLGM6Zy5yZWFkX3NoaWZ0KDIpfSl9KX19LDM0OntuOiJEYXRlMTkwNCIsZjppYX0sMzU6e246IkV4dGVybk5hbWUiLGY6TEl9LDM4Ontu''@;'; put 'put ''OiJMZWZ0TWFyZ2luIixmOk5sfSwzOTp7bjoiUmlnaHRNYXJnaW4iLGY6Tmx9LDQwOntuOiJUb3BNYXJnaW4iLGY6Tmx9LDQxOntuOiJCb3R0b21NYXJnaW4iLGY6Tmx9LDQyOntuOiJQcmludFJvd0NvbCIsZjppYX0sNDM6e246IlByaW50R3JpZCIsZjppYX0sNDc6e246IkZpbGVQYXNzIixm''@;'; put 'put ''OmZ1bmN0aW9uIGZVKGcseCx3KXtpZih3LmVuYylyZXR1cm4gdy5lbmM7dmFyIFY9e1R5cGU6dy5iaWZmPj04P2cucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gVi5UeXBlP2Z1bmN0aW9uIExNKGcseCx3LFYpe3ZhciBXPVZ8fHt9O2lmKFcuSW5mbz1nLnJlYWRfc2hpZnQoMiksZy5sLT0yLDE9''@;'; put 'put ''PT1XLkluZm8pe2lmKFcuRGF0YT1mdW5jdGlvbiBmZihnKXt2YXIgeD17fSx3PXguRW5jcnlwdGlvblZlcnNpb25JbmZvPWhmKGcsNCk7aWYoMSE9dy5NYWpvcnx8MSE9dy5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIrdy5NYWpvcisiIDogIit3Lk1pbm9yO3JldHVy''@;'; put 'put ''biB4LlNhbHQ9Zy5yZWFkX3NoaWZ0KDE2KSx4LkVuY3J5cHRlZFZlcmlmaWVyPWcucmVhZF9zaGlmdCgxNikseC5FbmNyeXB0ZWRWZXJpZmllckhhc2g9Zy5yZWFkX3NoaWZ0KDE2KSx4fShnKSx3LnBhc3N3b3JkJiZ0eXBlb2YgRGI8InUiKXt2YXIgZWU9RGIody5wYXNzd29yZCxXLkRhdGEu''@;'; put 'put ''U2FsdCwiMDAwMDAwMDAiKSxsZT1tZShXLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrVy5EYXRhLkVuY3J5cHRlZFZlcmlmaWVySGFzaCwiaGV4Iiksb2U9c3IucmM0KG1lKGVlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IiksbGUpO1YudmFsaWQ9c3IubWQ1KG9lLnNsaWNlKDAsMTYpKT09QnVm''@;'; put 'put ''ZmVyLmZyb20ob2Uuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IiksVy5EYXRhLktleT1lZSxWLmluc2l0dT1mdW5jdGlvbiBzWShnLHgpe3ZhciB3PW5ldyBBcnJheSgyNTYpLFY9MCxXPTAsZWU9MCxsZT0wO2Z1bmN0aW9uIG9lKEdlKXtmb3IoVj0wLFc9MCxlZT0wLGxlPTAsVz0wOzI1NiE9''@;'; put 'put ''VzsrK1cpd1tXXT1XO2ZvcihlZT0wLFc9MDsyNTYhPVc7KytXKXt0cnl7ZWU9ZWUrd1tXXStHZVtXJUdlLmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2goZXQpe3Rocm93IGNvbnNvbGUubG9nKFcsR2VbVyVHZS5sZW5ndGhdKSxldH1sZT13W1ddLHdbV109d1tlZV0sd1tlZV09bGV9''@;'; put 'put ''Vz1lZT0wfWZ1bmN0aW9uIGRlKEdlKXt2YXIgZXQ9UihHZS5sZW5ndGgpO2ZvcihWPTA7ViE9R2UubGVuZ3RoOysrVilsZT13W1c9VysxJjI1NV0sd1tXXT13W2VlPShlZSt3W1ddKSUyNTZdLHdbZWVdPWxlLGV0W1ZdPUdlW1ZdXndbd1tXXSt3W2VlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJv''@;'; put 'put ''bShldCl9dmFyIERlPWcuS2V5LFJlPTA7b2UobWUoRGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIFZlPTA7cmV0dXJuIGZ1bmN0aW9uKEdlKXtpZihWZStHZS5sZW5ndGg8MTAyNClyZXR1cm4gVmUrPUdlLmxlbmd0aCxkZShHZSk7dmFyIEplPTAsZnQ9bWUoR2Uuc2xpY2UoSmUs''@;'; put 'put ''SmUrKGJ0PTEwMjQtVmUpKSk7SmUrPWJ0LFZlPTA7dmFyIFJ0PWRlKGZ0KTtmb3IoSmU9PUdlLmxlbmd0aCYmKCsrUmUsRGU9RGIoeCxnLlNhbHQsa2IoUmUpKSxvZShtZShEZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7SmU8R2UubGVuZ3RoOyl7KytSZSxEZT1EYih4LGcuU2FsdCxr''@;'; put 'put ''YihSZSkpLG9lKEJ1ZmZlci5mcm9tKERlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBidD1NYXRoLm1pbigxMDI0LEdlLmxlbmd0aC1KZSk7ZnQ9bWUoR2Uuc2xpY2UoSmUsSmUrYnQpKSxKZSs9YnQsVmU9YnQsUnQ9QnVmZmVyLmNvbmNhdChbUnQsZGUoZnQpXSl9cmV0dXJuIFJ0''@;'; put 'put ''fX0oVy5EYXRhLHcucGFzc3dvcmQpfX1lbHNlIGlmKFcuRGF0YT1mdW5jdGlvbiBoVShnLHgpe3ZhciB3PXt9LFY9dy5FbmNyeXB0aW9uVmVyc2lvbkluZm89aGYoZyw0KTtpZih4LT00LDIhPVYuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2Rl''@;'; put 'put ''OiAiK1YuTWlub3IpO2lmKFYuTWFqb3I+NHx8Vi5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitWLk1ham9yKTt3LkZsYWdzPWcucmVhZF9zaGlmdCg0KSx4LT00O3ZhciBXPWcucmVhZF9zaGlmdCg0KTtyZXR1cm4geC09NCx3LkVu''@;'; put 'put ''Y3J5cHRpb25IZWFkZXI9Ym0oZyxXKSx3LkVuY3J5cHRpb25WZXJpZmllcj1QXyhnLHgtPVcpLHd9KGcseCksVy5EYXRhJiZXLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1XLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmdy5wYXNzd29yZCYmdHlwZW9mIEliPCJ1Iil7dmFy''@;'; put 'put ''IGRlPUliKHcucGFzc3dvcmQsVy5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxEZT1XLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1EZXx8RGU8ZGUubGVuZ3RoJiYoZGU9ZGUuc2xpY2UoMCxEZSkpO3ZhciBSZT1t''@;'; put 'put ''ZShXLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3RyaW5nKCJoZXgiKStXLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhleCIpLFZlPXNyLnJjNChkZS50b1N0cmluZygiYmluYXJ5IiksUmUpO1YudmFsaWQ9d2MoVmUu''@;'; put 'put ''c2xpY2UoMCxEZSksIlNIQTEiKS50b1N0cmluZygiaGV4Iik9PVZlLnNsaWNlKERlKS50b1N0cmluZygiaGV4IiksVy5EYXRhLktleT1kZSxWLnZhbGlkJiYoVi5pbnNpdHU9ZnVuY3Rpb24gbUUoZyx4KXt2YXIgdz1uZXcgQXJyYXkoMjU2KSxWPTAsVz0wLGVlPTAsbGU9MCxvZT1nLkVuY3J5''@;'; put 'put ''cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24gZGUoZXQpe2ZvcihldD1CdWZmZXIuZnJvbShldC5zbGljZSgwLG9lKSksVj0wLFc9MCxlZT0wLGxlPTAsVz0wOzI1NiE9VzsrK1cpd1tXXT1XO2ZvcihlZT0wLFc9MDsyNTYhPVc7KytXKXt2YXIgYnQ9ZXRbVyVldC5sZW5ndGhdO2Vl''@;'; put 'put ''PWVlK3dbV10rKCJzdHJpbmciPT10eXBlb2YgYnQ/YnQuY2hhckNvZGVBdCgwKTpidCkmMjU1LGxlPXdbV10sd1tXXT13W2VlXSx3W2VlXT1sZX1XPWVlPTB9ZnVuY3Rpb24gRGUoZXQpe3ZhciBidD1SKGV0Lmxlbmd0aCk7Zm9yKFY9MDtWIT1ldC5sZW5ndGg7KytWKWxlPXdbVz1XKzEmMjU1''@;'; put 'put ''XSx3W1ddPXdbZWU9KGVlK3dbV10pJTI1Nl0sd1tlZV09bGUsYnRbVl09ZXRbVl1ed1t3W1ddK3dbZWVdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGJ0KX12YXIgUmU9Zy5LZXksVmU9MDtkZShtZShSZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgR2U9MDtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oZXQpe2lmKEdlK2V0Lmxlbmd0aDwxMDI0KXJldHVybiBHZSs9ZXQubGVuZ3RoLERlKGV0KTt2YXIgSmU9MTAyNC1HZSxmdD0wLFJ0PUJ1ZmZlci5mcm9tKGV0LnNsaWNlKGZ0LGZ0K0plKSk7ZnQrPUplLEdlPTA7dmFyIFN0PURlKFJ0KTtmb3IoZnQ9PWV0Lmxlbmd0aCYmKCsrVmUsUmU9''@;'; put 'put ''SWIoeCxnLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LGtiKFZlKSksZGUoQnVmZmVyLmZyb20oUmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2Z0PGV0Lmxlbmd0aDspKytWZSxSZT1JYih4LGcuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsa2IoVmUpKSxkZShCdWZmZXIuZnJvbShSZSwi''@;'; put 'put ''aGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSxKZT1NYXRoLm1pbigxMDI0LGV0Lmxlbmd0aC1mdCksUnQ9QnVmZmVyLmZyb20oZXQuc2xpY2UoZnQsZnQrSmUpKSxmdCs9SmUsSmU8MTAyNCYmKEdlPUplKSxTdD1CdWZmZXIuY29uY2F0KFtTdCxEZShSdCldKTtyZXR1cm4gU3R9fShXLkRhdGEs''@;'; put 'put ''dy5wYXNzd29yZCkpfXJldHVybiBXfShnLHgtMix3LFYpOmZ1bmN0aW9uIEhfKGcseCx3LFYpe3ZhciBXPXtrZXk6dGwoZyksdmVyaWZpY2F0aW9uQnl0ZXM6dGwoZyl9O3cucGFzc3dvcmQmJihXLnZlcmlmaWVyPUlNKHcucGFzc3dvcmQpKSxWLnZhbGlkPVcudmVyaWZpY2F0aW9uQnl0ZXM9''@;'; put 'put ''PT1XLnZlcmlmaWVyLFYudmFsaWQmJihWLmluc2l0dT1mdW5jdGlvbihnLHgpe3ZhciB3PXh8fDAsVj1DNyhnKTtyZXR1cm4gZnVuY3Rpb24oVyl7dmFyIGVlPWZ1bmN0aW9uKGcseCx3LFYsVyl7dmFyIGVlLGxlO2ZvcihXfHwoVz14KSxWfHwoVj1DNygiIikpLGVlPTA7ZWUhPXgubGVuZ3Ro''@;'; put 'put ''OysrZWUpbGU9MjU1JigobGU9eFtlZV0pPj41fGxlPDwzKSxXW2VlXT1sZV49Vlt3XSx3PXcrMSYxNTtyZXR1cm5bVyx3LFZdfSgwLFcsdyxWKTtyZXR1cm4gdz1lZVsxXSxlZVswXX19KHcucGFzc3dvcmQsMCkpfShnLDAsdyxWKSxWfX0sNDk6e246IkZvbnQiLGY6ZnVuY3Rpb24gZjEoZyx4''@;'; put 'put ''LHcpe3ZhciBWPXtzejpnLnJlYWRfc2hpZnQoMikvMjB9LFc9YV8oZyk7Vy5mQm9sZCYmKFYuYm9sZD0xKSxXLmZJdGFsaWMmJihWLml0YWxpYz0xKSxXLmZVbmRlcmxpbmUmJihWLnVuZGVybGluZT0xKSxXLmZDb25kZW5zZSYmKFYuY29uZGVuc2U9MSksVy5mRXh0ZW5kJiYoVi5leHRlbmQ9''@;'; put 'put ''MSksVy5mU2hhZG93JiYoVi5zaGFkb3c9MSksVy5mT3V0bGluZSYmKFYub3V0bGluZT0xKSxXLmZTdHJpa2VvdXQmJihWLnN0cmlrZT0xKTt2YXIgZWU9dyYmdy5iaWZmfHw4O2lmKDIhPWVlJiYoVi5pY3Y9Zy5yZWFkX3NoaWZ0KDIpLDMhPWVlJiY0IT1lZSkpe3N3aXRjaCg3MDA9PT1nLnJl''@;'; put 'put ''YWRfc2hpZnQoMikmJihWLmJvbGQ9MSksZy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Vi52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6Vi52YWxpZ249InN1YiJ9dmFyIG9lPWcucmVhZF9zaGlmdCgxKTswIT1vZSYmKFYudW5kZXJsaW5lPW9lKTt2YXIgZGU9Zy5yZWFkX3NoaWZ0KDEpO2Rl''@;'; put 'put ''PjAmJihWLmZhbWlseT1kZSk7dmFyIERlPWcucmVhZF9zaGlmdCgxKTtEZT4wJiYoVi5jaGFyc2V0PURlKSxnLmwrPTF9cmV0dXJuIFYubmFtZT1sbChnLDAsdyksVn19LDUxOntuOiJQcmludFNpemUiLGY6dGx9LDYwOntuOiJDb250aW51ZSJ9LDYxOntuOiJXaW5kb3cxIixmOmZ1bmN0aW9u''@;'; put 'put ''IHVsKGcpe3JldHVybntQb3M6W2cucmVhZF9zaGlmdCgyKSxnLnJlYWRfc2hpZnQoMildLERpbTpbZy5yZWFkX3NoaWZ0KDIpLGcucmVhZF9zaGlmdCgyKV0sRmxhZ3M6Zy5yZWFkX3NoaWZ0KDIpLEN1clRhYjpnLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6Zy5yZWFkX3NoaWZ0KDIpLFNlbGVj''@;'; put 'put ''dGVkOmcucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzpnLnJlYWRfc2hpZnQoMil9fX0sNjQ6e246IkJhY2t1cCIsZjppYX0sNjU6e246IlBhbmUiLGY6ZnVuY3Rpb24gZE0oZyx4LHcpe2lmKHcmJncuYmlmZjw1KXJldHVybnt9O3ZhciBWPXt9O3JldHVybiBWLng9Zy5yZWFkX3NoaWZ0KDIpLFYu''@;'; put 'put ''eT1nLnJlYWRfc2hpZnQoMiksVi5yd1RvcD1nLnJlYWRfc2hpZnQoMiksVi5jb2xMZWZ0PWcucmVhZF9zaGlmdCgyKSxWLnBubkFjY3Q9Zy5yZWFkX3NoaWZ0KDEpLGcucmVhZF9zaGlmdCgxKSxWfX0sNjY6e246IkNvZGVQYWdlIixmOnRsfSw3Nzp7bjoiUGxzIixmOm9sfSw4MDp7bjoiRENv''@;'; put 'put ''biJ9LDgxOntuOiJEQ29uUmVmIn0sODI6e246IkRDb25OYW1lIn0sODU6e246IkRlZkNvbFdpZHRoIixmOnRsfSw4OTp7bjoiWENUIn0sOTA6e246IkNSTiJ9LDkxOntuOiJGaWxlU2hhcmluZyJ9LDkyOntuOiJXcml0ZUFjY2VzcyIsZjpmdW5jdGlvbiBFSShnLHgsdyl7aWYody5lbmMpcmV0''@;'; put 'put ''dXJuIGcubCs9eCwiIjt2YXIgVj1nLmwsVz1vZihnLDAsdyk7cmV0dXJuIGcucmVhZF9zaGlmdCh4K1YtZy5sKSxXfX0sOTM6e246Ik9iaiIsZjpmdW5jdGlvbiBtdChnLHgsdyl7aWYodyYmdy5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIEZJKGcseCx3KXtnLmwrPTQ7dmFyIFY9Zy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLFc9Zy5yZWFkX3NoaWZ0KDIpLGVlPWcucmVhZF9zaGlmdCgyKTtnLmwrPTIsZy5sKz0yLGcubCs9MixnLmwrPTIsZy5sKz0yLGcubCs9MixnLmwrPTIsZy5sKz0yLGcubCs9MixnLmwrPTY7dmFyIGxlPVtdO3JldHVybiBsZS5wdXNoKChRb1tWXXx8b2wpKGcseC09MzYsdykpLHtj''@;'; put 'put ''bW86W1csVixlZV0sZnQ6bGV9fShnLHgsdyk7dmFyIFY9U18oZyksVz1mdW5jdGlvbiBsZihnLHgpe2Zvcih2YXIgVj1nLmwreCxXPVtdO2cubDxWOyl7dmFyIGVlPWcucmVhZF9zaGlmdCgyKTtnLmwtPTI7dHJ5e1dbZWVdPXhJW2VlXShnLFYtZy5sKX1jYXRjaHtyZXR1cm4gZy5sPVYsV319''@;'; put 'put ''cmV0dXJuIGcubCE9ViYmKGcubD1WKSxXfShnLHgtMjIpO3JldHVybntjbW86VixmdDpXfX19LDk0OntuOiJVbmNhbGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjppYX0sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjppYX0sMTI1Ontu''@;'; put 'put ''OiJDb2xJbmZvIixmOnVmfSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gUzMoZyl7Zy5sKz00O3ZhciB4PVtnLnJlYWRfc2hpZnQoMiksZy5yZWFkX3NoaWZ0KDIpXTtpZigwIT09eFswXSYmeFswXS0tLDAhPT14WzFdJiZ4WzFdLS0seFswXT43fHx4WzFdPjcpdGhyb3cgbmV3IEVycm9yKCJC''@;'; put 'put ''YWQgR3V0dGVyczogIit4LmpvaW4oInwiKSk7cmV0dXJuIHh9fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBBSShnLHgsdyl7dmFyIFY9dyYmOD09dy5iaWZmfHwyPT14P2cucmVhZF9zaGlmdCgyKTooZy5sKz14LDApO3JldHVybntmRGlhbG9nOjE2JlYsZkJlbG93OjY0JlYsZlJpZ2h0''@;'; put 'put ''OjEyOCZWfX19LDEzMDp7bjoiR3JpZFNldCIsZjp0bH0sMTMxOntuOiJIQ2VudGVyIixmOmlhfSwxMzI6e246IlZDZW50ZXIiLGY6aWF9LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24gRV8oZyx4LHcpe3ZhciBWPWcucmVhZF9zaGlmdCg0KSxXPTMmZy5yZWFkX3NoaWZ0KDEpLGVl''@;'; put 'put ''PWcucmVhZF9zaGlmdCgxKTtzd2l0Y2goZWUpe2Nhc2UgMDplZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6ZWU9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjplZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OmVlPSJWQkFNb2R1bGUifXZhciBsZT1sbChnLDAsdyk7cmV0dXJuIDA9PT1s''@;'; put 'put ''ZS5sZW5ndGgmJihsZT0iU2hlZXQxIikse3BvczpWLGhzOlcsZHQ6ZWUsbmFtZTpsZX19fSwxMzQ6e246IldyaXRlUHJvdGVjdCJ9LDE0MDp7bjoiQ291bnRyeSIsZjpmdW5jdGlvbiBNb2UoZyl7dmFyIHcseD1bMCwwXTtyZXR1cm4gdz1nLnJlYWRfc2hpZnQoMikseFswXT13Z1t3XXx8dyx3''@;'; put 'put ''PWcucmVhZF9zaGlmdCgyKSx4WzFdPXdnW3ddfHx3LHh9fSwxNDE6e246IkhpZGVPYmoiLGY6dGx9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiBWSShnKXtmb3IodmFyIHg9Zy5yZWFkX3NoaWZ0KDIpLHc9W107eC0tID4wOyl3LnB1c2godzMoZykpO3JldHVy''@;'; put 'put ''biB3fX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1vZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6dGx9LDE1Nzp7bjoiQXV0b0ZpbHRlckluZm8ifSwxNTg6e246IkF1''@;'; put 'put ''dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpyVX0sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBzaChnLHgpe3ZhciB3PXt9O3JldHVybiB4PDMyfHwoZy5sKz0xNix3LmhlYWRlcj1ObChnKSx3LmZvb3Rlcj1ObChnKSxnLmwrPTIpLHd9fSwxNzQ6e246IlNjZW5NYW4ifSwxNzU6e246IlND''@;'; put 'put ''RU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgyOntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1lIn0sMTg5OntuOiJNdWxSayIsZjpmdW5jdGlv''@;'; put 'put ''biBSSShnLHgpe2Zvcih2YXIgdz1nLmwreC0yLFY9Zy5yZWFkX3NoaWZ0KDIpLFc9Zy5yZWFkX3NoaWZ0KDIpLGVlPVtdO2cubDx3OyllZS5wdXNoKEFnKGcpKTtpZihnLmwhPT13KXRocm93IG5ldyBFcnJvcigiTXVsUksgcmVhZCBlcnJvciIpO3ZhciBsZT1nLnJlYWRfc2hpZnQoMik7aWYo''@;'; put 'put ''ZWUubGVuZ3RoIT1sZS1XKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpWLGM6VyxDOmxlLHJrcmVjOmVlfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gZjcoZyx4KXtmb3IodmFyIHc9Zy5sK3gtMixWPWcucmVhZF9zaGlmdCgyKSxX''@;'; put 'put ''PWcucmVhZF9zaGlmdCgyKSxlZT1bXTtnLmw8dzspZWUucHVzaChnLnJlYWRfc2hpZnQoMikpO2lmKGcubCE9PXcpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayByZWFkIGVycm9yIik7dmFyIGxlPWcucmVhZF9zaGlmdCgyKTtpZihlZS5sZW5ndGghPWxlLVcrMSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik11bEJsYW5rIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOlYsYzpXLEM6bGUsaXhmZTplZX19fSwxOTM6e246Ik1tcyIsZjpWbH0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJT''@;'; put 'put ''eEJvb2wiLGY6aWF9LDIwMzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9LDIwNjp7bjoiU1hEdHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oi''@;'; put 'put ''fSwyMTM6e246IlNYU3RyZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9va0Jvb2wiLGY6dGx9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3RlY3QiLGY6aWF9LDIyMjp7bjoiT2xl''@;'; put 'put ''T2JqZWN0U2l6ZSJ9LDIyNDp7bjoiWEYiLGY6ZnVuY3Rpb24gdm0oZyx4LHcpe3ZhciBWPXt9O3JldHVybiBWLmlmbnQ9Zy5yZWFkX3NoaWZ0KDIpLFYubnVtRm10SWQ9Zy5yZWFkX3NoaWZ0KDIpLFYuZmxhZ3M9Zy5yZWFkX3NoaWZ0KDIpLFYuZlN0eWxlPVYuZmxhZ3M+PjImMSxWLmRhdGE9''@;'; put 'put ''ZnVuY3Rpb24gZ00oZyx4LHcsVil7dmFyIFc9e30sZWU9Zy5yZWFkX3NoaWZ0KDQpLGxlPWcucmVhZF9zaGlmdCg0KSxvZT1nLnJlYWRfc2hpZnQoNCksZGU9Zy5yZWFkX3NoaWZ0KDIpO2lmKFcucGF0dGVyblR5cGU9YW1bb2U+PjI2XSwhVi5jZWxsU3R5bGVzKXJldHVybiBXO3ZhciBEZT03''@;'; put 'put ''JmVlO3N3aXRjaChEZSl7Y2FzZSAxOlcuaGFsaWduPSJsZWZ0IjticmVhaztjYXNlIDI6Vy5oYWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAzOlcuaGFsaWduPSJyaWdodCJ9c3dpdGNoKFcuZldyYXA9ZWU+PjMmMSxEZT1lZT4+NCY3KXtjYXNlIDA6Vy52YWxpZ249InRvcCI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAxOlcudmFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMjpXLnZhbGlnbj0iYm90dG9tIn1yZXR1cm4gVy5mSnVzdExhc3Q9ZWU+PjcmMSxXLnRyb3Q9ZWU+PjgmMjU1LFcuY0luZGVudD1lZT4+MTYmMTUsVy5mU2hyaW5rVG9GaXQ9ZWU+PjIwJjEsVy5pUmVhZE9yZGVyPWVlPj4yMiYyLFcu''@;'; put 'put ''ZkF0ck51bT1lZT4+MjYmMSxXLmZBdHJGbnQ9ZWU+PjI3JjEsVy5mQXRyQWxjPWVlPj4yOCYxLFcuZkF0ckJkcj1lZT4+MjkmMSxXLmZBdHJQYXQ9ZWU+PjMwJjEsVy5mQXRyUHJvdD1lZT4+MzEmMSxXLmRnTGVmdD0xNSZsZSxXLmRnUmlnaHQ9bGU+PjQmMTUsVy5kZ1RvcD1sZT4+OCYxNSxX''@;'; put 'put ''LmRnQm90dG9tPWxlPj4xMiYxNSxXLmljdkxlZnQ9bGU+PjE2JjEyNyxXLmljdlJpZ2h0PWxlPj4yMyYxMjcsVy5ncmJpdERpYWc9bGU+PjMwJjMsVy5pY3ZUb3A9MTI3Jm9lLFcuaWN2Qm90dG9tPW9lPj43JjEyNyxXLmljdkRpYWc9b2U+PjE0JjEyNyxXLmRnRGlhZz1vZT4+MjEmMTUsVy5p''@;'; put 'put ''Y3ZGb3JlPTEyNyZkZSxXLmljdkJhY2s9ZGU+PjcmMTI3LFcuZnN4QnV0dG9uPWRlPj4xNCYxLFd9KGcsMCwwLHcpLFZ9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiB4XyhnLHgpe3JldHVybiAwPT09eHx8Zy5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFj''@;'; put 'put ''ZUVuZCIsZjpWbH0sMjI3OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIEVvKGcseCl7Zm9yKHZhciB3PVtdLFY9Zy5yZWFkX3NoaWZ0KDIpO1YtLTspdy5wdXNoKFYxKGcpKTtyZXR1cm4gd319LDIzMzp7bjoiQmtIaW0ifSwyMzU6e246Ik1zb0RyYXdpbmdHcm91''@;'; put 'put ''cCJ9LDIzNjp7bjoiTXNvRHJhd2luZyJ9LDIzNzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlvbiJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1bGUifSwyNDE6e246IlNYRXgifSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYifSwyNDU6e246IlN4SXRtIn0sMjQ2Ontu''@;'; put 'put ''OiJTeE5hbWUifSwyNDc6e246IlN4U2VsZWN0In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246IlNTVCIsZjpmdW5jdGlvbiBrZyhnLHgpe2Zvcih2YXIgdz1nLmwreCxWPWcucmVhZF9zaGlmdCg0KSxXPWcucmVhZF9zaGlmdCg0''@;'; put 'put ''KSxlZT1bXSxsZT0wO2xlIT1XJiZnLmw8dzsrK2xlKWVlLnB1c2goXzMoZykpO3JldHVybiBlZS5Db3VudD1WLGVlLlVuaXF1ZT1XLGVlfX0sMjUzOntuOiJMYWJlbFNzdCIsZjpmdW5jdGlvbiBEZyhnKXt2YXIgeD1EcyhnKTtyZXR1cm4geC5pc3N0PWcucmVhZF9zaGlmdCg0KSx4fX0sMjU1''@;'; put 'put ''OntuOiJFeHRTU1QiLGY6ZnVuY3Rpb24gZ2UoZyx4KXt2YXIgdz17fTtyZXR1cm4gdy5kc3N0PWcucmVhZF9zaGlmdCgyKSxnLmwrPXgtMix3fX0sMjU2OntuOiJTWFZERXgifSwyNTk6e246IlNYRm9ybXVsYSJ9LDI5MDp7bjoiU1hEQkV4In0sMzExOntuOiJSUkRJbnNEZWwifSwzMTI6e246''@;'; put 'put ''IlJSREhlYWQifSwzMTU6e246IlJSRENoZ0NlbGwifSwzMTc6e246IlJSVGFiSWQiLGY6YWZ9LDMxODp7bjoiUlJEUmVuU2hlZXQifSwzMTk6e246IlJSU29ydCJ9LDMyMDp7bjoiUlJETW92ZSJ9LDMzMDp7bjoiUlJGb3JtYXQifSwzMzE6e246IlJSQXV0b0ZtdCJ9LDMzMzp7bjoiUlJJbnNl''@;'; put 'put ''cnRTaCJ9LDMzNDp7bjoiUlJETW92ZUJlZ2luIn0sMzM1OntuOiJSUkRNb3ZlRW5kIn0sMzM2OntuOiJSUkRJbnNEZWxCZWdpbiJ9LDMzNzp7bjoiUlJESW5zRGVsRW5kIn0sMzM4OntuOiJSUkRDb25mbGljdCJ9LDMzOTp7bjoiUlJERGVmTmFtZSJ9LDM0MDp7bjoiUlJEUnN0RXR4cCJ9LDM1''@;'; put 'put ''MTp7bjoiTFJuZyJ9LDM1Mjp7bjoiVXNlc0VMRnMiLGY6aWF9LDM1Mzp7bjoiRFNGIixmOlZsfSw0MDE6e246IkNVc3IifSw0MDI6e246IkNiVXNyIn0sNDAzOntuOiJVc3JJbmZvIn0sNDA0OntuOiJVc3JFeGNsIn0sNDA1OntuOiJGaWxlTG9jayJ9LDQwNjp7bjoiUlJESW5mbyJ9LDQwNzp7''@;'; put 'put ''bjoiQkNVc3JzIn0sNDA4OntuOiJVc3JDaGsifSw0MjU6e246IlVzZXJCVmlldyJ9LDQyNjp7bjoiVXNlclNWaWV3QmVnaW4ifSw0Mjc6e246IlVzZXJTVmlld0VuZCJ9LDQyODp7bjoiUlJEVXNlclZpZXcifSw0Mjk6e246IlFzaSJ9LDQzMDp7bjoiU3VwQm9vayIsZjpmdW5jdGlvbiB5TShn''@;'; put 'put ''LHgsdyl7dmFyIFY9Zy5sK3gsVz1nLnJlYWRfc2hpZnQoMiksZWU9Zy5yZWFkX3NoaWZ0KDIpO2lmKHcuc2JjY2g9ZWUsMTAyNT09ZWV8fDE0ODQ5PT1lZSlyZXR1cm5bZWUsV107aWYoZWU8MXx8ZWU+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIrZWUp''@;'; put 'put ''O2Zvcih2YXIgbGU9YjAoZyxlZSksb2U9W107Vj5nLmw7KW9lLnB1c2goYWgoZykpO3JldHVybltlZSxXLGxlLG9lXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6aWF9LDQzMjp7bjoiQ29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246''@;'; put 'put ''IlR4TyIsZjpmdW5jdGlvbiBnNyhnLHgsdyl7dmFyIFY9Zy5sLFc9IiIsZWU9LTE7dHJ5e2cubCs9NCwtMT09WzAsNSw3LDExLDEyLDE0XS5pbmRleE9mKCh3Lmxhc3RvYmp8fHtjbW86WzAsMF19KS5jbW9bMV0pP2cubCs9NjpmdW5jdGlvbiBFZyhnKXt2YXIgeD1nLnJlYWRfc2hpZnQoMSk7''@;'; put 'put ''Zy5sKys7dmFyIHc9Zy5yZWFkX3NoaWZ0KDIpO2cubCs9Mn0oZyk7dmFyIGRlPWcucmVhZF9zaGlmdCgyKTtnLnJlYWRfc2hpZnQoMiksZWU9Zy5yZWFkX3NoaWZ0KDIpO3ZhciBSZT1nLnJlYWRfc2hpZnQoMik7Zy5sKz1SZTtmb3IodmFyIFZlPTE7VmU8Zy5sZW5zLmxlbmd0aC0xOysrVmUp''@;'; put 'put ''e2lmKGcubC1WIT1nLmxlbnNbVmVdKXRocm93IG5ldyBFcnJvcigiVHhPOiBiYWQgY29udGludWUgcmVjb3JkIik7dmFyIEdlPWdbZy5sXTtpZigoVys9YjAoZyxnLmxlbnNbVmUrMV0tZy5sZW5zW1ZlXS0xKSkubGVuZ3RoPj0oR2U/ZGU6MipkZSkpYnJlYWt9aWYoVy5sZW5ndGghPT1kZSYm''@;'; put 'put ''Vy5sZW5ndGghPT0yKmRlKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitkZSsiICE9ICIrVy5sZW5ndGgpO3JldHVybiBnLmw9Vit4LHt0OlcsaWZudDplZX19Y2F0Y2h7cmV0dXJuIGcubD1WK3gse3Q6VyxpZm50OmVlfX19fSw0Mzk6e246IlJlZnJlc2hBbGwiLGY6aWF9LDQ0MDp7bjoi''@;'; put 'put ''SExpbmsiLGY6ZnVuY3Rpb24gcjIoZyx4KXt2YXIgdz1WMShnKTtnLmwrPTE2O3ZhciBWPWZ1bmN0aW9uIE4xKGcseCl7dmFyIHc9Zy5sK3gsVj1nLnJlYWRfc2hpZnQoNCk7aWYoMiE9PVYpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIitWKTt2YXIgVz1n''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7Zy5sKz0yO3ZhciBlZSxsZSxvZSxkZSxSZSxWZSxEZT0iIjsxNiZXJiYoZWU9a2EoZykpLDEyOCZXJiYobGU9a2EoZykpLCEoMjU3Jn5XKSYmKG9lPWthKGcpKSwxPT0oMjU3JlcpJiYoZGU9ZnVuY3Rpb24gc2YoZyx4KXt2YXIgdz1nLnJlYWRfc2hpZnQoMTYpO3N3''@;'; put 'put ''aXRjaCh3KXtjYXNlImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gYjMoZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDQpLHc9Zy5sLFY9ITE7eD4yNCYmKGcubCs9eC0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09Zy5yZWFkX3No''@;'; put 'put ''aWZ0KDE2KSYmKFY9ITApLGcubD13KTt2YXIgVz1nLnJlYWRfc2hpZnQoKFY/eC0yNDp4KT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoeSwiIik7cmV0dXJuIFYmJihnLmwrPTI0KSxXfShnKTtjYXNlIjAzMDMwMDAwMDAwMDAwMDBjMDAwMDAwMDAwMDAwMDQ2IjpyZXR1cm4gZnVuY3Rpb24gejAo''@;'; put 'put ''Zyl7Zm9yKHZhciB4PWcucmVhZF9zaGlmdCgyKSx3PSIiO3gtLSA+MDspdys9Ii4uLyI7dmFyIFY9Zy5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKTtpZihnLmwrPTIsNTcwMDUhPWcucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO2lmKDA9PT1nLnJl''@;'; put 'put ''YWRfc2hpZnQoNCkpcmV0dXJuIHcrVi5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIGVlPWcucmVhZF9zaGlmdCg0KTtpZigzIT1nLnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtyZXR1cm4gdytnLnJlYWRfc2hpZnQoZWU+PjEsInV0ZjE2bGUiKS5yZXBs''@;'; put 'put ''YWNlKHksIiIpfShnKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTW9uaWtlciAiK3cpfX0oZykpLDgmVyYmKERlPWthKGcpKSwzMiZXJiYoUmU9Zy5yZWFkX3NoaWZ0KDE2KSksNjQmVyYmKFZlPU1nKGcpKSxnLmw9dzt2YXIgR2U9bGV8fG9lfHxkZXx8IiI7R2UmJkRl''@;'; put 'put ''JiYoR2UrPSIjIitEZSksR2V8fChHZT0iIyIrRGUpLDImVyYmIi8iPT1HZS5jaGFyQXQoMCkmJiIvIiE9R2UuY2hhckF0KDEpJiYoR2U9ImZpbGU6Ly8iK0dlKTt2YXIgZXQ9e1RhcmdldDpHZX07cmV0dXJuIFJlJiYoZXQuZ3VpZD1SZSksVmUmJihldC50aW1lPVZlKSxlZSYmKGV0LlRvb2x0''@;'; put 'put ''aXA9ZWUpLGV0fShnLHgtMjQpO3JldHVyblt3LFZdfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOmFofSw0NDM6e246IlNYRkRCVHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOnRsfSw0NDU6e246Ik9iTm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNl''@;'; put 'put ''bDlGaWxlIixmOlZsfSw0NDk6e246IlJlY2FsY0lkIixmOmZ1bmN0aW9uIHdkKGcpe3JldHVybiBnLnJlYWRfc2hpZnQoMiksZy5yZWFkX3NoaWZ0KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpWbH0sNTEyOntuOiJEaW1lbnNpb25zIixmOkNkfSw1MTM6e246IkJsYW5rIixmOm5VfSw1''@;'; put 'put ''MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBrbyhnLHgsdyl7dy5iaWZmZ3Vlc3MmJjI9PXcuYmlmZiYmKHcuYmlmZj01KTt2YXIgVj1EcyhnKSxXPU5sKGcpO3JldHVybiBWLnZhbD1XLFZ9fSw1MTY6e246IkxhYmVsIixmOmZ1bmN0aW9uIGhNKGcseCx3KXt3LmJpZmZndWVzcyYmMj09dy5i''@;'; put 'put ''aWZmJiYody5iaWZmPTUpO3ZhciBXPURzKGcpOzI9PXcuYmlmZiYmZy5sKys7dmFyIGVlPWFoKGcsMCx3KTtyZXR1cm4gVy52YWw9ZWUsV319LDUxNzp7bjoiQm9vbEVyciIsZjpUX30sNTE5OntuOiJTdHJpbmciLGY6d019LDUyMDp7bjoiUm93IixmOmZ1bmN0aW9uIGplKGcpe3ZhciB4PXt9''@;'; put 'put ''O3gucj1nLnJlYWRfc2hpZnQoMikseC5jPWcucmVhZF9zaGlmdCgyKSx4LmNudD1nLnJlYWRfc2hpZnQoMikteC5jO3ZhciB3PWcucmVhZF9zaGlmdCgyKTtnLmwrPTQ7dmFyIFY9Zy5yZWFkX3NoaWZ0KDEpO2cubCs9MTt2YXIgVz1nLnJlYWRfc2hpZnQoMik7cmV0dXJuIHguaXhmZT00MDk1''@;'; put 'put ''JlcsNyZWJiYoeC5sZXZlbD03JlYpLDMyJlYmJih4LmhpZGRlbj0hMCksNjQmViYmKHguaHB0PXcvMjApLHh9fSw1MjM6e246IkluZGV4In0sNTQ1OntuOiJBcnJheSIsZjpQSX0sNTQ5OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOm4yfSw1NjY6e246IlRhYmxlIn0sNTc0OntuOiJXaW5kb3cy''@;'; put 'put ''IixmOmZ1bmN0aW9uIERJKGcseCx3KXtpZih3JiZ3LmJpZmY+PTImJncuYmlmZjw1KXJldHVybnt9O3ZhciBWPWcucmVhZF9zaGlmdCgyKTtyZXR1cm57UlRMOjY0JlYsZ3JpZDohISgyJlYpLGZyb3plbjohISg4JlYpfX19LDYzODp7bjoiUksiLGY6ZnVuY3Rpb24gcE0oZyl7dmFyIHg9Zy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLHc9Zy5yZWFkX3NoaWZ0KDIpLFY9QWcoZyk7cmV0dXJue3I6eCxjOncsaXhmZTpWWzBdLHJrbnVtOlZbMV19fX0sNjU5OntuOiJTdHlsZSIsZjpmdW5jdGlvbiBtTShnLHgsdyl7cmV0dXJuIGcubCs9eCx7fX19LDEwNDg6e246IkJpZ05hbWUifSwxMDU0OntuOiJGb3Jt''@;'; put 'put ''YXQiLGY6ZnVuY3Rpb24gR3ooZyx4LHcpe3JldHVybltnLnJlYWRfc2hpZnQoMiksb2YoZywwLHcpXX19LDEwODQ6e246IkNvbnRpbnVlQmlnTmFtZSJ9LDEyMTI6e246IlNockZtbGEiLGY6ZnVuY3Rpb24gSnooZyx4LHcpe3ZhciBWPXdfKGcpO2cubCsrO3ZhciBXPWcucmVhZF9zaGlmdCgx''@;'; put 'put ''KTtyZXR1cm5bU3goZyx4LT04LHcpLFcsVl19fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6ZnVuY3Rpb24gYk0oZyx4KXtnLnJlYWRfc2hpZnQoMik7dmFyIHc9VjEoZyksVj1nLnJlYWRfc2hpZnQoKHgtMTApLzIsImRiY3MtY29udCIpO3JldHVyblt3LFY9Vi5yZXBsYWNlKHksIiIpXX19''@;'; put 'put ''LDIwNDk6e246IldlYlB1YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVyeUV4dCJ9LDIwNTI6e246IkV4dFN0cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3OntuOiJCT0Yi''@;'; put 'put ''LGY6Y2Z9LDIwNTg6e246Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJTWFZpZXdFeCJ9LDIwNjE6e246IlNYVEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVGcnQifSwyMDY3''@;'; put 'put ''OntuOiJSZWFsVGltZURhdGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJGcnRXcmFwcGVyIn0sMjEzMDp7bjoiU3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0OntuOiJDYXRM''@;'; put 'put ''YWIifSwyMTM1OntuOiJZTXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQaXZvdENoYXJ0Qml0cyJ9LDIxMzg6e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwyMTQ5OntuOiJD''@;'; put 'put ''ckVyciJ9LDIxNTA6e246IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6Vmx9LDIxNTI6e246IkZlYXQifSwyMTU0OntuOiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhkcjExIn0sMjE2''@;'; put 'put ''Mjp7bjoiRmVhdHVyZTExIn0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJDb250aW51ZUZydDExIn0sMjE2Njp7bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJDRjEyIn0sMjE3''@;'; put 'put ''MTp7bjoiQ0ZFeCJ9LDIxNzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIGcxKGcpe2cubCs9Mjt2YXIgeD17Y3hmczowLGNyYzowfTtyZXR1cm4geC5jeGZzPWcucmVhZF9zaGlmdCgyKSx4LmNyYz1nLnJlYWRfc2hpZnQoNCkseH0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVuY3Rpb24gTFUo''@;'; put 'put ''Zyx4KXtnLmwrPTI7dmFyIFY9Zy5yZWFkX3NoaWZ0KDIpO2cubCs9Mjtmb3IodmFyIFc9Zy5yZWFkX3NoaWZ0KDIpLGVlPVtdO1ctLSA+MDspZWUucHVzaChBUihnKSk7cmV0dXJue2l4ZmU6VixleHQ6ZWV9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwyMTc1OntuOiJDb250aW51''@;'; put 'put ''ZUZydDEyIn0sMjE4MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246Ik1EWFR1cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURYUHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9LDIxODg6e246IkNvbXBh''@;'; put 'put ''dDEyIixmOmlhLHI6MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixyOjEyfSwyMTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVTdHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNoIn0sMjE5Njp7bjoiTmFt''@;'; put 'put ''ZUNtdCIsZjpmdW5jdGlvbiBxeihnLHgsdyl7aWYoISh3LmJpZmY8OCkpe3ZhciBWPWcucmVhZF9zaGlmdCgyKSxXPWcucmVhZF9zaGlmdCgyKTtyZXR1cm5bYjAoZyxWLHcpLGIwKGcsVyx3KV19Zy5sKz14fSxyOjEyfSwyMTk3OntuOiJTb3J0RGF0YSJ9LDIxOTg6e246IlRoZW1lIixmOmZ1''@;'; put 'put ''bmN0aW9uIFdNKGcseCx3KXt2YXIgVj1nLmwreDtpZigxMjQyMjYhPT1nLnJlYWRfc2hpZnQoNCkpe2lmKCF3LmNlbGxTdHlsZXMpcmV0dXJuIHZvaWQoZy5sPVYpO3ZhciBsZSxlZT1nLnNsaWNlKGcubCk7Zy5sPVY7dHJ5e2xlPW5uKGVlLHt0eXBlOiJhcnJheSJ9KX1jYXRjaHtyZXR1cm59''@;'; put 'put ''dmFyIG9lPXJyKGxlLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYob2UpcmV0dXJuIFcwKG9lLHcpfX0scjoxMn0sMjE5OTp7bjoiR1VJRFR5cGVMaWIifSwyMjAwOntuOiJGbkdycDEyIn0sMjIwMTp7bjoiTmFtZUZuR3JwMTIifSwyMjAyOntuOiJNVFJTZXR0aW5ncyIsZjpmdW5j''@;'; put 'put ''dGlvbiBReihnKXtyZXR1cm5bMCE9PWcucmVhZF9zaGlmdCg0KSwwIT09Zy5yZWFkX3NoaWZ0KDQpLGcucmVhZF9zaGlmdCg0KV19LHI6MTJ9LDIyMDM6e246IkNvbXByZXNzUGljdHVyZXMiLGY6Vmx9LDIyMDQ6e246IkhlYWRlckZvb3RlciJ9LDIyMDU6e246IkNydExheW91dDEyIn0sMjIw''@;'; put 'put ''Njp7bjoiQ3J0TWxGcnQifSwyMjA3OntuOiJDcnRNbEZydENvbnRpbnVlIn0sMjIxMTp7bjoiRm9yY2VGdWxsQ2FsY3VsYXRpb24iLGY6ZnVuY3Rpb24gTXQoZyl7dmFyIHg9ZnVuY3Rpb24gemMoZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDIpLHc9Zy5yZWFkX3NoaWZ0KDIpO3JldHVybiBnLmwr''@;'; put 'put ''PTgse3R5cGU6eCxmbGFnczp3fX0oZyk7aWYoMjIxMSE9eC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIreC50eXBlKTtyZXR1cm4gMCE9PWcucmVhZF9zaGlmdCg0KX19LDIyMTI6e246IlNoYXBlUHJvcHNTdHJlYW0ifSwyMjEzOntuOiJUZXh0UHJvcHNT''@;'; put 'put ''dHJlYW0ifSwyMjE0OntuOiJSaWNoVGV4dFN0cmVhbSJ9LDIyMTU6e246IkNydExheW91dDEyQSJ9LDQwOTc6e246IlVuaXRzIn0sNDA5ODp7bjoiQ2hhcnQifSw0MDk5OntuOiJTZXJpZXMifSw0MTAyOntuOiJEYXRhRm9ybWF0In0sNDEwMzp7bjoiTGluZUZvcm1hdCJ9LDQxMDU6e246Ik1h''@;'; put 'put ''cmtlckZvcm1hdCJ9LDQxMDY6e246IkFyZWFGb3JtYXQifSw0MTA3OntuOiJQaWVGb3JtYXQifSw0MTA4OntuOiJBdHRhY2hlZExhYmVsIn0sNDEwOTp7bjoiU2VyaWVzVGV4dCJ9LDQxMTY6e246IkNoYXJ0Rm9ybWF0In0sNDExNzp7bjoiTGVnZW5kIn0sNDExODp7bjoiU2VyaWVzTGlzdCJ9''@;'; put 'put ''LDQxMTk6e246IkJhciJ9LDQxMjA6e246IkxpbmUifSw0MTIxOntuOiJQaWUifSw0MTIyOntuOiJBcmVhIn0sNDEyMzp7bjoiU2NhdHRlciJ9LDQxMjQ6e246IkNydExpbmUifSw0MTI1OntuOiJBeGlzIn0sNDEyNjp7bjoiVGljayJ9LDQxMjc6e246IlZhbHVlUmFuZ2UifSw0MTI4OntuOiJD''@;'; put 'put ''YXRTZXJSYW5nZSJ9LDQxMjk6e246IkF4aXNMaW5lIn0sNDEzMDp7bjoiQ3J0TGluayJ9LDQxMzI6e246IkRlZmF1bHRUZXh0In0sNDEzMzp7bjoiVGV4dCJ9LDQxMzQ6e246IkZvbnRYIixmOnRsfSw0MTM1OntuOiJPYmplY3RMaW5rIn0sNDE0Njp7bjoiRnJhbWUifSw0MTQ3OntuOiJCZWdp''@;'; put 'put ''biJ9LDQxNDg6e246IkVuZCJ9LDQxNDk6e246IlBsb3RBcmVhIn0sNDE1NDp7bjoiQ2hhcnQzZCJ9LDQxNTY6e246IlBpY0YifSw0MTU3OntuOiJEcm9wQmFyIn0sNDE1ODp7bjoiUmFkYXIifSw0MTU5OntuOiJTdXJmIn0sNDE2MDp7bjoiUmFkYXJBcmVhIn0sNDE2MTp7bjoiQXhpc1BhcmVu''@;'; put 'put ''dCJ9LDQxNjM6e246IkxlZ2VuZEV4Y2VwdGlvbiJ9LDQxNjQ6e246IlNodFByb3BzIixmOmZ1bmN0aW9uIHRVKGcseCx3KXt2YXIgVj17YXJlYTohMX07aWYoNSE9dy5iaWZmKXJldHVybiBnLmwrPXgsVjt2YXIgVz1nLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGcubCs9MywxNiZXJiYoVi5hcmVh''@;'; put 'put ''PSEwKSxWfX0sNDE2NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5z''@;'; put 'put ''In0sNDE3Nzp7bjoiQlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRDbGllbnQiLGY6ZnVuY3Rpb24gTkkoZyl7Zm9yKHZhciB4PWcucmVhZF9zaGlmdCgyKSx3PVtdO3gtLSA+MDspdy5wdXNoKHczKGcpKTtyZXR1cm4gd319LDQxODk6e246IlNlckZtdCJ9LDQx''@;'; put 'put ''OTE6e246IkNoYXJ0M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQ''@;'; put 'put ''b3BDdXN0b20ifSw0MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjpDZH0sMTp7bjoiQklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIFVJKGcpe3ZhciB4PURzKGcpOysrZy5sO3ZhciB3PWcucmVhZF9zaGlmdCgyKTtyZXR1cm4geC50PSJuIix4LnZhbD13''@;'; put 'put ''LHh9fSwzOntuOiJCSUZGMk5VTSIsZjpmdW5jdGlvbiB6SShnKXt2YXIgeD1EcyhnKTsrK2cubDt2YXIgdz1ObChnKTtyZXR1cm4geC50PSJuIix4LnZhbD13LHh9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiBpVShnLHgsdyl7dy5iaWZmZ3Vlc3MmJjU9PXcuYmlmZiYmKHcuYmlmZj0y''@;'; put 'put ''KTt2YXIgVj1EcyhnKTsrK2cubDt2YXIgVz1vZihnLDAsdyk7cmV0dXJuIFYudD0ic3RyIixWLnZhbD1XLFZ9fSw1OntuOiJCb29sRXJyIixmOlRffSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24gWkkoZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09eD8oZy5sKyssIiIpOmcu''@;'; put 'put ''cmVhZF9zaGlmdCh4LCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoiQk9GIixmOmNmfSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6dGx9LDMwOntuOiJCSUZGMkZPUk1BVCIsZjoken0sMzE6e246IkJJRkYyRk1UQ05UIn0sMzI6e246IkJJRkYyQ09M''@;'; put 'put ''SU5GTyJ9LDMzOntuOiJBcnJheSIsZjpQSX0sMzY6e246IkNPTFdJRFRIIn0sMzc6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6bjJ9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIFlJKGcseCl7Zy5sKz02LGcubCs9MixnLmwrPTEsZy5sKz0zLGcubCs9MSxnLmwrPXgtMTN9fSw2''@;'; put 'put ''Mjp7bjoiQklGRjJXSU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklGRjJYRiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6dGx9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3OntuOiJJbURhdGEiLGY6ZnVuY3Rp''@;'; put 'put ''b24gUl8oZyl7dmFyIHg9Zy5yZWFkX3NoaWZ0KDIpLHc9Zy5yZWFkX3NoaWZ0KDIpLFY9Zy5yZWFkX3NoaWZ0KDQpLFc9e2ZtdDp4LGVudjp3LGxlbjpWLGRhdGE6Zy5zbGljZShnLmwsZy5sK1YpfTtyZXR1cm4gZy5sKz1WLFd9fSwxMzU6e246IkFkZGluIn0sMTM2OntuOiJFZGcifSwxMzc6''@;'; put 'put ''e246IlB1YiJ9LDE0NTp7bjoiU3ViIn0sMTQ4OntuOiJMSFJlY29yZCJ9LDE0OTp7bjoiTEhOR3JhcGgifSwxNTA6e246IlNvdW5kIn0sMTY5OntuOiJDb29yZExpc3QifSwxNzE6e246IkdDVyJ9LDE4ODp7bjoiU2hyRm1sYSJ9LDE5MTp7bjoiVG9vbGJhckhkciJ9LDE5Mjp7bjoiVG9vbGJh''@;'; put 'put ''ckVuZCJ9LDE5NDp7bjoiQWRkTWVudSJ9LDE5NTp7bjoiRGVsTWVudSJ9LDIxNDp7bjoiUlN0cmluZyIsZjpmdW5jdGlvbiB4TShnLHgsdyl7dmFyIFY9Zy5sK3gsVz1EcyhnKSxlZT1nLnJlYWRfc2hpZnQoMiksbGU9YjAoZyxlZSx3KTtyZXR1cm4gZy5sPVYsVy50PSJzdHIiLFcudmFsPWxl''@;'; put 'put ''LFd9fSwyMjM6e246IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0OntuOiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjphTH0sNTIxOntuOiJCT0YiLGY6Y2Z9LDUzNjp7bjoiTGJsIixmOk9JfSw1NDc6e246IkV4dGVybk5hbWUi''@;'; put 'put ''LGY6TEl9LDU2MTp7bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246IkZvcm11bGEiLGY6YUx9LDEwMzM6e246IkJPRiIsZjpjZn0sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0s''@;'; put 'put ''MjI0MDp7bjoiQXV0b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntuOiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoi''@;'; put 'put ''UExWIn0sMjI0OTp7bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntuOiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxpNj1NZShnOSwibiIpO2Z1bmN0aW9uIFdpKGcseCx3LFYpe3ZhciBXPSt4fHwraTZbeF07aWYoIWlzTmFOKFcpKXt2''@;'; put 'put ''YXIgZWU9Vnx8KHd8fFtdKS5sZW5ndGh8fDAsbGU9Zy5uZXh0KDQpO2xlLndyaXRlX3NoaWZ0KDIsVyksbGUud3JpdGVfc2hpZnQoMixlZSksZWU+MCYmQWEodykmJmcucHVzaCh3KX19ZnVuY3Rpb24gUDMoZyx4LHcpe3JldHVybiBnfHwoZz1Icig3KSksZy53cml0ZV9zaGlmdCgyLHgpLGcu''@;'; put 'put ''d3JpdGVfc2hpZnQoMix3KSxnLndyaXRlX3NoaWZ0KDIsMCksZy53cml0ZV9zaGlmdCgxLDApLGd9ZnVuY3Rpb24gYTYoZyx4LHcsVil7aWYobnVsbCE9eC52KXN3aXRjaCh4LnQpe2Nhc2UiZCI6Y2FzZSJuIjp2YXIgVz0iZCI9PXgudD9ZZShMZSh4LnYpKTp4LnY7cmV0dXJuIHZvaWQoVz09''@;'; put 'put ''KDB8VykmJlc+PTAmJlc8NjU1MzY/V2koZywyLGZ1bmN0aW9uIFdJKGcseCx3KXt2YXIgVj1Icig5KTtyZXR1cm4gUDMoVixnLHgpLFYud3JpdGVfc2hpZnQoMix3KSxWfSh3LFYsVykpOldpKGcsMyxmdW5jdGlvbiBNTShnLHgsdyl7dmFyIFY9SHIoMTUpO3JldHVybiBQMyhWLGcseCksVi53''@;'; put 'put ''cml0ZV9zaGlmdCg4LHcsImYiKSxWfSh3LFYsVykpKTtjYXNlImIiOmNhc2UiZSI6cmV0dXJuIHZvaWQgV2koZyw1LGZ1bmN0aW9uIF9PKGcseCx3LFYpe3ZhciBXPUhyKDkpO3JldHVybiBQMyhXLGcseCkseTModyxWfHwiYiIsVyksV30odyxWLHgudix4LnQpKTtjYXNlInMiOmNhc2Uic3Ry''@;'; put 'put ''IjpyZXR1cm4gdm9pZCBXaShnLDQsZnVuY3Rpb24gYk8oZyx4LHcpe3ZhciBWPUhyKDgrMip3Lmxlbmd0aCk7cmV0dXJuIFAzKFYsZyx4KSxWLndyaXRlX3NoaWZ0KDEsdy5sZW5ndGgpLFYud3JpdGVfc2hpZnQody5sZW5ndGgsdywic2JjcyIpLFYubDxWLmxlbmd0aD9WLnNsaWNlKDAsVi5s''@;'; put 'put ''KTpWfSh3LFYsKHgudnx8IiIpLnNsaWNlKDAsMjU1KSkpfVdpKGcsMSxQMyhudWxsLHcsVikpfWZ1bmN0aW9uIG05KGcseCx3LFYsVyl7dmFyIGVlPTE2K3kxKFcuY2VsbFhmcyxXLmNlbGxTdHlsZVhmcyx4LFcpO2lmKG51bGwhPXgudnx8eC5iZilpZih4LmJmKVdpKGcsIkZvcm11bGEiLGZ1''@;'; put 'put ''bmN0aW9uIFpvZShnLHgsdyxWLFcpe3ZhciBlZT1jbCh4LHcsVyksbGU9ZnVuY3Rpb24gV29lKGcpe2lmKG51bGw9PWcpe3ZhciB4PUhyKDgpO3JldHVybiB4LndyaXRlX3NoaWZ0KDEsMykseC53cml0ZV9zaGlmdCgxLDApLHgud3JpdGVfc2hpZnQoMiwwKSx4LndyaXRlX3NoaWZ0KDIsMCks''@;'; put 'put ''eC53cml0ZV9zaGlmdCgyLDY1NTM1KSx4fXJldHVybiBLdSgibnVtYmVyIj09dHlwZW9mIGc/ZzowKX0oZy52KSxvZT1Icig2KTtvZS53cml0ZV9zaGlmdCgyLDMzKSxvZS53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgRGU9SHIoZy5iZi5sZW5ndGgpLFJlPTA7UmU8Zy5iZi5sZW5ndGg7KytS''@;'; put 'put ''ZSlEZVtSZV09Zy5iZltSZV07cmV0dXJuIEwoW2VlLGxlLG9lLERlXSl9KHgsdyxWLDAsZWUpKTtlbHNlIHN3aXRjaCh4LnQpe2Nhc2UiZCI6Y2FzZSJuIjpXaShnLCJOdW1iZXIiLGZ1bmN0aW9uIEFfKGcseCx3LFYpe3ZhciBXPUhyKDE0KTtyZXR1cm4gY2woZyx4LFYsVyksS3UodyxXKSxX''@;'; put 'put ''fSh3LFYsImQiPT14LnQ/WWUoTGUoeC52KSk6eC52LGVlKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOldpKGcsNTE3LGZ1bmN0aW9uIEt6KGcseCx3LFYsVyxlZSl7dmFyIGxlPUhyKDgpO3JldHVybiBjbChnLHgsVixsZSkseTModyxlZSxsZSksbGV9KHcsVix4LnYsZWUsMCx4LnQpKTticmVh''@;'; put 'put ''aztjYXNlInMiOmNhc2Uic3RyIjppZihXLmJvb2tTU1Qpe3ZhciBvZT1RNyhXLlN0cmluZ3MseC52LHguUj94LnI9eTcoeC5SKTpudWxsLFcucmV2U3RyaW5ncyk7aWYoeC5SKWZvcih2YXIgZGU9MDtkZTx4LlIubGVuZ3RoOysrZGUpeC5SW2RlXS5zJiZ5MShXLmNlbGxYZnMsVy5jZWxsU3R5''@;'; put 'put ''bGVYZnMse3Q6Im4iLHY6MCxzOnguUltkZV0uc30sVyk7V2koZywiTGFiZWxTc3QiLGZ1bmN0aW9uIElnKGcseCx3LFYpe3ZhciBXPUhyKDEwKTtyZXR1cm4gY2woZyx4LFYsVyksVy53cml0ZV9zaGlmdCg0LHcpLFd9KHcsVixvZSxlZSkpfWVsc2UgV2koZywiTGFiZWwiLGZ1bmN0aW9uIHAx''@;'; put 'put ''KGcseCx3LFYsVyl7dmFyIGVlPSFXfHw4PT1XLmJpZmYsbGU9SHIoK2VlKzgrKDErZWUpKncubGVuZ3RoKTtyZXR1cm4gY2woZyx4LFYsbGUpLGxlLndyaXRlX3NoaWZ0KDIsdy5sZW5ndGgpLGVlJiZsZS53cml0ZV9zaGlmdCgxLDEpLGxlLndyaXRlX3NoaWZ0KCgxK2VlKSp3Lmxlbmd0aCx3''@;'; put 'put ''LGVlPyJ1dGYxNmxlIjoic2JjcyIpLGxlfSh3LFYsKHgudnx8IiIpLnNsaWNlKDAsMjU1KSxlZSxXKSk7YnJlYWs7ZGVmYXVsdDpXaShnLCJCbGFuayIsY2wodyxWLGVlKSl9ZWxzZSBXaShnLCJCbGFuayIsY2wodyxWLGVlKSl9ZnVuY3Rpb24gUVooZyx4LHcpe3ZhciBSZSxWPUN0KCksVz13''@;'; put 'put ''LlNoZWV0TmFtZXNbZ10sZWU9dy5TaGVldHNbV118fHt9LGxlPSh3fHx7fSkuV29ya2Jvb2t8fHt9LG9lPShsZS5TaGVldHN8fFtdKVtnXXx8e30sZGU9QXJyYXkuaXNBcnJheShlZSksRGU9OD09eC5iaWZmLFZlPSIiLEdlPVtdLGV0PVNhKGVlWyIhcmVmIl18fCJBMSIpLGJ0PURlPzY1NTM2''@;'; put 'put ''OjE2Mzg0O2lmKGV0LmUuYz4yNTV8fGV0LmUucj49YnQpe2lmKHguV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoZWVbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7ZXQuZS5jPU1hdGgubWluKGV0LmUuYywyNTUpLGV0LmUucj1NYXRoLm1p''@;'; put 'put ''bihldC5lLmMsYnQtMSl9V2koViwyMDU3LE1fKDAsMTYseCkpLFdpKFYsIkNhbGNNb2RlIixHYSgxKSksV2koViwiQ2FsY0NvdW50IixHYSgxMDApKSxXaShWLCJDYWxjUmVmTW9kZSIsWm8oITApKSxXaShWLCJDYWxjSXRlciIsWm8oITEpKSxXaShWLCJDYWxjRGVsdGEiLEt1KC4wMDEpKSxX''@;'; put 'put ''aShWLCJDYWxjU2F2ZVJlY2FsYyIsWm8oITApKSxXaShWLCJQcmludFJvd0NvbCIsWm8oITEpKSxXaShWLCJQcmludEdyaWQiLFpvKCExKSksV2koViwiR3JpZFNldCIsR2EoMSkpLFdpKFYsIkd1dHMiLGZ1bmN0aW9uIHZNKGcpe3ZhciB4PUhyKDgpO3JldHVybiB4LndyaXRlX3NoaWZ0KDQs''@;'; put 'put ''MCkseC53cml0ZV9zaGlmdCgyLGdbMF0/Z1swXSsxOjApLHgud3JpdGVfc2hpZnQoMixnWzFdP2dbMV0rMTowKSx4fShbMCwwXSkpLFdpKFYsIkhDZW50ZXIiLFpvKCExKSksV2koViwiVkNlbnRlciIsWm8oITEpKTt2YXIgSmU9ZWVbIiFwcmludCJdJiZlZVsiIXByaW50Il0ubWFyZ2luc3x8''@;'; put 'put ''ZWVbIiFtYXJnaW5zIl07SmUmJihudWxsIT1KZS5sZWZ0JiZXaShWLCJMZWZ0TWFyZ2luIixLdShKZS5sZWZ0KSksbnVsbCE9SmUucmlnaHQmJldpKFYsIlJpZ2h0TWFyZ2luIixLdShKZS5yaWdodCkpLG51bGwhPUplLnRvcCYmV2koViwiVG9wTWFyZ2luIixLdShKZS50b3ApKSxudWxsIT1K''@;'; put 'put ''ZS5ib3R0b20mJldpKFYsIkJvdHRvbU1hcmdpbiIsS3UoSmUuYm90dG9tKSksKG51bGwhPUplLmhlYWRlcnx8bnVsbCE9SmUuZm9vdGVyKSYmV2koViwiU2V0dXAiLGZ1bmN0aW9uIE0zKGcseCl7dmFyIHc9SHIoMzQpLFY9ITEsVz03MDtyZXR1cm4ibGFuZHNjYXBlIj09KHgucHJvcHN8fHt9''@;'; put 'put ''KS5vcmllbnRhdGlvbiYmKFY9ITAsVyY9LTY3KSxWJiYoVyY9LTUpLHcud3JpdGVfc2hpZnQoMiwxKSx3LndyaXRlX3NoaWZ0KDIsMTAwKSx3LndyaXRlX3NoaWZ0KDIsMCksdy53cml0ZV9zaGlmdCgyLDApLHcud3JpdGVfc2hpZnQoMiwwKSx3LndyaXRlX3NoaWZ0KDEsVyksdy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApLHcud3JpdGVfc2hpZnQoMiw2MDApLHcud3JpdGVfc2hpZnQoMiw2MDApLEt1KG51bGw9PWcuaGVhZGVyPy41OmcuaGVhZGVyLHcpLEt1KG51bGw9PWcuZm9vdGVyPy41OmcuZm9vdGVyLHcpLHcud3JpdGVfc2hpZnQoMiwxKSx3fShKZSxlZVsiIXByaW50Il18fHt9KSkpLERl''@;'; put 'put ''JiZmdW5jdGlvbiBKWihnLHgsdyl7aWYoeCl7dmFyIFY9MDt4LmZvckVhY2goZnVuY3Rpb24oVyxlZSl7KytWPD0yNTYmJlcmJihXLmF1dG8mJnBMKHcsVyxlZSksV2koZywiQ29sSW5mbyIsZnVuY3Rpb24gQkkoZyx4KXt2YXIgdz1IcigxMik7dy53cml0ZV9zaGlmdCgyLHgpLHcud3JpdGVf''@;'; put 'put ''c2hpZnQoMix4KSx3LndyaXRlX3NoaWZ0KDIsMjU2Kmcud2lkdGgpLHcud3JpdGVfc2hpZnQoMiwwKTt2YXIgVj0wO3JldHVybiBnLmhpZGRlbiYmKFZ8PTEpLHcud3JpdGVfc2hpZnQoMSxWKSx3LndyaXRlX3NoaWZ0KDEsVj1nLmxldmVsfHwwKSx3LndyaXRlX3NoaWZ0KDIsMCksd30oc2Io''@;'; put 'put ''ZWUsVyksZWUpKSl9KX19KFYsZWVbIiFjb2xzIl0sZWUpLFdpKFYsIkRpbWVuc2lvbnMiLGZ1bmN0aW9uIElJKGcseCl7dmFyIHc9OCE9eC5iaWZmJiZ4LmJpZmY/Mjo0LFY9SHIoMip3KzYpO3JldHVybiBWLndyaXRlX3NoaWZ0KHcsZy5zLnIpLFYud3JpdGVfc2hpZnQodyxnLmUucisxKSxW''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsZy5zLmMpLFYud3JpdGVfc2hpZnQoMixnLmUuYysxKSxWLndyaXRlX3NoaWZ0KDIsMCksVn0oZXQseCkpLERlJiYoZWVbIiFsaW5rcyJdPVtdKSxlZVsiIXJvd3MiXSYmRGUmJmVlWyIhcm93cyJdLmZvckVhY2goZnVuY3Rpb24oenQsU24pe2Zvcih2YXIgbHI9em4o''@;'; put 'put ''U24pLG1uPTI1Nixkcj0wLEduPXp0LnM/MTYreTEoeC5jZWxsWGZzLHguY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczp6dC5zfSx4KTowLEhuPWV0LnMuYztIbjw9ZXQuZS5jOysrSG4pKGRlPyhlZVtTbl18fFtdKVtIbl06ZWVbR2VbSG5dK2xyXSkmJihIbjxtbiYmKG1uPUhuKSxIbj5kciYm''@;'; put 'put ''KGRyPUhuKSk7ZHI8bW4mJihtbj1kcj0wKSxXaShWLCJSb3ciLGZ1bmN0aW9uIGx0KGcseCx3KXt2YXIgVj1IcigxNik7Vi53cml0ZV9zaGlmdCgyLHgpLFYud3JpdGVfc2hpZnQoMix3WzBdKSxWLndyaXRlX3NoaWZ0KDIsd1sxXSsxKSxWLndyaXRlX3NoaWZ0KDIsMjAqZy5ocHR8fDIwKkUz''@;'; put 'put ''KGcuaHB4KXx8MzMwKSxWLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFc9MDtyZXR1cm4gV3w9MHxnLmxldmVsLGcuaGlkZGVuJiYoV3w9MzIpLFd8PTY0LHdbMl0mJihXfD0xMjgpLFYud3JpdGVfc2hpZnQoMSxXKSxWLndyaXRlX3NoaWZ0KDEsMSksVi53cml0ZV9zaGlmdCgyLHdbMl18fDApLFZ9''@;'; put 'put ''KHp0LFNuLFttbixkcixHbl0pKX0pO2Zvcih2YXIgZnQ9ZXQucy5yO2Z0PD1ldC5lLnI7KytmdCl7VmU9em4oZnQpO2Zvcih2YXIgUnQ9ZXQucy5jO1J0PD1ldC5lLmM7KytSdCl7ZnQ9PT1ldC5zLnImJihHZVtSdF09UGEoUnQpKSxSZT1HZVtSdF0rVmU7dmFyIFN0PWRlPyhlZVtmdF18fFtd''@;'; put 'put ''KVtSdF06ZWVbUmVdO1N0JiYobTkoVixTdCxmdCxSdCx4KSxEZSYmU3QubCYmZWVbIiFsaW5rcyJdLnB1c2goW1JlLFN0LmxdKSl9fXZhciBBdD1vZS5Db2RlTmFtZXx8b2UubmFtZXx8VztyZXR1cm4oRGV8fDU9PXguYmlmZiYmZWVbIiFmcmVlemUiXSkmJldpKFYsIldpbmRvdzIiLGZ1bmN0''@;'; put 'put ''aW9uIE9zKGcseCx3LFYpe3ZhciBXPVYmJlYuYmlmZnx8OCxlZT1Icig4PT1XPzE4OjEwKSxsZT0xNzE4O3JldHVybiB3PjAmJihsZSY9LTUxMyksTHQoeFsiIWdyaWRsaW5lcyJdKSYmKGxlJj0tMykseFsiIWZyZWV6ZSJdJiYobGV8PTgpLGcmJmcuUlRMJiYobGV8PTY0KSw1PT1XJiYobGU9''@;'; put 'put ''NDQ2KSxlZS53cml0ZV9zaGlmdCgyLGxlKSw4PT1XPyhlZS53cml0ZV9zaGlmdCg0LDApLGVlLndyaXRlX3NoaWZ0KDQsNjQpLGVlLndyaXRlX3NoaWZ0KDQsMCksZWUud3JpdGVfc2hpZnQoNCwwKSk6KGVlLndyaXRlX3NoaWZ0KDQsMCksZWUud3JpdGVfc2hpZnQoNCwwKSksZWV9KChsZS5W''@;'; put 'put ''aWV3c3x8W10pWzBdLGVlLGcpKSwoRGV8fDU9PXguYmlmZikmJmVlWyIhZnJlZXplIl0mJldpKFYsIlBhbmUiLGZ1bmN0aW9uIG1tKGcpeyJzdHJpbmciPT10eXBlb2YgZyYmKGc9eGEoZykpO3ZhciB4PUhyKDEwKTtyZXR1cm4geC53cml0ZV9zaGlmdCgyLGcuYykseC53cml0ZV9zaGlmdCgy''@;'; put 'put ''LGcucikseC53cml0ZV9zaGlmdCgyLGcucikseC53cml0ZV9zaGlmdCgyLGcuYykseC53cml0ZV9zaGlmdCgxLDMpLHgud3JpdGVfc2hpZnQoMSwwKSx4fShlZVsiIWZyZWV6ZSJdKSksRGUmJmVlWyIhc2VsIl0mJldpKFYsIlNlbGVjdGlvbiIsZnVuY3Rpb24gU00oZyx4KXt2YXIgdz1Icigx''@;'; put 'put ''NSksVj1nLmNlbGw7aWYoIVYpe2lmKCFnLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtWPUtyKHdyKGcucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFc9InN0cmluZyI9PXR5cGVvZiBWP3hhKFYpOlY7aWYo''@;'; put 'put ''eCl7dmFyIGVlPSJzdHJpbmciPT10eXBlb2YgeD94YSh4KTp4O3cud3JpdGVfc2hpZnQoMSxXLnI+PWVlLnImJlcuYz49ZWUuYz8wOlcucj49ZWUuciYmVy5jPGVlLmM/MjpXLnI8ZWUuciYmVy5jPj1lZS5jPzE6Myl9ZWxzZSB3LndyaXRlX3NoaWZ0KDEsMyk7cmV0dXJuIHcud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixXLnIpLHcud3JpdGVfc2hpZnQoMixXLmMpLHcud3JpdGVfc2hpZnQoMiwwKSx3LndyaXRlX3NoaWZ0KDIsMSksZnVuY3Rpb24gdDIoZyx4KXt4fHwoeD1Icig2KSkseC53cml0ZV9zaGlmdCgyLGcucz9nLnMucjpnLnIpLHgud3JpdGVfc2hpZnQoMixnLmU/Zy5lLnI6Zy5yKSx4Lndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsZy5zP2cucy5jOmcuYykseC53cml0ZV9zaGlmdCgxLGcuZT9nLmUuYzpnLmMpfSh7czpXLGU6V30sdyksd30oZWVbIiFzZWwiXSxlZVsiIWZyZWV6ZSJdKSksRGUmJihlZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZXaShWLCJNZXJnZUNlbGxzIixmdW5jdGlvbiBndChn''@;'; put 'put ''KXt2YXIgeD1IcigyKzgqZy5sZW5ndGgpO3gud3JpdGVfc2hpZnQoMixnLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDsrK3cpZTIoZ1t3XSx4KTtyZXR1cm4geH0oZWVbIiFtZXJnZXMiXSkpLERlJiZmdW5jdGlvbiBxWihnLHgpe2Zvcih2YXIgdz0wO3c8eFsiIWxpbmtzIl0ubGVu''@;'; put 'put ''Z3RoOysrdyl7dmFyIFY9eFsiIWxpbmtzIl1bd107V2koZywiSExpbmsiLF9NKFYpKSxWWzFdLlRvb2x0aXAmJldpKGcsIkhMaW5rVG9vbHRpcCIsSEkoVikpfWRlbGV0ZSB4WyIhbGlua3MiXX0oVixlZSksV2koViwiQ29kZU5hbWUiLFFoKEF0KSksRGUmJmZ1bmN0aW9uIENPKGcseCl7dmFy''@;'; put 'put ''IHc9SHIoMTkpO3cud3JpdGVfc2hpZnQoNCwyMTUxKSx3LndyaXRlX3NoaWZ0KDQsMCksdy53cml0ZV9zaGlmdCg0LDApLHcud3JpdGVfc2hpZnQoMiwzKSx3LndyaXRlX3NoaWZ0KDEsMSksdy53cml0ZV9zaGlmdCg0LDApLFdpKGcsIkZlYXRIZHIiLHcpLCh3PUhyKDM5KSkud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwyMTUyKSx3LndyaXRlX3NoaWZ0KDQsMCksdy53cml0ZV9zaGlmdCg0LDApLHcud3JpdGVfc2hpZnQoMiwzKSx3LndyaXRlX3NoaWZ0KDEsMCksdy53cml0ZV9zaGlmdCg0LDApLHcud3JpdGVfc2hpZnQoMiwxKSx3LndyaXRlX3NoaWZ0KDQsNCksdy53cml0ZV9zaGlmdCgyLDApLGUy''@;'; put 'put ''KFNhKHhbIiFyZWYiXXx8IkExIiksdyksdy53cml0ZV9zaGlmdCg0LDQpLFdpKGcsIkZlYXQiLHcpfShWLGVlKSxXaShWLCJFT0YiKSxWLmVuZCgpfWZ1bmN0aW9uIGVZKGcseCx3KXt2YXIgVj1DdCgpLFc9KGd8fHt9KS5Xb3JrYm9va3x8e30sZWU9Vy5TaGVldHN8fFtdLGxlPVcuV0JQcm9w''@;'; put 'put ''c3x8e30sb2U9OD09dy5iaWZmLGRlPTU9PXcuYmlmZjtXaShWLDIwNTcsTV8oMCw1LHcpKSwieGxhIj09dy5ib29rVHlwZSYmV2koViwiQWRkaW4iKSxXaShWLCJJbnRlcmZhY2VIZHIiLG9lP0dhKDEyMDApOm51bGwpLFdpKFYsIk1tcyIsZnVuY3Rpb24gXzAoZyx4KXt4fHwoeD1IcihnKSk7''@;'; put 'put ''Zm9yKHZhciB3PTA7dzxnOysrdyl4LndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIHh9KDIpKSxkZSYmV2koViwiVG9vbGJhckhkciIpLGRlJiZXaShWLCJUb29sYmFyRW5kIiksV2koViwiSW50ZXJmYWNlRW5kIiksV2koViwiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIFRJKGcseCl7dmFyIHc9IXh8''@;'; put 'put ''fDg9PXguYmlmZixWPUhyKHc/MTEyOjU0KTtmb3IoVi53cml0ZV9zaGlmdCg4PT14LmJpZmY/MjoxLDcpLHcmJlYud3JpdGVfc2hpZnQoMSwwKSxWLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxWLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwodz8wOjUzNjg3MDkxMikpO1YubDxWLmxlbmd0aDsp''@;'; put 'put ''Vi53cml0ZV9zaGlmdCgxLHc/MDozMik7cmV0dXJuIFZ9KDAsdykpLFdpKFYsIkNvZGVQYWdlIixHYShvZT8xMjAwOjEyNTIpKSxvZSYmV2koViwiRFNGIixHYSgwKSksb2UmJldpKFYsIkV4Y2VsOUZpbGUiKSxXaShWLCJSUlRhYklkIixmdW5jdGlvbiBqSShnKXtmb3IodmFyIHg9SHIoMipn''@;'; put 'put ''KSx3PTA7dzxnOysrdyl4LndyaXRlX3NoaWZ0KDIsdysxKTtyZXR1cm4geH0oZy5TaGVldE5hbWVzLmxlbmd0aCkpLG9lJiZnLnZiYXJhdyYmV2koViwiT2JQcm9qIiksb2UmJmcudmJhcmF3JiZXaShWLCJDb2RlTmFtZSIsUWgobGUuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksV2koViwi''@;'; put 'put ''QnVpbHRJbkZuR3JvdXBDb3VudCIsR2EoMTcpKSxXaShWLCJXaW5Qcm90ZWN0IixabyghMSkpLFdpKFYsIlByb3RlY3QiLFpvKCExKSksV2koViwiUGFzc3dvcmQiLEdhKDApKSxvZSYmV2koViwiUHJvdDRSZXYiLFpvKCExKSksb2UmJldpKFYsIlByb3Q0UmV2UGFzcyIsR2EoMCkpLFdpKFYs''@;'; put 'put ''IldpbmRvdzEiLGZ1bmN0aW9uIGtJKCl7dmFyIGc9SHIoMTgpO3JldHVybiBnLndyaXRlX3NoaWZ0KDIsMCksZy53cml0ZV9zaGlmdCgyLDApLGcud3JpdGVfc2hpZnQoMiwyOTI4MCksZy53cml0ZV9zaGlmdCgyLDE3NjAwKSxnLndyaXRlX3NoaWZ0KDIsNTYpLGcud3JpdGVfc2hpZnQoMiww''@;'; put 'put ''KSxnLndyaXRlX3NoaWZ0KDIsMCksZy53cml0ZV9zaGlmdCgyLDEpLGcud3JpdGVfc2hpZnQoMiw1MDApLGd9KCkpLFdpKFYsIkJhY2t1cCIsWm8oITEpKSxXaShWLCJIaWRlT2JqIixHYSgwKSksV2koViwiRGF0ZTE5MDQiLFpvKCJ0cnVlIj09ZnVuY3Rpb24gQ1ooZyl7cmV0dXJuIGcuV29y''@;'; put 'put ''a2Jvb2smJmcuV29ya2Jvb2suV0JQcm9wcyYmSXIoZy5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0KT8idHJ1ZSI6ImZhbHNlIn0oZykpKSxXaShWLCJDYWxjUHJlY2lzaW9uIixabyghMCkpLG9lJiZXaShWLCJSZWZyZXNoQWxsIixabyghMSkpLFdpKFYsIkJvb2tCb29sIixHYSgwKSksdmw9''@;'; put 'put ''b20oWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1XSksZnVuY3Rpb24gS1ooZyx4LHcpeygoKHh8fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tz''@;'; put 'put ''ejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oVil7V2koZywiRm9udCIsZnVuY3Rpb24gWXooZyx4KXt2YXIgdz1nLm5hbWV8fCJBcmlhbCIsVj14JiY1PT14LmJpZmYsZWU9SHIoVj8xNSt3Lmxlbmd0''@;'; put 'put ''aDoxNisyKncubGVuZ3RoKTtlZS53cml0ZV9zaGlmdCgyLDIwKihnLnN6fHwxMikpO3ZhciBsZT0wO3JldHVybiBnLmJvbGQmJihsZXw9MSksZy5pdGFsaWMmJihsZXw9MiksZy5zdHJpa2UmJihsZXw9OCksZy5zaGFkb3cmJihsZXw9MzIpLGVlLndyaXRlX3NoaWZ0KDEsbGUpLGVlLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsMCksZWUud3JpdGVfc2hpZnQoMixnLmNvbG9yPyRNKGcuY29sb3IsNjQpOjY0KSxlZS53cml0ZV9zaGlmdCgyLGcuYm9sZD83MDA6NDAwKSxlZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PWcudmFsaWduPzE6InN1YiI9PWcudmFsaWduPzI6MCksZWUud3JpdGVfc2hpZnQoMSxn''@;'; put 'put ''LnVuZGVybGluZXx8MCksZWUud3JpdGVfc2hpZnQoMSxlZS5mYW1pbHl8fDApLGVlLndyaXRlX3NoaWZ0KDEsZWUuY2hhcnNldHx8MCksZWUud3JpdGVfc2hpZnQoMSwwKSxlZS53cml0ZV9zaGlmdCgxLHcubGVuZ3RoKSxWfHxlZS53cml0ZV9zaGlmdCgxLDEpLGVlLndyaXRlX3NoaWZ0KChW''@;'; put 'put ''PzE6Mikqdy5sZW5ndGgsdyxWPyJzYmNzIjoidXRmMTZsZSIpLGVlfShWLHcpKX0pfShWLGcsdyksZnVuY3Rpb24gd08oZyx4LHcpe3gmJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oVil7Zm9yKHZhciBXPVZbMF07Vzw9VlsxXTsrK1cpbnVsbCE9''@;'; put 'put ''eFtXXSYmV2koZywiRm9ybWF0IixmTShXLHhbV10sdykpfSl9KFYsZy5TU0YsdyksZnVuY3Rpb24gWFooZyx4KXtmb3IodmFyIHc9MDt3PDE2OysrdylXaShnLCJYRiIscDcoe251bUZtdElkOjAsc3R5bGU6ITB9LDAseCkpO3guY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKFYpe1dpKGcsIlhG''@;'; put 'put ''IixwNyhWLDAseCkpfSl9KFYsdyksV2koViwiUGFsZXR0ZSIsZnVuY3Rpb24gSV8oZyl7dmFyIHg9SHIoMjI2KTt4LndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgdz0wO3c8NTY7Kyt3KXt2YXIgVj1nW3crOF18fHNtW3crOF07eC53cml0ZV9zaGlmdCgxLFZbMF0pLHgud3JpdGVfc2hpZnQo''@;'; put 'put ''MSxWWzFdKSx4LndyaXRlX3NoaWZ0KDEsVlsyXSkseC53cml0ZV9zaGlmdCgxLDApfXJldHVybiB4fSh2bCkpLHZsPXJuKHNtKSxvZSYmV2koViwiVXNlc0VMRnMiLFpvKCExKSk7dmFyIFJlPVYuZW5kKCksVmU9Q3QoKTtvZSYmV2koVmUsIkNvdW50cnkiLGZ1bmN0aW9uIHhvZShnKXtyZXR1''@;'; put 'put ''cm4gZ3x8KGc9SHIoNCkpLGcud3JpdGVfc2hpZnQoMiwxKSxnLndyaXRlX3NoaWZ0KDIsMSksZ30oKSksb2UmJncuU3RyaW5ncyYmZnVuY3Rpb24gR1ooZyx4LHcsVil7dmFyIFc9Vnx8KHd8fFtdKS5sZW5ndGh8fDA7aWYoVzw9ODIyNClyZXR1cm4gV2koZyx4LHcsVyk7dmFyIGVlPSt4fHwr''@;'; put 'put ''aTZbeF07aWYoIWlzTmFOKGVlKSl7Zm9yKHZhciBsZT13LnBhcnRzfHxbXSxvZT0wLGRlPTAsRGU9MDtEZSsobGVbb2VdfHw4MjI0KTw9ODIyNDspRGUrPWxlW29lXXx8ODIyNCxvZSsrO3ZhciBSZT1nLm5leHQoNCk7Zm9yKFJlLndyaXRlX3NoaWZ0KDIsZWUpLFJlLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''RGUpLGcucHVzaCh3LnNsaWNlKGRlLGRlK0RlKSksZGUrPURlO2RlPFc7KXtmb3IoKFJlPWcubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksRGU9MDtEZSsobGVbb2VdfHw4MjI0KTw9ODIyNDspRGUrPWxlW29lXXx8ODIyNCxvZSsrO1JlLndyaXRlX3NoaWZ0KDIsRGUpLGcucHVzaCh3LnNs''@;'; put 'put ''aWNlKGRlLGRlK0RlKSksZGUrPURlfX19KFZlLCJTU1QiLGZ1bmN0aW9uIElzKGcseCl7dmFyIHc9SHIoOCk7dy53cml0ZV9zaGlmdCg0LGcuQ291bnQpLHcud3JpdGVfc2hpZnQoNCxnLlVuaXF1ZSk7Zm9yKHZhciBWPVtdLFc9MDtXPGcubGVuZ3RoOysrVylWW1ddPWowKGdbV10seCk7dmFy''@;'; put 'put ''IGVlPUwoW3ddLmNvbmNhdChWKSk7cmV0dXJuIGVlLnBhcnRzPVt3Lmxlbmd0aF0uY29uY2F0KFYubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUubGVuZ3RofSkpLGVlfSh3LlN0cmluZ3MsdykpLFdpKFZlLCJFT0YiKTt2YXIgR2U9VmUuZW5kKCksZXQ9Q3QoKSxidD0wLEplPTA7Zm9yKEpl''@;'; put 'put ''PTA7SmU8Zy5TaGVldE5hbWVzLmxlbmd0aDsrK0plKWJ0Kz0ob2U/MTI6MTEpKyhvZT8yOjEpKmcuU2hlZXROYW1lc1tKZV0ubGVuZ3RoO3ZhciBmdD1SZS5sZW5ndGgrYnQrR2UubGVuZ3RoO2ZvcihKZT0wO0plPGcuU2hlZXROYW1lcy5sZW5ndGg7KytKZSlXaShldCwiQm91bmRTaGVldDgi''@;'; put 'put ''LEMzKHtwb3M6ZnQsaHM6KGVlW0plXXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6Zy5TaGVldE5hbWVzW0plXX0sdykpLGZ0Kz14W0plXS5sZW5ndGg7dmFyIFN0PWV0LmVuZCgpO2lmKGJ0IT1TdC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIitidCsiICE9ICIrU3QubGVuZ3RoKTt2''@;'; put 'put ''YXIgQXQ9W107cmV0dXJuIFJlLmxlbmd0aCYmQXQucHVzaChSZSksU3QubGVuZ3RoJiZBdC5wdXNoKFN0KSxHZS5sZW5ndGgmJkF0LnB1c2goR2UpLF9jKFtBdF0pfWZ1bmN0aW9uIHY5KGcseCl7dmFyIHc9eHx8e307c3dpdGNoKHcuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gdFkoZyx4KXt2YXIgdz14fHx7fSxWPVtdO0ZnKHgmJnguUFBJfHw5NiksZyYmIWcuU1NGJiYoZy5TU0Y9Yi5nZXRfdGFibGUoKSksZyYmZy5TU0YmJihxKGIpLGIubG9hZF90YWJsZShnLlNTRiksdy5yZXZzc2Y9YmUoZy5TU0YpLHcucmV2c3NmW2cuU1NGWzY1NTM1XV09MCx3LnNz''@;'; put 'put ''Zj1nLlNTRiksZy5TdHlsZXM9e0ZvbnRzOncuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6dy5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5''@;'; put 'put ''MTI1In1dLEJvcmRlcnM6dy5Cb3JkZXJzPVt7fV0sRFhGOncuRFhGPWcuU3R5bGVzJiZnLlN0eWxlcy5EWEZ8fFtdfSxTbSh3LkZvbnRzWzBdKSx3LlN0cmluZ3M9W10sdy5TdHJpbmdzLkNvdW50PTAsdy5TdHJpbmdzLlVuaXF1ZT0wLEo3P3cucmV2U3RyaW5ncz1uZXcgTWFwOih3LnJldlN0''@;'; put 'put ''cmluZ3M9e30sdy5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgdy5yZXZTdHJpbmdzLmZvbyksJHAodyksdy5jZWxsWGZzPVtdLHcuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHkxKHcuY2VsbFhmcyx3LmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSksZy5Qcm9w''@;'; put 'put ''c3x8KGcuUHJvcHM9e30pO2Zvcih2YXIgVz0wO1c8Zy5TaGVldE5hbWVzLmxlbmd0aDsrK1cpVltWLmxlbmd0aF09UVooVyx3LGcpO3JldHVybiBWLnVuc2hpZnQoZVkoZyxWLHcpKSxfYyhbVl0pfShnLHgpO2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiAkWihnLHgpe2Zv''@;'; put 'put ''cih2YXIgdz14fHx7fSxWPUN0KCksVz0wLGVlPTA7ZWU8Zy5TaGVldE5hbWVzLmxlbmd0aDsrK2VlKWcuU2hlZXROYW1lc1tlZV09PXcuc2hlZXQmJihXPWVlKTtpZigwPT1XJiZ3LnNoZWV0JiZnLlNoZWV0TmFtZXNbMF0hPXcuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91''@;'; put 'put ''bmQ6ICIrdy5zaGVldCk7cmV0dXJuIFdpKFYsND09dy5iaWZmPzEwMzM6Mz09dy5iaWZmPzUyMTo5LE1fKDAsMTYsdykpLGZ1bmN0aW9uIGxFKGcseCx3LFYpe3ZhciBsZSxXPUFycmF5LmlzQXJyYXkoeCksZWU9U2EoeFsiIXJlZiJdfHwiQTEiKSxvZT0iIixkZT1bXTtpZihlZS5lLmM+MjU1''@;'; put 'put ''fHxlZS5lLnI+MTYzODMpe2lmKFYuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoeFsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtlZS5lLmM9TWF0aC5taW4oZWUuZS5jLDI1NSksZWUuZS5yPU1hdGgubWluKGVlLmUuYywxNjM4MyksbGU9''@;'; put 'put ''SmkoZWUpfWZvcih2YXIgRGU9ZWUucy5yO0RlPD1lZS5lLnI7KytEZSl7b2U9em4oRGUpO2Zvcih2YXIgUmU9ZWUucy5jO1JlPD1lZS5lLmM7KytSZSl7RGU9PT1lZS5zLnImJihkZVtSZV09UGEoUmUpKSxsZT1kZVtSZV0rb2U7dmFyIFZlPVc/KHhbRGVdfHxbXSlbUmVdOnhbbGVdO1ZlJiZh''@;'; put 'put ''NihnLFZlLERlLFJlKX19fShWLGcuU2hlZXRzW2cuU2hlZXROYW1lc1tXXV0sMCx3KSxXaShWLDEwKSxWLmVuZCgpfShnLHgpfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIrdy5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIHhkPWZ1bmN0aW9uKCl7dmFyIGc9e2NlbnRlckNvbnRp''@;'; put 'put ''bnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIHcoVmUsR2Upe3ZhciBldD1HZXx8e30sYnQ9ZXQuZGVuc2U/W106e30sSmU9KFZlPVZlLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIUplKXRocm93IG5ldyBFcnJvcigiSW52YWxp''@;'; put 'put ''ZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8dGFibGU+Iik7dmFyIGZ0PVZlLm1hdGNoKC88XC90YWJsZS9pKSxSdD1KZS5pbmRleCxTdD1mdCYmZnQuaW5kZXh8fFZlLmxlbmd0aCxBdD1mdW5jdGlvbiBpdChnLHgsdyl7aWYoc258fCJzdHJpbmciPT10eXBlb2YgeClyZXR1cm4gZy5zcGxpdCh4''@;'; put 'put ''KTtmb3IodmFyIFY9Zy5zcGxpdCh4KSxXPVtWWzBdXSxlZT0xO2VlPFYubGVuZ3RoOysrZWUpVy5wdXNoKHcpLFcucHVzaChWW2VlXSk7cmV0dXJuIFd9KFZlLnNsaWNlKFJ0LFN0KSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+IiksenQ9LTEsU249MCxscj0wLG1uPTAsZHI9e3M6e3I6MWU3LGM6''@;'; put 'put ''MWU3fSxlOntyOjAsYzowfX0sR249W107Zm9yKFJ0PTA7UnQ8QXQubGVuZ3RoOysrUnQpe3ZhciBIbj1BdFtSdF0udHJpbSgpLGhyPUhuLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9aHIpe2lmKCI8dGQiPT1ocnx8Ijx0aCI9PWhyKXt2YXIgTm49SG4uc3BsaXQoLzxcL3Rb''@;'; put 'put ''ZGhdPi9pKTtmb3IoU3Q9MDtTdDxObi5sZW5ndGg7KytTdCl7dmFyIHRyPU5uW1N0XS50cmltKCk7aWYodHIubWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciB2aT10cixQaT0wOyI8Ij09dmkuY2hhckF0KDApJiYoUGk9dmkuaW5kZXhPZigiPiIpKT4tMTspdmk9dmkuc2xpY2UoUGkrMSk7Zm9y''@;'; put 'put ''KHZhciBxaT0wO3FpPEduLmxlbmd0aDsrK3FpKXt2YXIgdGE9R25bcWldO3RhLnMuYz09U24mJnRhLnMucjx6dCYmenQ8PXRhLmUuciYmKFNuPXRhLmUuYysxLHFpPS0xKX12YXIgSWk9ZnIodHIuc2xpY2UoMCx0ci5pbmRleE9mKCI+IikpKTttbj1JaS5jb2xzcGFuPytJaS5jb2xzcGFuOjEs''@;'; put 'put ''KChscj0rSWkucm93c3Bhbik+MXx8bW4+MSkmJkduLnB1c2goe3M6e3I6enQsYzpTbn0sZTp7cjp6dCsobHJ8fDEpLTEsYzpTbittbi0xfX0pO3ZhciBTcj1JaS50fHxJaVsiZGF0YS10Il18fCIiO2lmKCF2aS5sZW5ndGgpe1NuKz1tbjtjb250aW51ZX1pZih2aT1vcih2aSksZHIucy5yPnp0''@;'; put 'put ''JiYoZHIucy5yPXp0KSxkci5lLnI8enQmJihkci5lLnI9enQpLGRyLnMuYz5TbiYmKGRyLnMuYz1TbiksZHIuZS5jPFNuJiYoZHIuZS5jPVNuKSx2aS5sZW5ndGgpe3ZhciBGbj17dDoicyIsdjp2aX07ZXQucmF3fHwhdmkudHJpbSgpLmxlbmd0aHx8InMiPT1Tcnx8KEZuPVhyKHZpLGV0KSks''@;'; put 'put ''ZXQuZGVuc2U/KGJ0W3p0XXx8KGJ0W3p0XT1bXSksYnRbenRdW1NuXT1Gbik6YnRbS3Ioe3I6enQsYzpTbn0pXT1GbixTbis9bW59fX19fWVsc2V7aWYoKyt6dCxldC5zaGVldFJvd3MmJmV0LnNoZWV0Um93czw9enQpey0tenQ7YnJlYWt9U249MH19cmV0dXJuIGJ0WyIhcmVmIl09SmkoZHIp''@;'; put 'put ''LEduLmxlbmd0aCYmKGJ0WyIhbWVyZ2VzIl09R24pLGJ0fWZ1bmN0aW9uIFcoVmUsR2UsZXQsYnQsSmUsZnQpe3ZhciBBdCxSdD1WZVsiIW1lcmdlcyJdfHxbXSxTdD1bXSx6dD17c3R5bGU6W119LFNuPSExO2Z1bmN0aW9uIGxyKFFpLERvLGphKXt2YXIgbW89IiIsY289MDtpZihBdFtRaV0p''@;'; put 'put ''c3dpdGNoKEF0W1FpXS5zdHlsZSl7Y2FzZSJ0aGluIjpjYXNlImhhaXIiOm1vPSJzb2xpZCIsY289MTticmVhaztjYXNlIm1lZGl1bSI6bW89InNvbGlkIixjbz0yO2JyZWFrO2Nhc2UidGhpY2siOm1vPSJzb2xpZCIsY289MzticmVhaztjYXNlImRvdWJsZSI6bW89ImRvdWJsZSIsY289Mzti''@;'; put 'put ''cmVhaztjYXNlImRvdHRlZCI6Y2FzZSJkYXNoRG90RG90Ijptbz0iZG90dGVkIixjbz0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaERvdERvdCI6bW89ImRvdHRlZCIsY289MjticmVhaztjYXNlImRhc2hlZCI6Y2FzZSJkYXNoRG90IjpjYXNlInNsYW50RGFzaERvdCI6bW89ImRhc2hlZCIsY289''@;'; put 'put ''MTticmVhaztjYXNlIm1lZGl1bURhc2hlZCI6Y2FzZSJtZWRpdW1EYXNoRG90Ijptbz0iZGFzaGVkIixjbz0yfWU6aWYoMD09Y28pe3N3aXRjaChRaSl7Y2FzZSJ0b3AiOi0tRG87YnJlYWs7Y2FzZSJsZWZ0IjotLWphO2JyZWFrO2Nhc2UiYm90dG9tIjorK0RvO2JyZWFrO2Nhc2UicmlnaHQi''@;'; put 'put ''OisramF9dmFyIEJpPURvPj0wJiZqYT49MD9idC5kZW5zZT8oVmVbRG9dfHxbXSlbamFdOlZlW0tyKHtyOkRvLGM6amF9KV06bnVsbDtpZihCaSl7aWYoQmkucyYmQmkuc1t7dG9wOiJib3R0b20iLGJvdHRvbToidG9wIixsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQifVtRaV1dKWJyZWFrIGU7''@;'; put 'put ''QmkucyYmQmkucy5mZ0NvbG9yJiYoY289MSl9QXQuZmdDb2xvciYmKGNvPTEpLCFCaSYmU24mJjA9PWNvJiYoY289MSl9MCE9Y28mJmNvJiYoenQuc3R5bGUucHVzaCgiYm9yZGVyLSIrUWkrIi1zdHlsZToiKyhtb3x8InRyYW5zcGFyZW50IikpLHp0LnN0eWxlLnB1c2goImJvcmRlci0iK1Fp''@;'; put 'put ''KyItd2lkdGg6IitjbysicHgiKSwiIj09bW8/enQuc3R5bGUucHVzaCgiYm9yZGVyLSIrUWkrIi1jb2xvcjogdHJhbnNwYXJlbnQiKTpBdFtRaV0uY29sb3ImJkF0W1FpXS5jb2xvci5yZ2ImJnp0LnN0eWxlLnB1c2goImJvcmRlci0iK1FpKyItY29sb3I6IyIrTWQoQXRbUWldLmNvbG9yLnJn''@;'; put 'put ''YikpKX1mb3IodmFyIG1uPUdlLnMuYzttbjw9R2UuZS5jOysrbW4pe2Zvcih2YXIgZHI9MCxHbj0wLEhuPTA7SG48UnQubGVuZ3RoOysrSG4paWYoIShSdFtIbl0ucy5yPmV0fHxSdFtIbl0ucy5jPm1ufHxSdFtIbl0uZS5yPGV0fHxSdFtIbl0uZS5jPG1uKSl7aWYoUnRbSG5dLnMucjxldHx8''@;'; put 'put ''UnRbSG5dLnMuYzxtbil7ZHI9LTE7YnJlYWt9ZHI9UnRbSG5dLmUuci1SdFtIbl0ucy5yKzEsR249UnRbSG5dLmUuYy1SdFtIbl0ucy5jKzE7YnJlYWt9aWYoIShkcjwwKSl7dmFyIGhyPUtyKHtyOmV0LGM6bW59KSxObj1idC5kZW5zZT8oVmVbZXRdfHxbXSlbbW5dOlZlW2hyXTtObj9Tbj0h''@;'; put 'put ''MTooU249ITAsTm49e3Q6InoiLHM6e319KTt2YXIgdHI9InoiPT1Obi50PyIiOk5uLmh8fGZhKE5uLnd8fChsYyhObiksTm4udyl8fCIiKTtpZih6dD17c3R5bGU6W119LEF0PU5uLnMpe3ZhciB2aT0xO2lmKCgic3VwZXIiPT1BdC52YWxpZ258fCJzdWIiPT1BdC52YWxpZ24pJiYodmk9Ljgz''@;'; put 'put ''LHRyPXpyKCJzcGFuIix0cix7c3R5bGU6InZlcnRpY2FsLWFsaWduOiAiK0F0LnZhbGlnbn0pKSx6dC5zdHlsZS5wdXNoKCJmb250LXdlaWdodDoiKyhBdC5ib2xkPzcwMDo0MDApKSxBdC5pdGFsaWMmJnp0LnN0eWxlLnB1c2goImZvbnQtc3R5bGU6IGl0YWxpYyIpLChBdC51bmRlcmxpbmV8''@;'; put 'put ''fEF0LnN0cmlrZSkmJnp0LnN0eWxlLnB1c2goInRleHQtZGVjb3JhdGlvbjoiKyhBdC51bmRlcmxpbmU/IiB1bmRlcmxpbmUiOiIiKSsoQXQuc3RyaWtlPyIgbGluZS10aHJvdWdoIjoiIikpLEF0LmNvbG9yJiZBdC5jb2xvci5yZ2ImJnp0LnN0eWxlLnB1c2goImNvbG9yOiAjIitNZChBdC5j''@;'; put 'put ''b2xvci5yZ2IpKSxBdC5uYW1lJiZ6dC5zdHlsZS5wdXNoKCJmb250LWZhbWlseToiK0F0Lm5hbWUrIiwgc2Fucy1zZXJpZiIpLEF0LnN6JiZ6dC5zdHlsZS5wdXNoKCJmb250LXNpemU6IitBdC5zeip2aSsicHQiKSxudWxsIT09QXQucGF0dGVyblR5cGUmJkF0LmZnQ29sb3ImJkF0LmZnQ29s''@;'; put 'put ''b3IucmdiJiZ6dC5zdHlsZS5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitNZChBdC5mZ0NvbG9yLnJnYikpLFsidG9wIiwibGVmdCJdLmZvckVhY2goZnVuY3Rpb24oUWkpe2xyKFFpLGV0LG1uKX0pLGRyPjF8fEduPjEpe3ZhciBQaT1Lcih7cjpldCtkci0xLGM6bW4rR24tMX0pLHFpPWJ0''@;'; put 'put ''LmRlbnNlPyhWZVtldCtkci0xXXx8W10pW21uK0duLTFdOlZlW1BpXSxJaT1BdDtBdD1xaSYmcWkuc3x8QXQsWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oUWkpe2xyKFFpLGV0LG1uKX0pLEF0PUlpfWVsc2VbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihR''@;'; put 'put ''aSl7bHIoUWksZXQsbW4pfSk7aWYoQXQuYWxpZ25tZW50KXtpZihBdC5hbGlnbm1lbnQuaG9yaXpvbnRhbD96dC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiAiKyhnW0F0LmFsaWdubWVudC5ob3Jpem9udGFsXXx8QXQuYWxpZ25tZW50Lmhvcml6b250YWwpKToibiI9PU5uLnQmJnp0LnN0eWxl''@;'; put 'put ''LnB1c2goInRleHQtYWxpZ246IHJpZ2h0IiksQXQuYWxpZ25tZW50LnZlcnRpY2FsKXt2YXIgU3I9QXQuYWxpZ25tZW50LnZlcnRpY2FsO3p0LnN0eWxlLnB1c2goInZlcnRpY2FsLWFsaWduOiAiKygiY2VudGVyIj09U3I/Im1pZGRsZSI6U3IpKX1pZihBdC5hbGlnbm1lbnQud3JhcFRleHQp''@;'; put 'put ''enQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIik7ZWxzZXt2YXIgRm49YnQuZGVuc2U/KFZlW2V0XXx8W10pW21uKzFdOlZlW0tyKHtyOmV0LGM6bW4rMX0pXTtGbiYmInoiIT1Gbi50JiZ6dC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKX19ZWxzZSJuIj09''@;'; put 'put ''Tm4udCYmenQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKTt2YXIgTHI9KChWZVsiIWNvbHMiXXx8W10pW21uXXx8e30pLndweDtudWxsPT1MciYmKExyPSgoVmVbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KX12YXIgcHI9MDtpZihHbjw9MSYmZHI8PTEmJihwcj0o''@;'; put 'put ''KFZlWyIhY29scyJdfHxbXSlbbW5dfHx7fSkud3B4KSYmenQuc3R5bGUucHVzaCgid2lkdGg6ICIrcHIrInB4IiksVmVbIiFjb25kZm10Il0mJmVlKE5uLGV0LG1uLFZlWyIhY29uZGZtdCJdLHp0LnN0eWxlLFZlKSwwPT16dC5zdHlsZS5sZW5ndGg/ZGVsZXRlIHp0LnN0eWxlOnp0LnN0eWxl''@;'; put 'put ''PXp0LnN0eWxlLmpvaW4oIjsiKSxidC5jc3Mpe3ZhciBMbj1KZS5pbmRleE9mKHp0LnN0eWxlKTstMT09TG4mJihKZS5wdXNoKHp0LnN0eWxlKSxMbj1KZS5sZW5ndGgtMSksZGVsZXRlIHp0LnN0eWxlLHp0LmNsYXNzPSJzanMiKyhmdHx8IiIpKyItIitMbn1kcj4xJiYoenQucm93c3Bhbj1k''@;'; put 'put ''ciksR24+MSYmKHp0LmNvbHNwYW49R24pLGJ0LmVkaXRhYmxlP3RyPSc8c3BhbiBjb250ZW50ZWRpdGFibGU9InRydWUiPicrdHIrIjwvc3Bhbj4iOk5uJiYoenRbImRhdGEtdCJdPU5uJiZObi50fHwieiIsbnVsbCE9Tm4udiYmKHp0WyJkYXRhLXYiXT1Obi52KSxudWxsIT1Obi56JiYoenRb''@;'; put 'put ''ImRhdGEteiJdPU5uLnopKSx6dC5pZD0oYnQuaWR8fCJzanMiKSsiLSIraHIsU3QucHVzaCh6cigidGQiLHRyLHp0KSl9fXZhciBaaSxQcj17c3R5bGU6W119OyhaaT1WZVsiIXNoZWV0Rm9ybWF0Il0pJiZaaS5yb3cmJihUNyhaaS5yb3cpLFppLnJvdy5ocHgmJihQci5zdHlsZS5wdXNoKFsi''@;'; put 'put ''aGVpZ2h0IixaaS5yb3cuaHB4KyJweCJdKSxQci5oZWlnaHQ9TWF0aC5yb3VuZChaaS5yb3cuaHB4KSkpO3ZhciBfaT1WZVsiIXJvd3MiXTtpZihfaSYmX2lbZXRdKXt2YXIgcGE9X2lbZXRdO3BhLmhweCYmKFByLnN0eWxlLnB1c2goWyJoZWlnaHQiLCtwYS5ocHgrInB4Il0pLFByLmhlaWdo''@;'; put 'put ''dD1NYXRoLnJvdW5kKHBhLmhweCkpLHBhLmhpZGRlbiYmUHIuc3R5bGUucHVzaChbImRpc3BsYXkiLCJub25lIl0pfXZhciBhbz1bXTtyZXR1cm4gUHIuc3R5bGU9UHIuc3R5bGUucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbihRaSl7cmV0dXJuIShhby5pbmRleE9mKFFpWzBdKT4tMXx8KGFv''@;'; put 'put ''LnB1c2goUWlbMF0pLDApKX0pLm1hcChmdW5jdGlvbihRaSl7cmV0dXJuIFFpWzBdKyI6IitRaVsxXX0pLDA9PVByLnN0eWxlLmxlbmd0aD9kZWxldGUgUHIuc3R5bGU6UHIuc3R5bGU9UHIuc3R5bGUuam9pbigiOyIpLHpyKCJ0ciIsU3Quam9pbigiIiksUHIpfWZ1bmN0aW9uIGVlKFZlLEdl''@;'; put 'put ''LGV0LGJ0LEplLGZ0KXtidC5mb3JFYWNoKGZ1bmN0aW9uKFJ0KXtpZihSdC5fcmVmfHwoUnQuX3JlZj0ic3RyaW5nIj09dHlwZW9mIFJ0LnJlZj93cihSdC5yZWYpOlJ0LnJlZiksIShSdC5fcmVmLnMuYz5ldHx8UnQuX3JlZi5lLmM8ZXR8fFJ0Ll9yZWYucy5yPkdlfHxSdC5fcmVmLmUucjxH''@;'; put 'put ''ZXx8InNjYWxlIiE9PVJ0LnQpKXtpZigibiIhPVZlLnQpcmV0dXJuO3ZhciBTdDtpZihudWxsPT1SdC5fbWluKXtSdC5fdmFsdWVzPVtdO2Zvcih2YXIgQXQ9UnQuX3JlZi5zLnI7QXQ8PVJ0Ll9yZWYuZS5yOysrQXQpZm9yKHZhciB6dD1SdC5fcmVmLnMuYzt6dDw9UnQuX3JlZi5lLmM7Kyt6''@;'; put 'put ''dCl7dmFyIFNuPUFycmF5LmlzQXJyYXkoZnQpPyhmdFtBdF18fFtdKVt6dF06ZnRbS3Ioe3I6QXQsYzp6dH0pXTtTbiYmIm4iPT1Tbi50JiZSdC5fdmFsdWVzLnB1c2goU24udil9aWYoUnQuX3ZhbHVlcy5zb3J0KGZ1bmN0aW9uKGxyLG1uKXtyZXR1cm4gbHItbW59KSxSdC5fbWluPVJ0Ll92''@;'; put 'put ''YWx1ZXNbMF0sUnQuX21heD1SdC5fdmFsdWVzLnNsaWNlKC0xKVswXSxSdC5fYmFuZD1SdC5fbWF4LVJ0Ll9taW4sUnQuY21pZCl7c3dpdGNoKFJ0LmNtaWQudCl7Y2FzZSJudW0iOlJ0Ll9taWQ9UnQuY21pZC52O2JyZWFrO2Nhc2UicGVyY2VudCI6UnQuX21pZD1SdC5jbWlkLnYvMTAwKlJ0''@;'; put 'put ''Ll9iYW5kK1J0Ll9taW47YnJlYWs7Y2FzZSJwZXJjZW50aWxlIjpSdC5fbWlkPWZ1bmN0aW9uIENyKGcseCl7aWYoMD09eClyZXR1cm4gZ1swXTtpZigxMDA9PXgpcmV0dXJuIGdbZy5sZW5ndGgtMV07dmFyIFY9eC8xMDAqKGcubGVuZ3RoLTEpLFc9Vi1NYXRoLmZsb29yKFYpO3JldHVybiBX''@;'; put 'put ''KmdbTWF0aC5jZWlsKFYpXSsoMS1XKSpnW01hdGguZmxvb3IoVildfShSdC5fdmFsdWVzLFJ0LmNtaWQudil9UnQuX2JhbmRoPVJ0Ll9tYXgtUnQuX21pZCxSdC5fYmFuZGw9UnQuX21pZC1SdC5fbWlufX0oU3Q9UnQuY21pZD9WZS52Pj1SdC5fbWlkP0JfKFJ0LmNtaWQuY29sb3IsUnQuY21h''@;'; put 'put ''eC5jb2xvciwoVmUudi1SdC5fbWlkKS9SdC5fYmFuZGgpOkJfKFJ0LmNtaW4uY29sb3IsUnQuY21pZC5jb2xvciwoVmUudi1SdC5fbWluKS9SdC5fYmFuZGwpOkJfKFJ0LmNtaW4uY29sb3IsUnQuY21heC5jb2xvciwoVmUudi1SdC5fbWluKS9SdC5fYmFuZCkpJiZKZS5wdXNoKCJiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiAjIitTdCl9fSl9ZnVuY3Rpb24gbGUoVmUsR2Upe3ZhciBldD17c3BhbjpHZXx8MSxzdHlsZToiIn0sYnQ9W107cmV0dXJuIFZlJiZWZS53cHgmJihldC53aWR0aD1NYXRoLnJvdW5kKDQqVmUud3B4LzMpLGJ0LnB1c2goIndpZHRoOiIrKFZlLndweHx8MCkrInB4IikpLGJ0''@;'; put 'put ''Lmxlbmd0aD4wJiYoZXQuc3R5bGU9YnQuam9pbigiOyIpKSx6cigiY29sIixudWxsLGV0KX1mdW5jdGlvbiBvZShWZSxHZSxldCl7dmFyIGJ0PXtib3JkZXI6MCxjZWxscGFkZGluZzowLGNlbGxzcGFjaW5nOjAsc3R5bGU6WyJib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiLCJ0YWJsZS1sYXlv''@;'; put 'put ''dXQ6Zml4ZWQiXS5qb2luKCI7Iil9O2V0JiZldC5pZCYmKGJ0LmlkPWV0LmlkKTt2YXIgSmU9VmVbIiFjb2xzIl0sZnQ9VmVbIiFzaGVldEZvcm1hdCJdO2lmKFZlJiZKZSl7Zm9yKHZhciBSdD0wLEF0PUdlLnMuYztBdDw9R2UuZS5jOysrQXQpe3ZhciB6dD1KZVtBdF07UnQrPXp0JiZ6dC53''@;'; put 'put ''cHg/enQud3B4OmZ0JiZmdC5jb2wmJmZ0LmNvbC53cHg/ZnQuY29sLndweDo1M31idC5zdHlsZSs9Ijt3aWR0aDoiK1J0KyJweCJ9dmFyIGxyLFNuPVsiPHRhYmxlIitFdShidCkrIj4iXTtpZihTbi5wdXNoKCI8c3R5bGU+dGQgeyBwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLXJpZ2h0OjFw''@;'; put 'put ''eDsgcGFkZGluZy1sZWZ0OjFweDsgdGV4dC1hbGlnbjpnZW5lcmFsOyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207IGJvcmRlcjoxcHggc29saWQ7IGJvcmRlci1jb2xvcjoiKyhldCYmZXQuZ3JpZGNvbG9yP2V0LmdyaWRjb2xvcjpMdChWZVsiIWdyaWRsaW5lcyJdKT8idHJhbnNwYXJlbnQiOiJi''@;'; put 'put ''bGFjayIpKyI7IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4dC1vdmVyZmxvdzplbGxpcHNpc308L3N0eWxlPiIpLFNuLnB1c2goJzxjb2xncm91cCBzcGFuPSInKyhHZS5lLmMtR2Uucy5jKzEpKyciPicpLEplKXtmb3IodmFyIG1uPUdlLnMuYzttbjxNYXRoLm1pbihKZS5sZW5ndGgsR2UuZS5j''@;'; put 'put ''KzEpOysrbW4pIShscj1KZVttbl0pJiZmdCYmZnQuY29sJiYobHI9ZnQuY29sKSxscnx8KGxyPXt3cHg6NTN9KSxTbi5wdXNoKGxlKGxyLDEpKTtHZS5lLmMtR2Uucy5jKzE+SmUubGVuZ3RoJiYobHI9bnVsbCxmdCYmZnQuY29sJiYobHI9ZnQuY29sKSxscnx8KGxyPXt3cHg6NTN9KSxTbi5w''@;'; put 'put ''dXNoKGxlKGxyLEdlLmUuYy1HZS5zLmMrMS1KZS5sZW5ndGgpKSl9ZWxzZSBscj1udWxsLGZ0JiZmdC5jb2wmJihscj1mdC5jb2wpLGxyfHwobHI9e3dweDo1M30pLFNuLnB1c2gobGUobHIsR2UuZS5jLUdlLnMuYysxKSk7cmV0dXJuIFNuLnB1c2goIjwvY29sZ3JvdXA+IiksU24uam9pbigi''@;'; put 'put ''Iil9dmFyIGRlPSc8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjx0aXRsZT5TaGVldEpTIFRhYmxlIEV4cG9ydDwvdGl0bGU+PC9oZWFkPjxib2R5PicsRGU9IjwvYm9keT48L2h0bWw+IjtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gVihWZSxHZSl7cmV0dXJuIGVoKHco''@;'; put 'put ''VmUsR2UpLEdlKX0sdG9fc2hlZXQ6dyxfcm93OlcsQkVHSU46ZGUsRU5EOkRlLF9wcmVhbWJsZTpvZSxodG1sX3RvX3JzOmZ1bmN0aW9uIHgoVmUpe3ZhciBHZT1bXSxldD17fSxidD0wO3JldHVybiBWZS5yZXBsYWNlKC88KFwvPykoW15ccz8+IVwvOl0qOnwpKFteXHM/PjpcL10rKVtePl0q''@;'; put 'put ''Pi9nbSxmdW5jdGlvbihKZSxmdCxSdCxTdCxBdCl7dmFyIFNuPSRpKGZyKEplKVswXSkucmVwbGFjZSgvWzxcLz5dL2csIiIpLGxyPVZlLnNsaWNlKGJ0LEF0KS5yZXBsYWNlKC9ccy9nLCIgIik7c3dpdGNoKGxyLmxlbmd0aD4wJiYoR2UucHVzaCh7dDoicyIsdjpscixzOmV0fSksZXQ9cm4o''@;'; put 'put ''ZXQpKSxTbi50b0xvd2VyQ2FzZSgpKXtjYXNlImIiOiIvIiE9ZnQ/ZXQuYm9sZD0hMDpkZWxldGUgZXQuYm9sZDticmVhaztjYXNlImkiOiIvIiE9ZnQ/ZXQuaXRhbGljPSEwOmRlbGV0ZSBldC5pdGFsaWM7YnJlYWs7Y2FzZSJ1IjoiLyIhPWZ0P2V0LnVuZGVybGluZT0xOmRlbGV0ZSBldC51''@;'; put 'put ''bmRlcmxpbmU7YnJlYWs7Y2FzZSJzIjoiLyIhPWZ0P2V0LnN0cmlrZT0hMDpkZWxldGUgZXQuc3RyaWtlfXJldHVybiBidD1BdCtKZS5sZW5ndGgsSmV9KSxHZX0sZnJvbV9zaGVldDpmdW5jdGlvbiBSZShWZSxHZSl7dmFyIGV0PUdlfHx7fSxKZT1udWxsIT1ldC5mb290ZXI/ZXQuZm9vdGVy''@;'; put 'put ''OkRlLGZ0PVtudWxsIT1ldC5oZWFkZXI/ZXQuaGVhZGVyOmRlLCIiXSxSdD1bXSxTdD0obmV3IERhdGUpLnZhbHVlT2YoKTtWZXx8KFZlPXt9KSxWZVsiIXJlZiJdfHwoVmVbIiFyZWYiXT0iQTE6QTEiKTt2YXIgQXQ9d3IoVmVbIiFyZWYiXSk7aWYoZXQuZGVuc2U9QXJyYXkuaXNBcnJheShW''@;'; put 'put ''ZSksZXQuc2tpcGVuZCl7dmFyIHp0PUF0LmUucjtlOmZvcig7enQ+PUF0LnMucjstLXp0KWZvcih2YXIgU249QXQuZS5jO1NuPj1BdC5zLmM7LS1TbilpZihudWxsIT0oKGV0LmRlbnNlPyhWZVt6dF18fFtdKVtTbl06VmVbS3Ioe3I6enQsYzpTbn0pXSl8fHt9KS52KWJyZWFrIGU7QXQuZS5y''@;'; put 'put ''PXp0O3ZhciBscj1BdC5lLmM7ZTpmb3IoO2xyPj1BdC5zLmM7LS1scilmb3IodmFyIG1uPUF0LmUucjttbj49QXQucy5yOy0tbW4paWYobnVsbCE9KChldC5kZW5zZT8oVmVbbW5dfHxbXSlbbHJdOlZlW0tyKHtyOm1uLGM6bHJ9KV0pfHx7fSkudilicmVhayBlO0F0LmUuYz1scn1mdC5wdXNo''@;'; put 'put ''KG9lKFZlLEF0LGV0KSk7Zm9yKHZhciBkcj1BdC5zLnI7ZHI8PUF0LmUucjsrK2RyKWZ0LnB1c2goVyhWZSxBdCxkcixldCxSdCxTdCkpO3JldHVybiBmdC5wdXNoKCI8L3RhYmxlPiIrSmUpLGV0LmNzcyYmKGZ0WzFdPSI8c3R5bGU+XG4iK1J0Lm1hcChmdW5jdGlvbihHbixIbil7cmV0dXJu''@;'; put 'put ''Ii5zanMiK1N0KyItIitIbisiIHsiK0duKyJ9In0pLmpvaW4oIlxuIikrIjwvc3R5bGU+IiksZnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiBjRShnLHgsdyl7dmFyIFY9e307aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU+InUiKXJldHVybiBWO3ZhciBXPWdldENvbXB1dGVkU3R5bGUoZyk7''@;'; put 'put ''aWYoKDcwMD09V1siZm9udC13ZWlnaHQiXXx8ImJvbGQiPT1XWyJmb250LXdlaWdodCJdKSYmKFYuYm9sZD0hMCksKFdbImZvbnQtc3R5bGUiXXx8IiIpLm1hdGNoKC9pdGFsaWMvKSYmKFYuaXRhbGljPSEwKSwoV1sidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvdW5kZXJsaW5lLykm''@;'; put 'put ''JihWLnVuZGVybGluZT0xKSwoV1sidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihWLnN0cmlrZT0xKSxwYXJzZUludChXWyJmb250LXNpemUiXSkmJihWLnN6PXBhcnNlRmxvYXQoV1siZm9udC1zaXplIl0pKihXWyJmb250LXNpemUiXS5tYXRjaCgvcHgv''@;'; put 'put ''KT8zLzQ6MSkpLFdbImZvbnQtZmFtaWx5Il0mJihWLm5hbWU9V1siZm9udC1mYW1pbHkiXS5zcGxpdCgiLCIpWzBdLnJlcGxhY2UoL1xzKiJccyovZywiIikpLFcuY29sb3Ipe3ZhciBlZT13bShXLmNvbG9yLnRvTG93ZXJDYXNlKCksITApO2VlPj0wJiYoVi5jb2xvcj17cmdiOmVlfSl9c3dp''@;'; put 'put ''dGNoKFdbInRleHQtdHJhbnNmb3JtIl0mJihWLnRleHRfdHJhbnNmb3JtPVdbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5vbmUiIT0oV1sidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKFYuc2hhZG93PSEwKSxXWyJ0ZXh0LWFsaWduIl0pe2Nhc2UiY2VudGVyIjpWLmFsaWdu''@;'; put 'put ''bWVudD17aG9yaXpvbnRhbDoiY2VudGVyIn07YnJlYWs7Y2FzZSJyaWdodCI6Vi5hbGlnbm1lbnQ9e2hvcml6b250YWw6InJpZ2h0In07YnJlYWs7Y2FzZSJsZWZ0IjpWLmFsaWdubWVudD17aG9yaXpvbnRhbDoibGVmdCJ9O2JyZWFrO2Nhc2UianVzdGlmeSI6Vi5hbGlnbm1lbnQ9e2hvcml6''@;'; put 'put ''b250YWw6Imp1c3RpZnkifX1zd2l0Y2goV1sidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6Vi5hbGlnbm1lbnR8fChWLmFsaWdubWVudD17fSksVi5hbGlnbm1lbnQudmVydGljYWw9V1sidmVydGljYWwtYWxpZ24iXSwibWlkZGxlIj09Vi5h''@;'; put 'put ''bGlnbm1lbnQudmVydGljYWwmJihWLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIik7YnJlYWs7Y2FzZSJzdWIiOmNhc2Uic3VwZXIiOlYudmFsaWduPVdbInZlcnRpY2FsLWFsaWduIl0sVi5zeiYmKFYuc3ovPS44Myl9dmFyIGxlPXgmJmdldENvbXB1dGVkU3R5bGUoeCk7cmV0dXJuIGxl''@;'; put 'put ''JiZ3JiZ4JiZbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBkZT1vZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStvZS5zbGljZSgxKSxEZT1sZVsiYm9yZGVyLSIrb2UrIi1zdHlsZSJdO2lmKCgibm9uZSI9PURlfHwhRGUpJiYoRGU9bGVb''@;'; put 'put ''ImJvcmRlciIrZGUrIlN0eWxlIl0pLCJub25lIiE9RGUmJkRlKXt2YXIgUmU9cGFyc2VJbnQobGVbImJvcmRlci0iK29lKyItd2lkdGgiXXx8bGVbImJvcmRlciIrZGUrIldpZHRoIl0sMTApLFZlPSJ0aGluIjtpZihSZT4wKXtzd2l0Y2goRGUpe2Nhc2UiZG91YmxlIjpWZT0iZG91YmxlIjti''@;'; put 'put ''cmVhaztjYXNlImRhc2hlZCI6VmU9UmU+PTI/Im1lZGl1bURhc2hlZCI6ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOlZlPVJlPj0yPyJtZWRpdW1EYXNoRG90RG90IjoiZG90dGVkIjticmVhaztjYXNlInNvbGlkIjpWZT1SZT49Mz8idGhpY2siOlJlPj0yPyJtZWRpdW0iOiJ0aGluIn1p''@;'; put 'put ''ZihWW29lXT17c3R5bGU6VmV9LGxlWyJib3JkZXItIitvZSsiLWNvbG9yIl18fGxlWyJib3JkZXIiK2RlKyJDb2xvciJdKXt2YXIgR2U9d20oKGxlWyJib3JkZXItIitvZSsiLWNvbG9yIl18fGxlWyJib3JkZXIiK2RlKyJDb2xvciJdKS50b0xvd2VyQ2FzZSgpLCEwKTtHZT49MCYmKFZbb2Vd''@;'; put 'put ''LmNvbG9yPXtyZ2I6R2V9KX19fX0pLFZ9ZnVuY3Rpb24gdUUoZyx4LHcpe3ZhciBWPWcuY2hpbGROb2RlcztpZigxPT1nLm5vZGVUeXBlKXN3aXRjaChnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSJwIjp4Lmxlbmd0aD4wJiZ4LnB1c2goe3Q6InQiLHY6IlxuIixzOnd9KTticmVhaztj''@;'; put 'put ''YXNlInNlbGVjdCI6cmV0dXJuIGZ1bmN0aW9uIG5ZKGcseCx3KXt4LnB1c2goe3Q6InQiLHY6Zy5jaGlsZHJlbltnLnNlbGVjdGVkSW5kZXhdLmlubmVyVGV4dCxzOnd9KX0oZyx4LHcpfWlmKFYubGVuZ3RoPjApe3ZhciBXPWNFKGcsbnVsbCwhMSk7dyYmKHcudW5kZXJsaW5lJiYoVy51bmRl''@;'; put 'put ''cmxpbmU9dy51bmRlcmxpbmUpLHcuc3RyaWtlJiYoVy5zdHJpa2U9dy5zdHJpa2UpKTtmb3IodmFyIGVlPTA7ZWU8Vi5sZW5ndGg7KytlZSl7dHJ5e2lmKFZbZWVdLmdldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSljb250aW51ZX1jYXRjaHt9dUUoVltlZV0seCxXKX1kZWxldGUgVy50ZXh0''@;'; put 'put ''X3RyYW5zZm9ybX1lbHNlIGlmKDM9PWcubm9kZVR5cGUpe3ZhciBsZT17dDoidCIsdjpnLm5vZGVWYWx1ZS5yZXBsYWNlKC9eW1xuIF0rLywiICIpLnJlcGxhY2UoL1tcbiBdKyQvLCIgIiksczp3fTtzd2l0Y2gody50ZXh0X3RyYW5zZm9ybSl7Y2FzZSJ1cHBlcmNhc2UiOmxlLnY9bGUudi50''@;'; put 'put ''b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpsZS52PWxlLnYudG9Mb3dlckNhc2UoKX0oeC5sZW5ndGg+MHx8bGUudiYmIiAiIT1sZS52KSYmeC5wdXNoKGxlKX1lbHNlIDE9PWcubm9kZVR5cGUmJiJiciI9PT1nLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmeC5wdXNoKHt0OiJ0''@;'; put 'put ''Iix2OiJcbiIsczp3fSl9ZnVuY3Rpb24geTkoZyx4LHcsVixXKXt2YXIgbGUsZWU9Zy5pbm5lckhUTUw7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiKXN3aXRjaChsZT1nZXRDb21wdXRlZFN0eWxlKGcpLChsZVsid2hpdGUtc3BhY2UiXXx8IiIpLm1hdGNoKC9wcmUvKSYmKGVlPWVl''@;'; put 'put ''LnJlcGxhY2UoL1xuL2csIjxici8+IikpLChsZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjplZT1lZS50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjplZT1lZS50b0xvd2VyQ2FzZSgpfXZhciBvZT1mdW5jdGlvbiBTTyhn''@;'; put 'put ''LHgsdyxWKXt2YXIgVz17dDoicyIsdjp4fSxlZT0iIjtpZihnKXt3PWcuZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8Zy5nZXRBdHRyaWJ1dGUoInQiKTt2YXIgbGU9Zy5nZXRBdHRyaWJ1dGUoImRhdGEtdiIpfHxnLmdldEF0dHJpYnV0ZSgidiIpO2lmKG51bGwhPShlZT1nLmdldEF0dHJpYnV0''@;'; put 'put ''ZSgiZGF0YS16Iil8fGcuZ2V0QXR0cmlidXRlKCJ6IikpJiYoVy56PWVlKSxudWxsIT13JiZudWxsIT1sZSlyZXR1cm4gVy50PXcsVy52PWxlLFd9cmV0dXJuIG51bGwhPXgmJigwPT14Lmxlbmd0aD9XLnQ9d3x8InoiOlYucmF3fHwheC50cmltKCkubGVuZ3RofHwicyI9PXd8fChXPVhyKHgs''@;'; put 'put ''VikpKSxlZSYmKFcuej1lZSksV30oZyxvcihlZSksdyxXKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJihvZS5zPWNFKGcseCxXLmJvcmRlcnMpLGRlbGV0ZSBvZS5zLnRleHRfdHJhbnNmb3JtLGcuY2hpbGROb2Rlcy5sZW5ndGg+MXx8MT09Zy5jaGlsZE5vZGVzLmxlbmd0aCYm''@;'; put 'put ''MyE9Zy5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlKSlzd2l0Y2godUUoZyxvZS5SPVtdLG51bGwpLG9lLlImJm9lLlJbb2UuUi5sZW5ndGgtMV0mJiJcbiI9PW9lLlJbb2UuUi5sZW5ndGgtMV0udiYmb2UuUi5sZW5ndGgtLSwobGVbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KXtjYXNlInVwcGVyY2FzZSI6b2UuUi5mb3JFYWNoKGZ1bmN0aW9uKEdlKXtHZS52PUdlLnYudG9VcHBlckNhc2UoKX0pO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpvZS5SLmZvckVhY2goZnVuY3Rpb24oR2Upe0dlLnY9R2Uudi50b0xvd2VyQ2FzZSgpfSl9aWYoInMiPT1vZS50KXt2YXIgZGU9''@;'; put 'put ''b2Uudi5tYXRjaCgvXG4vKTshZGUmJm9lLlImJm9lLlIuZm9yRWFjaChmdW5jdGlvbihHZSl7InN0cmluZyI9PXR5cGVvZiBHZS52JiZHZS52Lm1hdGNoKC9cbi8pJiYoZGU9ITApfSksInMiPT1vZS50JiZkZSYmKG9lLnN8fChvZS5zPXt9KSxvZS5zLmFsaWdubWVudHx8KG9lLnMuYWxpZ25t''@;'; put 'put ''ZW50PXt9KSxvZS5zLmFsaWdubWVudC53cmFwVGV4dD0hMCl9aWYoeCl7dmFyIERlPSIiLFJlPXguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkEiKTtpZihSZSYmUmUubGVuZ3RoKWZvcih2YXIgVmU9MDtWZTxSZS5sZW5ndGgmJighUmVbVmVdLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfHwiIyI9PShE''@;'; put 'put ''ZT1SZVtWZV0uZ2V0QXR0cmlidXRlKCJocmVmIikpLmNoYXJBdCgwKSk7KytWZSk7RGUmJiIjIiE9RGUuY2hhckF0KDApJiYob2UubD17VGFyZ2V0OkRlfSl9cmV0dXJuIG9lfWZ1bmN0aW9uIGRFKGcseCx3KXt2YXIgVyxWPXgucm93cztpZighVil7aWYodyYmbnVsbCE9dy5vcmlnaW4pdGhy''@;'; put 'put ''b3ciVW5zdXBwb3J0ZWQgb3JpZ2luIHdoZW4gIit4LnRhZ05hbWUrIiBpcyBub3QgYSBUQUJMRSI7cmV0dXJuIGZ1bmN0aW9uIEViKGcseCx3KXt3PUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkod3x8e30pKTt2YXIgZWU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtnWyIhbWVyZ2VzIl18''@;'; put 'put ''fChnWyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgb2UsbGU9eC5jaGlsZHJlbixkZT0wLERlPTA7RGU8bGUubGVuZ3RoOysrRGUpe3ZhciBHZSxSZT1sZVtEZV0sVmU9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9HZT1nZXRDb21wdXRlZFN0eWxlOlJlLm93bmVyRG9jdW1lbnQu''@;'; put 'put ''ZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihHZT1SZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe31pZighR2V8fCJub25lIiE9R2UoUmUpLmRpc3Bs''@;'; put 'put ''YXkpc3dpdGNoKFJlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6ZGU9LTEsZ1siIXJlZiJdJiYody5vcmlnaW49LTEpLGRFKGcsUmUsdyk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6ZGU9LTEsZ1siIXJlZiJdPygrKyhlZT13cihnWyIhcmVmIl0pKS5lLnIsZ1siIXJlZiJd''@;'; put 'put ''PUppKGVlKSk6Z1siIXJlZiJdPSJBMTpBMSI7YnJlYWs7Y2FzZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2FzZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6ZGU9LTEsb2U9eTkoUmUsbnVsbCwiIiwwLHcpLGdbIiFyZWYiXT8ody5vcmlnaW49LTEsbzEoZyxbW29l''@;'; put 'put ''XV0sdykpOihnWyIhcmVmIl09IkExIixBcnJheS5pc0FycmF5KGcpPyhnWzBdfHwoZ1swXT1bXSksZ1swXVswXT1vZSk6Zy5BMT1vZSksZ1siIXJvd3MiXXx8KGdbIiFyb3dzIl09W10pLEdlJiYoZWU9d3IoZ1siIXJlZiJdKSwoVmU9R2UoUmUpLmhlaWdodCkmJiJhdXRvIiE9VmUmJihnWyIh''@;'; put 'put ''cm93cyJdW2VlLmUucl09e2hwdDpwYXJzZUludChWZSwxMCl9KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIiOmNhc2UiU1VQIjpjYXNlIlUiOm9lPXk5KFJlLG51bGwsIiIsMCx3KSxnWyIhcmVm''@;'; put 'put ''Il18fChnWyIhcmVmIl09IkExOkExIiksbzEoZyxbW29lXV0se29yaWdpbjpLcih7cjooZGU8MD8xOjApKyhlZT13cihnWyIhcmVmIl0pKS5lLnIsYzorK2RlfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVMIjpjYXNlIk9MIjpkZT0tMSxjb25zb2xlLmVycm9yKCJIVE1MIENvbnZlcnNpb24g''@;'; put 'put ''ZG9lcyBub3Qgc3VwcG9ydCBsaXN0IGVsZW1lbnQgIitSZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6ZGU9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitSZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpfX1yZXR1cm4gZ30oZyx4LHcpfXRyeXt0eXBlb2YgZ2V0Q29t''@;'; put 'put ''cHV0ZWRTdHlsZTwidSI/Vz1nZXRDb21wdXRlZFN0eWxlOngub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIHgub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoVz14Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t''@;'; put 'put ''cHV0ZWRTdHlsZSl9Y2F0Y2h7fXZhciBlZT13fHx7fSxsZT0wLG9lPTA7aWYobnVsbCE9ZWUub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgZWUub3JpZ2luKWxlPWVlLm9yaWdpbjtlbHNle3ZhciBkZT0ic3RyaW5nIj09dHlwZW9mIGVlLm9yaWdpbj94YShlZS5vcmlnaW4pOmVlLm9yaWdp''@;'; put 'put ''bjtsZT1kZS5yLG9lPWRlLmN9dmFyIERlPU1hdGgubWluKGVlLnNoZWV0Um93c3x8MWU3LFYubGVuZ3RoKSxSZT17czp7cjowLGM6MH0sZTp7cjpsZSxjOm9lfX07aWYoZ1siIXJlZiJdKXt2YXIgVmU9d3IoZ1siIXJlZiJdKTtSZS5zLnI9TWF0aC5taW4oUmUucy5yLFZlLnMuciksUmUucy5j''@;'; put 'put ''PU1hdGgubWluKFJlLnMuYyxWZS5zLmMpLFJlLmUucj1NYXRoLm1heChSZS5lLnIsVmUuZS5yKSxSZS5lLmM9TWF0aC5tYXgoUmUuZS5jLFZlLmUuYyksLTE9PWxlJiYoUmUuZS5yPWxlPVZlLmUucisxKX12YXIgR2U9W10sZXQ9MCxidD1nWyIhcm93cyJdfHwoZ1siIXJvd3MiXT1bXSksSmU9''@;'; put 'put ''MCxmdD0wLFJ0PTAsU3Q9MCxBdD0wLHp0PTA7Zm9yKGdbIiFjb2xzIl18fChnWyIhY29scyJdPVtdKTtKZTxWLmxlbmd0aCYmZnQ8RGU7KytKZSl7Zm9yKHZhciBTbj1WW0plXSxscj1Tbi5wYXJlbnRFbGVtZW50OyJUQUJMRSIhPWxyLnRhZ05hbWUudG9VcHBlckNhc2UoKTspbHI9bHIucGFy''@;'; put 'put ''ZW50RWxlbWVudDtpZihscj09eCl7ZTppZih0eXBlb2YgVzwidSIpe3ZhciBtbj1XKFNuKTtpZihudWxsPT1tbilicmVhayBlO2lmKG1uLnN0eWxlfHwobW4uc3R5bGU9e30pLGVlLmRpc3BsYXkmJiJub25lIj09KG1uLmRpc3BsYXl8fG1uLnN0eWxlLmRpc3BsYXkpKWNvbnRpbnVlOyJub25l''@;'; put 'put ''Ij09KG1uLmRpc3BsYXl8fG1uLnN0eWxlLmRpc3BsYXkpJiYoKGJ0W2Z0XXx8KGJ0W2Z0XT17fSkpLmhpZGRlbj0hMCl9dmFyIGRyPVNuLmNlbGxzO2ZvcihSdD1TdD0wO1J0PGRyLmxlbmd0aDsrK1J0KXt2YXIgR249ZHJbUnRdLEhuPW51bGw7aWYoISh0eXBlb2YgVzwidSImJihudWxsPT1I''@;'; put 'put ''biYmKEhuPVcoR24pKSxIbi5zdHlsZXx8KEhuLnN0eWxlPXt9KSxlZS5kaXNwbGF5JiZudWxsIT1IbiYmIm5vbmUiPT0oSG4uZGlzcGxheXx8SG4uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKHp0PStHbi5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxldD0wO2V0PEdlLmxlbmd0aDsrK2V0KXt2''@;'; put 'put ''YXIgaHI9R2VbZXRdO2hyLnMuYz09U3Qrb2UmJmhyLnMucjxmdCtsZSYmZnQrbGU8PWhyLmUuciYmKFN0PWhyLmUuYysxLW9lLGV0PS0xKX0oKEF0PStHbi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+MXx8enQ+MSkmJkdlLnB1c2goe3M6e3I6ZnQrbGUsYzpTdCtvZX0sZTp7cjpmdCts''@;'; put 'put ''ZSsoQXR8fDEpLTEsYzpTdCtvZSsoenR8fDEpLTF9fSk7dmFyIE5uPUduLmdldEF0dHJpYnV0ZSgidCIpfHwiIix0cj1Hbi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiBXPCJ1Iil7aWYobnVsbD09SG4mJihIbj1XKEduKSksbnVsbD09SG4pYnJlYWsgZTtpZihIbi5zdHls''@;'; put 'put ''ZXx8KEhuLnN0eWxlPXt9KSwxPT16dCYmSG4ud2lkdGgmJihnWyIhY29scyJdW1N0K29lXT1nWyIhY29scyJdW1N0K29lXXx8e30sSG4ud2lkdGgubWF0Y2goL3B4Lyk/Z1siIWNvbHMiXVtTdCtvZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KEhuLndpZHRoLDEwKSs1LGdbIiFjb2xzIl1bU3Qr''@;'; put 'put ''b2VdLndweHx8MCk6SG4ud2lkdGgubWF0Y2goL3B0LykmJihnWyIhY29scyJdW1N0K29lXS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChIbi53aWR0aCwxMCkvMys1LGdbIiFjb2xzIl1bU3Qrb2VdLndweHx8MCkpKSxBdDw9MSl7YnRbZnQrbGVdfHwoYnRbZnQrbGVdPXt9KTt2YXIgdmk9SG4u''@;'; put 'put ''aGVpZ2h0Oyh2aT12aS5tYXRjaCgvcHQvKT9saChwYXJzZUludCh2aSwxMCkpOnBhcnNlSW50KHZpLDEwKSk+KGJ0W2Z0K2xlXS5ocHh8fGxoKGJ0W2Z0K2xlXS5ocHQpfHwwKSYmKGRlbGV0ZSBidFtmdCtsZV0uaHB0LGJ0W2Z0K2xlXS5ocHg9dmkpfX12YXIgUGk9R247aWYoR24uZmlyc3RF''@;'; put 'put ''bGVtZW50Q2hpbGQmJjE9PUduLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT1Hbi5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIHFpPTAsdGE9R24uY2hpbGROb2RlcyxJaT0wO0lpPHRhLmxlbmd0aDsrK0lpKTM9PXRhW0lpXS5ub2RlVHlwZSYmKytx''@;'; put 'put ''aTswPT1xaSYmKEduPUduLmZpcnN0RWxlbWVudENoaWxkKX12YXIgU3I9eTkoR24sUGksTm4sMCxlZSk7aWYoSG4pe3ZhciBGbj1XKEduKTtpZihGbiYmIUZuLnN0eWxlJiYoRm4uc3R5bGU9e30pLChGbiYmRm5bImJhY2tncm91bmQtY29sb3IiXXx8SG5bImJhY2tncm91bmQtY29sb3IiXSkm''@;'; put 'put ''JihTci5zfHwoU3Iucz17fSksIVNyLnMuZmdDb2xvcikpdHJ5e3ZhciBMcj1GbiYmRm5bImJhY2tncm91bmQtY29sb3IiXXx8SG5bImJhY2tncm91bmQtY29sb3IiXTtMci5tYXRjaCgvcmdiYVsoXVxzKjAuKlspXS9pKSYmKExyPUhuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBwcj13bShM''@;'; put 'put ''ci50b0xvd2VyQ2FzZSgpLCEwKTtwcj49MCYmKFNyLnMuZmdDb2xvcj17cmdiOnByfSl9Y2F0Y2h7fXN3aXRjaChIblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxpbmUiOlNyLnN8fChTci5zPXt9KSxTci5zLmFsaWdubWVudHx8KFNyLnMuYWxpZ25tZW50PXt9''@;'; put 'put ''KSxTci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYodHImJihTci5zfHwoU3Iucz17fSksIVNyLnMuZmdDb2xvcikpdHJ5e3ZhciBMbj13bSh0ci50b0xvd2VyQ2FzZSgpLCEwKTtMbj49MCYmKFNyLnMuZmdDb2xvcj17cmdiOkxufSl9Y2F0Y2h7fWlmKGVlLmRlbnNlPyhnW2Z0''@;'; put 'put ''K2xlXXx8KGdbZnQrbGVdPVtdKSxnW2Z0K2xlXVtTdCtvZV09U3IpOmdbS3Ioe2M6U3Qrb2UscjpmdCtsZX0pXT1TcixBdD4xfHx6dD4xKWZvcih2YXIgUHI9ZnQ7UHI8ZnQrQXQ7KytQcilmb3IodmFyIFppPVN0O1ppPFN0K3p0OysrWmkpZnQ9PVByJiZTdD09Wml8fChlZS5kZW5zZT8oZ1tQ''@;'; put 'put ''citsZV18fChnW1ByK2xlXT1bXSksZ1tQcitsZV1bWmkrb2VdPXt0OiJ6IixzOnJuKFNyLnN8fHt9KX0pOmdbS3Ioe2M6Wmkrb2UscjpQcitsZX0pXT17dDoieiIsczpybihTci5zfHx7fSl9KTtSZS5lLmM8U3Qrb2UmJihSZS5lLmM9U3Qrb2UpLFN0Kz16dH19KytmdH19aWYoR2UubGVuZ3Ro''@;'; put 'put ''JiYoZ1siIW1lcmdlcyJdPShnWyIhbWVyZ2VzIl18fFtdKS5jb25jYXQoR2UpKSxSZS5lLnI9TWF0aC5tYXgoUmUuZS5yLGZ0LTErbGUpLGdbIiFyZWYiXT1KaShSZSksZnQ+PURlJiYoZ1siIWZ1bGxyZWYiXT1KaSgoUmUuZS5yPVYubGVuZ3RoLUplK2Z0LTErbGUsUmUpKSksZWUuYm9yZGVy''@;'; put 'put ''cylmb3IoZnQ9UmUucy5yO2Z0PD1SZS5lLnI7KytmdClmb3IoU3Q9UmUucy5jO1N0PD1SZS5lLmM7KytTdClpZighZWUuZGVuc2Upe3ZhciBfaT1nW0tyKHtyOmZ0LGM6U3R9KV07aWYoIV9pfHwhX2kucyljb250aW51ZTtpZihmdD4wKXt2YXIgcGE9Z1tLcih7cjpmdC0xLGM6U3R9KV07cGEm''@;'; put 'put ''JnBhLnMmJnBhLnMuYm90dG9tJiZkZWxldGUgX2kucy50b3B9aWYoU3Q+MCl7dmFyIGFvPWdbS3Ioe3I6ZnQsYzpTdC0xfSldO2FvJiZhby5zJiZhby5zLmJvdHRvbSYmZGVsZXRlIF9pLnMubGVmdH19cmV0dXJuIGd9ZnVuY3Rpb24gTU8oZyx4KXtyZXR1cm4gZEUoKHh8fHt9KS5kZW5zZT9b''@;'; put 'put ''XTp7fSxnLHgpfXZhciB4Tz1mdW5jdGlvbigpe3ZhciBnPWZ1bmN0aW9uKFYsVyxlZSl7dmFyIGxlPVYucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9nLCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9Iihc''@;'; put 'put ''ZCspIlwvPi9nLGZ1bmN0aW9uKFJlLFZlKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoVmUsMTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0IikucmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wvPi9nLCJcbiIpLG9lPXFyKGxlLnJlcGxhY2UoLzxbXj5d''@;'; put 'put ''Kj4vZywiIikpLGRlPVtdLERlPTA7cmV0dXJuIGxlLnJlcGxhY2UoLyg8dGV4dDpzcGFuLio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKFJlLFZlLEdlLGV0KXtldCE9RGUmJmRlLnB1c2goe3Q6InMiLHY6cXIobGUuc2xpY2UoRGUsZXQpKX0pO3ZhciBidD17dDoicyIsdjpx''@;'; put 'put ''cihHZSl9LEplPWZyKFZlKVsic3R5bGUtbmFtZSJdO3JldHVybiBKZSYmZWVbSmVdJiYoYnQucz1ybihlZVtKZV0pKSxkZS5wdXNoKGJ0KSxEZT1ldCtSZS5sZW5ndGgsIiJ9KSxEZTxsZS5sZW5ndGgmJmRlLnB1c2goe3Q6InMiLHY6cXIobGUuc2xpY2UoRGUpKX0pLFtvZSxkZV19LHg9e2Rh''@;'; put 'put ''eTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5eSJdLGhvdXJzOlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJzIiwic3MiXSwiYW0tcG0iOlsiQS9QIiwiQU0vUE0iXSwiZGF5LW9mLXdlZWsiOlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJl''@;'; put 'put ''ZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LHc9ZnVuY3Rpb24oVixXKXt2YXIgZWU9ZnIoVi5zbGljZSgwLFYuaW5kZXhPZigiPiIpKSksbGU9Vi5zbGljZShWLmluZGV4T2YoIj4iKSsxKSxvZT17bmFtZTplZS5uYW1lLGZhbWlseTplZS5mYW1pbHl9O1tbInBhcmVu''@;'; put 'put ''dCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIsImRhdGEtc3R5bGUtbmFtZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNoKGZ1bmN0aW9uKERlKXtlZVtEZVsxXV0mJihvZVtEZVswXV09ZWVbRGVbMV1dKX0pO3ZhciBkZT17fTtsZS5yZXBsYWNlKEd0''@;'; put 'put ''LGZ1bmN0aW9uKERlKXt2YXIgUmU9ZnIoRGUpO2lmKCI8c3R5bGU6dGV4dC1wcm9wZXJ0aWVzIj09PVJlWzBdKXtpZihSZVsiZm9udC13ZWlnaHQiXSYmKGRlLmJvbGQ9KygiYm9sZCI9PVJlWyJmb250LXdlaWdodCJdfHwiNzAwIj09UmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PVJl''@;'; put 'put ''WyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09UmVbImZvbnQtc3R5bGUiXSkmJihkZS5pdGFsaWM9MSksIm5vbmUiIT0oUmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIik/ZGUudW5kZXJsaW5lPSJkb3VibGUiPT1SZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooUmVbInRl''@;'; put 'put ''eHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09UmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXSkmJihkZS51bmRlcmxpbmU9MCksKFJlWyJmb250LXNpemUiXXx8IiIpLm1hdGNoKC9wdCQvKSYmKGRlLnN6PStSZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oUmVb''@;'; put 'put ''InRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikmJihkZS5zdHJpa2U9MSksUmVbImZvbnQtbmFtZSJdJiYoZGUubmFtZT1SZVsiZm9udC1uYW1lIl0pLFJlLmNvbG9yKXt2YXIgVmU9d20oUmUuY29sb3IsITApO1ZlPj0wJiYoZGUuY29sb3I9VmUpfXN3aXRjaChSZVsidGV4dC1w''@;'; put 'put ''b3NpdGlvbiJdKXtjYXNlInN1cGVyIjpkZS52YWxpZ249InN1cGVyIjticmVhaztjYXNlInN1YiI6ZGUudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KFJlWyJ0ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRjaCgvJS8pJiYoZGUudmFsaWduPSItIj09UmVbInRleHQtcG9zaXRpb24iXS5jaGFy''@;'; put 'put ''QXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oUmVbInRleHQtc2hhZG93Il18fCJub25lIikmJihkZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxXW2VlLm5hbWVdPWRlfTtyZXR1cm4gZnVuY3Rpb24oVyxlZSl7dmFyIERlLFJlLGJ0LEplLEF0LHp0LGxlPWVlfHx7fSxvZT1NYihXKSxkZT1b''@;'; put 'put ''XSxWZT17bmFtZToiIn0sR2U9IiIsZXQ9MCxmdD17fSxSdD1bXSxTdD1sZS5kZW5zZT9bXTp7fSxTbj17dmFsdWU6IiJ9LGxyPSIiLG1uPTAsR249W10sSG49LTEsaHI9LTEsTm49e3M6e3I6MWU2LGM6MWU3fSxlOntyOjAsYzowfX0sdHI9MCx2aT17fSxQaT1bXSxxaT17fSx0YT0wLElpPTAs''@;'; put 'put ''U3I9W10sRm49MSxMcj0xLHByPVtdLExuPXtOYW1lczpbXX0sUHI9e30sWmk9WyIiLCIiXSxfaT1bXSxwYT17fSxhbz17fSxRaT0wLERvPSIiLGphPTAsbW89ITEsY289ITEsQmk9MDtmb3IodDYubGFzdEluZGV4PTAsb2U9b2UucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJl''@;'; put 'put ''cGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKTtBdD10Ni5leGVjKG9lKTspc3dpdGNoKEF0WzNdPUF0WzNdLnJlcGxhY2UoL18uKiQvLCIiKSl7Y2FzZSJ0YWJsZSI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOiIvIj09PUF0WzFdPyhTdFsiIXJlZiJdPU5uLmUuYz49''@;'; put 'put ''Tm4ucy5jJiZObi5lLnI+PU5uLnMucj9KaShObik6IkExOkExIixsZS5zaGVldFJvd3M+MCYmbGUuc2hlZXRSb3dzPD1Obi5lLnImJihTdFsiIWZ1bGxyZWYiXT1TdFsiIXJlZiJdLE5uLmUucj1sZS5zaGVldFJvd3MtMSxTdFsiIXJlZiJdPUppKE5uKSksUGkubGVuZ3RoJiYoU3RbIiFtZXJn''@;'; put 'put ''ZXMiXT1QaSksU3IubGVuZ3RoJiYoU3RbIiFyb3dzIl09U3IpLGJ0Lm5hbWU9YnQuXHU1NDBkXHU3OWYwfHxidC5uYW1lLHR5cGVvZiBKU09OPCJ1IiYmSlNPTi5zdHJpbmdpZnkoYnQpLFJ0LnB1c2goYnQubmFtZSksZnRbYnQubmFtZV09U3QsY289ITEpOiIvIiE9PUF0WzBdLmNoYXJBdChB''@;'; put 'put ''dFswXS5sZW5ndGgtMikmJihidD1mcihBdFswXSwhMSksSG49aHI9LTEsTm4ucy5yPU5uLnMuYz0xZTcsTm4uZS5yPU5uLmUuYz0wLFN0PWxlLmRlbnNlP1tdOnt9LFBpPVtdLFNyPVtdLGNvPSEwKTticmVhaztjYXNlInRhYmxlLXJvdy1ncm91cCI6Ii8iPT09QXRbMV0/LS10cjorK3RyO2Jy''@;'; put 'put ''ZWFrO2Nhc2UidGFibGUtcm93IjpjYXNlIlx1ODg0YyI6aWYoIi8iPT09QXRbMV0pe0huKz1GbixGbj0xO2JyZWFrfWlmKChKZT1mcihBdFswXSwhMSkpLlx1ODg0Y1x1NTNmNz9Ibj1KZS5cdTg4NGNcdTUzZjctMTotMT09SG4mJihIbj0wKSwoRm49K0plWyJudW1iZXItcm93cy1yZXBlYXRl''@;'; put 'put ''ZCJdfHwxKTwxMClmb3IoQmk9MDtCaTxGbjsrK0JpKXRyPjAmJihTcltIbitCaV09e2xldmVsOnRyfSk7aHI9LTE7YnJlYWs7Y2FzZSJjb3ZlcmVkLXRhYmxlLWNlbGwiOiIvIiE9PUF0WzFdJiYrK2hyLGxlLnNoZWV0U3R1YnMmJihsZS5kZW5zZT8oU3RbSG5dfHwoU3RbSG5dPVtdKSxTdFtI''@;'; put 'put ''bl1baHJdPXt0OiJ6In0pOlN0W0tyKHtyOkhuLGM6aHJ9KV09e3Q6InoifSksbHI9IiIsR249W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpjYXNlIlx1NjU3MFx1NjM2ZSI6aWYoIi8iPT09QXRbMF0uY2hhckF0KEF0WzBdLmxlbmd0aC0yKSkrK2hyLFNuPWZyKEF0WzBdLCExKSxMcj1wYXJz''@;'; put 'put ''ZUludChTblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSx6dD17dDoieiIsdjpudWxsfSxTbi5mb3JtdWxhJiYwIT1sZS5jZWxsRm9ybXVsYSYmKHp0LmY9aEwocXIoU24uZm9ybXVsYSkpKSwic3RyaW5nIj09KFNuLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8U25bInZh''@;'; put 'put ''bHVlLXR5cGUiXSkmJih6dC50PSJzIix6dC52PXFyKFNuWyJzdHJpbmctdmFsdWUiXXx8IiIpLGxlLmRlbnNlPyhTdFtIbl18fChTdFtIbl09W10pLFN0W0huXVtocl09enQpOlN0W0tyKHtyOkhuLGM6aHJ9KV09enQpLGhyKz1Mci0xO2Vsc2UgaWYoIi8iIT09QXRbMV0pe0xyPTE7dmFyIGts''@;'; put 'put ''PUZuP0huK0ZuLTE6SG47aWYoKytocj5Obi5lLmMmJihObi5lLmM9aHIpLGhyPE5uLnMuYyYmKE5uLnMuYz1ociksSG48Tm4ucy5yJiYoTm4ucy5yPUhuKSxrbD5Obi5lLnImJihObi5lLnI9a2wpLF9pPVtdLHBhPXt9LHp0PXt0OihTbj1mcihBdFswXSwhMSkpLlx1NjU3MFx1NjM2ZVx1N2M3''@;'; put 'put ''Ylx1NTc4Ynx8U25bInZhbHVlLXR5cGUiXSx2Om51bGx9LGxlLmNlbGxGb3JtdWxhKWlmKFNuLmZvcm11bGEmJihTbi5mb3JtdWxhPXFyKFNuLmZvcm11bGEpKSxTblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSYmU25bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJih0''@;'; put 'put ''YT1wYXJzZUludChTblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsSWk9cGFyc2VJbnQoU25bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLHp0LkY9SmkocWk9e3M6e3I6SG4sYzpocn0sZTp7cjpIbit0YS0xLGM6aHIrSWktMX19KSxwci5wdXNo''@;'; put 'put ''KFtxaSx6dC5GXSkpLFNuLmZvcm11bGEpenQuZj1oTChTbi5mb3JtdWxhKTtlbHNlIGZvcihCaT0wO0JpPHByLmxlbmd0aDsrK0JpKUhuPj1wcltCaV1bMF0ucy5yJiZIbjw9cHJbQmldWzBdLmUuciYmaHI+PXByW0JpXVswXS5zLmMmJmhyPD1wcltCaV1bMF0uZS5jJiYoenQuRj1wcltCaV1b''@;'; put 'put ''MV0pO3N3aXRjaCgoU25bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8U25bIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJih0YT1wYXJzZUludChTblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxJaT1wYXJzZUludChTblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxQ''@;'; put 'put ''aS5wdXNoKHFpPXtzOntyOkhuLGM6aHJ9LGU6e3I6SG4rdGEtMSxjOmhyK0lpLTF9fSkpLFNuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYoTHI9cGFyc2VJbnQoU25bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0sMTApKSx6dC50KXtjYXNlImJvb2xlYW4iOnp0LnQ9ImIiLHp0LnY9''@;'; put 'put ''SXIoU25bImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5Ijp6dC50PSJuIix6dC52PXBhcnNlRmxvYXQoU24udmFsdWUpO2JyZWFrO2Nhc2UiZGF0ZSI6enQudD0iZCIsenQudj1MZShTblsiZGF0ZS12YWx1ZSJdKSxsZS5j''@;'; put 'put ''ZWxsRGF0ZXN8fCh6dC50PSJuIix6dC52PVllKHp0LnYpKSx6dC56PSJtL2QveXkiO2JyZWFrO2Nhc2UidGltZSI6enQudD0ibiIsenQudj10dChTblsidGltZS12YWx1ZSJdKS84NjQwMCxsZS5jZWxsRGF0ZXMmJih6dC50PSJkIix6dC52PXF0KHp0LnYpKSx6dC56PSJISDpNTTpTUyI7YnJl''@;'; put 'put ''YWs7Y2FzZSJudW1iZXIiOnp0LnQ9Im4iLHp0LnY9cGFyc2VGbG9hdChTbi5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT16dC50JiYidGV4dCIhPT16dC50JiZ6dC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAi''@;'; put 'put ''K3p0LnQpO3p0LnQ9InMiLG51bGwhPVNuWyJzdHJpbmctdmFsdWUiXSYmKGxyPXFyKFNuWyJzdHJpbmctdmFsdWUiXSksR249W10pfX1lbHNle2lmKG1vPSExLCJzIj09PXp0LnQmJih6dC52PWxyfHwiIixHbi5sZW5ndGgmJih6dC5SPUduKSxtbz0wPT1tbiksUHIuVGFyZ2V0JiYoenQubD1Q''@;'; put 'put ''ciksX2kubGVuZ3RoPjAmJih6dC5jPV9pLF9pPVtdKSxsciYmITEhPT1sZS5jZWxsVGV4dCYmKHp0Lnc9bHIpLG1vJiYoenQudD0ieiIsZGVsZXRlIHp0LnYpLGxlLmNlbGxIVE1MJiYoenQuaD16dC5SP09nKHp0LlIpOmZhKCIiK3p0LnYpKSwoIW1vfHxsZS5zaGVldFN0dWJzKSYmIShsZS5z''@;'; put 'put ''aGVldFJvd3MmJmxlLnNoZWV0Um93czw9SG4pKWZvcih2YXIgT249MDtPbjxGbjsrK09uKXtpZihMcj1wYXJzZUludChTblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxsZS5kZW5zZSlmb3IoU3RbSG4rT25dfHwoU3RbSG4rT25dPVtdKSxTdFtIbitPbl1baHJdPTA9PU9u''@;'; put 'put ''P3p0OnJuKHp0KTstLUxyPjA7KVN0W0huK09uXVtocitMcl09cm4oenQpO2Vsc2UgZm9yKFN0W0tyKHtyOkhuK09uLGM6aHJ9KV09enQ7LS1Mcj4wOylTdFtLcih7cjpIbitPbixjOmhyK0xyfSldPXJuKHp0KTtObi5lLmM8PWhyJiYoTm4uZS5jPWhyKX1ocis9KExyPXBhcnNlSW50KFNuWyJu''@;'; put 'put ''dW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLExyPTAsenQ9e30sbHI9IiIsR249W119UHI9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1Njg2MyI6Y2FzZSJzcHJlYWRz''@;'; put 'put ''aGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PUF0WzFdKXtpZigoRGU9ZGUucG9wKCkpWzBdIT09QXRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0RlfWVsc2Ui''@;'; put 'put ''LyIhPT1BdFswXS5jaGFyQXQoQXRbMF0ubGVuZ3RoLTIpJiZkZS5wdXNoKFtBdFszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09QXRbMV0pe2lmKChEZT1kZS5wb3AoKSlbMF0hPT1BdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrRGU7cGEudD1scixHbi5sZW5ndGgmJihw''@;'; put 'put ''YS5SPUduKSxwYS5hPURvLF9pLnB1c2gocGEpfWVsc2UiLyIhPT1BdFswXS5jaGFyQXQoQXRbMF0ubGVuZ3RoLTIpJiZkZS5wdXNoKFtBdFszXSwhMV0pO0RvPSIiLGphPTAsbHI9IiIsbW49MCxHbj1bXTticmVhaztjYXNlImNyZWF0b3IiOiIvIj09PUF0WzFdP0RvPW9lLnNsaWNlKGphLEF0''@;'; put 'put ''LmluZGV4KTpqYT1BdC5pbmRleCtBdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJtZXRhIjpjYXNlIlx1NTE0M1x1NjU3MFx1NjM2ZSI6Y2FzZSJzZXR0aW5ncyI6Y2FzZSJjb25maWctaXRlbS1zZXQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWluZGV4ZWQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWVu''@;'; put 'put ''dHJ5IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1uYW1lZCI6Y2FzZSJzaGFwZXMiOmNhc2UiZnJhbWUiOmNhc2UidGV4dC1ib3giOmNhc2UiaW1hZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZXMiOmNhc2UibGlzdC1zdHlsZSI6Y2FzZSJmb3JtIjpjYXNlImRkZS1saW5rcyI6Y2FzZSJldmVudC1s''@;'; put 'put ''aXN0ZW5lcnMiOmNhc2UiY2hhcnQiOmlmKCIvIj09PUF0WzFdKXtpZigoRGU9ZGUucG9wKCkpWzBdIT09QXRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0RlfWVsc2UiLyIhPT1BdFswXS5jaGFyQXQoQXRbMF0ubGVuZ3RoLTIpJiZkZS5wdXNoKFtBdFszXSwhMV0pO2xyPSIiLG1uPTAsR249W107''@;'; put 'put ''YnJlYWs7Y2FzZSJzY2llbnRpZmljLW51bWJlciI6Y2FzZSJjdXJyZW5jeS1zeW1ib2wiOmNhc2UiY3VycmVuY3ktc3R5bGUiOmNhc2Uic2NyaXB0IjpjYXNlImxpYnJhcmllcyI6Y2FzZSJhdXRvbWF0aWMtc3R5bGVzIjpjYXNlImRlZmF1bHQtc3R5bGUiOmNhc2UicGFnZS1sYXlvdXQiOmNh''@;'; put 'put ''c2UibWFwIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJwYXJhZ3JhcGgtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXJvdy1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNlbGwtcHJvcGVydGllcyI6Y2FzZSJm''@;'; put 'put ''cmFjdGlvbiI6Y2FzZSJib29sZWFuLXN0eWxlIjpjYXNlImJvb2xlYW4iOmNhc2UidGV4dC1zdHlsZSI6Y2FzZSJ0ZXh0LWNvbnRlbnQiOmNhc2UidGV4dC1wcm9wZXJ0aWVzIjpjYXNlImVtYmVkZGVkLXRleHQiOmNhc2UiYm9keSI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2MiOmNh''@;'; put 'put ''c2UiZm9ybXMiOmNhc2UidGFibGUtY29sdW1uIjpjYXNlInRhYmxlLWhlYWRlci1yb3dzIjpjYXNlInRhYmxlLXJvd3MiOmNhc2UidGFibGUtY29sdW1uLWdyb3VwIjpjYXNlInRhYmxlLWhlYWRlci1jb2x1bW5zIjpjYXNlInRhYmxlLWNvbHVtbnMiOmNhc2UibnVsbC1kYXRlIjpjYXNlImdy''@;'; put 'put ''YXBoaWMtcHJvcGVydGllcyI6Y2FzZSJjYWxjdWxhdGlvbi1zZXR0aW5ncyI6Y2FzZSJuYW1lZC1leHByZXNzaW9ucyI6Y2FzZSJsYWJlbC1yYW5nZSI6Y2FzZSJsYWJlbC1yYW5nZXMiOmNhc2UibmFtZWQtZXhwcmVzc2lvbiI6Y2FzZSJzb3J0IjpjYXNlInNvcnQtYnkiOmNhc2Uic29ydC1n''@;'; put 'put ''cm91cHMiOmNhc2UidGFiIjpjYXNlImxpbmUtYnJlYWsiOmNhc2Uic3BhbiI6Y2FzZSJzIjpjYXNlImRhdGUiOmNhc2Uib2JqZWN0IjpjYXNlInRpdGxlIjpjYXNlIlx1NjgwN1x1OTg5OCI6Y2FzZSJkZXNjIjpjYXNlImJpbmFyeS1kYXRhIjpjYXNlInRhYmxlLXNvdXJjZSI6Y2FzZSJzY2Vu''@;'; put 'put ''YXJpbyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UiY29udGVudC12YWxpZGF0aW9ucyI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb24iOmNhc2UiaGVscC1tZXNzYWdlIjpjYXNlImVycm9yLW1lc3NhZ2UiOmNhc2UiZGF0YWJhc2UtcmFuZ2VzIjpjYXNlImZpbHRlciI6Y2FzZSJmaWx0ZXItYW5kIjpj''@;'; put 'put ''YXNlImZpbHRlci1vciI6Y2FzZSJmaWx0ZXItY29uZGl0aW9uIjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0IjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtbnVtYmVyIjpjYXNlImxpc3QtbGV2ZWwtcHJvcGVydGllcyI6Y2FzZSJzZW5kZXItZmlyc3RuYW1lIjpjYXNlInNlbmRlci1sYXN0''@;'; put 'put ''bmFtZSI6Y2FzZSJzZW5kZXItaW5pdGlhbHMiOmNhc2Uic2VuZGVyLXRpdGxlIjpjYXNlInNlbmRlci1wb3NpdGlvbiI6Y2FzZSJzZW5kZXItZW1haWwiOmNhc2Uic2VuZGVyLXBob25lLXByaXZhdGUiOmNhc2Uic2VuZGVyLWZheCI6Y2FzZSJzZW5kZXItY29tcGFueSI6Y2FzZSJzZW5kZXIt''@;'; put 'put ''cGhvbmUtd29yayI6Y2FzZSJzZW5kZXItc3RyZWV0IjpjYXNlInNlbmRlci1jaXR5IjpjYXNlInNlbmRlci1wb3N0YWwtY29kZSI6Y2FzZSJzZW5kZXItY291bnRyeSI6Y2FzZSJzZW5kZXItc3RhdGUtb3ItcHJvdmluY2UiOmNhc2UiYXV0aG9yLW5hbWUiOmNhc2UiYXV0aG9yLWluaXRpYWxz''@;'; put 'put ''IjpjYXNlImNoYXB0ZXIiOmNhc2UiZmlsZS1uYW1lIjpjYXNlInRlbXBsYXRlLW5hbWUiOmNhc2Uic2hlZXQtbmFtZSI6Y2FzZSJldmVudC1saXN0ZW5lciI6Y2FzZSJpbml0aWFsLWNyZWF0b3IiOmNhc2UiY3JlYXRpb24tZGF0ZSI6Y2FzZSJwcmludC1kYXRlIjpjYXNlImdlbmVyYXRvciI6''@;'; put 'put ''Y2FzZSJkb2N1bWVudC1zdGF0aXN0aWMiOmNhc2UidXNlci1kZWZpbmVkIjpjYXNlImVkaXRpbmctZHVyYXRpb24iOmNhc2UiZWRpdGluZy1jeWNsZXMiOmNhc2UiY29uZmlnLWl0ZW0iOmNhc2UicGFnZS1udW1iZXIiOmNhc2UicGFnZS1jb3VudCI6Y2FzZSJ0aW1lIjpjYXNlImNlbGwtcmFu''@;'; put 'put ''Z2Utc291cmNlIjpjYXNlImRldGVjdGl2ZSI6Y2FzZSJvcGVyYXRpb24iOmNhc2UiaGlnaGxpZ2h0ZWQtcmFuZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZSI6Y2FzZSJzb3VyY2UtY2VsbC1yYW5nZSI6Y2FzZSJzb3VyY2Utc2VydmljZSI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkIjpjYXNlImRh''@;'; put 'put ''dGEtcGlsb3QtbGV2ZWwiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbHMiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbCI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlcnMiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXIiOmNhc2UiZGF0YS1waWxvdC1kaXNwbGF5LWluZm8iOmNhc2UiZGF0YS1waWxvdC1z''@;'; put 'put ''b3J0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1sYXlvdXQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkLXJlZmVyZW5jZSI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwcyI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAtbWVtYmVyIjpjYXNlInJlY3QiOmNhc2Ui''@;'; put 'put ''ZGRlLWNvbm5lY3Rpb24tZGVjbHMiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbCI6Y2FzZSJkZGUtbGluayI6Y2FzZSJkZGUtc291cmNlIjpjYXNlInByb3BlcnRpZXMiOmNhc2UicHJvcGVydHkiOmNhc2UidGFibGUtcHJvdGVjdGlvbiI6Y2FzZSJkYXRhLXBpbG90LWdyYW5kLXRvdGFsIjpj''@;'; put 'put ''YXNlIm9mZmljZS1kb2N1bWVudC1jb21tb24tYXR0cnMiOmJyZWFrO2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlInBlcmNlbnRhZ2Utc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjppZigiLyI9PT1BdFsxXSl7aWYodmlbVmUubmFtZV09R2UsKERlPWRlLnBvcCgpKVsw''@;'; put 'put ''XSE9PUF0WzNdKXRocm93IkJhZCBzdGF0ZTogIitEZX1lbHNlIi8iIT09QXRbMF0uY2hhckF0KEF0WzBdLmxlbmd0aC0yKSYmKEdlPSIiLFZlPWZyKEF0WzBdLCExKSxkZS5wdXNoKFtBdFszXSwhMF0pKTticmVhaztjYXNlInN0eWxlIjoiLz4iPT09QXRbMF0uc2xpY2UoLTIpP3coQXRbMF0s''@;'; put 'put ''YW8pOiIvIj09QXRbMV0/dyhvZS5zbGljZShRaSxBdC5pbmRleCtBdFswXS5sZW5ndGgpLGFvKTpRaT1BdC5pbmRleDticmVhaztjYXNlIm51bWJlciI6Y2FzZSJkYXkiOmNhc2UibW9udGgiOmNhc2UieWVhciI6Y2FzZSJlcmEiOmNhc2UiZGF5LW9mLXdlZWsiOmNhc2Uid2Vlay1vZi15ZWFy''@;'; put 'put ''IjpjYXNlInF1YXJ0ZXIiOmNhc2UiaG91cnMiOmNhc2UibWludXRlcyI6Y2FzZSJzZWNvbmRzIjpjYXNlImFtLXBtIjpzd2l0Y2goZGVbZGUubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6UmU9ZnIoQXRbMF0sITEpLEdlKz14W0F0WzNdXVsibG9uZyI9''@;'; put 'put ''PT1SZS5zdHlsZT8xOjBdfWJyZWFrO2Nhc2UidGV4dCI6aWYoIi8+Ij09PUF0WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT1BdFsxXSlzd2l0Y2goZGVbZGUubGVuZ3RoLTFdWzBdKXtjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOkdlKz1v''@;'; put 'put ''ZS5zbGljZShldCxBdC5pbmRleCl9ZWxzZSBldD1BdC5pbmRleCtBdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Wmk9eHgoKFJlPWZyKEF0WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgd3M9e05hbWU6UmUubmFtZSxSZWY6WmlbMF0rIiEiK1ppWzFdfTtj''@;'; put 'put ''byYmKHdzLlNoZWV0PVJ0Lmxlbmd0aCksTG4uTmFtZXMucHVzaCh3cyk7YnJlYWs7Y2FzZSJwIjpjYXNlIlx1NjU4N1x1NjcyY1x1NGUzMiI6aWYoWyJtYXN0ZXItc3R5bGVzIl0uaW5kZXhPZihkZVtkZS5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PUF0WzFdfHxTbiYmU25bInN0''@;'; put 'put ''cmluZy12YWx1ZSJdKWZyKEF0WzBdLCExKSxtbj1BdC5pbmRleCtBdFswXS5sZW5ndGg7ZWxzZXt2YXIgUHM9ZyhvZS5zbGljZShtbixBdC5pbmRleCksMCxhbyk7bHI9KGxyLmxlbmd0aD4wP2xyKyJcbiI6IiIpK1BzWzBdLEduPVBzWzFdfWJyZWFrO2Nhc2UiZGF0YWJhc2UtcmFuZ2UiOmlm''@;'; put 'put ''KCIvIj09PUF0WzFdKWJyZWFrO3RyeXtmdFsoWmk9eHgoZnIoQXRbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2ZpbHRlciJdPXtyZWY6WmlbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PUF0WzFdKXtpZighKFByPWZyKEF0WzBdLCExKSkuaHJlZili''@;'; put 'put ''cmVhaztQci5UYXJnZXQ9cXIoUHIuaHJlZiksZGVsZXRlIFByLmhyZWYsIiMiPT1Qci5UYXJnZXQuY2hhckF0KDApJiZQci5UYXJnZXQuaW5kZXhPZigiLiIpPi0xPyhaaT14eChQci5UYXJnZXQuc2xpY2UoMSkpLFByLlRhcmdldD0iIyIrWmlbMF0rIiEiK1ppWzFdKTpQci5UYXJnZXQubWF0''@;'; put 'put ''Y2goL15cLlwuW1xcXC9dLykmJihQci5UYXJnZXQ9UHIuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaChBdFsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxl''@;'; put 'put ''OiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6IjpjYXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYobGUuV1RGKXRocm93IG5ldyBFcnJvcihBdCl9fXZhciBaYz17U2hlZXRzOmZ0LFNoZWV0TmFtZXM6UnQsV29ya2Jvb2s6TG59O3JldHVybiBs''@;'; put 'put ''ZS5ib29rU2hlZXRzJiZkZWxldGUgWmMuU2hlZXRzLFpjfX0oKTtmdW5jdGlvbiBUTyhnLHgpe3JldHVybiB4TyhnLHgpfXZhciBoRT1mdW5jdGlvbigpe3ZhciBnPVsiICA8b2ZmaWNlOm1hc3Rlci1zdHlsZXM+IiwnICAgIDxzdHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0''@;'; put 'put ''eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgICAgPHN0eWxlOmZvb3Rlci8+IiwnICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3Bs''@;'; put 'put ''YXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIikseD0iPG9mZmljZTpkb2N1bWVudC1zdHlsZXMgIitFdSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1s''@;'; put 'put ''bnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNp''@;'; put 'put ''czpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29t''@;'; put 'put ''cGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5''@;'; put 'put ''bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5c''@;'; put 'put ''biIrZysiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4ga2kreH19KCksbzY9ZnVuY3Rpb24oKXt2YXIgZz1mdW5jdGlvbihvZSxkZSl7cmV0dXJuIG9pKG9lKS5yZXBsYWNlKC8gICsvZyxmdW5jdGlvbihEZSl7cmV0dXJuJzx0ZXh0OnMgdGV4''@;'; put 'put ''dDpjPSInK0RlLmxlbmd0aCsnIi8+J30pLnJlcGxhY2UoL1x0L2csIjx0ZXh0OnRhYi8+IikucmVwbGFjZSgvXG4vZyxkZT8iPHRleHQ6bGluZS1icmVhay8+IjoiPC90ZXh0OnA+PHRleHQ6cD4iKS5yZXBsYWNlKC9eIC8sIjx0ZXh0OnMvPiIpLnJlcGxhY2UoLyAkLywiPHRleHQ6cy8+Iil9''@;'; put 'put ''LHg9ZnVuY3Rpb24ob2Upe3JldHVybiBvZS5tYXAoZnVuY3Rpb24oZGUpe3ZhciBEZT0iIjtyZXR1cm4gbnVsbCE9ZGUub2RzJiYoRGUrPScgdGV4dDpzdHlsZS1uYW1lPSJUJytkZS5vZHMrJyInKSxkZS52PyI8dGV4dDpzcGFuIitEZSsiPiIrZyhkZS52LCEwKSsiPC90ZXh0OnNwYW4+Ijoi''@;'; put 'put ''In0pLmpvaW4oIiIpfSx3PSIgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cbiIsVz1mdW5jdGlvbihvZSxkZSxEZSl7dmFyIFJlPVtdO1JlLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpuYW1lPSInK29pKGRlLlNoZWV0TmFtZXNbRGVdKSsnIiB0YWJsZTpzdHlsZS1uYW1l''@;'; put 'put ''PSJ0YTEiPlxuJyk7dmFyIFZlPTAsR2U9MCxldD13cihvZVsiIXJlZiJdfHwiQTEiKSxidD1vZVsiIW1lcmdlcyJdfHxbXSxKZT0wLGZ0PUFycmF5LmlzQXJyYXkob2UpO2lmKG9lWyIhY29scyJdKWZvcihHZT0wO0dlPD1ldC5lLmM7KytHZSlSZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJs''@;'; put 'put ''ZS1jb2x1bW4iKyhvZVsiIWNvbHMiXVtHZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrb2VbIiFjb2xzIl1bR2VdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIgU3Q9b2VbIiFyb3dzIl18fFtdO2ZvcihWZT0wO1ZlPGV0LnMucjsrK1ZlKVJlLnB1c2goIiAg''@;'; put 'put ''ICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKFN0W1ZlXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytTdFtWZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7VmU8PWV0LmUucjsrK1ZlKXtmb3IoUmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93IisoU3Rb''@;'; put 'put ''VmVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK1N0W1ZlXS5vZHMrJyInOiIiKSsiPlxuIiksR2U9MDtHZTxldC5zLmM7KytHZSlSZS5wdXNoKHcpO2Zvcig7R2U8PWV0LmUuYzsrK0dlKXt2YXIgQXQ9ITEsenQ9e30sU249IiI7Zm9yKEplPTA7SmUhPWJ0Lmxlbmd0aDsrK0plKWlmKCEoYnRb''@;'; put 'put ''SmVdLnMuYz5HZXx8YnRbSmVdLnMucj5WZXx8YnRbSmVdLmUuYzxHZXx8YnRbSmVdLmUucjxWZSkpeyhidFtKZV0ucy5jIT1HZXx8YnRbSmVdLnMuciE9VmUpJiYoQXQ9ITApLHp0WyJ0YWJsZTpudW1iZXItY29sdW1ucy1zcGFubmVkIl09YnRbSmVdLmUuYy1idFtKZV0ucy5jKzEsenRbInRh''@;'; put 'put ''YmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1idFtKZV0uZS5yLWJ0W0plXS5zLnIrMTticmVha31pZihBdClSZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNle3ZhciBscj1Lcih7cjpWZSxjOkdlfSksbW49ZnQ/KG9lW1ZlXXx8W10pW0dlXTpv''@;'; put 'put ''ZVtscl07aWYobW4mJm1uLmYmJih6dFsidGFibGU6Zm9ybXVsYSJdPW9pKGZMKG1uLmYpKSxtbi5GJiZtbi5GLnNsaWNlKDAsbHIubGVuZ3RoKT09bHIpKXt2YXIgZHI9d3IobW4uRik7enRbInRhYmxlOm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09ZHIuZS5jLWRyLnMuYysxLHp0''@;'; put 'put ''WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPWRyLmUuci1kci5zLnIrMX1pZihtbil7c3dpdGNoKG1uLnQpe2Nhc2UiYiI6U249bW4udj8iVFJVRSI6IkZBTFNFIix6dFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iYm9vbGVhbiIsenRbIm9mZmljZTpib29sZWFuLXZhbHVlIl09''@;'; put 'put ''bW4udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOlNuPW1uLnd8fFN0cmluZyhtbi52fHwwKSx6dFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLHp0WyJvZmZpY2U6dmFsdWUiXT1tbi52fHwwO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOlNuPW1uLnYsenRbIm9mZmljZTp2YWx1''@;'; put 'put ''ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpTbj1tbi53fHxMZShtbi52KS50b0lTT1N0cmluZygpLHp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIix6dFsib2ZmaWNlOmRhdGUtdmFsdWUiXT1MZShtbi52KS50b0lTT1N0cmluZygpLHp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09''@;'; put 'put ''ImNlMSI7YnJlYWs7ZGVmYXVsdDpSZS5wdXNoKHcpO2NvbnRpbnVlfW51bGwhPW1uLm9kcyYmIXp0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJih6dFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrbW4ub2RzKTt2YXIgR249IW1uLlJ8fG1uLmwmJm1uLmwuVGFyZ2V0P2coU24pOngobW4uUik7aWYo''@;'; put 'put ''bW4ubCYmbW4ubC5UYXJnZXQpe3ZhciBIbj1tbi5sLlRhcmdldDsiIyIhPShIbj0iIyI9PUhuLmNoYXJBdCgwKT8iIyIrZlcoSG4uc2xpY2UoMSkpOkhuKS5jaGFyQXQoMCkmJiFIbi5tYXRjaCgvXlx3KzovKSYmKEhuPSIuLi8iK0huKSxHbj16cigidGV4dDphIixHbix7InhsaW5rOmhyZWYi''@;'; put 'put ''OkhuLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfVJlLnB1c2goIiAgICAgICAgICAiK3pyKCJ0YWJsZTp0YWJsZS1jZWxsIix6cigidGV4dDpwIixHbix7fSksenQpKyJcbiIpfWVsc2UgUmUucHVzaCh3KX19UmUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cbiIpfXJldHVybiBS''@;'; put 'put ''ZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksUmUuam9pbigiIil9LGVlPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oZGUsRGUpe3ZhciBSZT1ba2ldLFZlPUV1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVz''@;'; put 'put ''OnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4''@;'; put 'put ''bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3Vt''@;'; put 'put ''ZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1''@;'; put 'put ''bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEu''@;'; put 'put ''MCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFt''@;'; put 'put ''ZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVy''@;'; put 'put ''bjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDov''@;'; put 'put ''L29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hl''@;'; put 'put ''bWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9y''@;'; put 'put ''dCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6''@;'; put 'put ''dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnht''@;'; put 'put ''bG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9w''@;'; put 'put ''OnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24i''@;'; put 'put ''OiIxLjIifSksR2U9RXUoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09RGUuYm9v''@;'; put 'put ''a1R5cGU/KFJlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK1ZlK0dlKyI+XG4iKSxSZS5wdXNoKGE3KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOlJlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrVmUrIj5cbiIpLGZ1bmN0aW9uKG9l''@;'; put 'put ''LGRlKXt2YXIgRGU9W10sUmU9e307RGUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLERlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxEZS5wdXNoKCcgICA8bnVtYmVyOm1v''@;'; put 'put ''bnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksRGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksRGUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxEZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+''@;'; put 'put ''XG4iKSxEZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksRGUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIFZlPTA7ZGUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oSmUpe3JldHVybiBkZS5TaGVldHNbSmVdfSkuZm9yRWFjaChmdW5jdGlvbihKZSl7aWYoSmUmJkpl''@;'; put 'put ''WyIhY29scyJdKWZvcih2YXIgZnQ9MDtmdDxKZVsiIWNvbHMiXS5sZW5ndGg7KytmdClpZihKZVsiIWNvbHMiXVtmdF0pe3ZhciBSdD1KZVsiIWNvbHMiXVtmdF07aWYobnVsbD09UnQud2lkdGgmJm51bGw9PVJ0LndweCYmbnVsbD09UnQud2NoKWNvbnRpbnVlO20xKFJ0KSxSdC5vZHM9VmU7''@;'; put 'put ''dmFyIFN0PUplWyIhY29scyJdW2Z0XS53cHgrInB4IjtEZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrVmUrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksRGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJl''@;'; put 'put ''Zm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK1N0KyciLz5cbicpLERlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrVmV9fSk7dmFyIEdlPTA7ZGUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oSmUpe3JldHVybiBkZS5TaGVldHNbSmVdfSkuZm9yRWFjaChmdW5jdGlvbihK''@;'; put 'put ''ZSl7aWYoSmUmJkplWyIhcm93cyJdKWZvcih2YXIgZnQ9MDtmdDxKZVsiIXJvd3MiXS5sZW5ndGg7KytmdClpZihKZVsiIXJvd3MiXVtmdF0pe0plWyIhcm93cyJdW2Z0XS5vZHM9R2U7dmFyIFJ0PUplWyIhcm93cyJdW2Z0XS5ocHgrInB4IjtEZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHls''@;'; put 'put ''ZTpuYW1lPSJybycrR2UrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksRGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6cm93LWhlaWdodD0iJytSdCsnIi8+XG4nKSxEZS5wdXNoKCIgIDwvc3R5bGU6c3R5''@;'; put 'put ''bGU+XG4iKSwrK0dlfX0pLERlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLERlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRy''@;'; put 'put ''dWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLERlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLERlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVs''@;'; put 'put ''dCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBldD0yO0dlPTAsZGUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oSmUpe3JldHVybiBkZS5TaGVldHNbSmVdfSkuZm9yRWFjaChmdW5jdGlvbihKZSl7aWYoSmUpZm9yKHZhciBmdD0wLFJ0PTAsU3Q9d3IoSmVbIiFyZWYi''@;'; put 'put ''XSksQXQ9QXJyYXkuaXNBcnJheShKZSk7ZnQ8PVN0LmUucjsrK2Z0KWZvcihSdD0wO1J0PD1TdC5lLmM7KytSdCl7dmFyIHp0PUtyKHtyOmZ0LGM6UnR9KSxTbj1BdD8oSmVbZnRdfHxbXSlbUnRdOkplW3p0XTtpZihTbiYmKFNuLnN8fFNuLlIpKXt2YXIgbHI9W107U24ucyYmbHIucHVzaChb''@;'; put 'put ''U24sITBdKSxTbi5SJiZTbi5SLmZvckVhY2goZnVuY3Rpb24obW4pe21uJiZtbi5zJiZsci5wdXNoKFttbiwhMV0pfSksbHIuZm9yRWFjaChmdW5jdGlvbihtbil7dmFyIGRyPW1uWzBdLEduPWRyLnMsSG49IiIsaHI9eyJzdHlsZTpuYW1lIjoobW5bMV0/ImNlIjoiVCIpK2V0LCJzdHlsZTpm''@;'; put 'put ''YW1pbHkiOm1uWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O21uWzFdJiYoaHJbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLGhyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAiKTt2YXIgTm49e30sdHI9ITEsdmk9e30sUGk9ITEscWk9e30sdGE9ITE7aWYoR24uY29s''@;'; put 'put ''b3ImJih2aVsiZm86Y29sb3IiXT0iIyIrTWQoR24uY29sb3IucmdiKSxQaT0hMCksR24uc3omJih2aVsiZm86Zm9udC1zaXplIl09R24uc3orInB0IixQaT0hMCksR24uYm9sZCYmKHZpWyJmbzpmb250LXdlaWdodCJdPSJib2xkIixQaT0hMCksR24uaXRhbGljJiYodmlbImZvOmZvbnQtc3R5''@;'; put 'put ''bGUiXT0iaXRhbGljIixQaT0hMCksR24ubmFtZSYmKFJlW0duLm5hbWVdfHwoUmVbR24ubmFtZV09R24ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK0duLm5hbWUrIiZhcG9zOyI6R24ubmFtZSksdmlbInN0eWxlOmZvbnQtbmFtZSJdPUduLm5hbWUsUGk9ITApLEduLnN0cmlrZSYmKHZpWyJz''@;'; put 'put ''dHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsdmlbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixQaT0hMCksR24udW5kZXJsaW5lJiYodmlbInN0eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIix2aVsic3R5bGU6dGV4dC11bmRl''@;'; put 'put ''cmxpbmUtd2lkdGgiXT0iYXV0byIsdmlbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLFBpPSEwKSxtblsxXSl7aWYoR24uYWxpZ25tZW50KXt2YXIgSWk9R24uYWxpZ25tZW50O0lpLndyYXBUZXh0JiYoTm5bImZvOndyYXAtb3B0aW9uIl09IndyYXAiLHRyPSEw''@;'; put 'put ''KSxJaS52ZXJ0aWNhbCYmKE5uWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1JaS52ZXJ0aWNhbD8ibWlkZGxlIjpJaS52ZXJ0aWNhbCx0cj0hMCksZWVbSWkuaG9yaXpvbnRhbF0mJihxaVsiZm86dGV4dC1hbGlnbiJdPWVlW0lpLmhvcml6b250YWxdLHRhPSEwKX1Hbi5mZ0Nv''@;'; put 'put ''bG9yJiYoTm5bImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrTWQoR24uZmdDb2xvci5yZ2IpLHRyPSEwKX10ciYmKEhuKz16cigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLE5uKSksUGkmJihIbis9enIoInN0eWxlOnRleHQtcHJvcGVydGllcyIsbnVsbCx2aSkpLHRhJiYo''@;'; put 'put ''SG4rPXpyKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxxaSkpLERlLnB1c2goIiAgIit6cigic3R5bGU6c3R5bGUiLEhuLGhyKSsiXG4iKSxkci5vZHM9ZXQsKytldH0pfX19KSxEZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpO3ZhciBidD0iIDxvZmZp''@;'; put 'put ''Y2U6Zm9udC1mYWNlLWRlY2xzPlxuIit4ZShSZSkubWFwKGZ1bmN0aW9uKEplKXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9IicrSmUrJyIgc3ZnOmZvbnQtZmFtaWx5PSInK1JlW0plXSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpmb250LWZhY2UtZGVjbHM+''@;'; put 'put ''XG4iO29lLnB1c2goYnQpLG9lLnB1c2goRGUuam9pbigiIikpfShSZSxkZSksUmUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxSZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIpO2Zvcih2YXIgZXQ9MDtldCE9ZGUuU2hlZXROYW1lcy5sZW5ndGg7KytldClSZS5wdXNoKFco''@;'; put 'put ''ZGUuU2hlZXRzW2RlLlNoZWV0TmFtZXNbZXRdXSxkZSxldCkpO3JldHVybiBSZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKSxSZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4iKSxSZS5wdXNoKCJmb2RzIj09RGUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwv''@;'; put 'put ''b2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksUmUuam9pbigiIil9fSgpO2Z1bmN0aW9uIGZFKGcseCl7aWYoImZvZHMiPT14LmJvb2tUeXBlKXJldHVybiBvNihnLHgpO3ZhciB3PXNpKCksVj0iIixXPVtdLGVlPVtdO3JldHVybiB3bih3LFY9Im1pbWV0eXBlIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIpLHduKHcsVj0iY29udGVudC54bWwiLG82KGcseCkpLFcucHVzaChbViwidGV4dC94bWwiXSksZWUucHVzaChbViwiQ29udGVudEZpbGUiXSksd24odyxWPSJzdHlsZXMueG1sIixoRShnLHgpKSxXLnB1c2goW1YsInRleHQveG1sIl0p''@;'; put 'put ''LGVlLnB1c2goW1YsIlN0eWxlc0ZpbGUiXSksd24odyxWPSJtZXRhLnhtbCIsa2krYTcoKSksVy5wdXNoKFtWLCJ0ZXh0L3htbCJdKSxlZS5wdXNoKFtWLCJNZXRhZGF0YUZpbGUiXSksd24odyxWPSJtYW5pZmVzdC5yZGYiLGZ1bmN0aW9uIGk3KGcpe3ZhciB4PVtraV07eC5wdXNoKCc8cmRm''@;'; put 'put ''OlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciB3PTA7dyE9Zy5sZW5ndGg7Kyt3KXgucHVzaCh1bShnW3ddWzBdLGdbd11bMV0pKSx4LnB1c2goYU0oIiIsZ1t3XVswXSkpO3JldHVybiB4LnB1c2godW0oIiIs''@;'; put 'put ''IkRvY3VtZW50IiwicGtnIikpLHgucHVzaCgiPC9yZGY6UkRGPiIpLHguam9pbigiIil9KGVlKSksVy5wdXNoKFtWLCJhcHBsaWNhdGlvbi9yZGYreG1sIl0pLHduKHcsVj0iTUVUQS1JTkYvbWFuaWZlc3QueG1sIixmdW5jdGlvbiBpTShnKXt2YXIgeD1ba2ldO3gucHVzaCgnPG1hbmlmZXN0''@;'; put 'put ''Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLHgucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Ii8iIG1hbmlm''@;'; put 'put ''ZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIvPlxuJyk7Zm9yKHZhciB3PTA7dzxnLmxlbmd0aDsrK3cpeC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwt''@;'; put 'put ''cGF0aD0iJytnW3ddWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9IicrZ1t3XVsxXSsnIi8+XG4nKTtyZXR1cm4geC5wdXNoKCI8L21hbmlmZXN0Om1hbmlmZXN0PiIpLHguam9pbigiIil9KFcpKSx3fWZ1bmN0aW9uIEYzKGcpe3JldHVybiBmdW5jdGlvbih3LFYpe3ZhciBXPWZ1bmN0aW9u''@;'; put 'put ''IEFPKGcseCl7aWYoIXgpcmV0dXJuIDA7dmFyIHc9Zy5TaGVldE5hbWVzLmluZGV4T2YoeCk7aWYoLTE9PXcpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIreCk7cmV0dXJuIHd9KHcsVi5zaGVldCk7cmV0dXJuIGcuZnJvbV9zaGVldCh3LlNoZWV0c1t3LlNoZWV0TmFtZXNb''@;'; put 'put ''V11dLFYsdyl9fXZhciBfOT1GMyh4ZCksVGI9RjMoe2Zyb21fc2hlZXQ6SGJ9KSxDc2U9RjModHlwZW9mIGt1PCJ1Ij9rdTp7fSksaVk9RjModHlwZW9mIHgzPCJ1Ij94Mzp7fSksa089RjModHlwZW9mIExnPCJ1Ij9MZzp7fSkscEU9RjModHlwZW9mIE5fPCJ1Ij9OXzp7fSksYVk9RjMoe2Zy''@;'; put 'put ''b21fc2hlZXQ6bVl9KSxETz1GMyh0eXBlb2YgbTc8InUiP203Ont9KSxvWT1GMyh0eXBlb2YgZGw8InUiP2RsOnt9KSxRdT1kKDkxNDI2KXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG9Ccm93c2VyaWZ5O2lmKCFRdSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0''@;'; put 'put ''byBleHRlbnNpb25zISIpO3ZhciBJTz17U0hBNTEyOiJzaGE1MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hBMToic2hhMSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1kMiJ9O2Z1bmN0aW9uIHdjKGcseCl7c3dpdGNoKHg9KHh8fCIiKS5yZXBsYWNlKC8tL2csIiIp''@;'; put 'put ''KXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4gbmV3IFF1LmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZShnKS5kaWdlc3QoKTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVybiBuZXcgUXUuY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShnKS5kaWdlc3QoKTtjYXNlIk1E''@;'; put 'put ''MiI6cmV0dXJuIG5ldyBRdS5jcmVhdGVIYXNoKCJtZDIiKS51cGRhdGUoZykuZGlnZXN0KCk7ZGVmYXVsdDppZihJT1t4XSlyZXR1cm4gbmV3IFF1LmNyZWF0ZUhhc2goSU9beF0pLnVwZGF0ZShnKS5kaWdlc3QoKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGht''@;'; put 'put ''ICIreCl9fWZ1bmN0aW9uIEdwKGcseCx3KXtpZigicmMyIj09dyl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBWPVF1LmNyZWF0ZURlY2lwaGVyaXYod3x8ImFlcy0yNTYtY2JjIixnLHgpO3JldHVybiBWLnNldEF1dG9QYWRkaW5nKCExKSxWfWZ1bmN0aW9uIGtiKGcpe3JldHVyblsoIjAw''@;'; put 'put ''IisoMjU1JmcpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhnPj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhnPj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoZz4+PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpv''@;'; put 'put ''aW4oIiIpfXZhciBEYj1mdW5jdGlvbihnLHgsdyl7Zm9yKHZhciBWPSJzdHJpbmciPT10eXBlb2YgeD9CdWZmZXIuZnJvbSh4LCJoZXgiKTp4LFc9InN0cmluZyI9PXR5cGVvZiBnP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsZykpOmcsZWU9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiB3P0J1ZmZlci5mcm9tKHcsImhleCIpOncsbGU9d2MoVywiTUQ1Iiksb2U9QnVmZmVyLmNvbmNhdChbbGUuc2xpY2UoMCw1KSxWXSksZGU9MDtkZTw0OysrZGUpb2U9QnVmZmVyLmNvbmNhdChbb2Usb2VdKTt2YXIgRGU9d2Mob2UsIk1ENSIpO3JldHVybih3YyhCdWZmZXIuY29uY2F0KFtE''@;'; put 'put ''ZS5zbGljZSgwLDUpLGVlXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0sSWI9ZnVuY3Rpb24oZyx4LHcpe3ZhciBWPSJzdHJpbmciPT10eXBlb2YgeD9CdWZmZXIuZnJvbSh4LCJoZXgiKTp4LFc9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBnP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsZykpOmcsZWU9InN0cmluZyI9PXR5cGVvZiB3P0J1ZmZlci5mcm9tKHcsImhleCIpOncsbGU9d2MoQnVmZmVyLmNvbmNhdChbVixXXSksIlNIQTEiKTtyZXR1cm4gd2MoQnVmZmVyLmNvbmNhdChbbGUs''@;'; put 'put ''ZWVdKSwiU0hBMSIpfSxPTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHgoKXt9eC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oSmUpe3RoaXMuX2k9MDt2YXIgZnQ9dGhpcy5fYnVpbGQoSmUsIiIpO3JldHVybiIiPT09ZnQ/IiI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBz''@;'; put 'put ''dGFuZGFsb25lPSJ5ZXMiPz4nK2Z0fSx4LnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24oSmUsZnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPWZ0WzBdKSxudWxsPT1KZXx8Im9iamVjdCIhPXR5cGVvZiBKZSYmImZ1bmN0aW9uIiE9dHlwZW9mIEplKW51bGwhPUplJiYoZnQrPWZ1''@;'; put 'put ''bmN0aW9uIGcoSmUsZnQpe3JldHVybiBudWxsPT1KZXx8KEplPUplLnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGZ0JiYoSmU9SmUucmVwbGFjZSgvIi9nLCImcXVvdDsiKSkpLEplfShKZSkpO2Vsc2V7''@;'; put 'put ''aWYoIUplLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkoSmUpKTtmdCs9IjwiK0plLm5hbWU7dmFyIFJ0PXRoaXM7ZnQrPUplLmF0dHJpYnV0ZXMmJkV1KEplLmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KEpl''@;'; put 'put ''LmNoaWxkcmVuKSYmMCE9SmUuY2hpbGRyZW4ubGVuZ3RoPyhmdCs9Ij4iLEplLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oU3Qpe2Z0PVJ0Ll9idWlsZChTdCxmdCl9KSxmdCs9IjwvIitKZS5uYW1lKyI+Iik6ZnQrPSIvPiJ9cmV0dXJuIGZ0fTt2YXIgdz1CdWZmZXIuZnJvbShbNCwwLDQs''@;'; put 'put ''MCw2NCwwLDAsMF0pLGVlPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZlci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZdKSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwxMDMsMTI3LDIsMTc4LDQ0LDEzMiw1MV0pfSxrZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwy''@;'; put 'put ''MzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKX19O2Z1bmN0aW9uIGxlKEplLGZ0LFJ0LFN0LEF0LHp0''@;'; put 'put ''KXt2YXIgU249ZnQudG9Mb3dlckNhc2UoKSsiLSIrOCpTdC5sZW5ndGg7aWYoIkNoYWluaW5nTW9kZUNCQyIhPT1SdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAiK1J0KTt2YXIgbHI9UXVbSmU/ImNyZWF0ZUNpcGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJd''@;'; put 'put ''KFNuKz0iLWNiYyIsU3QsQXQpO2xyLnNldEF1dG9QYWRkaW5nKCExKTt2YXIgbW49bHIudXBkYXRlKHp0KSxkcj1bbW5dO3RyeXt2YXIgR249bHIuZmluYWwoKTtkci5wdXNoKEduKX1jYXRjaHt9cmV0dXJuIEJ1ZmZlci5jb25jYXQoZHIpfWZ1bmN0aW9uIG9lKEplKXtKZT1KZS50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpO3ZhciBmdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihRdS5nZXRIYXNoZXMoKS5pbmRleE9mKEplKTwwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitKZSk7dmFyIFN0PVF1LmNyZWF0ZUhhc2goSmUpO3JldHVybiBTdC51cGRhdGUo''@;'; put 'put ''QnVmZmVyLmNvbmNhdChmdCkpLFN0LmRpZ2VzdCgpfWZ1bmN0aW9uIGRlKEplLGZ0LFJ0LFN0KXsibnVtYmVyIj09dHlwZW9mIFN0JiYoU3Q9RGUoU3QpKTt2YXIgQXQ9b2UoSmUsZnQsU3QpO2lmKEF0Lmxlbmd0aDxSdCl7dmFyIHp0PUJ1ZmZlci5hbGxvYyhSdCw1NCk7QXQuY29weSh6dCks''@;'; put 'put ''QXQ9enR9ZWxzZSBBdC5sZW5ndGg+UnQmJihBdD1BdC5zbGljZSgwLFJ0KSk7cmV0dXJuIEF0fWZ1bmN0aW9uIERlKEplLGZ0KXt2YXIgUnQ9QnVmZmVyLmFsbG9jKGZ0fHw0KTtyZXR1cm4gUnQud3JpdGVVSW50MzJMRShKZSwwKSxSdH1mdW5jdGlvbiBSZShKZSxmdCxSdCxTdCxBdCx6dCl7''@;'; put 'put ''Zm9yKHZhciBscj1vZShmdCxSdCxCdWZmZXIuZnJvbShKZSwidXRmMTZsZSIpKSxtbj0wO21uPFN0O21uKyspbHI9b2UoZnQsRGUobW4pLGxyKTt2YXIgR249QXQvODtpZigobHI9b2UoZnQsbHIsenQpKS5sZW5ndGg8R24pe3ZhciBIbj1CdWZmZXIuYWxsb2MoR24sNTQpO2xyLmNvcHkoSG4p''@;'; put 'put ''LGxyPUhufWVsc2UgbHIubGVuZ3RoPkduJiYobHI9bHIuc2xpY2UoMCxHbikpO3JldHVybiBscn1yZXR1cm4gUXUucmFuZG9tQnl0ZXN8fChRdS5yYW5kb21CeXRlcz1mdW5jdGlvbihKZSl7Zm9yKHZhciBmdD1CdWZmZXIuYWxsb2MoSmUpLFJ0PTA7UnQ8SmU7KytSdClmdFtSdF09TWF0aC5m''@;'; put 'put ''bG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIGZ0fSksZnVuY3Rpb24gYnQoSmUsZnQpe2lmKCJzdHJpbmciPT10eXBlb2YgSmUpcmV0dXJuIGJ0KEJ1ZmZlci5mcm9tKEplLCJiaW5hcnkiKSxmdCk7dmFyIFJ0PVF1LnJhbmRvbUJ5dGVzKDMyKSxTdD17cGFja2FnZTp7Y2lwaGVyQWxn''@;'; put 'put ''b3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTpRdS5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsa2V5Qml0czo4KlJ0Lmxlbmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06''@;'; put 'put ''IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOlF1LnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixzcGluQ291bnQ6MSxrZXlCaXRzOjI1Nn19LEF0PWZ1bmN0aW9uIFZlKEplLGZ0LFJ0''@;'; put 'put ''LFN0LEF0LHp0LFNuLGxyKXtmb3IodmFyIG1uPVtdLGRyPUplPzA6OCxHbj0wLEhuPTAsaHI9MDtocjxsci5sZW5ndGg7KXsoaHI9KEhuPWhyKSs0MDk2KT5sci5sZW5ndGgmJihocj1sci5sZW5ndGgpO3ZhciBObj1sci5zbGljZShIbitkcixocitkciksdHI9Tm4ubGVuZ3RoJUF0O3RyJiYo''@;'; put 'put ''Tm49QnVmZmVyLmNvbmNhdChbTm4sQnVmZmVyLmFsbG9jKEF0LXRyKV0pKTt2YXIgUGk9bGUoSmUsZnQsUnQsU24sZGUoU3QsenQsQXQsR24pLE5uKTttbi5wdXNoKFBpKSxHbisrfXZhciBxaT1CdWZmZXIuY29uY2F0KG1uKTtpZihKZSlxaT1CdWZmZXIuY29uY2F0KFtEZShsci5sZW5ndGgs''@;'; put 'put ''OCkscWldKTtlbHNle3ZhciB0YT1sci5yZWFkVUludDMyTEUoMCk7cWk9cWkuc2xpY2UoMCx0YSl9cmV0dXJuIHFpfSghMCxTdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxTdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLFN0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxTdC5wYWNrYWdlLmJsb2Nr''@;'; put 'put ''U2l6ZSxTdC5wYWNrYWdlLnNhbHRWYWx1ZSxSdCxKZSksenQ9UXUucmFuZG9tQnl0ZXMoNjQpLFNuPWRlKFN0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxTdC5wYWNrYWdlLnNhbHRWYWx1ZSxTdC5wYWNrYWdlLmJsb2NrU2l6ZSxlZS5kYXRhSW50ZWdyaXR5LmhtYWNLZXkpLGxyPWxlKCEwLFN0''@;'; put 'put ''LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLFN0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsUnQsU24senQpLG1uPWZ1bmN0aW9uIEdlKEplLGZ0KXtKZT1KZS50b0xvd2VyQ2FzZSgpO3ZhciBSdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtpZihRdS5nZXRIYXNoZXMoKS5pbmRleE9mKEpl''@;'; put 'put ''KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrSmUrIicgbm90IHN1cHBvcnRlZCEiKTt2YXIgQXQ9UXUuY3JlYXRlSG1hYyhKZSxmdCk7cmV0dXJuIEF0LnVwZGF0ZShCdWZmZXIuY29uY2F0KFJ0KSksQXQuZGlnZXN0KCl9KFN0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSx6''@;'; put 'put ''dCxBdCksZHI9ZGUoU3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLFN0LnBhY2thZ2Uuc2FsdFZhbHVlLFN0LnBhY2thZ2UuYmxvY2tTaXplLGVlLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSxHbj1sZSghMCxTdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxTdC5wYWNrYWdlLmNpcGhlckNoYWlu''@;'; put 'put ''aW5nLFJ0LGRyLG1uKTtTdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5OmxyLGVuY3J5cHRlZEhtYWNWYWx1ZTpHbn07dmFyIEhuPVJlKGZ0LFN0LmtleS5oYXNoQWxnb3JpdGhtLFN0LmtleS5zYWx0VmFsdWUsU3Qua2V5LnNwaW5Db3VudCxTdC5rZXkua2V5Qml0cyxlZS5rZXkp''@;'; put 'put ''O1N0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1sZSghMCxTdC5rZXkuY2lwaGVyQWxnb3JpdGhtLFN0LmtleS5jaXBoZXJDaGFpbmluZyxIbixTdC5rZXkuc2FsdFZhbHVlLFJ0KTt2YXIgaHI9UXUucmFuZG9tQnl0ZXMoMTYpLE5uPVJlKGZ0LFN0LmtleS5oYXNoQWxnb3JpdGhtLFN0LmtleS5z''@;'; put 'put ''YWx0VmFsdWUsU3Qua2V5LnNwaW5Db3VudCxTdC5rZXkua2V5Qml0cyxlZS52ZXJpZmllckhhc2guaW5wdXQpO1N0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dD1sZSghMCxTdC5rZXkuY2lwaGVyQWxnb3JpdGhtLFN0LmtleS5jaXBoZXJDaGFpbmluZyxObixTdC5rZXkuc2FsdFZh''@;'; put 'put ''bHVlLGhyKTt2YXIgdHI9b2UoU3Qua2V5Lmhhc2hBbGdvcml0aG0saHIpLHZpPVJlKGZ0LFN0LmtleS5oYXNoQWxnb3JpdGhtLFN0LmtleS5zYWx0VmFsdWUsU3Qua2V5LnNwaW5Db3VudCxTdC5rZXkua2V5Qml0cyxlZS52ZXJpZmllckhhc2gudmFsdWUpO1N0LmtleS5lbmNyeXB0ZWRWZXJp''@;'; put 'put ''Zmllckhhc2hWYWx1ZT1sZSghMCxTdC5rZXkuY2lwaGVyQWxnb3JpdGhtLFN0LmtleS5jaXBoZXJDaGFpbmluZyx2aSxTdC5rZXkuc2FsdFZhbHVlLHRyKTt2YXIgUGk9ZnVuY3Rpb24gZXQoSmUpe3ZhciBmdD17bmFtZToiZW5jcnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIsInhtbG5zOmMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmlj''@;'; put 'put ''ZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6SmUucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpKZS5wYWNrYWdlLmJsb2NrU2l6ZSxrZXlCaXRzOkplLnBhY2thZ2Uua2V5Qml0''@;'; put 'put ''cyxoYXNoU2l6ZTpKZS5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTpKZS5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpKZS5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06SmUucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpK''@;'; put 'put ''ZS5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTpKZS5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNLZXkudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTpK''@;'; put 'put ''ZS5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0ZXM6e3VyaToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAw''@;'; put 'put ''Ni9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6SmUua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTpKZS5rZXkuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1NpemU6SmUua2V5LmJsb2NrU2l6ZSxrZXlCaXRz''@;'; put 'put ''OkplLmtleS5rZXlCaXRzLGhhc2hTaXplOkplLmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06SmUua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpKZS5rZXkuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTpKZS5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6SmUu''@;'; put 'put ''a2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6SmUua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZTpKZS5rZXkuZW5jcnlwdGVkVmVyaWZpZXJI''@;'; put 'put ''YXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOkplLmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxTdD0obmV3IHgpLmJ1aWxkKGZ0KTtyZXR1cm4gQnVmZmVyLmNvbmNhdChbdyxCdWZmZXIuZnJvbShTdCwidXRmOCIp''@;'; put 'put ''XSl9KFN0KSxxaT11ZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIHVlLnV0aWxzLmNmYl9hZGQocWksIkVuY3J5cHRpb25JbmZvIixQaSksdWUudXRpbHMuY2ZiX2FkZChxaSwiRW5jcnlwdGVkUGFja2FnZSIsQXQpLHFpfX0oKTtmdW5jdGlvbiBQTyhnKXtyZXR1cm4gZnVuY3Rpb24odyl7Zm9y''@;'; put 'put ''KHZhciBWPTA7ViE9Zy5sZW5ndGg7KytWKXt2YXIgVz1nW1ZdO3ZvaWQgMD09PXdbV1swXV0mJih3W1dbMF1dPVdbMV0pLCJuIj09PVdbMl0mJih3W1dbMF1dPU51bWJlcih3W1dbMF1dKSl9fX12YXIgdkU9ZnVuY3Rpb24oZyl7UE8oW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsi''@;'; put 'put ''Y2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0Zp''@;'; put 'put ''bGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShnKSxnLmJvb2tJbWFnZXMmJihnLmNlbGxTdHlsZXM9ITApfSwkcD1QTyhbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCEx''@;'; put 'put ''XSxbIldURiIsITFdXSk7ZnVuY3Rpb24gYjkoZyl7cmV0dXJuIHlhLldTLmluZGV4T2YoZyk+LTE/InNoZWV0Ijp5YS5DUyYmZz09eWEuQ1M/ImNoYXJ0Ijp5YS5EUyYmZz09eWEuRFM/ImRpYWxvZyI6eWEuTVMmJmc9PXlhLk1TPyJtYWNybyI6ZyYmZy5sZW5ndGg/Zzoic2hlZXQifXZhciB3''@;'; put 'put ''OT1bXTtmdW5jdGlvbiBjWShnLHgsdyxWLFcsZWUsbGUsb2UsZGUsRGUsUmUsVmUpe3RyeXtlZVtWXT11MShycihnLHcsITApLHgpO3ZhciBldCxHZT15dChnLHgpO3N3aXRjaChvZSl7Y2FzZSJzaGVldCI6ZXQ9ZnVuY3Rpb24gdEUoZyx4LHcsVixXLGVlLGxlLG9lKXtyZXR1cm4iLmJpbiI9''@;'; put 'put ''PT14LnNsaWNlKC00KT9mdW5jdGlvbiBvOShnLHgsdyxWLFcsZWUsbGUpe2lmKCFnKXJldHVybiBnO3ZhciBvZT14fHx7fTtWfHwoVj17IiFpZCI6e319KTt2YXIgRGUsYnQsSmUsZnQsUnQsU3QsQXQsenQsU24sbHIsZGU9b2UuZGVuc2U/W106e30sUmU9e3M6e3I6MmU2LGM6MmU2fSxlOnty''@;'; put 'put ''OjAsYzowfX0sVmU9W10sR2U9ITEsZXQ9ITEsbW49W107b2UuYmlmZj0xMixvZVsiIXJvdyJdPTA7dmFyIGRyPTAsR249ITEsSG49W10saHI9e30sTm49b2Uuc3VwYm9va3N8fFcuc3VwYm9va3N8fFtbXV07aWYoTm4uc2hhcmVkZj1ocixObi5hcnJheWY9SG4sTm4uU2hlZXROYW1lcz1XLlNo''@;'; put 'put ''ZWV0TmFtZXN8fFcuU2hlZXRzLm1hcChmdW5jdGlvbihJaSl7cmV0dXJuIElpLm5hbWV9KSwhb2Uuc3VwYm9va3MmJihvZS5zdXBib29rcz1ObixXLk5hbWVzKSlmb3IodmFyIHRyPTA7dHI8Vy5OYW1lcy5sZW5ndGg7Kyt0cilOblswXVt0cisxXT1XLk5hbWVzW3RyXTt2YXIgdmk9W10sUGk9''@;'; put 'put ''W10scWk9ITE7aWYoWXBbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6Tkx9LEJvKGcsZnVuY3Rpb24oU3IsRm4sTHIpe2lmKCFldClzd2l0Y2goTHIpe2Nhc2UgMTQ4OkRlPVNyO2JyZWFrO2Nhc2UgMDpidD1TcixvZS5zaGVldFJvd3MmJm9lLnNoZWV0Um93czw9YnQuciYmKGV0PSEwKSxTbj16''@;'; put 'put ''bihSdD1idC5yKSxvZVsiIXJvdyJdPWJ0LnIsKFNyLmhpZGRlbnx8U3IuaHB0fHxudWxsIT1Tci5sZXZlbCkmJihTci5ocHQmJihTci5ocHg9bGgoU3IuaHB0KSksUGlbU3Iucl09U3IpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNl''@;'; put 'put ''IDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OnN3aXRjaChKZT17dDpTclsyXX0sU3JbMl0pe2Nhc2UibiI6SmUudj1TclsxXTticmVhaztjYXNlInMiOkplLnY9KHp0PXE3W1NyWzFdXSkudCxvZS5jZWxsU3R5bGVzJiYo''@;'; put 'put ''SmUuUj1mdW5jdGlvbiBUb2UoZyx4KXtpZihnLlIpcmV0dXJuIGcuUjtpZih4JiZ4LkZvbnRzJiYoMSE9Zy5yLmxlbmd0aHx8MCE9Zy5yWzBdLmljaCkpe2cuUj1bXTt2YXIgdz0wLFY9Zy5yW3ddLFc9Zy5yW3crMV07Zm9yKFYuaWNoPjAmJmcuUi5wdXNoKHt0OiJzIix2OmcudC5zbGljZSgw''@;'; put 'put ''LFYuaWNoKX0pO3c8Zy5yLmxlbmd0aC0xOysrdylnLlIucHVzaCh7dDoicyIsdjpnLnQuc2xpY2UoKFY9Zy5yW3ddKS5pY2gsKFc9Zy5yW3crMV0pLmljaCksczp4LkZvbnRzW1YuaWZudF19KTtyZXR1cm4gZy5SLnB1c2goe3Q6InMiLHY6Zy50LnNsaWNlKChXfHxWKS5pY2gpLHM6eC5Gb250''@;'; put 'put ''c1soV3x8VikuaWZudF19KSxnLlJ9fSh6dCxsZSkpO2JyZWFrO2Nhc2UiYiI6SmUudj0hIVNyWzFdO2JyZWFrO2Nhc2UiZSI6SmUudj1TclsxXSwhMSE9PW9lLmNlbGxUZXh0JiYoSmUudz1WMFtKZS52XSk7YnJlYWs7Y2FzZSJzdHIiOkplLnQ9InMiLEplLnY9U3JbMV19aWYoKGZ0PWxlLkNl''@;'; put 'put ''bGxYZltTclswXS5pU3R5bGVSZWZdKSYmem0oSmUsZnQubnVtRm10SWQsZnQuZmlsbElkLGZ0LmZvbnRJZCxmdC5ib3JkZXJJZCxvZSwwLGxlKSxvZS5jZWxsU3R5bGVzJiZKZS5zJiZmdC5hbGlnbm1lbnQmJihKZS5zLmFsaWdubWVudD1ybihmdC5hbGlnbm1lbnQpKSxTdD0tMT09U3JbMF0u''@;'; put 'put ''Yz9TdCsxOlNyWzBdLmMsb2UuZGVuc2U/KGRlW1J0XXx8KGRlW1J0XT1bXSksZGVbUnRdW1N0XT1KZSk6ZGVbUGEoU3QpK1NuXT1KZSxvZS5jZWxsRm9ybXVsYSl7Zm9yKEduPSExLGRyPTA7ZHI8SG4ubGVuZ3RoOysrZHIpe3ZhciBwcj1Ibltkcl07YnQucj49cHJbMF0ucy5yJiZidC5yPD1w''@;'; put 'put ''clswXS5lLnImJlN0Pj1wclswXS5zLmMmJlN0PD1wclswXS5lLmMmJihKZS5GPUppKHByWzBdKSxHbj0hMCl9IUduJiZTci5sZW5ndGg+MyYmKEplLmY9U3JbM10pfWlmKFJlLnMucj5idC5yJiYoUmUucy5yPWJ0LnIpLFJlLnMuYz5TdCYmKFJlLnMuYz1TdCksUmUuZS5yPGJ0LnImJihSZS5l''@;'; put 'put ''LnI9YnQuciksUmUuZS5jPFN0JiYoUmUuZS5jPVN0KSxvZS5jZWxsRGF0ZXMmJmZ0JiYibiI9PUplLnQmJmIuaXNfZGF0ZShiLl90YWJsZVtmdC5udW1GbXRJZF0pKXt2YXIgTG49Yi5wYXJzZV9kYXRlX2NvZGUoSmUudik7TG4mJihKZS50PSJkIixKZS52PW5ldyBEYXRlKExuLnksTG4ubS0x''@;'; put 'put ''LExuLmQsTG4uSCxMbi5NLExuLlMsTG4udSkpfWJyZWFrO2Nhc2UgMTpjYXNlIDEyOmlmKCFvZS5zaGVldFN0dWJzfHxHZSlicmVhaztKZT17dDoieiIsdjp2b2lkIDB9LFN0PS0xPT1TclswXS5jP1N0KzE6U3JbMF0uYywoZnQ9bGUuQ2VsbFhmW1NyWzBdLmlTdHlsZVJlZl0pJiZ6bShKZSxm''@;'; put 'put ''dC5udW1GbXRJZCxmdC5maWxsSWQsZnQuZm9udElkLGZ0LmJvcmRlcklkLG9lLDAsbGUpLG9lLmNlbGxTdHlsZXMmJkplLnMmJmZ0LmFsaWdubWVudCYmKEplLnMuYWxpZ25tZW50PXJuKGZ0LmFsaWdubWVudCkpLG9lLmRlbnNlPyhkZVtSdF18fChkZVtSdF09W10pLGRlW1J0XVtTdF09SmUp''@;'; put 'put ''OmRlW1BhKFN0KStTbl09SmUsUmUucy5yPmJ0LnImJihSZS5zLnI9YnQuciksUmUucy5jPlN0JiYoUmUucy5jPVN0KSxSZS5lLnI8YnQuciYmKFJlLmUucj1idC5yKSxSZS5lLmM8U3QmJihSZS5lLmM9U3QpO2JyZWFrO2Nhc2UgMTc2Om1uLnB1c2goU3IpO2JyZWFrO2Nhc2UgNDk0OnZhciBQ''@;'; put 'put ''cj1WWyIhaWQiXVtTci5yZWxJZF07Zm9yKFByPyhTci5UYXJnZXQ9UHIuVGFyZ2V0LFNyLmxvYyYmKFNyLlRhcmdldCs9IiMiK1NyLmxvYyksU3IuUmVsPVByKToiIj09U3IucmVsSWQmJihTci5UYXJnZXQ9IiMiK1NyLmxvYyksUnQ9U3IucmZ4LnMucjtSdDw9U3IucmZ4LmUucjsrK1J0KWZv''@;'; put 'put ''cihTdD1Tci5yZngucy5jO1N0PD1Tci5yZnguZS5jOysrU3Qpb2UuZGVuc2U/KGRlW1J0XXx8KGRlW1J0XT1bXSksZGVbUnRdW1N0XXx8KGRlW1J0XVtTdF09e3Q6InoiLHY6dm9pZCAwfSksZGVbUnRdW1N0XS5sPVNyKTooQXQ9S3Ioe2M6U3QscjpSdH0pLGRlW0F0XXx8KGRlW0F0XT17dDoi''@;'; put 'put ''eiIsdjp2b2lkIDB9KSxkZVtBdF0ubD1Tcik7YnJlYWs7Y2FzZSA0MjY6aWYoIW9lLmNlbGxGb3JtdWxhKWJyZWFrO0huLnB1c2goU3IpLChscj1vZS5kZW5zZT9kZVtSdF1bU3RdOmRlW1BhKFN0KStTbl0pLmY9SnUoU3JbMV0sUmUse3I6YnQucixjOlN0fSxObixvZSksbHIuRj1KaShTclsw''@;'; put 'put ''XSk7YnJlYWs7Y2FzZSA0Mjc6aWYoIW9lLmNlbGxGb3JtdWxhKWJyZWFrO2hyW0tyKFNyWzBdLnMpXT1TclsxXSwobHI9b2UuZGVuc2U/ZGVbUnRdW1N0XTpkZVtQYShTdCkrU25dKS5mPUp1KFNyWzFdLFJlLHtyOmJ0LnIsYzpTdH0sTm4sb2UpO2JyZWFrO2Nhc2UgNjA6aWYoIW9lLmNlbGxT''@;'; put 'put ''dHlsZXMpYnJlYWs7Zm9yKDtTci5lPj1Tci5zOyl2aVtTci5lLS1dPXt3aWR0aDpTci53LzI1NixoaWRkZW46ISEoMSZTci5mbGFncyksbGV2ZWw6U3IubGV2ZWx9LHFpfHwocWk9ITApLG0xKHZpW1NyLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOmRlWyIhYXV0b2ZpbHRlciJdPXtyZWY6SmkoU3Ip''@;'; put 'put ''fTticmVhaztjYXNlIDQ3NjpkZVsiIW1hcmdpbnMiXT1TcjticmVhaztjYXNlIDE0NzpXLlNoZWV0c1t3XXx8KFcuU2hlZXRzW3ddPXt9KSxTci5uYW1lJiYoVy5TaGVldHNbd10uQ29kZU5hbWU9U3IubmFtZSksKFNyLmFib3ZlfHxTci5sZWZ0KSYmKGRlWyIhb3V0bGluZSJdPXthYm92ZTpT''@;'; put 'put ''ci5hYm92ZSxsZWZ0OlNyLmxlZnR9KTticmVhaztjYXNlIDEzNzpXLlZpZXdzfHwoVy5WaWV3cz1be31dKSxXLlZpZXdzWzBdfHwoVy5WaWV3c1swXT17fSksU3IuUlRMJiYoVy5WaWV3c1swXS5SVEw9ITApLFNyLmdyaWR8fChXLlZpZXdzWzBdLmdyaWQ9ITEsZGVbIiFncmlkbGluZXMiXT0h''@;'; put 'put ''MSk7YnJlYWs7Y2FzZSA0ODU6ZGVbIiFzaGVldEZvcm1hdCJdPVNyO2JyZWFrO2Nhc2UgNjQ6Y2FzZSAxMDUzOiFmdW5jdGlvbiBkWihnLHgsdyxWKXtpZih4KXt2YXIgVz17cmVmOnguc3FyZngsdDp4LnR9O3gub3AmJihXLm9wPXgub3ApO3ZhciBlZT0iIixsZT0iIixvZT14LnNxcmZ4PyJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgeC5zcXJmeD9TYSh4LnNxcmZ4LnNwbGl0KCIsIilbMF0pOnguc3FyZng6bnVsbDtpZih4LmYxJiYoZWU9SnUoeC5mMSxvZSxudWxsLHcsViwhMCkpLHguZjImJihsZT1KdSh4LmYyLG9lLG51bGwsdyxWLCEwKSkseC5vcCYmWyJJTiIsIk9UIl0uaW5kZXhPZih4Lm9w''@;'; put 'put ''KT49LTEpVy5taW49ZWUsVy5tYXg9bGU7ZWxzZSBpZih4Lm9wKVcudj1lZTtlbHNlIHRyeXtzd2l0Y2goeC50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09eC5mMVswXVswXVswXSYmMT09eC5mMVswXS5sZW5ndGgpe1cubD14LmYxWzBdWzBdWzFdLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJD''@;'; put 'put ''dXN0b20iOlcuZj1lZX19Y2F0Y2h7fWdbIiF2YWxpZGF0aW9ucyJdfHwoZ1siIXZhbGlkYXRpb25zIl09W10pLGdbIiF2YWxpZGF0aW9ucyJdLnB1c2goVyl9fShkZSxTcixObixvZSk7YnJlYWs7Y2FzZSAxNTE6ZGVbIiFmcmVlemUiXT1TclswXTticmVhaztjYXNlIDE1MjpkZVsiIXNlbCJd''@;'; put 'put ''PVNyO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2''@;'; put 'put ''ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUz''@;'; put 'put ''NjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztjYXNlIDM1OkdlPSEwO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMzY6R2U9ITE7YnJlYWs7Y2FzZSAzNzpWZS5wdXNoKEZuKSxHZT0hMDticmVhaztjYXNlIDM4OlZlLnBvcCgpLEdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoRm58fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChGbnx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIUdlfHxv''@;'; put 'put ''ZS5XVEYmJiJCcnRBQ0JlZ2luIiE9VmVbVmUubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTHIrIiAiK0ZuKX19LG9lKSxkZWxldGUgb2Uuc3VwYm9va3MsZGVsZXRlIG9lWyIhcm93Il0sIWRlWyIhcmVmIl0mJihSZS5zLnI8MmU2fHxEZSYmKERlLmUu''@;'; put 'put ''cj4wfHxEZS5lLmM+MHx8RGUucy5yPjB8fERlLnMuYz4wKSkmJihkZVsiIXJlZiJdPUppKERlfHxSZSkpLG9lLnNoZWV0Um93cyYmZGVbIiFyZWYiXSl7dmFyIHRhPVNhKGRlWyIhcmVmIl0pO29lLnNoZWV0Um93czw9K3RhLmUuciYmKHRhLmUucj1vZS5zaGVldFJvd3MtMSx0YS5lLnI+UmUu''@;'; put 'put ''ZS5yJiYodGEuZS5yPVJlLmUuciksdGEuZS5yPHRhLnMuciYmKHRhLnMucj10YS5lLnIpLHRhLmUuYz5SZS5lLmMmJih0YS5lLmM9UmUuZS5jKSx0YS5lLmM8dGEucy5jJiYodGEucy5jPXRhLmUuYyksZGVbIiFmdWxscmVmIl09ZGVbIiFyZWYiXSxkZVsiIXJlZiJdPUppKHRhKSl9cmV0dXJu''@;'; put 'put ''IG1uLmxlbmd0aD4wJiYoZGVbIiFtZXJnZXMiXT1tbiksdmkubGVuZ3RoPjAmJihkZVsiIWNvbHMiXT12aSksUGkubGVuZ3RoPjAmJihkZVsiIXJvd3MiXT1QaSksZGV9KGcsVix3LFcsZWUsMCxvZSk6ZnVuY3Rpb24gY2IoZyx4LHcsVixXLGVlLGxlKXtpZighZylyZXR1cm4gZztWfHwoVj17''@;'; put 'put ''IiFpZCI6e319KTt2YXIgb2U9eC5kZW5zZT9bXTp7fSxkZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxEZT0iIixSZT0iIixWZT1nLm1hdGNoKGdXKTtWZT8oRGU9Zy5zbGljZSgwLFZlLmluZGV4KSxSZT1nLnNsaWNlKFZlLmluZGV4K1ZlWzBdLmxlbmd0aCkpOkRlPVJlPWc7dmFy''@;'; put 'put ''IEdlPVJlLmxhc3RJbmRleE9mKCJleHRMc3QiKSxidD0oLTE9PUdlfHxSZS5zbGljZShHZSksRGUubWF0Y2godlcpKTtidD91YihidFswXSwwLFcsdyk6KGJ0PURlLm1hdGNoKEpvZSkpJiZmdW5jdGlvbiBTVyhnLHgsdyxWLFcsZWUsbGUpe3ViKGcuc2xpY2UoMCxnLmluZGV4T2YoIj4iKSks''@;'; put 'put ''MCxWLFcpO3ZhciBvZT14Lm1hdGNoKGJXKTtpZihvZSl7dmFyIERlPWxSKGZyKG9lWzBdKSxlZSxsZSk7d1siIXRhYmNvbG9yIl09RGV9aWYoKG9lPXgubWF0Y2god1cpKSYmZnIob2VbMF0pLmZpdFRvUGFnZSYmKHdbIiFwcmludCJdfHwod1siIXByaW50Il09e30pLHdbIiFwcmludCJdLnBy''@;'; put 'put ''b3BzfHwod1siIXByaW50Il0ucHJvcHM9e30pLHdbIiFwcmludCJdLnByb3BzLmZpdHx8KHdbIiFwcmludCJdLnByb3BzLmZpdD17fSksbnVsbD09d1siIXByaW50Il0ucHJvcHMuZml0LmhlaWdodCYmKHdbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09d1siIXByaW50Il0u''@;'; put 'put ''cHJvcHMuZml0LndpZHRoJiYod1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoPTEpKSxvZT14Lm1hdGNoKENXKSl7d1siIW91dGxpbmUiXT17fTt2YXIgVmU9ZnIob2VbMF0pO1ZlLnN1bW1hcnlCZWxvdyYmKHdbIiFvdXRsaW5lIl0uYWJvdmU9IUlyKFZlLnN1bW1hcnlCZWxvdykpLFZlLnN1''@;'; put 'put ''bW1hcnlSaWdodCYmKHdbIiFvdXRsaW5lIl0ubGVmdD0hSXIoVmUuc3VtbWFyeVJpZ2h0KSl9fShidFswXSxidFsxXXx8IiIsb2UsVyx3LGxlLGVlKTt2YXIgSmU9KERlLm1hdGNoKC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKEplPjApe3ZhciBmdD1EZS5z''@;'; put 'put ''bGljZShKZSxKZSs1MCkubWF0Y2goJG9lKTtmdCYmKCF4fHwheC5ub2RpbSkmJmZ1bmN0aW9uIGhoKGcseCl7dmFyIHc9U2EoeCk7dy5zLnI8PXcuZS5yJiZ3LnMuYzw9dy5lLmMmJncucy5yPj0wJiZ3LnMuYz49MCYmKGdbIiFyZWYiXT1KaSh3KSl9KG9lLGZ0WzFdKX12YXIgUnQ9RGUubWF0''@;'; put 'put ''Y2goeVcpO1J0JiZSdFsxXSYmZnVuY3Rpb24gSFcoZyx4LHcsVil7dy5WaWV3c3x8KHcuVmlld3M9W3t9XSk7dmFyIFc9MDtnLnJlcGxhY2UoRlcsZnVuY3Rpb24oZWUsbGUpe3ZhciBvZT1mcihlZSk7aWYody5WaWV3c1tWXXx8KHcuVmlld3NbVl09e30pLElyKG9lLnJpZ2h0VG9MZWZ0KSYm''@;'; put 'put ''KHcuVmlld3NbVl0uUlRMPSEwKSxvZS5zaG93R3JpZExpbmVzJiYody5WaWV3c1tWXS5ncmlkPUlyKG9lLnNob3dHcmlkTGluZXMpLG51bGw9PXhbIiFncmlkbGluZXMiXSYmKHhbIiFncmlkbGluZXMiXT1JcihvZS5zaG93R3JpZExpbmVzKSkpLCtvZS56b29tU2NhbGUmJih3LlZpZXdzW1Zd''@;'; put 'put ''Lnpvb209K29lLnpvb21TY2FsZSksb2UudmlldyYmKHcuVmlld3NbVl0udmlldz1vZS52aWV3KSwxPT0rK1cmJiIvPiIhPWVlLnNsaWNlKC0yKSl7dmFyIGRlPWcuc2xpY2UobGUrZWUubGVuZ3RoKSxEZT1kZS5tYXRjaCgvPFwvKD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wv''@;'; put 'put ''Pz4vKTtpZighRGUpcmV0dXJuIiI7dmFyIFJlPShkZT1kZS5zbGljZSgwLERlLmluZGV4KSkubWF0Y2goLzwoPzpcdzopP3BhbmUoPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZihSZSl7dmFyIFZlPWZyKFJlWzBdKTsiZnJvemVuIj09VmUuc3RhdGU/eFsiIWZyZWV6ZSJdPVBhKCtWZS54U3Bs''@;'; put 'put ''aXR8fDApK3puKCtWZS55U3BsaXR8fDApOlZlLnRvcExlZnRDZWxsJiYoeFsiIWZyZWV6ZSJdPVZlLnRvcExlZnRDZWxsKX12YXIgR2U9ZGUubWF0Y2goLzwoPzpcdzopP3NlbGVjdGlvbig/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKEdlKXt2YXIgZXQ9ZnIoR2VbMF0pO2lmKGV0LmFjdGl2''@;'; put 'put ''ZUNlbGwmJih4WyIhc2VsIl09e2NlbGw6ZXQuYWN0aXZlQ2VsbH0pLGV0LnNxcmVmKXt2YXIgYnQ9ZXQuc3FyZWYucmVwbGFjZSgvXHMuKiQvLCIiKTt4WyIhc2VsIl18fCh4WyIhc2VsIl09e2NlbGw6S3Iod3IoYnQpLnMpfSkseFsiIXNlbCJdLnJhbmdlPWV0LnNxcmVmfX19cmV0dXJuIiJ9''@;'; put 'put ''KX0oUnRbMV0sb2UsVyx3KTt2YXIgU3Q9RGUubWF0Y2godkwpLEF0PVtdO2lmKHguY2VsbFN0eWxlcyl7dmFyIHp0PURlLm1hdGNoKEtvZSk7enQmJmZ1bmN0aW9uIGlzZShnLHgsdyl7Zm9yKHZhciBWPSExLFc9MDtXIT14Lmxlbmd0aDsrK1cpe3ZhciBlZT1mcih4W1ddLCEwKTtlZS5oaWRk''@;'; put 'put ''ZW4mJihlZS5oaWRkZW49SXIoZWUuaGlkZGVuKSk7dmFyIGxlPXBhcnNlSW50KGVlLm1pbiwxMCktMSxvZT1wYXJzZUludChlZS5tYXgsMTApLTE7Zm9yKGVlLm91dGxpbmVMZXZlbCYmKGVlLmxldmVsPStlZS5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBlZS5taW4sZGVsZXRlIGVlLm1heCxl''@;'; put 'put ''ZS53aWR0aD0rZWUud2lkdGgsIVYmJmVlLndpZHRoJiYoVj0hMCksbTEoZWUpLGVlLnN0eWxlJiYoZWUucz0kbShlZS5zdHlsZSx3KSk7bGU8PW9lOylnW2xlKytdPXJuKGVlKX19KEF0LHp0LGxlKX1pZihWZSYmRngoVmVbMV0sdyxvZSx4LGRlLGVlLGxlKSx4LmNhbGxiYWNrKXJldHVybiBv''@;'; put 'put ''ZTt2YXIgU249UmUubWF0Y2gocW9lKTtTbiYmKG9lWyIhcHJvdGVjdCJdPWZ1bmN0aW9uIHhMKGcpe3ZhciB4PWZyKGcsITAsITApLHc9e307aWYoSXIoeC5zaGVldCkpcmV0dXJuIG45LmZvckVhY2goZnVuY3Rpb24oVil7d1tWXT1udWxsIT14W1ZdJiZJcih4W1ZdKX0pLG8yLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oVil7d1tWXT1udWxsPT14W1ZdfHxJcih4W1ZdKX0pLHguYWxnb3JpdGhtTmFtZSYmKHcuZW5jcnlwdGlvbj17YWxnbzp4LmFsZ29yaXRobU5hbWUsaGFzaDp4Lmhhc2hWYWx1ZSxzYWx0Onguc2FsdFZhbHVlLHNwaW46K3guc3BpbkNvdW50fHwxZTV9KSx3fShTblswXSkpO3Zh''@;'; put 'put ''ciBscj1SZS5tYXRjaChYb2UpO2xyJiYob2VbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gUngoZyl7cmV0dXJue3JlZjooZy5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShsclswXSkpO3ZhciBtbj1bXSxkcj1SZS5tYXRjaChwVyk7aWYoZHIpZm9yKEplPTA7SmUhPWRyLmxlbmd0''@;'; put 'put ''aDsrK0plKW1uW0plXT1TYShkcltKZV0uc2xpY2UoZHJbSmVdLmluZGV4T2YoJyInKSsxKSk7dmFyIEduPSgtMT09R2U/UmU6UmUuc2xpY2UoMCxHZSkpLm1hdGNoKHQ5KTtHbiYmKG9lWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSxHbi5tYXAoZnVuY3Rpb24oRm4pe3JldHVybiBm''@;'; put 'put ''YihGbix4LGVlLGxlKX0pKSksR2U+LTEmJihHbj1SZS5zbGljZShHZSkubWF0Y2godDkpKSYmKG9lWyIhY29uZGZtdCJdfHwob2VbIiFjb25kZm10Il09W10pLG9lWyIhY29uZGZtdCJdPW9lWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseShvZVsiIWNvbmRmbXQiXSxHbi5tYXAoZnVuY3Rpb24o''@;'; put 'put ''Rm4pe3JldHVybiBmYihGbix4LGVlLGxlLCEwKX0pKSk7dmFyIEhuPSgtMT09R2U/UmU6UmUuc2xpY2UoMCxHZSkpLm1hdGNoKGU5KTtIbiYmKG9lWyIhdmFsaWRhdGlvbnMiXT1BTChIblswXSx4KSksR2U+LTEmJihIbj1SZS5zbGljZShHZSkubWF0Y2goZTkpKSYmKG9lWyIhdmFsaWRhdGlv''@;'; put 'put ''bnMiXXx8KG9lWyIhdmFsaWRhdGlvbnMiXT1bXSksb2VbIiF2YWxpZGF0aW9ucyJdPW9lWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQoQUwoSG5bMF0seCwhMCkpKTt2YXIgaHI9UmUubWF0Y2goVHgpO2hyJiZmdW5jdGlvbiBFTChnLHgsdyl7Zm9yKHZhciBWPUFycmF5LmlzQXJyYXkoZyksVz0w''@;'; put 'put ''O1chPXgubGVuZ3RoOysrVyl7dmFyIGVlPWZyKGJvKHhbV10pLCEwKTtpZighZWUucmVmKXJldHVybjt2YXIgbGU9KCh3fHx7fSlbIiFpZCJdfHxbXSlbZWUuaWRdO2xlPyhlZS5UYXJnZXQ9bGUuVGFyZ2V0LGVlLmxvY2F0aW9uJiYoZWUuVGFyZ2V0Kz0iIyIrcXIoZWUubG9jYXRpb24pKSk6''@;'; put 'put ''KGVlLlRhcmdldD0iIyIrcXIoZWUubG9jYXRpb24pLGxlPXtUYXJnZXQ6ZWUuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGVlLlJlbD1sZSxlZS50b29sdGlwJiYoZWUuVG9vbHRpcD1lZS50b29sdGlwLGRlbGV0ZSBlZS50b29sdGlwKTtmb3IodmFyIG9lPVNhKGVlLnJlZiksZGU9''@;'; put 'put ''b2Uucy5yO2RlPD1vZS5lLnI7KytkZSlmb3IodmFyIERlPW9lLnMuYztEZTw9b2UuZS5jOysrRGUpe3ZhciBSZT1Lcih7YzpEZSxyOmRlfSk7Vj8oZ1tkZV18fChnW2RlXT1bXSksZ1tkZV1bRGVdfHwoZ1tkZV1bRGVdPXt0OiJ6Iix2OnZvaWQgMH0pLGdbZGVdW0RlXS5sPWVlKTooZ1tSZV18''@;'; put 'put ''fChnW1JlXT17dDoieiIsdjp2b2lkIDB9KSxnW1JlXS5sPWVlKX19fShvZSxocixWKTt2YXIgTm49UmUubWF0Y2goX1cpO05uJiZmdW5jdGlvbiB0c2UoZyx4KXt2YXIgdz1mcihnLCExLCEwKTt4WyIhcHJpbnQiXXx8KHhbIiFwcmludCJdPXt9KSx4WyIhcHJpbnQiXS5wcm9wc3x8KHhbIiFw''@;'; put 'put ''cmludCJdLnByb3BzPXt9KTt2YXIgVj14WyIhcHJpbnQiXS5wcm9wczt3LmdyaWRMaW5lcyYmKFYuZ3JpZGxpbmVzPUlyKHcuZ3JpZExpbmVzKSksbnVsbCE9dy5ob3Jpem9udGFsQ2VudGVyZWQmJihWLmNlbnRlclg9SXIody5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT13LnZlcnRpY2Fs''@;'; put 'put ''Q2VudGVyZWQmJihWLmNlbnRlclk9SXIody52ZXJ0aWNhbENlbnRlcmVkKSl9KE5uWzBdLG9lKTt2YXIgdHI9UmUubWF0Y2gobVcpO3RyJiYoKG9lWyIhcHJpbnQiXXx8KG9lWyIhcHJpbnQiXT17fSkpLm1hcmdpbnM9b2VbIiFtYXJnaW5zIl09SXgoZnIodHJbMF0pKSk7dmFyIHZpPVJlLm1h''@;'; put 'put ''dGNoKF9MKTt2aSYmZnVuY3Rpb24gUW9lKGcseCl7dmFyIHc9ZnIoZywhMSwhMCk7ZGVsZXRlIHcuaWQsZGVsZXRlIHdbMF0seFsiIXByaW50Il18fCh4WyIhcHJpbnQiXT17fSkseFsiIXByaW50Il0ucHJvcHN8fCh4WyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIFY9eFsiIXByaW50Il0ucHJv''@;'; put 'put ''cHM7dy5vcmllbnRhdGlvbiYmKFYub3JpZW50YXRpb249dy5vcmllbnRhdGlvbiksdy5zY2FsZSYmKFYuc2NhbGU9K3cuc2NhbGUpLCt3LmZpdFRvSGVpZ2h0Pj0wJiYoKFYuZml0fHwoVi5maXQ9e30pKS5oZWlnaHQ9K3cuZml0VG9IZWlnaHQpLCt3LmZpdFRvV2lkdGg+PTAmJigoVi5maXR8''@;'; put 'put ''fChWLmZpdD17fSkpLndpZHRoPSt3LmZpdFRvV2lkdGgpLHcucGFwZXJIZWlnaHQmJncucGFwZXJXaWR0aD9WLnBhcGVyPXt3aWR0aDp3LnBhcGVyV2lkdGgsaGVpZ2h0OncucGFwZXJIZWlnaHR9OncucGFwZXJTaXplJiYoVi5wYXBlcj1EUltWLnBhcGVyPSt3LnBhcGVyU2l6ZV18fFYucGFw''@;'; put 'put ''ZXIpLHcuaG9yaXpvbnRhbERwaT9WLmRwaT0rdy5ob3Jpem9udGFsRHBpOncudmVydGljYWxEcGkmJihWLmRwaT0rdy52ZXJ0aWNhbERwaSksImF1dG9tYXRpYyIhPSh3LmZpcnN0UGFnZU51bWJlcnx8ImF1dG9tYXRpYyIpJiYoVi5maXJzdD0rdy5maXJzdFBhZ2VOdW1iZXIpLElyKHcuYmxh''@;'; put 'put ''Y2tBbmRXaGl0ZSkmJihWLmJ3PSEwKSxJcih3LmRyYWZ0KSYmKFYuZHJhZnQ9ITApLCJvdmVyVGhlbkRvd24iPT13LnBhZ2VPcmRlciYmKFYub3JkZXI9Im92ZXIiKSxXbVt3LmNlbGxDb21tZW50c10mJihWLmNvbW1lbnRzPVdtW3cuY2VsbENvbW1lbnRzXSkseFdbdy5lcnJvcnNdJiYoVi5l''@;'; put 'put ''cnJvcnM9eFdbdy5lcnJvcnNdKX0odmlbMF0sb2UpO3ZhciBQaT1SZS5tYXRjaChVbSk7UGkmJmZ1bmN0aW9uIG9zZShnLHgpe2lmKHhbIiFwcmludCJdfHwoeFsiIXByaW50Il09e30pLGdbMV0pe3ZhciB3PSIiLFY9MDtnWzFdLnJlcGxhY2UoR3QsZnVuY3Rpb24oVyxlZSl7aWYoIi8iIT1X''@;'; put 'put ''LmNoYXJBdCgxKSl3PVcuc2xpY2UoMSwtMSksVj1lZStXLmxlbmd0aDtlbHNlIGlmKHcpe3ZhciBsZT13Lm1hdGNoKC9IZWFkZXIvKT8iaGVhZGVyIjoiZm9vdGVyIixvZT13LnJlcGxhY2UoL0hlYWRlcnxGb290ZXIvLCIiKTt3PSIiLHhbIiFwcmludCJdW2xlXXx8KHhbIiFwcmludCJdW2xl''@;'; put 'put ''XT17fSkseFsiIXByaW50Il1bbGVdW29lXT1xcihibyhnWzFdLnNsaWNlKFYsZWUpKSl9fSl9fShQaSxvZSk7dmFyIHFpPVJlLm1hdGNoKGxiKTtxaSYmKChvZVsiIXByaW50Il18fChvZVsiIXByaW50Il09e30pKS5yb3dCcmVha3M9b2VbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiBFVyhnKXt2''@;'; put 'put ''YXIgeD1bXTtyZXR1cm4oZy5tYXRjaChEeCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3ZhciBWPWZyKHcpO3gucHVzaCh7UjorVi5pZH0pfSkseH0ocWlbMF0pKTt2YXIgdGE9UmUubWF0Y2goYkwpO3RhJiYoKG9lWyIhcHJpbnQiXXx8KG9lWyIhcHJpbnQiXT17fSkpLmNvbEJyZWFrcz1v''@;'; put 'put ''ZVsiIWNvbEJyZWFrcyJdPWZ1bmN0aW9uIEFXKGcpe3ZhciB4PVtdO3JldHVybihnLm1hdGNoKER4KXx8W10pLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIFY9ZnIodyk7eC5wdXNoKHtDOitWLmlkfSl9KSx4fSh0YVswXSkpO3ZhciBJaT1bXTtpZigoSWk9UmUubWF0Y2goL2RyYXdpbmcgcjpp''@;'; put 'put ''ZD0iKC4qPykiLykpJiYob2VbIiFyZWwiXT1JaVsxXSksKElpPVJlLm1hdGNoKC9sZWdhY3lEcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKG9lWyIhbGVncmVsIl09SWlbMV0pLChJaT1SZS5tYXRjaChBeCkpJiYob2VbIiFjdHJsaWQiXT1JaS5tYXAoZnVuY3Rpb24oRm4pe3JldHVybiBmcihG''@;'; put 'put ''bil9KSksKElpPVJlLm1hdGNoKHlMKSkmJmZ1bmN0aW9uIENMKGcseCl7Z1siIXRhYmxlcmVmcyJdfHwoZ1siIXRhYmxlcmVmcyJdPVtdKSwoeC5tYXRjaCh3TCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHcpe2dbIiF0YWJsZXJlZnMiXS5wdXNoKGZyKHcpLmlkKX0pfShvZSxJaVsxXSkseCYm''@;'; put 'put ''eC5ub2RpbSYmKGRlLnMuYz1kZS5zLnI9MCksIW9lWyIhcmVmIl0mJmRlLmUuYz49ZGUucy5jJiZkZS5lLnI+PWRlLnMuciYmKG9lWyIhcmVmIl09SmkoZGUpKSx4LnNoZWV0Um93cz4wJiZvZVsiIXJlZiJdKXt2YXIgU3I9U2Eob2VbIiFyZWYiXSk7eC5zaGVldFJvd3M8PStTci5lLnImJihT''@;'; put 'put ''ci5lLnI9eC5zaGVldFJvd3MtMSxTci5lLnI+ZGUuZS5yJiYoU3IuZS5yPWRlLmUuciksU3IuZS5yPFNyLnMuciYmKFNyLnMucj1Tci5lLnIpLFNyLmUuYz5kZS5lLmMmJihTci5lLmM9ZGUuZS5jKSxTci5lLmM8U3Iucy5jJiYoU3Iucy5jPVNyLmUuYyksb2VbIiFmdWxscmVmIl09b2VbIiFy''@;'; put 'put ''ZWYiXSxvZVsiIXJlZiJdPUppKFNyKSl9cmV0dXJuIFN0JiYob2VbIiFzaGVldEZvcm1hdCJdPWZ1bmN0aW9uIGt4KGcpe3ZhciB4PXt9LHc9e30sVj0hMSxXPXt9LGVlPSExO3JldHVybiBnLmRlZmF1bHRSb3dIZWlnaHQmJihWPSEwLHcuaHB0PXBhcnNlRmxvYXQoZy5kZWZhdWx0Um93SGVp''@;'; put 'put ''Z2h0KSksZy56ZXJvSGVpZ2h0JiYoVj0hMCx3LmhpZGRlbj1JcihnLnplcm9IZWlnaHQpKSxnLmJhc2VDb2xXaWR0aD8oZWU9ITAsVy53Y2g9cGFyc2VGbG9hdChnLmJhc2VDb2xXaWR0aCkpOmcuZGVmYXVsdENvbFdpZHRoJiYoZWU9ITAsVy53Y2g9cGFyc2VGbG9hdChnLmRlZmF1bHRDb2xX''@;'; put 'put ''aWR0aCktNS94bCksZy5vdXRsaW5lTGV2ZWxDb2wmJih4LmNvbG91dGxpbmU9cGFyc2VJbnQoZy5vdXRsaW5lTGV2ZWxDb2wpKSxnLm91dGxpbmVMZXZlbFJvdyYmKHgucm93b3V0bGluZT1wYXJzZUludChnLm91dGxpbmVMZXZlbFJvdykpLGcudGhpY2tCb3R0b20mJih4LmJvdHRoaWNrPUly''@;'; put 'put ''KGcudGhpY2tCb3R0b20pKSxnLnRoaWNrVG9wJiYoeC50b3B0aGljaz1JcihnLnRoaWNrVG9wKSksZy5keURlc2NlbnQmJih4LmR5RGVzY2VudD1wYXJzZUZsb2F0KGcuZHlEZXNjZW50KSksViYmKFQ3KHcpLHgucm93PXcpLGVlJiYobTEoVykseC5jb2w9VykseH0oZnIoU3RbMF0pKSksQXQu''@;'; put 'put ''bGVuZ3RoPjAmJihvZVsiIWNvbHMiXT1BdCksbW4ubGVuZ3RoPjAmJihvZVsiIW1lcmdlcyJdPW1uKSxWWyIhaWQiXVtvZVsiIXJlbCJdXSYmKG9lWyIhZHJhd2VsIl09VlsiIWlkIl1bb2VbIiFyZWwiXV0pLFZbIiFpZCJdW29lWyIhbGVncmVsIl1dJiYob2VbIiFsZWdkcmF3ZWwiXT1WWyIh''@;'; put 'put ''aWQiXVtvZVsiIWxlZ3JlbCJdXSksKG9lWyIhY3RybGlkIl18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEZuKXtGbi5yZWw9VlsiIWlkIl1bRm4uaWRdfSksbnVsbD09b2VbIiFncmlkbGluZXMiXSYmKG9lWyIhZ3JpZGxpbmVzIl09ITApLG9lfShnLFYsdyxXLGVlLGxlLG9lKX0oR2UseCxXLGRl''@;'; put 'put ''LGVlW1ZdLERlLFJlLFZlKTticmVhaztjYXNlImNoYXJ0IjpldD1mdW5jdGlvbiBTYihnLHgsdyxWLFcsZWUsbGUsb2Upe3JldHVybiIuYmluIj09PXguc2xpY2UoLTQpP2Z1bmN0aW9uICR4KGcseCx3LFYsVyl7aWYoIWcpcmV0dXJuIGc7Vnx8KFY9eyIhaWQiOnt9fSk7dmFyIGVlPXsiIXR5''@;'; put 'put ''cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxsZT1bXSxvZT0hMTtyZXR1cm4gQm8oZyxmdW5jdGlvbihEZSxSZSxWZSl7c3dpdGNoKFZlKXtjYXNlIDU1MDplZVsiIXJlbCJdPURlO2JyZWFrO2Nhc2UgNjUxOlcuU2hlZXRzW3ddfHwoVy5TaGVldHNbd109e30pLERlLm5h''@;'; put 'put ''bWUmJihXLlNoZWV0c1t3XS5Db2RlTmFtZT1EZS5uYW1lKTticmVhaztjYXNlIDU2MjpjYXNlIDY1MjpjYXNlIDY2OTpjYXNlIDY3OTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDQ3NjpjYXNlIDMwNzI6YnJlYWs7Y2FzZSAzNTpvZT0hMDticmVhaztjYXNlIDM2Om9lPSExO2JyZWFrO2Nhc2Ug''@;'; put 'put ''Mzc6bGUucHVzaChSZSk7YnJlYWs7Y2FzZSAzODpsZS5wb3AoKTticmVhaztkZWZhdWx0OmlmKChSZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MClsZS5wdXNoKFJlKTtlbHNlIGlmKChSZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApbGUucG9wKCk7ZWxzZSBpZighb2V8fHguV1RGKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitWZSsiICIrUmUpfX0seCksVlsiIWlkIl1bZWVbIiFyZWwiXV0mJihlZVsiIWRyYXdlbCJdPVZbIiFpZCJdW2VlWyIhcmVsIl1dKSxlZX0oZyxWLHcsVyxlZSk6ZnVuY3Rpb24gbXNlKGcseCx3LFYsVyl7aWYoIWcpcmV0dXJuIGc7Vnx8KFY9''@;'; put 'put ''eyIhaWQiOnt9fSk7dmFyIGxlLGVlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxvZT1nLm1hdGNoKHZXKTtvZSYmdWIob2VbMF0sMCxXLHcpO3ZhciBkZT1nLm1hdGNoKG1XKTtyZXR1cm4gZGUmJihlZVsiIW1hcmdpbnMiXT1JeChmcihkZVswXSkpKSwobGU9''@;'; put 'put ''Zy5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihlZVsiIXJlbCJdPWxlWzFdKSxWWyIhaWQiXVtlZVsiIXJlbCJdXSYmKGVlWyIhZHJhd2VsIl09VlsiIWlkIl1bZWVbIiFyZWwiXV0pLGVlfShnLDAsdyxXLGVlKX0oR2UseCxXLGRlLGVlW1ZdLERlKTticmVhaztjYXNlIm1hY3Jv''@;'; put 'put ''IjpldD1mdW5jdGlvbiBUWihnLHgpe3JldHVybiB4LnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCx4KTticmVhaztjYXNlImRpYWxvZyI6ZXQ9ZnVuY3Rpb24gbE8oZyx4KXtyZXR1cm4geC5zbGljZSgtNCkseyIhdHlwZSI6ImRpYWxvZyJ9fSgwLHgpO2JyZWFrO2RlZmF1bHQ6dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc2hlZXQgdHlwZSAiK29lKX1pZihkZS5jYWxsYmFjaylyZXR1cm47bGVbVl09ZXQsZnVuY3Rpb24gX0UoZyx4LHcsVixXLGVlLGxlLG9lKXtpZihnJiZnWyIhZHJhd2VsIl0pe3ZhciBkZT1sbihnWyIhZHJhd2VsIl0uVGFyZ2V0LFYpLERlPWF1''@;'; put 'put ''KGRlKSxSZT1mdW5jdGlvbiBWb2UoZyx4LHcsVixXKXt2YXIgZWU9e2NoYXJ0czpbXSxpbWFnZXM6W10sc2hhcGVzOltdfTtpZighZylyZXR1cm4gZWU7dmFyIGxlPVd8fHt9O3JldHVybihnLm1hdGNoKC88W148XSo/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hv''@;'; put 'put ''cikuKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPz4vZyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKG9lKXt2YXIgZGU9IiIsRGU9e3R5cGU6IiJ9LFJlPXt9LFZlPSEwLEdlPSExLGV0PSExLGJ0PSExLEplPXtzOnt9fSxmdD0tMSxSdD1bXSxTdD1bXSxB''@;'; put 'put ''dD17czp7YWxpZ25tZW50Ontob3Jpem9udGFsOiJjZW50ZXIiLHZlcnRpY2FsOiJjZW50ZXIifX19LHp0PSIiLFNuPS0xLG1uPXt9O29lLnJlcGxhY2UoR3QsZnVuY3Rpb24oZHIsR24pe1J0PW51bGw7dmFyIEhuPWZyKGRyKSxocj0kaShIblswXSkucmVwbGFjZSgvW1wvXT8+JC8sIiIpO3N3''@;'; put 'put ''aXRjaChocil7Y2FzZSI8Y2xpZW50RGF0YSI6YnJlYWs7Y2FzZSI8YWJzb2x1dGVBbmNob3IiOmNhc2UiPG9uZUNlbGxBbmNob3IiOmNhc2UiPHR3b0NlbGxBbmNob3IiOkRlLnR5cGU9JGkoSG5bMF0pLnJlcGxhY2UoL1s8Pl0vZywiIik7YnJlYWs7Y2FzZSI8L2Fic29sdXRlQW5jaG9yIjpj''@;'; put 'put ''YXNlIjwvb25lQ2VsbEFuY2hvciI6Y2FzZSI8L3R3b0NlbGxBbmNob3IiOmJyZWFrO2Nhc2UiPHBvcyI6RGUucG9zPXt4OitIbi54LHk6K0huLnl9O2JyZWFrO2Nhc2UiPGV4dCI6VmUmJihEZS5leHQ9e3g6K0huLmN4LHk6K0huLmN5fSk7YnJlYWs7Y2FzZSI8ZnJvbSI6Y2FzZSI8dG8iOlJl''@;'; put 'put ''PXt9O2JyZWFrO2Nhc2UiPC9mcm9tIjpWZSYmKERlLmZyb209UmUpO2JyZWFrO2Nhc2UiPC90byI6VmUmJihEZS50bz1SZSk7YnJlYWs7Y2FzZSI8Y29sIjpjYXNlIjxjb2xPZmYiOmNhc2UiPHJvdyI6Y2FzZSI8cm93T2ZmIjpmdD1Hbitkci5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbCI6UmUu''@;'; put 'put ''Yz0rb2Uuc2xpY2UoZnQsR24pO2JyZWFrO2Nhc2UiPC9jb2xPZmYiOlJlLmNPZmY9K29lLnNsaWNlKGZ0LEduKTticmVhaztjYXNlIjwvcm93IjpSZS5yPStvZS5zbGljZShmdCxHbik7YnJlYWs7Y2FzZSI8L3Jvd09mZiI6UmUuck9mZj0rb2Uuc2xpY2UoZnQsR24pO2JyZWFrO2Nhc2UiPHNw''@;'; put 'put ''IjpkZT0ic2hhcGUiLEF0LkFuY2hvcj1EZSxlZS5zaGFwZXMucHVzaChBdCksVmU9ITE7YnJlYWs7Y2FzZSI8L3NwIjpWZT0hMDticmVhaztjYXNlIjxncmFwaGljRnJhbWUiOmRlPSJncmFwaGljIixWZT0hMTticmVhaztjYXNlIjwvZ3JhcGhpY0ZyYW1lIjpWZT0hMDticmVhaztjYXNlIjxw''@;'; put 'put ''aWMiOmRlPSJwaWN0dXJlIixWZT0hMTticmVhaztjYXNlIjwvcGljIjpWZT0hMDticmVhaztjYXNlIjxncnBTcCI6ZGU9Imdyb3Vwc2hhcGUiLFZlPSExO2JyZWFrO2Nhc2UiPC9ncnBTcCI6VmU9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpYyI6Y2FzZSI8L2dyYXBoaWMiOmNhc2UiPHhmcm0iOmNh''@;'; put 'put ''c2UiPC94ZnJtIjpjYXNlIjxvZmYiOmJyZWFrO2Nhc2UiPGdyYXBoaWNEYXRhIjpHZT0hMDticmVhaztjYXNlIjwvZ3JhcGhpY0RhdGEiOkdlPSExO2JyZWFrO2Nhc2UiPGJsaXBGaWxsIjpHZT0hMDticmVhaztjYXNlIjwvYmxpcEZpbGwiOkdlPSExO2JyZWFrO2Nhc2UiPC9ibGlwIjpicmVh''@;'; put 'put ''aztjYXNlIjxzcmNSZWN0IjpHZT0hMDticmVhaztjYXNlIjwvc3JjUmVjdCI6R2U9ITE7YnJlYWs7Y2FzZSI8bm9GaWxsIjppZihldClicmVhazsiPHNwUHIiPT1TdC5zbGljZSgtMSlbMF0mJihBdC5zLmZnQ29sb3I9bnVsbCk7YnJlYWs7Y2FzZSI8L3NvbGlkRmlsbCI6aWYoZXR8fGJ0KWJy''@;'; put 'put ''ZWFrOyI8c3BQciI9PVN0LnNsaWNlKC0yKVswXT9BdC5zLmZnQ29sb3I9bW46IjxyUHIiPT1TdC5zbGljZSgtMilbMF0mJlN0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKEplLnMuY29sb3I9bW4pLG1uPXt9LGJ0PSExO2JyZWFrO2Nhc2UiPHByc3RHZW9tIjoic2hhcGUiPT1kZSYmKEF0WyIh''@;'; put 'put ''c2hhcGUiXT1Ibi5wcnN0KTticmVhaztjYXNlIjwvcHJzdEdlb20iOmNhc2UiPGF2THN0IjpicmVhaztjYXNlIjx0eEJvZHkiOkdlPSEwLEF0LlI9W107YnJlYWs7Y2FzZSI8L3R4Qm9keSI6R2U9ITE7YnJlYWs7Y2FzZSI8Ym9keVByIjpBdC5zLmFsaWdubWVudC52ZXJ0aWNhbD1JUltIbi5h''@;'; put 'put ''bmNob3J8fCJ0Il18fCJ0b3AiO2JyZWFrO2Nhc2UiPGxzdFN0eWxlIjpicmVhaztjYXNlIjx0IjpTbj1Hbitkci5sZW5ndGg7YnJlYWs7Y2FzZSI8YnIiOmNhc2UiPGJyLz4iOnp0Kz0iXG4iO2JyZWFrO2Nhc2UiPC90Ijp6dCs9b2Uuc2xpY2UoU24sR24pO2JyZWFrO2Nhc2UiPHBQciI6QXQu''@;'; put 'put ''cy5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8KEF0LnMuYWxpZ25tZW50Lmhvcml6b250YWw9UlJbSG4uYWxnbnx8ImwiXXx8ImxlZnQiKSxTdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihKZS5zLmFsaWdubWVudC5ob3Jpem9udGFsPVJSW0huLmFsZ258fCJsIl18fCJsZWZ0Iik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8clByIjpIbi5zeiYmU3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoQXQucy5zej1KZS5zLnN6PStIbi5zei8xMDApO2JyZWFrO2Nhc2UiPHAiOnp0PSIiLEplPXt0OiJzIix2OiIiLHM6e2FsaWdubWVudDp7fX19O2JyZWFrO2Nhc2UiPC9wIjoic2hhcGUiPT1kZSYmU3QuaW5kZXhPZigi''@;'; put 'put ''PHR4Qm9keSIpPi0xJiYoQXQudj0oQXQudnx8IiIpK3p0LEplLnY9enQsQXQuUi5wdXNoKEplKSk7YnJlYWs7Y2FzZSI8bGF0aW4iOkhuLnR5cGVmYWNlJiZTdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihKZS5zLm5hbWU9SG4udHlwZWZhY2UpO2JyZWFrO2Nhc2UiPHN0eWxlIjpHZT0hMCxl''@;'; put 'put ''dD0hMDticmVhaztjYXNlIjwvc3R5bGUiOkdlPSExLGV0PSExO2JyZWFrO2Nhc2UiPGxuUmVmIjpjYXNlIjxmaWxsUmVmIjpjYXNlIjxlZmZlY3RSZWYiOmNhc2UiPGZvbnRSZWYiOmJyZWFrO2Nhc2UiPC9maWxsUmVmIjohZXQmJiJzaGFwZSI9PWRlJiYoQXQucy5mZ0NvbG9yPW1uKSxtbj17''@;'; put 'put ''fTticmVhaztjYXNlIjwvZm9udFJlZiI6IWV0JiYic2hhcGUiPT1kZSYmKEF0LnMuY29sb3I9bW4pLG1uPXt9O2JyZWFrO2Nhc2UiPHNjaGVtZUNsciI6dmFyIE5uPXtiZzE6Imx0MSIsYmcyOiJsdDIiLHR4MToiZGsxIix0eDI6ImRrMiJ9W0huLnZhbF18fEhuLnZhbCx0cj0oKFYudGhlbWVF''@;'; put 'put ''bGVtZW50c3x8e30pLmNsclNjaGVtZXx8W10pLmZpbmQoZnVuY3Rpb24oUGkpe3JldHVybiBQaS5uYW1lPT1Obn0pO3RyP21uLnJnYj10ci5yZ2I6YnQ9ITA7YnJlYWs7Y2FzZSI8c2NyZ2JDbHIiOmJ0PSEwO2JyZWFrO2Nhc2UiPHNyZ2JDbHIiOm1uLnJnYj1Ibi52YWwuc2xpY2UoLTYpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPGhzbENsciI6Y2FzZSI8c3lzQ2xyIjpjYXNlIjxwcnN0Q2xyIjpidD0hMDticmVhaztjYXNlIjxjaGFydCI6UnQ9ZWUuY2hhcnRzO3ZhciB2aT1Ibi5pZDtjYXNlIjxibGlwIjpSdHx8KFJ0PWVlLmltYWdlcyx2aT1Ibi5lbWJlZCksUnQucHVzaCh7QW5jaG9yOkRlLFRhcmdl''@;'; put 'put ''dDooeFsiIWlkIl1bdmldfHx7fSkuVGFyZ2V0fSksSG4ubGluayYmKFJ0W1J0Lmxlbmd0aC0xXS5MaW5rPSh4WyIhaWQiXVtIbi5saW5rXXx8e30pLlRhcmdldCk7YnJlYWs7Y2FzZSI8Z3JwU3BQciI6R2U9ITA7YnJlYWs7Y2FzZSI8L2dycFNwUHIiOkdlPSExO2JyZWFrO2Nhc2UiPG52R3Jw''@;'; put 'put ''U3BQciI6R2U9ITA7YnJlYWs7Y2FzZSI8L252R3JwU3BQciI6R2U9ITE7YnJlYWs7Y2FzZSI8c3BQciI6R2U9ITA7YnJlYWs7Y2FzZSI8L3NwUHIiOkdlPSExO2JyZWFrO2Nhc2UiPHN0cmV0Y2giOmNhc2UiPC9zdHJldGNoIjpjYXNlIjxmaWxsUmVjdCI6Y2FzZSI8bnZHcmFwaGljRnJhbWVQ''@;'; put 'put ''ciI6Y2FzZSI8L252R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGNOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvY052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGdyYXBoaWNGcmFtZUxvY2tzIjpjYXNlIjxudlBpY1ByIjpjYXNlIjwvbnZQaWNQciI6Y2FzZSI8Y052UGljUHIiOmNhc2UiPC9jTnZQaWNQ''@;'; put 'put ''ciI6Y2FzZSI8cGljTG9ja3MiOmNhc2UiPGNOdkdycFNwUHIiOmNhc2UiPC9jTnZHcnBTcFByIjpjYXNlIjxncnBTcExvY2tzIjpjYXNlIjxudlNwUHIiOmNhc2UiPC9udlNwUHIiOmNhc2UiPGNOdlNwUHIiOmNhc2UiPC9jTnZTcFByIjpjYXNlIjxzcExvY2tzIjpicmVhaztjYXNlIjxjTnZQ''@;'; put 'put ''ciI6R2U9ITA7YnJlYWs7Y2FzZSI8L2NOdlByIjpHZT0hMTticmVhaztjYXNlIjxjeG5TcCI6R2U9ITA7YnJlYWs7Y2FzZSI8L2N4blNwIjpHZT0hMTticmVhaztjYXNlIjxjTnZDeG5TcFByIjpHZT0hMDticmVhaztjYXNlIjwvY052Q3huU3BQciI6R2U9ITE7YnJlYWs7Y2FzZSI8bnZDeG5T''@;'; put 'put ''cFByIjpjYXNlIjwvbnZDeG5TcFByIjpicmVhaztjYXNlIjxleHRMc3QiOkdlPSEwLGV0PSEwO2JyZWFrO2Nhc2UiPC9leHRMc3QiOkdlPSExLGV0PSExO2JyZWFrO2Nhc2UiPC9leHQiOmJyZWFrO2RlZmF1bHQ6aWYobGUmJmxlLldURiYmIUdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25p''@;'; put 'put ''emVkICIrSG5bMF0rIiBpbiBkcmF3aW5nIil9cmV0dXJuIjwvIj09aHIuc2xpY2UoMCwyKT9TdC5wb3AoKToiLz4iIT1kci5zbGljZShkci5sZW5ndGgtMikmJlN0LnB1c2goaHIpLCIifSl9KSxlZX0ocnIodyxkZSwhMCksdTEocnIodyxEZSwhMCksZGUpLDAsb2UsVyk7aWYoUmUpe2lmKFJl''@;'; put 'put ''LmNoYXJ0cylmb3IodmFyIFZlPTA7VmU8UmUuY2hhcnRzLmxlbmd0aDsrK1ZlKXt2YXIgR2U9UmUuY2hhcnRzW1ZlXSxldD1sbihHZS5UYXJnZXQsZGUpLGJ0PWF1KGV0KSxKZT0iY2hhcnQiPT14JiYwPT1WZSxmdD15Wihycih3LGV0LCEwKSwwLDAsdTEocnIodyxidCwhMCksZXQpLDAsSmU/''@;'; put 'put ''ZzpudWxsLEdlLEplP251bGw6Zyk7SmV8fChnWyIhY2hhcnRzIl18fChnWyIhY2hhcnRzIl09W10pLGdbIiFjaGFydHMiXS5wdXNoKGZ0KSl9aWYoVy5ib29rSW1hZ2VzJiZSZS5pbWFnZXMpZm9yKHZhciBSdD0wO1J0PFJlLmltYWdlcy5sZW5ndGg7KytSdCl7dmFyIFN0PVJlLmltYWdlc1tS''@;'; put 'put ''dF0sQXQ9eyIhdHlwZSI6ImltYWdlIiwiIXBvcyI6T1UoU3QuQW5jaG9yKSwiIXBvc1R5cGUiOlN0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpGNyhTdC5BbmNob3IsZyksIiFyZWxwb3MiOiRfKFN0LkFuY2hvcixnKX07aWYoU3QuVGFyZ2V0JiYoQXRbIiFw''@;'; put 'put ''YXRoIl09bG4oU3QuVGFyZ2V0LGRlKSxBdFsiIWRhdGEiXT15dCh3LEF0WyIhcGF0aCJdKSxBdFsiIWRhdGF0eXBlIl09InN0cmluZyI9PXR5cGVvZiBBdFsiIWRhdGEiXT8iYmluYXJ5IjoiYnVmZmVyIiksU3QuTGluayYmKEF0WyIhZGF0YXR5cGUiXXx8KEF0WyIhZGF0YXR5cGUiXT0icmVt''@;'; put 'put ''b3RlIiksQXRbIiFsaW5rIl09U3QuTGluayksIUF0WyIhZGF0YXR5cGUiXSl0aHJvdyJJbWFnZSBkYXRhIGNhbm5vdCBiZSBmb3VuZCI7Z1siIWltYWdlcyJdfHwoZ1siIWltYWdlcyJdPVtdKSxnWyIhaW1hZ2VzIl0ucHVzaChBdCl9dmFyIHp0LFNuO2lmKFJlLnNoYXBlcylmb3IodmFyIG1u''@;'; put 'put ''PTA7bW48UmUuc2hhcGVzLmxlbmd0aDsrK21uKVNuPXsiIXR5cGUiOiJzaGFwZSIsIiFwb3MiOkY3KCh6dD1SZS5zaGFwZXNbbW5dKS5BbmNob3IsZyksIiFwb3NUeXBlIjp6dC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6RjcoenQuQW5jaG9yLGcpLCIhcmVs''@;'; put 'put ''cG9zIjokXyh6dC5BbmNob3IsZyl9LFsidiIsIiFzaGFwZSIsInMiLCJSIl0uZm9yRWFjaChsciksZ1siIXNoYXBlcyJdfHwoZ1siIXNoYXBlcyJdPVtdKSxnWyIhc2hhcGVzIl0ucHVzaChTbil9fWZ1bmN0aW9uIGxyKGRyKXt6dFtkcl0mJihTbltkcl09enRbZHJdKX19KGV0LG9lLGcseCxk''@;'; put 'put ''ZSwwLDAsUmUpO3ZhciBidD1bXTtyZXR1cm4gZWUmJmVlW1ZdJiZ4ZShlZVtWXSkuZm9yRWFjaChmdW5jdGlvbihKZSl7aWYoZWVbVl1bSmVdLlR5cGU9PXlhLkNNTlQpe3ZhciBmdD1sbihlZVtWXVtKZV0uVGFyZ2V0LHgpO2lmKCEoYnQ9ZnVuY3Rpb24gbkUoZyx4LHcpe3JldHVybiIuYmlu''@;'; put 'put ''Ij09PXguc2xpY2UoLTQpP2Z1bmN0aW9uIEZSKGcseCl7dmFyIHc9W10sVj1bXSxXPXt9LGVlPSExO3JldHVybiBCbyhnLGZ1bmN0aW9uKG9lLGRlLERlKXtzd2l0Y2goRGUpe2Nhc2UgNjMyOlYucHVzaChvZSk7YnJlYWs7Y2FzZSA2MzU6Vz1vZTticmVhaztjYXNlIDYzNzpXLnQ9b2UudCxX''@;'; put 'put ''Lmg9b2UuaCxXLnI9b2UucjticmVhaztjYXNlIDYzNjppZihXLmF1dGhvcj1WW1cuaWF1dGhvcl0sZGVsZXRlIFcuaWF1dGhvcix4LnNoZWV0Um93cyYmVy5yZngmJnguc2hlZXRSb3dzPD1XLnJmeC5yKWJyZWFrO1cudHx8KFcudD0iIiksZGVsZXRlIFcucmZ4LHcucHVzaChXKTticmVhaztj''@;'; put 'put ''YXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6ZWU9ITA7YnJlYWs7Y2FzZSAzNjplZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKGRlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoZGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFlZXx8eC5XVEYpKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitEZSsiICIrZGUpfX0pLHd9KGcsdyk6ZnVuY3Rpb24gVzcoZyx4KXtpZihnLm1hdGNoKC88KD86XHcrOik/Y29tbWVudHMgKlwvPi8pKXJldHVybltdO3ZhciB3PVtdLFY9W10sVz1nLm1hdGNoKC88KD86XHcrOik/YXV0aG9ycz4oW1xzXFNd''@;'; put 'put ''Kik8XC8oPzpcdys6KT9hdXRob3JzPi8pO1cmJldbMV0mJldbMV0uc3BsaXQoLzxcL1x3Kjo/YXV0aG9yPi8pLmZvckVhY2goZnVuY3Rpb24obGUpe2lmKCIiIT09bGUmJiIiIT09bGUudHJpbSgpKXt2YXIgb2U9bGUubWF0Y2goLzwoPzpcdys6KT9hdXRob3JbXj5dKj4oLiopLyk7b2UmJncu''@;'; put 'put ''cHVzaChvZVsxXSl9fSk7dmFyIGVlPWcubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gZWUmJmVlWzFdJiZlZVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVhY2goZnVuY3Rpb24obGUpe2lmKCIi''@;'; put 'put ''IT09bGUmJiIiIT09bGUudHJpbSgpKXt2YXIgb2U9bGUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYob2Upe3ZhciBkZT1mcihvZVswXSksRGU9e2F1dGhvcjpkZS5hdXRob3JJZCYmd1tkZS5hdXRob3JJZF18fCJzaGVldGpzZ2hvc3QiLHJlZjpkZS5yZWYsZ3VpZDpkZS5n''@;'; put 'put ''dWlkfSxSZT14YShkZS5yZWYpO2lmKCEoeC5zaGVldFJvd3MmJnguc2hlZXRSb3dzPD1SZS5yKSl7dmFyIFZlPWxlLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLEdlPSEhVmUmJiEhVmVbMV0mJl83KFZlWzFdKXx8e3I6IiIsdDoiIixoOiIifTtE''@;'; put 'put ''ZS5yPUdlLnIsIjx0PjwvdD4iPT1HZS5yJiYoR2UudD1HZS5oPSIiKSxEZS50PShHZS50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIikseC5jZWxsSFRNTCYmKERlLmg9R2UuaCksVi5wdXNoKERlKX19fX0pLFZ9KGcsdyl9KHl0KGcsZnQsITApLGZ0LGRl''@;'; put 'put ''KSl8fCFidC5sZW5ndGgpcmV0dXJuOyFmdW5jdGlvbiBxXyhnLHgpe3ZhciBWLHc9QXJyYXkuaXNBcnJheShnKTt4LmZvckVhY2goZnVuY3Rpb24oVyl7dmFyIGVlPXhhKFcucmVmKTtpZih3PyhnW2VlLnJdfHwoZ1tlZS5yXT1bXSksVj1nW2VlLnJdW2VlLmNdKTpWPWdbVy5yZWZdLCFWKXtW''@;'; put 'put ''PXt0OiJ6In0sdz9nW2VlLnJdW2VlLmNdPVY6Z1tXLnJlZl09Vjt2YXIgbGU9U2EoZ1siIXJlZiJdfHwiQkRXR08xMDAwMDAxOkExIik7bGUucy5yPmVlLnImJihsZS5zLnI9ZWUuciksbGUuZS5yPGVlLnImJihsZS5lLnI9ZWUuciksbGUucy5jPmVlLmMmJihsZS5zLmM9ZWUuYyksbGUuZS5j''@;'; put 'put ''PGVlLmMmJihsZS5lLmM9ZWUuYyk7dmFyIG9lPUppKGxlKTtvZSE9PWdbIiFyZWYiXSYmKGdbIiFyZWYiXT1vZSl9Vi5jfHwoVi5jPVtdKTt2YXIgZGU9e2E6Vy5hdXRob3IsdDpXLnQscjpXLnJ9O2RlLnImJiJzdHJpbmciPT10eXBlb2YgZGUuciYmKGRlLlI9djcoZGUucikpLFcuaCYmKGRl''@;'; put 'put ''Lmg9Vy5oKSxWLmMucHVzaChkZSl9KX0oZXQsYnQpfX0pLGZ1bmN0aW9uIHM2KGcseCx3LFYsVyxlZSxsZSl7IWd8fCFnWyIhdGFibGVyZWZzIl18fCF3fHwhd1siIWlkIl18fChnWyIhdGFibGVzIl09W10sZ1siIXRhYmxlcmVmcyJdLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBkZT13WyIh''@;'; put 'put ''aWQiXVtvZV07aWYoZGUmJmRlLlRhcmdldCl7dmFyIERlPWxuKGRlLlRhcmdldCxWKTshZnVuY3Rpb24gTFIoZyx4LHcsVixXKXt2YXIgZWU9e3N0eWxlOnt9LGhlYWRlcjowfSxsZT0hMTtnLnJlcGxhY2UoR3QsZnVuY3Rpb24ob2Upe3ZhciBkZT1mcihvZSk7c3dpdGNoKCRpKGRlWzBdKSl7''@;'; put 'put ''Y2FzZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRTdGF0ZT4iOmNhc2UiPC9zb3J0U3RhdGU+IjpjYXNlIjwvdGFibGVDb2x1bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3RhYmxlQ29sdW1uPiI6''@;'; put 'put ''Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90b3RhbHNSb3dGb3Jt''@;'; put 'put ''dWxhPiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29ydENvbmRpdGlvbj4iOmNhc2UiPHNvcnRDb25kaXRpb24iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExz''@;'; put 'put ''dC8+IjpicmVhaztjYXNlIjx0YWJsZSI6ZGUucmVmJiYoZWUucmVmPWRlLnJlZiksZGUubmFtZT9lZS5uYW1lPWRlLm5hbWU6ZGUuZGlzcGxheU5hbWUmJihlZS5uYW1lPWRlLmRpc3BsYXlOYW1lKSxudWxsIT1kZS5oZWFkZXJyb3djb3VudCYmMSE9K2RlLmhlYWRlcnJvd2NvdW50P2VlLmhl''@;'; put 'put ''YWRlcj0rZGUuaGVhZGVycm93Y291bnQ6bnVsbD09ZGUuaGVhZGVycm93Y291bnQmJihlZS5oZWFkZXI9MSk7YnJlYWs7Y2FzZSI8YXV0b0ZpbHRlciI6Y2FzZSI8YXV0b0ZpbHRlcj4iOmVlLmZpbHRlcj0hMDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRhYmxlQ29sdW1ucz4i''@;'; put 'put ''OmVlLmNvbHM9W107YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUluZm8iOmRlLnNob3dSb3dTdHJpcGVzJiYoZWUuc3R5bGUucm93c3RyaXBlPUlyKGRlLnNob3dSb3dTdHJpcGVzKSksZGUuc2hvd0NvbHVtblN0cmlwZXMmJihlZS5zdHlsZS5jb2xzdHJpcGU9SXIoZGUuc2hvd0NvbHVtblN0cmlw''@;'; put 'put ''ZXMpKSxkZS5zaG93Rmlyc3RDb2x1bW4mJihlZS5zdHlsZS5jb2xmaXJzdD1JcihkZS5zaG93Rmlyc3RDb2x1bW4pKSxkZS5zaG93TGFzdENvbHVtbiYmKGVlLnN0eWxlLmNvbGxhc3Q9SXIoZGUuc2hvd0xhc3RDb2x1bW4pKSxkZS5uYW1lJiYoZWUuc3R5bGUubmFtZT1kZS5uYW1lLnJlcGxh''@;'; put 'put ''Y2UoL15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOmVlLmNvbHMucHVzaCh7aWQ6K2RlLmlkLG5hbWU6ZGUubmFtZX0pO2JyZWFrO2Nhc2UiPGZpbHRlckNvbHVtbj4iOmNhc2UiPGZpbHRlckNvbHVtbiI6Y2FzZSI8Y3VzdG9t''@;'; put 'put ''RmlsdGVycyI6Y2FzZSI8Y3VzdG9tRmlsdGVycz4iOmNhc2UiPGV4dCI6bGU9ITA7YnJlYWs7Y2FzZSI8L2ZpbHRlckNvbHVtbj4iOmNhc2UiPC9jdXN0b21GaWx0ZXJzPiI6Y2FzZSI8L2V4dD4iOmxlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIWxlJiZXLldURil0aHJvdyBuZXcgRXJyb3IoInVu''@;'; put 'put ''cmVjb2duaXplZCAiK2RlWzBdKyIgaW4gdGFibGUiKX1yZXR1cm4gb2V9KSxlZS5maWx0ZXJ8fChlZS5maWx0ZXI9ITEpLGVlLnN0eWxlLm5hbWUmJiFlZS5zdHlsZS5uYW1lLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKSYmdy5UYWJsZSYmdy5UYWJsZS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKG9lKXsob2UubmFtZT09ZWUuc3R5bGUubmFtZXx8b2UucmF3bmFtZT09ZWUuc3R5bGUubmFtZSkmJihlZS5zdHlsZS5yYXc9cm4ob2UpKX0pLHhbIiF0YWJsZXMiXS5wdXNoKGVlKX0oeXQoeCxEZSwhMCksZyxXLDAsbGUpfX0pLGRlbGV0ZSBnWyIhdGFibGVyZWZzIl0pfShldCxnLGVl''@;'; put 'put ''W1ZdLHgsVmUsMCxkZSksdHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1IiYmdzkucHVzaChbZXQsZyxlZVtWXSx4LHtTaGVldHM6bGV9LFZlLGRlXSksZnVuY3Rpb24gbFkoZyx4LHcsVixXLGVlLGxlLG9lKXtpZihnJiZnWyIhbGVnZHJhd2VsIl0pe3ZhciBkZT1sbihnWyIhbGVnZHJhd2Vs''@;'; put 'put ''Il0uVGFyZ2V0LFYpLERlPXJyKHcsZGUsITApO0RlJiZmdW5jdGlvbiBRTShnLHgsdyl7dmFyIFY9MDsoZy5tYXRjaChKTSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFcpe3ZhciBSdCxTdCxBdCx6dCxTbixscixtbixkcixlZT0iIixsZT0hMCxvZT0iIixkZT0tMSxEZT17fSxSZT17fSxWZT17''@;'; put 'put ''fSxHZT0tMSxldD0tMSxidD0iIixKZT0iIixmdD0iIixHbj0hMSxIbj0hMTtzd2l0Y2goVy5yZXBsYWNlKEd0LGZ1bmN0aW9uKHRyLHZpKXt2YXIgUGk9ZnIodHIpO3N3aXRjaCgkaShQaVswXSkpe2Nhc2UiPHNoYXBlIjpQaS5maWxsY29sb3ImJihEZS5jb2xvcjE9UGkuZmlsbGNvbG9yKSxQ''@;'; put 'put ''aS5zdHJva2Vjb2xvciYmKFZlLmNvbG9yPVBpLnN0cm9rZWNvbG9yKTticmVhaztjYXNlIjxmaWxsIjpjYXNlIjxmaWxsPiI6Ijx2OmZpbGwiPT1QaVswXSYmKFBpLmNvbG9yMiYmKERlLmNvbG9yMj1QaS5jb2xvcjIpLFBpLnR5cGUmJihEZS50eXBlPVBpLnR5cGUpKTticmVhaztjYXNlIjwv''@;'; put 'put ''ZmlsbD4iOmNhc2UiPGxvY2siOmNhc2UiPGxvY2svPiI6YnJlYWs7Y2FzZSI8c2hhZG93IjpQaS5jb2xvciYmKFJlLmNvbG9yPVBpLmNvbG9yKSxQaS5vbiYmKFJlLm9uPVBpLm9uKTticmVhaztjYXNlIjxDbGllbnREYXRhIjpQaS5PYmplY3RUeXBlJiYoZWU9UGkuT2JqZWN0VHlwZSk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8VmlzaWJsZSI6Y2FzZSI8VmlzaWJsZS8+IjpsZT0hMTticmVhaztjYXNlIjxBbmNob3IiOmNhc2UiPEFuY2hvcj4iOmNhc2UiPFJvdyI6Y2FzZSI8Um93PiI6Y2FzZSI8Q29sdW1uIjpjYXNlIjxDb2x1bW4+IjpjYXNlIjxGbWxhTWFjcm8iOmNhc2UiPEZtbGFNYWNybz4iOmNh''@;'; put 'put ''c2UiPEZtbGFMaW5rIjpjYXNlIjxGbWxhTGluaz4iOmNhc2UiPEZtbGFSYW5nZSI6Y2FzZSI8Rm1sYVJhbmdlPiI6Y2FzZSI8U2VsVHlwZSI6Y2FzZSI8U2VsVHlwZT4iOmNhc2UiPFZhbCI6Y2FzZSI8VmFsPiI6Y2FzZSI8TWluIjpjYXNlIjxNaW4+IjpjYXNlIjxNYXgiOmNhc2UiPE1heD4i''@;'; put 'put ''OmNhc2UiPEluYyI6Y2FzZSI8SW5jPiI6Y2FzZSI8UGFnZSI6Y2FzZSI8UGFnZT4iOmNhc2UiPENoZWNrZWQiOmNhc2UiPENoZWNrZWQ+IjpjYXNlIjx0ZXh0Ym94IjpjYXNlIjx0ZXh0Ym94PiI6ZGU9dmkrdHIubGVuZ3RoO2JyZWFrO2Nhc2UiPC9BbmNob3I+IjpvZT1XLnNsaWNlKGRlLHZp''@;'; put 'put ''KS50cmltKCk7YnJlYWs7Y2FzZSI8L1Jvdz4iOkdlPStXLnNsaWNlKGRlLHZpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4iOmV0PStXLnNsaWNlKGRlLHZpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFNYWNybz4iOmJ0PVcuc2xpY2UoZGUsdmkpLnRyaW0oKTticmVhaztjYXNlIjwv''@;'; put 'put ''Rm1sYUxpbms+IjpKZT1XLnNsaWNlKGRlLHZpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOm1uPVcuc2xpY2UoZGUsdmkpLnRyaW0oKTticmVhaztjYXNlIjwvU2VsVHlwZT4iOmRyPVcuc2xpY2UoZGUsdmkpLnRyaW0oKTticmVhaztjYXNlIjwvVmFsPiI6UnQ9K1cuc2xpY2Uo''@;'; put 'put ''ZGUsdmkpLnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6U3Q9K1cuc2xpY2UoZGUsdmkpLnRyaW0oKTticmVhaztjYXNlIjwvTWF4PiI6QXQ9K1cuc2xpY2UoZGUsdmkpLnRyaW0oKTticmVhaztjYXNlIjwvSW5jPiI6enQ9K1cuc2xpY2UoZGUsdmkpLnRyaW0oKTticmVhaztjYXNlIjwvUGFn''@;'; put 'put ''ZT4iOlNuPStXLnNsaWNlKGRlLHZpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NoZWNrZWQ+Ijpscj0rVy5zbGljZShkZSx2aSkudHJpbSgpO2JyZWFrO2Nhc2UiPC90ZXh0Ym94PiI6ZnQ9Vy5zbGljZShkZSx2aSkudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMvPiI6Y2FzZSI8TW92''@;'; put 'put ''ZVdpdGhDZWxscz4iOkduPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOkhuPSEwfXJldHVybiIifSksZWUpe2Nhc2UiTm90ZSI6dmFyIGhyPUl1LnNoZWV0X2dldF9jZWxsKHgsR2U+PTAmJmV0Pj0wP0tyKHtyOkdlLGM6ZXR9KTp3W1ZdLnJl''@;'; put 'put ''Zik7aHIuYyYmKGhyLmMuaGlkZGVuPWxlLG9lJiYoaHIuYy5yYXdhbmNob3I9b2UsWk0ob2UsaHIuYyksWU0oaHIuY1siIXBvcyJdLDIqISFHbishIUhuLHgpKSxEZS5jb2xvcjEmJihoci5jLmZpbGw9RGUpLFJlLmNvbG9yJiYoaHIuYy5zaGFkb3c9UmUpLFZlLmNvbG9yJiYoaHIuYy5zdHJv''@;'; put 'put ''a2U9VmUpKSwrK1Y7YnJlYWs7Y2FzZSJCdXR0b24iOmNhc2UiR0JveCI6Y2FzZSJEcm9wIjpjYXNlIkxhYmVsIjpjYXNlIkNoZWNrYm94IjpjYXNlIlNjcm9sbCI6Y2FzZSJMaXN0IjpjYXNlIlJhZGlvIjpjYXNlIlNwaW4iOmNhc2UiRWRpdCI6eFsiIWNvbnRyb2xzIl18fCh4WyIhY29udHJv''@;'; put 'put ''bHMiXT1bXSk7dmFyIE5uPXsiIXR5cGUiOmVlfTtvZSYmWk0ob2UsTm4pLGJ0JiYoTm4ubWFjcm89YnQucmVwbGFjZSgiWzBdISIsIiIpKSxKZSYmKE5uLmxpbms9SmUpLCJTY3JvbGwiPT1lZXx8IlNwaW4iPT1lZT8obnVsbD09UnQmJihSdD0wKSxudWxsPT1TdCYmKFN0PTApLG51bGw9PUF0''@;'; put 'put ''JiYoQXQ9M2U0KSxudWxsPT16dCYmKHp0PTEpLCJTY3JvbGwiPT1lZSYmbnVsbD09U24mJihTbj0xMCkpOiJSYWRpbyI9PWVlfHwiQ2hlY2tib3giPT1lZT8obnVsbD09bHImJihscj0wKSxSdD1scik6KCJMaXN0Ij09ZWV8fCJEcm9wIj09ZWUpJiYobnVsbCE9bW4mJihObi5yZWY9bW4pLG51''@;'; put 'put ''bGw9PWRyJiYoZHI9IlNpbmdsZSIpLCJMaXN0Ij09ZWUmJihObi5zZWw9ZHIpKSxudWxsIT1SdCYmKE5uLnZhbD1SdCksbnVsbCE9U3QmJihObi5taW49U3QpLG51bGwhPUF0JiYoTm4ubWF4PUF0KSxudWxsIT16dCYmKE5uLnN0ZXA9enQpLG51bGwhPVNuJiYoTm4ucGFnZT1TbiksZnQmJihO''@;'; put 'put ''bi50PWZ0LnJlcGxhY2UoL1xzKjxbXHNcU10qPz5ccyovZywiIikpLHhbIiFjb250cm9scyJdLnB1c2goTm4pfX0pfShibyhEZSksZyxvZXx8W10pLGdbIiFMRFAiXT1kZSxnWyIhY3RybGlkIl0mJmdbIiFjdHJsaWQiXS5mb3JFYWNoKGZ1bmN0aW9uKFJlKXtpZihSZS5yZWwmJlJlLnJlbC5U''@;'; put 'put ''YXJnZXQpe3ZhciBWZT1sbihSZS5yZWwuVGFyZ2V0LFYpO1JlLnBhdGg9VmUsZGVsZXRlIFJlLnJlbH19KX19KGV0LDAsZyx4LDAsMCwwLGJ0KSxldH1jYXRjaChKZSl7aWYoZGUuV1RGKXRocm93IEplfX1mdW5jdGlvbiBlMChnKXtyZXR1cm4iLyI9PWcuY2hhckF0KDApP2cuc2xpY2UoMSk6''@;'; put 'put ''Z312YXIgdVk9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEZPKGcseCl7aWYodzk9W10sdkUoeD14fHx7fSksUXIoZywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIil8fFFyKGcsIm9iamVjdGRhdGEueG1sIikpcmV0dXJuIGZ1bmN0aW9uIEVPKGcseCl7eD14fHx7fSxRcihnLCJNRVRBLUlORi9tYW5p''@;'; put 'put ''ZmVzdC54bWwiKSYmZnVuY3Rpb24gQ2coZyx4KXtmb3IodmFyIFYsVyx3PU1iKGcpO1Y9dDYuZXhlYyh3KTspc3dpdGNoKFZbM10pe2Nhc2UibWFuaWZlc3QiOmJyZWFrO2Nhc2UiZmlsZS1lbnRyeSI6aWYoIi8iPT0oVz1mcihWWzBdLCExKSkucGF0aCYmImFwcGxpY2F0aW9uL3ZuZC5vYXNp''@;'; put 'put ''cy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiIT09Vy50eXBlKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24i''@;'; put 'put ''OmNhc2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKHgmJnguV1RGKXRocm93IFZ9fSh5dChnLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSx4KTt2YXIgdz1ycihnLCJjb250ZW50LnhtbCIpO2lmKCF3KXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBWPXhPKGJvKHcpLHgpO3JldHVybiBRcihnLCJtZXRhLnhtbCIpJiYoVi5Qcm9wcz1oXyh5dChnLCJtZXRhLnhtbCIpKSksVn0oZyx4KTtpZihRcihnLCJJbmRleC9Eb2N1bWVudC5pd2Ei''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgZmlsZSIpO3ZhciBlZSxsZSx3PWZ1bmN0aW9uIF90KGcpe2Zvcih2YXIgeD1nLkZ1bGxQYXRoc3x8eGUoZy5maWxlcyksdz1bXSxWPTA7Vjx4Lmxlbmd0aDsrK1YpIi8iIT14W1ZdLnNsaWNlKC0xKSYmdy5wdXNoKHhbVl0p''@;'; put 'put ''O3JldHVybiB3LnNvcnQoKX0oZyksVj1mdW5jdGlvbiByNyhnKXt2YXIgeD17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0''@;'; put 'put ''cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0''@;'; put 'put ''ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aWYoIWd8fCFnLm1hdGNoKXJldHVybiB4O3ZhciB3PXt9O2lmKChnLm1hdGNoKEd0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oVil7dmFyIFc9ZnIoVik7c3dp''@;'; put 'put ''dGNoKFdbMF0ucmVwbGFjZShlYSwiPCIpKXtjYXNlIjw/eG1sIjpicmVhaztjYXNlIjxUeXBlcyI6eC54bWxucz1XWyJ4bWxucyIrKFdbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2JyZWFrO2Nhc2UiPERlZmF1bHQiOndbVy5FeHRlbnNpb24udG9Mb3dlckNhc2UoKV09Vy5D''@;'; put 'put ''b250ZW50VHlwZTticmVhaztjYXNlIjxPdmVycmlkZSI6dm9pZCAwIT09eFtCMFtXLkNvbnRlbnRUeXBlXV0mJnhbQjBbVy5Db250ZW50VHlwZV1dLnB1c2goVy5QYXJ0TmFtZSl9fSkseC54bWxucyE9PVJvLkNUKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIreC54bWxu''@;'; put 'put ''cyk7cmV0dXJuIHguY2FsY2NoYWluPXguY2FsY2NoYWlucy5sZW5ndGg+MD94LmNhbGNjaGFpbnNbMF06IiIseC5zc3Q9eC5zdHJzLmxlbmd0aD4wP3guc3Ryc1swXToiIix4LnN0eWxlPXguc3R5bGVzLmxlbmd0aD4wP3guc3R5bGVzWzBdOiIiLHguY29ubj14LmNvbm5zLmxlbmd0aD4wP3gu''@;'; put 'put ''Y29ubnNbMF06IiIseC5kZWZhdWx0cz13LGRlbGV0ZSB4LmNhbGNjaGFpbnMseH0ocnIoZywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxXPSExO2lmKDA9PT1WLndvcmtib29rcy5sZW5ndGgmJnl0KGcsbGU9InhsL3dvcmtib29rLnhtbCIsITApJiZWLndvcmtib29rcy5wdXNoKGxlKSwwPT09''@;'; put 'put ''Vi53b3JrYm9va3MubGVuZ3RoKXtpZigheXQoZyxsZT0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO1Yud29ya2Jvb2tzLnB1c2gobGUpLFc9ITB9ImJpbiI9PVYud29ya2Jvb2tzWzBdLnNsaWNlKC0zKSYmKFc9ITApO3Zh''@;'; put 'put ''ciBvZT17fSxkZT17fTtpZigheC5ib29rU2hlZXRzJiYheC5ib29rUHJvcHMpe2lmKHE3PVtdLFYuc3N0KXRyeXtxNz1mdW5jdGlvbiBlNihnLHgsdyl7cmV0dXJuIi5iaW4iPT09eC5zbGljZSgtNCk/ZnVuY3Rpb24gbFUoZyx4KXt2YXIgdz1bXSxWPSExO3JldHVybiBCbyhnLGZ1bmN0aW9u''@;'; put 'put ''KGVlLGxlLG9lKXtzd2l0Y2gob2Upe2Nhc2UgMTU5OncuQ291bnQ9ZWVbMF0sdy5VbmlxdWU9ZWVbMV07YnJlYWs7Y2FzZSAxOTp3LnB1c2goZWUpO2JyZWFrO2Nhc2UgMTYwOnJldHVybiEwO2Nhc2UgMzU6Vj0hMDticmVhaztjYXNlIDM2OlY9ITE7YnJlYWs7ZGVmYXVsdDppZihsZS5pbmRl''@;'; put 'put ''eE9mKCJCZWdpbiIpPjB8fGxlLmluZGV4T2YoIkVuZCIpLCFWfHx4LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrb2UrIiAiK2xlKX19KSx3fShnLHcpOmZ1bmN0aW9uIHltKGcseCl7dmFyIHc9W10sVj0iIjtpZighZylyZXR1cm4gdzt2YXIgVz1nLm1hdGNoKCRJ''@;'; put 'put ''KTtpZihXKXtWPVdbMl0ucmVwbGFjZShLSSwiIikuc3BsaXQoc1UpO2Zvcih2YXIgZWU9MDtlZSE9Vi5sZW5ndGg7KytlZSl7dmFyIGxlPV83KFZbZWVdLnRyaW0oKSx4KTtudWxsIT1sZSYmKHdbdy5sZW5ndGhdPWxlKX1XPWZyKFdbMV0pLHcuQ291bnQ9Vy5jb3VudCx3LlVuaXF1ZT1XLnVu''@;'; put 'put ''aXF1ZUNvdW50fXJldHVybiB3fShnLHcpfSh5dChnLGUwKFYuc3N0KSksVi5zc3QseCl9Y2F0Y2gocHIpe2lmKHguV1RGKXRocm93IHByfXguY2VsbFN0eWxlcyYmVi50aGVtZXMubGVuZ3RoJiYob2U9ZnVuY3Rpb24ga1ooZyx4LHcpe3JldHVybiBXMChnLHcpfShycihnLFYudGhlbWVzWzBd''@;'; put 'put ''LnJlcGxhY2UoL15cLy8sIiIpLCEwKXx8IiIsMCx4KSksVi5zdHlsZSYmKGRlPWZ1bmN0aW9uIEFaKGcseCx3LFYpe3JldHVybiIuYmluIj09PXguc2xpY2UoLTQpP2Z1bmN0aW9uIEhnKGcseCx3KXt2YXIgVj17TnVtYmVyRm10OltdfTtmb3IodmFyIFcgaW4gYi5fdGFibGUpVi5OdW1iZXJG''@;'; put 'put ''bXRbV109Yi5fdGFibGVbV107Vi5DZWxsWGY9W10sVi5Gb250cz1bXSxWLkZpbGxzPVtdLFYuQm9yZGVycz1bXTt2YXIgZWU9W10sbGU9ITE7cmV0dXJuIEJvKGcsZnVuY3Rpb24oZGUsRGUsUmUpe3N3aXRjaChSZSl7Y2FzZSA0NDpWLk51bWJlckZtdFtkZVswXV09ZGVbMV0sYi5sb2FkKGRl''@;'; put 'put ''WzFdLGRlWzBdKTticmVhaztjYXNlIDQzOlpfKGRlLmNvbG9yLHgpLFYuRm9udHMucHVzaChkZSk7YnJlYWs7Y2FzZSAxMDI1OmNhc2UgNDg6Y2FzZSA1MDc6Y2FzZSA1NzI6Y2FzZSA0NzU6Y2FzZSAxMTcxOmNhc2UgMjEwMjpjYXNlIDExMzA6Y2FzZSA1MTI6Y2FzZSAyMDk1OmNhc2UgMzA3''@;'; put 'put ''MjpicmVhaztjYXNlIDQ1OmRlLmZnQ29sb3ImJlpfKGRlLmZnQ29sb3IseCksZGUuYmdDb2xvciYmWl8oZGUuYmdDb2xvcix4KSxWLkZpbGxzLnB1c2goZGUpO2JyZWFrO2Nhc2UgNDY6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihWZSl7''@;'; put 'put ''ZGVbVmVdJiZkZVtWZV0uY29sb3ImJlpfKGRlW1ZlXS5jb2xvcix4KX0pLFYuQm9yZGVycy5wdXNoKGRlKTticmVhaztjYXNlIDQ3OiJCcnRCZWdpbkNlbGxYRnMiPT1lZVtlZS5sZW5ndGgtMV0mJlYuQ2VsbFhmLnB1c2goZGUpO2JyZWFrO2Nhc2UgMzU6bGU9ITA7YnJlYWs7Y2FzZSAzNjps''@;'; put 'put ''ZT0hMTticmVhaztjYXNlIDM3OmVlLnB1c2goRGUpLGxlPSEwO2JyZWFrO2Nhc2UgMzg6ZWUucG9wKCksbGU9ITE7YnJlYWs7ZGVmYXVsdDppZigoRGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApZWUucHVzaChEZSk7ZWxzZSBpZigoRGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKWVlLnBvcCgp''@;'; put 'put ''O2Vsc2UgaWYoIWxlfHx3LldURiYmIkJydEFDQmVnaW4iIT1lZVtlZS5sZW5ndGgtMV0pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1JlKyIgIitEZSl9fSksKFYuRm9udHN8fFtdKVswXSYmU20oVi5Gb250c1swXSksVn0oZyx3LFYpOnlSKGcsdyxWKX0oeXQoZyxlMChW''@;'; put 'put ''LnN0eWxlKSksVi5zdHlsZSxvZSx4KSl9dmFyIERlPVYubGlua3MubWFwKGZ1bmN0aW9uKHByKXt0cnl7dmFyIExuPXUxKHJyKGcsYXUoZTAocHIpKSkscHIpO3JldHVybiBmdW5jdGlvbiB1TyhnLHgsdyxWKXtyZXR1cm4iLmJpbiI9PT13LnNsaWNlKC00KT9mdW5jdGlvbiBIb2UoZyx4LHcs''@;'; put 'put ''Vil7aWYoIWcpcmV0dXJuIGc7dmFyIFc9Vnx8e30sZWU9ITE7Qm8oZyxmdW5jdGlvbihkZSxEZSxSZSl7c3dpdGNoKFJlKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNl''@;'; put 'put ''IDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1OmVlPSEwO2JyZWFrO2Nhc2UgMzY6ZWU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChEZXx8IiIpLmlu''@;'; put 'put ''ZGV4T2YoIkJlZ2luIik+MCkmJiEoKERlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighZWV8fFcuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrUmUudG9TdHJpbmcoMTYpKyIgIitEZSl9fSxXKX0oZywwLDAsVik6ZnVuY3Rpb24geWYoZyx4LHcsVil7dmFyIFc9''@;'; put 'put ''Vnx8e30sZWU9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSxvZT0hMSxkZT17fSxEZT0tMSxSZT0tMSxWZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0sR2U9e30sZXQ9MDtyZXR1cm4oZ3x8IiIpLnJlcGxhY2UoR3QsZnVuY3Rpb24oYnQsSmUpe3ZhciBmdD1mcihidCk7c3dpdGNoKCRp''@;'; put 'put ''KGZ0WzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+IjpjYXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNh''@;'; put 'put ''c2UiPHNoZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6ZWUuVGFyZ2V0PXhbIiFpZCJdW2Z0LmlkXS5UYXJnZXQsZWUuTWlzc2luZz14WyIhaWQiXVtmdC5pZF0uVHlw''@;'; put 'put ''ZT09eWEuWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjplZS5TaGVldE5hbWVzLnB1c2gocXIoYm8oZnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6ZGU9e30sZWUuU2hlZXRzW2VlLlNoZWV0TmFtZXNbZnQuc2hlZXRJZF1dPUlyKGZ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxs''@;'; put 'put ''OmRlO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpWZS5lLmM+PTAmJihkZVsiIXJlZiJdPUppKFZlKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpmdC5yP0RlPXBhcnNlSW50KGZ0LnIsMTApLTE6RGUrKyxSZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6ZnQucj9S''@;'; put 'put ''ZT14YShmdC5yKS5jOisrUmUsR2UudD1mdC50fHwibiIsInN0ciI9PUdlLnQmJihHZS50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpWZS5lLnI8RGUmJihWZS5lLnI9RGUpLFZlLmUuYzxSZSYmKFZlLmUuYz1SZSksZGVbS3Ioe3I6RGUsYzpSZX0pXT1HZSxHZT17fTticmVhaztjYXNlIjx2''@;'; put 'put ''IjpjYXNlIjx2PiI6ZXQ9YnQubGVuZ3RoK0plO2JyZWFrO2Nhc2UiPC92PiI6dmFyIFJ0PXFyKGcuc2xpY2UoZXQsSmUpKTtHZS52PSJuIj09R2UudD9wYXJzZUZsb2F0KFJ0KTpSdDticmVhaztjYXNlIjx2Lz4iOkdlLnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6b2U9ITA7YnJl''@;'; put 'put ''YWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOm9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW9lJiZXLldURil0aHJvdyJ1bnJlY29nbml6ZWQgIitmdFswXSsiIGluIGV4dGVybmFsIGxpbmsifX0pLGVlfShnLHgsMCxWKX0oeXQoZyxlMChwcikpLExuLHByLHgpfWNhdGNoe319KSxSZT1mdW5jdGlv''@;'; put 'put ''biBlRShnLHgsdyl7cmV0dXJuIi5iaW4iPT09eC5zbGljZSgtNCk/ZnVuY3Rpb24gYU8oZyx4KXt2YXIgdz17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LHhtbG5zOiIifSxWPVtdLFc9ITE7eHx8KHg9e30pLHguYmlmZj0xMjt2YXIgZWU9''@;'; put 'put ''W10sbGU9W1tdXTtyZXR1cm4gbGUuU2hlZXROYW1lcz1bXSxsZS5YVEk9W10sWXBbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOnJPfSxCbyhnLGZ1bmN0aW9uKGRlLERlLFJlKXtzd2l0Y2goUmUpe2Nhc2UgMTU2OmxlLlNoZWV0TmFtZXMucHVzaChkZS5uYW1lKSx3LlNoZWV0cy5wdXNoKGRl''@;'; put 'put ''KTticmVhaztjYXNlIDE1Mzp3LldCUHJvcHM9ZGU7YnJlYWs7Y2FzZSAzOTpudWxsIT1kZS5TaGVldCYmKHguU0lEPWRlLlNoZWV0KSxkZS5SZWY9SnUoZGUuUHRnLG51bGwsbnVsbCxsZSx4KSxkZWxldGUgeC5TSUQsZGVsZXRlIGRlLlB0ZyxlZS5wdXNoKGRlKTticmVhaztjYXNlIDEwMzY6''@;'; put 'put ''Y2FzZSAzNjE6Y2FzZSAyMDcxOmNhc2UgMTU4OmNhc2UgMTQzOmNhc2UgNjY0OmNhc2UgMzUzOmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSA1MzQ6Y2FzZSA2Nzc6Y2FzZSAxNTc6Y2FzZSA2MTA6Y2FzZSAyMDUwOmNhc2UgMTU1OmNhc2UgNTQ4OmNhc2UgNjc2OmNhc2UgMTI4OmNhc2UgNjY1''@;'; put 'put ''OmNhc2UgMjEyODpjYXNlIDIxMjU6Y2FzZSA1NDk6Y2FzZSAyMDUzOmNhc2UgNTk2OmNhc2UgMjA3NjpjYXNlIDIwNzU6Y2FzZSAyMDgyOmNhc2UgMzk3OmNhc2UgMTU0OmNhc2UgMTExNzpjYXNlIDU1MzpjYXNlIDIwOTE6Y2FzZSAxNjpicmVhaztjYXNlIDM1NzpjYXNlIDM1ODpjYXNlIDM1''@;'; put 'put ''NTpjYXNlIDY2NzpsZVswXS5sZW5ndGg/bGUucHVzaChbUmUsZGVdKTpsZVswXT1bUmUsZGVdLGxlW2xlLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSAzNjI6MD09PWxlLmxlbmd0aCYmKGxlWzBdPVtdLGxlWzBdLlhUST1bXSksbGVbbGUubGVuZ3RoLTFdLlhUST1sZVtsZS5sZW5ndGgt''@;'; put 'put ''MV0uWFRJLmNvbmNhdChkZSksbGUuWFRJPWxlLlhUSS5jb25jYXQoZGUpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNzpWLnB1c2goRGUpLFc9ITA7YnJlYWs7Y2FzZSAzNjpjYXNlIDM4OlYucG9wKCksVz0hMTticmVhaztkZWZhdWx0OmlmKCEoKERlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYm''@;'; put 'put ''ISgoRGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFXfHx4LldURiYmIkJydEFDQmVnaW4iIT1WW1YubGVuZ3RoLTFdJiYiQnJ0RlJUQmVnaW4iIT1WW1YubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrUmUrIiAiK0RlKX19LHgpLHdiKHcpLHcuTmFt''@;'; put 'put ''ZXM9ZWUsdy5zdXBib29rcz1sZSx3fShnLHcpOmZ1bmN0aW9uIHRPKGcseCl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWxlIik7dmFyIHc9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSxOYW1lczpbXSxFeHRl''@;'; put 'put ''cm46W10seG1sbnM6IiJ9LFY9ITEsVz0ieG1sbnMiLGVlPXt9LGxlPTA7aWYoZy5yZXBsYWNlKEd0LGZ1bmN0aW9uKGRlLERlKXt2YXIgUmU9ZnIoZGUpO3N3aXRjaCgkaShSZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9m''@;'; put 'put ''aWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxz''@;'; put 'put ''aGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZl''@;'; put 'put ''cmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlld3M+''@;'; put 'put ''IjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZvdENhY2hlcz4iOmNhc2UiPC9waXZvdENhY2hlcz4iOmNhc2UiPHBpdm90Q2FjaGVzIjpjYXNlIjxwaXZvdENhY2hlIjpjYXNl''@;'; put 'put ''IjxzbWFydFRhZ1ByIjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdUeXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlwZSI6Y2FzZSI8d2ViUHVibGlzaGluZyI6Y2FzZSI8d2ViUHVibGlzaGluZy8+Ijpj''@;'; put 'put ''YXNlIjxmaWxlUmVjb3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNl''@;'; put 'put ''IjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmtib29rIjpkZS5tYXRjaChTWikmJihXPSJ4bWxucyIrZGUubWF0Y2goLzwoXHcrKTovKVsxXSksdy54bWxucz1SZVtXXTticmVh''@;'; put 'put ''aztjYXNlIjxmaWxlVmVyc2lvbiI6ZGVsZXRlIFJlWzBdLHcuQXBwVmVyc2lvbj1SZTticmVhaztjYXNlIjxmaWxlU2hhcmluZyI6dy5Nb2RpZnk9e3VzZXI6UmUudXNlck5hbWUsd2FybjpJcihSZS5yZWFkT25seVJlY29tbWVuZGVkfHwiZmFsc2UiKX0sKFJlLmFsZ29yaXRobU5hbWV8fFJl''@;'; put 'put ''Lmhhc2hWYWx1ZXx8UmUuc2FsdFZhbHVlfHxSZS5zcGluQ291bnQpJiYody5Nb2RpZnkuZW5jcnlwdGlvbj17YWxnbzpSZS5hbGdvcml0aG1OYW1lLGhhc2g6UmUuaGFzaFZhbHVlLHNhbHQ6UmUuc2FsdFZhbHVlLHNwaW46K1JlLnNwaW5Db3VudHx8MWU1fSk7YnJlYWs7Y2FzZSI8d29ya2Jv''@;'; put 'put ''b2tQciI6Y2FzZSI8d29ya2Jvb2tQci8+IjpLeC5mb3JFYWNoKGZ1bmN0aW9uKEdlKXtpZihudWxsIT1SZVtHZVswXV0pc3dpdGNoKEdlWzJdKXtjYXNlImJvb2wiOncuV0JQcm9wc1tHZVswXV09SXIoUmVbR2VbMF1dKTticmVhaztjYXNlImludCI6dy5XQlByb3BzW0dlWzBdXT1wYXJzZUlu''@;'; put 'put ''dChSZVtHZVswXV0sMTApO2JyZWFrO2RlZmF1bHQ6dy5XQlByb3BzW0dlWzBdXT1SZVtHZVswXV19fSksUmUuY29kZU5hbWUmJih3LldCUHJvcHMuQ29kZU5hbWU9Ym8oUmUuY29kZU5hbWUpKTticmVhaztjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24iOnZhciBWZT13LlByb3RlY3Rpb258fHt9''@;'; put 'put ''O1ZlLmxvY2tTdHJ1Y3R1cmU9SXIoUmUubG9ja1N0cnVjdHVyZXx8ImZhbHNlIiksVmUubG9ja1dpbmRvd3M9SXIoUmUubG9ja1dpbmRvd3N8fCJmYWxzZSIpLFJlLndvcmtib29rQWxnb3JpdGhtTmFtZSYmKFZlLmVuY3J5cHRpb249e2FsZ286UmUud29ya2Jvb2tBbGdvcml0aG1OYW1lLGhh''@;'; put 'put ''c2g6UmUud29ya2Jvb2tIYXNoVmFsdWUsc2FsdDpSZS53b3JrYm9va1NhbHRWYWx1ZSxzcGluOitSZS53b3JrYm9va1NwaW5Db3VudHx8MWU1fSksdy5Qcm90ZWN0aW9uPVZlO2JyZWFrO2Nhc2UiPHdvcmtib29rVmlldyI6Y2FzZSI8d29ya2Jvb2tWaWV3Lz4iOmRlbGV0ZSBSZVswXSx3LldC''@;'; put 'put ''Vmlldy5wdXNoKFJlKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKFJlLnN0YXRlKXtjYXNlImhpZGRlbiI6UmUuSGlkZGVuPTE7YnJlYWs7Y2FzZSJ2ZXJ5SGlkZGVuIjpSZS5IaWRkZW49MjticmVhaztkZWZhdWx0OlJlLkhpZGRlbj0wfWRlbGV0ZSBSZS5zdGF0ZSxSZS5uYW1lPXFyKGJv''@;'; put 'put ''KFJlLm5hbWUpKSxkZWxldGUgUmVbMF0sdy5TaGVldHMucHVzaChSZSk7YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOncuRXh0ZXJuLnB1c2goUmUuaWQpO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOmNhc2UiPGRlZmluZWROYW1lcyI6Y2FzZSI8ZXh0IjpjYXNlIjxBbHRlcm5h''@;'; put 'put ''dGVDb250ZW50IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50PiI6Vj0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6Y2FzZSI8L2V4dD4iOmNhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Vj0hMTticmVhaztjYXNlIjxkZWZpbmVkTmFtZSI6KGVlPXt9KS5OYW1lPWJvKFJlLm5hbWUpLFJl''@;'; put 'put ''LmNvbW1lbnQmJihlZS5Db21tZW50PVJlLmNvbW1lbnQpLFJlLmxvY2FsU2hlZXRJZCYmKGVlLlNoZWV0PStSZS5sb2NhbFNoZWV0SWQpLElyKFJlLmhpZGRlbnx8IjAiKSYmKGVlLkhpZGRlbj0hMCksbGU9RGUrZGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZT4iOmVlLlJlZj1x''@;'; put 'put ''cihibyhnLnNsaWNlKGxlLERlKSkpLHcuTmFtZXMucHVzaChlZSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIFJlWzBdLHcuQ2FsY1ByPVJlO2JyZWFrO2RlZmF1bHQ6aWYoIVYmJnguV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrUmVbMF0r''@;'; put 'put ''IiBpbiB3b3JrYm9vayIpfXJldHVybiBkZX0pLC0xPT09Um8ubWFpbi5pbmRleE9mKHcueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrdy54bWxucyk7cmV0dXJuIHdiKHcpLHd9KGcsdyl9KHl0KGcsZTAoVi53b3JrYm9va3NbMF0pKSxWLndvcmtib29rc1sw''@;'; put 'put ''XSx4KSxWZT17fSxHZT0iIjtWLmNvcmVwcm9wcy5sZW5ndGgmJigoR2U9eXQoZyxlMChWLmNvcmVwcm9wc1swXSksITApKSYmKFZlPWhfKEdlKSksMCE9PVYuZXh0cHJvcHMubGVuZ3RoJiYoR2U9eXQoZyxlMChWLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiBtMyhnLHgsdyl7dmFyIFY9''@;'; put 'put ''e307eHx8KHg9e30pLGc9Ym8oZyksSmguZm9yRWFjaChmdW5jdGlvbihXKXt2YXIgZWU9KGcubWF0Y2goeTAoV1swXSkpfHxbXSlbMV07c3dpdGNoKFdbMl0pe2Nhc2Uic3RyaW5nIjplZSYmKHhbV1sxXV09cXIoZWUpKTticmVhaztjYXNlImJvb2wiOnhbV1sxXV09InRydWUiPT09ZWU7YnJl''@;'; put 'put ''YWs7Y2FzZSJyYXciOnZhciBsZT1nLm1hdGNoKG5ldyBSZWdFeHAoIjwiK1dbMF0rIltePl0qPihbXFxzXFxTXSo/KTwvIitXWzBdKyI+IikpO2xlJiZsZS5sZW5ndGg+MCYmKFZbV1sxXV09bGVbMV0pfX0pLFYuSGVhZGluZ1BhaXJzJiZWLlRpdGxlc09mUGFydHMmJnVjKFYuSGVhZGluZ1Bh''@;'; put 'put ''aXJzLFYuVGl0bGVzT2ZQYXJ0cyx4LHcpfShHZSxWZSx4KSk7dmFyIGV0PXt9OygheC5ib29rU2hlZXRzfHx4LmJvb2tQcm9wcykmJjAhPT1WLmN1c3Rwcm9wcy5sZW5ndGgmJihHZT1ycihnLGUwKFYuY3VzdHByb3BzWzBdKSwhMCkpJiYoZXQ9ZnVuY3Rpb24gcF8oZyx4KXt2YXIgdz17fSxW''@;'; put 'put ''PSIiLFc9Zy5tYXRjaChzTSk7aWYoVylmb3IodmFyIGVlPTA7ZWUhPVcubGVuZ3RoOysrZWUpe3ZhciBsZT1XW2VlXSxvZT1mcihsZSk7c3dpdGNoKG9lWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpicmVhaztjYXNlIjxwcm9wZXJ0eSI6Vj1xcihvZS5uYW1lKTticmVhaztj''@;'; put 'put ''YXNlIjwvcHJvcGVydHk+IjpWPW51bGw7YnJlYWs7ZGVmYXVsdDppZigwPT09bGUuaW5kZXhPZigiPHZ0OiIpKXt2YXIgZGU9bGUuc3BsaXQoIj4iKSxEZT1kZVswXS5zbGljZSg0KSxSZT1kZVsxXTtzd2l0Y2goRGUpe2Nhc2UibHBzdHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2Ui''@;'; put 'put ''Y3kiOmNhc2UiZXJyb3IiOndbVl09cXIoUmUpO2JyZWFrO2Nhc2UiYm9vbCI6d1tWXT1JcihSZSk7YnJlYWs7Y2FzZSJpMSI6Y2FzZSJpMiI6Y2FzZSJpNCI6Y2FzZSJpOCI6Y2FzZSJpbnQiOmNhc2UidWludCI6d1tWXT1wYXJzZUludChSZSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6''@;'; put 'put ''Y2FzZSJkZWNpbWFsIjp3W1ZdPXBhcnNlRmxvYXQoUmUpO2JyZWFrO2Nhc2UiZmlsZXRpbWUiOmNhc2UiZGF0ZSI6d1tWXT1MZShSZSk7YnJlYWs7ZGVmYXVsdDppZigiLyI9PURlLnNsaWNlKC0xKSlicmVhazt4LldURiYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhw''@;'; put 'put ''ZWN0ZWQiLGxlLERlLGRlKX19ZWxzZSBpZigiPC8iIT09bGUuc2xpY2UoMCwyKSYmeC5XVEYpdGhyb3cgbmV3IEVycm9yKGxlKX19cmV0dXJuIHd9KEdlLHgpKTt2YXIgYnQ9e307aWYoKHguYm9va1NoZWV0c3x8eC5ib29rUHJvcHMpJiYoUmUuU2hlZXRzP2VlPVJlLlNoZWV0cy5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oTG4pe3JldHVybiBMbi5uYW1lfSk6VmUuV29ya3NoZWV0cyYmVmUuU2hlZXROYW1lcy5sZW5ndGg+MCYmKGVlPVZlLlNoZWV0TmFtZXMpLHguYm9va1Byb3BzJiYoYnQuUHJvcHM9VmUsYnQuQ3VzdHByb3BzPWV0KSx4LmJvb2tTaGVldHMmJnR5cGVvZiBlZTwidSImJihidC5TaGVl''@;'; put 'put ''dE5hbWVzPWVlKSx4LmJvb2tTaGVldHM/YnQuU2hlZXROYW1lczp4LmJvb2tQcm9wcykpcmV0dXJuIGJ0O2VlPXt9O3ZhciBKZT17fTt4LmJvb2tEZXBzJiZWLmNhbGNjaGFpbiYmKEplPWZ1bmN0aW9uIGNPKGcseCx3KXtyZXR1cm4iLmJpbiI9PT14LnNsaWNlKC00KT9mdW5jdGlvbiB2Zihn''@;'; put 'put ''KXt2YXIgVj1bXTtyZXR1cm4gQm8oZyxmdW5jdGlvbihsZSxvZSxkZSl7aWYoNjM9PT1kZSlWLnB1c2gobGUpO2Vsc2UgaWYoISgob2V8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjB8fChvZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQg''@;'; put 'put ''IitkZSsiICIrb2UpfSksVn0oZyk6ZnVuY3Rpb24gWE0oZyl7dmFyIHg9W107aWYoIWcpcmV0dXJuIHg7dmFyIHc9MTtyZXR1cm4oZy5tYXRjaChHdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe3ZhciBXPWZyKFYpO3N3aXRjaChXWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxjYWxjQ2hhaW4i''@;'; put 'put ''OmNhc2UiPGNhbGNDaGFpbj4iOmNhc2UiPC9jYWxjQ2hhaW4+IjpicmVhaztjYXNlIjxjIjpkZWxldGUgV1swXSxXLmk/dz1XLmk6Vy5pPXcseC5wdXNoKFcpfX0pLHh9KGcpfSh5dChnLGUwKFYuY2FsY2NoYWluKSksVi5jYWxjY2hhaW4pKTt2YXIgU3QsQXQsZnQ9MCxSdD17fSx6dD1SZS5T''@;'; put 'put ''aGVldHM7VmUuV29ya3NoZWV0cz16dC5sZW5ndGgsVmUuU2hlZXROYW1lcz1bXTtmb3IodmFyIFNuPTA7U24hPXp0Lmxlbmd0aDsrK1NuKVZlLlNoZWV0TmFtZXNbU25dPXp0W1NuXS5uYW1lO3ZhciBscj1XPyJiaW4iOiJ4bWwiLG1uPVYud29ya2Jvb2tzWzBdLmxhc3RJbmRleE9mKCIvIiks''@;'; put 'put ''ZHI9KFYud29ya2Jvb2tzWzBdLnNsaWNlKDAsbW4rMSkrIl9yZWxzLyIrVi53b3JrYm9va3NbMF0uc2xpY2UobW4rMSkrIi5yZWxzIikucmVwbGFjZSgvXlwvLywiIik7UXIoZyxkcil8fChkcj0ieGwvX3JlbHMvd29ya2Jvb2suIitscisiLnJlbHMiKTt2YXIgR249dTEocnIoZyxkciwhMCks''@;'; put 'put ''ZHIpLEhuPUduLGhyPVtdO0duJiYoUmUmJlJlLkV4dGVybiYmUmUuRXh0ZXJuLmxlbmd0aCYmUmUuRXh0ZXJuLmZvckVhY2goZnVuY3Rpb24ocHIsTG4pe3ZhciBaaT0oIi94bC8iK0duWyIhaWQiXVtwcl0uVGFyZ2V0KS5yZXBsYWNlKC9bXC9dW1wvXS9nLCIvIiksX2k9Vi5saW5rcy5pbmRl''@;'; put 'put ''eE9mKFppKTtfaT4tMSYmKGhyW0xuXT1EZVtfaV0pfSksUmUmJmRlbGV0ZSBSZS5FeHRlcm4pLEduJiYoR249ZnVuY3Rpb24geUUoZyx4KXtpZighZylyZXR1cm4gMDt0cnl7Zz14Lm1hcChmdW5jdGlvbihWKXtyZXR1cm4gVi5pZHx8KFYuaWQ9Vi5zdHJSZWxJRCksW1YubmFtZSxnWyIhaWQi''@;'; put 'put ''XVtWLmlkXS5UYXJnZXQsYjkoZ1siIWlkIl1bVi5pZF0uVHlwZSldfSl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGcmJjAhPT1nLmxlbmd0aD9nOm51bGx9KEduLFJlLlNoZWV0cykpO3ZhciBObj1RcihnLCJ4bC93b3Jrc2hlZXRzL3NoZWV0LnhtbCIpPzE6MCx0cj1bXSx2aT1bXTtlOmZv''@;'; put 'put ''cihmdD0wO2Z0IT1WZS5Xb3Jrc2hlZXRzOysrZnQpe3ZhciBQaT0ic2hlZXQiO2lmKEduJiZHbltmdF0/KFN0PSJ4bC8iK0duW2Z0XVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxRcihnLFN0KXx8KFN0PUduW2Z0XVsxXSksUXIoZyxTdCl8fChTdD1kci5yZXBsYWNlKC9fcmVsc1wvLiok''@;'; put 'put ''LywiIikrR25bZnRdWzFdKSxQaT1HbltmdF1bMl0pOlN0PShTdD0ieGwvd29ya3NoZWV0cy9zaGVldCIrKGZ0KzEtTm4pKyIuIitscikucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxBdD1TdC5yZXBsYWNlKC9eKC4qKShcLykoW15cL10qKSQvLCIkMS9fcmVscy8kMy5yZWxzIiksdHIu''@;'; put 'put ''cHVzaChTdCkseCYmbnVsbCE9eC5zaGVldHMpc3dpdGNoKHR5cGVvZiB4LnNoZWV0cyl7Y2FzZSJudW1iZXIiOmlmKGZ0IT14LnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihWZS5TaGVldE5hbWVzW2Z0XS50b0xvd2VyQ2FzZSgpIT14LnNoZWV0cy50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpKWNvbnRpbnVlIGU7YnJlYWs7ZGVmYXVsdDppZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KHguc2hlZXRzKSl7Zm9yKHZhciBxaT0wLHRhPTA7dGEhPXguc2hlZXRzLmxlbmd0aDsrK3RhKSJudW1iZXIiPT10eXBlb2YgeC5zaGVldHNbdGFdJiZ4LnNoZWV0c1t0YV09PWZ0JiYo''@;'; put 'put ''cWk9MSksInN0cmluZyI9PXR5cGVvZiB4LnNoZWV0c1t0YV0mJnguc2hlZXRzW3RhXS50b0xvd2VyQ2FzZSgpPT1WZS5TaGVldE5hbWVzW2Z0XS50b0xvd2VyQ2FzZSgpJiYocWk9MSk7aWYoIXFpKWNvbnRpbnVlIGV9fWlmKCF4LnNraXBQYXJzZSl7dmFyIElpPWNZKGcsU3QsQXQsVmUuU2hl''@;'; put 'put ''ZXROYW1lc1tmdF0sZnQsUnQsZWUsUGkseCxSZSxvZSxkZSk7SWkmJklpWyIhTERQIl0mJih2aVtmdF09SWlbIiFMRFAiXSxkZWxldGUgSWlbIiFMRFAiXSl9fWlmKHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSIpZm9yKGZ0PTA7ZnQ8dzkubGVuZ3RoOysrZnQpcGFyc2Vfc2hlZXRfcGl2''@;'; put 'put ''b3QuYXBwbHkobnVsbCx3OVtmdF0pO2lmKGJ0PXtEaXJlY3Rvcnk6VixXb3JrYm9vazpSZSxQcm9wczpWZSxDdXN0cHJvcHM6ZXQsRGVwczpKZSxTaGVldHM6ZWUsU2hlZXROYW1lczpWZS5TaGVldE5hbWVzLFN0cmluZ3M6cTcsU3R5bGVzOmRlLFRoZW1lczpvZSxTU0Y6Yi5nZXRfdGFibGUo''@;'; put 'put ''KX0sIXguc2tpcFBhcnNlKXtpZihmdW5jdGlvbiBGVShnKXshZ3x8IWcuV29ya2Jvb2t8fCFnLldvcmtib29rLk5hbWVzfHxnLldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oeCl7aWYoeC5OYW1lJiYiX3hsbm0uIj09eC5OYW1lLnNsaWNlKDAsNikmJigiX3hsbm0uUHJpbnRfQXJl''@;'; put 'put ''YSI9PXguTmFtZXx8Il94bG5tLlByaW50X1RpdGxlcyI9PXguTmFtZSkpe3ZhciB3PWcuU2hlZXRzW2cuU2hlZXROYW1lc1t4LlNoZWV0XV07aWYodyl7d1siIXByaW50Il18fCh3WyIhcHJpbnQiXT17fSksd1siIXByaW50Il0ucHJvcHN8fCh3WyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIFY9''@;'; put 'put ''d1siIXByaW50Il0sVz14LlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PXguTmFtZSl7Vy5pbmRleE9mKCIhIik+LTEmJihXPVcuc2xpY2UoVy5pbmRleE9mKCIhIikrMSkpO3ZhciBlZT1TYShXPVcucmVwbGFjZSgvWyRdL2csIiIpKTtWLmFyZWE9ZWV9ZWxzZSJfeGxubS5QcmludF9UaXRs''@;'; put 'put ''ZXMiPT14Lk5hbWUmJihWLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxXLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihsZSl7dmFyIGRlPXdyKGxlLnNsaWNlKGxlLmluZGV4T2YoIiEiKSsxKS5yZXBsYWNlKC9bJF0vZywiIikpO2RlLnMuYz4tMSYmKFYudGl0bGVz''@;'; put 'put ''LnMuYz1kZS5zLmMpLGRlLmUuYz4tMSYmKFYudGl0bGVzLmUuYz1kZS5lLmMpLGRlLnMucj4tMSYmKFYudGl0bGVzLnMucj1kZS5zLnIpLGRlLmUucj4tMSYmKFYudGl0bGVzLmUucj1kZS5lLnIpfSkpfX19KX0oYnQpLHgmJnguYm9va0ZpbGVzJiYoYnQua2V5cz13LGJ0LmZpbGVzPWcuZmls''@;'; put 'put ''ZXMpLHgmJnguYm9va1ZCQSYmKFYudmJhLmxlbmd0aD4wP2J0LnZiYXJhdz15dChnLGUwKFYudmJhWzBdKSwhMCk6Vi5kZWZhdWx0cyYmImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI9PT1WLmRlZmF1bHRzLmJpbiYmKGJ0LnZiYXJhdz15dChnLCJ4bC92YmFQcm9qZWN0''@;'; put 'put ''LmJpbiIsITApKSksSG4mJkhuWyIhaWQiXSl7Zm9yKHZhciBTcj1bXSxGbj0xO0ZuPD0xMDI0OysrRm4pSG5bIiFpZCJdWyJySWQiK0ZuXSYmSG5bIiFpZCJdWyJySWQiK0ZuXS5UeXBlJiYvY3VzdG9tWG1sJC8udGVzdChIblsiIWlkIl1bInJJZCIrRm5dLlR5cGUpJiZTci5wdXNoKGxuKEhu''@;'; put 'put ''WyIhaWQiXVsicklkIitGbl0uVGFyZ2V0LFYud29ya2Jvb2tzWzBdKSk7U3IubGVuZ3RoPjAmJihidC5DdXN0b21YTUw9W10sU3IuZm9yRWFjaChmdW5jdGlvbihwcil7dmFyIExuPXtkYXRhOnJyKGcsZTAocHIpKX0sUHI9YXUocHIpO3RyeXt2YXIgWmk9dTEocnIoZyxlMChQciksITApLFBy''@;'; put 'put ''KTtpZihaaSlmb3IodmFyIF9pPTE7X2k8PTEwMjQ7KytfaSlaaVsiIWlkIl1bInJJZCIrX2ldJiZaaVsiIWlkIl1bInJJZCIrX2ldLlR5cGUmJi9jdXN0b21YbWxQcm9wcyQvLnRlc3QoWmlbIiFpZCJdWyJySWQiK19pXS5UeXBlKSYmKExuLnByb3BzPXJyKGcsZTAobG4oWmlbIiFpZCJdWyJy''@;'; put 'put ''SWQiK19pXS5UYXJnZXQscHIpKSkpfWNhdGNoe31idC5DdXN0b21YTUwucHVzaChMbil9KSl9dmFyIExyPWF0KGcsInhsL21vZGVsL2l0ZW0uZGF0YSIsITApO0xyJiYoYnQubW9kZWw9THIpLFYuY29ubiYmKGJ0LmNvbm49eXQoZyxlMChWLmNvbm4pLCEwKSksaHIubGVuZ3RoJiYoYnQuRXh0''@;'; put 'put ''ZXJuYWxXQj1ociksUmUmJihSZS5QUEk9UGcpfXJldHVybiB4LnRlbXBsYXRlJiYoYnQuX3dzcGF0aHM9dHIsYnQuX3N0eXBhdGg9ZTAoVi5zdHlsZXx8IiIpLGJ0Ll93YnBhdGg9ZTAoVi53b3JrYm9va3NbMF18fCJ4bC93b3JrYm9vay54bWwiKSxidC5fdm1scGF0aHM9dmksYnQuX3dicmVs''@;'; put 'put ''c3BhdGg9ZHIsYnQuX2N0PXJyKGcsIltDb250ZW50X1R5cGVzXS54bWwiKSxidC5maWxlcz1nLmZpbGVzLHVZKGJ0LGcseCkpLGJ0fWZ1bmN0aW9uIGRZKGcseCl7dmFyIHc9eHx8e307dy5wYXNzd29yZHx8KHcucGFzc3dvcmQ9IlZlbHZldFN3ZWF0c2hvcCIpO3ZhciBWPSJXb3JrYm9vayIs''@;'; put 'put ''Vz11ZS5maW5kKGcsVik7dHJ5e2lmKCEoVz11ZS5maW5kKGcsVj0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFXLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrVik7aWYoZnVuY3Rpb24gcUkoZyl7dmFyIHg9e307eC5pZD1nLnJl''@;'; put 'put ''YWRfc2hpZnQoMCwibHBwNCIpLHguUj1oZihnLDQpLHguVT1oZihnLDQpLHguVz1oZihnLDQpfShXLmNvbnRlbnQpLCEoVz11ZS5maW5kKGcsVj0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IVcuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxl''@;'; put 'put ''IG1pc3NpbmcgIitWKTt2YXIgZWU9ZnVuY3Rpb24gSkkoZyl7dmFyIHg9W107Zy5sKz00O2Zvcih2YXIgdz1nLnJlYWRfc2hpZnQoNCk7dy0tID4wOyl4LnB1c2goX20oZykpO3JldHVybiB4fShXLmNvbnRlbnQpO2lmKDEhPT1lZS5sZW5ndGh8fDEhPT1lZVswXS5jb21wcy5sZW5ndGh8fDAh''@;'; put 'put ''PT1lZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1lZVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1lZVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrVik7aWYoIShXPXVlLmZpbmQo''@;'; put 'put ''ZyxWPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhVy5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1YpO3ZhciBsZT1mdW5jdGlvbiBETShnKXt2YXIgeD1bXTtnLmwrPTQ7''@;'; put 'put ''Zm9yKHZhciB3PWcucmVhZF9zaGlmdCg0KTt3LS0gPjA7KXgucHVzaChnLnJlYWRfc2hpZnQoMCwibHBwNCIpKTtyZXR1cm4geH0oVy5jb250ZW50KTtpZigxIT1sZS5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9bGVbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBF''@;'; put 'put ''bmNyeXB0ZWQgZmlsZSBiYWQgIitWKTtpZighKFc9dWUuZmluZChnLFY9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFXLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNz''@;'; put 'put ''aW5nICIrVik7IWZ1bmN0aW9uIGRVKGcpe3ZhciB4PWZ1bmN0aW9uIHc3KGcpe3ZhciB4PXt9O3JldHVybiBnLnJlYWRfc2hpZnQoNCksZy5sKz00LHguaWQ9Zy5yZWFkX3NoaWZ0KDAsImxwcDQiKSx4Lm5hbWU9Zy5yZWFkX3NoaWZ0KDAsImxwcDQiKSx4LlI9aGYoZyw0KSx4LlU9aGYoZyw0''@;'; put 'put ''KSx4Llc9aGYoZyw0KSx4fShnKTtpZih4LmVuYW1lPWcucmVhZF9zaGlmdCgwLCI4bHBwNCIpLHguYmxrc3o9Zy5yZWFkX3NoaWZ0KDQpLHguY21vZGU9Zy5yZWFkX3NoaWZ0KDQpLDQhPWcucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1''@;'; put 'put ''cm4geH0oVy5jb250ZW50KX1jYXRjaHt9aWYoIShXPXVlLmZpbmQoZyxWPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFXLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrVik7dmFyIG9lPWZ1bmN0aW9uIEZfKGcpe3ZhciB4PWhmKGcpO3N3''@;'; put 'put ''aXRjaCh4Lk1pbm9yKXtjYXNlIDI6cmV0dXJuW3guTWlub3IsQW9lKGcpXTtjYXNlIDM6cmV0dXJuW3guTWlub3IsUUkoKV07Y2FzZSA0OnJldHVyblt4Lk1pbm9yLGVSKGcpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAi''@;'; put 'put ''K3guTWlub3IpfShXLmNvbnRlbnQpO2lmKCEoVz11ZS5maW5kKGcsVj0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFXLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrVik7aWYoND09b2VbMF0pcmV0dXJuIGZ1bmN0aW9uIFJPKGcseCx3''@;'; put 'put ''LFYpe3ZhciBXPXVlLnV0aWxzLnByZXBfYmxvYjtpZigiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQiIT1nLnVyaSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVDTUEtMzc2IEFnaWxlIFVSSSAiK2cudXJpKTt2YXIg''@;'; put 'put ''ZWU9Zy5lbmNzWzBdLGxlPWVlLmhhc2hBbGdvcml0aG0sb2U9ImFlcy0yNTYtY2JjIixkZT1CdWZmZXIuZnJvbShlZS5zYWx0VmFsdWUsImJhc2U2NCIpLERlPUJ1ZmZlci5mcm9tKGcuc2FsdFZhbHVlLCJiYXNlNjQiKSxSZT0rZWUuYmxvY2tTaXplLFZlPStlZS5rZXlCaXRzPj4zLEdlPXdj''@;'; put 'put ''KEJ1ZmZlci5jb25jYXQoW2RlLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsdykpXSksbGUpLGV0PUJ1ZmZlci5hbGxvYyg0KTtXKGV0LDApO2Zvcih2YXIgYnQ9MDtidDxlZS5zcGluQ291bnQ7KytidClldC5sPTAsZXQud3JpdGVfc2hpZnQoNCxidCksR2U9d2MoQnVm''@;'; put 'put ''ZmVyLmNvbmNhdChbZXQsR2VdKSxsZSk7dmFyIEplPWZ1bmN0aW9uKE5uLHRyLHZpLFBpKXt2YXIgcWk9d2MoQnVmZmVyLmNvbmNhdChbTm4sQnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSldKSxQaSksdGE9cWkubGVuZ3RoPj12aT9xaS5zbGljZSgwLHZpKTpC''@;'; put 'put ''dWZmZXIuYWxsb2ModmkpO2lmKHFpLmxlbmd0aDx2aSl7Zm9yKHZhciBJaT0wO0lpPHFpLmxlbmd0aDsrK0lpKXRhW0lpXT1xaVtJaV07Zm9yKDtJaTx2aTsrK0lpKXRhW0lpXT01NH1yZXR1cm4gdGF9KEdlLDAsVmUsbGUpO3N3aXRjaChlZS5jaXBoZXJBbGdvcml0aG0pe2Nhc2UiQUVTIjpp''@;'; put 'put ''ZigiQ2hhaW5pbmdNb2RlQ0JDIiE9ZWUuY2lwaGVyQ2hhaW5pbmcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgY2hhaW5pbmcgIitlZS5jaXBoZXJDaGFpbmluZyk7b2U9ImFlcy0iK2VlLmtleUJpdHMrIi1jYmMiO2JyZWFrO2Nhc2UiUkMyIjpvZT0icmMyIjticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIitlZS5jaXBoZXJBbGdvcml0aG0pfWRlPWZ1bmN0aW9uKGhyKXtmb3IodmFyIE5uPUJ1ZmZlci5hbGxvYyhSZSksdHI9MDt0cjxSZTsrK3RyKU5uW3RyXT10cjxoci5sZW5ndGg/aHJbdHJdOjU0O3JldHVy''@;'; put 'put ''biBObn0oZGUpO3ZhciBmdD1CdWZmZXIuZnJvbShlZS5lbmNyeXB0ZWRLZXlWYWx1ZSwiYmFzZTY0IiksUnQ9R3AoSmUsZGUsb2UpLnVwZGF0ZShmdCksU3Q9R3Aod2MoQnVmZmVyLmNvbmNhdChbR2UsQnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSldKSxsZSkuc2xp''@;'; put 'put ''Y2UoMCxWZSksZGUsb2UpLnVwZGF0ZShCdWZmZXIuZnJvbShlZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZSwiYmFzZTY0IikpLEF0PXdjKEdwKHdjKEJ1ZmZlci5jb25jYXQoW0dlLEJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pXSksbGUpLnNsaWNlKDAs''@;'; put 'put ''VmUpLGRlLG9lKS51cGRhdGUoQnVmZmVyLmZyb20oZWUuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQsImJhc2U2NCIpKSxsZSksenQ9K2VlLmhhc2hTaXplfHxNYXRoLm1pbihTdC5sZW5ndGgsQXQubGVuZ3RoKTtpZigwIT1TdC5zbGljZSgwLHp0KS5jb21wYXJlKEF0LnNsaWNlKDAsenQp''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO1coeCwwKTt2YXIgU249eC5yZWFkX3NoaWZ0KDQpO3gubCs9NDt2YXIgbHI9W10sbW49QnVmZmVyLmNvbmNhdChbRGUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKFcobW4pLGJ0PTA7eC5sPHgubGVuZ3RoOyltbi5sPWRlLmxl''@;'; put 'put ''bmd0aCxtbi53cml0ZV9zaGlmdCg0LGJ0KSxsci5wdXNoKEdwKFJ0LHdjKEJ1ZmZlci5mcm9tKG1uKSxsZSkuc2xpY2UoMCwxNiksb2UpLnVwZGF0ZShCdWZmZXIuZnJvbSh4LnNsaWNlKHgubCx4LmwrNDA5NikpKSkseC5sKz00MDk2LCsrYnQ7dmFyIEduPUJ1ZmZlci5jb25jYXQobHIpLnNs''@;'; put 'put ''aWNlKDAsU24pLEhuPXJuKFYpO3JldHVybiBIbi50eXBlPSJidWZmZXIiLGw2KEduLEhuKX0ob2VbMV0sVy5jb250ZW50LHcucGFzc3dvcmR8fCIiLHcpO2lmKDI9PW9lWzBdKXJldHVybiBmdW5jdGlvbiBMTyhnLHgsdyxWKXt2YXIgVz11ZS51dGlscy5wcmVwX2Jsb2I7aWYoIlN0ZCIhPT1n''@;'; put 'put ''LnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBlZT1nLnYuU2FsdCxsZT1nLnYuVmVyaWZpZXIsb2U9Zy52LlZlcmlmaWVySGFzaDtpZigzNiE9Zy5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRhcmQgRW5jcnlw''@;'; put 'put ''dGlvbiBiYWQgRmxhZ3MiKTt2YXIgZGU9MCxEZT0iIjtzd2l0Y2goZy5oLkFsZ0lEKXtjYXNlIDI2MTI2OmRlPTEyOCxEZT0iYWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2UgMjYxMjc6ZGU9MTk2LERlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODpkZT0yNTYsRGU9ImFlcy0yNTYtZWNi''@;'; put 'put ''IjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigzMjc3MiE9Zy5oLkFsZ0lESGFzaCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoZy5oLktleVNpemUhPWRlKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT1nLmguUHJvdmlkZXJUeXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgdW5zdXBwb3J0ZWQgUHJvdmlkZXJUeXBlICIrZy5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNlZCBSU0EgYW5k''@;'; put 'put ''IEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PWcuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3ZpZGVyICIrZy5oLkNTUE5hbWUpO3ZhciBWZT0iU0hBLTEiLEdlPWRlPj4zLGV0PXdjKEJ1ZmZlci5jb25jYXQoW2VlLGNw''@;'; put 'put ''dGFibGUudXRpbHMuZW5jb2RlKDEyMDAsdyldKSxWZSksYnQ9QnVmZmVyLmFsbG9jKDQpO1coYnQsMCk7Zm9yKHZhciBKZT0wO0plPDVlNDsrK0plKWJ0Lmw9MCxidC53cml0ZV9zaGlmdCg0LEplKSxldD13YyhCdWZmZXIuY29uY2F0KFtidCxldF0pLFZlKTtidC5sPTAsYnQud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwwKTt2YXIgbHIsbW4sZHIsR24sSG4sUnQ9KEduPShkcj1mdW5jdGlvbihObix0cix2aSl7Zm9yKHZhciBQaT1CdWZmZXIuYWxsb2MoNjQpLHFpPTA7cWk8UGkubGVuZ3RoOysrcWkpUGlbcWldPU5uO2ZvcihxaT0wO3FpPHRyLmxlbmd0aDsrK3FpKVBpW3FpXV49dHJbcWldO3JldHVy''@;'; put 'put ''biB3YyhQaSx2aSl9KSg1NCxscj13YyhCdWZmZXIuY29uY2F0KFtldCxidF0pLFZlKSxtbj1WZSksSG49ZHIoOTIsbHIsbW4pLEJ1ZmZlci5jb25jYXQoW0duLEhuXSkuc2xpY2UoMCxHZSkpO2lmKEdwKFJ0LEJ1ZmZlci5hbGxvYygwKSxEZSkudXBkYXRlKG9lKS5zbGljZSgwLDIwKS5jb21w''@;'; put 'put ''YXJlKHdjKEdwKFJ0LEJ1ZmZlci5hbGxvYygwKSxEZSkudXBkYXRlKGxlKSxWZSkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7Vyh4LDApO3ZhciBTdD14LnJlYWRfc2hpZnQoNCk7eC5sKz00O3ZhciBBdD1bXTtmb3IoSmU9MDt4Lmw8eC5sZW5ndGg7KUF0LnB1c2go''@;'; put 'put ''R3AoUnQsQnVmZmVyLmFsbG9jKDApLERlKS51cGRhdGUoeC5zbGljZSh4LmwseC5sKzQwOTYpKSkseC5sKz00MDk2LCsrSmU7cmV0dXJuIGw2KEJ1ZmZlci5jb25jYXQoQXQpLnNsaWNlKDAsU3QpLFYpfShvZVsxXSxXLmNvbnRlbnQsdy5wYXNzd29yZHx8IiIsdyk7dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfWZ1bmN0aW9uIGhZKGcseCl7aWYoIXgudGVtcGxhdGUpe2lmKCJvZHMiPT14LmJvb2tUeXBlKXJldHVybiBmRShnLHgpO0ZnKHgmJnguUFBJfHw5NiksZyYmIWcuU1NGJiYoZy5TU0Y9Yi5nZXRfdGFibGUoKSksZyYmZy5TU0YmJihxKGIp''@;'; put 'put ''LGIubG9hZF90YWJsZShnLlNTRikseC5yZXZzc2Y9YmUoZy5TU0YpLHgucmV2c3NmW2cuU1NGWzY1NTM1XV09MCx4LnNzZj1nLlNTRiksZy5TdHlsZXM9e0ZvbnRzOnguRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNj''@;'; put 'put ''aGVtZToibWlub3IifV0sRmlsbHM6eC5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6eC5Cb3JkZXJzPVt7fV0sRFhGOnguRFhGPWcuU3R5bGVzJiZnLlN0eWxlcy5EWEZ8fFtdLFRhYmxlOnguVGFibGU9Zy5TdHlsZXMmJmcuU3R5''@;'; put 'put ''bGVzLlRhYmxlfHxbXX0seC5vdmVycmlkZU1EVz94bD14Lm92ZXJyaWRlTURXOlNtKHguRm9udHNbMF0pLHgucmVscz17fSx4LndicmVscz17fSx4LlN0cmluZ3M9W10seC5TdHJpbmdzLkNvdW50PTAseC5TdHJpbmdzLlVuaXF1ZT0wLEo3P3gucmV2U3RyaW5ncz1uZXcgTWFwOih4LnJldlN0''@;'; put 'put ''cmluZ3M9e30seC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgeC5yZXZTdHJpbmdzLmZvbyk7dmFyIHc9Inhsc2IiPT14LmJvb2tUeXBlPyJiaW4iOiJ4bWwiLFY9QlIuaW5kZXhPZih4LmJvb2tUeXBlKT4tMSxXPXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltd''@;'; put 'put ''LG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10sdmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxw''@;'; put 'put ''aXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTskcCh4PXh8fHt9KTt2''@;'; put 'put ''YXIgZWU9c2koKSxsZT0iIixvZT0wO2lmKHguY2VsbFhmcz1bXSx4LmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSx5MSh4LmNlbGxYZnMseC5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2VuZXJhbDowfX0pLGcuUHJvcHN8fChnLlByb3BzPXt9KSx3bihlZSxsZT0iZG9jUHJvcHMv''@;'; put 'put ''Y29yZS54bWwiLGZ1bmN0aW9uIGZfKGcseCl7dmFyIHc9eHx8e30sVj1ba2ksbzddLFc9e307aWYoIWcmJiF3LlByb3BzKXJldHVybiBWLmpvaW4oIiIpO2cmJihudWxsIT1nLkNyZWF0ZWREYXRlJiZGcCgiZGN0ZXJtczpjcmVhdGVkIiwic3RyaW5nIj09dHlwZW9mIGcuQ3JlYXRlZERhdGU/''@;'; put 'put ''Zy5DcmVhdGVkRGF0ZTpkMyhnLkNyZWF0ZWREYXRlLHcuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxWLFcpLG51bGwhPWcuTW9kaWZpZWREYXRlJiZGcCgiZGN0ZXJtczptb2RpZmllZCIsInN0cmluZyI9PXR5cGVvZiBnLk1vZGlmaWVkRGF0ZT9nLk1vZGlmaWVkRGF0ZTpk''@;'; put 'put ''MyhnLk1vZGlmaWVkRGF0ZSx3LldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sVixXKSk7Zm9yKHZhciBlZT0wO2VlIT1kMS5sZW5ndGg7KytlZSl7dmFyIGxlPWQxW2VlXSxvZT13LlByb3BzJiZudWxsIT13LlByb3BzW2xlWzFdXT93LlByb3BzW2xlWzFdXTpnP2dbbGVbMV1d''@;'; put 'put ''Om51bGw7ITA9PT1vZT9vZT0iMSI6ITE9PT1vZT9vZT0iMCI6Im51bWJlciI9PXR5cGVvZiBvZSYmKG9lPVN0cmluZyhvZSkpLG51bGwhPW9lJiZGcChsZVswXSxvZSxudWxsLFYsVyl9cmV0dXJuIFYubGVuZ3RoPjImJihWW1YubGVuZ3RoXT0iPC9jcDpjb3JlUHJvcGVydGllcz4iLFZbMV09''@;'; put 'put ''VlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksVi5qb2luKCIiKX0oZy5Qcm9wcyx4KSksVy5jb3JlcHJvcHMucHVzaChsZSksJHMoeC5yZWxzLDIsbGUseWEuQ09SRV9QUk9QUyksbGU9ImRvY1Byb3BzL2FwcC54bWwiLCFnLlByb3BzfHwhZy5Qcm9wcy5TaGVldE5hbWVzKWlmKGcuV29ya2Jvb2sm''@;'; put 'put ''JmcuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIGRlPVtdLERlPTA7RGU8Zy5TaGVldE5hbWVzLmxlbmd0aDsrK0RlKTIhPShnLldvcmtib29rLlNoZWV0c1tEZV18fHt9KS5IaWRkZW4mJmRlLnB1c2goZy5TaGVldE5hbWVzW0RlXSk7Zy5Qcm9wcy5TaGVldE5hbWVzPWRlfWVsc2UgZy5Qcm9w''@;'; put 'put ''cy5TaGVldE5hbWVzPWcuU2hlZXROYW1lcztnLlByb3BzLldvcmtzaGVldHM9Zy5Qcm9wcy5TaGVldE5hbWVzLmxlbmd0aCx3bihlZSxsZSxmdW5jdGlvbiBvTShnKXt2YXIgeD1bXSx3PXpyO3JldHVybiBnfHwoZz17fSksZy5BcHBsaWNhdGlvbj0iU2hlZXRKUyIseFt4Lmxlbmd0aF09a2ks''@;'; put 'put ''eFt4Lmxlbmd0aF09czcsSmguZm9yRWFjaChmdW5jdGlvbihWKXtpZih2b2lkIDAhPT1nW1ZbMV1dKXt2YXIgVztzd2l0Y2goVlsyXSl7Y2FzZSJzdHJpbmciOlc9b2koU3RyaW5nKGdbVlsxXV0pKTticmVhaztjYXNlImJvb2wiOlc9Z1tWWzFdXT8idHJ1ZSI6ImZhbHNlIn12b2lkIDAhPT1X''@;'; put 'put ''JiYoeFt4Lmxlbmd0aF09dyhWWzBdLFcpKX19KSx4W3gubGVuZ3RoXT13KCJIZWFkaW5nUGFpcnMiLHcoInZ0OnZlY3RvciIsdygidnQ6dmFyaWFudCIsIjx2dDpscHN0cj5Xb3Jrc2hlZXRzPC92dDpscHN0cj4iKSt3KCJ2dDp2YXJpYW50Iix3KCJ2dDppNCIsU3RyaW5nKGcuV29ya3NoZWV0''@;'; put 'put ''cykpKSx7c2l6ZToyLGJhc2VUeXBlOiJ2YXJpYW50In0pKSx4W3gubGVuZ3RoXT13KCJUaXRsZXNPZlBhcnRzIix3KCJ2dDp2ZWN0b3IiLGcuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oVil7cmV0dXJuIjx2dDpscHN0cj4iK29pKFYpKyI8L3Z0Omxwc3RyPiJ9KS5qb2luKCIiKSx7c2l6ZTpn''@;'; put 'put ''LldvcmtzaGVldHMsYmFzZVR5cGU6Imxwc3RyIn0pKSx4Lmxlbmd0aD4yJiYoeFt4Lmxlbmd0aF09IjwvUHJvcGVydGllcz4iLHhbMV09eFsxXS5yZXBsYWNlKCIvPiIsIj4iKSkseC5qb2luKCIiKX0oZy5Qcm9wcykpLFcuZXh0cHJvcHMucHVzaChsZSksJHMoeC5yZWxzLDMsbGUseWEuRVhU''@;'; put 'put ''X1BST1BTKSxnLkN1c3Rwcm9wcyE9PWcuUHJvcHMmJnhlKGcuQ3VzdHByb3BzfHx7fSkubGVuZ3RoPjAmJih3bihlZSxsZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVuY3Rpb24gSHAoZyl7dmFyIHg9W2tpLFNnXTtpZighZylyZXR1cm4geC5qb2luKCIiKTt2YXIgdz0xO3JldHVybiB4ZShn''@;'; put 'put ''KS5mb3JFYWNoKGZ1bmN0aW9uKFcpeysrdyx4W3gubGVuZ3RoXT16cigicHJvcGVydHkiLGZ1bmN0aW9uIGZnKGcseCl7c3dpdGNoKHR5cGVvZiBnKXtjYXNlInN0cmluZyI6dmFyIHc9enIoInZ0Omxwd3N0ciIsb2koZykpO3JldHVybiB4JiYodz13LnJlcGxhY2UoLyZxdW90Oy9nLCJfeDAw''@;'; put 'put ''MjJfIikpLHc7Y2FzZSJudW1iZXIiOnJldHVybiB6cigoMHxnKT09Zz8idnQ6aTQiOiJ2dDpyOCIsb2koU3RyaW5nKGcpKSk7Y2FzZSJib29sZWFuIjpyZXR1cm4genIoInZ0OmJvb2wiLGc/InRydWUiOiJmYWxzZSIpfWlmKGcgaW5zdGFuY2VvZiBEYXRlKXJldHVybiB6cigidnQ6ZmlsZXRp''@;'; put 'put ''bWUiLGQzKGcpKTt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBzZXJpYWxpemUgIitnKX0oZ1tXXSwhMCkse2ZtdGlkOiJ7RDVDREQ1MDUtMkU5Qy0xMDFCLTkzOTctMDgwMDJCMkNGOUFFfSIscGlkOncsbmFtZTpvaShXKX0pfSkseC5sZW5ndGg+MiYmKHhbeC5sZW5ndGhdPSI8L1Byb3Bl''@;'; put 'put ''cnRpZXM+Iix4WzFdPXhbMV0ucmVwbGFjZSgiLz4iLCI+IikpLHguam9pbigiIil9KGcuQ3VzdHByb3BzKSksVy5jdXN0cHJvcHMucHVzaChsZSksJHMoeC5yZWxzLDQsbGUseWEuQ1VTVF9QUk9QUykpO3ZhciBSZT1bXSxWZT1bXTtmb3Iob2U9MTtvZTw9Zy5TaGVldE5hbWVzLmxlbmd0aDsr''@;'; put 'put ''K29lKXt2YXIgYnQ9eyIhaWQiOnt9fSxKZT1nLlNoZWV0c1tnLlNoZWV0TmFtZXNbb2UtMV1dLGZ0PShKZXx8e30pWyIhdHlwZSJdfHwic2hlZXQiO3N3aXRjaChmdCl7Y2FzZSJjaGFydCI6aWYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Iil7d24oZWUsbGU9InhsL2NoYXJ0c2hlZXRzL3No''@;'; put 'put ''ZWV0IitvZSsiLiIrdyxSWihvZS0xLGxlLHgsZyxidCkpLFcuY2hhcnRzLnB1c2gobGUpLCRzKHgud2JyZWxzLC0xLCJjaGFydHNoZWV0cy9zaGVldCIrb2UrIi4iK3cseWEuQ1MpO2JyZWFrfWRlZmF1bHQ6d24oZWUsbGU9InhsL3dvcmtzaGVldHMvc2hlZXQiK29lKyIuIit3LElaKG9lLTEs''@;'; put 'put ''bGUseCxnLGJ0KSksVy5zaGVldHMucHVzaChsZSksJHMoeC53YnJlbHMsLTEsIndvcmtzaGVldHMvc2hlZXQiK29lKyIuIit3LHlhLldTWzBdKX1pZihKZSl7ImNoYXJ0Ij09ZnQmJiFKZVsiIXBvcyJdJiYoSmVbIiFwb3MiXT17eDowLHk6MCx3OjkwMCxoOjYwMH0pO3ZhciBSdD1KZVsiIWNv''@;'; put 'put ''bW1lbnRzIl0sU3Q9ITE7aWYoUnQmJlJ0Lmxlbmd0aD4wKXt2YXIgQXQ9InhsL2NvbW1lbnRzIitvZSsiLiIrdzt3bihlZSxBdCxQWihSdCxBdCx4KSksVy5jb21tZW50cy5wdXNoKEF0KSwkcyhidCwtMSwiLi4vY29tbWVudHMiK29lKyIuIit3LHlhLkNNTlQpLFN0PSEwfShKZVsiIWNvbnRy''@;'; put 'put ''b2xzIl18fFtdKS5sZW5ndGg+MCYmKFN0PSEwKSxKZVsiIWxlZ2FjeSJdJiZTdCYmd24oZWUsInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK29lKyIudm1sIixPUihvZSxKZVsiIWNvbW1lbnRzIl0sSmVbIiFjb250cm9scyJdLEplKSksSmVbIiFsZWdhY3lIRiJdJiZleChlZSwwLG9lLEplWyIh''@;'; put 'put ''cHJpbnQiXS5pbWFnZXMpO3ZhciB6dD0oImNoYXJ0Ij09SmVbIiF0eXBlIl0/W0plXTpKZVsiIWNoYXJ0cyJdfHxbXSkuY29uY2F0KChKZVsiIWltYWdlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKFNuKXtyZXR1cm4gU25bIiF0eXBlIl18fChTblsiIXR5cGUiXT0iaW1hZ2UiKSxTbn0pKS5jb25j''@;'; put 'put ''YXQoKEplWyIhc2hhcGVzIl18fFtdKS5tYXAoZnVuY3Rpb24oU24pe3JldHVybiBTblsiIXR5cGUiXXx8KFNuWyIhdHlwZSJdPSJzaGFwZSIpLFNufSkpO3p0JiZ6dC5sZW5ndGgmJih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiP3dyaXRlX2RyYXdpbmdfKGVlLFcsb2UsSmUsenQpOih3bihl''@;'; put 'put ''ZSwieGwvZHJhd2luZ3MvZHJhd2luZyIrb2UrIi54bWwiLGpVKCkpLFcuZHJhd2luZ3MucHVzaCgieGwvZHJhd2luZ3MvZHJhd2luZyIrb2UrIi54bWwiKSkpLGRlbGV0ZSBKZVsiIWNvbW1lbnRzIl0sZGVsZXRlIEplWyIhbGVnYWN5Il0sZGVsZXRlIEplWyIhbGVnYWN5SEYiXX1KZSYmSmVb''@;'; put 'put ''IiFwaXZvdHMiXSYmInhtbCI9PXcmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZKZVsiIXBpdm90cyJdLmZvckVhY2goZXQpLGJ0WyIhaWQiXS5ySWQxJiZ3bihlZSxhdShsZSkscmgoYnQpKSxKZSYmSmVbIiF0YWJsZXMiXSYmInhtbCI9PXcmJkplWyIhdGFibGVzIl0uZm9yRWFjaChH''@;'; put 'put ''ZSl9cmV0dXJuIG51bGwhPXguU3RyaW5ncyYmeC5TdHJpbmdzLmxlbmd0aD4wJiYod24oZWUsbGU9InhsL3NoYXJlZFN0cmluZ3MuIit3LE9aKHguU3RyaW5ncyxsZSx4KSksVy5zdHJzLnB1c2gobGUpLCRzKHgud2JyZWxzLC0xLCJzaGFyZWRTdHJpbmdzLiIrdyx5YS5TU1QpKSwieG1sIj09''@;'; put 'put ''dyYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJndyaXRlX3Bpdm90X3htbChSZSxnLGVlLFcseCksInhtbCI9PXcmJmZ1bmN0aW9uIGo3KGcseCx3LFYpe2cuZm9yRWFjaChmdW5jdGlvbihXLGVlKXt2YXIgbGU9eC5TaGVldHNbeC5TaGVldE5hbWVzW1dbMF1dXSxvZT0ieGwvdGFibGVz''@;'; put 'put ''L3RhYmxlIisoV1swXSsxKSsiXyIrV1sxXSsiLnhtbCI7Vi50YWJsZXMucHVzaChvZSk7dmFyIGRlPVdbMl0ucmVmfHxsZVsiIXJlZiJdOyJzdHJpbmciIT10eXBlb2YgZGUmJihkZT1KaShkZSkpO3ZhciBEZT1TYShkZSksUmU9V1syXS5uYW1lfHwic2pzdGJsXyIrV1swXSsiXyIrV1sxXSxW''@;'; put 'put ''ZT1ba2ldLEdlPSFMdChXWzJdLmhlYWRlciksZXQ9R2UmJiFMdChXWzJdLmZpbHRlcik7VmUucHVzaCgnPHRhYmxlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIGlkPSInKyhlZSsxKSsnIiBuYW1lPSInK29pKFJlKSsn''@;'; put 'put ''IiBkaXNwbGF5TmFtZT0iJytvaShSZSkrJyIgcmVmPSInK2RlKyciICcrKG51bGwhPVdbMl0uaGVhZGVyJiYxIT1XWzJdLmhlYWRlcj8naGVhZGVyUm93Q291bnQ9IicrKFdbMl0uaGVhZGVyfHwwKSsnIiAnOiIiKSsiPiIpLGV0JiZWZS5wdXNoKCc8YXV0b0ZpbHRlciByZWY9IicrZGUrJyIv''@;'; put 'put ''PicpLFZlLnB1c2goJzx0YWJsZUNvbHVtbnMgY291bnQ9IicrKERlLmUuYy1EZS5zLmMrMSkrJyI+Jyk7Zm9yKHZhciBidD1bXSxKZT1EZS5zLmM7SmU8PURlLmUuYzsrK0plKWlmKEdlKXtmb3IodmFyIGZ0PUtyKHtyOkRlLnMucixjOkplfSksUnQ9bGVbZnRdLFN0PVdbMl0uY29scyYmV1sy''@;'; put 'put ''XS5jb2xzW0plLURlLnMuY10mJldbMl0uY29sc1tKZS1EZS5zLmNdLm5hbWV8fFJ0JiYoUnQud3x8UnQudil8fCJDb2x1bW4gIisoSmUtRGUucy5jKzEpLEF0PVN0LHp0PTE7YnQuaW5kZXhPZihBdCk+LTEmJisrenQ8MTYzODQ7KUF0PVN0K3p0O2lmKEF0IT1TdCl0aHJvdyJ0YWJsZSBjb2x1''@;'; put 'put ''bW5zICIrSmUrIiBhbmQgIisoYnQuaW5kZXhPZihTdCkrRGUucy5jKSsiIGhhdmUgdGhlIHNhbWUgaGVhZGVyICciK1N0KyInOyB0cnkgc2V0dGluZyBjZWxsICIrZnQrIiB0byAnIitBdCsiJyI7YnQucHVzaChBdCksVmUucHVzaCgnPHRhYmxlQ29sdW1uIGlkPSInKyhXWzJdLmNvbHMmJldb''@;'; put 'put ''Ml0uY29sc1tKZS1EZS5zLmNdJiZudWxsIT1XWzJdLmNvbHNbSmUtRGUucy5jXS5pZD9XWzJdLmNvbHNbSmUtRGUucy5jXS5pZDpKZS1EZS5zLmMrMSkrJyIgbmFtZT0iJytvaShBdCkrJyIvPicpfWVsc2UgVmUucHVzaChXWzJdLmNvbHMmJldbMl0uY29sc1tKZS1EZS5zLmNdPyc8dGFibGVD''@;'; put 'put ''b2x1bW4gaWQ9IicrV1syXS5jb2xzW0plLURlLnMuY10uaWQrJyIgbmFtZT0iJytXWzJdLmNvbHNbSmUtRGUucy5jXS5uYW1lKyciLz4nOic8dGFibGVDb2x1bW4gaWQ9IicrKEplLURlLnMuYysxKSsnIiB1bmlxdWVOYW1lPSInKyhKZS1EZS5zLmMrMSkrJyIgbmFtZT0iJysoSmUtRGUucy5j''@;'; put 'put ''KzEpKyciLz4nKTtWZS5wdXNoKCI8L3RhYmxlQ29sdW1ucz4iKTt2YXIgbHI9KyghMSE9PShXWzJdLnN0eWxlfHx7fSkucm93c3RyaXBlKSxtbj0rISEoV1syXS5zdHlsZXx8e30pLmNvbHN0cmlwZSxkcj0rISEoV1syXS5zdHlsZXx8e30pLmNvbGZpcnN0LEduPSshIShXWzJdLnN0eWxlfHx7''@;'; put 'put ''fSkuY29sbGFzdCxIbj0oV1syXS5zdHlsZXx8e30pLm5hbWV8fCJNZWRpdW05IjtIbj1Ibi5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLyk/IlRhYmxlU3R5bGUiK0huOkhuLFZlLnB1c2goJzx0YWJsZVN0eWxlSW5mbyBuYW1lPSInK0huKyciIHNob3dGaXJzdENvbHVtbj0iJytk''@;'; put 'put ''cisnIiBzaG93TGFzdENvbHVtbj0iJytHbisnIiBzaG93Um93U3RyaXBlcz0iJytscisnIiBzaG93Q29sdW1uU3RyaXBlcz0iJyttbisnIi8+JyksVmUucHVzaCgiPC90YWJsZT4iKSx3bih3LG9lLFZlLmpvaW4oIiIpKX0pfShWZSxnLGVlLFcpLCJ4bWwiPT13JiYoZy5FeHRlcm5hbFdCfHxb''@;'; put 'put ''XSkubGVuZ3RoJiZmdW5jdGlvbiBkYyhnLHgsdyl7dy5saW5rc3x8KHcubGlua3M9W10pLGcuRXh0ZXJuYWxXQiYmZy5FeHRlcm5hbFdCLmZvckVhY2goZnVuY3Rpb24oVixXKXt2YXIgZWU9Ii94bC9leHRlcm5hbExpbmtzL19yZWxzL2V4dGVybmFsTGluayIrKFcrMSkrIi54bWwucmVscyIs''@;'; put 'put ''bGU9e307JHMobGUsLTEsVi5UYXJnZXQsVi5NaXNzaW5nP3lhLlhNSVNTOnlhLlhQQVRIKSx3bih4LGUwKGVlKSxyaChsZSkpO3ZhciBvZT0iL3hsL2V4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoVysxKSsiLnhtbCI7dy5saW5rcy5wdXNoKG9lKSx3bih4LGUwKG9lKSxmdW5jdGlvbiBx''@;'; put 'put ''TShnKXt2YXIgeD1ba2ksVlVdO3JldHVybihnLlNoZWV0TmFtZXN8fFtdKS5sZW5ndGgmJih4LnB1c2goJzxleHRlcm5hbEJvb2sgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgcjppZD0icklkMSI+''@;'; put 'put ''JykseC5wdXNoKCI8c2hlZXROYW1lcz4iKSxnLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbih3KXt4LnB1c2goJzxzaGVldE5hbWUgdmFsPSInK29pKHcpKyciLz4nKX0pLHgucHVzaCgiPC9zaGVldE5hbWVzPiIpLHgucHVzaCgiPHNoZWV0RGF0YVNldD4iKSxnLlNoZWV0TmFtZXMuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbih3LFYpe3ZhciBXPWcuU2hlZXRzW3ddLGVlPXtzaGVldElkOlZ9LGxlPW51bGw7aWYobnVsbD09VyllZS5yZWZyZXNoRXJyb3I9MTtlbHNlIGlmKFdbIiFyZWYiXSl7dmFyIG9lPXdyKFdbIiFyZWYiXSk7bGU9IiI7Zm9yKHZhciBkZT1vZS5zLnI7ZGU8PW9lLmUucjsr''@;'; put 'put ''K2RlKXtmb3IodmFyIERlPSIiLFJlPW9lLnMuYztSZTw9b2UuZS5jOysrUmUpe3ZhciBWZT1Lcih7cjpkZSxjOlJlfSk7V1tWZV0mJihEZXx8KERlPSc8cm93IHI9IicrKGRlKzEpKyciPicpLERlKz0nPGNlbGwgcj0iJytWZSsnIicrKFdbVmVdLnQ/JyB0PSInK1dbVmVdLnQrJyInOiIiKSsi''@;'; put 'put ''Pjx2PiIrb2koV1tWZV0udikrIjwvdj48L2NlbGw+Iil9RGUmJihsZSs9RGUrIjwvcm93PiIpfX14LnB1c2goenIoInNoZWV0RGF0YSIsbGUsZWUpKX0pLHgucHVzaCgiPC9zaGVldERhdGFTZXQ+IikseC5wdXNoKCI8L2V4dGVybmFsQm9vaz4iKSkseC5sZW5ndGg+MiYmKHhbeC5sZW5ndGhd''@;'; put 'put ''PSI8L2V4dGVybmFsTGluaz4iLHhbMV09eFsxXS5yZXBsYWNlKCIvPiIsIj4iKSkseC5qb2luKCIiKX0oVikpfSl9KGcsZWUsVyksInhtbCI9PXcmJmZ1bmN0aW9uIEhVKGcpe3ZhciB4LHc7Zy5Xb3JrYm9va3x8KGcuV29ya2Jvb2s9e05hbWVzOltdfSksZy5Xb3JrYm9vay5OYW1lc3x8KGcu''@;'; put 'put ''V29ya2Jvb2suTmFtZXM9W10pO2Zvcih2YXIgVj1nLldvcmtib29rLk5hbWVzLFc9MDtXPGcuU2hlZXROYW1lcy5sZW5ndGg7KytXKXt2YXIgZWU9Zy5TaGVldE5hbWVzW1ddLGxlPWcuU2hlZXRzW2VlXTtpZihsZSYmbGVbIiFwcmludCJdKXt2YXIgb2U9IiciK2VlKyInISIsZGU9bGVbIiFw''@;'; put 'put ''cmludCJdO2lmKGRlKXt2YXIgRGU9ISh4PWRlLmFyZWEpLFJlPSEodz1kZS50aXRsZXMpLFZlPXg/InN0cmluZyI9PXR5cGVvZiB4P3g6SmkoeCk6IiI7aWYoeCYmKFYuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQuU2hlZXQ9PVcmJiFEZSYmIl94bG5tLlByaW50X0FyZWEiPT1ldC5OYW1lJiYo''@;'; put 'put ''RGU9ITAsZXQuUmVmPW9lK1ZlKX0pLERlfHxWLnB1c2goe05hbWU6Il94bG5tLlByaW50X0FyZWEiLFJlZjpvZStWZSxTaGVldDpXfSkpLHcpe3ZhciBHZT0iIjt3LnMuYz4tMSYmdy5lLmM+LTEmJihHZSs9b2UrUGEody5zLmMpKyI6IitQYSh3LmUuYykrIiwiKSx3LnMucj4tMSYmdy5lLnI+''@;'; put 'put ''LTEmJihHZSs9b2Urem4ody5zLnIpKyI6Iit6bih3LmUucikrIiwiKSxHZT1HZS5zbGljZSgwLC0xKSxWLmZvckVhY2goZnVuY3Rpb24oZXQpe2V0LlNoZWV0PT1XJiYhUmUmJiJfeGxubS5QcmludF9UaXRsZXMiPT1ldC5OYW1lJiYoRGU9ITAsZXQuUmVmPUdlKX0pLFJlfHxWLnB1c2goe05h''@;'; put 'put ''bWU6Il94bG5tLlByaW50X1RpdGxlcyIsUmVmOkdlLFNoZWV0Old9KX19fX19KGcpLHduKGVlLGxlPSJ4bC93b3JrYm9vay4iK3csZnVuY3Rpb24gRFooZyx4LHcpe3JldHVybigiLmJpbiI9PT14LnNsaWNlKC00KT9zTzpxeCkoZyx3KX0oZyxsZSx4KSksVy53b3JrYm9va3MucHVzaChsZSks''@;'; put 'put ''JHMoeC5yZWxzLDEsbGUseWEuV0IpLHduKGVlLGxlPSJ4bC90aGVtZS90aGVtZTEueG1sIixFbShnLlRoZW1lcyx4KSksVy50aGVtZXMucHVzaChsZSksJHMoeC53YnJlbHMsLTEsInRoZW1lL3RoZW1lMS54bWwiLHlhLlRIRU1FKSx3bihlZSxsZT0ieGwvc3R5bGVzLiIrdyxmdW5jdGlvbiBM''@;'; put 'put ''WihnLHgsdyl7cmV0dXJuKCIuYmluIj09PXguc2xpY2UoLTQpP1RVOndVKShnLHcpfShnLGxlLHgpKSxXLnN0eWxlcy5wdXNoKGxlKSwkcyh4LndicmVscywtMSwic3R5bGVzLiIrdyx5YS5TVFkpLGcudmJhcmF3JiZWJiYod24oZWUsbGU9InhsL3ZiYVByb2plY3QuYmluIixnLnZiYXJhdyks''@;'; put 'put ''Vy52YmEucHVzaChsZSksJHMoeC53YnJlbHMsLTEsInZiYVByb2plY3QuYmluIix5YS5WQkEpKSxnLm1vZGVsJiZnLm1vZGVsLmxlbmd0aCYmKHduKGVlLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLGcubW9kZWwpLCRzKHgud2JyZWxzLC0xLCJtb2RlbC9pdGVtLmRhdGEiLHlhLlBXUlBEKSksZy5j''@;'; put 'put ''b25uJiYod24oZWUsInhsL2Nvbm5lY3Rpb25zLnhtbCIsZy5jb25uKSxXLmNvbm5zLnB1c2goIi94bC9jb25uZWN0aW9ucy54bWwiKSwkcyh4LndicmVscywtMSwiY29ubmVjdGlvbnMueG1sIix5YS5DT05OKSksZy5DdXN0b21YTUwmJmcuQ3VzdG9tWE1MLmZvckVhY2goZnVuY3Rpb24oU24s''@;'; put 'put ''bHIpe2lmKHduKGVlLCJjdXN0b21YbWwvaXRlbSIrKGxyKzEpKyIueG1sIixTbi5kYXRhKSwkcyh4LndicmVscywtMSwiLi4vY3VzdG9tWG1sL2l0ZW0iKyhscisxKSsiLnhtbCIseWEuQ1hNTCksU24ucHJvcHMpe3duKGVlLCJjdXN0b21YbWwvaXRlbVByb3BzIisobHIrMSkrIi54bWwiLFNu''@;'; put 'put ''LnByb3BzKSxXLmN1c3RvbXhtbHByb3BzLnB1c2goIi9jdXN0b21YbWwvaXRlbVByb3BzIisobHIrMSkrIi54bWwiKTt2YXIgbW49e307JHMobW4sLTEsIml0ZW1Qcm9wcyIrKGxyKzEpKyIueG1sIix5YS5DWE1MUCksd24oZWUsImN1c3RvbVhtbC9fcmVscy9pdGVtIisobHIrMSkrIi54bWwu''@;'; put 'put ''cmVscyIscmgobW4pKX19KSx3bihlZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIsZnVuY3Rpb24gSm8oZyx4LHcpe3ZhciBXLFY9W107d3x8KFZbVi5sZW5ndGhdPWtpLFZbVi5sZW5ndGhdPWxtLFY9Vi5jb25jYXQoYzEpKTt2YXIgZWU9ZnVuY3Rpb24oZGUpe2dbZGVdJiZnW2RlXS5sZW5ndGg+''@;'; put 'put ''MCYmKFZbVi5sZW5ndGhdPXpyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09KFc9Z1tkZV1bMF0pWzBdPyIiOiIvIikrVyxDb250ZW50VHlwZTprc1tkZV1beC5ib29rVHlwZXx8Inhsc3giXX0pKX0sbGU9ZnVuY3Rpb24oZGUpeyhnW2RlXXx8W10pLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''RGUpe1ZbVi5sZW5ndGhdPXpyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09RGVbMF0/IiI6Ii8iKStEZSxDb250ZW50VHlwZTprc1tkZV1beC5ib29rVHlwZXx8Inhsc3giXX0pfSl9LG9lPWZ1bmN0aW9uKGRlKXsoZ1tkZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKERlKXtWW1Yu''@;'; put 'put ''bGVuZ3RoXT16cigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PURlWzBdPyIiOiIvIikrRGUsQ29udGVudFR5cGU6bDFbZGVdWzBdfSl9KX07cmV0dXJuIGVlKCJ3b3JrYm9va3MiKSxsZSgic2hlZXRzIiksbGUoImNoYXJ0cyIpLG9lKCJ0aGVtZXMiKSxbInN0cnMiLCJzdHlsZXMi''@;'; put 'put ''LCJjb25ucyJdLmZvckVhY2goZWUpLFsiY29yZXByb3BzIiwiZXh0cHJvcHMiLCJjdXN0cHJvcHMiXS5mb3JFYWNoKG9lKSxvZSgidmJhIiksb2UoImNvbW1lbnRzIiksb2UoImRyYXdpbmdzIiksbGUoInRhYmxlcyIpLGxlKCJwaXZvdHMiKSxsZSgicGl2b3RjYWNoZXMiKSxsZSgicGl2b3Ry''@;'; put 'put ''ZWNvcmRzIiksb2UoImRhdGFtb2RlbHMiKSxvZSgiY3RybHByb3BzIiksb2UoImNoYXJ0b2JqcyIpLG9lKCJjaGFydHN0eWxlcyIpLG9lKCJjaGFydGNvbG9ycyIpLG9lKCJjaGFydGV4cyIpLGxlKCJsaW5rcyIpLG9lKCJjdXN0b214bWxwcm9wcyIpLCF3JiZWLmxlbmd0aD4yJiYoVltWLmxl''@;'; put 'put ''bmd0aF09IjwvVHlwZXM+IixWWzFdPVZbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFYuam9pbigiIil9KFcseCkpLHduKGVlLCJfcmVscy8ucmVscyIscmgoeC5yZWxzKSksd24oZWUsInhsL19yZWxzL3dvcmtib29rLiIrdysiLnJlbHMiLHJoKHgud2JyZWxzKSksZGVsZXRlIHguRm9udHMsZGVs''@;'; put 'put ''ZXRlIHguRmlsbHMsZGVsZXRlIHguQm9yZGVycyxkZWxldGUgeC5yZXZzc2YsZGVsZXRlIHguc3NmLGVlfWZ1bmN0aW9uIEdlKFNuLGxyKXtWZS5wdXNoKFtvZS0xLGxyLFNuXSl9ZnVuY3Rpb24gZXQoU24pe1JlLnB1c2goW29lLTEsU25dKSwkcyhidCwtMSwiLi4vcGl2b3RUYWJsZXMvcGl2''@;'; put 'put ''b3RUYWJsZSIrUmUubGVuZ3RoKyIuIit3LHlhLlBJVk9UKX19ZnVuY3Rpb24gUmIoZyx4KXt2YXIgdz0iIjtzd2l0Y2goKHh8fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybltnWzBdLGdbMV0sZ1syXSxnWzNdLGdbNF0sZ1s1XSxnWzZdLGdbN11d''@;'; put 'put ''O2Nhc2UiYmFzZTY0Ijp3PWhlLmRlY29kZShnLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6dz1nO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyh4JiZ4LnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW3cuY2hhckNvZGVBdCgwKSx3''@;'; put 'put ''LmNoYXJDb2RlQXQoMSksdy5jaGFyQ29kZUF0KDIpLHcuY2hhckNvZGVBdCgzKSx3LmNoYXJDb2RlQXQoNCksdy5jaGFyQ29kZUF0KDUpLHcuY2hhckNvZGVBdCg2KSx3LmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIGJFKGcseCl7dmFyIHc9MDtlOmZvcig7dzxnLmxlbmd0aDspc3dpdGNoKGcu''@;'; put 'put ''Y2hhckNvZGVBdCh3KSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6Kyt3O2JyZWFrO2Nhc2UgNjA6cmV0dXJuIHU5KGcuc2xpY2UodykseCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBMZy50b193b3JrYm9vayhnLHgpfWZ1bmN0aW9uIHdFKGcseCx3LFYpe3JldHVybiBWPyh3LnR5cGU9InN0''@;'; put 'put ''cmluZyIsTGcudG9fd29ya2Jvb2soZyx3KSk6TGcudG9fd29ya2Jvb2soeCx3KX1mdW5jdGlvbiBsNihnLHgpe3ZhciB3PWIuZ2V0bG9jYWxlKCk7cShiKSxiLnNldGxvY2FsZSh3KSxOKCk7dmFyIFY9eHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmZyBpbnN0YW5jZW9mIEFycmF5''@;'; put 'put ''QnVmZmVyKXJldHVybiBsNihuZXcgVWludDhBcnJheShnKSwoKFY9cm4oVikpLnR5cGU9ImFycmF5IixWKSk7dmFyIGVlLFc9ZyxsZT0hMTtpZihGZyhQZz1WLlBQSXx8OTYpLFYuY2VsbFN0eWxlcyYmKFYuY2VsbE5GPSEwLFYuc2hlZXRTdHVicz0hMCksam09e30sVi5kYXRlTkYmJihqbS5k''@;'; put 'put ''YXRlTkY9Vi5kYXRlTkYpLFYudHlwZXx8KFYudHlwZT1fZSYmQnVmZmVyLmlzQnVmZmVyKGcpPyJidWZmZXIiOiJiYXNlNjQiKSwiZmlsZSI9PVYudHlwZSYmKFYudHlwZT1fZT8iYnVmZmVyIjoiYmluYXJ5IixXPWZ1bmN0aW9uIGtlKGcpe2lmKHR5cGVvZiB6ZTwidSIpcmV0dXJuIHplLnJl''@;'; put 'put ''YWRGaWxlU3luYyhnKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB4PUZpbGUoZyk7eC5vcGVuKCJyIikseC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgdz14LnJlYWQoKTtyZXR1cm4geC5jbG9zZSgpLHd9Y2F0Y2goVil7aWYoIVYu''@;'; put 'put ''bWVzc2FnZXx8IVYubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBWfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrZyl9KGcpKSwic3RyaW5nIj09Vi50eXBlJiYobGU9ITAsVi50eXBlPSJiaW5hcnkiLFYuY29kZXBhZ2U9NjUwMDEsVz1mdW5jdGlvbiBOTyhn''@;'; put 'put ''KXtyZXR1cm4gZy5tYXRjaCgvW15ceDAwLVx4N0ZdLyk/WGEoZyk6Z30oZykpLCJhcnJheSI9PVYudHlwZSYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZnIGluc3RhbmNlb2YgVWludDhBcnJheSYmdHlwZW9mIEFycmF5QnVmZmVyPCJ1Iil7dmFyIG9lPW5ldyBBcnJheUJ1ZmZlcigzKSxkZT1u''@;'; put 'put ''ZXcgVWludDhBcnJheShvZSk7aWYoZGUuZm9vPSJiYXIiLCFkZS5mb28pcmV0dXJuKFY9cm4oVikpLnR5cGU9ImFycmF5IixsNihrKFcpLFYpfXN3aXRjaCgoZWU9UmIoVyxWKSlbMF0pe2Nhc2UgMjA4OmlmKDIwNz09PWVlWzFdJiYxNz09PWVlWzJdJiYyMjQ9PT1lZVszXSYmMTYxPT09ZWVb''@;'; put 'put ''NF0mJjE3Nz09PWVlWzVdJiYyNj09PWVlWzZdJiYyMjU9PT1lZVs3XSlyZXR1cm4gZnVuY3Rpb24gTGIoZyx4KXtyZXR1cm4gdWUuZmluZChnLCJFbmNyeXB0ZWRQYWNrYWdlIik/ZFkoZyx4KTpyNihnLHgpfSh1ZS5yZWFkKFcsViksVik7YnJlYWs7Y2FzZSA5OmlmKGVlWzFdPD04KXJldHVy''@;'; put 'put ''biByNihXLFYpO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIHU5KFcsVik7Y2FzZSA3MzppZig3Mz09PWVlWzFdJiY0Mj09PWVlWzJdJiYwPT09ZWVbM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdlIEZpbGUgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTtpZig2OD09PWVlWzFdKXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBhVShnLHgpe3ZhciB3PXh8fHt9LFY9ISF3LldURjt3LldURj0hMDt0cnl7dmFyIFc9a3UudG9fd29ya2Jvb2soZyx3KTtyZXR1cm4gdy5XVEY9VixXfWNhdGNoKGVlKXtpZih3LldURj1WLCFlZS5tZXNzYWdlLm1hdGNoKC9TWUxLIGJhZCByZWNvcmQgSUQvKSYmVil0aHJvdyBlZTty''@;'; put 'put ''ZXR1cm4gTGcudG9fd29ya2Jvb2soZyx4KX19KFcsVik7YnJlYWs7Y2FzZSA4NDppZig2NT09PWVlWzFdJiY2Nj09PWVlWzJdJiY3Nj09PWVlWzNdKXJldHVybiB4My50b193b3JrYm9vayhXLFYpO2JyZWFrO2Nhc2UgODA6cmV0dXJuIDc1PT09ZWVbMV0mJmVlWzJdPDkmJmVlWzNdPDk/ZnVu''@;'; put 'put ''Y3Rpb24gT2IoZyx4KXt2YXIgVj1nLFc9eHx8e307cmV0dXJuIFcudHlwZXx8KFcudHlwZT1fZSYmQnVmZmVyLmlzQnVmZmVyKGcpPyJidWZmZXIiOiJiYXNlNjQiKSxGTyhubihWLFcpLFcpfShXLFYpOndFKGcsVyxWLGxlKTtjYXNlIDIzOTpyZXR1cm4gNjA9PT1lZVszXT91OShXLFYpOndF''@;'; put 'put ''KGcsVyxWLGxlKTtjYXNlIDI1NTppZigyNTQ9PT1lZVsxXSlyZXR1cm4gZnVuY3Rpb24gcFkoZyx4KXt2YXIgdz1nO3JldHVybiJiYXNlNjQiPT14LnR5cGUmJih3PWhlLmRlY29kZSh3KSksdz1jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHcuc2xpY2UoMiksInN0ciIpLHgudHlwZT0iYmlu''@;'; put 'put ''YXJ5IixiRSh3LHgpfShXLFYpO2JyZWFrO2Nhc2UgMDppZigwPT09ZWVbMV0mJmVlWzJdPj0yJiYwPT09ZWVbM10pcmV0dXJuIEVNLnRvX3dvcmtib29rKFcsVik7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMTQwOnJldHVybiBtNy50b193b3JrYm9vayhXLFYpO2Nhc2Ug''@;'; put 'put ''MTIzOmlmKDkyPT09ZWVbMV0mJjExND09PWVlWzJdJiYxMTY9PT1lZVszXSlyZXR1cm4gTl8udG9fd29ya2Jvb2soVyxWKTticmVhaztjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gZnVuY3Rpb24gZlkoZyx4KXt2YXIgdz0iIixWPVJiKGcseCk7c3dpdGNoKHgudHlwZSl7Y2FzZSJi''@;'; put 'put ''YXNlNjQiOnc9aGUuZGVjb2RlKGcpO2JyZWFrO2Nhc2UiYmluYXJ5Ijp3PWc7YnJlYWs7Y2FzZSJidWZmZXIiOnc9Zy50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6dz1udChnKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIit4''@;'; put 'put ''LnR5cGUpfXJldHVybiAyMzk9PVZbMF0mJjE4Nz09VlsxXSYmMTkxPT1WWzJdJiYodz1ibyh3KSksYkUodyx4KX0oVyxWKX1yZXR1cm4gbTcudmVyc2lvbnMuaW5kZXhPZihlZVswXSk+LTEmJmVlWzJdPD0xMiYmZWVbM108PTMxP203LnRvX3dvcmtib29rKFcsVik6d0UoZyxXLFYsbGUpfWZ1''@;'; put 'put ''bmN0aW9uIFdnKGcseCl7dmFyIHc9eHx8e307cmV0dXJuIHcudHlwZT0iZmlsZSIsbDYoZyx3KX1mdW5jdGlvbiBWTyhnLHgpe3N3aXRjaCh4LnR5cGUpe2Nhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOngudHlwZT0iIjticmVhaztjYXNl''@;'; put 'put ''ImZpbGUiOnJldHVybiBDZSh4LmZpbGUsdWUud3JpdGUoZyx7dHlwZTpfZT8iYnVmZmVyIjoiIn0pKTtjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIit4LmJvb2tUeXBlKyInIGZpbGVzIik7ZGVmYXVsdDp0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIreC50eXBlKX1yZXR1cm4gdWUud3JpdGUoZyx4KX1mdW5jdGlvbiBfMShnLHgsdyl7d3x8KHc9IiIpO3ZhciBWPXcrZztzd2l0Y2goeC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIGhlLmVuY29kZShYYShWKSk7Y2FzZSJiaW5hcnkiOnJldHVy''@;'; put 'put ''biBYYShWKTtjYXNlInN0cmluZyI6cmV0dXJuIGc7Y2FzZSJmaWxlIjpyZXR1cm4gQ2UoeC5maWxlLFYsInV0ZjgiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIF9lP21lKFYsInV0ZjgiKTpfMShWLHt0eXBlOiJiaW5hcnkifSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihXKXtyZXR1cm4gVy5jaGFy''@;'; put 'put ''Q29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3gudHlwZSl9ZnVuY3Rpb24gVG8oZyx4KXtzd2l0Y2goeC50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5Ijpmb3IodmFyIHc9IiIsVj0wO1Y8Zy5sZW5ndGg7KytWKXcrPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoZ1tWXSk7cmV0dXJuImJhc2U2NCI9PXgudHlwZT9oZS5lbmNvZGUodyk6InN0cmluZyI9PXgudHlwZT9ibyh3KTp3O2Nhc2UiZmlsZSI6cmV0dXJuIENlKHguZmlsZSxnKTtjYXNlImJ1ZmZlciI6cmV0dXJuIGc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''cmVjb2duaXplZCB0eXBlICIreC50eXBlKX19ZnVuY3Rpb24gUGIoZyx4KXtOKCksZnVuY3Rpb24gZU8oZyl7aWYoIWd8fCFnLlNoZWV0TmFtZXN8fCFnLlNoZWV0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgV29ya2Jvb2siKTtpZighZy5TaGVldE5hbWVzLmxlbmd0aCl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIldvcmtib29rIGlzIGVtcHR5Iik7IWZ1bmN0aW9uIFFtKGcseCx3KXtnLmZvckVhY2goZnVuY3Rpb24oVixXKXtPMyhWKTtmb3IodmFyIGVlPTA7ZWU8VzsrK2VlKWlmKFY9PWdbZWVdKXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrVik7aWYodyl7dmFy''@;'; put 'put ''IGxlPXgmJnhbV10mJnhbV10uQ29kZU5hbWV8fFY7aWYoOTU9PWxlLmNoYXJDb2RlQXQoMCkmJmxlLmxlbmd0aD4yMil0aHJvdyBuZXcgRXJyb3IoIkJhZCBDb2RlIE5hbWU6IFdvcmtzaGVldCIrbGUpfX0pfShnLlNoZWV0TmFtZXMsZy5Xb3JrYm9vayYmZy5Xb3JrYm9vay5TaGVldHN8fFtd''@;'; put 'put ''LCEhZy52YmFyYXcpO2Zvcih2YXIgdz0wO3c8Zy5TaGVldE5hbWVzLmxlbmd0aDsrK3cpRXgoZy5TaGVldHNbZy5TaGVldE5hbWVzW3ddXSwwLHcpfShnKTt2YXIgdz14fHx7fTtpZih3LmNlbGxTdHlsZXMmJih3LmNlbGxORj0hMCx3LnNoZWV0U3R1YnM9ITApLCJhcnJheSI9PXcudHlwZSl7''@;'; put 'put ''dy50eXBlPSJiaW5hcnkiO3ZhciBWPVBiKGcsdyk7cmV0dXJuIHcudHlwZT0iYXJyYXkiLHYoVil9c3dpdGNoKHcuYm9va1R5cGV8fCJ4bHNiIil7Y2FzZSJ4bWwiOmNhc2UieGxtbCI6cmV0dXJuIF8xKF9zZShnLHcpLHcpO2Nhc2Uic2xrIjpjYXNlInN5bGsiOnJldHVybiBfMShDc2UoZyx3''@;'; put 'put ''KSx3KTtjYXNlImh0bSI6Y2FzZSJodG1sIjpyZXR1cm4gXzEoXzkoZyx3KSx3KTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIEgzKGcseCl7c3dpdGNoKHgudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBoZS5lbmNvZGUoZyk7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpyZXR1cm4gZztj''@;'; put 'put ''YXNlImZpbGUiOnJldHVybiBDZSh4LmZpbGUsZywiYmluYXJ5Iik7Y2FzZSJidWZmZXIiOnJldHVybiBfZT9tZShnLCJiaW5hcnkiKTpnLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24odyl7cmV0dXJuIHcuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUg''@;'; put 'put ''Iit4LnR5cGUpfShhWShnLHcpLHcpO2Nhc2UiY3N2IjpyZXR1cm4gXzEoVGIoZyx3KSx3LCJcdWZlZmYiKTtjYXNlImRpZiI6cmV0dXJuIF8xKGlZKGcsdyksdyk7Y2FzZSJkYmYiOnJldHVybiBUbyhETyhnLHcpLHcpO2Nhc2UicHJuIjpyZXR1cm4gXzEoa08oZyx3KSx3KTtjYXNlInJ0ZiI6''@;'; put 'put ''cmV0dXJuIF8xKHBFKGcsdyksdyk7Y2FzZSJldGgiOnJldHVybiBfMShvWShnLHcpLHcpO2Nhc2UiZm9kcyI6cmV0dXJuIF8xKGZFKGcsdyksdyk7Y2FzZSJiaWZmMiI6dy5iaWZmfHwody5iaWZmPTIpO2Nhc2UiYmlmZjMiOncuYmlmZnx8KHcuYmlmZj0zKTtjYXNlImJpZmY0IjpyZXR1cm4g''@;'; put 'put ''dy5iaWZmfHwody5iaWZmPTQpLFRvKHY5KGcsdyksdyk7Y2FzZSJiaWZmNSI6dy5iaWZmfHwody5iaWZmPTUpO2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpjYXNlInhscyI6cmV0dXJuIHcuYmlmZnx8KHcuYmlmZj04KSxmdW5jdGlvbiBnWShnLHgpe3ZhciB3PXh8fHt9O3JldHVybiBWTyhmdW5j''@;'; put 'put ''dGlvbiBmOShnLHgpe3ZhciB3PXh8fHt9LFY9dWUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxXPSIvV29ya2Jvb2siO3N3aXRjaCh3LmJvb2tUeXBlfHwieGxzIil7Y2FzZSJ4bHMiOncuYm9va1R5cGU9ImJpZmY4IjtjYXNlInhsYSI6dy5ib29rVHlwZXx8KHcuYm9va1R5cGU9InhsYSIp''@;'; put 'put ''O2Nhc2UiYmlmZjgiOlc9Ii9Xb3JrYm9vayIsdy5iaWZmPTg7YnJlYWs7Y2FzZSJiaWZmNSI6Vz0iL0Jvb2siLHcuYmlmZj01O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIit3LmJvb2tUeXBlKyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gdWUudXRpbHMuY2Zi''@;'; put 'put ''X2FkZChWLFcsdjkoZyx3KSksOD09dy5iaWZmJiYoZy5Qcm9wc3x8Zy5DdXN0cHJvcHMpJiZmdW5jdGlvbiBZWihnLHgpe3ZhciBsZSx3PVtdLFY9W10sVz1bXSxlZT0wO2lmKGcuUHJvcHMpZm9yKGxlPXhlKGcuUHJvcHMpLGVlPTA7ZWU8bGUubGVuZ3RoOysrZWUpKE9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZixsZVtlZV0pP3c6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGltLGxlW2VlXSk/VjpXKS5wdXNoKFtsZVtlZV0sZy5Qcm9wc1tsZVtlZV1dXSk7aWYoZy5DdXN0cHJvcHMpZm9yKGxlPXhlKGcuQ3VzdHByb3BzKSxlZT0wO2Vl''@;'; put 'put ''PGxlLmxlbmd0aDsrK2VlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnLlByb3BzfHx7fSxsZVtlZV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5mLGxlW2VlXSk/dzpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW0s''@;'; put 'put ''bGVbZWVdKT9WOlcpLnB1c2goW2xlW2VlXSxnLkN1c3Rwcm9wc1tsZVtlZV1dXSk7dmFyIG9lPVtdO2ZvcihlZT0wO2VlPFcubGVuZ3RoOysrZWUpanMuaW5kZXhPZihXW2VlXVswXSk+LTF8fG51bGwhPVdbZWVdWzFdJiZvZS5wdXNoKFdbZWVdKTtWLmxlbmd0aCYmdWUudXRpbHMuY2ZiX2Fk''@;'; put 'put ''ZCh4LCIvXHgwNVN1bW1hcnlJbmZvcm1hdGlvbiIsRWkoVixoOV9TSSxpbSxYdSkpLCh3Lmxlbmd0aHx8b2UubGVuZ3RoKSYmdWUudXRpbHMuY2ZiX2FkZCh4LCIvXHgwNURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uIixFaSh3LGg5X0RTSSxuZixlNyxvZS5sZW5ndGg/b2U6bnVsbCwiMDVk''@;'; put 'put ''NWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiKSl9KGcsViksOD09dy5iaWZmJiZnLnZiYXJhdyYmZnVuY3Rpb24gVlIoZyx4KXt4LkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKHcsVil7aWYoMCE9Vil7dmFyIFc9dy5yZXBsYWNlKC9bXlwvXSpbXC9dLywiL19WQkFfUFJPSkVDVF9D''@;'; put 'put ''VVIvIik7Ii8iIT09Vy5zbGljZSgtMSkmJnVlLnV0aWxzLmNmYl9hZGQoZyxXLHguRmlsZUluZGV4W1ZdLmNvbnRlbnQpfX0pfShWLHVlLnJlYWQoZy52YmFyYXcse3R5cGU6InN0cmluZyI9PXR5cGVvZiBnLnZiYXJhdz8iYmluYXJ5IjoiYnVmZmVyIn0pKSxWfShnLHcpLHcpfShnLHcpO2Nh''@;'; put 'put ''c2UieGxzeCI6Y2FzZSJ4bHNtIjpjYXNlInhsYW0iOmNhc2UieGxzYiI6Y2FzZSJvZHMiOnJldHVybiBmdW5jdGlvbiBCTyhnLHgpe3ZhciB3PXh8fHt9LFY9aFkoZyx3KSxXPXt9O2lmKHcuY29tcHJlc3Npb24mJihXLmNvbXByZXNzaW9uPSJERUZMQVRFIiksdy5wYXNzd29yZClXLnR5cGU9''@;'; put 'put ''X2U/Im5vZGVidWZmZXIiOiJzdHJpbmciO2Vsc2Ugc3dpdGNoKHcudHlwZSl7Y2FzZSJiYXNlNjQiOlcudHlwZT0iYmFzZTY0IjticmVhaztjYXNlImJpbmFyeSI6Vy50eXBlPSJzdHJpbmciO2JyZWFrO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBl''@;'; put 'put ''IGludmFsaWQgZm9yICciK3cuYm9va1R5cGUrIicgZmlsZXMiKTtjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpXLnR5cGU9X2U/Im5vZGVidWZmZXIiOiJzdHJpbmciO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3cudHlwZSl9dmFyIGVlPVYuRnVs''@;'; put 'put ''bFBhdGhzP3VlLndyaXRlKFYse2ZpbGVUeXBlOiJ6aXAiLHR5cGU6e25vZGVidWZmZXI6ImJ1ZmZlciIsc3RyaW5nOiJiaW5hcnkifVtXLnR5cGVdfHxXLnR5cGV9KTpWLmdlbmVyYXRlKFcpO3JldHVybiB3LnBhc3N3b3JkJiZ0eXBlb2YgT088InUiP1ZPKE9PKGVlLHcucGFzc3dvcmQpLHcp''@;'; put 'put ''OiJmaWxlIj09PXcudHlwZT9DZSh3LmZpbGUsZWUpOiJzdHJpbmciPT13LnR5cGU/Ym8oZWUpOmVlfShnLHcpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgYm9va1R5cGUgfCIrdy5ib29rVHlwZSsifCIpfX1mdW5jdGlvbiBqTyhnKXtpZighZy5ib29rVHlwZSl7dmFy''@;'; put 'put ''IHc9Zy5maWxlLnNsaWNlKGcuZmlsZS5sYXN0SW5kZXhPZigiLiIpKS50b0xvd2VyQ2FzZSgpO3cubWF0Y2goL15cLlthLXpdKyQvKSYmKGcuYm9va1R5cGU9dy5zbGljZSgxKSksZy5ib29rVHlwZT17eGxzOiJiaWZmOCIsaHRtOiJodG1sIixzbGs6InN5bGsiLHNvY2lhbGNhbGM6ImV0aCIs''@;'; put 'put ''U2gzM3RKUzoiV1RGIn1bZy5ib29rVHlwZV18fGcuYm9va1R5cGV9fWZ1bmN0aW9uIEZiKGcseCx3KXt2YXIgVj13fHx7fTtyZXR1cm4gVi50eXBlPSJmaWxlIixWLmZpbGU9eCxqTyhWKSxQYihnLFYpfWZ1bmN0aW9uIEM5KGcseCx3LFYsVyxlZSxsZSxvZSl7dmFyIGRlPXpuKHcpLERlPW9l''@;'; put 'put ''LmRlZnZhbCxSZT1vZS5yYXcsVmU9ITAsR2U9MT09PVc/W106e307aWYoMSE9PVcpaWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoR2UsIl9fcm93TnVtX18iLHt2YWx1ZTp3LGVudW1lcmFibGU6ITF9KX1jYXRjaHtHZS5fX3Jvd051bV9fPXd9ZWxz''@;'; put 'put ''ZSBHZS5fX3Jvd051bV9fPXc7aWYoIWxlfHxnW3ddKWZvcih2YXIgZXQ9eC5zLmM7ZXQ8PXguZS5jOysrZXQpe3ZhciBidD1sZT9nW3ddW2V0XTpnW1ZbZXRdK2RlXTtpZih2b2lkIDAhPT1idCYmdm9pZCAwIT09YnQudCl7dmFyIEplPWJ0LnY7c3dpdGNoKGJ0LnQpe2Nhc2UieiI6aWYobnVs''@;'; put 'put ''bD09SmUpYnJlYWs7Y29udGludWU7Y2FzZSJlIjpKZT0wPT1KZT9udWxsOnZvaWQgMDticmVhaztjYXNlInMiOmNhc2UiZCI6Y2FzZSJiIjpjYXNlIm4iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgdHlwZSAiK2J0LnQpfWlmKG51bGwhPWVlW2V0XSl7aWYo''@;'; put 'put ''bnVsbD09SmUpaWYoImUiPT1idC50JiZudWxsPT09SmUpR2VbZWVbZXRdXT1udWxsO2Vsc2UgaWYodm9pZCAwIT09RGUpR2VbZWVbZXRdXT1EZTtlbHNle2lmKCFSZXx8bnVsbCE9PUplKWNvbnRpbnVlO0dlW2VlW2V0XV09bnVsbH1lbHNlIEdlW2VlW2V0XV09UmU/SmU6bGMoYnQsSmUsb2Up''@;'; put 'put ''O251bGwhPUplJiYoVmU9ITEpfX1lbHNle2lmKHZvaWQgMD09PURlKWNvbnRpbnVlO251bGwhPWVlW2V0XSYmKEdlW2VlW2V0XV09RGUpfX1yZXR1cm57cm93OkdlLGlzZW1wdHk6VmV9fWZ1bmN0aW9uIFM5KGcseCl7aWYobnVsbD09Z3x8bnVsbD09Z1siIXJlZiJdKXJldHVybltdO3ZhciB3''@;'; put 'put ''PXt0OiJuIix2OjB9LFY9MCxXPTEsZWU9W10sbGU9MCxvZT0iIixkZT1KU09OLnBhcnNlKCd7InMiOnsiciI6MCwiYyI6MH0sImUiOnsiciI6MCwiYyI6MH19JyksRGU9eHx8e30sUmU9bnVsbCE9RGUucmFuZ2U/RGUucmFuZ2U6Z1siIXJlZiJdO3N3aXRjaCgxPT09RGUuaGVhZGVyP1Y9MToi''@;'; put 'put ''QSI9PT1EZS5oZWFkZXI/Vj0yOkFycmF5LmlzQXJyYXkoRGUuaGVhZGVyKT9WPTM6bnVsbD09RGUuaGVhZGVyJiYoVj0wKSx0eXBlb2YgUmUpe2Nhc2Uic3RyaW5nIjpkZT1TYShSZSk7YnJlYWs7Y2FzZSJudW1iZXIiOihkZT1TYShnWyIhcmVmIl0pKS5zLnI9UmU7YnJlYWs7ZGVmYXVsdDpk''@;'; put 'put ''ZT1SZX1WPjAmJihXPTApO3ZhciBWZT16bihkZS5zLnIpLEdlPVtdLGV0PVtdLGJ0PTAsSmU9MCxmdD1BcnJheS5pc0FycmF5KGcpLFJ0PWRlLnMucixTdD0wLEF0PTA7Zm9yKGZ0JiYhZ1tSdF0mJihnW1J0XT1bXSksU3Q9ZGUucy5jO1N0PD1kZS5lLmM7KytTdClzd2l0Y2goR2VbU3RdPVBh''@;'; put 'put ''KFN0KSx3PWZ0P2dbUnRdW1N0XTpnW0dlW1N0XStWZV0sVil7Y2FzZSAxOmVlW1N0XT1TdC1kZS5zLmM7YnJlYWs7Y2FzZSAyOmVlW1N0XT1HZVtTdF07YnJlYWs7Y2FzZSAzOmVlW1N0XT1EZS5oZWFkZXJbU3QtZGUucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT13JiYodz1KU09OLnBh''@;'; put 'put ''cnNlKCd7InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSxvZT1sZT1sYyh3LG51bGwsRGUpLEplPTAsQXQ9MDtBdDxlZS5sZW5ndGg7KytBdCllZVtBdF09PW9lJiYob2U9bGUrIl8iKyArK0plKTtlZVtTdF09b2V9Zm9yKFJ0PWRlLnMucitXO1J0PD1kZS5lLnI7KytSdCl7dmFyIHp0PUM5''@;'; put 'put ''KGcsZGUsUnQsR2UsVixlZSxmdCxEZSk7KCExPT09enQuaXNlbXB0eXx8KDE9PT1WPyExIT09RGUuYmxhbmtyb3dzOkRlLmJsYW5rcm93cykpJiYoZXRbYnQrK109enQucm93KX1yZXR1cm4gZXQubGVuZ3RoPWJ0LGV0fXZhciBLcD0vIi9nO2Z1bmN0aW9uIHpPKGcseCx3LFYsVyxlZSxsZSxv''@;'; put 'put ''ZSl7Zm9yKHZhciBkZT0hMCxEZT1bXSxSZT0iIixWZT16bih3KSxHZT14LnMuYztHZTw9eC5lLmM7KytHZSlpZihWW0dlXSl7dmFyIGV0PW9lLmRlbnNlPyhnW3ddfHxbXSlbR2VdOmdbVltHZV0rVmVdO2lmKG51bGw9PWV0KVJlPSIiO2Vsc2UgaWYobnVsbCE9ZXQudil7ZGU9ITEsUmU9IiIr''@;'; put 'put ''bGMoZXQsbnVsbCxvZSk7Zm9yKHZhciBidD0wLEplPTA7YnQhPT1SZS5sZW5ndGg7KytidClpZigoSmU9UmUuY2hhckNvZGVBdChidCkpPT09V3x8SmU9PT1lZXx8MzQ9PT1KZSl7UmU9JyInK1JlLnJlcGxhY2UoS3AsJyIiJykrJyInO2JyZWFrfSJJRCI9PVJlJiYoUmU9JyJJRCInKX1lbHNl''@;'; put 'put ''IG51bGw9PWV0LmZ8fGV0LkY/UmU9IiI6KGRlPSExLChSZT0iPSIrZXQuZikuaW5kZXhPZigiLCIpPj0wJiYoUmU9JyInK1JlLnJlcGxhY2UoS3AsJyIiJykrJyInKSk7RGUucHVzaChSZSl9cmV0dXJuITE9PT1vZS5ibGFua3Jvd3MmJmRlP251bGw6RGUuam9pbihsZSl9ZnVuY3Rpb24gSGIo''@;'; put 'put ''Zyx4KXt2YXIgdz1bXSxWPXg/P3t9O2lmKG51bGw9PWd8fG51bGw9PWdbIiFyZWYiXSlyZXR1cm4iIjt2YXIgVz1TYShnWyIhcmVmIl0pLGVlPXZvaWQgMCE9PVYuRlM/Vi5GUzoiLCIsbGU9ZWUuY2hhckNvZGVBdCgwKSxvZT12b2lkIDAhPT1WLlJTP1YuUlM6IlxuIixkZT1vZS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApLERlPW5ldyBSZWdFeHAoKCJ8Ij09ZWU/IlxcfCI6ZWUpKyIrJCIpLFJlPSIiLFZlPVtdO1YuZGVuc2U9QXJyYXkuaXNBcnJheShnKTtmb3IodmFyIEdlPVYuc2tpcEhpZGRlbiYmZ1siIWNvbHMiXXx8W10sZXQ9Vi5za2lwSGlkZGVuJiZnWyIhcm93cyJdfHxbXSxidD1XLnMuYzti''@;'; put 'put ''dDw9Vy5lLmM7KytidCkoR2VbYnRdfHx7fSkuaGlkZGVufHwoVmVbYnRdPVBhKGJ0KSk7Zm9yKHZhciBKZT1XLnMucjtKZTw9Vy5lLnI7KytKZSkoZXRbSmVdfHx7fSkuaGlkZGVufHxudWxsIT0oUmU9ek8oZyxXLEplLFZlLGxlLGRlLGVlLFYpKSYmKFYuc3RyaXAmJihSZT1SZS5yZXBsYWNl''@;'; put 'put ''KERlLCIiKSksdy5wdXNoKFJlK29lKSk7cmV0dXJuIGRlbGV0ZSBWLmRlbnNlLHcuam9pbigiIil9ZnVuY3Rpb24gbVkoZyx4KXt4fHwoeD17fSkseC5GUz0iXHQiLHguUlM9IlxuIjt2YXIgdz1IYihnLHgpO3JldHVybiB0eXBlb2YgY3B0YWJsZT4idSJ8fCJzdHJpbmciPT14LnR5cGU/dzoi''@;'; put 'put ''XHhmZlx4ZmUiK2NwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsdywic3RyIil9ZnVuY3Rpb24gQ0UoZyl7dmFyIHcseD0iIixWPSIiO2lmKG51bGw9PWd8fG51bGw9PWdbIiFyZWYiXSlyZXR1cm5bXTt2YXIgb2UsVz1TYShnWyIhcmVmIl0pLGVlPSIiLGxlPVtdLGRlPVtdLERlPUFycmF5Lmlz''@;'; put 'put ''QXJyYXkoZyk7Zm9yKG9lPVcucy5jO29lPD1XLmUuYzsrK29lKWxlW29lXT1QYShvZSk7Zm9yKHZhciBSZT1XLnMucjtSZTw9Vy5lLnI7KytSZSlmb3IoZWU9em4oUmUpLG9lPVcucy5jO29lPD1XLmUuYzsrK29lKWlmKHg9bGVbb2VdK2VlLFY9IiIsdm9pZCAwIT09KHc9RGU/KGdbUmVdfHxb''@;'; put 'put ''XSlbb2VdOmdbeF0pKXtpZihudWxsIT13LkYpe2lmKHg9dy5GLCF3LmYpY29udGludWU7Vj13LmYsLTE9PXguaW5kZXhPZigiOiIpJiYoeD14KyI6Iit4KX1pZihudWxsIT13LmYpVj13LmY7ZWxzZXtpZigieiI9PXcudCljb250aW51ZTtpZigibiI9PXcudCYmbnVsbCE9dy52KVY9IiIrdy52''@;'; put 'put ''O2Vsc2UgaWYoImIiPT13LnQpVj13LnY/IlRSVUUiOiJGQUxTRSI7ZWxzZSBpZih2b2lkIDAhPT13LncpVj0iJyIrdy53O2Vsc2V7aWYodm9pZCAwPT09dy52KWNvbnRpbnVlO1Y9InMiPT13LnQ/IiciK3cudjoiIit3LnZ9fWRlW2RlLmxlbmd0aF09eCsiPSIrVn1yZXR1cm4gZGV9ZnVuY3Rp''@;'; put 'put ''b24gTjMoZyx4LHcpe3ZhciBWPXd8fHt9LFc9KyFWLnNraXBIZWFkZXIsZWU9Z3x8e30sbGU9MCxvZT0wO2lmKGVlJiZudWxsIT1WLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIFYub3JpZ2luKWxlPVYub3JpZ2luO2Vsc2V7dmFyIGRlPSJzdHJpbmciPT10eXBlb2YgVi5vcmlnaW4/eGEo''@;'; put 'put ''Vi5vcmlnaW4pOlYub3JpZ2luO2xlPWRlLnIsb2U9ZGUuY312YXIgRGUsUmU9SlNPTi5wYXJzZSgneyJzIjogeyJjIjowLCAiciI6MH0sICJlIjogeyJjIjowLCAiciI6MH19Jyk7aWYoUmUuZS5jPW9lLFJlLmUucj1sZSt4Lmxlbmd0aC0xK1csZWVbIiFyZWYiXSl7dmFyIFZlPVNhKGVlWyIh''@;'; put 'put ''cmVmIl0pO1JlLmUuYz1NYXRoLm1heChSZS5lLmMsVmUuZS5jKSxSZS5lLnI9TWF0aC5tYXgoUmUuZS5yLFZlLmUuciksLTE9PWxlJiYoUmUuZS5yPShsZT1WZS5lLnIrMSkreC5sZW5ndGgtMStXKX1lbHNlLTE9PWxlJiYobGU9MCxSZS5lLnI9eC5sZW5ndGgtMStXKTt2YXIgR2U9Vi5oZWFk''@;'; put 'put ''ZXJ8fFtdLGV0PTA7eC5mb3JFYWNoKGZ1bmN0aW9uKEplLGZ0KXt4ZShKZSkuZm9yRWFjaChmdW5jdGlvbihSdCl7LTE9PShldD1HZS5pbmRleE9mKFJ0KSkmJihHZVtldD1HZS5sZW5ndGhdPVJ0KTt2YXIgU3Q9SmVbUnRdLEF0PSJ6Iix6dD0iIixTbj1Lcih7YzpvZStldCxyOmxlK2Z0K1d9''@;'; put 'put ''KTtpZihEZT1JdS5zaGVldF9nZXRfY2VsbChlZSxTbiksIVN0fHwib2JqZWN0IiE9dHlwZW9mIFN0fHxTdCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2YgU3Q/QXQ9Im4iOiJib29sZWFuIj09dHlwZW9mIFN0P0F0PSJiIjoic3RyaW5nIj09dHlwZW9mIFN0P0F0PSJzIjpT''@;'; put 'put ''dCBpbnN0YW5jZW9mIERhdGU/KEF0PSJkIixWLmNlbGxEYXRlc3x8KEF0PSJuIixTdD1ZZShTdCkpLHp0PURlLnomJmIuaXNfZGF0ZShEZS56KT9EZS56OlYuZGF0ZU5GfHxiLl90YWJsZVsxNF0pOm51bGw9PT1TdCYmVi5udWxsRXJyb3ImJihBdD0iZSIsU3Q9MCksRGU/KERlLnQ9QXQsRGUu''@;'; put 'put ''dj1TdCxkZWxldGUgRGUudyxkZWxldGUgRGUuUix6dCYmKERlLno9enQpKTplZVtTbl09RGU9e3Q6QXQsdjpTdH0senQmJihEZS56PXp0KSxEZSYmRGUuaCl0cnl7aWYoRGUuUj14ZC5odG1sX3RvX3JzKERlLmgpLCFEZS52KXtEZS52PSIiO2Zvcih2YXIgbHI9MDtscjxEZS5SLmxlbmd0aDsr''@;'; put 'put ''K2xyKURlLnYrPURlLlJbbHJdLnZ8fCIifX1jYXRjaHt9fWVsc2UgZWVbU25dPVN0fSl9KSxSZS5lLmM9TWF0aC5tYXgoUmUuZS5jLG9lK0dlLmxlbmd0aC0xKTt2YXIgYnQ9em4obGUpO2lmKFcpZm9yKGV0PTA7ZXQ8R2UubGVuZ3RoOysrZXQpZWVbUGEoZXQrb2UpK2J0XT17dDoicyIsdjpH''@;'; put 'put ''ZVtldF19O3JldHVybiBlZVsiIXJlZiJdPUppKFJlKSxlZX12YXIgSXU9e2VuY29kZV9jb2w6UGEsZW5jb2RlX3Jvdzp6bixlbmNvZGVfY2VsbDpLcixlbmNvZGVfcmFuZ2U6SmksZGVjb2RlX2NvbDpLbyxkZWNvZGVfcm93OnlpLHNwbGl0X2NlbGw6ZnVuY3Rpb24gZ2EoZyl7cmV0dXJuIGcu''@;'; put 'put ''cmVwbGFjZSgvKFwkP1tBLVpdKikoXCQ/XGQqKS8sIiQxLCQyIikuc3BsaXQoIiwiKX0sZGVjb2RlX2NlbGw6eGEsZGVjb2RlX3JhbmdlOndyLGZvcm1hdF9jZWxsOmxjLGdldF9mb3JtdWxhZTpDRSxtYWtlX2NzdjpIYixtYWtlX2pzb246UzksbWFrZV9mb3JtdWxhZTpDRSxodG1sX3RvX3Jz''@;'; put 'put ''OnhkLmh0bWxfdG9fcnMsc2hlZXRfYWRkX2FvYTpvMSxzaGVldF9hZGRfanNvbjpOMyxzaGVldF9hZGRfZG9tOmRFLGFvYV90b19zaGVldDpRMixqc29uX3RvX3NoZWV0OmZ1bmN0aW9uIE05KGcseCl7cmV0dXJuIE4zKG51bGwsZyx4KX0sdGFibGVfdG9fc2hlZXQ6TU8sdGFibGVfdG9fYm9v''@;'; put 'put ''azpmdW5jdGlvbiByWShnLHgpe3JldHVybiBlaChNTyhnLHgpLHgpfSxzaGVldF90b19jc3Y6SGIsc2hlZXRfdG9fdHh0Om1ZLHNoZWV0X3RvX2pzb246Uzksc2hlZXRfdG9faHRtbDp4ZC5mcm9tX3NoZWV0LHNoZWV0X3RvX2Zvcm11bGFlOkNFLHNoZWV0X3RvX3Jvd19vYmplY3RfYXJyYXk6''@;'; put 'put ''Uzl9O2Z1bmN0aW9uIFdlKGcseCx3LFYsVyl7dmFyIGVlO2lmKGcuc3R5bGUmJiEoZy5fcmFuZ2UmJihlZT0ic3RyaW5nIj09dHlwZW9mIGcuX3JhbmdlP2YudXRpbHMuZGVjb2RlX3JhbmdlKGcuX3JhbmdlKTpnLl9yYW5nZSx3LmM+ZWUuZS5jfHx3LmM8ZWUucy5jfHx3LnI+ZWUuZS5yfHx3''@;'; put 'put ''LnI8ZWUucy5yKSkmJmVlKXt2YXIgbGU9Zy5zdHlsZS5zdHlsZTtpZihsZSl7bGUud2hvbGVUYWJsZSYmSXUuYXBwbHlfc3R5bGVfZGVsdGEoVixsZS53aG9sZVRhYmxlKTtlOmlmKGxlLmhlYWRlclJvdylpZihXKXtpZih3LnIhPWVlLnMucilicmVhayBlO0x0KGcuc3R5bGUuY29saGVhZCl8''@;'; put 'put ''fEl1LmFwcGx5X3N0eWxlX2RlbHRhKFYsbGUuaGVhZGVyUm93KX1lbHNle2lmKHcuciE9ZWUucy5yKWJyZWFrIGU7THQoZy5oZWFkZXIpfHxJdS5hcHBseV9zdHlsZV9kZWx0YShWLGxlLmhlYWRlclJvdyl9fX19SXUudGVzdF9wYXNzd29yZD1mdW5jdGlvbiBnRShnLHgpe3ZhciB3PUJ1ZmZl''@;'; put 'put ''ci5mcm9tKGcuc2FsdCwiYmFzZTY0IiksVj1nLmFsZ28sVz13YyhCdWZmZXIuY29uY2F0KFt3LEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAseCkpXSksViksZWU9QnVmZmVyLmFsbG9jKDQpO0dzKGVlLDApO2Zvcih2YXIgbGU9MDtsZTxnLnNwaW47KytsZSllZS5sPTAs''@;'; put 'put ''ZWUud3JpdGVfc2hpZnQoNCxsZSksVz13YyhCdWZmZXIuY29uY2F0KFtXLGVlXSksVik7dmFyIG9lPUJ1ZmZlci5mcm9tKGcuaGFzaCwiYmFzZTY0Iik7cmV0dXJuIDA9PVcuY29tcGFyZShvZSl9LEl1Lmhhc2hfcGFzc3dvcmQ9ZnVuY3Rpb24gQWIoZyl7dmFyIHg9e2FsZ286IlNIQS01MTIi''@;'; put 'put ''LHNhbHQ6IlUyaGxaWFJLVXk1amIyMHZlR3h6ZUE9PSIsc3BpbjoxZTN9LHc9QnVmZmVyLmZyb20oeC5zYWx0LCJiYXNlNjQiKSxWPXguYWxnbyxXPXdjKEJ1ZmZlci5jb25jYXQoW3csQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxnKSldKSxWKSxlZT1CdWZmZXIuYWxs''@;'; put 'put ''b2MoNCk7R3MoZWUsMCk7Zm9yKHZhciBsZT0wO2xlPHguc3BpbjsrK2xlKWVlLmw9MCxlZS53cml0ZV9zaGlmdCg0LGxlKSxXPXdjKEJ1ZmZlci5jb25jYXQoW1csZWVdKSxWKTtyZXR1cm4geC5oYXNoPVcudG9TdHJpbmcoImJhc2U2NCIpLHh9LEl1LnNoZWV0X3NldF9yYW5nZV9zdHlsZT1m''@;'; put 'put ''dW5jdGlvbihnLHgsdyl7aWYodyl7dmFyIFY9InN0cmluZyI9PXR5cGVvZiB4P1NhKHgpOng7bnVsbCE9Vi5yJiZudWxsIT1WLmMmJihWPXtzOlYsZTpWfSk7dmFyIG9lLFc9Vi5zLnIsZWU9MCxsZT0iIixkZT13cihnWyIhcmVmIl18fCJBMSIpO2RlLnMucj5WLnMuciYmKGRlLnMucj1WLnMu''@;'; put 'put ''ciksZGUucy5jPlYucy5jJiYoZGUucy5jPVYucy5jKSxkZS5lLnI8Vi5lLnImJihkZS5lLnI9Vi5lLnIpLGRlLmUuYzxWLmUuYyYmKGRlLmUuYz1WLmUuYyksZ1siIXJlZiJdPUppKGRlKTtmb3IodmFyIFJlPUFycmF5LmlzQXJyYXkoZyk7Vzw9Vi5lLnI7KytXKWZvcihlZT1WLnMuYztlZTw9''@;'; put 'put ''Vi5lLmM7KytlZSlSZT8oZ1tXXXx8KGdbV109W10pLGdbV11bZWVdfHwoZ1tXXVtlZV09e3Q6InoifSksb2U9Z1tXXVtlZV0pOihnW2xlPUtyKHtyOlcsYzplZX0pXXx8KGdbbGVdPXt0OiJ6In0pLG9lPWdbbGVdKSxvZS5zfHwob2Uucz17fSksT2JqZWN0LmtleXModykuZm9yRWFjaChEZSks''@;'; put 'put ''b2Uucy5wYXR0ZXJuVHlwZSYmIW9lLnMuZmdDb2xvciYmKGRlbGV0ZSBvZS5zLnBhdHRlcm5UeXBlLGRlbGV0ZSBvZS5zLmJnQ29sb3IpLChvZS5zLmZnQ29sb3J8fG9lLnMuYmdDb2xvcikmJiJub25lIj09KG9lLnMucGF0dGVyblR5cGV8fCJub25lIikmJihvZS5zLnBhdHRlcm5UeXBlPSJz''@;'; put 'put ''b2xpZCIpO2lmKFc9Vi5zLnIsdy50b3B8fG51bGw9PT13LnRvcClmb3IoZWU9Vi5zLmM7ZWU8PVYuZS5jOysrZWUpe2lmKFJlKXtpZighZ1tXXSljb250aW51ZTtvZT1nW1ddW2VlXX1lbHNlIGxlPUtyKHtyOlcsYzplZX0pLG9lPWdbbGVdO29lJiYobnVsbD09PXcudG9wP2RlbGV0ZSBvZS5z''@;'; put 'put ''LnRvcDpvZS5zLnRvcD1ybih3LnRvcCkpfWlmKFc9Vi5lLnIsdy5ib3R0b218fG51bGw9PT13LmJvdHRvbSlmb3IoZWU9Vi5zLmM7ZWU8PVYuZS5jOysrZWUpe2lmKFJlKXtpZighZ1tXXSljb250aW51ZTtvZT1nW1ddW2VlXX1lbHNlIGxlPUtyKHtyOlcsYzplZX0pLG9lPWdbbGVdO29lJiYo''@;'; put 'put ''bnVsbD09PXcuYm90dG9tP2RlbGV0ZSBvZS5zLmJvdHRvbTpvZS5zLmJvdHRvbT1ybih3LmJvdHRvbSkpfWlmKGVlPVYucy5jLHcubGVmdHx8bnVsbD09PXcubGVmdClmb3IoVz1WLnMucjtXPD1WLmUucjsrK1cpe2lmKFJlKXtpZighZ1tXXSljb250aW51ZTtvZT1nW1ddW2VlXX1lbHNlIGxl''@;'; put 'put ''PUtyKHtyOlcsYzplZX0pLG9lPWdbbGVdO29lJiYobnVsbD09PXcubGVmdD9kZWxldGUgb2Uucy5sZWZ0Om9lLnMubGVmdD1ybih3LmxlZnQpKX1pZihlZT1WLmUuYyx3LnJpZ2h0fHxudWxsPT09dy5yaWdodClmb3IoVz1WLnMucjtXPD1WLmUucjsrK1cpe2lmKFJlKXtpZighZ1tXXSljb250''@;'; put 'put ''aW51ZTtvZT1nW1ddW2VlXX1lbHNlIGxlPUtyKHtyOlcsYzplZX0pLG9lPWdbbGVdO29lJiYobnVsbD09PXcucmlnaHQ/ZGVsZXRlIG9lLnMucmlnaHQ6b2Uucy5yaWdodD1ybih3LnJpZ2h0KSl9fWZ1bmN0aW9uIERlKFZlKXtpZigidG9wIiE9VmUmJiJib3R0b20iIT1WZSYmImxlZnQiIT1W''@;'; put 'put ''ZSYmInJpZ2h0IiE9VmUpe2lmKCJ6Ij09VmUpcmV0dXJuIHZvaWQob2Uuej13LnopO2lmKCJhbGlnbm1lbnQiPT1WZSlyZXR1cm4gdm9pZChvZS5zW1ZlXT9PYmplY3Qua2V5cyh3W1ZlXSkuZm9yRWFjaChmdW5jdGlvbihHZSl7b2Uuc1tWZV1bR2VdPXdbVmVdW0dlXX0pOm9lLnNbVmVdPXJu''@;'; put 'put ''KHdbVmVdKSk7aWYoImluY29sIj09VmUpcmV0dXJuIGVlPlYucy5jJiYobnVsbD09PXcubGVmdD9kZWxldGUgb2Uucy5sZWZ0Om9lLnMubGVmdD0ib2JqZWN0Ij09dHlwZW9mIHdbVmVdP3JuKHdbVmVdKTp3W1ZlXSksdm9pZChlZTxWLmUuYyYmKG51bGw9PT13LnJpZ2h0P2RlbGV0ZSBvZS5z''@;'; put 'put ''LnJpZ2h0Om9lLnMucmlnaHQ9Im9iamVjdCI9PXR5cGVvZiB3W1ZlXT9ybih3W1ZlXSk6d1tWZV0pKTtpZigiaW5yb3ciPT1WZSlyZXR1cm4gVz5WLnMuciYmKG51bGw9PT13LnRvcD9kZWxldGUgb2Uucy50b3A6b2Uucy50b3A9Im9iamVjdCI9PXR5cGVvZiB3W1ZlXT9ybih3W1ZlXSk6d1tW''@;'; put 'put ''ZV0pLHZvaWQoVzxWLmUuciYmKG51bGw9PT13LmJvdHRvbT9kZWxldGUgb2Uucy5ib3R0b206b2Uucy5ib3R0b209Im9iamVjdCI9PXR5cGVvZiB3W1ZlXT9ybih3W1ZlXSk6d1tWZV0pKTtudWxsPT09d1tWZV0/ZGVsZXRlIG9lLnNbVmVdOm9lLnNbVmVdPXdbVmVdJiZBcnJheS5pc0FycmF5''@;'; put 'put ''KHdbVmVdKT93W1ZlXS5zbGljZSgpLm1hcChmdW5jdGlvbihHZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBHZT9ybihHZSk6R2V9KToib2JqZWN0Ij09dHlwZW9mIHdbVmVdP3JuKHdbVmVdKTp3W1ZlXX19fSxJdS5hcHBseV9zdHlsZV9kZWx0YT1mdW5jdGlvbihnLHgpe1sic3oiLCJib2xk''@;'; put 'put ''IiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIsInZhbGlnbiJdLmZvckVhY2goZnVuY3Rpb24odyl7dmFyIFY9dzsiYmdDb2xvciI9PXc/Vj0iZmdDb2xvciI6ImZnQ29sb3IiPT13JiYoVj0iYmdDb2xvciIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bCh4LHcpJiYobnVsbD09PXhbd10/ZGVsZXRlIGdbVl06bnVsbCE9eFt3XSYmKGdbVl09eFt3XSkpfSksWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJhbGlnbm1lbnQiLCJwcm90ZWN0aW9uIiwiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmZvckVhY2goZnVuY3Rpb24odyl7''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsdykmJihudWxsPT09eFt3XT9kZWxldGUgZ1t3XTpudWxsIT14W3ddJiYoZ1t3XT1ybih4W3ddKSkpfSl9LEl1LmdldF9jb21wdXRlZF9zdHlsZT1mdW5jdGlvbihnLHgpeyJzdHJpbmciPT10eXBlb2YgeCYmKHg9Zi51dGls''@;'; put 'put ''cy5kZWNvZGVfY2VsbCh4KSk7dmFyIHc9QXJyYXkuaXNBcnJheShnKT8oZ1t4LnJdfHxbXSlbeC5jXTpnW2YudXRpbHMuZW5jb2RlX2NlbGwoeCldLFY9cm4odyYmdy5zfHx7fSk7cmV0dXJuIGdbIiF0YWJsZXMiXSYmZ1siIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24oVyl7V2UoVywwLHgs''@;'; put 'put ''Vil9KSxnWyIhcGl2b3RzIl0mJmdbIiFwaXZvdHMiXS5mb3JFYWNoKGZ1bmN0aW9uKFcpe1dlKFcsMCx4LFYsITApfSksVn07dmFyIE5iPXt9O0l1LmNlbGxfYXJyYXlfdG9fY3N2X3Jvdz1mdW5jdGlvbihnLHgpe3ZhciB3PXg/P3t9LFY9dm9pZCAwIT09dy5GUz93LkZTOiIsIixXPVYuY2hh''@;'; put 'put ''ckNvZGVBdCgwKSxlZT12b2lkIDAhPT13LlJTP3cuUlM6IlxuIixsZT1lZS5jaGFyQ29kZUF0KDApLG9lPU5iW1ZdfHwoTmJbVl09bmV3IFJlZ0V4cCgoInwiPT1WPyJcXHwiOlYpKyIrJCIpKSxkZT1mdW5jdGlvbiBVTyhnLHgsdyxWLFcpe2Zvcih2YXIgZWU9ITAsbGU9W10sb2U9IiIsZGU9''@;'; put 'put ''MDtkZTw9Zy5sZW5ndGgtMTsrK2RlKXt2YXIgRGU9Z1tkZV07aWYobnVsbD09RGUpb2U9IiI7ZWxzZSBpZihudWxsIT1EZS52KXtlZT0hMSxvZT0iIitsYyhEZSxudWxsLFcpO2Zvcih2YXIgUmU9MCxWZT0wO1JlIT09b2UubGVuZ3RoOysrUmUpaWYoKFZlPW9lLmNoYXJDb2RlQXQoUmUpKT09''@;'; put 'put ''PXh8fFZlPT09d3x8MzQ9PT1WZSl7b2U9JyInK29lLnJlcGxhY2UoS3AsJyIiJykrJyInO2JyZWFrfSJJRCI9PW9lJiYob2U9JyJJRCInKX1lbHNlIG51bGw9PURlLmZ8fERlLkY/b2U9IiI6KGVlPSExLChvZT0iPSIrRGUuZikuaW5kZXhPZigiLCIpPj0wJiYob2U9JyInK29lLnJlcGxhY2Uo''@;'; put 'put ''S3AsJyIiJykrJyInKSk7bGUucHVzaChvZSl9cmV0dXJuITE9PT1XLmJsYW5rcm93cyYmZWU/bnVsbDpsZS5qb2luKFYpfShnLFcsbGUsVix3KTtyZXR1cm4gdy5zdHJpcCYmKGRlPWRlLnJlcGxhY2Uob2UsIiIpKSxkZStlZX0sZnVuY3Rpb24oZyl7ZnVuY3Rpb24gdyhlZSxsZSxvZSl7cmV0''@;'; put 'put ''dXJuIG51bGwhPWVlW2xlXT9lZVtsZV06ZWVbbGVdPW9lfWZ1bmN0aW9uIFYoZWUsbGUsb2Upe2lmKCJzdHJpbmciPT10eXBlb2YgbGUpe2lmKEFycmF5LmlzQXJyYXkoZWUpKXt2YXIgZGU9eGEobGUpO3JldHVybiBlZVtkZS5yXXx8KGVlW2RlLnJdPVtdKSxlZVtkZS5yXVtkZS5jXXx8KGVl''@;'; put 'put ''W2RlLnJdW2RlLmNdPXt0OiJ6In0pfXJldHVybiBlZVtsZV18fChlZVtsZV09e3Q6InoifSl9cmV0dXJuIFYoZWUsS3IoIm51bWJlciIhPXR5cGVvZiBsZT9sZTp7cjpsZSxjOm9lfHwwfSkpfWcuY29uc3RzPWcuY29uc3RzfHx7fSxnLnNoZWV0X2dldF9jZWxsPVYsZy5ib29rX25ldz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LGcuYm9va19hcHBlbmRfc2hlZXQ9ZnVuY3Rpb24oZWUsbGUsb2Upe2lmKCFvZSlmb3IodmFyIGRlPTE7ZGU8PTY1NTM1JiYtMSE9ZWUuU2hlZXROYW1lcy5pbmRleE9mKG9lPSJTaGVldCIrZGUpOysrZGUpO2lmKE8zKG9l''@;'; put 'put ''KSxlZS5TaGVldE5hbWVzLmluZGV4T2Yob2UpPj0wKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8IitvZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtlZS5TaGVldE5hbWVzLnB1c2gob2UpLGVlLlNoZWV0c1tvZV09bGV9LGcuYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eT1m''@;'; put 'put ''dW5jdGlvbihlZSxsZSxvZSl7dyhlZSwiV29ya2Jvb2siLHt9KSx3KGVlLldvcmtib29rLCJTaGVldHMiLFtdKTt2YXIgZGU9ZnVuY3Rpb24gVyhlZSxsZSl7aWYoIm51bWJlciI9PXR5cGVvZiBsZSl7aWYobGU+PTAmJmVlLlNoZWV0TmFtZXMubGVuZ3RoPmxlKXJldHVybiBsZTt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0ICMgIitsZSl9aWYoInN0cmluZyI9PXR5cGVvZiBsZSl7dmFyIG9lPWVlLlNoZWV0TmFtZXMuaW5kZXhPZihsZSk7aWYob2U+LTEpcmV0dXJuIG9lO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgbmFtZSB8IitsZSsifCIpfXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgfCIrbGUrInwiKX0oZWUsbGUpO3N3aXRjaCh3KGVlLldvcmtib29rLlNoZWV0cyxkZSx7fSksb2Upe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgc2hlZXQgdmlzaWJpbGl0eSBz''@;'; put 'put ''ZXR0aW5nICIrb2UpfWVlLldvcmtib29rLlNoZWV0c1tkZV0uSGlkZGVuPW9lfSxmdW5jdGlvbiB4KGVlKXtlZS5mb3JFYWNoKGZ1bmN0aW9uKGxlKXtnLmNvbnN0c1tsZVswXV09bGVbMV19KX0oW1siU0hFRVRfVklTSUJMRSIsMF0sWyJTSEVFVF9ISURERU4iLDFdLFsiU0hFRVRfVkVSWV9I''@;'; put 'put ''SURERU4iLDJdXSksZy5jZWxsX3NldF9udW1iZXJfZm9ybWF0PWZ1bmN0aW9uKGVlLGxlKXtyZXR1cm4gZWUuej1sZSxlZX0sZy5jZWxsX3NldF9oeXBlcmxpbms9ZnVuY3Rpb24oZWUsbGUsb2Upe3JldHVybiBsZT8oZWUubD17VGFyZ2V0OmxlfSxvZSYmKGVlLmwuVG9vbHRpcD1vZSksZWUu''@;'; put 'put ''c3x8KGVlLnM9e30pLGVlLnMuY29sb3I9e3RoZW1lOjEwfSk6KGRlbGV0ZSBlZS5sLGVlLnMmJmVlLnMuY29sb3ImJjEwPT1lZS5zLmNvbG9yLnRoZW1lJiZkZWxldGUgZWUucy5jb2xvciksZWV9LGcuY2VsbF9zZXRfaW50ZXJuYWxfbGluaz1mdW5jdGlvbihlZSxsZSxvZSl7cmV0dXJuIGcu''@;'; put 'put ''Y2VsbF9zZXRfaHlwZXJsaW5rKGVlLCIjIitsZSxvZSl9LGcuY2VsbF9hZGRfY29tbWVudD1mdW5jdGlvbihlZSxsZSxvZSl7ZWUuY3x8KGVlLmM9W10pLGVlLmMucHVzaCh7dDpsZSxhOm9lfHwiU2hlZXRKUyJ9KX0sZy5zaGVldF9zZXRfYXJyYXlfZm9ybXVsYT1mdW5jdGlvbihlZSxsZSxv''@;'; put 'put ''ZSl7Zm9yKHZhciBkZT0ic3RyaW5nIiE9dHlwZW9mIGxlP2xlOlNhKGxlKSxEZT0ic3RyaW5nIj09dHlwZW9mIGxlP2xlOkppKGxlKSxSZT1kZS5zLnI7UmU8PWRlLmUucjsrK1JlKWZvcih2YXIgVmU9ZGUucy5jO1ZlPD1kZS5lLmM7KytWZSl7dmFyIEdlPVYoZWUsUmUsVmUpO0dlLnQ9Im4i''@;'; put 'put ''LEdlLkY9RGUsZGVsZXRlIEdlLnYsUmU9PWRlLnMuciYmVmU9PWRlLnMuYyYmKEdlLmY9b2UpfXJldHVybiBlZX19KEl1KSxfZSYmZnVuY3Rpb24oKXt2YXIgZz1kKDcwNDUpLlJlYWRhYmxlO2Yuc3RyZWFtPXt0b19qc29uOmZ1bmN0aW9uKFcsZWUpe3ZhciBsZT1nKHtvYmplY3RNb2RlOiEw''@;'; put 'put ''fSk7aWYobnVsbD09V3x8bnVsbD09V1siIXJlZiJdKXJldHVybiBsZS5wdXNoKG51bGwpLGxlO3ZhciBvZT17dDoibiIsdjowfSxkZT0wLERlPTEsUmU9W10sVmU9MCxHZT0iIixldD17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LGJ0PWVlfHx7fSxKZT1udWxsIT1idC5yYW5nZT9idC5yYW5n''@;'; put 'put ''ZTpXWyIhcmVmIl07c3dpdGNoKDE9PT1idC5oZWFkZXI/ZGU9MToiQSI9PT1idC5oZWFkZXI/ZGU9MjpBcnJheS5pc0FycmF5KGJ0LmhlYWRlcikmJihkZT0zKSx0eXBlb2YgSmUpe2Nhc2Uic3RyaW5nIjpldD1TYShKZSk7YnJlYWs7Y2FzZSJudW1iZXIiOihldD1TYShXWyIhcmVmIl0pKS5z''@;'; put 'put ''LnI9SmU7YnJlYWs7ZGVmYXVsdDpldD1KZX1kZT4wJiYoRGU9MCk7dmFyIGZ0PXpuKGV0LnMuciksUnQ9W10sU3Q9MCxBdD1BcnJheS5pc0FycmF5KFcpLHp0PWV0LnMucixTbj0wLGxyPTA7Zm9yKEF0JiYhV1t6dF0mJihXW3p0XT1bXSksU249ZXQucy5jO1NuPD1ldC5lLmM7KytTbilzd2l0''@;'; put 'put ''Y2goUnRbU25dPVBhKFNuKSxvZT1BdD9XW3p0XVtTbl06V1tSdFtTbl0rZnRdLGRlKXtjYXNlIDE6UmVbU25dPVNuLWV0LnMuYzticmVhaztjYXNlIDI6UmVbU25dPVJ0W1NuXTticmVhaztjYXNlIDM6UmVbU25dPWJ0LmhlYWRlcltTbi1ldC5zLmNdO2JyZWFrO2RlZmF1bHQ6Zm9yKG51bGw9''@;'; put 'put ''PW9lJiYob2U9e3c6Il9fRU1QVFkiLHQ6InMifSksR2U9VmU9bGMob2UsbnVsbCxidCksU3Q9MCxscj0wO2xyPFJlLmxlbmd0aDsrK2xyKVJlW2xyXT09R2UmJihHZT1WZSsiXyIrICsrU3QpO1JlW1NuXT1HZX1yZXR1cm4genQ9ZXQucy5yK0RlLGxlLl9yZWFkPWZ1bmN0aW9uKCl7aWYoenQ+''@;'; put 'put ''ZXQuZS5yKXJldHVybiBsZS5wdXNoKG51bGwpO2Zvcig7enQ8PWV0LmUucjspe3ZhciBtbj1DOShXLGV0LHp0LFJ0LGRlLFJlLEF0LGJ0KTtpZigrK3p0LCExPT09bW4uaXNlbXB0eXx8KDE9PT1kZT8hMSE9PWJ0LmJsYW5rcm93czpidC5ibGFua3Jvd3MpKXtsZS5wdXNoKG1uLnJvdyk7YnJl''@;'; put 'put ''YWt9fX0sbGV9LHRvX2h0bWw6ZnVuY3Rpb24oVyxlZSl7dmFyIGxlPWcoKSxvZT1lZXx8e30sRGU9bnVsbCE9b2UuZm9vdGVyP29lLmZvb3Rlcjp4ZC5FTkQ7bGUucHVzaChudWxsIT1vZS5oZWFkZXI/b2UuaGVhZGVyOnhkLkJFR0lOKTt2YXIgUmU9d3IoV1siIXJlZiJdKTtvZS5kZW5zZT1B''@;'; put 'put ''cnJheS5pc0FycmF5KFcpLGxlLnB1c2goeGQuX3ByZWFtYmxlKFcsUmUsb2UpKTt2YXIgVmU9UmUucy5yLEdlPSExLGV0PVtdO3JldHVybiBsZS5fcmVhZD1mdW5jdGlvbigpe2lmKFZlPlJlLmUucilyZXR1cm4gR2V8fChHZT0hMCxsZS5wdXNoKCI8L3RhYmxlPiIrRGUpKSxsZS5wdXNoKG51''@;'; put 'put ''bGwpO2Zvcig7VmU8PVJlLmUucjspe2xlLnB1c2goeGQuX3JvdyhXLFJlLFZlLG9lLGV0LCIiKSksKytWZTticmVha319LGxlfSx0b19jc3Y6ZnVuY3Rpb24oVyxlZSl7dmFyIGxlPWcoKSxvZT1lZT8/e307aWYobnVsbD09V3x8bnVsbD09V1siIXJlZiJdKXJldHVybiBsZS5wdXNoKG51bGwp''@;'; put 'put ''LGxlO3ZhciBkZT1TYShXWyIhcmVmIl0pLERlPXZvaWQgMCE9PW9lLkZTP29lLkZTOiIsIixSZT1EZS5jaGFyQ29kZUF0KDApLFZlPXZvaWQgMCE9PW9lLlJTP29lLlJTOiJcbiIsR2U9VmUuY2hhckNvZGVBdCgwKSxldD1uZXcgUmVnRXhwKCgifCI9PURlPyJcXHwiOkRlKSsiKyQiKSxidD0i''@;'; put 'put ''IixKZT1bXTtvZS5kZW5zZT1BcnJheS5pc0FycmF5KFcpO2Zvcih2YXIgZnQ9b2Uuc2tpcEhpZGRlbiYmV1siIWNvbHMiXXx8W10sUnQ9b2Uuc2tpcEhpZGRlbiYmV1siIXJvd3MiXXx8W10sU3Q9ZGUucy5jO1N0PD1kZS5lLmM7KytTdCkoZnRbU3RdfHx7fSkuaGlkZGVufHwoSmVbU3RdPVBh''@;'; put 'put ''KFN0KSk7dmFyIEF0PWRlLnMucix6dD0hMTtyZXR1cm4gbGUuX3JlYWQ9ZnVuY3Rpb24oKXtpZighenQpcmV0dXJuIHp0PSEwLGxlLnB1c2goIlx1ZmVmZiIpO2Zvcig7QXQ8PWRlLmUucjspaWYoKytBdCwhKFJ0W0F0LTFdfHx7fSkuaGlkZGVuJiZudWxsIT0oYnQ9ek8oVyxkZSxBdC0xLEpl''@;'; put 'put ''LFJlLEdlLERlLG9lKSkpe29lLnN0cmlwJiYoYnQ9YnQucmVwbGFjZShldCwiIikpLGxlLnB1c2goYnQrVmUpO2JyZWFrfXJldHVybiBBdD5kZS5lLnI/bGUucHVzaChudWxsKTp2b2lkIDB9LGxlfX19KCksZi5wYXJzZV94bHNjZmI9cjYsZi5wYXJzZV96aXA9Rk8sZi5yZWFkPWw2LGYucmVh''@;'; put 'put ''ZEZpbGU9V2csZi5yZWFkRmlsZVN5bmM9V2csZi53cml0ZT1QYixmLndyaXRlRmlsZT1GYixmLndyaXRlRmlsZVN5bmM9RmIsZi53cml0ZUZpbGVBc3luYz1mdW5jdGlvbiBaZyhnLHgsdyxWKXt2YXIgVz13fHx7fTtXLnR5cGU9ImZpbGUiLFcuZmlsZT1nLGpPKFcpLFcudHlwZT0iYnVmZmVy''@;'; put 'put ''Ijt2YXIgZWU9VjtyZXR1cm4gZWUgaW5zdGFuY2VvZiBGdW5jdGlvbnx8KGVlPXcpLHplLndyaXRlRmlsZShnLFBiKHgsVyksZWUpfSxmLnNldF9kYXRlX3N0eWxlPWZ1bmN0aW9uIFl0KGcpe3N3aXRjaChnKXtjYXNlIDA6aHQoKTticmVhaztjYXNlIDE6IWZ1bmN0aW9uIHZ0KCl7dmFyIGc9''@;'; put 'put ''bmV3IERhdGU7S2U9cHQuZ2V0VGltZSgpKzZlNCooZy5nZXRUaW1lem9uZU9mZnNldCgpLXB0LmdldFRpbWV6b25lT2Zmc2V0KCkpO3ZhciB4PWcuZ2V0VGltZXpvbmVPZmZzZXQoKTtZZT1mdW5jdGlvbihWLFcpe3ZhciBlZT1WLmdldFRpbWUoKTtyZXR1cm4gVyYmKGVlLT0xMjYzMTY4ZTUp''@;'; put 'put ''LChlZS0ocHQuZ2V0VGltZSgpKzZlNCooVi5nZXRUaW1lem9uZU9mZnNldCgpLXB0LmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9LHF0PWZ1bmN0aW9uKFYpe3ZhciBXPW5ldyBEYXRlO3JldHVybiBXLnNldFRpbWUoMjQqVio2MCo2MCoxZTMrS2UpLFcuZ2V0VGltZXpvbmVPZmZzZXQo''@;'; put 'put ''KSE9PXgmJlcuc2V0VGltZShXLmdldFRpbWUoKSs2ZTQqKFcuZ2V0VGltZXpvbmVPZmZzZXQoKS14KSksV319KCl9fSxmLnV0aWxzPUl1LGYuU1NGPWIsdHlwZW9mIHVlPCJ1IiYmKGYuQ0ZCPXVlKX0oail9LDQ5NjA5KHRlLGosZCl7dmFyIFM9ajtTLmJpZ251bT1kKDk2ODY3KSxTLmRlZmlu''@;'; put 'put ''ZT1kKDE2NjI2KS5kZWZpbmUsUy5iYXNlPWQoMTUwNjYpLFMuY29uc3RhbnRzPWQoNDc3NDApLFMuZGVjb2RlcnM9ZCg5MTU1OCksUy5lbmNvZGVycz1kKDIyNzE0KX0sMTY2MjYodGUsaixkKXt2YXIgUz1kKDQ5NjA5KSxoPWQoNzE5OTMpO2Z1bmN0aW9uIEkoZixUKXt0aGlzLm5hbWU9Zix0''@;'; put 'put ''aGlzLmJvZHk9VCx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319ai5kZWZpbmU9ZnVuY3Rpb24oVCxBKXtyZXR1cm4gbmV3IEkoVCxBKX0sSS5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKFQpe3ZhciBBO3RyeXtBPWQoODY2MSkucnVuSW5UaGlzQ29udGV4dCgiKGZ1''@;'; put 'put ''bmN0aW9uICIrdGhpcy5uYW1lKyIoZW50aXR5KSB7XG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xufSkiKX1jYXRjaHtBPWZ1bmN0aW9uKE8pe3RoaXMuX2luaXROYW1lZChPKX19cmV0dXJuIGgoQSxUKSxBLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKE8pe1QuY2FsbCh0aGlz''@;'; put 'put ''LE8pfSxuZXcgQSh0aGlzKX0sSS5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoVD1UfHwiZGVyIil8fCh0aGlzLmRlY29kZXJzW1RdPXRoaXMuX2NyZWF0ZU5hbWVkKFMuZGVjb2RlcnNbVF0pKSx0aGlzLmRlY29k''@;'; put 'put ''ZXJzW1RdfSxJLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oVCxBLE0pe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKEEpLmRlY29kZShULE0pfSxJLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihUKXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShUPVR8fCJkZXIi''@;'; put 'put ''KXx8KHRoaXMuZW5jb2RlcnNbVF09dGhpcy5fY3JlYXRlTmFtZWQoUy5lbmNvZGVyc1tUXSkpLHRoaXMuZW5jb2RlcnNbVF19LEkucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihULEEsTSl7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoQSkuZW5jb2RlKFQsTSl9fSw5NzI5MCh0ZSxqLGQpe3Zh''@;'; put 'put ''ciBTPWQoNzE5OTMpLGg9ZCgxNTA2NikuUmVwb3J0ZXIsbz1kKDgzODM4KS5CdWZmZXI7ZnVuY3Rpb24gSShULEEpe2guY2FsbCh0aGlzLEEpLG8uaXNCdWZmZXIoVCk/KHRoaXMuYmFzZT1ULHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9VC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5v''@;'; put 'put ''dCBCdWZmZXIiKX1mdW5jdGlvbiBmKFQsQSl7aWYoQXJyYXkuaXNBcnJheShUKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9VC5tYXAoZnVuY3Rpb24oTSl7cmV0dXJuIE0gaW5zdGFuY2VvZiBmfHwoTT1uZXcgZihNLEEpKSx0aGlzLmxlbmd0aCs9TS5sZW5ndGgsTX0sdGhpcyk7ZWxzZSBp''@;'; put 'put ''ZigibnVtYmVyIj09dHlwZW9mIFQpe2lmKCEoMDw9VCYmVDw9MjU1KSlyZXR1cm4gQS5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9VCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBUKXRoaXMudmFsdWU9VCx0aGlzLmxlbmd0''@;'; put 'put ''aD1vLmJ5dGVMZW5ndGgoVCk7ZWxzZXtpZighby5pc0J1ZmZlcihUKSlyZXR1cm4gQS5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgVCk7dGhpcy52YWx1ZT1ULHRoaXMubGVuZ3RoPVQubGVuZ3RofX1TKEksaCksai50PUksSS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6aC5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sSS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihBKXt2YXIgTT1uZXcgSSh0aGlzLmJhc2UpO3JldHVybiBNLm9mZnNldD1BLm9mZnNldCxNLmxlbmd0aD10aGlzLm9mZnNldCx0''@;'; put 'put ''aGlzLm9mZnNldD1BLm9mZnNldCxoLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxBLnJlcG9ydGVyKSxNfSxJLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihBKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEF8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sSS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihBLE0pe2lmKCEodGhpcy5vZmZzZXQrQTw9dGhp''@;'; put 'put ''cy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKE18fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgTz1uZXcgSSh0aGlzLmJhc2UpO3JldHVybiBPLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsTy5vZmZzZXQ9dGhpcy5vZmZzZXQsTy5sZW5ndGg9dGhpcy5vZmZzZXQr''@;'; put 'put ''QSx0aGlzLm9mZnNldCs9QSxPfSxJLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShBP0Eub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sai5kPWYsZi5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihBLE0pe3JldHVybiBBfHwoQT1uZXcgbyh0''@;'; put 'put ''aGlzLmxlbmd0aCkpLE18fChNPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKE8pe08uam9pbihBLE0pLE0rPU8ubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9BW01dPXRoaXMudmFs''@;'; put 'put ''dWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Eud3JpdGUodGhpcy52YWx1ZSxNKTpvLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoQSxNKSxNKz10aGlzLmxlbmd0aCkpLEF9fSwxNTA2Nih0ZSxqLGQpe3ZhciBTPWo7Uy5SZXBvcnRlcj1kKDg1Njk3KS5hLFMu''@;'; put 'put ''RGVjb2RlckJ1ZmZlcj1kKDk3MjkwKS50LFMuRW5jb2RlckJ1ZmZlcj1kKDk3MjkwKS5kLFMuTm9kZT1kKDM0MzIwKX0sMzQzMjAodGUsaixkKXt2YXIgUz1kKDE1MDY2KS5SZXBvcnRlcixoPWQoMTUwNjYpLkVuY29kZXJCdWZmZXIsbz1kKDE1MDY2KS5EZWNvZGVyQnVmZmVyLEk9ZCgzOTIx''@;'; put 'put ''MCksZj1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZz''@;'; put 'put ''dHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLFQ9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNh''@;'; put 'put ''dChmKTtmdW5jdGlvbiBNKEQsRSl7dmFyIEI9e307dGhpcy5fYmFzZVN0YXRlPUIsQi5lbmM9RCxCLnBhcmVudD1FfHxudWxsLEIuY2hpbGRyZW49bnVsbCxCLnRhZz1udWxsLEIuYXJncz1udWxsLEIucmV2ZXJzZUFyZ3M9bnVsbCxCLmNob2ljZT1udWxsLEIub3B0aW9uYWw9ITEsQi5hbnk9''@;'; put 'put ''ITEsQi5vYmo9ITEsQi51c2U9bnVsbCxCLnVzZURlY29kZXI9bnVsbCxCLmtleT1udWxsLEIuZGVmYXVsdD1udWxsLEIuZXhwbGljaXQ9bnVsbCxCLmltcGxpY2l0PW51bGwsQi5jb250YWlucz1udWxsLEIucGFyZW50fHwoQi5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfXRlLmV4cG9ydHM9''@;'; put 'put ''TTt2YXIgTz1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO00u''@;'; put 'put ''cHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5fYmFzZVN0YXRlLEI9e307Ty5mb3JFYWNoKGZ1bmN0aW9uKE4pe0JbTl09RVtOXX0pO3ZhciBGPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEIucGFyZW50KTtyZXR1cm4gRi5fYmFzZVN0YXRlPUIsRn0sTS5wcm90b3R5cGUuX3dy''@;'; put 'put ''YXA9ZnVuY3Rpb24oKXt2YXIgRT10aGlzLl9iYXNlU3RhdGU7VC5mb3JFYWNoKGZ1bmN0aW9uKEIpe3RoaXNbQl09ZnVuY3Rpb24oKXt2YXIgTj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gRS5jaGlsZHJlbi5wdXNoKE4pLE5bQl0uYXBwbHkoTixhcmd1bWVudHMpfX0sdGhp''@;'; put 'put ''cyl9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEUpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtJKG51bGw9PT1CLnBhcmVudCksRS5jYWxsKHRoaXMpLEIuY2hpbGRyZW49Qi5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oRil7cmV0dXJuIEYuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0''@;'; put 'put ''aGlzKSxJLmVxdWFsKEIuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxNLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihFKXt2YXIgQj10aGlzLl9iYXNlU3RhdGUsRj1FLmZpbHRlcihmdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5j''@;'; put 'put ''ZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO0U9RS5maWx0ZXIoZnVuY3Rpb24oTil7cmV0dXJuIShOIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1GLmxlbmd0aCYmKEkobnVsbD09PUIuY2hpbGRyZW4pLEIuY2hpbGRyZW49RixGLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''Til7Ti5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PUUubGVuZ3RoJiYoSShudWxsPT09Qi5hcmdzKSxCLmFyZ3M9RSxCLnJldmVyc2VBcmdzPUUubWFwKGZ1bmN0aW9uKE4pe2lmKCJvYmplY3QiIT10eXBlb2YgTnx8Ti5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gTjt2''@;'; put 'put ''YXIgSD17fTtyZXR1cm4gT2JqZWN0LmtleXMoTikuZm9yRWFjaChmdW5jdGlvbih6KXt6PT0oMHx6KSYmKHp8PTApLEhbTlt6XV09en0pLEh9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNv''@;'; put 'put ''ZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKEQpe00ucHJvdG90eXBlW0RdPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEQrIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLGYuZm9yRWFjaChmdW5jdGlvbihEKXtNLnByb3RvdHlwZVtEXT1mdW5jdGlvbigpe3ZhciBCPXRo''@;'; put 'put ''aXMuX2Jhc2VTdGF0ZSxGPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEkobnVsbD09PUIudGFnKSxCLnRhZz1ELHRoaXMuX3VzZUFyZ3MoRiksdGhpc319KSxNLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oRSl7SShFKTt2YXIgQj10aGlzLl9iYXNlU3RhdGU7''@;'; put 'put ''cmV0dXJuIEkobnVsbD09PUIudXNlKSxCLnVzZT1FLHRoaXN9LE0ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxNLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oRSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO3JldHVy''@;'; put 'put ''biBJKG51bGw9PT1CLmRlZmF1bHQpLEIuZGVmYXVsdD1FLEIub3B0aW9uYWw9ITAsdGhpc30sTS5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oRSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBJKG51bGw9PT1CLmV4cGxpY2l0JiZudWxsPT09Qi5pbXBsaWNpdCksQi5leHBsaWNp''@;'; put 'put ''dD1FLHRoaXN9LE0ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKEUpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gSShudWxsPT09Qi5leHBsaWNpdCYmbnVsbD09PUIuaW1wbGljaXQpLEIuaW1wbGljaXQ9RSx0aGlzfSxNLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgRT10''@;'; put 'put ''aGlzLl9iYXNlU3RhdGUsQj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBFLm9iaj0hMCwwIT09Qi5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoQiksdGhpc30sTS5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKEUpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4g''@;'; put 'put ''SShudWxsPT09Qi5rZXkpLEIua2V5PUUsdGhpc30sTS5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sTS5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKEUpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gSShudWxsPT09Qi5j''@;'; put 'put ''aG9pY2UpLEIuY2hvaWNlPUUsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhFKS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuIEVbRl19KSksdGhpc30sTS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oRSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBJKG51bGw9PT1CLnVzZSksQi5j''@;'; put 'put ''b250YWlucz1FLHRoaXN9LE0ucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oRSxCKXt2YXIgRj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PUYucGFyZW50KXJldHVybiBFLndyYXBSZXN1bHQoRi5jaGlsZHJlblswXS5fZGVjb2RlKEUsQikpO3ZhciBLLE49Ri5kZWZhdWx0LEg9ITAsej1u''@;'; put 'put ''dWxsO2lmKG51bGwhPT1GLmtleSYmKHo9RS5lbnRlcktleShGLmtleSkpLEYub3B0aW9uYWwpe3ZhciBaPW51bGw7aWYobnVsbCE9PUYuZXhwbGljaXQ/Wj1GLmV4cGxpY2l0Om51bGwhPT1GLmltcGxpY2l0P1o9Ri5pbXBsaWNpdDpudWxsIT09Ri50YWcmJihaPUYudGFnKSxudWxsIT09Wnx8''@;'; put 'put ''Ri5hbnkpe2lmKEg9dGhpcy5fcGVla1RhZyhFLFosRi5hbnkpLEUuaXNFcnJvcihIKSlyZXR1cm4gSH1lbHNle3ZhciBVPUUuc2F2ZSgpO3RyeXtudWxsPT09Ri5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhGLnRhZyxFLEIpOnRoaXMuX2RlY29kZUNob2ljZShFLEIpLEg9ITB9Y2F0Y2h7''@;'; put 'put ''SD0hMX1FLnJlc3RvcmUoVSl9fWlmKEYub2JqJiZIJiYoSz1FLmVudGVyT2JqZWN0KCkpLEgpe2lmKG51bGwhPT1GLmV4cGxpY2l0KXt2YXIgWD10aGlzLl9kZWNvZGVUYWcoRSxGLmV4cGxpY2l0KTtpZihFLmlzRXJyb3IoWCkpcmV0dXJuIFg7RT1YfXZhciBuZT1FLm9mZnNldDtpZihudWxs''@;'; put 'put ''PT09Ri51c2UmJm51bGw9PT1GLmNob2ljZSl7Ri5hbnkmJihVPUUuc2F2ZSgpKTt2YXIgc2U9dGhpcy5fZGVjb2RlVGFnKEUsbnVsbCE9PUYuaW1wbGljaXQ/Ri5pbXBsaWNpdDpGLnRhZyxGLmFueSk7aWYoRS5pc0Vycm9yKHNlKSlyZXR1cm4gc2U7Ri5hbnk/Tj1FLnJhdyhVKTpFPXNlfWlm''@;'; put 'put ''KEImJkIudHJhY2smJm51bGwhPT1GLnRhZyYmQi50cmFjayhFLnBhdGgoKSxuZSxFLmxlbmd0aCwidGFnZ2VkIiksQiYmQi50cmFjayYmbnVsbCE9PUYudGFnJiZCLnRyYWNrKEUucGF0aCgpLEUub2Zmc2V0LEUubGVuZ3RoLCJjb250ZW50IiksRi5hbnl8fChOPW51bGw9PT1GLmNob2ljZT90''@;'; put 'put ''aGlzLl9kZWNvZGVHZW5lcmljKEYudGFnLEUsQik6dGhpcy5fZGVjb2RlQ2hvaWNlKEUsQikpLEUuaXNFcnJvcihOKSlyZXR1cm4gTjtpZighRi5hbnkmJm51bGw9PT1GLmNob2ljZSYmbnVsbCE9PUYuY2hpbGRyZW4mJkYuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihtZSl7bWUuX2RlY29k''@;'; put 'put ''ZShFLEIpfSksRi5jb250YWlucyYmKCJvY3RzdHIiPT09Ri50YWd8fCJiaXRzdHIiPT09Ri50YWcpKXt2YXIgaGU9bmV3IG8oTik7Tj10aGlzLl9nZXRVc2UoRi5jb250YWlucyxFLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShoZSxCKX19cmV0dXJuIEYub2JqJiZIJiYoTj1FLmxlYXZl''@;'; put 'put ''T2JqZWN0KEspKSxudWxsPT09Ri5rZXl8fG51bGw9PT1OJiYhMCE9PUg/bnVsbCE9PXomJkUuZXhpdEtleSh6KTpFLmxlYXZlS2V5KHosRi5rZXksTiksTn0sTS5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oRSxCLEYpe3ZhciBOPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2Vx''@;'; put 'put ''Ij09PUV8fCJzZXQiPT09RT9udWxsOiJzZXFvZiI9PT1FfHwic2V0b2YiPT09RT90aGlzLl9kZWNvZGVMaXN0KEIsRSxOLmFyZ3NbMF0sRik6L3N0ciQvLnRlc3QoRSk/dGhpcy5fZGVjb2RlU3RyKEIsRSxGKToib2JqaWQiPT09RSYmTi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEIsTi5hcmdz''@;'; put 'put ''WzBdLE4uYXJnc1sxXSxGKToib2JqaWQiPT09RT90aGlzLl9kZWNvZGVPYmppZChCLG51bGwsbnVsbCxGKToiZ2VudGltZSI9PT1FfHwidXRjdGltZSI9PT1FP3RoaXMuX2RlY29kZVRpbWUoQixFLEYpOiJudWxsXyI9PT1FP3RoaXMuX2RlY29kZU51bGwoQixGKToiYm9vbCI9PT1FP3RoaXMu''@;'; put 'put ''X2RlY29kZUJvb2woQixGKToib2JqRGVzYyI9PT1FP3RoaXMuX2RlY29kZVN0cihCLEUsRik6ImludCI9PT1FfHwiZW51bSI9PT1FP3RoaXMuX2RlY29kZUludChCLE4uYXJncyYmTi5hcmdzWzBdLEYpOm51bGwhPT1OLnVzZT90aGlzLl9nZXRVc2UoTi51c2UsQi5fcmVwb3J0ZXJTdGF0ZS5v''@;'; put 'put ''YmopLl9kZWNvZGUoQixGKTpCLmVycm9yKCJ1bmtub3duIHRhZzogIitFKX0sTS5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihFLEIpe3ZhciBGPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gRi51c2VEZWNvZGVyPXRoaXMuX3VzZShFLEIpLEkobnVsbD09PUYudXNlRGVjb2Rlci5fYmFzZVN0''@;'; put 'put ''YXRlLnBhcmVudCksRi51c2VEZWNvZGVyPUYudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLEYuaW1wbGljaXQhPT1GLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKEYudXNlRGVjb2Rlcj1GLnVzZURlY29kZXIuY2xvbmUoKSxGLnVzZURlY29kZXIuX2Jhc2VTdGF0''@;'; put 'put ''ZS5pbXBsaWNpdD1GLmltcGxpY2l0KSxGLnVzZURlY29kZXJ9LE0ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oRSxCKXt2YXIgRj10aGlzLl9iYXNlU3RhdGUsTj1udWxsLEg9ITE7cmV0dXJuIE9iamVjdC5rZXlzKEYuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHope3ZhciBaPUUu''@;'; put 'put ''c2F2ZSgpLFU9Ri5jaG9pY2Vbel07dHJ5e3ZhciBLPVUuX2RlY29kZShFLEIpO2lmKEUuaXNFcnJvcihLKSlyZXR1cm4hMTtOPXt0eXBlOnosdmFsdWU6S30sSD0hMH1jYXRjaHtyZXR1cm4gRS5yZXN0b3JlKFopLCExfXJldHVybiEwfSx0aGlzKSxIP046RS5lcnJvcigiQ2hvaWNlIG5vdCBt''@;'; put 'put ''YXRjaGVkIil9LE0ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgaChFLHRoaXMucmVwb3J0ZXIpfSxNLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEUsQixGKXt2YXIgTj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PU4uZGVmYXVsdHx8''@;'; put 'put ''Ti5kZWZhdWx0IT09RSl7dmFyIEg9dGhpcy5fZW5jb2RlVmFsdWUoRSxCLEYpO2lmKHZvaWQgMCE9PUgmJiF0aGlzLl9za2lwRGVmYXVsdChILEIsRikpcmV0dXJuIEh9fSxNLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oRSxCLEYpe3ZhciBOPXRoaXMuX2Jhc2VTdGF0ZTtpZihu''@;'; put 'put ''dWxsPT09Ti5wYXJlbnQpcmV0dXJuIE4uY2hpbGRyZW5bMF0uX2VuY29kZShFLEJ8fG5ldyBTKTt2YXIgVT1udWxsO2lmKHRoaXMucmVwb3J0ZXI9QixOLm9wdGlvbmFsJiZ2b2lkIDA9PT1FKXtpZihudWxsPT09Ti5kZWZhdWx0KXJldHVybjtFPU4uZGVmYXVsdH12YXIgSD1udWxsLHo9ITE7''@;'; put 'put ''aWYoTi5hbnkpVT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEUpO2Vsc2UgaWYoTi5jaG9pY2UpVT10aGlzLl9lbmNvZGVDaG9pY2UoRSxCKTtlbHNlIGlmKE4uY29udGFpbnMpSD10aGlzLl9nZXRVc2UoTi5jb250YWlucyxGKS5fZW5jb2RlKEUsQiksej0hMDtlbHNlIGlmKE4uY2hpbGRy''@;'; put 'put ''ZW4pSD1OLmNoaWxkcmVuLm1hcChmdW5jdGlvbihuZSl7aWYoIm51bGxfIj09PW5lLl9iYXNlU3RhdGUudGFnKXJldHVybiBuZS5fZW5jb2RlKG51bGwsQixFKTtpZihudWxsPT09bmUuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIEIuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7dmFy''@;'; put 'put ''IHNlPUIuZW50ZXJLZXkobmUuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgRSlyZXR1cm4gQi5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7dmFyIGhlPW5lLl9lbmNvZGUoRVtuZS5fYmFzZVN0YXRlLmtleV0sQixFKTtyZXR1cm4g''@;'; put 'put ''Qi5sZWF2ZUtleShzZSksaGV9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihuZSl7cmV0dXJuIG5lfSksSD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEgpO2Vsc2UgaWYoInNlcW9mIj09PU4udGFnfHwic2V0b2YiPT09Ti50YWcpe2lmKCFOLmFyZ3N8fDEhPT1OLmFyZ3MubGVuZ3RoKXJldHVy''@;'; put 'put ''biBCLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrTi50YWcpO2lmKCFBcnJheS5pc0FycmF5KEUpKXJldHVybiBCLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7dmFyIFo9dGhpcy5jbG9uZSgpO1ouX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLEg9dGhp''@;'; put 'put ''cy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihFLm1hcChmdW5jdGlvbihuZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxFKS5fZW5jb2RlKG5lLEIpfSxaKSl9ZWxzZSBudWxsIT09Ti51c2U/VT10aGlzLl9nZXRVc2UoTi51c2UsRikuX2VuY29kZShFLEIpOihI''@;'; put 'put ''PXRoaXMuX2VuY29kZVByaW1pdGl2ZShOLnRhZyxFKSx6PSEwKTtpZighTi5hbnkmJm51bGw9PT1OLmNob2ljZSl7dmFyIEs9bnVsbCE9PU4uaW1wbGljaXQ/Ti5pbXBsaWNpdDpOLnRhZyxYPW51bGw9PT1OLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09Sz9udWxsPT09''@;'; put 'put ''Ti51c2UmJkIuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1OLnVzZSYmKFU9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKEsseixYLEgpKX1yZXR1cm4gbnVsbCE9PU4uZXhwbGljaXQmJihVPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShOLmV4cGxpY2l0''@;'; put 'put ''LCExLCJjb250ZXh0IixVKSksVX0sTS5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihFLEIpe3ZhciBGPXRoaXMuX2Jhc2VTdGF0ZSxOPUYuY2hvaWNlW0UudHlwZV07cmV0dXJuIE58fEkoITEsRS50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0Lmtl''@;'; put 'put ''eXMoRi5jaG9pY2UpKSksTi5fZW5jb2RlKEUudmFsdWUsQil9LE0ucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oRSxCKXt2YXIgRj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoRSkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihCLEUpO2lmKCJvYmppZCI9PT1FJiZG''@;'; put 'put ''LmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEIsRi5yZXZlcnNlQXJnc1swXSxGLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1FKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChCLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09RXx8InV0Y3RpbWUiPT09RSlyZXR1cm4gdGhpcy5fZW5jb2Rl''@;'; put 'put ''VGltZShCLEUpO2lmKCJudWxsXyI9PT1FKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1FfHwiZW51bSI9PT1FKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoQixGLmFyZ3MmJkYucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PUUpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2wo''@;'; put 'put ''Qik7aWYoIm9iakRlc2MiPT09RSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEIsRSk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrRSl9LE0ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihFKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KEUpfSxNLnByb3RvdHlwZS5faXNQ''@;'; put 'put ''cmludHN0cj1mdW5jdGlvbihFKXtyZXR1cm4vXltBLVphLXowLTkgJ1woXClcKyxcLVwuXC86PVw/XSokLy50ZXN0KEUpfX0sODU2OTcodGUsaixkKXt2YXIgUz1kKDcxOTkzKTtmdW5jdGlvbiBoKEkpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpJfHx7''@;'; put 'put ''fSxlcnJvcnM6W119fWZ1bmN0aW9uIG8oSSxmKXt0aGlzLnBhdGg9SSx0aGlzLnJldGhyb3coZil9ai5hPWgsaC5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIG99LGgucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLl9yZXBvcnRl''@;'; put 'put ''clN0YXRlO3JldHVybntvYmo6Zi5vYmoscGF0aExlbjpmLnBhdGgubGVuZ3RofX0saC5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihmKXt2YXIgVD10aGlzLl9yZXBvcnRlclN0YXRlO1Qub2JqPWYub2JqLFQucGF0aD1ULnBhdGguc2xpY2UoMCxmLnBhdGhMZW4pfSxoLnByb3RvdHlwZS5l''@;'; put 'put ''bnRlcktleT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goZil9LGgucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24oZil7dmFyIFQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtULnBhdGg9VC5wYXRoLnNsaWNlKDAsZi0xKX0saC5wcm90b3R5cGUubGVhdmVL''@;'; put 'put ''ZXk9ZnVuY3Rpb24oZixULEEpe3ZhciBNPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGYpLG51bGwhPT1NLm9iaiYmKE0ub2JqW1RdPUEpfSxoLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LGgucHJv''@;'; put 'put ''dG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxUPWYub2JqO3JldHVybiBmLm9iaj17fSxUfSxoLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihmKXt2YXIgVD10aGlzLl9yZXBvcnRlclN0YXRlLEE9VC5vYmo7cmV0dXJuIFQub2Jq''@;'; put 'put ''PWYsQX0saC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZil7dmFyIFQsQT10aGlzLl9yZXBvcnRlclN0YXRlLE09ZiBpbnN0YW5jZW9mIG87aWYoVD1NP2Y6bmV3IG8oQS5wYXRoLm1hcChmdW5jdGlvbihPKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoTykrIl0ifSkuam9pbigiIiksZi5t''@;'; put 'put ''ZXNzYWdlfHxmLGYuc3RhY2spLCFBLm9wdGlvbnMucGFydGlhbCl0aHJvdyBUO3JldHVybiBNfHxBLmVycm9ycy5wdXNoKFQpLFR9LGgucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oZil7dmFyIFQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gVC5vcHRpb25zLnBhcnRpYWw/e3Jl''@;'; put 'put ''c3VsdDp0aGlzLmlzRXJyb3IoZik/bnVsbDpmLGVycm9yczpULmVycm9yc306Zn0sUyhvLEVycm9yKSxvLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKGYpe2lmKHRoaXMubWVzc2FnZT1mKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNl''@;'; put 'put ''JiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLG8pLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChUKXt0aGlzLnN0YWNrPVQuc3RhY2t9cmV0dXJuIHRoaXN9fSwzNjI4Myh0ZSxqLGQpe3ZhciBTPWQoNDc3NDApO2oudGFnQ2xhc3M9ezA6''@;'; put 'put ''InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxqLnRhZ0NsYXNzQnlOYW1lPVMuX3JldmVyc2Uoai50YWdDbGFzcyksai50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlk''@;'; put 'put ''Iiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVz''@;'; put 'put ''dHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LGoudGFnQnlOYW1lPVMuX3JldmVyc2Uoai50YWcpfSw0Nzc0MCh0ZSxqLGQpe3ZhciBTPWo7Uy5f''@;'; put 'put ''cmV2ZXJzZT1mdW5jdGlvbihvKXt2YXIgST17fTtyZXR1cm4gT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbihmKXsoMHxmKT09ZiYmKGZ8PTApLElbb1tmXV09Zn0pLEl9LFMuZGVyPWQoMzYyODMpfSw1NTk0MSh0ZSxqLGQpe3ZhciBTPWQoNzE5OTMpLGg9ZCg0OTYwOSksbz1oLmJh''@;'; put 'put ''c2UsST1oLmJpZ251bSxmPWguY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBUKEQpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1ELm5hbWUsdGhpcy5lbnRpdHk9RCx0aGlzLnRyZWU9bmV3IEEsdGhpcy50cmVlLl9pbml0KEQuYm9keSl9ZnVuY3Rpb24gQShEKXtvLk5vZGUuY2FsbCh0aGlzLCJk''@;'; put 'put ''ZXIiLEQpfWZ1bmN0aW9uIE0oRCxFKXt2YXIgQj1ELnJlYWRVSW50OChFKTtpZihELmlzRXJyb3IoQikpcmV0dXJuIEI7dmFyIEY9Zi50YWdDbGFzc1tCPj42XSxOPSEoMzImQik7aWYoMzEmfkIpQiY9MzE7ZWxzZXt2YXIgSD1CO2ZvcihCPTA7ISgxMjgmfkgpOyl7aWYoSD1ELnJlYWRVSW50''@;'; put 'put ''OChFKSxELmlzRXJyb3IoSCkpcmV0dXJuIEg7Qjw8PTcsQnw9MTI3Jkh9fXJldHVybntjbHM6RixwcmltaXRpdmU6Tix0YWc6Qix0YWdTdHI6Zi50YWdbQl19fWZ1bmN0aW9uIE8oRCxFLEIpe3ZhciBGPUQucmVhZFVJbnQ4KEIpO2lmKEQuaXNFcnJvcihGKSlyZXR1cm4gRjtpZighRSYmMTI4''@;'; put 'put ''PT09RilyZXR1cm4gbnVsbDtpZighKDEyOCZGKSlyZXR1cm4gRjt2YXIgTj0xMjcmRjtpZihOPjQpcmV0dXJuIEQuZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtGPTA7Zm9yKHZhciBIPTA7SDxOO0grKyl7Rjw8PTg7dmFyIHo9RC5yZWFkVUludDgoQik7aWYoRC5pc0Vycm9y''@;'; put 'put ''KHopKXJldHVybiB6O0Z8PXp9cmV0dXJuIEZ9dGUuZXhwb3J0cz1ULFQucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihFLEIpe3JldHVybiBFIGluc3RhbmNlb2Ygby5EZWNvZGVyQnVmZmVyfHwoRT1uZXcgby5EZWNvZGVyQnVmZmVyKEUsQikpLHRoaXMudHJlZS5fZGVjb2RlKEUsQil9LFMo''@;'; put 'put ''QSxvLk5vZGUpLEEucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEUsQixGKXtpZihFLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgTj1FLnNhdmUoKSxIPU0oRSwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytCKyciJyk7cmV0dXJuIEUuaXNFcnJvcihIKT9IOihFLnJlc3RvcmUoTiksSC50YWc9''@;'; put 'put ''PT1CfHxILnRhZ1N0cj09PUJ8fEgudGFnU3RyKyJvZiI9PT1CfHxGKX0sQS5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihFLEIsRil7dmFyIE49TShFLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytCKyciJyk7aWYoRS5pc0Vycm9yKE4pKXJldHVybiBOO3ZhciBIPU8oRSxOLnBy''@;'; put 'put ''aW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrQisnIicpO2lmKEUuaXNFcnJvcihIKSlyZXR1cm4gSDtpZighRiYmTi50YWchPT1CJiZOLnRhZ1N0ciE9PUImJk4udGFnU3RyKyJvZiIhPT1CKXJldHVybiBFLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytCKyciJyk7''@;'; put 'put ''aWYoTi5wcmltaXRpdmV8fG51bGwhPT1IKXJldHVybiBFLnNraXAoSCwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0IrJyInKTt2YXIgej1FLnNhdmUoKSxaPXRoaXMuX3NraXBVbnRpbEVuZChFLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRh''@;'; put 'put ''ZysnIicpO3JldHVybiBFLmlzRXJyb3IoWik/WjooSD1FLm9mZnNldC16Lm9mZnNldCxFLnJlc3RvcmUoeiksRS5za2lwKEgsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytCKyciJykpfSxBLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEUsQil7Zm9yKDs7KXt2YXIgRj1N''@;'; put 'put ''KEUsQik7aWYoRS5pc0Vycm9yKEYpKXJldHVybiBGO3ZhciBILE49TyhFLEYucHJpbWl0aXZlLEIpO2lmKEUuaXNFcnJvcihOKSlyZXR1cm4gTjtpZihIPUYucHJpbWl0aXZlfHxudWxsIT09Tj9FLnNraXAoTik6dGhpcy5fc2tpcFVudGlsRW5kKEUsQiksRS5pc0Vycm9yKEgpKXJldHVybiBI''@;'; put 'put ''O2lmKCJlbmQiPT09Ri50YWdTdHIpYnJlYWt9fSxBLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihFLEIsRixOKXtmb3IodmFyIEg9W107IUUuaXNFbXB0eSgpOyl7dmFyIHo9dGhpcy5fcGVla1RhZyhFLCJlbmQiKTtpZihFLmlzRXJyb3IoeikpcmV0dXJuIHo7dmFyIFo9Ri5kZWNv''@;'; put 'put ''ZGUoRSwiZGVyIixOKTtpZihFLmlzRXJyb3IoWikmJnopYnJlYWs7SC5wdXNoKFopfXJldHVybiBIfSxBLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEUsQil7aWYoImJpdHN0ciI9PT1CKXt2YXIgRj1FLnJlYWRVSW50OCgpO3JldHVybiBFLmlzRXJyb3IoRik/Rjp7dW51c2VkOkYs''@;'; put 'put ''ZGF0YTpFLnJhdygpfX1pZigiYm1wc3RyIj09PUIpe3ZhciBOPUUucmF3KCk7aWYoTi5sZW5ndGglMj09MSlyZXR1cm4gRS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIEg9IiIsej0wO3o8Ti5sZW5ndGgvMjt6KyspSCs9''@;'; put 'put ''U3RyaW5nLmZyb21DaGFyQ29kZShOLnJlYWRVSW50MTZCRSgyKnopKTtyZXR1cm4gSH1pZigibnVtc3RyIj09PUIpe3ZhciBaPUUucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKFopP1o6RS5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0''@;'; put 'put ''ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1CKXJldHVybiBFLnJhdygpO2lmKCJvYmpEZXNjIj09PUIpcmV0dXJuIEUucmF3KCk7aWYoInByaW50c3RyIj09PUIpe3ZhciBVPUUucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIo''@;'; put 'put ''VSk/VTpFLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEIpP0UucmF3KCkudG9TdHJpbmcoKTpFLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitCKyIgdW5zdXBwb3J0ZWQi''@;'; put 'put ''KX0sQS5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEUsQixGKXtmb3IodmFyIE4sSD1bXSx6PTA7IUUuaXNFbXB0eSgpOyl7dmFyIFo9RS5yZWFkVUludDgoKTt6PDw9Nyx6fD0xMjcmWiwhKDEyOCZaKSYmKEgucHVzaCh6KSx6PTApfWlmKDEyOCZaJiZILnB1c2goeiksTj1GP0g6''@;'; put 'put ''W0hbMF0vNDB8MCxIWzBdJTQwXS5jb25jYXQoSC5zbGljZSgxKSksQil7dmFyIFg9QltOLmpvaW4oIiAiKV07dm9pZCAwPT09WCYmKFg9QltOLmpvaW4oIi4iKV0pLHZvaWQgMCE9PVgmJihOPVgpfXJldHVybiBOfSxBLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihFLEIpe3ZhciBG''@;'; put 'put ''PUUucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9PT1CKXZhciBOPTB8Ri5zbGljZSgwLDQpLEg9MHxGLnNsaWNlKDQsNiksej0wfEYuc2xpY2UoNiw4KSxaPTB8Ri5zbGljZSg4LDEwKSxVPTB8Ri5zbGljZSgxMCwxMiksSz0wfEYuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUi''@;'; put 'put ''IT09QilyZXR1cm4gRS5lcnJvcigiRGVjb2RpbmcgIitCKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO049MHxGLnNsaWNlKDAsMiksSD0wfEYuc2xpY2UoMiw0KSx6PTB8Ri5zbGljZSg0LDYpLFo9MHxGLnNsaWNlKDYsOCksVT0wfEYuc2xpY2UoOCwxMCksSz0wfEYuc2xpY2UoMTAs''@;'; put 'put ''MTIpLE49Tjw3MD8yZTMrTjoxOTAwK059cmV0dXJuIERhdGUuVVRDKE4sSC0xLHosWixVLEssMCl9LEEucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEUpe3JldHVybiBudWxsfSxBLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihFKXt2YXIgQj1FLnJlYWRVSW50OCgpO3Jl''@;'; put 'put ''dHVybiBFLmlzRXJyb3IoQik/QjowIT09Qn0sQS5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihFLEIpe3ZhciBGPUUucmF3KCksTj1uZXcgSShGKTtyZXR1cm4gQiYmKE49QltOLnRvU3RyaW5nKDEwKV18fE4pLE59LEEucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oRSxCKXtyZXR1cm4i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgRSYmKEU9RShCKSksRS5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDkxNTU4KHRlLGosZCl7dmFyIFM9ajtTLmRlcj1kKDU1OTQxKSxTLnBlbT1kKDU5MzE2KX0sNTkzMTYodGUsaixkKXt2YXIgUz1kKDcxOTkzKSxoPWQoODM4MzgpLkJ1ZmZlcixvPWQoNTU5''@;'; put 'put ''NDEpO2Z1bmN0aW9uIEkoZil7by5jYWxsKHRoaXMsZiksdGhpcy5lbmM9InBlbSJ9UyhJLG8pLHRlLmV4cG9ydHM9SSxJLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oVCxBKXtmb3IodmFyIE09VC50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLE89QS5sYWJlbC50b1VwcGVyQ2FzZSgp''@;'; put 'put ''LEQ9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLEU9LTEsQj0tMSxGPTA7RjxNLmxlbmd0aDtGKyspe3ZhciBOPU1bRl0ubWF0Y2goRCk7aWYobnVsbCE9PU4mJk5bMl09PT1PKXtpZigtMSE9PUUpe2lmKCJFTkQiIT09TlsxXSlicmVhaztCPUY7YnJlYWt9aWYoIkJFR0lOIiE9''@;'; put 'put ''PU5bMV0pYnJlYWs7RT1GfX1pZigtMT09PUV8fC0xPT09Qil0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIrTyk7dmFyIEg9TS5zbGljZShFKzEsQikuam9pbigiIik7SC5yZXBsYWNlKC9bXmEtejAtOVwrXC89XSsvZ2ksIiIpO3ZhciB6PW5ldyBoKEgsImJh''@;'; put 'put ''c2U2NCIpO3JldHVybiBvLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLHosQSl9fSw3MjE5Myh0ZSxqLGQpe3ZhciBTPWQoNzE5OTMpLGg9ZCg4MzgzOCkuQnVmZmVyLG89ZCg0OTYwOSksST1vLmJhc2UsZj1vLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gVChEKXt0aGlzLmVuYz0iZGVyIix0''@;'; put 'put ''aGlzLm5hbWU9RC5uYW1lLHRoaXMuZW50aXR5PUQsdGhpcy50cmVlPW5ldyBBLHRoaXMudHJlZS5faW5pdChELmJvZHkpfWZ1bmN0aW9uIEEoRCl7SS5Ob2RlLmNhbGwodGhpcywiZGVyIixEKX1mdW5jdGlvbiBNKEQpe3JldHVybiBEPDEwPyIwIitEOkR9dGUuZXhwb3J0cz1ULFQucHJvdG90''@;'; put 'put ''eXBlLmVuY29kZT1mdW5jdGlvbihFLEIpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShFLEIpLmpvaW4oKX0sUyhBLEkuTm9kZSksQS5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihFLEIsRixOKXt2YXIgVSxIPWZ1bmN0aW9uIE8oRCxFLEIsRil7dmFyIE47aWYoInNlcW9m''@;'; put 'put ''Ij09PUQ/RD0ic2VxIjoic2V0b2YiPT09RCYmKEQ9InNldCIpLGYudGFnQnlOYW1lLmhhc093blByb3BlcnR5KEQpKU49Zi50YWdCeU5hbWVbRF07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIER8fCgwfEQpIT09RClyZXR1cm4gRi5lcnJvcigiVW5rbm93biB0YWc6ICIrRCk7Tj1EfXJldHVy''@;'; put 'put ''biBOPj0zMT9GLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooRXx8KE58PTMyKSxOfD1mLnRhZ0NsYXNzQnlOYW1lW0J8fCJ1bml2ZXJzYWwiXTw8Nil9KEUsQixGLHRoaXMucmVwb3J0ZXIpO2lmKE4ubGVuZ3RoPDEyOClyZXR1cm4oVT1uZXcgaCgyKSlb''@;'; put 'put ''MF09SCxVWzFdPU4ubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1UsTl0pO2Zvcih2YXIgej0xLFo9Ti5sZW5ndGg7Wj49MjU2O1o+Pj04KXorKzsoVT1uZXcgaCgyK3opKVswXT1ILFVbMV09MTI4fHosWj0xK3o7Zm9yKHZhciBLPU4ubGVuZ3RoO0s+MDtaLS0sSz4+PTgpVVta''@;'; put 'put ''XT0yNTUmSztyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbVSxOXSl9LEEucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oRSxCKXtpZigiYml0c3RyIj09PUIpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8RS51bnVzZWQsRS5kYXRhXSk7aWYoImJtcHN0''@;'; put 'put ''ciI9PT1CKXtmb3IodmFyIEY9bmV3IGgoMipFLmxlbmd0aCksTj0wO048RS5sZW5ndGg7TisrKUYud3JpdGVVSW50MTZCRShFLmNoYXJDb2RlQXQoTiksMipOKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihGKX1yZXR1cm4ibnVtc3RyIj09PUI/dGhpcy5faXNOdW1zdHIoRSk/''@;'; put 'put ''dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihFKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1CP3RoaXMuX2lzUHJpbnRzdHIoRSk/dGhpcy5fY3JlYXRlRW5j''@;'; put 'put ''b2RlckJ1ZmZlcihFKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJl''@;'; put 'put ''bnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KEIpfHwib2JqRGVzYyI9PT1CP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5j''@;'; put 'put ''b2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrQisiIHVuc3VwcG9ydGVkIil9LEEucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihFLEIsRil7aWYoInN0cmluZyI9PXR5cGVvZiBFKXtpZighQilyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVuLCBidXQg''@;'; put 'put ''bm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFCLmhhc093blByb3BlcnR5KEUpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO0U9QltFXS5zcGxpdCgvW1xzXC5dKy9nKTtmb3IodmFyIE49MDtOPEUubGVuZ3RoO04rKylFW05dfD0w''@;'; put 'put ''fWVsc2UgaWYoQXJyYXkuaXNBcnJheShFKSlmb3IoRT1FLnNsaWNlKCksTj0wO048RS5sZW5ndGg7TisrKUVbTl18PTA7aWYoIUFycmF5LmlzQXJyYXkoRSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDog''@;'; put 'put ''IitKU09OLnN0cmluZ2lmeShFKSk7aWYoIUYpe2lmKEVbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtFLnNwbGljZSgwLDIsNDAqRVswXStFWzFdKX12YXIgSD0wO2ZvcihOPTA7TjxFLmxlbmd0aDtOKyspe3ZhciB6PUVb''@;'; put 'put ''Tl07Zm9yKEgrKzt6Pj0xMjg7ej4+PTcpSCsrfXZhciBaPW5ldyBoKEgpLFU9Wi5sZW5ndGgtMTtmb3IoTj1FLmxlbmd0aC0xO04+PTA7Ti0tKWZvcihaW1UtLV09MTI3Jih6PUVbTl0pOyh6Pj49Nyk+MDspWltVLS1dPTEyOHwxMjcmejtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZl''@;'; put 'put ''cihaKX0sQS5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oRSxCKXt2YXIgRixOPW5ldyBEYXRlKEUpO3JldHVybiJnZW50aW1lIj09PUI/Rj1bTShOLmdldEZ1bGxZZWFyKCkpLE0oTi5nZXRVVENNb250aCgpKzEpLE0oTi5nZXRVVENEYXRlKCkpLE0oTi5nZXRVVENIb3VycygpKSxN''@;'; put 'put ''KE4uZ2V0VVRDTWludXRlcygpKSxNKE4uZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUI/Rj1bTShOLmdldEZ1bGxZZWFyKCklMTAwKSxNKE4uZ2V0VVRDTW9udGgoKSsxKSxNKE4uZ2V0VVRDRGF0ZSgpKSxNKE4uZ2V0VVRDSG91cnMoKSksTShOLmdldFVUQ01p''@;'; put 'put ''bnV0ZXMoKSksTShOLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0IrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKEYsIm9jdHN0ciIpfSxBLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sQS5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihFLEIpe2lmKCJzdHJpbmciPT10eXBlb2YgRSl7aWYoIUIpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwg''@;'; put 'put ''YnV0IG5vIHZhbHVlcyBtYXAiKTtpZighQi5oYXNPd25Qcm9wZXJ0eShFKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoRSkpO0U9QltFXX1pZigibnVtYmVyIiE9dHlwZW9mIEUmJiFoLmlzQnVmZmVyKEUp''@;'; put 'put ''KXt2YXIgRj1FLnRvQXJyYXkoKTshRS5zaWduJiYxMjgmRlswXSYmRi51bnNoaWZ0KDApLEU9bmV3IGgoRil9aWYoaC5pc0J1ZmZlcihFKSl7dmFyIE49RS5sZW5ndGg7MD09PUUubGVuZ3RoJiZOKys7dmFyIHo9bmV3IGgoTik7cmV0dXJuIEUuY29weSh6KSwwPT09RS5sZW5ndGgmJih6WzBd''@;'; put 'put ''PTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoeil9aWYoRTwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSk7aWYoRTwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsRV0pO049MTtmb3IodmFyIEg9RTtIPj0yNTY7SD4+PTgpTisrO2ZvcihI''@;'; put 'put ''PSh6PW5ldyBBcnJheShOKSkubGVuZ3RoLTE7SD49MDtILS0peltIXT0yNTUmRSxFPj49ODtyZXR1cm4gMTI4JnpbMF0mJnoudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBoKHopKX0sQS5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oRSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRT8yNTU6MCl9LEEucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oRSxCKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRSYmKEU9RShCKSksRS5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sQS5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEUs''@;'; put 'put ''QixGKXt2YXIgSCxOPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Ti5kZWZhdWx0KXJldHVybiExO3ZhciB6PUUuam9pbigpO2lmKHZvaWQgMD09PU4uZGVmYXVsdEJ1ZmZlciYmKE4uZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShOLmRlZmF1bHQsQixGKS5qb2luKCkpLHoubGVu''@;'; put 'put ''Z3RoIT09Ti5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoSD0wO0g8ei5sZW5ndGg7SCsrKWlmKHpbSF0hPT1OLmRlZmF1bHRCdWZmZXJbSF0pcmV0dXJuITE7cmV0dXJuITB9fSwyMjcxNCh0ZSxqLGQpe3ZhciBTPWo7Uy5kZXI9ZCg3MjE5MyksUy5wZW09ZCgyNDgxNil9LDI0''@;'; put 'put ''ODE2KHRlLGosZCl7dmFyIFM9ZCg3MTk5MyksaD1kKDcyMTkzKTtmdW5jdGlvbiBvKEkpe2guY2FsbCh0aGlzLEkpLHRoaXMuZW5jPSJwZW0ifVMobyxoKSx0ZS5leHBvcnRzPW8sby5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGYsVCl7Zm9yKHZhciBNPWgucHJvdG90eXBlLmVuY29kZS5j''@;'; put 'put ''YWxsKHRoaXMsZikudG9TdHJpbmcoImJhc2U2NCIpLE89WyItLS0tLUJFR0lOICIrVC5sYWJlbCsiLS0tLS0iXSxEPTA7RDxNLmxlbmd0aDtEKz02NClPLnB1c2goTS5zbGljZShELEQrNjQpKTtyZXR1cm4gTy5wdXNoKCItLS0tLUVORCAiK1QubGFiZWwrIi0tLS0tIiksTy5qb2luKCJcbiIp''@;'; put 'put ''fX0sOTY4NjcodGUsaixkKXshZnVuY3Rpb24oUyxoKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhSLHMpe2lmKCFSKXRocm93IG5ldyBFcnJvcihzfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEkoUixzKXtSLnN1cGVyXz1zO3ZhciB1PWZ1bmN0aW9uKCl7fTt1LnByb3RvdHlwZT1z''@;'; put 'put ''LnByb3RvdHlwZSxSLnByb3RvdHlwZT1uZXcgdSxSLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SfWZ1bmN0aW9uIGYoUixzLHUpe2lmKGYuaXNCTihSKSlyZXR1cm4gUjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09UiYm''@;'; put 'put ''KCgibGUiPT09c3x8ImJlIj09PXMpJiYodT1zLHM9MTApLHRoaXMuX2luaXQoUnx8MCxzfHwxMCx1fHwiYmUiKSl9dmFyIFQ7Im9iamVjdCI9PXR5cGVvZiBTP1MuZXhwb3J0cz1mOmguQk49ZixmLkJOPWYsZi53b3JkU2l6ZT0yNjt0cnl7VD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdp''@;'; put 'put ''bmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6ZCg3ODk4MikuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBBKFIscyl7dmFyIHU9Ui5jaGFyQ29kZUF0KHMpO3JldHVybiB1Pj02NSYmdTw9NzA/dS01NTp1Pj05NyYmdTw9MTAyP3UtODc6dS00OCYxNX1mdW5jdGlvbiBNKFIscyx1KXt2YXIg''@;'; put 'put ''dj1BKFIsdSk7cmV0dXJuIHUtMT49cyYmKHZ8PUEoUix1LTEpPDw0KSx2fWZ1bmN0aW9uIE8oUixzLHUsdil7Zm9yKHZhciBwPTAsXz1NYXRoLm1pbihSLmxlbmd0aCx1KSxrPXM7azxfO2srKyl7dmFyIEw9Ui5jaGFyQ29kZUF0KGspLTQ4O3AqPXYscCs9TD49NDk/TC00OSsxMDpMPj0xNz9M''@;'; put 'put ''LTE3KzEwOkx9cmV0dXJuIHB9Zi5pc0JOPWZ1bmN0aW9uKHMpe3JldHVybiBzIGluc3RhbmNlb2YgZnx8bnVsbCE9PXMmJiJvYmplY3QiPT10eXBlb2YgcyYmcy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWYud29yZFNpemUmJkFycmF5LmlzQXJyYXkocy53b3Jkcyl9LGYubWF4PWZ1bmN0aW9u''@;'; put 'put ''KHMsdSl7cmV0dXJuIHMuY21wKHUpPjA/czp1fSxmLm1pbj1mdW5jdGlvbihzLHUpe3JldHVybiBzLmNtcCh1KTwwP3M6dX0sZi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocyx1LHYpe2lmKCJudW1iZXIiPT10eXBlb2YgcylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihzLHUsdik7aWYoIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBzKXJldHVybiB0aGlzLl9pbml0QXJyYXkocyx1LHYpOyJoZXgiPT09dSYmKHU9MTYpLG8odT09PSgwfHUpJiZ1Pj0yJiZ1PD0zNik7dmFyIHA9MDsiLSI9PT0ocz1zLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHArKyx0aGlzLm5lZ2F0aXZlPTEp''@;'; put 'put ''LHA8cy5sZW5ndGgmJigxNj09PXU/dGhpcy5fcGFyc2VIZXgocyxwLHYpOih0aGlzLl9wYXJzZUJhc2Uocyx1LHApLCJsZSI9PT12JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksdSx2KSkpfSxmLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihzLHUsdil7czwwJiYodGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0xLHM9LXMpLHM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnNdLHRoaXMubGVuZ3RoPTEpOnM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcyxzLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobyhzPDkwMDcxOTkyNTQ3''@;'; put 'put ''NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09diYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHUsdil9LGYucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocyx1LHYpe2lmKG8oIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBzLmxlbmd0aCkscy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5n''@;'; put 'put ''dGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgXyxrLEw9MDtpZigiYmUiPT09dilmb3IocD1zLmxlbmd0aC0xLF89MDtwPj0wO3AtPTMpdGhpcy53b3Jkc1tfXXw9KGs9c1twXXxzW3AtMV08PDh8c1twLTJdPDwxNik8PEwmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPWs+Pj4yNi1MJjY3MTA4''@;'; put 'put ''ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTtlbHNlIGlmKCJsZSI9PT12KWZvcihwPTAsXz0wO3A8cy5sZW5ndGg7cCs9Myl0aGlzLndvcmRzW19dfD0oaz1zW3BdfHNbcCsxXTw8OHxzW3ArMl08PDE2KTw8TCY2NzEwODg2Myx0aGlzLndvcmRzW18rMV09az4+PjI2LUwmNjcxMDg4NjMs''@;'; put 'put ''KEwrPTI0KT49MjYmJihMLT0yNixfKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihzLHUsdil7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChzLmxlbmd0aC11KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBw''@;'; put 'put ''PTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT0wO3ZhciBMLF89MCxrPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgtMTtwPj11O3AtPTIpTD1NKHMsdSxwKTw8Xyx0aGlzLndvcmRzW2tdfD02NzEwODg2MyZMLF8+PTE4PyhfLT0xOCx0aGlzLndvcmRzW2srPTFdfD1MPj4+''@;'; put 'put ''MjYpOl8rPTg7ZWxzZSBmb3IocD0ocy5sZW5ndGgtdSklMj09MD91KzE6dTtwPHMubGVuZ3RoO3ArPTIpTD1NKHMsdSxwKTw8Xyx0aGlzLndvcmRzW2tdfD02NzEwODg2MyZMLF8+PTE4PyhfLT0xOCx0aGlzLndvcmRzW2srPTFdfD1MPj4+MjYpOl8rPTg7dGhpcy5zdHJpcCgpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHMsdSx2KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgcD0wLF89MTtfPD02NzEwODg2MztfKj11KXArKztwLS0sXz1fL3V8MDtmb3IodmFyIGs9cy5sZW5ndGgtdixMPWslcCx5PU1hdGgubWluKGssay1MKSt2LGw9MCxiPXY7''@;'; put 'put ''Yjx5O2IrPXApbD1PKHMsYixiK3AsdSksdGhpcy5pbXVsbihfKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKTtpZigwIT09TCl7dmFyIHE9MTtmb3IobD1PKHMsYixzLmxlbmd0aCx1KSxiPTA7YjxMO2IrKylxKj11O3RoaXMuaW11bG4o''@;'; put 'put ''cSksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCl9dGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHMpe3Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3RoO3UrKylz''@;'; put 'put ''LndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9dGhpcy5sZW5ndGgscy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHMucmVkPXRoaXMucmVkfSxmLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBzPW5ldyBmKG51bGwpO3JldHVybiB0aGlzLmNvcHkocyksc30sZi5wcm90b3R5''@;'; put 'put ''cGUuX2V4cGFuZD1mdW5jdGlvbihzKXtmb3IoO3RoaXMubGVuZ3RoPHM7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0''@;'; put 'put ''aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxmLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sZi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgRD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxFPVswLDAsMjUsMTYsMTIsMTEsMTAs''@;'; put 'put ''OSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEI9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3''@;'; put 'put ''NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwz''@;'; put 'put ''OTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gTihSLHMsdSl7dS5uZWdhdGl2ZT1zLm5lZ2F0aXZlXlIubmVnYXRpdmU7dmFyIHY9Ui5sZW5ndGgrcy5sZW5ndGh8MDt1Lmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxSLndvcmRzWzBdLF89MHxzLndvcmRzWzBd''@;'; put 'put ''LGs9cCpfLHk9ay82NzEwODg2NHwwO3Uud29yZHNbMF09NjcxMDg4NjMmaztmb3IodmFyIGw9MTtsPHY7bCsrKXtmb3IodmFyIGI9eT4+PjI2LHE9NjcxMDg4NjMmeSxHPU1hdGgubWluKGwscy5sZW5ndGgtMSksUT1NYXRoLm1heCgwLGwtUi5sZW5ndGgrMSk7UTw9RztRKyspYis9KGs9KHA9''@;'; put 'put ''MHxSLndvcmRzW2wtUXwwXSkqKF89MHxzLndvcmRzW1FdKStxKS82NzEwODg2NHwwLHE9NjcxMDg4NjMmazt1LndvcmRzW2xdPTB8cSx5PTB8Yn1yZXR1cm4gMCE9PXk/dS53b3Jkc1tsXT0wfHk6dS5sZW5ndGgtLSx1LnN0cmlwKCl9Zi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocyx1''@;'; put 'put ''KXt2YXIgdjtpZih1PTB8dXx8MSwxNj09PShzPXN8fDEwKXx8ImhleCI9PT1zKXt2PSIiO2Zvcih2YXIgcD0wLF89MCxrPTA7azx0aGlzLmxlbmd0aDtrKyspe3ZhciBMPXRoaXMud29yZHNba10seT0oMTY3NzcyMTUmKEw8PHB8XykpLnRvU3RyaW5nKDE2KTtfPUw+Pj4yNC1wJjE2Nzc3MjE1''@;'; put 'put ''LChwKz0yKT49MjYmJihwLT0yNixrLS0pLHY9MCE9PV98fGshPT10aGlzLmxlbmd0aC0xP0RbNi15Lmxlbmd0aF0reSt2Onkrdn1mb3IoMCE9PV8mJih2PV8udG9TdHJpbmcoMTYpK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAiK3Y7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodj0iLSIrdiks''@;'; put 'put ''dn1pZihzPT09KDB8cykmJnM+PTImJnM8PTM2KXt2YXIgbD1FW3NdLGI9QltzXTt2PSIiO3ZhciBxPXRoaXMuY2xvbmUoKTtmb3IocS5uZWdhdGl2ZT0wOyFxLmlzWmVybygpOyl7dmFyIEc9cS5tb2RuKGIpLnRvU3RyaW5nKHMpO3Y9KHE9cS5pZGl2bihiKSkuaXNaZXJvKCk/Ryt2OkRbbC1H''@;'; put 'put ''Lmxlbmd0aF0rRyt2fWZvcih0aGlzLmlzWmVybygpJiYodj0iMCIrdik7di5sZW5ndGgldSE9MDspdj0iMCIrdjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih2PSItIit2KSx2fW8oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sZi5wcm90b3R5cGUudG9OdW1iZXI9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgcz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3MrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxl''@;'; put 'put ''bmd0aD4yJiZvKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tczpzfSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGYucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0''@;'; put 'put ''aW9uKHMsdSl7cmV0dXJuIG8odHlwZW9mIFQ8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFQscyx1KX0sZi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHMsdSl9LGYucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHMsdSx2''@;'; put 'put ''KXt2YXIgcD10aGlzLmJ5dGVMZW5ndGgoKSxfPXZ8fE1hdGgubWF4KDEscCk7byhwPD1fLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbyhfPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgeSxsLGs9ImxlIj09PXUsTD1u''@;'; put 'put ''ZXcgcyhfKSxiPXRoaXMuY2xvbmUoKTtpZihrKXtmb3IobD0wOyFiLmlzWmVybygpO2wrKyl5PWIuYW5kbG4oMjU1KSxiLml1c2hybig4KSxMW2xdPXk7Zm9yKDtsPF87bCsrKUxbbF09MH1lbHNle2ZvcihsPTA7bDxfLXA7bCsrKUxbbF09MDtmb3IobD0wOyFiLmlzWmVybygpO2wrKyl5PWIu''@;'; put 'put ''YW5kbG4oMjU1KSxiLml1c2hybig4KSxMW18tbC0xXT15fXJldHVybiBMfSxmLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocyl7cmV0dXJuIDMyLU1hdGguY2x6MzIocyl9OmZ1bmN0aW9uKHMpe3ZhciB1PXMsdj0wO3JldHVybiB1Pj00MDk2JiYodis9MTMsdT4+''@;'; put 'put ''Pj0xMyksdT49NjQmJih2Kz03LHU+Pj49NyksdT49OCYmKHYrPTQsdT4+Pj00KSx1Pj0yJiYodis9Mix1Pj4+PTIpLHYrdX0sZi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHMpe2lmKDA9PT1zKXJldHVybiAyNjt2YXIgdT1zLHY9MDtyZXR1cm4hKDgxOTEmdSkmJih2Kz0xMyx1Pj4+''@;'; put 'put ''PTEzKSwhKDEyNyZ1KSYmKHYrPTcsdT4+Pj03KSwhKDE1JnUpJiYodis9NCx1Pj4+PTQpLCEoMyZ1KSYmKHYrPTIsdT4+Pj0yKSwhKDEmdSkmJnYrKyx2fSxmLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0''@;'; put 'put ''aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt1fSxmLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBzPTAsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXt2YXIgdj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3VdKTtp''@;'; put 'put ''ZihzKz12LDI2IT09dilicmVha31yZXR1cm4gc30sZi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sZi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFi''@;'; put 'put ''cygpLmlub3RuKHMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sZi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMudGVzdG4ocy0xKT90aGlzLm5vdG4ocykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sZi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxmLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxmLnByb3RvdHlw''@;'; put 'put ''ZS5pdW9yPWZ1bmN0aW9uKHMpe2Zvcig7dGhpcy5sZW5ndGg8cy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdV18cy53b3Jkc1t1XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5pb3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1b3Iocyl9LGYucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHMpOnMuY2xvbmUoKS5pb3Io''@;'; put 'put ''dGhpcyl9LGYucHJvdG90eXBlLnVvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3Iocyk6cy5jbG9uZSgpLml1b3IodGhpcyl9LGYucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHMpe3ZhciB1O3U9dGhpcy5sZW5ndGg+cy5sZW5ndGg/''@;'; put 'put ''czp0aGlzO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXRoaXMud29yZHNbdl09dGhpcy53b3Jkc1t2XSZzLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0''@;'; put 'put ''aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1YW5kKHMpfSxmLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHMpOnMuY2xvbmUoKS5pYW5kKHRoaXMpfSxmLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocyk6cy5jbG9uZSgpLml1YW5kKHRoaXMpfSxmLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihzKXt2YXIgdSx2O3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh1PXRoaXMsdj1zKToodT1zLHY9dGhpcyk7Zm9yKHZhciBwPTA7''@;'; put 'put ''cDx2Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT11LndvcmRzW3BdXnYud29yZHNbcF07aWYodGhpcyE9PXUpZm9yKDtwPHUubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXUud29yZHNbcF07cmV0dXJuIHRoaXMubGVuZ3RoPXUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXhv''@;'; put 'put ''cj1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Iocyl9LGYucHJvdG90eXBlLnhvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3Iocyk6cy5jbG9uZSgpLml4b3IodGhpcyl9''@;'; put 'put ''LGYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihzKTpzLmNsb25lKCkuaXV4b3IodGhpcyl9LGYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIg''@;'; put 'put ''dT0wfE1hdGguY2VpbChzLzI2KSx2PXMlMjY7dGhpcy5fZXhwYW5kKHUpLHY+MCYmdS0tO2Zvcih2YXIgcD0wO3A8dTtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyZ+dGhpcy53b3Jkc1twXTtyZXR1cm4gdj4wJiYodGhpcy53b3Jkc1twXT1+dGhpcy53b3Jkc1twXSY2NzEwODg2Mz4+MjYt''@;'; put 'put ''diksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocyl9LGYucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocyx1KXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHY9cy8yNnwwLHA9cyUyNjtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XT11P3RoaXMud29yZHNbdl18MTw8cDp0aGlzLndvcmRzW3ZdJn4oMTw8cCksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMpe3ZhciB1LHYscDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0''@;'; put 'put ''dXJuIHRoaXMubmVnYXRpdmU9MCx1PXRoaXMuaXN1YihzKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0aXZlKXJldHVybiBzLm5lZ2F0aXZlPTAsdT10aGlzLmlzdWIocykscy5uZWdhdGl2ZT0xLHUuX25vcm1TaWdu''@;'; put 'put ''KCk7dGhpcy5sZW5ndGg+cy5sZW5ndGg/KHY9dGhpcyxwPXMpOih2PXMscD10aGlzKTtmb3IodmFyIF89MCxrPTA7azxwLmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKSsoMHxwLndvcmRzW2tdKStfKSxfPXU+Pj4yNjtmb3IoOzAhPT1fJiZrPHYu''@;'; put 'put ''bGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPTY3MTA4ODYzJih1PSgwfHYud29yZHNba10pK18pLF89dT4+PjI2O2lmKHRoaXMubGVuZ3RoPXYubGVuZ3RoLDAhPT1fKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPV8sdGhpcy5sZW5ndGgrKztlbHNlIGlmKHYhPT10aGlzKWZvcig7azx2Lmxlbmd0''@;'; put 'put ''aDtrKyspdGhpcy53b3Jkc1trXT12LndvcmRzW2tdO3JldHVybiB0aGlzfSxmLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyl7dmFyIHU7cmV0dXJuIDAhPT1zLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocy5uZWdhdGl2ZT0wLHU9dGhpcy5zdWIocykscy5uZWdhdGl2ZV49MSx1KTow''@;'; put 'put ''PT09cy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx1PXMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx1KTp0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChzKTpzLmNsb25lKCkuaWFkZCh0aGlzKX0sZi5wcm90b3R5cGUuaXN1Yj1m''@;'; put 'put ''dW5jdGlvbihzKXtpZigwIT09cy5uZWdhdGl2ZSl7cy5uZWdhdGl2ZT0wO3ZhciB1PXRoaXMuaWFkZChzKTtyZXR1cm4gcy5uZWdhdGl2ZT0xLHUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocyksdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHAsXyx2PXRoaXMuY21wKHMpO2lmKDA9PT12KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2PjA/KHA9dGhpcyxfPXMpOihwPXMsXz10aGlzKTtmb3IodmFyIGs9MCxMPTA7TDxfLmxlbmd0''@;'; put 'put ''aDtMKyspaz0odT0oMHxwLndvcmRzW0xdKS0oMHxfLndvcmRzW0xdKStrKT4+MjYsdGhpcy53b3Jkc1tMXT02NzEwODg2MyZ1O2Zvcig7MCE9PWsmJkw8cC5sZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNbTF09NjcxMDg4NjMmdTtpZigwPT09ayYmTDxw''@;'; put 'put ''Lmxlbmd0aCYmcCE9PXRoaXMpZm9yKDtMPHAubGVuZ3RoO0wrKyl0aGlzLndvcmRzW0xdPXAud29yZHNbTF07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEwpLHAhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLnN1Yj1m''@;'; put 'put ''dW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocyl9O3ZhciBIPWZ1bmN0aW9uKHMsdSx2KXt2YXIgeSxsLGIscD1zLndvcmRzLF89dS53b3JkcyxrPXYud29yZHMsTD0wLHE9MHxwWzBdLEc9ODE5MSZxLFE9cT4+PjEzLHBlPTB8cFsxXSxQZT04MTkxJnBlLFplPXBlPj4+MTMs''@;'; put 'put ''cWU9MHxwWzJdLHZlPTgxOTEmcWUsdWU9cWU+Pj4xMyx6ZT0wfHBbM10sT2U9ODE5MSZ6ZSxDZT16ZT4+PjEzLGtlPTB8cFs0XSx4ZT04MTkxJmtlLE1lPWtlPj4+MTMsSWU9MHxwWzVdLGJlPTgxOTEmSWUsd2U9SWU+Pj4xMyxwdD0wfHBbNl0sS2U9ODE5MSZwdCxZZT1wdD4+PjEzLHF0PTB8''@;'; put 'put ''cFs3XSxodD04MTkxJnF0LHZ0PXF0Pj4+MTMsWXQ9MHxwWzhdLHR0PTgxOTEmWXQsVWU9WXQ+Pj4xMywkZT0wfHBbOV0sTGU9ODE5MSYkZSxudD0kZT4+PjEzLHJuPTB8X1swXSx4dD04MTkxJnJuLFR0PXJuPj4+MTMseW49MHxfWzFdLFh0PTgxOTEmeW4sUXQ9eW4+Pj4xMyxYcj0wfF9bMl0s''@;'; put 'put ''c249ODE5MSZYcixpdD1Ycj4+PjEzLENyPTB8X1szXSxMdD04MTkxJkNyLHd0PUNyPj4+MTMsUm49MHxfWzRdLFFlPTgxOTEmUm4sUHQ9Um4+Pj4xMyxRcj0wfF9bNV0sTmU9ODE5MSZRcix5dD1Rcj4+PjEzLHJyPTB8X1s2XSxhdD04MTkxJnJyLF90PXJyPj4+MTMsd249MHxfWzddLCR0PTgx''@;'; put 'put ''OTEmd24sSHQ9d24+Pj4xMyxzaT0wfF9bOF0sbm49ODE5MSZzaSxsbj1zaT4+PjEzLGtpPTB8X1s5XSxhbj04MTkxJmtpLEd0PWtpPj4+MTM7di5uZWdhdGl2ZT1zLm5lZ2F0aXZlXnUubmVnYXRpdmUsdi5sZW5ndGg9MTk7dmFyIGVhPShMKyh5PU1hdGguaW11bChHLHh0KSl8MCkrKCg4MTkx''@;'; put 'put ''JihsPShsPU1hdGguaW11bChHLFR0KSkrTWF0aC5pbXVsKFEseHQpfDApKTw8MTMpfDA7TD0oKGI9TWF0aC5pbXVsKFEsVHQpKSsobD4+PjEzKXwwKSsoZWE+Pj4yNil8MCxlYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoUGUseHQpLGw9KGw9TWF0aC5pbXVsKFBlLFR0KSkrTWF0aC5pbXVsKFpl''@;'; put 'put ''LHh0KXwwLGI9TWF0aC5pbXVsKFplLFR0KTt2YXIgbWk9KEwrKHk9eStNYXRoLmltdWwoRyxYdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsUXQpfDApK01hdGguaW11bChRLFh0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsUXQpfDApKyhsPj4+MTMpfDApKyht''@;'; put 'put ''aT4+PjI2KXwwLG1pJj02NzEwODg2Myx5PU1hdGguaW11bCh2ZSx4dCksbD0obD1NYXRoLmltdWwodmUsVHQpKStNYXRoLmltdWwodWUseHQpfDAsYj1NYXRoLmltdWwodWUsVHQpLHk9eStNYXRoLmltdWwoUGUsWHQpfDAsbD0obD1sK01hdGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKFpl''@;'; put 'put ''LFh0KXwwLGI9YitNYXRoLmltdWwoWmUsUXQpfDA7dmFyIGZyPShMKyh5PXkrTWF0aC5pbXVsKEcsc24pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLGl0KXwwKStNYXRoLmltdWwoUSxzbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLGl0KXwwKSsobD4+PjEzKXww''@;'; put 'put ''KSsoZnI+Pj4yNil8MCxmciY9NjcxMDg4NjMseT1NYXRoLmltdWwoT2UseHQpLGw9KGw9TWF0aC5pbXVsKE9lLFR0KSkrTWF0aC5pbXVsKENlLHh0KXwwLGI9TWF0aC5pbXVsKENlLFR0KSx5PXkrTWF0aC5pbXVsKHZlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwodmUsUXQpfDApK01hdGguaW11''@;'; put 'put ''bCh1ZSxYdCl8MCxiPWIrTWF0aC5pbXVsKHVlLFF0KXwwLHk9eStNYXRoLmltdWwoUGUsc24pfDAsbD0obD1sK01hdGguaW11bChQZSxpdCl8MCkrTWF0aC5pbXVsKFplLHNuKXwwLGI9YitNYXRoLmltdWwoWmUsaXQpfDA7dmFyICRpPShMKyh5PXkrTWF0aC5pbXVsKEcsTHQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobD0obD1sK01hdGguaW11bChHLHd0KXwwKStNYXRoLmltdWwoUSxMdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLHd0KXwwKSsobD4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoeGUseHQpLGw9KGw9TWF0aC5pbXVsKHhlLFR0KSkr''@;'; put 'put ''TWF0aC5pbXVsKE1lLHh0KXwwLGI9TWF0aC5pbXVsKE1lLFR0KSx5PXkrTWF0aC5pbXVsKE9lLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsUXQpfDApK01hdGguaW11bChDZSxYdCl8MCxiPWIrTWF0aC5pbXVsKENlLFF0KXwwLHk9eStNYXRoLmltdWwodmUsc24pfDAsbD0obD1sK01hdGgu''@;'; put 'put ''aW11bCh2ZSxpdCl8MCkrTWF0aC5pbXVsKHVlLHNuKXwwLGI9YitNYXRoLmltdWwodWUsaXQpfDAseT15K01hdGguaW11bChQZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLHd0KXwwKStNYXRoLmltdWwoWmUsTHQpfDAsYj1iK01hdGguaW11bChaZSx3dCl8MDt2YXIgS2k9KEwrKHk9eStN''@;'; put 'put ''YXRoLmltdWwoRyxRZSl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsUHQpfDApK01hdGguaW11bChRLFFlKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsUHQpfDApKyhsPj4+MTMpfDApKyhLaT4+PjI2KXwwLEtpJj02NzEwODg2Myx5PU1hdGguaW11bChiZSx4dCks''@;'; put 'put ''bD0obD1NYXRoLmltdWwoYmUsVHQpKStNYXRoLmltdWwod2UseHQpfDAsYj1NYXRoLmltdWwod2UsVHQpLHk9eStNYXRoLmltdWwoeGUsWHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxRdCl8MCkrTWF0aC5pbXVsKE1lLFh0KXwwLGI9YitNYXRoLmltdWwoTWUsUXQpfDAseT15K01hdGguaW11''@;'; put 'put ''bChPZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGl0KXwwKStNYXRoLmltdWwoQ2Usc24pfDAsYj1iK01hdGguaW11bChDZSxpdCl8MCx5PXkrTWF0aC5pbXVsKHZlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwodmUsd3QpfDApK01hdGguaW11bCh1ZSxMdCl8MCxiPWIrTWF0aC5pbXVsKHVl''@;'; put 'put ''LHd0KXwwLHk9eStNYXRoLmltdWwoUGUsUWUpfDAsbD0obD1sK01hdGguaW11bChQZSxQdCl8MCkrTWF0aC5pbXVsKFplLFFlKXwwLGI9YitNYXRoLmltdWwoWmUsUHQpfDA7dmFyIFZpPShMKyh5PXkrTWF0aC5pbXVsKEcsTmUpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLHl0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUSxOZSl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLHl0KXwwKSsobD4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoS2UseHQpLGw9KGw9TWF0aC5pbXVsKEtlLFR0KSkrTWF0aC5pbXVsKFllLHh0KXwwLGI9TWF0aC5p''@;'; put 'put ''bXVsKFllLFR0KSx5PXkrTWF0aC5pbXVsKGJlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsUXQpfDApK01hdGguaW11bCh3ZSxYdCl8MCxiPWIrTWF0aC5pbXVsKHdlLFF0KXwwLHk9eStNYXRoLmltdWwoeGUsc24pfDAsbD0obD1sK01hdGguaW11bCh4ZSxpdCl8MCkrTWF0aC5pbXVsKE1l''@;'; put 'put ''LHNuKXwwLGI9YitNYXRoLmltdWwoTWUsaXQpfDAseT15K01hdGguaW11bChPZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoQ2UsTHQpfDAsYj1iK01hdGguaW11bChDZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHZlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwodmUs''@;'; put 'put ''UHQpfDApK01hdGguaW11bCh1ZSxRZSl8MCxiPWIrTWF0aC5pbXVsKHVlLFB0KXwwLHk9eStNYXRoLmltdWwoUGUsTmUpfDAsbD0obD1sK01hdGguaW11bChQZSx5dCl8MCkrTWF0aC5pbXVsKFplLE5lKXwwLGI9YitNYXRoLmltdWwoWmUseXQpfDA7dmFyIHFyPShMKyh5PXkrTWF0aC5pbXVs''@;'; put 'put ''KEcsYXQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLF90KXwwKStNYXRoLmltdWwoUSxhdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLF90KXwwKSsobD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMseT1NYXRoLmltdWwoaHQseHQpLGw9KGw9TWF0''@;'; put 'put ''aC5pbXVsKGh0LFR0KSkrTWF0aC5pbXVsKHZ0LHh0KXwwLGI9TWF0aC5pbXVsKHZ0LFR0KSx5PXkrTWF0aC5pbXVsKEtlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsUXQpfDApK01hdGguaW11bChZZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFllLFF0KXwwLHk9eStNYXRoLmltdWwoYmUsc24p''@;'; put 'put ''fDAsbD0obD1sK01hdGguaW11bChiZSxpdCl8MCkrTWF0aC5pbXVsKHdlLHNuKXwwLGI9YitNYXRoLmltdWwod2UsaXQpfDAseT15K01hdGguaW11bCh4ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTWUsTHQpfDAsYj1iK01hdGguaW11bChNZSx3dCl8MCx5''@;'; put 'put ''PXkrTWF0aC5pbXVsKE9lLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsUHQpfDApK01hdGguaW11bChDZSxRZSl8MCxiPWIrTWF0aC5pbXVsKENlLFB0KXwwLHk9eStNYXRoLmltdWwodmUsTmUpfDAsbD0obD1sK01hdGguaW11bCh2ZSx5dCl8MCkrTWF0aC5pbXVsKHVlLE5lKXwwLGI9YitN''@;'; put 'put ''YXRoLmltdWwodWUseXQpfDAseT15K01hdGguaW11bChQZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLF90KXwwKStNYXRoLmltdWwoWmUsYXQpfDAsYj1iK01hdGguaW11bChaZSxfdCl8MDt2YXIgdWE9KEwrKHk9eStNYXRoLmltdWwoRywkdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKEcsSHQpfDApK01hdGguaW11bChRLCR0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsSHQpfDApKyhsPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2Myx5PU1hdGguaW11bCh0dCx4dCksbD0obD1NYXRoLmltdWwodHQsVHQpKStNYXRoLmltdWwoVWUseHQp''@;'; put 'put ''fDAsYj1NYXRoLmltdWwoVWUsVHQpLHk9eStNYXRoLmltdWwoaHQsWHQpfDAsbD0obD1sK01hdGguaW11bChodCxRdCl8MCkrTWF0aC5pbXVsKHZ0LFh0KXwwLGI9YitNYXRoLmltdWwodnQsUXQpfDAseT15K01hdGguaW11bChLZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKEtlLGl0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoWWUsc24pfDAsYj1iK01hdGguaW11bChZZSxpdCl8MCx5PXkrTWF0aC5pbXVsKGJlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsd3QpfDApK01hdGguaW11bCh3ZSxMdCl8MCxiPWIrTWF0aC5pbXVsKHdlLHd0KXwwLHk9eStNYXRoLmltdWwoeGUsUWUpfDAsbD0obD1sK01h''@;'; put 'put ''dGguaW11bCh4ZSxQdCl8MCkrTWF0aC5pbXVsKE1lLFFlKXwwLGI9YitNYXRoLmltdWwoTWUsUHQpfDAseT15K01hdGguaW11bChPZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLHl0KXwwKStNYXRoLmltdWwoQ2UsTmUpfDAsYj1iK01hdGguaW11bChDZSx5dCl8MCx5PXkrTWF0aC5pbXVs''@;'; put 'put ''KHZlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwodmUsX3QpfDApK01hdGguaW11bCh1ZSxhdCl8MCxiPWIrTWF0aC5pbXVsKHVlLF90KXwwLHk9eStNYXRoLmltdWwoUGUsJHQpfDAsbD0obD1sK01hdGguaW11bChQZSxIdCl8MCkrTWF0aC5pbXVsKFplLCR0KXwwLGI9YitNYXRoLmltdWwoWmUs''@;'; put 'put ''SHQpfDA7dmFyIEZpPShMKyh5PXkrTWF0aC5pbXVsKEcsbm4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLGxuKXwwKStNYXRoLmltdWwoUSxubil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLGxuKXwwKSsobD4+PjEzKXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4''@;'; put 'put ''NjMseT1NYXRoLmltdWwoTGUseHQpLGw9KGw9TWF0aC5pbXVsKExlLFR0KSkrTWF0aC5pbXVsKG50LHh0KXwwLGI9TWF0aC5pbXVsKG50LFR0KSx5PXkrTWF0aC5pbXVsKHR0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsUXQpfDApK01hdGguaW11bChVZSxYdCl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KFVlLFF0KXwwLHk9eStNYXRoLmltdWwoaHQsc24pfDAsbD0obD1sK01hdGguaW11bChodCxpdCl8MCkrTWF0aC5pbXVsKHZ0LHNuKXwwLGI9YitNYXRoLmltdWwodnQsaXQpfDAseT15K01hdGguaW11bChLZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUs''@;'; put 'put ''THQpfDAsYj1iK01hdGguaW11bChZZSx3dCl8MCx5PXkrTWF0aC5pbXVsKGJlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsUHQpfDApK01hdGguaW11bCh3ZSxRZSl8MCxiPWIrTWF0aC5pbXVsKHdlLFB0KXwwLHk9eStNYXRoLmltdWwoeGUsTmUpfDAsbD0obD1sK01hdGguaW11bCh4ZSx5''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKE1lLE5lKXwwLGI9YitNYXRoLmltdWwoTWUseXQpfDAseT15K01hdGguaW11bChPZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLF90KXwwKStNYXRoLmltdWwoQ2UsYXQpfDAsYj1iK01hdGguaW11bChDZSxfdCl8MCx5PXkrTWF0aC5pbXVsKHZlLCR0KXwwLGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwodmUsSHQpfDApK01hdGguaW11bCh1ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHVlLEh0KXwwLHk9eStNYXRoLmltdWwoUGUsbm4pfDAsbD0obD1sK01hdGguaW11bChQZSxsbil8MCkrTWF0aC5pbXVsKFplLG5uKXwwLGI9YitNYXRoLmltdWwoWmUsbG4pfDA7dmFyIFJh''@;'; put 'put ''PShMKyh5PXkrTWF0aC5pbXVsKEcsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLEd0KXwwKStNYXRoLmltdWwoUSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLEd0KXwwKSsobD4+PjEzKXwwKSsoUmE+Pj4yNil8MCxSYSY9NjcxMDg4NjMseT1NYXRoLmlt''@;'; put 'put ''dWwoTGUsWHQpLGw9KGw9TWF0aC5pbXVsKExlLFF0KSkrTWF0aC5pbXVsKG50LFh0KXwwLGI9TWF0aC5pbXVsKG50LFF0KSx5PXkrTWF0aC5pbXVsKHR0LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsaXQpfDApK01hdGguaW11bChVZSxzbil8MCxiPWIrTWF0aC5pbXVsKFVlLGl0KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwoaHQsTHQpfDAsbD0obD1sK01hdGguaW11bChodCx3dCl8MCkrTWF0aC5pbXVsKHZ0LEx0KXwwLGI9YitNYXRoLmltdWwodnQsd3QpfDAseT15K01hdGguaW11bChLZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLFB0KXwwKStNYXRoLmltdWwoWWUsUWUpfDAsYj1iK01h''@;'; put 'put ''dGguaW11bChZZSxQdCl8MCx5PXkrTWF0aC5pbXVsKGJlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUseXQpfDApK01hdGguaW11bCh3ZSxOZSl8MCxiPWIrTWF0aC5pbXVsKHdlLHl0KXwwLHk9eStNYXRoLmltdWwoeGUsYXQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxfdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKE1lLGF0KXwwLGI9YitNYXRoLmltdWwoTWUsX3QpfDAseT15K01hdGguaW11bChPZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLEh0KXwwKStNYXRoLmltdWwoQ2UsJHQpfDAsYj1iK01hdGguaW11bChDZSxIdCl8MCx5PXkrTWF0aC5pbXVsKHZlLG5uKXwwLGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwodmUsbG4pfDApK01hdGguaW11bCh1ZSxubil8MCxiPWIrTWF0aC5pbXVsKHVlLGxuKXwwO3ZhciBvaT0oTCsoeT15K01hdGguaW11bChQZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKFBlLEd0KXwwKStNYXRoLmltdWwoWmUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitN''@;'; put 'put ''YXRoLmltdWwoWmUsR3QpfDApKyhsPj4+MTMpfDApKyhvaT4+PjI2KXwwLG9pJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxzbiksbD0obD1NYXRoLmltdWwoTGUsaXQpKStNYXRoLmltdWwobnQsc24pfDAsYj1NYXRoLmltdWwobnQsaXQpLHk9eStNYXRoLmltdWwodHQsTHQpfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bCh0dCx3dCl8MCkrTWF0aC5pbXVsKFVlLEx0KXwwLGI9YitNYXRoLmltdWwoVWUsd3QpfDAseT15K01hdGguaW11bChodCxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LFB0KXwwKStNYXRoLmltdWwodnQsUWUpfDAsYj1iK01hdGguaW11bCh2dCxQdCl8MCx5PXkrTWF0aC5p''@;'; put 'put ''bXVsKEtlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UseXQpfDApK01hdGguaW11bChZZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFllLHl0KXwwLHk9eStNYXRoLmltdWwoYmUsYXQpfDAsbD0obD1sK01hdGguaW11bChiZSxfdCl8MCkrTWF0aC5pbXVsKHdlLGF0KXwwLGI9YitNYXRoLmltdWwo''@;'; put 'put ''d2UsX3QpfDAseT15K01hdGguaW11bCh4ZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLEh0KXwwKStNYXRoLmltdWwoTWUsJHQpfDAsYj1iK01hdGguaW11bChNZSxIdCl8MCx5PXkrTWF0aC5pbXVsKE9lLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsbG4pfDApK01hdGguaW11bChDZSxu''@;'; put 'put ''bil8MCxiPWIrTWF0aC5pbXVsKENlLGxuKXwwO3ZhciBVaT0oTCsoeT15K01hdGguaW11bCh2ZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKHZlLEd0KXwwKStNYXRoLmltdWwodWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwodWUsR3QpfDApKyhsPj4+MTMp''@;'; put 'put ''fDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxMdCksbD0obD1NYXRoLmltdWwoTGUsd3QpKStNYXRoLmltdWwobnQsTHQpfDAsYj1NYXRoLmltdWwobnQsd3QpLHk9eStNYXRoLmltdWwodHQsUWUpfDAsbD0obD1sK01hdGguaW11bCh0dCxQdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFVlLFFlKXwwLGI9YitNYXRoLmltdWwoVWUsUHQpfDAseT15K01hdGguaW11bChodCxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LHl0KXwwKStNYXRoLmltdWwodnQsTmUpfDAsYj1iK01hdGguaW11bCh2dCx5dCl8MCx5PXkrTWF0aC5pbXVsKEtlLGF0KXwwLGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwoS2UsX3QpfDApK01hdGguaW11bChZZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFllLF90KXwwLHk9eStNYXRoLmltdWwoYmUsJHQpfDAsbD0obD1sK01hdGguaW11bChiZSxIdCl8MCkrTWF0aC5pbXVsKHdlLCR0KXwwLGI9YitNYXRoLmltdWwod2UsSHQpfDAseT15K01hdGguaW11bCh4ZSxu''@;'; put 'put ''bil8MCxsPShsPWwrTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoTWUsbm4pfDAsYj1iK01hdGguaW11bChNZSxsbil8MDt2YXIgVmE9KEwrKHk9eStNYXRoLmltdWwoT2UsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChPZSxHdCl8MCkrTWF0aC5pbXVsKENlLGFuKXww''@;'; put 'put ''KSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKENlLEd0KXwwKSsobD4+PjEzKXwwKSsoVmE+Pj4yNil8MCxWYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsUWUpLGw9KGw9TWF0aC5pbXVsKExlLFB0KSkrTWF0aC5pbXVsKG50LFFlKXwwLGI9TWF0aC5pbXVsKG50LFB0KSx5PXkrTWF0aC5p''@;'; put 'put ''bXVsKHR0LE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodHQseXQpfDApK01hdGguaW11bChVZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFVlLHl0KXwwLHk9eStNYXRoLmltdWwoaHQsYXQpfDAsbD0obD1sK01hdGguaW11bChodCxfdCl8MCkrTWF0aC5pbXVsKHZ0LGF0KXwwLGI9YitNYXRoLmltdWwo''@;'; put 'put ''dnQsX3QpfDAseT15K01hdGguaW11bChLZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLEh0KXwwKStNYXRoLmltdWwoWWUsJHQpfDAsYj1iK01hdGguaW11bChZZSxIdCl8MCx5PXkrTWF0aC5pbXVsKGJlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsbG4pfDApK01hdGguaW11bCh3ZSxu''@;'; put 'put ''bil8MCxiPWIrTWF0aC5pbXVsKHdlLGxuKXwwO3ZhciB1cj0oTCsoeT15K01hdGguaW11bCh4ZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKHhlLEd0KXwwKStNYXRoLmltdWwoTWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoTWUsR3QpfDApKyhsPj4+MTMp''@;'; put 'put ''fDApKyh1cj4+PjI2KXwwLHVyJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxOZSksbD0obD1NYXRoLmltdWwoTGUseXQpKStNYXRoLmltdWwobnQsTmUpfDAsYj1NYXRoLmltdWwobnQseXQpLHk9eStNYXRoLmltdWwodHQsYXQpfDAsbD0obD1sK01hdGguaW11bCh0dCxfdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFVlLGF0KXwwLGI9YitNYXRoLmltdWwoVWUsX3QpfDAseT15K01hdGguaW11bChodCwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LEh0KXwwKStNYXRoLmltdWwodnQsJHQpfDAsYj1iK01hdGguaW11bCh2dCxIdCl8MCx5PXkrTWF0aC5pbXVsKEtlLG5uKXwwLGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwoS2UsbG4pfDApK01hdGguaW11bChZZSxubil8MCxiPWIrTWF0aC5pbXVsKFllLGxuKXwwO3ZhciBmYT0oTCsoeT15K01hdGguaW11bChiZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKGJlLEd0KXwwKStNYXRoLmltdWwod2UsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitN''@;'; put 'put ''YXRoLmltdWwod2UsR3QpfDApKyhsPj4+MTMpfDApKyhmYT4+PjI2KXwwLGZhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxhdCksbD0obD1NYXRoLmltdWwoTGUsX3QpKStNYXRoLmltdWwobnQsYXQpfDAsYj1NYXRoLmltdWwobnQsX3QpLHk9eStNYXRoLmltdWwodHQsJHQpfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bCh0dCxIdCl8MCkrTWF0aC5pbXVsKFVlLCR0KXwwLGI9YitNYXRoLmltdWwoVWUsSHQpfDAseT15K01hdGguaW11bChodCxubil8MCxsPShsPWwrTWF0aC5pbXVsKGh0LGxuKXwwKStNYXRoLmltdWwodnQsbm4pfDAsYj1iK01hdGguaW11bCh2dCxsbil8MDt2YXIgeGk9KEwr''@;'; put 'put ''KHk9eStNYXRoLmltdWwoS2UsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChLZSxHdCl8MCkrTWF0aC5pbXVsKFllLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFllLEd0KXwwKSsobD4+PjEzKXwwKSsoeGk+Pj4yNil8MCx4aSY9NjcxMDg4NjMseT1NYXRoLmlt''@;'; put 'put ''dWwoTGUsJHQpLGw9KGw9TWF0aC5pbXVsKExlLEh0KSkrTWF0aC5pbXVsKG50LCR0KXwwLGI9TWF0aC5pbXVsKG50LEh0KSx5PXkrTWF0aC5pbXVsKHR0LG5uKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsbG4pfDApK01hdGguaW11bChVZSxubil8MCxiPWIrTWF0aC5pbXVsKFVlLGxuKXwwO3Zh''@;'; put 'put ''ciBvYT0oTCsoeT15K01hdGguaW11bChodCxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKGh0LEd0KXwwKStNYXRoLmltdWwodnQsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwodnQsR3QpfDApKyhsPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02NzEwODg2Myx5''@;'; put 'put ''PU1hdGguaW11bChMZSxubiksbD0obD1NYXRoLmltdWwoTGUsbG4pKStNYXRoLmltdWwobnQsbm4pfDAsYj1NYXRoLmltdWwobnQsbG4pO3ZhciBYaT0oTCsoeT15K01hdGguaW11bCh0dCxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKHR0LEd0KXwwKStNYXRoLmltdWwoVWUs''@;'; put 'put ''YW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoVWUsR3QpfDApKyhsPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2Mzt2YXIgSXI9KEwrKHk9TWF0aC5pbXVsKExlLGFuKSl8MCkrKCg4MTkxJihsPShsPU1hdGguaW11bChMZSxHdCkpK01hdGguaW11bChudCxhbil8MCkp''@;'; put 'put ''PDwxMyl8MDtyZXR1cm4gTD0oKGI9TWF0aC5pbXVsKG50LEd0KSkrKGw+Pj4xMyl8MCkrKElyPj4+MjYpfDAsSXImPTY3MTA4ODYzLGtbMF09ZWEsa1sxXT1taSxrWzJdPWZyLGtbM109JGksa1s0XT1LaSxrWzVdPVZpLGtbNl09cXIsa1s3XT11YSxrWzhdPUZpLGtbOV09UmEsa1sxMF09b2ks''@;'; put 'put ''a1sxMV09VWksa1sxMl09VmEsa1sxM109dXIsa1sxNF09ZmEsa1sxNV09eGksa1sxNl09b2Esa1sxN109WGksa1sxOF09SXIsMCE9PUwmJihrWzE5XT1MLHYubGVuZ3RoKyspLHZ9O2Z1bmN0aW9uIFooUixzLHUpe3JldHVybihuZXcgVSkubXVscChSLHMsdSl9ZnVuY3Rpb24gVShSLHMpe3Ro''@;'; put 'put ''aXMueD1SLHRoaXMueT1zfU1hdGguaW11bHx8KEg9TiksZi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocyx1KXt2YXIgdixwPXRoaXMubGVuZ3RoK3MubGVuZ3RoO3JldHVybiB2PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cy5sZW5ndGg/SCh0aGlzLHMsdSk6cDw2Mz9OKHRoaXMscyx1KTpw''@;'; put 'put ''PDEwMjQ/ZnVuY3Rpb24geihSLHMsdSl7dS5uZWdhdGl2ZT1zLm5lZ2F0aXZlXlIubmVnYXRpdmUsdS5sZW5ndGg9Ui5sZW5ndGgrcy5sZW5ndGg7Zm9yKHZhciB2PTAscD0wLF89MDtfPHUubGVuZ3RoLTE7XysrKXt2YXIgaz1wO3A9MDtmb3IodmFyIEw9NjcxMDg4NjMmdix5PU1hdGgubWlu''@;'; put 'put ''KF8scy5sZW5ndGgtMSksbD1NYXRoLm1heCgwLF8tUi5sZW5ndGgrMSk7bDw9eTtsKyspe3ZhciBRPSgwfFIud29yZHNbXy1sXSkqKDB8cy53b3Jkc1tsXSkscGU9NjcxMDg4NjMmUTtMPTY3MTA4ODYzJihwZT1wZStMfDApLHArPShrPShrPWsrKFEvNjcxMDg4NjR8MCl8MCkrKHBlPj4+MjYp''@;'; put 'put ''fDApPj4+MjYsayY9NjcxMDg4NjN9dS53b3Jkc1tfXT1MLHY9ayxrPXB9cmV0dXJuIDAhPT12P3Uud29yZHNbX109djp1Lmxlbmd0aC0tLHUuc3RyaXAoKX0odGhpcyxzLHUpOloodGhpcyxzLHUpLHZ9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PW5ldyBBcnJh''@;'; put 'put ''eShzKSx2PWYucHJvdG90eXBlLl9jb3VudEJpdHMocyktMSxwPTA7cDxzO3ArKyl1W3BdPXRoaXMucmV2QmluKHAsdixzKTtyZXR1cm4gdX0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHMsdSx2KXtpZigwPT09c3x8cz09PXYtMSlyZXR1cm4gcztmb3IodmFyIHA9MCxfPTA7Xzx1O18r''@;'; put 'put ''KylwfD0oMSZzKTw8dS1fLTEscz4+PTE7cmV0dXJuIHB9LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocyx1LHYscCxfLGspe2Zvcih2YXIgTD0wO0w8aztMKyspcFtMXT11W3NbTF1dLF9bTF09dltzW0xdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHMsdSx2LHAsXyxr''@;'; put 'put ''KXt0aGlzLnBlcm11dGUoayxzLHUsdixwLF8pO2Zvcih2YXIgTD0xO0w8XztMPDw9MSlmb3IodmFyIHk9TDw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS95KSxiPU1hdGguc2luKDIqTWF0aC5QSS95KSxxPTA7cTxfO3ErPXkpZm9yKHZhciBHPWwsUT1iLHBlPTA7cGU8TDtwZSsrKXt2YXIgUGU9''@;'; put 'put ''dltxK3BlXSxaZT1wW3ErcGVdLHFlPXZbcStwZStMXSx2ZT1wW3ErcGUrTF0sdWU9RypxZS1RKnZlO3ZlPUcqdmUrUSpxZSx2W3ErcGVdPVBlKyhxZT11ZSkscFtxK3BlXT1aZSt2ZSx2W3ErcGUrTF09UGUtcWUscFtxK3BlK0xdPVplLXZlLHBlIT09eSYmKHVlPWwqRy1iKlEsUT1sKlErYipH''@;'; put 'put ''LEc9dWUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocyx1KXt2YXIgdj0xfE1hdGgubWF4KHUscykscD0xJnYsXz0wO2Zvcih2PXYvMnwwO3Y7dj4+Pj0xKV8rKztyZXR1cm4gMTw8XysxK3B9LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihzLHUsdil7aWYoISh2''@;'; put 'put ''PD0xKSlmb3IodmFyIHA9MDtwPHYvMjtwKyspe3ZhciBfPXNbcF07c1twXT1zW3YtcC0xXSxzW3YtcC0xXT1fLF89dVtwXSx1W3BdPS11W3YtcC0xXSx1W3YtcC0xXT0tX319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihzLHUpe2Zvcih2YXIgdj0wLHA9MDtwPHUvMjtwKysp''@;'; put 'put ''e3ZhciBfPTgxOTIqTWF0aC5yb3VuZChzWzIqcCsxXS91KStNYXRoLnJvdW5kKHNbMipwXS91KSt2O3NbcF09NjcxMDg4NjMmXyx2PV88NjcxMDg4NjQ/MDpfLzY3MTA4ODY0fDB9cmV0dXJuIHN9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocyx1LHYscCl7Zm9yKHZhciBfPTAs''@;'; put 'put ''az0wO2s8dTtrKyspdlsyKmtdPTgxOTEmKF8rPTB8c1trXSksdlsyKmsrMV09ODE5MSYoXz4+Pj0xMyksXz4+Pj0xMztmb3Ioaz0yKnU7azxwOysrayl2W2tdPTA7bygwPT09XyksbyghKC04MTkyJl8pKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihzKXtmb3IodmFyIHU9bmV3IEFycmF5''@;'; put 'put ''KHMpLHY9MDt2PHM7disrKXVbdl09MDtyZXR1cm4gdX0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihzLHUsdil7dmFyIHA9Mip0aGlzLmd1ZXNzTGVuMTNiKHMubGVuZ3RoLHUubGVuZ3RoKSxfPXRoaXMubWFrZVJCVChwKSxrPXRoaXMuc3R1YihwKSxMPW5ldyBBcnJheShwKSx5PW5ldyBB''@;'; put 'put ''cnJheShwKSxsPW5ldyBBcnJheShwKSxiPW5ldyBBcnJheShwKSxxPW5ldyBBcnJheShwKSxHPW5ldyBBcnJheShwKSxRPXYud29yZHM7US5sZW5ndGg9cCx0aGlzLmNvbnZlcnQxM2Iocy53b3JkcyxzLmxlbmd0aCxMLHApLHRoaXMuY29udmVydDEzYih1LndvcmRzLHUubGVuZ3RoLGIscCks''@;'; put 'put ''dGhpcy50cmFuc2Zvcm0oTCxrLHksbCxwLF8pLHRoaXMudHJhbnNmb3JtKGIsayxxLEcscCxfKTtmb3IodmFyIHBlPTA7cGU8cDtwZSsrKXt2YXIgUGU9eVtwZV0qcVtwZV0tbFtwZV0qR1twZV07bFtwZV09eVtwZV0qR1twZV0rbFtwZV0qcVtwZV0seVtwZV09UGV9cmV0dXJuIHRoaXMuY29u''@;'; put 'put ''anVnYXRlKHksbCxwKSx0aGlzLnRyYW5zZm9ybSh5LGwsUSxrLHAsXyksdGhpcy5jb25qdWdhdGUoUSxrLHApLHRoaXMubm9ybWFsaXplMTNiKFEscCksdi5uZWdhdGl2ZT1zLm5lZ2F0aXZlXnUubmVnYXRpdmUsdi5sZW5ndGg9cy5sZW5ndGgrdS5sZW5ndGgsdi5zdHJpcCgpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5tdWw9ZnVuY3Rpb24ocyl7dmFyIHU9bmV3IGYobnVsbCk7cmV0dXJuIHUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3MubGVuZ3RoKSx0aGlzLm11bFRvKHMsdSl9LGYucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocyl7dmFyIHU9bmV3IGYobnVsbCk7cmV0dXJuIHUud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KHRoaXMubGVuZ3RoK3MubGVuZ3RoKSxaKHRoaXMscyx1KX0sZi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHMsdGhpcyl9LGYucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8''@;'; put 'put ''NjcxMDg4NjQpO2Zvcih2YXIgdT0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHA9KDB8dGhpcy53b3Jkc1t2XSkqcyxfPSg2NzEwODg2MyZwKSsoNjcxMDg4NjMmdSk7dT4+PTI2LHUrPXAvNjcxMDg4NjR8MCx1Kz1fPj4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZffXJldHVybiAw''@;'; put 'put ''IT09dSYmKHRoaXMud29yZHNbdl09dSx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cz8xOnRoaXMubGVuZ3RoLHRoaXN9LGYucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihzKX0sZi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubXVsKHRoaXMpfSxmLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxmLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyl7dmFyIHU9ZnVuY3Rpb24gRihSKXtmb3IodmFyIHM9bmV3IEFycmF5KFIuYml0TGVuZ3RoKCkpLHU9''@;'; put 'put ''MDt1PHMubGVuZ3RoO3UrKyl7dmFyIHA9dSUyNjtzW3VdPShSLndvcmRzW3UvMjZ8MF0mMTw8cCk+Pj5wfXJldHVybiBzfShzKTtpZigwPT09dS5sZW5ndGgpcmV0dXJuIG5ldyBmKDEpO2Zvcih2YXIgdj10aGlzLHA9MDtwPHUubGVuZ3RoJiYwPT09dVtwXTtwKyssdj12LnNxcigpKTtpZigr''@;'; put 'put ''K3A8dS5sZW5ndGgpZm9yKHZhciBfPXYuc3FyKCk7cDx1Lmxlbmd0aDtwKyssXz1fLnNxcigpKTAhPT11W3BdJiYodj12Lm11bChfKSk7cmV0dXJuIHZ9LGYucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIF8sdT1zJTI2LHY9KHMt''@;'; put 'put ''dSkvMjYscD02NzEwODg2Mz4+PjI2LXU8PDI2LXU7aWYoMCE9PXUpe3ZhciBrPTA7Zm9yKF89MDtfPHRoaXMubGVuZ3RoO18rKyl7dmFyIEw9dGhpcy53b3Jkc1tfXSZwO3RoaXMud29yZHNbX109KDB8dGhpcy53b3Jkc1tfXSktTDw8dXxrLGs9TD4+PjI2LXV9ayYmKHRoaXMud29yZHNbX109''@;'; put 'put ''ayx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKF89dGhpcy5sZW5ndGgtMTtfPj0wO18tLSl0aGlzLndvcmRzW18rdl09dGhpcy53b3Jkc1tfXTtmb3IoXz0wO188djtfKyspdGhpcy53b3Jkc1tfXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBl''@;'; put 'put ''LmlzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihzKX0sZi5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcDtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCkscD11Pyh1LXUlMjYpLzI2OjA7dmFyIF89cyUyNixrPU1h''@;'; put 'put ''dGgubWluKChzLV8pLzI2LHRoaXMubGVuZ3RoKSxMPTY3MTA4ODYzXjY3MTA4ODYzPj4+Xzw8Xyx5PXY7aWYocC09ayxwPU1hdGgubWF4KDAscCkseSl7Zm9yKHZhciBsPTA7bDxrO2wrKyl5LndvcmRzW2xdPXRoaXMud29yZHNbbF07eS5sZW5ndGg9a31pZigwIT09aylpZih0aGlzLmxlbmd0''@;'; put 'put ''aD5rKWZvcih0aGlzLmxlbmd0aC09ayxsPTA7bDx0aGlzLmxlbmd0aDtsKyspdGhpcy53b3Jkc1tsXT10aGlzLndvcmRzW2wra107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgYj0wO2ZvcihsPXRoaXMubGVuZ3RoLTE7bD49MCYmKDAhPT1ifHxsPj1wKTtsLS0pe3Zh''@;'; put 'put ''ciBxPTB8dGhpcy53b3Jkc1tsXTt0aGlzLndvcmRzW2xdPWI8PDI2LV98cT4+Pl8sYj1xJkx9cmV0dXJuIHkmJjAhPT1iJiYoeS53b3Jkc1t5Lmxlbmd0aCsrXT1iKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5pc2hybj1mdW5jdGlvbihzLHUsdil7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHMsdSx2KX0sZi5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHMpfSxmLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihzKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihzKX0sZi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHMpfSxmLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihzKX0sZi5wcm90b3R5cGUudGVz''@;'; put 'put ''dG49ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB1PXMlMjYsdj0ocy11KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD12fHwhKHRoaXMud29yZHNbdl0mMTw8dSkpfSxmLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMm''@;'; put 'put ''JnM+PTApO3ZhciB1PXMlMjYsdj0ocy11KS8yNjtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXY/dGhpczooMCE9PXUmJnYrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih2LHRoaXMubGVuZ3Ro''@;'; put 'put ''KSwwIT09dSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+dTw8dSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKSl9LGYucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHMpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaW1hc2tuKHMpfSxmLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihzKXtyZXR1cm4gbygibnVtYmVyIj09dHlwZW9mIHMpLG8oczw2NzEwODg2NCksczwwP3RoaXMuaXN1Ym4oLXMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1sw''@;'; put 'put ''XSk8cz8odGhpcy53b3Jkc1swXT1zLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHMpfSxmLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocyl7dGhp''@;'; put 'put ''cy53b3Jkc1swXSs9cztmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3VdPj02NzEwODg2NDt1KyspdGhpcy53b3Jkc1t1XS09NjcxMDg4NjQsdT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t1KzFdPTE6dGhpcy53b3Jkc1t1KzFdKys7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PU1hdGgubWF4KHRoaXMubGVuZ3RoLHUrMSksdGhpc30sZi5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocyl7aWYobygibnVtYmVyIj09dHlwZW9mIHMpLG8oczw2NzEwODg2NCksczwwKXJldHVybiB0aGlzLmlhZGRuKC1zKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wLHRoaXMuaWFkZG4ocyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgdT0wO3U8dGhpcy5s''@;'; put 'put ''ZW5ndGgmJnRoaXMud29yZHNbdV08MDt1KyspdGhpcy53b3Jkc1t1XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t1KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihzKX0sZi5wcm90b3R5cGUuc3Vi''@;'; put 'put ''bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHMpfSxmLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxmLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sZi5wcm90b3R5''@;'; put 'put ''cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHMsdSx2KXt2YXIgXzt0aGlzLl9leHBhbmQocy5sZW5ndGgrdik7dmFyIGssTD0wO2ZvcihfPTA7XzxzLmxlbmd0aDtfKyspe2s9KDB8dGhpcy53b3Jkc1tfK3ZdKStMO3ZhciB5PSgwfHMud29yZHNbX10pKnU7TD0oKGstPTY3MTA4ODYzJnkpPj4y''@;'; put 'put ''NiktKHkvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tfK3ZdPTY3MTA4ODYzJmt9Zm9yKDtfPHRoaXMubGVuZ3RoLXY7XysrKUw9KGs9KDB8dGhpcy53b3Jkc1tfK3ZdKStMKT4+MjYsdGhpcy53b3Jkc1tfK3ZdPTY3MTA4ODYzJms7aWYoMD09PUwpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3Iobygt''@;'; put 'put ''MT09PUwpLEw9MCxfPTA7Xzx0aGlzLmxlbmd0aDtfKyspTD0oaz0tKDB8dGhpcy53b3Jkc1tfXSkrTCk+PjI2LHRoaXMud29yZHNbX109NjcxMDg4NjMmaztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocyx1KXt2YXIg''@;'; put 'put ''dixwPXRoaXMuY2xvbmUoKSxfPXMsaz0wfF8ud29yZHNbXy5sZW5ndGgtMV07MCE9KHY9MjYtdGhpcy5fY291bnRCaXRzKGspKSYmKF89Xy51c2hsbih2KSxwLml1c2hsbih2KSxrPTB8Xy53b3Jkc1tfLmxlbmd0aC0xXSk7dmFyIGwseT1wLmxlbmd0aC1fLmxlbmd0aDtpZigibW9kIiE9PXUp''@;'; put 'put ''eyhsPW5ldyBmKG51bGwpKS5sZW5ndGg9eSsxLGwud29yZHM9bmV3IEFycmF5KGwubGVuZ3RoKTtmb3IodmFyIGI9MDtiPGwubGVuZ3RoO2IrKylsLndvcmRzW2JdPTB9dmFyIHE9cC5jbG9uZSgpLl9pc2hsbnN1Ym11bChfLDEseSk7MD09PXEubmVnYXRpdmUmJihwPXEsbCYmKGwud29yZHNb''@;'; put 'put ''eV09MSkpO2Zvcih2YXIgRz15LTE7Rz49MDtHLS0pe3ZhciBRPTY3MTA4ODY0KigwfHAud29yZHNbXy5sZW5ndGgrR10pKygwfHAud29yZHNbXy5sZW5ndGgrRy0xXSk7Zm9yKFE9TWF0aC5taW4oUS9rfDAsNjcxMDg4NjMpLHAuX2lzaGxuc3VibXVsKF8sUSxHKTswIT09cC5uZWdhdGl2ZTsp''@;'; put 'put ''US0tLHAubmVnYXRpdmU9MCxwLl9pc2hsbnN1Ym11bChfLDEsRykscC5pc1plcm8oKXx8KHAubmVnYXRpdmVePTEpO2wmJihsLndvcmRzW0ddPVEpfXJldHVybiBsJiZsLnN0cmlwKCkscC5zdHJpcCgpLCJkaXYiIT09dSYmMCE9PXYmJnAuaXVzaHJuKHYpLHtkaXY6bHx8bnVsbCxtb2Q6cH19''@;'; put 'put ''LGYucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihzLHUsdil7cmV0dXJuIG8oIXMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgZigwKSxtb2Q6bmV3IGYoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cy5uZWdhdGl2ZT8oaz10aGlzLm5lZygpLmRpdm1vZChzLHUpLCJtb2Qi''@;'; put 'put ''IT09dSYmKHA9ay5kaXYubmVnKCkpLCJkaXYiIT09dSYmKF89ay5tb2QubmVnKCksdiYmMCE9PV8ubmVnYXRpdmUmJl8uaWFkZChzKSkse2RpdjpwLG1vZDpffSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0aXZlPyhrPXRoaXMuZGl2bW9kKHMubmVnKCksdSksIm1vZCIhPT11JiYo''@;'; put 'put ''cD1rLmRpdi5uZWcoKSkse2RpdjpwLG1vZDprLm1vZH0pOnRoaXMubmVnYXRpdmUmcy5uZWdhdGl2ZT8oaz10aGlzLm5lZygpLmRpdm1vZChzLm5lZygpLHUpLCJkaXYiIT09dSYmKF89ay5tb2QubmVnKCksdiYmMCE9PV8ubmVnYXRpdmUmJl8uaXN1YihzKSkse2RpdjprLmRpdixtb2Q6X30p''@;'; put 'put ''OnMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChzKTwwP3tkaXY6bmV3IGYoMCksbW9kOnRoaXN9OjE9PT1zLmxlbmd0aD8iZGl2Ij09PXU/e2Rpdjp0aGlzLmRpdm4ocy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09dT97ZGl2Om51bGwsbW9kOm5ldyBmKHRoaXMubW9kbihzLndv''@;'; put 'put ''cmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHMud29yZHNbMF0pLG1vZDpuZXcgZih0aGlzLm1vZG4ocy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHMsdSk7dmFyIHAsXyxrfSxmLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGl2bW9kKHMsImRpdiIsITEpLmRpdn0s''@;'; put 'put ''Zi5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJtb2QiLCExKS5tb2R9LGYucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGl2bW9kKHMsIm1vZCIsITApLm1vZH0sZi5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocyl7dmFy''@;'; put 'put ''IHU9dGhpcy5kaXZtb2Qocyk7aWYodS5tb2QuaXNaZXJvKCkpcmV0dXJuIHUuZGl2O3ZhciB2PTAhPT11LmRpdi5uZWdhdGl2ZT91Lm1vZC5pc3ViKHMpOnUubW9kLHA9cy51c2hybigxKSxfPXMuYW5kbG4oMSksaz12LmNtcChwKTtyZXR1cm4gazwwfHwxPT09XyYmMD09PWs/dS5kaXY6MCE9''@;'; put 'put ''PXUuZGl2Lm5lZ2F0aXZlP3UuZGl2LmlzdWJuKDEpOnUuZGl2LmlhZGRuKDEpfSxmLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHMpe28oczw9NjcxMDg4NjMpO2Zvcih2YXIgdT0oMTw8MjYpJXMsdj0wLHA9dGhpcy5sZW5ndGgtMTtwPj0wO3AtLSl2PSh1KnYrKDB8dGhpcy53b3Jkc1twXSkp''@;'; put 'put ''JXM7cmV0dXJuIHZ9LGYucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHMpe28oczw9NjcxMDg4NjMpO2Zvcih2YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9KDB8dGhpcy53b3Jkc1t2XSkrNjcxMDg4NjQqdTt0aGlzLndvcmRzW3ZdPXAvc3wwLHU9cCVzfXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihzKX0sZi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihzKXtvKDA9PT1zLm5lZ2F0aXZlKSxvKCFzLmlzWmVybygpKTt2YXIgdT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUu''@;'; put 'put ''bmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3IodmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPW5ldyBmKDApLEw9bmV3IGYoMSkseT0wO3UuaXNFdmVuKCkmJnYuaXNFdmVuKCk7KXUuaXVzaHJuKDEpLHYuaXVzaHJuKDEpLCsreTtmb3IodmFyIGw9di5jbG9uZSgpLGI9dS5jbG9u''@;'; put 'put ''ZSgpOyF1LmlzWmVybygpOyl7Zm9yKHZhciBxPTAsRz0xOyEodS53b3Jkc1swXSZHKSYmcTwyNjsrK3EsRzw8PTEpO2lmKHE+MClmb3IodS5pdXNocm4ocSk7cS0tID4wOykocC5pc09kZCgpfHxfLmlzT2RkKCkpJiYocC5pYWRkKGwpLF8uaXN1YihiKSkscC5pdXNocm4oMSksXy5pdXNocm4o''@;'; put 'put ''MSk7Zm9yKHZhciBRPTAscGU9MTshKHYud29yZHNbMF0mcGUpJiZRPDI2OysrUSxwZTw8PTEpO2lmKFE+MClmb3Iodi5pdXNocm4oUSk7US0tID4wOykoay5pc09kZCgpfHxMLmlzT2RkKCkpJiYoay5pYWRkKGwpLEwuaXN1YihiKSksay5pdXNocm4oMSksTC5pdXNocm4oMSk7dS5jbXAodik+''@;'; put 'put ''PTA/KHUuaXN1Yih2KSxwLmlzdWIoayksXy5pc3ViKEwpKToodi5pc3ViKHUpLGsuaXN1YihwKSxMLmlzdWIoXykpfXJldHVybnthOmssYjpMLGdjZDp2Lml1c2hsbih5KX19LGYucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihzKXtvKDA9PT1zLm5lZ2F0aXZlKSxvKCFzLmlzWmVybygpKTt2''@;'; put 'put ''YXIgcSx1PXRoaXMsdj1zLmNsb25lKCk7dT0wIT09dS5uZWdhdGl2ZT91LnVtb2Qocyk6dS5jbG9uZSgpO2Zvcih2YXIgcD1uZXcgZigxKSxfPW5ldyBmKDApLGs9di5jbG9uZSgpO3UuY21wbigxKT4wJiZ2LmNtcG4oMSk+MDspe2Zvcih2YXIgTD0wLHk9MTshKHUud29yZHNbMF0meSkmJkw8''@;'; put 'put ''MjY7KytMLHk8PD0xKTtpZihMPjApZm9yKHUuaXVzaHJuKEwpO0wtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoaykscC5pdXNocm4oMSk7Zm9yKHZhciBsPTAsYj0xOyEodi53b3Jkc1swXSZiKSYmbDwyNjsrK2wsYjw8PTEpO2lmKGw+MClmb3Iodi5pdXNocm4obCk7bC0tID4wOylfLmlzT2Rk''@;'; put 'put ''KCkmJl8uaWFkZChrKSxfLml1c2hybigxKTt1LmNtcCh2KT49MD8odS5pc3ViKHYpLHAuaXN1YihfKSk6KHYuaXN1Yih1KSxfLmlzdWIocCkpfXJldHVybihxPTA9PT11LmNtcG4oMSk/cDpfKS5jbXBuKDApPDAmJnEuaWFkZChzKSxxfSxmLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocyl7aWYo''@;'; put 'put ''dGhpcy5pc1plcm8oKSlyZXR1cm4gcy5hYnMoKTtpZihzLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB1PXRoaXMuY2xvbmUoKSx2PXMuY2xvbmUoKTt1Lm5lZ2F0aXZlPTAsdi5uZWdhdGl2ZT0wO2Zvcih2YXIgcD0wO3UuaXNFdmVuKCkmJnYuaXNFdmVuKCk7cCsrKXUuaXVzaHJu''@;'; put 'put ''KDEpLHYuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt1LmlzRXZlbigpOyl1Lml1c2hybigxKTtmb3IoO3YuaXNFdmVuKCk7KXYuaXVzaHJuKDEpO3ZhciBfPXUuY21wKHYpO2lmKF88MCl7dmFyIGs9dTt1PXYsdj1rfWVsc2UgaWYoMD09PV98fDA9PT12LmNtcG4oMSkpYnJlYWs7dS5pc3ViKHYp''@;'; put 'put ''fXJldHVybiB2Lml1c2hsbihwKX0sZi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5lZ2NkKHMpLmEudW1vZChzKX0sZi5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGYucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLndvcmRzWzBdJnN9LGYucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzKTt2YXIgdT1zJTI2LHY9KHMtdSkvMjYscD0xPDx1O2lm''@;'; put 'put ''KHRoaXMubGVuZ3RoPD12KXJldHVybiB0aGlzLl9leHBhbmQodisxKSx0aGlzLndvcmRzW3ZdfD1wLHRoaXM7Zm9yKHZhciBfPXAsaz12OzAhPT1fJiZrPHRoaXMubGVuZ3RoO2srKyl7dmFyIEw9MHx0aGlzLndvcmRzW2tdO189KEwrPV8pPj4+MjYsdGhpcy53b3Jkc1trXT1MJj02NzEwODg2''@;'; put 'put ''M31yZXR1cm4gMCE9PV8mJih0aGlzLndvcmRzW2tdPV8sdGhpcy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGYucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocyl7dmFyIHYsdT1z''@;'; put 'put ''PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF1KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ1KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXY9MTtlbHNle3UmJihzPS1zKSxvKHM8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBwPTB8dGhp''@;'; put 'put ''cy53b3Jkc1swXTt2PXA9PT1zPzA6cDxzPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXY6dn0sZi5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMu''@;'; put 'put ''bmVnYXRpdmUpcmV0dXJuIDE7dmFyIHU9dGhpcy51Y21wKHMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC11OnV9LGYucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocyl7aWYodGhpcy5sZW5ndGg+cy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cy5sZW5ndGgpcmV0dXJuLTE7''@;'; put 'put ''Zm9yKHZhciB1PTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXt2YXIgcD0wfHRoaXMud29yZHNbdl0sXz0wfHMud29yZHNbdl07aWYocCE9PV8pe3A8Xz91PS0xOnA+XyYmKHU9MSk7YnJlYWt9fXJldHVybiB1fSxmLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocyl7cmV0dXJuIDE9PT10aGlz''@;'; put 'put ''LmNtcG4ocyl9LGYucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHMpe3JldHVybiAxPT09dGhpcy5jbXAocyl9LGYucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wbihzKT49MH0sZi5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcChzKT49MH0s''@;'; put 'put ''Zi5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHMpe3JldHVybi0xPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5sdD1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wKHMpfSxmLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcG4ocyk8PTB9LGYucHJvdG90''@;'; put 'put ''eXBlLmx0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXAocyk8PTB9LGYucHJvdG90eXBlLmVxbj1mdW5jdGlvbihzKXtyZXR1cm4gMD09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT10aGlzLmNtcChzKX0sZi5yZWQ9ZnVuY3Rpb24ocyl7''@;'; put 'put ''cmV0dXJuIG5ldyBtZShzKX0sZi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxzLmNv''@;'; put 'put ''bnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocyl9LGYucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMucmVkPXMsdGhpc30sZi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocyl9''@;'; put 'put ''LGYucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJ''@;'; put 'put ''QWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscyl9''@;'; put 'put ''LGYucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJl''@;'; put 'put ''ZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhp''@;'; put 'put ''cyxzKSx0aGlzLnJlZC5tdWwodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscyksdGhpcy5yZWQuaW11bCh0aGlzLHMpfSxm''@;'; put 'put ''LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sZi5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBvKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxmLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl''@;'; put 'put ''cmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sZi5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGYu''@;'; put 'put ''cHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCYmIXMucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHMpfTt2YXIgSz17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5''@;'; put 'put ''Om51bGx9O2Z1bmN0aW9uIFgoUixzKXt0aGlzLm5hbWU9Uix0aGlzLnA9bmV3IGYocywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGYoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIG5lKCl7WC5jYWxs''@;'; put 'put ''KHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIHNlKCl7WC5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGhlKCl7WC5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIF9lKCl7WC5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIG1lKFIpe2lmKCJzdHJpbmciPT10eXBlb2YgUil7dmFyIHM9Zi5fcHJpbWUoUik7dGhpcy5tPXMucCx0aGlzLnByaW1lPXN9ZWxzZSBvKFIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUg''@;'; put 'put ''Z3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Uix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gRmUoUil7bWUuY2FsbCh0aGlzLFIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGYo''@;'; put 'put ''MSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0''@;'; put 'put ''aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9WC5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBzPW5ldyBmKG51bGwpO3JldHVybiBzLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksc30sWC5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihz''@;'; put 'put ''KXt2YXIgdix1PXM7ZG97dGhpcy5zcGxpdCh1LHRoaXMudG1wKSx2PSh1PSh1PXRoaXMuaW11bEsodSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh2PnRoaXMubik7dmFyIHA9djx0aGlzLm4/LTE6dS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1wPyh1LndvcmRzWzBdPTAs''@;'; put 'put ''dS5sZW5ndGg9MSk6cD4wP3UuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXUuc3RyaXA/dS5zdHJpcCgpOnUuX3N0cmlwKCksdX0sWC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtzLml1c2hybih0aGlzLm4sMCx1KX0sWC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7cmV0dXJuIHMu''@;'; put 'put ''aW11bCh0aGlzLmspfSxJKG5lLFgpLG5lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihzLHUpe2Zvcih2YXIgdj00MTk0MzAzLHA9TWF0aC5taW4ocy5sZW5ndGgsOSksXz0wO188cDtfKyspdS53b3Jkc1tfXT1zLndvcmRzW19dO2lmKHUubGVuZ3RoPXAscy5sZW5ndGg8PTkpcmV0dXJuIHMu''@;'; put 'put ''d29yZHNbMF09MCx2b2lkKHMubGVuZ3RoPTEpO3ZhciBrPXMud29yZHNbOV07Zm9yKHUud29yZHNbdS5sZW5ndGgrK109ayZ2LF89MTA7XzxzLmxlbmd0aDtfKyspe3ZhciBMPTB8cy53b3Jkc1tfXTtzLndvcmRzW18tMTBdPShMJnYpPDw0fGs+Pj4yMixrPUx9cy53b3Jkc1tfLTEwXT1rPj4+''@;'; put 'put ''PTIyLHMubGVuZ3RoLT0wPT09ayYmcy5sZW5ndGg+MTA/MTA6OX0sbmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe3Mud29yZHNbcy5sZW5ndGhdPTAscy53b3Jkc1tzLmxlbmd0aCsxXT0wLHMubGVuZ3RoKz0yO2Zvcih2YXIgdT0wLHY9MDt2PHMubGVuZ3RoO3YrKyl7dmFyIHA9MHxz''@;'; put 'put ''LndvcmRzW3ZdO3Mud29yZHNbdl09NjcxMDg4NjMmKHUrPTk3NypwKSx1PTY0KnArKHUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1zLndvcmRzW3MubGVuZ3RoLTFdJiYocy5sZW5ndGgtLSwwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmcy5sZW5ndGgtLSksc30sSShzZSxYKSxJKGhlLFgpLEko''@;'; put 'put ''X2UsWCksX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT0wLHY9MDt2PHMubGVuZ3RoO3YrKyl7dmFyIHA9MTkqKDB8cy53b3Jkc1t2XSkrdSxfPTY3MTA4ODYzJnA7cD4+Pj0yNixzLndvcmRzW3ZdPV8sdT1wfXJldHVybiAwIT09dSYmKHMud29yZHNbcy5sZW5ndGgr''@;'; put 'put ''K109dSksc30sZi5fcHJpbWU9ZnVuY3Rpb24ocyl7aWYoS1tzXSlyZXR1cm4gS1tzXTt2YXIgdTtpZigiazI1NiI9PT1zKXU9bmV3IG5lO2Vsc2UgaWYoInAyMjQiPT09cyl1PW5ldyBzZTtlbHNlIGlmKCJwMTkyIj09PXMpdT1uZXcgaGU7ZWxzZXtpZigicDI1NTE5IiE9PXMpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJVbmtub3duIHByaW1lICIrcyk7dT1uZXcgX2V9cmV0dXJuIEtbc109dSx1fSxtZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIil9LG1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihzLHUpe28oIShzLm5lZ2F0aXZlfHUubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8ocy5yZWQmJnMucmVkPT09dS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKX0sbWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHMpLl9mb3JjZVJlZCh0aGlzKTpzLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocyl7cmV0dXJuIHMuaXNa''@;'; put 'put ''ZXJvKCk/cy5jbG9uZSgpOnRoaXMubS5zdWIocykuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuYWRkKHUpO3JldHVybiB2LmNtcCh0aGlzLm0pPj0wJiZ2LmlzdWIodGhpcy5tKSx2Ll9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKX0sbWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5pYWRkKHUpO3JldHVybiB2LmNtcCh0aGlzLm0pPj0wJiZ2LmlzdWIodGhpcy5tKSx2fSxtZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUp''@;'; put 'put ''O3ZhciB2PXMuc3ViKHUpO3JldHVybiB2LmNtcG4oMCk8MCYmdi5pYWRkKHRoaXMubSksdi5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuaXN1Yih1KTtyZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0''@;'; put 'put ''aGlzLm0pLHZ9LG1lLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShzKSx0aGlzLmltb2Qocy51c2hsbih1KSl9LG1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocyx1KSx0aGlzLmltb2Qocy5pbXVsKHUp''@;'; put 'put ''KX0sbWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMsdSksdGhpcy5pbW9kKHMubXVsKHUpKX0sbWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW11bChzLHMuY2xvbmUoKSl9LG1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rp''@;'; put 'put ''b24ocyl7cmV0dXJuIHRoaXMubXVsKHMscyl9LG1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHMpe2lmKHMuaXNaZXJvKCkpcmV0dXJuIHMuY2xvbmUoKTt2YXIgdT10aGlzLm0uYW5kbG4oMyk7aWYobyh1JTI9PTEpLDM9PT11KXt2YXIgdj10aGlzLm0uYWRkKG5ldyBmKDEpKS5pdXNocm4o''@;'; put 'put ''Mik7cmV0dXJuIHRoaXMucG93KHMsdil9Zm9yKHZhciBwPXRoaXMubS5zdWJuKDEpLF89MDshcC5pc1plcm8oKSYmMD09PXAuYW5kbG4oMSk7KV8rKyxwLml1c2hybigxKTtvKCFwLmlzWmVybygpKTt2YXIgaz1uZXcgZigxKS50b1JlZCh0aGlzKSxMPWsucmVkTmVnKCkseT10aGlzLm0uc3Vi''@;'; put 'put ''bigxKS5pdXNocm4oMSksbD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGw9bmV3IGYoMipsKmwpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhsLHkpLmNtcChMKTspbC5yZWRJQWRkKEwpO2Zvcih2YXIgYj10aGlzLnBvdyhsLHApLHE9dGhpcy5wb3cocyxwLmFkZG4oMSkuaXVzaHJuKDEpKSxH''@;'; put 'put ''PXRoaXMucG93KHMscCksUT1fOzAhPT1HLmNtcChrKTspe2Zvcih2YXIgcGU9RyxQZT0wOzAhPT1wZS5jbXAoayk7UGUrKylwZT1wZS5yZWRTcXIoKTtvKFBlPFEpO3ZhciBaZT10aGlzLnBvdyhiLG5ldyBmKDEpLml1c2hsbihRLVBlLTEpKTtxPXEucmVkTXVsKFplKSxiPVplLnJlZFNxcigp''@;'; put 'put ''LEc9Ry5yZWRNdWwoYiksUT1QZX1yZXR1cm4gcX0sbWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7dmFyIHU9cy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXUubmVnYXRpdmU/KHUubmVnYXRpdmU9MCx0aGlzLmltb2QodSkucmVkTmVnKCkpOnRoaXMuaW1vZCh1KX0sbWUucHJvdG90''@;'; put 'put ''eXBlLnBvdz1mdW5jdGlvbihzLHUpe2lmKHUuaXNaZXJvKCkpcmV0dXJuIG5ldyBmKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT11LmNtcG4oMSkpcmV0dXJuIHMuY2xvbmUoKTt2YXIgcD1uZXcgQXJyYXkoMTYpO3BbMF09bmV3IGYoMSkudG9SZWQodGhpcykscFsxXT1zO2Zvcih2YXIgXz0yO188''@;'; put 'put ''cC5sZW5ndGg7XysrKXBbX109dGhpcy5tdWwocFtfLTFdLHMpO3ZhciBrPXBbMF0sTD0wLHk9MCxsPXUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1sJiYobD0yNiksXz11Lmxlbmd0aC0xO18+PTA7Xy0tKXtmb3IodmFyIGI9dS53b3Jkc1tfXSxxPWwtMTtxPj0wO3EtLSl7dmFyIEc9Yj4+cSYx''@;'; put 'put ''O2shPT1wWzBdJiYoaz10aGlzLnNxcihrKSksMCE9PUd8fDAhPT1MPyhMPDw9MSxMfD1HLCg0PT0rK3l8fDA9PT1fJiYwPT09cSkmJihrPXRoaXMubXVsKGsscFtMXSkseT0wLEw9MCkpOnk9MH1sPTI2fXJldHVybiBrfSxtZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHMpe3ZhciB1''@;'; put 'put ''PXMudW1vZCh0aGlzLm0pO3JldHVybiB1PT09cz91LmNsb25lKCk6dX0sbWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMpe3ZhciB1PXMuY2xvbmUoKTtyZXR1cm4gdS5yZWQ9bnVsbCx1fSxmLm1vbnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyBGZShzKX0sSShGZSxtZSksRmUu''@;'; put 'put ''cHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5pbW9kKHMudXNobG4odGhpcy5zaGlmdCkpfSxGZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocyl7dmFyIHU9dGhpcy5pbW9kKHMubXVsKHRoaXMucmludikpO3JldHVybiB1LnJlZD1udWxsLHV9LEZl''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMsdSl7aWYocy5pc1plcm8oKXx8dS5pc1plcm8oKSlyZXR1cm4gcy53b3Jkc1swXT0wLHMubGVuZ3RoPTEsczt2YXIgdj1zLmltdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwo''@;'; put 'put ''dGhpcy5tKSxfPXYuaXN1YihwKS5pdXNocm4odGhpcy5zaGlmdCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUucHJvdG90eXBlLm11bD1mdW5jdGlvbihzLHUp''@;'; put 'put ''e2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIG5ldyBmKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgdj1zLm11bCh1KSxwPXYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLF89di5pc3ViKHApLml1c2hybih0aGlz''@;'; put 'put ''LnNoaWZ0KSxrPV87cmV0dXJuIF8uY21wKHRoaXMubSk+PTA/az1fLmlzdWIodGhpcy5tKTpfLmNtcG4oMCk8MCYmKGs9Xy5pYWRkKHRoaXMubSkpLGsuX2ZvcmNlUmVkKHRoaXMpfSxGZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5pbW9kKHMuX2ludm1wKHRoaXMu''@;'; put 'put ''bSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh0ZT1kLm5tZCh0ZSksdGhpcyl9LDU1MTg4KHRlLGopeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5''@;'; put 'put ''Ky8iLFM9bmV3IFVpbnQ4QXJyYXkoMjU2KSxoPTA7aDw2NDtoKyspU1tkLmNoYXJDb2RlQXQoaCldPWg7ai5sPWZ1bmN0aW9uKG8pe3ZhciBmLEk9bmV3IFVpbnQ4QXJyYXkobyksVD1JLmxlbmd0aCxBPSIiO2ZvcihmPTA7ZjxUO2YrPTMpQSs9ZFtJW2ZdPj4yXSxBKz1kWygzJklbZl0pPDw0''@;'; put 'put ''fElbZisxXT4+NF0sQSs9ZFsoMTUmSVtmKzFdKTw8MnxJW2YrMl0+PjZdLEErPWRbNjMmSVtmKzJdXTtyZXR1cm4gVCUzPT0yP0E9QS5zdWJzdHJpbmcoMCxBLmxlbmd0aC0xKSsiPSI6VCUzPT0xJiYoQT1BLnN1YnN0cmluZygwLEEubGVuZ3RoLTIpKyI9PSIpLEF9LGouRD1mdW5jdGlvbihv''@;'; put 'put ''KXt2YXIgVCxNLE8sRCxFLEk9Ljc1Km8ubGVuZ3RoLGY9by5sZW5ndGgsQT0wOyI9Ij09PW9bby5sZW5ndGgtMV0mJihJLS0sIj0iPT09b1tvLmxlbmd0aC0yXSYmSS0tKTt2YXIgQj1uZXcgQXJyYXlCdWZmZXIoSSksRj1uZXcgVWludDhBcnJheShCKTtmb3IoVD0wO1Q8ZjtUKz00KU09U1tv''@;'; put 'put ''LmNoYXJDb2RlQXQoVCldLE89U1tvLmNoYXJDb2RlQXQoVCsxKV0sRD1TW28uY2hhckNvZGVBdChUKzIpXSxFPVNbby5jaGFyQ29kZUF0KFQrMyldLEZbQSsrXT1NPDwyfE8+PjQsRltBKytdPSgxNSZPKTw8NHxEPj4yLEZbQSsrXT0oMyZEKTw8Nnw2MyZFO3JldHVybiBCfX0oKX0sMTM5ODEo''@;'; put 'put ''dGUsail7InVzZSBzdHJpY3QiO2ouYnl0ZUxlbmd0aD1mdW5jdGlvbiBBKEYpe3ZhciBOPVQoRiksej1OWzFdO3JldHVybiAzKihOWzBdK3opLzQten0sai50b0J5dGVBcnJheT1mdW5jdGlvbiBPKEYpe3ZhciBOLG5lLEg9VChGKSx6PUhbMF0sWj1IWzFdLFU9bmV3IGgoZnVuY3Rpb24gTShG''@;'; put 'put ''LE4sSCl7cmV0dXJuIDMqKE4rSCkvNC1IfSgwLHosWikpLEs9MCxYPVo+MD96LTQ6ejtmb3IobmU9MDtuZTxYO25lKz00KU49U1tGLmNoYXJDb2RlQXQobmUpXTw8MTh8U1tGLmNoYXJDb2RlQXQobmUrMSldPDwxMnxTW0YuY2hhckNvZGVBdChuZSsyKV08PDZ8U1tGLmNoYXJDb2RlQXQobmUr''@;'; put 'put ''MyldLFVbSysrXT1OPj4xNiYyNTUsVVtLKytdPU4+PjgmMjU1LFVbSysrXT0yNTUmTjtyZXR1cm4gMj09PVomJihOPVNbRi5jaGFyQ29kZUF0KG5lKV08PDJ8U1tGLmNoYXJDb2RlQXQobmUrMSldPj40LFVbSysrXT0yNTUmTiksMT09PVomJihOPVNbRi5jaGFyQ29kZUF0KG5lKV08PDEwfFNb''@;'; put 'put ''Ri5jaGFyQ29kZUF0KG5lKzEpXTw8NHxTW0YuY2hhckNvZGVBdChuZSsyKV0+PjIsVVtLKytdPU4+PjgmMjU1LFVbSysrXT0yNTUmTiksVX0sai5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEIoRil7Zm9yKHZhciBOLEg9Ri5sZW5ndGgsej1IJTMsWj1bXSxVPTE2MzgzLEs9MCxYPUgtejtLPFg7''@;'; put 'put ''Sys9VSlaLnB1c2goRShGLEssSytVPlg/WDpLK1UpKTtyZXR1cm4gMT09PXo/Wi5wdXNoKGRbKE49RltILTFdKT4+Ml0rZFtOPDw0JjYzXSsiPT0iKToyPT09eiYmWi5wdXNoKGRbKE49KEZbSC0yXTw8OCkrRltILTFdKT4+MTBdK2RbTj4+NCY2M10rZFtOPDwyJjYzXSsiPSIpLFouam9pbigi''@;'; put 'put ''Iil9O2Zvcih2YXIgZD1bXSxTPVtdLGg9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsST0wO0k8NjQ7KytJKWRbSV09b1tJXSxTW28uY2hhckNv''@;'; put 'put ''ZGVBdChJKV09STtmdW5jdGlvbiBUKEYpe3ZhciBOPUYubGVuZ3RoO2lmKE4lND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBIPUYuaW5kZXhPZigiPSIpO3JldHVybi0xPT09SCYmKEg9TiksW0gsSD09PU4/''@;'; put 'put ''MDo0LUglNF19ZnVuY3Rpb24gRChGKXtyZXR1cm4gZFtGPj4xOCY2M10rZFtGPj4xMiY2M10rZFtGPj42JjYzXStkWzYzJkZdfWZ1bmN0aW9uIEUoRixOLEgpe2Zvcih2YXIgWj1bXSxVPU47VTxIO1UrPTMpWi5wdXNoKEQoKEZbVV08PDE2JjE2NzExNjgwKSsoRltVKzFdPDw4JjY1MjgwKSso''@;'; put 'put ''MjU1JkZbVSsyXSkpKTtyZXR1cm4gWi5qb2luKCIiKX1TWzQ1XT02MixTWzk1XT02M30sOTE3KHRlLGosZCl7IWZ1bmN0aW9uKFMsaCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8odixwKXtpZighdil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBJKHYs''@;'; put 'put ''cCl7di5zdXBlcl89cDt2YXIgXz1mdW5jdGlvbigpe307Xy5wcm90b3R5cGU9cC5wcm90b3R5cGUsdi5wcm90b3R5cGU9bmV3IF8sdi5wcm90b3R5cGUuY29uc3RydWN0b3I9dn1mdW5jdGlvbiBmKHYscCxfKXtpZihmLmlzQk4odikpcmV0dXJuIHY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29y''@;'; put 'put ''ZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKF89cCxwPTEwKSx0aGlzLl9pbml0KHZ8fDAscHx8MTAsX3x8ImJlIikpfXZhciBUOyJvYmplY3QiPT10eXBlb2YgUz9TLmV4cG9ydHM9ZjpoLkJOPWYsZi5CTj1mLGYu''@;'; put 'put ''d29yZFNpemU9MjY7dHJ5e1Q9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmQoNDc3OTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gQSh2LHApe3ZhciBfPXYuY2hhckNvZGVBdChwKTtyZXR1cm4gXz49NDgmJl88PTU3P18tNDg6Xz49''@;'; put 'put ''NjUmJl88PTcwP18tNTU6Xz49OTcmJl88PTEwMj9fLTg3OnZvaWQgbyghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit2KX1mdW5jdGlvbiBNKHYscCxfKXt2YXIgaz1BKHYsXyk7cmV0dXJuIF8tMT49cCYmKGt8PUEodixfLTEpPDw0KSxrfWZ1bmN0aW9uIE8odixwLF8sayl7Zm9yKHZhciBM''@;'; put 'put ''PTAseT0wLGw9TWF0aC5taW4odi5sZW5ndGgsXyksYj1wO2I8bDtiKyspe3ZhciBxPXYuY2hhckNvZGVBdChiKS00ODtMKj1rLHk9cT49NDk/cS00OSsxMDpxPj0xNz9xLTE3KzEwOnEsbyhxPj0wJiZ5PGssIkludmFsaWQgY2hhcmFjdGVyIiksTCs9eX1yZXR1cm4gTH1mdW5jdGlvbiBEKHYs''@;'; put 'put ''cCl7di53b3Jkcz1wLndvcmRzLHYubGVuZ3RoPXAubGVuZ3RoLHYubmVnYXRpdmU9cC5uZWdhdGl2ZSx2LnJlZD1wLnJlZH1pZihmLmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiBmfHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRT''@;'; put 'put ''aXplPT09Zi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sZi5tYXg9ZnVuY3Rpb24ocCxfKXtyZXR1cm4gcC5jbXAoXyk+MD9wOl99LGYubWluPWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHAuY21wKF8pPDA/cDpffSxmLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLF8sayl7aWYo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsXyxrKTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLF8sayk7ImhleCI9PT1fJiYoXz0xNiksbyhfPT09KDB8XykmJl8+PTImJl88PTM2KTt2YXIgTD0wOyItIj09PShwPXAu''@;'; put 'put ''dG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTCsrLHRoaXMubmVnYXRpdmU9MSksTDxwLmxlbmd0aCYmKDE2PT09Xz90aGlzLl9wYXJzZUhleChwLEwsayk6KHRoaXMuX3BhcnNlQmFzZShwLF8sTCksImxlIj09PWsmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxf''@;'; put 'put ''LGspKSl9LGYucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsXyxrKXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2''@;'; put 'put ''MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihvKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1rJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCks''@;'; put 'put ''XyxrKX0sZi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLF8sayl7aWYobygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0''@;'; put 'put ''aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT0wO3ZhciB5LGwsYj0wO2lmKCJiZSI9PT1rKWZvcihMPXAubGVuZ3RoLTEseT0wO0w+PTA7TC09Myl0aGlzLndvcmRzW3ldfD0obD1wW0xdfHBbTC0xXTw8''@;'; put 'put ''OHxwW0wtMl08PDE2KTw8YiY2NzEwODg2Myx0aGlzLndvcmRzW3krMV09bD4+PjI2LWImNjcxMDg4NjMsKGIrPTI0KT49MjYmJihiLT0yNix5KyspO2Vsc2UgaWYoImxlIj09PWspZm9yKEw9MCx5PTA7TDxwLmxlbmd0aDtMKz0zKXRoaXMud29yZHNbeV18PShsPXBbTF18cFtMKzFdPDw4fHBb''@;'; put 'put ''TCsyXTw8MTYpPDxiJjY3MTA4ODYzLHRoaXMud29yZHNbeSsxXT1sPj4+MjYtYiY2NzEwODg2MywoYis9MjQpPj0yNiYmKGItPTI2LHkrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLF8sayl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChw''@;'; put 'put ''Lmxlbmd0aC1fKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT0wO3ZhciBiLHk9MCxsPTA7aWYoImJlIj09PWspZm9yKEw9cC5sZW5ndGgtMTtMPj1fO0wtPTIpYj1NKHAsXyxMKTw8eSx0aGlz''@;'; put 'put ''LndvcmRzW2xdfD02NzEwODg2MyZiLHk+PTE4Pyh5LT0xOCx0aGlzLndvcmRzW2wrPTFdfD1iPj4+MjYpOnkrPTg7ZWxzZSBmb3IoTD0ocC5sZW5ndGgtXyklMj09MD9fKzE6XztMPHAubGVuZ3RoO0wrPTIpYj1NKHAsXyxMKTw8eSx0aGlzLndvcmRzW2xdfD02NzEwODg2MyZiLHk+PTE4Pyh5''@;'; put 'put ''LT0xOCx0aGlzLndvcmRzW2wrPTFdfD1iPj4+MjYpOnkrPTg7dGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLF8sayl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEw9MCx5PTE7eTw9NjcxMDg4NjM7eSo9XylMKys7TC0tLHk9eS9f''@;'; put 'put ''fDA7Zm9yKHZhciBsPXAubGVuZ3RoLWssYj1sJUwscT1NYXRoLm1pbihsLGwtYikrayxHPTAsUT1rO1E8cTtRKz1MKUc9TyhwLFEsUStMLF8pLHRoaXMuaW11bG4oeSksdGhpcy53b3Jkc1swXStHPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPUc6dGhpcy5faWFkZG4oRyk7aWYoMCE9PWIpe3Zh''@;'; put 'put ''ciBwZT0xO2ZvcihHPU8ocCxRLHAubGVuZ3RoLF8pLFE9MDtRPGI7USsrKXBlKj1fO3RoaXMuaW11bG4ocGUpLHRoaXMud29yZHNbMF0rRzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1HOnRoaXMuX2lhZGRuKEcpfXRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgXz0wO188dGhpcy5sZW5ndGg7XysrKXAud29yZHNbX109dGhpcy53b3Jkc1tfXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LGYucHJvdG90eXBlLl9tb3Zl''@;'; put 'put ''PWZ1bmN0aW9uKHApe0QocCx0aGlzKX0sZi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LGYucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVu''@;'; put 'put ''Z3RoKytdPTA7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGYucHJvdG90eXBlLl9ub3JtU2lnbj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e2YucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGls''@;'; put 'put ''Lmluc3BlY3QuY3VzdG9tIildPUV9Y2F0Y2h7Zi5wcm90b3R5cGUuaW5zcGVjdD1FfWVsc2UgZi5wcm90b3R5cGUuaW5zcGVjdD1FO2Z1bmN0aW9uIEUoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgQj1bIiIsIjAiLCIwMCIs''@;'; put 'put ''IjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxGPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLE49WzAsMCwzMzU1NDQzMiw0MzA0''@;'; put 'put ''NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2''@;'; put 'put ''NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWih2LHAsXyl7Xy5uZWdhdGl2ZT1wLm5lZ2F0aXZlXnYubmVn''@;'; put 'put ''YXRpdmU7dmFyIGs9di5sZW5ndGgrcC5sZW5ndGh8MDtfLmxlbmd0aD1rLGs9ay0xfDA7dmFyIEw9MHx2LndvcmRzWzBdLHk9MHxwLndvcmRzWzBdLGw9TCp5LHE9bC82NzEwODg2NHwwO18ud29yZHNbMF09NjcxMDg4NjMmbDtmb3IodmFyIEc9MTtHPGs7RysrKXtmb3IodmFyIFE9cT4+PjI2''@;'; put 'put ''LHBlPTY3MTA4ODYzJnEsUGU9TWF0aC5taW4oRyxwLmxlbmd0aC0xKSxaZT1NYXRoLm1heCgwLEctdi5sZW5ndGgrMSk7WmU8PVBlO1plKyspUSs9KGw9KEw9MHx2LndvcmRzW0ctWmV8MF0pKih5PTB8cC53b3Jkc1taZV0pK3BlKS82NzEwODg2NHwwLHBlPTY3MTA4ODYzJmw7Xy53b3Jkc1tH''@;'; put 'put ''XT0wfHBlLHE9MHxRfXJldHVybiAwIT09cT9fLndvcmRzW0ddPTB8cTpfLmxlbmd0aC0tLF8uX3N0cmlwKCl9Zi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxfKXt2YXIgaztpZihfPTB8X3x8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXtrPSIiO2Zvcih2YXIgTD0wLHk9MCxs''@;'; put 'put ''PTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBiPXRoaXMud29yZHNbbF0scT0oMTY3NzcyMTUmKGI8PEx8eSkpLnRvU3RyaW5nKDE2KTt5PWI+Pj4yNC1MJjE2Nzc3MjE1LChMKz0yKT49MjYmJihMLT0yNixsLS0pLGs9MCE9PXl8fGwhPT10aGlzLmxlbmd0aC0xP0JbNi1xLmxlbmd0aF0rcStr''@;'; put 'put ''OnEra31mb3IoMCE9PXkmJihrPXkudG9TdHJpbmcoMTYpK2spO2subGVuZ3RoJV8hPTA7KWs9IjAiK2s7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoaz0iLSIrayksa31pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgRz1GW3BdLFE9TltwXTtrPSIiO3ZhciBwZT10aGlzLmNsb25l''@;'; put 'put ''KCk7Zm9yKHBlLm5lZ2F0aXZlPTA7IXBlLmlzWmVybygpOyl7dmFyIFBlPXBlLm1vZHJuKFEpLnRvU3RyaW5nKHApO2s9KHBlPXBlLmlkaXZuKFEpKS5pc1plcm8oKT9QZStrOkJbRy1QZS5sZW5ndGhdK1BlK2t9Zm9yKHRoaXMuaXNaZXJvKCkmJihrPSIwIitrKTtrLmxlbmd0aCVfIT0wOylr''@;'; put 'put ''PSIwIitrO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKGs9Ii0iK2spLGt9byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxmLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02''@;'; put 'put ''NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIp''@;'; put 'put ''LDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LGYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxUJiYoZi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxfKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShULHAsXyl9KSxmLnByb3RvdHlw''@;'; put 'put ''ZS50b0FycmF5PWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxfKX0sZi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxfLGspe3RoaXMuX3N0cmlwKCk7dmFyIEw9dGhpcy5ieXRlTGVuZ3RoKCkseT1rfHxNYXRoLm1heCgxLEwpO28oTDw9eSwi''@;'; put 'put ''Ynl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG8oeT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbD1mdW5jdGlvbihwLF8pe3JldHVybiBwLmFsbG9jVW5zYWZlP3AuYWxsb2NVbnNhZmUoXyk6bmV3IHAoXyl9KHAseSk7cmV0dXJuIHRoaXNbIl90''@;'; put 'put ''b0FycmF5TGlrZSIrKCJsZSI9PT1fPyJMRSI6IkJFIildKGwsTCksbH0sZi5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24ocCxfKXtmb3IodmFyIGs9MCxMPTAseT0wLGw9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIGI9dGhpcy53b3Jkc1t5XTw8bHxMO3BbaysrXT0yNTUmYixr''@;'; put 'put ''PHAubGVuZ3RoJiYocFtrKytdPWI+PjgmMjU1KSxrPHAubGVuZ3RoJiYocFtrKytdPWI+PjE2JjI1NSksNj09PWw/KGs8cC5sZW5ndGgmJihwW2srK109Yj4+MjQmMjU1KSxMPTAsbD0wKTooTD1iPj4+MjQsbCs9Mil9aWYoazxwLmxlbmd0aClmb3IocFtrKytdPUw7azxwLmxlbmd0aDspcFtr''@;'; put 'put ''KytdPTB9LGYucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKHAsXyl7Zm9yKHZhciBrPXAubGVuZ3RoLTEsTD0wLHk9MCxsPTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciBiPXRoaXMud29yZHNbeV08PGx8TDtwW2stLV09MjU1JmIsaz49MCYmKHBbay0tXT1iPj44JjI1NSksaz49''@;'; put 'put ''MCYmKHBbay0tXT1iPj4xNiYyNTUpLDY9PT1sPyhrPj0wJiYocFtrLS1dPWI+PjI0JjI1NSksTD0wLGw9MCk6KEw9Yj4+PjI0LGwrPTIpfWlmKGs+PTApZm9yKHBbay0tXT1MO2s+PTA7KXBbay0tXT0wfSxmLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBfPXAsaz0wO3JldHVybiBfPj00MDk2JiYoays9MTMsXz4+Pj0xMyksXz49NjQmJihrKz03LF8+Pj49NyksXz49OCYmKGsrPTQsXz4+Pj00KSxfPj0yJiYoays9MixfPj4+PTIpLGsrX30sZi5wcm90b3R5cGUuX3plcm9CaXRz''@;'; put 'put ''PWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgXz1wLGs9MDtyZXR1cm4hKDgxOTEmXykmJihrKz0xMyxfPj4+PTEzKSwhKDEyNyZfKSYmKGsrPTcsXz4+Pj03KSwhKDE1Jl8pJiYoays9NCxfPj4+PTQpLCEoMyZfKSYmKGsrPTIsXz4+Pj0yKSwhKDEmXykmJmsrKyxrfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgXz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStffSxmLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7''@;'; put 'put ''Zm9yKHZhciBwPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgaz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW19dKTtpZihwKz1rLDI2IT09aylicmVha31yZXR1cm4gcH0sZi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5n''@;'; put 'put ''dGgoKS84KX0sZi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sZi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90''@;'; put 'put ''aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sZi5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxmLnByb3RvdHlwZS5p''@;'; put 'put ''bmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxmLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIF89MDtfPHAubGVu''@;'; put 'put ''Z3RoO18rKyl0aGlzLndvcmRzW19dPXRoaXMud29yZHNbX118cC53b3Jkc1tfXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSxmLnByb3RvdHlwZS5vcj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUo''@;'; put 'put ''KS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgXztfPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIGs9MDtrPF8ubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPXRoaXMud29yZHNba10mcC53b3Jkc1trXTtyZXR1cm4gdGhpcy5sZW5ndGg9''@;'; put 'put ''Xy5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LGYucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LGYucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LGYucHJvdG90eXBlLml1eG9yPWZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciBfLGs7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KF89dGhpcyxrPXApOihfPXAsaz10aGlzKTtmb3IodmFyIEw9MDtMPGsubGVuZ3RoO0wrKyl0aGlzLndvcmRzW0xdPV8ud29yZHNbTF1eay53b3Jkc1tMXTtpZih0aGlzIT09Xylmb3IoO0w8Xy5sZW5ndGg7TCsrKXRoaXMud29y''@;'; put 'put ''ZHNbTF09Xy53b3Jkc1tMXTtyZXR1cm4gdGhpcy5sZW5ndGg9Xy5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LGYucHJvdG90eXBlLnhvcj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LGYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCku''@;'; put 'put ''aXV4b3IodGhpcyl9LGYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe28oIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgXz0wfE1hdGguY2VpbChwLzI2KSxrPXAlMjY7dGhpcy5fZXhwYW5kKF8pLGs+MCYmXy0tO2Zvcih2YXIgTD0wO0w8XztMKyspdGhpcy53b3Jkc1tMXT02NzEw''@;'; put 'put ''ODg2MyZ+dGhpcy53b3Jkc1tMXTtyZXR1cm4gaz4wJiYodGhpcy53b3Jkc1tMXT1+dGhpcy53b3Jkc1tMXSY2NzEwODg2Mz4+MjYtayksdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSxmLnByb3RvdHlwZS5z''@;'; put 'put ''ZXRuPWZ1bmN0aW9uKHAsXyl7bygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBrPXAvMjZ8MCxMPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChrKzEpLHRoaXMud29yZHNba109Xz90aGlzLndvcmRzW2tdfDE8PEw6dGhpcy53b3Jkc1trXSZ+KDE8PEwpLHRoaXMuX3N0cmlwKCl9LGYu''@;'; put 'put ''cHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIF8sayxMO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLF89dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxfPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsXy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oaz10aGlzLEw9cCk6KGs9cCxMPXRoaXMpO2Zvcih2YXIgeT0wLGw9MDtsPEwubGVuZ3RoO2wrKyl0aGlzLndv''@;'; put 'put ''cmRzW2xdPTY3MTA4ODYzJihfPSgwfGsud29yZHNbbF0pKygwfEwud29yZHNbbF0pK3kpLHk9Xz4+PjI2O2Zvcig7MCE9PXkmJmw8ay5sZW5ndGg7bCsrKXRoaXMud29yZHNbbF09NjcxMDg4NjMmKF89KDB8ay53b3Jkc1tsXSkreSkseT1fPj4+MjY7aWYodGhpcy5sZW5ndGg9ay5sZW5ndGgs''@;'; put 'put ''MCE9PXkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09eSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoayE9PXRoaXMpZm9yKDtsPGsubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPWsud29yZHNbbF07cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgXztyZXR1cm4gMCE9''@;'; put 'put ''PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsXz10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLF8pOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLF89cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLF8pOnRoaXMu''@;'; put 'put ''bGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSxmLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIF89dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsXy5fbm9y''@;'; put 'put ''bVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTCx5LGs9dGhpcy5jbXAocCk7aWYoMD09PWspcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0x''@;'; put 'put ''LHRoaXMud29yZHNbMF09MCx0aGlzO2s+MD8oTD10aGlzLHk9cCk6KEw9cCx5PXRoaXMpO2Zvcih2YXIgbD0wLGI9MDtiPHkubGVuZ3RoO2IrKylsPShfPSgwfEwud29yZHNbYl0pLSgwfHkud29yZHNbYl0pK2wpPj4yNix0aGlzLndvcmRzW2JdPTY3MTA4ODYzJl87Zm9yKDswIT09bCYmYjxM''@;'; put 'put ''Lmxlbmd0aDtiKyspbD0oXz0oMHxMLndvcmRzW2JdKStsKT4+MjYsdGhpcy53b3Jkc1tiXT02NzEwODg2MyZfO2lmKDA9PT1sJiZiPEwubGVuZ3RoJiZMIT09dGhpcylmb3IoO2I8TC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09TC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5t''@;'; put 'put ''YXgodGhpcy5sZW5ndGgsYiksTCE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBVPWZ1bmN0aW9uKHAsXyxrKXt2YXIgcSxHLFEsTD1wLndvcmRzLHk9Xy53''@;'; put 'put ''b3JkcyxsPWsud29yZHMsYj0wLHBlPTB8TFswXSxQZT04MTkxJnBlLFplPXBlPj4+MTMscWU9MHxMWzFdLHZlPTgxOTEmcWUsdWU9cWU+Pj4xMyx6ZT0wfExbMl0sT2U9ODE5MSZ6ZSxDZT16ZT4+PjEzLGtlPTB8TFszXSx4ZT04MTkxJmtlLE1lPWtlPj4+MTMsSWU9MHxMWzRdLGJlPTgxOTEm''@;'; put 'put ''SWUsd2U9SWU+Pj4xMyxwdD0wfExbNV0sS2U9ODE5MSZwdCxZZT1wdD4+PjEzLHF0PTB8TFs2XSxodD04MTkxJnF0LHZ0PXF0Pj4+MTMsWXQ9MHxMWzddLHR0PTgxOTEmWXQsVWU9WXQ+Pj4xMywkZT0wfExbOF0sTGU9ODE5MSYkZSxudD0kZT4+PjEzLHJuPTB8TFs5XSx4dD04MTkxJnJuLFR0''@;'; put 'put ''PXJuPj4+MTMseW49MHx5WzBdLFh0PTgxOTEmeW4sUXQ9eW4+Pj4xMyxYcj0wfHlbMV0sc249ODE5MSZYcixpdD1Ycj4+PjEzLENyPTB8eVsyXSxMdD04MTkxJkNyLHd0PUNyPj4+MTMsUm49MHx5WzNdLFFlPTgxOTEmUm4sUHQ9Um4+Pj4xMyxRcj0wfHlbNF0sTmU9ODE5MSZRcix5dD1Rcj4+''@;'; put 'put ''PjEzLHJyPTB8eVs1XSxhdD04MTkxJnJyLF90PXJyPj4+MTMsd249MHx5WzZdLCR0PTgxOTEmd24sSHQ9d24+Pj4xMyxzaT0wfHlbN10sbm49ODE5MSZzaSxsbj1zaT4+PjEzLGtpPTB8eVs4XSxhbj04MTkxJmtpLEd0PWtpPj4+MTMsZWE9MHx5WzldLG1pPTgxOTEmZWEsZnI9ZWE+Pj4xMztr''@;'; put 'put ''Lm5lZ2F0aXZlPXAubmVnYXRpdmVeXy5uZWdhdGl2ZSxrLmxlbmd0aD0xOTt2YXIgJGk9KGIrKHE9TWF0aC5pbXVsKFBlLFh0KSl8MCkrKCg4MTkxJihHPShHPU1hdGguaW11bChQZSxRdCkpK01hdGguaW11bChaZSxYdCl8MCkpPDwxMyl8MDtiPSgoUT1NYXRoLmltdWwoWmUsUXQpKSsoRz4+''@;'; put 'put ''PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMscT1NYXRoLmltdWwodmUsWHQpLEc9KEc9TWF0aC5pbXVsKHZlLFF0KSkrTWF0aC5pbXVsKHVlLFh0KXwwLFE9TWF0aC5pbXVsKHVlLFF0KTt2YXIgS2k9KGIrKHE9cStNYXRoLmltdWwoUGUsc24pfDApfDApKygoODE5MSYoRz0oRz1H''@;'; put 'put ''K01hdGguaW11bChQZSxpdCl8MCkrTWF0aC5pbXVsKFplLHNuKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLGl0KXwwKSsoRz4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMscT1NYXRoLmltdWwoT2UsWHQpLEc9KEc9TWF0aC5pbXVsKE9lLFF0KSkrTWF0aC5pbXVs''@;'; put 'put ''KENlLFh0KXwwLFE9TWF0aC5pbXVsKENlLFF0KSxxPXErTWF0aC5pbXVsKHZlLHNuKXwwLEc9KEc9RytNYXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1ZSxzbil8MCxRPVErTWF0aC5pbXVsKHVlLGl0KXwwO3ZhciBWaT0oYisocT1xK01hdGguaW11bChQZSxMdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihHPShHPUcrTWF0aC5pbXVsKFBlLHd0KXwwKStNYXRoLmltdWwoWmUsTHQpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoWmUsd3QpfDApKyhHPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxxPU1hdGguaW11bCh4ZSxYdCksRz0oRz1NYXRoLmltdWwoeGUsUXQpKStN''@;'; put 'put ''YXRoLmltdWwoTWUsWHQpfDAsUT1NYXRoLmltdWwoTWUsUXQpLHE9cStNYXRoLmltdWwoT2Usc24pfDAsRz0oRz1HK01hdGguaW11bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLFE9UStNYXRoLmltdWwoQ2UsaXQpfDAscT1xK01hdGguaW11bCh2ZSxMdCl8MCxHPShHPUcrTWF0aC5p''@;'; put 'put ''bXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAsUT1RK01hdGguaW11bCh1ZSx3dCl8MDt2YXIgcXI9KGIrKHE9cStNYXRoLmltdWwoUGUsUWUpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxQdCl8MCkrTWF0aC5pbXVsKFplLFFlKXwwKSk8PDEzKXwwO2I9KChRPVEr''@;'; put 'put ''TWF0aC5pbXVsKFplLFB0KXwwKSsoRz4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMscT1NYXRoLmltdWwoYmUsWHQpLEc9KEc9TWF0aC5pbXVsKGJlLFF0KSkrTWF0aC5pbXVsKHdlLFh0KXwwLFE9TWF0aC5pbXVsKHdlLFF0KSxxPXErTWF0aC5pbXVsKHhlLHNuKXwwLEc9KEc9''@;'; put 'put ''RytNYXRoLmltdWwoeGUsaXQpfDApK01hdGguaW11bChNZSxzbil8MCxRPVErTWF0aC5pbXVsKE1lLGl0KXwwLHE9cStNYXRoLmltdWwoT2UsTHQpfDAsRz0oRz1HK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKENlLEx0KXwwLFE9UStNYXRoLmltdWwoQ2Usd3QpfDAscT1xK01hdGgu''@;'; put 'put ''aW11bCh2ZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAsUT1RK01hdGguaW11bCh1ZSxQdCl8MDt2YXIgdWE9KGIrKHE9cStNYXRoLmltdWwoUGUsTmUpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSx5dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFplLE5lKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLHl0KXwwKSsoRz4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMscT1NYXRoLmltdWwoS2UsWHQpLEc9KEc9TWF0aC5pbXVsKEtlLFF0KSkrTWF0aC5pbXVsKFllLFh0KXwwLFE9TWF0aC5pbXVsKFllLFF0KSxx''@;'; put 'put ''PXErTWF0aC5pbXVsKGJlLHNuKXwwLEc9KEc9RytNYXRoLmltdWwoYmUsaXQpfDApK01hdGguaW11bCh3ZSxzbil8MCxRPVErTWF0aC5pbXVsKHdlLGl0KXwwLHE9cStNYXRoLmltdWwoeGUsTHQpfDAsRz0oRz1HK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1lLEx0KXwwLFE9UStN''@;'; put 'put ''YXRoLmltdWwoTWUsd3QpfDAscT1xK01hdGguaW11bChPZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2UsUWUpfDAsUT1RK01hdGguaW11bChDZSxQdCl8MCxxPXErTWF0aC5pbXVsKHZlLE5lKXwwLEc9KEc9RytNYXRoLmltdWwodmUseXQpfDApK01hdGgu''@;'; put 'put ''aW11bCh1ZSxOZSl8MCxRPVErTWF0aC5pbXVsKHVlLHl0KXwwO3ZhciBGaT0oYisocT1xK01hdGguaW11bChQZSxhdCl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKFBlLF90KXwwKStNYXRoLmltdWwoWmUsYXQpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoWmUsX3QpfDAp''@;'; put 'put ''KyhHPj4+MTMpfDApKyhGaT4+PjI2KXwwLEZpJj02NzEwODg2MyxxPU1hdGguaW11bChodCxYdCksRz0oRz1NYXRoLmltdWwoaHQsUXQpKStNYXRoLmltdWwodnQsWHQpfDAsUT1NYXRoLmltdWwodnQsUXQpLHE9cStNYXRoLmltdWwoS2Usc24pfDAsRz0oRz1HK01hdGguaW11bChLZSxpdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFllLHNuKXwwLFE9UStNYXRoLmltdWwoWWUsaXQpfDAscT1xK01hdGguaW11bChiZSxMdCl8MCxHPShHPUcrTWF0aC5pbXVsKGJlLHd0KXwwKStNYXRoLmltdWwod2UsTHQpfDAsUT1RK01hdGguaW11bCh3ZSx3dCl8MCxxPXErTWF0aC5pbXVsKHhlLFFlKXwwLEc9KEc9''@;'; put 'put ''RytNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11bChNZSxRZSl8MCxRPVErTWF0aC5pbXVsKE1lLFB0KXwwLHE9cStNYXRoLmltdWwoT2UsTmUpfDAsRz0oRz1HK01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLFE9UStNYXRoLmltdWwoQ2UseXQpfDAscT1xK01hdGgu''@;'; put 'put ''aW11bCh2ZSxhdCl8MCxHPShHPUcrTWF0aC5pbXVsKHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsUT1RK01hdGguaW11bCh1ZSxfdCl8MDt2YXIgUmE9KGIrKHE9cStNYXRoLmltdWwoUGUsJHQpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxIdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFplLCR0KXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLEh0KXwwKSsoRz4+PjEzKXwwKSsoUmE+Pj4yNil8MCxSYSY9NjcxMDg4NjMscT1NYXRoLmltdWwodHQsWHQpLEc9KEc9TWF0aC5pbXVsKHR0LFF0KSkrTWF0aC5pbXVsKFVlLFh0KXwwLFE9TWF0aC5pbXVsKFVlLFF0KSxx''@;'; put 'put ''PXErTWF0aC5pbXVsKGh0LHNuKXwwLEc9KEc9RytNYXRoLmltdWwoaHQsaXQpfDApK01hdGguaW11bCh2dCxzbil8MCxRPVErTWF0aC5pbXVsKHZ0LGl0KXwwLHE9cStNYXRoLmltdWwoS2UsTHQpfDAsRz0oRz1HK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLEx0KXwwLFE9UStN''@;'; put 'put ''YXRoLmltdWwoWWUsd3QpfDAscT1xK01hdGguaW11bChiZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKGJlLFB0KXwwKStNYXRoLmltdWwod2UsUWUpfDAsUT1RK01hdGguaW11bCh3ZSxQdCl8MCxxPXErTWF0aC5pbXVsKHhlLE5lKXwwLEc9KEc9RytNYXRoLmltdWwoeGUseXQpfDApK01hdGgu''@;'; put 'put ''aW11bChNZSxOZSl8MCxRPVErTWF0aC5pbXVsKE1lLHl0KXwwLHE9cStNYXRoLmltdWwoT2UsYXQpfDAsRz0oRz1HK01hdGguaW11bChPZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLFE9UStNYXRoLmltdWwoQ2UsX3QpfDAscT1xK01hdGguaW11bCh2ZSwkdCl8MCxHPShHPUcrTWF0aC5p''@;'; put 'put ''bXVsKHZlLEh0KXwwKStNYXRoLmltdWwodWUsJHQpfDAsUT1RK01hdGguaW11bCh1ZSxIdCl8MDt2YXIgb2k9KGIrKHE9cStNYXRoLmltdWwoUGUsbm4pfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bChQZSxsbil8MCkrTWF0aC5pbXVsKFplLG5uKXwwKSk8PDEzKXwwO2I9KChRPVEr''@;'; put 'put ''TWF0aC5pbXVsKFplLGxuKXwwKSsoRz4+PjEzKXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMscT1NYXRoLmltdWwoTGUsWHQpLEc9KEc9TWF0aC5pbXVsKExlLFF0KSkrTWF0aC5pbXVsKG50LFh0KXwwLFE9TWF0aC5pbXVsKG50LFF0KSxxPXErTWF0aC5pbXVsKHR0LHNuKXwwLEc9KEc9''@;'; put 'put ''RytNYXRoLmltdWwodHQsaXQpfDApK01hdGguaW11bChVZSxzbil8MCxRPVErTWF0aC5pbXVsKFVlLGl0KXwwLHE9cStNYXRoLmltdWwoaHQsTHQpfDAsRz0oRz1HK01hdGguaW11bChodCx3dCl8MCkrTWF0aC5pbXVsKHZ0LEx0KXwwLFE9UStNYXRoLmltdWwodnQsd3QpfDAscT1xK01hdGgu''@;'; put 'put ''aW11bChLZSxRZSl8MCxHPShHPUcrTWF0aC5pbXVsKEtlLFB0KXwwKStNYXRoLmltdWwoWWUsUWUpfDAsUT1RK01hdGguaW11bChZZSxQdCl8MCxxPXErTWF0aC5pbXVsKGJlLE5lKXwwLEc9KEc9RytNYXRoLmltdWwoYmUseXQpfDApK01hdGguaW11bCh3ZSxOZSl8MCxRPVErTWF0aC5pbXVs''@;'; put 'put ''KHdlLHl0KXwwLHE9cStNYXRoLmltdWwoeGUsYXQpfDAsRz0oRz1HK01hdGguaW11bCh4ZSxfdCl8MCkrTWF0aC5pbXVsKE1lLGF0KXwwLFE9UStNYXRoLmltdWwoTWUsX3QpfDAscT1xK01hdGguaW11bChPZSwkdCl8MCxHPShHPUcrTWF0aC5pbXVsKE9lLEh0KXwwKStNYXRoLmltdWwoQ2Us''@;'; put 'put ''JHQpfDAsUT1RK01hdGguaW11bChDZSxIdCl8MCxxPXErTWF0aC5pbXVsKHZlLG5uKXwwLEc9KEc9RytNYXRoLmltdWwodmUsbG4pfDApK01hdGguaW11bCh1ZSxubil8MCxRPVErTWF0aC5pbXVsKHVlLGxuKXwwO3ZhciBVaT0oYisocT1xK01hdGguaW11bChQZSxhbil8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihHPShHPUcrTWF0aC5pbXVsKFBlLEd0KXwwKStNYXRoLmltdWwoWmUsYW4pfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoWmUsR3QpfDApKyhHPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCxYdCksRz0oRz1NYXRoLmltdWwoeHQsUXQpKStN''@;'; put 'put ''YXRoLmltdWwoVHQsWHQpfDAsUT1NYXRoLmltdWwoVHQsUXQpLHE9cStNYXRoLmltdWwoTGUsc24pfDAsRz0oRz1HK01hdGguaW11bChMZSxpdCl8MCkrTWF0aC5pbXVsKG50LHNuKXwwLFE9UStNYXRoLmltdWwobnQsaXQpfDAscT1xK01hdGguaW11bCh0dCxMdCl8MCxHPShHPUcrTWF0aC5p''@;'; put 'put ''bXVsKHR0LHd0KXwwKStNYXRoLmltdWwoVWUsTHQpfDAsUT1RK01hdGguaW11bChVZSx3dCl8MCxxPXErTWF0aC5pbXVsKGh0LFFlKXwwLEc9KEc9RytNYXRoLmltdWwoaHQsUHQpfDApK01hdGguaW11bCh2dCxRZSl8MCxRPVErTWF0aC5pbXVsKHZ0LFB0KXwwLHE9cStNYXRoLmltdWwoS2Us''@;'; put 'put ''TmUpfDAsRz0oRz1HK01hdGguaW11bChLZSx5dCl8MCkrTWF0aC5pbXVsKFllLE5lKXwwLFE9UStNYXRoLmltdWwoWWUseXQpfDAscT1xK01hdGguaW11bChiZSxhdCl8MCxHPShHPUcrTWF0aC5pbXVsKGJlLF90KXwwKStNYXRoLmltdWwod2UsYXQpfDAsUT1RK01hdGguaW11bCh3ZSxfdCl8''@;'; put 'put ''MCxxPXErTWF0aC5pbXVsKHhlLCR0KXwwLEc9KEc9RytNYXRoLmltdWwoeGUsSHQpfDApK01hdGguaW11bChNZSwkdCl8MCxRPVErTWF0aC5pbXVsKE1lLEh0KXwwLHE9cStNYXRoLmltdWwoT2Usbm4pfDAsRz0oRz1HK01hdGguaW11bChPZSxsbil8MCkrTWF0aC5pbXVsKENlLG5uKXwwLFE9''@;'; put 'put ''UStNYXRoLmltdWwoQ2UsbG4pfDAscT1xK01hdGguaW11bCh2ZSxhbil8MCxHPShHPUcrTWF0aC5pbXVsKHZlLEd0KXwwKStNYXRoLmltdWwodWUsYW4pfDAsUT1RK01hdGguaW11bCh1ZSxHdCl8MDt2YXIgVmE9KGIrKHE9cStNYXRoLmltdWwoUGUsbWkpfDApfDApKygoODE5MSYoRz0oRz1H''@;'; put 'put ''K01hdGguaW11bChQZSxmcil8MCkrTWF0aC5pbXVsKFplLG1pKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKFplLGZyKXwwKSsoRz4+PjEzKXwwKSsoVmE+Pj4yNil8MCxWYSY9NjcxMDg4NjMscT1NYXRoLmltdWwoeHQsc24pLEc9KEc9TWF0aC5pbXVsKHh0LGl0KSkrTWF0aC5pbXVs''@;'; put 'put ''KFR0LHNuKXwwLFE9TWF0aC5pbXVsKFR0LGl0KSxxPXErTWF0aC5pbXVsKExlLEx0KXwwLEc9KEc9RytNYXRoLmltdWwoTGUsd3QpfDApK01hdGguaW11bChudCxMdCl8MCxRPVErTWF0aC5pbXVsKG50LHd0KXwwLHE9cStNYXRoLmltdWwodHQsUWUpfDAsRz0oRz1HK01hdGguaW11bCh0dCxQ''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFVlLFFlKXwwLFE9UStNYXRoLmltdWwoVWUsUHQpfDAscT1xK01hdGguaW11bChodCxOZSl8MCxHPShHPUcrTWF0aC5pbXVsKGh0LHl0KXwwKStNYXRoLmltdWwodnQsTmUpfDAsUT1RK01hdGguaW11bCh2dCx5dCl8MCxxPXErTWF0aC5pbXVsKEtlLGF0KXwwLEc9''@;'; put 'put ''KEc9RytNYXRoLmltdWwoS2UsX3QpfDApK01hdGguaW11bChZZSxhdCl8MCxRPVErTWF0aC5pbXVsKFllLF90KXwwLHE9cStNYXRoLmltdWwoYmUsJHQpfDAsRz0oRz1HK01hdGguaW11bChiZSxIdCl8MCkrTWF0aC5pbXVsKHdlLCR0KXwwLFE9UStNYXRoLmltdWwod2UsSHQpfDAscT1xK01h''@;'; put 'put ''dGguaW11bCh4ZSxubil8MCxHPShHPUcrTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoTWUsbm4pfDAsUT1RK01hdGguaW11bChNZSxsbil8MCxxPXErTWF0aC5pbXVsKE9lLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChDZSxhbil8MCxRPVErTWF0aC5p''@;'; put 'put ''bXVsKENlLEd0KXwwO3ZhciB1cj0oYisocT1xK01hdGguaW11bCh2ZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKHZlLGZyKXwwKStNYXRoLmltdWwodWUsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwodWUsZnIpfDApKyhHPj4+MTMpfDApKyh1cj4+PjI2KXww''@;'; put 'put ''LHVyJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCxMdCksRz0oRz1NYXRoLmltdWwoeHQsd3QpKStNYXRoLmltdWwoVHQsTHQpfDAsUT1NYXRoLmltdWwoVHQsd3QpLHE9cStNYXRoLmltdWwoTGUsUWUpfDAsRz0oRz1HK01hdGguaW11bChMZSxQdCl8MCkrTWF0aC5pbXVsKG50LFFlKXwwLFE9''@;'; put 'put ''UStNYXRoLmltdWwobnQsUHQpfDAscT1xK01hdGguaW11bCh0dCxOZSl8MCxHPShHPUcrTWF0aC5pbXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsUT1RK01hdGguaW11bChVZSx5dCl8MCxxPXErTWF0aC5pbXVsKGh0LGF0KXwwLEc9KEc9RytNYXRoLmltdWwoaHQsX3QpfDApK01h''@;'; put 'put ''dGguaW11bCh2dCxhdCl8MCxRPVErTWF0aC5pbXVsKHZ0LF90KXwwLHE9cStNYXRoLmltdWwoS2UsJHQpfDAsRz0oRz1HK01hdGguaW11bChLZSxIdCl8MCkrTWF0aC5pbXVsKFllLCR0KXwwLFE9UStNYXRoLmltdWwoWWUsSHQpfDAscT1xK01hdGguaW11bChiZSxubil8MCxHPShHPUcrTWF0''@;'; put 'put ''aC5pbXVsKGJlLGxuKXwwKStNYXRoLmltdWwod2Usbm4pfDAsUT1RK01hdGguaW11bCh3ZSxsbil8MCxxPXErTWF0aC5pbXVsKHhlLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoeGUsR3QpfDApK01hdGguaW11bChNZSxhbil8MCxRPVErTWF0aC5pbXVsKE1lLEd0KXwwO3ZhciBmYT0oYisocT1x''@;'; put 'put ''K01hdGguaW11bChPZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKE9lLGZyKXwwKStNYXRoLmltdWwoQ2UsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoQ2UsZnIpfDApKyhHPj4+MTMpfDApKyhmYT4+PjI2KXwwLGZhJj02NzEwODg2MyxxPU1hdGguaW11bCh4''@;'; put 'put ''dCxRZSksRz0oRz1NYXRoLmltdWwoeHQsUHQpKStNYXRoLmltdWwoVHQsUWUpfDAsUT1NYXRoLmltdWwoVHQsUHQpLHE9cStNYXRoLmltdWwoTGUsTmUpfDAsRz0oRz1HK01hdGguaW11bChMZSx5dCl8MCkrTWF0aC5pbXVsKG50LE5lKXwwLFE9UStNYXRoLmltdWwobnQseXQpfDAscT1xK01h''@;'; put 'put ''dGguaW11bCh0dCxhdCl8MCxHPShHPUcrTWF0aC5pbXVsKHR0LF90KXwwKStNYXRoLmltdWwoVWUsYXQpfDAsUT1RK01hdGguaW11bChVZSxfdCl8MCxxPXErTWF0aC5pbXVsKGh0LCR0KXwwLEc9KEc9RytNYXRoLmltdWwoaHQsSHQpfDApK01hdGguaW11bCh2dCwkdCl8MCxRPVErTWF0aC5p''@;'; put 'put ''bXVsKHZ0LEh0KXwwLHE9cStNYXRoLmltdWwoS2Usbm4pfDAsRz0oRz1HK01hdGguaW11bChLZSxsbil8MCkrTWF0aC5pbXVsKFllLG5uKXwwLFE9UStNYXRoLmltdWwoWWUsbG4pfDAscT1xK01hdGguaW11bChiZSxhbil8MCxHPShHPUcrTWF0aC5pbXVsKGJlLEd0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''d2UsYW4pfDAsUT1RK01hdGguaW11bCh3ZSxHdCl8MDt2YXIgeGk9KGIrKHE9cStNYXRoLmltdWwoeGUsbWkpfDApfDApKygoODE5MSYoRz0oRz1HK01hdGguaW11bCh4ZSxmcil8MCkrTWF0aC5pbXVsKE1lLG1pKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKE1lLGZyKXwwKSsoRz4+''@;'; put 'put ''PjEzKXwwKSsoeGk+Pj4yNil8MCx4aSY9NjcxMDg4NjMscT1NYXRoLmltdWwoeHQsTmUpLEc9KEc9TWF0aC5pbXVsKHh0LHl0KSkrTWF0aC5pbXVsKFR0LE5lKXwwLFE9TWF0aC5pbXVsKFR0LHl0KSxxPXErTWF0aC5pbXVsKExlLGF0KXwwLEc9KEc9RytNYXRoLmltdWwoTGUsX3QpfDApK01h''@;'; put 'put ''dGguaW11bChudCxhdCl8MCxRPVErTWF0aC5pbXVsKG50LF90KXwwLHE9cStNYXRoLmltdWwodHQsJHQpfDAsRz0oRz1HK01hdGguaW11bCh0dCxIdCl8MCkrTWF0aC5pbXVsKFVlLCR0KXwwLFE9UStNYXRoLmltdWwoVWUsSHQpfDAscT1xK01hdGguaW11bChodCxubil8MCxHPShHPUcrTWF0''@;'; put 'put ''aC5pbXVsKGh0LGxuKXwwKStNYXRoLmltdWwodnQsbm4pfDAsUT1RK01hdGguaW11bCh2dCxsbil8MCxxPXErTWF0aC5pbXVsKEtlLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bChZZSxhbil8MCxRPVErTWF0aC5pbXVsKFllLEd0KXwwO3ZhciBvYT0oYisocT1x''@;'; put 'put ''K01hdGguaW11bChiZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKGJlLGZyKXwwKStNYXRoLmltdWwod2UsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwod2UsZnIpfDApKyhHPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02NzEwODg2MyxxPU1hdGguaW11bCh4''@;'; put 'put ''dCxhdCksRz0oRz1NYXRoLmltdWwoeHQsX3QpKStNYXRoLmltdWwoVHQsYXQpfDAsUT1NYXRoLmltdWwoVHQsX3QpLHE9cStNYXRoLmltdWwoTGUsJHQpfDAsRz0oRz1HK01hdGguaW11bChMZSxIdCl8MCkrTWF0aC5pbXVsKG50LCR0KXwwLFE9UStNYXRoLmltdWwobnQsSHQpfDAscT1xK01h''@;'; put 'put ''dGguaW11bCh0dCxubil8MCxHPShHPUcrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsUT1RK01hdGguaW11bChVZSxsbil8MCxxPXErTWF0aC5pbXVsKGh0LGFuKXwwLEc9KEc9RytNYXRoLmltdWwoaHQsR3QpfDApK01hdGguaW11bCh2dCxhbil8MCxRPVErTWF0aC5p''@;'; put 'put ''bXVsKHZ0LEd0KXwwO3ZhciBYaT0oYisocT1xK01hdGguaW11bChLZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKEtlLGZyKXwwKStNYXRoLmltdWwoWWUsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoWWUsZnIpfDApKyhHPj4+MTMpfDApKyhYaT4+PjI2KXww''@;'; put 'put ''LFhpJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCwkdCksRz0oRz1NYXRoLmltdWwoeHQsSHQpKStNYXRoLmltdWwoVHQsJHQpfDAsUT1NYXRoLmltdWwoVHQsSHQpLHE9cStNYXRoLmltdWwoTGUsbm4pfDAsRz0oRz1HK01hdGguaW11bChMZSxsbil8MCkrTWF0aC5pbXVsKG50LG5uKXwwLFE9''@;'; put 'put ''UStNYXRoLmltdWwobnQsbG4pfDAscT1xK01hdGguaW11bCh0dCxhbil8MCxHPShHPUcrTWF0aC5pbXVsKHR0LEd0KXwwKStNYXRoLmltdWwoVWUsYW4pfDAsUT1RK01hdGguaW11bChVZSxHdCl8MDt2YXIgSXI9KGIrKHE9cStNYXRoLmltdWwoaHQsbWkpfDApfDApKygoODE5MSYoRz0oRz1H''@;'; put 'put ''K01hdGguaW11bChodCxmcil8MCkrTWF0aC5pbXVsKHZ0LG1pKXwwKSk8PDEzKXwwO2I9KChRPVErTWF0aC5pbXVsKHZ0LGZyKXwwKSsoRz4+PjEzKXwwKSsoSXI+Pj4yNil8MCxJciY9NjcxMDg4NjMscT1NYXRoLmltdWwoeHQsbm4pLEc9KEc9TWF0aC5pbXVsKHh0LGxuKSkrTWF0aC5pbXVs''@;'; put 'put ''KFR0LG5uKXwwLFE9TWF0aC5pbXVsKFR0LGxuKSxxPXErTWF0aC5pbXVsKExlLGFuKXwwLEc9KEc9RytNYXRoLmltdWwoTGUsR3QpfDApK01hdGguaW11bChudCxhbil8MCxRPVErTWF0aC5pbXVsKG50LEd0KXwwO3ZhciBibz0oYisocT1xK01hdGguaW11bCh0dCxtaSl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihHPShHPUcrTWF0aC5pbXVsKHR0LGZyKXwwKStNYXRoLmltdWwoVWUsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwoVWUsZnIpfDApKyhHPj4+MTMpfDApKyhibz4+PjI2KXwwLGJvJj02NzEwODg2MyxxPU1hdGguaW11bCh4dCxhbiksRz0oRz1NYXRoLmltdWwoeHQsR3QpKStN''@;'; put 'put ''YXRoLmltdWwoVHQsYW4pfDAsUT1NYXRoLmltdWwoVHQsR3QpO3ZhciBYYT0oYisocT1xK01hdGguaW11bChMZSxtaSl8MCl8MCkrKCg4MTkxJihHPShHPUcrTWF0aC5pbXVsKExlLGZyKXwwKStNYXRoLmltdWwobnQsbWkpfDApKTw8MTMpfDA7Yj0oKFE9UStNYXRoLmltdWwobnQsZnIpfDAp''@;'; put 'put ''KyhHPj4+MTMpfDApKyhYYT4+PjI2KXwwLFhhJj02NzEwODg2Mzt2YXIgRmw9KGIrKHE9TWF0aC5pbXVsKHh0LG1pKSl8MCkrKCg4MTkxJihHPShHPU1hdGguaW11bCh4dCxmcikpK01hdGguaW11bChUdCxtaSl8MCkpPDwxMyl8MDtyZXR1cm4gYj0oKFE9TWF0aC5pbXVsKFR0LGZyKSkrKEc+''@;'; put 'put ''Pj4xMyl8MCkrKEZsPj4+MjYpfDAsRmwmPTY3MTA4ODYzLGxbMF09JGksbFsxXT1LaSxsWzJdPVZpLGxbM109cXIsbFs0XT11YSxsWzVdPUZpLGxbNl09UmEsbFs3XT1vaSxsWzhdPVVpLGxbOV09VmEsbFsxMF09dXIsbFsxMV09ZmEsbFsxMl09eGksbFsxM109b2EsbFsxNF09WGksbFsxNV09''@;'; put 'put ''SXIsbFsxNl09Ym8sbFsxN109WGEsbFsxOF09RmwsMCE9PWImJihsWzE5XT1iLGsubGVuZ3RoKyspLGt9O2Z1bmN0aW9uIEsodixwLF8pe18ubmVnYXRpdmU9cC5uZWdhdGl2ZV52Lm5lZ2F0aXZlLF8ubGVuZ3RoPXYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgaz0wLEw9MCx5PTA7eTxfLmxl''@;'; put 'put ''bmd0aC0xO3krKyl7dmFyIGw9TDtMPTA7Zm9yKHZhciBiPTY3MTA4ODYzJmsscT1NYXRoLm1pbih5LHAubGVuZ3RoLTEpLEc9TWF0aC5tYXgoMCx5LXYubGVuZ3RoKzEpO0c8PXE7RysrKXt2YXIgWmU9KDB8di53b3Jkc1t5LUddKSooMHxwLndvcmRzW0ddKSxxZT02NzEwODg2MyZaZTtiPTY3''@;'; put 'put ''MTA4ODYzJihxZT1xZStifDApLEwrPShsPShsPWwrKFplLzY3MTA4ODY0fDApfDApKyhxZT4+PjI2KXwwKT4+PjI2LGwmPTY3MTA4ODYzfV8ud29yZHNbeV09YixrPWwsbD1MfXJldHVybiAwIT09az9fLndvcmRzW3ldPWs6Xy5sZW5ndGgtLSxfLl9zdHJpcCgpfWZ1bmN0aW9uIFgodixwLF8p''@;'; put 'put ''e3JldHVybiBLKHYscCxfKX1mdW5jdGlvbiBuZSh2LHApe3RoaXMueD12LHRoaXMueT1wfU1hdGguaW11bHx8KFU9WiksZi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxfKXt2YXIgTD10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0''@;'; put 'put ''aD9VKHRoaXMscCxfKTpMPDYzP1oodGhpcyxwLF8pOkw8MTAyND9LKHRoaXMscCxfKTpYKHRoaXMscCxfKX0sbmUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBfPW5ldyBBcnJheShwKSxrPWYucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxMPTA7TDxwO0wrKylfW0xd''@;'; put 'put ''PXRoaXMucmV2QmluKEwsayxwKTtyZXR1cm4gX30sbmUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLF8sayl7aWYoMD09PXB8fHA9PT1rLTEpcmV0dXJuIHA7Zm9yKHZhciBMPTAseT0wO3k8Xzt5KyspTHw9KDEmcCk8PF8teS0xLHA+Pj0xO3JldHVybiBMfSxuZS5wcm90b3R5cGUucGVy''@;'; put 'put ''bXV0ZT1mdW5jdGlvbihwLF8sayxMLHksbCl7Zm9yKHZhciBiPTA7YjxsO2IrKylMW2JdPV9bcFtiXV0seVtiXT1rW3BbYl1dfSxuZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsXyxrLEwseSxsKXt0aGlzLnBlcm11dGUobCxwLF8sayxMLHkpO2Zvcih2YXIgYj0xO2I8eTtiPDw9''@;'; put 'put ''MSlmb3IodmFyIHE9Yjw8MSxHPU1hdGguY29zKDIqTWF0aC5QSS9xKSxRPU1hdGguc2luKDIqTWF0aC5QSS9xKSxwZT0wO3BlPHk7cGUrPXEpZm9yKHZhciBQZT1HLFplPVEscWU9MDtxZTxiO3FlKyspe3ZhciB2ZT1rW3BlK3FlXSx1ZT1MW3BlK3FlXSx6ZT1rW3BlK3FlK2JdLE9lPUxbcGUr''@;'; put 'put ''cWUrYl0sQ2U9UGUqemUtWmUqT2U7T2U9UGUqT2UrWmUqemUsa1twZStxZV09dmUrKHplPUNlKSxMW3BlK3FlXT11ZStPZSxrW3BlK3FlK2JdPXZlLXplLExbcGUrcWUrYl09dWUtT2UscWUhPT1xJiYoQ2U9RypQZS1RKlplLFplPUcqWmUrUSpQZSxQZT1DZSl9fSxuZS5wcm90b3R5cGUuZ3Vl''@;'; put 'put ''c3NMZW4xM2I9ZnVuY3Rpb24ocCxfKXt2YXIgaz0xfE1hdGgubWF4KF8scCksTD0xJmsseT0wO2ZvcihrPWsvMnwwO2s7az4+Pj0xKXkrKztyZXR1cm4gMTw8eSsxK0x9LG5lLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxfLGspe2lmKCEoazw9MSkpZm9yKHZhciBMPTA7TDxrLzI7''@;'; put 'put ''TCsrKXt2YXIgeT1wW0xdO3BbTF09cFtrLUwtMV0scFtrLUwtMV09eSx5PV9bTF0sX1tMXT0tX1trLUwtMV0sX1trLUwtMV09LXl9fSxuZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsXyl7Zm9yKHZhciBrPTAsTD0wO0w8Xy8yO0wrKyl7dmFyIHk9ODE5MipNYXRoLnJvdW5k''@;'; put 'put ''KHBbMipMKzFdL18pK01hdGgucm91bmQocFsyKkxdL18pK2s7cFtMXT02NzEwODg2MyZ5LGs9eTw2NzEwODg2ND8wOnkvNjcxMDg4NjR8MH1yZXR1cm4gcH0sbmUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxfLGssTCl7Zm9yKHZhciB5PTAsbD0wO2w8XztsKyspa1syKmxdPTgx''@;'; put 'put ''OTEmKHkrPTB8cFtsXSksa1syKmwrMV09ODE5MSYoeT4+Pj0xMykseT4+Pj0xMztmb3IobD0yKl87bDxMOysrbClrW2xdPTA7bygwPT09eSksbyghKC04MTkyJnkpKX0sbmUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBfPW5ldyBBcnJheShwKSxrPTA7azxwO2srKylfW2td''@;'; put 'put ''PTA7cmV0dXJuIF99LG5lLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsXyxrKXt2YXIgTD0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsXy5sZW5ndGgpLHk9dGhpcy5tYWtlUkJUKEwpLGw9dGhpcy5zdHViKEwpLGI9bmV3IEFycmF5KEwpLHE9bmV3IEFycmF5KEwpLEc9bmV3IEFycmF5''@;'; put 'put ''KEwpLFE9bmV3IEFycmF5KEwpLHBlPW5ldyBBcnJheShMKSxQZT1uZXcgQXJyYXkoTCksWmU9ay53b3JkcztaZS5sZW5ndGg9TCx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxiLEwpLHRoaXMuY29udmVydDEzYihfLndvcmRzLF8ubGVuZ3RoLFEsTCksdGhpcy50cmFuc2Zvcm0o''@;'; put 'put ''YixsLHEsRyxMLHkpLHRoaXMudHJhbnNmb3JtKFEsbCxwZSxQZSxMLHkpO2Zvcih2YXIgcWU9MDtxZTxMO3FlKyspe3ZhciB2ZT1xW3FlXSpwZVtxZV0tR1txZV0qUGVbcWVdO0dbcWVdPXFbcWVdKlBlW3FlXStHW3FlXSpwZVtxZV0scVtxZV09dmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHEs''@;'; put 'put ''RyxMKSx0aGlzLnRyYW5zZm9ybShxLEcsWmUsbCxMLHkpLHRoaXMuY29uanVnYXRlKFplLGwsTCksdGhpcy5ub3JtYWxpemUxM2IoWmUsTCksay5uZWdhdGl2ZT1wLm5lZ2F0aXZlXl8ubmVnYXRpdmUsay5sZW5ndGg9cC5sZW5ndGgrXy5sZW5ndGgsay5fc3RyaXAoKX0sZi5wcm90b3R5cGUu''@;'; put 'put ''bXVsPWZ1bmN0aW9uKHApe3ZhciBfPW5ldyBmKG51bGwpO3JldHVybiBfLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLF8pfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBfPW5ldyBmKG51bGwpO3JldHVybiBfLndvcmRzPW5ldyBB''@;'; put 'put ''cnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksWCh0aGlzLHAsXyl9LGYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXt2YXIgXz1wPDA7XyYmKHA9LXApLG8oIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBwKSxvKHA8NjcxMDg4NjQpO2Zvcih2YXIgaz0wLEw9MDtMPHRoaXMubGVuZ3RoO0wrKyl7dmFyIHk9KDB8dGhpcy53b3Jkc1tMXSkqcCxsPSg2NzEwODg2MyZ5KSsoNjcxMDg4NjMmayk7az4+PTI2LGsrPXkvNjcxMDg4NjR8MCxrKz1sPj4+MjYsdGhpcy53b3Jkc1tMXT02NzEw''@;'; put 'put ''ODg2MyZsfXJldHVybiAwIT09ayYmKHRoaXMud29yZHNbTF09ayx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLF8/dGhpcy5pbmVnKCk6dGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSxm''@;'; put 'put ''LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgXz1mdW5jdGlvbiB6KHYpe2Zvcih2YXIg''@;'; put 'put ''cD1uZXcgQXJyYXkodi5iaXRMZW5ndGgoKSksXz0wO188cC5sZW5ndGg7XysrKXBbX109di53b3Jkc1tfLzI2fDBdPj4+XyUyNiYxO3JldHVybiBwfShwKTtpZigwPT09Xy5sZW5ndGgpcmV0dXJuIG5ldyBmKDEpO2Zvcih2YXIgaz10aGlzLEw9MDtMPF8ubGVuZ3RoJiYwPT09X1tMXTtMKyss''@;'; put 'put ''az1rLnNxcigpKTtpZigrK0w8Xy5sZW5ndGgpZm9yKHZhciB5PWsuc3FyKCk7TDxfLmxlbmd0aDtMKysseT15LnNxcigpKTAhPT1fW0xdJiYoaz1rLm11bCh5KSk7cmV0dXJuIGt9LGYucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtvKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFy''@;'; put 'put ''IHksXz1wJTI2LGs9KHAtXykvMjYsTD02NzEwODg2Mz4+PjI2LV88PDI2LV87aWYoMCE9PV8pe3ZhciBsPTA7Zm9yKHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIGI9dGhpcy53b3Jkc1t5XSZMO3RoaXMud29yZHNbeV09KDB8dGhpcy53b3Jkc1t5XSktYjw8X3xsLGw9Yj4+PjI2LV99bCYm''@;'; put 'put ''KHRoaXMud29yZHNbeV09bCx0aGlzLmxlbmd0aCsrKX1pZigwIT09ayl7Zm9yKHk9dGhpcy5sZW5ndGgtMTt5Pj0wO3ktLSl0aGlzLndvcmRzW3kra109dGhpcy53b3Jkc1t5XTtmb3IoeT0wO3k8azt5KyspdGhpcy53b3Jkc1t5XT0wO3RoaXMubGVuZ3RoKz1rfXJldHVybiB0aGlzLl9zdHJp''@;'; put 'put ''cCgpfSxmLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LGYucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLF8sayl7dmFyIEw7bygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEw9Xz8oXy1fJTI2KS8yNjow''@;'; put 'put ''O3ZhciB5PXAlMjYsbD1NYXRoLm1pbigocC15KS8yNix0aGlzLmxlbmd0aCksYj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkscT1rO2lmKEwtPWwsTD1NYXRoLm1heCgwLEwpLHEpe2Zvcih2YXIgRz0wO0c8bDtHKyspcS53b3Jkc1tHXT10aGlzLndvcmRzW0ddO3EubGVuZ3RoPWx9aWYoMCE9''@;'; put 'put ''PWwpaWYodGhpcy5sZW5ndGg+bClmb3IodGhpcy5sZW5ndGgtPWwsRz0wO0c8dGhpcy5sZW5ndGg7RysrKXRoaXMud29yZHNbR109dGhpcy53b3Jkc1tHK2xdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIFE9MDtmb3IoRz10aGlzLmxlbmd0aC0xO0c+PTAmJigwIT09''@;'; put 'put ''UXx8Rz49TCk7Ry0tKXt2YXIgcGU9MHx0aGlzLndvcmRzW0ddO3RoaXMud29yZHNbR109UTw8MjYteXxwZT4+PnksUT1wZSZifXJldHVybiBxJiYwIT09USYmKHEud29yZHNbcS5sZW5ndGgrK109USksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRo''@;'; put 'put ''aXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsXyxrKXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxfLGspfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LGYucHJvdG90eXBl''@;'; put 'put ''LnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LGYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJu''@;'; put 'put ''KHApfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtvKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIF89cCUyNixrPShwLV8pLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PWt8fCEodGhpcy53b3Jkc1trXSYxPDxfKSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtv''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIF89cCUyNixrPShwLV8pLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9az90aGlzOigwIT09XyYmaysrLHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWluKGssdGhpcy5sZW5ndGgpLDAhPT1fJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKSl9LGYucHJvdG90eXBlLm1hc2tu''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSxmLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gbygibnVtYmVyIj09dHlwZW9mIHApLG8ocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PXA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sZi5wcm90b3R5cGUu''@;'; put 'put ''X2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBfPTA7Xzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tfXT49NjcxMDg4NjQ7XysrKXRoaXMud29yZHNbX10tPTY3MTA4ODY0LF89PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbXysxXT0xOnRoaXMud29yZHNbXysx''@;'; put 'put ''XSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxfKzEpLHRoaXN9LGYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKG8oIm51bWJlciI9PXR5cGVvZiBwKSxvKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxz''@;'; put 'put ''ZSBmb3IodmFyIF89MDtfPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW19dPDA7XysrKXRoaXMud29yZHNbX10rPTY3MTA4ODY0LHRoaXMud29yZHNbXysxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sZi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlh''@;'; put 'put ''ZGRuKHApfSxmLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LGYucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaWFicygpfSxmLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxfLGspe3ZhciB5O3RoaXMuX2V4cGFuZChwLmxlbmd0aCtrKTt2YXIgbCxiPTA7Zm9yKHk9MDt5PHAubGVuZ3RoO3krKyl7bD0oMHx0aGlzLndvcmRzW3kra10pK2I7dmFyIHE9KDB8cC53b3Jkc1t5XSkq''@;'; put 'put ''XztiPSgobC09NjcxMDg4NjMmcSk+PjI2KS0ocS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3kra109NjcxMDg4NjMmbH1mb3IoO3k8dGhpcy5sZW5ndGgtazt5KyspYj0obD0oMHx0aGlzLndvcmRzW3kra10pK2IpPj4yNix0aGlzLndvcmRzW3kra109NjcxMDg4NjMmbDtpZigwPT09YilyZXR1''@;'; put 'put ''cm4gdGhpcy5fc3RyaXAoKTtmb3IobygtMT09PWIpLGI9MCx5PTA7eTx0aGlzLmxlbmd0aDt5KyspYj0obD0tKDB8dGhpcy53b3Jkc1t5XSkrYik+PjI2LHRoaXMud29yZHNbeV09NjcxMDg4NjMmbDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LGYucHJvdG90eXBlLl93''@;'; put 'put ''b3JkRGl2PWZ1bmN0aW9uKHAsXyl7dmFyIGssTD10aGlzLmNsb25lKCkseT1wLGw9MHx5LndvcmRzW3kubGVuZ3RoLTFdOzAhPShrPTI2LXRoaXMuX2NvdW50Qml0cyhsKSkmJih5PXkudXNobG4oayksTC5pdXNobG4oayksbD0wfHkud29yZHNbeS5sZW5ndGgtMV0pO3ZhciBHLHE9TC5sZW5n''@;'; put 'put ''dGgteS5sZW5ndGg7aWYoIm1vZCIhPT1fKXsoRz1uZXcgZihudWxsKSkubGVuZ3RoPXErMSxHLndvcmRzPW5ldyBBcnJheShHLmxlbmd0aCk7Zm9yKHZhciBRPTA7UTxHLmxlbmd0aDtRKyspRy53b3Jkc1tRXT0wfXZhciBwZT1MLmNsb25lKCkuX2lzaGxuc3VibXVsKHksMSxxKTswPT09cGUu''@;'; put 'put ''bmVnYXRpdmUmJihMPXBlLEcmJihHLndvcmRzW3FdPTEpKTtmb3IodmFyIFBlPXEtMTtQZT49MDtQZS0tKXt2YXIgWmU9NjcxMDg4NjQqKDB8TC53b3Jkc1t5Lmxlbmd0aCtQZV0pKygwfEwud29yZHNbeS5sZW5ndGgrUGUtMV0pO2ZvcihaZT1NYXRoLm1pbihaZS9sfDAsNjcxMDg4NjMpLEwu''@;'; put 'put ''X2lzaGxuc3VibXVsKHksWmUsUGUpOzAhPT1MLm5lZ2F0aXZlOylaZS0tLEwubmVnYXRpdmU9MCxMLl9pc2hsbnN1Ym11bCh5LDEsUGUpLEwuaXNaZXJvKCl8fChMLm5lZ2F0aXZlXj0xKTtHJiYoRy53b3Jkc1tQZV09WmUpfXJldHVybiBHJiZHLl9zdHJpcCgpLEwuX3N0cmlwKCksImRpdiIh''@;'; put 'put ''PT1fJiYwIT09ayYmTC5pdXNocm4oaykse2RpdjpHfHxudWxsLG1vZDpMfX0sZi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsXyxrKXtyZXR1cm4gbyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBmKDApLG1vZDpuZXcgZigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9''@;'; put 'put ''PT1wLm5lZ2F0aXZlPyhsPXRoaXMubmVnKCkuZGl2bW9kKHAsXyksIm1vZCIhPT1fJiYoTD1sLmRpdi5uZWcoKSksImRpdiIhPT1fJiYoeT1sLm1vZC5uZWcoKSxrJiYwIT09eS5uZWdhdGl2ZSYmeS5pYWRkKHApKSx7ZGl2OkwsbW9kOnl9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVn''@;'; put 'put ''YXRpdmU/KGw9dGhpcy5kaXZtb2QocC5uZWcoKSxfKSwibW9kIiE9PV8mJihMPWwuZGl2Lm5lZygpKSx7ZGl2OkwsbW9kOmwubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhsPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksXyksImRpdiIhPT1fJiYoeT1sLm1vZC5uZWcoKSxrJiYw''@;'; put 'put ''IT09eS5uZWdhdGl2ZSYmeS5pc3ViKHApKSx7ZGl2OmwuZGl2LG1vZDp5fSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgZigwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Xz97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06''@;'; put 'put ''Im1vZCI9PT1fP3tkaXY6bnVsbCxtb2Q6bmV3IGYodGhpcy5tb2RybihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgZih0aGlzLm1vZHJuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLF8pO3ZhciBMLHksbH0sZi5wcm90b3R5cGUuZGl2PWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LGYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSxmLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2Qi''@;'; put 'put ''LCEwKS5tb2R9LGYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBfPXRoaXMuZGl2bW9kKHApO2lmKF8ubW9kLmlzWmVybygpKXJldHVybiBfLmRpdjt2YXIgaz0wIT09Xy5kaXYubmVnYXRpdmU/Xy5tb2QuaXN1YihwKTpfLm1vZCxMPXAudXNocm4oMSkseT1wLmFuZGxuKDEp''@;'; put 'put ''LGw9ay5jbXAoTCk7cmV0dXJuIGw8MHx8MT09PXkmJjA9PT1sP18uZGl2OjAhPT1fLmRpdi5uZWdhdGl2ZT9fLmRpdi5pc3VibigxKTpfLmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24ocCl7dmFyIF89cDwwO18mJihwPS1wKSxvKHA8PTY3MTA4ODYzKTtmb3IodmFy''@;'; put 'put ''IGs9KDE8PDI2KSVwLEw9MCx5PXRoaXMubGVuZ3RoLTE7eT49MDt5LS0pTD0oaypMKygwfHRoaXMud29yZHNbeV0pKSVwO3JldHVybiBfPy1MOkx9LGYucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubW9kcm4ocCl9LGYucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3ZhciBfPXA8MDtfJiYocD0tcCksbyhwPD02NzEwODg2Myk7Zm9yKHZhciBrPTAsTD10aGlzLmxlbmd0aC0xO0w+PTA7TC0tKXt2YXIgeT0oMHx0aGlzLndvcmRzW0xdKSs2NzEwODg2NCprO3RoaXMud29yZHNbTF09eS9wfDAsaz15JXB9cmV0dXJuIHRoaXMuX3N0cmlwKCksXz90aGlzLmlu''@;'; put 'put ''ZWcoKTp0aGlzfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7bygwPT09cC5uZWdhdGl2ZSksbyghcC5pc1plcm8oKSk7dmFyIF89dGhpcyxrPXAuY2xvbmUoKTtfPTAhPT1fLm5l''@;'; put 'put ''Z2F0aXZlP18udW1vZChwKTpfLmNsb25lKCk7Zm9yKHZhciBMPW5ldyBmKDEpLHk9bmV3IGYoMCksbD1uZXcgZigwKSxiPW5ldyBmKDEpLHE9MDtfLmlzRXZlbigpJiZrLmlzRXZlbigpOylfLml1c2hybigxKSxrLml1c2hybigxKSwrK3E7Zm9yKHZhciBHPWsuY2xvbmUoKSxRPV8uY2xvbmUo''@;'; put 'put ''KTshXy5pc1plcm8oKTspe2Zvcih2YXIgcGU9MCxQZT0xOyEoXy53b3Jkc1swXSZQZSkmJnBlPDI2OysrcGUsUGU8PD0xKTtpZihwZT4wKWZvcihfLml1c2hybihwZSk7cGUtLSA+MDspKEwuaXNPZGQoKXx8eS5pc09kZCgpKSYmKEwuaWFkZChHKSx5LmlzdWIoUSkpLEwuaXVzaHJuKDEpLHku''@;'; put 'put ''aXVzaHJuKDEpO2Zvcih2YXIgWmU9MCxxZT0xOyEoay53b3Jkc1swXSZxZSkmJlplPDI2OysrWmUscWU8PD0xKTtpZihaZT4wKWZvcihrLml1c2hybihaZSk7WmUtLSA+MDspKGwuaXNPZGQoKXx8Yi5pc09kZCgpKSYmKGwuaWFkZChHKSxiLmlzdWIoUSkpLGwuaXVzaHJuKDEpLGIuaXVzaHJu''@;'; put 'put ''KDEpO18uY21wKGspPj0wPyhfLmlzdWIoayksTC5pc3ViKGwpLHkuaXN1YihiKSk6KGsuaXN1YihfKSxsLmlzdWIoTCksYi5pc3ViKHkpKX1yZXR1cm57YTpsLGIsZ2NkOmsuaXVzaGxuKHEpfX0sZi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe28oMD09PXAubmVnYXRpdmUpLG8oIXAu''@;'; put 'put ''aXNaZXJvKCkpO3ZhciBwZSxfPXRoaXMsaz1wLmNsb25lKCk7Xz0wIT09Xy5uZWdhdGl2ZT9fLnVtb2QocCk6Xy5jbG9uZSgpO2Zvcih2YXIgTD1uZXcgZigxKSx5PW5ldyBmKDApLGw9ay5jbG9uZSgpO18uY21wbigxKT4wJiZrLmNtcG4oMSk+MDspe2Zvcih2YXIgYj0wLHE9MTshKF8ud29y''@;'; put 'put ''ZHNbMF0mcSkmJmI8MjY7KytiLHE8PD0xKTtpZihiPjApZm9yKF8uaXVzaHJuKGIpO2ItLSA+MDspTC5pc09kZCgpJiZMLmlhZGQobCksTC5pdXNocm4oMSk7Zm9yKHZhciBHPTAsUT0xOyEoay53b3Jkc1swXSZRKSYmRzwyNjsrK0csUTw8PTEpO2lmKEc+MClmb3Ioay5pdXNocm4oRyk7Ry0t''@;'; put 'put ''ID4wOyl5LmlzT2RkKCkmJnkuaWFkZChsKSx5Lml1c2hybigxKTtfLmNtcChrKT49MD8oXy5pc3ViKGspLEwuaXN1Yih5KSk6KGsuaXN1YihfKSx5LmlzdWIoTCkpfXJldHVybihwZT0wPT09Xy5jbXBuKDEpP0w6eSkuY21wbigwKTwwJiZwZS5pYWRkKHApLHBlfSxmLnByb3RvdHlwZS5nY2Q9''@;'; put 'put ''ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBfPXRoaXMuY2xvbmUoKSxrPXAuY2xvbmUoKTtfLm5lZ2F0aXZlPTAsay5uZWdhdGl2ZT0wO2Zvcih2YXIgTD0wO18uaXNFdmVuKCkmJmsuaXNFdmVu''@;'; put 'put ''KCk7TCsrKV8uaXVzaHJuKDEpLGsuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtfLmlzRXZlbigpOylfLml1c2hybigxKTtmb3IoO2suaXNFdmVuKCk7KWsuaXVzaHJuKDEpO3ZhciB5PV8uY21wKGspO2lmKHk8MCl7dmFyIGw9XztfPWssaz1sfWVsc2UgaWYoMD09PXl8fDA9PT1rLmNtcG4oMSkp''@;'; put 'put ''YnJlYWs7Xy5pc3ViKGspfXJldHVybiBrLml1c2hsbihMKX0sZi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sZi5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5p''@;'; put 'put ''c09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGYucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LGYucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe28oIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgXz1wJTI2LGs9KHAt''@;'; put 'put ''XykvMjYsTD0xPDxfO2lmKHRoaXMubGVuZ3RoPD1rKXJldHVybiB0aGlzLl9leHBhbmQoaysxKSx0aGlzLndvcmRzW2tdfD1MLHRoaXM7Zm9yKHZhciB5PUwsbD1rOzAhPT15JiZsPHRoaXMubGVuZ3RoO2wrKyl7dmFyIGI9MHx0aGlzLndvcmRzW2xdO3k9KGIrPXkpPj4+MjYsdGhpcy53b3Jk''@;'; put 'put ''c1tsXT1iJj02NzEwODg2M31yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW2xdPXksdGhpcy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGYucHJvdG90eXBlLmNtcG49ZnVuY3Rp''@;'; put 'put ''b24ocCl7dmFyIGssXz1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFfKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZfKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlrPTE7ZWxzZXtfJiYocD0tcCksbyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBi''@;'; put 'put ''aWciKTt2YXIgTD0wfHRoaXMud29yZHNbMF07az1MPT09cD8wOkw8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1rOmt9LGYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBfPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtXzpffSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAu''@;'; put 'put ''bGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgXz0wLGs9dGhpcy5sZW5ndGgtMTtrPj0wO2stLSl7dmFyIEw9MHx0aGlzLndvcmRzW2tdLHk9MHxwLndvcmRzW2tdO2lmKEwhPT15KXtMPHk/Xz0tMTpMPnkmJihfPTEpO2JyZWFrfX1yZXR1cm4gX30sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiAxPT09dGhpcy5jbXBuKHApfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSxmLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbXAocCk+PTB9LGYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sZi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sZi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBu''@;'; put 'put ''KHApPD0wfSxmLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSxmLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LGYu''@;'; put 'put ''cmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgcyhwKX0sZi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw''@;'; put 'put ''b3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LGYucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRG''@;'; put 'put ''cm9tKHRoaXMpfSxmLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sZi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhp''@;'; put 'put ''cy5fZm9yY2VSZWQocCl9LGYucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSxmLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBv''@;'; put 'put ''KHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sZi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBvKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuc3ViKHRoaXMscCl9LGYucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSxmLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IG8odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sZi5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sZi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQu''@;'; put 'put ''aW11bCh0aGlzLHApfSxmLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sZi5wcm90b3R5cGUucmVkSVNxcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxmLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sZi5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5uZWcodGhpcyl9LGYucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gbyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgc2U9e2syNTY6bnVsbCxwMjI0Om51bGws''@;'; put 'put ''cDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBoZSh2LHApe3RoaXMubmFtZT12LHRoaXMucD1uZXcgZihwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgZigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVu''@;'; put 'put ''Y3Rpb24gX2UoKXtoZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aGUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBGZSgpe2hlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gUigpe2hlLmNhbGwodGhpcywiMjU1MTki''@;'; put 'put ''LCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gcyh2KXtpZigic3RyaW5nIj09dHlwZW9mIHYpe3ZhciBwPWYuX3ByaW1lKHYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2Ugbyh2Lmd0bigx''@;'; put 'put ''KSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHUodil7cy5jYWxsKHRoaXMsdiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQl''@;'; put 'put ''MjYpLHRoaXMucj1uZXcgZigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52''@;'; put 'put ''PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1oZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyBmKG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saGUucHJvdG90eXBl''@;'; put 'put ''LmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIGssXz1wO2Rve3RoaXMuc3BsaXQoXyx0aGlzLnRtcCksaz0oXz0oXz10aGlzLmltdWxLKF8pKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoaz50aGlzLm4pO3ZhciBMPWs8dGhpcy5uPy0xOl8udWNtcCh0aGlzLnApO3JldHVybiAw''@;'; put 'put ''PT09TD8oXy53b3Jkc1swXT0wLF8ubGVuZ3RoPTEpOkw+MD9fLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1fLnN0cmlwP18uc3RyaXAoKTpfLl9zdHJpcCgpLF99LGhlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLF8pe3AuaXVzaHJuKHRoaXMubiwwLF8pfSxoZS5wcm90b3R5cGUuaW11bEs9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxJKF9lLGhlKSxfZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxfKXtmb3IodmFyIGs9NDE5NDMwMyxMPU1hdGgubWluKHAubGVuZ3RoLDkpLHk9MDt5PEw7eSsrKV8ud29yZHNbeV09cC53b3Jkc1t5XTtpZihfLmxlbmd0aD1M''@;'; put 'put ''LHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgbD1wLndvcmRzWzldO2ZvcihfLndvcmRzW18ubGVuZ3RoKytdPWwmayx5PTEwO3k8cC5sZW5ndGg7eSsrKXt2YXIgYj0wfHAud29yZHNbeV07cC53b3Jkc1t5LTEwXT0oYiZrKTw8NHxsPj4+MjIs''@;'; put 'put ''bD1ifXAud29yZHNbeS0xMF09bD4+Pj0yMixwLmxlbmd0aC09MD09PWwmJnAubGVuZ3RoPjEwPzEwOjl9LF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIF89MCxrPTA7azxw''@;'; put 'put ''Lmxlbmd0aDtrKyspe3ZhciBMPTB8cC53b3Jkc1trXTtwLndvcmRzW2tdPTY3MTA4ODYzJihfKz05NzcqTCksXz02NCpMKyhfLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0p''@;'; put 'put ''LHB9LEkobWUsaGUpLEkoRmUsaGUpLEkoUixoZSksUi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBfPTAsaz0wO2s8cC5sZW5ndGg7aysrKXt2YXIgTD0xOSooMHxwLndvcmRzW2tdKStfLHk9NjcxMDg4NjMmTDtMPj4+PTI2LHAud29yZHNba109eSxfPUx9cmV0dXJuIDAh''@;'; put 'put ''PT1fJiYocC53b3Jkc1twLmxlbmd0aCsrXT1fKSxwfSxmLl9wcmltZT1mdW5jdGlvbihwKXtpZihzZVtwXSlyZXR1cm4gc2VbcF07dmFyIF87aWYoImsyNTYiPT09cClfPW5ldyBfZTtlbHNlIGlmKCJwMjI0Ij09PXApXz1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKV89bmV3IEZlO2Vsc2V7''@;'; put 'put ''aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO189bmV3IFJ9cmV0dXJuIHNlW3BdPV8sX30scy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7bygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHAu''@;'; put 'put ''cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHMucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsXyl7byghKHAubmVnYXRpdmV8Xy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhwLnJlZCYmcC5yZWQ9PT1fLnJlZCwicmVkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxzLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6KEQocCxwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLHApfSxzLnByb3RvdHlw''@;'; put 'put ''ZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxzLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxfKXt0aGlzLl92ZXJpZnkyKHAsXyk7dmFyIGs9cC5hZGQoXyk7cmV0dXJuIGsuY21wKHRoaXMubSk+PTAm''@;'; put 'put ''JmsuaXN1Yih0aGlzLm0pLGsuX2ZvcmNlUmVkKHRoaXMpfSxzLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsXyl7dGhpcy5fdmVyaWZ5MihwLF8pO3ZhciBrPXAuaWFkZChfKTtyZXR1cm4gay5jbXAodGhpcy5tKT49MCYmay5pc3ViKHRoaXMubSksa30scy5wcm90b3R5cGUuc3ViPWZ1bmN0''@;'; put 'put ''aW9uKHAsXyl7dGhpcy5fdmVyaWZ5MihwLF8pO3ZhciBrPXAuc3ViKF8pO3JldHVybiBrLmNtcG4oMCk8MCYmay5pYWRkKHRoaXMubSksay5fZm9yY2VSZWQodGhpcyl9LHMucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxfKXt0aGlzLl92ZXJpZnkyKHAsXyk7dmFyIGs9cC5pc3ViKF8pO3Jl''@;'; put 'put ''dHVybiBrLmNtcG4oMCk8MCYmay5pYWRkKHRoaXMubSksa30scy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oXykpfSxzLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''cCxfKSx0aGlzLmltb2QocC5pbXVsKF8pKX0scy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsXyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxfKSx0aGlzLmltb2QocC5tdWwoXykpfSxzLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxz''@;'; put 'put ''LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LHMucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBfPXRoaXMubS5hbmRsbigzKTtpZihvKF8lMj09MSksMz09PV8pe3ZhciBrPXRoaXMubS5h''@;'; put 'put ''ZGQobmV3IGYoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCxrKX1mb3IodmFyIEw9dGhpcy5tLnN1Ym4oMSkseT0wOyFMLmlzWmVybygpJiYwPT09TC5hbmRsbigxKTspeSsrLEwuaXVzaHJuKDEpO28oIUwuaXNaZXJvKCkpO3ZhciBsPW5ldyBmKDEpLnRvUmVkKHRoaXMpLGI9bC5y''@;'; put 'put ''ZWROZWcoKSxxPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxHPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoRz1uZXcgZigyKkcqRykudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KEcscSkuY21wKGIpOylHLnJlZElBZGQoYik7Zm9yKHZhciBRPXRoaXMucG93KEcsTCkscGU9dGhpcy5wb3cocCxM''@;'; put 'put ''LmFkZG4oMSkuaXVzaHJuKDEpKSxQZT10aGlzLnBvdyhwLEwpLFplPXk7MCE9PVBlLmNtcChsKTspe2Zvcih2YXIgcWU9UGUsdmU9MDswIT09cWUuY21wKGwpO3ZlKyspcWU9cWUucmVkU3FyKCk7byh2ZTxaZSk7dmFyIHVlPXRoaXMucG93KFEsbmV3IGYoMSkuaXVzaGxuKFplLXZlLTEpKTtw''@;'; put 'put ''ZT1wZS5yZWRNdWwodWUpLFE9dWUucmVkU3FyKCksUGU9UGUucmVkTXVsKFEpLFplPXZlfXJldHVybiBwZX0scy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgXz1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Xy5uZWdhdGl2ZT8oXy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChfKS5y''@;'; put 'put ''ZWROZWcoKSk6dGhpcy5pbW9kKF8pfSxzLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxfKXtpZihfLmlzWmVybygpKXJldHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtpZigwPT09Xy5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEw9bmV3IEFycmF5KDE2KTtMWzBdPW5ldyBmKDEpLnRv''@;'; put 'put ''UmVkKHRoaXMpLExbMV09cDtmb3IodmFyIHk9Mjt5PEwubGVuZ3RoO3krKylMW3ldPXRoaXMubXVsKExbeS0xXSxwKTt2YXIgbD1MWzBdLGI9MCxxPTAsRz1fLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09RyYmKEc9MjYpLHk9Xy5sZW5ndGgtMTt5Pj0wO3ktLSl7Zm9yKHZhciBRPV8ud29yZHNb''@;'; put 'put ''eV0scGU9Ry0xO3BlPj0wO3BlLS0pe3ZhciBQZT1RPj5wZSYxO2whPT1MWzBdJiYobD10aGlzLnNxcihsKSksMCE9PVBlfHwwIT09Yj8oYjw8PTEsYnw9UGUsKDQ9PSsrcXx8MD09PXkmJjA9PT1wZSkmJihsPXRoaXMubXVsKGwsTFtiXSkscT0wLGI9MCkpOnE9MH1HPTI2fXJldHVybiBsfSxz''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIF89cC51bW9kKHRoaXMubSk7cmV0dXJuIF89PT1wP18uY2xvbmUoKTpffSxzLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgXz1wLmNsb25lKCk7cmV0dXJuIF8ucmVkPW51bGwsX30sZi5tb250PWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBuZXcgdShwKX0sSSh1LHMpLHUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx1LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgXz10aGlzLmltb2QocC5tdWwodGhp''@;'; put 'put ''cy5yaW52KSk7cmV0dXJuIF8ucmVkPW51bGwsX30sdS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLF8pe2lmKHAuaXNaZXJvKCl8fF8uaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIGs9cC5pbXVsKF8pLEw9ay5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp''@;'; put 'put ''cy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkseT1rLmlzdWIoTCkuaXVzaHJuKHRoaXMuc2hpZnQpLGw9eTtyZXR1cm4geS5jbXAodGhpcy5tKT49MD9sPXkuaXN1Yih0aGlzLm0pOnkuY21wbigwKTwwJiYobD15LmlhZGQodGhpcy5tKSksbC5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LHUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLF8pe2lmKHAuaXNaZXJvKCl8fF8uaXNaZXJvKCkpcmV0dXJuIG5ldyBmKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgaz1wLm11bChfKSxMPWsubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0''@;'; put 'put ''aGlzLm0pLHk9ay5pc3ViKEwpLml1c2hybih0aGlzLnNoaWZ0KSxsPXk7cmV0dXJuIHkuY21wKHRoaXMubSk+PTA/bD15LmlzdWIodGhpcy5tKTp5LmNtcG4oMCk8MCYmKGw9eS5pYWRkKHRoaXMubSkpLGwuX2ZvcmNlUmVkKHRoaXMpfSx1LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHRlPWQubm1kKHRlKSx0aGlzKX0sMzUyOTQodGUsaixkKXt2YXIgUztmdW5jdGlvbiBoKEkpe3RoaXMucmFuZD1JfWlmKHRlLmV4cG9ydHM9ZnVuY3Rpb24oZil7cmV0dXJuIFN8''@;'; put 'put ''fChTPW5ldyBoKG51bGwpKSxTLmdlbmVyYXRlKGYpfSx0ZS5leHBvcnRzLlJhbmQ9aCxoLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5fcmFuZChmKX0saC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oZil7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0''@;'; put 'put ''aGlzLnJhbmQuZ2V0Qnl0ZXMoZik7Zm9yKHZhciBUPW5ldyBVaW50OEFycmF5KGYpLEE9MDtBPFQubGVuZ3RoO0ErKylUW0FdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIFR9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVz''@;'; put 'put ''P2gucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGYpe3ZhciBUPW5ldyBVaW50OEFycmF5KGYpO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoVCksVH06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/aC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rp''@;'; put 'put ''b24oZil7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoZik7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFQpLFR9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoaC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQi''@;'; put 'put ''KX0pO2Vsc2UgdHJ5e3ZhciBvPWQoOTE0MjYpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO2gucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGYpe3JldHVybiBvLnJhbmRvbUJ5dGVzKGYpfX1jYXRjaHt9fSwxMjM3''@;'; put 'put ''NSh0ZSxqLGQpe3ZhciBTPWQoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBoKE0pe1MuaXNCdWZmZXIoTSl8fChNPVMuZnJvbShNKSk7Zm9yKHZhciBPPU0ubGVuZ3RoLzR8MCxEPW5ldyBBcnJheShPKSxFPTA7RTxPO0UrKylEW0VdPU0ucmVhZFVJbnQzMkJFKDQqRSk7cmV0dXJuIER9ZnVuY3Rp''@;'; put 'put ''b24gbyhNKXtmb3IoOzA8TS5sZW5ndGg7TSsrKU1bMF09MH1mdW5jdGlvbiBJKE0sTyxELEUsQil7Zm9yKHZhciBuZSxzZSxoZSxfZSxGPURbMF0sTj1EWzFdLEg9RFsyXSx6PURbM10sWj1NWzBdXk9bMF0sVT1NWzFdXk9bMV0sSz1NWzJdXk9bMl0sWD1NWzNdXk9bM10sbWU9NCxGZT0xO0Zl''@;'; put 'put ''PEI7RmUrKyluZT1GW1o+Pj4yNF1eTltVPj4+MTYmMjU1XV5IW0s+Pj44JjI1NV1eelsyNTUmWF1eT1ttZSsrXSxzZT1GW1U+Pj4yNF1eTltLPj4+MTYmMjU1XV5IW1g+Pj44JjI1NV1eelsyNTUmWl1eT1ttZSsrXSxoZT1GW0s+Pj4yNF1eTltYPj4+MTYmMjU1XV5IW1o+Pj44JjI1NV1eelsy''@;'; put 'put ''NTUmVV1eT1ttZSsrXSxfZT1GW1g+Pj4yNF1eTltaPj4+MTYmMjU1XV5IW1U+Pj44JjI1NV1eelsyNTUmS11eT1ttZSsrXSxaPW5lLFU9c2UsSz1oZSxYPV9lO3JldHVybiBuZT0oRVtaPj4+MjRdPDwyNHxFW1U+Pj4xNiYyNTVdPDwxNnxFW0s+Pj44JjI1NV08PDh8RVsyNTUmWF0pXk9bbWUr''@;'; put 'put ''K10sc2U9KEVbVT4+PjI0XTw8MjR8RVtLPj4+MTYmMjU1XTw8MTZ8RVtYPj4+OCYyNTVdPDw4fEVbMjU1JlpdKV5PW21lKytdLGhlPShFW0s+Pj4yNF08PDI0fEVbWD4+PjE2JjI1NV08PDE2fEVbWj4+PjgmMjU1XTw8OHxFWzI1NSZVXSleT1ttZSsrXSxfZT0oRVtYPj4+MjRdPDwyNHxFW1o+''@;'; put 'put ''Pj4xNiYyNTVdPDwxNnxFW1U+Pj44JjI1NV08PDh8RVsyNTUmS10pXk9bbWUrK10sW25lPj4+PTAsc2U+Pj49MCxoZT4+Pj0wLF9lPj4+PTBdfXZhciBmPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxUPWZ1bmN0aW9uKCl7Zm9yKHZhciBNPW5ldyBBcnJheSgyNTYpLE89MDtPPDI1''@;'; put 'put ''NjtPKyspTVtPXT1PPDEyOD9PPDwxOk88PDFeMjgzO2Zvcih2YXIgRD1bXSxFPVtdLEI9W1tdLFtdLFtdLFtdXSxGPVtbXSxbXSxbXSxbXV0sTj0wLEg9MCx6PTA7ejwyNTY7Kyt6KXt2YXIgWj1IXkg8PDFeSDw8Ml5IPDwzXkg8PDQ7RFtOXT1aPVo+Pj44XjI1NSZaXjk5LEVbWl09Tjt2YXIg''@;'; put 'put ''VT1NW05dLEs9TVtVXSxYPU1bS10sbmU9MjU3Kk1bWl1eMTY4NDMwMDgqWjtCWzBdW05dPW5lPDwyNHxuZT4+PjgsQlsxXVtOXT1uZTw8MTZ8bmU+Pj4xNixCWzJdW05dPW5lPDw4fG5lPj4+MjQsQlszXVtOXT1uZSxGWzBdW1pdPShuZT0xNjg0MzAwOSpYXjY1NTM3KkteMjU3KlVeMTY4NDMw''@;'; put 'put ''MDgqTik8PDI0fG5lPj4+OCxGWzFdW1pdPW5lPDwxNnxuZT4+PjE2LEZbMl1bWl09bmU8PDh8bmU+Pj4yNCxGWzNdW1pdPW5lLDA9PT1OP049SD0xOihOPVVeTVtNW01bWF5VXV1dLEhePU1bTVtIXV0pfXJldHVybntTQk9YOkQsSU5WX1NCT1g6RSxTVUJfTUlYOkIsSU5WX1NVQl9NSVg6Rn19''@;'; put 'put ''KCk7ZnVuY3Rpb24gQShNKXt0aGlzLl9rZXk9aChNKSx0aGlzLl9yZXNldCgpfUEuYmxvY2tTaXplPTE2LEEua2V5U2l6ZT0zMixBLnByb3RvdHlwZS5ibG9ja1NpemU9QS5ibG9ja1NpemUsQS5wcm90b3R5cGUua2V5U2l6ZT1BLmtleVNpemUsQS5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBNPXRoaXMuX2tleSxPPU0ubGVuZ3RoLEQ9Tys2LEU9NCooRCsxKSxCPVtdLEY9MDtGPE87RisrKUJbRl09TVtGXTtmb3IoRj1PO0Y8RTtGKyspe3ZhciBOPUJbRi0xXTtGJU89PTA/KE49VC5TQk9YWyhOPU48PDh8Tj4+PjI0KT4+PjI0XTw8MjR8VC5TQk9YW04+Pj4xNiYy''@;'; put 'put ''NTVdPDwxNnxULlNCT1hbTj4+PjgmMjU1XTw8OHxULlNCT1hbMjU1Jk5dLE5ePWZbRi9PfDBdPDwyNCk6Tz42JiZGJU89PTQmJihOPVQuU0JPWFtOPj4+MjRdPDwyNHxULlNCT1hbTj4+PjE2JjI1NV08PDE2fFQuU0JPWFtOPj4+OCYyNTVdPDw4fFQuU0JPWFsyNTUmTl0pLEJbRl09QltGLU9d''@;'; put 'put ''Xk59Zm9yKHZhciBIPVtdLHo9MDt6PEU7eisrKXt2YXIgWj1FLXosVT1CW1otKHolND8wOjQpXTtIW3pdPXo8NHx8Wjw9ND9VOlQuSU5WX1NVQl9NSVhbMF1bVC5TQk9YW1U+Pj4yNF1dXlQuSU5WX1NVQl9NSVhbMV1bVC5TQk9YW1U+Pj4xNiYyNTVdXV5ULklOVl9TVUJfTUlYWzJdW1QuU0JP''@;'; put 'put ''WFtVPj4+OCYyNTVdXV5ULklOVl9TVUJfTUlYWzNdW1QuU0JPWFsyNTUmVV1dfXRoaXMuX25Sb3VuZHM9RCx0aGlzLl9rZXlTY2hlZHVsZT1CLHRoaXMuX2ludktleVNjaGVkdWxlPUh9LEEucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihNKXtyZXR1cm4gSShNPWgoTSksdGhp''@;'; put 'put ''cy5fa2V5U2NoZWR1bGUsVC5TVUJfTUlYLFQuU0JPWCx0aGlzLl9uUm91bmRzKX0sQS5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKE0pe3ZhciBPPXRoaXMuZW5jcnlwdEJsb2NrUmF3KE0pLEQ9Uy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEQud3JpdGVVSW50MzJCRShPWzBdLDAp''@;'; put 'put ''LEQud3JpdGVVSW50MzJCRShPWzFdLDQpLEQud3JpdGVVSW50MzJCRShPWzJdLDgpLEQud3JpdGVVSW50MzJCRShPWzNdLDEyKSxEfSxBLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oTSl7dmFyIE89KE09aChNKSlbMV07TVsxXT1NWzNdLE1bM109Tzt2YXIgRD1JKE0sdGhpcy5f''@;'; put 'put ''aW52S2V5U2NoZWR1bGUsVC5JTlZfU1VCX01JWCxULklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLEU9Uy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEUud3JpdGVVSW50MzJCRShEWzBdLDApLEUud3JpdGVVSW50MzJCRShEWzNdLDQpLEUud3JpdGVVSW50MzJCRShEWzJdLDgpLEUud3JpdGVVSW50''@;'; put 'put ''MzJCRShEWzFdLDEyKSxFfSxBLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe28odGhpcy5fa2V5U2NoZWR1bGUpLG8odGhpcy5faW52S2V5U2NoZWR1bGUpLG8odGhpcy5fa2V5KX0sdGUuZXhwb3J0cy5BRVM9QX0sMTkzMDcodGUsaixkKXt2YXIgUz1kKDEyMzc1KSxoPWQoMjcwNTQpLkJ1''@;'; put 'put ''ZmZlcixvPWQoMzI0NyksST1kKDcxOTkzKSxmPWQoODU5MTcpLFQ9ZCgxMzU0NiksQT1kKDk1NzI1KTtmdW5jdGlvbiBEKEUsQixGLE4pe28uY2FsbCh0aGlzKTt2YXIgSD1oLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBTLkFFUyhCKTt2YXIgej10aGlzLl9jaXBoZXIuZW5jcnlwdEJs''@;'; put 'put ''b2NrKEgpO3RoaXMuX2doYXNoPW5ldyBmKHopLEY9ZnVuY3Rpb24gTyhFLEIsRil7aWYoMTI9PT1CLmxlbmd0aClyZXR1cm4gRS5fZmluSUQ9aC5jb25jYXQoW0IsaC5mcm9tKFswLDAsMCwxXSldKSxoLmNvbmNhdChbQixoLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBOPW5ldyBmKEYpLEg9Qi5s''@;'; put 'put ''ZW5ndGgsej1IJTE2O04udXBkYXRlKEIpLHomJk4udXBkYXRlKGguYWxsb2Moej0xNi16LDApKSxOLnVwZGF0ZShoLmFsbG9jKDgsMCkpO3ZhciBaPTgqSCxVPWguYWxsb2MoOCk7VS53cml0ZVVJbnRCRShaLDAsOCksTi51cGRhdGUoVSksRS5fZmluSUQ9Ti5zdGF0ZTt2YXIgSz1oLmZyb20o''@;'; put 'put ''RS5fZmluSUQpO3JldHVybiBBKEspLEt9KHRoaXMsRix6KSx0aGlzLl9wcmV2PWguZnJvbShGKSx0aGlzLl9jYWNoZT1oLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPWguYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1OLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9t''@;'; put 'put ''b2RlPUUsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1JKEQsbyksRC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihFKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgQj0xNi10aGlzLl9hbGVuJTE2O0I8MTYmJihCPWguYWxsb2MoQiwwKSx0aGlzLl9naGFz''@;'; put 'put ''aC51cGRhdGUoQikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgRj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxFKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/RTpGKSx0aGlzLl9sZW4rPUUubGVuZ3RoLEZ9LEQucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRo''@;'; put 'put ''aXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIEU9VCh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNy''@;'; put 'put ''eXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBNKEUsQil7dmFyIEY9MDtFLmxlbmd0aCE9PUIubGVuZ3RoJiZGKys7Zm9yKHZhciBOPU1hdGgubWluKEUubGVuZ3RoLEIubGVuZ3RoKSxIPTA7SDxOOysrSClGKz1FW0hdXkJbSF07cmV0dXJuIEZ9KEUs''@;'; put 'put ''dGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPUUsdGhpcy5fY2lwaGVyLnNjcnViKCl9LEQucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9k''@;'; put 'put ''ZWNyeXB0fHwhaC5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LEQucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oQil7aWYoIXRo''@;'; put 'put ''aXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9Qn0sRC5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEIpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVt''@;'; put 'put ''cHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShCKSx0aGlzLl9hbGVuKz1CLmxlbmd0aH0sdGUuZXhwb3J0cz1EfSw0MzM4OCh0ZSxqLGQpe3ZhciBTPWQoMzUwKSxoPWQoNjAxMDIpLG89ZCgzMjE5KTtqLmNyZWF0ZUNpcGhlcj1qLkNp''@;'; put 'put ''cGhlcj1TLmNyZWF0ZUNpcGhlcixqLmNyZWF0ZUNpcGhlcml2PWouQ2lwaGVyaXY9Uy5jcmVhdGVDaXBoZXJpdixqLmNyZWF0ZURlY2lwaGVyPWouRGVjaXBoZXI9aC5jcmVhdGVEZWNpcGhlcixqLmNyZWF0ZURlY2lwaGVyaXY9ai5EZWNpcGhlcml2PWguY3JlYXRlRGVjaXBoZXJpdixqLmxp''@;'; put 'put ''c3RDaXBoZXJzPWouZ2V0Q2lwaGVycz1mdW5jdGlvbiBJKCl7cmV0dXJuIE9iamVjdC5rZXlzKG8pfX0sNjAxMDIodGUsaixkKXt2YXIgUz1kKDE5MzA3KSxoPWQoMjcwNTQpLkJ1ZmZlcixvPWQoNjA1MDMpLEk9ZCg5MTgyMSksZj1kKDMyNDcpLFQ9ZCgxMjM3NSksQT1kKDE4MjExKTtmdW5j''@;'; put 'put ''dGlvbiBPKE4sSCx6KXtmLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEQsdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBULkFFUyhIKSx0aGlzLl9wcmV2PWguZnJvbSh6KSx0aGlzLl9tb2RlPU4sdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gRCgpe3RoaXMuY2Fj''@;'; put 'put ''aGU9aC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBCKE4sSCx6KXt2YXIgWj1vW04udG9Mb3dlckNhc2UoKV07aWYoIVopdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiB6JiYoej1oLmZyb20oeikpLCJHQ00iIT09Wi5tb2RlJiZ6''@;'; put 'put ''Lmxlbmd0aCE9PVouaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIit6Lmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBIJiYoSD1oLmZyb20oSCkpLEgubGVuZ3RoIT09Wi5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitI''@;'; put 'put ''Lmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1aLnR5cGU/bmV3IEkoWi5tb2R1bGUsSCx6LCEwKToiYXV0aCI9PT1aLnR5cGU/bmV3IFMoWi5tb2R1bGUsSCx6LCEwKTpuZXcgTyhaLm1vZHVsZSxILHopfWQoNzE5OTMpKE8sZiksTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlz''@;'; put 'put ''Ll9jYWNoZS5hZGQoTik7Zm9yKHZhciBILHosWj1bXTtIPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXo9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsSCksWi5wdXNoKHopO3JldHVybiBoLmNvbmNhdChaKX0sTy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49''@;'; put 'put ''dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gRShOKXt2YXIgSD1OWzE1XTtpZihIPDF8fEg+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciB6PS0xOysrejxIOylpZihOW3orKDE2LUgpXSE9''@;'; put 'put ''PUgpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1IKXJldHVybiBOLnNsaWNlKDAsMTYtSCl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLE4pKTtpZihOKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9''@;'; put 'put ''LE8ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIU4sdGhpc30sRC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe3RoaXMuY2FjaGU9aC5jb25jYXQoW3RoaXMuY2FjaGUsTl0pfSxELnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24o''@;'; put 'put ''Til7dmFyIEg7aWYoTil7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIEg9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLEh9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIEg9dGhpcy5jYWNoZS5zbGljZSgwLDE2''@;'; put 'put ''KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLEg7cmV0dXJuIG51bGx9LEQucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LGouY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24gRihOLEgpe3ZhciB6PW9bTi50b0xv''@;'; put 'put ''d2VyQ2FzZSgpXTtpZigheil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgWj1BKEgsITEsei5rZXksei5pdik7cmV0dXJuIEIoTixaLmtleSxaLml2KX0sai5jcmVhdGVEZWNpcGhlcml2PUJ9LDM1MCh0ZSxqLGQpe3ZhciBTPWQoNjA1MDMpLGg9ZCgxOTMw''@;'; put 'put ''Nyksbz1kKDI3MDU0KS5CdWZmZXIsST1kKDkxODIxKSxmPWQoMzI0NyksVD1kKDEyMzc1KSxBPWQoMTgyMTEpO2Z1bmN0aW9uIE8oTixILHope2YuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgRSx0aGlzLl9jaXBoZXI9bmV3IFQuQUVTKEgpLHRoaXMuX3ByZXY9by5mcm9tKHopLHRoaXMu''@;'; put 'put ''X21vZGU9Tix0aGlzLl9hdXRvcGFkZGluZz0hMH1kKDcxOTkzKShPLGYpLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7dGhpcy5fY2FjaGUuYWRkKE4pO2Zvcih2YXIgSCx6LFo9W107SD10aGlzLl9jYWNoZS5nZXQoKTspej10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxIKSxaLnB1''@;'; put 'put ''c2goeik7cmV0dXJuIG8uY29uY2F0KFopfTt2YXIgRD1vLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBFKCl7dGhpcy5jYWNoZT1vLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEIoTixILHope3ZhciBaPVNbTi50b0xvd2VyQ2FzZSgpXTtpZighWil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlk''@;'; put 'put ''IHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIEgmJihIPW8uZnJvbShIKSksSC5sZW5ndGghPT1aLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK0gubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHomJih6PW8uZnJvbSh6KSksIkdDTSIh''@;'; put 'put ''PT1aLm1vZGUmJnoubGVuZ3RoIT09Wi5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3oubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVoudHlwZT9uZXcgSShaLm1vZHVsZSxILHopOiJhdXRoIj09PVoudHlwZT9uZXcgaChaLm1vZHVsZSxILHopOm5ldyBPKFou''@;'; put 'put ''bW9kdWxlLEgseil9Ty5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gTj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxOKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxOO2lmKCFOLmVxdWFscyhEKSl0''@;'; put 'put ''aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxPLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFOLHRoaXN9LEUucHJvdG90eXBlLmFkZD1m''@;'; put 'put ''dW5jdGlvbihOKXt0aGlzLmNhY2hlPW8uY29uY2F0KFt0aGlzLmNhY2hlLE5dKX0sRS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBOPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgx''@;'; put 'put ''NiksTn1yZXR1cm4gbnVsbH0sRS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIE49MTYtdGhpcy5jYWNoZS5sZW5ndGgsSD1vLmFsbG9jVW5zYWZlKE4pLHo9LTE7Kyt6PE47KUgud3JpdGVVSW50OChOLHopO3JldHVybiBvLmNvbmNhdChbdGhpcy5jYWNoZSxIXSl9LGouY3Jl''@;'; put 'put ''YXRlQ2lwaGVyaXY9QixqLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBGKE4sSCl7dmFyIHo9U1tOLnRvTG93ZXJDYXNlKCldO2lmKCF6KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBaPUEoSCwhMSx6LmtleSx6Lml2KTtyZXR1cm4gQihOLFoua2V5LFouaXYp''@;'; put 'put ''fX0sODU5MTcodGUsaixkKXt2YXIgUz1kKDI3MDU0KS5CdWZmZXIsaD1TLmFsbG9jKDE2LDApO2Z1bmN0aW9uIEkoVCl7dmFyIEE9Uy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEEud3JpdGVVSW50MzJCRShUWzBdPj4+MCwwKSxBLndyaXRlVUludDMyQkUoVFsxXT4+PjAsNCksQS53cml0ZVVJ''@;'; put 'put ''bnQzMkJFKFRbMl0+Pj4wLDgpLEEud3JpdGVVSW50MzJCRShUWzNdPj4+MCwxMiksQX1mdW5jdGlvbiBmKFQpe3RoaXMuaD1ULHRoaXMuc3RhdGU9Uy5hbGxvYygxNiwwKSx0aGlzLmNhY2hlPVMuYWxsb2NVbnNhZmUoMCl9Zi5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oVCl7Zm9yKHZhciBB''@;'; put 'put ''PS0xOysrQTxULmxlbmd0aDspdGhpcy5zdGF0ZVtBXV49VFtBXTt0aGlzLl9tdWx0aXBseSgpfSxmLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIE0sRCxUPWZ1bmN0aW9uIG8oVCl7cmV0dXJuW1QucmVhZFVJbnQzMkJFKDApLFQucmVhZFVJbnQzMkJFKDQpLFQucmVh''@;'; put 'put ''ZFVJbnQzMkJFKDgpLFQucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksQT1bMCwwLDAsMF0sRT0tMTsrK0U8MTI4Oyl7Zm9yKCEhKHRoaXMuc3RhdGVbfn4oRS84KV0mMTw8Ny1FJTgpJiYoQVswXV49VFswXSxBWzFdXj1UWzFdLEFbMl1ePVRbMl0sQVszXV49VFszXSksRD0hISgxJlRbM10p''@;'; put 'put ''LE09MztNPjA7TS0tKVRbTV09VFtNXT4+PjF8KDEmVFtNLTFdKTw8MzE7VFswXT1UWzBdPj4+MSxEJiYoVFswXT1UWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9SShBKX0sZi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFQpe3RoaXMuY2FjaGU9Uy5jb25jYXQoW3RoaXMuY2FjaGUsVF0pO2Zv''@;'; put 'put ''cih2YXIgQTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KUE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goQSl9LGYucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKFQsQSl7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlz''@;'; put 'put ''LmdoYXNoKFMuY29uY2F0KFt0aGlzLmNhY2hlLGhdLDE2KSksdGhpcy5naGFzaChJKFswLFQsMCxBXSkpLHRoaXMuc3RhdGV9LHRlLmV4cG9ydHM9Zn0sOTU3MjUodGUpe3RlLmV4cG9ydHM9ZnVuY3Rpb24gaihkKXtmb3IodmFyIGgsUz1kLmxlbmd0aDtTLS07KXtpZigyNTUhPT0oaD1kLnJl''@;'; put 'put ''YWRVSW50OChTKSkpe2grKyxkLndyaXRlVUludDgoaCxTKTticmVha31kLndyaXRlVUludDgoMCxTKX19fSwzNDEzMyh0ZSxqLGQpe3ZhciBTPWQoMTM1NDYpO2ouZW5jcnlwdD1mdW5jdGlvbihoLG8pe3ZhciBJPVMobyxoLl9wcmV2KTtyZXR1cm4gaC5fcHJldj1oLl9jaXBoZXIuZW5jcnlw''@;'; put 'put ''dEJsb2NrKEkpLGguX3ByZXZ9LGouZGVjcnlwdD1mdW5jdGlvbihoLG8pe3ZhciBJPWguX3ByZXY7aC5fcHJldj1vO3ZhciBmPWguX2NpcGhlci5kZWNyeXB0QmxvY2sobyk7cmV0dXJuIFMoZixJKX19LDE3MDkwKHRlLGosZCl7dmFyIFM9ZCgyNzA1NCkuQnVmZmVyLGg9ZCgxMzU0Nik7ZnVu''@;'; put 'put ''Y3Rpb24gbyhJLGYsVCl7dmFyIEE9Zi5sZW5ndGgsTT1oKGYsSS5fY2FjaGUpO3JldHVybiBJLl9jYWNoZT1JLl9jYWNoZS5zbGljZShBKSxJLl9wcmV2PVMuY29uY2F0KFtJLl9wcmV2LFQ/ZjpNXSksTX1qLmVuY3J5cHQ9ZnVuY3Rpb24oSSxmLFQpe2Zvcih2YXIgTSxBPVMuYWxsb2NVbnNh''@;'; put 'put ''ZmUoMCk7Zi5sZW5ndGg7KXtpZigwPT09SS5fY2FjaGUubGVuZ3RoJiYoSS5fY2FjaGU9SS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJLl9wcmV2KSxJLl9wcmV2PVMuYWxsb2NVbnNhZmUoMCkpLCEoSS5fY2FjaGUubGVuZ3RoPD1mLmxlbmd0aCkpe0E9Uy5jb25jYXQoW0EsbyhJLGYsVCldKTti''@;'; put 'put ''cmVha31BPVMuY29uY2F0KFtBLG8oSSxmLnNsaWNlKDAsTT1JLl9jYWNoZS5sZW5ndGgpLFQpXSksZj1mLnNsaWNlKE0pfXJldHVybiBBfX0sNzEwMzkodGUsaixkKXt2YXIgUz1kKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gaChJLGYsVCl7Zm9yKHZhciBFLEIsTT0tMSxEPTA7KytNPDg7KUQr''@;'; put 'put ''PSgxMjgmKEI9SS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJLl9wcmV2KVswXV4oRT1mJjE8PDctTT8xMjg6MCkpKT4+TSU4LEkuX3ByZXY9byhJLl9wcmV2LFQ/RTpCKTtyZXR1cm4gRH1mdW5jdGlvbiBvKEksZil7dmFyIFQ9SS5sZW5ndGgsQT0tMSxNPVMuYWxsb2NVbnNhZmUoSS5sZW5ndGgp''@;'; put 'put ''O2ZvcihJPVMuY29uY2F0KFtJLFMuZnJvbShbZl0pXSk7KytBPFQ7KU1bQV09SVtBXTw8MXxJW0ErMV0+Pjc7cmV0dXJuIE19ai5lbmNyeXB0PWZ1bmN0aW9uKEksZixUKXtmb3IodmFyIEE9Zi5sZW5ndGgsTT1TLmFsbG9jVW5zYWZlKEEpLE89LTE7KytPPEE7KU1bT109aChJLGZbT10sVCk7''@;'; put 'put ''cmV0dXJuIE19fSw3MjU3Nih0ZSxqLGQpe3ZhciBTPWQoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBoKG8sSSxmKXt2YXIgQT1vLl9jaXBoZXIuZW5jcnlwdEJsb2NrKG8uX3ByZXYpWzBdXkk7cmV0dXJuIG8uX3ByZXY9Uy5jb25jYXQoW28uX3ByZXYuc2xpY2UoMSksUy5mcm9tKFtmP0k6QV0p''@;'; put 'put ''XSksQX1qLmVuY3J5cHQ9ZnVuY3Rpb24obyxJLGYpe2Zvcih2YXIgVD1JLmxlbmd0aCxBPVMuYWxsb2NVbnNhZmUoVCksTT0tMTsrK008VDspQVtNXT1oKG8sSVtNXSxmKTtyZXR1cm4gQX19LDcwMzM2KHRlLGosZCl7dmFyIFM9ZCgxMzU0NiksaD1kKDI3MDU0KS5CdWZmZXIsbz1kKDk1NzI1''@;'; put 'put ''KTtmdW5jdGlvbiBJKFQpe3ZhciBBPVQuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoVC5fcHJldik7cmV0dXJuIG8oVC5fcHJldiksQX1qLmVuY3J5cHQ9ZnVuY3Rpb24oVCxBKXt2YXIgTT1NYXRoLmNlaWwoQS5sZW5ndGgvMTYpLE89VC5fY2FjaGUubGVuZ3RoO1QuX2NhY2hlPWguY29uY2F0''@;'; put 'put ''KFtULl9jYWNoZSxoLmFsbG9jVW5zYWZlKDE2Kk0pXSk7Zm9yKHZhciBEPTA7RDxNO0QrKyl7dmFyIEU9SShUKSxCPU8rMTYqRDtULl9jYWNoZS53cml0ZVVJbnQzMkJFKEVbMF0sQiswKSxULl9jYWNoZS53cml0ZVVJbnQzMkJFKEVbMV0sQis0KSxULl9jYWNoZS53cml0ZVVJbnQzMkJFKEVb''@;'; put 'put ''Ml0sQis4KSxULl9jYWNoZS53cml0ZVVJbnQzMkJFKEVbM10sQisxMil9dmFyIEY9VC5fY2FjaGUuc2xpY2UoMCxBLmxlbmd0aCk7cmV0dXJuIFQuX2NhY2hlPVQuX2NhY2hlLnNsaWNlKEEubGVuZ3RoKSxTKEEsRil9fSwzNzUxMyh0ZSxqKXtqLmVuY3J5cHQ9ZnVuY3Rpb24oZCxTKXtyZXR1''@;'; put 'put ''cm4gZC5fY2lwaGVyLmVuY3J5cHRCbG9jayhTKX0sai5kZWNyeXB0PWZ1bmN0aW9uKGQsUyl7cmV0dXJuIGQuX2NpcGhlci5kZWNyeXB0QmxvY2soUyl9fSw2MDUwMyh0ZSxqLGQpe3ZhciBTPXtFQ0I6ZCgzNzUxMyksQ0JDOmQoMzQxMzMpLENGQjpkKDE3MDkwKSxDRkI4OmQoNzI1NzYpLENG''@;'; put 'put ''QjE6ZCg3MTAzOSksT0ZCOmQoNDY4NTQpLENUUjpkKDcwMzM2KSxHQ006ZCg3MDMzNil9LGg9ZCgzMjE5KTtmb3IodmFyIG8gaW4gaCloW29dLm1vZHVsZT1TW2hbb10ubW9kZV07dGUuZXhwb3J0cz1ofSw0Njg1NCh0ZSxqLGQpe3ZhciBTPWQoMTM1NDYpO2Z1bmN0aW9uIGgobyl7cmV0dXJu''@;'; put 'put ''IG8uX3ByZXY9by5fY2lwaGVyLmVuY3J5cHRCbG9jayhvLl9wcmV2KSxvLl9wcmV2fWouZW5jcnlwdD1mdW5jdGlvbihvLEkpe2Zvcig7by5fY2FjaGUubGVuZ3RoPEkubGVuZ3RoOylvLl9jYWNoZT1CdWZmZXIuY29uY2F0KFtvLl9jYWNoZSxoKG8pXSk7dmFyIGY9by5fY2FjaGUuc2xpY2Uo''@;'; put 'put ''MCxJLmxlbmd0aCk7cmV0dXJuIG8uX2NhY2hlPW8uX2NhY2hlLnNsaWNlKEkubGVuZ3RoKSxTKEksZil9fSw5MTgyMSh0ZSxqLGQpe3ZhciBTPWQoMTIzNzUpLGg9ZCgyNzA1NCkuQnVmZmVyLG89ZCgzMjQ3KTtmdW5jdGlvbiBmKFQsQSxNLE8pe28uY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9''@;'; put 'put ''bmV3IFMuQUVTKEEpLHRoaXMuX3ByZXY9aC5mcm9tKE0pLHRoaXMuX2NhY2hlPWguYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9aC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PU8sdGhpcy5fbW9kZT1UfWQoNzE5OTMpKGYsbyksZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv''@;'; put 'put ''bihUKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVCx0aGlzLl9kZWNyeXB0KX0sZi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LHRlLmV4cG9ydHM9Zn0sODg4NjIodGUsaixkKXt2YXIgUz1kKDM5Nzk5KSxoPWQoNDMzODgpLG89ZCg2''@;'; put 'put ''MDUwMyksST1kKDU5NTcxKSxmPWQoMTgyMTEpO2Z1bmN0aW9uIE0oRSxCLEYpe2lmKEU9RS50b0xvd2VyQ2FzZSgpLG9bRV0pcmV0dXJuIGguY3JlYXRlQ2lwaGVyaXYoRSxCLEYpO2lmKElbRV0pcmV0dXJuIG5ldyBTKHtrZXk6QixpdjpGLG1vZGU6RX0pO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''ImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIE8oRSxCLEYpe2lmKEU9RS50b0xvd2VyQ2FzZSgpLG9bRV0pcmV0dXJuIGguY3JlYXRlRGVjaXBoZXJpdihFLEIsRik7aWYoSVtFXSlyZXR1cm4gbmV3IFMoe2tleTpCLGl2OkYsbW9kZTpFLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1qLmNyZWF0ZUNpcGhlcj1qLkNpcGhlcj1mdW5jdGlvbiBUKEUsQil7dmFyIEYsTjtpZihFPUUudG9Mb3dlckNhc2UoKSxvW0VdKUY9b1tFXS5rZXksTj1vW0VdLml2O2Vsc2V7aWYoIUlbRV0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxp''@;'; put 'put ''ZCBzdWl0ZSB0eXBlIik7Rj04KklbRV0ua2V5LE49SVtFXS5pdn12YXIgSD1mKEIsITEsRixOKTtyZXR1cm4gTShFLEgua2V5LEguaXYpfSxqLmNyZWF0ZUNpcGhlcml2PWouQ2lwaGVyaXY9TSxqLmNyZWF0ZURlY2lwaGVyPWouRGVjaXBoZXI9ZnVuY3Rpb24gQShFLEIpe3ZhciBGLE47aWYo''@;'; put 'put ''RT1FLnRvTG93ZXJDYXNlKCksb1tFXSlGPW9bRV0ua2V5LE49b1tFXS5pdjtlbHNle2lmKCFJW0VdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO0Y9OCpJW0VdLmtleSxOPUlbRV0uaXZ9dmFyIEg9ZihCLCExLEYsTik7cmV0dXJuIE8oRSxILmtleSxILml2KX0s''@;'; put 'put ''ai5jcmVhdGVEZWNpcGhlcml2PWouRGVjaXBoZXJpdj1PLGoubGlzdENpcGhlcnM9ai5nZXRDaXBoZXJzPWZ1bmN0aW9uIEQoKXtyZXR1cm4gT2JqZWN0LmtleXMoSSkuY29uY2F0KGguZ2V0Q2lwaGVycygpKX19LDM5Nzk5KHRlLGosZCl7dmFyIFM9ZCgzMjQ3KSxoPWQoNzE1NDkpLG89ZCg3''@;'; put 'put ''MTk5MyksST1kKDI3MDU0KS5CdWZmZXIsZj17ImRlcy1lZGUzLWNiYyI6aC5DQkMuaW5zdGFudGlhdGUoaC5FREUpLCJkZXMtZWRlMyI6aC5FREUsImRlcy1lZGUtY2JjIjpoLkNCQy5pbnN0YW50aWF0ZShoLkVERSksImRlcy1lZGUiOmguRURFLCJkZXMtY2JjIjpoLkNCQy5pbnN0YW50aWF0''@;'; put 'put ''ZShoLkRFUyksImRlcy1lY2IiOmguREVTfTtmdW5jdGlvbiBUKEEpe1MuY2FsbCh0aGlzKTt2YXIgRCxNPUEubW9kZS50b0xvd2VyQ2FzZSgpLE89ZltNXTtEPUEuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBFPUEua2V5O0kuaXNCdWZmZXIoRSl8fChFPUkuZnJvbShFKSksKCJk''@;'; put 'put ''ZXMtZWRlIj09PU18fCJkZXMtZWRlLWNiYyI9PT1NKSYmKEU9SS5jb25jYXQoW0UsRS5zbGljZSgwLDgpXSkpO3ZhciBCPUEuaXY7SS5pc0J1ZmZlcihCKXx8KEI9SS5mcm9tKEIpKSx0aGlzLl9kZXM9Ty5jcmVhdGUoe2tleTpFLGl2OkIsdHlwZTpEfSl9Zi5kZXM9ZlsiZGVzLWNiYyJdLGYu''@;'; put 'put ''ZGVzMz1mWyJkZXMtZWRlMy1jYmMiXSx0ZS5leHBvcnRzPVQsbyhULFMpLFQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQSl7cmV0dXJuIEkuZnJvbSh0aGlzLl9kZXMudXBkYXRlKEEpKX0sVC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIEkuZnJvbSh0aGlzLl9kZXMu''@;'; put 'put ''ZmluYWwoKSl9fSw1OTU3MSh0ZSxqKXtqWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LGpbImRlcy1jYmMiXT1qLmRlcz17a2V5OjgsaXY6OH0salsiZGVzLWVkZTMtY2JjIl09ai5kZXMzPXtrZXk6MjQsaXY6OH0salsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LGpbImRlcy1lZGUtY2JjIl09''@;'; put 'put ''e2tleToxNixpdjo4fSxqWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMTQxMDUodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg5MTcpLGg9ZCgzMzQyKSxvPWQoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBJKEEpe3ZhciBPLE09QS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3tPPW5ldyBT''@;'; put 'put ''KGgoTSkpfXdoaWxlKE8uY21wKEEubW9kdWx1cyk+PTB8fCFPLnVtb2QoQS5wcmltZTEpfHwhTy51bW9kKEEucHJpbWUyKSk7cmV0dXJuIE99ZnVuY3Rpb24gVChBLE0pe3ZhciBPPWZ1bmN0aW9uIGYoQSl7dmFyIE09SShBKTtyZXR1cm57YmxpbmRlcjpNLnRvUmVkKFMubW9udChBLm1vZHVs''@;'; put 'put ''dXMpKS5yZWRQb3cobmV3IFMoQS5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6TS5pbnZtKEEubW9kdWx1cyl9fShNKSxEPU0ubW9kdWx1cy5ieXRlTGVuZ3RoKCksRT1uZXcgUyhBKS5tdWwoTy5ibGluZGVyKS51bW9kKE0ubW9kdWx1cyksQj1FLnRvUmVkKFMubW9udChN''@;'; put 'put ''LnByaW1lMSkpLEY9RS50b1JlZChTLm1vbnQoTS5wcmltZTIpKSxOPU0uY29lZmZpY2llbnQsSD1NLnByaW1lMSx6PU0ucHJpbWUyLFo9Qi5yZWRQb3coTS5leHBvbmVudDEpLmZyb21SZWQoKSxVPUYucmVkUG93KE0uZXhwb25lbnQyKS5mcm9tUmVkKCksSz1aLmlzdWIoVSkuaW11bChOKS51''@;'; put 'put ''bW9kKEgpLmltdWwoeik7cmV0dXJuIFUuaWFkZChLKS5pbXVsKE8udW5ibGluZGVyKS51bW9kKE0ubW9kdWx1cykudG9BcnJheUxpa2UobywiYmUiLEQpfVQuZ2V0cj1JLHRlLmV4cG9ydHM9VH0sOTk1NjAodGUsaixkKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1kKDYyOTUxKX0sNzkxNDMo''@;'; put 'put ''dGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyNzA1NCkuQnVmZmVyLGg9ZCg2NzIxMSksbz1kKDU5NDIpLEk9ZCg3MTk5MyksZj1kKDQzMTUwKSxUPWQoNzQ3NTQpLEE9ZCg2Mjk1MSk7ZnVuY3Rpb24gTShCKXtvLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIEY9QVtCXTtpZighRil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1GLmhhc2gsdGhpcy5faGFzaD1oKEYuaGFzaCksdGhpcy5fdGFnPUYuaWQsdGhpcy5fc2lnblR5cGU9Ri5zaWdufWZ1bmN0aW9uIE8oQil7by5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBGPUFbQl07''@;'; put 'put ''aWYoIUYpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD1oKEYuaGFzaCksdGhpcy5fdGFnPUYuaWQsdGhpcy5fc2lnblR5cGU9Ri5zaWdufWZ1bmN0aW9uIEQoQil7cmV0dXJuIG5ldyBNKEIpfWZ1bmN0aW9uIEUoQil7cmV0dXJuIG5ldyBPKEIp''@;'; put 'put ''fU9iamVjdC5rZXlzKEEpLmZvckVhY2goZnVuY3Rpb24oQil7QVtCXS5pZD1TLmZyb20oQVtCXS5pZCwiaGV4IiksQVtCLnRvTG93ZXJDYXNlKCldPUFbQl19KSxJKE0sby5Xcml0YWJsZSksTS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEYsTixIKXt0aGlzLl9oYXNoLnVwZGF0ZShGKSxI''@;'; put 'put ''KCl9LE0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihGLE4pe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIEY/Uy5mcm9tKEYsTik6RiksdGhpc30sTS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihGLE4pe3RoaXMuZW5kKCk7dmFyIEg9dGhpcy5faGFzaC5kaWdl''@;'; put 'put ''c3QoKSx6PWYoSCxGLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIE4/ei50b1N0cmluZyhOKTp6fSxJKE8sby5Xcml0YWJsZSksTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEYsTixIKXt0aGlzLl9oYXNoLnVwZGF0ZShGKSxIKCl9LE8ucHJvdG90''@;'; put 'put ''eXBlLnVwZGF0ZT1mdW5jdGlvbihGLE4pe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIEY/Uy5mcm9tKEYsTik6RiksdGhpc30sTy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEYsTixIKXt2YXIgej0ic3RyaW5nIj09dHlwZW9mIE4/Uy5mcm9tKE4sSCk6Tjt0''@;'; put 'put ''aGlzLmVuZCgpO3ZhciBaPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIFQoeixaLEYsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sdGUuZXhwb3J0cz17U2lnbjpELFZlcmlmeTpFLGNyZWF0ZVNpZ246RCxjcmVhdGVWZXJpZnk6RX19LDQzMTUwKHRlLGosZCl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBTPWQoMjcwNTQpLkJ1ZmZlcixoPWQoNTY0MzIpLG89ZCgxNDEwNSksST1kKDkwNTE4KS5lYyxmPWQoOTE3KSxUPWQoNjU2NjcpLEE9ZCg2NDU4OSk7ZnVuY3Rpb24gRihVLEssWCxuZSl7aWYoKFU9Uy5mcm9tKFUudG9BcnJheSgpKSkubGVuZ3RoPEsuYnl0ZUxlbmd0aCgpKXt2YXIgc2U9''@;'; put 'put ''Uy5hbGxvYyhLLmJ5dGVMZW5ndGgoKS1VLmxlbmd0aCk7VT1TLmNvbmNhdChbc2UsVV0pfXZhciBoZT1YLmxlbmd0aCxfZT1mdW5jdGlvbiBIKFUsSyl7VT0oVT1OKFUsSykpLm1vZChLKTt2YXIgWD1TLmZyb20oVS50b0FycmF5KCkpO2lmKFgubGVuZ3RoPEsuYnl0ZUxlbmd0aCgpKXt2YXIg''@;'; put 'put ''bmU9Uy5hbGxvYyhLLmJ5dGVMZW5ndGgoKS1YLmxlbmd0aCk7WD1TLmNvbmNhdChbbmUsWF0pfXJldHVybiBYfShYLEspLG1lPVMuYWxsb2MoaGUpO21lLmZpbGwoMSk7dmFyIEZlPVMuYWxsb2MoaGUpO3JldHVybiBGZT1oKG5lLEZlKS51cGRhdGUobWUpLnVwZGF0ZShTLmZyb20oWzBdKSku''@;'; put 'put ''dXBkYXRlKFUpLnVwZGF0ZShfZSkuZGlnZXN0KCksbWU9aChuZSxGZSkudXBkYXRlKG1lKS5kaWdlc3QoKSx7azpGZT1oKG5lLEZlKS51cGRhdGUobWUpLnVwZGF0ZShTLmZyb20oWzFdKSkudXBkYXRlKFUpLnVwZGF0ZShfZSkuZGlnZXN0KCksdjptZT1oKG5lLEZlKS51cGRhdGUobWUpLmRp''@;'; put 'put ''Z2VzdCgpfX1mdW5jdGlvbiBOKFUsSyl7dmFyIFg9bmV3IGYoVSksbmU9KFUubGVuZ3RoPDwzKS1LLmJpdExlbmd0aCgpO3JldHVybiBuZT4wJiZYLmlzaHJuKG5lKSxYfWZ1bmN0aW9uIHooVSxLLFgpe3ZhciBuZSxzZTtkb3tmb3IobmU9Uy5hbGxvYygwKTs4Km5lLmxlbmd0aDxVLmJpdExl''@;'; put 'put ''bmd0aCgpOylLLnY9aChYLEsuaykudXBkYXRlKEsudikuZGlnZXN0KCksbmU9Uy5jb25jYXQoW25lLEsudl0pO3NlPU4obmUsVSksSy5rPWgoWCxLLmspLnVwZGF0ZShLLnYpLnVwZGF0ZShTLmZyb20oWzBdKSkuZGlnZXN0KCksSy52PWgoWCxLLmspLnVwZGF0ZShLLnYpLmRpZ2VzdCgpfXdo''@;'; put 'put ''aWxlKC0xIT09c2UuY21wKFUpKTtyZXR1cm4gc2V9ZnVuY3Rpb24gWihVLEssWCxuZSl7cmV0dXJuIFUudG9SZWQoZi5tb250KFgpKS5yZWRQb3coSykuZnJvbVJlZCgpLm1vZChuZSl9dGUuZXhwb3J0cz1mdW5jdGlvbiBPKFUsSyxYLG5lLHNlKXt2YXIgaGU9VChLKTtpZihoZS5jdXJ2ZSl7''@;'; put 'put ''aWYoImVjZHNhIiE9PW5lJiYiZWNkc2EvcnNhIiE9PW5lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBEKFUsSyl7dmFyIFg9QVtLLmN1cnZlLmpvaW4oIi4iKV07aWYoIVgpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIr''@;'; put 'put ''Sy5jdXJ2ZS5qb2luKCIuIikpO3ZhciBoZT1uZXcgSShYKS5rZXlGcm9tUHJpdmF0ZShLLnByaXZhdGVLZXkpLnNpZ24oVSk7cmV0dXJuIFMuZnJvbShoZS50b0RFUigpKX0oVSxoZSl9aWYoImRzYSI9PT1oZS50eXBlKXtpZigiZHNhIiE9PW5lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJp''@;'; put 'put ''dmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBFKFUsSyxYKXtmb3IodmFyIEZlLG5lPUsucGFyYW1zLnByaXZfa2V5LHNlPUsucGFyYW1zLnAsaGU9Sy5wYXJhbXMucSxfZT1LLnBhcmFtcy5nLG1lPW5ldyBmKDApLFI9TihVLGhlKS5tb2QoaGUpLHM9ITEsdT1GKG5lLGhlLFUsWCk7''@;'; put 'put ''ITE9PT1zOyltZT1aKF9lLEZlPXooaGUsdSxYKSxzZSxoZSksMD09PShzPUZlLmludm0oaGUpLmltdWwoUi5hZGQobmUubXVsKG1lKSkpLm1vZChoZSkpLmNtcG4oMCkmJihzPSExLG1lPW5ldyBmKDApKTtyZXR1cm4gZnVuY3Rpb24gQihVLEspe1U9VS50b0FycmF5KCksSz1LLnRvQXJyYXko''@;'; put 'put ''KSwxMjgmVVswXSYmKFU9WzBdLmNvbmNhdChVKSksMTI4JktbMF0mJihLPVswXS5jb25jYXQoSykpO3ZhciBuZT1bNDgsVS5sZW5ndGgrSy5sZW5ndGgrNCwyLFUubGVuZ3RoXTtyZXR1cm4gbmU9bmUuY29uY2F0KFUsWzIsSy5sZW5ndGhdLEspLFMuZnJvbShuZSl9KG1lLHMpfShVLGhlLFgp''@;'; put 'put ''fWlmKCJyc2EiIT09bmUmJiJlY2RzYS9yc2EiIT09bmUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9pZCAwIT09Sy5wYWRkaW5nJiYxIT09Sy5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUi''@;'; put 'put ''KTtVPVMuY29uY2F0KFtzZSxVXSk7Zm9yKHZhciBfZT1oZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxtZT1bMCwxXTtVLmxlbmd0aCttZS5sZW5ndGgrMTxfZTspbWUucHVzaCgyNTUpO21lLnB1c2goMCk7Zm9yKHZhciBGZT0tMTsrK0ZlPFUubGVuZ3RoOyltZS5wdXNoKFVbRmVdKTtyZXR1cm4g''@;'; put 'put ''byhtZSxoZSl9LHRlLmV4cG9ydHMuZ2V0S2V5PUYsdGUuZXhwb3J0cy5tYWtlS2V5PXp9LDc0NzU0KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjcwNTQpLkJ1ZmZlcixoPWQoOTE3KSxvPWQoOTA1MTgpLmVjLEk9ZCg2NTY2NyksZj1kKDY0NTg5KTtmdW5jdGlvbiBPKEQsRSl7aWYo''@;'; put 'put ''RC5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihELmNtcChFKT49MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIil9dGUuZXhwb3J0cz1mdW5jdGlvbiBUKEQsRSxCLEYsTil7dmFyIEg9SShCKTtpZigiZWMiPT09SC50eXBlKXtpZigiZWNkc2EiIT09''@;'; put 'put ''RiYmImVjZHNhL3JzYSIhPT1GKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEEoRCxFLEIpe3ZhciBGPWZbQi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFGKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAi''@;'; put 'put ''K0IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IG8oRikudmVyaWZ5KEUsRCxCLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KEQsRSxIKX1pZigiZHNhIj09PUgudHlwZSl7aWYoImRzYSIhPT1GKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtl''@;'; put 'put ''eSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE0oRCxFLEIpe3ZhciBGPUIuZGF0YS5wLE49Qi5kYXRhLnEsSD1CLmRhdGEuZyx6PUIuZGF0YS5wdWJfa2V5LFo9SS5zaWduYXR1cmUuZGVjb2RlKEQsImRlciIpLFU9Wi5zLEs9Wi5yO08oVSxOKSxPKEssTik7dmFyIFg9aC5tb250KEYpLG5lPVUu''@;'; put 'put ''aW52bShOKTtyZXR1cm4gMD09PUgudG9SZWQoWCkucmVkUG93KG5ldyBoKEUpLm11bChuZSkubW9kKE4pKS5mcm9tUmVkKCkubXVsKHoudG9SZWQoWCkucmVkUG93KEsubXVsKG5lKS5tb2QoTikpLmZyb21SZWQoKSkubW9kKEYpLm1vZChOKS5jbXAoSyl9KEQsRSxIKX1pZigicnNhIiE9PUYm''@;'; put 'put ''JiJlY2RzYS9yc2EiIT09Ril0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO0U9Uy5jb25jYXQoW04sRV0pO2Zvcih2YXIgej1ILm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFo9WzFdLFU9MDtFLmxlbmd0aCtaLmxlbmd0aCsyPHo7KVoucHVzaCgyNTUpLFUrPTE7Wi5wdXNo''@;'; put 'put ''KDApO2Zvcih2YXIgSz0tMTsrK0s8RS5sZW5ndGg7KVoucHVzaChFW0tdKTtaPVMuZnJvbShaKTt2YXIgWD1oLm1vbnQoSC5tb2R1bHVzKTtEPShEPW5ldyBoKEQpLnRvUmVkKFgpKS5yZWRQb3cobmV3IGgoSC5wdWJsaWNFeHBvbmVudCkpLEQ9Uy5mcm9tKEQuZnJvbVJlZCgpLnRvQXJyYXko''@;'; put 'put ''KSk7dmFyIG5lPVU8OD8xOjA7Zm9yKHo9TWF0aC5taW4oRC5sZW5ndGgsWi5sZW5ndGgpLEQubGVuZ3RoIT09Wi5sZW5ndGgmJihuZT0xKSxLPS0xOysrSzx6OyluZXw9RFtLXV5aW0tdO3JldHVybiAwPT09bmV9fSwxMzU0Nih0ZSl7dGUuZXhwb3J0cz1mdW5jdGlvbihkLFMpe2Zvcih2YXIg''@;'; put 'put ''aD1NYXRoLm1pbihkLmxlbmd0aCxTLmxlbmd0aCksbz1uZXcgQnVmZmVyKGgpLEk9MDtJPGg7KytJKW9bSV09ZFtJXV5TW0ldO3JldHVybiBvfX0sODM4MzgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgxMzk4MSksaD1kKDIyMDIwKSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtqLkJ1ZmZlcj1BLGouU2xvd0J1ZmZlcj1mdW5jdGlvbiBVKE1lKXtyZXR1cm4rTWUhPU1lJiYoTWU9MCksQS5hbGxvYygrTWUpfSxqLklOU1BFQ1RfTUFY''@;'; put 'put ''X0JZVEVTPTUwO3ZhciBJPTIxNDc0ODM2NDc7ZnVuY3Rpb24gVChNZSl7aWYoTWU+SSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK01lKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgSWU9bmV3IFVpbnQ4QXJyYXkoTWUpO3JldHVybiBPYmplY3Quc2V0''@;'; put 'put ''UHJvdG90eXBlT2YoSWUsQS5wcm90b3R5cGUpLEllfWZ1bmN0aW9uIEEoTWUsSWUsYmUpe2lmKCJudW1iZXIiPT10eXBlb2YgTWUpe2lmKCJzdHJpbmciPT10eXBlb2YgSWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcu''@;'; put 'put ''IFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIEUoTWUpfXJldHVybiBNKE1lLEllLGJlKX1mdW5jdGlvbiBNKE1lLEllLGJlKXtpZigic3RyaW5nIj09dHlwZW9mIE1lKXJldHVybiBmdW5jdGlvbiBCKE1lLEllKXtpZigoInN0cmluZyIhPXR5cGVvZiBJZXx8IiI9PT1JZSkmJihJZT0i''@;'; put 'put ''dXRmOCIpLCFBLmlzRW5jb2RpbmcoSWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSWUpO3ZhciBiZT0wfEsoTWUsSWUpLHdlPVQoYmUpLHB0PXdlLndyaXRlKE1lLEllKTtyZXR1cm4gcHQhPT1iZSYmKHdlPXdlLnNsaWNlKDAscHQpKSx3ZX0oTWUsSWUpO2lm''@;'; put 'put ''KEFycmF5QnVmZmVyLmlzVmlldyhNZSkpcmV0dXJuIGZ1bmN0aW9uIE4oTWUpe2lmKENlKE1lLFVpbnQ4QXJyYXkpKXt2YXIgSWU9bmV3IFVpbnQ4QXJyYXkoTWUpO3JldHVybiBIKEllLmJ1ZmZlcixJZS5ieXRlT2Zmc2V0LEllLmJ5dGVMZW5ndGgpfXJldHVybiBGKE1lKX0oTWUpO2lmKG51''@;'; put 'put ''bGw9PU1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIE1lKTtpZihDZShNZSxBcnJh''@;'; put 'put ''eUJ1ZmZlcil8fE1lJiZDZShNZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoQ2UoTWUsU2hhcmVkQXJyYXlCdWZmZXIpfHxNZSYmQ2UoTWUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEgoTWUsSWUsYmUpO2lmKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgTWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIHdlPU1lLnZhbHVlT2YmJk1lLnZhbHVlT2YoKTtpZihudWxsIT13ZSYmd2UhPT1NZSlyZXR1cm4g''@;'; put 'put ''QS5mcm9tKHdlLEllLGJlKTt2YXIgcHQ9ZnVuY3Rpb24geihNZSl7aWYoQS5pc0J1ZmZlcihNZSkpe3ZhciBJZT0wfFooTWUubGVuZ3RoKSxiZT1UKEllKTtyZXR1cm4gMD09PWJlLmxlbmd0aHx8TWUuY29weShiZSwwLDAsSWUpLGJlfXJldHVybiB2b2lkIDAhPT1NZS5sZW5ndGg/Im51bWJl''@;'; put 'put ''ciIhPXR5cGVvZiBNZS5sZW5ndGh8fGtlKE1lLmxlbmd0aCk/VCgwKTpGKE1lKToiQnVmZmVyIj09PU1lLnR5cGUmJkFycmF5LmlzQXJyYXkoTWUuZGF0YSk/RihNZS5kYXRhKTp2b2lkIDB9KE1lKTtpZihwdClyZXR1cm4gcHQ7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIE1lW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIEEuZnJvbShNZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxJZSxiZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5''@;'; put 'put ''cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgTWUpfWZ1bmN0aW9uIE8oTWUpe2lmKCJudW1iZXIiIT10eXBlb2YgTWUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11''@;'; put 'put ''c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihNZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrTWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIEUoTWUpe3JldHVybiBPKE1lKSxUKE1lPDA/MDowfFooTWUpKX1mdW5jdGlvbiBGKE1lKXtm''@;'; put 'put ''b3IodmFyIEllPU1lLmxlbmd0aDwwPzA6MHxaKE1lLmxlbmd0aCksYmU9VChJZSksd2U9MDt3ZTxJZTt3ZSs9MSliZVt3ZV09MjU1Jk1lW3dlXTtyZXR1cm4gYmV9ZnVuY3Rpb24gSChNZSxJZSxiZSl7aWYoSWU8MHx8TWUuYnl0ZUxlbmd0aDxJZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9m''@;'; put 'put ''ZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoTWUuYnl0ZUxlbmd0aDxJZSsoYmV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgd2U7cmV0dXJuIHdlPXZvaWQgMD09PUllJiZ2b2lkIDA9PT1i''@;'; put 'put ''ZT9uZXcgVWludDhBcnJheShNZSk6dm9pZCAwPT09YmU/bmV3IFVpbnQ4QXJyYXkoTWUsSWUpOm5ldyBVaW50OEFycmF5KE1lLEllLGJlKSxPYmplY3Quc2V0UHJvdG90eXBlT2Yod2UsQS5wcm90b3R5cGUpLHdlfWZ1bmN0aW9uIFooTWUpe2lmKE1lPj1JKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitJLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8TWV9ZnVuY3Rpb24gSyhNZSxJZSl7aWYoQS5pc0J1ZmZlcihNZSkpcmV0dXJuIE1lLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5p''@;'; put 'put ''c1ZpZXcoTWUpfHxDZShNZSxBcnJheUJ1ZmZlcikpcmV0dXJuIE1lLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZm''@;'; put 'put ''ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgTWUpO3ZhciBiZT1NZS5sZW5ndGgsd2U9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighd2UmJjA9PT1iZSlyZXR1cm4gMDtmb3IodmFyIHB0PSExOzspc3dpdGNoKEllKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6''@;'; put 'put ''Y2FzZSJiaW5hcnkiOnJldHVybiBiZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBxZShNZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipiZTtjYXNlImhleCI6cmV0dXJuIGJlPj4+MTtjYXNlImJhc2U2''@;'; put 'put ''NCI6cmV0dXJuIHplKE1lKS5sZW5ndGg7ZGVmYXVsdDppZihwdClyZXR1cm4gd2U/LTE6cWUoTWUpLmxlbmd0aDtJZT0oIiIrSWUpLnRvTG93ZXJDYXNlKCkscHQ9ITB9fWZ1bmN0aW9uIFgoTWUsSWUsYmUpe3ZhciB3ZT0hMTtpZigodm9pZCAwPT09SWV8fEllPDApJiYoSWU9MCksSWU+dGhp''@;'; put 'put ''cy5sZW5ndGh8fCgodm9pZCAwPT09YmV8fGJlPnRoaXMubGVuZ3RoKSYmKGJlPXRoaXMubGVuZ3RoKSxiZTw9MCl8fChiZT4+Pj0wKTw9KEllPj4+PTApKXJldHVybiIiO2ZvcihNZXx8KE1lPSJ1dGY4Iik7Oylzd2l0Y2goTWUpe2Nhc2UiaGV4IjpyZXR1cm4geSh0aGlzLEllLGJlKTtjYXNl''@;'; put 'put ''InV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB2KHRoaXMsSWUsYmUpO2Nhc2UiYXNjaWkiOnJldHVybiBrKHRoaXMsSWUsYmUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEwodGhpcyxJZSxiZSk7Y2FzZSJiYXNlNjQiOnJldHVybiB1KHRoaXMsSWUsYmUpO2Nhc2UidWNzMiI6''@;'; put 'put ''Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gbCh0aGlzLEllLGJlKTtkZWZhdWx0OmlmKHdlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrTWUpO01lPShNZSsiIikudG9Mb3dlckNhc2UoKSx3ZT0hMH19ZnVuY3Rpb24gbmUo''@;'; put 'put ''TWUsSWUsYmUpe3ZhciB3ZT1NZVtJZV07TWVbSWVdPU1lW2JlXSxNZVtiZV09d2V9ZnVuY3Rpb24gc2UoTWUsSWUsYmUsd2UscHQpe2lmKDA9PT1NZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBiZT8od2U9YmUsYmU9MCk6YmU+MjE0NzQ4MzY0Nz9iZT0yMTQ3NDgzNjQ3''@;'; put 'put ''OmJlPC0yMTQ3NDgzNjQ4JiYoYmU9LTIxNDc0ODM2NDgpLGtlKGJlPStiZSkmJihiZT1wdD8wOk1lLmxlbmd0aC0xKSxiZTwwJiYoYmU9TWUubGVuZ3RoK2JlKSxiZT49TWUubGVuZ3RoKXtpZihwdClyZXR1cm4tMTtiZT1NZS5sZW5ndGgtMX1lbHNlIGlmKGJlPDApe2lmKCFwdClyZXR1cm4t''@;'; put 'put ''MTtiZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgSWUmJihJZT1BLmZyb20oSWUsd2UpKSxBLmlzQnVmZmVyKEllKSlyZXR1cm4gMD09PUllLmxlbmd0aD8tMTpoZShNZSxJZSxiZSx3ZSxwdCk7aWYoIm51bWJlciI9PXR5cGVvZiBJZSlyZXR1cm4gSWUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9wdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoTWUsSWUsYmUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoTWUsSWUsYmUpOmhlKE1lLFtJZV0sYmUsd2UscHQpO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''InZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGhlKE1lLEllLGJlLHdlLHB0KXt2YXIgdnQsS2U9MSxZZT1NZS5sZW5ndGgscXQ9SWUubGVuZ3RoO2lmKHZvaWQgMCE9PXdlJiYoInVjczIiPT09KHdlPVN0cmluZyh3ZSkudG9Mb3dlckNhc2UoKSl8fCJ1''@;'; put 'put ''Y3MtMiI9PT13ZXx8InV0ZjE2bGUiPT09d2V8fCJ1dGYtMTZsZSI9PT13ZSkpe2lmKE1lLmxlbmd0aDwyfHxJZS5sZW5ndGg8MilyZXR1cm4tMTtLZT0yLFllLz0yLHF0Lz0yLGJlLz0yfWZ1bmN0aW9uIGh0KCRlLExlKXtyZXR1cm4gMT09PUtlPyRlW0xlXTokZS5yZWFkVUludDE2QkUoTGUq''@;'; put 'put ''S2UpfWlmKHB0KXt2YXIgWXQ9LTE7Zm9yKHZ0PWJlO3Z0PFllO3Z0KyspaWYoaHQoTWUsdnQpPT09aHQoSWUsLTE9PT1ZdD8wOnZ0LVl0KSl7aWYoLTE9PT1ZdCYmKFl0PXZ0KSx2dC1ZdCsxPT09cXQpcmV0dXJuIFl0KktlfWVsc2UtMSE9PVl0JiYodnQtPXZ0LVl0KSxZdD0tMX1lbHNlIGZv''@;'; put 'put ''cihiZStxdD5ZZSYmKGJlPVllLXF0KSx2dD1iZTt2dD49MDt2dC0tKXtmb3IodmFyIHR0PSEwLFVlPTA7VWU8cXQ7VWUrKylpZihodChNZSx2dCtVZSkhPT1odChJZSxVZSkpe3R0PSExO2JyZWFrfWlmKHR0KXJldHVybiB2dH1yZXR1cm4tMX1mdW5jdGlvbiBfZShNZSxJZSxiZSx3ZSl7YmU9''@;'; put 'put ''TnVtYmVyKGJlKXx8MDt2YXIgcHQ9TWUubGVuZ3RoLWJlO3dlPyh3ZT1OdW1iZXIod2UpKT5wdCYmKHdlPXB0KTp3ZT1wdDt2YXIgS2U9SWUubGVuZ3RoO3dlPktlLzImJih3ZT1LZS8yKTtmb3IodmFyIFllPTA7WWU8d2U7KytZZSl7dmFyIHF0PXBhcnNlSW50KEllLnN1YnN0cigyKlllLDIp''@;'; put 'put ''LDE2KTtpZihrZShxdCkpcmV0dXJuIFllO01lW2JlK1llXT1xdH1yZXR1cm4gWWV9ZnVuY3Rpb24gbWUoTWUsSWUsYmUsd2Upe3JldHVybiBPZShxZShJZSxNZS5sZW5ndGgtYmUpLE1lLGJlLHdlKX1mdW5jdGlvbiBGZShNZSxJZSxiZSx3ZSl7cmV0dXJuIE9lKGZ1bmN0aW9uIHZlKE1lKXtm''@;'; put 'put ''b3IodmFyIEllPVtdLGJlPTA7YmU8TWUubGVuZ3RoOysrYmUpSWUucHVzaCgyNTUmTWUuY2hhckNvZGVBdChiZSkpO3JldHVybiBJZX0oSWUpLE1lLGJlLHdlKX1mdW5jdGlvbiBSKE1lLEllLGJlLHdlKXtyZXR1cm4gT2UoemUoSWUpLE1lLGJlLHdlKX1mdW5jdGlvbiBzKE1lLEllLGJlLHdl''@;'; put 'put ''KXtyZXR1cm4gT2UoZnVuY3Rpb24gdWUoTWUsSWUpe2Zvcih2YXIgYmUsd2UsS2U9W10sWWU9MDtZZTxNZS5sZW5ndGgmJiEoKEllLT0yKTwwKTsrK1llKXdlPShiZT1NZS5jaGFyQ29kZUF0KFllKSk+PjgsS2UucHVzaChiZSUyNTYpLEtlLnB1c2god2UpO3JldHVybiBLZX0oSWUsTWUubGVu''@;'; put 'put ''Z3RoLWJlKSxNZSxiZSx3ZSl9ZnVuY3Rpb24gdShNZSxJZSxiZSl7cmV0dXJuIFMuZnJvbUJ5dGVBcnJheSgwPT09SWUmJmJlPT09TWUubGVuZ3RoP01lOk1lLnNsaWNlKEllLGJlKSl9ZnVuY3Rpb24gdihNZSxJZSxiZSl7YmU9TWF0aC5taW4oTWUubGVuZ3RoLGJlKTtmb3IodmFyIHdlPVtd''@;'; put 'put ''LHB0PUllO3B0PGJlOyl7dmFyIGh0LHZ0LFl0LHR0LEtlPU1lW3B0XSxZZT1udWxsLHF0PUtlPjIzOT80OktlPjIyMz8zOktlPjE5MT8yOjE7aWYocHQrcXQ8PWJlKXN3aXRjaChxdCl7Y2FzZSAxOktlPDEyOCYmKFllPUtlKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihodD1NZVtwdCsxXSkp''@;'; put 'put ''JiYodHQ9KDMxJktlKTw8Nnw2MyZodCk+MTI3JiYoWWU9dHQpO2JyZWFrO2Nhc2UgMzp2dD1NZVtwdCsyXSwxMjg9PSgxOTImKGh0PU1lW3B0KzFdKSkmJjEyOD09KDE5MiZ2dCkmJih0dD0oMTUmS2UpPDwxMnwoNjMmaHQpPDw2fDYzJnZ0KT4yMDQ3JiYodHQ8NTUyOTZ8fHR0PjU3MzQzKSYm''@;'; put 'put ''KFllPXR0KTticmVhaztjYXNlIDQ6dnQ9TWVbcHQrMl0sWXQ9TWVbcHQrM10sMTI4PT0oMTkyJihodD1NZVtwdCsxXSkpJiYxMjg9PSgxOTImdnQpJiYxMjg9PSgxOTImWXQpJiYodHQ9KDE1JktlKTw8MTh8KDYzJmh0KTw8MTJ8KDYzJnZ0KTw8Nnw2MyZZdCk+NjU1MzUmJnR0PDExMTQxMTIm''@;'; put 'put ''JihZZT10dCl9bnVsbD09PVllPyhZZT02NTUzMyxxdD0xKTpZZT42NTUzNSYmKHdlLnB1c2goKFllLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxZZT01NjMyMHwxMDIzJlllKSx3ZS5wdXNoKFllKSxwdCs9cXR9cmV0dXJuIGZ1bmN0aW9uIF8oTWUpe3ZhciBJZT1NZS5sZW5ndGg7aWYoSWU8''@;'; put 'put ''PXApcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLE1lKTtmb3IodmFyIGJlPSIiLHdlPTA7d2U8SWU7KWJlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxNZS5zbGljZSh3ZSx3ZSs9cCkpO3JldHVybiBiZX0od2UpfWoua01heExlbmd0aD1JLCEoQS5U''@;'; put 'put ''WVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIGYoKXt0cnl7dmFyIE1lPW5ldyBVaW50OEFycmF5KDEpLEllPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKEllLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBl''@;'; put 'put ''T2YoTWUsSWUpLDQyPT09TWUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0''@;'; put 'put ''IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e2lmKEEuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihBLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksQS5w''@;'; put 'put ''b29sU2l6ZT04MTkyLEEuZnJvbT1mdW5jdGlvbihNZSxJZSxiZSl7cmV0dXJuIE0oTWUsSWUsYmUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoQS5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihBLFVpbnQ4QXJyYXkpLEEuYWxsb2M9ZnVuY3Rp''@;'; put 'put ''b24oTWUsSWUsYmUpe3JldHVybiBmdW5jdGlvbiBEKE1lLEllLGJlKXtyZXR1cm4gTyhNZSksTWU8PTA/VChNZSk6dm9pZCAwIT09SWU/InN0cmluZyI9PXR5cGVvZiBiZT9UKE1lKS5maWxsKEllLGJlKTpUKE1lKS5maWxsKEllKTpUKE1lKX0oTWUsSWUsYmUpfSxBLmFsbG9jVW5zYWZlPWZ1''@;'; put 'put ''bmN0aW9uKE1lKXtyZXR1cm4gRShNZSl9LEEuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKE1lKXtyZXR1cm4gRShNZSl9LEEuaXNCdWZmZXI9ZnVuY3Rpb24oSWUpe3JldHVybiBudWxsIT1JZSYmITA9PT1JZS5faXNCdWZmZXImJkllIT09QS5wcm90b3R5cGV9LEEuY29tcGFyZT1mdW5jdGlv''@;'; put 'put ''bihJZSxiZSl7aWYoQ2UoSWUsVWludDhBcnJheSkmJihJZT1BLmZyb20oSWUsSWUub2Zmc2V0LEllLmJ5dGVMZW5ndGgpKSxDZShiZSxVaW50OEFycmF5KSYmKGJlPUEuZnJvbShiZSxiZS5vZmZzZXQsYmUuYnl0ZUxlbmd0aCkpLCFBLmlzQnVmZmVyKEllKXx8IUEuaXNCdWZmZXIoYmUpKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKEllPT09YmUpcmV0dXJuIDA7Zm9yKHZhciB3ZT1JZS5sZW5ndGgscHQ9YmUubGVuZ3RoLEtlPTAsWWU9TWF0aC5taW4od2Us''@;'; put 'put ''cHQpO0tlPFllOysrS2UpaWYoSWVbS2VdIT09YmVbS2VdKXt3ZT1JZVtLZV0scHQ9YmVbS2VdO2JyZWFrfXJldHVybiB3ZTxwdD8tMTpwdDx3ZT8xOjB9LEEuaXNFbmNvZGluZz1mdW5jdGlvbihJZSl7c3dpdGNoKFN0cmluZyhJZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRm''@;'; put 'put ''OCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxBLmNvbmNhdD1mdW5jdGlvbihJ''@;'; put 'put ''ZSxiZSl7aWYoIUFycmF5LmlzQXJyYXkoSWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09SWUubGVuZ3RoKXJldHVybiBBLmFsbG9jKDApO3ZhciB3ZTtpZih2b2lkIDA9PT1iZSlmb3IoYmU9MCx3ZT0w''@;'; put 'put ''O3dlPEllLmxlbmd0aDsrK3dlKWJlKz1JZVt3ZV0ubGVuZ3RoO3ZhciBwdD1BLmFsbG9jVW5zYWZlKGJlKSxLZT0wO2Zvcih3ZT0wO3dlPEllLmxlbmd0aDsrK3dlKXt2YXIgWWU9SWVbd2VdO2lmKENlKFllLFVpbnQ4QXJyYXkpKUtlK1llLmxlbmd0aD5wdC5sZW5ndGg/QS5mcm9tKFllKS5j''@;'; put 'put ''b3B5KHB0LEtlKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChwdCxZZSxLZSk7ZWxzZXtpZighQS5pc0J1ZmZlcihZZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1llLmNvcHkocHQsS2UpfUtlKz1ZZS5s''@;'; put 'put ''ZW5ndGh9cmV0dXJuIHB0fSxBLmJ5dGVMZW5ndGg9SyxBLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsQS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIEllPXRoaXMubGVuZ3RoO2lmKEllJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0''@;'; put 'put ''aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBiZT0wO2JlPEllO2JlKz0yKW5lKHRoaXMsYmUsYmUrMSk7cmV0dXJuIHRoaXN9LEEucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBJZT10aGlzLmxlbmd0aDtpZihJZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6''@;'; put 'put ''ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgYmU9MDtiZTxJZTtiZSs9NCluZSh0aGlzLGJlLGJlKzMpLG5lKHRoaXMsYmUrMSxiZSsyKTtyZXR1cm4gdGhpc30sQS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIEllPXRoaXMubGVuZ3RoO2lmKEllJTgh''@;'; put 'put ''PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBiZT0wO2JlPEllO2JlKz04KW5lKHRoaXMsYmUsYmUrNyksbmUodGhpcyxiZSsxLGJlKzYpLG5lKHRoaXMsYmUrMixiZSs1KSxuZSh0aGlzLGJlKzMsYmUr''@;'; put 'put ''NCk7cmV0dXJuIHRoaXN9LEEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIEllPXRoaXMubGVuZ3RoO3JldHVybiAwPT09SWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/dih0aGlzLDAsSWUpOlguYXBwbHkodGhpcyxhcmd1bWVudHMpfSxBLnByb3RvdHlwZS50b0xvY2FsZVN0''@;'; put 'put ''cmluZz1BLnByb3RvdHlwZS50b1N0cmluZyxBLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oSWUpe2lmKCFBLmlzQnVmZmVyKEllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1JZXx8MD09PUEuY29tcGFyZSh0aGlzLEll''@;'; put 'put ''KX0sQS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBJZT0iIixiZT1qLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBJZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsYmUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+YmUmJihJZSs9IiAuLi4gIiks''@;'; put 'put ''IjxCdWZmZXIgIitJZSsiPiJ9LG8mJihBLnByb3RvdHlwZVtvXT1BLnByb3RvdHlwZS5pbnNwZWN0KSxBLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKEllLGJlLHdlLHB0LEtlKXtpZihDZShJZSxVaW50OEFycmF5KSYmKEllPUEuZnJvbShJZSxJZS5vZmZzZXQsSWUuYnl0ZUxlbmd0aCkp''@;'; put 'put ''LCFBLmlzQnVmZmVyKEllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBJZSk7aWYodm9pZCAwPT09YmUmJihiZT0wKSx2b2lkIDA9PT13ZSYm''@;'; put 'put ''KHdlPUllP0llLmxlbmd0aDowKSx2b2lkIDA9PT1wdCYmKHB0PTApLHZvaWQgMD09PUtlJiYoS2U9dGhpcy5sZW5ndGgpLGJlPDB8fHdlPkllLmxlbmd0aHx8cHQ8MHx8S2U+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHB0Pj1LZSYm''@;'; put 'put ''YmU+PXdlKXJldHVybiAwO2lmKHB0Pj1LZSlyZXR1cm4tMTtpZihiZT49d2UpcmV0dXJuIDE7aWYodGhpcz09PUllKXJldHVybiAwO2Zvcih2YXIgWWU9KEtlPj4+PTApLShwdD4+Pj0wKSxxdD0od2U+Pj49MCktKGJlPj4+PTApLGh0PU1hdGgubWluKFllLHF0KSx2dD10aGlzLnNsaWNlKHB0''@;'; put 'put ''LEtlKSxZdD1JZS5zbGljZShiZSx3ZSksdHQ9MDt0dDxodDsrK3R0KWlmKHZ0W3R0XSE9PVl0W3R0XSl7WWU9dnRbdHRdLHF0PVl0W3R0XTticmVha31yZXR1cm4gWWU8cXQ/LTE6cXQ8WWU/MTowfSxBLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihJZSxiZSx3ZSl7cmV0dXJuLTEhPT10''@;'; put 'put ''aGlzLmluZGV4T2YoSWUsYmUsd2UpfSxBLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gc2UodGhpcyxJZSxiZSx3ZSwhMCl9LEEucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gc2UodGhpcyxJZSxiZSx3ZSwhMSl9LEEu''@;'; put 'put ''cHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEllLGJlLHdlLHB0KXtpZih2b2lkIDA9PT1iZSlwdD0idXRmOCIsd2U9dGhpcy5sZW5ndGgsYmU9MDtlbHNlIGlmKHZvaWQgMD09PXdlJiYic3RyaW5nIj09dHlwZW9mIGJlKXB0PWJlLHdlPXRoaXMubGVuZ3RoLGJlPTA7ZWxzZXtpZighaXNGaW5p''@;'; put 'put ''dGUoYmUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtiZT4+Pj0wLGlzRmluaXRlKHdlKT8od2U+Pj49MCx2b2lkIDA9PT1wdCYmKHB0PSJ1dGY4IikpOihwdD13ZSx3ZT12''@;'; put 'put ''b2lkIDApfXZhciBLZT10aGlzLmxlbmd0aC1iZTtpZigodm9pZCAwPT09d2V8fHdlPktlKSYmKHdlPUtlKSxJZS5sZW5ndGg+MCYmKHdlPDB8fGJlPDApfHxiZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMi''@;'; put 'put ''KTtwdHx8KHB0PSJ1dGY4Iik7Zm9yKHZhciBZZT0hMTs7KXN3aXRjaChwdCl7Y2FzZSJoZXgiOnJldHVybiBfZSh0aGlzLEllLGJlLHdlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBtZSh0aGlzLEllLGJlLHdlKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnki''@;'; put 'put ''OnJldHVybiBGZSh0aGlzLEllLGJlLHdlKTtjYXNlImJhc2U2NCI6cmV0dXJuIFIodGhpcyxJZSxiZSx3ZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBzKHRoaXMsSWUsYmUsd2UpO2RlZmF1bHQ6aWYoWWUpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitwdCk7cHQ9KCIiK3B0KS50b0xvd2VyQ2FzZSgpLFllPSEwfX0sQS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMs''@;'; put 'put ''MCl9fTt2YXIgcD00MDk2O2Z1bmN0aW9uIGsoTWUsSWUsYmUpe3ZhciB3ZT0iIjtiZT1NYXRoLm1pbihNZS5sZW5ndGgsYmUpO2Zvcih2YXIgcHQ9SWU7cHQ8YmU7KytwdCl3ZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmTWVbcHRdKTtyZXR1cm4gd2V9ZnVuY3Rpb24gTChNZSxJZSxiZSl7''@;'; put 'put ''dmFyIHdlPSIiO2JlPU1hdGgubWluKE1lLmxlbmd0aCxiZSk7Zm9yKHZhciBwdD1JZTtwdDxiZTsrK3B0KXdlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE1lW3B0XSk7cmV0dXJuIHdlfWZ1bmN0aW9uIHkoTWUsSWUsYmUpe3ZhciB3ZT1NZS5sZW5ndGg7KCFJZXx8SWU8MCkmJihJZT0wKSwoIWJl''@;'; put 'put ''fHxiZTwwfHxiZT53ZSkmJihiZT13ZSk7Zm9yKHZhciBwdD0iIixLZT1JZTtLZTxiZTsrK0tlKXB0Kz14ZVtNZVtLZV1dO3JldHVybiBwdH1mdW5jdGlvbiBsKE1lLEllLGJlKXtmb3IodmFyIHdlPU1lLnNsaWNlKEllLGJlKSxwdD0iIixLZT0wO0tlPHdlLmxlbmd0aC0xO0tlKz0yKXB0Kz1T''@;'; put 'put ''dHJpbmcuZnJvbUNoYXJDb2RlKHdlW0tlXSsyNTYqd2VbS2UrMV0pO3JldHVybiBwdH1mdW5jdGlvbiBiKE1lLEllLGJlKXtpZihNZSUxIT0wfHxNZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihNZStJZT5iZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigi''@;'; put 'put ''VHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIHEoTWUsSWUsYmUsd2UscHQsS2Upe2lmKCFBLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoSWU+cHR8''@;'; put 'put ''fEllPEtlKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihiZSt3ZT5NZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEcoTWUsSWUsYmUsd2UscHQsS2Upe2lmKGJlK3dl''@;'; put 'put ''Pk1lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoYmU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUShNZSxJZSxiZSx3ZSxwdCl7cmV0dXJuIEllPStJZSxiZT4+Pj0wLHB0fHxHKE1lLDAs''@;'; put 'put ''YmUsNCksaC53cml0ZShNZSxJZSxiZSx3ZSwyMyw0KSxiZSs0fWZ1bmN0aW9uIHBlKE1lLEllLGJlLHdlLHB0KXtyZXR1cm4gSWU9K0llLGJlPj4+PTAscHR8fEcoTWUsMCxiZSw4KSxoLndyaXRlKE1lLEllLGJlLHdlLDUyLDgpLGJlKzh9QS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oSWUs''@;'; put 'put ''YmUpe3ZhciB3ZT10aGlzLmxlbmd0aDsoSWU9fn5JZSk8MD8oSWUrPXdlKTwwJiYoSWU9MCk6SWU+d2UmJihJZT13ZSksKGJlPXZvaWQgMD09PWJlP3dlOn5+YmUpPDA/KGJlKz13ZSk8MCYmKGJlPTApOmJlPndlJiYoYmU9d2UpLGJlPEllJiYoYmU9SWUpO3ZhciBwdD10aGlzLnN1YmFycmF5''@;'; put 'put ''KEllLGJlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHB0LEEucHJvdG90eXBlKSxwdH0sQS5wcm90b3R5cGUucmVhZFVpbnRMRT1BLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKEllLGJlLHdlKXtJZT4+Pj0wLGJlPj4+PTAsd2V8fGIoSWUsYmUsdGhpcy5sZW5ndGgpO2Zv''@;'; put 'put ''cih2YXIgcHQ9dGhpc1tJZV0sS2U9MSxZZT0wOysrWWU8YmUmJihLZSo9MjU2KTspcHQrPXRoaXNbSWUrWWVdKktlO3JldHVybiBwdH0sQS5wcm90b3R5cGUucmVhZFVpbnRCRT1BLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKEllLGJlLHdlKXtJZT4+Pj0wLGJlPj4+PTAsd2V8fGIo''@;'; put 'put ''SWUsYmUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcHQ9dGhpc1tJZSstLWJlXSxLZT0xO2JlPjAmJihLZSo9MjU2KTspcHQrPXRoaXNbSWUrLS1iZV0qS2U7cmV0dXJuIHB0fSxBLnByb3RvdHlwZS5yZWFkVWludDg9QS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKEllLGJlKXtyZXR1cm4g''@;'; put 'put ''SWU+Pj49MCxiZXx8YihJZSwxLHRoaXMubGVuZ3RoKSx0aGlzW0llXX0sQS5wcm90b3R5cGUucmVhZFVpbnQxNkxFPUEucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihJZSxiZSl7cmV0dXJuIEllPj4+PTAsYmV8fGIoSWUsMix0aGlzLmxlbmd0aCksdGhpc1tJZV18dGhpc1tJZSsx''@;'; put 'put ''XTw8OH0sQS5wcm90b3R5cGUucmVhZFVpbnQxNkJFPUEucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihJZSxiZSl7cmV0dXJuIEllPj4+PTAsYmV8fGIoSWUsMix0aGlzLmxlbmd0aCksdGhpc1tJZV08PDh8dGhpc1tJZSsxXX0sQS5wcm90b3R5cGUucmVhZFVpbnQzMkxFPUEucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihJZSxiZSl7cmV0dXJuIEllPj4+PTAsYmV8fGIoSWUsNCx0aGlzLmxlbmd0aCksKHRoaXNbSWVdfHRoaXNbSWUrMV08PDh8dGhpc1tJZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbSWUrM119LEEucHJvdG90eXBlLnJlYWRVaW50MzJCRT1BLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oSWUsYmUpe3JldHVybiBJZT4+Pj0wLGJlfHxiKEllLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbSWVdKyh0aGlzW0llKzFdPDwxNnx0aGlzW0llKzJdPDw4fHRoaXNbSWUrM10pfSxBLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rp''@;'; put 'put ''b24oSWUsYmUsd2Upe0llPj4+PTAsYmU+Pj49MCx3ZXx8YihJZSxiZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBwdD10aGlzW0llXSxLZT0xLFllPTA7KytZZTxiZSYmKEtlKj0yNTYpOylwdCs9dGhpc1tJZStZZV0qS2U7cmV0dXJuIHB0Pj0oS2UqPTEyOCkmJihwdC09TWF0aC5wb3coMiw4KmJl''@;'; put 'put ''KSkscHR9LEEucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihJZSxiZSx3ZSl7SWU+Pj49MCxiZT4+Pj0wLHdlfHxiKEllLGJlLHRoaXMubGVuZ3RoKTtmb3IodmFyIHB0PWJlLEtlPTEsWWU9dGhpc1tJZSstLXB0XTtwdD4wJiYoS2UqPTI1Nik7KVllKz10aGlzW0llKy0tcHRdKktlO3Jl''@;'; put 'put ''dHVybiBZZT49KEtlKj0xMjgpJiYoWWUtPU1hdGgucG93KDIsOCpiZSkpLFllfSxBLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihJZSxiZSl7cmV0dXJuIEllPj4+PTAsYmV8fGIoSWUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbSWVdPy0xKigyNTUtdGhpc1tJZV0rMSk6dGhpc1tJZV19''@;'; put 'put ''LEEucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKEllLGJlKXtJZT4+Pj0wLGJlfHxiKEllLDIsdGhpcy5sZW5ndGgpO3ZhciB3ZT10aGlzW0llXXx0aGlzW0llKzFdPDw4O3JldHVybiAzMjc2OCZ3ZT80Mjk0OTAxNzYwfHdlOndlfSxBLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5j''@;'; put 'put ''dGlvbihJZSxiZSl7SWU+Pj49MCxiZXx8YihJZSwyLHRoaXMubGVuZ3RoKTt2YXIgd2U9dGhpc1tJZSsxXXx0aGlzW0llXTw8ODtyZXR1cm4gMzI3Njgmd2U/NDI5NDkwMTc2MHx3ZTp3ZX0sQS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oSWUsYmUpe3JldHVybiBJZT4+Pj0wLGJl''@;'; put 'put ''fHxiKEllLDQsdGhpcy5sZW5ndGgpLHRoaXNbSWVdfHRoaXNbSWUrMV08PDh8dGhpc1tJZSsyXTw8MTZ8dGhpc1tJZSszXTw8MjR9LEEucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKEllLGJlKXtyZXR1cm4gSWU+Pj49MCxiZXx8YihJZSw0LHRoaXMubGVuZ3RoKSx0aGlzW0llXTw8''@;'; put 'put ''MjR8dGhpc1tJZSsxXTw8MTZ8dGhpc1tJZSsyXTw8OHx0aGlzW0llKzNdfSxBLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihJZSxiZSl7cmV0dXJuIEllPj4+PTAsYmV8fGIoSWUsNCx0aGlzLmxlbmd0aCksaC5yZWFkKHRoaXMsSWUsITAsMjMsNCl9LEEucHJvdG90eXBlLnJlYWRG''@;'; put 'put ''bG9hdEJFPWZ1bmN0aW9uKEllLGJlKXtyZXR1cm4gSWU+Pj49MCxiZXx8YihJZSw0LHRoaXMubGVuZ3RoKSxoLnJlYWQodGhpcyxJZSwhMSwyMyw0KX0sQS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKEllLGJlKXtyZXR1cm4gSWU+Pj49MCxiZXx8YihJZSw4LHRoaXMubGVuZ3Ro''@;'; put 'put ''KSxoLnJlYWQodGhpcyxJZSwhMCw1Miw4KX0sQS5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKEllLGJlKXtyZXR1cm4gSWU+Pj49MCxiZXx8YihJZSw4LHRoaXMubGVuZ3RoKSxoLnJlYWQodGhpcyxJZSwhMSw1Miw4KX0sQS5wcm90b3R5cGUud3JpdGVVaW50TEU9QS5wcm90b3R5''@;'; put 'put ''cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oSWUsYmUsd2UscHQpe0llPStJZSxiZT4+Pj0wLHdlPj4+PTAscHR8fHEodGhpcyxJZSxiZSx3ZSxNYXRoLnBvdygyLDgqd2UpLTEsMCk7dmFyIFllPTEscXQ9MDtmb3IodGhpc1tiZV09MjU1JkllOysrcXQ8d2UmJihZZSo9MjU2KTspdGhpc1tiZStx''@;'; put 'put ''dF09SWUvWWUmMjU1O3JldHVybiBiZSt3ZX0sQS5wcm90b3R5cGUud3JpdGVVaW50QkU9QS5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oSWUsYmUsd2UscHQpe0llPStJZSxiZT4+Pj0wLHdlPj4+PTAscHR8fHEodGhpcyxJZSxiZSx3ZSxNYXRoLnBvdygyLDgqd2UpLTEsMCk7dmFy''@;'; put 'put ''IFllPXdlLTEscXQ9MTtmb3IodGhpc1tiZStZZV09MjU1JkllOy0tWWU+PTAmJihxdCo9MjU2KTspdGhpc1tiZStZZV09SWUvcXQmMjU1O3JldHVybiBiZSt3ZX0sQS5wcm90b3R5cGUud3JpdGVVaW50OD1BLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4g''@;'; put 'put ''SWU9K0llLGJlPj4+PTAsd2V8fHEodGhpcyxJZSxiZSwxLDI1NSwwKSx0aGlzW2JlXT0yNTUmSWUsYmUrMX0sQS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1BLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gSWU9K0llLGJlPj4+PTAsd2V8fHEodGhp''@;'; put 'put ''cyxJZSxiZSwyLDY1NTM1LDApLHRoaXNbYmVdPTI1NSZJZSx0aGlzW2JlKzFdPUllPj4+OCxiZSsyfSxBLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPUEucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oSWUsYmUsd2Upe3JldHVybiBJZT0rSWUsYmU+Pj49MCx3ZXx8cSh0aGlzLEll''@;'; put 'put ''LGJlLDIsNjU1MzUsMCksdGhpc1tiZV09SWU+Pj44LHRoaXNbYmUrMV09MjU1JkllLGJlKzJ9LEEucHJvdG90eXBlLndyaXRlVWludDMyTEU9QS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihJZSxiZSx3ZSl7cmV0dXJuIEllPStJZSxiZT4+Pj0wLHdlfHxxKHRoaXMsSWUsYmUs''@;'; put 'put ''NCw0Mjk0OTY3Mjk1LDApLHRoaXNbYmUrM109SWU+Pj4yNCx0aGlzW2JlKzJdPUllPj4+MTYsdGhpc1tiZSsxXT1JZT4+PjgsdGhpc1tiZV09MjU1JkllLGJlKzR9LEEucHJvdG90eXBlLndyaXRlVWludDMyQkU9QS5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihJZSxiZSx3ZSl7''@;'; put 'put ''cmV0dXJuIEllPStJZSxiZT4+Pj0wLHdlfHxxKHRoaXMsSWUsYmUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbYmVdPUllPj4+MjQsdGhpc1tiZSsxXT1JZT4+PjE2LHRoaXNbYmUrMl09SWU+Pj44LHRoaXNbYmUrM109MjU1JkllLGJlKzR9LEEucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24o''@;'; put 'put ''SWUsYmUsd2UscHQpe2lmKEllPStJZSxiZT4+Pj0wLCFwdCl7dmFyIEtlPU1hdGgucG93KDIsOCp3ZS0xKTtxKHRoaXMsSWUsYmUsd2UsS2UtMSwtS2UpfXZhciBZZT0wLHF0PTEsaHQ9MDtmb3IodGhpc1tiZV09MjU1JkllOysrWWU8d2UmJihxdCo9MjU2KTspSWU8MCYmMD09PWh0JiYwIT09''@;'; put 'put ''dGhpc1tiZStZZS0xXSYmKGh0PTEpLHRoaXNbYmUrWWVdPShJZS9xdHwwKS1odCYyNTU7cmV0dXJuIGJlK3dlfSxBLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKEllLGJlLHdlLHB0KXtpZihJZT0rSWUsYmU+Pj49MCwhcHQpe3ZhciBLZT1NYXRoLnBvdygyLDgqd2UtMSk7cSh0aGlz''@;'; put 'put ''LEllLGJlLHdlLEtlLTEsLUtlKX12YXIgWWU9d2UtMSxxdD0xLGh0PTA7Zm9yKHRoaXNbYmUrWWVdPTI1NSZJZTstLVllPj0wJiYocXQqPTI1Nik7KUllPDAmJjA9PT1odCYmMCE9PXRoaXNbYmUrWWUrMV0mJihodD0xKSx0aGlzW2JlK1llXT0oSWUvcXR8MCktaHQmMjU1O3JldHVybiBiZSt3''@;'; put 'put ''ZX0sQS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gSWU9K0llLGJlPj4+PTAsd2V8fHEodGhpcyxJZSxiZSwxLDEyNywtMTI4KSxJZTwwJiYoSWU9MjU1K0llKzEpLHRoaXNbYmVdPTI1NSZJZSxiZSsxfSxBLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVu''@;'; put 'put ''Y3Rpb24oSWUsYmUsd2Upe3JldHVybiBJZT0rSWUsYmU+Pj49MCx3ZXx8cSh0aGlzLEllLGJlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2JlXT0yNTUmSWUsdGhpc1tiZSsxXT1JZT4+PjgsYmUrMn0sQS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gSWU9''@;'; put 'put ''K0llLGJlPj4+PTAsd2V8fHEodGhpcyxJZSxiZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tiZV09SWU+Pj44LHRoaXNbYmUrMV09MjU1JkllLGJlKzJ9LEEucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihJZSxiZSx3ZSl7cmV0dXJuIEllPStJZSxiZT4+Pj0wLHdlfHxxKHRoaXMsSWUs''@;'; put 'put ''YmUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2JlXT0yNTUmSWUsdGhpc1tiZSsxXT1JZT4+PjgsdGhpc1tiZSsyXT1JZT4+PjE2LHRoaXNbYmUrM109SWU+Pj4yNCxiZSs0fSxBLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oSWUsYmUsd2Upe3JldHVybiBJZT0rSWUs''@;'; put 'put ''YmU+Pj49MCx3ZXx8cSh0aGlzLEllLGJlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksSWU8MCYmKEllPTQyOTQ5NjcyOTUrSWUrMSksdGhpc1tiZV09SWU+Pj4yNCx0aGlzW2JlKzFdPUllPj4+MTYsdGhpc1tiZSsyXT1JZT4+PjgsdGhpc1tiZSszXT0yNTUmSWUsYmUrNH0sQS5wcm90b3R5''@;'; put 'put ''cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gUSh0aGlzLEllLGJlLCEwLHdlKX0sQS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gUSh0aGlzLEllLGJlLCExLHdlKX0sQS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5j''@;'; put 'put ''dGlvbihJZSxiZSx3ZSl7cmV0dXJuIHBlKHRoaXMsSWUsYmUsITAsd2UpfSxBLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKEllLGJlLHdlKXtyZXR1cm4gcGUodGhpcyxJZSxiZSwhMSx3ZSl9LEEucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oSWUsYmUsd2UscHQpe2lmKCFBLmlz''@;'; put 'put ''QnVmZmVyKEllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZih3ZXx8KHdlPTApLCFwdCYmMCE9PXB0JiYocHQ9dGhpcy5sZW5ndGgpLGJlPj1JZS5sZW5ndGgmJihiZT1JZS5sZW5ndGgpLGJlfHwoYmU9MCkscHQ+MCYmcHQ8d2UmJihwdD13''@;'; put 'put ''ZSkscHQ9PT13ZXx8MD09PUllLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGJlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZih3ZTwwfHx3ZT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91''@;'; put 'put ''dCBvZiByYW5nZSIpO2lmKHB0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7cHQ+dGhpcy5sZW5ndGgmJihwdD10aGlzLmxlbmd0aCksSWUubGVuZ3RoLWJlPHB0LXdlJiYocHQ9SWUubGVuZ3RoLWJlK3dlKTt2YXIgS2U9cHQtd2U7cmV0dXJuIHRo''@;'; put 'put ''aXM9PT1JZSYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKGJlLHdlLHB0KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChJZSx0aGlzLnN1YmFycmF5KHdlLHB0KSxiZSksS2V9LEEucHJvdG90eXBlLmZpbGw9''@;'; put 'put ''ZnVuY3Rpb24oSWUsYmUsd2UscHQpe2lmKCJzdHJpbmciPT10eXBlb2YgSWUpe2lmKCJzdHJpbmciPT10eXBlb2YgYmU/KHB0PWJlLGJlPTAsd2U9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2Ygd2UmJihwdD13ZSx3ZT10aGlzLmxlbmd0aCksdm9pZCAwIT09cHQmJiJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgcHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgcHQmJiFBLmlzRW5jb2RpbmcocHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcHQpO2lmKDE9PT1JZS5sZW5ndGgpe3Zh''@;'; put 'put ''ciBLZT1JZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1wdCYmS2U8MTI4fHwibGF0aW4xIj09PXB0KSYmKEllPUtlKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgSWU/SWUmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiBJZSYmKEllPU51bWJlcihJZSkpO2lmKGJlPDB8fHRoaXMubGVuZ3RoPGJlfHx0''@;'; put 'put ''aGlzLmxlbmd0aDx3ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYod2U8PWJlKXJldHVybiB0aGlzO3ZhciBZZTtpZihiZT4+Pj0wLHdlPXZvaWQgMD09PXdlP3RoaXMubGVuZ3RoOndlPj4+MCxJZXx8KEllPTApLCJudW1iZXIiPT10eXBlb2YgSWUpZm9y''@;'; put 'put ''KFllPWJlO1llPHdlOysrWWUpdGhpc1tZZV09SWU7ZWxzZXt2YXIgcXQ9QS5pc0J1ZmZlcihJZSk/SWU6QS5mcm9tKEllLHB0KSxodD1xdC5sZW5ndGg7aWYoMD09PWh0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytJZSsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFs''@;'; put 'put ''dWUiJyk7Zm9yKFllPTA7WWU8d2UtYmU7KytZZSl0aGlzW1llK2JlXT1xdFtZZSVodF19cmV0dXJuIHRoaXN9O3ZhciBQZT0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIHFlKE1lLEllKXtJZT1JZXx8MS8wO2Zvcih2YXIgYmUsd2U9TWUubGVuZ3RoLHB0PW51bGwsS2U9W10sWWU9MDtZ''@;'; put 'put ''ZTx3ZTsrK1llKXtpZigoYmU9TWUuY2hhckNvZGVBdChZZSkpPjU1Mjk1JiZiZTw1NzM0NCl7aWYoIXB0KXtpZihiZT41NjMxOSl7KEllLT0zKT4tMSYmS2UucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoWWUrMT09PXdlKXsoSWUtPTMpPi0xJiZLZS5wdXNoKDIzOSwxOTEsMTg5KTtj''@;'; put 'put ''b250aW51ZX1wdD1iZTtjb250aW51ZX1pZihiZTw1NjMyMCl7KEllLT0zKT4tMSYmS2UucHVzaCgyMzksMTkxLDE4OSkscHQ9YmU7Y29udGludWV9YmU9NjU1MzYrKHB0LTU1Mjk2PDwxMHxiZS01NjMyMCl9ZWxzZSBwdCYmKEllLT0zKT4tMSYmS2UucHVzaCgyMzksMTkxLDE4OSk7aWYocHQ9''@;'; put 'put ''bnVsbCxiZTwxMjgpe2lmKChJZS09MSk8MClicmVhaztLZS5wdXNoKGJlKX1lbHNlIGlmKGJlPDIwNDgpe2lmKChJZS09Mik8MClicmVhaztLZS5wdXNoKGJlPj42fDE5Miw2MyZiZXwxMjgpfWVsc2UgaWYoYmU8NjU1MzYpe2lmKChJZS09Myk8MClicmVhaztLZS5wdXNoKGJlPj4xMnwyMjQs''@;'; put 'put ''YmU+PjYmNjN8MTI4LDYzJmJlfDEyOCl9ZWxzZXtpZighKGJlPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKEllLT00KTwwKWJyZWFrO0tlLnB1c2goYmU+PjE4fDI0MCxiZT4+MTImNjN8MTI4LGJlPj42JjYzfDEyOCw2MyZiZXwxMjgpfX1yZXR1''@;'; put 'put ''cm4gS2V9ZnVuY3Rpb24gemUoTWUpe3JldHVybiBTLnRvQnl0ZUFycmF5KGZ1bmN0aW9uIFplKE1lKXtpZigoTWU9KE1lPU1lLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKFBlLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtNZS5sZW5ndGglNCE9MDspTWUrPSI9IjtyZXR1cm4g''@;'; put 'put ''TWV9KE1lKSl9ZnVuY3Rpb24gT2UoTWUsSWUsYmUsd2Upe2Zvcih2YXIgcHQ9MDtwdDx3ZSYmIShwdCtiZT49SWUubGVuZ3RofHxwdD49TWUubGVuZ3RoKTsrK3B0KUllW3B0K2JlXT1NZVtwdF07cmV0dXJuIHB0fWZ1bmN0aW9uIENlKE1lLEllKXtyZXR1cm4gTWUgaW5zdGFuY2VvZiBJZXx8''@;'; put 'put ''bnVsbCE9TWUmJm51bGwhPU1lLmNvbnN0cnVjdG9yJiZudWxsIT1NZS5jb25zdHJ1Y3Rvci5uYW1lJiZNZS5jb25zdHJ1Y3Rvci5uYW1lPT09SWUubmFtZX1mdW5jdGlvbiBrZShNZSl7cmV0dXJuIE1lIT1NZX12YXIgeGU9ZnVuY3Rpb24oKXtmb3IodmFyIE1lPSIwMTIzNDU2Nzg5YWJjZGVm''@;'; put 'put ''IixJZT1uZXcgQXJyYXkoMjU2KSxiZT0wO2JlPDE2OysrYmUpZm9yKHZhciB3ZT0xNipiZSxwdD0wO3B0PDE2OysrcHQpSWVbd2UrcHRdPU1lW2JlXStNZVtwdF07cmV0dXJuIEllfSgpfSw5NTczMSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY1OTkyKSxoPWQoNzk0NzcpLG89ZCg1''@;'; put 'put ''OTcwNSksST1kKDUyOTEwKTt0ZS5leHBvcnRzPUl8fFMuY2FsbChvLGgpfSw5ODkxMCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY1OTkyKSxoPWQoNzk0NzcpLG89ZCg5NTczMSk7dGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBvKFMsaCxhcmd1bWVudHMpfX0sNzk0NzcodGUp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseX0sNTk3MDUodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsfSw2MTg4NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY1OTkyKSxoPWQoNDY3NTgpLG89''@;'; put 'put ''ZCg1OTcwNSksST1kKDk1NzMxKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKFQpe2lmKFQubGVuZ3RoPDF8fCJmdW5jdGlvbiIhPXR5cGVvZiBUWzBdKXRocm93IG5ldyBoKCJhIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIik7cmV0dXJuIEkoUyxvLFQpfX0sNTI5MTAodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5l''@;'; put 'put ''eHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdCYmUmVmbGVjdC5hcHBseX0sNDgxMjgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzMTM1OCksaD1kKDQ1NzApLG89ZCg2MTg4NSksST1kKDk4OTEwKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKFQpe3ZhciBBPW8oYXJndW1lbnRz''@;'; put 'put ''KSxNPTErVC5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIFMoQSxNPjA/TTowLCEwKX0saD9oKHRlLmV4cG9ydHMsImFwcGx5Iix7dmFsdWU6SX0pOnRlLmV4cG9ydHMuYXBwbHk9SX0sMTI3NzModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg5MDI1OCksaD1kKDYxODg1''@;'; put 'put ''KSxvPWgoW1MoIiVTdHJpbmcucHJvdG90eXBlLmluZGV4T2YlIildKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGYsVCl7dmFyIEE9UyhmLCEhVCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEEmJm8oZiwiLnByb3RvdHlwZS4iKT4tMT9oKFtBXSk6QX19LDMyNDcodGUsaixkKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIFM9ZCgyNzA1NCkuQnVmZmVyLGg9ZCg3MDQ1KS5UcmFuc2Zvcm0sbz1kKDc4NDU0KS5JLEk9ZCg3MTk5MyksZj1kKDQxMDkwKTtmdW5jdGlvbiBUKEEpe2guY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgQSx0aGlzLmhhc2hNb2RlP3RoaXNbQV09dGhp''@;'; put 'put ''cy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9SShULGgpLFQucHJvdG90eXBlLnVw''@;'; put 'put ''ZGF0ZT1mdW5jdGlvbihBLE0sTyl7dmFyIEQ9ZihBLE0pLEU9dGhpcy5fdXBkYXRlKEQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KE8mJihFPXRoaXMuX3RvU3RyaW5nKEUsTykpLEUpfSxULnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sVC5wcm90b3R5cGUuZ2V0''@;'; put 'put ''QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxULnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3Vw''@;'; put 'put ''cG9ydGVkIHN0YXRlIil9LFQucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sVC5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihBLE0sTyl7dmFyIEQ7dHJ5e3RoaXMuaGFzaE1v''@;'; put 'put ''ZGU/dGhpcy5fdXBkYXRlKEEpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoQSkpfWNhdGNoKEUpe0Q9RX1maW5hbGx5e08oRCl9fSxULnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oQSl7dmFyIE07dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goTyl7TT1PfUEoTSl9LFQucHJv''@;'; put 'put ''dG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKEEpe3ZhciBNPXRoaXMuX19maW5hbCgpfHxTLmFsbG9jKDApO3JldHVybiBBJiYoTT10aGlzLl90b1N0cmluZyhNLEEsITApKSxNfSxULnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oQSxNLE8pe2lmKHRoaXMuX2RlY29kZXJ8fCh0''@;'; put 'put ''aGlzLl9kZWNvZGVyPW5ldyBvKE0pLHRoaXMuX2VuY29kaW5nPU0pLHRoaXMuX2VuY29kaW5nIT09TSl0aHJvdyBuZXcgRXJyb3IoImNhblx1MjAxOXQgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBEPXRoaXMuX2RlY29kZXIud3JpdGUoQSk7cmV0dXJuIE8mJihEKz10aGlzLl9kZWNvZGVyLmVu''@;'; put 'put ''ZCgpKSxEfSx0ZS5leHBvcnRzPVR9LDI3NjM3KHRlLGosZCl7ZnVuY3Rpb24gSCh6KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHopfWouaXNBcnJheT1mdW5jdGlvbiBTKHope3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoeik6IltvYmplY3QgQXJy''@;'; put 'put ''YXldIj09PUgoeil9LGouaXNCb29sZWFuPWZ1bmN0aW9uIGgoeil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygen0sai5pc051bGw9ZnVuY3Rpb24gbyh6KXtyZXR1cm4gbnVsbD09PXp9LGouaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gSSh6KXtyZXR1cm4gbnVsbD09en0sai5pc051bWJl''@;'; put 'put ''cj1mdW5jdGlvbiBmKHope3JldHVybiJudW1iZXIiPT10eXBlb2Ygen0sai5pc1N0cmluZz1mdW5jdGlvbiBUKHope3JldHVybiJzdHJpbmciPT10eXBlb2Ygen0sai5pc1N5bWJvbD1mdW5jdGlvbiBBKHope3JldHVybiJzeW1ib2wiPT10eXBlb2Ygen0sai5pc1VuZGVmaW5lZD1mdW5jdGlv''@;'; put 'put ''biBNKHope3JldHVybiB2b2lkIDA9PT16fSxqLmlzUmVnRXhwPWZ1bmN0aW9uIE8oeil7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1IKHopfSxqLmlzT2JqZWN0PWZ1bmN0aW9uIEQoeil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB6JiZudWxsIT09en0sai5pc0RhdGU9ZnVuY3Rpb24gRSh6''@;'; put 'put ''KXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1IKHopfSxqLmlzRXJyb3I9ZnVuY3Rpb24gQih6KXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09SCh6KXx8eiBpbnN0YW5jZW9mIEVycm9yfSxqLmlzRnVuY3Rpb249ZnVuY3Rpb24gRih6KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygen0sai5p''@;'; put 'put ''c1ByaW1pdGl2ZT1mdW5jdGlvbiBOKHope3JldHVybiBudWxsPT09enx8ImJvb2xlYW4iPT10eXBlb2Ygenx8Im51bWJlciI9PXR5cGVvZiB6fHwic3RyaW5nIj09dHlwZW9mIHp8fCJzeW1ib2wiPT10eXBlb2Ygenx8dHlwZW9mIHo+InUifSxqLmlzQnVmZmVyPWQoODM4MzgpLkJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcn0sODczMDModGUsaixkKXt2YXIgUz1kKDkwNTE4KSxoPWQoODk2MDYpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBJKEEpfTt2YXIgbz17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0''@;'; put 'put ''ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4''@;'; put 'put ''fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBJKFQpe3RoaXMuY3VydmVUeXBlPW9bVF0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpUfSksdGhpcy5jdXJ2ZT1uZXcgUy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtl''@;'; put 'put ''eXM9dm9pZCAwfWZ1bmN0aW9uIGYoVCxBLE0pe0FycmF5LmlzQXJyYXkoVCl8fChUPVQudG9BcnJheSgpKTt2YXIgTz1uZXcgQnVmZmVyKFQpO2lmKE0mJk8ubGVuZ3RoPE0pe3ZhciBEPW5ldyBCdWZmZXIoTS1PLmxlbmd0aCk7RC5maWxsKDApLE89QnVmZmVyLmNvbmNhdChbRCxPXSl9cmV0''@;'; put 'put ''dXJuIEE/Ty50b1N0cmluZyhBKTpPfW8ucDIyND1vLnNlY3AyMjRyMSxvLnAyNTY9by5zZWNwMjU2cjE9by5wcmltZTI1NnYxLG8ucDE5Mj1vLnNlY3AxOTJyMT1vLnByaW1lMTkydjEsby5wMzg0PW8uc2VjcDM4NHIxLG8ucDUyMT1vLnNlY3A1MjFyMSxJLnByb3RvdHlwZS5nZW5lcmF0ZUtl''@;'; put 'put ''eXM9ZnVuY3Rpb24oVCxBKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KFQsQSl9LEkucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oVCxBLE0pe3JldHVybiBBPUF8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoVCl8fChU''@;'; put 'put ''PW5ldyBCdWZmZXIoVCxBKSksZih0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoVCkuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSxNLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxJLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oVCxBKXt2''@;'; put 'put ''YXIgTT10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PUEsITApO3JldHVybiJoeWJyaWQiPT09QSYmKE1bMF09TVtNLmxlbmd0aC0xXSUyPzc6NiksZihNLFQpfSxJLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFQpe3JldHVybiBmKHRoaXMua2V5cy5nZXRQcml2''@;'; put 'put ''YXRlKCksVCl9LEkucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihULEEpe3JldHVybiBBPUF8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoVCl8fChUPW5ldyBCdWZmZXIoVCxBKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoVCksdGhpc30sSS5wcm90b3R5cGUuc2V0UHJpdmF0ZUtl''@;'; put 'put ''eT1mdW5jdGlvbihULEEpe0E9QXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihUKXx8KFQ9bmV3IEJ1ZmZlcihULEEpKTt2YXIgTT1uZXcgaChUKTtyZXR1cm4gTT1NLnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRl''@;'; put 'put ''KE0pLHRoaXN9fSw4OTYwNih0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKFIscyl7aWYoIVIpdGhyb3cgbmV3IEVycm9yKHN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gSShSLHMpe1Iuc3VwZXJfPXM7dmFyIHU9ZnVuY3Rpb24oKXt9O3UucHJv''@;'; put 'put ''dG90eXBlPXMucHJvdG90eXBlLFIucHJvdG90eXBlPW5ldyB1LFIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVJ9ZnVuY3Rpb24gZihSLHMsdSl7aWYoZi5pc0JOKFIpKXJldHVybiBSO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51''@;'; put 'put ''bGwhPT1SJiYoKCJsZSI9PT1zfHwiYmUiPT09cykmJih1PXMscz0xMCksdGhpcy5faW5pdChSfHwwLHN8fDEwLHV8fCJiZSIpKX12YXIgVDsib2JqZWN0Ij09dHlwZW9mIFM/Uy5leHBvcnRzPWY6aC5CTj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVvZiB3aW5kb3c8InUiJiZ0''@;'; put 'put ''eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDc3OTY1KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEEoUixzKXt2YXIgdT1SLmNoYXJDb2RlQXQocyk7cmV0dXJuIHU+PTY1JiZ1PD03MD91LTU1OnU+PTk3JiZ1PD0xMDI/dS04Nzp1LTQ4JjE1fWZ1bmN0aW9uIE0oUixz''@;'; put 'put ''LHUpe3ZhciB2PUEoUix1KTtyZXR1cm4gdS0xPj1zJiYodnw9QShSLHUtMSk8PDQpLHZ9ZnVuY3Rpb24gTyhSLHMsdSx2KXtmb3IodmFyIHA9MCxfPU1hdGgubWluKFIubGVuZ3RoLHUpLGs9cztrPF87aysrKXt2YXIgTD1SLmNoYXJDb2RlQXQoayktNDg7cCo9dixwKz1MPj00OT9MLTQ5KzEw''@;'; put 'put ''Okw+PTE3P0wtMTcrMTA6TH1yZXR1cm4gcH1mLmlzQk49ZnVuY3Rpb24ocyl7cmV0dXJuIHMgaW5zdGFuY2VvZiBmfHxudWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmNvbnN0cnVjdG9yLndvcmRTaXplPT09Zi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShzLndvcmRzKX0sZi5tYXg9''@;'; put 'put ''ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk+MD9zOnV9LGYubWluPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHMuY21wKHUpPDA/czp1fSxmLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihzLHUsdil7aWYoIm51bWJlciI9PXR5cGVvZiBzKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHMsdSx2''@;'; put 'put ''KTtpZigib2JqZWN0Ij09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShzLHUsdik7ImhleCI9PT11JiYodT0xNiksbyh1PT09KDB8dSkmJnU+PTImJnU8PTM2KTt2YXIgcD0wOyItIj09PShzPXMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYocCsrLHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MSkscDxzLmxlbmd0aCYmKDE2PT09dT90aGlzLl9wYXJzZUhleChzLHAsdik6KHRoaXMuX3BhcnNlQmFzZShzLHUscCksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpKSl9LGYucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHMsdSx2KXtz''@;'; put 'put ''PDAmJih0aGlzLm5lZ2F0aXZlPTEscz0tcyksczw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmc10sdGhpcy5sZW5ndGg9MSk6czw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihvKHM8OTAw''@;'; put 'put ''NzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcyxzLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT12JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksdSx2KX0sZi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihzLHUsdil7aWYo''@;'; put 'put ''bygibnVtYmVyIj09dHlwZW9mIHMubGVuZ3RoKSxzLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChzLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBwPTA7cDx0''@;'; put 'put ''aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT0wO3ZhciBfLGssTD0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTEsXz0wO3A+PTA7cC09Myl0aGlzLndvcmRzW19dfD0oaz1zW3BdfHNbcC0xXTw8OHxzW3AtMl08PDE2KTw8TCY2NzEwODg2Myx0aGlzLndvcmRzW18rMV09az4+PjI2''@;'; put 'put ''LUwmNjcxMDg4NjMsKEwrPTI0KT49MjYmJihMLT0yNixfKyspO2Vsc2UgaWYoImxlIj09PXYpZm9yKHA9MCxfPTA7cDxzLmxlbmd0aDtwKz0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twKzFdPDw4fHNbcCsyXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysxXT1rPj4+MjYtTCY2''@;'; put 'put ''NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHMsdSx2KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHMubGVuZ3RoLXUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtm''@;'; put 'put ''b3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIEwsXz0wLGs9MDtpZigiYmUiPT09dilmb3IocD1zLmxlbmd0aC0xO3A+PXU7cC09MilMPU0ocyx1LHApPDxfLHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49MTg/KF8tPTE4LHRoaXMud29yZHNbays9''@;'; put 'put ''MV18PUw+Pj4yNik6Xys9ODtlbHNlIGZvcihwPShzLmxlbmd0aC11KSUyPT0wP3UrMTp1O3A8cy5sZW5ndGg7cCs9MilMPU0ocyx1LHApPDxfLHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49MTg/KF8tPTE4LHRoaXMud29yZHNbays9MV18PUw+Pj4yNik6Xys9ODt0aGlzLnN0cmlwKCl9''@;'; put 'put ''LGYucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocyx1LHYpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBwPTAsXz0xO188PTY3MTA4ODYzO18qPXUpcCsrO3AtLSxfPV8vdXwwO2Zvcih2YXIgaz1zLmxlbmd0aC12LEw9ayVwLHk9TWF0aC5taW4oayxrLUwpK3Ys''@;'; put 'put ''bD0wLGI9djtiPHk7Yis9cClsPU8ocyxiLGIrcCx1KSx0aGlzLmltdWxuKF8pLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpO2lmKDAhPT1MKXt2YXIgcT0xO2ZvcihsPU8ocyxiLHMubGVuZ3RoLHUpLGI9MDtiPEw7YisrKXEqPXU7dGhp''@;'; put 'put ''cy5pbXVsbihxKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKX10aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocyl7cy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdT0wO3U8dGhpcy5sZW5n''@;'; put 'put ''dGg7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD10aGlzLmxlbmd0aCxzLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscy5yZWQ9dGhpcy5yZWR9LGYucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJuIHRoaXMuY29weShzKSxzfSxm''@;'; put 'put ''LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHMpe2Zvcig7dGhpcy5sZW5ndGg8czspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxmLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGYucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxmLnByb3RvdHlwZS5pbnNwZWN0''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBEPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEU9WzAsMCwyNSwxNiwx''@;'; put 'put ''MiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sQj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgz''@;'; put 'put ''MTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMz''@;'; put 'put ''NTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBOKFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZTt2YXIgdj1SLmxlbmd0aCtzLmxlbmd0aHwwO3UubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfFIud29yZHNbMF0sXz0wfHMu''@;'; put 'put ''d29yZHNbMF0saz1wKl8seT1rLzY3MTA4ODY0fDA7dS53b3Jkc1swXT02NzEwODg2MyZrO2Zvcih2YXIgbD0xO2w8djtsKyspe2Zvcih2YXIgYj15Pj4+MjYscT02NzEwODg2MyZ5LEc9TWF0aC5taW4obCxzLmxlbmd0aC0xKSxRPU1hdGgubWF4KDAsbC1SLmxlbmd0aCsxKTtRPD1HO1ErKyli''@;'; put 'put ''Kz0oaz0ocD0wfFIud29yZHNbbC1RfDBdKSooXz0wfHMud29yZHNbUV0pK3EpLzY3MTA4ODY0fDAscT02NzEwODg2MyZrO3Uud29yZHNbbF09MHxxLHk9MHxifXJldHVybiAwIT09eT91LndvcmRzW2xdPTB8eTp1Lmxlbmd0aC0tLHUuc3RyaXAoKX1mLnByb3RvdHlwZS50b1N0cmluZz1mdW5j''@;'; put 'put ''dGlvbihzLHUpe3ZhciB2O2lmKHU9MHx1fHwxLDE2PT09KHM9c3x8MTApfHwiaGV4Ij09PXMpe3Y9IiI7Zm9yKHZhciBwPTAsXz0wLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl7dmFyIEw9dGhpcy53b3Jkc1trXSx5PSgxNjc3NzIxNSYoTDw8cHxfKSkudG9TdHJpbmcoMTYpO189TD4+PjI0LXAm''@;'; put 'put ''MTY3NzcyMTUsKHArPTIpPj0yNiYmKHAtPTI2LGstLSksdj0wIT09X3x8ayE9PXRoaXMubGVuZ3RoLTE/RFs2LXkubGVuZ3RoXSt5K3Y6eSt2fWZvcigwIT09XyYmKHY9Xy50b1N0cmluZygxNikrdik7di5sZW5ndGgldSE9MDspdj0iMCIrdjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih2''@;'; put 'put ''PSItIit2KSx2fWlmKHM9PT0oMHxzKSYmcz49MiYmczw9MzYpe3ZhciBsPUVbc10sYj1CW3NdO3Y9IiI7dmFyIHE9dGhpcy5jbG9uZSgpO2ZvcihxLm5lZ2F0aXZlPTA7IXEuaXNaZXJvKCk7KXt2YXIgRz1xLm1vZG4oYikudG9TdHJpbmcocyk7dj0ocT1xLmlkaXZuKGIpKS5pc1plcm8oKT9H''@;'; put 'put ''K3Y6RFtsLUcubGVuZ3RoXStHK3Z9Zm9yKHRoaXMuaXNaZXJvKCkmJih2PSIwIit2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxmLnByb3RvdHlwZS50''@;'; put 'put ''b051bWJlcj1mdW5jdGlvbigpe3ZhciBzPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9zKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFd''@;'; put 'put ''OnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1zOnN9LGYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sZi5wcm90b3R5cGUudG9CdWZm''@;'; put 'put ''ZXI9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gbyh0eXBlb2YgVDwidSIpLHRoaXMudG9BcnJheUxpa2UoVCxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscyx1KX0sZi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rp''@;'; put 'put ''b24ocyx1LHYpe3ZhciBwPXRoaXMuYnl0ZUxlbmd0aCgpLF89dnx8TWF0aC5tYXgoMSxwKTtvKHA8PV8sImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxvKF8+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB5LGwsaz0ibGUi''@;'; put 'put ''PT09dSxMPW5ldyBzKF8pLGI9dGhpcy5jbG9uZSgpO2lmKGspe2ZvcihsPTA7IWIuaXNaZXJvKCk7bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbbF09eTtmb3IoO2w8XztsKyspTFtsXT0wfWVsc2V7Zm9yKGw9MDtsPF8tcDtsKyspTFtsXT0wO2ZvcihsPTA7IWIuaXNaZXJvKCk7''@;'; put 'put ''bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbXy1sLTFdPXl9cmV0dXJuIEx9LGYucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihzKXtyZXR1cm4gMzItTWF0aC5jbHozMihzKX06ZnVuY3Rpb24ocyl7dmFyIHU9cyx2PTA7cmV0dXJuIHU+PTQwOTYmJih2''@;'; put 'put ''Kz0xMyx1Pj4+PTEzKSx1Pj02NCYmKHYrPTcsdT4+Pj03KSx1Pj04JiYodis9NCx1Pj4+PTQpLHU+PTImJih2Kz0yLHU+Pj49Miksdit1fSxmLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocyl7aWYoMD09PXMpcmV0dXJuIDI2O3ZhciB1PXMsdj0wO3JldHVybiEoODE5MSZ1KSYmKHYr''@;'; put 'put ''PTEzLHU+Pj49MTMpLCEoMTI3JnUpJiYodis9Nyx1Pj4+PTcpLCEoMTUmdSkmJih2Kz00LHU+Pj49NCksISgzJnUpJiYodis9Mix1Pj4+PTIpLCEoMSZ1KSYmdisrLHZ9LGYucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB1PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3V9LGYucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHM9MCx1PTA7dTx0aGlzLmxlbmd0aDt1Kyspe3ZhciB2PXRoaXMuX3plcm9CaXRzKHRoaXMud29y''@;'; put 'put ''ZHNbdV0pO2lmKHMrPXYsMjYhPT12KWJyZWFrfXJldHVybiBzfSxmLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxmLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''P3RoaXMuYWJzKCkuaW5vdG4ocykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxmLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy50ZXN0bihzLTEpP3RoaXMubm90bihzKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxmLnByb3RvdHlwZS5pc05lZz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sZi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGYucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LGYu''@;'; put 'put ''cHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1XXxzLndvcmRzW3VdO3JldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCl9LGYucHJvdG90eXBlLmlvcj1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihzKX0sZi5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3Iocyk6cy5jbG9u''@;'; put 'put ''ZSgpLmlvcih0aGlzKX0sZi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihzKTpzLmNsb25lKCkuaXVvcih0aGlzKX0sZi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocyl7dmFyIHU7dT10aGlzLmxlbmd0aD5z''@;'; put 'put ''Lmxlbmd0aD9zOnRoaXM7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT10aGlzLndvcmRzW3ZdJnMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPXUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRo''@;'; put 'put ''aXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocyl9LGYucHJvdG90eXBlLmFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocyk6cy5jbG9uZSgpLmlhbmQodGhpcyl9LGYucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24o''@;'; put 'put ''cyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChzKTpzLmNsb25lKCkuaXVhbmQodGhpcyl9LGYucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHMpe3ZhciB1LHY7dGhpcy5sZW5ndGg+cy5sZW5ndGg/KHU9dGhpcyx2PXMpOih1PXMsdj10aGlzKTtmb3Io''@;'; put 'put ''dmFyIHA9MDtwPHYubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXUud29yZHNbcF1edi53b3Jkc1twXTtpZih0aGlzIT09dSlmb3IoO3A8dS5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5peG9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihzKX0sZi5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihzKTpzLmNsb25lKCkuaXhv''@;'; put 'put ''cih0aGlzKX0sZi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHMpOnMuY2xvbmUoKS5pdXhvcih0aGlzKX0sZi5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+''@;'; put 'put ''PTApO3ZhciB1PTB8TWF0aC5jZWlsKHMvMjYpLHY9cyUyNjt0aGlzLl9leHBhbmQodSksdj4wJiZ1LS07Zm9yKHZhciBwPTA7cDx1O3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJn50aGlzLndvcmRzW3BdO3JldHVybiB2PjAmJih0aGlzLndvcmRzW3BdPX50aGlzLndvcmRzW3BdJjY3MTA4''@;'; put 'put ''ODYzPj4yNi12KSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihzKX0sZi5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihzLHUpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgdj1zLzI2fDAscD1zJTI2O3Jl''@;'; put 'put ''dHVybiB0aGlzLl9leHBhbmQodisxKSx0aGlzLndvcmRzW3ZdPXU/dGhpcy53b3Jkc1t2XXwxPDxwOnRoaXMud29yZHNbdl0mfigxPDxwKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocyl7dmFyIHUsdixwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cy5uZWdh''@;'; put 'put ''dGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmUpcmV0dXJuIHMubmVnYXRpdmU9MCx1PXRoaXMuaXN1YihzKSxzLm5lZ2F0aXZlPTEsdS5f''@;'; put 'put ''bm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odj10aGlzLHA9cyk6KHY9cyxwPXRoaXMpO2Zvcih2YXIgXz0wLGs9MDtrPHAubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPTY3MTA4ODYzJih1PSgwfHYud29yZHNba10pKygwfHAud29yZHNba10pK18pLF89dT4+PjI2O2Zvcig7MCE9''@;'; put 'put ''PV8mJms8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrXyksXz11Pj4+MjY7aWYodGhpcy5sZW5ndGg9di5sZW5ndGgsMCE9PV8pdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Xyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYodiE9PXRoaXMpZm9yKDtr''@;'; put 'put ''PHYubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPXYud29yZHNba107cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzKXt2YXIgdTtyZXR1cm4gMCE9PXMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhzLm5lZ2F0aXZlPTAsdT10aGlzLnN1YihzKSxzLm5lZ2F0aXZl''@;'; put 'put ''Xj0xLHUpOjA9PT1zLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHU9cy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHUpOnRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHMpOnMuY2xvbmUoKS5pYWRkKHRoaXMpfSxmLnByb3RvdHlw''@;'; put 'put ''ZS5pc3ViPWZ1bmN0aW9uKHMpe2lmKDAhPT1zLm5lZ2F0aXZlKXtzLm5lZ2F0aXZlPTA7dmFyIHU9dGhpcy5pYWRkKHMpO3JldHVybiBzLm5lZ2F0aXZlPTEsdS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChzKSx0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcCxfLHY9dGhpcy5jbXAocyk7aWYoMD09PXYpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3Y+MD8ocD10aGlzLF89cyk6KHA9cyxfPXRoaXMpO2Zvcih2YXIgaz0wLEw9MDtM''@;'; put 'put ''PF8ubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pLSgwfF8ud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7Zm9yKDswIT09ayYmTDxwLmxlbmd0aDtMKyspaz0odT0oMHxwLndvcmRzW0xdKStrKT4+MjYsdGhpcy53b3Jkc1tMXT02NzEwODg2MyZ1O2lmKDA9''@;'; put 'put ''PT1rJiZMPHAubGVuZ3RoJiZwIT09dGhpcylmb3IoO0w8cC5sZW5ndGg7TCsrKXRoaXMud29yZHNbTF09cC53b3Jkc1tMXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsTCkscCE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5''@;'; put 'put ''cGUuc3ViPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihzKX07dmFyIEg9ZnVuY3Rpb24ocyx1LHYpe3ZhciB5LGwsYixwPXMud29yZHMsXz11LndvcmRzLGs9di53b3JkcyxMPTAscT0wfHBbMF0sRz04MTkxJnEsUT1xPj4+MTMscGU9MHxwWzFdLFBlPTgxOTEmcGUsWmU9''@;'; put 'put ''cGU+Pj4xMyxxZT0wfHBbMl0sdmU9ODE5MSZxZSx1ZT1xZT4+PjEzLHplPTB8cFszXSxPZT04MTkxJnplLENlPXplPj4+MTMsa2U9MHxwWzRdLHhlPTgxOTEma2UsTWU9a2U+Pj4xMyxJZT0wfHBbNV0sYmU9ODE5MSZJZSx3ZT1JZT4+PjEzLHB0PTB8cFs2XSxLZT04MTkxJnB0LFllPXB0Pj4+''@;'; put 'put ''MTMscXQ9MHxwWzddLGh0PTgxOTEmcXQsdnQ9cXQ+Pj4xMyxZdD0wfHBbOF0sdHQ9ODE5MSZZdCxVZT1ZdD4+PjEzLCRlPTB8cFs5XSxMZT04MTkxJiRlLG50PSRlPj4+MTMscm49MHxfWzBdLHh0PTgxOTEmcm4sVHQ9cm4+Pj4xMyx5bj0wfF9bMV0sWHQ9ODE5MSZ5bixRdD15bj4+PjEzLFhy''@;'; put 'put ''PTB8X1syXSxzbj04MTkxJlhyLGl0PVhyPj4+MTMsQ3I9MHxfWzNdLEx0PTgxOTEmQ3Isd3Q9Q3I+Pj4xMyxSbj0wfF9bNF0sUWU9ODE5MSZSbixQdD1Sbj4+PjEzLFFyPTB8X1s1XSxOZT04MTkxJlFyLHl0PVFyPj4+MTMscnI9MHxfWzZdLGF0PTgxOTEmcnIsX3Q9cnI+Pj4xMyx3bj0wfF9b''@;'; put 'put ''N10sJHQ9ODE5MSZ3bixIdD13bj4+PjEzLHNpPTB8X1s4XSxubj04MTkxJnNpLGxuPXNpPj4+MTMsa2k9MHxfWzldLGFuPTgxOTEma2ksR3Q9a2k+Pj4xMzt2Lm5lZ2F0aXZlPXMubmVnYXRpdmVedS5uZWdhdGl2ZSx2Lmxlbmd0aD0xOTt2YXIgZWE9KEwrKHk9TWF0aC5pbXVsKEcseHQpKXww''@;'; put 'put ''KSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKEcsVHQpKStNYXRoLmltdWwoUSx4dCl8MCkpPDwxMyl8MDtMPSgoYj1NYXRoLmltdWwoUSxUdCkpKyhsPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2Myx5PU1hdGguaW11bChQZSx4dCksbD0obD1NYXRoLmltdWwoUGUsVHQpKStNYXRo''@;'; put 'put ''LmltdWwoWmUseHQpfDAsYj1NYXRoLmltdWwoWmUsVHQpO3ZhciBtaT0oTCsoeT15K01hdGguaW11bChHLFh0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxRdCl8MCkrTWF0aC5pbXVsKFEsWHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxRdCl8MCkrKGw+Pj4x''@;'; put 'put ''Myl8MCkrKG1pPj4+MjYpfDAsbWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHZlLHh0KSxsPShsPU1hdGguaW11bCh2ZSxUdCkpK01hdGguaW11bCh1ZSx4dCl8MCxiPU1hdGguaW11bCh1ZSxUdCkseT15K01hdGguaW11bChQZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWmUsWHQpfDAsYj1iK01hdGguaW11bChaZSxRdCl8MDt2YXIgZnI9KEwrKHk9eStNYXRoLmltdWwoRyxzbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsaXQpfDApK01hdGguaW11bChRLHNuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsaXQpfDApKyhs''@;'; put 'put ''Pj4+MTMpfDApKyhmcj4+PjI2KXwwLGZyJj02NzEwODg2Myx5PU1hdGguaW11bChPZSx4dCksbD0obD1NYXRoLmltdWwoT2UsVHQpKStNYXRoLmltdWwoQ2UseHQpfDAsYj1NYXRoLmltdWwoQ2UsVHQpLHk9eStNYXRoLmltdWwodmUsWHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxRdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHVlLFh0KXwwLGI9YitNYXRoLmltdWwodWUsUXQpfDAseT15K01hdGguaW11bChQZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKFBlLGl0KXwwKStNYXRoLmltdWwoWmUsc24pfDAsYj1iK01hdGguaW11bChaZSxpdCl8MDt2YXIgJGk9KEwrKHk9eStNYXRoLmltdWwoRyxMdCl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsd3QpfDApK01hdGguaW11bChRLEx0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsd3QpfDApKyhsPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2Myx5PU1hdGguaW11bCh4ZSx4dCksbD0obD1NYXRoLmltdWwo''@;'; put 'put ''eGUsVHQpKStNYXRoLmltdWwoTWUseHQpfDAsYj1NYXRoLmltdWwoTWUsVHQpLHk9eStNYXRoLmltdWwoT2UsWHQpfDAsbD0obD1sK01hdGguaW11bChPZSxRdCl8MCkrTWF0aC5pbXVsKENlLFh0KXwwLGI9YitNYXRoLmltdWwoQ2UsUXQpfDAseT15K01hdGguaW11bCh2ZSxzbil8MCxsPShs''@;'; put 'put ''PWwrTWF0aC5pbXVsKHZlLGl0KXwwKStNYXRoLmltdWwodWUsc24pfDAsYj1iK01hdGguaW11bCh1ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKFBlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsd3QpfDApK01hdGguaW11bChaZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFplLHd0KXwwO3ZhciBLaT0o''@;'; put 'put ''TCsoeT15K01hdGguaW11bChHLFFlKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxQdCl8MCkrTWF0aC5pbXVsKFEsUWUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxQdCl8MCkrKGw+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLHk9TWF0aC5pbXVs''@;'; put 'put ''KGJlLHh0KSxsPShsPU1hdGguaW11bChiZSxUdCkpK01hdGguaW11bCh3ZSx4dCl8MCxiPU1hdGguaW11bCh3ZSxUdCkseT15K01hdGguaW11bCh4ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLFF0KXwwKStNYXRoLmltdWwoTWUsWHQpfDAsYj1iK01hdGguaW11bChNZSxRdCl8MCx5PXkr''@;'; put 'put ''TWF0aC5pbXVsKE9lLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsaXQpfDApK01hdGguaW11bChDZSxzbil8MCxiPWIrTWF0aC5pbXVsKENlLGl0KXwwLHk9eStNYXRoLmltdWwodmUsTHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSx3dCl8MCkrTWF0aC5pbXVsKHVlLEx0KXwwLGI9YitNYXRo''@;'; put 'put ''LmltdWwodWUsd3QpfDAseT15K01hdGguaW11bChQZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLFB0KXwwKStNYXRoLmltdWwoWmUsUWUpfDAsYj1iK01hdGguaW11bChaZSxQdCl8MDt2YXIgVmk9KEwrKHk9eStNYXRoLmltdWwoRyxOZSl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKEcseXQpfDApK01hdGguaW11bChRLE5lKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEseXQpfDApKyhsPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2Myx5PU1hdGguaW11bChLZSx4dCksbD0obD1NYXRoLmltdWwoS2UsVHQpKStNYXRoLmltdWwoWWUseHQpfDAs''@;'; put 'put ''Yj1NYXRoLmltdWwoWWUsVHQpLHk9eStNYXRoLmltdWwoYmUsWHQpfDAsbD0obD1sK01hdGguaW11bChiZSxRdCl8MCkrTWF0aC5pbXVsKHdlLFh0KXwwLGI9YitNYXRoLmltdWwod2UsUXQpfDAseT15K01hdGguaW11bCh4ZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHhlLGl0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoTWUsc24pfDAsYj1iK01hdGguaW11bChNZSxpdCl8MCx5PXkrTWF0aC5pbXVsKE9lLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChDZSxMdCl8MCxiPWIrTWF0aC5pbXVsKENlLHd0KXwwLHk9eStNYXRoLmltdWwodmUsUWUpfDAsbD0obD1sK01hdGgu''@;'; put 'put ''aW11bCh2ZSxQdCl8MCkrTWF0aC5pbXVsKHVlLFFlKXwwLGI9YitNYXRoLmltdWwodWUsUHQpfDAseT15K01hdGguaW11bChQZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLHl0KXwwKStNYXRoLmltdWwoWmUsTmUpfDAsYj1iK01hdGguaW11bChaZSx5dCl8MDt2YXIgcXI9KEwrKHk9eStN''@;'; put 'put ''YXRoLmltdWwoRyxhdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsX3QpfDApK01hdGguaW11bChRLGF0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsX3QpfDApKyhsPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx5PU1hdGguaW11bChodCx4dCks''@;'; put 'put ''bD0obD1NYXRoLmltdWwoaHQsVHQpKStNYXRoLmltdWwodnQseHQpfDAsYj1NYXRoLmltdWwodnQsVHQpLHk9eStNYXRoLmltdWwoS2UsWHQpfDAsbD0obD1sK01hdGguaW11bChLZSxRdCl8MCkrTWF0aC5pbXVsKFllLFh0KXwwLGI9YitNYXRoLmltdWwoWWUsUXQpfDAseT15K01hdGguaW11''@;'; put 'put ''bChiZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGl0KXwwKStNYXRoLmltdWwod2Usc24pfDAsYj1iK01hdGguaW11bCh3ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKHhlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChNZSxMdCl8MCxiPWIrTWF0aC5pbXVsKE1l''@;'; put 'put ''LHd0KXwwLHk9eStNYXRoLmltdWwoT2UsUWUpfDAsbD0obD1sK01hdGguaW11bChPZSxQdCl8MCkrTWF0aC5pbXVsKENlLFFlKXwwLGI9YitNYXRoLmltdWwoQ2UsUHQpfDAseT15K01hdGguaW11bCh2ZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHl0KXwwKStNYXRoLmltdWwodWUsTmUp''@;'; put 'put ''fDAsYj1iK01hdGguaW11bCh1ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKFBlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsX3QpfDApK01hdGguaW11bChaZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFplLF90KXwwO3ZhciB1YT0oTCsoeT15K01hdGguaW11bChHLCR0KXwwKXwwKSsoKDgxOTEmKGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwoRyxIdCl8MCkrTWF0aC5pbXVsKFEsJHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxIdCl8MCkrKGw+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHR0LHh0KSxsPShsPU1hdGguaW11bCh0dCxUdCkpK01hdGguaW11''@;'; put 'put ''bChVZSx4dCl8MCxiPU1hdGguaW11bChVZSxUdCkseT15K01hdGguaW11bChodCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LFF0KXwwKStNYXRoLmltdWwodnQsWHQpfDAsYj1iK01hdGguaW11bCh2dCxRdCl8MCx5PXkrTWF0aC5pbXVsKEtlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoS2Us''@;'; put 'put ''aXQpfDApK01hdGguaW11bChZZSxzbil8MCxiPWIrTWF0aC5pbXVsKFllLGl0KXwwLHk9eStNYXRoLmltdWwoYmUsTHQpfDAsbD0obD1sK01hdGguaW11bChiZSx3dCl8MCkrTWF0aC5pbXVsKHdlLEx0KXwwLGI9YitNYXRoLmltdWwod2Usd3QpfDAseT15K01hdGguaW11bCh4ZSxRZSl8MCxs''@;'; put 'put ''PShsPWwrTWF0aC5pbXVsKHhlLFB0KXwwKStNYXRoLmltdWwoTWUsUWUpfDAsYj1iK01hdGguaW11bChNZSxQdCl8MCx5PXkrTWF0aC5pbXVsKE9lLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UseXQpfDApK01hdGguaW11bChDZSxOZSl8MCxiPWIrTWF0aC5pbXVsKENlLHl0KXwwLHk9eStN''@;'; put 'put ''YXRoLmltdWwodmUsYXQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxfdCl8MCkrTWF0aC5pbXVsKHVlLGF0KXwwLGI9YitNYXRoLmltdWwodWUsX3QpfDAseT15K01hdGguaW11bChQZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLEh0KXwwKStNYXRoLmltdWwoWmUsJHQpfDAsYj1iK01hdGgu''@;'; put 'put ''aW11bChaZSxIdCl8MDt2YXIgRmk9KEwrKHk9eStNYXRoLmltdWwoRyxubil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsbG4pfDApK01hdGguaW11bChRLG5uKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsbG4pfDApKyhsPj4+MTMpfDApKyhGaT4+PjI2KXwwLEZp''@;'; put 'put ''Jj02NzEwODg2Myx5PU1hdGguaW11bChMZSx4dCksbD0obD1NYXRoLmltdWwoTGUsVHQpKStNYXRoLmltdWwobnQseHQpfDAsYj1NYXRoLmltdWwobnQsVHQpLHk9eStNYXRoLmltdWwodHQsWHQpfDAsbD0obD1sK01hdGguaW11bCh0dCxRdCl8MCkrTWF0aC5pbXVsKFVlLFh0KXwwLGI9YitN''@;'; put 'put ''YXRoLmltdWwoVWUsUXQpfDAseT15K01hdGguaW11bChodCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGh0LGl0KXwwKStNYXRoLmltdWwodnQsc24pfDAsYj1iK01hdGguaW11bCh2dCxpdCl8MCx5PXkrTWF0aC5pbXVsKEtlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGgu''@;'; put 'put ''aW11bChZZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFllLHd0KXwwLHk9eStNYXRoLmltdWwoYmUsUWUpfDAsbD0obD1sK01hdGguaW11bChiZSxQdCl8MCkrTWF0aC5pbXVsKHdlLFFlKXwwLGI9YitNYXRoLmltdWwod2UsUHQpfDAseT15K01hdGguaW11bCh4ZSxOZSl8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKHhlLHl0KXwwKStNYXRoLmltdWwoTWUsTmUpfDAsYj1iK01hdGguaW11bChNZSx5dCl8MCx5PXkrTWF0aC5pbXVsKE9lLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsX3QpfDApK01hdGguaW11bChDZSxhdCl8MCxiPWIrTWF0aC5pbXVsKENlLF90KXwwLHk9eStNYXRoLmltdWwodmUs''@;'; put 'put ''JHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxIdCl8MCkrTWF0aC5pbXVsKHVlLCR0KXwwLGI9YitNYXRoLmltdWwodWUsSHQpfDAseT15K01hdGguaW11bChQZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKFBlLGxuKXwwKStNYXRoLmltdWwoWmUsbm4pfDAsYj1iK01hdGguaW11bChaZSxsbil8''@;'; put 'put ''MDt2YXIgUmE9KEwrKHk9eStNYXRoLmltdWwoRyxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsR3QpfDApK01hdGguaW11bChRLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsR3QpfDApKyhsPj4+MTMpfDApKyhSYT4+PjI2KXwwLFJhJj02NzEwODg2Myx5''@;'; put 'put ''PU1hdGguaW11bChMZSxYdCksbD0obD1NYXRoLmltdWwoTGUsUXQpKStNYXRoLmltdWwobnQsWHQpfDAsYj1NYXRoLmltdWwobnQsUXQpLHk9eStNYXRoLmltdWwodHQsc24pfDAsbD0obD1sK01hdGguaW11bCh0dCxpdCl8MCkrTWF0aC5pbXVsKFVlLHNuKXwwLGI9YitNYXRoLmltdWwoVWUs''@;'; put 'put ''aXQpfDAseT15K01hdGguaW11bChodCxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LHd0KXwwKStNYXRoLmltdWwodnQsTHQpfDAsYj1iK01hdGguaW11bCh2dCx3dCl8MCx5PXkrTWF0aC5pbXVsKEtlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsUHQpfDApK01hdGguaW11bChZZSxRZSl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKFllLFB0KXwwLHk9eStNYXRoLmltdWwoYmUsTmUpfDAsbD0obD1sK01hdGguaW11bChiZSx5dCl8MCkrTWF0aC5pbXVsKHdlLE5lKXwwLGI9YitNYXRoLmltdWwod2UseXQpfDAseT15K01hdGguaW11bCh4ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLF90KXww''@;'; put 'put ''KStNYXRoLmltdWwoTWUsYXQpfDAsYj1iK01hdGguaW11bChNZSxfdCl8MCx5PXkrTWF0aC5pbXVsKE9lLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsSHQpfDApK01hdGguaW11bChDZSwkdCl8MCxiPWIrTWF0aC5pbXVsKENlLEh0KXwwLHk9eStNYXRoLmltdWwodmUsbm4pfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bCh2ZSxsbil8MCkrTWF0aC5pbXVsKHVlLG5uKXwwLGI9YitNYXRoLmltdWwodWUsbG4pfDA7dmFyIG9pPShMKyh5PXkrTWF0aC5pbXVsKFBlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoUGUsR3QpfDApK01hdGguaW11bChaZSxhbil8MCkpPDwxMyl8MDtM''@;'; put 'put ''PSgoYj1iK01hdGguaW11bChaZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKG9pPj4+MjYpfDAsb2kmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHNuKSxsPShsPU1hdGguaW11bChMZSxpdCkpK01hdGguaW11bChudCxzbil8MCxiPU1hdGguaW11bChudCxpdCkseT15K01hdGguaW11bCh0dCxMdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKHR0LHd0KXwwKStNYXRoLmltdWwoVWUsTHQpfDAsYj1iK01hdGguaW11bChVZSx3dCl8MCx5PXkrTWF0aC5pbXVsKGh0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUHQpfDApK01hdGguaW11bCh2dCxRZSl8MCxiPWIrTWF0aC5pbXVsKHZ0LFB0KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwoS2UsTmUpfDAsbD0obD1sK01hdGguaW11bChLZSx5dCl8MCkrTWF0aC5pbXVsKFllLE5lKXwwLGI9YitNYXRoLmltdWwoWWUseXQpfDAseT15K01hdGguaW11bChiZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLF90KXwwKStNYXRoLmltdWwod2UsYXQpfDAsYj1iK01h''@;'; put 'put ''dGguaW11bCh3ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKHhlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsSHQpfDApK01hdGguaW11bChNZSwkdCl8MCxiPWIrTWF0aC5pbXVsKE1lLEh0KXwwLHk9eStNYXRoLmltdWwoT2Usbm4pfDAsbD0obD1sK01hdGguaW11bChPZSxsbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKENlLG5uKXwwLGI9YitNYXRoLmltdWwoQ2UsbG4pfDA7dmFyIFVpPShMKyh5PXkrTWF0aC5pbXVsKHZlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwodmUsR3QpfDApK01hdGguaW11bCh1ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh1ZSxHdCl8MCkr''@;'; put 'put ''KGw+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLEx0KSxsPShsPU1hdGguaW11bChMZSx3dCkpK01hdGguaW11bChudCxMdCl8MCxiPU1hdGguaW11bChudCx3dCkseT15K01hdGguaW11bCh0dCxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFB0KXww''@;'; put 'put ''KStNYXRoLmltdWwoVWUsUWUpfDAsYj1iK01hdGguaW11bChVZSxQdCl8MCx5PXkrTWF0aC5pbXVsKGh0LE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQseXQpfDApK01hdGguaW11bCh2dCxOZSl8MCxiPWIrTWF0aC5pbXVsKHZ0LHl0KXwwLHk9eStNYXRoLmltdWwoS2UsYXQpfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bChLZSxfdCl8MCkrTWF0aC5pbXVsKFllLGF0KXwwLGI9YitNYXRoLmltdWwoWWUsX3QpfDAseT15K01hdGguaW11bChiZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLEh0KXwwKStNYXRoLmltdWwod2UsJHQpfDAsYj1iK01hdGguaW11bCh3ZSxIdCl8MCx5PXkrTWF0aC5p''@;'; put 'put ''bXVsKHhlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bChNZSxubil8MCxiPWIrTWF0aC5pbXVsKE1lLGxuKXwwO3ZhciBWYT0oTCsoeT15K01hdGguaW11bChPZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKE9lLEd0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''Q2UsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoQ2UsR3QpfDApKyhsPj4+MTMpfDApKyhWYT4+PjI2KXwwLFZhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxRZSksbD0obD1NYXRoLmltdWwoTGUsUHQpKStNYXRoLmltdWwobnQsUWUpfDAsYj1NYXRoLmltdWwobnQsUHQpLHk9''@;'; put 'put ''eStNYXRoLmltdWwodHQsTmUpfDAsbD0obD1sK01hdGguaW11bCh0dCx5dCl8MCkrTWF0aC5pbXVsKFVlLE5lKXwwLGI9YitNYXRoLmltdWwoVWUseXQpfDAseT15K01hdGguaW11bChodCxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LF90KXwwKStNYXRoLmltdWwodnQsYXQpfDAsYj1iK01h''@;'; put 'put ''dGguaW11bCh2dCxfdCl8MCx5PXkrTWF0aC5pbXVsKEtlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsSHQpfDApK01hdGguaW11bChZZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFllLEh0KXwwLHk9eStNYXRoLmltdWwoYmUsbm4pfDAsbD0obD1sK01hdGguaW11bChiZSxsbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHdlLG5uKXwwLGI9YitNYXRoLmltdWwod2UsbG4pfDA7dmFyIHVyPShMKyh5PXkrTWF0aC5pbXVsKHhlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoeGUsR3QpfDApK01hdGguaW11bChNZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChNZSxHdCl8MCkr''@;'; put 'put ''KGw+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLE5lKSxsPShsPU1hdGguaW11bChMZSx5dCkpK01hdGguaW11bChudCxOZSl8MCxiPU1hdGguaW11bChudCx5dCkseT15K01hdGguaW11bCh0dCxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LF90KXww''@;'; put 'put ''KStNYXRoLmltdWwoVWUsYXQpfDAsYj1iK01hdGguaW11bChVZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGh0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsSHQpfDApK01hdGguaW11bCh2dCwkdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LEh0KXwwLHk9eStNYXRoLmltdWwoS2Usbm4pfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bChLZSxsbil8MCkrTWF0aC5pbXVsKFllLG5uKXwwLGI9YitNYXRoLmltdWwoWWUsbG4pfDA7dmFyIGZhPShMKyh5PXkrTWF0aC5pbXVsKGJlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoYmUsR3QpfDApK01hdGguaW11bCh3ZSxhbil8MCkpPDwxMyl8MDtM''@;'; put 'put ''PSgoYj1iK01hdGguaW11bCh3ZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKGZhPj4+MjYpfDAsZmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLGF0KSxsPShsPU1hdGguaW11bChMZSxfdCkpK01hdGguaW11bChudCxhdCl8MCxiPU1hdGguaW11bChudCxfdCkseT15K01hdGguaW11bCh0dCwkdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKHR0LEh0KXwwKStNYXRoLmltdWwoVWUsJHQpfDAsYj1iK01hdGguaW11bChVZSxIdCl8MCx5PXkrTWF0aC5pbXVsKGh0LG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsbG4pfDApK01hdGguaW11bCh2dCxubil8MCxiPWIrTWF0aC5pbXVsKHZ0LGxuKXwwO3Zh''@;'; put 'put ''ciB4aT0oTCsoeT15K01hdGguaW11bChLZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwoWWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoWWUsR3QpfDApKyhsPj4+MTMpfDApKyh4aT4+PjI2KXwwLHhpJj02NzEwODg2Myx5''@;'; put 'put ''PU1hdGguaW11bChMZSwkdCksbD0obD1NYXRoLmltdWwoTGUsSHQpKStNYXRoLmltdWwobnQsJHQpfDAsYj1NYXRoLmltdWwobnQsSHQpLHk9eStNYXRoLmltdWwodHQsbm4pfDAsbD0obD1sK01hdGguaW11bCh0dCxsbil8MCkrTWF0aC5pbXVsKFVlLG5uKXwwLGI9YitNYXRoLmltdWwoVWUs''@;'; put 'put ''bG4pfDA7dmFyIG9hPShMKyh5PXkrTWF0aC5pbXVsKGh0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoaHQsR3QpfDApK01hdGguaW11bCh2dCxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh2dCxHdCl8MCkrKGw+Pj4xMyl8MCkrKG9hPj4+MjYpfDAsb2EmPTY3''@;'; put 'put ''MTA4ODYzLHk9TWF0aC5pbXVsKExlLG5uKSxsPShsPU1hdGguaW11bChMZSxsbikpK01hdGguaW11bChudCxubil8MCxiPU1hdGguaW11bChudCxsbik7dmFyIFhpPShMKyh5PXkrTWF0aC5pbXVsKHR0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwodHQsR3QpfDApK01hdGgu''@;'; put 'put ''aW11bChVZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChVZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzO3ZhciBJcj0oTCsoeT1NYXRoLmltdWwoTGUsYW4pKXwwKSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKExlLEd0KSkrTWF0aC5pbXVsKG50''@;'; put 'put ''LGFuKXwwKSk8PDEzKXwwO3JldHVybiBMPSgoYj1NYXRoLmltdWwobnQsR3QpKSsobD4+PjEzKXwwKSsoSXI+Pj4yNil8MCxJciY9NjcxMDg4NjMsa1swXT1lYSxrWzFdPW1pLGtbMl09ZnIsa1szXT0kaSxrWzRdPUtpLGtbNV09Vmksa1s2XT1xcixrWzddPXVhLGtbOF09Rmksa1s5XT1SYSxr''@;'; put 'put ''WzEwXT1vaSxrWzExXT1VaSxrWzEyXT1WYSxrWzEzXT11cixrWzE0XT1mYSxrWzE1XT14aSxrWzE2XT1vYSxrWzE3XT1YaSxrWzE4XT1JciwwIT09TCYmKGtbMTldPUwsdi5sZW5ndGgrKyksdn07ZnVuY3Rpb24gWihSLHMsdSl7cmV0dXJuKG5ldyBVKS5tdWxwKFIscyx1KX1mdW5jdGlvbiBV''@;'; put 'put ''KFIscyl7dGhpcy54PVIsdGhpcy55PXN9TWF0aC5pbXVsfHwoSD1OKSxmLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihzLHUpe3ZhciB2LHA9dGhpcy5sZW5ndGgrcy5sZW5ndGg7cmV0dXJuIHY9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1zLmxlbmd0aD9IKHRoaXMscyx1KTpwPDYzP04odGhp''@;'; put 'put ''cyxzLHUpOnA8MTAyND9mdW5jdGlvbiB6KFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZSx1Lmxlbmd0aD1SLmxlbmd0aCtzLmxlbmd0aDtmb3IodmFyIHY9MCxwPTAsXz0wO188dS5sZW5ndGgtMTtfKyspe3ZhciBrPXA7cD0wO2Zvcih2YXIgTD02NzEwODg2MyZ2LHk9''@;'; put 'put ''TWF0aC5taW4oXyxzLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsXy1SLmxlbmd0aCsxKTtsPD15O2wrKyl7dmFyIFE9KDB8Ui53b3Jkc1tfLWxdKSooMHxzLndvcmRzW2xdKSxwZT02NzEwODg2MyZRO0w9NjcxMDg4NjMmKHBlPXBlK0x8MCkscCs9KGs9KGs9aysoUS82NzEwODg2NHwwKXwwKSso''@;'; put 'put ''cGU+Pj4yNil8MCk+Pj4yNixrJj02NzEwODg2M311LndvcmRzW19dPUwsdj1rLGs9cH1yZXR1cm4gMCE9PXY/dS53b3Jkc1tfXT12OnUubGVuZ3RoLS0sdS5zdHJpcCgpfSh0aGlzLHMsdSk6Wih0aGlzLHMsdSksdn0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihzKXtmb3IodmFyIHU9''@;'; put 'put ''bmV3IEFycmF5KHMpLHY9Zi5wcm90b3R5cGUuX2NvdW50Qml0cyhzKS0xLHA9MDtwPHM7cCsrKXVbcF09dGhpcy5yZXZCaW4ocCx2LHMpO3JldHVybiB1fSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocyx1LHYpe2lmKDA9PT1zfHxzPT09di0xKXJldHVybiBzO2Zvcih2YXIgcD0wLF89''@;'; put 'put ''MDtfPHU7XysrKXB8PSgxJnMpPDx1LV8tMSxzPj49MTtyZXR1cm4gcH0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihzLHUsdixwLF8sayl7Zm9yKHZhciBMPTA7TDxrO0wrKylwW0xdPXVbc1tMXV0sX1tMXT12W3NbTF1dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocyx1''@;'; put 'put ''LHYscCxfLGspe3RoaXMucGVybXV0ZShrLHMsdSx2LHAsXyk7Zm9yKHZhciBMPTE7TDxfO0w8PD0xKWZvcih2YXIgeT1MPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3kpLGI9TWF0aC5zaW4oMipNYXRoLlBJL3kpLHE9MDtxPF87cSs9eSlmb3IodmFyIEc9bCxRPWIscGU9MDtwZTxMO3BlKysp''@;'; put 'put ''e3ZhciBQZT12W3ErcGVdLFplPXBbcStwZV0scWU9dltxK3BlK0xdLHZlPXBbcStwZStMXSx1ZT1HKnFlLVEqdmU7dmU9Ryp2ZStRKnFlLHZbcStwZV09UGUrKHFlPXVlKSxwW3ErcGVdPVplK3ZlLHZbcStwZStMXT1QZS1xZSxwW3ErcGUrTF09WmUtdmUscGUhPT15JiYodWU9bCpHLWIqUSxR''@;'; put 'put ''PWwqUStiKkcsRz11ZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihzLHUpe3ZhciB2PTF8TWF0aC5tYXgodSxzKSxwPTEmdixfPTA7Zm9yKHY9di8yfDA7djt2Pj4+PTEpXysrO3JldHVybiAxPDxfKzErcH0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHMsdSx2''@;'; put 'put ''KXtpZighKHY8PTEpKWZvcih2YXIgcD0wO3A8di8yO3ArKyl7dmFyIF89c1twXTtzW3BdPXNbdi1wLTFdLHNbdi1wLTFdPV8sXz11W3BdLHVbcF09LXVbdi1wLTFdLHVbdi1wLTFdPS1ffX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciB2PTAscD0wO3A8''@;'; put 'put ''dS8yO3ArKyl7dmFyIF89ODE5MipNYXRoLnJvdW5kKHNbMipwKzFdL3UpK01hdGgucm91bmQoc1syKnBdL3UpK3Y7c1twXT02NzEwODg2MyZfLHY9Xzw2NzEwODg2ND8wOl8vNjcxMDg4NjR8MH1yZXR1cm4gc30sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihzLHUsdixwKXtmb3Io''@;'; put 'put ''dmFyIF89MCxrPTA7azx1O2srKyl2WzIqa109ODE5MSYoXys9MHxzW2tdKSx2WzIqaysxXT04MTkxJihfPj4+PTEzKSxfPj4+PTEzO2ZvcihrPTIqdTtrPHA7KytrKXZba109MDtvKDA9PT1fKSxvKCEoLTgxOTImXykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT1u''@;'; put 'put ''ZXcgQXJyYXkocyksdj0wO3Y8czt2KyspdVt2XT0wO3JldHVybiB1fSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcD0yKnRoaXMuZ3Vlc3NMZW4xM2Iocy5sZW5ndGgsdS5sZW5ndGgpLF89dGhpcy5tYWtlUkJUKHApLGs9dGhpcy5zdHViKHApLEw9bmV3IEFycmF5KHAp''@;'; put 'put ''LHk9bmV3IEFycmF5KHApLGw9bmV3IEFycmF5KHApLGI9bmV3IEFycmF5KHApLHE9bmV3IEFycmF5KHApLEc9bmV3IEFycmF5KHApLFE9di53b3JkcztRLmxlbmd0aD1wLHRoaXMuY29udmVydDEzYihzLndvcmRzLHMubGVuZ3RoLEwscCksdGhpcy5jb252ZXJ0MTNiKHUud29yZHMsdS5sZW5n''@;'; put 'put ''dGgsYixwKSx0aGlzLnRyYW5zZm9ybShMLGsseSxsLHAsXyksdGhpcy50cmFuc2Zvcm0oYixrLHEsRyxwLF8pO2Zvcih2YXIgcGU9MDtwZTxwO3BlKyspe3ZhciBQZT15W3BlXSpxW3BlXS1sW3BlXSpHW3BlXTtsW3BlXT15W3BlXSpHW3BlXStsW3BlXSpxW3BlXSx5W3BlXT1QZX1yZXR1cm4g''@;'; put 'put ''dGhpcy5jb25qdWdhdGUoeSxsLHApLHRoaXMudHJhbnNmb3JtKHksbCxRLGsscCxfKSx0aGlzLmNvbmp1Z2F0ZShRLGsscCksdGhpcy5ub3JtYWxpemUxM2IoUSxwKSx2Lm5lZ2F0aXZlPXMubmVnYXRpdmVedS5uZWdhdGl2ZSx2Lmxlbmd0aD1zLmxlbmd0aCt1Lmxlbmd0aCx2LnN0cmlwKCl9''@;'; put 'put ''LGYucHJvdG90eXBlLm11bD1mdW5jdGlvbihzKXt2YXIgdT1uZXcgZihudWxsKTtyZXR1cm4gdS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLHRoaXMubXVsVG8ocyx1KX0sZi5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihzKXt2YXIgdT1uZXcgZihudWxsKTtyZXR1cm4g''@;'; put 'put ''dS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLFoodGhpcyxzLHUpfSxmLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocyx0aGlzKX0sZi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IHMpLG8oczw2NzEwODg2NCk7Zm9yKHZhciB1PTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgcD0oMHx0aGlzLndvcmRzW3ZdKSpzLF89KDY3MTA4ODYzJnApKyg2NzEwODg2MyZ1KTt1Pj49MjYsdSs9cC82NzEwODg2NHwwLHUrPV8+Pj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJl99''@;'; put 'put ''cmV0dXJuIDAhPT11JiYodGhpcy53b3Jkc1t2XT11LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1zPzE6dGhpcy5sZW5ndGgsdGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHMpfSxmLnByb3RvdHlwZS5zcXI9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihzKXt2YXIgdT1mdW5jdGlvbiBGKFIpe2Zvcih2YXIgcz1uZXcgQXJyYXkoUi5iaXRMZW5n''@;'; put 'put ''dGgoKSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gbmV3IGYoMSk7Zm9yKHZhciB2PXRoaXMscD0wO3A8dS5sZW5ndGgmJjA9PT11W3BdO3ArKyx2PXYuc3Fy''@;'; put 'put ''KCkpO2lmKCsrcDx1Lmxlbmd0aClmb3IodmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgXyx1PXMl''@;'; put 'put ''MjYsdj0ocy11KS8yNixwPTY3MTA4ODYzPj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19dJnA7dGhpcy53b3Jkc1tfXT0oMHx0aGlzLndvcmRzW19dKS1MPDx1fGssaz1MPj4+MjYtdX1rJiYodGhpcy53''@;'; put 'put ''b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRoaXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7Xzx2O18rKyl0aGlzLndvcmRzW19dPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5w''@;'; put 'put ''cm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1LHYpe3ZhciBwO28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKSxwPXU/KHUtdSUyNikvMjY6MDt2YXIgXz1z''@;'; put 'put ''JTI2LGs9TWF0aC5taW4oKHMtXykvMjYsdGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFyIGw9MDtsPGs7bCsrKXkud29yZHNbbF09dGhpcy53b3Jkc1tsXTt5Lmxlbmd0aD1rfWlmKDAhPT1rKWlmKHRo''@;'; put 'put ''aXMubGVuZ3RoPmspZm9yKHRoaXMubGVuZ3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBiPTA7Zm9yKGw9dGhpcy5sZW5ndGgtMTtsPj0wJiYoMCE9PWJ8fGw+PXAp''@;'; put 'put ''O2wtLSl7dmFyIHE9MHx0aGlzLndvcmRzW2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocyl9LGYucHJvdG90eXBlLnVzaGxuPWZ1bmN0''@;'; put 'put ''aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS50ZXN0bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhpcy53b3Jkc1t2XSYxPDx1KSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9dj90aGlzOigwIT09dSYmdisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHYsdGhp''@;'; put 'put ''cy5sZW5ndGgpLDAhPT11JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51PDx1KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpKX0sZi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocyl9LGYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHMpe3JldHVybiBvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxzPDA/dGhpcy5pc3Vibigtcyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlz''@;'; put 'put ''LndvcmRzWzBdKTxzPyh0aGlzLndvcmRzWzBdPXMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocyl9LGYucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlv''@;'; put 'put ''bihzKXt0aGlzLndvcmRzWzBdKz1zO2Zvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbdV0+PTY3MTA4ODY0O3UrKyl0aGlzLndvcmRzW3VdLT02NzEwODg2NCx1PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3UrMV09MTp0aGlzLndvcmRzW3UrMV0rKztyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsdSsxKSx0aGlzfSxmLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihzKXtpZihvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxzPDApcmV0dXJuIHRoaXMuaWFkZG4oLXMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1zLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB1PTA7''@;'; put 'put ''dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XTwwO3UrKyl0aGlzLndvcmRzW3VdKz02NzEwODg2NCx0aGlzLndvcmRzW3UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5zdWJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocyl9LGYucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxm''@;'; put 'put ''LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocyx1LHYpe3ZhciBfO3RoaXMuX2V4cGFuZChzLmxlbmd0aCt2KTt2YXIgayxMPTA7Zm9yKF89MDtfPHMubGVuZ3RoO18rKyl7az0oMHx0aGlzLndvcmRzW18rdl0pK0w7dmFyIHk9KDB8cy53b3Jkc1tfXSkqdTtMPSgoay09NjcxMDg4''@;'; put 'put ''NjMmeSk+PjI2KS0oeS82NzEwODg2NHwwKSx0aGlzLndvcmRzW18rdl09NjcxMDg4NjMma31mb3IoO188dGhpcy5sZW5ndGgtdjtfKyspTD0oaz0oMHx0aGlzLndvcmRzW18rdl0pK0wpPj4yNix0aGlzLndvcmRzW18rdl09NjcxMDg4NjMmaztpZigwPT09TClyZXR1cm4gdGhpcy5zdHJpcCgp''@;'; put 'put ''O2ZvcihvKC0xPT09TCksTD0wLF89MDtfPHRoaXMubGVuZ3RoO18rKylMPShrPS0oMHx0aGlzLndvcmRzW19dKStMKT4+MjYsdGhpcy53b3Jkc1tfXT02NzEwODg2MyZrO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihz''@;'; put 'put ''LHUpe3ZhciB2LHA9dGhpcy5jbG9uZSgpLF89cyxrPTB8Xy53b3Jkc1tfLmxlbmd0aC0xXTswIT0odj0yNi10aGlzLl9jb3VudEJpdHMoaykpJiYoXz1fLnVzaGxuKHYpLHAuaXVzaGxuKHYpLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdKTt2YXIgbCx5PXAubGVuZ3RoLV8ubGVuZ3RoO2lmKCJt''@;'; put 'put ''b2QiIT09dSl7KGw9bmV3IGYobnVsbCkpLmxlbmd0aD15KzEsbC53b3Jkcz1uZXcgQXJyYXkobC5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8bC5sZW5ndGg7YisrKWwud29yZHNbYl09MH12YXIgcT1wLmNsb25lKCkuX2lzaGxuc3VibXVsKF8sMSx5KTswPT09cS5uZWdhdGl2ZSYmKHA9cSxsJiYo''@;'; put 'put ''bC53b3Jkc1t5XT0xKSk7Zm9yKHZhciBHPXktMTtHPj0wO0ctLSl7dmFyIFE9NjcxMDg4NjQqKDB8cC53b3Jkc1tfLmxlbmd0aCtHXSkrKDB8cC53b3Jkc1tfLmxlbmd0aCtHLTFdKTtmb3IoUT1NYXRoLm1pbihRL2t8MCw2NzEwODg2MykscC5faXNobG5zdWJtdWwoXyxRLEcpOzAhPT1wLm5l''@;'; put 'put ''Z2F0aXZlOylRLS0scC5uZWdhdGl2ZT0wLHAuX2lzaGxuc3VibXVsKF8sMSxHKSxwLmlzWmVybygpfHwocC5uZWdhdGl2ZV49MSk7bCYmKGwud29yZHNbR109USl9cmV0dXJuIGwmJmwuc3RyaXAoKSxwLnN0cmlwKCksImRpdiIhPT11JiYwIT09diYmcC5pdXNocm4odikse2RpdjpsfHxudWxs''@;'; put 'put ''LG1vZDpwfX0sZi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbyghcy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBmKDApLG1vZDpuZXcgZigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKHMs''@;'; put 'put ''dSksIm1vZCIhPT11JiYocD1rLmRpdi5uZWcoKSksImRpdiIhPT11JiYoXz1rLm1vZC5uZWcoKSx2JiYwIT09Xy5uZWdhdGl2ZSYmXy5pYWRkKHMpKSx7ZGl2OnAsbW9kOl99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmU/KGs9dGhpcy5kaXZtb2Qocy5uZWcoKSx1KSwibW9k''@;'; put 'put ''IiE9PXUmJihwPWsuZGl2Lm5lZygpKSx7ZGl2OnAsbW9kOmsubW9kfSk6dGhpcy5uZWdhdGl2ZSZzLm5lZ2F0aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKHMubmVnKCksdSksImRpdiIhPT11JiYoXz1rLm1vZC5uZWcoKSx2JiYwIT09Xy5uZWdhdGl2ZSYmXy5pc3ViKHMpKSx7ZGl2OmsuZGl2''@;'; put 'put ''LG1vZDpffSk6cy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHMpPDA/e2RpdjpuZXcgZigwKSxtb2Q6dGhpc306MT09PXMubGVuZ3RoPyJkaXYiPT09dT97ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT11P3tkaXY6bnVsbCxtb2Q6bmV3IGYodGhpcy5t''@;'; put 'put ''b2RuKHMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocy53b3Jkc1swXSksbW9kOm5ldyBmKHRoaXMubW9kbihzLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocyx1KTt2YXIgcCxfLGt9LGYucHJvdG90eXBlLmRpdj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywiZGl2Iiwh''@;'; put 'put ''MSkuZGl2fSxmLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGl2bW9kKHMsIm1vZCIsITEpLm1vZH0sZi5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMCkubW9kfSxmLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlv''@;'; put 'put ''bihzKXt2YXIgdT10aGlzLmRpdm1vZChzKTtpZih1Lm1vZC5pc1plcm8oKSlyZXR1cm4gdS5kaXY7dmFyIHY9MCE9PXUuZGl2Lm5lZ2F0aXZlP3UubW9kLmlzdWIocyk6dS5tb2QscD1zLnVzaHJuKDEpLF89cy5hbmRsbigxKSxrPXYuY21wKHApO3JldHVybiBrPDB8fDE9PT1fJiYwPT09az91''@;'; put 'put ''LmRpdjowIT09dS5kaXYubmVnYXRpdmU/dS5kaXYuaXN1Ym4oMSk6dS5kaXYuaWFkZG4oMSl9LGYucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2Myk7Zm9yKHZhciB1PSgxPDwyNiklcyx2PTAscD10aGlzLmxlbmd0aC0xO3A+PTA7cC0tKXY9KHUqdisoMHx0aGlzLndv''@;'; put 'put ''cmRzW3BdKSklcztyZXR1cm4gdn0sZi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2Myk7Zm9yKHZhciB1PTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXt2YXIgcD0oMHx0aGlzLndvcmRzW3ZdKSs2NzEwODg2NCp1O3RoaXMud29yZHNbdl09cC9zfDAsdT1wJXN9''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHMpfSxmLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUpLG8oIXMuaXNaZXJvKCkpO3ZhciB1PXRoaXMsdj1zLmNsb25lKCk7''@;'; put 'put ''dT0wIT09dS5uZWdhdGl2ZT91LnVtb2Qocyk6dS5jbG9uZSgpO2Zvcih2YXIgcD1uZXcgZigxKSxfPW5ldyBmKDApLGs9bmV3IGYoMCksTD1uZXcgZigxKSx5PTA7dS5pc0V2ZW4oKSYmdi5pc0V2ZW4oKTspdS5pdXNocm4oMSksdi5pdXNocm4oMSksKyt5O2Zvcih2YXIgbD12LmNsb25lKCks''@;'; put 'put ''Yj11LmNsb25lKCk7IXUuaXNaZXJvKCk7KXtmb3IodmFyIHE9MCxHPTE7ISh1LndvcmRzWzBdJkcpJiZxPDI2OysrcSxHPDw9MSk7aWYocT4wKWZvcih1Lml1c2hybihxKTtxLS0gPjA7KShwLmlzT2RkKCl8fF8uaXNPZGQoKSkmJihwLmlhZGQobCksXy5pc3ViKGIpKSxwLml1c2hybigxKSxf''@;'; put 'put ''Lml1c2hybigxKTtmb3IodmFyIFE9MCxwZT0xOyEodi53b3Jkc1swXSZwZSkmJlE8MjY7KytRLHBlPDw9MSk7aWYoUT4wKWZvcih2Lml1c2hybihRKTtRLS0gPjA7KShrLmlzT2RkKCl8fEwuaXNPZGQoKSkmJihrLmlhZGQobCksTC5pc3ViKGIpKSxrLml1c2hybigxKSxMLml1c2hybigxKTt1''@;'; put 'put ''LmNtcCh2KT49MD8odS5pc3ViKHYpLHAuaXN1YihrKSxfLmlzdWIoTCkpOih2LmlzdWIodSksay5pc3ViKHApLEwuaXN1YihfKSl9cmV0dXJue2E6ayxiOkwsZ2NkOnYuaXVzaGxuKHkpfX0sZi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUpLG8oIXMuaXNa''@;'; put 'put ''ZXJvKCkpO3ZhciBxLHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz12LmNsb25lKCk7dS5jbXBuKDEpPjAmJnYuY21wbigxKT4wOyl7Zm9yKHZhciBMPTAseT0xOyEodS53b3Jkc1sw''@;'; put 'put ''XSZ5KSYmTDwyNjsrK0wseTw8PTEpO2lmKEw+MClmb3IodS5pdXNocm4oTCk7TC0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChrKSxwLml1c2hybigxKTtmb3IodmFyIGw9MCxiPTE7ISh2LndvcmRzWzBdJmIpJiZsPDI2OysrbCxiPDw9MSk7aWYobD4wKWZvcih2Lml1c2hybihsKTtsLS0gPjA7''@;'; put 'put ''KV8uaXNPZGQoKSYmXy5pYWRkKGspLF8uaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3ViKF8pKToodi5pc3ViKHUpLF8uaXN1YihwKSl9cmV0dXJuKHE9MD09PXUuY21wbigxKT9wOl8pLmNtcG4oMCk8MCYmcS5pYWRkKHMpLHF9LGYucHJvdG90eXBlLmdjZD1mdW5jdGlv''@;'; put 'put ''bihzKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBzLmFicygpO2lmKHMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHU9dGhpcy5jbG9uZSgpLHY9cy5jbG9uZSgpO3UubmVnYXRpdmU9MCx2Lm5lZ2F0aXZlPTA7Zm9yKHZhciBwPTA7dS5pc0V2ZW4oKSYmdi5pc0V2ZW4oKTtwKysp''@;'; put 'put ''dS5pdXNocm4oMSksdi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3UuaXNFdmVuKCk7KXUuaXVzaHJuKDEpO2Zvcig7di5pc0V2ZW4oKTspdi5pdXNocm4oMSk7dmFyIF89dS5jbXAodik7aWYoXzwwKXt2YXIgaz11O3U9dix2PWt9ZWxzZSBpZigwPT09X3x8MD09PXYuY21wbigxKSlicmVhazt1''@;'; put 'put ''LmlzdWIodil9cmV0dXJuIHYuaXVzaGxuKHApfSxmLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmVnY2QocykuYS51bW9kKHMpfSxmLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LGYucHJvdG90eXBlLmlzT2RkPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMud29yZHNbMF0mc30sZi5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMpO3ZhciB1PXMlMjYsdj0ocy11KS8yNixw''@;'; put 'put ''PTE8PHU7aWYodGhpcy5sZW5ndGg8PXYpcmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl18PXAsdGhpcztmb3IodmFyIF89cCxrPXY7MCE9PV8mJms8dGhpcy5sZW5ndGg7aysrKXt2YXIgTD0wfHRoaXMud29yZHNba107Xz0oTCs9Xyk+Pj4yNix0aGlzLndvcmRzW2tdPUwm''@;'; put 'put ''PTY3MTA4ODYzfXJldHVybiAwIT09XyYmKHRoaXMud29yZHNba109Xyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxmLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sZi5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihzKXt2''@;'; put 'put ''YXIgdix1PXM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnUpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpdj0xO2Vsc2V7dSYmKHM9LXMpLG8oczw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFy''@;'; put 'put ''IHA9MHx0aGlzLndvcmRzWzBdO3Y9cD09PXM/MDpwPHM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdjp2fSxmLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgdT10aGlzLnVjbXAocyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXU6dX0sZi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihzKXtpZih0aGlzLmxlbmd0aD5zLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxzLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4tMTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPTB8dGhpcy53b3Jkc1t2XSxfPTB8cy53b3Jkc1t2XTtpZihwIT09Xyl7cDxfP3U9LTE6cD5fJiYodT0xKTticmVha319cmV0dXJuIHV9LGYucHJvdG90eXBlLmd0bj1mdW5jdGlvbihzKXtyZXR1cm4g''@;'; put 'put ''MT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIDE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPj0wfSxmLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21w''@;'; put 'put ''KHMpPj0wfSxmLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHMpe3JldHVybi0xPT09dGhpcy5jbXAocyl9LGYucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wbihzKTw9MH0s''@;'; put 'put ''Zi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcChzKTw9MH0sZi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5lcT1mdW5jdGlvbihzKXtyZXR1cm4gMD09PXRoaXMuY21wKHMpfSxmLnJlZD1mdW5j''@;'; put 'put ''dGlvbihzKXtyZXR1cm4gbmV3IG1lKHMpfSxmLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxvKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZl''@;'; put 'put ''cyIpLHMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChzKX0sZi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhp''@;'; put 'put ''cyl9LGYucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5yZWQ9cyx0aGlzfSxmLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3Jj''@;'; put 'put ''ZVJlZChzKX0sZi5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5y''@;'; put 'put ''ZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIo''@;'; put 'put ''dGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlz''@;'; put 'put ''LnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5Mih0aGlzLHMpLHRoaXMucmVkLm11bCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxzKSx0aGlzLnJlZC5pbXVsKHRo''@;'; put 'put ''aXMscyl9LGYucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sZi5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXJ0IHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGYucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxmLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0''@;'; put 'put ''aGlzKX0sZi5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkJiYhcy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscyl9O3ZhciBLPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVs''@;'; put 'put ''bCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gWChSLHMpe3RoaXMubmFtZT1SLHRoaXMucD1uZXcgZihzLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgZigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbmUo''@;'; put 'put ''KXtYLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gc2UoKXtYLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gaGUoKXtYLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gX2UoKXtYLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gbWUoUil7aWYoInN0cmluZyI9PXR5cGVvZiBSKXt2YXIgcz1mLl9wcmltZShSKTt0aGlzLm09cy5wLHRoaXMucHJpbWU9c31lbHNlIG8oUi5ndG4oMSksIm1vZHVsdXMg''@;'; put 'put ''bXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1SLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGZShSKXttZS5jYWxsKHRoaXMsUiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMu''@;'; put 'put ''cj1uZXcgZigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWlu''@;'; put 'put ''di51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1YLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJuIHMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxzfSxYLnByb3RvdHlwZS5pcmVkdWNlPWZ1''@;'; put 'put ''bmN0aW9uKHMpe3ZhciB2LHU9cztkb3t0aGlzLnNwbGl0KHUsdGhpcy50bXApLHY9KHU9KHU9dGhpcy5pbXVsSyh1KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHY+dGhpcy5uKTt2YXIgcD12PHRoaXMubj8tMTp1LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXA/KHUud29y''@;'; put 'put ''ZHNbMF09MCx1Lmxlbmd0aD0xKTpwPjA/dS5pc3ViKHRoaXMucCk6dm9pZCAwIT09dS5zdHJpcD91LnN0cmlwKCk6dS5fc3RyaXAoKSx1fSxYLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihzLHUpe3MuaXVzaHJuKHRoaXMubiwwLHUpfSxYLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXty''@;'; put 'put ''ZXR1cm4gcy5pbXVsKHRoaXMuayl9LEkobmUsWCksbmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciB2PTQxOTQzMDMscD1NYXRoLm1pbihzLmxlbmd0aCw5KSxfPTA7XzxwO18rKyl1LndvcmRzW19dPXMud29yZHNbX107aWYodS5sZW5ndGg9cCxzLmxlbmd0aDw9OSly''@;'; put 'put ''ZXR1cm4gcy53b3Jkc1swXT0wLHZvaWQocy5sZW5ndGg9MSk7dmFyIGs9cy53b3Jkc1s5XTtmb3IodS53b3Jkc1t1Lmxlbmd0aCsrXT1rJnYsXz0xMDtfPHMubGVuZ3RoO18rKyl7dmFyIEw9MHxzLndvcmRzW19dO3Mud29yZHNbXy0xMF09KEwmdik8PDR8az4+PjIyLGs9TH1zLndvcmRzW18t''@;'; put 'put ''MTBdPWs+Pj49MjIscy5sZW5ndGgtPTA9PT1rJiZzLmxlbmd0aD4xMD8xMDo5fSxuZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7cy53b3Jkc1tzLmxlbmd0aF09MCxzLndvcmRzW3MubGVuZ3RoKzFdPTAscy5sZW5ndGgrPTI7Zm9yKHZhciB1PTAsdj0wO3Y8cy5sZW5ndGg7disrKXt2''@;'; put 'put ''YXIgcD0wfHMud29yZHNbdl07cy53b3Jkc1t2XT02NzEwODg2MyYodSs9OTc3KnApLHU9NjQqcCsodS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJihzLmxlbmd0aC0tLDA9PT1zLndvcmRzW3MubGVuZ3RoLTFdJiZzLmxlbmd0aC0tKSxzfSxJKHNlLFgpLEko''@;'; put 'put ''aGUsWCksSShfZSxYKSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PTAsdj0wO3Y8cy5sZW5ndGg7disrKXt2YXIgcD0xOSooMHxzLndvcmRzW3ZdKSt1LF89NjcxMDg4NjMmcDtwPj4+PTI2LHMud29yZHNbdl09Xyx1PXB9cmV0dXJuIDAhPT11JiYocy53b3Jkc1tz''@;'; put 'put ''Lmxlbmd0aCsrXT11KSxzfSxmLl9wcmltZT1mdW5jdGlvbihzKXtpZihLW3NdKXJldHVybiBLW3NdO3ZhciB1O2lmKCJrMjU2Ij09PXMpdT1uZXcgbmU7ZWxzZSBpZigicDIyNCI9PT1zKXU9bmV3IHNlO2Vsc2UgaWYoInAxOTIiPT09cyl1PW5ldyBoZTtlbHNle2lmKCJwMjU1MTkiIT09cyl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitzKTt1PW5ldyBfZX1yZXR1cm4gS1tzXT11LHV9LG1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihzKXtvKDA9PT1zLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8ocy5yZWQsInJlZCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKX0sbWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHMsdSl7byghKHMubmVnYXRpdmV8dS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCYmcy5yZWQ9PT11LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocykuX2ZvcmNlUmVkKHRoaXMpOnMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihzKXtyZXR1''@;'; put 'put ''cm4gcy5pc1plcm8oKT9zLmNsb25lKCk6dGhpcy5tLnN1YihzKS5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5hZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1Yih0aGlzLm0pLHYuX2Zv''@;'; put 'put ''cmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlhZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1Yih0aGlzLm0pLHZ9LG1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJp''@;'; put 'put ''ZnkyKHMsdSk7dmFyIHY9cy5zdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5tKSx2Ll9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5pc3ViKHUpO3JldHVybiB2LmNtcG4oMCk8MCYm''@;'; put 'put ''di5pYWRkKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHMpLHRoaXMuaW1vZChzLnVzaGxuKHUpKX0sbWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChz''@;'; put 'put ''LmltdWwodSkpfSxtZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocyx1KSx0aGlzLmltb2Qocy5tdWwodSkpfSxtZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5pbXVsKHMscy5jbG9uZSgpKX0sbWUucHJvdG90eXBlLnNx''@;'; put 'put ''cj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5tdWwocyxzKX0sbWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocyl7aWYocy5pc1plcm8oKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciB1PXRoaXMubS5hbmRsbigzKTtpZihvKHUlMj09MSksMz09PXUpe3ZhciB2PXRoaXMubS5hZGQobmV3IGYoMSkp''@;'; put 'put ''Lml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocyx2KX1mb3IodmFyIHA9dGhpcy5tLnN1Ym4oMSksXz0wOyFwLmlzWmVybygpJiYwPT09cC5hbmRsbigxKTspXysrLHAuaXVzaHJuKDEpO28oIXAuaXNaZXJvKCkpO3ZhciBrPW5ldyBmKDEpLnRvUmVkKHRoaXMpLEw9ay5yZWROZWcoKSx5PXRo''@;'; put 'put ''aXMubS5zdWJuKDEpLml1c2hybigxKSxsPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobD1uZXcgZigyKmwqbCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGwseSkuY21wKEwpOylsLnJlZElBZGQoTCk7Zm9yKHZhciBiPXRoaXMucG93KGwscCkscT10aGlzLnBvdyhzLHAuYWRkbigxKS5pdXNo''@;'; put 'put ''cm4oMSkpLEc9dGhpcy5wb3cocyxwKSxRPV87MCE9PUcuY21wKGspOyl7Zm9yKHZhciBwZT1HLFBlPTA7MCE9PXBlLmNtcChrKTtQZSsrKXBlPXBlLnJlZFNxcigpO28oUGU8USk7dmFyIFplPXRoaXMucG93KGIsbmV3IGYoMSkuaXVzaGxuKFEtUGUtMSkpO3E9cS5yZWRNdWwoWmUpLGI9WmUu''@;'; put 'put ''cmVkU3FyKCksRz1HLnJlZE11bChiKSxRPVBlfXJldHVybiBxfSxtZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihzKXt2YXIgdT1zLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09dS5uZWdhdGl2ZT8odS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh1KS5yZWROZWcoKSk6dGhpcy5pbW9kKHUpfSxt''@;'; put 'put ''ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHMsdSl7aWYodS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMSkudG9SZWQodGhpcyk7aWYoMD09PXUuY21wbigxKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciBwPW5ldyBBcnJheSgxNik7cFswXT1uZXcgZigxKS50b1JlZCh0aGlzKSxwWzFdPXM7Zm9yKHZh''@;'; put 'put ''ciBfPTI7XzxwLmxlbmd0aDtfKyspcFtfXT10aGlzLm11bChwW18tMV0scyk7dmFyIGs9cFswXSxMPTAseT0wLGw9dS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxfPXUubGVuZ3RoLTE7Xz49MDtfLS0pe2Zvcih2YXIgYj11LndvcmRzW19dLHE9bC0xO3E+PTA7cS0tKXt2YXIg''@;'; put 'put ''Rz1iPj5xJjE7ayE9PXBbMF0mJihrPXRoaXMuc3FyKGspKSwwIT09R3x8MCE9PUw/KEw8PD0xLEx8PUcsKDQ9PSsreXx8MD09PV8mJjA9PT1xKSYmKGs9dGhpcy5tdWwoayxwW0xdKSx5PTAsTD0wKSk6eT0wfWw9MjZ9cmV0dXJuIGt9LG1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24o''@;'; put 'put ''cyl7dmFyIHU9cy51bW9kKHRoaXMubSk7cmV0dXJuIHU9PT1zP3UuY2xvbmUoKTp1fSxtZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocyl7dmFyIHU9cy5jbG9uZSgpO3JldHVybiB1LnJlZD1udWxsLHV9LGYubW9udD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IEZlKHMpfSxJKEZl''@;'; put 'put ''LG1lKSxGZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltb2Qocy51c2hsbih0aGlzLnNoaWZ0KSl9LEZlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT10aGlzLmltb2Qocy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHUucmVkPW51''@;'; put 'put ''bGwsdX0sRmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBzLndvcmRzWzBdPTAscy5sZW5ndGg9MSxzO3ZhciB2PXMuaW11bCh1KSxwPXYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hp''@;'; put 'put ''ZnQpLm11bCh0aGlzLm0pLF89di5pc3ViKHApLml1c2hybih0aGlzLnNoaWZ0KSxrPV87cmV0dXJuIF8uY21wKHRoaXMubSk+PTA/az1fLmlzdWIodGhpcy5tKTpfLmNtcG4oMCk8MCYmKGs9Xy5pYWRkKHRoaXMubSkpLGsuX2ZvcmNlUmVkKHRoaXMpfSxGZS5wcm90b3R5cGUubXVsPWZ1bmN0''@;'; put 'put ''aW9uKHMsdSl7aWYocy5pc1plcm8oKXx8dS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB2PXMubXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVz''@;'; put 'put ''aHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltb2Qocy5faW52''@;'; put 'put ''bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHRlPWQubm1kKHRlKSx0aGlzKX0sNjcyMTEodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg3MTk5MyksaD1kKDM0NzI1KSxvPWQoMzY2MzYpLEk9ZCgyNTQ0MyksZj1kKDMyNDcpO2Z1bmN0aW9uIFQoQSl7Zi5j''@;'; put 'put ''YWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9QX1TKFQsZiksVC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihBKXt0aGlzLl9oYXNoLnVwZGF0ZShBKX0sVC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LHRlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oTSl7cmV0dXJuIm1kNSI9PT0oTT1NLnRvTG93ZXJDYXNlKCkpP25ldyBoOiJybWQxNjAiPT09TXx8InJpcGVtZDE2MCI9PT1NP25ldyBvOm5ldyBUKEkoTSkpfX0sODM0MDcodGUsaixkKXt2YXIgUz1kKDM0NzI1KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGgpe3JldHVybihuZXcgUyku''@;'; put 'put ''dXBkYXRlKGgpLmRpZ2VzdCgpfX0sNTY0MzIodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg3MTk5MyksaD1kKDkwNTA5KSxvPWQoMzI0NyksST1kKDI3MDU0KS5CdWZmZXIsZj1kKDgzNDA3KSxUPWQoMzY2MzYpLEE9ZCgyNTQ0MyksTT1JLmFsbG9jKDEyOCk7ZnVuY3Rpb24gTyhELEUp''@;'; put 'put ''e28uY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIEUmJihFPUkuZnJvbShFKSk7dmFyIEI9InNoYTUxMiI9PT1EfHwic2hhMzg0Ij09PUQ/MTI4OjY0O3RoaXMuX2FsZz1ELHRoaXMuX2tleT1FLEUubGVuZ3RoPkI/RT0oInJtZDE2MCI9PT1EP25ldyBUOkEoRCkpLnVwZGF0''@;'; put 'put ''ZShFKS5kaWdlc3QoKTpFLmxlbmd0aDxCJiYoRT1JLmNvbmNhdChbRSxNXSxCKSk7Zm9yKHZhciBOPXRoaXMuX2lwYWQ9SS5hbGxvY1Vuc2FmZShCKSxIPXRoaXMuX29wYWQ9SS5hbGxvY1Vuc2FmZShCKSx6PTA7ejxCO3orKylOW3pdPTU0XkVbel0sSFt6XT05Ml5FW3pdO3RoaXMuX2hhc2g9''@;'; put 'put ''InJtZDE2MCI9PT1EP25ldyBUOkEoRCksdGhpcy5faGFzaC51cGRhdGUoTil9UyhPLG8pLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRCl7dGhpcy5faGFzaC51cGRhdGUoRCl9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0''@;'; put 'put ''dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBUOkEodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShEKS5kaWdlc3QoKX0sdGUuZXhwb3J0cz1mdW5jdGlvbihFLEIpe3JldHVybiJybWQxNjAiPT09KEU9RS50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1FP25l''@;'; put 'put ''dyBPKCJybWQxNjAiLEIpOiJtZDUiPT09RT9uZXcgaChmLEIpOm5ldyBPKEUsQil9fSw5MDUwOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDcxOTkzKSxoPWQoMjcwNTQpLkJ1ZmZlcixvPWQoMzI0NyksST1oLmFsbG9jKDEyOCksZj02NDtmdW5jdGlvbiBUKEEsTSl7by5jYWxsKHRo''@;'; put 'put ''aXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTSYmKE09aC5mcm9tKE0pKSx0aGlzLl9hbGc9QSx0aGlzLl9rZXk9TSxNLmxlbmd0aD5mP009QShNKTpNLmxlbmd0aDxmJiYoTT1oLmNvbmNhdChbTSxJXSxmKSk7Zm9yKHZhciBPPXRoaXMuX2lwYWQ9aC5hbGxvY1Vuc2FmZShmKSxEPXRo''@;'; put 'put ''aXMuX29wYWQ9aC5hbGxvY1Vuc2FmZShmKSxFPTA7RTxmO0UrKylPW0VdPTU0Xk1bRV0sRFtFXT05Ml5NW0VdO3RoaXMuX2hhc2g9W09dfVMoVCxvKSxULnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEEpe3RoaXMuX2hhc2gucHVzaChBKX0sVC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIEE9dGhpcy5fYWxnKGguY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKGguY29uY2F0KFt0aGlzLl9vcGFkLEFdKSl9LHRlLmV4cG9ydHM9VH0sOTE0MjYodGUsaixkKXsidXNlIHN0cmljdCI7ai5yYW5kb21CeXRlcz1qLnJuZz1qLnBzZXVkb1JhbmRvbUJ5dGVz''@;'; put 'put ''PWoucHJuZz1kKDMzNDIpLGouY3JlYXRlSGFzaD1qLkhhc2g9ZCg2NzIxMSksai5jcmVhdGVIbWFjPWouSG1hYz1kKDU2NDMyKTt2YXIgUz1kKDk5NTYwKSxoPU9iamVjdC5rZXlzKFMpLG89WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYw''@;'; put 'put ''Il0uY29uY2F0KGgpO2ouZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG99O3ZhciBJPWQoOTMzOTcpO2oucGJrZGYyPUkucGJrZGYyLGoucGJrZGYyU3luYz1JLnBia2RmMlN5bmM7dmFyIGY9ZCg4ODg2Mik7ai5DaXBoZXI9Zi5DaXBoZXIsai5jcmVhdGVDaXBoZXI9Zi5jcmVhdGVDaXBo''@;'; put 'put ''ZXIsai5DaXBoZXJpdj1mLkNpcGhlcml2LGouY3JlYXRlQ2lwaGVyaXY9Zi5jcmVhdGVDaXBoZXJpdixqLkRlY2lwaGVyPWYuRGVjaXBoZXIsai5jcmVhdGVEZWNpcGhlcj1mLmNyZWF0ZURlY2lwaGVyLGouRGVjaXBoZXJpdj1mLkRlY2lwaGVyaXYsai5jcmVhdGVEZWNpcGhlcml2PWYuY3Jl''@;'; put 'put ''YXRlRGVjaXBoZXJpdixqLmdldENpcGhlcnM9Zi5nZXRDaXBoZXJzLGoubGlzdENpcGhlcnM9Zi5saXN0Q2lwaGVyczt2YXIgVD1kKDQzNzcpO2ouRGlmZmllSGVsbG1hbkdyb3VwPVQuRGlmZmllSGVsbG1hbkdyb3VwLGouY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVQuY3JlYXRlRGlmZmll''@;'; put 'put ''SGVsbG1hbkdyb3VwLGouZ2V0RGlmZmllSGVsbG1hbj1ULmdldERpZmZpZUhlbGxtYW4sai5jcmVhdGVEaWZmaWVIZWxsbWFuPVQuY3JlYXRlRGlmZmllSGVsbG1hbixqLkRpZmZpZUhlbGxtYW49VC5EaWZmaWVIZWxsbWFuO3ZhciBBPWQoNzkxNDMpO2ouY3JlYXRlU2lnbj1BLmNyZWF0ZVNp''@;'; put 'put ''Z24sai5TaWduPUEuU2lnbixqLmNyZWF0ZVZlcmlmeT1BLmNyZWF0ZVZlcmlmeSxqLlZlcmlmeT1BLlZlcmlmeSxqLmNyZWF0ZUVDREg9ZCg4NzMwMyk7dmFyIE09ZCg1Mjk2NSk7ai5wdWJsaWNFbmNyeXB0PU0ucHVibGljRW5jcnlwdCxqLnByaXZhdGVFbmNyeXB0PU0ucHJpdmF0ZUVuY3J5''@;'; put 'put ''cHQsai5wdWJsaWNEZWNyeXB0PU0ucHVibGljRGVjcnlwdCxqLnByaXZhdGVEZWNyeXB0PU0ucHJpdmF0ZURlY3J5cHQ7dmFyIE89ZCg5NjgyKTtqLnJhbmRvbUZpbGw9Ty5yYW5kb21GaWxsLGoucmFuZG9tRmlsbFN5bmM9Ty5yYW5kb21GaWxsU3luYyxqLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1''@;'; put 'put ''bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldFxud2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Iil9LGouY29uc3RhbnRzPXtE''@;'; put 'put ''SF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NM''@;'; put 'put ''VjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lO''@;'; put 'put ''VF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sMTc2NTYodGUsaixkKXt2YXIgUzt0ZS5leHBvcnRzPShTPVN8fGZ1bmN0aW9uKGgpe3ZhciBJO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYoST13aW5kb3cuY3J5cHRvKSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYo''@;'; put 'put ''ST1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKEk9Z2xvYmFsVGhpcy5jcnlwdG8pLCFJJiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYoST13aW5kb3cubXNDcnlwdG8pLCFJJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xv''@;'; put 'put ''YmFsLmNyeXB0byYmKEk9Z2xvYmFsLmNyeXB0byksIUkpdHJ5e0k9ZCg5MTQyNil9Y2F0Y2h7fXZhciBmPWZ1bmN0aW9uKCl7aWYoSSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEkuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gSS5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEp''@;'; put 'put ''KVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIEkucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBJLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1''@;'; put 'put ''cmUgcmFuZG9tIG51bWJlci4iKX0sVD1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIFUoKXt9cmV0dXJuIGZ1bmN0aW9uKEspe3ZhciBYO3JldHVybiBVLnByb3RvdHlwZT1LLFg9bmV3IFUsVS5wcm90b3R5cGU9bnVsbCxYfX0oKSxBPXt9LE09QS5saWI9e30sTz1NLkJhc2U9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKFUpe3ZhciBLPVQodGhpcyk7cmV0dXJuIFUmJksubWl4SW4oVSksKCFLLmhhc093blByb3BlcnR5KCJpbml0Iil8fHRoaXMuaW5pdD09PUsuaW5pdCkmJihLLmluaXQ9ZnVuY3Rpb24oKXtLLiRzdXBlci5pbml0LmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX0pLEsuaW5pdC5wcm90b3R5cGU9SyxLLiRzdXBlcj10aGlzLEt9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBVPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIFUuaW5pdC5hcHBseShVLGFyZ3VtZW50cyksVX0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oVSl7Zm9yKHZh''@;'; put 'put ''ciBLIGluIFUpVS5oYXNPd25Qcm9wZXJ0eShLKSYmKHRoaXNbS109VVtLXSk7VS5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9VS50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX19KCks''@;'; put 'put ''RD1NLldvcmRBcnJheT1PLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihVLEspe1U9dGhpcy53b3Jkcz1VfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPUs/Szo0KlUubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbihVKXtyZXR1cm4oVXx8Qikuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24o''@;'; put 'put ''VSl7dmFyIEs9dGhpcy53b3JkcyxYPVUud29yZHMsbmU9dGhpcy5zaWdCeXRlcyxzZT1VLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSxuZSU0KWZvcih2YXIgaGU9MDtoZTxzZTtoZSsrKUtbbmUraGU+Pj4yXXw9KFhbaGU+Pj4yXT4+PjI0LWhlJTQqOCYyNTUpPDwyNC0obmUraGUpJTQqODtl''@;'; put 'put ''bHNlIGZvcih2YXIgbWU9MDttZTxzZTttZSs9NClLW25lK21lPj4+Ml09WFttZT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1zZSx0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciBVPXRoaXMud29yZHMsSz10aGlzLnNpZ0J5dGVzO1VbSz4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1LJTQqOCxV''@;'; put 'put ''Lmxlbmd0aD1oLmNlaWwoSy80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVT1PLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFUud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxVfSxyYW5kb206ZnVuY3Rpb24oVSl7Zm9yKHZhciBLPVtdLFg9MDtYPFU7WCs9NClLLnB1c2goZigpKTtyZXR1cm4g''@;'; put 'put ''bmV3IEQuaW5pdChLLFUpfX0pLEU9QS5lbmM9e30sQj1FLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe2Zvcih2YXIgSz1VLndvcmRzLFg9VS5zaWdCeXRlcyxuZT1bXSxzZT0wO3NlPFg7c2UrKyl7dmFyIGhlPUtbc2U+Pj4yXT4+PjI0LXNlJTQqOCYyNTU7bmUucHVzaCgoaGU+Pj40KS50''@;'; put 'put ''b1N0cmluZygxNikpLG5lLnB1c2goKDE1JmhlKS50b1N0cmluZygxNikpfXJldHVybiBuZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oVSl7Zm9yKHZhciBLPVUubGVuZ3RoLFg9W10sbmU9MDtuZTxLO25lKz0yKVhbbmU+Pj4zXXw9cGFyc2VJbnQoVS5zdWJzdHIobmUsMiksMTYpPDwyNC1u''@;'; put 'put ''ZSU4KjQ7cmV0dXJuIG5ldyBELmluaXQoWCxLLzIpfX0sRj1FLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe2Zvcih2YXIgSz1VLndvcmRzLFg9VS5zaWdCeXRlcyxuZT1bXSxzZT0wO3NlPFg7c2UrKyluZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoS1tzZT4+PjJdPj4+MjQtc2Ul''@;'; put 'put ''NCo4JjI1NSkpO3JldHVybiBuZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oVSl7Zm9yKHZhciBLPVUubGVuZ3RoLFg9W10sbmU9MDtuZTxLO25lKyspWFtuZT4+PjJdfD0oMjU1JlUuY2hhckNvZGVBdChuZSkpPDwyNC1uZSU0Kjg7cmV0dXJuIG5ldyBELmluaXQoWCxLKX19LE49RS5VdGY4''@;'; put 'put ''PXtzdHJpbmdpZnk6ZnVuY3Rpb24oVSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKEYuc3RyaW5naWZ5KFUpKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgVVRGLTggZGF0YSIpfX0scGFyc2U6ZnVuY3Rpb24oVSl7cmV0dXJuIEYucGFyc2UodW5lc2Nh''@;'; put 'put ''cGUoZW5jb2RlVVJJQ29tcG9uZW50KFUpKSl9fSxIPU0uQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1PLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBELmluaXQsdGhpcy5fbkRhdGFCeXRlcz0wfSxfYXBwZW5kOmZ1bmN0aW9uKFUpeyJzdHJpbmciPT10eXBlb2YgVSYm''@;'; put 'put ''KFU9Ti5wYXJzZShVKSksdGhpcy5fZGF0YS5jb25jYXQoVSksdGhpcy5fbkRhdGFCeXRlcys9VS5zaWdCeXRlc30sX3Byb2Nlc3M6ZnVuY3Rpb24oVSl7dmFyIEssWD10aGlzLl9kYXRhLG5lPVgud29yZHMsc2U9WC5zaWdCeXRlcyxoZT10aGlzLmJsb2NrU2l6ZSxtZT1zZS8oNCpoZSksRmU9''@;'; put 'put ''KG1lPVU/aC5jZWlsKG1lKTpoLm1heCgoMHxtZSktdGhpcy5fbWluQnVmZmVyU2l6ZSwwKSkqaGUsUj1oLm1pbig0KkZlLHNlKTtpZihGZSl7Zm9yKHZhciBzPTA7czxGZTtzKz1oZSl0aGlzLl9kb1Byb2Nlc3NCbG9jayhuZSxzKTtLPW5lLnNwbGljZSgwLEZlKSxYLnNpZ0J5dGVzLT1SfXJl''@;'; put 'put ''dHVybiBuZXcgRC5pbml0KEssUil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFU9Ty5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBVLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxVfSxfbWluQnVmZmVyU2l6ZTowfSksWj0oTS5IYXNoZXI9SC5leHRlbmQoe2NmZzpPLmV4dGVuZCgpLGluaXQ6ZnVu''@;'; put 'put ''Y3Rpb24oVSl7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKFUpLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtILnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuX2FwcGVuZChVKSx0aGlzLl9wcm9jZXNzKCksdGhp''@;'; put 'put ''c30sZmluYWxpemU6ZnVuY3Rpb24oVSl7cmV0dXJuIFUmJnRoaXMuX2FwcGVuZChVKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihLLFgpe3JldHVybiBuZXcgVS5pbml0KFgpLmZpbmFsaXplKEspfX0s''@;'; put 'put ''X2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKEssWCl7cmV0dXJuIG5ldyBaLkhNQUMuaW5pdChVLFgpLmZpbmFsaXplKEspfX19KSxBLmFsZ289e30pO3JldHVybiBBfShNYXRoKSxTKX0sNzg4NTUodGUsaixkKXt2YXIgUzt0ZS5leHBvcnRzPShTPWQoMTc2''@;'; put 'put ''NTYpLGZ1bmN0aW9uKGgpe3ZhciBvPVMsST1vLmxpYixmPUkuV29yZEFycmF5LFQ9SS5IYXNoZXIsQT1vLmFsZ28sTT1bXTshZnVuY3Rpb24oKXtmb3IodmFyIE49MDtOPDY0O04rKylNW05dPTQyOTQ5NjcyOTYqaC5hYnMoaC5zaW4oTisxKSl8MH0oKTt2YXIgTz1BLk1ENT1ULmV4dGVuZCh7''@;'; put 'put ''X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBmLmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oTixIKXtmb3IodmFyIHo9MDt6PDE2O3orKyl7dmFyIFo9SCt6LFU9TltaXTtOW1pdPTE2''@;'; put 'put ''NzExOTM1JihVPDw4fFU+Pj4yNCl8NDI3ODI1NTM2MCYoVTw8MjR8VT4+PjgpfXZhciBLPXRoaXMuX2hhc2gud29yZHMsWD1OW0grMF0sbmU9TltIKzFdLHNlPU5bSCsyXSxoZT1OW0grM10sX2U9TltIKzRdLG1lPU5bSCs1XSxGZT1OW0grNl0sUj1OW0grN10scz1OW0grOF0sdT1OW0grOV0s''@;'; put 'put ''dj1OW0grMTBdLHA9TltIKzExXSxfPU5bSCsxMl0saz1OW0grMTNdLEw9TltIKzE0XSx5PU5bSCsxNV0sbD1LWzBdLGI9S1sxXSxxPUtbMl0sRz1LWzNdO2w9RChsLGIscSxHLFgsNyxNWzBdKSxHPUQoRyxsLGIscSxuZSwxMixNWzFdKSxxPUQocSxHLGwsYixzZSwxNyxNWzJdKSxiPUQoYixx''@;'; put 'put ''LEcsbCxoZSwyMixNWzNdKSxsPUQobCxiLHEsRyxfZSw3LE1bNF0pLEc9RChHLGwsYixxLG1lLDEyLE1bNV0pLHE9RChxLEcsbCxiLEZlLDE3LE1bNl0pLGI9RChiLHEsRyxsLFIsMjIsTVs3XSksbD1EKGwsYixxLEcscyw3LE1bOF0pLEc9RChHLGwsYixxLHUsMTIsTVs5XSkscT1EKHEsRyxs''@;'; put 'put ''LGIsdiwxNyxNWzEwXSksYj1EKGIscSxHLGwscCwyMixNWzExXSksbD1EKGwsYixxLEcsXyw3LE1bMTJdKSxHPUQoRyxsLGIscSxrLDEyLE1bMTNdKSxxPUQocSxHLGwsYixMLDE3LE1bMTRdKSxsPUUobCxiPUQoYixxLEcsbCx5LDIyLE1bMTVdKSxxLEcsbmUsNSxNWzE2XSksRz1FKEcsbCxi''@;'; put 'put ''LHEsRmUsOSxNWzE3XSkscT1FKHEsRyxsLGIscCwxNCxNWzE4XSksYj1FKGIscSxHLGwsWCwyMCxNWzE5XSksbD1FKGwsYixxLEcsbWUsNSxNWzIwXSksRz1FKEcsbCxiLHEsdiw5LE1bMjFdKSxxPUUocSxHLGwsYix5LDE0LE1bMjJdKSxiPUUoYixxLEcsbCxfZSwyMCxNWzIzXSksbD1FKGws''@;'; put 'put ''YixxLEcsdSw1LE1bMjRdKSxHPUUoRyxsLGIscSxMLDksTVsyNV0pLHE9RShxLEcsbCxiLGhlLDE0LE1bMjZdKSxiPUUoYixxLEcsbCxzLDIwLE1bMjddKSxsPUUobCxiLHEsRyxrLDUsTVsyOF0pLEc9RShHLGwsYixxLHNlLDksTVsyOV0pLHE9RShxLEcsbCxiLFIsMTQsTVszMF0pLGw9Qihs''@;'; put 'put ''LGI9RShiLHEsRyxsLF8sMjAsTVszMV0pLHEsRyxtZSw0LE1bMzJdKSxHPUIoRyxsLGIscSxzLDExLE1bMzNdKSxxPUIocSxHLGwsYixwLDE2LE1bMzRdKSxiPUIoYixxLEcsbCxMLDIzLE1bMzVdKSxsPUIobCxiLHEsRyxuZSw0LE1bMzZdKSxHPUIoRyxsLGIscSxfZSwxMSxNWzM3XSkscT1C''@;'; put 'put ''KHEsRyxsLGIsUiwxNixNWzM4XSksYj1CKGIscSxHLGwsdiwyMyxNWzM5XSksbD1CKGwsYixxLEcsayw0LE1bNDBdKSxHPUIoRyxsLGIscSxYLDExLE1bNDFdKSxxPUIocSxHLGwsYixoZSwxNixNWzQyXSksYj1CKGIscSxHLGwsRmUsMjMsTVs0M10pLGw9QihsLGIscSxHLHUsNCxNWzQ0XSks''@;'; put 'put ''Rz1CKEcsbCxiLHEsXywxMSxNWzQ1XSkscT1CKHEsRyxsLGIseSwxNixNWzQ2XSksbD1GKGwsYj1CKGIscSxHLGwsc2UsMjMsTVs0N10pLHEsRyxYLDYsTVs0OF0pLEc9RihHLGwsYixxLFIsMTAsTVs0OV0pLHE9RihxLEcsbCxiLEwsMTUsTVs1MF0pLGI9RihiLHEsRyxsLG1lLDIxLE1bNTFd''@;'; put 'put ''KSxsPUYobCxiLHEsRyxfLDYsTVs1Ml0pLEc9RihHLGwsYixxLGhlLDEwLE1bNTNdKSxxPUYocSxHLGwsYix2LDE1LE1bNTRdKSxiPUYoYixxLEcsbCxuZSwyMSxNWzU1XSksbD1GKGwsYixxLEcscyw2LE1bNTZdKSxHPUYoRyxsLGIscSx5LDEwLE1bNTddKSxxPUYocSxHLGwsYixGZSwxNSxN''@;'; put 'put ''WzU4XSksYj1GKGIscSxHLGwsaywyMSxNWzU5XSksbD1GKGwsYixxLEcsX2UsNixNWzYwXSksRz1GKEcsbCxiLHEscCwxMCxNWzYxXSkscT1GKHEsRyxsLGIsc2UsMTUsTVs2Ml0pLGI9RihiLHEsRyxsLHUsMjEsTVs2M10pLEtbMF09S1swXStsfDAsS1sxXT1LWzFdK2J8MCxLWzJdPUtbMl0r''@;'; put 'put ''cXwwLEtbM109S1szXStHfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5fZGF0YSxIPU4ud29yZHMsej04KnRoaXMuX25EYXRhQnl0ZXMsWj04Kk4uc2lnQnl0ZXM7SFtaPj4+NV18PTEyODw8MjQtWiUzMjt2YXIgVT1oLmZsb29yKHovNDI5NDk2NzI5NiksSz16O0hbMTUr''@;'; put 'put ''KForNjQ+Pj45PDw0KV09MTY3MTE5MzUmKFU8PDh8VT4+PjI0KXw0Mjc4MjU1MzYwJihVPDwyNHxVPj4+OCksSFsxNCsoWis2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoSzw8OHxLPj4+MjQpfDQyNzgyNTUzNjAmKEs8PDI0fEs+Pj44KSxOLnNpZ0J5dGVzPTQqKEgubGVuZ3RoKzEpLHRoaXMuX3By''@;'; put 'put ''b2Nlc3MoKTtmb3IodmFyIFg9dGhpcy5faGFzaCxuZT1YLndvcmRzLHNlPTA7c2U8NDtzZSsrKXt2YXIgaGU9bmVbc2VdO25lW3NlXT0xNjcxMTkzNSYoaGU8PDh8aGU+Pj4yNCl8NDI3ODI1NTM2MCYoaGU8PDI0fGhlPj4+OCl9cmV0dXJuIFh9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIE49VC5j''@;'; put 'put ''bG9uZS5jYWxsKHRoaXMpO3JldHVybiBOLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxOfX0pO2Z1bmN0aW9uIEQoTixILHosWixVLEssWCl7dmFyIG5lPU4rKEgmenx+SCZaKStVK1g7cmV0dXJuKG5lPDxLfG5lPj4+MzItSykrSH1mdW5jdGlvbiBFKE4sSCx6LFosVSxLLFgpe3ZhciBuZT1O''@;'; put 'put ''KyhIJlp8eiZ+WikrVStYO3JldHVybihuZTw8S3xuZT4+PjMyLUspK0h9ZnVuY3Rpb24gQihOLEgseixaLFUsSyxYKXt2YXIgbmU9TisoSF56XlopK1UrWDtyZXR1cm4obmU8PEt8bmU+Pj4zMi1LKStIfWZ1bmN0aW9uIEYoTixILHosWixVLEssWCl7dmFyIG5lPU4rKHpeKEh8flopKStVK1g7''@;'; put 'put ''cmV0dXJuKG5lPDxLfG5lPj4+MzItSykrSH1vLk1ENT1ULl9jcmVhdGVIZWxwZXIoTyksby5IbWFjTUQ1PVQuX2NyZWF0ZUhtYWNIZWxwZXIoTyl9KE1hdGgpLFMuTUQ1KX0sOTI3MzYodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0NTcwKSxoPWQoNTg0MTMpLG89ZCg0Njc1OCksST1k''@;'; put 'put ''KDgzNzk4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKFQsQSxNKXtpZighVHx8Im9iamVjdCIhPXR5cGVvZiBUJiYiZnVuY3Rpb24iIT10eXBlb2YgVCl0aHJvdyBuZXcgbygiYG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAiKTtpZigic3RyaW5nIiE9dHlwZW9mIEEmJiJzeW1i''@;'; put 'put ''b2wiIT10eXBlb2YgQSl0aHJvdyBuZXcgbygiYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MyYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzNdJiZudWxsIT09YXJndW1lbnRzWzNdKXRocm93IG5ldyBvKCJgbm9uRW51''@;'; put 'put ''bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD40JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNF0mJm51bGwhPT1hcmd1bWVudHNbNF0pdGhyb3cgbmV3IG8oImBub25Xcml0YWJsZWAsIGlmIHByb3ZpZGVk''@;'; put 'put ''LCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD41JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNV0mJm51bGwhPT1hcmd1bWVudHNbNV0pdGhyb3cgbmV3IG8oImBub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xl''@;'; put 'put ''YW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NiYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzZdKXRocm93IG5ldyBvKCJgbG9vc2VgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4iKTt2YXIgTz1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOm51bGws''@;'; put 'put ''RD1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOm51bGwsRT1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOm51bGwsQj1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSxGPSEhSSYmSShULEEpO2lmKFMpUyhULEEse2NvbmZpZ3VyYWJsZTpudWxsPT09RSYmRj9G''@;'; put 'put ''LmNvbmZpZ3VyYWJsZTohRSxlbnVtZXJhYmxlOm51bGw9PT1PJiZGP0YuZW51bWVyYWJsZTohTyx2YWx1ZTpNLHdyaXRhYmxlOm51bGw9PT1EJiZGP0Yud3JpdGFibGU6IUR9KTtlbHNle2lmKCFCJiYoT3x8RHx8RSkpdGhyb3cgbmV3IGgoIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3Vw''@;'; put 'put ''cG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuIik7VFtBXT1NfX19LDcxNTQ5KHRlLGosZCl7InVzZSBzdHJpY3QiO2oudXRpbHM9ZCg4NTY3MSksai5DaXBoZXI9ZCgxMDIxOSksai5ERVM9ZCg2NDE2''@;'; put 'put ''Niksai5DQkM9ZCg4ODgwMCksai5FREU9ZCg2MjEyMil9LDg4ODAwKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzkyMTApLGg9ZCg3MTk5Myksbz17fTtmdW5jdGlvbiBJKFQpe1MuZXF1YWwoVC5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4''@;'; put 'put ''KTtmb3IodmFyIEE9MDtBPHRoaXMuaXYubGVuZ3RoO0ErKyl0aGlzLml2W0FdPVRbQV19ai5pbnN0YW50aWF0ZT1mdW5jdGlvbiBmKFQpe2Z1bmN0aW9uIEEoRSl7VC5jYWxsKHRoaXMsRSksdGhpcy5fY2JjSW5pdCgpfWgoQSxUKTtmb3IodmFyIE09T2JqZWN0LmtleXMobyksTz0wO088TS5s''@;'; put 'put ''ZW5ndGg7TysrKXt2YXIgRD1NW09dO0EucHJvdG90eXBlW0RdPW9bRF19cmV0dXJuIEEuY3JlYXRlPWZ1bmN0aW9uKEIpe3JldHVybiBuZXcgQShCKX0sQX0sby5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBBPW5ldyBJKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9QX0sby5fdXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKEEsTSxPLEQpe3ZhciBCPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxGPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBOPTA7Tjx0aGlzLmJsb2NrU2l6ZTtOKyspRltOXV49QVtNK05dO2ZvcihCLl91cGRh''@;'; put 'put ''dGUuY2FsbCh0aGlzLEYsMCxPLEQpLE49MDtOPHRoaXMuYmxvY2tTaXplO04rKylGW05dPU9bRCtOXX1lbHNle2ZvcihCLl91cGRhdGUuY2FsbCh0aGlzLEEsTSxPLEQpLE49MDtOPHRoaXMuYmxvY2tTaXplO04rKylPW0QrTl1ePUZbTl07Zm9yKE49MDtOPHRoaXMuYmxvY2tTaXplO04rKylG''@;'; put 'put ''W05dPUFbTStOXX19fSwxMDIxOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM5MjEwKTtmdW5jdGlvbiBoKG8pe3RoaXMub3B0aW9ucz1vLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09by5wYWRkaW5nfXRlLmV4cG9ydHM9aCxoLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30saC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEkpe3JldHVybiAwPT09SS5sZW5ndGg/W106ImRlY3J5''@;'; put 'put ''cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoSSk6dGhpcy5fdXBkYXRlRW5jcnlwdChJKX0saC5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihJLGYpe2Zvcih2YXIgVD1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsSS5sZW5ndGgtZiksQT0w''@;'; put 'put ''O0E8VDtBKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrQV09SVtmK0FdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9VCxUfSxoLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oSSxmKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSxmKSx0aGlzLmJ1ZmZlck9m''@;'; put 'put ''Zj0wLHRoaXMuYmxvY2tTaXplfSxoLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihJKXt2YXIgZj0wLFQ9MCxNPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0kubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYo''@;'; put 'put ''Zis9dGhpcy5fYnVmZmVyKEksZiksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihUKz10aGlzLl9mbHVzaEJ1ZmZlcihNLFQpKSk7Zm9yKHZhciBPPUkubGVuZ3RoLShJLmxlbmd0aC1mKSV0aGlzLmJsb2NrU2l6ZTtmPE87Zis9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBk''@;'; put 'put ''YXRlKEksZixNLFQpLFQrPXRoaXMuYmxvY2tTaXplO2Zvcig7ZjxJLmxlbmd0aDtmKyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09SVtmXTtyZXR1cm4gTX0saC5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oSSl7Zm9yKHZhciBmPTAsVD0w''@;'; put 'put ''LEE9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitJLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsTT1uZXcgQXJyYXkoQSp0aGlzLmJsb2NrU2l6ZSk7QT4wO0EtLSlmKz10aGlzLl9idWZmZXIoSSxmKSxUKz10aGlzLl9mbHVzaEJ1ZmZlcihNLFQpO3JldHVybiBmKz10aGlzLl9idWZmZXIo''@;'; put 'put ''SSxmKSxNfSxoLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihJKXt2YXIgZixUO3JldHVybiBJJiYoZj10aGlzLnVwZGF0ZShJKSksVD0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksZj9mLmNvbmNhdChUKTpUfSxoLnByb3Rv''@;'; put 'put ''dHlwZS5fcGFkPWZ1bmN0aW9uKEksZil7aWYoMD09PWYpcmV0dXJuITE7Zm9yKDtmPEkubGVuZ3RoOylJW2YrK109MDtyZXR1cm4hMH0saC5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltd''@;'; put 'put ''O3ZhciBJPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEksMCksSX0saC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEkpe3JldHVybiBJfSxoLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7Uy5lcXVhbCh0aGlz''@;'; put 'put ''LmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgST1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihJLDApLHRoaXMuX3VucGFkKEkpfX0sNjQxNjYodGUsaixkKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IFM9ZCgzOTIxMCksaD1kKDcxOTkzKSxvPWQoODU2NzEpLEk9ZCgxMDIxOSk7ZnVuY3Rpb24gZigpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBUKE0pe0kuY2FsbCh0aGlzLE0pO3ZhciBPPW5ldyBmO3RoaXMuX2Rlc1N0YXRlPU8sdGhpcy5kZXJpdmVL''@;'; put 'put ''ZXlzKE8sTS5rZXkpfWgoVCxJKSx0ZS5leHBvcnRzPVQsVC5jcmVhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBUKE8pfTt2YXIgQT1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07VC5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihPLEQpe08ua2V5cz1uZXcgQXJyYXko''@;'; put 'put ''MzIpLFMuZXF1YWwoRC5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBFPW8ucmVhZFVJbnQzMkJFKEQsMCksQj1vLnJlYWRVSW50MzJCRShELDQpO28ucGMxKEUsQixPLnRtcCwwKSxFPU8udG1wWzBdLEI9Ty50bXBbMV07Zm9yKHZhciBGPTA7RjxPLmtl''@;'; put 'put ''eXMubGVuZ3RoO0YrPTIpe3ZhciBOPUFbRj4+PjFdO0U9by5yMjhzaGwoRSxOKSxCPW8ucjI4c2hsKEIsTiksby5wYzIoRSxCLE8ua2V5cyxGKX19LFQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyxELEUsQil7dmFyIEY9dGhpcy5fZGVzU3RhdGUsTj1vLnJlYWRVSW50MzJCRShPLEQp''@;'; put 'put ''LEg9by5yZWFkVUludDMyQkUoTyxEKzQpO28uaXAoTixILEYudG1wLDApLE49Ri50bXBbMF0sSD1GLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChGLE4sSCxGLnRtcCwwKTp0aGlzLl9kZWNyeXB0KEYsTixILEYudG1wLDApLEg9Ri50bXBbMV0sby53cml0ZVVJ''@;'; put 'put ''bnQzMkJFKEUsTj1GLnRtcFswXSxCKSxvLndyaXRlVUludDMyQkUoRSxILEIrNCl9LFQucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oTyxEKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIEU9Ty5sZW5ndGgtRCxCPUQ7QjxPLmxlbmd0aDtCKyspT1tCXT1FO3JldHVybiEw''@;'; put 'put ''fSxULnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oTyl7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIE87Zm9yKHZhciBEPU9bTy5sZW5ndGgtMV0sRT1PLmxlbmd0aC1EO0U8Ty5sZW5ndGg7RSsrKVMuZXF1YWwoT1tFXSxEKTtyZXR1cm4gTy5zbGljZSgwLE8ubGVuZ3RoLUQpfSxULnBy''@;'; put 'put ''b3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihPLEQsRSxCLEYpe2Zvcih2YXIgTj1ELEg9RSx6PTA7ejxPLmtleXMubGVuZ3RoO3orPTIpe3ZhciBaPU8ua2V5c1t6XSxVPU8ua2V5c1t6KzFdO28uZXhwYW5kKEgsTy50bXAsMCk7dmFyIEs9by5zdWJzdGl0dXRlKFpePU8udG1wWzBdLFVePU8u''@;'; put 'put ''dG1wWzFdKSxuZT1IO0g9KE5eby5wZXJtdXRlKEspKT4+PjAsTj1uZX1vLnJpcChILE4sQixGKX0sVC5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oTyxELEUsQixGKXtmb3IodmFyIE49RSxIPUQsej1PLmtleXMubGVuZ3RoLTI7ej49MDt6LT0yKXt2YXIgWj1PLmtleXNbel0sVT1PLmtl''@;'; put 'put ''eXNbeisxXTtvLmV4cGFuZChOLE8udG1wLDApO3ZhciBLPW8uc3Vic3RpdHV0ZShaXj1PLnRtcFswXSxVXj1PLnRtcFsxXSksbmU9TjtOPShIXm8ucGVybXV0ZShLKSk+Pj4wLEg9bmV9by5yaXAoTixILEIsRil9fSw2MjEyMih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM5MjEwKSxo''@;'; put 'put ''PWQoNzE5OTMpLG89ZCgxMDIxOSksST1kKDY0MTY2KTtmdW5jdGlvbiBmKEEsTSl7Uy5lcXVhbChNLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIE89TS5zbGljZSgwLDgpLEQ9TS5zbGljZSg4LDE2KSxFPU0uc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9''@;'; put 'put ''PT1BP1tJLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Ok99KSxJLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OkR9KSxJLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5OkV9KV06W0kuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6RX0pLEkuY3JlYXRlKHt0eXBlOiJlbmNyeXB0Iixr''@;'; put 'put ''ZXk6RH0pLEkuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6T30pXX1mdW5jdGlvbiBUKEEpe28uY2FsbCh0aGlzLEEpO3ZhciBNPW5ldyBmKHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1NfWgoVCxvKSx0ZS5leHBvcnRzPVQsVC5jcmVhdGU9ZnVuY3Rpb24o''@;'; put 'put ''TSl7cmV0dXJuIG5ldyBUKE0pfSxULnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE0sTyxELEUpe3ZhciBCPXRoaXMuX2VkZVN0YXRlO0IuY2lwaGVyc1swXS5fdXBkYXRlKE0sTyxELEUpLEIuY2lwaGVyc1sxXS5fdXBkYXRlKEQsRSxELEUpLEIuY2lwaGVyc1syXS5fdXBkYXRlKEQsRSxE''@;'; put 'put ''LEUpfSxULnByb3RvdHlwZS5fcGFkPUkucHJvdG90eXBlLl9wYWQsVC5wcm90b3R5cGUuX3VucGFkPUkucHJvdG90eXBlLl91bnBhZH0sODU2NzEodGUsail7InVzZSBzdHJpY3QiO2oucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEksZil7cmV0dXJuKElbMCtmXTw8MjR8SVsxK2ZdPDwxNnxJWzIr''@;'; put 'put ''Zl08PDh8SVszK2ZdKT4+PjB9LGoud3JpdGVVSW50MzJCRT1mdW5jdGlvbihJLGYsVCl7SVswK1RdPWY+Pj4yNCxJWzErVF09Zj4+PjE2JjI1NSxJWzIrVF09Zj4+PjgmMjU1LElbMytUXT0yNTUmZn0sai5pcD1mdW5jdGlvbihJLGYsVCxBKXtmb3IodmFyIE09MCxPPTAsRD02O0Q+PTA7RC09''@;'; put 'put ''Mil7Zm9yKHZhciBFPTA7RTw9MjQ7RSs9OClNPDw9MSxNfD1mPj4+RStEJjE7Zm9yKEU9MDtFPD0yNDtFKz04KU08PD0xLE18PUk+Pj5FK0QmMX1mb3IoRD02O0Q+PTA7RC09Mil7Zm9yKEU9MTtFPD0yNTtFKz04KU88PD0xLE98PWY+Pj5FK0QmMTtmb3IoRT0xO0U8PTI1O0UrPTgpTzw8PTEs''@;'; put 'put ''T3w9ST4+PkUrRCYxfVRbQSswXT1NPj4+MCxUW0ErMV09Tz4+PjB9LGoucmlwPWZ1bmN0aW9uKEksZixULEEpe2Zvcih2YXIgTT0wLE89MCxEPTA7RDw0O0QrKylmb3IodmFyIEU9MjQ7RT49MDtFLT04KU08PD0xLE18PWY+Pj5FK0QmMSxNPDw9MSxNfD1JPj4+RStEJjE7Zm9yKEQ9NDtEPDg7''@;'; put 'put ''RCsrKWZvcihFPTI0O0U+PTA7RS09OClPPDw9MSxPfD1mPj4+RStEJjEsTzw8PTEsT3w9ST4+PkUrRCYxO1RbQSswXT1NPj4+MCxUW0ErMV09Tz4+PjB9LGoucGMxPWZ1bmN0aW9uKEksZixULEEpe2Zvcih2YXIgTT0wLE89MCxEPTc7RD49NTtELS0pe2Zvcih2YXIgRT0wO0U8PTI0O0UrPTgp''@;'; put 'put ''TTw8PTEsTXw9Zj4+RStEJjE7Zm9yKEU9MDtFPD0yNDtFKz04KU08PD0xLE18PUk+PkUrRCYxfWZvcihFPTA7RTw9MjQ7RSs9OClNPDw9MSxNfD1mPj5FK0QmMTtmb3IoRD0xO0Q8PTM7RCsrKXtmb3IoRT0wO0U8PTI0O0UrPTgpTzw8PTEsT3w9Zj4+RStEJjE7Zm9yKEU9MDtFPD0yNDtFKz04''@;'; put 'put ''KU88PD0xLE98PUk+PkUrRCYxfWZvcihFPTA7RTw9MjQ7RSs9OClPPDw9MSxPfD1JPj5FK0QmMTtUW0ErMF09TT4+PjAsVFtBKzFdPU8+Pj4wfSxqLnIyOHNobD1mdW5jdGlvbihJLGYpe3JldHVybiBJPDxmJjI2ODQzNTQ1NXxJPj4+MjgtZn07dmFyIGQ9WzE0LDExLDE3LDQsMjcsMjMsMjUs''@;'; put 'put ''MCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07ai5wYzI9ZnVuY3Rpb24oSSxmLFQsQSl7Zm9yKHZhciBNPTAsTz0wLEQ9ZC5sZW5ndGg+Pj4xLEU9''@;'; put 'put ''MDtFPEQ7RSsrKU08PD0xLE18PUk+Pj5kW0VdJjE7Zm9yKEU9RDtFPGQubGVuZ3RoO0UrKylPPDw9MSxPfD1mPj4+ZFtFXSYxO1RbQSswXT1NPj4+MCxUW0ErMV09Tz4+PjB9LGouZXhwYW5kPWZ1bmN0aW9uKEksZixUKXt2YXIgQT0wLE09MDtBPSgxJkkpPDw1fEk+Pj4yNztmb3IodmFyIE89''@;'; put 'put ''MjM7Tz49MTU7Ty09NClBPDw9NixBfD1JPj4+TyY2Mztmb3IoTz0xMTtPPj0zO08tPTQpTXw9ST4+Pk8mNjMsTTw8PTY7TXw9KDMxJkkpPDwxfEk+Pj4zMSxmW1QrMF09QT4+PjAsZltUKzFdPU0+Pj4wfTt2YXIgUz1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywx''@;'; put 'put ''MCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywx''@;'; put 'put ''MCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwy''@;'; put 'put ''LDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMs''@;'; put 'put ''NiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3''@;'; put 'put ''LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwx''@;'; put 'put ''NSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDks''@;'; put 'put ''MTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMyww''@;'; put 'put ''LDE1LDMsMyw1LDUsNiw4LDExXTtqLnN1YnN0aXR1dGU9ZnVuY3Rpb24oSSxmKXtmb3IodmFyIFQ9MCxBPTA7QTw0O0ErKylUPDw9NCxUfD1TWzY0KkErKEk+Pj4xOC02KkEmNjMpXTtmb3IoQT0wO0E8NDtBKyspVDw8PTQsVHw9U1syNTYrNjQqQSsoZj4+PjE4LTYqQSY2MyldO3JldHVybiBU''@;'; put 'put ''Pj4+MH07dmFyIGg9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO2oucGVybXV0ZT1mdW5jdGlvbihJKXtmb3IodmFyIGY9MCxUPTA7VDxoLmxlbmd0aDtUKyspZjw8PTEsZnw9ST4+''@;'; put 'put ''PmhbVF0mMTtyZXR1cm4gZj4+PjB9LGoucGFkU3BsaXQ9ZnVuY3Rpb24oSSxmLFQpe2Zvcih2YXIgQT1JLnRvU3RyaW5nKDIpO0EubGVuZ3RoPGY7KUE9IjAiK0E7Zm9yKHZhciBNPVtdLE89MDtPPGY7Tys9VClNLnB1c2goQS5zbGljZShPLE8rVCkpO3JldHVybiBNLmpvaW4oIiAiKX19LDQz''@;'; put 'put ''NzcodGUsaixkKXt2YXIgUz1kKDEyNzI3KSxoPWQoMjMyNDEpLG89ZCg5NDU5MyksZj17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O2ouRGlmZmllSGVsbG1hbkdyb3VwPWouY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWouZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBJKEEpe3ZhciBN''@;'; put 'put ''PW5ldyBCdWZmZXIoaFtBXS5wcmltZSwiaGV4IiksTz1uZXcgQnVmZmVyKGhbQV0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IG8oTSxPKX0sai5jcmVhdGVEaWZmaWVIZWxsbWFuPWouRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBUKEEsTSxPLEQpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTSl8fHZv''@;'; put 'put ''aWQgMD09PWZbTV0/VChBLCJiaW5hcnkiLE0sTyk6KE09TXx8ImJpbmFyeSIsRD1EfHwiYmluYXJ5IixPPU98fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoTyl8fChPPW5ldyBCdWZmZXIoTyxEKSksIm51bWJlciI9PXR5cGVvZiBBP25ldyBvKFMoQSxPKSxPLCEwKTooQnVmZmVy''@;'; put 'put ''LmlzQnVmZmVyKEEpfHwoQT1uZXcgQnVmZmVyKEEsTSkpLG5ldyBvKEEsTywhMCkpKX19LDk0NTkzKHRlLGosZCl7dmFyIFM9ZCgzODI4MCksbz1uZXcoZCg1MzQ1OSkpLEk9bmV3IFMoMjQpLGY9bmV3IFMoMTEpLFQ9bmV3IFMoMTApLEE9bmV3IFMoMyksTT1uZXcgUyg3KSxPPWQoMTI3Mjcp''@;'; put 'put ''LEQ9ZCgzMzQyKTtmdW5jdGlvbiBFKFosVSl7cmV0dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihaKXx8KFo9bmV3IEJ1ZmZlcihaLFUpKSx0aGlzLl9wdWI9bmV3IFMoWiksdGhpc31mdW5jdGlvbiBCKFosVSl7cmV0dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihaKXx8''@;'; put 'put ''KFo9bmV3IEJ1ZmZlcihaLFUpKSx0aGlzLl9wcml2PW5ldyBTKFopLHRoaXN9dGUuZXhwb3J0cz1IO3ZhciBGPXt9O2Z1bmN0aW9uIEgoWixVLEspe3RoaXMuc2V0R2VuZXJhdG9yKFUpLHRoaXMuX19wcmltZT1uZXcgUyhaKSx0aGlzLl9wcmltZT1TLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlz''@;'; put 'put ''Ll9wcmltZUxlbj1aLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAsSz8odGhpcy5zZXRQdWJsaWNLZXk9RSx0aGlzLnNldFByaXZhdGVLZXk9Qik6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24geihaLFUpe3ZhciBLPW5l''@;'; put 'put ''dyBCdWZmZXIoWi50b0FycmF5KCkpO3JldHVybiBVP0sudG9TdHJpbmcoVSk6S31PYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYm''@;'; put 'put ''KHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBOKFosVSl7dmFyIEs9VS50b1N0cmluZygiaGV4IiksWD1bSyxaLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKFggaW4gRilyZXR1cm4gRltYXTt2YXIgc2UsbmU9MDtpZihaLmlzRXZlbigpfHwhTy5zaW1wbGVTaWV2ZXx8IU8uZmVybWF0VGVz''@;'; put 'put ''dChaKXx8IW8udGVzdChaKSlyZXR1cm4gbmUrPTEsRltYXT1uZSs9IjAyIj09PUt8fCIwNSI9PT1LPzg6NCxuZTtzd2l0Y2goby50ZXN0KFouc2hybigxKSl8fChuZSs9MiksSyl7Y2FzZSIwMiI6Wi5tb2QoSSkuY21wKGYpJiYobmUrPTgpO2JyZWFrO2Nhc2UiMDUiOihzZT1aLm1vZChUKSku''@;'; put 'put ''Y21wKEEpJiZzZS5jbXAoTSkmJihuZSs9OCk7YnJlYWs7ZGVmYXVsdDpuZSs9NH1yZXR1cm4gRltYXT1uZSxuZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksSC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8''@;'; put 'put ''fCh0aGlzLl9wcml2PW5ldyBTKEQodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxILnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFop''@;'; put 'put ''e3ZhciBVPShaPShaPW5ldyBTKFopKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksSz1uZXcgQnVmZmVyKFUudG9BcnJheSgpKSxYPXRoaXMuZ2V0UHJpbWUoKTtpZihLLmxlbmd0aDxYLmxlbmd0aCl7dmFyIG5lPW5ldyBCdWZmZXIoWC5sZW5ndGgt''@;'; put 'put ''Sy5sZW5ndGgpO25lLmZpbGwoMCksSz1CdWZmZXIuY29uY2F0KFtuZSxLXSl9cmV0dXJuIEt9LEgucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihVKXtyZXR1cm4geih0aGlzLl9wdWIsVSl9LEgucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oVSl7cmV0dXJuIHoodGhp''@;'; put 'put ''cy5fcHJpdixVKX0sSC5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oWil7cmV0dXJuIHoodGhpcy5fX3ByaW1lLFopfSxILnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oWil7cmV0dXJuIHoodGhpcy5fZ2VuLFopfSxILnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24o''@;'; put 'put ''WixVKXtyZXR1cm4gVT1VfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFopfHwoWj1uZXcgQnVmZmVyKFosVSkpLHRoaXMuX19nZW49Wix0aGlzLl9nZW49bmV3IFMoWiksdGhpc319LDEyNzI3KHRlLGosZCl7dmFyIFM9ZCgzMzQyKTt0ZS5leHBvcnRzPW5lLG5lLnNpbXBsZVNpZXZlPUssbmUu''@;'; put 'put ''ZmVybWF0VGVzdD1YO3ZhciBoPWQoMzgyODApLG89bmV3IGgoMjQpLGY9bmV3KGQoNTM0NTkpKSxUPW5ldyBoKDEpLEE9bmV3IGgoMiksTT1uZXcgaCg1KSxFPShuZXcgaCgxNiksbmV3IGgoOCksbmV3IGgoMTApKSxCPW5ldyBoKDMpLE49KG5ldyBoKDcpLG5ldyBoKDExKSksSD1uZXcgaCg0''@;'; put 'put ''KSxaPShuZXcgaCgxMiksbnVsbCk7ZnVuY3Rpb24gSyhzZSl7Zm9yKHZhciBoZT1mdW5jdGlvbiBVKCl7aWYobnVsbCE9PVopcmV0dXJuIFo7dmFyIGhlPVtdO2hlWzBdPTI7Zm9yKHZhciBfZT0xLG1lPTM7bWU8MTA0ODU3NjttZSs9Mil7Zm9yKHZhciBGZT1NYXRoLmNlaWwoTWF0aC5zcXJ0''@;'; put 'put ''KG1lKSksUj0wO1I8X2UmJmhlW1JdPD1GZSYmbWUlaGVbUl0hPTA7UisrKTtfZSE9PVImJmhlW1JdPD1GZXx8KGhlW19lKytdPW1lKX1yZXR1cm4gWj1oZSxoZX0oKSxfZT0wO19lPGhlLmxlbmd0aDtfZSsrKWlmKDA9PT1zZS5tb2RuKGhlW19lXSkpcmV0dXJuIDA9PT1zZS5jbXBuKGhlW19l''@;'; put 'put ''XSk7cmV0dXJuITB9ZnVuY3Rpb24gWChzZSl7dmFyIGhlPWgubW9udChzZSk7cmV0dXJuIDA9PT1BLnRvUmVkKGhlKS5yZWRQb3coc2Uuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gbmUoc2UsaGUpe2lmKHNlPDE2KXJldHVybiBuZXcgaCgyPT09aGV8fDU9PT1oZT9bMTQw''@;'; put 'put ''LDEyM106WzE0MCwzOV0pO2hlPW5ldyBoKGhlKTtmb3IodmFyIF9lLG1lOzspe2ZvcihfZT1uZXcgaChTKE1hdGguY2VpbChzZS84KSkpO19lLmJpdExlbmd0aCgpPnNlOylfZS5pc2hybigxKTtpZihfZS5pc0V2ZW4oKSYmX2UuaWFkZChUKSxfZS50ZXN0bigxKXx8X2UuaWFkZChBKSxoZS5j''@;'; put 'put ''bXAoQSkpe2lmKCFoZS5jbXAoTSkpZm9yKDtfZS5tb2QoRSkuY21wKEIpOylfZS5pYWRkKEgpfWVsc2UgZm9yKDtfZS5tb2QobykuY21wKE4pOylfZS5pYWRkKEgpO2lmKEsobWU9X2Uuc2hybigxKSkmJksoX2UpJiZYKG1lKSYmWChfZSkmJmYudGVzdChtZSkmJmYudGVzdChfZSkpcmV0dXJu''@;'; put 'put ''IF9lfX19LDM4MjgwKHRlLGosZCl7IWZ1bmN0aW9uKFMsaCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oUixzKXtpZighUil0aHJvdyBuZXcgRXJyb3Ioc3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBJKFIscyl7Ui5zdXBlcl89czt2YXIgdT1mdW5jdGlvbigpe307dS5wcm90b3R5''@;'; put 'put ''cGU9cy5wcm90b3R5cGUsUi5wcm90b3R5cGU9bmV3IHUsUi5wcm90b3R5cGUuY29uc3RydWN0b3I9Un1mdW5jdGlvbiBmKFIscyx1KXtpZihmLmlzQk4oUikpcmV0dXJuIFI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9''@;'; put 'put ''PVImJigoImxlIj09PXN8fCJiZSI9PT1zKSYmKHU9cyxzPTEwKSx0aGlzLl9pbml0KFJ8fDAsc3x8MTAsdXx8ImJlIikpfXZhciBUOyJvYmplY3QiPT10eXBlb2YgUz9TLmV4cG9ydHM9ZjpoLkJOPWYsZi5CTj1mLGYud29yZFNpemU9MjY7dHJ5e1Q9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVv''@;'; put 'put ''ZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmQoNjYwODkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gQShSLHMpe3ZhciB1PVIuY2hhckNvZGVBdChzKTtyZXR1cm4gdT49NjUmJnU8PTcwP3UtNTU6dT49OTcmJnU8PTEwMj91LTg3OnUtNDgmMTV9ZnVuY3Rpb24gTShSLHMsdSl7''@;'; put 'put ''dmFyIHY9QShSLHUpO3JldHVybiB1LTE+PXMmJih2fD1BKFIsdS0xKTw8NCksdn1mdW5jdGlvbiBPKFIscyx1LHYpe2Zvcih2YXIgcD0wLF89TWF0aC5taW4oUi5sZW5ndGgsdSksaz1zO2s8XztrKyspe3ZhciBMPVIuY2hhckNvZGVBdChrKS00ODtwKj12LHArPUw+PTQ5P0wtNDkrMTA6TD49''@;'; put 'put ''MTc/TC0xNysxMDpMfXJldHVybiBwfWYuaXNCTj1mdW5jdGlvbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIGZ8fG51bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuY29uc3RydWN0b3Iud29yZFNpemU9PT1mLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHMud29yZHMpfSxmLm1heD1mdW5j''@;'; put 'put ''dGlvbihzLHUpe3JldHVybiBzLmNtcCh1KT4wP3M6dX0sZi5taW49ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk8MD9zOnV9LGYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHMsdSx2KXtpZigibnVtYmVyIj09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocyx1LHYpO2lm''@;'; put 'put ''KCJvYmplY3QiPT10eXBlb2YgcylyZXR1cm4gdGhpcy5faW5pdEFycmF5KHMsdSx2KTsiaGV4Ij09PXUmJih1PTE2KSxvKHU9PT0oMHx1KSYmdT49MiYmdTw9MzYpO3ZhciBwPTA7Ii0iPT09KHM9cy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihwKyssdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xKSxwPHMubGVuZ3RoJiYoMTY9PT11P3RoaXMuX3BhcnNlSGV4KHMscCx2KToodGhpcy5fcGFyc2VCYXNlKHMsdSxwKSwibGUiPT09diYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHUsdikpKX0sZi5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocyx1LHYpe3M8MCYm''@;'; put 'put ''KHRoaXMubmVnYXRpdmU9MSxzPS1zKSxzPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzXSx0aGlzLmxlbmd0aD0xKTpzPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG8oczw5MDA3MTk5''@;'; put 'put ''MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpfSxmLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHMsdSx2KXtpZihvKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2Ygcy5sZW5ndGgpLHMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMu''@;'; put 'put ''bGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIF8sayxMPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgtMSxfPTA7cD49MDtwLT0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twLTFdPDw4fHNbcC0yXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysxXT1rPj4+MjYtTCY2''@;'; put 'put ''NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7ZWxzZSBpZigibGUiPT09dilmb3IocD0wLF89MDtwPHMubGVuZ3RoO3ArPTMpdGhpcy53b3Jkc1tfXXw9KGs9c1twXXxzW3ArMV08PDh8c1twKzJdPDwxNik8PEwmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPWs+Pj4yNi1MJjY3MTA4''@;'; put 'put ''ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocyx1LHYpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocy5sZW5ndGgtdSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2''@;'; put 'put ''YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgTCxfPTAsaz0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTE7cD49dTtwLT0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9''@;'; put 'put ''TD4+PjI2KTpfKz04O2Vsc2UgZm9yKHA9KHMubGVuZ3RoLXUpJTI9PTA/dSsxOnU7cDxzLmxlbmd0aDtwKz0yKUw9TShzLHUscCk8PF8sdGhpcy53b3Jkc1trXXw9NjcxMDg4NjMmTCxfPj0xOD8oXy09MTgsdGhpcy53b3Jkc1trKz0xXXw9TD4+PjI2KTpfKz04O3RoaXMuc3RyaXAoKX0sZi5w''@;'; put 'put ''cm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihzLHUsdil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHA9MCxfPTE7Xzw9NjcxMDg4NjM7Xyo9dSlwKys7cC0tLF89Xy91fDA7Zm9yKHZhciBrPXMubGVuZ3RoLXYsTD1rJXAseT1NYXRoLm1pbihrLGstTCkrdixsPTAs''@;'; put 'put ''Yj12O2I8eTtiKz1wKWw9TyhzLGIsYitwLHUpLHRoaXMuaW11bG4oXyksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCk7aWYoMCE9PUwpe3ZhciBxPTE7Zm9yKGw9TyhzLGIscy5sZW5ndGgsdSksYj0wO2I8TDtiKyspcSo9dTt0aGlzLmlt''@;'; put 'put ''dWxuKHEpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihzKXtzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1''@;'; put 'put ''Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPXRoaXMubGVuZ3RoLHMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxzLnJlZD10aGlzLnJlZH0sZi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHMpLHN9LGYucHJv''@;'; put 'put ''dG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0x''@;'; put 'put ''XTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sZi5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEQ9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDEx''@;'; put 'put ''LDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxCPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4''@;'; put 'put ''LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0''@;'; put 'put ''MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlO3ZhciB2PVIubGVuZ3RoK3MubGVuZ3RofDA7dS5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Ui53b3Jkc1swXSxfPTB8cy53b3Jk''@;'; put 'put ''c1swXSxrPXAqXyx5PWsvNjcxMDg4NjR8MDt1LndvcmRzWzBdPTY3MTA4ODYzJms7Zm9yKHZhciBsPTE7bDx2O2wrKyl7Zm9yKHZhciBiPXk+Pj4yNixxPTY3MTA4ODYzJnksRz1NYXRoLm1pbihsLHMubGVuZ3RoLTEpLFE9TWF0aC5tYXgoMCxsLVIubGVuZ3RoKzEpO1E8PUc7USsrKWIrPShr''@;'; put 'put ''PShwPTB8Ui53b3Jkc1tsLVF8MF0pKihfPTB8cy53b3Jkc1tRXSkrcSkvNjcxMDg4NjR8MCxxPTY3MTA4ODYzJms7dS53b3Jkc1tsXT0wfHEseT0wfGJ9cmV0dXJuIDAhPT15P3Uud29yZHNbbF09MHx5OnUubGVuZ3RoLS0sdS5zdHJpcCgpfWYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9u''@;'; put 'put ''KHMsdSl7dmFyIHY7aWYodT0wfHV8fDEsMTY9PT0ocz1zfHwxMCl8fCJoZXgiPT09cyl7dj0iIjtmb3IodmFyIHA9MCxfPTAsaz0wO2s8dGhpcy5sZW5ndGg7aysrKXt2YXIgTD10aGlzLndvcmRzW2tdLHk9KDE2Nzc3MjE1JihMPDxwfF8pKS50b1N0cmluZygxNik7Xz1MPj4+MjQtcCYxNjc3''@;'; put 'put ''NzIxNSwocCs9Mik+PTI2JiYocC09MjYsay0tKSx2PTAhPT1ffHxrIT09dGhpcy5sZW5ndGgtMT9EWzYteS5sZW5ndGhdK3krdjp5K3Z9Zm9yKDAhPT1fJiYodj1fLnRvU3RyaW5nKDE2KSt2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0i''@;'; put 'put ''K3YpLHZ9aWYocz09PSgwfHMpJiZzPj0yJiZzPD0zNil7dmFyIGw9RVtzXSxiPUJbc107dj0iIjt2YXIgcT10aGlzLmNsb25lKCk7Zm9yKHEubmVnYXRpdmU9MDshcS5pc1plcm8oKTspe3ZhciBHPXEubW9kbihiKS50b1N0cmluZyhzKTt2PShxPXEuaWRpdm4oYikpLmlzWmVybygpP0crdjpE''@;'; put 'put ''W2wtRy5sZW5ndGhdK0crdn1mb3IodGhpcy5pc1plcm8oKSYmKHY9IjAiK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAiK3Y7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodj0iLSIrdiksdn1vKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGYucHJvdG90eXBlLnRvTnVt''@;'; put 'put ''YmVyPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9zKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhp''@;'; put 'put ''cy5sZW5ndGg+MiYmbyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXM6c30sZi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxmLnByb3RvdHlwZS50b0J1ZmZlcj1m''@;'; put 'put ''dW5jdGlvbihzLHUpe3JldHVybiBvKHR5cGVvZiBUPCJ1IiksdGhpcy50b0FycmF5TGlrZShULHMsdSl9LGYucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihz''@;'; put 'put ''LHUsdil7dmFyIHA9dGhpcy5ieXRlTGVuZ3RoKCksXz12fHxNYXRoLm1heCgxLHApO28ocDw9XywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG8oXz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHksbCxrPSJsZSI9PT11''@;'; put 'put ''LEw9bmV3IHMoXyksYj10aGlzLmNsb25lKCk7aWYoayl7Zm9yKGw9MDshYi5pc1plcm8oKTtsKyspeT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtsXT15O2Zvcig7bDxfO2wrKylMW2xdPTB9ZWxzZXtmb3IobD0wO2w8Xy1wO2wrKylMW2xdPTA7Zm9yKGw9MDshYi5pc1plcm8oKTtsKysp''@;'; put 'put ''eT1iLmFuZGxuKDI1NSksYi5pdXNocm4oOCksTFtfLWwtMV09eX1yZXR1cm4gTH0sZi5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHMpe3JldHVybiAzMi1NYXRoLmNsejMyKHMpfTpmdW5jdGlvbihzKXt2YXIgdT1zLHY9MDtyZXR1cm4gdT49NDA5NiYmKHYrPTEz''@;'; put 'put ''LHU+Pj49MTMpLHU+PTY0JiYodis9Nyx1Pj4+PTcpLHU+PTgmJih2Kz00LHU+Pj49NCksdT49MiYmKHYrPTIsdT4+Pj0yKSx2K3V9LGYucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihzKXtpZigwPT09cylyZXR1cm4gMjY7dmFyIHU9cyx2PTA7cmV0dXJuISg4MTkxJnUpJiYodis9MTMs''@;'; put 'put ''dT4+Pj0xMyksISgxMjcmdSkmJih2Kz03LHU+Pj49NyksISgxNSZ1KSYmKHYrPTQsdT4+Pj00KSwhKDMmdSkmJih2Kz0yLHU+Pj49MiksISgxJnUpJiZ2Kyssdn0sZi5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrdX0sZi5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcz0wLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl7dmFyIHY9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t1''@;'; put 'put ''XSk7aWYocys9diwyNiE9PXYpYnJlYWt9cmV0dXJuIHN9LGYucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGYucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhp''@;'; put 'put ''cy5hYnMoKS5pbm90bihzKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnRlc3RuKHMtMSk/dGhpcy5ub3RuKHMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGYucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxmLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sZi5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sZi5wcm90''@;'; put 'put ''b3R5cGUuaXVvcj1mdW5jdGlvbihzKXtmb3IoO3RoaXMubGVuZ3RoPHMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdfHMud29yZHNbdV07cmV0dXJuIHRoaXMuc3RyaXAoKX0s''@;'; put 'put ''Zi5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHMpfSxmLnByb3RvdHlwZS5vcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihzKTpzLmNsb25lKCku''@;'; put 'put ''aW9yKHRoaXMpfSxmLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHMpOnMuY2xvbmUoKS5pdW9yKHRoaXMpfSxmLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihzKXt2YXIgdTt1PXRoaXMubGVuZ3RoPnMubGVu''@;'; put 'put ''Z3RoP3M6dGhpcztmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPXRoaXMud29yZHNbdl0mcy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5u''@;'; put 'put ''ZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChzKX0sZi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChzKTpzLmNsb25lKCkuaWFuZCh0aGlzKX0sZi5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihzKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHMpOnMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sZi5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocyl7dmFyIHUsdjt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odT10aGlzLHY9cyk6KHU9cyx2PXRoaXMpO2Zvcih2YXIg''@;'; put 'put ''cD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXV52LndvcmRzW3BdO2lmKHRoaXMhPT11KWZvcig7cDx1Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT11LndvcmRzW3BdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBl''@;'; put 'put ''Lml4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1eG9yKHMpfSxmLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHMpOnMuY2xvbmUoKS5peG9yKHRo''@;'; put 'put ''aXMpfSxmLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Iocyk6cy5jbG9uZSgpLml1eG9yKHRoaXMpfSxmLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7''@;'; put 'put ''dmFyIHU9MHxNYXRoLmNlaWwocy8yNiksdj1zJTI2O3RoaXMuX2V4cGFuZCh1KSx2PjAmJnUtLTtmb3IodmFyIHA9MDtwPHU7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmfnRoaXMud29yZHNbcF07cmV0dXJuIHY+MCYmKHRoaXMud29yZHNbcF09fnRoaXMud29yZHNbcF0mNjcxMDg4NjM+''@;'; put 'put ''PjI2LXYpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUubm90bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHMpfSxmLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHMsdSl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB2PXMvMjZ8MCxwPXMlMjY7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl09dT90aGlzLndvcmRzW3ZdfDE8PHA6dGhpcy53b3Jkc1t2XSZ+KDE8PHApLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzKXt2YXIgdSx2LHA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZl''@;'; put 'put ''KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdT10aGlzLmlzdWIocyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHMubmVnYXRpdmU9MSx1Ll9ub3Jt''@;'; put 'put ''U2lnbigpO3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh2PXRoaXMscD1zKToodj1zLHA9dGhpcyk7Zm9yKHZhciBfPTAsaz0wO2s8cC5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrKDB8cC53b3Jkc1trXSkrXyksXz11Pj4+MjY7Zm9yKDswIT09XyYm''@;'; put 'put ''azx2Lmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKStfKSxfPXU+Pj4yNjtpZih0aGlzLmxlbmd0aD12Lmxlbmd0aCwwIT09Xyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1fLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih2IT09dGhpcylmb3IoO2s8di5s''@;'; put 'put ''ZW5ndGg7aysrKXRoaXMud29yZHNba109di53b3Jkc1trXTtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMpe3ZhciB1O3JldHVybiAwIT09cy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHMubmVnYXRpdmU9MCx1PXRoaXMuc3ViKHMpLHMubmVnYXRpdmVePTEs''@;'; put 'put ''dSk6MD09PXMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsdT1zLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsdSk6dGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocyk6cy5jbG9uZSgpLmlhZGQodGhpcyl9LGYucHJvdG90eXBlLmlz''@;'; put 'put ''dWI9ZnVuY3Rpb24ocyl7aWYoMCE9PXMubmVnYXRpdmUpe3MubmVnYXRpdmU9MDt2YXIgdT10aGlzLmlhZGQocyk7cmV0dXJuIHMubmVnYXRpdmU9MSx1Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHMpLHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBwLF8sdj10aGlzLmNtcChzKTtpZigwPT09dilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dj4wPyhwPXRoaXMsXz1zKToocD1zLF89dGhpcyk7Zm9yKHZhciBrPTAsTD0wO0w8Xy5s''@;'; put 'put ''ZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSktKDB8Xy53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNbTF09NjcxMDg4NjMmdTtmb3IoOzAhPT1rJiZMPHAubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7aWYoMD09PWsm''@;'; put 'put ''Jkw8cC5sZW5ndGgmJnAhPT10aGlzKWZvcig7TDxwLmxlbmd0aDtMKyspdGhpcy53b3Jkc1tMXT1wLndvcmRzW0xdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxMKSxwIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5z''@;'; put 'put ''dWI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHMpfTt2YXIgSD1mdW5jdGlvbihzLHUsdil7dmFyIHksbCxiLHA9cy53b3JkcyxfPXUud29yZHMsaz12LndvcmRzLEw9MCxxPTB8cFswXSxHPTgxOTEmcSxRPXE+Pj4xMyxwZT0wfHBbMV0sUGU9ODE5MSZwZSxaZT1wZT4+''@;'; put 'put ''PjEzLHFlPTB8cFsyXSx2ZT04MTkxJnFlLHVlPXFlPj4+MTMsemU9MHxwWzNdLE9lPTgxOTEmemUsQ2U9emU+Pj4xMyxrZT0wfHBbNF0seGU9ODE5MSZrZSxNZT1rZT4+PjEzLEllPTB8cFs1XSxiZT04MTkxJkllLHdlPUllPj4+MTMscHQ9MHxwWzZdLEtlPTgxOTEmcHQsWWU9cHQ+Pj4xMyxx''@;'; put 'put ''dD0wfHBbN10saHQ9ODE5MSZxdCx2dD1xdD4+PjEzLFl0PTB8cFs4XSx0dD04MTkxJll0LFVlPVl0Pj4+MTMsJGU9MHxwWzldLExlPTgxOTEmJGUsbnQ9JGU+Pj4xMyxybj0wfF9bMF0seHQ9ODE5MSZybixUdD1ybj4+PjEzLHluPTB8X1sxXSxYdD04MTkxJnluLFF0PXluPj4+MTMsWHI9MHxf''@;'; put 'put ''WzJdLHNuPTgxOTEmWHIsaXQ9WHI+Pj4xMyxDcj0wfF9bM10sTHQ9ODE5MSZDcix3dD1Dcj4+PjEzLFJuPTB8X1s0XSxRZT04MTkxJlJuLFB0PVJuPj4+MTMsUXI9MHxfWzVdLE5lPTgxOTEmUXIseXQ9UXI+Pj4xMyxycj0wfF9bNl0sYXQ9ODE5MSZycixfdD1ycj4+PjEzLHduPTB8X1s3XSwk''@;'; put 'put ''dD04MTkxJnduLEh0PXduPj4+MTMsc2k9MHxfWzhdLG5uPTgxOTEmc2ksbG49c2k+Pj4xMyxraT0wfF9bOV0sYW49ODE5MSZraSxHdD1raT4+PjEzO3YubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPTE5O3ZhciBlYT0oTCsoeT1NYXRoLmltdWwoRyx4dCkpfDApKygo''@;'; put 'put ''ODE5MSYobD0obD1NYXRoLmltdWwoRyxUdCkpK01hdGguaW11bChRLHh0KXwwKSk8PDEzKXwwO0w9KChiPU1hdGguaW11bChRLFR0KSkrKGw+Pj4xMyl8MCkrKGVhPj4+MjYpfDAsZWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKFBlLHh0KSxsPShsPU1hdGguaW11bChQZSxUdCkpK01hdGguaW11''@;'; put 'put ''bChaZSx4dCl8MCxiPU1hdGguaW11bChaZSxUdCk7dmFyIG1pPShMKyh5PXkrTWF0aC5pbXVsKEcsWHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFF0KXwwKStNYXRoLmltdWwoUSxYdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFF0KXwwKSsobD4+PjEzKXww''@;'; put 'put ''KSsobWk+Pj4yNil8MCxtaSY9NjcxMDg4NjMseT1NYXRoLmltdWwodmUseHQpLGw9KGw9TWF0aC5pbXVsKHZlLFR0KSkrTWF0aC5pbXVsKHVlLHh0KXwwLGI9TWF0aC5pbXVsKHVlLFR0KSx5PXkrTWF0aC5pbXVsKFBlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11''@;'; put 'put ''bChaZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFplLFF0KXwwO3ZhciBmcj0oTCsoeT15K01hdGguaW11bChHLHNuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxpdCl8MCkrTWF0aC5pbXVsKFEsc24pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxpdCl8MCkrKGw+Pj4x''@;'; put 'put ''Myl8MCkrKGZyPj4+MjYpfDAsZnImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKE9lLHh0KSxsPShsPU1hdGguaW11bChPZSxUdCkpK01hdGguaW11bChDZSx4dCl8MCxiPU1hdGguaW11bChDZSxUdCkseT15K01hdGguaW11bCh2ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLFF0KXwwKStNYXRo''@;'; put 'put ''LmltdWwodWUsWHQpfDAsYj1iK01hdGguaW11bCh1ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKFBlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsaXQpfDApK01hdGguaW11bChaZSxzbil8MCxiPWIrTWF0aC5pbXVsKFplLGl0KXwwO3ZhciAkaT0oTCsoeT15K01hdGguaW11bChHLEx0KXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyx3dCl8MCkrTWF0aC5pbXVsKFEsTHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx3dCl8MCkrKGw+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHhlLHh0KSxsPShsPU1hdGguaW11bCh4ZSxU''@;'; put 'put ''dCkpK01hdGguaW11bChNZSx4dCl8MCxiPU1hdGguaW11bChNZSxUdCkseT15K01hdGguaW11bChPZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFF0KXwwKStNYXRoLmltdWwoQ2UsWHQpfDAsYj1iK01hdGguaW11bChDZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHZlLHNuKXwwLGw9KGw9bCtN''@;'; put 'put ''YXRoLmltdWwodmUsaXQpfDApK01hdGguaW11bCh1ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHVlLGl0KXwwLHk9eStNYXRoLmltdWwoUGUsTHQpfDAsbD0obD1sK01hdGguaW11bChQZSx3dCl8MCkrTWF0aC5pbXVsKFplLEx0KXwwLGI9YitNYXRoLmltdWwoWmUsd3QpfDA7dmFyIEtpPShMKyh5''@;'; put 'put ''PXkrTWF0aC5pbXVsKEcsUWUpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLFB0KXwwKStNYXRoLmltdWwoUSxRZSl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLFB0KXwwKSsobD4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoYmUs''@;'; put 'put ''eHQpLGw9KGw9TWF0aC5pbXVsKGJlLFR0KSkrTWF0aC5pbXVsKHdlLHh0KXwwLGI9TWF0aC5pbXVsKHdlLFR0KSx5PXkrTWF0aC5pbXVsKHhlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsUXQpfDApK01hdGguaW11bChNZSxYdCl8MCxiPWIrTWF0aC5pbXVsKE1lLFF0KXwwLHk9eStNYXRo''@;'; put 'put ''LmltdWwoT2Usc24pfDAsbD0obD1sK01hdGguaW11bChPZSxpdCl8MCkrTWF0aC5pbXVsKENlLHNuKXwwLGI9YitNYXRoLmltdWwoQ2UsaXQpfDAseT15K01hdGguaW11bCh2ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHd0KXwwKStNYXRoLmltdWwodWUsTHQpfDAsYj1iK01hdGguaW11''@;'; put 'put ''bCh1ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKFBlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsUHQpfDApK01hdGguaW11bChaZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFplLFB0KXwwO3ZhciBWaT0oTCsoeT15K01hdGguaW11bChHLE5lKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''Ryx5dCl8MCkrTWF0aC5pbXVsKFEsTmUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSx5dCl8MCkrKGw+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKEtlLHh0KSxsPShsPU1hdGguaW11bChLZSxUdCkpK01hdGguaW11bChZZSx4dCl8MCxiPU1h''@;'; put 'put ''dGguaW11bChZZSxUdCkseT15K01hdGguaW11bChiZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFF0KXwwKStNYXRoLmltdWwod2UsWHQpfDAsYj1iK01hdGguaW11bCh3ZSxRdCl8MCx5PXkrTWF0aC5pbXVsKHhlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsaXQpfDApK01hdGguaW11''@;'; put 'put ''bChNZSxzbil8MCxiPWIrTWF0aC5pbXVsKE1lLGl0KXwwLHk9eStNYXRoLmltdWwoT2UsTHQpfDAsbD0obD1sK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKENlLEx0KXwwLGI9YitNYXRoLmltdWwoQ2Usd3QpfDAseT15K01hdGguaW11bCh2ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVs''@;'; put 'put ''KHZlLFB0KXwwKStNYXRoLmltdWwodWUsUWUpfDAsYj1iK01hdGguaW11bCh1ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKFBlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUseXQpfDApK01hdGguaW11bChaZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFplLHl0KXwwO3ZhciBxcj0oTCsoeT15K01hdGgu''@;'; put 'put ''aW11bChHLGF0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxfdCl8MCkrTWF0aC5pbXVsKFEsYXQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxfdCl8MCkrKGw+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGh0LHh0KSxsPShs''@;'; put 'put ''PU1hdGguaW11bChodCxUdCkpK01hdGguaW11bCh2dCx4dCl8MCxiPU1hdGguaW11bCh2dCxUdCkseT15K01hdGguaW11bChLZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLFF0KXwwKStNYXRoLmltdWwoWWUsWHQpfDAsYj1iK01hdGguaW11bChZZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGJl''@;'; put 'put ''LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsaXQpfDApK01hdGguaW11bCh3ZSxzbil8MCxiPWIrTWF0aC5pbXVsKHdlLGl0KXwwLHk9eStNYXRoLmltdWwoeGUsTHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKE1lLEx0KXwwLGI9YitNYXRoLmltdWwoTWUsd3Qp''@;'; put 'put ''fDAseT15K01hdGguaW11bChPZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLFB0KXwwKStNYXRoLmltdWwoQ2UsUWUpfDAsYj1iK01hdGguaW11bChDZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHZlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodmUseXQpfDApK01hdGguaW11bCh1ZSxOZSl8MCxi''@;'; put 'put ''PWIrTWF0aC5pbXVsKHVlLHl0KXwwLHk9eStNYXRoLmltdWwoUGUsYXQpfDAsbD0obD1sK01hdGguaW11bChQZSxfdCl8MCkrTWF0aC5pbXVsKFplLGF0KXwwLGI9YitNYXRoLmltdWwoWmUsX3QpfDA7dmFyIHVhPShMKyh5PXkrTWF0aC5pbXVsKEcsJHQpfDApfDApKygoODE5MSYobD0obD1s''@;'; put 'put ''K01hdGguaW11bChHLEh0KXwwKStNYXRoLmltdWwoUSwkdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLEh0KXwwKSsobD4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMseT1NYXRoLmltdWwodHQseHQpLGw9KGw9TWF0aC5pbXVsKHR0LFR0KSkrTWF0aC5pbXVsKFVl''@;'; put 'put ''LHh0KXwwLGI9TWF0aC5pbXVsKFVlLFR0KSx5PXkrTWF0aC5pbXVsKGh0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUXQpfDApK01hdGguaW11bCh2dCxYdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LFF0KXwwLHk9eStNYXRoLmltdWwoS2Usc24pfDAsbD0obD1sK01hdGguaW11bChLZSxpdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFllLHNuKXwwLGI9YitNYXRoLmltdWwoWWUsaXQpfDAseT15K01hdGguaW11bChiZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHd0KXwwKStNYXRoLmltdWwod2UsTHQpfDAsYj1iK01hdGguaW11bCh3ZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHhlLFFlKXwwLGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoeGUsUHQpfDApK01hdGguaW11bChNZSxRZSl8MCxiPWIrTWF0aC5pbXVsKE1lLFB0KXwwLHk9eStNYXRoLmltdWwoT2UsTmUpfDAsbD0obD1sK01hdGguaW11bChPZSx5dCl8MCkrTWF0aC5pbXVsKENlLE5lKXwwLGI9YitNYXRoLmltdWwoQ2UseXQpfDAseT15K01hdGgu''@;'; put 'put ''aW11bCh2ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLF90KXwwKStNYXRoLmltdWwodWUsYXQpfDAsYj1iK01hdGguaW11bCh1ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKFBlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsSHQpfDApK01hdGguaW11bChaZSwkdCl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KFplLEh0KXwwO3ZhciBGaT0oTCsoeT15K01hdGguaW11bChHLG5uKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxsbil8MCkrTWF0aC5pbXVsKFEsbm4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxsbil8MCkrKGw+Pj4xMyl8MCkrKEZpPj4+MjYpfDAsRmkmPTY3''@;'; put 'put ''MTA4ODYzLHk9TWF0aC5pbXVsKExlLHh0KSxsPShsPU1hdGguaW11bChMZSxUdCkpK01hdGguaW11bChudCx4dCl8MCxiPU1hdGguaW11bChudCxUdCkseT15K01hdGguaW11bCh0dCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFF0KXwwKStNYXRoLmltdWwoVWUsWHQpfDAsYj1iK01hdGgu''@;'; put 'put ''aW11bChVZSxRdCl8MCx5PXkrTWF0aC5pbXVsKGh0LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsaXQpfDApK01hdGguaW11bCh2dCxzbil8MCxiPWIrTWF0aC5pbXVsKHZ0LGl0KXwwLHk9eStNYXRoLmltdWwoS2UsTHQpfDAsbD0obD1sK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFllLEx0KXwwLGI9YitNYXRoLmltdWwoWWUsd3QpfDAseT15K01hdGguaW11bChiZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLFB0KXwwKStNYXRoLmltdWwod2UsUWUpfDAsYj1iK01hdGguaW11bCh3ZSxQdCl8MCx5PXkrTWF0aC5pbXVsKHhlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''eGUseXQpfDApK01hdGguaW11bChNZSxOZSl8MCxiPWIrTWF0aC5pbXVsKE1lLHl0KXwwLHk9eStNYXRoLmltdWwoT2UsYXQpfDAsbD0obD1sK01hdGguaW11bChPZSxfdCl8MCkrTWF0aC5pbXVsKENlLGF0KXwwLGI9YitNYXRoLmltdWwoQ2UsX3QpfDAseT15K01hdGguaW11bCh2ZSwkdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKHZlLEh0KXwwKStNYXRoLmltdWwodWUsJHQpfDAsYj1iK01hdGguaW11bCh1ZSxIdCl8MCx5PXkrTWF0aC5pbXVsKFBlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsbG4pfDApK01hdGguaW11bChaZSxubil8MCxiPWIrTWF0aC5pbXVsKFplLGxuKXwwO3Zh''@;'; put 'put ''ciBSYT0oTCsoeT15K01hdGguaW11bChHLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxHdCl8MCkrTWF0aC5pbXVsKFEsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLHk9TWF0''@;'; put 'put ''aC5pbXVsKExlLFh0KSxsPShsPU1hdGguaW11bChMZSxRdCkpK01hdGguaW11bChudCxYdCl8MCxiPU1hdGguaW11bChudCxRdCkseT15K01hdGguaW11bCh0dCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGl0KXwwKStNYXRoLmltdWwoVWUsc24pfDAsYj1iK01hdGguaW11bChVZSxpdCl8''@;'; put 'put ''MCx5PXkrTWF0aC5pbXVsKGh0LEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsd3QpfDApK01hdGguaW11bCh2dCxMdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LHd0KXwwLHk9eStNYXRoLmltdWwoS2UsUWUpfDAsbD0obD1sK01hdGguaW11bChLZSxQdCl8MCkrTWF0aC5pbXVsKFllLFFlKXwwLGI9''@;'; put 'put ''YitNYXRoLmltdWwoWWUsUHQpfDAseT15K01hdGguaW11bChiZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLHl0KXwwKStNYXRoLmltdWwod2UsTmUpfDAsYj1iK01hdGguaW11bCh3ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKHhlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsX3QpfDApK01h''@;'; put 'put ''dGguaW11bChNZSxhdCl8MCxiPWIrTWF0aC5pbXVsKE1lLF90KXwwLHk9eStNYXRoLmltdWwoT2UsJHQpfDAsbD0obD1sK01hdGguaW11bChPZSxIdCl8MCkrTWF0aC5pbXVsKENlLCR0KXwwLGI9YitNYXRoLmltdWwoQ2UsSHQpfDAseT15K01hdGguaW11bCh2ZSxubil8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKHZlLGxuKXwwKStNYXRoLmltdWwodWUsbm4pfDAsYj1iK01hdGguaW11bCh1ZSxsbil8MDt2YXIgb2k9KEwrKHk9eStNYXRoLmltdWwoUGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChQZSxHdCl8MCkrTWF0aC5pbXVsKFplLGFuKXwwKSk8PDEzKXwwO0w9KChi''@;'; put 'put ''PWIrTWF0aC5pbXVsKFplLEd0KXwwKSsobD4+PjEzKXwwKSsob2k+Pj4yNil8MCxvaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsc24pLGw9KGw9TWF0aC5pbXVsKExlLGl0KSkrTWF0aC5pbXVsKG50LHNuKXwwLGI9TWF0aC5pbXVsKG50LGl0KSx5PXkrTWF0aC5pbXVsKHR0LEx0KXwwLGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwodHQsd3QpfDApK01hdGguaW11bChVZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFVlLHd0KXwwLHk9eStNYXRoLmltdWwoaHQsUWUpfDAsbD0obD1sK01hdGguaW11bChodCxQdCl8MCkrTWF0aC5pbXVsKHZ0LFFlKXwwLGI9YitNYXRoLmltdWwodnQsUHQpfDAseT15K01h''@;'; put 'put ''dGguaW11bChLZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLHl0KXwwKStNYXRoLmltdWwoWWUsTmUpfDAsYj1iK01hdGguaW11bChZZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGJlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsX3QpfDApK01hdGguaW11bCh3ZSxhdCl8MCxiPWIrTWF0aC5p''@;'; put 'put ''bXVsKHdlLF90KXwwLHk9eStNYXRoLmltdWwoeGUsJHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxIdCl8MCkrTWF0aC5pbXVsKE1lLCR0KXwwLGI9YitNYXRoLmltdWwoTWUsSHQpfDAseT15K01hdGguaW11bChPZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGxuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''Q2Usbm4pfDAsYj1iK01hdGguaW11bChDZSxsbil8MDt2YXIgVWk9KEwrKHk9eStNYXRoLmltdWwodmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh2ZSxHdCl8MCkrTWF0aC5pbXVsKHVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHVlLEd0KXwwKSsobD4+''@;'; put 'put ''PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTHQpLGw9KGw9TWF0aC5pbXVsKExlLHd0KSkrTWF0aC5pbXVsKG50LEx0KXwwLGI9TWF0aC5pbXVsKG50LHd0KSx5PXkrTWF0aC5pbXVsKHR0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsUHQpfDApK01h''@;'; put 'put ''dGguaW11bChVZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFVlLFB0KXwwLHk9eStNYXRoLmltdWwoaHQsTmUpfDAsbD0obD1sK01hdGguaW11bChodCx5dCl8MCkrTWF0aC5pbXVsKHZ0LE5lKXwwLGI9YitNYXRoLmltdWwodnQseXQpfDAseT15K01hdGguaW11bChLZSxhdCl8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKEtlLF90KXwwKStNYXRoLmltdWwoWWUsYXQpfDAsYj1iK01hdGguaW11bChZZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGJlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsSHQpfDApK01hdGguaW11bCh3ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHdlLEh0KXwwLHk9eStNYXRoLmltdWwo''@;'; put 'put ''eGUsbm4pfDAsbD0obD1sK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKE1lLG5uKXwwLGI9YitNYXRoLmltdWwoTWUsbG4pfDA7dmFyIFZhPShMKyh5PXkrTWF0aC5pbXVsKE9lLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChDZSxh''@;'; put 'put ''bil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChDZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFZhPj4+MjYpfDAsVmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLFFlKSxsPShsPU1hdGguaW11bChMZSxQdCkpK01hdGguaW11bChudCxRZSl8MCxiPU1hdGguaW11bChudCxQdCkseT15K01h''@;'; put 'put ''dGguaW11bCh0dCxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHl0KXwwKStNYXRoLmltdWwoVWUsTmUpfDAsYj1iK01hdGguaW11bChVZSx5dCl8MCx5PXkrTWF0aC5pbXVsKGh0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsX3QpfDApK01hdGguaW11bCh2dCxhdCl8MCxiPWIrTWF0aC5p''@;'; put 'put ''bXVsKHZ0LF90KXwwLHk9eStNYXRoLmltdWwoS2UsJHQpfDAsbD0obD1sK01hdGguaW11bChLZSxIdCl8MCkrTWF0aC5pbXVsKFllLCR0KXwwLGI9YitNYXRoLmltdWwoWWUsSHQpfDAseT15K01hdGguaW11bChiZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGxuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''d2Usbm4pfDAsYj1iK01hdGguaW11bCh3ZSxsbil8MDt2YXIgdXI9KEwrKHk9eStNYXRoLmltdWwoeGUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh4ZSxHdCl8MCkrTWF0aC5pbXVsKE1lLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKE1lLEd0KXwwKSsobD4+''@;'; put 'put ''PjEzKXwwKSsodXI+Pj4yNil8MCx1ciY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsTmUpLGw9KGw9TWF0aC5pbXVsKExlLHl0KSkrTWF0aC5pbXVsKG50LE5lKXwwLGI9TWF0aC5pbXVsKG50LHl0KSx5PXkrTWF0aC5pbXVsKHR0LGF0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsX3QpfDApK01h''@;'; put 'put ''dGguaW11bChVZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFVlLF90KXwwLHk9eStNYXRoLmltdWwoaHQsJHQpfDAsbD0obD1sK01hdGguaW11bChodCxIdCl8MCkrTWF0aC5pbXVsKHZ0LCR0KXwwLGI9YitNYXRoLmltdWwodnQsSHQpfDAseT15K01hdGguaW11bChLZSxubil8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUsbm4pfDAsYj1iK01hdGguaW11bChZZSxsbil8MDt2YXIgZmE9KEwrKHk9eStNYXRoLmltdWwoYmUsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChiZSxHdCl8MCkrTWF0aC5pbXVsKHdlLGFuKXwwKSk8PDEzKXwwO0w9KChi''@;'; put 'put ''PWIrTWF0aC5pbXVsKHdlLEd0KXwwKSsobD4+PjEzKXwwKSsoZmE+Pj4yNil8MCxmYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsYXQpLGw9KGw9TWF0aC5pbXVsKExlLF90KSkrTWF0aC5pbXVsKG50LGF0KXwwLGI9TWF0aC5pbXVsKG50LF90KSx5PXkrTWF0aC5pbXVsKHR0LCR0KXwwLGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwodHQsSHQpfDApK01hdGguaW11bChVZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFVlLEh0KXwwLHk9eStNYXRoLmltdWwoaHQsbm4pfDAsbD0obD1sK01hdGguaW11bChodCxsbil8MCkrTWF0aC5pbXVsKHZ0LG5uKXwwLGI9YitNYXRoLmltdWwodnQsbG4pfDA7dmFyIHhp''@;'; put 'put ''PShMKyh5PXkrTWF0aC5pbXVsKEtlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoS2UsR3QpfDApK01hdGguaW11bChZZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChZZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHhpPj4+MjYpfDAseGkmPTY3MTA4ODYzLHk9TWF0''@;'; put 'put ''aC5pbXVsKExlLCR0KSxsPShsPU1hdGguaW11bChMZSxIdCkpK01hdGguaW11bChudCwkdCl8MCxiPU1hdGguaW11bChudCxIdCkseT15K01hdGguaW11bCh0dCxubil8MCxsPShsPWwrTWF0aC5pbXVsKHR0LGxuKXwwKStNYXRoLmltdWwoVWUsbm4pfDAsYj1iK01hdGguaW11bChVZSxsbil8''@;'; put 'put ''MDt2YXIgb2E9KEwrKHk9eStNYXRoLmltdWwoaHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChodCxHdCl8MCkrTWF0aC5pbXVsKHZ0LGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKHZ0LEd0KXwwKSsobD4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4''@;'; put 'put ''NjMseT1NYXRoLmltdWwoTGUsbm4pLGw9KGw9TWF0aC5pbXVsKExlLGxuKSkrTWF0aC5pbXVsKG50LG5uKXwwLGI9TWF0aC5pbXVsKG50LGxuKTt2YXIgWGk9KEwrKHk9eStNYXRoLmltdWwodHQsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bCh0dCxHdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFVlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFVlLEd0KXwwKSsobD4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjM7dmFyIElyPShMKyh5PU1hdGguaW11bChMZSxhbikpfDApKygoODE5MSYobD0obD1NYXRoLmltdWwoTGUsR3QpKStNYXRoLmltdWwobnQsYW4p''@;'; put 'put ''fDApKTw8MTMpfDA7cmV0dXJuIEw9KChiPU1hdGguaW11bChudCxHdCkpKyhsPj4+MTMpfDApKyhJcj4+PjI2KXwwLElyJj02NzEwODg2MyxrWzBdPWVhLGtbMV09bWksa1syXT1mcixrWzNdPSRpLGtbNF09S2ksa1s1XT1WaSxrWzZdPXFyLGtbN109dWEsa1s4XT1GaSxrWzldPVJhLGtbMTBd''@;'; put 'put ''PW9pLGtbMTFdPVVpLGtbMTJdPVZhLGtbMTNdPXVyLGtbMTRdPWZhLGtbMTVdPXhpLGtbMTZdPW9hLGtbMTddPVhpLGtbMThdPUlyLDAhPT1MJiYoa1sxOV09TCx2Lmxlbmd0aCsrKSx2fTtmdW5jdGlvbiBaKFIscyx1KXtyZXR1cm4obmV3IFUpLm11bHAoUixzLHUpfWZ1bmN0aW9uIFUoUixz''@;'; put 'put ''KXt0aGlzLng9Uix0aGlzLnk9c31NYXRoLmltdWx8fChIPU4pLGYucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHMsdSl7dmFyIHYscD10aGlzLmxlbmd0aCtzLmxlbmd0aDtyZXR1cm4gdj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXMubGVuZ3RoP0godGhpcyxzLHUpOnA8NjM/Tih0aGlzLHMs''@;'; put 'put ''dSk6cDwxMDI0P2Z1bmN0aW9uIHooUixzLHUpe3UubmVnYXRpdmU9cy5uZWdhdGl2ZV5SLm5lZ2F0aXZlLHUubGVuZ3RoPVIubGVuZ3RoK3MubGVuZ3RoO2Zvcih2YXIgdj0wLHA9MCxfPTA7Xzx1Lmxlbmd0aC0xO18rKyl7dmFyIGs9cDtwPTA7Zm9yKHZhciBMPTY3MTA4ODYzJnYseT1NYXRo''@;'; put 'put ''Lm1pbihfLHMubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCxfLVIubGVuZ3RoKzEpO2w8PXk7bCsrKXt2YXIgUT0oMHxSLndvcmRzW18tbF0pKigwfHMud29yZHNbbF0pLHBlPTY3MTA4ODYzJlE7TD02NzEwODg2MyYocGU9cGUrTHwwKSxwKz0oaz0oaz1rKyhRLzY3MTA4ODY0fDApfDApKyhwZT4+''@;'; put 'put ''PjI2KXwwKT4+PjI2LGsmPTY3MTA4ODYzfXUud29yZHNbX109TCx2PWssaz1wfXJldHVybiAwIT09dj91LndvcmRzW19dPXY6dS5sZW5ndGgtLSx1LnN0cmlwKCl9KHRoaXMscyx1KTpaKHRoaXMscyx1KSx2fSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT1uZXcg''@;'; put 'put ''QXJyYXkocyksdj1mLnByb3RvdHlwZS5fY291bnRCaXRzKHMpLTEscD0wO3A8cztwKyspdVtwXT10aGlzLnJldkJpbihwLHYscyk7cmV0dXJuIHV9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihzLHUsdil7aWYoMD09PXN8fHM9PT12LTEpcmV0dXJuIHM7Zm9yKHZhciBwPTAsXz0wO188''@;'; put 'put ''dTtfKyspcHw9KDEmcyk8PHUtXy0xLHM+Pj0xO3JldHVybiBwfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHMsdSx2LHAsXyxrKXtmb3IodmFyIEw9MDtMPGs7TCsrKXBbTF09dVtzW0xdXSxfW0xdPXZbc1tMXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihzLHUsdixw''@;'; put 'put ''LF8sayl7dGhpcy5wZXJtdXRlKGsscyx1LHYscCxfKTtmb3IodmFyIEw9MTtMPF87TDw8PTEpZm9yKHZhciB5PUw8PDEsbD1NYXRoLmNvcygyKk1hdGguUEkveSksYj1NYXRoLnNpbigyKk1hdGguUEkveSkscT0wO3E8XztxKz15KWZvcih2YXIgRz1sLFE9YixwZT0wO3BlPEw7cGUrKyl7dmFy''@;'; put 'put ''IFBlPXZbcStwZV0sWmU9cFtxK3BlXSxxZT12W3ErcGUrTF0sdmU9cFtxK3BlK0xdLHVlPUcqcWUtUSp2ZTt2ZT1HKnZlK1EqcWUsdltxK3BlXT1QZSsocWU9dWUpLHBbcStwZV09WmUrdmUsdltxK3BlK0xdPVBlLXFlLHBbcStwZStMXT1aZS12ZSxwZSE9PXkmJih1ZT1sKkctYipRLFE9bCpR''@;'; put 'put ''K2IqRyxHPXVlKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHMsdSl7dmFyIHY9MXxNYXRoLm1heCh1LHMpLHA9MSZ2LF89MDtmb3Iodj12LzJ8MDt2O3Y+Pj49MSlfKys7cmV0dXJuIDE8PF8rMStwfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocyx1LHYpe2lm''@;'; put 'put ''KCEodjw9MSkpZm9yKHZhciBwPTA7cDx2LzI7cCsrKXt2YXIgXz1zW3BdO3NbcF09c1t2LXAtMV0sc1t2LXAtMV09XyxfPXVbcF0sdVtwXT0tdVt2LXAtMV0sdVt2LXAtMV09LV99fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9MCxwPTA7cDx1LzI7''@;'; put 'put ''cCsrKXt2YXIgXz04MTkyKk1hdGgucm91bmQoc1syKnArMV0vdSkrTWF0aC5yb3VuZChzWzIqcF0vdSkrdjtzW3BdPTY3MTA4ODYzJl8sdj1fPDY3MTA4ODY0PzA6Xy82NzEwODg2NHwwfXJldHVybiBzfSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHMsdSx2LHApe2Zvcih2YXIg''@;'; put 'put ''Xz0wLGs9MDtrPHU7aysrKXZbMiprXT04MTkxJihfKz0wfHNba10pLHZbMiprKzFdPTgxOTEmKF8+Pj49MTMpLF8+Pj49MTM7Zm9yKGs9Mip1O2s8cDsrK2spdltrXT0wO28oMD09PV8pLG8oISgtODE5MiZfKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PW5ldyBB''@;'; put 'put ''cnJheShzKSx2PTA7djxzO3YrKyl1W3ZdPTA7cmV0dXJuIHV9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPTIqdGhpcy5ndWVzc0xlbjEzYihzLmxlbmd0aCx1Lmxlbmd0aCksXz10aGlzLm1ha2VSQlQocCksaz10aGlzLnN0dWIocCksTD1uZXcgQXJyYXkocCkseT1u''@;'; put 'put ''ZXcgQXJyYXkocCksbD1uZXcgQXJyYXkocCksYj1uZXcgQXJyYXkocCkscT1uZXcgQXJyYXkocCksRz1uZXcgQXJyYXkocCksUT12LndvcmRzO1EubGVuZ3RoPXAsdGhpcy5jb252ZXJ0MTNiKHMud29yZHMscy5sZW5ndGgsTCxwKSx0aGlzLmNvbnZlcnQxM2IodS53b3Jkcyx1Lmxlbmd0aCxi''@;'; put 'put ''LHApLHRoaXMudHJhbnNmb3JtKEwsayx5LGwscCxfKSx0aGlzLnRyYW5zZm9ybShiLGsscSxHLHAsXyk7Zm9yKHZhciBwZT0wO3BlPHA7cGUrKyl7dmFyIFBlPXlbcGVdKnFbcGVdLWxbcGVdKkdbcGVdO2xbcGVdPXlbcGVdKkdbcGVdK2xbcGVdKnFbcGVdLHlbcGVdPVBlfXJldHVybiB0aGlz''@;'; put 'put ''LmNvbmp1Z2F0ZSh5LGwscCksdGhpcy50cmFuc2Zvcm0oeSxsLFEsayxwLF8pLHRoaXMuY29uanVnYXRlKFEsayxwKSx0aGlzLm5vcm1hbGl6ZTEzYihRLHApLHYubmVnYXRpdmU9cy5uZWdhdGl2ZV51Lm5lZ2F0aXZlLHYubGVuZ3RoPXMubGVuZ3RoK3UubGVuZ3RoLHYuc3RyaXAoKX0sZi5w''@;'; put 'put ''cm90b3R5cGUubXVsPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksdGhpcy5tdWxUbyhzLHUpfSxmLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHMpe3ZhciB1PW5ldyBmKG51bGwpO3JldHVybiB1Lndv''@;'; put 'put ''cmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtzLmxlbmd0aCksWih0aGlzLHMsdSl9LGYucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhzLHRoaXMpfSxmLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2Ygcyks''@;'; put 'put ''byhzPDY3MTA4ODY0KTtmb3IodmFyIHU9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKnMsXz0oNjcxMDg4NjMmcCkrKDY3MTA4ODYzJnUpO3U+Pj0yNix1Kz1wLzY3MTA4ODY0fDAsdSs9Xz4+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmX31yZXR1''@;'; put 'put ''cm4gMCE9PXUmJih0aGlzLndvcmRzW3ZdPXUsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PXM/MTp0aGlzLmxlbmd0aCx0aGlzfSxmLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocyl9LGYucHJvdG90eXBlLnNxcj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLm11bCh0aGlzKX0sZi5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sZi5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHMpe3ZhciB1PWZ1bmN0aW9uIEYoUil7Zm9yKHZhciBzPW5ldyBBcnJheShSLmJpdExlbmd0aCgp''@;'; put 'put ''KSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBwPXUlMjY7c1t1XT0oUi53b3Jkc1t1LzI2fDBdJjE8PHApPj4+cH1yZXR1cm4gc30ocyk7aWYoMD09PXUubGVuZ3RoKXJldHVybiBuZXcgZigxKTtmb3IodmFyIHY9dGhpcyxwPTA7cDx1Lmxlbmd0aCYmMD09PXVbcF07cCsrLHY9di5zcXIoKSk7''@;'; put 'put ''aWYoKytwPHUubGVuZ3RoKWZvcih2YXIgXz12LnNxcigpO3A8dS5sZW5ndGg7cCsrLF89Xy5zcXIoKSkwIT09dVtwXSYmKHY9di5tdWwoXykpO3JldHVybiB2fSxmLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciBfLHU9cyUyNix2''@;'; put 'put ''PShzLXUpLzI2LHA9NjcxMDg4NjM+Pj4yNi11PDwyNi11O2lmKDAhPT11KXt2YXIgaz0wO2ZvcihfPTA7Xzx0aGlzLmxlbmd0aDtfKyspe3ZhciBMPXRoaXMud29yZHNbX10mcDt0aGlzLndvcmRzW19dPSgwfHRoaXMud29yZHNbX10pLUw8PHV8ayxrPUw+Pj4yNi11fWsmJih0aGlzLndvcmRz''@;'; put 'put ''W19dPWssdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihfPXRoaXMubGVuZ3RoLTE7Xz49MDtfLS0pdGhpcy53b3Jkc1tfK3ZdPXRoaXMud29yZHNbX107Zm9yKF89MDtfPHY7XysrKXRoaXMud29yZHNbX109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5pc2hsbj1mdW5jdGlvbihzKXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocyl9LGYucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihzLHUsdil7dmFyIHA7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApLHA9dT8odS11JTI2KS8yNjowO3ZhciBfPXMlMjYs''@;'; put 'put ''az1NYXRoLm1pbigocy1fKS8yNix0aGlzLmxlbmd0aCksTD02NzEwODg2M142NzEwODg2Mz4+Pl88PF8seT12O2lmKHAtPWsscD1NYXRoLm1heCgwLHApLHkpe2Zvcih2YXIgbD0wO2w8aztsKyspeS53b3Jkc1tsXT10aGlzLndvcmRzW2xdO3kubGVuZ3RoPWt9aWYoMCE9PWspaWYodGhpcy5s''@;'; put 'put ''ZW5ndGg+aylmb3IodGhpcy5sZW5ndGgtPWssbD0wO2w8dGhpcy5sZW5ndGg7bCsrKXRoaXMud29yZHNbbF09dGhpcy53b3Jkc1tsK2tdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGI9MDtmb3IobD10aGlzLmxlbmd0aC0xO2w+PTAmJigwIT09Ynx8bD49cCk7bC0t''@;'; put 'put ''KXt2YXIgcT0wfHRoaXMud29yZHNbbF07dGhpcy53b3Jkc1tsXT1iPDwyNi1ffHE+Pj5fLGI9cSZMfXJldHVybiB5JiYwIT09YiYmKHkud29yZHNbeS5sZW5ndGgrK109YiksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sZi5w''@;'; put 'put ''cm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocyx1LHYpe3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihzLHUsdil9LGYucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihzKX0sZi5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24o''@;'; put 'put ''cyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocyl9LGYucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihzKX0sZi5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocyl9LGYucHJvdG90eXBl''@;'; put 'put ''LnRlc3RuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgdT1zJTI2LHY9KHMtdSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9dnx8ISh0aGlzLndvcmRzW3ZdJjE8PHUpKX0sZi5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBzJiZzPj0wKTt2YXIgdT1zJTI2LHY9KHMtdSkvMjY7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD12P3RoaXM6KDAhPT11JiZ2KyssdGhpcy5sZW5ndGg9TWF0aC5taW4odix0aGlzLmxl''@;'; put 'put ''bmd0aCksMCE9PXUmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PnU8PHUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCkpfSxmLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihzKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmltYXNrbihzKX0sZi5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MD90aGlzLmlzdWJuKC1zKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29y''@;'; put 'put ''ZHNbMF0pPHM/KHRoaXMud29yZHNbMF09cy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihzKX0sZi5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3RoaXMud29yZHNbMF0rPXM7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XT49NjcxMDg4NjQ7dSsrKXRoaXMud29yZHNbdV0tPTY3MTA4ODY0LHU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbdSsxXT0xOnRoaXMud29yZHNbdSsxXSsrO3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx1KzEpLHRoaXN9LGYucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHMpe2lmKG8oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpLHM8MClyZXR1cm4gdGhpcy5pYWRkbigtcyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MCx0aGlzLmlhZGRuKHMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHU9MDt1PHRo''@;'; put 'put ''aXMubGVuZ3RoJiZ0aGlzLndvcmRzW3VdPDA7dSsrKXRoaXMud29yZHNbdV0rPTY3MTA4ODY0LHRoaXMud29yZHNbdSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocyl9LGYucHJvdG90eXBl''@;'; put 'put ''LnN1Ym49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihzKX0sZi5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sZi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGYucHJv''@;'; put 'put ''dG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihzLHUsdil7dmFyIF87dGhpcy5fZXhwYW5kKHMubGVuZ3RoK3YpO3ZhciBrLEw9MDtmb3IoXz0wO188cy5sZW5ndGg7XysrKXtrPSgwfHRoaXMud29yZHNbXyt2XSkrTDt2YXIgeT0oMHxzLndvcmRzW19dKSp1O0w9KChrLT02NzEwODg2MyZ5''@;'; put 'put ''KT4+MjYpLSh5LzY3MTA4ODY0fDApLHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrfWZvcig7Xzx0aGlzLmxlbmd0aC12O18rKylMPShrPSgwfHRoaXMud29yZHNbXyt2XSkrTCk+PjI2LHRoaXMud29yZHNbXyt2XT02NzEwODg2MyZrO2lmKDA9PT1MKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9y''@;'; put 'put ''KG8oLTE9PT1MKSxMPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUw9KGs9LSgwfHRoaXMud29yZHNbX10pK0wpPj4yNix0aGlzLndvcmRzW19dPTY3MTA4ODYzJms7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHMsdSl7''@;'; put 'put ''dmFyIHYscD10aGlzLmNsb25lKCksXz1zLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdOzAhPSh2PTI2LXRoaXMuX2NvdW50Qml0cyhrKSkmJihfPV8udXNobG4odikscC5pdXNobG4odiksaz0wfF8ud29yZHNbXy5sZW5ndGgtMV0pO3ZhciBsLHk9cC5sZW5ndGgtXy5sZW5ndGg7aWYoIm1vZCIh''@;'; put 'put ''PT11KXsobD1uZXcgZihudWxsKSkubGVuZ3RoPXkrMSxsLndvcmRzPW5ldyBBcnJheShsLmxlbmd0aCk7Zm9yKHZhciBiPTA7YjxsLmxlbmd0aDtiKyspbC53b3Jkc1tiXT0wfXZhciBxPXAuY2xvbmUoKS5faXNobG5zdWJtdWwoXywxLHkpOzA9PT1xLm5lZ2F0aXZlJiYocD1xLGwmJihsLndv''@;'; put 'put ''cmRzW3ldPTEpKTtmb3IodmFyIEc9eS0xO0c+PTA7Ry0tKXt2YXIgUT02NzEwODg2NCooMHxwLndvcmRzW18ubGVuZ3RoK0ddKSsoMHxwLndvcmRzW18ubGVuZ3RoK0ctMV0pO2ZvcihRPU1hdGgubWluKFEva3wwLDY3MTA4ODYzKSxwLl9pc2hsbnN1Ym11bChfLFEsRyk7MCE9PXAubmVnYXRp''@;'; put 'put ''dmU7KVEtLSxwLm5lZ2F0aXZlPTAscC5faXNobG5zdWJtdWwoXywxLEcpLHAuaXNaZXJvKCl8fChwLm5lZ2F0aXZlXj0xKTtsJiYobC53b3Jkc1tHXT1RKX1yZXR1cm4gbCYmbC5zdHJpcCgpLHAuc3RyaXAoKSwiZGl2IiE9PXUmJjAhPT12JiZwLml1c2hybih2KSx7ZGl2Omx8fG51bGwsbW9k''@;'; put 'put ''OnB9fSxmLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocyx1LHYpe3JldHVybiBvKCFzLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGYoMCksbW9kOm5ldyBmKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocyx1KSwi''@;'; put 'put ''bW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlhZGQocykpLHtkaXY6cCxtb2Q6X30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZT8oaz10aGlzLmRpdm1vZChzLm5lZygpLHUpLCJtb2QiIT09''@;'; put 'put ''dSYmKHA9ay5kaXYubmVnKCkpLHtkaXY6cCxtb2Q6ay5tb2R9KTp0aGlzLm5lZ2F0aXZlJnMubmVnYXRpdmU/KGs9dGhpcy5uZWcoKS5kaXZtb2Qocy5uZWcoKSx1KSwiZGl2IiE9PXUmJihfPWsubW9kLm5lZygpLHYmJjAhPT1fLm5lZ2F0aXZlJiZfLmlzdWIocykpLHtkaXY6ay5kaXYsbW9k''@;'; put 'put ''Ol99KTpzLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocyk8MD97ZGl2Om5ldyBmKDApLG1vZDp0aGlzfToxPT09cy5sZW5ndGg/ImRpdiI9PT11P3tkaXY6dGhpcy5kaXZuKHMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXU/e2RpdjpudWxsLG1vZDpuZXcgZih0aGlzLm1vZG4o''@;'; put 'put ''cy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihzLHUpO3ZhciBwLF8sa30sZi5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJkaXYiLCExKS5k''@;'; put 'put ''aXZ9LGYucHJvdG90eXBlLm1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMSkubW9kfSxmLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJtb2QiLCEwKS5tb2R9LGYucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3ZhciB1PXRoaXMuZGl2bW9kKHMpO2lmKHUubW9kLmlzWmVybygpKXJldHVybiB1LmRpdjt2YXIgdj0wIT09dS5kaXYubmVnYXRpdmU/dS5tb2QuaXN1YihzKTp1Lm1vZCxwPXMudXNocm4oMSksXz1zLmFuZGxuKDEpLGs9di5jbXAocCk7cmV0dXJuIGs8MHx8MT09PV8mJjA9PT1rP3UuZGl2''@;'; put 'put ''OjAhPT11LmRpdi5uZWdhdGl2ZT91LmRpdi5pc3VibigxKTp1LmRpdi5pYWRkbigxKX0sZi5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9KDE8PDI2KSVzLHY9MCxwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdj0odSp2KygwfHRoaXMud29yZHNb''@;'; put 'put ''cF0pKSVzO3JldHVybiB2fSxmLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihzKXtvKHM8PTY3MTA4ODYzKTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKzY3MTA4ODY0KnU7dGhpcy53b3Jkc1t2XT1wL3N8MCx1PXAlc31yZXR1''@;'; put 'put ''cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocyl9LGYucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8oKSk7dmFyIHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAh''@;'; put 'put ''PT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz1uZXcgZigwKSxMPW5ldyBmKDEpLHk9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpOyl1Lml1c2hybigxKSx2Lml1c2hybigxKSwrK3k7Zm9yKHZhciBsPXYuY2xvbmUoKSxiPXUu''@;'; put 'put ''Y2xvbmUoKTshdS5pc1plcm8oKTspe2Zvcih2YXIgcT0wLEc9MTshKHUud29yZHNbMF0mRykmJnE8MjY7KytxLEc8PD0xKTtpZihxPjApZm9yKHUuaXVzaHJuKHEpO3EtLSA+MDspKHAuaXNPZGQoKXx8Xy5pc09kZCgpKSYmKHAuaWFkZChsKSxfLmlzdWIoYikpLHAuaXVzaHJuKDEpLF8uaXVz''@;'; put 'put ''aHJuKDEpO2Zvcih2YXIgUT0wLHBlPTE7ISh2LndvcmRzWzBdJnBlKSYmUTwyNjsrK1EscGU8PD0xKTtpZihRPjApZm9yKHYuaXVzaHJuKFEpO1EtLSA+MDspKGsuaXNPZGQoKXx8TC5pc09kZCgpKSYmKGsuaWFkZChsKSxMLmlzdWIoYikpLGsuaXVzaHJuKDEpLEwuaXVzaHJuKDEpO3UuY21w''@;'; put 'put ''KHYpPj0wPyh1LmlzdWIodikscC5pc3ViKGspLF8uaXN1YihMKSk6KHYuaXN1Yih1KSxrLmlzdWIocCksTC5pc3ViKF8pKX1yZXR1cm57YTprLGI6TCxnY2Q6di5pdXNobG4oeSl9fSxmLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSksbyghcy5pc1plcm8o''@;'; put 'put ''KSk7dmFyIHEsdT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUubmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3IodmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPXYuY2xvbmUoKTt1LmNtcG4oMSk+MCYmdi5jbXBuKDEpPjA7KXtmb3IodmFyIEw9MCx5PTE7ISh1LndvcmRzWzBdJnkp''@;'; put 'put ''JiZMPDI2OysrTCx5PDw9MSk7aWYoTD4wKWZvcih1Lml1c2hybihMKTtMLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKGspLHAuaXVzaHJuKDEpO2Zvcih2YXIgbD0wLGI9MTshKHYud29yZHNbMF0mYikmJmw8MjY7KytsLGI8PD0xKTtpZihsPjApZm9yKHYuaXVzaHJuKGwpO2wtLSA+MDspXy5p''@;'; put 'put ''c09kZCgpJiZfLmlhZGQoayksXy5pdXNocm4oMSk7dS5jbXAodik+PTA/KHUuaXN1Yih2KSxwLmlzdWIoXykpOih2LmlzdWIodSksXy5pc3ViKHApKX1yZXR1cm4ocT0wPT09dS5jbXBuKDEpP3A6XykuY21wbigwKTwwJiZxLmlhZGQocykscX0sZi5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHMp''@;'; put 'put ''e2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHMuYWJzKCk7aWYocy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgdT10aGlzLmNsb25lKCksdj1zLmNsb25lKCk7dS5uZWdhdGl2ZT0wLHYubmVnYXRpdmU9MDtmb3IodmFyIHA9MDt1LmlzRXZlbigpJiZ2LmlzRXZlbigpO3ArKyl1Lml1''@;'; put 'put ''c2hybigxKSx2Lml1c2hybigxKTtmb3IoOzspe2Zvcig7dS5pc0V2ZW4oKTspdS5pdXNocm4oMSk7Zm9yKDt2LmlzRXZlbigpOyl2Lml1c2hybigxKTt2YXIgXz11LmNtcCh2KTtpZihfPDApe3ZhciBrPXU7dT12LHY9a31lbHNlIGlmKDA9PT1ffHwwPT09di5jbXBuKDEpKWJyZWFrO3UuaXN1''@;'; put 'put ''Yih2KX1yZXR1cm4gdi5pdXNobG4ocCl9LGYucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZWdjZChzKS5hLnVtb2Qocyl9LGYucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxmLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZzfSxmLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2Ygcyk7dmFyIHU9cyUyNix2PShzLXUpLzI2LHA9MTw8''@;'; put 'put ''dTtpZih0aGlzLmxlbmd0aDw9dilyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XXw9cCx0aGlzO2Zvcih2YXIgXz1wLGs9djswIT09XyYmazx0aGlzLmxlbmd0aDtrKyspe3ZhciBMPTB8dGhpcy53b3Jkc1trXTtfPShMKz1fKT4+PjI2LHRoaXMud29yZHNba109TCY9Njcx''@;'; put 'put ''MDg4NjN9cmV0dXJuIDAhPT1fJiYodGhpcy53b3Jkc1trXT1fLHRoaXMubGVuZ3RoKyspLHRoaXN9LGYucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxmLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHMpe3ZhciB2''@;'; put 'put ''LHU9czwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhdSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl2PTE7ZWxzZXt1JiYocz0tcyksbyhzPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgcD0w''@;'; put 'put ''fHRoaXMud29yZHNbMF07dj1wPT09cz8wOnA8cz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC12OnZ9LGYucHJvdG90eXBlLmNtcD1mdW5jdGlvbihzKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAh''@;'; put 'put ''PT1zLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB1PXRoaXMudWNtcChzKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdTp1fSxmLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHMpe2lmKHRoaXMubGVuZ3RoPnMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHMubGVuZ3RoKXJldHVy''@;'; put 'put ''bi0xO2Zvcih2YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9MHx0aGlzLndvcmRzW3ZdLF89MHxzLndvcmRzW3ZdO2lmKHAhPT1fKXtwPF8/dT0tMTpwPl8mJih1PTEpO2JyZWFrfX1yZXR1cm4gdX0sZi5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHMpe3JldHVybiAxPT09''@;'; put 'put ''dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5ndD1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wKHMpfSxmLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcG4ocyk+PTB9LGYucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXAocyk+''@;'; put 'put ''PTB9LGYucHJvdG90eXBlLmx0bj1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPD0wfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5sdGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPD0wfSxmLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXAocyl9LGYucmVkPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiBuZXcgbWUocyl9LGYucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG8oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiks''@;'; put 'put ''cy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHMpfSxmLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0s''@;'; put 'put ''Zi5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnJlZD1zLHRoaXN9LGYucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHMpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVk''@;'; put 'put ''KHMpfSxmLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlz''@;'; put 'put ''LHMpfSxmLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVk''@;'; put 'put ''LCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnky''@;'; put 'put ''KHRoaXMscyksdGhpcy5yZWQubXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLmltdWwodGhpcyxz''@;'; put 'put ''KX0sZi5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gbyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sZi5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGYucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMp''@;'; put 'put ''fSxmLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQmJiFzLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxzKX07dmFyIEs9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAy''@;'; put 'put ''NTUxOTpudWxsfTtmdW5jdGlvbiBYKFIscyl7dGhpcy5uYW1lPVIsdGhpcy5wPW5ldyBmKHMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBmKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBuZSgpe1gu''@;'; put 'put ''Y2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBzZSgpe1guY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAw''@;'; put 'put ''MDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBoZSgpe1guY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBfZSgpe1guY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBtZShSKXtpZigic3RyaW5nIj09dHlwZW9mIFIpe3ZhciBzPWYuX3ByaW1lKFIpO3RoaXMubT1zLnAsdGhpcy5wcmltZT1zfWVsc2UgbyhSLmd0bigxKSwibW9kdWx1cyBtdXN0''@;'; put 'put ''IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEZlKFIpe21lLmNhbGwodGhpcyxSKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5l''@;'; put 'put ''dyBmKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVt''@;'; put 'put ''b2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVgucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcz1uZXcgZihudWxsKTtyZXR1cm4gcy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHN9LFgucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rp''@;'; put 'put ''b24ocyl7dmFyIHYsdT1zO2Rve3RoaXMuc3BsaXQodSx0aGlzLnRtcCksdj0odT0odT10aGlzLmltdWxLKHUpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUodj50aGlzLm4pO3ZhciBwPXY8dGhpcy5uPy0xOnUudWNtcCh0aGlzLnApO3JldHVybiAwPT09cD8odS53b3Jkc1sw''@;'; put 'put ''XT0wLHUubGVuZ3RoPTEpOnA+MD91LmlzdWIodGhpcy5wKTp2b2lkIDAhPT11LnN0cmlwP3Uuc3RyaXAoKTp1Ll9zdHJpcCgpLHV9LFgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7cy5pdXNocm4odGhpcy5uLDAsdSl9LFgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biBzLmltdWwodGhpcy5rKX0sSShuZSxYKSxuZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtmb3IodmFyIHY9NDE5NDMwMyxwPU1hdGgubWluKHMubGVuZ3RoLDkpLF89MDtfPHA7XysrKXUud29yZHNbX109cy53b3Jkc1tfXTtpZih1Lmxlbmd0aD1wLHMubGVuZ3RoPD05KXJldHVy''@;'; put 'put ''biBzLndvcmRzWzBdPTAsdm9pZChzLmxlbmd0aD0xKTt2YXIgaz1zLndvcmRzWzldO2Zvcih1LndvcmRzW3UubGVuZ3RoKytdPWsmdixfPTEwO188cy5sZW5ndGg7XysrKXt2YXIgTD0wfHMud29yZHNbX107cy53b3Jkc1tfLTEwXT0oTCZ2KTw8NHxrPj4+MjIsaz1MfXMud29yZHNbXy0xMF09''@;'; put 'put ''az4+Pj0yMixzLmxlbmd0aC09MD09PWsmJnMubGVuZ3RoPjEwPzEwOjl9LG5lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtzLndvcmRzW3MubGVuZ3RoXT0wLHMud29yZHNbcy5sZW5ndGgrMV09MCxzLmxlbmd0aCs9Mjtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBw''@;'; put 'put ''PTB8cy53b3Jkc1t2XTtzLndvcmRzW3ZdPTY3MTA4ODYzJih1Kz05NzcqcCksdT02NCpwKyh1LzY3MTA4ODY0fDApfXJldHVybiAwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmKHMubGVuZ3RoLS0sMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJnMubGVuZ3RoLS0pLHN9LEkoc2UsWCksSShoZSxY''@;'; put 'put ''KSxJKF9lLFgpLF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtmb3IodmFyIHU9MCx2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciBwPTE5KigwfHMud29yZHNbdl0pK3UsXz02NzEwODg2MyZwO3A+Pj49MjYscy53b3Jkc1t2XT1fLHU9cH1yZXR1cm4gMCE9PXUmJihzLndvcmRzW3MubGVu''@;'; put 'put ''Z3RoKytdPXUpLHN9LGYuX3ByaW1lPWZ1bmN0aW9uKHMpe2lmKEtbc10pcmV0dXJuIEtbc107dmFyIHU7aWYoImsyNTYiPT09cyl1PW5ldyBuZTtlbHNlIGlmKCJwMjI0Ij09PXMpdT1uZXcgc2U7ZWxzZSBpZigicDE5MiI9PT1zKXU9bmV3IGhlO2Vsc2V7aWYoInAyNTUxOSIhPT1zKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3MpO3U9bmV3IF9lfXJldHVybiBLW3NdPXUsdX0sbWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCwicmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocyx1KXtvKCEocy5uZWdhdGl2ZXx1Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxvKHMucmVkJiZzLnJlZD09PXUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIil9LG1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShzKS5fZm9yY2VSZWQodGhpcyk6cy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHMpe3JldHVybiBz''@;'; put 'put ''LmlzWmVybygpP3MuY2xvbmUoKTp0aGlzLm0uc3ViKHMpLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdi5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LG1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuaWFkZCh1KTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIo''@;'; put 'put ''cyx1KTt2YXIgdj1zLnN1Yih1KTtyZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlzdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2Lmlh''@;'; put 'put ''ZGQodGhpcy5tKSx2fSxtZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocyksdGhpcy5pbW9kKHMudXNobG4odSkpfSxtZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMsdSksdGhpcy5pbW9kKHMuaW11''@;'; put 'put ''bCh1KSl9LG1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChzLm11bCh1KSl9LG1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltdWwocyxzLmNsb25lKCkpfSxtZS5wcm90b3R5cGUuc3FyPWZ1''@;'; put 'put ''bmN0aW9uKHMpe3JldHVybiB0aGlzLm11bChzLHMpfSxtZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihzKXtpZihzLmlzWmVybygpKXJldHVybiBzLmNsb25lKCk7dmFyIHU9dGhpcy5tLmFuZGxuKDMpO2lmKG8odSUyPT0xKSwzPT09dSl7dmFyIHY9dGhpcy5tLmFkZChuZXcgZigxKSkuaXVz''@;'; put 'put ''aHJuKDIpO3JldHVybiB0aGlzLnBvdyhzLHYpfWZvcih2YXIgcD10aGlzLm0uc3VibigxKSxfPTA7IXAuaXNaZXJvKCkmJjA9PT1wLmFuZGxuKDEpOylfKysscC5pdXNocm4oMSk7byghcC5pc1plcm8oKSk7dmFyIGs9bmV3IGYoMSkudG9SZWQodGhpcyksTD1rLnJlZE5lZygpLHk9dGhpcy5t''@;'; put 'put ''LnN1Ym4oMSkuaXVzaHJuKDEpLGw9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihsPW5ldyBmKDIqbCpsKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobCx5KS5jbXAoTCk7KWwucmVkSUFkZChMKTtmb3IodmFyIGI9dGhpcy5wb3cobCxwKSxxPXRoaXMucG93KHMscC5hZGRuKDEpLml1c2hybigx''@;'; put 'put ''KSksRz10aGlzLnBvdyhzLHApLFE9XzswIT09Ry5jbXAoayk7KXtmb3IodmFyIHBlPUcsUGU9MDswIT09cGUuY21wKGspO1BlKyspcGU9cGUucmVkU3FyKCk7byhQZTxRKTt2YXIgWmU9dGhpcy5wb3coYixuZXcgZigxKS5pdXNobG4oUS1QZS0xKSk7cT1xLnJlZE11bChaZSksYj1aZS5yZWRT''@;'; put 'put ''cXIoKSxHPUcucmVkTXVsKGIpLFE9UGV9cmV0dXJuIHF9LG1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3ZhciB1PXMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT11Lm5lZ2F0aXZlPyh1Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHUpLnJlZE5lZygpKTp0aGlzLmltb2QodSl9LG1lLnBy''@;'; put 'put ''b3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyx1KXtpZih1LmlzWmVybygpKXJldHVybiBuZXcgZigxKS50b1JlZCh0aGlzKTtpZigwPT09dS5jbXBuKDEpKXJldHVybiBzLmNsb25lKCk7dmFyIHA9bmV3IEFycmF5KDE2KTtwWzBdPW5ldyBmKDEpLnRvUmVkKHRoaXMpLHBbMV09cztmb3IodmFyIF89''@;'; put 'put ''MjtfPHAubGVuZ3RoO18rKylwW19dPXRoaXMubXVsKHBbXy0xXSxzKTt2YXIgaz1wWzBdLEw9MCx5PTAsbD11LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLF89dS5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciBiPXUud29yZHNbX10scT1sLTE7cT49MDtxLS0pe3ZhciBHPWI+''@;'; put 'put ''PnEmMTtrIT09cFswXSYmKGs9dGhpcy5zcXIoaykpLDAhPT1HfHwwIT09TD8oTDw8PTEsTHw9RywoND09Kyt5fHwwPT09XyYmMD09PXEpJiYoaz10aGlzLm11bChrLHBbTF0pLHk9MCxMPTApKTp5PTB9bD0yNn1yZXR1cm4ga30sbWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihzKXt2''@;'; put 'put ''YXIgdT1zLnVtb2QodGhpcy5tKTtyZXR1cm4gdT09PXM/dS5jbG9uZSgpOnV9LG1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT1zLmNsb25lKCk7cmV0dXJuIHUucmVkPW51bGwsdX0sZi5tb250PWZ1bmN0aW9uKHMpe3JldHVybiBuZXcgRmUocyl9LEkoRmUsbWUp''@;'; put 'put ''LEZlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLnVzaGxuKHRoaXMuc2hpZnQpKX0sRmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMpe3ZhciB1PXRoaXMuaW1vZChzLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gdS5yZWQ9bnVsbCx1''@;'; put 'put ''fSxGZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzLHUpe2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIHMud29yZHNbMF09MCxzLmxlbmd0aD0xLHM7dmFyIHY9cy5pbXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCku''@;'; put 'put ''bXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''cyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBuZXcgZigwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHY9cy5tdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxfPXYuaXN1YihwKS5pdXNocm4o''@;'; put 'put ''dGhpcy5zaGlmdCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW1vZChzLl9pbnZtcCh0''@;'; put 'put ''aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odGU9ZC5ubWQodGUpLHRoaXMpfSw2MzM2MSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbyxTPWQoNjE4ODUpLGg9ZCg4Mzc5OCk7dHJ5e289W10uX19wcm90b19fPT09QXJyYXkucHJvdG90eXBlfWNhdGNoKEEpe2lmKCFB''@;'; put 'put ''fHwib2JqZWN0IiE9dHlwZW9mIEF8fCEoImNvZGUiaW4gQSl8fCJFUlJfUFJPVE9fQUNDRVNTIiE9PUEuY29kZSl0aHJvdyBBfXZhciBJPSEhbyYmaCYmaChPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKSxmPU9iamVjdCxUPWYuZ2V0UHJvdG90eXBlT2Y7dGUuZXhwb3J0cz1JJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgSS5nZXQ/UyhbSS5nZXRdKToiZnVuY3Rpb24iPT10eXBlb2YgVCYmZnVuY3Rpb24oTSl7cmV0dXJuIFQobnVsbD09TT9NOmYoTSkpfX0sOTA1MTgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ajtTLnZlcnNpb249ZCgxNjM2KS5yRSxTLnV0aWxzPWQoMzEzNiks''@;'; put 'put ''Uy5yYW5kPWQoMzUyOTQpLFMuY3VydmU9ZCg4NzI5KSxTLmN1cnZlcz1kKDIzNDAxKSxTLmVjPWQoMjkwNDIpLFMuZWRkc2E9ZCg4MzA0NSl9LDk4ODI4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODg3MjMpLGg9ZCgzMTM2KSxvPWguZ2V0TkFGLEk9aC5nZXRKU0YsZj1oLmFzc2Vy''@;'; put 'put ''dDtmdW5jdGlvbiBUKE0sTyl7dGhpcy50eXBlPU0sdGhpcy5wPW5ldyBTKE8ucCwxNiksdGhpcy5yZWQ9Ty5wcmltZT9TLnJlZChPLnByaW1lKTpTLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IFMoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBTKDEpLnRvUmVkKHRoaXMucmVk''@;'; put 'put ''KSx0aGlzLnR3bz1uZXcgUygyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPU8ubiYmbmV3IFMoTy5uLDE2KSx0aGlzLmc9Ty5nJiZ0aGlzLnBvaW50RnJvbUpTT04oTy5nLE8uZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3du''@;'; put 'put ''YWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBEPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFEfHxELmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3''@;'; put 'put ''ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIEEoTSxPKXt0aGlzLmN1cnZlPU0sdGhpcy50eXBlPU8sdGhpcy5wcmVjb21wdXRlZD1udWxsfXRlLmV4cG9ydHM9VCxULnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJv''@;'; put 'put ''cigiTm90IGltcGxlbWVudGVkIil9LFQucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sVC5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKE8sRCl7ZihPLnByZWNvbXB1dGVkKTt2YXIgRT1PLl9nZXREb3VibGVz''@;'; put 'put ''KCksQj1vKEQsMSx0aGlzLl9iaXRMZW5ndGgpLEY9KDE8PEUuc3RlcCsxKS0oRS5zdGVwJTI9PTA/MjoxKTtGLz0zO3ZhciBILHosTj1bXTtmb3IoSD0wO0g8Qi5sZW5ndGg7SCs9RS5zdGVwKXt6PTA7Zm9yKHZhciBaPUgrRS5zdGVwLTE7Wj49SDtaLS0pej0oejw8MSkrQltaXTtOLnB1c2go''@;'; put 'put ''eil9Zm9yKHZhciBVPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxLPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxYPUY7WD4wO1gtLSl7Zm9yKEg9MDtIPE4ubGVuZ3RoO0grKykoej1OW0hdKT09PVg/Sz1LLm1peGVkQWRkKEUucG9pbnRzW0hdKTp6PT09LVgmJihLPUsubWl4ZWRB''@;'; put 'put ''ZGQoRS5wb2ludHNbSF0ubmVnKCkpKTtVPVUuYWRkKEspfXJldHVybiBVLnRvUCgpfSxULnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbihPLEQpe2Zvcih2YXIgRT00LEI9Ty5fZ2V0TkFGUG9pbnRzKEUpLEY9Qi5wb2ludHMsTj1vKEQsRT1CLnduZCx0aGlzLl9iaXRMZW5ndGgpLEg9dGhp''@;'; put 'put ''cy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHo9Ti5sZW5ndGgtMTt6Pj0wO3otLSl7Zm9yKHZhciBaPTA7ej49MCYmMD09PU5bel07ei0tKVorKztpZih6Pj0wJiZaKyssSD1ILmRibHAoWiksejwwKWJyZWFrO3ZhciBVPU5bel07ZigwIT09VSksSD0iYWZmaW5lIj09PU8udHlwZT9ILm1peGVk''@;'; put 'put ''QWRkKFU+MD9GW1UtMT4+MV06RlstVS0xPj4xXS5uZWcoKSk6SC5hZGQoVT4wP0ZbVS0xPj4xXTpGWy1VLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PU8udHlwZT9ILnRvUCgpOkh9LFQucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKE8sRCxFLEIsRil7dmFyIFUsSyxYLE49''@;'; put 'put ''dGhpcy5fd25hZlQxLEg9dGhpcy5fd25hZlQyLHo9dGhpcy5fd25hZlQzLFo9MDtmb3IoVT0wO1U8QjtVKyspe3ZhciBuZT0oWD1EW1VdKS5fZ2V0TkFGUG9pbnRzKE8pO05bVV09bmUud25kLEhbVV09bmUucG9pbnRzfWZvcihVPUItMTtVPj0xO1UtPTIpe3ZhciBzZT1VLTEsaGU9VTtpZigx''@;'; put 'put ''PT09TltzZV0mJjE9PT1OW2hlXSl7dmFyIF9lPVtEW3NlXSxudWxsLG51bGwsRFtoZV1dOzA9PT1EW3NlXS55LmNtcChEW2hlXS55KT8oX2VbMV09RFtzZV0uYWRkKERbaGVdKSxfZVsyXT1EW3NlXS50b0ooKS5taXhlZEFkZChEW2hlXS5uZWcoKSkpOjA9PT1EW3NlXS55LmNtcChEW2hlXS55''@;'; put 'put ''LnJlZE5lZygpKT8oX2VbMV09RFtzZV0udG9KKCkubWl4ZWRBZGQoRFtoZV0pLF9lWzJdPURbc2VdLmFkZChEW2hlXS5uZWcoKSkpOihfZVsxXT1EW3NlXS50b0ooKS5taXhlZEFkZChEW2hlXSksX2VbMl09RFtzZV0udG9KKCkubWl4ZWRBZGQoRFtoZV0ubmVnKCkpKTt2YXIgbWU9Wy0zLC0x''@;'; put 'put ''LC01LC03LDAsNyw1LDEsM10sRmU9SShFW3NlXSxFW2hlXSk7Zm9yKFo9TWF0aC5tYXgoRmVbMF0ubGVuZ3RoLFopLHpbc2VdPW5ldyBBcnJheShaKSx6W2hlXT1uZXcgQXJyYXkoWiksSz0wO0s8WjtLKyspeltzZV1bS109bWVbMyooMSsoMHxGZVswXVtLXSkpKygxKygwfEZlWzFdW0tdKSld''@;'; put 'put ''LHpbaGVdW0tdPTAsSFtzZV09X2V9ZWxzZSB6W3NlXT1vKEVbc2VdLE5bc2VdLHRoaXMuX2JpdExlbmd0aCkseltoZV09byhFW2hlXSxOW2hlXSx0aGlzLl9iaXRMZW5ndGgpLFo9TWF0aC5tYXgoeltzZV0ubGVuZ3RoLFopLFo9TWF0aC5tYXgoeltoZV0ubGVuZ3RoLFopfXZhciB1PXRoaXMu''@;'; put 'put ''anBvaW50KG51bGwsbnVsbCxudWxsKSx2PXRoaXMuX3duYWZUNDtmb3IoVT1aO1U+PTA7VS0tKXtmb3IodmFyIHA9MDtVPj0wOyl7dmFyIF89ITA7Zm9yKEs9MDtLPEI7SysrKXZbS109MHx6W0tdW1VdLDAhPT12W0tdJiYoXz0hMSk7aWYoIV8pYnJlYWs7cCsrLFUtLX1pZihVPj0wJiZwKyss''@;'; put 'put ''dT11LmRibHAocCksVTwwKWJyZWFrO2ZvcihLPTA7SzxCO0srKyl7dmFyIGs9dltLXTswIT09ayYmKGs+MD9YPUhbS11bay0xPj4xXTprPDAmJihYPUhbS11bLWstMT4+MV0ubmVnKCkpLHU9ImFmZmluZSI9PT1YLnR5cGU/dS5taXhlZEFkZChYKTp1LmFkZChYKSl9fWZvcihVPTA7VTxCO1Ur''@;'; put 'put ''KylIW1VdPW51bGw7cmV0dXJuIEY/dTp1LnRvUCgpfSxULkJhc2VQb2ludD1BLEEucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sQS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0''@;'; put 'put ''ZSh0aGlzKX0sVC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTyxEKXtPPWgudG9BcnJheShPLEQpO3ZhciBFPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1PWzBdfHw2PT09T1swXXx8Nz09PU9bMF0pJiZPLmxlbmd0aC0xPT0yKkUpcmV0dXJuIDY9PT1PWzBdP2YoT1tPLmxl''@;'; put 'put ''bmd0aC0xXSUyPT0wKTo3PT09T1swXSYmZihPW08ubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoTy5zbGljZSgxLDErRSksTy5zbGljZSgxK0UsMSsyKkUpKTtpZigoMj09PU9bMF18fDM9PT1PWzBdKSYmTy5sZW5ndGgtMT09PUUpcmV0dXJuIHRoaXMucG9pbnRGcm9tWChPLnNsaWNlKDEs''@;'; put 'put ''MStFKSwzPT09T1swXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxBLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKE8pe3JldHVybiB0aGlzLmVuY29kZShPLCEwKX0sQS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihPKXt2YXIgRD10aGlz''@;'; put 'put ''LmN1cnZlLnAuYnl0ZUxlbmd0aCgpLEU9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLEQpO3JldHVybiBPP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChFKTpbNF0uY29uY2F0KEUsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLEQpKX0sQS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0''@;'; put 'put ''aW9uKE8sRCl7cmV0dXJuIGguZW5jb2RlKHRoaXMuX2VuY29kZShEKSxPKX0sQS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihPKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBEPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gRC5uYWY9''@;'; put 'put ''dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLEQuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsTyksRC5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPUQsdGhpc30sQS5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oTyl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJu''@;'; put 'put ''ITE7dmFyIEQ9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhRCYmRC5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKE8uYml0TGVuZ3RoKCkrMSkvRC5zdGVwKX0sQS5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oTyxEKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnBy''@;'; put 'put ''ZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIEU9W3RoaXNdLEI9dGhpcyxGPTA7RjxEO0YrPU8pe2Zvcih2YXIgTj0wO048TztOKyspQj1CLmRibCgpO0UucHVzaChCKX1yZXR1cm57c3RlcDpPLHBvaW50czpFfX0sQS5wcm90b3R5cGUu''@;'; put 'put ''X2dldE5BRlBvaW50cz1mdW5jdGlvbihPKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBEPVt0aGlzXSxFPSgxPDxPKS0xLEI9MT09PUU/bnVsbDp0aGlzLmRibCgpLEY9MTtGPEU7RisrKURbRl09''@;'; put 'put ''RFtGLTFdLmFkZChCKTtyZXR1cm57d25kOk8scG9pbnRzOkR9fSxBLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxBLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE8pe2Zvcih2YXIgRD10aGlzLEU9MDtFPE87RSsrKUQ9RC5kYmwoKTtyZXR1cm4gRH19LDU1NTM3''@;'; put 'put ''KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzEzNiksaD1kKDg4NzIzKSxvPWQoNzE5OTMpLEk9ZCg5ODgyOCksZj1TLmFzc2VydDtmdW5jdGlvbiBUKE0pe3RoaXMudHdpc3RlZD0xIT0oMHxNLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8TS5hKSx0aGlzLmV4dGVu''@;'; put 'put ''ZGVkPXRoaXMubU9uZUEsSS5jYWxsKHRoaXMsImVkd2FyZHMiLE0pLHRoaXMuYT1uZXcgaChNLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBoKE0uYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNx''@;'; put 'put ''cigpLHRoaXMuZD1uZXcgaChNLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxmKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxNLmMpfWZ1bmN0aW9uIEEoTSxPLEQsRSxCKXtJLkJh''@;'; put 'put ''c2VQb2ludC5jYWxsKHRoaXMsTSwicHJvamVjdGl2ZSIpLG51bGw9PT1PJiZudWxsPT09RCYmbnVsbD09PUU/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0h''@;'; put 'put ''MCk6KHRoaXMueD1uZXcgaChPLDE2KSx0aGlzLnk9bmV3IGgoRCwxNiksdGhpcy56PUU/bmV3IGgoRSwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PUImJm5ldyBoKEIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRo''@;'; put 'put ''aXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRo''@;'; put 'put ''aXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfW8oVCxJKSx0ZS5leHBvcnRzPVQsVC5wcm90b3R5cGUuX211bEE9''@;'; put 'put ''ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMubU9uZUE/Ty5yZWROZWcoKTp0aGlzLmEucmVkTXVsKE8pfSxULnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5vbmVDP086dGhpcy5jLnJlZE11bChPKX0sVC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKE8sRCxFLEIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnBvaW50KE8sRCxFLEIpfSxULnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE8sRCl7KE89bmV3IGgoTywxNikpLnJlZHx8KE89Ty50b1JlZCh0aGlzLnJlZCkpO3ZhciBFPU8ucmVkU3FyKCksQj10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKEUpKSxGPXRoaXMu''@;'; put 'put ''b25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChFKSksTj1CLnJlZE11bChGLnJlZEludm0oKSksSD1OLnJlZFNxcnQoKTtpZigwIT09SC5yZWRTcXIoKS5yZWRTdWIoTikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIHo9''@;'; put 'put ''SC5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oRCYmIXp8fCFEJiZ6KSYmKEg9SC5yZWROZWcoKSksdGhpcy5wb2ludChPLEgpfSxULnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKE8sRCl7KE89bmV3IGgoTywxNikpLnJlZHx8KE89Ty50b1JlZCh0aGlzLnJlZCkpO3ZhciBFPU8ucmVk''@;'; put 'put ''U3FyKCksQj1FLnJlZFN1Yih0aGlzLmMyKSxGPUUucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLE49Qi5yZWRNdWwoRi5yZWRJbnZtKCkpO2lmKDA9PT1OLmNtcCh0aGlzLnplcm8pKXtpZihEKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3Jl''@;'; put 'put ''dHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxPKX12YXIgSD1OLnJlZFNxcnQoKTtpZigwIT09SC5yZWRTcXIoKS5yZWRTdWIoTikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIEguZnJvbVJlZCgpLmlzT2RkKCkhPT1EJiYoSD1ILnJlZE5l''@;'; put 'put ''ZygpKSx0aGlzLnBvaW50KEgsTyl9LFQucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE8pe2lmKE8uaXNJbmZpbml0eSgpKXJldHVybiEwO08ubm9ybWFsaXplKCk7dmFyIEQ9Ty54LnJlZFNxcigpLEU9Ty55LnJlZFNxcigpLEI9RC5yZWRNdWwodGhpcy5hKS5yZWRBZGQoRSksRj10aGlz''@;'; put 'put ''LmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChEKS5yZWRNdWwoRSkpKTtyZXR1cm4gMD09PUIuY21wKEYpfSxvKEEsSS5CYXNlUG9pbnQpLFQucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTyl7cmV0dXJuIEEuZnJvbUpTT04odGhpcyxPKX0sVC5wcm90''@;'; put 'put ''b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTyxELEUsQil7cmV0dXJuIG5ldyBBKHRoaXMsTyxELEUsQil9LEEuZnJvbUpTT049ZnVuY3Rpb24oTyxEKXtyZXR1cm4gbmV3IEEoTyxEWzBdLERbMV0sRFsyXSl9LEEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmlu''@;'; put 'put ''aXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sQS5wcm90''@;'; put 'put ''b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxBLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIE89dGhpcy54''@;'; put 'put ''LnJlZFNxcigpLEQ9dGhpcy55LnJlZFNxcigpLEU9dGhpcy56LnJlZFNxcigpO0U9RS5yZWRJQWRkKEUpO3ZhciBCPXRoaXMuY3VydmUuX211bEEoTyksRj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihPKS5yZWRJU3ViKEQpLE49Qi5yZWRBZGQoRCksSD1OLnJlZFN1''@;'; put 'put ''YihFKSx6PUIucmVkU3ViKEQpLFo9Ri5yZWRNdWwoSCksVT1OLnJlZE11bCh6KSxLPUYucmVkTXVsKHopLFg9SC5yZWRNdWwoTik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWixVLFgsSyl9LEEucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEIsRixOLEgseixaLE89dGhpcy54''@;'; put 'put ''LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLEQ9dGhpcy54LnJlZFNxcigpLEU9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIFU9KEg9dGhpcy5jdXJ2ZS5fbXVsQShEKSkucmVkQWRkKEUpO3RoaXMuek9uZT8oQj1PLnJlZFN1YihEKS5yZWRTdWIoRSkucmVkTXVs''@;'; put 'put ''KFUucmVkU3ViKHRoaXMuY3VydmUudHdvKSksRj1VLnJlZE11bChILnJlZFN1YihFKSksTj1VLnJlZFNxcigpLnJlZFN1YihVKS5yZWRTdWIoVSkpOih6PXRoaXMuei5yZWRTcXIoKSxaPVUucmVkU3ViKHopLnJlZElTdWIoeiksQj1PLnJlZFN1YihEKS5yZWRJU3ViKEUpLnJlZE11bChaKSxG''@;'; put 'put ''PVUucmVkTXVsKEgucmVkU3ViKEUpKSxOPVUucmVkTXVsKFopKX1lbHNlIEg9RC5yZWRBZGQoRSksej10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksWj1ILnJlZFN1Yih6KS5yZWRTdWIoeiksQj10aGlzLmN1cnZlLl9tdWxDKE8ucmVkSVN1YihIKSkucmVkTXVsKFopLEY9dGhp''@;'; put 'put ''cy5jdXJ2ZS5fbXVsQyhIKS5yZWRNdWwoRC5yZWRJU3ViKEUpKSxOPUgucmVkTXVsKFopO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsRixOKX0sQS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlz''@;'; put 'put ''Ll9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEEucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oTyl7dmFyIEQ9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChPLnkucmVkU3ViKE8ueCkpLEU9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChPLnkucmVkQWRkKE8ueCkpLEI9dGhp''@;'; put 'put ''cy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoTy50KSxGPXRoaXMuei5yZWRNdWwoTy56LnJlZEFkZChPLnopKSxOPUUucmVkU3ViKEQpLEg9Ri5yZWRTdWIoQiksej1GLnJlZEFkZChCKSxaPUUucmVkQWRkKEQpLFU9Ti5yZWRNdWwoSCksSz16LnJlZE11bChaKSxYPU4ucmVkTXVs''@;'; put 'put ''KFopLG5lPUgucmVkTXVsKHopO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUsSyxuZSxYKX0sQS5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oTyl7dmFyIEssWCxEPXRoaXMuei5yZWRNdWwoTy56KSxFPUQucmVkU3FyKCksQj10aGlzLngucmVkTXVsKE8ueCksRj10aGlzLnkucmVkTXVs''@;'; put 'put ''KE8ueSksTj10aGlzLmN1cnZlLmQucmVkTXVsKEIpLnJlZE11bChGKSxIPUUucmVkU3ViKE4pLHo9RS5yZWRBZGQoTiksWj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKE8ueC5yZWRBZGQoTy55KSkucmVkSVN1YihCKS5yZWRJU3ViKEYpLFU9RC5yZWRNdWwoSCkucmVkTXVsKFopO3Jl''@;'; put 'put ''dHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KEs9RC5yZWRNdWwoeikucmVkTXVsKEYucmVkU3ViKHRoaXMuY3VydmUuX211bEEoQikpKSxYPUgucmVkTXVsKHopKTooSz1ELnJlZE11bCh6KS5yZWRNdWwoRi5yZWRTdWIoQikpLFg9dGhpcy5jdXJ2ZS5fbXVsQyhIKS5yZWRNdWwoeikpLHRoaXMu''@;'; put 'put ''Y3VydmUucG9pbnQoVSxLLFgpfSxBLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP086Ty5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChPKTp0aGlzLl9wcm9qQWRkKE8pfSxBLnByb3RvdHlwZS5tdWw9''@;'; put 'put ''ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoTyk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxPKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTyl9LEEucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihPLEQsRSl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQo''@;'; put 'put ''MSxbdGhpcyxEXSxbTyxFXSwyLCExKX0sQS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihPLEQsRSl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxEXSxbTyxFXSwyLCEwKX0sQS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVy''@;'; put 'put ''biB0aGlzO3ZhciBPPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKE8pLHRoaXMueT10aGlzLnkucmVkTXVsKE8pLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKE8pKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEEucHJv''@;'; put 'put ''dG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sQS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9t''@;'; put 'put ''UmVkKCl9LEEucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxBLnByb3RvdHlwZS5lcT1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcz09PU98fDA9PT10aGlzLmdldFgoKS5jbXAoTy5nZXRYKCkpJiYwPT09dGhpcy5nZXRZ''@;'; put 'put ''KCkuY21wKE8uZ2V0WSgpKX0sQS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKE8pe3ZhciBEPU8udG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKEQpKXJldHVybiEwO2Zvcih2YXIgRT1PLmNsb25lKCksQj10aGlzLmN1cnZlLnJlZE4ucmVk''@;'; put 'put ''TXVsKHRoaXMueik7Oyl7aWYoRS5pYWRkKHRoaXMuY3VydmUubiksRS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihELnJlZElBZGQoQiksMD09PXRoaXMueC5jbXAoRCkpcmV0dXJuITB9fSxBLnByb3RvdHlwZS50b1A9QS5wcm90b3R5cGUubm9ybWFsaXplLEEucHJvdG90eXBl''@;'; put 'put ''Lm1peGVkQWRkPUEucHJvdG90eXBlLmFkZH0sODcyOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1qO1MuYmFzZT1kKDk4ODI4KSxTLnNob3J0PWQoNjgwNzUpLFMubW9udD1kKDY0OTQ3KSxTLmVkd2FyZHM9ZCg1NTUzNyl9LDY0OTQ3KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQo''@;'; put 'put ''ODg3MjMpLGg9ZCg3MTk5Myksbz1kKDk4ODI4KSxJPWQoMzEzNik7ZnVuY3Rpb24gZihBKXtvLmNhbGwodGhpcywibW9udCIsQSksdGhpcy5hPW5ldyBTKEEuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgUyhBLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBTKDQp''@;'; put 'put ''LnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IFMoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBUKEEsTSxPKXtvLkJhc2VQb2ludC5jYWxsKHRoaXMsQSwicHJvamVjdGl2ZSIp''@;'; put 'put ''LG51bGw9PT1NJiZudWxsPT09Tz8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IFMoTSwxNiksdGhpcy56PW5ldyBTKE8sMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJl''@;'; put 'put ''ZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9aChmLG8pLHRlLmV4cG9ydHM9ZixmLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihNKXt2YXIgTz1NLm5vcm1hbGl6ZSgpLngsRD1PLnJlZFNxcigpLEU9RC5yZWRNdWwoTykucmVkQWRkKEQucmVkTXVsKHRoaXMu''@;'; put 'put ''YSkpLnJlZEFkZChPKTtyZXR1cm4gMD09PUUucmVkU3FydCgpLnJlZFNxcigpLmNtcChFKX0saChULG8uQmFzZVBvaW50KSxmLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihNLE8pe3JldHVybiB0aGlzLnBvaW50KEkudG9BcnJheShNLE8pLDEpfSxmLnByb3RvdHlwZS5wb2ludD1m''@;'; put 'put ''dW5jdGlvbihNLE8pe3JldHVybiBuZXcgVCh0aGlzLE0sTyl9LGYucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTSl7cmV0dXJuIFQuZnJvbUpTT04odGhpcyxNKX0sVC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sVC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LFQuZnJvbUpTT049ZnVuY3Rpb24oTSxPKXtyZXR1cm4gbmV3IFQoTSxPWzBdLE9bMV18fE0ub25lKX0sVC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxULnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIDA9PT10aGlzLnouY21wbigwKX0sVC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIE89dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEU9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEI9Ty5yZWRTdWIoRSksRj1PLnJlZE11bChFKSxOPUIucmVkTXVsKEUucmVk''@;'; put 'put ''QWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChCKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEYsTil9LFQucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFQucHJvdG90eXBlLmRpZmZBZGQ9ZnVu''@;'; put 'put ''Y3Rpb24oTSxPKXt2YXIgRD10aGlzLngucmVkQWRkKHRoaXMueiksRT10aGlzLngucmVkU3ViKHRoaXMueiksQj1NLngucmVkQWRkKE0ueiksTj1NLngucmVkU3ViKE0ueikucmVkTXVsKEQpLEg9Qi5yZWRNdWwoRSksej1PLnoucmVkTXVsKE4ucmVkQWRkKEgpLnJlZFNxcigpKSxaPU8ueC5y''@;'; put 'put ''ZWRNdWwoTi5yZWRJU3ViKEgpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh6LFopfSxULnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTSl7Zm9yKHZhciBPPU0uY2xvbmUoKSxEPXRoaXMsRT10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksRj1bXTswIT09Ty5jbXBuKDApO08u''@;'; put 'put ''aXVzaHJuKDEpKUYucHVzaChPLmFuZGxuKDEpKTtmb3IodmFyIE49Ri5sZW5ndGgtMTtOPj0wO04tLSkwPT09RltOXT8oRD1ELmRpZmZBZGQoRSx0aGlzKSxFPUUuZGJsKCkpOihFPUQuZGlmZkFkZChFLHRoaXMpLEQ9RC5kYmwoKSk7cmV0dXJuIEV9LFQucHJvdG90eXBlLm11bEFkZD1mdW5j''@;'; put 'put ''dGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFQucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxULnByb3RvdHlwZS5lcT1mdW5j''@;'; put 'put ''dGlvbihNKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChNLmdldFgoKSl9LFQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sVC5wcm90b3R5cGUu''@;'; put 'put ''Z2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2ODA3NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDMxMzYpLGg9ZCg4ODcyMyksbz1kKDcxOTkzKSxJPWQoOTg4MjgpLGY9Uy5hc3NlcnQ7ZnVuY3Rpb24gVChPKXtJLmNhbGwo''@;'; put 'put ''dGhpcywic2hvcnQiLE8pLHRoaXMuYT1uZXcgaChPLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGgoTy5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50''@;'; put 'put ''aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShPKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBBKE8sRCxFLEIpe0ku''@;'; put 'put ''QmFzZVBvaW50LmNhbGwodGhpcyxPLCJhZmZpbmUiKSxudWxsPT09RCYmbnVsbD09PUU/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBoKEQsMTYpLHRoaXMueT1uZXcgaChFLDE2KSxCJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0''@;'; put 'put ''aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIE0oTyxELEUsQil7''@;'; put 'put ''SS5CYXNlUG9pbnQuY2FsbCh0aGlzLE8sImphY29iaWFuIiksbnVsbD09PUQmJm51bGw9PT1FJiZudWxsPT09Qj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IGgoMCkpOih0aGlzLng9bmV3IGgoRCwxNiksdGhpcy55PW5ldyBoKEUsMTYp''@;'; put 'put ''LHRoaXMuej1uZXcgaChCLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUu''@;'; put 'put ''cmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfW8oVCxJKSx0ZS5leHBvcnRzPVQsVC5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihEKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgRSxCO2lmKEQu''@;'; put 'put ''YmV0YSlFPW5ldyBoKEQuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIEY9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7RT0oRT1GWzBdLmNtcChGWzFdKTwwP0ZbMF06RlsxXSkudG9SZWQodGhpcy5yZWQpfWlmKEQubGFtYmRhKUI9bmV3IGgoRC5sYW1iZGEsMTYpO2Vsc2V7''@;'; put 'put ''dmFyIE49dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoTlswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEUpKT9CPU5bMF06ZigwPT09dGhpcy5nLm11bChCPU5bMV0pLnguY21wKHRoaXMuZy54LnJlZE11bChFKSkpfXJldHVybntiZXRhOkUsbGFtYmRhOkIsYmFz''@;'; put 'put ''aXM6RC5iYXNpcz9ELmJhc2lzLm1hcChmdW5jdGlvbih6KXtyZXR1cm57YTpuZXcgaCh6LmEsMTYpLGI6bmV3IGgoei5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoQil9fX0sVC5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihEKXt2YXIgRT1EPT09dGhpcy5wP3RoaXMucmVk''@;'; put 'put ''OmgubW9udChEKSxCPW5ldyBoKDIpLnRvUmVkKEUpLnJlZEludm0oKSxGPUIucmVkTmVnKCksTj1uZXcgaCgzKS50b1JlZChFKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKEIpO3JldHVybltGLnJlZEFkZChOKS5mcm9tUmVkKCksRi5yZWRTdWIoTikuZnJvbVJlZCgpXX0sVC5wcm90b3R5''@;'; put 'put ''cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihEKXtmb3IodmFyIFUsSyxYLG5lLHNlLGhlLF9lLEZlLFIsRT10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEI9RCxGPXRoaXMubi5jbG9uZSgpLE49bmV3IGgoMSksSD1uZXcgaCgwKSx6PW5ldyBoKDApLFo9''@;'; put 'put ''bmV3IGgoMSksbWU9MDswIT09Qi5jbXBuKDApOyl7dmFyIHM9Ri5kaXYoQik7RmU9Ri5zdWIocy5tdWwoQikpLFI9ei5zdWIocy5tdWwoTikpO3ZhciB1PVouc3ViKHMubXVsKEgpKTtpZighWCYmRmUuY21wKEUpPDApVT1fZS5uZWcoKSxLPU4sWD1GZS5uZWcoKSxuZT1SO2Vsc2UgaWYoWCYm''@;'; put 'put ''Mj09KyttZSlicmVhaztfZT1GZSxGPUIsQj1GZSx6PU4sTj1SLFo9SCxIPXV9c2U9RmUubmVnKCksaGU9Ujt2YXIgdj1YLnNxcigpLmFkZChuZS5zcXIoKSk7cmV0dXJuIHNlLnNxcigpLmFkZChoZS5zcXIoKSkuY21wKHYpPj0wJiYoc2U9VSxoZT1LKSxYLm5lZ2F0aXZlJiYoWD1YLm5lZygp''@;'; put 'put ''LG5lPW5lLm5lZygpKSxzZS5uZWdhdGl2ZSYmKHNlPXNlLm5lZygpLGhlPWhlLm5lZygpKSxbe2E6WCxiOm5lfSx7YTpzZSxiOmhlfV19LFQucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oRCl7dmFyIEU9dGhpcy5lbmRvLmJhc2lzLEI9RVswXSxGPUVbMV0sTj1GLmIubXVsKEQpLmRp''@;'; put 'put ''dlJvdW5kKHRoaXMubiksSD1CLmIubmVnKCkubXVsKEQpLmRpdlJvdW5kKHRoaXMubiksej1OLm11bChCLmEpLFo9SC5tdWwoRi5hKSxVPU4ubXVsKEIuYiksSz1ILm11bChGLmIpO3JldHVybntrMTpELnN1Yih6KS5zdWIoWiksazI6VS5hZGQoSykubmVnKCl9fSxULnByb3RvdHlwZS5wb2lu''@;'; put 'put ''dEZyb21YPWZ1bmN0aW9uKEQsRSl7KEQ9bmV3IGgoRCwxNikpLnJlZHx8KEQ9RC50b1JlZCh0aGlzLnJlZCkpO3ZhciBCPUQucmVkU3FyKCkucmVkTXVsKEQpLnJlZElBZGQoRC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLEY9Qi5yZWRTcXJ0KCk7aWYoMCE9PUYucmVkU3FyKCku''@;'; put 'put ''cmVkU3ViKEIpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBOPUYuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEUmJiFOfHwhRSYmTikmJihGPUYucmVkTmVnKCkpLHRoaXMucG9pbnQoRCxGKX0sVC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oRCl7aWYoRC5pbmYpcmV0dXJuITA7dmFyIEU9RC54LEI9RC55LEY9dGhpcy5hLnJlZE11bChFKSxOPUUucmVkU3FyKCkucmVkTXVsKEUpLnJlZElBZGQoRikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Qi5yZWRTcXIoKS5yZWRJU3ViKE4pLmNtcG4oMCl9LFQucHJvdG90eXBlLl9l''@;'; put 'put ''bmRvV25hZk11bEFkZD1mdW5jdGlvbihELEUsQil7Zm9yKHZhciBGPXRoaXMuX2VuZG9XbmFmVDEsTj10aGlzLl9lbmRvV25hZlQyLEg9MDtIPEQubGVuZ3RoO0grKyl7dmFyIHo9dGhpcy5fZW5kb1NwbGl0KEVbSF0pLFo9RFtIXSxVPVouX2dldEJldGEoKTt6LmsxLm5lZ2F0aXZlJiYoei5r''@;'; put 'put ''MS5pbmVnKCksWj1aLm5lZyghMCkpLHouazIubmVnYXRpdmUmJih6LmsyLmluZWcoKSxVPVUubmVnKCEwKSksRlsyKkhdPVosRlsyKkgrMV09VSxOWzIqSF09ei5rMSxOWzIqSCsxXT16LmsyfWZvcih2YXIgSz10aGlzLl93bmFmTXVsQWRkKDEsRixOLDIqSCxCKSxYPTA7WDwyKkg7WCsrKUZb''@;'; put 'put ''WF09bnVsbCxOW1hdPW51bGw7cmV0dXJuIEt9LG8oQSxJLkJhc2VQb2ludCksVC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oRCxFLEIpe3JldHVybiBuZXcgQSh0aGlzLEQsRSxCKX0sVC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihELEUpe3JldHVybiBBLmZyb21KU09OKHRo''@;'; put 'put ''aXMsRCxFKX0sQS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBEPXRoaXMucHJlY29tcHV0ZWQ7aWYoRCYmRC5iZXRhKXJldHVybiBELmJldGE7dmFyIEU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5i''@;'; put 'put ''ZXRhKSx0aGlzLnkpO2lmKEQpe3ZhciBCPXRoaXMuY3VydmUsRj1mdW5jdGlvbihOKXtyZXR1cm4gQi5wb2ludChOLngucmVkTXVsKEIuZW5kby5iZXRhKSxOLnkpfTtELmJldGE9RSxFLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOkQubmFmJiZ7d25kOkQubmFmLnduZCxwb2ludHM6RC5u''@;'; put 'put ''YWYucG9pbnRzLm1hcChGKX0sZG91YmxlczpELmRvdWJsZXMmJntzdGVwOkQuZG91Ymxlcy5zdGVwLHBvaW50czpELmRvdWJsZXMucG9pbnRzLm1hcChGKX19fXJldHVybiBFfX0sQS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0''@;'; put 'put ''aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQu''@;'; put 'put ''bmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sQS5mcm9tSlNPTj1mdW5jdGlvbihELEUsQil7InN0cmluZyI9PXR5cGVvZiBFJiYoRT1KU09OLnBhcnNlKEUpKTt2''@;'; put 'put ''YXIgRj1ELnBvaW50KEVbMF0sRVsxXSxCKTtpZighRVsyXSlyZXR1cm4gRjtmdW5jdGlvbiBOKHope3JldHVybiBELnBvaW50KHpbMF0selsxXSxCKX12YXIgSD1FWzJdO3JldHVybiBGLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpILmRvdWJsZXMmJntzdGVwOkguZG91Ymxlcy5z''@;'; put 'put ''dGVwLHBvaW50czpbRl0uY29uY2F0KEguZG91Ymxlcy5wb2ludHMubWFwKE4pKX0sbmFmOkgubmFmJiZ7d25kOkgubmFmLnduZCxwb2ludHM6W0ZdLmNvbmNhdChILm5hZi5wb2ludHMubWFwKE4pKX19LEZ9LEEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0lu''@;'; put 'put ''ZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sQS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmluZn0sQS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEQpe2lmKHRoaXMuaW5mKXJldHVybiBEO2lmKEQuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoRCkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShEKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwp''@;'; put 'put ''O2lmKDA9PT10aGlzLnguY21wKEQueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgRT10aGlzLnkucmVkU3ViKEQueSk7MCE9PUUuY21wbigwKSYmKEU9RS5yZWRNdWwodGhpcy54LnJlZFN1YihELngpLnJlZEludm0oKSkpO3ZhciBCPUUucmVkU3FyKCkucmVkSVN1''@;'; put 'put ''Yih0aGlzLngpLnJlZElTdWIoRC54KSxGPUUucmVkTXVsKHRoaXMueC5yZWRTdWIoQikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChCLEYpfSxBLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgRD10aGlzLnkucmVk''@;'; put 'put ''QWRkKHRoaXMueSk7aWYoMD09PUQuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBFPXRoaXMuY3VydmUuYSxCPXRoaXMueC5yZWRTcXIoKSxGPUQucmVkSW52bSgpLE49Qi5yZWRBZGQoQikucmVkSUFkZChCKS5yZWRJQWRkKEUpLnJlZE11bChGKSxIPU4u''@;'; put 'put ''cmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHo9Ti5yZWRNdWwodGhpcy54LnJlZFN1YihIKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEgseil9LEEucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQo''@;'; put 'put ''KX0sQS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxBLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oRCl7cmV0dXJuIEQ9bmV3IGgoRCwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKEQpP3RoaXMuY3VydmUuX2ZpeGVk''@;'; put 'put ''TmFmTXVsKHRoaXMsRCk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbRF0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxEKX0sQS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKEQsRSxCKXt2YXIgRj1bdGhpcyxFXSxOPVtELEJdO3JldHVybiB0''@;'; put 'put ''aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoRixOKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsRixOLDIpfSxBLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEQsRSxCKXt2YXIgRj1bdGhpcyxFXSxOPVtELEJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhp''@;'; put 'put ''cy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoRixOLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsRixOLDIsITApfSxBLnByb3RvdHlwZS5lcT1mdW5jdGlvbihEKXtyZXR1cm4gdGhpcz09PUR8fHRoaXMuaW5mPT09RC5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoRC54KSYmMD09''@;'; put 'put ''PXRoaXMueS5jbXAoRC55KSl9LEEucHJvdG90eXBlLm5lZz1mdW5jdGlvbihEKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgRT10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKEQmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBCPXRoaXMucHJlY29tcHV0ZWQs''@;'; put 'put ''Rj1mdW5jdGlvbihOKXtyZXR1cm4gTi5uZWcoKX07RS5wcmVjb21wdXRlZD17bmFmOkIubmFmJiZ7d25kOkIubmFmLnduZCxwb2ludHM6Qi5uYWYucG9pbnRzLm1hcChGKX0sZG91YmxlczpCLmRvdWJsZXMmJntzdGVwOkIuZG91Ymxlcy5zdGVwLHBvaW50czpCLmRvdWJsZXMucG9pbnRzLm1h''@;'; put 'put ''cChGKX19fXJldHVybiBFfSxBLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxvKE0sSS5CYXNlUG9pbnQpLFQucHJv''@;'; put 'put ''dG90eXBlLmpwb2ludD1mdW5jdGlvbihELEUsQil7cmV0dXJuIG5ldyBNKHRoaXMsRCxFLEIpfSxNLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBEPXRoaXMuei5yZWRJbnZtKCksRT1E''@;'; put 'put ''LnJlZFNxcigpLEI9dGhpcy54LnJlZE11bChFKSxGPXRoaXMueS5yZWRNdWwoRSkucmVkTXVsKEQpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsRil9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRo''@;'; put 'put ''aXMueil9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihEKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gRDtpZihELmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgRT1ELnoucmVkU3FyKCksQj10aGlzLnoucmVkU3FyKCksRj10aGlzLngucmVkTXVsKEUpLE49RC54LnJlZE11bChC''@;'; put 'put ''KSxIPXRoaXMueS5yZWRNdWwoRS5yZWRNdWwoRC56KSksej1ELnkucmVkTXVsKEIucmVkTXVsKHRoaXMueikpLFo9Ri5yZWRTdWIoTiksVT1ILnJlZFN1Yih6KTtpZigwPT09Wi5jbXBuKDApKXJldHVybiAwIT09VS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0''@;'; put 'put ''aGlzLmRibCgpO3ZhciBLPVoucmVkU3FyKCksWD1LLnJlZE11bChaKSxuZT1GLnJlZE11bChLKSxzZT1VLnJlZFNxcigpLnJlZElBZGQoWCkucmVkSVN1YihuZSkucmVkSVN1YihuZSksaGU9VS5yZWRNdWwobmUucmVkSVN1YihzZSkpLnJlZElTdWIoSC5yZWRNdWwoWCkpLF9lPXRoaXMuei5y''@;'; put 'put ''ZWRNdWwoRC56KS5yZWRNdWwoWik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHNlLGhlLF9lKX0sTS5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oRCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIEQudG9KKCk7aWYoRC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEU9dGhp''@;'; put 'put ''cy56LnJlZFNxcigpLEI9dGhpcy54LEY9RC54LnJlZE11bChFKSxOPXRoaXMueSxIPUQueS5yZWRNdWwoRSkucmVkTXVsKHRoaXMueiksej1CLnJlZFN1YihGKSxaPU4ucmVkU3ViKEgpO2lmKDA9PT16LmNtcG4oMCkpcmV0dXJuIDAhPT1aLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVs''@;'; put 'put ''bCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIFU9ei5yZWRTcXIoKSxLPVUucmVkTXVsKHopLFg9Qi5yZWRNdWwoVSksbmU9Wi5yZWRTcXIoKS5yZWRJQWRkKEspLnJlZElTdWIoWCkucmVkSVN1YihYKSxzZT1aLnJlZE11bChYLnJlZElTdWIobmUpKS5yZWRJU3ViKE4ucmVkTXVsKEspKSxo''@;'; put 'put ''ZT10aGlzLnoucmVkTXVsKHopO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChuZSxzZSxoZSl9LE0ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oRCl7aWYoMD09PUQpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIUQpcmV0dXJuIHRoaXMuZGJsKCk7dmFy''@;'; put 'put ''IEU7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBCPXRoaXM7Zm9yKEU9MDtFPEQ7RSsrKUI9Qi5kYmwoKTtyZXR1cm4gQn12YXIgRj10aGlzLmN1cnZlLmEsTj10aGlzLmN1cnZlLnRpbnYsSD10aGlzLngsej10aGlzLnksWj10aGlzLnosVT1aLnJlZFNxcigp''@;'; put 'put ''LnJlZFNxcigpLEs9ei5yZWRBZGQoeik7Zm9yKEU9MDtFPEQ7RSsrKXt2YXIgWD1ILnJlZFNxcigpLG5lPUsucmVkU3FyKCksc2U9bmUucmVkU3FyKCksaGU9WC5yZWRBZGQoWCkucmVkSUFkZChYKS5yZWRJQWRkKEYucmVkTXVsKFUpKSxfZT1ILnJlZE11bChuZSksbWU9aGUucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1YihfZS5yZWRBZGQoX2UpKSxGZT1fZS5yZWRJU3ViKG1lKSxSPWhlLnJlZE11bChGZSk7Uj1SLnJlZElBZGQoUikucmVkSVN1YihzZSk7dmFyIHM9Sy5yZWRNdWwoWik7RSsxPEQmJihVPVUucmVkTXVsKHNlKSksSD1tZSxaPXMsSz1SfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChI''@;'; put 'put ''LEsucmVkTXVsKE4pLFopfSxNLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBELEUsQjtpZih0aGlzLnpPbmUpe3ZhciBGPXRoaXMueC5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxIPU4ucmVkU3FyKCksej10aGlzLngucmVkQWRkKE4pLnJlZFNxcigpLnJlZElTdWIoRikucmVkSVN1YihIKTt6PXoucmVkSUFkZCh6KTt2''@;'; put 'put ''YXIgWj1GLnJlZEFkZChGKS5yZWRJQWRkKEYpLFU9Wi5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoeiksSz1ILnJlZElBZGQoSCk7Sz0oSz1LLnJlZElBZGQoSykpLnJlZElBZGQoSyksRD1VLEU9Wi5yZWRNdWwoei5yZWRJU3ViKFUpKS5yZWRJU3ViKEspLEI9dGhpcy55LnJlZEFkZCh0''@;'; put 'put ''aGlzLnkpfWVsc2V7dmFyIFg9dGhpcy54LnJlZFNxcigpLG5lPXRoaXMueS5yZWRTcXIoKSxzZT1uZS5yZWRTcXIoKSxoZT10aGlzLngucmVkQWRkKG5lKS5yZWRTcXIoKS5yZWRJU3ViKFgpLnJlZElTdWIoc2UpO2hlPWhlLnJlZElBZGQoaGUpO3ZhciBfZT1YLnJlZEFkZChYKS5yZWRJQWRk''@;'; put 'put ''KFgpLG1lPV9lLnJlZFNxcigpLEZlPXNlLnJlZElBZGQoc2UpO0ZlPShGZT1GZS5yZWRJQWRkKEZlKSkucmVkSUFkZChGZSksRD1tZS5yZWRJU3ViKGhlKS5yZWRJU3ViKGhlKSxFPV9lLnJlZE11bChoZS5yZWRJU3ViKEQpKS5yZWRJU3ViKEZlKSxCPShCPXRoaXMueS5yZWRNdWwodGhpcy56''@;'; put 'put ''KSkucmVkSUFkZChCKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoRCxFLEIpfSxNLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgRCxFLEI7aWYodGhpcy56T25lKXt2YXIgRj10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksSD1OLnJlZFNxcigpLHo9dGhpcy54''@;'; put 'put ''LnJlZEFkZChOKS5yZWRTcXIoKS5yZWRJU3ViKEYpLnJlZElTdWIoSCk7ej16LnJlZElBZGQoeik7dmFyIFo9Ri5yZWRBZGQoRikucmVkSUFkZChGKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksVT1aLnJlZFNxcigpLnJlZElTdWIoeikucmVkSVN1Yih6KTtEPVU7dmFyIEs9SC5yZWRJQWRkKEgp''@;'; put 'put ''O0s9KEs9Sy5yZWRJQWRkKEspKS5yZWRJQWRkKEspLEU9Wi5yZWRNdWwoei5yZWRJU3ViKFUpKS5yZWRJU3ViKEspLEI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIFg9dGhpcy56LnJlZFNxcigpLG5lPXRoaXMueS5yZWRTcXIoKSxzZT10aGlzLngucmVkTXVsKG5lKSxoZT10aGlz''@;'; put 'put ''LngucmVkU3ViKFgpLnJlZE11bCh0aGlzLngucmVkQWRkKFgpKTtoZT1oZS5yZWRBZGQoaGUpLnJlZElBZGQoaGUpO3ZhciBfZT1zZS5yZWRJQWRkKHNlKSxtZT0oX2U9X2UucmVkSUFkZChfZSkpLnJlZEFkZChfZSk7RD1oZS5yZWRTcXIoKS5yZWRJU3ViKG1lKSxCPXRoaXMueS5yZWRBZGQo''@;'; put 'put ''dGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKG5lKS5yZWRJU3ViKFgpO3ZhciBGZT1uZS5yZWRTcXIoKTtGZT0oRmU9KEZlPUZlLnJlZElBZGQoRmUpKS5yZWRJQWRkKEZlKSkucmVkSUFkZChGZSksRT1oZS5yZWRNdWwoX2UucmVkSVN1YihEKSkucmVkSVN1YihGZSl9cmV0dXJuIHRoaXMuY3Vy''@;'; put 'put ''dmUuanBvaW50KEQsRSxCKX0sTS5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuY3VydmUuYSxFPXRoaXMueCxCPXRoaXMueSxGPXRoaXMueixOPUYucmVkU3FyKCkucmVkU3FyKCksSD1FLnJlZFNxcigpLHo9Qi5yZWRTcXIoKSxaPUgucmVkQWRkKEgpLnJlZElBZGQoSCku''@;'; put 'put ''cmVkSUFkZChELnJlZE11bChOKSksVT1FLnJlZEFkZChFKSxLPShVPVUucmVkSUFkZChVKSkucmVkTXVsKHopLFg9Wi5yZWRTcXIoKS5yZWRJU3ViKEsucmVkQWRkKEspKSxuZT1LLnJlZElTdWIoWCksc2U9ei5yZWRTcXIoKTtzZT0oc2U9KHNlPXNlLnJlZElBZGQoc2UpKS5yZWRJQWRkKHNl''@;'; put 'put ''KSkucmVkSUFkZChzZSk7dmFyIGhlPVoucmVkTXVsKG5lKS5yZWRJU3ViKHNlKSxfZT1CLnJlZEFkZChCKS5yZWRNdWwoRik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFgsaGUsX2UpfSxNLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRo''@;'; put 'put ''aXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBEPXRoaXMueC5yZWRTcXIoKSxFPXRoaXMueS5yZWRTcXIoKSxCPXRoaXMuei5yZWRTcXIoKSxGPUUucmVkU3FyKCksTj1ELnJlZEFkZChEKS5yZWRJQWRkKEQpLEg9Ti5yZWRTcXIoKSx6PXRoaXMueC5yZWRBZGQoRSkucmVkU3FyKCkucmVkSVN1YihE''@;'; put 'put ''KS5yZWRJU3ViKEYpLFo9KHo9KHo9KHo9ei5yZWRJQWRkKHopKS5yZWRBZGQoeikucmVkSUFkZCh6KSkucmVkSVN1YihIKSkucmVkU3FyKCksVT1GLnJlZElBZGQoRik7VT0oVT0oVT1VLnJlZElBZGQoVSkpLnJlZElBZGQoVSkpLnJlZElBZGQoVSk7dmFyIEs9Ti5yZWRJQWRkKHopLnJlZFNx''@;'; put 'put ''cigpLnJlZElTdWIoSCkucmVkSVN1YihaKS5yZWRJU3ViKFUpLFg9RS5yZWRNdWwoSyk7WD0oWD1YLnJlZElBZGQoWCkpLnJlZElBZGQoWCk7dmFyIG5lPXRoaXMueC5yZWRNdWwoWikucmVkSVN1YihYKTtuZT0obmU9bmUucmVkSUFkZChuZSkpLnJlZElBZGQobmUpO3ZhciBzZT10aGlzLnku''@;'; put 'put ''cmVkTXVsKEsucmVkTXVsKFUucmVkSVN1YihLKSkucmVkSVN1Yih6LnJlZE11bChaKSkpO3NlPShzZT0oc2U9c2UucmVkSUFkZChzZSkpLnJlZElBZGQoc2UpKS5yZWRJQWRkKHNlKTt2YXIgaGU9dGhpcy56LnJlZEFkZCh6KS5yZWRTcXIoKS5yZWRJU3ViKEIpLnJlZElTdWIoWik7cmV0dXJu''@;'; put 'put ''IHRoaXMuY3VydmUuanBvaW50KG5lLHNlLGhlKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEQsRSl7cmV0dXJuIEQ9bmV3IGgoRCxFKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsRCl9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEQpe2lmKCJhZmZpbmUiPT09RC50eXBlKXJldHVybiB0''@;'; put 'put ''aGlzLmVxKEQudG9KKCkpO2lmKHRoaXM9PT1EKXJldHVybiEwO3ZhciBFPXRoaXMuei5yZWRTcXIoKSxCPUQuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChCKS5yZWRJU3ViKEQueC5yZWRNdWwoRSkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIEY9RS5yZWRNdWwodGhpcy56KSxOPUIu''@;'; put 'put ''cmVkTXVsKEQueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKE4pLnJlZElTdWIoRC55LnJlZE11bChGKSkuY21wbigwKX0sTS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEQpe3ZhciBFPXRoaXMuei5yZWRTcXIoKSxCPUQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChFKTtpZigw''@;'; put 'put ''PT09dGhpcy54LmNtcChCKSlyZXR1cm4hMDtmb3IodmFyIEY9RC5jbG9uZSgpLE49dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChFKTs7KXtpZihGLmlhZGQodGhpcy5jdXJ2ZS5uKSxGLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEIucmVkSUFkZChOKSwwPT09dGhpcy54LmNtcChC''@;'; put 'put ''KSlyZXR1cm4hMH19LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejog''@;'; put 'put ''Iit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxNLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDIzNDAxKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBNLFM9aixoPWQoNTI1MjkpLG89ZCg4NzI5KSxmPWQoMzEzNikuYXNzZXJ0''@;'; put 'put ''O2Z1bmN0aW9uIFQoTyl7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09Ty50eXBlP25ldyBvLnNob3J0KE8pOiJlZHdhcmRzIj09PU8udHlwZT9uZXcgby5lZHdhcmRzKE8pOm5ldyBvLm1vbnQoTyksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1PLmhhc2gs''@;'; put 'put ''Zih0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLGYodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBBKE8sRCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsTyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIEU9bmV3IFQoRCk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLE8se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkV9KSxFfX0pfVMuUHJlc2V0Q3VydmU9VCxBKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTky''@;'; put 'put ''IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVj''@;'; put 'put ''IGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpoLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhk''@;'; put 'put ''YTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxBKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAx''@;'; put 'put ''M2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpoLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1''@;'; put 'put ''MDA3ZTM0Il19KSxBKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAw''@;'; put 'put ''MDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQg''@;'; put 'put ''ZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6aC5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2''@;'; put 'put ''YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksQSgicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAw''@;'; put 'put ''IGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgx''@;'; put 'put ''ZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVj''@;'; put 'put ''ZWMxOTZhIGNjYzUyOTczIixoYXNoOmguc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYy''@;'; put 'put ''NjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLEEoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVl''@;'; put 'put ''IGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDpoLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAy''@;'; put 'put ''Mzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4''@;'; put 'put ''ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxBKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6aC5zaGEyNTYsZ1Jl''@;'; put 'put ''ZDohMSxnOlsiOSJdfSksQSgiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhj''@;'; put 'put ''Yzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOmguc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVj''@;'; put 'put ''MGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7TT1kKDUxNDE2KX1jYXRjaHtNPXZvaWQgMH1BKCJzZWNwMjU2azEiLHt0''@;'; put 'put ''eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4''@;'; put 'put ''YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpoLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEy''@;'; put 'put ''MDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZi''@;'; put 'put ''Y2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4''@;'; put 'put ''IixNXX0pfSwyOTA0Mih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg4NzIzKSxoPWQoMzM1NTYpLG89ZCgzMTM2KSxJPWQoMjM0MDEpLGY9ZCgzNTI5NCksVD1vLmFzc2VydCxBPWQoNjA1NDEpLE09ZCg0MDQ4NCk7ZnVuY3Rpb24gTyhEKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSly''@;'; put 'put ''ZXR1cm4gbmV3IE8oRCk7InN0cmluZyI9PXR5cGVvZiBEJiYoVChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSSxEKSwiVW5rbm93biBjdXJ2ZSAiK0QpLEQ9SVtEXSksRCBpbnN0YW5jZW9mIEkuUHJlc2V0Q3VydmUmJihEPXtjdXJ2ZTpEfSksdGhpcy5jdXJ2ZT1ELmN1''@;'; put 'put ''cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9RC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKEQuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9RC5oYXNofHxELmN1cnZlLmhhc2h9''@;'; put 'put ''dGUuZXhwb3J0cz1PLE8ucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBBKHRoaXMsRSl9LE8ucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKEUsQil7cmV0dXJuIEEuZnJvbVByaXZhdGUodGhpcyxFLEIpfSxPLnByb3RvdHlwZS5rZXlGcm9tUHVibGlj''@;'; put 'put ''PWZ1bmN0aW9uKEUsQil7cmV0dXJuIEEuZnJvbVB1YmxpYyh0aGlzLEUsQil9LE8ucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oRSl7RXx8KEU9e30pO2Zvcih2YXIgQj1uZXcgaCh7aGFzaDp0aGlzLmhhc2gscGVyczpFLnBlcnMscGVyc0VuYzpFLnBlcnNFbmN8fCJ1dGY4IixlbnRy''@;'; put 'put ''b3B5OkUuZW50cm9weXx8Zih0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkUuZW50cm9weSYmRS5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLEY9dGhpcy5uLmJ5dGVMZW5ndGgoKSxOPXRoaXMubi5zdWIobmV3IFMoMikpOzspe3ZhciBIPW5l''@;'; put 'put ''dyBTKEIuZ2VuZXJhdGUoRikpO2lmKCEoSC5jbXAoTik+MCkpcmV0dXJuIEguaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShIKX19LE8ucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihFLEIsRil7dmFyIE47aWYoUy5pc0JOKEUpfHwibnVtYmVyIj09dHlwZW9mIEUpTj0oRT1u''@;'; put 'put ''ZXcgUyhFLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBFKU49RS5sZW5ndGgsRT1uZXcgUyhFLDE2KTtlbHNle3ZhciBIPUUudG9TdHJpbmcoKTtOPUgubGVuZ3RoKzE+Pj4xLEU9bmV3IFMoSCwxNil9Im51bWJlciIhPXR5cGVvZiBGJiYoRj04Kk4pO3ZhciB6''@;'; put 'put ''PUYtdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiB6PjAmJihFPUUudXNocm4oeikpLCFCJiZFLmNtcCh0aGlzLm4pPj0wP0Uuc3ViKHRoaXMubik6RX0sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihFLEIsRixOKXtpZigib2JqZWN0Ij09dHlwZW9mIEYmJihOPUYsRj1udWxsKSxOfHwoTj17''@;'; put 'put ''fSksInN0cmluZyIhPXR5cGVvZiBFJiYibnVtYmVyIiE9dHlwZW9mIEUmJiFTLmlzQk4oRSkpe1QoIm9iamVjdCI9PXR5cGVvZiBFJiZFJiYibnVtYmVyIj09dHlwZW9mIEUubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3IgYSBC''@;'; put 'put ''TiBpbnN0YW5jZSIpLFQoRS5sZW5ndGg+Pj4wPT09RS5sZW5ndGgpO2Zvcih2YXIgSD0wO0g8RS5sZW5ndGg7SCsrKVQoKDI1NSZFW0hdKT09PUVbSF0pfUI9dGhpcy5rZXlGcm9tUHJpdmF0ZShCLEYpLEU9dGhpcy5fdHJ1bmNhdGVUb04oRSwhMSxOLm1zZ0JpdExlbmd0aCksVCghRS5pc05l''@;'; put 'put ''ZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHo9dGhpcy5uLmJ5dGVMZW5ndGgoKSxaPUIuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIix6KSxVPUUudG9BcnJheSgiYmUiLHopO1QobmV3IFMoVSkuZXEoRSksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZh''@;'; put 'put ''ciBLPW5ldyBoKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5Olosbm9uY2U6VSxwZXJzOk4ucGVycyxwZXJzRW5jOk4ucGVyc0VuY3x8InV0ZjgifSksWD10aGlzLm4uc3ViKG5ldyBTKDEpKSxuZT0wOztuZSsrKXt2YXIgc2U9Ti5rP04uayhuZSk6bmV3IFMoSy5nZW5lcmF0ZSh0aGlzLm4uYnl0''@;'; put 'put ''ZUxlbmd0aCgpKSk7aWYoISgoc2U9dGhpcy5fdHJ1bmNhdGVUb04oc2UsITApKS5jbXBuKDEpPD0wfHxzZS5jbXAoWCk+PTApKXt2YXIgaGU9dGhpcy5nLm11bChzZSk7aWYoIWhlLmlzSW5maW5pdHkoKSl7dmFyIF9lPWhlLmdldFgoKSxtZT1fZS51bW9kKHRoaXMubik7aWYoMCE9PW1lLmNt''@;'; put 'put ''cG4oMCkpe3ZhciBGZT1zZS5pbnZtKHRoaXMubikubXVsKG1lLm11bChCLmdldFByaXZhdGUoKSkuaWFkZChFKSk7aWYoMCE9PShGZT1GZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBSPShoZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09X2UuY21wKG1lKT8yOjApO3JldHVybiBOLmNh''@;'; put 'put ''bm9uaWNhbCYmRmUuY21wKHRoaXMubmgpPjAmJihGZT10aGlzLm4uc3ViKEZlKSxSXj0xKSxuZXcgTSh7cjptZSxzOkZlLHJlY292ZXJ5UGFyYW06Un0pfX19fX19LE8ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihFLEIsRixOLEgpe0h8fChIPXt9KSxFPXRoaXMuX3RydW5jYXRlVG9OKEUs''@;'; put 'put ''ITEsSC5tc2dCaXRMZW5ndGgpLEY9dGhpcy5rZXlGcm9tUHVibGljKEYsTik7dmFyIHo9KEI9bmV3IE0oQiwiaGV4IikpLnIsWj1CLnM7aWYoei5jbXBuKDEpPDB8fHouY21wKHRoaXMubik+PTB8fFouY21wbigxKTwwfHxaLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBuZSxVPVouaW52''@;'; put 'put ''bSh0aGlzLm4pLEs9VS5tdWwoRSkudW1vZCh0aGlzLm4pLFg9VS5tdWwoeikudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShuZT10aGlzLmcuam11bEFkZChLLEYuZ2V0UHVibGljKCksWCkpLmlzSW5maW5pdHkoKSYmbmUuZXFYVG9QKHopOiEobmU9dGhp''@;'; put 'put ''cy5nLm11bEFkZChLLEYuZ2V0UHVibGljKCksWCkpLmlzSW5maW5pdHkoKSYmMD09PW5lLmdldFgoKS51bW9kKHRoaXMubikuY21wKHopfSxPLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKEQsRSxCLEYpe1QoKDMmQik9PT1CLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0''@;'; put 'put ''aGFuIHR3byBiaXRzIiksRT1uZXcgTShFLEYpO3ZhciBOPXRoaXMubixIPW5ldyBTKEQpLHo9RS5yLFo9RS5zLFU9MSZCLEs9Qj4+MTtpZih6LmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmSyl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQg''@;'; put 'put ''a2V5IGNhbmRpbmF0ZSIpO3o9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKEs/ei5hZGQodGhpcy5jdXJ2ZS5uKTp6LFUpO3ZhciBYPUUuci5pbnZtKE4pLG5lPU4uc3ViKEgpLm11bChYKS51bW9kKE4pLHNlPVoubXVsKFgpLnVtb2QoTik7cmV0dXJuIHRoaXMuZy5tdWxBZGQobmUseixzZSl9LE8u''@;'; put 'put ''cHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oRCxFLEIsRil7aWYobnVsbCE9PShFPW5ldyBNKEUsRikpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIEUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIE49MDtOPDQ7TisrKXt2YXIgSDt0cnl7SD10aGlzLnJlY292ZXJQdWJLZXkoRCxF''@;'; put 'put ''LE4pfWNhdGNoe2NvbnRpbnVlfWlmKEguZXEoQikpcmV0dXJuIE59dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDYwNTQxKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODg3MjMpLG89ZCgzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24g''@;'; put 'put ''SShmLFQpe3RoaXMuZWM9Zix0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFQucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShULnByaXYsVC5wcml2RW5jKSxULnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFQucHViLFQucHViRW5jKX10ZS5leHBvcnRzPUksSS5mcm9tUHVibGljPWZ1bmN0''@;'; put 'put ''aW9uKFQsQSxNKXtyZXR1cm4gQSBpbnN0YW5jZW9mIEk/QTpuZXcgSShULHtwdWI6QSxwdWJFbmM6TX0pfSxJLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFQsQSxNKXtyZXR1cm4gQSBpbnN0YW5jZW9mIEk/QTpuZXcgSShULHtwcml2OkEscHJpdkVuYzpNfSl9LEkucHJvdG90eXBlLnZhbGlkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gVC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlQudmFsaWRhdGUoKT9ULm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpu''@;'; put 'put ''dWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEkucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihULEEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgVCYmKEE9VCxUPW51''@;'; put 'put ''bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxBP3RoaXMucHViLmVuY29kZShBLFQpOnRoaXMucHVifSxJLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFQpe3JldHVybiJoZXgiPT09VD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5w''@;'; put 'put ''cml2fSxJLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihULEEpe3RoaXMucHJpdj1uZXcgUyhULEF8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sSS5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihULEEpe2lmKFQueHx8VC55''@;'; put 'put ''KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9vKFQueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmbyhULngmJlQueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0''@;'; put 'put ''ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChULngsVC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChULEEpfSxJLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oVCl7cmV0dXJuIFQudmFsaWRhdGUoKXx8byhULnZhbGlkYXRlKCksInB1YmxpYyBw''@;'; put 'put ''b2ludCBub3QgdmFsaWRhdGVkIiksVC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEkucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oVCxBLE0pe3JldHVybiB0aGlzLmVjLnNpZ24oVCx0aGlzLEEsTSl9LEkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihULEEsTSl7cmV0dXJuIHRoaXMuZWMudmVy''@;'; put 'put ''aWZ5KFQsQSx0aGlzLHZvaWQgMCxNKX0sSS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDQwNDg0''@;'; put 'put ''KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODg3MjMpLGg9ZCgzMTM2KSxvPWguYXNzZXJ0O2Z1bmN0aW9uIEkoTyxEKXtpZihPIGluc3RhbmNlb2YgSSlyZXR1cm4gTzt0aGlzLl9pbXBvcnRERVIoTyxEKXx8KG8oTy5yJiZPLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRo''@;'; put 'put ''aXMucj1uZXcgUyhPLnIsMTYpLHRoaXMucz1uZXcgUyhPLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1PLnJlY292ZXJ5UGFyYW0/bnVsbDpPLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIGYoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gVChPLEQpe3ZhciBFPU9bRC5wbGFjZSsr''@;'; put 'put ''XTtpZighKDEyOCZFKSlyZXR1cm4gRTt2YXIgQj0xNSZFO2lmKDA9PT1CfHxCPjR8fDA9PT1PW0QucGxhY2VdKXJldHVybiExO2Zvcih2YXIgRj0wLE49MCxIPUQucGxhY2U7TjxCO04rKyxIKyspRjw8PTgsRnw9T1tIXSxGPj4+PTA7cmV0dXJuIShGPD0xMjcpJiYoRC5wbGFjZT1ILEYpfWZ1''@;'; put 'put ''bmN0aW9uIEEoTyl7Zm9yKHZhciBEPTAsRT1PLmxlbmd0aC0xOyFPW0RdJiYhKDEyOCZPW0QrMV0pJiZEPEU7KUQrKztyZXR1cm4gMD09PUQ/TzpPLnNsaWNlKEQpfWZ1bmN0aW9uIE0oTyxEKXtpZihEPDEyOClPLnB1c2goRCk7ZWxzZXt2YXIgRT0xKyhNYXRoLmxvZyhEKS9NYXRoLkxOMj4+''@;'; put 'put ''PjMpO2ZvcihPLnB1c2goMTI4fEUpOy0tRTspTy5wdXNoKEQ+Pj4oRTw8MykmMjU1KTtPLnB1c2goRCl9fXRlLmV4cG9ydHM9SSxJLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKEQsRSl7RD1oLnRvQXJyYXkoRCxFKTt2YXIgQj1uZXcgZjtpZig0OCE9PURbQi5wbGFjZSsrXSlyZXR1''@;'; put 'put ''cm4hMTt2YXIgRj1UKEQsQik7aWYoITE9PT1GfHxGK0IucGxhY2UhPT1ELmxlbmd0aHx8MiE9PURbQi5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgTj1UKEQsQik7aWYoITE9PT1OfHwxMjgmRFtCLnBsYWNlXSlyZXR1cm4hMTt2YXIgSD1ELnNsaWNlKEIucGxhY2UsTitCLnBsYWNlKTtpZihCLnBs''@;'; put 'put ''YWNlKz1OLDIhPT1EW0IucGxhY2UrK10pcmV0dXJuITE7dmFyIHo9VChELEIpO2lmKCExPT09enx8RC5sZW5ndGghPT16K0IucGxhY2V8fDEyOCZEW0IucGxhY2VdKXJldHVybiExO3ZhciBaPUQuc2xpY2UoQi5wbGFjZSx6K0IucGxhY2UpO2lmKDA9PT1IWzBdKXtpZighKDEyOCZIWzFdKSly''@;'; put 'put ''ZXR1cm4hMTtIPUguc2xpY2UoMSl9aWYoMD09PVpbMF0pe2lmKCEoMTI4JlpbMV0pKXJldHVybiExO1o9Wi5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBTKEgpLHRoaXMucz1uZXcgUyhaKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sSS5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24o''@;'; put 'put ''RCl7dmFyIEU9dGhpcy5yLnRvQXJyYXkoKSxCPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZFWzBdJiYoRT1bMF0uY29uY2F0KEUpKSwxMjgmQlswXSYmKEI9WzBdLmNvbmNhdChCKSksRT1BKEUpLEI9QShCKTshKEJbMF18fDEyOCZCWzFdKTspQj1CLnNsaWNlKDEpO3ZhciBGPVsyXTtNKEYs''@;'; put 'put ''RS5sZW5ndGgpLChGPUYuY29uY2F0KEUpKS5wdXNoKDIpLE0oRixCLmxlbmd0aCk7dmFyIE49Ri5jb25jYXQoQiksSD1bNDhdO3JldHVybiBNKEgsTi5sZW5ndGgpLEg9SC5jb25jYXQoTiksaC5lbmNvZGUoSCxEKX19LDgzMDQ1KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTI1Mjkp''@;'; put 'put ''LGg9ZCgyMzQwMSksbz1kKDMxMzYpLEk9by5hc3NlcnQsZj1vLnBhcnNlQnl0ZXMsVD1kKDg3MjIyKSxBPWQoNTQ1MSk7ZnVuY3Rpb24gTShPKXtpZihJKCJlZDI1NTE5Ij09PU8sIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBNKSlyZXR1cm4g''@;'; put 'put ''bmV3IE0oTyk7dGhpcy5jdXJ2ZT1PPWhbT10uY3VydmUsdGhpcy5nPU8uZyx0aGlzLmcucHJlY29tcHV0ZShPLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPU8ucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbChPLm4uYml0TGVuZ3RoKCkv''@;'; put 'put ''OCksdGhpcy5oYXNoPVMuc2hhNTEyfXRlLmV4cG9ydHM9TSxNLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEQsRSl7RD1mKEQpO3ZhciBCPXRoaXMua2V5RnJvbVNlY3JldChFKSxGPXRoaXMuaGFzaEludChCLm1lc3NhZ2VQcmVmaXgoKSxEKSxOPXRoaXMuZy5tdWwoRiksSD10aGlzLmVuY29k''@;'; put 'put ''ZVBvaW50KE4pLHo9dGhpcy5oYXNoSW50KEgsQi5wdWJCeXRlcygpLEQpLm11bChCLnByaXYoKSksWj1GLmFkZCh6KS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpOLFM6WixSZW5jb2RlZDpIfSl9LE0ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihE''@;'; put 'put ''LEUsQil7aWYoRD1mKEQpLChFPXRoaXMubWFrZVNpZ25hdHVyZShFKSkuUygpLmd0ZShFLmVkZHNhLmN1cnZlLm4pfHxFLlMoKS5pc05lZygpKXJldHVybiExO3ZhciBGPXRoaXMua2V5RnJvbVB1YmxpYyhCKSxOPXRoaXMuaGFzaEludChFLlJlbmNvZGVkKCksRi5wdWJCeXRlcygpLEQpLEg9''@;'; put 'put ''dGhpcy5nLm11bChFLlMoKSk7cmV0dXJuIEUuUigpLmFkZChGLnB1YigpLm11bChOKSkuZXEoSCl9LE0ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIEQ9dGhpcy5oYXNoKCksRT0wO0U8YXJndW1lbnRzLmxlbmd0aDtFKyspRC51cGRhdGUoYXJndW1lbnRzW0VdKTtyZXR1''@;'; put 'put ''cm4gby5pbnRGcm9tTEUoRC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxNLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEQpe3JldHVybiBULmZyb21QdWJsaWModGhpcyxEKX0sTS5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihEKXtyZXR1cm4gVC5mcm9t''@;'; put 'put ''U2VjcmV0KHRoaXMsRCl9LE0ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBBP0Q6bmV3IEEodGhpcyxEKX0sTS5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oRCl7dmFyIEU9RC5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5j''@;'; put 'put ''b2RpbmdMZW5ndGgpO3JldHVybiBFW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PUQuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsRX0sTS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oRCl7dmFyIEU9KEQ9by5wYXJzZUJ5dGVzKEQpKS5sZW5ndGgtMSxCPUQuc2xpY2UoMCxFKS5jb25jYXQo''@;'; put 'put ''LTEyOSZEW0VdKSxGPSEhKDEyOCZEW0VdKSxOPW8uaW50RnJvbUxFKEIpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoTixGKX0sTS5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKEQpe3JldHVybiBELnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sTS5wcm90b3R5''@;'; put 'put ''cGUuZGVjb2RlSW50PWZ1bmN0aW9uKEQpe3JldHVybiBvLmludEZyb21MRShEKX0sTS5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihEKXtyZXR1cm4gRCBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDg3MjIyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzEzNiksaD1TLmFz''@;'; put 'put ''c2VydCxvPVMucGFyc2VCeXRlcyxJPVMuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gZihULEEpe3RoaXMuZWRkc2E9VCx0aGlzLl9zZWNyZXQ9byhBLnNlY3JldCksVC5pc1BvaW50KEEucHViKT90aGlzLl9wdWI9QS5wdWI6dGhpcy5fcHViQnl0ZXM9byhBLnB1Yil9Zi5mcm9tUHVibGljPWZ1''@;'; put 'put ''bmN0aW9uKEEsTSl7cmV0dXJuIE0gaW5zdGFuY2VvZiBmP006bmV3IGYoQSx7cHViOk19KX0sZi5mcm9tU2VjcmV0PWZ1bmN0aW9uKEEsTSl7cmV0dXJuIE0gaW5zdGFuY2VvZiBmP006bmV3IGYoQSx7c2VjcmV0Ok19KX0sZi5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3NlY3JldH0sSShmLCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLEkoZiwicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0''@;'; put 'put ''aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLEkoZiwicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBBPXRoaXMuZWRkc2EsTT10aGlzLmhhc2goKSxPPUEuZW5jb2RpbmdMZW5ndGgtMSxEPU0uc2xpY2UoMCxBLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gRFswXSY9MjQ4LERbT10mPTEy''@;'; put 'put ''NyxEW09dfD02NCxEfSksSShmLCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLEkoZiwiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSks''@;'; put 'put ''SShmLCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLGYucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oQSl7cmV0dXJuIGgodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRo''@;'; put 'put ''aXMuZWRkc2Euc2lnbihBLHRoaXMpfSxmLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oQSxNKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoQSxNLHRoaXMpfSxmLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oQSl7cmV0dXJuIGgodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1Ymxp''@;'; put 'put ''YyBvbmx5IiksUy5lbmNvZGUodGhpcy5zZWNyZXQoKSxBKX0sZi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEEpe3JldHVybiBTLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksQSl9LHRlLmV4cG9ydHM9Zn0sNTQ1MSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg4NzIzKSxoPWQo''@;'; put 'put ''MzEzNiksbz1oLmFzc2VydCxJPWguY2FjaGVkUHJvcGVydHksZj1oLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gVChBLE0pe3RoaXMuZWRkc2E9QSwib2JqZWN0IiE9dHlwZW9mIE0mJihNPWYoTSkpLEFycmF5LmlzQXJyYXkoTSkmJihvKE0ubGVuZ3RoPT09MipBLmVuY29kaW5nTGVuZ3RoLCJTaWdu''@;'; put 'put ''YXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLE09e1I6TS5zbGljZSgwLEEuZW5jb2RpbmdMZW5ndGgpLFM6TS5zbGljZShBLmVuY29kaW5nTGVuZ3RoKX0pLG8oTS5SJiZNLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEEuaXNQb2ludChNLlIpJiYodGhpcy5fUj1NLlIpLE0uUyBpbnN0''@;'; put 'put ''YW5jZW9mIFMmJih0aGlzLl9TPU0uUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShNLlIpP00uUjpNLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoTS5TKT9NLlM6TS5TZW5jb2RlZH1JKFQsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2Rl''@;'; put 'put ''SW50KHRoaXMuU2VuY29kZWQoKSl9KSxJKFQsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLEkoVCwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksSShULCJT''@;'; put 'put ''ZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksVC5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LFQucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGguZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSx0ZS5leHBvcnRzPVR9LDUxNDE2KHRlKXt0ZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFl''@;'; put 'put ''OWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4''@;'; put 'put ''NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1''@;'; put 'put ''NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxb''@;'; put 'put ''IjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1''@;'; put 'put ''NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2Ew''@;'; put 'put ''ZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVj''@;'; put 'put ''OGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5''@;'; put 'put ''YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFk''@;'; put 'put ''OTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhk''@;'; put 'put ''MGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIs''@;'; put 'put ''IjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWVi''@;'; put 'put ''ZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNh''@;'; put 'put ''ODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJi''@;'; put 'put ''ZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMy''@;'; put 'put ''ZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZm''@;'; put 'put ''YTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIw''@;'; put 'put ''M2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxb''@;'; put 'put ''IjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQx''@;'; put 'put ''OWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0''@;'; put 'put ''MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3''@;'; put 'put ''MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5''@;'; put 'put ''MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAz''@;'; put 'put ''MmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTll''@;'; put 'put ''ZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIs''@;'; put 'put ''IjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIy''@;'; put 'put ''MmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUw''@;'; put 'put ''MWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWVi''@;'; put 'put ''OTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJj''@;'; put 'put ''MDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2''@;'; put 'put ''ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4''@;'; put 'put ''Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxb''@;'; put 'put ''IjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYw''@;'; put 'put ''MjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBh''@;'; put 'put ''OTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5''@;'; put 'put ''N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNi''@;'; put 'put ''NTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2''@;'; put 'put ''ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4''@;'; put 'put ''ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2''@;'; put 'put ''MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1''@;'; put 'put ''YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJh''@;'; put 'put ''OTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIw''@;'; put 'put ''MGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2''@;'; put 'put ''ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5''@;'; put 'put ''OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNl''@;'; put 'put ''NTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsi''@;'; put 'put ''OTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5''@;'; put 'put ''YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2''@;'; put 'put ''MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEy''@;'; put 'put ''NWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEz''@;'; put 'put ''ZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4''@;'; put 'put ''Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBj''@;'; put 'put ''NWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdh''@;'; put 'put ''MTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNj''@;'; put 'put ''YWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5''@;'; put 'put ''OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxb''@;'; put 'put ''IjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1''@;'; put 'put ''OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1''@;'; put 'put ''ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgy''@;'; put 'put ''MTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVj''@;'; put 'put ''NTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5''@;'; put 'put ''N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0''@;'; put 'put ''MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwi''@;'; put 'put ''MmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIx''@;'; put 'put ''ZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBi''@;'; put 'put ''ZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5''@;'; put 'put ''YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2''@;'; put 'put ''Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRm''@;'; put 'put ''OGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5''@;'; put 'put ''NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsi''@;'; put 'put ''N2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdh''@;'; put 'put ''NzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0''@;'; put 'put ''NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2''@;'; put 'put ''NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWEx''@;'; put 'put ''MTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRl''@;'; put 'put ''NDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1''@;'; put 'put ''YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQx''@;'; put 'put ''MTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3''@;'; put 'put ''NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2''@;'; put 'put ''ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTcz''@;'; put 'put ''ZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4''@;'; put 'put ''MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQx''@;'; put 'put ''MzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRi''@;'; put 'put ''MmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2''@;'; put 'put ''NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQx''@;'; put 'put ''NjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2Zk''@;'; put 'put ''ODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2''@;'; put 'put ''N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2Ji''@;'; put 'put ''YTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5''@;'; put 'put ''NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2Vi''@;'; put 'put ''OGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4''@;'; put 'put ''NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNj''@;'; put 'put ''ZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0''@;'; put 'put ''MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1Nzgw''@;'; put 'put ''YzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQw''@;'; put 'put ''MDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2Ix''@;'; put 'put ''YjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3''@;'; put 'put ''YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMy''@;'; put 'put ''ZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFl''@;'; put 'put ''YTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2Iy''@;'; put 'put ''YjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMy''@;'; put 'put ''YTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4''@;'; put 'put ''MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWEx''@;'; put 'put ''YTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1''@;'; put 'put ''OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYx''@;'; put 'put ''NDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2''@;'; put 'put ''MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2''@;'; put 'put ''NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEy''@;'; put 'put ''ZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0''@;'; put 'put ''MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNh''@;'; put 'put ''YTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdh''@;'; put 'put ''NjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNh''@;'; put 'put ''ZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5''@;'; put 'put ''ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2Ii''@;'; put 'put ''LCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5Zjdh''@;'; put 'put ''N2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2Ri''@;'; put 'put ''NzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFj''@;'; put 'put ''ZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0''@;'; put 'put ''NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5''@;'; put 'put ''OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3''@;'; put 'put ''NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0s''@;'; put 'put ''WyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3''@;'; put 'put ''MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlk''@;'; put 'put ''NDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4''@;'; put 'put ''ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFi''@;'; put 'put ''YjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4''@;'; put 'put ''OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5''@;'; put 'put ''NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2Iiwi''@;'; put 'put ''MzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUz''@;'; put 'put ''Y2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5''@;'; put 'put ''YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNj''@;'; put 'put ''NTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcw''@;'; put 'put ''MzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2''@;'; put 'put ''ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlk''@;'; put 'put ''YTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0s''@;'; put 'put ''WyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZj''@;'; put 'put ''N2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNj''@;'; put 'put ''ZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNl''@;'; put 'put ''YmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUx''@;'; put 'put ''NzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFl''@;'; put 'put ''MWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0''@;'; put 'put ''Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3Iiwi''@;'; put 'put ''ZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQz''@;'; put 'put ''MzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEw''@;'; put 'put ''ODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4''@;'; put 'put ''YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNm''@;'; put 'put ''Zjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYx''@;'; put 'put ''OTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5''@;'; put 'put ''MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxb''@;'; put 'put ''ImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2''@;'; put 'put ''NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZk''@;'; put 'put ''MzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYz''@;'; put 'put ''YTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3''@;'; put 'put ''MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUw''@;'; put 'put ''NzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3''@;'; put 'put ''YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2Iiwi''@;'; put 'put ''ZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlh''@;'; put 'put ''ODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4''@;'; put 'put ''ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSwzMTM2KHRlLGosZCl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBTPWosaD1kKDg4NzIzKSxvPWQoMzkyMTApLEk9ZCgyMTgzMik7Uy5hc3NlcnQ9byxTLnRvQXJyYXk9SS50b0FycmF5LFMuemVybzI9SS56ZXJvMixTLnRvSGV4PUkudG9IZXgsUy5lbmNvZGU9SS5lbmNvZGUsUy5nZXROQUY9ZnVuY3Rpb24gZihELEUsQil7dmFyIE4s''@;'; put 'put ''Rj1uZXcgQXJyYXkoTWF0aC5tYXgoRC5iaXRMZW5ndGgoKSxCKSsxKTtmb3IoTj0wO048Ri5sZW5ndGg7Tis9MSlGW05dPTA7dmFyIEg9MTw8RSsxLHo9RC5jbG9uZSgpO2ZvcihOPTA7TjxGLmxlbmd0aDtOKyspe3ZhciBaLFU9ei5hbmRsbihILTEpO3ouaXNPZGQoKT96LmlzdWJuKFo9VT4o''@;'; put 'put ''SD4+MSktMT8oSD4+MSktVTpVKTpaPTAsRltOXT1aLHouaXVzaHJuKDEpfXJldHVybiBGfSxTLmdldEpTRj1mdW5jdGlvbiBUKEQsRSl7dmFyIEI9W1tdLFtdXTtEPUQuY2xvbmUoKSxFPUUuY2xvbmUoKTtmb3IodmFyIEgsRj0wLE49MDtELmNtcG4oLUYpPjB8fEUuY21wbigtTik+MDspe3Zh''@;'; put 'put ''ciBVLEssej1ELmFuZGxuKDMpK0YmMyxaPUUuYW5kbG4oMykrTiYzOzM9PT16JiYoej0tMSksMz09PVomJihaPS0xKSxVPTEmej8zIT0oSD1ELmFuZGxuKDcpK0YmNykmJjUhPT1IfHwyIT09Wj96Oi16OjAsQlswXS5wdXNoKFUpLEs9MSZaPzMhPShIPUUuYW5kbG4oNykrTiY3KSYmNSE9PUh8''@;'; put 'put ''fDIhPT16P1o6LVo6MCxCWzFdLnB1c2goSyksMipGPT09VSsxJiYoRj0xLUYpLDIqTj09PUsrMSYmKE49MS1OKSxELml1c2hybigxKSxFLml1c2hybigxKX1yZXR1cm4gQn0sUy5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBBKEQsRSxCKXt2YXIgRj0iXyIrRTtELnByb3RvdHlwZVtFXT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW0ZdP3RoaXNbRl06dGhpc1tGXT1CLmNhbGwodGhpcyl9fSxTLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gTShEKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEQ/Uy50b0FycmF5KEQsImhleCIpOkR9LFMuaW50RnJvbUxFPWZ1bmN0aW9uIE8oRCl7cmV0''@;'; put 'put ''dXJuIG5ldyBoKEQsImhleCIsImxlIil9fSw4ODcyMyh0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKFIscyl7aWYoIVIpdGhyb3cgbmV3IEVycm9yKHN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gSShSLHMpe1Iuc3VwZXJfPXM7dmFyIHU9ZnVu''@;'; put 'put ''Y3Rpb24oKXt9O3UucHJvdG90eXBlPXMucHJvdG90eXBlLFIucHJvdG90eXBlPW5ldyB1LFIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVJ9ZnVuY3Rpb24gZihSLHMsdSl7aWYoZi5pc0JOKFIpKXJldHVybiBSO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0''@;'; put 'put ''aGlzLnJlZD1udWxsLG51bGwhPT1SJiYoKCJsZSI9PT1zfHwiYmUiPT09cykmJih1PXMscz0xMCksdGhpcy5faW5pdChSfHwwLHN8fDEwLHV8fCJiZSIpKX12YXIgVDsib2JqZWN0Ij09dHlwZW9mIFM/Uy5leHBvcnRzPWY6aC5CTj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDc5MzY4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEEoUixzKXt2YXIgdT1SLmNoYXJDb2RlQXQocyk7cmV0dXJuIHU+PTY1JiZ1PD03MD91LTU1OnU+PTk3JiZ1PD0xMDI/dS04Nzp1LTQ4JjE1''@;'; put 'put ''fWZ1bmN0aW9uIE0oUixzLHUpe3ZhciB2PUEoUix1KTtyZXR1cm4gdS0xPj1zJiYodnw9QShSLHUtMSk8PDQpLHZ9ZnVuY3Rpb24gTyhSLHMsdSx2KXtmb3IodmFyIHA9MCxfPU1hdGgubWluKFIubGVuZ3RoLHUpLGs9cztrPF87aysrKXt2YXIgTD1SLmNoYXJDb2RlQXQoayktNDg7cCo9dixw''@;'; put 'put ''Kz1MPj00OT9MLTQ5KzEwOkw+PTE3P0wtMTcrMTA6TH1yZXR1cm4gcH1mLmlzQk49ZnVuY3Rpb24ocyl7cmV0dXJuIHMgaW5zdGFuY2VvZiBmfHxudWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmNvbnN0cnVjdG9yLndvcmRTaXplPT09Zi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShz''@;'; put 'put ''LndvcmRzKX0sZi5tYXg9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk+MD9zOnV9LGYubWluPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHMuY21wKHUpPDA/czp1fSxmLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihzLHUsdil7aWYoIm51bWJlciI9PXR5cGVvZiBzKXJldHVybiB0aGlzLl9p''@;'; put 'put ''bml0TnVtYmVyKHMsdSx2KTtpZigib2JqZWN0Ij09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShzLHUsdik7ImhleCI9PT11JiYodT0xNiksbyh1PT09KDB8dSkmJnU+PTImJnU8PTM2KTt2YXIgcD0wOyItIj09PShzPXMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBd''@;'; put 'put ''JiYocCsrLHRoaXMubmVnYXRpdmU9MSkscDxzLmxlbmd0aCYmKDE2PT09dT90aGlzLl9wYXJzZUhleChzLHAsdik6KHRoaXMuX3BhcnNlQmFzZShzLHUscCksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx1LHYpKSl9LGYucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1''@;'; put 'put ''bmN0aW9uKHMsdSx2KXtzPDAmJih0aGlzLm5lZ2F0aXZlPTEscz0tcyksczw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmc10sdGhpcy5sZW5ndGg9MSk6czw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVu''@;'; put 'put ''Z3RoPTIpOihvKHM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcyxzLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT12JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksdSx2KX0sZi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5j''@;'; put 'put ''dGlvbihzLHUsdil7aWYobygibnVtYmVyIj09dHlwZW9mIHMubGVuZ3RoKSxzLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChzLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7''@;'; put 'put ''Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT0wO3ZhciBfLGssTD0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTEsXz0wO3A+PTA7cC09Myl0aGlzLndvcmRzW19dfD0oaz1zW3BdfHNbcC0xXTw8OHxzW3AtMl08PDE2KTw8TCY2NzEwODg2Myx0aGlzLndv''@;'; put 'put ''cmRzW18rMV09az4+PjI2LUwmNjcxMDg4NjMsKEwrPTI0KT49MjYmJihMLT0yNixfKyspO2Vsc2UgaWYoImxlIj09PXYpZm9yKHA9MCxfPTA7cDxzLmxlbmd0aDtwKz0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twKzFdPDw4fHNbcCsyXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNb''@;'; put 'put ''XysxXT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHMsdSx2KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHMubGVuZ3RoLXUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5''@;'; put 'put ''KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIEwsXz0wLGs9MDtpZigiYmUiPT09dilmb3IocD1zLmxlbmd0aC0xO3A+PXU7cC09MilMPU0ocyx1LHApPDxfLHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49MTg/KF8tPTE4''@;'; put 'put ''LHRoaXMud29yZHNbays9MV18PUw+Pj4yNik6Xys9ODtlbHNlIGZvcihwPShzLmxlbmd0aC11KSUyPT0wP3UrMTp1O3A8cy5sZW5ndGg7cCs9MilMPU0ocyx1LHApPDxfLHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49MTg/KF8tPTE4LHRoaXMud29yZHNbays9MV18PUw+Pj4yNik6Xys9''@;'; put 'put ''ODt0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocyx1LHYpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBwPTAsXz0xO188PTY3MTA4ODYzO18qPXUpcCsrO3AtLSxfPV8vdXwwO2Zvcih2YXIgaz1zLmxlbmd0aC12LEw9ayVwLHk9TWF0''@;'; put 'put ''aC5taW4oayxrLUwpK3YsbD0wLGI9djtiPHk7Yis9cClsPU8ocyxiLGIrcCx1KSx0aGlzLmltdWxuKF8pLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpO2lmKDAhPT1MKXt2YXIgcT0xO2ZvcihsPU8ocyxiLHMubGVuZ3RoLHUpLGI9MDti''@;'; put 'put ''PEw7YisrKXEqPXU7dGhpcy5pbXVsbihxKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKX10aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocyl7cy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIg''@;'; put 'put ''dT0wO3U8dGhpcy5sZW5ndGg7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD10aGlzLmxlbmd0aCxzLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscy5yZWQ9dGhpcy5yZWR9LGYucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29weShzKSxzfSxmLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHMpe2Zvcig7dGhpcy5sZW5ndGg8czspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxmLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGYucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBEPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJd''@;'; put 'put ''LEU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sQj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFl''@;'; put 'put ''NywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0''@;'; put 'put ''M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBOKFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZTt2YXIgdj1SLmxlbmd0aCtzLmxlbmd0aHwwO3UubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfFIu''@;'; put 'put ''d29yZHNbMF0sXz0wfHMud29yZHNbMF0saz1wKl8seT1rLzY3MTA4ODY0fDA7dS53b3Jkc1swXT02NzEwODg2MyZrO2Zvcih2YXIgbD0xO2w8djtsKyspe2Zvcih2YXIgYj15Pj4+MjYscT02NzEwODg2MyZ5LEc9TWF0aC5taW4obCxzLmxlbmd0aC0xKSxRPU1hdGgubWF4KDAsbC1SLmxlbmd0''@;'; put 'put ''aCsxKTtRPD1HO1ErKyliKz0oaz0ocD0wfFIud29yZHNbbC1RfDBdKSooXz0wfHMud29yZHNbUV0pK3EpLzY3MTA4ODY0fDAscT02NzEwODg2MyZrO3Uud29yZHNbbF09MHxxLHk9MHxifXJldHVybiAwIT09eT91LndvcmRzW2xdPTB8eTp1Lmxlbmd0aC0tLHUuc3RyaXAoKX1mLnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZz1mdW5jdGlvbihzLHUpe3ZhciB2O2lmKHU9MHx1fHwxLDE2PT09KHM9c3x8MTApfHwiaGV4Ij09PXMpe3Y9IiI7Zm9yKHZhciBwPTAsXz0wLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl7dmFyIEw9dGhpcy53b3Jkc1trXSx5PSgxNjc3NzIxNSYoTDw8cHxfKSkudG9TdHJpbmco''@;'; put 'put ''MTYpO189TD4+PjI0LXAmMTY3NzcyMTUsKHArPTIpPj0yNiYmKHAtPTI2LGstLSksdj0wIT09X3x8ayE9PXRoaXMubGVuZ3RoLTE/RFs2LXkubGVuZ3RoXSt5K3Y6eSt2fWZvcigwIT09XyYmKHY9Xy50b1N0cmluZygxNikrdik7di5sZW5ndGgldSE9MDspdj0iMCIrdjtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJih2PSItIit2KSx2fWlmKHM9PT0oMHxzKSYmcz49MiYmczw9MzYpe3ZhciBsPUVbc10sYj1CW3NdO3Y9IiI7dmFyIHE9dGhpcy5jbG9uZSgpO2ZvcihxLm5lZ2F0aXZlPTA7IXEuaXNaZXJvKCk7KXt2YXIgRz1xLm1vZG4oYikudG9TdHJpbmcocyk7dj0ocT1xLmlkaXZu''@;'; put 'put ''KGIpKS5pc1plcm8oKT9HK3Y6RFtsLUcubGVuZ3RoXStHK3Z9Zm9yKHRoaXMuaXNaZXJvKCkmJih2PSIwIit2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIp''@;'; put 'put ''fSxmLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBzPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9zKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2''@;'; put 'put ''NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1zOnN9LGYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sZi5w''@;'; put 'put ''cm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gbyh0eXBlb2YgVDwidSIpLHRoaXMudG9BcnJheUxpa2UoVCxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscyx1KX0sZi5wcm90b3R5cGUudG9B''@;'; put 'put ''cnJheUxpa2U9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPXRoaXMuYnl0ZUxlbmd0aCgpLF89dnx8TWF0aC5tYXgoMSxwKTtvKHA8PV8sImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxvKF8+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgp''@;'; put 'put ''O3ZhciB5LGwsaz0ibGUiPT09dSxMPW5ldyBzKF8pLGI9dGhpcy5jbG9uZSgpO2lmKGspe2ZvcihsPTA7IWIuaXNaZXJvKCk7bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbbF09eTtmb3IoO2w8XztsKyspTFtsXT0wfWVsc2V7Zm9yKGw9MDtsPF8tcDtsKyspTFtsXT0wO2Zvcihs''@;'; put 'put ''PTA7IWIuaXNaZXJvKCk7bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbXy1sLTFdPXl9cmV0dXJuIEx9LGYucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihzKXtyZXR1cm4gMzItTWF0aC5jbHozMihzKX06ZnVuY3Rpb24ocyl7dmFyIHU9cyx2PTA7cmV0''@;'; put 'put ''dXJuIHU+PTQwOTYmJih2Kz0xMyx1Pj4+PTEzKSx1Pj02NCYmKHYrPTcsdT4+Pj03KSx1Pj04JiYodis9NCx1Pj4+PTQpLHU+PTImJih2Kz0yLHU+Pj49Miksdit1fSxmLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocyl7aWYoMD09PXMpcmV0dXJuIDI2O3ZhciB1PXMsdj0wO3JldHVy''@;'; put 'put ''biEoODE5MSZ1KSYmKHYrPTEzLHU+Pj49MTMpLCEoMTI3JnUpJiYodis9Nyx1Pj4+PTcpLCEoMTUmdSkmJih2Kz00LHU+Pj49NCksISgzJnUpJiYodis9Mix1Pj4+PTIpLCEoMSZ1KSYmdisrLHZ9LGYucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB1PXRoaXMuX2NvdW50Qml0''@;'; put 'put ''cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3V9LGYucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHM9MCx1PTA7dTx0aGlzLmxlbmd0aDt1Kyspe3ZhciB2PXRoaXMuX3pl''@;'; put 'put ''cm9CaXRzKHRoaXMud29yZHNbdV0pO2lmKHMrPXYsMjYhPT12KWJyZWFrfXJldHVybiBzfSxmLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxmLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocyl7cmV0dXJuIDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxmLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy50ZXN0bihzLTEpP3RoaXMubm90bihzKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sZi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGYucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRp''@;'; put 'put ''dmVePTEpLHRoaXN9LGYucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1XXxzLndvcmRzW3VdO3Jl''@;'; put 'put ''dHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlvcj1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihzKX0sZi5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUo''@;'; put 'put ''KS5pb3Iocyk6cy5jbG9uZSgpLmlvcih0aGlzKX0sZi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihzKTpzLmNsb25lKCkuaXVvcih0aGlzKX0sZi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocyl7dmFyIHU7''@;'; put 'put ''dT10aGlzLmxlbmd0aD5zLmxlbmd0aD9zOnRoaXM7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT10aGlzLndvcmRzW3ZdJnMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPXUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihz''@;'; put 'put ''KXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocyl9LGYucHJvdG90eXBlLmFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocyk6cy5jbG9uZSgpLmlhbmQodGhpcyl9LGYucHJvdG90eXBl''@;'; put 'put ''LnVhbmQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChzKTpzLmNsb25lKCkuaXVhbmQodGhpcyl9LGYucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHMpe3ZhciB1LHY7dGhpcy5sZW5ndGg+cy5sZW5ndGg/KHU9dGhpcyx2PXMpOih1''@;'; put 'put ''PXMsdj10aGlzKTtmb3IodmFyIHA9MDtwPHYubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXUud29yZHNbcF1edi53b3Jkc1twXTtpZih0aGlzIT09dSlmb3IoO3A8dS5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jkc1twXTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5z''@;'; put 'put ''dHJpcCgpfSxmLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihzKX0sZi5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihz''@;'; put 'put ''KTpzLmNsb25lKCkuaXhvcih0aGlzKX0sZi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHMpOnMuY2xvbmUoKS5pdXhvcih0aGlzKX0sZi5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocyl7bygibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIHMmJnM+PTApO3ZhciB1PTB8TWF0aC5jZWlsKHMvMjYpLHY9cyUyNjt0aGlzLl9leHBhbmQodSksdj4wJiZ1LS07Zm9yKHZhciBwPTA7cDx1O3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJn50aGlzLndvcmRzW3BdO3JldHVybiB2PjAmJih0aGlzLndvcmRzW3BdPX50aGlz''@;'; put 'put ''LndvcmRzW3BdJjY3MTA4ODYzPj4yNi12KSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihzKX0sZi5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihzLHUpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgdj1z''@;'; put 'put ''LzI2fDAscD1zJTI2O3JldHVybiB0aGlzLl9leHBhbmQodisxKSx0aGlzLndvcmRzW3ZdPXU/dGhpcy53b3Jkc1t2XXwxPDxwOnRoaXMud29yZHNbdl0mfigxPDxwKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocyl7dmFyIHUsdixwO2lmKDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlJiYwPT09cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmUpcmV0dXJuIHMubmVnYXRpdmU9MCx1PXRoaXMuaXN1YihzKSxz''@;'; put 'put ''Lm5lZ2F0aXZlPTEsdS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odj10aGlzLHA9cyk6KHY9cyxwPXRoaXMpO2Zvcih2YXIgXz0wLGs9MDtrPHAubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPTY3MTA4ODYzJih1PSgwfHYud29yZHNba10pKygwfHAud29yZHNba10pK18pLF89''@;'; put 'put ''dT4+PjI2O2Zvcig7MCE9PV8mJms8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrXyksXz11Pj4+MjY7aWYodGhpcy5sZW5ndGg9di5sZW5ndGgsMCE9PV8pdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Xyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYo''@;'; put 'put ''diE9PXRoaXMpZm9yKDtrPHYubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPXYud29yZHNba107cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzKXt2YXIgdTtyZXR1cm4gMCE9PXMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhzLm5lZ2F0aXZlPTAsdT10aGlzLnN1''@;'; put 'put ''YihzKSxzLm5lZ2F0aXZlXj0xLHUpOjA9PT1zLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHU9cy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHUpOnRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHMpOnMuY2xvbmUoKS5pYWRkKHRo''@;'; put 'put ''aXMpfSxmLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHMpe2lmKDAhPT1zLm5lZ2F0aXZlKXtzLm5lZ2F0aXZlPTA7dmFyIHU9dGhpcy5pYWRkKHMpO3JldHVybiBzLm5lZ2F0aXZlPTEsdS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMuaWFkZChzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcCxfLHY9dGhpcy5jbXAocyk7aWYoMD09PXYpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3Y+MD8ocD10aGlzLF89cyk6KHA9cyxfPXRoaXMpO2Zv''@;'; put 'put ''cih2YXIgaz0wLEw9MDtMPF8ubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pLSgwfF8ud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7Zm9yKDswIT09ayYmTDxwLmxlbmd0aDtMKyspaz0odT0oMHxwLndvcmRzW0xdKStrKT4+MjYsdGhpcy53b3Jkc1tMXT02''@;'; put 'put ''NzEwODg2MyZ1O2lmKDA9PT1rJiZMPHAubGVuZ3RoJiZwIT09dGhpcylmb3IoO0w8cC5sZW5ndGg7TCsrKXRoaXMud29yZHNbTF09cC53b3Jkc1tMXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsTCkscCE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sZi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihzKX07dmFyIEg9ZnVuY3Rpb24ocyx1LHYpe3ZhciB5LGwsYixwPXMud29yZHMsXz11LndvcmRzLGs9di53b3JkcyxMPTAscT0wfHBbMF0sRz04MTkxJnEsUT1xPj4+MTMscGU9MHxwWzFd''@;'; put 'put ''LFBlPTgxOTEmcGUsWmU9cGU+Pj4xMyxxZT0wfHBbMl0sdmU9ODE5MSZxZSx1ZT1xZT4+PjEzLHplPTB8cFszXSxPZT04MTkxJnplLENlPXplPj4+MTMsa2U9MHxwWzRdLHhlPTgxOTEma2UsTWU9a2U+Pj4xMyxJZT0wfHBbNV0sYmU9ODE5MSZJZSx3ZT1JZT4+PjEzLHB0PTB8cFs2XSxLZT04''@;'; put 'put ''MTkxJnB0LFllPXB0Pj4+MTMscXQ9MHxwWzddLGh0PTgxOTEmcXQsdnQ9cXQ+Pj4xMyxZdD0wfHBbOF0sdHQ9ODE5MSZZdCxVZT1ZdD4+PjEzLCRlPTB8cFs5XSxMZT04MTkxJiRlLG50PSRlPj4+MTMscm49MHxfWzBdLHh0PTgxOTEmcm4sVHQ9cm4+Pj4xMyx5bj0wfF9bMV0sWHQ9ODE5MSZ5''@;'; put 'put ''bixRdD15bj4+PjEzLFhyPTB8X1syXSxzbj04MTkxJlhyLGl0PVhyPj4+MTMsQ3I9MHxfWzNdLEx0PTgxOTEmQ3Isd3Q9Q3I+Pj4xMyxSbj0wfF9bNF0sUWU9ODE5MSZSbixQdD1Sbj4+PjEzLFFyPTB8X1s1XSxOZT04MTkxJlFyLHl0PVFyPj4+MTMscnI9MHxfWzZdLGF0PTgxOTEmcnIsX3Q9''@;'; put 'put ''cnI+Pj4xMyx3bj0wfF9bN10sJHQ9ODE5MSZ3bixIdD13bj4+PjEzLHNpPTB8X1s4XSxubj04MTkxJnNpLGxuPXNpPj4+MTMsa2k9MHxfWzldLGFuPTgxOTEma2ksR3Q9a2k+Pj4xMzt2Lm5lZ2F0aXZlPXMubmVnYXRpdmVedS5uZWdhdGl2ZSx2Lmxlbmd0aD0xOTt2YXIgZWE9KEwrKHk9TWF0''@;'; put 'put ''aC5pbXVsKEcseHQpKXwwKSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKEcsVHQpKStNYXRoLmltdWwoUSx4dCl8MCkpPDwxMyl8MDtMPSgoYj1NYXRoLmltdWwoUSxUdCkpKyhsPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02NzEwODg2Myx5PU1hdGguaW11bChQZSx4dCksbD0obD1NYXRoLmlt''@;'; put 'put ''dWwoUGUsVHQpKStNYXRoLmltdWwoWmUseHQpfDAsYj1NYXRoLmltdWwoWmUsVHQpO3ZhciBtaT0oTCsoeT15K01hdGguaW11bChHLFh0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxRdCl8MCkrTWF0aC5pbXVsKFEsWHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwo''@;'; put 'put ''USxRdCl8MCkrKGw+Pj4xMyl8MCkrKG1pPj4+MjYpfDAsbWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHZlLHh0KSxsPShsPU1hdGguaW11bCh2ZSxUdCkpK01hdGguaW11bCh1ZSx4dCl8MCxiPU1hdGguaW11bCh1ZSxUdCkseT15K01hdGguaW11bChQZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVs''@;'; put 'put ''KFBlLFF0KXwwKStNYXRoLmltdWwoWmUsWHQpfDAsYj1iK01hdGguaW11bChaZSxRdCl8MDt2YXIgZnI9KEwrKHk9eStNYXRoLmltdWwoRyxzbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsaXQpfDApK01hdGguaW11bChRLHNuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5p''@;'; put 'put ''bXVsKFEsaXQpfDApKyhsPj4+MTMpfDApKyhmcj4+PjI2KXwwLGZyJj02NzEwODg2Myx5PU1hdGguaW11bChPZSx4dCksbD0obD1NYXRoLmltdWwoT2UsVHQpKStNYXRoLmltdWwoQ2UseHQpfDAsYj1NYXRoLmltdWwoQ2UsVHQpLHk9eStNYXRoLmltdWwodmUsWHQpfDAsbD0obD1sK01hdGgu''@;'; put 'put ''aW11bCh2ZSxRdCl8MCkrTWF0aC5pbXVsKHVlLFh0KXwwLGI9YitNYXRoLmltdWwodWUsUXQpfDAseT15K01hdGguaW11bChQZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKFBlLGl0KXwwKStNYXRoLmltdWwoWmUsc24pfDAsYj1iK01hdGguaW11bChaZSxpdCl8MDt2YXIgJGk9KEwrKHk9eStN''@;'; put 'put ''YXRoLmltdWwoRyxMdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsd3QpfDApK01hdGguaW11bChRLEx0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsd3QpfDApKyhsPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2Myx5PU1hdGguaW11bCh4ZSx4dCks''@;'; put 'put ''bD0obD1NYXRoLmltdWwoeGUsVHQpKStNYXRoLmltdWwoTWUseHQpfDAsYj1NYXRoLmltdWwoTWUsVHQpLHk9eStNYXRoLmltdWwoT2UsWHQpfDAsbD0obD1sK01hdGguaW11bChPZSxRdCl8MCkrTWF0aC5pbXVsKENlLFh0KXwwLGI9YitNYXRoLmltdWwoQ2UsUXQpfDAseT15K01hdGguaW11''@;'; put 'put ''bCh2ZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHZlLGl0KXwwKStNYXRoLmltdWwodWUsc24pfDAsYj1iK01hdGguaW11bCh1ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKFBlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsd3QpfDApK01hdGguaW11bChaZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFpl''@;'; put 'put ''LHd0KXwwO3ZhciBLaT0oTCsoeT15K01hdGguaW11bChHLFFlKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxQdCl8MCkrTWF0aC5pbXVsKFEsUWUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxQdCl8MCkrKGw+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4''@;'; put 'put ''ODYzLHk9TWF0aC5pbXVsKGJlLHh0KSxsPShsPU1hdGguaW11bChiZSxUdCkpK01hdGguaW11bCh3ZSx4dCl8MCxiPU1hdGguaW11bCh3ZSxUdCkseT15K01hdGguaW11bCh4ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLFF0KXwwKStNYXRoLmltdWwoTWUsWHQpfDAsYj1iK01hdGguaW11''@;'; put 'put ''bChNZSxRdCl8MCx5PXkrTWF0aC5pbXVsKE9lLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsaXQpfDApK01hdGguaW11bChDZSxzbil8MCxiPWIrTWF0aC5pbXVsKENlLGl0KXwwLHk9eStNYXRoLmltdWwodmUsTHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSx3dCl8MCkrTWF0aC5pbXVsKHVl''@;'; put 'put ''LEx0KXwwLGI9YitNYXRoLmltdWwodWUsd3QpfDAseT15K01hdGguaW11bChQZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLFB0KXwwKStNYXRoLmltdWwoWmUsUWUpfDAsYj1iK01hdGguaW11bChaZSxQdCl8MDt2YXIgVmk9KEwrKHk9eStNYXRoLmltdWwoRyxOZSl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihsPShsPWwrTWF0aC5pbXVsKEcseXQpfDApK01hdGguaW11bChRLE5lKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEseXQpfDApKyhsPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2Myx5PU1hdGguaW11bChLZSx4dCksbD0obD1NYXRoLmltdWwoS2UsVHQpKStNYXRo''@;'; put 'put ''LmltdWwoWWUseHQpfDAsYj1NYXRoLmltdWwoWWUsVHQpLHk9eStNYXRoLmltdWwoYmUsWHQpfDAsbD0obD1sK01hdGguaW11bChiZSxRdCl8MCkrTWF0aC5pbXVsKHdlLFh0KXwwLGI9YitNYXRoLmltdWwod2UsUXQpfDAseT15K01hdGguaW11bCh4ZSxzbil8MCxsPShsPWwrTWF0aC5pbXVs''@;'; put 'put ''KHhlLGl0KXwwKStNYXRoLmltdWwoTWUsc24pfDAsYj1iK01hdGguaW11bChNZSxpdCl8MCx5PXkrTWF0aC5pbXVsKE9lLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChDZSxMdCl8MCxiPWIrTWF0aC5pbXVsKENlLHd0KXwwLHk9eStNYXRoLmltdWwodmUsUWUp''@;'; put 'put ''fDAsbD0obD1sK01hdGguaW11bCh2ZSxQdCl8MCkrTWF0aC5pbXVsKHVlLFFlKXwwLGI9YitNYXRoLmltdWwodWUsUHQpfDAseT15K01hdGguaW11bChQZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLHl0KXwwKStNYXRoLmltdWwoWmUsTmUpfDAsYj1iK01hdGguaW11bChaZSx5dCl8MDt2''@;'; put 'put ''YXIgcXI9KEwrKHk9eStNYXRoLmltdWwoRyxhdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsX3QpfDApK01hdGguaW11bChRLGF0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsX3QpfDApKyhsPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx5PU1h''@;'; put 'put ''dGguaW11bChodCx4dCksbD0obD1NYXRoLmltdWwoaHQsVHQpKStNYXRoLmltdWwodnQseHQpfDAsYj1NYXRoLmltdWwodnQsVHQpLHk9eStNYXRoLmltdWwoS2UsWHQpfDAsbD0obD1sK01hdGguaW11bChLZSxRdCl8MCkrTWF0aC5pbXVsKFllLFh0KXwwLGI9YitNYXRoLmltdWwoWWUsUXQp''@;'; put 'put ''fDAseT15K01hdGguaW11bChiZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGl0KXwwKStNYXRoLmltdWwod2Usc24pfDAsYj1iK01hdGguaW11bCh3ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKHhlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChNZSxMdCl8MCxi''@;'; put 'put ''PWIrTWF0aC5pbXVsKE1lLHd0KXwwLHk9eStNYXRoLmltdWwoT2UsUWUpfDAsbD0obD1sK01hdGguaW11bChPZSxQdCl8MCkrTWF0aC5pbXVsKENlLFFlKXwwLGI9YitNYXRoLmltdWwoQ2UsUHQpfDAseT15K01hdGguaW11bCh2ZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHl0KXwwKStN''@;'; put 'put ''YXRoLmltdWwodWUsTmUpfDAsYj1iK01hdGguaW11bCh1ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKFBlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsX3QpfDApK01hdGguaW11bChaZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFplLF90KXwwO3ZhciB1YT0oTCsoeT15K01hdGguaW11bChHLCR0KXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxIdCl8MCkrTWF0aC5pbXVsKFEsJHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxIdCl8MCkrKGw+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHR0LHh0KSxsPShsPU1hdGguaW11bCh0''@;'; put 'put ''dCxUdCkpK01hdGguaW11bChVZSx4dCl8MCxiPU1hdGguaW11bChVZSxUdCkseT15K01hdGguaW11bChodCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LFF0KXwwKStNYXRoLmltdWwodnQsWHQpfDAsYj1iK01hdGguaW11bCh2dCxRdCl8MCx5PXkrTWF0aC5pbXVsKEtlLHNuKXwwLGw9KGw9''@;'; put 'put ''bCtNYXRoLmltdWwoS2UsaXQpfDApK01hdGguaW11bChZZSxzbil8MCxiPWIrTWF0aC5pbXVsKFllLGl0KXwwLHk9eStNYXRoLmltdWwoYmUsTHQpfDAsbD0obD1sK01hdGguaW11bChiZSx3dCl8MCkrTWF0aC5pbXVsKHdlLEx0KXwwLGI9YitNYXRoLmltdWwod2Usd3QpfDAseT15K01hdGgu''@;'; put 'put ''aW11bCh4ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLFB0KXwwKStNYXRoLmltdWwoTWUsUWUpfDAsYj1iK01hdGguaW11bChNZSxQdCl8MCx5PXkrTWF0aC5pbXVsKE9lLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UseXQpfDApK01hdGguaW11bChDZSxOZSl8MCxiPWIrTWF0aC5pbXVs''@;'; put 'put ''KENlLHl0KXwwLHk9eStNYXRoLmltdWwodmUsYXQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxfdCl8MCkrTWF0aC5pbXVsKHVlLGF0KXwwLGI9YitNYXRoLmltdWwodWUsX3QpfDAseT15K01hdGguaW11bChQZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLEh0KXwwKStNYXRoLmltdWwoWmUs''@;'; put 'put ''JHQpfDAsYj1iK01hdGguaW11bChaZSxIdCl8MDt2YXIgRmk9KEwrKHk9eStNYXRoLmltdWwoRyxubil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsbG4pfDApK01hdGguaW11bChRLG5uKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsbG4pfDApKyhsPj4+MTMpfDAp''@;'; put 'put ''KyhGaT4+PjI2KXwwLEZpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSx4dCksbD0obD1NYXRoLmltdWwoTGUsVHQpKStNYXRoLmltdWwobnQseHQpfDAsYj1NYXRoLmltdWwobnQsVHQpLHk9eStNYXRoLmltdWwodHQsWHQpfDAsbD0obD1sK01hdGguaW11bCh0dCxRdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFVlLFh0KXwwLGI9YitNYXRoLmltdWwoVWUsUXQpfDAseT15K01hdGguaW11bChodCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGh0LGl0KXwwKStNYXRoLmltdWwodnQsc24pfDAsYj1iK01hdGguaW11bCh2dCxpdCl8MCx5PXkrTWF0aC5pbXVsKEtlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''S2Usd3QpfDApK01hdGguaW11bChZZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFllLHd0KXwwLHk9eStNYXRoLmltdWwoYmUsUWUpfDAsbD0obD1sK01hdGguaW11bChiZSxQdCl8MCkrTWF0aC5pbXVsKHdlLFFlKXwwLGI9YitNYXRoLmltdWwod2UsUHQpfDAseT15K01hdGguaW11bCh4ZSxOZSl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKHhlLHl0KXwwKStNYXRoLmltdWwoTWUsTmUpfDAsYj1iK01hdGguaW11bChNZSx5dCl8MCx5PXkrTWF0aC5pbXVsKE9lLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsX3QpfDApK01hdGguaW11bChDZSxhdCl8MCxiPWIrTWF0aC5pbXVsKENlLF90KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwodmUsJHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxIdCl8MCkrTWF0aC5pbXVsKHVlLCR0KXwwLGI9YitNYXRoLmltdWwodWUsSHQpfDAseT15K01hdGguaW11bChQZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKFBlLGxuKXwwKStNYXRoLmltdWwoWmUsbm4pfDAsYj1iK01h''@;'; put 'put ''dGguaW11bChaZSxsbil8MDt2YXIgUmE9KEwrKHk9eStNYXRoLmltdWwoRyxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsR3QpfDApK01hdGguaW11bChRLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsR3QpfDApKyhsPj4+MTMpfDApKyhSYT4+PjI2KXww''@;'; put 'put ''LFJhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxYdCksbD0obD1NYXRoLmltdWwoTGUsUXQpKStNYXRoLmltdWwobnQsWHQpfDAsYj1NYXRoLmltdWwobnQsUXQpLHk9eStNYXRoLmltdWwodHQsc24pfDAsbD0obD1sK01hdGguaW11bCh0dCxpdCl8MCkrTWF0aC5pbXVsKFVlLHNuKXwwLGI9''@;'; put 'put ''YitNYXRoLmltdWwoVWUsaXQpfDAseT15K01hdGguaW11bChodCxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LHd0KXwwKStNYXRoLmltdWwodnQsTHQpfDAsYj1iK01hdGguaW11bCh2dCx3dCl8MCx5PXkrTWF0aC5pbXVsKEtlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsUHQpfDApK01h''@;'; put 'put ''dGguaW11bChZZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFllLFB0KXwwLHk9eStNYXRoLmltdWwoYmUsTmUpfDAsbD0obD1sK01hdGguaW11bChiZSx5dCl8MCkrTWF0aC5pbXVsKHdlLE5lKXwwLGI9YitNYXRoLmltdWwod2UseXQpfDAseT15K01hdGguaW11bCh4ZSxhdCl8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKHhlLF90KXwwKStNYXRoLmltdWwoTWUsYXQpfDAsYj1iK01hdGguaW11bChNZSxfdCl8MCx5PXkrTWF0aC5pbXVsKE9lLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsSHQpfDApK01hdGguaW11bChDZSwkdCl8MCxiPWIrTWF0aC5pbXVsKENlLEh0KXwwLHk9eStNYXRoLmltdWwo''@;'; put 'put ''dmUsbm4pfDAsbD0obD1sK01hdGguaW11bCh2ZSxsbil8MCkrTWF0aC5pbXVsKHVlLG5uKXwwLGI9YitNYXRoLmltdWwodWUsbG4pfDA7dmFyIG9pPShMKyh5PXkrTWF0aC5pbXVsKFBlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoUGUsR3QpfDApK01hdGguaW11bChaZSxh''@;'; put 'put ''bil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChaZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKG9pPj4+MjYpfDAsb2kmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHNuKSxsPShsPU1hdGguaW11bChMZSxpdCkpK01hdGguaW11bChudCxzbil8MCxiPU1hdGguaW11bChudCxpdCkseT15K01h''@;'; put 'put ''dGguaW11bCh0dCxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHd0KXwwKStNYXRoLmltdWwoVWUsTHQpfDAsYj1iK01hdGguaW11bChVZSx3dCl8MCx5PXkrTWF0aC5pbXVsKGh0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsUHQpfDApK01hdGguaW11bCh2dCxRZSl8MCxiPWIrTWF0aC5p''@;'; put 'put ''bXVsKHZ0LFB0KXwwLHk9eStNYXRoLmltdWwoS2UsTmUpfDAsbD0obD1sK01hdGguaW11bChLZSx5dCl8MCkrTWF0aC5pbXVsKFllLE5lKXwwLGI9YitNYXRoLmltdWwoWWUseXQpfDAseT15K01hdGguaW11bChiZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLF90KXwwKStNYXRoLmltdWwo''@;'; put 'put ''d2UsYXQpfDAsYj1iK01hdGguaW11bCh3ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKHhlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsSHQpfDApK01hdGguaW11bChNZSwkdCl8MCxiPWIrTWF0aC5pbXVsKE1lLEh0KXwwLHk9eStNYXRoLmltdWwoT2Usbm4pfDAsbD0obD1sK01hdGguaW11bChP''@;'; put 'put ''ZSxsbil8MCkrTWF0aC5pbXVsKENlLG5uKXwwLGI9YitNYXRoLmltdWwoQ2UsbG4pfDA7dmFyIFVpPShMKyh5PXkrTWF0aC5pbXVsKHZlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwodmUsR3QpfDApK01hdGguaW11bCh1ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGgu''@;'; put 'put ''aW11bCh1ZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLEx0KSxsPShsPU1hdGguaW11bChMZSx3dCkpK01hdGguaW11bChudCxMdCl8MCxiPU1hdGguaW11bChudCx3dCkseT15K01hdGguaW11bCh0dCxRZSl8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKHR0LFB0KXwwKStNYXRoLmltdWwoVWUsUWUpfDAsYj1iK01hdGguaW11bChVZSxQdCl8MCx5PXkrTWF0aC5pbXVsKGh0LE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQseXQpfDApK01hdGguaW11bCh2dCxOZSl8MCxiPWIrTWF0aC5pbXVsKHZ0LHl0KXwwLHk9eStNYXRoLmltdWwo''@;'; put 'put ''S2UsYXQpfDAsbD0obD1sK01hdGguaW11bChLZSxfdCl8MCkrTWF0aC5pbXVsKFllLGF0KXwwLGI9YitNYXRoLmltdWwoWWUsX3QpfDAseT15K01hdGguaW11bChiZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLEh0KXwwKStNYXRoLmltdWwod2UsJHQpfDAsYj1iK01hdGguaW11bCh3ZSxI''@;'; put 'put ''dCl8MCx5PXkrTWF0aC5pbXVsKHhlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bChNZSxubil8MCxiPWIrTWF0aC5pbXVsKE1lLGxuKXwwO3ZhciBWYT0oTCsoeT15K01hdGguaW11bChPZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKE9lLEd0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoQ2UsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoQ2UsR3QpfDApKyhsPj4+MTMpfDApKyhWYT4+PjI2KXwwLFZhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxRZSksbD0obD1NYXRoLmltdWwoTGUsUHQpKStNYXRoLmltdWwobnQsUWUpfDAsYj1NYXRo''@;'; put 'put ''LmltdWwobnQsUHQpLHk9eStNYXRoLmltdWwodHQsTmUpfDAsbD0obD1sK01hdGguaW11bCh0dCx5dCl8MCkrTWF0aC5pbXVsKFVlLE5lKXwwLGI9YitNYXRoLmltdWwoVWUseXQpfDAseT15K01hdGguaW11bChodCxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LF90KXwwKStNYXRoLmltdWwo''@;'; put 'put ''dnQsYXQpfDAsYj1iK01hdGguaW11bCh2dCxfdCl8MCx5PXkrTWF0aC5pbXVsKEtlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsSHQpfDApK01hdGguaW11bChZZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFllLEh0KXwwLHk9eStNYXRoLmltdWwoYmUsbm4pfDAsbD0obD1sK01hdGguaW11bChi''@;'; put 'put ''ZSxsbil8MCkrTWF0aC5pbXVsKHdlLG5uKXwwLGI9YitNYXRoLmltdWwod2UsbG4pfDA7dmFyIHVyPShMKyh5PXkrTWF0aC5pbXVsKHhlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoeGUsR3QpfDApK01hdGguaW11bChNZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGgu''@;'; put 'put ''aW11bChNZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLE5lKSxsPShsPU1hdGguaW11bChMZSx5dCkpK01hdGguaW11bChudCxOZSl8MCxiPU1hdGguaW11bChudCx5dCkseT15K01hdGguaW11bCh0dCxhdCl8MCxsPShsPWwrTWF0''@;'; put 'put ''aC5pbXVsKHR0LF90KXwwKStNYXRoLmltdWwoVWUsYXQpfDAsYj1iK01hdGguaW11bChVZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGh0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsSHQpfDApK01hdGguaW11bCh2dCwkdCl8MCxiPWIrTWF0aC5pbXVsKHZ0LEh0KXwwLHk9eStNYXRoLmltdWwo''@;'; put 'put ''S2Usbm4pfDAsbD0obD1sK01hdGguaW11bChLZSxsbil8MCkrTWF0aC5pbXVsKFllLG5uKXwwLGI9YitNYXRoLmltdWwoWWUsbG4pfDA7dmFyIGZhPShMKyh5PXkrTWF0aC5pbXVsKGJlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoYmUsR3QpfDApK01hdGguaW11bCh3ZSxh''@;'; put 'put ''bil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh3ZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKGZhPj4+MjYpfDAsZmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLGF0KSxsPShsPU1hdGguaW11bChMZSxfdCkpK01hdGguaW11bChudCxhdCl8MCxiPU1hdGguaW11bChudCxfdCkseT15K01h''@;'; put 'put ''dGguaW11bCh0dCwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LEh0KXwwKStNYXRoLmltdWwoVWUsJHQpfDAsYj1iK01hdGguaW11bChVZSxIdCl8MCx5PXkrTWF0aC5pbXVsKGh0LG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsbG4pfDApK01hdGguaW11bCh2dCxubil8MCxiPWIrTWF0aC5p''@;'; put 'put ''bXVsKHZ0LGxuKXwwO3ZhciB4aT0oTCsoeT15K01hdGguaW11bChLZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwoWWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoWWUsR3QpfDApKyhsPj4+MTMpfDApKyh4aT4+PjI2KXww''@;'; put 'put ''LHhpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSwkdCksbD0obD1NYXRoLmltdWwoTGUsSHQpKStNYXRoLmltdWwobnQsJHQpfDAsYj1NYXRoLmltdWwobnQsSHQpLHk9eStNYXRoLmltdWwodHQsbm4pfDAsbD0obD1sK01hdGguaW11bCh0dCxsbil8MCkrTWF0aC5pbXVsKFVlLG5uKXwwLGI9''@;'; put 'put ''YitNYXRoLmltdWwoVWUsbG4pfDA7dmFyIG9hPShMKyh5PXkrTWF0aC5pbXVsKGh0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoaHQsR3QpfDApK01hdGguaW11bCh2dCxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh2dCxHdCl8MCkrKGw+Pj4xMyl8MCkrKG9h''@;'; put 'put ''Pj4+MjYpfDAsb2EmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLG5uKSxsPShsPU1hdGguaW11bChMZSxsbikpK01hdGguaW11bChudCxubil8MCxiPU1hdGguaW11bChudCxsbik7dmFyIFhpPShMKyh5PXkrTWF0aC5pbXVsKHR0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''dHQsR3QpfDApK01hdGguaW11bChVZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChVZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzO3ZhciBJcj0oTCsoeT1NYXRoLmltdWwoTGUsYW4pKXwwKSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKExlLEd0''@;'; put 'put ''KSkrTWF0aC5pbXVsKG50LGFuKXwwKSk8PDEzKXwwO3JldHVybiBMPSgoYj1NYXRoLmltdWwobnQsR3QpKSsobD4+PjEzKXwwKSsoSXI+Pj4yNil8MCxJciY9NjcxMDg4NjMsa1swXT1lYSxrWzFdPW1pLGtbMl09ZnIsa1szXT0kaSxrWzRdPUtpLGtbNV09Vmksa1s2XT1xcixrWzddPXVhLGtb''@;'; put 'put ''OF09Rmksa1s5XT1SYSxrWzEwXT1vaSxrWzExXT1VaSxrWzEyXT1WYSxrWzEzXT11cixrWzE0XT1mYSxrWzE1XT14aSxrWzE2XT1vYSxrWzE3XT1YaSxrWzE4XT1JciwwIT09TCYmKGtbMTldPUwsdi5sZW5ndGgrKyksdn07ZnVuY3Rpb24gWihSLHMsdSl7cmV0dXJuKG5ldyBVKS5tdWxwKFIs''@;'; put 'put ''cyx1KX1mdW5jdGlvbiBVKFIscyl7dGhpcy54PVIsdGhpcy55PXN9TWF0aC5pbXVsfHwoSD1OKSxmLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihzLHUpe3ZhciB2LHA9dGhpcy5sZW5ndGgrcy5sZW5ndGg7cmV0dXJuIHY9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1zLmxlbmd0aD9IKHRoaXMs''@;'; put 'put ''cyx1KTpwPDYzP04odGhpcyxzLHUpOnA8MTAyND9mdW5jdGlvbiB6KFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZSx1Lmxlbmd0aD1SLmxlbmd0aCtzLmxlbmd0aDtmb3IodmFyIHY9MCxwPTAsXz0wO188dS5sZW5ndGgtMTtfKyspe3ZhciBrPXA7cD0wO2Zvcih2YXIg''@;'; put 'put ''TD02NzEwODg2MyZ2LHk9TWF0aC5taW4oXyxzLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsXy1SLmxlbmd0aCsxKTtsPD15O2wrKyl7dmFyIFE9KDB8Ui53b3Jkc1tfLWxdKSooMHxzLndvcmRzW2xdKSxwZT02NzEwODg2MyZRO0w9NjcxMDg4NjMmKHBlPXBlK0x8MCkscCs9KGs9KGs9aysoUS82''@;'; put 'put ''NzEwODg2NHwwKXwwKSsocGU+Pj4yNil8MCk+Pj4yNixrJj02NzEwODg2M311LndvcmRzW19dPUwsdj1rLGs9cH1yZXR1cm4gMCE9PXY/dS53b3Jkc1tfXT12OnUubGVuZ3RoLS0sdS5zdHJpcCgpfSh0aGlzLHMsdSk6Wih0aGlzLHMsdSksdn0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlv''@;'; put 'put ''bihzKXtmb3IodmFyIHU9bmV3IEFycmF5KHMpLHY9Zi5wcm90b3R5cGUuX2NvdW50Qml0cyhzKS0xLHA9MDtwPHM7cCsrKXVbcF09dGhpcy5yZXZCaW4ocCx2LHMpO3JldHVybiB1fSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocyx1LHYpe2lmKDA9PT1zfHxzPT09di0xKXJldHVybiBz''@;'; put 'put ''O2Zvcih2YXIgcD0wLF89MDtfPHU7XysrKXB8PSgxJnMpPDx1LV8tMSxzPj49MTtyZXR1cm4gcH0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihzLHUsdixwLF8sayl7Zm9yKHZhciBMPTA7TDxrO0wrKylwW0xdPXVbc1tMXV0sX1tMXT12W3NbTF1dfSxVLnByb3RvdHlwZS50cmFuc2Zv''@;'; put 'put ''cm09ZnVuY3Rpb24ocyx1LHYscCxfLGspe3RoaXMucGVybXV0ZShrLHMsdSx2LHAsXyk7Zm9yKHZhciBMPTE7TDxfO0w8PD0xKWZvcih2YXIgeT1MPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3kpLGI9TWF0aC5zaW4oMipNYXRoLlBJL3kpLHE9MDtxPF87cSs9eSlmb3IodmFyIEc9bCxRPWIs''@;'; put 'put ''cGU9MDtwZTxMO3BlKyspe3ZhciBQZT12W3ErcGVdLFplPXBbcStwZV0scWU9dltxK3BlK0xdLHZlPXBbcStwZStMXSx1ZT1HKnFlLVEqdmU7dmU9Ryp2ZStRKnFlLHZbcStwZV09UGUrKHFlPXVlKSxwW3ErcGVdPVplK3ZlLHZbcStwZStMXT1QZS1xZSxwW3ErcGUrTF09WmUtdmUscGUhPT15''@;'; put 'put ''JiYodWU9bCpHLWIqUSxRPWwqUStiKkcsRz11ZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihzLHUpe3ZhciB2PTF8TWF0aC5tYXgodSxzKSxwPTEmdixfPTA7Zm9yKHY9di8yfDA7djt2Pj4+PTEpXysrO3JldHVybiAxPDxfKzErcH0sVS5wcm90b3R5cGUuY29uanVnYXRl''@;'; put 'put ''PWZ1bmN0aW9uKHMsdSx2KXtpZighKHY8PTEpKWZvcih2YXIgcD0wO3A8di8yO3ArKyl7dmFyIF89c1twXTtzW3BdPXNbdi1wLTFdLHNbdi1wLTFdPV8sXz11W3BdLHVbcF09LXVbdi1wLTFdLHVbdi1wLTFdPS1ffX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHMsdSl7Zm9y''@;'; put 'put ''KHZhciB2PTAscD0wO3A8dS8yO3ArKyl7dmFyIF89ODE5MipNYXRoLnJvdW5kKHNbMipwKzFdL3UpK01hdGgucm91bmQoc1syKnBdL3UpK3Y7c1twXT02NzEwODg2MyZfLHY9Xzw2NzEwODg2ND8wOl8vNjcxMDg4NjR8MH1yZXR1cm4gc30sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlv''@;'; put 'put ''bihzLHUsdixwKXtmb3IodmFyIF89MCxrPTA7azx1O2srKyl2WzIqa109ODE5MSYoXys9MHxzW2tdKSx2WzIqaysxXT04MTkxJihfPj4+PTEzKSxfPj4+PTEzO2ZvcihrPTIqdTtrPHA7KytrKXZba109MDtvKDA9PT1fKSxvKCEoLTgxOTImXykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9u''@;'; put 'put ''KHMpe2Zvcih2YXIgdT1uZXcgQXJyYXkocyksdj0wO3Y8czt2KyspdVt2XT0wO3JldHVybiB1fSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcD0yKnRoaXMuZ3Vlc3NMZW4xM2Iocy5sZW5ndGgsdS5sZW5ndGgpLF89dGhpcy5tYWtlUkJUKHApLGs9dGhpcy5zdHViKHAp''@;'; put 'put ''LEw9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApLGw9bmV3IEFycmF5KHApLGI9bmV3IEFycmF5KHApLHE9bmV3IEFycmF5KHApLEc9bmV3IEFycmF5KHApLFE9di53b3JkcztRLmxlbmd0aD1wLHRoaXMuY29udmVydDEzYihzLndvcmRzLHMubGVuZ3RoLEwscCksdGhpcy5jb252ZXJ0MTNi''@;'; put 'put ''KHUud29yZHMsdS5sZW5ndGgsYixwKSx0aGlzLnRyYW5zZm9ybShMLGsseSxsLHAsXyksdGhpcy50cmFuc2Zvcm0oYixrLHEsRyxwLF8pO2Zvcih2YXIgcGU9MDtwZTxwO3BlKyspe3ZhciBQZT15W3BlXSpxW3BlXS1sW3BlXSpHW3BlXTtsW3BlXT15W3BlXSpHW3BlXStsW3BlXSpxW3BlXSx5''@;'; put 'put ''W3BlXT1QZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoeSxsLHApLHRoaXMudHJhbnNmb3JtKHksbCxRLGsscCxfKSx0aGlzLmNvbmp1Z2F0ZShRLGsscCksdGhpcy5ub3JtYWxpemUxM2IoUSxwKSx2Lm5lZ2F0aXZlPXMubmVnYXRpdmVedS5uZWdhdGl2ZSx2Lmxlbmd0aD1zLmxlbmd0aCt1Lmxl''@;'; put 'put ''bmd0aCx2LnN0cmlwKCl9LGYucHJvdG90eXBlLm11bD1mdW5jdGlvbihzKXt2YXIgdT1uZXcgZihudWxsKTtyZXR1cm4gdS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLHRoaXMubXVsVG8ocyx1KX0sZi5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihzKXt2YXIgdT1uZXcg''@;'; put 'put ''ZihudWxsKTtyZXR1cm4gdS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLFoodGhpcyxzLHUpfSxmLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocyx0aGlzKX0sZi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocyl7bygi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIHMpLG8oczw2NzEwODg2NCk7Zm9yKHZhciB1PTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgcD0oMHx0aGlzLndvcmRzW3ZdKSpzLF89KDY3MTA4ODYzJnApKyg2NzEwODg2MyZ1KTt1Pj49MjYsdSs9cC82NzEwODg2NHwwLHUrPV8+Pj4yNix0aGlzLndvcmRz''@;'; put 'put ''W3ZdPTY3MTA4ODYzJl99cmV0dXJuIDAhPT11JiYodGhpcy53b3Jkc1t2XT11LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1zPzE6dGhpcy5sZW5ndGgsdGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlvbihzKXt2YXIgdT1mdW5jdGlvbiBGKFIpe2Zvcih2YXIgcz1uZXcg''@;'; put 'put ''QXJyYXkoUi5iaXRMZW5ndGgoKSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gbmV3IGYoMSk7Zm9yKHZhciB2PXRoaXMscD0wO3A8dS5sZW5ndGgmJjA9PT11''@;'; put 'put ''W3BdO3ArKyx2PXYuc3FyKCkpO2lmKCsrcDx1Lmxlbmd0aClmb3IodmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZz''@;'; put 'put ''Pj0wKTt2YXIgXyx1PXMlMjYsdj0ocy11KS8yNixwPTY3MTA4ODYzPj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19dJnA7dGhpcy53b3Jkc1tfXT0oMHx0aGlzLndvcmRzW19dKS1MPDx1fGssaz1MPj4+''@;'; put 'put ''MjYtdX1rJiYodGhpcy53b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRoaXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7Xzx2O18rKyl0aGlzLndvcmRzW19dPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1LHYpe3ZhciBwO28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKSxwPXU/KHUtdSUy''@;'; put 'put ''NikvMjY6MDt2YXIgXz1zJTI2LGs9TWF0aC5taW4oKHMtXykvMjYsdGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFyIGw9MDtsPGs7bCsrKXkud29yZHNbbF09dGhpcy53b3Jkc1tsXTt5Lmxlbmd0aD1r''@;'; put 'put ''fWlmKDAhPT1rKWlmKHRoaXMubGVuZ3RoPmspZm9yKHRoaXMubGVuZ3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBiPTA7Zm9yKGw9dGhpcy5sZW5ndGgtMTtsPj0w''@;'; put 'put ''JiYoMCE9PWJ8fGw+PXApO2wtLSl7dmFyIHE9MHx0aGlzLndvcmRzW2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0x''@;'; put 'put ''KSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocyl9LGYucHJvdG90''@;'; put 'put ''eXBlLnVzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVz''@;'; put 'put ''aHJuKHMpfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhpcy53b3Jkc1t2XSYxPDx1KSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihz''@;'; put 'put ''KXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9dj90aGlzOigwIT09dSYmdisrLHRoaXMubGVuZ3Ro''@;'; put 'put ''PU1hdGgubWluKHYsdGhpcy5sZW5ndGgpLDAhPT11JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51PDx1KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpKX0sZi5wcm90b3R5cGUubWFz''@;'; put 'put ''a249ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocyl9LGYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHMpe3JldHVybiBvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxzPDA/dGhpcy5pc3Vibigtcyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMu''@;'; put 'put ''bGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxzPyh0aGlzLndvcmRzWzBdPXMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocyl9LGYucHJvdG90eXBl''@;'; put 'put ''Ll9pYWRkbj1mdW5jdGlvbihzKXt0aGlzLndvcmRzWzBdKz1zO2Zvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbdV0+PTY3MTA4ODY0O3UrKyl0aGlzLndvcmRzW3VdLT02NzEwODg2NCx1PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3UrMV09MTp0aGlzLndvcmRzW3Ur''@;'; put 'put ''MV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsdSsxKSx0aGlzfSxmLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihzKXtpZihvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxzPDApcmV0dXJuIHRoaXMuaWFkZG4oLXMpO2lmKDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1zLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vs''@;'; put 'put ''c2UgZm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XTwwO3UrKyl0aGlzLndvcmRzW3VdKz02NzEwODg2NCx0aGlzLndvcmRzW3UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlh''@;'; put 'put ''ZGRuKHMpfSxmLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocyl9LGYucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGYucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaWFicygpfSxmLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocyx1LHYpe3ZhciBfO3RoaXMuX2V4cGFuZChzLmxlbmd0aCt2KTt2YXIgayxMPTA7Zm9yKF89MDtfPHMubGVuZ3RoO18rKyl7az0oMHx0aGlzLndvcmRzW18rdl0pK0w7dmFyIHk9KDB8cy53b3Jkc1tfXSkq''@;'; put 'put ''dTtMPSgoay09NjcxMDg4NjMmeSk+PjI2KS0oeS82NzEwODg2NHwwKSx0aGlzLndvcmRzW18rdl09NjcxMDg4NjMma31mb3IoO188dGhpcy5sZW5ndGgtdjtfKyspTD0oaz0oMHx0aGlzLndvcmRzW18rdl0pK0wpPj4yNix0aGlzLndvcmRzW18rdl09NjcxMDg4NjMmaztpZigwPT09TClyZXR1''@;'; put 'put ''cm4gdGhpcy5zdHJpcCgpO2ZvcihvKC0xPT09TCksTD0wLF89MDtfPHRoaXMubGVuZ3RoO18rKylMPShrPS0oMHx0aGlzLndvcmRzW19dKStMKT4+MjYsdGhpcy53b3Jkc1tfXT02NzEwODg2MyZrO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fd29y''@;'; put 'put ''ZERpdj1mdW5jdGlvbihzLHUpe3ZhciB2LHA9dGhpcy5jbG9uZSgpLF89cyxrPTB8Xy53b3Jkc1tfLmxlbmd0aC0xXTswIT0odj0yNi10aGlzLl9jb3VudEJpdHMoaykpJiYoXz1fLnVzaGxuKHYpLHAuaXVzaGxuKHYpLGs9MHxfLndvcmRzW18ubGVuZ3RoLTFdKTt2YXIgbCx5PXAubGVuZ3Ro''@;'; put 'put ''LV8ubGVuZ3RoO2lmKCJtb2QiIT09dSl7KGw9bmV3IGYobnVsbCkpLmxlbmd0aD15KzEsbC53b3Jkcz1uZXcgQXJyYXkobC5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8bC5sZW5ndGg7YisrKWwud29yZHNbYl09MH12YXIgcT1wLmNsb25lKCkuX2lzaGxuc3VibXVsKF8sMSx5KTswPT09cS5uZWdh''@;'; put 'put ''dGl2ZSYmKHA9cSxsJiYobC53b3Jkc1t5XT0xKSk7Zm9yKHZhciBHPXktMTtHPj0wO0ctLSl7dmFyIFE9NjcxMDg4NjQqKDB8cC53b3Jkc1tfLmxlbmd0aCtHXSkrKDB8cC53b3Jkc1tfLmxlbmd0aCtHLTFdKTtmb3IoUT1NYXRoLm1pbihRL2t8MCw2NzEwODg2MykscC5faXNobG5zdWJtdWwo''@;'; put 'put ''XyxRLEcpOzAhPT1wLm5lZ2F0aXZlOylRLS0scC5uZWdhdGl2ZT0wLHAuX2lzaGxuc3VibXVsKF8sMSxHKSxwLmlzWmVybygpfHwocC5uZWdhdGl2ZV49MSk7bCYmKGwud29yZHNbR109USl9cmV0dXJuIGwmJmwuc3RyaXAoKSxwLnN0cmlwKCksImRpdiIhPT11JiYwIT09diYmcC5pdXNocm4o''@;'; put 'put ''dikse2RpdjpsfHxudWxsLG1vZDpwfX0sZi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbyghcy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBmKDApLG1vZDpuZXcgZigwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlPyhrPXRoaXMu''@;'; put 'put ''bmVnKCkuZGl2bW9kKHMsdSksIm1vZCIhPT11JiYocD1rLmRpdi5uZWcoKSksImRpdiIhPT11JiYoXz1rLm1vZC5uZWcoKSx2JiYwIT09Xy5uZWdhdGl2ZSYmXy5pYWRkKHMpKSx7ZGl2OnAsbW9kOl99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmU/KGs9dGhpcy5kaXZtb2Qo''@;'; put 'put ''cy5uZWcoKSx1KSwibW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSx7ZGl2OnAsbW9kOmsubW9kfSk6dGhpcy5uZWdhdGl2ZSZzLm5lZ2F0aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKHMubmVnKCksdSksImRpdiIhPT11JiYoXz1rLm1vZC5uZWcoKSx2JiYwIT09Xy5uZWdhdGl2ZSYmXy5pc3Vi''@;'; put 'put ''KHMpKSx7ZGl2OmsuZGl2LG1vZDpffSk6cy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHMpPDA/e2RpdjpuZXcgZigwKSxtb2Q6dGhpc306MT09PXMubGVuZ3RoPyJkaXYiPT09dT97ZGl2OnRoaXMuZGl2bihzLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT11P3tkaXY6bnVsbCxt''@;'; put 'put ''b2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocy53b3Jkc1swXSksbW9kOm5ldyBmKHRoaXMubW9kbihzLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocyx1KTt2YXIgcCxfLGt9LGYucHJvdG90eXBlLmRpdj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''aXZtb2QocywiZGl2IiwhMSkuZGl2fSxmLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGl2bW9kKHMsIm1vZCIsITEpLm1vZH0sZi5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywibW9kIiwhMCkubW9kfSxmLnByb3RvdHlwZS5k''@;'; put 'put ''aXZSb3VuZD1mdW5jdGlvbihzKXt2YXIgdT10aGlzLmRpdm1vZChzKTtpZih1Lm1vZC5pc1plcm8oKSlyZXR1cm4gdS5kaXY7dmFyIHY9MCE9PXUuZGl2Lm5lZ2F0aXZlP3UubW9kLmlzdWIocyk6dS5tb2QscD1zLnVzaHJuKDEpLF89cy5hbmRsbigxKSxrPXYuY21wKHApO3JldHVybiBrPDB8''@;'; put 'put ''fDE9PT1fJiYwPT09az91LmRpdjowIT09dS5kaXYubmVnYXRpdmU/dS5kaXYuaXN1Ym4oMSk6dS5kaXYuaWFkZG4oMSl9LGYucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2Myk7Zm9yKHZhciB1PSgxPDwyNiklcyx2PTAscD10aGlzLmxlbmd0aC0xO3A+PTA7cC0tKXY9''@;'; put 'put ''KHUqdisoMHx0aGlzLndvcmRzW3BdKSklcztyZXR1cm4gdn0sZi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2Myk7Zm9yKHZhciB1PTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXt2YXIgcD0oMHx0aGlzLndvcmRzW3ZdKSs2NzEwODg2NCp1O3RoaXMud29yZHNb''@;'; put 'put ''dl09cC9zfDAsdT1wJXN9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHMpfSxmLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUpLG8oIXMuaXNaZXJvKCkpO3ZhciB1PXRo''@;'; put 'put ''aXMsdj1zLmNsb25lKCk7dT0wIT09dS5uZWdhdGl2ZT91LnVtb2Qocyk6dS5jbG9uZSgpO2Zvcih2YXIgcD1uZXcgZigxKSxfPW5ldyBmKDApLGs9bmV3IGYoMCksTD1uZXcgZigxKSx5PTA7dS5pc0V2ZW4oKSYmdi5pc0V2ZW4oKTspdS5pdXNocm4oMSksdi5pdXNocm4oMSksKyt5O2Zvcih2''@;'; put 'put ''YXIgbD12LmNsb25lKCksYj11LmNsb25lKCk7IXUuaXNaZXJvKCk7KXtmb3IodmFyIHE9MCxHPTE7ISh1LndvcmRzWzBdJkcpJiZxPDI2OysrcSxHPDw9MSk7aWYocT4wKWZvcih1Lml1c2hybihxKTtxLS0gPjA7KShwLmlzT2RkKCl8fF8uaXNPZGQoKSkmJihwLmlhZGQobCksXy5pc3ViKGIp''@;'; put 'put ''KSxwLml1c2hybigxKSxfLml1c2hybigxKTtmb3IodmFyIFE9MCxwZT0xOyEodi53b3Jkc1swXSZwZSkmJlE8MjY7KytRLHBlPDw9MSk7aWYoUT4wKWZvcih2Lml1c2hybihRKTtRLS0gPjA7KShrLmlzT2RkKCl8fEwuaXNPZGQoKSkmJihrLmlhZGQobCksTC5pc3ViKGIpKSxrLml1c2hybigx''@;'; put 'put ''KSxMLml1c2hybigxKTt1LmNtcCh2KT49MD8odS5pc3ViKHYpLHAuaXN1YihrKSxfLmlzdWIoTCkpOih2LmlzdWIodSksay5pc3ViKHApLEwuaXN1YihfKSl9cmV0dXJue2E6ayxiOkwsZ2NkOnYuaXVzaGxuKHkpfX0sZi5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHMpe28oMD09PXMubmVn''@;'; put 'put ''YXRpdmUpLG8oIXMuaXNaZXJvKCkpO3ZhciBxLHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz12LmNsb25lKCk7dS5jbXBuKDEpPjAmJnYuY21wbigxKT4wOyl7Zm9yKHZhciBMPTAs''@;'; put 'put ''eT0xOyEodS53b3Jkc1swXSZ5KSYmTDwyNjsrK0wseTw8PTEpO2lmKEw+MClmb3IodS5pdXNocm4oTCk7TC0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChrKSxwLml1c2hybigxKTtmb3IodmFyIGw9MCxiPTE7ISh2LndvcmRzWzBdJmIpJiZsPDI2OysrbCxiPDw9MSk7aWYobD4wKWZvcih2Lml1''@;'; put 'put ''c2hybihsKTtsLS0gPjA7KV8uaXNPZGQoKSYmXy5pYWRkKGspLF8uaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3ViKF8pKToodi5pc3ViKHUpLF8uaXN1YihwKSl9cmV0dXJuKHE9MD09PXUuY21wbigxKT9wOl8pLmNtcG4oMCk8MCYmcS5pYWRkKHMpLHF9LGYucHJvdG90''@;'; put 'put ''eXBlLmdjZD1mdW5jdGlvbihzKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBzLmFicygpO2lmKHMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHU9dGhpcy5jbG9uZSgpLHY9cy5jbG9uZSgpO3UubmVnYXRpdmU9MCx2Lm5lZ2F0aXZlPTA7Zm9yKHZhciBwPTA7dS5pc0V2ZW4oKSYm''@;'; put 'put ''di5pc0V2ZW4oKTtwKyspdS5pdXNocm4oMSksdi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3UuaXNFdmVuKCk7KXUuaXVzaHJuKDEpO2Zvcig7di5pc0V2ZW4oKTspdi5pdXNocm4oMSk7dmFyIF89dS5jbXAodik7aWYoXzwwKXt2YXIgaz11O3U9dix2PWt9ZWxzZSBpZigwPT09X3x8MD09PXYu''@;'; put 'put ''Y21wbigxKSlicmVhazt1LmlzdWIodil9cmV0dXJuIHYuaXVzaGxuKHApfSxmLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmVnY2QocykuYS51bW9kKHMpfSxmLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LGYucHJv''@;'; put 'put ''dG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMud29yZHNbMF0mc30sZi5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMpO3ZhciB1PXMl''@;'; put 'put ''MjYsdj0ocy11KS8yNixwPTE8PHU7aWYodGhpcy5sZW5ndGg8PXYpcmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl18PXAsdGhpcztmb3IodmFyIF89cCxrPXY7MCE9PV8mJms8dGhpcy5sZW5ndGg7aysrKXt2YXIgTD0wfHRoaXMud29yZHNba107Xz0oTCs9Xyk+Pj4yNix0''@;'; put 'put ''aGlzLndvcmRzW2tdPUwmPTY3MTA4ODYzfXJldHVybiAwIT09XyYmKHRoaXMud29yZHNba109Xyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxmLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sZi5wcm90b3R5cGUuY21w''@;'; put 'put ''bj1mdW5jdGlvbihzKXt2YXIgdix1PXM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnUpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpdj0xO2Vsc2V7dSYmKHM9LXMpLG8oczw9NjcxMDg4NjMsIk51bWJlciBp''@;'; put 'put ''cyB0b28gYmlnIik7dmFyIHA9MHx0aGlzLndvcmRzWzBdO3Y9cD09PXM/MDpwPHM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdjp2fSxmLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgdT10aGlzLnVjbXAocyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXU6dX0sZi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihzKXtpZih0aGlzLmxlbmd0aD5zLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxl''@;'; put 'put ''bmd0aDxzLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPTB8dGhpcy53b3Jkc1t2XSxfPTB8cy53b3Jkc1t2XTtpZihwIT09Xyl7cDxfP3U9LTE6cD5fJiYodT0xKTticmVha319cmV0dXJuIHV9LGYucHJvdG90eXBlLmd0bj1mdW5j''@;'; put 'put ''dGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIDE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXBuKHMpPj0wfSxmLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY21wKHMpPj0wfSxmLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHMpe3JldHVybi0xPT09dGhpcy5jbXAocyl9LGYucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY21wbihzKTw9MH0sZi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcChzKTw9MH0sZi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5lcT1mdW5jdGlvbihzKXtyZXR1cm4gMD09PXRoaXMuY21w''@;'; put 'put ''KHMpfSxmLnJlZD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IG1lKHMpfSxmLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxvKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlcyIpLHMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChzKX0sZi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQu''@;'; put 'put ''Y29udmVydEZyb20odGhpcyl9LGYucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5yZWQ9cyx0aGlzfSxmLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRl''@;'; put 'put ''eHQiKSx0aGlzLl9mb3JjZVJlZChzKX0sZi5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocyl7''@;'; put 'put ''cmV0dXJuIG8odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5zdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihz''@;'; put 'put ''KXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLm11bCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxzKSx0''@;'; put 'put ''aGlzLnJlZC5pbXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5y''@;'; put 'put ''ZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sZi5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGYucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxmLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMp''@;'; put 'put ''LHRoaXMucmVkLm5lZyh0aGlzKX0sZi5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkJiYhcy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscyl9O3ZhciBLPXtrMjU2Om51bGwscDIy''@;'; put 'put ''NDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gWChSLHMpe3RoaXMubmFtZT1SLHRoaXMucD1uZXcgZihzLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgZigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1w''@;'; put 'put ''KCl9ZnVuY3Rpb24gbmUoKXtYLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gc2UoKXtYLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gaGUoKXtYLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gX2UoKXtYLmNhbGwodGhpcywiMjU1''@;'; put 'put ''MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gbWUoUil7aWYoInN0cmluZyI9PXR5cGVvZiBSKXt2YXIgcz1mLl9wcmltZShSKTt0aGlzLm09cy5wLHRoaXMucHJpbWU9c31lbHNlIG8oUi5n''@;'; put 'put ''dG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1SLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGZShSKXttZS5jYWxsKHRoaXMsUiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMu''@;'; put 'put ''c2hpZnQlMjYpLHRoaXMucj1uZXcgZigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhp''@;'; put 'put ''cy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1YLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJuIHMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxzfSxYLnByb3Rv''@;'; put 'put ''dHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHMpe3ZhciB2LHU9cztkb3t0aGlzLnNwbGl0KHUsdGhpcy50bXApLHY9KHU9KHU9dGhpcy5pbXVsSyh1KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHY+dGhpcy5uKTt2YXIgcD12PHRoaXMubj8tMTp1LnVjbXAodGhpcy5wKTtyZXR1''@;'; put 'put ''cm4gMD09PXA/KHUud29yZHNbMF09MCx1Lmxlbmd0aD0xKTpwPjA/dS5pc3ViKHRoaXMucCk6dm9pZCAwIT09dS5zdHJpcD91LnN0cmlwKCk6dS5fc3RyaXAoKSx1fSxYLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihzLHUpe3MuaXVzaHJuKHRoaXMubiwwLHUpfSxYLnByb3RvdHlwZS5pbXVs''@;'; put 'put ''Sz1mdW5jdGlvbihzKXtyZXR1cm4gcy5pbXVsKHRoaXMuayl9LEkobmUsWCksbmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciB2PTQxOTQzMDMscD1NYXRoLm1pbihzLmxlbmd0aCw5KSxfPTA7XzxwO18rKyl1LndvcmRzW19dPXMud29yZHNbX107aWYodS5sZW5ndGg9''@;'; put 'put ''cCxzLmxlbmd0aDw9OSlyZXR1cm4gcy53b3Jkc1swXT0wLHZvaWQocy5sZW5ndGg9MSk7dmFyIGs9cy53b3Jkc1s5XTtmb3IodS53b3Jkc1t1Lmxlbmd0aCsrXT1rJnYsXz0xMDtfPHMubGVuZ3RoO18rKyl7dmFyIEw9MHxzLndvcmRzW19dO3Mud29yZHNbXy0xMF09KEwmdik8PDR8az4+PjIy''@;'; put 'put ''LGs9TH1zLndvcmRzW18tMTBdPWs+Pj49MjIscy5sZW5ndGgtPTA9PT1rJiZzLmxlbmd0aD4xMD8xMDo5fSxuZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7cy53b3Jkc1tzLmxlbmd0aF09MCxzLndvcmRzW3MubGVuZ3RoKzFdPTAscy5sZW5ndGgrPTI7Zm9yKHZhciB1PTAsdj0wO3Y8''@;'; put 'put ''cy5sZW5ndGg7disrKXt2YXIgcD0wfHMud29yZHNbdl07cy53b3Jkc1t2XT02NzEwODg2MyYodSs9OTc3KnApLHU9NjQqcCsodS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJihzLmxlbmd0aC0tLDA9PT1zLndvcmRzW3MubGVuZ3RoLTFdJiZzLmxlbmd0aC0t''@;'; put 'put ''KSxzfSxJKHNlLFgpLEkoaGUsWCksSShfZSxYKSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PTAsdj0wO3Y8cy5sZW5ndGg7disrKXt2YXIgcD0xOSooMHxzLndvcmRzW3ZdKSt1LF89NjcxMDg4NjMmcDtwPj4+PTI2LHMud29yZHNbdl09Xyx1PXB9cmV0dXJuIDAh''@;'; put 'put ''PT11JiYocy53b3Jkc1tzLmxlbmd0aCsrXT11KSxzfSxmLl9wcmltZT1mdW5jdGlvbihzKXtpZihLW3NdKXJldHVybiBLW3NdO3ZhciB1O2lmKCJrMjU2Ij09PXMpdT1uZXcgbmU7ZWxzZSBpZigicDIyNCI9PT1zKXU9bmV3IHNlO2Vsc2UgaWYoInAxOTIiPT09cyl1PW5ldyBoZTtlbHNle2lm''@;'; put 'put ''KCJwMjU1MTkiIT09cyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitzKTt1PW5ldyBfZX1yZXR1cm4gS1tzXT11LHV9LG1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihzKXtvKDA9PT1zLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8ocy5y''@;'; put 'put ''ZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sbWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHMsdSl7byghKHMubmVnYXRpdmV8dS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhzLnJlZCYmcy5yZWQ9PT11LnJlZCwicmVkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocykuX2ZvcmNlUmVkKHRoaXMpOnMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLm5lZz1m''@;'; put 'put ''dW5jdGlvbihzKXtyZXR1cm4gcy5pc1plcm8oKT9zLmNsb25lKCk6dGhpcy5tLnN1YihzKS5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5hZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1''@;'; put 'put ''Yih0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlhZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1Yih0aGlzLm0pLHZ9LG1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24o''@;'; put 'put ''cyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5zdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5tKSx2Ll9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5pc3ViKHUpO3JldHVy''@;'; put 'put ''biB2LmNtcG4oMCk8MCYmdi5pYWRkKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHMpLHRoaXMuaW1vZChzLnVzaGxuKHUpKX0sbWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mihz''@;'; put 'put ''LHUpLHRoaXMuaW1vZChzLmltdWwodSkpfSxtZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocyx1KSx0aGlzLmltb2Qocy5tdWwodSkpfSxtZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5pbXVsKHMscy5jbG9uZSgpKX0s''@;'; put 'put ''bWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5tdWwocyxzKX0sbWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocyl7aWYocy5pc1plcm8oKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciB1PXRoaXMubS5hbmRsbigzKTtpZihvKHUlMj09MSksMz09PXUpe3ZhciB2PXRoaXMu''@;'; put 'put ''bS5hZGQobmV3IGYoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocyx2KX1mb3IodmFyIHA9dGhpcy5tLnN1Ym4oMSksXz0wOyFwLmlzWmVybygpJiYwPT09cC5hbmRsbigxKTspXysrLHAuaXVzaHJuKDEpO28oIXAuaXNaZXJvKCkpO3ZhciBrPW5ldyBmKDEpLnRvUmVkKHRoaXMpLEw9''@;'; put 'put ''ay5yZWROZWcoKSx5PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxsPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobD1uZXcgZigyKmwqbCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGwseSkuY21wKEwpOylsLnJlZElBZGQoTCk7Zm9yKHZhciBiPXRoaXMucG93KGwscCkscT10aGlzLnBvdyhz''@;'; put 'put ''LHAuYWRkbigxKS5pdXNocm4oMSkpLEc9dGhpcy5wb3cocyxwKSxRPV87MCE9PUcuY21wKGspOyl7Zm9yKHZhciBwZT1HLFBlPTA7MCE9PXBlLmNtcChrKTtQZSsrKXBlPXBlLnJlZFNxcigpO28oUGU8USk7dmFyIFplPXRoaXMucG93KGIsbmV3IGYoMSkuaXVzaGxuKFEtUGUtMSkpO3E9cS5y''@;'; put 'put ''ZWRNdWwoWmUpLGI9WmUucmVkU3FyKCksRz1HLnJlZE11bChiKSxRPVBlfXJldHVybiBxfSxtZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihzKXt2YXIgdT1zLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09dS5uZWdhdGl2ZT8odS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh1KS5yZWROZWcoKSk6''@;'; put 'put ''dGhpcy5pbW9kKHUpfSxtZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHMsdSl7aWYodS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMSkudG9SZWQodGhpcyk7aWYoMD09PXUuY21wbigxKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciBwPW5ldyBBcnJheSgxNik7cFswXT1uZXcgZigxKS50b1JlZCh0aGlz''@;'; put 'put ''KSxwWzFdPXM7Zm9yKHZhciBfPTI7XzxwLmxlbmd0aDtfKyspcFtfXT10aGlzLm11bChwW18tMV0scyk7dmFyIGs9cFswXSxMPTAseT0wLGw9dS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxfPXUubGVuZ3RoLTE7Xz49MDtfLS0pe2Zvcih2YXIgYj11LndvcmRzW19dLHE9bC0x''@;'; put 'put ''O3E+PTA7cS0tKXt2YXIgRz1iPj5xJjE7ayE9PXBbMF0mJihrPXRoaXMuc3FyKGspKSwwIT09R3x8MCE9PUw/KEw8PD0xLEx8PUcsKDQ9PSsreXx8MD09PV8mJjA9PT1xKSYmKGs9dGhpcy5tdWwoayxwW0xdKSx5PTAsTD0wKSk6eT0wfWw9MjZ9cmV0dXJuIGt9LG1lLnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0VG89ZnVuY3Rpb24ocyl7dmFyIHU9cy51bW9kKHRoaXMubSk7cmV0dXJuIHU9PT1zP3UuY2xvbmUoKTp1fSxtZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocyl7dmFyIHU9cy5jbG9uZSgpO3JldHVybiB1LnJlZD1udWxsLHV9LGYubW9udD1mdW5jdGlvbihzKXtyZXR1cm4g''@;'; put 'put ''bmV3IEZlKHMpfSxJKEZlLG1lKSxGZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltb2Qocy51c2hsbih0aGlzLnNoaWZ0KSl9LEZlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihzKXt2YXIgdT10aGlzLmltb2Qocy5tdWwodGhpcy5yaW52KSk7''@;'; put 'put ''cmV0dXJuIHUucmVkPW51bGwsdX0sRmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBzLndvcmRzWzBdPTAscy5sZW5ndGg9MSxzO3ZhciB2PXMuaW11bCh1KSxwPXYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLF89di5pc3ViKHApLml1c2hybih0aGlzLnNoaWZ0KSxrPV87cmV0dXJuIF8uY21wKHRoaXMubSk+PTA/az1fLmlzdWIodGhpcy5tKTpfLmNtcG4oMCk8MCYmKGs9Xy5pYWRkKHRoaXMubSkpLGsuX2ZvcmNlUmVkKHRoaXMpfSxGZS5wcm90''@;'; put 'put ''b3R5cGUubXVsPWZ1bmN0aW9uKHMsdSl7aWYocy5pc1plcm8oKXx8dS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB2PXMubXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSks''@;'; put 'put ''Xz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9LEZlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVybiB0''@;'; put 'put ''aGlzLmltb2Qocy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHRlPWQubm1kKHRlKSx0aGlzKX0sNDU3MCh0ZSl7InVzZSBzdHJpY3QiO3ZhciBqPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ITE7aWYoail0cnl7aih7fSwiYSIse3ZhbHVlOjF9KX1jYXRj''@;'; put 'put ''aHtqPSExfXRlLmV4cG9ydHM9an0sMTc1Nih0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9RXZhbEVycm9yfSwzNzY0MCh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9RXJyb3J9LDc3OTMzKHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1SYW5nZUVycm9yfSw2NjEzKHRlKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dGUuZXhwb3J0cz1SZWZlcmVuY2VFcnJvcn0sNTg0MTModGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPVN5bnRheEVycm9yfSw0Njc1OCh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9VHlwZUVycm9yfSw1Mjg2KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1VUklF''@;'; put 'put ''cnJvcn0sNjU4OTEodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPU9iamVjdH0sNDQzNTYodGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgUyxqPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsZD1qJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5hcHBseT9qLmFwcGx5OmZ1bmN0aW9u''@;'; put 'put ''KFgsbmUsc2Upe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChYLG5lLHNlKX07Uz1qJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5vd25LZXlzP2oub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKFgpe3JldHVybiBPYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlOYW1lcyhYKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhYKSl9OmZ1bmN0aW9uKFgpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhYKX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihYKXtyZXR1cm4gWCE9WH07ZnVuY3Rpb24gSSgpe0ku''@;'; put 'put ''aW5pdC5jYWxsKHRoaXMpfXRlLmV4cG9ydHM9SSx0ZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24geihLLFgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuZSxzZSl7ZnVuY3Rpb24gaGUobWUpe0sucmVtb3ZlTGlzdGVuZXIoWCxfZSksc2UobWUpfWZ1bmN0aW9uIF9lKCl7ImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIEsucmVtb3ZlTGlzdGVuZXImJksucmVtb3ZlTGlzdGVuZXIoImVycm9yIixoZSksbmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1VKEssWCxfZSx7b25jZTohMH0pLCJlcnJvciIhPT1YJiZmdW5jdGlvbiBaKEssWCxuZSl7ImZ1bmN0aW9uIj09dHlwZW9mIEsub24mJlUo''@;'; put 'put ''SywiZXJyb3IiLFgsbmUpfShLLGhlLHtvbmNlOiEwfSl9KX0sSS5FdmVudEVtaXR0ZXI9SSxJLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxJLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxJLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgZj0xMDtmdW5jdGlvbiBUKEspe2lm''@;'; put 'put ''KCJmdW5jdGlvbiIhPXR5cGVvZiBLKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBLKX1mdW5jdGlvbiBBKEspe3JldHVybiB2b2lkIDA9PT1LLl9tYXhMaXN0ZW5lcnM/''@;'; put 'put ''SS5kZWZhdWx0TWF4TGlzdGVuZXJzOksuX21heExpc3RlbmVyc31mdW5jdGlvbiBNKEssWCxuZSxzZSl7dmFyIGhlLF9lLG1lO2lmKFQobmUpLHZvaWQgMD09PShfZT1LLl9ldmVudHMpPyhfZT1LLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxLLl9ldmVudHNDb3VudD0wKToodm9pZCAw''@;'; put 'put ''IT09X2UubmV3TGlzdGVuZXImJihLLmVtaXQoIm5ld0xpc3RlbmVyIixYLG5lLmxpc3RlbmVyP25lLmxpc3RlbmVyOm5lKSxfZT1LLl9ldmVudHMpLG1lPV9lW1hdKSx2b2lkIDA9PT1tZSltZT1fZVtYXT1uZSwrK0suX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIG1l''@;'; put 'put ''P21lPV9lW1hdPXNlP1tuZSxtZV06W21lLG5lXTpzZT9tZS51bnNoaWZ0KG5lKTptZS5wdXNoKG5lKSwoaGU9QShLKSk+MCYmbWUubGVuZ3RoPmhlJiYhbWUud2FybmVkKXttZS53YXJuZWQ9ITA7dmFyIEZlPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRl''@;'; put 'put ''dGVjdGVkLiAiK21lLmxlbmd0aCsiICIrU3RyaW5nKFgpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO0ZlLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsRmUuZW1pdHRlcj1LLEZlLnR5cGU9WCxG''@;'; put 'put ''ZS5jb3VudD1tZS5sZW5ndGgsZnVuY3Rpb24gaChLKXtjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihLKX0oRmUpfXJldHVybiBLfWZ1bmN0aW9uIE8oKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3Jh''@;'; put 'put ''cEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIEQoSyxYLG5lKXt2YXIgc2U9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAs''@;'; put 'put ''dGFyZ2V0OkssdHlwZTpYLGxpc3RlbmVyOm5lfSxoZT1PLmJpbmQoc2UpO3JldHVybiBoZS5saXN0ZW5lcj1uZSxzZS53cmFwRm49aGUsaGV9ZnVuY3Rpb24gRShLLFgsbmUpe3ZhciBzZT1LLl9ldmVudHM7aWYodm9pZCAwPT09c2UpcmV0dXJuW107dmFyIGhlPXNlW1hdO3JldHVybiB2b2lk''@;'; put 'put ''IDA9PT1oZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgaGU/bmU/W2hlLmxpc3RlbmVyfHxoZV06W2hlXTpuZT9mdW5jdGlvbiBIKEspe2Zvcih2YXIgWD1uZXcgQXJyYXkoSy5sZW5ndGgpLG5lPTA7bmU8WC5sZW5ndGg7KytuZSlYW25lXT1LW25lXS5saXN0ZW5lcnx8S1tuZV07cmV0dXJuIFh9''@;'; put 'put ''KGhlKTpGKGhlLGhlLmxlbmd0aCl9ZnVuY3Rpb24gQihLKXt2YXIgWD10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09WCl7dmFyIG5lPVhbS107aWYoImZ1bmN0aW9uIj09dHlwZW9mIG5lKXJldHVybiAxO2lmKHZvaWQgMCE9PW5lKXJldHVybiBuZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24g''@;'; put 'put ''RihLLFgpe2Zvcih2YXIgbmU9bmV3IEFycmF5KFgpLHNlPTA7c2U8WDsrK3NlKW5lW3NlXT1LW3NlXTtyZXR1cm4gbmV9ZnVuY3Rpb24gVShLLFgsbmUsc2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBLLm9uKXNlLm9uY2U/Sy5vbmNlKFgsbmUpOksub24oWCxuZSk7ZWxzZXtpZigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgSy5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBLKTtLLmFkZEV2ZW50TGlzdGVuZXIoWCxmdW5jdGlvbiBoZShf''@;'; put 'put ''ZSl7c2Uub25jZSYmSy5yZW1vdmVFdmVudExpc3RlbmVyKFgsaGUpLG5lKF9lKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoSSwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHNldDpmdW5jdGlvbihLKXtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIEt8fEs8MHx8byhLKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK0srIi4iKTtmPUt9fSksSS5pbml0PWZ1bmN0''@;'; put 'put ''aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21h''@;'; put 'put ''eExpc3RlbmVyc3x8dm9pZCAwfSxJLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oWCl7aWYoIm51bWJlciIhPXR5cGVvZiBYfHxYPDB8fG8oWCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9u''@;'; put 'put ''LW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytYKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1YLHRoaXN9LEkucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBBKHRoaXMpfSxJLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKFgpe2Zvcih2YXIgbmU9''@;'; put 'put ''W10sc2U9MTtzZTxhcmd1bWVudHMubGVuZ3RoO3NlKyspbmUucHVzaChhcmd1bWVudHNbc2VdKTt2YXIgaGU9ImVycm9yIj09PVgsX2U9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PV9lKWhlPWhlJiZ2b2lkIDA9PT1fZS5lcnJvcjtlbHNlIGlmKCFoZSlyZXR1cm4hMTtpZihoZSl7dmFyIG1l''@;'; put 'put ''O2lmKG5lLmxlbmd0aD4wJiYobWU9bmVbMF0pLG1lIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbWU7dmFyIEZlPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKG1lPyIgKCIrbWUubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBGZS5jb250ZXh0PW1lLEZlfXZhciBSPV9lW1hdO2lmKHZvaWQg''@;'; put 'put ''MD09PVIpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFIpZChSLHRoaXMsbmUpO2Vsc2V7dmFyIHM9Ui5sZW5ndGgsdT1GKFIscyk7Zm9yKHNlPTA7c2U8czsrK3NlKWQodVtzZV0sdGhpcyxuZSl9cmV0dXJuITB9LEkucHJvdG90eXBlLm9uPUkucHJvdG90eXBlLmFkZExpc3RlbmVy''@;'; put 'put ''PWZ1bmN0aW9uKFgsbmUpe3JldHVybiBNKHRoaXMsWCxuZSwhMSl9LEkucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihYLG5lKXtyZXR1cm4gTSh0aGlzLFgsbmUsITApfSxJLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKFgsbmUpe3JldHVybiBUKG5lKSx0aGlzLm9uKFgsRCh0''@;'; put 'put ''aGlzLFgsbmUpKSx0aGlzfSxJLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKFgsbmUpe3JldHVybiBUKG5lKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihYLEQodGhpcyxYLG5lKSksdGhpc30sSS5wcm90b3R5cGUub2ZmPUkucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1''@;'; put 'put ''bmN0aW9uKFgsbmUpe3ZhciBzZSxoZSxfZSxtZSxGZTtpZihUKG5lKSx2b2lkIDA9PT0oaGU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0oc2U9aGVbWF0pKXJldHVybiB0aGlzO2lmKHNlPT09bmV8fHNlLmxpc3RlbmVyPT09bmUpMD09LS10aGlzLl9ldmVudHNDb3Vu''@;'; put 'put ''dD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIGhlW1hdLGhlLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixYLHNlLmxpc3RlbmVyfHxuZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHNlKXtmb3IoX2U9LTEsbWU9c2UubGVu''@;'; put 'put ''Z3RoLTE7bWU+PTA7bWUtLSlpZihzZVttZV09PT1uZXx8c2VbbWVdLmxpc3RlbmVyPT09bmUpe0ZlPXNlW21lXS5saXN0ZW5lcixfZT1tZTticmVha31pZihfZTwwKXJldHVybiB0aGlzOzA9PT1fZT9zZS5zaGlmdCgpOmZ1bmN0aW9uIE4oSyxYKXtmb3IoO1grMTxLLmxlbmd0aDtYKyspS1tY''@;'; put 'put ''XT1LW1grMV07Sy5wb3AoKX0oc2UsX2UpLDE9PT1zZS5sZW5ndGgmJihoZVtYXT1zZVswXSksdm9pZCAwIT09aGUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLFgsRmV8fG5lKX1yZXR1cm4gdGhpc30sSS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1''@;'; put 'put ''bmN0aW9uKFgpe3ZhciBuZSxzZSxoZTtpZih2b2lkIDA9PT0oc2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1zZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2''@;'; put 'put ''ZW50c0NvdW50PTApOnZvaWQgMCE9PXNlW1hdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgc2VbWF0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBtZSxfZT1PYmplY3Qua2V5cyhzZSk7Zm9yKGhlPTA7''@;'; put 'put ''aGU8X2UubGVuZ3RoOysraGUpInJlbW92ZUxpc3RlbmVyIiE9PShtZT1fZVtoZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhtZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMu''@;'; put 'put ''X2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YobmU9c2VbWF0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoWCxuZSk7ZWxzZSBpZih2b2lkIDAhPT1uZSlmb3IoaGU9bmUubGVuZ3RoLTE7aGU+PTA7aGUtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKFgsbmVbaGVdKTtyZXR1cm4g''@;'; put 'put ''dGhpc30sSS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKFgpe3JldHVybiBFKHRoaXMsWCwhMCl9LEkucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihYKXtyZXR1cm4gRSh0aGlzLFgsITEpfSxJLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oSyxYKXtyZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgSy5saXN0ZW5lckNvdW50P0subGlzdGVuZXJDb3VudChYKTpCLmNhbGwoSyxYKX0sSS5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1CLEkucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9TKHRoaXMuX2V2ZW50cyk6W119''@;'; put 'put ''fSwxODIxMSh0ZSxqLGQpe3ZhciBTPWQoMjcwNTQpLkJ1ZmZlcixoPWQoMzQ3MjUpO3RlLmV4cG9ydHM9ZnVuY3Rpb24gbyhJLGYsVCxBKXtpZihTLmlzQnVmZmVyKEkpfHwoST1TLmZyb20oSSwiYmluYXJ5IikpLGYmJihTLmlzQnVmZmVyKGYpfHwoZj1TLmZyb20oZiwiYmluYXJ5IikpLDgh''@;'; put 'put ''PT1mLmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIE09VC84LE89Uy5hbGxvYyhNKSxEPVMuYWxsb2MoQXx8MCksRT1TLmFsbG9jKDApO00+MHx8QT4wOyl7dmFyIEI9bmV3IGg7Qi51cGRhdGUo''@;'; put 'put ''RSksQi51cGRhdGUoSSksZiYmQi51cGRhdGUoZiksRT1CLmRpZ2VzdCgpO3ZhciBGPTA7aWYoTT4wKXt2YXIgTj1PLmxlbmd0aC1NO0Y9TWF0aC5taW4oTSxFLmxlbmd0aCksRS5jb3B5KE8sTiwwLEYpLE0tPUZ9aWYoRjxFLmxlbmd0aCYmQT4wKXt2YXIgSD1ELmxlbmd0aC1BLHo9TWF0aC5t''@;'; put 'put ''aW4oQSxFLmxlbmd0aC1GKTtFLmNvcHkoRCxILEYsRit6KSxBLT16fX1yZXR1cm4gRS5maWxsKDApLHtrZXk6TyxpdjpEfX19LDg5OTk5KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTgyMzkpLGg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvPU9iamVjdC5wcm90b3R5cGUuaGFz''@;'; put 'put ''T3duUHJvcGVydHk7dGUuZXhwb3J0cz1mdW5jdGlvbihPLEQsRSl7aWYoIVMoRCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIEI7YXJndW1lbnRzLmxlbmd0aD49MyYmKEI9RSksZnVuY3Rpb24gQShNKXtyZXR1cm4iW29iamVjdCBBcnJh''@;'; put 'put ''eV0iPT09aC5jYWxsKE0pfShPKT9mdW5jdGlvbihPLEQsRSl7Zm9yKHZhciBCPTAsRj1PLmxlbmd0aDtCPEY7QisrKW8uY2FsbChPLEIpJiYobnVsbD09RT9EKE9bQl0sQixPKTpELmNhbGwoRSxPW0JdLEIsTykpfShPLEQsQik6InN0cmluZyI9PXR5cGVvZiBPP2Z1bmN0aW9uKE8sRCxFKXtm''@;'; put 'put ''b3IodmFyIEI9MCxGPU8ubGVuZ3RoO0I8RjtCKyspbnVsbD09RT9EKE8uY2hhckF0KEIpLEIsTyk6RC5jYWxsKEUsTy5jaGFyQXQoQiksQixPKX0oTyxELEIpOmZ1bmN0aW9uKE8sRCxFKXtmb3IodmFyIEIgaW4gTylvLmNhbGwoTyxCKSYmKG51bGw9PUU/RChPW0JdLEIsTyk6RC5jYWxsKEUs''@;'; put 'put ''T1tCXSxCLE8pKX0oTyxELEIpfX0sNDkxMzIodGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFM9TWF0aC5tYXgsbz1mdW5jdGlvbihBLE0pe2Zvcih2YXIgTz1bXSxEPTA7RDxBLmxlbmd0aDtEKz0xKU9bRF09QVtEXTtmb3IodmFyIEU9MDtFPE0ubGVu''@;'; put 'put ''Z3RoO0UrPTEpT1tFK0EubGVuZ3RoXT1NW0VdO3JldHVybiBPfTt0ZS5leHBvcnRzPWZ1bmN0aW9uKEEpe3ZhciBNPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE18fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1kLmFwcGx5KE0pKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3Rv''@;'; put 'put ''dHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitNKTtmb3IodmFyIEQsTz1mdW5jdGlvbihBKXtmb3IodmFyIE89W10sRD0xLEU9MDtEPEEubGVuZ3RoO0QrPTEsRSs9MSlPW0VdPUFbRF07cmV0dXJuIE99KGFyZ3VtZW50cyksQj1TKDAsTS5sZW5ndGgtTy5sZW5ndGgpLEY9W10s''@;'; put 'put ''Tj0wO048QjtOKyspRltOXT0iJCIrTjtpZihEPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4gZnVuY3Rpb24gKCIrZnVuY3Rpb24oVCl7Zm9yKHZhciBNPSIiLE89MDtPPFQubGVuZ3RoO08rPTEpTSs9VFtPXSxPKzE8VC5sZW5ndGgmJihNKz0iLCIpO3JldHVybiBNfShGKSsiKXsgcmV0dXJu''@;'; put 'put ''IGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBEKXt2YXIgej1NLmFwcGx5KHRoaXMsbyhPLGFyZ3VtZW50cykpO3JldHVybiBPYmplY3Qoeik9PT16P3o6dGhpc31yZXR1cm4gTS5hcHBseShBLG8oTyxhcmd1bWVudHMpKX0p''@;'; put 'put ''LE0ucHJvdG90eXBlKXt2YXIgSD1mdW5jdGlvbigpe307SC5wcm90b3R5cGU9TS5wcm90b3R5cGUsRC5wcm90b3R5cGU9bmV3IEgsSC5wcm90b3R5cGU9bnVsbH1yZXR1cm4gRH19LDY1OTkyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDkxMzIpO3RlLmV4cG9ydHM9RnVuY3Rpb24u''@;'; put 'put ''cHJvdG90eXBlLmJpbmR8fFN9LDkwMjU4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTLGg9ZCg2NTg5MSksbz1kKDM3NjQwKSxJPWQoMTc1NiksZj1kKDc3OTMzKSxUPWQoNjYxMyksQT1kKDU4NDEzKSxNPWQoNDY3NTgpLE89ZCg1Mjg2KSxEPWQoNzA4MzcpLEU9ZCgzMzgzKSxCPWQoNzkw''@;'; put 'put ''MzkpLEY9ZCgxNDk4MSksTj1kKDgwOTc1KSxIPWQoNTMzNyksej1kKDQ5MTIpLFo9RnVuY3Rpb24sVT1mdW5jdGlvbih1ZSl7dHJ5e3JldHVybiBaKCcidXNlIHN0cmljdCI7IHJldHVybiAoJyt1ZSsiKS5jb25zdHJ1Y3RvcjsiKSgpfWNhdGNoe319LEs9ZCg4Mzc5OCksWD1kKDQ1NzApLG5l''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IE19LHNlPUs/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5lfWNhdGNoe3RyeXtyZXR1cm4gSyhhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaHtyZXR1cm4gbmV9fX0oKTpuZSxoZT1kKDE5OTAwKSgpLF9lPWQoOTE2MjcpLG1lPWQoMjcyMDMpLEZlPWQo''@;'; put 'put ''OTc2NjkpLFI9ZCg3OTQ3Nykscz1kKDU5NzA1KSx1PXt9LHY9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhX2U/UzpfZShVaW50OEFycmF5KSxwPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9TOkFnZ3JlZ2F0ZUVycm9yLCIlQXJy''@;'; put 'put ''YXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9TOkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOmhlJiZfZT9fZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOlMsIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpTLCIl''@;'; put 'put ''QXN5bmNGdW5jdGlvbiUiOnUsIiVBc3luY0dlbmVyYXRvciUiOnUsIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6dSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp1LCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9TOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1''@;'; put 'put ''Ij9TOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/UzpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP1M6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6''@;'; put 'put ''dHlwZW9mIERhdGFWaWV3PiJ1Ij9TOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVV''@;'; put 'put ''UklDb21wb25lbnQsIiVFcnJvciUiOm8sIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkksIiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9TOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP1M6RmxvYXQzMkFycmF5''@;'; put 'put ''LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/UzpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/UzpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6WiwiJUdlbmVyYXRvckZ1''@;'; put 'put ''bmN0aW9uJSI6dSwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP1M6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij9TOkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP1M6SW50MzJBcnJheSwiJWlzRmlu''@;'; put 'put ''aXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpoZSYmX2U/X2UoX2UoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6UywiJUpTT04lIjoib2JqZWN0Ij09dHlwZW9mIEpTT04/SlNPTjpTLCIlTWFwJSI6dHlwZW9mIE1hcD4idSI/UzpNYXAsIiVNYXBJ''@;'; put 'put ''dGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA+InUifHwhaGV8fCFfZT9TOl9lKChuZXcgTWFwKVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpoLCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiOkssIiVw''@;'; put 'put ''YXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP1M6UHJvbWlzZSwiJVByb3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij9TOlByb3h5LCIlUmFuZ2VFcnJvciUiOmYsIiVSZWZlcmVuY2VFcnJvciUiOlQsIiVSZWZs''@;'; put 'put ''ZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP1M6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwiJVNldCUiOnR5cGVvZiBTZXQ+InUiP1M6U2V0LCIlU2V0SXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgU2V0PiJ1Inx8IWhlfHwhX2U/UzpfZSgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgp''@;'; put 'put ''KSwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij9TOlNoYXJlZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlIjpoZSYmX2U/X2UoIiJbU3ltYm9sLml0ZXJhdG9yXSgpKTpTLCIlU3ltYm9sJSI6''@;'; put 'put ''aGU/U3ltYm9sOlMsIiVTeW50YXhFcnJvciUiOkEsIiVUaHJvd1R5cGVFcnJvciUiOnNlLCIlVHlwZWRBcnJheSUiOnYsIiVUeXBlRXJyb3IlIjpNLCIlVWludDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij9TOlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBV''@;'; put 'put ''aW50OENsYW1wZWRBcnJheT4idSI/UzpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij9TOlVpbnQxNkFycmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP1M6VWludDMyQXJyYXksIiVVUklFcnJvciUiOk8sIiVX''@;'; put 'put ''ZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP1M6V2Vha01hcCwiJVdlYWtSZWYlIjp0eXBlb2YgV2Vha1JlZj4idSI/UzpXZWFrUmVmLCIlV2Vha1NldCUiOnR5cGVvZiBXZWFrU2V0PiJ1Ij9TOldlYWtTZXQsIiVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUiOnMsIiVGdW5jdGlvbi5wcm90''@;'; put 'put ''b3R5cGUuYXBwbHklIjpSLCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSI6WCwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOm1lLCIlTWF0aC5hYnMlIjpELCIlTWF0aC5mbG9vciUiOkUsIiVNYXRoLm1heCUiOkIsIiVNYXRoLm1pbiUiOkYsIiVNYXRoLnBvdyUiOk4sIiVNYXRoLnJvdW5kJSI6''@;'; put 'put ''SCwiJU1hdGguc2lnbiUiOnosIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6RmV9O2lmKF9lKXRyeXtudWxsLmVycm9yfWNhdGNoKHVlKXt2YXIgXz1fZShfZSh1ZSkpO3BbIiVFcnJvci5wcm90b3R5cGUlIl09X312YXIgaz1mdW5jdGlvbiB1ZSh6ZSl7dmFyIE9lO2lmKCIlQXN5bmNGdW5j''@;'; put 'put ''dGlvbiUiPT09emUpT2U9VSgiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PXplKU9lPVUoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT16ZSlPZT1VKCJhc3luYyBmdW5jdGlvbiogKCkg''@;'; put 'put ''e30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PXplKXt2YXIgQ2U9dWUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO0NlJiYoT2U9Q2UucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09emUpe3ZhciBrZT11ZSgiJUFzeW5jR2VuZXJhdG9y''@;'; put 'put ''JSIpO2tlJiZfZSYmKE9lPV9lKGtlLnByb3RvdHlwZSkpfXJldHVybiBwW3plXT1PZSxPZX0sTD17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJd''@;'; put 'put ''LCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJy''@;'; put 'put ''YXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIl''@;'; put 'put ''QXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlw''@;'; put 'put ''ZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9h''@;'; put 'put ''dDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90''@;'; put 'put ''b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5Iiwi''@;'; put 'put ''cHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5''@;'; put 'put ''cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9m''@;'; put 'put ''JSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxs''@;'; put 'put ''Il0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpb''@;'; put 'put ''IlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInBy''@;'; put 'put ''b3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90''@;'; put 'put ''b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUi''@;'; put 'put ''OlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsi''@;'; put 'put ''VVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0seT1kKDY1OTkyKSxsPWQoNzgzNjgpLGI9eS5jYWxsKHMsQXJyYXkucHJvdG90eXBlLmNv''@;'; put 'put ''bmNhdCkscT15LmNhbGwoUixBcnJheS5wcm90b3R5cGUuc3BsaWNlKSxHPXkuY2FsbChzLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksUT15LmNhbGwocyxTdHJpbmcucHJvdG90eXBlLnNsaWNlKSxwZT15LmNhbGwocyxSZWdFeHAucHJvdG90eXBlLmV4ZWMpLFBlPS9bXiUuW1xdXSt8XFso''@;'; put 'put ''PzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csWmU9L1xcKFxcKT8vZyx2ZT1mdW5jdGlvbih6ZSxPZSl7dmFyIGtlLENlPXplO2lmKGwoTCxDZSkmJihDZT0iJSIrKGtlPUxbQ2VdKVsw''@;'; put 'put ''XSsiJSIpLGwocCxDZSkpe3ZhciB4ZT1wW0NlXTtpZih4ZT09PXUmJih4ZT1rKENlKSksdHlwZW9mIHhlPiJ1IiYmIU9lKXRocm93IG5ldyBNKCJpbnRyaW5zaWMgIit6ZSsiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlh''@;'; put 'put ''czprZSxuYW1lOkNlLHZhbHVlOnhlfX10aHJvdyBuZXcgQSgiaW50cmluc2ljICIremUrIiBkb2VzIG5vdCBleGlzdCEiKX07dGUuZXhwb3J0cz1mdW5jdGlvbih6ZSxPZSl7aWYoInN0cmluZyIhPXR5cGVvZiB6ZXx8MD09PXplLmxlbmd0aCl0aHJvdyBuZXcgTSgiaW50cmluc2ljIG5hbWUg''@;'; put 'put ''bXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIE9lKXRocm93IG5ldyBNKCciYWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT1wZSgvXiU/W14lXSolPyQvLHplKSl0aHJv''@;'; put 'put ''dyBuZXcgQSgiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBDZT1mdW5jdGlvbih6ZSl7dmFyIE9lPVEoemUsMCwxKSxDZT1RKHplLC0xKTtpZigiJSI9PT1PZSYmIiUiIT09Q2Up''@;'; put 'put ''dGhyb3cgbmV3IEEoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigiJSI9PT1DZSYmIiUiIT09T2UpdGhyb3cgbmV3IEEoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAiKTt2YXIga2U9W107cmV0dXJuIEco''@;'; put 'put ''emUsUGUsZnVuY3Rpb24oeGUsTWUsSWUsYmUpe2tlW2tlLmxlbmd0aF09SWU/RyhiZSxaZSwiJDEiKTpNZXx8eGV9KSxrZX0oemUpLGtlPUNlLmxlbmd0aD4wP0NlWzBdOiIiLHhlPXZlKCIlIitrZSsiJSIsT2UpLE1lPXhlLm5hbWUsSWU9eGUudmFsdWUsYmU9ITEsd2U9eGUuYWxpYXM7d2Um''@;'; put 'put ''JihrZT13ZVswXSxxKENlLGIoWzAsMV0sd2UpKSk7Zm9yKHZhciBwdD0xLEtlPSEwO3B0PENlLmxlbmd0aDtwdCs9MSl7dmFyIFllPUNlW3B0XSxxdD1RKFllLDAsMSksaHQ9UShZZSwtMSk7aWYoKCciJz09PXF0fHwiJyI9PT1xdHx8ImAiPT09cXR8fCciJz09PWh0fHwiJyI9PT1odHx8ImAi''@;'; put 'put ''PT09aHQpJiZxdCE9PWh0KXRocm93IG5ldyBBKCJwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzIik7aWYoKCJjb25zdHJ1Y3RvciI9PT1ZZXx8IUtlKSYmKGJlPSEwKSxsKHAsTWU9IiUiKyhrZSs9Ii4iK1llKSsiJSIpKUllPXBbTWVdO2Vsc2Ug''@;'; put 'put ''aWYobnVsbCE9SWUpe2lmKCEoWWUgaW4gSWUpKXtpZighT2UpdGhyb3cgbmV3IE0oImJhc2UgaW50cmluc2ljIGZvciAiK3plKyIgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuIik7cmV0dXJufWlmKEsmJnB0KzE+PUNlLmxlbmd0aCl7dmFyIHZ0PUsoSWUsWWUp''@;'; put 'put ''O0llPShLZT0hIXZ0KSYmImdldCJpbiB2dCYmISgib3JpZ2luYWxWYWx1ZSJpbiB2dC5nZXQpP3Z0LmdldDpJZVtZZV19ZWxzZSBLZT1sKEllLFllKSxJZT1JZVtZZV07S2UmJiFiZSYmKHBbTWVdPUllKX19cmV0dXJuIEllfX0sMjcyMDModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg2''@;'; put 'put ''NTg5MSk7dGUuZXhwb3J0cz1TLmdldFByb3RvdHlwZU9mfHxudWxsfSw5NzY2OSh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldFByb3RvdHlwZU9mfHxudWxsfSw5MTYyNyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk3NjY5''@;'; put 'put ''KSxoPWQoMjcyMDMpLG89ZCg2MzM2MSk7dGUuZXhwb3J0cz1TP2Z1bmN0aW9uKGYpe3JldHVybiBTKGYpfTpoP2Z1bmN0aW9uKGYpe2lmKCFmfHwib2JqZWN0IiE9dHlwZW9mIGYmJiJmdW5jdGlvbiIhPXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoImdldFByb3RvOiBub3QgYW4gb2Jq''@;'; put 'put ''ZWN0Iik7cmV0dXJuIGgoZil9Om8/ZnVuY3Rpb24oZil7cmV0dXJuIG8oZil9Om51bGx9LDUyNzg2KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfSw4Mzc5OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDUyNzg2KTtpZihT''@;'; put 'put ''KXRyeXtTKFtdLCJsZW5ndGgiKX1jYXRjaHtTPW51bGx9dGUuZXhwb3J0cz1TfSwzNTg2MSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ1NzApLGg9ZnVuY3Rpb24oKXtyZXR1cm4hIVN9O2guaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWc9ZnVuY3Rpb24oKXtpZighUylyZXR1cm4gbnVs''@;'; put 'put ''bDt0cnl7cmV0dXJuIDEhPT1TKFtdLCJsZW5ndGgiLHt2YWx1ZToxfSkubGVuZ3RofWNhdGNoe3JldHVybiEwfX0sdGUuZXhwb3J0cz1ofSwxOTkwMCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLGg9ZCg0NTMxMCk7dGUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFMoImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJmgoKX19LDQ1MzEwKHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBkPXt9LFM9U3ltYm9sKCJ0ZXN0Iiks''@;'; put 'put ''aD1PYmplY3QoUyk7aWYoInN0cmluZyI9PXR5cGVvZiBTfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaCkpcmV0dXJuITE7Zm9yKHZhciBJIGlu''@;'; put 'put ''IGRbU109NDIsZClyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyhkKS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGQpLmxl''@;'; put 'put ''bmd0aClyZXR1cm4hMTt2YXIgZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGQpO2lmKDEhPT1mLmxlbmd0aHx8ZlswXSE9PVN8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZCxTKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0''@;'; put 'put ''LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIFQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLFMpO2lmKDQyIT09VC52YWx1ZXx8ITAhPT1ULmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw4ODc3OSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ1MzEw''@;'; put 'put ''KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwxMzY4Nih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI3MDU0KS5CdWZmZXIsaD1kKDcwNDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBJKE0pe2guY2FsbCh0aGlzKSx0aGlzLl9ibG9j''@;'; put 'put ''az1TLmFsbG9jVW5zYWZlKE0pLHRoaXMuX2Jsb2NrU2l6ZT1NLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9ZCg3MTk5MykoSSxoKSxJLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE0sTyxEKXt2YXIgRT1udWxsO3Ry''@;'; put 'put ''eXt0aGlzLnVwZGF0ZShNLE8pfWNhdGNoKEIpe0U9Qn1EKEUpfSxJLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oTSl7dmFyIE89bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKEQpe089RH1NKE8pfTt2YXIgZj10eXBlb2YgVWludDhBcnJheTwidSIsVD10eXBlb2Yg''@;'; put 'put ''QXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKFMucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8Uy5UWVBFRF9BUlJBWV9TVVBQT1JUKTtJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTSxPKXtpZih0aGlzLl9maW5h''@;'; put 'put ''bGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtNPWZ1bmN0aW9uIEEoTSxPKXtpZihNIGluc3RhbmNlb2YgUylyZXR1cm4gTTtpZigic3RyaW5nIj09dHlwZW9mIE0pcmV0dXJuIFMuZnJvbShNLE8pO2lmKFQmJkFycmF5QnVmZmVyLmlzVmlldyhNKSl7aWYo''@;'; put 'put ''MD09PU0uYnl0ZUxlbmd0aClyZXR1cm4gUy5hbGxvYygwKTt2YXIgRD1TLmZyb20oTS5idWZmZXIsTS5ieXRlT2Zmc2V0LE0uYnl0ZUxlbmd0aCk7aWYoRC5ieXRlTGVuZ3RoPT09TS5ieXRlTGVuZ3RoKXJldHVybiBEfWlmKGYmJk0gaW5zdGFuY2VvZiBVaW50OEFycmF5fHxTLmlzQnVmZmVy''@;'; put 'put ''KE0pJiZNLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmTS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihNKSlyZXR1cm4gUy5mcm9tKE0pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0''@;'; put 'put ''cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShNLE8pO2Zvcih2YXIgRD10aGlzLl9ibG9jayxFPTA7dGhpcy5fYmxvY2tPZmZzZXQrTS5sZW5ndGgtRT49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBCPXRoaXMuX2Jsb2NrT2Zmc2V0''@;'; put 'put ''O0I8dGhpcy5fYmxvY2tTaXplOylEW0IrK109TVtFKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtFPE0ubGVuZ3RoOylEW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU1bRSsrXTtmb3IodmFyIEY9MCxOPTgqTS5sZW5ndGg7Tj4wOysrRil0aGlzLl9sZW5ndGhbRl0r''@;'; put 'put ''PU4sKE49dGhpcy5fbGVuZ3RoW0ZdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtGXS09NDI5NDk2NzI5NipOKTtyZXR1cm4gdGhpc30sSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sSS5w''@;'; put 'put ''cm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE0pe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgTz10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1NJiYoTz1PLnRvU3RyaW5nKE0pKSx0aGlzLl9i''@;'; put 'put ''bG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBEPTA7RDw0OysrRCl0aGlzLl9sZW5ndGhbRF09MDtyZXR1cm4gT30sSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdGUuZXhw''@;'; put 'put ''b3J0cz1JfSw1MjUyOSh0ZSxqLGQpe3ZhciBTPWo7Uy51dGlscz1kKDY4MjgzKSxTLmNvbW1vbj1kKDEyOTAxKSxTLnNoYT1kKDc4NTI4KSxTLnJpcGVtZD1kKDE1MjgzKSxTLmhtYWM9ZCgzNzE2MyksUy5zaGExPVMuc2hhLnNoYTEsUy5zaGEyNTY9Uy5zaGEuc2hhMjU2LFMuc2hhMjI0PVMu''@;'; put 'put ''c2hhLnNoYTIyNCxTLnNoYTM4ND1TLnNoYS5zaGEzODQsUy5zaGE1MTI9Uy5zaGEuc2hhNTEyLFMucmlwZW1kMTYwPVMucmlwZW1kLnJpcGVtZDE2MH0sMTI5MDEodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg2ODI4MyksaD1kKDM5MjEwKTtmdW5jdGlvbiBvKCl7dGhpcy5wZW5kaW5n''@;'; put 'put ''PW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVu''@;'; put 'put ''Z3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1qLkJsb2NrSGFzaD1vLG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihmLFQpe2lmKGY9''@;'; put 'put ''Uy50b0FycmF5KGYsVCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KGYpOmYsdGhpcy5wZW5kaW5nVG90YWwrPWYubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEE9KGY9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5f''@;'; put 'put ''ZGVsdGE4O3RoaXMucGVuZGluZz1mLnNsaWNlKGYubGVuZ3RoLUEsZi5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLGY9Uy5qb2luMzIoZiwwLGYubGVuZ3RoLUEsdGhpcy5lbmRpYW4pO2Zvcih2YXIgTT0wO008Zi5sZW5ndGg7TSs9dGhpcy5f''@;'; put 'put ''ZGVsdGEzMil0aGlzLl91cGRhdGUoZixNLE0rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLGgobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KGYpfSxvLnByb3Rv''@;'; put 'put ''dHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcy5wZW5kaW5nVG90YWwsVD10aGlzLl9kZWx0YTgsQT1ULShmK3RoaXMucGFkTGVuZ3RoKSVULE09bmV3IEFycmF5KEErdGhpcy5wYWRMZW5ndGgpO01bMF09MTI4O2Zvcih2YXIgTz0xO088QTtPKyspTVtPXT0wO2lmKGY8PD0zLCJiaWci''@;'; put 'put ''PT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgRD04O0Q8dGhpcy5wYWRMZW5ndGg7RCsrKU1bTysrXT0wO01bTysrXT0wLE1bTysrXT0wLE1bTysrXT0wLE1bTysrXT0wLE1bTysrXT1mPj4+MjQmMjU1LE1bTysrXT1mPj4+MTYmMjU1LE1bTysrXT1mPj4+OCYyNTUsTVtPKytdPTI1NSZmfWVsc2Ug''@;'; put 'put ''Zm9yKE1bTysrXT0yNTUmZixNW08rK109Zj4+PjgmMjU1LE1bTysrXT1mPj4+MTYmMjU1LE1bTysrXT1mPj4+MjQmMjU1LE1bTysrXT0wLE1bTysrXT0wLE1bTysrXT0wLE1bTysrXT0wLEQ9ODtEPHRoaXMucGFkTGVuZ3RoO0QrKylNW08rK109MDtyZXR1cm4gTX19LDM3MTYzKHRlLGosZCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBTPWQoNjgyODMpLGg9ZCgzOTIxMCk7ZnVuY3Rpb24gbyhJLGYsVCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKEksZixUKTt0aGlzLkhhc2g9SSx0aGlzLmJsb2NrU2l6ZT1JLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1JLm91dFNpemUv''@;'; put 'put ''OCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoUy50b0FycmF5KGYsVCkpfXRlLmV4cG9ydHM9byxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihmKXtmLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKGY9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShmKS5kaWdlc3Qo''@;'; put 'put ''KSksaChmLmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgVD1mLmxlbmd0aDtUPHRoaXMuYmxvY2tTaXplO1QrKylmLnB1c2goMCk7Zm9yKFQ9MDtUPGYubGVuZ3RoO1QrKylmW1RdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGYpLFQ9MDtUPGYubGVu''@;'; put 'put ''Z3RoO1QrKylmW1RdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGYpfSxvLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZixUKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoZixUKSx0aGlzfSxvLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZil7cmV0dXJuIHRo''@;'; put 'put ''aXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KGYpfX0sMTUyODModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg2ODI4MyksaD1kKDEyOTAxKSxvPVMucm90bDMyLEk9Uy5zdW0zMixmPVMuc3VtMzJfMyxUPVMuc3VtMzJfNCxBPWguQmxv''@;'; put 'put ''Y2tIYXNoO2Z1bmN0aW9uIE0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBNKSlyZXR1cm4gbmV3IE07QS5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIE8o''@;'; put 'put ''eixaLFUsSyl7cmV0dXJuIHo8PTE1P1peVV5LOno8PTMxP1omVXx+WiZLOno8PTQ3PyhafH5VKV5LOno8PTYzP1omS3xVJn5LOlpeKFV8fkspfWZ1bmN0aW9uIEUoeil7cmV0dXJuIHo8PTE1PzEzNTI4Mjk5MjY6ejw9MzE/MTU0ODYwMzY4NDp6PD00Nz8xODM2MDcyNjkxOno8PTYzPzIwNTM5''@;'; put 'put ''OTQyMTc6MH1TLmluaGVyaXRzKE0sQSksai5yaXBlbWQxNjA9TSxNLmJsb2NrU2l6ZT01MTIsTS5vdXRTaXplPTE2MCxNLmhtYWNTdHJlbmd0aD0xOTIsTS5wYWRMZW5ndGg9NjQsTS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihaLFUpe2Zvcih2YXIgSz10aGlzLmhbMF0sWD10aGlzLmhb''@;'; put 'put ''MV0sbmU9dGhpcy5oWzJdLHNlPXRoaXMuaFszXSxoZT10aGlzLmhbNF0sX2U9SyxtZT1YLEZlPW5lLFI9c2Uscz1oZSx1PTA7dTw4MDt1Kyspe3ZhciB2PUkobyhUKEssTyh1LFgsbmUsc2UpLFpbQlt1XStVXSwoej11KTw9MTU/MDp6PD0zMT8xNTE4NTAwMjQ5Ono8PTQ3PzE4NTk3NzUzOTM6''@;'; put 'put ''ejw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4KSxOW3VdKSxoZSk7Sz1oZSxoZT1zZSxzZT1vKG5lLDEwKSxuZT1YLFg9dix2PUkobyhUKF9lLE8oNzktdSxtZSxGZSxSKSxaW0ZbdV0rVV0sRSh1KSksSFt1XSkscyksX2U9cyxzPVIsUj1vKEZlLDEwKSxGZT1tZSxtZT12fXZhciB6O3Y9Zih0''@;'; put 'put ''aGlzLmhbMV0sbmUsUiksdGhpcy5oWzFdPWYodGhpcy5oWzJdLHNlLHMpLHRoaXMuaFsyXT1mKHRoaXMuaFszXSxoZSxfZSksdGhpcy5oWzNdPWYodGhpcy5oWzRdLEssbWUpLHRoaXMuaFs0XT1mKHRoaXMuaFswXSxYLEZlKSx0aGlzLmhbMF09dn0sTS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j''@;'; put 'put ''dGlvbihaKXtyZXR1cm4iaGV4Ij09PVo/Uy50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6Uy5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBCPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywx''@;'; put 'put ''MCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLEY9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwx''@;'; put 'put ''Myw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sTj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwx''@;'; put 'put ''MSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwx''@;'; put 'put ''MywxNCwxMSw4LDUsNl0sSD1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEy''@;'; put 'put ''LDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDc4NTI4KHRlLGosZCl7InVzZSBzdHJpY3QiO2ouc2hhMT1kKDMzNDY4KSxqLnNoYTIyND1kKDU1NjMpLGouc2hhMjU2PWQoMjcxMzgpLGouc2hhMzg0PWQoOTM4OTgpLGouc2hhNTEyPWQoMTA4''@;'; put 'put ''MjcpfSwzMzQ2OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY4MjgzKSxoPWQoMTI5MDEpLG89ZCg5NTU0MiksST1TLnJvdGwzMixmPVMuc3VtMzIsVD1TLnN1bTMyXzUsQT1vLmZ0XzEsTT1oLkJsb2NrSGFzaCxPPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1''@;'; put 'put ''NDY5NzgyXTtmdW5jdGlvbiBEKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgRCkpcmV0dXJuIG5ldyBEO00uY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1TLmluaGVyaXRz''@;'; put 'put ''KEQsTSksdGUuZXhwb3J0cz1ELEQuYmxvY2tTaXplPTUxMixELm91dFNpemU9MTYwLEQuaG1hY1N0cmVuZ3RoPTgwLEQucGFkTGVuZ3RoPTY0LEQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQixGKXtmb3IodmFyIE49dGhpcy5XLEg9MDtIPDE2O0grKylOW0hdPUJbRitIXTtmb3IoO0g8''@;'; put 'put ''Ti5sZW5ndGg7SCsrKU5bSF09SShOW0gtM11eTltILThdXk5bSC0xNF1eTltILTE2XSwxKTt2YXIgej10aGlzLmhbMF0sWj10aGlzLmhbMV0sVT10aGlzLmhbMl0sSz10aGlzLmhbM10sWD10aGlzLmhbNF07Zm9yKEg9MDtIPE4ubGVuZ3RoO0grKyl7dmFyIG5lPX5+KEgvMjApLHNlPVQoSSh6''@;'; put 'put ''LDUpLEEobmUsWixVLEspLFgsTltIXSxPW25lXSk7WD1LLEs9VSxVPUkoWiwzMCksWj16LHo9c2V9dGhpcy5oWzBdPWYodGhpcy5oWzBdLHopLHRoaXMuaFsxXT1mKHRoaXMuaFsxXSxaKSx0aGlzLmhbMl09Zih0aGlzLmhbMl0sVSksdGhpcy5oWzNdPWYodGhpcy5oWzNdLEspLHRoaXMuaFs0''@;'; put 'put ''XT1mKHRoaXMuaFs0XSxYKX0sRC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihCKXtyZXR1cm4iaGV4Ij09PUI/Uy50b0hleDMyKHRoaXMuaCwiYmlnIik6Uy5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw1NTYzKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNjgyODMpLGg9ZCgyNzEz''@;'; put 'put ''OCk7ZnVuY3Rpb24gbygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbztoLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1TLmlu''@;'; put 'put ''aGVyaXRzKG8saCksdGUuZXhwb3J0cz1vLG8uYmxvY2tTaXplPTUxMixvLm91dFNpemU9MjI0LG8uaG1hY1N0cmVuZ3RoPTE5MixvLnBhZExlbmd0aD02NCxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGYpe3JldHVybiJoZXgiPT09Zj9TLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyks''@;'; put 'put ''ImJpZyIpOlMuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSwyNzEzOCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY4MjgzKSxoPWQoMTI5MDEpLG89ZCg5NTU0MiksST1kKDM5MjEwKSxmPVMuc3VtMzIsVD1TLnN1bTMyXzQsQT1TLnN1bTMyXzUsTT1vLmNoMzIsTz1v''@;'; put 'put ''Lm1hajMyLEQ9by5zMF8yNTYsRT1vLnMxXzI1NixCPW8uZzBfMjU2LEY9by5nMV8yNTYsTj1oLkJsb2NrSGFzaCxIPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgw''@;'; put 'put ''LDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0''@;'; put 'put ''MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYw''@;'; put 'put ''MzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0''@;'; put 'put ''Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIHooKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHo7Ti5jYWxsKHRoaXMpLHRoaXMu''@;'; put 'put ''aD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1ILHRoaXMuVz1uZXcgQXJyYXkoNjQpfVMuaW5oZXJpdHMoeixOKSx0ZS5leHBvcnRzPXosei5ibG9ja1NpemU9NTEy''@;'; put 'put ''LHoub3V0U2l6ZT0yNTYsei5obWFjU3RyZW5ndGg9MTkyLHoucGFkTGVuZ3RoPTY0LHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSxLKXtmb3IodmFyIFg9dGhpcy5XLG5lPTA7bmU8MTY7bmUrKylYW25lXT1VW0srbmVdO2Zvcig7bmU8WC5sZW5ndGg7bmUrKylYW25lXT1UKEYoWFtu''@;'; put 'put ''ZS0yXSksWFtuZS03XSxCKFhbbmUtMTVdKSxYW25lLTE2XSk7dmFyIHNlPXRoaXMuaFswXSxoZT10aGlzLmhbMV0sX2U9dGhpcy5oWzJdLG1lPXRoaXMuaFszXSxGZT10aGlzLmhbNF0sUj10aGlzLmhbNV0scz10aGlzLmhbNl0sdT10aGlzLmhbN107Zm9yKEkodGhpcy5rLmxlbmd0aD09PVgu''@;'; put 'put ''bGVuZ3RoKSxuZT0wO25lPFgubGVuZ3RoO25lKyspe3ZhciB2PUEodSxFKEZlKSxNKEZlLFIscyksdGhpcy5rW25lXSxYW25lXSkscD1mKEQoc2UpLE8oc2UsaGUsX2UpKTt1PXMscz1SLFI9RmUsRmU9ZihtZSx2KSxtZT1fZSxfZT1oZSxoZT1zZSxzZT1mKHYscCl9dGhpcy5oWzBdPWYodGhp''@;'; put 'put ''cy5oWzBdLHNlKSx0aGlzLmhbMV09Zih0aGlzLmhbMV0saGUpLHRoaXMuaFsyXT1mKHRoaXMuaFsyXSxfZSksdGhpcy5oWzNdPWYodGhpcy5oWzNdLG1lKSx0aGlzLmhbNF09Zih0aGlzLmhbNF0sRmUpLHRoaXMuaFs1XT1mKHRoaXMuaFs1XSxSKSx0aGlzLmhbNl09Zih0aGlzLmhbNl0scyks''@;'; put 'put ''dGhpcy5oWzddPWYodGhpcy5oWzddLHUpfSx6LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFUpe3JldHVybiJoZXgiPT09VT9TLnRvSGV4MzIodGhpcy5oLCJiaWciKTpTLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDkzODk4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNjgyODMp''@;'; put 'put ''LGg9ZCgxMDgyNyk7ZnVuY3Rpb24gbygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbztoLmNhbGwodGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2''@;'; put 'put ''OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XX1TLmluaGVyaXRzKG8saCksdGUuZXhwb3J0cz1vLG8uYmxvY2tTaXplPTEwMjQsby5vdXRTaXplPTM4NCxvLmhtYWNTdHJlbmd0''@;'; put 'put ''aD0xOTIsby5wYWRMZW5ndGg9MTI4LG8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZil7cmV0dXJuImhleCI9PT1mP1MudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOlMuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sMTA4MjcodGUsaixkKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIFM9ZCg2ODI4MyksaD1kKDEyOTAxKSxvPWQoMzkyMTApLEk9Uy5yb3RyNjRfaGksZj1TLnJvdHI2NF9sbyxUPVMuc2hyNjRfaGksQT1TLnNocjY0X2xvLE09Uy5zdW02NCxPPVMuc3VtNjRfaGksRD1TLnN1bTY0X2xvLEU9Uy5zdW02NF80X2hpLEI9Uy5zdW02NF80X2xvLEY9''@;'; put 'put ''Uy5zdW02NF81X2hpLE49Uy5zdW02NF81X2xvLEg9aC5CbG9ja0hhc2gsej1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5Mywz''@;'; put 'put ''MDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2''@;'; put 'put ''MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkw''@;'; put 'put ''MSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkx''@;'; put 'put ''LDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1''@;'; put 'put ''MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIx''@;'; put 'put ''NzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3Nywz''@;'; put 'put ''Nzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIz''@;'; put 'put ''NjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQw''@;'; put 'put ''Njk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2''@;'; put 'put ''NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIFooKXtpZighKHRoaXMgaW5zdGFuY2VvZiBaKSlyZXR1cm4gbmV3''@;'; put 'put ''IFo7SC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUs''@;'; put 'put ''NDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXosdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIFUodixwLF8sayxMKXt2YXIgeT12Jl9efnYmTDtyZXR1cm4geTwwJiYoeSs9NDI5NDk2NzI5NikseX1mdW5jdGlvbiBLKHYscCxfLGssTCx5KXt2YXIgbD1wJmte''@;'; put 'put ''fnAmeTtyZXR1cm4gbDwwJiYobCs9NDI5NDk2NzI5NiksbH1mdW5jdGlvbiBYKHYscCxfLGssTCl7dmFyIHk9diZfXnYmTF5fJkw7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYpLHl9ZnVuY3Rpb24gbmUodixwLF8sayxMLHkpe3ZhciBsPXAma15wJnleayZ5O3JldHVybiBsPDAmJihsKz00''@;'; put 'put ''Mjk0OTY3Mjk2KSxsfWZ1bmN0aW9uIHNlKHYscCl7dmFyIHk9SSh2LHAsMjgpXkkocCx2LDIpXkkocCx2LDcpO3JldHVybiB5PDAmJih5Kz00Mjk0OTY3Mjk2KSx5fWZ1bmN0aW9uIGhlKHYscCl7dmFyIHk9Zih2LHAsMjgpXmYocCx2LDIpXmYocCx2LDcpO3JldHVybiB5PDAmJih5Kz00Mjk0''@;'; put 'put ''OTY3Mjk2KSx5fWZ1bmN0aW9uIF9lKHYscCl7dmFyIHk9SSh2LHAsMTQpXkkodixwLDE4KV5JKHAsdiw5KTtyZXR1cm4geTwwJiYoeSs9NDI5NDk2NzI5NikseX1mdW5jdGlvbiBtZSh2LHApe3ZhciB5PWYodixwLDE0KV5mKHYscCwxOCleZihwLHYsOSk7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5''@;'; put 'put ''NjcyOTYpLHl9ZnVuY3Rpb24gRmUodixwKXt2YXIgeT1JKHYscCwxKV5JKHYscCw4KV5UKHYscCw3KTtyZXR1cm4geTwwJiYoeSs9NDI5NDk2NzI5NikseX1mdW5jdGlvbiBSKHYscCl7dmFyIHk9Zih2LHAsMSleZih2LHAsOCleQSh2LHAsNyk7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYp''@;'; put 'put ''LHl9ZnVuY3Rpb24gcyh2LHApe3ZhciB5PUkodixwLDE5KV5JKHAsdiwyOSleVCh2LHAsNik7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYpLHl9ZnVuY3Rpb24gdSh2LHApe3ZhciB5PWYodixwLDE5KV5mKHAsdiwyOSleQSh2LHAsNik7cmV0dXJuIHk8MCYmKHkrPTQyOTQ5NjcyOTYpLHl9''@;'; put 'put ''Uy5pbmhlcml0cyhaLEgpLHRlLmV4cG9ydHM9WixaLmJsb2NrU2l6ZT0xMDI0LFoub3V0U2l6ZT01MTIsWi5obWFjU3RyZW5ndGg9MTkyLFoucGFkTGVuZ3RoPTEyOCxaLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKHAsXyl7Zm9yKHZhciBrPXRoaXMuVyxMPTA7TDwzMjtMKysp''@;'; put 'put ''a1tMXT1wW18rTF07Zm9yKDtMPGsubGVuZ3RoO0wrPTIpe3ZhciB5PXMoa1tMLTRdLGtbTC0zXSksbD11KGtbTC00XSxrW0wtM10pLGI9a1tMLTE0XSxxPWtbTC0xM10sRz1GZShrW0wtMzBdLGtbTC0yOV0pLFE9UihrW0wtMzBdLGtbTC0yOV0pLHBlPWtbTC0zMl0sUGU9a1tMLTMxXTtrW0xd''@;'; put 'put ''PUUoeSxsLGIscSxHLFEscGUsUGUpLGtbTCsxXT1CKHksbCxiLHEsRyxRLHBlLFBlKX19LFoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocCxfKXt0aGlzLl9wcmVwYXJlQmxvY2socCxfKTt2YXIgaz10aGlzLlcsTD10aGlzLmhbMF0seT10aGlzLmhbMV0sbD10aGlzLmhbMl0sYj10aGlz''@;'; put 'put ''LmhbM10scT10aGlzLmhbNF0sRz10aGlzLmhbNV0sUT10aGlzLmhbNl0scGU9dGhpcy5oWzddLFBlPXRoaXMuaFs4XSxaZT10aGlzLmhbOV0scWU9dGhpcy5oWzEwXSx2ZT10aGlzLmhbMTFdLHVlPXRoaXMuaFsxMl0semU9dGhpcy5oWzEzXSxPZT10aGlzLmhbMTRdLENlPXRoaXMuaFsxNV07''@;'; put 'put ''byh0aGlzLmsubGVuZ3RoPT09ay5sZW5ndGgpO2Zvcih2YXIga2U9MDtrZTxrLmxlbmd0aDtrZSs9Mil7dmFyIHhlPU9lLE1lPUNlLEllPV9lKFBlLFplKSxiZT1tZShQZSxaZSksd2U9VShQZSwwLHFlLDAsdWUpLHB0PUsoMCxaZSwwLHZlLDAsemUpLEtlPXRoaXMua1trZV0sWWU9dGhpcy5r''@;'; put 'put ''W2tlKzFdLHF0PWtba2VdLGh0PWtba2UrMV0sdnQ9Rih4ZSxNZSxJZSxiZSx3ZSxwdCxLZSxZZSxxdCxodCksWXQ9Tih4ZSxNZSxJZSxiZSx3ZSxwdCxLZSxZZSxxdCxodCk7eGU9c2UoTCx5KSxNZT1oZShMLHkpLEllPVgoTCwwLGwsMCxxKSxiZT1uZSgwLHksMCxiLDAsRyk7dmFyIHR0PU8o''@;'; put 'put ''eGUsTWUsSWUsYmUpLFVlPUQoeGUsTWUsSWUsYmUpO09lPXVlLENlPXplLHVlPXFlLHplPXZlLHFlPVBlLHZlPVplLFBlPU8oUSxwZSx2dCxZdCksWmU9RChwZSxwZSx2dCxZdCksUT1xLHBlPUcscT1sLEc9YixsPUwsYj15LEw9Tyh2dCxZdCx0dCxVZSkseT1EKHZ0LFl0LHR0LFVlKX1NKHRo''@;'; put 'put ''aXMuaCwwLEwseSksTSh0aGlzLmgsMixsLGIpLE0odGhpcy5oLDQscSxHKSxNKHRoaXMuaCw2LFEscGUpLE0odGhpcy5oLDgsUGUsWmUpLE0odGhpcy5oLDEwLHFlLHZlKSxNKHRoaXMuaCwxMix1ZSx6ZSksTSh0aGlzLmgsMTQsT2UsQ2UpfSxaLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiJoZXgiPT09cD9TLnRvSGV4MzIodGhpcy5oLCJiaWciKTpTLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDk1NTQyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBoPWQoNjgyODMpLnJvdHIzMjtmdW5jdGlvbiBJKEUsQixGKXtyZXR1cm4gRSZCXn5FJkZ9ZnVuY3Rpb24gZihF''@;'; put 'put ''LEIsRil7cmV0dXJuIEUmQl5FJkZeQiZGfWZ1bmN0aW9uIFQoRSxCLEYpe3JldHVybiBFXkJeRn1qLmZ0XzE9ZnVuY3Rpb24gbyhFLEIsRixOKXtyZXR1cm4gMD09PUU/SShCLEYsTik6MT09PUV8fDM9PT1FP1QoQixGLE4pOjI9PT1FP2YoQixGLE4pOnZvaWQgMH0sai5jaDMyPUksai5tYWoz''@;'; put 'put ''Mj1mLGoucDMyPVQsai5zMF8yNTY9ZnVuY3Rpb24gQShFKXtyZXR1cm4gaChFLDIpXmgoRSwxMyleaChFLDIyKX0sai5zMV8yNTY9ZnVuY3Rpb24gTShFKXtyZXR1cm4gaChFLDYpXmgoRSwxMSleaChFLDI1KX0sai5nMF8yNTY9ZnVuY3Rpb24gTyhFKXtyZXR1cm4gaChFLDcpXmgoRSwxOCle''@;'; put 'put ''RT4+PjN9LGouZzFfMjU2PWZ1bmN0aW9uIEQoRSl7cmV0dXJuIGgoRSwxNyleaChFLDE5KV5FPj4+MTB9fSw2ODI4Myh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM5MjEwKSxoPWQoNzE5OTMpO2Z1bmN0aW9uIG8odSx2KXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImdS5jaGFyQ29kZUF0''@;'; put 'put ''KHYpKXx8djwwfHx2KzE+PXUubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZ1LmNoYXJDb2RlQXQodisxKSl9ZnVuY3Rpb24gVCh1KXtyZXR1cm4odT4+PjI0fHU+Pj44JjY1MjgwfHU8PDgmMTY3MTE2ODB8KDI1NSZ1KTw8MjQpPj4+MH1mdW5jdGlvbiBNKHUpe3JldHVybiAxPT09dS5sZW5ndGg/''@;'; put 'put ''IjAiK3U6dX1mdW5jdGlvbiBPKHUpe3JldHVybiA3PT09dS5sZW5ndGg/IjAiK3U6Nj09PXUubGVuZ3RoPyIwMCIrdTo1PT09dS5sZW5ndGg/IjAwMCIrdTo0PT09dS5sZW5ndGg/IjAwMDAiK3U6Mz09PXUubGVuZ3RoPyIwMDAwMCIrdToyPT09dS5sZW5ndGg/IjAwMDAwMCIrdToxPT09dS5s''@;'; put 'put ''ZW5ndGg/IjAwMDAwMDAiK3U6dX1qLmluaGVyaXRzPWgsai50b0FycmF5PWZ1bmN0aW9uIEkodSx2KXtpZihBcnJheS5pc0FycmF5KHUpKXJldHVybiB1LnNsaWNlKCk7aWYoIXUpcmV0dXJuW107dmFyIHA9W107aWYoInN0cmluZyI9PXR5cGVvZiB1KWlmKHYpe2lmKCJoZXgiPT09dilmb3Io''@;'; put 'put ''KHU9dS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJih1PSIwIit1KSxrPTA7azx1Lmxlbmd0aDtrKz0yKXAucHVzaChwYXJzZUludCh1W2tdK3VbaysxXSwxNikpfWVsc2UgZm9yKHZhciBfPTAsaz0wO2s8dS5sZW5ndGg7aysrKXt2YXIgTD11LmNoYXJDb2RlQXQo''@;'; put 'put ''ayk7TDwxMjg/cFtfKytdPUw6TDwyMDQ4PyhwW18rK109TD4+NnwxOTIscFtfKytdPTYzJkx8MTI4KTpvKHUsayk/KEw9NjU1MzYrKCgxMDIzJkwpPDwxMCkrKDEwMjMmdS5jaGFyQ29kZUF0KCsraykpLHBbXysrXT1MPj4xOHwyNDAscFtfKytdPUw+PjEyJjYzfDEyOCxwW18rK109TD4+NiY2''@;'; put 'put ''M3wxMjgscFtfKytdPTYzJkx8MTI4KToocFtfKytdPUw+PjEyfDIyNCxwW18rK109TD4+NiY2M3wxMjgscFtfKytdPTYzJkx8MTI4KX1lbHNlIGZvcihrPTA7azx1Lmxlbmd0aDtrKyspcFtrXT0wfHVba107cmV0dXJuIHB9LGoudG9IZXg9ZnVuY3Rpb24gZih1KXtmb3IodmFyIHY9IiIscD0w''@;'; put 'put ''O3A8dS5sZW5ndGg7cCsrKXYrPU0odVtwXS50b1N0cmluZygxNikpO3JldHVybiB2fSxqLmh0b25sPVQsai50b0hleDMyPWZ1bmN0aW9uIEEodSx2KXtmb3IodmFyIHA9IiIsXz0wO188dS5sZW5ndGg7XysrKXt2YXIgaz11W19dOyJsaXR0bGUiPT09diYmKGs9VChrKSkscCs9TyhrLnRvU3Ry''@;'; put 'put ''aW5nKDE2KSl9cmV0dXJuIHB9LGouemVybzI9TSxqLnplcm84PU8sai5qb2luMzI9ZnVuY3Rpb24gRCh1LHYscCxfKXt2YXIgaz1wLXY7UyhrJTQ9PTApO2Zvcih2YXIgTD1uZXcgQXJyYXkoay80KSx5PTAsbD12O3k8TC5sZW5ndGg7eSsrLGwrPTQpTFt5XT0oImJpZyI9PT1fP3VbbF08PDI0''@;'; put 'put ''fHVbbCsxXTw8MTZ8dVtsKzJdPDw4fHVbbCszXTp1W2wrM108PDI0fHVbbCsyXTw8MTZ8dVtsKzFdPDw4fHVbbF0pPj4+MDtyZXR1cm4gTH0sai5zcGxpdDMyPWZ1bmN0aW9uIEUodSx2KXtmb3IodmFyIHA9bmV3IEFycmF5KDQqdS5sZW5ndGgpLF89MCxrPTA7Xzx1Lmxlbmd0aDtfKyssays9''@;'; put 'put ''NCl7dmFyIEw9dVtfXTsiYmlnIj09PXY/KHBba109TD4+PjI0LHBbaysxXT1MPj4+MTYmMjU1LHBbaysyXT1MPj4+OCYyNTUscFtrKzNdPTI1NSZMKToocFtrKzNdPUw+Pj4yNCxwW2srMl09TD4+PjE2JjI1NSxwW2srMV09TD4+PjgmMjU1LHBba109MjU1JkwpfXJldHVybiBwfSxqLnJvdHIz''@;'; put 'put ''Mj1mdW5jdGlvbiBCKHUsdil7cmV0dXJuIHU+Pj52fHU8PDMyLXZ9LGoucm90bDMyPWZ1bmN0aW9uIEYodSx2KXtyZXR1cm4gdTw8dnx1Pj4+MzItdn0sai5zdW0zMj1mdW5jdGlvbiBOKHUsdil7cmV0dXJuIHUrdj4+PjB9LGouc3VtMzJfMz1mdW5jdGlvbiBIKHUsdixwKXtyZXR1cm4gdSt2''@;'; put 'put ''K3A+Pj4wfSxqLnN1bTMyXzQ9ZnVuY3Rpb24geih1LHYscCxfKXtyZXR1cm4gdSt2K3ArXz4+PjB9LGouc3VtMzJfNT1mdW5jdGlvbiBaKHUsdixwLF8sayl7cmV0dXJuIHUrditwK18raz4+PjB9LGouc3VtNjQ9ZnVuY3Rpb24gVSh1LHYscCxfKXt2YXIgeT1fK3VbdisxXT4+PjA7dVt2XT0o''@;'; put 'put ''eTxfPzE6MCkrcCt1W3ZdPj4+MCx1W3YrMV09eX0sai5zdW02NF9oaT1mdW5jdGlvbiBLKHUsdixwLF8pe3JldHVybih2K18+Pj4wPHY/MTowKSt1K3A+Pj4wfSxqLnN1bTY0X2xvPWZ1bmN0aW9uIFgodSx2LHAsXyl7cmV0dXJuIHYrXz4+PjB9LGouc3VtNjRfNF9oaT1mdW5jdGlvbiBuZSh1''@;'; put 'put ''LHYscCxfLGssTCx5LGwpe3ZhciBiPTAscT12O3JldHVybiBiKz0ocT1xK18+Pj4wKTx2PzE6MCxiKz0ocT1xK0w+Pj4wKTxMPzE6MCx1K3Arayt5KyhiKz0ocT1xK2w+Pj4wKTxsPzE6MCk+Pj4wfSxqLnN1bTY0XzRfbG89ZnVuY3Rpb24gc2UodSx2LHAsXyxrLEwseSxsKXtyZXR1cm4gditf''@;'; put 'put ''K0wrbD4+PjB9LGouc3VtNjRfNV9oaT1mdW5jdGlvbiBoZSh1LHYscCxfLGssTCx5LGwsYixxKXt2YXIgRz0wLFE9djtyZXR1cm4gRys9KFE9UStfPj4+MCk8dj8xOjAsRys9KFE9UStMPj4+MCk8TD8xOjAsRys9KFE9UStsPj4+MCk8bD8xOjAsdStwK2sreStiKyhHKz0oUT1RK3E+Pj4wKTxx''@;'; put 'put ''PzE6MCk+Pj4wfSxqLnN1bTY0XzVfbG89ZnVuY3Rpb24gX2UodSx2LHAsXyxrLEwseSxsLGIscSl7cmV0dXJuIHYrXytMK2wrcT4+PjB9LGoucm90cjY0X2hpPWZ1bmN0aW9uIG1lKHUsdixwKXtyZXR1cm4odjw8MzItcHx1Pj4+cCk+Pj4wfSxqLnJvdHI2NF9sbz1mdW5jdGlvbiBGZSh1LHYs''@;'; put 'put ''cCl7cmV0dXJuKHU8PDMyLXB8dj4+PnApPj4+MH0sai5zaHI2NF9oaT1mdW5jdGlvbiBSKHUsdixwKXtyZXR1cm4gdT4+PnB9LGouc2hyNjRfbG89ZnVuY3Rpb24gcyh1LHYscCl7cmV0dXJuKHU8PDMyLXB8dj4+PnApPj4+MH19LDc4MzY4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPUZ1''@;'; put 'put ''bmN0aW9uLnByb3RvdHlwZS5jYWxsLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxvPWQoNjU5OTIpO3RlLmV4cG9ydHM9by5jYWxsKFMsaCl9LDMzNTU2KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTI1MjkpLGg9ZCgyMTgzMiksbz1kKDM5MjEwKTtmdW5jdGlvbiBJ''@;'; put 'put ''KGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSShmKTt0aGlzLmhhc2g9Zi5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIWYucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9Zi5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1h''@;'; put 'put ''Y1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgVD1oLnRvQXJyYXkoZi5lbnRyb3B5LGYuZW50cm9weUVuY3x8ImhleCIpLEE9aC50b0FycmF5KGYubm9uY2UsZi5ub25jZUVuY3x8ImhleCIpLE09''@;'; put 'put ''aC50b0FycmF5KGYucGVycyxmLnBlcnNFbmN8fCJoZXgiKTtvKFQubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KFQsQSxNKX10ZS5leHBvcnRzPUksSS5wcm90b3R5''@;'; put 'put ''cGUuX2luaXQ9ZnVuY3Rpb24oVCxBLE0pe3ZhciBPPVQuY29uY2F0KEEpLmNvbmNhdChNKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBEPTA7RDx0aGlzLlYubGVuZ3RoO0QrKyl0aGlzLktbRF09MCx0aGlz''@;'; put 'put ''LlZbRF09MTt0aGlzLl91cGRhdGUoTyksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LEkucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LEkucHJvdG90eXBlLl91cGRhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oVCl7dmFyIEE9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO1QmJihBPUEudXBkYXRlKFQpKSx0aGlzLks9QS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFQmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0''@;'; put 'put ''ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShUKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sSS5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKFQsQSxNLE8peyJzdHJpbmciIT10eXBlb2YgQSYmKE89TSxNPUEsQT1udWxsKSxUPWgu''@;'; put 'put ''dG9BcnJheShULEEpLE09aC50b0FycmF5KE0sTyksbyhULmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKFQuY29uY2F0KE18fFtdKSksdGhpcy5fcmVzZWVkPTF9''@;'; put 'put ''LEkucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKFQsQSxNLE8pe2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBBJiYoTz1NLE09QSxBPW51bGwpLE0mJihNPWgudG9BcnJh''@;'; put 'put ''eShNLE98fCJoZXgiKSx0aGlzLl91cGRhdGUoTSkpO2Zvcih2YXIgRD1bXTtELmxlbmd0aDxUOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLEQ9RC5jb25jYXQodGhpcy5WKTt2YXIgRT1ELnNsaWNlKDAsVCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShNKSx0aGlz''@;'; put 'put ''Ll9yZXNlZWQrKyxoLmVuY29kZShFLEEpfX0sOTM2OTQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg5MzgwNykuQnVmZmVyO2ouX2RiY3M9Tztmb3IodmFyIGg9LTEsST0tMTAsZj0tMWUzLFQ9bmV3IEFycmF5KDI1NiksTT0wO008MjU2O00rKylUW01dPWg7ZnVuY3Rpb24gTyhGLE4p''@;'; put 'put ''e2lmKHRoaXMuZW5jb2RpbmdOYW1lPUYuZW5jb2RpbmdOYW1lLCFGKXRocm93IG5ldyBFcnJvcigiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighRi50YWJsZSl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3RoaXMuZW5jb2RpbmdOYW1lKyInIGhhcyBu''@;'; put 'put ''byBkYXRhLiIpO3ZhciBIPUYudGFibGUoKTt0aGlzLmRlY29kZVRhYmxlcz1bXSx0aGlzLmRlY29kZVRhYmxlc1swXT1ULnNsaWNlKDApLHRoaXMuZGVjb2RlVGFibGVTZXE9W107Zm9yKHZhciB6PTA7ejxILmxlbmd0aDt6KyspdGhpcy5fYWRkRGVjb2RlQ2h1bmsoSFt6XSk7dGhpcy5kZWZh''@;'; put 'put ''dWx0Q2hhclVuaWNvZGU9Ti5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5lbmNvZGVUYWJsZT1bXSx0aGlzLmVuY29kZVRhYmxlU2VxPVtdO3ZhciBaPXt9O2lmKEYuZW5jb2RlU2tpcFZhbHMpZm9yKHo9MDt6PEYuZW5jb2RlU2tpcFZhbHMubGVuZ3RoO3orKyl7dmFyIFU9Ri5lbmNvZGVTa2lw''@;'; put 'put ''VmFsc1t6XTtpZigibnVtYmVyIj09dHlwZW9mIFUpWltVXT0hMDtlbHNlIGZvcih2YXIgSz1VLmZyb207Szw9VS50bztLKyspWltLXT0hMH1pZih0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwwLFopLEYuZW5jb2RlQWRkKWZvcih2YXIgWCBpbiBGLmVuY29kZUFkZClPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoRi5lbmNvZGVBZGQsWCkmJnRoaXMuX3NldEVuY29kZUNoYXIoWC5jaGFyQ29kZUF0KDApLEYuZW5jb2RlQWRkW1hdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW04uZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCld''@;'; put 'put ''LHRoaXMuZGVmQ2hhclNCPT09aCYmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9PT1oJiYodGhpcy5kZWZDaGFyU0I9NjMpLCJmdW5jdGlvbiI9PXR5cGVvZiBGLmdiMTgwMzApe3RoaXMuZ2IxODAzMD1GLmdiMTgwMzAoKTt2YXIgbmU9''@;'; put 'put ''dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHNlPXRoaXMuZGVjb2RlVGFibGVzW25lXT1ULnNsaWNlKDApLGhlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxfZT10aGlzLmRlY29kZVRhYmxlc1toZV09VC5zbGljZSgwKTtmb3Ioej0xMjk7ejw9MjU0O3orKyl7dmFyIEZlPXRoaXMuZGVjb2Rl''@;'; put 'put ''VGFibGVzW2YtdGhpcy5kZWNvZGVUYWJsZXNbMF1bel1dO2ZvcihLPTQ4O0s8PTU3O0srKylGZVtLXT1mLW5lfWZvcih6PTEyOTt6PD0yNTQ7eisrKXNlW3pdPWYtaGU7Zm9yKHo9NDg7ejw9NTc7eisrKV9lW3pdPS0yfX1mdW5jdGlvbiBEKEYsTil7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRo''@;'; put 'put ''aXMuc2VxT2JqPXZvaWQgMCx0aGlzLmVuY29kZVRhYmxlPU4uZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJsZVNlcT1OLmVuY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlPU4uZGVmQ2hhclNCLHRoaXMuZ2IxODAzMD1OLmdiMTgwMzB9ZnVuY3Rpb24gRShGLE4pe3Ro''@;'; put 'put ''aXMubm9kZUlkeD0wLHRoaXMucHJldkJ1Zj1TLmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPU4uZGVjb2RlVGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9Ti5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9''@;'; put 'put ''Ti5nYjE4MDMwfWZ1bmN0aW9uIEIoRixOKXtpZihGWzBdPk4pcmV0dXJuLTE7Zm9yKHZhciBIPTAsej1GLmxlbmd0aDtIPHotMTspe3ZhciBaPUgrTWF0aC5mbG9vcigoei1IKzEpLzIpO0ZbWl08PU4/SD1aOno9Wn1yZXR1cm4gSH1PLnByb3RvdHlwZS5lbmNvZGVyPUQsTy5wcm90b3R5cGUu''@;'; put 'put ''ZGVjb2Rlcj1FLE8ucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZT1mdW5jdGlvbihGKXtmb3IodmFyIE49W107Rj4wO0Y+Pj04KU4ucHVzaCgyNTUmRik7MD09Ti5sZW5ndGgmJk4ucHVzaCgwKTtmb3IodmFyIEg9dGhpcy5kZWNvZGVUYWJsZXNbMF0sej1OLmxlbmd0aC0xO3o+MDt6LS0p''@;'; put 'put ''e3ZhciBaPUhbTlt6XV07aWYoWj09aClIW05bel1dPWYtdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVzLnB1c2goSD1ULnNsaWNlKDApKTtlbHNle2lmKCEoWjw9ZikpdGhyb3cgbmV3IEVycm9yKCJPdmVyd3JpdGUgYnl0ZSBpbiAiK3RoaXMuZW5jb2RpbmdOYW1l''@;'; put 'put ''KyIsIGFkZHI6ICIrRi50b1N0cmluZygxNikpO0g9dGhpcy5kZWNvZGVUYWJsZXNbZi1aXX19cmV0dXJuIEh9LE8ucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihGKXt2YXIgTj1wYXJzZUludChGWzBdLDE2KSxIPXRoaXMuX2dldERlY29kZVRyaWVOb2RlKE4pO04mPTI1NTtm''@;'; put 'put ''b3IodmFyIHo9MTt6PEYubGVuZ3RoO3orKyl7dmFyIFo9Rlt6XTtpZigic3RyaW5nIj09dHlwZW9mIFopZm9yKHZhciBVPTA7VTxaLmxlbmd0aDspe3ZhciBLPVouY2hhckNvZGVBdChVKyspO2lmKDU1Mjk2PD1LJiZLPDU2MzIwKXt2YXIgWD1aLmNoYXJDb2RlQXQoVSsrKTtpZighKDU2MzIw''@;'; put 'put ''PD1YJiZYPDU3MzQ0KSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitGWzBdKTtIW04rK109NjU1MzYrMTAyNCooSy01NTI5NikrKFgtNTYzMjApfWVsc2UgaWYoNDA4MDxLJiZLPD00MDk1KXtmb3Io''@;'; put 'put ''dmFyIG5lPTQwOTUtSysyLHNlPVtdLGhlPTA7aGU8bmU7aGUrKylzZS5wdXNoKFouY2hhckNvZGVBdChVKyspKTtIW04rK109SS10aGlzLmRlY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlU2VxLnB1c2goc2UpfWVsc2UgSFtOKytdPUt9ZWxzZXtpZigibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIFopdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdHlwZSAnIit0eXBlb2YgWisiJyBnaXZlbiBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitGWzBdKTt2YXIgX2U9SFtOLTFdKzE7Zm9yKFU9MDtVPFo7VSsrKUhbTisrXT1fZSsrfX1pZihOPjI1NSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkluY29ycmVjdCBjaHVuayBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgYWRkciAiK0ZbMF0rIjogdG9vIGxvbmciK04pfSxPLnByb3RvdHlwZS5fZ2V0RW5jb2RlQnVja2V0PWZ1bmN0aW9uKEYpe3ZhciBOPUY+Pjg7cmV0dXJuIHZvaWQgMD09PXRoaXMuZW5jb2RlVGFibGVb''@;'; put 'put ''Tl0mJih0aGlzLmVuY29kZVRhYmxlW05dPVQuc2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFibGVbTl19LE8ucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9uKEYsTil7dmFyIEg9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KEYpLHo9MjU1JkY7SFt6XTw9ST90aGlzLmVuY29kZVRhYmxlU2Vx''@;'; put 'put ''W0ktSFt6XV1bLTFdPU46SFt6XT09aCYmKEhbel09Til9LE8ucHJvdG90eXBlLl9zZXRFbmNvZGVTZXF1ZW5jZT1mdW5jdGlvbihGLE4pe3ZhciBVLEg9RlswXSx6PXRoaXMuX2dldEVuY29kZUJ1Y2tldChIKSxaPTI1NSZIO3pbWl08PUk/VT10aGlzLmVuY29kZVRhYmxlU2VxW0kteltaXV06''@;'; put 'put ''KFU9e30seltaXSE9PWgmJihVWy0xXT16W1pdKSx6W1pdPUktdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKFUpKTtmb3IodmFyIEs9MTtLPEYubGVuZ3RoLTE7SysrKXt2YXIgWD1VW0hdOyJvYmplY3QiPT10eXBlb2YgWD9VPVg6KFU9VVtIXT17''@;'; put 'put ''fSx2b2lkIDAhPT1YJiYoVVstMV09WCkpfVVbSD1GW0YubGVuZ3RoLTFdXT1OfSxPLnByb3RvdHlwZS5fZmlsbEVuY29kZVRhYmxlPWZ1bmN0aW9uKEYsTixIKXtmb3IodmFyIHo9dGhpcy5kZWNvZGVUYWJsZXNbRl0sWj0wO1o8MjU2O1orKyl7dmFyIFU9eltaXSxLPU4rWjtIW0tdfHwoVT49''@;'; put 'put ''MD90aGlzLl9zZXRFbmNvZGVDaGFyKFUsSyk6VTw9Zj90aGlzLl9maWxsRW5jb2RlVGFibGUoZi1VLEs8PDgsSCk6VTw9SSYmdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtJLVVdLEspKX19LEQucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEYpe2Zvcih2YXIg''@;'; put 'put ''Tj1TLmFsbG9jKEYubGVuZ3RoKih0aGlzLmdiMTgwMzA/NDozKSksSD10aGlzLmxlYWRTdXJyb2dhdGUsej10aGlzLnNlcU9iaixaPS0xLFU9MCxLPTA7Oyl7aWYoLTE9PT1aKXtpZihVPT1GLmxlbmd0aClicmVhazt2YXIgWD1GLmNoYXJDb2RlQXQoVSsrKX1lbHNlIFg9WixaPS0xO2lmKDU1''@;'; put 'put ''Mjk2PD1YJiZYPDU3MzQ0KWlmKFg8NTYzMjApe2lmKC0xPT09SCl7SD1YO2NvbnRpbnVlfUg9WCxYPWh9ZWxzZS0xIT09SD8oWD02NTUzNisxMDI0KihILTU1Mjk2KSsoWC01NjMyMCksSD0tMSk6WD1oO2Vsc2UtMSE9PUgmJihaPVgsWD1oLEg9LTEpO3ZhciBuZT1oO2lmKHZvaWQgMCE9PXom''@;'; put 'put ''JlghPWgpe3ZhciBzZT16W1hdO2lmKCJvYmplY3QiPT10eXBlb2Ygc2Upe3o9c2U7Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBzZT9uZT1zZTpudWxsPT1zZSYmdm9pZCAwIT09KHNlPXpbLTFdKSYmKG5lPXNlLFo9WCksej12b2lkIDB9ZWxzZSBpZihYPj0wKXt2YXIgaGU9dGhpcy5lbmNv''@;'; put 'put ''ZGVUYWJsZVtYPj44XTtpZih2b2lkIDAhPT1oZSYmKG5lPWhlWzI1NSZYXSksbmU8PUkpe3o9dGhpcy5lbmNvZGVUYWJsZVNlcVtJLW5lXTtjb250aW51ZX1pZihuZT09aCYmdGhpcy5nYjE4MDMwKXt2YXIgX2U9Qih0aGlzLmdiMTgwMzAudUNoYXJzLFgpO2lmKC0xIT1fZSl7bmU9dGhpcy5n''@;'; put 'put ''YjE4MDMwLmdiQ2hhcnNbX2VdKyhYLXRoaXMuZ2IxODAzMC51Q2hhcnNbX2VdKSxOW0srK109MTI5K01hdGguZmxvb3IobmUvMTI2MDApLG5lJT0xMjYwMCxOW0srK109NDgrTWF0aC5mbG9vcihuZS8xMjYwKSxuZSU9MTI2MCxOW0srK109MTI5K01hdGguZmxvb3IobmUvMTApLE5bSysrXT00''@;'; put 'put ''OCsobmUlPTEwKTtjb250aW51ZX19fW5lPT09aCYmKG5lPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlKSxuZTwyNTY/TltLKytdPW5lOm5lPDY1NTM2PyhOW0srK109bmU+PjgsTltLKytdPTI1NSZuZSk6KE5bSysrXT1uZT4+MTYsTltLKytdPW5lPj44JjI1NSxOW0srK109MjU1Jm5lKX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5zZXFPYmo9eix0aGlzLmxlYWRTdXJyb2dhdGU9SCxOLnNsaWNlKDAsSyl9LEQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKC0xIT09dGhpcy5sZWFkU3Vycm9nYXRlfHx2b2lkIDAhPT10aGlzLnNlcU9iail7dmFyIEY9Uy5hbGxvYygxMCksTj0wO2lmKHRoaXMuc2Vx''@;'; put 'put ''T2JqKXt2YXIgSD10aGlzLnNlcU9ialstMV07dm9pZCAwIT09SCYmKEg8MjU2P0ZbTisrXT1IOihGW04rK109SD4+OCxGW04rK109MjU1JkgpKSx0aGlzLnNlcU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihGW04rK109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5''@;'; put 'put ''dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxGLnNsaWNlKDAsTil9fSxELnByb3RvdHlwZS5maW5kSWR4PUIsRS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oRil7dmFyIE49Uy5hbGxvYygyKkYubGVuZ3RoKSxIPXRoaXMubm9kZUlkeCx6PXRoaXMucHJldkJ1ZixaPXRoaXMucHJldkJ1Zi5s''@;'; put 'put ''ZW5ndGgsVT0tdGhpcy5wcmV2QnVmLmxlbmd0aDtaPjAmJih6PVMuY29uY2F0KFt6LEYuc2xpY2UoMCwxMCldKSk7Zm9yKHZhciBYPTAsbmU9MDtYPEYubGVuZ3RoO1grKyl7dmFyIEssc2U9WD49MD9GW1hdOnpbWCtaXTtpZighKChLPXRoaXMuZGVjb2RlVGFibGVzW0hdW3NlXSk+PTApKWlm''@;'; put 'put ''KEs9PT1oKVg9VSxLPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7ZWxzZSBpZigtMj09PUspe3ZhciBoZT1VPj0wP0Yuc2xpY2UoVSxYKzEpOnouc2xpY2UoVStaLFgrMStaKSxfZT0xMjYwMCooaGVbMF0tMTI5KSsxMjYwKihoZVsxXS00OCkrMTAqKGhlWzJdLTEyOSkr''@;'; put 'put ''KGhlWzNdLTQ4KSxtZT1CKHRoaXMuZ2IxODAzMC5nYkNoYXJzLF9lKTtLPXRoaXMuZ2IxODAzMC51Q2hhcnNbbWVdK19lLXRoaXMuZ2IxODAzMC5nYkNoYXJzW21lXX1lbHNle2lmKEs8PWYpe0g9Zi1LO2NvbnRpbnVlfWlmKCEoSzw9SSkpdGhyb3cgbmV3IEVycm9yKCJpY29udi1saXRlIGlu''@;'; put 'put ''dGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlICIrSysiIGF0ICIrSCsiLyIrc2UpO2Zvcih2YXIgRmU9dGhpcy5kZWNvZGVUYWJsZVNlcVtJLUtdLFI9MDtSPEZlLmxlbmd0aC0xO1IrKylOW25lKytdPTI1NSYoSz1GZVtSXSksTltuZSsrXT1LPj44O0s9RmVbRmUu''@;'; put 'put ''bGVuZ3RoLTFdfWlmKEs+NjU1MzUpe0stPTY1NTM2O3ZhciBzPTU1Mjk2K01hdGguZmxvb3IoSy8xMDI0KTtOW25lKytdPTI1NSZzLE5bbmUrK109cz4+OCxLPTU2MzIwK0slMTAyNH1OW25lKytdPTI1NSZLLE5bbmUrK109Sz4+OCxIPTAsVT1YKzF9cmV0dXJuIHRoaXMubm9kZUlkeD1ILHRo''@;'; put 'put ''aXMucHJldkJ1Zj1VPj0wP0Yuc2xpY2UoVSk6ei5zbGljZShVK1opLE4uc2xpY2UoMCxuZSkudG9TdHJpbmcoInVjczIiKX0sRS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSIiO3RoaXMucHJldkJ1Zi5sZW5ndGg+MDspe0YrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlO3Zh''@;'; put 'put ''ciBOPXRoaXMucHJldkJ1Zi5zbGljZSgxKTt0aGlzLnByZXZCdWY9Uy5hbGxvYygwKSx0aGlzLm5vZGVJZHg9MCxOLmxlbmd0aD4wJiYoRis9dGhpcy53cml0ZShOKSl9cmV0dXJuIHRoaXMubm9kZUlkeD0wLEZ9fSw0NTI3OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPXtzaGlm''@;'; put 'put ''dGppczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQoNDA2NzkpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9LGVuY29kZVNraXBWYWxzOlt7ZnJvbTo2MDczNix0bzo2MzgwOH1dfSxjc3NoaWZ0amlzOiJzaGlmdGppcyIsbXNrYW5qaToic2hpZnRq''@;'; put 'put ''aXMiLHNqaXM6InNoaWZ0amlzIix3aW5kb3dzMzFqOiJzaGlmdGppcyIsbXMzMWo6InNoaWZ0amlzIix4c2ppczoic2hpZnRqaXMiLHdpbmRvd3M5MzI6InNoaWZ0amlzIixtczkzMjoic2hpZnRqaXMiLDkzMjoic2hpZnRqaXMiLGNwOTMyOiJzaGlmdGppcyIsZXVjanA6e3R5cGU6Il9kYmNz''@;'; put 'put ''Iix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBkKDU2NDA2KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fX0sZ2IyMzEyOiJjcDkzNiIsZ2IyMzEyODA6ImNwOTM2IixnYjIzMTIxOTgwOiJjcDkzNiIsY3NnYjIzMTI6ImNwOTM2Iixjc2lzbzU4Z2IyMzEyODA6ImNwOTM2Iixl''@;'; put 'put ''dWNjbjoiY3A5MzYiLHdpbmRvd3M5MzY6ImNwOTM2IixtczkzNjoiY3A5MzYiLDkzNjoiY3A5MzYiLGNwOTM2Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZCg3NDQ4OCl9fSxnYms6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBkKDc0NDg4KS5j''@;'; put 'put ''b25jYXQoZCg1NTkxNCkpfX0seGdiazoiZ2JrIixpc29pcjU4OiJnYmsiLGdiMTgwMzA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBkKDc0NDg4KS5jb25jYXQoZCg1NTkxNCkpfSxnYjE4MDMwOmZ1bmN0aW9uKCl7cmV0dXJuIGQoOTkxMjkpfSxlbmNvZGVTa2lwVmFs''@;'; put 'put ''czpbMTI4XSxlbmNvZGVBZGQ6eyJcdTIwYWMiOjQxNjk5fX0sY2hpbmVzZToiZ2IxODAzMCIsd2luZG93czk0OToiY3A5NDkiLG1zOTQ5OiJjcDk0OSIsOTQ5OiJjcDk0OSIsY3A5NDk6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBkKDIxMTY2KX19LGNzZXVja3I6ImNw''@;'; put 'put ''OTQ5Iixjc2tzYzU2MDExOTg3OiJjcDk0OSIsZXVja3I6ImNwOTQ5Iixpc29pcjE0OToiY3A5NDkiLGtvcmVhbjoiY3A5NDkiLGtzYzU2MDExOTg3OiJjcDk0OSIsa3NjNTYwMTE5ODk6ImNwOTQ5Iixrc2M1NjAxOiJjcDk0OSIsd2luZG93czk1MDoiY3A5NTAiLG1zOTUwOiJjcDk1MCIsOTUw''@;'; put 'put ''OiJjcDk1MCIsY3A5NTA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBkKDcyMzI0KX19LGJpZzU6ImJpZzVoa3NjcyIsYmlnNWhrc2NzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZCg3MjMyNCkuY29uY2F0KGQoNDMyNjcpKX0sZW5jb2RlU2tp''@;'; put 'put ''cFZhbHM6WzQxNjc2XX0sY25iaWc1OiJiaWc1aGtzY3MiLGNzYmlnNToiYmlnNWhrc2NzIix4eGJpZzU6ImJpZzVoa3NjcyJ9fSw3Mjg5Myh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIFM9W2QoMTUyNTkpLGQoMzUwODkpLGQoNzE3NSksZCg5NzQ3KSxkKDU4Njc3KSxkKDc2MjMpLGQo''@;'; put 'put ''MzAxODcpLGQoOTM2OTQpLGQoNDUyNzgpXSxoPTA7aDxTLmxlbmd0aDtoKyspe3ZhciBvPVNbaF07Zm9yKHZhciBJIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sSSkmJihqW0ldPW9bSV0pfX0sMTUyNTkodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg5''@;'; put 'put ''MzgwNykuQnVmZmVyO2Z1bmN0aW9uIGgoTyxEKXt0aGlzLmVuYz1PLmVuY29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPU8uYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVuYz90aGlzLmVuY29kZXI9VDoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPUEs''@;'; put 'put ''Ilx1ezFmNGE5fSIhPT1TLmZyb20oImVkYTBiZGVkYjJhOSIsImhleCIpLnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9TSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1ELmRlZmF1bHRDaGFyVW5pY29kZSkpfXRlLmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9''@;'; put 'put ''LGNlc3U4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4''@;'; put 'put ''Ont0eXBlOiJfaW50ZXJuYWwifSxfaW50ZXJuYWw6aH0saC5wcm90b3R5cGUuZW5jb2Rlcj1mLGgucHJvdG90eXBlLmRlY29kZXI9STt2YXIgbz1kKDc4NDU0KS5JO2Z1bmN0aW9uIEkoTyxEKXtvLmNhbGwodGhpcyxELmVuYyl9ZnVuY3Rpb24gZihPLEQpe3RoaXMuZW5jPUQuZW5jfWZ1bmN0''@;'; put 'put ''aW9uIFQoTyxEKXt0aGlzLnByZXZTdHI9IiJ9ZnVuY3Rpb24gQShPLEQpe31mdW5jdGlvbiBNKE8sRCl7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMuYWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1ELmRlZmF1bHRDaGFyVW5pY29kZX1vLnByb3RvdHlwZS5lbmR8''@;'; put 'put ''fChvLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9KSxJLnByb3RvdHlwZT1vLnByb3RvdHlwZSxmLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihPKXtyZXR1cm4gUy5mcm9tKE8sdGhpcy5lbmMpfSxmLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFQucHJvdG90eXBlLndyaXRlPWZ1bmN0''@;'; put 'put ''aW9uKE8pe3ZhciBEPShPPXRoaXMucHJldlN0citPKS5sZW5ndGgtTy5sZW5ndGglNDtyZXR1cm4gdGhpcy5wcmV2U3RyPU8uc2xpY2UoRCksTz1PLnNsaWNlKDAsRCksUy5mcm9tKE8sImJhc2U2NCIpfSxULnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gUy5mcm9tKHRoaXMucHJl''@;'; put 'put ''dlN0ciwiYmFzZTY0Iil9LEEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE8pe2Zvcih2YXIgRD1TLmFsbG9jKDMqTy5sZW5ndGgpLEU9MCxCPTA7QjxPLmxlbmd0aDtCKyspe3ZhciBGPU8uY2hhckNvZGVBdChCKTtGPDEyOD9EW0UrK109RjpGPDIwNDg/KERbRSsrXT0xOTIrKEY+Pj42KSxE''@;'; put 'put ''W0UrK109MTI4Kyg2MyZGKSk6KERbRSsrXT0yMjQrKEY+Pj4xMiksRFtFKytdPTEyOCsoRj4+PjYmNjMpLERbRSsrXT0xMjgrKDYzJkYpKX1yZXR1cm4gRC5zbGljZSgwLEUpfSxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LE0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE8pe2Zvcih2''@;'; put 'put ''YXIgRD10aGlzLmFjYyxFPXRoaXMuY29udEJ5dGVzLEI9dGhpcy5hY2NCeXRlcyxGPSIiLE49MDtOPE8ubGVuZ3RoO04rKyl7dmFyIEg9T1tOXTsxMjghPSgxOTImSCk/KEU+MCYmKEYrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLEU9MCksSDwxMjg/Ris9U3RyaW5nLmZyb21DaGFyQ29kZShI''@;'; put 'put ''KTpIPDIyND8oRD0zMSZILEU9MSxCPTEpOkg8MjQwPyhEPTE1JkgsRT0yLEI9MSk6Ris9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpOkU+MD8oRD1EPDw2fDYzJkgsQisrLDA9PS0tRSYmKEYrPTI9PT1CJiZEPDEyOCYmRD4wfHwzPT09QiYmRDwyMDQ4P3RoaXMuZGVmYXVsdENoYXJVbmljb2Rl''@;'; put 'put ''OlN0cmluZy5mcm9tQ2hhckNvZGUoRCkpKTpGKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZX1yZXR1cm4gdGhpcy5hY2M9RCx0aGlzLmNvbnRCeXRlcz1FLHRoaXMuYWNjQnl0ZXM9QixGfSxNLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgTz0wO3JldHVybiB0aGlzLmNvbnRCeXRlcz4w''@;'; put 'put ''JiYoTys9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpLE99fSw1ODY3Nyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gaChmLFQpe2lmKCFmKXRocm93IG5ldyBFcnJvcigiU0JDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtp''@;'; put 'put ''ZighZi5jaGFyc3x8MTI4IT09Zi5jaGFycy5sZW5ndGgmJjI1NiE9PWYuY2hhcnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrZi50eXBlKyInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NikiKTtpZigxMjg9PT1mLmNoYXJzLmxl''@;'; put 'put ''bmd0aCl7Zm9yKHZhciBBPSIiLE09MDtNPDEyODtNKyspQSs9U3RyaW5nLmZyb21DaGFyQ29kZShNKTtmLmNoYXJzPUErZi5jaGFyc310aGlzLmRlY29kZUJ1Zj1TLmZyb20oZi5jaGFycywidWNzMiIpO3ZhciBPPVMuYWxsb2MoNjU1MzYsVC5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNv''@;'; put 'put ''ZGVBdCgwKSk7Zm9yKE09MDtNPGYuY2hhcnMubGVuZ3RoO00rKylPW2YuY2hhcnMuY2hhckNvZGVBdChNKV09TTt0aGlzLmVuY29kZUJ1Zj1PfWZ1bmN0aW9uIG8oZixUKXt0aGlzLmVuY29kZUJ1Zj1ULmVuY29kZUJ1Zn1mdW5jdGlvbiBJKGYsVCl7dGhpcy5kZWNvZGVCdWY9VC5kZWNvZGVC''@;'; put 'put ''dWZ9ai5fc2Jjcz1oLGgucHJvdG90eXBlLmVuY29kZXI9byxoLnByb3RvdHlwZS5kZWNvZGVyPUksby5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZil7Zm9yKHZhciBUPVMuYWxsb2MoZi5sZW5ndGgpLEE9MDtBPGYubGVuZ3RoO0ErKylUW0FdPXRoaXMuZW5jb2RlQnVmW2YuY2hhckNvZGVB''@;'; put 'put ''dChBKV07cmV0dXJuIFR9LG8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sSS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZil7Zm9yKHZhciBUPXRoaXMuZGVjb2RlQnVmLEE9Uy5hbGxvYygyKmYubGVuZ3RoKSxNPTAsTz0wLEQ9MDtEPGYubGVuZ3RoO0QrKylBW089MipEXT1UW009Mipm''@;'; put 'put ''W0RdXSxBW08rMV09VFtNKzFdO3JldHVybiBBLnRvU3RyaW5nKCJ1Y3MyIil9LEkucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe319LDMwMTg3KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz17NDM3OiJjcDQzNyIsNzM3OiJjcDczNyIsNzc1OiJjcDc3NSIsODUwOiJjcDg1MCIsODUyOiJj''@;'; put 'put ''cDg1MiIsODU1OiJjcDg1NSIsODU2OiJjcDg1NiIsODU3OiJjcDg1NyIsODU4OiJjcDg1OCIsODYwOiJjcDg2MCIsODYxOiJjcDg2MSIsODYyOiJjcDg2MiIsODYzOiJjcDg2MyIsODY0OiJjcDg2NCIsODY1OiJjcDg2NSIsODY2OiJjcDg2NiIsODY5OiJjcDg2OSIsODc0OiJ3aW5kb3dzODc0''@;'; put 'put ''Iiw5MjI6ImNwOTIyIiwxMDQ2OiJjcDEwNDYiLDExMjQ6ImNwMTEyNCIsMTEyNToiY3AxMTI1IiwxMTI5OiJjcDExMjkiLDExMzM6ImNwMTEzMyIsMTE2MToiY3AxMTYxIiwxMTYyOiJjcDExNjIiLDExNjM6ImNwMTE2MyIsMTI1MDoid2luZG93czEyNTAiLDEyNTE6IndpbmRvd3MxMjUxIiwx''@;'; put 'put ''MjUyOiJ3aW5kb3dzMTI1MiIsMTI1Mzoid2luZG93czEyNTMiLDEyNTQ6IndpbmRvd3MxMjU0IiwxMjU1OiJ3aW5kb3dzMTI1NSIsMTI1Njoid2luZG93czEyNTYiLDEyNTc6IndpbmRvd3MxMjU3IiwxMjU4OiJ3aW5kb3dzMTI1OCIsMjg1OTE6Imlzbzg4NTkxIiwyODU5MjoiaXNvODg1OTIi''@;'; put 'put ''LDI4NTkzOiJpc284ODU5MyIsMjg1OTQ6Imlzbzg4NTk0IiwyODU5NToiaXNvODg1OTUiLDI4NTk2OiJpc284ODU5NiIsMjg1OTc6Imlzbzg4NTk3IiwyODU5ODoiaXNvODg1OTgiLDI4NTk5OiJpc284ODU5OSIsMjg2MDA6Imlzbzg4NTkxMCIsMjg2MDE6Imlzbzg4NTkxMSIsMjg2MDM6Imlz''@;'; put 'put ''bzg4NTkxMyIsMjg2MDQ6Imlzbzg4NTkxNCIsMjg2MDU6Imlzbzg4NTkxNSIsMjg2MDY6Imlzbzg4NTkxNiIsd2luZG93czg3NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUw''@;'; put 'put ''ZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIy''@;'; put 'put ''XHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5''@;'; put 'put ''XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sd2luODc0OiJ3aW5kb3dzODc0IixjcDg3NDoid2luZG93czg3NCIsd2luZG93czEyNTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZk''@;'; put 'put ''XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRc''@;'; put 'put ''dTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAxNWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2''@;'; put 'put ''XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdc''@;'; put 'put ''dTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LHdpbjEyNTA6IndpbmRvd3MxMjUwIixjcDEyNTA6IndpbmRvd3MxMjUw''@;'; put 'put ''Iix3aW5kb3dzMTI1MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIw''@;'; put 'put ''MjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5''@;'; put 'put ''MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0''@;'; put 'put ''MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc''@;'; put 'put ''dTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx3aW4xMjUxOiJ3aW5kb3dzMTI1MSIsY3AxMjUxOiJ3aW5kb3dzMTI1MSIsd2luZG93''@;'; put 'put ''czEyNTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEz''@;'; put 'put ''XHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhi''@;'; put 'put ''Ylx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0''@;'; put 'put ''XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sd2luMTI1Mjoid2luZG93czEyNTIiLGNwMTI1Mjoid2luZG93czEyNTIiLHdpbmRvd3MxMjUz''@;'; put 'put ''Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAx''@;'; put 'put ''NFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAz''@;'; put 'put ''ODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNh''@;'; put 'put ''NVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1''@;'; put 'put ''MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LHdpbjEyNTM6IndpbmRvd3MxMjUzIixjcDEyNTM6IndpbmRvd3MxMjUzIix3aW5kb3dzMTI1NDp7dHlwZToiX3NiY3MiLGNoYXJz''@;'; put 'put ''OiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFc''@;'; put 'put ''dTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMx''@;'; put 'put ''XHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhl''@;'; put 'put ''OVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSx3aW4xMjU0OiJ3aW5kb3dzMTI1NCIsY3AxMjU0OiJ3aW5kb3dzMTI1NCIsd2luZG93czEyNTU6e3R5cGU6Il9zYmNz''@;'; put 'put ''IixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIy''@;'; put 'put ''XHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhi''@;'; put 'put ''Zlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1MDViYVx1MDViYlx1MDViY1x1MDViZFx1MDViZVx1MDViZlx1MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVl''@;'; put 'put ''Nlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LHdpbjEyNTU6IndpbmRvd3MxMjU1IixjcDEyNTU6IndpbmRvd3MxMjU1Iix3aW5kb3dzMTI1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVc''@;'; put 'put ''dTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEw''@;'; put 'put ''XHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUw''@;'; put 'put ''NjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2''@;'; put 'put ''NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRcdTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIn0sd2luMTI1''@;'; put 'put ''Njoid2luZG93czEyNTYiLGNwMTI1Njoid2luZG93czEyNTYiLHdpbmRvd3MxMjU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVm''@;'; put 'put ''ZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIw''@;'; put 'put ''XHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNc''@;'; put 'put ''dTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAx''@;'; put 'put ''NjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSJ9LHdpbjEyNTc6IndpbmRvd3MxMjU3IixjcDEyNTc6IndpbmRvd3MxMjU3Iix3aW5kb3dzMTI1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIw''@;'; put 'put ''YWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2Fc''@;'; put 'put ''dTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1''@;'; put 'put ''MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhl''@;'; put 'put ''OFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0sd2luMTI1ODoid2luZG93czEyNTgiLGNwMTI1ODoid2luZG93czEyNTgiLGlzbzg4NTkxOnt0eXBl''@;'; put 'put ''OiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRc''@;'; put 'put ''eGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4''@;'; put 'put ''Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhm''@;'; put 'put ''N1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODU5MToiaXNvODg1OTEiLGlzbzg4NTkyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkz''@;'; put 'put ''XHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDJkOFx1MDE0MVx4YTRcdTAxM2RcdTAxNWFceGE3XHhhOFx1MDE2MFx1MDE1ZVx1MDE2NFx1MDE3OVx4YWRcdTAxN2RcdTAxN2JceGIwXHUwMTA1XHUwMmRiXHUwMTQyXHhiNFx1MDEz''@;'; put 'put ''ZVx1MDE1Ylx1MDJjN1x4YjhcdTAxNjFcdTAxNWZcdTAxNjVcdTAxN2FcdTAyZGRcdTAxN2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0''@;'; put 'put ''XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1''@;'; put 'put ''MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sY3AyODU5MjoiaXNvODg1OTIiLGlzbzg4NTkzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4''@;'; put 'put ''OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEyNlx1MDJkOFx4YTNceGE0XHVmZmZkXHUwMTI0XHhhN1x4YThcdTAxMzBcdTAxNWVcdTAxMWVcdTAxMzRceGFkXHVmZmZkXHUwMTdiXHhiMFx1MDEyN1x4YjJc''@;'; put 'put ''eGIzXHhiNFx4YjVcdTAxMjVceGI3XHhiOFx1MDEzMVx1MDE1Zlx1MDExZlx1MDEzNVx4YmRcdWZmZmRcdTAxN2NceGMwXHhjMVx4YzJcdWZmZmRceGM0XHUwMTBhXHUwMTA4XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHVmZmZkXHhkMVx4ZDJceGQzXHhkNFx1MDEyMFx4''@;'; put 'put ''ZDZceGQ3XHUwMTFjXHhkOVx4ZGFceGRiXHhkY1x1MDE2Y1x1MDE1Y1x4ZGZceGUwXHhlMVx4ZTJcdWZmZmRceGU0XHUwMTBiXHUwMTA5XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHVmZmZkXHhmMVx4ZjJceGYzXHhmNFx1MDEyMVx4ZjZceGY3XHUwMTFkXHhmOVx4ZmFc''@;'; put 'put ''eGZiXHhmY1x1MDE2ZFx1MDE1ZFx1MDJkOSJ9LGNwMjg1OTM6Imlzbzg4NTkzIixpc284ODU5NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1''@;'; put 'put ''XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMzhcdTAxNTZceGE0XHUwMTI4XHUwMTNiXHhhN1x4YThcdTAxNjBcdTAxMTJcdTAxMjJcdTAxNjZceGFkXHUwMTdkXHhhZlx4YjBcdTAxMDVcdTAyZGJcdTAxNTdceGI0XHUwMTI5XHUwMTNjXHUw''@;'; put 'put ''MmM3XHhiOFx1MDE2MVx1MDExM1x1MDEyM1x1MDE2N1x1MDE0YVx1MDE3ZVx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VcdTAxMmFcdTAxMTBcdTAxNDVcdTAxNGNcdTAxMzZceGQ0XHhkNVx4ZDZceGQ3''@;'; put 'put ''XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x1MDE2OFx1MDE2YVx4ZGZcdTAxMDFceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExN1x4ZWRceGVlXHUwMTJiXHUwMTExXHUwMTQ2XHUwMTRkXHUwMTM3XHhmNFx4ZjVceGY2XHhmN1x4ZjhcdTAxNzNc''@;'; put 'put ''eGZhXHhmYlx4ZmNcdTAxNjlcdTAxNmJcdTAyZDkifSxjcDI4NTk0OiJpc284ODU5NCIsaXNvODg1OTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0''@;'; put 'put ''XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwNDAxXHUwNDAyXHUwNDAzXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUwNDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQx''@;'; put 'put ''NFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1''@;'; put 'put ''MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0''@;'; put 'put ''Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ1M1x1MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1MDQ1YVx1MDQ1Ylx1MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxjcDI4NTk1OiJpc284ODU5NSIsaXNvODg1OTY6e3R5cGU6Il9zYmNzIixj''@;'; put 'put ''aGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHVmZmZkXHVmZmZkXHhhNFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYwY1x4YWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWJcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWZcdWZmZmRcdTA2''@;'; put 'put ''MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTA2NTFcdTA2NTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NTk2OiJpc284ODU5NiIsaXNvODg1OTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBc''@;'; put 'put ''eDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUyMDE4XHUyMDE5XHhhM1x1MjBhY1x1MjBhZlx4YTZceGE3XHhhOFx4YTlcdTAzN2FceGFiXHhhY1x4YWRcdWZmZmRcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHUwMzg1''@;'; put 'put ''XHUwMzg2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVm''@;'; put 'put ''ZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2Jk''@;'; put 'put ''XHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIn0sY3AyODU5NzoiaXNvODg1OTciLGlzbzg4NTk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBc''@;'; put 'put ''eDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5''@;'; put 'put ''XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE3XHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3''@;'; put 'put ''XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sY3AyODU5ODoiaXNvODg1OTgi''@;'; put 'put ''LGlzbzg4NTk5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4''@;'; put 'put ''YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhj''@;'; put 'put ''YVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYx''@;'; put 'put ''XHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sY3AyODU5OToiaXNvODg1OTkiLGlzbzg4NTkxMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhj''@;'; put 'put ''XHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMTJcdTAxMjJcdTAxMmFcdTAxMjhcdTAxMzZceGE3XHUwMTNiXHUwMTEwXHUwMTYwXHUwMTY2XHUwMTdkXHhhZFx1MDE2YVx1MDE0''@;'; put 'put ''YVx4YjBcdTAxMDVcdTAxMTNcdTAxMjNcdTAxMmJcdTAxMjlcdTAxMzdceGI3XHUwMTNjXHUwMTExXHUwMTYxXHUwMTY3XHUwMTdlXHUyMDE1XHUwMTZiXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx4''@;'; put 'put ''Y2ZceGQwXHUwMTQ1XHUwMTRjXHhkM1x4ZDRceGQ1XHhkNlx1MDE2OFx4ZDhcdTAxNzJceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZcdTAxMDFceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExN1x4ZWRceGVlXHhlZlx4ZjBcdTAxNDZcdTAxNGRc''@;'; put 'put ''eGYzXHhmNFx4ZjVceGY2XHUwMTY5XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x4ZmRceGZlXHUwMTM4In0sY3AyODYwMDoiaXNvODg1OTEwIixpc284ODU5MTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4''@;'; put 'put ''OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUw''@;'; put 'put ''ZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJh''@;'; put 'put ''XHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUw''@;'; put 'put ''ZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODYwMToi''@;'; put 'put ''aXNvODg1OTExIixpc284ODU5MTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5''@;'; put 'put ''ZVx4OWZceGEwXHUyMDFkXHhhMlx4YTNceGE0XHUyMDFlXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x1MjAxY1x4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAx''@;'; put 'put ''MDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZc''@;'; put 'put ''dTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MjAxOSJ9''@;'; put 'put ''LGNwMjg2MDM6Imlzbzg4NTkxMyIsaXNvODg1OTE0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJc''@;'; put 'put ''eDljXHg5ZFx4OWVceDlmXHhhMFx1MWUwMlx1MWUwM1x4YTNcdTAxMGFcdTAxMGJcdTFlMGFceGE3XHUxZTgwXHhhOVx1MWU4Mlx1MWUwYlx1MWVmMlx4YWRceGFlXHUwMTc4XHUxZTFlXHUxZTFmXHUwMTIwXHUwMTIxXHUxZTQwXHUxZTQxXHhiNlx1MWU1Nlx1MWU4MVx1MWU1N1x1MWU4M1x1''@;'; put 'put ''MWU2MFx1MWVmM1x1MWU4NFx1MWU4NVx1MWU2MVx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNzRceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZcdTFlNmFceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxNzZceGRmXHhl''@;'; put 'put ''MFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDE3NVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx1MWU2Ylx4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3N1x4ZmYifSxjcDI4NjA0OiJpc284ODU5MTQiLGlzbzg4NTkxNTp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNc''@;'; put 'put ''dTIwYWNceGE1XHUwMTYwXHhhN1x1MDE2MVx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTdkXHhiNVx4YjZceGI3XHUwMTdlXHhiOVx4YmFceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4''@;'; put 'put ''YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhm''@;'; put 'put ''Mlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NjA1OiJpc284ODU5MTUiLGlzbzg4NTkxNjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4''@;'; put 'put ''OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMDVcdTAxNDFcdTIwYWNcdTIwMWVcdTAxNjBceGE3XHUwMTYxXHhhOVx1MDIxOFx4YWJcdTAxNzlceGFkXHUwMTdhXHUwMTdiXHhiMFx4YjFc''@;'; put 'put ''dTAxMGNcdTAxNDJcdTAxN2RcdTIwMWRceGI2XHhiN1x1MDE3ZVx1MDEwZFx1MDIxOVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhcdTAxN2NceGMwXHhjMVx4YzJcdTAxMDJceGM0XHUwMTA2XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExMFx1MDE0M1x4ZDJceGQz''@;'; put 'put ''XHhkNFx1MDE1MFx4ZDZcdTAxNWFcdTAxNzBceGQ5XHhkYVx4ZGJceGRjXHUwMTE4XHUwMjFhXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRcdTAxMDdceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTExXHUwMTQ0XHhmMlx4ZjNceGY0XHUwMTUxXHhmNlx1MDE1''@;'; put 'put ''Ylx1MDE3MVx4ZjlceGZhXHhmYlx4ZmNcdTAxMTlcdTAyMWJceGZmIn0sY3AyODYwNjoiaXNvODg1OTE2IixjcDQzNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2''@;'; put 'put ''XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJc''@;'; put 'put ''dTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1''@;'; put 'put ''NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNi''@;'; put 'put ''NVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTQzNzoiY3A0MzciLGNzaWJtNDM3OiJjcDQzNyIsY3A3Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMzkxXHUwMzky''@;'; put 'put ''XHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUw''@;'; put 'put ''M2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1''@;'; put 'put ''XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUy''@;'; put 'put ''NTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhl''@;'; put 'put ''XHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNzM3OiJjcDczNyIsY3NpYm03Mzc6ImNwNzM3IixjcDc3NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAxMDZceGZjXHhlOVx1MDEw''@;'; put 'put ''MVx4ZTRcdTAxMjNceGU1XHUwMTA3XHUwMTQyXHUwMTEzXHUwMTU2XHUwMTU3XHUwMTJiXHUwMTc5XHhjNFx4YzVceGM5XHhlNlx4YzZcdTAxNGRceGY2XHUwMTIyXHhhMlx1MDE1YVx1MDE1Ylx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x4YTRcdTAxMDBcdTAxMmFceGYzXHUwMTdiXHUwMTdj''@;'; put 'put ''XHUwMTdhXHUyMDFkXHhhNlx4YTlceGFlXHhhY1x4YmRceGJjXHUwMTQxXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAxMDRcdTAxMGNcdTAxMThcdTAxMTZcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxMmVcdTAxNjBcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNc''@;'; put 'put ''dTI1MWNcdTI1MDBcdTI1M2NcdTAxNzJcdTAxNmFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAxN2RcdTAxMDVcdTAxMGRcdTAxMTlcdTAxMTdcdTAxMmZcdTAxNjFcdTAxNzNcdTAxNmJcdTAxN2VcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1''@;'; put 'put ''OTBcdTI1ODBceGQzXHhkZlx1MDE0Y1x1MDE0M1x4ZjVceGQ1XHhiNVx1MDE0NFx1MDEzNlx1MDEzN1x1MDEzYlx1MDEzY1x1MDE0Nlx1MDExMlx1MDE0NVx1MjAxOVx4YWRceGIxXHUyMDFjXHhiZVx4YjZceGE3XHhmN1x1MjAxZVx4YjBcdTIyMTlceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhh''@;'; put 'put ''MCJ9LGlibTc3NToiY3A3NzUiLGNzaWJtNzc1OiJjcDc3NSIsY3A4NTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4''@;'; put 'put ''ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhh''@;'; put 'put ''Mlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4''@;'; put 'put ''YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODUwOiJjcDg1MCIsY3Np''@;'; put 'put ''Ym04NTA6ImNwODUwIixjcDg1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAx''@;'; put 'put ''NWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFc''@;'; put 'put ''dTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1''@;'; put 'put ''MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJc''@;'; put 'put ''dTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAifSxpYm04NTI6ImNwODUyIixjc2libTg1MjoiY3A4NTIiLGNwODU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ1Mlx1MDQwMlx1MDQ1M1x1MDQwM1x1MDQ1MVx1MDQwMVx1''@;'; put 'put ''MDQ1NFx1MDQwNFx1MDQ1NVx1MDQwNVx1MDQ1Nlx1MDQwNlx1MDQ1N1x1MDQwN1x1MDQ1OFx1MDQwOFx1MDQ1OVx1MDQwOVx1MDQ1YVx1MDQwYVx1MDQ1Ylx1MDQwYlx1MDQ1Y1x1MDQwY1x1MDQ1ZVx1MDQwZVx1MDQ1Zlx1MDQwZlx1MDQ0ZVx1MDQyZVx1MDQ0YVx1MDQyYVx1MDQzMFx1MDQx''@;'; put 'put ''MFx1MDQzMVx1MDQxMVx1MDQ0Nlx1MDQyNlx1MDQzNFx1MDQxNFx1MDQzNVx1MDQxNVx1MDQ0NFx1MDQyNFx1MDQzM1x1MDQxM1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwNDQ1XHUwNDI1XHUwNDM4XHUwNDE4XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwNDM5''@;'; put 'put ''XHUwNDE5XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwNDNhXHUwNDFhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDQzYlx1MDQxYlx1MDQzY1x1MDQxY1x1MDQzZFx1MDQxZFx1MDQzZVx1MDQxZVx1MDQzZlx1MjUx''@;'; put 'put ''OFx1MjUwY1x1MjU4OFx1MjU4NFx1MDQxZlx1MDQ0Zlx1MjU4MFx1MDQyZlx1MDQ0MFx1MDQyMFx1MDQ0MVx1MDQyMVx1MDQ0Mlx1MDQyMlx1MDQ0M1x1MDQyM1x1MDQzNlx1MDQxNlx1MDQzMlx1MDQxMlx1MDQ0Y1x1MDQyY1x1MjExNlx4YWRcdTA0NGJcdTA0MmJcdTA0MzdcdTA0MTdcdTA0''@;'; put 'put ''NDhcdTA0MjhcdTA0NGRcdTA0MmRcdTA0NDlcdTA0MjlcdTA0NDdcdTA0MjdceGE3XHUyNWEwXHhhMCJ9LGlibTg1NToiY3A4NTUiLGNzaWJtODU1OiJjcDg1NSIsY3A4NTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUw''@;'; put 'put ''NWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHhhM1x1ZmZmZFx4ZDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFlXHhhY1x4YmRceGJjXHVmZmZkXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdWZmZmRcdWZmZmRcdWZmZmRceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRc''@;'; put 'put ''dTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdWZmZmRcdWZmZmRcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx1''@;'; put 'put ''ZmZmZFx1MjU4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBc''@;'; put 'put ''eGEwIn0saWJtODU2OiJjcDg1NiIsY3NpYm04NTY6ImNwODU2IixjcDg1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTMxXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx1''@;'; put 'put ''MDEzMFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUwMTVlXHUwMTVmXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHUwMTFlXHUwMTFmXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUy''@;'; put 'put ''NTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGJhXHhhYVx4Y2FceGNiXHhjOFx1ZmZmZFx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1''@;'; put 'put ''MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx1ZmZmZFx4ZDdceGRhXHhkYlx4ZDlceGVjXHhmZlx4YWZceGI0XHhhZFx4YjFcdWZmZmRceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04''@;'; put 'put ''NTc6ImNwODU3Iixjc2libTg1NzoiY3A4NTciLGNwODU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4''@;'; put 'put ''ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUy''@;'; put 'put ''NTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTIwYWNceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1''@;'; put 'put ''MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1ODoiY3A4NTgiLGNzaWJtODU4OiJj''@;'; put 'put ''cDg1OCIsY3A4NjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTNceGUwXHhjMVx4ZTdceGVhXHhjYVx4ZThceGNkXHhkNFx4ZWNceGMzXHhjMlx4YzlceGMwXHhjOFx4ZjRceGY1XHhmMlx4ZGFceGY5XHhjY1x4ZDVceGRjXHhhMlx4YTNceGQ5XHUyMGE3XHhkM1x4''@;'; put 'put ''ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4ZDJceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRc''@;'; put 'put ''dTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1''@;'; put 'put ''ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIx''@;'; put 'put ''OVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MDoiY3A4NjAiLGNzaWJtODYwOiJjcDg2MCIsY3A4NjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2''@;'; put 'put ''XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUy''@;'; put 'put ''NTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0''@;'; put 'put ''XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZc''@;'; put 'put ''dTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjE6ImNwODYxIixjc2libTg2MToiY3A4NjEiLGNwODYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1''@;'; put 'put ''MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx4YTJceGEzXHhh''@;'; put 'put ''NVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1''@;'; put 'put ''MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUx''@;'; put 'put ''OFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4''@;'; put 'put ''ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYyOiJjcDg2MiIsY3NpYm04NjI6ImNwODYyIixjcDg2Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhjMlx4ZTBceGI2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUy''@;'; put 'put ''MDE3XHhjMFx4YTdceGM5XHhjOFx4Y2FceGY0XHhjYlx4Y2ZceGZiXHhmOVx4YTRceGQ0XHhkY1x4YTJceGEzXHhkOVx4ZGJcdTAxOTJceGE2XHhiNFx4ZjNceGZhXHhhOFx4YjhceGIzXHhhZlx4Y2VcdTIzMTBceGFjXHhiZFx4YmNceGJlXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1''@;'; put 'put ''MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNc''@;'; put 'put ''dTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1''@;'; put 'put ''MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MzoiY3A4NjMiLGNzaWJtODYzOiJjcDg2MyIsY3A4NjQ6e3R5cGU6Il9zYmNz''@;'; put 'put ''IixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkXHUwNjZhJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJD''@;'; put 'put ''REVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YjBceGI3XHUyMjE5XHUyMjFhXHUyNTkyXHUyNTAwXHUyNTAyXHUyNTNjXHUyNTI0XHUyNTJjXHUyNTFjXHUyNTM0XHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHUwM2IyXHUy''@;'; put 'put ''MjFlXHUwM2M2XHhiMVx4YmRceGJjXHUyMjQ4XHhhYlx4YmJcdWZlZjdcdWZlZjhcdWZmZmRcdWZmZmRcdWZlZmJcdWZlZmNcdWZmZmRceGEwXHhhZFx1ZmU4Mlx4YTNceGE0XHVmZTg0XHVmZmZkXHVmZmZkXHVmZThlXHVmZThmXHVmZTk1XHVmZTk5XHUwNjBjXHVmZTlkXHVmZWExXHVmZWE1''@;'; put 'put ''XHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWQxXHUwNjFiXHVmZWIxXHVmZWI1XHVmZWI5XHUwNjFmXHhhMlx1ZmU4MFx1ZmU4MVx1ZmU4M1x1ZmU4NVx1ZmVjYVx1ZmU4Ylx1ZmU4ZFx1ZmU5MVx1ZmU5M1x1ZmU5N1x1ZmU5''@;'; put 'put ''Ylx1ZmU5Zlx1ZmVhM1x1ZmVhN1x1ZmVhOVx1ZmVhYlx1ZmVhZFx1ZmVhZlx1ZmViM1x1ZmViN1x1ZmViYlx1ZmViZlx1ZmVjMVx1ZmVjNVx1ZmVjYlx1ZmVjZlx4YTZceGFjXHhmN1x4ZDdcdWZlYzlcdTA2NDBcdWZlZDNcdWZlZDdcdWZlZGJcdWZlZGZcdWZlZTNcdWZlZTdcdWZlZWJcdWZl''@;'; put 'put ''ZWRcdWZlZWZcdWZlZjNcdWZlYmRcdWZlY2NcdWZlY2VcdWZlY2RcdWZlZTFcdWZlN2RcdTA2NTFcdWZlZTVcdWZlZTlcdWZlZWNcdWZlZjBcdWZlZjJcdWZlZDBcdWZlZDVcdWZlZjVcdWZlZjZcdWZlZGRcdWZlZDlcdWZlZjFcdTI1YTBcdWZmZmQifSxpYm04NjQ6ImNwODY0Iixjc2libTg2''@;'; put 'put ''NDoiY3A4NjQiLGNwODY1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1''@;'; put 'put ''MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUx''@;'; put 'put ''MFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1''@;'; put 'put ''MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhc''@;'; put 'put ''eGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODY1OiJjcDg2NSIsY3NpYm04NjU6ImNwODY1IixjcDg2Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0''@;'; put 'put ''MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1''@;'; put 'put ''MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRc''@;'; put 'put ''dTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIw''@;'; put 'put ''XHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtODY2OiJjcDg2NiIsY3NpYm04NjY6ImNwODY2IixjcDg2OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzODZcdWZmZmRceGI3XHhhY1x4YTZcdTIwMThc''@;'; put 'put ''dTIwMTlcdTAzODhcdTIwMTVcdTAzODlcdTAzOGFcdTAzYWFcdTAzOGNcdWZmZmRcdWZmZmRcdTAzOGVcdTAzYWJceGE5XHUwMzhmXHhiMlx4YjNcdTAzYWNceGEzXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NhXHUwMzkwXHUwM2NjXHUwM2NkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1''@;'; put 'put ''XHUwMzk2XHUwMzk3XHhiZFx1MDM5OFx1MDM5OVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMzllXHUwMzlmXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUy''@;'; put 'put ''NTNjXHUwM2EwXHUwM2ExXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwM2I0XHUwM2I1XHUyNTgwXHUwM2I2''@;'; put 'put ''XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwMzg0XHhhZFx4YjFcdTAzYzVcdTAzYzZcdTAzYzdceGE3XHUwM2M4XHUwMzg1XHhiMFx4YThcdTAzYzlcdTAzY2JcdTAzYjBcdTAzY2Vc''@;'; put 'put ''dTI1YTBceGEwIn0saWJtODY5OiJjcDg2OSIsY3NpYm04Njk6ImNwODY5IixjcDkyMjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4''@;'; put 'put ''OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx1MjAzZVx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZc''@;'; put 'put ''eGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTYwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3ZFx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4''@;'; put 'put ''ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTYxXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3ZVx4ZmYifSxpYm05MjI6ImNwOTIyIixjc2libTkyMjoiY3A5MjIiLGNwMTA0Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZl''@;'; put 'put ''ODhceGQ3XHhmN1x1ZjhmNlx1ZjhmNVx1ZjhmNFx1ZjhmN1x1ZmU3MVx4ODhcdTI1YTBcdTI1MDJcdTI1MDBcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdWZlNzlcdWZlN2JcdWZlN2RcdWZlN2ZcdWZlNzdcdWZlOGFcdWZlZjBcdWZlZjNcdWZlZjJcdWZlY2VcdWZlY2ZcdWZlZDBcdWZlZjZc''@;'; put 'put ''dWZlZjhcdWZlZmFcdWZlZmNceGEwXHVmOGZhXHVmOGY5XHVmOGY4XHhhNFx1ZjhmYlx1ZmU4Ylx1ZmU5MVx1ZmU5N1x1ZmU5Ylx1ZmU5Zlx1ZmVhM1x1MDYwY1x4YWRcdWZlYTdcdWZlYjNcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2''@;'; put 'put ''NjlcdWZlYjdcdTA2MWJcdWZlYmJcdWZlYmZcdWZlY2FcdTA2MWZcdWZlY2JcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRc''@;'; put 'put ''dTA2MzVcdTA2MzZcdTA2MzdcdWZlYzdcdTA2MzlcdTA2M2FcdWZlY2NcdWZlODJcdWZlODRcdWZlOGVcdWZlZDNcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2''@;'; put 'put ''NTBcdTA2NTFcdTA2NTJcdWZlZDdcdWZlZGJcdWZlZGZcdWY4ZmNcdWZlZjVcdWZlZjdcdWZlZjlcdWZlZmJcdWZlZTNcdWZlZTdcdWZlZWNcdWZlZTlcdWZmZmQifSxpYm0xMDQ2OiJjcDEwNDYiLGNzaWJtMTA0NjoiY3AxMDQ2IixjcDExMjQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4''@;'; put 'put ''ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwNDAxXHUwNDAyXHUwNDkwXHUwNDA0XHUwNDA1XHUwNDA2XHUw''@;'; put 'put ''NDA3XHUwNDA4XHUwNDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1''@;'; put 'put ''MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ5MVx1MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1''@;'; put 'put ''MDQ1YVx1MDQ1Ylx1MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxpYm0xMTI0OiJjcDExMjQiLGNzaWJtMTEyNDoiY3AxMTI0IixjcDExMjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFh''@;'; put 'put ''XHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0''@;'; put 'put ''XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUy''@;'; put 'put ''NThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDkwXHUwNDkxXHUwNDA0XHUwNDU0XHUwNDA2XHUwNDU2XHUwNDA3''@;'; put 'put ''XHUwNDU3XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtMTEyNToiY3AxMTI1Iixjc2libTExMjU6ImNwMTEyNSIsY3AxMTI5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4''@;'; put 'put ''OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdcdTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhi''@;'; put 'put ''N1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAx''@;'; put 'put ''YWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExMjk6''@;'; put 'put ''ImNwMTEyOSIsY3NpYm0xMTI5OiJjcDExMjkiLGNwMTEzMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFc''@;'; put 'put ''eDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBlODhcdTBlYWFcdTBlOGFcdTBlOGRcdTBlOTRcdTBlOTVcdTBlOTZcdTBlOTdcdTBlOTlcdTBlOWFcdTBlOWJcdTBlOWNcdTBlOWRcdTBlOWVcdTBlOWZcdTBlYTFcdTBlYTJcdTBlYTNcdTBlYTVcdTBl''@;'; put 'put ''YTdcdTBlYWJcdTBlYWRcdTBlYWVcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYWZcdTBlYjBcdTBlYjJcdTBlYjNcdTBlYjRcdTBlYjVcdTBlYjZcdTBlYjdcdTBlYjhcdTBlYjlcdTBlYmNcdTBlYjFcdTBlYmJcdTBlYmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYzBcdTBlYzFcdTBlYzJcdTBlYzNc''@;'; put 'put ''dTBlYzRcdTBlYzhcdTBlYzlcdTBlY2FcdTBlY2JcdTBlY2NcdTBlY2RcdTBlYzZcdWZmZmRcdTBlZGNcdTBlZGRcdTIwYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTBlZDBcdTBlZDFcdTBlZDJcdTBlZDNcdTBlZDRcdTBlZDVcdTBlZDZcdTBlZDdcdTBlZDhcdTBlZDlcdWZmZmRcdWZmZmRceGEyXHhhY1x4YTZcdWZmZmQifSxpYm0xMTMzOiJjcDExMzMiLGNzaWJtMTEzMzoiY3AxMTMzIixjcDExNjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTQ4XHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3''@;'; put 'put ''XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUw''@;'; put 'put ''ZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHUwZTQ5XHUwZTRhXHUwZTRiXHUyMGFjXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRl''@;'; put 'put ''XHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHhhMlx4YWNceGE2XHhhMCJ9LGlibTExNjE6ImNwMTE2MSIsY3NpYm0xMTYxOiJjcDExNjEiLGNwMTE2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIw''@;'; put 'put ''YWNceDgxXHg4Mlx4ODNceDg0XHUyMDI2XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNc''@;'; put 'put ''dTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBl''@;'; put 'put ''MWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2Fc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBl''@;'; put 'put ''NTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpYm0xMTYyOiJjcDExNjIiLGNzaWJtMTE2MjoiY3AxMTYyIixjcDExNjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4''@;'; put 'put ''OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFjXHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhi''@;'; put 'put ''Mlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4''@;'; put 'put ''ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFi''@;'; put 'put ''MFx1MjBhYlx4ZmYifSxpYm0xMTYzOiJjcDExNjMiLGNzaWJtMTE2MzoiY3AxMTYzIixtYWNjcm9hdGlhbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4''@;'; put 'put ''ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVcdTAxNjBcdTIxMjJceGI0XHhhOFx1MjI2MFx1MDE3ZFx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUyMjA2XHhiNVx1MjIwMlx1MjIx''@;'; put 'put ''MVx1MjIwZlx1MDE2MVx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTdlXHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MDEwNlx4YWJcdTAxMGNcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUwMTEwXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1''@;'; put 'put ''MjVjYVx1ZmZmZFx4YTlcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHhjNlx4YmJcdTIwMTNceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx1MDEwN1x4YzFcdTAxMGRceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHUwMTExXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZc''@;'; put 'put ''dTAzYzBceGNiXHUwMmRhXHhiOFx4Y2FceGU2XHUwMmM3In0sbWFjY3lyaWxsaWM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFm''@;'; put 'put ''XHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2''@;'; put 'put ''MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1''@;'; put 'put ''MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZc''@;'; put 'put ''dTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sbWFjZ3JlZWs6e3R5cGU6''@;'; put 'put ''Il9zYmNzIixjaGFyczoiXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkz''@;'; put 'put ''XHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNh''@;'; put 'put ''OVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2Fl''@;'; put 'put ''XHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUw''@;'; put 'put ''M2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIn0sbWFjaWNlbGFuZDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVc''@;'; put 'put ''eGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAz''@;'; put 'put ''YzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhc''@;'; put 'put ''dTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAy''@;'; put 'put ''ZGRcdTAyZGJcdTAyYzcifSxtYWNyb21hbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4''@;'; put 'put ''ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4Zjhc''@;'; put 'put ''eGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZi''@;'; put 'put ''MDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWNy''@;'; put 'put ''b21hbmlhOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhi''@;'; put 'put ''MFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx1MDEwMlx1MDE1ZVx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTAzXHUwMTVmXHhiZlx4YTFceGFj''@;'; put 'put ''XHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHUwMTYyXHUwMTYzXHUyMDIxXHhi''@;'; put 'put ''N1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdGhhaTp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJceGFiXHhiYlx1MjAyNlx1Zjg4Y1x1Zjg4Zlx1Zjg5Mlx1Zjg5NVx1Zjg5OFx1Zjg4Ylx1Zjg4ZVx1Zjg5MVx1Zjg5NFx1Zjg5N1x1MjAxY1x1MjAxZFx1Zjg5OVx1ZmZmZFx1MjAyMlx1Zjg4NFx1Zjg4OVx1Zjg4NVx1Zjg4Nlx1Zjg4N1x1Zjg4OFx1Zjg4YVx1Zjg4''@;'; put 'put ''ZFx1Zjg5MFx1Zjg5M1x1Zjg5Nlx1MjAxOFx1MjAxOVx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBl''@;'; put 'put ''MTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBc''@;'; put 'put ''dTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZlZmZcdTIwMGJcdTIwMTNcdTIwMTRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBl''@;'; put 'put ''NGNcdTBlNGRcdTIxMjJcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlceGFlXHhhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LG1hY3R1cmtpc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4''@;'; put 'put ''ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRc''@;'; put 'put ''eGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1''@;'; put 'put ''XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2Zc''@;'; put 'put ''eGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN1a3JhaW5lOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQx''@;'; put 'put ''NVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4''@;'; put 'put ''YjBcdTA0OTBceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUwNDkxXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUw''@;'; put 'put ''NDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIx''@;'; put 'put ''MTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdc''@;'; put 'put ''dTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sa29pOHI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThj''@;'; put 'put ''XHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTI1NTNcdTI1NTRcdTI1NTVcdTI1NTZcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFc''@;'; put 'put ''dTI1NWJcdTI1NWNcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTI1NjJcdTI1NjNcdTI1NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTI1NmJcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMz''@;'; put 'put ''XHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUw''@;'; put 'put ''NDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3''@;'; put 'put ''XHUwNDJhIn0sa29pOHU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUy''@;'; put 'put ''MjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1''@;'; put 'put ''NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUw''@;'; put 'put ''NDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4''@;'; put 'put ''XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHJ1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1''@;'; put 'put ''MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFc''@;'; put 'put ''eGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUwNDVlXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2''@;'; put 'put ''XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUwNDBlXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1''@;'; put 'put ''MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaTh0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Ylx1MDQ5M1x1MjAxYVx1MDQ5Mlx1MjAxZVx1MjAyNlx1MjAy''@;'; put 'put ''MFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDRiM1x1MjAzOVx1MDRiMlx1MDRiN1x1MDRiNlx1ZmZmZFx1MDQ5YVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDRlZlx1''@;'; put 'put ''MDRlZVx1MDQ1MVx4YTRcdTA0ZTNceGE2XHhhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdWZmZmRceGIwXHhiMVx4YjJcdTA0MDFcdWZmZmRcdTA0ZTJceGI2XHhiN1x1ZmZmZFx1MjExNlx1ZmZmZFx4YmJcdWZmZmRcdWZmZmRcdWZmZmRceGE5XHUwNDRlXHUwNDMwXHUw''@;'; put 'put ''NDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5''@;'; put 'put ''XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUw''@;'; put 'put ''NDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sYXJtc2NpaTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZc''@;'; put 'put ''eDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHUwNTg3XHUwNTg5KShceGJiXHhhYlx1MjAxNC5cdTA1NWQsLVx1MDU4YVx1MjAyNlx1MDU1Y1x1MDU1Ylx1MDU1ZVx1MDUzMVx1MDU2MVx1MDUzMlx1MDU2Mlx1MDUzM1x1MDU2M1x1MDUzNFx1MDU2NFx1MDUz''@;'; put 'put ''NVx1MDU2NVx1MDUzNlx1MDU2Nlx1MDUzN1x1MDU2N1x1MDUzOFx1MDU2OFx1MDUzOVx1MDU2OVx1MDUzYVx1MDU2YVx1MDUzYlx1MDU2Ylx1MDUzY1x1MDU2Y1x1MDUzZFx1MDU2ZFx1MDUzZVx1MDU2ZVx1MDUzZlx1MDU2Zlx1MDU0MFx1MDU3MFx1MDU0MVx1MDU3MVx1MDU0Mlx1MDU3Mlx1''@;'; put 'put ''MDU0M1x1MDU3M1x1MDU0NFx1MDU3NFx1MDU0NVx1MDU3NVx1MDU0Nlx1MDU3Nlx1MDU0N1x1MDU3N1x1MDU0OFx1MDU3OFx1MDU0OVx1MDU3OVx1MDU0YVx1MDU3YVx1MDU0Ylx1MDU3Ylx1MDU0Y1x1MDU3Y1x1MDU0ZFx1MDU3ZFx1MDU0ZVx1MDU3ZVx1MDU0Zlx1MDU3Zlx1MDU1MFx1MDU4''@;'; put 'put ''MFx1MDU1MVx1MDU4MVx1MDU1Mlx1MDU4Mlx1MDU1M1x1MDU4M1x1MDU1NFx1MDU4NFx1MDU1NVx1MDU4NVx1MDU1Nlx1MDU4Nlx1MDU1YVx1ZmZmZCJ9LHJrMTA0ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFc''@;'; put 'put ''dTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0OWFcdTA0YmFcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0OWJcdTA0YmJcdTA0NWZceGEwXHUwNGIwXHUwNGIxXHUwNGQ4''@;'; put 'put ''XHhhNFx1MDRlOFx4YTZceGE3XHUwNDAxXHhhOVx1MDQ5Mlx4YWJceGFjXHhhZFx4YWVcdTA0YWVceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDRlOVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ5M1x4YmJcdTA0ZDlcdTA0YTJcdTA0YTNcdTA0YWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNc''@;'; put 'put ''dTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0''@;'; put 'put ''MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFc''@;'; put 'put ''dTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx0Y3ZuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHhkYVx1MWVlNFx4MDNcdTFlZWFcdTFlZWNcdTFlZWVceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHUxZWU4XHUxZWYwXHUxZWYyXHUxZWY2XHUxZWY4XHhkZFx1MWVmNFx4MThc''@;'; put 'put ''eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGMwXHUxZWEyXHhjM1x4YzFcdTFlYTBcdTFlYjZcdTFlYWNc''@;'; put 'put ''eGM4XHUxZWJhXHUxZWJjXHhjOVx1MWViOFx1MWVjNlx4Y2NcdTFlYzhcdTAxMjhceGNkXHUxZWNhXHhkMlx1MWVjZVx4ZDVceGQzXHUxZWNjXHUxZWQ4XHUxZWRjXHUxZWRlXHUxZWUwXHUxZWRhXHUxZWUyXHhkOVx1MWVlNlx1MDE2OFx4YTBcdTAxMDJceGMyXHhjYVx4ZDRcdTAxYTBcdTAx''@;'; put 'put ''YWZcdTAxMTBcdTAxMDNceGUyXHhlYVx4ZjRcdTAxYTFcdTAxYjBcdTAxMTFcdTFlYjBcdTAzMDBcdTAzMDlcdTAzMDNcdTAzMDFcdTAzMjNceGUwXHUxZWEzXHhlM1x4ZTFcdTFlYTFcdTFlYjJcdTFlYjFcdTFlYjNcdTFlYjVcdTFlYWZcdTFlYjRcdTFlYWVcdTFlYTZcdTFlYThcdTFlYWFc''@;'; put 'put ''dTFlYTRcdTFlYzBcdTFlYjdcdTFlYTdcdTFlYTlcdTFlYWJcdTFlYTVcdTFlYWRceGU4XHUxZWMyXHUxZWJiXHUxZWJkXHhlOVx1MWViOVx1MWVjMVx1MWVjM1x1MWVjNVx1MWViZlx1MWVjN1x4ZWNcdTFlYzlcdTFlYzRcdTFlYmVcdTFlZDJcdTAxMjlceGVkXHUxZWNiXHhmMlx1MWVkNFx1''@;'; put 'put ''MWVjZlx4ZjVceGYzXHUxZWNkXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWQxXHUxZWQ5XHUxZWRkXHUxZWRmXHUxZWUxXHUxZWRiXHUxZWUzXHhmOVx1MWVkNlx1MWVlN1x1MDE2OVx4ZmFcdTFlZTVcdTFlZWJcdTFlZWRcdTFlZWZcdTFlZTlcdTFlZjFcdTFlZjNcdTFlZjdcdTFlZjlceGZkXHUx''@;'; put 'put ''ZWY1XHUxZWQwIn0sZ2VvcmdpYW5hY2FkZW15Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1''@;'; put 'put ''MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4Yjlc''@;'; put 'put ''eGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEw''@;'; put 'put ''ZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZWZcdTEwZjBcdTEwZjFcdTEwZjJcdTEwZjNcdTEwZjRcdTEwZjVcdTEwZjZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4Zjhc''@;'; put 'put ''eGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sZ2VvcmdpYW5wczp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlc''@;'; put 'put ''dTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2''@;'; put 'put ''XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGYxXHUxMGQ3XHUxMGQ4XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGYyXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUx''@;'; put 'put ''MGYzXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVhXHUxMGViXHUxMGVjXHUxMGVkXHUxMGVlXHUxMGY0XHUxMGVmXHUxMGYwXHUxMGY1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4''@;'; put 'put ''ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxwdDE1NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OTZcdTA0OTJcdTA0ZWVcdTA0OTNcdTIwMWVcdTIwMjZcdTA0YjZcdTA0YWVcdTA0YjJcdTA0YWZcdTA0YTBcdTA0ZTJcdTA0YTJcdTA0OWFcdTA0YmFcdTA0Yjhc''@;'; put 'put ''dTA0OTdcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA0YjNcdTA0YjdcdTA0YTFcdTA0ZTNcdTA0YTNcdTA0OWJcdTA0YmJcdTA0YjlceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHUwNGU4XHUwNDk4XHUwNGIwXHhhN1x1MDQwMVx4YTlcdTA0ZDhceGFiXHhhY1x1''@;'; put 'put ''MDRlZlx4YWVcdTA0OWNceGIwXHUwNGIxXHUwNDA2XHUwNDU2XHUwNDk5XHUwNGU5XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0ZDlceGJiXHUwNDU4XHUwNGFhXHUwNGFiXHUwNDlkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUw''@;'; put 'put ''NDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1''@;'; put 'put ''XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdmlzY2lp''@;'; put 'put ''Ont0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx1MWViMlx4MDNceDA0XHUxZWI0XHUxZWFhXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x1MWVmNlx4MTVceDE2XHgxN1x4MThcdTFlZjhceDFhXHgxYlx4MWNceDFkXHUxZWY0XHgxZiAhXCIjJCUmJygpKissLS4v''@;'; put 'put ''MDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUxZWEwXHUxZWFlXHUxZWIwXHUxZWI2XHUxZWE0XHUxZWE2XHUxZWE4XHUxZWFjXHUxZWJjXHUxZWI4XHUxZWJlXHUxZWMwXHUxZWMyXHUx''@;'; put 'put ''ZWM0XHUxZWM2XHUxZWQwXHUxZWQyXHUxZWQ0XHUxZWQ2XHUxZWQ4XHUxZWUyXHUxZWRhXHUxZWRjXHUxZWRlXHUxZWNhXHUxZWNlXHUxZWNjXHUxZWM4XHUxZWU2XHUwMTY4XHUxZWU0XHUxZWYyXHhkNVx1MWVhZlx1MWViMVx1MWViN1x1MWVhNVx1MWVhN1x1MWVhOVx1MWVhZFx1MWViZFx1''@;'; put 'put ''MWViOVx1MWViZlx1MWVjMVx1MWVjM1x1MWVjNVx1MWVjN1x1MWVkMVx1MWVkM1x1MWVkNVx1MWVkN1x1MWVlMFx1MDFhMFx1MWVkOVx1MWVkZFx1MWVkZlx1MWVjYlx1MWVmMFx1MWVlOFx1MWVlYVx1MWVlY1x1MDFhMVx1MWVkYlx1MDFhZlx4YzBceGMxXHhjMlx4YzNcdTFlYTJcdTAxMDJc''@;'; put 'put ''dTFlYjNcdTFlYjVceGM4XHhjOVx4Y2FcdTFlYmFceGNjXHhjZFx1MDEyOFx1MWVmM1x1MDExMFx1MWVlOVx4ZDJceGQzXHhkNFx1MWVhMVx1MWVmN1x1MWVlYlx1MWVlZFx4ZDlceGRhXHUxZWY5XHUxZWY1XHhkZFx1MWVlMVx1MDFiMFx4ZTBceGUxXHhlMlx4ZTNcdTFlYTNcdTAxMDNcdTFl''@;'; put 'put ''ZWZcdTFlYWJceGU4XHhlOVx4ZWFcdTFlYmJceGVjXHhlZFx1MDEyOVx1MWVjOVx1MDExMVx1MWVmMVx4ZjJceGYzXHhmNFx4ZjVcdTFlY2ZcdTFlY2RcdTFlZTVceGY5XHhmYVx1MDE2OVx1MWVlN1x4ZmRcdTFlZTNcdTFlZWUifSxpc282NDZjbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4''@;'; put 'put ''MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiI1x4YTUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS''@;'; put 'put ''U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2VceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0s''@;'; put 'put ''aXNvNjQ2anA6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz''@;'; put 'put ''NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1x4YTVdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2VceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saHByb21hbjg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4''@;'; put 'put ''OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhjMFx4YzJceGM4XHhjYVx4Y2JceGNlXHhjZlx4YjRcdTAyY2JcdTAyYzZceGE4XHUwMmRjXHhkOVx4ZGJcdTIwYTRceGFmXHhkZFx4ZmRceGIwXHhjN1x4ZTdceGQxXHhmMVx4YTFceGJmXHhhNFx4YTNceGE1XHhhN1x1MDE5Mlx4YTJc''@;'; put 'put ''eGUyXHhlYVx4ZjRceGZiXHhlMVx4ZTlceGYzXHhmYVx4ZTBceGU4XHhmMlx4ZjlceGU0XHhlYlx4ZjZceGZjXHhjNVx4ZWVceGQ4XHhjNlx4ZTVceGVkXHhmOFx4ZTZceGM0XHhlY1x4ZDZceGRjXHhjOVx4ZWZceGRmXHhkNFx4YzFceGMzXHhlM1x4ZDBceGYwXHhjZFx4Y2NceGQzXHhkMlx4''@;'; put 'put ''ZDVceGY1XHUwMTYwXHUwMTYxXHhkYVx1MDE3OFx4ZmZceGRlXHhmZVx4YjdceGI1XHhiNlx4YmVcdTIwMTRceGJjXHhiZFx4YWFceGJhXHhhYlx1MjVhMFx4YmJceGIxXHVmZmZkIn0sbWFjaW50b3NoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNc''@;'; put 'put ''eGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4''@;'; put 'put ''YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1''@;'; put 'put ''M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1''@;'; put 'put ''ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LGFzY2lpOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LHRpczYyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBl''@;'; put 'put ''MDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNc''@;'; put 'put ''dTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBl''@;'; put 'put ''M2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFc''@;'; put 'put ''dTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifX19LDc2MjModGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPXsxMDAyOToibWFjY2VudGV1cm8iLG1hY2NlbnRldXJvOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1''@;'; put 'put ''XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhh''@;'; put 'put ''OVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3''@;'; put 'put ''XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFc''@;'; put 'put ''dTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3In0sODA4''@;'; put 'put ''OiJjcDgwOCIsaWJtODA4OiJjcDgwOCIsY3A4MDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIy''@;'; put 'put ''XHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUw''@;'; put 'put ''NDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0''@;'; put 'put ''XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUw''@;'; put 'put ''NDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZcdTIwYWNcdTI1YTBceGEwIn0sbWlrOnt0eXBl''@;'; put 'put ''OiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQy''@;'; put 'put ''OFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1''@;'; put 'put ''MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU2M1x1MjU1MVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjUx''@;'; put 'put ''MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjExNlx4YTdcdTI1NTdcdTI1NWRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1''@;'; put 'put ''MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGNwNzIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHhlOVx4ZTJceDg0XHhlMFx4ODZc''@;'; put 'put ''eGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceDhkXHg4ZVx4OGZceDkwXHUwNjUxXHUwNjUyXHhmNFx4YTRcdTA2NDBceGZiXHhmOVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx4YTNcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2''@;'; put 'put ''MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUx''@;'; put 'put ''Y1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1''@;'; put 'put ''MjU4MFx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MVx4YjVcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTIyNjFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIx''@;'; put 'put ''YVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sYXNjaWk4Yml0OiJhc2NpaSIsdXNhc2NpaToiYXNjaWkiLGFuc2l4MzQ6ImFzY2lpIixhbnNpeDM0MTk2ODoiYXNjaWkiLGFuc2l4MzQxOTg2OiJhc2NpaSIsY3Nhc2NpaToiYXNjaWkiLGNwMzY3OiJhc2NpaSIsaWJtMzY3OiJhc2NpaSIsaXNvaXI2''@;'; put 'put ''OiJhc2NpaSIsaXNvNjQ2dXM6ImFzY2lpIixpc282NDZpcnY6ImFzY2lpIix1czoiYXNjaWkiLGxhdGluMToiaXNvODg1OTEiLGxhdGluMjoiaXNvODg1OTIiLGxhdGluMzoiaXNvODg1OTMiLGxhdGluNDoiaXNvODg1OTQiLGxhdGluNToiaXNvODg1OTkiLGxhdGluNjoiaXNvODg1OTEwIixs''@;'; put 'put ''YXRpbjc6Imlzbzg4NTkxMyIsbGF0aW44OiJpc284ODU5MTQiLGxhdGluOToiaXNvODg1OTE1IixsYXRpbjEwOiJpc284ODU5MTYiLGNzaXNvbGF0aW4xOiJpc284ODU5MSIsY3Npc29sYXRpbjI6Imlzbzg4NTkyIixjc2lzb2xhdGluMzoiaXNvODg1OTMiLGNzaXNvbGF0aW40OiJpc284ODU5''@;'; put 'put ''NCIsY3Npc29sYXRpbmN5cmlsbGljOiJpc284ODU5NSIsY3Npc29sYXRpbmFyYWJpYzoiaXNvODg1OTYiLGNzaXNvbGF0aW5ncmVlazoiaXNvODg1OTciLGNzaXNvbGF0aW5oZWJyZXc6Imlzbzg4NTk4Iixjc2lzb2xhdGluNToiaXNvODg1OTkiLGNzaXNvbGF0aW42OiJpc284ODU5MTAiLGwx''@;'; put 'put ''OiJpc284ODU5MSIsbDI6Imlzbzg4NTkyIixsMzoiaXNvODg1OTMiLGw0OiJpc284ODU5NCIsbDU6Imlzbzg4NTk5IixsNjoiaXNvODg1OTEwIixsNzoiaXNvODg1OTEzIixsODoiaXNvODg1OTE0IixsOToiaXNvODg1OTE1IixsMTA6Imlzbzg4NTkxNiIsaXNvaXIxNDoiaXNvNjQ2anAiLGlz''@;'; put 'put ''b2lyNTc6ImlzbzY0NmNuIixpc29pcjEwMDoiaXNvODg1OTEiLGlzb2lyMTAxOiJpc284ODU5MiIsaXNvaXIxMDk6Imlzbzg4NTkzIixpc29pcjExMDoiaXNvODg1OTQiLGlzb2lyMTQ0OiJpc284ODU5NSIsaXNvaXIxMjc6Imlzbzg4NTk2Iixpc29pcjEyNjoiaXNvODg1OTciLGlzb2lyMTM4''@;'; put 'put ''OiJpc284ODU5OCIsaXNvaXIxNDg6Imlzbzg4NTk5Iixpc29pcjE1NzoiaXNvODg1OTEwIixpc29pcjE2NjoidGlzNjIwIixpc29pcjE3OToiaXNvODg1OTEzIixpc29pcjE5OToiaXNvODg1OTE0Iixpc29pcjIwMzoiaXNvODg1OTE1Iixpc29pcjIyNjoiaXNvODg1OTE2IixjcDgxOToiaXNv''@;'; put 'put ''ODg1OTEiLGlibTgxOToiaXNvODg1OTEiLGN5cmlsbGljOiJpc284ODU5NSIsYXJhYmljOiJpc284ODU5NiIsYXJhYmljODoiaXNvODg1OTYiLGVjbWExMTQ6Imlzbzg4NTk2Iixhc21vNzA4OiJpc284ODU5NiIsZ3JlZWs6Imlzbzg4NTk3IixncmVlazg6Imlzbzg4NTk3IixlY21hMTE4OiJp''@;'; put 'put ''c284ODU5NyIsZWxvdDkyODoiaXNvODg1OTciLGhlYnJldzoiaXNvODg1OTgiLGhlYnJldzg6Imlzbzg4NTk4Iix0dXJraXNoOiJpc284ODU5OSIsdHVya2lzaDg6Imlzbzg4NTk5Iix0aGFpOiJpc284ODU5MTEiLHRoYWk4OiJpc284ODU5MTEiLGNlbHRpYzoiaXNvODg1OTE0IixjZWx0aWM4''@;'; put 'put ''OiJpc284ODU5MTQiLGlzb2NlbHRpYzoiaXNvODg1OTE0Iix0aXM2MjAwOiJ0aXM2MjAiLHRpczYyMDI1MjkxOiJ0aXM2MjAiLHRpczYyMDI1MzMwOiJ0aXM2MjAiLDFlNDoibWFjcm9tYW4iLDEwMDA2OiJtYWNncmVlayIsMTAwMDc6Im1hY2N5cmlsbGljIiwxMDA3OToibWFjaWNlbGFuZCIs''@;'; put 'put ''MTAwODE6Im1hY3R1cmtpc2giLGNzcGM4Y29kZXBhZ2U0Mzc6ImNwNDM3Iixjc3BjNzc1YmFsdGljOiJjcDc3NSIsY3NwYzg1MG11bHRpbGluZ3VhbDoiY3A4NTAiLGNzcGNwODUyOiJjcDg1MiIsY3NwYzg2MmxhdGluaGVicmV3OiJjcDg2MiIsY3BncjoiY3A4NjkiLG1zZWU6ImNwMTI1MCIs''@;'; put 'put ''bXNjeXJsOiJjcDEyNTEiLG1zYW5zaToiY3AxMjUyIixtc2dyZWVrOiJjcDEyNTMiLG1zdHVyazoiY3AxMjU0Iixtc2hlYnI6ImNwMTI1NSIsbXNhcmFiOiJjcDEyNTYiLHdpbmJhbHRyaW06ImNwMTI1NyIsY3AyMDg2Njoia29pOHIiLDIwODY2OiJrb2k4ciIsaWJtODc4OiJrb2k4ciIsY3Nr''@;'; put 'put ''b2k4cjoia29pOHIiLGNwMjE4NjY6ImtvaTh1IiwyMTg2Njoia29pOHUiLGlibTExNjg6ImtvaTh1IixzdHJrMTA0ODIwMDI6InJrMTA0OCIsdGN2bjU3MTI6InRjdm4iLHRjdm41NzEyMToidGN2biIsZ2IxOTg4ODA6ImlzbzY0NmNuIixjbjoiaXNvNjQ2Y24iLGNzaXNvMTRqaXNjNjIyMHJv''@;'; put 'put ''OiJpc282NDZqcCIsamlzYzYyMjAxOTY5cm86ImlzbzY0NmpwIixqcDoiaXNvNjQ2anAiLGNzaHByb21hbjg6Imhwcm9tYW44IixyODoiaHByb21hbjgiLHJvbWFuODoiaHByb21hbjgiLHhyb21hbjg6Imhwcm9tYW44IixpYm0xMDUxOiJocHJvbWFuOCIsbWFjOiJtYWNpbnRvc2giLGNzbWFj''@;'; put 'put ''aW50b3NoOiJtYWNpbnRvc2gifX0sNzE3NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gaCgpe31mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIEkoKXt0aGlzLm92ZXJmbG93Qnl0ZT0tMX1mdW5jdGlvbiBmKE8sRCl7dGhpcy5pY29udj1EfWZ1bmN0''@;'; put 'put ''aW9uIFQoTyxEKXt2b2lkIDA9PT0oTz1PfHx7fSkuYWRkQk9NJiYoTy5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1ELmljb252LmdldEVuY29kZXIoInV0Zi0xNmxlIixPKX1mdW5jdGlvbiBBKE8sRCl7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0aWFs''@;'; put 'put ''Qnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9T3x8e30sdGhpcy5pY29udj1ELmljb252fWZ1bmN0aW9uIE0oTyxEKXt2YXIgRT1EfHwidXRmLTE2bGUiO2lmKE8ubGVuZ3RoPj0yKWlmKDI1ND09T1swXSYmMjU1PT1PWzFdKUU9InV0Zi0xNmJlIjtlbHNlIGlmKDI1NT09T1swXSYmMjU0PT1PWzFd''@;'; put 'put ''KUU9InV0Zi0xNmxlIjtlbHNle2Zvcih2YXIgQj0wLEY9MCxOPU1hdGgubWluKE8ubGVuZ3RoLU8ubGVuZ3RoJTIsNjQpLEg9MDtIPE47SCs9MikwPT09T1tIXSYmMCE9PU9bSCsxXSYmRisrLDAhPT1PW0hdJiYwPT09T1tIKzFdJiZCKys7Rj5CP0U9InV0Zi0xNmJlIjpGPEImJihFPSJ1dGYt''@;'; put 'put ''MTZsZSIpfXJldHVybiBFfWoudXRmMTZiZT1oLGgucHJvdG90eXBlLmVuY29kZXI9byxoLnByb3RvdHlwZS5kZWNvZGVyPUksaC5wcm90b3R5cGUuYm9tQXdhcmU9ITAsby5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTyl7Zm9yKHZhciBEPVMuZnJvbShPLCJ1Y3MyIiksRT0wO0U8RC5sZW5n''@;'; put 'put ''dGg7RSs9Mil7dmFyIEI9RFtFXTtEW0VdPURbRSsxXSxEW0UrMV09Qn1yZXR1cm4gRH0sby5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxJLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihPKXtpZigwPT1PLmxlbmd0aClyZXR1cm4iIjt2YXIgRD1TLmFsbG9jKE8ubGVuZ3RoKzEpLEU9MCxC''@;'; put 'put ''PTA7Zm9yKC0xIT09dGhpcy5vdmVyZmxvd0J5dGUmJihEWzBdPU9bMF0sRFsxXT10aGlzLm92ZXJmbG93Qnl0ZSxFPTEsQj0yKTtFPE8ubGVuZ3RoLTE7RSs9MixCKz0yKURbQl09T1tFKzFdLERbQisxXT1PW0VdO3JldHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1FPT1PLmxlbmd0aC0xP09bTy5s''@;'; put 'put ''ZW5ndGgtMV06LTEsRC5zbGljZSgwLEIpLnRvU3RyaW5nKCJ1Y3MyIil9LEkucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sai51dGYxNj1mLGYucHJvdG90eXBlLmVuY29kZXI9VCxmLnByb3RvdHlwZS5kZWNvZGVyPUEsVC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZW5jb2Rlci53cml0ZShPKX0sVC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sQS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTyl7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaChPKSx0aGlzLmluaXRpYWxC''@;'; put 'put ''eXRlc0xlbis9Ty5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MTYpcmV0dXJuIiI7dmFyIEQ9TShPPVMuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEQsdGhpcy5vcHRp''@;'; put 'put ''b25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKE8pfSxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgTz1TLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksRD1N''@;'; put 'put ''KE8sdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihELHRoaXMub3B0aW9ucyk7dmFyIEU9dGhpcy5kZWNvZGVyLndyaXRlKE8pLEI9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBCP0UrQjpFfXJldHVybiB0aGlzLmRlY29k''@;'; put 'put ''ZXIuZW5kKCl9fSwzNTA4OSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gaChPLEQpe3RoaXMuaWNvbnY9RCx0aGlzLmJvbUF3YXJlPSEwLHRoaXMuaXNMRT1PLmlzTEV9ZnVuY3Rpb24gbyhPLEQpe3RoaXMuaXNMRT1ELmlzTEUsdGhpcy5oaWdo''@;'; put 'put ''U3Vycm9nYXRlPTB9ZnVuY3Rpb24gSShPLEQpe3RoaXMuaXNMRT1ELmlzTEUsdGhpcy5iYWRDaGFyPUQuaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCksdGhpcy5vdmVyZmxvdz1udWxsfWZ1bmN0aW9uIGYoTyxEKXt0aGlzLmljb252PUR9ZnVuY3Rpb24gVChPLEQpe3Zv''@;'; put 'put ''aWQgMD09PShPPU98fHt9KS5hZGRCT00mJihPLmFkZEJPTT0hMCksdGhpcy5lbmNvZGVyPUQuaWNvbnYuZ2V0RW5jb2RlcihPLmRlZmF1bHRFbmNvZGluZ3x8InV0Zi0zMmxlIixPKX1mdW5jdGlvbiBBKE8sRCl7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5p''@;'; put 'put ''bml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9T3x8e30sdGhpcy5pY29udj1ELmljb252fWZ1bmN0aW9uIE0oTyxEKXt2YXIgRT1EfHwidXRmLTMybGUiO2lmKE8ubGVuZ3RoPj00KWlmKDY1Mjc5PT09Ty5yZWFkVUludDMyQkUoMCkpRT0idXRmLTMyYmUiO2Vsc2UgaWYoNjUyNzk9PT1P''@;'; put 'put ''LnJlYWRVSW50MzJMRSgwKSlFPSJ1dGYtMzJsZSI7ZWxzZXtmb3IodmFyIEI9MCxGPTAsTj0wLEg9MCx6PU1hdGgubWluKE8ubGVuZ3RoLU8ubGVuZ3RoJTQsMTI4KSxaPTA7Wjx6O1orPTQpe3ZhciBVPU9bWl0sSz1PW1orMV0sWD1PW1orMl0sbmU9T1taKzNdOygwIT09VXx8Sz4xNikmJisr''@;'; put 'put ''RiwoMCE9PW5lfHxYPjE2KSYmKytCLDA9PT1VJiYwPT09SyYmMD09PVgmJjAhPT1uZSYmSCsrLDAhPT1VJiYwPT09SyYmMD09PVgmJjA9PT1uZSYmTisrfUY8Qj9FPSJ1dGYtMzJiZSI6QjxGJiYoRT0idXRmLTMybGUiKSxIPk4/RT0idXRmLTMyYmUiOkg8TiYmKEU9InV0Zi0zMmxlIil9cmV0''@;'; put 'put ''dXJuIEV9ai5fdXRmMzI9aCxqLnV0ZjMybGU9e3R5cGU6Il91dGYzMiIsaXNMRTohMH0sai51dGYzMmJlPXt0eXBlOiJfdXRmMzIiLGlzTEU6ITF9LGoudWNzNGxlPSJ1dGYzMmxlIixqLnVjczRiZT0idXRmMzJiZSIsaC5wcm90b3R5cGUuZW5jb2Rlcj1vLGgucHJvdG90eXBlLmRlY29kZXI9''@;'; put 'put ''SSxvLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihPKXtmb3IodmFyIEQ9Uy5mcm9tKE8sInVjczIiKSxFPVMuYWxsb2MoMipELmxlbmd0aCksQj10aGlzLmlzTEU/RS53cml0ZVVJbnQzMkxFOkUud3JpdGVVSW50MzJCRSxGPTAsTj0wO048RC5sZW5ndGg7Tis9Mil7dmFyIEg9RC5yZWFkVUlu''@;'; put 'put ''dDE2TEUoTiksej01NTI5Njw9SCYmSDw1NjMyMDtpZih0aGlzLmhpZ2hTdXJyb2dhdGUpe2lmKCF6JiY1NjMyMDw9SCYmSDw1NzM0NCl7Qi5jYWxsKEUsNjU1MzYrKHRoaXMuaGlnaFN1cnJvZ2F0ZS01NTI5Njw8MTB8SC01NjMyMCksRiksRis9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MDtjb250''@;'; put 'put ''aW51ZX1CLmNhbGwoRSx0aGlzLmhpZ2hTdXJyb2dhdGUsRiksRis9NH16P3RoaXMuaGlnaFN1cnJvZ2F0ZT1IOihCLmNhbGwoRSxILEYpLEYrPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTApfXJldHVybiBGPEUubGVuZ3RoJiYoRT1FLnNsaWNlKDAsRikpLEV9LG8ucHJvdG90eXBlLmVuZD1mdW5j''@;'; put 'put ''dGlvbigpe2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7dmFyIE89Uy5hbGxvYyg0KTtyZXR1cm4gdGhpcy5pc0xFP08ud3JpdGVVSW50MzJMRSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCk6Ty53cml0ZVVJbnQzMkJFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKSx0aGlzLmhpZ2hTdXJyb2dhdGU9MCxPfX0s''@;'; put 'put ''SS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTyl7aWYoMD09PU8ubGVuZ3RoKXJldHVybiIiO3RoaXMub3ZlcmZsb3cmJihPPVMuY29uY2F0KFt0aGlzLm92ZXJmbG93LE9dKSk7dmFyIEQ9Ty5sZW5ndGgtTy5sZW5ndGglNDtPLmxlbmd0aCE9PUQ/KHRoaXMub3ZlcmZsb3c9Ty5zbGljZShE''@;'; put 'put ''KSxPPU8uc2xpY2UoMCxEKSk6dGhpcy5vdmVyZmxvdz1udWxsO2Zvcih2YXIgRT1TLmFsbG9jKEQpLEI9MCxGPTA7RjxEO0YrPTQpe3ZhciBOPXRoaXMuaXNMRT9PLnJlYWRVSW50MzJMRShGKTpPLnJlYWRVSW50MzJCRShGKTtpZihOPDY1NTM2KUUud3JpdGVVSW50MTZMRShOLEIpLEIrPTI7''@;'; put 'put ''ZWxzZSBpZihOPjExMTQxMTEpRS53cml0ZVVJbnQxNkxFKHRoaXMuYmFkQ2hhcixCKSxCKz0yO2Vsc2V7dmFyIHo9NTYzMjArKDEwMjMmKE4tPTY1NTM2KSk7RS53cml0ZVVJbnQxNkxFKDU1Mjk2fE4+PjEwLEIpLEUud3JpdGVVSW50MTZMRSh6LEIrPTIpLEIrPTJ9fXJldHVybiBFLnNsaWNl''@;'; put 'put ''KDAsQikudG9TdHJpbmcoInVjczIiKX0sSS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5vdmVyZmxvdz1udWxsfSxqLnV0ZjMyPWYsai51Y3M0PWYsZi5wcm90b3R5cGUuZW5jb2Rlcj1ULGYucHJvdG90eXBlLmRlY29kZXI9QSxULnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihPKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKE8pfSxULnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxBLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihPKXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKE8pLHRoaXMu''@;'; put 'put ''aW5pdGlhbEJ5dGVzTGVuKz1PLmxlbmd0aCx0aGlzLmluaXRpYWxCeXRlc0xlbjwzMilyZXR1cm4iIjt2YXIgRT1NKFMuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEUsdGhp''@;'; put 'put ''cy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKE8pfSxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgTz1TLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRl''@;'; put 'put ''cyksRD1NKE8sdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihELHRoaXMub3B0aW9ucyk7dmFyIEU9dGhpcy5kZWNvZGVyLndyaXRlKE8pLEI9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBCP0UrQjpFfXJldHVybiB0aGlz''@;'; put 'put ''LmRlY29kZXIuZW5kKCl9fSw5NzQ3KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBoKHosWil7dGhpcy5pY29udj1afWoudXRmNz1oLGoudW5pY29kZTExdXRmNz0idXRmNyIsaC5wcm90b3R5cGUuZW5jb2Rlcj1JLGgucHJvdG90eXBlLmRlY29k''@;'; put 'put ''ZXI9ZixoLnByb3RvdHlwZS5ib21Bd2FyZT0hMDt2YXIgbz0vW15BLVphLXowLTknXChcKSwtXC5cLzpcPyBcblxyXHRdKy9nO2Z1bmN0aW9uIEkoeixaKXt0aGlzLmljb252PVouaWNvbnZ9ZnVuY3Rpb24gZih6LFope3RoaXMuaWNvbnY9Wi5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMu''@;'; put 'put ''YmFzZTY0QWNjdW09IiJ9SS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7cmV0dXJuIFMuZnJvbSh6LnJlcGxhY2UobyxmdW5jdGlvbihaKXtyZXR1cm4iKyIrKCIrIj09PVo/IiI6dGhpcy5pY29udi5lbmNvZGUoWiwidXRmMTYtYmUiKS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgv''@;'; put 'put ''PSskLywiIikpKyItIn0uYmluZCh0aGlzKSkpfSxJLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9O2Zvcih2YXIgVD0vW0EtWmEtejAtOVwvK10vLEE9W10sTT0wO008MjU2O00rKylBW01dPVQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKE0pKTt2YXIgRD00NTtmdW5jdGlvbiBCKHosWil7''@;'; put 'put ''dGhpcy5pY29udj1afWZ1bmN0aW9uIEYoeixaKXt0aGlzLmljb252PVouaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPVMuYWxsb2MoNiksdGhpcy5iYXNlNjRBY2N1bUlkeD0wfWZ1bmN0aW9uIE4oeixaKXt0aGlzLmljb252PVouaWNvbnYsdGhpcy5pbkJhc2U2ND0h''@;'; put 'put ''MSx0aGlzLmJhc2U2NEFjY3VtPSIifWYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgWj0iIixVPTAsSz10aGlzLmluQmFzZTY0LFg9dGhpcy5iYXNlNjRBY2N1bSxuZT0wO25lPHoubGVuZ3RoO25lKyspaWYoSyl7aWYoIUFbeltuZV1dKXtpZihuZT09VSYmeltuZV09PUQp''@;'; put 'put ''Wis9IisiO2Vsc2V7dmFyIHNlPVgrei5zbGljZShVLG5lKS50b1N0cmluZygpO1orPXRoaXMuaWNvbnYuZGVjb2RlKFMuZnJvbShzZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9eltuZV0hPUQmJm5lLS0sVT1uZSsxLEs9ITEsWD0iIn19ZWxzZSA0Mz09eltuZV0mJihaKz10aGlzLmljb252LmRl''@;'; put 'put ''Y29kZSh6LnNsaWNlKFUsbmUpLCJhc2NpaSIpLFU9bmUrMSxLPSEwKTtpZihLKXt2YXIgaGU9KHNlPVgrei5zbGljZShVKS50b1N0cmluZygpKS5sZW5ndGgtc2UubGVuZ3RoJTg7WD1zZS5zbGljZShoZSksc2U9c2Uuc2xpY2UoMCxoZSksWis9dGhpcy5pY29udi5kZWNvZGUoUy5mcm9tKHNl''@;'; put 'put ''LCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIForPXRoaXMuaWNvbnYuZGVjb2RlKHouc2xpY2UoVSksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9Syx0aGlzLmJhc2U2NEFjY3VtPVgsWn0sZi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHo9IiI7cmV0dXJuIHRoaXMuaW5C''@;'; put 'put ''YXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJih6PXRoaXMuaWNvbnYuZGVjb2RlKFMuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLHp9LGoudXRmN2ltYXA9QixCLnByb3RvdHlw''@;'; put 'put ''ZS5lbmNvZGVyPUYsQi5wcm90b3R5cGUuZGVjb2Rlcj1OLEIucHJvdG90eXBlLmJvbUF3YXJlPSEwLEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgWj10aGlzLmluQmFzZTY0LFU9dGhpcy5iYXNlNjRBY2N1bSxLPXRoaXMuYmFzZTY0QWNjdW1JZHgsWD1TLmFsbG9jKDUq''@;'; put 'put ''ei5sZW5ndGgrMTApLG5lPTAsc2U9MDtzZTx6Lmxlbmd0aDtzZSsrKXt2YXIgaGU9ei5jaGFyQ29kZUF0KHNlKTszMjw9aGUmJmhlPD0xMjY/KFomJihLPjAmJihuZSs9WC53cml0ZShVLnNsaWNlKDAsSykudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89''@;'; put 'put ''KyQvLCIiKSxuZSksSz0wKSxYW25lKytdPUQsWj0hMSksWnx8KFhbbmUrK109aGUsMzg9PT1oZSYmKFhbbmUrK109RCkpKTooWnx8KFhbbmUrK109MzgsWj0hMCksWiYmKFVbSysrXT1oZT4+OCxVW0srK109MjU1JmhlLEs9PVUubGVuZ3RoJiYobmUrPVgud3JpdGUoVS50b1N0cmluZygiYmFz''@;'; put 'put ''ZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLG5lKSxLPTApKSl9cmV0dXJuIHRoaXMuaW5CYXNlNjQ9Wix0aGlzLmJhc2U2NEFjY3VtSWR4PUssWC5zbGljZSgwLG5lKX0sRi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHo9Uy5hbGxvYygxMCksWj0wO3JldHVybiB0aGlzLmluQmFzZTY0''@;'; put 'put ''JiYodGhpcy5iYXNlNjRBY2N1bUlkeD4wJiYoWis9ei53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxaKSx0aGlzLmJhc2U2NEFjY3VtSWR4PTAp''@;'; put 'put ''LHpbWisrXT1ELHRoaXMuaW5CYXNlNjQ9ITEpLHouc2xpY2UoMCxaKX07dmFyIEg9QS5zbGljZSgpO0hbNDRdPSEwLE4ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgWj0iIixVPTAsSz10aGlzLmluQmFzZTY0LFg9dGhpcy5iYXNlNjRBY2N1bSxuZT0wO25lPHoubGVuZ3Ro''@;'; put 'put ''O25lKyspaWYoSyl7aWYoIUhbeltuZV1dKXtpZihuZT09VSYmeltuZV09PUQpWis9IiYiO2Vsc2V7dmFyIHNlPVgrei5zbGljZShVLG5lKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpO1orPXRoaXMuaWNvbnYuZGVjb2RlKFMuZnJvbShzZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9eltu''@;'; put 'put ''ZV0hPUQmJm5lLS0sVT1uZSsxLEs9ITEsWD0iIn19ZWxzZSAzOD09eltuZV0mJihaKz10aGlzLmljb252LmRlY29kZSh6LnNsaWNlKFUsbmUpLCJhc2NpaSIpLFU9bmUrMSxLPSEwKTtpZihLKXt2YXIgaGU9KHNlPVgrei5zbGljZShVKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpKS5s''@;'; put 'put ''ZW5ndGgtc2UubGVuZ3RoJTg7WD1zZS5zbGljZShoZSksc2U9c2Uuc2xpY2UoMCxoZSksWis9dGhpcy5pY29udi5kZWNvZGUoUy5mcm9tKHNlLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIForPXRoaXMuaWNvbnYuZGVjb2RlKHouc2xpY2UoVSksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5C''@;'; put 'put ''YXNlNjQ9Syx0aGlzLmJhc2U2NEFjY3VtPVgsWn0sTi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHo9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJih6PXRoaXMuaWNvbnYuZGVjb2RlKFMuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNl''@;'; put 'put ''NjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLHp9fSwyOTQyMih0ZSxqKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUyhvLEkpe3RoaXMuZW5jb2Rlcj1vLHRoaXMuYWRkQk9NPSEwfWZ1bmN0aW9uIGgobyxJKXt0aGlzLmRlY29kZXI9byx0aGlz''@;'; put 'put ''LnBhc3M9ITEsdGhpcy5vcHRpb25zPUl8fHt9fWouUHJlcGVuZEJPTT1TLFMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLmFkZEJPTSYmKG89Ilx1ZmVmZiIrbyx0aGlzLmFkZEJPTT0hMSksdGhpcy5lbmNvZGVyLndyaXRlKG8pfSxTLnByb3RvdHlwZS5lbmQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxqLlN0cmlwQk9NPWgsaC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obyl7dmFyIEk9dGhpcy5kZWNvZGVyLndyaXRlKG8pO3JldHVybiB0aGlzLnBhc3N8fCFJfHwoIlx1ZmVmZiI9PT1JWzBdJiYoST1JLnNsaWNlKDEpLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00mJnRoaXMub3B0aW9ucy5zdHJpcEJPTSgpKSx0aGlzLnBhc3M9ITApLEl9LGgucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw5NDI0OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''Uz1kKDkzODA3KS5CdWZmZXIsaD1kKDI5NDIyKSxvPXRlLmV4cG9ydHM7by5lbmNvZGluZ3M9bnVsbCxvLmRlZmF1bHRDaGFyVW5pY29kZT0iXHVmZmZkIixvLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT0iPyIsby5lbmNvZGU9ZnVuY3Rpb24oQSxNLE8pe0E9IiIrKEF8fCIiKTt2YXIgRD1vLmdl''@;'; put 'put ''dEVuY29kZXIoTSxPKSxFPUQud3JpdGUoQSksQj1ELmVuZCgpO3JldHVybiBCJiZCLmxlbmd0aD4wP1MuY29uY2F0KFtFLEJdKTpFfSxvLmRlY29kZT1mdW5jdGlvbihBLE0sTyl7InN0cmluZyI9PXR5cGVvZiBBJiYoby5za2lwRGVjb2RlV2FybmluZ3x8KGNvbnNvbGUuZXJyb3IoIkljb252''@;'; put 'put ''LWxpdGUgd2FybmluZzogZGVjb2RlKCktaW5nIHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL1VzZS1CdWZmZXJzLXdoZW4tZGVjb2RpbmciKSxvLnNraXBEZWNvZGVXYXJuaW5nPSEwKSxBPVMuZnJv''@;'; put 'put ''bSgiIisoQXx8IiIpLCJiaW5hcnkiKSk7dmFyIEQ9by5nZXREZWNvZGVyKE0sTyksRT1ELndyaXRlKEEpLEI9RC5lbmQoKTtyZXR1cm4gQj9FK0I6RX0sby5lbmNvZGluZ0V4aXN0cz1mdW5jdGlvbihBKXt0cnl7cmV0dXJuIG8uZ2V0Q29kZWMoQSksITB9Y2F0Y2h7cmV0dXJuITF9fSxvLnRv''@;'; put 'put ''RW5jb2Rpbmc9by5lbmNvZGUsby5mcm9tRW5jb2Rpbmc9by5kZWNvZGUsby5fY29kZWNEYXRhQ2FjaGU9e30sby5nZXRDb2RlYz1mdW5jdGlvbihBKXtvLmVuY29kaW5nc3x8KG8uZW5jb2RpbmdzPWQoNzI4OTMpKTtmb3IodmFyIE09by5fY2Fub25pY2FsaXplRW5jb2RpbmcoQSksTz17fTs7''@;'; put 'put ''KXt2YXIgRD1vLl9jb2RlY0RhdGFDYWNoZVtNXTtpZihEKXJldHVybiBEO3ZhciBFPW8uZW5jb2RpbmdzW01dO3N3aXRjaCh0eXBlb2YgRSl7Y2FzZSJzdHJpbmciOk09RTticmVhaztjYXNlIm9iamVjdCI6Zm9yKHZhciBCIGluIEUpT1tCXT1FW0JdO08uZW5jb2RpbmdOYW1lfHwoTy5lbmNv''@;'; put 'put ''ZGluZ05hbWU9TSksTT1FLnR5cGU7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIE8uZW5jb2RpbmdOYW1lfHwoTy5lbmNvZGluZ05hbWU9TSksRD1uZXcgRShPLG8pLG8uX2NvZGVjRGF0YUNhY2hlW08uZW5jb2RpbmdOYW1lXT1ELEQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVuY29k''@;'; put 'put ''aW5nIG5vdCByZWNvZ25pemVkOiAnIitBKyInIChzZWFyY2hlZCBhczogJyIrTSsiJykiKX19fSxvLl9jYW5vbmljYWxpemVFbmNvZGluZz1mdW5jdGlvbihUKXtyZXR1cm4oIiIrVCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC86XGR7NH0kfFteMC05YS16XS9nLCIiKX0sby5nZXRFbmNvZGVy''@;'; put 'put ''PWZ1bmN0aW9uKEEsTSl7dmFyIE89by5nZXRDb2RlYyhBKSxEPW5ldyBPLmVuY29kZXIoTSxPKTtyZXR1cm4gTy5ib21Bd2FyZSYmTSYmTS5hZGRCT00mJihEPW5ldyBoLlByZXBlbmRCT00oRCxNKSksRH0sby5nZXREZWNvZGVyPWZ1bmN0aW9uKEEsTSl7dmFyIE89by5nZXRDb2RlYyhBKSxE''@;'; put 'put ''PW5ldyBPLmRlY29kZXIoTSxPKTtyZXR1cm4gTy5ib21Bd2FyZSYmIShNJiYhMT09PU0uc3RyaXBCT00pJiYoRD1uZXcgaC5TdHJpcEJPTShELE0pKSxEfTt2YXIgST10eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MudmVyc2lvbnMmJnByb2Nlc3MudmVyc2lvbnMubm9kZTtpZihJKXt2YXIg''@;'; put 'put ''Zj1JLnNwbGl0KCIuIikubWFwKE51bWJlcik7KGZbMF0+MHx8ZlsxXT49MTApJiZkKDYxMDkzKShvKSxkKDE1NzkxKShvKX19LDIyMDIwKHRlLGope2oucmVhZD1mdW5jdGlvbihkLFMsaCxvLEkpe3ZhciBmLFQsQT04Kkktby0xLE09KDE8PEEpLTEsTz1NPj4xLEQ9LTcsRT1oP0ktMTowLEI9''@;'; put 'put ''aD8tMToxLEY9ZFtTK0VdO2ZvcihFKz1CLGY9RiYoMTw8LUQpLTEsRj4+PS1ELEQrPUE7RD4wO2Y9MjU2KmYrZFtTK0VdLEUrPUIsRC09OCk7Zm9yKFQ9ZiYoMTw8LUQpLTEsZj4+PS1ELEQrPW87RD4wO1Q9MjU2KlQrZFtTK0VdLEUrPUIsRC09OCk7aWYoMD09PWYpZj0xLU87ZWxzZXtpZihm''@;'; put 'put ''PT09TSlyZXR1cm4gVD9OYU46MS8wKihGPy0xOjEpO1QrPU1hdGgucG93KDIsbyksZi09T31yZXR1cm4oRj8tMToxKSpUKk1hdGgucG93KDIsZi1vKX0sai53cml0ZT1mdW5jdGlvbihkLFMsaCxvLEksZil7dmFyIFQsQSxNLE89OCpmLUktMSxEPSgxPDxPKS0xLEU9RD4+MSxCPTIzPT09ST9N''@;'; put 'put ''YXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsRj1vPzA6Zi0xLE49bz8xOi0xLEg9UzwwfHwwPT09UyYmMS9TPDA/MTowO2ZvcihTPU1hdGguYWJzKFMpLGlzTmFOKFMpfHxTPT09MS8wPyhBPWlzTmFOKFMpPzE6MCxUPUQpOihUPU1hdGguZmxvb3IoTWF0aC5sb2coUykvTWF0aC5M''@;'; put 'put ''TjIpLFMqKE09TWF0aC5wb3coMiwtVCkpPDEmJihULS0sTSo9MiksKFMrPVQrRT49MT9CL006QipNYXRoLnBvdygyLDEtRSkpKk0+PTImJihUKyssTS89MiksVCtFPj1EPyhBPTAsVD1EKTpUK0U+PTE/KEE9KFMqTS0xKSpNYXRoLnBvdygyLEkpLFQrPUUpOihBPVMqTWF0aC5wb3coMixFLTEp''@;'; put 'put ''Kk1hdGgucG93KDIsSSksVD0wKSk7ST49ODtkW2grRl09MjU1JkEsRis9TixBLz0yNTYsSS09OCk7Zm9yKFQ9VDw8SXxBLE8rPUk7Tz4wO2RbaCtGXT0yNTUmVCxGKz1OLFQvPTI1NixPLT04KTtkW2grRi1OXXw9MTI4Kkh9fSw3MTk5Myh0ZSl7dGUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihkLFMpe1MmJihkLnN1cGVyXz1TLGQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpkLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oZCxT''@;'; put 'put ''KXtpZihTKXtkLnN1cGVyXz1TO3ZhciBoPWZ1bmN0aW9uKCl7fTtoLnByb3RvdHlwZT1TLnByb3RvdHlwZSxkLnByb3RvdHlwZT1uZXcgaCxkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kfX19LDU4MjM5KHRlKXsidXNlIHN0cmljdCI7dmFyIFMsaCxqPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0''@;'; put 'put ''cmluZyxkPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e1M9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5n''@;'; put 'put ''dGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBofX0pLGg9e30sZChmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLFMpfWNhdGNoKFope1ohPT1oJiYoZD1udWxsKX1lbHNlIGQ9bnVsbDt2YXIgbz0vXlxzKmNsYXNzXGIvLEk9ZnVuY3Rpb24oVSl7dHJ5e3ZhciBLPWouY2FsbChVKTtyZXR1cm4g''@;'; put 'put ''by50ZXN0KEspfWNhdGNoe3JldHVybiExfX0sZj1mdW5jdGlvbihVKXt0cnl7cmV0dXJuIUkoVSkmJihqLmNhbGwoVSksITApfWNhdGNoe3JldHVybiExfX0sVD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdU''@;'; put 'put ''YWcsTj0hKDAgaW5bLF0pLEg9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIHo9ZG9jdW1lbnQuYWxsO1QuY2FsbCh6KT09PVQuY2FsbChkb2N1bWVudC5hbGwpJiYoSD1mdW5jdGlvbihVKXtpZigoTnx8IVUpJiYodHlwZW9mIFU+InUifHwi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIFUpKXRyeXt2YXIgSz1ULmNhbGwoVSk7cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT1LfHwiW29iamVjdCBIVE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09S3x8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PUt8fCJbb2JqZWN0IE9iamVj''@;'; put 'put ''dF0iPT09SykmJm51bGw9PVUoIiIpfWNhdGNoe31yZXR1cm4hMX0pfXRlLmV4cG9ydHM9ZD9mdW5jdGlvbihVKXtpZihIKFUpKXJldHVybiEwO2lmKCFVfHwiZnVuY3Rpb24iIT10eXBlb2YgVSYmIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3RyeXtkKFUsbnVsbCxTKX1jYXRjaChLKXtp''@;'; put 'put ''ZihLIT09aClyZXR1cm4hMX1yZXR1cm4hSShVKSYmZihVKX06ZnVuY3Rpb24oVSl7aWYoSChVKSlyZXR1cm4hMDtpZighVXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFUmJiJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTtpZihGKXJldHVybiBmKFUpO2lmKEkoVSkpcmV0dXJuITE7dmFyIEs9VC5j''@;'; put 'put ''YWxsKFUpO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PUsmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1LJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KEspKSYmZihVKX19LDQ3MjkodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0NDA2OCk7dGUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihvKXtyZXR1cm4hIVMobyl9fSwyMDA1Myh0ZSl7dmFyIGo9e30udG9TdHJpbmc7dGUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihkKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qLmNhbGwoZCl9fSw3MDgzNyh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9TWF0aC5h''@;'; put 'put ''YnN9LDMzODModGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPU1hdGguZmxvb3J9LDg1NDg4KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGQpe3JldHVybiBkIT1kfX0sNzkwMzkodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPU1hdGgubWF4''@;'; put 'put ''fSwxNDk4MSh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9TWF0aC5taW59LDgwOTc1KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1NYXRoLnBvd30sNTMzNyh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9TWF0aC5yb3VuZH0sNDkxMih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''Uz1kKDg1NDg4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiBTKG8pfHwwPT09bz9vOm88MD8tMToxfX0sMzQ3MjUodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg3MTk5MyksaD1kKDEzNjg2KSxvPWQoMjcwNTQpLkJ1ZmZlcixJPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gZigp''@;'; put 'put ''e2guY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBUKEUsQil7cmV0dXJuIEU8PEJ8RT4+PjMyLUJ9ZnVuY3Rpb24gQShFLEIsRixOLEgseixaKXtyZXR1cm4gVChF''@;'; put 'put ''KyhCJkZ8fkImTikrSCt6fDAsWikrQnwwfWZ1bmN0aW9uIE0oRSxCLEYsTixILHosWil7cmV0dXJuIFQoRSsoQiZOfEYmfk4pK0grenwwLFopK0J8MH1mdW5jdGlvbiBPKEUsQixGLE4sSCx6LFope3JldHVybiBUKEUrKEJeRl5OKStIK3p8MCxaKStCfDB9ZnVuY3Rpb24gRChFLEIsRixOLEgs''@;'; put 'put ''eixaKXtyZXR1cm4gVChFKyhGXihCfH5OKSkrSCt6fDAsWikrQnwwfVMoZixoKSxmLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBFPUksQj0wO0I8MTY7KytCKUVbQl09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpCKTt2YXIgRj10aGlzLl9hLE49dGhpcy5fYixIPXRo''@;'; put 'put ''aXMuX2Msej10aGlzLl9kO0Y9QShGLE4sSCx6LEVbMF0sMzYxNDA5MDM2MCw3KSx6PUEoeixGLE4sSCxFWzFdLDM5MDU0MDI3MTAsMTIpLEg9QShILHosRixOLEVbMl0sNjA2MTA1ODE5LDE3KSxOPUEoTixILHosRixFWzNdLDMyNTA0NDE5NjYsMjIpLEY9QShGLE4sSCx6LEVbNF0sNDExODU0''@;'; put 'put ''ODM5OSw3KSx6PUEoeixGLE4sSCxFWzVdLDEyMDAwODA0MjYsMTIpLEg9QShILHosRixOLEVbNl0sMjgyMTczNTk1NSwxNyksTj1BKE4sSCx6LEYsRVs3XSw0MjQ5MjYxMzEzLDIyKSxGPUEoRixOLEgseixFWzhdLDE3NzAwMzU0MTYsNyksej1BKHosRixOLEgsRVs5XSwyMzM2NTUyODc5LDEy''@;'; put 'put ''KSxIPUEoSCx6LEYsTixFWzEwXSw0Mjk0OTI1MjMzLDE3KSxOPUEoTixILHosRixFWzExXSwyMzA0NTYzMTM0LDIyKSxGPUEoRixOLEgseixFWzEyXSwxODA0NjAzNjgyLDcpLHo9QSh6LEYsTixILEVbMTNdLDQyNTQ2MjYxOTUsMTIpLEg9QShILHosRixOLEVbMTRdLDI3OTI5NjUwMDYsMTcp''@;'; put 'put ''LEY9TShGLE49QShOLEgseixGLEVbMTVdLDEyMzY1MzUzMjksMjIpLEgseixFWzFdLDQxMjkxNzA3ODYsNSksej1NKHosRixOLEgsRVs2XSwzMjI1NDY1NjY0LDkpLEg9TShILHosRixOLEVbMTFdLDY0MzcxNzcxMywxNCksTj1NKE4sSCx6LEYsRVswXSwzOTIxMDY5OTk0LDIwKSxGPU0oRixO''@;'; put 'put ''LEgseixFWzVdLDM1OTM0MDg2MDUsNSksej1NKHosRixOLEgsRVsxMF0sMzgwMTYwODMsOSksSD1NKEgseixGLE4sRVsxNV0sMzYzNDQ4ODk2MSwxNCksTj1NKE4sSCx6LEYsRVs0XSwzODg5NDI5NDQ4LDIwKSxGPU0oRixOLEgseixFWzldLDU2ODQ0NjQzOCw1KSx6PU0oeixGLE4sSCxFWzE0''@;'; put 'put ''XSwzMjc1MTYzNjA2LDkpLEg9TShILHosRixOLEVbM10sNDEwNzYwMzMzNSwxNCksTj1NKE4sSCx6LEYsRVs4XSwxMTYzNTMxNTAxLDIwKSxGPU0oRixOLEgseixFWzEzXSwyODUwMjg1ODI5LDUpLHo9TSh6LEYsTixILEVbMl0sNDI0MzU2MzUxMiw5KSxIPU0oSCx6LEYsTixFWzddLDE3MzUz''@;'; put 'put ''Mjg0NzMsMTQpLEY9TyhGLE49TShOLEgseixGLEVbMTJdLDIzNjgzNTk1NjIsMjApLEgseixFWzVdLDQyOTQ1ODg3MzgsNCksej1PKHosRixOLEgsRVs4XSwyMjcyMzkyODMzLDExKSxIPU8oSCx6LEYsTixFWzExXSwxODM5MDMwNTYyLDE2KSxOPU8oTixILHosRixFWzE0XSw0MjU5NjU3NzQw''@;'; put 'put ''LDIzKSxGPU8oRixOLEgseixFWzFdLDI3NjM5NzUyMzYsNCksej1PKHosRixOLEgsRVs0XSwxMjcyODkzMzUzLDExKSxIPU8oSCx6LEYsTixFWzddLDQxMzk0Njk2NjQsMTYpLE49TyhOLEgseixGLEVbMTBdLDMyMDAyMzY2NTYsMjMpLEY9TyhGLE4sSCx6LEVbMTNdLDY4MTI3OTE3NCw0KSx6''@;'; put 'put ''PU8oeixGLE4sSCxFWzBdLDM5MzY0MzAwNzQsMTEpLEg9TyhILHosRixOLEVbM10sMzU3MjQ0NTMxNywxNiksTj1PKE4sSCx6LEYsRVs2XSw3NjAyOTE4OSwyMyksRj1PKEYsTixILHosRVs5XSwzNjU0NjAyODA5LDQpLHo9Tyh6LEYsTixILEVbMTJdLDM4NzMxNTE0NjEsMTEpLEg9TyhILHos''@;'; put 'put ''RixOLEVbMTVdLDUzMDc0MjUyMCwxNiksRj1EKEYsTj1PKE4sSCx6LEYsRVsyXSwzMjk5NjI4NjQ1LDIzKSxILHosRVswXSw0MDk2MzM2NDUyLDYpLHo9RCh6LEYsTixILEVbN10sMTEyNjg5MTQxNSwxMCksSD1EKEgseixGLE4sRVsxNF0sMjg3ODYxMjM5MSwxNSksTj1EKE4sSCx6LEYsRVs1''@;'; put 'put ''XSw0MjM3NTMzMjQxLDIxKSxGPUQoRixOLEgseixFWzEyXSwxNzAwNDg1NTcxLDYpLHo9RCh6LEYsTixILEVbM10sMjM5OTk4MDY5MCwxMCksSD1EKEgseixGLE4sRVsxMF0sNDI5MzkxNTc3MywxNSksTj1EKE4sSCx6LEYsRVsxXSwyMjQwMDQ0NDk3LDIxKSxGPUQoRixOLEgseixFWzhdLDE4''@;'; put 'put ''NzMzMTMzNTksNiksej1EKHosRixOLEgsRVsxNV0sNDI2NDM1NTU1MiwxMCksSD1EKEgseixGLE4sRVs2XSwyNzM0NzY4OTE2LDE1KSxOPUQoTixILHosRixFWzEzXSwxMzA5MTUxNjQ5LDIxKSxGPUQoRixOLEgseixFWzRdLDQxNDk0NDQyMjYsNiksej1EKHosRixOLEgsRVsxMV0sMzE3NDc1''@;'; put 'put ''NjkxNywxMCksSD1EKEgseixGLE4sRVsyXSw3MTg3ODcyNTksMTUpLE49RChOLEgseixGLEVbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK0Z8MCx0aGlzLl9iPXRoaXMuX2IrTnwwLHRoaXMuX2M9dGhpcy5fYytIfDAsdGhpcy5fZD10aGlzLl9kK3p8MH0sZi5wcm90b3R5cGUu''@;'; put 'put ''X2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxv''@;'; put 'put ''Y2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBFPW8uYWxsb2NVbnNhZmUoMTYpO3Jl''@;'; put 'put ''dHVybiBFLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEUud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksRS53cml0ZUludDMyTEUodGhpcy5fYyw4KSxFLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxFfSx0ZS5leHBvcnRzPWZ9LDUzNDU5KHRlLGosZCl7dmFyIFM9ZCg1NzIyMyksaD1kKDM1Mjk0''@;'; put 'put ''KTtmdW5jdGlvbiBvKEkpe3RoaXMucmFuZD1JfHxuZXcgaC5SYW5kfXRlLmV4cG9ydHM9byxvLmNyZWF0ZT1mdW5jdGlvbihmKXtyZXR1cm4gbmV3IG8oZil9LG8ucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24oZil7dmFyIFQ9Zi5iaXRMZW5ndGgoKSxBPU1hdGguY2VpbChULzgpO2Rv''@;'; put 'put ''e3ZhciBNPW5ldyBTKHRoaXMucmFuZC5nZW5lcmF0ZShBKSl9d2hpbGUoTS5jbXAoZik+PTApO3JldHVybiBNfSxvLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKGYsVCl7dmFyIEE9VC5zdWIoZik7cmV0dXJuIGYuYWRkKHRoaXMuX3JhbmRiZWxvdyhBKSl9LG8ucHJvdG90eXBlLnRl''@;'; put 'put ''c3Q9ZnVuY3Rpb24oZixULEEpe3ZhciBNPWYuYml0TGVuZ3RoKCksTz1TLm1vbnQoZiksRD1uZXcgUygxKS50b1JlZChPKTtUfHwoVD1NYXRoLm1heCgxLE0vNDh8MCkpO2Zvcih2YXIgRT1mLnN1Ym4oMSksQj0wOyFFLnRlc3RuKEIpO0IrKyk7Zm9yKHZhciBGPWYuc2hybihCKSxOPUUudG9S''@;'; put 'put ''ZWQoTyk7VD4wO1QtLSl7dmFyIHo9dGhpcy5fcmFuZHJhbmdlKG5ldyBTKDIpLEUpO0EmJkEoeik7dmFyIFo9ei50b1JlZChPKS5yZWRQb3coRik7aWYoMCE9PVouY21wKEQpJiYwIT09Wi5jbXAoTikpe2Zvcih2YXIgVT0xO1U8QjtVKyspe2lmKDA9PT0oWj1aLnJlZFNxcigpKS5jbXAoRCkp''@;'; put 'put ''cmV0dXJuITE7aWYoMD09PVouY21wKE4pKWJyZWFrfWlmKFU9PT1CKXJldHVybiExfX1yZXR1cm4hMH0sby5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbihmLFQpe3ZhciBBPWYuYml0TGVuZ3RoKCksTT1TLm1vbnQoZiksTz1uZXcgUygxKS50b1JlZChNKTtUfHwoVD1NYXRoLm1heCgx''@;'; put 'put ''LEEvNDh8MCkpO2Zvcih2YXIgRD1mLnN1Ym4oMSksRT0wOyFELnRlc3RuKEUpO0UrKyk7Zm9yKHZhciBCPWYuc2hybihFKSxGPUQudG9SZWQoTSk7VD4wO1QtLSl7dmFyIE49dGhpcy5fcmFuZHJhbmdlKG5ldyBTKDIpLEQpLEg9Zi5nY2QoTik7aWYoMCE9PUguY21wbigxKSlyZXR1cm4gSDt2''@;'; put 'put ''YXIgej1OLnRvUmVkKE0pLnJlZFBvdyhCKTtpZigwIT09ei5jbXAoTykmJjAhPT16LmNtcChGKSl7Zm9yKHZhciBaPTE7WjxFO1orKyl7aWYoMD09PSh6PXoucmVkU3FyKCkpLmNtcChPKSlyZXR1cm4gei5mcm9tUmVkKCkuc3VibigxKS5nY2QoZik7aWYoMD09PXouY21wKEYpKWJyZWFrfWlm''@;'; put 'put ''KFo9PT1FKXJldHVybih6PXoucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZChmKX19cmV0dXJuITF9fSw1NzIyMyh0ZSxqLGQpeyFmdW5jdGlvbihTLGgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKFIscyl7aWYoIVIpdGhyb3cgbmV3IEVycm9yKHN8fCJBc3NlcnRpb24gZmFpbGVk''@;'; put 'put ''Iil9ZnVuY3Rpb24gSShSLHMpe1Iuc3VwZXJfPXM7dmFyIHU9ZnVuY3Rpb24oKXt9O3UucHJvdG90eXBlPXMucHJvdG90eXBlLFIucHJvdG90eXBlPW5ldyB1LFIucHJvdG90eXBlLmNvbnN0cnVjdG9yPVJ9ZnVuY3Rpb24gZihSLHMsdSl7aWYoZi5pc0JOKFIpKXJldHVybiBSO3RoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1SJiYoKCJsZSI9PT1zfHwiYmUiPT09cykmJih1PXMscz0xMCksdGhpcy5faW5pdChSfHwwLHN8fDEwLHV8fCJiZSIpKX12YXIgVDsib2JqZWN0Ij09dHlwZW9mIFM/Uy5leHBvcnRzPWY6''@;'; put 'put ''aC5CTj1mLGYuQk49ZixmLndvcmRTaXplPTI2O3RyeXtUPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpkKDY0Njg4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEEoUixzKXt2YXIgdT1SLmNoYXJDb2RlQXQocyk7cmV0dXJuIHU+PTY1''@;'; put 'put ''JiZ1PD03MD91LTU1OnU+PTk3JiZ1PD0xMDI/dS04Nzp1LTQ4JjE1fWZ1bmN0aW9uIE0oUixzLHUpe3ZhciB2PUEoUix1KTtyZXR1cm4gdS0xPj1zJiYodnw9QShSLHUtMSk8PDQpLHZ9ZnVuY3Rpb24gTyhSLHMsdSx2KXtmb3IodmFyIHA9MCxfPU1hdGgubWluKFIubGVuZ3RoLHUpLGs9cztr''@;'; put 'put ''PF87aysrKXt2YXIgTD1SLmNoYXJDb2RlQXQoayktNDg7cCo9dixwKz1MPj00OT9MLTQ5KzEwOkw+PTE3P0wtMTcrMTA6TH1yZXR1cm4gcH1mLmlzQk49ZnVuY3Rpb24ocyl7cmV0dXJuIHMgaW5zdGFuY2VvZiBmfHxudWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmNvbnN0cnVjdG9y''@;'; put 'put ''LndvcmRTaXplPT09Zi53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShzLndvcmRzKX0sZi5tYXg9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gcy5jbXAodSk+MD9zOnV9LGYubWluPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHMuY21wKHUpPDA/czp1fSxmLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihzLHUs''@;'; put 'put ''dil7aWYoIm51bWJlciI9PXR5cGVvZiBzKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHMsdSx2KTtpZigib2JqZWN0Ij09dHlwZW9mIHMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShzLHUsdik7ImhleCI9PT11JiYodT0xNiksbyh1PT09KDB8dSkmJnU+PTImJnU8PTM2KTt2YXIgcD0wOyItIj09''@;'; put 'put ''PShzPXMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYocCsrLHRoaXMubmVnYXRpdmU9MSkscDxzLmxlbmd0aCYmKDE2PT09dT90aGlzLl9wYXJzZUhleChzLHAsdik6KHRoaXMuX3BhcnNlQmFzZShzLHUscCksImxlIj09PXYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJy''@;'; put 'put ''YXkoKSx1LHYpKSl9LGYucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHMsdSx2KXtzPDAmJih0aGlzLm5lZ2F0aXZlPTEscz0tcyksczw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmc10sdGhpcy5sZW5ndGg9MSk6czw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2''@;'; put 'put ''NzEwODg2MyZzLHMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihvKHM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcyxzLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT12JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0Fy''@;'; put 'put ''cmF5KCksdSx2KX0sZi5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihzLHUsdil7aWYobygibnVtYmVyIj09dHlwZW9mIHMubGVuZ3RoKSxzLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChzLmxlbmd0''@;'; put 'put ''aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT0wO3ZhciBfLGssTD0wO2lmKCJiZSI9PT12KWZvcihwPXMubGVuZ3RoLTEsXz0wO3A+PTA7cC09Myl0aGlzLndvcmRzW19dfD0oaz1zW3BdfHNb''@;'; put 'put ''cC0xXTw8OHxzW3AtMl08PDE2KTw8TCY2NzEwODg2Myx0aGlzLndvcmRzW18rMV09az4+PjI2LUwmNjcxMDg4NjMsKEwrPTI0KT49MjYmJihMLT0yNixfKyspO2Vsc2UgaWYoImxlIj09PXYpZm9yKHA9MCxfPTA7cDxzLmxlbmd0aDtwKz0zKXRoaXMud29yZHNbX118PShrPXNbcF18c1twKzFd''@;'; put 'put ''PDw4fHNbcCsyXTw8MTYpPDxMJjY3MTA4ODYzLHRoaXMud29yZHNbXysxXT1rPj4+MjYtTCY2NzEwODg2MywoTCs9MjQpPj0yNiYmKEwtPTI2LF8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHMsdSx2KXt0aGlzLmxlbmd0aD1NYXRoLmNl''@;'; put 'put ''aWwoKHMubGVuZ3RoLXUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTA7dmFyIEwsXz0wLGs9MDtpZigiYmUiPT09dilmb3IocD1zLmxlbmd0aC0xO3A+PXU7cC09MilMPU0ocyx1LHApPDxf''@;'; put 'put ''LHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49MTg/KF8tPTE4LHRoaXMud29yZHNbays9MV18PUw+Pj4yNik6Xys9ODtlbHNlIGZvcihwPShzLmxlbmd0aC11KSUyPT0wP3UrMTp1O3A8cy5sZW5ndGg7cCs9MilMPU0ocyx1LHApPDxfLHRoaXMud29yZHNba118PTY3MTA4ODYzJkwsXz49''@;'; put 'put ''MTg/KF8tPTE4LHRoaXMud29yZHNbays9MV18PUw+Pj4yNik6Xys9ODt0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocyx1LHYpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBwPTAsXz0xO188PTY3MTA4ODYzO18qPXUpcCsrO3AtLSxf''@;'; put 'put ''PV8vdXwwO2Zvcih2YXIgaz1zLmxlbmd0aC12LEw9ayVwLHk9TWF0aC5taW4oayxrLUwpK3YsbD0wLGI9djtiPHk7Yis9cClsPU8ocyxiLGIrcCx1KSx0aGlzLmltdWxuKF8pLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpO2lmKDAhPT1M''@;'; put 'put ''KXt2YXIgcT0xO2ZvcihsPU8ocyxiLHMubGVuZ3RoLHUpLGI9MDtiPEw7YisrKXEqPXU7dGhpcy5pbXVsbihxKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKX10aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocyl7''@;'; put 'put ''cy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD10aGlzLmxlbmd0aCxzLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscy5yZWQ9dGhpcy5yZWR9LGYucHJvdG90eXBlLmNsb25l''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJuIHRoaXMuY29weShzKSxzfSxmLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHMpe2Zvcig7dGhpcy5sZW5ndGg8czspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxmLnByb3RvdHlwZS5zdHJpcD1m''@;'; put 'put ''dW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGYucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlz''@;'; put 'put ''LndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxmLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBEPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwi''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sQj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1''@;'; put 'put ''LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1''@;'; put 'put ''LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBOKFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZTt2YXIgdj1SLmxlbmd0aCtz''@;'; put 'put ''Lmxlbmd0aHwwO3UubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfFIud29yZHNbMF0sXz0wfHMud29yZHNbMF0saz1wKl8seT1rLzY3MTA4ODY0fDA7dS53b3Jkc1swXT02NzEwODg2MyZrO2Zvcih2YXIgbD0xO2w8djtsKyspe2Zvcih2YXIgYj15Pj4+MjYscT02NzEwODg2MyZ5LEc9TWF0aC5t''@;'; put 'put ''aW4obCxzLmxlbmd0aC0xKSxRPU1hdGgubWF4KDAsbC1SLmxlbmd0aCsxKTtRPD1HO1ErKyliKz0oaz0ocD0wfFIud29yZHNbbC1RfDBdKSooXz0wfHMud29yZHNbUV0pK3EpLzY3MTA4ODY0fDAscT02NzEwODg2MyZrO3Uud29yZHNbbF09MHxxLHk9MHxifXJldHVybiAwIT09eT91LndvcmRz''@;'; put 'put ''W2xdPTB8eTp1Lmxlbmd0aC0tLHUuc3RyaXAoKX1mLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihzLHUpe3ZhciB2O2lmKHU9MHx1fHwxLDE2PT09KHM9c3x8MTApfHwiaGV4Ij09PXMpe3Y9IiI7Zm9yKHZhciBwPTAsXz0wLGs9MDtrPHRoaXMubGVuZ3RoO2srKyl7dmFyIEw9dGhpcy53''@;'; put 'put ''b3Jkc1trXSx5PSgxNjc3NzIxNSYoTDw8cHxfKSkudG9TdHJpbmcoMTYpO189TD4+PjI0LXAmMTY3NzcyMTUsKHArPTIpPj0yNiYmKHAtPTI2LGstLSksdj0wIT09X3x8ayE9PXRoaXMubGVuZ3RoLTE/RFs2LXkubGVuZ3RoXSt5K3Y6eSt2fWZvcigwIT09XyYmKHY9Xy50b1N0cmluZygxNikr''@;'; put 'put ''dik7di5sZW5ndGgldSE9MDspdj0iMCIrdjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih2PSItIit2KSx2fWlmKHM9PT0oMHxzKSYmcz49MiYmczw9MzYpe3ZhciBsPUVbc10sYj1CW3NdO3Y9IiI7dmFyIHE9dGhpcy5jbG9uZSgpO2ZvcihxLm5lZ2F0aXZlPTA7IXEuaXNaZXJvKCk7KXt2''@;'; put 'put ''YXIgRz1xLm1vZG4oYikudG9TdHJpbmcocyk7dj0ocT1xLmlkaXZuKGIpKS5pc1plcm8oKT9HK3Y6RFtsLUcubGVuZ3RoXStHK3Z9Zm9yKHRoaXMuaXNaZXJvKCkmJih2PSIwIit2KTt2Lmxlbmd0aCV1IT0wOyl2PSIwIit2O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHY9Ii0iK3YpLHZ9''@;'; put 'put ''byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxmLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBzPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9zKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRo''@;'; put 'put ''aXMud29yZHNbMl0/cys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1zOnN9LGYucHJvdG90eXBlLnRvSlNPTj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sZi5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gbyh0eXBlb2YgVDwidSIpLHRoaXMudG9BcnJheUxpa2UoVCxzLHUpfSxmLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dG9BcnJheUxpa2UoQXJyYXkscyx1KX0sZi5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPXRoaXMuYnl0ZUxlbmd0aCgpLF89dnx8TWF0aC5tYXgoMSxwKTtvKHA8PV8sImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxvKF8+MCwiUmVx''@;'; put 'put ''dWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB5LGwsaz0ibGUiPT09dSxMPW5ldyBzKF8pLGI9dGhpcy5jbG9uZSgpO2lmKGspe2ZvcihsPTA7IWIuaXNaZXJvKCk7bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbbF09eTtmb3IoO2w8XztsKyspTFts''@;'; put 'put ''XT0wfWVsc2V7Zm9yKGw9MDtsPF8tcDtsKyspTFtsXT0wO2ZvcihsPTA7IWIuaXNaZXJvKCk7bCsrKXk9Yi5hbmRsbigyNTUpLGIuaXVzaHJuKDgpLExbXy1sLTFdPXl9cmV0dXJuIEx9LGYucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihzKXtyZXR1cm4gMzItTWF0''@;'; put 'put ''aC5jbHozMihzKX06ZnVuY3Rpb24ocyl7dmFyIHU9cyx2PTA7cmV0dXJuIHU+PTQwOTYmJih2Kz0xMyx1Pj4+PTEzKSx1Pj02NCYmKHYrPTcsdT4+Pj03KSx1Pj04JiYodis9NCx1Pj4+PTQpLHU+PTImJih2Kz0yLHU+Pj49Miksdit1fSxmLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24o''@;'; put 'put ''cyl7aWYoMD09PXMpcmV0dXJuIDI2O3ZhciB1PXMsdj0wO3JldHVybiEoODE5MSZ1KSYmKHYrPTEzLHU+Pj49MTMpLCEoMTI3JnUpJiYodis9Nyx1Pj4+PTcpLCEoMTUmdSkmJih2Kz00LHU+Pj49NCksISgzJnUpJiYodis9Mix1Pj4+PTIpLCEoMSZ1KSYmdisrLHZ9LGYucHJvdG90eXBlLmJp''@;'; put 'put ''dExlbmd0aD1mdW5jdGlvbigpe3ZhciB1PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3V9LGYucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHM9''@;'; put 'put ''MCx1PTA7dTx0aGlzLmxlbmd0aDt1Kyspe3ZhciB2PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbdV0pO2lmKHMrPXYsMjYhPT12KWJyZWFrfXJldHVybiBzfSxmLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxm''@;'; put 'put ''LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxmLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy50ZXN0bihzLTEpP3RoaXMubm90bihz''@;'; put 'put ''KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxmLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sZi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGYucHJvdG90eXBlLmluZWc9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LGYucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocyl7Zm9yKDt0aGlzLmxlbmd0aDxzLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXRo''@;'; put 'put ''aXMud29yZHNbdV09dGhpcy53b3Jkc1t1XXxzLndvcmRzW3VdO3JldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlvcj1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihzKX0sZi5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocyl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3Iocyk6cy5jbG9uZSgpLmlvcih0aGlzKX0sZi5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihzKTpzLmNsb25lKCkuaXVvcih0aGlz''@;'; put 'put ''KX0sZi5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocyl7dmFyIHU7dT10aGlzLmxlbmd0aD5zLmxlbmd0aD9zOnRoaXM7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT10aGlzLndvcmRzW3ZdJnMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPXUubGVuZ3RoLHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocyl9LGYucHJvdG90eXBlLmFuZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlh''@;'; put 'put ''bmQocyk6cy5jbG9uZSgpLmlhbmQodGhpcyl9LGYucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChzKTpzLmNsb25lKCkuaXVhbmQodGhpcyl9LGYucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHMpe3ZhciB1''@;'; put 'put ''LHY7dGhpcy5sZW5ndGg+cy5sZW5ndGg/KHU9dGhpcyx2PXMpOih1PXMsdj10aGlzKTtmb3IodmFyIHA9MDtwPHYubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXUud29yZHNbcF1edi53b3Jkc1twXTtpZih0aGlzIT09dSlmb3IoO3A8dS5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dS53b3Jk''@;'; put 'put ''c1twXTtyZXR1cm4gdGhpcy5sZW5ndGg9dS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHMpe3JldHVybiBvKCEodGhpcy5uZWdhdGl2ZXxzLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihzKX0sZi5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHMpe3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihzKTpzLmNsb25lKCkuaXhvcih0aGlzKX0sZi5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHMpOnMuY2xvbmUoKS5pdXhvcih0aGlzKX0s''@;'; put 'put ''Zi5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB1PTB8TWF0aC5jZWlsKHMvMjYpLHY9cyUyNjt0aGlzLl9leHBhbmQodSksdj4wJiZ1LS07Zm9yKHZhciBwPTA7cDx1O3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJn50aGlzLndv''@;'; put 'put ''cmRzW3BdO3JldHVybiB2PjAmJih0aGlzLndvcmRzW3BdPX50aGlzLndvcmRzW3BdJjY3MTA4ODYzPj4yNi12KSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihzKX0sZi5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihz''@;'; put 'put ''LHUpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgdj1zLzI2fDAscD1zJTI2O3JldHVybiB0aGlzLl9leHBhbmQodisxKSx0aGlzLndvcmRzW3ZdPXU/dGhpcy53b3Jkc1t2XXwxPDxwOnRoaXMud29yZHNbdl0mfigxPDxwKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlhZGQ9''@;'; put 'put ''ZnVuY3Rpb24ocyl7dmFyIHUsdixwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHU9dGhpcy5pc3ViKHMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHMubmVnYXRpdmU9MCx1PXRoaXMuaXN1YihzKSxzLm5lZ2F0aXZlPTEsdS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5zLmxlbmd0aD8odj10aGlzLHA9cyk6KHY9cyxwPXRoaXMpO2Zvcih2YXIgXz0wLGs9MDtrPHAubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPTY3MTA4ODYz''@;'; put 'put ''Jih1PSgwfHYud29yZHNba10pKygwfHAud29yZHNba10pK18pLF89dT4+PjI2O2Zvcig7MCE9PV8mJms8di5sZW5ndGg7aysrKXRoaXMud29yZHNba109NjcxMDg4NjMmKHU9KDB8di53b3Jkc1trXSkrXyksXz11Pj4+MjY7aWYodGhpcy5sZW5ndGg9di5sZW5ndGgsMCE9PV8pdGhpcy53b3Jk''@;'; put 'put ''c1t0aGlzLmxlbmd0aF09Xyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYodiE9PXRoaXMpZm9yKDtrPHYubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPXYud29yZHNba107cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzKXt2YXIgdTtyZXR1cm4gMCE9PXMubmVnYXRpdmUmJjA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlPyhzLm5lZ2F0aXZlPTAsdT10aGlzLnN1YihzKSxzLm5lZ2F0aXZlXj0xLHUpOjA9PT1zLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHU9cy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHUpOnRoaXMubGVuZ3RoPnMubGVuZ3Ro''@;'; put 'put ''P3RoaXMuY2xvbmUoKS5pYWRkKHMpOnMuY2xvbmUoKS5pYWRkKHRoaXMpfSxmLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHMpe2lmKDAhPT1zLm5lZ2F0aXZlKXtzLm5lZ2F0aXZlPTA7dmFyIHU9dGhpcy5pYWRkKHMpO3JldHVybiBzLm5lZ2F0aXZlPTEsdS5fbm9ybVNpZ24oKX1pZigwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcCxfLHY9dGhpcy5jbXAocyk7aWYoMD09PXYpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09''@;'; put 'put ''MCx0aGlzO3Y+MD8ocD10aGlzLF89cyk6KHA9cyxfPXRoaXMpO2Zvcih2YXIgaz0wLEw9MDtMPF8ubGVuZ3RoO0wrKylrPSh1PSgwfHAud29yZHNbTF0pLSgwfF8ud29yZHNbTF0pK2spPj4yNix0aGlzLndvcmRzW0xdPTY3MTA4ODYzJnU7Zm9yKDswIT09ayYmTDxwLmxlbmd0aDtMKyspaz0o''@;'; put 'put ''dT0oMHxwLndvcmRzW0xdKStrKT4+MjYsdGhpcy53b3Jkc1tMXT02NzEwODg2MyZ1O2lmKDA9PT1rJiZMPHAubGVuZ3RoJiZwIT09dGhpcylmb3IoO0w8cC5sZW5ndGg7TCsrKXRoaXMud29yZHNbTF09cC53b3Jkc1tMXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgs''@;'; put 'put ''TCkscCE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihzKX07dmFyIEg9ZnVuY3Rpb24ocyx1LHYpe3ZhciB5LGwsYixwPXMud29yZHMsXz11LndvcmRzLGs9di53b3JkcyxM''@;'; put 'put ''PTAscT0wfHBbMF0sRz04MTkxJnEsUT1xPj4+MTMscGU9MHxwWzFdLFBlPTgxOTEmcGUsWmU9cGU+Pj4xMyxxZT0wfHBbMl0sdmU9ODE5MSZxZSx1ZT1xZT4+PjEzLHplPTB8cFszXSxPZT04MTkxJnplLENlPXplPj4+MTMsa2U9MHxwWzRdLHhlPTgxOTEma2UsTWU9a2U+Pj4xMyxJZT0wfHBb''@;'; put 'put ''NV0sYmU9ODE5MSZJZSx3ZT1JZT4+PjEzLHB0PTB8cFs2XSxLZT04MTkxJnB0LFllPXB0Pj4+MTMscXQ9MHxwWzddLGh0PTgxOTEmcXQsdnQ9cXQ+Pj4xMyxZdD0wfHBbOF0sdHQ9ODE5MSZZdCxVZT1ZdD4+PjEzLCRlPTB8cFs5XSxMZT04MTkxJiRlLG50PSRlPj4+MTMscm49MHxfWzBdLHh0''@;'; put 'put ''PTgxOTEmcm4sVHQ9cm4+Pj4xMyx5bj0wfF9bMV0sWHQ9ODE5MSZ5bixRdD15bj4+PjEzLFhyPTB8X1syXSxzbj04MTkxJlhyLGl0PVhyPj4+MTMsQ3I9MHxfWzNdLEx0PTgxOTEmQ3Isd3Q9Q3I+Pj4xMyxSbj0wfF9bNF0sUWU9ODE5MSZSbixQdD1Sbj4+PjEzLFFyPTB8X1s1XSxOZT04MTkx''@;'; put 'put ''JlFyLHl0PVFyPj4+MTMscnI9MHxfWzZdLGF0PTgxOTEmcnIsX3Q9cnI+Pj4xMyx3bj0wfF9bN10sJHQ9ODE5MSZ3bixIdD13bj4+PjEzLHNpPTB8X1s4XSxubj04MTkxJnNpLGxuPXNpPj4+MTMsa2k9MHxfWzldLGFuPTgxOTEma2ksR3Q9a2k+Pj4xMzt2Lm5lZ2F0aXZlPXMubmVnYXRpdmVe''@;'; put 'put ''dS5uZWdhdGl2ZSx2Lmxlbmd0aD0xOTt2YXIgZWE9KEwrKHk9TWF0aC5pbXVsKEcseHQpKXwwKSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKEcsVHQpKStNYXRoLmltdWwoUSx4dCl8MCkpPDwxMyl8MDtMPSgoYj1NYXRoLmltdWwoUSxUdCkpKyhsPj4+MTMpfDApKyhlYT4+PjI2KXwwLGVhJj02''@;'; put 'put ''NzEwODg2Myx5PU1hdGguaW11bChQZSx4dCksbD0obD1NYXRoLmltdWwoUGUsVHQpKStNYXRoLmltdWwoWmUseHQpfDAsYj1NYXRoLmltdWwoWmUsVHQpO3ZhciBtaT0oTCsoeT15K01hdGguaW11bChHLFh0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxRdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFEsWHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxRdCl8MCkrKGw+Pj4xMyl8MCkrKG1pPj4+MjYpfDAsbWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKHZlLHh0KSxsPShsPU1hdGguaW11bCh2ZSxUdCkpK01hdGguaW11bCh1ZSx4dCl8MCxiPU1hdGguaW11bCh1ZSxUdCks''@;'; put 'put ''eT15K01hdGguaW11bChQZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLFF0KXwwKStNYXRoLmltdWwoWmUsWHQpfDAsYj1iK01hdGguaW11bChaZSxRdCl8MDt2YXIgZnI9KEwrKHk9eStNYXRoLmltdWwoRyxzbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsaXQpfDApK01h''@;'; put 'put ''dGguaW11bChRLHNuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsaXQpfDApKyhsPj4+MTMpfDApKyhmcj4+PjI2KXwwLGZyJj02NzEwODg2Myx5PU1hdGguaW11bChPZSx4dCksbD0obD1NYXRoLmltdWwoT2UsVHQpKStNYXRoLmltdWwoQ2UseHQpfDAsYj1NYXRoLmltdWwoQ2Us''@;'; put 'put ''VHQpLHk9eStNYXRoLmltdWwodmUsWHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxRdCl8MCkrTWF0aC5pbXVsKHVlLFh0KXwwLGI9YitNYXRoLmltdWwodWUsUXQpfDAseT15K01hdGguaW11bChQZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKFBlLGl0KXwwKStNYXRoLmltdWwoWmUsc24pfDAs''@;'; put 'put ''Yj1iK01hdGguaW11bChaZSxpdCl8MDt2YXIgJGk9KEwrKHk9eStNYXRoLmltdWwoRyxMdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsd3QpfDApK01hdGguaW11bChRLEx0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsd3QpfDApKyhsPj4+MTMpfDApKygkaT4+''@;'; put 'put ''PjI2KXwwLCRpJj02NzEwODg2Myx5PU1hdGguaW11bCh4ZSx4dCksbD0obD1NYXRoLmltdWwoeGUsVHQpKStNYXRoLmltdWwoTWUseHQpfDAsYj1NYXRoLmltdWwoTWUsVHQpLHk9eStNYXRoLmltdWwoT2UsWHQpfDAsbD0obD1sK01hdGguaW11bChPZSxRdCl8MCkrTWF0aC5pbXVsKENlLFh0''@;'; put 'put ''KXwwLGI9YitNYXRoLmltdWwoQ2UsUXQpfDAseT15K01hdGguaW11bCh2ZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHZlLGl0KXwwKStNYXRoLmltdWwodWUsc24pfDAsYj1iK01hdGguaW11bCh1ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKFBlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsd3Qp''@;'; put 'put ''fDApK01hdGguaW11bChaZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFplLHd0KXwwO3ZhciBLaT0oTCsoeT15K01hdGguaW11bChHLFFlKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxQdCl8MCkrTWF0aC5pbXVsKFEsUWUpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxQ''@;'; put 'put ''dCl8MCkrKGw+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKGJlLHh0KSxsPShsPU1hdGguaW11bChiZSxUdCkpK01hdGguaW11bCh3ZSx4dCl8MCxiPU1hdGguaW11bCh3ZSxUdCkseT15K01hdGguaW11bCh4ZSxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhl''@;'; put 'put ''LFF0KXwwKStNYXRoLmltdWwoTWUsWHQpfDAsYj1iK01hdGguaW11bChNZSxRdCl8MCx5PXkrTWF0aC5pbXVsKE9lLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsaXQpfDApK01hdGguaW11bChDZSxzbil8MCxiPWIrTWF0aC5pbXVsKENlLGl0KXwwLHk9eStNYXRoLmltdWwodmUsTHQpfDAs''@;'; put 'put ''bD0obD1sK01hdGguaW11bCh2ZSx3dCl8MCkrTWF0aC5pbXVsKHVlLEx0KXwwLGI9YitNYXRoLmltdWwodWUsd3QpfDAseT15K01hdGguaW11bChQZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLFB0KXwwKStNYXRoLmltdWwoWmUsUWUpfDAsYj1iK01hdGguaW11bChaZSxQdCl8MDt2YXIg''@;'; put 'put ''Vmk9KEwrKHk9eStNYXRoLmltdWwoRyxOZSl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcseXQpfDApK01hdGguaW11bChRLE5lKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEseXQpfDApKyhsPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2Myx5PU1hdGgu''@;'; put 'put ''aW11bChLZSx4dCksbD0obD1NYXRoLmltdWwoS2UsVHQpKStNYXRoLmltdWwoWWUseHQpfDAsYj1NYXRoLmltdWwoWWUsVHQpLHk9eStNYXRoLmltdWwoYmUsWHQpfDAsbD0obD1sK01hdGguaW11bChiZSxRdCl8MCkrTWF0aC5pbXVsKHdlLFh0KXwwLGI9YitNYXRoLmltdWwod2UsUXQpfDAs''@;'; put 'put ''eT15K01hdGguaW11bCh4ZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKHhlLGl0KXwwKStNYXRoLmltdWwoTWUsc24pfDAsYj1iK01hdGguaW11bChNZSxpdCl8MCx5PXkrTWF0aC5pbXVsKE9lLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChDZSxMdCl8MCxiPWIr''@;'; put 'put ''TWF0aC5pbXVsKENlLHd0KXwwLHk9eStNYXRoLmltdWwodmUsUWUpfDAsbD0obD1sK01hdGguaW11bCh2ZSxQdCl8MCkrTWF0aC5pbXVsKHVlLFFlKXwwLGI9YitNYXRoLmltdWwodWUsUHQpfDAseT15K01hdGguaW11bChQZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLHl0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWmUsTmUpfDAsYj1iK01hdGguaW11bChaZSx5dCl8MDt2YXIgcXI9KEwrKHk9eStNYXRoLmltdWwoRyxhdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsX3QpfDApK01hdGguaW11bChRLGF0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsX3QpfDApKyhs''@;'; put 'put ''Pj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx5PU1hdGguaW11bChodCx4dCksbD0obD1NYXRoLmltdWwoaHQsVHQpKStNYXRoLmltdWwodnQseHQpfDAsYj1NYXRoLmltdWwodnQsVHQpLHk9eStNYXRoLmltdWwoS2UsWHQpfDAsbD0obD1sK01hdGguaW11bChLZSxRdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFllLFh0KXwwLGI9YitNYXRoLmltdWwoWWUsUXQpfDAseT15K01hdGguaW11bChiZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGJlLGl0KXwwKStNYXRoLmltdWwod2Usc24pfDAsYj1iK01hdGguaW11bCh3ZSxpdCl8MCx5PXkrTWF0aC5pbXVsKHhlLEx0KXwwLGw9KGw9bCtN''@;'; put 'put ''YXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChNZSxMdCl8MCxiPWIrTWF0aC5pbXVsKE1lLHd0KXwwLHk9eStNYXRoLmltdWwoT2UsUWUpfDAsbD0obD1sK01hdGguaW11bChPZSxQdCl8MCkrTWF0aC5pbXVsKENlLFFlKXwwLGI9YitNYXRoLmltdWwoQ2UsUHQpfDAseT15K01hdGguaW11''@;'; put 'put ''bCh2ZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHZlLHl0KXwwKStNYXRoLmltdWwodWUsTmUpfDAsYj1iK01hdGguaW11bCh1ZSx5dCl8MCx5PXkrTWF0aC5pbXVsKFBlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoUGUsX3QpfDApK01hdGguaW11bChaZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFpl''@;'; put 'put ''LF90KXwwO3ZhciB1YT0oTCsoeT15K01hdGguaW11bChHLCR0KXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoRyxIdCl8MCkrTWF0aC5pbXVsKFEsJHQpfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoUSxIdCl8MCkrKGw+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4''@;'; put 'put ''ODYzLHk9TWF0aC5pbXVsKHR0LHh0KSxsPShsPU1hdGguaW11bCh0dCxUdCkpK01hdGguaW11bChVZSx4dCl8MCxiPU1hdGguaW11bChVZSxUdCkseT15K01hdGguaW11bChodCxYdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LFF0KXwwKStNYXRoLmltdWwodnQsWHQpfDAsYj1iK01hdGguaW11''@;'; put 'put ''bCh2dCxRdCl8MCx5PXkrTWF0aC5pbXVsKEtlLHNuKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsaXQpfDApK01hdGguaW11bChZZSxzbil8MCxiPWIrTWF0aC5pbXVsKFllLGl0KXwwLHk9eStNYXRoLmltdWwoYmUsTHQpfDAsbD0obD1sK01hdGguaW11bChiZSx3dCl8MCkrTWF0aC5pbXVsKHdl''@;'; put 'put ''LEx0KXwwLGI9YitNYXRoLmltdWwod2Usd3QpfDAseT15K01hdGguaW11bCh4ZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLFB0KXwwKStNYXRoLmltdWwoTWUsUWUpfDAsYj1iK01hdGguaW11bChNZSxQdCl8MCx5PXkrTWF0aC5pbXVsKE9lLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoT2Us''@;'; put 'put ''eXQpfDApK01hdGguaW11bChDZSxOZSl8MCxiPWIrTWF0aC5pbXVsKENlLHl0KXwwLHk9eStNYXRoLmltdWwodmUsYXQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxfdCl8MCkrTWF0aC5pbXVsKHVlLGF0KXwwLGI9YitNYXRoLmltdWwodWUsX3QpfDAseT15K01hdGguaW11bChQZSwkdCl8MCxs''@;'; put 'put ''PShsPWwrTWF0aC5pbXVsKFBlLEh0KXwwKStNYXRoLmltdWwoWmUsJHQpfDAsYj1iK01hdGguaW11bChaZSxIdCl8MDt2YXIgRmk9KEwrKHk9eStNYXRoLmltdWwoRyxubil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsbG4pfDApK01hdGguaW11bChRLG5uKXwwKSk8PDEzKXww''@;'; put 'put ''O0w9KChiPWIrTWF0aC5pbXVsKFEsbG4pfDApKyhsPj4+MTMpfDApKyhGaT4+PjI2KXwwLEZpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSx4dCksbD0obD1NYXRoLmltdWwoTGUsVHQpKStNYXRoLmltdWwobnQseHQpfDAsYj1NYXRoLmltdWwobnQsVHQpLHk9eStNYXRoLmltdWwodHQsWHQp''@;'; put 'put ''fDAsbD0obD1sK01hdGguaW11bCh0dCxRdCl8MCkrTWF0aC5pbXVsKFVlLFh0KXwwLGI9YitNYXRoLmltdWwoVWUsUXQpfDAseT15K01hdGguaW11bChodCxzbil8MCxsPShsPWwrTWF0aC5pbXVsKGh0LGl0KXwwKStNYXRoLmltdWwodnQsc24pfDAsYj1iK01hdGguaW11bCh2dCxpdCl8MCx5''@;'; put 'put ''PXkrTWF0aC5pbXVsKEtlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxMdCl8MCxiPWIrTWF0aC5pbXVsKFllLHd0KXwwLHk9eStNYXRoLmltdWwoYmUsUWUpfDAsbD0obD1sK01hdGguaW11bChiZSxQdCl8MCkrTWF0aC5pbXVsKHdlLFFlKXwwLGI9YitN''@;'; put 'put ''YXRoLmltdWwod2UsUHQpfDAseT15K01hdGguaW11bCh4ZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLHl0KXwwKStNYXRoLmltdWwoTWUsTmUpfDAsYj1iK01hdGguaW11bChNZSx5dCl8MCx5PXkrTWF0aC5pbXVsKE9lLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsX3QpfDApK01hdGgu''@;'; put 'put ''aW11bChDZSxhdCl8MCxiPWIrTWF0aC5pbXVsKENlLF90KXwwLHk9eStNYXRoLmltdWwodmUsJHQpfDAsbD0obD1sK01hdGguaW11bCh2ZSxIdCl8MCkrTWF0aC5pbXVsKHVlLCR0KXwwLGI9YitNYXRoLmltdWwodWUsSHQpfDAseT15K01hdGguaW11bChQZSxubil8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKFBlLGxuKXwwKStNYXRoLmltdWwoWmUsbm4pfDAsYj1iK01hdGguaW11bChaZSxsbil8MDt2YXIgUmE9KEwrKHk9eStNYXRoLmltdWwoRyxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsR3QpfDApK01hdGguaW11bChRLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0''@;'; put 'put ''aC5pbXVsKFEsR3QpfDApKyhsPj4+MTMpfDApKyhSYT4+PjI2KXwwLFJhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxYdCksbD0obD1NYXRoLmltdWwoTGUsUXQpKStNYXRoLmltdWwobnQsWHQpfDAsYj1NYXRoLmltdWwobnQsUXQpLHk9eStNYXRoLmltdWwodHQsc24pfDAsbD0obD1sK01h''@;'; put 'put ''dGguaW11bCh0dCxpdCl8MCkrTWF0aC5pbXVsKFVlLHNuKXwwLGI9YitNYXRoLmltdWwoVWUsaXQpfDAseT15K01hdGguaW11bChodCxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LHd0KXwwKStNYXRoLmltdWwodnQsTHQpfDAsYj1iK01hdGguaW11bCh2dCx3dCl8MCx5PXkrTWF0aC5pbXVs''@;'; put 'put ''KEtlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsUHQpfDApK01hdGguaW11bChZZSxRZSl8MCxiPWIrTWF0aC5pbXVsKFllLFB0KXwwLHk9eStNYXRoLmltdWwoYmUsTmUpfDAsbD0obD1sK01hdGguaW11bChiZSx5dCl8MCkrTWF0aC5pbXVsKHdlLE5lKXwwLGI9YitNYXRoLmltdWwod2Us''@;'; put 'put ''eXQpfDAseT15K01hdGguaW11bCh4ZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLF90KXwwKStNYXRoLmltdWwoTWUsYXQpfDAsYj1iK01hdGguaW11bChNZSxfdCl8MCx5PXkrTWF0aC5pbXVsKE9lLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsSHQpfDApK01hdGguaW11bChDZSwkdCl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKENlLEh0KXwwLHk9eStNYXRoLmltdWwodmUsbm4pfDAsbD0obD1sK01hdGguaW11bCh2ZSxsbil8MCkrTWF0aC5pbXVsKHVlLG5uKXwwLGI9YitNYXRoLmltdWwodWUsbG4pfDA7dmFyIG9pPShMKyh5PXkrTWF0aC5pbXVsKFBlLGFuKXwwKXwwKSsoKDgxOTEmKGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwoUGUsR3QpfDApK01hdGguaW11bChaZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChaZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKG9pPj4+MjYpfDAsb2kmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLHNuKSxsPShsPU1hdGguaW11bChMZSxpdCkpK01hdGgu''@;'; put 'put ''aW11bChudCxzbil8MCxiPU1hdGguaW11bChudCxpdCkseT15K01hdGguaW11bCh0dCxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LHd0KXwwKStNYXRoLmltdWwoVWUsTHQpfDAsYj1iK01hdGguaW11bChVZSx3dCl8MCx5PXkrTWF0aC5pbXVsKGh0LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''aHQsUHQpfDApK01hdGguaW11bCh2dCxRZSl8MCxiPWIrTWF0aC5pbXVsKHZ0LFB0KXwwLHk9eStNYXRoLmltdWwoS2UsTmUpfDAsbD0obD1sK01hdGguaW11bChLZSx5dCl8MCkrTWF0aC5pbXVsKFllLE5lKXwwLGI9YitNYXRoLmltdWwoWWUseXQpfDAseT15K01hdGguaW11bChiZSxhdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKGJlLF90KXwwKStNYXRoLmltdWwod2UsYXQpfDAsYj1iK01hdGguaW11bCh3ZSxfdCl8MCx5PXkrTWF0aC5pbXVsKHhlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsSHQpfDApK01hdGguaW11bChNZSwkdCl8MCxiPWIrTWF0aC5pbXVsKE1lLEh0KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwoT2Usbm4pfDAsbD0obD1sK01hdGguaW11bChPZSxsbil8MCkrTWF0aC5pbXVsKENlLG5uKXwwLGI9YitNYXRoLmltdWwoQ2UsbG4pfDA7dmFyIFVpPShMKyh5PXkrTWF0aC5pbXVsKHZlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwodmUsR3QpfDApK01h''@;'; put 'put ''dGguaW11bCh1ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh1ZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLEx0KSxsPShsPU1hdGguaW11bChMZSx3dCkpK01hdGguaW11bChudCxMdCl8MCxiPU1hdGguaW11bChu''@;'; put 'put ''dCx3dCkseT15K01hdGguaW11bCh0dCxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LFB0KXwwKStNYXRoLmltdWwoVWUsUWUpfDAsYj1iK01hdGguaW11bChVZSxQdCl8MCx5PXkrTWF0aC5pbXVsKGh0LE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoaHQseXQpfDApK01hdGguaW11bCh2dCxOZSl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKHZ0LHl0KXwwLHk9eStNYXRoLmltdWwoS2UsYXQpfDAsbD0obD1sK01hdGguaW11bChLZSxfdCl8MCkrTWF0aC5pbXVsKFllLGF0KXwwLGI9YitNYXRoLmltdWwoWWUsX3QpfDAseT15K01hdGguaW11bChiZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKGJlLEh0KXww''@;'; put 'put ''KStNYXRoLmltdWwod2UsJHQpfDAsYj1iK01hdGguaW11bCh3ZSxIdCl8MCx5PXkrTWF0aC5pbXVsKHhlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bChNZSxubil8MCxiPWIrTWF0aC5pbXVsKE1lLGxuKXwwO3ZhciBWYT0oTCsoeT15K01hdGguaW11bChPZSxh''@;'; put 'put ''bil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKE9lLEd0KXwwKStNYXRoLmltdWwoQ2UsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoQ2UsR3QpfDApKyhsPj4+MTMpfDApKyhWYT4+PjI2KXwwLFZhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxRZSksbD0obD1NYXRo''@;'; put 'put ''LmltdWwoTGUsUHQpKStNYXRoLmltdWwobnQsUWUpfDAsYj1NYXRoLmltdWwobnQsUHQpLHk9eStNYXRoLmltdWwodHQsTmUpfDAsbD0obD1sK01hdGguaW11bCh0dCx5dCl8MCkrTWF0aC5pbXVsKFVlLE5lKXwwLGI9YitNYXRoLmltdWwoVWUseXQpfDAseT15K01hdGguaW11bChodCxhdCl8''@;'; put 'put ''MCxsPShsPWwrTWF0aC5pbXVsKGh0LF90KXwwKStNYXRoLmltdWwodnQsYXQpfDAsYj1iK01hdGguaW11bCh2dCxfdCl8MCx5PXkrTWF0aC5pbXVsKEtlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsSHQpfDApK01hdGguaW11bChZZSwkdCl8MCxiPWIrTWF0aC5pbXVsKFllLEh0KXwwLHk9''@;'; put 'put ''eStNYXRoLmltdWwoYmUsbm4pfDAsbD0obD1sK01hdGguaW11bChiZSxsbil8MCkrTWF0aC5pbXVsKHdlLG5uKXwwLGI9YitNYXRoLmltdWwod2UsbG4pfDA7dmFyIHVyPShMKyh5PXkrTWF0aC5pbXVsKHhlLGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoeGUsR3QpfDApK01h''@;'; put 'put ''dGguaW11bChNZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChNZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKHVyPj4+MjYpfDAsdXImPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLE5lKSxsPShsPU1hdGguaW11bChMZSx5dCkpK01hdGguaW11bChudCxOZSl8MCxiPU1hdGguaW11bChu''@;'; put 'put ''dCx5dCkseT15K01hdGguaW11bCh0dCxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LF90KXwwKStNYXRoLmltdWwoVWUsYXQpfDAsYj1iK01hdGguaW11bChVZSxfdCl8MCx5PXkrTWF0aC5pbXVsKGh0LCR0KXwwLGw9KGw9bCtNYXRoLmltdWwoaHQsSHQpfDApK01hdGguaW11bCh2dCwkdCl8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKHZ0LEh0KXwwLHk9eStNYXRoLmltdWwoS2Usbm4pfDAsbD0obD1sK01hdGguaW11bChLZSxsbil8MCkrTWF0aC5pbXVsKFllLG5uKXwwLGI9YitNYXRoLmltdWwoWWUsbG4pfDA7dmFyIGZhPShMKyh5PXkrTWF0aC5pbXVsKGJlLGFuKXwwKXwwKSsoKDgxOTEmKGw9''@;'; put 'put ''KGw9bCtNYXRoLmltdWwoYmUsR3QpfDApK01hdGguaW11bCh3ZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bCh3ZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKGZhPj4+MjYpfDAsZmEmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLGF0KSxsPShsPU1hdGguaW11bChMZSxfdCkpK01hdGgu''@;'; put 'put ''aW11bChudCxhdCl8MCxiPU1hdGguaW11bChudCxfdCkseT15K01hdGguaW11bCh0dCwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHR0LEh0KXwwKStNYXRoLmltdWwoVWUsJHQpfDAsYj1iK01hdGguaW11bChVZSxIdCl8MCx5PXkrTWF0aC5pbXVsKGh0LG5uKXwwLGw9KGw9bCtNYXRoLmltdWwo''@;'; put 'put ''aHQsbG4pfDApK01hdGguaW11bCh2dCxubil8MCxiPWIrTWF0aC5pbXVsKHZ0LGxuKXwwO3ZhciB4aT0oTCsoeT15K01hdGguaW11bChLZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEtlLEd0KXwwKStNYXRoLmltdWwoWWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRo''@;'; put 'put ''LmltdWwoWWUsR3QpfDApKyhsPj4+MTMpfDApKyh4aT4+PjI2KXwwLHhpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSwkdCksbD0obD1NYXRoLmltdWwoTGUsSHQpKStNYXRoLmltdWwobnQsJHQpfDAsYj1NYXRoLmltdWwobnQsSHQpLHk9eStNYXRoLmltdWwodHQsbm4pfDAsbD0obD1sK01h''@;'; put 'put ''dGguaW11bCh0dCxsbil8MCkrTWF0aC5pbXVsKFVlLG5uKXwwLGI9YitNYXRoLmltdWwoVWUsbG4pfDA7dmFyIG9hPShMKyh5PXkrTWF0aC5pbXVsKGh0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwoaHQsR3QpfDApK01hdGguaW11bCh2dCxhbil8MCkpPDwxMyl8MDtMPSgo''@;'; put 'put ''Yj1iK01hdGguaW11bCh2dCxHdCl8MCkrKGw+Pj4xMyl8MCkrKG9hPj4+MjYpfDAsb2EmPTY3MTA4ODYzLHk9TWF0aC5pbXVsKExlLG5uKSxsPShsPU1hdGguaW11bChMZSxsbikpK01hdGguaW11bChudCxubil8MCxiPU1hdGguaW11bChudCxsbik7dmFyIFhpPShMKyh5PXkrTWF0aC5pbXVs''@;'; put 'put ''KHR0LGFuKXwwKXwwKSsoKDgxOTEmKGw9KGw9bCtNYXRoLmltdWwodHQsR3QpfDApK01hdGguaW11bChVZSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChVZSxHdCl8MCkrKGw+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzO3ZhciBJcj0oTCsoeT1NYXRoLmltdWwo''@;'; put 'put ''TGUsYW4pKXwwKSsoKDgxOTEmKGw9KGw9TWF0aC5pbXVsKExlLEd0KSkrTWF0aC5pbXVsKG50LGFuKXwwKSk8PDEzKXwwO3JldHVybiBMPSgoYj1NYXRoLmltdWwobnQsR3QpKSsobD4+PjEzKXwwKSsoSXI+Pj4yNil8MCxJciY9NjcxMDg4NjMsa1swXT1lYSxrWzFdPW1pLGtbMl09ZnIsa1sz''@;'; put 'put ''XT0kaSxrWzRdPUtpLGtbNV09Vmksa1s2XT1xcixrWzddPXVhLGtbOF09Rmksa1s5XT1SYSxrWzEwXT1vaSxrWzExXT1VaSxrWzEyXT1WYSxrWzEzXT11cixrWzE0XT1mYSxrWzE1XT14aSxrWzE2XT1vYSxrWzE3XT1YaSxrWzE4XT1JciwwIT09TCYmKGtbMTldPUwsdi5sZW5ndGgrKyksdn07''@;'; put 'put ''ZnVuY3Rpb24gWihSLHMsdSl7cmV0dXJuKG5ldyBVKS5tdWxwKFIscyx1KX1mdW5jdGlvbiBVKFIscyl7dGhpcy54PVIsdGhpcy55PXN9TWF0aC5pbXVsfHwoSD1OKSxmLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihzLHUpe3ZhciB2LHA9dGhpcy5sZW5ndGgrcy5sZW5ndGg7cmV0dXJuIHY9''@;'; put 'put ''MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1zLmxlbmd0aD9IKHRoaXMscyx1KTpwPDYzP04odGhpcyxzLHUpOnA8MTAyND9mdW5jdGlvbiB6KFIscyx1KXt1Lm5lZ2F0aXZlPXMubmVnYXRpdmVeUi5uZWdhdGl2ZSx1Lmxlbmd0aD1SLmxlbmd0aCtzLmxlbmd0aDtmb3IodmFyIHY9MCxwPTAsXz0w''@;'; put 'put ''O188dS5sZW5ndGgtMTtfKyspe3ZhciBrPXA7cD0wO2Zvcih2YXIgTD02NzEwODg2MyZ2LHk9TWF0aC5taW4oXyxzLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsXy1SLmxlbmd0aCsxKTtsPD15O2wrKyl7dmFyIFE9KDB8Ui53b3Jkc1tfLWxdKSooMHxzLndvcmRzW2xdKSxwZT02NzEwODg2MyZR''@;'; put 'put ''O0w9NjcxMDg4NjMmKHBlPXBlK0x8MCkscCs9KGs9KGs9aysoUS82NzEwODg2NHwwKXwwKSsocGU+Pj4yNil8MCk+Pj4yNixrJj02NzEwODg2M311LndvcmRzW19dPUwsdj1rLGs9cH1yZXR1cm4gMCE9PXY/dS53b3Jkc1tfXT12OnUubGVuZ3RoLS0sdS5zdHJpcCgpfSh0aGlzLHMsdSk6Wih0''@;'; put 'put ''aGlzLHMsdSksdn0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihzKXtmb3IodmFyIHU9bmV3IEFycmF5KHMpLHY9Zi5wcm90b3R5cGUuX2NvdW50Qml0cyhzKS0xLHA9MDtwPHM7cCsrKXVbcF09dGhpcy5yZXZCaW4ocCx2LHMpO3JldHVybiB1fSxVLnByb3RvdHlwZS5yZXZCaW49ZnVu''@;'; put 'put ''Y3Rpb24ocyx1LHYpe2lmKDA9PT1zfHxzPT09di0xKXJldHVybiBzO2Zvcih2YXIgcD0wLF89MDtfPHU7XysrKXB8PSgxJnMpPDx1LV8tMSxzPj49MTtyZXR1cm4gcH0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihzLHUsdixwLF8sayl7Zm9yKHZhciBMPTA7TDxrO0wrKylwW0xdPXVb''@;'; put 'put ''c1tMXV0sX1tMXT12W3NbTF1dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocyx1LHYscCxfLGspe3RoaXMucGVybXV0ZShrLHMsdSx2LHAsXyk7Zm9yKHZhciBMPTE7TDxfO0w8PD0xKWZvcih2YXIgeT1MPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3kpLGI9TWF0aC5zaW4oMipN''@;'; put 'put ''YXRoLlBJL3kpLHE9MDtxPF87cSs9eSlmb3IodmFyIEc9bCxRPWIscGU9MDtwZTxMO3BlKyspe3ZhciBQZT12W3ErcGVdLFplPXBbcStwZV0scWU9dltxK3BlK0xdLHZlPXBbcStwZStMXSx1ZT1HKnFlLVEqdmU7dmU9Ryp2ZStRKnFlLHZbcStwZV09UGUrKHFlPXVlKSxwW3ErcGVdPVplK3Zl''@;'; put 'put ''LHZbcStwZStMXT1QZS1xZSxwW3ErcGUrTF09WmUtdmUscGUhPT15JiYodWU9bCpHLWIqUSxRPWwqUStiKkcsRz11ZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihzLHUpe3ZhciB2PTF8TWF0aC5tYXgodSxzKSxwPTEmdixfPTA7Zm9yKHY9di8yfDA7djt2Pj4+PTEpXysr''@;'; put 'put ''O3JldHVybiAxPDxfKzErcH0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHMsdSx2KXtpZighKHY8PTEpKWZvcih2YXIgcD0wO3A8di8yO3ArKyl7dmFyIF89c1twXTtzW3BdPXNbdi1wLTFdLHNbdi1wLTFdPV8sXz11W3BdLHVbcF09LXVbdi1wLTFdLHVbdi1wLTFdPS1ffX0sVS5w''@;'; put 'put ''cm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciB2PTAscD0wO3A8dS8yO3ArKyl7dmFyIF89ODE5MipNYXRoLnJvdW5kKHNbMipwKzFdL3UpK01hdGgucm91bmQoc1syKnBdL3UpK3Y7c1twXT02NzEwODg2MyZfLHY9Xzw2NzEwODg2ND8wOl8vNjcxMDg4NjR8MH1y''@;'; put 'put ''ZXR1cm4gc30sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihzLHUsdixwKXtmb3IodmFyIF89MCxrPTA7azx1O2srKyl2WzIqa109ODE5MSYoXys9MHxzW2tdKSx2WzIqaysxXT04MTkxJihfPj4+PTEzKSxfPj4+PTEzO2ZvcihrPTIqdTtrPHA7KytrKXZba109MDtvKDA9PT1fKSxv''@;'; put 'put ''KCEoLTgxOTImXykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT1uZXcgQXJyYXkocyksdj0wO3Y8czt2KyspdVt2XT0wO3JldHVybiB1fSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcD0yKnRoaXMuZ3Vlc3NMZW4xM2Iocy5sZW5ndGgsdS5s''@;'; put 'put ''ZW5ndGgpLF89dGhpcy5tYWtlUkJUKHApLGs9dGhpcy5zdHViKHApLEw9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApLGw9bmV3IEFycmF5KHApLGI9bmV3IEFycmF5KHApLHE9bmV3IEFycmF5KHApLEc9bmV3IEFycmF5KHApLFE9di53b3JkcztRLmxlbmd0aD1wLHRoaXMuY29udmVydDEz''@;'; put 'put ''YihzLndvcmRzLHMubGVuZ3RoLEwscCksdGhpcy5jb252ZXJ0MTNiKHUud29yZHMsdS5sZW5ndGgsYixwKSx0aGlzLnRyYW5zZm9ybShMLGsseSxsLHAsXyksdGhpcy50cmFuc2Zvcm0oYixrLHEsRyxwLF8pO2Zvcih2YXIgcGU9MDtwZTxwO3BlKyspe3ZhciBQZT15W3BlXSpxW3BlXS1sW3Bl''@;'; put 'put ''XSpHW3BlXTtsW3BlXT15W3BlXSpHW3BlXStsW3BlXSpxW3BlXSx5W3BlXT1QZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoeSxsLHApLHRoaXMudHJhbnNmb3JtKHksbCxRLGsscCxfKSx0aGlzLmNvbmp1Z2F0ZShRLGsscCksdGhpcy5ub3JtYWxpemUxM2IoUSxwKSx2Lm5lZ2F0aXZlPXMubmVn''@;'; put 'put ''YXRpdmVedS5uZWdhdGl2ZSx2Lmxlbmd0aD1zLmxlbmd0aCt1Lmxlbmd0aCx2LnN0cmlwKCl9LGYucHJvdG90eXBlLm11bD1mdW5jdGlvbihzKXt2YXIgdT1uZXcgZihudWxsKTtyZXR1cm4gdS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLHRoaXMubXVsVG8ocyx1KX0s''@;'; put 'put ''Zi5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihzKXt2YXIgdT1uZXcgZihudWxsKTtyZXR1cm4gdS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcy5sZW5ndGgpLFoodGhpcyxzLHUpfSxmLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocyx0''@;'; put 'put ''aGlzKX0sZi5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMpLG8oczw2NzEwODg2NCk7Zm9yKHZhciB1PTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgcD0oMHx0aGlzLndvcmRzW3ZdKSpzLF89KDY3MTA4ODYzJnApKyg2NzEwODg2MyZ1KTt1Pj49''@;'; put 'put ''MjYsdSs9cC82NzEwODg2NHwwLHUrPV8+Pj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJl99cmV0dXJuIDAhPT11JiYodGhpcy53b3Jkc1t2XT11LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1zPzE6dGhpcy5sZW5ndGgsdGhpc30sZi5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihz''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHMpfSxmLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGYucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGYucHJvdG90eXBlLnBvdz1mdW5jdGlv''@;'; put 'put ''bihzKXt2YXIgdT1mdW5jdGlvbiBGKFIpe2Zvcih2YXIgcz1uZXcgQXJyYXkoUi5iaXRMZW5ndGgoKSksdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgcD11JTI2O3NbdV09KFIud29yZHNbdS8yNnwwXSYxPDxwKT4+PnB9cmV0dXJuIHN9KHMpO2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gbmV3IGYo''@;'; put 'put ''MSk7Zm9yKHZhciB2PXRoaXMscD0wO3A8dS5sZW5ndGgmJjA9PT11W3BdO3ArKyx2PXYuc3FyKCkpO2lmKCsrcDx1Lmxlbmd0aClmb3IodmFyIF89di5zcXIoKTtwPHUubGVuZ3RoO3ArKyxfPV8uc3FyKCkpMCE9PXVbcF0mJih2PXYubXVsKF8pKTtyZXR1cm4gdn0sZi5wcm90b3R5cGUuaXVz''@;'; put 'put ''aGxuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgXyx1PXMlMjYsdj0ocy11KS8yNixwPTY3MTA4ODYzPj4+MjYtdTw8MjYtdTtpZigwIT09dSl7dmFyIGs9MDtmb3IoXz0wO188dGhpcy5sZW5ndGg7XysrKXt2YXIgTD10aGlzLndvcmRzW19dJnA7dGhpcy53''@;'; put 'put ''b3Jkc1tfXT0oMHx0aGlzLndvcmRzW19dKS1MPDx1fGssaz1MPj4+MjYtdX1rJiYodGhpcy53b3Jkc1tfXT1rLHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXRoaXMud29yZHNbXyt2XT10aGlzLndvcmRzW19dO2ZvcihfPTA7Xzx2O18rKyl0''@;'; put 'put ''aGlzLndvcmRzW19dPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocyl7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocyx1LHYpe3ZhciBw''@;'; put 'put ''O28oIm51bWJlciI9PXR5cGVvZiBzJiZzPj0wKSxwPXU/KHUtdSUyNikvMjY6MDt2YXIgXz1zJTI2LGs9TWF0aC5taW4oKHMtXykvMjYsdGhpcy5sZW5ndGgpLEw9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLHk9djtpZihwLT1rLHA9TWF0aC5tYXgoMCxwKSx5KXtmb3IodmFyIGw9MDtsPGs7''@;'; put 'put ''bCsrKXkud29yZHNbbF09dGhpcy53b3Jkc1tsXTt5Lmxlbmd0aD1rfWlmKDAhPT1rKWlmKHRoaXMubGVuZ3RoPmspZm9yKHRoaXMubGVuZ3RoLT1rLGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl0aGlzLndvcmRzW2xdPXRoaXMud29yZHNbbCtrXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxl''@;'; put 'put ''bmd0aD0xO3ZhciBiPTA7Zm9yKGw9dGhpcy5sZW5ndGgtMTtsPj0wJiYoMCE9PWJ8fGw+PXApO2wtLSl7dmFyIHE9MHx0aGlzLndvcmRzW2xdO3RoaXMud29yZHNbbF09Yjw8MjYtX3xxPj4+XyxiPXEmTH1yZXR1cm4geSYmMCE9PWImJih5LndvcmRzW3kubGVuZ3RoKytdPWIpLDA9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocyx1LHYpfSxmLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHMp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocyl9LGYucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHMpfSxmLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocyl9LGYucHJvdG90eXBlLnVz''@;'; put 'put ''aHJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHMpfSxmLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXZ8fCEodGhpcy53b3Jkc1t2''@;'; put 'put ''XSYxPDx1KSl9LGYucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFyIHU9cyUyNix2PShzLXUpLzI2O3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''Lmxlbmd0aDw9dj90aGlzOigwIT09dSYmdisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHYsdGhpcy5sZW5ndGgpLDAhPT11JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj51PDx1KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5s''@;'; put 'put ''ZW5ndGg9MSksdGhpcy5zdHJpcCgpKX0sZi5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocyl9LGYucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHMpe3JldHVybiBvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxzPDA/dGhp''@;'; put 'put ''cy5pc3Vibigtcyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxzPyh0aGlzLndvcmRzWzBdPXMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihzKSx0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocyl9LGYucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihzKXt0aGlzLndvcmRzWzBdKz1zO2Zvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbdV0+PTY3MTA4ODY0O3UrKyl0aGlzLndvcmRzW3VdLT02NzEwODg2NCx1PT09dGhpcy5s''@;'; put 'put ''ZW5ndGgtMT90aGlzLndvcmRzW3UrMV09MTp0aGlzLndvcmRzW3UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsdSsxKSx0aGlzfSxmLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihzKXtpZihvKCJudW1iZXIiPT10eXBlb2YgcyksbyhzPDY3MTA4ODY0KSxz''@;'; put 'put ''PDApcmV0dXJuIHRoaXMuaWFkZG4oLXMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihzKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1zLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29y''@;'; put 'put ''ZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t1XTwwO3UrKyl0aGlzLndvcmRzW3VdKz02NzEwODg2NCx0aGlzLndvcmRzW3UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUu''@;'; put 'put ''YWRkbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHMpfSxmLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocyl9LGYucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGYu''@;'; put 'put ''cHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxmLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocyx1LHYpe3ZhciBfO3RoaXMuX2V4cGFuZChzLmxlbmd0aCt2KTt2YXIgayxMPTA7Zm9yKF89MDtfPHMubGVuZ3RoO18rKyl7az0oMHx0''@;'; put 'put ''aGlzLndvcmRzW18rdl0pK0w7dmFyIHk9KDB8cy53b3Jkc1tfXSkqdTtMPSgoay09NjcxMDg4NjMmeSk+PjI2KS0oeS82NzEwODg2NHwwKSx0aGlzLndvcmRzW18rdl09NjcxMDg4NjMma31mb3IoO188dGhpcy5sZW5ndGgtdjtfKyspTD0oaz0oMHx0aGlzLndvcmRzW18rdl0pK0wpPj4yNix0''@;'; put 'put ''aGlzLndvcmRzW18rdl09NjcxMDg4NjMmaztpZigwPT09TClyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihvKC0xPT09TCksTD0wLF89MDtfPHRoaXMubGVuZ3RoO18rKylMPShrPS0oMHx0aGlzLndvcmRzW19dKStMKT4+MjYsdGhpcy53b3Jkc1tfXT02NzEwODg2MyZrO3JldHVybiB0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihzLHUpe3ZhciB2LHA9dGhpcy5jbG9uZSgpLF89cyxrPTB8Xy53b3Jkc1tfLmxlbmd0aC0xXTswIT0odj0yNi10aGlzLl9jb3VudEJpdHMoaykpJiYoXz1fLnVzaGxuKHYpLHAuaXVzaGxuKHYpLGs9''@;'; put 'put ''MHxfLndvcmRzW18ubGVuZ3RoLTFdKTt2YXIgbCx5PXAubGVuZ3RoLV8ubGVuZ3RoO2lmKCJtb2QiIT09dSl7KGw9bmV3IGYobnVsbCkpLmxlbmd0aD15KzEsbC53b3Jkcz1uZXcgQXJyYXkobC5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8bC5sZW5ndGg7YisrKWwud29yZHNbYl09MH12YXIgcT1w''@;'; put 'put ''LmNsb25lKCkuX2lzaGxuc3VibXVsKF8sMSx5KTswPT09cS5uZWdhdGl2ZSYmKHA9cSxsJiYobC53b3Jkc1t5XT0xKSk7Zm9yKHZhciBHPXktMTtHPj0wO0ctLSl7dmFyIFE9NjcxMDg4NjQqKDB8cC53b3Jkc1tfLmxlbmd0aCtHXSkrKDB8cC53b3Jkc1tfLmxlbmd0aCtHLTFdKTtmb3IoUT1N''@;'; put 'put ''YXRoLm1pbihRL2t8MCw2NzEwODg2MykscC5faXNobG5zdWJtdWwoXyxRLEcpOzAhPT1wLm5lZ2F0aXZlOylRLS0scC5uZWdhdGl2ZT0wLHAuX2lzaGxuc3VibXVsKF8sMSxHKSxwLmlzWmVybygpfHwocC5uZWdhdGl2ZV49MSk7bCYmKGwud29yZHNbR109USl9cmV0dXJuIGwmJmwuc3RyaXAo''@;'; put 'put ''KSxwLnN0cmlwKCksImRpdiIhPT11JiYwIT09diYmcC5pdXNocm4odikse2RpdjpsfHxudWxsLG1vZDpwfX0sZi5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHMsdSx2KXtyZXR1cm4gbyghcy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBmKDApLG1vZDpuZXcgZigwKX06MCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKHMsdSksIm1vZCIhPT11JiYocD1rLmRpdi5uZWcoKSksImRpdiIhPT11JiYoXz1rLm1vZC5uZWcoKSx2JiYwIT09Xy5uZWdhdGl2ZSYmXy5pYWRkKHMpKSx7ZGl2OnAsbW9kOl99KTowPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmU/KGs9dGhpcy5kaXZtb2Qocy5uZWcoKSx1KSwibW9kIiE9PXUmJihwPWsuZGl2Lm5lZygpKSx7ZGl2OnAsbW9kOmsubW9kfSk6dGhpcy5uZWdhdGl2ZSZzLm5lZ2F0aXZlPyhrPXRoaXMubmVnKCkuZGl2bW9kKHMubmVnKCksdSksImRpdiIhPT11JiYo''@;'; put 'put ''Xz1rLm1vZC5uZWcoKSx2JiYwIT09Xy5uZWdhdGl2ZSYmXy5pc3ViKHMpKSx7ZGl2OmsuZGl2LG1vZDpffSk6cy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHMpPDA/e2RpdjpuZXcgZigwKSxtb2Q6dGhpc306MT09PXMubGVuZ3RoPyJkaXYiPT09dT97ZGl2OnRoaXMuZGl2bihzLndv''@;'; put 'put ''cmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT11P3tkaXY6bnVsbCxtb2Q6bmV3IGYodGhpcy5tb2RuKHMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocy53b3Jkc1swXSksbW9kOm5ldyBmKHRoaXMubW9kbihzLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocyx1KTt2YXIgcCxfLGt9LGYu''@;'; put 'put ''cHJvdG90eXBlLmRpdj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5kaXZtb2QocywiZGl2IiwhMSkuZGl2fSxmLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGl2bW9kKHMsIm1vZCIsITEpLm1vZH0sZi5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5kaXZtb2QocywibW9kIiwhMCkubW9kfSxmLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihzKXt2YXIgdT10aGlzLmRpdm1vZChzKTtpZih1Lm1vZC5pc1plcm8oKSlyZXR1cm4gdS5kaXY7dmFyIHY9MCE9PXUuZGl2Lm5lZ2F0aXZlP3UubW9kLmlzdWIocyk6dS5tb2QscD1zLnVzaHJu''@;'; put 'put ''KDEpLF89cy5hbmRsbigxKSxrPXYuY21wKHApO3JldHVybiBrPDB8fDE9PT1fJiYwPT09az91LmRpdjowIT09dS5kaXYubmVnYXRpdmU/dS5kaXYuaXN1Ym4oMSk6dS5kaXYuaWFkZG4oMSl9LGYucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2Myk7Zm9yKHZhciB1PSgx''@;'; put 'put ''PDwyNiklcyx2PTAscD10aGlzLmxlbmd0aC0xO3A+PTA7cC0tKXY9KHUqdisoMHx0aGlzLndvcmRzW3BdKSklcztyZXR1cm4gdn0sZi5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocyl7byhzPD02NzEwODg2Myk7Zm9yKHZhciB1PTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXt2YXIgcD0o''@;'; put 'put ''MHx0aGlzLndvcmRzW3ZdKSs2NzEwODg2NCp1O3RoaXMud29yZHNbdl09cC9zfDAsdT1wJXN9cmV0dXJuIHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHMpfSxmLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHMpe28o''@;'; put 'put ''MD09PXMubmVnYXRpdmUpLG8oIXMuaXNaZXJvKCkpO3ZhciB1PXRoaXMsdj1zLmNsb25lKCk7dT0wIT09dS5uZWdhdGl2ZT91LnVtb2Qocyk6dS5jbG9uZSgpO2Zvcih2YXIgcD1uZXcgZigxKSxfPW5ldyBmKDApLGs9bmV3IGYoMCksTD1uZXcgZigxKSx5PTA7dS5pc0V2ZW4oKSYmdi5pc0V2''@;'; put 'put ''ZW4oKTspdS5pdXNocm4oMSksdi5pdXNocm4oMSksKyt5O2Zvcih2YXIgbD12LmNsb25lKCksYj11LmNsb25lKCk7IXUuaXNaZXJvKCk7KXtmb3IodmFyIHE9MCxHPTE7ISh1LndvcmRzWzBdJkcpJiZxPDI2OysrcSxHPDw9MSk7aWYocT4wKWZvcih1Lml1c2hybihxKTtxLS0gPjA7KShwLmlz''@;'; put 'put ''T2RkKCl8fF8uaXNPZGQoKSkmJihwLmlhZGQobCksXy5pc3ViKGIpKSxwLml1c2hybigxKSxfLml1c2hybigxKTtmb3IodmFyIFE9MCxwZT0xOyEodi53b3Jkc1swXSZwZSkmJlE8MjY7KytRLHBlPDw9MSk7aWYoUT4wKWZvcih2Lml1c2hybihRKTtRLS0gPjA7KShrLmlzT2RkKCl8fEwuaXNP''@;'; put 'put ''ZGQoKSkmJihrLmlhZGQobCksTC5pc3ViKGIpKSxrLml1c2hybigxKSxMLml1c2hybigxKTt1LmNtcCh2KT49MD8odS5pc3ViKHYpLHAuaXN1YihrKSxfLmlzdWIoTCkpOih2LmlzdWIodSksay5pc3ViKHApLEwuaXN1YihfKSl9cmV0dXJue2E6ayxiOkwsZ2NkOnYuaXVzaGxuKHkpfX0sZi5w''@;'; put 'put ''cm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHMpe28oMD09PXMubmVnYXRpdmUpLG8oIXMuaXNaZXJvKCkpO3ZhciBxLHU9dGhpcyx2PXMuY2xvbmUoKTt1PTAhPT11Lm5lZ2F0aXZlP3UudW1vZChzKTp1LmNsb25lKCk7Zm9yKHZhciBwPW5ldyBmKDEpLF89bmV3IGYoMCksaz12LmNsb25lKCk7''@;'; put 'put ''dS5jbXBuKDEpPjAmJnYuY21wbigxKT4wOyl7Zm9yKHZhciBMPTAseT0xOyEodS53b3Jkc1swXSZ5KSYmTDwyNjsrK0wseTw8PTEpO2lmKEw+MClmb3IodS5pdXNocm4oTCk7TC0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChrKSxwLml1c2hybigxKTtmb3IodmFyIGw9MCxiPTE7ISh2LndvcmRz''@;'; put 'put ''WzBdJmIpJiZsPDI2OysrbCxiPDw9MSk7aWYobD4wKWZvcih2Lml1c2hybihsKTtsLS0gPjA7KV8uaXNPZGQoKSYmXy5pYWRkKGspLF8uaXVzaHJuKDEpO3UuY21wKHYpPj0wPyh1LmlzdWIodikscC5pc3ViKF8pKToodi5pc3ViKHUpLF8uaXN1YihwKSl9cmV0dXJuKHE9MD09PXUuY21wbigx''@;'; put 'put ''KT9wOl8pLmNtcG4oMCk8MCYmcS5pYWRkKHMpLHF9LGYucHJvdG90eXBlLmdjZD1mdW5jdGlvbihzKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBzLmFicygpO2lmKHMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHU9dGhpcy5jbG9uZSgpLHY9cy5jbG9uZSgpO3UubmVnYXRpdmU9''@;'; put 'put ''MCx2Lm5lZ2F0aXZlPTA7Zm9yKHZhciBwPTA7dS5pc0V2ZW4oKSYmdi5pc0V2ZW4oKTtwKyspdS5pdXNocm4oMSksdi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3UuaXNFdmVuKCk7KXUuaXVzaHJuKDEpO2Zvcig7di5pc0V2ZW4oKTspdi5pdXNocm4oMSk7dmFyIF89dS5jbXAodik7aWYoXzww''@;'; put 'put ''KXt2YXIgaz11O3U9dix2PWt9ZWxzZSBpZigwPT09X3x8MD09PXYuY21wbigxKSlicmVhazt1LmlzdWIodil9cmV0dXJuIHYuaXVzaGxuKHApfSxmLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmVnY2QocykuYS51bW9kKHMpfSxmLnByb3RvdHlwZS5pc0V2ZW49ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LGYucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sZi5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMud29yZHNbMF0mc30sZi5wcm90b3R5cGUuYmluY249ZnVu''@;'; put 'put ''Y3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMpO3ZhciB1PXMlMjYsdj0ocy11KS8yNixwPTE8PHU7aWYodGhpcy5sZW5ndGg8PXYpcmV0dXJuIHRoaXMuX2V4cGFuZCh2KzEpLHRoaXMud29yZHNbdl18PXAsdGhpcztmb3IodmFyIF89cCxrPXY7MCE9PV8mJms8dGhpcy5sZW5ndGg7aysr''@;'; put 'put ''KXt2YXIgTD0wfHRoaXMud29yZHNba107Xz0oTCs9Xyk+Pj4yNix0aGlzLndvcmRzW2tdPUwmPTY3MTA4ODYzfXJldHVybiAwIT09XyYmKHRoaXMud29yZHNba109Xyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxmLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYwPT09dGhpcy53b3Jkc1swXX0sZi5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihzKXt2YXIgdix1PXM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnUpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpdj0x''@;'; put 'put ''O2Vsc2V7dSYmKHM9LXMpLG8oczw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHA9MHx0aGlzLndvcmRzWzBdO3Y9cD09PXM/MDpwPHM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdjp2fSxmLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocyl7aWYoMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJjA9PT1zLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgdT10aGlzLnVjbXAocyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXU6dX0sZi5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihzKXtpZih0''@;'; put 'put ''aGlzLmxlbmd0aD5zLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxzLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHU9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPTB8dGhpcy53b3Jkc1t2XSxfPTB8cy53b3Jkc1t2XTtpZihwIT09Xyl7cDxfP3U9LTE6cD5fJiYodT0x''@;'; put 'put ''KTticmVha319cmV0dXJuIHV9LGYucHJvdG90eXBlLmd0bj1mdW5jdGlvbihzKXtyZXR1cm4gMT09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIDE9PT10aGlzLmNtcChzKX0sZi5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bXBuKHMpPj0wfSxmLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wKHMpPj0wfSxmLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocyl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHMpe3JldHVybi0xPT09dGhpcy5jbXAocyl9''@;'; put 'put ''LGYucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wbihzKTw9MH0sZi5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNtcChzKTw9MH0sZi5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHMpe3JldHVybiAwPT09dGhpcy5jbXBuKHMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5lcT1mdW5jdGlvbihzKXtyZXR1cm4gMD09PXRoaXMuY21wKHMpfSxmLnJlZD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IG1lKHMpfSxmLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRl''@;'; put 'put ''eHQiKSxvKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChzKX0sZi5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBu''@;'; put 'put ''dW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGYucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5yZWQ9cyx0aGlzfSxmLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihzKXtyZXR1cm4gbyghdGhpcy5y''@;'; put 'put ''ZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChzKX0sZi5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRo''@;'; put 'put ''aXMscyl9LGYucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5y''@;'; put 'put ''ZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3Vi''@;'; put 'put ''KHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5y''@;'; put 'put ''ZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHMpLHRoaXMucmVkLm11bCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxzKSx0aGlzLnJlZC5pbXVsKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo''@;'; put 'put ''dGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxmLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sZi5wcm90''@;'; put 'put ''b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGYucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''byh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxmLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sZi5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkJiYhcy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp''@;'; put 'put ''cy5yZWQucG93KHRoaXMscyl9O3ZhciBLPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gWChSLHMpe3RoaXMubmFtZT1SLHRoaXMucD1uZXcgZihzLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgZigxKS5pdXNobG4o''@;'; put 'put ''dGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbmUoKXtYLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gc2UoKXtY''@;'; put 'put ''LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gaGUoKXtYLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIil9ZnVuY3Rpb24gX2UoKXtYLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gbWUoUil7aWYoInN0cmluZyI9PXR5cGVvZiBSKXt2YXIgcz1mLl9wcmlt''@;'; put 'put ''ZShSKTt0aGlzLm09cy5wLHRoaXMucHJpbWU9c31lbHNlIG8oUi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1SLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBGZShSKXttZS5jYWxsKHRoaXMsUiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCks''@;'; put 'put ''dGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgZigxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJp''@;'; put 'put ''bnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1YLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHM9bmV3IGYobnVsbCk7cmV0dXJuIHMud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxzfSxYLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHMpe3ZhciB2LHU9cztkb3t0aGlzLnNwbGl0KHUsdGhpcy50bXApLHY9KHU9KHU9dGhpcy5pbXVsSyh1KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHY+dGhpcy5u''@;'; put 'put ''KTt2YXIgcD12PHRoaXMubj8tMTp1LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXA/KHUud29yZHNbMF09MCx1Lmxlbmd0aD0xKTpwPjA/dS5pc3ViKHRoaXMucCk6dm9pZCAwIT09dS5zdHJpcD91LnN0cmlwKCk6dS5fc3RyaXAoKSx1fSxYLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihzLHUp''@;'; put 'put ''e3MuaXVzaHJuKHRoaXMubiwwLHUpfSxYLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihzKXtyZXR1cm4gcy5pbXVsKHRoaXMuayl9LEkobmUsWCksbmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHMsdSl7Zm9yKHZhciB2PTQxOTQzMDMscD1NYXRoLm1pbihzLmxlbmd0aCw5KSxfPTA7Xzxw''@;'; put 'put ''O18rKyl1LndvcmRzW19dPXMud29yZHNbX107aWYodS5sZW5ndGg9cCxzLmxlbmd0aDw9OSlyZXR1cm4gcy53b3Jkc1swXT0wLHZvaWQocy5sZW5ndGg9MSk7dmFyIGs9cy53b3Jkc1s5XTtmb3IodS53b3Jkc1t1Lmxlbmd0aCsrXT1rJnYsXz0xMDtfPHMubGVuZ3RoO18rKyl7dmFyIEw9MHxz''@;'; put 'put ''LndvcmRzW19dO3Mud29yZHNbXy0xMF09KEwmdik8PDR8az4+PjIyLGs9TH1zLndvcmRzW18tMTBdPWs+Pj49MjIscy5sZW5ndGgtPTA9PT1rJiZzLmxlbmd0aD4xMD8xMDo5fSxuZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7cy53b3Jkc1tzLmxlbmd0aF09MCxzLndvcmRzW3MubGVu''@;'; put 'put ''Z3RoKzFdPTAscy5sZW5ndGgrPTI7Zm9yKHZhciB1PTAsdj0wO3Y8cy5sZW5ndGg7disrKXt2YXIgcD0wfHMud29yZHNbdl07cy53b3Jkc1t2XT02NzEwODg2MyYodSs9OTc3KnApLHU9NjQqcCsodS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXMud29yZHNbcy5sZW5ndGgtMV0mJihzLmxlbmd0''@;'; put 'put ''aC0tLDA9PT1zLndvcmRzW3MubGVuZ3RoLTFdJiZzLmxlbmd0aC0tKSxzfSxJKHNlLFgpLEkoaGUsWCksSShfZSxYKSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocyl7Zm9yKHZhciB1PTAsdj0wO3Y8cy5sZW5ndGg7disrKXt2YXIgcD0xOSooMHxzLndvcmRzW3ZdKSt1LF89NjcxMDg4''@;'; put 'put ''NjMmcDtwPj4+PTI2LHMud29yZHNbdl09Xyx1PXB9cmV0dXJuIDAhPT11JiYocy53b3Jkc1tzLmxlbmd0aCsrXT11KSxzfSxmLl9wcmltZT1mdW5jdGlvbihzKXtpZihLW3NdKXJldHVybiBLW3NdO3ZhciB1O2lmKCJrMjU2Ij09PXMpdT1uZXcgbmU7ZWxzZSBpZigicDIyNCI9PT1zKXU9bmV3''@;'; put 'put ''IHNlO2Vsc2UgaWYoInAxOTIiPT09cyl1PW5ldyBoZTtlbHNle2lmKCJwMjU1MTkiIT09cyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitzKTt1PW5ldyBfZX1yZXR1cm4gS1tzXT11LHV9LG1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihzKXtvKDA9PT1zLm5lZ2F0aXZl''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8ocy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sbWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHMsdSl7byghKHMubmVnYXRpdmV8dS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9z''@;'; put 'put ''aXRpdmVzIiksbyhzLnJlZCYmcy5yZWQ9PT11LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxtZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocykuX2ZvcmNlUmVkKHRoaXMpOnMudW1vZCh0aGlz''@;'; put 'put ''Lm0pLl9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihzKXtyZXR1cm4gcy5pc1plcm8oKT9zLmNsb25lKCk6dGhpcy5tLnN1YihzKS5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9''@;'; put 'put ''cy5hZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1Yih0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihzLHUpe3RoaXMuX3ZlcmlmeTIocyx1KTt2YXIgdj1zLmlhZGQodSk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1''@;'; put 'put ''Yih0aGlzLm0pLHZ9LG1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5zdWIodSk7cmV0dXJuIHYuY21wbigwKTwwJiZ2LmlhZGQodGhpcy5tKSx2Ll9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocyx1KXt0''@;'; put 'put ''aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5pc3ViKHUpO3JldHVybiB2LmNtcG4oMCk8MCYmdi5pYWRkKHRoaXMubSksdn0sbWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHMpLHRoaXMuaW1vZChzLnVzaGxuKHUpKX0sbWUucHJvdG90eXBlLmlt''@;'; put 'put ''dWw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihzLHUpLHRoaXMuaW1vZChzLmltdWwodSkpfSxtZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocyx1KSx0aGlzLmltb2Qocy5tdWwodSkpfSxtZS5wcm90b3R5cGUuaXNxcj1mdW5j''@;'; put 'put ''dGlvbihzKXtyZXR1cm4gdGhpcy5pbXVsKHMscy5jbG9uZSgpKX0sbWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5tdWwocyxzKX0sbWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocyl7aWYocy5pc1plcm8oKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciB1PXRoaXMubS5h''@;'; put 'put ''bmRsbigzKTtpZihvKHUlMj09MSksMz09PXUpe3ZhciB2PXRoaXMubS5hZGQobmV3IGYoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocyx2KX1mb3IodmFyIHA9dGhpcy5tLnN1Ym4oMSksXz0wOyFwLmlzWmVybygpJiYwPT09cC5hbmRsbigxKTspXysrLHAuaXVzaHJuKDEpO28oIXAu''@;'; put 'put ''aXNaZXJvKCkpO3ZhciBrPW5ldyBmKDEpLnRvUmVkKHRoaXMpLEw9ay5yZWROZWcoKSx5PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxsPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobD1uZXcgZigyKmwqbCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGwseSkuY21wKEwpOylsLnJlZElBZGQo''@;'; put 'put ''TCk7Zm9yKHZhciBiPXRoaXMucG93KGwscCkscT10aGlzLnBvdyhzLHAuYWRkbigxKS5pdXNocm4oMSkpLEc9dGhpcy5wb3cocyxwKSxRPV87MCE9PUcuY21wKGspOyl7Zm9yKHZhciBwZT1HLFBlPTA7MCE9PXBlLmNtcChrKTtQZSsrKXBlPXBlLnJlZFNxcigpO28oUGU8USk7dmFyIFplPXRo''@;'; put 'put ''aXMucG93KGIsbmV3IGYoMSkuaXVzaGxuKFEtUGUtMSkpO3E9cS5yZWRNdWwoWmUpLGI9WmUucmVkU3FyKCksRz1HLnJlZE11bChiKSxRPVBlfXJldHVybiBxfSxtZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihzKXt2YXIgdT1zLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09dS5uZWdhdGl2''@;'; put 'put ''ZT8odS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh1KS5yZWROZWcoKSk6dGhpcy5pbW9kKHUpfSxtZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHMsdSl7aWYodS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMSkudG9SZWQodGhpcyk7aWYoMD09PXUuY21wbigxKSlyZXR1cm4gcy5jbG9uZSgpO3ZhciBw''@;'; put 'put ''PW5ldyBBcnJheSgxNik7cFswXT1uZXcgZigxKS50b1JlZCh0aGlzKSxwWzFdPXM7Zm9yKHZhciBfPTI7XzxwLmxlbmd0aDtfKyspcFtfXT10aGlzLm11bChwW18tMV0scyk7dmFyIGs9cFswXSxMPTAseT0wLGw9dS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxfPXUubGVuZ3Ro''@;'; put 'put ''LTE7Xz49MDtfLS0pe2Zvcih2YXIgYj11LndvcmRzW19dLHE9bC0xO3E+PTA7cS0tKXt2YXIgRz1iPj5xJjE7ayE9PXBbMF0mJihrPXRoaXMuc3FyKGspKSwwIT09R3x8MCE9PUw/KEw8PD0xLEx8PUcsKDQ9PSsreXx8MD09PV8mJjA9PT1xKSYmKGs9dGhpcy5tdWwoayxwW0xdKSx5PTAsTD0w''@;'; put 'put ''KSk6eT0wfWw9MjZ9cmV0dXJuIGt9LG1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocyl7dmFyIHU9cy51bW9kKHRoaXMubSk7cmV0dXJuIHU9PT1zP3UuY2xvbmUoKTp1fSxtZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocyl7dmFyIHU9cy5jbG9uZSgpO3JldHVybiB1''@;'; put 'put ''LnJlZD1udWxsLHV9LGYubW9udD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IEZlKHMpfSxJKEZlLG1lKSxGZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltb2Qocy51c2hsbih0aGlzLnNoaWZ0KSl9LEZlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlv''@;'; put 'put ''bihzKXt2YXIgdT10aGlzLmltb2Qocy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHUucmVkPW51bGwsdX0sRmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocyx1KXtpZihzLmlzWmVybygpfHx1LmlzWmVybygpKXJldHVybiBzLndvcmRzWzBdPTAscy5sZW5ndGg9MSxzO3ZhciB2PXMuaW11bCh1''@;'; put 'put ''KSxwPXYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLF89di5pc3ViKHApLml1c2hybih0aGlzLnNoaWZ0KSxrPV87cmV0dXJuIF8uY21wKHRoaXMubSk+PTA/az1fLmlzdWIodGhpcy5tKTpfLmNtcG4oMCk8MCYmKGs9Xy5p''@;'; put 'put ''YWRkKHRoaXMubSkpLGsuX2ZvcmNlUmVkKHRoaXMpfSxGZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHMsdSl7aWYocy5pc1plcm8oKXx8dS5pc1plcm8oKSlyZXR1cm4gbmV3IGYoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB2PXMubXVsKHUpLHA9di5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp''@;'; put 'put ''cy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksXz12LmlzdWIocCkuaXVzaHJuKHRoaXMuc2hpZnQpLGs9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9rPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYoaz1fLmlhZGQodGhpcy5tKSksay5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LEZlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmltb2Qocy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHRlPWQubm1kKHRlKSx0aGlzKX0sMzkyMTAodGUpe2Z1bmN0aW9uIGooZCxTKXtpZighZCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''U3x8IkFzc2VydGlvbiBmYWlsZWQiKX10ZS5leHBvcnRzPWosai5lcXVhbD1mdW5jdGlvbihTLGgsbyl7aWYoUyE9aCl0aHJvdyBuZXcgRXJyb3Iob3x8IkFzc2VydGlvbiBmYWlsZWQ6ICIrUysiICE9ICIraCl9fSwyMTgzMih0ZSxqKXsidXNlIHN0cmljdCI7dmFyIGQ9ajtmdW5jdGlvbiBo''@;'; put 'put ''KEkpe3JldHVybiAxPT09SS5sZW5ndGg/IjAiK0k6SX1mdW5jdGlvbiBvKEkpe2Zvcih2YXIgZj0iIixUPTA7VDxJLmxlbmd0aDtUKyspZis9aChJW1RdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGZ9ZC50b0FycmF5PWZ1bmN0aW9uIFMoSSxmKXtpZihBcnJheS5pc0FycmF5KEkpKXJldHVybiBJ''@;'; put 'put ''LnNsaWNlKCk7aWYoIUkpcmV0dXJuW107dmFyIFQ9W107aWYoInN0cmluZyIhPXR5cGVvZiBJKXtmb3IodmFyIEE9MDtBPEkubGVuZ3RoO0ErKylUW0FdPTB8SVtBXTtyZXR1cm4gVH1pZigiaGV4Ij09PWYpZm9yKChJPUkucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0w''@;'; put 'put ''JiYoST0iMCIrSSksQT0wO0E8SS5sZW5ndGg7QSs9MilULnB1c2gocGFyc2VJbnQoSVtBXStJW0ErMV0sMTYpKTtlbHNlIGZvcihBPTA7QTxJLmxlbmd0aDtBKyspe3ZhciBNPUkuY2hhckNvZGVBdChBKSxPPU0+PjgsRD0yNTUmTTtPP1QucHVzaChPLEQpOlQucHVzaChEKX1yZXR1cm4gVH0s''@;'; put 'put ''ZC56ZXJvMj1oLGQudG9IZXg9byxkLmVuY29kZT1mdW5jdGlvbihmLFQpe3JldHVybiJoZXgiPT09VD9vKGYpOmZ9fSwxMTU0NCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImFmIix7bW9udGhzOiJKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXBy''@;'; put 'put ''aWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU29uZGFn''@;'; put 'put ''X01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTWFfRGlfV29fRG9fVnJfU2EiLnNwbGl0KCJfIiks''@;'; put 'put ''bWVyaWRpZW1QYXJzZTovdm18bm0vaSxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybi9ebm0kL2kudGVzdChvKX0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDEyP2Y/InZtIjoiVk0iOmY/Im5tIjoiTk0ifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltWYW5kYWcgb21dIExUIixuZXh0RGF5OiJbTVx4ZjRyZSBvbV0gTFQiLG5leHRXZWVrOiJkZGRk''@;'; put 'put ''IFtvbV0gTFQiLGxhc3REYXk6IltHaXN0ZXIgb21dIExUIixsYXN0V2VlazoiW0xhYXNdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib29yICVzIixwYXN0OiIlcyBnZWxlZGUiLHM6IiduIHBhYXIgc2Vrb25kZXMiLHNzOiIlZCBzZWtvbmRlcyIs''@;'; put 'put ''bToiJ24gbWludXV0IixtbToiJWQgbWludXRlIixoOiInbiB1dXIiLGhoOiIlZCB1cmUiLGQ6IiduIGRhZyIsZGQ6IiVkIGRhZSIsTToiJ24gbWFhbmQiLE1NOiIlZCBtYWFuZGUiLHk6IiduIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8''@;'; put 'put ''ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKG8pe3JldHVybiBvKygxPT09b3x8OD09PW98fG8+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw1MjE1NSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIGg9ZnVuY3Rpb24oQSl7cmV0dXJu''@;'; put 'put ''IDA9PT1BPzA6MT09PUE/MToyPT09QT8yOkElMTAwPj0zJiZBJTEwMDw9MTA/MzpBJTEwMD49MTE/NDo1fSxvPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2Mjkg''@;'; put 'put ''XHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJc''@;'; put 'put ''dTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUw''@;'; put 'put ''NjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3''@;'; put 'put ''XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2Mjki''@;'; put 'put ''LCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0''@;'; put 'put ''NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBc''@;'; put 'put ''dTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIl''@;'; put 'put ''ZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1''@;'; put 'put ''MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sST1mdW5jdGlv''@;'; put 'put ''bihBKXtyZXR1cm4gZnVuY3Rpb24oTSxPLEQsRSl7dmFyIEI9aChNKSxGPW9bQV1baChNKV07cmV0dXJuIDI9PT1CJiYoRj1GW08/MDoxXSksRi5yZXBsYWNlKC8lZC9pLE0pfX0sZj1bIlx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1''@;'; put 'put ''MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDYyN1x1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOSIsIlx1MDYyM1x1MDY0''@;'; put 'put ''OFx1MDYyYSIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJd''@;'; put 'put ''O1MuZGVmaW5lTG9jYWxlKCJhci1keiIse21vbnRoczpmLG1vbnRoc1Nob3J0OmYsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUw''@;'; put 'put ''NjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1''@;'; put 'put ''MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUw''@;'; put 'put ''NjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxc''@;'; put 'put ''dTA2NDUvLGlzUE06ZnVuY3Rpb24oQSl7cmV0dXJuIlx1MDY0NSI9PT1BfSxtZXJpZGllbTpmdW5jdGlvbihBLE0sTyl7cmV0dXJuIEE8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1''@;'; put 'put ''MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5''@;'; put 'put ''XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2''@;'; put 'put ''MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6SSgicyIpLHNzOkkoInMiKSxt''@;'; put 'put ''OkkoIm0iKSxtbTpJKCJtIiksaDpJKCJoIiksaGg6SSgiaCIpLGQ6SSgiZCIpLGRkOkkoImQiKSxNOkkoIk0iKSxNTTpJKCJNIikseTpJKCJ5IikseXk6SSgieSIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEEpe3JldHVybiBBLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRv''@;'; put 'put ''eTo0fX0pfShkKDk3NTg2KSl9LDUzNTgzKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiYXIta3ciLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1''@;'; put 'put ''XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUw''@;'; put 'put ''NjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2Mjdc''@;'; put 'put ''dTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2''@;'; put 'put ''NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1''@;'; put 'put ''MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUw''@;'; put 'put ''NjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUw''@;'; put 'put ''NjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2Mzlc''@;'; put 'put ''dTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYz''@;'; put 'put ''OVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUw''@;'; put 'put ''NjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2''@;'; put 'put ''NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3''@;'; put 'put ''XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUw''@;'; put 'put ''NjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjAsZG95OjEyfX0pfShkKDk3NTg2KSl9LDQxNjM4KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoiNiIsNzoiNyIsODoiOCIsOToiOSIs''@;'; put 'put ''MDoiMCJ9LG89ZnVuY3Rpb24oTSl7cmV0dXJuIDA9PT1NPzA6MT09PU0/MToyPT09TT8yOk0lMTAwPj0zJiZNJTEwMDw9MTA/MzpNJTEwMD49MTE/NDo1fSxJPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2''@;'; put 'put ''MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2''@;'; put 'put ''NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZc''@;'; put 'put ''dTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2''@;'; put 'put ''MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIl''@;'; put 'put ''ZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1''@;'; put 'put ''MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIz''@;'; put 'put ''XHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBc''@;'; put 'put ''dTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUw''@;'; put 'put ''NjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2''@;'; put 'put ''MzlcdTA2MjdcdTA2NDUiXX0sZj1mdW5jdGlvbihNKXtyZXR1cm4gZnVuY3Rpb24oTyxELEUsQil7dmFyIEY9byhPKSxOPUlbTV1bbyhPKV07cmV0dXJuIDI9PT1GJiYoTj1OW0Q/MDoxXSksTi5yZXBsYWNlKC8lZC9pLE8pfX0sVD1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIs''@;'; put 'put ''Ilx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0''@;'; put 'put ''YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1''@;'; put 'put ''MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO1MuZGVmaW5lTG9jYWxlKCJhci1seSIse21vbnRoczpULG1vbnRoc1Nob3J0OlQsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJc''@;'; put 'put ''dTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1''@;'; put 'put ''MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9c''@;'; put 'put ''dTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MDY0NSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sRCl7cmV0dXJuIE08MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVz''@;'; put 'put ''IixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6ZigicyIpLHNzOmYoInMiKSxtOmYoIm0iKSxtbTpmKCJtIiksaDpmKCJoIiksaGg6ZigiaCIpLGQ6ZigiZCIpLGRkOmYoImQiKSxNOmYoIk0iKSxNTTpmKCJNIikseTpmKCJ5IikseXk6ZigieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihN''@;'; put 'put ''KXtyZXR1cm4gTS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIGhbT119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KGQoOTc1ODYpKX0s''@;'; put 'put ''ODc4MjModGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJhci1tYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNf''@;'; put 'put ''XHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2''@;'; put 'put ''MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFc''@;'; put 'put ''dTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0''@;'; put 'put ''OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2''@;'; put 'put ''MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJk''@;'; put 'put ''XHUwNjJmX1x1MDYyN1x1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUw''@;'; put 'put ''NjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi''@;'; put 'put ''LEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1''@;'; put 'put ''MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEi''@;'; put 'put ''LGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2''@;'; put 'put ''MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw3NzEyKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3''@;'; put 'put ''Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sbz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6''@;'; put 'put ''IjAifTtTLmRlZmluZUxvY2FsZSgiYXItcHMiLHttb250aHM6Ilx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjM0XHUwNjI4XHUwNjI3XHUwNjM3X1x1MDYyMlx1MDYzMFx1MDYyN1x1MDYzMV9cdTA2NDZcdTA2''@;'; put 'put ''NGFcdTA2MzNcdTA2MjdcdTA2NDZfXHUwNjIzXHUwNjRhXHUwNjUxXHUwNjI3XHUwNjMxX1x1MDYyZFx1MDYzMlx1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Nl9cdTA2MmFcdTA2NDVcdTA2NTFcdTA2NDhcdTA2MzJfXHUwNjIyXHUwNjI4X1x1MDYyM1x1MDY0YVx1MDY0NFx1MDY0OFx1MDY0NF9c''@;'; put 'put ''dTA2MmFcdTA2MzRcdTA2MzFcdTA2NGEgXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjQ4XHUwNjUxXHUwNjQ0X1x1MDYyYVx1MDYzNFx1MDYzMVx1MDY0YVx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2IFx1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1MVx1MDY0NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjQzXHUwNjYyX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2MjdcdTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1MDYyM1x1MDY0YVx1''@;'; put 'put ''MDY1MVx1MDYyN1x1MDYzMV9cdTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDZfXHUwNjJhXHUwNjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjYxX1x1MDYyYVx1MDY2Ml9cdTA2NDNcdTA2''@;'; put 'put ''NjEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''M1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc''@;'; put 'put ''dTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYz''@;'; put 'put ''OVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRT''@;'; put 'put ''OiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihmKXtyZXR1cm4iXHUwNjQ1Ij09PWZ9''@;'; put 'put ''LG1lcmlkaWVtOmZ1bmN0aW9uKGYsVCxBKXtyZXR1cm4gZjwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5''@;'; put 'put ''XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQg''@;'; put 'put ''XHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKGYp''@;'; put 'put ''e3JldHVybiBmLnJlcGxhY2UoL1tcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oVCl7cmV0dXJuIG9bVF19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJdKD8hW1x1MDYyYVx1MDY0''@;'; put 'put ''M10pL2csZnVuY3Rpb24oVCl7cmV0dXJuIG9bVF19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pLnJlcGxhY2Uo''@;'; put 'put ''LywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDc4MjYxKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoi''@;'; put 'put ''XHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sbz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1''@;'; put 'put ''MDY2MCI6IjAifTtTLmRlZmluZUxvY2FsZSgiYXItc2EiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0''@;'; put 'put ''NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1''@;'; put 'put ''MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQx''@;'; put 'put ''XHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2''@;'; put 'put ''NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1''@;'; put 'put ''MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2''@;'; put 'put ''MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2''@;'; put 'put ''MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKGYp''@;'; put 'put ''e3JldHVybiJcdTA2NDUiPT09Zn0sbWVyaWRpZW06ZnVuY3Rpb24oZixULEEpe3JldHVybiBmPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMz''@;'; put 'put ''XHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZc''@;'; put 'put ''dTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFc''@;'; put 'put ''dTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0s''@;'; put 'put ''cHJlcGFyc2U6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihUKXtyZXR1cm4gb1tUXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6''@;'; put 'put ''ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDU2NzAzKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgiYXItdG4iLHttb250aHM6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUw''@;'; put 'put ''NjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhc''@;'; put 'put ''dTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYz''@;'; put 'put ''MVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1''@;'; put 'put ''MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUw''@;'; put 'put ''NjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2''@;'; put 'put ''NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIs''@;'; put 'put ''bmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExU''@;'; put 'put ''IixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1''@;'; put 'put ''MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2''@;'; put 'put ''MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQo''@;'; put 'put ''OTc1ODYpKX0sMzMxMDgodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAi''@;'; put 'put ''fSxvPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LEk9ZnVuY3Rpb24oTyl7cmV0dXJuIDA9PT1PPzA6''@;'; put 'put ''MT09PU8/MToyPT09Tz8yOk8lMTAwPj0zJiZPJTEwMDw9MTA/MzpPJTEwMD49MTE/NDo1fSxmPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUw''@;'; put 'put ''NjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2''@;'; put 'put ''NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3''@;'; put 'put ''XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUw''@;'; put 'put ''NjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2''@;'; put 'put ''MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0''@;'; put 'put ''YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2''@;'; put 'put ''NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRc''@;'; put 'put ''dTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0''@;'; put 'put ''NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sVD1mdW5jdGlvbihPKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oRCxFLEIsRil7dmFyIE49SShEKSxIPWZbT11bSShEKV07cmV0dXJuIDI9PT1OJiYoSD1IW0U/MDoxXSksSC5yZXBsYWNlKC8lZC9pLEQpfX0sQT1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYz''@;'; put 'put ''MSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1''@;'; put 'put ''MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0''@;'; put 'put ''NVx1MDYyOFx1MDYzMSJdO1MuZGVmaW5lTG9jYWxlKCJhciIse21vbnRoczpBLG1vbnRoc1Nob3J0OkEsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUw''@;'; put 'put ''NjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2''@;'; put 'put ''MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oTyl7cmV0dXJuIlx1MDY0NSI9PT1PfSxtZXJpZGllbTpmdW5jdGlvbihPLEQsRSl7cmV0dXJuIE88MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1''@;'; put 'put ''MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6VCgicyIp''@;'; put 'put ''LHNzOlQoInMiKSxtOlQoIm0iKSxtbTpUKCJtIiksaDpUKCJoIiksaGg6VCgiaCIpLGQ6VCgiZCIpLGRkOlQoImQiKSxNOlQoIk0iKSxNTTpUKCJNIikseTpUKCJ5IikseXk6VCgieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYz''@;'; put 'put ''XHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEQpe3JldHVybiBvW0RdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEQpe3JldHVybiBoW0Rd''@;'; put 'put ''fSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShkKDk3NTg2KSl9LDQ2NTA4KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1u''@;'; put 'put ''Y2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1MDoiLW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1''@;'; put 'put ''MDEzMSJ9O1MuZGVmaW5lTG9jYWxlKCJheiIse21vbnRoczoieWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieWFuX2Zldl9tYXJfYXByX21heV9peW5faXls''@;'; put 'put ''X2F2cV9zZW5fb2t0X25veV9kZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6IkJhemFyX0JhemFyIGVydFx1MDI1OXNpX1x4YzdcdTAyNTlyXHUwMTVmXHUwMjU5bmJcdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5X0NceGZjbVx1MDI1OSBheFx1''@;'; put 'put ''MDE1ZmFtXHUwMTMxX0NceGZjbVx1MDI1OV9cdTAxNWVcdTAyNTluYlx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJCYXpfQnpFX1x4YzdBeF9ceGM3XHUwMjU5cl9DQXhfQ1x4ZmNtX1x1MDE1ZVx1MDI1OW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkJ6X0JFX1x4YzdBX1x4''@;'; put 'put ''YzdcdTAyNTlfQ0FfQ1x4ZmNfXHUwMTVlXHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToiW3NhYmFoIHNhYXRdIExUIixuZXh0V2VlazoiW2dcdTAyNTlsXHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJb''@;'; put 'put ''ZFx4ZmNuXHUwMjU5bl0gTFQiLGxhc3RXZWVrOiJba2VceGU3XHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHUwMjU5dnZcdTAyNTlsIixzOiJiaXIgbmVceGU3XHUw''@;'; put 'put ''MjU5IHNhbml5XHUwMjU5IixzczoiJWQgc2FuaXlcdTAyNTkiLG06ImJpciBkXHUwMjU5cWlxXHUwMjU5IixtbToiJWQgZFx1MDI1OXFpcVx1MDI1OSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYXkiLE1NOiIlZCBheSIs''@;'; put 'put ''eToiYmlyIGlsIix5eToiJWQgaWwifSxtZXJpZGllbVBhcnNlOi9nZWNcdTAyNTl8c1x1MDI1OWhcdTAyNTlyfGdceGZjbmRceGZjenxheFx1MDE1ZmFtLyxpc1BNOmZ1bmN0aW9uKEkpe3JldHVybi9eKGdceGZjbmRceGZjenxheFx1MDE1ZmFtKSQvLnRlc3QoSSl9LG1lcmlkaWVtOmZ1bmN0''@;'; put 'put ''aW9uKEksZixUKXtyZXR1cm4gSTw0PyJnZWNcdTAyNTkiOkk8MTI/InNcdTAyNTloXHUwMjU5ciI6STwxNz8iZ1x4ZmNuZFx4ZmN6IjoiYXhcdTAxNWZhbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDEzMW5jXHUwMTMxfGluY2l8bmNpfFx4ZmNuY1x4ZmN8bmNcdTAx''@;'; put 'put ''MzF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rpb24oSSl7aWYoMD09PUkpcmV0dXJuIEkrIi1cdTAxMzFuY1x1MDEzMSI7dmFyIGY9SSUxMDtyZXR1cm4gSSsoaFtmXXx8aFtJJTEwMC1mXXx8aFtJPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYpKX0sMTY3NjYo''@;'; put 'put ''dGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oZixULEEpe3JldHVybiJtIj09PUE/VD8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzIjoiaCI9PT1B''@;'; put 'put ''P1Q/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0MyI6ZisiICIrZnVuY3Rpb24gaChmLFQpe3ZhciBBPWYuc3BsaXQoIl8iKTtyZXR1cm4gVCUxMD09MSYmVCUxMDAhPTExP0FbMF06''@;'; put 'put ''VCUxMD49MiYmVCUxMDw9NCYmKFQlMTAwPDEwfHxUJTEwMD49MjApP0FbMV06QVsyXX0oe3NzOlQ/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUw''@;'; put 'put ''NDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOlQ/Ilx1MDQ0NVx1MDQzMlx1MDQ1''@;'; put 'put ''Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1''@;'; put 'put ''MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiLGhoOlQ/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMz''@;'; put 'put ''XHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiLGRkOiJcdTA0''@;'; put 'put ''MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzN1x1MDQ1MVx1MDQzZCIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGJfXHUwNDNjXHUwNDM1XHUwNDQxXHUw''@;'; put 'put ''NDRmXHUwNDQ2XHUwNDMwXHUwNDVlIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0M2VcdTA0NWUifVtBXSwrZil9Uy5kZWZpbmVMb2NhbGUoImJlIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0''@;'; put 'put ''M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQz''@;'; put 'put ''YVx1MDQzMF9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0NWVcdTA0M2RcdTA0NGZfXHUw''@;'; put 'put ''NDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBfXHUw''@;'; put 'put ''NDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0NGJfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUw''@;'; put 'put ''NDU2XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1''@;'; put 'put ''MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1''@;'; put 'put ''MDQzYV9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDMwXHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0X1x1MDQzYlx1MDQ0ZVx1MDQ0''@;'; put 'put ''Ml9cdTA0NDFcdTA0MzBcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDU2XHUwNDNmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNh''@;'; put 'put ''XHUwNDMwXHUwNDQxXHUwNDQyX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzYiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0''@;'; put 'put ''Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDQzX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0''@;'; put 'put ''NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0''@;'; put 'put ''MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUw''@;'; put 'put ''NDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MjNcdTA0NDNcdTA0NWVdID8oPzpcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDNk''@;'; put 'put ''XHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDQzXHUwNDRlKT8gP1xdID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUw''@;'; put 'put ''NDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI''@;'; put 'put ''SDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0NTFcdTA0M2RcdTA0''@;'; put 'put ''M2RcdTA0NGYgXHUwNDVlXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixsYXN0RGF5OiJbXHUwNDIzXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA0''@;'; put 'put ''MjNdIGRkZGQgW1x1MDQ1ZV0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkIFtcdTA0NWVdIExU''@;'; put 'put ''IjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NGJdIGRkZGQgW1x1MDQ1ZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDNmXHUwNDQwXHUwNDMwXHUwNDM3ICVzIixwYXN0''@;'; put 'put ''OiIlcyBcdTA0NDJcdTA0MzBcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQ1NiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06byxtbTpvLGg6byxoaDpvLGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQz''@;'; put 'put ''ZFx1MDQ0YyIsZGQ6byxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOm8seToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTpvfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGJ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRifFx1MDQz''@;'; put 'put ''NFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24oZil7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCkkLy50ZXN0KGYpfSxtZXJpZGllbTpmdW5jdGlvbihm''@;'; put 'put ''LFQsQSl7cmV0dXJuIGY8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRiIjpmPDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGIiOmY8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUwNDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbihmLFQpe3N3aXRjaChUKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZiUxMCE9MiYmZiUxMCE9M3x8ZiUxMDA9PTEyfHxmJTEw''@;'; put 'put ''MD09MTM/ZisiLVx1MDQ0YiI6ZisiLVx1MDQ1NiI7Y2FzZSJEIjpyZXR1cm4gZisiLVx1MDQzM1x1MDQzMCI7ZGVmYXVsdDpyZXR1cm4gZn19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDI4NTY0KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgiYmciLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0''@;'; put 'put ''M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1''@;'; put 'put ''MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0NDNf''@;'; put 'put ''XHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2Fc''@;'; put 'put ''dTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9c''@;'; put 'put ''dTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDRmXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0YVx1MDQ0MFx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDQx''@;'; put 'put ''XHUwNDRhXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1''@;'; put 'put ''XHUwNDQyX1x1MDQ0MVx1MDQ0YVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9y''@;'; put 'put ''bWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMy''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlz''@;'; put 'put ''LmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMw''@;'; put 'put ''XHUwNDNiXHUwNDM4XHUwNDRmXSBkZGRkIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4ICVzIixzOiJcdTA0M2RcdTA0NGZcdTA0''@;'; put 'put ''M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1t''@;'; put 'put ''OiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIix3OiJcdTA0NDFc''@;'; put 'put ''dTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzAiLHd3OiIlZCBcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzgiLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQz''@;'; put 'put ''MCIseToiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUw''@;'; put 'put ''NDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKG8pe3ZhciBJPW8lMTAsZj1vJTEwMDtyZXR1cm4gMD09PW8/bysiLVx1MDQzNVx1MDQzMiI6MD09PWY/bysiLVx1MDQzNVx1MDQzZCI6Zj4xMCYmZjwyMD9vKyItXHUwNDQyXHUwNDM4IjoxPT09''@;'; put 'put ''ST9vKyItXHUwNDMyXHUwNDM4IjoyPT09ST9vKyItXHUwNDQwXHUwNDM4Ijo3PT09SXx8OD09PUk/bysiLVx1MDQzY1x1MDQzOCI6bysiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDk3NDYyKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtTLmRlZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX01cdTAyNWJrYWxvX1p1d1x1MDI1Ym5rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TXHUwMjVidGFuYnVydWthbG9fXHUwMjU0a3V0XHUwMjU0YnVydWth''@;'; put 'put ''bG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJaYW5fRmV3X01hcl9Bd2lfTVx1MDI1Yl9adXdfWnVsX1V0aV9TXHUwMjVidF9cdTAyNTRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050XHUwMjViblx1MDI1Ym5fVGFy''@;'; put 'put ''YXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiS2FyX050XHUwMjViX1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkiLExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0iLExMTEw6ImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUw''@;'; put 'put ''MjViclx1MDI1Yl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dERheToiW1NpbmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0V2VlazoiZGRkZCBbZG9uIGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdERheToiW0t1bnUgbFx1MDI1YnJcdTAy''@;'; put 'put ''NWJdIExUIixsYXN0V2VlazoiZGRkZCBbdFx1MDI1Ym1cdTAyNWJuZW4gbFx1MDI1YnJcdTAyNWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBrXHUwMjU0blx1MDI1NCIscGFzdDoiYSBiXHUwMjViICVzIGJcdTAyNTQiLHM6InNhbmdhIGRhbWEgZGFtYSIs''@;'; put 'put ''c3M6InNla29uZGkgJWQiLG06Im1pbml0aSBrZWxlbiIsbW06Im1pbml0aSAlZCIsaDoibFx1MDI1YnJcdTAyNWIga2VsZW4iLGhoOiJsXHUwMjViclx1MDI1YiAlZCIsZDoidGlsZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4ga2VsZW4i''@;'; put 'put ''LHl5OiJzYW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw0MzQzOCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIGg9ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1''@;'; put 'put ''MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LG89eyJcdTA5ZTciOiIxIiwiXHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5''@;'; put 'put ''ZTYiOiIwIn07Uy5kZWZpbmVMb2NhbGUoImJuLWJkIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1''@;'; put 'put ''MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlh''@;'; put 'put ''YVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDlj''@;'; put 'put ''ZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUw''@;'; put 'put ''OWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlh''@;'; put 'put ''OFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIy''@;'; put 'put ''XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJl''@;'; put 'put ''XHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFj''@;'; put 'put ''XHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUw''@;'; put 'put ''OTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5''@;'; put 'put ''ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlk''@;'; put 'put ''ZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDli''@;'; put 'put ''Ml0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5Yjhc''@;'; put 'put ''dTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5''@;'; put 'put ''YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1''@;'; put 'put ''MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9bXHUw''@;'; put 'put ''OWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKFQpe3JldHVybiBvW1RdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pfSxtZXJp''@;'; put 'put ''ZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWFkXHUwOWNiXHUwOWIwfFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDlj''@;'; put 'put ''ZFx1MDlhZlx1MDliZXxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihmLFQpe3JldHVybiAxMj09PWYmJihmPTApLCJcdTA5YjBcdTA5YmVcdTA5YTQiPT09VD9mPDQ/ZjpmKzEyOiJcdTA5YWRcdTA5Y2JcdTA5YjAiPT09VHx8Ilx1MDliOFx1MDk5NVx1MDliZVx1''@;'; put 'put ''MDliMiI9PT1UP2Y6Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1UP2Y+PTM/ZjpmKzEyOiJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09VHx8Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI9PT1UP2YrMTI6dm9pZCAwfSxtZXJp''@;'; put 'put ''ZGllbTpmdW5jdGlvbihmLFQsQSl7cmV0dXJuIGY8ND8iXHUwOWIwXHUwOWJlXHUwOWE0IjpmPDY/Ilx1MDlhZFx1MDljYlx1MDliMCI6ZjwxMj8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjpmPDE1PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOmY8MTg/Ilx1MDlhY1x1MDli''@;'; put 'put ''Zlx1MDk5NVx1MDliZVx1MDliMiI6ZjwyMD8iXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGQoOTc1ODYpKX0sMTcxMDcodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBoPXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxvPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUw''@;'; put 'put ''OWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O1MuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJm''@;'; put 'put ''X1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUw''@;'; put 'put ''OTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1''@;'; put 'put ''MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2Rc''@;'; put 'put ''dTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5''@;'; put 'put ''Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5''@;'; put 'put ''YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUw''@;'; put 'put ''OWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJm''@;'; put 'put ''X1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUw''@;'; put 'put ''OWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDli''@;'; put 'put ''MF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwg''@;'; put 'put ''QSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVc''@;'; put 'put ''dTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1''@;'; put 'put ''MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixt''@;'; put 'put ''OiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlm''@;'; put 'put ''XHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUw''@;'; put 'put ''OWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihUKXtyZXR1cm4gb1tUXX0pfSxw''@;'; put 'put ''b3N0Zm9ybWF0OmZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oVCl7cmV0dXJuIGhbVF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUw''@;'; put 'put ''OWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGYsVCl7cmV0dXJuIDEyPT09ZiYmKGY9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1UJiZmPj00fHwiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PVQm''@;'; put 'put ''JmY8NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1UP2YrMTI6Zn0sbWVyaWRpZW06ZnVuY3Rpb24oZixULEEpe3JldHVybiBmPDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6ZjwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjpmPDE3PyJcdTA5YTZcdTA5YzFcdTA5YWFc''@;'; put 'put ''dTA5YzFcdTA5YjAiOmY8MjA/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDkwMDQodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXsxOiJcdTBmMjEiLDI6''@;'; put 'put ''Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJcdTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjciLDg6Ilx1MGYyOCIsOToiXHUwZjI5IiwwOiJcdTBmMjAifSxvPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6IjIiLCJcdTBmMjMiOiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUi''@;'; put 'put ''LCJcdTBmMjYiOiI2IiwiXHUwZjI3IjoiNyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoiMCJ9O1MuZGVmaW5lTG9jYWxlKCJibyIse21vbnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1''@;'; put 'put ''MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUw''@;'; put 'put ''ZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUw''@;'; put 'put ''ZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY2Mlx1MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBm''@;'; put 'put ''NzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1''@;'; put 'put ''NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFfXHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZc''@;'; put 'put ''dTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZiM1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNcdTBmMGI2X1x1MGY1Zlx1MGZiM1x1MGYwYjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZi''@;'; put 'put ''M1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwZjVmXHUwZmIzXHUwZjBiXGR7MSwyfSkvLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1''@;'; put 'put ''MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1''@;'; put 'put ''MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1''@;'; put 'put ''MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0''@;'; put 'put ''Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBm''@;'; put 'put ''NTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZcdTBmYjNfXHUwZjU4XHUwZjcyXHUwZjQyX1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUwZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3''@;'; put 'put ''YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJcdTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUwZjY2XHUwZjQ0XHUwZjBiXHUwZjQ5XHUwZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJc''@;'; put 'put ''dTBmMGJcdTBmNjJcdTBmOTdcdTBmN2FcdTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1MGYwYlx1MGY2Nlx1MGY0NF0gTFQiLGxhc3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUw''@;'; put 'put ''XHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZjYzXHUwZjBiIixwYXN0OiIlcyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVk''@;'; put 'put ''IFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJc''@;'; put 'put ''dTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3''@;'; put 'put ''Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixNTToiJWQgXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBm''@;'; put 'put ''NjNcdTBmN2MifSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUwZjIzXHUwZjI0XHUwZjI1XHUwZjI2XHUwZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKFQpe3JldHVybiBvW1RdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZil7''@;'; put 'put ''cmV0dXJuIGYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1''@;'; put 'put ''MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8XHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZixUKXtyZXR1cm4gMTI9PT1mJiYoZj0wKSwiXHUwZjU4XHUwZjVh''@;'; put 'put ''XHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIj09PVQmJmY+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiPT09VCYmZjw1fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09PVQ/ZisxMjpmfSxtZXJpZGllbTpmdW5jdGlv''@;'; put 'put ''bihmLFQsQSl7cmV0dXJuIGY8ND8iXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjpmPDEwPyJcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZcdTBmMGJcdTBmNDBcdTBmNjYiOmY8MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI6ZjwyMD8i''@;'; put 'put ''XHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGQoOTc1ODYpKX0sNTA5MjcodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u''@;'; put 'put ''IGgoSCx6LFope3JldHVybiBIKyIgIitmdW5jdGlvbiBmKEgseil7cmV0dXJuIDI9PT16P2Z1bmN0aW9uIFQoSCl7dmFyIHo9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09eltILmNoYXJBdCgwKV0/SDp6W0guY2hhckF0KDApXStILnN1YnN0cmluZygxKX0oSCk6SH0oe21t''@;'; put 'put ''OiJtdW51dGVubiIsTU06Im1peiIsZGQ6ImRldmV6aCJ9W1pdLEgpfWZ1bmN0aW9uIEkoSCl7cmV0dXJuIEg+OT9JKEglMTApOkh9dmFyIEE9Wy9eZ2VuL2ksL15jW1x1MDJiY1wnXWh3ZS9pLC9ebWV1L2ksL15lYnIvaSwvXm1hZS9pLC9eKG1lenxldmUpL2ksL15nb3UvaSwvXmVvcy9pLC9e''@;'; put 'put ''Z3dlL2ksL15oZXIvaSwvXmR1L2ksL15rZXIvaV0sTT0vXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8''@;'; put 'put ''Z3dlfGhlcnxkdXxrZXIpL2ksRj1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwvXkd3L2ksL15TYS9pXTtTLmRlZmluZUxvY2FsZSgiYnIiLHttb250aHM6IkdlbnZlcl9DXHUwMmJjaHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9F''@;'; put 'put ''b3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikdlbl9DXHUwMmJjaHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjXHUwMmJjaGVyX1lhb3VfR3dl''@;'; put 'put ''bmVyX1NhZG9ybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0x1X01lX01lcl9ZYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlOkYsZnVsbFdlZWtkYXlzUGFyc2U6Wy9ec3Vs''@;'; put 'put ''L2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1tcdTAyYmNcJ11oZXIvaSwvXnlhb3UvaSwvXmd3ZW5lci9pLC9ec2Fkb3JuL2ldLHNob3J0V2Vla2RheXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1L2ksL15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2RheXNQ''@;'; put 'put ''YXJzZTpGLG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLG1vbnRoc1Nob3J0U3Ry''@;'; put 'put ''aWN0UmVnZXg6L14oZ2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLG1vbnRoc1BhcnNlOkEsbG9uZ01vbnRoc1BhcnNlOkEsc2hvcnRNb250aHNQYXJzZTpBLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi''@;'; put 'put ''LEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmNcdTAy''@;'; put 'put ''YmNob2F6aCBkYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtkYV0gTFQiLGxhc3REYXk6IltEZWNcdTAyYmNoIGRhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc2V0IGRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYS1iZW5uICVzIixwYXN0OiIlcyBcdTAyYmN6byIs''@;'; put 'put ''czoidW4gbmViZXVkIHNlZ29uZGVubm9ceGY5IixzczoiJWQgZWlsZW5uIixtOiJ1ciB2dW51dGVubiIsbW06aCxoOiJ1biBldXIiLGhoOiIlZCBldXIiLGQ6InVuIGRldmV6aCIsZGQ6aCxNOiJ1ciBtaXoiLE1NOmgseToidXIgYmxvYXoiLHl5OmZ1bmN0aW9uIG8oSCl7c3dpdGNoKEkoSCkp''@;'; put 'put ''e2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIEgrIiBibG9heiI7ZGVmYXVsdDpyZXR1cm4gSCsiIHZsb2F6In19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFceGYxfHZldCkvLG9yZGluYWw6ZnVuY3Rpb24oSCl7cmV0dXJuIEgrKDE9PT1IPyJh''@;'; put 'put ''XHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5tLnxnLm0uLyxpc1BNOmZ1bmN0aW9uKEgpe3JldHVybiJnLm0uIj09PUh9LG1lcmlkaWVtOmZ1bmN0aW9uKEgseixaKXtyZXR1cm4gSDwxMj8iYS5tLiI6ImcubS4ifX0pfShkKDk3NTg2KSl9LDg3NzY4''@;'; put 'put ''KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGYsVCxBKXt2YXIgTT1mKyIgIjtzd2l0Y2goQSl7Y2FzZSJzcyI6cmV0dXJuIE0rKDE9PT1mPyJzZWt1bmRhIjoyPT09Znx8Mz09PWZ8fDQ9PT1mPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibW0iOnJldHVy''@;'; put 'put ''biBNKygxPT09Zj8ibWludXRhIjoyPT09Znx8Mz09PWZ8fDQ9PT1mPyJtaW51dGUiOiJtaW51dGEiKTtjYXNlImgiOnJldHVybiJqZWRhbiBzYXQiO2Nhc2UiaGgiOnJldHVybiBNKygxPT09Zj8ic2F0IjoyPT09Znx8Mz09PWZ8fDQ9PT1mPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVy''@;'; put 'put ''biBNKygxPT09Zj8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBNKygxPT09Zj8ibWplc2VjIjoyPT09Znx8Mz09PWZ8fDQ9PT1mPyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBNKygxPT09Zj8iZ29kaW5hIjoyPT09Znx8Mz09PWZ8fDQ9PT1mPyJnb2RpbmUiOiJn''@;'; put 'put ''b2RpbmEiKX19Uy5kZWZpbmVMb2NhbGUoImJzIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIu''@;'; put 'put ''X21hai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJI''@;'; put 'put ''Om1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVu''@;'; put 'put ''Y3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJl''@;'; put 'put ''dHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gZGRkZCBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxl''@;'; put 'put ''XSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczpvLG06''@;'; put 'put ''ZnVuY3Rpb24gaChmLFQsQSxNKXtpZigibSI9PT1BKXJldHVybiBUPyJqZWRuYSBtaW51dGEiOk0/ImplZG51IG1pbnV0dSI6ImplZG5lIG1pbnV0ZSJ9LG1tOm8saDpvLGhoOm8sZDoiZGFuIixkZDpvLE06Im1qZXNlYyIsTU06byx5OiJnb2RpbnUiLHl5Om99LGRheU9mTW9udGhPcmRpbmFs''@;'; put 'put ''UGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oZCg5NzU4NikpfSw1NjI5MSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImNhIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5lcl9mZWJyZXJfbWFyXHhl''@;'; put 'put ''N19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUiLnNwbGl0KCJfIiksZm9ybWF0OiJkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyXHhlN19kJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZCdhZ29zdF9kZSBzZXRl''@;'; put 'put ''bWJyZV9kJ29jdHVicmVfZGUgbm92ZW1icmVfZGUgZGVzZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLiIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46ImRnX2RsX2R0X2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1N''@;'; put 'put ''TSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F2dWkgYSAi''@;'; put 'put ''KygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbZGVtXHhlMCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthICIrKDEhPT10aGlzLmhv''@;'; put 'put ''dXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthaGlyIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzc2F0IGEgIisoMSE9PXRoaXMuaG91cnMo''@;'; put 'put ''KT8ibGVzIjoibGEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVucyBzZWdvbnMiLHNzOiIlZCBzZWdvbnMiLG06InVuIG1pbnV0IixtbToiJWQgbWludXRzIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhv''@;'; put 'put ''cmVzIixkOiJ1biBkaWEiLGRkOiIlZCBkaWVzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNvcyIseToidW4gYW55Iix5eToiJWQgYW55cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihvLEkpe3ZhciBmPTE9PT1vPyJyIjoy''@;'; put 'put ''PT09bz8ibiI6Mz09PW8/InIiOjQ9PT1vPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PUl8fCJXIj09PUkpJiYoZj0iYSIpLG8rZn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sODUzMDEodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXtzdGFuZGFsb25l''@;'; put 'put ''OiJsZWRlbl9ceGZhbm9yX2JcdTAxNTllemVuX2R1YmVuX2t2XHUwMTFidGVuX1x1MDEwZGVydmVuX1x1MDEwZGVydmVuZWNfc3JwZW5felx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqZW5fbGlzdG9wYWRfcHJvc2luZWMiLnNwbGl0KCJfIiksZm9ybWF0OiJsZWRuYV9ceGZhbm9yYV9iXHUw''@;'; put 'put ''MTU5ZXpuYV9kdWJuYV9rdlx1MDExYnRuYV9cdTAxMGRlcnZuYV9cdTAxMGRlcnZlbmNlX3NycG5hX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkam5hX2xpc3RvcGFkdV9wcm9zaW5jZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovREQ/W28uXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NL30sbz0i''@;'; put 'put ''bGVkX1x4ZmFub19iXHUwMTU5ZV9kdWJfa3ZcdTAxMWJfXHUwMTBkdm5fXHUwMTBkdmNfc3JwX3pceGUxXHUwMTU5X1x1MDE1OVx4ZWRqX2xpc19wcm8iLnNwbGl0KCJfIiksST1bL15sZWQvaSwvXlx4ZmFuby9pLC9eYlx1MDE1OWUvaSwvXmR1Yi9pLC9ea3ZcdTAxMWIvaSwvXihcdTAxMGR2''@;'; put 'put ''bnxcdTAxMGRlcnZlbiR8XHUwMTBkZXJ2bmEpL2ksL14oXHUwMTBkdmN8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlKS9pLC9ec3JwL2ksL156XHhlMVx1MDE1OS9pLC9eXHUwMTU5XHhlZGovaSwvXmxpcy9pLC9ecHJvL2ldLGY9L14obGVkZW58XHhmYW5vcnxiXHUwMTU5ZXplbnxkdWJl''@;'; put 'put ''bnxrdlx1MDExYnRlbnxcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUw''@;'; put 'put ''MTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2k7ZnVuY3Rpb24gVChPKXtyZXR1cm4gTz4xJiZPPDUmJjEhPX5+KE8vMTApfWZ1bmN0aW9uIEEoTyxELEUsQil7dmFyIEY9TysiICI7c3dpdGNoKEUpe2Nhc2UicyI6cmV0dXJuIER8fEI/InBceGUxciBzZWt1bmQi''@;'; put 'put ''OiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gRHx8Qj9GKyhUKE8pPyJzZWt1bmR5Ijoic2VrdW5kIik6Risic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBEPyJtaW51dGEiOkI/Im1pbnV0dSI6Im1pbnV0b3UiO2Nhc2UibW0iOnJldHVybiBEfHxCP0YrKFQoTyk/Im1pbnV0''@;'; put 'put ''eSI6Im1pbnV0Iik6RisibWludXRhbWkiO2Nhc2UiaCI6cmV0dXJuIEQ/ImhvZGluYSI6Qj8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIER8fEI/RisoVChPKT8iaG9kaW55IjoiaG9kaW4iKTpGKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gRHx8Qj8iZGVuIjoiZG5lbSI7''@;'; put 'put ''Y2FzZSJkZCI6cmV0dXJuIER8fEI/RisoVChPKT8iZG55IjoiZG5ceGVkIik6RisiZG55IjtjYXNlIk0iOnJldHVybiBEfHxCPyJtXHUwMTFic1x4ZWRjIjoibVx1MDExYnNceGVkY2VtIjtjYXNlIk1NIjpyZXR1cm4gRHx8Qj9GKyhUKE8pPyJtXHUwMTFic1x4ZWRjZSI6Im1cdTAxMWJzXHhl''@;'; put 'put ''ZGNcdTAxNmYiKTpGKyJtXHUwMTFic1x4ZWRjaSI7Y2FzZSJ5IjpyZXR1cm4gRHx8Qj8icm9rIjoicm9rZW0iO2Nhc2UieXkiOnJldHVybiBEfHxCP0YrKFQoTyk/InJva3kiOiJsZXQiKTpGKyJsZXR5In19Uy5kZWZpbmVMb2NhbGUoImNzIix7bW9udGhzOmgsbW9udGhzU2hvcnQ6byxtb250''@;'; put 'put ''aHNSZWdleDpmLG1vbnRoc1Nob3J0UmVnZXg6Zixtb250aHNTdHJpY3RSZWdleDovXihsZWRlbnxsZWRuYXxceGZhbm9yYXxceGZhbm9yfGJcdTAxNTllemVufGJcdTAxNTllem5hfGR1YmVufGR1Ym5hfGt2XHUwMTFidGVufGt2XHUwMTFidG5hfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5j''@;'; put 'put ''ZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnxzcnBuYXx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxcdTAxNTlceGVkam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGxlZHxceGZhbm98Ylx1MDE1''@;'; put 'put ''OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pLG1vbnRoc1BhcnNlOkksbG9uZ01vbnRoc1BhcnNlOkksc2hvcnRNb250aHNQYXJzZTpJLHdlZWtkYXlzOiJuZWRcdTAxMWJsZV9wb25kXHUwMTFibFx4ZWRfXHhm''@;'; put 'put ''YXRlclx4ZmRfc3RcdTAxNTllZGFfXHUwMTBkdHZydGVrX3BceGUxdGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3Nv''@;'; put 'put ''Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIixsOiJELiBNLiBZWVlZIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltkbmVzIHZdIExUIixuZXh0RGF5OiJbelx4ZWR0cmEgdl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFt2XSBMVCI7Y2Fz''@;'; put 'put ''ZSAzOnJldHVybiJbdmUgc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZlIFx1MDEwZHR2cnRlayB2XSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwXHhlMXRlayB2XSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgdl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmEgdl0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsb3UgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bFx4ZTldIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bG91IHN0XHUwMTU5ZWR1IHZd''@;'; put 'put ''IExUIjtjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWxceGZkXSBkZGRkIFt2XSBMVCI7Y2FzZSA2OnJldHVybiJbbWludWxvdSBzb2JvdHUgdl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InBcdTAxNTllZCAlcyIsczpBLHNzOkEsbTpB''@;'; put 'put ''LG1tOkEsaDpBLGhoOkEsZDpBLGRkOkEsTTpBLE1NOkEseTpBLHl5OkF9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw2NjY2Nih0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7''@;'; put 'put ''Uy5kZWZpbmVMb2NhbGUoImN2Iix7bW9udGhzOiJcdTA0M2FcdTA0ZDFcdTA0NDBcdTA0M2JcdTA0MzBcdTA0NDdfXHUwNDNkXHUwNDMwXHUwNDQwXHUwNGQxXHUwNDQxX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRk''@;'; put 'put ''N1x1MDQ0MFx1MDQ0Mlx1MDQzY1x1MDQzNV9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwXHUwNDNiXHUwNDMwX1x1MDQzMFx1MDQzMlx1MDRkMVx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQ0Mlx1''@;'; put 'put ''MDQzMFx1MDQzMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDNhXHUwNGQxXHUwNDQwX1x1MDQzZFx1MDQzMFx1MDQ0MF9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBfXHUwNDQzXHUwNDQyXHUw''@;'; put 'put ''NGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MF9cdTA0MzBcdTA0MzJcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQzZFx1''@;'; put 'put ''MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDJcdTA0NDNcdTA0M2RcdTA0NDJcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZVx1MDQzZFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0M2Fc''@;'; put 'put ''dTA0ZDdcdTA0YWJcdTA0M2RcdTA0MzVcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRkXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzY1x1MDQzMFx1MDQ0Mlx1MDQzYVx1MDQ0M1x1MDQzZCIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NGJcdTA0NDBfXHUwNDQyXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYl9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiX1x1MDQ0ZFx1MDQ0MFx1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''Ilx1MDQzMlx1MDQ0MF9cdTA0NDJcdTA0M2RfXHUwNDRiXHUwNDQyX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0YWJfXHUwNDRkXHUwNDQwX1x1MDQ0OFx1MDQzYyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoi''@;'; put 'put ''WVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10iLExMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0''@;'; put 'put ''NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0g''@;'; put 'put ''RFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxZlx1MDQzMFx1MDQ0Zlx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHREYXk6IltcdTA0MmJcdTA0NDBcdTA0MzBcdTA0''@;'; put 'put ''M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0RGF5OiJbXHUwNGQ2XHUwNDNkXHUwNDM1XHUwNDQwXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dFdlZWs6IltcdTA0YWFcdTA0MzhcdTA0''@;'; put 'put ''NDJcdTA0MzVcdTA0NDFdIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3RXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDQyXHUwNDNkXHUwNGQ3XSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVd''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG8pe3JldHVybiBvKygvXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyJC9pLmV4ZWMobyk/Ilx1MDQ0MFx1MDQzNVx1MDQzZCI6L1x1MDRhYlx1MDQ0M1x1MDQzYiQvaS5leGVjKG8pPyJcdTA0NDJcdTA0''@;'; put 'put ''MzBcdTA0M2QiOiJcdTA0NDBcdTA0MzBcdTA0M2QiKX0scGFzdDoiJXMgXHUwNDNhXHUwNDMwXHUwNDRmXHUwNDNiXHUwNDNiXHUwNDMwIixzOiJcdTA0M2ZcdTA0ZDdcdTA0NDAtXHUwNDM4XHUwNDNhIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsc3M6IiVk''@;'; put 'put ''IFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsbToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0''@;'; put 'put ''MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsZDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0M1x1''@;'; put 'put ''MDQzOVx1MDRkMVx1MDQ0NSIsTU06IiVkIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIseToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDRhYlx1MDQ0M1x1MDQzYiIseXk6IiVkIFx1MDRhYlx1MDQ0M1x1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tXHUwNDNjXHUwNGQ3''@;'; put 'put ''XHUwNDQ4LyxvcmRpbmFsOiIlZC1cdTA0M2NcdTA0ZDdcdTA0NDgiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDU1MTYzKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiY3kiLHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhf''@;'; put 'put ''RWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlk''@;'; put 'put ''ZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9N''@;'; put 'put ''ZV9JYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGVkZGl3IGFtXSBMVCIsbmV4dERheToiW1lmb3J5IGFtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FtXSBMVCIsbGFzdERheToiW0Rkb2UgYW1dIExUIixsYXN0V2VlazoiZGRkZCBbZGl3ZXRoYWYgYW1dIExUIixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOiJtZXduICVzIixwYXN0OiIlcyB5biBceGY0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixN''@;'; put 'put ''TToiJWQgbWlzIix5OiJibHd5ZGR5biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlvbihvKXt2YXIgZj0iIjtyZXR1cm4gbz4yMD9mPTQwPT09b3x8NTA9PT1vfHw2MD09PW98''@;'; put 'put ''fDgwPT09b3x8MTAwPT09bz8iZmVkIjoiYWluIjpvPjAmJihmPVsiIiwiYWYiLCJpbCIsInlkZCIsInlkZCIsImVkIiwiZWQiLCJlZCIsImZlZCIsImZlZCIsImZlZCIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImZlZCJdW29dKSxvK2Z9LHdlZWs6''@;'; put 'put ''e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDg3MzYwKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25v''@;'; put 'put ''dmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJk''@;'; put 'put ''YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjhuX21hbl90aXJfb25zX3Rvcl9mcmVfbFx4ZjhyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0g''@;'; put 'put ''TFQiLG5leHRXZWVrOiJwXHhlNSBkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6IltpXSBkZGRkW3Mga2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJmXHhlNSBzZWt1''@;'; put 'put ''bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9''@;'; put 'put ''LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw0MzI0OCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaChJLGYsVCxBKXt2YXIgTT17bTpbImVpbmUgTWludXRl''@;'; put 'put ''IiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbSSsiIFRhZ2UiLEkrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxN''@;'; put 'put ''TTpbSSsiIE1vbmF0ZSIsSSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W0krIiBKYWhyZSIsSSsiIEphaHJlbiJdfTtyZXR1cm4gZj9NW1RdWzBdOk1bVF1bMV19Uy5kZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKXHhlNG5uZXJfRmVicnVhcl9NXHhl''@;'; put 'put ''NHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKXHhlNG4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1''@;'; put 'put ''bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06aCxtbToiJWQgTWludXRlbiIsaCxoaDoiJWQg''@;'; put 'put ''U3R1bmRlbiIsZDpoLGRkOmgsdzpoLHd3OiIlZCBXb2NoZW4iLE06aCxNTTpoLHk6aCx5eTpofSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sODMyMjIodGUsaixkKXshZnVuY3Rpb24oUyl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGgoSSxmLFQsQSl7dmFyIE09e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0krIiBUYWdlIixJKyIgVGFnZW4iXSx3OlsiZWlu''@;'; put 'put ''ZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W0krIiBNb25hdGUiLEkrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltJKyIgSmFocmUiLEkrIiBKYWhyZW4iXX07cmV0dXJuIGY/TVtUXVswXTpNW1RdWzFd''@;'; put 'put ''fVMuZGVmaW5lTG9jYWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXBy''@;'; put 'put ''Ll9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExM''@;'; put 'put ''OiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoi''@;'; put 'put ''JWQgU2VrdW5kZW4iLG06aCxtbToiJWQgTWludXRlbiIsaCxoaDoiJWQgU3R1bmRlbiIsZDpoLGRkOmgsdzpoLHd3OiIlZCBXb2NoZW4iLE06aCxNTTpoLHk6aCx5eTpofSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9''@;'; put 'put ''fSl9KGQoOTc1ODYpKX0sNDU5MzIodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGgoSSxmLFQsQSl7dmFyIE09e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWlu''@;'; put 'put ''ZW0gVGFnIl0sZGQ6W0krIiBUYWdlIixJKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W0krIiBNb25hdGUiLEkrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltJKyIgSmFo''@;'; put 'put ''cmUiLEkrIiBKYWhyZW4iXX07cmV0dXJuIGY/TVtUXVswXTpNW1RdWzFdfVMuZGVmaW5lTG9jYWxlKCJkZSIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFn''@;'; put 'put ''X0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVF''@;'; put 'put ''bHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJp''@;'; put 'put ''biAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOmgsbW06IiVkIE1pbnV0ZW4iLGgsaGg6IiVkIFN0dW5kZW4iLGQ6aCxkZDpoLHc6aCx3dzoiJWQgV29jaGVuIixNOmgsTU06aCx5OmgseXk6aH0sZGF5T2ZNb250aE9yZGluYWxQYXJz''@;'; put 'put ''ZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDY0MDUodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPVsiXHUwNzk2XHUwN2FjXHUwNzgyXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzhh''@;'; put 'put ''XHUwN2FjXHUwNzg0XHUwN2IwXHUwNzgzXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzg5XHUwN2E3XHUwNzgzXHUwN2E4XHUwNzk3XHUwN2FhIiwiXHUwNzg3XHUwN2FkXHUwNzk1XHUwN2IwXHUwNzgzXHUwN2E5XHUwNzhkXHUwN2FhIiwiXHUwNzg5XHUwN2FkIiwiXHUw''@;'; put 'put ''Nzk2XHUwN2FiXHUwNzgyXHUwN2IwIiwiXHUwNzk2XHUwN2FhXHUwNzhkXHUwN2E2XHUwNzg3XHUwN2E4IiwiXHUwNzg3XHUwN2FmXHUwNzhlXHUwN2E2XHUwNzkwXHUwN2IwXHUwNzkzXHUwN2FhIiwiXHUwNzkwXHUwN2FjXHUwNzk1XHUwN2IwXHUwNzkzXHUwN2FjXHUwNzg5XHUwN2IwXHUw''@;'; put 'put ''Nzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzg3XHUwN2FlXHUwNzg2XHUwN2IwXHUwNzkzXHUwN2FmXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzgyXHUwN2FlXHUwNzg4XHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzkxXHUwN2E4XHUw''@;'; put 'put ''NzkwXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIl0sbz1bIlx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOFx1MDc4N1x1MDdiMFx1MDc4Y1x1MDdhNiIsIlx1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNiIsIlx1MDc4N1x1MDdhNlx1MDc4Mlx1MDdiMFx1MDc4ZVx1MDdh''@;'; put 'put ''N1x1MDc4M1x1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN1x1MDc5MFx1MDdiMFx1MDc4YVx1MDdhNlx1MDc4Y1x1MDdhOCIsIlx1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdhYSIsIlx1MDc4MFx1MDdhZVx1MDc4Mlx1''@;'; put 'put ''MDdhOFx1MDc4MFx1MDdhOFx1MDc4M1x1MDdhYSJdO1MuZGVmaW5lTG9jYWxlKCJkdiIse21vbnRoczpoLG1vbnRoc1Nob3J0Omgsd2Vla2RheXM6byx3ZWVrZGF5c1Nob3J0Om8sd2Vla2RheXNNaW46Ilx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOF9cdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTZf''@;'; put 'put ''XHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwX1x1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNl9cdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdfXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhX1x1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNzg5XHUwNzg2fFx1MDc4OVx1MDc4YS8saXNQTTpmdW5jdGlvbihmKXtyZXR1cm4i''@;'; put 'put ''XHUwNzg5XHUwNzhhIj09PWZ9LG1lcmlkaWVtOmZ1bmN0aW9uKGYsVCxBKXtyZXR1cm4gZjwxMj8iXHUwNzg5XHUwNzg2IjoiXHUwNzg5XHUwNzhhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA3ODlcdTA3YThcdTA3ODdcdTA3YTZcdTA3OGJcdTA3YWFdIExUIixuZXh0RGF5OiJbXHUwNzg5''@;'; put 'put ''XHUwN2E3XHUwNzhiXHUwN2E2XHUwNzg5XHUwN2E3XSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltcdTA3ODdcdTA3YThcdTA3ODdcdTA3YjBcdTA3OTRcdTA3YWNdIExUIixsYXN0V2VlazoiW1x1MDc4YVx1MDdhN1x1MDc4N1x1MDdhOFx1MDc4Y1x1MDdhYVx1MDc4OFx1MDdh''@;'; put 'put ''OF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNzhjXHUwN2FjXHUwNzgzXHUwN2FkXHUwNzhlXHUwN2E2XHUwNzg3XHUwN2E4ICVzIixwYXN0OiJcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YThcdTA3ODJcdTA3YjAgJXMiLHM6Ilx1MDc5MFx1MDdhOFx1''@;'; put 'put ''MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYVx1MDc4Nlx1MDdhZVx1MDc4NVx1MDdhY1x1MDc4N1x1MDdiMCIsc3M6ImQlIFx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYSIsbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUw''@;'; put 'put ''N2FjXHUwNzg3XHUwN2IwIixtbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FhICVkIixoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLGhoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3''@;'; put 'put ''YThcdTA3ODNcdTA3YWEgJWQiLGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsZGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc5MFx1MDdiMCAlZCIsTToiXHUwNzg5XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixNTToiXHUw''@;'; put 'put ''Nzg5XHUwN2E2XHUwNzkwXHUwN2IwICVkIix5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLHl5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWEgJWQifSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9c''@;'; put 'put ''dTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0oZCg5NzU4NikpfSw2MDcxOCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImVsIix7''@;'; put 'put ''bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNj''@;'; put 'put ''MVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAz''@;'; put 'put ''Y2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUwM2JmXHUwM2MyX1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFcdTAz''@;'; put 'put ''YzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDNj''@;'; put 'put ''MVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwMzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAz''@;'; put 'put ''YzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUwM2JmXHUwM2M1X1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFcdTAz''@;'; put 'put ''YzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHM6ZnVuY3Rpb24oSSxmKXtyZXR1cm4gST8ic3RyaW5nIj09dHlwZW9mIGYmJi9ELy50ZXN0KGYuc3Vic3RyaW5nKDAsZi5pbmRleE9mKCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW0kubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW0kubW9udGgoKV06''@;'; put 'put ''dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsfSxtb250aHNTaG9ydDoiXHUwMzk5XHUwM2IxXHUwM2JkX1x1MDNhNlx1MDNiNVx1MDNiMl9cdTAzOWNcdTAzYjFcdTAzYzFfXHUwMzkxXHUwM2MwXHUwM2MxX1x1MDM5Y1x1MDNiMVx1MDNjYV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRfXHUwMzk5''@;'; put 'put ''XHUwM2JmXHUwM2M1XHUwM2JiX1x1MDM5MVx1MDNjNVx1MDNiM19cdTAzYTNcdTAzYjVcdTAzYzBfXHUwMzlmXHUwM2JhXHUwM2M0X1x1MDM5ZFx1MDNiZlx1MDNiNV9cdTAzOTRcdTAzYjVcdTAzYmEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDM5YVx1MDNjNVx1MDNjMVx1MDNiOVx1MDNi''@;'; put 'put ''MVx1MDNiYVx1MDNhZV9cdTAzOTRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYWRcdTAzYzFcdTAzYjFfXHUwM2E0XHUwM2MxXHUwM2FmXHUwM2M0XHUwM2I3X1x1MDNhNFx1MDNiNVx1MDNjNFx1MDNhY1x1MDNjMVx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYWRcdTAzYmNcdTAzYzBcdTAzYzRcdTAz''@;'; put 'put ''YjdfXHUwM2EwXHUwM2IxXHUwM2MxXHUwM2IxXHUwM2MzXHUwM2JhXHUwM2I1XHUwM2M1XHUwM2FlX1x1MDNhM1x1MDNhY1x1MDNiMlx1MDNiMlx1MDNiMVx1MDNjNFx1MDNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTAzOWFcdTAzYzVcdTAzYzFfXHUwMzk0XHUwM2I1XHUwM2M1''@;'; put 'put ''X1x1MDNhNFx1MDNjMVx1MDNiOV9cdTAzYTRcdTAzYjVcdTAzYzRfXHUwM2EwXHUwM2I1XHUwM2JjX1x1MDNhMFx1MDNiMVx1MDNjMV9cdTAzYTNcdTAzYjFcdTAzYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDM5YVx1MDNjNV9cdTAzOTRcdTAzYjVfXHUwM2E0XHUwM2MxX1x1MDNh''@;'; put 'put ''NFx1MDNiNV9cdTAzYTBcdTAzYjVfXHUwM2EwXHUwM2IxX1x1MDNhM1x1MDNiMSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihJLGYsVCl7cmV0dXJuIEk+MTE/VD8iXHUwM2JjXHUwM2JjIjoiXHUwMzljXHUwMzljIjpUPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAzOWMifSxpc1BN''@;'; put 'put ''OmZ1bmN0aW9uKEkpe3JldHVybiJcdTAzYmMiPT09KEkrIiIpLnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1tcdTAzYTBcdTAzOWNdXC4/XHUwMzljP1wuPy9pLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQg''@;'; put 'put ''TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXJFbDp7c2FtZURheToiW1x1MDNhM1x1MDNhZVx1MDNiY1x1MDNiNVx1MDNjMVx1MDNiMSB7fV0gTFQiLG5leHREYXk6IltcdTAzOTFcdTAzY2RcdTAzYzFc''@;'; put 'put ''dTAzYjlcdTAzYmYge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbXHUwM2E3XHUwM2I4XHUwM2I1XHUwM2MyIHt9XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNj09PXRoaXMuZGF5KCk/IltcdTAzYzRcdTAzYmYgXHUwM2MwXHUwM2MxXHUwM2JmXHUw''@;'; put 'put ''M2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2JmXSBkZGRkIFt7fV0gTFQiOiJbXHUwM2M0XHUwM2I3XHUwM2JkIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiN10gZGRkZCBbe31dIExUIn0s''@;'; put 'put ''c2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihJLGYpe3ZhciBUPXRoaXMuX2NhbGVuZGFyRWxbSV0sQT1mJiZmLmhvdXJzKCk7cmV0dXJuIGZ1bmN0aW9uIGgoSSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJkkgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rp''@;'; put 'put ''b25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJKX0oVCkmJihUPVQuYXBwbHkoZikpLFQucmVwbGFjZSgie30iLEElMTI9PTE/Ilx1MDNjM1x1MDNjNFx1MDNiNyI6Ilx1MDNjM1x1MDNjNFx1MDNiOVx1MDNjMiIpfSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwM2MzXHUw''@;'; put 'put ''M2I1ICVzIixwYXN0OiIlcyBcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmQiLHM6Ilx1MDNiYlx1MDNhZlx1MDNiM1x1MDNiMSBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLHNzOiIlZCBcdTAzYjRcdTAzYjVc''@;'; put 'put ''dTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLG06Ilx1MDNhZFx1MDNiZFx1MDNiMSBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzY2MiLG1tOiIlZCBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWMiLGg6Ilx1MDNiY1x1''@;'; put 'put ''MDNhZlx1MDNiMSBcdTAzY2VcdTAzYzFcdTAzYjEiLGhoOiIlZCBcdTAzY2VcdTAzYzFcdTAzYjVcdTAzYzIiLGQ6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjEiLGRkOiIlZCBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjVcdTAzYzIiLE06Ilx1MDNhZFx1MDNi''@;'; put 'put ''ZFx1MDNiMVx1MDNjMiBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjFcdTAzYzIiLE1NOiIlZCBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjVcdTAzYzIiLHk6Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYmZcdTAzYzIiLHl5OiIlZCBcdTAzYzdc''@;'; put 'put ''dTAzYzFcdTAzY2NcdTAzYmRcdTAzYjlcdTAzYjEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwM2I3LyxvcmRpbmFsOiIlZFx1MDNiNyIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sMzYzMTkodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1Mu''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJlbi1hdSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5f''@;'; put 'put ''SnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBE''@;'; put 'put ''IE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5''@;'; put 'put ''cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihvKXt2YXIgST1vJTEwO3JldHVybiBvKygxPT1+fihvJTEwMC8xMCk/InRoIjox''@;'; put 'put ''PT09ST8ic3QiOjI9PT1JPyJuZCI6Mz09PUk/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KGQoOTc1ODYpKX0sODA1OTcodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJj''@;'; put 'put ''aF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRh''@;'; put 'put ''eV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiks''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJZWVlZLU1NLUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoi''@;'; put 'put ''JXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQg''@;'; put 'put ''eWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihvKXt2YXIgST1vJTEwO3JldHVybiBvKygxPT1+fihvJTEwMC8xMCk/InRoIjoxPT09ST8ic3QiOjI9PT1JPyJuZCI6Mz09PUk/InJkIjoidGgiKX19KX0oZCg5NzU4''@;'; put 'put ''NikpfSw1MTgwMCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJk''@;'; put 'put ''YXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoi''@;'; put 'put ''YW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obyl7''@;'; put 'put ''dmFyIEk9byUxMDtyZXR1cm4gbysoMT09fn4obyUxMDAvMTApPyJ0aCI6MT09PUk/InN0IjoyPT09ST8ibmQiOjM9PT1JPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDgwNyh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1Nl''@;'; put 'put ''cF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIs''@;'; put 'put ''TU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihvKXt2YXIgST1vJTEwO3JldHVybiBvKygxPT1+fihvJTEwMC8xMCk/InRoIjoxPT09ST8ic3QiOjI9PT1J''@;'; put 'put ''PyJuZCI6Mz09PUk/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sOTU5NjAodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJlbi1pbCIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVu''@;'; put 'put ''ZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2Rh''@;'; put 'put ''eV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jy''@;'; put 'put ''b3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29u''@;'; put 'put ''ZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRp''@;'; put 'put ''bmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG8pe3ZhciBJPW8lMTA7cmV0dXJuIG8rKDE9PX5+KG8lMTAwLzEwKT8idGgiOjE9PT1JPyJzdCI6Mj09PUk/Im5kIjozPT09ST8icmQiOiJ0aCIpfX0pfShkKDk3NTg2KSl9LDg0NDE4KHRlLGosZCl7IWZ1''@;'; put 'put ''bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiZW4taW4iLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6''@;'; put 'put ''Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1''@;'; put 'put ''ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2Vl''@;'; put 'put ''azoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhv''@;'; put 'put ''dXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obyl7dmFyIEk9byUxMDtyZXR1cm4g''@;'; put 'put ''bysoMT09fn4obyUxMDAvMTApPyJ0aCI6MT09PUk/InN0IjoyPT09ST8ibmQiOjM9PT1JPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDQ2ODY1KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiZW4tbnoiLHttb250''@;'; put 'put ''aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1''@;'; put 'put ''X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250''@;'; put 'put ''aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obyl7dmFyIEk9byUxMDtyZXR1cm4gbysoMT09fn4obyUxMDAvMTApPyJ0aCI6MT09PUk/InN0IjoyPT09ST8ibmQiOjM9PT1J''@;'; put 'put ''PyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDMyNjQ3KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiZW4tc2ciLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1''@;'; put 'put ''c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5''@;'; put 'put ''X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i''@;'; put 'put ''LExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQg''@;'; put 'put ''c2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihvKXt2YXIgST1vJTEwO3JldHVybiBvKygxPT1+fihvJTEwMC8xMCk/InRoIjoxPT09ST8ic3QiOjI9PT1JPyJuZCI6Mz09PUk/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNjE5MzEodGUs''@;'; put 'put ''aixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJlbyIse21vbnRoczoiamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hXHUwMTZkZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFydF9hcHJfbWFqX2p1bl9qdWxfYVx1MDE2ZGdfc2VwdF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZGltYW5cdTAxMDlvX2x1bmRvX21hcmRvX21lcmtyZWRvX1x1MDEzNWFcdTAxNmRkb192ZW5kcmVkb19zYWJhdG8iLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiZGltX2x1bl9tYXJkX21lcmtfXHUwMTM1YVx1MDE2ZF92ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9cdTAxMzVhX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi''@;'; put 'put ''LEw6IllZWVktTU0tREQiLExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIixMTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgW2xhXSBEWy1hbiBkZV0gTU1NLCBZ''@;'; put 'put ''WVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovW2FwXVwudFwubS9pLGlzUE06ZnVuY3Rpb24obyl7cmV0dXJuInAiPT09by5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPjExP2Y/InAudC5tLiI6IlAuVC5NLiI6Zj8iYS50Lm0uIjoi''@;'; put 'put ''QS5ULk0uIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2RpYVx1MDE2ZCBqZV0gTFQiLG5leHREYXk6IltNb3JnYVx1MDE2ZCBqZV0gTFQiLG5leHRXZWVrOiJkZGRkW24gamVdIExUIixsYXN0RGF5OiJbSGllcmFcdTAxNmQgamVdIExUIixsYXN0V2VlazoiW3Bhc2ludGFuXSBkZGRkW24gamVd''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwb3N0ICVzIixwYXN0OiJhbnRhXHUwMTZkICVzIixzOiJrZWxrYWogc2VrdW5kb2oiLHNzOiIlZCBzZWt1bmRvaiIsbToidW51IG1pbnV0byIsbW06IiVkIG1pbnV0b2oiLGg6InVudSBob3JvIixoaDoiJWQgaG9yb2oi''@;'; put 'put ''LGQ6InVudSB0YWdvIixkZDoiJWQgdGFnb2oiLE06InVudSBtb25hdG8iLE1NOiIlZCBtb25hdG9qIix5OiJ1bnUgamFybyIseXk6IiVkIGphcm9qIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfWEvLG9yZGluYWw6IiVkYSIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYp''@;'; put 'put ''KX0sNDE4MDUodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxvPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rf''@;'; put 'put ''bm92X2RpYyIuc3BsaXQoIl8iKSxJPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sZj0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVs''@;'; put 'put ''aW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO1MuZGVmaW5lTG9jYWxlKCJlcy1kbyIse21vbnRo''@;'; put 'put ''czoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihBLE0pe3JldHVybiBBPy8tTU1NLS8udGVzdChNKT9vW0EubW9udGgo''@;'; put 'put ''KV06aFtBLm1vbnRoKCldOmh9LG1vbnRoc1JlZ2V4OmYsbW9udGhzU2hvcnRSZWdleDpmLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ks''@;'; put 'put ''bW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpJLGxvbmdNb250aHNQYXJzZTpJLHNob3J0TW9udGhzUGFyc2U6SSx3''@;'; put 'put ''ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19s''@;'; put 'put ''dV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZ''@;'; put 'put ''WSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4''@;'; put 'put ''ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhp''@;'; put 'put ''cy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2Ug''@;'; put 'put ''JXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1l''@;'; put 'put ''cyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sODM0NDUodGUsaixkKXshZnVuY3Rpb24oUyl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBoPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxvPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxJPVsvXmVuZS9pLC9e''@;'; put 'put ''ZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sZj0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3Zp''@;'; put 'put ''ZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO1MuZGVmaW5lTG9jYWxlKCJlcy1teCIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlv''@;'; put 'put ''X2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihBLE0pe3JldHVybiBBPy8tTU1NLS8udGVzdChNKT9vW0EubW9udGgoKV06aFtBLm1vbnRoKCldOmh9LG1vbnRoc1JlZ2V4OmYs''@;'; put 'put ''bW9udGhzU2hvcnRSZWdleDpmLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98''@;'; put 'put ''ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpJLGxvbmdNb250aHNQYXJzZTpJLHNob3J0TW9udGhzUGFyc2U6SSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlc''@;'; put 'put ''eGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0g''@;'; put 'put ''WVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0g''@;'; put 'put ''TFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06''@;'; put 'put ''InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4''@;'; put 'put ''ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KGQoOTc1ODYpKX0sODE1MTYodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBoPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxvPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxJPVsvXmVuZS9pLC9eZmViL2ksL15t''@;'; put 'put ''YXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sZj0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGlj''@;'; put 'put ''aWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO1MuZGVmaW5lTG9jYWxlKCJlcy11cyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1''@;'; put 'put ''bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihBLE0pe3JldHVybiBBPy8tTU1NLS8udGVzdChNKT9vW0EubW9udGgoKV06aFtBLm1vbnRoKCldOmh9LG1vbnRoc1JlZ2V4OmYsbW9udGhzU2hv''@;'; put 'put ''cnRSZWdleDpmLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1h''@;'; put 'put ''clwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpJLGxvbmdNb250aHNQYXJzZTpJLHNob3J0TW9udGhzUGFyc2U6SSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVz''@;'; put 'put ''X2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJNTS9ERC9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZ''@;'; put 'put ''WSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBM''@;'; put 'put ''VCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToi''@;'; put 'put ''dW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhm''@;'; put 'put ''MW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGQoOTc1ODYpKX0sNDY2NzkodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5f''@;'; put 'put ''anVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxvPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxJPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1''@;'; put 'put ''bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sZj0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwu''@;'; put 'put ''P3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO1MuZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVt''@;'; put 'put ''YnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihBLE0pe3JldHVybiBBPy8tTU1NLS8udGVzdChNKT9vW0EubW9udGgoKV06aFtBLm1vbnRoKCldOmh9LG1vbnRoc1JlZ2V4OmYsbW9udGhzU2hvcnRSZWdleDpmLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJv''@;'; put 'put ''fGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdv''@;'; put 'put ''XC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpJLGxvbmdNb250aHNQYXJzZTpJLHNob3J0TW9udGhzUGFyc2U6SSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1t''@;'; put 'put ''IixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIiso''@;'; put 'put ''MSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlz''@;'; put 'put ''LmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoi''@;'; put 'put ''JWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxv''@;'; put 'put ''cmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KGQoOTc1ODYpKX0sODgxNTAodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGgoSSxmLFQsQSl7dmFyIE09e3M6WyJtXHhmNW5lIHNla3Vu''@;'; put 'put ''ZGkiLCJtXHhmNW5pIHNla3VuZCIsInBhYXIgc2VrdW5kaXQiXSxzczpbSSsic2VrdW5kaSIsSSsic2VrdW5kaXQiXSxtOlsiXHhmY2hlIG1pbnV0aSIsIlx4ZmNrcyBtaW51dCJdLG1tOltJKyIgbWludXRpIixJKyIgbWludXRpdCJdLGg6WyJceGZjaGUgdHVubmkiLCJ0dW5kIGFlZ2EiLCJc''@;'; put 'put ''eGZja3MgdHVuZCJdLGhoOltJKyIgdHVubmkiLEkrIiB0dW5kaSJdLGQ6WyJceGZjaGUgcFx4ZTRldmEiLCJceGZja3MgcFx4ZTRldiJdLE06WyJrdXUgYWphIiwia3V1IGFlZ2EiLCJceGZja3Mga3V1Il0sTU06W0krIiBrdXUiLEkrIiBrdXVkIl0seTpbIlx4ZmNoZSBhYXN0YSIsImFhc3Rh''@;'; put 'put ''IiwiXHhmY2tzIGFhc3RhIl0seXk6W0krIiBhYXN0YSIsSSsiIGFhc3RhdCJdfTtyZXR1cm4gZj9NW1RdWzJdP01bVF1bMl06TVtUXVsxXTpBP01bVF1bMF06TVtUXVsxXX1TLmRlZmluZUxvY2FsZSgiZXQiLHttb250aHM6ImphYW51YXJfdmVlYnJ1YXJfbVx4ZTRydHNfYXByaWxsX21haV9q''@;'; put 'put ''dXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFhbl92ZWVicl9tXHhlNHJ0c19hcHJfbWFpX2p1dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''cFx4ZmNoYXBceGU0ZXZfZXNtYXNwXHhlNGV2X3RlaXNpcFx4ZTRldl9rb2xtYXBceGU0ZXZfbmVsamFwXHhlNGV2X3JlZWRlX2xhdXBceGU0ZXYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUF9FX1RfS19OX1JfTCIu''@;'; put 'put ''c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RceGU0''@;'; put 'put ''bmEsXSBMVCIsbmV4dERheToiW0hvbW1lLF0gTFQiLG5leHRXZWVrOiJbSlx4ZTRyZ21pbmVdIGRkZGQgTFQiLGxhc3REYXk6IltFaWxlLF0gTFQiLGxhc3RXZWVrOiJbRWVsbWluZV0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRyYXN0Iixw''@;'; put 'put ''YXN0OiIlcyB0YWdhc2kiLHM6aCxzczpoLG06aCxtbTpoLGgsaGg6aCxkOmgsZGQ6IiVkIHBceGU0ZXZhIixNOmgsTU06aCx5OmgseXk6aH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDgw''@;'; put 'put ''NzU3KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiZXUiLHttb250aHM6InVydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJ1cnQuX290cy5fbWFyLl9hcGkuX21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0''@;'; put 'put ''ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImlnLl9hbC5fYXIuX2F6Ll9vZy5fb2wuX2xyLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiaWdfYWxfYXJfYXpfb2dfb2xfbHIiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSIsTExMOiJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsTExMTDoiZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLGw6IllZ''@;'; put 'put ''WVktTS1EIixsbDoiWVlZWVtrb10gTU1NIERbYV0iLGxsbDoiWVlZWVtrb10gTU1NIERbYV0gSEg6bW0iLGxsbGw6ImRkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2dhdXJdIExUW2V0YW5dIixuZXh0RGF5OiJbYmloYXJdIExUW2V0YW5dIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBMVFtldGFuXSIsbGFzdERheToiW2F0em9dIExUW2V0YW5dIixsYXN0V2VlazoiW2F1cnJla29dIGRkZGQgTFRbZXRhbl0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGJhcnJ1IixwYXN0OiJkdWVsYSAlcyIsczoic2VndW5kbyBiYXR6dWsiLHNz''@;'; put 'put ''OiIlZCBzZWd1bmRvIixtOiJtaW51dHUgYmF0IixtbToiJWQgbWludXR1IixoOiJvcmR1IGJhdCIsaGg6IiVkIG9yZHUiLGQ6ImVndW4gYmF0IixkZDoiJWQgZWd1biIsTToiaGlsYWJldGUgYmF0IixNTToiJWQgaGlsYWJldGUiLHk6InVydGUgYmF0Iix5eToiJWQgdXJ0ZSJ9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oZCg5NzU4NikpfSw2NTc0Mih0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIGg9ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJcdTA2ZjMiLDQ6Ilx1MDZmNCIs''@;'; put 'put ''NToiXHUwNmY1Iiw2OiJcdTA2ZjYiLDc6Ilx1MDZmNyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1MDZmMCJ9LG89eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYiLCJcdTA2ZjciOiI3IiwiXHUw''@;'; put 'put ''NmY4IjoiOCIsIlx1MDZmOSI6IjkiLCJcdTA2ZjAiOiIwIn07Uy5kZWZpbmVMb2NhbGUoImZhIix7bW9udGhzOiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJc''@;'; put 'put ''dTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2''@;'; put 'put ''YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1''@;'; put 'put ''MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYy''@;'; put 'put ''YV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXM6Ilx1MDZjY1x1MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0''@;'; put 'put ''Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRc''@;'; put 'put ''dTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJj''@;'; put 'put ''XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjJjX1x1MDYzNCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L1x1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxfFx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLyxpc1BNOmZ1bmN0aW9uKGYpe3JldHVybi9cdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1''@;'; put 'put ''MDYzOFx1MDY0N1x1MDYzMS8udGVzdChmKX0sbWVyaWRpZW06ZnVuY3Rpb24oZixULEEpe3JldHVybiBmPDEyPyJcdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSI6Ilx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUw''@;'; put 'put ''NjMxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDVcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDY0MVx1MDYzMVx1MDYyZlx1MDYyNyBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZCBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDZjY1x1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjdlXHUwNmNjXHUwNjM0XSBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJh''@;'; put 'put ''XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjJmXHUwNjMxICVzIixwYXN0OiIlcyBcdTA2N2VcdTA2Y2NcdTA2MzQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2''@;'; put 'put ''NDZcdTA2Y2NcdTA2NDciLG06Ilx1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLGg6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2MzlcdTA2MmEiLGQ6Ilx1MDZjY1x1MDZhOSBcdTA2MzFcdTA2NDhcdTA2MzIiLGRkOiIlZCBcdTA2MzFcdTA2NDhcdTA2MzIiLE06Ilx1MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2NDciLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDciLHk6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2''@;'; put 'put ''MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9bXHUwNmYwLVx1MDZmOV0vZyxmdW5jdGlvbihUKXtyZXR1cm4gb1tUXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24o''@;'; put 'put ''Zil7cmV0dXJuIGYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTA2NDUvLG9yZGluYWw6IiVkXHUwNjQ1Iix3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KGQoOTc1ODYp''@;'; put 'put ''KX0sMzM5NTgodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPSJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGpceGU0IHZpaXNpIGt1dXNpIHNlaXRzZW1ceGU0biBrYWhkZWtzYW4geWhkZWtzXHhlNG4iLnNwbGl0KCIgIiksbz1bIm5vbGxhIiwieWhkZW4iLCJrYWhk''@;'; put 'put ''ZW4iLCJrb2xtZW4iLCJuZWxqXHhlNG4iLCJ2aWlkZW4iLCJrdXVkZW4iLGhbN10saFs4XSxoWzldXTtmdW5jdGlvbiBJKEEsTSxPLEQpe3ZhciBFPSIiO3N3aXRjaChPKXtjYXNlInMiOnJldHVybiBEPyJtdXV0YW1hbiBzZWt1bm5pbiI6Im11dXRhbWEgc2VrdW50aSI7Y2FzZSJzcyI6RT1E''@;'; put 'put ''PyJzZWt1bm5pbiI6InNla3VudGlhIjticmVhaztjYXNlIm0iOnJldHVybiBEPyJtaW51dXRpbiI6Im1pbnV1dHRpIjtjYXNlIm1tIjpFPUQ/Im1pbnV1dGluIjoibWludXV0dGlhIjticmVhaztjYXNlImgiOnJldHVybiBEPyJ0dW5uaW4iOiJ0dW50aSI7Y2FzZSJoaCI6RT1EPyJ0dW5uaW4i''@;'; put 'put ''OiJ0dW50aWEiO2JyZWFrO2Nhc2UiZCI6cmV0dXJuIEQ/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0IjtjYXNlImRkIjpFPUQ/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0XHhlNCI7YnJlYWs7Y2FzZSJNIjpyZXR1cm4gRD8ia3V1a2F1ZGVuIjoia3V1a2F1c2kiO2Nhc2UiTU0iOkU9''@;'; put 'put ''RD8ia3V1a2F1ZGVuIjoia3V1a2F1dHRhIjticmVhaztjYXNlInkiOnJldHVybiBEPyJ2dW9kZW4iOiJ2dW9zaSI7Y2FzZSJ5eSI6RT1EPyJ2dW9kZW4iOiJ2dW90dGEifXJldHVybiBmdW5jdGlvbiBmKEEsTSl7cmV0dXJuIEE8MTA/TT9vW0FdOmhbQV06QX0oQSxEKSsiICIrRX1TLmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgiZmkiLHttb250aHM6InRhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXNceGU0a3V1X2hlaW5ceGU0a3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ0YW1taV9o''@;'; put 'put ''ZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2VzXHhlNF9oZWluXHhlNF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1N''@;'; put 'put ''TVt0YV0gWVlZWSIsTExMOiJEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsTExMTDoiZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLGw6IkQuTS5ZWVlZIixsbDoiRG8gTU1NIFlZWVkiLGxsbDoiRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIixsbGxsOiJkZGQsIERv''@;'; put 'put ''IE1NTSBZWVlZLCBba2xvXSBISC5tbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdFx4ZTRuXHhlNFx4ZTRuXSBba2xvXSBMVCIsbmV4dERheToiW2h1b21lbm5hXSBba2xvXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb10gTFQiLGxhc3REYXk6IltlaWxlbl0gW2tsb10gTFQiLGxhc3RXZWVrOiJb''@;'; put 'put ''dmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNFx4ZTRzdFx4ZTQiLHBhc3Q6IiVzIHNpdHRlbiIsczpJLHNzOkksbTpJLG1tOkksaDpJLGhoOkksZDpJLGRkOkksTTpJLE1NOkkseTpJLHl5Okl9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw0NjcyMCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImZpbCIse21vbnRoczoiRW5lcm9fUGVicmVyb19NYXJzb19BYnJp''@;'; put 'put ''bF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGluZ2dv''@;'; put 'put ''X0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlfU2FiIi5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiTFQgW25nYXlvbmcgYXJh''@;'; put 'put ''d10iLG5leHREYXk6IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToic2EgbG9v''@;'; put 'put ''YiBuZyAlcyIscGFzdDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3JhcyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIlZCBhcmF3IixNOiJpc2FuZyBi''@;'; put 'put ''dXdhbiIsTU06IiVkIGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24obyl7cmV0dXJuIG99LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDk4MzUyKHRlLGosZCl7IWZ1bmN0''@;'; put 'put ''aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiZm8iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByXHhlZGxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9m''@;'; put 'put ''ZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbmFkYWd1cl90XHhmZHNkYWd1cl9taWt1ZGFndXJfaFx4ZjNzZGFndXJfZnJceGVkZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fdFx4ZmRzX21pa19oXHhmM3NfZnJceGVkX2xleSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTFfdFx4ZmRfbWlfaFx4ZjNfZnJfbGUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4Y2QgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGNkIG1vcmdpbiBrbC5dIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4Y2QgZ2pceGUxciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMHN0dV0gZGRkZCBba2xdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ1bSAlcyIscGFzdDoiJXMgc1x4ZWRceGYwYW5pIixzOiJmXHhlMSBzZWt1''@;'; put 'put ''bmQiLHNzOiIlZCBzZWt1bmRpciIsbToiZWluIG1pbnV0dHVyIixtbToiJWQgbWludXR0aXIiLGg6ImVpbiB0XHhlZG1pIixoaDoiJWQgdFx4ZWRtYXIiLGQ6ImVpbiBkYWd1ciIsZGQ6IiVkIGRhZ2FyIixNOiJlaW4gbVx4ZTFuYVx4ZjB1ciIsTU06IiVkIG1ceGUxbmFceGYwaXIiLHk6ImVp''@;'; put 'put ''dHQgXHhlMXIiLHl5OiIlZCBceGUxciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw0MjA5Nih0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImZy''@;'; put 'put ''LWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVp''@;'; put 'put ''bl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0u''@;'; put 'put ''X2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1E''@;'; put 'put ''RCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''XHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29u''@;'; put 'put ''ZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obyxJKXtzd2l0Y2goSSl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gbysoMT09PW8/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbysoMT09PW8/InJlIjoiZSIpfX19''@;'; put 'put ''KX0oZCg5NzU4NikpfSw5NTc1OSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImZyLWNoIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1i''@;'; put 'put ''cmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1''@;'; put 'put ''bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06''@;'; put 'put ''InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obyxJKXtzd2l0Y2goSSl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJk''@;'; put 'put ''IjpyZXR1cm4gbysoMT09PW8/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbysoMT09PW8/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNDA1OSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIEk9LyhqYW52XC4/fGZceGU5''@;'; put 'put ''dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj98amFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2Vt''@;'; put 'put ''YnJlKS9pLGY9Wy9eamFudi9pLC9eZlx4ZTl2ci9pLC9ebWFycy9pLC9eYXZyL2ksL15tYWkvaSwvXmp1aW4vaSwvXmp1aWwvaSwvXmFvXHhmYnQvaSwvXnNlcHQvaSwvXm9jdC9pLC9ebm92L2ksL15kXHhlOWMvaV07Uy5kZWZpbmVMb2NhbGUoImZyIix7bW9udGhzOiJqYW52aWVyX2ZceGU5''@;'; put 'put ''dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5f''@;'; put 'put ''bm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4OkksbW9udGhzU2hvcnRSZWdleDpJLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhl''@;'; put 'put ''OWNlbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/KS9pLG1vbnRoc1BhcnNlOmYsbG9uZ01vbnRoc1BhcnNlOmYsc2hvcnRN''@;'; put 'put ''b250aHNQYXJzZTpmLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlf''@;'; put 'put ''bHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1N''@;'; put 'put ''TU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIg''@;'; put 'put ''XHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhl''@;'; put 'put ''dXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIix3OiJ1bmUgc2VtYWluZSIsd3c6IiVkIHNlbWFpbmVzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfCkvLG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24oQSxNKXtzd2l0Y2goTSl7Y2FzZSJEIjpyZXR1cm4gQSsoMT09PUE/ImVyIjoiIik7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIEErKDE9PT1BPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIEErKDE9PT1BPyJyZSI6ImUiKX19LHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDE1OTU4KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD0iamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxvPSJqYW5fZmViX21ydF9h''@;'; put 'put ''cHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTtTLmRlZmluZUxvY2FsZSgiZnkiLHttb250aHM6Imphbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVz''@;'; put 'put ''aW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oZixUKXtyZXR1cm4gZj8vLU1NTS0vLnRlc3QoVCk/b1tmLm1vbnRoKCldOmhbZi5tb250aCgpXTpofSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzbmVpbl9tb2FuZGVpX3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vy''@;'; put 'put ''c2RlaV9mcmVlZF9zbmVvbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNpX01vX1RpX1dvX1RvX0ZyX1NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hqb2VkIG9tXSBMVCIsbmV4dERheToiW21vYXJu''@;'; put 'put ''IG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2p1c3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbXHhmNGZyXHhmYm5lXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9lciAlcyIscGFzdDoiJXMgbHluIixzOiJpbiBwZWFy''@;'; put 'put ''IHNla29uZGVuIixzczoiJWQgc2Vrb25kZW4iLG06ImllbiBtaW5ceGZhdCIsbW06IiVkIG1pbnV0ZW4iLGg6ImllbiBvZXJlIixoaDoiJWQgb2VyZW4iLGQ6ImllbiBkZWkiLGRkOiIlZCBkYWdlbiIsTToiaWVuIG1vYW5uZSIsTU06IiVkIG1vYW5uZW4iLHk6ImllbiBqaWVyIix5eToiJWQg''@;'; put 'put ''amllcnJlbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihmKXtyZXR1cm4gZisoMT09PWZ8fDg9PT1mfHxmPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sOTQxNDModGUsaixkKXshZnVu''@;'; put 'put ''Y3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJnYSIse21vbnRoczpbIkVhblx4ZTFpciIsIkZlYWJocmEiLCJNXHhlMXJ0YSIsIkFpYnJlXHhlMW4iLCJCZWFsdGFpbmUiLCJNZWl0aGVhbWgiLCJJXHhmYWlsIiwiTFx4ZmFuYXNhIiwiTWVceGUxbiBGXHhmM21oYWlyIiwi''@;'; put 'put ''RGVpcmVhZGggRlx4ZjNtaGFpciIsIlNhbWhhaW4iLCJOb2xsYWlnIl0sbW9udGhzU2hvcnQ6WyJFYW4iLCJGZWFiaCIsIk1ceGUxcnQiLCJBaWIiLCJCZWFsIiwiTWVpdGgiLCJJXHhmYWlsIiwiTFx4ZmFuIiwiTS5GLiIsIkQuRi4iLCJTYW1oIiwiTm9sbCJdLG1vbnRoc1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsd2Vla2RheXM6WyJEXHhlOSBEb21obmFpZ2giLCJEXHhlOSBMdWFpbiIsIkRceGU5IE1ceGUxaXJ0IiwiRFx4ZTkgQ1x4ZTlhZGFvaW4iLCJEXHhlOWFyZGFvaW4iLCJEXHhlOSBoQW9pbmUiLCJEXHhlOSBTYXRoYWlybiJdLHdlZWtkYXlzU2hvcnQ6WyJEb21oIiwiTHVhbiIsIk1ceGUx''@;'; put 'put ''aXJ0IiwiQ1x4ZTlhZCIsIkRceGU5YXIiLCJBb2luZSIsIlNhdGgiXSx3ZWVrZGF5c01pbjpbIkRvIiwiTHUiLCJNXHhlMSIsIkNceGU5IiwiRFx4ZTkiLCJBIiwiU2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbm5pdSBhZ10gTFQiLG5leHREYXk6IltBbVx4ZTFyYWNoIGFnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FnXSBMVCIsbGFzdERheToiW0lublx4''@;'; put 'put ''ZTkgYWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNhaXRlXSBbYWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpICVzIixwYXN0OiIlcyBceGYzIHNoaW4iLHM6ImNceGZhcGxhIHNvaWNpbmQiLHNzOiIlZCBzb2ljaW5kIixtOiJuXHhmM2ltXHhlOWFkIixt''@;'; put 'put ''bToiJWQgblx4ZjNpbVx4ZTlhZCIsaDoidWFpciBhbiBjaGxvaWciLGhoOiIlZCB1YWlyIGFuIGNobG9pZyIsZDoibFx4ZTEiLGRkOiIlZCBsXHhlMSIsTToibVx4ZWQiLE1NOiIlZCBtXHhlZG9ubmEiLHk6ImJsaWFpbiIseXk6IiVkIGJsaWFpbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6''@;'; put 'put ''L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oTSl7cmV0dXJuIE0rKDE9PT1NPyJkIjpNJTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDY3MDI4KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgiZ2QiLHttb250aHM6WyJBbSBGYW9pbGxlYWNoIiwiQW4gR2VhcnJhbiIsIkFtIE1ceGUwcnQiLCJBbiBHaWJsZWFuIiwiQW4gQ1x4ZThpdGVhbiIsIkFuIHQtXHhkMmdtaGlvcyIsIkFuIHQtSXVjaGFyIiwiQW4gTFx4ZjluYXN0YWwiLCJBbiB0LVN1bHRhaW4iLCJBbiBEXHhlMG1oYWly''@;'; put 'put ''IiwiQW4gdC1TYW1oYWluIiwiQW4gRFx4ZjliaGxhY2hkIl0sbW9udGhzU2hvcnQ6WyJGYW9pIiwiR2VhciIsIk1ceGUwcnQiLCJHaWJsIiwiQ1x4ZThpdCIsIlx4ZDJnbWgiLCJJdWNoIiwiTFx4ZjluIiwiU3VsdCIsIkRceGUwbWgiLCJTYW1oIiwiRFx4ZjliaCJdLG1vbnRoc1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsd2Vla2RheXM6WyJEaWRceGYybWhuYWljaCIsIkRpbHVhaW4iLCJEaW1ceGUwaXJ0IiwiRGljaWFkYWluIiwiRGlhcmRhb2luIiwiRGloYW9pbmUiLCJEaXNhdGhhaXJuZSJdLHdlZWtkYXlzU2hvcnQ6WyJEaWQiLCJEaWwiLCJEaW0iLCJEaWMiLCJEaWEiLCJEaWgiLCJEaXMiXSx3''@;'; put 'put ''ZWVrZGF5c01pbjpbIkRceGYyIiwiTHUiLCJNXHhlMCIsIkNpIiwiQXIiLCJIYSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBE''@;'; put 'put ''IE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQW4tZGl1Z2ggYWlnXSBMVCIsbmV4dERheToiW0EtbVx4ZTBpcmVhY2ggYWlnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FpZ10gTFQiLGxhc3REYXk6IltBbi1kXHhlOCBhaWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNo''@;'; put 'put ''YWlkaF0gW2FpZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImFubiBhbiAlcyIscGFzdDoiYmhvIGNoaW9ubiAlcyIsczoiYmVhZ2FuIGRpb2dhbiIsc3M6IiVkIGRpb2dhbiIsbToibWlvbmFpZCIsbW06IiVkIG1pb25haWRlYW4iLGg6InVhaXIiLGhoOiIlZCB1''@;'; put 'put ''YWlyZWFuIixkOiJsYXRoYSIsZGQ6IiVkIGxhdGhhIixNOiJtXHhlY29zIixNTToiJWQgbVx4ZWNvc2FuIix5OiJibGlhZGhuYSIseXk6IiVkIGJsaWFkaG5hIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihNKXtyZXR1cm4gTSso''@;'; put 'put ''MT09PU0/ImQiOk0lMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sODA0MjgodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJnbCIse21vbnRoczoieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlv''@;'; put 'put ''X3h1XHhmMW9feHVsbG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inhhbi5fZmViLl9tYXIuX2Fici5fbWFpLl94dVx4ZjEuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRvbWluZ29fbHVuc19tYXJ0ZXNfbVx4ZTlyY29yZXNfeG92ZXNfdmVucmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9tXHhlOXIuX3hvdi5fdmVuLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJkb19sdV9tYV9tXHhlOV94b192ZV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0g''@;'; put 'put ''W2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveGUgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIlttYVx4ZjFceGUxICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltvbnRl''@;'; put 'put ''ICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTEiOiJhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbb10gZGRkZCBbcGFzYWRvICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5j''@;'; put 'put ''dGlvbihvKXtyZXR1cm4gMD09PW8uaW5kZXhPZigidW4iKT8ibiIrbzoiZW4gIitvfSxwYXN0OiJoYWkgJXMiLHM6InVucyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmhhIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4''@;'; put 'put ''ZWRhIixkZDoiJWQgZFx4ZWRhcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw3Njg2MSh0''@;'; put 'put ''ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaChJLGYsVCxBKXt2YXIgTT17czpbIlx1MDkyNVx1MDk0Ylx1MDkyMVx1MDkyZlx1MDkzZSBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLCJcdTA5MjVcdTA5NGJc''@;'; put 'put ''dTA5MjFcdTA5NDcgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sc3M6W0krIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEkrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxtOlsiXHUwOTBmXHUwOTE1XHUw''@;'; put 'put ''OTNlIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDJcdTA5MWYiXSxtbTpbSSsiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsSSsiIFx1MDkyZVx1MDkzZlx1''@;'; put 'put ''MDkyM1x1MDkxZlx1MDkzZVx1MDkwMiJdLGg6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMCJdLGhoOltJKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixJKyIgXHUwOTM1XHUwOTMw''@;'; put 'put ''XHUwOTNlXHUwOTAyIl0sZDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTQwXHUwOTM4Il0sZGQ6W0krIiBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEkrIiBcdTA5''@;'; put 'put ''MjZcdTA5NDBcdTA5MzgiXSxNOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGIiXSxNTTpbSSsiIFx1MDkyZVx1''@;'; put 'put ''MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOFx1MDk0MCIsSSsiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0NyJdLHk6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBm''@;'; put 'put ''XHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOCJdLHl5OltJKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixJKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyIl19O3JldHVybiBBP01bVF1bMF06TVtUXVsxXX1TLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiZ29tLWRldmEiLHttb250aHM6e3N0YW5kYWxvbmU6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNl''@;'; put 'put ''XHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZl9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTJhXHUwOTRkXHUw''@;'; put 'put ''OTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUw''@;'; put 'put ''OTMwIi5zcGxpdCgiXyIpLGZvcm1hdDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1''@;'; put 'put ''MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDk0N1x1MDkyZlx1''@;'; put 'put ''MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDJcdTA5MjhcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZlx1''@;'; put 'put ''MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUw''@;'; put 'put ''OTRkXHUwOTJmXHUwOTNlX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5''@;'; put 'put ''MmZcdTA5M2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDcuX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1''@;'; put 'put ''MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MC5fXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkxMVx1MDkxNy5fXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDky''@;'; put 'put ''OFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MmZcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUw''@;'; put 'put ''OTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0MVx1MDkxNVx1MDk0ZFx1''@;'; put 'put ''MDkzMFx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDdcdTA5MjhcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTJmXHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMy5fXHUwOTJjXHUwOTQxXHUwOTI3''@;'; put 'put ''Ll9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjQuX1x1MDkzOFx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTQ3XHUwOTI4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2X1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUw''@;'; put 'put ''OTQxX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N19cdTA5MzhcdTA5NDFfXHUwOTM2XHUwOTQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTFRTOiJBIGg6''@;'; put 'put ''bW06c3MgW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZ''@;'; put 'put ''WVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkyZlx1MDkxY10gTFQi''@;'; put 'put ''LG5leHREYXk6IltcdTA5MmJcdTA5M2VcdTA5MzJcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MDJdIExUIixuZXh0V2VlazoiW1x1MDkyYlx1MDk0MVx1MDkyMVx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJi''@;'; put 'put ''XHUwOTNlXHUwOTFmXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgXHUwOTA2XHUwOTI2XHUwOTQwXHUwOTAyIixzOmgsc3M6aCxtOmgsbW06aCxoLGhoOmgsZDpoLGRkOmgsTTpoLE1NOmgseTpoLHl5Omh9''@;'; put 'put ''LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwOTM1XHUwOTQ3XHUwOTMwKS8sb3JkaW5hbDpmdW5jdGlvbihJLGYpe3JldHVybiJEIj09PWY/SSsiXHUwOTM1XHUwOTQ3XHUwOTMwIjpJfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUw''@;'; put 'put ''OTI0XHUwOTQwfFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMnxcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDJ8XHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oSSxmKXtyZXR1cm4gMTI9PT1JJiYo''@;'; put 'put ''ST0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIj09PWY/STw0P0k6SSsxMjoiXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIj09PWY/SToiXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIj09PWY/ST4xMj9JOkkrMTI6Ilx1MDkzOFx1MDkz''@;'; put 'put ''ZVx1MDkwMlx1MDkxY1x1MDk0NyI9PT1mP0krMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihJLGYsVCl7cmV0dXJuIEk8ND8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIjpJPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiOkk8MTY/Ilx1MDkyNlx1MDkyOFx1''@;'; put 'put ''MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI6STwyMD8iXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIn19KX0oZCg5NzU4NikpfSw1NzcxOCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaChJLGYs''@;'; put 'put ''VCxBKXt2YXIgTT17czpbInRob2RkZWEgc2Vrb25kYW1uaSIsInRob2RkZSBzZWtvbmQiXSxzczpbSSsiIHNla29uZGFtbmkiLEkrIiBzZWtvbmQiXSxtOlsiZWthIG1pbnRhbiIsImVrIG1pbnV0Il0sbW06W0krIiBtaW50YW1uaSIsSSsiIG1pbnRhbSJdLGg6WyJla2Egdm9yYW4iLCJlayB2''@;'; put 'put ''b3IiXSxoaDpbSSsiIHZvcmFtbmkiLEkrIiB2b3JhbSJdLGQ6WyJla2EgZGlzYW4iLCJlayBkaXMiXSxkZDpbSSsiIGRpc2FtbmkiLEkrIiBkaXMiXSxNOlsiZWthIG1ob2luZWFuIiwiZWsgbWhvaW5vIl0sTU06W0krIiBtaG9pbmVhbW5pIixJKyIgbWhvaW5lIl0seTpbImVrYSB2b3JzYW4i''@;'; put 'put ''LCJlayB2b3JvcyJdLHl5OltJKyIgdm9yc2FtbmkiLEkrIiB2b3JzYW0iXX07cmV0dXJuIEE/TVtUXVswXTpNW1RdWzFdfVMuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7c3RhbmRhbG9uZToiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRl''@;'; put 'put ''bWJyX090dWJyX05vdmVtYnJfRGV6ZW1iciIuc3BsaXQoIl8iKSxmb3JtYXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hl''@;'; put 'put ''YV9EZXplbWJyYWNoZWEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5''@;'; put 'put ''czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdIixMTExMOiJk''@;'; put 'put ''ZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIsbmV4dERheToiW0ZhbGVhbV0gTFQiLG5leHRXZWVrOiJbRnVkZGxvXSBkZGRkWyxdIExUIixsYXN0RGF5''@;'; put 'put ''OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltGYXR0bG9dIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOmgsc3M6aCxtOmgsbW06aCxoLGhoOmgsZDpoLGRkOmgsTTpoLE1NOmgseTpoLHl5Omh9LGRheU9mTW9udGhPcmRp''@;'; put 'put ''bmFsUGFyc2U6L1xkezEsMn0oZXIpLyxvcmRpbmFsOmZ1bmN0aW9uKEksZil7cmV0dXJuIkQiPT09Zj9JKyJlciI6SX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihJLGYpe3JldHVy''@;'; put 'put ''biAxMj09PUkmJihJPTApLCJyYXRpIj09PWY/STw0P0k6SSsxMjoic29rYWxsaW0iPT09Zj9JOiJkb25wYXJhbSI9PT1mP0k+MTI/STpJKzEyOiJzYW5qZSI9PT1mP0krMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihJLGYsVCl7cmV0dXJuIEk8ND8icmF0aSI6STwxMj8ic29rYWxsaW0i''@;'; put 'put ''Okk8MTY/ImRvbnBhcmFtIjpJPDIwPyJzYW5qZSI6InJhdGkifX0pfShkKDk3NTg2KSl9LDI2ODI3KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUwYWU3IiwyOiJcdTBhZTgiLDM6Ilx1MGFlOSIsNDoiXHUwYWVhIiw1OiJcdTBhZWIiLDY6Ilx1MGFlYyIs''@;'; put 'put ''NzoiXHUwYWVkIiw4OiJcdTBhZWUiLDk6Ilx1MGFlZiIsMDoiXHUwYWU2In0sbz17Ilx1MGFlNyI6IjEiLCJcdTBhZTgiOiIyIiwiXHUwYWU5IjoiMyIsIlx1MGFlYSI6IjQiLCJcdTBhZWIiOiI1IiwiXHUwYWVjIjoiNiIsIlx1MGFlZCI6IjciLCJcdTBhZWUiOiI4IiwiXHUwYWVmIjoiOSIs''@;'; put 'put ''Ilx1MGFlNiI6IjAifTtTLmRlZmluZUxvY2FsZSgiZ3UiLHttb250aHM6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFlXHUwYWJl''@;'; put 'put ''XHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZlx1MGFiMl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZVx1MGE4OF9cdTBhOTFcdTBhOTdcdTBhYjhcdTBhY2RcdTBhOWZfXHUwYWI4XHUwYWFhXHUw''@;'; put 'put ''YWNkXHUwYTlmXHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYThcdTBhYjVcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3XHUwYWFlXHUwYWNkXHUw''@;'; put 'put ''YWFjXHUwYWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzEuX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMS5fXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFi''@;'; put 'put ''MFx1MGFiZi5fXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmUuX1x1MGE5MVx1MGE5Ny5fXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3Ll9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2QuX1x1MGFhOFx1MGFiNVx1MGFjNy5f''@;'; put 'put ''XHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBhYjBcdTBhYjVcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI4XHUwYWNiXHUwYWFlXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFi''@;'; put 'put ''M1x1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBh''@;'; put 'put ''YThcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYWIwXHUwYWI1XHUwYWJmX1x1MGFiOFx1MGFjYlx1MGFhZV9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFj''@;'; put 'put ''MV9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhYjBfXHUwYWI4XHUwYWNiX1x1MGFhZVx1MGE4Ml9cdTBhYWNcdTBhYzFfXHUwYTk3XHUwYWMxX1x1MGFiNlx1MGFjMV9cdTBhYjYiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMVFM6IkEgaDptbTpzcyBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGE4Nlx1MGE5Y10gTFQiLG5leHRE''@;'; put 'put ''YXk6IltcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhOTdcdTBhODdcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixsYXN0V2VlazoiW1x1MGFhYVx1MGFiZVx1MGE5Ylx1MGFiMlx1MGFiZV0gZGRkZCwgTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGFhZVx1MGFiZSIscGFzdDoiJXMgXHUwYWFhXHUwYWI5XHUwYWM3XHUwYWIyXHUwYWJlIixzOiJcdTBhODVcdTBhYWVcdTBhYzFcdTBhOTUgXHUwYWFhXHUwYWIzXHUwYWNiIixzczoiJWQgXHUwYWI4XHUwYWM3XHUwYTk1XHUw''@;'; put 'put ''YTgyXHUwYWExIixtOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixtbToiJWQgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixoOiJcdTBhOGZcdTBhOTUgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixoaDoiJWQgXHUwYTk1XHUwYWIyXHUwYWJl''@;'; put 'put ''XHUwYTk1IixkOiJcdTBhOGZcdTBhOTUgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixkZDoiJWQgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixNOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIixNTToiJWQgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUw''@;'; put 'put ''YWNiIix5OiJcdTBhOGZcdTBhOTUgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3Iix5eToiJWQgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3In0scHJlcGFyc2U6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvW1x1MGFlN1x1MGFlOFx1MGFlOVx1MGFlYVx1MGFlYlx1MGFlY1x1MGFlZFx1''@;'; put 'put ''MGFlZVx1MGFlZlx1MGFlNl0vZyxmdW5jdGlvbihUKXtyZXR1cm4gb1tUXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oVCl7cmV0dXJuIGhbVF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYWIwXHUwYWJlXHUwYWE0fFx1MGFhY1x1MGFh''@;'; put 'put ''YVx1MGFjYlx1MGFiMHxcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjB8XHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZixUKXtyZXR1cm4gMTI9PT1mJiYoZj0wKSwiXHUwYWIwXHUwYWJlXHUwYWE0Ij09PVQ/Zjw0P2Y6ZisxMjoiXHUwYWI4XHUwYWI1XHUw''@;'; put 'put ''YWJlXHUwYWIwIj09PVQ/ZjoiXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIj09PVQ/Zj49MTA/ZjpmKzEyOiJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiPT09VD9mKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZixULEEpe3JldHVybiBmPDQ/Ilx1MGFiMFx1MGFiZVx1MGFhNCI6Zjwx''@;'; put 'put ''MD8iXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIjpmPDE3PyJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiOmY8MjA/Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI6Ilx1MGFiMFx1MGFiZVx1MGFhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDIxOTM2KHRlLGosZCl7IWZ1''@;'; put 'put ''bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1''@;'; put 'put ''MDVkY19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUwNWUxXHUwNWU0XHUwNWQ4XHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVl''@;'; put 'put ''N1x1MDVkOFx1MDVkNVx1MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUw''@;'; put 'put ''NWYzX1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVm''@;'; put 'put ''M19cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUwNWU5XHUwNWQ1XHUwNWRmX1x1MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1''@;'; put 'put ''ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQxXHUwNWVhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1''@;'; put 'put ''ZDFcdTA1ZjNfXHUwNWQyXHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYzX1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9cdTA1ZDJfXHUwNWQzX1x1MDVkNF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoi''@;'; put 'put ''RCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1ZDFcdTA1YmVdTFQiLG5leHREYXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUw''@;'; put 'put ''NWJlXUxUIixuZXh0V2VlazoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERheToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxhc3RXZWVrOiJbXHUwNWQxXHUwNWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1''@;'; put 'put ''ZDBcdTA1ZDdcdTA1ZThcdTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUwNWQzICVzIixwYXN0OiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVk''@;'; put 'put ''ZVx1MDVlMVx1MDVlNFx1MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIsbW06IiVkIFx1MDVkM1x1MDVlN1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUw''@;'; put 'put ''NWQ0IixoaDpmdW5jdGlvbihvKXtyZXR1cm4gMj09PW8/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6bysiIFx1MDVlOVx1MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1MDVkNVx1MDVkZCIsZGQ6ZnVuY3Rpb24obyl7cmV0dXJuIDI9PT1vPyJcdTA1ZDlcdTA1''@;'; put 'put ''ZDVcdTA1ZGVcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm8rIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxNOiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTkiLE1NOmZ1bmN0aW9uKG8pe3JldHVybiAyPT09bz8iXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjpvKyIg''@;'; put 'put ''XHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0Iix5eTpmdW5jdGlvbihvKXtyZXR1cm4gMj09PW8/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6byUxMD09MCYmMTAhPT1vP28rIiBcdTA1ZTlcdTA1ZTBcdTA1''@;'; put 'put ''ZDQiOm8rIiBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlc''@;'; put 'put ''dTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVl''@;'; put 'put ''OHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybi9eKFx1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1''@;'; put 'put ''ZThcdTA1ZDEpJC8udGVzdChvKX0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDU/Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOm88MTA/Ilx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6bzwxMj9mPydcdTA1''@;'; put 'put ''ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2JzoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6bzwxOD9mPydcdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2JzoiXHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVk''@;'; put 'put ''NFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6Ilx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSJ9fSl9KGQoOTc1ODYpKX0sMzEzMzIodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJc''@;'; put 'put ''dTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxvPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoi''@;'; put 'put ''NyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9LEk9Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzB8XHUwOTJiXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0''@;'; put 'put ''OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJ8XHUwOTM4XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIv''@;'; put 'put ''aSwvXlx1MDkyOFx1MDkzNXxcdTA5MjhcdTA5MzVcdTA5MDIvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMnxcdTA5MjZcdTA5M2ZcdTA5MzgvaV07Uy5kZWZpbmVMb2NhbGUoImhpIix7bW9udGhzOntmb3JtYXQ6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5''@;'; put 'put ''M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVc''@;'; put 'put ''dTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4''@;'; put 'put ''XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkz''@;'; put 'put ''MFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1''@;'; put 'put ''MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5M2NcdTA5MzAuX1x1MDkyZVx1MDkzZVx1''@;'; put 'put ''MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDguX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDkzZlx1MDkyNC5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQy''@;'; put 'put ''Ll9cdTA5MjhcdTA5MzUuX1x1MDkyNlx1MDkzZlx1MDkzOC4iLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyXHUwOTM1XHUw''@;'; put 'put ''OTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1''@;'; put 'put ''MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMl9cdTA5MmNcdTA5NDFcdTA5MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1''@;'; put 'put ''MDk0ZFx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFfXHUwOTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExUUzoiQSBoOm1tOnNzIFx1MDkyY1x1MDkxY1x1MDk0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwg''@;'; put 'put ''QSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyJ9LG1vbnRoc1BhcnNlOkksbG9uZ01vbnRoc1BhcnNlOkksc2hvcnRNb250aHNQYXJzZTpbL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5''@;'; put 'put ''MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIvaSwvXlx1''@;'; put 'put ''MDkyOFx1MDkzNS9pLC9eXHUwOTI2XHUwOTNmXHUwOTM4L2ldLG1vbnRoc1JlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0''@;'; put 'put ''MHxcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5''@;'; put 'put ''MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDh8XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1''@;'; put 'put ''MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAy''@;'; put 'put ''XHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MDkxY1x1MDky''@;'; put 'put ''OFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVc''@;'; put 'put ''dTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDh8XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1''@;'; put 'put ''MDkzOFx1MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQy''@;'; put 'put ''XHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5''@;'; put 'put ''MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDA/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5''@;'; put 'put ''MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDA/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4P3xc''@;'; put 'put ''dTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjQ/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0P1wuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJc''@;'; put 'put ''dTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzA/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZc''@;'; put 'put ''dTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzA/KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xc''@;'; put 'put ''dTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcLj8p''@;'; put 'put ''L2ksY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmFcdTA5M2ZcdTA5MWJcdTA5MzJcdTA5NDddIGRkZGQs''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5MmVcdTA5NDdcdTA5MDIiLHBhc3Q6IiVzIFx1MDkyYVx1MDkzOVx1MDkzMlx1MDk0NyIsczoiXHUwOTE1XHUwOTQxXHUwOTFiIFx1MDkzOVx1MDk0MCBcdTA5MTVcdTA5NGRcdTA5MzdcdTA5MjMiLHNzOiIl''@;'; put 'put ''ZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjEiLG06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLGg6Ilx1MDkwZlx1MDkxNSBcdTA5MThcdTA5MDJcdTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThc''@;'; put 'put ''dTA5MDJcdTA5MWZcdTA5NDciLGQ6Ilx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5NDBcdTA5MjhcdTA5NDciLE1NOiIlZCBcdTA5MmVcdTA5MzlcdTA5NDBcdTA5MjhcdTA5''@;'; put 'put ''NDciLHk6Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciLHl5OiIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzcifSxwcmVwYXJzZTpmdW5jdGlvbihBKXtyZXR1cm4gQS5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUw''@;'; put 'put ''OTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKE0pe3JldHVybiBvW01dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oQSl7cmV0dXJuIEEucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihNKXtyZXR1cm4gaFtNXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjR8XHUwOTM4XHUwOTQx''@;'; put 'put ''XHUwOTJjXHUwOTM5fFx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMHxcdTA5MzZcdTA5M2VcdTA5MmUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihBLE0pe3JldHVybiAxMj09PUEmJihBPTApLCJcdTA5MzBcdTA5M2VcdTA5MjQiPT09TT9BPDQ/QTpBKzEyOiJcdTA5MzhcdTA5NDFcdTA5''@;'; put 'put ''MmNcdTA5MzkiPT09TT9BOiJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiPT09TT9BPj0xMD9BOkErMTI6Ilx1MDkzNlx1MDkzZVx1MDkyZSI9PT1NP0ErMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihBLE0sTyl7cmV0dXJuIEE8ND8iXHUwOTMwXHUwOTNlXHUwOTI0IjpBPDEw''@;'; put 'put ''PyJcdTA5MzhcdTA5NDFcdTA5MmNcdTA5MzkiOkE8MTc/Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI6QTwyMD8iXHUwOTM2XHUwOTNlXHUwOTJlIjoiXHUwOTMwXHUwOTNlXHUwOTI0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGQoOTc1ODYpKX0sOTE5NTcodGUsaixkKXshZnVu''@;'; put 'put ''Y3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGgoSSxmLFQpe3ZhciBBPUkrIiAiO3N3aXRjaChUKXtjYXNlInNzIjpyZXR1cm4gQSsoMT09PUk/InNla3VuZGEiOjI9PT1JfHwzPT09SXx8ND09PUk/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gZj8iamVkbmEgbWlu''@;'; put 'put ''dXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gQSsoMT09PUk/Im1pbnV0YSI6Mj09PUl8fDM9PT1JfHw0PT09ST8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4gZj8iamVkYW4gc2F0IjoiamVkbm9nIHNhdGEiO2Nhc2UiaGgiOnJldHVybiBBKygxPT09ST8ic2F0''@;'; put 'put ''IjoyPT09SXx8Mz09PUl8fDQ9PT1JPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBBKygxPT09ST8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBBKygxPT09ST8ibWplc2VjIjoyPT09SXx8Mz09PUl8fDQ9PT1JPyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVy''@;'; put 'put ''biBBKygxPT09ST8iZ29kaW5hIjoyPT09SXx8Mz09PUl8fDQ9PT1JPyJnb2RpbmUiOiJnb2RpbmEiKX19Uy5kZWZpbmVMb2NhbGUoImhyIix7bW9udGhzOntmb3JtYXQ6InNpamVcdTAxMGRuamFfdmVsamFcdTAxMGRlX29cdTAxN2V1amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3Jwbmph''@;'; put 'put ''X2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZVx1MDEwZGFual92ZWxqYVx1MDEwZGFfb1x1MDE3ZXVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVk''@;'; put 'put ''ZW5pX3Byb3NpbmFjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoic2lqLl92ZWxqLl9vXHUwMTdldS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxq''@;'; put 'put ''YWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU0gWVlZWSIsTExMOiJEbyBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0ifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtj''@;'; put 'put ''YXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0''@;'; put 'put ''dXJuIltwcm9cdTAxNjFsdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltw''@;'; put 'put ''cm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6aCxtOmgsbW06aCxoLGhoOmgsZDoiZGFuIixkZDpoLE06Im1qZXNlYyIsTU06aCx5OiJnb2RpbnUiLHl5''@;'; put 'put ''Omh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oZCg5NzU4NikpfSw0ODkyOCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIGg9InZhc1x4ZTFybmFwIGhceGU5dGZcdTAxNTFuIGtlZGRl''@;'; put 'put ''biBzemVyZFx4ZTFuIGNzXHhmY3RceGY2cnRceGY2a1x4ZjZuIHBceGU5bnRla2VuIHN6b21iYXRvbiIuc3BsaXQoIiAiKTtmdW5jdGlvbiBvKFQsQSxNLE8pe3ZhciBEPVQ7c3dpdGNoKE0pe2Nhc2UicyI6cmV0dXJuIE98fEE/Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmMiOiJuXHhlOWhc''@;'; put 'put ''eGUxbnkgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJzcyI6cmV0dXJuIEQrKE98fEEpPyIgbVx4ZTFzb2RwZXJjIjoiIG1ceGUxc29kcGVyY2UiO2Nhc2UibSI6cmV0dXJuImVneSIrKE98fEE/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJtbSI6cmV0dXJuIEQrKE98fEE/IiBwZXJjIjoiIHBlcmNlIik7''@;'; put 'put ''Y2FzZSJoIjpyZXR1cm4iZWd5IisoT3x8QT8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiaGgiOnJldHVybiBEKyhPfHxBPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJkIjpyZXR1cm4iZWd5IisoT3x8QT8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiZGQiOnJldHVybiBEKyhP''@;'; put 'put ''fHxBPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJNIjpyZXR1cm4iZWd5IisoT3x8QT8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlIk1NIjpyZXR1cm4gRCsoT3x8QT8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlInkiOnJldHVybiJlZ3kiKyhPfHxBPyIgXHhlOXYiOiIgXHhl''@;'; put 'put ''OXZlIik7Y2FzZSJ5eSI6cmV0dXJuIEQrKE98fEE/IiBceGU5diI6IiBceGU5dmUiKX1yZXR1cm4iIn1mdW5jdGlvbiBJKFQpe3JldHVybihUPyIiOiJbbVx4ZmFsdF0gIikrIlsiK2hbdGhpcy5kYXkoKV0rIl0gTFRbLWtvcl0ifVMuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoiamFudVx4''@;'; put 'put ''ZTFyX2ZlYnJ1XHhlMXJfbVx4ZTFyY2l1c19ceGUxcHJpbGlzX21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMuX1x4ZTFw''@;'; put 'put ''ci5fbVx4ZTFqLl9qXHhmYW4uX2pceGZhbC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRkX3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTludGVrX3N6''@;'; put 'put ''b21iYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoidmFzX2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpz''@;'; put 'put ''cyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZLiBNTU1NIEQuIixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExMTDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tIn0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1bmN0aW9uKFQpe3JldHVybiJ1Ij09PVQuY2hhckF0KDEpLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFQsQSxNKXtyZXR1cm4gVDwxMj8hMD09PU0/ImRlIjoiREUiOiEwPT09TT8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gSS5jYWxsKHRoaXMsITApfSxsYXN0RGF5OiJbdGVnbmFwXSBMVFsta29yXSIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jYWxsKHRoaXMsITEpfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBtXHhmYWx2YSIscGFzdDoiJXMiLHM6byxzczpvLG06''@;'; put 'put ''byxtbTpvLGg6byxoaDpvLGQ6byxkZDpvLE06byxNTTpvLHk6byx5eTpvfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNTYyMTUodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O1MuZGVmaW5lTG9jYWxlKCJoeS1hbSIse21vbnRoczp7Zm9ybWF0OiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zlx1''@;'; put 'put ''MDU2Yl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RcdTA1NmJf''@;'; put 'put ''XHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkXHUwNTZiX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBc''@;'; put 'put ''dTA1NmJfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2YiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA1NzBcdTA1NzhcdTA1ODJc''@;'; put 'put ''dTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3''@;'; put 'put ''OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1''@;'; put 'put ''NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MCIuc3BsaXQoIl8i''@;'; put 'put ''KX0sbW9udGhzU2hvcnQ6Ilx1MDU3MFx1MDU3Nlx1MDU3ZV9cdTA1ODNcdTA1N2ZcdTA1ODBfXHUwNTc0XHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MF9cdTA1NzRcdTA1NzVcdTA1N2RfXHUwNTcwXHUwNTc2XHUwNTdkX1x1MDU3MFx1MDU2Y1x1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1''@;'; put 'put ''N2RfXHUwNTdkXHUwNTdhXHUwNTdmX1x1MDU3MFx1MDU2Zlx1MDU3Zl9cdTA1NzZcdTA1NzRcdTA1NjJfXHUwNTY0XHUwNTZmXHUwNTdmIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1NmZcdTA1NmJcdTA1ODBcdTA1NjFcdTA1NmZcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTZmXHUwNTc4XHUw''@;'; put 'put ''NTgyXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzlcdTA1NzhcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTcwXHUwNTZiXHUw''@;'; put 'put ''NTc2XHUwNTYzXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Mlx1MDU2MVx1MDU2OV9cdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjFcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4''@;'; put 'put ''MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgw''@;'; put 'put ''XHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1NjFcdTA1NzVcdTA1N2RcdTA1ODVcdTA1ODBdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbXHUwNTdlXHUwNTYxXHUwNTcyXHUwNTY4XSBMVCIsbGFzdERheToiW1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0s''@;'; put 'put ''bGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDU2MVx1MDU3Nlx1MDU4MVx1MDU2MVx1MDU2ZV0gZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA1NzBcdTA1''@;'; put 'put ''NjVcdTA1N2ZcdTA1NzgiLHBhc3Q6IiVzIFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3YiIsczoiXHUwNTc0XHUwNTZiIFx1MDU4NFx1MDU2MVx1MDU3Nlx1MDU2YiBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLHNzOiIlZCBcdTA1N2VcdTA1NjFcdTA1''@;'; put 'put ''NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLG06Ilx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsbW06IiVkIFx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsaDoiXHUwNTZhXHUwNTYxXHUwNTc0IixoaDoiJWQgXHUwNTZhXHUwNTYxXHUwNTc0IixkOiJcdTA1ODVcdTA1ODAiLGRk''@;'; put 'put ''OiIlZCBcdTA1ODVcdTA1ODAiLE06Ilx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIsTU06IiVkIFx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIseToiXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIix5eToiJWQgXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIn0sbWVyaWRpZW1QYXJzZTovXHUwNTYz''@;'; put 'put ''XHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxfFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MXxcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1''@;'; put 'put ''XHUwNTYxXHUwNTc2Lyxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybi9eKFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYpJC8udGVzdChvKX0sbWVyaWRpZW06ZnVuY3Rpb24obyl7''@;'; put 'put ''cmV0dXJuIG88ND8iXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxIjpvPDEyPyJcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjEiOm88MTc/Ilx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MSI6Ilx1''@;'; put 'put ''MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn18XGR7MSwyfS0oXHUwNTZiXHUwNTc2fFx1MDU4MFx1MDU2NCkvLG9yZGluYWw6ZnVuY3Rpb24obyxJKXtzd2l0Y2goSSl7Y2FzZSJEREQiOmNhc2Ui''@;'; put 'put ''dyI6Y2FzZSJXIjpjYXNlIkRERG8iOnJldHVybiAxPT09bz9vKyItXHUwNTZiXHUwNTc2IjpvKyItXHUwNTgwXHUwNTY0IjtkZWZhdWx0OnJldHVybiBvfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYpKX0sNTg2KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxf''@;'; put 'put ''QWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''TWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtw''@;'; put 'put ''dWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihvLEkpe3JldHVybiAxMj09PW8mJihvPTApLCJwYWdpIj09PUk/bzoic2lhbmciPT09ST9vPj0xMT9vOm8rMTI6InNvcmUiPT09SXx8Im1hbGFtIj09PUk/bysx''@;'; put 'put ''Mjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG8sSSxmKXtyZXR1cm4gbzwxMT8icGFnaSI6bzwxNT8ic2lhbmciOm88MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJhcGEgZGV0aWsiLHNz''@;'; put 'put ''OiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oZCg5NzU4''@;'; put 'put ''NikpfSw5MDIxMSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaChmKXtyZXR1cm4gZiUxMDA9PTExfHxmJTEwIT0xfWZ1bmN0aW9uIG8oZixULEEsTSl7dmFyIE89ZisiICI7c3dpdGNoKEEpe2Nhc2UicyI6cmV0dXJuIFR8fE0/Im5va2tyYXIgc2VrXHhmYW5k''@;'; put 'put ''dXIiOiJub2trcnVtIHNla1x4ZmFuZHVtIjtjYXNlInNzIjpyZXR1cm4gaChmKT9PKyhUfHxNPyJzZWtceGZhbmR1ciI6InNla1x4ZmFuZHVtIik6Tysic2VrXHhmYW5kYSI7Y2FzZSJtIjpyZXR1cm4gVD8ibVx4ZWRuXHhmYXRhIjoibVx4ZWRuXHhmYXR1IjtjYXNlIm1tIjpyZXR1cm4gaChm''@;'; put 'put ''KT9PKyhUfHxNPyJtXHhlZG5ceGZhdHVyIjoibVx4ZWRuXHhmYXR1bSIpOlQ/TysibVx4ZWRuXHhmYXRhIjpPKyJtXHhlZG5ceGZhdHUiO2Nhc2UiaGgiOnJldHVybiBoKGYpP08rKFR8fE0/ImtsdWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik6Tysia2x1a2t1c3R1bmQiO2Nhc2UiZCI6''@;'; put 'put ''cmV0dXJuIFQ/ImRhZ3VyIjpNPyJkYWciOiJkZWdpIjtjYXNlImRkIjpyZXR1cm4gaChmKT9UP08rImRhZ2FyIjpPKyhNPyJkYWdhIjoiZFx4ZjZndW0iKTpUP08rImRhZ3VyIjpPKyhNPyJkYWciOiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gVD8ibVx4ZTFudVx4ZjB1ciI6TT8ibVx4ZTFudVx4''@;'; put 'put ''ZjAiOiJtXHhlMW51XHhmMGkiO2Nhc2UiTU0iOnJldHVybiBoKGYpP1Q/TysibVx4ZTFudVx4ZjBpciI6TysoTT8ibVx4ZTFudVx4ZjBpIjoibVx4ZTFudVx4ZjB1bSIpOlQ/TysibVx4ZTFudVx4ZjB1ciI6TysoTT8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiKTtjYXNlInkiOnJldHVy''@;'; put 'put ''biBUfHxNPyJceGUxciI6Ilx4ZTFyaSI7Y2FzZSJ5eSI6cmV0dXJuIGgoZik/TysoVHx8TT8iXHhlMXIiOiJceGUxcnVtIik6TysoVHx8TT8iXHhlMXIiOiJceGUxcmkiKX19Uy5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21h''@;'; put 'put ''XHhlZF9qXHhmYW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhm''@;'; put 'put ''M3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4''@;'; put 'put ''ZmVyaV9taVx4ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZ''@;'; put 'put ''IixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixs''@;'; put 'put ''YXN0RGF5OiJbXHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4iLHM6byxzczpvLG06byxtbTpvLGg6''@;'; put 'put ''ImtsdWtrdXN0dW5kIixoaDpvLGQ6byxkZDpvLE06byxNTTpvLHk6byx5eTpvfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sMjIzNDAodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO1MuZGVmaW5lTG9jYWxlKCJpdC1jaCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21h''@;'; put 'put ''cl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1''@;'; put 'put ''bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09nZ2kgYWxsZV0gTFQiLG5leHREYXk6IltEb21hbmkgYWxsZV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbGxlXSBMVCIsbGFzdERheToiW0llcmkgYWxsZV0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVCI6IltsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihvKXtyZXR1cm4oL15bMC05XS4rJC8udGVzdChv''@;'; put 'put ''KT8idHJhIjoiaW4iKSsiICIrb30scGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsTToidW4gbWVzZSIsTU06''@;'; put 'put ''IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNzAxNzAodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1Mu''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJpdCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFn''@;'; put 'put ''X2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVy''@;'; put 'put ''X2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbT2dnaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJb''@;'; put 'put ''RG9tYW5pIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFz''@;'; put 'put ''dERheTpmdW5jdGlvbigpe3JldHVybiJbSWVyaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltMYSBzY29yc2FdIGRkZGQgW2EiKyh0aGlzLmhvdXJz''@;'; put 'put ''KCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQiOiJbTG8gc2NvcnNvXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidHJh''@;'; put 'put ''ICVzIixwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIix3OiJ1bmEgc2V0dGltYW5hIix3dzoiJWQgc2V0dGlt''@;'; put 'put ''YW5lIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSwzOTc3MCh0ZSxqLGQpeyFmdW5jdGlv''@;'; put 'put ''bihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImphIix7ZXJhczpbe3NpbmNlOiIyMDE5LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiJcdTRlZTRcdTU0OGMiLG5hcnJvdzoiXHUzMmZmIixhYmJyOiJSIn0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoiMjAxOS0wNC0zMCIsb2Zmc2V0''@;'; put 'put ''OjEsbmFtZToiXHU1ZTczXHU2MjEwIixuYXJyb3c6Ilx1MzM3YiIsYWJicjoiSCJ9LHtzaW5jZToiMTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6Ilx1NjYyZFx1NTQ4YyIsbmFycm93OiJcdTMzN2MiLGFiYnI6IlMifSx7c2luY2U6IjE5MTItMDctMzAiLHVu''@;'; put 'put ''dGlsOiIxOTI2LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiJcdTU5MjdcdTZiNjMiLG5hcnJvdzoiXHUzMzdkIixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0OjYsbmFtZToiXHU2NjBlXHU2Y2JiIixuYXJyb3c6Ilx1MzM3ZSIsYWJicjoiTSJ9''@;'; put 'put ''LHtzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEiLG9mZnNldDoxLG5hbWU6Ilx1ODk3Zlx1NjZhNiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiXHU3ZDAwXHU1MTQzXHU1MjRkIixuYXJyb3c6''@;'; put 'put ''IkJDIixhYmJyOiJCQyJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8oXHU1MTQzfFxkKylcdTVlNzQvLGVyYVllYXJPcmRpbmFsUGFyc2U6ZnVuY3Rpb24obyxJKXtyZXR1cm4iXHU1MTQzIj09PUlbMV0/MTpwYXJzZUludChJWzFdfHxvLDEwKX0sbW9udGhzOiIxXHU2NzA4XzJcdTY3MDhfM1x1''@;'; put 'put ''NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2''@;'; put 'put ''NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjVlNVx1NjZkY1x1NjVlNV9cdTY3MDhcdTY2ZGNcdTY1ZTVfXHU3MDZiXHU2NmRjXHU2NWU1X1x1NmMzNFx1NjZkY1x1NjVlNV9cdTY3MjhcdTY2ZGNcdTY1ZTVfXHU5MWQxXHU2''@;'; put 'put ''NmRjXHU2NWU1X1x1NTcxZlx1NjZkY1x1NjVlNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3Mjhf''@;'; put 'put ''XHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3''@;'; put 'put ''NE1cdTY3MDhEXHU2NWU1IGRkZGQgSEg6bW0iLGw6IllZWVkvTU0vREQiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUoZGRkKSBISDptbSJ9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L1x1NTM0OFx1NTI0ZHxcdTUzNDhcdTVmOGMvaSxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybiJcdTUzNDhcdTVmOGMiPT09b30sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDEyPyJcdTUzNDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1''@;'; put 'put ''NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVdIExUIixuZXh0V2VlazpmdW5jdGlvbihvKXtyZXR1cm4gby53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTY1ZTVdIExUIixsYXN0V2Vl''@;'; put 'put ''azpmdW5jdGlvbihvKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1vLndlZWsoKT8iW1x1NTE0OFx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5jdGlvbihvLEkpe3N3aXRjaChJKXtj''@;'; put 'put ''YXNlInkiOnJldHVybiAxPT09bz8iXHU1MTQzXHU1ZTc0IjpvKyJcdTVlNzQiO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIG8rIlx1NjVlNSI7ZGVmYXVsdDpyZXR1cm4gb319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NjU3''@;'; put 'put ''MFx1NzlkMiIsc3M6IiVkXHU3OWQyIixtOiIxXHU1MjA2IixtbToiJWRcdTUyMDYiLGg6IjFcdTY2NDJcdTk1OTMiLGhoOiIlZFx1NjY0Mlx1OTU5MyIsZDoiMVx1NjVlNSIsZGQ6IiVkXHU2NWU1IixNOiIxXHUzMGY2XHU2NzA4IixNTToiJWRcdTMwZjZcdTY3MDgiLHk6IjFcdTVlNzQiLHl5''@;'; put 'put ''OiIlZFx1NWU3NCJ9fSl9KGQoOTc1ODYpKX0sNzM4NzUodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJf''@;'; put 'put ''Tm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihvLEkpe3JldHVybiAx''@;'; put 'put ''Mj09PW8mJihvPTApLCJlbmppbmciPT09ST9vOiJzaXlhbmciPT09ST9vPj0xMT9vOm8rMTI6InNvbnRlbiI9PT1JfHwibmRhbHUiPT09ST9vKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDExPyJlbmppbmciOm88MTU/InNpeWFuZyI6bzwxOT8ic29udGVu''@;'; put 'put ''IjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBl''@;'; put 'put ''bmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0Iixo''@;'; put 'put ''OiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYpKX0sNzk0OTkodGUsaixkKXshZnVuY3Rpb24o''@;'; put 'put ''Uyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJrYSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBkNFx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkNVx1MTBkMFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEw''@;'; put 'put ''ZTJcdTEwZDhfXHUxMGQwXHUxMGRlXHUxMGUwXHUxMGQ4XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRhXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1''@;'; put 'put ''MTBkNVx1MTBkOFx1MTBlMVx1MTBlMlx1MTBkZF9cdTEwZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUxMGU1XHUxMGUyXHUxMGRkXHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1''@;'; put 'put ''MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTBkOFx1MTBkMFx1MTBkY19cdTEwZDdcdTEwZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUw''@;'; put 'put ''X1x1MTBkMFx1MTBkZVx1MTBlMF9cdTEwZGJcdTEwZDBcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUxMGUxXHUxMGQ0XHUxMGU1X1x1MTBkZFx1MTBlNVx1MTBlMl9cdTEwZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0''@;'; put 'put ''XHUxMGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1''@;'; put 'put ''MTBkN1x1MTBkOF9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1''@;'; put 'put ''MTBkNVx1MTBkOF9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBcdTEwZTFfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBk''@;'; put 'put ''MFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBk''@;'; put 'put ''MFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6LyhcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDB8XHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQy''@;'; put 'put ''KS99LHdlZWtkYXlzU2hvcnQ6Ilx1MTBkOVx1MTBkNVx1MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEwZWVcdTEwZTNcdTEwZDdfXHUxMGRlXHUxMGQwXHUxMGUwX1x1MTBlOFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiXHUxMGQ5XHUxMGQ1X1x1MTBkZFx1MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUxMGQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01N''@;'; put 'put ''L1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTBkM1x1MTBlNlx1MTBkNFx1MTBlMV0gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEw''@;'; put 'put ''ZDVcdTEwZDBcdTEwZGFdIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dFdlZWs6IltcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBk''@;'; put 'put ''NF0iLGxhc3RXZWVrOiJbXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihvKXtyZXR1cm4gby5yZXBsYWNlKC8oXHUxMGVjXHUxMGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBk''@;'; put 'put ''N3xcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDd8XHUxMGVjXHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihJLGYsVCl7cmV0dXJuIlx1MTBkOCI9PT1UP2YrIlx1MTBlOFx1MTBkOCI6ZitUKyJcdTEwZThcdTEwZDgifSl9LHBh''@;'; put 'put ''c3Q6ZnVuY3Rpb24obyl7cmV0dXJuLyhcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOHxcdTEwZDNcdTEwZTZcdTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChvKT9vLnJlcGxhY2UoLyhc''@;'; put 'put ''dTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChvKT9vLnJlcGxhY2UoL1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUx''@;'; put 'put ''MGRjIik6b30sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUx''@;'; put 'put ''MGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1MTBkM1x1MTBlNlx1MTBkNCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUx''@;'; put 'put ''MGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0t''@;'; put 'put ''XHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKG8pe3JldHVybiAwPT09bz9vOjE9PT1vP28rIi1cdTEwZGFcdTEwZDgiOm88MjB8fG88PTEwMCYmbyUyMD09MHx8byUxMDA9PTA/Ilx1MTBkYlx1MTBkNC0iK286bysiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDkz''@;'; put 'put ''NTczKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MDoiLVx1MDQ0OFx1MDQ1NiIsMToiLVx1MDQ0OFx1MDQ1NiIsMjoiLVx1MDQ0OFx1MDQ1NiIsMzoiLVx1MDQ0OFx1MDQ1NiIsNDoiLVx1MDQ0OFx1MDQ1NiIsNToiLVx1MDQ0OFx1MDQ1NiIsNjoiLVx1MDQ0OFx1''@;'; put 'put ''MDQ0YiIsNzoiLVx1MDQ0OFx1MDQ1NiIsODoiLVx1MDQ0OFx1MDQ1NiIsOToiLVx1MDQ0OFx1MDQ0YiIsMTA6Ii1cdTA0NDhcdTA0NGIiLDIwOiItXHUwNDQ4XHUwNDRiIiwzMDoiLVx1MDQ0OFx1MDQ0YiIsNDA6Ii1cdTA0NDhcdTA0NGIiLDUwOiItXHUwNDQ4XHUwNDU2Iiw2MDoiLVx1MDQ0''@;'; put 'put ''OFx1MDQ0YiIsNzA6Ii1cdTA0NDhcdTA0NTYiLDgwOiItXHUwNDQ4XHUwNDU2Iiw5MDoiLVx1MDQ0OFx1MDQ0YiIsMTAwOiItXHUwNDQ4XHUwNDU2In07Uy5kZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiJcdTA0OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDli''@;'; put 'put ''XHUwNDNmXHUwNDMwXHUwNDNkX1x1MDQzZFx1MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNcdTA0NTZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0''@;'; put 'put ''NTZcdTA0M2JcdTA0MzRcdTA0MzVfXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQzYVx1MDRhZlx1MDQzOVx1MDQzNVx1MDQzYV9cdTA0OWJcdTA0MzBcdTA0MzdcdTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUw''@;'; put 'put ''NDMwX1x1MDQzNlx1MDQzNVx1MDQzYlx1MDQ0Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDliXHUwNDMwXHUwNGEzX1x1MDQzMFx1MDQ5Ylx1MDQzZl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQz''@;'; put 'put ''Y1x1MDQzMFx1MDQzY19cdTA0M2NcdTA0MzBcdTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0OWJcdTA0NGJcdTA0NDBfXHUwNDliXHUwNDMwXHUwNDM3X1x1MDQ5Ylx1MDQzMFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6Ilx1MDQzNlx1MDQzNVx1MDQzYVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1''@;'; put 'put ''MDQ0MFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM2XHUwNGIxXHUwNDNjXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJcdTA0MzZcdTA0MzVcdTA0M2FfXHUwNDM0XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0NDBfXHUwNDMxXHUwNDM1XHUwNDM5X1x1MDQzNlx1MDRiMVx1MDQzY19cdTA0NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQz''@;'; put 'put ''Nlx1MDQzYV9cdTA0MzRcdTA0MzlfXHUwNDQxXHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1MDQ0MVx1MDQzZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0NTZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQx''@;'; put 'put ''NVx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0YTNdIGRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQ1Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMxXHUwNGIxXHUwNDQwXHUwNDRiXHUwNDNkIixzOiJcdTA0MzFcdTA0NTZcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNh''@;'; put 'put ''XHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0''@;'; put 'put ''MzFcdTA0NTZcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFc''@;'; put 'put ''dTA0NTZcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1''@;'; put 'put ''MDQ0OFx1MDQ0YikvLG9yZGluYWw6ZnVuY3Rpb24oSSl7cmV0dXJuIEkrKGhbSV18fGhbSSUxMF18fGhbST49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDY4ODA3KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUx''@;'; put 'put ''N2UxIiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0sbz17Ilx1MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3''@;'; put 'put ''ZTUiOiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTtTLmRlZmluZUxvY2FsZSgia20iLHttb250aHM6Ilx1MTc5OFx1MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3Yzhf''@;'; put 'put ''XHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3''@;'; put 'put ''YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJc''@;'; put 'put ''dTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5''@;'; put 'put ''M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUx''@;'; put 'put ''NzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxN2EyXHUxN2I2XHUxNzkxXHUxN2I3XHUxNzhmXHUxN2QyXHUxNzk5X1x1MTc4NVx1MTdkMFx1MTc5M1x1MTdkMlx1MTc5MV9cdTE3YTJcdTE3ODRcdTE3ZDJcdTE3ODJcdTE3YjZcdTE3''@;'; put 'put ''OWFfXHUxNzk2XHUxN2JiXHUxNzkyX1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdhMFx1MTc5Zlx1MTdkMlx1MTc5NFx1MTc4Zlx1MTdiN1x1MTdjZF9cdTE3OWZcdTE3YmJcdTE3ODBcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2M1XHUxNzlhXHUxN2NkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxN2EyXHUxN2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJf''@;'; put 'put ''XHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIn0sbWVyaWRpZW1QYXJzZTovXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwfFx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NS8saXNQTTpmdW5jdGlvbihmKXtyZXR1cm4iXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Ij09PWZ9LG1lcmlkaWVtOmZ1bmN0aW9uKGYs''@;'; put 'put ''VCxBKXtyZXR1cm4gZjwxMj8iXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwIjoiXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzNcdTE3OTNcdTE3YzFcdTE3YzcgXHUxNzk4XHUxN2M5XHUxN2M0''@;'; put 'put ''XHUxNzg0XSBMVCIsbmV4dERheToiW1x1MTc5Zlx1MTdkMlx1MTdhMlx1MTdjMlx1MTc4MCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdERheToiW1x1MTc5OFx1MTdkMlx1MTc5Zlx1MTdiN1x1''@;'; put 'put ''MTc5Ylx1MTc5OFx1MTdiN1x1MTc4OSBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUxNzlmXHUxNzk0XHUxN2QyXHUxNzhmXHUxN2I2XHUxN2EwXHUxN2NkXHUxNzk4XHUxN2JiXHUxNzkzXSBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTE3OTFcdTE3YzBcdTE3OGYiLHBhc3Q6IiVzXHUxNzk4XHUxN2JiXHUxNzkzIixzOiJcdTE3OTRcdTE3YzlcdTE3YmJcdTE3OTNcdTE3ZDJcdTE3OThcdTE3YjZcdTE3OTNcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFc''@;'; put 'put ''dTE3YjgiLHNzOiIlZCBcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbW06IiVkIFx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsaDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzk4XHUxN2M5''@;'; put 'put ''XHUxN2M0XHUxNzg0IixoaDoiJWQgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixkOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLGRkOiIlZCBcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLE06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4MVx1MTdjMiIsTU06''@;'; put 'put ''IiVkIFx1MTc4MVx1MTdjMiIseToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2Iix5eToiJWQgXHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxNzkxXHUxN2I4XGR7MSwyfS8sb3JkaW5hbDoi''@;'; put 'put ''XHUxNzkxXHUxN2I4JWQiLHByZXBhcnNlOmZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoL1tcdTE3ZTFcdTE3ZTJcdTE3ZTNcdTE3ZTRcdTE3ZTVcdTE3ZTZcdTE3ZTdcdTE3ZThcdTE3ZTlcdTE3ZTBdL2csZnVuY3Rpb24oVCl7cmV0dXJuIG9bVF19KX0scG9zdGZvcm1hdDpmdW5jdGlv''@;'; put 'put ''bihmKXtyZXR1cm4gZi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFQpe3JldHVybiBoW1RdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDY1MDgyKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNl''@;'; put 'put ''OSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUwY2U2In0sbz17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1''@;'; put 'put ''MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAifTtTLmRlZmluZUxvY2FsZSgia24iLHttb250aHM6Ilx1MGM5Y1x1MGNhOFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2Fl''@;'; put 'put ''XHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBj''@;'; put 'put ''YjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYThcdTBjYjVcdTBjYzZcdTBj''@;'; put 'put ''ODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjOWNcdTBjYThfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1''@;'; put 'put ''MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2Nk''@;'; put 'put ''X1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Ml9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4MiIuc3BsaXQoIl8iKSxtb250aHNQYXJz''@;'; put 'put ''ZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWNcdTBj''@;'; put 'put ''YzFcdTBjYTdcdTBjYjVcdTBjYmVcdTBjYjBfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMFx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmZcdTBjYjVcdTBjYmVcdTBjYjAiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZV9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNfXHUwY2FjXHUwY2MxXHUwY2E3X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMV9cdTBjYjZcdTBjYzFcdTBjOTVcdTBj''@;'; put 'put ''Y2RcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjYWRcdTBjYmVfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhZVx1MGM4Ml9cdTBjYWNcdTBjYzFfXHUwYzk3XHUwY2MxX1x1MGNiNlx1MGNjMV9cdTBjYjYiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzg3XHUwYzgy''@;'; put 'put ''XHUwY2E2XHUwY2MxXSBMVCIsbmV4dERheToiW1x1MGNhOFx1MGNiZVx1MGNiM1x1MGNjNl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGNhOFx1MGNiZlx1MGNhOFx1MGNjZFx1MGNhOFx1MGNjNl0gTFQiLGxhc3RXZWVrOiJbXHUwYzk1XHUwY2M2XHUwY2MyXHUwY2E4''@;'; put 'put ''XHUwY2M2XHUwY2FmXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwY2E4XHUwYzgyXHUwY2E0XHUwY2IwIixwYXN0OiIlcyBcdTBjYjlcdTBjYmZcdTBjODJcdTBjYTZcdTBjYzYiLHM6Ilx1MGM5NVx1MGNjNlx1MGNiMlx1MGNiNVx1MGNjMSBc''@;'; put 'put ''dTBjOTVcdTBjY2RcdTBjYjdcdTBjYTNcdTBjOTdcdTBjYjNcdTBjYzEiLHNzOiIlZCBcdTBjYjhcdTBjYzZcdTBjOTVcdTBjYzZcdTBjODJcdTBjYTFcdTBjYzFcdTBjOTdcdTBjYjNcdTBjYzEiLG06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZc''@;'; put 'put ''dTBjYjciLG1tOiIlZCBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLGg6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGhoOiIlZCBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGQ6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBj''@;'; put 'put ''YTZcdTBjYmZcdTBjYTgiLGRkOiIlZCBcdTBjYTZcdTBjYmZcdTBjYTgiLE06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLE1NOiIlZCBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLHk6Ilx1MGM5Mlx1''@;'; put 'put ''MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjciLHl5OiIlZCBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjcifSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9bXHUwY2U3XHUwY2U4XHUwY2U5XHUwY2VhXHUwY2ViXHUwY2VjXHUwY2VkXHUwY2Vl''@;'; put 'put ''XHUwY2VmXHUwY2U2XS9nLGZ1bmN0aW9uKFQpe3JldHVybiBvW1RdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBj''@;'; put 'put ''YmZ8XHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2fFx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOHxcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihmLFQpe3JldHVybiAxMj09''@;'; put 'put ''PWYmJihmPTApLCJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiPT09VD9mPDQ/ZjpmKzEyOiJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiPT09VD9mOiJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2Rc''@;'; put 'put ''dTBjYTgiPT09VD9mPj0xMD9mOmYrMTI6Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI9PT1UP2YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihmLFQsQSl7cmV0dXJuIGY8ND8iXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIjpmPDEwPyJcdTBjYWNcdTBjYzZcdTBj''@;'; put 'put ''YjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiOmY8MTc/Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI6ZjwyMD8iXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2IjoiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIn0sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTBjYThcdTBjYzZcdTBjZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKGYpe3JldHVybiBmKyJcdTBjYThcdTBjYzZcdTBjZDUifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oZCg5NzU4NikpfSwyMDEzNyh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNl''@;'; put 'put ''IHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1''@;'; put 'put ''YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19cdWM2ZDRcdWM2OTRcdWM3N2NfXHVkNjU0XHVj''@;'; put 'put ''Njk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVjNzdjX1x1ZDFhMFx1YzY5NFx1Yzc3YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWVx1YjE0NCBNTU1NIERc''@;'; put 'put ''dWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6''@;'; put 'put ''bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilx1YzYyNFx1YjI5OCBMVCIsbmV4dERheToiXHViMGI0XHVjNzdjIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiXHVjNWI0XHVjODFjIExUIixsYXN0V2Vlazoi''@;'; put 'put ''XHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1ZDZjNCIscGFzdDoiJXMgXHVjODA0IixzOiJcdWJhODcgXHVjZDA4IixzczoiJWRcdWNkMDgiLG06IjFcdWJkODQiLG1tOiIlZFx1YmQ4NCIsaDoiXHVkNTVjIFx1YzJk''@;'; put 'put ''Y1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToiXHVkNTVjIFx1YjJlYyIsTU06IiVkXHViMmVjIix5OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRcdWIxNDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1Yzc3Y3xc''@;'; put 'put ''dWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihvLEkpe3N3aXRjaChJKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBvKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIG8rIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBvKyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IG99fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09b30sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDEyPyJcdWM2MjRcdWM4MDQiOiJcdWM2MjRcdWQ2YzQifX0pfShkKDk3''@;'; put 'put ''NTg2KSl9LDYzNzQ0KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoKGYsVCxBLE0pe3ZhciBPPXtzOlsiXHhlN2VuZCBzYW5ceGVleWUiLCJceGU3ZW5kIHNhblx4ZWV5ZXlhbiJdLHNzOltmKyIgc2FuXHhlZXllIixmKyIgc2FuXHhlZXlleWFuIl0sbTpbImRl''@;'; put 'put ''cVx4ZWVxZXllayIsImRlcVx4ZWVxZXlla1x4ZWEiXSxtbTpbZisiIGRlcVx4ZWVxZSIsZisiIGRlcVx4ZWVxZXlhbiJdLGg6WyJzYWV0ZWsiLCJzYWV0ZWtceGVhIl0saGg6W2YrIiBzYWV0IixmKyIgc2FldGFuIl0sZDpbInJvamVrIiwicm9qZWtceGVhIl0sZGQ6W2YrIiByb2oiLGYrIiBy''@;'; put 'put ''b2phbiJdLHc6WyJoZWZ0ZXllayIsImhlZnRleWVrXHhlYSJdLHd3OltmKyIgaGVmdGUiLGYrIiBoZWZ0ZXlhbiJdLE06WyJtZWhlayIsIm1laGVrXHhlYSJdLE1NOltmKyIgbWVoIixmKyIgbWVoYW4iXSx5Olsic2FsZWsiLCJzYWxla1x4ZWEiXSx5eTpbZisiIHNhbCIsZisiIHNhbGFuIl19''@;'; put 'put ''O3JldHVybiBUP09bQV1bMF06T1tBXVsxXX1TLmRlZmluZUxvY2FsZSgia3Uta21yIix7bW9udGhzOiJSXHhlYWJlbmRhbl9TaWJhdF9BZGFyX05ceGVlc2FuX0d1bGFuX0hlelx4ZWVyYW5fVFx4ZWVybWVoX1RlYmF4X1x4Y2Vsb25fQ290bWVoX01pamRhcl9CZXJmYW5iYXIiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6IlJceGVhYl9TaWJfQWRhX05ceGVlc19HdWxfSGV6X1RceGVlcl9UZWJfXHhjZWxvX0NvdF9NaWpfQmVyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Illla1x1MDE1ZmVtX0R1XHUwMTVmZW1fU1x4ZWFcdTAxNWZlbV9ceGM3YXJcdTAx''@;'; put 'put ''NWZlbV9QXHhlYW5jXHUwMTVmZW1fXHhjZW5fXHUwMTVlZW1ceGVlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illla19EdV9TXHhlYV9ceGM3YXJfUFx4ZWFuX1x4Y2VuX1x1MDE1ZWVtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJZZV9EdV9TXHhlYV9ceGM3YV9QXHhlYV9ceGNlbl9c''@;'; put 'put ''dTAxNWVlIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKGYsVCxBKXtyZXR1cm4gZjwxMj9BPyJibiI6IkJOIjpBPyJwbiI6IlBOIn0sbWVyaWRpZW1QYXJzZTovYm58Qk58cG58UE4vLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVki''@;'; put 'put ''LExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIixMTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLGxsOiJEbyBNTU1bLl0gWVlZWVthbl0iLGxsbDoiRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIixsbGxsOiJkZGRbLl0s''@;'; put 'put ''IERvIE1NTVsuXSBZWVlZW2FuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZXJvIGRpIHNhZXRdIExUIFtkZV0iLG5leHREYXk6IltTaWJceGVhIGRpIHNhZXRdIExUIFtkZV0iLG5leHRXZWVrOiJkZGRkIFtkaSBzYWV0XSBMVCBbZGVdIixsYXN0RGF5OiJbRHVoIGRpIHNhZXRd''@;'; put 'put ''IExUIFtkZV0iLGxhc3RXZWVrOiJkZGRkW2EgYm9yXHhlZSBkaSBzYWV0XSBMVCBbZGVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkaSAlcyBkZSIscGFzdDoiYmVyXHhlZSAlcyIsczpoLHNzOmgsbTpoLG1tOmgsaCxoaDpoLGQ6aCxkZDpoLHc6aCx3dzpoLE06aCxN''@;'; put 'put ''TTpoLHk6aCx5eTpofSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KD86eVx4ZWF8XHhlYXxcLikvLG9yZGluYWw6ZnVuY3Rpb24oZixUKXt2YXIgQT1ULnRvTG93ZXJDYXNlKCk7cmV0dXJuIEEuaW5jbHVkZXMoInciKXx8QS5pbmNsdWRlcygibSIpP2YrIi4iOmYrZnVuY3Rpb24g''@;'; put 'put ''byhmKXt2YXIgVD0oZj0iIitmKS5zdWJzdHJpbmcoZi5sZW5ndGgtMSksQT1mLmxlbmd0aD4xP2Yuc3Vic3RyaW5nKGYubGVuZ3RoLTIpOiIiO3JldHVybiAxMj09QXx8MTM9PUF8fCIyIiE9VCYmIjMiIT1UJiYiNTAiIT1BJiYiNzAiIT1UJiYiODAiIT1UPyJceGVhIjoieVx4ZWEifShmKX0s''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNzAxMTEodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2''@;'; put 'put ''OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxvPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LEk9WyJc''@;'; put 'put ''dTA2YTlcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjM0XHUwNjQ4XHUwNjI4XHUwNjI3XHUwNjJhIiwiXHUwNjI2XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjQ2XHUwNmNjXHUwNjMzXHUwNjI3XHUwNjQ2''@;'; put 'put ''IiwiXHUwNjI2XHUwNjI3XHUwNmNjXHUwNjI3XHUwNjMxIiwiXHUwNjJkXHUwNjQ4XHUwNjMyXHUwNmQ1XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjJhXHUwNmQ1XHUwNjQ1XHUwNjQ1XHUwNjQ4XHUwNjMyIiwiXHUwNjI2XHUwNjI3XHUwNjI4IiwiXHUwNjI2XHUwNmQ1XHUwNmNj''@;'; put 'put ''XHUwNjQ0XHUwNjQ4XHUwNjQ4XHUwNjQ0IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDY0M1x1MDZkNVx1MDY0NSIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUi''@;'; put 'put ''LCJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNmE5XHUwNmQ1XHUwNjQ1Il07Uy5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOkksbW9udGhzU2hvcnQ6SSx3ZWVrZGF5czoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUy''@;'; put 'put ''MDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjg2XHUwNjQ4XHUwNjI3XHUw''@;'; put 'put ''NjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUy''@;'; put 'put ''MDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjMzXHUwNmNlXHUwNjM0''@;'; put 'put ''XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0''@;'; put 'put ''N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2NDdfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1t''@;'; put 'put ''IixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjfFx1''@;'; put 'put ''MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYy8saXNQTTpmdW5jdGlvbihUKXtyZXR1cm4vXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjLy50ZXN0KFQpfSxtZXJpZGllbTpmdW5jdGlvbihULEEsTSl7cmV0dXJuIFQ8MTI/Ilx1MDYyOFx1''@;'; put 'put ''MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyI6Ilx1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI2XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjMxXHUwNmM2IFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1''@;'; put 'put ''MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHREYXk6IltcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1''@;'; put 'put ''MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2NDhcdTA2Y2VcdTA2NDZcdTA2Y2UgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1''@;'; put 'put ''MDYzMV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0NFx1MDY0N1x1MjAwYyAlcyIscGFzdDoiJXMiLHM6Ilx1MDY4Nlx1MDY0N1x1MjAwY1x1MDY0Nlx1MDYyZiBcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2''@;'; put 'put ''NDMiLHNzOiJcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGMgJWQiLG06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLG1tOiIlZCBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLGg6Ilx1MDZjY1x1''@;'; put 'put ''MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGhoOiIlZCBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2OTVcdTA2YzZcdTA2OTgiLGRkOiIl''@;'; put 'put ''ZCBcdTA2OTVcdTA2YzZcdTA2OTgiLE06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLHk6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MzNcdTA2MjdcdTA2YjUiLHl5OiIlZCBc''@;'; put 'put ''dTA2MzNcdTA2MjdcdTA2YjUifSxwcmVwYXJzZTpmdW5jdGlvbihUKXtyZXR1cm4gVC5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEEpe3JldHVybiBvW0FdfSkucmVwbGFjZSgvXHUwNjBj''@;'; put 'put ''L2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihUKXtyZXR1cm4gVC5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEEpe3JldHVybiBoW0FdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShkKDk3NTg2KSl9LDk5MTg3KHRlLGosZCl7IWZ1bmN0aW9uKFMp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MDoiLVx1MDQ0N1x1MDRhZiIsMToiLVx1MDQ0N1x1MDQzOCIsMjoiLVx1MDQ0N1x1MDQzOCIsMzoiLVx1MDQ0N1x1MDRhZiIsNDoiLVx1MDQ0N1x1MDRhZiIsNToiLVx1MDQ0N1x1MDQzOCIsNjoiLVx1MDQ0N1x1MDQ0YiIsNzoiLVx1MDQ0N1x1MDQzOCIs''@;'; put 'put ''ODoiLVx1MDQ0N1x1MDQzOCIsOToiLVx1MDQ0N1x1MDQ0MyIsMTA6Ii1cdTA0NDdcdTA0NDMiLDIwOiItXHUwNDQ3XHUwNDRiIiwzMDoiLVx1MDQ0N1x1MDQ0MyIsNDA6Ii1cdTA0NDdcdTA0NGIiLDUwOiItXHUwNDQ3XHUwNGFmIiw2MDoiLVx1MDQ0N1x1MDQ0YiIsNzA6Ii1cdTA0NDdcdTA0''@;'; put 'put ''MzgiLDgwOiItXHUwNDQ3XHUwNDM4Iiw5MDoiLVx1MDQ0N1x1MDQ0MyIsMTAwOiItXHUwNDQ3XHUwNGFmIn07Uy5kZWZpbmVMb2NhbGUoImt5Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNi''@;'; put 'put ''XHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUw''@;'; put 'put ''NDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1''@;'; put 'put ''MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0''@;'; put 'put ''NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQxNlx1MDQzNVx1MDQzYVx1''@;'; put 'put ''MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTRcdTA0YWZcdTA0MzlcdTA0NDhcdTA0ZTlcdTA0M2NcdTA0MzFcdTA0YWZfXHUwNDI4XHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQyOFx1MDQzMFx1MDQ0MFx1MDQ0OFx1MDQzNVx1MDQzY1x1''@;'; put 'put ''MDQzMVx1MDQzOF9cdTA0MTFcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQxOFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MTZcdTA0MzVcdTA0''@;'; put 'put ''M2FfXHUwNDE0XHUwNGFmXHUwNDM5X1x1MDQyOFx1MDQzNVx1MDQzOV9cdTA0MjhcdTA0MzBcdTA0NDBfXHUwNDExXHUwNDM1XHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MThcdTA0NDhcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxNlx1MDQzYV9cdTA0MTRcdTA0''@;'; put 'put ''MzlfXHUwNDI4XHUwNDM5X1x1MDQyOFx1MDQ0MF9cdTA0MTFcdTA0MzlfXHUwNDE2XHUwNDNjX1x1MDQxOFx1MDQ0OCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0YWZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRh''@;'; put 'put ''MyBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQ0ZFx1MDQ0ZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRl''@;'; put 'put ''OFx1MDQ0Mlx1MDQzYVx1MDRlOVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0M2RdIGRkZGQgW1x1MDQzYVx1MDRhZlx1MDQzZFx1MDRhZl0gW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6IiVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDNjXHUwNDQzXHUwNDQwXHUwNDQzXHUwNDNkIixzOiJcdTA0MzFcdTA0MzhcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDdcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUw''@;'; put 'put ''NDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixoOiJcdTA0MzFcdTA0MzhcdTA0NDAg''@;'; put 'put ''XHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDMwXHUwNDM5IixN''@;'; put 'put ''TToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ3XHUwNDM4fFx1MDQ0N1x1MDQ0YnxcdTA0NDdcdTA0YWZ8XHUw''@;'; put 'put ''NDQ3XHUwNDQzKS8sb3JkaW5hbDpmdW5jdGlvbihJKXtyZXR1cm4gSSsoaFtJXXx8aFtJJTEwXXx8aFtJPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYpKX0sMzU5NjkodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGgoQSxN''@;'; put 'put ''LE8sRCl7dmFyIEU9e206WyJlbmcgTWludXR0IiwiZW5nZXIgTWludXR0Il0saDpbImVuZyBTdG9ubiIsImVuZ2VyIFN0b25uIl0sZDpbImVlbiBEYWciLCJlbmdlbSBEYWciXSxNOlsiZWUgTW91bnQiLCJlbmdlbSBNb3VudCJdLHk6WyJlZSBKb2VyIiwiZW5nZW0gSm9lciJdfTtyZXR1cm4g''@;'; put 'put ''TT9FW09dWzBdOkVbT11bMV19ZnVuY3Rpb24gZihBKXtpZihBPXBhcnNlSW50KEEsMTApLGlzTmFOKEEpKXJldHVybiExO2lmKEE8MClyZXR1cm4hMDtpZihBPDEwKXJldHVybiA0PD1BJiZBPD03O2lmKEE8MTAwKXt2YXIgTT1BJTEwO3JldHVybiBmKDA9PT1NP0EvMTA6TSl9aWYoQTwxZTQp''@;'; put 'put ''e2Zvcig7QT49MTA7KUEvPTEwO3JldHVybiBmKEEpfXJldHVybiBmKEEvPTFlMyl9Uy5kZWZpbmVMb2NhbGUoImxiIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNGVyel9BYnJceGVibGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1i''@;'; put 'put ''ZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25uZGVnX01ceGU5aW5kZWdfRFx4ZWJuc2NoZGVnX01c''@;'; put 'put ''eGVidHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9NXHhlOS5fRFx4ZWIuX01ceGViLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTVx4ZTlfRFx4ZWJfTVx4ZWJfRG9fRnJfU2EiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSBbQXVlcl0iLExUUzoiSDptbTpzcyBbQXVlcl0iLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIixMTExMOiJkZGRkLCBELiBNTU1N''@;'; put 'put ''IFlZWVkgSDptbSBbQXVlcl0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhdXQgdW1dIExUIixzYW1lRWxzZToiTCIsbmV4dERheToiW011ZXIgdW1dIExUIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIixsYXN0RGF5OiJbR1x4ZWJzY2h0ZXIgdW1dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3''@;'; put 'put ''aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24gbyhBKXtyZXR1cm4gZihBLnN1YnN0cigwLEEuaW5k''@;'; put 'put ''ZXhPZigiICIpKSk/ImEgIitBOiJhbiAiK0F9LHBhc3Q6ZnVuY3Rpb24gSShBKXtyZXR1cm4gZihBLnN1YnN0cigwLEEuaW5kZXhPZigiICIpKSk/InZpcnUgIitBOiJ2aXJ1biAiK0F9LHM6ImUgcHVlciBTZWtvbm5lbiIsc3M6IiVkIFNla29ubmVuIixtOmgsbW06IiVkIE1pbnV0dGVuIixo''@;'; put 'put ''LGhoOiIlZCBTdG9ubmVuIixkOmgsZGQ6IiVkIERlZWciLE06aCxNTToiJWQgTVx4ZTlpbnQiLHk6aCx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSwzMzUyNih0ZSxq''@;'; put 'put ''LGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFc''@;'; put 'put ''dTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIy''@;'; put 'put ''X1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZWExXHUwZWIxXHUwZTg3XHUw''@;'; put 'put ''ZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhc''@;'; put 'put ''dTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGVi''@;'; put 'put ''NFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGVhZFx1MGViMlx1MGU5N1x1MGViNFx1MGU5NF9cdTBlODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5''@;'; put 'put ''NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4N1x1MGU4''@;'; put 'put ''NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGU5N19cdTBlODhfXHUwZWFkXHUwZTg0X1x1MGU5''@;'; put 'put ''ZV9cdTBlOWVcdTBlYWJfXHUwZWFhXHUwZTgxX1x1MGVhYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJcdTBlYTdcdTBlYjFcdTBlOTlkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUwZWM5XHUwZWIyfFx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4Ny8saXNQTTpmdW5jdGlv''@;'; put 'put ''bihvKXtyZXR1cm4iXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Ij09PW99LG1lcmlkaWVtOmZ1bmN0aW9uKG8sSSxmKXtyZXR1cm4gbzwxMj8iXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUwZWM5XHUwZWIyIjoiXHUwZTk1XHUwZWFkXHUwZTk5XHUw''@;'; put 'put ''ZWMxXHUwZWE1XHUwZTg3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBlYTFcdTBlYjdcdTBlYzlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixuZXh0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWFkXHUwZWI3XHUwZWM4XHUwZTk5XHUwZWMwXHUw''@;'; put 'put ''ZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlZGNcdTBlYzlcdTBlYjJcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixsYXN0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWE3XHUwZWIyXHUwZTk5XHUwZTk5XHUwZWI1XHUw''@;'; put 'put ''ZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlYzFcdTBlYTVcdTBlYzlcdTBlYTdcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt''@;'; put 'put ''ZTp7ZnV0dXJlOiJcdTBlYWRcdTBlYjVcdTBlODEgJXMiLHBhc3Q6IiVzXHUwZTljXHUwZWM4XHUwZWIyXHUwZTk5XHUwZWExXHUwZWIyIixzOiJcdTBlOWFcdTBlY2RcdTBlYzhcdTBlYzBcdTBlOTdcdTBlYmJcdTBlYzhcdTBlYjJcdTBlYzNcdTBlOTRcdTBlYTdcdTBlYjRcdTBlOTlcdTBl''@;'; put 'put ''YjJcdTBlOTdcdTBlYjUiLHNzOiIlZCBcdTBlYTdcdTBlYjRcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG06IjEgXHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixtbToiJWQgXHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixoOiIxIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVjMlx1MGVh''@;'; put 'put ''MVx1MGU4NyIsaGg6IiVkIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVjMlx1MGVhMVx1MGU4NyIsZDoiMSBcdTBlYTFcdTBlYjdcdTBlYzkiLGRkOiIlZCBcdTBlYTFcdTBlYjdcdTBlYzkiLE06IjEgXHUwZWMwXHUwZTk0XHUwZWI3XHUwZWFkXHUwZTk5IixNTToiJWQgXHUwZWMwXHUw''@;'; put 'put ''ZTk0XHUwZWI3XHUwZWFkXHUwZTk5Iix5OiIxIFx1MGU5Ylx1MGViNSIseXk6IiVkIFx1MGU5Ylx1MGViNSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LyhcdTBlOTdcdTBlYjVcdTBlYzgpXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihvKXtyZXR1cm4iXHUwZTk3XHUwZWI1XHUwZWM4Iitv''@;'; put 'put ''fX0pfShkKDk3NTg2KSl9LDkwNDExKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17c3M6InNla3VuZFx1MDExN19zZWt1bmRcdTAxN2VpXHUwMTczX3Nla3VuZGVzIixtOiJtaW51dFx1MDExN19taW51dFx1MDExN3NfbWludXRcdTAxMTkiLG1tOiJtaW51dFx1MDEx''@;'; put 'put ''N3NfbWludVx1MDEwZGlcdTAxNzNfbWludXRlcyIsaDoidmFsYW5kYV92YWxhbmRvc192YWxhbmRcdTAxMDUiLGhoOiJ2YWxhbmRvc192YWxhbmRcdTAxNzNfdmFsYW5kYXMiLGQ6ImRpZW5hX2RpZW5vc19kaWVuXHUwMTA1IixkZDoiZGllbm9zX2RpZW5cdTAxNzNfZGllbmFzIixNOiJtXHUw''@;'; put 'put ''MTE3bnVvX21cdTAxMTduZXNpb19tXHUwMTE3bmVzXHUwMTJmIixNTToibVx1MDExN25lc2lhaV9tXHUwMTE3bmVzaVx1MDE3M19tXHUwMTE3bmVzaXVzIix5OiJtZXRhaV9tZXRcdTAxNzNfbWV0dXMiLHl5OiJtZXRhaV9tZXRcdTAxNzNfbWV0dXMifTtmdW5jdGlvbiBJKE8sRCxFLEIpe3Jl''@;'; put 'put ''dHVybiBEP1QoRSlbMF06Qj9UKEUpWzFdOlQoRSlbMl19ZnVuY3Rpb24gZihPKXtyZXR1cm4gTyUxMD09MHx8Tz4xMCYmTzwyMH1mdW5jdGlvbiBUKE8pe3JldHVybiBoW09dLnNwbGl0KCJfIil9ZnVuY3Rpb24gQShPLEQsRSxCKXt2YXIgRj1PKyIgIjtyZXR1cm4gMT09PU8/RitJKDAsRCxF''@;'; put 'put ''WzBdLEIpOkQ/RisoZihPKT9UKEUpWzFdOlQoRSlbMF0pOkI/RitUKEUpWzFdOkYrKGYoTyk/VChFKVsxXTpUKEUpWzJdKX1TLmRlZmluZUxvY2FsZSgibHQiLHttb250aHM6e2Zvcm1hdDoic2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmRcdTAxN2Vpb19nZWd1XHUwMTdlXHUwMTE3c19iaXJc''@;'; put 'put ''dTAxN2VlbGlvX2xpZXBvc19ydWdwalx1MDE2Ylx1MDEwZGlvX3J1Z3NcdTAxMTdqb19zcGFsaW9fbGFwa3JpXHUwMTBkaW9fZ3J1b2RcdTAxN2VpbyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1XHUwMTdlXHUwMTE3X2Jpclx1MDE3''@;'; put 'put ''ZWVsaXNfbGllcGFfcnVncGpcdTAxNmJ0aXNfcnVnc1x1MDExN2ppc19zcGFsaXNfbGFwa3JpdGlzX2dydW9kaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/fE1NTU0/KFxbW15cW1xdXSpcXXxccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6InNh''@;'; put 'put ''dV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkIi5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6InNla21hZGllblx1MDEyZl9waXJtYWRpZW5cdTAxMmZfYW50cmFkaWVuXHUwMTJmX3RyZVx1MDEwZGlhZGllblx1MDEyZl9rZXR2aXJ0YWRpZW5cdTAxMmZf''@;'; put 'put ''cGVua3RhZGllblx1MDEyZl9cdTAxNjFlXHUwMTYxdGFkaWVuXHUwMTJmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3RyZVx1MDEwZGlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc19cdTAxNjFlXHUwMTYxdGFk''@;'; put 'put ''aWVuaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L2RkZGQgSEg6bW0vfSx3ZWVrZGF5c1Nob3J0OiJTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl9cdTAxNjBlXHUwMTYxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTX1BfQV9UX0tfUG5fXHUwMTYwIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VF''@;'; put 'put ''eGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixMTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixMTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRk''@;'; put 'put ''ZGQsIEhIOm1tIFt2YWwuXSIsbDoiWVlZWS1NTS1ERCIsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsbGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbXHUwMTYwaWFuZGllbl0gTFQiLG5leHREYXk6IltSeXRval0gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbVmFrYXJdIExUIixsYXN0V2VlazoiW1ByYVx1MDExN2p1c1x1MDEyZl0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG8g''@;'; put 'put ''JXMiLHBhc3Q6InByaWVcdTAxNjEgJXMiLHM6ZnVuY3Rpb24gbyhPLEQsRSxCKXtyZXR1cm4gRD8ia2VsaW9zIHNla3VuZFx1MDExN3MiOkI/ImtlbGlcdTAxNzMgc2VrdW5kXHUwMTdlaVx1MDE3MyI6ImtlbGlhcyBzZWt1bmRlcyJ9LHNzOkEsbTpJLG1tOkEsaDpJLGhoOkEsZDpJLGRkOkEs''@;'; put 'put ''TTpJLE1NOkEseTpJLHl5OkF9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKE8pe3JldHVybiBPKyItb2ppIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sMzI2MjEodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBoPXtzczoic2VrdW5kZXNfc2VrdW5kXHUwMTEzbV9zZWt1bmRlX3Nla3VuZGVzIi5zcGxpdCgiXyIpLG06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksbW06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUw''@;'; put 'put ''MTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksaGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGQ6ImRpZW5hc19kaWVuXHUwMTAx''@;'; put 'put ''bV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksZGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksTToibVx1MDExM25lXHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1fbVx1MDExM25lc2lzX21cdTAxMTNuZVx1MDE2MWkiLnNwbGl0KCJfIiksTU06Im1cdTAx''@;'; put 'put ''MTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLHk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKSx5eToiZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpIi5zcGxpdCgiXyIpfTtmdW5jdGlvbiBvKE0sTyxE''@;'; put 'put ''KXtyZXR1cm4gRD9PJTEwPT0xJiZPJTEwMCE9MTE/TVsyXTpNWzNdOk8lMTA9PTEmJk8lMTAwIT0xMT9NWzBdOk1bMV19ZnVuY3Rpb24gSShNLE8sRCl7cmV0dXJuIE0rIiAiK28oaFtEXSxNLE8pfWZ1bmN0aW9uIGYoTSxPLEQpe3JldHVybiBvKGhbRF0sTSxPKX1TLmRlZmluZUxvY2FsZSgi''@;'; put 'put ''bHYiLHttb250aHM6ImphbnZcdTAxMDFyaXNfZmVicnVcdTAxMDFyaXNfbWFydHNfYXByXHUwMTJibGlzX21haWpzX2pcdTAxNmJuaWpzX2pcdTAxNmJsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJq''@;'; put 'put ''YW5fZmViX21hcl9hcHJfbWFpX2pcdTAxNmJuX2pcdTAxNmJsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN2XHUwMTEzdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmVcdTAxNjFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYSIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0u''@;'; put 'put ''WVlZWS4iLExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSIsTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0iLExMTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NLCBkZGRkLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwb2RpZW4gcHVsa3N0ZW5dIExUIixuZXh0RGF5OiJb''@;'; put 'put ''Ulx1MDEyYnQgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0V2VlazoiW1BhZ1x1MDEwMWp1XHUwMTYxXHUwMTAxXSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6InBcdTAxMTNjICVzIixwYXN0OiJwaXJtcyAlcyIsczpmdW5jdGlvbiBUKE0sTyl7cmV0dXJuIE8/ImRhXHUwMTdlYXMgc2VrdW5kZXMiOiJkYVx1MDE3ZVx1MDEwMW0gc2VrdW5kXHUwMTEzbSJ9LHNzOkksbTpmLG1tOkksaDpmLGhoOkksZDpmLGRkOkksTTpmLE1NOkkseTpm''@;'; put 'put ''LHl5Okl9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw4NTg2OSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIGg9e3dvcmRzOntzczpbInNla3VuZCIsInNla3VuZGEi''@;'; put 'put ''LCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxoOlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE1NOlsibWpl''@;'; put 'put ''c2VjIiwibWplc2VjYSIsIm1qZXNlY2kiXSx5eTpbImdvZGluYSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKEksZil7cmV0dXJuIDE9PT1JP2ZbMF06ST49MiYmSTw9ND9mWzFdOmZbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihJLGYsVCl7dmFy''@;'; put 'put ''IEE9aC53b3Jkc1tUXTtyZXR1cm4gMT09PVQubGVuZ3RoP2Y/QVswXTpBWzFdOkkrIiAiK2guY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShJLEEpfX07Uy5kZWZpbmVMb2NhbGUoIm1lIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1i''@;'; put 'put ''YXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9u''@;'; put 'put ''ZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3Bl''@;'; put 'put ''X3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0i''@;'; put 'put ''fSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc2p1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1''@;'; put 'put ''XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBb''@;'; put 'put ''bmVkamVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JpamVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltw''@;'; put 'put ''cm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpoLnRyYW5z''@;'; put 'put ''bGF0ZSxtOmgudHJhbnNsYXRlLG1tOmgudHJhbnNsYXRlLGg6aC50cmFuc2xhdGUsaGg6aC50cmFuc2xhdGUsZDoiZGFuIixkZDpoLnRyYW5zbGF0ZSxNOiJtamVzZWMiLE1NOmgudHJhbnNsYXRlLHk6ImdvZGludSIseXk6aC50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oZCg5NzU4NikpfSwzNTg4MSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoIm1pIix7bW9udGhzOiJLb2hpLXRcdTAxMDF0ZV9IdWktdGFuZ3VydV9Qb3V0XHUwMTZiLXRl''@;'; put 'put ''LXJhbmdpX1BhZW5nYS13aFx1MDEwMXdoXHUwMTAxX0hhcmF0dWFfUGlwaXJpX0hcdTAxNGRuZ29pbmdvaV9IZXJlLXR1cmkta1x1MDE0ZGtcdTAxMDFfTWFodXJ1X1doaXJpbmdhLVx1MDEwMS1udWt1X1doaXJpbmdhLVx1MDEwMS1yYW5naV9IYWtpaGVhIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IXHUwMTRkbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9IYWtpIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU3RyaWN0UmVnZXg6Lyg/OlsnYS16''@;'; put 'put ''XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwyfS9pLHdlZWtkYXlzOiJS''@;'; put 'put ''XHUwMTAxdGFwdV9NYW5lX1RcdTAxNmJyZWlfV2VuZXJlaV9UXHUwMTAxaXRlX1BhcmFpcmVfSFx1MDEwMXRhcmVpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiVGFfTWFfVFx1''@;'; put 'put ''MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbaV0gSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZ''@;'; put 'put ''IFtpXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSB0ZWllIG1haGFuYSwgaV0gTFQiLG5leHREYXk6IlthcG9wbyBpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ldIExUIixsYXN0RGF5OiJbaW5hbmFoaSBpXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3doYWthbXV0dW5nYSBpXSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSByb3RvIGkgJXMiLHBhc3Q6IiVzIGkgbXVhIixzOiJ0ZSBoXHUwMTEza29uYSBydWFydWEiLHNzOiIlZCBoXHUwMTEza29uYSIsbToiaGUgbWVuZXRpIixtbToiJWQgbWVuZXRpIixoOiJ0ZSBoYW9yYSIsaGg6IiVkIGhhb3JhIixk''@;'; put 'put ''OiJoZSByYSIsZGQ6IiVkIHJhIixNOiJoZSBtYXJhbWEiLE1NOiIlZCBtYXJhbWEiLHk6ImhlIHRhdSIseXk6IiVkIHRhdSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDkyMzkx''@;'; put 'put ''KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgibWsiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUw''@;'; put 'put ''NDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkXHUwNDM4X1x1MDQ1OFx1MDQ0M1x1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNj''@;'; put 'put ''XHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2RfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThc''@;'; put 'put ''dTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMw''@;'; put 'put ''X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0''@;'; put 'put ''MFx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDMwXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQy''@;'; put 'put ''XHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQzNV9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkZV9cdTA0M2ZvX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1''@;'; put 'put ''MDQzZlx1MDQzNV9cdTA0NDFhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltcdTA0MTRcdTA0MzVcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXHUwNDNlXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJcdTA0M2VdIExUIixuZXh0V2VlazoiW1x1MDQxMlx1MDQzZV0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCIsbGFz''@;'; put 'put ''dERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJcdTA0M2VdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0''@;'; put 'put ''Mlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNlXHUwNDQyXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExU''@;'; put 'put ''In19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0ICVzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0NDMgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUw''@;'; put 'put ''NDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQz''@;'; put 'put ''XHUwNDQyXHUwNDM4IixoOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDNkXHUwNDMwIixNOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Iix5OiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUw''@;'; put 'put ''NDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0''@;'; put 'put ''M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKG8pe3ZhciBJPW8lMTAsZj1vJTEwMDtyZXR1cm4gMD09PW8/bysiLVx1MDQzNVx1MDQzMiI6MD09PWY/bysiLVx1MDQzNVx1MDQzZCI6Zj4xMCYmZjwyMD9vKyItXHUwNDQyXHUwNDM4IjoxPT09ST9vKyItXHUwNDMyXHUwNDM4IjoyPT09ST9v''@;'; put 'put ''KyItXHUwNDQwXHUwNDM4Ijo3PT09SXx8OD09PUk/bysiLVx1MDQzY1x1MDQzOCI6bysiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDIxMTI2KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgibWwiLHttb250''@;'; put 'put ''aHM6Ilx1MGQxY1x1MGQyOFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmJcdTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJlXHUwZDNlXHUwZDdjXHUwZDFhXHUwZDRkXHUwZDFhXHUwZDRkX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1MGQzMFx1''@;'; put 'put ''MGQzZlx1MGQ3ZF9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OF9cdTBkMTNcdTBkMTdcdTBkMzhcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGRfXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUwZDMxXHUwZDRk''@;'; put 'put ''XHUwZDMxXHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Ylx1MGQyY1x1MGQ3Y19cdTBkMjhcdTBkMzVcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyXHUwZDJjXHUwZDdjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBk''@;'; put 'put ''MWNcdTBkMjhcdTBkNDEuX1x1MGQyYlx1MGQ0Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0MS5fXHUwZDJlXHUwZDNlXHUwZDdjLl9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2YuX1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2FfXHUwZDFjXHUwZDQyXHUw''@;'; put 'put ''ZDMyXHUwZDQ4Ll9cdTBkMTNcdTBkMTcuX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMS5fXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRiLl9cdTBkMjhcdTBkMzVcdTBkMDIuX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMi4iLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''UGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDMxXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQzM1x1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBkNGRcdTBkMzVc''@;'; put 'put ''dTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDJjXHUwZDQxXHUwZDI3XHUwZDI4XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNcdTBkM2Zc''@;'; put 'put ''dTBkMmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM2XHUwZDI4XHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQ3Y19cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBk''@;'; put 'put ''N2VfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1X1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQ3Yl9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkMDJfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmX1x1MGQzNlx1MGQyOFx1MGQzZiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiXHUwZDFlXHUwZDNlX1x1MGQyNFx1MGQzZl9cdTBkMWFcdTBkNGFfXHUwZDJjXHUwZDQxX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZV9cdTBkMzVcdTBkNDZfXHUwZDM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExU''@;'; put 'put ''UzoiQSBoOm1tOnNzIC1cdTBkMjhcdTBkNDEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDRkXSBMVCIsbmV4dERheToiW1x1MGQyOFx1MGQzZVx1MGQzM1x1MGQ0Nl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQzMlx1MGQ0Nl0gTFQiLGxhc3RXZWVrOiJbXHUw''@;'; put 'put ''ZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIixwYXN0OiIlcyBcdTBkMmVcdTBkNDFcdTBkN2JcdTBkMmFcdTBk''@;'; put 'put ''NGQiLHM6Ilx1MGQwNVx1MGQ3ZFx1MGQyYSBcdTBkMjhcdTBkM2ZcdTBkMmVcdTBkM2ZcdTBkMzdcdTBkMTlcdTBkNGRcdTBkMTlcdTBkN2UiLHNzOiIlZCBcdTBkMzhcdTBkNDZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkN2JcdTBkMjFcdTBkNGQiLG06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBk''@;'; put 'put ''MmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLG1tOiIlZCBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLGg6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBk''@;'; put 'put ''NDJcdTBkN2MiLGhoOiIlZCBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkNDJcdTBkN2MiLGQ6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLGRkOiIlZCBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLE06Ilx1''@;'; put 'put ''MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLE1NOiIlZCBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLHk6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIiLHl5OiIlZCBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIifSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9cdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2Z8XHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2fFx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGR8XHUwZDM1XHUwZDQ4XHUw''@;'; put 'put ''ZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyfFx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZi9pLG1lcmlkaWVtSG91cjpmdW5jdGlvbihvLEkpe3JldHVybiAxMj09PW8mJihvPTApLCJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBc''@;'; put 'put ''dTBkM2YiPT09SSYmbz49NHx8Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiPT09SXx8Ilx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI9PT1JP28rMTI6''@;'; put 'put ''b30sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDQ/Ilx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI6bzwxMj8iXHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2IjpvPDE3PyJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0''@;'; put 'put ''XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIjpvPDIwPyJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiOiJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YifX0pfShkKDk3NTg2KSl9LDQ0ODkyKHRlLGos''@;'; put 'put ''ZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoKEksZixULEEpe3N3aXRjaChUKXtjYXNlInMiOnJldHVybiBmPyJcdTA0NDVcdTA0NGRcdTA0MzRcdTA0NDVcdTA0NGRcdTA0M2QgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQ1XHUwNDRk''@;'; put 'put ''XHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCI7Y2FzZSJzcyI6cmV0dXJuIEkrKGY/IiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUw''@;'; put 'put ''NDNkXHUwNDM0XHUwNDRiXHUwNDNkIik7Y2FzZSJtIjpjYXNlIm1tIjpyZXR1cm4gSSsoZj8iIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJcdTA0M2QiKTtjYXNlImgiOmNhc2UiaGgiOnJldHVybiBJKyhmPyIg''@;'; put 'put ''XHUwNDQ2XHUwNDMwXHUwNDMzIjoiIFx1MDQ0Nlx1MDQzMFx1MDQzM1x1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiZCI6Y2FzZSJkZCI6cmV0dXJuIEkrKGY/IiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiOiIgXHUwNGU5XHUwNDM0XHUwNDQwXHUwNDM4XHUwNDM5XHUwNDNkIik7Y2FzZSJN''@;'; put 'put ''IjpjYXNlIk1NIjpyZXR1cm4gSSsoZj8iIFx1MDQ0MVx1MDQzMFx1MDQ0MCI6IiBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0NGJcdTA0M2QiKTtjYXNlInkiOmNhc2UieXkiOnJldHVybiBJKyhmPyIgXHUwNDM2XHUwNDM4XHUwNDNiIjoiIFx1MDQzNlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzOVx1''@;'; put 'put ''MDQzZCIpO2RlZmF1bHQ6cmV0dXJuIEl9fVMuZGVmaW5lTG9jYWxlKCJtbiIse21vbnRoczoiXHUwNDFkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNc''@;'; put 'put ''dTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxM1x1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNGU5XHUwNDQwXHUwNGU5XHUwNDMyXHUwNDM0''@;'; put 'put ''XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjJcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxN1x1MDQ0M1x1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0''@;'; put 'put ''M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNDNlXHUwNDNiXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MWRcdTA0MzBcdTA0MzlcdTA0M2NcdTA0MzRcdTA0NDNcdTA0MzNcdTA0''@;'; put 'put ''MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNVx1MDQ0MVx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1''@;'; put 'put ''MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDNkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDQ1XHUwNDNl''@;'; put 'put ''XHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMSBcdTA0NDFcdTA0MzBcdTA0NDBfMiBcdTA0NDFcdTA0MzBcdTA0NDBfMyBcdTA0NDFcdTA0MzBcdTA0NDBfNCBcdTA0NDFc''@;'; put 'put ''dTA0MzBcdTA0NDBfNSBcdTA0NDFcdTA0MzBcdTA0NDBfNiBcdTA0NDFcdTA0MzBcdTA0NDBfNyBcdTA0NDFcdTA0MzBcdTA0NDBfOCBcdTA0NDFcdTA0MzBcdTA0NDBfOSBcdTA0NDFcdTA0MzBcdTA0NDBfMTAgXHUwNDQxXHUwNDMwXHUwNDQwXzExIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMiBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMlx1MDQzMFx1MDQzMF9cdTA0MWNcdTA0NGZcdTA0MzNcdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDFiXHUwNDQ1XHUwNDMw''@;'; put 'put ''XHUwNDMzXHUwNDMyXHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MFx1MDQ0ZFx1MDQzMl9cdTA0MTFcdTA0MzBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0M2RfXHUwNDExXHUwNDRmXHUwNDNjXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19c''@;'; put 'put ''dTA0MTRcdTA0MzBcdTA0MzJfXHUwNDFjXHUwNDRmXHUwNDMzX1x1MDQxYlx1MDQ0NVx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBfXHUwNDExXHUwNDMwXHUwNDMwX1x1MDQxMVx1MDQ0Zlx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDFkXHUwNDRmX1x1MDQxNFx1MDQzMF9c''@;'; put 'put ''dTA0MWNcdTA0NGZfXHUwNDFiXHUwNDQ1X1x1MDQxZlx1MDRhZl9cdTA0MTFcdTA0MzBfXHUwNDExXHUwNDRmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBc''@;'; put 'put ''dTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIixMTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIn0sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwNGFlXHUwNGU4fFx1MDRhZVx1MDQyNS9pLGlzUE06ZnVuY3Rpb24oSSl7cmV0dXJuIlx1MDRhZVx1MDQyNSI9PT1JfSxtZXJpZGllbTpmdW5jdGlvbihJLGYsVCl7cmV0dXJuIEk8MTI/Ilx1MDRhZVx1MDRlOCI6Ilx1MDRhZVx1MDQyNSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb''@;'; put 'put ''XHUwNGU4XHUwNDNkXHUwNGU5XHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbmV4dERheToiW1x1MDQxY1x1MDQzMFx1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0OF0gTFQiLG5leHRXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDRkXHUwNDQ1XSBkZGRkIExUIixsYXN0RGF5OiJbXHUw''@;'; put 'put ''NGU4XHUwNDQ3XHUwNDM4XHUwNDMzXHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0M2RcdTA0MzNcdTA0ZTlcdTA0NDBcdTA0NDFcdTA0ZTlcdTA0M2RdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzNFx1MDQz''@;'; put 'put ''MFx1MDQ0MFx1MDQzMFx1MDQzMCIscGFzdDoiJXMgXHUwNGU5XHUwNDNjXHUwNDNkXHUwNGU5IixzOmgsc3M6aCxtOmgsbW06aCxoLGhoOmgsZDpoLGRkOmgsTTpoLE1NOmgseTpoLHl5Omh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQw''@;'; put 'put ''LyxvcmRpbmFsOmZ1bmN0aW9uKEksZil7c3dpdGNoKGYpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIEkrIiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiO2RlZmF1bHQ6cmV0dXJuIEl9fX0pfShkKDk3NTg2KSl9LDU5MDgwKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgaD17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sbz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIs''@;'; put 'put ''Ilx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtmdW5jdGlvbiBJKFQsQSxNLE8pe3ZhciBEPSIiO2lmKEEpc3dpdGNoKE0pe2Nhc2UicyI6RD0iXHUwOTE1XHUwOTNlXHUwOTM5''@;'; put 'put ''XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNiI7YnJlYWs7Y2FzZSJzcyI6RD0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlIm0iOkQ9Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWYiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bW0iOkQ9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDk0NyI7YnJlYWs7Y2FzZSJoIjpEPSJcdTA5MGZcdTA5MTUgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImhoIjpEPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiZCI6RD0iXHUwOTBmXHUw''@;'; put 'put ''OTE1IFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJlYWs7Y2FzZSJkZCI6RD0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlIk0iOkQ9Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOkQ9IiVkIFx1MDky''@;'; put 'put ''ZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0NyI7YnJlYWs7Y2FzZSJ5IjpEPSJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3IjticmVhaztjYXNlInl5IjpEPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5NDcifWVsc2Ugc3dpdGNoKE0pe2Nhc2UicyI6RD0iXHUw''@;'; put 'put ''OTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJzcyI6RD0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIm0iOkQ9Ilx1MDkwZlx1MDkxNVx1MDkz''@;'; put 'put ''ZSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5M2UiO2JyZWFrO2Nhc2UibW0iOkQ9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJoIjpEPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNl''@;'; put 'put ''IjticmVhaztjYXNlImhoIjpEPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiZCI6RD0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJkZCI6RD0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUw''@;'; put 'put ''OTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIk0iOkQ9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOkQ9IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkw''@;'; put 'put ''MiI7YnJlYWs7Y2FzZSJ5IjpEPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlIjticmVhaztjYXNlInl5IjpEPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2VcdTA5MDIifXJldHVybiBELnJlcGxhY2UoLyVkL2ksVCl9Uy5kZWZpbmVM''@;'; put 'put ''b2NhbGUoIm1yIix7bW9udGhzOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5''@;'; put 'put ''MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDhfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1''@;'; put 'put ''MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250aHNT''@;'; put 'put ''aG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS5fXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9cdTA5MmVcdTA5NDcuX1x1MDkxY1x1MDk0Mlx1MDky''@;'; put 'put ''OC5fXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4Ll9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1''@;'; put 'put ''MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNc''@;'; put 'put ''dTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNm''@;'; put 'put ''XHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQx''@;'; put 'put ''XHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9y''@;'; put 'put ''bWF0OntMVDoiQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTFRTOiJBIGg6bW06c3MgXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2Vc''@;'; put 'put ''dTA5MWNcdTA5MjRcdTA5M2UiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTA5XHUwOTI2XHUwOTRkXHUwOTJmXHUwOTNlXSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmVcdTA5M2VcdTA5MTdcdTA5NDBcdTA5MzJdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MDkyZVx1MDkyN1x1MDk0''@;'; put 'put ''ZFx1MDkyZlx1MDk0NyIscGFzdDoiJXNcdTA5MmFcdTA5NDJcdTA5MzBcdTA5NGRcdTA5MzVcdTA5NDAiLHM6SSxzczpJLG06SSxtbTpJLGg6SSxoaDpJLGQ6SSxkZDpJLE06SSxNTTpJLHk6SSx5eTpJfSxwcmVwYXJzZTpmdW5jdGlvbihUKXtyZXR1cm4gVC5yZXBsYWNlKC9bXHUwOTY3XHUw''@;'; put 'put ''OTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKEEpe3JldHVybiBvW0FdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oVCl7cmV0dXJuIFQucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihBKXtyZXR1cm4gaFtBXX0pfSxtZXJpZGllbVBh''@;'; put 'put ''cnNlOi9cdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDd8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MHxcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTMwXHUwOTNl''@;'; put 'put ''XHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oVCxBKXtyZXR1cm4gMTI9PT1UJiYoVD0wKSwiXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3Ij09PUF8fCJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09QT9UOiJcdTA5MjZcdTA5NDFc''@;'; put 'put ''dTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiPT09QXx8Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1BfHwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwIj09PUE/VD49MTI/VDpUKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rp''@;'; put 'put ''b24oVCxBLE0pe3JldHVybiBUPj0wJiZUPDY/Ilx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI6VDwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjpUPDE3PyJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiOlQ8MjA/Ilx1MDkzOFx1MDkzZVx1MDky''@;'; put 'put ''Zlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDI1OTUwKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgibXMt''@;'; put 'put ''bXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9E''@;'; put 'put ''aXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0pt''@;'; put 'put ''X1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obyxJKXtyZXR1cm4gMTI9PT1vJiYobz0wKSwicGFnaSI9PT1JP286InRlbmdhaGFyaSI9PT1JP28+PTExP286bysxMjoicGV0YW5nIj09PUl8fCJtYWxhbSI9PT1JP28rMTI6dm9p''@;'; put 'put ''ZCAwfSxtZXJpZGllbTpmdW5jdGlvbihvLEksZil7cmV0dXJuIG88MTE/InBhZ2kiOm88MTU/InRlbmdhaGFyaSI6bzwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIs''@;'; put 'put ''c3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1''@;'; put 'put ''ODYpKX0sNzAzOTkodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJtcyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25f''@;'; put 'put ''U2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihvLEkpe3JldHVybiAxMj09PW8mJihvPTApLCJwYWdpIj09PUk/bzoi''@;'; put 'put ''dGVuZ2FoYXJpIj09PUk/bz49MTE/bzpvKzEyOiJwZXRhbmciPT09SXx8Im1hbGFtIj09PUk/bysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG8sSSxmKXtyZXR1cm4gbzwxMT8icGFnaSI6bzwxNT8idGVuZ2FoYXJpIjpvPDE5PyJwZXRhbmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVU''@;'; put 'put ''aW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIsbW06IiVkIG1pbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVk''@;'; put 'put ''IGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oZCg5NzU4NikpfSw3OTkwMih0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoIm10Iix7bW9udGhzOiJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpq''@;'; put 'put ''dV9cdTAxMjB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGlcdTAxMGJlbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01lal9cdTAxMjB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpXHUwMTBiIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzOiJJbC1cdTAxMjZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ1x1MDEyN2FfSWwtXHUwMTI2YW1pc19JbC1cdTAxMjBpbWdcdTAxMjdhX0lzLVNpYnQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMTI2YWRfVG5lX1RsaV9FcmJfXHUwMTI2YW1fXHUwMTIwaW1fU2li''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAxMjZhX1RuX1RsX0VyX1x1MDEyNmFfXHUwMTIwaV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkg''@;'; put 'put ''SEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbGx1bSBmaWwtXUxUIixuZXh0RGF5OiJbR1x1MDEyN2FkYSBmaWwtXUxUIixuZXh0V2VlazoiZGRkZCBbZmlsLV1MVCIsbGFzdERheToiW0lsLWJpZXJhXHUwMTI3IGZpbC1dTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJkZGRkIFtsaSBnXHUwMTI3YWRkYV0gW2ZpbC1dTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImZcdTIwMTkgJXMiLHBhc3Q6IiVzIGlsdSIsczoiZnRpdCBzZWtvbmRpIixzczoiJWQgc2Vrb25kaSIsbToibWludXRhIixtbToiJWQgbWludXRpIixoOiJz''@;'; put 'put ''aWVnXHUwMTI3YSIsaGg6IiVkIHNpZWdcdTAxMjdhdCIsZDoiXHUwMTIxdXJuYXRhIixkZDoiJWQgXHUwMTIxcmFuZXQiLE06InhhaGFyIixNTToiJWQgeGh1ciIseToic2VuYSIseXk6IiVkIHNuaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4''@;'; put 'put ''YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDcyOTg1KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUxMDQxIiwyOiJcdTEwNDIiLDM6Ilx1MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0NiIsNzoiXHUxMDQ3Iiw4OiJc''@;'; put 'put ''dTEwNDgiLDk6Ilx1MTA0OSIsMDoiXHUxMDQwIn0sbz17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQzIjoiMyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1IiwiXHUxMDQ2IjoiNiIsIlx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5IjoiOSIsIlx1MTA0MCI6IjAifTtT''@;'; put 'put ''LmRlZmluZUxvY2FsZSgibXkiLHttb250aHM6Ilx1MTAwN1x1MTAxNFx1MTAzYVx1MTAxNFx1MTAxZFx1MTAyYlx1MTAxYlx1MTAyZV9cdTEwMTZcdTEwMzFcdTEwMTZcdTEwMzFcdTEwMmNcdTEwM2FcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAyN1x1''@;'; put 'put ''MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAwN1x1MTAzMFx1MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2NcdTEwMDJcdTEwMmZcdTEwMTBcdTEwM2FfXHUxMDA1XHUxMDAwXHUxMDNhXHUxMDEwXHUxMDA0''@;'; put 'put ''XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYVx1MTAxMFx1MTAyZFx1MTAyZlx1MTAxOFx1MTAyY19cdTEwMTRcdTEwMmRcdTEwMmZcdTEwMWRcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDEyXHUxMDJlXHUxMDA3XHUxMDA0XHUxMDNhXHUxMDE4''@;'; put 'put ''XHUxMDJjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwMDdcdTEwMTRcdTEwM2FfXHUxMDE2XHUxMDMxX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRc''@;'; put 'put ''dTEwM2FfXHUxMDFlXHUxMDNjX1x1MTAwNVx1MTAwMFx1MTAzYV9cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FfXHUxMDE0XHUxMDJkXHUxMDJmX1x1MTAxMlx1MTAyZSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDE0''@;'; put 'put ''XHUxMDNkXHUxMDMxX1x1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAxY1x1MTAyY19cdTEwMjFcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMDJcdTEwMmJfXHUxMDE3XHUxMDJmXHUxMDEyXHUxMDM5XHUxMDEzXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY1x1MTAx''@;'; put 'put ''ZVx1MTAxNVx1MTAxMFx1MTAzMVx1MTAzOF9cdTEwMWVcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDA1XHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAz''@;'; put 'put ''MFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAy''@;'; put 'put ''Y19cdTEwMWVcdTEwMzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMDFhXHUxMDE0XHUxMDMxLl0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLG5leHREYXk6IltcdTEwMTlcdTEwMTRcdTEwMDBcdTEwM2FcdTEwMTZcdTEwM2NcdTEwMTRcdTEwM2FdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdERheToiW1x1MTAxOVx1MTAxNFx1MTAzMS5cdTEwMDBdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0V2VlazoiW1x1MTAxNVx1MTAzY1x1MTAyZVx1MTAzOFx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1''@;'; put 'put ''MTAyY10gZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUxMDFjXHUxMDJjXHUxMDE5XHUxMDBhXHUxMDNhXHUxMDM3ICVzIFx1MTAxOVx1MTAzZVx1MTAyYyIscGFzdDoiXHUxMDFjXHUxMDNkXHUxMDE0XHUxMDNhXHUx''@;'; put 'put ''MDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUxMDMxXHUxMDJjICVzIFx1MTAwMCIsczoiXHUxMDA1XHUxMDAwXHUxMDM5XHUxMDAwXHUxMDE0XHUxMDNhLlx1MTAyMVx1MTAxNFx1MTAwYVx1MTAzYVx1MTAzOFx1MTAwNFx1MTAxYVx1MTAzYSIsc3M6IiVkIFx1MTAwNVx1MTAwMFx1MTAzOVx1MTAw''@;'; put 'put ''MFx1MTAxNFx1MTAzN1x1MTAzYSIsbToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixtbToiJWQgXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixoOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGhoOiIl''@;'; put 'put ''ZCBcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGQ6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYlx1MTAwMFx1MTAzYSIsZGQ6IiVkIFx1MTAxYlx1MTAwMFx1MTAzYSIsTToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDFjIixNTToiJWQgXHUxMDFjIix5OiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEw''@;'; put 'put ''MTRcdTEwM2VcdTEwMDVcdTEwM2EiLHl5OiIlZCBcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EifSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9bXHUxMDQxXHUxMDQyXHUxMDQzXHUxMDQ0XHUxMDQ1XHUxMDQ2XHUxMDQ3XHUxMDQ4XHUxMDQ5XHUxMDQwXS9nLGZ1bmN0''@;'; put 'put ''aW9uKFQpe3JldHVybiBvW1RdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw2Nzg1OSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7Uy5kZWZpbmVMb2NhbGUoIm5iIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9q''@;'; put 'put ''dW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4''@;'; put 'put ''Ll9tYS5fdGkuX29uLl90by5fZnIuX2xceGY4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1N''@;'; put 'put ''LllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6Iltmb3JyaWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5kZXIiLHNzOiIlZCBz''@;'; put 'put ''ZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiJceGU5biB0aW1lIixoaDoiJWQgdGltZXIiLGQ6Ilx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VyIix3OiJceGU5biB1a2UiLHd3OiIlZCB1a2VyIixNOiJceGU5biBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6''@;'; put 'put ''ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDEzNjQyKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUwOTY3''@;'; put 'put ''IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sbz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIi''@;'; put 'put ''OiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtTLmRlZmluZUxvY2FsZSgibmUiLHttb250aHM6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5''@;'; put 'put ''NDFcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdc''@;'; put 'put ''dTA5MzdcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNc''@;'; put 'put ''dTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1''@;'; put 'put ''MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDguX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmLl9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZc''@;'; put 'put ''dTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkyZFx1MDk0Ny5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MDdcdTA5MjRcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTJjXHUw''@;'; put 'put ''OTNlXHUwOTMwX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1''@;'; put 'put ''MDkzMFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MmNcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTA3XHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMi5fXHUwOTJj''@;'; put 'put ''XHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2YuX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTI4XHUwOTNmLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2Ll9cdTA5MzhcdTA5NGIuX1x1MDkyZVx1MDkwMi5fXHUwOTJjXHUwOTQx''@;'; put 'put ''Ll9cdTA5MmNcdTA5M2YuX1x1MDkzNlx1MDk0MS5fXHUwOTM2LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkFcdTA5MTVcdTA5NGIgaDptbTpzcyBcdTA5MmNc''@;'; put 'put ''dTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDci''@;'; put 'put ''fSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKFQpe3JldHVybiBvW1RdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZil7cmV0dXJuIGYu''@;'; put 'put ''cmVwbGFjZSgvXGQvZyxmdW5jdGlvbihUKXtyZXR1cm4gaFtUXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2Z8XHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4fFx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YnxcdTA5MzhcdTA5M2VcdTA5''@;'; put 'put ''MDFcdTA5MWQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihmLFQpe3JldHVybiAxMj09PWYmJihmPTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YiPT09VD9mPDQ/ZjpmKzEyOiJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiPT09VD9mOiJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFc''@;'; put 'put ''dTA5MzhcdTA5NGIiPT09VD9mPj0xMD9mOmYrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZCI9PT1UP2YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihmLFQsQSl7cmV0dXJuIGY8Mz8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIjpmPDEyPyJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5''@;'; put 'put ''M2VcdTA5MjgiOmY8MTY/Ilx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YiI6ZjwyMD8iXHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUw''@;'; put 'put ''OTJkXHUwOTRiXHUwOTMyXHUwOTNmXSBMVCIsbmV4dFdlZWs6IltcdTA5MDZcdTA5MDlcdTA5MDFcdTA5MjZcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MzlcdTA5M2ZcdTA5MWNcdTA5NGJdIExUIixsYXN0V2VlazoiW1x1MDkxN1x1MDkwZlx1MDkxNVx1MDk0Yl0gZGRkZFss''@;'; put 'put ''XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5M2UiLHBhc3Q6IiVzIFx1MDkwNVx1MDkxN1x1MDkzZVx1MDkyMVx1MDkzZiIsczoiXHUwOTE1XHUwOTQ3XHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkz''@;'; put 'put ''OFx1MDk0N1x1MDkxNVx1MDk0N1x1MDkyM1x1MDk0ZFx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkx''@;'; put 'put ''Zlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIsTU06IiVk''@;'; put 'put ''IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIseToiXHUwOTBmXHUwOTE1IFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDk5ODc1KHRlLGosZCl7IWZ1bmN0aW9u''@;'; put 'put ''KFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxvPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxJPVsvXmph''@;'; put 'put ''bi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLGY9L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxh''@;'; put 'put ''dWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7Uy5kZWZpbmVMb2NhbGUoIm5sLWJlIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1''@;'; put 'put ''YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oQSxNKXtyZXR1cm4gQT8vLU1NTS0vLnRlc3QoTSk/b1tBLm1vbnRoKCldOmhbQS5tb250aCgpXTpo''@;'; put 'put ''fSxtb250aHNSZWdleDpmLG1vbnRoc1Nob3J0UmVnZXg6Zixtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVn''@;'; put 'put ''ZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpJLGxvbmdNb250aHNQYXJzZTpJLHNob3J0TW9udGhzUGFyc2U6SSx3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGlu''@;'; put 'put ''c2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy''@;'; put 'put ''c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRh''@;'; put 'put ''YWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAl''@;'; put 'put ''cyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsTToiXHhl''@;'; put 'put ''OVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEEpe3JldHVybiBBKygxPT09QXx8OD09PUF8fEE+PTIwPyJzdGUiOiJkZSIp''@;'; put 'put ''fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw2NTQ0MSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIGg9Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbz0iamFuX2ZlYl9t''@;'; put 'put ''cnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksST1bL15qYW4vaSwvXmZlYi9pLC9eKG1hYXJ0fG1ydFwuPykkL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3Yv''@;'; put 'put ''aSwvXmRlYy9pXSxmPS9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3Zc''@;'; put 'put ''Lj98ZGVjXC4/KS9pO1MuZGVmaW5lTG9jYWxlKCJubCIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEEs''@;'; put 'put ''TSl7cmV0dXJuIEE/Ly1NTU0tLy50ZXN0KE0pP29bQS5tb250aCgpXTpoW0EubW9udGgoKV06aH0sbW9udGhzUmVnZXg6Zixtb250aHNTaG9ydFJlZ2V4OmYsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0''@;'; put 'put ''ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6SSxsb25nTW9udGhz''@;'; put 'put ''UGFyc2U6SSxzaG9ydE1vbnRoc1BhcnNlOkksd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBk''@;'; put 'put ''ZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06Ilx4ZTlceGU5biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4g''@;'; put 'put ''dXVyIixoaDoiJWQgdXVyIixkOiJceGU5XHhlOW4gZGFnIixkZDoiJWQgZGFnZW4iLHc6Ilx4ZTlceGU5biB3ZWVrIix3dzoiJWQgd2VrZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6Ilx4ZTlceGU5biBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRp''@;'; put 'put ''bmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihBKXtyZXR1cm4gQSsoMT09PUF8fDg9PT1BfHxBPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sODEzMTEodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1Mu''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJubiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9q''@;'; put 'put ''dWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzdW5kYWdfbVx4ZTVuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbGF1cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdS5fbVx4ZTUuX3R5''@;'; put 'put ''Ll9vbi5fdG8uX2ZyLl9sYXUuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlNV90eV9vbl90b19mcl9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQu''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2trYV0gTFQiLG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''a2xva2thXSBMVCIsbGFzdERheToiW0kgZ1x4ZTVyIGtsb2trYV0gTFQiLGxhc3RXZWVrOiJbRlx4ZjhyZWdceGU1YW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQi''@;'; put 'put ''LHNzOiIlZCBzZWt1bmQiLG06ImVpdCBtaW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsdzoiZWkgdmVrZSIsd3c6IiVkIHZla2VyIixNOiJlaW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJl''@;'; put 'put ''aXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw3MjU2Nyh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoIm9j''@;'; put 'put ''LWxuYyIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuaVx4ZThyX2ZlYnJpXHhlOHJfbWFyXHhlN19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0XHhmMmJyZV9ub3ZlbWJyZV9kZWNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmlceGU4cl9kZSBmZWJyaVx4''@;'; put 'put ''ZThyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdFx4ZjJicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2Zl''@;'; put 'put ''YnIuX21hclx4ZTdfYWJyLl9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltZW5nZV9kaWx1bnNfZGltYXJzX2RpbVx4ZThjcmVzX2Rpalx4ZjJ1c19kaXZlbmRyZXNfZGlzc2FidGUiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kbV9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsbDoiZGRkIEQg''@;'; put 'put ''TU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3VceGU4aSBhXSBMVCIsbmV4dERheToiW2RlbWFuIGFdIExUIixuZXh0V2VlazoiZGRkZCBbYV0gTFQiLGxhc3REYXk6IltpXHhlOHIgYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNzYXQgYV0gTFQiLHNhbWVFbHNlOiJMIn0s''@;'; put 'put ''cmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVuYXMgc2Vnb25kYXMiLHNzOiIlZCBzZWdvbmRhcyIsbToidW5hIG1pbnV0YSIsbW06IiVkIG1pbnV0YXMiLGg6InVuYSBvcmEiLGhoOiIlZCBvcmFzIixkOiJ1biBqb3JuIixkZDoiJWQgam9ybnMi''@;'; put 'put ''LE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihvLEkpe3ZhciBmPTE9PT1vPyJyIjoyPT09bz8ibiI6Mz09PW8/InIiOjQ9PT1vPyJ0Ijoi''@;'; put 'put ''XHhlOCI7cmV0dXJuKCJ3Ij09PUl8fCJXIj09PUkpJiYoZj0iYSIpLG8rZn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNTY5NjIodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXsxOiJcdTBhNjciLDI6Ilx1MGE2OCIsMzoiXHUwYTY5Iiw0OiJcdTBh''@;'; put 'put ''NmEiLDU6Ilx1MGE2YiIsNjoiXHUwYTZjIiw3OiJcdTBhNmQiLDg6Ilx1MGE2ZSIsOToiXHUwYTZmIiwwOiJcdTBhNjYifSxvPXsiXHUwYTY3IjoiMSIsIlx1MGE2OCI6IjIiLCJcdTBhNjkiOiIzIiwiXHUwYTZhIjoiNCIsIlx1MGE2YiI6IjUiLCJcdTBhNmMiOiI2IiwiXHUwYTZkIjoiNyIs''@;'; put 'put ''Ilx1MGE2ZSI6IjgiLCJcdTBhNmYiOiI5IiwiXHUwYTY2IjoiMCJ9O1MuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFf''@;'; put 'put ''XHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUw''@;'; put 'put ''YTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBc''@;'; put 'put ''dTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBh''@;'; put 'put ''MjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBhMTBcdTBh''@;'; put 'put ''MjRcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTRiXHUwYTJlXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMlx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmNcdTBhNDFcdTBhMjdcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM1XHUwYTQwXHUwYTMwXHUwYTM1XHUw''@;'; put 'put ''YTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGE3MVx1MGExNVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDBcdTBhMWFcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYTEwXHUwYTI0X1x1MGEz''@;'; put 'put ''OFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhMTBc''@;'; put 'put ''dTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMVFM6IkEgaDptbTpzcyBcdTBhMzVcdTBhMWNcdTBhNDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTExMTDoiZGRkZCwgRCBN''@;'; put 'put ''TU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGEwNVx1MGExY10gTFQiLG5leHREYXk6IltcdTBhMTVcdTBhMzJdIExUIixuZXh0V2VlazoiW1x1MGEwNVx1MGExN1x1MGEzMlx1MGEzZV0gZGRkZCwgTFQiLGxhc3REYXk6IltcdTBh''@;'; put 'put ''MTVcdTBhMzJdIExUIixsYXN0V2VlazoiW1x1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGEzNVx1MGEzZlx1MGE3MVx1MGExYSIscGFzdDoiJXMgXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMy''@;'; put 'put ''XHUwYTQ3IixzOiJcdTBhMTVcdTBhNDFcdTBhMWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixzczoiJWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixtOiJcdTBhMDdcdTBhMTUgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixtbToiJWQgXHUwYTJlXHUwYTNmXHUw''@;'; put 'put ''YTcwXHUwYTFmIixoOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTNlIixoaDoiJWQgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTQ3IixkOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTI2XHUwYTNmXHUwYTI4IixkZDoiJWQgXHUwYTI2XHUwYTNmXHUwYTI4IixNOiJc''@;'; put 'put ''dTBhMDdcdTBhNzFcdTBhMTUgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTNlIixNTToiJWQgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTQ3Iix5OiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTM4XHUwYTNlXHUwYTMyIix5eToiJWQgXHUwYTM4XHUwYTNlXHUwYTMyIn0scHJlcGFy''@;'; put 'put ''c2U6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvW1x1MGE2N1x1MGE2OFx1MGE2OVx1MGE2YVx1MGE2Ylx1MGE2Y1x1MGE2ZFx1MGE2ZVx1MGE2Zlx1MGE2Nl0vZyxmdW5jdGlvbihUKXtyZXR1cm4gb1tUXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2Uo''@;'; put 'put ''L1xkL2csZnVuY3Rpb24oVCl7cmV0dXJuIGhbVF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYTMwXHUwYTNlXHUwYTI0fFx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMHxcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzB8XHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlLyxtZXJpZGllbUhv''@;'; put 'put ''dXI6ZnVuY3Rpb24oZixUKXtyZXR1cm4gMTI9PT1mJiYoZj0wKSwiXHUwYTMwXHUwYTNlXHUwYTI0Ij09PVQ/Zjw0P2Y6ZisxMjoiXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIj09PVQ/ZjoiXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIj09PVQ/Zj49MTA/ZjpmKzEyOiJc''@;'; put 'put ''dTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiPT09VD9mKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZixULEEpe3JldHVybiBmPDQ/Ilx1MGEzMFx1MGEzZVx1MGEyNCI6ZjwxMD8iXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIjpmPDE3PyJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBh''@;'; put 'put ''M2ZcdTBhMzAiOmY8MjA/Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI6Ilx1MGEzMFx1MGEzZVx1MGEyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDYxMDYzKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD0ic3R5Y3plXHUwMTQ0X2x1dHlfbWFy''@;'; put 'put ''emVjX2t3aWVjaWVcdTAxNDRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllXHUwMTQ0X3dyemVzaWVcdTAxNDRfcGFcdTAxN2Fkemllcm5pa19saXN0b3BhZF9ncnVkemllXHUwMTQ0Ii5zcGxpdCgiXyIpLG89InN0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2Ff''@;'; put 'put ''bGlwY2Ffc2llcnBuaWFfd3J6ZVx1MDE1Ym5pYV9wYVx1MDE3YWR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYSIuc3BsaXQoIl8iKSxJPVsvXnN0eS9pLC9ebHV0L2ksL15tYXIvaSwvXmt3aS9pLC9ebWFqL2ksL15jemUvaSwvXmxpcC9pLC9ec2llL2ksL153cnovaSwvXnBhXHUwMTdhL2ks''@;'; put 'put ''L15saXMvaSwvXmdydS9pXTtmdW5jdGlvbiBmKE0pe3JldHVybiBNJTEwPDUmJk0lMTA+MSYmfn4oTS8xMCklMTAhPTF9ZnVuY3Rpb24gVChNLE8sRCl7dmFyIEU9TSsiICI7c3dpdGNoKEQpe2Nhc2Uic3MiOnJldHVybiBFKyhmKE0pPyJzZWt1bmR5Ijoic2VrdW5kIik7Y2FzZSJtIjpyZXR1''@;'; put 'put ''cm4gTz8ibWludXRhIjoibWludXRcdTAxMTkiO2Nhc2UibW0iOnJldHVybiBFKyhmKE0pPyJtaW51dHkiOiJtaW51dCIpO2Nhc2UiaCI6cmV0dXJuIE8/ImdvZHppbmEiOiJnb2R6aW5cdTAxMTkiO2Nhc2UiaGgiOnJldHVybiBFKyhmKE0pPyJnb2R6aW55IjoiZ29kemluIik7Y2FzZSJ3dyI6''@;'; put 'put ''cmV0dXJuIEUrKGYoTSk/InR5Z29kbmllIjoidHlnb2RuaSIpO2Nhc2UiTU0iOnJldHVybiBFKyhmKE0pPyJtaWVzaVx1MDEwNWNlIjoibWllc2lcdTAxMTljeSIpO2Nhc2UieXkiOnJldHVybiBFKyhmKE0pPyJsYXRhIjoibGF0Iil9fVMuZGVmaW5lTG9jYWxlKCJwbCIse21vbnRoczpmdW5j''@;'; put 'put ''dGlvbihNLE8pe3JldHVybiBNPy9EIE1NTU0vLnRlc3QoTyk/b1tNLm1vbnRoKCldOmhbTS5tb250aCgpXTpofSxtb250aHNTaG9ydDoic3R5X2x1dF9tYXJfa3dpX21hal9jemVfbGlwX3NpZV93cnpfcGFcdTAxN2FfbGlzX2dydSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTpJLGxvbmdNb250''@;'; put 'put ''aHNQYXJzZTpJLHNob3J0TW9udGhzUGFyc2U6SSx3ZWVrZGF5czoibmllZHppZWxhX3BvbmllZHppYVx1MDE0MmVrX3d0b3Jla19cdTAxNWJyb2RhX2N6d2FydGVrX3BpXHUwMTA1dGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZHpfcG9uX3d0X1x1MDE1YnJfY3p3X3B0''@;'; put 'put ''X3NvYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTmRfUG5fV3RfXHUwMTVhcl9Del9QdF9TbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEemlcdTAxNWIgb10gTFQiLG5leHREYXk6IltKdXRybyBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyBuaWVkemllbFx1MDExOSBv''@;'; put 'put ''XSBMVCI7Y2FzZSAyOnJldHVybiJbV2Ugd3RvcmVrIG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1ddIGRkZGQgW29dIExUIn19LGxhc3REYXk6IltXY3pvcmFq''@;'; put 'put ''IG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nhc2Ug''@;'; put 'put ''NjpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1cgemVzelx1MDE0MnldIGRkZGQgW29dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiIlcyB0ZW11IixzOiJraWxrYSBzZWt1''@;'; put 'put ''bmQiLHNzOlQsbTpULG1tOlQsaDpULGhoOlQsZDoiMSBkemllXHUwMTQ0IixkZDoiJWQgZG5pIix3OiJ0eWR6aWVcdTAxNDQiLHd3OlQsTToibWllc2lcdTAxMDVjIixNTTpULHk6InJvayIseXk6VH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDk3NDc2KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgicHQtYnIiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVt''@;'; put 'put ''YnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyXHhlN2EtZmVpcmFfcXVh''@;'; put 'put ''cnRhLWZlaXJhX3F1aW50YS1mZWlyYV9zZXh0YS1mZWlyYV9zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9zXHhl''@;'; put 'put ''MSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBzXSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIs''@;'; put 'put ''cGFzdDoiaFx4ZTEgJXMiLHM6InBvdWNvcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIixNOiJ1bSBtXHhlYXMiLE1NOiIlZCBtZXNlcyIseToi''@;'; put 'put ''dW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLGludmFsaWREYXRlOiJEYXRhIGludlx4ZTFsaWRhIn0pfShkKDk3NTg2KSl9LDc4NzE5KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVu''@;'; put 'put ''X2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyXHhlN2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9TXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1Nl''@;'; put 'put ''Z19UZXJfUXVhX1F1aV9TZXhfU1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10gTFQiLG5leHREYXk6IltB''@;'; put 'put ''bWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQgW1x4ZTBzXSBMVCI6Iltc''@;'; put 'put ''eGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoic2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW1hIGhvcmEiLGhoOiIl''@;'; put 'put ''ZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsdzoidW1hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVk''@;'; put 'put ''XHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNTEwMDQodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGgoSSxmLFQpe3ZhciBNPSIgIjtyZXR1cm4oSSUxMDA+PTIwfHxJPj0xMDAmJkklMTAwPT0wKSYmKE09IiBkZSAiKSxJK00re3NzOiJz''@;'; put 'put ''ZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InNcdTAxMDNwdFx1MDEwM21ceGUybmkiLE1NOiJsdW5pIix5eToiYW5pIn1bVF19Uy5kZWZpbmVMb2NhbGUoInJvIix7bW9udGhzOiJpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1''@;'; put 'put ''bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFj''@;'; put 'put ''dDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9pX3ZpbmVyaV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2YSBzZWN1bmRlIixzczpoLG06InVuIG1pbnV0IixtbTpoLGg6Im8gb3JcdTAxMDMiLGhoOmgsZDoibyB6aSIsZGQ6aCx3OiJvIHNcdTAxMDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6aCxN''@;'; put 'put ''OiJvIGx1blx1MDEwMyIsTU06aCx5OiJ1biBhbiIseXk6aH0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYpKX0sNTEzMjYodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oVCxBLE0pe3JldHVybiJtIj09PU0/QT8iXHUwNDNjXHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDQzXHUwNDQyXHUwNDMwIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQzIjpUKyIgIitmdW5jdGlvbiBoKFQsQSl7dmFyIE09VC5zcGxpdCgiXyIpO3JldHVybiBBJTEwPT0xJiZBJTEwMCE9MTE/TVswXTpBJTEwPj0yJiZBJTEwPD00JiYoQSUxMDA8MTB8fEElMTAwPj0y''@;'; put 'put ''MCk/TVsxXTpNWzJdfSh7c3M6QT8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06QT8iXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwX1x1MDQzY1x1MDQzOFx1MDQz''@;'; put 'put ''ZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NDNfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaGg6Ilx1''@;'; put 'put ''MDQ0N1x1MDQzMFx1MDQ0MV9cdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDNlXHUwNDMyIixkZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ0Zl9cdTA0MzRcdTA0M2RcdTA0MzVcdTA0MzkiLHd3OiJcdTA0M2RcdTA0MzVc''@;'; put 'put ''dTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDM4X1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0YyIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZc''@;'; put 'put ''dTA0MzBfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDM1XHUwNDMyIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzMF9cdTA0M2JcdTA0MzVcdTA0NDIifVtNXSwrVCl9dmFyIEk9Wy9eXHUwNDRmXHUwNDNkXHUwNDMyL2ksL15cdTA0NDRc''@;'; put 'put ''dTA0MzVcdTA0MzIvaSwvXlx1MDQzY1x1MDQzMFx1MDQ0MC9pLC9eXHUwNDMwXHUwNDNmXHUwNDQwL2ksL15cdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXS9pLC9eXHUwNDM4XHUwNDRlXHUwNDNkL2ksL15cdTA0MzhcdTA0NGVcdTA0M2IvaSwvXlx1MDQzMFx1MDQzMlx1MDQzMy9pLC9eXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDNkL2ksL15cdTA0M2VcdTA0M2FcdTA0NDIvaSwvXlx1MDQzZFx1MDQzZVx1MDQ0Zi9pLC9eXHUwNDM0XHUwNDM1XHUwNDNhL2ldO1MuZGVmaW5lTG9jYWxlKCJydSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGZfXHUw''@;'; put 'put ''NDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVc''@;'; put 'put ''dTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNkXHUwNDNlXHUwNDRm''@;'; put 'put ''XHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRj''@;'; put 'put ''X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUw''@;'; put 'put ''NDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1''@;'; put 'put ''MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MC5fXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4XHUwNDRlXHUw''@;'; put 'put ''NDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIiksc3RhbmRh''@;'; put 'put ''bG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRj''@;'; put 'put ''X1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNhLiIuc3BsaXQoIl8iKX0sd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MDQzMlx1MDQzZVx1MDQ0''@;'; put 'put ''MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0''@;'; put 'put ''MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8i''@;'; put 'put ''KSxmb3JtYXQ6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUw''@;'; put 'put ''NDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1''@;'; put 'put ''MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MTJcdTA0MzJdID8oPzpcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlfFx1MDQ0''@;'; put 'put ''ZFx1MDQ0Mlx1MDQ0Myk/ID9dID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJc''@;'; put 'put ''dTA0NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6SSxsb25nTW9udGhzUGFyc2U6SSxzaG9ydE1vbnRoc1BhcnNlOkksbW9udGhzUmVnZXg6L14oXHUw''@;'; put 'put ''NDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUw''@;'; put 'put ''NDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQz''@;'; put 'put ''OFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUw''@;'; put 'put ''NDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1''@;'; put 'put ''MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0''@;'; put 'put ''NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wuP3xcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzY1x1MDQzMFx1''@;'; put 'put ''MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/fFx1MDQzOFx1''@;'; put 'put ''MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wuP3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUw''@;'; put 'put ''NDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2RcdTA0M2Vc''@;'; put 'put ''dTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1MDQzYVwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0NDRc''@;'; put 'put ''dTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQz''@;'; put 'put ''ZFtcdTA0NGZcdTA0NGNdfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNlXHUwNDNhXHUw''@;'; put 'put ''NDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y10pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA0''@;'; put 'put ''NGZcdTA0M2RcdTA0MzJcLnxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC58XHUwNDNjXHUwNDMwXHUwNDQwW1x1MDQ0Mi5dfFx1MDQzMFx1MDQzZlx1MDQ0MFwufFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGYuXXxcdTA0MzhcdTA0''@;'; put 'put ''NGVcdTA0M2JbXHUwNDRjXHUwNDRmLl18XHUwNDMwXHUwNDMyXHUwNDMzXC58XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wufFx1MDQzZVx1MDQzYVx1MDQ0MlwufFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLnxcdTA0MzRcdTA0MzVcdTA0M2FcLikvaSxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDM1''@;'; put 'put ''XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDRmLCBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixuZXh0V2Vl''@;'; put 'put ''azpmdW5jdGlvbihUKXtpZihULndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQx''@;'; put 'put ''MiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzVcdTA0MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzhcdTA0''@;'; put 'put ''MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LGxhc3RXZWVrOmZ1bmN0aW9uKFQpe2lmKFQud2Vl''@;'; put 'put ''aygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNlXSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJdIGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1''@;'; put 'put ''MDQ0OFx1MDQzYlx1MDQzZVx1MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0Ylx1MDQzOV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJl''@;'; put 'put ''dHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0M2Rc''@;'; put 'put ''dTA0MzBcdTA0MzdcdTA0MzBcdTA0MzQiLHM6Ilx1MDQzZFx1MDQzNVx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOm8sbTpvLG1tOm8saDoiXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDpvLGQ6''@;'; put 'put ''Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6byx3OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGYiLHd3Om8sTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTpvLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6b30sbWVyaWRpZW1QYXJzZTovXHUw''@;'; put 'put ''NDNkXHUwNDNlXHUwNDQ3XHUwNDM4fFx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMHxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwL2ksaXNQTTpmdW5jdGlvbihUKXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUw''@;'; put 'put ''NDQ3XHUwNDM1XHUwNDQwXHUwNDMwKSQvLnRlc3QoVCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFQsQSxNKXtyZXR1cm4gVDw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0MzgiOlQ8MTI/Ilx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCI6VDwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUw''@;'; put 'put ''NDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZXxcdTA0NGYpLyxvcmRpbmFsOmZ1bmN0aW9uKFQsQSl7c3dpdGNoKEEpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6cmV0dXJuIFQrIi1cdTA0''@;'; put 'put ''MzkiO2Nhc2UiRCI6cmV0dXJuIFQrIi1cdTA0MzNcdTA0M2UiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gVCsiLVx1MDQ0ZiI7ZGVmYXVsdDpyZXR1cm4gVH19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDcyNjA4KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgaD1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDYyOFx1MDYzMVx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDY0YSIs''@;'; put 'put ''Ilx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyMVx1MDY1MCIsIlx1MDYyMlx1MDZhZlx1MDYzM1x1MDY3ZCIsIlx1MDYzM1x1MDY0YVx1MDY3ZVx1MDY3ZFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyMlx1MDZhYVx1MDY3ZFx1MDY0OFx1MDYyOFx1''@;'; put 'put ''MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDY4YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLG89WyJcdTA2MjJcdTA2ODZcdTA2MzEiLCJcdTA2MzNcdTA2NDhcdTA2NDVcdTA2MzEiLCJcdTA2MjdcdTA2YjFcdTA2MjdcdTA2MzFcdTA2NDgiLCJcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2MjhcdTA2MzkiLCJcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzMiLCJcdTA2MmNcdTA2NDVcdTA2MzkiLCJcdTA2ODdcdTA2NDZcdTA2ODdcdTA2MzEiXTtTLmRlZmluZUxvY2FsZSgic2QiLHttb250aHM6aCxtb250aHNTaG9ydDpoLHdlZWtkYXlzOm8sd2Vla2RheXNTaG9ydDpv''@;'; put 'put ''LHdlZWtkYXlzTWluOm8sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov''@;'; put 'put ''XHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbihmKXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PWZ9LG1lcmlkaWVtOmZ1bmN0aW9uKGYsVCxBKXtyZXR1cm4gZjwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2ODRdIExUIixuZXh0RGF5OiJbXHUwNjMzXHUwNjgwXHUwNjI3XHUwNmJiXHUwNjRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyN1x1MDZiM1x1MDY0YVx1MDY0NiBcdTA2NDdcdTA2NDFcdTA2MmFcdTA2NGEgXHUwNjJhXHUwNjRh''@;'; put 'put ''XSBMVCIsbGFzdERheToiW1x1MDZhYVx1MDYyN1x1MDY0NFx1MDY0N1x1MDY0N10gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMyXHUwNjMxXHUwNjRhXHUwNjQ0IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0YV0gZGRkZCBbXHUwNjJhXHUwNjRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjdlXHUwNjQ4XHUwNjIxIixwYXN0OiIlcyBcdTA2MjdcdTA2YjMiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLHNzOiIlZCBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLG06Ilx1MDY0N1x1''@;'; put 'put ''MDZhYSBcdTA2NDVcdTA2NDZcdTA2N2QiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2N2QiLGg6Ilx1MDY0N1x1MDZhYSBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGhoOiIlZCBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGQ6Ilx1MDY0N1x1MDZhYSBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2''@;'; put 'put ''NDdcdTA2NDYiLGRkOiIlZCBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLE06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2NDgiLE1NOiIlZCBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2MjciLHk6Ilx1MDY0N1x1MDZhYSBcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShkKDk3NTg2KSl9LDEzOTExKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgic2UiLHttb250aHM6Im9cdTAxMTFcdTAxMTFhamFnZW1ceGUxbm51X2d1b3Z2YW1ceGUxbm51X25qdWtcdTAxMGRhbVx4ZTFubnVfY3VvXHUwMTRib21ceGUxbm51X21p''@;'; put 'put ''ZXNzZW1ceGUxbm51X2dlYXNzZW1ceGUxbm51X3N1b2lkbmVtXHhlMW5udV9ib3JnZW1ceGUxbm51X1x1MDEwZGFrXHUwMTBkYW1ceGUxbm51X2dvbGdnb3RtXHhlMW5udV9za1x4ZTFibWFtXHhlMW5udV9qdW92bGFtXHhlMW5udSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoib1x1MDExMVx1''@;'; put 'put ''MDExMWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX1x1MDEwZGFrXHUwMTBkX2dvbGdfc2tceGUxYl9qdW92Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzb3RuYWJlYWl2aV92dW9zc1x4ZTFyZ2FfbWFcdTAxNGJcdTAxNGJlYlx4ZTFyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0''@;'; put 'put ''X2JlYXJqYWRhdF9sXHhlMXZ2YXJkYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic290bl92dW9zX21hXHUwMTRiX2dhc2tfZHVvcl9iZWFyX2xceGUxdiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic192X21fZ19kX2JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiTU1NTSBELiBbYi5dIFlZWVkiLExMTDoiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltvdG5lIHRp''@;'; put 'put ''XSBMVCIsbmV4dERheToiW2lodHRpbiB0aV0gTFQiLG5leHRXZWVrOiJkZGRkIFt0aV0gTFQiLGxhc3REYXk6Iltpa3RlIHRpXSBMVCIsbGFzdFdlZWs6IltvdmRkaXRdIGRkZGQgW3RpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgZ2VhXHUwMTdlZXMiLHBh''@;'; put 'put ''c3Q6Im1hXHUwMTRiaXQgJXMiLHM6Im1vYWRkZSBzZWt1bmRkYXQiLHNzOiIlZCBzZWt1bmRkYXQiLG06Im9rdGEgbWludWh0YSIsbW06IiVkIG1pbnVodGF0IixoOiJva3RhIGRpaW1tdSIsaGg6IiVkIGRpaW1tdXQiLGQ6Im9rdGEgYmVhaXZpIixkZDoiJWQgYmVhaXZ2aXQiLE06Im9rdGEg''@;'; put 'put ''bVx4ZTFubnUiLE1NOiIlZCBtXHhlMW51dCIseToib2t0YSBqYWhraSIseXk6IiVkIGphZ2l0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDI1MTQ3KHRlLGosZCl7IWZ1bmN0aW9uKFMp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgic2kiLHttb250aHM6Ilx1MGRhMlx1MGRiMVx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjRcdTBkZDlcdTBkYjZcdTBkYmJcdTBkYzBcdTBkY2ZcdTBkYmJcdTBkZDJfXHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhXHUwZGFkXHUwZGQ0''@;'; put 'put ''X1x1MGQ4NVx1MGRiNFx1MGRjYVx1MjAwZFx1MGRiYlx1MGRkYVx1MGRiZFx1MGRjYV9cdTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiZFx1MGRkMl9cdTBkODVcdTBkOWNcdTBkZGRcdTBkYzNcdTBkY2FcdTBkYWRcdTBk''@;'; put 'put ''ZDRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNhXHUwZGFkXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYVx1MGRhZFx1MGRkZFx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkYjFcdTBkZGNcdTBkYzBcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBk''@;'; put 'put ''YmJcdTBkY2FfXHUwZGFmXHUwZGQ5XHUwZGMzXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkYTJcdTBkYjFfXHUwZGI0XHUwZGQ5XHUwZGI2X1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYV9cdTBkODVcdTBkYjRcdTBkY2Ff''@;'; put 'put ''XHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkX1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRjYV9cdTBkOTRcdTBkOWFcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwX1x1''@;'; put 'put ''MGRhZlx1MGRkOVx1MGRjM1x1MGRkMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZDg5XHUwZGJiXHUwZGQyXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRiM1x1MGRkNFx1MGRhZlx1MGRjZl9cdTBkODVcdTBkOWZcdTBkYzRcdTBkYmJcdTBkZDRcdTBkYzBcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUw''@;'; put 'put ''ZGI2XHUwZGFmXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYlx1MGRjNFx1MGRjM1x1MGRjYVx1MGRiNFx1MGRhZFx1MGRkMlx1MGRiMVx1MGRjYVx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkZDJcdTBkOWFcdTBkZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUw''@;'; put 'put ''ZGMzXHUwZGQ5XHUwZGIxXHUwZGMzXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQ4OVx1MGRiYlx1MGRkMl9cdTBkYzNcdTBkYjNcdTBkZDRfXHUwZDg1XHUwZDlmX1x1MGRiNlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIw''@;'; put 'put ''MGRcdTBkYmJcdTBkYzRfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0X1x1MGRjM1x1MGRkOVx1MGRiMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDg5X1x1MGRjM19cdTBkODVfXHUwZGI2X1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYl9cdTBkYzNcdTBkZDJfXHUwZGMzXHUwZGQ5Ii5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZIE1NTU0gRCIsTExMOiJZWVlZIE1NTU0gRCwgYSBoOm1tIixMTExMOiJZWVlZIE1NTU0gRCBbXHUwZGMwXHUwZGQw''@;'; put 'put ''XHUwZGIxXHUwZGQyXSBkZGRkLCBhIGg6bW06c3MifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQ4NVx1MGRhZl0gTFRbXHUwZGE3XSIsbmV4dERheToiW1x1MGRjNFx1MGRkOVx1MGRhN10gTFRbXHUwZGE3XSIsbmV4dFdlZWs6ImRkZGQgTFRbXHUwZGE3XSIsbGFzdERheToiW1x1MGQ4YVx1''@;'; put 'put ''MGRiYVx1MGRkYV0gTFRbXHUwZGE3XSIsbGFzdFdlZWs6IltcdTBkYjRcdTBkYzNcdTBkZDRcdTBkOWNcdTBkZDJcdTBkYmFdIGRkZGQgTFRbXHUwZGE3XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTBkOWFcdTBkZDJcdTBkYjFcdTBkY2EiLHBhc3Q6IiVzXHUw''@;'; put 'put ''ZDlhXHUwZGE3IFx1MGRiNFx1MGRkOVx1MGRiYiIsczoiXHUwZGFkXHUwZGFkXHUwZGNhXHUwZGI0XHUwZGJiIFx1MGQ5YVx1MGRkMlx1MGRjNFx1MGRkMlx1MGRiNFx1MGRiYSIsc3M6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiAlZCIsbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUw''@;'; put 'put ''ZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0XHUwZGMwIixtbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0ICVkIixoOiJcdTBkYjRcdTBkZDBcdTBkYmEiLGhoOiJcdTBkYjRcdTBkZDBcdTBkYmEgJWQiLGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMVx1''@;'; put 'put ''MGRiYSIsZGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMSAlZCIsTToiXHUwZGI4XHUwZGNmXHUwZGMzXHUwZGJhIixNTToiXHUwZGI4XHUwZGNmXHUwZGMzICVkIix5OiJcdTBkYzBcdTBkYzNcdTBkYmIiLHl5OiJcdTBkYzBcdTBkYzNcdTBkYmIgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9IFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMi8sb3JkaW5hbDpmdW5jdGlvbihvKXtyZXR1cm4gbysiIFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGMzXHUwZGNhIFx1''@;'; put 'put ''MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBkZDkuXHUwZGMwfFx1MGRiNC5cdTBkYzAuLyxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybiJcdTBkYjQuXHUwZGMwLiI9PT1vfHwiXHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI9PT1vfSxtZXJpZGllbTpmdW5jdGlvbihvLEks''@;'; put 'put ''Zil7cmV0dXJuIG8+MTE/Zj8iXHUwZGI0Llx1MGRjMC4iOiJcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0IjpmPyJcdTBkYjRcdTBkZDkuXHUwZGMwLiI6Ilx1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDQifX0pfShkKDk3NTg2KSl9LDIzNzQxKHRlLGos''@;'; put 'put ''ZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD0iamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhmYWxfYXVndXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG89Imphbl9mZWJfbWFy''@;'; put 'put ''X2Fwcl9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIEkoQSl7cmV0dXJuIEE+MSYmQTw1fWZ1bmN0aW9uIGYoQSxNLE8sRCl7dmFyIEU9QSsiICI7c3dpdGNoKE8pe2Nhc2UicyI6cmV0dXJuIE18fEQ/InBceGUxciBzZWtceGZh''@;'; put 'put ''bmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gTXx8RD9FKyhJKEEpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6RSsic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBNPyJtaW5ceGZhdGEiOkQ/Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiBNfHxE''@;'; put 'put ''P0UrKEkoQSk/Im1pblx4ZmF0eSI6Im1pblx4ZmF0Iik6RSsibWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIE0/ImhvZGluYSI6RD8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIE18fEQ/RSsoSShBKT8iaG9kaW55IjoiaG9kXHhlZG4iKTpFKyJob2RpbmFtaSI7Y2FzZSJk''@;'; put 'put ''IjpyZXR1cm4gTXx8RD8iZGVcdTAxNDgiOiJkXHUwMTQ4b20iO2Nhc2UiZGQiOnJldHVybiBNfHxEP0UrKEkoQSk/ImRuaSI6ImRuXHhlZCIpOkUrImRcdTAxNDhhbWkiO2Nhc2UiTSI6cmV0dXJuIE18fEQ/Im1lc2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4gTXx8RD9FKyhJKEEp''@;'; put 'put ''PyJtZXNpYWNlIjoibWVzaWFjb3YiKTpFKyJtZXNpYWNtaSI7Y2FzZSJ5IjpyZXR1cm4gTXx8RD8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiBNfHxEP0UrKEkoQSk/InJva3kiOiJyb2tvdiIpOkUrInJva21pIn19Uy5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOmgsbW9udGhzU2hv''@;'; put 'put ''cnQ6byx3ZWVrZGF5czoibmVkZVx1MDEzZWFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9z''@;'; put 'put ''dF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltkbmVzIG9dIExUIixuZXh0RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2Ug''@;'; put 'put ''MzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9dIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSBvXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6''@;'; put 'put ''ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1''@;'; put 'put ''IG9dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmVkICVzIixzOmYsc3M6ZixtOmYsbW06ZixoOmYsaGg6ZixkOmYsZGQ6ZixNOmYsTU06Zix5OmYseXk6Zn0sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDkzZTModGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGgoSSxmLFQsQSl7dmFyIE09SSsiICI7c3dpdGNoKFQpe2Nhc2Ui''@;'; put 'put ''cyI6cmV0dXJuIGZ8fEE/Im5la2FqIHNla3VuZCI6Im5la2FqIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE0rKDE9PT1JP2Y/InNla3VuZG8iOiJzZWt1bmRpIjoyPT09ST9mfHxBPyJzZWt1bmRpIjoic2VrdW5kYWgiOkk8NT9mfHxBPyJzZWt1bmRlIjoic2VrdW5kYWgiOiJzZWt1bmQi''@;'; put 'put ''KTtjYXNlIm0iOnJldHVybiBmPyJlbmEgbWludXRhIjoiZW5vIG1pbnV0byI7Y2FzZSJtbSI6cmV0dXJuIE0rKDE9PT1JP2Y/Im1pbnV0YSI6Im1pbnV0byI6Mj09PUk/Znx8QT8ibWludXRpIjoibWludXRhbWEiOkk8NT9mfHxBPyJtaW51dGUiOiJtaW51dGFtaSI6Znx8QT8ibWludXQiOiJt''@;'; put 'put ''aW51dGFtaSIpO2Nhc2UiaCI6cmV0dXJuIGY/ImVuYSB1cmEiOiJlbm8gdXJvIjtjYXNlImhoIjpyZXR1cm4gTSsoMT09PUk/Zj8idXJhIjoidXJvIjoyPT09ST9mfHxBPyJ1cmkiOiJ1cmFtYSI6STw1P2Z8fEE/InVyZSI6InVyYW1pIjpmfHxBPyJ1ciI6InVyYW1pIik7Y2FzZSJkIjpyZXR1''@;'; put 'put ''cm4gZnx8QT8iZW4gZGFuIjoiZW5pbSBkbmVtIjtjYXNlImRkIjpyZXR1cm4gTSsoMT09PUk/Znx8QT8iZGFuIjoiZG5lbSI6Mj09PUk/Znx8QT8iZG5pIjoiZG5ldm9tYSI6Znx8QT8iZG5pIjoiZG5ldmkiKTtjYXNlIk0iOnJldHVybiBmfHxBPyJlbiBtZXNlYyI6ImVuaW0gbWVzZWNlbSI7''@;'; put 'put ''Y2FzZSJNTSI6cmV0dXJuIE0rKDE9PT1JP2Z8fEE/Im1lc2VjIjoibWVzZWNlbSI6Mj09PUk/Znx8QT8ibWVzZWNhIjoibWVzZWNlbWEiOkk8NT9mfHxBPyJtZXNlY2UiOiJtZXNlY2kiOmZ8fEE/Im1lc2VjZXYiOiJtZXNlY2kiKTtjYXNlInkiOnJldHVybiBmfHxBPyJlbm8gbGV0byI6ImVu''@;'; put 'put ''aW0gbGV0b20iO2Nhc2UieXkiOnJldHVybiBNKygxPT09ST9mfHxBPyJsZXRvIjoibGV0b20iOjI9PT1JP2Z8fEE/ImxldGkiOiJsZXRvbWEiOkk8NT9mfHxBPyJsZXRhIjoibGV0aSI6Znx8QT8ibGV0IjoibGV0aSIpfX1TLmRlZmluZUxvY2FsZSgic2wiLHttb250aHM6ImphbnVhcl9mZWJy''@;'; put 'put ''dWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV9cdTAxMGRldHJ0ZWtfcGV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl90b3IuX3NyZS5fXHUwMTBkZXQuX3BldC5fc29iLiIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdG9fc3JfXHUwMTBkZV9wZV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELiBNTS4gWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBN''@;'; put 'put ''TU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmVzIG9iXSBMVCIsbmV4dERheToiW2p1dHJpIG9iXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdl0gW25l''@;'; put 'put ''ZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZdIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbdl0gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdl0gZGRkZCBbb2JdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhaiBv''@;'; put 'put ''Yl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtuZWRlbGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIltwcmVqXHUwMTYxbmpvXSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ByZWpcdTAx''@;'; put 'put ''NjFuam9dIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ByZWpcdTAxNjFuamldIGRkZGQgW29iXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAxMGRleiAlcyIscGFzdDoicHJlZCAlcyIsczpoLHNzOmgs''@;'; put 'put ''bTpoLG1tOmgsaCxoaDpoLGQ6aCxkZDpoLE06aCxNTTpoLHk6aCx5eTpofSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYpKX0sNjA0NTEodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O1MuZGVmaW5lTG9jYWxlKCJzcSIse21vbnRoczoiSmFuYXJfU2hrdXJ0X01hcnNfUHJpbGxfTWFqX1FlcnNob3JfS29ycmlrX0d1c2h0X1NodGF0b3JfVGV0b3JfTlx4ZWJudG9yX0RoamV0b3IiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9TaGtfTWFyX1ByaV9NYWpfUWVyX0tvcl9H''@;'; put 'put ''dXNfU2h0X1RldF9OXHhlYm5fRGhqIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJFIERpZWxfRSBIXHhlYm5ceGViX0UgTWFydFx4ZWJfRSBNXHhlYnJrdXJceGViX0UgRW5qdGVfRSBQcmVtdGVfRSBTaHR1blx4ZWIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRGllX0hceGVibl9NYXJfTVx4''@;'; put 'put ''ZWJyX0Vual9QcmVfU2h0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEX0hfTWFfTVx4ZWJfRV9QX1NoIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNlOi9QRHxNRC8saXNQTTpmdW5jdGlvbihvKXtyZXR1cm4iTSI9PT1vLmNoYXJBdCgwKX0sbWVyaWRp''@;'; put 'put ''ZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDEyPyJQRCI6Ik1EIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbU290IG5ceGViXSBMVCIsbmV4dERheToiW05lc1x4ZWJyIG5ceGViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW25ceGViXSBMVCIsbGFzdERheToiW0RqZSBuXHhlYl0gTFQiLGxhc3RXZWVrOiJkZGRkIFtlIGthbHVhciBuXHhlYl0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5ceGViICVzIixwYXN0OiIlcyBtXHhlYiBwYXJceGViIixzOiJkaXNhIHNla29uZGEiLHNzOiIlZCBzZWtvbmRhIixtOiJualx4ZWIgbWludXRceGViIixtbToiJWQgbWludXRhIixoOiJualx4ZWIgb3JceGViIixoaDoiJWQgb3JceGVi''@;'; put 'put ''IixkOiJualx4ZWIgZGl0XHhlYiIsZGQ6IiVkIGRpdFx4ZWIiLE06Im5qXHhlYiBtdWFqIixNTToiJWQgbXVhaiIseToibmpceGViIHZpdCIseXk6IiVkIHZpdGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9''@;'; put 'put ''KGQoOTc1ODYpKX0sNDA5MDUodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXt3b3Jkczp7c3M6WyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzAiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzUiLCJcdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiXSxtOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0MzhcdTA0M2Rc''@;'; put 'put ''dTA0NDNcdTA0NDJcdTA0MzAiXSxtbTpbIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLGg6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBc''@;'; put 'put ''dTA0M2QgXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCJdLGhoOlsiXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUw''@;'; put 'put ''NDM4Il0sZDpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sZGQ6WyJcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0MzRcdTA0MzBc''@;'; put 'put ''dTA0M2RcdTA0MzAiLCJcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiXSxNOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0MzVcdTA0NDFc''@;'; put 'put ''dTA0MzVcdTA0NDZcdTA0MzAiXSxNTTpbIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCJdLHk6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2Rc''@;'; put 'put ''dTA0NDMgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDM1IFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSJdLHl5OlsiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDMz''@;'; put 'put ''XHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM1IiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oSSxmKXtyZXR1cm4gSSUxMD49MSYmSSUxMDw9NCYmKEklMTAwPDEwfHxJJTEwMD49MjApP0klMTA9PTE/''@;'; put 'put ''ZlswXTpmWzFdOmZbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihJLGYsVCxBKXt2YXIgTyxNPWgud29yZHNbVF07cmV0dXJuIDE9PT1ULmxlbmd0aD8ieSI9PT1UJiZmPyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjpB''@;'; put 'put ''fHxmP01bMF06TVsxXTooTz1oLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoSSxNKSwieXkiPT09VCYmZiYmIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI9PT1PP0krIiBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOkkrIiAiK08pfX07Uy5kZWZpbmVM''@;'; put 'put ''b2NhbGUoInNyLWN5cmwiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzFcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0''@;'; put 'put ''M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1''@;'; put 'put ''MDQzZVx1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0MzJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2Qu''@;'; put 'put ''X1x1MDQ0NFx1MDQzNVx1MDQzMS5fXHUwNDNjXHUwNDMwXHUwNDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNmLl9cdTA0M2Vc''@;'; put 'put ''dTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQzMi5fXHUwNDM0XHUwNDM1XHUwNDQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDU5XHUwNDMwXHUwNDNhX1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzMFx1''@;'; put 'put ''MDQzYV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0Ll9cdTA0M2ZcdTA0M2VcdTA0M2QuX1x1MDQ0M1x1MDQ0Mlx1MDQzZS5fXHUwNDQxXHUwNDQwXHUwNDM1Ll9cdTA0NDdcdTA0MzVcdTA0''@;'; put 'put ''NDIuX1x1MDQzZlx1MDQzNVx1MDQ0Mi5fXHUwNDQxXHUwNDQzXHUwNDMxLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM1X1x1MDQzZlx1MDQzZV9cdTA0NDNcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQxXHUwNDQzIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzBcdTA0NDEgXHUwNDQzXSBMVCIsbmV4dERheToiW1x1MDQ0MVx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NDNdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJu''@;'; put 'put ''IltcdTA0NDNdIFtcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDM6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDY6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0''@;'; put 'put ''NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0NDNdIGRkZGQgW1x1MDQ0M10gTFQifX0sbGFzdERheToiW1x1MDQ1OFx1MDQ0M1x1MDQ0N1x1MDQzNSBcdTA0NDNdIExUIixsYXN0V2VlazpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVyblsiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDNmXHUwNDNl''@;'; put 'put ''XHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDNcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1''@;'; put 'put ''MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNh''@;'; put 'put ''XHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0''@;'; put 'put ''M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzNV0gW1x1MDQ0M10gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzUgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1''@;'; put 'put ''MDQzYlx1MDQzOFx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOmgudHJhbnNsYXRlLG06aC50cmFuc2xhdGUsbW06aC50cmFuc2xhdGUsaDpoLnRyYW5zbGF0ZSxoaDpoLnRyYW5zbGF0ZSxkOmgudHJhbnNsYXRlLGRkOmgudHJhbnNs''@;'; put 'put ''YXRlLE06aC50cmFuc2xhdGUsTU06aC50cmFuc2xhdGUseTpoLnRyYW5zbGF0ZSx5eTpoLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDU1MDQ2KHRlLGosZCl7IWZ1bmN0''@;'; put 'put ''aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17d29yZHM6e3NzOlsic2VrdW5kYSIsInNla3VuZGUiLCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxoOlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxo''@;'; put 'put ''aDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZDpbImplZGFuIGRhbiIsImplZG5vZyBkYW5hIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE06WyJqZWRhbiBtZXNlYyIsImplZG5vZyBtZXNlY2EiXSxNTTpbIm1lc2VjIiwibWVzZWNhIiwibWVzZWNpIl0seTpbImplZG51IGdvZGludSIsImpl''@;'; put 'put ''ZG5lIGdvZGluZSJdLHl5OlsiZ29kaW51IiwiZ29kaW5lIiwiZ29kaW5hIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oSSxmKXtyZXR1cm4gSSUxMD49MSYmSSUxMDw9NCYmKEklMTAwPDEwfHxJJTEwMD49MjApP0klMTA9PTE/ZlswXTpmWzFdOmZbMl19LHRyYW5zbGF0ZTpm''@;'; put 'put ''dW5jdGlvbihJLGYsVCxBKXt2YXIgTyxNPWgud29yZHNbVF07cmV0dXJuIDE9PT1ULmxlbmd0aD8ieSI9PT1UJiZmPyJqZWRuYSBnb2RpbmEiOkF8fGY/TVswXTpNWzFdOihPPWguY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShJLE0pLCJ5eSI9PT1UJiZmJiYiZ29kaW51Ij09PU8/SSsiIGdvZGlu''@;'; put 'put ''YSI6SSsiICIrTyl9fTtTLmRlZmluZUxvY2FsZSgic3IiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9h''@;'; put 'put ''cHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hv''@;'; put 'put ''cnQ6Im5lZC5fcG9uLl91dG8uX3NyZS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06''@;'; put 'put ''c3MiLEw6IkQuIE0uIFlZWVkuIixMTDoiRC4gTU1NTSBZWVlZLiIsTExMOiJELiBNTU1NIFlZWVkuIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWS4gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVu''@;'; put 'put ''Y3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVy''@;'; put 'put ''biJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltwcm9cdTAxNjFsZV0gW25lZGVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbdXRv''@;'; put 'put ''cmthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzcmVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByZSAlcyIsczoibmVrb2xpa28gc2VrdW5kaSIsc3M6aC50cmFuc2xhdGUsbTpoLnRyYW5zbGF0ZSxtbTpoLnRyYW5zbGF0ZSxoOmgudHJhbnNsYXRlLGhoOmgudHJhbnNsYXRlLGQ6aC50cmFuc2xhdGUsZGQ6''@;'; put 'put ''aC50cmFuc2xhdGUsTTpoLnRyYW5zbGF0ZSxNTTpoLnRyYW5zbGF0ZSx5OmgudHJhbnNsYXRlLHl5OmgudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGQoOTc1ODYpKX0sODU3NjUodGUsaixk''@;'; put 'put ''KXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJzcyIse21vbnRoczoiQmhpbWJpZHZ3YW5lX0luZGxvdmFuYV9JbmRsb3YnbGVua2h1bHVfTWFiYXNhX0lua2h3ZWtod2V0aV9JbmhsYWJhX0tob2x3YW5lX0luZ2NpX0lueW9uaV9JbXBoYWxhX0x3ZXRpX0luZ29u''@;'; put 'put ''Z29uaSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiQmhpX0luYV9JbnVfTWFiX0lua19JbmhfS2hvX0lnY19JbnlfSW1wX0x3ZV9JZ28iLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpc29udGZvX1Vtc29tYnVsdWtvX0xlc2liaWxpX0xlc2l0c2F0ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJl''@;'; put 'put ''bG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGlzX1VtYl9Mc2JfTGVzX0xzaV9Mc2hfVW1nIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9Vc19MYl9MdF9Mc19MaF9VZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEi''@;'; put 'put ''LExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW05hbXVobGEgbmdhXSBMVCIsbmV4dERheToiW0t1c2FzYSBuZ2Fd''@;'; put 'put ''IExUIixuZXh0V2VlazoiZGRkZCBbbmdhXSBMVCIsbGFzdERheToiW0l0b2xvIG5nYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5nYSAlcyIscGFzdDoid2VudGVrYSBuZ2EgJXMiLHM6ImVt''@;'; put 'put ''aXp1endhbmEgbG9tY2FuZSIsc3M6IiVkIG16dXp3YW5hIixtOiJ1bXp1enUiLG1tOiIlZCBlbWl6dXp1IixoOiJsaWhvcmEiLGhoOiIlZCBlbWFob3JhIixkOiJsaWxhbmdhIixkZDoiJWQgZW1hbGFuZ2EiLE06ImlueWFuZ2EiLE1NOiIlZCB0aW55YW5nYSIseToidW1ueWFrYSIseXk6IiVk''@;'; put 'put ''IGltaW55YWthIn0sbWVyaWRpZW1QYXJzZTovZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLG1lcmlkaWVtOmZ1bmN0aW9uKG8sSSxmKXtyZXR1cm4gbzwxMT8iZWt1c2VuaSI6bzwxNT8iZW1pbmkiOm88MTk/ImVudHNhbWJhbWEiOiJlYnVzdWt1In0sbWVyaWRpZW1Ib3VyOmZ1''@;'; put 'put ''bmN0aW9uKG8sSSl7cmV0dXJuIDEyPT09byYmKG89MCksImVrdXNlbmkiPT09ST9vOiJlbWluaSI9PT1JP28+PTExP286bysxMjoiZW50c2FtYmFtYSI9PT1JfHwiZWJ1c3VrdSI9PT1JPzA9PT1vPzA6bysxMjp2b2lkIDB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGlu''@;'; put 'put ''YWw6IiVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw5OTI5MCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoInN2Iix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRl''@;'; put 'put ''bWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjZuZGFnX21ceGU1bmRhZ190aXNkYWdfb25zZGFnX3RvcnNk''@;'; put 'put ''YWdfZnJlZGFnX2xceGY2cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmNm5fbVx4ZTVuX3Rpc19vbnNfdG9yX2ZyZV9sXHhmNnIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY2X21ceGU1X3RpX29uX3RvX2ZyX2xceGY2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQgRCBNTU0g''@;'; put 'put ''WVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWRhZ10gTFQiLG5leHREYXk6IltJbW9yZ29uXSBMVCIsbGFzdERheToiW0lnXHhlNXJdIExUIixuZXh0V2VlazoiW1BceGU1XSBkZGRkIExUIixsYXN0V2VlazoiW0ldIGRkZGRbc10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVU''@;'; put 'put ''aW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiJmXHhmNnIgJXMgc2VkYW4iLHM6Im5ceGU1Z3JhIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImVuIG1pbnV0IixtbToiJWQgbWludXRlciIsaDoiZW4gdGltbWUiLGhoOiIlZCB0aW1tYXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2FyIixN''@;'; put 'put ''OiJlbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcOmV8XDphKS8sb3JkaW5hbDpmdW5jdGlvbihvKXt2YXIgST1vJTEwO3JldHVybiBvKygxPT1+fihvJTEwMC8xMCk/Ijpl''@;'; put 'put ''IjoxPT09SXx8Mj09PUk/IjphIjoiOmUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNTM0NDkodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJzdyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNoaV9BcHJpbGlfTWVpX0p1''@;'; put 'put ''bmlfSnVsYWlfQWdvc3RpX1NlcHRlbWJhX09rdG9iYV9Ob3ZlbWJhX0Rlc2VtYmEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJKdW1hcGlsaV9KdW1hdGF0dV9KdW1h''@;'; put 'put ''bm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJKcGxfSnRhdF9Kbm5lX0p0YW5fQWxoX0lqbV9KbW9zIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJKMl9KM19KNF9KNV9BbF9Jal9KMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoaDptbSBBIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilts''@;'; put 'put ''ZW8gc2FhXSBMVCIsbmV4dERheToiW2tlc2hvIHNhYV0gTFQiLG5leHRXZWVrOiJbd2lraSBpamF5b10gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltqYW5hXSBMVCIsbGFzdFdlZWs6Ilt3aWtpIGlsaXlvcGl0YV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6IiVzIGJhYWRheWUiLHBhc3Q6InRva2VhICVzIixzOiJoaXZpIHB1bmRlIixzczoic2VrdW5kZSAlZCIsbToiZGFraWthIG1vamEiLG1tOiJkYWtpa2EgJWQiLGg6InNhYSBsaW1vamEiLGhoOiJtYXNhYSAlZCIsZDoic2lrdSBtb2phIixkZDoic2lrdSAlZCIsTToibXdlemkg''@;'; put 'put ''bW1vamEiLE1NOiJtaWV6aSAlZCIseToibXdha2EgbW1vamEiLHl5OiJtaWFrYSAlZCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDcyNjg4KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD17MToiXHUwYmU3IiwyOiJcdTBiZTgiLDM6Ilx1MGJlOSIs''@;'; put 'put ''NDoiXHUwYmVhIiw1OiJcdTBiZWIiLDY6Ilx1MGJlYyIsNzoiXHUwYmVkIiw4OiJcdTBiZWUiLDk6Ilx1MGJlZiIsMDoiXHUwYmU2In0sbz17Ilx1MGJlNyI6IjEiLCJcdTBiZTgiOiIyIiwiXHUwYmU5IjoiMyIsIlx1MGJlYSI6IjQiLCJcdTBiZWIiOiI1IiwiXHUwYmVjIjoiNiIsIlx1MGJl''@;'; put 'put ''ZCI6IjciLCJcdTBiZWUiOiI4IiwiXHUwYmVmIjoiOSIsIlx1MGJlNiI6IjAifTtTLmRlZmluZUxvY2FsZSgidGEiLHttb250aHM6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUw''@;'; put 'put ''YmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2Rf''@;'; put 'put ''XHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2Rf''@;'; put 'put ''XHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBiOWNcdTBiYTlcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFhXHUwYmJmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhZVx1MGJi''@;'; put 'put ''ZVx1MGJiMFx1MGJjZFx1MGI5YVx1MGJjZF9cdTBiOGZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjJcdTBiY2RfXHUwYmFlXHUwYmM3X1x1MGI5Y1x1MGJjMlx1MGJhOVx1MGJjZF9cdTBiOWNcdTBiYzJcdTBiYjJcdTBiYzhfXHUwYjg2XHUwYjk1XHUwYmI4XHUwYmNkXHUwYjlmXHUwYmNkX1x1''@;'; put 'put ''MGI5YVx1MGJjNlx1MGJhYVx1MGJjZFx1MGI5Zlx1MGJjNlx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiODVcdTBiOTVcdTBiY2RcdTBiOWZcdTBiYzdcdTBiYmVcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYmE4XHUwYmI1XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1''@;'; put 'put ''MGI5Zlx1MGJiZlx1MGI5YVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmNkXHUwYmIxXHUwYmMxXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJh''@;'; put 'put ''NFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGI5Zlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYzZcdTBiYjVcdTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmFhXHUwYmMxXHUwYmE0''@;'; put 'put ''XHUwYmE5XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZcdTBiOTVcdTBiY2Rc''@;'; put 'put ''dTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYjlhXHUwYmE5XHUwYmJmXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGI5ZVx1MGJiZVx1MGJhZlx1MGJiZlx1MGJiMVx1MGJjMV9cdTBiYTRcdTBi''@;'; put 'put ''YmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmI1XHUwYmNkXHUwYmI1XHUwYmJlXHUwYmFmXHUwYmNkX1x1MGJhYVx1MGJjMVx1MGJhNFx1MGJhOVx1MGJjZF9cdTBiYjVcdTBiYmZcdTBiYWZcdTBiYmVcdTBiYjRcdTBiYTlcdTBiY2RfXHUwYmI1XHUw''@;'; put 'put ''YmM2XHUwYmIzXHUwYmNkXHUwYmIzXHUwYmJmX1x1MGI5YVx1MGJhOVx1MGJiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYjllXHUwYmJlX1x1MGJhNFx1MGJiZl9cdTBiOWFcdTBiYzZfXHUwYmFhXHUwYmMxX1x1MGJiNVx1MGJiZl9cdTBiYjVcdTBiYzZfXHUwYjlhIi5zcGxpdCgi''@;'; put 'put ''XyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYjg3XHUw''@;'; put 'put ''YmE5XHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbmV4dERheToiW1x1MGJhOFx1MGJiZVx1MGJiM1x1MGJjOF0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGJhOFx1MGJjN1x1MGJiMVx1MGJjZFx1MGJiMVx1MGJjMV0gTFQiLGxhc3RXZWVrOiJbXHUwYjk1XHUwYjlmXHUw''@;'; put 'put ''YmE4XHUwYmNkXHUwYmE0IFx1MGJiNVx1MGJiZVx1MGJiMFx1MGJhZVx1MGJjZF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGI4N1x1MGJiMlx1MGJjZCIscGFzdDoiJXMgXHUwYmFlXHUwYmMxXHUwYmE5XHUwYmNkIixzOiJcdTBiOTJcdTBi''@;'; put 'put ''YjBcdTBiYzEgXHUwYjlhXHUwYmJmXHUwYmIyIFx1MGJiNVx1MGJiZlx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsc3M6IiVkIFx1MGJiNVx1MGJiZlx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsbToiXHUwYjkyXHUwYmIwXHUw''@;'; put 'put ''YmMxIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGJhZVx1MGJjZCIsbW06IiVkIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZCIsaDoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhZVx1MGJhM1x1MGJiZiBcdTBiYThc''@;'; put 'put ''dTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGhoOiIlZCBcdTBiYWVcdTBiYTNcdTBiYmYgXHUwYmE4XHUwYmM3XHUwYmIwXHUwYmFlXHUwYmNkIixkOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4XHUwYmJlXHUwYmIzXHUwYmNkIixkZDoiJWQgXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmNkXHUw''@;'; put 'put ''Yjk1XHUwYmIzXHUwYmNkIixNOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmJlXHUwYmE0XHUwYmFlXHUwYmNkIixNTToiJWQgXHUwYmFlXHUwYmJlXHUwYmE0XHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIix5OiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmI1XHUwYmIwXHUw''@;'; put 'put ''YmMxXHUwYjlmXHUwYmFlXHUwYmNkIix5eToiJWQgXHUwYjg2XHUwYmEzXHUwYmNkXHUwYjlmXHUwYmMxXHUwYjk1XHUwYmIzXHUwYmNkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MGJiNVx1MGJhNFx1MGJjMS8sb3JkaW5hbDpmdW5jdGlvbihmKXtyZXR1cm4gZisiXHUw''@;'; put 'put ''YmI1XHUwYmE0XHUwYmMxIn0scHJlcGFyc2U6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvW1x1MGJlN1x1MGJlOFx1MGJlOVx1MGJlYVx1MGJlYlx1MGJlY1x1MGJlZFx1MGJlZVx1MGJlZlx1MGJlNl0vZyxmdW5jdGlvbihUKXtyZXR1cm4gb1tUXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiBmLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oVCl7cmV0dXJuIGhbVF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkfFx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOHxcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzh8XHUwYmE4''@;'; put 'put ''XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkfFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMXxcdTBiYWVcdTBiYmVcdTBiYjJcdTBiYzgvLG1lcmlkaWVtOmZ1bmN0aW9uKGYsVCxBKXtyZXR1cm4gZjwyPyIgXHUwYmFmXHUwYmJlXHUwYmFlXHUw''@;'; put 'put ''YmFlXHUwYmNkIjpmPDY/IiBcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzgiOmY8MTA/IiBcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiOmY8MTQ/IiBcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2QiOmY8MTg/IiBcdTBiOGVcdTBiYjFcdTBiY2RcdTBiYWFc''@;'; put 'put ''dTBiYmVcdTBiOWZcdTBiYzEiOmY8MjI/IiBcdTBiYWVcdTBiYmVcdTBiYjJcdTBiYzgiOiIgXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIn0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGYsVCl7cmV0dXJuIDEyPT09ZiYmKGY9MCksIlx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJj''@;'; put 'put ''ZCI9PT1UP2Y8Mj9mOmYrMTI6Ilx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOCI9PT1UfHwiXHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4Ij09PVR8fCJcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2QiPT09VCYmZj49MTA/ZjpmKzEyfSx3ZWVrOntkb3c6MCxk''@;'; put 'put ''b3k6Nn19KX0oZCg5NzU4NikpfSwzMjA2MCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoInRlIix7bW9udGhzOiJcdTBjMWNcdTBjMjhcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJiXHUwYzNmXHUwYzJjXHUwYzRkXHUwYzMwXHUwYzM1XHUwYzMwXHUw''@;'; put 'put ''YzNmX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMzJcdTBjNGRfXHUwYzJlXHUwYzQ3X1x1MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3XHUwYzM4''@;'; put 'put ''XHUwYzRkXHUwYzFmXHUwYzQxX1x1MGMzOFx1MGM0Nlx1MGMyYVx1MGM0ZFx1MGMxZlx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzI4XHUwYzM1XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRk''@;'; put 'put ''X1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzFjXHUwYzI4Ll9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzAuX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZc''@;'; put 'put ''dTBjMmFcdTBjNGRcdTBjMzBcdTBjM2YuX1x1MGMyZVx1MGM0N19cdTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMwNlx1MGMxNy5fXHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkLl9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGIuX1x1MGMy''@;'; put 'put ''OFx1MGMzNS5fXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjMDZcdTBjMjZcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM4XHUwYzRiXHUwYzJlXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1''@;'; put 'put ''MGMyZVx1MGMwMlx1MGMxN1x1MGMzM1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMmNcdTBjNDFcdTBjMjdcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzE3XHUwYzQxXHUwYzMwXHUwYzQxXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1''@;'; put 'put ''MGMzMFx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZcdTBjMjhcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYzA2XHUwYzI2XHUwYzNmX1x1MGMzOFx1MGM0Ylx1MGMyZV9cdTBjMmVcdTBjMDJcdTBjMTdcdTBjMzNfXHUw''@;'; put 'put ''YzJjXHUwYzQxXHUwYzI3X1x1MGMxN1x1MGM0MVx1MGMzMFx1MGM0MV9cdTBjMzZcdTBjNDFcdTBjMTVcdTBjNGRcdTBjMzBfXHUwYzM2XHUwYzI4XHUwYzNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjMDZfXHUwYzM4XHUwYzRiX1x1MGMyZVx1MGMwMl9cdTBjMmNcdTBjNDFfXHUw''@;'; put 'put ''YzE3XHUwYzQxX1x1MGMzNlx1MGM0MV9cdTBjMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZ''@;'; put 'put ''WVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzI4XHUwYzQ3XHUwYzIxXHUwYzQxXSBMVCIsbmV4dERheToiW1x1MGMzMFx1MGM0N1x1MGMyYVx1MGM0MV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGMyOFx1MGMzZlx1MGMyOFx1MGM0ZFx1MGMyOF0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJbXHUwYzE3XHUwYzI0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYzMyXHUwYzRiIixwYXN0OiIlcyBcdTBjMTVcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMjRcdTBjMDIiLHM6Ilx1MGMxNVx1MGM0YVx1MGMyOFx1MGM0''@;'; put 'put ''ZFx1MGMyOFx1MGMzZiBcdTBjMTVcdTBjNGRcdTBjMzdcdTBjMjNcdTBjM2VcdTBjMzJcdTBjNDEiLHNzOiIlZCBcdTBjMzhcdTBjNDZcdTBjMTVcdTBjMjhcdTBjNGRcdTBjMzJcdTBjNDEiLG06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjMDIiLG1t''@;'; put 'put ''OiIlZCBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjM2VcdTBjMzJcdTBjNDEiLGg6Ilx1MGMxMlx1MGMxNSBcdTBjMTdcdTBjMDJcdTBjMWYiLGhoOiIlZCBcdTBjMTdcdTBjMDJcdTBjMWZcdTBjMzJcdTBjNDEiLGQ6Ilx1MGMxMlx1MGMxNSBcdTBjMzBcdTBjNGJcdTBjMWNc''@;'; put 'put ''dTBjNDEiLGRkOiIlZCBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDEiLE06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjNDZcdTBjMzIiLE1NOiIlZCBcdTBjMjhcdTBjNDZcdTBjMzJcdTBjMzJcdTBjNDEiLHk6Ilx1MGMxMlx1MGMxNSBcdTBjMzhcdTBjMDJcdTBjMzVcdTBj''@;'; put 'put ''MjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjMDIiLHl5OiIlZCBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjM2VcdTBjMzJcdTBjNDEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYzM1LyxvcmRpbmFsOiIlZFx1MGMzNSIsbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmfFx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMnxcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDJ8XHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMw''@;'; put 'put ''XHUwYzAyLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obyxJKXtyZXR1cm4gMTI9PT1vJiYobz0wKSwiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIj09PUk/bzw0P286bysxMjoiXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIj09PUk/bzoiXHUwYzJlXHUwYzI3XHUwYzRkXHUw''@;'; put 'put ''YzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyIj09PUk/bz49MTA/bzpvKzEyOiJcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIiPT09ST9vKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDQ/Ilx1MGMzMFx1''@;'; put 'put ''MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI6bzwxMD8iXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIjpvPDE3PyJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiOm88MjA/Ilx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0''@;'; put 'put ''ZFx1MGMzMFx1MGMwMiI6Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShkKDk3NTg2KSl9LDkzMjkwKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgidGV0Iix7bW9udGhzOiJKYW5laXJ1''@;'; put 'put ''X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1XHhmMXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0Ficl9NYWlfSnVuX0p1bF9BZ29fU2V0X091dF9Ob3ZfRGV6Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzOiJEb21pbmd1X1NlZ3VuZGFfVGVyc2FfS3VhcnRhX0tpbnRhX1Nlc3RhX1NhYmFkdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRvX1NlZ19UZV9LdV9LaV9TZXNf''@;'; put 'put ''U2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb''@;'; put 'put ''T2hpbiBpaGFdIExUIixuZXh0RGF5OiJbQWJhbiBpaGFdIExUIixuZXh0V2VlazoiZGRkZCBbaWhhXSBMVCIsbGFzdERheToiW0hvcmlzZWlrIGloYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW1hbmEga290dWtdIFtpaGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiJpaGEgJXMiLHBhc3Q6IiVzIGxpdWJhIixzOiJzZWd1bmR1IGJhbHVuIixzczoic2VndW5kdSAlZCIsbToibWludXR1IGlkYSIsbW06Im1pbnV0dSAlZCIsaDoib3JhcyBpZGEiLGhoOiJvcmFzICVkIixkOiJsb3JvbiBpZGEiLGRkOiJsb3JvbiAlZCIsTToiZnVsYW4gaWRhIixNTToiZnVs''@;'; put 'put ''YW4gJWQiLHk6InRpbmFuIGlkYSIseXk6InRpbmFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obyl7dmFyIEk9byUxMDtyZXR1cm4gbysoMT09fn4obyUxMDAvMTApPyJ0aCI6MT09PUk/InN0IjoyPT09ST8ibmQi''@;'; put 'put ''OjM9PT1JPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDgyOTQodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXswOiItXHUwNDQzXHUwNDNjIiwxOiItXHUwNDQzXHUwNDNjIiwyOiItXHUwNDRlXHUwNDNjIiwzOiItXHUwNDRlXHUw''@;'; put 'put ''NDNjIiw0OiItXHUwNDQzXHUwNDNjIiw1OiItXHUwNDQzXHUwNDNjIiw2OiItXHUwNDQzXHUwNDNjIiw3OiItXHUwNDQzXHUwNDNjIiw4OiItXHUwNDQzXHUwNDNjIiw5OiItXHUwNDQzXHUwNDNjIiwxMDoiLVx1MDQ0M1x1MDQzYyIsMTI6Ii1cdTA0NDNcdTA0M2MiLDEzOiItXHUwNDQzXHUw''@;'; put 'put ''NDNjIiwyMDoiLVx1MDQ0M1x1MDQzYyIsMzA6Ii1cdTA0NGVcdTA0M2MiLDQwOiItXHUwNDQzXHUwNDNjIiw1MDoiLVx1MDQ0M1x1MDQzYyIsNjA6Ii1cdTA0NDNcdTA0M2MiLDcwOiItXHUwNDQzXHUwNDNjIiw4MDoiLVx1MDQ0M1x1MDQzYyIsOTA6Ii1cdTA0NDNcdTA0M2MiLDEwMDoiLVx1''@;'; put 'put ''MDQ0M1x1MDQzYyJ9O1MuZGVmaW5lTG9jYWxlKCJ0ZyIse21vbnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzOF9cdTA0''@;'; put 'put ''MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDM5XHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDM4X1x1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQzOCIuc3BsaXQo''@;'; put 'put ''Il8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQz''@;'; put 'put ''OFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUw''@;'; put 'put ''NDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0''@;'; put 'put ''MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJc''@;'; put 'put ''dTA0NGZcdTA0M2FcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDM0XHUwNDQzXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQ0MVx1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0NDdcdTA0M2VcdTA0NDBcdTA0NDhcdTA0MzBcdTA0M2Rc''@;'; put 'put ''dTA0MzFcdTA0MzVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNGI3XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDRiN1x1MDQ0M1x1MDQzY1x1MDQ0YVx1MDQzMF9cdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDRmXHUw''@;'; put 'put ''NDQ4XHUwNDMxX1x1MDQzNFx1MDQ0OFx1MDQzMV9cdTA0NDFcdTA0NDhcdTA0MzFfXHUwNDQ3XHUwNDQ4XHUwNDMxX1x1MDQzZlx1MDQ0OFx1MDQzMV9cdTA0YjdcdTA0NDNcdTA0M2NfXHUwNDQ4XHUwNDNkXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0NGZcdTA0NDhfXHUw''@;'; put 'put ''NDM0XHUwNDQ4X1x1MDQ0MVx1MDQ0OF9cdTA0NDdcdTA0NDhfXHUwNDNmXHUwNDQ4X1x1MDRiN1x1MDQzY19cdTA0NDhcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE4XHUwNDNjXHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHREYXk6IltcdTA0MjRcdTA0MzBcdTA0''@;'; put 'put ''NDBcdTA0MzRcdTA0M2UgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbGFzdERheToiW1x1MDQxNFx1MDQzOFx1MDQ0MFx1MDRlZlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixuZXh0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBc''@;'; put 'put ''dTA0NDRcdTA0NDJcdTA0MzBcdTA0MzggXHUwNDNlXHUwNDRmXHUwNDNkXHUwNDM0XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLGxhc3RXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0MzNcdTA0NDNc''@;'; put 'put ''dTA0MzdcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDMxXHUwNDMwXHUwNDRhXHUwNDM0XHUwNDM4ICVzIixwYXN0OiIlcyBcdTA0M2ZcdTA0MzVcdTA0NDgi''@;'; put 'put ''LHM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0N1x1MDQzMFx1MDQzZFx1MDQzNCBcdTA0NDFcdTA0M2VcdTA0M2RcdTA0MzhcdTA0NGYiLG06Ilx1MDQ0Zlx1MDQzYSBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJc''@;'; put 'put ''dTA0MzAiLGg6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDBcdTA0ZWZcdTA0MzciLGRkOiIlZCBcdTA0NDBcdTA0ZWZcdTA0MzciLE06Ilx1MDQ0Zlx1MDQzYSBcdTA0''@;'; put 'put ''M2NcdTA0M2VcdTA0YjMiLE1NOiIlZCBcdTA0M2NcdTA0M2VcdTA0YjMiLHk6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0M2IiLHl5OiIlZCBcdTA0NDFcdTA0M2VcdTA0M2IifSxtZXJpZGllbVBhcnNlOi9cdTA0NDhcdTA0MzBcdTA0MzF8XHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIz''@;'; put 'put ''fFx1MDQ0MFx1MDRlZlx1MDQzN3xcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihJLGYpe3JldHVybiAxMj09PUkmJihJPTApLCJcdTA0NDhcdTA0MzBcdTA0MzEiPT09Zj9JPDQ/STpJKzEyOiJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiPT09''@;'; put 'put ''Zj9JOiJcdTA0NDBcdTA0ZWZcdTA0MzciPT09Zj9JPj0xMT9JOkkrMTI6Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI9PT1mP0krMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihJLGYsVCl7cmV0dXJuIEk8ND8iXHUwNDQ4XHUwNDMwXHUwNDMxIjpJPDExPyJcdTA0NDFcdTA0''@;'; put 'put ''NDNcdTA0MzFcdTA0YjMiOkk8MTY/Ilx1MDQ0MFx1MDRlZlx1MDQzNyI6STwxOT8iXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIjoiXHUwNDQ4XHUwNDMwXHUwNDMxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQzXHUwNDNjfFx1MDQ0ZVx1MDQzYykvLG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24oSSl7cmV0dXJuIEkrKGhbSV18fGhbSSUxMF18fGhbST49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDEyMzEodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJ0aCIse21vbnRoczoi''@;'; put 'put ''XHUwZTIxXHUwZTAxXHUwZTIzXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzOFx1MGUyMVx1MGUyMFx1MGUzMlx1MGUxZVx1MGUzMVx1MGUxOVx1MGUxOFx1MGU0Y19cdTBlMjFcdTBlMzVcdTBlMTlcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTQwXHUwZTIxXHUwZTI5XHUwZTMyXHUwZTIy''@;'; put 'put ''XHUwZTE5X1x1MGUxZVx1MGUyNFx1MGUyOVx1MGUyMFx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMjFcdTBlMzRcdTBlMTZcdTBlMzhcdTBlMTlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTAxXHUwZTIzXHUwZTAxXHUwZTBlXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUyYVx1MGUzNFx1MGUwN1x1MGUy''@;'; put 'put ''Ylx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzFcdTBlMTlcdTBlMjJcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE1XHUwZTM4XHUwZTI1XHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUxZVx1MGUyNFx1MGUyOFx1MGUwOFx1MGUzNFx1MGUwMVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMThcdTBl''@;'; put 'put ''MzFcdTBlMTlcdTBlMjdcdTBlMzJcdTBlMDRcdTBlMjEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGUyMS5cdTBlMDQuX1x1MGUwMS5cdTBlMWUuX1x1MGUyMVx1MGUzNS5cdTBlMDQuX1x1MGU0MFx1MGUyMS5cdTBlMjIuX1x1MGUxZS5cdTBlMDQuX1x1MGUyMVx1MGUzNC5cdTBlMjIu''@;'; put 'put ''X1x1MGUwMS5cdTBlMDQuX1x1MGUyYS5cdTBlMDQuX1x1MGUwMS5cdTBlMjIuX1x1MGUxNS5cdTBlMDQuX1x1MGUxZS5cdTBlMjIuX1x1MGUxOC5cdTBlMDQuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1''@;'; put 'put ''MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFcdTBlMWFcdTBlMTRcdTBlMzVfXHUwZTI4XHUwZTM4''@;'; put 'put ''XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMxXHUwZTE5XHUwZTE3XHUwZTIzXHUwZTRjX1x1MGUyZFx1''@;'; put 'put ''MGUzMVx1MGUwN1x1MGUwNFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUwZTMxXHUwZTJhX1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBlMjNcdTBlNGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''Ilx1MGUyZFx1MGUzMi5fXHUwZTA4Ll9cdTBlMmQuX1x1MGUxZS5fXHUwZTFlXHUwZTI0Ll9cdTBlMjguX1x1MGUyYS4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0iLExMTEw6Ilx1MGUyN1x1MGUzMVx1MGUxOWRkZGRcdTBlMTdcdTBlMzVcdTBlNDggRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9c''@;'; put 'put ''dTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDd8XHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Lyxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybiJcdTBlMmJcdTBlMjVcdTBlMzFc''@;'; put 'put ''dTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciPT09b30sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDEyPyJcdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciOiJcdTBlMmJcdTBlMjVcdTBl''@;'; put 'put ''MzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGUyN1x1MGUzMVx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0RGF5OiJbXHUwZTFlXHUwZTIzXHUwZTM4XHUw''@;'; put 'put ''ZTQ4XHUwZTA3XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MGUyYlx1MGUxOVx1MGU0OVx1MGUzMiBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0RGF5OiJbXHUwZTQwXHUwZTIxXHUwZTM3XHUwZTQ4XHUw''@;'; put 'put ''ZTJkXHUwZTI3XHUwZTMyXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxhc3RXZWVrOiJbXHUwZTI3XHUwZTMxXHUwZTE5XWRkZGRbXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IFx1MGU0MFx1MGUyN1x1MGUy''@;'; put 'put ''NVx1MGUzMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGUyZFx1MGUzNVx1MGUwMSAlcyIscGFzdDoiJXNcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLHM6Ilx1MGU0NFx1MGUyMVx1MGU0OFx1MGUwMVx1MGUzNVx1MGU0OFx1''@;'; put 'put ''MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsc3M6IiVkIFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsbToiMSBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG1tOiIlZCBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLGg6IjEgXHUwZTBhXHUwZTMxXHUw''@;'; put 'put ''ZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixoaDoiJWQgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixkOiIxIFx1MGUyN1x1MGUzMVx1MGUxOSIsZGQ6IiVkIFx1MGUyN1x1MGUzMVx1MGUxOSIsdzoiMSBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBl''@;'; put 'put ''MzJcdTBlMmJcdTBlNGMiLHd3OiIlZCBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLE06IjEgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5IixNTToiJWQgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5Iix5OiIxIFx1MGUxYlx1MGUzNSIseXk6''@;'; put 'put ''IiVkIFx1MGUxYlx1MGUzNSJ9fSl9KGQoOTc1ODYpKX0sMzc0Nih0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7dmFyIGg9ezE6IidpbmppIiw1OiInaW5qaSIsODoiJ2luamkiLDcwOiInaW5qaSIsODA6IidpbmppIiwyOiInbmppIiw3OiInbmppIiwyMDoiJ25qaSIsNTA6Iidu''@;'; put 'put ''amkiLDM6IidceGZjbmppIiw0OiInXHhmY25qaSIsMTAwOiInXHhmY25qaSIsNjoiJ25qeSIsOToiJ3VuankiLDEwOiIndW5qeSIsMzA6Iid1bmp5Iiw2MDoiJ3luankiLDkwOiIneW5qeSJ9O1MuZGVmaW5lTG9jYWxlKCJ0ayIse21vbnRoczoiXHhkZGFud2FyX0Zld3JhbF9NYXJ0X0FwcmVs''@;'; put 'put ''X01hXHhmZF9JXHhmZHVuX0lceGZkdWxfQXdndXN0X1NlbnRceGZkYWJyX09rdFx4ZmRhYnJfTm9ceGZkYWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHhkZGFuX0Zld19NYXJfQXByX01hXHhmZF9JXHhmZG5fSVx4ZmRsX0F3Z19TZW5fT2t0X05vXHhmZF9EZWsiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6Ilx4ZGRla1x1MDE1ZmVuYmVfRHVcdTAxNWZlbmJlX1NpXHUwMTVmZW5iZV9ceGM3YXJcdTAxNWZlbmJlX1Blblx1MDE1ZmVuYmVfQW5uYV9cdTAxNWVlbmJlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx4ZGRla19EdVx1MDE1Zl9TaVx1MDE1Zl9ceGM3YXJf''@;'; put 'put ''UGVuX0Fubl9cdTAxNWVlbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHhkZGtfRFx1MDE1Zl9TXHUwMTVmX1x4YzdyX1BuX0FuX1x1MDE1ZW4iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FnYXRdIExUIixuZXh0RGF5OiJbZXJ0aXIgc2FnYXRdIExUIixuZXh0V2VlazoiW2luZGlraV0gZGRkZCBbc2FnYXRdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbZFx4ZmNceGZkbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhZ2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29cdTAxNDgiLHBhc3Q6IiVzIFx4ZjZcdTAxNDgiLHM6ImJpcm5ceGU0XHhlN2Ugc2VrdW50IixtOiJiaXIg''@;'; put 'put ''bWludXQiLG1tOiIlZCBtaW51dCIsaDoiYmlyIHNhZ2F0IixoaDoiJWQgc2FnYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLE06ImJpciBhXHhmZCIsTU06IiVkIGFceGZkIix5OiJiaXIgXHhmZHlsIix5eToiJWQgXHhmZHlsIn0sb3JkaW5hbDpmdW5jdGlvbihJLGYpe3N3aXRj''@;'; put 'put ''aChmKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIEk7ZGVmYXVsdDppZigwPT09SSlyZXR1cm4gSSsiJ3VuankiO3ZhciBUPUklMTA7cmV0dXJuIEkrKGhbVF18fGhbSSUxMDAtVF18fGhbST49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0o''@;'; put 'put ''ZCg5NzU4NikpfSw0OTA0MCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoInRsLXBoIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5''@;'; put 'put ''ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoi''@;'; put 'put ''TU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBk''@;'; put 'put ''ZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQg''@;'; put 'put ''c2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihvKXtyZXR1cm4gb30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sMTcxODcodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPSJwYWdoX3dhXHUyMDE5X2NoYVx1MjAxOV93ZWpfbG9T''@;'; put 'put ''X3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCIuc3BsaXQoIl8iKTtmdW5jdGlvbiBmKE0sTyxELEUpe3ZhciBCPWZ1bmN0aW9uIFQoTSl7dmFyIE89TWF0aC5mbG9vcihNJTFlMy8xMDApLEQ9TWF0aC5mbG9vcihNJTEwMC8xMCksRT1NJTEwLEI9IiI7cmV0dXJuIE8+MCYmKEIrPWhbT10rInZh''@;'; put 'put ''dGxoIiksRD4wJiYoQis9KCIiIT09Qj8iICI6IiIpK2hbRF0rIm1hSCIpLEU+MCYmKEIrPSgiIiE9PUI/IiAiOiIiKStoW0VdKSwiIj09PUI/InBhZ2giOkJ9KE0pO3N3aXRjaChEKXtjYXNlInNzIjpyZXR1cm4gQisiIGx1cCI7Y2FzZSJtbSI6cmV0dXJuIEIrIiB0dXAiO2Nhc2UiaGgiOnJl''@;'; put 'put ''dHVybiBCKyIgcmVwIjtjYXNlImRkIjpyZXR1cm4gQisiIGphaiI7Y2FzZSJNTSI6cmV0dXJuIEIrIiBqYXIiO2Nhc2UieXkiOnJldHVybiBCKyIgRElTIn19Uy5kZWZpbmVMb2NhbGUoInRsaCIse21vbnRoczoidGVyYVx1MjAxOSBqYXIgd2FcdTIwMTlfdGVyYVx1MjAxOSBqYXIgY2hhXHUy''@;'; put 'put ''MDE5X3RlcmFcdTIwMTkgamFyIHdlal90ZXJhXHUyMDE5IGphciBsb1NfdGVyYVx1MjAxOSBqYXIgdmFnaF90ZXJhXHUyMDE5IGphciBqYXZfdGVyYVx1MjAxOSBqYXIgU29jaF90ZXJhXHUyMDE5IGphciBjaG9yZ2hfdGVyYVx1MjAxOSBqYXIgSHV0X3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5''@;'; put 'put ''bWFIX3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAxOSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFyIHdhXHUyMDE5X2phciBjaGFcdTIwMTlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFy''@;'; put 'put ''IFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YVx1MjAxOW1hSF9qYXIgd2FcdTIwMTltYUggd2FcdTIwMTlfamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAxOSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhq''@;'; put 'put ''YWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxo''@;'; put 'put ''amFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDpt''@;'; put 'put ''bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGFIamFqXSBMVCIsbmV4dERheToiW3dhXHUyMDE5bGVTXSBMVCIsbmV4dFdlZWs6IkxMTCIsbGFzdERheToiW3dhXHUyMDE5SHVcdTIwMTldIExUIixsYXN0V2VlazoiTExMIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0''@;'; put 'put ''aW9uIG8oTSl7dmFyIE89TTtyZXR1cm4tMSE9PU0uaW5kZXhPZigiamFqIik/Ty5zbGljZSgwLC0zKSsibGVTIjotMSE9PU0uaW5kZXhPZigiamFyIik/Ty5zbGljZSgwLC0zKSsid2FRIjotMSE9PU0uaW5kZXhPZigiRElTIik/Ty5zbGljZSgwLC0zKSsibmVtIjpPKyIgcElxIn0scGFzdDpm''@;'; put 'put ''dW5jdGlvbiBJKE0pe3ZhciBPPU07cmV0dXJuLTEhPT1NLmluZGV4T2YoImphaiIpP08uc2xpY2UoMCwtMykrIkh1XHUyMDE5IjotMSE9PU0uaW5kZXhPZigiamFyIik/Ty5zbGljZSgwLC0zKSsid2VuIjotMSE9PU0uaW5kZXhPZigiRElTIik/Ty5zbGljZSgwLC0zKSsiYmVuIjpPKyIgcmV0''@;'; put 'put ''In0sczoicHVTIGx1cCIsc3M6ZixtOiJ3YVx1MjAxOSB0dXAiLG1tOmYsaDoid2FcdTIwMTkgcmVwIixoaDpmLGQ6IndhXHUyMDE5IGphaiIsZGQ6ZixNOiJ3YVx1MjAxOSBqYXIiLE1NOmYseToid2FcdTIwMTkgRElTIix5eTpmfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4v''@;'; put 'put ''LG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNjAxNTModGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO3ZhciBoPXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIs''@;'; put 'put ''MjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07Uy5kZWZp''@;'; put 'put ''bmVMb2NhbGUoInRyIix7bW9udGhzOiJPY2FrX1x1MDE1ZXViYXRfTWFydF9OaXNhbl9NYXlcdTAxMzFzX0hhemlyYW5fVGVtbXV6X0FcdTAxMWZ1c3Rvc19FeWxceGZjbF9Fa2ltX0thc1x1MDEzMW1fQXJhbFx1MDEzMWsiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ik9jYV9cdTAxNWV1Yl9N''@;'; put 'put ''YXJfTmlzX01heV9IYXpfVGVtX0FcdTAxMWZ1X0V5bF9Fa2lfS2FzX0FyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiUGF6YXJfUGF6YXJ0ZXNpX1NhbFx1MDEzMV9ceGM3YXJcdTAxNWZhbWJhX1Blclx1MDE1ZmVtYmVfQ3VtYV9DdW1hcnRlc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''UGF6X1B6dF9TYWxfXHhjN2FyX1Blcl9DdW1fQ210Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQel9QdF9TYV9ceGM3YV9QZV9DdV9DdCIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihJLGYsVCl7cmV0dXJuIEk8MTI/VD8iXHhmNlx4ZjYiOiJceGQ2XHhkNiI6VD8iXHhmNnMiOiJc''@;'; put 'put ''eGQ2UyJ9LG1lcmlkaWVtUGFyc2U6L1x4ZjZceGY2fFx4ZDZceGQ2fFx4ZjZzfFx4ZDZTLyxpc1BNOmZ1bmN0aW9uKEkpe3JldHVybiJceGY2cyI9PT1JfHwiXHhkNlMiPT09SX0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQg''@;'; put 'put ''TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6Ilt5YXJcdTAxMzFuIHNhYXRdIExUIixuZXh0V2VlazoiW2dlbGVjZWtdIGRkZGQgW3Nh''@;'; put 'put ''YXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXSBMVCIsbGFzdFdlZWs6IltnZVx4ZTdlbl0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyBceGY2bmNlIixzOiJiaXJrYVx4ZTcgc2FuaXllIixzczoiJWQgc2FuaXll''@;'; put 'put ''IixtOiJiaXIgZGFraWthIixtbToiJWQgZGFraWthIixoOiJiaXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLHc6ImJpciBoYWZ0YSIsd3c6IiVkIGhhZnRhIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIHlcdTAxMzFsIix5eToiJWQgeVx1''@;'; put 'put ''MDEzMWwifSxvcmRpbmFsOmZ1bmN0aW9uKEksZil7c3dpdGNoKGYpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRvIjpjYXNlIkREIjpyZXR1cm4gSTtkZWZhdWx0OmlmKDA9PT1JKXJldHVybiBJKyInXHUwMTMxbmNcdTAxMzEiO3ZhciBUPUklMTA7cmV0dXJuIEkrKGhbVF18fGhbSSUxMDAtVF18''@;'; put 'put ''fGhbST49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oZCg5NzU4NikpfSw4ODUyMSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhJLGYsVCxBKXt2YXIgTT17czpbInZpZW5zYXMgc2VjdW5kcyIsIidpZW5zYXMgc2VjdW5kcyJdLHNz''@;'; put 'put ''OltJKyIgc2VjdW5kcyIsSSsiIHNlY3VuZHMiXSxtOlsiJ24gbVx4ZWR1dCIsIidpZW5zIG1ceGVkdXQiXSxtbTpbSSsiIG1ceGVkdXRzIixJKyIgbVx4ZWR1dHMiXSxoOlsiJ24gXHhmZW9yYSIsIidpZW5zYSBceGZlb3JhIl0saGg6W0krIiBceGZlb3JhcyIsSSsiIFx4ZmVvcmFzIl0sZDpb''@;'; put 'put ''IiduIHppdWEiLCInaWVuc2Egeml1YSJdLGRkOltJKyIgeml1YXMiLEkrIiB6aXVhcyJdLE06WyInbiBtZXMiLCInaWVucyBtZXMiXSxNTTpbSSsiIG1lc2VuIixJKyIgbWVzZW4iXSx5OlsiJ24gYXIiLCInaWVucyBhciJdLHl5OltJKyIgYXJzIixJKyIgYXJzIl19O3JldHVybiBBfHxmP01b''@;'; put 'put ''VF1bMF06TVtUXVsxXX1TLmRlZmluZUxvY2FsZSgidHpsIix7bW9udGhzOiJKYW51YXJfRmV2cmFnbGhfTWFyXHhlN19BdnJceGVmdV9NYWlfR1x4ZmNuX0p1bGlhX0d1c2NodF9TZXRlbXZhcl9MaXN0b3BceGU0dHNfTm9lbXZhcl9aZWNlbXZhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi''@;'; put 'put ''SmFuX0Zldl9NYXJfQXZyX01haV9HXHhmY25fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNceGZhbGFkaV9MXHhmYW5lXHhlN2lfTWFpdHppX01ceGUxcmN1cmlfWGhceGZhYWRpX1ZpXHhlOW5lclx4ZTdpX1NceGUxdHVyaSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJTXHhmYWxfTFx4ZmFuX01haV9NXHhlMXJfWGhceGZhX1ZpXHhlOV9TXHhlMXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNceGZhX0xceGZhX01hX01ceGUxX1hoX1ZpX1NceGUxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0u''@;'; put 'put ''c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkiLExMTDoiRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIixMTExMOiJkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2RcJ298ZFwnYS9pLGlzUE06ZnVuY3Rp''@;'; put 'put ''b24oSSl7cmV0dXJuImQnbyI9PT1JLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKEksZixUKXtyZXR1cm4gST4xMT9UPyJkJ28iOiJEJ08iOlQ/ImQnYSI6IkQnQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3hoaSBceGUwXSBMVCIsbmV4dERheToiW2RlbVx4ZTAgXHhlMF0gTFQi''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW2llaXJpIFx4ZTBdIExUIixsYXN0V2VlazoiW3NceGZjciBlbF0gZGRkZCBbbGFzdGV1IFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvc3ByZWkgJXMiLHBhc3Q6ImphJXMiLHM6byxzczpv''@;'; put 'put ''LG06byxtbTpvLGg6byxoaDpvLGQ6byxkZDpvLE06byxNTTpvLHk6byx5eTpvfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sMjIyMzQodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO1MuZGVmaW5lTG9jYWxlKCJ0em0tbGF0biIse21vbnRoczoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdq''@;'; put 'put ''bmJpciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5czoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXNka2ggZ10gTFQiLG5leHREYXk6Ilthc2thIGddIExUIixuZXh0V2VlazoiZGRkZCBbZ10gTFQiLGxhc3REYXk6Ilthc3NhbnQgZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtnXSBMVCIs''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFka2ggcyB5YW4gJXMiLHBhc3Q6InlhbiAlcyIsczoiaW1payIsc3M6IiVkIGltaWsiLG06Im1pbnVcdTFlMGQiLG1tOiIlZCBtaW51XHUxZTBkIixoOiJzYVx1MDI1YmEiLGhoOiIlZCB0YXNzYVx1MDI1YmluIixkOiJhc3Mi''@;'; put 'put ''LGRkOiIlZCBvc3NhbiIsTToiYXlvd3IiLE1NOiIlZCBpeXlpcm4iLHk6ImFzZ2FzIix5eToiJWQgaXNnYXNuIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShkKDk3NTg2KSl9LDE4MDEwKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgidHptIix7bW9u''@;'; put 'put ''dGhzOiJcdTJkNDlcdTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2''@;'; put 'put ''Mlx1MmQ1M1x1MmQ0Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJk''@;'; put 'put ''NTVfXHUyZDRmXHUyZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUyZDQ5XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1''@;'; put 'put ''MmQ1NVx1MmQzMFx1MmQ2Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYy''@;'; put 'put ''XHUyZDUzXHUyZDYzX1x1MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMxXHUyZDU1X1x1MmQ0Zlx1MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1''@;'; put 'put ''NF9cdTJkMzdcdTJkNTNcdTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMw''@;'; put 'put ''XHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNk''@;'; put 'put ''XHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1''@;'; put 'put ''OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUy''@;'; put 'put ''ZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MmQzMFx1MmQ1OVx1MmQzN1x1MmQ0NSBcdTJkMzRdIExUIixuZXh0RGF5OiJbXHUyZDMwXHUyZDU5XHUyZDNkXHUyZDMwIFx1MmQzNF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixsYXN0''@;'; put 'put ''RGF5OiJbXHUyZDMwXHUyZDVhXHUyZDMwXHUyZDRmXHUyZDVjIFx1MmQzNF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTJkMzdcdTJkMzBcdTJkMzdcdTJkNDUgXHUyZDU5IFx1MmQ2Mlx1MmQzMFx1MmQ0ZiAl''@;'; put 'put ''cyIscGFzdDoiXHUyZDYyXHUyZDMwXHUyZDRmICVzIixzOiJcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLHNzOiIlZCBcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLG06Ilx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsbW06IiVkIFx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQz''@;'; put 'put ''YSIsaDoiXHUyZDU5XHUyZDMwXHUyZDQ0XHUyZDMwIixoaDoiJWQgXHUyZDVjXHUyZDMwXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDQ0XHUyZDQ5XHUyZDRmIixkOiJcdTJkMzBcdTJkNTlcdTJkNTkiLGRkOiIlZCBvXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDRmIixNOiJcdTJkMzBcdTJkNjJvXHUy''@;'; put 'put ''ZDUzXHUyZDU0IixNTToiJWQgXHUyZDQ5XHUyZDYyXHUyZDYyXHUyZDQ5XHUyZDU0XHUyZDRmIix5OiJcdTJkMzBcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTkiLHl5OiIlZCBcdTJkNDlcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTlcdTJkNGYifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KGQoOTc1''@;'; put 'put ''ODYpKX0sNjMzNDkodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJ1Zy1jbiIse21vbnRoczoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYz''@;'; put 'put ''M1x1MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2''@;'; put 'put ''NDNcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1''@;'; put 'put ''MDY3ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2''@;'; put 'put ''XHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUwNjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMx''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2NGFcdTA2ZDVcdTA2NDNcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJmXHUwNmM4XHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYzM1x1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9c''@;'; put 'put ''dTA2ODZcdTA2MjdcdTA2MzFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjdlXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyY1x1MDZjOFx1MDY0NVx1MDZkNV9cdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDUiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNcdTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1''@;'; put 'put ''MDZkNV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2''@;'; put 'put ''MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSIsTExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMg''@;'; put 'put ''SEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBjIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjRhXHUwNmQwXHUwNjMx''@;'; put 'put ''XHUwNjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNXxcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzF8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NnxcdTA2ODZcdTA2YzhcdTA2MzR8XHUwNjg2XHUw''@;'; put 'put ''NmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NnxcdTA2NDNcdTA2ZDVcdTA2ODYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihvLEkpe3JldHVybiAxMj09PW8mJihvPTApLCJcdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQz''@;'; put 'put ''XHUwNmQwXHUwNjg2XHUwNmQ1Ij09PUl8fCJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiPT09SXx8Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiPT09ST9vOiJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFc''@;'; put 'put ''dTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2Ij09PUl8fCJcdTA2NDNcdTA2ZDVcdTA2ODYiPT09ST9vKzEyOm8+PTExP286bysxMn0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3ZhciBUPTEwMCpvK0k7cmV0dXJuIFQ8NjAwPyJcdTA2NGFcdTA2ZDBcdTA2MzFc''@;'; put 'put ''dTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1IjpUPDkwMD8iXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxIjpUPDExMzA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiOlQ8MTIzMD8iXHUw''@;'; put 'put ''Njg2XHUwNmM4XHUwNjM0IjpUPDE4MDA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiOiJcdTA2NDNcdTA2ZDVcdTA2ODYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyOFx1MDZjOFx1MDZhZlx1MDZjOFx1MDY0''@;'; put 'put ''NiBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjI2XHUwNmQ1XHUwNjJhXHUwNmQ1IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHRXZWVrOiJbXHUwNjQzXHUwNmQwXHUwNjQ0XHUwNmQ1XHUwNjMxXHUwNjQzXHUwNjQ5XSBk''@;'; put 'put ''ZGRkIFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJhXHUwNmM2XHUwNjQ2XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2XSBMVCIsbGFzdFdlZWs6IltcdTA2MjZcdTA2MjdcdTA2NDRcdTA2MmZcdTA2NDlcdTA2NDZcdTA2NDJcdTA2NDldIGRkZGQg''@;'; put 'put ''W1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiIscGFzdDoiJXMgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2IixzOiJcdTA2NDZcdTA2ZDVc''@;'; put 'put ''dTA2ODZcdTA2ODZcdTA2ZDUgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixzczoiJWQgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixtOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixtbToiJWQgXHUw''@;'; put 'put ''NjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixoOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixkOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQzXHUwNmM4XHUwNjQ2Iixk''@;'; put 'put ''ZDoiJWQgXHUwNjQzXHUwNmM4XHUwNjQ2IixNOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjI2XHUwNjI3XHUwNjRhIixNTToiJWQgXHUwNjI2XHUwNjI3XHUwNjRhIix5OiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjRhXHUwNjQ5XHUwNjQ0Iix5eToiJWQgXHUwNjRhXHUwNjQ5XHUwNjQ0In0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSgtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5fC1cdTA2MjZcdTA2MjdcdTA2NGF8LVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSkvLG9yZGluYWw6ZnVuY3Rpb24obyxJKXtzd2l0Y2goSSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2Ui''@;'; put 'put ''REREIjpyZXR1cm4gbysiLVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBvKyItXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1IjtkZWZhdWx0OnJldHVybiBvfX0scHJlcGFyc2U6ZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVwbGFjZSgvXHUwNjBj''@;'; put 'put ''L2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihvKXtyZXR1cm4gby5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oZCg5NzU4NikpfSw2ODQ3OSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhBLE0sTyl7cmV0dXJuIm0i''@;'; put 'put ''PT09Tz9NPyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDMiOiJoIj09PU8/TT8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUwNDNlXHUwNDM0''@;'; put 'put ''XHUwNDM4XHUwNDNkXHUwNDQzIjpBKyIgIitmdW5jdGlvbiBoKEEsTSl7dmFyIE89QS5zcGxpdCgiXyIpO3JldHVybiBNJTEwPT0xJiZNJTEwMCE9MTE/T1swXTpNJTEwPj0yJiZNJTEwPD00JiYoTSUxMDA8MTB8fE0lMTAwPj0yMCk/T1sxXTpPWzJdfSh7c3M6TT8iXHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06TT8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0''@;'; put 'put ''NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZCIsaGg6TT8i''@;'; put 'put ''XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDMzXHUwNDNlXHUwNDM0XHUw''@;'; put 'put ''NDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDNkXHUwNDU2XHUwNDMyIixNTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRjX1x1''@;'; put 'put ''MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nl9cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZcdTA0MzIiLHl5OiJcdTA0NDBcdTA0NTZcdTA0M2FfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDM4X1x1MDQ0MFx1MDQzZVx1MDQzYVx1MDQ1Nlx1MDQzMiJ9W09dLCtB''@;'; put 'put ''KX1mdW5jdGlvbiBmKEEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBKyJcdTA0M2UiKygxMT09PXRoaXMuaG91cnMoKT8iXHUwNDMxIjoiIikrIl0gTFQifX1TLmRlZmluZUxvY2FsZSgidWsiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDNkXHUwNDRmX1x1MDQz''@;'; put 'put ''Ylx1MDQ0ZVx1MDQ0Mlx1MDQzZVx1MDQzM1x1MDQzZV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDNkXHUwNDRmX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0''@;'; put 'put ''NDBcdTA0MzJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUwNDNkXHUw''@;'; put 'put ''NDRmX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1''@;'; put 'put ''MDQ0ZVx1MDQ0Mlx1MDQzOFx1MDQzOV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDdc''@;'; put 'put ''dTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNf''@;'; put 'put ''XHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0''@;'; put 'put ''NDFcdTA0NTZcdTA0NDdfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQzMVx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0MzhcdTA0M2ZfXHUwNDQxXHUwNDM1XHUwNDQw''@;'; put 'put ''XHUwNDNmX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czpmdW5jdGlvbiBJKEEsTSl7dmFyIE89e25vbWluYXRpdmU6Ilx1MDQzZFx1''@;'; put 'put ''MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1''@;'; put 'put ''MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRmX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxhY2N1c2F0aXZlOiJcdTA0M2RcdTA0MzVc''@;'; put 'put ''dTA0MzRcdTA0NTZcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNf''@;'; put 'put ''XHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0ZV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksZ2VuaXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1''@;'; put 'put ''MDQ1Nlx1MDQzYlx1MDQ1Nl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2FcdTA0MzBfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNhXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOF9cdTA0NDdc''@;'; put 'put ''dTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNcdTA0MzBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDU2X1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzOCIuc3BsaXQoIl8iKX07cmV0dXJuITA9PT1BP08ubm9taW5hdGl2''@;'; put 'put ''ZS5zbGljZSgxLDcpLmNvbmNhdChPLm5vbWluYXRpdmUuc2xpY2UoMCwxKSk6QT9PWy8oXFtbXHUwNDEyXHUwNDMyXHUwNDIzXHUwNDQzXVxdKSA/ZGRkZC8udGVzdChNKT8iYWNjdXNhdGl2ZSI6L1xbPyg/Olx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQ1N3xcdTA0''@;'; put 'put ''M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0M2VcdTA0NTcpPyA/XF0gP2RkZGQvLnRlc3QoTSk/Imdlbml0aXZlIjoibm9taW5hdGl2ZSJdW0EuZGF5KCldOk8ubm9taW5hdGl2ZX0sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0''@;'; put 'put ''MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9c''@;'; put 'put ''dTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1''@;'; put 'put ''MDQ0MC4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZigiW1x1MDQyMVx1MDQ0Y1x1MDQzZVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ1NiAiKSxuZXh0RGF5OmYoIltcdTA0MTdcdTA0MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAgIiksbGFzdERheTpmKCJbXHUwNDEyXHUwNDQ3''@;'; put 'put ''XHUwNDNlXHUwNDQwXHUwNDMwICIpLG5leHRXZWVrOmYoIltcdTA0MjNdIGRkZGQgWyIpLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gZigiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQz''@;'; put 'put ''ZVx1MDQ1N10gZGRkZCBbIikuY2FsbCh0aGlzKTtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gZigiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQzM1x1MDQzZV0gZGRkZCBbIikuY2FsbCh0aGlzKX19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDQzIixzOiJcdTA0MzRcdTA0MzVcdTA0M2FcdTA0NTZcdTA0M2JcdTA0NGNcdTA0M2FcdTA0MzAgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczpvLG06byxtbTpvLGg6Ilx1''@;'; put 'put ''MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsaGg6byxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOm8sTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRjIixNTTpvLHk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYSIseXk6b30sbWVyaWRpZW1QYXJzZTov''@;'; put 'put ''XHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2fFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0M3xcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKEEpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJc''@;'; put 'put ''dTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzApJC8udGVzdChBKX0sbWVyaWRpZW06ZnVuY3Rpb24oQSxNLE8pe3JldHVybiBBPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NiI6QTwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzIjpBPDE3PyJcdTA0MzRcdTA0M2RcdTA0''@;'; put 'put ''NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlKS8sb3JkaW5hbDpmdW5jdGlvbihBLE0pe3N3aXRjaChNKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6''@;'; put 'put ''Y2FzZSJXIjpyZXR1cm4gQSsiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gQSsiLVx1MDQzM1x1MDQzZSI7ZGVmYXVsdDpyZXR1cm4gQX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDQzMDI0KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD1bIlx1MDYy''@;'; put 'put ''Y1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0MVx1MDYzMVx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZjY1x1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDZjYyIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1''@;'; put 'put ''MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyNlx1MDZjYyIsIlx1MDYyN1x1MDZhZlx1MDYzM1x1MDYyYSIsIlx1MDYzM1x1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyN1x1MDZhOVx1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYz''@;'; put 'put ''MSIsIlx1MDYyZlx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLG89WyJcdTA2MjdcdTA2MmFcdTA2NDhcdTA2MjdcdTA2MzEiLCJcdTA2N2VcdTA2Y2NcdTA2MzEiLCJcdTA2NDVcdTA2NDZcdTA2YWZcdTA2NDQiLCJcdTA2MjhcdTA2MmZcdTA2YmUiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2''@;'; put 'put ''MzFcdTA2MjdcdTA2MmEiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2YzEiLCJcdTA2YzFcdTA2NDFcdTA2MmFcdTA2YzEiXTtTLmRlZmluZUxvY2FsZSgidXIiLHttb250aHM6aCxtb250aHNTaG9ydDpoLHdlZWtkYXlzOm8sd2Vla2RheXNTaG9ydDpvLHdlZWtkYXlzTWluOm8sbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYz''@;'; put 'put ''NFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbihmKXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PWZ9LG1lcmlkaWVtOmZ1bmN0aW9uKGYsVCxBKXtyZXR1cm4gZjwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6Iltc''@;'; put 'put ''dTA2MjJcdTA2MmMgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDZhOVx1MDY0NCBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdERheToiW1x1MDZhZlx1MDYzMFx1''@;'; put 'put ''MDYzNFx1MDYyYVx1MDZjMSBcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzFdIGRkZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp''@;'; put 'put ''dmVUaW1lOntmdXR1cmU6IiVzIFx1MDYyOFx1MDYzOVx1MDYyZiIscGFzdDoiJXMgXHUwNjQyXHUwNjI4XHUwNjQ0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjMzXHUwNmNjXHUwNmE5XHUwNjQ2XHUwNjg4IixzczoiJWQgXHUwNjMzXHUwNmNjXHUwNmE5XHUwNjQ2XHUwNjg4IixtOiJc''@;'; put 'put ''dTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjQ2XHUwNjc5IixtbToiJWQgXHUwNjQ1XHUwNjQ2XHUwNjc5IixoOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5XHUwNmMxIixoaDoiJWQgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5XHUwNmQyIixkOiJcdTA2''@;'; put 'put ''MjdcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQ2IixkZDoiJWQgXHUwNjJmXHUwNjQ2IixNOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNmMxIixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNmMxIix5OiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToi''@;'; put 'put ''JWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24oZil7cmV0dXJuIGYucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihmKXtyZXR1cm4gZi5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4Nikp''@;'; put 'put ''fSw3MjM3Nih0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoInV6LWxhdG4iLHttb250aHM6IllhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9Ob3lhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiJZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9TaGFuYmEiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCdWd1biBzb2F0XSBMVCBbZGFdIixuZXh0RGF5OiJbRXJ0YWdhXSBMVCBbZGFdIixuZXh0V2VlazoiZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFd''@;'; put 'put ''IixsYXN0RGF5OiJbS2VjaGEgc29hdF0gTFQgW2RhXSIsbGFzdFdlZWs6IltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiWWFxaW4gJXMgaWNoaWRhIixwYXN0OiJCaXIgbmVjaGEgJXMgb2xkaW4iLHM6InNvbml5''@;'; put 'put ''YSIsc3M6IiVkIHNvbml5YSIsbToiYmlyIGRhcWlxYSIsbW06IiVkIGRhcWlxYSIsaDoiYmlyIHNvYXQiLGhoOiIlZCBzb2F0IixkOiJiaXIga3VuIixkZDoiJWQga3VuIixNOiJiaXIgb3kiLE1NOiIlZCBveSIseToiYmlyIHlpbCIseXk6IiVkIHlpbCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0p''@;'; put 'put ''fShkKDk3NTg2KSl9LDE5ODAwKHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgidXoiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUw''@;'; put 'put ''NDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRm''@;'; put 'put ''XHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUw''@;'; put 'put ''NDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0''@;'; put 'put ''NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDJmXHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxNFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjFcdTA0MzVcdTA0''@;'; put 'put ''NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDI3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxZlx1MDQzMFx1MDQzOVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDI4XHUwNDMwXHUw''@;'; put 'put ''NDNkXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQyZlx1MDQzYVx1MDQ0OF9cdTA0MTRcdTA0NDNcdTA0NDhfXHUwNDIxXHUwNDM1XHUwNDQ4X1x1MDQyN1x1MDQzZVx1MDQ0MF9cdTA0MWZcdTA0MzBcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQyOFx1''@;'; put 'put ''MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDJmXHUwNDNhX1x1MDQxNFx1MDQ0M19cdTA0MjFcdTA0MzVfXHUwNDI3XHUwNDNlX1x1MDQxZlx1MDQzMF9cdTA0MTZcdTA0NDNfXHUwNDI4XHUwNDMwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i''@;'; put 'put ''LExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDQ0M1x1MDQzM1x1MDQ0M1x1MDQzZCBcdTA0NDFcdTA0''@;'; put 'put ''M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0''@;'; put 'put ''NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3RXZWVrOiJbXHUwNDIzXHUwNDQyXHUwNDMzXHUwNDMwXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0NDNc''@;'; put 'put ''dTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDJmXHUwNDNhXHUwNDM4XHUwNDNkICVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzNFx1MDQzMCIscGFzdDoiXHUwNDEx''@;'; put 'put ''XHUwNDM4XHUwNDQwIFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzMCAlcyBcdTA0M2VcdTA0M2JcdTA0MzRcdTA0MzhcdTA0M2QiLHM6Ilx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsc3M6IiVkIFx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsbToiXHUw''@;'; put 'put ''NDMxXHUwNDM4XHUwNDQwIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQz''@;'; put 'put ''ZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzZVx1MDQzOSIsTU06IiVkIFx1MDQzZVx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1''@;'; put 'put ''MDQzOVx1MDQzOFx1MDQzYiIseXk6IiVkIFx1MDQzOVx1MDQzOFx1MDQzYiJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShkKDk3NTg2KSl9LDg5MzY2KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgidmkiLHttb250aHM6InRoXHhlMW5nIDFfdGhceGUx''@;'; put 'put ''bmcgMl90aFx4ZTFuZyAzX3RoXHhlMW5nIDRfdGhceGUxbmcgNV90aFx4ZTFuZyA2X3RoXHhlMW5nIDdfdGhceGUxbmcgOF90aFx4ZTFuZyA5X3RoXHhlMW5nIDEwX3RoXHhlMW5nIDExX3RoXHhlMW5nIDEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJUaGcgMDFfVGhnIDAyX1RoZyAwM19U''@;'; put 'put ''aGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJjaFx1MWVlNyBuaFx1MWVhZHRfdGhcdTFlZTkgaGFpX3RoXHUxZWU5IGJhX3RoXHUxZWU5IHRcdTAxYjBf''@;'; put 'put ''dGhcdTFlZTkgblx1MDEwM21fdGhcdTFlZTkgc1x4ZTF1X3RoXHUxZWU5IGJcdTFlYTN5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovc2F8Y2gvaSxpc1BNOmZ1bmN0aW9uKG8pe3JldHVybi9eY2gkL2kudGVzdChvKX0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3JldHVybiBvPDEyP2Y/InNhIjoiU0EiOmY/ImNoIjoiQ0gifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1t''@;'; put 'put ''IixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSIsTExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gW25cdTAxMDNtXSBZWVlZIEhIOm1tIixsOiJERC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZ''@;'; put 'put ''IixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSFx4ZjRtIG5heSBsXHhmYWNdIExUIixuZXh0RGF5OiJbTmdceGUweSBtYWkgbFx4ZmFjXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0XHUxZWRi''@;'; put 'put ''aSBsXHhmYWNdIExUIixsYXN0RGF5OiJbSFx4ZjRtIHF1YSBsXHhmYWNdIExUIixsYXN0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRyXHUwMWIwXHUxZWRiYyBsXHhmYWNdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyB0XHUxZWRiaSIscGFzdDoiJXMgdHJcdTAx''@;'; put 'put ''YjBcdTFlZGJjIixzOiJ2XHhlMGkgZ2lceGUyeSIsc3M6IiVkIGdpXHhlMnkiLG06Im1cdTFlZDl0IHBoXHhmYXQiLG1tOiIlZCBwaFx4ZmF0IixoOiJtXHUxZWQ5dCBnaVx1MWVkZCIsaGg6IiVkIGdpXHUxZWRkIixkOiJtXHUxZWQ5dCBuZ1x4ZTB5IixkZDoiJWQgbmdceGUweSIsdzoibVx1''@;'; put 'put ''MWVkOXQgdHVcdTFlYTduIix3dzoiJWQgdHVcdTFlYTduIixNOiJtXHUxZWQ5dCB0aFx4ZTFuZyIsTU06IiVkIHRoXHhlMW5nIix5OiJtXHUxZWQ5dCBuXHUwMTAzbSIseXk6IiVkIG5cdTAxMDNtIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihv''@;'; put 'put ''KXtyZXR1cm4gb30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGQoOTc1ODYpKX0sNjk3MDIodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJ4LXBzZXVkbyIse21vbnRoczoiSn5ceGUxXHhmMVx4ZmFceGUxfnJceGZkX0Z+XHhlOWJyXHhmYX5ceGUxclx4''@;'; put 'put ''ZmRffk1ceGUxcmN+aF9ceGMxcH5yXHhlZGxffk1ceGUxXHhmZF9+Slx4ZmFceGYxXHhlOX5fSlx4ZmFsflx4ZmRfXHhjMVx4ZmF+Z1x4ZmFzdH5fU1x4ZTlwfnRceGU5bWJ+XHhlOXJfXHhkM35jdFx4ZjNiflx4ZTlyX1x4ZDF+XHhmM3ZceGU5bX5iXHhlOXJffkRceGU5Y1x4ZTl+bWJceGU5''@;'; put 'put ''ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSn5ceGUxXHhmMV9+Rlx4ZTliX35NXHhlMXJfflx4YzFwcl9+TVx4ZTFceGZkX35KXHhmYVx4ZjFffkpceGZhbF9+XHhjMVx4ZmFnX35TXHhlOXBfflx4ZDNjdF9+XHhkMVx4ZjN2X35EXHhlOWMiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFj''@;'; put 'put ''dDohMCx3ZWVrZGF5czoiU35ceGZhXHhmMWRceGUxflx4ZmRfTVx4ZjN+XHhmMWRceGUxXHhmZH5fVFx4ZmFceGU5fnNkXHhlMVx4ZmR+X1dceGU5ZH5ceGYxXHhlOXNkflx4ZTFceGZkX1R+aFx4ZmFyc35kXHhlMVx4ZmRffkZyXHhlZGR+XHhlMVx4ZmRfU35ceGUxdFx4ZmFyfmRceGUxXHhm''@;'; put 'put ''ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTflx4ZmFceGYxX35NXHhmM1x4ZjFfflRceGZhXHhlOV9+V1x4ZTlkX35UaFx4ZmFffkZyXHhlZF9+U1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTflx4ZmFfTVx4ZjN+X1RceGZhX35XXHhlOV9UfmhfRnJ+X1NceGUxIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltU''@;'; put 'put ''flx4ZjNkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbmV4dERheToiW1R+XHhmM21ceGYzfnJyXHhmM353IFx4ZTF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTF0XSBMVCIsbGFzdERheToiW1x4ZGR+XHhlOXN0flx4ZTlyZFx4ZTF+XHhmZCBceGUxdF0gTFQiLGxhc3RXZWVrOiJbTH5ceGUxc3Rd''@;'; put 'put ''IGRkZGQgW1x4ZTF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHhlZH5ceGYxICVzIixwYXN0OiIlcyBceGUxfmdceGYzIixzOiJceGUxIH5mXHhlOXcgfnNceGU5Y1x4ZjN+XHhmMWRzIixzczoiJWQgc35ceGU5Y1x4ZjNceGYxfmRzIixtOiJceGUxIH5tXHhl''@;'; put 'put ''ZFx4ZjF+XHhmYXRceGU5IixtbToiJWQgbX5ceGVkXHhmMVx4ZmF+dFx4ZTlzIixoOiJceGUxflx4ZjEgaFx4ZjN+XHhmYXIiLGhoOiIlZCBoflx4ZjNceGZhcnMiLGQ6Ilx4ZTEgfmRceGUxXHhmZCIsZGQ6IiVkIGR+XHhlMVx4ZmRzIixNOiJceGUxIH5tXHhmM1x4ZjF+dGgiLE1NOiIlZCBt''@;'; put 'put ''flx4ZjNceGYxdH5ocyIseToiXHhlMSB+XHhmZFx4ZTlceGUxciIseXk6IiVkIFx4ZmR+XHhlOVx4ZTFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKG8pe3ZhciBJPW8lMTA7cmV0dXJuIG8rKDE9PX5+KG8lMTAwLzEw''@;'; put 'put ''KT8idGgiOjE9PT1JPyJzdCI6Mj09PUk/Im5kIjozPT09ST8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oZCg5NzU4NikpfSw3MjY1NSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoInlvIix7bW9udGhzOiJTXHUxZWI5XHUwMzAxclx1''@;'; put 'put ''MWViOVx1MDMwMV9FXHUwMzAwcmVcdTAzMDBsZVx1MDMwMF9cdTFlYjhyXHUxZWI5XHUwMzAwbmFcdTAzMDBfSVx1MDMwMGdiZVx1MDMwMV9FXHUwMzAwYmliaV9PXHUwMzAwa3VcdTAzMDBkdV9BZ1x1MWViOW1vX09cdTAzMDBndVx1MDMwMW5fT3dld2VfXHUxZWNjXHUwMzAwd2FcdTAzMDBy''@;'; put 'put ''YVx1MDMwMF9CZVx1MDMwMWx1XHUwMzAxX1x1MWVjY1x1MDMwMHBcdTFlYjlcdTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlNcdTFlYjlcdTAzMDFyX0VcdTAzMDBybF9cdTFlYjhybl9JXHUwMzAwZ2JfRVx1MDMwMGJpX09cdTAzMDBrdVx1MDMwMF9BZ1x1MWViOV9PXHUw''@;'; put 'put ''MzAwZ3VcdTAzMDFfT3dlX1x1MWVjY1x1MDMwMHdhXHUwMzAwX0JlXHUwMzAxbF9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBXHUwMzAwaVx1MDMwMGt1XHUwMzAxX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMWd1bl9cdTFlY2Nq''@;'; put 'put ''XHUxZWNkXHUwMzAxcnVcdTAzMDFfXHUxZWNjalx1MWVjZFx1MDMwMWJcdTFlY2RfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxbVx1MWViOVx1MDMwMXRhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFcdTAzMDBpXHUwMzAwa19BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAz''@;'; put 'put ''MDFfXHUxZWNjanJfXHUxZWNjamJfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBXHUwMzAwaVx1MDMwMF9Bal9JXHUwMzAwc19cdTFlY2NyX1x1MWVjY2JfXHUxZWI4dF9BXHUwMzAwYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7''@;'; put 'put ''TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT1x1MDMwMG5pXHUwMzAwIG5pXSBMVCIsbmV4''@;'; put 'put ''dERheToiW1x1MWVjY1x1MDMwMGxhIG5pXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAzMDAgdG9cdTAzMDFuJ2JcdTFlY2RdIFtuaV0gTFQiLGxhc3REYXk6IltBXHUwMzAwbmEgbmldIExUIixsYXN0V2VlazoiZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0b1x1MDMw''@;'; put 'put ''MWxcdTFlY2RcdTAzMDFdIFtuaV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5pXHUwMzAxICVzIixwYXN0OiIlcyBrXHUxZWNkamFcdTAzMDEiLHM6ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEgYWF5YVx1MDMwMSBkaWUiLHNzOiJhYXlhXHUwMzAxICVkIixtOiJp''@;'; put 'put ''XHUwMzAwc1x1MWViOWp1XHUwMzAxIGthbiIsbW06ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEgJWQiLGg6IndhXHUwMzAxa2F0aSBrYW4iLGhoOiJ3YVx1MDMwMWthdGkgJWQiLGQ6Ilx1MWVjZGpcdTFlY2RcdTAzMDEga2FuIixkZDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsTToib3N1XHUw''@;'; put 'put ''MzAwIGthbiIsTU06Im9zdVx1MDMwMCAlZCIseToiXHUxZWNkZHVcdTAzMDFuIGthbiIseXk6Ilx1MWVjZGR1XHUwMzAxbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MWVjZGpcdTFlY2RcdTAzMDFcc1xkezEsMn0vLG9yZGluYWw6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQiLHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDU3NSh0ZSxqLGQpeyFmdW5jdGlvbihTKXsidXNlIHN0cmljdCI7Uy5kZWZpbmVMb2NhbGUoInpoLWNuIix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4''@;'; put 'put ''X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2''@;'; put 'put ''NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2''@;'; put 'put ''MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTU0NjhcdTY1ZTVfXHU1NDY4XHU0ZTAwX1x1NTQ2OFx1NGU4Y19cdTU0NjhcdTRlMDlfXHU1NDY4XHU1NmRiX1x1NTQ2OFx1NGU5NF9cdTU0Njhc''@;'; put 'put ''dTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1c''@;'; put 'put ''dTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNUFoXHU3MGI5bW1cdTUyMDYiLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGRBaFx1NzBiOW1tXHU1MjA2IixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZ''@;'; put 'put ''XHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8s''@;'; put 'put ''bWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG8sSSl7cmV0dXJuIDEyPT09byYmKG89MCksIlx1NTFjY1x1NjY2OCI9PT1JfHwiXHU2NWU5XHU0ZTBhIj09PUl8fCJcdTRlMGFcdTUzNDgiPT09ST9vOiJcdTRlMGJcdTUzNDgiPT09SXx8Ilx1NjY1YVx1NGUwYSI9PT1JP28rMTI6bz49MTE/bzpvKzEy''@;'; put 'put ''fSxtZXJpZGllbTpmdW5jdGlvbihvLEksZil7dmFyIFQ9MTAwKm8rSTtyZXR1cm4gVDw2MDA/Ilx1NTFjY1x1NjY2OCI6VDw5MDA/Ilx1NjVlOVx1NGUwYSI6VDwxMTMwPyJcdTRlMGFcdTUzNDgiOlQ8MTIzMD8iXHU0ZTJkXHU1MzQ4IjpUPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1''@;'; put 'put ''NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XUxUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XUxUIixuZXh0V2VlazpmdW5jdGlvbihvKXtyZXR1cm4gby53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1NGUwYl1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxsYXN0RGF5OiJb''@;'; put 'put ''XHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazpmdW5jdGlvbihvKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1vLndlZWsoKT8iW1x1NGUwYV1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTU0''@;'; put 'put ''NjgpLyxvcmRpbmFsOmZ1bmN0aW9uKG8sSSl7c3dpdGNoKEkpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIG8rIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gbysiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG8rIlx1NTQ2OCI7ZGVmYXVsdDpyZXR1cm4gb319LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiIlc1x1NTQwZSIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NTFlMFx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0OWYiLG1tOiIlZCBcdTUyMDZcdTk0OWYiLGg6IjEgXHU1YzBmXHU2NWY2IixoaDoiJWQgXHU1YzBmXHU2NWY2IixkOiIxIFx1NTky''@;'; put 'put ''OSIsZGQ6IiVkIFx1NTkyOSIsdzoiMSBcdTU0NjgiLHd3OiIlZCBcdTU0NjgiLE06IjEgXHU0ZTJhXHU2NzA4IixNTToiJWQgXHU0ZTJhXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShkKDk3NTg2KSl9LDE4MzUxKHRlLGosZCl7IWZ1''@;'; put 'put ''bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2FsZSgiemgtaGsiLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVk''@;'; put 'put ''XHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8x''@;'; put 'put ''MVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFm''@;'; put 'put ''XHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9c''@;'; put 'put ''dTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhI''@;'; put 'put ''Om1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6''@;'; put 'put ''bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG8sSSl7cmV0dXJuIDEyPT09byYmKG89MCksIlx1NTFjY1x1NjY2OCI9PT1J''@;'; put 'put ''fHwiXHU2NWU5XHU0ZTBhIj09PUl8fCJcdTRlMGFcdTUzNDgiPT09ST9vOiJcdTRlMmRcdTUzNDgiPT09ST9vPj0xMT9vOm8rMTI6Ilx1NGUwYlx1NTM0OCI9PT1JfHwiXHU2NjVhXHU0ZTBhIj09PUk/bysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG8sSSxmKXt2YXIgVD0xMDAqbytJ''@;'; put 'put ''O3JldHVybiBUPDYwMD8iXHU1MWNjXHU2NjY4IjpUPDkwMD8iXHU2NWU5XHU0ZTBhIjpUPDEyMDA/Ilx1NGUwYVx1NTM0OCI6MTIwMD09PVQ/Ilx1NGUyZFx1NTM0OCI6VDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTky''@;'; put 'put ''OV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8''@;'; put 'put ''XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24obyxJKXtzd2l0Y2goSSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBvKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbysiXHU5MDMxIjtkZWZhdWx0OnJldHVy''@;'; put 'put ''biBvfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIi''@;'; put 'put ''LGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShkKDk3NTg2KSl9LDUxNjI2KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgiemgtbW8iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3''@;'; put 'put ''MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1''@;'; put 'put ''OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5z''@;'; put 'put ''cGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVk''@;'; put 'put ''ZGRkIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2''@;'; put 'put ''NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG8sSSl7cmV0dXJuIDEyPT09byYmKG89MCksIlx1NTFjY1x1NjY2OCI9PT1JfHwiXHU2NWU5XHU0ZTBhIj09PUl8fCJcdTRlMGFcdTUzNDgi''@;'; put 'put ''PT09ST9vOiJcdTRlMmRcdTUzNDgiPT09ST9vPj0xMT9vOm8rMTI6Ilx1NGUwYlx1NTM0OCI9PT1JfHwiXHU2NjVhXHU0ZTBhIj09PUk/bysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG8sSSxmKXt2YXIgVD0xMDAqbytJO3JldHVybiBUPDYwMD8iXHU1MWNjXHU2NjY4IjpUPDkwMD8i''@;'; put 'put ''XHU2NWU5XHU0ZTBhIjpUPDExMzA/Ilx1NGUwYVx1NTM0OCI6VDwxMjMwPyJcdTRlMmRcdTUzNDgiOlQ8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4''@;'; put 'put ''dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''byxJKXtzd2l0Y2goSSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBvKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbysiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBvfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1''@;'; put 'put ''MTY3IixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIx''@;'; put 'put ''IFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShkKDk3NTg2KSl9LDg4ODcodGUsaixkKXshZnVuY3Rpb24oUyl7InVzZSBzdHJpY3QiO1MuZGVmaW5lTG9jYWxlKCJ6aC10dyIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1''@;'; put 'put ''NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFm''@;'; put 'put ''XHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRl''@;'; put 'put ''OGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDpt''@;'; put 'put ''bSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1''@;'; put 'put ''NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0''@;'; put 'put ''OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obyxJKXtyZXR1cm4gMTI9PT1vJiYobz0wKSwiXHU1MWNjXHU2NjY4Ij09PUl8fCJcdTY1ZTlcdTRlMGEiPT09SXx8Ilx1NGUwYVx1NTM0OCI9PT1JP286Ilx1NGUyZFx1NTM0OCI9PT1JP28+PTExP286''@;'; put 'put ''bysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUl8fCJcdTY2NWFcdTRlMGEiPT09ST9vKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obyxJLGYpe3ZhciBUPTEwMCpvK0k7cmV0dXJuIFQ8NjAwPyJcdTUxY2NcdTY2NjgiOlQ8OTAwPyJcdTY1ZTlcdTRlMGEiOlQ8MTEzMD8iXHU0ZTBhXHU1MzQ4''@;'; put 'put ''IjpUPDEyMzA/Ilx1NGUyZFx1NTM0OCI6VDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldIExUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkIExUIixsYXN0RGF5OiJb''@;'; put 'put ''XHU2NjI4XHU1OTI5XSBMVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8sb3JkaW5hbDpmdW5jdGlvbihvLEkpe3N3aXRjaChJKXtjYXNlImQiOmNhc2UiRCI6Y2Fz''@;'; put 'put ''ZSJEREQiOnJldHVybiBvKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIG8rIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBvKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIG99fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5''@;'; put 'put ''ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4''@;'; put 'put ''Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KGQoOTc1ODYpKX0sOTc1ODYodGUsaixkKXsodGU9ZC5ubWQodGUpKS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBTLHo7ZnVuY3Rpb24gaCgpe3JldHVybiBTLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlv''@;'; put 'put ''biBJKGdlKXtyZXR1cm4gZ2UgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChnZSl9ZnVuY3Rpb24gZihnZSl7cmV0dXJuIG51bGwhPWdlJiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChnZSl9ZnVuY3Rpb24gVChnZSxqZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnZSxqZSl9ZnVuY3Rpb24gQShnZSl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhn''@;'; put 'put ''ZSkubGVuZ3RoO3ZhciBqZTtmb3IoamUgaW4gZ2UpaWYoVChnZSxqZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTShnZSl7cmV0dXJuIHZvaWQgMD09PWdlfWZ1bmN0aW9uIE8oZ2Upe3JldHVybiJudW1iZXIiPT10eXBlb2YgZ2V8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZy5jYWxsKGdlKX1mdW5jdGlvbiBEKGdlKXtyZXR1cm4gZ2UgaW5zdGFuY2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZ2UpfWZ1bmN0aW9uIEUoZ2UsamUpe3ZhciBNdCxsdD1bXSxXdD1nZS5sZW5ndGg7''@;'; put 'put ''Zm9yKE10PTA7TXQ8V3Q7KytNdClsdC5wdXNoKGplKGdlW010XSxNdCkpO3JldHVybiBsdH1mdW5jdGlvbiBCKGdlLGplKXtmb3IodmFyIGx0IGluIGplKVQoamUsbHQpJiYoZ2VbbHRdPWplW2x0XSk7cmV0dXJuIFQoamUsInRvU3RyaW5nIikmJihnZS50b1N0cmluZz1qZS50b1N0cmluZyks''@;'; put 'put ''VChqZSwidmFsdWVPZiIpJiYoZ2UudmFsdWVPZj1qZS52YWx1ZU9mKSxnZX1mdW5jdGlvbiBGKGdlLGplLGx0LE10KXtyZXR1cm4gdmQoZ2UsamUsbHQsTXQsITApLnV0YygpfWZ1bmN0aW9uIEgoZ2Upe3JldHVybiBudWxsPT1nZS5fcGYmJihnZS5fcGY9e2VtcHR5OiExLHVudXNlZFRva2Vu''@;'; put 'put ''czpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OiExLGludmFsaWRFcmE6bnVsbCxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLGVyYTpudWxs''@;'; put 'put ''LG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSxnZS5fcGZ9ZnVuY3Rpb24gWihnZSl7dmFyIGplPW51bGwsbHQ9ITEsTXQ9Z2UuX2QmJiFpc05hTihnZS5fZC5nZXRUaW1lKCkpO3JldHVybiBNdCYmKGplPUgoZ2UpLGx0PXouY2FsbChqZS5wYXJzZWREYXRl''@;'; put 'put ''UGFydHMsZnVuY3Rpb24oV3Qpe3JldHVybiBudWxsIT1XdH0pLE10PWplLm92ZXJmbG93PDAmJiFqZS5lbXB0eSYmIWplLmludmFsaWRFcmEmJiFqZS5pbnZhbGlkTW9udGgmJiFqZS5pbnZhbGlkV2Vla2RheSYmIWplLndlZWtkYXlNaXNtYXRjaCYmIWplLm51bGxJbnB1dCYmIWplLmludmFs''@;'; put 'put ''aWRGb3JtYXQmJiFqZS51c2VySW52YWxpZGF0ZWQmJighamUubWVyaWRpZW18fGplLm1lcmlkaWVtJiZsdCksZ2UuX3N0cmljdCYmKE10PU10JiYwPT09amUuY2hhcnNMZWZ0T3ZlciYmMD09PWplLnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09PWplLmJpZ0hvdXIpKSxudWxsIT1PYmpl''@;'; put 'put ''Y3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbihnZSk/TXQ6KGdlLl9pc1ZhbGlkPU10LGdlLl9pc1ZhbGlkKX1mdW5jdGlvbiBVKGdlKXt2YXIgamU9RihOYU4pO3JldHVybiBudWxsIT1nZT9CKEgoamUpLGdlKTpIKGplKS51c2VySW52YWxpZGF0ZWQ9ITAsamV9ej1BcnJheS5wcm90b3R5''@;'; put 'put ''cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbihnZSl7dmFyIE10LGplPU9iamVjdCh0aGlzKSxsdD1qZS5sZW5ndGg+Pj4wO2ZvcihNdD0wO010PGx0O010KyspaWYoTXQgaW4gamUmJmdlLmNhbGwodGhpcyxqZVtNdF0sTXQsamUpKXJldHVybiEwO3JldHVybiExfTt2YXIg''@;'; put 'put ''Sz1oLm1vbWVudFByb3BlcnRpZXM9W10sWD0hMTtmdW5jdGlvbiBuZShnZSxqZSl7dmFyIGx0LE10LFd0LCRuPUsubGVuZ3RoO2lmKE0oamUuX2lzQU1vbWVudE9iamVjdCl8fChnZS5faXNBTW9tZW50T2JqZWN0PWplLl9pc0FNb21lbnRPYmplY3QpLE0oamUuX2kpfHwoZ2UuX2k9amUuX2kp''@;'; put 'put ''LE0oamUuX2YpfHwoZ2UuX2Y9amUuX2YpLE0oamUuX2wpfHwoZ2UuX2w9amUuX2wpLE0oamUuX3N0cmljdCl8fChnZS5fc3RyaWN0PWplLl9zdHJpY3QpLE0oamUuX3R6bSl8fChnZS5fdHptPWplLl90em0pLE0oamUuX2lzVVRDKXx8KGdlLl9pc1VUQz1qZS5faXNVVEMpLE0oamUuX29mZnNl''@;'; put 'put ''dCl8fChnZS5fb2Zmc2V0PWplLl9vZmZzZXQpLE0oamUuX3BmKXx8KGdlLl9wZj1IKGplKSksTShqZS5fbG9jYWxlKXx8KGdlLl9sb2NhbGU9amUuX2xvY2FsZSksJG4+MClmb3IobHQ9MDtsdDwkbjtsdCsrKU0oV3Q9amVbTXQ9S1tsdF1dKXx8KGdlW010XT1XdCk7cmV0dXJuIGdlfWZ1bmN0''@;'; put 'put ''aW9uIHNlKGdlKXtuZSh0aGlzLGdlKSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPWdlLl9kP2dlLl9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4pKSwhMT09PVgmJihYPSEwLGgudXBkYXRlT2Zmc2V0KHRoaXMpLFg9ITEpfWZ1bmN0aW9uIGhl''@;'; put 'put ''KGdlKXtyZXR1cm4gZ2UgaW5zdGFuY2VvZiBzZXx8bnVsbCE9Z2UmJm51bGwhPWdlLl9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gX2UoZ2UpeyExPT09aC5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4o''@;'; put 'put ''IkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrZ2UpfWZ1bmN0aW9uIG1lKGdlLGplKXt2YXIgbHQ9ITA7cmV0dXJuIEIoZnVuY3Rpb24oKXtpZihudWxsIT1oLmRlcHJlY2F0aW9uSGFuZGxlciYmaC5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCxnZSksbHQpe3ZhciBXdCwkbixlaSxNdD1bXSxMYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoO2Zvcigkbj0wOyRuPExhOyRuKyspe2lmKFd0PSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzWyRuXSl7Zm9yKGVpIGluIFd0Kz0iXG5bIiskbisiXSAiLGFyZ3VtZW50c1swXSlUKGFyZ3VtZW50c1swXSxlaSkmJihXdCs9ZWkrIjogIithcmd1bWVudHNbMF1b''@;'; put 'put ''ZWldKyIsICIpO1d0PVd0LnNsaWNlKDAsLTIpfWVsc2UgV3Q9YXJndW1lbnRzWyRuXTtNdC5wdXNoKFd0KX1fZShnZSsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoTXQpLmpvaW4oIiIpKyJcbiIrKG5ldyBFcnJvcikuc3RhY2spLGx0PSExfXJldHVybiBqZS5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyl9LGplKX12YXIgXyxGZT17fTtmdW5jdGlvbiBSKGdlLGplKXtudWxsIT1oLmRlcHJlY2F0aW9uSGFuZGxlciYmaC5kZXByZWNhdGlvbkhhbmRsZXIoZ2UsamUpLEZlW2dlXXx8KF9lKGplKSxGZVtnZV09ITApfWZ1bmN0aW9uIHMoZ2Upe3JldHVybiB0eXBl''@;'; put 'put ''b2YgRnVuY3Rpb248InUiJiZnZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGdlKX1mdW5jdGlvbiB2KGdlLGplKXt2YXIgTXQsbHQ9Qih7fSxnZSk7Zm9yKE10IGluIGplKVQoamUsTXQpJiYoZihnZVtN''@;'; put 'put ''dF0pJiZmKGplW010XSk/KGx0W010XT17fSxCKGx0W010XSxnZVtNdF0pLEIobHRbTXRdLGplW010XSkpOm51bGwhPWplW010XT9sdFtNdF09amVbTXRdOmRlbGV0ZSBsdFtNdF0pO2ZvcihNdCBpbiBnZSlUKGdlLE10KSYmIVQoamUsTXQpJiZmKGdlW010XSkmJihsdFtNdF09Qih7fSxsdFtN''@;'; put 'put ''dF0pKTtyZXR1cm4gbHR9ZnVuY3Rpb24gcChnZSl7bnVsbCE9Z2UmJnRoaXMuc2V0KGdlKX1oLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSxoLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsLF89T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24oZ2Upe3ZhciBqZSxsdD1bXTtm''@;'; put 'put ''b3IoamUgaW4gZ2UpVChnZSxqZSkmJmx0LnB1c2goamUpO3JldHVybiBsdH07ZnVuY3Rpb24geShnZSxqZSxsdCl7dmFyIE10PSIiK01hdGguYWJzKGdlKTtyZXR1cm4oZ2U+PTA/bHQ/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxqZS1NdC5sZW5ndGgpKS50b1N0cmluZygp''@;'; put 'put ''LnN1YnN0cigxKStNdH12YXIgbD0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dH''@;'; put 'put ''Pyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxiPS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLHE9e30sRz17fTtmdW5jdGlvbiBRKGdlLGplLGx0LE10KXt2YXIgV3Q9TXQ7InN0cmluZyI9PXR5cGVvZiBN''@;'; put 'put ''dCYmKFd0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbTXRdKCl9KSxnZSYmKEdbZ2VdPVd0KSxqZSYmKEdbamVbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIHkoV3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGplWzFdLGplWzJdKX0pLGx0JiYoR1tsdF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2Nh''@;'; put 'put ''bGVEYXRhKCkub3JkaW5hbChXdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZ2UpfSl9ZnVuY3Rpb24gcGUoZ2Upe3JldHVybiBnZS5tYXRjaCgvXFtbXHNcU10vKT9nZS5yZXBsYWNlKC9eXFt8XF0kL2csIiIpOmdlLnJlcGxhY2UoL1xcL2csIiIpfWZ1bmN0aW9uIFplKGdlLGplKXtyZXR1cm4g''@;'; put 'put ''Z2UuaXNWYWxpZCgpPyhqZT1xZShqZSxnZS5sb2NhbGVEYXRhKCkpLHFbamVdPXFbamVdfHxmdW5jdGlvbiBQZShnZSl7dmFyIGx0LE10LGplPWdlLm1hdGNoKGwpO2ZvcihsdD0wLE10PWplLmxlbmd0aDtsdDxNdDtsdCsrKWplW2x0XT1HW2plW2x0XV0/R1tqZVtsdF1dOnBlKGplW2x0XSk7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKFd0KXt2YXIgZWksJG49IiI7Zm9yKGVpPTA7ZWk8TXQ7ZWkrKykkbis9cyhqZVtlaV0pP2plW2VpXS5jYWxsKFd0LGdlKTpqZVtlaV07cmV0dXJuICRufX0oamUpLHFbamVdKGdlKSk6Z2UubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gcWUoZ2Us''@;'; put 'put ''amUpe3ZhciBsdD01O2Z1bmN0aW9uIE10KFd0KXtyZXR1cm4gamUubG9uZ0RhdGVGb3JtYXQoV3QpfHxXdH1mb3IoYi5sYXN0SW5kZXg9MDtsdD49MCYmYi50ZXN0KGdlKTspZ2U9Z2UucmVwbGFjZShiLE10KSxiLmxhc3RJbmRleD0wLGx0LT0xO3JldHVybiBnZX12YXIgd2U9e0Q6ImRhdGUi''@;'; put 'put ''LGRhdGVzOiJkYXRlIixkYXRlOiJkYXRlIixkOiJkYXkiLGRheXM6ImRheSIsZGF5OiJkYXkiLGU6IndlZWtkYXkiLHdlZWtkYXlzOiJ3ZWVrZGF5Iix3ZWVrZGF5OiJ3ZWVrZGF5IixFOiJpc29XZWVrZGF5Iixpc293ZWVrZGF5czoiaXNvV2Vla2RheSIsaXNvd2Vla2RheToiaXNvV2Vla2Rh''@;'; put 'put ''eSIsREREOiJkYXlPZlllYXIiLGRheW9meWVhcnM6ImRheU9mWWVhciIsZGF5b2Z5ZWFyOiJkYXlPZlllYXIiLGg6ImhvdXIiLGhvdXJzOiJob3VyIixob3VyOiJob3VyIixtczoibWlsbGlzZWNvbmQiLG1pbGxpc2Vjb25kczoibWlsbGlzZWNvbmQiLG1pbGxpc2Vjb25kOiJtaWxsaXNlY29u''@;'; put 'put ''ZCIsbToibWludXRlIixtaW51dGVzOiJtaW51dGUiLG1pbnV0ZToibWludXRlIixNOiJtb250aCIsbW9udGhzOiJtb250aCIsbW9udGg6Im1vbnRoIixROiJxdWFydGVyIixxdWFydGVyczoicXVhcnRlciIscXVhcnRlcjoicXVhcnRlciIsczoic2Vjb25kIixzZWNvbmRzOiJzZWNvbmQiLHNl''@;'; put 'put ''Y29uZDoic2Vjb25kIixnZzoid2Vla1llYXIiLHdlZWt5ZWFyczoid2Vla1llYXIiLHdlZWt5ZWFyOiJ3ZWVrWWVhciIsR0c6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcnM6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcjoiaXNvV2Vla1llYXIiLHc6IndlZWsiLHdlZWtzOiJ3ZWVrIix3ZWVr''@;'; put 'put ''OiJ3ZWVrIixXOiJpc29XZWVrIixpc293ZWVrczoiaXNvV2VlayIsaXNvd2VlazoiaXNvV2VlayIseToieWVhciIseWVhcnM6InllYXIiLHllYXI6InllYXIifTtmdW5jdGlvbiBwdChnZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBnZT93ZVtnZV18fHdlW2dlLnRvTG93ZXJDYXNlKCldOnZv''@;'; put 'put ''aWQgMH1mdW5jdGlvbiBLZShnZSl7dmFyIGx0LE10LGplPXt9O2ZvcihNdCBpbiBnZSlUKGdlLE10KSYmKGx0PXB0KE10KSkmJihqZVtsdF09Z2VbTXRdKTtyZXR1cm4gamV9dmFyIFllPXtkYXRlOjksZGF5OjExLHdlZWtkYXk6MTEsaXNvV2Vla2RheToxMSxkYXlPZlllYXI6NCxob3VyOjEz''@;'; put 'put ''LG1pbGxpc2Vjb25kOjE2LG1pbnV0ZToxNCxtb250aDo4LHF1YXJ0ZXI6NyxzZWNvbmQ6MTUsd2Vla1llYXI6MSxpc29XZWVrWWVhcjoxLHdlZWs6NSxpc29XZWVrOjUseWVhcjoxfTt2YXIgd3QsaHQ9L1xkLyx2dD0vXGRcZC8sWXQ9L1xkezN9Lyx0dD0vXGR7NH0vLFVlPS9bKy1dP1xkezZ9''@;'; put 'put ''LywkZT0vXGRcZD8vLExlPS9cZFxkXGRcZD8vLG50PS9cZFxkXGRcZFxkXGQ/Lyxybj0vXGR7MSwzfS8seHQ9L1xkezEsNH0vLFR0PS9bKy1dP1xkezEsNn0vLHluPS9cZCsvLFh0PS9bKy1dP1xkKy8sUXQ9L1p8WystXVxkXGQ6P1xkXGQvZ2ksWHI9L1p8WystXVxkXGQoPzo6P1xkXGQpPy9n''@;'; put 'put ''aSxpdD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZGXC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2RkZdezEsMjU2fSl7MSwyfS9pLENyPS9eWzEt''@;'; put 'put ''OV1cZD8vLEx0PS9eKFsxLTldXGR8XGQpLztmdW5jdGlvbiBSbihnZSxqZSxsdCl7d3RbZ2VdPXMoamUpP2plOmZ1bmN0aW9uKE10LFd0KXtyZXR1cm4gTXQmJmx0P2x0OmplfX1mdW5jdGlvbiBRZShnZSxqZSl7cmV0dXJuIFQod3QsZ2UpP3d0W2dlXShqZS5fc3RyaWN0LGplLl9sb2NhbGUp''@;'; put 'put ''Om5ldyBSZWdFeHAoZnVuY3Rpb24gUHQoZ2Upe3JldHVybiBRcihnZS5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZyxmdW5jdGlvbihqZSxsdCxNdCxXdCwkbil7cmV0dXJuIGx0fHxNdHx8V3R8fCRufSkpfShnZSkpfWZ1bmN0''@;'; put 'put ''aW9uIFFyKGdlKXtyZXR1cm4gZ2UucmVwbGFjZSgvWy1cL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX1mdW5jdGlvbiBOZShnZSl7cmV0dXJuIGdlPDA/TWF0aC5jZWlsKGdlKXx8MDpNYXRoLmZsb29yKGdlKX1mdW5jdGlvbiB5dChnZSl7dmFyIGplPStnZSxsdD0wO3JldHVybiAwIT09''@;'; put 'put ''amUmJmlzRmluaXRlKGplKSYmKGx0PU5lKGplKSksbHR9d3Q9e307dmFyIHJyPXt9O2Z1bmN0aW9uIGF0KGdlLGplKXt2YXIgbHQsV3QsTXQ9amU7Zm9yKCJzdHJpbmciPT10eXBlb2YgZ2UmJihnZT1bZ2VdKSxPKGplKSYmKE10PWZ1bmN0aW9uKCRuLGVpKXtlaVtqZV09eXQoJG4pfSksV3Q9''@;'; put 'put ''Z2UubGVuZ3RoLGx0PTA7bHQ8V3Q7bHQrKylycltnZVtsdF1dPU10fWZ1bmN0aW9uIF90KGdlLGplKXthdChnZSxmdW5jdGlvbihsdCxNdCxXdCwkbil7V3QuX3c9V3QuX3d8fHt9LGplKGx0LFd0Ll93LFd0LCRuKX0pfWZ1bmN0aW9uIHduKGdlLGplLGx0KXtudWxsIT1qZSYmVChycixnZSkm''@;'; put 'put ''JnJyW2dlXShqZSxsdC5fYSxsdCxnZSl9ZnVuY3Rpb24gJHQoZ2Upe3JldHVybiBnZSU0PT0wJiZnZSUxMDAhPTB8fGdlJTQwMD09MH12YXIgSHQ9MCxzaT0xLG5uPTIsbG49MyxraT00LGFuPTUsR3Q9NixlYT03LG1pPTg7ZnVuY3Rpb24gZnIoZ2Upe3JldHVybiAkdChnZSk/MzY2OjM2NX1R''@;'; put 'put ''KCJZIiwwLDAsZnVuY3Rpb24oKXt2YXIgZ2U9dGhpcy55ZWFyKCk7cmV0dXJuIGdlPD05OTk5P3koZ2UsNCk6IisiK2dlfSksUSgwLFsiWVkiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSksUSgwLFsiWVlZWSIsNF0sMCwieWVhciIpLFEoMCxbIllZWVlZIiw1XSww''@;'; put 'put ''LCJ5ZWFyIiksUSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksUm4oIlkiLFh0KSxSbigiWVkiLCRlLHZ0KSxSbigiWVlZWSIseHQsdHQpLFJuKCJZWVlZWSIsVHQsVWUpLFJuKCJZWVlZWVkiLFR0LFVlKSxhdChbIllZWVlZIiwiWVlZWVlZIl0sSHQpLGF0KCJZWVlZIixmdW5jdGlvbihn''@;'; put 'put ''ZSxqZSl7amVbSHRdPTI9PT1nZS5sZW5ndGg/aC5wYXJzZVR3b0RpZ2l0WWVhcihnZSk6eXQoZ2UpfSksYXQoIllZIixmdW5jdGlvbihnZSxqZSl7amVbSHRdPWgucGFyc2VUd29EaWdpdFllYXIoZ2UpfSksYXQoIlkiLGZ1bmN0aW9uKGdlLGplKXtqZVtIdF09cGFyc2VJbnQoZ2UsMTApfSks''@;'; put 'put ''aC5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbihnZSl7cmV0dXJuIHl0KGdlKSsoeXQoZ2UpPjY4PzE5MDA6MmUzKX07dmFyIFVpLCRpPVZpKCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIFZpKGdlLGplKXtyZXR1cm4gZnVuY3Rpb24obHQpe3JldHVybiBudWxsIT1sdD8odWEodGhpcyxnZSxs''@;'; put 'put ''dCksaC51cGRhdGVPZmZzZXQodGhpcyxqZSksdGhpcyk6cXIodGhpcyxnZSl9fWZ1bmN0aW9uIHFyKGdlLGplKXtpZighZ2UuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIGx0PWdlLl9kLE10PWdlLl9pc1VUQztzd2l0Y2goamUpe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gTXQ/bHQuZ2V0''@;'; put 'put ''VVRDTWlsbGlzZWNvbmRzKCk6bHQuZ2V0TWlsbGlzZWNvbmRzKCk7Y2FzZSJTZWNvbmRzIjpyZXR1cm4gTXQ/bHQuZ2V0VVRDU2Vjb25kcygpOmx0LmdldFNlY29uZHMoKTtjYXNlIk1pbnV0ZXMiOnJldHVybiBNdD9sdC5nZXRVVENNaW51dGVzKCk6bHQuZ2V0TWludXRlcygpO2Nhc2UiSG91''@;'; put 'put ''cnMiOnJldHVybiBNdD9sdC5nZXRVVENIb3VycygpOmx0LmdldEhvdXJzKCk7Y2FzZSJEYXRlIjpyZXR1cm4gTXQ/bHQuZ2V0VVRDRGF0ZSgpOmx0LmdldERhdGUoKTtjYXNlIkRheSI6cmV0dXJuIE10P2x0LmdldFVUQ0RheSgpOmx0LmdldERheSgpO2Nhc2UiTW9udGgiOnJldHVybiBNdD9s''@;'; put 'put ''dC5nZXRVVENNb250aCgpOmx0LmdldE1vbnRoKCk7Y2FzZSJGdWxsWWVhciI6cmV0dXJuIE10P2x0LmdldFVUQ0Z1bGxZZWFyKCk6bHQuZ2V0RnVsbFllYXIoKTtkZWZhdWx0OnJldHVybiBOYU59fWZ1bmN0aW9uIHVhKGdlLGplLGx0KXt2YXIgTXQsV3QsJG4sZWksTGE7aWYoZ2UuaXNWYWxp''@;'; put 'put ''ZCgpJiYhaXNOYU4obHQpKXtzd2l0Y2goTXQ9Z2UuX2QsV3Q9Z2UuX2lzVVRDLGplKXtjYXNlIk1pbGxpc2Vjb25kcyI6cmV0dXJuIHZvaWQoV3Q/TXQuc2V0VVRDTWlsbGlzZWNvbmRzKGx0KTpNdC5zZXRNaWxsaXNlY29uZHMobHQpKTtjYXNlIlNlY29uZHMiOnJldHVybiB2b2lkKFd0P010''@;'; put 'put ''LnNldFVUQ1NlY29uZHMobHQpOk10LnNldFNlY29uZHMobHQpKTtjYXNlIk1pbnV0ZXMiOnJldHVybiB2b2lkKFd0P010LnNldFVUQ01pbnV0ZXMobHQpOk10LnNldE1pbnV0ZXMobHQpKTtjYXNlIkhvdXJzIjpyZXR1cm4gdm9pZChXdD9NdC5zZXRVVENIb3VycyhsdCk6TXQuc2V0SG91cnMo''@;'; put 'put ''bHQpKTtjYXNlIkRhdGUiOnJldHVybiB2b2lkKFd0P010LnNldFVUQ0RhdGUobHQpOk10LnNldERhdGUobHQpKTtjYXNlIkZ1bGxZZWFyIjpicmVhaztkZWZhdWx0OnJldHVybn0kbj1sdCxlaT1nZS5tb250aCgpLExhPTI5IT09KExhPWdlLmRhdGUoKSl8fDEhPT1laXx8JHQoJG4pP0xhOjI4''@;'; put 'put ''LFd0P010LnNldFVUQ0Z1bGxZZWFyKCRuLGVpLExhKTpNdC5zZXRGdWxsWWVhcigkbixlaSxMYSl9fWZ1bmN0aW9uIFZhKGdlLGplKXtpZihpc05hTihnZSl8fGlzTmFOKGplKSlyZXR1cm4gTmFOO3ZhciBsdD1mdW5jdGlvbiBvaShnZSxqZSl7cmV0dXJuKGdlJWplK2plKSVqZX0oamUsMTIp''@;'; put 'put ''O3JldHVybiBnZSs9KGplLWx0KS8xMiwxPT09bHQ/JHQoZ2UpPzI5OjI4OjMxLWx0JTclMn1VaT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbihnZSl7dmFyIGplO2ZvcihqZT0wO2plPHRoaXMubGVuZ3RoOysramUpaWYodGhpc1tqZV09''@;'; put 'put ''PT1nZSlyZXR1cm4gamU7cmV0dXJuLTF9LFEoIk0iLFsiTU0iLDJdLCJNbyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSxRKCJNTU0iLDAsMCxmdW5jdGlvbihnZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsZ2UpfSksUSgiTU1NTSIsMCww''@;'; put 'put ''LGZ1bmN0aW9uKGdlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsZ2UpfSksUm4oIk0iLCRlLENyKSxSbigiTU0iLCRlLHZ0KSxSbigiTU1NIixmdW5jdGlvbihnZSxqZSl7cmV0dXJuIGplLm1vbnRoc1Nob3J0UmVnZXgoZ2UpfSksUm4oIk1NTU0iLGZ1bmN0aW9uKGdl''@;'; put 'put ''LGplKXtyZXR1cm4gamUubW9udGhzUmVnZXgoZ2UpfSksYXQoWyJNIiwiTU0iXSxmdW5jdGlvbihnZSxqZSl7amVbc2ldPXl0KGdlKS0xfSksYXQoWyJNTU0iLCJNTU1NIl0sZnVuY3Rpb24oZ2UsamUsbHQsTXQpe3ZhciBXdD1sdC5fbG9jYWxlLm1vbnRoc1BhcnNlKGdlLE10LGx0Ll9zdHJp''@;'; put 'put ''Y3QpO251bGwhPVd0P2plW3NpXT1XdDpIKGx0KS5pbnZhbGlkTW9udGg9Z2V9KTt2YXIgdXI9IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksZmE9Ikphbl9GZWJf''@;'; put 'put ''TWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHhpPS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sb2E9aXQsWGk9aXQ7ZnVuY3Rpb24gWGEoZ2UsamUsbHQpe3ZhciBNdCxXdCwkbixlaT1nZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0''@;'; put 'put ''aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10sTXQ9MDtNdDwxMjsrK010KSRuPUYoWzJlMyxNdF0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbTXRdPXRoaXMubW9udGhzU2hv''@;'; put 'put ''cnQoJG4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW010XT10aGlzLm1vbnRocygkbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbHQ/Ik1NTSI9PT1qZT8tMSE9PShXdD1VaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsZWkpKT9XdDpu''@;'; put 'put ''dWxsOi0xIT09KFd0PVVpLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLGVpKSk/V3Q6bnVsbDoiTU1NIj09PWplPy0xIT09KFd0PVVpLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxlaSkpfHwtMSE9PShXdD1VaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxlaSkpP1d0Om51bGw6''@;'; put 'put ''LTEhPT0oV3Q9VWkuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsZWkpKXx8LTEhPT0oV3Q9VWkuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLGVpKSk/V3Q6bnVsbH1mdW5jdGlvbiBJMShnZSxqZSl7aWYoIWdlLmlzVmFsaWQoKSlyZXR1cm4gZ2U7aWYoInN0cmluZyI9PXR5cGVvZiBq''@;'; put 'put ''ZSlpZigvXlxkKyQvLnRlc3QoamUpKWplPXl0KGplKTtlbHNlIGlmKCFPKGplPWdlLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZShqZSkpKXJldHVybiBnZTt2YXIgbHQ9amUsTXQ9Z2UuZGF0ZSgpO3JldHVybiBNdD1NdDwyOT9NdDpNYXRoLm1pbihNdCxWYShnZS55ZWFyKCksbHQpKSxnZS5f''@;'; put 'put ''aXNVVEM/Z2UuX2Quc2V0VVRDTW9udGgobHQsTXQpOmdlLl9kLnNldE1vbnRoKGx0LE10KSxnZX1mdW5jdGlvbiBpdShnZSl7cmV0dXJuIG51bGwhPWdlPyhJMSh0aGlzLGdlKSxoLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpxcih0aGlzLCJNb250aCIpfWZ1bmN0aW9uIG5pKCl7ZnVu''@;'; put 'put ''Y3Rpb24gZ2UoeG8sZHMpe3JldHVybiBkcy5sZW5ndGgteG8ubGVuZ3RofXZhciBXdCwkbixlaSxMYSxqZT1bXSxsdD1bXSxNdD1bXTtmb3IoV3Q9MDtXdDwxMjtXdCsrKSRuPUYoWzJlMyxXdF0pLGVpPVFyKHRoaXMubW9udGhzU2hvcnQoJG4sIiIpKSxMYT1Rcih0aGlzLm1vbnRocygkbiwi''@;'; put 'put ''IikpLGplLnB1c2goZWkpLGx0LnB1c2goTGEpLE10LnB1c2goTGEpLE10LnB1c2goZWkpO2plLnNvcnQoZ2UpLGx0LnNvcnQoZ2UpLE10LnNvcnQoZ2UpLHRoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitNdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdl''@;'; put 'put ''eD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrbHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2plLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBPdChnZSxq''@;'; put 'put ''ZSxsdCxNdCxXdCwkbixlaSl7dmFyIExhO3JldHVybiBnZTwxMDAmJmdlPj0wPyhMYT1uZXcgRGF0ZShnZSs0MDAsamUsbHQsTXQsV3QsJG4sZWkpLGlzRmluaXRlKExhLmdldEZ1bGxZZWFyKCkpJiZMYS5zZXRGdWxsWWVhcihnZSkpOkxhPW5ldyBEYXRlKGdlLGplLGx0LE10LFd0LCRuLGVp''@;'; put 'put ''KSxMYX1mdW5jdGlvbiBKcihnZSl7dmFyIGplLGx0O3JldHVybiBnZTwxMDAmJmdlPj0wPygobHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlbMF09Z2UrNDAwLGplPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsbHQpKSxpc0Zpbml0ZShqZS5nZXRVVENGdWxs''@;'; put 'put ''WWVhcigpKSYmamUuc2V0VVRDRnVsbFllYXIoZ2UpKTpqZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpLGplfWZ1bmN0aW9uIEYwKGdlLGplLGx0KXt2YXIgTXQ9NytqZS1sdDtyZXR1cm4tKDcrSnIoZ2UsMCxNdCkuZ2V0VVRDRGF5KCktamUpJTcrTXQtMX1mdW5j''@;'; put 'put ''dGlvbiAkbyhnZSxqZSxsdCxNdCxXdCl7dmFyIHhvLGRzLExhPTErNyooamUtMSkrKDcrbHQtTXQpJTcrRjAoZ2UsTXQsV3QpO3JldHVybiBMYTw9MD9kcz1mcih4bz1nZS0xKStMYTpMYT5mcihnZSk/KHhvPWdlKzEsZHM9TGEtZnIoZ2UpKTooeG89Z2UsZHM9TGEpLHt5ZWFyOnhvLGRheU9m''@;'; put 'put ''WWVhcjpkc319ZnVuY3Rpb24gRXUoZ2UsamUsbHQpe3ZhciAkbixlaSxNdD1GMChnZS55ZWFyKCksamUsbHQpLFd0PU1hdGguZmxvb3IoKGdlLmRheU9mWWVhcigpLU10LTEpLzcpKzE7cmV0dXJuIFd0PDE/JG49V3QrenIoZWk9Z2UueWVhcigpLTEsamUsbHQpOld0PnpyKGdlLnllYXIoKSxq''@;'; put 'put ''ZSxsdCk/KCRuPVd0LXpyKGdlLnllYXIoKSxqZSxsdCksZWk9Z2UueWVhcigpKzEpOihlaT1nZS55ZWFyKCksJG49V3QpLHt3ZWVrOiRuLHllYXI6ZWl9fWZ1bmN0aW9uIHpyKGdlLGplLGx0KXt2YXIgTXQ9RjAoZ2UsamUsbHQpLFd0PUYwKGdlKzEsamUsbHQpO3JldHVybihmcihnZSktTXQr''@;'; put 'put ''V3QpLzd9USgidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLFEoIlciLFsiV1ciLDJdLCJXbyIsImlzb1dlZWsiKSxSbigidyIsJGUsQ3IpLFJuKCJ3dyIsJGUsdnQpLFJuKCJXIiwkZSxDciksUm4oIldXIiwkZSx2dCksX3QoWyJ3Iiwid3ciLCJXIiwiV1ciXSxmdW5jdGlvbihnZSxqZSxsdCxN''@;'; put 'put ''dCl7amVbTXQuc3Vic3RyKDAsMSldPXl0KGdlKX0pO2Z1bmN0aW9uIF9jKGdlLGplKXtyZXR1cm4gZ2Uuc2xpY2UoamUsNykuY29uY2F0KGdlLnNsaWNlKDAsamUpKX1RKCJkIiwwLCJkbyIsImRheSIpLFEoImRkIiwwLDAsZnVuY3Rpb24oZ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53''@;'; put 'put ''ZWVrZGF5c01pbih0aGlzLGdlKX0pLFEoImRkZCIsMCwwLGZ1bmN0aW9uKGdlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLGdlKX0pLFEoImRkZGQiLDAsMCxmdW5jdGlvbihnZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsZ2Up''@;'; put 'put ''fSksUSgiZSIsMCwwLCJ3ZWVrZGF5IiksUSgiRSIsMCwwLCJpc29XZWVrZGF5IiksUm4oImQiLCRlKSxSbigiZSIsJGUpLFJuKCJFIiwkZSksUm4oImRkIixmdW5jdGlvbihnZSxqZSl7cmV0dXJuIGplLndlZWtkYXlzTWluUmVnZXgoZ2UpfSksUm4oImRkZCIsZnVuY3Rpb24oZ2UsamUpe3Jl''@;'; put 'put ''dHVybiBqZS53ZWVrZGF5c1Nob3J0UmVnZXgoZ2UpfSksUm4oImRkZGQiLGZ1bmN0aW9uKGdlLGplKXtyZXR1cm4gamUud2Vla2RheXNSZWdleChnZSl9KSxfdChbImRkIiwiZGRkIiwiZGRkZCJdLGZ1bmN0aW9uKGdlLGplLGx0LE10KXt2YXIgV3Q9bHQuX2xvY2FsZS53ZWVrZGF5c1BhcnNl''@;'; put 'put ''KGdlLE10LGx0Ll9zdHJpY3QpO251bGwhPVd0P2plLmQ9V3Q6SChsdCkuaW52YWxpZFdlZWtkYXk9Z2V9KSxfdChbImQiLCJlIiwiRSJdLGZ1bmN0aW9uKGdlLGplLGx0LE10KXtqZVtNdF09eXQoZ2UpfSk7dmFyIFgyPSJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5''@;'; put 'put ''X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxWYz0iU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHRtPSJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxYaD1pdCxXdT1pdCxUdT1pdDtmdW5jdGlvbiBnZChnZSxqZSxsdCl7dmFyIE10LFd0LCRuLGVp''@;'; put 'put ''PWdlLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2UpZm9yKHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sTXQ9MDtNdDw3OysrTXQpJG49RihbMmUzLDFdKS5kYXkoTXQp''@;'; put 'put ''LHRoaXMuX21pbldlZWtkYXlzUGFyc2VbTXRdPXRoaXMud2Vla2RheXNNaW4oJG4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW010XT10aGlzLndlZWtkYXlzU2hvcnQoJG4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fd2Vla2RheXNQYXJz''@;'; put 'put ''ZVtNdF09dGhpcy53ZWVrZGF5cygkbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbHQ/ImRkZGQiPT09amU/LTEhPT0oV3Q9VWkuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGVpKSk/V3Q6bnVsbDoiZGRkIj09PWplPy0xIT09KFd0PVVpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5''@;'; put 'put ''c1BhcnNlLGVpKSk/V3Q6bnVsbDotMSE9PShXdD1VaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsZWkpKT9XdDpudWxsOiJkZGRkIj09PWplPy0xIT09KFd0PVVpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxlaSkpfHwtMSE9PShXdD1VaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQ''@;'; put 'put ''YXJzZSxlaSkpfHwtMSE9PShXdD1VaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsZWkpKT9XdDpudWxsOiJkZGQiPT09amU/LTEhPT0oV3Q9VWkuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsZWkpKXx8LTEhPT0oV3Q9VWkuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGVpKSl8''@;'; put 'put ''fC0xIT09KFd0PVVpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxlaSkpP1d0Om51bGw6LTEhPT0oV3Q9VWkuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGVpKSl8fC0xIT09KFd0PVVpLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxlaSkpfHwtMSE9PShXdD1VaS5jYWxsKHRoaXMu''@;'; put 'put ''X3Nob3J0V2Vla2RheXNQYXJzZSxlaSkpP1d0Om51bGx9ZnVuY3Rpb24gcW4oKXtmdW5jdGlvbiBnZShDMCx3ZCl7cmV0dXJuIHdkLmxlbmd0aC1DMC5sZW5ndGh9dmFyICRuLGVpLExhLHhvLGRzLGplPVtdLGx0PVtdLE10PVtdLFd0PVtdO2Zvcigkbj0wOyRuPDc7JG4rKyllaT1GKFsyZTMs''@;'; put 'put ''MV0pLmRheSgkbiksTGE9UXIodGhpcy53ZWVrZGF5c01pbihlaSwiIikpLHhvPVFyKHRoaXMud2Vla2RheXNTaG9ydChlaSwiIikpLGRzPVFyKHRoaXMud2Vla2RheXMoZWksIiIpKSxqZS5wdXNoKExhKSxsdC5wdXNoKHhvKSxNdC5wdXNoKGRzKSxXdC5wdXNoKExhKSxXdC5wdXNoKHhvKSxX''@;'; put 'put ''dC5wdXNoKGRzKTtqZS5zb3J0KGdlKSxsdC5zb3J0KGdlKSxNdC5zb3J0KGdlKSxXdC5zb3J0KGdlKSx0aGlzLl93ZWVrZGF5c1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitXdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhp''@;'; put 'put ''cy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK010LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2x0LmpvaW4oInwiKSsi''@;'; put 'put ''KSIsImkiKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitqZS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gZ2koKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBicyhnZSxqZSl7UShnZSwwLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLGplKX0pfWZ1bmN0aW9uIHJhKGdlLGplKXtyZXR1cm4gamUuX21lcmlkaWVtUGFyc2V9USgiSCIsWyJISCIsMl0sMCwiaG91ciIpLFEoImgiLFsiaGgiLDJdLDAsZ2kpLFEoImsiLFsia2siLDJdLDAs''@;'; put 'put ''ZnVuY3Rpb24gQWEoKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pLFEoImhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrZ2kuYXBwbHkodGhpcykreSh0aGlzLm1pbnV0ZXMoKSwyKX0pLFEoImhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIitnaS5hcHBseSh0aGlzKSt5KHRoaXMu''@;'; put 'put ''bWludXRlcygpLDIpK3kodGhpcy5zZWNvbmRzKCksMil9KSxRKCJIbW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKSt5KHRoaXMubWludXRlcygpLDIpfSksUSgiSG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKSt5KHRoaXMubWludXRlcygp''@;'; put 'put ''LDIpK3kodGhpcy5zZWNvbmRzKCksMil9KSxicygiYSIsITApLGJzKCJBIiwhMSksUm4oImEiLHJhKSxSbigiQSIscmEpLFJuKCJIIiwkZSxMdCksUm4oImgiLCRlLENyKSxSbigiayIsJGUsQ3IpLFJuKCJISCIsJGUsdnQpLFJuKCJoaCIsJGUsdnQpLFJuKCJrayIsJGUsdnQpLFJuKCJobW0i''@;'; put 'put ''LExlKSxSbigiaG1tc3MiLG50KSxSbigiSG1tIixMZSksUm4oIkhtbXNzIixudCksYXQoWyJIIiwiSEgiXSxsbiksYXQoWyJrIiwia2siXSxmdW5jdGlvbihnZSxqZSxsdCl7dmFyIE10PXl0KGdlKTtqZVtsbl09MjQ9PT1NdD8wOk10fSksYXQoWyJhIiwiQSJdLGZ1bmN0aW9uKGdlLGplLGx0''@;'; put 'put ''KXtsdC5faXNQbT1sdC5fbG9jYWxlLmlzUE0oZ2UpLGx0Ll9tZXJpZGllbT1nZX0pLGF0KFsiaCIsImhoIl0sZnVuY3Rpb24oZ2UsamUsbHQpe2plW2xuXT15dChnZSksSChsdCkuYmlnSG91cj0hMH0pLGF0KCJobW0iLGZ1bmN0aW9uKGdlLGplLGx0KXt2YXIgTXQ9Z2UubGVuZ3RoLTI7amVb''@;'; put 'put ''bG5dPXl0KGdlLnN1YnN0cigwLE10KSksamVba2ldPXl0KGdlLnN1YnN0cihNdCkpLEgobHQpLmJpZ0hvdXI9ITB9KSxhdCgiaG1tc3MiLGZ1bmN0aW9uKGdlLGplLGx0KXt2YXIgTXQ9Z2UubGVuZ3RoLTQsV3Q9Z2UubGVuZ3RoLTI7amVbbG5dPXl0KGdlLnN1YnN0cigwLE10KSksamVba2ld''@;'; put 'put ''PXl0KGdlLnN1YnN0cihNdCwyKSksamVbYW5dPXl0KGdlLnN1YnN0cihXdCkpLEgobHQpLmJpZ0hvdXI9ITB9KSxhdCgiSG1tIixmdW5jdGlvbihnZSxqZSxsdCl7dmFyIE10PWdlLmxlbmd0aC0yO2plW2xuXT15dChnZS5zdWJzdHIoMCxNdCkpLGplW2tpXT15dChnZS5zdWJzdHIoTXQpKX0p''@;'; put 'put ''LGF0KCJIbW1zcyIsZnVuY3Rpb24oZ2UsamUsbHQpe3ZhciBNdD1nZS5sZW5ndGgtNCxXdD1nZS5sZW5ndGgtMjtqZVtsbl09eXQoZ2Uuc3Vic3RyKDAsTXQpKSxqZVtraV09eXQoZ2Uuc3Vic3RyKE10LDIpKSxqZVthbl09eXQoZ2Uuc3Vic3RyKFd0KSl9KTt2YXIgRm89VmkoIkhvdXJzIiwh''@;'; put 'put ''MCk7dmFyIEhsLHNjPXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6IkludmFsaWQg''@;'; put 'put ''ZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBo''@;'; put 'put ''b3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsdzoiYSB3ZWVrIix3dzoiJWQgd2Vla3MiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sbW9udGhzOnVyLG1vbnRoc1Nob3J0OmZhLHdlZWs6e2RvdzowLGRveTo2fSx3''@;'; put 'put ''ZWVrZGF5czpYMix3ZWVrZGF5c01pbjp0bSx3ZWVrZGF5c1Nob3J0OlZjLG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxVbz17fSxWbz17fTtmdW5jdGlvbiBBdShnZSxqZSl7dmFyIGx0LE10PU1hdGgubWluKGdlLmxlbmd0aCxqZS5sZW5ndGgpO2ZvcihsdD0wO2x0PE10O2x0Kz0x''@;'; put 'put ''KWlmKGdlW2x0XSE9PWplW2x0XSlyZXR1cm4gbHQ7cmV0dXJuIE10fWZ1bmN0aW9uIGExKGdlKXtyZXR1cm4gZ2UmJmdlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKX1mdW5jdGlvbiBIcihnZSl7dmFyIGplPW51bGw7aWYodm9pZCAwPT09VW9bZ2VdJiZ0ZSYmdGUuZXhwb3J0cyYm''@;'; put 'put ''ZnVuY3Rpb24gb2woZ2Upe3JldHVybiEoIWdlfHwhZ2UubWF0Y2goIl5bXi9cXFxcXSokIikpfShnZSkpdHJ5e2plPUhsLl9hYmJyLGQoMzUzNTgpKCIuLyIrZ2UpLEJvKGplKX1jYXRjaHtVb1tnZV09bnVsbH1yZXR1cm4gVW9bZ2VdfWZ1bmN0aW9uIEJvKGdlLGplKXt2YXIgbHQ7cmV0dXJu''@;'; put 'put ''IGdlJiYoKGx0PU0oamUpP0p0KGdlKTpDdChnZSxqZSkpP0hsPWx0OnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkxvY2FsZSAiK2dlKyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxIbC5fYWJicn1mdW5jdGlvbiBDdChn''@;'; put 'put ''ZSxqZSl7aWYobnVsbCE9PWplKXt2YXIgbHQsTXQ9c2M7aWYoamUuYWJicj1nZSxudWxsIT1Vb1tnZV0pUigiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVu''@;'; put 'put ''dC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxNdD1Vb1tnZV0u''@;'; put 'put ''X2NvbmZpZztlbHNlIGlmKG51bGwhPWplLnBhcmVudExvY2FsZSlpZihudWxsIT1Vb1tqZS5wYXJlbnRMb2NhbGVdKU10PVVvW2plLnBhcmVudExvY2FsZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShsdD1IcihqZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4gVm9bamUucGFyZW50TG9jYWxlXXx8''@;'; put 'put ''KFZvW2plLnBhcmVudExvY2FsZV09W10pLFZvW2plLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTpnZSxjb25maWc6amV9KSxudWxsO010PWx0Ll9jb25maWd9cmV0dXJuIFVvW2dlXT1uZXcgcCh2KE10LGplKSksVm9bZ2VdJiZWb1tnZV0uZm9yRWFjaChmdW5jdGlvbihXdCl7Q3QoV3QubmFt''@;'; put 'put ''ZSxXdC5jb25maWcpfSksQm8oZ2UpLFVvW2dlXX1yZXR1cm4gZGVsZXRlIFVvW2dlXSxudWxsfWZ1bmN0aW9uIEp0KGdlKXt2YXIgamU7aWYoZ2UmJmdlLl9sb2NhbGUmJmdlLl9sb2NhbGUuX2FiYnImJihnZT1nZS5fbG9jYWxlLl9hYmJyKSwhZ2UpcmV0dXJuIEhsO2lmKCFJKGdlKSl7aWYo''@;'; put 'put ''amU9SHIoZ2UpKXJldHVybiBqZTtnZT1bZ2VdfXJldHVybiBmdW5jdGlvbiBHcyhnZSl7Zm9yKHZhciBsdCxNdCxXdCwkbixqZT0wO2plPGdlLmxlbmd0aDspe2ZvcihsdD0oJG49YTEoZ2VbamVdKS5zcGxpdCgiLSIpKS5sZW5ndGgsTXQ9KE10PWExKGdlW2plKzFdKSk/TXQuc3BsaXQoIi0i''@;'; put 'put ''KTpudWxsO2x0PjA7KXtpZihXdD1Icigkbi5zbGljZSgwLGx0KS5qb2luKCItIikpKXJldHVybiBXdDtpZihNdCYmTXQubGVuZ3RoPj1sdCYmQXUoJG4sTXQpPj1sdC0xKWJyZWFrO2x0LS19amUrK31yZXR1cm4gSGx9KGdlKX1mdW5jdGlvbiBBbihnZSl7dmFyIGplLGx0PWdlLl9hO3JldHVy''@;'; put 'put ''biBsdCYmLTI9PT1IKGdlKS5vdmVyZmxvdyYmKGplPWx0W3NpXTwwfHxsdFtzaV0+MTE/c2k6bHRbbm5dPDF8fGx0W25uXT5WYShsdFtIdF0sbHRbc2ldKT9ubjpsdFtsbl08MHx8bHRbbG5dPjI0fHwyND09PWx0W2xuXSYmKDAhPT1sdFtraV18fDAhPT1sdFthbl18fDAhPT1sdFtHdF0pP2xu''@;'; put 'put ''Omx0W2tpXTwwfHxsdFtraV0+NTk/a2k6bHRbYW5dPDB8fGx0W2FuXT41OT9hbjpsdFtHdF08MHx8bHRbR3RdPjk5OT9HdDotMSxIKGdlKS5fb3ZlcmZsb3dEYXlPZlllYXImJihqZTxIdHx8amU+bm4pJiYoamU9bm4pLEgoZ2UpLl9vdmVyZmxvd1dlZWtzJiYtMT09PWplJiYoamU9ZWEpLEgo''@;'; put 'put ''Z2UpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09amUmJihqZT1taSksSChnZSkub3ZlcmZsb3c9amUpLGdlfXZhciBLbj0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQo''@;'; put 'put ''PzpbLixdXGQrKT8pPyk/KShbKy1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sc3I9L15ccyooKD86WystXVxkezZ9fFxkezR9KSg/OlxkXGRcZFxkfFdcZFxkXGR8V1xkXGR8XGRcZFxkfFxkXGR8KSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbKy1d''@;'; put 'put ''XGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sdW49L1p8WystXVxkXGQoPzo6P1xkXGQpPy8seWk9W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxkXGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xkezR9LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxb''@;'; put 'put ''IkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxbIllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10sWyJZWVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxb''@;'; put 'put ''IkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXSxbIllZWVlNTSIsL1xkezZ9LywhMV0sWyJZWVlZIiwvXGR7NH0vLCExXV0sem49W1siSEg6bW06c3MuU1NTUyIsL1xkXGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6''@;'; put 'put ''XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxkXGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIsL1xkXGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEht''@;'; put 'put ''bSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sRGk9L15cLz9EYXRlXCgoLT9cZCspL2kscG89L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIs''@;'; put 'put ''NH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC8sS289e1VUOjAsR01UOjAsRURUOi0yNDAsRVNUOi0zMDAsQ0RUOi0zMDAsQ1NUOi0zNjAsTURUOi0zNjAsTVNUOi00MjAsUERUOi00MjAsUFNUOi00ODB9''@;'; put 'put ''O2Z1bmN0aW9uIFBhKGdlKXt2YXIgamUsbHQsJG4sZWksTGEseG8sTXQ9Z2UuX2ksV3Q9S24uZXhlYyhNdCl8fHNyLmV4ZWMoTXQpLGRzPXlpLmxlbmd0aCxDMD16bi5sZW5ndGg7aWYoV3Qpe2ZvcihIKGdlKS5pc289ITAsamU9MCxsdD1kcztqZTxsdDtqZSsrKWlmKHlpW2plXVsxXS5leGVj''@;'; put 'put ''KFd0WzFdKSl7ZWk9eWlbamVdWzBdLCRuPSExIT09eWlbamVdWzJdO2JyZWFrfWlmKG51bGw9PWVpKXJldHVybiB2b2lkKGdlLl9pc1ZhbGlkPSExKTtpZihXdFszXSl7Zm9yKGplPTAsbHQ9QzA7amU8bHQ7amUrKylpZih6bltqZV1bMV0uZXhlYyhXdFszXSkpe0xhPShXdFsyXXx8IiAiKSt6''@;'; put 'put ''bltqZV1bMF07YnJlYWt9aWYobnVsbD09TGEpcmV0dXJuIHZvaWQoZ2UuX2lzVmFsaWQ9ITEpfWlmKCEkbiYmbnVsbCE9TGEpcmV0dXJuIHZvaWQoZ2UuX2lzVmFsaWQ9ITEpO2lmKFd0WzRdKXtpZighdW4uZXhlYyhXdFs0XSkpcmV0dXJuIHZvaWQoZ2UuX2lzVmFsaWQ9ITEpO3hvPSJaIn1n''@;'; put 'put ''ZS5fZj1laSsoTGF8fCIiKSsoeG98fCIiKSxvMShnZSl9ZWxzZSBnZS5faXNWYWxpZD0hMX1mdW5jdGlvbiBCYShnZSl7dmFyIGplPXBhcnNlSW50KGdlLDEwKTtyZXR1cm4gamU8PTQ5PzJlMytqZTpqZTw9OTk5PzE5MDAramU6amV9ZnVuY3Rpb24gd3IoZ2Upe3ZhciBsdCxqZT1wby5leGVj''@;'; put 'put ''KGZ1bmN0aW9uIGdhKGdlKXtyZXR1cm4gZ2UucmVwbGFjZSgvXChbXigpXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xzXHMqJC8sIiIpfShnZS5faSkpO2lmKGplKXtpZihsdD1mdW5jdGlvbiBXbyhnZSxq''@;'; put 'put ''ZSxsdCxNdCxXdCwkbil7dmFyIGVpPVtCYShnZSksZmEuaW5kZXhPZihqZSkscGFyc2VJbnQobHQsMTApLHBhcnNlSW50KE10LDEwKSxwYXJzZUludChXdCwxMCldO3JldHVybiAkbiYmZWkucHVzaChwYXJzZUludCgkbiwxMCkpLGVpfShqZVs0XSxqZVszXSxqZVsyXSxqZVs1XSxqZVs2XSxq''@;'; put 'put ''ZVs3XSksIWZ1bmN0aW9uIHhhKGdlLGplLGx0KXtyZXR1cm4hZ2V8fFZjLmluZGV4T2YoZ2UpPT09bmV3IERhdGUoamVbMF0samVbMV0samVbMl0pLmdldERheSgpfHwoSChsdCkud2Vla2RheU1pc21hdGNoPSEwLGx0Ll9pc1ZhbGlkPSExLCExKX0oamVbMV0sbHQsZ2UpKXJldHVybjtnZS5f''@;'; put 'put ''YT1sdCxnZS5fdHptPWZ1bmN0aW9uIEtyKGdlLGplLGx0KXtpZihnZSlyZXR1cm4gS29bZ2VdO2lmKGplKXJldHVybiAwO3ZhciBNdD1wYXJzZUludChsdCwxMCksV3Q9TXQlMTAwO3JldHVybihNdC1XdCkvMTAwKjYwK1d0fShqZVs4XSxqZVs5XSxqZVsxMF0pLGdlLl9kPUpyLmFwcGx5KG51''@;'; put 'put ''bGwsZ2UuX2EpLGdlLl9kLnNldFVUQ01pbnV0ZXMoZ2UuX2QuZ2V0VVRDTWludXRlcygpLWdlLl90em0pLEgoZ2UpLnJmYzI4MjI9ITB9ZWxzZSBnZS5faXNWYWxpZD0hMX1mdW5jdGlvbiBTYShnZSxqZSxsdCl7cmV0dXJuIGdlPz9qZT8/bHR9ZnVuY3Rpb24gbGMoZ2Upe3ZhciBqZSxsdCxX''@;'; put 'put ''dCwkbixlaSxNdD1bXTtpZighZ2UuX2Qpe2ZvcihXdD1mdW5jdGlvbiBtZChnZSl7dmFyIGplPW5ldyBEYXRlKGgubm93KCkpO3JldHVybiBnZS5fdXNlVVRDP1tqZS5nZXRVVENGdWxsWWVhcigpLGplLmdldFVUQ01vbnRoKCksamUuZ2V0VVRDRGF0ZSgpXTpbamUuZ2V0RnVsbFllYXIoKSxq''@;'; put 'put ''ZS5nZXRNb250aCgpLGplLmdldERhdGUoKV19KGdlKSxnZS5fdyYmbnVsbD09Z2UuX2Fbbm5dJiZudWxsPT1nZS5fYVtzaV0mJmZ1bmN0aW9uIGVoKGdlKXt2YXIgamUsbHQsTXQsV3QsJG4sZWksTGEseG8sZHM7bnVsbCE9KGplPWdlLl93KS5HR3x8bnVsbCE9amUuV3x8bnVsbCE9amUuRT8o''@;'; put 'put ''JG49MSxlaT00LGx0PVNhKGplLkdHLGdlLl9hW0h0XSxFdShFcygpLDEsNCkueWVhciksTXQ9U2EoamUuVywxKSwoKFd0PVNhKGplLkUsMSkpPDF8fFd0PjcpJiYoeG89ITApKTooJG49Z2UuX2xvY2FsZS5fd2Vlay5kb3csZWk9Z2UuX2xvY2FsZS5fd2Vlay5kb3ksZHM9RXUoRXMoKSwkbixl''@;'; put 'put ''aSksbHQ9U2EoamUuZ2csZ2UuX2FbSHRdLGRzLnllYXIpLE10PVNhKGplLncsZHMud2VlayksbnVsbCE9amUuZD8oKFd0PWplLmQpPDB8fFd0PjYpJiYoeG89ITApOm51bGwhPWplLmU/KFd0PWplLmUrJG4sKGplLmU8MHx8amUuZT42KSYmKHhvPSEwKSk6V3Q9JG4pLE10PDF8fE10PnpyKGx0''@;'; put 'put ''LCRuLGVpKT9IKGdlKS5fb3ZlcmZsb3dXZWVrcz0hMDpudWxsIT14bz9IKGdlKS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihMYT0kbyhsdCxNdCxXdCwkbixlaSksZ2UuX2FbSHRdPUxhLnllYXIsZ2UuX2RheU9mWWVhcj1MYS5kYXlPZlllYXIpfShnZSksbnVsbCE9Z2UuX2RheU9mWWVhciYmKGVp''@;'; put 'put ''PVNhKGdlLl9hW0h0XSxXdFtIdF0pLChnZS5fZGF5T2ZZZWFyPmZyKGVpKXx8MD09PWdlLl9kYXlPZlllYXIpJiYoSChnZSkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxsdD1KcihlaSwwLGdlLl9kYXlPZlllYXIpLGdlLl9hW3NpXT1sdC5nZXRVVENNb250aCgpLGdlLl9hW25uXT1sdC5nZXRV''@;'; put 'put ''VENEYXRlKCkpLGplPTA7amU8MyYmbnVsbD09Z2UuX2FbamVdOysramUpZ2UuX2FbamVdPU10W2plXT1XdFtqZV07Zm9yKDtqZTw3O2plKyspZ2UuX2FbamVdPU10W2plXT1udWxsPT1nZS5fYVtqZV0/Mj09PWplPzE6MDpnZS5fYVtqZV07MjQ9PT1nZS5fYVtsbl0mJjA9PT1nZS5fYVtraV0m''@;'; put 'put ''JjA9PT1nZS5fYVthbl0mJjA9PT1nZS5fYVtHdF0mJihnZS5fbmV4dERheT0hMCxnZS5fYVtsbl09MCksZ2UuX2Q9KGdlLl91c2VVVEM/SnI6T3QpLmFwcGx5KG51bGwsTXQpLCRuPWdlLl91c2VVVEM/Z2UuX2QuZ2V0VVRDRGF5KCk6Z2UuX2QuZ2V0RGF5KCksbnVsbCE9Z2UuX3R6bSYmZ2Uu''@;'; put 'put ''X2Quc2V0VVRDTWludXRlcyhnZS5fZC5nZXRVVENNaW51dGVzKCktZ2UuX3R6bSksZ2UuX25leHREYXkmJihnZS5fYVtsbl09MjQpLGdlLl93JiZ0eXBlb2YgZ2UuX3cuZDwidSImJmdlLl93LmQhPT0kbiYmKEgoZ2UpLndlZWtkYXlNaXNtYXRjaD0hMCl9fWZ1bmN0aW9uIG8xKGdlKXtpZihn''@;'; put 'put ''ZS5fZiE9PWguSVNPXzg2MDEpaWYoZ2UuX2YhPT1oLlJGQ18yODIyKXtnZS5fYT1bXSxIKGdlKS5lbXB0eT0hMDt2YXIgbHQsTXQsV3QsJG4sZWksZHMsQzAsamU9IiIrZ2UuX2ksTGE9amUubGVuZ3RoLHhvPTA7Zm9yKEMwPShXdD1xZShnZS5fZixnZS5fbG9jYWxlKS5tYXRjaChsKXx8W10p''@;'; put 'put ''Lmxlbmd0aCxsdD0wO2x0PEMwO2x0KyspKE10PShqZS5tYXRjaChRZSgkbj1XdFtsdF0sZ2UpKXx8W10pWzBdKSYmKChlaT1qZS5zdWJzdHIoMCxqZS5pbmRleE9mKE10KSkpLmxlbmd0aD4wJiZIKGdlKS51bnVzZWRJbnB1dC5wdXNoKGVpKSxqZT1qZS5zbGljZShqZS5pbmRleE9mKE10KStN''@;'; put 'put ''dC5sZW5ndGgpLHhvKz1NdC5sZW5ndGgpLEdbJG5dPyhNdD9IKGdlKS5lbXB0eT0hMTpIKGdlKS51bnVzZWRUb2tlbnMucHVzaCgkbiksd24oJG4sTXQsZ2UpKTpnZS5fc3RyaWN0JiYhTXQmJkgoZ2UpLnVudXNlZFRva2Vucy5wdXNoKCRuKTtIKGdlKS5jaGFyc0xlZnRPdmVyPUxhLXhvLGpl''@;'; put 'put ''Lmxlbmd0aD4wJiZIKGdlKS51bnVzZWRJbnB1dC5wdXNoKGplKSxnZS5fYVtsbl08PTEyJiYhMD09PUgoZ2UpLmJpZ0hvdXImJmdlLl9hW2xuXT4wJiYoSChnZSkuYmlnSG91cj12b2lkIDApLEgoZ2UpLnBhcnNlZERhdGVQYXJ0cz1nZS5fYS5zbGljZSgwKSxIKGdlKS5tZXJpZGllbT1nZS5f''@;'; put 'put ''bWVyaWRpZW0sZ2UuX2FbbG5dPWZ1bmN0aW9uIFEyKGdlLGplLGx0KXt2YXIgTXQ7cmV0dXJuIG51bGw9PWx0P2plOm51bGwhPWdlLm1lcmlkaWVtSG91cj9nZS5tZXJpZGllbUhvdXIoamUsbHQpOihudWxsIT1nZS5pc1BNJiYoKE10PWdlLmlzUE0obHQpKSYmamU8MTImJihqZSs9MTIpLCFN''@;'; put 'put ''dCYmMTI9PT1qZSYmKGplPTApKSxqZSl9KGdlLl9sb2NhbGUsZ2UuX2FbbG5dLGdlLl9tZXJpZGllbSksbnVsbCE9PShkcz1IKGdlKS5lcmEpJiYoZ2UuX2FbSHRdPWdlLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGRzLGdlLl9hW0h0XSkpLGxjKGdlKSxBbihnZSl9ZWxzZSB3cihnZSk7ZWxz''@;'; put 'put ''ZSBQYShnZSl9ZnVuY3Rpb24gbm0oZ2Upe3ZhciBqZT1nZS5faSxsdD1nZS5fZjtyZXR1cm4gZ2UuX2xvY2FsZT1nZS5fbG9jYWxlfHxKdChnZS5fbCksbnVsbD09PWplfHx2b2lkIDA9PT1sdCYmIiI9PT1qZT9VKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiBqZSYmKGdlLl9p''@;'; put 'put ''PWplPWdlLl9sb2NhbGUucHJlcGFyc2UoamUpKSxoZShqZSk/bmV3IHNlKEFuKGplKSk6KEQoamUpP2dlLl9kPWplOkkobHQpP2Z1bmN0aW9uIFp1KGdlKXt2YXIgamUsbHQsTXQsV3QsJG4sZWksTGE9ITEseG89Z2UuX2YubGVuZ3RoO2lmKDA9PT14bylyZXR1cm4gSChnZSkuaW52YWxpZEZv''@;'; put 'put ''cm1hdD0hMCx2b2lkKGdlLl9kPW5ldyBEYXRlKE5hTikpO2ZvcihXdD0wO1d0PHhvO1d0KyspJG49MCxlaT0hMSxqZT1uZSh7fSxnZSksbnVsbCE9Z2UuX3VzZVVUQyYmKGplLl91c2VVVEM9Z2UuX3VzZVVUQyksamUuX2Y9Z2UuX2ZbV3RdLG8xKGplKSxaKGplKSYmKGVpPSEwKSwkbis9SChq''@;'; put 'put ''ZSkuY2hhcnNMZWZ0T3Zlciwkbis9MTAqSChqZSkudW51c2VkVG9rZW5zLmxlbmd0aCxIKGplKS5zY29yZT0kbixMYT8kbjxNdCYmKE10PSRuLGx0PWplKToobnVsbD09TXR8fCRuPE10fHxlaSkmJihNdD0kbixsdD1qZSxlaSYmKExhPSEwKSk7QihnZSxsdHx8amUpfShnZSk6bHQ/bzEoZ2Up''@;'; put 'put ''OmZ1bmN0aW9uIEgwKGdlKXt2YXIgamU9Z2UuX2k7TShqZSk/Z2UuX2Q9bmV3IERhdGUoaC5ub3coKSk6RChqZSk/Z2UuX2Q9bmV3IERhdGUoamUudmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mIGplP2Z1bmN0aW9uIEppKGdlKXt2YXIgamU9RGkuZXhlYyhnZS5faSk7bnVsbD09PWplPyhQ''@;'; put 'put ''YShnZSksITE9PT1nZS5faXNWYWxpZCYmKGRlbGV0ZSBnZS5faXNWYWxpZCx3cihnZSksITE9PT1nZS5faXNWYWxpZCYmKGRlbGV0ZSBnZS5faXNWYWxpZCxnZS5fc3RyaWN0P2dlLl9pc1ZhbGlkPSExOmguY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soZ2UpKSkpOmdlLl9kPW5ldyBEYXRlKCtq''@;'; put 'put ''ZVsxXSl9KGdlKTpJKGplKT8oZ2UuX2E9RShqZS5zbGljZSgwKSxmdW5jdGlvbihsdCl7cmV0dXJuIHBhcnNlSW50KGx0LDEwKX0pLGxjKGdlKSk6ZihqZSk/ZnVuY3Rpb24gY2MoZ2Upe2lmKCFnZS5fZCl7dmFyIGplPUtlKGdlLl9pKTtnZS5fYT1FKFtqZS55ZWFyLGplLm1vbnRoLHZvaWQg''@;'; put 'put ''MD09PWplLmRheT9qZS5kYXRlOmplLmRheSxqZS5ob3VyLGplLm1pbnV0ZSxqZS5zZWNvbmQsamUubWlsbGlzZWNvbmRdLGZ1bmN0aW9uKE10KXtyZXR1cm4gTXQmJnBhcnNlSW50KE10LDEwKX0pLGxjKGdlKX19KGdlKTpPKGplKT9nZS5fZD1uZXcgRGF0ZShqZSk6aC5jcmVhdGVGcm9tSW5w''@;'; put 'put ''dXRGYWxsYmFjayhnZSl9KGdlKSxaKGdlKXx8KGdlLl9kPW51bGwpLGdlKSl9ZnVuY3Rpb24gdmQoZ2UsamUsbHQsTXQsV3Qpe3ZhciAkbj17fTtyZXR1cm4oITA9PT1qZXx8ITE9PT1qZSkmJihNdD1qZSxqZT12b2lkIDApLCghMD09PWx0fHwhMT09PWx0KSYmKE10PWx0LGx0PXZvaWQgMCks''@;'; put 'put ''KGYoZ2UpJiZBKGdlKXx8SShnZSkmJjA9PT1nZS5sZW5ndGgpJiYoZ2U9dm9pZCAwKSwkbi5faXNBTW9tZW50T2JqZWN0PSEwLCRuLl91c2VVVEM9JG4uX2lzVVRDPVd0LCRuLl9sPWx0LCRuLl9pPWdlLCRuLl9mPWplLCRuLl9zdHJpY3Q9TXQsZnVuY3Rpb24ga2MoZ2Upe3ZhciBqZT1uZXcg''@;'; put 'put ''c2UoQW4obm0oZ2UpKSk7cmV0dXJuIGplLl9uZXh0RGF5JiYoamUuYWRkKDEsImQiKSxqZS5fbmV4dERheT12b2lkIDApLGplfSgkbil9ZnVuY3Rpb24gRXMoZ2UsamUsbHQsTXQpe3JldHVybiB2ZChnZSxqZSxsdCxNdCwhMSl9aC5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1tZSgidmFsdWUg''@;'; put 'put ''cHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4''@;'; put 'put ''MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIixmdW5jdGlvbihnZSl7Z2UuX2Q9bmV3IERhdGUoZ2UuX2krKGdlLl91c2VVVEM/IiBV''@;'; put 'put ''VEMiOiIiKSl9KSxoLklTT184NjAxPWZ1bmN0aW9uKCl7fSxoLlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgbWc9bWUoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1t''@;'; put 'put ''YXgvIixmdW5jdGlvbigpe3ZhciBnZT1Fcy5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZnZS5pc1ZhbGlkKCk/Z2U8dGhpcz90aGlzOmdlOlUoKX0pLHZnPW1lKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4g''@;'; put 'put ''aHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgZ2U9RXMuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmZ2UuaXNWYWxpZCgpP2dlPnRoaXM/dGhpczpnZTpVKCl9KTtmdW5jdGlvbiBCYyhnZSxq''@;'; put 'put ''ZSl7dmFyIGx0LE10O2lmKDE9PT1qZS5sZW5ndGgmJkkoamVbMF0pJiYoamU9amVbMF0pLCFqZS5sZW5ndGgpcmV0dXJuIEVzKCk7Zm9yKGx0PWplWzBdLE10PTE7TXQ8amUubGVuZ3RoOysrTXQpKCFqZVtNdF0uaXNWYWxpZCgpfHxqZVtNdF1bZ2VdKGx0KSkmJihsdD1qZVtNdF0pO3JldHVy''@;'; put 'put ''biBsdH12YXIgdG89WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCJdO2Z1bmN0aW9uICR1KGdlKXt2YXIgamU9S2UoZ2UpLGx0PWplLnllYXJ8fDAsTXQ9amUucXVhcnRlcnx8MCxXdD1qZS5tb250aHx8''@;'; put 'put ''MCwkbj1qZS53ZWVrfHxqZS5pc29XZWVrfHwwLGVpPWplLmRheXx8MCxMYT1qZS5ob3VyfHwwLHhvPWplLm1pbnV0ZXx8MCxkcz1qZS5zZWNvbmR8fDAsQzA9amUubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbiBxaChnZSl7dmFyIGplLE10LGx0PSExLFd0PXRvLmxlbmd0''@;'; put 'put ''aDtmb3IoamUgaW4gZ2UpaWYoVChnZSxqZSkmJigtMT09PVVpLmNhbGwodG8samUpfHxudWxsIT1nZVtqZV0mJmlzTmFOKGdlW2plXSkpKXJldHVybiExO2ZvcihNdD0wO010PFd0OysrTXQpaWYoZ2VbdG9bTXRdXSl7aWYobHQpcmV0dXJuITE7cGFyc2VGbG9hdChnZVt0b1tNdF1dKSE9PXl0''@;'; put 'put ''KGdlW3RvW010XV0pJiYobHQ9ITApfXJldHVybiEwfShqZSksdGhpcy5fbWlsbGlzZWNvbmRzPStDMCsxZTMqZHMrNmU0KnhvKzFlMypMYSo2MCo2MCx0aGlzLl9kYXlzPStlaSs3KiRuLHRoaXMuX21vbnRocz0rV3QrMypNdCsxMipsdCx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1KdCgp''@;'; put 'put ''LHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIEJzKGdlKXtyZXR1cm4gZ2UgaW5zdGFuY2VvZiAkdX1mdW5jdGlvbiBOMChnZSl7cmV0dXJuIGdlPDA/LTEqTWF0aC5yb3VuZCgtMSpnZSk6TWF0aC5yb3VuZChnZSl9ZnVuY3Rpb24geWQoZ2UsamUpe1EoZ2UsMCwwLGZ1bmN0aW9uKCl7dmFyIGx0''@;'; put 'put ''PXRoaXMudXRjT2Zmc2V0KCksTXQ9IisiO3JldHVybiBsdDwwJiYobHQ9LWx0LE10PSItIiksTXQreSh+fihsdC82MCksMikramUreSh+fmx0JTYwLDIpfSl9eWQoIloiLCI6IikseWQoIlpaIiwiIiksUm4oIloiLFhyKSxSbigiWloiLFhyKSxhdChbIloiLCJaWiJdLGZ1bmN0aW9uKGdlLGpl''@;'; put 'put ''LGx0KXtsdC5fdXNlVVRDPSEwLGx0Ll90em09amMoWHIsZ2UpfSk7dmFyIExwPS8oW1wrXC1dfFxkXGQpL2dpO2Z1bmN0aW9uIGpjKGdlLGplKXt2YXIgV3QsJG4sbHQ9KGplfHwiIikubWF0Y2goZ2UpO3JldHVybiBudWxsPT09bHQ/bnVsbDowPT09KCRuPTYwKihXdD0oKGx0W2x0Lmxlbmd0''@;'; put 'put ''aC0xXXx8W10pKyIiKS5tYXRjaChMcCl8fFsiLSIsMCwwXSlbMV0reXQoV3RbMl0pKT8wOiIrIj09PVd0WzBdPyRuOi0kbn1mdW5jdGlvbiB0aChnZSxqZSl7dmFyIGx0LE10O3JldHVybiBqZS5faXNVVEM/KGx0PWplLmNsb25lKCksTXQ9KGhlKGdlKXx8RChnZSk/Z2UudmFsdWVPZigpOkVz''@;'; put 'put ''KGdlKS52YWx1ZU9mKCkpLWx0LnZhbHVlT2YoKSxsdC5fZC5zZXRUaW1lKGx0Ll9kLnZhbHVlT2YoKStNdCksaC51cGRhdGVPZmZzZXQobHQsITEpLGx0KTpFcyhnZSkubG9jYWwoKX1mdW5jdGlvbiBuaChnZSl7cmV0dXJuLU1hdGgucm91bmQoZ2UuX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSl9''@;'; put 'put ''ZnVuY3Rpb24gT3IoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQyYmMD09PXRoaXMuX29mZnNldH1oLnVwZGF0ZU9mZnNldD1mdW5jdGlvbigpe307dmFyIGxfPS9eKC18XCspPyg/OihcZCopWy4gXSk/KFxkKyk6KFxkKykoPzo6KFxkKykoXC5cZCopPyk/JC8sSm49L14o''@;'; put 'put ''LXxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO2Z1''@;'; put 'put ''bmN0aW9uIG1sKGdlLGplKXt2YXIgV3QsJG4sZWksbHQ9Z2UsTXQ9bnVsbDtyZXR1cm4gQnMoZ2UpP2x0PXttczpnZS5fbWlsbGlzZWNvbmRzLGQ6Z2UuX2RheXMsTTpnZS5fbW9udGhzfTpPKGdlKXx8IWlzTmFOKCtnZSk/KGx0PXt9LGplP2x0W2plXT0rZ2U6bHQubWlsbGlzZWNvbmRzPStn''@;'; put 'put ''ZSk6KE10PWxfLmV4ZWMoZ2UpKT8oV3Q9Ii0iPT09TXRbMV0/LTE6MSxsdD17eTowLGQ6eXQoTXRbbm5dKSpXdCxoOnl0KE10W2xuXSkqV3QsbTp5dChNdFtraV0pKld0LHM6eXQoTXRbYW5dKSpXdCxtczp5dChOMCgxZTMqTXRbR3RdKSkqV3R9KTooTXQ9Sm4uZXhlYyhnZSkpP2x0PXt5Ok8x''@;'; put 'put ''KE10WzJdLFd0PSItIj09PU10WzFdPy0xOjEpLE06TzEoTXRbM10sV3QpLHc6TzEoTXRbNF0sV3QpLGQ6TzEoTXRbNV0sV3QpLGg6TzEoTXRbNl0sV3QpLG06TzEoTXRbN10sV3QpLHM6TzEoTXRbOF0sV3QpfTpudWxsPT1sdD9sdD17fToib2JqZWN0Ij09dHlwZW9mIGx0JiYoImZyb20iaW4g''@;'; put 'put ''bHR8fCJ0byJpbiBsdCkmJihlaT1mdW5jdGlvbiBybShnZSxqZSl7dmFyIGx0O3JldHVybiBnZS5pc1ZhbGlkKCkmJmplLmlzVmFsaWQoKT8oamU9dGgoamUsZ2UpLGdlLmlzQmVmb3JlKGplKT9sdD10ZihnZSxqZSk6KChsdD10ZihqZSxnZSkpLm1pbGxpc2Vjb25kcz0tbHQubWlsbGlzZWNv''@;'; put 'put ''bmRzLGx0Lm1vbnRocz0tbHQubW9udGhzKSxsdCk6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX0oRXMobHQuZnJvbSksRXMobHQudG8pKSwobHQ9e30pLm1zPWVpLm1pbGxpc2Vjb25kcyxsdC5NPWVpLm1vbnRocyksJG49bmV3ICR1KGx0KSxCcyhnZSkmJlQoZ2UsIl9sb2NhbGUiKSYmKCRu''@;'; put 'put ''Ll9sb2NhbGU9Z2UuX2xvY2FsZSksQnMoZ2UpJiZUKGdlLCJfaXNWYWxpZCIpJiYoJG4uX2lzVmFsaWQ9Z2UuX2lzVmFsaWQpLCRufWZ1bmN0aW9uIE8xKGdlLGplKXt2YXIgbHQ9Z2UmJnBhcnNlRmxvYXQoZ2UucmVwbGFjZSgiLCIsIi4iKSk7cmV0dXJuKGlzTmFOKGx0KT8wOmx0KSpqZX1m''@;'; put 'put ''dW5jdGlvbiB0ZihnZSxqZSl7dmFyIGx0PXt9O3JldHVybiBsdC5tb250aHM9amUubW9udGgoKS1nZS5tb250aCgpKzEyKihqZS55ZWFyKCktZ2UueWVhcigpKSxnZS5jbG9uZSgpLmFkZChsdC5tb250aHMsIk0iKS5pc0FmdGVyKGplKSYmLS1sdC5tb250aHMsbHQubWlsbGlzZWNvbmRzPStq''@;'; put 'put ''ZS0rZ2UuY2xvbmUoKS5hZGQobHQubW9udGhzLCJNIiksbHR9ZnVuY3Rpb24gY18oZ2UsamUpe3JldHVybiBmdW5jdGlvbihsdCxNdCl7dmFyICRuO3JldHVybiBudWxsIT09TXQmJiFpc05hTigrTXQpJiYoUihqZSwibW9tZW50KCkuIitqZSsiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNh''@;'; put 'put ''dGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLiIramUrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSwkbj1sdCxsdD1NdCxNdD0kbiksYmcodGhpcyxtbChsdCxNdCks''@;'; put 'put ''Z2UpLHRoaXN9fWZ1bmN0aW9uIGJnKGdlLGplLGx0LE10KXt2YXIgV3Q9amUuX21pbGxpc2Vjb25kcywkbj1OMChqZS5fZGF5cyksZWk9TjAoamUuX21vbnRocyk7Z2UuaXNWYWxpZCgpJiYoTXQ9TXQ/PyEwLGVpJiZJMShnZSxxcihnZSwiTW9udGgiKStlaSpsdCksJG4mJnVhKGdlLCJEYXRl''@;'; put 'put ''IixxcihnZSwiRGF0ZSIpKyRuKmx0KSxXdCYmZ2UuX2Quc2V0VGltZShnZS5fZC52YWx1ZU9mKCkrV3QqbHQpLE10JiZoLnVwZGF0ZU9mZnNldChnZSwkbnx8ZWkpKX1tbC5mbj0kdS5wcm90b3R5cGUsbWwuaW52YWxpZD1mdW5jdGlvbiBHdSgpe3JldHVybiBtbChOYU4pfTt2YXIgdV89Y18o''@;'; put 'put ''MSwiYWRkIiksaDM9Y18oLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gUTgoZ2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgZ2V8fGdlIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIHRjKGdlKXtyZXR1cm4gaGUoZ2UpfHxEKGdlKXx8UTgoZ2UpfHxPKGdlKXx8ZnVuY3Rpb24gZjMoZ2Upe3Zh''@;'; put 'put ''ciBqZT1JKGdlKSxsdD0hMTtyZXR1cm4gamUmJihsdD0wPT09Z2UuZmlsdGVyKGZ1bmN0aW9uKE10KXtyZXR1cm4hTyhNdCkmJlE4KGdlKX0pLmxlbmd0aCksamUmJmx0fShnZSl8fGZ1bmN0aW9uIGRfKGdlKXt2YXIgV3QsamU9ZihnZSkmJiFBKGdlKSxsdD0hMSxNdD1bInllYXJzIiwieWVh''@;'; put 'put ''ciIsInkiLCJtb250aHMiLCJtb250aCIsIk0iLCJkYXlzIiwiZGF5IiwiZCIsImRhdGVzIiwiZGF0ZSIsIkQiLCJob3VycyIsImhvdXIiLCJoIiwibWludXRlcyIsIm1pbnV0ZSIsIm0iLCJzZWNvbmRzIiwic2Vjb25kIiwicyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vjb25kIiwibXMiXSxl''@;'; put 'put ''aT1NdC5sZW5ndGg7Zm9yKFd0PTA7V3Q8ZWk7V3QrPTEpbHQ9bHR8fFQoZ2UsTXRbV3RdKTtyZXR1cm4gamUmJmx0fShnZSl8fG51bGw9PWdlfWZ1bmN0aW9uIFBwKGdlLGplKXtpZihnZS5kYXRlKCk8amUuZGF0ZSgpKXJldHVybi1QcChqZSxnZSk7dmFyIGx0PTEyKihqZS55ZWFyKCktZ2Uu''@;'; put 'put ''eWVhcigpKSsoamUubW9udGgoKS1nZS5tb250aCgpKSxNdD1nZS5jbG9uZSgpLmFkZChsdCwibW9udGhzIik7cmV0dXJuLShsdCsoamUtTXQ8MD8oamUtTXQpLyhNdC1nZS5jbG9uZSgpLmFkZChsdC0xLCJtb250aHMiKSk6KGplLU10KS8oZ2UuY2xvbmUoKS5hZGQobHQrMSwibW9udGhzIikt''@;'; put 'put ''TXQpKSl8fDB9ZnVuY3Rpb24geWEoZ2Upe3ZhciBqZTtyZXR1cm4gdm9pZCAwPT09Z2U/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0oamU9SnQoZ2UpKSYmKHRoaXMuX2xvY2FsZT1qZSksdGhpcyl9aC5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIsaC5kZWZhdWx0Rm9y''@;'; put 'put ''bWF0VXRjPSJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgYXU9bWUoIm1vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgp''@;'; put 'put ''IHRvIGNoYW5nZSBsYW5ndWFnZXMuIixmdW5jdGlvbihnZSl7cmV0dXJuIHZvaWQgMD09PWdlP3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKGdlKX0pO2Z1bmN0aW9uIHUxKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgcmg9NmU0LGNtPTYwKnJoLCRzPTM1MDYzMjgqY207ZnVuY3Rp''@;'; put 'put ''b24gcDMoZ2UsamUpe3JldHVybihnZSVqZStqZSklamV9ZnVuY3Rpb24gQ2coZ2UsamUsbHQpe3JldHVybiBnZTwxMDAmJmdlPj0wP25ldyBEYXRlKGdlKzQwMCxqZSxsdCktJHM6bmV3IERhdGUoZ2UsamUsbHQpLnZhbHVlT2YoKX1mdW5jdGlvbiBpTShnZSxqZSxsdCl7cmV0dXJuIGdlPDEw''@;'; put 'put ''MCYmZ2U+PTA/RGF0ZS5VVEMoZ2UrNDAwLGplLGx0KS0kczpEYXRlLlVUQyhnZSxqZSxsdCl9ZnVuY3Rpb24gYzcoZ2UsamUpe3JldHVybiBqZS5lcmFzQWJiclJlZ2V4KGdlKX1mdW5jdGlvbiByZigpe3ZhciBXdCwkbixlaSxMYSx4byxnZT1bXSxqZT1bXSxsdD1bXSxNdD1bXSxkcz10aGlz''@;'; put 'put ''LmVyYXMoKTtmb3IoV3Q9MCwkbj1kcy5sZW5ndGg7V3Q8JG47KytXdCllaT1Rcihkc1tXdF0ubmFtZSksTGE9UXIoZHNbV3RdLmFiYnIpLHhvPVFyKGRzW1d0XS5uYXJyb3cpLGplLnB1c2goZWkpLGdlLnB1c2goTGEpLGx0LnB1c2goeG8pLE10LnB1c2goZWkpLE10LnB1c2goTGEpLE10LnB1''@;'; put 'put ''c2goeG8pO3RoaXMuX2VyYXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrTXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNOYW1lUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2plLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzQWJiclJlZ2V4PW5ldyBSZWdFeHAoIl4oIitnZS5qb2luKCJ8''@;'; put 'put ''IikrIikiLCJpIiksdGhpcy5fZXJhc05hcnJvd1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitsdC5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gaWgoZ2UsamUpe1EoMCxbZ2UsZ2UubGVuZ3RoXSwwLGplKX1mdW5jdGlvbiBfXyhnZSxqZSxsdCxNdCxXdCl7dmFyICRuO3JldHVybiBudWxsPT1n''@;'; put 'put ''ZT9FdSh0aGlzLE10LFd0KS55ZWFyOihqZT4oJG49enIoZ2UsTXQsV3QpKSYmKGplPSRuKSxjTS5jYWxsKHRoaXMsZ2UsamUsbHQsTXQsV3QpKX1mdW5jdGlvbiBjTShnZSxqZSxsdCxNdCxXdCl7dmFyICRuPSRvKGdlLGplLGx0LE10LFd0KSxlaT1Kcigkbi55ZWFyLDAsJG4uZGF5T2ZZZWFy''@;'; put 'put ''KTtyZXR1cm4gdGhpcy55ZWFyKGVpLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoZWkuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKGVpLmdldFVUQ0RhdGUoKSksdGhpc31RKCJOIiwwLDAsImVyYUFiYnIiKSxRKCJOTiIsMCwwLCJlcmFBYmJyIiksUSgiTk5OIiwwLDAsImVyYUFiYnIi''@;'; put 'put ''KSxRKCJOTk5OIiwwLDAsImVyYU5hbWUiKSxRKCJOTk5OTiIsMCwwLCJlcmFOYXJyb3ciKSxRKCJ5IixbInkiLDFdLCJ5byIsImVyYVllYXIiKSxRKCJ5IixbInl5IiwyXSwwLCJlcmFZZWFyIiksUSgieSIsWyJ5eXkiLDNdLDAsImVyYVllYXIiKSxRKCJ5IixbInl5eXkiLDRdLDAsImVyYVll''@;'; put 'put ''YXIiKSxSbigiTiIsYzcpLFJuKCJOTiIsYzcpLFJuKCJOTk4iLGM3KSxSbigiTk5OTiIsZnVuY3Rpb24gdTcoZ2UsamUpe3JldHVybiBqZS5lcmFzTmFtZVJlZ2V4KGdlKX0pLFJuKCJOTk5OTiIsZnVuY3Rpb24gUDEoZ2UsamUpe3JldHVybiBqZS5lcmFzTmFycm93UmVnZXgoZ2UpfSksYXQo''@;'; put 'put ''WyJOIiwiTk4iLCJOTk4iLCJOTk5OIiwiTk5OTk4iXSxmdW5jdGlvbihnZSxqZSxsdCxNdCl7dmFyIFd0PWx0Ll9sb2NhbGUuZXJhc1BhcnNlKGdlLE10LGx0Ll9zdHJpY3QpO1d0P0gobHQpLmVyYT1XdDpIKGx0KS5pbnZhbGlkRXJhPWdlfSksUm4oInkiLHluKSxSbigieXkiLHluKSxSbigi''@;'; put 'put ''eXl5Iix5biksUm4oInl5eXkiLHluKSxSbigieW8iLGZ1bmN0aW9uIE1nKGdlLGplKXtyZXR1cm4gamUuX2VyYVllYXJPcmRpbmFsUmVnZXh8fHlufSksYXQoWyJ5IiwieXkiLCJ5eXkiLCJ5eXl5Il0sSHQpLGF0KFsieW8iXSxmdW5jdGlvbihnZSxqZSxsdCxNdCl7dmFyIFd0O2x0Ll9sb2Nh''@;'; put 'put ''bGUuX2VyYVllYXJPcmRpbmFsUmVnZXgmJihXdD1nZS5tYXRjaChsdC5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSksamVbSHRdPWx0Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZT9sdC5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoZ2UsV3QpOnBhcnNlSW50KGdlLDEwKX0p''@;'; put 'put ''LFEoMCxbImdnIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxRKDAsWyJHRyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSksaWgoImdnZ2ciLCJ3ZWVrWWVhciIpLGloKCJnZ2dnZyIsIndlZWtZZWFyIiksaWgoIkdH''@;'; put 'put ''R0ciLCJpc29XZWVrWWVhciIpLGloKCJHR0dHRyIsImlzb1dlZWtZZWFyIiksUm4oIkciLFh0KSxSbigiZyIsWHQpLFJuKCJHRyIsJGUsdnQpLFJuKCJnZyIsJGUsdnQpLFJuKCJHR0dHIix4dCx0dCksUm4oImdnZ2ciLHh0LHR0KSxSbigiR0dHR0ciLFR0LFVlKSxSbigiZ2dnZ2ciLFR0LFVl''@;'; put 'put ''KSxfdChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLGZ1bmN0aW9uKGdlLGplLGx0LE10KXtqZVtNdC5zdWJzdHIoMCwyKV09eXQoZ2UpfSksX3QoWyJnZyIsIkdHIl0sZnVuY3Rpb24oZ2UsamUsbHQsTXQpe2plW010XT1oLnBhcnNlVHdvRGlnaXRZZWFyKGdlKX0pLFEoIlEiLDAs''@;'; put 'put ''IlFvIiwicXVhcnRlciIpLFJuKCJRIixodCksYXQoIlEiLGZ1bmN0aW9uKGdlLGplKXtqZVtzaV09MyooeXQoZ2UpLTEpfSksUSgiRCIsWyJERCIsMl0sIkRvIiwiZGF0ZSIpLFJuKCJEIiwkZSxDciksUm4oIkREIiwkZSx2dCksUm4oIkRvIixmdW5jdGlvbihnZSxqZSl7cmV0dXJuIGdlP2pl''@;'; put 'put ''Ll9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxqZS5fb3JkaW5hbFBhcnNlOmplLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudH0pLGF0KFsiRCIsIkREIl0sbm4pLGF0KCJEbyIsZnVuY3Rpb24oZ2UsamUpe2plW25uXT15dChnZS5tYXRjaCgkZSlbMF0pfSk7dmFyIGQ3PVZpKCJEYXRl''@;'; put 'put ''IiwhMCk7USgiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksUm4oIkRERCIscm4pLFJuKCJEREREIixZdCksYXQoWyJEREQiLCJEREREIl0sZnVuY3Rpb24oZ2UsamUsbHQpe2x0Ll9kYXlPZlllYXI9eXQoZ2UpfSksUSgibSIsWyJtbSIsMl0sMCwibWludXRlIiksUm4oIm0i''@;'; put 'put ''LCRlLEx0KSxSbigibW0iLCRlLHZ0KSxhdChbIm0iLCJtbSJdLGtpKTt2YXIgaG09VmkoIk1pbnV0ZXMiLCExKTtRKCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxSbigicyIsJGUsTHQpLFJuKCJzcyIsJGUsdnQpLGF0KFsicyIsInNzIl0sYW4pO3ZhciBGMSxqcyxmbT1WaSgiU2Vjb25kcyIs''@;'; put 'put ''ITEpO2ZvcihRKCJTIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pLFEoMCxbIlNTIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pLFEoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxRKDAsWyJTU1NT''@;'; put 'put ''Iiw0XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQoKX0pLFEoMCxbIlNTU1NTIiw1XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxRKDAsWyJTU1NTU1MiLDZdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNv''@;'; put 'put ''bmQoKX0pLFEoMCxbIlNTU1NTU1MiLDddLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pLFEoMCxbIlNTU1NTU1NTIiw4XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSxRKDAsWyJTU1NTU1NTU1MiLDldLDAsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pLFJuKCJTIixybixodCksUm4oIlNTIixybix2dCksUm4oIlNTUyIscm4sWXQpLEYxPSJTU1NTIjtGMS5sZW5ndGg8PTk7RjErPSJTIilSbihGMSx5bik7ZnVuY3Rpb24gSGkoZ2UsamUpe2plW0d0XT15dCgxZTMqKCIwLiIrZ2UpKX1m''@;'; put 'put ''b3IoRjE9IlMiO0YxLmxlbmd0aDw9OTtGMSs9IlMiKWF0KEYxLEhpKTtqcz1WaSgiTWlsbGlzZWNvbmRzIiwhMSksUSgieiIsMCwwLCJ6b25lQWJiciIpLFEoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIEVpPXNlLnByb3RvdHlwZTtmdW5jdGlvbiB2MyhnZSl7cmV0dXJuIGdlfUVpLmFkZD11''@;'; put 'put ''XyxFaS5jYWxlbmRhcj1mdW5jdGlvbiBuZihnZSxqZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihhcmd1bWVudHNbMF0/dGMoYXJndW1lbnRzWzBdKT8oZ2U9YXJndW1lbnRzWzBdLGplPXZvaWQgMCk6ZnVuY3Rpb24gZTcoZ2Upe3ZhciBXdCxqZT1mKGdlKSYmIUEoZ2UpLGx0PSExLE10PVsi''@;'; put 'put ''c2FtZURheSIsIm5leHREYXkiLCJsYXN0RGF5IiwibmV4dFdlZWsiLCJsYXN0V2VlayIsInNhbWVFbHNlIl07Zm9yKFd0PTA7V3Q8TXQubGVuZ3RoO1d0Kz0xKWx0PWx0fHxUKGdlLE10W1d0XSk7cmV0dXJuIGplJiZsdH0oYXJndW1lbnRzWzBdKSYmKGplPWFyZ3VtZW50c1swXSxnZT12b2lk''@;'; put 'put ''IDApOihnZT12b2lkIDAsamU9dm9pZCAwKSk7dmFyIGx0PWdlfHxFcygpLE10PXRoKGx0LHRoaXMpLnN0YXJ0T2YoImRheSIpLFd0PWguY2FsZW5kYXJGb3JtYXQodGhpcyxNdCl8fCJzYW1lRWxzZSIsJG49amUmJihzKGplW1d0XSk/amVbV3RdLmNhbGwodGhpcyxsdCk6amVbV3RdKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5mb3JtYXQoJG58fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKFd0LHRoaXMsRXMobHQpKSl9LEVpLmNsb25lPWZ1bmN0aW9uIGltKCl7cmV0dXJuIG5ldyBzZSh0aGlzKX0sRWkuZGlmZj1mdW5jdGlvbiBWMChnZSxqZSxsdCl7dmFyIE10LFd0LCRuO2lmKCF0aGlzLmlzVmFs''@;'; put 'put ''aWQoKSlyZXR1cm4gTmFOO2lmKCEoTXQ9dGgoZ2UsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChXdD02ZTQqKE10LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLGplPXB0KGplKSl7Y2FzZSJ5ZWFyIjokbj1QcCh0aGlzLE10KS8xMjticmVhaztjYXNlIm1vbnRoIjok''@;'; put 'put ''bj1QcCh0aGlzLE10KTticmVhaztjYXNlInF1YXJ0ZXIiOiRuPVBwKHRoaXMsTXQpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOiRuPSh0aGlzLU10KS8xZTM7YnJlYWs7Y2FzZSJtaW51dGUiOiRuPSh0aGlzLU10KS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjokbj0odGhpcy1NdCkvMzZlNTticmVhaztj''@;'; put 'put ''YXNlImRheSI6JG49KHRoaXMtTXQtV3QpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6JG49KHRoaXMtTXQtV3QpLzYwNDhlNTticmVhaztkZWZhdWx0OiRuPXRoaXMtTXR9cmV0dXJuIGx0PyRuOk5lKCRuKX0sRWkuZW5kT2Y9ZnVuY3Rpb24gYU0oZ2Upe3ZhciBqZSxsdDtpZih2b2lkIDA9PT0o''@;'; put 'put ''Z2U9cHQoZ2UpKXx8Im1pbGxpc2Vjb25kIj09PWdlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKGx0PXRoaXMuX2lzVVRDP2lNOkNnLGdlKXtjYXNlInllYXIiOmplPWx0KHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6amU9bHQodGhpcy55ZWFy''@;'; put 'put ''KCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzKzMsMSktMTticmVhaztjYXNlIm1vbnRoIjpqZT1sdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6amU9bHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2Rh''@;'; put 'put ''eSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjpqZT1sdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKzcpLTE7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6amU9bHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0''@;'; put 'put ''ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjpqZT10aGlzLl9kLnZhbHVlT2YoKSxqZSs9Y20tcDMoamUrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpyaCksY20pLTE7YnJlYWs7Y2FzZSJtaW51dGUiOmplPXRoaXMuX2QudmFsdWVPZigpLGplKz1yaC1wMyhqZSxyaCktMTticmVh''@;'; put 'put ''aztjYXNlInNlY29uZCI6amU9dGhpcy5fZC52YWx1ZU9mKCksamUrPTFlMy1wMyhqZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShqZSksaC51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sRWkuZm9ybWF0PWZ1bmN0aW9uIG43KGdlKXtnZXx8KGdlPXRoaXMuaXNVdGMoKT9oLmRl''@;'; put 'put ''ZmF1bHRGb3JtYXRVdGM6aC5kZWZhdWx0Rm9ybWF0KTt2YXIgamU9WmUodGhpcyxnZSk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoamUpfSxFaS5mcm9tPWZ1bmN0aW9uIHI3KGdlLGplKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihoZShnZSkmJmdlLmlzVmFsaWQoKXx8''@;'; put 'put ''RXMoZ2UpLmlzVmFsaWQoKSk/bWwoe3RvOnRoaXMsZnJvbTpnZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghamUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LEVpLmZyb21Ob3c9ZnVuY3Rpb24gbG0oZ2Upe3JldHVybiB0aGlzLmZyb20oRXMoKSxnZSl9LEVp''@;'; put 'put ''LnRvPWZ1bmN0aW9uIGMxKGdlLGplKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihoZShnZSkmJmdlLmlzVmFsaWQoKXx8RXMoZ2UpLmlzVmFsaWQoKSk/bWwoe2Zyb206dGhpcyx0bzpnZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghamUpOnRoaXMubG9jYWxlRGF0YSgpLmlu''@;'; put 'put ''dmFsaWREYXRlKCl9LEVpLnRvTm93PWZ1bmN0aW9uIEpvKGdlKXtyZXR1cm4gdGhpcy50byhFcygpLGdlKX0sRWkuZ2V0PWZ1bmN0aW9uIEZpKGdlKXtyZXR1cm4gcyh0aGlzW2dlPXB0KGdlKV0pP3RoaXNbZ2VdKCk6dGhpc30sRWkuaW52YWxpZEF0PWZ1bmN0aW9uIEpoKCl7cmV0dXJuIEgo''@;'; put 'put ''dGhpcykub3ZlcmZsb3d9LEVpLmlzQWZ0ZXI9ZnVuY3Rpb24gd2coZ2UsamUpe3ZhciBsdD1oZShnZSk/Z2U6RXMoZ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbHQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oamU9cHQoamUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVl''@;'; put 'put ''T2YoKT5sdC52YWx1ZU9mKCk6bHQudmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKGplKS52YWx1ZU9mKCkpfSxFaS5pc0JlZm9yZT1mdW5jdGlvbiBhbShnZSxqZSl7dmFyIGx0PWhlKGdlKT9nZTpFcyhnZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFsdC5pc1ZhbGlkKCkpJiYo''@;'; put 'put ''Im1pbGxpc2Vjb25kIj09PShqZT1wdChqZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPGx0LnZhbHVlT2YoKTp0aGlzLmNsb25lKCkuZW5kT2YoamUpLnZhbHVlT2YoKTxsdC52YWx1ZU9mKCkpfSxFaS5pc0JldHdlZW49ZnVuY3Rpb24gb20oZ2UsamUsbHQsTXQpe3ZhciBXdD1o''@;'; put 'put ''ZShnZSk/Z2U6RXMoZ2UpLCRuPWhlKGplKT9qZTpFcyhqZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJld0LmlzVmFsaWQoKSYmJG4uaXNWYWxpZCgpKSYmKCIoIj09PShNdD1NdHx8IigpIilbMF0/dGhpcy5pc0FmdGVyKFd0LGx0KTohdGhpcy5pc0JlZm9yZShXdCxsdCkpJiYoIikiPT09''@;'; put 'put ''TXRbMV0/dGhpcy5pc0JlZm9yZSgkbixsdCk6IXRoaXMuaXNBZnRlcigkbixsdCkpfSxFaS5pc1NhbWU9ZnVuY3Rpb24gc20oZ2UsamUpe3ZhciBNdCxsdD1oZShnZSk/Z2U6RXMoZ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbHQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0o''@;'; put 'put ''amU9cHQoamUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PWx0LnZhbHVlT2YoKTooTXQ9bHQudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKGplKS52YWx1ZU9mKCk8PU10JiZNdDw9dGhpcy5jbG9uZSgpLmVuZE9mKGplKS52YWx1ZU9mKCkpKX0sRWkuaXNTYW1lT3JB''@;'; put 'put ''ZnRlcj1mdW5jdGlvbiB2bChnZSxqZSl7cmV0dXJuIHRoaXMuaXNTYW1lKGdlLGplKXx8dGhpcy5pc0FmdGVyKGdlLGplKX0sRWkuaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24gdDcoZ2UsamUpe3JldHVybiB0aGlzLmlzU2FtZShnZSxqZSl8fHRoaXMuaXNCZWZvcmUoZ2UsamUpfSxFaS5pc1Zh''@;'; put 'put ''bGlkPWZ1bmN0aW9uIEZwKCl7cmV0dXJuIFoodGhpcyl9LEVpLmxhbmc9YXUsRWkubG9jYWxlPXlhLEVpLmxvY2FsZURhdGE9dTEsRWkubWF4PXZnLEVpLm1pbj1tZyxFaS5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24gZl8oKXtyZXR1cm4gQih7fSxIKHRoaXMpKX0sRWkuc2V0PWZ1bmN0aW9uIFJh''@;'; put 'put ''KGdlLGplKXtpZigib2JqZWN0Ij09dHlwZW9mIGdlKXt2YXIgTXQsbHQ9ZnVuY3Rpb24gcXQoZ2Upe3ZhciBsdCxqZT1bXTtmb3IobHQgaW4gZ2UpVChnZSxsdCkmJmplLnB1c2goe3VuaXQ6bHQscHJpb3JpdHk6WWVbbHRdfSk7cmV0dXJuIGplLnNvcnQoZnVuY3Rpb24oTXQsV3Qpe3JldHVy''@;'; put 'put ''biBNdC5wcmlvcml0eS1XdC5wcmlvcml0eX0pLGplfShnZT1LZShnZSkpLFd0PWx0Lmxlbmd0aDtmb3IoTXQ9MDtNdDxXdDtNdCsrKXRoaXNbbHRbTXRdLnVuaXRdKGdlW2x0W010XS51bml0XSl9ZWxzZSBpZihzKHRoaXNbZ2U9cHQoZ2UpXSkpcmV0dXJuIHRoaXNbZ2VdKGplKTtyZXR1cm4g''@;'; put 'put ''dGhpc30sRWkuc3RhcnRPZj1mdW5jdGlvbiB1bShnZSl7dmFyIGplLGx0O2lmKHZvaWQgMD09PShnZT1wdChnZSkpfHwibWlsbGlzZWNvbmQiPT09Z2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztzd2l0Y2gobHQ9dGhpcy5faXNVVEM/aU06Q2csZ2Upe2Nhc2UieWVhciI6amU9bHQo''@;'; put 'put ''dGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmplPWx0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMywxKTticmVhaztjYXNlIm1vbnRoIjpqZT1sdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjpqZT1sdCh0aGlz''@;'; put 'put ''LnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6amU9bHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSk7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6amU9''@;'; put 'put ''bHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhvdXIiOmplPXRoaXMuX2QudmFsdWVPZigpLGplLT1wMyhqZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKnJoKSxjbSk7YnJlYWs7Y2FzZSJtaW51dGUiOmplPXRoaXMuX2QudmFsdWVP''@;'; put 'put ''ZigpLGplLT1wMyhqZSxyaCk7YnJlYWs7Y2FzZSJzZWNvbmQiOmplPXRoaXMuX2QudmFsdWVPZigpLGplLT1wMyhqZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoamUpLGgudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LEVpLnN1YnRyYWN0PWgzLEVpLnRvQXJyYXk9ZnVuY3Rpb24g''@;'; put 'put ''ZzMoKXt2YXIgZ2U9dGhpcztyZXR1cm5bZ2UueWVhcigpLGdlLm1vbnRoKCksZ2UuZGF0ZSgpLGdlLmhvdXIoKSxnZS5taW51dGUoKSxnZS5zZWNvbmQoKSxnZS5taWxsaXNlY29uZCgpXX0sRWkudG9PYmplY3Q9ZnVuY3Rpb24gaF8oKXt2YXIgZ2U9dGhpcztyZXR1cm57eWVhcnM6Z2UueWVh''@;'; put 'put ''cigpLG1vbnRoczpnZS5tb250aCgpLGRhdGU6Z2UuZGF0ZSgpLGhvdXJzOmdlLmhvdXJzKCksbWludXRlczpnZS5taW51dGVzKCksc2Vjb25kczpnZS5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOmdlLm1pbGxpc2Vjb25kcygpfX0sRWkudG9EYXRlPWZ1bmN0aW9uIGQxKCl7cmV0dXJuIG5ldyBE''@;'; put 'put ''YXRlKHRoaXMudmFsdWVPZigpKX0sRWkudG9JU09TdHJpbmc9ZnVuY3Rpb24ga3MoZ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgamU9ITAhPT1nZSxsdD1qZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbHQueWVhcigpPDB8fGx0LnllYXIoKT45OTk5P1pl''@;'; put 'put ''KGx0LGplPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6cyhEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/amU/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMu''@;'; put 'put ''dXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLFplKGx0LCJaIikpOlplKGx0LGplPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sRWkuaW5zcGVjdD1mdW5jdGlvbiBsMSgpe2lmKCF0aGlzLmlzVmFs''@;'; put 'put ''aWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgbHQsTXQsZ2U9Im1vbWVudCIsamU9IiI7cmV0dXJuIHRoaXMuaXNMb2NhbCgpfHwoZ2U9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIixqZT0iWiIpLGx0''@;'; put 'put ''PSJbIitnZSsnKCJdJyxNdD0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLHRoaXMuZm9ybWF0KGx0K010KyItTU0tRERbVF1ISDptbTpzcy5TU1MiK2plKydbIildJyl9LHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wuZm9yJiYoRWlbU3lt''@;'; put 'put ''Ym9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09ZnVuY3Rpb24oKXtyZXR1cm4iTW9tZW50PCIrdGhpcy5mb3JtYXQoKSsiPiJ9KSxFaS50b0pTT049ZnVuY3Rpb24gbzcoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LEVpLnRvU3Ry''@;'; put 'put ''aW5nPWZ1bmN0aW9uIEIwKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSxFaS51bml4PWZ1bmN0aW9uIGE3KCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sRWkudmFsdWVP''@;'; put 'put ''Zj1mdW5jdGlvbiBpNygpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LEVpLmNyZWF0aW9uRGF0YT1mdW5jdGlvbiBkbSgpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNV''@;'; put 'put ''VEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LEVpLmVyYU5hbWU9ZnVuY3Rpb24gb00oKXt2YXIgZ2UsamUsbHQsTXQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihnZT0wLGplPU10Lmxlbmd0aDtnZTxqZTsrK2dlKWlmKGx0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9m''@;'; put 'put ''KCksTXRbZ2VdLnNpbmNlPD1sdCYmbHQ8PU10W2dlXS51bnRpbHx8TXRbZ2VdLnVudGlsPD1sdCYmbHQ8PU10W2dlXS5zaW5jZSlyZXR1cm4gTXRbZ2VdLm5hbWU7cmV0dXJuIiJ9LEVpLmVyYU5hcnJvdz1mdW5jdGlvbiBzTSgpe3ZhciBnZSxqZSxsdCxNdD10aGlzLmxvY2FsZURhdGEoKS5l''@;'; put 'put ''cmFzKCk7Zm9yKGdlPTAsamU9TXQubGVuZ3RoO2dlPGplOysrZ2UpaWYobHQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxNdFtnZV0uc2luY2U8PWx0JiZsdDw9TXRbZ2VdLnVudGlsfHxNdFtnZV0udW50aWw8PWx0JiZsdDw9TXRbZ2VdLnNpbmNlKXJldHVybiBNdFtn''@;'; put 'put ''ZV0ubmFycm93O3JldHVybiIifSxFaS5lcmFBYmJyPWZ1bmN0aW9uIHBfKCl7dmFyIGdlLGplLGx0LE10PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoZ2U9MCxqZT1NdC5sZW5ndGg7Z2U8amU7KytnZSlpZihsdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLE10''@;'; put 'put ''W2dlXS5zaW5jZTw9bHQmJmx0PD1NdFtnZV0udW50aWx8fE10W2dlXS51bnRpbDw9bHQmJmx0PD1NdFtnZV0uc2luY2UpcmV0dXJuIE10W2dlXS5hYmJyO3JldHVybiIifSxFaS5lcmFZZWFyPWZ1bmN0aW9uIFNnKCl7dmFyIGdlLGplLGx0LE10LFd0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMo''@;'; put 'put ''KTtmb3IoZ2U9MCxqZT1XdC5sZW5ndGg7Z2U8amU7KytnZSlpZihsdD1XdFtnZV0uc2luY2U8PVd0W2dlXS51bnRpbD8xOi0xLE10PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksV3RbZ2VdLnNpbmNlPD1NdCYmTXQ8PVd0W2dlXS51bnRpbHx8V3RbZ2VdLnVudGlsPD1N''@;'; put 'put ''dCYmTXQ8PVd0W2dlXS5zaW5jZSlyZXR1cm4odGhpcy55ZWFyKCktaChXdFtnZV0uc2luY2UpLnllYXIoKSkqbHQrV3RbZ2VdLm9mZnNldDtyZXR1cm4gdGhpcy55ZWFyKCl9LEVpLnllYXI9JGksRWkuaXNMZWFwWWVhcj1mdW5jdGlvbiBLaSgpe3JldHVybiAkdCh0aGlzLnllYXIoKSl9LEVp''@;'; put 'put ''LndlZWtZZWFyPWZ1bmN0aW9uIGdfKGdlKXtyZXR1cm4gX18uY2FsbCh0aGlzLGdlLHRoaXMud2VlaygpLHRoaXMud2Vla2RheSgpK3RoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sRWku''@;'; put 'put ''aXNvV2Vla1llYXI9ZnVuY3Rpb24gbV8oZ2Upe3JldHVybiBfXy5jYWxsKHRoaXMsZ2UsdGhpcy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5KCksMSw0KX0sRWkucXVhcnRlcj1FaS5xdWFydGVycz1mdW5jdGlvbiBiXyhnZSl7cmV0dXJuIG51bGw9PWdlP01hdGguY2VpbCgodGhpcy5tb250''@;'; put 'put ''aCgpKzEpLzMpOnRoaXMubW9udGgoMyooZ2UtMSkrdGhpcy5tb250aCgpJTMpfSxFaS5tb250aD1pdSxFaS5kYXlzSW5Nb250aD1mdW5jdGlvbiB5MCgpe3JldHVybiBWYSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSxFaS53ZWVrPUVpLndlZWtzPWZ1bmN0aW9uIFJvKGdlKXt2YXIgamU9''@;'; put 'put ''dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09Z2U/amU6dGhpcy5hZGQoNyooZ2UtamUpLCJkIil9LEVpLmlzb1dlZWs9RWkuaXNvV2Vla3M9ZnVuY3Rpb24gb2MoZ2Upe3ZhciBqZT1FdSh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09Z2U/amU6dGhpcy5hZGQo''@;'; put 'put ''NyooZ2UtamUpLCJkIil9LEVpLndlZWtzSW5ZZWFyPWZ1bmN0aW9uIHlfKCl7dmFyIGdlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiB6cih0aGlzLnllYXIoKSxnZS5kb3csZ2UuZG95KX0sRWkud2Vla3NJbldlZWtZZWFyPWZ1bmN0aW9uIHhnKCl7dmFyIGdlPXRoaXMubG9jYWxl''@;'; put 'put ''RGF0YSgpLl93ZWVrO3JldHVybiB6cih0aGlzLndlZWtZZWFyKCksZ2UuZG93LGdlLmRveSl9LEVpLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uIGJjKCl7cmV0dXJuIHpyKHRoaXMueWVhcigpLDEsNCl9LEVpLmlzb1dlZWtzSW5JU09XZWVrWWVhcj1mdW5jdGlvbiB2Xygpe3JldHVybiB6cih0''@;'; put 'put ''aGlzLmlzb1dlZWtZZWFyKCksMSw0KX0sRWkuZGF0ZT1kNyxFaS5kYXk9RWkuZGF5cz1mdW5jdGlvbiBMMShnZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1nZT90aGlzOk5hTjt2YXIgamU9cXIodGhpcywiRGF5Iik7cmV0dXJuIG51bGwhPWdlPyhnZT1mdW5jdGlvbiBrcihn''@;'; put 'put ''ZSxqZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBnZT9nZTppc05hTihnZSk/Im51bWJlciI9PXR5cGVvZihnZT1qZS53ZWVrZGF5c1BhcnNlKGdlKSk/Z2U6bnVsbDpwYXJzZUludChnZSwxMCl9KGdlLHRoaXMubG9jYWxlRGF0YSgpKSx0aGlzLmFkZChnZS1qZSwiZCIpKTpqZX0sRWkud2Vl''@;'; put 'put ''a2RheT1mdW5jdGlvbiBZcyhnZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1nZT90aGlzOk5hTjt2YXIgamU9KHRoaXMuZGF5KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PWdlP2plOnRoaXMuYWRkKGdlLWplLCJkIil9LEVpLmlzb1dl''@;'; put 'put ''ZWtkYXk9ZnVuY3Rpb24gSjIoZ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Z2U/dGhpczpOYU47aWYobnVsbCE9Z2Upe3ZhciBqZT1mdW5jdGlvbiBwZyhnZSxqZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBnZT9qZS53ZWVrZGF5c1BhcnNlKGdlKSU3fHw3OmlzTmFOKGdl''@;'; put 'put ''KT9udWxsOmdlfShnZSx0aGlzLmxvY2FsZURhdGEoKSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9qZTpqZS03KX1yZXR1cm4gdGhpcy5kYXkoKXx8N30sRWkuZGF5T2ZZZWFyPWZ1bmN0aW9uIHVNKGdlKXt2YXIgamU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRh''@;'; put 'put ''eSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT1nZT9qZTp0aGlzLmFkZChnZS1qZSwiZCIpfSxFaS5ob3VyPUVpLmhvdXJzPUZvLEVpLm1pbnV0ZT1FaS5taW51dGVzPWhtLEVpLnNlY29uZD1FaS5zZWNvbmRzPWZtLEVpLm1pbGxpc2Vjb25k''@;'; put 'put ''PUVpLm1pbGxpc2Vjb25kcz1qcyxFaS51dGNPZmZzZXQ9ZnVuY3Rpb24gT3AoZ2UsamUsbHQpe3ZhciBXdCxNdD10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1nZT90aGlzOk5hTjtpZihudWxsIT1nZSl7aWYoInN0cmluZyI9PXR5cGVvZiBnZSl7aWYo''@;'; put 'put ''bnVsbD09PShnZT1qYyhYcixnZSkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnMoZ2UpPDE2JiYhbHQmJihnZSo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmamUmJihXdD1uaCh0aGlzKSksdGhpcy5fb2Zmc2V0PWdlLHRoaXMuX2lzVVRDPSEwLG51bGwhPVd0JiZ0aGlzLmFkZChXdCwibSIp''@;'; put 'put ''LE10IT09Z2UmJighamV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/YmcodGhpcyxtbChnZS1NdCwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLGgudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9''@;'; put 'put ''bnVsbCkpLHRoaXN9cmV0dXJuIHRoaXMuX2lzVVRDP010Om5oKHRoaXMpfSxFaS51dGM9ZnVuY3Rpb24gSjgoZ2Upe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLGdlKX0sRWkubG9jYWw9ZnVuY3Rpb24gTmwoZ2Upe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsZ2UpLHRo''@;'; put 'put ''aXMuX2lzVVRDPSExLGdlJiZ0aGlzLnN1YnRyYWN0KG5oKHRoaXMpLCJtIikpLHRoaXN9LEVpLnBhcnNlWm9uZT1mdW5jdGlvbiBLdSgpe2lmKG51bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9pKXt2''@;'; put 'put ''YXIgZ2U9amMoUXQsdGhpcy5faSk7bnVsbCE9Z2U/dGhpcy51dGNPZmZzZXQoZ2UpOnRoaXMudXRjT2Zmc2V0KDAsITApfXJldHVybiB0aGlzfSxFaS5oYXNBbGlnbmVkSG91ck9mZnNldD1mdW5jdGlvbiB5ZyhnZSl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKGdlPWdlP0VzKGdlKS51dGNP''@;'; put 'put ''ZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLWdlKSU2MD09MCl9LEVpLmlzRFNUPWZ1bmN0aW9uIF9nKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNP''@;'; put 'put ''ZmZzZXQoKX0sRWkuaXNMb2NhbD1mdW5jdGlvbiBvXygpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJiF0aGlzLl9pc1VUQ30sRWkuaXNVdGNPZmZzZXQ9ZnVuY3Rpb24gc18oKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30sRWkuaXNVdGM9T3IsRWkuaXNVVEM9T3IsRWku''@;'; put 'put ''em9uZUFiYnI9ZnVuY3Rpb24gbG8oKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LEVpLnpvbmVOYW1lPWZ1bmN0aW9uICRsKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LEVpLmRhdGVzPW1lKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXBy''@;'; put 'put ''ZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsZDcpLEVpLm1vbnRocz1tZSgibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixpdSksRWkueWVhcnM9bWUoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLCRpKSxF''@;'; put 'put ''aS56b25lPW1lKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsZnVuY3Rpb24gZWYoZ2UsamUpe3JldHVybiBudWxsIT1nZT8oInN0cmluZyIhPXR5''@;'; put 'put ''cGVvZiBnZSYmKGdlPS1nZSksdGhpcy51dGNPZmZzZXQoZ2UsamUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSksRWkuaXNEU1RTaGlmdGVkPW1lKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0''@;'; put 'put ''ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIixmdW5jdGlvbiBhXygpe2lmKCFNKHRoaXMuX2lzRFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDt2YXIgamUsZ2U9e307cmV0dXJuIG5lKGdlLHRoaXMpLChnZT1ubShnZSkpLl9hPyhqZT1nZS5faXNVVEM/RihnZS5fYSk6RXMo''@;'; put 'put ''Z2UuX2EpLHRoaXMuX2lzRFNUU2hpZnRlZD10aGlzLmlzVmFsaWQoKSYmZnVuY3Rpb24gTW8oZ2UsamUsbHQpe3ZhciBlaSxNdD1NYXRoLm1pbihnZS5sZW5ndGgsamUubGVuZ3RoKSxXdD1NYXRoLmFicyhnZS5sZW5ndGgtamUubGVuZ3RoKSwkbj0wO2ZvcihlaT0wO2VpPE10O2VpKyspKGx0''@;'; put 'put ''JiZnZVtlaV0hPT1qZVtlaV18fCFsdCYmeXQoZ2VbZWldKSE9PXl0KGplW2VpXSkpJiYkbisrO3JldHVybiAkbitXdH0oZ2UuX2EsamUudG9BcnJheSgpKT4wKTp0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITEsdGhpcy5faXNEU1RTaGlmdGVkfSk7dmFyIGlhPXAucHJvdG90eXBlO2Z1bmN0aW9uIFpv''@;'; put 'put ''KGdlLGplLGx0LE10KXt2YXIgV3Q9SnQoKSwkbj1GKCkuc2V0KE10LGplKTtyZXR1cm4gV3RbbHRdKCRuLGdlKX1mdW5jdGlvbiB0bChnZSxqZSxsdCl7aWYoTyhnZSkmJihqZT1nZSxnZT12b2lkIDApLGdlPWdlfHwiIixudWxsIT1qZSlyZXR1cm4gWm8oZ2UsamUsbHQsIm1vbnRoIik7dmFy''@;'; put 'put ''IE10LFd0PVtdO2ZvcihNdD0wO010PDEyO010KyspV3RbTXRdPVpvKGdlLE10LGx0LCJtb250aCIpO3JldHVybiBXdH1mdW5jdGlvbiBHYShnZSxqZSxsdCxNdCl7ImJvb2xlYW4iPT10eXBlb2YgZ2U/KE8oamUpJiYobHQ9amUsamU9dm9pZCAwKSxqZT1qZXx8IiIpOihsdD1qZT1nZSxnZT0h''@;'; put 'put ''MSxPKGplKSYmKGx0PWplLGplPXZvaWQgMCksamU9amV8fCIiKTt2YXIgZWksV3Q9SnQoKSwkbj1nZT9XdC5fd2Vlay5kb3c6MCxMYT1bXTtpZihudWxsIT1sdClyZXR1cm4gWm8oamUsKGx0KyRuKSU3LE10LCJkYXkiKTtmb3IoZWk9MDtlaTw3O2VpKyspTGFbZWldPVpvKGplLChlaSskbikl''@;'; put 'put ''NyxNdCwiZGF5Iik7cmV0dXJuIExhfWlhLmNhbGVuZGFyPWZ1bmN0aW9uIEwoZ2UsamUsbHQpe3ZhciBNdD10aGlzLl9jYWxlbmRhcltnZV18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBzKE10KT9NdC5jYWxsKGplLGx0KTpNdH0saWEubG9uZ0RhdGVGb3JtYXQ9ZnVuY3Rpb24g''@;'; put 'put ''dWUoZ2Upe3ZhciBqZT10aGlzLl9sb25nRGF0ZUZvcm1hdFtnZV0sbHQ9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbZ2UudG9VcHBlckNhc2UoKV07cmV0dXJuIGplfHwhbHQ/amU6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W2dlXT1sdC5tYXRjaChsKS5tYXAoZnVuY3Rpb24oTXQpe3JldHVybiJNTU1N''@;'; put 'put ''Ij09PU10fHwiTU0iPT09TXR8fCJERCI9PT1NdHx8ImRkZGQiPT09TXQ/TXQuc2xpY2UoMSk6TXR9KS5qb2luKCIiKSx0aGlzLl9sb25nRGF0ZUZvcm1hdFtnZV0pfSxpYS5pbnZhbGlkRGF0ZT1mdW5jdGlvbiBPZSgpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0saWEub3JkaW5hbD1mdW5j''@;'; put 'put ''dGlvbiB4ZShnZSl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLGdlKX0saWEucHJlcGFyc2U9djMsaWEucG9zdGZvcm1hdD12MyxpYS5yZWxhdGl2ZVRpbWU9ZnVuY3Rpb24gSWUoZ2UsamUsbHQsTXQpe3ZhciBXdD10aGlzLl9yZWxhdGl2ZVRpbWVbbHRdO3JldHVybiBzKFd0''@;'; put 'put ''KT9XdChnZSxqZSxsdCxNdCk6V3QucmVwbGFjZSgvJWQvaSxnZSl9LGlhLnBhc3RGdXR1cmU9ZnVuY3Rpb24gYmUoZ2UsamUpe3ZhciBsdD10aGlzLl9yZWxhdGl2ZVRpbWVbZ2U+MD8iZnV0dXJlIjoicGFzdCJdO3JldHVybiBzKGx0KT9sdChqZSk6bHQucmVwbGFjZSgvJXMvaSxqZSl9LGlh''@;'; put 'put ''LnNldD1mdW5jdGlvbiB1KGdlKXt2YXIgamUsbHQ7Zm9yKGx0IGluIGdlKVQoZ2UsbHQpJiYocyhqZT1nZVtsdF0pP3RoaXNbbHRdPWplOnRoaXNbIl8iK2x0XT1qZSk7dGhpcy5fY29uZmlnPWdlLHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMu''@;'; put 'put ''X2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9LGlhLmVyYXM9ZnVuY3Rpb24gdWMoZ2UsamUpe3ZhciBsdCxNdCxXdCwkbj10aGlzLl9lcmFzfHxKdCgiZW4iKS5fZXJhcztmb3IobHQ9MCxNdD0k''@;'; put 'put ''bi5sZW5ndGg7bHQ8TXQ7KytsdClzd2l0Y2goInN0cmluZyI9PXR5cGVvZiAkbltsdF0uc2luY2UmJihXdD1oKCRuW2x0XS5zaW5jZSkuc3RhcnRPZigiZGF5IiksJG5bbHRdLnNpbmNlPVd0LnZhbHVlT2YoKSksdHlwZW9mICRuW2x0XS51bnRpbCl7Y2FzZSJ1bmRlZmluZWQiOiRuW2x0XS51''@;'; put 'put ''bnRpbD0xLzA7YnJlYWs7Y2FzZSJzdHJpbmciOld0PWgoJG5bbHRdLnVudGlsKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksJG5bbHRdLnVudGlsPVd0LnZhbHVlT2YoKX1yZXR1cm4gJG59LGlhLmVyYXNQYXJzZT1mdW5jdGlvbiBtMyhnZSxqZSxsdCl7dmFyIE10LFd0LGVpLExhLHhvLCRu''@;'; put 'put ''PXRoaXMuZXJhcygpO2ZvcihnZT1nZS50b1VwcGVyQ2FzZSgpLE10PTAsV3Q9JG4ubGVuZ3RoO010PFd0OysrTXQpaWYoZWk9JG5bTXRdLm5hbWUudG9VcHBlckNhc2UoKSxMYT0kbltNdF0uYWJici50b1VwcGVyQ2FzZSgpLHhvPSRuW010XS5uYXJyb3cudG9VcHBlckNhc2UoKSxsdClzd2l0''@;'; put 'put ''Y2goamUpe2Nhc2UiTiI6Y2FzZSJOTiI6Y2FzZSJOTk4iOmlmKExhPT09Z2UpcmV0dXJuICRuW010XTticmVhaztjYXNlIk5OTk4iOmlmKGVpPT09Z2UpcmV0dXJuICRuW010XTticmVhaztjYXNlIk5OTk5OIjppZih4bz09PWdlKXJldHVybiAkbltNdF19ZWxzZSBpZihbZWksTGEseG9dLmlu''@;'; put 'put ''ZGV4T2YoZ2UpPj0wKXJldHVybiAkbltNdF19LGlhLmVyYXNDb252ZXJ0WWVhcj1mdW5jdGlvbiBzNyhnZSxqZSl7dmFyIGx0PWdlLnNpbmNlPD1nZS51bnRpbD8xOi0xO3JldHVybiB2b2lkIDA9PT1qZT9oKGdlLnNpbmNlKS55ZWFyKCk6aChnZS5zaW5jZSkueWVhcigpKyhqZS1nZS5vZmZz''@;'; put 'put ''ZXQpKmx0fSxpYS5lcmFzQWJiclJlZ2V4PWZ1bmN0aW9uIGw3KGdlKXtyZXR1cm4gVCh0aGlzLCJfZXJhc0FiYnJSZWdleCIpfHxyZi5jYWxsKHRoaXMpLGdlP3RoaXMuX2VyYXNBYmJyUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxpYS5lcmFzTmFtZVJlZ2V4PWZ1bmN0aW9uIEhwKGdlKXtyZXR1''@;'; put 'put ''cm4gVCh0aGlzLCJfZXJhc05hbWVSZWdleCIpfHxyZi5jYWxsKHRoaXMpLGdlP3RoaXMuX2VyYXNOYW1lUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxpYS5lcmFzTmFycm93UmVnZXg9ZnVuY3Rpb24gbE0oZ2Upe3JldHVybiBUKHRoaXMsIl9lcmFzTmFycm93UmVnZXgiKXx8cmYuY2FsbCh0aGlz''@;'; put 'put ''KSxnZT90aGlzLl9lcmFzTmFycm93UmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxpYS5tb250aHM9ZnVuY3Rpb24gSXIoZ2UsamUpe3JldHVybiBnZT9JKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzW2dlLm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHx4aSku''@;'; put 'put ''dGVzdChqZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVtnZS5tb250aCgpXTpJKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21vbnRocy5zdGFuZGFsb25lfSxpYS5tb250aHNTaG9ydD1mdW5jdGlvbiBibyhnZSxqZSl7cmV0dXJuIGdlP0kodGhpcy5fbW9udGhzU2hvcnQpP3Ro''@;'; put 'put ''aXMuX21vbnRoc1Nob3J0W2dlLm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W3hpLnRlc3QoamUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bZ2UubW9udGgoKV06SSh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnQ6dGhpcy5fbW9udGhzU2hvcnQuc3RhbmRhbG9uZX0saWEu''@;'; put 'put ''bW9udGhzUGFyc2U9ZnVuY3Rpb24gRmwoZ2UsamUsbHQpe3ZhciBNdCxXdCwkbjtpZih0aGlzLl9tb250aHNQYXJzZUV4YWN0KXJldHVybiBYYS5jYWxsKHRoaXMsZ2UsamUsbHQpO2Zvcih0aGlzLl9tb250aHNQYXJzZXx8KHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQ''@;'; put 'put ''YXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdKSxNdD0wO010PDEyO010Kyspe2lmKFd0PUYoWzJlMyxNdF0pLGx0JiYhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW010XSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtNdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHMoV3QsIiIpLnJl''@;'; put 'put ''cGxhY2UoIi4iLCIiKSsiJCIsImkiKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW010XT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KFd0LCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIikpLCFsdCYmIXRoaXMuX21vbnRoc1BhcnNlW010XSYmKCRuPSJeIit0aGlzLm1vbnRocyhX''@;'; put 'put ''dCwiIikrInxeIit0aGlzLm1vbnRoc1Nob3J0KFd0LCIiKSx0aGlzLl9tb250aHNQYXJzZVtNdF09bmV3IFJlZ0V4cCgkbi5yZXBsYWNlKCIuIiwiIiksImkiKSksbHQmJiJNTU1NIj09PWplJiZ0aGlzLl9sb25nTW9udGhzUGFyc2VbTXRdLnRlc3QoZ2UpKXJldHVybiBNdDtpZihsdCYmIk1N''@;'; put 'put ''TSI9PT1qZSYmdGhpcy5fc2hvcnRNb250aHNQYXJzZVtNdF0udGVzdChnZSkpcmV0dXJuIE10O2lmKCFsdCYmdGhpcy5fbW9udGhzUGFyc2VbTXRdLnRlc3QoZ2UpKXJldHVybiBNdH19LGlhLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uIERhKGdlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFj''@;'; put 'put ''dD8oVCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8bmkuY2FsbCh0aGlzKSxnZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCk6KFQodGhpcywiX21vbnRoc1JlZ2V4Iil8fCh0aGlzLl9tb250aHNSZWdleD1YaSksdGhpcy5fbW9udGhzU3RyaWN0UmVnZXgmJmdlP3Ro''@;'; put 'put ''aXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0saWEubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbiBvcihnZSl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KFQodGhpcywiX21vbnRoc1JlZ2V4Iil8fG5pLmNhbGwodGhpcyksZ2U/dGhpcy5fbW9udGhzU2hv''@;'; put 'put ''cnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KTooVCh0aGlzLCJfbW9udGhzU2hvcnRSZWdleCIpfHwodGhpcy5fbW9udGhzU2hvcnRSZWdleD1vYSksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCYmZ2U/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9t''@;'; put 'put ''b250aHNTaG9ydFJlZ2V4KX0saWEud2Vlaz1mdW5jdGlvbiBLMihnZSl7cmV0dXJuIEV1KGdlLHRoaXMuX3dlZWsuZG93LHRoaXMuX3dlZWsuZG95KS53ZWVrfSxpYS5maXJzdERheU9mWWVhcj1mdW5jdGlvbiBmZygpe3JldHVybiB0aGlzLl93ZWVrLmRveX0saWEuZmlyc3REYXlPZldlZWs9''@;'; put 'put ''ZnVuY3Rpb24gZDMoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9LGlhLndlZWtkYXlzPWZ1bmN0aW9uIFIxKGdlLGplKXt2YXIgbHQ9SSh0aGlzLl93ZWVrZGF5cyk/dGhpcy5fd2Vla2RheXM6dGhpcy5fd2Vla2RheXNbZ2UmJiEwIT09Z2UmJnRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3Qo''@;'; put 'put ''amUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl07cmV0dXJuITA9PT1nZT9fYyhsdCx0aGlzLl93ZWVrLmRvdyk6Z2U/bHRbZ2UuZGF5KCldOmx0fSxpYS53ZWVrZGF5c01pbj1mdW5jdGlvbiBxMihnZSl7cmV0dXJuITA9PT1nZT9fYyh0aGlzLl93ZWVrZGF5c01pbix0aGlzLl93ZWVrLmRvdyk6''@;'; put 'put ''Z2U/dGhpcy5fd2Vla2RheXNNaW5bZ2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxpYS53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIHIxKGdlKXtyZXR1cm4hMD09PWdlP19jKHRoaXMuX3dlZWtkYXlzU2hvcnQsdGhpcy5fd2Vlay5kb3cpOmdlP3RoaXMuX3dlZWtkYXlzU2hvcnRbZ2UuZGF5''@;'; put 'put ''KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LGlhLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24gaTEoZ2UsamUsbHQpe3ZhciBNdCxXdCwkbjtpZih0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIGdkLmNhbGwodGhpcyxnZSxqZSxsdCk7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlz''@;'; put 'put ''Ll93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdKSxNdD0wO010PDc7TXQrKyl7aWYoV3Q9RihbMmUzLDFdKS5kYXkoTXQpLGx0JiYhdGhpcy5fZnVsbFdlZWtkYXlz''@;'; put 'put ''UGFyc2VbTXRdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbTXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXMoV3QsIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW010XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hv''@;'; put 'put ''cnQoV3QsIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtNdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c01pbihXdCwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtNdF18fCgkbj0i''@;'; put 'put ''XiIrdGhpcy53ZWVrZGF5cyhXdCwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoV3QsIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c01pbihXdCwiIiksdGhpcy5fd2Vla2RheXNQYXJzZVtNdF09bmV3IFJlZ0V4cCgkbi5yZXBsYWNlKCIuIiwiIiksImkiKSksbHQmJiJkZGRkIj09PWplJiZ0aGlz''@;'; put 'put ''Ll9mdWxsV2Vla2RheXNQYXJzZVtNdF0udGVzdChnZSkpcmV0dXJuIE10O2lmKGx0JiYiZGRkIj09PWplJiZ0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbTXRdLnRlc3QoZ2UpKXJldHVybiBNdDtpZihsdCYmImRkIj09PWplJiZ0aGlzLl9taW5XZWVrZGF5c1BhcnNlW010XS50ZXN0KGdlKSly''@;'; put 'put ''ZXR1cm4gTXQ7aWYoIWx0JiZ0aGlzLl93ZWVrZGF5c1BhcnNlW010XS50ZXN0KGdlKSlyZXR1cm4gTXR9fSxpYS53ZWVrZGF5c1JlZ2V4PWZ1bmN0aW9uIGdnKGdlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhUKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHFuLmNhbGwodGhp''@;'; put 'put ''cyksZ2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KTooVCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHwodGhpcy5fd2Vla2RheXNSZWdleD1YaCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmZ2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlz''@;'; put 'put ''Ll93ZWVrZGF5c1JlZ2V4KX0saWEud2Vla2RheXNTaG9ydFJlZ2V4PWZ1bmN0aW9uIHVzKGdlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhUKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHFuLmNhbGwodGhpcyksZ2U/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRo''@;'; put 'put ''aXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KFQodGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIpfHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PVd1KSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJmdlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5''@;'; put 'put ''c1Nob3J0UmVnZXgpfSxpYS53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uIENuKGdlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhUKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHFuLmNhbGwodGhpcyksZ2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVr''@;'; put 'put ''ZGF5c01pblJlZ2V4KTooVCh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vla2RheXNNaW5SZWdleD1UdSksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCYmZ2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KX0saWEuaXNQ''@;'; put 'put ''TT1mdW5jdGlvbiB2YShnZSl7cmV0dXJuInAiPT09KGdlKyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX0saWEubWVyaWRpZW09ZnVuY3Rpb24gZ2woZ2UsamUsbHQpe3JldHVybiBnZT4xMT9sdD8icG0iOiJQTSI6bHQ/ImFtIjoiQU0ifSxCbygiZW4iLHtlcmFzOlt7c2luY2U6IjAwMDEt''@;'; put 'put ''MDEtMDEiLHVudGlsOjEvMCxvZmZzZXQ6MSxuYW1lOiJBbm5vIERvbWluaSIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiQmVmb3JlIENocmlzdCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oZ2Upe3ZhciBqZT1nZSUxMDtyZXR1cm4gZ2UrKDE9PT15dChnZSUxMDAvMTApPyJ0aCI6MT09PWplPyJzdCI6Mj09PWplPyJuZCI6Mz09PWplPyJyZCI6InRoIil9fSksaC5sYW5nPW1lKCJtb21lbnQu''@;'; put 'put ''bGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsQm8pLGgubGFuZ0RhdGE9bWUoIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLEp0KTt2YXIgajA9TWF0aC5hYnM7ZnVuY3Rpb24gYWgoZ2Us''@;'; put 'put ''amUsbHQsTXQpe3ZhciBXdD1tbChqZSxsdCk7cmV0dXJuIGdlLl9taWxsaXNlY29uZHMrPU10Kld0Ll9taWxsaXNlY29uZHMsZ2UuX2RheXMrPU10Kld0Ll9kYXlzLGdlLl9tb250aHMrPU10Kld0Ll9tb250aHMsZ2UuX2J1YmJsZSgpfWZ1bmN0aW9uIEVnKGdlKXtyZXR1cm4gZ2U8MD9NYXRo''@;'; put 'put ''LmZsb29yKGdlKTpNYXRoLmNlaWwoZ2UpfWZ1bmN0aW9uIHowKGdlKXtyZXR1cm4gNDgwMCpnZS8xNDYwOTd9ZnVuY3Rpb24gc2YoZ2Upe3JldHVybiAxNDYwOTcqZ2UvNDgwMH1mdW5jdGlvbiBIMShnZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXMoZ2UpfX12YXIgTjE9SDEo''@;'; put 'put ''Im1zIiksb2g9SDEoInMiKSxUZz1IMSgibSIpLHczPUgxKCJoIiksRHM9SDEoImQiKSxjbD1IMSgidyIpLHpjPUgxKCJNIiksaDc9SDEoIlEiKSxiZD1IMSgieSIpLEFnPU4xO2Z1bmN0aW9uIGUyKGdlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fZGF0''@;'; put 'put ''YVtnZV06TmFOfX12YXIgd189ZTIoIm1pbGxpc2Vjb25kcyIpLHQyPWUyKCJzZWNvbmRzIiksQ189ZTIoIm1pbnV0ZXMiKSxTXz1lMigiaG91cnMiKSxnbT1lMigiZGF5cyIpLE1JPWUyKCJtb250aHMiKSx3MD1lMigieWVhcnMiKTt2YXIgbGY9TWF0aC5yb3VuZCxjZj17c3M6NDQsczo0NSxt''@;'; put 'put ''OjQ1LGg6MjIsZDoyNix3Om51bGwsTToxMX07ZnVuY3Rpb24gTV8oZ2UsamUsbHQsTXQsV3Qpe3JldHVybiBXdC5yZWxhdGl2ZVRpbWUoamV8fDEsISFsdCxnZSxNdCl9dmFyIEVfPU1hdGguYWJzO2Z1bmN0aW9uIEMzKGdlKXtyZXR1cm4oZ2U+MCktKGdlPDApfHwrZ2V9ZnVuY3Rpb24ga2co''@;'; put 'put ''KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIE10LFd0LCRuLGVpLHhvLGRzLEMwLHdkLGdlPUVfKHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLGplPUVfKHRoaXMuX2RheXMpLGx0PUVfKHRoaXMuX21vbnRocyksTGE9dGhpcy5h''@;'; put 'put ''c1NlY29uZHMoKTtyZXR1cm4gTGE/KE10PU5lKGdlLzYwKSxXdD1OZShNdC82MCksZ2UlPTYwLE10JT02MCwkbj1OZShsdC8xMiksbHQlPTEyLGVpPWdlP2dlLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIseG89TGE8MD8iLSI6IiIsZHM9QzModGhpcy5fbW9udGhzKSE9PUMz''@;'; put 'put ''KExhKT8iLSI6IiIsQzA9QzModGhpcy5fZGF5cykhPT1DMyhMYSk/Ii0iOiIiLHdkPUMzKHRoaXMuX21pbGxpc2Vjb25kcykhPT1DMyhMYSk/Ii0iOiIiLHhvKyJQIisoJG4/ZHMrJG4rIlkiOiIiKSsobHQ/ZHMrbHQrIk0iOiIiKSsoamU/QzAramUrIkQiOiIiKSsoV3R8fE10fHxnZT8iVCI6''@;'; put 'put ''IiIpKyhXdD93ZCtXdCsiSCI6IiIpKyhNdD93ZCtNdCsiTSI6IiIpKyhnZT93ZCtlaSsiUyI6IiIpKToiUDBEIn12YXIgSXM9JHUucHJvdG90eXBlO3JldHVybiBJcy5pc1ZhbGlkPWZ1bmN0aW9uIHMxKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWR9LElzLmFicz1mdW5jdGlvbiBiMCgpe3ZhciBn''@;'; put 'put ''ZT10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9ajAodGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWowKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1qMCh0aGlzLl9tb250aHMpLGdlLm1pbGxpc2Vjb25kcz1qMChnZS5taWxsaXNlY29uZHMpLGdlLnNlY29uZHM9''@;'; put 'put ''ajAoZ2Uuc2Vjb25kcyksZ2UubWludXRlcz1qMChnZS5taW51dGVzKSxnZS5ob3Vycz1qMChnZS5ob3VycyksZ2UubW9udGhzPWowKGdlLm1vbnRocyksZ2UueWVhcnM9ajAoZ2UueWVhcnMpLHRoaXN9LElzLmFkZD1mdW5jdGlvbiBvZihnZSxqZSl7cmV0dXJuIGFoKHRoaXMsZ2UsamUsMSl9''@;'; put 'put ''LElzLnN1YnRyYWN0PWZ1bmN0aW9uIFFoKGdlLGplKXtyZXR1cm4gYWgodGhpcyxnZSxqZSwtMSl9LElzLmFzPWZ1bmN0aW9uIGthKGdlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgamUsbHQsTXQ9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0oZ2U9cHQoZ2Up''@;'; put 'put ''KXx8InF1YXJ0ZXIiPT09Z2V8fCJ5ZWFyIj09PWdlKXN3aXRjaChqZT10aGlzLl9kYXlzK010Lzg2NGU1LGx0PXRoaXMuX21vbnRocyt6MChqZSksZ2Upe2Nhc2UibW9udGgiOnJldHVybiBsdDtjYXNlInF1YXJ0ZXIiOnJldHVybiBsdC8zO2Nhc2UieWVhciI6cmV0dXJuIGx0LzEyfWVsc2Ug''@;'; put 'put ''c3dpdGNoKGplPXRoaXMuX2RheXMrTWF0aC5yb3VuZChzZih0aGlzLl9tb250aHMpKSxnZSl7Y2FzZSJ3ZWVrIjpyZXR1cm4gamUvNytNdC82MDQ4ZTU7Y2FzZSJkYXkiOnJldHVybiBqZStNdC84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCpqZStNdC8zNmU1O2Nhc2UibWludXRlIjpyZXR1''@;'; put 'put ''cm4gMTQ0MCpqZStNdC82ZTQ7Y2FzZSJzZWNvbmQiOnJldHVybiA4NjQwMCpqZStNdC8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGguZmxvb3IoODY0ZTUqamUpK010O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIitnZSl9fSxJcy5hc01pbGxpc2Vjb25k''@;'; put 'put ''cz1OMSxJcy5hc1NlY29uZHM9b2gsSXMuYXNNaW51dGVzPVRnLElzLmFzSG91cnM9dzMsSXMuYXNEYXlzPURzLElzLmFzV2Vla3M9Y2wsSXMuYXNNb250aHM9emMsSXMuYXNRdWFydGVycz1oNyxJcy5hc1llYXJzPWJkLElzLnZhbHVlT2Y9QWcsSXMuX2J1YmJsZT1mdW5jdGlvbiBiMygpe3Zh''@;'; put 'put ''ciBXdCwkbixlaSxMYSx4byxnZT10aGlzLl9taWxsaXNlY29uZHMsamU9dGhpcy5fZGF5cyxsdD10aGlzLl9tb250aHMsTXQ9dGhpcy5fZGF0YTtyZXR1cm4gZ2U+PTAmJmplPj0wJiZsdD49MHx8Z2U8PTAmJmplPD0wJiZsdDw9MHx8KGdlKz04NjRlNSpFZyhzZihsdCkramUpLGplPTAsbHQ9''@;'; put 'put ''MCksTXQubWlsbGlzZWNvbmRzPWdlJTFlMyxXdD1OZShnZS8xZTMpLE10LnNlY29uZHM9V3QlNjAsJG49TmUoV3QvNjApLE10Lm1pbnV0ZXM9JG4lNjAsZWk9TmUoJG4vNjApLE10LmhvdXJzPWVpJTI0LGplKz1OZShlaS8yNCksbHQrPXhvPU5lKHowKGplKSksamUtPUVnKHNmKHhvKSksTGE9''@;'; put 'put ''TmUobHQvMTIpLGx0JT0xMixNdC5kYXlzPWplLE10Lm1vbnRocz1sdCxNdC55ZWFycz1MYSx0aGlzfSxJcy5jbG9uZT1mdW5jdGlvbiBoMSgpe3JldHVybiBtbCh0aGlzKX0sSXMuZ2V0PWZ1bmN0aW9uIFYxKGdlKXtyZXR1cm4gZ2U9cHQoZ2UpLHRoaXMuaXNWYWxpZCgpP3RoaXNbZ2UrInMi''@;'; put 'put ''XSgpOk5hTn0sSXMubWlsbGlzZWNvbmRzPXdfLElzLnNlY29uZHM9dDIsSXMubWludXRlcz1DXyxJcy5ob3Vycz1TXyxJcy5kYXlzPWdtLElzLndlZWtzPWZ1bmN0aW9uIHhJKCl7cmV0dXJuIE5lKHRoaXMuZGF5cygpLzcpfSxJcy5tb250aHM9TUksSXMueWVhcnM9dzAsSXMuaHVtYW5pemU9''@;'; put 'put ''ZnVuY3Rpb24gQUkoZ2UsamUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgV3QsJG4sbHQ9ITEsTXQ9Y2Y7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnZSYmKGplPWdlLGdlPSExKSwiYm9vbGVhbiI9PXR5cGVvZiBnZSYmKGx0''@;'; put 'put ''PWdlKSwib2JqZWN0Ij09dHlwZW9mIGplJiYoTXQ9T2JqZWN0LmFzc2lnbih7fSxjZixqZSksbnVsbCE9amUucyYmbnVsbD09amUuc3MmJihNdC5zcz1qZS5zLTEpKSwkbj1mdW5jdGlvbiB4XyhnZSxqZSxsdCxNdCl7dmFyIFd0PW1sKGdlKS5hYnMoKSwkbj1sZihXdC5hcygicyIpKSxlaT1s''@;'; put 'put ''ZihXdC5hcygibSIpKSxMYT1sZihXdC5hcygiaCIpKSx4bz1sZihXdC5hcygiZCIpKSxkcz1sZihXdC5hcygiTSIpKSxDMD1sZihXdC5hcygidyIpKSx3ZD1sZihXdC5hcygieSIpKSxuMj0kbjw9bHQuc3MmJlsicyIsJG5dfHwkbjxsdC5zJiZbInNzIiwkbl18fGVpPD0xJiZbIm0iXXx8ZWk8''@;'; put 'put ''bHQubSYmWyJtbSIsZWldfHxMYTw9MSYmWyJoIl18fExhPGx0LmgmJlsiaGgiLExhXXx8eG88PTEmJlsiZCJdfHx4bzxsdC5kJiZbImRkIix4b107cmV0dXJuIG51bGwhPWx0LncmJihuMj1uMnx8QzA8PTEmJlsidyJdfHxDMDxsdC53JiZbInd3IixDMF0pLChuMj1uMnx8ZHM8PTEmJlsiTSJd''@;'; put 'put ''fHxkczxsdC5NJiZbIk1NIixkc118fHdkPD0xJiZbInkiXXx8WyJ5eSIsd2RdKVsyXT1qZSxuMlszXT0rZ2U+MCxuMls0XT1NdCxNXy5hcHBseShudWxsLG4yKX0odGhpcywhbHQsTXQsV3Q9dGhpcy5sb2NhbGVEYXRhKCkpLGx0JiYoJG49V3QucGFzdEZ1dHVyZSgrdGhpcywkbikpLFd0LnBv''@;'; put 'put ''c3Rmb3JtYXQoJG4pfSxJcy50b0lTT1N0cmluZz1rZyxJcy50b1N0cmluZz1rZyxJcy50b0pTT049a2csSXMubG9jYWxlPXlhLElzLmxvY2FsZURhdGE9dTEsSXMudG9Jc29TdHJpbmc9bWUoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGlu''@;'; put 'put ''c3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixrZyksSXMubGFuZz1hdSxRKCJYIiwwLDAsInVuaXgiKSxRKCJ4IiwwLDAsInZhbHVlT2YiKSxSbigieCIsWHQpLFJuKCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxhdCgiWCIsZnVuY3Rpb24oZ2UsamUsbHQpe2x0Ll9kPW5ldyBEYXRl''@;'; put 'put ''KDFlMypwYXJzZUZsb2F0KGdlKSl9KSxhdCgieCIsZnVuY3Rpb24oZ2UsamUsbHQpe2x0Ll9kPW5ldyBEYXRlKHl0KGdlKSl9KSxoLnZlcnNpb249IjIuMzAuMSIsZnVuY3Rpb24gbyhnZSl7Uz1nZX0oRXMpLGguZm49RWksaC5taW49ZnVuY3Rpb24gc2woKXtyZXR1cm4gQmMoImlzQmVmb3Jl''@;'; put 'put ''IixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGgubWF4PWZ1bmN0aW9uIFl1KCl7cmV0dXJuIEJjKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGgubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxoLnV0Yz1GLGgu''@;'; put 'put ''dW5peD1mdW5jdGlvbiBWbChnZSl7cmV0dXJuIEVzKDFlMypnZSl9LGgubW9udGhzPWZ1bmN0aW9uIGFmKGdlLGplKXtyZXR1cm4gdGwoZ2UsamUsIm1vbnRocyIpfSxoLmlzRGF0ZT1ELGgubG9jYWxlPUJvLGguaW52YWxpZD1VLGguZHVyYXRpb249bWwsaC5pc01vbWVudD1oZSxoLndlZWtk''@;'; put 'put ''YXlzPWZ1bmN0aW9uIHkzKGdlLGplLGx0KXtyZXR1cm4gR2EoZ2UsamUsbHQsIndlZWtkYXlzIil9LGgucGFyc2Vab25lPWZ1bmN0aW9uIF8wKCl7cmV0dXJuIEVzLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0saC5sb2NhbGVEYXRhPUp0LGguaXNEdXJhdGlvbj1CcyxoLm1v''@;'; put 'put ''bnRoc1Nob3J0PWZ1bmN0aW9uIHBtKGdlLGplKXtyZXR1cm4gdGwoZ2UsamUsIm1vbnRoc1Nob3J0Iil9LGgud2Vla2RheXNNaW49ZnVuY3Rpb24gXzMoZ2UsamUsbHQpe3JldHVybiBHYShnZSxqZSxsdCwid2Vla2RheXNNaW4iKX0saC5kZWZpbmVMb2NhbGU9Q3QsaC51cGRhdGVMb2NhbGU9''@;'; put 'put ''ZnVuY3Rpb24gdXQoZ2UsamUpe2lmKG51bGwhPWplKXt2YXIgbHQsTXQsV3Q9c2M7bnVsbCE9VW9bZ2VdJiZudWxsIT1Vb1tnZV0ucGFyZW50TG9jYWxlP1VvW2dlXS5zZXQodihVb1tnZV0uX2NvbmZpZyxqZSkpOihudWxsIT0oTXQ9SHIoZ2UpKSYmKFd0PU10Ll9jb25maWcpLGplPXYoV3Qs''@;'; put 'put ''amUpLG51bGw9PU10JiYoamUuYWJicj1nZSksKGx0PW5ldyBwKGplKSkucGFyZW50TG9jYWxlPVVvW2dlXSxVb1tnZV09bHQpLEJvKGdlKX1lbHNlIG51bGwhPVVvW2dlXSYmKG51bGwhPVVvW2dlXS5wYXJlbnRMb2NhbGU/KFVvW2dlXT1Vb1tnZV0ucGFyZW50TG9jYWxlLGdlPT09Qm8oKSYm''@;'; put 'put ''Qm8oZ2UpKTpudWxsIT1Vb1tnZV0mJmRlbGV0ZSBVb1tnZV0pO3JldHVybiBVb1tnZV19LGgubG9jYWxlcz1mdW5jdGlvbiBjbigpe3JldHVybiBfKFVvKX0saC53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIGxsKGdlLGplLGx0KXtyZXR1cm4gR2EoZ2UsamUsbHQsIndlZWtkYXlzU2hvcnQiKX0s''@;'; put 'put ''aC5ub3JtYWxpemVVbml0cz1wdCxoLnJlbGF0aXZlVGltZVJvdW5kaW5nPWZ1bmN0aW9uIEVJKGdlKXtyZXR1cm4gdm9pZCAwPT09Z2U/bGY6ImZ1bmN0aW9uIj09dHlwZW9mIGdlJiYobGY9Z2UsITApfSxoLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbiBUSShnZSxqZSl7cmV0dXJu''@;'; put 'put ''IHZvaWQgMCE9PWNmW2dlXSYmKHZvaWQgMD09PWplP2NmW2dlXTooY2ZbZ2VdPWplLCJzIj09PWdlJiYoY2Yuc3M9amUtMSksITApKX0saC5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbiBYdShnZSxqZSl7dmFyIGx0PWdlLmRpZmYoamUsImRheXMiLCEwKTtyZXR1cm4gbHQ8LTY/InNhbWVFbHNl''@;'; put 'put ''IjpsdDwtMT8ibGFzdFdlZWsiOmx0PDA/Imxhc3REYXkiOmx0PDE/InNhbWVEYXkiOmx0PDI/Im5leHREYXkiOmx0PDc/Im5leHRXZWVrIjoic2FtZUVsc2UifSxoLnByb3RvdHlwZT1FaSxoLkhUTUw1X0ZNVD17REFURVRJTUVfTE9DQUw6IllZWVktTU0tRERUSEg6bW0iLERBVEVUSU1FX0xP''@;'; put 'put ''Q0FMX1NFQ09ORFM6IllZWVktTU0tRERUSEg6bW06c3MiLERBVEVUSU1FX0xPQ0FMX01TOiJZWVlZLU1NLUREVEhIOm1tOnNzLlNTUyIsREFURToiWVlZWS1NTS1ERCIsVElNRToiSEg6bW0iLFRJTUVfU0VDT05EUzoiSEg6bW06c3MiLFRJTUVfTVM6IkhIOm1tOnNzLlNTUyIsV0VFSzoiR0dH''@;'; put 'put ''Ry1bV11XVyIsTU9OVEg6IllZWVktTU0ifSxofSgpfSw3ODM3NSh0ZSl7dGUuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgZ2xvYmFsVGhpczwidSJ8fHR5cGVvZiB3aW5kb3c8InUifHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsO3ZhciBkPXt9LFM9e2V4cG9ydHM6''@;'; put 'put ''e319O1MuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImJnIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAi''@;'; put 'put ''LGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDE4IixtaWxsaW9uOiJcdTA0MTAiLGJpbGxpb246Ik0iLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQzYlx1MDQzMi4iLGNvZGU6IkJHTiJ9fSk7dmFyIGg9Uy5leHBv''@;'; put 'put ''cnRzLG89e2V4cG9ydHM6e319O28uZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImNzLUNaIixkZWxpbWl0''@;'; put 'put ''ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJy''@;'; put 'put ''ZW5jeTp7c3ltYm9sOiJLXHUwMTBkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1pLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxzcGFjZVNlcGFyYXRlZEFi''@;'; put 'put ''YnJldmlhdGlvbjohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3Nh''@;'; put 'put ''OjB9fX0pO3ZhciBJPW8uZXhwb3J0cyxmPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVs''@;'; put 'put ''dDpPdH0oe2xhbmd1YWdlVGFnOiJkYS1ESyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbyIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9''@;'; put 'put ''LGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiREtLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3Jt''@;'; put 'put ''YXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVj''@;'; put 'put ''aW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShmKTt2YXIgVD1mLmV4cG9ydHMsQT17''@;'; put 'put ''ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZGUtQVQi''@;'; put 'put ''LGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29k''@;'; put 'put ''ZToiRVVSIn19KX0oQSk7dmFyIE09QS5leHBvcnRzLE89e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9P''@;'; put 'put ''dC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImRlLUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx1MjAxOSIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6''@;'; put 'put ''e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KE8pO3ZhciBEPU8uZXhwb3J0cyxFPXtleHBvcnRzOnt9fTshZnVu''@;'; put 'put ''Y3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJkZS1ERSIsZGVsaW1pdGVyczp7dGhv''@;'; put 'put ''dXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik1pIixiaWxsaW9uOiJNYSIsdHJpbGxpb246IkJpIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFj''@;'; put 'put ''Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3RvdGFsTGVuZ3RoOjQsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEUpO3ZhciBCPUUuZXhwb3J0cyxGPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVs''@;'; put 'put ''ZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJkZS1MSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246''@;'; put 'put ''Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRp''@;'; put 'put ''c3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShGKTt2YXIgTj1GLmV4cG9ydHMsSD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZWwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTAzYzciLG1pbGxpb246Ilx1MDNiNSIsYmlsbGlvbjoiXHUwM2I0Iix0''@;'; put 'put ''cmlsbGlvbjoiXHUwM2M0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX0pfShIKTt2YXIgej1ILmV4cG9ydHMsWj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXty''@;'; put 'put ''ZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZW4tQVUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6''@;'; put 'put ''e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6T3Q9PntsZXQgSnI9T3QlMTA7cmV0dXJuIDE9PX5+KE90JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9s''@;'; put 'put ''OiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJBVUQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3Rv''@;'; put 'put ''dGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxX''@;'; put 'put ''aXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFopO3ZhciBVPVouZXhwb3J0cyxLPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01v''@;'; put 'put ''ZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJlbi1HQiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxp''@;'; put 'put ''b246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpPdD0+e2xldCBKcj1PdCUxMDtyZXR1cm4gMT09fn4oT3QlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTMiLHBvc2l0aW9uOiJw''@;'; put 'put ''cmVmaXgiLGNvZGU6IkdCUCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITEsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFj''@;'; put 'put ''ZVNlcGFyYXRlZDohMSxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMSxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMSxtYW50aXNzYTowfX19KX0oSyk7dmFyIFg9Sy5leHBvcnRzLG5lPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJlbi1JRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFs''@;'; put 'put ''OiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpPdD0+e2xldCBKcj1PdCUxMDtyZXR1cm4gMT09fn4oT3QlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0''@;'; put 'put ''aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InByZWZpeCIsY29kZToiRVVSIn19KX0obmUpO3ZhciBzZT1uZS5leHBvcnRzLGhlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVs''@;'; put 'put ''ZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJlbi1OWiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246''@;'; put 'put ''Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpPdD0+e2xldCBKcj1PdCUxMDtyZXR1cm4gMT09fn4oT3QlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgi''@;'; put 'put ''LGNvZGU6Ik5aRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oaGUpO3ZhciBfZT1oZS5leHBvcnRzLG1lPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJlbi1aQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIi''@;'; put 'put ''LHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpPdD0+e2xldCBKcj1PdCUxMDtyZXR1cm4gMT09fn4oT3QlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IlIiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlpBUiJ9LGN1''@;'; put 'put ''cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdl''@;'; put 'put ''OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0obWUpO3ZhciBGZT1tZS5leHBvcnRzLFI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImVzLUFSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0s''@;'; put 'put ''b3JkaW5hbDpPdD0+e2xldCBKcj1PdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJBUlMi''@;'; put 'put ''fSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZl''@;'; put 'put ''cmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1''@;'; put 'put ''bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFIpO3ZhciBzPVIuZXhwb3J0cyx1PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qp''@;'; put 'put ''e3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJlcy1DTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9u''@;'; put 'put ''czp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6T3Q9PntsZXQgSnI9T3QlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoi''@;'; put 'put ''dG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJDTFAifSxjdXJyZW5jeUZvcm1hdDp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''YXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9''@;'; put 'put ''LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHUpO3ZhciB2PXUuZXhwb3J0cyxwPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmko''@;'; put 'put ''T3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJlcy1DTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0''@;'; put 'put ''aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6T3Q9PntsZXQgSnI9T3QlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5v''@;'; put 'put ''IjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRz''@;'; put 'put ''Ont0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5''@;'; put 'put ''OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShwKTt2YXIgXz1wLmV4cG9ydHMsaz17ZXhwb3J0czp7fX07IWZ1''@;'; put 'put ''bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZXMtQ1IiLGRlbGltaXRlcnM6e3Ro''@;'; put 'put ''b3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOk90PT57bGV0IEpyPU90JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8''@;'; put 'put ''MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGExIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1JDIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLG1hbnRpc3NhOjB9fX0pfShrKTt2YXIgTD1rLmV4cG9ydHMseT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwi''@;'; put 'put ''ZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZXMtRVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOk90PT57''@;'; put 'put ''bGV0IEpyPU90JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVu''@;'; put 'put ''Y3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9''@;'; put 'put ''LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5v''@;'; put 'put ''RGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh5KTt2YXIgbD15LmV4cG9ydHMsYj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4g''@;'; put 'put ''T3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZXMtTVgiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3Vz''@;'; put 'put ''YW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKE90KXtsZXQgSnI9T3QlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoi''@;'; put 'put ''dG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTVhOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxM''@;'; put 'put ''ZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlz''@;'; put 'put ''c2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oYik7dmFyIHE9Yi5leHBvcnRzLEc9e2V4cG9ydHM6e319OyFmdW5jdGlvbihv''@;'; put 'put ''cil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImVzLU5JIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6''@;'; put 'put ''IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpPdD0+e2xldCBKcj1PdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8i''@;'; put 'put ''bW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IkMkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJOSU8ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlz''@;'; put 'put ''c2E6MH19fSl9KEcpO3ZhciBRPUcuZXhwb3J0cyxwZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090''@;'; put 'put ''LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZXMtUEUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOk90PT57bGV0IEpyPU90JTEw''@;'; put 'put ''O3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiUy8uIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJQRU4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHBlKTt2YXIgUGU9cGUuZXhwb3J0cyxaZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNN''@;'; put 'put ''b2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZXMtUFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxs''@;'; put 'put ''aW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOk90PT57bGV0IEpyPU90JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJv''@;'; put 'put ''bDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ontt''@;'; put 'put ''YW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShaZSk7dmFyIHFlPVplLmV4cG9ydHMsdmU9e2V4cG9ydHM6e319OyFm''@;'; put 'put ''dW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImVzLVNWIixkZWxpbWl0ZXJzOnt0''@;'; put 'put ''aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpPdD0+e2xldCBKcj1PdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8''@;'; put 'put ''fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlNWQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MCxtYW50aXNzYTowfX19KX0odmUpO3ZhciB1ZT12ZS5leHBvcnRzLHplPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJk''@;'; put 'put ''ZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJldC1FRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR1aCIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJ0cmwifSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1''@;'; put 'put ''cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19''@;'; put 'put ''fSl9KHplKTt2YXIgT2U9emUuZXhwb3J0cyxDZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRl''@;'; put 'put ''ZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZmEtSVIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHUwNjBjIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDY0N1x1MDYzMlx1MDYyN1x1MDYzMSIsbWlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4''@;'; put 'put ''XHUwNjQ2IixiaWxsaW9uOiJcdTA2NDVcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2MjdcdTA2MzFcdTA2MmYiLHRyaWxsaW9uOiJcdTA2MmFcdTA2MzFcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2NDhcdTA2NDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1MDYyN1x1MDY0NSJ9LGN1cnJlbmN5''@;'; put 'put ''OntzeW1ib2w6Ilx1ZmRmYyIsY29kZToiSVJSIn19KX0oQ2UpO3ZhciBrZT1DZS5leHBvcnRzLHhlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJmaS1GSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRp''@;'; put 'put ''c3NhOjB9fX0pfSh4ZSk7dmFyIE1lPXhlLmV4cG9ydHMsSWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQi''@;'; put 'put ''KT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImZpbC1QSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpPdD0+e2xldCBKcj1P''@;'; put 'put ''dCUxMDtyZXR1cm4gMT09fn4oT3QlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiMSIsY29kZToiUEhQIn19KX0oSWUpO3ZhciBiZT1JZS5leHBvcnRzLHdlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24o''@;'; put 'put ''b3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJmci1DQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRz''@;'; put 'put ''OiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpPdD0+MT09PU90PyJlciI6Ilx4ZThtZSIsc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246''@;'; put 'put ''InBvc3RmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZToh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHdlKTt2YXIgcHQ9d2UuZXhwb3J0cyxLZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiZnItQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9y''@;'; put 'put ''ZGluYWw6T3Q9PjE9PT1PdD8iZXIiOiJceGU4bWUiLGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNz''@;'; put 'put ''YTowfX19KX0oS2UpO3ZhciBZZT1LZS5leHBvcnRzLHF0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/''@;'; put 'put ''T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJmci1GUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246ImJpbGxpb24ifSxvcmRpbmFsOk90PT4xPT09''@;'; put 'put ''T3Q/ImVyIjoiXHhlOG1lIixieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJvIiwiS2lvIiwiTWlvIiwiR2lvIiwiVGlvIiwiUGlvIiwiRWlvIiwiWmlvIiwiWWlvIl0sZGVjaW1hbFN1ZmZpeGVzOlsibyIsIktvIiwiTW8iLCJHbyIsIlRvIiwiUG8iLCJFbyIsIlpvIiwiWW8iXX0sY3VycmVuY3k6''@;'; put 'put ''e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShxdCk7dmFyIGh0PXF0LmV4cG9ydHMsdnQ9e2V4''@;'; put 'put ''cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImhlLUlMIixk''@;'; put 'put ''ZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNWQwXHUwNWRjXHUwNWUzIixtaWxsaW9uOiJcdTA1ZGVcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYiLGJpbGxpb246Ilx1MDVkZVx1MDVkOVx1MDVkY1x1MDVkOVx1''@;'; put 'put ''MDVkMFx1MDVlOFx1MDVkMyIsdHJpbGxpb246Ilx1MDVkOFx1MDVlOFx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYSIscG9zaXRpb246InByZWZpeCIsY29kZToiSUxTIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3lGb3JtYXQ6e3Rob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVj''@;'; put 'put ''aW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1''@;'; put 'put ''dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh2dCk7dmFyIFl0PXZ0LmV4cG9ydHMsdHQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2Vz''@;'; put 'put ''TW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6Imh1LUhVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiRSIsbWls''@;'; put 'put ''bGlvbjoiTSIsYmlsbGlvbjoiTXJkIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkZ0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiSFVGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVu''@;'; put 'put ''Z3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3ki''@;'; put 'put ''LG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh0dCk7dmFyIFVlPXR0LmV4cG9ydHMsJGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImlkIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiciIsbWlsbGlvbjoiaiIsYmlsbGlvbjoibSIsdHJpbGxp''@;'; put 'put ''b246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJScCIsY29kZToiSURSIn19KX0oJGUpO3ZhciBMZT0kZS5leHBvcnRzLG50PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYm''@;'; put 'put ''T3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJpdC1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6''@;'; put 'put ''Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YjAifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLGNvZGU6IkNIRiJ9fSl9KG50KTt2YXIgcm49bnQuZXhwb3J0cyx4dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9u''@;'; put 'put ''KG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiaXQtSVQiLGRlbGltaXRlcnM6e3Rob3VzYW5k''@;'; put 'put ''czoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZp''@;'; put 'put ''eCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh4dCk7dmFyIFR0PXh0LmV4cG9ydHMseW49e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6ImphLUpQIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6''@;'; put 'put ''Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9u''@;'; put 'put ''OiJwcmVmaXgiLGNvZGU6IkpQWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oeW4pO3ZhciBYdD15bi5leHBvcnRzLFF0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJrby1LUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1Y2M5YyIsbWlsbGlvbjoi''@;'; put 'put ''XHViYzMxXHViOWNjIixiaWxsaW9uOiJcdWMyZWRcdWM1YjUiLHRyaWxsaW9uOiJcdWM3N2NcdWM4NzAifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYTkiLGNvZGU6IktQVyJ9fSl9KFF0KTt2YXIgWHI9UXQuZXhwb3J0cyxzbj17ZXhwb3J0''@;'; put 'put ''czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoibHYtTFYiLGRlbGlt''@;'; put 'put ''aXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0XHUwMTZia3N0LiIsbWlsbGlvbjoibWlsai4iLGJpbGxpb246Im1sanJkLiIsdHJpbGxpb246InRyaWxqLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5Ontz''@;'; put 'put ''eW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91''@;'; put 'put ''ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9D''@;'; put 'put ''dXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oc24pO3ZhciBpdD1zbi5leHBvcnRzLENyPXtleHBv''@;'; put 'put ''cnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJuYi1OTyIsZGVs''@;'; put 'put ''aW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Ik0iLGJpbGxpb246Im1kIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToi''@;'; put 'put ''Tk9LIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''fSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShDcik7dmFyIEx0PUNyLmV4cG9ydHMsd3Q9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6Im5iIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZp''@;'; put 'put ''YXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fSl9KHd0KTt2YXIgUm49d3QuZXhwb3J0cyxRZT17ZXhwb3J0czp7''@;'; put 'put ''fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoibmwtQkUiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6T3Q9PntsZXQgSnI9T3QlMTAwO3JldHVybiAwIT09T3QmJkpyPD0xfHw4PT09SnJ8fEpyPj0y''@;'; put 'put ''MD8ic3RlIjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3Vy''@;'; put 'put ''RGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1''@;'; put 'put ''cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShRZSk7dmFyIFB0PVFlLmV4cG9ydHMsUXI9e2V4cG9y''@;'; put 'put ''dHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6Im5sLU5MIixkZWxp''@;'; put 'put ''bWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtcmQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOk90PT57bGV0IEpyPU90JTEwMDtyZXR1cm4gMCE9PU90JiZKcjw9MXx8OD09PUpyfHxK''@;'; put 'put ''cj49MjA/InN0ZSI6ImRlIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5''@;'; put 'put ''OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFFy''@;'; put 'put ''KTt2YXIgTmU9UXIuZXhwb3J0cyx5dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6''@;'; put 'put ''T3R9KHtsYW5ndWFnZVRhZzoibm4iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJy''@;'; put 'put ''ZW5jeTp7c3ltYm9sOiJrciIsY29kZToiTk9LIn19KX0oeXQpO3ZhciBycj15dC5leHBvcnRzLGF0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJwbC1QTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR5cy4iLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlv''@;'; put 'put ''bjoiYmxuIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6IiB6XHUwMTQyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUExOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3Nh''@;'; put 'put ''OjB9fX0pfShhdCk7dmFyIF90PWF0LmV4cG9ydHMsd249e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9P''@;'; put 'put ''dC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6InB0LUJSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsIixtaWxsaW9uOiJtaWxoXHhmNWVzIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6IlIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJCUkwifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3Vy''@;'; put 'put ''RGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1''@;'; put 'put ''cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh3bik7dmFyICR0PXduLmV4cG9ydHMsSHQ9e2V4cG9y''@;'; put 'put ''dHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6InB0LVBUIixkZWxp''@;'; put 'put ''bWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0''@;'; put 'put ''aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJh''@;'; put 'put ''Z2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxs''@;'; put 'put ''V2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShIdCk7dmFyIHNpPUh0LmV4cG9ydHMsbm49e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShP''@;'; put 'put ''dCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRp''@;'; put 'put ''b25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KG5uKTt2YXIgbG49bm4uZXhwb3J0cyxraT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90''@;'; put 'put ''Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJt''@;'; put 'put ''aWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRw''@;'; put 'put ''dXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5''@;'; put 'put ''IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oa2kpO3ZhciBhbj1raS5leHBvcnRzLEd0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJydS1SVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0''@;'; put 'put ''MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTA0NDBcdTA0NDNcdTA0MzEuIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUlVCIn0sY3VycmVu''@;'; put 'put ''Y3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRw''@;'; put 'put ''dXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5''@;'; put 'put ''IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oR3QpO3ZhciBlYT1HdC5leHBvcnRzLG1pPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJydS1VQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0''@;'; put 'put ''MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxjdXJyZW5jeUZvcm1hdDp7dGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3ki''@;'; put 'put ''LG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShtaSk7dmFyIGZyPW1pLmV4cG9ydHMsJGk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbiBuaShPdCl7cmV0dXJuIE90JiZPdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoT3QsImRlZmF1bHQiKT9PdC5kZWZhdWx0Ok90fSh7bGFuZ3VhZ2VUYWc6InNrLVNLIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlv''@;'; put 'put ''bjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KCRpKTt2YXIgS2k9JGkuZXhwb3J0cyxWaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoic2wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixi''@;'; put 'put ''aWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oVmkpO3ZhciBxcj1WaS5leHBvcnRzLHVhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJzci1DeXJsLVJTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6Iiwi''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiJSU0QiLGNvZGU6IlJTRCJ9fSl9KHVhKTt2YXIg''@;'; put 'put ''Rmk9dWEuZXhwb3J0cyxSYT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHts''@;'; put 'put ''YW5ndWFnZVRhZzoic3YtU0UiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246InRtZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixw''@;'; put 'put ''b3NpdGlvbjoicG9zdGZpeCIsY29kZToiU0VLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxh''@;'; put 'put ''dmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oUmEpO3ZhciBvaT1SYS5leHBvcnRzLFVpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24g''@;'; put 'put ''bmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJ0aC1USCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2''@;'; put 'put ''aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MGUxZVx1MGUzMVx1MGUxOSIsbWlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5IixiaWxsaW9uOiJcdTBlMWVcdTBlMzFcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLHRyaWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTlcdTBl''@;'; put 'put ''MjVcdTBlNDlcdTBlMzJcdTBlMTkifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTBlM2YiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUSEIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFj''@;'; put 'put ''ZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3Nh''@;'; put 'put ''OjB9fX0pfShVaSk7dmFyIFZhPVVpLmV4cG9ydHMsdXI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcil7b3IuZXhwb3J0cz1mdW5jdGlvbigpe2NvbnN0IE90PXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6''@;'; put 'put ''IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw0MDoiJ1x1MDEzMW5jXHUwMTMxIiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEz''@;'; put 'put ''MW5jXHUwMTMxIn07cmV0dXJuIGZ1bmN0aW9uIG5pKEpyKXtyZXR1cm4gSnImJkpyLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChKciwiZGVmYXVsdCIpP0pyLmRlZmF1bHQ6SnJ9KHtsYW5ndWFnZVRhZzoidHItVFIiLGRlbGltaXRlcnM6e3Rob3Vz''@;'; put 'put ''YW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJiaW4iLG1pbGxpb246Im1pbHlvbiIsYmlsbGlvbjoibWlseWFyIix0cmlsbGlvbjoidHJpbHlvbiJ9LG9yZGluYWw6SnI9PntpZigwPT09SnIpcmV0dXJuIidcdTAxMzFuY1x1MDEzMSI7bGV0IEYwPUpyJTEw''@;'; put 'put ''O3JldHVybiBPdFtGMF18fE90W0pyJTEwMC1GMF18fE90W0pyPj0xMDA/MTAwOm51bGxdfSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYmEiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUUlkifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFj''@;'; put 'put ''ZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6''@;'; put 'put ''MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KCl9KHVyKTt2YXIgZmE9dXIuZXhwb3J0cyx4aT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoidWstVUEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0MzhcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2Nc''@;'; put 'put ''dTA0M2JcdTA0M2QiLGJpbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQ0MFx1MDQzNCIsdHJpbGxpb246Ilx1MDQzMVx1MDQzYlx1MDQzZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiNCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0''@;'; put 'put ''Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJy''@;'; put 'put ''ZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHhpKTt2YXIgb2E9eGkuZXhwb3J0cyxYaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiemgtQ04iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1''@;'; put 'put ''NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29kZToiQ05ZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToy''@;'; put 'put ''fSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oWGkpO3ZhciBJcj1YaS5leHBvcnRzLGJv''@;'; put 'put ''PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJ6aC1N''@;'; put 'put ''TyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''Ii4ifSxjdXJyZW5jeTp7c3ltYm9sOiJNT1AiLGNvZGU6Ik1PUCJ9fSl9KGJvKTt2YXIgWGE9Ym8uZXhwb3J0cyxGbD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yKXtvci5leHBvcnRzPWZ1bmN0aW9uIG5pKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''aGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9KHtsYW5ndWFnZVRhZzoiemgtU0ciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIs''@;'; put 'put ''YmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIsY29kZToiU0dEIn19KX0oRmwpO3ZhciBJMT1GbC5leHBvcnRzLGl1PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3Ipe29yLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24gbmkoT3Qpe3JldHVybiBPdCYmT3QuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE90LCJkZWZhdWx0Iik/T3QuZGVmYXVsdDpPdH0oe2xhbmd1YWdlVGFnOiJ6aC1UVyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNp''@;'; put 'put ''bWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1N2IyYyJ9LGN1cnJlbmN5OntzeW1ib2w6Ik5UJCIs''@;'; put 'put ''Y29kZToiVFdEIn19KX0oaXUpO3ZhciB5MD1pdS5leHBvcnRzO3JldHVybiBmdW5jdGlvbihvcil7b3IuYmc9aCxvclsiY3MtQ1oiXT1JLG9yWyJkYS1ESyJdPVQsb3JbImRlLUFUIl09TSxvclsiZGUtQ0giXT1ELG9yWyJkZS1ERSJdPUIsb3JbImRlLUxJIl09Tixvci5lbD16LG9yWyJlbi1B''@;'; put 'put ''VSJdPVUsb3JbImVuLUdCIl09WCxvclsiZW4tSUUiXT1zZSxvclsiZW4tTloiXT1fZSxvclsiZW4tWkEiXT1GZSxvclsiZXMtQVIiXT1zLG9yWyJlcy1DTCJdPXYsb3JbImVzLUNPIl09XyxvclsiZXMtQ1IiXT1MLG9yWyJlcy1FUyJdPWwsb3JbImVzLU1YIl09cSxvclsiZXMtTkkiXT1RLG9y''@;'; put 'put ''WyJlcy1QRSJdPVBlLG9yWyJlcy1QUiJdPXFlLG9yWyJlcy1TViJdPXVlLG9yWyJldC1FRSJdPU9lLG9yWyJmYS1JUiJdPWtlLG9yWyJmaS1GSSJdPU1lLG9yWyJmaWwtUEgiXT1iZSxvclsiZnItQ0EiXT1wdCxvclsiZnItQ0giXT1ZZSxvclsiZnItRlIiXT1odCxvclsiaGUtSUwiXT1ZdCxv''@;'; put 'put ''clsiaHUtSFUiXT1VZSxvci5pZD1MZSxvclsiaXQtQ0giXT1ybixvclsiaXQtSVQiXT1UdCxvclsiamEtSlAiXT1YdCxvclsia28tS1IiXT1YcixvclsibHYtTFYiXT1pdCxvclsibmItTk8iXT1MdCxvci5uYj1SbixvclsibmwtQkUiXT1QdCxvclsibmwtTkwiXT1OZSxvci5ubj1ycixvclsi''@;'; put 'put ''cGwtUEwiXT1fdCxvclsicHQtQlIiXT0kdCxvclsicHQtUFQiXT1zaSxvclsicm8tUk8iXT1sbixvci5ybz1hbixvclsicnUtUlUiXT1lYSxvclsicnUtVUEiXT1mcixvclsic2stU0siXT1LaSxvci5zbD1xcixvclsic3ItQ3lybC1SUyJdPUZpLG9yWyJzdi1TRSJdPW9pLG9yWyJ0aC1USCJd''@;'; put 'put ''PVZhLG9yWyJ0ci1UUiJdPWZhLG9yWyJ1ay1VQSJdPW9hLG9yWyJ6aC1DTiJdPUlyLG9yWyJ6aC1NTyJdPVhhLG9yWyJ6aC1TRyJdPUkxLG9yWyJ6aC1UVyJdPXkwfShkKSxmdW5jdGlvbiBqKG9yKXtyZXR1cm4gb3ImJm9yLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChvciwiZGVmYXVsdCIpP29yLmRlZmF1bHQ6b3J9KGQpfSgpfSw4MzEzOCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ5NjA5KTtqLmNlcnRpZmljYXRlPWQoOTQ3NzIpO3ZhciBoPVMuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCku''@;'; put 'put ''b2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIi''@;'; put 'put ''KS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO2ouUlNBUHJpdmF0ZUtleT1oO3ZhciBvPVMuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEo''@;'; put 'put ''KS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtqLlJTQVB1YmxpY0tleT1vO3ZhciBJPVMuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0''@;'; put 'put ''aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgi''@;'; put 'put ''ZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLGY9Uy5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoSSksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtqLlB1YmxpY0tl''@;'; put 'put ''eT1mO3ZhciBUPVMuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoSSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7ai5Qcml2''@;'; put 'put ''YXRlS2V5PVQ7dmFyIEE9Uy5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlz''@;'; put 'put ''LmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7ai5FbmNyeXB0ZWRQcml2YXRlS2V5PUE7dmFyIE09Uy5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5v''@;'; put 'put ''YmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO2ouRFNBUHJpdmF0ZUtleT1NLGou''@;'; put 'put ''RFNBcGFyYW09Uy5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgTz1TLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksRD1TLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5j''@;'; put 'put ''dGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKE8pLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgp''@;'; put 'put ''LmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO2ouRUNQcml2YXRlS2V5PUQsai5zaWduYXR1cmU9Uy5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDk0NzcyKHRlLGosZCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBTPWQoNDk2MDkpLGg9Uy5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLG89Uy5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0aGlz''@;'; put 'put ''LnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksST1TLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFy''@;'; put 'put ''YW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLGY9Uy5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoSSksdGhpcy5rZXkoInN1Ympl''@;'; put 'put ''Y3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxUPVMuZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2Yobyl9KSxBPVMuZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKFQpfSksTT1TLmRlZmluZSgiTmFtZSIsZnVu''@;'; put 'put ''Y3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoQSl9KX0pLE89Uy5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoaCksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKGgpKX0pLEQ9Uy5kZWZp''@;'; put 'put ''bmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksRT1TLmRlZmluZSgiVEJTQ2VydGlmaWNhdGUi''@;'; put 'put ''LGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5pbnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKEkpLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoTSksdGhp''@;'; put 'put ''cy5rZXkoInZhbGlkaXR5IikudXNlKE8pLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKE0pLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZShmKSx0aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzdWJq''@;'; put 'put ''ZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoRCkub3B0aW9uYWwoKSl9KSxCPVMuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5r''@;'; put 'put ''ZXkoInRic0NlcnRpZmljYXRlIikudXNlKEUpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoSSksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkpfSk7dGUuZXhwb3J0cz1CfSw4OTQ3Mih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz0vUHJvYy1UeXBlOiA0''@;'; put 'put ''LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxoPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxvPS9eLS0tLS1C''@;'; put 'put ''RUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLEk9ZCgxODIxMSksZj1kKDQzMzg4KSxUPWQoMjcwNTQpLkJ1ZmZlcjt0ZS5leHBvcnRzPWZ1bmN0aW9uKEEsTSl7dmFyIEUsTz1BLnRvU3RyaW5nKCksRD1PLm1h''@;'; put 'put ''dGNoKFMpO2lmKEQpe3ZhciBGPSJhZXMiK0RbMV0sTj1ULmZyb20oRFsyXSwiaGV4IiksSD1ULmZyb20oRFszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLHo9SShNLE4uc2xpY2UoMCw4KSxwYXJzZUludChEWzFdLDEwKSkua2V5LFo9W10sVT1mLmNyZWF0ZURlY2lwaGVyaXYo''@;'; put 'put ''Rix6LE4pO1oucHVzaChVLnVwZGF0ZShIKSksWi5wdXNoKFUuZmluYWwoKSksRT1ULmNvbmNhdChaKX1lbHNle3ZhciBCPU8ubWF0Y2gobyk7RT1ULmZyb20oQlsyXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6Ty5tYXRjaChoKVsxXSxkYXRhOkV9fX0sNjU2''@;'; put 'put ''NjcodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg4MzEzOCksaD1kKDE1NTc5KSxvPWQoODk0NzIpLEk9ZCg0MzM4OCksZj1kKDkzMzk3KS5wYmtkZjJTeW5jLFQ9ZCgyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIE0oTyl7dmFyIEQ7Im9iamVjdCI9PXR5cGVvZiBPJiYhVC5pc0J1ZmZlcihP''@;'; put 'put ''KSYmKEQ9Ty5wYXNzcGhyYXNlLE89Ty5rZXkpLCJzdHJpbmciPT10eXBlb2YgTyYmKE89VC5mcm9tKE8pKTt2YXIgTixILEU9byhPLEQpLEI9RS50YWcsRj1FLmRhdGE7c3dpdGNoKEIpe2Nhc2UiQ0VSVElGSUNBVEUiOkg9Uy5jZXJ0aWZpY2F0ZS5kZWNvZGUoRiwiZGVyIikudGJzQ2VydGlm''@;'; put 'put ''aWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goSHx8KEg9Uy5QdWJsaWNLZXkuZGVjb2RlKEYsImRlciIpKSxOPUguYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBTLlJTQVB1Ymxp''@;'; put 'put ''Y0tleS5kZWNvZGUoSC5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBILnN1YmplY3RQcml2YXRlS2V5PUguc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6SH07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIEgu''@;'; put 'put ''YWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PVMuRFNBcGFyYW0uZGVjb2RlKEguc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOkguYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrTil9Y2FzZSJFTkNS''@;'; put 'put ''WVBURUQgUFJJVkFURSBLRVkiOkY9ZnVuY3Rpb24gQShPLEQpe3ZhciBFPU8uYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LEI9cGFyc2VJbnQoTy5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLEY9aFtPLmFsZ29yaXRobS5k''@;'; put 'put ''ZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sTj1PLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixIPU8uc3ViamVjdFByaXZhdGVLZXksej1wYXJzZUludChGLnNwbGl0KCItIilbMV0sMTApLzgsWj1mKEQsRSxCLHosInNoYTEiKSxVPUkuY3JlYXRlRGVjaXBoZXJpdihGLFosTiks''@;'; put 'put ''Sz1bXTtyZXR1cm4gSy5wdXNoKFUudXBkYXRlKEgpKSxLLnB1c2goVS5maW5hbCgpKSxULmNvbmNhdChLKX0oRj1TLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKEYsImRlciIpLEQpO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChOPShIPVMuUHJpdmF0ZUtleS5kZWNvZGUoRiwiZGVyIikp''@;'; put 'put ''LmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gUy5SU0FQcml2YXRlS2V5LmRlY29kZShILnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6SC5hbGdvcml0aG0u''@;'; put 'put ''Y3VydmUscHJpdmF0ZUtleTpTLkVDUHJpdmF0ZUtleS5kZWNvZGUoSC5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIEguYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1TLkRTQXBhcmFtLmRlY29kZShILnN1YmplY3RQ''@;'; put 'put ''cml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6SC5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitOKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gUy5SU0FQdWJsaWNLZXkuZGVjb2RlKEYsImRlciIpO2Nhc2Ui''@;'; put 'put ''UlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gUy5SU0FQcml2YXRlS2V5LmRlY29kZShGLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOlMuRFNBUHJpdmF0ZUtleS5kZWNvZGUoRiwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntj''@;'; put 'put ''dXJ2ZTooRj1TLkVDUHJpdmF0ZUtleS5kZWNvZGUoRiwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpGLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrQil9fU0uc2lnbmF0dXJlPVMuc2lnbmF0dXJlLHRlLmV4cG9ydHM9''@;'; put 'put ''TX0sOTMzOTcodGUsaixkKXsidXNlIHN0cmljdCI7ai5wYmtkZjI9ZCg4MjY4NSksai5wYmtkZjJTeW5jPWQoNTkxMTEpfSw4MjY4NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgVCxELFM9ZCgyNzA1NCkuQnVmZmVyLGg9ZCg4NjExMSksbz1kKDQ1MzkyKSxJPWQoNTkxMTEpLGY9ZCg3NjY0''@;'; put 'put ''MyksQT1nbG9iYWwuY3J5cHRvJiZnbG9iYWwuY3J5cHRvLnN1YnRsZSxNPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01''@;'; put 'put ''MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSxPPVtdO2Z1bmN0aW9uIEUoKXtyZXR1cm4gRHx8KEQ9Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLm5leHRUaWNrP2dsb2JhbC5wcm9jZXNzLm5leHRUaWNrOmdsb2JhbC5xdWV1ZU1pY3JvdGFzaz9nbG9iYWwucXVldWVNaWNy''@;'; put 'put ''b3Rhc2s6Z2xvYmFsLnNldEltbWVkaWF0ZT9nbG9iYWwuc2V0SW1tZWRpYXRlOmdsb2JhbC5zZXRUaW1lb3V0KX1mdW5jdGlvbiBCKEgseixaLFUsSyl7cmV0dXJuIEEuaW1wb3J0S2V5KCJyYXciLEgse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKFgp''@;'; put 'put ''e3JldHVybiBBLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDp6LGl0ZXJhdGlvbnM6WixoYXNoOntuYW1lOkt9fSxYLFU8PDMpfSkudGhlbihmdW5jdGlvbihYKXtyZXR1cm4gUy5mcm9tKFgpfSl9dGUuZXhwb3J0cz1mdW5jdGlvbihILHosWixVLEssWCl7aWYoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIEsmJihYPUssSz12b2lkIDApLGgoWixVKSxIPWYoSCxvLCJQYXNzd29yZCIpLHo9Zih6LG8sIlNhbHQiKSwiZnVuY3Rpb24iIT10eXBlb2YgWCl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpO3ZhciBuZT1NWyhLPUt8fCJzaGExIikudG9M''@;'; put 'put ''b3dlckNhc2UoKV07bmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBnbG9iYWwuUHJvbWlzZT9mdW5jdGlvbiBOKEgseil7SC50aGVuKGZ1bmN0aW9uKFope0UoKShmdW5jdGlvbigpe3oobnVsbCxaKX0pfSxmdW5jdGlvbihaKXtFKCkoZnVuY3Rpb24oKXt6KFopfSl9KX0oZnVuY3Rpb24gRihIKXtp''@;'; put 'put ''ZihnbG9iYWwucHJvY2VzcyYmIWdsb2JhbC5wcm9jZXNzLmJyb3dzZXJ8fCFBfHwhQS5pbXBvcnRLZXl8fCFBLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09T1tIXSlyZXR1cm4gT1tIXTt2YXIgej1CKFQ9VHx8Uy5hbGxvYyg4KSxULDEwLDEyOCxI''@;'; put 'put ''KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4gT1tIXT16LHp9KG5lKS50aGVuKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2U/QihILHosWixVLG5lKTpJKEgseixaLFUsSyl9KSxYKTpFKCkoZnVuY3Rpb24oKXt2YXIgc2U7dHJ5e3NlPUkoSCx6''@;'; put 'put ''LFosVSxLKX1jYXRjaChoZSl7cmV0dXJuIHZvaWQgWChoZSl9WChudWxsLHNlKX0pfX0sNDUzOTIodGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgajtqPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLnZlcnNp''@;'; put 'put ''b24/cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04Iix0ZS5leHBvcnRzPWp9LDg2MTExKHRlKXsidXNlIHN0cmljdCI7dmFyIGo9aXNGaW5pdGUsZD1NYXRoLnBvdygyLDMwKS0xO3RlLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24oUyxoKXtpZigibnVtYmVyIiE9dHlwZW9mIFMpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihTPDB8fCFqKFMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBoKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoaDwwfHxoPmR8fGghPWgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDU5MTExKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODM0MDcpLGg9ZCgzNjYzNiksbz1kKDI1NDQzKSxJPWQo''@;'; put 'put ''MjcwNTQpLkJ1ZmZlcixmPWQoODYxMTEpLFQ9ZCg0NTM5MiksQT1kKDc2NjQzKSxNPUkuYWxsb2MoMTI4KSxPPXtfX3Byb3RvX186bnVsbCxtZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQsInNoYTUxMi0yNTYiOjMyLHJpcGVtZDE2MDoyMCxy''@;'; put 'put ''bWQxNjA6MjB9LEQ9e19fcHJvdG9fXzpudWxsLCJzaGEtMSI6InNoYTEiLCJzaGEtMjI0Ijoic2hhMjI0Iiwic2hhLTI1NiI6InNoYTI1NiIsInNoYS0zODQiOiJzaGEzODQiLCJzaGEtNTEyIjoic2hhNTEyIiwicmlwZW1kLTE2MCI6InJpcGVtZDE2MCJ9O2Z1bmN0aW9uIEUoSCl7cmV0dXJu''@;'; put 'put ''KG5ldyBoKS51cGRhdGUoSCkuZGlnZXN0KCl9ZnVuY3Rpb24gRihILHosWil7dmFyIFU9ZnVuY3Rpb24gQihIKXtyZXR1cm4icm1kMTYwIj09PUh8fCJyaXBlbWQxNjAiPT09SD9FOiJtZDUiPT09SD9TOmZ1bmN0aW9uIHooWil7cmV0dXJuIG8oSCkudXBkYXRlKFopLmRpZ2VzdCgpfX0oSCks''@;'; put 'put ''Sz0ic2hhNTEyIj09PUh8fCJzaGEzODQiPT09SD8xMjg6NjQ7ei5sZW5ndGg+Sz96PVUoeik6ei5sZW5ndGg8SyYmKHo9SS5jb25jYXQoW3osTV0sSykpO2Zvcih2YXIgWD1JLmFsbG9jVW5zYWZlKEsrT1tIXSksbmU9SS5hbGxvY1Vuc2FmZShLK09bSF0pLHNlPTA7c2U8SztzZSsrKVhbc2Vd''@;'; put 'put ''PTU0Xnpbc2VdLG5lW3NlXT05Ml56W3NlXTt2YXIgaGU9SS5hbGxvY1Vuc2FmZShLK1orNCk7WC5jb3B5KGhlLDAsMCxLKSx0aGlzLmlwYWQxPWhlLHRoaXMuaXBhZDI9WCx0aGlzLm9wYWQ9bmUsdGhpcy5hbGc9SCx0aGlzLmJsb2Nrc2l6ZT1LLHRoaXMuaGFzaD1VLHRoaXMuc2l6ZT1PW0hd''@;'; put 'put ''fUYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihILHope3JldHVybiBILmNvcHkoeix0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHopLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sdGUuZXhwb3J0cz1mdW5jdGlvbiBOKEgseixaLFUsSyl7Ziha''@;'; put 'put ''LFUpLEg9QShILFQsIlBhc3N3b3JkIiksej1BKHosVCwiU2FsdCIpO3ZhciBYPShLfHwic2hhMSIpLnRvTG93ZXJDYXNlKCksbmU9RFtYXXx8WCxzZT1PW25lXTtpZigibnVtYmVyIiE9dHlwZW9mIHNlfHwhc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGlnZXN0IGFsZ29yaXRobSBub3Qgc3Vw''@;'; put 'put ''cG9ydGVkOiAiK0spO3ZhciBoZT1uZXcgRihuZSxILHoubGVuZ3RoKSxfZT1JLmFsbG9jVW5zYWZlKFUpLG1lPUkuYWxsb2NVbnNhZmUoei5sZW5ndGgrNCk7ei5jb3B5KG1lLDAsMCx6Lmxlbmd0aCk7Zm9yKHZhciBGZT0wLFI9c2Uscz1NYXRoLmNlaWwoVS9SKSx1PTE7dTw9czt1Kyspe21l''@;'; put 'put ''LndyaXRlVUludDMyQkUodSx6Lmxlbmd0aCk7Zm9yKHZhciB2PWhlLnJ1bihtZSxoZS5pcGFkMSkscD12LF89MTtfPFo7XysrKXtwPWhlLnJ1bihwLGhlLmlwYWQyKTtmb3IodmFyIGs9MDtrPFI7aysrKXZba11ePXBba119di5jb3B5KF9lLEZlKSxGZSs9Un1yZXR1cm4gX2V9fSw3NjY0Myh0''@;'; put 'put ''ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI3MDU0KS5CdWZmZXIsaD1kKDQxMDkwKSxvPXR5cGVvZiBVaW50OEFycmF5PCJ1IixmPW8mJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldzt0ZS5leHBvcnRzPWZ1bmN0aW9uKFQsQSxNKXtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIFR8fFMuaXNCdWZmZXIoVCl8fG8mJlQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxmJiZmKFQpKXJldHVybiBoKFQsQSk7dGhyb3cgbmV3IFR5cGVFcnJvcihNKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldyIpfX0sNTAxOSh0''@;'; put 'put ''ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9WyJGbG9hdDE2QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMy''@;'; put 'put ''QXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXX0sOTY1Nih0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9dHlwZW9mIHByb2Nlc3M+InUifHwhcHJvY2Vzcy52ZXJzaW9ufHwwPT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09cHJvY2Vzcy52ZXJz''@;'; put 'put ''aW9uLmluZGV4T2YoInYxLiIpJiYwIT09cHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/e25leHRUaWNrOmZ1bmN0aW9uIGooZCxTLGgsbyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGQpdGhyb3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVu''@;'; put 'put ''Y3Rpb24nKTt2YXIgZixULEk9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goSSl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhkKTtjYXNlIDI6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtkLmNhbGwobnVsbCxTKX0pO2Nhc2UgMzpyZXR1cm4gcHJvY2Vz''@;'; put 'put ''cy5uZXh0VGljayhmdW5jdGlvbigpe2QuY2FsbChudWxsLFMsaCl9KTtjYXNlIDQ6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtkLmNhbGwobnVsbCxTLGgsbyl9KTtkZWZhdWx0OmZvcihmPW5ldyBBcnJheShJLTEpLFQ9MDtUPGYubGVuZ3RoOylmW1QrK109YXJndW1lbnRz''@;'; put 'put ''W1RdO3JldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7ZC5hcHBseShudWxsLGYpfSl9fX06cHJvY2Vzc30sNTI5NjUodGUsaixkKXtqLnB1YmxpY0VuY3J5cHQ9ZCg4NzI2Nyksai5wcml2YXRlRGVjcnlwdD1kKDk4NjEzKSxqLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKGgsbyl7''@;'; put 'put ''cmV0dXJuIGoucHVibGljRW5jcnlwdChoLG8sITApfSxqLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oaCxvKXtyZXR1cm4gai5wcml2YXRlRGVjcnlwdChoLG8sITApfX0sMzA3MTUodGUsaixkKXt2YXIgUz1kKDY3MjExKSxoPWQoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBvKEkpe3ZhciBmPWgu''@;'; put 'put ''YWxsb2NVbnNhZmUoNCk7cmV0dXJuIGYud3JpdGVVSW50MzJCRShJLDApLGZ9dGUuZXhwb3J0cz1mdW5jdGlvbihJLGYpe2Zvcih2YXIgTSxUPWguYWxsb2MoMCksQT0wO1QubGVuZ3RoPGY7KU09byhBKyspLFQ9aC5jb25jYXQoW1QsUygic2hhMSIpLnVwZGF0ZShJKS51cGRhdGUoTSkuZGln''@;'; put 'put ''ZXN0KCldKTtyZXR1cm4gVC5zbGljZSgwLGYpfX0sMTY1MDgodGUsaixkKXshZnVuY3Rpb24oUyxoKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhSLHMpe2lmKCFSKXRocm93IG5ldyBFcnJvcihzfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEkoUixzKXtSLnN1cGVyXz1zO3ZhciB1''@;'; put 'put ''PWZ1bmN0aW9uKCl7fTt1LnByb3RvdHlwZT1zLnByb3RvdHlwZSxSLnByb3RvdHlwZT1uZXcgdSxSLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1SfWZ1bmN0aW9uIGYoUixzLHUpe2lmKGYuaXNCTihSKSlyZXR1cm4gUjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09UiYmKCgibGUiPT09c3x8ImJlIj09PXMpJiYodT1zLHM9MTApLHRoaXMuX2luaXQoUnx8MCxzfHwxMCx1fHwiYmUiKSl9dmFyIFQ7Im9iamVjdCI9PXR5cGVvZiBTP1MuZXhwb3J0cz1mOmguQk49ZixmLkJOPWYsZi53b3JkU2l6ZT0yNjt0cnl7VD10''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6ZCg1MTA2OSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBBKFIscyl7dmFyIHU9Ui5jaGFyQ29kZUF0KHMpO3JldHVybiB1Pj02NSYmdTw9NzA/dS01NTp1Pj05NyYmdTw9MTAyP3UtODc6dS00''@;'; put 'put ''OCYxNX1mdW5jdGlvbiBNKFIscyx1KXt2YXIgdj1BKFIsdSk7cmV0dXJuIHUtMT49cyYmKHZ8PUEoUix1LTEpPDw0KSx2fWZ1bmN0aW9uIE8oUixzLHUsdil7Zm9yKHZhciBwPTAsXz1NYXRoLm1pbihSLmxlbmd0aCx1KSxrPXM7azxfO2srKyl7dmFyIEw9Ui5jaGFyQ29kZUF0KGspLTQ4O3Aq''@;'; put 'put ''PXYscCs9TD49NDk/TC00OSsxMDpMPj0xNz9MLTE3KzEwOkx9cmV0dXJuIHB9Zi5pc0JOPWZ1bmN0aW9uKHMpe3JldHVybiBzIGluc3RhbmNlb2YgZnx8bnVsbCE9PXMmJiJvYmplY3QiPT10eXBlb2YgcyYmcy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWYud29yZFNpemUmJkFycmF5LmlzQXJy''@;'; put 'put ''YXkocy53b3Jkcyl9LGYubWF4PWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHMuY21wKHUpPjA/czp1fSxmLm1pbj1mdW5jdGlvbihzLHUpe3JldHVybiBzLmNtcCh1KTwwP3M6dX0sZi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocyx1LHYpe2lmKCJudW1iZXIiPT10eXBlb2YgcylyZXR1cm4gdGhp''@;'; put 'put ''cy5faW5pdE51bWJlcihzLHUsdik7aWYoIm9iamVjdCI9PXR5cGVvZiBzKXJldHVybiB0aGlzLl9pbml0QXJyYXkocyx1LHYpOyJoZXgiPT09dSYmKHU9MTYpLG8odT09PSgwfHUpJiZ1Pj0yJiZ1PD0zNik7dmFyIHA9MDsiLSI9PT0ocz1zLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIp''@;'; put 'put ''KVswXSYmKHArKyx0aGlzLm5lZ2F0aXZlPTEpLHA8cy5sZW5ndGgmJigxNj09PXU/dGhpcy5fcGFyc2VIZXgocyxwLHYpOih0aGlzLl9wYXJzZUJhc2Uocyx1LHApLCJsZSI9PT12JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksdSx2KSkpfSxmLnByb3RvdHlwZS5faW5pdE51bWJl''@;'; put 'put ''cj1mdW5jdGlvbihzLHUsdil7czwwJiYodGhpcy5uZWdhdGl2ZT0xLHM9LXMpLHM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnNdLHRoaXMubGVuZ3RoPTEpOnM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcyxzLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlz''@;'; put 'put ''Lmxlbmd0aD0yKToobyhzPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnMscy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09diYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHUsdil9LGYucHJvdG90eXBlLl9pbml0QXJyYXk9''@;'; put 'put ''ZnVuY3Rpb24ocyx1LHYpe2lmKG8oIm51bWJlciI9PXR5cGVvZiBzLmxlbmd0aCkscy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n''@;'; put 'put ''dGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgXyxrLEw9MDtpZigiYmUiPT09dilmb3IocD1zLmxlbmd0aC0xLF89MDtwPj0wO3AtPTMpdGhpcy53b3Jkc1tfXXw9KGs9c1twXXxzW3AtMV08PDh8c1twLTJdPDwxNik8PEwmNjcxMDg4NjMsdGhp''@;'; put 'put ''cy53b3Jkc1tfKzFdPWs+Pj4yNi1MJjY3MTA4ODYzLChMKz0yNCk+PTI2JiYoTC09MjYsXysrKTtlbHNlIGlmKCJsZSI9PT12KWZvcihwPTAsXz0wO3A8cy5sZW5ndGg7cCs9Myl0aGlzLndvcmRzW19dfD0oaz1zW3BdfHNbcCsxXTw8OHxzW3ArMl08PDE2KTw8TCY2NzEwODg2Myx0aGlzLndv''@;'; put 'put ''cmRzW18rMV09az4+PjI2LUwmNjcxMDg4NjMsKEwrPTI0KT49MjYmJihMLT0yNixfKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihzLHUsdil7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChzLmxlbmd0aC11KS82KSx0aGlzLndvcmRzPW5ldyBB''@;'; put 'put ''cnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT0wO3ZhciBMLF89MCxrPTA7aWYoImJlIj09PXYpZm9yKHA9cy5sZW5ndGgtMTtwPj11O3AtPTIpTD1NKHMsdSxwKTw8Xyx0aGlzLndvcmRzW2tdfD02NzEwODg2MyZMLF8+PTE4Pyhf''@;'; put 'put ''LT0xOCx0aGlzLndvcmRzW2srPTFdfD1MPj4+MjYpOl8rPTg7ZWxzZSBmb3IocD0ocy5sZW5ndGgtdSklMj09MD91KzE6dTtwPHMubGVuZ3RoO3ArPTIpTD1NKHMsdSxwKTw8Xyx0aGlzLndvcmRzW2tdfD02NzEwODg2MyZMLF8+PTE4PyhfLT0xOCx0aGlzLndvcmRzW2srPTFdfD1MPj4+MjYp''@;'; put 'put ''Ol8rPTg7dGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHMsdSx2KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgcD0wLF89MTtfPD02NzEwODg2MztfKj11KXArKztwLS0sXz1fL3V8MDtmb3IodmFyIGs9cy5sZW5ndGgtdixMPWslcCx5''@;'; put 'put ''PU1hdGgubWluKGssay1MKSt2LGw9MCxiPXY7Yjx5O2IrPXApbD1PKHMsYixiK3AsdSksdGhpcy5pbXVsbihfKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKTtpZigwIT09TCl7dmFyIHE9MTtmb3IobD1PKHMsYixzLmxlbmd0aCx1KSxi''@;'; put 'put ''PTA7YjxMO2IrKylxKj11O3RoaXMuaW11bG4ocSksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCl9dGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHMpe3Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3Io''@;'; put 'put ''dmFyIHU9MDt1PHRoaXMubGVuZ3RoO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9dGhpcy5sZW5ndGgscy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHMucmVkPXRoaXMucmVkfSxmLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBzPW5ldyBmKG51bGwpO3JldHVy''@;'; put 'put ''biB0aGlzLmNvcHkocyksc30sZi5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihzKXtmb3IoO3RoaXMubGVuZ3RoPHM7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sZi5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10''@;'; put 'put ''aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxmLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30s''@;'; put 'put ''Zi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgRD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiXSxFPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEI9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0Njcy''@;'; put 'put ''MSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0''@;'; put 'put ''OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gTihSLHMsdSl7dS5uZWdhdGl2ZT1zLm5lZ2F0aXZlXlIubmVnYXRpdmU7dmFyIHY9Ui5sZW5ndGgrcy5sZW5ndGh8MDt1Lmxlbmd0aD12LHY9di0xfDA7dmFyIHA9''@;'; put 'put ''MHxSLndvcmRzWzBdLF89MHxzLndvcmRzWzBdLGs9cCpfLHk9ay82NzEwODg2NHwwO3Uud29yZHNbMF09NjcxMDg4NjMmaztmb3IodmFyIGw9MTtsPHY7bCsrKXtmb3IodmFyIGI9eT4+PjI2LHE9NjcxMDg4NjMmeSxHPU1hdGgubWluKGwscy5sZW5ndGgtMSksUT1NYXRoLm1heCgwLGwtUi5s''@;'; put 'put ''ZW5ndGgrMSk7UTw9RztRKyspYis9KGs9KHA9MHxSLndvcmRzW2wtUXwwXSkqKF89MHxzLndvcmRzW1FdKStxKS82NzEwODg2NHwwLHE9NjcxMDg4NjMmazt1LndvcmRzW2xdPTB8cSx5PTB8Yn1yZXR1cm4gMCE9PXk/dS53b3Jkc1tsXT0wfHk6dS5sZW5ndGgtLSx1LnN0cmlwKCl9Zi5wcm90''@;'; put 'put ''b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocyx1KXt2YXIgdjtpZih1PTB8dXx8MSwxNj09PShzPXN8fDEwKXx8ImhleCI9PT1zKXt2PSIiO2Zvcih2YXIgcD0wLF89MCxrPTA7azx0aGlzLmxlbmd0aDtrKyspe3ZhciBMPXRoaXMud29yZHNba10seT0oMTY3NzcyMTUmKEw8PHB8XykpLnRvU3Ry''@;'; put 'put ''aW5nKDE2KTtfPUw+Pj4yNC1wJjE2Nzc3MjE1LChwKz0yKT49MjYmJihwLT0yNixrLS0pLHY9MCE9PV98fGshPT10aGlzLmxlbmd0aC0xP0RbNi15Lmxlbmd0aF0reSt2Onkrdn1mb3IoMCE9PV8mJih2PV8udG9TdHJpbmcoMTYpK3YpO3YubGVuZ3RoJXUhPTA7KXY9IjAiK3Y7cmV0dXJuIDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYodj0iLSIrdiksdn1pZihzPT09KDB8cykmJnM+PTImJnM8PTM2KXt2YXIgbD1FW3NdLGI9QltzXTt2PSIiO3ZhciBxPXRoaXMuY2xvbmUoKTtmb3IocS5uZWdhdGl2ZT0wOyFxLmlzWmVybygpOyl7dmFyIEc9cS5tb2RuKGIpLnRvU3RyaW5nKHMpO3Y9KHE9cS5p''@;'; put 'put ''ZGl2bihiKSkuaXNaZXJvKCk/Ryt2OkRbbC1HLmxlbmd0aF0rRyt2fWZvcih0aGlzLmlzWmVybygpJiYodj0iMCIrdik7di5sZW5ndGgldSE9MDspdj0iMCIrdjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih2PSItIit2KSx2fW8oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQg''@;'; put 'put ''MzYiKX0sZi5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3MrPTQ1MDM1OTk2MjczNzA0OTYrNjcx''@;'; put 'put ''MDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZvKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tczpzfSxmLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9''@;'; put 'put ''LGYucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIG8odHlwZW9mIFQ8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFQscyx1KX0sZi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHMsdSl9LGYucHJvdG90eXBl''@;'; put 'put ''LnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcD10aGlzLmJ5dGVMZW5ndGgoKSxfPXZ8fE1hdGgubWF4KDEscCk7byhwPD1fLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbyhfPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3Ry''@;'; put 'put ''aXAoKTt2YXIgeSxsLGs9ImxlIj09PXUsTD1uZXcgcyhfKSxiPXRoaXMuY2xvbmUoKTtpZihrKXtmb3IobD0wOyFiLmlzWmVybygpO2wrKyl5PWIuYW5kbG4oMjU1KSxiLml1c2hybig4KSxMW2xdPXk7Zm9yKDtsPF87bCsrKUxbbF09MH1lbHNle2ZvcihsPTA7bDxfLXA7bCsrKUxbbF09MDtm''@;'; put 'put ''b3IobD0wOyFiLmlzWmVybygpO2wrKyl5PWIuYW5kbG4oMjU1KSxiLml1c2hybig4KSxMW18tbC0xXT15fXJldHVybiBMfSxmLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocyl7cmV0dXJuIDMyLU1hdGguY2x6MzIocyl9OmZ1bmN0aW9uKHMpe3ZhciB1PXMsdj0w''@;'; put 'put ''O3JldHVybiB1Pj00MDk2JiYodis9MTMsdT4+Pj0xMyksdT49NjQmJih2Kz03LHU+Pj49NyksdT49OCYmKHYrPTQsdT4+Pj00KSx1Pj0yJiYodis9Mix1Pj4+PTIpLHYrdX0sZi5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHMpe2lmKDA9PT1zKXJldHVybiAyNjt2YXIgdT1zLHY9MDty''@;'; put 'put ''ZXR1cm4hKDgxOTEmdSkmJih2Kz0xMyx1Pj4+PTEzKSwhKDEyNyZ1KSYmKHYrPTcsdT4+Pj03KSwhKDE1JnUpJiYodis9NCx1Pj4+PTQpLCEoMyZ1KSYmKHYrPTIsdT4+Pj0yKSwhKDEmdSkmJnYrKyx2fSxmLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdT10aGlzLl9jb3Vu''@;'; put 'put ''dEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt1fSxmLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBzPTAsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXt2YXIgdj10aGlz''@;'; put 'put ''Ll96ZXJvQml0cyh0aGlzLndvcmRzW3VdKTtpZihzKz12LDI2IT09dilicmVha31yZXR1cm4gc30sZi5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sZi5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sZi5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMudGVzdG4ocy0xKT90aGlzLm5vdG4ocykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sZi5w''@;'; put 'put ''cm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxmLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5l''@;'; put 'put ''Z2F0aXZlXj0xKSx0aGlzfSxmLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHMpe2Zvcig7dGhpcy5sZW5ndGg8cy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdV18cy53b3Jkc1t1''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1b3Iocyl9LGYucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaW9yKHMpOnMuY2xvbmUoKS5pb3IodGhpcyl9LGYucHJvdG90eXBlLnVvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3Iocyk6cy5jbG9uZSgpLml1b3IodGhpcyl9LGYucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHMpe3Zh''@;'; put 'put ''ciB1O3U9dGhpcy5sZW5ndGg+cy5sZW5ndGg/czp0aGlzO2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXRoaXMud29yZHNbdl09dGhpcy53b3Jkc1t2XSZzLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD11Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlhbmQ9ZnVuY3Rp''@;'; put 'put ''b24ocyl7cmV0dXJuIG8oISh0aGlzLm5lZ2F0aXZlfHMubmVnYXRpdmUpKSx0aGlzLml1YW5kKHMpfSxmLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHMpOnMuY2xvbmUoKS5pYW5kKHRoaXMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS51YW5kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocyk6cy5jbG9uZSgpLml1YW5kKHRoaXMpfSxmLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihzKXt2YXIgdSx2O3RoaXMubGVuZ3RoPnMubGVuZ3RoPyh1PXRoaXMsdj1z''@;'; put 'put ''KToodT1zLHY9dGhpcyk7Zm9yKHZhciBwPTA7cDx2Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT11LndvcmRzW3BdXnYud29yZHNbcF07aWYodGhpcyE9PXUpZm9yKDtwPHUubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXUud29yZHNbcF07cmV0dXJuIHRoaXMubGVuZ3RoPXUubGVuZ3RoLHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sZi5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihzKXtyZXR1cm4gbyghKHRoaXMubmVnYXRpdmV8cy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Iocyl9LGYucHJvdG90eXBlLnhvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5sZW5ndGg+cy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4''@;'; put 'put ''b3Iocyk6cy5jbG9uZSgpLml4b3IodGhpcyl9LGYucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubGVuZ3RoPnMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihzKTpzLmNsb25lKCkuaXV4b3IodGhpcyl9LGYucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHMpe28oIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBzJiZzPj0wKTt2YXIgdT0wfE1hdGguY2VpbChzLzI2KSx2PXMlMjY7dGhpcy5fZXhwYW5kKHUpLHY+MCYmdS0tO2Zvcih2YXIgcD0wO3A8dTtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyZ+dGhpcy53b3Jkc1twXTtyZXR1cm4gdj4wJiYodGhpcy53b3Jkc1twXT1+''@;'; put 'put ''dGhpcy53b3Jkc1twXSY2NzEwODg2Mz4+MjYtdiksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocyl9LGYucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocyx1KXtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCk7dmFy''@;'; put 'put ''IHY9cy8yNnwwLHA9cyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XT11P3RoaXMud29yZHNbdl18MTw8cDp0aGlzLndvcmRzW3ZdJn4oMTw8cCksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHMpe3ZhciB1LHYscDtpZigwIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSYmMD09PXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx1PXRoaXMuaXN1YihzKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0aXZlKXJldHVybiBzLm5lZ2F0aXZlPTAsdT10aGlzLmlzdWIo''@;'; put 'put ''cykscy5uZWdhdGl2ZT0xLHUuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cy5sZW5ndGg/KHY9dGhpcyxwPXMpOih2PXMscD10aGlzKTtmb3IodmFyIF89MCxrPTA7azxwLmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT02NzEwODg2MyYodT0oMHx2LndvcmRzW2tdKSsoMHxwLndvcmRzW2tdKStf''@;'; put 'put ''KSxfPXU+Pj4yNjtmb3IoOzAhPT1fJiZrPHYubGVuZ3RoO2srKyl0aGlzLndvcmRzW2tdPTY3MTA4ODYzJih1PSgwfHYud29yZHNba10pK18pLF89dT4+PjI2O2lmKHRoaXMubGVuZ3RoPXYubGVuZ3RoLDAhPT1fKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPV8sdGhpcy5sZW5ndGgrKztlbHNl''@;'; put 'put ''IGlmKHYhPT10aGlzKWZvcig7azx2Lmxlbmd0aDtrKyspdGhpcy53b3Jkc1trXT12LndvcmRzW2tdO3JldHVybiB0aGlzfSxmLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocyl7dmFyIHU7cmV0dXJuIDAhPT1zLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocy5uZWdhdGl2ZT0wLHU9dGhp''@;'; put 'put ''cy5zdWIocykscy5uZWdhdGl2ZV49MSx1KTowPT09cy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx1PXMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx1KTp0aGlzLmxlbmd0aD5zLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChzKTpzLmNsb25lKCkuaWFk''@;'; put 'put ''ZCh0aGlzKX0sZi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihzKXtpZigwIT09cy5uZWdhdGl2ZSl7cy5uZWdhdGl2ZT0wO3ZhciB1PXRoaXMuaWFkZChzKTtyZXR1cm4gcy5uZWdhdGl2ZT0xLHUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzLmlhZGQocyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHAsXyx2PXRoaXMuY21wKHMpO2lmKDA9PT12KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2PjA/KHA9dGhpcyxfPXMpOihwPXMsXz10aGlz''@;'; put 'put ''KTtmb3IodmFyIGs9MCxMPTA7TDxfLmxlbmd0aDtMKyspaz0odT0oMHxwLndvcmRzW0xdKS0oMHxfLndvcmRzW0xdKStrKT4+MjYsdGhpcy53b3Jkc1tMXT02NzEwODg2MyZ1O2Zvcig7MCE9PWsmJkw8cC5sZW5ndGg7TCsrKWs9KHU9KDB8cC53b3Jkc1tMXSkrayk+PjI2LHRoaXMud29yZHNb''@;'; put 'put ''TF09NjcxMDg4NjMmdTtpZigwPT09ayYmTDxwLmxlbmd0aCYmcCE9PXRoaXMpZm9yKDtMPHAubGVuZ3RoO0wrKyl0aGlzLndvcmRzW0xdPXAud29yZHNbTF07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEwpLHAhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlz''@;'; put 'put ''LnN0cmlwKCl9LGYucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocyl9O3ZhciBIPWZ1bmN0aW9uKHMsdSx2KXt2YXIgeSxsLGIscD1zLndvcmRzLF89dS53b3JkcyxrPXYud29yZHMsTD0wLHE9MHxwWzBdLEc9ODE5MSZxLFE9cT4+PjEzLHBlPTB8''@;'; put 'put ''cFsxXSxQZT04MTkxJnBlLFplPXBlPj4+MTMscWU9MHxwWzJdLHZlPTgxOTEmcWUsdWU9cWU+Pj4xMyx6ZT0wfHBbM10sT2U9ODE5MSZ6ZSxDZT16ZT4+PjEzLGtlPTB8cFs0XSx4ZT04MTkxJmtlLE1lPWtlPj4+MTMsSWU9MHxwWzVdLGJlPTgxOTEmSWUsd2U9SWU+Pj4xMyxwdD0wfHBbNl0s''@;'; put 'put ''S2U9ODE5MSZwdCxZZT1wdD4+PjEzLHF0PTB8cFs3XSxodD04MTkxJnF0LHZ0PXF0Pj4+MTMsWXQ9MHxwWzhdLHR0PTgxOTEmWXQsVWU9WXQ+Pj4xMywkZT0wfHBbOV0sTGU9ODE5MSYkZSxudD0kZT4+PjEzLHJuPTB8X1swXSx4dD04MTkxJnJuLFR0PXJuPj4+MTMseW49MHxfWzFdLFh0PTgx''@;'; put 'put ''OTEmeW4sUXQ9eW4+Pj4xMyxYcj0wfF9bMl0sc249ODE5MSZYcixpdD1Ycj4+PjEzLENyPTB8X1szXSxMdD04MTkxJkNyLHd0PUNyPj4+MTMsUm49MHxfWzRdLFFlPTgxOTEmUm4sUHQ9Um4+Pj4xMyxRcj0wfF9bNV0sTmU9ODE5MSZRcix5dD1Rcj4+PjEzLHJyPTB8X1s2XSxhdD04MTkxJnJy''@;'; put 'put ''LF90PXJyPj4+MTMsd249MHxfWzddLCR0PTgxOTEmd24sSHQ9d24+Pj4xMyxzaT0wfF9bOF0sbm49ODE5MSZzaSxsbj1zaT4+PjEzLGtpPTB8X1s5XSxhbj04MTkxJmtpLEd0PWtpPj4+MTM7di5uZWdhdGl2ZT1zLm5lZ2F0aXZlXnUubmVnYXRpdmUsdi5sZW5ndGg9MTk7dmFyIGVhPShMKyh5''@;'; put 'put ''PU1hdGguaW11bChHLHh0KSl8MCkrKCg4MTkxJihsPShsPU1hdGguaW11bChHLFR0KSkrTWF0aC5pbXVsKFEseHQpfDApKTw8MTMpfDA7TD0oKGI9TWF0aC5pbXVsKFEsVHQpKSsobD4+PjEzKXwwKSsoZWE+Pj4yNil8MCxlYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoUGUseHQpLGw9KGw9TWF0''@;'; put 'put ''aC5pbXVsKFBlLFR0KSkrTWF0aC5pbXVsKFplLHh0KXwwLGI9TWF0aC5pbXVsKFplLFR0KTt2YXIgbWk9KEwrKHk9eStNYXRoLmltdWwoRyxYdCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsUXQpfDApK01hdGguaW11bChRLFh0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5p''@;'; put 'put ''bXVsKFEsUXQpfDApKyhsPj4+MTMpfDApKyhtaT4+PjI2KXwwLG1pJj02NzEwODg2Myx5PU1hdGguaW11bCh2ZSx4dCksbD0obD1NYXRoLmltdWwodmUsVHQpKStNYXRoLmltdWwodWUseHQpfDAsYj1NYXRoLmltdWwodWUsVHQpLHk9eStNYXRoLmltdWwoUGUsWHQpfDAsbD0obD1sK01hdGgu''@;'; put 'put ''aW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKFplLFh0KXwwLGI9YitNYXRoLmltdWwoWmUsUXQpfDA7dmFyIGZyPShMKyh5PXkrTWF0aC5pbXVsKEcsc24pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLGl0KXwwKStNYXRoLmltdWwoUSxzbil8MCkpPDwxMyl8MDtMPSgoYj1iK01h''@;'; put 'put ''dGguaW11bChRLGl0KXwwKSsobD4+PjEzKXwwKSsoZnI+Pj4yNil8MCxmciY9NjcxMDg4NjMseT1NYXRoLmltdWwoT2UseHQpLGw9KGw9TWF0aC5pbXVsKE9lLFR0KSkrTWF0aC5pbXVsKENlLHh0KXwwLGI9TWF0aC5pbXVsKENlLFR0KSx5PXkrTWF0aC5pbXVsKHZlLFh0KXwwLGw9KGw9bCtN''@;'; put 'put ''YXRoLmltdWwodmUsUXQpfDApK01hdGguaW11bCh1ZSxYdCl8MCxiPWIrTWF0aC5pbXVsKHVlLFF0KXwwLHk9eStNYXRoLmltdWwoUGUsc24pfDAsbD0obD1sK01hdGguaW11bChQZSxpdCl8MCkrTWF0aC5pbXVsKFplLHNuKXwwLGI9YitNYXRoLmltdWwoWmUsaXQpfDA7dmFyICRpPShMKyh5''@;'; put 'put ''PXkrTWF0aC5pbXVsKEcsTHQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLHd0KXwwKStNYXRoLmltdWwoUSxMdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLHd0KXwwKSsobD4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoeGUs''@;'; put 'put ''eHQpLGw9KGw9TWF0aC5pbXVsKHhlLFR0KSkrTWF0aC5pbXVsKE1lLHh0KXwwLGI9TWF0aC5pbXVsKE1lLFR0KSx5PXkrTWF0aC5pbXVsKE9lLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsUXQpfDApK01hdGguaW11bChDZSxYdCl8MCxiPWIrTWF0aC5pbXVsKENlLFF0KXwwLHk9eStNYXRo''@;'; put 'put ''LmltdWwodmUsc24pfDAsbD0obD1sK01hdGguaW11bCh2ZSxpdCl8MCkrTWF0aC5pbXVsKHVlLHNuKXwwLGI9YitNYXRoLmltdWwodWUsaXQpfDAseT15K01hdGguaW11bChQZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLHd0KXwwKStNYXRoLmltdWwoWmUsTHQpfDAsYj1iK01hdGguaW11''@;'; put 'put ''bChaZSx3dCl8MDt2YXIgS2k9KEwrKHk9eStNYXRoLmltdWwoRyxRZSl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsUHQpfDApK01hdGguaW11bChRLFFlKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsUHQpfDApKyhsPj4+MTMpfDApKyhLaT4+PjI2KXwwLEtpJj02''@;'; put 'put ''NzEwODg2Myx5PU1hdGguaW11bChiZSx4dCksbD0obD1NYXRoLmltdWwoYmUsVHQpKStNYXRoLmltdWwod2UseHQpfDAsYj1NYXRoLmltdWwod2UsVHQpLHk9eStNYXRoLmltdWwoeGUsWHQpfDAsbD0obD1sK01hdGguaW11bCh4ZSxRdCl8MCkrTWF0aC5pbXVsKE1lLFh0KXwwLGI9YitNYXRo''@;'; put 'put ''LmltdWwoTWUsUXQpfDAseT15K01hdGguaW11bChPZSxzbil8MCxsPShsPWwrTWF0aC5pbXVsKE9lLGl0KXwwKStNYXRoLmltdWwoQ2Usc24pfDAsYj1iK01hdGguaW11bChDZSxpdCl8MCx5PXkrTWF0aC5pbXVsKHZlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwodmUsd3QpfDApK01hdGguaW11''@;'; put 'put ''bCh1ZSxMdCl8MCxiPWIrTWF0aC5pbXVsKHVlLHd0KXwwLHk9eStNYXRoLmltdWwoUGUsUWUpfDAsbD0obD1sK01hdGguaW11bChQZSxQdCl8MCkrTWF0aC5pbXVsKFplLFFlKXwwLGI9YitNYXRoLmltdWwoWmUsUHQpfDA7dmFyIFZpPShMKyh5PXkrTWF0aC5pbXVsKEcsTmUpfDApfDApKygo''@;'; put 'put ''ODE5MSYobD0obD1sK01hdGguaW11bChHLHl0KXwwKStNYXRoLmltdWwoUSxOZSl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLHl0KXwwKSsobD4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoS2UseHQpLGw9KGw9TWF0aC5pbXVsKEtlLFR0KSkr''@;'; put 'put ''TWF0aC5pbXVsKFllLHh0KXwwLGI9TWF0aC5pbXVsKFllLFR0KSx5PXkrTWF0aC5pbXVsKGJlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsUXQpfDApK01hdGguaW11bCh3ZSxYdCl8MCxiPWIrTWF0aC5pbXVsKHdlLFF0KXwwLHk9eStNYXRoLmltdWwoeGUsc24pfDAsbD0obD1sK01hdGgu''@;'; put 'put ''aW11bCh4ZSxpdCl8MCkrTWF0aC5pbXVsKE1lLHNuKXwwLGI9YitNYXRoLmltdWwoTWUsaXQpfDAseT15K01hdGguaW11bChPZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoQ2UsTHQpfDAsYj1iK01hdGguaW11bChDZSx3dCl8MCx5PXkrTWF0aC5pbXVsKHZl''@;'; put 'put ''LFFlKXwwLGw9KGw9bCtNYXRoLmltdWwodmUsUHQpfDApK01hdGguaW11bCh1ZSxRZSl8MCxiPWIrTWF0aC5pbXVsKHVlLFB0KXwwLHk9eStNYXRoLmltdWwoUGUsTmUpfDAsbD0obD1sK01hdGguaW11bChQZSx5dCl8MCkrTWF0aC5pbXVsKFplLE5lKXwwLGI9YitNYXRoLmltdWwoWmUseXQp''@;'; put 'put ''fDA7dmFyIHFyPShMKyh5PXkrTWF0aC5pbXVsKEcsYXQpfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLF90KXwwKStNYXRoLmltdWwoUSxhdCl8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLF90KXwwKSsobD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMs''@;'; put 'put ''eT1NYXRoLmltdWwoaHQseHQpLGw9KGw9TWF0aC5pbXVsKGh0LFR0KSkrTWF0aC5pbXVsKHZ0LHh0KXwwLGI9TWF0aC5pbXVsKHZ0LFR0KSx5PXkrTWF0aC5pbXVsKEtlLFh0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsUXQpfDApK01hdGguaW11bChZZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFll''@;'; put 'put ''LFF0KXwwLHk9eStNYXRoLmltdWwoYmUsc24pfDAsbD0obD1sK01hdGguaW11bChiZSxpdCl8MCkrTWF0aC5pbXVsKHdlLHNuKXwwLGI9YitNYXRoLmltdWwod2UsaXQpfDAseT15K01hdGguaW11bCh4ZSxMdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTWUsTHQp''@;'; put 'put ''fDAsYj1iK01hdGguaW11bChNZSx3dCl8MCx5PXkrTWF0aC5pbXVsKE9lLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoT2UsUHQpfDApK01hdGguaW11bChDZSxRZSl8MCxiPWIrTWF0aC5pbXVsKENlLFB0KXwwLHk9eStNYXRoLmltdWwodmUsTmUpfDAsbD0obD1sK01hdGguaW11bCh2ZSx5dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHVlLE5lKXwwLGI9YitNYXRoLmltdWwodWUseXQpfDAseT15K01hdGguaW11bChQZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKFBlLF90KXwwKStNYXRoLmltdWwoWmUsYXQpfDAsYj1iK01hdGguaW11bChaZSxfdCl8MDt2YXIgdWE9KEwrKHk9eStNYXRoLmltdWwoRywk''@;'; put 'put ''dCl8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKEcsSHQpfDApK01hdGguaW11bChRLCR0KXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFEsSHQpfDApKyhsPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2Myx5PU1hdGguaW11bCh0dCx4dCksbD0obD1NYXRoLmlt''@;'; put 'put ''dWwodHQsVHQpKStNYXRoLmltdWwoVWUseHQpfDAsYj1NYXRoLmltdWwoVWUsVHQpLHk9eStNYXRoLmltdWwoaHQsWHQpfDAsbD0obD1sK01hdGguaW11bChodCxRdCl8MCkrTWF0aC5pbXVsKHZ0LFh0KXwwLGI9YitNYXRoLmltdWwodnQsUXQpfDAseT15K01hdGguaW11bChLZSxzbil8MCxs''@;'; put 'put ''PShsPWwrTWF0aC5pbXVsKEtlLGl0KXwwKStNYXRoLmltdWwoWWUsc24pfDAsYj1iK01hdGguaW11bChZZSxpdCl8MCx5PXkrTWF0aC5pbXVsKGJlLEx0KXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsd3QpfDApK01hdGguaW11bCh3ZSxMdCl8MCxiPWIrTWF0aC5pbXVsKHdlLHd0KXwwLHk9eStN''@;'; put 'put ''YXRoLmltdWwoeGUsUWUpfDAsbD0obD1sK01hdGguaW11bCh4ZSxQdCl8MCkrTWF0aC5pbXVsKE1lLFFlKXwwLGI9YitNYXRoLmltdWwoTWUsUHQpfDAseT15K01hdGguaW11bChPZSxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLHl0KXwwKStNYXRoLmltdWwoQ2UsTmUpfDAsYj1iK01hdGgu''@;'; put 'put ''aW11bChDZSx5dCl8MCx5PXkrTWF0aC5pbXVsKHZlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwodmUsX3QpfDApK01hdGguaW11bCh1ZSxhdCl8MCxiPWIrTWF0aC5pbXVsKHVlLF90KXwwLHk9eStNYXRoLmltdWwoUGUsJHQpfDAsbD0obD1sK01hdGguaW11bChQZSxIdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFplLCR0KXwwLGI9YitNYXRoLmltdWwoWmUsSHQpfDA7dmFyIEZpPShMKyh5PXkrTWF0aC5pbXVsKEcsbm4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLGxuKXwwKStNYXRoLmltdWwoUSxubil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLGxuKXwwKSsobD4+PjEz''@;'; put 'put ''KXwwKSsoRmk+Pj4yNil8MCxGaSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUseHQpLGw9KGw9TWF0aC5pbXVsKExlLFR0KSkrTWF0aC5pbXVsKG50LHh0KXwwLGI9TWF0aC5pbXVsKG50LFR0KSx5PXkrTWF0aC5pbXVsKHR0LFh0KXwwLGw9KGw9bCtNYXRoLmltdWwodHQsUXQpfDApK01hdGgu''@;'; put 'put ''aW11bChVZSxYdCl8MCxiPWIrTWF0aC5pbXVsKFVlLFF0KXwwLHk9eStNYXRoLmltdWwoaHQsc24pfDAsbD0obD1sK01hdGguaW11bChodCxpdCl8MCkrTWF0aC5pbXVsKHZ0LHNuKXwwLGI9YitNYXRoLmltdWwodnQsaXQpfDAseT15K01hdGguaW11bChLZSxMdCl8MCxsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsTHQpfDAsYj1iK01hdGguaW11bChZZSx3dCl8MCx5PXkrTWF0aC5pbXVsKGJlLFFlKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUsUHQpfDApK01hdGguaW11bCh3ZSxRZSl8MCxiPWIrTWF0aC5pbXVsKHdlLFB0KXwwLHk9eStNYXRoLmltdWwoeGUs''@;'; put 'put ''TmUpfDAsbD0obD1sK01hdGguaW11bCh4ZSx5dCl8MCkrTWF0aC5pbXVsKE1lLE5lKXwwLGI9YitNYXRoLmltdWwoTWUseXQpfDAseT15K01hdGguaW11bChPZSxhdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLF90KXwwKStNYXRoLmltdWwoQ2UsYXQpfDAsYj1iK01hdGguaW11bChDZSxfdCl8''@;'; put 'put ''MCx5PXkrTWF0aC5pbXVsKHZlLCR0KXwwLGw9KGw9bCtNYXRoLmltdWwodmUsSHQpfDApK01hdGguaW11bCh1ZSwkdCl8MCxiPWIrTWF0aC5pbXVsKHVlLEh0KXwwLHk9eStNYXRoLmltdWwoUGUsbm4pfDAsbD0obD1sK01hdGguaW11bChQZSxsbil8MCkrTWF0aC5pbXVsKFplLG5uKXwwLGI9''@;'; put 'put ''YitNYXRoLmltdWwoWmUsbG4pfDA7dmFyIFJhPShMKyh5PXkrTWF0aC5pbXVsKEcsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChHLEd0KXwwKStNYXRoLmltdWwoUSxhbil8MCkpPDwxMyl8MDtMPSgoYj1iK01hdGguaW11bChRLEd0KXwwKSsobD4+PjEzKXwwKSsoUmE+Pj4y''@;'; put 'put ''Nil8MCxSYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsWHQpLGw9KGw9TWF0aC5pbXVsKExlLFF0KSkrTWF0aC5pbXVsKG50LFh0KXwwLGI9TWF0aC5pbXVsKG50LFF0KSx5PXkrTWF0aC5pbXVsKHR0LHNuKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsaXQpfDApK01hdGguaW11bChVZSxzbil8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKFVlLGl0KXwwLHk9eStNYXRoLmltdWwoaHQsTHQpfDAsbD0obD1sK01hdGguaW11bChodCx3dCl8MCkrTWF0aC5pbXVsKHZ0LEx0KXwwLGI9YitNYXRoLmltdWwodnQsd3QpfDAseT15K01hdGguaW11bChLZSxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLFB0KXww''@;'; put 'put ''KStNYXRoLmltdWwoWWUsUWUpfDAsYj1iK01hdGguaW11bChZZSxQdCl8MCx5PXkrTWF0aC5pbXVsKGJlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoYmUseXQpfDApK01hdGguaW11bCh3ZSxOZSl8MCxiPWIrTWF0aC5pbXVsKHdlLHl0KXwwLHk9eStNYXRoLmltdWwoeGUsYXQpfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bCh4ZSxfdCl8MCkrTWF0aC5pbXVsKE1lLGF0KXwwLGI9YitNYXRoLmltdWwoTWUsX3QpfDAseT15K01hdGguaW11bChPZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKE9lLEh0KXwwKStNYXRoLmltdWwoQ2UsJHQpfDAsYj1iK01hdGguaW11bChDZSxIdCl8MCx5PXkrTWF0aC5p''@;'; put 'put ''bXVsKHZlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwodmUsbG4pfDApK01hdGguaW11bCh1ZSxubil8MCxiPWIrTWF0aC5pbXVsKHVlLGxuKXwwO3ZhciBvaT0oTCsoeT15K01hdGguaW11bChQZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKFBlLEd0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''WmUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoWmUsR3QpfDApKyhsPj4+MTMpfDApKyhvaT4+PjI2KXwwLG9pJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxzbiksbD0obD1NYXRoLmltdWwoTGUsaXQpKStNYXRoLmltdWwobnQsc24pfDAsYj1NYXRoLmltdWwobnQsaXQpLHk9''@;'; put 'put ''eStNYXRoLmltdWwodHQsTHQpfDAsbD0obD1sK01hdGguaW11bCh0dCx3dCl8MCkrTWF0aC5pbXVsKFVlLEx0KXwwLGI9YitNYXRoLmltdWwoVWUsd3QpfDAseT15K01hdGguaW11bChodCxRZSl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LFB0KXwwKStNYXRoLmltdWwodnQsUWUpfDAsYj1iK01h''@;'; put 'put ''dGguaW11bCh2dCxQdCl8MCx5PXkrTWF0aC5pbXVsKEtlLE5lKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UseXQpfDApK01hdGguaW11bChZZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFllLHl0KXwwLHk9eStNYXRoLmltdWwoYmUsYXQpfDAsbD0obD1sK01hdGguaW11bChiZSxfdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHdlLGF0KXwwLGI9YitNYXRoLmltdWwod2UsX3QpfDAseT15K01hdGguaW11bCh4ZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKHhlLEh0KXwwKStNYXRoLmltdWwoTWUsJHQpfDAsYj1iK01hdGguaW11bChNZSxIdCl8MCx5PXkrTWF0aC5pbXVsKE9lLG5uKXwwLGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwoT2UsbG4pfDApK01hdGguaW11bChDZSxubil8MCxiPWIrTWF0aC5pbXVsKENlLGxuKXwwO3ZhciBVaT0oTCsoeT15K01hdGguaW11bCh2ZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKHZlLEd0KXwwKStNYXRoLmltdWwodWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitN''@;'; put 'put ''YXRoLmltdWwodWUsR3QpfDApKyhsPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxMdCksbD0obD1NYXRoLmltdWwoTGUsd3QpKStNYXRoLmltdWwobnQsTHQpfDAsYj1NYXRoLmltdWwobnQsd3QpLHk9eStNYXRoLmltdWwodHQsUWUpfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bCh0dCxQdCl8MCkrTWF0aC5pbXVsKFVlLFFlKXwwLGI9YitNYXRoLmltdWwoVWUsUHQpfDAseT15K01hdGguaW11bChodCxOZSl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LHl0KXwwKStNYXRoLmltdWwodnQsTmUpfDAsYj1iK01hdGguaW11bCh2dCx5dCl8MCx5PXkrTWF0aC5p''@;'; put 'put ''bXVsKEtlLGF0KXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsX3QpfDApK01hdGguaW11bChZZSxhdCl8MCxiPWIrTWF0aC5pbXVsKFllLF90KXwwLHk9eStNYXRoLmltdWwoYmUsJHQpfDAsbD0obD1sK01hdGguaW11bChiZSxIdCl8MCkrTWF0aC5pbXVsKHdlLCR0KXwwLGI9YitNYXRoLmltdWwo''@;'; put 'put ''d2UsSHQpfDAseT15K01hdGguaW11bCh4ZSxubil8MCxsPShsPWwrTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoTWUsbm4pfDAsYj1iK01hdGguaW11bChNZSxsbil8MDt2YXIgVmE9KEwrKHk9eStNYXRoLmltdWwoT2UsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChP''@;'; put 'put ''ZSxHdCl8MCkrTWF0aC5pbXVsKENlLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKENlLEd0KXwwKSsobD4+PjEzKXwwKSsoVmE+Pj4yNil8MCxWYSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsUWUpLGw9KGw9TWF0aC5pbXVsKExlLFB0KSkrTWF0aC5pbXVsKG50LFFlKXwwLGI9''@;'; put 'put ''TWF0aC5pbXVsKG50LFB0KSx5PXkrTWF0aC5pbXVsKHR0LE5lKXwwLGw9KGw9bCtNYXRoLmltdWwodHQseXQpfDApK01hdGguaW11bChVZSxOZSl8MCxiPWIrTWF0aC5pbXVsKFVlLHl0KXwwLHk9eStNYXRoLmltdWwoaHQsYXQpfDAsbD0obD1sK01hdGguaW11bChodCxfdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHZ0LGF0KXwwLGI9YitNYXRoLmltdWwodnQsX3QpfDAseT15K01hdGguaW11bChLZSwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKEtlLEh0KXwwKStNYXRoLmltdWwoWWUsJHQpfDAsYj1iK01hdGguaW11bChZZSxIdCl8MCx5PXkrTWF0aC5pbXVsKGJlLG5uKXwwLGw9KGw9bCtNYXRoLmlt''@;'; put 'put ''dWwoYmUsbG4pfDApK01hdGguaW11bCh3ZSxubil8MCxiPWIrTWF0aC5pbXVsKHdlLGxuKXwwO3ZhciB1cj0oTCsoeT15K01hdGguaW11bCh4ZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKHhlLEd0KXwwKStNYXRoLmltdWwoTWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitN''@;'; put 'put ''YXRoLmltdWwoTWUsR3QpfDApKyhsPj4+MTMpfDApKyh1cj4+PjI2KXwwLHVyJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxOZSksbD0obD1NYXRoLmltdWwoTGUseXQpKStNYXRoLmltdWwobnQsTmUpfDAsYj1NYXRoLmltdWwobnQseXQpLHk9eStNYXRoLmltdWwodHQsYXQpfDAsbD0obD1s''@;'; put 'put ''K01hdGguaW11bCh0dCxfdCl8MCkrTWF0aC5pbXVsKFVlLGF0KXwwLGI9YitNYXRoLmltdWwoVWUsX3QpfDAseT15K01hdGguaW11bChodCwkdCl8MCxsPShsPWwrTWF0aC5pbXVsKGh0LEh0KXwwKStNYXRoLmltdWwodnQsJHQpfDAsYj1iK01hdGguaW11bCh2dCxIdCl8MCx5PXkrTWF0aC5p''@;'; put 'put ''bXVsKEtlLG5uKXwwLGw9KGw9bCtNYXRoLmltdWwoS2UsbG4pfDApK01hdGguaW11bChZZSxubil8MCxiPWIrTWF0aC5pbXVsKFllLGxuKXwwO3ZhciBmYT0oTCsoeT15K01hdGguaW11bChiZSxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKGJlLEd0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''d2UsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwod2UsR3QpfDApKyhsPj4+MTMpfDApKyhmYT4+PjI2KXwwLGZhJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxhdCksbD0obD1NYXRoLmltdWwoTGUsX3QpKStNYXRoLmltdWwobnQsYXQpfDAsYj1NYXRoLmltdWwobnQsX3QpLHk9''@;'; put 'put ''eStNYXRoLmltdWwodHQsJHQpfDAsbD0obD1sK01hdGguaW11bCh0dCxIdCl8MCkrTWF0aC5pbXVsKFVlLCR0KXwwLGI9YitNYXRoLmltdWwoVWUsSHQpfDAseT15K01hdGguaW11bChodCxubil8MCxsPShsPWwrTWF0aC5pbXVsKGh0LGxuKXwwKStNYXRoLmltdWwodnQsbm4pfDAsYj1iK01h''@;'; put 'put ''dGguaW11bCh2dCxsbil8MDt2YXIgeGk9KEwrKHk9eStNYXRoLmltdWwoS2UsYW4pfDApfDApKygoODE5MSYobD0obD1sK01hdGguaW11bChLZSxHdCl8MCkrTWF0aC5pbXVsKFllLGFuKXwwKSk8PDEzKXwwO0w9KChiPWIrTWF0aC5pbXVsKFllLEd0KXwwKSsobD4+PjEzKXwwKSsoeGk+Pj4y''@;'; put 'put ''Nil8MCx4aSY9NjcxMDg4NjMseT1NYXRoLmltdWwoTGUsJHQpLGw9KGw9TWF0aC5pbXVsKExlLEh0KSkrTWF0aC5pbXVsKG50LCR0KXwwLGI9TWF0aC5pbXVsKG50LEh0KSx5PXkrTWF0aC5pbXVsKHR0LG5uKXwwLGw9KGw9bCtNYXRoLmltdWwodHQsbG4pfDApK01hdGguaW11bChVZSxubil8''@;'; put 'put ''MCxiPWIrTWF0aC5pbXVsKFVlLGxuKXwwO3ZhciBvYT0oTCsoeT15K01hdGguaW11bChodCxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5pbXVsKGh0LEd0KXwwKStNYXRoLmltdWwodnQsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwodnQsR3QpfDApKyhsPj4+MTMpfDAp''@;'; put 'put ''KyhvYT4+PjI2KXwwLG9hJj02NzEwODg2Myx5PU1hdGguaW11bChMZSxubiksbD0obD1NYXRoLmltdWwoTGUsbG4pKStNYXRoLmltdWwobnQsbm4pfDAsYj1NYXRoLmltdWwobnQsbG4pO3ZhciBYaT0oTCsoeT15K01hdGguaW11bCh0dCxhbil8MCl8MCkrKCg4MTkxJihsPShsPWwrTWF0aC5p''@;'; put 'put ''bXVsKHR0LEd0KXwwKStNYXRoLmltdWwoVWUsYW4pfDApKTw8MTMpfDA7TD0oKGI9YitNYXRoLmltdWwoVWUsR3QpfDApKyhsPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2Mzt2YXIgSXI9KEwrKHk9TWF0aC5pbXVsKExlLGFuKSl8MCkrKCg4MTkxJihsPShsPU1hdGguaW11bChM''@;'; put 'put ''ZSxHdCkpK01hdGguaW11bChudCxhbil8MCkpPDwxMyl8MDtyZXR1cm4gTD0oKGI9TWF0aC5pbXVsKG50LEd0KSkrKGw+Pj4xMyl8MCkrKElyPj4+MjYpfDAsSXImPTY3MTA4ODYzLGtbMF09ZWEsa1sxXT1taSxrWzJdPWZyLGtbM109JGksa1s0XT1LaSxrWzVdPVZpLGtbNl09cXIsa1s3XT11''@;'; put 'put ''YSxrWzhdPUZpLGtbOV09UmEsa1sxMF09b2ksa1sxMV09VWksa1sxMl09VmEsa1sxM109dXIsa1sxNF09ZmEsa1sxNV09eGksa1sxNl09b2Esa1sxN109WGksa1sxOF09SXIsMCE9PUwmJihrWzE5XT1MLHYubGVuZ3RoKyspLHZ9O2Z1bmN0aW9uIFooUixzLHUpe3JldHVybihuZXcgVSkubXVs''@;'; put 'put ''cChSLHMsdSl9ZnVuY3Rpb24gVShSLHMpe3RoaXMueD1SLHRoaXMueT1zfU1hdGguaW11bHx8KEg9TiksZi5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocyx1KXt2YXIgdixwPXRoaXMubGVuZ3RoK3MubGVuZ3RoO3JldHVybiB2PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cy5sZW5ndGg/SCh0''@;'; put 'put ''aGlzLHMsdSk6cDw2Mz9OKHRoaXMscyx1KTpwPDEwMjQ/ZnVuY3Rpb24geihSLHMsdSl7dS5uZWdhdGl2ZT1zLm5lZ2F0aXZlXlIubmVnYXRpdmUsdS5sZW5ndGg9Ui5sZW5ndGgrcy5sZW5ndGg7Zm9yKHZhciB2PTAscD0wLF89MDtfPHUubGVuZ3RoLTE7XysrKXt2YXIgaz1wO3A9MDtmb3Io''@;'; put 'put ''dmFyIEw9NjcxMDg4NjMmdix5PU1hdGgubWluKF8scy5sZW5ndGgtMSksbD1NYXRoLm1heCgwLF8tUi5sZW5ndGgrMSk7bDw9eTtsKyspe3ZhciBRPSgwfFIud29yZHNbXy1sXSkqKDB8cy53b3Jkc1tsXSkscGU9NjcxMDg4NjMmUTtMPTY3MTA4ODYzJihwZT1wZStMfDApLHArPShrPShrPWsr''@;'; put 'put ''KFEvNjcxMDg4NjR8MCl8MCkrKHBlPj4+MjYpfDApPj4+MjYsayY9NjcxMDg4NjN9dS53b3Jkc1tfXT1MLHY9ayxrPXB9cmV0dXJuIDAhPT12P3Uud29yZHNbX109djp1Lmxlbmd0aC0tLHUuc3RyaXAoKX0odGhpcyxzLHUpOloodGhpcyxzLHUpLHZ9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVu''@;'; put 'put ''Y3Rpb24ocyl7Zm9yKHZhciB1PW5ldyBBcnJheShzKSx2PWYucHJvdG90eXBlLl9jb3VudEJpdHMocyktMSxwPTA7cDxzO3ArKyl1W3BdPXRoaXMucmV2QmluKHAsdixzKTtyZXR1cm4gdX0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHMsdSx2KXtpZigwPT09c3x8cz09PXYtMSlyZXR1''@;'; put 'put ''cm4gcztmb3IodmFyIHA9MCxfPTA7Xzx1O18rKylwfD0oMSZzKTw8dS1fLTEscz4+PTE7cmV0dXJuIHB9LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocyx1LHYscCxfLGspe2Zvcih2YXIgTD0wO0w8aztMKyspcFtMXT11W3NbTF1dLF9bTF09dltzW0xdXX0sVS5wcm90b3R5cGUudHJh''@;'; put 'put ''bnNmb3JtPWZ1bmN0aW9uKHMsdSx2LHAsXyxrKXt0aGlzLnBlcm11dGUoayxzLHUsdixwLF8pO2Zvcih2YXIgTD0xO0w8XztMPDw9MSlmb3IodmFyIHk9TDw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS95KSxiPU1hdGguc2luKDIqTWF0aC5QSS95KSxxPTA7cTxfO3ErPXkpZm9yKHZhciBHPWws''@;'; put 'put ''UT1iLHBlPTA7cGU8TDtwZSsrKXt2YXIgUGU9dltxK3BlXSxaZT1wW3ErcGVdLHFlPXZbcStwZStMXSx2ZT1wW3ErcGUrTF0sdWU9RypxZS1RKnZlO3ZlPUcqdmUrUSpxZSx2W3ErcGVdPVBlKyhxZT11ZSkscFtxK3BlXT1aZSt2ZSx2W3ErcGUrTF09UGUtcWUscFtxK3BlK0xdPVplLXZlLHBl''@;'; put 'put ''IT09eSYmKHVlPWwqRy1iKlEsUT1sKlErYipHLEc9dWUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocyx1KXt2YXIgdj0xfE1hdGgubWF4KHUscykscD0xJnYsXz0wO2Zvcih2PXYvMnwwO3Y7dj4+Pj0xKV8rKztyZXR1cm4gMTw8XysxK3B9LFUucHJvdG90eXBlLmNvbmp1''@;'; put 'put ''Z2F0ZT1mdW5jdGlvbihzLHUsdil7aWYoISh2PD0xKSlmb3IodmFyIHA9MDtwPHYvMjtwKyspe3ZhciBfPXNbcF07c1twXT1zW3YtcC0xXSxzW3YtcC0xXT1fLF89dVtwXSx1W3BdPS11W3YtcC0xXSx1W3YtcC0xXT0tX319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihzLHUp''@;'; put 'put ''e2Zvcih2YXIgdj0wLHA9MDtwPHUvMjtwKyspe3ZhciBfPTgxOTIqTWF0aC5yb3VuZChzWzIqcCsxXS91KStNYXRoLnJvdW5kKHNbMipwXS91KSt2O3NbcF09NjcxMDg4NjMmXyx2PV88NjcxMDg4NjQ/MDpfLzY3MTA4ODY0fDB9cmV0dXJuIHN9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVu''@;'; put 'put ''Y3Rpb24ocyx1LHYscCl7Zm9yKHZhciBfPTAsaz0wO2s8dTtrKyspdlsyKmtdPTgxOTEmKF8rPTB8c1trXSksdlsyKmsrMV09ODE5MSYoXz4+Pj0xMyksXz4+Pj0xMztmb3Ioaz0yKnU7azxwOysrayl2W2tdPTA7bygwPT09XyksbyghKC04MTkyJl8pKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5j''@;'; put 'put ''dGlvbihzKXtmb3IodmFyIHU9bmV3IEFycmF5KHMpLHY9MDt2PHM7disrKXVbdl09MDtyZXR1cm4gdX0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihzLHUsdil7dmFyIHA9Mip0aGlzLmd1ZXNzTGVuMTNiKHMubGVuZ3RoLHUubGVuZ3RoKSxfPXRoaXMubWFrZVJCVChwKSxrPXRoaXMuc3R1''@;'; put 'put ''YihwKSxMPW5ldyBBcnJheShwKSx5PW5ldyBBcnJheShwKSxsPW5ldyBBcnJheShwKSxiPW5ldyBBcnJheShwKSxxPW5ldyBBcnJheShwKSxHPW5ldyBBcnJheShwKSxRPXYud29yZHM7US5sZW5ndGg9cCx0aGlzLmNvbnZlcnQxM2Iocy53b3JkcyxzLmxlbmd0aCxMLHApLHRoaXMuY29udmVy''@;'; put 'put ''dDEzYih1LndvcmRzLHUubGVuZ3RoLGIscCksdGhpcy50cmFuc2Zvcm0oTCxrLHksbCxwLF8pLHRoaXMudHJhbnNmb3JtKGIsayxxLEcscCxfKTtmb3IodmFyIHBlPTA7cGU8cDtwZSsrKXt2YXIgUGU9eVtwZV0qcVtwZV0tbFtwZV0qR1twZV07bFtwZV09eVtwZV0qR1twZV0rbFtwZV0qcVtw''@;'; put 'put ''ZV0seVtwZV09UGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHksbCxwKSx0aGlzLnRyYW5zZm9ybSh5LGwsUSxrLHAsXyksdGhpcy5jb25qdWdhdGUoUSxrLHApLHRoaXMubm9ybWFsaXplMTNiKFEscCksdi5uZWdhdGl2ZT1zLm5lZ2F0aXZlXnUubmVnYXRpdmUsdi5sZW5ndGg9cy5sZW5ndGgr''@;'; put 'put ''dS5sZW5ndGgsdi5zdHJpcCgpfSxmLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocyl7dmFyIHU9bmV3IGYobnVsbCk7cmV0dXJuIHUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3MubGVuZ3RoKSx0aGlzLm11bFRvKHMsdSl9LGYucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocyl7dmFyIHU9''@;'; put 'put ''bmV3IGYobnVsbCk7cmV0dXJuIHUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3MubGVuZ3RoKSxaKHRoaXMscyx1KX0sZi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHMsdGhpcyl9LGYucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHMp''@;'; put 'put ''e28oIm51bWJlciI9PXR5cGVvZiBzKSxvKHM8NjcxMDg4NjQpO2Zvcih2YXIgdT0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHA9KDB8dGhpcy53b3Jkc1t2XSkqcyxfPSg2NzEwODg2MyZwKSsoNjcxMDg4NjMmdSk7dT4+PTI2LHUrPXAvNjcxMDg4NjR8MCx1Kz1fPj4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1t2XT02NzEwODg2MyZffXJldHVybiAwIT09dSYmKHRoaXMud29yZHNbdl09dSx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cz8xOnRoaXMubGVuZ3RoLHRoaXN9LGYucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihzKX0sZi5w''@;'; put 'put ''cm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxmLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxmLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocyl7dmFyIHU9ZnVuY3Rpb24gRihSKXtmb3IodmFyIHM9''@;'; put 'put ''bmV3IEFycmF5KFIuYml0TGVuZ3RoKCkpLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIHA9dSUyNjtzW3VdPShSLndvcmRzW3UvMjZ8MF0mMTw8cCk+Pj5wfXJldHVybiBzfShzKTtpZigwPT09dS5sZW5ndGgpcmV0dXJuIG5ldyBmKDEpO2Zvcih2YXIgdj10aGlzLHA9MDtwPHUubGVuZ3RoJiYw''@;'; put 'put ''PT09dVtwXTtwKyssdj12LnNxcigpKTtpZigrK3A8dS5sZW5ndGgpZm9yKHZhciBfPXYuc3FyKCk7cDx1Lmxlbmd0aDtwKyssXz1fLnNxcigpKTAhPT11W3BdJiYodj12Lm11bChfKSk7cmV0dXJuIHZ9LGYucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihzKXtvKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''cyYmcz49MCk7dmFyIF8sdT1zJTI2LHY9KHMtdSkvMjYscD02NzEwODg2Mz4+PjI2LXU8PDI2LXU7aWYoMCE9PXUpe3ZhciBrPTA7Zm9yKF89MDtfPHRoaXMubGVuZ3RoO18rKyl7dmFyIEw9dGhpcy53b3Jkc1tfXSZwO3RoaXMud29yZHNbX109KDB8dGhpcy53b3Jkc1tfXSktTDw8dXxrLGs9''@;'; put 'put ''TD4+PjI2LXV9ayYmKHRoaXMud29yZHNbX109ayx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKF89dGhpcy5sZW5ndGgtMTtfPj0wO18tLSl0aGlzLndvcmRzW18rdl09dGhpcy53b3Jkc1tfXTtmb3IoXz0wO188djtfKyspdGhpcy53b3Jkc1tfXT0wO3RoaXMubGVuZ3RoKz12fXJldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHMpe3JldHVybiBvKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihzKX0sZi5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcDtvKCJudW1iZXIiPT10eXBlb2YgcyYmcz49MCkscD11Pyh1''@;'; put 'put ''LXUlMjYpLzI2OjA7dmFyIF89cyUyNixrPU1hdGgubWluKChzLV8pLzI2LHRoaXMubGVuZ3RoKSxMPTY3MTA4ODYzXjY3MTA4ODYzPj4+Xzw8Xyx5PXY7aWYocC09ayxwPU1hdGgubWF4KDAscCkseSl7Zm9yKHZhciBsPTA7bDxrO2wrKyl5LndvcmRzW2xdPXRoaXMud29yZHNbbF07eS5sZW5n''@;'; put 'put ''dGg9a31pZigwIT09aylpZih0aGlzLmxlbmd0aD5rKWZvcih0aGlzLmxlbmd0aC09ayxsPTA7bDx0aGlzLmxlbmd0aDtsKyspdGhpcy53b3Jkc1tsXT10aGlzLndvcmRzW2wra107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgYj0wO2ZvcihsPXRoaXMubGVuZ3RoLTE7''@;'; put 'put ''bD49MCYmKDAhPT1ifHxsPj1wKTtsLS0pe3ZhciBxPTB8dGhpcy53b3Jkc1tsXTt0aGlzLndvcmRzW2xdPWI8PDI2LV98cT4+Pl8sYj1xJkx9cmV0dXJuIHkmJjAhPT1iJiYoeS53b3Jkc1t5Lmxlbmd0aCsrXT1iKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5n''@;'; put 'put ''dGg9MSksdGhpcy5zdHJpcCgpfSxmLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihzLHUsdil7cmV0dXJuIG8oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHMsdSx2KX0sZi5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHMpfSxmLnBy''@;'; put 'put ''b3RvdHlwZS51c2hsbj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihzKX0sZi5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHMpfSxmLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1c2hybihzKX0sZi5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB1PXMlMjYsdj0ocy11KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD12fHwhKHRoaXMud29yZHNbdl0mMTw8dSkpfSxmLnByb3RvdHlwZS5pbWFza249ZnVuY3Rp''@;'; put 'put ''b24ocyl7bygibnVtYmVyIj09dHlwZW9mIHMmJnM+PTApO3ZhciB1PXMlMjYsdj0ocy11KS8yNjtyZXR1cm4gbygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXY/dGhpczooMCE9PXUmJnYrKyx0aGlzLmxl''@;'; put 'put ''bmd0aD1NYXRoLm1pbih2LHRoaXMubGVuZ3RoKSwwIT09dSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+dTw8dSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKSl9LGYucHJvdG90eXBl''@;'; put 'put ''Lm1hc2tuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHMpfSxmLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihzKXtyZXR1cm4gbygibnVtYmVyIj09dHlwZW9mIHMpLG8oczw2NzEwODg2NCksczwwP3RoaXMuaXN1Ym4oLXMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10''@;'; put 'put ''aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cz8odGhpcy53b3Jkc1swXT1zLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHMpfSxmLnByb3Rv''@;'; put 'put ''dHlwZS5faWFkZG49ZnVuY3Rpb24ocyl7dGhpcy53b3Jkc1swXSs9cztmb3IodmFyIHU9MDt1PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3VdPj02NzEwODg2NDt1KyspdGhpcy53b3Jkc1t1XS09NjcxMDg4NjQsdT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t1KzFdPTE6dGhpcy53b3Jk''@;'; put 'put ''c1t1KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHUrMSksdGhpc30sZi5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocyl7aWYobygibnVtYmVyIj09dHlwZW9mIHMpLG8oczw2NzEwODg2NCksczwwKXJldHVybiB0aGlzLmlhZGRuKC1zKTtpZigwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MTtlbHNlIGZvcih2YXIgdT0wO3U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbdV08MDt1KyspdGhpcy53b3Jkc1t1XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t1KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pYWRkbihzKX0sZi5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHMpfSxmLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxmLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmlhYnMoKX0sZi5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHMsdSx2KXt2YXIgXzt0aGlzLl9leHBhbmQocy5sZW5ndGgrdik7dmFyIGssTD0wO2ZvcihfPTA7XzxzLmxlbmd0aDtfKyspe2s9KDB8dGhpcy53b3Jkc1tfK3ZdKStMO3ZhciB5PSgwfHMud29yZHNb''@;'; put 'put ''X10pKnU7TD0oKGstPTY3MTA4ODYzJnkpPj4yNiktKHkvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tfK3ZdPTY3MTA4ODYzJmt9Zm9yKDtfPHRoaXMubGVuZ3RoLXY7XysrKUw9KGs9KDB8dGhpcy53b3Jkc1tfK3ZdKStMKT4+MjYsdGhpcy53b3Jkc1tfK3ZdPTY3MTA4ODYzJms7aWYoMD09PUwp''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobygtMT09PUwpLEw9MCxfPTA7Xzx0aGlzLmxlbmd0aDtfKyspTD0oaz0tKDB8dGhpcy53b3Jkc1tfXSkrTCk+PjI2LHRoaXMud29yZHNbX109NjcxMDg4NjMmaztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sZi5wcm90b3R5cGUu''@;'; put 'put ''X3dvcmREaXY9ZnVuY3Rpb24ocyx1KXt2YXIgdixwPXRoaXMuY2xvbmUoKSxfPXMsaz0wfF8ud29yZHNbXy5sZW5ndGgtMV07MCE9KHY9MjYtdGhpcy5fY291bnRCaXRzKGspKSYmKF89Xy51c2hsbih2KSxwLml1c2hsbih2KSxrPTB8Xy53b3Jkc1tfLmxlbmd0aC0xXSk7dmFyIGwseT1wLmxl''@;'; put 'put ''bmd0aC1fLmxlbmd0aDtpZigibW9kIiE9PXUpeyhsPW5ldyBmKG51bGwpKS5sZW5ndGg9eSsxLGwud29yZHM9bmV3IEFycmF5KGwubGVuZ3RoKTtmb3IodmFyIGI9MDtiPGwubGVuZ3RoO2IrKylsLndvcmRzW2JdPTB9dmFyIHE9cC5jbG9uZSgpLl9pc2hsbnN1Ym11bChfLDEseSk7MD09PXEu''@;'; put 'put ''bmVnYXRpdmUmJihwPXEsbCYmKGwud29yZHNbeV09MSkpO2Zvcih2YXIgRz15LTE7Rz49MDtHLS0pe3ZhciBRPTY3MTA4ODY0KigwfHAud29yZHNbXy5sZW5ndGgrR10pKygwfHAud29yZHNbXy5sZW5ndGgrRy0xXSk7Zm9yKFE9TWF0aC5taW4oUS9rfDAsNjcxMDg4NjMpLHAuX2lzaGxuc3Vi''@;'; put 'put ''bXVsKF8sUSxHKTswIT09cC5uZWdhdGl2ZTspUS0tLHAubmVnYXRpdmU9MCxwLl9pc2hsbnN1Ym11bChfLDEsRykscC5pc1plcm8oKXx8KHAubmVnYXRpdmVePTEpO2wmJihsLndvcmRzW0ddPVEpfXJldHVybiBsJiZsLnN0cmlwKCkscC5zdHJpcCgpLCJkaXYiIT09dSYmMCE9PXYmJnAuaXVz''@;'; put 'put ''aHJuKHYpLHtkaXY6bHx8bnVsbCxtb2Q6cH19LGYucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihzLHUsdil7cmV0dXJuIG8oIXMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgZigwKSxtb2Q6bmV3IGYoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cy5uZWdhdGl2ZT8oaz10''@;'; put 'put ''aGlzLm5lZygpLmRpdm1vZChzLHUpLCJtb2QiIT09dSYmKHA9ay5kaXYubmVnKCkpLCJkaXYiIT09dSYmKF89ay5tb2QubmVnKCksdiYmMCE9PV8ubmVnYXRpdmUmJl8uaWFkZChzKSkse2RpdjpwLG1vZDpffSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1zLm5lZ2F0aXZlPyhrPXRoaXMuZGl2''@;'; put 'put ''bW9kKHMubmVnKCksdSksIm1vZCIhPT11JiYocD1rLmRpdi5uZWcoKSkse2RpdjpwLG1vZDprLm1vZH0pOnRoaXMubmVnYXRpdmUmcy5uZWdhdGl2ZT8oaz10aGlzLm5lZygpLmRpdm1vZChzLm5lZygpLHUpLCJkaXYiIT09dSYmKF89ay5tb2QubmVnKCksdiYmMCE9PV8ubmVnYXRpdmUmJl8u''@;'; put 'put ''aXN1YihzKSkse2RpdjprLmRpdixtb2Q6X30pOnMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChzKTwwP3tkaXY6bmV3IGYoMCksbW9kOnRoaXN9OjE9PT1zLmxlbmd0aD8iZGl2Ij09PXU/e2Rpdjp0aGlzLmRpdm4ocy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09dT97ZGl2Om51''@;'; put 'put ''bGwsbW9kOm5ldyBmKHRoaXMubW9kbihzLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHMud29yZHNbMF0pLG1vZDpuZXcgZih0aGlzLm1vZG4ocy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHMsdSk7dmFyIHAsXyxrfSxmLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGl2bW9kKHMsImRpdiIsITEpLmRpdn0sZi5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmRpdm1vZChzLCJtb2QiLCExKS5tb2R9LGYucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuZGl2bW9kKHMsIm1vZCIsITApLm1vZH0sZi5wcm90b3R5''@;'; put 'put ''cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocyl7dmFyIHU9dGhpcy5kaXZtb2Qocyk7aWYodS5tb2QuaXNaZXJvKCkpcmV0dXJuIHUuZGl2O3ZhciB2PTAhPT11LmRpdi5uZWdhdGl2ZT91Lm1vZC5pc3ViKHMpOnUubW9kLHA9cy51c2hybigxKSxfPXMuYW5kbG4oMSksaz12LmNtcChwKTtyZXR1cm4g''@;'; put 'put ''azwwfHwxPT09XyYmMD09PWs/dS5kaXY6MCE9PXUuZGl2Lm5lZ2F0aXZlP3UuZGl2LmlzdWJuKDEpOnUuZGl2LmlhZGRuKDEpfSxmLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHMpe28oczw9NjcxMDg4NjMpO2Zvcih2YXIgdT0oMTw8MjYpJXMsdj0wLHA9dGhpcy5sZW5ndGgtMTtwPj0wO3At''@;'; put 'put ''LSl2PSh1KnYrKDB8dGhpcy53b3Jkc1twXSkpJXM7cmV0dXJuIHZ9LGYucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHMpe28oczw9NjcxMDg4NjMpO2Zvcih2YXIgdT0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9KDB8dGhpcy53b3Jkc1t2XSkrNjcxMDg4NjQqdTt0aGlzLndv''@;'; put 'put ''cmRzW3ZdPXAvc3wwLHU9cCVzfXJldHVybiB0aGlzLnN0cmlwKCl9LGYucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihzKX0sZi5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihzKXtvKDA9PT1zLm5lZ2F0aXZlKSxvKCFzLmlzWmVybygpKTt2YXIg''@;'; put 'put ''dT10aGlzLHY9cy5jbG9uZSgpO3U9MCE9PXUubmVnYXRpdmU/dS51bW9kKHMpOnUuY2xvbmUoKTtmb3IodmFyIHA9bmV3IGYoMSksXz1uZXcgZigwKSxrPW5ldyBmKDApLEw9bmV3IGYoMSkseT0wO3UuaXNFdmVuKCkmJnYuaXNFdmVuKCk7KXUuaXVzaHJuKDEpLHYuaXVzaHJuKDEpLCsreTtm''@;'; put 'put ''b3IodmFyIGw9di5jbG9uZSgpLGI9dS5jbG9uZSgpOyF1LmlzWmVybygpOyl7Zm9yKHZhciBxPTAsRz0xOyEodS53b3Jkc1swXSZHKSYmcTwyNjsrK3EsRzw8PTEpO2lmKHE+MClmb3IodS5pdXNocm4ocSk7cS0tID4wOykocC5pc09kZCgpfHxfLmlzT2RkKCkpJiYocC5pYWRkKGwpLF8uaXN1''@;'; put 'put ''YihiKSkscC5pdXNocm4oMSksXy5pdXNocm4oMSk7Zm9yKHZhciBRPTAscGU9MTshKHYud29yZHNbMF0mcGUpJiZRPDI2OysrUSxwZTw8PTEpO2lmKFE+MClmb3Iodi5pdXNocm4oUSk7US0tID4wOykoay5pc09kZCgpfHxMLmlzT2RkKCkpJiYoay5pYWRkKGwpLEwuaXN1YihiKSksay5pdXNo''@;'; put 'put ''cm4oMSksTC5pdXNocm4oMSk7dS5jbXAodik+PTA/KHUuaXN1Yih2KSxwLmlzdWIoayksXy5pc3ViKEwpKToodi5pc3ViKHUpLGsuaXN1YihwKSxMLmlzdWIoXykpfXJldHVybnthOmssYjpMLGdjZDp2Lml1c2hsbih5KX19LGYucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihzKXtvKDA9PT1z''@;'; put 'put ''Lm5lZ2F0aXZlKSxvKCFzLmlzWmVybygpKTt2YXIgcSx1PXRoaXMsdj1zLmNsb25lKCk7dT0wIT09dS5uZWdhdGl2ZT91LnVtb2Qocyk6dS5jbG9uZSgpO2Zvcih2YXIgcD1uZXcgZigxKSxfPW5ldyBmKDApLGs9di5jbG9uZSgpO3UuY21wbigxKT4wJiZ2LmNtcG4oMSk+MDspe2Zvcih2YXIg''@;'; put 'put ''TD0wLHk9MTshKHUud29yZHNbMF0meSkmJkw8MjY7KytMLHk8PD0xKTtpZihMPjApZm9yKHUuaXVzaHJuKEwpO0wtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoaykscC5pdXNocm4oMSk7Zm9yKHZhciBsPTAsYj0xOyEodi53b3Jkc1swXSZiKSYmbDwyNjsrK2wsYjw8PTEpO2lmKGw+MClmb3Io''@;'; put 'put ''di5pdXNocm4obCk7bC0tID4wOylfLmlzT2RkKCkmJl8uaWFkZChrKSxfLml1c2hybigxKTt1LmNtcCh2KT49MD8odS5pc3ViKHYpLHAuaXN1YihfKSk6KHYuaXN1Yih1KSxfLmlzdWIocCkpfXJldHVybihxPTA9PT11LmNtcG4oMSk/cDpfKS5jbXBuKDApPDAmJnEuaWFkZChzKSxxfSxmLnBy''@;'; put 'put ''b3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcy5hYnMoKTtpZihzLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB1PXRoaXMuY2xvbmUoKSx2PXMuY2xvbmUoKTt1Lm5lZ2F0aXZlPTAsdi5uZWdhdGl2ZT0wO2Zvcih2YXIgcD0wO3UuaXNFdmVu''@;'; put 'put ''KCkmJnYuaXNFdmVuKCk7cCsrKXUuaXVzaHJuKDEpLHYuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt1LmlzRXZlbigpOyl1Lml1c2hybigxKTtmb3IoO3YuaXNFdmVuKCk7KXYuaXVzaHJuKDEpO3ZhciBfPXUuY21wKHYpO2lmKF88MCl7dmFyIGs9dTt1PXYsdj1rfWVsc2UgaWYoMD09PV98fDA9''@;'; put 'put ''PT12LmNtcG4oMSkpYnJlYWs7dS5pc3ViKHYpfXJldHVybiB2Lml1c2hsbihwKX0sZi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5lZ2NkKHMpLmEudW1vZChzKX0sZi5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxm''@;'; put 'put ''LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGYucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLndvcmRzWzBdJnN9LGYucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHMpe28oIm51bWJlciI9PXR5cGVvZiBzKTt2YXIg''@;'; put 'put ''dT1zJTI2LHY9KHMtdSkvMjYscD0xPDx1O2lmKHRoaXMubGVuZ3RoPD12KXJldHVybiB0aGlzLl9leHBhbmQodisxKSx0aGlzLndvcmRzW3ZdfD1wLHRoaXM7Zm9yKHZhciBfPXAsaz12OzAhPT1fJiZrPHRoaXMubGVuZ3RoO2srKyl7dmFyIEw9MHx0aGlzLndvcmRzW2tdO189KEwrPV8pPj4+''@;'; put 'put ''MjYsdGhpcy53b3Jkc1trXT1MJj02NzEwODg2M31yZXR1cm4gMCE9PV8mJih0aGlzLndvcmRzW2tdPV8sdGhpcy5sZW5ndGgrKyksdGhpc30sZi5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGYucHJvdG90eXBl''@;'; put 'put ''LmNtcG49ZnVuY3Rpb24ocyl7dmFyIHYsdT1zPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF1KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ1KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXY9MTtlbHNle3UmJihzPS1zKSxvKHM8PTY3MTA4ODYzLCJOdW1i''@;'; put 'put ''ZXIgaXMgdG9vIGJpZyIpO3ZhciBwPTB8dGhpcy53b3Jkc1swXTt2PXA9PT1zPzA6cDxzPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXY6dn0sZi5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cy5uZWdhdGl2ZSlyZXR1cm4tMTtp''@;'; put 'put ''ZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXMubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHU9dGhpcy51Y21wKHMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC11OnV9LGYucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocyl7aWYodGhpcy5sZW5ndGg+cy5sZW5ndGgpcmV0dXJuIDE7aWYodGhp''@;'; put 'put ''cy5sZW5ndGg8cy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB1PTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXt2YXIgcD0wfHRoaXMud29yZHNbdl0sXz0wfHMud29yZHNbdl07aWYocCE9PV8pe3A8Xz91PS0xOnA+XyYmKHU9MSk7YnJlYWt9fXJldHVybiB1fSxmLnByb3RvdHlwZS5ndG49''@;'; put 'put ''ZnVuY3Rpb24ocyl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocyl9LGYucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHMpe3JldHVybiAxPT09dGhpcy5jbXAocyl9LGYucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuY21wbihzKT49MH0sZi5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiB0aGlzLmNtcChzKT49MH0sZi5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHMpe3JldHVybi0xPT09dGhpcy5jbXBuKHMpfSxmLnByb3RvdHlwZS5sdD1mdW5jdGlvbihzKXtyZXR1cm4tMT09PXRoaXMuY21wKHMpfSxmLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHMpe3JldHVy''@;'; put 'put ''biB0aGlzLmNtcG4ocyk8PTB9LGYucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5jbXAocyk8PTB9LGYucHJvdG90eXBlLmVxbj1mdW5jdGlvbihzKXtyZXR1cm4gMD09PXRoaXMuY21wbihzKX0sZi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocyl7cmV0dXJuIDA9PT10aGlz''@;'; put 'put ''LmNtcChzKX0sZi5yZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyBtZShzKX0sZi5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxzLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocyl9LGYucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMu''@;'; put 'put ''cmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxmLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMucmVkPXMsdGhpc30sZi5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBj''@;'; put 'put ''b250ZXh0IiksdGhpcy5fZm9yY2VSZWQocyl9LGYucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscyl9LGYucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rp''@;'; put 'put ''b24ocyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxzKSx0aGlzLnJlZC5tdWwodGhpcyxzKX0sZi5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMs''@;'; put 'put ''cyksdGhpcy5yZWQuaW11bCh0aGlzLHMpfSxmLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sZi5wcm90b3R5''@;'; put 'put ''cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGYucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0''@;'; put 'put ''aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxmLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sZi5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0''@;'; put 'put ''aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LGYucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihzKXtyZXR1cm4gbyh0aGlzLnJlZCYmIXMucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHMpfTt2YXIgSz17azI1NjpudWxs''@;'; put 'put ''LHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIFgoUixzKXt0aGlzLm5hbWU9Uix0aGlzLnA9bmV3IGYocywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGYoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMu''@;'; put 'put ''X3RtcCgpfWZ1bmN0aW9uIG5lKCl7WC5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIHNlKCl7WC5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGhlKCl7WC5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIF9lKCl7WC5jYWxsKHRoaXMs''@;'; put 'put ''IjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIG1lKFIpe2lmKCJzdHJpbmciPT10eXBlb2YgUil7dmFyIHM9Zi5fcHJpbWUoUik7dGhpcy5tPXMucCx0aGlzLnByaW1lPXN9ZWxzZSBv''@;'; put 'put ''KFIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Uix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gRmUoUil7bWUuY2FsbCh0aGlzLFIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10''@;'; put 'put ''aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGYoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0p''@;'; put 'put ''LHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9WC5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBzPW5ldyBmKG51bGwpO3JldHVybiBzLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksc30sWC5w''@;'; put 'put ''cm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihzKXt2YXIgdix1PXM7ZG97dGhpcy5zcGxpdCh1LHRoaXMudG1wKSx2PSh1PSh1PXRoaXMuaW11bEsodSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh2PnRoaXMubik7dmFyIHA9djx0aGlzLm4/LTE6dS51Y21wKHRoaXMucCk7''@;'; put 'put ''cmV0dXJuIDA9PT1wPyh1LndvcmRzWzBdPTAsdS5sZW5ndGg9MSk6cD4wP3UuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXUuc3RyaXA/dS5zdHJpcCgpOnUuX3N0cmlwKCksdX0sWC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocyx1KXtzLml1c2hybih0aGlzLm4sMCx1KX0sWC5wcm90b3R5cGUu''@;'; put 'put ''aW11bEs9ZnVuY3Rpb24ocyl7cmV0dXJuIHMuaW11bCh0aGlzLmspfSxJKG5lLFgpLG5lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihzLHUpe2Zvcih2YXIgdj00MTk0MzAzLHA9TWF0aC5taW4ocy5sZW5ndGgsOSksXz0wO188cDtfKyspdS53b3Jkc1tfXT1zLndvcmRzW19dO2lmKHUubGVu''@;'; put 'put ''Z3RoPXAscy5sZW5ndGg8PTkpcmV0dXJuIHMud29yZHNbMF09MCx2b2lkKHMubGVuZ3RoPTEpO3ZhciBrPXMud29yZHNbOV07Zm9yKHUud29yZHNbdS5sZW5ndGgrK109ayZ2LF89MTA7XzxzLmxlbmd0aDtfKyspe3ZhciBMPTB8cy53b3Jkc1tfXTtzLndvcmRzW18tMTBdPShMJnYpPDw0fGs+''@;'; put 'put ''Pj4yMixrPUx9cy53b3Jkc1tfLTEwXT1rPj4+PTIyLHMubGVuZ3RoLT0wPT09ayYmcy5sZW5ndGg+MTA/MTA6OX0sbmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe3Mud29yZHNbcy5sZW5ndGhdPTAscy53b3Jkc1tzLmxlbmd0aCsxXT0wLHMubGVuZ3RoKz0yO2Zvcih2YXIgdT0wLHY9''@;'; put 'put ''MDt2PHMubGVuZ3RoO3YrKyl7dmFyIHA9MHxzLndvcmRzW3ZdO3Mud29yZHNbdl09NjcxMDg4NjMmKHUrPTk3NypwKSx1PTY0KnArKHUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1zLndvcmRzW3MubGVuZ3RoLTFdJiYocy5sZW5ndGgtLSwwPT09cy53b3Jkc1tzLmxlbmd0aC0xXSYmcy5sZW5n''@;'; put 'put ''dGgtLSksc30sSShzZSxYKSxJKGhlLFgpLEkoX2UsWCksX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHMpe2Zvcih2YXIgdT0wLHY9MDt2PHMubGVuZ3RoO3YrKyl7dmFyIHA9MTkqKDB8cy53b3Jkc1t2XSkrdSxfPTY3MTA4ODYzJnA7cD4+Pj0yNixzLndvcmRzW3ZdPV8sdT1wfXJldHVy''@;'; put 'put ''biAwIT09dSYmKHMud29yZHNbcy5sZW5ndGgrK109dSksc30sZi5fcHJpbWU9ZnVuY3Rpb24ocyl7aWYoS1tzXSlyZXR1cm4gS1tzXTt2YXIgdTtpZigiazI1NiI9PT1zKXU9bmV3IG5lO2Vsc2UgaWYoInAyMjQiPT09cyl1PW5ldyBzZTtlbHNlIGlmKCJwMTkyIj09PXMpdT1uZXcgaGU7ZWxz''@;'; put 'put ''ZXtpZigicDI1NTE5IiE9PXMpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcyk7dT1uZXcgX2V9cmV0dXJuIEtbc109dSx1fSxtZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocyl7bygwPT09cy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxv''@;'; put 'put ''KHMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LG1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihzLHUpe28oIShzLm5lZ2F0aXZlfHUubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8ocy5yZWQmJnMucmVkPT09dS5yZWQsInJl''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sbWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHMpLl9mb3JjZVJlZCh0aGlzKTpzLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5u''@;'; put 'put ''ZWc9ZnVuY3Rpb24ocyl7cmV0dXJuIHMuaXNaZXJvKCk/cy5jbG9uZSgpOnRoaXMubS5zdWIocykuX2ZvcmNlUmVkKHRoaXMpfSxtZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuYWRkKHUpO3JldHVybiB2LmNtcCh0aGlzLm0pPj0wJiZ2''@;'; put 'put ''LmlzdWIodGhpcy5tKSx2Ll9mb3JjZVJlZCh0aGlzKX0sbWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocyx1KXt0aGlzLl92ZXJpZnkyKHMsdSk7dmFyIHY9cy5pYWRkKHUpO3JldHVybiB2LmNtcCh0aGlzLm0pPj0wJiZ2LmlzdWIodGhpcy5tKSx2fSxtZS5wcm90b3R5cGUuc3ViPWZ1bmN0''@;'; put 'put ''aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuc3ViKHUpO3JldHVybiB2LmNtcG4oMCk8MCYmdi5pYWRkKHRoaXMubSksdi5fZm9yY2VSZWQodGhpcyl9LG1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHMsdSl7dGhpcy5fdmVyaWZ5MihzLHUpO3ZhciB2PXMuaXN1Yih1KTty''@;'; put 'put ''ZXR1cm4gdi5jbXBuKDApPDAmJnYuaWFkZCh0aGlzLm0pLHZ9LG1lLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocyx1KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShzKSx0aGlzLmltb2Qocy51c2hsbih1KSl9LG1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMsdSl7cmV0dXJuIHRoaXMuX3Zlcmlm''@;'; put 'put ''eTIocyx1KSx0aGlzLmltb2Qocy5pbXVsKHUpKX0sbWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihzLHUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHMsdSksdGhpcy5pbW9kKHMubXVsKHUpKX0sbWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMuaW11bChzLHMuY2xvbmUo''@;'; put 'put ''KSl9LG1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMubXVsKHMscyl9LG1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHMpe2lmKHMuaXNaZXJvKCkpcmV0dXJuIHMuY2xvbmUoKTt2YXIgdT10aGlzLm0uYW5kbG4oMyk7aWYobyh1JTI9PTEpLDM9PT11KXt2YXIgdj10''@;'; put 'put ''aGlzLm0uYWRkKG5ldyBmKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHMsdil9Zm9yKHZhciBwPXRoaXMubS5zdWJuKDEpLF89MDshcC5pc1plcm8oKSYmMD09PXAuYW5kbG4oMSk7KV8rKyxwLml1c2hybigxKTtvKCFwLmlzWmVybygpKTt2YXIgaz1uZXcgZigxKS50b1JlZCh0aGlz''@;'; put 'put ''KSxMPWsucmVkTmVnKCkseT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGw9bmV3IGYoMipsKmwpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhsLHkpLmNtcChMKTspbC5yZWRJQWRkKEwpO2Zvcih2YXIgYj10aGlzLnBvdyhsLHApLHE9dGhpcy5w''@;'; put 'put ''b3cocyxwLmFkZG4oMSkuaXVzaHJuKDEpKSxHPXRoaXMucG93KHMscCksUT1fOzAhPT1HLmNtcChrKTspe2Zvcih2YXIgcGU9RyxQZT0wOzAhPT1wZS5jbXAoayk7UGUrKylwZT1wZS5yZWRTcXIoKTtvKFBlPFEpO3ZhciBaZT10aGlzLnBvdyhiLG5ldyBmKDEpLml1c2hsbihRLVBlLTEpKTtx''@;'; put 'put ''PXEucmVkTXVsKFplKSxiPVplLnJlZFNxcigpLEc9Ry5yZWRNdWwoYiksUT1QZX1yZXR1cm4gcX0sbWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocyl7dmFyIHU9cy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXUubmVnYXRpdmU/KHUubmVnYXRpdmU9MCx0aGlzLmltb2QodSkucmVkTmVn''@;'; put 'put ''KCkpOnRoaXMuaW1vZCh1KX0sbWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihzLHUpe2lmKHUuaXNaZXJvKCkpcmV0dXJuIG5ldyBmKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT11LmNtcG4oMSkpcmV0dXJuIHMuY2xvbmUoKTt2YXIgcD1uZXcgQXJyYXkoMTYpO3BbMF09bmV3IGYoMSkudG9SZWQo''@;'; put 'put ''dGhpcykscFsxXT1zO2Zvcih2YXIgXz0yO188cC5sZW5ndGg7XysrKXBbX109dGhpcy5tdWwocFtfLTFdLHMpO3ZhciBrPXBbMF0sTD0wLHk9MCxsPXUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1sJiYobD0yNiksXz11Lmxlbmd0aC0xO18+PTA7Xy0tKXtmb3IodmFyIGI9dS53b3Jkc1tfXSxx''@;'; put 'put ''PWwtMTtxPj0wO3EtLSl7dmFyIEc9Yj4+cSYxO2shPT1wWzBdJiYoaz10aGlzLnNxcihrKSksMCE9PUd8fDAhPT1MPyhMPDw9MSxMfD1HLCg0PT0rK3l8fDA9PT1fJiYwPT09cSkmJihrPXRoaXMubXVsKGsscFtMXSkseT0wLEw9MCkpOnk9MH1sPTI2fXJldHVybiBrfSxtZS5wcm90b3R5cGUu''@;'; put 'put ''Y29udmVydFRvPWZ1bmN0aW9uKHMpe3ZhciB1PXMudW1vZCh0aGlzLm0pO3JldHVybiB1PT09cz91LmNsb25lKCk6dX0sbWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHMpe3ZhciB1PXMuY2xvbmUoKTtyZXR1cm4gdS5yZWQ9bnVsbCx1fSxmLm1vbnQ9ZnVuY3Rpb24ocyl7cmV0''@;'; put 'put ''dXJuIG5ldyBGZShzKX0sSShGZSxtZSksRmUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5pbW9kKHMudXNobG4odGhpcy5zaGlmdCkpfSxGZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocyl7dmFyIHU9dGhpcy5pbW9kKHMubXVsKHRoaXMucmlu''@;'; put 'put ''dikpO3JldHVybiB1LnJlZD1udWxsLHV9LEZlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHMsdSl7aWYocy5pc1plcm8oKXx8dS5pc1plcm8oKSlyZXR1cm4gcy53b3Jkc1swXT0wLHMubGVuZ3RoPTEsczt2YXIgdj1zLmltdWwodSkscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1p''@;'; put 'put ''bnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxfPXYuaXN1YihwKS5pdXNocm4odGhpcy5zaGlmdCksaz1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP2s9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihrPV8uaWFkZCh0aGlzLm0pKSxrLl9mb3JjZVJlZCh0aGlzKX0sRmUu''@;'; put 'put ''cHJvdG90eXBlLm11bD1mdW5jdGlvbihzLHUpe2lmKHMuaXNaZXJvKCl8fHUuaXNaZXJvKCkpcmV0dXJuIG5ldyBmKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgdj1zLm11bCh1KSxwPXYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlz''@;'; put 'put ''Lm0pLF89di5pc3ViKHApLml1c2hybih0aGlzLnNoaWZ0KSxrPV87cmV0dXJuIF8uY21wKHRoaXMubSk+PTA/az1fLmlzdWIodGhpcy5tKTpfLmNtcG4oMCk8MCYmKGs9Xy5pYWRkKHRoaXMubSkpLGsuX2ZvcmNlUmVkKHRoaXMpfSxGZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihzKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbW9kKHMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh0ZT1kLm5tZCh0ZSksdGhpcyl9LDk4NjEzKHRlLGosZCl7dmFyIFM9ZCg2NTY2NyksaD1kKDMwNzE1KSxvPWQoMzcxOTYpLEk9ZCgxNjUwOCksZj1kKDE0MTA1KSxUPWQoNjcyMTEp''@;'; put 'put ''LEE9ZCgxMDU2OCksTT1kKDI3MDU0KS5CdWZmZXI7dGUuZXhwb3J0cz1mdW5jdGlvbihGLE4sSCl7dmFyIHo7ej1GLnBhZGRpbmc/Ri5wYWRkaW5nOkg/MTo0O3ZhciBLLFo9UyhGKSxVPVoubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoTi5sZW5ndGg+VXx8bmV3IEkoTikuY21wKFoubW9kdWx1''@;'; put 'put ''cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Sz1IP0EobmV3IEkoTiksWik6ZihOLFopO3ZhciBYPU0uYWxsb2MoVS1LLmxlbmd0aCk7aWYoSz1NLmNvbmNhdChbWCxLXSxVKSw0PT09eilyZXR1cm4gZnVuY3Rpb24gTyhCLEYpe3ZhciBOPUIubW9kdWx1cy5ieXRl''@;'; put 'put ''TGVuZ3RoKCksSD1UKCJzaGExIikudXBkYXRlKE0uYWxsb2MoMCkpLmRpZ2VzdCgpLHo9SC5sZW5ndGg7aWYoMCE9PUZbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIFo9Ri5zbGljZSgxLHorMSksVT1GLnNsaWNlKHorMSksSz1vKFosaChVLHopKSxYPW8oVSxo''@;'; put 'put ''KEssTi16LTEpKTtpZihmdW5jdGlvbiBFKEIsRil7Qj1NLmZyb20oQiksRj1NLmZyb20oRik7dmFyIE49MCxIPUIubGVuZ3RoO0IubGVuZ3RoIT09Ri5sZW5ndGgmJihOKyssSD1NYXRoLm1pbihCLmxlbmd0aCxGLmxlbmd0aCkpO2Zvcih2YXIgej0tMTsrK3o8SDspTis9Qlt6XV5GW3pdO3Jl''@;'; put 'put ''dHVybiBOfShILFguc2xpY2UoMCx6KSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBuZT16OzA9PT1YW25lXTspbmUrKztpZigxIT09WFtuZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gWC5zbGljZShuZSl9KFosSyk7''@;'; put 'put ''aWYoMT09PXopcmV0dXJuIGZ1bmN0aW9uIEQoQixGLE4pe2Zvcih2YXIgSD1GLnNsaWNlKDAsMiksej0yLFo9MDswIT09Rlt6KytdOylpZih6Pj1GLmxlbmd0aCl7WisrO2JyZWFrfXZhciBVPUYuc2xpY2UoMix6LTEpO2lmKCgiMDAwMiIhPT1ILnRvU3RyaW5nKCJoZXgiKSYmIU58fCIwMDAx''@;'; put 'put ''IiE9PUgudG9TdHJpbmcoImhleCIpJiZOKSYmWisrLFUubGVuZ3RoPDgmJlorKyxaKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBGLnNsaWNlKHopfSgwLEssSCk7aWYoMz09PXopcmV0dXJuIEs7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19''@;'; put 'put ''LDg3MjY3KHRlLGosZCl7dmFyIFM9ZCg2NTY2NyksaD1kKDMzNDIpLG89ZCg2NzIxMSksST1kKDMwNzE1KSxmPWQoMzcxOTYpLFQ9ZCgxNjUwOCksQT1kKDEwNTY4KSxNPWQoMTQxMDUpLE89ZCgyNzA1NCkuQnVmZmVyO3RlLmV4cG9ydHM9ZnVuY3Rpb24oTixILHope3ZhciBaO1o9Ti5wYWRk''@;'; put 'put ''aW5nP04ucGFkZGluZzp6PzE6NDt2YXIgSyxVPVMoTik7aWYoND09PVopSz1mdW5jdGlvbiBEKEYsTil7dmFyIEg9Ri5tb2R1bHVzLmJ5dGVMZW5ndGgoKSx6PU4ubGVuZ3RoLFo9bygic2hhMSIpLnVwZGF0ZShPLmFsbG9jKDApKS5kaWdlc3QoKSxVPVoubGVuZ3RoLEs9MipVO2lmKHo+SC1L''@;'; put 'put ''LTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIFg9Ty5hbGxvYyhILXotSy0yKSxuZT1ILVUtMSxzZT1oKFUpLGhlPWYoTy5jb25jYXQoW1osWCxPLmFsbG9jKDEsMSksTl0sbmUpLEkoc2UsbmUpKSxfZT1mKHNlLEkoaGUsVSkpO3JldHVybiBuZXcgVChPLmNvbmNh''@;'; put 'put ''dChbTy5hbGxvYygxKSxfZSxoZV0sSCkpfShVLEgpO2Vsc2UgaWYoMT09PVopSz1mdW5jdGlvbiBFKEYsTixIKXt2YXIgVSx6PU4ubGVuZ3RoLFo9Ri5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZih6PlotMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIFU9SD9P''@;'; put 'put ''LmFsbG9jKFotei0zLDI1NSk6ZnVuY3Rpb24gQihGKXtmb3IodmFyIFUsTj1PLmFsbG9jVW5zYWZlKEYpLEg9MCx6PWgoMipGKSxaPTA7SDxGOylaPT09ei5sZW5ndGgmJih6PWgoMipGKSxaPTApLChVPXpbWisrXSkmJihOW0grK109VSk7cmV0dXJuIE59KFotei0zKSxuZXcgVChPLmNvbmNh''@;'; put 'put ''dChbTy5mcm9tKFswLEg/MToyXSksVSxPLmFsbG9jKDEpLE5dLFopKX0oVSxILHopO2Vsc2V7aWYoMyE9PVopdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigoSz1uZXcgVChIKSkuY21wKFUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZv''@;'; put 'put ''ciBtb2R1bHVzIil9cmV0dXJuIHo/TShLLFUpOkEoSyxVKX19LDEwNTY4KHRlLGosZCl7dmFyIFM9ZCgxNjUwOCksaD1kKDI3MDU0KS5CdWZmZXI7dGUuZXhwb3J0cz1mdW5jdGlvbiBvKEksZil7cmV0dXJuIGguZnJvbShJLnRvUmVkKFMubW9udChmLm1vZHVsdXMpKS5yZWRQb3cobmV3IFMo''@;'; put 'put ''Zi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sMzcxOTYodGUpe3RlLmV4cG9ydHM9ZnVuY3Rpb24oZCxTKXtmb3IodmFyIGg9ZC5sZW5ndGgsbz0tMTsrK288aDspZFtvXV49U1tvXTtyZXR1cm4gZH19LDMzNDIodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9NjU1''@;'; put 'put ''MzYsST1kKDI3MDU0KS5CdWZmZXIsZj1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG87dGUuZXhwb3J0cz1mJiZmLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBUKEEsTSl7aWYoQT40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9t''@;'; put 'put ''IGJ5dGVzIik7dmFyIE89SS5hbGxvY1Vuc2FmZShBKTtpZihBPjApaWYoQT5TKWZvcih2YXIgRD0wO0Q8QTtEKz1TKWYuZ2V0UmFuZG9tVmFsdWVzKE8uc2xpY2UoRCxEK1MpKTtlbHNlIGYuZ2V0UmFuZG9tVmFsdWVzKE8pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBNP3Byb2Nlc3MubmV4''@;'; put 'put ''dFRpY2soZnVuY3Rpb24oKXtNKG51bGwsTyl9KTpPfTpmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBs''@;'; put 'put ''b3JlciAxMSIpfX0sOTY4Mih0ZSxqLGQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBTKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4''@;'; put 'put ''cGxvcmVyIDExIil9dmFyIGg9ZCgyNzA1NCksbz1kKDMzNDIpLEk9aC5CdWZmZXIsZj1oLmtNYXhMZW5ndGgsVD1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG8sQT1NYXRoLnBvdygyLDMyKS0xO2Z1bmN0aW9uIE0oRixOKXtpZigibnVtYmVyIiE9dHlwZW9mIEZ8fEYhPUYpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihGPkF8fEY8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKEY+Znx8Rj5OKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24g''@;'; put 'put ''TyhGLE4sSCl7aWYoIm51bWJlciIhPXR5cGVvZiBGfHxGIT1GKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51bWJlciIpO2lmKEY+QXx8RjwwKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKEYrTj5IfHxGPmYpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoImJ1ZmZlciB0b28gc21hbGwiKX1mdW5jdGlvbiBFKEYsTixILHope2lmKHByb2Nlc3MuYnJvd3Nlcil7dmFyIFU9bmV3IFVpbnQ4QXJyYXkoRi5idWZmZXIsTixIKTtyZXR1cm4gVC5nZXRSYW5kb21WYWx1ZXMoVSksej92b2lkIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24o''@;'; put 'put ''KXt6KG51bGwsRil9KTpGfWlmKCF6KXJldHVybiBvKEgpLmNvcHkoRixOKSxGO28oSCxmdW5jdGlvbihYLG5lKXtpZihYKXJldHVybiB6KFgpO25lLmNvcHkoRixOKSx6KG51bGwsRil9KX1UJiZULmdldFJhbmRvbVZhbHVlc3x8IXByb2Nlc3MuYnJvd3Nlcj8oai5yYW5kb21GaWxsPWZ1bmN0''@;'; put 'put ''aW9uIEQoRixOLEgseil7aWYoIShJLmlzQnVmZmVyKEYpfHxGIGluc3RhbmNlb2YgZ2xvYmFsLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOKXo9TixO''@;'; put 'put ''PTAsSD1GLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBIKXo9SCxIPUYubGVuZ3RoLU47ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygeil0aHJvdyBuZXcgVHlwZUVycm9yKCciY2IiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiBNKE4sRi5sZW5ndGgp''@;'; put 'put ''LE8oSCxOLEYubGVuZ3RoKSxFKEYsTixILHopfSxqLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uIEIoRixOLEgpe2lmKHR5cGVvZiBOPiJ1IiYmKE49MCksIShJLmlzQnVmZmVyKEYpfHxGIGluc3RhbmNlb2YgZ2xvYmFsLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFy''@;'; put 'put ''Z3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiBNKE4sRi5sZW5ndGgpLHZvaWQgMD09PUgmJihIPUYubGVuZ3RoLU4pLE8oSCxOLEYubGVuZ3RoKSxFKEYsTixIKX0pOihqLnJhbmRvbUZpbGw9UyxqLnJhbmRvbUZpbGxTeW5jPVMpfSw3NDA3NSh0ZSxqLGQp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk2NTYpLGg9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEIpe3ZhciBGPVtdO2Zvcih2YXIgTiBpbiBCKUYucHVzaChOKTtyZXR1cm4gRn07dGUuZXhwb3J0cz1PO3ZhciBvPU9iamVjdC5jcmVhdGUoZCgyNzYzNykpO28uaW5oZXJpdHM9ZCg3MTk5Myk7dmFy''@;'; put 'put ''IEk9ZCgxOTYwOSksZj1kKDQ3ODQ5KTtvLmluaGVyaXRzKE8sSSk7Zm9yKHZhciBUPWgoZi5wcm90b3R5cGUpLEE9MDtBPFQubGVuZ3RoO0ErKyl7dmFyIE09VFtBXTtPLnByb3RvdHlwZVtNXXx8KE8ucHJvdG90eXBlW01dPWYucHJvdG90eXBlW01dKX1mdW5jdGlvbiBPKEIpe2lmKCEodGhp''@;'; put 'put ''cyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyhCKTtJLmNhbGwodGhpcyxCKSxmLmNhbGwodGhpcyxCKSxCJiYhMT09PUIucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxCJiYhMT09PUIud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsQiYm''@;'; put 'put ''ITE9PT1CLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZSgiZW5kIixEKX1mdW5jdGlvbiBEKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxTLm5leHRUaWNrKEUsdGhpcyl9ZnVuY3Rpb24gRShCKXtCLmVuZCgp''@;'; put 'put ''fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlw''@;'; put 'put ''ZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1''@;'; put 'put ''bmN0aW9uKEIpe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1CLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUIpfX0pLE8ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0''@;'; put 'put ''aW9uKEIsRil7dGhpcy5wdXNoKG51bGwpLHRoaXMuZW5kKCksUy5uZXh0VGljayhGLEIpfX0sMTg4MjModGUsaixkKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1vO3ZhciBTPWQoMjkwOSksaD1PYmplY3QuY3JlYXRlKGQoMjc2MzcpKTtmdW5jdGlvbiBvKEkpe2lmKCEodGhpcyBpbnN0YW5j''@;'; put 'put ''ZW9mIG8pKXJldHVybiBuZXcgbyhJKTtTLmNhbGwodGhpcyxJKX1oLmluaGVyaXRzPWQoNzE5OTMpLGguaW5oZXJpdHMobyxTKSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEksZixUKXtUKG51bGwsSSl9fSwxOTYwOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk2NTYp''@;'; put 'put ''O3RlLmV4cG9ydHM9WDt2YXIgbyxoPWQoMjAwNTMpO1guUmVhZGFibGVTdGF0ZT1LLGQoNDQzNTYpO3ZhciBmPWZ1bmN0aW9uKHZlLHVlKXtyZXR1cm4gdmUubGlzdGVuZXJzKHVlKS5sZW5ndGh9LFQ9ZCgxODM0MiksQT1kKDI2NTUpLkJ1ZmZlcixNPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9i''@;'; put 'put ''YWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sRT1PYmplY3QuY3JlYXRlKGQoMjc2MzcpKTtFLmluaGVyaXRzPWQoNzE5OTMpO3ZhciBCPWQoNzk4MzgpLEY9dm9pZCAwO0Y9QiYmQi5kZWJ1Z2xvZz9C''@;'; put 'put ''LmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIHosTj1kKDI3ODA5KSxIPWQoMjE1MDkpO0UuaW5oZXJpdHMoWCxUKTt2YXIgWj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBLKHZlLHVlKXt2YXIgemU9dWUgaW5zdGFuY2Vv''@;'; put 'put ''ZihvPW98fGQoNzQwNzUpKTt0aGlzLm9iamVjdE1vZGU9ISEodmU9dmV8fHt9KS5vYmplY3RNb2RlLHplJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF2ZS5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBPZT12ZS5oaWdoV2F0ZXJNYXJrLENlPXZlLnJlYWRhYmxlSGlnaFdh''@;'; put 'put ''dGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9T2V8fDA9PT1PZT9PZTp6ZSYmKENlfHwwPT09Q2UpP0NlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuYnVmZmVyPW5ldyBOLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhp''@;'; put 'put ''cy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz12ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1u''@;'; put 'put ''dWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCx2ZS5lbmNvZGluZyYmKHp8fCh6PWQoNzg0NTQpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgeih2ZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz12ZS5lbmNvZGluZyl9ZnVuY3Rpb24gWCh2ZSl7aWYobz1vfHxkKDc0MDc1KSwhKHRoaXMgaW5zdGFuY2VvZiBY''@;'; put 'put ''KSlyZXR1cm4gbmV3IFgodmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IEsodmUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx2ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5yZWFkJiYodGhpcy5fcmVhZD12ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUuZGVzdHJveSYmKHRoaXMuX2Rl''@;'; put 'put ''c3Ryb3k9dmUuZGVzdHJveSkpLFQuY2FsbCh0aGlzKX1mdW5jdGlvbiBuZSh2ZSx1ZSx6ZSxPZSxDZSl7dmFyIHhlLGtlPXZlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09dWU/KGtlLnJlYWRpbmc9ITEsZnVuY3Rpb24gcyh2ZSx1ZSl7aWYoIXVlLmVuZGVkKXtpZih1ZS5kZWNvZGVy''@;'; put 'put ''KXt2YXIgemU9dWUuZGVjb2Rlci5lbmQoKTt6ZSYmemUubGVuZ3RoJiYodWUuYnVmZmVyLnB1c2goemUpLHVlLmxlbmd0aCs9dWUub2JqZWN0TW9kZT8xOnplLmxlbmd0aCl9dWUuZW5kZWQ9ITAsdSh2ZSl9fSh2ZSxrZSkpOihDZXx8KHhlPWZ1bmN0aW9uIGhlKHZlLHVlKXt2YXIgemU7cmV0''@;'; put 'put ''dXJuIWZ1bmN0aW9uIEQodmUpe3JldHVybiBBLmlzQnVmZmVyKHZlKXx8dmUgaW5zdGFuY2VvZiBNfSh1ZSkmJiJzdHJpbmciIT10eXBlb2YgdWUmJnZvaWQgMCE9PXVlJiYhdmUub2JqZWN0TW9kZSYmKHplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsi''@;'; put 'put ''KSksemV9KGtlLHVlKSkseGU/dmUuZW1pdCgiZXJyb3IiLHhlKTprZS5vYmplY3RNb2RlfHx1ZSYmdWUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgdWUmJiFrZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodWUpIT09QS5wcm90b3R5cGUmJih1ZT1mdW5jdGlvbiBPKHZl''@;'; put 'put ''KXtyZXR1cm4gQS5mcm9tKHZlKX0odWUpKSxPZT9rZS5lbmRFbWl0dGVkP3ZlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOnNlKHZlLGtlLHVlLCEwKTprZS5lbmRlZD92ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0u''@;'; put 'put ''cHVzaCgpIGFmdGVyIEVPRiIpKTooa2UucmVhZGluZz0hMSxrZS5kZWNvZGVyJiYhemU/KHVlPWtlLmRlY29kZXIud3JpdGUodWUpLGtlLm9iamVjdE1vZGV8fDAhPT11ZS5sZW5ndGg/c2UodmUsa2UsdWUsITEpOnAodmUsa2UpKTpzZSh2ZSxrZSx1ZSwhMSkpKTpPZXx8KGtlLnJlYWRpbmc9''@;'; put 'put ''ITEpKSxmdW5jdGlvbiBfZSh2ZSl7cmV0dXJuIXZlLmVuZGVkJiYodmUubmVlZFJlYWRhYmxlfHx2ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFya3x8MD09PXZlLmxlbmd0aCl9KGtlKX1mdW5jdGlvbiBzZSh2ZSx1ZSx6ZSxPZSl7dWUuZmxvd2luZyYmMD09PXVlLmxlbmd0aCYmIXVlLnN5bmM/''@;'; put 'put ''KHZlLmVtaXQoImRhdGEiLHplKSx2ZS5yZWFkKDApKToodWUubGVuZ3RoKz11ZS5vYmplY3RNb2RlPzE6emUubGVuZ3RoLE9lP3VlLmJ1ZmZlci51bnNoaWZ0KHplKTp1ZS5idWZmZXIucHVzaCh6ZSksdWUubmVlZFJlYWRhYmxlJiZ1KHZlKSkscCh2ZSx1ZSl9ZnVuY3Rpb24gUih2ZSx1ZSl7''@;'; put 'put ''cmV0dXJuIHZlPD0wfHwwPT09dWUubGVuZ3RoJiZ1ZS5lbmRlZD8wOnVlLm9iamVjdE1vZGU/MTp2ZSE9dmU/dWUuZmxvd2luZyYmdWUubGVuZ3RoP3VlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnVlLmxlbmd0aDoodmU+dWUuaGlnaFdhdGVyTWFyayYmKHVlLmhpZ2hXYXRlck1hcms9ZnVu''@;'; put 'put ''Y3Rpb24gRmUodmUpe3JldHVybiB2ZT49ODM4ODYwOD92ZT04Mzg4NjA4Oih2ZS0tLHZlfD12ZT4+PjEsdmV8PXZlPj4+Mix2ZXw9dmU+Pj40LHZlfD12ZT4+PjgsdmV8PXZlPj4+MTYsdmUrKyksdmV9KHZlKSksdmU8PXVlLmxlbmd0aD92ZTp1ZS5lbmRlZD91ZS5sZW5ndGg6KHVlLm5lZWRS''@;'; put 'put ''ZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gdSh2ZSl7dmFyIHVlPXZlLl9yZWFkYWJsZVN0YXRlO3VlLm5lZWRSZWFkYWJsZT0hMSx1ZS5lbWl0dGVkUmVhZGFibGV8fChGKCJlbWl0UmVhZGFibGUiLHVlLmZsb3dpbmcpLHVlLmVtaXR0ZWRSZWFkYWJsZT0hMCx1ZS5zeW5jP1MubmV4dFRpY2so''@;'; put 'put ''dix2ZSk6dih2ZSkpfWZ1bmN0aW9uIHYodmUpe0YoImVtaXQgcmVhZGFibGUiKSx2ZS5lbWl0KCJyZWFkYWJsZSIpLGIodmUpfWZ1bmN0aW9uIHAodmUsdWUpe3VlLnJlYWRpbmdNb3JlfHwodWUucmVhZGluZ01vcmU9ITAsUy5uZXh0VGljayhfLHZlLHVlKSl9ZnVuY3Rpb24gXyh2ZSx1ZSl7''@;'; put 'put ''Zm9yKHZhciB6ZT11ZS5sZW5ndGg7IXVlLnJlYWRpbmcmJiF1ZS5mbG93aW5nJiYhdWUuZW5kZWQmJnVlLmxlbmd0aDx1ZS5oaWdoV2F0ZXJNYXJrJiYoRigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSx2ZS5yZWFkKDApLHplIT09dWUubGVuZ3RoKTspemU9dWUubGVuZ3RoO3VlLnJlYWRpbmdN''@;'; put 'put ''b3JlPSExfWZ1bmN0aW9uIEwodmUpe0YoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHZlLnJlYWQoMCl9ZnVuY3Rpb24gbCh2ZSx1ZSl7dWUucmVhZGluZ3x8KEYoInJlc3VtZSByZWFkIDAiKSx2ZS5yZWFkKDApKSx1ZS5yZXN1bWVTY2hlZHVsZWQ9ITEsdWUuYXdhaXREcmFpbj0wLHZl''@;'; put 'put ''LmVtaXQoInJlc3VtZSIpLGIodmUpLHVlLmZsb3dpbmcmJiF1ZS5yZWFkaW5nJiZ2ZS5yZWFkKDApfWZ1bmN0aW9uIGIodmUpe3ZhciB1ZT12ZS5fcmVhZGFibGVTdGF0ZTtmb3IoRigiZmxvdyIsdWUuZmxvd2luZyk7dWUuZmxvd2luZyYmbnVsbCE9PXZlLnJlYWQoKTspO31mdW5jdGlvbiBx''@;'; put 'put ''KHZlLHVlKXtyZXR1cm4gMD09PXVlLmxlbmd0aD9udWxsOih1ZS5vYmplY3RNb2RlP3plPXVlLmJ1ZmZlci5zaGlmdCgpOiF2ZXx8dmU+PXVlLmxlbmd0aD8oemU9dWUuZGVjb2Rlcj91ZS5idWZmZXIuam9pbigiIik6MT09PXVlLmJ1ZmZlci5sZW5ndGg/dWUuYnVmZmVyLmhlYWQuZGF0YTp1''@;'; put 'put ''ZS5idWZmZXIuY29uY2F0KHVlLmxlbmd0aCksdWUuYnVmZmVyLmNsZWFyKCkpOnplPWZ1bmN0aW9uIEcodmUsdWUsemUpe3ZhciBPZTtyZXR1cm4gdmU8dWUuaGVhZC5kYXRhLmxlbmd0aD8oT2U9dWUuaGVhZC5kYXRhLnNsaWNlKDAsdmUpLHVlLmhlYWQuZGF0YT11ZS5oZWFkLmRhdGEuc2xp''@;'; put 'put ''Y2UodmUpKTpPZT12ZT09PXVlLmhlYWQuZGF0YS5sZW5ndGg/dWUuc2hpZnQoKTp6ZT9mdW5jdGlvbiBRKHZlLHVlKXt2YXIgemU9dWUuaGVhZCxPZT0xLENlPXplLmRhdGE7Zm9yKHZlLT1DZS5sZW5ndGg7emU9emUubmV4dDspe3ZhciBrZT16ZS5kYXRhLHhlPXZlPmtlLmxlbmd0aD9rZS5s''@;'; put 'put ''ZW5ndGg6dmU7aWYoQ2UrPXhlPT09a2UubGVuZ3RoP2tlOmtlLnNsaWNlKDAsdmUpLDA9PSh2ZS09eGUpKXt4ZT09PWtlLmxlbmd0aD8oKytPZSx1ZS5oZWFkPXplLm5leHQ/emUubmV4dDp1ZS50YWlsPW51bGwpOih1ZS5oZWFkPXplLHplLmRhdGE9a2Uuc2xpY2UoeGUpKTticmVha30rK09l''@;'; put 'put ''fXJldHVybiB1ZS5sZW5ndGgtPU9lLENlfSh2ZSx1ZSk6ZnVuY3Rpb24gcGUodmUsdWUpe3ZhciB6ZT1BLmFsbG9jVW5zYWZlKHZlKSxPZT11ZS5oZWFkLENlPTE7Zm9yKE9lLmRhdGEuY29weSh6ZSksdmUtPU9lLmRhdGEubGVuZ3RoO09lPU9lLm5leHQ7KXt2YXIga2U9T2UuZGF0YSx4ZT12''@;'; put 'put ''ZT5rZS5sZW5ndGg/a2UubGVuZ3RoOnZlO2lmKGtlLmNvcHkoemUsemUubGVuZ3RoLXZlLDAseGUpLDA9PSh2ZS09eGUpKXt4ZT09PWtlLmxlbmd0aD8oKytDZSx1ZS5oZWFkPU9lLm5leHQ/T2UubmV4dDp1ZS50YWlsPW51bGwpOih1ZS5oZWFkPU9lLE9lLmRhdGE9a2Uuc2xpY2UoeGUpKTti''@;'; put 'put ''cmVha30rK0NlfXJldHVybiB1ZS5sZW5ndGgtPUNlLHplfSh2ZSx1ZSksT2V9KHZlLHVlLmJ1ZmZlcix1ZS5kZWNvZGVyKSx6ZSk7dmFyIHplfWZ1bmN0aW9uIFBlKHZlKXt2YXIgdWU9dmUuX3JlYWRhYmxlU3RhdGU7aWYodWUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFi''@;'; put 'put ''bGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt1ZS5lbmRFbWl0dGVkfHwodWUuZW5kZWQ9ITAsUy5uZXh0VGljayhaZSx1ZSx2ZSkpfWZ1bmN0aW9uIFplKHZlLHVlKXshdmUuZW5kRW1pdHRlZCYmMD09PXZlLmxlbmd0aCYmKHZlLmVuZEVtaXR0ZWQ9ITAsdWUucmVhZGFibGU9''@;'; put 'put ''ITEsdWUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIHFlKHZlLHVlKXtmb3IodmFyIHplPTAsT2U9dmUubGVuZ3RoO3plPE9lO3plKyspaWYodmVbemVdPT09dWUpcmV0dXJuIHplO3JldHVybi0xfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD12ZSl9fSksWC5wcm90b3R5cGUuZGVz''@;'; put 'put ''dHJveT1ILmRlc3Ryb3ksWC5wcm90b3R5cGUuX3VuZGVzdHJveT1ILnVuZGVzdHJveSxYLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih2ZSx1ZSl7dGhpcy5wdXNoKG51bGwpLHVlKHZlKX0sWC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih2ZSx1ZSl7dmFyIE9lLHplPXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7cmV0dXJuIHplLm9iamVjdE1vZGU/T2U9ITA6InN0cmluZyI9PXR5cGVvZiB2ZSYmKCh1ZT11ZXx8emUuZGVmYXVsdEVuY29kaW5nKSE9PXplLmVuY29kaW5nJiYodmU9QS5mcm9tKHZlLHVlKSx1ZT0iIiksT2U9ITApLG5lKHRoaXMsdmUsdWUsITEsT2UpfSxYLnByb3RvdHlw''@;'; put 'put ''ZS51bnNoaWZ0PWZ1bmN0aW9uKHZlKXtyZXR1cm4gbmUodGhpcyx2ZSxudWxsLCEwLCExKX0sWC5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sWC5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe3Jl''@;'; put 'put ''dHVybiB6fHwoej1kKDc4NDU0KS5JKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IHoodmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dmUsdGhpc30sWC5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih2ZSl7RigicmVhZCIsdmUpLHZlPXBhcnNlSW50KHZlLDEwKTt2YXIg''@;'; put 'put ''dWU9dGhpcy5fcmVhZGFibGVTdGF0ZSx6ZT12ZTtpZigwIT09dmUmJih1ZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT12ZSYmdWUubmVlZFJlYWRhYmxlJiYodWUubGVuZ3RoPj11ZS5oaWdoV2F0ZXJNYXJrfHx1ZS5lbmRlZCkpcmV0dXJuIEYoInJlYWQ6IGVtaXRSZWFkYWJsZSIsdWUubGVu''@;'; put 'put ''Z3RoLHVlLmVuZGVkKSwwPT09dWUubGVuZ3RoJiZ1ZS5lbmRlZD9QZSh0aGlzKTp1KHRoaXMpLG51bGw7aWYoMD09PSh2ZT1SKHZlLHVlKSkmJnVlLmVuZGVkKXJldHVybiAwPT09dWUubGVuZ3RoJiZQZSh0aGlzKSxudWxsO3ZhciBDZSxPZT11ZS5uZWVkUmVhZGFibGU7cmV0dXJuIEYoIm5l''@;'; put 'put ''ZWQgcmVhZGFibGUiLE9lKSwoMD09PXVlLmxlbmd0aHx8dWUubGVuZ3RoLXZlPHVlLmhpZ2hXYXRlck1hcmspJiZGKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsT2U9ITApLHVlLmVuZGVkfHx1ZS5yZWFkaW5nP0YoInJlYWRpbmcgb3IgZW5kZWQiLE9lPSExKTpPZSYmKEYoImRvIHJl''@;'; put 'put ''YWQiKSx1ZS5yZWFkaW5nPSEwLHVlLnN5bmM9ITAsMD09PXVlLmxlbmd0aCYmKHVlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh1ZS5oaWdoV2F0ZXJNYXJrKSx1ZS5zeW5jPSExLHVlLnJlYWRpbmd8fCh2ZT1SKHplLHVlKSkpLG51bGw9PT0oQ2U9dmU+MD9xKHZlLHVlKTpudWxsKT8o''@;'; put 'put ''dWUubmVlZFJlYWRhYmxlPSEwLHZlPTApOnVlLmxlbmd0aC09dmUsMD09PXVlLmxlbmd0aCYmKHVlLmVuZGVkfHwodWUubmVlZFJlYWRhYmxlPSEwKSx6ZSE9PXZlJiZ1ZS5lbmRlZCYmUGUodGhpcykpLG51bGwhPT1DZSYmdGhpcy5lbWl0KCJkYXRhIixDZSksQ2V9LFgucHJvdG90eXBlLl9y''@;'; put 'put ''ZWFkPWZ1bmN0aW9uKHZlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxYLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHZlLHVlKXt2YXIgemU9dGhpcyxPZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChPZS5waXBlc0NvdW50''@;'; put 'put ''KXtjYXNlIDA6T2UucGlwZXM9dmU7YnJlYWs7Y2FzZSAxOk9lLnBpcGVzPVtPZS5waXBlcyx2ZV07YnJlYWs7ZGVmYXVsdDpPZS5waXBlcy5wdXNoKHZlKX1PZS5waXBlc0NvdW50Kz0xLEYoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsT2UucGlwZXNDb3VudCx1ZSk7dmFyIGtlPXVlJiYhMT09''@;'; put 'put ''PXVlLmVuZHx8dmU9PT1wcm9jZXNzLnN0ZG91dHx8dmU9PT1wcm9jZXNzLnN0ZGVycj92dDpNZTtmdW5jdGlvbiBNZSgpe0YoIm9uZW5kIiksdmUuZW5kKCl9T2UuZW5kRW1pdHRlZD9TLm5leHRUaWNrKGtlKTp6ZS5vbmNlKCJlbmQiLGtlKSx2ZS5vbigidW5waXBlIixmdW5jdGlvbiB4ZShZ''@;'; put 'put ''dCx0dCl7Rigib251bnBpcGUiKSxZdD09PXplJiZ0dCYmITE9PT10dC5oYXNVbnBpcGVkJiYodHQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiB3ZSgpe0YoImNsZWFudXAiKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHF0KSx2ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixodCksdmUucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIoImRyYWluIixJZSksdmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixZZSksdmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIseGUpLHplLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE1lKSx6ZS5yZW1vdmVMaXN0ZW5lcigiZW5kIix2dCksemUucmVtb3ZlTGlzdGVuZXIoImRhdGEi''@;'; put 'put ''LEtlKSxiZT0hMCxPZS5hd2FpdERyYWluJiYoIXZlLl93cml0YWJsZVN0YXRlfHx2ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZJZSgpfSgpKX0pO3ZhciBJZT1mdW5jdGlvbiBrKHZlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdWU9dmUuX3JlYWRhYmxlU3RhdGU7RigicGlwZU9uRHJh''@;'; put 'put ''aW4iLHVlLmF3YWl0RHJhaW4pLHVlLmF3YWl0RHJhaW4mJnVlLmF3YWl0RHJhaW4tLSwwPT09dWUuYXdhaXREcmFpbiYmZih2ZSwiZGF0YSIpJiYodWUuZmxvd2luZz0hMCxiKHZlKSl9fSh6ZSk7dmUub24oImRyYWluIixJZSk7dmFyIGJlPSExLHB0PSExO2Z1bmN0aW9uIEtlKFl0KXtGKCJv''@;'; put 'put ''bmRhdGEiKSxwdD0hMSwhMT09PXZlLndyaXRlKFl0KSYmIXB0JiYoKDE9PT1PZS5waXBlc0NvdW50JiZPZS5waXBlcz09PXZlfHxPZS5waXBlc0NvdW50PjEmJi0xIT09cWUoT2UucGlwZXMsdmUpKSYmIWJlJiYoRigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixPZS5hd2FpdERyYWlu''@;'; put 'put ''KSxPZS5hd2FpdERyYWluKysscHQ9ITApLHplLnBhdXNlKCkpfWZ1bmN0aW9uIFllKFl0KXtGKCJvbmVycm9yIixZdCksdnQoKSx2ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFllKSwwPT09Zih2ZSwiZXJyb3IiKSYmdmUuZW1pdCgiZXJyb3IiLFl0KX1mdW5jdGlvbiBxdCgpe3ZlLnJlbW92''@;'; put 'put ''ZUxpc3RlbmVyKCJmaW5pc2giLGh0KSx2dCgpfWZ1bmN0aW9uIGh0KCl7Rigib25maW5pc2giKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHF0KSx2dCgpfWZ1bmN0aW9uIHZ0KCl7RigidW5waXBlIiksemUudW5waXBlKHZlKX1yZXR1cm4gemUub24oImRhdGEiLEtlKSxmdW5jdGlvbiBV''@;'; put 'put ''KHZlLHVlLHplKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdmUucHJlcGVuZExpc3RlbmVyKXJldHVybiB2ZS5wcmVwZW5kTGlzdGVuZXIodWUsemUpO3ZlLl9ldmVudHMmJnZlLl9ldmVudHNbdWVdP2godmUuX2V2ZW50c1t1ZV0pP3ZlLl9ldmVudHNbdWVdLnVuc2hpZnQoemUpOnZlLl9ldmVu''@;'; put 'put ''dHNbdWVdPVt6ZSx2ZS5fZXZlbnRzW3VlXV06dmUub24odWUsemUpfSh2ZSwiZXJyb3IiLFllKSx2ZS5vbmNlKCJjbG9zZSIscXQpLHZlLm9uY2UoImZpbmlzaCIsaHQpLHZlLmVtaXQoInBpcGUiLHplKSxPZS5mbG93aW5nfHwoRigicGlwZSByZXN1bWUiKSx6ZS5yZXN1bWUoKSksdmV9LFgu''@;'; put 'put ''cHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih2ZSl7dmFyIHVlPXRoaXMuX3JlYWRhYmxlU3RhdGUsemU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT11ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT11ZS5waXBlc0NvdW50KXJldHVybiB2ZSYmdmUhPT11ZS5waXBlc3x8KHZlfHwodmU9''@;'; put 'put ''dWUucGlwZXMpLHVlLnBpcGVzPW51bGwsdWUucGlwZXNDb3VudD0wLHVlLmZsb3dpbmc9ITEsdmUmJnZlLmVtaXQoInVucGlwZSIsdGhpcyx6ZSkpLHRoaXM7aWYoIXZlKXt2YXIgT2U9dWUucGlwZXMsQ2U9dWUucGlwZXNDb3VudDt1ZS5waXBlcz1udWxsLHVlLnBpcGVzQ291bnQ9MCx1ZS5m''@;'; put 'put ''bG93aW5nPSExO2Zvcih2YXIga2U9MDtrZTxDZTtrZSsrKU9lW2tlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgeGU9cWUodWUucGlwZXMsdmUpO3JldHVybi0xPT09eGV8fCh1ZS5waXBlcy5zcGxpY2UoeGUsMSksdWUucGlwZXNDb3VudC09''@;'; put 'put ''MSwxPT09dWUucGlwZXNDb3VudCYmKHVlLnBpcGVzPXVlLnBpcGVzWzBdKSx2ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsemUpKSx0aGlzfSxYLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1YLnByb3RvdHlwZS5vbj1mdW5jdGlvbih2ZSx1ZSl7dmFyIHplPVQucHJvdG90eXBlLm9uLmNhbGwodGhpcyx2''@;'; put 'put ''ZSx1ZSk7aWYoImRhdGEiPT09dmUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09dmUpe3ZhciBPZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFPZS5lbmRFbWl0dGVkJiYhT2UucmVhZGFibGVMaXN0ZW5pbmcmJihPZS5y''@;'; put 'put ''ZWFkYWJsZUxpc3RlbmluZz1PZS5uZWVkUmVhZGFibGU9ITAsT2UuZW1pdHRlZFJlYWRhYmxlPSExLE9lLnJlYWRpbmc/T2UubGVuZ3RoJiZ1KHRoaXMpOlMubmV4dFRpY2soTCx0aGlzKSl9cmV0dXJuIHplfSxYLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdmU9dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZTtyZXR1cm4gdmUuZmxvd2luZ3x8KEYoInJlc3VtZSIpLHZlLmZsb3dpbmc9ITAsZnVuY3Rpb24geSh2ZSx1ZSl7dWUucmVzdW1lU2NoZWR1bGVkfHwodWUucmVzdW1lU2NoZWR1bGVkPSEwLFMubmV4dFRpY2sobCx2ZSx1ZSkpfSh0aGlzLHZlKSksdGhpc30sWC5wcm90b3R5''@;'; put 'put ''cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gRigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoRigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5l''@;'; put 'put ''bWl0KCJwYXVzZSIpKSx0aGlzfSxYLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHZlKXt2YXIgdWU9dGhpcyx6ZT10aGlzLl9yZWFkYWJsZVN0YXRlLE9lPSExO2Zvcih2YXIgQ2UgaW4gdmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihGKCJ3cmFwcGVkIGVuZCIpLHplLmRlY29kZXImJiF6ZS5l''@;'; put 'put ''bmRlZCl7dmFyIHhlPXplLmRlY29kZXIuZW5kKCk7eGUmJnhlLmxlbmd0aCYmdWUucHVzaCh4ZSl9dWUucHVzaChudWxsKX0pLHZlLm9uKCJkYXRhIixmdW5jdGlvbih4ZSl7Rigid3JhcHBlZCBkYXRhIiksemUuZGVjb2RlciYmKHhlPXplLmRlY29kZXIud3JpdGUoeGUpKSx6ZS5vYmplY3RN''@;'; put 'put ''b2RlJiZudWxsPT14ZXx8ISh6ZS5vYmplY3RNb2RlfHx4ZSYmeGUubGVuZ3RoKXx8dWUucHVzaCh4ZSl8fChPZT0hMCx2ZS5wYXVzZSgpKX0pLHZlKXZvaWQgMD09PXRoaXNbQ2VdJiYiZnVuY3Rpb24iPT10eXBlb2YgdmVbQ2VdJiYodGhpc1tDZV09ZnVuY3Rpb24oeGUpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB2ZVt4ZV0uYXBwbHkodmUsYXJndW1lbnRzKX19KENlKSk7Zm9yKHZhciBrZT0wO2tlPFoubGVuZ3RoO2tlKyspdmUub24oWltrZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxaW2tlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKHhlKXtGKCJ3cmFwcGVkIF9yZWFk''@;'; put 'put ''Iix4ZSksT2UmJihPZT0hMSx2ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJr''@;'; put 'put ''fX0pLFguX2Zyb21MaXN0PXF9LDI5MDkodGUsaixkKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1JO3ZhciBTPWQoNzQwNzUpLGg9T2JqZWN0LmNyZWF0ZShkKDI3NjM3KSk7ZnVuY3Rpb24gbyhBLE0pe3ZhciBPPXRoaXMuX3RyYW5zZm9ybVN0YXRlO08udHJhbnNmb3JtaW5nPSExO3ZhciBE''@;'; put 'put ''PU8ud3JpdGVjYjtpZighRClyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7Ty53cml0ZWNodW5rPW51bGwsTy53cml0ZWNiPW51bGwsbnVsbCE9TSYmdGhpcy5wdXNoKE0pLEQoQSk7dmFyIEU9dGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZTtFLnJlYWRpbmc9ITEsKEUubmVlZFJlYWRhYmxlfHxFLmxlbmd0aDxFLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEUuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gSShBKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEkoQSk7Uy5jYWxsKHRoaXMs''@;'; put 'put ''QSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOm8uYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFi''@;'; put 'put ''bGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEEmJigiZnVuY3Rpb24iPT10eXBlb2YgQS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09QS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBBLmZsdXNoJiYodGhpcy5fZmx1c2g9QS5mbHVzaCkpLHRoaXMub24oInByZWZp''@;'; put 'put ''bmlzaCIsZil9ZnVuY3Rpb24gZigpe3ZhciBBPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKE0sTyl7VChBLE0sTyl9KTpUKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBUKEEsTSxPKXtpZihNKXJldHVybiBBLmVtaXQoImVycm9yIixN''@;'; put 'put ''KTtpZihudWxsIT1PJiZBLnB1c2goTyksQS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihBLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxs''@;'; put 'put ''aW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEEucHVzaChudWxsKX1oLmluaGVyaXRzPWQoNzE5OTMpLGguaW5oZXJpdHMoSSxTKSxJLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEEsTSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRU''@;'; put 'put ''cmFuc2Zvcm09ITEsUy5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsQSxNKX0sSS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihBLE0sTyl7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEkucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihB''@;'; put 'put ''LE0sTyl7dmFyIEQ9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoRC53cml0ZWNiPU8sRC53cml0ZWNodW5rPUEsRC53cml0ZWVuY29kaW5nPU0sIUQudHJhbnNmb3JtaW5nKXt2YXIgRT10aGlzLl9yZWFkYWJsZVN0YXRlOyhELm5lZWRUcmFuc2Zvcm18fEUubmVlZFJlYWRhYmxlfHxFLmxlbmd0''@;'; put 'put ''aDxFLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEUuaGlnaFdhdGVyTWFyayl9fSxJLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihBKXt2YXIgTT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09TS53cml0ZWNodW5rJiZNLndyaXRlY2ImJiFNLnRyYW5zZm9ybWluZz8oTS50cmFuc2Zv''@;'; put 'put ''cm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKE0ud3JpdGVjaHVuayxNLndyaXRlZW5jb2RpbmcsTS5hZnRlclRyYW5zZm9ybSkpOk0ubmVlZFRyYW5zZm9ybT0hMH0sSS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oQSxNKXt2YXIgTz10aGlzO1MucHJvdG90eXBlLl9kZXN0cm95LmNhbGwo''@;'; put 'put ''dGhpcyxBLGZ1bmN0aW9uKEQpe00oRCksTy5lbWl0KCJjbG9zZSIpfSl9fSw0Nzg0OSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk2NTYpO2Z1bmN0aW9uIG8oeSl7dmFyIGw9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXsh''@;'; put 'put ''ZnVuY3Rpb24gTCh5LGwsYil7dmFyIHE9eS5lbnRyeTtmb3IoeS5lbnRyeT1udWxsO3E7KXt2YXIgRz1xLmNhbGxiYWNrO2wucGVuZGluZ2NiLS0sRyhiKSxxPXEubmV4dH1sLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXl9KGwseSl9fXRlLmV4cG9ydHM9Wjt2YXIgZixJPSFwcm9jZXNzLmJy''@;'; put 'put ''b3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpTLm5leHRUaWNrO1ouV3JpdGFibGVTdGF0ZT1IO3ZhciBUPU9iamVjdC5jcmVhdGUoZCgyNzYzNykpO1QuaW5oZXJpdHM9ZCg3MTk5Myk7dmFyIHosQT17''@;'; put 'put ''ZGVwcmVjYXRlOmQoMzM5OCl9LE09ZCgxODM0MiksTz1kKDI2NTUpLkJ1ZmZlcixEPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sRj1kKDIxNTA5KTtmdW5j''@;'; put 'put ''dGlvbiBOKCl7fWZ1bmN0aW9uIEgoeSxsKXtmPWZ8fGQoNzQwNzUpO3ZhciBiPWwgaW5zdGFuY2VvZiBmO3RoaXMub2JqZWN0TW9kZT0hISh5PXl8fHt9KS5vYmplY3RNb2RlLGImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXkud3JpdGFibGVPYmplY3RNb2RlKTt2YXIg''@;'; put 'put ''cT15LmhpZ2hXYXRlck1hcmssRz15LndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9cXx8MD09PXE/cTpiJiYoR3x8MD09PUcpP0c6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayks''@;'; put 'put ''dGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT15LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5n''@;'; put 'put ''PXkuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihQZSl7IWZ1bmN0aW9uIG1lKHksbCl7dmFyIGI9eS5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZSxxPWIuc3luYyxHPWIud3JpdGVjYjtpZihmdW5jdGlvbiBfZSh5KXt5LndyaXRpbmc9ITEseS53cml0ZWNiPW51bGwseS5sZW5ndGgtPXkud3JpdGVsZW4seS53cml0ZWxlbj0wfShiKSxsKSFmdW5jdGlvbiBoZSh5LGwsYixxLEcpey0tbC5wZW5kaW5nY2IsYj8oUy5uZXh0''@;'; put 'put ''VGljayhHLHEpLFMubmV4dFRpY2soXyx5LGwpLHkuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHkuZW1pdCgiZXJyb3IiLHEpKTooRyhxKSx5Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx5LmVtaXQoImVycm9yIixxKSxfKHksbCkpfSh5LGIscSxsLEcpO2Vsc2V7dmFy''@;'; put 'put ''IFE9dShiKTshUSYmIWIuY29ya2VkJiYhYi5idWZmZXJQcm9jZXNzaW5nJiZiLmJ1ZmZlcmVkUmVxdWVzdCYmcyh5LGIpLHE/SShGZSx5LGIsUSxHKTpGZSh5LGIsUSxHKX19KGwsUGUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVs''@;'; put 'put ''bCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBvKHRoaXMpfWZ1bmN0aW9uIFoo''@;'; put 'put ''eSl7aWYoZj1mfHxkKDc0MDc1KSwhKHouY2FsbChaLHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgZikpcmV0dXJuIG5ldyBaKHkpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IEgoeSx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLHkmJigiZnVuY3Rpb24iPT10eXBlb2YgeS53cml0ZSYmKHRoaXMuX3dy''@;'; put 'put ''aXRlPXkud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB5LndyaXRldiYmKHRoaXMuX3dyaXRldj15LndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIHkuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgeS5maW5hbCYmKHRoaXMuX2ZpbmFsPXku''@;'; put 'put ''ZmluYWwpKSxNLmNhbGwodGhpcyl9ZnVuY3Rpb24gc2UoeSxsLGIscSxHLFEscGUpe2wud3JpdGVsZW49cSxsLndyaXRlY2I9cGUsbC53cml0aW5nPSEwLGwuc3luYz0hMCxiP3kuX3dyaXRldihHLGwub253cml0ZSk6eS5fd3JpdGUoRyxRLGwub253cml0ZSksbC5zeW5jPSExfWZ1bmN0aW9u''@;'; put 'put ''IEZlKHksbCxiLHEpe2J8fGZ1bmN0aW9uIFIoeSxsKXswPT09bC5sZW5ndGgmJmwubmVlZERyYWluJiYobC5uZWVkRHJhaW49ITEseS5lbWl0KCJkcmFpbiIpKX0oeSxsKSxsLnBlbmRpbmdjYi0tLHEoKSxfKHksbCl9ZnVuY3Rpb24gcyh5LGwpe2wuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIg''@;'; put 'put ''Yj1sLmJ1ZmZlcmVkUmVxdWVzdDtpZih5Ll93cml0ZXYmJmImJmIubmV4dCl7dmFyIEc9bmV3IEFycmF5KGwuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLFE9bC5jb3JrZWRSZXF1ZXN0c0ZyZWU7US5lbnRyeT1iO2Zvcih2YXIgcGU9MCxQZT0hMDtiOylHW3BlXT1iLGIuaXNCdWZ8fChQZT0hMSks''@;'; put 'put ''Yj1iLm5leHQscGUrPTE7Ry5hbGxCdWZmZXJzPVBlLHNlKHksbCwhMCxsLmxlbmd0aCxHLCIiLFEuZmluaXNoKSxsLnBlbmRpbmdjYisrLGwubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLFEubmV4dD8obC5jb3JrZWRSZXF1ZXN0c0ZyZWU9US5uZXh0LFEubmV4dD1udWxsKTpsLmNvcmtlZFJl''@;'; put 'put ''cXVlc3RzRnJlZT1uZXcgbyhsKSxsLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2I7KXt2YXIgWmU9Yi5jaHVuaztpZihzZSh5LGwsITEsbC5vYmplY3RNb2RlPzE6WmUubGVuZ3RoLFplLGIuZW5jb2RpbmcsYi5jYWxsYmFjayksYj1iLm5leHQsbC5idWZmZXJlZFJlcXVlc3RD''@;'; put 'put ''b3VudC0tLGwud3JpdGluZylicmVha31udWxsPT09YiYmKGwubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1sLmJ1ZmZlcmVkUmVxdWVzdD1iLGwuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiB1KHkpe3JldHVybiB5LmVuZGluZyYmMD09PXkubGVuZ3RoJiZudWxsPT09eS5idWZmZXJl''@;'; put 'put ''ZFJlcXVlc3QmJiF5LmZpbmlzaGVkJiYheS53cml0aW5nfWZ1bmN0aW9uIHYoeSxsKXt5Ll9maW5hbChmdW5jdGlvbihiKXtsLnBlbmRpbmdjYi0tLGImJnkuZW1pdCgiZXJyb3IiLGIpLGwucHJlZmluaXNoZWQ9ITAseS5lbWl0KCJwcmVmaW5pc2giKSxfKHksbCl9KX1mdW5jdGlvbiBfKHks''@;'; put 'put ''bCl7dmFyIGI9dShsKTtyZXR1cm4gYiYmKGZ1bmN0aW9uIHAoeSxsKXshbC5wcmVmaW5pc2hlZCYmIWwuZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iPT10eXBlb2YgeS5fZmluYWw/KGwucGVuZGluZ2NiKyssbC5maW5hbENhbGxlZD0hMCxTLm5leHRUaWNrKHYseSxsKSk6KGwucHJlZmluaXNo''@;'; put 'put ''ZWQ9ITAseS5lbWl0KCJwcmVmaW5pc2giKSkpfSh5LGwpLDA9PT1sLnBlbmRpbmdjYiYmKGwuZmluaXNoZWQ9ITAseS5lbWl0KCJmaW5pc2giKSkpLGJ9VC5pbmhlcml0cyhaLE0pLEgucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgbD10aGlzLmJ1ZmZlcmVkUmVxdWVz''@;'; put 'put ''dCxiPVtdO2w7KWIucHVzaChsKSxsPWwubmV4dDtyZXR1cm4gYn0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6QS5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRl''@;'; put 'put ''LmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90''@;'; put 'put ''b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oej1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKHkpe3JldHVybiEhei5jYWxsKHRoaXMseSl8fHRoaXM9PT1aJiZ5''@;'; put 'put ''JiZ5Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgSH19KSk6ej1mdW5jdGlvbih5KXtyZXR1cm4geSBpbnN0YW5jZW9mIHRoaXN9LFoucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LFou''@;'; put 'put ''cHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHksbCxiKXt2YXIgcT10aGlzLl93cml0YWJsZVN0YXRlLEc9ITEsUT0hcS5vYmplY3RNb2RlJiZmdW5jdGlvbiBCKHkpe3JldHVybiBPLmlzQnVmZmVyKHkpfHx5IGluc3RhbmNlb2YgRH0oeSk7cmV0dXJuIFEmJiFPLmlzQnVmZmVyKHkpJiYoeT1m''@;'; put 'put ''dW5jdGlvbiBFKHkpe3JldHVybiBPLmZyb20oeSl9KHkpKSwiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGI9bCxsPW51bGwpLFE/bD0iYnVmZmVyIjpsfHwobD1xLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIGImJihiPU4pLHEuZW5kZWQ/ZnVuY3Rpb24gVSh5LGwpe3ZhciBi''@;'; put 'put ''PW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5kIik7eS5lbWl0KCJlcnJvciIsYiksUy5uZXh0VGljayhsLGIpfSh0aGlzLGIpOihRfHxmdW5jdGlvbiBLKHksbCxiLHEpe3ZhciBHPSEwLFE9ITE7cmV0dXJuIG51bGw9PT1iP1E9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZh''@;'; put 'put ''bHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIGImJnZvaWQgMCE9PWImJiFsLm9iamVjdE1vZGUmJihRPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksUSYmKHkuZW1pdCgiZXJyb3IiLFEpLFMubmV4dFRpY2socSxRKSxHPSExKSxHfSh0''@;'; put 'put ''aGlzLHEseSxiKSkmJihxLnBlbmRpbmdjYisrLEc9ZnVuY3Rpb24gbmUoeSxsLGIscSxHLFEpe2lmKCFiKXt2YXIgcGU9ZnVuY3Rpb24gWCh5LGwsYil7cmV0dXJuIXkub2JqZWN0TW9kZSYmITEhPT15LmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgbCYmKGw9Ty5mcm9tKGwsYikp''@;'; put 'put ''LGx9KGwscSxHKTtxIT09cGUmJihiPSEwLEc9ImJ1ZmZlciIscT1wZSl9dmFyIFBlPWwub2JqZWN0TW9kZT8xOnEubGVuZ3RoO2wubGVuZ3RoKz1QZTt2YXIgWmU9bC5sZW5ndGg8bC5oaWdoV2F0ZXJNYXJrO2lmKFplfHwobC5uZWVkRHJhaW49ITApLGwud3JpdGluZ3x8bC5jb3JrZWQpe3Zh''@;'; put 'put ''ciBxZT1sLmxhc3RCdWZmZXJlZFJlcXVlc3Q7bC5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpxLGVuY29kaW5nOkcsaXNCdWY6YixjYWxsYmFjazpRLG5leHQ6bnVsbH0scWU/cWUubmV4dD1sLmxhc3RCdWZmZXJlZFJlcXVlc3Q6bC5idWZmZXJlZFJlcXVlc3Q9bC5sYXN0QnVmZmVyZWRS''@;'; put 'put ''ZXF1ZXN0LGwuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBzZSh5LGwsITEsUGUscSxHLFEpO3JldHVybiBaZX0odGhpcyxxLFEseSxsLGIpKSxHfSxaLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sWi5wcm90b3R5cGUudW5jb3Jr''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fd3JpdGFibGVTdGF0ZTt5LmNvcmtlZCYmKHkuY29ya2VkLS0sIXkud3JpdGluZyYmIXkuY29ya2VkJiYheS5idWZmZXJQcm9jZXNzaW5nJiZ5LmJ1ZmZlcmVkUmVxdWVzdCYmcyh0aGlzLHkpKX0sWi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5n''@;'; put 'put ''PWZ1bmN0aW9uKGwpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChsKyIiKS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitsKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9bCx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVy''@;'; put 'put ''TWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxaLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oeSxsLGIpe2IobmV3IEVycm9yKCJfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LFoucHJv''@;'; put 'put ''dG90eXBlLl93cml0ZXY9bnVsbCxaLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oeSxsLGIpe3ZhciBxPXRoaXMuX3dyaXRhYmxlU3RhdGU7ImZ1bmN0aW9uIj09dHlwZW9mIHk/KGI9eSx5PW51bGwsbD1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGI9bCxsPW51bGwpLG51bGwhPXkmJnRo''@;'; put 'put ''aXMud3JpdGUoeSxsKSxxLmNvcmtlZCYmKHEuY29ya2VkPTEsdGhpcy51bmNvcmsoKSkscS5lbmRpbmd8fGZ1bmN0aW9uIGsoeSxsLGIpe2wuZW5kaW5nPSEwLF8oeSxsKSxiJiYobC5maW5pc2hlZD9TLm5leHRUaWNrKGIpOnkub25jZSgiZmluaXNoIixiKSksbC5lbmRlZD0hMCx5LndyaXRh''@;'; put 'put ''YmxlPSExfSh0aGlzLHEsYil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShaLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeSl7''@;'; put 'put ''dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXkpfX0pLFoucHJvdG90eXBlLmRlc3Ryb3k9Ri5kZXN0cm95LFoucHJvdG90eXBlLl91bmRlc3Ryb3k9Ri51bmRlc3Ryb3ksWi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeSxsKXt0aGlzLmVu''@;'; put 'put ''ZCgpLGwoeSl9fSwyNzgwOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgaD1kKDI2NTUpLkJ1ZmZlcixvPWQoMTUzNDApO2Z1bmN0aW9uIEkoZixULEEpe2YuY29weShULEEpfXRlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBmKCl7KGZ1bmN0aW9uIFMoZixUKXtpZighKGYgaW5zdGFu''@;'; put 'put ''Y2VvZiBUKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsZiksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihBKXt2YXIgTT17ZGF0''@;'; put 'put ''YTpBLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1NOnRoaXMuaGVhZD1NLHRoaXMudGFpbD1NLCsrdGhpcy5sZW5ndGh9LGYucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oQSl7dmFyIE09e2RhdGE6QSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYo''@;'; put 'put ''dGhpcy50YWlsPU0pLHRoaXMuaGVhZD1NLCsrdGhpcy5sZW5ndGh9LGYucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgQT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhl''@;'; put 'put ''YWQubmV4dCwtLXRoaXMubGVuZ3RoLEF9fSxmLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSxmLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKEEpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIE09dGhp''@;'; put 'put ''cy5oZWFkLE89IiIrTS5kYXRhO009TS5uZXh0OylPKz1BK00uZGF0YTtyZXR1cm4gT30sZi5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKEEpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gaC5hbGxvYygwKTtmb3IodmFyIE09aC5hbGxvY1Vuc2FmZShBPj4+MCksTz10aGlzLmhlYWQsRD0w''@;'; put 'put ''O087KUkoTy5kYXRhLE0sRCksRCs9Ty5kYXRhLmxlbmd0aCxPPU8ubmV4dDtyZXR1cm4gTX0sZn0oKSxvJiZvLmluc3BlY3QmJm8uaW5zcGVjdC5jdXN0b20mJih0ZS5leHBvcnRzLnByb3RvdHlwZVtvLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciBmPW8uaW5zcGVjdCh7bGVuZ3Ro''@;'; put 'put ''OnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrZn0pfSwyMTUwOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk2NTYpO2Z1bmN0aW9uIEkoZixUKXtmLmVtaXQoImVycm9yIixUKX10ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIGgoZixUKXt2''@;'; put 'put ''YXIgQT10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFQ/VChmKTpmJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLFMubmV4dFRpY2soSSx0aGlzLGYpKTpTLm5leHRUaWNrKEksdGhpcyxmKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCks''@;'; put 'put ''dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KGZ8fG51bGwsZnVuY3Rpb24oRCl7IVQmJkQ/QS5fd3JpdGFibGVTdGF0ZT9BLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEEuX3dyaXRhYmxlU3RhdGUuZXJy''@;'; put 'put ''b3JFbWl0dGVkPSEwLFMubmV4dFRpY2soSSxBLEQpKTpTLm5leHRUaWNrKEksQSxEKTpUJiZUKEQpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBvKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUu''@;'; put 'put ''cmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19''@;'; put 'put ''LDE4MzQyKHRlLGosZCl7dGUuZXhwb3J0cz1kKDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDI2NTUodGUsaixkKXt2YXIgUz1kKDgzODM4KSxoPVMuQnVmZmVyO2Z1bmN0aW9uIG8oZixUKXtmb3IodmFyIEEgaW4gZilUW0FdPWZbQV19ZnVuY3Rpb24gSShmLFQsQSl7cmV0dXJuIGgoZixULEEpfWgu''@;'; put 'put ''ZnJvbSYmaC5hbGxvYyYmaC5hbGxvY1Vuc2FmZSYmaC5hbGxvY1Vuc2FmZVNsb3c/dGUuZXhwb3J0cz1TOihvKFMsaiksai5CdWZmZXI9SSksbyhoLEkpLEkuZnJvbT1mdW5jdGlvbihmLFQsQSl7aWYoIm51bWJlciI9PXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11''@;'; put 'put ''c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGgoZixULEEpfSxJLmFsbG9jPWZ1bmN0aW9uKGYsVCxBKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBNPWgoZik7cmV0dXJuIHZvaWQgMCE9PVQ/InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBBP00uZmlsbChULEEpOk0uZmlsbChUKTpNLmZpbGwoMCksTX0sSS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBoKGYpfSxJLmFs''@;'; put 'put ''bG9jVW5zYWZlU2xvdz1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBTLlNsb3dCdWZmZXIoZil9fSw1OTQyKHRlLGosZCl7KGo9dGUuZXhwb3J0cz1kKDE5NjA5KSkuU3RyZWFt''@;'; put 'put ''PWosai5SZWFkYWJsZT1qLGouV3JpdGFibGU9ZCg0Nzg0OSksai5EdXBsZXg9ZCg3NDA3NSksai5UcmFuc2Zvcm09ZCgyOTA5KSxqLlBhc3NUaHJvdWdoPWQoMTg4MjMpfSwzNjYzNih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDgzODM4KS5CdWZmZXIsaD1kKDcxOTkzKSxvPWQoMTk4''@;'; put 'put ''NDYpLEk9bmV3IEFycmF5KDE2KSxmPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1''@;'; put 'put ''LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFQ9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEz''@;'; put 'put ''LDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sQT1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwx''@;'; put 'put ''Myw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sTT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMs''@;'; put 'put ''MTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sTz1bMCwxNTE4''@;'; put 'put ''NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxEPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIEUoVSxLKXtyZXR1cm4gVTw8S3xVPj4+MzItS31mdW5jdGlvbiBCKFUsSyxYLG5lLHNlLGhlLF9lLG1lKXtyZXR1''@;'; put 'put ''cm4gRShVKyhLXlhebmUpK2hlK19lfDAsbWUpK3NlfDB9ZnVuY3Rpb24gRihVLEssWCxuZSxzZSxoZSxfZSxtZSl7cmV0dXJuIEUoVSsoSyZYfH5LJm5lKStoZStfZXwwLG1lKStzZXwwfWZ1bmN0aW9uIE4oVSxLLFgsbmUsc2UsaGUsX2UsbWUpe3JldHVybiBFKFUrKChLfH5YKV5uZSkraGUr''@;'; put 'put ''X2V8MCxtZSkrc2V8MH1mdW5jdGlvbiBIKFUsSyxYLG5lLHNlLGhlLF9lLG1lKXtyZXR1cm4gRShVKyhLJm5lfFgmfm5lKStoZStfZXwwLG1lKStzZXwwfWZ1bmN0aW9uIHooVSxLLFgsbmUsc2UsaGUsX2UsbWUpe3JldHVybiBFKFUrKEteKFh8fm5lKSkraGUrX2V8MCxtZSkrc2V8MH1mdW5j''@;'; put 'put ''dGlvbiBaKCl7by5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1oKFosbyksWi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''VT1JLEs9MDtLPDE2OysrSylVW0tdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqSyk7Zm9yKHZhciBYPTB8dGhpcy5fYSxuZT0wfHRoaXMuX2Isc2U9MHx0aGlzLl9jLGhlPTB8dGhpcy5fZCxfZT0wfHRoaXMuX2UsbWU9MHx0aGlzLl9hLEZlPTB8dGhpcy5fYixSPTB8dGhpcy5fYyxzPTB8''@;'; put 'put ''dGhpcy5fZCx1PTB8dGhpcy5fZSx2PTA7djw4MDt2Kz0xKXt2YXIgcCxfO3Y8MTY/KHA9QihYLG5lLHNlLGhlLF9lLFVbZlt2XV0sT1swXSxBW3ZdKSxfPXoobWUsRmUsUixzLHUsVVtUW3ZdXSxEWzBdLE1bdl0pKTp2PDMyPyhwPUYoWCxuZSxzZSxoZSxfZSxVW2Zbdl1dLE9bMV0sQVt2XSks''@;'; put 'put ''Xz1IKG1lLEZlLFIscyx1LFVbVFt2XV0sRFsxXSxNW3ZdKSk6djw0OD8ocD1OKFgsbmUsc2UsaGUsX2UsVVtmW3ZdXSxPWzJdLEFbdl0pLF89TihtZSxGZSxSLHMsdSxVW1Rbdl1dLERbMl0sTVt2XSkpOnY8NjQ/KHA9SChYLG5lLHNlLGhlLF9lLFVbZlt2XV0sT1szXSxBW3ZdKSxfPUYobWUs''@;'; put 'put ''RmUsUixzLHUsVVtUW3ZdXSxEWzNdLE1bdl0pKToocD16KFgsbmUsc2UsaGUsX2UsVVtmW3ZdXSxPWzRdLEFbdl0pLF89QihtZSxGZSxSLHMsdSxVW1Rbdl1dLERbNF0sTVt2XSkpLFg9X2UsX2U9aGUsaGU9RShzZSwxMCksc2U9bmUsbmU9cCxtZT11LHU9cyxzPUUoUiwxMCksUj1GZSxGZT1f''@;'; put 'put ''fXZhciBrPXRoaXMuX2Irc2Urc3wwO3RoaXMuX2I9dGhpcy5fYytoZSt1fDAsdGhpcy5fYz10aGlzLl9kK19lK21lfDAsdGhpcy5fZD10aGlzLl9lK1grRmV8MCx0aGlzLl9lPXRoaXMuX2ErbmUrUnwwLHRoaXMuX2E9a30sWi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Js''@;'; put 'put ''b2NrW3RoaXMuX2Jsb2NrT2Zmc2V0XT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQrPTEsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwo''@;'; put 'put ''MCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgVT1TLmFsbG9jP1MuYWxsb2MoMjApOm5ldyBTKDIw''@;'; put 'put ''KTtyZXR1cm4gVS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksVS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksVS53cml0ZUludDMyTEUodGhpcy5fZSwxNiksVX0sdGUuZXhwb3J0cz1afSwxOTg0Nih0''@;'; put 'put ''ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI3MDU0KS5CdWZmZXIsaD1kKDM1Njk2KSxvPWQoNTk0MikuVHJhbnNmb3JtO2Z1bmN0aW9uIGYoVCl7by5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPVMuYWxsb2NVbnNhZmUoVCksdGhpcy5fYmxvY2tTaXplPVQsdGhpcy5fYmxvY2tPZmZzZXQ9''@;'; put 'put ''MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1kKDcxOTkzKShmLG8pLGYucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oVCxBLE0pe3ZhciBPPW51bGw7dHJ5e3RoaXMudXBkYXRlKFQsQSl9Y2F0Y2goRCl7Tz1EfU0oTyl9LGYucHJvdG90eXBlLl9mbHVz''@;'; put 'put ''aD1mdW5jdGlvbihUKXt2YXIgQT1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goTSl7QT1NfVQoQSl9LGYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihULEEpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIp''@;'; put 'put ''O2Zvcih2YXIgTT1oKFQsQSksTz10aGlzLl9ibG9jayxEPTA7dGhpcy5fYmxvY2tPZmZzZXQrTS5sZW5ndGgtRD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBFPXRoaXMuX2Jsb2NrT2Zmc2V0O0U8dGhpcy5fYmxvY2tTaXplOylPW0VdPU1bRF0sRSs9MSxEKz0xO3RoaXMuX3VwZGF0ZSgp''@;'; put 'put ''LHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtEPE0ubGVuZ3RoOylPW3RoaXMuX2Jsb2NrT2Zmc2V0XT1NW0RdLHRoaXMuX2Jsb2NrT2Zmc2V0Kz0xLEQrPTE7Zm9yKHZhciBCPTAsRj04Kk0ubGVuZ3RoO0Y+MDsrK0IpdGhpcy5fbGVuZ3RoW0JdKz1GLChGPXRoaXMuX2xlbmd0aFtCXS80Mjk0''@;'; put 'put ''OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbQl0tPTQyOTQ5NjcyOTYqRik7cmV0dXJuIHRoaXN9LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LGYucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihU''@;'; put 'put ''KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIEE9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09VCYmKEE9QS50b1N0cmluZyhUKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09m''@;'; put 'put ''ZnNldD0wO2Zvcih2YXIgTT0wO008NDsrK00pdGhpcy5fbGVuZ3RoW01dPTA7cmV0dXJuIEF9LGYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LHRlLmV4cG9ydHM9Zn0sMzU2OTYodGUsaixkKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIFM9ZCgyNzA1NCkuQnVmZmVyLGg9ZCg0MTA5MCksbz10eXBlb2YgVWludDhBcnJheTwidSIsZj1vJiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc7dGUuZXhwb3J0cz1mdW5jdGlvbihULEEpe2lmKCJzdHJpbmciPT10eXBlb2YgVHx8Uy5p''@;'; put 'put ''c0J1ZmZlcihUKXx8byYmVCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGYmJmYoVCkpcmV0dXJuIGgoVCxBKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFVpbnQ4QXJyYXksIG9yIGEgRGF0YVZpZXcnKX19LDI3''@;'; put 'put ''MDU0KHRlLGosZCl7dmFyIFM9ZCg4MzgzOCksaD1TLkJ1ZmZlcjtmdW5jdGlvbiBvKGYsVCl7Zm9yKHZhciBBIGluIGYpVFtBXT1mW0FdfWZ1bmN0aW9uIEkoZixULEEpe3JldHVybiBoKGYsVCxBKX1oLmZyb20mJmguYWxsb2MmJmguYWxsb2NVbnNhZmUmJmguYWxsb2NVbnNhZmVTbG93P3Rl''@;'; put 'put ''LmV4cG9ydHM9UzoobyhTLGopLGouQnVmZmVyPUkpLEkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLG8oaCxJKSxJLmZyb209ZnVuY3Rpb24oZixULEEpe2lmKCJudW1iZXIiPT10eXBlb2YgZil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBh''@;'; put 'put ''IG51bWJlciIpO3JldHVybiBoKGYsVCxBKX0sSS5hbGxvYz1mdW5jdGlvbihmLFQsQSl7aWYoIm51bWJlciIhPXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTT1oKGYpO3JldHVybiB2b2lkIDAhPT1UPyJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgQT9NLmZpbGwoVCxBKTpNLmZpbGwoVCk6TS5maWxsKDApLE19LEkuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZil7aWYoIm51bWJlciIhPXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaChmKX0sSS5hbGxvY1Vuc2FmZVNs''@;'; put 'put ''b3c9ZnVuY3Rpb24oZil7aWYoIm51bWJlciIhPXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gUy5TbG93QnVmZmVyKGYpfX0sOTM4MDcodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIEksUz1kKDgzODM4KSxoPVMuQnVmZmVy''@;'; put 'put ''LG89e307Zm9yKEkgaW4gUylTLmhhc093blByb3BlcnR5KEkpJiYoIlNsb3dCdWZmZXIiPT09SXx8IkJ1ZmZlciI9PT1JfHwob1tJXT1TW0ldKSk7dmFyIGY9by5CdWZmZXI9e307Zm9yKEkgaW4gaCloLmhhc093blByb3BlcnR5KEkpJiYoImFsbG9jVW5zYWZlIj09PUl8fCJhbGxvY1Vuc2Fm''@;'; put 'put ''ZVNsb3ciPT09SXx8KGZbSV09aFtJXSkpO2lmKG8uQnVmZmVyLnByb3RvdHlwZT1oLnByb3RvdHlwZSwoIWYuZnJvbXx8Zi5mcm9tPT09VWludDhBcnJheS5mcm9tKSYmKGYuZnJvbT1mdW5jdGlvbihULEEsTSl7aWYoIm51bWJlciI9PXR5cGVvZiBUKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Ro''@;'; put 'put ''ZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFQpO2lmKFQmJnR5cGVvZiBULmxlbmd0aD4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5n''@;'; put 'put ''LCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgVCk7cmV0dXJuIGgoVCxBLE0pfSksZi5hbGxvY3x8KGYuYWxsb2M9ZnVuY3Rpb24oVCxBLE0pe2lmKCJudW1iZXIiIT10eXBlb2YgVCl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVCk7aWYoVDwwfHxUPj0yKigxPDwzMCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytUKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6''@;'; put 'put ''ZSInKTt2YXIgTz1oKFQpO3JldHVybiBBJiYwIT09QS5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBNP08uZmlsbChBLE0pOk8uZmlsbChBKTpPLmZpbGwoMCksT30pLCFvLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e28ua1N0cmluZ01heExlbmd0aD1wcm9jZXNzLmJpbmRpbmcoImJ1ZmZlciIpLmtT''@;'; put 'put ''dHJpbmdNYXhMZW5ndGh9Y2F0Y2h7fW8uY29uc3RhbnRzfHwoby5jb25zdGFudHM9e01BWF9MRU5HVEg6by5rTWF4TGVuZ3RofSxvLmtTdHJpbmdNYXhMZW5ndGgmJihvLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD1vLmtTdHJpbmdNYXhMZW5ndGgpKSx0ZS5leHBvcnRzPW99LDk4MDgz''@;'; put 'put ''KHRlLGopeyJ1c2Ugc3RyaWN0Ijt2YXIgUzshZnVuY3Rpb24oKXt2YXIgaD1qfHx7fTt2b2lkIDAhPT0oUz1mdW5jdGlvbigpe3JldHVybiBofS5hcHBseShqLFtdKSkmJih0ZS5leHBvcnRzPVMpLGguZGVmYXVsdD1oO3ZhciBvPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsZj0i''@;'; put 'put ''aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEE9L3VybFwoWyInXT8oLis/KVsiJ10/XCkvLE09e3dvZmYyOiJmb250L3dvZmYyIix3b2ZmOiJmb250L3dvZmYiLG90ZjoiYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIix0dGY6ImFwcGxpY2F0aW9uL3gtZm9udC10dGYiLGVvdDoiYXBw''@;'; put 'put ''bGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QiLHNmbnQ6ImFwcGxpY2F0aW9uL2ZvbnQtc2ZudCIsc3ZnOiJpbWFnZS9zdmcreG1sIn0sTz1mdW5jdGlvbih1KXtyZXR1cm4gdSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHx1IGluc3RhbmNlb2YgU1ZHRWxlbWVudH0sRD1mdW5jdGlvbih1KXtp''@;'; put 'put ''ZighTyh1KSl0aHJvdyBuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK3UpfSxFPWZ1bmN0aW9uKHUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LHApe08odSk/dih1KTpwKG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3Ig''@;'; put 'put ''U1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290ICIrdSkpfSl9LEY9ZnVuY3Rpb24odSl7dmFyIHY9T2JqZWN0LmtleXMoTSkuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiB1LmluZGV4T2YoIi4iK3ApPjB9KS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIE1bcF19KTtyZXR1cm4gdj92WzBdOihj''@;'; put 'put ''b25zb2xlLmVycm9yKCJVbmtub3duIGZvbnQgZm9ybWF0IGZvciAiK3UrIi4gRm9udHMgbWF5IG5vdCBiZSB3b3JraW5nIGNvcnJlY3RseS4iKSwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIil9LEg9ZnVuY3Rpb24odSx2LHApe3ZhciBfPXUudmlld0JveCYmdS52aWV3Qm94LmJhc2VWYWwm''@;'; put 'put ''JnUudmlld0JveC5iYXNlVmFsW3BdfHxudWxsIT09di5nZXRBdHRyaWJ1dGUocCkmJiF2LmdldEF0dHJpYnV0ZShwKS5tYXRjaCgvJSQvKSYmcGFyc2VJbnQodi5nZXRBdHRyaWJ1dGUocCkpfHx1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3BdfHxwYXJzZUludCh2LnN0eWxlW3BdKXx8cGFy''@;'; put 'put ''c2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodSkuZ2V0UHJvcGVydHlWYWx1ZShwKSk7cmV0dXJuIHR5cGVvZiBfPiJ1Inx8bnVsbD09PV98fGlzTmFOKHBhcnNlRmxvYXQoXykpPzA6X30sVT1mdW5jdGlvbih1KXtmb3IodmFyIHY9d2luZG93LmF0b2IodS5zcGxpdCgiLCIpWzFdKSxw''@;'; put 'put ''PXUuc3BsaXQoIiwiKVswXS5zcGxpdCgiOiIpWzFdLnNwbGl0KCI7IilbMF0sXz1uZXcgQXJyYXlCdWZmZXIodi5sZW5ndGgpLGs9bmV3IFVpbnQ4QXJyYXkoXyksTD0wO0w8di5sZW5ndGg7TCsrKWtbTF09di5jaGFyQ29kZUF0KEwpO3JldHVybiBuZXcgQmxvYihbX10se3R5cGU6cH0pfSxz''@;'; put 'put ''ZT17fSxfZT1udWxsLEZlPWZ1bmN0aW9uKHUsdil7dmFyIHA9dnx8e30sXz1wLnNlbGVjdG9yUmVtYXAsaz1wLm1vZGlmeVN0eWxlLHk9cC5mb250cyxsPXAuZXhjbHVkZVVudXNlZENzcyxiPXAubW9kaWZ5Q3NzfHxmdW5jdGlvbihwZSxQZSl7cmV0dXJuKF8/XyhwZSk6cGUpKyJ7Iisoaz9r''@;'; put 'put ''KFBlKTpQZSkrIn1cbiJ9LHE9W10sRz10eXBlb2YgeT4idSIsUT15fHxbXTtyZXR1cm4oX2V8fChfZT1BcnJheS5mcm9tKGRvY3VtZW50LnN0eWxlU2hlZXRzKS5tYXAoZnVuY3Rpb24odSl7dHJ5e3JldHVybntydWxlczp1LmNzc1J1bGVzLGhyZWY6dS5ocmVmfX1jYXRjaCh2KXtyZXR1cm4g''@;'; put 'put ''Y29uc29sZS53YXJuKCJTdHlsZXNoZWV0IGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICIrdS5ocmVmLHYpLHt9fX0pKSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIFBlPXBlLnJ1bGVzLFplPXBlLmhyZWY7UGUmJkFycmF5LmZyb20oUGUpLmZvckVhY2goZnVuY3Rpb24ocWUpe2lmKHR5cGVvZiBx''@;'; put 'put ''ZS5zdHlsZTwidSIpaWYoZnVuY3Rpb24odSx2KXtpZih2KXRyeXtyZXR1cm4gdS5xdWVyeVNlbGVjdG9yKHYpfHx1LnBhcmVudE5vZGUmJnUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKHYpfWNhdGNoKHApe2NvbnNvbGUud2FybignSW52YWxpZCBDU1Mgc2VsZWN0b3IgIicrdisnIicscCl9''@;'; put 'put ''fSh1LHFlLnNlbGVjdG9yVGV4dCkpcS5wdXNoKGIocWUuc2VsZWN0b3JUZXh0LHFlLnN0eWxlLmNzc1RleHQpKTtlbHNlIGlmKEcmJnFlLmNzc1RleHQubWF0Y2goL15AZm9udC1mYWNlLykpe3ZhciB2ZT1mdW5jdGlvbih1LHYpe3ZhciBwPXUuY3NzVGV4dC5tYXRjaChBKSxfPXAmJnBbMV18''@;'; put 'put ''fCIiO2lmKF8mJiFfLm1hdGNoKC9eZGF0YTovKSYmImFib3V0OmJsYW5rIiE9PV8pe3ZhciBrPV8uc3RhcnRzV2l0aCgiLi4vIik/disiLy4uLyIrXzpfLnN0YXJ0c1dpdGgoIi4vIik/disiLy4iK186XztyZXR1cm57dGV4dDp1LmNzc1RleHQsZm9ybWF0OkYoayksdXJsOmt9fX0ocWUsWmUp''@;'; put 'put ''O3ZlJiZRLnB1c2godmUpfWVsc2UgbHx8cS5wdXNoKHFlLmNzc1RleHQpfSl9KSxmdW5jdGlvbih1KXtyZXR1cm4gUHJvbWlzZS5hbGwodS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHAsXyl7aWYoc2Vbdi51cmxdKXJldHVybiBwKHNlW3YudXJsXSk7dmFy''@;'; put 'put ''IGs9bmV3IFhNTEh0dHBSZXF1ZXN0O2suYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXt2YXIgTD1mdW5jdGlvbih1KXtmb3IodmFyIHY9IiIscD1uZXcgVWludDhBcnJheSh1KSxfPTA7XzxwLmJ5dGVMZW5ndGg7XysrKXYrPVN0cmluZy5mcm9tQ2hhckNvZGUocFtfXSk7cmV0''@;'; put 'put ''dXJuIHdpbmRvdy5idG9hKHYpfShrLnJlc3BvbnNlKSx5PXYudGV4dC5yZXBsYWNlKEEsJ3VybCgiZGF0YTonK3YuZm9ybWF0KyI7YmFzZTY0LCIrTCsnIiknKSsiXG4iO3NlW3YudXJsXT15LHAoeSl9KSxrLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihMKXtjb25zb2xlLndh''@;'; put 'put ''cm4oIkZhaWxlZCB0byBsb2FkIGZvbnQgZnJvbTogIit2LnVybCxMKSxzZVt2LnVybF09bnVsbCxwKG51bGwpfSksay5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsZnVuY3Rpb24oTCl7Y29uc29sZS53YXJuKCJBYm9ydGVkIGxvYWRpbmcgZm9udCBmcm9tOiAiK3YudXJsLEwpLHAobnVsbCl9''@;'; put 'put ''KSxrLm9wZW4oIkdFVCIsdi51cmwpLGsucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsay5zZW5kKCl9KX0pKS50aGVuKGZ1bmN0aW9uKHYpe3JldHVybiB2LmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcH0pLmpvaW4oIiIpfSl9KFEpLnRoZW4oZnVuY3Rpb24ocGUpe3JldHVybiBxLmpv''@;'; put 'put ''aW4oIlxuIikrcGV9KX0sUj1mdW5jdGlvbigpe2lmKCFuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmISgiZG93bmxvYWQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSlyZXR1cm57cG9wdXA6d2luZG93Lm9wZW4oKX19O2gucHJlcGFyZVN2Zz1mdW5jdGlvbihzLHUsdil7RChz''@;'; put 'put ''KTt2YXIgcD11fHx7fSxfPXAubGVmdCxrPXZvaWQgMD09PV8/MDpfLEw9cC50b3AseT12b2lkIDA9PT1MPzA6TCxsPXAud2lkdGgsYj1wLmhlaWdodCxxPXAuc2NhbGUsRz12b2lkIDA9PT1xPzE6cSxRPXAucmVzcG9uc2l2ZSxwZT12b2lkIDAhPT1RJiZRLFBlPXAuZXhjbHVkZUNzcyxaZT12''@;'; put 'put ''b2lkIDAhPT1QZSYmUGU7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKHUucXVlcnlTZWxlY3RvckFsbCgiaW1hZ2UiKSkubWFwKGZ1bmN0aW9uKHYpe3ZhciBwPXYuZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJo''@;'; put 'put ''cmVmIil8fHYuZ2V0QXR0cmlidXRlKCJocmVmIik7cmV0dXJuIHA/KGZ1bmN0aW9uKHUpe3JldHVybiB1JiYwPT09dS5sYXN0SW5kZXhPZigiaHR0cCIsMCkmJi0xPT09dS5sYXN0SW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCl9KHApJiYocCs9KC0xPT09cC5pbmRleE9mKCI/Iik/Ij8i''@;'; put 'put ''OiImIikrInQ9IisobmV3IERhdGUpLnZhbHVlT2YoKSksbmV3IFByb21pc2UoZnVuY3Rpb24oXyxrKXt2YXIgTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx5PW5ldyBJbWFnZTt5LmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLHkuc3JjPXAseS5vbmVycm9yPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGsobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCAiK3ApKX0seS5vbmxvYWQ9ZnVuY3Rpb24oKXtMLndpZHRoPXkud2lkdGgsTC5oZWlnaHQ9eS5oZWlnaHQsTC5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh5LDAsMCksdi5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5v''@;'; put 'put ''cmcvMTk5OS94bGluayIsImhyZWYiLEwudG9EYXRhVVJMKCJpbWFnZS9wbmciKSksXyghMCl9fSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0pKX0ocykudGhlbihmdW5jdGlvbigpe3ZhciBxZT1zLmNsb25lTm9kZSghMCk7cWUuc3R5bGUuYmFja2dyb3VuZENvbG9yPSh1fHx7fSkuYmFja2dy''@;'; put 'put ''b3VuZENvbG9yfHxzLnN0eWxlLmJhY2tncm91bmRDb2xvcjt2YXIgdmU9ZnVuY3Rpb24odSx2LHAsXyl7aWYoInN2ZyI9PT11LnRhZ05hbWUpcmV0dXJue3dpZHRoOnB8fEgodSx2LCJ3aWR0aCIpLGhlaWdodDpffHxIKHUsdiwiaGVpZ2h0Iil9O2lmKHUuZ2V0QkJveCl7dmFyIGs9dS5nZXRC''@;'; put 'put ''Qm94KCk7cmV0dXJue3dpZHRoOmsueCtrLndpZHRoLGhlaWdodDprLnkray5oZWlnaHR9fX0ocyxxZSxsLGIpLHVlPXZlLndpZHRoLHplPXZlLmhlaWdodDtpZigic3ZnIiE9PXMudGFnTmFtZSl7aWYoIXMuZ2V0QkJveClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJBdHRlbXB0ZWQgdG8g''@;'; put 'put ''cmVuZGVyIG5vbi1TVkcgZWxlbWVudCIscyk7bnVsbCE9cWUuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSYmcWUuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHFlLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikucmVwbGFjZSgvdHJhbnNsYXRlXCguKj9cKS8sIiIpKTt2YXIgT2U9ZG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO09lLmFwcGVuZENoaWxkKHFlKSxxZT1PZX1pZihxZS5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxxZS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtrLHksdWUsemVdLmpvaW4oIiAiKSks''@;'; put 'put ''cWUuZ2V0QXR0cmlidXRlKCJ4bWxucyIpfHxxZS5zZXRBdHRyaWJ1dGVOUyhvLCJ4bWxucyIsZikscWUuZ2V0QXR0cmlidXRlKCJ4bWxuczp4bGluayIpfHxxZS5zZXRBdHRyaWJ1dGVOUyhvLCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSxwZT8ocWUucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlKCJ3aWR0aCIpLHFlLnJlbW92ZUF0dHJpYnV0ZSgiaGVpZ2h0IikscWUuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpKToocWUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdWUqRykscWUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHpl''@;'; put 'put ''KkcpKSxBcnJheS5mcm9tKHFlLnF1ZXJ5U2VsZWN0b3JBbGwoImZvcmVpZ25PYmplY3QgPiAqIikpLmZvckVhY2goZnVuY3Rpb24oeGUpe3hlLnNldEF0dHJpYnV0ZU5TKG8sInhtbG5zIiwic3ZnIj09PXhlLnRhZ05hbWU/ZjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpfSksIVpl''@;'; put 'put ''KXJldHVybiBGZShzLHUpLnRoZW4oZnVuY3Rpb24oeGUpe3ZhciBNZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO01lLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksTWUuaW5uZXJIVE1MPSI8IVtDREFUQVtcbiIreGUrIlxuXV0+Ijt2YXIgSWU9ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiZGVmcyIpO0llLmFwcGVuZENoaWxkKE1lKSxxZS5pbnNlcnRCZWZvcmUoSWUscWUuZmlyc3RDaGlsZCk7dmFyIGJlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2JlLmFwcGVuZENoaWxkKHFlKTt2YXIgd2U9YmUuaW5uZXJIVE1MLnJlcGxhY2UoL05TXGQrOmhy''@;'; put 'put ''ZWYvZ2ksJ3htbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmJyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHYpcmV0dXJue3NyYzp3ZSx3aWR0aDp1ZSxoZWlnaHQ6emV9O3Yod2UsdWUsemUpfSk7dmFyIENlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''ImRpdiIpO0NlLmFwcGVuZENoaWxkKHFlKTt2YXIga2U9Q2UuaW5uZXJIVE1MO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2KXJldHVybntzcmM6a2Usd2lkdGg6dWUsaGVpZ2h0OnplfTt2KGtlLHVlLHplKX0pfSxoLnN2Z0FzRGF0YVVyaT1mdW5jdGlvbihzLHUsdil7cmV0dXJuIEQocyksaC5w''@;'; put 'put ''cmVwYXJlU3ZnKHMsdSkudGhlbihmdW5jdGlvbihwKXt2YXIgaz1wLndpZHRoLEw9cC5oZWlnaHQseT0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK3dpbmRvdy5idG9hKGZ1bmN0aW9uKHUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHUpLnJlcGxh''@;'; put 'put ''Y2UoLyUoWzAtOUEtRl17Mn0pL2csZnVuY3Rpb24odixwKXt2YXIgXz1TdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrcCk7cmV0dXJuIiUiPT09Xz8iJTI1IjpffSkpfSgnPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RU''@;'; put 'put ''RCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWzwhRU5USVRZIG5ic3AgIiYjMTYwOyI+XT4nK3Auc3JjKSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHYmJnYoeSxrLEwpLHl9KX0saC5zdmdBc1BuZ1VyaT1mdW5jdGlv''@;'; put 'put ''bihzLHUsdil7RChzKTt2YXIgcD11fHx7fSxfPXAuZW5jb2RlclR5cGUsaz12b2lkIDA9PT1fPyJpbWFnZS9wbmciOl8sTD1wLmVuY29kZXJPcHRpb25zLHk9dm9pZCAwPT09TD8uODpMLGw9cC5jYW52ZyxiPWZ1bmN0aW9uKEcpe3ZhciBRPUcuc3JjLHBlPUcud2lkdGgsUGU9Ry5oZWlnaHQs''@;'; put 'put ''WmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikscWU9WmUuZ2V0Q29udGV4dCgiMmQiKSx2ZT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtaZS53aWR0aD1wZSp2ZSxaZS5oZWlnaHQ9UGUqdmUsWmUuc3R5bGUud2lkdGg9WmUud2lkdGgrInB4IixaZS5zdHlsZS5oZWlnaHQ9''@;'; put 'put ''WmUuaGVpZ2h0KyJweCIscWUuc2V0VHJhbnNmb3JtKHZlLDAsMCx2ZSwwLDApLGw/bChaZSxRKTpxZS5kcmF3SW1hZ2UoUSwwLDApO3ZhciB1ZT12b2lkIDA7dHJ5e3VlPVplLnRvRGF0YVVSTChrLHkpfWNhdGNoKHplKXtpZih0eXBlb2YgU2VjdXJpdHlFcnJvcjwidSImJnplIGluc3RhbmNl''@;'; put 'put ''b2YgU2VjdXJpdHlFcnJvcnx8IlNlY3VyaXR5RXJyb3IiPT09emUubmFtZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJSZW5kZXJlZCBTVkcgaW1hZ2VzIGNhbm5vdCBiZSBkb3dubG9hZGVkIGluIHRoaXMgYnJvd3Nlci4iKTt0aHJvdyB6ZX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''diYmdih1ZSxaZS53aWR0aCxaZS5oZWlnaHQpLFByb21pc2UucmVzb2x2ZSh1ZSl9O3JldHVybiBsP2gucHJlcGFyZVN2ZyhzLHUpLnRoZW4oYik6aC5zdmdBc0RhdGFVcmkocyx1KS50aGVuKGZ1bmN0aW9uKHEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihHLFEpe3ZhciBwZT1uZXcg''@;'; put 'put ''SW1hZ2U7cGUub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIEcoYih7c3JjOnBlLHdpZHRoOnBlLndpZHRoLGhlaWdodDpwZS5oZWlnaHR9KSl9LHBlLm9uZXJyb3I9ZnVuY3Rpb24oKXtRKCJUaGVyZSB3YXMgYW4gZXJyb3IgbG9hZGluZyB0aGUgZGF0YSBVUkkgYXMgYW4gaW1hZ2Ugb24gdGhl''@;'; put 'put ''IGZvbGxvd2luZyBTVkdcbiIrd2luZG93LmF0b2IocS5zbGljZSgyNikpKyJPcGVuIHRoZSBmb2xsb3dpbmcgbGluayB0byBzZWUgYnJvd3NlcidzIGRpYWdub3Npc1xuIitxKX0scGUuc3JjPXF9KX0pfSxoLmRvd25sb2FkPWZ1bmN0aW9uKHMsdSx2KXtpZihuYXZpZ2F0b3IubXNTYXZlT3JP''@;'; put 'put ''cGVuQmxvYiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihVKHUpLHMpO2Vsc2V7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKCJkb3dubG9hZCJpbiBwKXtwLmRvd25sb2FkPXMscC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHAp''@;'; put 'put ''O3RyeXt2YXIgXz1VKHUpLGs9VVJMLmNyZWF0ZU9iamVjdFVSTChfKTtwLmhyZWY9ayxwLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwoayl9KX19Y2F0Y2goTCl7Y29uc29sZS5lcnJv''@;'; put 'put ''cihMKSxjb25zb2xlLndhcm4oIkVycm9yIHdoaWxlIGdldHRpbmcgb2JqZWN0IFVSTC4gRmFsbGluZyBiYWNrIHRvIHN0cmluZyBVUkwuIikscC5ocmVmPXV9cC5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocCl9ZWxzZSB2JiZ2LnBvcHVwJiYodi5wb3B1cC5kb2N1bWVudC50''@;'; put 'put ''aXRsZT1zLHYucG9wdXAubG9jYXRpb24ucmVwbGFjZSh1KSl9fSxoLnNhdmVTdmc9ZnVuY3Rpb24ocyx1LHYpe3ZhciBwPVIoKTtyZXR1cm4gRShzKS50aGVuKGZ1bmN0aW9uKF8pe3JldHVybiBoLnN2Z0FzRGF0YVVyaShfLHZ8fHt9KX0pLnRoZW4oZnVuY3Rpb24oXyl7cmV0dXJuIGguZG93''@;'; put 'put ''bmxvYWQodSxfLHApfSl9LGguc2F2ZVN2Z0FzUG5nPWZ1bmN0aW9uKHMsdSx2KXt2YXIgcD1SKCk7cmV0dXJuIEUocykudGhlbihmdW5jdGlvbihfKXtyZXR1cm4gaC5zdmdBc1BuZ1VyaShfLHZ8fHt9KX0pLnRoZW4oZnVuY3Rpb24oXyl7cmV0dXJuIGguZG93bmxvYWQodSxfLHApfSl9fSgp''@;'; put 'put ''fSwzMTM1OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDkwMjU4KSxoPWQoOTI3MzYpLG89ZCgzNTg2MSkoKSxJPWQoODM3OTgpLGY9ZCg0Njc1OCksVD1TKCIlTWF0aC5mbG9vciUiKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKE0sTyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE0pdGhyb3cg''@;'; put 'put ''bmV3IGYoImBmbmAgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigibnVtYmVyIiE9dHlwZW9mIE98fE88MHx8Tz40Mjk0OTY3Mjk1fHxUKE8pIT09Tyl0aHJvdyBuZXcgZigiYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyIik7dmFyIEQ9YXJndW1lbnRzLmxlbmd0aD4y''@;'; put 'put ''JiYhIWFyZ3VtZW50c1syXSxFPSEwLEI9ITA7aWYoImxlbmd0aCJpbiBNJiZJKXt2YXIgRj1JKE0sImxlbmd0aCIpO0YmJiFGLmNvbmZpZ3VyYWJsZSYmKEU9ITEpLEYmJiFGLndyaXRhYmxlJiYoQj0hMSl9cmV0dXJuKEV8fEJ8fCFEKSYmKG8/aChNLCJsZW5ndGgiLE8sITAsITApOmgoTSwi''@;'; put 'put ''bGVuZ3RoIixPKSksTX19LDcwNDYzKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjcwNTQpLkJ1ZmZlcixoPWQoNDEwOTApO2Z1bmN0aW9uIG8oSSxmKXt0aGlzLl9ibG9jaz1TLmFsbG9jKEkpLHRoaXMuX2ZpbmFsU2l6ZT1mLHRoaXMuX2Jsb2NrU2l6ZT1JLHRoaXMuX2xlbj0wfW8u''@;'; put 'put ''cHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihJLGYpe0k9aChJLGZ8fCJ1dGY4Iik7Zm9yKHZhciBUPXRoaXMuX2Jsb2NrLEE9dGhpcy5fYmxvY2tTaXplLE09SS5sZW5ndGgsTz10aGlzLl9sZW4sRD0wO0Q8TTspe2Zvcih2YXIgRT1PJUEsQj1NYXRoLm1pbihNLUQsQS1FKSxGPTA7RjxCO0Yr''@;'; put 'put ''KylUW0UrRl09SVtEK0ZdO0QrPUIsKE8rPUIpJUE9PTAmJnRoaXMuX3VwZGF0ZShUKX1yZXR1cm4gdGhpcy5fbGVuKz1NLHRoaXN9LG8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihJKXt2YXIgZj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW2ZdPTEyOCx0aGlzLl9i''@;'; put 'put ''bG9jay5maWxsKDAsZisxKSxmPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciBUPTgqdGhpcy5fbGVuO2lmKFQ8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShULHRoaXMuX2Jsb2NrU2l6ZS00''@;'; put 'put ''KTtlbHNle3ZhciBBPSg0Mjk0OTY3Mjk1JlQpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKChULUEpLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoQSx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2Nr''@;'; put 'put ''KTt2YXIgTz10aGlzLl9oYXNoKCk7cmV0dXJuIEk/Ty50b1N0cmluZyhJKTpPfSxvLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sdGUuZXhwb3J0cz1vfSwyNTQ0Myh0ZSxqLGQp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPWZ1bmN0aW9uKGgpe3ZhciBvPWgudG9Mb3dlckNhc2UoKSxJPXRlLmV4cG9ydHNbb107aWYoIUkpdGhyb3cgbmV3IEVycm9yKG8rIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IEl9LHRlLmV4''@;'; put 'put ''cG9ydHMuc2hhPWQoNDg1ODUpLHRlLmV4cG9ydHMuc2hhMT1kKDIxMjcwKSx0ZS5leHBvcnRzLnNoYTIyND1kKDQyNzA5KSx0ZS5leHBvcnRzLnNoYTI1Nj1kKDMyMTQ4KSx0ZS5leHBvcnRzLnNoYTM4ND1kKDUxODU2KSx0ZS5leHBvcnRzLnNoYTUxMj1kKDMxMjEpfSw0ODU4NSh0ZSxqLGQp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDcxOTkzKSxoPWQoNzA0NjMpLG89ZCgyNzA1NCkuQnVmZmVyLEk9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxmPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gVCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ZixoLmNhbGwo''@;'; put 'put ''dGhpcyw2NCw1Nil9ZnVuY3Rpb24gQShEKXtyZXR1cm4gRDw8NXxEPj4+Mjd9ZnVuY3Rpb24gTShEKXtyZXR1cm4gRDw8MzB8RD4+PjJ9ZnVuY3Rpb24gTyhELEUsQixGKXtyZXR1cm4gMD09PUQ/RSZCfH5FJkY6Mj09PUQ/RSZCfEUmRnxCJkY6RV5CXkZ9UyhULGgpLFQucHJvdG90eXBlLmlu''@;'; put 'put ''aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRCl7Zm9yKHZhciBFPXRo''@;'; put 'put ''aXMuX3csQj0wfHRoaXMuX2EsRj0wfHRoaXMuX2IsTj0wfHRoaXMuX2MsSD0wfHRoaXMuX2Qsej0wfHRoaXMuX2UsWj0wO1o8MTY7KytaKUVbWl09RC5yZWFkSW50MzJCRSg0KlopO2Zvcig7Wjw4MDsrK1opRVtaXT1FW1otM11eRVtaLThdXkVbWi0xNF1eRVtaLTE2XTtmb3IodmFyIFU9MDtV''@;'; put 'put ''PDgwOysrVSl7dmFyIEs9fn4oVS8yMCksWD1BKEIpK08oSyxGLE4sSCkreitFW1VdK0lbS118MDt6PUgsSD1OLE49TShGKSxGPUIsQj1YfXRoaXMuX2E9Qit0aGlzLl9hfDAsdGhpcy5fYj1GK3RoaXMuX2J8MCx0aGlzLl9jPU4rdGhpcy5fY3wwLHRoaXMuX2Q9SCt0aGlzLl9kfDAsdGhpcy5f''@;'; put 'put ''ZT16K3RoaXMuX2V8MH0sVC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRD1vLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gRC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxELndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksRC53cml0''@;'; put 'put ''ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxELndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLER9LHRlLmV4cG9ydHM9VH0sMjEyNzAodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg3MTk5MyksaD1kKDcwNDYzKSxvPWQoMjcwNTQpLkJ1ZmZlcixJPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMs''@;'; put 'put ''LTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sZj1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFQoKXt0aGlzLmluaXQoKSx0aGlzLl93PWYsaC5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEEoRSl7cmV0dXJuIEU8PDF8RT4+PjMxfWZ1bmN0aW9uIE0oRSl7cmV0dXJuIEU8PDV8RT4+PjI3fWZ1bmN0''@;'; put 'put ''aW9uIE8oRSl7cmV0dXJuIEU8PDMwfEU+Pj4yfWZ1bmN0aW9uIEQoRSxCLEYsTil7cmV0dXJuIDA9PT1FP0ImRnx+QiZOOjI9PT1FP0ImRnxCJk58RiZOOkJeRl5OfVMoVCxoKSxULnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQw''@;'; put 'put ''MjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxULnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUpe2Zvcih2YXIgQj10aGlzLl93LEY9MHx0aGlzLl9hLE49MHx0aGlzLl9iLEg9MHx0aGlzLl9jLHo9MHx0aGlz''@;'; put 'put ''Ll9kLFo9MHx0aGlzLl9lLFU9MDtVPDE2OysrVSlCW1VdPUUucmVhZEludDMyQkUoNCpVKTtmb3IoO1U8ODA7KytVKUJbVV09QShCW1UtM11eQltVLThdXkJbVS0xNF1eQltVLTE2XSk7Zm9yKHZhciBLPTA7Szw4MDsrK0spe3ZhciBYPX5+KEsvMjApLG5lPU0oRikrRChYLE4sSCx6KStaK0Jb''@;'; put 'put ''S10rSVtYXXwwO1o9eix6PUgsSD1PKE4pLE49RixGPW5lfXRoaXMuX2E9Rit0aGlzLl9hfDAsdGhpcy5fYj1OK3RoaXMuX2J8MCx0aGlzLl9jPUgrdGhpcy5fY3wwLHRoaXMuX2Q9eit0aGlzLl9kfDAsdGhpcy5fZT1aK3RoaXMuX2V8MH0sVC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgRT1vLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gRS53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEUud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxFLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksRS53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxFLndyaXRlSW50MzJCRSgwfHRoaXMu''@;'; put 'put ''X2UsMTYpLEV9LHRlLmV4cG9ydHM9VH0sNDI3MDkodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg3MTk5MyksaD1kKDMyMTQ4KSxvPWQoNzA0NjMpLEk9ZCgyNzA1NCkuQnVmZmVyLGY9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBUKCl7dGhpcy5pbml0KCksdGhpcy5fdz1mLG8uY2FsbCh0''@;'; put 'put ''aGlzLDY0LDU2KX1TKFQsaCksVC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUs''@;'; put 'put ''dGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxULnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBBPUkuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBBLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEEud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksQS53cml0ZUlu''@;'; put 'put ''dDMyQkUodGhpcy5fYyw4KSxBLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxBLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxBLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxBLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxBfSx0ZS5leHBvcnRzPVR9LDMyMTQ4KHRlLGosZCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBTPWQoNzE5OTMpLGg9ZCg3MDQ2Myksbz1kKDI3MDU0KS5CdWZmZXIsST1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1''@;'; put 'put ''Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5''@;'; put 'put ''LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgy''@;'; put 'put ''MDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIy''@;'; put 'put ''MiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxmPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gVCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ZixoLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gQShGLE4s''@;'; put 'put ''SCl7cmV0dXJuIEheRiYoTl5IKX1mdW5jdGlvbiBNKEYsTixIKXtyZXR1cm4gRiZOfEgmKEZ8Til9ZnVuY3Rpb24gTyhGKXtyZXR1cm4oRj4+PjJ8Rjw8MzApXihGPj4+MTN8Rjw8MTkpXihGPj4+MjJ8Rjw8MTApfWZ1bmN0aW9uIEQoRil7cmV0dXJuKEY+Pj42fEY8PDI2KV4oRj4+PjExfEY8''@;'; put 'put ''PDIxKV4oRj4+PjI1fEY8PDcpfWZ1bmN0aW9uIEUoRil7cmV0dXJuKEY+Pj43fEY8PDI1KV4oRj4+PjE4fEY8PDE0KV5GPj4+M31mdW5jdGlvbiBCKEYpe3JldHVybihGPj4+MTd8Rjw8MTUpXihGPj4+MTl8Rjw8MTMpXkY+Pj4xMH1TKFQsaCksVC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30s''@;'; put 'put ''VC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXtmb3IodmFyIE49dGhpcy5fdyxIPTB8dGhpcy5fYSx6PTB8dGhpcy5fYixaPTB8dGhpcy5fYyxVPTB8dGhpcy5fZCxLPTB8dGhpcy5fZSxYPTB8dGhpcy5fZixuZT0wfHRoaXMuX2csc2U9MHx0aGlzLl9oLGhlPTA7aGU8MTY7KytoZSlO''@;'; put 'put ''W2hlXT1GLnJlYWRJbnQzMkJFKDQqaGUpO2Zvcig7aGU8NjQ7KytoZSlOW2hlXT1CKE5baGUtMl0pK05baGUtN10rRShOW2hlLTE1XSkrTltoZS0xNl18MDtmb3IodmFyIF9lPTA7X2U8NjQ7KytfZSl7dmFyIG1lPXNlK0QoSykrQShLLFgsbmUpK0lbX2VdK05bX2VdfDAsRmU9TyhIKStNKEgs''@;'; put 'put ''eixaKXwwO3NlPW5lLG5lPVgsWD1LLEs9VSttZXwwLFU9WixaPXosej1ILEg9bWUrRmV8MH10aGlzLl9hPUgrdGhpcy5fYXwwLHRoaXMuX2I9eit0aGlzLl9ifDAsdGhpcy5fYz1aK3RoaXMuX2N8MCx0aGlzLl9kPVUrdGhpcy5fZHwwLHRoaXMuX2U9Syt0aGlzLl9lfDAsdGhpcy5fZj1YK3Ro''@;'; put 'put ''aXMuX2Z8MCx0aGlzLl9nPW5lK3RoaXMuX2d8MCx0aGlzLl9oPXNlK3RoaXMuX2h8MH0sVC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1vLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gRi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEYu''@;'; put 'put ''d3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksRi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksRi53cml0ZUludDMyQkUodGhpcy5fZSwxNiksRi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksRi53cml0ZUludDMyQkUodGhpcy5fZywyNCksRi53cml0ZUludDMyQkUodGhpcy5faCwyOCksRn0sdGUu''@;'; put 'put ''ZXhwb3J0cz1UfSw1MTg1Nih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDcxOTkzKSxoPWQoMzEyMSksbz1kKDcwNDYzKSxJPWQoMjcwNTQpLkJ1ZmZlcixmPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFQoKXt0aGlzLmluaXQoKSx0aGlzLl93PWYsby5jYWxsKHRoaXMsMTI4LDExMil9''@;'; put 'put ''UyhULGgpLFQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlz''@;'; put 'put ''Ll9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2''@;'; put 'put ''OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxULnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBBPUkuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIE0oTyxELEUpe0Eud3JpdGVJbnQzMkJFKE8sRSksQS53cml0ZUludDMyQkUoRCxFKzQpfXJldHVybiBNKHRoaXMuX2Fo''@;'; put 'put ''LHRoaXMuX2FsLDApLE0odGhpcy5fYmgsdGhpcy5fYmwsOCksTSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksTSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksTSh0aGlzLl9laCx0aGlzLl9lbCwzMiksTSh0aGlzLl9maCx0aGlzLl9mbCw0MCksQX0sdGUuZXhwb3J0cz1UfSwzMTIxKHRlLGosZCl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBTPWQoNzE5OTMpLGg9ZCg3MDQ2Myksbz1kKDI3MDU0KS5CdWZmZXIsST1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIs''@;'; put 'put ''MTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQw''@;'; put 'put ''NjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5''@;'; put 'put ''ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1''@;'; put 'put ''NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0''@;'; put 'put ''MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1''@;'; put 'put ''NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkz''@;'; put 'put ''LDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1Miwy''@;'; put 'put ''NzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQw''@;'; put 'put ''MTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwx''@;'; put 'put ''MDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLGY9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gVCgpe3RoaXMu''@;'; put 'put ''aW5pdCgpLHRoaXMuX3c9ZixoLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBBKHosWixVKXtyZXR1cm4gVV56JihaXlUpfWZ1bmN0aW9uIE0oeixaLFUpe3JldHVybiB6Jlp8VSYoenxaKX1mdW5jdGlvbiBPKHosWil7cmV0dXJuKHo+Pj4yOHxaPDw0KV4oWj4+PjJ8ejw8MzApXihaPj4+''@;'; put 'put ''N3x6PDwyNSl9ZnVuY3Rpb24gRCh6LFope3JldHVybih6Pj4+MTR8Wjw8MTgpXih6Pj4+MTh8Wjw8MTQpXihaPj4+OXx6PDwyMyl9ZnVuY3Rpb24gRSh6LFope3JldHVybih6Pj4+MXxaPDwzMSleKHo+Pj44fFo8PDI0KV56Pj4+N31mdW5jdGlvbiBCKHosWil7cmV0dXJuKHo+Pj4xfFo8PDMx''@;'; put 'put ''KV4oej4+Pjh8Wjw8MjQpXih6Pj4+N3xaPDwyNSl9ZnVuY3Rpb24gRih6LFope3JldHVybih6Pj4+MTl8Wjw8MTMpXihaPj4+Mjl8ejw8Myleej4+PjZ9ZnVuY3Rpb24gTih6LFope3JldHVybih6Pj4+MTl8Wjw8MTMpXihaPj4+Mjl8ejw8MyleKHo+Pj42fFo8PDI2KX1mdW5jdGlvbiBIKHos''@;'; put 'put ''Wil7cmV0dXJuIHo+Pj4wPFo+Pj4wPzE6MH1TKFQsaCksVC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMx''@;'; put 'put ''MTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhp''@;'; put 'put ''cy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LFQucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBaPXRoaXMuX3csVT0wfHRoaXMuX2FoLEs9MHx0aGlzLl9iaCxYPTB8dGhpcy5fY2gsbmU9MHx0aGlzLl9kaCxz''@;'; put 'put ''ZT0wfHRoaXMuX2VoLGhlPTB8dGhpcy5fZmgsX2U9MHx0aGlzLl9naCxtZT0wfHRoaXMuX2hoLEZlPTB8dGhpcy5fYWwsUj0wfHRoaXMuX2JsLHM9MHx0aGlzLl9jbCx1PTB8dGhpcy5fZGwsdj0wfHRoaXMuX2VsLHA9MHx0aGlzLl9mbCxfPTB8dGhpcy5fZ2wsaz0wfHRoaXMuX2hsLEw9MDtM''@;'; put 'put ''PDMyO0wrPTIpWltMXT16LnJlYWRJbnQzMkJFKDQqTCksWltMKzFdPXoucmVhZEludDMyQkUoNCpMKzQpO2Zvcig7TDwxNjA7TCs9Mil7dmFyIHk9WltMLTMwXSxsPVpbTC0zMCsxXSxiPUUoeSxsKSxxPUIobCx5KSxHPUYoeT1aW0wtNF0sbD1aW0wtNCsxXSksUT1OKGwseSksWmU9WltMLTMy''@;'; put 'put ''XSxxZT1aW0wtMzIrMV0sdmU9cStaW0wtMTQrMV18MCx1ZT1iK1pbTC0xNF0rSCh2ZSxxKXwwO3VlPSh1ZT11ZStHK0godmU9dmUrUXwwLFEpfDApK1plK0godmU9dmUrcWV8MCxxZSl8MCxaW0xdPXVlLFpbTCsxXT12ZX1mb3IodmFyIHplPTA7emU8MTYwO3plKz0yKXt1ZT1aW3plXSx2ZT1a''@;'; put 'put ''W3plKzFdO3ZhciBPZT1NKFUsSyxYKSxDZT1NKEZlLFIscyksa2U9TyhVLEZlKSx4ZT1PKEZlLFUpLE1lPUQoc2UsdiksSWU9RCh2LHNlKSxiZT1JW3plXSx3ZT1JW3plKzFdLHB0PUEoc2UsaGUsX2UpLEtlPUEodixwLF8pLFllPWsrSWV8MCxxdD1tZStNZStIKFllLGspfDA7cXQ9KHF0PShx''@;'; put 'put ''dD1xdCtwdCtIKFllPVllK0tlfDAsS2UpfDApK2JlK0goWWU9WWUrd2V8MCx3ZSl8MCkrdWUrSChZZT1ZZSt2ZXwwLHZlKXwwO3ZhciBodD14ZStDZXwwLHZ0PWtlK09lK0goaHQseGUpfDA7bWU9X2Usaz1fLF9lPWhlLF89cCxoZT1zZSxwPXYsc2U9bmUrcXQrSCh2PXUrWWV8MCx1KXwwLG5l''@;'; put 'put ''PVgsdT1zLFg9SyxzPVIsSz1VLFI9RmUsVT1xdCt2dCtIKEZlPVllK2h0fDAsWWUpfDB9dGhpcy5fYWw9dGhpcy5fYWwrRmV8MCx0aGlzLl9ibD10aGlzLl9ibCtSfDAsdGhpcy5fY2w9dGhpcy5fY2wrc3wwLHRoaXMuX2RsPXRoaXMuX2RsK3V8MCx0aGlzLl9lbD10aGlzLl9lbCt2fDAsdGhp''@;'; put 'put ''cy5fZmw9dGhpcy5fZmwrcHwwLHRoaXMuX2dsPXRoaXMuX2dsK198MCx0aGlzLl9obD10aGlzLl9obCtrfDAsdGhpcy5fYWg9dGhpcy5fYWgrVStIKHRoaXMuX2FsLEZlKXwwLHRoaXMuX2JoPXRoaXMuX2JoK0srSCh0aGlzLl9ibCxSKXwwLHRoaXMuX2NoPXRoaXMuX2NoK1grSCh0aGlzLl9j''@;'; put 'put ''bCxzKXwwLHRoaXMuX2RoPXRoaXMuX2RoK25lK0godGhpcy5fZGwsdSl8MCx0aGlzLl9laD10aGlzLl9laCtzZStIKHRoaXMuX2VsLHYpfDAsdGhpcy5fZmg9dGhpcy5fZmgraGUrSCh0aGlzLl9mbCxwKXwwLHRoaXMuX2doPXRoaXMuX2doK19lK0godGhpcy5fZ2wsXyl8MCx0aGlzLl9oaD10''@;'; put 'put ''aGlzLl9oaCttZStIKHRoaXMuX2hsLGspfDB9LFQucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHo9by5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gWihVLEssWCl7ei53cml0ZUludDMyQkUoVSxYKSx6LndyaXRlSW50MzJCRShLLFgrNCl9cmV0dXJuIFoodGhpcy5fYWgsdGhpcy5f''@;'; put 'put ''YWwsMCksWih0aGlzLl9iaCx0aGlzLl9ibCw4KSxaKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxaKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxaKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxaKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxaKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxaKHRoaXMuX2hoLHRoaXMu''@;'; put 'put ''X2hsLDU2KSx6fSx0ZS5leHBvcnRzPVR9LDcwNDUodGUsaixkKXt0ZS5leHBvcnRzPW87dmFyIFM9ZCg0NDM1NikuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIG8oKXtTLmNhbGwodGhpcyl9ZCg3MTk5MykobyxTKSxvLlJlYWRhYmxlPWQoNjEwOTIpLG8uV3JpdGFibGU9ZCgxNTQ5Miksby5EdXBs''@;'; put 'put ''ZXg9ZCgxMDMwKSxvLlRyYW5zZm9ybT1kKDQzNDEwKSxvLlBhc3NUaHJvdWdoPWQoODM4MjQpLG8uZmluaXNoZWQ9ZCg1Nzg1NCksby5waXBlbGluZT1kKDY4NDYpLG8uU3RyZWFtPW8sby5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihJLGYpe3ZhciBUPXRoaXM7ZnVuY3Rpb24gQShOKXtJLndy''@;'; put 'put ''aXRhYmxlJiYhMT09PUkud3JpdGUoTikmJlQucGF1c2UmJlQucGF1c2UoKX1mdW5jdGlvbiBNKCl7VC5yZWFkYWJsZSYmVC5yZXN1bWUmJlQucmVzdW1lKCl9VC5vbigiZGF0YSIsQSksSS5vbigiZHJhaW4iLE0pLCFJLl9pc1N0ZGlvJiYoIWZ8fCExIT09Zi5lbmQpJiYoVC5vbigiZW5kIixE''@;'; put 'put ''KSxULm9uKCJjbG9zZSIsRSkpO3ZhciBPPSExO2Z1bmN0aW9uIEQoKXtPfHwoTz0hMCxJLmVuZCgpKX1mdW5jdGlvbiBFKCl7T3x8KE89ITAsImZ1bmN0aW9uIj09dHlwZW9mIEkuZGVzdHJveSYmSS5kZXN0cm95KCkpfWZ1bmN0aW9uIEIoTil7aWYoRigpLDA9PT1TLmxpc3RlbmVyQ291bnQo''@;'; put 'put ''dGhpcywiZXJyb3IiKSl0aHJvdyBOfWZ1bmN0aW9uIEYoKXtULnJlbW92ZUxpc3RlbmVyKCJkYXRhIixBKSxJLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsTSksVC5yZW1vdmVMaXN0ZW5lcigiZW5kIixEKSxULnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRSksVC5yZW1vdmVMaXN0ZW5lcigiZXJy''@;'; put 'put ''b3IiLEIpLEkucmVtb3ZlTGlzdGVuZXIoImVycm9yIixCKSxULnJlbW92ZUxpc3RlbmVyKCJlbmQiLEYpLFQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixGKSxJLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRil9cmV0dXJuIFQub24oImVycm9yIixCKSxJLm9uKCJlcnJvciIsQiksVC5vbigiZW5k''@;'; put 'put ''IixGKSxULm9uKCJjbG9zZSIsRiksSS5vbigiY2xvc2UiLEYpLEkuZW1pdCgicGlwZSIsVCksSX19LDMwNDY0KHRlKXsidXNlIHN0cmljdCI7dmFyIGQ9e307ZnVuY3Rpb24gUyhULEEsTSl7TXx8KE09RXJyb3IpO3ZhciBEPWZ1bmN0aW9uKEUpe2Z1bmN0aW9uIEIoRixOLEgpe3JldHVybiBF''@;'; put 'put ''LmNhbGwodGhpcyxmdW5jdGlvbiBPKEUsQixGKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEE/QTpBKEUsQixGKX0oRixOLEgpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gaihULEEpe1QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQS5wcm90b3R5cGUpLFQucHJvdG90eXBlLmNvbnN0cnVjdG9y''@;'; put 'put ''PVQsVC5fX3Byb3RvX189QX0oQixFKSxCfShNKTtELnByb3RvdHlwZS5uYW1lPU0ubmFtZSxELnByb3RvdHlwZS5jb2RlPVQsZFtUXT1EfWZ1bmN0aW9uIGgoVCxBKXtpZihBcnJheS5pc0FycmF5KFQpKXt2YXIgTT1ULmxlbmd0aDtyZXR1cm4gVD1ULm1hcChmdW5jdGlvbihPKXtyZXR1cm4g''@;'; put 'put ''U3RyaW5nKE8pfSksTT4yPyJvbmUgb2YgIi5jb25jYXQoQSwiICIpLmNvbmNhdChULnNsaWNlKDAsTS0xKS5qb2luKCIsICIpLCIsIG9yICIpK1RbTS0xXToyPT09TT8ib25lIG9mICIuY29uY2F0KEEsIiAiKS5jb25jYXQoVFswXSwiIG9yICIpLmNvbmNhdChUWzFdKToib2YgIi5jb25jYXQo''@;'; put 'put ''QSwiICIpLmNvbmNhdChUWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoQSwiICIpLmNvbmNhdChTdHJpbmcoVCkpfVMoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oVCxBKXtyZXR1cm4nVGhlIHZhbHVlICInK0ErJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1QrJyInfSxUeXBl''@;'; put 'put ''RXJyb3IpLFMoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihULEEsTSl7dmFyIE8sRDtpZigic3RyaW5nIj09dHlwZW9mIEEmJmZ1bmN0aW9uIG8oVCxBLE0pe3JldHVybiBULnN1YnN0cighTXx8TTwwPzA6K00sQS5sZW5ndGgpPT09QX0oQSwibm90ICIpPyhPPSJtdXN0IG5vdCBi''@;'; put 'put ''ZSIsQT1BLnJlcGxhY2UoL15ub3QgLywiIikpOk89Im11c3QgYmUiLGZ1bmN0aW9uIEkoVCxBLE0pe3JldHVybih2b2lkIDA9PT1NfHxNPlQubGVuZ3RoKSYmKE09VC5sZW5ndGgpLFQuc3Vic3RyaW5nKE0tQS5sZW5ndGgsTSk9PT1BfShULCIgYXJndW1lbnQiKSlEPSJUaGUgIi5jb25jYXQo''@;'; put 'put ''VCwiICIpLmNvbmNhdChPLCIgIikuY29uY2F0KGgoQSwidHlwZSIpKTtlbHNle3ZhciBFPWZ1bmN0aW9uIGYoVCxBLE0pe3JldHVybiJudW1iZXIiIT10eXBlb2YgTSYmKE09MCksIShNK0EubGVuZ3RoPlQubGVuZ3RoKSYmLTEhPT1ULmluZGV4T2YoQSxNKX0oVCwiLiIpPyJwcm9wZXJ0eSI6''@;'; put 'put ''ImFyZ3VtZW50IjtEPSdUaGUgIicuY29uY2F0KFQsJyIgJykuY29uY2F0KEUsIiAiKS5jb25jYXQoTywiICIpLmNvbmNhdChoKEEsInR5cGUiKSl9cmV0dXJuIEQrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgTSl9LFR5cGVFcnJvciksUygiRVJSX1NUUkVBTV9QVVNIX0FGVEVS''@;'; put 'put ''X0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksUygiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFQpe3JldHVybiJUaGUgIitUKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxTKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBj''@;'; put 'put ''bG9zZSIpLFMoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihUKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitUKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxTKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxTKCJF''@;'; put 'put ''UlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLFMoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksUygiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFt''@;'; put 'put ''IixUeXBlRXJyb3IpLFMoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihUKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitUfSxUeXBlRXJyb3IpLFMoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIp''@;'; put 'put ''LHRlLmV4cG9ydHMuRj1kfSwxMDMwKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPU9iamVjdC5rZXlzfHxmdW5jdGlvbihEKXt2YXIgRT1bXTtmb3IodmFyIEIgaW4gRClFLnB1c2goQik7cmV0dXJuIEV9O3RlLmV4cG9ydHM9QTt2YXIgaD1kKDYxMDkyKSxvPWQoMTU0OTIpO2QoNzE5OTMp''@;'; put 'put ''KEEsaCk7Zm9yKHZhciBJPVMoby5wcm90b3R5cGUpLGY9MDtmPEkubGVuZ3RoO2YrKyl7dmFyIFQ9SVtmXTtBLnByb3RvdHlwZVtUXXx8KEEucHJvdG90eXBlW1RdPW8ucHJvdG90eXBlW1RdKX1mdW5jdGlvbiBBKEQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEEpKXJldHVybiBuZXcgQShEKTto''@;'; put 'put ''LmNhbGwodGhpcyxEKSxvLmNhbGwodGhpcyxEKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsRCYmKCExPT09RC5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09RC53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09RC5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZP''@;'; put 'put ''cGVuPSExLHRoaXMub25jZSgiZW5kIixNKSkpfWZ1bmN0aW9uIE0oKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxwcm9jZXNzLm5leHRUaWNrKE8sdGhpcyl9ZnVuY3Rpb24gTyhEKXtELmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0''@;'; put 'put ''ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEUpe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1FLHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUUpfX0pfSw4MzgyNCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPWg7dmFyIFM9ZCg0MzQxMCk7ZnVuY3Rpb24gaChvKXtpZighKHRoaXMgaW5zdGFuY2VvZiBoKSlyZXR1cm4gbmV3IGgobyk7Uy5jYWxsKHRoaXMsbyl9ZCg3MTk5''@;'; put 'put ''MykoaCxTKSxoLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKG8sSSxmKXtmKG51bGwsbyl9fSw2MTA5Mih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUzt0ZS5leHBvcnRzPVIsUi5SZWFkYWJsZVN0YXRlPUZlLGQoNDQzNTYpO3ZhciBELG89ZnVuY3Rpb24oa2UseGUpe3JldHVybiBr''@;'; put 'put ''ZS5saXN0ZW5lcnMoeGUpLmxlbmd0aH0sST1kKDEyNjAxKSxmPWQoODM4MzgpLkJ1ZmZlcixUPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTz1kKDc3MTk5''@;'; put 'put ''KTtEPU8mJk8uZGVidWdsb2c/Ty5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBYLG5lLHNlLEU9ZCg3NTIyNSksQj1kKDg4MTUyKSxOPWQoMjI4MjcpLmdldEhpZ2hXYXRlck1hcmssSD1kKDMwNDY0KS5GLHo9SC5FUlJfSU5WQUxJRF9BUkdfVFlQRSxaPUguRVJSX1NUUkVB''@;'; put 'put ''TV9QVVNIX0FGVEVSX0VPRixVPUguRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsSz1ILkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7ZCg3MTk5MykoUixJKTt2YXIgaGU9Qi5lcnJvck9yRGVzdHJveSxfZT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJy''@;'; put 'put ''ZXN1bWUiXTtmdW5jdGlvbiBGZShDZSxrZSx4ZSl7Uz1TfHxkKDEwMzApLCJib29sZWFuIiE9dHlwZW9mIHhlJiYoeGU9a2UgaW5zdGFuY2VvZiBTKSx0aGlzLm9iamVjdE1vZGU9ISEoQ2U9Q2V8fHt9KS5vYmplY3RNb2RlLHhlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8''@;'; put 'put ''ISFDZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1OKHRoaXMsQ2UsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIseGUpLHRoaXMuYnVmZmVyPW5ldyBFLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxs''@;'; put 'put ''LHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBh''@;'; put 'put ''dXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PUNlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhQ2UuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9Q2UuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5y''@;'; put 'put ''ZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsQ2UuZW5jb2RpbmcmJihYfHwoWD1kKDc4NDU0KS5JKSx0aGlzLmRlY29kZXI9bmV3IFgoQ2UuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9Q2UuZW5jb2RpbmcpfWZ1bmN0aW9uIFIoQ2Upe2lmKFM9U3x8''@;'; put 'put ''ZCgxMDMwKSwhKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoQ2UpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IEZlKENlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIFMpLHRoaXMucmVhZGFibGU9ITAsQ2UmJigiZnVuY3Rpb24iPT10eXBlb2YgQ2UucmVhZCYmKHRoaXMuX3JlYWQ9Q2Uu''@;'; put 'put ''cmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIENlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUNlLmRlc3Ryb3kpKSxJLmNhbGwodGhpcyl9ZnVuY3Rpb24gcyhDZSxrZSx4ZSxNZSxJZSl7RCgicmVhZGFibGVBZGRDaHVuayIsa2UpO3ZhciB3ZSxiZT1DZS5fcmVhZGFibGVTdGF0ZTtpZihudWxs''@;'; put 'put ''PT09a2UpYmUucmVhZGluZz0hMSxmdW5jdGlvbiBMKENlLGtlKXtpZihEKCJvbkVvZkNodW5rIiksIWtlLmVuZGVkKXtpZihrZS5kZWNvZGVyKXt2YXIgeGU9a2UuZGVjb2Rlci5lbmQoKTt4ZSYmeGUubGVuZ3RoJiYoa2UuYnVmZmVyLnB1c2goeGUpLGtlLmxlbmd0aCs9a2Uub2JqZWN0TW9k''@;'; put 'put ''ZT8xOnhlLmxlbmd0aCl9a2UuZW5kZWQ9ITAsa2Uuc3luYz95KENlKTooa2UubmVlZFJlYWRhYmxlPSExLGtlLmVtaXR0ZWRSZWFkYWJsZXx8KGtlLmVtaXR0ZWRSZWFkYWJsZT0hMCxsKENlKSkpfX0oQ2UsYmUpO2Vsc2UgaWYoSWV8fCh3ZT1mdW5jdGlvbiB2KENlLGtlKXt2YXIgeGU7cmV0''@;'; put 'put ''dXJuIWZ1bmN0aW9uIE0oQ2Upe3JldHVybiBmLmlzQnVmZmVyKENlKXx8Q2UgaW5zdGFuY2VvZiBUfShrZSkmJiJzdHJpbmciIT10eXBlb2Yga2UmJnZvaWQgMCE9PWtlJiYhQ2Uub2JqZWN0TW9kZSYmKHhlPW5ldyB6KCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0s''@;'; put 'put ''a2UpKSx4ZX0oYmUsa2UpKSx3ZSloZShDZSx3ZSk7ZWxzZSBpZihiZS5vYmplY3RNb2RlfHxrZSYma2UubGVuZ3RoPjApaWYoInN0cmluZyIhPXR5cGVvZiBrZSYmIWJlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihrZSkhPT1mLnByb3RvdHlwZSYmKGtlPWZ1bmN0aW9uIEEo''@;'; put 'put ''Q2Upe3JldHVybiBmLmZyb20oQ2UpfShrZSkpLE1lKWJlLmVuZEVtaXR0ZWQ/aGUoQ2UsbmV3IEspOnUoQ2UsYmUsa2UsITApO2Vsc2UgaWYoYmUuZW5kZWQpaGUoQ2UsbmV3IFopO2Vsc2V7aWYoYmUuZGVzdHJveWVkKXJldHVybiExO2JlLnJlYWRpbmc9ITEsYmUuZGVjb2RlciYmIXhlPyhr''@;'; put 'put ''ZT1iZS5kZWNvZGVyLndyaXRlKGtlKSxiZS5vYmplY3RNb2RlfHwwIT09a2UubGVuZ3RoP3UoQ2UsYmUsa2UsITEpOmIoQ2UsYmUpKTp1KENlLGJlLGtlLCExKX1lbHNlIE1lfHwoYmUucmVhZGluZz0hMSxiKENlLGJlKSk7cmV0dXJuIWJlLmVuZGVkJiYoYmUubGVuZ3RoPGJlLmhpZ2hXYXRl''@;'; put 'put ''ck1hcmt8fDA9PT1iZS5sZW5ndGgpfWZ1bmN0aW9uIHUoQ2Usa2UseGUsTWUpe2tlLmZsb3dpbmcmJjA9PT1rZS5sZW5ndGgmJiFrZS5zeW5jPyhrZS5hd2FpdERyYWluPTAsQ2UuZW1pdCgiZGF0YSIseGUpKTooa2UubGVuZ3RoKz1rZS5vYmplY3RNb2RlPzE6eGUubGVuZ3RoLE1lP2tlLmJ1''@;'; put 'put ''ZmZlci51bnNoaWZ0KHhlKTprZS5idWZmZXIucHVzaCh4ZSksa2UubmVlZFJlYWRhYmxlJiZ5KENlKSksYihDZSxrZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlz''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGtlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9a2UpfX0pLFIucHJvdG90eXBlLmRlc3Ryb3k9Qi5kZXN0cm95LFIucHJvdG90eXBl''@;'; put 'put ''Ll91bmRlc3Ryb3k9Qi51bmRlc3Ryb3ksUi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oQ2Usa2Upe2tlKENlKX0sUi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihDZSxrZSl7dmFyIE1lLHhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHhlLm9iamVjdE1vZGU/TWU9ITA6InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBDZSYmKChrZT1rZXx8eGUuZGVmYXVsdEVuY29kaW5nKSE9PXhlLmVuY29kaW5nJiYoQ2U9Zi5mcm9tKENlLGtlKSxrZT0iIiksTWU9ITApLHModGhpcyxDZSxrZSwhMSxNZSl9LFIucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oQ2Upe3JldHVybiBzKHRoaXMsQ2UsbnVs''@;'; put 'put ''bCwhMCwhMSl9LFIucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LFIucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKENlKXtYfHwoWD1kKDc4NDU0KS5JKTt2YXIga2U9bmV3IFgoQ2UpO3RoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuZGVjb2Rlcj1rZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIHhlPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsTWU9IiI7bnVsbCE9PXhlOylNZSs9a2Uud3JpdGUoeGUuZGF0''@;'; put 'put ''YSkseGU9eGUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PU1lJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKE1lKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1NZS5sZW5ndGgsdGhpc307dmFyIHA9MTA3Mzc0MTgyNDtmdW5j''@;'; put 'put ''dGlvbiBrKENlLGtlKXtyZXR1cm4gQ2U8PTB8fDA9PT1rZS5sZW5ndGgmJmtlLmVuZGVkPzA6a2Uub2JqZWN0TW9kZT8xOkNlIT1DZT9rZS5mbG93aW5nJiZrZS5sZW5ndGg/a2UuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6a2UubGVuZ3RoOihDZT5rZS5oaWdoV2F0ZXJNYXJrJiYoa2UuaGln''@;'; put 'put ''aFdhdGVyTWFyaz1mdW5jdGlvbiBfKENlKXtyZXR1cm4gQ2U+PXA/Q2U9cDooQ2UtLSxDZXw9Q2U+Pj4xLENlfD1DZT4+PjIsQ2V8PUNlPj4+NCxDZXw9Q2U+Pj44LENlfD1DZT4+PjE2LENlKyspLENlfShDZSkpLENlPD1rZS5sZW5ndGg/Q2U6a2UuZW5kZWQ/a2UubGVuZ3RoOihrZS5uZWVk''@;'; put 'put ''UmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIHkoQ2Upe3ZhciBrZT1DZS5fcmVhZGFibGVTdGF0ZTtEKCJlbWl0UmVhZGFibGUiLGtlLm5lZWRSZWFkYWJsZSxrZS5lbWl0dGVkUmVhZGFibGUpLGtlLm5lZWRSZWFkYWJsZT0hMSxrZS5lbWl0dGVkUmVhZGFibGV8fChEKCJlbWl0UmVhZGFibGUi''@;'; put 'put ''LGtlLmZsb3dpbmcpLGtlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKGwsQ2UpKX1mdW5jdGlvbiBsKENlKXt2YXIga2U9Q2UuX3JlYWRhYmxlU3RhdGU7RCgiZW1pdFJlYWRhYmxlXyIsa2UuZGVzdHJveWVkLGtlLmxlbmd0aCxrZS5lbmRlZCksIWtlLmRlc3Ryb3llZCYm''@;'; put 'put ''KGtlLmxlbmd0aHx8a2UuZW5kZWQpJiYoQ2UuZW1pdCgicmVhZGFibGUiKSxrZS5lbWl0dGVkUmVhZGFibGU9ITEpLGtlLm5lZWRSZWFkYWJsZT0ha2UuZmxvd2luZyYmIWtlLmVuZGVkJiZrZS5sZW5ndGg8PWtlLmhpZ2hXYXRlck1hcmsscWUoQ2UpfWZ1bmN0aW9uIGIoQ2Usa2Upe2tlLnJl''@;'; put 'put ''YWRpbmdNb3JlfHwoa2UucmVhZGluZ01vcmU9ITAscHJvY2Vzcy5uZXh0VGljayhxLENlLGtlKSl9ZnVuY3Rpb24gcShDZSxrZSl7Zm9yKDsha2UucmVhZGluZyYmIWtlLmVuZGVkJiYoa2UubGVuZ3RoPGtlLmhpZ2hXYXRlck1hcmt8fGtlLmZsb3dpbmcmJjA9PT1rZS5sZW5ndGgpOyl7dmFy''@;'; put 'put ''IHhlPWtlLmxlbmd0aDtpZihEKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLENlLnJlYWQoMCkseGU9PT1rZS5sZW5ndGgpYnJlYWt9a2UucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gUShDZSl7dmFyIGtlPUNlLl9yZWFkYWJsZVN0YXRlO2tlLnJlYWRhYmxlTGlzdGVuaW5nPUNlLmxpc3RlbmVy''@;'; put 'put ''Q291bnQoInJlYWRhYmxlIik+MCxrZS5yZXN1bWVTY2hlZHVsZWQmJiFrZS5wYXVzZWQ/a2UuZmxvd2luZz0hMDpDZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmQ2UucmVzdW1lKCl9ZnVuY3Rpb24gcGUoQ2Upe0QoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLENlLnJlYWQoMCl9ZnVu''@;'; put 'put ''Y3Rpb24gWmUoQ2Usa2Upe0QoInJlc3VtZSIsa2UucmVhZGluZyksa2UucmVhZGluZ3x8Q2UucmVhZCgwKSxrZS5yZXN1bWVTY2hlZHVsZWQ9ITEsQ2UuZW1pdCgicmVzdW1lIikscWUoQ2UpLGtlLmZsb3dpbmcmJiFrZS5yZWFkaW5nJiZDZS5yZWFkKDApfWZ1bmN0aW9uIHFlKENlKXt2YXIg''@;'; put 'put ''a2U9Q2UuX3JlYWRhYmxlU3RhdGU7Zm9yKEQoImZsb3ciLGtlLmZsb3dpbmcpO2tlLmZsb3dpbmcmJm51bGwhPT1DZS5yZWFkKCk7KTt9ZnVuY3Rpb24gdmUoQ2Usa2Upe3JldHVybiAwPT09a2UubGVuZ3RoP251bGw6KGtlLm9iamVjdE1vZGU/eGU9a2UuYnVmZmVyLnNoaWZ0KCk6IUNlfHxD''@;'; put 'put ''ZT49a2UubGVuZ3RoPyh4ZT1rZS5kZWNvZGVyP2tlLmJ1ZmZlci5qb2luKCIiKToxPT09a2UuYnVmZmVyLmxlbmd0aD9rZS5idWZmZXIuZmlyc3QoKTprZS5idWZmZXIuY29uY2F0KGtlLmxlbmd0aCksa2UuYnVmZmVyLmNsZWFyKCkpOnhlPWtlLmJ1ZmZlci5jb25zdW1lKENlLGtlLmRlY29k''@;'; put 'put ''ZXIpLHhlKTt2YXIgeGV9ZnVuY3Rpb24gdWUoQ2Upe3ZhciBrZT1DZS5fcmVhZGFibGVTdGF0ZTtEKCJlbmRSZWFkYWJsZSIsa2UuZW5kRW1pdHRlZCksa2UuZW5kRW1pdHRlZHx8KGtlLmVuZGVkPSEwLHByb2Nlc3MubmV4dFRpY2soemUsa2UsQ2UpKX1mdW5jdGlvbiB6ZShDZSxrZSl7aWYo''@;'; put 'put ''RCgiZW5kUmVhZGFibGVOVCIsQ2UuZW5kRW1pdHRlZCxDZS5sZW5ndGgpLCFDZS5lbmRFbWl0dGVkJiYwPT09Q2UubGVuZ3RoJiYoQ2UuZW5kRW1pdHRlZD0hMCxrZS5yZWFkYWJsZT0hMSxrZS5lbWl0KCJlbmQiKSxDZS5hdXRvRGVzdHJveSkpe3ZhciB4ZT1rZS5fd3JpdGFibGVTdGF0ZTso''@;'; put 'put ''IXhlfHx4ZS5hdXRvRGVzdHJveSYmeGUuZmluaXNoZWQpJiZrZS5kZXN0cm95KCl9fWZ1bmN0aW9uIE9lKENlLGtlKXtmb3IodmFyIHhlPTAsTWU9Q2UubGVuZ3RoO3hlPE1lO3hlKyspaWYoQ2VbeGVdPT09a2UpcmV0dXJuIHhlO3JldHVybi0xfVIucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24o''@;'; put 'put ''Q2Upe0QoInJlYWQiLENlKSxDZT1wYXJzZUludChDZSwxMCk7dmFyIGtlPXRoaXMuX3JlYWRhYmxlU3RhdGUseGU9Q2U7aWYoMCE9PUNlJiYoa2UuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09Q2UmJmtlLm5lZWRSZWFkYWJsZSYmKCgwIT09a2UuaGlnaFdhdGVyTWFyaz9rZS5sZW5ndGg+PWtl''@;'; put 'put ''LmhpZ2hXYXRlck1hcms6a2UubGVuZ3RoPjApfHxrZS5lbmRlZCkpcmV0dXJuIEQoInJlYWQ6IGVtaXRSZWFkYWJsZSIsa2UubGVuZ3RoLGtlLmVuZGVkKSwwPT09a2UubGVuZ3RoJiZrZS5lbmRlZD91ZSh0aGlzKTp5KHRoaXMpLG51bGw7aWYoMD09PShDZT1rKENlLGtlKSkmJmtlLmVuZGVk''@;'; put 'put ''KXJldHVybiAwPT09a2UubGVuZ3RoJiZ1ZSh0aGlzKSxudWxsO3ZhciBJZSxNZT1rZS5uZWVkUmVhZGFibGU7cmV0dXJuIEQoIm5lZWQgcmVhZGFibGUiLE1lKSwoMD09PWtlLmxlbmd0aHx8a2UubGVuZ3RoLUNlPGtlLmhpZ2hXYXRlck1hcmspJiZEKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVy''@;'; put 'put ''bWFyayIsTWU9ITApLGtlLmVuZGVkfHxrZS5yZWFkaW5nP0QoInJlYWRpbmcgb3IgZW5kZWQiLE1lPSExKTpNZSYmKEQoImRvIHJlYWQiKSxrZS5yZWFkaW5nPSEwLGtlLnN5bmM9ITAsMD09PWtlLmxlbmd0aCYmKGtlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChrZS5oaWdoV2F0ZXJN''@;'; put 'put ''YXJrKSxrZS5zeW5jPSExLGtlLnJlYWRpbmd8fChDZT1rKHhlLGtlKSkpLG51bGw9PT0oSWU9Q2U+MD92ZShDZSxrZSk6bnVsbCk/KGtlLm5lZWRSZWFkYWJsZT1rZS5sZW5ndGg8PWtlLmhpZ2hXYXRlck1hcmssQ2U9MCk6KGtlLmxlbmd0aC09Q2Usa2UuYXdhaXREcmFpbj0wKSwwPT09a2Uu''@;'; put 'put ''bGVuZ3RoJiYoa2UuZW5kZWR8fChrZS5uZWVkUmVhZGFibGU9ITApLHhlIT09Q2UmJmtlLmVuZGVkJiZ1ZSh0aGlzKSksbnVsbCE9PUllJiZ0aGlzLmVtaXQoImRhdGEiLEllKSxJZX0sUi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oQ2Upe2hlKHRoaXMsbmV3IFUoIl9yZWFkKCkiKSl9LFIu''@;'; put 'put ''cHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oQ2Usa2Upe3ZhciB4ZT10aGlzLE1lPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKE1lLnBpcGVzQ291bnQpe2Nhc2UgMDpNZS5waXBlcz1DZTticmVhaztjYXNlIDE6TWUucGlwZXM9W01lLnBpcGVzLENlXTticmVhaztkZWZhdWx0Ok1lLnBpcGVz''@;'; put 'put ''LnB1c2goQ2UpfU1lLnBpcGVzQ291bnQrPTEsRCgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixNZS5waXBlc0NvdW50LGtlKTt2YXIgYmU9a2UmJiExPT09a2UuZW5kfHxDZT09PXByb2Nlc3Muc3Rkb3V0fHxDZT09PXByb2Nlc3Muc3RkZXJyP1VlOnB0O2Z1bmN0aW9uIHB0KCl7RCgib25lbmQi''@;'; put 'put ''KSxDZS5lbmQoKX1NZS5lbmRFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soYmUpOnhlLm9uY2UoImVuZCIsYmUpLENlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIHdlKCRlLExlKXtEKCJvbnVucGlwZSIpLCRlPT09eGUmJkxlJiYhMT09PUxlLmhhc1VucGlwZWQmJihMZS5oYXNVbnBpcGVkPSEwLGZ1''@;'; put 'put ''bmN0aW9uIHF0KCl7RCgiY2xlYW51cCIpLENlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWXQpLENlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHR0KSxDZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLEtlKSxDZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHZ0KSxDZS5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''dW5waXBlIix3ZSkseGUucmVtb3ZlTGlzdGVuZXIoImVuZCIscHQpLHhlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFVlKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsaHQpLFllPSEwLE1lLmF3YWl0RHJhaW4mJighQ2UuX3dyaXRhYmxlU3RhdGV8fENlLl93cml0YWJsZVN0YXRlLm5lZWREcmFp''@;'; put 'put ''bikmJktlKCl9KCkpfSk7dmFyIEtlPWZ1bmN0aW9uIEcoQ2Upe3JldHVybiBmdW5jdGlvbigpe3ZhciB4ZT1DZS5fcmVhZGFibGVTdGF0ZTtEKCJwaXBlT25EcmFpbiIseGUuYXdhaXREcmFpbikseGUuYXdhaXREcmFpbiYmeGUuYXdhaXREcmFpbi0tLDA9PT14ZS5hd2FpdERyYWluJiZvKENl''@;'; put 'put ''LCJkYXRhIikmJih4ZS5mbG93aW5nPSEwLHFlKENlKSl9fSh4ZSk7Q2Uub24oImRyYWluIixLZSk7dmFyIFllPSExO2Z1bmN0aW9uIGh0KCRlKXtEKCJvbmRhdGEiKTt2YXIgTGU9Q2Uud3JpdGUoJGUpO0QoImRlc3Qud3JpdGUiLExlKSwhMT09PUxlJiYoKDE9PT1NZS5waXBlc0NvdW50JiZN''@;'; put 'put ''ZS5waXBlcz09PUNlfHxNZS5waXBlc0NvdW50PjEmJi0xIT09T2UoTWUucGlwZXMsQ2UpKSYmIVllJiYoRCgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixNZS5hd2FpdERyYWluKSxNZS5hd2FpdERyYWluKyspLHhlLnBhdXNlKCkpfWZ1bmN0aW9uIHZ0KCRlKXtEKCJvbmVycm9yIiwk''@;'; put 'put ''ZSksVWUoKSxDZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHZ0KSwwPT09byhDZSwiZXJyb3IiKSYmaGUoQ2UsJGUpfWZ1bmN0aW9uIFl0KCl7Q2UucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsdHQpLFVlKCl9ZnVuY3Rpb24gdHQoKXtEKCJvbmZpbmlzaCIpLENlLnJlbW92ZUxpc3RlbmVyKCJj''@;'; put 'put ''bG9zZSIsWXQpLFVlKCl9ZnVuY3Rpb24gVWUoKXtEKCJ1bnBpcGUiKSx4ZS51bnBpcGUoQ2UpfXJldHVybiB4ZS5vbigiZGF0YSIsaHQpLGZ1bmN0aW9uIG1lKENlLGtlLHhlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQ2UucHJlcGVuZExpc3RlbmVyKXJldHVybiBDZS5wcmVwZW5kTGlzdGVu''@;'; put 'put ''ZXIoa2UseGUpO0NlLl9ldmVudHMmJkNlLl9ldmVudHNba2VdP0FycmF5LmlzQXJyYXkoQ2UuX2V2ZW50c1trZV0pP0NlLl9ldmVudHNba2VdLnVuc2hpZnQoeGUpOkNlLl9ldmVudHNba2VdPVt4ZSxDZS5fZXZlbnRzW2tlXV06Q2Uub24oa2UseGUpfShDZSwiZXJyb3IiLHZ0KSxDZS5vbmNl''@;'; put 'put ''KCJjbG9zZSIsWXQpLENlLm9uY2UoImZpbmlzaCIsdHQpLENlLmVtaXQoInBpcGUiLHhlKSxNZS5mbG93aW5nfHwoRCgicGlwZSByZXN1bWUiKSx4ZS5yZXN1bWUoKSksQ2V9LFIucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihDZSl7dmFyIGtlPXRoaXMuX3JlYWRhYmxlU3RhdGUseGU9e2hh''@;'; put 'put ''c1VucGlwZWQ6ITF9O2lmKDA9PT1rZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1rZS5waXBlc0NvdW50KXJldHVybiBDZSYmQ2UhPT1rZS5waXBlc3x8KENlfHwoQ2U9a2UucGlwZXMpLGtlLnBpcGVzPW51bGwsa2UucGlwZXNDb3VudD0wLGtlLmZsb3dpbmc9ITEsQ2UmJkNlLmVt''@;'; put 'put ''aXQoInVucGlwZSIsdGhpcyx4ZSkpLHRoaXM7aWYoIUNlKXt2YXIgTWU9a2UucGlwZXMsSWU9a2UucGlwZXNDb3VudDtrZS5waXBlcz1udWxsLGtlLnBpcGVzQ291bnQ9MCxrZS5mbG93aW5nPSExO2Zvcih2YXIgYmU9MDtiZTxJZTtiZSsrKU1lW2JlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hh''@;'; put 'put ''c1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgd2U9T2Uoa2UucGlwZXMsQ2UpO3JldHVybi0xPT09d2V8fChrZS5waXBlcy5zcGxpY2Uod2UsMSksa2UucGlwZXNDb3VudC09MSwxPT09a2UucGlwZXNDb3VudCYmKGtlLnBpcGVzPWtlLnBpcGVzWzBdKSxDZS5lbWl0KCJ1bnBpcGUiLHRo''@;'; put 'put ''aXMseGUpKSx0aGlzfSxSLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1SLnByb3RvdHlwZS5vbj1mdW5jdGlvbihDZSxrZSl7dmFyIHhlPUkucHJvdG90eXBlLm9uLmNhbGwodGhpcyxDZSxrZSksTWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1DZT8oTWUucmVhZGFibGVMaXN0''@;'; put 'put ''ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1NZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09Q2UmJiFNZS5lbmRFbWl0dGVkJiYhTWUucmVhZGFibGVMaXN0ZW5pbmcmJihNZS5yZWFkYWJsZUxpc3RlbmluZz1NZS5uZWVkUmVhZGFibGU9''@;'; put 'put ''ITAsTWUuZmxvd2luZz0hMSxNZS5lbWl0dGVkUmVhZGFibGU9ITEsRCgib24gcmVhZGFibGUiLE1lLmxlbmd0aCxNZS5yZWFkaW5nKSxNZS5sZW5ndGg/eSh0aGlzKTpNZS5yZWFkaW5nfHxwcm9jZXNzLm5leHRUaWNrKHBlLHRoaXMpKSx4ZX0sUi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9''@;'; put 'put ''ZnVuY3Rpb24oQ2Usa2Upe3ZhciB4ZT1JLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsQ2Usa2UpO3JldHVybiJyZWFkYWJsZSI9PT1DZSYmcHJvY2Vzcy5uZXh0VGljayhRLHRoaXMpLHhlfSxSLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oQ2Upe3Zh''@;'; put 'put ''ciBrZT1JLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09Q2V8fHZvaWQgMD09PUNlKSYmcHJvY2Vzcy5uZXh0VGljayhRLHRoaXMpLGtlfSxSLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgQ2U9dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gQ2UuZmxvd2luZ3x8KEQoInJlc3VtZSIpLENlLmZsb3dpbmc9IUNlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIFBlKENlLGtlKXtrZS5yZXN1bWVTY2hlZHVsZWR8fChrZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhaZSxD''@;'; put 'put ''ZSxrZSkpfSh0aGlzLENlKSksQ2UucGF1c2VkPSExLHRoaXN9LFIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEQoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKEQo''@;'; put 'put ''InBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sUi5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihDZSl7dmFyIGtlPXRoaXMseGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxNZT0h''@;'; put 'put ''MTtmb3IodmFyIEllIGluIENlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoRCgid3JhcHBlZCBlbmQiKSx4ZS5kZWNvZGVyJiYheGUuZW5kZWQpe3ZhciB3ZT14ZS5kZWNvZGVyLmVuZCgpO3dlJiZ3ZS5sZW5ndGgmJmtlLnB1c2god2UpfWtlLnB1c2gobnVsbCl9KSxDZS5vbigiZGF0YSIsZnVu''@;'; put 'put ''Y3Rpb24od2Upe0QoIndyYXBwZWQgZGF0YSIpLHhlLmRlY29kZXImJih3ZT14ZS5kZWNvZGVyLndyaXRlKHdlKSkseGUub2JqZWN0TW9kZSYmbnVsbD09d2V8fCEoeGUub2JqZWN0TW9kZXx8d2UmJndlLmxlbmd0aCl8fGtlLnB1c2god2UpfHwoTWU9ITAsQ2UucGF1c2UoKSl9KSxDZSl2b2lk''@;'; put 'put ''IDA9PT10aGlzW0llXSYmImZ1bmN0aW9uIj09dHlwZW9mIENlW0llXSYmKHRoaXNbSWVdPWZ1bmN0aW9uKHB0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQ2VbcHRdLmFwcGx5KENlLGFyZ3VtZW50cyl9fShJZSkpO2Zvcih2YXIgYmU9MDtiZTxfZS5sZW5ndGg7YmUrKylDZS5vbihfZVti''@;'; put 'put ''ZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxfZVtiZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbih3ZSl7RCgid3JhcHBlZCBfcmVhZCIsd2UpLE1lJiYoTWU9ITEsQ2UucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUi5wcm90b3R5cGVbU3ltYm9sLmFz''@;'; put 'put ''eW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PW5lJiYobmU9ZCgxMjY4MykpLG5lKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUu''@;'; put 'put ''YnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oa2Upe3RoaXMuX3JlYWRhYmxlU3RhdGUm''@;'; put 'put ''Jih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9a2UpfX0pLFIuX2Zyb21MaXN0PXZlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0''@;'; put 'put ''aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUi5mcm9tPWZ1bmN0aW9uKENlLGtlKXtyZXR1cm4gdm9pZCAwPT09c2UmJihzZT1kKDQ3NzY1KSksc2UoUixDZSxrZSl9KX0sNDM0MTAodGUsaixkKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1NO3ZhciBTPWQoMzA0NjQpLkYsaD1T''@;'; put 'put ''LkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELG89Uy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssST1TLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsZj1TLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxUPWQoMTAzMCk7ZnVuY3Rpb24gQShFLEIpe3ZhciBGPXRoaXMuX3Ry''@;'; put 'put ''YW5zZm9ybVN0YXRlO0YudHJhbnNmb3JtaW5nPSExO3ZhciBOPUYud3JpdGVjYjtpZihudWxsPT09TilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IG8pO0Yud3JpdGVjaHVuaz1udWxsLEYud3JpdGVjYj1udWxsLG51bGwhPUImJnRoaXMucHVzaChCKSxOKEUpO3ZhciBIPXRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGU7SC5yZWFkaW5nPSExLChILm5lZWRSZWFkYWJsZXx8SC5sZW5ndGg8SC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChILmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIE0oRSl7aWYoISh0aGlzIGluc3RhbmNlb2YgTSkpcmV0dXJuIG5ldyBNKEUpO1QuY2FsbCh0aGlzLEUp''@;'; put 'put ''LHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpBLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxl''@;'; put 'put ''PSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxFJiYoImZ1bmN0aW9uIj09dHlwZW9mIEUudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUUudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgRS5mbHVzaCYmKHRoaXMuX2ZsdXNoPUUuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5p''@;'; put 'put ''c2giLE8pfWZ1bmN0aW9uIE8oKXt2YXIgRT10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/RCh0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oQixGKXtEKEUsQixGKX0pfWZ1bmN0aW9uIEQoRSxCLEYp''@;'; put 'put ''e2lmKEIpcmV0dXJuIEUuZW1pdCgiZXJyb3IiLEIpO2lmKG51bGwhPUYmJkUucHVzaChGKSxFLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgZjtpZihFLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEk7cmV0dXJuIEUucHVzaChudWxsKX1kKDcxOTkzKShN''@;'; put 'put ''LFQpLE0ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRSxCKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxULnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxFLEIpfSxNLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEUsQixGKXtGKG5ldyBoKCJfdHJh''@;'; put 'put ''bnNmb3JtKCkiKSl9LE0ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihFLEIsRil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPUYsTi53cml0ZWNodW5rPUUsTi53cml0ZWVuY29kaW5nPUIsIU4udHJhbnNmb3JtaW5nKXt2YXIgSD10aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''OyhOLm5lZWRUcmFuc2Zvcm18fEgubmVlZFJlYWRhYmxlfHxILmxlbmd0aDxILmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEguaGlnaFdhdGVyTWFyayl9fSxNLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihFKXt2YXIgQj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09Qi53cml0ZWNo''@;'; put 'put ''dW5rfHxCLnRyYW5zZm9ybWluZz9CLm5lZWRUcmFuc2Zvcm09ITA6KEIudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShCLndyaXRlY2h1bmssQi53cml0ZWVuY29kaW5nLEIuYWZ0ZXJUcmFuc2Zvcm0pKX0sTS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRSxCKXtULnByb3Rv''@;'; put 'put ''dHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsRSxmdW5jdGlvbihGKXtCKEYpfSl9fSwxNTQ5Mih0ZSxqLGQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoKHFlKXt2YXIgdmU9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24g''@;'; put 'put ''WmUocWUsdmUsdWUpe3ZhciB6ZT1xZS5lbnRyeTtmb3IocWUuZW50cnk9bnVsbDt6ZTspe3ZhciBPZT16ZS5jYWxsYmFjazt2ZS5wZW5kaW5nY2ItLSxPZSh1ZSksemU9emUubmV4dH12ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1xZX0odmUscWUpfX12YXIgbzt0ZS5leHBvcnRzPUZlLEZl''@;'; put 'put ''LldyaXRhYmxlU3RhdGU9X2U7dmFyIG1lLEk9e2RlcHJlY2F0ZTpkKDMzOTgpfSxmPWQoMTI2MDEpLFQ9ZCg4MzgzOCkuQnVmZmVyLEE9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8''@;'; put 'put ''fGZ1bmN0aW9uKCl7fSxEPWQoODgxNTIpLEI9ZCgyMjgyNykuZ2V0SGlnaFdhdGVyTWFyayxGPWQoMzA0NjQpLkYsTj1GLkVSUl9JTlZBTElEX0FSR19UWVBFLEg9Ri5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCx6PUYuRVJSX01VTFRJUExFX0NBTExCQUNLLFo9Ri5FUlJfU1RSRUFNX0NB''@;'; put 'put ''Tk5PVF9QSVBFLFU9Ri5FUlJfU1RSRUFNX0RFU1RST1lFRCxLPUYuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxYPUYuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsbmU9Ri5FUlJfVU5LTk9XTl9FTkNPRElORyxzZT1ELmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIGhlKCl7fWZ1bmN0aW9uIF9l''@;'; put 'put ''KHFlLHZlLHVlKXtvPW98fGQoMTAzMCksImJvb2xlYW4iIT10eXBlb2YgdWUmJih1ZT12ZSBpbnN0YW5jZW9mIG8pLHRoaXMub2JqZWN0TW9kZT0hIShxZT1xZXx8e30pLm9iamVjdE1vZGUsdWUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXFlLndyaXRhYmxlT2JqZWN0''@;'; put 'put ''TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPUIodGhpcyxxZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix1ZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEs''@;'; put 'put ''dGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1xZS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1xZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nl''@;'; put 'put ''c3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKE9lKXshZnVuY3Rpb24gTChxZSx2ZSl7dmFyIHVlPXFlLl93cml0YWJsZVN0YXRlLHplPXVlLnN5bmMsT2U9dWUud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgT2UpdGhyb3cgbmV3IHo7aWYoZnVuY3Rpb24gayhxZSl7cWUud3Jp''@;'; put 'put ''dGluZz0hMSxxZS53cml0ZWNiPW51bGwscWUubGVuZ3RoLT1xZS53cml0ZWxlbixxZS53cml0ZWxlbj0wfSh1ZSksdmUpIWZ1bmN0aW9uIF8ocWUsdmUsdWUsemUsT2Upey0tdmUucGVuZGluZ2NiLHVlPyhwcm9jZXNzLm5leHRUaWNrKE9lLHplKSxwcm9jZXNzLm5leHRUaWNrKHBlLHFlLHZl''@;'; put 'put ''KSxxZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsc2UocWUsemUpKTooT2UoemUpLHFlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxzZShxZSx6ZSkscGUocWUsdmUpKX0ocWUsdWUsemUsdmUsT2UpO2Vsc2V7dmFyIENlPXEodWUpfHxxZS5kZXN0cm95ZWQ7IUNlJiYh''@;'; put 'put ''dWUuY29ya2VkJiYhdWUuYnVmZmVyUHJvY2Vzc2luZyYmdWUuYnVmZmVyZWRSZXF1ZXN0JiZiKHFlLHVlKSx6ZT9wcm9jZXNzLm5leHRUaWNrKHkscWUsdWUsQ2UsT2UpOnkocWUsdWUsQ2UsT2UpfX0odmUsT2UpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZm''@;'; put 'put ''ZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1xZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIXFlLmF1dG9E''@;'; put 'put ''ZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgaCh0aGlzKX1mdW5jdGlvbiBGZShxZSl7dmFyIHZlPXRoaXMgaW5zdGFuY2VvZihvPW98fGQoMTAzMCkpO2lmKCF2ZSYmIW1lLmNhbGwoRmUsdGhpcykpcmV0dXJuIG5ldyBGZShx''@;'; put 'put ''ZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgX2UocWUsdGhpcyx2ZSksdGhpcy53cml0YWJsZT0hMCxxZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBxZS53cml0ZSYmKHRoaXMuX3dyaXRlPXFlLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgcWUud3JpdGV2JiYodGhpcy5fd3JpdGV2PXFlLndy''@;'; put 'put ''aXRldiksImZ1bmN0aW9uIj09dHlwZW9mIHFlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXFlLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBxZS5maW5hbCYmKHRoaXMuX2ZpbmFsPXFlLmZpbmFsKSksZi5jYWxsKHRoaXMpfWZ1bmN0aW9uIHAocWUsdmUsdWUsemUsT2UsQ2Usa2Upe3Zl''@;'; put 'put ''LndyaXRlbGVuPXplLHZlLndyaXRlY2I9a2UsdmUud3JpdGluZz0hMCx2ZS5zeW5jPSEwLHZlLmRlc3Ryb3llZD92ZS5vbndyaXRlKG5ldyBVKCJ3cml0ZSIpKTp1ZT9xZS5fd3JpdGV2KE9lLHZlLm9ud3JpdGUpOnFlLl93cml0ZShPZSxDZSx2ZS5vbndyaXRlKSx2ZS5zeW5jPSExfWZ1bmN0''@;'; put 'put ''aW9uIHkocWUsdmUsdWUsemUpe3VlfHxmdW5jdGlvbiBsKHFlLHZlKXswPT09dmUubGVuZ3RoJiZ2ZS5uZWVkRHJhaW4mJih2ZS5uZWVkRHJhaW49ITEscWUuZW1pdCgiZHJhaW4iKSl9KHFlLHZlKSx2ZS5wZW5kaW5nY2ItLSx6ZSgpLHBlKHFlLHZlKX1mdW5jdGlvbiBiKHFlLHZlKXt2ZS5i''@;'; put 'put ''dWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB1ZT12ZS5idWZmZXJlZFJlcXVlc3Q7aWYocWUuX3dyaXRldiYmdWUmJnVlLm5leHQpe3ZhciBPZT1uZXcgQXJyYXkodmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLENlPXZlLmNvcmtlZFJlcXVlc3RzRnJlZTtDZS5lbnRyeT11ZTtmb3IodmFyIGtlPTAs''@;'; put 'put ''eGU9ITA7dWU7KU9lW2tlXT11ZSx1ZS5pc0J1Znx8KHhlPSExKSx1ZT11ZS5uZXh0LGtlKz0xO09lLmFsbEJ1ZmZlcnM9eGUscChxZSx2ZSwhMCx2ZS5sZW5ndGgsT2UsIiIsQ2UuZmluaXNoKSx2ZS5wZW5kaW5nY2IrKyx2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsQ2UubmV4dD8odmUu''@;'; put 'put ''Y29ya2VkUmVxdWVzdHNGcmVlPUNlLm5leHQsQ2UubmV4dD1udWxsKTp2ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGgodmUpLHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3VlOyl7dmFyIE1lPXVlLmNodW5rO2lmKHAocWUsdmUsITEsdmUub2JqZWN0TW9kZT8xOk1lLmxl''@;'; put 'put ''bmd0aCxNZSx1ZS5lbmNvZGluZyx1ZS5jYWxsYmFjayksdWU9dWUubmV4dCx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHZlLndyaXRpbmcpYnJlYWt9bnVsbD09PXVlJiYodmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX12ZS5idWZmZXJlZFJlcXVlc3Q9dWUsdmUuYnVmZmVyUHJvY2Vz''@;'; put 'put ''c2luZz0hMX1mdW5jdGlvbiBxKHFlKXtyZXR1cm4gcWUuZW5kaW5nJiYwPT09cWUubGVuZ3RoJiZudWxsPT09cWUuYnVmZmVyZWRSZXF1ZXN0JiYhcWUuZmluaXNoZWQmJiFxZS53cml0aW5nfWZ1bmN0aW9uIEcocWUsdmUpe3FlLl9maW5hbChmdW5jdGlvbih1ZSl7dmUucGVuZGluZ2NiLS0s''@;'; put 'put ''dWUmJnNlKHFlLHVlKSx2ZS5wcmVmaW5pc2hlZD0hMCxxZS5lbWl0KCJwcmVmaW5pc2giKSxwZShxZSx2ZSl9KX1mdW5jdGlvbiBwZShxZSx2ZSl7dmFyIHVlPXEodmUpO2lmKHVlJiYoZnVuY3Rpb24gUShxZSx2ZSl7IXZlLnByZWZpbmlzaGVkJiYhdmUuZmluYWxDYWxsZWQmJigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgcWUuX2ZpbmFsfHx2ZS5kZXN0cm95ZWQ/KHZlLnByZWZpbmlzaGVkPSEwLHFlLmVtaXQoInByZWZpbmlzaCIpKToodmUucGVuZGluZ2NiKyssdmUuZmluYWxDYWxsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhHLHFlLHZlKSkpfShxZSx2ZSksMD09PXZlLnBlbmRpbmdjYiYm''@;'; put 'put ''KHZlLmZpbmlzaGVkPSEwLHFlLmVtaXQoImZpbmlzaCIpLHZlLmF1dG9EZXN0cm95KSkpe3ZhciB6ZT1xZS5fcmVhZGFibGVTdGF0ZTsoIXplfHx6ZS5hdXRvRGVzdHJveSYmemUuZW5kRW1pdHRlZCkmJnFlLmRlc3Ryb3koKX1yZXR1cm4gdWV9ZCg3MTk5MykoRmUsZiksX2UucHJvdG90eXBl''@;'; put 'put ''LmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgdmU9dGhpcy5idWZmZXJlZFJlcXVlc3QsdWU9W107dmU7KXVlLnB1c2godmUpLHZlPXZlLm5leHQ7cmV0dXJuIHVlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2UucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6SS5k''@;'; put 'put ''ZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8obWU9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEZlLFN5bWJvbC5oYXNJ''@;'; put 'put ''bnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odmUpe3JldHVybiEhbWUuY2FsbCh0aGlzLHZlKXx8dGhpcz09PUZlJiZ2ZSYmdmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBfZX19KSk6bWU9ZnVuY3Rpb24odmUpe3JldHVybiB2ZSBpbnN0YW5jZW9mIHRoaXN9LEZlLnByb3RvdHlwZS5waXBl''@;'; put 'put ''PWZ1bmN0aW9uKCl7c2UodGhpcyxuZXcgWil9LEZlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxZSx2ZSx1ZSl7dmFyIHplPXRoaXMuX3dyaXRhYmxlU3RhdGUsT2U9ITEsQ2U9IXplLm9iamVjdE1vZGUmJmZ1bmN0aW9uIE8ocWUpe3JldHVybiBULmlzQnVmZmVyKHFlKXx8cWUgaW5zdGFu''@;'; put 'put ''Y2VvZiBBfShxZSk7cmV0dXJuIENlJiYhVC5pc0J1ZmZlcihxZSkmJihxZT1mdW5jdGlvbiBNKHFlKXtyZXR1cm4gVC5mcm9tKHFlKX0ocWUpKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUmJih1ZT12ZSx2ZT1udWxsKSxDZT92ZT0iYnVmZmVyIjp2ZXx8KHZlPXplLmRlZmF1bHRFbmNvZGluZyks''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIHVlJiYodWU9aGUpLHplLmVuZGluZz9mdW5jdGlvbiBSKHFlLHZlKXt2YXIgdWU9bmV3IFg7c2UocWUsdWUpLHByb2Nlc3MubmV4dFRpY2sodmUsdWUpfSh0aGlzLHVlKTooQ2V8fGZ1bmN0aW9uIHMocWUsdmUsdWUsemUpe3ZhciBPZTtyZXR1cm4gbnVsbD09''@;'; put 'put ''PXVlP09lPW5ldyBLOiJzdHJpbmciIT10eXBlb2YgdWUmJiF2ZS5vYmplY3RNb2RlJiYoT2U9bmV3IE4oImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLHVlKSksIU9lfHwoc2UocWUsT2UpLHByb2Nlc3MubmV4dFRpY2soemUsT2UpLCExKX0odGhpcyx6ZSxxZSx1ZSkpJiYoemUucGVuZGlu''@;'; put 'put ''Z2NiKyssT2U9ZnVuY3Rpb24gdihxZSx2ZSx1ZSx6ZSxPZSxDZSl7aWYoIXVlKXt2YXIga2U9ZnVuY3Rpb24gdShxZSx2ZSx1ZSl7cmV0dXJuIXFlLm9iamVjdE1vZGUmJiExIT09cWUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB2ZSYmKHZlPVQuZnJvbSh2ZSx1ZSkpLHZlfSh2''@;'; put 'put ''ZSx6ZSxPZSk7emUhPT1rZSYmKHVlPSEwLE9lPSJidWZmZXIiLHplPWtlKX12YXIgeGU9dmUub2JqZWN0TW9kZT8xOnplLmxlbmd0aDt2ZS5sZW5ndGgrPXhlO3ZhciBNZT12ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFyaztpZihNZXx8KHZlLm5lZWREcmFpbj0hMCksdmUud3JpdGluZ3x8dmUu''@;'; put 'put ''Y29ya2VkKXt2YXIgSWU9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDt2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazp6ZSxlbmNvZGluZzpPZSxpc0J1Zjp1ZSxjYWxsYmFjazpDZSxuZXh0Om51bGx9LEllP0llLm5leHQ9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDp2ZS5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3Q9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdCx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIHAocWUsdmUsITEseGUsemUsT2UsQ2UpO3JldHVybiBNZX0odGhpcyx6ZSxDZSxxZSx2ZSx1ZSkpLE9lfSxGZS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuY29ya2VkKyt9LEZlLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgcWU9dGhpcy5fd3JpdGFibGVTdGF0ZTtxZS5jb3JrZWQmJihxZS5jb3JrZWQtLSwhcWUud3JpdGluZyYmIXFlLmNvcmtlZCYmIXFlLmJ1ZmZlclByb2Nlc3NpbmcmJnFlLmJ1ZmZlcmVkUmVxdWVzdCYmYih0''@;'; put 'put ''aGlzLHFlKSl9LEZlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe2lmKCJzdHJpbmciPT10eXBlb2YgdmUmJih2ZT12ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIi''@;'; put 'put ''LCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh2ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBuZSh2ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXZlLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGZS5wcm90b3R5''@;'; put 'put ''cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRmUucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRl''@;'; put 'put ''ck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksRmUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihxZSx2ZSx1ZSl7dWUobmV3IEgoIl93cml0ZSgpIikpfSxGZS5wcm90b3R5cGUuX3dyaXRldj1u''@;'; put 'put ''dWxsLEZlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24ocWUsdmUsdWUpe3ZhciB6ZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBxZT8odWU9cWUscWU9bnVsbCx2ZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgdmUmJih1ZT12ZSx2ZT1udWxsKSxudWxsIT1x''@;'; put 'put ''ZSYmdGhpcy53cml0ZShxZSx2ZSksemUuY29ya2VkJiYoemUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksemUuZW5kaW5nfHxmdW5jdGlvbiBQZShxZSx2ZSx1ZSl7dmUuZW5kaW5nPSEwLHBlKHFlLHZlKSx1ZSYmKHZlLmZpbmlzaGVkP3Byb2Nlc3MubmV4dFRpY2sodWUpOnFlLm9uY2UoImZp''@;'; put 'put ''bmlzaCIsdWUpKSx2ZS5lbmRlZD0hMCxxZS53cml0YWJsZT0hMX0odGhpcyx6ZSx1ZSksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEZlLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRl''@;'; put 'put ''Lmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRmUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0''@;'; put 'put ''aW9uKHZlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLEZlLnByb3RvdHlwZS5kZXN0cm95PUQuZGVzdHJveSxGZS5wcm90b3R5cGUuX3VuZGVzdHJveT1ELnVuZGVzdHJveSxGZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24o''@;'; put 'put ''cWUsdmUpe3ZlKHFlKX19LDEyNjgzKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTO2Z1bmN0aW9uIGgoWCxuZSxzZSl7cmV0dXJuIG5lPWZ1bmN0aW9uIG8oWCl7dmFyIG5lPWZ1bmN0aW9uIEkoWCxuZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBYfHxudWxsPT09WClyZXR1cm4gWDt2YXIgc2U9''@;'; put 'put ''WFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXNlKXt2YXIgaGU9c2UuY2FsbChYLG5lfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgaGUpcmV0dXJuIGhlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs''@;'; put 'put ''dWUuIil9cmV0dXJuKCJzdHJpbmciPT09bmU/U3RyaW5nOk51bWJlcikoWCl9KFgsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbmU/bmU6U3RyaW5nKG5lKX0obmUpLG5lIGluIFg/T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsbmUse3ZhbHVlOnNlLGVudW1lcmFibGU6ITAsY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6WFtuZV09c2UsWH12YXIgZj1kKDU3ODU0KSxUPVN5bWJvbCgibGFzdFJlc29sdmUiKSxBPVN5bWJvbCgibGFzdFJlamVjdCIpLE09U3ltYm9sKCJlcnJvciIpLE89U3ltYm9sKCJlbmRlZCIpLEQ9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEU9U3lt''@;'; put 'put ''Ym9sKCJoYW5kbGVQcm9taXNlIiksQj1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIEYoWCxuZSl7cmV0dXJue3ZhbHVlOlgsZG9uZTpuZX19ZnVuY3Rpb24gTihYKXt2YXIgbmU9WFtUXTtpZihudWxsIT09bmUpe3ZhciBzZT1YW0JdLnJlYWQoKTtudWxsIT09c2UmJihYW0RdPW51bGwsWFtU''@;'; put 'put ''XT1udWxsLFhbQV09bnVsbCxuZShGKHNlLCExKSkpfX1mdW5jdGlvbiBIKFgpe3Byb2Nlc3MubmV4dFRpY2soTixYKX12YXIgWj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxVPU9iamVjdC5zZXRQcm90b3R5cGVPZigoaChTPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNb''@;'; put 'put ''Ql19LG5leHQ6ZnVuY3Rpb24oKXt2YXIgbmU9dGhpcyxzZT10aGlzW01dO2lmKG51bGwhPT1zZSlyZXR1cm4gUHJvbWlzZS5yZWplY3Qoc2UpO2lmKHRoaXNbT10pcmV0dXJuIFByb21pc2UucmVzb2x2ZShGKHZvaWQgMCwhMCkpO2lmKHRoaXNbQl0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJv''@;'; put 'put ''bWlzZShmdW5jdGlvbihGZSxSKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7bmVbTV0/UihuZVtNXSk6RmUoRih2b2lkIDAsITApKX0pfSk7dmFyIF9lLGhlPXRoaXNbRF07aWYoaGUpX2U9bmV3IFByb21pc2UoZnVuY3Rpb24geihYLG5lKXtyZXR1cm4gZnVuY3Rpb24oc2UsaGUpe1gu''@;'; put 'put ''dGhlbihmdW5jdGlvbigpe25lW09dP3NlKEYodm9pZCAwLCEwKSk6bmVbRV0oc2UsaGUpfSxoZSl9fShoZSx0aGlzKSk7ZWxzZXt2YXIgbWU9dGhpc1tCXS5yZWFkKCk7aWYobnVsbCE9PW1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoRihtZSwhMSkpO19lPW5ldyBQcm9taXNlKHRoaXNbRV0p''@;'; put 'put ''fXJldHVybiB0aGlzW0RdPV9lLF9lfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGgoUywicmV0dXJuIixmdW5jdGlvbigpe3ZhciBuZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzZSxoZSl7bmVbQl0uZGVzdHJveShudWxsLGZ1bmN0''@;'; put 'put ''aW9uKF9lKXtfZT9oZShfZSk6c2UoRih2b2lkIDAsITApKX0pfSl9KSxTKSxaKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKG5lKXt2YXIgc2UsaGU9T2JqZWN0LmNyZWF0ZShVLChoKHNlPXt9LEIse3ZhbHVlOm5lLHdyaXRhYmxlOiEwfSksaChzZSxULHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSks''@;'; put 'put ''aChzZSxBLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaChzZSxNLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaChzZSxPLHt2YWx1ZTpuZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksaChzZSxFLHt2YWx1ZTpmdW5jdGlvbihtZSxGZSl7dmFyIFI9aGVbQl0u''@;'; put 'put ''cmVhZCgpO1I/KGhlW0RdPW51bGwsaGVbVF09bnVsbCxoZVtBXT1udWxsLG1lKEYoUiwhMSkpKTooaGVbVF09bWUsaGVbQV09RmUpfSx3cml0YWJsZTohMH0pLHNlKSk7cmV0dXJuIGhlW0RdPW51bGwsZihuZSxmdW5jdGlvbihfZSl7aWYoX2UmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9T''@;'; put 'put ''RSIhPT1fZS5jb2RlKXt2YXIgbWU9aGVbQV07cmV0dXJuIG51bGwhPT1tZSYmKGhlW0RdPW51bGwsaGVbVF09bnVsbCxoZVtBXT1udWxsLG1lKF9lKSksdm9pZChoZVtNXT1fZSl9dmFyIEZlPWhlW1RdO251bGwhPT1GZSYmKGhlW0RdPW51bGwsaGVbVF09bnVsbCxoZVtBXT1udWxsLEZlKEYo''@;'; put 'put ''dm9pZCAwLCEwKSkpLGhlW09dPSEwfSksbmUub24oInJlYWRhYmxlIixILmJpbmQobnVsbCxoZSkpLGhlfX0sNzUyMjUodGUsaixkKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUyhILHope3ZhciBaPU9iamVjdC5rZXlzKEgpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBV''@;'; put 'put ''PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoSCk7eiYmKFU9VS5maWx0ZXIoZnVuY3Rpb24oSyl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSCxLKS5lbnVtZXJhYmxlfSkpLFoucHVzaC5hcHBseShaLFUpfXJldHVybiBafWZ1bmN0aW9uIGgoSCl7Zm9yKHZh''@;'; put 'put ''ciB6PTE7ejxhcmd1bWVudHMubGVuZ3RoO3orKyl7dmFyIFo9bnVsbCE9YXJndW1lbnRzW3pdP2FyZ3VtZW50c1t6XTp7fTt6JTI/UyhPYmplY3QoWiksITApLmZvckVhY2goZnVuY3Rpb24oVSl7byhILFUsWltVXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydGllcyhILE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFopKTpTKE9iamVjdChaKSkuZm9yRWFjaChmdW5jdGlvbihVKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSCxVLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWixVKSl9KX1yZXR1cm4gSH1m''@;'; put 'put ''dW5jdGlvbiBvKEgseixaKXtyZXR1cm4oej1BKHopKWluIEg/T2JqZWN0LmRlZmluZVByb3BlcnR5KEgseix7dmFsdWU6WixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOkhbel09WixIfWZ1bmN0aW9uIGYoSCx6KXtmb3IodmFyIFo9MDtaPHoubGVuZ3RoO1or''@;'; put 'put ''Kyl7dmFyIFU9eltaXTtVLmVudW1lcmFibGU9VS5lbnVtZXJhYmxlfHwhMSxVLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gVSYmKFUud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILEEoVS5rZXkpLFUpfX1mdW5jdGlvbiBBKEgpe3ZhciB6PWZ1bmN0aW9uIE0oSCx6KXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIEh8fG51bGw9PT1IKXJldHVybiBIO3ZhciBaPUhbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1aKXt2YXIgVT1aLmNhbGwoSCx6fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4gVTt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXo/U3RyaW5nOk51bWJlcikoSCl9KEgsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Ygej96OlN0cmluZyh6KX12YXIgRD1kKDgzODM4KS5CdWZmZXIsQj1kKDYzNzc5''@;'; put 'put ''KS5pbnNwZWN0LEY9QiYmQi5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBOKEgseixaKXtELnByb3RvdHlwZS5jb3B5LmNhbGwoSCx6LFopfXRlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBIKCl7KGZ1bmN0aW9uIEkoSCx6KXtpZighKEggaW5zdGFuY2VvZiB6KSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsSCksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gVChILHosWil7eiYmZihILnByb3RvdHlwZSx6KSxaJiZmKEgsWiksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KEgsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KEgsW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKFope3ZhciBVPXtkYXRhOlosbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PVU6dGhpcy5oZWFkPVUsdGhpcy50YWlsPVUsKyt0aGlzLmxl''@;'; put 'put ''bmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKFope3ZhciBVPXtkYXRhOlosbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1VKSx0aGlzLmhlYWQ9VSwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9''@;'; put 'put ''PXRoaXMubGVuZ3RoKXt2YXIgWj10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLFp9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFp''@;'; put 'put ''bD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihaKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBVPXRoaXMuaGVhZCxLPSIiK1UuZGF0YTtVPVUubmV4dDspSys9WitVLmRhdGE7cmV0dXJuIEt9fSx7a2V5OiJjb25jYXQiLHZhbHVl''@;'; put 'put ''OmZ1bmN0aW9uKFope2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gRC5hbGxvYygwKTtmb3IodmFyIFU9RC5hbGxvY1Vuc2FmZShaPj4+MCksSz10aGlzLmhlYWQsWD0wO0s7KU4oSy5kYXRhLFUsWCksWCs9Sy5kYXRhLmxlbmd0aCxLPUsubmV4dDtyZXR1cm4gVX19LHtrZXk6ImNvbnN1bWUi''@;'; put 'put ''LHZhbHVlOmZ1bmN0aW9uKFosVSl7dmFyIEs7cmV0dXJuIFo8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhLPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsWiksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoWikpOks9Wj09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0''@;'; put 'put ''KCk6VT90aGlzLl9nZXRTdHJpbmcoWik6dGhpcy5fZ2V0QnVmZmVyKFopLEt9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihaKXt2YXIgVT10aGlzLmhlYWQsSz0xLFg9VS5kYXRh''@;'; put 'put ''O2ZvcihaLT1YLmxlbmd0aDtVPVUubmV4dDspe3ZhciBuZT1VLmRhdGEsc2U9Wj5uZS5sZW5ndGg/bmUubGVuZ3RoOlo7aWYoWCs9c2U9PT1uZS5sZW5ndGg/bmU6bmUuc2xpY2UoMCxaKSwwPT0oWi09c2UpKXtzZT09PW5lLmxlbmd0aD8oKytLLHRoaXMuaGVhZD1VLm5leHQ/VS5uZXh0OnRo''@;'; put 'put ''aXMudGFpbD1udWxsKToodGhpcy5oZWFkPVUsVS5kYXRhPW5lLnNsaWNlKHNlKSk7YnJlYWt9KytLfXJldHVybiB0aGlzLmxlbmd0aC09SyxYfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oWil7dmFyIFU9RC5hbGxvY1Vuc2FmZShaKSxLPXRoaXMuaGVhZCxYPTE7Zm9yKEsu''@;'; put 'put ''ZGF0YS5jb3B5KFUpLFotPUsuZGF0YS5sZW5ndGg7Sz1LLm5leHQ7KXt2YXIgbmU9Sy5kYXRhLHNlPVo+bmUubGVuZ3RoP25lLmxlbmd0aDpaO2lmKG5lLmNvcHkoVSxVLmxlbmd0aC1aLDAsc2UpLDA9PShaLT1zZSkpe3NlPT09bmUubGVuZ3RoPygrK1gsdGhpcy5oZWFkPUsubmV4dD9LLm5l''@;'; put 'put ''eHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9SyxLLmRhdGE9bmUuc2xpY2Uoc2UpKTticmVha30rK1h9cmV0dXJuIHRoaXMubGVuZ3RoLT1YLFV9fSx7a2V5OkYsdmFsdWU6ZnVuY3Rpb24oWixVKXtyZXR1cm4gQih0aGlzLGgoaCh7fSxVKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0''@;'; put 'put ''OiExfSkpfX1dKSxIfSgpfSw4ODE1Mih0ZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoZixUKXtvKGYsVCksUyhmKX1mdW5jdGlvbiBTKGYpe2YuX3dyaXRhYmxlU3RhdGUmJiFmLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8Zi5fcmVhZGFibGVTdGF0ZSYmIWYuX3JlYWRhYmxlU3RhdGUu''@;'; put 'put ''ZW1pdENsb3NlfHxmLmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gbyhmLFQpe2YuZW1pdCgiZXJyb3IiLFQpfXRlLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gaihmLFQpe3ZhciBBPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVk''@;'; put 'put ''fHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oVD9UKGYpOmYmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5u''@;'; put 'put ''ZXh0VGljayhvLHRoaXMsZikpOnByb2Nlc3MubmV4dFRpY2sobyx0aGlzLGYpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITAp''@;'; put 'put ''LHRoaXMuX2Rlc3Ryb3koZnx8bnVsbCxmdW5jdGlvbihEKXshVCYmRD9BLl93cml0YWJsZVN0YXRlP0EuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soUyxBKTooQS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhkLEEs''@;'; put 'put ''RCkpOnByb2Nlc3MubmV4dFRpY2soZCxBLEQpOlQ/KHByb2Nlc3MubmV4dFRpY2soUyxBKSxUKEQpKTpwcm9jZXNzLm5leHRUaWNrKFMsQSl9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIGgoKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9''@;'; put 'put ''ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uIEkoZixUKXt2YXIgQT1mLl9yZWFkYWJsZVN0YXRlLE09Zi5fd3JpdGFibGVTdGF0ZTtBJiZBLmF1dG9EZXN0cm95fHxNJiZNLmF1dG9EZXN0cm95P2YuZGVzdHJveShUKTpmLmVtaXQoImVycm9yIixUKX19fSw1''@;'; put 'put ''Nzg1NCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDMwNDY0KS5GLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIG8oKXt9dGUuZXhwb3J0cz1mdW5jdGlvbiBmKFQsQSxNKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQSlyZXR1cm4gZihULG51bGwsQSk7QXx8KEE9e30p''@;'; put 'put ''LE09ZnVuY3Rpb24gaChUKXt2YXIgQT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighQSl7QT0hMDtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxPPW5ldyBBcnJheShNKSxEPTA7RDxNO0QrKylPW0RdPWFyZ3VtZW50c1tEXTtULmFwcGx5KHRoaXMsTyl9fX0oTXx8byk7dmFyIE89QS5yZWFk''@;'; put 'put ''YWJsZXx8ITEhPT1BLnJlYWRhYmxlJiZULnJlYWRhYmxlLEQ9QS53cml0YWJsZXx8ITEhPT1BLndyaXRhYmxlJiZULndyaXRhYmxlLEU9ZnVuY3Rpb24oKXtULndyaXRhYmxlfHxGKCl9LEI9VC5fd3JpdGFibGVTdGF0ZSYmVC5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxGPWZ1bmN0aW9uKCl7''@;'; put 'put ''RD0hMSxCPSEwLE98fE0uY2FsbChUKX0sTj1ULl9yZWFkYWJsZVN0YXRlJiZULl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsSD1mdW5jdGlvbigpe089ITEsTj0hMCxEfHxNLmNhbGwoVCl9LHo9ZnVuY3Rpb24oWCl7TS5jYWxsKFQsWCl9LFo9ZnVuY3Rpb24oKXt2YXIgWDtyZXR1cm4gTyYm''@;'; put 'put ''IU4/KCghVC5fcmVhZGFibGVTdGF0ZXx8IVQuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoWD1uZXcgUyksTS5jYWxsKFQsWCkpOkQmJiFCPygoIVQuX3dyaXRhYmxlU3RhdGV8fCFULl93cml0YWJsZVN0YXRlLmVuZGVkKSYmKFg9bmV3IFMpLE0uY2FsbChULFgpKTp2b2lkIDB9LFU9ZnVuY3Rp''@;'; put 'put ''b24oKXtULnJlcS5vbigiZmluaXNoIixGKX07cmV0dXJuIGZ1bmN0aW9uIEkoVCl7cmV0dXJuIFQuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVC5hYm9ydH0oVCk/KFQub24oImNvbXBsZXRlIixGKSxULm9uKCJhYm9ydCIsWiksVC5yZXE/VSgpOlQub24oInJlcXVlc3QiLFUpKTpE''@;'; put 'put ''JiYhVC5fd3JpdGFibGVTdGF0ZSYmKFQub24oImVuZCIsRSksVC5vbigiY2xvc2UiLEUpKSxULm9uKCJlbmQiLEgpLFQub24oImZpbmlzaCIsRiksITEhPT1BLmVycm9yJiZULm9uKCJlcnJvciIseiksVC5vbigiY2xvc2UiLFopLGZ1bmN0aW9uKCl7VC5yZW1vdmVMaXN0ZW5lcigiY29tcGxl''@;'; put 'put ''dGUiLEYpLFQucmVtb3ZlTGlzdGVuZXIoImFib3J0IixaKSxULnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixVKSxULnJlcSYmVC5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsRiksVC5yZW1vdmVMaXN0ZW5lcigiZW5kIixFKSxULnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRSksVC5yZW1v''@;'; put 'put ''dmVMaXN0ZW5lcigiZmluaXNoIixGKSxULnJlbW92ZUxpc3RlbmVyKCJlbmQiLEgpLFQucmVtb3ZlTGlzdGVuZXIoImVycm9yIix6KSxULnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWil9fX0sNDc3NjUodGUpe3RlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxl''@;'; put 'put ''LmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sNjg0Nih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUyxvPWQoMzA0NjQpLkYsST1vLkVSUl9NSVNTSU5HX0FSR1MsZj1vLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIFQoRil7aWYoRil0aHJvdyBGfWZ1bmN0''@;'; put 'put ''aW9uIE8oRil7RigpfWZ1bmN0aW9uIEQoRixOKXtyZXR1cm4gRi5waXBlKE4pfXRlLmV4cG9ydHM9ZnVuY3Rpb24gQigpe2Zvcih2YXIgRj1hcmd1bWVudHMubGVuZ3RoLE49bmV3IEFycmF5KEYpLEg9MDtIPEY7SCsrKU5bSF09YXJndW1lbnRzW0hdO3ZhciB6PWZ1bmN0aW9uIEUoRil7cmV0''@;'; put 'put ''dXJuIEYubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9GLnBvcCgpOlR9KE4pO2lmKEFycmF5LmlzQXJyYXkoTlswXSkmJihOPU5bMF0pLE4ubGVuZ3RoPDIpdGhyb3cgbmV3IEkoInN0cmVhbXMiKTt2YXIgWixVPU4ubWFwKGZ1bmN0aW9uKEssWCl7dmFyIG5lPVg8''@;'; put 'put ''Ti5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gTShGLE4sSCx6KXt6PWZ1bmN0aW9uIGgoRil7dmFyIE49ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Tnx8KE49ITAsRi5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fSh6KTt2YXIgWj0hMTtGLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtaPSEwfSksdm9p''@;'; put 'put ''ZCAwPT09UyYmKFM9ZCg1Nzg1NCkpLFMoRix7cmVhZGFibGU6Tix3cml0YWJsZTpIfSxmdW5jdGlvbihLKXtpZihLKXJldHVybiB6KEspO1o9ITAseigpfSk7dmFyIFU9ITE7cmV0dXJuIGZ1bmN0aW9uKEspe2lmKCFaJiYhVSl7aWYoVT0hMCxmdW5jdGlvbiBBKEYpe3JldHVybiBGLnNldEhl''@;'; put 'put ''YWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIEYuYWJvcnR9KEYpKXJldHVybiBGLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEYuZGVzdHJveSlyZXR1cm4gRi5kZXN0cm95KCk7eihLfHxuZXcgZigicGlwZSIpKX19fShLLG5lLFg+MCxmdW5jdGlvbihoZSl7Wnx8KFo9aGUpLGhlJiZV''@;'; put 'put ''LmZvckVhY2goTyksIW5lJiYoVS5mb3JFYWNoKE8pLHooWikpfSl9KTtyZXR1cm4gTi5yZWR1Y2UoRCl9fSwyMjgyNyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDMwNDY0KS5GLkVSUl9JTlZBTElEX09QVF9WQUxVRTt0ZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9u''@;'; put 'put ''IG8oSSxmLFQsQSl7dmFyIE09ZnVuY3Rpb24gaChJLGYsVCl7cmV0dXJuIG51bGwhPUkuaGlnaFdhdGVyTWFyaz9JLmhpZ2hXYXRlck1hcms6Zj9JW1RdOm51bGx9KGYsQSxUKTtpZihudWxsIT1NKXtpZighaXNGaW5pdGUoTSl8fE1hdGguZmxvb3IoTSkhPT1NfHxNPDApdGhyb3cgbmV3IFMo''@;'; put 'put ''QT9UOiJoaWdoV2F0ZXJNYXJrIixNKTtyZXR1cm4gTWF0aC5mbG9vcihNKX1yZXR1cm4gSS5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LDEyNjAxKHRlLGosZCl7dGUuZXhwb3J0cz1kKDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDc4NDU0KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTQyNzIp''@;'; put 'put ''LkJ1ZmZlcixoPVMuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oVSl7c3dpdGNoKChVPSIiK1UpJiZVLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpj''@;'; put 'put ''YXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gZihVKXt2YXIgSztzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBJKFUpe3ZhciBLPWZ1bmN0aW9uIG8oVSl7aWYoIVUpcmV0dXJuInV0ZjgiO2Zvcih2''@;'; put 'put ''YXIgSzs7KXN3aXRjaChVKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2Fz''@;'; put 'put ''ZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gVTtkZWZhdWx0OmlmKEspcmV0dXJuO1U9KCIiK1UpLnRvTG93ZXJDYXNlKCksSz0hMH19KFUpO2lmKCJzdHJpbmciIT10eXBlb2YgSyYmKFMuaXNFbmNvZGluZz09PWh8fCFoKFUpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25v''@;'; put 'put ''d24gZW5jb2Rpbmc6ICIrVSk7cmV0dXJuIEt8fFV9KFUpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUIsdGhpcy5lbmQ9RixLPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PU8sSz00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Tix0aGlzLmVu''@;'; put 'put ''ZD1ILEs9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXosdm9pZCh0aGlzLmVuZD1aKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPVMuYWxsb2NVbnNhZmUoSyl9ZnVuY3Rpb24gVChVKXtyZXR1cm4gVTw9MTI3PzA6VT4+NT09Nj8yOlU+''@;'; put 'put ''PjQ9PTE0PzM6VT4+Mz09MzA/NDpVPj42PT0yPy0xOi0yfWZ1bmN0aW9uIE8oVSl7dmFyIEs9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxYPWZ1bmN0aW9uIE0oVSxLKXtpZigxMjghPSgxOTImS1swXSkpcmV0dXJuIFUubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihVLmxhc3ROZWVkPjEm''@;'; put 'put ''JksubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZLWzFdKSlyZXR1cm4gVS5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKFUubGFzdE5lZWQ+MiYmSy5sZW5ndGg+MiYmMTI4IT0oMTkyJktbMl0pKXJldHVybiBVLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLFUpO3JldHVybiB2b2lkIDAhPT1YP1g6''@;'; put 'put ''dGhpcy5sYXN0TmVlZDw9VS5sZW5ndGg/KFUuY29weSh0aGlzLmxhc3RDaGFyLEssMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihVLmNvcHkodGhpcy5sYXN0Q2hhcixLLDAsVS5sZW5ndGgpLHZvaWQodGhp''@;'; put 'put ''cy5sYXN0TmVlZC09VS5sZW5ndGgpKX1mdW5jdGlvbiBCKFUsSyl7aWYoKFUubGVuZ3RoLUspJTI9PTApe3ZhciBYPVUudG9TdHJpbmcoInV0ZjE2bGUiLEspO2lmKFgpe3ZhciBuZT1YLmNoYXJDb2RlQXQoWC5sZW5ndGgtMSk7aWYobmU+PTU1Mjk2JiZuZTw9NTYzMTkpcmV0dXJuIHRoaXMu''@;'; put 'put ''bGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09VVtVLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPVVbVS5sZW5ndGgtMV0sWC5zbGljZSgwLC0xKX1yZXR1cm4gWH1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hh''@;'; put 'put ''clswXT1VW1UubGVuZ3RoLTFdLFUudG9TdHJpbmcoInV0ZjE2bGUiLEssVS5sZW5ndGgtMSl9ZnVuY3Rpb24gRihVKXt2YXIgSz1VJiZVLmxlbmd0aD90aGlzLndyaXRlKFUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP0srdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlz''@;'; put 'put ''Lmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpLfWZ1bmN0aW9uIE4oVSxLKXt2YXIgWD0oVS5sZW5ndGgtSyklMztyZXR1cm4gMD09PVg/VS50b1N0cmluZygiYmFzZTY0IixLKToodGhpcy5sYXN0TmVlZD0zLVgsdGhpcy5sYXN0VG90YWw9MywxPT09WD90aGlzLmxhc3RDaGFyWzBdPVVbVS5s''@;'; put 'put ''ZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09VVtVLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPVVbVS5sZW5ndGgtMV0pLFUudG9TdHJpbmcoImJhc2U2NCIsSyxVLmxlbmd0aC1YKSl9ZnVuY3Rpb24gSChVKXt2YXIgSz1VJiZVLmxlbmd0aD90aGlzLndyaXRlKFUpOiIiO3JldHVybiB0''@;'; put 'put ''aGlzLmxhc3ROZWVkP0srdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6S31mdW5jdGlvbiB6KFUpe3JldHVybiBVLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIFooVSl7cmV0dXJuIFUmJlUubGVuZ3RoP3RoaXMud3JpdGUoVSk6IiJ9''@;'; put 'put ''ai5JPWYsZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oVSl7aWYoMD09PVUubGVuZ3RoKXJldHVybiIiO3ZhciBLLFg7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KEs9dGhpcy5maWxsTGFzdChVKSkpcmV0dXJuIiI7WD10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNl''@;'; put 'put ''IFg9MDtyZXR1cm4gWDxVLmxlbmd0aD9LP0srdGhpcy50ZXh0KFUsWCk6dGhpcy50ZXh0KFUsWCk6S3x8IiJ9LGYucHJvdG90eXBlLmVuZD1mdW5jdGlvbiBFKFUpe3ZhciBLPVUmJlUubGVuZ3RoP3RoaXMud3JpdGUoVSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/SysiXHVmZmZkIjpLfSxm''@;'; put 'put ''LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIEQoVSxLKXt2YXIgWD1mdW5jdGlvbiBBKFUsSyxYKXt2YXIgbmU9Sy5sZW5ndGgtMTtpZihuZTxYKXJldHVybiAwO3ZhciBzZT1UKEtbbmVdKTtyZXR1cm4gc2U+PTA/KHNlPjAmJihVLmxhc3ROZWVkPXNlLTEpLHNlKTotLW5lPFh8fC0yPT09c2U/''@;'; put 'put ''MDooc2U9VChLW25lXSkpPj0wPyhzZT4wJiYoVS5sYXN0TmVlZD1zZS0yKSxzZSk6LS1uZTxYfHwtMj09PXNlPzA6KHNlPVQoS1tuZV0pKT49MD8oc2U+MCYmKDI9PT1zZT9zZT0wOlUubGFzdE5lZWQ9c2UtMyksc2UpOjB9KHRoaXMsVSxLKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gVS50''@;'; put 'put ''b1N0cmluZygidXRmOCIsSyk7dGhpcy5sYXN0VG90YWw9WDt2YXIgbmU9VS5sZW5ndGgtKFgtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIFUuY29weSh0aGlzLmxhc3RDaGFyLDAsbmUpLFUudG9TdHJpbmcoInV0ZjgiLEssbmUpfSxmLnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihVKXtpZih0''@;'; put 'put ''aGlzLmxhc3ROZWVkPD1VLmxlbmd0aClyZXR1cm4gVS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtVLmNvcHkodGhpcy5s''@;'; put 'put ''YXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsVS5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPVUubGVuZ3RofX0sNTQyNzIodGUsaixkKXt2YXIgUz1kKDgzODM4KSxoPVMuQnVmZmVyO2Z1bmN0aW9uIG8oZixUKXtmb3IodmFyIEEgaW4gZilUW0FdPWZbQV19ZnVuY3Rpb24g''@;'; put 'put ''SShmLFQsQSl7cmV0dXJuIGgoZixULEEpfWguZnJvbSYmaC5hbGxvYyYmaC5hbGxvY1Vuc2FmZSYmaC5hbGxvY1Vuc2FmZVNsb3c/dGUuZXhwb3J0cz1TOihvKFMsaiksai5CdWZmZXI9SSksbyhoLEkpLEkuZnJvbT1mdW5jdGlvbihmLFQsQSl7aWYoIm51bWJlciI9PXR5cGVvZiBmKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGgoZixULEEpfSxJLmFsbG9jPWZ1bmN0aW9uKGYsVCxBKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBN''@;'; put 'put ''PWgoZik7cmV0dXJuIHZvaWQgMCE9PVQ/InN0cmluZyI9PXR5cGVvZiBBP00uZmlsbChULEEpOk0uZmlsbChUKTpNLmZpbGwoMCksTX0sSS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBh''@;'; put 'put ''IG51bWJlciIpO3JldHVybiBoKGYpfSxJLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihmKXtpZigibnVtYmVyIiE9dHlwZW9mIGYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBTLlNsb3dCdWZmZXIoZil9fSw3ODc1NSh0ZSxqLGQpe3Zh''@;'; put 'put ''ciBTPWQoNjQzMTgpO3RlLmV4cG9ydHM9e1RleHRFbmNvZGVyOlMuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6Uy5UZXh0RGVjb2Rlcn19LDY3OTUxKHRlKXshZnVuY3Rpb24oail7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHMmJih0ZS5leHBvcnRzPWopLGpbImVuY29kaW5nLWluZGV4ZXMiXT17''@;'; put 'put ''YmlnNTpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIsMTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYwMzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMs''@;'; put 'put ''MTUyNTMsMTgyMzAsMTgyNDQsMTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwyOTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYx''@;'; put 'put ''ODksMjIyNjcsbnVsbCwzMjE0OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYyNzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQsMjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4''@;'; put 'put ''LDE1MzgyMiwxNTA5MywzMTQ4NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwxMzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMx''@;'; put 'put ''Mjc2LDIxMDcxLDM2OTM0LDEzNTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywyMjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMsMzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQw''@;'; put 'put ''NDkyLDQwOTA1LDM0MDUyLDE0NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUsMjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMxMjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEyNzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0Niwx''@;'; put 'put ''Mjc0NywxMjc0OCwxMzEzNDIsMTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIsMjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2''@;'; put 'put ''LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDE3Mjk2OSwxMzU0OTMsbnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgzODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwyMTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwy''@;'; put 'put ''MjI0MiwyMjc2OCwyMjc4OCwyMjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwyMzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4MiwyODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQw''@;'; put 'put ''MiwzMzQ4NywzMzY0NywzNTI3MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcxOCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxudWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwz''@;'; put 'put ''MjkyNyw0MDY0NywxOTY2MSw0MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUsMzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3''@;'; put 'put ''LDIwMDk2LDIwMTAzLDIwMTU5LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIxMjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIx''@;'; put 'put ''NDQyLDIxNTM5LDEzNjc3LDEzNjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIxNjg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEzNzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0''@;'; put 'put ''MjUzNCwxNDgyOCwxMzE5MDUsMzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQwMzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIxLDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQxMiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwx''@;'; put 'put ''NDI1MDUsMTY0NDM4LDE0ODY5MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMwMiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTcz''@;'; put 'put ''MSwxNDI2NjgsMTQyMjgyLDEzNTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkxMyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwyMjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5''@;'; put 'put ''OSwxMzQ5ODgsMTM0NTUwLDIxODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQxOTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTczNTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4''@;'; put 'put ''LDE0NTg1OCwxNDczOCwxNDg1NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2MywyMjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxsLDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTks''@;'; put 'put ''MTM1Mzc1LDE0MTMxNSwxNDE2MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMsMTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywxMzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUsMTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYx''@;'; put 'put ''MzM3LDE0MjI4NiwxMzQ1MjYsMTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwzODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxsLDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4''@;'; put 'put ''OTkyLDMzMTMzLDMzMDA0LDIzNTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0MywxNjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwxMzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEzNTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0''@;'; put 'put ''MzU5LDEzNjI3NywxMzQ3NzcsMTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEzNDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEzNTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3''@;'; put 'put ''ODMxLDE2NDQ3NiwyMjY4MSwyMTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAsMTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAxMSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4NiwxMzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1''@;'; put 'put ''NSwxMzYzMCwyMzU4NywyNDQwMSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUxNCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEwMzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgw''@;'; put 'put ''MzMsMjEzNDEsMzQ5MTYsMzUyNjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2NywxN2U0LDQwMDYwLDQwNDc5LDQwNjQ0LDI3NTAzLDYzNzUxLDIwMDIzLDEzMTIwNywzODQyOSwyNTE0MywzODA1''@;'; put 'put ''MCxudWxsLDIwNTM5LDI4MTU4LDE3MTEyMyw0MDg3MCwxNTgxNywzNDk1OSwxNDc3OTAsMjg3OTEsMjM3OTcsMTkyMzIsMTUyMDEzLDEzNjU3LDE1NDkyOCwyNDg2NiwxNjY0NTAsMzY3NzUsMzczNjYsMjkwNzMsMjYzOTMsMjk2MjYsMTQ0MDAxLDE3MjI5NSwxNTQ5OSwxMzc2MDAsMTkyMTYs''@;'; put 'put ''MzA5NDgsMjk2OTgsMjA5MTAsMTY1NjQ3LDE2MzkzLDI3MjM1LDE3MjczMCwxNjkzMSwzNDMxOSwxMzM3NDMsMzEyNzQsMTcwMzExLDE2NjYzNCwzODc0MSwyODc0OSwyMTI4NCwxMzkzOTAsMzc4NzYsMzA0MjUsMTY2MzcxLDQwODcxLDMwNjg1LDIwMTMxLDIwNDY0LDIwNjY4LDIwMDE1LDIw''@;'; put 'put ''MjQ3LDQwODcyLDIxNTU2LDMyMTM5LDIyNjc0LDIyNzM2LDEzODY3OCwyNDIxMCwyNDIxNywyNDUxNCwxNDEwNzQsMjU5OTUsMTQ0Mzc3LDI2OTA1LDI3MjAzLDE0NjUzMSwyNzkwMyxudWxsLDI5MTg0LDE0ODc0MSwyOTU4MCwxNjA5MSwxNTAwMzUsMjMzMTcsMjk4ODEsMzU3MTUsMTU0Nzg4''@;'; put 'put ''LDE1MzIzNywzMTM3OSwzMTcyNCwzMTkzOSwzMjM2NCwzMzUyOCwzNDE5OSw0MDg3MywzNDk2MCw0MDg3NCwzNjUzNyw0MDg3NSwzNjgxNSwzNDE0MywzOTM5MiwzNzQwOSw0MDg3NiwxNjczNTMsMTM2MjU1LDE2NDk3LDE3MDU4LDIzMDY2LG51bGwsbnVsbCxudWxsLDM5MDE2LDI2NDc1LDE3''@;'; put 'put ''MDE0LDIyMzMzLG51bGwsMzQyNjIsMTQ5ODgzLDMzNDcxLDE2MDAxMywxOTU4NSwxNTkwOTIsMjM5MzEsMTU4NDg1LDE1OTY3OCw0MDg3Nyw0MDg3OCwyMzQ0Niw0MDg3OSwyNjM0MywzMjM0NywyODI0NywzMTE3OCwxNTc1MiwxNzYwMywxNDM5NTgsMTQxMjA2LDE3MzA2LDE3NzE4LG51bGws''@;'; put 'put ''MjM3NjUsMTQ2MjAyLDM1NTc3LDIzNjcyLDE1NjM0LDE0NDcyMSwyMzkyOCw0MDg4MiwyOTAxNSwxNzc1MiwxNDc2OTIsMTM4Nzg3LDE5NTc1LDE0NzEyLDEzMzg2LDEzMTQ5MiwxNTg3ODUsMzU1MzIsMjA0MDQsMTMxNjQxLDIyOTc1LDMzMTMyLDM4OTk4LDE3MDIzNCwyNDM3OSwxMzQwNDcs''@;'; put 'put ''bnVsbCwxMzk3MTMsMTY2MjUzLDE2NjQyLDE4MTA3LDE2ODA1NywxNjEzNSw0MDg4MywxNzI0NjksMTY2MzIsMTQyOTQsMTgxNjcsMTU4NzkwLDE2NzY0LDE2NTU1NCwxNjA3NjcsMTc3NzMsMTQ1NDgsMTUyNzMwLDE3NzYxLDE3NjkxLDE5ODQ5LDE5NTc5LDE5ODMwLDE3ODk4LDE2MzI4LDE1''@;'; put 'put ''MDI4NywxMzkyMSwxNzYzMCwxNzU5NywxNjg3NywyMzg3MCwyMzg4MCwyMzg5NCwxNTg2OCwxNDM1MSwyMzk3MiwyMzk5MywxNDM2OCwxNDM5MiwyNDEzMCwyNDI1MywyNDM1NywyNDQ1MSwxNDYwMCwxNDYxMiwxNDY1NSwxNDY2OSwyNDc5MSwyNDg5MywyMzc4MSwxNDcyOSwyNTAxNSwyNTAx''@;'; put 'put ''NywyNTAzOSwxNDc3NiwyNTEzMiwyNTIzMiwyNTMxNywyNTM2OCwxNDg0MCwyMjE5MywxNDg1MSwyNTU3MCwyNTU5NSwyNTYwNywyNTY5MCwxNDkyMywyNTc5MiwyMzgyOSwyMjA0OSw0MDg2MywxNDk5OSwyNTk5MCwxNTAzNywyNjExMSwyNjE5NSwxNTA5MCwyNjI1OCwxNTEzOCwyNjM5MCwx''@;'; put 'put ''NTE3MCwyNjUzMiwyNjYyNCwxNTE5MiwyNjY5OCwyNjc1NiwxNTIxOCwxNTIxNywxNTIyNywyNjg4OSwyNjk0NywyOTI3NiwyNjk4MCwyNzAzOSwyNzAxMywxNTI5MiwyNzA5NCwxNTMyNSwyNzIzNywyNzI1MiwyNzI0OSwyNzI2NiwxNTM0MCwyNzI4OSwxNTM0NiwyNzMwNywyNzMxNywyNzM0''@;'; put 'put ''OCwyNzM4MiwyNzUyMSwyNzU4NSwyNzYyNiwyNzc2NSwyNzgxOCwxNTU2MywyNzkwNiwyNzkxMCwyNzk0MiwyODAzMywxNTU5OSwyODA2OCwyODA4MSwyODE4MSwyODE4NCwyODIwMSwyODI5NCwxNjYzMzYsMjgzNDcsMjgzODYsMjgzNzgsNDA4MzEsMjgzOTIsMjgzOTMsMjg0NTIsMjg0Njgs''@;'; put 'put ''MTU2ODYsMTQ3MjY1LDI4NTQ1LDI4NjA2LDE1NzIyLDE1NzMzLDI5MTExLDIzNzA1LDE1NzU0LDI4NzE2LDE1NzYxLDI4NzUyLDI4NzU2LDI4NzgzLDI4Nzk5LDI4ODA5LDEzMTg3NywxNzM0NSwxMzgwOSwxMzQ4NzIsMTQ3MTU5LDIyNDYyLDE1OTQ0MywyODk5MCwxNTM1NjgsMTM5MDIsMjcw''@;'; put 'put ''NDIsMTY2ODg5LDIzNDEyLDMxMzA1LDE1MzgyNSwxNjkxNzcsMzEzMzMsMzEzNTcsMTU0MDI4LDMxNDE5LDMxNDA4LDMxNDI2LDMxNDI3LDI5MTM3LDE1NjgxMywxNjg0MiwzMTQ1MCwzMTQ1MywzMTQ2NiwxNjg3OSwyMTY4MiwxNTQ2MjUsMzE0OTksMzE1NzMsMzE1MjksMTUyMzM0LDE1NDg3''@;'; put 'put ''OCwzMTY1MCwzMTU5OSwzMzY5MiwxNTQ1NDgsMTU4ODQ3LDMxNjk2LDMzODI1LDMxNjM0LDMxNjcyLDE1NDkxMiwxNTc4OSwxNTQ3MjUsMzM5MzgsMzE3MzgsMzE3NTAsMzE3OTcsMTU0ODE3LDMxODEyLDMxODc1LDE0OTYzNCwzMTkxMCwyNjIzNywxNDg4NTYsMzE5NDUsMzE5NDMsMzE5NzQs''@;'; put 'put ''MzE4NjAsMzE5ODcsMzE5ODksMzE5NTAsMzIzNTksMTc2OTMsMTU5MzAwLDMyMDkzLDE1OTQ0NiwyOTgzNywzMjEzNywzMjE3MSwyODk4MSwzMjE3OSwzMjIxMCwxNDc1NDMsMTU1Njg5LDMyMjI4LDE1NjM1LDMyMjQ1LDEzNzIwOSwzMjIyOSwxNjQ3MTcsMzIyODUsMTU1OTM3LDE1NTk5NCwz''@;'; put 'put ''MjM2NiwzMjQwMiwxNzE5NSwzNzk5NiwzMjI5NSwzMjU3NiwzMjU3NywzMjU4MywzMTAzMCwxNTYzNjgsMzkzOTMsMzI2NjMsMTU2NDk3LDMyNjc1LDEzNjgwMSwxMzExNzYsMTc3NTYsMTQ1MjU0LDE3NjY3LDE2NDY2NiwzMjc2MiwxNTY4MDksMzI3NzMsMzI3NzYsMzI3OTcsMzI4MDgsMzI4''@;'; put 'put ''MTUsMTcyMTY3LDE1ODkxNSwzMjgyNywzMjgyOCwzMjg2NSwxNDEwNzYsMTg4MjUsMTU3MjIyLDE0NjkxNSwxNTc0MTYsMjY0MDUsMzI5MzUsMTY2NDcyLDMzMDMxLDMzMDUwLDIyNzA0LDE0MTA0NiwyNzc3NSwxNTY4MjQsMTUxNDgwLDI1ODMxLDEzNjMzMCwzMzMwNCwxMzczMTAsMjcyMTks''@;'; put 'put ''MTUwMTE3LDE1MDE2NSwxNzUzMCwzMzMyMSwxMzM5MDEsMTU4MjkwLDE0NjgxNCwyMDQ3MywxMzY0NDUsMzQwMTgsMzM2MzQsMTU4NDc0LDE0OTkyNywxNDQ2ODgsMTM3MDc1LDE0NjkzNiwzMzQ1MCwyNjkwNywxOTQ5NjQsMTY4NTksMzQxMjMsMzM0ODgsMzM1NjIsMTM0Njc4LDEzNzE0MCwx''@;'; put 'put ''NDAxNywxNDM3NDEsMTQ0NzMwLDMzNDAzLDMzNTA2LDMzNTYwLDE0NzA4MywxNTkxMzksMTU4NDY5LDE1ODYxNSwxNDQ4NDYsMTU4MDcsMzM1NjUsMjE5OTYsMzM2NjksMTc2NzUsMTU5MTQxLDMzNzA4LDMzNzI5LDMzNzQ3LDEzNDM4LDE1OTQ0NCwyNzIyMywzNDEzOCwxMzQ2MiwxNTkyOTgs''@;'; put 'put ''MTQzMDg3LDMzODgwLDE1NDU5NiwzMzkwNSwxNTgyNywxNzYzNiwyNzMwMywzMzg2NiwxNDY2MTMsMzEwNjQsMzM5NjAsMTU4NjE0LDE1OTM1MSwxNTkyOTksMzQwMTQsMzM4MDcsMzM2ODEsMTc1NjgsMzM5MzksMzQwMjAsMTU0NzY5LDE2OTYwLDE1NDgxNiwxNzczMSwzNDEwMCwyMzI4Miwx''@;'; put 'put ''NTkzODUsMTc3MDMsMzQxNjMsMTc2ODYsMjY1NTksMzQzMjYsMTY1NDEzLDE2NTQzNSwzNDI0MSwxNTk4ODAsMzQzMDYsMTM2NTc4LDE1OTk0OSwxOTQ5OTQsMTc3NzAsMzQzNDQsMTM4OTYsMTM3Mzc4LDIxNDk1LDE2MDY2NiwzNDQzMCwzNDY3MywxNzIyODAsMzQ3OTgsMTQyMzc1LDM0NzM3''@;'; put 'put ''LDM0Nzc4LDM0ODMxLDIyMTEzLDM0NDEyLDI2NzEwLDE3OTM1LDM0ODg1LDM0ODg2LDE2MTI0OCwxNDY4NzMsMTYxMjUyLDM0OTEwLDM0OTcyLDE4MDExLDM0OTk2LDM0OTk3LDI1NTM3LDM1MDEzLDMwNTgzLDE2MTU1MSwzNTIwNywzNTIxMCwzNTIzOCwzNTI0MSwzNTIzOSwzNTI2MCwxNjY0''@;'; put 'put ''MzcsMzUzMDMsMTYyMDg0LDE2MjQ5MywzNTQ4NCwzMDYxMSwzNzM3NCwzNTQ3MiwxNjIzOTMsMzE0NjUsMTYyNjE4LDE0NzM0MywxODE5NSwxNjI2MTYsMjkwNTIsMzU1OTYsMzU2MTUsMTUyNjI0LDE1MjkzMywzNTY0NywzNTY2MCwzNTY2MSwzNTQ5NywxNTAxMzgsMzU3MjgsMzU3MzksMzU1''@;'; put 'put ''MDMsMTM2OTI3LDE3OTQxLDM0ODk1LDM1OTk1LDE2MzE1NiwxNjMyMTUsMTk1MDI4LDE0MTE3LDE2MzE1NSwzNjA1NCwxNjMyMjQsMTYzMjYxLDM2MTE0LDM2MDk5LDEzNzQ4OCwzNjA1OSwyODc2NCwzNjExMywxNTA3MjksMTYwODAsMzYyMTUsMzYyNjUsMTYzODQyLDEzNTE4OCwxNDk4OTgs''@;'; put 'put ''MTUyMjgsMTY0Mjg0LDE2MDAxMiwzMTQ2MywzNjUyNSwzNjUzNCwzNjU0NywzNzU4OCwzNjYzMywzNjY1MywxNjQ3MDksMTY0ODgyLDM2NzczLDM3NjM1LDE3MjcwMywxMzM3MTIsMzY3ODcsMTg3MzAsMTY2MzY2LDE2NTE4MSwxNDY4NzUsMjQzMTIsMTQzOTcwLDM2ODU3LDE3MjA1MiwxNjU1''@;'; put 'put ''NjQsMTY1MTIxLDE0MDA2OSwxNDcyMCwxNTk0NDcsMzY5MTksMTY1MTgwLDE2MjQ5NCwzNjk2MSwxNjUyMjgsMTY1Mzg3LDM3MDMyLDE2NTY1MSwzNzA2MCwxNjU2MDYsMzcwMzgsMzcxMTcsMzcyMjMsMTUwODgsMzcyODksMzczMTYsMzE5MTYsMTY2MTk1LDEzODg4OSwzNzM5MCwyNzgwNywz''@;'; put 'put ''NzQ0MSwzNzQ3NCwxNTMwMTcsMzc1NjEsMTY2NTk4LDE0NjU4NywxNjY2NjgsMTUzMDUxLDEzNDQ0OSwzNzY3NiwzNzczOSwxNjY2MjUsMTY2ODkxLDI4ODE1LDIzMjM1LDE2NjYyNiwxNjY2MjksMTg3ODksMzc0NDQsMTY2ODkyLDE2Njk2OSwxNjY5MTEsMzc3NDcsMzc5NzksMzY1NDAsMzgy''@;'; put 'put ''NzcsMzgzMTAsMzc5MjYsMzgzMDQsMjg2NjIsMTcwODEsMTQwOTIyLDE2NTU5MiwxMzU4MDQsMTQ2OTkwLDE4OTExLDI3Njc2LDM4NTIzLDM4NTUwLDE2NzQ4LDM4NTYzLDE1OTQ0NSwyNTA1MCwzODU4MiwzMDk2NSwxNjY2MjQsMzg1ODksMjE0NTIsMTg4NDksMTU4OTA0LDEzMTcwMCwxNTY2''@;'; put 'put ''ODgsMTY4MTExLDE2ODE2NSwxNTAyMjUsMTM3NDkzLDE0NDEzOCwzODcwNSwzNDM3MCwzODcxMCwxODk1OSwxNzcyNSwxNzc5NywxNTAyNDksMjg3ODksMjMzNjEsMzg2ODMsMzg3NDgsMTY4NDA1LDM4NzQzLDIzMzcwLDE2ODQyNywzODc1MSwzNzkyNSwyMDY4OCwxNDM1NDMsMTQzNTQ4LDM4''@;'; put 'put ''NzkzLDM4ODE1LDM4ODMzLDM4ODQ2LDM4ODQ4LDM4ODY2LDM4ODgwLDE1MjY4NCwzODg5NCwyOTcyNCwxNjkwMTEsMzg5MTEsMzg5MDEsMTY4OTg5LDE2MjE3MCwxOTE1MywzODk2NCwzODk2MywzODk4NywzOTAxNCwxNTExOCwxNjAxMTcsMTU2OTcsMTMyNjU2LDE0NzgwNCwxNTMzNTAsMzkx''@;'; put 'put ''MTQsMzkwOTUsMzkxMTIsMzkxMTEsMTkxOTksMTU5MDE1LDEzNjkxNSwyMTkzNiwzOTEzNywzOTE0MiwzOTE0OCwzNzc1MiwzOTIyNSwxNTAwNTcsMTkzMTQsMTcwMDcxLDE3MDI0NSwzOTQxMywzOTQzNiwzOTQ4MywzOTQ0MCwzOTUxMiwxNTMzODEsMTQwMjAsMTY4MTEzLDE3MDk2NSwzOTY0''@;'; put 'put ''OCwzOTY1MCwxNzA3NTcsMzk2NjgsMTk0NzAsMzk3MDAsMzk3MjUsMTY1Mzc2LDIwNTMyLDM5NzMyLDE1ODEyMCwxNDUzMSwxNDM0ODUsMzk3NjAsMzk3NDQsMTcxMzI2LDIzMTA5LDEzNzMxNSwzOTgyMiwxNDgwNDMsMzk5MzgsMzk5MzUsMzk5NDgsMTcxNjI0LDQwNDA0LDE3MTk1OSwxNzI0''@;'; put 'put ''MzQsMTcyNDU5LDE3MjI1NywxNzIzMjMsMTcyNTExLDQwMzE4LDQwMzIzLDE3MjM0MCw0MDQ2MiwyNjc2MCw0MDM4OCwxMzk2MTEsMTcyNDM1LDE3MjU3NiwxMzc1MzEsMTcyNTk1LDQwMjQ5LDE3MjIxNywxNzI3MjQsNDA1OTIsNDA1OTcsNDA2MDYsNDA2MTAsMTk3NjQsNDA2MTgsNDA2MjMs''@;'; put 'put ''MTQ4MzI0LDQwNjQxLDE1MjAwLDE0ODIxLDE1NjQ1LDIwMjc0LDE0MjcwLDE2Njk1NSw0MDcwNiw0MDcxMiwxOTM1MCwzNzkyNCwxNTkxMzgsNDA3MjcsNDA3MjYsNDA3NjEsMjIxNzUsMjIxNTQsNDA3NzMsMzkzNTIsMTY4MDc1LDM4ODk4LDMzOTE5LDQwODAyLDQwODA5LDMxNDUyLDQwODQ2''@;'; put 'put ''LDI5MjA2LDE5MzkwLDE0OTg3NywxNDk5NDcsMjkwNDcsMTUwMDA4LDE0ODI5NiwxNTAwOTcsMjk1OTgsMTY2ODc0LDEzNzQ2NiwzMTEzNSwxNjYyNzAsMTY3NDc4LDM3NzM3LDM3ODc1LDE2NjQ2OCwzNzYxMiwzNzc2MSwzNzgzNSwxNjYyNTIsMTQ4NjY1LDI5MjA3LDE2MTA3LDMwNTc4LDMx''@;'; put 'put ''Mjk5LDI4ODgwLDE0ODU5NSwxNDg0NzIsMjkwNTQsMTM3MTk5LDI4ODM1LDEzNzQwNiwxNDQ3OTMsMTYwNzEsMTM3MzQ5LDE1MjYyMywxMzcyMDgsMTQxMTQsMTM2OTU1LDEzNzI3MywxNDA0OSwxMzcwNzYsMTM3NDI1LDE1NTQ2NywxNDExNSwxMzY4OTYsMjIzNjMsMTUwMDUzLDEzNjE5MCwx''@;'; put 'put ''MzU4NDgsMTM2MTM0LDEzNjM3NCwzNDA1MSwxNDUwNjIsMzQwNTEsMzM4NzcsMTQ5OTA4LDE2MDEwMSwxNDY5OTMsMTUyOTI0LDE0NzE5NSwxNTk4MjYsMTc2NTIsMTQ1MTM0LDE3MDM5NywxNTk1MjYsMjY2MTcsMTQxMzEsMTUzODEsMTU4NDcsMjI2MzYsMTM3NTA2LDI2NjQwLDE2NDcxLDE0''@;'; put 'put ''NTIxNSwxNDc2ODEsMTQ3NTk1LDE0NzcyNywxNTg3NTMsMjE3MDcsMjIxNzQsMTU3MzYxLDIyMTYyLDEzNTEzNSwxMzQwNTYsMTM0NjY5LDM3ODMwLDE2NjY3NSwzNzc4OCwyMDIxNiwyMDc3OSwxNDM2MSwxNDg1MzQsMjAxNTYsMTMyMTk3LDEzMTk2NywyMDI5OSwyMDM2MiwxNTMxNjksMjMx''@;'; put 'put ''NDQsMTMxNDk5LDEzMjA0MywxNDc0NSwxMzE4NTAsMTMyMTE2LDEzMzY1LDIwMjY1LDEzMTc3NiwxNjc2MDMsMTMxNzAxLDM1NTQ2LDEzMTU5NiwyMDEyMCwyMDY4NSwyMDc0OSwyMDM4NiwyMDIyNywxNTAwMzAsMTQ3MDgyLDIwMjkwLDIwNTI2LDIwNTg4LDIwNjA5LDIwNDI4LDIwNDUzLDIw''@;'; put 'put ''NTY4LDIwNzMyLDIwODI1LDIwODI3LDIwODI5LDIwODMwLDI4Mjc4LDE0NDc4OSwxNDcwMDEsMTQ3MTM1LDI4MDE4LDEzNzM0OCwxNDcwODEsMjA5MDQsMjA5MzEsMTMyNTc2LDE3NjI5LDEzMjI1OSwxMzIyNDIsMTMyMjQxLDM2MjE4LDE2NjU1NiwxMzI4NzgsMjEwODEsMjExNTYsMTMzMjM1''@;'; put 'put ''LDIxMjE3LDM3NzQyLDE4MDQyLDI5MDY4LDE0ODM2NCwxMzQxNzYsMTQ5OTMyLDEzNTM5NiwyNzA4OSwxMzQ2ODUsMjk4MTcsMTYwOTQsMjk4NDksMjk3MTYsMjk3ODIsMjk1OTIsMTkzNDIsMTUwMjA0LDE0NzU5NywyMTQ1NiwxMzcwMCwyOTE5OSwxNDc2NTcsMjE5NDAsMTMxOTA5LDIxNzA5''@;'; put 'put ''LDEzNDA4NiwyMjMwMSwzNzQ2OSwzODY0NCwzNzczNCwyMjQ5MywyMjQxMywyMjM5OSwxMzg4NiwyMjczMSwyMzE5MywxNjY0NzAsMTM2OTU0LDEzNzA3MSwxMzY5NzYsMjMwODQsMjI5NjgsMzc1MTksMjMxNjYsMjMyNDcsMjMwNTgsMTUzOTI2LDEzNzcxNSwxMzczMTMsMTQ4MTE3LDE0MDY5''@;'; put 'put ''LDI3OTA5LDI5NzYzLDIzMDczLDE1NTI2NywyMzE2OSwxNjY4NzEsMTMyMTE1LDM3ODU2LDI5ODM2LDEzNTkzOSwyODkzMywxODgwMiwzNzg5NiwxNjYzOTUsMzc4MjEsMTQyNDAsMjM1ODIsMjM3MTAsMjQxNTgsMjQxMzYsMTM3NjIyLDEzNzU5NiwxNDYxNTgsMjQyNjksMjMzNzUsMTM3NDc1''@;'; put 'put ''LDEzNzQ3NiwxNDA4MSwxMzczNzYsMTQwNDUsMTM2OTU4LDE0MDM1LDMzMDY2LDE2NjQ3MSwxMzg2ODIsMTQ0NDk4LDE2NjMxMiwyNDMzMiwyNDMzNCwxMzc1MTEsMTM3MTMxLDIzMTQ3LDEzNzAxOSwyMzM2NCwzNDMyNCwxNjEyNzcsMzQ5MTIsMjQ3MDIsMTQxNDA4LDE0MDg0MywyNDUzOSwx''@;'; put 'put ''NjA1NiwxNDA3MTksMTQwNzM0LDE2ODA3MiwxNTk2MDMsMjUwMjQsMTMxMTM0LDEzMTE0MiwxNDA4MjcsMjQ5ODUsMjQ5ODQsMjQ2OTMsMTQyNDkxLDE0MjU5OSwxNDkyMDQsMTY4MjY5LDI1NzEzLDE0OTA5MywxNDIxODYsMTQ4ODksMTQyMTE0LDE0NDQ2NCwxNzAyMTgsMTQyOTY4LDI1Mzk5''@;'; put 'put ''LDE3MzE0NywyNTc4MiwyNTM5MywyNTU1MywxNDk5ODcsMTQyNjk1LDI1MjUyLDE0MjQ5NywyNTY1OSwyNTk2MywyNjk5NCwxNTM0OCwxNDM1MDIsMTQ0MDQ1LDE0OTg5NywxNDQwNDMsMjE3NzMsMTQ0MDk2LDEzNzQzMywxNjkwMjMsMjYzMTgsMTQ0MDA5LDE0Mzc5NSwxNTA3MiwxNjc4NCwx''@;'; put 'put ''NTI5NjQsMTY2NjkwLDE1Mjk3NSwxMzY5NTYsMTUyOTIzLDE1MjYxMywzMDk1OCwxNDM2MTksMTM3MjU4LDE0MzkyNCwxMzQxMiwxNDM4ODcsMTQzNzQ2LDE0ODE2OSwyNjI1NCwxNTkwMTIsMjYyMTksMTkzNDcsMjYxNjAsMTYxOTA0LDEzODczMSwyNjIxMSwxNDQwODIsMTQ0MDk3LDI2MTQy''@;'; put 'put ''LDE1MzcxNCwxNDU0NSwxNDU0NjYsMTQ1MzQwLDE1MjU3LDE0NTMxNCwxNDQzODIsMjk5MDQsMTUyNTQsMjY1MTEsMTQ5MDM0LDI2ODA2LDI2NjU0LDE1MzAwLDI3MzI2LDE0NDM1LDE0NTM2NSwxNDg2MTUsMjcxODcsMjcyMTgsMjczMzcsMjczOTcsMTM3NDkwLDI1ODczLDI2Nzc2LDI3MjEy''@;'; put 'put ''LDE1MzE5LDI3MjU4LDI3NDc5LDE0NzM5MiwxNDY1ODYsMzc3OTIsMzc2MTgsMTY2ODkwLDE2NjYwMywzNzUxMywxNjM4NzAsMTY2MzY0LDM3OTkxLDI4MDY5LDI4NDI3LDE0OTk5NiwyODAwNywxNDczMjcsMTU3NTksMjgxNjQsMTQ3NTE2LDIzMTAxLDI4MTcwLDIyNTk5LDI3OTQwLDMwNzg2''@;'; put 'put ''LDI4OTg3LDE0ODI1MCwxNDgwODYsMjg5MTMsMjkyNjQsMjkzMTksMjkzMzIsMTQ5MzkxLDE0OTI4NSwyMDg1NywxNTAxODAsMTMyNTg3LDI5ODE4LDE0NzE5MiwxNDQ5OTEsMTUwMDkwLDE0OTc4MywxNTU2MTcsMTYxMzQsMTYwNDksMTUwMjM5LDE2Njk0NywxNDcyNTMsMjQ3NDMsMTYxMTUs''@;'; put 'put ''Mjk5MDAsMjk3NTYsMzc3NjcsMjk3NTEsMTc1NjcsMTU5MjEwLDE3NzQ1LDMwMDgzLDE2MjI3LDE1MDc0NSwxNTA3OTAsMTYyMTYsMzAwMzcsMzAzMjMsMTczNTEwLDE1MTI5LDI5ODAwLDE2NjYwNCwxNDk5MzEsMTQ5OTAyLDE1MDk5LDE1ODIxLDE1MDA5NCwxNjEyNywxNDk5NTcsMTQ5NzQ3''@;'; put 'put ''LDM3MzcwLDIyMzIyLDM3Njk4LDE2NjYyNywxMzczMTYsMjA3MDMsMTUyMDk3LDE1MjAzOSwzMDU4NCwxNDM5MjIsMzA0NzgsMzA0NzksMzA1ODcsMTQ5MTQzLDE0NTI4MSwxNDk0MiwxNDk3NDQsMjk3NTIsMjk4NTEsMTYwNjMsMTUwMjAyLDE1MDIxNSwxNjU4NCwxNTAxNjYsMTU2MDc4LDM3''@;'; put 'put ''NjM5LDE1Mjk2MSwzMDc1MCwzMDg2MSwzMDg1NiwzMDkzMCwyOTY0OCwzMTA2NSwxNjE2MDEsMTUzMzE1LDE2NjU0LDMxMTMxLDMzOTQyLDMxMTQxLDI3MTgxLDE0NzE5NCwzMTI5MCwzMTIyMCwxNjc1MCwxMzY5MzQsMTY2OTAsMzc0MjksMzEyMTcsMTM0NDc2LDE0OTkwMCwxMzE3MzcsMTQ2''@;'; put 'put ''ODc0LDEzNzA3MCwxMzcxOSwyMTg2NywxMzY4MCwxMzk5NCwxMzE1NDAsMTM0MTU3LDMxNDU4LDIzMTI5LDE0MTA0NSwxNTQyODcsMTU0MjY4LDIzMDUzLDEzMTY3NSwzMDk2MCwyMzA4MiwxNTQ1NjYsMzE0ODYsMTY4ODksMzE4MzcsMzE4NTMsMTY5MTMsMTU0NTQ3LDE1NTMyNCwxNTUzMDIs''@;'; put 'put ''MzE5NDksMTUwMDA5LDEzNzEzNiwzMTg4NiwzMTg2OCwzMTkxOCwyNzMxNCwzMjIyMCwzMjI2MywzMjIxMSwzMjU5MCwxNTYyNTcsMTU1OTk2LDE2MjYzMiwzMjE1MSwxNTUyNjYsMTcwMDIsMTU4NTgxLDEzMzM5OCwyNjU4MiwxMzExNTAsMTQ0ODQ3LDIyNDY4LDE1NjY5MCwxNTY2NjQsMTQ5''@;'; put 'put ''ODU4LDMyNzMzLDMxNTI3LDEzMzE2NCwxNTQzNDUsMTU0OTQ3LDMxNTAwLDE1NTE1MCwzOTM5OCwzNDM3MywzOTUyMywyNzE2NCwxNDQ0NDcsMTQ4MTgsMTUwMDA3LDE1NzEwMSwzOTQ1NSwxNTcwODgsMzM5MjAsMTYwMDM5LDE1ODkyOSwxNzY0MiwzMzA3OSwxNzQxMCwzMjk2NiwzMzAzMywz''@;'; put 'put ''MzA5MCwxNTc2MjAsMzkxMDcsMTU4Mjc0LDMzMzc4LDMzMzgxLDE1ODI4OSwzMzg3NSwxNTkxNDMsMzQzMjAsMTYwMjgzLDIzMTc0LDE2NzY3LDEzNzI4MCwyMzMzOSwxMzczNzcsMjMyNjgsMTM3NDMyLDM0NDY0LDE5NTAwNCwxNDY4MzEsMzQ4NjEsMTYwODAyLDIzMDQyLDM0OTI2LDIwMjkz''@;'; put 'put ''LDM0OTUxLDM1MDA3LDM1MDQ2LDM1MTczLDM1MTQ5LDE1MzIxOSwzNTE1NiwxNjE2NjksMTYxNjY4LDE2NjkwMSwxNjY4NzMsMTY2ODEyLDE2NjM5MywxNjA0NSwzMzk1NSwxODE2NSwxODEyNywxNDMyMiwzNTM4OSwzNTM1NiwxNjkwMzIsMjQzOTcsMzc0MTksMTQ4MTAwLDI2MDY4LDI4OTY5''@;'; put 'put ''LDI4ODY4LDEzNzI4NSw0MDMwMSwzNTk5OSwzNjA3MywxNjMyOTIsMjI5MzgsMzA2NTksMjMwMjQsMTcyNjIsMTQwMzYsMzYzOTQsMzY1MTksMTUwNTM3LDM2NjU2LDM2NjgyLDE3MTQwLDI3NzM2LDI4NjAzLDE0MDA2NSwxODU4NywyODUzNywyODI5OSwxMzcxNzgsMzk5MTMsMTQwMDUsMTQ5''@;'; put 'put ''ODA3LDM3MDUxLDM3MDE1LDIxODczLDE4Njk0LDM3MzA3LDM3ODkyLDE2NjQ3NSwxNjQ4MiwxNjY2NTIsMzc5MjcsMTY2OTQxLDE2Njk3MSwzNDAyMSwzNTM3MSwzODI5NywzODMxMSwzODI5NSwzODI5NCwxNjcyMjAsMjk3NjUsMTYwNjYsMTQ5NzU5LDE1MDA4MiwxNDg0NTgsMTYxMDMsMTQz''@;'; put 'put ''OTA5LDM4NTQzLDE2NzY1NSwxNjc1MjYsMTY3NTI1LDE2MDc2LDE0OTk5NywxNTAxMzYsMTQ3NDM4LDI5NzE0LDI5ODAzLDE2MTI0LDM4NzIxLDE2ODExMiwyNjY5NSwxODk3MywxNjgwODMsMTUzNTY3LDM4NzQ5LDM3NzM2LDE2NjI4MSwxNjY5NTAsMTY2NzAzLDE1NjYwNiwzNzU2MiwyMzMx''@;'; put 'put ''MywzNTY4OSwxODc0OCwyOTY4OSwxNDc5OTUsMzg4MTEsMzg3NjksMzkyMjQsMTM0OTUwLDI0MDAxLDE2Njg1MywxNTAxOTQsMzg5NDMsMTY5MTc4LDM3NjIyLDE2OTQzMSwzNzM0OSwxNzYwMCwxNjY3MzYsMTUwMTE5LDE2Njc1NiwzOTEzMiwxNjY0NjksMTYxMjgsMzc0MTgsMTg3MjUsMzM4''@;'; put 'put ''MTIsMzkyMjcsMzkyNDUsMTYyNTY2LDE1ODY5LDM5MzIzLDE5MzExLDM5MzM4LDM5NTE2LDE2Njc1NywxNTM4MDAsMjcyNzksMzk0NTcsMjMyOTQsMzk0NzEsMTcwMjI1LDE5MzQ0LDE3MDMxMiwzOTM1NiwxOTM4OSwxOTM1MSwzNzc1NywyMjY0MiwxMzU5MzgsMjI1NjIsMTQ5OTQ0LDEzNjQy''@;'; put 'put ''NCwzMDc4OCwxNDEwODcsMTQ2ODcyLDI2ODIxLDE1NzQxLDM3OTc2LDE0NjMxLDI0OTEyLDE0MTE4NSwxNDE2NzUsMjQ4MzksNDAwMTUsNDAwMTksNDAwNTksMzk5ODksMzk5NTIsMzk4MDcsMzk4ODcsMTcxNTY1LDM5ODM5LDE3MjUzMywxNzIyODYsNDAyMjUsMTk2MzAsMTQ3NzE2LDQwNDcy''@;'; put 'put ''LDE5NjMyLDQwMjA0LDE3MjQ2OCwxNzIyNjksMTcyMjc1LDE3MDI4Nyw0MDM1NywzMzk4MSwxNTkyNTAsMTU5NzExLDE1ODU5NCwzNDMwMCwxNzcxNSwxNTkxNDAsMTU5MzY0LDE1OTIxNiwzMzgyNCwzNDI4NiwxNTkyMzIsMTQ1MzY3LDE1NTc0OCwzMTIwMiwxNDQ3OTYsMTQ0OTYwLDE4NzMz''@;'; put 'put ''LDE0OTk4MiwxNTcxNCwzNzg1MSwzNzU2NiwzNzcwNCwxMzE3NzUsMzA5MDUsMzc0OTUsMzc5NjUsMjA0NTIsMTMzNzYsMzY5NjQsMTUyOTI1LDMwNzgxLDMwODA0LDMwOTAyLDMwNzk1LDEzNzA0NywxNDM4MTcsMTQ5ODI1LDEzOTc4LDIwMzM4LDI4NjM0LDI4NjMzLDI4NzAyLDI4NzAyLDIx''@;'; put 'put ''NTI0LDE0Nzg5MywyMjQ1OSwyMjc3MSwyMjQxMCw0MDIxNCwyMjQ4NywyODk4MCwxMzQ4NywxNDc4ODQsMjkxNjMsMTU4Nzg0LDE1MTQ0NywyMzMzNiwxMzcxNDEsMTY2NDczLDI0ODQ0LDIzMjQ2LDIzMDUxLDE3MDg0LDE0ODYxNiwxNDEyNCwxOTMyMywxNjYzOTYsMzc4MTksMzc4MTYsMTM3''@;'; put 'put ''NDMwLDEzNDk0MSwzMzkwNiwxNTg5MTIsMTM2MjExLDE0ODIxOCwxNDIzNzQsMTQ4NDE3LDIyOTMyLDE0Njg3MSwxNTc1MDUsMzIxNjgsMTU1OTk1LDE1NTgxMiwxNDk5NDUsMTQ5ODk5LDE2NjM5NCwzNzYwNSwyOTY2NiwxNjEwNSwyOTg3NiwxNjY3NTUsMTM3Mzc1LDE2MDk3LDE1MDE5NSwy''@;'; put 'put ''NzM1MiwyOTY4MywyOTY5MSwxNjA4NiwxNTAwNzgsMTUwMTY0LDEzNzE3NywxNTAxMTgsMTMyMDA3LDEzNjIyOCwxNDk5ODksMjk3NjgsMTQ5NzgyLDI4ODM3LDE0OTg3OCwzNzUwOCwyOTY3MCwzNzcyNywxMzIzNTAsMzc2ODEsMTY2NjA2LDE2NjQyMiwzNzc2NiwxNjY4ODcsMTUzMDQ1LDE4''@;'; put 'put ''NzQxLDE2NjUzMCwyOTAzNSwxNDk4MjcsMTM0Mzk5LDIyMTgwLDEzMjYzNCwxMzQxMjMsMTM0MzI4LDIxNzYyLDMxMTcyLDEzNzIxMCwzMjI1NCwxMzY4OTgsMTUwMDk2LDEzNzI5OCwxNzcxMCwzNzg4OSwxNDA5MCwxNjY1OTIsMTQ5OTMzLDIyOTYwLDEzNzQwNywxMzczNDcsMTYwOTAwLDIz''@;'; put 'put ''MjAxLDE0MDUwLDE0Njc3OSwxNGUzLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQsMzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUsMTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgy''@;'; put 'put ''MywxNTU3NCwxNDc0MzcsMTQ2OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwzMDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwzNjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIyNDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5''@;'; put 'put ''LDE0MzMzMSwxMzU4NTYsMTQwMjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMsMTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwxNTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYw''@;'; put 'put ''MDA5LDMzNTk3LDEzNzAxOCwzMzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjkyMSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywxMzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYyNjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwx''@;'; put 'put ''NDcxOTMsMTYxNTkwLDE0ODU3MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwyMDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEzNTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwy''@;'; put 'put ''Mzg1NSwxNTg1OSwyNDQxMiwxNTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAsMjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0''@;'; put 'put ''MywyOTM4OSwyOTQ1NiwxNjI1NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQsMzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYx''@;'; put 'put ''MjIsMjk5MDcsMTYxNDIsMTYyMTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYyNTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUxMzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMzLDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3''@;'; put 'put ''LDMwNjE2LDE2NDkwLDE2NDk1LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0MywxNjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5Niwx''@;'; put 'put ''Njc0MywzMTM3NywxNjgxOCwzMTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwxNjg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwzMTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIy''@;'; put 'put ''MTIsMzIyMDgsMzIyNTMsMzI2ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMwMDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgsMzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAs''@;'; put 'put ''MzMxMTMsMzMxMTQsMTc0MjcsMjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEsMTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgsMzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4''@;'; put 'put ''MDMsMzM5MjgsMTc2NjgsMzM5ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQxMzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMsMzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUx''@;'; put 'put ''LDM1MzY5LDM1Mzg0LDM1NDc2LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2''@;'; put 'put ''ODEwLDM2ODEyLDM2OTE1LDM5MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3''@;'; put 'put ''LDM3OTMzLDM3OTUwLDE4Nzk0LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUwLDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5''@;'; put 'put ''MTk2LDM5MjIzLDM5MjM0LDM5MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0''@;'; put 'put ''NCwzODEzNCwzNjc5MCw0MDU3MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEwOCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMmUzLDI2OTA2LDM4MDgzLDIyOTU2LDEzMjMxMSwyMjU5MiwzODA4MSwxNDI2NSwxMzI1NjUsMTMyNjI5LDEzMjcyNiwx''@;'; put 'put ''MzY4OTAsMjIzNTksMjkwNDMsMTMzODI2LDEzMzgzNywxMzQwNzksMjE2MTAsMTk0NjE5LDEzNDA5MSwyMTY2MiwxMzQxMzksMTM0MjAzLDEzNDIyNywxMzQyNDUsMTM0MjY4LDI0ODA3LDEzNDI4NSwyMjEzOCwxMzQzMjUsMTM0MzY1LDEzNDM4MSwxMzQ1MTEsMTM0NTc4LDEzNDYwMCwyNjk2''@;'; put 'put ''NSwzOTk4MywzNDcyNSwxMzQ2NjAsMTM0NjcwLDEzNDg3MSwxMzUwNTYsMTM0OTU3LDEzNDc3MSwyMzU4NCwxMzUxMDAsMjQwNzUsMTM1MjYwLDEzNTI0NywxMzUyODYsMjYzOTgsMTM1MjkxLDEzNTMwNCwxMzUzMTgsMTM4OTUsMTM1MzU5LDEzNTM3OSwxMzU0NzEsMTM1NDgzLDIxMzQ4LDMz''@;'; put 'put ''OTY1LDEzNTkwNywxMzYwNTMsMTM1OTkwLDM1NzEzLDEzNjU2NywxMzY3MjksMTM3MTU1LDEzNzE1OSwyMDA4OCwyODg1OSwxMzcyNjEsMTM3NTc4LDEzNzc3MywxMzc3OTcsMTM4MjgyLDEzODM1MiwxMzg0MTIsMTM4OTUyLDI1MjgzLDEzODk2NSwxMzkwMjksMjkwODAsMjY3MDksMTM5MzMz''@;'; put 'put ''LDI3MTEzLDE0MDI0LDEzOTkwMCwxNDAyNDcsMTQwMjgyLDE0MTA5OCwxNDE0MjUsMTQxNjQ3LDMzNTMzLDE0MTY3MSwxNDE3MTUsMTQyMDM3LDM1MjM3LDE0MjA1NiwzNjc2OCwxNDIwOTQsMzg4NDAsMTQyMTQzLDM4OTgzLDM5NjEzLDE0MjQxMixudWxsLDE0MjQ3MiwxNDI1MTksMTU0NjAw''@;'; put 'put ''LDE0MjYwMCwxNDI2MTAsMTQyNzc1LDE0Mjc0MSwxNDI5MTQsMTQzMjIwLDE0MzMwOCwxNDM0MTEsMTQzNDYyLDE0NDE1OSwxNDQzNTAsMjQ0OTcsMjYxODQsMjYzMDMsMTYyNDI1LDE0NDc0MywxNDQ4ODMsMjkxODUsMTQ5OTQ2LDMwNjc5LDE0NDkyMiwxNDUxNzQsMzIzOTEsMTMxOTEwLDIy''@;'; put 'put ''NzA5LDI2MzgyLDI2OTA0LDE0NjA4NywxNjEzNjcsMTU1NjE4LDE0Njk2MSwxNDcxMjksMTYxMjc4LDEzOTQxOCwxODY0MCwxOTEyOCwxNDc3MzcsMTY2NTU0LDE0ODIwNiwxNDgyMzcsMTQ3NTE1LDE0ODI3NiwxNDgzNzQsMTUwMDg1LDEzMjU1NCwyMDk0NiwxMzI2MjUsMjI5NDMsMTM4OTIw''@;'; put 'put ''LDE1Mjk0LDE0NjY4NywxNDg0ODQsMTQ4Njk0LDIyNDA4LDE0OTEwOCwxNDc0NywxNDkyOTUsMTY1MzUyLDE3MDQ0MSwxNDE3OCwxMzk3MTUsMzU2NzgsMTY2NzM0LDM5MzgyLDE0OTUyMiwxNDk3NTUsMTUwMDM3LDI5MTkzLDE1MDIwOCwxMzQyNjQsMjI4ODUsMTUxMjA1LDE1MTQzMCwxMzI5''@;'; put 'put ''ODUsMzY1NzAsMTUxNTk2LDIxMTM1LDIyMzM1LDI5MDQxLDE1MjIxNywxNTI2MDEsMTQ3Mjc0LDE1MDE4MywyMTk0OCwxNTI2NDYsMTUyNjg2LDE1ODU0NiwzNzMzMiwxMzQyNywxNTI4OTUsMTYxMzMwLDE1MjkyNiwxODIwMCwxNTI5MzAsMTUyOTM0LDE1MzU0MywxNDk4MjMsMTUzNjkzLDIw''@;'; put 'put ''NTgyLDEzNTYzLDE0NDMzMiwyNDc5OCwxNTM4NTksMTgzMDAsMTY2MjE2LDE1NDI4NiwxNTQ1MDUsMTU0NjMwLDEzODY0MCwyMjQzMywyOTAwOSwyODU5OCwxNTU5MDYsMTYyODM0LDM2OTUwLDE1NjA4MiwxNTE0NTAsMzU2ODIsMTU2Njc0LDE1Njc0NiwyMzg5OSwxNTg3MTEsMzY2NjIsMTU2''@;'; put 'put ''ODA0LDEzNzUwMCwzNTU2MiwxNTAwMDYsMTU2ODA4LDE0NzQzOSwxNTY5NDYsMTkzOTIsMTU3MTE5LDE1NzM2NSwxNDEwODMsMzc5ODksMTUzNTY5LDI0OTgxLDIzMDc5LDE5NDc2NSwyMDQxMSwyMjIwMSwxNDg3NjksMTU3NDM2LDIwMDc0LDE0OTgxMiwzODQ4NiwyODA0NywxNTg5MDksMTM4''@;'; put 'put ''NDgsMzUxOTEsMTU3NTkzLDE1NzgwNiwxNTY2ODksMTU3NzkwLDI5MTUxLDE1Nzg5NSwzMTU1NCwxNjgxMjgsMTMzNjQ5LDE1Nzk5MCwzNzEyNCwxNTgwMDksMzEzMDEsNDA0MzIsMTU4MjAyLDM5NDYyLDE1ODI1MywxMzkxOSwxNTY3NzcsMTMxMTA1LDMxMTA3LDE1ODI2MCwxNTg1NTUsMjM4''@;'; put 'put ''NTIsMTQ0NjY1LDMzNzQzLDE1ODYyMSwxODEyOCwxNTg4ODQsMzAwMTEsMzQ5MTcsMTU5MTUwLDIyNzEwLDE0MTA4LDE0MDY4NSwxNTk4MTksMTYwMjA1LDE1NDQ0LDE2MDM4NCwxNjAzODksMzc1MDUsMTM5NjQyLDE2MDM5NSwzNzY4MCwxNjA0ODYsMTQ5OTY4LDI3NzA1LDM4MDQ3LDE2MDg0''@;'; put 'put ''OCwxMzQ5MDQsMzQ4NTUsMzUwNjEsMTQxNjA2LDE2NDk3OSwxMzcxMzcsMjgzNDQsMTUwMDU4LDEzNzI0OCwxNDc1NiwxNDAwOSwyMzU2OCwzMTIwMywxNzcyNywyNjI5NCwxNzExODEsMTcwMTQ4LDM1MTM5LDE2MTc0MCwxNjE4ODAsMjIyMzAsMTY2MDcsMTM2NzE0LDE0NzUzLDE0NTE5OSwx''@;'; put 'put ''NjQwNzIsMTM2MTMzLDI5MTAxLDMzNjM4LDE2MjI2OSwxNjgzNjAsMjMxNDMsMTk2MzksMTU5OTE5LDE2NjMxNSwxNjIzMDEsMTYyMzE0LDE2MjU3MSwxNjMxNzQsMTQ3ODM0LDMxNTU1LDMxMTAyLDE2Mzg0OSwyODU5NywxNzI3NjcsMjcxMzksMTY0NjMyLDIxNDEwLDE1OTIzOSwzNzgyMywy''@;'; put 'put ''NjY3OCwzODc0OSwxNjQyMDcsMTYzODc1LDE1ODEzMywxMzYxNzMsMTQzOTE5LDE2MzkxMiwyMzk0MSwxNjY5NjAsMTYzOTcxLDIyMjkzLDM4OTQ3LDE2NjIxNywyMzk3OSwxNDk4OTYsMjYwNDYsMjcwOTMsMjE0NTgsMTUwMTgxLDE0NzMyOSwxNTM3NywyNjQyMiwxNjM5ODQsMTY0MDg0LDE2''@;'; put 'put ''NDE0MiwxMzkxNjksMTY0MTc1LDE2NDIzMywxNjQyNzEsMTY0Mzc4LDE2NDYxNCwxNjQ2NTUsMTY0NzQ2LDEzNzcwLDE2NDk2OCwxNjU1NDYsMTg2ODIsMjU1NzQsMTY2MjMwLDMwNzI4LDM3NDYxLDE2NjMyOCwxNzM5NCwxNjYzNzUsMTczNzUsMTY2Mzc2LDE2NjcyNiwxNjY4NjgsMjMwMzIs''@;'; put 'put ''MTY2OTIxLDM2NjE5LDE2Nzg3NywxNjgxNzIsMzE1NjksMTY4MjA4LDE2ODI1MiwxNTg2MywxNjgyODYsMTUwMjE4LDM2ODE2LDI5MzI3LDIyMTU1LDE2OTE5MSwxNjk0NDksMTY5MzkyLDE2OTQwMCwxNjk3NzgsMTcwMTkzLDE3MDMxMywxNzAzNDYsMTcwNDM1LDE3MDUzNiwxNzA3NjYsMTcx''@;'; put 'put ''MzU0LDE3MTQxOSwzMjQxNSwxNzE3NjgsMTcxODExLDE5NjIwLDM4MjE1LDE3MjY5MSwyOTA5MCwxNzI3OTksMTk4NTcsMzY4ODIsMTczNTE1LDE5ODY4LDEzNDMwMCwzNjc5OCwyMTk1MywzNjc5NCwxNDA0NjQsMzY3OTMsMTUwMTYzLDE3NjczLDMyMzgzLDI4NTAyLDI3MzEzLDIwMjAyLDEz''@;'; put 'put ''NTQwLDE2NjcwMCwxNjE5NDksMTQxMzgsMzY0ODAsMTM3MjA1LDE2Mzg3NiwxNjY3NjQsMTY2ODA5LDE2MjM2NiwxNTczNTksMTU4NTEsMTYxMzY1LDE0NjYxNSwxNTMxNDEsMTUzOTQyLDIwMTIyLDE1NTI2NSwxNTYyNDgsMjIyMDcsMTM0NzY1LDM2MzY2LDIzNDA1LDE0NzA4MCwxNTA2ODYs''@;'; put 'put ''MjU1NjYsMjUyOTYsMTM3MjA2LDEzNzMzOSwyNTkwNCwyMjA2MSwxNTQ2OTgsMjE1MzAsMTUyMzM3LDE1ODE0LDE3MTQxNiwxOTU4MSwyMjA1MCwyMjA0NiwzMjU4NSwxNTUzNTIsMjI5MDEsMTQ2NzUyLDM0NjcyLDE5OTk2LDEzNTE0NiwxMzQ0NzMsMTQ1MDgyLDMzMDQ3LDQwMjg2LDM2MTIw''@;'; put 'put ''LDMwMjY3LDQwMDA1LDMwMjg2LDMwNjQ5LDM3NzAxLDIxNTU0LDMzMDk2LDMzNTI3LDIyMDUzLDMzMDc0LDMzODE2LDMyOTU3LDIxOTk0LDMxMDc0LDIyMDgzLDIxNTI2LDEzNDgxMywxMzc3NCwyMjAyMSwyMjAwMSwyNjM1MywxNjQ1NzgsMTM4NjksMzAwMDQsMjJlMywyMTk0NiwyMTY1NSwy''@;'; put 'put ''MTg3NCwxMzQyMDksMTM0Mjk0LDI0MjcyLDE1MTg4MCwxMzQ3NzQsMTQyNDM0LDEzNDgxOCw0MDYxOSwzMjA5MCwyMTk4MiwxMzUyODUsMjUyNDUsMzg3NjUsMjE2NTIsMzYwNDUsMjkxNzQsMzcyMzgsMjU1OTYsMjU1MjksMjU1OTgsMjE4NjUsMTQyMTQ3LDQwMDUwLDE0MzAyNywyMDg5MCwx''@;'; put 'put ''MzUzNSwxMzQ1NjcsMjA5MDMsMjE1ODEsMjE3OTAsMjE3NzksMzAzMTAsMzYzOTcsMTU3ODM0LDMwMTI5LDMyOTUwLDM0ODIwLDM0Njk0LDM1MDE1LDMzMjA2LDMzODIwLDEzNTM2MSwxNzY0NCwyOTQ0NCwxNDkyNTQsMjM0NDAsMzM1NDcsMTU3ODQzLDIyMTM5LDE0MTA0NCwxNjMxMTksMTQ3''@;'; put 'put ''ODc1LDE2MzE4NywxNTk0NDAsMTYwNDM4LDM3MjMyLDEzNTY0MSwzNzM4NCwxNDY2ODQsMTczNzM3LDEzNDgyOCwxMzQ5MDUsMjkyODYsMTM4NDAyLDE4MjU0LDE1MTQ5MCwxNjM4MzMsMTM1MTQ3LDE2NjM0LDQwMDI5LDI1ODg3LDE0Mjc1MiwxODY3NSwxNDk0NzIsMTcxMzg4LDEzNTE0OCwx''@;'; put 'put ''MzQ2NjYsMjQ2NzQsMTYxMTg3LDEzNTE0OSxudWxsLDE1NTcyMCwxMzU1NTksMjkwOTEsMzIzOTgsNDAyNzIsMTk5OTQsMTk5NzIsMTM2ODcsMjMzMDksMjc4MjYsMjEzNTEsMTM5OTYsMTQ4MTIsMjEzNzMsMTM5ODksMTQ5MDE2LDIyNjgyLDE1MDM4MiwzMzMyNSwyMTU3OSwyMjQ0MiwxNTQy''@;'; put 'put ''NjEsMTMzNDk3LG51bGwsMTQ5MzAsMTQwMzg5LDI5NTU2LDE3MTY5MiwxOTcyMSwzOTkxNywxNDY2ODYsMTcxODI0LDE5NTQ3LDE1MTQ2NSwxNjkzNzQsMTcxOTk4LDMzODg0LDE0Njg3MCwxNjA0MzQsMTU3NjE5LDE0NTE4NCwyNTM5MCwzMjAzNywxNDcxOTEsMTQ2OTg4LDE0ODkwLDM2ODcy''@;'; put 'put ''LDIxMTk2LDE1OTg4LDEzOTQ2LDE3ODk3LDEzMjIzOCwzMDI3MiwyMzI4MCwxMzQ4MzgsMzA4NDIsMTYzNjMwLDIyNjk1LDE2NTc1LDIyMTQwLDM5ODE5LDIzOTI0LDMwMjkyLDE3MzEwOCw0MDU4MSwxOTY4MSwzMDIwMSwxNDMzMSwyNDg1NywxNDM1NzgsMTQ4NDY2LG51bGwsMjIxMDksMTM1''@;'; put 'put ''ODQ5LDIyNDM5LDE0OTg1OSwxNzE1MjYsMjEwNDQsMTU5OTE4LDEzNzQxLDI3NzIyLDQwMzE2LDMxODMwLDM5NzM3LDIyNDk0LDEzNzA2OCwyMzYzNSwyNTgxMSwxNjkxNjgsMTU2NDY5LDE2MDEwMCwzNDQ3NywxMzQ0NDAsMTU5MDEwLDE1MDI0MiwxMzQ1MTMsbnVsbCwyMDk5MCwxMzkwMjMs''@;'; put 'put ''MjM5NTAsMzg2NTksMTM4NzA1LDQwNTc3LDM2OTQwLDMxNTE5LDM5NjgyLDIzNzYxLDMxNjUxLDI1MTkyLDI1Mzk3LDM5Njc5LDMxNjk1LDM5NzIyLDMxODcwLDM5NzI2LDMxODEwLDMxODc4LDM5OTU3LDMxNzQwLDM5Njg5LDQwNzI3LDM5OTYzLDE0OTgyMiw0MDc5NCwyMTg3NSwyMzQ5MSwy''@;'; put 'put ''MDQ3Nyw0MDYwMCwyMDQ2NiwyMTA4OCwxNTg3OCwyMTIwMSwyMjM3NSwyMDU2NiwyMjk2NywyNDA4MiwzODg1Niw0MDM2MywzNjcwMCwyMTYwOSwzODgzNiwzOTIzMiwzODg0MiwyMTI5MiwyNDg4MCwyNjkyNCwyMTQ2NiwzOTk0Niw0MDE5NCwxOTUxNSwzODQ2NSwyNzAwOCwyMDY0NiwzMDAy''@;'; put 'put ''MiwxMzcwNjksMzkzODYsMjExMDcsbnVsbCwzNzIwOSwzODUyOSwzNzIxMixudWxsLDM3MjAxLDE2NzU3NSwyNTQ3MSwxNTkwMTEsMjczMzgsMjIwMzMsMzcyNjIsMzAwNzQsMjUyMjEsMTMyMDkyLDI5NTE5LDMxODU2LDE1NDY1NywxNDY2ODUsbnVsbCwxNDk3ODUsMzA0MjIsMzk4MzcsMjAw''@;'; put 'put ''MTAsMTM0MzU2LDMzNzI2LDM0ODgyLG51bGwsMjM2MjYsMjcwNzIsMjA3MTcsMjIzOTQsMjEwMjMsMjQwNTMsMjAxNzQsMjc2OTcsMTMxNTcwLDIwMjgxLDIxNjYwLDIxNzIyLDIxMTQ2LDM2MjI2LDEzODIyLDI0MzMyLDEzODExLG51bGwsMjc0NzQsMzcyNDQsNDA4NjksMzk4MzEsMzg5NTgs''@;'; put 'put ''MzkwOTIsMzk2MTAsNDA2MTYsNDA1ODAsMjkwNTAsMzE1MDgsbnVsbCwyNzY0MiwzNDg0MCwzMjYzMixudWxsLDIyMDQ4LDE3MzY0MiwzNjQ3MSw0MDc4NyxudWxsLDM2MzA4LDM2NDMxLDQwNDc2LDM2MzUzLDI1MjE4LDE2NDczMywzNjM5MiwzNjQ2OSwzMTQ0MywxNTAxMzUsMzEyOTQsMzA5''@;'; put 'put ''MzYsMjc4ODIsMzU0MzEsMzAyMTUsMTY2NDkwLDQwNzQyLDI3ODU0LDM0Nzc0LDMwMTQ3LDE3MjcyMiwzMDgwMywxOTQ2MjQsMzYxMDgsMjk0MTAsMjk1NTMsMzU2MjksMjk0NDIsMjk5MzcsMzYwNzUsMTUwMjAzLDM0MzUxLDI0NTA2LDM0OTc2LDE3NTkxLG51bGwsMTM3Mjc1LDE1OTIzNyxu''@;'; put 'put ''dWxsLDM1NDU0LDE0MDU3MSxudWxsLDI0ODI5LDMwMzExLDM5NjM5LDQwMjYwLDM3NzQyLDM5ODIzLDM0ODA1LG51bGwsMzQ4MzEsMzYwODcsMjk0ODQsMzg2ODksMzk4NTYsMTM3ODIsMjkzNjIsMTk0NjMsMzE4MjUsMzkyNDIsMTU1OTkzLDI0OTIxLDE5NDYwLDQwNTk4LDI0OTU3LG51bGws''@;'; put 'put ''MjIzNjcsMjQ5NDMsMjUyNTQsMjUxNDUsMjUyOTQsMTQ5NDAsMjUwNTgsMjE0MTgsMTQ0MzczLDI1NDQ0LDI2NjI2LDEzNzc4LDIzODk1LDE2Njg1MCwzNjgyNiwxNjc0ODEsbnVsbCwyMDY5NywxMzg1NjYsMzA5ODIsMjEyOTgsMzg0NTYsMTM0OTcxLDE2NDg1LG51bGwsMzA3MTgsbnVsbCwz''@;'; put 'put ''MTkzOCwxNTU0MTgsMzE5NjIsMzEyNzcsMzI4NzAsMzI4NjcsMzIwNzcsMjk5NTcsMjk5MzgsMzUyMjAsMzMzMDYsMjYzODAsMzI4NjYsMTYwOTAyLDMyODU5LDI5OTM2LDMzMDI3LDMwNTAwLDM1MjA5LDE1NzY0NCwzMDAzNSwxNTk0NDEsMzQ3MjksMzQ3NjYsMzMyMjQsMzQ3MDAsMzU0MDEs''@;'; put 'put ''MzYwMTMsMzU2NTEsMzA1MDcsMjk5NDQsMzQwMTAsMTM4NzcsMjcwNTgsMzYyNjIsbnVsbCwzNTI0MSwyOTgwMCwyODA4OSwzNDc1MywxNDc0NzMsMjk5MjcsMTU4MzUsMjkwNDYsMjQ3NDAsMjQ5ODgsMTU1NjksMjkwMjYsMjQ2OTUsbnVsbCwzMjYyNSwxNjY3MDEsMjkyNjQsMjQ4MDksMTkz''@;'; put 'put ''MjYsMjEwMjQsMTUzODQsMTQ2NjMxLDE1NTM1MSwxNjEzNjYsMTUyODgxLDEzNzU0MCwxMzU5MzQsMTcwMjQzLDE1OTE5NiwxNTk5MTcsMjM3NDUsMTU2MDc3LDE2NjQxNSwxNDUwMTUsMTMxMzEwLDE1Nzc2NiwxNTEzMTAsMTc3NjIsMjMzMjcsMTU2NDkyLDQwNzg0LDQwNjE0LDE1NjI2Nywx''@;'; put 'put ''MjI4OCw2NTI5MiwxMjI4OSwxMjI5MCw2NTI5NCw4MjMxLDY1MzA3LDY1MzA2LDY1MzExLDY1MjgxLDY1MDcyLDgyMzAsODIyOSw2NTEwNCw2NTEwNSw2NTEwNiwxODMsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUzNzIsODIxMSw2NTA3Myw4MjEyLDY1MDc1LDk1ODgsNjUwNzYsNjUxMDMs''@;'; put 'put ''NjUyODgsNjUyODksNjUwNzcsNjUwNzgsNjUzNzEsNjUzNzMsNjUwNzksNjUwODAsMTIzMDgsMTIzMDksNjUwODEsNjUwODIsMTIzMDQsMTIzMDUsNjUwODMsNjUwODQsMTIyOTgsMTIyOTksNjUwODUsNjUwODYsMTIyOTYsMTIyOTcsNjUwODcsNjUwODgsMTIzMDAsMTIzMDEsNjUwODksNjUw''@;'; put 'put ''OTAsMTIzMDIsMTIzMDMsNjUwOTEsNjUwOTIsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMxNywxMjMxOCw4MjQ1LDgyNDIsNjUyODMsNjUyODYsNjUyOTAsODI1MSwxNjcsMTIyOTEsOTY3NSw5Njc5LDk2NTEsOTY1MCw5Njc4LDk3''@;'; put 'put ''MzQsOTczMyw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NjEsOTY2MCwxMjk2Myw4NDUzLDE3NSw2NTUwNyw2NTM0Myw3MTcsNjUwOTcsNjUwOTgsNjUxMDEsNjUxMDIsNjUwOTksNjUxMDAsNjUxMTksNjUxMjAsNjUxMjEsNjUyOTEsNjUyOTMsMjE1LDI0NywxNzcsODczMCw2NTMwOCw2NTMxMCw2''@;'; put 'put ''NTMwOSw4ODA2LDg4MDcsODgwMCw4NzM0LDg3ODYsODgwMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTM3NCw4NzQ1LDg3NDYsODg2OSw4NzM2LDg3MzUsODg5NSwxMzI2NiwxMzI2NSw4NzQ3LDg3NTAsODc1Nyw4NzU2LDk3OTIsOTc5NCw4ODUzLDg4NTcsODU5Myw4NTk1LDg1''@;'; put 'put ''OTIsODU5NCw4NTk4LDg1OTksODYwMSw4NjAwLDg3NDEsODczOSw2NTI5NSw2NTM0MCw4NzI1LDY1MTI4LDY1Mjg0LDY1NTA5LDEyMzA2LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MzEyLDg0NTEsODQ1Nyw2NTEyOSw2NTEzMCw2NTEzMSwxMzI2OSwxMzIxMiwxMzIxMywxMzIxNCwxMzI2MiwxMzIx''@;'; put 'put ''NywxMzE5OCwxMzE5OSwxMzI1MiwxNzYsMjA4MjUsMjA4MjcsMjA4MzAsMjA4MjksMjA4MzMsMjA4MzUsMjE5OTEsMjk5MjksMzE5NTAsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MTUsOTYxNCw5NjEzLDk2MTIsOTYxMSw5NjEwLDk2MDksOTUzMiw5NTI0LDk1''@;'; put 'put ''MTYsOTUwOCw5NTAwLDk2MjAsOTQ3Miw5NDc0LDk2MjEsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTgxLDk1ODIsOTU4NCw5NTgzLDk1NTIsOTU2Niw5NTc4LDk1NjksOTY5OCw5Njk5LDk3MDEsOTcwMCw5NTg1LDk1ODYsOTU4Nyw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2''@;'; put 'put ''NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDIxMzEzLDIxMzE2LDIxMzE3LDY1MzEzLDY1MzE0LDY1MzE1LDY1''@;'; put 'put ''MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5''@;'; put 'put ''LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDky''@;'; put 'put ''Miw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDEyNTQ5LDEyNTUw''@;'; put 'put ''LDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEy''@;'; put 'put ''NTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDcyOSw3MTMsNzE0LDcxMSw3MTUsOTIxNiw5MjE3LDkyMTgsOTIxOSw5MjIwLDkyMjEsOTIyMiw5MjIzLDkyMjQsOTIyNSw5MjI2LDkyMjcsOTIyOCw5MjI5LDkyMzAsOTIzMSw5MjMyLDkyMzMsOTIzNCw5MjM1''@;'; put 'put ''LDkyMzYsOTIzNyw5MjM4LDkyMzksOTI0MCw5MjQxLDkyNDIsOTI0Myw5MjQ0LDkyNDUsOTI0Niw5MjQ3LDkyNDksODM2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NjgsMjAwNTcsMTk5NjksMTk5NzEsMjAwMzUsMjAwNjEsMjAxMDIsMjAxMDgsMjAxNTQsMjA3OTksMjA4MzcsMjA4NDMsMjA5NjAsMjA5OTIsMjA5OTMsMjExNDcsMjEyNjksMjEzMTMsMjEzNDAs''@;'; put 'put ''MjE0NDgsMTk5NzcsMTk5NzksMTk5NzYsMTk5NzgsMjAwMTEsMjAwMjQsMjA5NjEsMjAwMzcsMjAwNDAsMjAwNjMsMjAwNjIsMjAxMTAsMjAxMjksMjA4MDAsMjA5OTUsMjEyNDIsMjEzMTUsMjE0NDksMjE0NzUsMjIzMDMsMjI3NjMsMjI4MDUsMjI4MjMsMjI4OTksMjMzNzYsMjMzNzcsMjMz''@;'; put 'put ''NzksMjM1NDQsMjM1NjcsMjM1ODYsMjM2MDgsMjM2NjUsMjQwMjksMjQwMzcsMjQwNDksMjQwNTAsMjQwNTEsMjQwNjIsMjQxNzgsMjQzMTgsMjQzMzEsMjQzMzksMjUxNjUsMTk5ODUsMTk5ODQsMTk5ODEsMjAwMTMsMjAwMTYsMjAwMjUsMjAwNDMsMjM2MDksMjAxMDQsMjAxMTMsMjAxMTcs''@;'; put 'put ''MjAxMTQsMjAxMTYsMjAxMzAsMjAxNjEsMjAxNjAsMjAxNjMsMjAxNjYsMjAxNjcsMjAxNzMsMjAxNzAsMjAxNzEsMjAxNjQsMjA4MDMsMjA4MDEsMjA4MzksMjA4NDUsMjA4NDYsMjA4NDQsMjA4ODcsMjA5ODIsMjA5OTgsMjA5OTksMjFlMywyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMw''@;'; put 'put ''NSwyMTMyMCwyMTMxOSwyMTMxNywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYxMCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwyNDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2Mywy''@;'; put 'put ''NTE2NiwyNTkwMywyNTk5MSwyNjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1MiwyNjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2MywyNzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5''@;'; put 'put ''MywxOTk5MCwxOTk4OSwxOTk4OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3MywyMDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwy''@;'; put 'put ''MTE1MiwyMTE1MSwyMTI1MywyMTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwyMTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwyMTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUwMCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5''@;'; put 'put ''MCwyMTQ4OSwyMTQ4OCwyMTQ3NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgwNiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAzOSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwyNDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwy''@;'; put 'put ''NTE3MSwyNTE3MiwyNTE3MCwyNTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwyNjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywyNzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5''@;'; put 'put ''MywzZTQsMzAwMDEsMzAwMDIsMzAwMDMsMzAwOTEsMzAzMzMsMzAzODIsMzAzOTksMzA0NDYsMzA2ODMsMzA2OTAsMzA3MDcsMzEwMzQsMzExNjYsMzEzNDgsMzE0MzUsMTk5OTgsMTk5OTksMjAwNTAsMjAwNTEsMjAwNzMsMjAxMjEsMjAxMzIsMjAxMzQsMjAxMzMsMjAyMjMsMjAyMzMsMjAy''@;'; put 'put ''NDksMjAyMzQsMjAyNDUsMjAyMzcsMjAyNDAsMjAyNDEsMjAyMzksMjAyMTAsMjAyMTQsMjAyMTksMjAyMDgsMjAyMTEsMjAyMjEsMjAyMjUsMjAyMzUsMjA4MDksMjA4MDcsMjA4MDYsMjA4MDgsMjA4NDAsMjA4NDksMjA4NzcsMjA5MTIsMjEwMTUsMjEwMDksMjEwMTAsMjEwMDYsMjEwMTQs''@;'; put 'put ''MjExNTUsMjEyNTYsMjEyODEsMjEyODAsMjEzNjAsMjEzNjEsMjE1MTMsMjE1MTksMjE1MTYsMjE1MTQsMjE1MjAsMjE1MDUsMjE1MTUsMjE1MDgsMjE1MjEsMjE1MTcsMjE1MTIsMjE1MDcsMjE1MTgsMjE1MTAsMjE1MjIsMjIyNDAsMjIyMzgsMjIyMzcsMjIzMjMsMjIzMjAsMjIzMTIsMjIz''@;'; put 'put ''MTcsMjIzMTYsMjIzMTksMjIzMTMsMjI4MDksMjI4MTAsMjI4MzksMjI4NDAsMjI5MTYsMjI5MDQsMjI5MTUsMjI5MDksMjI5MDUsMjI5MTQsMjI5MTMsMjMzODMsMjMzODQsMjM0MzEsMjM0MzIsMjM0MjksMjM0MzMsMjM1NDYsMjM1NzQsMjM2NzMsMjQwMzAsMjQwNzAsMjQxODIsMjQxODAs''@;'; put 'put ''MjQzMzUsMjQzNDcsMjQ1MzcsMjQ1MzQsMjUxMDIsMjUxMDAsMjUxMDEsMjUxMDQsMjUxODcsMjUxNzksMjUxNzYsMjU5MTAsMjYwODksMjYwODgsMjYwOTIsMjYwOTMsMjYzNTQsMjYzNTUsMjYzNzcsMjY0MjksMjY0MjAsMjY0MTcsMjY0MjEsMjc0MjUsMjc0OTIsMjc1MTUsMjc2NzAsMjc3''@;'; put 'put ''NDEsMjc3MzUsMjc3MzcsMjc3NDMsMjc3NDQsMjc3MjgsMjc3MzMsMjc3NDUsMjc3MzksMjc3MjUsMjc3MjYsMjg3ODQsMjkyNzksMjkyNzcsMzAzMzQsMzE0ODEsMzE4NTksMzE5OTIsMzI1NjYsMzI2NTAsMzI3MDEsMzI3NjksMzI3NzEsMzI3ODAsMzI3ODYsMzI4MTksMzI4OTUsMzI5MDUs''@;'; put 'put ''MzI5MDcsMzI5MDgsMzMyNTEsMzMyNTgsMzMyNjcsMzMyNzYsMzMyOTIsMzMzMDcsMzMzMTEsMzMzOTAsMzMzOTQsMzM0MDYsMzQ0MTEsMzQ4ODAsMzQ4OTIsMzQ5MTUsMzUxOTksMzg0MzMsMjAwMTgsMjAxMzYsMjAzMDEsMjAzMDMsMjAyOTUsMjAzMTEsMjAzMTgsMjAyNzYsMjAzMTUsMjAz''@;'; put 'put ''MDksMjAyNzIsMjAzMDQsMjAzMDUsMjAyODUsMjAyODIsMjAyODAsMjAyOTEsMjAzMDgsMjAyODQsMjAyOTQsMjAzMjMsMjAzMTYsMjAzMjAsMjAyNzEsMjAzMDIsMjAyNzgsMjAzMTMsMjAzMTcsMjAyOTYsMjAzMTQsMjA4MTIsMjA4MTEsMjA4MTMsMjA4NTMsMjA5MTgsMjA5MTksMjEwMjks''@;'; put 'put ''MjEwMjgsMjEwMzMsMjEwMzQsMjEwMzIsMjExNjMsMjExNjEsMjExNjIsMjExNjQsMjEyODMsMjEzNjMsMjEzNjUsMjE1MzMsMjE1NDksMjE1MzQsMjE1NjYsMjE1NDIsMjE1ODIsMjE1NDMsMjE1NzQsMjE1NzEsMjE1NTUsMjE1NzYsMjE1NzAsMjE1MzEsMjE1NDUsMjE1NzgsMjE1NjEsMjE1''@;'; put 'put ''NjMsMjE1NjAsMjE1NTAsMjE1NTcsMjE1NTgsMjE1MzYsMjE1NjQsMjE1NjgsMjE1NTMsMjE1NDcsMjE1MzUsMjE1NDgsMjIyNTAsMjIyNTYsMjIyNDQsMjIyNTEsMjIzNDYsMjIzNTMsMjIzMzYsMjIzNDksMjIzNDMsMjIzNTAsMjIzMzQsMjIzNTIsMjIzNTEsMjIzMzEsMjI3NjcsMjI4NDYs''@;'; put 'put ''MjI5NDEsMjI5MzAsMjI5NTIsMjI5NDIsMjI5NDcsMjI5MzcsMjI5MzQsMjI5MjUsMjI5NDgsMjI5MzEsMjI5MjIsMjI5NDksMjMzODksMjMzODgsMjMzODYsMjMzODcsMjM0MzYsMjM0MzUsMjM0MzksMjM1OTYsMjM2MTYsMjM2MTcsMjM2MTUsMjM2MTQsMjM2OTYsMjM2OTcsMjM3MDAsMjM2''@;'; put 'put ''OTIsMjQwNDMsMjQwNzYsMjQyMDcsMjQxOTksMjQyMDIsMjQzMTEsMjQzMjQsMjQzNTEsMjQ0MjAsMjQ0MTgsMjQ0MzksMjQ0NDEsMjQ1MzYsMjQ1MjQsMjQ1MzUsMjQ1MjUsMjQ1NjEsMjQ1NTUsMjQ1NjgsMjQ1NTQsMjUxMDYsMjUxMDUsMjUyMjAsMjUyMzksMjUyMzgsMjUyMTYsMjUyMDYs''@;'; put 'put ''MjUyMjUsMjUxOTcsMjUyMjYsMjUyMTIsMjUyMTQsMjUyMDksMjUyMDMsMjUyMzQsMjUxOTksMjUyNDAsMjUxOTgsMjUyMzcsMjUyMzUsMjUyMzMsMjUyMjIsMjU5MTMsMjU5MTUsMjU5MTIsMjYwOTcsMjYzNTYsMjY0NjMsMjY0NDYsMjY0NDcsMjY0NDgsMjY0NDksMjY0NjAsMjY0NTQsMjY0''@;'; put 'put ''NjIsMjY0NDEsMjY0MzgsMjY0NjQsMjY0NTEsMjY0NTUsMjc0OTMsMjc1OTksMjc3MTQsMjc3NDIsMjc4MDEsMjc3NzcsMjc3ODQsMjc3ODUsMjc3ODEsMjc4MDMsMjc3NTQsMjc3NzAsMjc3OTIsMjc3NjAsMjc3ODgsMjc3NTIsMjc3OTgsMjc3OTQsMjc3NzMsMjc3NzksMjc3NjIsMjc3NzQs''@;'; put 'put ''Mjc3NjQsMjc3ODIsMjc3NjYsMjc3ODksMjc3OTYsMjc4MDAsMjc3NzgsMjg3OTAsMjg3OTYsMjg3OTcsMjg3OTIsMjkyODIsMjkyODEsMjkyODAsMjkzODAsMjkzNzgsMjk1OTAsMjk5OTYsMjk5OTUsMzAwMDcsMzAwMDgsMzAzMzgsMzA0NDcsMzA2OTEsMzExNjksMzExNjgsMzExNjcsMzEz''@;'; put 'put ''NTAsMzE5OTUsMzI1OTcsMzI5MTgsMzI5MTUsMzI5MjUsMzI5MjAsMzI5MjMsMzI5MjIsMzI5NDYsMzMzOTEsMzM0MjYsMzM0MTksMzM0MjEsMzUyMTEsMzUyODIsMzUzMjgsMzU4OTUsMzU5MTAsMzU5MjUsMzU5OTcsMzYxOTYsMzYyMDgsMzYyNzUsMzY1MjMsMzY1NTQsMzY3NjMsMzY3ODQs''@;'; put 'put ''MzY4MDIsMzY4MDYsMzY4MDUsMzY4MDQsMjQwMzMsMzcwMDksMzcwMjYsMzcwMzQsMzcwMzAsMzcwMjcsMzcxOTMsMzczMTgsMzczMjQsMzg0NTAsMzg0NDYsMzg0NDksMzg0NDIsMzg0NDQsMjAwMDYsMjAwNTQsMjAwODMsMjAxMDcsMjAxMjMsMjAxMjYsMjAxMzksMjAxNDAsMjAzMzUsMjAz''@;'; put 'put ''ODEsMjAzNjUsMjAzMzksMjAzNTEsMjAzMzIsMjAzNzksMjAzNjMsMjAzNTgsMjAzNTUsMjAzMzYsMjAzNDEsMjAzNjAsMjAzMjksMjAzNDcsMjAzNzQsMjAzNTAsMjAzNjcsMjAzNjksMjAzNDYsMjA4MjAsMjA4MTgsMjA4MjEsMjA4NDEsMjA4NTUsMjA4NTQsMjA4NTYsMjA5MjUsMjA5ODks''@;'; put 'put ''MjEwNTEsMjEwNDgsMjEwNDcsMjEwNTAsMjEwNDAsMjEwMzgsMjEwNDYsMjEwNTcsMjExODIsMjExNzksMjEzMzAsMjEzMzIsMjEzMzEsMjEzMjksMjEzNTAsMjEzNjcsMjEzNjgsMjEzNjksMjE0NjIsMjE0NjAsMjE0NjMsMjE2MTksMjE2MjEsMjE2NTQsMjE2MjQsMjE2NTMsMjE2MzIsMjE2''@;'; put 'put ''MjcsMjE2MjMsMjE2MzYsMjE2NTAsMjE2MzgsMjE2MjgsMjE2NDgsMjE2MTcsMjE2MjIsMjE2NDQsMjE2NTgsMjE2MDIsMjE2MDgsMjE2NDMsMjE2MjksMjE2NDYsMjIyNjYsMjI0MDMsMjIzOTEsMjIzNzgsMjIzNzcsMjIzNjksMjIzNzQsMjIzNzIsMjIzOTYsMjI4MTIsMjI4NTcsMjI4NTUs''@;'; put 'put ''MjI4NTYsMjI4NTIsMjI4NjgsMjI5NzQsMjI5NzEsMjI5OTYsMjI5NjksMjI5NTgsMjI5OTMsMjI5ODIsMjI5OTIsMjI5ODksMjI5ODcsMjI5OTUsMjI5ODYsMjI5NTksMjI5NjMsMjI5OTQsMjI5ODEsMjMzOTEsMjMzOTYsMjMzOTUsMjM0NDcsMjM0NTAsMjM0NDgsMjM0NTIsMjM0NDksMjM0''@;'; put 'put ''NTEsMjM1NzgsMjM2MjQsMjM2MjEsMjM2MjIsMjM3MzUsMjM3MTMsMjM3MzYsMjM3MjEsMjM3MjMsMjM3MjksMjM3MzEsMjQwODgsMjQwOTAsMjQwODYsMjQwODUsMjQwOTEsMjQwODEsMjQxODQsMjQyMTgsMjQyMTUsMjQyMjAsMjQyMTMsMjQyMTQsMjQzMTAsMjQzNTgsMjQzNTksMjQzNjEs''@;'; put 'put ''MjQ0NDgsMjQ0NDksMjQ0NDcsMjQ0NDQsMjQ1NDEsMjQ1NDQsMjQ1NzMsMjQ1NjUsMjQ1NzUsMjQ1OTEsMjQ1OTYsMjQ2MjMsMjQ2MjksMjQ1OTgsMjQ2MTgsMjQ1OTcsMjQ2MDksMjQ2MTUsMjQ2MTcsMjQ2MTksMjQ2MDMsMjUxMTAsMjUxMDksMjUxNTEsMjUxNTAsMjUxNTIsMjUyMTUsMjUy''@;'; put 'put ''ODksMjUyOTIsMjUyODQsMjUyNzksMjUyODIsMjUyNzMsMjUyOTgsMjUzMDcsMjUyNTksMjUyOTksMjUzMDAsMjUyOTEsMjUyODgsMjUyNTYsMjUyNzcsMjUyNzYsMjUyOTYsMjUzMDUsMjUyODcsMjUyOTMsMjUyNjksMjUzMDYsMjUyNjUsMjUzMDQsMjUzMDIsMjUzMDMsMjUyODYsMjUyNjAs''@;'; put 'put ''MjUyOTQsMjU5MTgsMjYwMjMsMjYwNDQsMjYxMDYsMjYxMzIsMjYxMzEsMjYxMjQsMjYxMTgsMjYxMTQsMjYxMjYsMjYxMTIsMjYxMjcsMjYxMzMsMjYxMjIsMjYxMTksMjYzODEsMjYzNzksMjY0NzcsMjY1MDcsMjY1MTcsMjY0ODEsMjY1MjQsMjY0ODMsMjY0ODcsMjY1MDMsMjY1MjUsMjY1''@;'; put 'put ''MTksMjY0NzksMjY0ODAsMjY0OTUsMjY1MDUsMjY0OTQsMjY1MTIsMjY0ODUsMjY1MjIsMjY1MTUsMjY0OTIsMjY0NzQsMjY0ODIsMjc0MjcsMjc0OTQsMjc0OTUsMjc1MTksMjc2NjcsMjc2NzUsMjc4NzUsMjc4ODAsMjc4OTEsMjc4MjUsMjc4NTIsMjc4NzcsMjc4MjcsMjc4MzcsMjc4Mzgs''@;'; put 'put ''Mjc4MzYsMjc4NzQsMjc4MTksMjc4NjEsMjc4NTksMjc4MzIsMjc4NDQsMjc4MzMsMjc4NDEsMjc4MjIsMjc4NjMsMjc4NDUsMjc4ODksMjc4MzksMjc4MzUsMjc4NzMsMjc4NjcsMjc4NTAsMjc4MjAsMjc4ODcsMjc4NjgsMjc4NjIsMjc4NzIsMjg4MjEsMjg4MTQsMjg4MTgsMjg4MTAsMjg4''@;'; put 'put ''MjUsMjkyMjgsMjkyMjksMjkyNDAsMjkyNTYsMjkyODcsMjkyODksMjkzNzYsMjkzOTAsMjk0MDEsMjkzOTksMjkzOTIsMjk2MDksMjk2MDgsMjk1OTksMjk2MTEsMjk2MDUsMzAwMTMsMzAxMDksMzAxMDUsMzAxMDYsMzAzNDAsMzA0MDIsMzA0NTAsMzA0NTIsMzA2OTMsMzA3MTcsMzEwMzgs''@;'; put 'put ''MzEwNDAsMzEwNDEsMzExNzcsMzExNzYsMzEzNTQsMzEzNTMsMzE0ODIsMzE5OTgsMzI1OTYsMzI2NTIsMzI2NTEsMzI3NzMsMzI5NTQsMzI5MzMsMzI5MzAsMzI5NDUsMzI5MjksMzI5MzksMzI5MzcsMzI5NDgsMzI5MzgsMzI5NDMsMzMyNTMsMzMyNzgsMzMyOTMsMzM0NTksMzM0MzcsMzM0''@;'; put 'put ''MzMsMzM0NTMsMzM0NjksMzM0MzksMzM0NjUsMzM0NTcsMzM0NTIsMzM0NDUsMzM0NTUsMzM0NjQsMzM0NDMsMzM0NTYsMzM0NzAsMzM0NjMsMzQzODIsMzQ0MTcsMjEwMjEsMzQ5MjAsMzY1NTUsMzY4MTQsMzY4MjAsMzY4MTcsMzcwNDUsMzcwNDgsMzcwNDEsMzcwNDYsMzczMTksMzczMjks''@;'; put 'put ''MzgyNjMsMzgyNzIsMzg0MjgsMzg0NjQsMzg0NjMsMzg0NTksMzg0NjgsMzg0NjYsMzg1ODUsMzg2MzIsMzg3MzgsMzg3NTAsMjAxMjcsMjAxNDEsMjAxNDIsMjA0NDksMjA0MDUsMjAzOTksMjA0MTUsMjA0NDgsMjA0MzMsMjA0MzEsMjA0NDUsMjA0MTksMjA0MDYsMjA0NDAsMjA0NDcsMjA0''@;'; put 'put ''MjYsMjA0MzksMjAzOTgsMjA0MzIsMjA0MjAsMjA0MTgsMjA0NDIsMjA0MzAsMjA0NDYsMjA0MDcsMjA4MjMsMjA4ODIsMjA4ODEsMjA4OTYsMjEwNzAsMjEwNTksMjEwNjYsMjEwNjksMjEwNjgsMjEwNjcsMjEwNjMsMjExOTEsMjExOTMsMjExODcsMjExODUsMjEyNjEsMjEzMzUsMjEzNzEs''@;'; put 'put ''MjE0MDIsMjE0NjcsMjE2NzYsMjE2OTYsMjE2NzIsMjE3MTAsMjE3MDUsMjE2ODgsMjE2NzAsMjE2ODMsMjE3MDMsMjE2OTgsMjE2OTMsMjE2NzQsMjE2OTcsMjE3MDAsMjE3MDQsMjE2NzksMjE2NzUsMjE2ODEsMjE2OTEsMjE2NzMsMjE2NzEsMjE2OTUsMjIyNzEsMjI0MDIsMjI0MTEsMjI0''@;'; put 'put ''MzIsMjI0MzUsMjI0MzQsMjI0NzgsMjI0NDYsMjI0MTksMjI4NjksMjI4NjUsMjI4NjMsMjI4NjIsMjI4NjQsMjMwMDQsMjNlMywyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAxMywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwyMzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwy''@;'; put 'put ''MzQ2MSwyMzU1MywyMzYzMCwyMzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2MiwyNDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwyNDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYw''@;'; put 'put ''NSwyNDYwOCwyNDYxMywyNDU5MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwyNTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywy''@;'; put 'put ''NTMyNCwyNTM0MiwyNTMzMiwyNTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywyNjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1MiwyNjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0''@;'; put 'put ''MywyNjYxMywyNjYwMSwyNjYwNywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3MywyNzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwy''@;'; put 'put ''Nzk0NiwyNzk2OSwyNzk0MSwyNzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2MywyNzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwyNzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1''@;'; put 'put ''NiwyODg0NiwyODgzNiwyOTIzMiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQwOCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwzMDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwz''@;'; put 'put ''MDMyOCwzMDM0MiwzMDM0MywzMDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwzMDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwzMDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4''@;'; put 'put ''NSwzMTE4NiwzMTE3OSwzMTM1OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAwMiwzMjAwNSwzMmUzLDMyMDA5LDMyMDA3LDMyMDA0LDMyMDA2LDMyNTY4LDMyNjU0LDMyNzAzLDMyNzcyLDMyNzg0LDMyNzgxLDMyNzg1LDMyODIyLDMyOTgyLDMyOTk3LDMyOTg2LDMyOTYzLDMyOTY0LDMy''@;'; put 'put ''OTcyLDMyOTkzLDMyOTg3LDMyOTc0LDMyOTkwLDMyOTk2LDMyOTg5LDMzMjY4LDMzMzE0LDMzNTExLDMzNTM5LDMzNTQxLDMzNTA3LDMzNDk5LDMzNTEwLDMzNTQwLDMzNTA5LDMzNTM4LDMzNTQ1LDMzNDkwLDMzNDk1LDMzNTIxLDMzNTM3LDMzNTAwLDMzNDkyLDMzNDg5LDMzNTAyLDMzNDkx''@;'; put 'put ''LDMzNTAzLDMzNTE5LDMzNTQyLDM0Mzg0LDM0NDI1LDM0NDI3LDM0NDI2LDM0ODkzLDM0OTIzLDM1MjAxLDM1Mjg0LDM1MzM2LDM1MzMwLDM1MzMxLDM1OTk4LDM2ZTMsMzYyMTIsMzYyMTEsMzYyNzYsMzY1NTcsMzY1NTYsMzY4NDgsMzY4MzgsMzY4MzQsMzY4NDIsMzY4MzcsMzY4NDUsMzY4''@;'; put 'put ''NDMsMzY4MzYsMzY4NDAsMzcwNjYsMzcwNzAsMzcwNTcsMzcwNTksMzcxOTUsMzcxOTQsMzczMjUsMzgyNzQsMzg0ODAsMzg0NzUsMzg0NzYsMzg0NzcsMzg3NTQsMzg3NjEsMzg4NTksMzg4OTMsMzg4OTksMzg5MTMsMzkwODAsMzkxMzEsMzkxMzUsMzkzMTgsMzkzMjEsMjAwNTYsMjAxNDcs''@;'; put 'put ''MjA0OTIsMjA0OTMsMjA1MTUsMjA0NjMsMjA1MTgsMjA1MTcsMjA0NzIsMjA1MjEsMjA1MDIsMjA0ODYsMjA1NDAsMjA1MTEsMjA1MDYsMjA0OTgsMjA0OTcsMjA0NzQsMjA0ODAsMjA1MDAsMjA1MjAsMjA0NjUsMjA1MTMsMjA0OTEsMjA1MDUsMjA1MDQsMjA0NjcsMjA0NjIsMjA1MjUsMjA1''@;'; put 'put ''MjIsMjA0NzgsMjA1MjMsMjA0ODksMjA4NjAsMjA5MDAsMjA5MDEsMjA4OTgsMjA5NDEsMjA5NDAsMjA5MzQsMjA5MzksMjEwNzgsMjEwODQsMjEwNzYsMjEwODMsMjEwODUsMjEyOTAsMjEzNzUsMjE0MDcsMjE0MDUsMjE0NzEsMjE3MzYsMjE3NzYsMjE3NjEsMjE4MTUsMjE3NTYsMjE3MzMs''@;'; put 'put ''MjE3NDYsMjE3NjYsMjE3NTQsMjE3ODAsMjE3MzcsMjE3NDEsMjE3MjksMjE3NjksMjE3NDIsMjE3MzgsMjE3MzQsMjE3OTksMjE3NjcsMjE3NTcsMjE3NzUsMjIyNzUsMjIyNzYsMjI0NjYsMjI0ODQsMjI0NzUsMjI0NjcsMjI1MzcsMjI3OTksMjI4NzEsMjI4NzIsMjI4NzQsMjMwNTcsMjMw''@;'; put 'put ''NjQsMjMwNjgsMjMwNzEsMjMwNjcsMjMwNTksMjMwMjAsMjMwNzIsMjMwNzUsMjMwODEsMjMwNzcsMjMwNTIsMjMwNDksMjM0MDMsMjM2NDAsMjM0NzIsMjM0NzUsMjM0NzgsMjM0NzYsMjM0NzAsMjM0NzcsMjM0ODEsMjM0ODAsMjM1NTYsMjM2MzMsMjM2MzcsMjM2MzIsMjM3ODksMjM4MDUs''@;'; put 'put ''MjM4MDMsMjM3ODYsMjM3ODQsMjM3OTIsMjM3OTgsMjM4MDksMjM3OTYsMjQwNDYsMjQxMDksMjQxMDcsMjQyMzUsMjQyMzcsMjQyMzEsMjQzNjksMjQ0NjYsMjQ0NjUsMjQ0NjQsMjQ2NjUsMjQ2NzUsMjQ2NzcsMjQ2NTYsMjQ2NjEsMjQ2ODUsMjQ2ODEsMjQ2ODcsMjQ3MDgsMjQ3MzUsMjQ3''@;'; put 'put ''MzAsMjQ3MTcsMjQ3MjQsMjQ3MTYsMjQ3MDksMjQ3MjYsMjUxNTksMjUzMzEsMjUzNTIsMjUzNDMsMjU0MjIsMjU0MDYsMjUzOTEsMjU0MjksMjU0MTAsMjU0MTQsMjU0MjMsMjU0MTcsMjU0MDIsMjU0MjQsMjU0MDUsMjUzODYsMjUzODcsMjUzODQsMjU0MjEsMjU0MjAsMjU5MjgsMjU5Mjks''@;'; put 'put ''MjYwMDksMjYwNDksMjYwNTMsMjYxNzgsMjYxODUsMjYxOTEsMjYxNzksMjYxOTQsMjYxODgsMjYxODEsMjYxNzcsMjYzNjAsMjYzODgsMjYzODksMjYzOTEsMjY2NTcsMjY2ODAsMjY2OTYsMjY2OTQsMjY3MDcsMjY2ODEsMjY2OTAsMjY3MDgsMjY2NjUsMjY4MDMsMjY2NDcsMjY3MDAsMjY3''@;'; put 'put ''MDUsMjY2ODUsMjY2MTIsMjY3MDQsMjY2ODgsMjY2ODQsMjY2OTEsMjY2NjYsMjY2OTMsMjY2NDMsMjY2NDgsMjY2ODksMjc1MzAsMjc1MjksMjc1NzUsMjc2ODMsMjc2ODcsMjc2ODgsMjc2ODYsMjc2ODQsMjc4ODgsMjgwMTAsMjgwNTMsMjgwNDAsMjgwMzksMjgwMDYsMjgwMjQsMjgwMjMs''@;'; put 'put ''Mjc5OTMsMjgwNTEsMjgwMTIsMjgwNDEsMjgwMTQsMjc5OTQsMjgwMjAsMjgwMDksMjgwNDQsMjgwNDIsMjgwMjUsMjgwMzcsMjgwMDUsMjgwNTIsMjg4NzQsMjg4ODgsMjg5MDAsMjg4ODksMjg4NzIsMjg4NzksMjkyNDEsMjkzMDUsMjk0MzYsMjk0MzMsMjk0MzcsMjk0MzIsMjk0MzEsMjk1''@;'; put 'put ''NzQsMjk2NzcsMjk3MDUsMjk2NzgsMjk2NjQsMjk2NzQsMjk2NjIsMzAwMzYsMzAwNDUsMzAwNDQsMzAwNDIsMzAwNDEsMzAxNDIsMzAxNDksMzAxNTEsMzAxMzAsMzAxMzEsMzAxNDEsMzAxNDAsMzAxMzcsMzAxNDYsMzAxMzYsMzAzNDcsMzAzODQsMzA0MTAsMzA0MTMsMzA0MTQsMzA1MDUs''@;'; put 'put ''MzA0OTUsMzA0OTYsMzA1MDQsMzA2OTcsMzA3NjgsMzA3NTksMzA3NzYsMzA3NDksMzA3NzIsMzA3NzUsMzA3NTcsMzA3NjUsMzA3NTIsMzA3NTEsMzA3NzAsMzEwNjEsMzEwNTYsMzEwNzIsMzEwNzEsMzEwNjIsMzEwNzAsMzEwNjksMzEwNjMsMzEwNjYsMzEyMDQsMzEyMDMsMzEyMDcsMzEx''@;'; put 'put ''OTksMzEyMDYsMzEyMDksMzExOTIsMzEzNjQsMzEzNjgsMzE0NDksMzE0OTQsMzE1MDUsMzE4ODEsMzIwMzMsMzIwMjMsMzIwMTEsMzIwMTAsMzIwMzIsMzIwMzQsMzIwMjAsMzIwMTYsMzIwMjEsMzIwMjYsMzIwMjgsMzIwMTMsMzIwMjUsMzIwMjcsMzI1NzAsMzI2MDcsMzI2NjAsMzI3MDks''@;'; put 'put ''MzI3MDUsMzI3NzQsMzI3OTIsMzI3ODksMzI3OTMsMzI3OTEsMzI4MjksMzI4MzEsMzMwMDksMzMwMjYsMzMwMDgsMzMwMjksMzMwMDUsMzMwMTIsMzMwMzAsMzMwMTYsMzMwMTEsMzMwMzIsMzMwMjEsMzMwMzQsMzMwMjAsMzMwMDcsMzMyNjEsMzMyNjAsMzMyODAsMzMyOTYsMzMzMjIsMzMz''@;'; put 'put ''MjMsMzMzMjAsMzMzMjQsMzM0NjcsMzM1NzksMzM2MTgsMzM2MjAsMzM2MTAsMzM1OTIsMzM2MTYsMzM2MDksMzM1ODksMzM1ODgsMzM2MTUsMzM1ODYsMzM1OTMsMzM1OTAsMzM1NTksMzM2MDAsMzM1ODUsMzM1NzYsMzM2MDMsMzQzODgsMzQ0NDIsMzQ0NzQsMzQ0NTEsMzQ0NjgsMzQ0NzMs''@;'; put 'put ''MzQ0NDQsMzQ0NjcsMzQ0NjAsMzQ5MjgsMzQ5MzUsMzQ5NDUsMzQ5NDYsMzQ5NDEsMzQ5MzcsMzUzNTIsMzUzNDQsMzUzNDIsMzUzNDAsMzUzNDksMzUzMzgsMzUzNTEsMzUzNDcsMzUzNTAsMzUzNDMsMzUzNDUsMzU5MTIsMzU5NjIsMzU5NjEsMzYwMDEsMzYwMDIsMzYyMTUsMzY1MjQsMzY1''@;'; put 'put ''NjIsMzY1NjQsMzY1NTksMzY3ODUsMzY4NjUsMzY4NzAsMzY4NTUsMzY4NjQsMzY4NTgsMzY4NTIsMzY4NjcsMzY4NjEsMzY4NjksMzY4NTYsMzcwMTMsMzcwODksMzcwODUsMzcwOTAsMzcyMDIsMzcxOTcsMzcxOTYsMzczMzYsMzczNDEsMzczMzUsMzczNDAsMzczMzcsMzgyNzUsMzg0OTgs''@;'; put 'put ''Mzg0OTksMzg0OTcsMzg0OTEsMzg0OTMsMzg1MDAsMzg0ODgsMzg0OTQsMzg1ODcsMzkxMzgsMzkzNDAsMzk1OTIsMzk2NDAsMzk3MTcsMzk3MzAsMzk3NDAsMjAwOTQsMjA2MDIsMjA2MDUsMjA1NzIsMjA1NTEsMjA1NDcsMjA1NTYsMjA1NzAsMjA1NTMsMjA1ODEsMjA1OTgsMjA1NTgsMjA1''@;'; put 'put ''NjUsMjA1OTcsMjA1OTYsMjA1OTksMjA1NTksMjA0OTUsMjA1OTEsMjA1ODksMjA4MjgsMjA4ODUsMjA5NzYsMjEwOTgsMjExMDMsMjEyMDIsMjEyMDksMjEyMDgsMjEyMDUsMjEyNjQsMjEyNjMsMjEyNzMsMjEzMTEsMjEzMTIsMjEzMTAsMjE0NDMsMjYzNjQsMjE4MzAsMjE4NjYsMjE4NjIs''@;'; put 'put ''MjE4MjgsMjE4NTQsMjE4NTcsMjE4MjcsMjE4MzQsMjE4MDksMjE4NDYsMjE4MzksMjE4NDUsMjE4MDcsMjE4NjAsMjE4MTYsMjE4MDYsMjE4NTIsMjE4MDQsMjE4NTksMjE4MTEsMjE4MjUsMjE4NDcsMjIyODAsMjIyODMsMjIyODEsMjI0OTUsMjI1MzMsMjI1MzgsMjI1MzQsMjI0OTYsMjI1''@;'; put 'put ''MDAsMjI1MjIsMjI1MzAsMjI1ODEsMjI1MTksMjI1MjEsMjI4MTYsMjI4ODIsMjMwOTQsMjMxMDUsMjMxMTMsMjMxNDIsMjMxNDYsMjMxMDQsMjMxMDAsMjMxMzgsMjMxMzAsMjMxMTAsMjMxMTQsMjM0MDgsMjM0OTUsMjM0OTMsMjM0OTIsMjM0OTAsMjM0ODcsMjM0OTQsMjM1NjEsMjM1NjAs''@;'; put 'put ''MjM1NTksMjM2NDgsMjM2NDQsMjM2NDUsMjM4MTUsMjM4MTQsMjM4MjIsMjM4MzUsMjM4MzAsMjM4NDIsMjM4MjUsMjM4NDksMjM4MjgsMjM4MzMsMjM4NDQsMjM4NDcsMjM4MzEsMjQwMzQsMjQxMjAsMjQxMTgsMjQxMTUsMjQxMTksMjQyNDcsMjQyNDgsMjQyNDYsMjQyNDUsMjQyNTQsMjQz''@;'; put 'put ''NzMsMjQzNzUsMjQ0MDcsMjQ0MjgsMjQ0MjUsMjQ0MjcsMjQ0NzEsMjQ0NzMsMjQ0NzgsMjQ0NzIsMjQ0ODEsMjQ0ODAsMjQ0NzYsMjQ3MDMsMjQ3MzksMjQ3MTMsMjQ3MzYsMjQ3NDQsMjQ3NzksMjQ3NTYsMjQ4MDYsMjQ3NjUsMjQ3NzMsMjQ3NjMsMjQ3NTcsMjQ3OTYsMjQ3NjQsMjQ3OTIs''@;'; put 'put ''MjQ3ODksMjQ3NzQsMjQ3OTksMjQ3NjAsMjQ3OTQsMjQ3NzUsMjUxMTQsMjUxMTUsMjUxNjAsMjU1MDQsMjU1MTEsMjU0NTgsMjU0OTQsMjU1MDYsMjU1MDksMjU0NjMsMjU0NDcsMjU0OTYsMjU1MTQsMjU0NTcsMjU1MTMsMjU0ODEsMjU0NzUsMjU0OTksMjU0NTEsMjU1MTIsMjU0NzYsMjU0''@;'; put 'put ''ODAsMjU0OTcsMjU1MDUsMjU1MTYsMjU0OTAsMjU0ODcsMjU0NzIsMjU0NjcsMjU0NDksMjU0NDgsMjU0NjYsMjU5NDksMjU5NDIsMjU5MzcsMjU5NDUsMjU5NDMsMjE4NTUsMjU5MzUsMjU5NDQsMjU5NDEsMjU5NDAsMjYwMTIsMjYwMTEsMjYwMjgsMjYwNjMsMjYwNTksMjYwNjAsMjYwNjIs''@;'; put 'put ''MjYyMDUsMjYyMDIsMjYyMTIsMjYyMTYsMjYyMTQsMjYyMDYsMjYzNjEsMjEyMDcsMjYzOTUsMjY3NTMsMjY3OTksMjY3ODYsMjY3NzEsMjY4MDUsMjY3NTEsMjY3NDIsMjY4MDEsMjY3OTEsMjY3NzUsMjY4MDAsMjY3NTUsMjY4MjAsMjY3OTcsMjY3NTgsMjY3NTcsMjY3NzIsMjY3ODEsMjY3''@;'; put 'put ''OTIsMjY3ODMsMjY3ODUsMjY3NTQsMjc0NDIsMjc1NzgsMjc2MjcsMjc2MjgsMjc2OTEsMjgwNDYsMjgwOTIsMjgxNDcsMjgxMjEsMjgwODIsMjgxMjksMjgxMDgsMjgxMzIsMjgxNTUsMjgxNTQsMjgxNjUsMjgxMDMsMjgxMDcsMjgwNzksMjgxMTMsMjgwNzgsMjgxMjYsMjgxNTMsMjgwODgs''@;'; put 'put ''MjgxNTEsMjgxNDksMjgxMDEsMjgxMTQsMjgxODYsMjgwODUsMjgxMjIsMjgxMzksMjgxMjAsMjgxMzgsMjgxNDUsMjgxNDIsMjgxMzYsMjgxMDIsMjgxMDAsMjgwNzQsMjgxNDAsMjgwOTUsMjgxMzQsMjg5MjEsMjg5MzcsMjg5MzgsMjg5MjUsMjg5MTEsMjkyNDUsMjkzMDksMjkzMTMsMjk0''@;'; put 'put ''NjgsMjk0NjcsMjk0NjIsMjk0NTksMjk0NjUsMjk1NzUsMjk3MDEsMjk3MDYsMjk2OTksMjk3MDIsMjk2OTQsMjk3MDksMjk5MjAsMjk5NDIsMjk5NDMsMjk5ODAsMjk5ODYsMzAwNTMsMzAwNTQsMzAwNTAsMzAwNjQsMzAwOTUsMzAxNjQsMzAxNjUsMzAxMzMsMzAxNTQsMzAxNTcsMzAzNTAs''@;'; put 'put ''MzA0MjAsMzA0MTgsMzA0MjcsMzA1MTksMzA1MjYsMzA1MjQsMzA1MTgsMzA1MjAsMzA1MjIsMzA4MjcsMzA3ODcsMzA3OTgsMzEwNzcsMzEwODAsMzEwODUsMzEyMjcsMzEzNzgsMzEzODEsMzE1MjAsMzE1MjgsMzE1MTUsMzE1MzIsMzE1MjYsMzE1MTMsMzE1MTgsMzE1MzQsMzE4OTAsMzE4''@;'; put 'put ''OTUsMzE4OTMsMzIwNzAsMzIwNjcsMzIxMTMsMzIwNDYsMzIwNTcsMzIwNjAsMzIwNjQsMzIwNDgsMzIwNTEsMzIwNjgsMzIwNDcsMzIwNjYsMzIwNTAsMzIwNDksMzI1NzMsMzI2NzAsMzI2NjYsMzI3MTYsMzI3MTgsMzI3MjIsMzI3OTYsMzI4NDIsMzI4MzgsMzMwNzEsMzMwNDYsMzMwNTks''@;'; put 'put ''MzMwNjcsMzMwNjUsMzMwNzIsMzMwNjAsMzMyODIsMzMzMzMsMzMzMzUsMzMzMzQsMzMzMzcsMzM2NzgsMzM2OTQsMzM2ODgsMzM2NTYsMzM2OTgsMzM2ODYsMzM3MjUsMzM3MDcsMzM2ODIsMzM2NzQsMzM2ODMsMzM2NzMsMzM2OTYsMzM2NTUsMzM2NTksMzM2NjAsMzM2NzAsMzM3MDMsMzQz''@;'; put 'put ''ODksMjQ0MjYsMzQ1MDMsMzQ0OTYsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MDIsMzQ1MDcsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ4OTksMzQ5NzQsMzQ5NTIsMzQ5ODcsMzQ5NjIsMzQ5NjYsMzQ5NTcsMzQ5NTUsMzUyMTksMzUyMTUsMzUzNzAsMzUzNTcsMzUzNjMsMzUzNjUsMzUzNzcsMzUzNzMs''@;'; put 'put ''MzUzNTksMzUzNTUsMzUzNjIsMzU5MTMsMzU5MzAsMzYwMDksMzYwMTIsMzYwMTEsMzYwMDgsMzYwMTAsMzYwMDcsMzYxOTksMzYxOTgsMzYyODYsMzYyODIsMzY1NzEsMzY1NzUsMzY4ODksMzY4NzcsMzY4OTAsMzY4ODcsMzY4OTksMzY4OTUsMzY4OTMsMzY4ODAsMzY4ODUsMzY4OTQsMzY4''@;'; put 'put ''OTYsMzY4NzksMzY4OTgsMzY4ODYsMzY4OTEsMzY4ODQsMzcwOTYsMzcxMDEsMzcxMTcsMzcyMDcsMzczMjYsMzczNjUsMzczNTAsMzczNDcsMzczNTEsMzczNTcsMzczNTMsMzgyODEsMzg1MDYsMzg1MTcsMzg1MTUsMzg1MjAsMzg1MTIsMzg1MTYsMzg1MTgsMzg1MTksMzg1MDgsMzg1OTIs''@;'; put 'put ''Mzg2MzQsMzg2MzMsMzE0NTYsMzE0NTUsMzg5MTQsMzg5MTUsMzk3NzAsNDAxNjUsNDA1NjUsNDA1NzUsNDA2MTMsNDA2MzUsMjA2NDIsMjA2MjEsMjA2MTMsMjA2MzMsMjA2MjUsMjA2MDgsMjA2MzAsMjA2MzIsMjA2MzQsMjYzNjgsMjA5NzcsMjExMDYsMjExMDgsMjExMDksMjEwOTcsMjEy''@;'; put 'put ''MTQsMjEyMTMsMjEyMTEsMjEzMzgsMjE0MTMsMjE4ODMsMjE4ODgsMjE5MjcsMjE4ODQsMjE4OTgsMjE5MTcsMjE5MTIsMjE4OTAsMjE5MTYsMjE5MzAsMjE5MDgsMjE4OTUsMjE4OTksMjE4OTEsMjE5MzksMjE5MzQsMjE5MTksMjE4MjIsMjE5MzgsMjE5MTQsMjE5NDcsMjE5MzIsMjE5Mzcs''@;'; put 'put ''MjE4ODYsMjE4OTcsMjE5MzEsMjE5MTMsMjIyODUsMjI1NzUsMjI1NzAsMjI1ODAsMjI1NjQsMjI1NzYsMjI1NzcsMjI1NjEsMjI1NTcsMjI1NjAsMjI3NzcsMjI3NzgsMjI4ODAsMjMxNTksMjMxOTQsMjMxNjcsMjMxODYsMjMxOTUsMjMyMDcsMjM0MTEsMjM0MDksMjM1MDYsMjM1MDAsMjM1''@;'; put 'put ''MDcsMjM1MDQsMjM1NjIsMjM1NjMsMjM2MDEsMjM4ODQsMjM4ODgsMjM4NjAsMjM4NzksMjQwNjEsMjQxMzMsMjQxMjUsMjQxMjgsMjQxMzEsMjQxOTAsMjQyNjYsMjQyNTcsMjQyNTgsMjQyNjAsMjQzODAsMjQ0MjksMjQ0ODksMjQ0OTAsMjQ0ODgsMjQ3ODUsMjQ4MDEsMjQ3NTQsMjQ3NTgs''@;'; put 'put ''MjQ4MDAsMjQ4NjAsMjQ4NjcsMjQ4MjYsMjQ4NTMsMjQ4MTYsMjQ4MjcsMjQ4MjAsMjQ5MzYsMjQ4MTcsMjQ4NDYsMjQ4MjIsMjQ4NDEsMjQ4MzIsMjQ4NTAsMjUxMTksMjUxNjEsMjU1MDcsMjU0ODQsMjU1NTEsMjU1MzYsMjU1NzcsMjU1NDUsMjU1NDIsMjU1NDksMjU1NTQsMjU1NzEsMjU1''@;'; put 'put ''NTIsMjU1NjksMjU1NTgsMjU1ODEsMjU1ODIsMjU0NjIsMjU1ODgsMjU1NzgsMjU1NjMsMjU2ODIsMjU1NjIsMjU1OTMsMjU5NTAsMjU5NTgsMjU5NTQsMjU5NTUsMjYwMDEsMjZlMywyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwyNjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwy''@;'; put 'put ''NjM2NiwyNjM2NywyNjM5OSwyNjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwyNjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2NiwyNjg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1''@;'; put 'put ''NCwyNzQ1MCwyNzQ1MywyNzU0NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5MiwyODE5NywyODE5NSwyODE4NywyODI1MSwyODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwy''@;'; put 'put ''ODI3MSwyODIxMiwyODIzNywyODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwyODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwyODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMx''@;'; put 'put ''MiwyOTQ5NCwyOTQ3NywyOTQ5MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTczMCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwzMDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3Niwz''@;'; put 'put ''MDMzMSwzMDMzMiwzMDM1OCwzMDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwzMDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwzMTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2''@;'; put 'put ''NSwzMTU2MywzMTU2NywzMTU2OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEwNCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjExNSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwzMjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwz''@;'; put 'put ''MzEwMiwzMzA4MSwzMzA5NCwzMzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwzMzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwzMzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgwMiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzcz''@;'; put 'put ''OCwzMzg0OCwzMzgwNiwzMzc5NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkwMywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywzNTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwz''@;'; put 'put ''NTM5MywzNTQxMiwzNTQxOSwzNTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4MiwzNTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywzNjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAzMSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMx''@;'; put 'put ''NywzNjI5OSwzNjMxNCwzNjMwNSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYwMCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEyMiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwzNzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwz''@;'; put 'put ''NzQwNiwzNzM4OSwzNzM5MiwzNzM4MywzNzM5MywzODI5MiwzODI4NywzODI4MywzODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywzODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0''@;'; put 'put ''MiwzODg2MCwzODkxNywzODkxOCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3NywyMDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwy''@;'; put 'put ''MTExOSwyMTExMSwyMTExNywyMTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwyMTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwyMTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5''@;'; put 'put ''MSwyMjYyMiwyMjYwOSwyMjYxNiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYwNCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwyMzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwy''@;'; put 'put ''NDI2NSwyNDI2NCwyNDMzOCwyNDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0NywyNDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwyNDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYx''@;'; put 'put ''OSwyNTY2MiwyNTYzMCwyNTY0MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYyOCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAzMiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwyNjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwy''@;'; put 'put ''Njk4OSwyNjk3MCwyNjk5OSwyNjk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwyNjk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwyNjk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0''@;'; put 'put ''MiwyODM1NCwyODMwNCwyODMxNywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMyNywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywyOTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwy''@;'; put 'put ''OTAwNCwyOTAyOSwyOTAyMiwyODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2NiwyOTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwyOTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5''@;'; put 'put ''NCwzMDE5MywzMDIwMiwzMDIwNywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2MiwzMDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwz''@;'; put 'put ''MDg2NSwzMDg2NywzMDg0NywzMTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwzMTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywzMTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTkyMSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEy''@;'; put 'put ''OSwzMjE0MywzMjA5MSwzMjYyMiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEyNSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwzMzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwz''@;'; put 'put ''Mzg1MywzMzg0MSwzMzkwOSwzMzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4MywzMzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5NiwzNDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2''@;'; put 'put ''NiwzNDU3MCwzNDkwNSwzNTAzOSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAzNywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2MywzNTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywz''@;'; put 'put ''NTQyNiwzNTQzOCwzNTQzNiwzNTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwzNTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwzNjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMzNSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUz''@;'; put 'put ''MCwzNjYxMSwzNjYxNywzNjYwNiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkzOCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwzNzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwz''@;'; put 'put ''NzQzMSwzNzQ2MywzNzQzMiwzNzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwzNzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2NiwzODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYwNSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0''@;'; put 'put ''OSwzODY0NiwzODc0MiwzODc3MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODkyMiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwy''@;'; put 'put ''MDcxNywyMDY5OCwyMDY5MywyMDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywyMDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0MywyMjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAyNSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAy''@;'; put 'put ''NCwyMjAzMiwyMjAwNiwyMjI5NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3MywyMzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwy''@;'; put 'put ''MzUyNywyMzUyMSwyMzUyNSwyMzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwyMzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwyNDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQzMiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkz''@;'; put 'put ''MCwyNDkzMSwyNDkyNywyNDkyMiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcwOSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwyNjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwy''@;'; put 'put ''NzAyOSwyNzA3MywyNzA1NCwyNzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2NywyNzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0MywyNzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQzNiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0''@;'; put 'put ''OCwyODQ2MCwyODQzMSwyODQxOCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5NiwyODQxNywyODQwMiwyODM2NCwyODQwNywyOTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwy''@;'; put 'put ''OTI0NiwyOTMzMCwyOTMzNCwyOTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwyOTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywzMDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4''@;'; put 'put ''OSwzMDg4MywzMTExOCwzMTExOSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQwMSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYzNiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwzMTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1Niwz''@;'; put 'put ''MjE4OSwzMjE5MCwzMjE2MCwzMjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4NiwzMjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwzMjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2''@;'; put 'put ''MiwzMzE1MSwzMzE1NCwzMzI1NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwzMzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwz''@;'; put 'put ''NDU5NCwzNDU5NywzNDYxMiwzNDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwzNTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwzNTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4''@;'; put 'put ''MCwzNTQ3MywzNTQ4MiwzNTQ5NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYyNywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1NiwzNjk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwz''@;'; put 'put ''NzE0NSwzNzE0NCwzNzE1MCwzNzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5NiwzNzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwzNzUyMSwzODMwNSwzODMxMiwzODMxMywzODMwNywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYw''@;'; put 'put ''NCwzODYxMCwzODY1NiwzODc4MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwy''@;'; put 'put ''MDczMSwyMDcyNSwyMDcyOSwyMDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1NiwyMTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwyMjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2''@;'; put 'put ''MywyMjA2NCwyMjY1NiwyMjY4NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUzNCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1MiwyMzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwy''@;'; put 'put ''NDI5MCwyNDI4MiwyNDI4NywyNDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywyNDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1NiwyNDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4''@;'; put 'put ''MCwyNTAwNiwyNTEzNCwyNTcwNSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTczNiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1MywyNTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4Niwy''@;'; put 'put ''NjI4MywyNjI5MiwyNjI4OSwyNzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2NiwyNzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywyNzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUx''@;'; put 'put ''OCwyODUwMCwyODU1MCwyODUyNSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUzOCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwyOTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywy''@;'; put 'put ''OTgyMiwyOTgyNCwzMDA3OSwzMDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0NiwzMDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwzMDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDkyMiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5''@;'; put 'put ''MiwzMTI5NiwzMTI5MywzMTI4NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIyNCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwzMjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwz''@;'; put 'put ''MjIzMywzMjE1OCwzMjIxNywzMjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4NywzMjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwzNDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAy''@;'; put 'put ''OCwzNDA4NSwzNDA0NywzNDA1NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5MywzNTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3Nywz''@;'; put 'put ''NTUzMSwzNTU3NiwzNTUwNiwzNTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0MiwzNTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2MiwzNjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1''@;'; put 'put ''NSwzNjI1OSwzNjM5NSwzNjM2OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwzNjk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwz''@;'; put 'put ''NzE1OSwzNzE2OSwzNzI1NSwzNzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2MywzNzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwzNzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5''@;'; put 'put ''NSwzODc5OSwzODk0NSwzODk1NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwzOTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0''@;'; put 'put ''MDE5NSw0MDYxNyw0MDYzOCw0MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwyMDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwyMjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjExNiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEy''@;'; put 'put ''NywyMjEyNCwyMjExNCwyMjEzNCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAwMSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwyNTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywy''@;'; put 'put ''NTc4NywyNTc4OCwyNTgxOCwyNTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwyNTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwyNjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIyNSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIz''@;'; put 'put ''MywyNzIxMSwyNzIwNywyNzE4OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYwOCwyODYwMSwyODU5OCwyODU4MiwyODU3NiwyODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwy''@;'; put 'put ''OTE0MSwyOTExMywyOTEzNCwyOTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwyOTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwzMDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYyNCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1''@;'; put 'put ''NiwzMDk1MSwzMTE0MiwzMTMwOSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQxOCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwzMjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3Miwz''@;'; put 'put ''MjYzMywzMjY5MCwzMjc1MiwzMjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5MywzMzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1MiwzNDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcw''@;'; put 'put ''MSwzNDkxMywzNTExNCwzNTEyMiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIzOCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwzNTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4Nywz''@;'; put 'put ''NjA4NCwzNjQyMCwzNjQwMSwzNjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2NywzNjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwzNjk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYy''@;'; put 'put ''OCwzNzY3NSwzNzYzNiwzNzY1OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3OCwzODY2OSwzODY3NSwzODY3MSwzODc0NywzODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwz''@;'; put 'put ''ODk2NywzODk1NywzODk2OSwzODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwzOTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwzOTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIzMCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0''@;'; put 'put ''NSw0MDg2MCwyMDc3OCwyMDc2NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywyMzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwy''@;'; put 'put ''NDM5NiwyNDUwOSwyNTAzMywyNTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwyNTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwyNTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMyOSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5''@;'; put 'put ''MiwyNzM1NSwyNzI5OSwyNzI2MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwyODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwy''@;'; put 'put ''OTE2NiwyOTE1OCwyOTE1NywyOTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywyOTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwzMDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3''@;'; put 'put ''MCwzMDk2NCwzMDk1OSwzMDk3NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwzMjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwz''@;'; put 'put ''MjMxNywzMjMwNSwzMjMyNSwzMjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwzMjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwzMjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIxOCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1''@;'; put 'put ''NiwzMzI4OSwzMzM5MywzNDIxOCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDczOSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0NywzNDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwz''@;'; put 'put ''NTEyOCwzNTEzMywzNTI0NCwzNTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwzNTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5MywzNjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQyNSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3''@;'; put 'put ''NCwzNjY3NywzNjY3MSwzNjk5MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcwNiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwzNzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0Niwz''@;'; put 'put ''ODM0NywzODM0OCwzODM0NCwzODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwzODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwzOTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2''@;'; put 'put ''Nyw0MDc2Niw0MDc3OSwyMTQ3NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwyNzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwy''@;'; put 'put ''NzMxMCwyNzMxMSwyNzQ4NywyNzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwyODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwyOTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1''@;'; put 'put ''MiwzMDk5MCwzMTE1MCwzMTMyOSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwzMjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwz''@;'; put 'put ''MzIzMSwzMzI5MCwzNDI1NSwzNDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwzNDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwzNTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYyNywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1''@;'; put 'put ''MiwzNjQ0NywzNjQzNywzNjU0NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzN2UzLDM3MjkxLDM3MjkyLDM3MzI4LDM3NzgwLDM3NzcwLDM3NzgyLDM3Nzk0LDM3ODExLDM3ODA2LDM3ODA0LDM3ODA4LDM3Nzg0LDM3Nzg2LDM3NzgzLDM4MzU2LDM4MzU4LDM4MzUyLDM4MzU3LDM4NjI2LDM4''@;'; put 'put ''NjIwLDM4NjE3LDM4NjE5LDM4NjIyLDM4NjkyLDM4ODE5LDM4ODIyLDM4ODI5LDM4OTA1LDM4OTg5LDM4OTkxLDM4OTg4LDM4OTkwLDM4OTk1LDM5MDk4LDM5MjMwLDM5MjMxLDM5MjI5LDM5MjE0LDM5MzMzLDM5NDM4LDM5NjE3LDM5NjgzLDM5Njg2LDM5NzU5LDM5NzU4LDM5NzU3LDM5ODgy''@;'; put 'put ''LDM5ODgxLDM5OTMzLDM5ODgwLDM5ODcyLDQwMjczLDQwMjg1LDQwMjg4LDQwNjcyLDQwNzI1LDQwNzQ4LDIwNzg3LDIyMTgxLDIyNzUwLDIyNzUxLDIyNzU0LDIzNTQxLDQwODQ4LDI0MzAwLDI1MDc0LDI1MDc5LDI1MDc4LDI1MDc3LDI1ODU2LDI1ODcxLDI2MzM2LDI2MzMzLDI3MzY1LDI3''@;'; put 'put ''MzU3LDI3MzU0LDI3MzQ3LDI4Njk5LDI4NzAzLDI4NzEyLDI4Njk4LDI4NzAxLDI4NjkzLDI4Njk2LDI5MTkwLDI5MTk3LDI5MjcyLDI5MzQ2LDI5NTYwLDI5NTYyLDI5ODg1LDI5ODk4LDI5OTIzLDMwMDg3LDMwMDg2LDMwMzAzLDMwMzA1LDMwNjYzLDMxMDAxLDMxMTUzLDMxMzM5LDMxMzM3''@;'; put 'put ''LDMxODA2LDMxODA3LDMxODAwLDMxODA1LDMxNzk5LDMxODA4LDMyMzYzLDMyMzY1LDMyMzc3LDMyMzYxLDMyMzYyLDMyNjQ1LDMyMzcxLDMyNjk0LDMyNjk3LDMyNjk2LDMzMjQwLDM0MjgxLDM0MjY5LDM0MjgyLDM0MjYxLDM0Mjc2LDM0Mjc3LDM0Mjk1LDM0ODExLDM0ODIxLDM0ODI5LDM0''@;'; put 'put ''ODA5LDM0ODE0LDM1MTY4LDM1MTY3LDM1MTU4LDM1MTY2LDM1NjQ5LDM1Njc2LDM1NjcyLDM1NjU3LDM1Njc0LDM1NjYyLDM1NjYzLDM1NjU0LDM1NjczLDM2MTA0LDM2MTA2LDM2NDc2LDM2NDY2LDM2NDg3LDM2NDcwLDM2NDYwLDM2NDc0LDM2NDY4LDM2NjkyLDM2Njg2LDM2NzgxLDM3MDAy''@;'; put 'put ''LDM3MDAzLDM3Mjk3LDM3Mjk0LDM3ODU3LDM3ODQxLDM3ODU1LDM3ODI3LDM3ODMyLDM3ODUyLDM3ODUzLDM3ODQ2LDM3ODU4LDM3ODM3LDM3ODQ4LDM3ODYwLDM3ODQ3LDM3ODY0LDM4MzY0LDM4NTgwLDM4NjI3LDM4Njk4LDM4Njk1LDM4NzUzLDM4ODc2LDM4OTA3LDM5MDA2LDM5ZTMsMzkw''@;'; put 'put ''MDMsMzkxMDAsMzkyMzcsMzkyNDEsMzk0NDYsMzk0NDksMzk2OTMsMzk5MTIsMzk5MTEsMzk4OTQsMzk4OTksNDAzMjksNDAyODksNDAzMDYsNDAyOTgsNDAzMDAsNDA1OTQsNDA1OTksNDA1OTUsNDA2MjgsMjEyNDAsMjIxODQsMjIxOTksMjIxOTgsMjIxOTYsMjIyMDQsMjI3NTYsMjMzNjAs''@;'; put 'put ''MjMzNjMsMjM0MjEsMjM1NDIsMjQwMDksMjUwODAsMjUwODIsMjU4ODAsMjU4NzYsMjU4ODEsMjYzNDIsMjY0MDcsMjczNzIsMjg3MzQsMjg3MjAsMjg3MjIsMjkyMDAsMjk1NjMsMjk5MDMsMzAzMDYsMzAzMDksMzEwMTQsMzEwMTgsMzEwMjAsMzEwMTksMzE0MzEsMzE0NzgsMzE4MjAsMzE4''@;'; put 'put ''MTEsMzE4MjEsMzE5ODMsMzE5ODQsMzY3ODIsMzIzODEsMzIzODAsMzIzODYsMzI1ODgsMzI3NjgsMzMyNDIsMzMzODIsMzQyOTksMzQyOTcsMzQzMjEsMzQyOTgsMzQzMTAsMzQzMTUsMzQzMTEsMzQzMTQsMzQ4MzYsMzQ4MzcsMzUxNzIsMzUyNTgsMzUzMjAsMzU2OTYsMzU2OTIsMzU2ODYs''@;'; put 'put ''MzU2OTUsMzU2NzksMzU2OTEsMzYxMTEsMzYxMDksMzY0ODksMzY0ODEsMzY0ODUsMzY0ODIsMzczMDAsMzczMjMsMzc5MTIsMzc4OTEsMzc4ODUsMzgzNjksMzg3MDQsMzkxMDgsMzkyNTAsMzkyNDksMzkzMzYsMzk0NjcsMzk0NzIsMzk0NzksMzk0NzcsMzk5NTUsMzk5NDksNDA1NjksNDA2''@;'; put 'put ''MjksNDA2ODAsNDA3NTEsNDA3OTksNDA4MDMsNDA4MDEsMjA3OTEsMjA3OTIsMjIyMDksMjIyMDgsMjIyMTAsMjI4MDQsMjM2NjAsMjQwMTMsMjUwODQsMjUwODYsMjU4ODUsMjU4ODQsMjYwMDUsMjYzNDUsMjczODcsMjczOTYsMjczODYsMjc1NzAsMjg3NDgsMjkyMTEsMjkzNTEsMjk5MTAs''@;'; put 'put ''Mjk5MDgsMzAzMTMsMzA2NzUsMzE4MjQsMzIzOTksMzIzOTYsMzI3MDAsMzQzMjcsMzQzNDksMzQzMzAsMzQ4NTEsMzQ4NTAsMzQ4NDksMzQ4NDcsMzUxNzgsMzUxODAsMzUyNjEsMzU3MDAsMzU3MDMsMzU3MDksMzYxMTUsMzY0OTAsMzY0OTMsMzY0OTEsMzY3MDMsMzY3ODMsMzczMDYsMzc5''@;'; put 'put ''MzQsMzc5MzksMzc5NDEsMzc5NDYsMzc5NDQsMzc5MzgsMzc5MzEsMzgzNzAsMzg3MTIsMzg3MTMsMzg3MDYsMzg5MTEsMzkwMTUsMzkwMTMsMzkyNTUsMzk0OTMsMzk0OTEsMzk0ODgsMzk0ODYsMzk2MzEsMzk3NjQsMzk3NjEsMzk5ODEsMzk5NzMsNDAzNjcsNDAzNzIsNDAzODYsNDAzNzYs''@;'; put 'put ''NDA2MDUsNDA2ODcsNDA3MjksNDA3OTYsNDA4MDYsNDA4MDcsMjA3OTYsMjA3OTUsMjIyMTYsMjIyMTgsMjIyMTcsMjM0MjMsMjQwMjAsMjQwMTgsMjQzOTgsMjUwODcsMjU4OTIsMjc0MDIsMjc0ODksMjg3NTMsMjg3NjAsMjk1NjgsMjk5MjQsMzAwOTAsMzAzMTgsMzAzMTYsMzExNTUsMzE4''@;'; put 'put ''NDAsMzE4MzksMzI4OTQsMzI4OTMsMzMyNDcsMzUxODYsMzUxODMsMzUzMjQsMzU3MTIsMzYxMTgsMzYxMTksMzY0OTcsMzY0OTksMzY3MDUsMzcxOTIsMzc5NTYsMzc5NjksMzc5NzAsMzg3MTcsMzg3MTgsMzg4NTEsMzg4NDksMzkwMTksMzkyNTMsMzk1MDksMzk1MDEsMzk2MzQsMzk3MDYs''@;'; put 'put ''NDAwMDksMzk5ODUsMzk5OTgsMzk5OTUsNDA0MDMsNDA0MDcsNDA3NTYsNDA4MTIsNDA4MTAsNDA4NTIsMjIyMjAsMjQwMjIsMjUwODgsMjU4OTEsMjU4OTksMjU4OTgsMjYzNDgsMjc0MDgsMjk5MTQsMzE0MzQsMzE4NDQsMzE4NDMsMzE4NDUsMzI0MDMsMzI0MDYsMzI0MDQsMzMyNTAsMzQz''@;'; put 'put ''NjAsMzQzNjcsMzQ4NjUsMzU3MjIsMzcwMDgsMzcwMDcsMzc5ODcsMzc5ODQsMzc5ODgsMzg3NjAsMzkwMjMsMzkyNjAsMzk1MTQsMzk1MTUsMzk1MTEsMzk2MzUsMzk2MzYsMzk2MzMsNDAwMjAsNDAwMjMsNDAwMjIsNDA0MjEsNDA2MDcsNDA2OTIsMjIyMjUsMjI3NjEsMjU5MDAsMjg3NjYs''@;'; put 'put ''MzAzMjEsMzAzMjIsMzA2NzksMzI1OTIsMzI2NDgsMzQ4NzAsMzQ4NzMsMzQ5MTQsMzU3MzEsMzU3MzAsMzU3MzQsMzMzOTksMzYxMjMsMzczMTIsMzc5OTQsMzg3MjIsMzg3MjgsMzg3MjQsMzg4NTQsMzkwMjQsMzk1MTksMzk3MTQsMzk3NjgsNDAwMzEsNDA0NDEsNDA0NDIsNDA1NzIsNDA1''@;'; put 'put ''NzMsNDA3MTEsNDA4MjMsNDA4MTgsMjQzMDcsMjc0MTQsMjg3NzEsMzE4NTIsMzE4NTQsMzQ4NzUsMzUyNjQsMzY1MTMsMzczMTMsMzgwMDIsMzhlMywzOTAyNSwzOTI2MiwzOTYzOCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4MiwzNTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwz''@;'; put 'put ''NTc0MCwzNjUyMiwzNzMxNywzODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwzMTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMz''@;'; put 'put ''Myw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAzMSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4NiwyMDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwy''@;'; put 'put ''MzQyNCwyNDAyNywxMjA4MywyNDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwyNjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEy''@;'; put 'put ''MzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgw''@;'; put 'put ''LDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEy''@;'; put 'put ''NDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1''@;'; put 'put ''LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEy''@;'; put 'put ''NDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAz''@;'; put 'put ''LDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEy''@;'; put 'put ''NTMxLDEyNTMyLDEyNTMzLDEyNTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2''@;'; put 'put ''NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5''@;'; put 'put ''OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDks''@;'; put 'put ''ODQ3MCw4NDgxLDEyNDQzLDEyNDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDExOTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDExOTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgz''@;'; put 'put ''LDExOTkwLDExOTkxLDExOTk4LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIsNjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwyMDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4Mywy''@;'; put 'put ''MDg3MSwxOTk4MiwyMDAxNCwyMDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwyMTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwyNzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAxNywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4''@;'; put 'put ''OSwyMDE4NiwyMTAwNCwyMTI3NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgzMSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwyNzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwy''@;'; put 'put ''OTU3OCwzMTE2MCwzMjkwNiwzODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywyMDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwyMDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkxMywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3''@;'; put 'put ''OSwyMTMyNSwyMTM4NiwyMTUxMSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMyNCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwyMzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwy''@;'; put 'put ''NDM0NiwyNDQzNiwyNDUzMywyNDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwyNTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwyNjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQyNiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzcz''@;'; put 'put ''MCwyNzc0MCwyNzcyNywyNzcyMiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQwNCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwzNTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwz''@;'; put 'put ''ODQzNCwzODQzNiwzODQzMiwzODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5NywyMDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwyMDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDkyMSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1''@;'; put 'put ''NywyMTM0NywyMTM2MiwyMTM5MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0NywyMjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0Nywy''@;'; put 'put ''MjM1NCwyMjc5MCwyMjg0OCwyMjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwyMjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwyMzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAz''@;'; put 'put ''MiwyNDA3NCwyNDA3OCwyNDIwMywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMyNSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0NywyNDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwy''@;'; put 'put ''NTE0NiwyNTIxOSwyNTIyOCwyNTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwyNTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwyNTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0''@;'; put 'put ''NCwyNjQ0MCwyNjQ2MSwyNjQ0NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1MywyNzgwMiwyNzc1NywyNzc4MywyNzc5NywyNzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwy''@;'; put 'put ''ODc4OCwyODc5NCwyOTI4MywyOTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3NywyOTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwzMDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgyMCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQy''@;'; put 'put ''NCwzMzQyMywzMzQxMywzMzQyMiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQxMiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAyNCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwyMDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1Miwy''@;'; put 'put ''MDM1OSwyMDM0MiwyMDM0MCwyMDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwyMDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4MiwyMDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMzNCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0''@;'; put 'put ''MywyMTA2MiwyMTA0MSwyMTE4MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYzMCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwyMTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywy''@;'; put 'put ''MTYwNywyMTYwNCwyMjI2MywyMjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwyMjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwyMjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3''@;'; put 'put ''NywyMjk2NiwyMjk3MiwyMjk3OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcyNiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywyMzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwy''@;'; put 'put ''MzcyMiwyMzcxOSwyMzcwOSwyMzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4NywyNDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0NiwyNDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYxNCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5''@;'; put 'put ''OSwyNDYyNywyNDYwMiwyNDYwNiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYyMiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwyNTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1Nywy''@;'; put 'put ''NTI2NCwyNTI3MiwyNTkxNywyNjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwyNjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwyNjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUw''@;'; put 'put ''MiwyNjUwMCwyNjQ4NCwyNjUwOSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUyMSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUxOCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwyNzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwy''@;'; put 'put ''Nzg3OSwyNzgzMSwyNzg1NiwyNzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwyNzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwyNzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgw''@;'; put 'put ''NSwyODgxOSwyODgwNiwyODgwNCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgwMywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQwMiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwyOTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5Nywy''@;'; put 'put ''OTkxNywyOTkyOCwzMDAxNSwzMDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4MywzMDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwzMDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkx''@;'; put 'put ''MSwzMjk0MiwzMjkzMSwzMjk1MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQzOCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwzMzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0Miwz''@;'; put 'put ''NDQxNiwzNDQxNSwzNDQxMywzNDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwzNjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwzODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQy''@;'; put 'put ''NywyMDQxNywyMDQzNiwyMDQ0NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQyMywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwyMTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwy''@;'; put 'put ''MTcxMSwyMTY5OSwzMzU0OSwyMTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwyMTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwyMjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQxMiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQx''@;'; put 'put ''NSwyMjQyNSwyMjQzNywyMjQyNiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAwOSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAzMCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywyMzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwy''@;'; put 'put ''MzAyMSwyMzQ2NCwyMzYyOCwyMzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwyMzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwyMzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5''@;'; put 'put ''NiwyNDEwMCwyNDI0MCwyNDIyOCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMyNywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2NywyNDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwy''@;'; put 'put ''NDY2NCwyNDY3OCwyNDY4NiwyNTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwyNTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwyNTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0''@;'; put 'put ''NywyNjE2NiwyNjE0NSwyNjE2MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwyNjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwy''@;'; put 'put ''NjYwMywyNjU5NiwyNjU5MSwyNjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwyNjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwyNjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYw''@;'; put 'put ''MiwyNjU3MSwyNzQzMiwyNzUyMiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYxNiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzkyMiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwyNzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywy''@;'; put 'put ''Nzk3MCwyNzkwNSwyNzkyOCwyNzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwyNzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2MiwyODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5''@;'; put 'put ''NiwyOTI5OSwyOTI5NCwyOTM4NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQxOCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYyMiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwyOTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0Mywy''@;'; put 'put ''OTkzMiwyOTkzNCwyOTk5OCwzMDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwzMDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwzMDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDczOCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcy''@;'; put 'put ''MywzMDczOSwzMTA1MCwzMTA1MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3MiwzMTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1Nywz''@;'; put 'put ''MjY1MywzMjcwMiwzMjc3NSwzMjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwzMjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwzMjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQy''@;'; put 'put ''OCwzMzQ5NywzMzUzNCwzMzUyOSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUzMSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwzMzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwz''@;'; put 'put ''NDQyOCwzNDQxOSwzNDg4MSwzNDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4MywzNTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1MywzNzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3''@;'; put 'put ''OSwzODQ4MSwzODQ4MywzODQ3NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwyMDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwy''@;'; put 'put ''MDg4NCwyMDg4MywyMDkzOCwyMDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwyMTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwyMTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTczNSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2''@;'; put 'put ''OCwyMTczOSwyMTc3NywyMTc2NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwyMjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwy''@;'; put 'put ''MjQ1NywyMjQ2NSwyMjc5OCwyMjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4NiwyMzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwyMzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgw''@;'; put 'put ''MSwyNDEwNSwyNDEwNCwyNDIzMiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcyMiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwyNDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywy''@;'; put 'put ''NTE1OCwyNTMzMCwyNTM2MCwyNTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwyNTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5NiwyNTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQxNSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQw''@;'; put 'put ''OCwyNTQxNiwyNTkzMCwyNTkyNiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywyNjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwy''@;'; put 'put ''NjY3MSwyNjcwMiwyNjY5MiwyNjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2MiwyNjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywyNzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUyOCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYy''@;'; put 'put ''MywyNzY4NSwyODAyNiwyODAwMywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAzOCwyNzk5OCwyODAwNywyOGUzLDI4MDU1LDI4MDE2LDI4MDI4LDI3OTk5LDI4MDM0LDI4MDU2LDI3OTUxLDI4''@;'; put 'put ''MDA4LDI4MDQzLDI4MDMwLDI4MDMyLDI4MDM2LDI3OTI2LDI4MDM1LDI4MDI3LDI4MDI5LDI4MDIxLDI4MDQ4LDI4ODkyLDI4ODgzLDI4ODgxLDI4ODkzLDI4ODc1LDMyNTY5LDI4ODk4LDI4ODg3LDI4ODgyLDI4ODk0LDI4ODk2LDI4ODg0LDI4ODc3LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODkw''@;'; put 'put ''LDI4ODc4LDI4ODk3LDI5MjUwLDI5MzA0LDI5MzAzLDI5MzAyLDI5NDQwLDI5NDM0LDI5NDI4LDI5NDM4LDI5NDMwLDI5NDI3LDI5NDM1LDI5NDQxLDI5NjUxLDI5NjU3LDI5NjY5LDI5NjU0LDI5NjI4LDI5NjcxLDI5NjY3LDI5NjczLDI5NjYwLDI5NjUwLDI5NjU5LDI5NjUyLDI5NjYxLDI5''@;'; put 'put ''NjU4LDI5NjU1LDI5NjU2LDI5NjcyLDI5OTE4LDI5OTE5LDI5OTQwLDI5OTQxLDI5OTg1LDMwMDQzLDMwMDQ3LDMwMTI4LDMwMTQ1LDMwMTM5LDMwMTQ4LDMwMTQ0LDMwMTQzLDMwMTM0LDMwMTM4LDMwMzQ2LDMwNDA5LDMwNDkzLDMwNDkxLDMwNDgwLDMwNDgzLDMwNDgyLDMwNDk5LDMwNDgx''@;'; put 'put ''LDMwNDg1LDMwNDg5LDMwNDkwLDMwNDk4LDMwNTAzLDMwNzU1LDMwNzY0LDMwNzU0LDMwNzczLDMwNzY3LDMwNzYwLDMwNzY2LDMwNzYzLDMwNzUzLDMwNzYxLDMwNzcxLDMwNzYyLDMwNzY5LDMxMDYwLDMxMDY3LDMxMDU1LDMxMDY4LDMxMDU5LDMxMDU4LDMxMDU3LDMxMjExLDMxMjEyLDMx''@;'; put 'put ''MjAwLDMxMjE0LDMxMjEzLDMxMjEwLDMxMTk2LDMxMTk4LDMxMTk3LDMxMzY2LDMxMzY5LDMxMzY1LDMxMzcxLDMxMzcyLDMxMzcwLDMxMzY3LDMxNDQ4LDMxNTA0LDMxNDkyLDMxNTA3LDMxNDkzLDMxNTAzLDMxNDk2LDMxNDk4LDMxNTAyLDMxNDk3LDMxNTA2LDMxODc2LDMxODg5LDMxODgy''@;'; put 'put ''LDMxODg0LDMxODgwLDMxODg1LDMxODc3LDMyMDMwLDMyMDI5LDMyMDE3LDMyMDE0LDMyMDI0LDMyMDIyLDMyMDE5LDMyMDMxLDMyMDE4LDMyMDE1LDMyMDEyLDMyNjA0LDMyNjA5LDMyNjA2LDMyNjA4LDMyNjA1LDMyNjAzLDMyNjYyLDMyNjU4LDMyNzA3LDMyNzA2LDMyNzA0LDMyNzkwLDMy''@;'; put 'put ''ODMwLDMyODI1LDMzMDE4LDMzMDEwLDMzMDE3LDMzMDEzLDMzMDI1LDMzMDE5LDMzMDI0LDMzMjgxLDMzMzI3LDMzMzE3LDMzNTg3LDMzNTgxLDMzNjA0LDMzNTYxLDMzNjE3LDMzNTczLDMzNjIyLDMzNTk5LDMzNjAxLDMzNTc0LDMzNTY0LDMzNTcwLDMzNjAyLDMzNjE0LDMzNTYzLDMzNTc4''@;'; put 'put ''LDMzNTQ0LDMzNTk2LDMzNjEzLDMzNTU4LDMzNTcyLDMzNTY4LDMzNTkxLDMzNTgzLDMzNTc3LDMzNjA3LDMzNjA1LDMzNjEyLDMzNjE5LDMzNTY2LDMzNTgwLDMzNjExLDMzNTc1LDMzNjA4LDM0Mzg3LDM0Mzg2LDM0NDY2LDM0NDcyLDM0NDU0LDM0NDQ1LDM0NDQ5LDM0NDYyLDM0NDM5LDM0''@;'; put 'put ''NDU1LDM0NDM4LDM0NDQzLDM0NDU4LDM0NDM3LDM0NDY5LDM0NDU3LDM0NDY1LDM0NDcxLDM0NDUzLDM0NDU2LDM0NDQ2LDM0NDYxLDM0NDQ4LDM0NDUyLDM0ODgzLDM0ODg0LDM0OTI1LDM0OTMzLDM0OTM0LDM0OTMwLDM0OTQ0LDM0OTI5LDM0OTQzLDM0OTI3LDM0OTQ3LDM0OTQyLDM0OTMy''@;'; put 'put ''LDM0OTQwLDM1MzQ2LDM1OTExLDM1OTI3LDM1OTYzLDM2MDA0LDM2MDAzLDM2MjE0LDM2MjE2LDM2Mjc3LDM2Mjc5LDM2Mjc4LDM2NTYxLDM2NTYzLDM2ODYyLDM2ODUzLDM2ODY2LDM2ODYzLDM2ODU5LDM2ODY4LDM2ODYwLDM2ODU0LDM3MDc4LDM3MDg4LDM3MDgxLDM3MDgyLDM3MDkxLDM3''@;'; put 'put ''MDg3LDM3MDkzLDM3MDgwLDM3MDgzLDM3MDc5LDM3MDg0LDM3MDkyLDM3MjAwLDM3MTk4LDM3MTk5LDM3MzMzLDM3MzQ2LDM3MzM4LDM4NDkyLDM4NDk1LDM4NTg4LDM5MTM5LDM5NjQ3LDM5NzI3LDIwMDk1LDIwNTkyLDIwNTg2LDIwNTc3LDIwNTc0LDIwNTc2LDIwNTYzLDIwNTU1LDIwNTcz''@;'; put 'put ''LDIwNTk0LDIwNTUyLDIwNTU3LDIwNTQ1LDIwNTcxLDIwNTU0LDIwNTc4LDIwNTAxLDIwNTQ5LDIwNTc1LDIwNTg1LDIwNTg3LDIwNTc5LDIwNTgwLDIwNTUwLDIwNTQ0LDIwNTkwLDIwNTk1LDIwNTY3LDIwNTYxLDIwOTQ0LDIxMDk5LDIxMTAxLDIxMTAwLDIxMTAyLDIxMjA2LDIxMjAzLDIx''@;'; put 'put ''MjkzLDIxNDA0LDIxODc3LDIxODc4LDIxODIwLDIxODM3LDIxODQwLDIxODEyLDIxODAyLDIxODQxLDIxODU4LDIxODE0LDIxODEzLDIxODA4LDIxODQyLDIxODI5LDIxNzcyLDIxODEwLDIxODYxLDIxODM4LDIxODE3LDIxODMyLDIxODA1LDIxODE5LDIxODI0LDIxODM1LDIyMjgyLDIyMjc5''@;'; put 'put ''LDIyNTIzLDIyNTQ4LDIyNDk4LDIyNTE4LDIyNDkyLDIyNTE2LDIyNTI4LDIyNTA5LDIyNTI1LDIyNTM2LDIyNTIwLDIyNTM5LDIyNTE1LDIyNDc5LDIyNTM1LDIyNTEwLDIyNDk5LDIyNTE0LDIyNTAxLDIyNTA4LDIyNDk3LDIyNTQyLDIyNTI0LDIyNTQ0LDIyNTAzLDIyNTI5LDIyNTQwLDIy''@;'; put 'put ''NTEzLDIyNTA1LDIyNTEyLDIyNTQxLDIyNTMyLDIyODc2LDIzMTM2LDIzMTI4LDIzMTI1LDIzMTQzLDIzMTM0LDIzMDk2LDIzMDkzLDIzMTQ5LDIzMTIwLDIzMTM1LDIzMTQxLDIzMTQ4LDIzMTIzLDIzMTQwLDIzMTI3LDIzMTA3LDIzMTMzLDIzMTIyLDIzMTA4LDIzMTMxLDIzMTEyLDIzMTgy''@;'; put 'put ''LDIzMTAyLDIzMTE3LDIzMDk3LDIzMTE2LDIzMTUyLDIzMTQ1LDIzMTExLDIzMTIxLDIzMTI2LDIzMTA2LDIzMTMyLDIzNDEwLDIzNDA2LDIzNDg5LDIzNDg4LDIzNjQxLDIzODM4LDIzODE5LDIzODM3LDIzODM0LDIzODQwLDIzODIwLDIzODQ4LDIzODIxLDIzODQ2LDIzODQ1LDIzODIzLDIz''@;'; put 'put ''ODU2LDIzODI2LDIzODQzLDIzODM5LDIzODU0LDI0MTI2LDI0MTE2LDI0MjQxLDI0MjQ0LDI0MjQ5LDI0MjQyLDI0MjQzLDI0Mzc0LDI0Mzc2LDI0NDc1LDI0NDcwLDI0NDc5LDI0NzE0LDI0NzIwLDI0NzEwLDI0NzY2LDI0NzUyLDI0NzYyLDI0Nzg3LDI0Nzg4LDI0NzgzLDI0ODA0LDI0Nzkz''@;'; put 'put ''LDI0Nzk3LDI0Nzc2LDI0NzUzLDI0Nzk1LDI0NzU5LDI0Nzc4LDI0NzY3LDI0NzcxLDI0NzgxLDI0NzY4LDI1Mzk0LDI1NDQ1LDI1NDgyLDI1NDc0LDI1NDY5LDI1NTMzLDI1NTAyLDI1NTE3LDI1NTAxLDI1NDk1LDI1NTE1LDI1NDg2LDI1NDU1LDI1NDc5LDI1NDg4LDI1NDU0LDI1NTE5LDI1''@;'; put 'put ''NDYxLDI1NTAwLDI1NDUzLDI1NTE4LDI1NDY4LDI1NTA4LDI1NDAzLDI1NTAzLDI1NDY0LDI1NDc3LDI1NDczLDI1NDg5LDI1NDg1LDI1NDU2LDI1OTM5LDI2MDYxLDI2MjEzLDI2MjA5LDI2MjAzLDI2MjAxLDI2MjA0LDI2MjEwLDI2MzkyLDI2NzQ1LDI2NzU5LDI2NzY4LDI2NzgwLDI2NzMz''@;'; put 'put ''LDI2NzM0LDI2Nzk4LDI2Nzk1LDI2OTY2LDI2NzM1LDI2Nzg3LDI2Nzk2LDI2NzkzLDI2NzQxLDI2NzQwLDI2ODAyLDI2NzY3LDI2NzQzLDI2NzcwLDI2NzQ4LDI2NzMxLDI2NzM4LDI2Nzk0LDI2NzUyLDI2NzM3LDI2NzUwLDI2Nzc5LDI2Nzc0LDI2NzYzLDI2Nzg0LDI2NzYxLDI2Nzg4LDI2''@;'; put 'put ''NzQ0LDI2NzQ3LDI2NzY5LDI2NzY0LDI2NzYyLDI2NzQ5LDI3NDQ2LDI3NDQzLDI3NDQ3LDI3NDQ4LDI3NTM3LDI3NTM1LDI3NTMzLDI3NTM0LDI3NTMyLDI3NjkwLDI4MDk2LDI4MDc1LDI4MDg0LDI4MDgzLDI4Mjc2LDI4MDc2LDI4MTM3LDI4MTMwLDI4MDg3LDI4MTUwLDI4MTE2LDI4MTYw''@;'; put 'put ''LDI4MTA0LDI4MTI4LDI4MTI3LDI4MTE4LDI4MDk0LDI4MTMzLDI4MTI0LDI4MTI1LDI4MTIzLDI4MTQ4LDI4MTA2LDI4MDkzLDI4MTQxLDI4MTQ0LDI4MDkwLDI4MTE3LDI4MDk4LDI4MTExLDI4MTA1LDI4MTEyLDI4MTQ2LDI4MTE1LDI4MTU3LDI4MTE5LDI4MTA5LDI4MTMxLDI4MDkxLDI4''@;'; put 'put ''OTIyLDI4OTQxLDI4OTE5LDI4OTUxLDI4OTE2LDI4OTQwLDI4OTEyLDI4OTMyLDI4OTE1LDI4OTQ0LDI4OTI0LDI4OTI3LDI4OTM0LDI4OTQ3LDI4OTI4LDI4OTIwLDI4OTE4LDI4OTM5LDI4OTMwLDI4OTQyLDI5MzEwLDI5MzA3LDI5MzA4LDI5MzExLDI5NDY5LDI5NDYzLDI5NDQ3LDI5NDU3''@;'; put 'put ''LDI5NDY0LDI5NDUwLDI5NDQ4LDI5NDM5LDI5NDU1LDI5NDcwLDI5NTc2LDI5Njg2LDI5Njg4LDI5Njg1LDI5NzAwLDI5Njk3LDI5NjkzLDI5NzAzLDI5Njk2LDI5NjkwLDI5NjkyLDI5Njk1LDI5NzA4LDI5NzA3LDI5Njg0LDI5NzA0LDMwMDUyLDMwMDUxLDMwMTU4LDMwMTYyLDMwMTU5LDMw''@;'; put 'put ''MTU1LDMwMTU2LDMwMTYxLDMwMTYwLDMwMzUxLDMwMzQ1LDMwNDE5LDMwNTIxLDMwNTExLDMwNTA5LDMwNTEzLDMwNTE0LDMwNTE2LDMwNTE1LDMwNTI1LDMwNTAxLDMwNTIzLDMwNTE3LDMwNzkyLDMwODAyLDMwNzkzLDMwNzk3LDMwNzk0LDMwNzk2LDMwNzU4LDMwNzg5LDMwODAwLDMxMDc2''@;'; put 'put ''LDMxMDc5LDMxMDgxLDMxMDgyLDMxMDc1LDMxMDgzLDMxMDczLDMxMTYzLDMxMjI2LDMxMjI0LDMxMjIyLDMxMjIzLDMxMzc1LDMxMzgwLDMxMzc2LDMxNTQxLDMxNTU5LDMxNTQwLDMxNTI1LDMxNTM2LDMxNTIyLDMxNTI0LDMxNTM5LDMxNTEyLDMxNTMwLDMxNTE3LDMxNTM3LDMxNTMxLDMx''@;'; put 'put ''NTMzLDMxNTM1LDMxNTM4LDMxNTQ0LDMxNTE0LDMxNTIzLDMxODkyLDMxODk2LDMxODk0LDMxOTA3LDMyMDUzLDMyMDYxLDMyMDU2LDMyMDU0LDMyMDU4LDMyMDY5LDMyMDQ0LDMyMDQxLDMyMDY1LDMyMDcxLDMyMDYyLDMyMDYzLDMyMDc0LDMyMDU5LDMyMDQwLDMyNjExLDMyNjYxLDMyNjY4''@;'; put 'put ''LDMyNjY5LDMyNjY3LDMyNzE0LDMyNzE1LDMyNzE3LDMyNzIwLDMyNzIxLDMyNzExLDMyNzE5LDMyNzEzLDMyNzk5LDMyNzk4LDMyNzk1LDMyODM5LDMyODM1LDMyODQwLDMzMDQ4LDMzMDYxLDMzMDQ5LDMzMDUxLDMzMDY5LDMzMDU1LDMzMDY4LDMzMDU0LDMzMDU3LDMzMDQ1LDMzMDYzLDMz''@;'; put 'put ''MDUzLDMzMDU4LDMzMjk3LDMzMzM2LDMzMzMxLDMzMzM4LDMzMzMyLDMzMzMwLDMzMzk2LDMzNjgwLDMzNjk5LDMzNzA0LDMzNjc3LDMzNjU4LDMzNjUxLDMzNzAwLDMzNjUyLDMzNjc5LDMzNjY1LDMzNjg1LDMzNjg5LDMzNjUzLDMzNjg0LDMzNzA1LDMzNjYxLDMzNjY3LDMzNjc2LDMzNjkz''@;'; put 'put ''LDMzNjkxLDMzNzA2LDMzNjc1LDMzNjYyLDMzNzAxLDMzNzExLDMzNjcyLDMzNjg3LDMzNzEyLDMzNjYzLDMzNzAyLDMzNjcxLDMzNzEwLDMzNjU0LDMzNjkwLDM0MzkzLDM0MzkwLDM0NDk1LDM0NDg3LDM0NDk4LDM0NDk3LDM0NTAxLDM0NDkwLDM0NDgwLDM0NTA0LDM0NDg5LDM0NDgzLDM0''@;'; put 'put ''NDg4LDM0NTA4LDM0NDg0LDM0NDkxLDM0NDkyLDM0NDk5LDM0NDkzLDM0NDk0LDM0ODk4LDM0OTUzLDM0OTY1LDM0OTg0LDM0OTc4LDM0OTg2LDM0OTcwLDM0OTYxLDM0OTc3LDM0OTc1LDM0OTY4LDM0OTgzLDM0OTY5LDM0OTcxLDM0OTY3LDM0OTgwLDM0OTg4LDM0OTU2LDM0OTYzLDM0OTU4''@;'; put 'put ''LDM1MjAyLDM1Mjg2LDM1Mjg5LDM1Mjg1LDM1Mzc2LDM1MzY3LDM1MzcyLDM1MzU4LDM1ODk3LDM1ODk5LDM1OTMyLDM1OTMzLDM1OTY1LDM2MDA1LDM2MjIxLDM2MjE5LDM2MjE3LDM2Mjg0LDM2MjkwLDM2MjgxLDM2Mjg3LDM2Mjg5LDM2NTY4LDM2NTc0LDM2NTczLDM2NTcyLDM2NTY3LDM2''@;'; put 'put ''NTc2LDM2NTc3LDM2OTAwLDM2ODc1LDM2ODgxLDM2ODkyLDM2ODc2LDM2ODk3LDM3MTAzLDM3MDk4LDM3MTA0LDM3MTA4LDM3MTA2LDM3MTA3LDM3MDc2LDM3MDk5LDM3MTAwLDM3MDk3LDM3MjA2LDM3MjA4LDM3MjEwLDM3MjAzLDM3MjA1LDM3MzU2LDM3MzY0LDM3MzYxLDM3MzYzLDM3MzY4''@;'; put 'put ''LDM3MzQ4LDM3MzY5LDM3MzU0LDM3MzU1LDM3MzY3LDM3MzUyLDM3MzU4LDM4MjY2LDM4Mjc4LDM4MjgwLDM4NTI0LDM4NTA5LDM4NTA3LDM4NTEzLDM4NTExLDM4NTkxLDM4NzYyLDM4OTE2LDM5MTQxLDM5MzE5LDIwNjM1LDIwNjI5LDIwNjI4LDIwNjM4LDIwNjE5LDIwNjQzLDIwNjExLDIw''@;'; put 'put ''NjIwLDIwNjIyLDIwNjM3LDIwNTg0LDIwNjM2LDIwNjI2LDIwNjEwLDIwNjE1LDIwODMxLDIwOTQ4LDIxMjY2LDIxMjY1LDIxNDEyLDIxNDE1LDIxOTA1LDIxOTI4LDIxOTI1LDIxOTMzLDIxODc5LDIyMDg1LDIxOTIyLDIxOTA3LDIxODk2LDIxOTAzLDIxOTQxLDIxODg5LDIxOTIzLDIxOTA2''@;'; put 'put ''LDIxOTI0LDIxODg1LDIxOTAwLDIxOTI2LDIxODg3LDIxOTA5LDIxOTIxLDIxOTAyLDIyMjg0LDIyNTY5LDIyNTgzLDIyNTUzLDIyNTU4LDIyNTY3LDIyNTYzLDIyNTY4LDIyNTE3LDIyNjAwLDIyNTY1LDIyNTU2LDIyNTU1LDIyNTc5LDIyNTkxLDIyNTgyLDIyNTc0LDIyNTg1LDIyNTg0LDIy''@;'; put 'put ''NTczLDIyNTcyLDIyNTg3LDIyODgxLDIzMjE1LDIzMTg4LDIzMTk5LDIzMTYyLDIzMjAyLDIzMTk4LDIzMTYwLDIzMjA2LDIzMTY0LDIzMjA1LDIzMjEyLDIzMTg5LDIzMjE0LDIzMDk1LDIzMTcyLDIzMTc4LDIzMTkxLDIzMTcxLDIzMTc5LDIzMjA5LDIzMTYzLDIzMTY1LDIzMTgwLDIzMTk2''@;'; put 'put ''LDIzMTgzLDIzMTg3LDIzMTk3LDIzNTMwLDIzNTAxLDIzNDk5LDIzNTA4LDIzNTA1LDIzNDk4LDIzNTAyLDIzNTY0LDIzNjAwLDIzODYzLDIzODc1LDIzOTE1LDIzODczLDIzODgzLDIzODcxLDIzODYxLDIzODg5LDIzODg2LDIzODkzLDIzODU5LDIzODY2LDIzODkwLDIzODY5LDIzODU3LDIz''@;'; put 'put ''ODk3LDIzODc0LDIzODY1LDIzODgxLDIzODY0LDIzODY4LDIzODU4LDIzODYyLDIzODcyLDIzODc3LDI0MTMyLDI0MTI5LDI0NDA4LDI0NDg2LDI0NDg1LDI0NDkxLDI0Nzc3LDI0NzYxLDI0NzgwLDI0ODAyLDI0NzgyLDI0NzcyLDI0ODUyLDI0ODE4LDI0ODQyLDI0ODU0LDI0ODM3LDI0ODIx''@;'; put 'put ''LDI0ODUxLDI0ODI0LDI0ODI4LDI0ODMwLDI0NzY5LDI0ODM1LDI0ODU2LDI0ODYxLDI0ODQ4LDI0ODMxLDI0ODM2LDI0ODQzLDI1MTYyLDI1NDkyLDI1NTIxLDI1NTIwLDI1NTUwLDI1NTczLDI1NTc2LDI1NTgzLDI1NTM5LDI1NzU3LDI1NTg3LDI1NTQ2LDI1NTY4LDI1NTkwLDI1NTU3LDI1''@;'; put 'put ''NTg2LDI1NTg5LDI1Njk3LDI1NTY3LDI1NTM0LDI1NTY1LDI1NTY0LDI1NTQwLDI1NTYwLDI1NTU1LDI1NTM4LDI1NTQzLDI1NTQ4LDI1NTQ3LDI1NTQ0LDI1NTg0LDI1NTU5LDI1NTYxLDI1OTA2LDI1OTU5LDI1OTYyLDI1OTU2LDI1OTQ4LDI1OTYwLDI1OTU3LDI1OTk2LDI2MDEzLDI2MDE0''@;'; put 'put ''LDI2MDMwLDI2MDY0LDI2MDY2LDI2MjM2LDI2MjIwLDI2MjM1LDI2MjQwLDI2MjI1LDI2MjMzLDI2MjE4LDI2MjI2LDI2MzY5LDI2ODkyLDI2ODM1LDI2ODg0LDI2ODQ0LDI2OTIyLDI2ODYwLDI2ODU4LDI2ODY1LDI2ODk1LDI2ODM4LDI2ODcxLDI2ODU5LDI2ODUyLDI2ODcwLDI2ODk5LDI2''@;'; put 'put ''ODk2LDI2ODY3LDI2ODQ5LDI2ODg3LDI2ODI4LDI2ODg4LDI2OTkyLDI2ODA0LDI2ODk3LDI2ODYzLDI2ODIyLDI2OTAwLDI2ODcyLDI2ODMyLDI2ODc3LDI2ODc2LDI2ODU2LDI2ODkxLDI2ODkwLDI2OTAzLDI2ODMwLDI2ODI0LDI2ODQ1LDI2ODQ2LDI2ODU0LDI2ODY4LDI2ODMzLDI2ODg2''@;'; put 'put ''LDI2ODM2LDI2ODU3LDI2OTAxLDI2OTE3LDI2ODIzLDI3NDQ5LDI3NDUxLDI3NDU1LDI3NDUyLDI3NTQwLDI3NTQzLDI3NTQ1LDI3NTQxLDI3NTgxLDI3NjMyLDI3NjM0LDI3NjM1LDI3Njk2LDI4MTU2LDI4MjMwLDI4MjMxLDI4MTkxLDI4MjMzLDI4Mjk2LDI4MjIwLDI4MjIxLDI4MjI5LDI4''@;'; put 'put ''MjU4LDI4MjAzLDI4MjIzLDI4MjI1LDI4MjUzLDI4Mjc1LDI4MTg4LDI4MjExLDI4MjM1LDI4MjI0LDI4MjQxLDI4MjE5LDI4MTYzLDI4MjA2LDI4MjU0LDI4MjY0LDI4MjUyLDI4MjU3LDI4MjA5LDI4MjAwLDI4MjU2LDI4MjczLDI4MjY3LDI4MjE3LDI4MTk0LDI4MjA4LDI4MjQzLDI4MjYx''@;'; put 'put ''LDI4MTk5LDI4MjgwLDI4MjYwLDI4Mjc5LDI4MjQ1LDI4MjgxLDI4MjQyLDI4MjYyLDI4MjEzLDI4MjE0LDI4MjUwLDI4OTYwLDI4OTU4LDI4OTc1LDI4OTIzLDI4OTc0LDI4OTc3LDI4OTYzLDI4OTY1LDI4OTYyLDI4OTc4LDI4OTU5LDI4OTY4LDI4OTg2LDI4OTU1LDI5MjU5LDI5Mjc0LDI5''@;'; put 'put ''MzIwLDI5MzIxLDI5MzE4LDI5MzE3LDI5MzIzLDI5NDU4LDI5NDUxLDI5NDg4LDI5NDc0LDI5NDg5LDI5NDkxLDI5NDc5LDI5NDkwLDI5NDg1LDI5NDc4LDI5NDc1LDI5NDkzLDI5NDUyLDI5NzQyLDI5NzQwLDI5NzQ0LDI5NzM5LDI5NzE4LDI5NzIyLDI5NzI5LDI5NzQxLDI5NzQ1LDI5NzMy''@;'; put 'put ''LDI5NzMxLDI5NzI1LDI5NzM3LDI5NzI4LDI5NzQ2LDI5OTQ3LDI5OTk5LDMwMDYzLDMwMDYwLDMwMTgzLDMwMTcwLDMwMTc3LDMwMTgyLDMwMTczLDMwMTc1LDMwMTgwLDMwMTY3LDMwMzU3LDMwMzU0LDMwNDI2LDMwNTM0LDMwNTM1LDMwNTMyLDMwNTQxLDMwNTMzLDMwNTM4LDMwNTQyLDMw''@;'; put 'put ''NTM5LDMwNTQwLDMwNjg2LDMwNzAwLDMwODE2LDMwODIwLDMwODIxLDMwODEyLDMwODI5LDMwODMzLDMwODI2LDMwODMwLDMwODMyLDMwODI1LDMwODI0LDMwODE0LDMwODE4LDMxMDkyLDMxMDkxLDMxMDkwLDMxMDg4LDMxMjM0LDMxMjQyLDMxMjM1LDMxMjQ0LDMxMjM2LDMxMzg1LDMxNDYy''@;'; put 'put ''LDMxNDYwLDMxNTYyLDMxNTQ3LDMxNTU2LDMxNTYwLDMxNTY0LDMxNTY2LDMxNTUyLDMxNTc2LDMxNTU3LDMxOTA2LDMxOTAyLDMxOTEyLDMxOTA1LDMyMDg4LDMyMTExLDMyMDk5LDMyMDgzLDMyMDg2LDMyMTAzLDMyMTA2LDMyMDc5LDMyMTA5LDMyMDkyLDMyMTA3LDMyMDgyLDMyMDg0LDMy''@;'; put 'put ''MTA1LDMyMDgxLDMyMDk1LDMyMDc4LDMyNTc0LDMyNTc1LDMyNjEzLDMyNjE0LDMyNjc0LDMyNjcyLDMyNjczLDMyNzI3LDMyODQ5LDMyODQ3LDMyODQ4LDMzMDIyLDMyOTgwLDMzMDkxLDMzMDk4LDMzMTA2LDMzMTAzLDMzMDk1LDMzMDg1LDMzMTAxLDMzMDgyLDMzMjU0LDMzMjYyLDMzMjcx''@;'; put 'put ''LDMzMjcyLDMzMjczLDMzMjg0LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzk3LDMzNTk1LDMzNzQzLDMzNzg1LDMzODI3LDMzNzI4LDMzNzY4LDMzODEwLDMzNzY3LDMzNzY0LDMzNzg4LDMzNzgyLDMzODA4LDMzNzM0LDMzNzM2LDMzNzcxLDMzNzYzLDMzNzI3LDMzNzkzLDMzNzU3LDMzNzY1LDMz''@;'; put 'put ''NzUyLDMzNzkxLDMzNzYxLDMzNzM5LDMzNzQyLDMzNzUwLDMzNzgxLDMzNzM3LDMzODAxLDMzODA3LDMzNzU4LDMzODA5LDMzNzk4LDMzNzMwLDMzNzc5LDMzNzQ5LDMzNzg2LDMzNzM1LDMzNzQ1LDMzNzcwLDMzODExLDMzNzMxLDMzNzcyLDMzNzc0LDMzNzMyLDMzNzg3LDMzNzUxLDMzNzYy''@;'; put 'put ''LDMzODE5LDMzNzU1LDMzNzkwLDM0NTIwLDM0NTMwLDM0NTM0LDM0NTE1LDM0NTMxLDM0NTIyLDM0NTM4LDM0NTI1LDM0NTM5LDM0NTI0LDM0NTQwLDM0NTM3LDM0NTE5LDM0NTM2LDM0NTEzLDM0ODg4LDM0OTAyLDM0OTAxLDM1MDAyLDM1MDMxLDM1MDAxLDM1ZTMsMzUwMDgsMzUwMDYsMzQ5''@;'; put 'put ''OTgsMzUwMDQsMzQ5OTksMzUwMDUsMzQ5OTQsMzUwNzMsMzUwMTcsMzUyMjEsMzUyMjQsMzUyMjMsMzUyOTMsMzUyOTAsMzUyOTEsMzU0MDYsMzU0MDUsMzUzODUsMzU0MTcsMzUzOTIsMzU0MTUsMzU0MTYsMzUzOTYsMzUzOTcsMzU0MTAsMzU0MDAsMzU0MDksMzU0MDIsMzU0MDQsMzU0MDcs''@;'; put 'put ''MzU5MzUsMzU5NjksMzU5NjgsMzYwMjYsMzYwMzAsMzYwMTYsMzYwMjUsMzYwMjEsMzYyMjgsMzYyMjQsMzYyMzMsMzYzMTIsMzYzMDcsMzYzMDEsMzYyOTUsMzYzMTAsMzYzMTYsMzYzMDMsMzYzMDksMzYzMTMsMzYyOTYsMzYzMTEsMzYyOTMsMzY1OTEsMzY1OTksMzY2MDIsMzY2MDEsMzY1''@;'; put 'put ''ODIsMzY1OTAsMzY1ODEsMzY1OTcsMzY1ODMsMzY1ODQsMzY1OTgsMzY1ODcsMzY1OTMsMzY1ODgsMzY1OTYsMzY1ODUsMzY5MDksMzY5MTYsMzY5MTEsMzcxMjYsMzcxNjQsMzcxMjQsMzcxMTksMzcxMTYsMzcxMjgsMzcxMTMsMzcxMTUsMzcxMjEsMzcxMjAsMzcxMjcsMzcxMjUsMzcxMjMs''@;'; put 'put ''MzcyMTcsMzcyMjAsMzcyMTUsMzcyMTgsMzcyMTYsMzczNzcsMzczODYsMzc0MTMsMzczNzksMzc0MDIsMzc0MTQsMzczOTEsMzczODgsMzczNzYsMzczOTQsMzczNzUsMzczNzMsMzczODIsMzczODAsMzc0MTUsMzczNzgsMzc0MDQsMzc0MTIsMzc0MDEsMzczOTksMzczODEsMzczOTgsMzgy''@;'; put 'put ''NjcsMzgyODUsMzgyODQsMzgyODgsMzg1MzUsMzg1MjYsMzg1MzYsMzg1MzcsMzg1MzEsMzg1MjgsMzg1OTQsMzg2MDAsMzg1OTUsMzg2NDEsMzg2NDAsMzg3NjQsMzg3NjgsMzg3NjYsMzg5MTksMzkwODEsMzkxNDcsNDAxNjYsNDA2OTcsMjAwOTksMjAxMDAsMjAxNTAsMjA2NjksMjA2NzEs''@;'; put 'put ''MjA2NzgsMjA2NTQsMjA2NzYsMjA2ODIsMjA2NjAsMjA2ODAsMjA2NzQsMjA2NTYsMjA2NzMsMjA2NjYsMjA2NTcsMjA2ODMsMjA2ODEsMjA2NjIsMjA2NjQsMjA5NTEsMjExMTQsMjExMTIsMjExMTUsMjExMTYsMjE5NTUsMjE5NzksMjE5NjQsMjE5NjgsMjE5NjMsMjE5NjIsMjE5ODEsMjE5''@;'; put 'put ''NTIsMjE5NzIsMjE5NTYsMjE5OTMsMjE5NTEsMjE5NzAsMjE5MDEsMjE5NjcsMjE5NzMsMjE5ODYsMjE5NzQsMjE5NjAsMjIwMDIsMjE5NjUsMjE5NzcsMjE5NTQsMjIyOTIsMjI2MTEsMjI2MzIsMjI2MjgsMjI2MDcsMjI2MDUsMjI2MDEsMjI2MzksMjI2MTMsMjI2MDYsMjI2MjEsMjI2MTcs''@;'; put 'put ''MjI2MjksMjI2MTksMjI1ODksMjI2MjcsMjI2NDEsMjI3ODAsMjMyMzksMjMyMzYsMjMyNDMsMjMyMjYsMjMyMjQsMjMyMTcsMjMyMjEsMjMyMTYsMjMyMzEsMjMyNDAsMjMyMjcsMjMyMzgsMjMyMjMsMjMyMzIsMjMyNDIsMjMyMjAsMjMyMjIsMjMyNDUsMjMyMjUsMjMxODQsMjM1MTAsMjM1''@;'; put 'put ''MTIsMjM1MTMsMjM1ODMsMjM2MDMsMjM5MjEsMjM5MDcsMjM4ODIsMjM5MDksMjM5MjIsMjM5MTYsMjM5MDIsMjM5MTIsMjM5MTEsMjM5MDYsMjQwNDgsMjQxNDMsMjQxNDIsMjQxMzgsMjQxNDEsMjQxMzksMjQyNjEsMjQyNjgsMjQyNjIsMjQyNjcsMjQyNjMsMjQzODQsMjQ0OTUsMjQ0OTMs''@;'; put 'put ''MjQ4MjMsMjQ5MDUsMjQ5MDYsMjQ4NzUsMjQ5MDEsMjQ4ODYsMjQ4ODIsMjQ4NzgsMjQ5MDIsMjQ4NzksMjQ5MTEsMjQ4NzMsMjQ4OTYsMjUxMjAsMzcyMjQsMjUxMjMsMjUxMjUsMjUxMjQsMjU1NDEsMjU1ODUsMjU1NzksMjU2MTYsMjU2MTgsMjU2MDksMjU2MzIsMjU2MzYsMjU2NTEsMjU2''@;'; put 'put ''NjcsMjU2MzEsMjU2MjEsMjU2MjQsMjU2NTcsMjU2NTUsMjU2MzQsMjU2MzUsMjU2MTIsMjU2MzgsMjU2NDgsMjU2NDAsMjU2NjUsMjU2NTMsMjU2NDcsMjU2MTAsMjU2MjYsMjU2NjQsMjU2MzcsMjU2MzksMjU2MTEsMjU1NzUsMjU2MjcsMjU2NDYsMjU2MzMsMjU2MTQsMjU5NjcsMjYwMDIs''@;'; put 'put ''MjYwNjcsMjYyNDYsMjYyNTIsMjYyNjEsMjYyNTYsMjYyNTEsMjYyNTAsMjYyNjUsMjYyNjAsMjYyMzIsMjY0MDAsMjY5ODIsMjY5NzUsMjY5MzYsMjY5NTgsMjY5NzgsMjY5OTMsMjY5NDMsMjY5NDksMjY5ODYsMjY5MzcsMjY5NDYsMjY5NjcsMjY5NjksMjcwMDIsMjY5NTIsMjY5NTMsMjY5''@;'; put 'put ''MzMsMjY5ODgsMjY5MzEsMjY5NDEsMjY5ODEsMjY4NjQsMjdlMywyNjkzMiwyNjk4NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkzOSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwyNjk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwy''@;'; put 'put ''NzQ2MiwyNzQ2MSwyNzQ1OSwyNzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywyNzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywyODM1MiwyODMxOSwyODMwNywyODMwOCwyODMyMCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1''@;'; put 'put ''MywyODMxOCwyODM2MSwyODM0MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMzOCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMyNCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwyODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwy''@;'; put 'put ''OTAxMCwyOTAyNywyOTAyNCwyODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwyOTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwyOTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUw''@;'; put 'put ''MCwyOTUwNiwyOTQ5OSwyOTQ5OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwyOTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwy''@;'; put 'put ''NzAxMSwzMDE5MSwzMDIyMywzMDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwzMDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwzMDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1''@;'; put 'put ''MywzMDU3MywzMDY4OCwzMDg1NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5NywzMTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1Mywz''@;'; put 'put ''MTI2NiwzMTI1MSwzMTI1OSwzMTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2NywzMTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwzMTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEy''@;'; put 'put ''OCwzMjE0MSwzMjEyNywzMjEzMywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEyNCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYxNiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwzMjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0Mywz''@;'; put 'put ''MzExNiwzMzEyOSwzMzExNSwzMzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0MiwzMzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0NiwzMzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkxMCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1''@;'; put 'put ''NiwzMzkyNiwzMzg5NSwzMzg0MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkwOCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywzMzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4Nywz''@;'; put 'put ''MzkwNCwzMzg0OSwzMzg3MCwzMzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwzMzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwzMzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYz''@;'; put 'put ''NywzNDU1MiwzNDU3NCwzNDU2OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAzMCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIwNSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwzNTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0Niwz''@;'; put 'put ''NTQ2MiwzNTQ1NSwzNTQyNSwzNTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwzNTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwzNTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIz''@;'; put 'put ''OSwzNjIzNywzNjI0MywzNjI0NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMzMiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMzMSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwzNjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwz''@;'; put 'put ''Njk0NiwzNjkyNywzNjkzMiwzNjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwzNzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwzNzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4''@;'; put 'put ''NSwzNzQ4NCwzNzQ1NSwzNzQ3MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwzODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwz''@;'; put 'put ''ODY1MCwzODY1MywzODY0OCwzODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwzODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwzOTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5''@;'; put 'put ''MiwyMDY5NSwyMDcxMiwyMDcyMywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIyNSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwyMjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwy''@;'; put 'put ''MjAxNywyMjAzNSwyMjAxOCwyMjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwyMjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2NywyMjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4''@;'; put 'put ''MiwyMjg5MSwyMzI2MCwyMzI3OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwyMzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0Miwy''@;'; put 'put ''MzkzMCwyMzkzNywyMzkyNywyMzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwyMzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwyNDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3''@;'; put 'put ''NiwyNDg3MiwyNDg5NywyNDkyNiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkzOCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywyNTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwy''@;'; put 'put ''NTcxOCwyNTcxNCwyNTcxNSwyNTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwyNTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2MywyNTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcxOSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3''@;'; put 'put ''MywyNjM3MiwyNjQwMiwyNzA1NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAzMCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3NiwyNzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwy''@;'; put 'put ''NzA4NywyNzA1OSwyNzAyNywyNzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwyNzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwyNzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQw''@;'; put 'put ''OCwyODQ3MSwyODQxMSwyODQ2MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3NiwyODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwy''@;'; put 'put ''ODQxMywyODQwNiwyODQ3MywyODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwyODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwyOTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUw''@;'; put 'put ''NywyOTUxNywyOTUyMSwyOTUxNiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgxMCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIxNiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwzMDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwz''@;'; put 'put ''MDU3NCwzMDU5MiwzMDU3NSwzMDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwzMDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4MiwzMDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEyNiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEy''@;'; put 'put ''MiwzMTEyMCwzMTI3NSwzMTMwNiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQwMCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYzOCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwzMTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwz''@;'; put 'put ''MTkzMSwzMTkzNSwzMTkzMiwzMTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2MywzMjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywzMjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIw''@;'; put 'put ''MSwzMjYyNywzMjczOCwzMjczOSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwzMzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3Nywz''@;'; put 'put ''Mzk3MiwzMzk4NSwzMzk5NywzMzk2MiwzMzk0NiwzMzk2OSwzNGUzLDMzOTQ5LDMzOTU5LDMzOTc5LDMzOTU0LDMzOTQwLDMzOTkxLDMzOTk2LDMzOTQ3LDMzOTYxLDMzOTY3LDMzOTYwLDM0MDA2LDMzOTQ0LDMzOTc0LDMzOTk5LDMzOTUyLDM0MDA3LDM0MDA0LDM0MDAyLDM0MDExLDMzOTY4''@;'; put 'put ''LDMzOTM3LDM0NDAxLDM0NjExLDM0NTk1LDM0NjAwLDM0NjY3LDM0NjI0LDM0NjA2LDM0NTkwLDM0NTkzLDM0NTg1LDM0NTg3LDM0NjI3LDM0NjA0LDM0NjI1LDM0NjIyLDM0NjMwLDM0NTkyLDM0NjEwLDM0NjAyLDM0NjA1LDM0NjIwLDM0NTc4LDM0NjE4LDM0NjA5LDM0NjEzLDM0NjI2LDM0''@;'; put 'put ''NTk4LDM0NTk5LDM0NjE2LDM0NTk2LDM0NTg2LDM0NjA4LDM0NTc3LDM1MDYzLDM1MDQ3LDM1MDU3LDM1MDU4LDM1MDY2LDM1MDcwLDM1MDU0LDM1MDY4LDM1MDYyLDM1MDY3LDM1MDU2LDM1MDUyLDM1MDUxLDM1MjI5LDM1MjMzLDM1MjMxLDM1MjMwLDM1MzA1LDM1MzA3LDM1MzA0LDM1NDk5''@;'; put 'put ''LDM1NDgxLDM1NDY3LDM1NDc0LDM1NDcxLDM1NDc4LDM1OTAxLDM1OTQ0LDM1OTQ1LDM2MDUzLDM2MDQ3LDM2MDU1LDM2MjQ2LDM2MzYxLDM2MzU0LDM2MzUxLDM2MzY1LDM2MzQ5LDM2MzYyLDM2MzU1LDM2MzU5LDM2MzU4LDM2MzU3LDM2MzUwLDM2MzUyLDM2MzU2LDM2NjI0LDM2NjI1LDM2''@;'; put 'put ''NjIyLDM2NjIxLDM3MTU1LDM3MTQ4LDM3MTUyLDM3MTU0LDM3MTUxLDM3MTQ5LDM3MTQ2LDM3MTU2LDM3MTUzLDM3MTQ3LDM3MjQyLDM3MjM0LDM3MjQxLDM3MjM1LDM3NTQxLDM3NTQwLDM3NDk0LDM3NTMxLDM3NDk4LDM3NTM2LDM3NTI0LDM3NTQ2LDM3NTE3LDM3NTQyLDM3NTMwLDM3NTQ3''@;'; put 'put ''LDM3NDk3LDM3NTI3LDM3NTAzLDM3NTM5LDM3NjE0LDM3NTE4LDM3NTA2LDM3NTI1LDM3NTM4LDM3NTAxLDM3NTEyLDM3NTM3LDM3NTE0LDM3NTEwLDM3NTE2LDM3NTI5LDM3NTQzLDM3NTAyLDM3NTExLDM3NTQ1LDM3NTMzLDM3NTE1LDM3NDIxLDM4NTU4LDM4NTYxLDM4NjU1LDM4NzQ0LDM4''@;'; put 'put ''NzgxLDM4Nzc4LDM4NzgyLDM4Nzg3LDM4Nzg0LDM4Nzg2LDM4Nzc5LDM4Nzg4LDM4Nzg1LDM4NzgzLDM4ODYyLDM4ODYxLDM4OTM0LDM5MDg1LDM5MDg2LDM5MTcwLDM5MTY4LDM5MTc1LDM5MzI1LDM5MzI0LDM5MzYzLDM5MzUzLDM5MzU1LDM5MzU0LDM5MzYyLDM5MzU3LDM5MzY3LDM5NjAx''@;'; put 'put ''LDM5NjUxLDM5NjU1LDM5NzQyLDM5NzQzLDM5Nzc2LDM5Nzc3LDM5Nzc1LDQwMTc3LDQwMTc4LDQwMTgxLDQwNjE1LDIwNzM1LDIwNzM5LDIwNzg0LDIwNzI4LDIwNzQyLDIwNzQzLDIwNzI2LDIwNzM0LDIwNzQ3LDIwNzQ4LDIwNzMzLDIwNzQ2LDIxMTMxLDIxMTMyLDIxMjMzLDIxMjMxLDIy''@;'; put 'put ''MDg4LDIyMDgyLDIyMDkyLDIyMDY5LDIyMDgxLDIyMDkwLDIyMDg5LDIyMDg2LDIyMTA0LDIyMTA2LDIyMDgwLDIyMDY3LDIyMDc3LDIyMDYwLDIyMDc4LDIyMDcyLDIyMDU4LDIyMDc0LDIyMjk4LDIyNjk5LDIyNjg1LDIyNzA1LDIyNjg4LDIyNjkxLDIyNzAzLDIyNzAwLDIyNjkzLDIyNjg5''@;'; put 'put ''LDIyNzgzLDIzMjk1LDIzMjg0LDIzMjkzLDIzMjg3LDIzMjg2LDIzMjk5LDIzMjg4LDIzMjk4LDIzMjg5LDIzMjk3LDIzMzAzLDIzMzAxLDIzMzExLDIzNjU1LDIzOTYxLDIzOTU5LDIzOTY3LDIzOTU0LDIzOTcwLDIzOTU1LDIzOTU3LDIzOTY4LDIzOTY0LDIzOTY5LDIzOTYyLDIzOTY2LDI0''@;'; put 'put ''MTY5LDI0MTU3LDI0MTYwLDI0MTU2LDMyMjQzLDI0MjgzLDI0Mjg2LDI0Mjg5LDI0MzkzLDI0NDk4LDI0OTcxLDI0OTYzLDI0OTUzLDI1MDA5LDI1MDA4LDI0OTk0LDI0OTY5LDI0OTg3LDI0OTc5LDI1MDA3LDI1MDA1LDI0OTkxLDI0OTc4LDI1MDAyLDI0OTkzLDI0OTczLDI0OTM0LDI1MDEx''@;'; put 'put ''LDI1MTMzLDI1NzEwLDI1NzEyLDI1NzUwLDI1NzYwLDI1NzMzLDI1NzUxLDI1NzU2LDI1NzQzLDI1NzM5LDI1NzM4LDI1NzQwLDI1NzYzLDI1NzU5LDI1NzA0LDI1Nzc3LDI1NzUyLDI1OTc0LDI1OTc4LDI1OTc3LDI1OTc5LDI2MDM0LDI2MDM1LDI2MjkzLDI2Mjg4LDI2MjgxLDI2MjkwLDI2''@;'; put 'put ''Mjk1LDI2MjgyLDI2Mjg3LDI3MTM2LDI3MTQyLDI3MTU5LDI3MTA5LDI3MTI4LDI3MTU3LDI3MTIxLDI3MTA4LDI3MTY4LDI3MTM1LDI3MTE2LDI3MTA2LDI3MTYzLDI3MTY1LDI3MTM0LDI3MTc1LDI3MTIyLDI3MTE4LDI3MTU2LDI3MTI3LDI3MTExLDI3MjAwLDI3MTQ0LDI3MTEwLDI3MTMx''@;'; put 'put ''LDI3MTQ5LDI3MTMyLDI3MTE1LDI3MTQ1LDI3MTQwLDI3MTYwLDI3MTczLDI3MTUxLDI3MTI2LDI3MTc0LDI3MTQzLDI3MTI0LDI3MTU4LDI3NDczLDI3NTU3LDI3NTU1LDI3NTU0LDI3NTU4LDI3NjQ5LDI3NjQ4LDI3NjQ3LDI3NjUwLDI4NDgxLDI4NDU0LDI4NTQyLDI4NTUxLDI4NjE0LDI4''@;'; put 'put ''NTYyLDI4NTU3LDI4NTUzLDI4NTU2LDI4NTE0LDI4NDk1LDI4NTQ5LDI4NTA2LDI4NTY2LDI4NTM0LDI4NTI0LDI4NTQ2LDI4NTAxLDI4NTMwLDI4NDk4LDI4NDk2LDI4NTAzLDI4NTY0LDI4NTYzLDI4NTA5LDI4NDE2LDI4NTEzLDI4NTIzLDI4NTQxLDI4NTE5LDI4NTYwLDI4NDk5LDI4NTU1''@;'; put 'put ''LDI4NTIxLDI4NTQzLDI4NTY1LDI4NTE1LDI4NTM1LDI4NTIyLDI4NTM5LDI5MTA2LDI5MTAzLDI5MDgzLDI5MTA0LDI5MDg4LDI5MDgyLDI5MDk3LDI5MTA5LDI5MDg1LDI5MDkzLDI5MDg2LDI5MDkyLDI5MDg5LDI5MDk4LDI5MDg0LDI5MDk1LDI5MTA3LDI5MzM2LDI5MzM4LDI5NTI4LDI5''@;'; put 'put ''NTIyLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTMzLDI5NTMxLDI5NTM3LDI5NTMwLDI5NTI5LDI5NTM4LDI5ODMxLDI5ODMzLDI5ODM0LDI5ODMwLDI5ODI1LDI5ODIxLDI5ODI5LDI5ODMyLDI5ODIwLDI5ODE3LDI5OTYwLDI5OTU5LDMwMDc4LDMwMjQ1LDMwMjM4LDMwMjMzLDMwMjM3LDMwMjM2''@;'; put 'put ''LDMwMjQzLDMwMjM0LDMwMjQ4LDMwMjM1LDMwMzY0LDMwMzY1LDMwMzY2LDMwMzYzLDMwNjA1LDMwNjA3LDMwNjAxLDMwNjAwLDMwOTI1LDMwOTA3LDMwOTI3LDMwOTI0LDMwOTI5LDMwOTI2LDMwOTMyLDMwOTIwLDMwOTE1LDMwOTE2LDMwOTIxLDMxMTMwLDMxMTM3LDMxMTM2LDMxMTMyLDMx''@;'; put 'put ''MTM4LDMxMTMxLDI3NTEwLDMxMjg5LDMxNDEwLDMxNDEyLDMxNDExLDMxNjcxLDMxNjkxLDMxNjc4LDMxNjYwLDMxNjk0LDMxNjYzLDMxNjczLDMxNjkwLDMxNjY5LDMxOTQxLDMxOTQ0LDMxOTQ4LDMxOTQ3LDMyMjQ3LDMyMjE5LDMyMjM0LDMyMjMxLDMyMjE1LDMyMjI1LDMyMjU5LDMyMjUw''@;'; put 'put ''LDMyMjMwLDMyMjQ2LDMyMjQxLDMyMjQwLDMyMjM4LDMyMjIzLDMyNjMwLDMyNjg0LDMyNjg4LDMyNjg1LDMyNzQ5LDMyNzQ3LDMyNzQ2LDMyNzQ4LDMyNzQyLDMyNzQ0LDMyODY4LDMyODcxLDMzMTg3LDMzMTgzLDMzMTgyLDMzMTczLDMzMTg2LDMzMTc3LDMzMTc1LDMzMzAyLDMzMzU5LDMz''@;'; put 'put ''MzYzLDMzMzYyLDMzMzYwLDMzMzU4LDMzMzYxLDM0MDg0LDM0MTA3LDM0MDYzLDM0MDQ4LDM0MDg5LDM0MDYyLDM0MDU3LDM0MDYxLDM0MDc5LDM0MDU4LDM0MDg3LDM0MDc2LDM0MDQzLDM0MDkxLDM0MDQyLDM0MDU2LDM0MDYwLDM0MDM2LDM0MDkwLDM0MDM0LDM0MDY5LDM0MDM5LDM0MDI3''@;'; put 'put ''LDM0MDM1LDM0MDQ0LDM0MDY2LDM0MDI2LDM0MDI1LDM0MDcwLDM0MDQ2LDM0MDg4LDM0MDc3LDM0MDk0LDM0MDUwLDM0MDQ1LDM0MDc4LDM0MDM4LDM0MDk3LDM0MDg2LDM0MDIzLDM0MDI0LDM0MDMyLDM0MDMxLDM0MDQxLDM0MDcyLDM0MDgwLDM0MDk2LDM0MDU5LDM0MDczLDM0MDk1LDM0''@;'; put 'put ''NDAyLDM0NjQ2LDM0NjU5LDM0NjYwLDM0Njc5LDM0Nzg1LDM0Njc1LDM0NjQ4LDM0NjQ0LDM0NjUxLDM0NjQyLDM0NjU3LDM0NjUwLDM0NjQxLDM0NjU0LDM0NjY5LDM0NjY2LDM0NjQwLDM0NjM4LDM0NjU1LDM0NjUzLDM0NjcxLDM0NjY4LDM0NjgyLDM0NjcwLDM0NjUyLDM0NjYxLDM0NjM5''@;'; put 'put ''LDM0NjgzLDM0Njc3LDM0NjU4LDM0NjYzLDM0NjY1LDM0OTA2LDM1MDc3LDM1MDg0LDM1MDkyLDM1MDgzLDM1MDk1LDM1MDk2LDM1MDk3LDM1MDc4LDM1MDk0LDM1MDg5LDM1MDg2LDM1MDgxLDM1MjM0LDM1MjM2LDM1MjM1LDM1MzA5LDM1MzEyLDM1MzA4LDM1NTM1LDM1NTI2LDM1NTEyLDM1''@;'; put 'put ''NTM5LDM1NTM3LDM1NTQwLDM1NTQxLDM1NTE1LDM1NTQzLDM1NTE4LDM1NTIwLDM1NTI1LDM1NTQ0LDM1NTIzLDM1NTE0LDM1NTE3LDM1NTQ1LDM1OTAyLDM1OTE3LDM1OTgzLDM2MDY5LDM2MDYzLDM2MDU3LDM2MDcyLDM2MDU4LDM2MDYxLDM2MDcxLDM2MjU2LDM2MjUyLDM2MjU3LDM2MjUx''@;'; put 'put ''LDM2Mzg0LDM2Mzg3LDM2Mzg5LDM2Mzg4LDM2Mzk4LDM2MzczLDM2Mzc5LDM2Mzc0LDM2MzY5LDM2Mzc3LDM2MzkwLDM2MzkxLDM2MzcyLDM2MzcwLDM2Mzc2LDM2MzcxLDM2MzgwLDM2Mzc1LDM2Mzc4LDM2NjUyLDM2NjQ0LDM2NjMyLDM2NjM0LDM2NjQwLDM2NjQzLDM2NjMwLDM2NjMxLDM2''@;'; put 'put ''OTc5LDM2OTc2LDM2OTc1LDM2OTY3LDM2OTcxLDM3MTY3LDM3MTYzLDM3MTYxLDM3MTYyLDM3MTcwLDM3MTU4LDM3MTY2LDM3MjUzLDM3MjU0LDM3MjU4LDM3MjQ5LDM3MjUwLDM3MjUyLDM3MjQ4LDM3NTg0LDM3NTcxLDM3NTcyLDM3NTY4LDM3NTkzLDM3NTU4LDM3NTgzLDM3NjE3LDM3NTk5''@;'; put 'put ''LDM3NTkyLDM3NjA5LDM3NTkxLDM3NTk3LDM3NTgwLDM3NjE1LDM3NTcwLDM3NjA4LDM3NTc4LDM3NTc2LDM3NTgyLDM3NjA2LDM3NTgxLDM3NTg5LDM3NTc3LDM3NjAwLDM3NTk4LDM3NjA3LDM3NTg1LDM3NTg3LDM3NTU3LDM3NjAxLDM3NTc0LDM3NTU2LDM4MjY4LDM4MzE2LDM4MzE1LDM4''@;'; put 'put ''MzE4LDM4MzIwLDM4NTY0LDM4NTYyLDM4NjExLDM4NjYxLDM4NjY0LDM4NjU4LDM4NzQ2LDM4Nzk0LDM4Nzk4LDM4NzkyLDM4ODY0LDM4ODYzLDM4OTQyLDM4OTQxLDM4OTUwLDM4OTUzLDM4OTUyLDM4OTQ0LDM4OTM5LDM4OTUxLDM5MDkwLDM5MTc2LDM5MTYyLDM5MTg1LDM5MTg4LDM5MTkw''@;'; put 'put ''LDM5MTkxLDM5MTg5LDM5Mzg4LDM5MzczLDM5Mzc1LDM5Mzc5LDM5MzgwLDM5Mzc0LDM5MzY5LDM5MzgyLDM5Mzg0LDM5MzcxLDM5MzgzLDM5MzcyLDM5NjAzLDM5NjYwLDM5NjU5LDM5NjY3LDM5NjY2LDM5NjY1LDM5NzUwLDM5NzQ3LDM5NzgzLDM5Nzk2LDM5NzkzLDM5NzgyLDM5Nzk4LDM5''@;'; put 'put ''Nzk3LDM5NzkyLDM5Nzg0LDM5NzgwLDM5Nzg4LDQwMTg4LDQwMTg2LDQwMTg5LDQwMTkxLDQwMTgzLDQwMTk5LDQwMTkyLDQwMTg1LDQwMTg3LDQwMjAwLDQwMTk3LDQwMTk2LDQwNTc5LDQwNjU5LDQwNzE5LDQwNzIwLDIwNzY0LDIwNzU1LDIwNzU5LDIwNzYyLDIwNzUzLDIwOTU4LDIxMzAw''@;'; put 'put ''LDIxNDczLDIyMTI4LDIyMTEyLDIyMTI2LDIyMTMxLDIyMTE4LDIyMTE1LDIyMTI1LDIyMTMwLDIyMTEwLDIyMTM1LDIyMzAwLDIyMjk5LDIyNzI4LDIyNzE3LDIyNzI5LDIyNzE5LDIyNzE0LDIyNzIyLDIyNzE2LDIyNzI2LDIzMzE5LDIzMzIxLDIzMzIzLDIzMzI5LDIzMzE2LDIzMzE1LDIz''@;'; put 'put ''MzEyLDIzMzE4LDIzMzM2LDIzMzIyLDIzMzI4LDIzMzI2LDIzNTM1LDIzOTgwLDIzOTg1LDIzOTc3LDIzOTc1LDIzOTg5LDIzOTg0LDIzOTgyLDIzOTc4LDIzOTc2LDIzOTg2LDIzOTgxLDIzOTgzLDIzOTg4LDI0MTY3LDI0MTY4LDI0MTY2LDI0MTc1LDI0Mjk3LDI0Mjk1LDI0Mjk0LDI0Mjk2''@;'; put 'put ''LDI0MjkzLDI0Mzk1LDI0NTA4LDI0OTg5LDI1ZTMsMjQ5ODIsMjUwMjksMjUwMTIsMjUwMzAsMjUwMjUsMjUwMzYsMjUwMTgsMjUwMjMsMjUwMTYsMjQ5NzIsMjU4MTUsMjU4MTQsMjU4MDgsMjU4MDcsMjU4MDEsMjU3ODksMjU3MzcsMjU3OTUsMjU4MTksMjU4NDMsMjU4MTcsMjU5MDcsMjU5''@;'; put 'put ''ODMsMjU5ODAsMjYwMTgsMjYzMTIsMjYzMDIsMjYzMDQsMjYzMTQsMjYzMTUsMjYzMTksMjYzMDEsMjYyOTksMjYyOTgsMjYzMTYsMjY0MDMsMjcxODgsMjcyMzgsMjcyMDksMjcyMzksMjcxODYsMjcyNDAsMjcxOTgsMjcyMjksMjcyNDUsMjcyNTQsMjcyMjcsMjcyMTcsMjcxNzYsMjcyMjYs''@;'; put 'put ''MjcxOTUsMjcxOTksMjcyMDEsMjcyNDIsMjcyMzYsMjcyMTYsMjcyMTUsMjcyMjAsMjcyNDcsMjcyNDEsMjcyMzIsMjcxOTYsMjcyMzAsMjcyMjIsMjcyMjEsMjcyMTMsMjcyMTQsMjcyMDYsMjc0NzcsMjc0NzYsMjc0NzgsMjc1NTksMjc1NjIsMjc1NjMsMjc1OTIsMjc1OTEsMjc2NTIsMjc2''@;'; put 'put ''NTEsMjc2NTQsMjg1ODksMjg2MTksMjg1NzksMjg2MTUsMjg2MDQsMjg2MjIsMjg2MTYsMjg1MTAsMjg2MTIsMjg2MDUsMjg1NzQsMjg2MTgsMjg1ODQsMjg2NzYsMjg1ODEsMjg1OTAsMjg2MDIsMjg1ODgsMjg1ODYsMjg2MjMsMjg2MDcsMjg2MDAsMjg1NzgsMjg2MTcsMjg1ODcsMjg2MjEs''@;'; put 'put ''Mjg1OTEsMjg1OTQsMjg1OTIsMjkxMjUsMjkxMjIsMjkxMTksMjkxMTIsMjkxNDIsMjkxMjAsMjkxMjEsMjkxMzEsMjkxNDAsMjkxMzAsMjkxMjcsMjkxMzUsMjkxMTcsMjkxNDQsMjkxMTYsMjkxMjYsMjkxNDYsMjkxNDcsMjkzNDEsMjkzNDIsMjk1NDUsMjk1NDIsMjk1NDMsMjk1NDgsMjk1''@;'; put 'put ''NDEsMjk1NDcsMjk1NDYsMjk4MjMsMjk4NTAsMjk4NTYsMjk4NDQsMjk4NDIsMjk4NDUsMjk4NTcsMjk5NjMsMzAwODAsMzAyNTUsMzAyNTMsMzAyNTcsMzAyNjksMzAyNTksMzAyNjgsMzAyNjEsMzAyNTgsMzAyNTYsMzAzOTUsMzA0MzgsMzA2MTgsMzA2MjEsMzA2MjUsMzA2MjAsMzA2MTks''@;'; put 'put ''MzA2MjYsMzA2MjcsMzA2MTMsMzA2MTcsMzA2MTUsMzA5NDEsMzA5NTMsMzA5NDksMzA5NTQsMzA5NDIsMzA5NDcsMzA5MzksMzA5NDUsMzA5NDYsMzA5NTcsMzA5NDMsMzA5NDQsMzExNDAsMzEzMDAsMzEzMDQsMzEzMDMsMzE0MTQsMzE0MTYsMzE0MTMsMzE0MDksMzE0MTUsMzE3MTAsMzE3''@;'; put 'put ''MTUsMzE3MTksMzE3MDksMzE3MDEsMzE3MTcsMzE3MDYsMzE3MjAsMzE3MzcsMzE3MDAsMzE3MjIsMzE3MTQsMzE3MDgsMzE3MjMsMzE3MDQsMzE3MTEsMzE5NTQsMzE5NTYsMzE5NTksMzE5NTIsMzE5NTMsMzIyNzQsMzIyODksMzIyNzksMzIyNjgsMzIyODcsMzIyODgsMzIyNzUsMzIyNzAs''@;'; put 'put ''MzIyODQsMzIyNzcsMzIyODIsMzIyOTAsMzIyNjcsMzIyNzEsMzIyNzgsMzIyNjksMzIyNzYsMzIyOTMsMzIyOTIsMzI1NzksMzI2MzUsMzI2MzYsMzI2MzQsMzI2ODksMzI3NTEsMzI4MTAsMzI4MDksMzI4NzYsMzMyMDEsMzMxOTAsMzMxOTgsMzMyMDksMzMyMDUsMzMxOTUsMzMyMDAsMzMx''@;'; put 'put ''OTYsMzMyMDQsMzMyMDIsMzMyMDcsMzMxOTEsMzMyNjYsMzMzNjUsMzMzNjYsMzMzNjcsMzQxMzQsMzQxMTcsMzQxNTUsMzQxMjUsMzQxMzEsMzQxNDUsMzQxMzYsMzQxMTIsMzQxMTgsMzQxNDgsMzQxMTMsMzQxNDYsMzQxMTYsMzQxMjksMzQxMTksMzQxNDcsMzQxMTAsMzQxMzksMzQxNjEs''@;'; put 'put ''MzQxMjYsMzQxNTgsMzQxNjUsMzQxMzMsMzQxNTEsMzQxNDQsMzQxODgsMzQxNTAsMzQxNDEsMzQxMzIsMzQxNDksMzQxNTYsMzQ0MDMsMzQ0MDUsMzQ0MDQsMzQ3MTUsMzQ3MDMsMzQ3MTEsMzQ3MDcsMzQ3MDYsMzQ2OTYsMzQ2ODksMzQ3MTAsMzQ3MTIsMzQ2ODEsMzQ2OTUsMzQ3MjMsMzQ2''@;'; put 'put ''OTMsMzQ3MDQsMzQ3MDUsMzQ3MTcsMzQ2OTIsMzQ3MDgsMzQ3MTYsMzQ3MTQsMzQ2OTcsMzUxMDIsMzUxMTAsMzUxMjAsMzUxMTcsMzUxMTgsMzUxMTEsMzUxMjEsMzUxMDYsMzUxMTMsMzUxMDcsMzUxMTksMzUxMTYsMzUxMDMsMzUzMTMsMzU1NTIsMzU1NTQsMzU1NzAsMzU1NzIsMzU1NzMs''@;'; put 'put ''MzU1NDksMzU2MDQsMzU1NTYsMzU1NTEsMzU1NjgsMzU1MjgsMzU1NTAsMzU1NTMsMzU1NjAsMzU1ODMsMzU1NjcsMzU1NzksMzU5ODUsMzU5ODYsMzU5ODQsMzYwODUsMzYwNzgsMzYwODEsMzYwODAsMzYwODMsMzYyMDQsMzYyMDYsMzYyNjEsMzYyNjMsMzY0MDMsMzY0MTQsMzY0MDgsMzY0''@;'; put 'put ''MTYsMzY0MjEsMzY0MDYsMzY0MTIsMzY0MTMsMzY0MTcsMzY0MDAsMzY0MTUsMzY1NDEsMzY2NjIsMzY2NTQsMzY2NjEsMzY2NTgsMzY2NjUsMzY2NjMsMzY2NjAsMzY5ODIsMzY5ODUsMzY5ODcsMzY5OTgsMzcxMTQsMzcxNzEsMzcxNzMsMzcxNzQsMzcyNjcsMzcyNjQsMzcyNjUsMzcyNjEs''@;'; put 'put ''MzcyNjMsMzc2NzEsMzc2NjIsMzc2NDAsMzc2NjMsMzc2MzgsMzc2NDcsMzc3NTQsMzc2ODgsMzc2OTIsMzc2NTksMzc2NjcsMzc2NTAsMzc2MzMsMzc3MDIsMzc2NzcsMzc2NDYsMzc2NDUsMzc1NzksMzc2NjEsMzc2MjYsMzc2NjksMzc2NTEsMzc2MjUsMzc2MjMsMzc2ODQsMzc2MzQsMzc2''@;'; put 'put ''NjgsMzc2MzEsMzc2NzMsMzc2ODksMzc2ODUsMzc2NzQsMzc2NTIsMzc2NDQsMzc2NDMsMzc2MzAsMzc2NDEsMzc2MzIsMzc2MjcsMzc2NTQsMzgzMzIsMzgzNDksMzgzMzQsMzgzMjksMzgzMzAsMzgzMjYsMzgzMzUsMzgzMjUsMzgzMzMsMzg1NjksMzg2MTIsMzg2NjcsMzg2NzQsMzg2NzIs''@;'; put 'put ''Mzg4MDksMzg4MDcsMzg4MDQsMzg4OTYsMzg5MDQsMzg5NjUsMzg5NTksMzg5NjIsMzkyMDQsMzkxOTksMzkyMDcsMzkyMDksMzkzMjYsMzk0MDYsMzk0MDQsMzkzOTcsMzkzOTYsMzk0MDgsMzkzOTUsMzk0MDIsMzk0MDEsMzkzOTksMzk2MDksMzk2MTUsMzk2MDQsMzk2MTEsMzk2NzAsMzk2''@;'; put 'put ''NzQsMzk2NzMsMzk2NzEsMzk3MzEsMzk4MDgsMzk4MTMsMzk4MTUsMzk4MDQsMzk4MDYsMzk4MDMsMzk4MTAsMzk4MjcsMzk4MjYsMzk4MjQsMzk4MDIsMzk4MjksMzk4MDUsMzk4MTYsNDAyMjksNDAyMTUsNDAyMjQsNDAyMjIsNDAyMTIsNDAyMzMsNDAyMjEsNDAyMTYsNDAyMjYsNDAyMDgs''@;'; put 'put ''NDAyMTcsNDAyMjMsNDA1ODQsNDA1ODIsNDA1ODMsNDA2MjIsNDA2MjEsNDA2NjEsNDA2NjIsNDA2OTgsNDA3MjIsNDA3NjUsMjA3NzQsMjA3NzMsMjA3NzAsMjA3NzIsMjA3NjgsMjA3NzcsMjEyMzYsMjIxNjMsMjIxNTYsMjIxNTcsMjIxNTAsMjIxNDgsMjIxNDcsMjIxNDIsMjIxNDYsMjIx''@;'; put 'put ''NDMsMjIxNDUsMjI3NDIsMjI3NDAsMjI3MzUsMjI3MzgsMjMzNDEsMjMzMzMsMjMzNDYsMjMzMzEsMjMzNDAsMjMzMzUsMjMzMzQsMjMzNDMsMjMzNDIsMjM0MTksMjM1MzcsMjM1MzgsMjM5OTEsMjQxNzIsMjQxNzAsMjQ1MTAsMjQ1MDcsMjUwMjcsMjUwMTMsMjUwMjAsMjUwNjMsMjUwNTYs''@;'; put 'put ''MjUwNjEsMjUwNjAsMjUwNjQsMjUwNTQsMjU4MzksMjU4MzMsMjU4MjcsMjU4MzUsMjU4MjgsMjU4MzIsMjU5ODUsMjU5ODQsMjYwMzgsMjYwNzQsMjYzMjIsMjcyNzcsMjcyODYsMjcyNjUsMjczMDEsMjcyNzMsMjcyOTUsMjcyOTEsMjcyOTcsMjcyOTQsMjcyNzEsMjcyODMsMjcyNzgsMjcy''@;'; put 'put ''ODUsMjcyNjcsMjczMDQsMjczMDAsMjcyODEsMjcyNjMsMjczMDIsMjcyOTAsMjcyNjksMjcyNzYsMjcyODIsMjc0ODMsMjc1NjUsMjc2NTcsMjg2MjAsMjg1ODUsMjg2NjAsMjg2MjgsMjg2NDMsMjg2MzYsMjg2NTMsMjg2NDcsMjg2NDYsMjg2MzgsMjg2NTgsMjg2MzcsMjg2NDIsMjg2NDgs''@;'; put 'put ''MjkxNTMsMjkxNjksMjkxNjAsMjkxNzAsMjkxNTYsMjkxNjgsMjkxNTQsMjk1NTUsMjk1NTAsMjk1NTEsMjk4NDcsMjk4NzQsMjk4NjcsMjk4NDAsMjk4NjYsMjk4NjksMjk4NzMsMjk4NjEsMjk4NzEsMjk5NjgsMjk5NjksMjk5NzAsMjk5NjcsMzAwODQsMzAyNzUsMzAyODAsMzAyODEsMzAy''@;'; put 'put ''NzksMzAzNzIsMzA0NDEsMzA2NDUsMzA2MzUsMzA2NDIsMzA2NDcsMzA2NDYsMzA2NDQsMzA2NDEsMzA2MzIsMzA3MDQsMzA5NjMsMzA5NzMsMzA5NzgsMzA5NzEsMzA5NzIsMzA5NjIsMzA5ODEsMzA5NjksMzA5NzQsMzA5ODAsMzExNDcsMzExNDQsMzEzMjQsMzEzMjMsMzEzMTgsMzEzMjAs''@;'; put 'put ''MzEzMTYsMzEzMjIsMzE0MjIsMzE0MjQsMzE0MjUsMzE3NDksMzE3NTksMzE3MzAsMzE3NDQsMzE3NDMsMzE3MzksMzE3NTgsMzE3MzIsMzE3NTUsMzE3MzEsMzE3NDYsMzE3NTMsMzE3NDcsMzE3NDUsMzE3MzYsMzE3NDEsMzE3NTAsMzE3MjgsMzE3MjksMzE3NjAsMzE3NTQsMzE5NzYsMzIz''@;'; put 'put ''MDEsMzIzMTYsMzIzMjIsMzIzMDcsMzg5ODQsMzIzMTIsMzIyOTgsMzIzMjksMzIzMjAsMzIzMjcsMzIyOTcsMzIzMzIsMzIzMDQsMzIzMTUsMzIzMTAsMzIzMjQsMzIzMTQsMzI1ODEsMzI2MzksMzI2MzgsMzI2MzcsMzI3NTYsMzI3NTQsMzI4MTIsMzMyMTEsMzMyMjAsMzMyMjgsMzMyMjYs''@;'; put 'put ''MzMyMjEsMzMyMjMsMzMyMTIsMzMyNTcsMzMzNzEsMzMzNzAsMzMzNzIsMzQxNzksMzQxNzYsMzQxOTEsMzQyMTUsMzQxOTcsMzQyMDgsMzQxODcsMzQyMTEsMzQxNzEsMzQyMTIsMzQyMDIsMzQyMDYsMzQxNjcsMzQxNzIsMzQxODUsMzQyMDksMzQxNzAsMzQxNjgsMzQxMzUsMzQxOTAsMzQx''@;'; put 'put ''OTgsMzQxODIsMzQxODksMzQyMDEsMzQyMDUsMzQxNzcsMzQyMTAsMzQxNzgsMzQxODQsMzQxODEsMzQxNjksMzQxNjYsMzQyMDAsMzQxOTIsMzQyMDcsMzQ0MDgsMzQ3NTAsMzQ3MzAsMzQ3MzMsMzQ3NTcsMzQ3MzYsMzQ3MzIsMzQ3NDUsMzQ3NDEsMzQ3NDgsMzQ3MzQsMzQ3NjEsMzQ3NTUs''@;'; put 'put ''MzQ3NTQsMzQ3NjQsMzQ3NDMsMzQ3MzUsMzQ3NTYsMzQ3NjIsMzQ3NDAsMzQ3NDIsMzQ3NTEsMzQ3NDQsMzQ3NDksMzQ3ODIsMzQ3MzgsMzUxMjUsMzUxMjMsMzUxMzIsMzUxMzQsMzUxMzcsMzUxNTQsMzUxMjcsMzUxMzgsMzUyNDUsMzUyNDcsMzUyNDYsMzUzMTQsMzUzMTUsMzU2MTQsMzU2''@;'; put 'put ''MDgsMzU2MDYsMzU2MDEsMzU1ODksMzU1OTUsMzU2MTgsMzU1OTksMzU2MDIsMzU2MDUsMzU1OTEsMzU1OTcsMzU1OTIsMzU1OTAsMzU2MTIsMzU2MDMsMzU2MTAsMzU5MTksMzU5NTIsMzU5NTQsMzU5NTMsMzU5NTEsMzU5ODksMzU5ODgsMzYwODksMzYyMDcsMzY0MzAsMzY0MjksMzY0MzUs''@;'; put 'put ''MzY0MzIsMzY0MjgsMzY0MjMsMzY2NzUsMzY2NzIsMzY5OTcsMzY5OTAsMzcxNzYsMzcyNzQsMzcyODIsMzcyNzUsMzcyNzMsMzcyNzksMzcyODEsMzcyNzcsMzcyODAsMzc3OTMsMzc3NjMsMzc4MDcsMzc3MzIsMzc3MTgsMzc3MDMsMzc3NTYsMzc3MjAsMzc3MjQsMzc3NTAsMzc3MDUsMzc3''@;'; put 'put ''MTIsMzc3MTMsMzc3MjgsMzc3NDEsMzc3NzUsMzc3MDgsMzc3MzgsMzc3NTMsMzc3MTksMzc3MTcsMzc3MTQsMzc3MTEsMzc3NDUsMzc3NTEsMzc3NTUsMzc3MjksMzc3MjYsMzc3MzEsMzc3MzUsMzc3NjAsMzc3MTAsMzc3MjEsMzgzNDMsMzgzMzYsMzgzNDUsMzgzMzksMzgzNDEsMzgzMjcs''@;'; put 'put ''Mzg1NzQsMzg1NzYsMzg1NzIsMzg2ODgsMzg2ODcsMzg2ODAsMzg2ODUsMzg2ODEsMzg4MTAsMzg4MTcsMzg4MTIsMzg4MTQsMzg4MTMsMzg4NjksMzg4NjgsMzg4OTcsMzg5NzcsMzg5ODAsMzg5ODYsMzg5ODUsMzg5ODEsMzg5NzksMzkyMDUsMzkyMTEsMzkyMTIsMzkyMTAsMzkyMTksMzky''@;'; put 'put ''MTgsMzkyMTUsMzkyMTMsMzkyMTcsMzkyMTYsMzkzMjAsMzkzMzEsMzkzMjksMzk0MjYsMzk0MTgsMzk0MTIsMzk0MTUsMzk0MTcsMzk0MTYsMzk0MTQsMzk0MTksMzk0MjEsMzk0MjIsMzk0MjAsMzk0MjcsMzk2MTQsMzk2NzgsMzk2NzcsMzk2ODEsMzk2NzYsMzk3NTIsMzk4MzQsMzk4NDgs''@;'; put 'put ''Mzk4MzgsMzk4MzUsMzk4NDYsMzk4NDEsMzk4NDUsMzk4NDQsMzk4MTQsMzk4NDIsMzk4NDAsMzk4NTUsNDAyNDMsNDAyNTcsNDAyOTUsNDAyNDYsNDAyMzgsNDAyMzksNDAyNDEsNDAyNDgsNDAyNDAsNDAyNjEsNDAyNTgsNDAyNTksNDAyNTQsNDAyNDcsNDAyNTYsNDAyNTMsMzI3NTcsNDAy''@;'; put 'put ''MzcsNDA1ODYsNDA1ODUsNDA1ODksNDA2MjQsNDA2NDgsNDA2NjYsNDA2OTksNDA3MDMsNDA3NDAsNDA3MzksNDA3MzgsNDA3ODgsNDA4NjQsMjA3ODUsMjA3ODEsMjA3ODIsMjIxNjgsMjIxNzIsMjIxNjcsMjIxNzAsMjIxNzMsMjIxNjksMjI4OTYsMjMzNTYsMjM2NTcsMjM2NTgsMjRlMywy''@;'; put 'put ''NDE3MywyNDE3NCwyNTA0OCwyNTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2NiwyNTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1NywyNTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMzMCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2''@;'; put 'put ''MSwyNzMzNCwyNzMyMiwyNzMxOCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwyODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3Nywy''@;'; put 'put ''OTE4NywyOTE4MSwyOTU1OCwyOTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4NiwyOTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwzMDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5''@;'; put 'put ''NSwzMDk5NiwzMDk4NSwzMDk5MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMyNywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwzMjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwz''@;'; put 'put ''MjMzNywzMjM1MiwzMjM0MywzMjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwzMjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwzNDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIzNywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0''@;'; put 'put ''OCwzNDI0NSwzNDIyNSwzNDIzMCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIzOCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwzNDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwz''@;'; put 'put ''NDc3NywzNDgxNywzNDgwNCwzNDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwzNTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwzNTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYz''@;'; put 'put ''OCwzNTYzMCwzNTYyMCwzNTY0MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1MywzNjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1Nywz''@;'; put 'put ''NjQzNiwzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwzNzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwzNzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2''@;'; put 'put ''OCwzNzc4NSwzNzc5MSwzNzc3MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgwMCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYxOCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwzODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwz''@;'; put 'put ''ODgyNywzODgyMCwzODgyNiwzODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwzODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwzOTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQyOCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYx''@;'; put 'put ''NiwzOTY0NCwzOTY4OCwzOTY4NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0''@;'; put 'put ''MDI4MSw0MDI3OCw0MDI2OCw0MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4''@;'; put 'put ''NywyMjE4OSwyMjE4MiwyMjE4MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwyNTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2Nywy''@;'; put 'put ''NzM2MCwyNzM0MCwyNzM0NSwyNzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwyNzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwyODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcwNiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcx''@;'; put 'put ''NCwyOTE5NiwyOTE5NCwyOTE5MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwzMTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1Miwz''@;'; put 'put ''MTMzNSwzMTMzNiwzMTc5NSwzMTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwzMTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwzMjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIz''@;'; put 'put ''OSwzMzIzNywzMzM4MCwzMzM3NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwzNDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwz''@;'; put 'put ''NDgxOSwzNDgwNiwzNDgwNywzNDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwzNDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwzNTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIwOCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1''@;'; put 'put ''OCwzNTY0OCwzNTY2NywzNTY3MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEwNSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2NywzNjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwz''@;'; put 'put ''NjU0NiwzNjY5MCwzNjY4OSwzNjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwzNzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwzNzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgwMSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0''@;'; put 'put ''NSwzNzgyOCwzNzgzOCwzNzgyNCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgzOCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwzOTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwz''@;'; put 'put ''OTEwMiwzOTI0MCwzOTIzOSwzOTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwzOTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwzOTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkw''@;'; put 'put ''NCwzOTkwMiwzOTkwOCwzOTkxMCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkxNiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMzMCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0''@;'; put 'put ''MDMwOCw0MDMwOSw0MDMwNCw0MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5''@;'; put 'put ''NSwyMjc1NSwyMzM2NSwyNDAwNiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUxMywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwyNzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwy''@;'; put 'put ''ODcxOSwyODcyNywyODcyNCwyODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwyODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwyOTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcw''@;'; put 'put ''NiwzMTAxMywzMTAxMSwzMTAxNSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwzMjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwz''@;'; put 'put ''MzM4NCwzMzM4NSwzNDMzOCwzNDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwzNDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywzNDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4''@;'; put 'put ''OCwzNTY4MywzNTY4NSwzNTY4NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwzNzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwz''@;'; put 'put ''Nzg4NiwzNzkwOSwzNzkwNCwzNzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwzNzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwzNzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkwNSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcw''@;'; put 'put ''MywzODg0MSwzODg0MywzODkwOSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAwNywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2NiwzOTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywz''@;'; put 'put ''OTYyNiwzOTYyMiwzOTY5NiwzOTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywzOTk0MSwzOTk1NCwzOTkyOCw0ZTQsMzk5NDMsMzk5NTAsMzk5NDIsMzk5NTksMzk5NTYsMzk5NDUsNDAzNTEsNDAzNDUsNDAzNTYsNDAzNDksNDAzMzgsNDAzNDQsNDAzMzYsNDAzNDcsNDAzNTIsNDAzNDAs''@;'; put 'put ''NDAzNDgsNDAzNjIsNDAzNDMsNDAzNTMsNDAzNDYsNDAzNTQsNDAzNjAsNDAzNTAsNDAzNTUsNDAzODMsNDAzNjEsNDAzNDIsNDAzNTgsNDAzNTksNDA2MDEsNDA2MDMsNDA2MDIsNDA2NzcsNDA2NzYsNDA2NzksNDA2NzgsNDA3NTIsNDA3NTAsNDA3OTUsNDA4MDAsNDA3OTgsNDA3OTcsNDA3''@;'; put 'put ''OTMsNDA4NDksMjA3OTQsMjA3OTMsMjExNDQsMjExNDMsMjIyMTEsMjIyMDUsMjIyMDYsMjMzNjgsMjMzNjcsMjQwMTEsMjQwMTUsMjQzMDUsMjUwODUsMjU4ODMsMjczOTQsMjczODgsMjczOTUsMjczODQsMjczOTIsMjg3MzksMjg3NDAsMjg3NDYsMjg3NDQsMjg3NDUsMjg3NDEsMjg3NDIs''@;'; put 'put ''MjkyMTMsMjkyMTAsMjkyMDksMjk1NjYsMjk5NzUsMzAzMTQsMzA2NzIsMzEwMjEsMzEwMjUsMzEwMjMsMzE4MjgsMzE4MjcsMzE5ODYsMzIzOTQsMzIzOTEsMzIzOTIsMzIzOTUsMzIzOTAsMzIzOTcsMzI1ODksMzI2OTksMzI4MTYsMzMyNDUsMzQzMjgsMzQzNDYsMzQzNDIsMzQzMzUsMzQz''@;'; put 'put ''MzksMzQzMzIsMzQzMjksMzQzNDMsMzQzNTAsMzQzMzcsMzQzMzYsMzQzNDUsMzQzMzQsMzQzNDEsMzQ4NTcsMzQ4NDUsMzQ4NDMsMzQ4NDgsMzQ4NTIsMzQ4NDQsMzQ4NTksMzQ4OTAsMzUxODEsMzUxNzcsMzUxODIsMzUxNzksMzUzMjIsMzU3MDUsMzU3MDQsMzU2NTMsMzU3MDYsMzU3MDcs''@;'; put 'put ''MzYxMTIsMzYxMTYsMzYyNzEsMzY0OTQsMzY0OTIsMzY3MDIsMzY2OTksMzY3MDEsMzcxOTAsMzcxODgsMzcxODksMzczMDUsMzc5NTEsMzc5NDcsMzc5NDIsMzc5MjksMzc5NDksMzc5NDgsMzc5MzYsMzc5NDUsMzc5MzAsMzc5NDMsMzc5MzIsMzc5NTIsMzc5MzcsMzgzNzMsMzgzNzIsMzgz''@;'; put 'put ''NzEsMzg3MDksMzg3MTQsMzg4NDcsMzg4ODEsMzkwMTIsMzkxMTMsMzkxMTAsMzkxMDQsMzkyNTYsMzkyNTQsMzk0ODEsMzk0ODUsMzk0OTQsMzk0OTIsMzk0OTAsMzk0ODksMzk0ODIsMzk0ODcsMzk2MjksMzk3MDEsMzk3MDMsMzk3MDQsMzk3MDIsMzk3MzgsMzk3NjIsMzk5NzksMzk5NjUs''@;'; put 'put ''Mzk5NjQsMzk5ODAsMzk5NzEsMzk5NzYsMzk5NzcsMzk5NzIsMzk5NjksNDAzNzUsNDAzNzQsNDAzODAsNDAzODUsNDAzOTEsNDAzOTQsNDAzOTksNDAzODIsNDAzODksNDAzODcsNDAzNzksNDAzNzMsNDAzOTgsNDAzNzcsNDAzNzgsNDAzNjQsNDAzOTIsNDAzNjksNDAzNjUsNDAzOTYsNDAz''@;'; put 'put ''NzEsNDAzOTcsNDAzNzAsNDA1NzAsNDA2MDQsNDA2ODMsNDA2ODYsNDA2ODUsNDA3MzEsNDA3MjgsNDA3MzAsNDA3NTMsNDA3ODIsNDA4MDUsNDA4MDQsNDA4NTAsMjAxNTMsMjIyMTQsMjIyMTMsMjIyMTksMjI4OTcsMjMzNzEsMjMzNzIsMjQwMjEsMjQwMTcsMjQzMDYsMjU4ODksMjU4ODgs''@;'; put 'put ''MjU4OTQsMjU4OTAsMjc0MDMsMjc0MDAsMjc0MDEsMjc2NjEsMjg3NTcsMjg3NTgsMjg3NTksMjg3NTQsMjkyMTQsMjkyMTUsMjkzNTMsMjk1NjcsMjk5MTIsMjk5MDksMjk5MTMsMjk5MTEsMzAzMTcsMzAzODEsMzEwMjksMzExNTYsMzEzNDQsMzEzNDUsMzE4MzEsMzE4MzYsMzE4MzMsMzE4''@;'; put 'put ''MzUsMzE4MzQsMzE5ODgsMzE5ODUsMzI0MDEsMzI1OTEsMzI2NDcsMzMyNDYsMzMzODcsMzQzNTYsMzQzNTcsMzQzNTUsMzQzNDgsMzQzNTQsMzQzNTgsMzQ4NjAsMzQ4NTYsMzQ4NTQsMzQ4NTgsMzQ4NTMsMzUxODUsMzUyNjMsMzUyNjIsMzUzMjMsMzU3MTAsMzU3MTYsMzU3MTQsMzU3MTgs''@;'; put 'put ''MzU3MTcsMzU3MTEsMzYxMTcsMzY1MDEsMzY1MDAsMzY1MDYsMzY0OTgsMzY0OTYsMzY1MDIsMzY1MDMsMzY3MDQsMzY3MDYsMzcxOTEsMzc5NjQsMzc5NjgsMzc5NjIsMzc5NjMsMzc5NjcsMzc5NTksMzc5NTcsMzc5NjAsMzc5NjEsMzc5NTgsMzg3MTksMzg4ODMsMzkwMTgsMzkwMTcsMzkx''@;'; put 'put ''MTUsMzkyNTIsMzkyNTksMzk1MDIsMzk1MDcsMzk1MDgsMzk1MDAsMzk1MDMsMzk0OTYsMzk0OTgsMzk0OTcsMzk1MDYsMzk1MDQsMzk2MzIsMzk3MDUsMzk3MjMsMzk3MzksMzk3NjYsMzk3NjUsNDAwMDYsNDAwMDgsMzk5OTksNDAwMDQsMzk5OTMsMzk5ODcsNDAwMDEsMzk5OTYsMzk5OTEs''@;'; put 'put ''Mzk5ODgsMzk5ODYsMzk5OTcsMzk5OTAsNDA0MTEsNDA0MDIsNDA0MTQsNDA0MTAsNDAzOTUsNDA0MDAsNDA0MTIsNDA0MDEsNDA0MTUsNDA0MjUsNDA0MDksNDA0MDgsNDA0MDYsNDA0MzcsNDA0MDUsNDA0MTMsNDA2MzAsNDA2ODgsNDA3NTcsNDA3NTUsNDA3NTQsNDA3NzAsNDA4MTEsNDA4''@;'; put 'put ''NTMsNDA4NjYsMjA3OTcsMjExNDUsMjI3NjAsMjI3NTksMjI4OTgsMjMzNzMsMjQwMjQsMzQ4NjMsMjQzOTksMjUwODksMjUwOTEsMjUwOTIsMjU4OTcsMjU4OTMsMjYwMDYsMjYzNDcsMjc0MDksMjc0MTAsMjc0MDcsMjc1OTQsMjg3NjMsMjg3NjIsMjkyMTgsMjk1NzAsMjk1NjksMjk1NzEs''@;'; put 'put ''MzAzMjAsMzA2NzYsMzE4NDcsMzE4NDYsMzI0MDUsMzMzODgsMzQzNjIsMzQzNjgsMzQzNjEsMzQzNjQsMzQzNTMsMzQzNjMsMzQzNjYsMzQ4NjQsMzQ4NjYsMzQ4NjIsMzQ4NjcsMzUxOTAsMzUxODgsMzUxODcsMzUzMjYsMzU3MjQsMzU3MjYsMzU3MjMsMzU3MjAsMzU5MDksMzYxMjEsMzY1''@;'; put 'put ''MDQsMzY3MDgsMzY3MDcsMzczMDgsMzc5ODYsMzc5NzMsMzc5ODEsMzc5NzUsMzc5ODIsMzg4NTIsMzg4NTMsMzg5MTIsMzk1MTAsMzk1MTMsMzk3MTAsMzk3MTEsMzk3MTIsNDAwMTgsNDAwMjQsNDAwMTYsNDAwMTAsNDAwMTMsNDAwMTEsNDAwMjEsNDAwMjUsNDAwMTIsNDAwMTQsNDA0NDMs''@;'; put 'put ''NDA0MzksNDA0MzEsNDA0MTksNDA0MjcsNDA0NDAsNDA0MjAsNDA0MzgsNDA0MTcsNDA0MzAsNDA0MjIsNDA0MzQsNDA0MzIsNDA0MTgsNDA0MjgsNDA0MzYsNDA0MzUsNDA0MjQsNDA0MjksNDA2NDIsNDA2NTYsNDA2OTAsNDA2OTEsNDA3MTAsNDA3MzIsNDA3NjAsNDA3NTksNDA3NTgsNDA3''@;'; put 'put ''NzEsNDA3ODMsNDA4MTcsNDA4MTYsNDA4MTQsNDA4MTUsMjIyMjcsMjIyMjEsMjMzNzQsMjM2NjEsMjU5MDEsMjYzNDksMjYzNTAsMjc0MTEsMjg3NjcsMjg3NjksMjg3NjUsMjg3NjgsMjkyMTksMjk5MTUsMjk5MjUsMzA2NzcsMzEwMzIsMzExNTksMzExNTgsMzE4NTAsMzI0MDcsMzI2NDks''@;'; put 'put ''MzMzODksMzQzNzEsMzQ4NzIsMzQ4NzEsMzQ4NjksMzQ4OTEsMzU3MzIsMzU3MzMsMzY1MTAsMzY1MTEsMzY1MTIsMzY1MDksMzczMTAsMzczMDksMzczMTQsMzc5OTUsMzc5OTIsMzc5OTMsMzg2MjksMzg3MjYsMzg3MjMsMzg3MjcsMzg4NTUsMzg4ODUsMzk1MTgsMzk2MzcsMzk3NjksNDAw''@;'; put 'put ''MzUsNDAwMzksNDAwMzgsNDAwMzQsNDAwMzAsNDAwMzIsNDA0NTAsNDA0NDYsNDA0NTUsNDA0NTEsNDA0NTQsNDA0NTMsNDA0NDgsNDA0NDksNDA0NTcsNDA0NDcsNDA0NDUsNDA0NTIsNDA2MDgsNDA3MzQsNDA3NzQsNDA4MjAsNDA4MjEsNDA4MjIsMjIyMjgsMjU5MDIsMjYwNDAsMjc0MTYs''@;'; put 'put ''Mjc0MTcsMjc0MTUsMjc0MTgsMjg3NzAsMjkyMjIsMjkzNTQsMzA2ODAsMzA2ODEsMzEwMzMsMzE4NDksMzE4NTEsMzE5OTAsMzI0MTAsMzI0MDgsMzI0MTEsMzI0MDksMzMyNDgsMzMyNDksMzQzNzQsMzQzNzUsMzQzNzYsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTUsMzUzMjcsMzU3MzYsMzU3''@;'; put 'put ''MzcsMzY1MTcsMzY1MTYsMzY1MTUsMzc5OTgsMzc5OTcsMzc5OTksMzgwMDEsMzgwMDMsMzg3MjksMzkwMjYsMzkyNjMsNDAwNDAsNDAwNDYsNDAwNDUsNDA0NTksNDA0NjEsNDA0NjQsNDA0NjMsNDA0NjYsNDA0NjUsNDA2MDksNDA2OTMsNDA3MTMsNDA3NzUsNDA4MjQsNDA4MjcsNDA4MjYs''@;'; put 'put ''NDA4MjUsMjIzMDIsMjg3NzQsMzE4NTUsMzQ4NzYsMzYyNzQsMzY1MTgsMzczMTUsMzgwMDQsMzgwMDgsMzgwMDYsMzgwMDUsMzk1MjAsNDAwNTIsNDAwNTEsNDAwNDksNDAwNTMsNDA0NjgsNDA0NjcsNDA2OTQsNDA3MTQsNDA4NjgsMjg3NzYsMjg3NzMsMzE5OTEsMzQ0MTAsMzQ4NzgsMzQ4''@;'; put 'put ''NzcsMzQ4NzksMzU3NDIsMzU5OTYsMzY1MjEsMzY1NTMsMzg3MzEsMzkwMjcsMzkwMjgsMzkxMTYsMzkyNjUsMzkzMzksMzk1MjQsMzk1MjYsMzk1MjcsMzk3MTYsNDA0NjksNDA0NzEsNDA3NzYsMjUwOTUsMjc0MjIsMjkyMjMsMzQzODAsMzY1MjAsMzgwMTgsMzgwMTYsMzgwMTcsMzk1Mjks''@;'; put 'put ''Mzk1MjgsMzk3MjYsNDA0NzMsMjkyMjUsMzQzNzksMzU3NDMsMzgwMTksNDAwNTcsNDA2MzEsMzAzMjUsMzk1MzEsNDAwNTgsNDA0NzcsMjg3NzcsMjg3NzgsNDA2MTIsNDA4MzAsNDA3NzcsNDA4NTYsMzA4NDksMzc1NjEsMzUwMjMsMjI3MTUsMjQ2NTgsMzE5MTEsMjMyOTAsOTU1Niw5NTc0''@;'; put 'put ''LDk1NTksOTU2OCw5NTgwLDk1NzEsOTU2Miw5NTc3LDk1NjUsOTU1NCw5NTcyLDk1NTcsOTU2Niw5NTc4LDk1NjksOTU2MCw5NTc1LDk1NjMsOTU1NSw5NTczLDk1NTgsOTU2Nyw5NTc5LDk1NzAsOTU2MSw5NTc2LDk1NjQsOTU1Myw5NTUyLDk1ODEsOTU4Miw5NTg0LDk1ODMsNjU1MTcsMTMy''@;'; put 'put ''NDIzLDM3NTk1LDEzMjU3NSwxNDczOTcsMzQxMjQsMTcwNzcsMjk2NzksMjA5MTcsMTM4OTcsMTQ5ODI2LDE2NjM3MiwzNzcwMCwxMzc2OTEsMzM1MTgsMTQ2NjMyLDMwNzgwLDI2NDM2LDI1MzExLDE0OTgxMSwxNjYzMTQsMTMxNzQ0LDE1ODY0MywxMzU5NDEsMjAzOTUsMTQwNTI1LDIwNDg4''@;'; put 'put ''LDE1OTAxNywxNjI0MzYsMTQ0ODk2LDE1MDE5MywxNDA1NjMsMjA1MjEsMTMxOTY2LDI0NDg0LDEzMTk2OCwxMzE5MTEsMjgzNzksMTMyMTI3LDIwNjA1LDIwNzM3LDEzNDM0LDIwNzUwLDM5MDIwLDE0MTQ3LDMzODE0LDE0OTkyNCwxMzIyMzEsMjA4MzIsMTQ0MzA4LDIwODQyLDEzNDE0Mywx''@;'; put 'put ''Mzk1MTYsMTMxODEzLDE0MDU5MiwxMzI0OTQsMTQzOTIzLDEzNzYwMywyMzQyNiwzNDY4NSwxMzI1MzEsMTQ2NTg1LDIwOTE0LDIwOTIwLDQwMjQ0LDIwOTM3LDIwOTQzLDIwOTQ1LDE1NTgwLDIwOTQ3LDE1MDE4MiwyMDkxNSwyMDk2MiwyMTMxNCwyMDk3MywzMzc0MSwyNjk0MiwxNDUxOTcs''@;'; put 'put ''MjQ0NDMsMjEwMDMsMjEwMzAsMjEwNTIsMjExNzMsMjEwNzksMjExNDAsMjExNzcsMjExODksMzE3NjUsMzQxMTQsMjEyMTYsMzQzMTcsMTU4NDgzLDIxMjUzLDE2NjYyMiwyMTgzMywyODM3NywxNDczMjgsMTMzNDYwLDE0NzQzNiwyMTI5OSwyMTMxNiwxMzQxMTQsMjc4NTEsMTM2OTk4LDI2''@;'; put 'put ''NjUxLDI5NjUzLDI0NjUwLDE2MDQyLDE0NTQwLDEzNjkzNiwyOTE0OSwxNzU3MCwyMTM1NywyMTM2NCwxNjU1NDcsMjEzNzQsMjEzNzUsMTM2NTk4LDEzNjcyMywzMDY5NCwyMTM5NSwxNjY1NTUsMjE0MDgsMjE0MTksMjE0MjIsMjk2MDcsMTUzNDU4LDE2MjE3LDI5NTk2LDIxNDQxLDIxNDQ1''@;'; put 'put ''LDI3NzIxLDIwMDQxLDIyNTI2LDIxNDY1LDE1MDE5LDEzNDAzMSwyMTQ3MiwxNDc0MzUsMTQyNzU1LDIxNDk0LDEzNDI2MywyMTUyMywyODc5MywyMTgwMywyNjE5OSwyNzk5NSwyMTYxMywxNTg1NDcsMTM0NTE2LDIxODUzLDIxNjQ3LDIxNjY4LDE4MzQyLDEzNjk3MywxMzQ4NzcsMTU3OTYs''@;'; put 'put ''MTM0NDc3LDE2NjMzMiwxNDA5NTIsMjE4MzEsMTk2OTMsMjE1NTEsMjk3MTksMjE4OTQsMjE5MjksMjIwMjEsMTM3NDMxLDE0NzUxNCwxNzc0NiwxNDg1MzMsMjYyOTEsMTM1MzQ4LDIyMDcxLDI2MzE3LDE0NDAxMCwyNjI3NiwyNjI4NSwyMjA5MywyMjA5NSwzMDk2MSwyMjI1NywzODc5MSwy''@;'; put 'put ''MTUwMiwyMjI3MiwyMjI1NSwyMjI1MywxNjY3NTgsMTM4NTksMTM1NzU5LDIyMzQyLDE0Nzg3NywyNzc1OCwyODgxMSwyMjMzOCwxNDAwMSwxNTg4NDYsMjI1MDIsMTM2MjE0LDIyNTMxLDEzNjI3NiwxNDgzMjMsMjI1NjYsMTUwNTE3LDIyNjIwLDIyNjk4LDEzNjY1LDIyNzUyLDIyNzQ4LDEz''@;'; put 'put ''NTc0MCwyMjc3OSwyMzU1MSwyMjMzOSwxNzIzNjgsMTQ4MDg4LDM3ODQzLDEzNzI5LDIyODE1LDI2NzkwLDE0MDE5LDI4MjQ5LDEzNjc2NiwyMzA3NiwyMTg0MywxMzY4NTAsMzQwNTMsMjI5ODUsMTM0NDc4LDE1ODg0OSwxNTkwMTgsMTM3MTgwLDIzMDAxLDEzNzIxMSwxMzcxMzgsMTU5MTQy''@;'; put 'put ''LDI4MDE3LDEzNzI1NiwxMzY5MTcsMjMwMzMsMTU5MzAxLDIzMjExLDIzMTM5LDE0MDU0LDE0OTkyOSwyMzE1OSwxNDA4OCwyMzE5MCwyOTc5NywyMzI1MSwxNTk2NDksMTQwNjI4LDE1NzQ5LDEzNzQ4OSwxNDEzMCwxMzY4ODgsMjQxOTUsMjEyMDAsMjM0MTQsMjU5OTIsMjM0MjAsMTYyMzE4''@;'; put 'put ''LDE2Mzg4LDE4NTI1LDEzMTU4OCwyMzUwOSwyNDkyOCwxMzc3ODAsMTU0MDYwLDEzMjUxNywyMzUzOSwyMzQ1MywxOTcyOCwyMzU1NywxMzgwNTIsMjM1NzEsMjk2NDYsMjM1NzIsMTM4NDA1LDE1ODUwNCwyMzYyNSwxODY1MywyMzY4NSwyMzc4NSwyMzc5MSwyMzk0NywxMzg3NDUsMTM4ODA3''@;'; put 'put ''LDIzODI0LDIzODMyLDIzODc4LDEzODkxNiwyMzczOCwyNDAyMywzMzUzMiwxNDM4MSwxNDk3NjEsMTM5MzM3LDEzOTYzNSwzMzQxNSwxNDM5MCwxNTI5OCwyNDExMCwyNzI3NCwyNDE4MSwyNDE4NiwxNDg2NjgsMTM0MzU1LDIxNDE0LDIwMTUxLDI0MjcyLDIxNDE2LDEzNzA3MywyNDA3Mywy''@;'; put 'put ''NDMwOCwxNjQ5OTQsMjQzMTMsMjQzMTUsMTQ0OTYsMjQzMTYsMjY2ODYsMzc5MTUsMjQzMzMsMTMxNTIxLDE5NDcwOCwxNTA3MCwxODYwNiwxMzU5OTQsMjQzNzgsMTU3ODMyLDE0MDI0MCwyNDQwOCwxNDA0MDEsMjQ0MTksMzg4NDUsMTU5MzQyLDI0NDM0LDM3Njk2LDE2NjQ1NCwyNDQ4Nywy''@;'; put 'put ''Mzk5MCwxNTcxMSwxNTIxNDQsMTM5MTE0LDE1OTk5MiwxNDA5MDQsMzczMzQsMTMxNzQyLDE2NjQ0MSwyNDYyNSwyNjI0NSwxMzczMzUsMTQ2OTEsMTU4MTUsMTM4ODEsMjI0MTYsMTQxMjM2LDMxMDg5LDE1OTM2LDI0NzM0LDI0NzQwLDI0NzU1LDE0OTg5MCwxNDk5MDMsMTYyMzg3LDI5ODYw''@;'; put 'put ''LDIwNzA1LDIzMjAwLDI0OTMyLDMzODI4LDI0ODk4LDE5NDcyNiwxNTk0NDIsMjQ5NjEsMjA5ODAsMTMyNjk0LDI0OTY3LDIzNDY2LDE0NzM4MywxNDE0MDcsMjUwNDMsMTY2ODEzLDE3MDMzMywyNTA0MCwxNDY0MiwxNDE2OTYsMTQxNTA1LDI0NjExLDI0OTI0LDI1ODg2LDI1NDgzLDEzMTM1''@;'; put 'put ''MiwyNTI4NSwxMzcwNzIsMjUzMDEsMTQyODYxLDI1NDUyLDE0OTk4MywxNDg3MSwyNTY1NiwyNTU5MiwxMzYwNzgsMTM3MjEyLDI1NzQ0LDI4NTU0LDE0MjkwMiwzODkzMiwxNDc1OTYsMTUzMzczLDI1ODI1LDI1ODI5LDM4MDExLDE0OTUwLDI1NjU4LDE0OTM1LDI1OTMzLDI4NDM4LDE1MDA1''@;'; put 'put ''NiwxNTAwNTEsMjU5ODksMjU5NjUsMjU5NTEsMTQzNDg2LDI2MDM3LDE0OTgyNCwxOTI1NSwyNjA2NSwxNjYwMCwxMzcyNTcsMjYwODAsMjYwODMsMjQ1NDMsMTQ0Mzg0LDI2MTM2LDE0Mzg2MywxNDM4NjQsMjYxODAsMTQzNzgwLDE0Mzc4MSwyNjE4NywxMzQ3NzMsMjYyMTUsMTUyMDM4LDI2''@;'; put 'put ''MjI3LDI2MjI4LDEzODgxMywxNDM5MjEsMTY1MzY0LDE0MzgxNiwxNTIzMzksMzA2NjEsMTQxNTU5LDM5MzMyLDI2MzcwLDE0ODM4MCwxNTAwNDksMTUxNDcsMjcxMzAsMTQ1MzQ2LDI2NDYyLDI2NDcxLDI2NDY2LDE0NzkxNywxNjgxNzMsMjY1ODMsMTc2NDEsMjY2NTgsMjgyNDAsMzc0MzYs''@;'; put 'put ''MjY2MjUsMTQ0MzU4LDE1OTEzNiwyNjcxNywxNDQ0OTUsMjcxMDUsMjcxNDcsMTY2NjIzLDI2OTk1LDI2ODE5LDE0NDg0NSwyNjg4MSwyNjg4MCwxNTY2NiwxNDg0OSwxNDQ5NTYsMTUyMzIsMjY1NDAsMjY5NzcsMTY2NDc0LDE3MTQ4LDI2OTM0LDI3MDMyLDE1MjY1LDEzMjA0MSwzMzYzNSwy''@;'; put 'put ''MDYyNCwyNzEyOSwxNDQ5ODUsMTM5NTYyLDI3MjA1LDE0NTE1NSwyNzI5MywxNTM0NywyNjU0NSwyNzMzNiwxNjgzNDgsMTUzNzMsMjc0MjEsMTMzNDExLDI0Nzk4LDI3NDQ1LDI3NTA4LDE0MTI2MSwyODM0MSwxNDYxMzksMTMyMDIxLDEzNzU2MCwxNDE0NCwyMTUzNywxNDYyNjYsMjc2MTcs''@;'; put 'put ''MTQ3MTk2LDI3NjEyLDI3NzAzLDE0MDQyNywxNDk3NDUsMTU4NTQ1LDI3NzM4LDMzMzE4LDI3NzY5LDE0Njg3NiwxNzYwNSwxNDY4NzcsMTQ3ODc2LDE0OTc3MiwxNDk3NjAsMTQ2NjMzLDE0MDUzLDE1NTk1LDEzNDQ1MCwzOTgxMSwxNDM4NjUsMTQwNDMzLDMyNjU1LDI2Njc5LDE1OTAxMywx''@;'; put 'put ''NTkxMzcsMTU5MjExLDI4MDU0LDI3OTk2LDI4Mjg0LDI4NDIwLDE0OTg4NywxNDc1ODksMTU5MzQ2LDM0MDk5LDE1OTYwNCwyMDkzNSwyNzgwNCwyODE4OSwzMzgzOCwxNjY2ODksMjgyMDcsMTQ2OTkxLDI5Nzc5LDE0NzMzMCwzMTE4MCwyODIzOSwyMzE4NSwxNDM0MzUsMjg2NjQsMTQwOTMs''@;'; put 'put ''Mjg1NzMsMTQ2OTkyLDI4NDEwLDEzNjM0MywxNDc1MTcsMTc3NDksMzc4NzIsMjg0ODQsMjg1MDgsMTU2OTQsMjg1MzIsMTY4MzA0LDE1Njc1LDI4NTc1LDE0Nzc4MCwyODYyNywxNDc2MDEsMTQ3Nzk3LDE0NzUxMywxNDc0NDAsMTQ3MzgwLDE0Nzc3NSwyMDk1OSwxNDc3OTgsMTQ3Nzk5LDE0''@;'; put 'put ''Nzc3NiwxNTYxMjUsMjg3NDcsMjg3OTgsMjg4MzksMjg4MDEsMjg4NzYsMjg4ODUsMjg4ODYsMjg4OTUsMTY2NDQsMTU4NDgsMjkxMDgsMjkwNzgsMTQ4MDg3LDI4OTcxLDI4OTk3LDIzMTc2LDI5MDAyLDI5MDM4LDIzNzA4LDE0ODMyNSwyOTAwNywzNzczMCwxNDgxNjEsMjg5NzIsMTQ4NTcw''@;'; put 'put ''LDE1MDA1NSwxNTAwNTAsMjkxMTQsMTY2ODg4LDI4ODYxLDI5MTk4LDM3OTU0LDI5MjA1LDIyODAxLDM3OTU1LDI5MjIwLDM3Njk3LDE1MzA5MywyOTIzMCwyOTI0OCwxNDk4NzYsMjY4MTMsMjkyNjksMjkyNzEsMTU5NTcsMTQzNDI4LDI2NjM3LDI4NDc3LDI5MzE0LDI5NDgyLDI5NDgzLDE0''@;'; put 'put ''OTUzOSwxNjU5MzEsMTg2NjksMTY1ODkyLDI5NDgwLDI5NDg2LDI5NjQ3LDI5NjEwLDEzNDIwMiwxNTgyNTQsMjk2NDEsMjk3NjksMTQ3OTM4LDEzNjkzNSwxNTAwNTIsMjYxNDcsMTQwMjEsMTQ5OTQzLDE0OTkwMSwxNTAwMTEsMjk2ODcsMjk3MTcsMjY4ODMsMTUwMDU0LDI5NzUzLDEzMjU0''@;'; put 'put ''NywxNjA4NywyOTc4OCwxNDE0ODUsMjk3OTIsMTY3NjAyLDI5NzY3LDI5NjY4LDI5ODE0LDMzNzIxLDI5ODA0LDE0MTI4LDI5ODEyLDM3ODczLDI3MTgwLDI5ODI2LDE4NzcxLDE1MDE1NiwxNDc4MDcsMTUwMTM3LDE2Njc5OSwyMzM2NiwxNjY5MTUsMTM3Mzc0LDI5ODk2LDEzNzYwOCwyOTk2''@;'; put 'put ''NiwyOTkyOSwyOTk4MiwxNjc2NDEsMTM3ODAzLDIzNTExLDE2NzU5NiwzNzc2NSwzMDAyOSwzMDAyNiwzMDA1NSwzMDA2MiwxNTE0MjYsMTYxMzIsMTUwODAzLDMwMDk0LDI5Nzg5LDMwMTEwLDMwMTMyLDMwMjEwLDMwMjUyLDMwMjg5LDMwMjg3LDMwMzE5LDMwMzI2LDE1NjY2MSwzMDM1Miwz''@;'; put 'put ''MzI2MywxNDMyOCwxNTc5NjksMTU3OTY2LDMwMzY5LDMwMzczLDMwMzkxLDMwNDEyLDE1OTY0NywzMzg5MCwxNTE3MDksMTUxOTMzLDEzODc4MCwzMDQ5NCwzMDUwMiwzMDUyOCwyNTc3NSwxNTIwOTYsMzA1NTIsMTQ0MDQ0LDMwNjM5LDE2NjI0NCwxNjYyNDgsMTM2ODk3LDMwNzA4LDMwNzI5''@;'; put 'put ''LDEzNjA1NCwxNTAwMzQsMjY4MjYsMzA4OTUsMzA5MTksMzA5MzEsMzg1NjUsMzEwMjIsMTUzMDU2LDMwOTM1LDMxMDI4LDMwODk3LDE2MTI5MiwzNjc5MiwzNDk0OCwxNjY2OTksMTU1Nzc5LDE0MDgyOCwzMTExMCwzNTA3MiwyNjg4MiwzMTEwNCwxNTM2ODcsMzExMzMsMTYyNjE3LDMxMDM2''@;'; put 'put ''LDMxMTQ1LDI4MjAyLDE2MDAzOCwxNjA0MCwzMTE3NCwxNjgyMDUsMzExODhdLCJldWMta3IiOls0NDAzNCw0NDAzNSw0NDAzNyw0NDAzOCw0NDA0Myw0NDA0NCw0NDA0NSw0NDA0Niw0NDA0Nyw0NDA1Niw0NDA2Miw0NDA2Myw0NDA2NSw0NDA2Niw0NDA2Nyw0NDA2OSw0NDA3MCw0NDA3MSw0''@;'; put 'put ''NDA3Miw0NDA3Myw0NDA3NCw0NDA3NSw0NDA3OCw0NDA4Miw0NDA4Myw0NDA4NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDA4NSw0NDA4Niw0NDA4Nyw0NDA5MCw0NDA5MSw0NDA5Myw0NDA5NCw0NDA5NSw0NDA5Nyw0NDA5OCw0NDA5OSw0NDEwMCw0NDEwMSw0NDEwMiw0NDEw''@;'; put 'put ''Myw0NDEwNCw0NDEwNSw0NDEwNiw0NDEwOCw0NDExMCw0NDExMSw0NDExMiw0NDExMyw0NDExNCw0NDExNSw0NDExNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDExOCw0NDExOSw0NDEyMSw0NDEyMiw0NDEyMyw0NDEyNSw0NDEyNiw0NDEyNyw0NDEyOCw0NDEyOSw0NDEzMCw0''@;'; put 'put ''NDEzMSw0NDEzMiw0NDEzMyw0NDEzNCw0NDEzNSw0NDEzNiw0NDEzNyw0NDEzOCw0NDEzOSw0NDE0MCw0NDE0MSw0NDE0Miw0NDE0Myw0NDE0Niw0NDE0Nyw0NDE0OSw0NDE1MCw0NDE1Myw0NDE1NSw0NDE1Niw0NDE1Nyw0NDE1OCw0NDE1OSw0NDE2Miw0NDE2Nyw0NDE2OCw0NDE3Myw0NDE3''@;'; put 'put ''NCw0NDE3NSw0NDE3Nyw0NDE3OCw0NDE3OSw0NDE4MSw0NDE4Miw0NDE4Myw0NDE4NCw0NDE4NSw0NDE4Niw0NDE4Nyw0NDE5MCw0NDE5NCw0NDE5NSw0NDE5Niw0NDE5Nyw0NDE5OCw0NDE5OSw0NDIwMyw0NDIwNSw0NDIwNiw0NDIwOSw0NDIxMCw0NDIxMSw0NDIxMiw0NDIxMyw0NDIxNCw0''@;'; put 'put ''NDIxNSw0NDIxOCw0NDIyMiw0NDIyMyw0NDIyNCw0NDIyNiw0NDIyNyw0NDIyOSw0NDIzMCw0NDIzMSw0NDIzMyw0NDIzNCw0NDIzNSw0NDIzNyw0NDIzOCw0NDIzOSw0NDI0MCw0NDI0MSw0NDI0Miw0NDI0Myw0NDI0NCw0NDI0Niw0NDI0OCw0NDI0OSw0NDI1MCw0NDI1MSw0NDI1Miw0NDI1''@;'; put 'put ''Myw0NDI1NCw0NDI1NSw0NDI1OCw0NDI1OSw0NDI2MSw0NDI2Miw0NDI2NSw0NDI2Nyw0NDI2OSw0NDI3MCw0NDI3NCw0NDI3Niw0NDI3OSw0NDI4MCw0NDI4MSw0NDI4Miw0NDI4Myw0NDI4Niw0NDI4Nyw0NDI4OSw0NDI5MCw0NDI5MSw0NDI5Myw0NDI5NSw0NDI5Niw0NDI5Nyw0NDI5OCw0''@;'; put 'put ''NDI5OSw0NDMwMiw0NDMwNCw0NDMwNiw0NDMwNyw0NDMwOCw0NDMwOSw0NDMxMCw0NDMxMSw0NDMxMyw0NDMxNCw0NDMxNSw0NDMxNyw0NDMxOCw0NDMxOSw0NDMyMSw0NDMyMiw0NDMyMyw0NDMyNCw0NDMyNSw0NDMyNiw0NDMyNyw0NDMyOCw0NDMzMCw0NDMzMSw0NDMzNCw0NDMzNSw0NDMz''@;'; put 'put ''Niw0NDMzNyw0NDMzOCw0NDMzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM0Miw0NDM0Myw0NDM0NSw0NDM0Niw0NDM0Nyw0NDM0OSw0NDM1MCw0NDM1MSw0NDM1Miw0NDM1Myw0NDM1NCw0NDM1NSw0NDM1OCw0NDM2MCw0NDM2Miw0NDM2Myw0NDM2NCw0NDM2NSw0NDM2Niw0''@;'; put 'put ''NDM2Nyw0NDM2OSw0NDM3MCw0NDM3MSw0NDM3Myw0NDM3NCw0NDM3NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM3Nyw0NDM3OCw0NDM3OSw0NDM4MCw0NDM4MSw0NDM4Miw0NDM4Myw0NDM4NCw0NDM4Niw0NDM4OCw0NDM4OSw0NDM5MCw0NDM5MSw0NDM5Miw0NDM5Myw0NDM5''@;'; put 'put ''NCw0NDM5NSw0NDM5OCw0NDM5OSw0NDQwMSw0NDQwMiw0NDQwNyw0NDQwOCw0NDQwOSw0NDQxMCw0NDQxNCw0NDQxNiw0NDQxOSw0NDQyMCw0NDQyMSw0NDQyMiw0NDQyMyw0NDQyNiw0NDQyNyw0NDQyOSw0NDQzMCw0NDQzMSw0NDQzMyw0NDQzNCw0NDQzNSw0NDQzNiw0NDQzNyw0NDQzOCw0''@;'; put 'put ''NDQzOSw0NDQ0MCw0NDQ0MSw0NDQ0Miw0NDQ0Myw0NDQ0Niw0NDQ0Nyw0NDQ0OCw0NDQ0OSw0NDQ1MCw0NDQ1MSw0NDQ1Myw0NDQ1NCw0NDQ1NSw0NDQ1Niw0NDQ1Nyw0NDQ1OCw0NDQ1OSw0NDQ2MCw0NDQ2MSw0NDQ2Miw0NDQ2Myw0NDQ2NCw0NDQ2NSw0NDQ2Niw0NDQ2Nyw0NDQ2OCw0NDQ2''@;'; put 'put ''OSw0NDQ3MCw0NDQ3Miw0NDQ3Myw0NDQ3NCw0NDQ3NSw0NDQ3Niw0NDQ3Nyw0NDQ3OCw0NDQ3OSw0NDQ4Miw0NDQ4Myw0NDQ4NSw0NDQ4Niw0NDQ4Nyw0NDQ4OSw0NDQ5MCw0NDQ5MSw0NDQ5Miw0NDQ5Myw0NDQ5NCw0NDQ5NSw0NDQ5OCw0NDUwMCw0NDUwMSw0NDUwMiw0NDUwMyw0NDUwNCw0''@;'; put 'put ''NDUwNSw0NDUwNiw0NDUwNyw0NDUwOSw0NDUxMCw0NDUxMSw0NDUxMyw0NDUxNCw0NDUxNSw0NDUxNyw0NDUxOCw0NDUxOSw0NDUyMCw0NDUyMSw0NDUyMiw0NDUyMyw0NDUyNCw0NDUyNSw0NDUyNiw0NDUyNyw0NDUyOCw0NDUyOSw0NDUzMCw0NDUzMSw0NDUzMiw0NDUzMyw0NDUzNCw0NDUz''@;'; put 'put ''NSw0NDUzOCw0NDUzOSw0NDU0MSw0NDU0Miw0NDU0Niw0NDU0Nyw0NDU0OCw0NDU0OSw0NDU1MCw0NDU1MSw0NDU1NCw0NDU1Niw0NDU1OCw0NDU1OSw0NDU2MCw0NDU2MSw0NDU2Miw0NDU2Myw0NDU2NSw0NDU2Niw0NDU2Nyw0NDU2OCw0NDU2OSw0NDU3MCw0NDU3MSw0NDU3MixudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDU3Myw0NDU3NCw0NDU3NSw0NDU3Niw0NDU3Nyw0NDU3OCw0NDU3OSw0NDU4MCw0NDU4MSw0NDU4Miw0NDU4Myw0NDU4NCw0NDU4NSw0NDU4Niw0NDU4Nyw0NDU4OCw0NDU4OSw0NDU5MCw0NDU5MSw0NDU5NCw0NDU5NSw0NDU5Nyw0NDU5OCw0NDYw''@;'; put 'put ''MSw0NDYwMyw0NDYwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDYwNSw0NDYwNiw0NDYwNyw0NDYxMCw0NDYxMiw0NDYxNSw0NDYxNiw0NDYxNyw0NDYxOSw0NDYyMyw0NDYyNSw0NDYyNiw0NDYyNyw0NDYyOSw0NDYzMSw0NDYzMiw0NDYzMyw0NDYzNCw0NDYzNSw0NDYzOCw0''@;'; put 'put ''NDY0Miw0NDY0Myw0NDY0NCw0NDY0Niw0NDY0Nyw0NDY1MCw0NDY1MSw0NDY1Myw0NDY1NCw0NDY1NSw0NDY1Nyw0NDY1OCw0NDY1OSw0NDY2MCw0NDY2MSw0NDY2Miw0NDY2Myw0NDY2Niw0NDY3MCw0NDY3MSw0NDY3Miw0NDY3Myw0NDY3NCw0NDY3NSw0NDY3OCw0NDY3OSw0NDY4MCw0NDY4''@;'; put 'put ''MSw0NDY4Miw0NDY4Myw0NDY4NSw0NDY4Niw0NDY4Nyw0NDY4OCw0NDY4OSw0NDY5MCw0NDY5MSw0NDY5Miw0NDY5Myw0NDY5NCw0NDY5NSw0NDY5Niw0NDY5Nyw0NDY5OCw0NDY5OSw0NDcwMCw0NDcwMSw0NDcwMiw0NDcwMyw0NDcwNCw0NDcwNSw0NDcwNiw0NDcwNyw0NDcwOCw0NDcwOSw0''@;'; put 'put ''NDcxMCw0NDcxMSw0NDcxMiw0NDcxMyw0NDcxNCw0NDcxNSw0NDcxNiw0NDcxNyw0NDcxOCw0NDcxOSw0NDcyMCw0NDcyMSw0NDcyMiw0NDcyMyw0NDcyNCw0NDcyNSw0NDcyNiw0NDcyNyw0NDcyOCw0NDcyOSw0NDczMCw0NDczMSw0NDczNSw0NDczNyw0NDczOCw0NDczOSw0NDc0MSw0NDc0''@;'; put 'put ''Miw0NDc0Myw0NDc0NCw0NDc0NSw0NDc0Niw0NDc0Nyw0NDc1MCw0NDc1NCw0NDc1NSw0NDc1Niw0NDc1Nyw0NDc1OCw0NDc1OSw0NDc2Miw0NDc2Myw0NDc2NSw0NDc2Niw0NDc2Nyw0NDc2OCw0NDc2OSw0NDc3MCw0NDc3MSw0NDc3Miw0NDc3Myw0NDc3NCw0NDc3NSw0NDc3Nyw0NDc3OCw0''@;'; put 'put ''NDc4MCw0NDc4Miw0NDc4Myw0NDc4NCw0NDc4NSw0NDc4Niw0NDc4Nyw0NDc4OSw0NDc5MCw0NDc5MSw0NDc5Myw0NDc5NCw0NDc5NSw0NDc5Nyw0NDc5OCw0NDc5OSw0NDgwMCw0NDgwMSw0NDgwMiw0NDgwMyw0NDgwNCw0NDgwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgw''@;'; put 'put ''Niw0NDgwOSw0NDgxMCw0NDgxMSw0NDgxMiw0NDgxNCw0NDgxNSw0NDgxNyw0NDgxOCw0NDgxOSw0NDgyMCw0NDgyMSw0NDgyMiw0NDgyMyw0NDgyNCw0NDgyNSw0NDgyNiw0NDgyNyw0NDgyOCw0NDgyOSw0NDgzMCw0NDgzMSw0NDgzMiw0NDgzMyw0NDgzNCw0NDgzNSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw0NDgzNiw0NDgzNyw0NDgzOCw0NDgzOSw0NDg0MCw0NDg0MSw0NDg0Miw0NDg0Myw0NDg0Niw0NDg0Nyw0NDg0OSw0NDg1MSw0NDg1Myw0NDg1NCw0NDg1NSw0NDg1Niw0NDg1Nyw0NDg1OCw0NDg1OSw0NDg2Miw0NDg2NCw0NDg2OCw0NDg2OSw0NDg3MCw0NDg3''@;'; put 'put ''MSw0NDg3NCw0NDg3NSw0NDg3Niw0NDg3Nyw0NDg3OCw0NDg3OSw0NDg4MSw0NDg4Miw0NDg4Myw0NDg4NCw0NDg4NSw0NDg4Niw0NDg4Nyw0NDg4OCw0NDg4OSw0NDg5MCw0NDg5MSw0NDg5NCw0NDg5NSw0NDg5Niw0NDg5Nyw0NDg5OCw0NDg5OSw0NDkwMiw0NDkwMyw0NDkwNCw0NDkwNSw0''@;'; put 'put ''NDkwNiw0NDkwNyw0NDkwOCw0NDkwOSw0NDkxMCw0NDkxMSw0NDkxMiw0NDkxMyw0NDkxNCw0NDkxNSw0NDkxNiw0NDkxNyw0NDkxOCw0NDkxOSw0NDkyMCw0NDkyMiw0NDkyMyw0NDkyNCw0NDkyNSw0NDkyNiw0NDkyNyw0NDkyOSw0NDkzMCw0NDkzMSw0NDkzMyw0NDkzNCw0NDkzNSw0NDkz''@;'; put 'put ''Nyw0NDkzOCw0NDkzOSw0NDk0MCw0NDk0MSw0NDk0Miw0NDk0Myw0NDk0Niw0NDk0Nyw0NDk0OCw0NDk1MCw0NDk1MSw0NDk1Miw0NDk1Myw0NDk1NCw0NDk1NSw0NDk1Nyw0NDk1OCw0NDk1OSw0NDk2MCw0NDk2MSw0NDk2Miw0NDk2Myw0NDk2NCw0NDk2NSw0NDk2Niw0NDk2Nyw0NDk2OCw0''@;'; put 'put ''NDk2OSw0NDk3MCw0NDk3MSw0NDk3Miw0NDk3Myw0NDk3NCw0NDk3NSw0NDk3Niw0NDk3Nyw0NDk3OCw0NDk3OSw0NDk4MCw0NDk4MSw0NDk4Miw0NDk4Myw0NDk4Niw0NDk4Nyw0NDk4OSw0NDk5MCw0NDk5MSw0NDk5Myw0NDk5NCw0NDk5NSw0NDk5Niw0NDk5Nyw0NDk5OCw0NTAwMiw0NTAw''@;'; put 'put ''NCw0NTAwNyw0NTAwOCw0NTAwOSw0NTAxMCw0NTAxMSw0NTAxMyw0NTAxNCw0NTAxNSw0NTAxNiw0NTAxNyw0NTAxOCw0NTAxOSw0NTAyMSw0NTAyMiw0NTAyMyw0NTAyNCw0NTAyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTAyNiw0NTAyNyw0NTAyOCw0NTAyOSw0NTAzMCw0''@;'; put 'put ''NTAzMSw0NTAzNCw0NTAzNSw0NTAzNiw0NTAzNyw0NTAzOCw0NTAzOSw0NTA0Miw0NTA0Myw0NTA0NSw0NTA0Niw0NTA0Nyw0NTA0OSw0NTA1MCw0NTA1MSw0NTA1Miw0NTA1Myw0NTA1NCw0NTA1NSw0NTA1OCw0NTA1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTA2MSw0NTA2''@;'; put 'put ''Miw0NTA2Myw0NTA2NCw0NTA2NSw0NTA2Niw0NTA2Nyw0NTA2OSw0NTA3MCw0NTA3MSw0NTA3Myw0NTA3NCw0NTA3NSw0NTA3Nyw0NTA3OCw0NTA3OSw0NTA4MCw0NTA4MSw0NTA4Miw0NTA4Myw0NTA4Niw0NTA4Nyw0NTA4OCw0NTA4OSw0NTA5MCw0NTA5MSw0NTA5Miw0NTA5Myw0NTA5NCw0''@;'; put 'put ''NTA5NSw0NTA5Nyw0NTA5OCw0NTA5OSw0NTEwMCw0NTEwMSw0NTEwMiw0NTEwMyw0NTEwNCw0NTEwNSw0NTEwNiw0NTEwNyw0NTEwOCw0NTEwOSw0NTExMCw0NTExMSw0NTExMiw0NTExMyw0NTExNCw0NTExNSw0NTExNiw0NTExNyw0NTExOCw0NTExOSw0NTEyMCw0NTEyMSw0NTEyMiw0NTEy''@;'; put 'put ''Myw0NTEyNiw0NTEyNyw0NTEyOSw0NTEzMSw0NTEzMyw0NTEzNSw0NTEzNiw0NTEzNyw0NTEzOCw0NTE0Miw0NTE0NCw0NTE0Niw0NTE0Nyw0NTE0OCw0NTE1MCw0NTE1MSw0NTE1Miw0NTE1Myw0NTE1NCw0NTE1NSw0NTE1Niw0NTE1Nyw0NTE1OCw0NTE1OSw0NTE2MCw0NTE2MSw0NTE2Miw0''@;'; put 'put ''NTE2Myw0NTE2NCw0NTE2NSw0NTE2Niw0NTE2Nyw0NTE2OCw0NTE2OSw0NTE3MCw0NTE3MSw0NTE3Miw0NTE3Myw0NTE3NCw0NTE3NSw0NTE3Niw0NTE3Nyw0NTE3OCw0NTE3OSw0NTE4Miw0NTE4Myw0NTE4NSw0NTE4Niw0NTE4Nyw0NTE4OSw0NTE5MCw0NTE5MSw0NTE5Miw0NTE5Myw0NTE5''@;'; put 'put ''NCw0NTE5NSw0NTE5OCw0NTIwMCw0NTIwMiw0NTIwMyw0NTIwNCw0NTIwNSw0NTIwNiw0NTIwNyw0NTIxMSw0NTIxMyw0NTIxNCw0NTIxOSw0NTIyMCw0NTIyMSw0NTIyMiw0NTIyMyw0NTIyNiw0NTIzMiw0NTIzNCw0NTIzOCw0NTIzOSw0NTI0MSw0NTI0Miw0NTI0Myw0NTI0NSw0NTI0Niw0''@;'; put 'put ''NTI0Nyw0NTI0OCw0NTI0OSw0NTI1MCw0NTI1MSw0NTI1NCw0NTI1OCw0NTI1OSw0NTI2MCw0NTI2MSw0NTI2Miw0NTI2Myw0NTI2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI2Nyw0NTI2OSw0NTI3MCw0NTI3MSw0NTI3Myw0NTI3NCw0NTI3NSw0NTI3Niw0NTI3Nyw0NTI3''@;'; put 'put ''OCw0NTI3OSw0NTI4MSw0NTI4Miw0NTI4Myw0NTI4NCw0NTI4Niw0NTI4Nyw0NTI4OCw0NTI4OSw0NTI5MCw0NTI5MSw0NTI5Miw0NTI5Myw0NTI5NCw0NTI5NSw0NTI5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI5Nyw0NTI5OCw0NTI5OSw0NTMwMCw0NTMwMSw0NTMwMiw0''@;'; put 'put ''NTMwMyw0NTMwNCw0NTMwNSw0NTMwNiw0NTMwNyw0NTMwOCw0NTMwOSw0NTMxMCw0NTMxMSw0NTMxMiw0NTMxMyw0NTMxNCw0NTMxNSw0NTMxNiw0NTMxNyw0NTMxOCw0NTMxOSw0NTMyMiw0NTMyNSw0NTMyNiw0NTMyNyw0NTMyOSw0NTMzMiw0NTMzMyw0NTMzNCw0NTMzNSw0NTMzOCw0NTM0''@;'; put 'put ''Miw0NTM0Myw0NTM0NCw0NTM0NSw0NTM0Niw0NTM1MCw0NTM1MSw0NTM1Myw0NTM1NCw0NTM1NSw0NTM1Nyw0NTM1OCw0NTM1OSw0NTM2MCw0NTM2MSw0NTM2Miw0NTM2Myw0NTM2Niw0NTM3MCw0NTM3MSw0NTM3Miw0NTM3Myw0NTM3NCw0NTM3NSw0NTM3OCw0NTM3OSw0NTM4MSw0NTM4Miw0''@;'; put 'put ''NTM4Myw0NTM4NSw0NTM4Niw0NTM4Nyw0NTM4OCw0NTM4OSw0NTM5MCw0NTM5MSw0NTM5NCw0NTM5NSw0NTM5OCw0NTM5OSw0NTQwMSw0NTQwMiw0NTQwMyw0NTQwNSw0NTQwNiw0NTQwNyw0NTQwOSw0NTQxMCw0NTQxMSw0NTQxMiw0NTQxMyw0NTQxNCw0NTQxNSw0NTQxNiw0NTQxNyw0NTQx''@;'; put 'put ''OCw0NTQxOSw0NTQyMCw0NTQyMSw0NTQyMiw0NTQyMyw0NTQyNCw0NTQyNSw0NTQyNiw0NTQyNyw0NTQyOCw0NTQyOSw0NTQzMCw0NTQzMSw0NTQzNCw0NTQzNSw0NTQzNyw0NTQzOCw0NTQzOSw0NTQ0MSw0NTQ0Myw0NTQ0NCw0NTQ0NSw0NTQ0Niw0NTQ0Nyw0NTQ1MCw0NTQ1Miw0NTQ1NCw0''@;'; put 'put ''NTQ1NSw0NTQ1Niw0NTQ1Nyw0NTQ2MSw0NTQ2Miw0NTQ2Myw0NTQ2NSw0NTQ2Niw0NTQ2Nyw0NTQ2OSw0NTQ3MCw0NTQ3MSw0NTQ3Miw0NTQ3Myw0NTQ3NCw0NTQ3NSw0NTQ3Niw0NTQ3Nyw0NTQ3OCw0NTQ3OSw0NTQ4MSw0NTQ4Miw0NTQ4Myw0NTQ4NCw0NTQ4NSw0NTQ4Niw0NTQ4Nyw0NTQ4''@;'; put 'put ''OCw0NTQ4OSw0NTQ5MCw0NTQ5MSw0NTQ5Miw0NTQ5Myw0NTQ5NCw0NTQ5NSw0NTQ5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTQ5Nyw0NTQ5OCw0NTQ5OSw0NTUwMCw0NTUwMSw0NTUwMiw0NTUwMyw0NTUwNCw0NTUwNSw0NTUwNiw0NTUwNyw0NTUwOCw0NTUwOSw0NTUxMCw0''@;'; put 'put ''NTUxMSw0NTUxMiw0NTUxMyw0NTUxNCw0NTUxNSw0NTUxNyw0NTUxOCw0NTUxOSw0NTUyMSw0NTUyMiw0NTUyMyw0NTUyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTUyNiw0NTUyNyw0NTUyOCw0NTUyOSw0NTUzMCw0NTUzMSw0NTUzNCw0NTUzNiw0NTUzNyw0NTUzOCw0NTUz''@;'; put 'put ''OSw0NTU0MCw0NTU0MSw0NTU0Miw0NTU0Myw0NTU0Niw0NTU0Nyw0NTU0OSw0NTU1MCw0NTU1MSw0NTU1Myw0NTU1NCw0NTU1NSw0NTU1Niw0NTU1Nyw0NTU1OCw0NTU1OSw0NTU2MCw0NTU2Miw0NTU2NCw0NTU2Niw0NTU2Nyw0NTU2OCw0NTU2OSw0NTU3MCw0NTU3MSw0NTU3NCw0NTU3NSw0''@;'; put 'put ''NTU3Nyw0NTU3OCw0NTU4MSw0NTU4Miw0NTU4Myw0NTU4NCw0NTU4NSw0NTU4Niw0NTU4Nyw0NTU5MCw0NTU5Miw0NTU5NCw0NTU5NSw0NTU5Niw0NTU5Nyw0NTU5OCw0NTU5OSw0NTYwMSw0NTYwMiw0NTYwMyw0NTYwNCw0NTYwNSw0NTYwNiw0NTYwNyw0NTYwOCw0NTYwOSw0NTYxMCw0NTYx''@;'; put 'put ''MSw0NTYxMiw0NTYxMyw0NTYxNCw0NTYxNSw0NTYxNiw0NTYxNyw0NTYxOCw0NTYxOSw0NTYyMSw0NTYyMiw0NTYyMyw0NTYyNCw0NTYyNSw0NTYyNiw0NTYyNyw0NTYyOSw0NTYzMCw0NTYzMSw0NTYzMiw0NTYzMyw0NTYzNCw0NTYzNSw0NTYzNiw0NTYzNyw0NTYzOCw0NTYzOSw0NTY0MCw0''@;'; put 'put ''NTY0MSw0NTY0Miw0NTY0Myw0NTY0NCw0NTY0NSw0NTY0Niw0NTY0Nyw0NTY0OCw0NTY0OSw0NTY1MCw0NTY1MSw0NTY1Miw0NTY1Myw0NTY1NCw0NTY1NSw0NTY1Nyw0NTY1OCw0NTY1OSw0NTY2MSw0NTY2Miw0NTY2Myw0NTY2NSw0NTY2Niw0NTY2Nyw0NTY2OCw0NTY2OSw0NTY3MCw0NTY3''@;'; put 'put ''MSw0NTY3NCw0NTY3NSw0NTY3Niw0NTY3Nyw0NTY3OCw0NTY3OSw0NTY4MCw0NTY4MSw0NTY4Miw0NTY4Myw0NTY4Niw0NTY4Nyw0NTY4OCw0NTY4OSw0NTY5MCw0NTY5MSw0NTY5Myw0NTY5NCw0NTY5NSw0NTY5Niw0NTY5Nyw0NTY5OCw0NTY5OSw0NTcwMiw0NTcwMyw0NTcwNCw0NTcwNiw0''@;'; put 'put ''NTcwNyw0NTcwOCw0NTcwOSw0NTcxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTcxMSw0NTcxNCw0NTcxNSw0NTcxNyw0NTcxOCw0NTcxOSw0NTcyMyw0NTcyNCw0NTcyNSw0NTcyNiw0NTcyNyw0NTczMCw0NTczMiw0NTczNSw0NTczNiw0NTczNyw0NTczOSw0NTc0MSw0NTc0''@;'; put 'put ''Miw0NTc0Myw0NTc0NSw0NTc0Niw0NTc0Nyw0NTc0OSw0NTc1MCw0NTc1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTc1Miw0NTc1Myw0NTc1NCw0NTc1NSw0NTc1Niw0NTc1Nyw0NTc1OCw0NTc1OSw0NTc2MCw0NTc2MSw0NTc2Miw0NTc2Myw0NTc2NCw0NTc2NSw0NTc2Niw0''@;'; put 'put ''NTc2Nyw0NTc3MCw0NTc3MSw0NTc3Myw0NTc3NCw0NTc3NSw0NTc3Nyw0NTc3OSw0NTc4MCw0NTc4MSw0NTc4Miw0NTc4Myw0NTc4Niw0NTc4OCw0NTc5MCw0NTc5MSw0NTc5Miw0NTc5Myw0NTc5NSw0NTc5OSw0NTgwMSw0NTgwMiw0NTgwOCw0NTgwOSw0NTgxMCw0NTgxNCw0NTgyMCw0NTgy''@;'; put 'put ''MSw0NTgyMiw0NTgyNiw0NTgyNyw0NTgyOSw0NTgzMCw0NTgzMSw0NTgzMyw0NTgzNCw0NTgzNSw0NTgzNiw0NTgzNyw0NTgzOCw0NTgzOSw0NTg0Miw0NTg0Niw0NTg0Nyw0NTg0OCw0NTg0OSw0NTg1MCw0NTg1MSw0NTg1Myw0NTg1NCw0NTg1NSw0NTg1Niw0NTg1Nyw0NTg1OCw0NTg1OSw0''@;'; put 'put ''NTg2MCw0NTg2MSw0NTg2Miw0NTg2Myw0NTg2NCw0NTg2NSw0NTg2Niw0NTg2Nyw0NTg2OCw0NTg2OSw0NTg3MCw0NTg3MSw0NTg3Miw0NTg3Myw0NTg3NCw0NTg3NSw0NTg3Niw0NTg3Nyw0NTg3OCw0NTg3OSw0NTg4MCw0NTg4MSw0NTg4Miw0NTg4Myw0NTg4NCw0NTg4NSw0NTg4Niw0NTg4''@;'; put 'put ''Nyw0NTg4OCw0NTg4OSw0NTg5MCw0NTg5MSw0NTg5Miw0NTg5Myw0NTg5NCw0NTg5NSw0NTg5Niw0NTg5Nyw0NTg5OCw0NTg5OSw0NTkwMCw0NTkwMSw0NTkwMiw0NTkwMyw0NTkwNCw0NTkwNSw0NTkwNiw0NTkwNyw0NTkxMSw0NTkxMyw0NTkxNCw0NTkxNyw0NTkyMCw0NTkyMSw0NTkyMiw0''@;'; put 'put ''NTkyMyw0NTkyNiw0NTkyOCw0NTkzMCw0NTkzMiw0NTkzMyw0NTkzNSw0NTkzOCw0NTkzOSw0NTk0MSw0NTk0Miw0NTk0Myw0NTk0NSw0NTk0Niw0NTk0Nyw0NTk0OCw0NTk0OSw0NTk1MCw0NTk1MSw0NTk1NCw0NTk1OCw0NTk1OSw0NTk2MCw0NTk2MSw0NTk2Miw0NTk2Myw0NTk2NSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk2Niw0NTk2Nyw0NTk2OSw0NTk3MCw0NTk3MSw0NTk3Myw0NTk3NCw0NTk3NSw0NTk3Niw0NTk3Nyw0NTk3OCw0NTk3OSw0NTk4MCw0NTk4MSw0NTk4Miw0NTk4Myw0NTk4Niw0NTk4Nyw0NTk4OCw0NTk4OSw0NTk5MCw0NTk5MSw0NTk5Myw0''@;'; put 'put ''NTk5NCw0NTk5NSw0NTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk5OCw0NTk5OSw0NmUzLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDExLDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3''@;'; put 'put ''LDQ2MDE4LDQ2MDE5LDQ2MDIyLDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMxLDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2''@;'; put 'put ''MDYxLDQ2MDYyLDQ2MDYzLDQ2MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgzLDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5''@;'; put 'put ''LDQ2MDkwLDQ2MDkxLDQ2MDkyLDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2''@;'; put 'put ''MTI0LDQ2MTI1LDQ2MTI2LDQ2MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUy''@;'; put 'put ''LDQ2MTUzLDQ2MTU0LDQ2MTU1LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYyLDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTczLDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2''@;'; put 'put ''MTgzLDQ2MTg0LDQ2MTg1LDQ2MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2''@;'; put 'put ''MjM2LDQ2MjM4LDQ2MjM5LDQ2MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYyLDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2Mjcw''@;'; put 'put ''LDQ2MjcxLDQ2MjczLDQ2Mjc0LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2MjgxLDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2MjkxLDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2''@;'; put 'put ''MzA2LDQ2MzA5LDQ2MzExLDQ2MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQx''@;'; put 'put ''LDQ2MzQyLDQ2MzQzLDQ2MzQ0LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYxLDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2''@;'; put 'put ''MzgwLDQ2MzgxLDQ2MzgyLDQ2MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0''@;'; put 'put ''LDQ2NDE1LDQ2NDE3LDQ2NDE4LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2''@;'; put 'put ''NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcx''@;'; put 'put ''LDQ2NDcyLDQ2NDczLDQ2NDc0LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2''@;'; put 'put ''NTAyLDQ2NTAzLDQ2NTA1LDQ2NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3''@;'; put 'put ''LDQ2NTQ4LDQ2NTQ5LDQ2NTUwLDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2''@;'; put 'put ''NTc3LDQ2NTc4LDQ2NTc5LDQ2NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0''@;'; put 'put ''LDQ2NjA1LDQ2NjA2LDQ2NjA3LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2''@;'; put 'put ''NjMyLDQ2NjMzLDQ2NjM0LDQ2NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2''@;'; put 'put ''LDQ2NjU3LDQ2NjU4LDQ2NjU5LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2''@;'; put 'put ''Njg1LDQ2Njg2LDQ2Njg3LDQ2Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0''@;'; put 'put ''LDQ2NzE1LDQ2NzE2LDQ2NzE3LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIyLDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMxLDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2''@;'; put 'put ''NzQyLDQ2NzQzLDQ2NzQ0LDQ2NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2NzcwLDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2''@;'; put 'put ''LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2NzkzLDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2''@;'; put 'put ''ODA1LDQ2ODA2LDQ2ODA3LDQ2ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIxLDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3''@;'; put 'put ''LDQ2ODI4LDQ2ODI5LDQ2ODMwLDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2''@;'; put 'put ''ODU2LDQ2ODU3LDQ2ODU4LDQ2ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgz''@;'; put 'put ''LDQ2ODg0LDQ2ODg1LDQ2ODg2LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2''@;'; put 'put ''OTIxLDQ2OTIyLDQ2OTIzLDQ2OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0''@;'; put 'put ''LDQ2OTU1LDQ2OTU2LDQ2OTU3LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2''@;'; put 'put ''OTk2LDQ2OTk3LDQ3MDAyLDQ3MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMwLDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3''@;'; put 'put ''LDQ3MDM4LDQ3MDM5LDQ3MDQwLDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUxLDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3''@;'; put 'put ''MDYyLDQ3MDYzLDQ3MDY0LDQ3MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2''@;'; put 'put ''LDQ3MDg3LDQ3MDg5LDQ3MDkwLDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEwLDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3''@;'; put 'put ''MTI2LDQ3MTI3LDQ3MTMwLDQ3MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2''@;'; put 'put ''LDQ3MTY3LDQ3MTY5LDQ3MTcwLDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3''@;'; put 'put ''MjAxLDQ3MjAyLDQ3MjAzLDQ3MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1''@;'; put 'put ''LDQ3MjM2LDQ3MjM3LDQ3MjM4LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQzLDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUzLDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3MjgyLDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3Mjkw''@;'; put 'put ''LDQ3MjkxLDQ3MjkyLDQ3MjkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3''@;'; put 'put ''MzIwLDQ3MzIxLDQ3MzIyLDQ3MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4''@;'; put 'put ''LDQ3MzU5LDQ3MzYwLDQ3MzYxLDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3''@;'; put 'put ''Mzg4LDQ3Mzg5LDQ3MzkwLDQ3MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEwLDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2''@;'; put 'put ''LDQ3NDE3LDQ3NDE4LDQ3NDE5LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3''@;'; put 'put ''NDU0LDQ3NDU1LDQ3NDU3LDQ3NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgzLDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDQ3NDg2LDQ3NDg3LDQ3NDg4LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2''@;'; put 'put ''LDQ3NTQ3LDQ3NTUwLDQ3NTUyLDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3''@;'; put 'put ''NTk3LDQ3NTk4LDQ3NTk5LDQ3NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMz''@;'; put 'put ''LDQ3NjM0LDQ3NjM1LDQ3NjM2LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQyLDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUxLDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3''@;'; put 'put ''NjYyLDQ3NjYzLDQ3NjY0LDQ3NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3NjkwLDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAy''@;'; put 'put ''LDQ3NzAzLDQ3NzA1LDQ3NzA2LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEyLDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3''@;'; put 'put ''NzM1LDQ3NzM3LDQ3NzM4LDQ3NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYz''@;'; put 'put ''LDQ3NzY0LDQ3NzY1LDQ3NzY2LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3NzcxLDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3NzgwLDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3''@;'; put 'put ''Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMw''@;'; put 'put ''LDQ3ODMxLDQ3ODM0LDQ3ODM1LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQwLDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3''@;'; put 'put ''ODYwLDQ3ODYxLDQ3ODYyLDQ3ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkz''@;'; put 'put ''LDQ3ODk0LDQ3ODk1LDQ3ODk3LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAzLDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3''@;'; put 'put ''OTMwLDQ3OTM1LDQ3OTM2LDQ3OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1''@;'; put 'put ''LDQ3OTY2LDQ3OTY3LDQ3OTY4LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3''@;'; put 'put ''OTkxLDQ3OTkyLDQ3OTkzLDQ3OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3OTk5LDQ4ZTMsNDgwMDEsNDgwMDIsNDgwMDMsNDgwMDQsNDgwMDUsNDgwMDYsNDgwMDcsNDgwMDksNDgwMTAsNDgwMTEsNDgwMTMsNDgwMTQsNDgwMTUsNDgwMTcsNDgwMTgsNDgwMTksNDgwMjAsNDgwMjEs''@;'; put 'put ''NDgwMjIsNDgwMjMsNDgwMjQsNDgwMjUsNDgwMjYsNDgwMjcsNDgwMjgsNDgwMjksNDgwMzAsNDgwMzEsNDgwMzIsNDgwMzMsNDgwMzQsNDgwMzUsNDgwMzcsNDgwMzgsNDgwMzksNDgwNDEsNDgwNDIsNDgwNDMsNDgwNDUsNDgwNDYsNDgwNDcsNDgwNDgsNDgwNDksNDgwNTAsNDgwNTEsNDgw''@;'; put 'put ''NTMsNDgwNTQsNDgwNTYsNDgwNTcsNDgwNTgsNDgwNTksNDgwNjAsNDgwNjEsNDgwNjIsNDgwNjMsNDgwNjUsNDgwNjYsNDgwNjcsNDgwNjksNDgwNzAsNDgwNzEsNDgwNzMsNDgwNzQsNDgwNzUsNDgwNzYsNDgwNzcsNDgwNzgsNDgwNzksNDgwODEsNDgwODIsNDgwODQsNDgwODUsNDgwODYs''@;'; put 'put ''NDgwODcsNDgwODgsNDgwODksNDgwOTAsNDgwOTEsNDgwOTIsNDgwOTMsNDgwOTQsNDgwOTUsNDgwOTYsNDgwOTcsNDgwOTgsNDgwOTksNDgxMDAsNDgxMDEsNDgxMDIsNDgxMDMsNDgxMDQsNDgxMDUsNDgxMDYsNDgxMDcsNDgxMDgsNDgxMDksNDgxMTAsNDgxMTEsNDgxMTIsNDgxMTMsNDgx''@;'; put 'put ''MTQsNDgxMTUsNDgxMTYsNDgxMTcsNDgxMTgsNDgxMTksNDgxMjIsNDgxMjMsNDgxMjUsNDgxMjYsNDgxMjksNDgxMzEsNDgxMzIsNDgxMzMsNDgxMzQsNDgxMzUsNDgxMzgsNDgxNDIsNDgxNDQsNDgxNDYsNDgxNDcsNDgxNTMsNDgxNTQsNDgxNjAsNDgxNjEsNDgxNjIsNDgxNjMsNDgxNjYs''@;'; put 'put ''NDgxNjgsNDgxNzAsNDgxNzEsNDgxNzIsNDgxNzQsNDgxNzUsNDgxNzgsNDgxNzksNDgxODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgxODIsNDgxODMsNDgxODUsNDgxODYsNDgxODcsNDgxODgsNDgxODksNDgxOTAsNDgxOTEsNDgxOTQsNDgxOTgsNDgxOTksNDgyMDAsNDgy''@;'; put 'put ''MDIsNDgyMDMsNDgyMDYsNDgyMDcsNDgyMDksNDgyMTAsNDgyMTEsNDgyMTIsNDgyMTMsNDgyMTQsNDgyMTUsNDgyMTYsNDgyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgyMTgsNDgyMTksNDgyMjAsNDgyMjIsNDgyMjMsNDgyMjQsNDgyMjUsNDgyMjYsNDgyMjcsNDgyMjgs''@;'; put 'put ''NDgyMjksNDgyMzAsNDgyMzEsNDgyMzIsNDgyMzMsNDgyMzQsNDgyMzUsNDgyMzYsNDgyMzcsNDgyMzgsNDgyMzksNDgyNDAsNDgyNDEsNDgyNDIsNDgyNDMsNDgyNDQsNDgyNDUsNDgyNDYsNDgyNDcsNDgyNDgsNDgyNDksNDgyNTAsNDgyNTEsNDgyNTIsNDgyNTMsNDgyNTQsNDgyNTUsNDgy''@;'; put 'put ''NTYsNDgyNTcsNDgyNTgsNDgyNTksNDgyNjIsNDgyNjMsNDgyNjUsNDgyNjYsNDgyNjksNDgyNzEsNDgyNzIsNDgyNzMsNDgyNzQsNDgyNzUsNDgyNzgsNDgyODAsNDgyODMsNDgyODQsNDgyODUsNDgyODYsNDgyODcsNDgyOTAsNDgyOTEsNDgyOTMsNDgyOTQsNDgyOTcsNDgyOTgsNDgyOTks''@;'; put 'put ''NDgzMDAsNDgzMDEsNDgzMDIsNDgzMDMsNDgzMDYsNDgzMTAsNDgzMTEsNDgzMTIsNDgzMTMsNDgzMTQsNDgzMTUsNDgzMTgsNDgzMTksNDgzMjEsNDgzMjIsNDgzMjMsNDgzMjUsNDgzMjYsNDgzMjcsNDgzMjgsNDgzMjksNDgzMzAsNDgzMzEsNDgzMzIsNDgzMzQsNDgzMzgsNDgzMzksNDgz''@;'; put 'put ''NDAsNDgzNDIsNDgzNDMsNDgzNDUsNDgzNDYsNDgzNDcsNDgzNDksNDgzNTAsNDgzNTEsNDgzNTIsNDgzNTMsNDgzNTQsNDgzNTUsNDgzNTYsNDgzNTcsNDgzNTgsNDgzNTksNDgzNjAsNDgzNjEsNDgzNjIsNDgzNjMsNDgzNjQsNDgzNjUsNDgzNjYsNDgzNjcsNDgzNjgsNDgzNjksNDgzNzAs''@;'; put 'put ''NDgzNzEsNDgzNzUsNDgzNzcsNDgzNzgsNDgzNzksNDgzODEsNDgzODIsNDgzODMsNDgzODQsNDgzODUsNDgzODYsNDgzODcsNDgzOTAsNDgzOTIsNDgzOTQsNDgzOTUsNDgzOTYsNDgzOTcsNDgzOTgsNDgzOTksNDg0MDEsNDg0MDIsNDg0MDMsNDg0MDUsNDg0MDYsNDg0MDcsNDg0MDgsNDg0''@;'; put 'put ''MDksNDg0MTAsNDg0MTEsNDg0MTIsNDg0MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0MTQsNDg0MTUsNDg0MTYsNDg0MTcsNDg0MTgsNDg0MTksNDg0MjEsNDg0MjIsNDg0MjMsNDg0MjQsNDg0MjUsNDg0MjYsNDg0MjcsNDg0MjksNDg0MzAsNDg0MzEsNDg0MzIsNDg0MzMs''@;'; put 'put ''NDg0MzQsNDg0MzUsNDg0MzYsNDg0MzcsNDg0MzgsNDg0MzksNDg0NDAsNDg0NDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0NDIsNDg0NDMsNDg0NDQsNDg0NDUsNDg0NDYsNDg0NDcsNDg0NDksNDg0NTAsNDg0NTEsNDg0NTIsNDg0NTMsNDg0NTQsNDg0NTUsNDg0NTgsNDg0''@;'; put 'put ''NTksNDg0NjEsNDg0NjIsNDg0NjMsNDg0NjUsNDg0NjYsNDg0NjcsNDg0NjgsNDg0NjksNDg0NzAsNDg0NzEsNDg0NzQsNDg0NzUsNDg0NzYsNDg0NzcsNDg0NzgsNDg0NzksNDg0ODAsNDg0ODEsNDg0ODIsNDg0ODMsNDg0ODUsNDg0ODYsNDg0ODcsNDg0ODksNDg0OTAsNDg0OTEsNDg0OTIs''@;'; put 'put ''NDg0OTMsNDg0OTQsNDg0OTUsNDg0OTYsNDg0OTcsNDg0OTgsNDg0OTksNDg1MDAsNDg1MDEsNDg1MDIsNDg1MDMsNDg1MDQsNDg1MDUsNDg1MDYsNDg1MDcsNDg1MDgsNDg1MDksNDg1MTAsNDg1MTEsNDg1MTQsNDg1MTUsNDg1MTcsNDg1MTgsNDg1MjMsNDg1MjQsNDg1MjUsNDg1MjYsNDg1''@;'; put 'put ''MjcsNDg1MzAsNDg1MzIsNDg1MzQsNDg1MzUsNDg1MzYsNDg1MzksNDg1NDEsNDg1NDIsNDg1NDMsNDg1NDQsNDg1NDUsNDg1NDYsNDg1NDcsNDg1NDksNDg1NTAsNDg1NTEsNDg1NTIsNDg1NTMsNDg1NTQsNDg1NTUsNDg1NTYsNDg1NTcsNDg1NTgsNDg1NTksNDg1NjEsNDg1NjIsNDg1NjMs''@;'; put 'put ''NDg1NjQsNDg1NjUsNDg1NjYsNDg1NjcsNDg1NjksNDg1NzAsNDg1NzEsNDg1NzIsNDg1NzMsNDg1NzQsNDg1NzUsNDg1NzYsNDg1NzcsNDg1NzgsNDg1NzksNDg1ODAsNDg1ODEsNDg1ODIsNDg1ODMsNDg1ODQsNDg1ODUsNDg1ODYsNDg1ODcsNDg1ODgsNDg1ODksNDg1OTAsNDg1OTEsNDg1''@;'; put 'put ''OTIsNDg1OTMsNDg1OTQsNDg1OTUsNDg1OTgsNDg1OTksNDg2MDEsNDg2MDIsNDg2MDMsNDg2MDUsNDg2MDYsNDg2MDcsNDg2MDgsNDg2MDksNDg2MTAsNDg2MTEsNDg2MTIsNDg2MTMsNDg2MTQsNDg2MTUsNDg2MTYsNDg2MTgsNDg2MTksNDg2MjAsNDg2MjEsNDg2MjIsNDg2MjMsNDg2MjUs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2MjYsNDg2MjcsNDg2MjksNDg2MzAsNDg2MzEsNDg2MzMsNDg2MzQsNDg2MzUsNDg2MzYsNDg2MzcsNDg2MzgsNDg2MzksNDg2NDEsNDg2NDIsNDg2NDQsNDg2NDYsNDg2NDcsNDg2NDgsNDg2NDksNDg2NTAsNDg2NTEsNDg2NTQsNDg2''@;'; put 'put ''NTUsNDg2NTcsNDg2NTgsNDg2NTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2NjEsNDg2NjIsNDg2NjMsNDg2NjQsNDg2NjUsNDg2NjYsNDg2NjcsNDg2NzAsNDg2NzIsNDg2NzMsNDg2NzQsNDg2NzUsNDg2NzYsNDg2NzcsNDg2NzgsNDg2NzksNDg2ODAsNDg2ODEsNDg2ODIs''@;'; put 'put ''NDg2ODMsNDg2ODQsNDg2ODUsNDg2ODYsNDg2ODcsNDg2ODgsNDg2ODksNDg2OTAsNDg2OTEsNDg2OTIsNDg2OTMsNDg2OTQsNDg2OTUsNDg2OTYsNDg2OTcsNDg2OTgsNDg2OTksNDg3MDAsNDg3MDEsNDg3MDIsNDg3MDMsNDg3MDQsNDg3MDUsNDg3MDYsNDg3MDcsNDg3MTAsNDg3MTEsNDg3''@;'; put 'put ''MTMsNDg3MTQsNDg3MTUsNDg3MTcsNDg3MTksNDg3MjAsNDg3MjEsNDg3MjIsNDg3MjMsNDg3MjYsNDg3MjgsNDg3MzIsNDg3MzMsNDg3MzQsNDg3MzUsNDg3MzgsNDg3MzksNDg3NDEsNDg3NDIsNDg3NDMsNDg3NDUsNDg3NDcsNDg3NDgsNDg3NDksNDg3NTAsNDg3NTEsNDg3NTQsNDg3NTgs''@;'; put 'put ''NDg3NTksNDg3NjAsNDg3NjEsNDg3NjIsNDg3NjYsNDg3NjcsNDg3NjksNDg3NzAsNDg3NzEsNDg3NzMsNDg3NzQsNDg3NzUsNDg3NzYsNDg3NzcsNDg3NzgsNDg3NzksNDg3ODIsNDg3ODYsNDg3ODcsNDg3ODgsNDg3ODksNDg3OTAsNDg3OTEsNDg3OTQsNDg3OTUsNDg3OTYsNDg3OTcsNDg3''@;'; put 'put ''OTgsNDg3OTksNDg4MDAsNDg4MDEsNDg4MDIsNDg4MDMsNDg4MDQsNDg4MDUsNDg4MDYsNDg4MDcsNDg4MDksNDg4MTAsNDg4MTEsNDg4MTIsNDg4MTMsNDg4MTQsNDg4MTUsNDg4MTYsNDg4MTcsNDg4MTgsNDg4MTksNDg4MjAsNDg4MjEsNDg4MjIsNDg4MjMsNDg4MjQsNDg4MjUsNDg4MjYs''@;'; put 'put ''NDg4MjcsNDg4MjgsNDg4MjksNDg4MzAsNDg4MzEsNDg4MzIsNDg4MzMsNDg4MzQsNDg4MzUsNDg4MzYsNDg4MzcsNDg4MzgsNDg4MzksNDg4NDAsNDg4NDEsNDg4NDIsNDg4NDMsNDg4NDQsNDg4NDUsNDg4NDYsNDg4NDcsNDg4NTAsNDg4NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNDg4NTMsNDg4NTQsNDg4NTcsNDg4NTgsNDg4NTksNDg4NjAsNDg4NjEsNDg4NjIsNDg4NjMsNDg4NjUsNDg4NjYsNDg4NzAsNDg4NzEsNDg4NzIsNDg4NzMsNDg4NzQsNDg4NzUsNDg4NzcsNDg4NzgsNDg4NzksNDg4ODAsNDg4ODEsNDg4ODIsNDg4ODMsNDg4ODQsNDg4ODUsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4ODYsNDg4ODcsNDg4ODgsNDg4ODksNDg4OTAsNDg4OTEsNDg4OTIsNDg4OTMsNDg4OTQsNDg4OTUsNDg4OTYsNDg4OTgsNDg4OTksNDg5MDAsNDg5MDEsNDg5MDIsNDg5MDMsNDg5MDYsNDg5MDcsNDg5MDgsNDg5MDksNDg5MTAsNDg5MTEsNDg5''@;'; put 'put ''MTIsNDg5MTMsNDg5MTQsNDg5MTUsNDg5MTYsNDg5MTcsNDg5MTgsNDg5MTksNDg5MjIsNDg5MjYsNDg5MjcsNDg5MjgsNDg5MjksNDg5MzAsNDg5MzEsNDg5MzIsNDg5MzMsNDg5MzQsNDg5MzUsNDg5MzYsNDg5MzcsNDg5MzgsNDg5MzksNDg5NDAsNDg5NDEsNDg5NDIsNDg5NDMsNDg5NDQs''@;'; put 'put ''NDg5NDUsNDg5NDYsNDg5NDcsNDg5NDgsNDg5NDksNDg5NTAsNDg5NTEsNDg5NTIsNDg5NTMsNDg5NTQsNDg5NTUsNDg5NTYsNDg5NTcsNDg5NTgsNDg5NTksNDg5NjIsNDg5NjMsNDg5NjUsNDg5NjYsNDg5NjcsNDg5NjksNDg5NzAsNDg5NzEsNDg5NzIsNDg5NzMsNDg5NzQsNDg5NzUsNDg5''@;'; put 'put ''NzgsNDg5NzksNDg5ODAsNDg5ODIsNDg5ODMsNDg5ODQsNDg5ODUsNDg5ODYsNDg5ODcsNDg5ODgsNDg5ODksNDg5OTAsNDg5OTEsNDg5OTIsNDg5OTMsNDg5OTQsNDg5OTUsNDg5OTYsNDg5OTcsNDg5OTgsNDg5OTksNDllMyw0OTAwMSw0OTAwMiw0OTAwMyw0OTAwNCw0OTAwNSw0OTAwNiw0''@;'; put 'put ''OTAwNyw0OTAwOCw0OTAwOSw0OTAxMCw0OTAxMSw0OTAxMiw0OTAxMyw0OTAxNCw0OTAxNSw0OTAxNiw0OTAxNyw0OTAxOCw0OTAxOSw0OTAyMCw0OTAyMSw0OTAyMiw0OTAyMyw0OTAyNCw0OTAyNSw0OTAyNiw0OTAyNyw0OTAyOCw0OTAyOSw0OTAzMCw0OTAzMSw0OTAzMiw0OTAzMyw0OTAz''@;'; put 'put ''NCw0OTAzNSw0OTAzNiw0OTAzNyw0OTAzOCw0OTAzOSw0OTA0MCw0OTA0MSw0OTA0Miw0OTA0Myw0OTA0NSw0OTA0Niw0OTA0Nyw0OTA0OCw0OTA0OSw0OTA1MCw0OTA1MSw0OTA1Miw0OTA1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA1NCw0OTA1NSw0OTA1Niw0OTA1Nyw0''@;'; put 'put ''OTA1OCw0OTA1OSw0OTA2MCw0OTA2MSw0OTA2Miw0OTA2Myw0OTA2NCw0OTA2NSw0OTA2Niw0OTA2Nyw0OTA2OCw0OTA2OSw0OTA3MCw0OTA3MSw0OTA3Myw0OTA3NCw0OTA3NSw0OTA3Niw0OTA3Nyw0OTA3OCw0OTA3OSw0OTA4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA4''@;'; put 'put ''MSw0OTA4Miw0OTA4Myw0OTA4NCw0OTA4NSw0OTA4Niw0OTA4Nyw0OTA4OCw0OTA4OSw0OTA5MCw0OTA5MSw0OTA5Miw0OTA5NCw0OTA5NSw0OTA5Niw0OTA5Nyw0OTA5OCw0OTA5OSw0OTEwMiw0OTEwMyw0OTEwNSw0OTEwNiw0OTEwNyw0OTEwOSw0OTExMCw0OTExMSw0OTExMiw0OTExMyw0''@;'; put 'put ''OTExNCw0OTExNSw0OTExNyw0OTExOCw0OTEyMCw0OTEyMiw0OTEyMyw0OTEyNCw0OTEyNSw0OTEyNiw0OTEyNyw0OTEyOCw0OTEyOSw0OTEzMCw0OTEzMSw0OTEzMiw0OTEzMyw0OTEzNCw0OTEzNSw0OTEzNiw0OTEzNyw0OTEzOCw0OTEzOSw0OTE0MCw0OTE0MSw0OTE0Miw0OTE0Myw0OTE0''@;'; put 'put ''NCw0OTE0NSw0OTE0Niw0OTE0Nyw0OTE0OCw0OTE0OSw0OTE1MCw0OTE1MSw0OTE1Miw0OTE1Myw0OTE1NCw0OTE1NSw0OTE1Niw0OTE1Nyw0OTE1OCw0OTE1OSw0OTE2MCw0OTE2MSw0OTE2Miw0OTE2Myw0OTE2NCw0OTE2NSw0OTE2Niw0OTE2Nyw0OTE2OCw0OTE2OSw0OTE3MCw0OTE3MSw0''@;'; put 'put ''OTE3Miw0OTE3Myw0OTE3NCw0OTE3NSw0OTE3Niw0OTE3Nyw0OTE3OCw0OTE3OSw0OTE4MCw0OTE4MSw0OTE4Miw0OTE4Myw0OTE4NCw0OTE4NSw0OTE4Niw0OTE4Nyw0OTE4OCw0OTE4OSw0OTE5MCw0OTE5MSw0OTE5Miw0OTE5Myw0OTE5NCw0OTE5NSw0OTE5Niw0OTE5Nyw0OTE5OCw0OTE5''@;'; put 'put ''OSw0OTIwMCw0OTIwMSw0OTIwMiw0OTIwMyw0OTIwNCw0OTIwNSw0OTIwNiw0OTIwNyw0OTIwOCw0OTIwOSw0OTIxMCw0OTIxMSw0OTIxMyw0OTIxNCw0OTIxNSw0OTIxNiw0OTIxNyw0OTIxOCw0OTIxOSw0OTIyMCw0OTIyMSw0OTIyMiw0OTIyMyw0OTIyNCw0OTIyNSw0OTIyNiw0OTIyNyw0''@;'; put 'put ''OTIyOCw0OTIyOSw0OTIzMCw0OTIzMSw0OTIzMiw0OTIzNCw0OTIzNSw0OTIzNiw0OTIzNyw0OTIzOCw0OTIzOSw0OTI0MSw0OTI0Miw0OTI0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI0NSw0OTI0Niw0OTI0Nyw0OTI0OSw0OTI1MCw0OTI1MSw0OTI1Miw0OTI1Myw0OTI1''@;'; put 'put ''NCw0OTI1NSw0OTI1OCw0OTI1OSw0OTI2MCw0OTI2MSw0OTI2Miw0OTI2Myw0OTI2NCw0OTI2NSw0OTI2Niw0OTI2Nyw0OTI2OCw0OTI2OSw0OTI3MCw0OTI3MSw0OTI3Miw0OTI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI3NCw0OTI3NSw0OTI3Niw0OTI3Nyw0OTI3OCw0''@;'; put 'put ''OTI3OSw0OTI4MCw0OTI4MSw0OTI4Miw0OTI4Myw0OTI4NCw0OTI4NSw0OTI4Niw0OTI4Nyw0OTI4OCw0OTI4OSw0OTI5MCw0OTI5MSw0OTI5Miw0OTI5Myw0OTI5NCw0OTI5NSw0OTI5OCw0OTI5OSw0OTMwMSw0OTMwMiw0OTMwMyw0OTMwNSw0OTMwNiw0OTMwNyw0OTMwOCw0OTMwOSw0OTMx''@;'; put 'put ''MCw0OTMxMSw0OTMxNCw0OTMxNiw0OTMxOCw0OTMxOSw0OTMyMCw0OTMyMSw0OTMyMiw0OTMyMyw0OTMyNiw0OTMyOSw0OTMzMCw0OTMzNSw0OTMzNiw0OTMzNyw0OTMzOCw0OTMzOSw0OTM0Miw0OTM0Niw0OTM0Nyw0OTM0OCw0OTM1MCw0OTM1MSw0OTM1NCw0OTM1NSw0OTM1Nyw0OTM1OCw0''@;'; put 'put ''OTM1OSw0OTM2MSw0OTM2Miw0OTM2Myw0OTM2NCw0OTM2NSw0OTM2Niw0OTM2Nyw0OTM3MCw0OTM3NCw0OTM3NSw0OTM3Niw0OTM3Nyw0OTM3OCw0OTM3OSw0OTM4Miw0OTM4Myw0OTM4NSw0OTM4Niw0OTM4Nyw0OTM4OSw0OTM5MCw0OTM5MSw0OTM5Miw0OTM5Myw0OTM5NCw0OTM5NSw0OTM5''@;'; put 'put ''OCw0OTQwMCw0OTQwMiw0OTQwMyw0OTQwNCw0OTQwNSw0OTQwNiw0OTQwNyw0OTQwOSw0OTQxMCw0OTQxMSw0OTQxMyw0OTQxNCw0OTQxNSw0OTQxNyw0OTQxOCw0OTQxOSw0OTQyMCw0OTQyMSw0OTQyMiw0OTQyMyw0OTQyNSw0OTQyNiw0OTQyNyw0OTQyOCw0OTQzMCw0OTQzMSw0OTQzMiw0''@;'; put 'put ''OTQzMyw0OTQzNCw0OTQzNSw0OTQ0MSw0OTQ0Miw0OTQ0NSw0OTQ0OCw0OTQ0OSw0OTQ1MCw0OTQ1MSw0OTQ1NCw0OTQ1OCw0OTQ1OSw0OTQ2MCw0OTQ2MSw0OTQ2Myw0OTQ2Niw0OTQ2Nyw0OTQ2OSw0OTQ3MCw0OTQ3MSw0OTQ3Myw0OTQ3NCw0OTQ3NSw0OTQ3Niw0OTQ3Nyw0OTQ3OCw0OTQ3''@;'; put 'put ''OSw0OTQ4Miw0OTQ4Niw0OTQ4Nyw0OTQ4OCw0OTQ4OSw0OTQ5MCw0OTQ5MSw0OTQ5NCw0OTQ5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTQ5Nyw0OTQ5OCw0OTQ5OSw0OTUwMSw0OTUwMiw0OTUwMyw0OTUwNCw0OTUwNSw0OTUwNiw0OTUwNyw0OTUxMCw0OTUxNCw0OTUxNSw0''@;'; put 'put ''OTUxNiw0OTUxNyw0OTUxOCw0OTUxOSw0OTUyMSw0OTUyMiw0OTUyMyw0OTUyNSw0OTUyNiw0OTUyNyw0OTUyOSw0OTUzMCw0OTUzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTUzMiw0OTUzMyw0OTUzNCw0OTUzNSw0OTUzNiw0OTUzNyw0OTUzOCw0OTUzOSw0OTU0MCw0OTU0''@;'; put 'put ''Miw0OTU0Myw0OTU0NCw0OTU0NSw0OTU0Niw0OTU0Nyw0OTU1MSw0OTU1Myw0OTU1NCw0OTU1NSw0OTU1Nyw0OTU1OSw0OTU2MCw0OTU2MSw0OTU2Miw0OTU2Myw0OTU2Niw0OTU2OCw0OTU3MCw0OTU3MSw0OTU3Miw0OTU3NCw0OTU3NSw0OTU3OCw0OTU3OSw0OTU4MSw0OTU4Miw0OTU4Myw0''@;'; put 'put ''OTU4NSw0OTU4Niw0OTU4Nyw0OTU4OCw0OTU4OSw0OTU5MCw0OTU5MSw0OTU5Miw0OTU5Myw0OTU5NCw0OTU5NSw0OTU5Niw0OTU5OCw0OTU5OSw0OTYwMCw0OTYwMSw0OTYwMiw0OTYwMyw0OTYwNSw0OTYwNiw0OTYwNyw0OTYwOSw0OTYxMCw0OTYxMSw0OTYxMyw0OTYxNCw0OTYxNSw0OTYx''@;'; put 'put ''Niw0OTYxNyw0OTYxOCw0OTYxOSw0OTYyMSw0OTYyMiw0OTYyNSw0OTYyNiw0OTYyNyw0OTYyOCw0OTYyOSw0OTYzMCw0OTYzMSw0OTYzMyw0OTYzNCw0OTYzNSw0OTYzNyw0OTYzOCw0OTYzOSw0OTY0MSw0OTY0Miw0OTY0Myw0OTY0NCw0OTY0NSw0OTY0Niw0OTY0Nyw0OTY1MCw0OTY1Miw0''@;'; put 'put ''OTY1Myw0OTY1NCw0OTY1NSw0OTY1Niw0OTY1Nyw0OTY1OCw0OTY1OSw0OTY2Miw0OTY2Myw0OTY2NSw0OTY2Niw0OTY2Nyw0OTY2OSw0OTY3MCw0OTY3MSw0OTY3Miw0OTY3Myw0OTY3NCw0OTY3NSw0OTY3OCw0OTY4MCw0OTY4Miw0OTY4Myw0OTY4NCw0OTY4NSw0OTY4Niw0OTY4Nyw0OTY5''@;'; put 'put ''MCw0OTY5MSw0OTY5Myw0OTY5NCw0OTY5Nyw0OTY5OCw0OTY5OSw0OTcwMCw0OTcwMSw0OTcwMiw0OTcwMyw0OTcwNiw0OTcwOCw0OTcxMCw0OTcxMiw0OTcxNSw0OTcxNyw0OTcxOCw0OTcxOSw0OTcyMCw0OTcyMSw0OTcyMiw0OTcyMyw0OTcyNCw0OTcyNSw0OTcyNiw0OTcyNyw0OTcyOCw0''@;'; put 'put ''OTcyOSw0OTczMCw0OTczMSw0OTczMiw0OTczMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTczNCw0OTczNSw0OTczNyw0OTczOCw0OTczOSw0OTc0MCw0OTc0MSw0OTc0Miw0OTc0Myw0OTc0Niw0OTc0Nyw0OTc0OSw0OTc1MCw0OTc1MSw0OTc1Myw0OTc1NCw0OTc1NSw0OTc1''@;'; put 'put ''Niw0OTc1Nyw0OTc1OCw0OTc1OSw0OTc2MSw0OTc2Miw0OTc2Myw0OTc2NCw0OTc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTc2Nyw0OTc2OCw0OTc2OSw0OTc3MCw0OTc3MSw0OTc3NCw0OTc3NSw0OTc3Nyw0OTc3OCw0OTc3OSw0OTc4MSw0OTc4Miw0OTc4Myw0OTc4NCw0''@;'; put 'put ''OTc4NSw0OTc4Niw0OTc4Nyw0OTc5MCw0OTc5Miw0OTc5NCw0OTc5NSw0OTc5Niw0OTc5Nyw0OTc5OCw0OTc5OSw0OTgwMiw0OTgwMyw0OTgwNCw0OTgwNSw0OTgwNiw0OTgwNyw0OTgwOSw0OTgxMCw0OTgxMSw0OTgxMiw0OTgxMyw0OTgxNCw0OTgxNSw0OTgxNyw0OTgxOCw0OTgyMCw0OTgy''@;'; put 'put ''Miw0OTgyMyw0OTgyNCw0OTgyNSw0OTgyNiw0OTgyNyw0OTgzMCw0OTgzMSw0OTgzMyw0OTgzNCw0OTgzNSw0OTgzOCw0OTgzOSw0OTg0MCw0OTg0MSw0OTg0Miw0OTg0Myw0OTg0Niw0OTg0OCw0OTg1MCw0OTg1MSw0OTg1Miw0OTg1Myw0OTg1NCw0OTg1NSw0OTg1Niw0OTg1Nyw0OTg1OCw0''@;'; put 'put ''OTg1OSw0OTg2MCw0OTg2MSw0OTg2Miw0OTg2Myw0OTg2NCw0OTg2NSw0OTg2Niw0OTg2Nyw0OTg2OCw0OTg2OSw0OTg3MCw0OTg3MSw0OTg3Miw0OTg3Myw0OTg3NCw0OTg3NSw0OTg3Niw0OTg3Nyw0OTg3OCw0OTg3OSw0OTg4MCw0OTg4MSw0OTg4Miw0OTg4Myw0OTg4Niw0OTg4Nyw0OTg4''@;'; put 'put ''OSw0OTg5MCw0OTg5Myw0OTg5NCw0OTg5NSw0OTg5Niw0OTg5Nyw0OTg5OCw0OTkwMiw0OTkwNCw0OTkwNiw0OTkwNyw0OTkwOCw0OTkwOSw0OTkxMSw0OTkxNCw0OTkxNyw0OTkxOCw0OTkxOSw0OTkyMSw0OTkyMiw0OTkyMyw0OTkyNCw0OTkyNSw0OTkyNiw0OTkyNyw0OTkzMCw0OTkzMSw0''@;'; put 'put ''OTkzNCw0OTkzNSw0OTkzNiw0OTkzNyw0OTkzOCw0OTk0Miw0OTk0Myw0OTk0NSw0OTk0Niw0OTk0Nyw0OTk0OSw0OTk1MCw0OTk1MSw0OTk1Miw0OTk1Myw0OTk1NCw0OTk1NSw0OTk1OCw0OTk1OSw0OTk2Miw0OTk2Myw0OTk2NCw0OTk2NSw0OTk2Niw0OTk2Nyw0OTk2OCw0OTk2OSw0OTk3''@;'; put 'put ''MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk3MSw0OTk3Miw0OTk3Myw0OTk3NCw0OTk3NSw0OTk3Niw0OTk3Nyw0OTk3OCw0OTk3OSw0OTk4MCw0OTk4MSw0OTk4Miw0OTk4Myw0OTk4NCw0OTk4NSw0OTk4Niw0OTk4Nyw0OTk4OCw0OTk5MCw0OTk5MSw0OTk5Miw0OTk5Myw0''@;'; put 'put ''OTk5NCw0OTk5NSw0OTk5Niw0OTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk5OCw0OTk5OSw1ZTQsNTAwMDEsNTAwMDIsNTAwMDMsNTAwMDQsNTAwMDUsNTAwMDYsNTAwMDcsNTAwMDgsNTAwMDksNTAwMTAsNTAwMTEsNTAwMTIsNTAwMTMsNTAwMTQsNTAwMTUsNTAwMTYs''@;'; put 'put ''NTAwMTcsNTAwMTgsNTAwMTksNTAwMjAsNTAwMjEsNTAwMjIsNTAwMjMsNTAwMjYsNTAwMjcsNTAwMjksNTAwMzAsNTAwMzEsNTAwMzMsNTAwMzUsNTAwMzYsNTAwMzcsNTAwMzgsNTAwMzksNTAwNDIsNTAwNDMsNTAwNDYsNTAwNDcsNTAwNDgsNTAwNDksNTAwNTAsNTAwNTEsNTAwNTMsNTAw''@;'; put 'put ''NTQsNTAwNTUsNTAwNTcsNTAwNTgsNTAwNTksNTAwNjEsNTAwNjIsNTAwNjMsNTAwNjQsNTAwNjUsNTAwNjYsNTAwNjcsNTAwNjgsNTAwNjksNTAwNzAsNTAwNzEsNTAwNzIsNTAwNzMsNTAwNzQsNTAwNzUsNTAwNzYsNTAwNzcsNTAwNzgsNTAwNzksNTAwODAsNTAwODEsNTAwODIsNTAwODMs''@;'; put 'put ''NTAwODQsNTAwODUsNTAwODYsNTAwODcsNTAwODgsNTAwODksNTAwOTAsNTAwOTEsNTAwOTIsNTAwOTMsNTAwOTQsNTAwOTUsNTAwOTYsNTAwOTcsNTAwOTgsNTAwOTksNTAxMDAsNTAxMDEsNTAxMDIsNTAxMDMsNTAxMDQsNTAxMDUsNTAxMDYsNTAxMDcsNTAxMDgsNTAxMDksNTAxMTAsNTAx''@;'; put 'put ''MTEsNTAxMTMsNTAxMTQsNTAxMTUsNTAxMTYsNTAxMTcsNTAxMTgsNTAxMTksNTAxMjAsNTAxMjEsNTAxMjIsNTAxMjMsNTAxMjQsNTAxMjUsNTAxMjYsNTAxMjcsNTAxMjgsNTAxMjksNTAxMzAsNTAxMzEsNTAxMzIsNTAxMzMsNTAxMzQsNTAxMzUsNTAxMzgsNTAxMzksNTAxNDEsNTAxNDIs''@;'; put 'put ''NTAxNDUsNTAxNDcsNTAxNDgsNTAxNDksNTAxNTAsNTAxNTEsNTAxNTQsNTAxNTUsNTAxNTYsNTAxNTgsNTAxNTksNTAxNjAsNTAxNjEsNTAxNjIsNTAxNjMsNTAxNjYsNTAxNjcsNTAxNjksNTAxNzAsNTAxNzEsNTAxNzIsNTAxNzMsNTAxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNTAxNzUsNTAxNzYsNTAxNzcsNTAxNzgsNTAxNzksNTAxODAsNTAxODEsNTAxODIsNTAxODMsNTAxODUsNTAxODYsNTAxODcsNTAxODgsNTAxODksNTAxOTAsNTAxOTEsNTAxOTMsNTAxOTQsNTAxOTUsNTAxOTYsNTAxOTcsNTAxOTgsNTAxOTksNTAyMDAsNTAyMDEsNTAyMDIsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAyMDMsNTAyMDQsNTAyMDUsNTAyMDYsNTAyMDcsNTAyMDgsNTAyMDksNTAyMTAsNTAyMTEsNTAyMTMsNTAyMTQsNTAyMTUsNTAyMTYsNTAyMTcsNTAyMTgsNTAyMTksNTAyMjEsNTAyMjIsNTAyMjMsNTAyMjUsNTAyMjYsNTAyMjcsNTAyMjksNTAy''@;'; put 'put ''MzAsNTAyMzEsNTAyMzIsNTAyMzMsNTAyMzQsNTAyMzUsNTAyMzgsNTAyMzksNTAyNDAsNTAyNDEsNTAyNDIsNTAyNDMsNTAyNDQsNTAyNDUsNTAyNDYsNTAyNDcsNTAyNDksNTAyNTAsNTAyNTEsNTAyNTIsNTAyNTMsNTAyNTQsNTAyNTUsNTAyNTYsNTAyNTcsNTAyNTgsNTAyNTksNTAyNjAs''@;'; put 'put ''NTAyNjEsNTAyNjIsNTAyNjMsNTAyNjQsNTAyNjUsNTAyNjYsNTAyNjcsNTAyNjgsNTAyNjksNTAyNzAsNTAyNzEsNTAyNzIsNTAyNzMsNTAyNzQsNTAyNzUsNTAyNzgsNTAyNzksNTAyODEsNTAyODIsNTAyODMsNTAyODUsNTAyODYsNTAyODcsNTAyODgsNTAyODksNTAyOTAsNTAyOTEsNTAy''@;'; put 'put ''OTQsNTAyOTUsNTAyOTYsNTAyOTgsNTAyOTksNTAzMDAsNTAzMDEsNTAzMDIsNTAzMDMsNTAzMDUsNTAzMDYsNTAzMDcsNTAzMDgsNTAzMDksNTAzMTAsNTAzMTEsNTAzMTIsNTAzMTMsNTAzMTQsNTAzMTUsNTAzMTYsNTAzMTcsNTAzMTgsNTAzMTksNTAzMjAsNTAzMjEsNTAzMjIsNTAzMjMs''@;'; put 'put ''NTAzMjUsNTAzMjYsNTAzMjcsNTAzMjgsNTAzMjksNTAzMzAsNTAzMzEsNTAzMzMsNTAzMzQsNTAzMzUsNTAzMzYsNTAzMzcsNTAzMzgsNTAzMzksNTAzNDAsNTAzNDEsNTAzNDIsNTAzNDMsNTAzNDQsNTAzNDUsNTAzNDYsNTAzNDcsNTAzNDgsNTAzNDksNTAzNTAsNTAzNTEsNTAzNTIsNTAz''@;'; put 'put ''NTMsNTAzNTQsNTAzNTUsNTAzNTYsNTAzNTcsNTAzNTgsNTAzNTksNTAzNjEsNTAzNjIsNTAzNjMsNTAzNjUsNTAzNjYsNTAzNjcsNTAzNjgsNTAzNjksNTAzNzAsNTAzNzEsNTAzNzIsNTAzNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAzNzQsNTAzNzUsNTAzNzYsNTAzNzcs''@;'; put 'put ''NTAzNzgsNTAzNzksNTAzODAsNTAzODEsNTAzODIsNTAzODMsNTAzODQsNTAzODUsNTAzODYsNTAzODcsNTAzODgsNTAzODksNTAzOTAsNTAzOTEsNTAzOTIsNTAzOTMsNTAzOTQsNTAzOTUsNTAzOTYsNTAzOTcsNTAzOTgsNTAzOTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA0''@;'; put 'put ''MDAsNTA0MDEsNTA0MDIsNTA0MDMsNTA0MDQsNTA0MDUsNTA0MDYsNTA0MDcsNTA0MDgsNTA0MTAsNTA0MTEsNTA0MTIsNTA0MTMsNTA0MTQsNTA0MTUsNTA0MTgsNTA0MTksNTA0MjEsNTA0MjIsNTA0MjMsNTA0MjUsNTA0MjcsNTA0MjgsNTA0MjksNTA0MzAsNTA0MzQsNTA0MzUsNTA0MzYs''@;'; put 'put ''NTA0MzcsNTA0MzgsNTA0MzksNTA0NDAsNTA0NDEsNTA0NDIsNTA0NDMsNTA0NDUsNTA0NDYsNTA0NDcsNTA0NDksNTA0NTAsNTA0NTEsNTA0NTMsNTA0NTQsNTA0NTUsNTA0NTYsNTA0NTcsNTA0NTgsNTA0NTksNTA0NjEsNTA0NjIsNTA0NjMsNTA0NjQsNTA0NjUsNTA0NjYsNTA0NjcsNTA0''@;'; put 'put ''NjgsNTA0NjksNTA0NzAsNTA0NzEsNTA0NzQsNTA0NzUsNTA0NzcsNTA0NzgsNTA0NzksNTA0ODEsNTA0ODIsNTA0ODMsNTA0ODQsNTA0ODUsNTA0ODYsNTA0ODcsNTA0OTAsNTA0OTIsNTA0OTQsNTA0OTUsNTA0OTYsNTA0OTcsNTA0OTgsNTA0OTksNTA1MDIsNTA1MDMsNTA1MDcsNTA1MTEs''@;'; put 'put ''NTA1MTIsNTA1MTMsNTA1MTQsNTA1MTgsNTA1MjIsNTA1MjMsNTA1MjQsNTA1MjcsNTA1MzAsNTA1MzEsNTA1MzMsNTA1MzQsNTA1MzUsNTA1MzcsNTA1MzgsNTA1MzksNTA1NDAsNTA1NDEsNTA1NDIsNTA1NDMsNTA1NDYsNTA1NTAsNTA1NTEsNTA1NTIsNTA1NTMsNTA1NTQsNTA1NTUsNTA1''@;'; put 'put ''NTgsNTA1NTksNTA1NjEsNTA1NjIsNTA1NjMsNTA1NjUsNTA1NjYsNTA1NjgsNTA1NjksNTA1NzAsNTA1NzEsNTA1NzQsNTA1NzYsNTA1NzgsNTA1NzksNTA1ODAsNTA1ODIsNTA1ODUsNTA1ODYsNTA1ODcsNTA1ODksNTA1OTAsNTA1OTEsNTA1OTMsNTA1OTQsNTA1OTUsNTA1OTYsNTA1OTcs''@;'; put 'put ''NTA1OTgsNTA1OTksNTA2MDAsNTA2MDIsNTA2MDMsNTA2MDQsNTA2MDUsNTA2MDYsNTA2MDcsNTA2MDgsNTA2MDksNTA2MTAsNTA2MTEsNTA2MTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2MTUsNTA2MTgsNTA2MjMsNTA2MjQsNTA2MjUsNTA2MjYsNTA2MjcsNTA2MzUsNTA2''@;'; put 'put ''MzcsNTA2MzksNTA2NDIsNTA2NDMsNTA2NDUsNTA2NDYsNTA2NDcsNTA2NDksNTA2NTAsNTA2NTEsNTA2NTIsNTA2NTMsNTA2NTQsNTA2NTUsNTA2NTgsNTA2NjAsNTA2NjIsNTA2NjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2NjQsNTA2NjUsNTA2NjYsNTA2NjcsNTA2NzEs''@;'; put 'put ''NTA2NzMsNTA2NzQsNTA2NzUsNTA2NzcsNTA2ODAsNTA2ODEsNTA2ODIsNTA2ODMsNTA2OTAsNTA2OTEsNTA2OTIsNTA2OTcsNTA2OTgsNTA2OTksNTA3MDEsNTA3MDIsNTA3MDMsNTA3MDUsNTA3MDYsNTA3MDcsNTA3MDgsNTA3MDksNTA3MTAsNTA3MTEsNTA3MTQsNTA3MTcsNTA3MTgsNTA3''@;'; put 'put ''MTksNTA3MjAsNTA3MjEsNTA3MjIsNTA3MjMsNTA3MjYsNTA3MjcsNTA3MjksNTA3MzAsNTA3MzEsNTA3MzUsNTA3MzcsNTA3MzgsNTA3NDIsNTA3NDQsNTA3NDYsNTA3NDgsNTA3NDksNTA3NTAsNTA3NTEsNTA3NTQsNTA3NTUsNTA3NTcsNTA3NTgsNTA3NTksNTA3NjEsNTA3NjIsNTA3NjMs''@;'; put 'put ''NTA3NjQsNTA3NjUsNTA3NjYsNTA3NjcsNTA3NzAsNTA3NzQsNTA3NzUsNTA3NzYsNTA3NzcsNTA3NzgsNTA3NzksNTA3ODIsNTA3ODMsNTA3ODUsNTA3ODYsNTA3ODcsNTA3ODgsNTA3ODksNTA3OTAsNTA3OTEsNTA3OTIsNTA3OTMsNTA3OTQsNTA3OTUsNTA3OTcsNTA3OTgsNTA4MDAsNTA4''@;'; put 'put ''MDIsNTA4MDMsNTA4MDQsNTA4MDUsNTA4MDYsNTA4MDcsNTA4MTAsNTA4MTEsNTA4MTMsNTA4MTQsNTA4MTUsNTA4MTcsNTA4MTgsNTA4MTksNTA4MjAsNTA4MjEsNTA4MjIsNTA4MjMsNTA4MjYsNTA4MjgsNTA4MzAsNTA4MzEsNTA4MzIsNTA4MzMsNTA4MzQsNTA4MzUsNTA4MzgsNTA4Mzks''@;'; put 'put ''NTA4NDEsNTA4NDIsNTA4NDMsNTA4NDUsNTA4NDYsNTA4NDcsNTA4NDgsNTA4NDksNTA4NTAsNTA4NTEsNTA4NTQsNTA4NTYsNTA4NTgsNTA4NTksNTA4NjAsNTA4NjEsNTA4NjIsNTA4NjMsNTA4NjYsNTA4NjcsNTA4NjksNTA4NzAsNTA4NzEsNTA4NzUsNTA4NzYsNTA4NzcsNTA4NzgsNTA4''@;'; put 'put ''NzksNTA4ODIsNTA4ODQsNTA4ODYsNTA4ODcsNTA4ODgsNTA4ODksNTA4OTAsNTA4OTEsNTA4OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA4OTUsNTA4OTcsNTA4OTgsNTA4OTksNTA5MDEsNTA5MDIsNTA5MDMsNTA5MDQsNTA5MDUsNTA5MDYsNTA5MDcsNTA5MTAsNTA5MTEs''@;'; put 'put ''NTA5MTQsNTA5MTUsNTA5MTYsNTA5MTcsNTA5MTgsNTA5MTksNTA5MjIsNTA5MjMsNTA5MjUsNTA5MjYsNTA5MjcsNTA5MjksNTA5MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA5MzEsNTA5MzIsNTA5MzMsNTA5MzQsNTA5MzUsNTA5MzgsNTA5MzksNTA5NDAsNTA5NDIsNTA5''@;'; put 'put ''NDMsNTA5NDQsNTA5NDUsNTA5NDYsNTA5NDcsNTA5NTAsNTA5NTEsNTA5NTMsNTA5NTQsNTA5NTUsNTA5NTcsNTA5NTgsNTA5NTksNTA5NjAsNTA5NjEsNTA5NjIsNTA5NjMsNTA5NjYsNTA5NjgsNTA5NzAsNTA5NzEsNTA5NzIsNTA5NzMsNTA5NzQsNTA5NzUsNTA5NzgsNTA5NzksNTA5ODEs''@;'; put 'put ''NTA5ODIsNTA5ODMsNTA5ODUsNTA5ODYsNTA5ODcsNTA5ODgsNTA5ODksNTA5OTAsNTA5OTEsNTA5OTQsNTA5OTYsNTA5OTgsNTFlMyw1MTAwMSw1MTAwMiw1MTAwMyw1MTAwNiw1MTAwNyw1MTAwOSw1MTAxMCw1MTAxMSw1MTAxMyw1MTAxNCw1MTAxNSw1MTAxNiw1MTAxNyw1MTAxOSw1MTAy''@;'; put 'put ''Miw1MTAyNCw1MTAzMyw1MTAzNCw1MTAzNSw1MTAzNyw1MTAzOCw1MTAzOSw1MTA0MSw1MTA0Miw1MTA0Myw1MTA0NCw1MTA0NSw1MTA0Niw1MTA0Nyw1MTA0OSw1MTA1MCw1MTA1Miw1MTA1Myw1MTA1NCw1MTA1NSw1MTA1Niw1MTA1Nyw1MTA1OCw1MTA1OSw1MTA2Miw1MTA2Myw1MTA2NSw1''@;'; put 'put ''MTA2Niw1MTA2Nyw1MTA3MSw1MTA3Miw1MTA3Myw1MTA3NCw1MTA3OCw1MTA4Myw1MTA4NCw1MTA4NSw1MTA4Nyw1MTA5MCw1MTA5MSw1MTA5Myw1MTA5Nyw1MTA5OSw1MTEwMCw1MTEwMSw1MTEwMiw1MTEwMyw1MTEwNiw1MTExMSw1MTExMiw1MTExMyw1MTExNCw1MTExNSw1MTExOCw1MTEx''@;'; put 'put ''OSw1MTEyMSw1MTEyMiw1MTEyMyw1MTEyNSw1MTEyNiw1MTEyNyw1MTEyOCw1MTEyOSw1MTEzMCw1MTEzMSw1MTEzNCw1MTEzOCw1MTEzOSw1MTE0MCw1MTE0MSw1MTE0Miw1MTE0Myw1MTE0Niw1MTE0Nyw1MTE0OSw1MTE1MSw1MTE1Myw1MTE1NCw1MTE1NSw1MTE1Niw1MTE1Nyw1MTE1OCw1''@;'; put 'put ''MTE1OSw1MTE2MSw1MTE2Miw1MTE2Myw1MTE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE2Niw1MTE2Nyw1MTE2OCw1MTE2OSw1MTE3MCw1MTE3MSw1MTE3Myw1MTE3NCw1MTE3NSw1MTE3Nyw1MTE3OCw1MTE3OSw1MTE4MSw1MTE4Miw1MTE4Myw1MTE4NCw1MTE4NSw1MTE4''@;'; put 'put ''Niw1MTE4Nyw1MTE4OCw1MTE4OSw1MTE5MCw1MTE5MSw1MTE5Miw1MTE5Myw1MTE5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE5NSw1MTE5Niw1MTE5Nyw1MTE5OCw1MTE5OSw1MTIwMiw1MTIwMyw1MTIwNSw1MTIwNiw1MTIwNyw1MTIwOSw1MTIxMSw1MTIxMiw1MTIxMyw1''@;'; put 'put ''MTIxNCw1MTIxNSw1MTIxOCw1MTIyMCw1MTIyMyw1MTIyNCw1MTIyNSw1MTIyNiw1MTIyNyw1MTIzMCw1MTIzMSw1MTIzMyw1MTIzNCw1MTIzNSw1MTIzNyw1MTIzOCw1MTIzOSw1MTI0MCw1MTI0MSw1MTI0Miw1MTI0Myw1MTI0Niw1MTI0OCw1MTI1MCw1MTI1MSw1MTI1Miw1MTI1Myw1MTI1''@;'; put 'put ''NCw1MTI1NSw1MTI1Nyw1MTI1OCw1MTI1OSw1MTI2MSw1MTI2Miw1MTI2Myw1MTI2NSw1MTI2Niw1MTI2Nyw1MTI2OCw1MTI2OSw1MTI3MCw1MTI3MSw1MTI3NCw1MTI3NSw1MTI3OCw1MTI3OSw1MTI4MCw1MTI4MSw1MTI4Miw1MTI4Myw1MTI4NSw1MTI4Niw1MTI4Nyw1MTI4OCw1MTI4OSw1''@;'; put 'put ''MTI5MCw1MTI5MSw1MTI5Miw1MTI5Myw1MTI5NCw1MTI5NSw1MTI5Niw1MTI5Nyw1MTI5OCw1MTI5OSw1MTMwMCw1MTMwMSw1MTMwMiw1MTMwMyw1MTMwNCw1MTMwNSw1MTMwNiw1MTMwNyw1MTMwOCw1MTMwOSw1MTMxMCw1MTMxMSw1MTMxNCw1MTMxNSw1MTMxNyw1MTMxOCw1MTMxOSw1MTMy''@;'; put 'put ''MSw1MTMyMyw1MTMyNCw1MTMyNSw1MTMyNiw1MTMyNyw1MTMzMCw1MTMzMiw1MTMzNiw1MTMzNyw1MTMzOCw1MTM0Miw1MTM0Myw1MTM0NCw1MTM0NSw1MTM0Niw1MTM0Nyw1MTM0OSw1MTM1MCw1MTM1MSw1MTM1Miw1MTM1Myw1MTM1NCw1MTM1NSw1MTM1Niw1MTM1OCw1MTM2MCw1MTM2Miw1''@;'; put 'put ''MTM2Myw1MTM2NCw1MTM2NSw1MTM2Niw1MTM2Nyw1MTM2OSw1MTM3MCw1MTM3MSw1MTM3Miw1MTM3Myw1MTM3NCw1MTM3NSw1MTM3Niw1MTM3Nyw1MTM3OCw1MTM3OSw1MTM4MCw1MTM4MSw1MTM4Miw1MTM4Myw1MTM4NCw1MTM4NSw1MTM4Niw1MTM4Nyw1MTM5MCw1MTM5MSw1MTM5Miw1MTM5''@;'; put 'put ''MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTM5NCw1MTM5NSw1MTM5Nyw1MTM5OCw1MTM5OSw1MTQwMSw1MTQwMiw1MTQwMyw1MTQwNSw1MTQwNiw1MTQwNyw1MTQwOCw1MTQwOSw1MTQxMCw1MTQxMSw1MTQxNCw1MTQxNiw1MTQxOCw1MTQxOSw1MTQyMCw1MTQyMSw1MTQyMiw1''@;'; put 'put ''MTQyMyw1MTQyNiw1MTQyNyw1MTQyOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTQzMCw1MTQzMSw1MTQzMiw1MTQzMyw1MTQzNCw1MTQzNSw1MTQzNiw1MTQzNyw1MTQzOCw1MTQzOSw1MTQ0MCw1MTQ0MSw1MTQ0Miw1MTQ0Myw1MTQ0NCw1MTQ0Niw1MTQ0Nyw1MTQ0OCw1MTQ0''@;'; put 'put ''OSw1MTQ1MCw1MTQ1MSw1MTQ1NCw1MTQ1NSw1MTQ1Nyw1MTQ1OCw1MTQ1OSw1MTQ2Myw1MTQ2NCw1MTQ2NSw1MTQ2Niw1MTQ2Nyw1MTQ3MCwxMjI4OCwxMjI4OSwxMjI5MCwxODMsODIyOSw4MjMwLDE2OCwxMjI5MSwxNzMsODIxMyw4NzQxLDY1MzQwLDg3NjQsODIxNiw4MjE3LDgyMjAsODIy''@;'; put 'put ''MSwxMjMwOCwxMjMwOSwxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4ODAwLDg4MDQsODgwNSw4NzM0LDg3NTYsMTc2LDgyNDIsODI0Myw4NDUxLDg0OTEsNjU1MDQsNjU1MDUsNjU1MDksOTc5NCw5NzkyLDg3''@;'; put 'put ''MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsMTY3LDgyNTEsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4NTk0LDg1OTIsODU5Myw4NTk1LDg1OTYsMTIzMDcsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3''@;'; put 'put ''NTcsODc0Nyw4NzQ4LDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSw4NzQzLDg3NDQsNjU1MDYsNTE0NzIsNTE0NzQsNTE0NzUsNTE0NzYsNTE0NzcsNTE0NzgsNTE0NzksNTE0ODEsNTE0ODIsNTE0ODMsNTE0ODQsNTE0ODUsNTE0ODYsNTE0ODcsNTE0ODgsNTE0ODks''@;'; put 'put ''NTE0OTAsNTE0OTEsNTE0OTIsNTE0OTMsNTE0OTQsNTE0OTUsNTE0OTYsNTE0OTcsNTE0OTgsNTE0OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MDEsNTE1MDIsNTE1MDMsNTE1MDQsNTE1MDUsNTE1MDYsNTE1MDcsNTE1MDksNTE1MTAsNTE1MTEsNTE1MTIsNTE1MTMsNTE1''@;'; put 'put ''MTQsNTE1MTUsNTE1MTYsNTE1MTcsNTE1MTgsNTE1MTksNTE1MjAsNTE1MjEsNTE1MjIsNTE1MjMsNTE1MjQsNTE1MjUsNTE1MjYsNTE1MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MjgsNTE1MjksNTE1MzAsNTE1MzEsNTE1MzIsNTE1MzMsNTE1MzQsNTE1MzUsNTE1Mzgs''@;'; put 'put ''NTE1MzksNTE1NDEsNTE1NDIsNTE1NDMsNTE1NDUsNTE1NDYsNTE1NDcsNTE1NDgsNTE1NDksNTE1NTAsNTE1NTEsNTE1NTQsNTE1NTYsNTE1NTcsNTE1NTgsNTE1NTksNTE1NjAsNTE1NjEsNTE1NjIsNTE1NjMsNTE1NjUsNTE1NjYsNTE1NjcsODY1OCw4NjYwLDg3MDQsODcwNywxODAsNjUz''@;'; put 'put ''NzQsNzExLDcyOCw3MzMsNzMwLDcyOSwxODQsNzMxLDE2MSwxOTEsNzIwLDg3NTAsODcyMSw4NzE5LDE2NCw4NDU3LDgyNDAsOTY2NSw5NjY0LDk2NTUsOTY1NCw5ODI4LDk4MjQsOTgyNSw5ODI5LDk4MzEsOTgyNyw4ODU3LDk2NzIsOTYzNSw5NjgwLDk2ODEsOTYxOCw5NjM2LDk2MzcsOTY0''@;'; put 'put ''MCw5NjM5LDk2MzgsOTY0MSw5ODMyLDk3NDMsOTc0Miw5NzU2LDk3NTgsMTgyLDgyMjQsODIyNSw4NTk3LDg1OTksODYwMSw4NTk4LDg2MDAsOTgzNyw5ODMzLDk4MzQsOTgzNiwxMjkyNywxMjgyOCw4NDcwLDEzMjU1LDg0ODIsMTMyNTAsMTMyNzIsODQ4MSw4MzY0LDE3NCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1NjksNTE1NzAsNTE1NzEsNTE1NzMsNTE1NzQsNTE1NzUsNTE1NzYsNTE1NzcsNTE1NzgsNTE1Nzks''@;'; put 'put ''NTE1ODEsNTE1ODIsNTE1ODMsNTE1ODQsNTE1ODUsNTE1ODYsNTE1ODcsNTE1ODgsNTE1ODksNTE1OTAsNTE1OTEsNTE1OTQsNTE1OTUsNTE1OTcsNTE1OTgsNTE1OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MDEsNTE2MDIsNTE2MDMsNTE2MDQsNTE2MDUsNTE2MDYsNTE2''@;'; put 'put ''MDcsNTE2MTAsNTE2MTIsNTE2MTQsNTE2MTUsNTE2MTYsNTE2MTcsNTE2MTgsNTE2MTksNTE2MjAsNTE2MjEsNTE2MjIsNTE2MjMsNTE2MjQsNTE2MjUsNTE2MjYsNTE2MjcsNTE2MjgsNTE2MjksNTE2MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MzEsNTE2MzIsNTE2MzMs''@;'; put 'put ''NTE2MzQsNTE2MzUsNTE2MzYsNTE2MzcsNTE2MzgsNTE2MzksNTE2NDAsNTE2NDEsNTE2NDIsNTE2NDMsNTE2NDQsNTE2NDUsNTE2NDYsNTE2NDcsNTE2NTAsNTE2NTEsNTE2NTMsNTE2NTQsNTE2NTcsNTE2NTksNTE2NjAsNTE2NjEsNTE2NjIsNTE2NjMsNTE2NjYsNTE2NjgsNTE2NzEsNTE2''@;'; put 'put ''NzIsNTE2NzUsNjUyODEsNjUyODIsNjUyODMsNjUyODQsNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYs''@;'; put 'put ''NjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUz''@;'; put 'put ''MzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjU1MTAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEs''@;'; put 'put ''NjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTE2NzgsNTE2NzksNTE2ODEsNTE2ODMsNTE2ODUsNTE2ODYsNTE2ODgsNTE2ODksNTE2OTAsNTE2OTEsNTE2OTQsNTE2OTgsNTE2OTksNTE3MDAsNTE3''@;'; put 'put ''MDEsNTE3MDIsNTE3MDMsNTE3MDYsNTE3MDcsNTE3MDksNTE3MTAsNTE3MTEsNTE3MTMsNTE3MTQsNTE3MTUsNTE3MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3MTcsNTE3MTgsNTE3MTksNTE3MjIsNTE3MjYsNTE3MjcsNTE3MjgsNTE3MjksNTE3MzAsNTE3MzEsNTE3MzMs''@;'; put 'put ''NTE3MzQsNTE3MzUsNTE3MzcsNTE3MzgsNTE3MzksNTE3NDAsNTE3NDEsNTE3NDIsNTE3NDMsNTE3NDQsNTE3NDUsNTE3NDYsNTE3NDcsNTE3NDgsNTE3NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3NTAsNTE3NTEsNTE3NTIsNTE3NTQsNTE3NTUsNTE3NTYsNTE3NTcsNTE3''@;'; put 'put ''NTgsNTE3NTksNTE3NjAsNTE3NjEsNTE3NjIsNTE3NjMsNTE3NjQsNTE3NjUsNTE3NjYsNTE3NjcsNTE3NjgsNTE3NjksNTE3NzAsNTE3NzEsNTE3NzIsNTE3NzMsNTE3NzQsNTE3NzUsNTE3NzYsNTE3NzcsNTE3NzgsNTE3NzksNTE3ODAsNTE3ODEsNTE3ODIsMTI1OTMsMTI1OTQsMTI1OTUs''@;'; put 'put ''MTI1OTYsMTI1OTcsMTI1OTgsMTI1OTksMTI2MDAsMTI2MDEsMTI2MDIsMTI2MDMsMTI2MDQsMTI2MDUsMTI2MDYsMTI2MDcsMTI2MDgsMTI2MDksMTI2MTAsMTI2MTEsMTI2MTIsMTI2MTMsMTI2MTQsMTI2MTUsMTI2MTYsMTI2MTcsMTI2MTgsMTI2MTksMTI2MjAsMTI2MjEsMTI2MjIsMTI2''@;'; put 'put ''MjMsMTI2MjQsMTI2MjUsMTI2MjYsMTI2MjcsMTI2MjgsMTI2MjksMTI2MzAsMTI2MzEsMTI2MzIsMTI2MzMsMTI2MzQsMTI2MzUsMTI2MzYsMTI2MzcsMTI2MzgsMTI2MzksMTI2NDAsMTI2NDEsMTI2NDIsMTI2NDMsMTI2NDQsMTI2NDUsMTI2NDYsMTI2NDcsMTI2NDgsMTI2NDksMTI2NTAs''@;'; put 'put ''MTI2NTEsMTI2NTIsMTI2NTMsMTI2NTQsMTI2NTUsMTI2NTYsMTI2NTcsMTI2NTgsMTI2NTksMTI2NjAsMTI2NjEsMTI2NjIsMTI2NjMsMTI2NjQsMTI2NjUsMTI2NjYsMTI2NjcsMTI2NjgsMTI2NjksMTI2NzAsMTI2NzEsMTI2NzIsMTI2NzMsMTI2NzQsMTI2NzUsMTI2NzYsMTI2NzcsMTI2''@;'; put 'put ''NzgsMTI2NzksMTI2ODAsMTI2ODEsMTI2ODIsMTI2ODMsMTI2ODQsMTI2ODUsMTI2ODYsNTE3ODMsNTE3ODQsNTE3ODUsNTE3ODYsNTE3ODcsNTE3OTAsNTE3OTEsNTE3OTMsNTE3OTQsNTE3OTUsNTE3OTcsNTE3OTgsNTE3OTksNTE4MDAsNTE4MDEsNTE4MDIsNTE4MDMsNTE4MDYsNTE4MTAs''@;'; put 'put ''NTE4MTEsNTE4MTIsNTE4MTMsNTE4MTQsNTE4MTUsNTE4MTcsNTE4MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4MTksNTE4MjAsNTE4MjEsNTE4MjIsNTE4MjMsNTE4MjQsNTE4MjUsNTE4MjYsNTE4MjcsNTE4MjgsNTE4MjksNTE4MzAsNTE4MzEsNTE4MzIsNTE4MzMsNTE4''@;'; put 'put ''MzQsNTE4MzUsNTE4MzYsNTE4MzgsNTE4MzksNTE4NDAsNTE4NDEsNTE4NDIsNTE4NDMsNTE4NDUsNTE4NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4NDcsNTE4NDgsNTE4NDksNTE4NTAsNTE4NTEsNTE4NTIsNTE4NTMsNTE4NTQsNTE4NTUsNTE4NTYsNTE4NTcsNTE4NTgs''@;'; put 'put ''NTE4NTksNTE4NjAsNTE4NjEsNTE4NjIsNTE4NjMsNTE4NjUsNTE4NjYsNTE4NjcsNTE4NjgsNTE4NjksNTE4NzAsNTE4NzEsNTE4NzIsNTE4NzMsNTE4NzQsNTE4NzUsNTE4NzYsNTE4NzcsNTE4NzgsNTE4NzksODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1Njgs''@;'; put 'put ''ODU2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDky''@;'; put 'put ''NSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1''@;'; put 'put ''LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg4MCw1MTg4MSw1MTg4Miw1MTg4Myw1MTg4NCw1MTg4NSw1MTg4Niw1MTg4Nyw1MTg4OCw1MTg4OSw1MTg5MCw1MTg5MSw1MTg5Miw1MTg5Myw1MTg5NCw1MTg5NSw1MTg5Niw1MTg5Nyw1MTg5OCw1MTg5''@;'; put 'put ''OSw1MTkwMiw1MTkwMyw1MTkwNSw1MTkwNiw1MTkwNyw1MTkwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTkxMCw1MTkxMSw1MTkxMiw1MTkxMyw1MTkxNCw1MTkxNSw1MTkxOCw1MTkyMCw1MTkyMiw1MTkyNCw1MTkyNSw1MTkyNiw1MTkyNyw1MTkzMCw1MTkzMSw1MTkzMiw1''@;'; put 'put ''MTkzMyw1MTkzNCw1MTkzNSw1MTkzNyw1MTkzOCw1MTkzOSw1MTk0MCw1MTk0MSw1MTk0Miw1MTk0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk0NCw1MTk0NSw1MTk0Niw1MTk0Nyw1MTk0OSw1MTk1MCw1MTk1MSw1MTk1Miw1MTk1Myw1MTk1NCw1MTk1NSw1MTk1Nyw1MTk1''@;'; put 'put ''OCw1MTk1OSw1MTk2MCw1MTk2MSw1MTk2Miw1MTk2Myw1MTk2NCw1MTk2NSw1MTk2Niw1MTk2Nyw1MTk2OCw1MTk2OSw1MTk3MCw1MTk3MSw1MTk3Miw1MTk3Myw1MTk3NCw1MTk3NSw1MTk3Nyw1MTk3OCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0''@;'; put 'put ''LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsOTQ5MCw5NDg5LDk0OTgsOTQ5Nyw5NDk0LDk0OTMsOTQ4Niw5NDg1LDk1MDIsOTUwMyw5NTA1''@;'; put 'put ''LDk1MDYsOTUxMCw5NTExLDk1MTMsOTUxNCw5NTE3LDk1MTgsOTUyMSw5NTIyLDk1MjUsOTUyNiw5NTI5LDk1MzAsOTUzMyw5NTM0LDk1MzYsOTUzNyw5NTM5LDk1NDAsOTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTc5LDUxOTgwLDUxOTgxLDUxOTgyLDUxOTgzLDUxOTg1LDUxOTg2LDUxOTg3LDUxOTg5LDUxOTkwLDUxOTkxLDUxOTkzLDUx''@;'; put 'put ''OTk0LDUxOTk1LDUxOTk2LDUxOTk3LDUxOTk4LDUxOTk5LDUyMDAyLDUyMDAzLDUyMDA0LDUyMDA1LDUyMDA2LDUyMDA3LDUyMDA4LDUyMDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDEwLDUyMDExLDUyMDEyLDUyMDEzLDUyMDE0LDUyMDE1LDUyMDE2LDUyMDE3LDUyMDE4''@;'; put 'put ''LDUyMDE5LDUyMDIwLDUyMDIxLDUyMDIyLDUyMDIzLDUyMDI0LDUyMDI1LDUyMDI2LDUyMDI3LDUyMDI4LDUyMDI5LDUyMDMwLDUyMDMxLDUyMDMyLDUyMDM0LDUyMDM1LDUyMDM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDM3LDUyMDM4LDUyMDM5LDUyMDQyLDUyMDQzLDUy''@;'; put 'put ''MDQ1LDUyMDQ2LDUyMDQ3LDUyMDQ5LDUyMDUwLDUyMDUxLDUyMDUyLDUyMDUzLDUyMDU0LDUyMDU1LDUyMDU4LDUyMDU5LDUyMDYwLDUyMDYyLDUyMDYzLDUyMDY0LDUyMDY1LDUyMDY2LDUyMDY3LDUyMDY5LDUyMDcwLDUyMDcxLDUyMDcyLDUyMDczLDUyMDc0LDUyMDc1LDUyMDc2LDEzMjA1''@;'; put 'put ''LDEzMjA2LDEzMjA3LDg0NjcsMTMyMDgsMTMyNTIsMTMyMTksMTMyMjAsMTMyMjEsMTMyMjIsMTMyMDksMTMyMTAsMTMyMTEsMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTUsMTMyMTYsMTMyMTcsMTMyMTgsMTMyNTgsMTMxOTcsMTMxOTgsMTMxOTksMTMyNjMsMTMxOTIsMTMxOTMsMTMyNTYsMTMy''@;'; put 'put ''MjMsMTMyMjQsMTMyMzIsMTMyMzMsMTMyMzQsMTMyMzUsMTMyMzYsMTMyMzcsMTMyMzgsMTMyMzksMTMyNDAsMTMyNDEsMTMxODQsMTMxODUsMTMxODYsMTMxODcsMTMxODgsMTMyNDIsMTMyNDMsMTMyNDQsMTMyNDUsMTMyNDYsMTMyNDcsMTMyMDAsMTMyMDEsMTMyMDIsMTMyMDMsMTMyMDQs''@;'; put 'put ''ODQ4NiwxMzI0OCwxMzI0OSwxMzE5NCwxMzE5NSwxMzE5NiwxMzI3MCwxMzI1MywxMzIyOSwxMzIzMCwxMzIzMSwxMzI3NSwxMzIyNSwxMzIyNiwxMzIyNywxMzIyOCwxMzI3NywxMzI2NCwxMzI2NywxMzI1MSwxMzI1NywxMzI3NiwxMzI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjA3Nyw1MjA3OCw1MjA3OSw1MjA4MCw1MjA4MSw1MjA4Miw1MjA4Myw1MjA4NCw1MjA4NSw1MjA4Niw1MjA4Nyw1MjA5MCw1MjA5MSw1MjA5Miw1MjA5Myw1MjA5NCw1MjA5NSw1MjA5Niw1MjA5Nyw1MjA5''@;'; put 'put ''OCw1MjA5OSw1MjEwMCw1MjEwMSw1MjEwMiw1MjEwMyw1MjEwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEwNSw1MjEwNiw1MjEwNyw1MjEwOCw1MjEwOSw1MjExMCw1MjExMSw1MjExMiw1MjExMyw1MjExNCw1MjExNSw1MjExNiw1MjExNyw1MjExOCw1MjExOSw1MjEyMCw1''@;'; put 'put ''MjEyMSw1MjEyMiw1MjEyMyw1MjEyNSw1MjEyNiw1MjEyNyw1MjEyOCw1MjEyOSw1MjEzMCw1MjEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEzMiw1MjEzMyw1MjEzNCw1MjEzNSw1MjEzNiw1MjEzNyw1MjEzOCw1MjEzOSw1MjE0MCw1MjE0MSw1MjE0Miw1MjE0Myw1MjE0''@;'; put 'put ''NCw1MjE0NSw1MjE0Niw1MjE0Nyw1MjE0OCw1MjE0OSw1MjE1MCw1MjE1MSw1MjE1Myw1MjE1NCw1MjE1NSw1MjE1Niw1MjE1Nyw1MjE1OCw1MjE1OSw1MjE2MCw1MjE2MSw1MjE2Miw1MjE2Myw1MjE2NCwxOTgsMjA4LDE3MCwyOTQsbnVsbCwzMDYsbnVsbCwzMTksMzIxLDIxNiwzMzgsMTg2''@;'; put 'put ''LDIyMiwzNTgsMzMwLG51bGwsMTI4OTYsMTI4OTcsMTI4OTgsMTI4OTksMTI5MDAsMTI5MDEsMTI5MDIsMTI5MDMsMTI5MDQsMTI5MDUsMTI5MDYsMTI5MDcsMTI5MDgsMTI5MDksMTI5MTAsMTI5MTEsMTI5MTIsMTI5MTMsMTI5MTQsMTI5MTUsMTI5MTYsMTI5MTcsMTI5MTgsMTI5MTksMTI5''@;'; put 'put ''MjAsMTI5MjEsMTI5MjIsMTI5MjMsOTQyNCw5NDI1LDk0MjYsOTQyNyw5NDI4LDk0MjksOTQzMCw5NDMxLDk0MzIsOTQzMyw5NDM0LDk0MzUsOTQzNiw5NDM3LDk0MzgsOTQzOSw5NDQwLDk0NDEsOTQ0Miw5NDQzLDk0NDQsOTQ0NSw5NDQ2LDk0NDcsOTQ0OCw5NDQ5LDkzMTIsOTMxMyw5MzE0''@;'; put 'put ''LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDE4OSw4NTMxLDg1MzIsMTg4LDE5MCw4NTM5LDg1NDAsODU0MSw4NTQyLDUyMTY1LDUyMTY2LDUyMTY3LDUyMTY4LDUyMTY5LDUyMTcwLDUyMTcxLDUyMTcyLDUyMTczLDUyMTc0LDUy''@;'; put 'put ''MTc1LDUyMTc2LDUyMTc3LDUyMTc4LDUyMTc5LDUyMTgxLDUyMTgyLDUyMTgzLDUyMTg0LDUyMTg1LDUyMTg2LDUyMTg3LDUyMTg4LDUyMTg5LDUyMTkwLDUyMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTkyLDUyMTkzLDUyMTk0LDUyMTk1LDUyMTk3LDUyMTk4LDUyMjAw''@;'; put 'put ''LDUyMjAyLDUyMjAzLDUyMjA0LDUyMjA1LDUyMjA2LDUyMjA3LDUyMjA4LDUyMjA5LDUyMjEwLDUyMjExLDUyMjEyLDUyMjEzLDUyMjE0LDUyMjE1LDUyMjE2LDUyMjE3LDUyMjE4LDUyMjE5LDUyMjIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMjIxLDUyMjIyLDUyMjIzLDUy''@;'; put 'put ''MjI0LDUyMjI1LDUyMjI2LDUyMjI3LDUyMjI4LDUyMjI5LDUyMjMwLDUyMjMxLDUyMjMyLDUyMjMzLDUyMjM0LDUyMjM1LDUyMjM4LDUyMjM5LDUyMjQxLDUyMjQyLDUyMjQzLDUyMjQ1LDUyMjQ2LDUyMjQ3LDUyMjQ4LDUyMjQ5LDUyMjUwLDUyMjUxLDUyMjU0LDUyMjU1LDUyMjU2LDUyMjU5''@;'; put 'put ''LDUyMjYwLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjAsMzIyLDI0OCwzMzksMjIzLDI1NCwzNTksMzMxLDMyOSwxMjgwMCwxMjgwMSwxMjgwMiwxMjgwMywxMjgwNCwxMjgwNSwxMjgwNiwxMjgwNywxMjgwOCwxMjgwOSwxMjgxMCwxMjgxMSwxMjgxMiwxMjgxMywxMjgxNCwxMjgx''@;'; put 'put ''NSwxMjgxNiwxMjgxNywxMjgxOCwxMjgxOSwxMjgyMCwxMjgyMSwxMjgyMiwxMjgyMywxMjgyNCwxMjgyNSwxMjgyNiwxMjgyNyw5MzcyLDkzNzMsOTM3NCw5Mzc1LDkzNzYsOTM3Nyw5Mzc4LDkzNzksOTM4MCw5MzgxLDkzODIsOTM4Myw5Mzg0LDkzODUsOTM4Niw5Mzg3LDkzODgsOTM4OSw5''@;'; put 'put ''MzkwLDkzOTEsOTM5Miw5MzkzLDkzOTQsOTM5NSw5Mzk2LDkzOTcsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsMTg1LDE3OCwxNzksODMwOCw4MzE5LDgzMjEsODMyMiw4MzIzLDgzMjQsNTIyNjEsNTIy''@;'; put 'put ''NjIsNTIyNjYsNTIyNjcsNTIyNjksNTIyNzEsNTIyNzMsNTIyNzQsNTIyNzUsNTIyNzYsNTIyNzcsNTIyNzgsNTIyNzksNTIyODIsNTIyODcsNTIyODgsNTIyODksNTIyOTAsNTIyOTEsNTIyOTQsNTIyOTUsNTIyOTcsNTIyOTgsNTIyOTksNTIzMDEsNTIzMDIsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTIzMDMsNTIzMDQsNTIzMDUsNTIzMDYsNTIzMDcsNTIzMTAsNTIzMTQsNTIzMTUsNTIzMTYsNTIzMTcsNTIzMTgsNTIzMTksNTIzMjEsNTIzMjIsNTIzMjMsNTIzMjUsNTIzMjcsNTIzMjksNTIzMzAsNTIzMzEsNTIzMzIsNTIzMzMsNTIzMzQsNTIzMzUsNTIzMzcsNTIz''@;'; put 'put ''MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMzksNTIzNDAsNTIzNDIsNTIzNDMsNTIzNDQsNTIzNDUsNTIzNDYsNTIzNDcsNTIzNDgsNTIzNDksNTIzNTAsNTIzNTEsNTIzNTIsNTIzNTMsNTIzNTQsNTIzNTUsNTIzNTYsNTIzNTcsNTIzNTgsNTIzNTksNTIzNjAsNTIzNjEs''@;'; put 'put ''NTIzNjIsNTIzNjMsNTIzNjQsNTIzNjUsNTIzNjYsNTIzNjcsNTIzNjgsNTIzNjksNTIzNzAsNTIzNzEsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIz''@;'; put 'put ''NzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcs''@;'; put 'put ''MTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0''@;'; put 'put ''MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzcyLDUyMzczLDUyMzc0LDUyMzc1LDUyMzc4LDUyMzc5LDUyMzgxLDUyMzgy''@;'; put 'put ''LDUyMzgzLDUyMzg1LDUyMzg2LDUyMzg3LDUyMzg4LDUyMzg5LDUyMzkwLDUyMzkxLDUyMzk0LDUyMzk4LDUyMzk5LDUyNDAwLDUyNDAxLDUyNDAyLDUyNDAzLDUyNDA2LDUyNDA3LDUyNDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDEwLDUyNDExLDUyNDEzLDUyNDE0LDUy''@;'; put 'put ''NDE1LDUyNDE2LDUyNDE3LDUyNDE4LDUyNDE5LDUyNDIyLDUyNDI0LDUyNDI2LDUyNDI3LDUyNDI4LDUyNDI5LDUyNDMwLDUyNDMxLDUyNDMzLDUyNDM0LDUyNDM1LDUyNDM3LDUyNDM4LDUyNDM5LDUyNDQwLDUyNDQxLDUyNDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDQz''@;'; put 'put ''LDUyNDQ0LDUyNDQ1LDUyNDQ2LDUyNDQ3LDUyNDQ4LDUyNDQ5LDUyNDUwLDUyNDUxLDUyNDUzLDUyNDU0LDUyNDU1LDUyNDU2LDUyNDU3LDUyNDU4LDUyNDU5LDUyNDYxLDUyNDYyLDUyNDYzLDUyNDY1LDUyNDY2LDUyNDY3LDUyNDY4LDUyNDY5LDUyNDcwLDUyNDcxLDUyNDcyLDUyNDczLDUy''@;'; put 'put ''NDc0LDUyNDc1LDUyNDc2LDUyNDc3LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcy''@;'; put 'put ''LDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEy''@;'; put 'put ''NTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3''@;'; put 'put ''LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ3OCw1MjQ3OSw1MjQ4MCw1MjQ4Miw1MjQ4Myw1MjQ4NCw1MjQ4NSw1MjQ4Niw1MjQ4Nyw1MjQ5MCw1MjQ5MSw1MjQ5Myw1MjQ5NCw1MjQ5''@;'; put 'put ''NSw1MjQ5Nyw1MjQ5OCw1MjQ5OSw1MjUwMCw1MjUwMSw1MjUwMiw1MjUwMyw1MjUwNiw1MjUwOCw1MjUxMCw1MjUxMSw1MjUxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjUxMyw1MjUxNCw1MjUxNSw1MjUxNyw1MjUxOCw1MjUxOSw1MjUyMSw1MjUyMiw1MjUyMyw1MjUyNSw1''@;'; put 'put ''MjUyNiw1MjUyNyw1MjUyOCw1MjUyOSw1MjUzMCw1MjUzMSw1MjUzMiw1MjUzMyw1MjUzNCw1MjUzNSw1MjUzNiw1MjUzOCw1MjUzOSw1MjU0MCw1MjU0MSw1MjU0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU0Myw1MjU0NCw1MjU0NSw1MjU0Niw1MjU0Nyw1MjU0OCw1MjU0''@;'; put 'put ''OSw1MjU1MCw1MjU1MSw1MjU1Miw1MjU1Myw1MjU1NCw1MjU1NSw1MjU1Niw1MjU1Nyw1MjU1OCw1MjU1OSw1MjU2MCw1MjU2MSw1MjU2Miw1MjU2Myw1MjU2NCw1MjU2NSw1MjU2Niw1MjU2Nyw1MjU2OCw1MjU2OSw1MjU3MCw1MjU3MSw1MjU3Myw1MjU3NCw1MjU3NSwxMDQwLDEwNDEsMTA0''@;'; put 'put ''MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5''@;'; put 'put ''MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTc3LDUyNTc4LDUyNTc5LDUyNTgxLDUyNTgyLDUyNTgzLDUy''@;'; put 'put ''NTg0LDUyNTg1LDUyNTg2LDUyNTg3LDUyNTkwLDUyNTkyLDUyNTk0LDUyNTk1LDUyNTk2LDUyNTk3LDUyNTk4LDUyNTk5LDUyNjAxLDUyNjAyLDUyNjAzLDUyNjA0LDUyNjA1LDUyNjA2LDUyNjA3LDUyNjA4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjA5LDUyNjEwLDUyNjEx''@;'; put 'put ''LDUyNjEyLDUyNjEzLDUyNjE0LDUyNjE1LDUyNjE3LDUyNjE4LDUyNjE5LDUyNjIwLDUyNjIxLDUyNjIyLDUyNjIzLDUyNjI0LDUyNjI1LDUyNjI2LDUyNjI3LDUyNjMwLDUyNjMxLDUyNjMzLDUyNjM0LDUyNjM1LDUyNjM3LDUyNjM4LDUyNjM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDUyNjQwLDUyNjQxLDUyNjQyLDUyNjQzLDUyNjQ2LDUyNjQ4LDUyNjUwLDUyNjUxLDUyNjUyLDUyNjUzLDUyNjU0LDUyNjU1LDUyNjU3LDUyNjU4LDUyNjU5LDUyNjYwLDUyNjYxLDUyNjYyLDUyNjYzLDUyNjY0LDUyNjY1LDUyNjY2LDUyNjY3LDUyNjY4LDUyNjY5LDUyNjcwLDUyNjcx''@;'; put 'put ''LDUyNjcyLDUyNjczLDUyNjc0LDUyNjc1LDUyNjc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTI2NzgsNTI2NzksNTI2ODAsNTI2ODEsNTI2ODIsNTI2ODMsNTI2ODUsNTI2ODYsNTI2ODcsNTI2ODksNTI2OTAsNTI2OTEsNTI2OTIsNTI2OTMsNTI2OTQsNTI2OTUsNTI2OTYsNTI2OTcsNTI2OTgsNTI2OTksNTI3MDAsNTI3MDEsNTI3MDIsNTI3MDMsNTI3MDQsNTI3MDUsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MDYsNTI3MDcsNTI3MDgsNTI3MDksNTI3MTAsNTI3MTEsNTI3MTMsNTI3MTQsNTI3MTUsNTI3MTcsNTI3MTgsNTI3MTksNTI3MjEsNTI3MjIsNTI3MjMsNTI3MjQsNTI3MjUsNTI3MjYsNTI3MjcsNTI3MzAsNTI3MzIsNTI3MzQsNTI3MzUs''@;'; put 'put ''NTI3MzYsNTI3MzcsNTI3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MzksNTI3NDEsNTI3NDIsNTI3NDMsNTI3NDUsNTI3NDYsNTI3NDcsNTI3NDksNTI3NTAsNTI3NTEsNTI3NTIsNTI3NTMsNTI3NTQsNTI3NTUsNTI3NTcsNTI3NTgsNTI3NTksNTI3NjAsNTI3NjIsNTI3''@;'; put 'put ''NjMsNTI3NjQsNTI3NjUsNTI3NjYsNTI3NjcsNTI3NzAsNTI3NzEsNTI3NzMsNTI3NzQsNTI3NzUsNTI3NzcsNTI3NzgsNTI3NzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjc4MCw1Mjc4MSw1Mjc4Miw1Mjc4Myw1Mjc4Niw1Mjc4OCw1Mjc5MCw1Mjc5MSw1Mjc5Miw1Mjc5Myw1Mjc5NCw1Mjc5NSw1Mjc5Niw1Mjc5Nyw1Mjc5OCw1Mjc5OSw1MjgwMCw1MjgwMSw1MjgwMiw1''@;'; put 'put ''MjgwMyw1MjgwNCw1MjgwNSw1MjgwNiw1MjgwNyw1MjgwOCw1MjgwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjgxMCw1MjgxMSw1MjgxMiw1MjgxMyw1MjgxNCw1MjgxNSw1MjgxNiw1MjgxNyw1MjgxOCw1MjgxOSw1MjgyMCw1MjgyMSw1MjgyMiw1MjgyMyw1MjgyNiw1Mjgy''@;'; put 'put ''Nyw1MjgyOSw1MjgzMCw1MjgzNCw1MjgzNSw1MjgzNiw1MjgzNyw1MjgzOCw1MjgzOSw1Mjg0Miw1Mjg0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg0Niw1Mjg0Nyw1Mjg0OCw1Mjg0OSw1Mjg1MCw1Mjg1MSw1Mjg1NCw1Mjg1NSw1Mjg1Nyw1Mjg1OCw1Mjg1OSw1Mjg2MSw1''@;'; put 'put ''Mjg2Miw1Mjg2Myw1Mjg2NCw1Mjg2NSw1Mjg2Niw1Mjg2Nyw1Mjg3MCw1Mjg3Miw1Mjg3NCw1Mjg3NSw1Mjg3Niw1Mjg3Nyw1Mjg3OCw1Mjg3OSw1Mjg4Miw1Mjg4Myw1Mjg4NSw1Mjg4Niw1Mjg4Nyw1Mjg4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODkwLDUyODkxLDUyODkyLDUyODkzLDUyODk0LDUyODk1LDUyODk4LDUyOTAyLDUyOTAzLDUyOTA0LDUyOTA1LDUyOTA2''@;'; put 'put ''LDUyOTA3LDUyOTEwLDUyOTExLDUyOTEyLDUyOTEzLDUyOTE0LDUyOTE1LDUyOTE2LDUyOTE3LDUyOTE4LDUyOTE5LDUyOTIwLDUyOTIxLDUyOTIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTIzLDUyOTI0LDUyOTI1LDUyOTI2LDUyOTI3LDUyOTI4LDUyOTMwLDUyOTMxLDUy''@;'; put 'put ''OTMyLDUyOTMzLDUyOTM0LDUyOTM1LDUyOTM2LDUyOTM3LDUyOTM4LDUyOTM5LDUyOTQwLDUyOTQxLDUyOTQyLDUyOTQzLDUyOTQ0LDUyOTQ1LDUyOTQ2LDUyOTQ3LDUyOTQ4LDUyOTQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTUwLDUyOTUxLDUyOTUyLDUyOTUzLDUyOTU0''@;'; put 'put ''LDUyOTU1LDUyOTU2LDUyOTU3LDUyOTU4LDUyOTU5LDUyOTYwLDUyOTYxLDUyOTYyLDUyOTYzLDUyOTY2LDUyOTY3LDUyOTY5LDUyOTcwLDUyOTczLDUyOTc0LDUyOTc1LDUyOTc2LDUyOTc3LDUyOTc4LDUyOTc5LDUyOTgyLDUyOTg2LDUyOTg3LDUyOTg4LDUyOTg5LDUyOTkwLDUyOTkxLDQ0''@;'; put 'put ''MDMyLDQ0MDMzLDQ0MDM2LDQ0MDM5LDQ0MDQwLDQ0MDQxLDQ0MDQyLDQ0MDQ4LDQ0MDQ5LDQ0MDUwLDQ0MDUxLDQ0MDUyLDQ0MDUzLDQ0MDU0LDQ0MDU1LDQ0MDU3LDQ0MDU4LDQ0MDU5LDQ0MDYwLDQ0MDYxLDQ0MDY0LDQ0MDY4LDQ0MDc2LDQ0MDc3LDQ0MDc5LDQ0MDgwLDQ0MDgxLDQ0MDg4''@;'; put 'put ''LDQ0MDg5LDQ0MDkyLDQ0MDk2LDQ0MTA3LDQ0MTA5LDQ0MTE2LDQ0MTIwLDQ0MTI0LDQ0MTQ0LDQ0MTQ1LDQ0MTQ4LDQ0MTUxLDQ0MTUyLDQ0MTU0LDQ0MTYwLDQ0MTYxLDQ0MTYzLDQ0MTY0LDQ0MTY1LDQ0MTY2LDQ0MTY5LDQ0MTcwLDQ0MTcxLDQ0MTcyLDQ0MTc2LDQ0MTgwLDQ0MTg4LDQ0''@;'; put 'put ''MTg5LDQ0MTkxLDQ0MTkyLDQ0MTkzLDQ0MjAwLDQ0MjAxLDQ0MjAyLDQ0MjA0LDQ0MjA3LDQ0MjA4LDQ0MjE2LDQ0MjE3LDQ0MjE5LDQ0MjIwLDQ0MjIxLDQ0MjI1LDQ0MjI4LDQ0MjMyLDQ0MjM2LDQ0MjQ1LDQ0MjQ3LDQ0MjU2LDQ0MjU3LDQ0MjYwLDQ0MjYzLDQ0MjY0LDQ0MjY2LDQ0MjY4''@;'; put 'put ''LDQ0MjcxLDQ0MjcyLDQ0MjczLDQ0Mjc1LDQ0Mjc3LDQ0Mjc4LDQ0Mjg0LDQ0Mjg1LDQ0Mjg4LDQ0MjkyLDQ0Mjk0LDUyOTk0LDUyOTk1LDUyOTk3LDUyOTk4LDUyOTk5LDUzMDAxLDUzMDAyLDUzMDAzLDUzMDA0LDUzMDA1LDUzMDA2LDUzMDA3LDUzMDEwLDUzMDEyLDUzMDE0LDUzMDE1LDUz''@;'; put 'put ''MDE2LDUzMDE3LDUzMDE4LDUzMDE5LDUzMDIxLDUzMDIyLDUzMDIzLDUzMDI1LDUzMDI2LDUzMDI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDI5LDUzMDMwLDUzMDMxLDUzMDMyLDUzMDMzLDUzMDM0LDUzMDM1LDUzMDM4LDUzMDQyLDUzMDQzLDUzMDQ0LDUzMDQ1LDUzMDQ2''@;'; put 'put ''LDUzMDQ3LDUzMDQ5LDUzMDUwLDUzMDUxLDUzMDUyLDUzMDUzLDUzMDU0LDUzMDU1LDUzMDU2LDUzMDU3LDUzMDU4LDUzMDU5LDUzMDYwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDYxLDUzMDYyLDUzMDYzLDUzMDY0LDUzMDY1LDUzMDY2LDUzMDY3LDUzMDY4LDUzMDY5LDUz''@;'; put 'put ''MDcwLDUzMDcxLDUzMDcyLDUzMDczLDUzMDc0LDUzMDc1LDUzMDc4LDUzMDc5LDUzMDgxLDUzMDgyLDUzMDgzLDUzMDg1LDUzMDg2LDUzMDg3LDUzMDg4LDUzMDg5LDUzMDkwLDUzMDkxLDUzMDk0LDUzMDk2LDUzMDk4LDUzMDk5LDUzMTAwLDQ0MzAwLDQ0MzAxLDQ0MzAzLDQ0MzA1LDQ0MzEy''@;'; put 'put ''LDQ0MzE2LDQ0MzIwLDQ0MzI5LDQ0MzMyLDQ0MzMzLDQ0MzQwLDQ0MzQxLDQ0MzQ0LDQ0MzQ4LDQ0MzU2LDQ0MzU3LDQ0MzU5LDQ0MzYxLDQ0MzY4LDQ0MzcyLDQ0Mzc2LDQ0Mzg1LDQ0Mzg3LDQ0Mzk2LDQ0Mzk3LDQ0NDAwLDQ0NDAzLDQ0NDA0LDQ0NDA1LDQ0NDA2LDQ0NDExLDQ0NDEyLDQ0''@;'; put 'put ''NDEzLDQ0NDE1LDQ0NDE3LDQ0NDE4LDQ0NDI0LDQ0NDI1LDQ0NDI4LDQ0NDMyLDQ0NDQ0LDQ0NDQ1LDQ0NDUyLDQ0NDcxLDQ0NDgwLDQ0NDgxLDQ0NDg0LDQ0NDg4LDQ0NDk2LDQ0NDk3LDQ0NDk5LDQ0NTA4LDQ0NTEyLDQ0NTE2LDQ0NTM2LDQ0NTM3LDQ0NTQwLDQ0NTQzLDQ0NTQ0LDQ0NTQ1''@;'; put 'put ''LDQ0NTUyLDQ0NTUzLDQ0NTU1LDQ0NTU3LDQ0NTY0LDQ0NTkyLDQ0NTkzLDQ0NTk2LDQ0NTk5LDQ0NjAwLDQ0NjAyLDQ0NjA4LDQ0NjA5LDQ0NjExLDQ0NjEzLDQ0NjE0LDQ0NjE4LDQ0NjIwLDQ0NjIxLDQ0NjIyLDQ0NjI0LDQ0NjI4LDQ0NjMwLDQ0NjM2LDQ0NjM3LDQ0NjM5LDQ0NjQwLDQ0''@;'; put 'put ''NjQxLDQ0NjQ1LDQ0NjQ4LDQ0NjQ5LDQ0NjUyLDQ0NjU2LDQ0NjY0LDUzMTAxLDUzMTAyLDUzMTAzLDUzMTA2LDUzMTA3LDUzMTA5LDUzMTEwLDUzMTExLDUzMTEzLDUzMTE0LDUzMTE1LDUzMTE2LDUzMTE3LDUzMTE4LDUzMTE5LDUzMTIxLDUzMTIyLDUzMTIzLDUzMTI0LDUzMTI2LDUzMTI3''@;'; put 'put ''LDUzMTI4LDUzMTI5LDUzMTMwLDUzMTMxLDUzMTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTM0LDUzMTM1LDUzMTM2LDUzMTM3LDUzMTM4LDUzMTM5LDUzMTQwLDUzMTQxLDUzMTQyLDUzMTQzLDUzMTQ0LDUzMTQ1LDUzMTQ2LDUzMTQ3LDUzMTQ4LDUzMTQ5LDUzMTUwLDUz''@;'; put 'put ''MTUxLDUzMTUyLDUzMTU0LDUzMTU1LDUzMTU2LDUzMTU3LDUzMTU4LDUzMTU5LDUzMTYxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTYyLDUzMTYzLDUzMTY0LDUzMTY1LDUzMTY2LDUzMTY3LDUzMTY5LDUzMTcwLDUzMTcxLDUzMTcyLDUzMTczLDUzMTc0LDUzMTc1LDUzMTc2''@;'; put 'put ''LDUzMTc3LDUzMTc4LDUzMTc5LDUzMTgwLDUzMTgxLDUzMTgyLDUzMTgzLDUzMTg0LDUzMTg1LDUzMTg2LDUzMTg3LDUzMTg5LDUzMTkwLDUzMTkxLDUzMTkyLDUzMTkzLDUzMTk0LDUzMTk1LDQ0NjY1LDQ0NjY3LDQ0NjY4LDQ0NjY5LDQ0Njc2LDQ0Njc3LDQ0Njg0LDQ0NzMyLDQ0NzMzLDQ0''@;'; put 'put ''NzM0LDQ0NzM2LDQ0NzQwLDQ0NzQ4LDQ0NzQ5LDQ0NzUxLDQ0NzUyLDQ0NzUzLDQ0NzYwLDQ0NzYxLDQ0NzY0LDQ0Nzc2LDQ0Nzc5LDQ0NzgxLDQ0Nzg4LDQ0NzkyLDQ0Nzk2LDQ0ODA3LDQ0ODA4LDQ0ODEzLDQ0ODE2LDQ0ODQ0LDQ0ODQ1LDQ0ODQ4LDQ0ODUwLDQ0ODUyLDQ0ODYwLDQ0ODYx''@;'; put 'put ''LDQ0ODYzLDQ0ODY1LDQ0ODY2LDQ0ODY3LDQ0ODcyLDQ0ODczLDQ0ODgwLDQ0ODkyLDQ0ODkzLDQ0OTAwLDQ0OTAxLDQ0OTIxLDQ0OTI4LDQ0OTMyLDQ0OTM2LDQ0OTQ0LDQ0OTQ1LDQ0OTQ5LDQ0OTU2LDQ0OTg0LDQ0OTg1LDQ0OTg4LDQ0OTkyLDQ0OTk5LDQ1ZTMsNDUwMDEsNDUwMDMsNDUw''@;'; put 'put ''MDUsNDUwMDYsNDUwMTIsNDUwMjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUwNDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUwODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgsNDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEs''@;'; put 'put ''NDUxNDMsNDUxNDUsNTMxOTYsNTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEsNTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAsNTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMyMTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMy''@;'; put 'put ''MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMyMjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMyNDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYsNTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQs''@;'; put 'put ''NTMyNTUsNTMyNTYsNTMyNTcsNTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcsNTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMyNzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMy''@;'; put 'put ''NzksNTMyODAsNTMyODEsNTMyODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMyODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUxODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTksNDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUs''@;'; put 'put ''NDUyMTYsNDUyMTcsNDUyMTgsNDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjksNDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIsNDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUyNjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUz''@;'; put 'put ''MjAsNDUzMjEsNDUzMjMsNDUzMjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUzMzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUzNjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjksNDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMs''@;'; put 'put ''NDUzOTYsNDUzOTcsNDU0MDAsNDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYsNDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAsNDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMy''@;'; put 'put ''OTYsNTMyOTcsNTMyOTgsNTMyOTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMzMDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMzMjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUsNTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTMzMjksNTMzMzAsNTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcsNTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcsNTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMzNTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMzNjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMzNzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEsNTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcs''@;'; put 'put ''NTMzODgsNTMzODksNTMzOTAsNTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUsNTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUsNDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2''@;'; put 'put ''MjAsNDU2MjgsNDU2NTYsNDU2NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEsNDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgs''@;'; put 'put ''NDU3NjgsNDU3NjksNDU3NzIsNDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcsNDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUsNDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4''@;'; put 'put ''MjMsNDU4MjQsNDU4MjUsNDU4MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcsNTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMs''@;'; put 'put ''NTM0MDQsNTM0MDUsNTM0MDYsNTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEsNTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQsNTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0''@;'; put 'put ''MzQsNTM0MzUsNTM0MzYsNTM0MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUsNTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NTM0NjcsNTM0NzAsNTM0NzEsNTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0NzgsNTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIsNTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1''@;'; put 'put ''MDQsNTM1MDUsNTM1MDYsNTM1MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQsNDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQs''@;'; put 'put ''NDYwMjcsNDYwMjgsNDYwMzAsNDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEsNDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgsNDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYxMzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYx''@;'; put 'put ''NzcsNDYxNzksNDYxODEsNDYxODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYyNDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYyOTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcsNDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEs''@;'; put 'put ''NDYzMjgsNDYzNTYsNDYzNTcsNDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMsNDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDksNTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1''@;'; put 'put ''MjEsNTM1MjIsNTM1MjMsNTM1MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1MzYsNTM1MzcsNTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMs''@;'; put 'put ''NTM1NDQsNTM1NDUsNTM1NDYsNTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEsNTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUsNTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1''@;'; put 'put ''NzYsNTM1NzcsNTM1NzgsNTM1NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUsNTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMs''@;'; put 'put ''NDY0MDAsNDY0MDEsNDY0MDMsNDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMsNDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcsNDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1''@;'; put 'put ''MjQsNDY1MjUsNDY1MjgsNDY1MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgsNDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3Njks''@;'; put 'put ''NDY4MDQsNDY4MzIsNDY4MzYsNDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgsNDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAsNDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5''@;'; put 'put ''NzIsNDY5NzMsNDY5NzYsNDY5ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMsNTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAs''@;'; put 'put ''NTM2MzEsNTM2MzIsNTM2MzMsNTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2MzksNTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQsNTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2''@;'; put 'put ''NTUsNTM2NTYsNTM2NTcsNTM2NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUsNTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQs''@;'; put 'put ''NTM2ODYsNTM2ODcsNTM2ODgsNTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUsNTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUsNTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3MTAsNTM3MTEsNDdlMyw0NzAwMSw0NzAwNCw0NzAwOCw0NzAx''@;'; put 'put ''Niw0NzAxNyw0NzAxOSw0NzAyMCw0NzAyMSw0NzAyOCw0NzAyOSw0NzAzMiw0NzA0Nyw0NzA0OSw0NzA4NCw0NzA4NSw0NzA4OCw0NzA5Miw0NzEwMCw0NzEwMSw0NzEwMyw0NzEwNCw0NzEwNSw0NzExMSw0NzExMiw0NzExMyw0NzExNiw0NzEyMCw0NzEyOCw0NzEyOSw0NzEzMSw0NzEzMyw0''@;'; put 'put ''NzE0MCw0NzE0MSw0NzE0NCw0NzE0OCw0NzE1Niw0NzE1Nyw0NzE1OSw0NzE2MCw0NzE2MSw0NzE2OCw0NzE3Miw0NzE4NSw0NzE4Nyw0NzE5Niw0NzE5Nyw0NzIwMCw0NzIwNCw0NzIxMiw0NzIxMyw0NzIxNSw0NzIxNyw0NzIyNCw0NzIyOCw0NzI0NSw0NzI3Miw0NzI4MCw0NzI4NCw0NzI4''@;'; put 'put ''OCw0NzI5Niw0NzI5Nyw0NzI5OSw0NzMwMSw0NzMwOCw0NzMxMiw0NzMxNiw0NzMyNSw0NzMyNyw0NzMyOSw0NzMzNiw0NzMzNyw0NzM0MCw0NzM0NCw0NzM1Miw0NzM1Myw0NzM1NSw0NzM1Nyw0NzM2NCw0NzM4NCw0NzM5Miw0NzQyMCw0NzQyMSw0NzQyNCw0NzQyOCw0NzQzNiw0NzQzOSw0''@;'; put 'put ''NzQ0MSw0NzQ0OCw0NzQ0OSw0NzQ1Miw0NzQ1Niw0NzQ2NCw0NzQ2NSw1MzcxMiw1MzcxMyw1MzcxNCw1MzcxNSw1MzcxNiw1MzcxNyw1MzcxOCw1MzcxOSw1MzcyMSw1MzcyMiw1MzcyMyw1MzcyNCw1MzcyNSw1MzcyNiw1MzcyNyw1MzcyOCw1MzcyOSw1MzczMCw1MzczMSw1MzczMiw1Mzcz''@;'; put 'put ''Myw1MzczNCw1MzczNSw1MzczNiw1MzczNyw1MzczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzczOSw1Mzc0MCw1Mzc0MSw1Mzc0Miw1Mzc0Myw1Mzc0NCw1Mzc0NSw1Mzc0Niw1Mzc0Nyw1Mzc0OSw1Mzc1MCw1Mzc1MSw1Mzc1Myw1Mzc1NCw1Mzc1NSw1Mzc1Niw1Mzc1Nyw1''@;'; put 'put ''Mzc1OCw1Mzc1OSw1Mzc2MCw1Mzc2MSw1Mzc2Miw1Mzc2Myw1Mzc2NCw1Mzc2NSw1Mzc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzc2OCw1Mzc3MCw1Mzc3MSw1Mzc3Miw1Mzc3Myw1Mzc3NCw1Mzc3NSw1Mzc3Nyw1Mzc3OCw1Mzc3OSw1Mzc4MCw1Mzc4MSw1Mzc4Miw1Mzc4''@;'; put 'put ''Myw1Mzc4NCw1Mzc4NSw1Mzc4Niw1Mzc4Nyw1Mzc4OCw1Mzc4OSw1Mzc5MCw1Mzc5MSw1Mzc5Miw1Mzc5Myw1Mzc5NCw1Mzc5NSw1Mzc5Niw1Mzc5Nyw1Mzc5OCw1Mzc5OSw1MzgwMCw1MzgwMSw0NzQ2Nyw0NzQ2OSw0NzQ3Niw0NzQ3Nyw0NzQ4MCw0NzQ4NCw0NzQ5Miw0NzQ5Myw0NzQ5NSw0''@;'; put 'put ''NzQ5Nyw0NzQ5OCw0NzUwMSw0NzUwMiw0NzUzMiw0NzUzMyw0NzUzNiw0NzU0MCw0NzU0OCw0NzU0OSw0NzU1MSw0NzU1Myw0NzU2MCw0NzU2MSw0NzU2NCw0NzU2Niw0NzU2Nyw0NzU2OCw0NzU2OSw0NzU3MCw0NzU3Niw0NzU3Nyw0NzU3OSw0NzU4MSw0NzU4Miw0NzU4NSw0NzU4Nyw0NzU4''@;'; put 'put ''OCw0NzU4OSw0NzU5Miw0NzU5Niw0NzYwNCw0NzYwNSw0NzYwNyw0NzYwOCw0NzYwOSw0NzYxMCw0NzYxNiw0NzYxNyw0NzYyNCw0NzYzNyw0NzY3Miw0NzY3Myw0NzY3Niw0NzY4MCw0NzY4Miw0NzY4OCw0NzY4OSw0NzY5MSw0NzY5Myw0NzY5NCw0NzY5OSw0NzcwMCw0NzcwMSw0NzcwNCw0''@;'; put 'put ''NzcwOCw0NzcxNiw0NzcxNyw0NzcxOSw0NzcyMCw0NzcyMSw0NzcyOCw0NzcyOSw0NzczMiw0NzczNiw0Nzc0Nyw0Nzc0OCw0Nzc0OSw0Nzc1MSw0Nzc1Niw0Nzc4NCw0Nzc4NSw0Nzc4Nyw0Nzc4OCw0Nzc5Miw0Nzc5NCw0NzgwMCw0NzgwMSw0NzgwMyw0NzgwNSw0NzgxMiw0NzgxNiw0Nzgz''@;'; put 'put ''Miw0NzgzMyw0Nzg2OCw1MzgwMiw1MzgwMyw1MzgwNiw1MzgwNyw1MzgwOSw1MzgxMCw1MzgxMSw1MzgxMyw1MzgxNCw1MzgxNSw1MzgxNiw1MzgxNyw1MzgxOCw1MzgxOSw1MzgyMiw1MzgyNCw1MzgyNiw1MzgyNyw1MzgyOCw1MzgyOSw1MzgzMCw1MzgzMSw1MzgzMyw1MzgzNCw1MzgzNSw1''@;'; put 'put ''MzgzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzgzNyw1MzgzOCw1MzgzOSw1Mzg0MCw1Mzg0MSw1Mzg0Miw1Mzg0Myw1Mzg0NCw1Mzg0NSw1Mzg0Niw1Mzg0Nyw1Mzg0OCw1Mzg0OSw1Mzg1MCw1Mzg1MSw1Mzg1Myw1Mzg1NCw1Mzg1NSw1Mzg1Niw1Mzg1Nyw1Mzg1OCw1Mzg1''@;'; put 'put ''OSw1Mzg2MSw1Mzg2Miw1Mzg2Myw1Mzg2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2NSw1Mzg2Niw1Mzg2Nyw1Mzg2OCw1Mzg2OSw1Mzg3MCw1Mzg3MSw1Mzg3Miw1Mzg3Myw1Mzg3NCw1Mzg3NSw1Mzg3Niw1Mzg3Nyw1Mzg3OCw1Mzg3OSw1Mzg4MCw1Mzg4MSw1Mzg4Miw1''@;'; put 'put ''Mzg4Myw1Mzg4NCw1Mzg4NSw1Mzg4Niw1Mzg4Nyw1Mzg5MCw1Mzg5MSw1Mzg5Myw1Mzg5NCw1Mzg5NSw1Mzg5Nyw1Mzg5OCw1Mzg5OSw1MzkwMCw0Nzg3Miw0Nzg3Niw0Nzg4NSw0Nzg4Nyw0Nzg4OSw0Nzg5Niw0NzkwMCw0NzkwNCw0NzkxMyw0NzkxNSw0NzkyNCw0NzkyNSw0NzkyNiw0Nzky''@;'; put 'put ''OCw0NzkzMSw0NzkzMiw0NzkzMyw0NzkzNCw0Nzk0MCw0Nzk0MSw0Nzk0Myw0Nzk0NSw0Nzk0OSw0Nzk1MSw0Nzk1Miw0Nzk1Niw0Nzk2MCw0Nzk2OSw0Nzk3MSw0Nzk4MCw0ODAwOCw0ODAxMiw0ODAxNiw0ODAzNiw0ODA0MCw0ODA0NCw0ODA1Miw0ODA1NSw0ODA2NCw0ODA2OCw0ODA3Miw0''@;'; put 'put ''ODA4MCw0ODA4Myw0ODEyMCw0ODEyMSw0ODEyNCw0ODEyNyw0ODEyOCw0ODEzMCw0ODEzNiw0ODEzNyw0ODEzOSw0ODE0MCw0ODE0MSw0ODE0Myw0ODE0NSw0ODE0OCw0ODE0OSw0ODE1MCw0ODE1MSw0ODE1Miw0ODE1NSw0ODE1Niw0ODE1Nyw0ODE1OCw0ODE1OSw0ODE2NCw0ODE2NSw0ODE2''@;'; put 'put ''Nyw0ODE2OSw0ODE3Myw0ODE3Niw0ODE3Nyw0ODE4MCw0ODE4NCw0ODE5Miw0ODE5Myw0ODE5NSw0ODE5Niw0ODE5Nyw0ODIwMSw0ODIwNCw0ODIwNSw0ODIwOCw0ODIyMSw0ODI2MCw0ODI2MSw0ODI2NCw0ODI2Nyw0ODI2OCw0ODI3MCw0ODI3Niw0ODI3Nyw0ODI3OSw1MzkwMSw1MzkwMiw1''@;'; put 'put ''MzkwMyw1MzkwNiw1MzkwNyw1MzkwOCw1MzkxMCw1MzkxMSw1MzkxMiw1MzkxMyw1MzkxNCw1MzkxNSw1MzkxNyw1MzkxOCw1MzkxOSw1MzkyMSw1MzkyMiw1MzkyMyw1MzkyNSw1MzkyNiw1MzkyNyw1MzkyOCw1MzkyOSw1MzkzMCw1MzkzMSw1MzkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw1MzkzNCw1MzkzNSw1MzkzNiw1MzkzOCw1MzkzOSw1Mzk0MCw1Mzk0MSw1Mzk0Miw1Mzk0Myw1Mzk0Niw1Mzk0Nyw1Mzk0OSw1Mzk1MCw1Mzk1Myw1Mzk1NSw1Mzk1Niw1Mzk1Nyw1Mzk1OCw1Mzk1OSw1Mzk2Miw1Mzk2NCw1Mzk2NSw1Mzk2Niw1Mzk2Nyw1Mzk2OCw1Mzk2OSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzk3MCw1Mzk3MSw1Mzk3Myw1Mzk3NCw1Mzk3NSw1Mzk3Nyw1Mzk3OCw1Mzk3OSw1Mzk4MSw1Mzk4Miw1Mzk4Myw1Mzk4NCw1Mzk4NSw1Mzk4Niw1Mzk4Nyw1Mzk5MCw1Mzk5MSw1Mzk5Miw1Mzk5Myw1Mzk5NCw1Mzk5NSw1Mzk5Niw1Mzk5''@;'; put 'put ''Nyw1Mzk5OCw1Mzk5OSw1NDAwMiw1NDAwMyw1NDAwNSw1NDAwNiw1NDAwNyw1NDAwOSw1NDAxMCw0ODI4MSw0ODI4Miw0ODI4OCw0ODI4OSw0ODI5Miw0ODI5NSw0ODI5Niw0ODMwNCw0ODMwNSw0ODMwNyw0ODMwOCw0ODMwOSw0ODMxNiw0ODMxNyw0ODMyMCw0ODMyNCw0ODMzMyw0ODMzNSw0''@;'; put 'put ''ODMzNiw0ODMzNyw0ODM0MSw0ODM0NCw0ODM0OCw0ODM3Miw0ODM3Myw0ODM3NCw0ODM3Niw0ODM4MCw0ODM4OCw0ODM4OSw0ODM5MSw0ODM5Myw0ODQwMCw0ODQwNCw0ODQyMCw0ODQyOCw0ODQ0OCw0ODQ1Niw0ODQ1Nyw0ODQ2MCw0ODQ2NCw0ODQ3Miw0ODQ3Myw0ODQ4NCw0ODQ4OCw0ODUx''@;'; put 'put ''Miw0ODUxMyw0ODUxNiw0ODUxOSw0ODUyMCw0ODUyMSw0ODUyMiw0ODUyOCw0ODUyOSw0ODUzMSw0ODUzMyw0ODUzNyw0ODUzOCw0ODU0MCw0ODU0OCw0ODU2MCw0ODU2OCw0ODU5Niw0ODU5Nyw0ODYwMCw0ODYwNCw0ODYxNyw0ODYyNCw0ODYyOCw0ODYzMiw0ODY0MCw0ODY0Myw0ODY0NSw0''@;'; put 'put ''ODY1Miw0ODY1Myw0ODY1Niw0ODY2MCw0ODY2OCw0ODY2OSw0ODY3MSw0ODcwOCw0ODcwOSw0ODcxMiw0ODcxNiw0ODcxOCw0ODcyNCw0ODcyNSw0ODcyNyw0ODcyOSw0ODczMCw0ODczMSw0ODczNiw0ODczNyw0ODc0MCw1NDAxMSw1NDAxMiw1NDAxMyw1NDAxNCw1NDAxNSw1NDAxOCw1NDAy''@;'; put 'put ''MCw1NDAyMiw1NDAyMyw1NDAyNCw1NDAyNSw1NDAyNiw1NDAyNyw1NDAzMSw1NDAzMyw1NDAzNCw1NDAzNSw1NDAzNyw1NDAzOSw1NDA0MCw1NDA0MSw1NDA0Miw1NDA0Myw1NDA0Niw1NDA1MCw1NDA1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA1Miw1NDA1NCw1NDA1NSw1''@;'; put 'put ''NDA1OCw1NDA1OSw1NDA2MSw1NDA2Miw1NDA2Myw1NDA2NSw1NDA2Niw1NDA2Nyw1NDA2OCw1NDA2OSw1NDA3MCw1NDA3MSw1NDA3NCw1NDA3OCw1NDA3OSw1NDA4MCw1NDA4MSw1NDA4Miw1NDA4Myw1NDA4Niw1NDA4Nyw1NDA4OCw1NDA4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw1NDA5MCw1NDA5MSw1NDA5Miw1NDA5Myw1NDA5NCw1NDA5NSw1NDA5Niw1NDA5Nyw1NDA5OCw1NDA5OSw1NDEwMCw1NDEwMSw1NDEwMiw1NDEwMyw1NDEwNCw1NDEwNSw1NDEwNiw1NDEwNyw1NDEwOCw1NDEwOSw1NDExMCw1NDExMSw1NDExMiw1NDExMyw1NDExNCw1NDExNSw1NDExNiw1''@;'; put 'put ''NDExNyw1NDExOCw1NDExOSw1NDEyMCw1NDEyMSw0ODc0NCw0ODc0Niw0ODc1Miw0ODc1Myw0ODc1NSw0ODc1Niw0ODc1Nyw0ODc2Myw0ODc2NCw0ODc2NSw0ODc2OCw0ODc3Miw0ODc4MCw0ODc4MSw0ODc4Myw0ODc4NCw0ODc4NSw0ODc5Miw0ODc5Myw0ODgwOCw0ODg0OCw0ODg0OSw0ODg1''@;'; put 'put ''Miw0ODg1NSw0ODg1Niw0ODg2NCw0ODg2Nyw0ODg2OCw0ODg2OSw0ODg3Niw0ODg5Nyw0ODkwNCw0ODkwNSw0ODkyMCw0ODkyMSw0ODkyMyw0ODkyNCw0ODkyNSw0ODk2MCw0ODk2MSw0ODk2NCw0ODk2OCw0ODk3Niw0ODk3Nyw0ODk4MSw0OTA0NCw0OTA3Miw0OTA5Myw0OTEwMCw0OTEwMSw0''@;'; put 'put ''OTEwNCw0OTEwOCw0OTExNiw0OTExOSw0OTEyMSw0OTIxMiw0OTIzMyw0OTI0MCw0OTI0NCw0OTI0OCw0OTI1Niw0OTI1Nyw0OTI5Niw0OTI5Nyw0OTMwMCw0OTMwNCw0OTMxMiw0OTMxMyw0OTMxNSw0OTMxNyw0OTMyNCw0OTMyNSw0OTMyNyw0OTMyOCw0OTMzMSw0OTMzMiw0OTMzMyw0OTMz''@;'; put 'put ''NCw0OTM0MCw0OTM0MSw0OTM0Myw0OTM0NCw0OTM0NSw0OTM0OSw0OTM1Miw0OTM1Myw0OTM1Niw0OTM2MCw0OTM2OCw0OTM2OSw0OTM3MSw0OTM3Miw0OTM3Myw0OTM4MCw1NDEyMiw1NDEyMyw1NDEyNCw1NDEyNSw1NDEyNiw1NDEyNyw1NDEyOCw1NDEyOSw1NDEzMCw1NDEzMSw1NDEzMiw1''@;'; put 'put ''NDEzMyw1NDEzNCw1NDEzNSw1NDEzNiw1NDEzNyw1NDEzOCw1NDEzOSw1NDE0Miw1NDE0Myw1NDE0NSw1NDE0Niw1NDE0Nyw1NDE0OSw1NDE1MCw1NDE1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE1Miw1NDE1Myw1NDE1NCw1NDE1NSw1NDE1OCw1NDE2Miw1NDE2Myw1NDE2''@;'; put 'put ''NCw1NDE2NSw1NDE2Niw1NDE2Nyw1NDE3MCw1NDE3MSw1NDE3Myw1NDE3NCw1NDE3NSw1NDE3Nyw1NDE3OCw1NDE3OSw1NDE4MCw1NDE4MSw1NDE4Miw1NDE4Myw1NDE4Niw1NDE4OCw1NDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE5MSw1NDE5Miw1NDE5Myw1NDE5NCw1''@;'; put 'put ''NDE5NSw1NDE5Nyw1NDE5OCw1NDE5OSw1NDIwMSw1NDIwMiw1NDIwMyw1NDIwNSw1NDIwNiw1NDIwNyw1NDIwOCw1NDIwOSw1NDIxMCw1NDIxMSw1NDIxNCw1NDIxNSw1NDIxOCw1NDIxOSw1NDIyMCw1NDIyMSw1NDIyMiw1NDIyMyw1NDIyNSw1NDIyNiw1NDIyNyw1NDIyOCw1NDIyOSw1NDIz''@;'; put 'put ''MCw0OTM4MSw0OTM4NCw0OTM4OCw0OTM5Niw0OTM5Nyw0OTM5OSw0OTQwMSw0OTQwOCw0OTQxMiw0OTQxNiw0OTQyNCw0OTQyOSw0OTQzNiw0OTQzNyw0OTQzOCw0OTQzOSw0OTQ0MCw0OTQ0Myw0OTQ0NCw0OTQ0Niw0OTQ0Nyw0OTQ1Miw0OTQ1Myw0OTQ1NSw0OTQ1Niw0OTQ1Nyw0OTQ2Miw0''@;'; put 'put ''OTQ2NCw0OTQ2NSw0OTQ2OCw0OTQ3Miw0OTQ4MCw0OTQ4MSw0OTQ4Myw0OTQ4NCw0OTQ4NSw0OTQ5Miw0OTQ5Myw0OTQ5Niw0OTUwMCw0OTUwOCw0OTUwOSw0OTUxMSw0OTUxMiw0OTUxMyw0OTUyMCw0OTUyNCw0OTUyOCw0OTU0MSw0OTU0OCw0OTU0OSw0OTU1MCw0OTU1Miw0OTU1Niw0OTU1''@;'; put 'put ''OCw0OTU2NCw0OTU2NSw0OTU2Nyw0OTU2OSw0OTU3Myw0OTU3Niw0OTU3Nyw0OTU4MCw0OTU4NCw0OTU5Nyw0OTYwNCw0OTYwOCw0OTYxMiw0OTYyMCw0OTYyMyw0OTYyNCw0OTYzMiw0OTYzNiw0OTY0MCw0OTY0OCw0OTY0OSw0OTY1MSw0OTY2MCw0OTY2MSw0OTY2NCw0OTY2OCw0OTY3Niw0''@;'; put 'put ''OTY3Nyw0OTY3OSw0OTY4MSw0OTY4OCw0OTY4OSw0OTY5Miw0OTY5NSw0OTY5Niw0OTcwNCw0OTcwNSw0OTcwNyw0OTcwOSw1NDIzMSw1NDIzMyw1NDIzNCw1NDIzNSw1NDIzNiw1NDIzNyw1NDIzOCw1NDIzOSw1NDI0MCw1NDI0Miw1NDI0NCw1NDI0NSw1NDI0Niw1NDI0Nyw1NDI0OCw1NDI0''@;'; put 'put ''OSw1NDI1MCw1NDI1MSw1NDI1NCw1NDI1NSw1NDI1Nyw1NDI1OCw1NDI1OSw1NDI2MSw1NDI2Miw1NDI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI2NCw1NDI2NSw1NDI2Niw1NDI2Nyw1NDI3MCw1NDI3Miw1NDI3NCw1NDI3NSw1NDI3Niw1NDI3Nyw1NDI3OCw1NDI3OSw1''@;'; put 'put ''NDI4MSw1NDI4Miw1NDI4Myw1NDI4NCw1NDI4NSw1NDI4Niw1NDI4Nyw1NDI4OCw1NDI4OSw1NDI5MCw1NDI5MSw1NDI5Miw1NDI5Myw1NDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI5NSw1NDI5Niw1NDI5Nyw1NDI5OCw1NDI5OSw1NDMwMCw1NDMwMiw1NDMwMyw1NDMw''@;'; put 'put ''NCw1NDMwNSw1NDMwNiw1NDMwNyw1NDMwOCw1NDMwOSw1NDMxMCw1NDMxMSw1NDMxMiw1NDMxMyw1NDMxNCw1NDMxNSw1NDMxNiw1NDMxNyw1NDMxOCw1NDMxOSw1NDMyMCw1NDMyMSw1NDMyMiw1NDMyMyw1NDMyNCw1NDMyNSw1NDMyNiw1NDMyNyw0OTcxMSw0OTcxMyw0OTcxNCw0OTcxNiw0''@;'; put 'put ''OTczNiw0OTc0NCw0OTc0NSw0OTc0OCw0OTc1Miw0OTc2MCw0OTc2NSw0OTc3Miw0OTc3Myw0OTc3Niw0OTc4MCw0OTc4OCw0OTc4OSw0OTc5MSw0OTc5Myw0OTgwMCw0OTgwMSw0OTgwOCw0OTgxNiw0OTgxOSw0OTgyMSw0OTgyOCw0OTgyOSw0OTgzMiw0OTgzNiw0OTgzNyw0OTg0NCw0OTg0''@;'; put 'put ''NSw0OTg0Nyw0OTg0OSw0OTg4NCw0OTg4NSw0OTg4OCw0OTg5MSw0OTg5Miw0OTg5OSw0OTkwMCw0OTkwMSw0OTkwMyw0OTkwNSw0OTkxMCw0OTkxMiw0OTkxMyw0OTkxNSw0OTkxNiw0OTkyMCw0OTkyOCw0OTkyOSw0OTkzMiw0OTkzMyw0OTkzOSw0OTk0MCw0OTk0MSw0OTk0NCw0OTk0OCw0''@;'; put 'put ''OTk1Niw0OTk1Nyw0OTk2MCw0OTk2MSw0OTk4OSw1MDAyNCw1MDAyNSw1MDAyOCw1MDAzMiw1MDAzNCw1MDA0MCw1MDA0MSw1MDA0NCw1MDA0NSw1MDA1Miw1MDA1Niw1MDA2MCw1MDExMiw1MDEzNiw1MDEzNyw1MDE0MCw1MDE0Myw1MDE0NCw1MDE0Niw1MDE1Miw1MDE1Myw1MDE1Nyw1MDE2''@;'; put 'put ''NCw1MDE2NSw1MDE2OCw1MDE4NCw1MDE5Miw1MDIxMiw1MDIyMCw1MDIyNCw1NDMyOCw1NDMyOSw1NDMzMCw1NDMzMSw1NDMzMiw1NDMzMyw1NDMzNCw1NDMzNSw1NDMzNyw1NDMzOCw1NDMzOSw1NDM0MSw1NDM0Miw1NDM0Myw1NDM0NCw1NDM0NSw1NDM0Niw1NDM0Nyw1NDM0OCw1NDM0OSw1''@;'; put 'put ''NDM1MCw1NDM1MSw1NDM1Miw1NDM1Myw1NDM1NCw1NDM1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM1Niw1NDM1Nyw1NDM1OCw1NDM1OSw1NDM2MCw1NDM2MSw1NDM2Miw1NDM2Myw1NDM2NSw1NDM2Niw1NDM2Nyw1NDM2OSw1NDM3MCw1NDM3MSw1NDM3Myw1NDM3NCw1NDM3''@;'; put 'put ''NSw1NDM3Niw1NDM3Nyw1NDM3OCw1NDM3OSw1NDM4MCw1NDM4Miw1NDM4NCw1NDM4NSw1NDM4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM4Nyw1NDM4OCw1NDM4OSw1NDM5MCw1NDM5MSw1NDM5NCw1NDM5NSw1NDM5Nyw1NDM5OCw1NDQwMSw1NDQwMyw1NDQwNCw1NDQwNSw1''@;'; put 'put ''NDQwNiw1NDQwNyw1NDQxMCw1NDQxMiw1NDQxNCw1NDQxNSw1NDQxNiw1NDQxNyw1NDQxOCw1NDQxOSw1NDQyMSw1NDQyMiw1NDQyMyw1NDQyNCw1NDQyNSw1NDQyNiw1NDQyNyw1NDQyOCw1NDQyOSw1MDIyOCw1MDIzNiw1MDIzNyw1MDI0OCw1MDI3Niw1MDI3Nyw1MDI4MCw1MDI4NCw1MDI5''@;'; put 'put ''Miw1MDI5Myw1MDI5Nyw1MDMwNCw1MDMyNCw1MDMzMiw1MDM2MCw1MDM2NCw1MDQwOSw1MDQxNiw1MDQxNyw1MDQyMCw1MDQyNCw1MDQyNiw1MDQzMSw1MDQzMiw1MDQzMyw1MDQ0NCw1MDQ0OCw1MDQ1Miw1MDQ2MCw1MDQ3Miw1MDQ3Myw1MDQ3Niw1MDQ4MCw1MDQ4OCw1MDQ4OSw1MDQ5MSw1''@;'; put 'put ''MDQ5Myw1MDUwMCw1MDUwMSw1MDUwNCw1MDUwNSw1MDUwNiw1MDUwOCw1MDUwOSw1MDUxMCw1MDUxNSw1MDUxNiw1MDUxNyw1MDUxOSw1MDUyMCw1MDUyMSw1MDUyNSw1MDUyNiw1MDUyOCw1MDUyOSw1MDUzMiw1MDUzNiw1MDU0NCw1MDU0NSw1MDU0Nyw1MDU0OCw1MDU0OSw1MDU1Niw1MDU1''@;'; put 'put ''Nyw1MDU2MCw1MDU2NCw1MDU2Nyw1MDU3Miw1MDU3Myw1MDU3NSw1MDU3Nyw1MDU4MSw1MDU4Myw1MDU4NCw1MDU4OCw1MDU5Miw1MDYwMSw1MDYxMiw1MDYxMyw1MDYxNiw1MDYxNyw1MDYxOSw1MDYyMCw1MDYyMSw1MDYyMiw1MDYyOCw1MDYyOSw1MDYzMCw1MDYzMSw1MDYzMiw1MDYzMyw1''@;'; put 'put ''MDYzNCw1MDYzNiw1MDYzOCw1NDQzMCw1NDQzMSw1NDQzMiw1NDQzMyw1NDQzNCw1NDQzNSw1NDQzNiw1NDQzNyw1NDQzOCw1NDQzOSw1NDQ0MCw1NDQ0Miw1NDQ0Myw1NDQ0NCw1NDQ0NSw1NDQ0Niw1NDQ0Nyw1NDQ0OCw1NDQ0OSw1NDQ1MCw1NDQ1MSw1NDQ1Miw1NDQ1Myw1NDQ1NCw1NDQ1''@;'; put 'put ''NSw1NDQ1NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ1Nyw1NDQ1OCw1NDQ1OSw1NDQ2MCw1NDQ2MSw1NDQ2Miw1NDQ2Myw1NDQ2NCw1NDQ2NSw1NDQ2Niw1NDQ2Nyw1NDQ2OCw1NDQ2OSw1NDQ3MCw1NDQ3MSw1NDQ3Miw1NDQ3Myw1NDQ3NCw1NDQ3NSw1NDQ3Nyw1NDQ3OCw1''@;'; put 'put ''NDQ3OSw1NDQ4MSw1NDQ4Miw1NDQ4Myw1NDQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ4Niw1NDQ4Nyw1NDQ4OCw1NDQ4OSw1NDQ5MCw1NDQ5MSw1NDQ5Myw1NDQ5NCw1NDQ5Niw1NDQ5Nyw1NDQ5OCw1NDQ5OSw1NDUwMCw1NDUwMSw1NDUwMiw1NDUwMyw1NDUwNSw1NDUw''@;'; put 'put ''Niw1NDUwNyw1NDUwOSw1NDUxMCw1NDUxMSw1NDUxMyw1NDUxNCw1NDUxNSw1NDUxNiw1NDUxNyw1NDUxOCw1NDUxOSw1NDUyMSw1NDUyMiw1NDUyNCw1MDY0MCw1MDY0MSw1MDY0NCw1MDY0OCw1MDY1Niw1MDY1Nyw1MDY1OSw1MDY2MSw1MDY2OCw1MDY2OSw1MDY3MCw1MDY3Miw1MDY3Niw1''@;'; put 'put ''MDY3OCw1MDY3OSw1MDY4NCw1MDY4NSw1MDY4Niw1MDY4Nyw1MDY4OCw1MDY4OSw1MDY5Myw1MDY5NCw1MDY5NSw1MDY5Niw1MDcwMCw1MDcwNCw1MDcxMiw1MDcxMyw1MDcxNSw1MDcxNiw1MDcyNCw1MDcyNSw1MDcyOCw1MDczMiw1MDczMyw1MDczNCw1MDczNiw1MDczOSw1MDc0MCw1MDc0''@;'; put 'put ''MSw1MDc0Myw1MDc0NSw1MDc0Nyw1MDc1Miw1MDc1Myw1MDc1Niw1MDc2MCw1MDc2OCw1MDc2OSw1MDc3MSw1MDc3Miw1MDc3Myw1MDc4MCw1MDc4MSw1MDc4NCw1MDc5Niw1MDc5OSw1MDgwMSw1MDgwOCw1MDgwOSw1MDgxMiw1MDgxNiw1MDgyNCw1MDgyNSw1MDgyNyw1MDgyOSw1MDgzNiw1''@;'; put 'put ''MDgzNyw1MDg0MCw1MDg0NCw1MDg1Miw1MDg1Myw1MDg1NSw1MDg1Nyw1MDg2NCw1MDg2NSw1MDg2OCw1MDg3Miw1MDg3Myw1MDg3NCw1MDg4MCw1MDg4MSw1MDg4Myw1MDg4NSw1MDg5Miw1MDg5Myw1MDg5Niw1MDkwMCw1MDkwOCw1MDkwOSw1MDkxMiw1MDkxMyw1MDkyMCw1NDUyNiw1NDUy''@;'; put 'put ''Nyw1NDUyOCw1NDUyOSw1NDUzMCw1NDUzMSw1NDUzMyw1NDUzNCw1NDUzNSw1NDUzNyw1NDUzOCw1NDUzOSw1NDU0MSw1NDU0Miw1NDU0Myw1NDU0NCw1NDU0NSw1NDU0Niw1NDU0Nyw1NDU1MCw1NDU1Miw1NDU1Myw1NDU1NCw1NDU1NSw1NDU1Niw1NDU1NyxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1NDU1OCw1NDU1OSw1NDU2MCw1NDU2MSw1NDU2Miw1NDU2Myw1NDU2NCw1NDU2NSw1NDU2Niw1NDU2Nyw1NDU2OCw1NDU2OSw1NDU3MCw1NDU3MSw1NDU3Miw1NDU3Myw1NDU3NCw1NDU3NSw1NDU3Niw1NDU3Nyw1NDU3OCw1NDU3OSw1NDU4MCw1NDU4MSw1NDU4Miw1NDU4''@;'; put 'put ''MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU4NCw1NDU4NSw1NDU4Niw1NDU4Nyw1NDU5MCw1NDU5MSw1NDU5Myw1NDU5NCw1NDU5NSw1NDU5Nyw1NDU5OCw1NDU5OSw1NDYwMCw1NDYwMSw1NDYwMiw1NDYwMyw1NDYwNiw1NDYwOCw1NDYxMCw1NDYxMSw1NDYxMiw1NDYxMyw1''@;'; put 'put ''NDYxNCw1NDYxNSw1NDYxOCw1NDYxOSw1NDYyMSw1NDYyMiw1NDYyMyw1NDYyNSw1NDYyNiw1NDYyNyw1MDkyMSw1MDkyNCw1MDkyOCw1MDkzNiw1MDkzNyw1MDk0MSw1MDk0OCw1MDk0OSw1MDk1Miw1MDk1Niw1MDk2NCw1MDk2NSw1MDk2Nyw1MDk2OSw1MDk3Niw1MDk3Nyw1MDk4MCw1MDk4''@;'; put 'put ''NCw1MDk5Miw1MDk5Myw1MDk5NSw1MDk5Nyw1MDk5OSw1MTAwNCw1MTAwNSw1MTAwOCw1MTAxMiw1MTAxOCw1MTAyMCw1MTAyMSw1MTAyMyw1MTAyNSw1MTAyNiw1MTAyNyw1MTAyOCw1MTAyOSw1MTAzMCw1MTAzMSw1MTAzMiw1MTAzNiw1MTA0MCw1MTA0OCw1MTA1MSw1MTA2MCw1MTA2MSw1''@;'; put 'put ''MTA2NCw1MTA2OCw1MTA2OSw1MTA3MCw1MTA3NSw1MTA3Niw1MTA3Nyw1MTA3OSw1MTA4MCw1MTA4MSw1MTA4Miw1MTA4Niw1MTA4OCw1MTA4OSw1MTA5Miw1MTA5NCw1MTA5NSw1MTA5Niw1MTA5OCw1MTEwNCw1MTEwNSw1MTEwNyw1MTEwOCw1MTEwOSw1MTExMCw1MTExNiw1MTExNyw1MTEy''@;'; put 'put ''MCw1MTEyNCw1MTEzMiw1MTEzMyw1MTEzNSw1MTEzNiw1MTEzNyw1MTE0NCw1MTE0NSw1MTE0OCw1MTE1MCw1MTE1Miw1MTE2MCw1MTE2NSw1MTE3Miw1MTE3Niw1MTE4MCw1MTIwMCw1MTIwMSw1MTIwNCw1MTIwOCw1MTIxMCw1NDYyOCw1NDYzMCw1NDYzMSw1NDYzNCw1NDYzNiw1NDYzOCw1''@;'; put 'put ''NDYzOSw1NDY0MCw1NDY0MSw1NDY0Miw1NDY0Myw1NDY0Niw1NDY0Nyw1NDY0OSw1NDY1MCw1NDY1MSw1NDY1Myw1NDY1NCw1NDY1NSw1NDY1Niw1NDY1Nyw1NDY1OCw1NDY1OSw1NDY2Miw1NDY2Niw1NDY2NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY2OCw1NDY2OSw1NDY3''@;'; put 'put ''MCw1NDY3MSw1NDY3Myw1NDY3NCw1NDY3NSw1NDY3Niw1NDY3Nyw1NDY3OCw1NDY3OSw1NDY4MCw1NDY4MSw1NDY4Miw1NDY4Myw1NDY4NCw1NDY4NSw1NDY4Niw1NDY4Nyw1NDY4OCw1NDY4OSw1NDY5MCw1NDY5MSw1NDY5Miw1NDY5NCw1NDY5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw1NDY5Niw1NDY5Nyw1NDY5OCw1NDY5OSw1NDcwMCw1NDcwMSw1NDcwMiw1NDcwMyw1NDcwNCw1NDcwNSw1NDcwNiw1NDcwNyw1NDcwOCw1NDcwOSw1NDcxMCw1NDcxMSw1NDcxMiw1NDcxMyw1NDcxNCw1NDcxNSw1NDcxNiw1NDcxNyw1NDcxOCw1NDcxOSw1NDcyMCw1NDcyMSw1NDcy''@;'; put 'put ''Miw1NDcyMyw1NDcyNCw1NDcyNSw1NDcyNiw1NDcyNyw1MTIxNiw1MTIxNyw1MTIxOSw1MTIyMSw1MTIyMiw1MTIyOCw1MTIyOSw1MTIzMiw1MTIzNiw1MTI0NCw1MTI0NSw1MTI0Nyw1MTI0OSw1MTI1Niw1MTI2MCw1MTI2NCw1MTI3Miw1MTI3Myw1MTI3Niw1MTI3Nyw1MTI4NCw1MTMxMiw1''@;'; put 'put ''MTMxMyw1MTMxNiw1MTMyMCw1MTMyMiw1MTMyOCw1MTMyOSw1MTMzMSw1MTMzMyw1MTMzNCw1MTMzNSw1MTMzOSw1MTM0MCw1MTM0MSw1MTM0OCw1MTM1Nyw1MTM1OSw1MTM2MSw1MTM2OCw1MTM4OCw1MTM4OSw1MTM5Niw1MTQwMCw1MTQwNCw1MTQxMiw1MTQxMyw1MTQxNSw1MTQxNyw1MTQy''@;'; put 'put ''NCw1MTQyNSw1MTQyOCw1MTQ0NSw1MTQ1Miw1MTQ1Myw1MTQ1Niw1MTQ2MCw1MTQ2MSw1MTQ2Miw1MTQ2OCw1MTQ2OSw1MTQ3MSw1MTQ3Myw1MTQ4MCw1MTUwMCw1MTUwOCw1MTUzNiw1MTUzNyw1MTU0MCw1MTU0NCw1MTU1Miw1MTU1Myw1MTU1NSw1MTU2NCw1MTU2OCw1MTU3Miw1MTU4MCw1''@;'; put 'put ''MTU5Miw1MTU5Myw1MTU5Niw1MTYwMCw1MTYwOCw1MTYwOSw1MTYxMSw1MTYxMyw1MTY0OCw1MTY0OSw1MTY1Miw1MTY1NSw1MTY1Niw1MTY1OCw1MTY2NCw1MTY2NSw1MTY2Nyw1NDczMCw1NDczMSw1NDczMyw1NDczNCw1NDczNSw1NDczNyw1NDczOSw1NDc0MCw1NDc0MSw1NDc0Miw1NDc0''@;'; put 'put ''Myw1NDc0Niw1NDc0OCw1NDc1MCw1NDc1MSw1NDc1Miw1NDc1Myw1NDc1NCw1NDc1NSw1NDc1OCw1NDc1OSw1NDc2MSw1NDc2Miw1NDc2Myw1NDc2NSw1NDc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDc2Nyw1NDc2OCw1NDc2OSw1NDc3MCw1NDc3MSw1NDc3NCw1NDc3Niw1''@;'; put 'put ''NDc3OCw1NDc3OSw1NDc4MCw1NDc4MSw1NDc4Miw1NDc4Myw1NDc4Niw1NDc4Nyw1NDc4OSw1NDc5MCw1NDc5MSw1NDc5Myw1NDc5NCw1NDc5NSw1NDc5Niw1NDc5Nyw1NDc5OCw1NDc5OSw1NDgwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgwNiw1NDgwNyw1NDgwOCw1NDgw''@;'; put 'put ''OSw1NDgxMCw1NDgxMSw1NDgxMyw1NDgxNCw1NDgxNSw1NDgxNyw1NDgxOCw1NDgxOSw1NDgyMSw1NDgyMiw1NDgyMyw1NDgyNCw1NDgyNSw1NDgyNiw1NDgyNyw1NDgyOCw1NDgzMCw1NDgzMSw1NDgzMiw1NDgzMyw1NDgzNCw1NDgzNSw1NDgzNiw1NDgzNyw1NDgzOCw1NDgzOSw1NDg0Miw1''@;'; put 'put ''NDg0Myw1MTY2OSw1MTY3MCw1MTY3Myw1MTY3NCw1MTY3Niw1MTY3Nyw1MTY4MCw1MTY4Miw1MTY4NCw1MTY4Nyw1MTY5Miw1MTY5Myw1MTY5NSw1MTY5Niw1MTY5Nyw1MTcwNCw1MTcwNSw1MTcwOCw1MTcxMiw1MTcyMCw1MTcyMSw1MTcyMyw1MTcyNCw1MTcyNSw1MTczMiw1MTczNiw1MTc1''@;'; put 'put ''Myw1MTc4OCw1MTc4OSw1MTc5Miw1MTc5Niw1MTgwNCw1MTgwNSw1MTgwNyw1MTgwOCw1MTgwOSw1MTgxNiw1MTgzNyw1MTg0NCw1MTg2NCw1MTkwMCw1MTkwMSw1MTkwNCw1MTkwOCw1MTkxNiw1MTkxNyw1MTkxOSw1MTkyMSw1MTkyMyw1MTkyOCw1MTkyOSw1MTkzNiw1MTk0OCw1MTk1Niw1''@;'; put 'put ''MTk3Niw1MTk4NCw1MTk4OCw1MTk5Miw1MmUzLDUyMDAxLDUyMDMzLDUyMDQwLDUyMDQxLDUyMDQ0LDUyMDQ4LDUyMDU2LDUyMDU3LDUyMDYxLDUyMDY4LDUyMDg4LDUyMDg5LDUyMTI0LDUyMTUyLDUyMTgwLDUyMTk2LDUyMTk5LDUyMjAxLDUyMjM2LDUyMjM3LDUyMjQwLDUyMjQ0LDUyMjUy''@;'; put 'put ''LDUyMjUzLDUyMjU3LDUyMjU4LDUyMjYzLDUyMjY0LDUyMjY1LDUyMjY4LDUyMjcwLDUyMjcyLDUyMjgwLDUyMjgxLDUyMjgzLDU0ODQ1LDU0ODQ2LDU0ODQ3LDU0ODQ5LDU0ODUwLDU0ODUxLDU0ODUyLDU0ODU0LDU0ODU1LDU0ODU4LDU0ODYwLDU0ODYyLDU0ODYzLDU0ODY0LDU0ODY2LDU0''@;'; put 'put ''ODY3LDU0ODcwLDU0ODcxLDU0ODczLDU0ODc0LDU0ODc1LDU0ODc3LDU0ODc4LDU0ODc5LDU0ODgwLDU0ODgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODgyLDU0ODgzLDU0ODg0LDU0ODg1LDU0ODg2LDU0ODg4LDU0ODkwLDU0ODkxLDU0ODkyLDU0ODkzLDU0ODk0LDU0ODk1''@;'; put 'put ''LDU0ODk4LDU0ODk5LDU0OTAxLDU0OTAyLDU0OTAzLDU0OTA0LDU0OTA1LDU0OTA2LDU0OTA3LDU0OTA4LDU0OTA5LDU0OTEwLDU0OTExLDU0OTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTEzLDU0OTE0LDU0OTE2LDU0OTE4LDU0OTE5LDU0OTIwLDU0OTIxLDU0OTIyLDU0''@;'; put 'put ''OTIzLDU0OTI2LDU0OTI3LDU0OTI5LDU0OTMwLDU0OTMxLDU0OTMzLDU0OTM0LDU0OTM1LDU0OTM2LDU0OTM3LDU0OTM4LDU0OTM5LDU0OTQwLDU0OTQyLDU0OTQ0LDU0OTQ2LDU0OTQ3LDU0OTQ4LDU0OTQ5LDU0OTUwLDU0OTUxLDU0OTUzLDU0OTU0LDUyMjg0LDUyMjg1LDUyMjg2LDUyMjky''@;'; put 'put ''LDUyMjkzLDUyMjk2LDUyMzAwLDUyMzA4LDUyMzA5LDUyMzExLDUyMzEyLDUyMzEzLDUyMzIwLDUyMzI0LDUyMzI2LDUyMzI4LDUyMzM2LDUyMzQxLDUyMzc2LDUyMzc3LDUyMzgwLDUyMzg0LDUyMzkyLDUyMzkzLDUyMzk1LDUyMzk2LDUyMzk3LDUyNDA0LDUyNDA1LDUyNDA4LDUyNDEyLDUy''@;'; put 'put ''NDIwLDUyNDIxLDUyNDIzLDUyNDI1LDUyNDMyLDUyNDM2LDUyNDUyLDUyNDYwLDUyNDY0LDUyNDgxLDUyNDg4LDUyNDg5LDUyNDkyLDUyNDk2LDUyNTA0LDUyNTA1LDUyNTA3LDUyNTA5LDUyNTE2LDUyNTIwLDUyNTI0LDUyNTM3LDUyNTcyLDUyNTc2LDUyNTgwLDUyNTg4LDUyNTg5LDUyNTkx''@;'; put 'put ''LDUyNTkzLDUyNjAwLDUyNjE2LDUyNjI4LDUyNjI5LDUyNjMyLDUyNjM2LDUyNjQ0LDUyNjQ1LDUyNjQ3LDUyNjQ5LDUyNjU2LDUyNjc2LDUyNjg0LDUyNjg4LDUyNzEyLDUyNzE2LDUyNzIwLDUyNzI4LDUyNzI5LDUyNzMxLDUyNzMzLDUyNzQwLDUyNzQ0LDUyNzQ4LDUyNzU2LDUyNzYxLDUy''@;'; put 'put ''NzY4LDUyNzY5LDUyNzcyLDUyNzc2LDUyNzg0LDUyNzg1LDUyNzg3LDUyNzg5LDU0OTU1LDU0OTU3LDU0OTU4LDU0OTU5LDU0OTYxLDU0OTYyLDU0OTYzLDU0OTY0LDU0OTY1LDU0OTY2LDU0OTY3LDU0OTY4LDU0OTcwLDU0OTcyLDU0OTczLDU0OTc0LDU0OTc1LDU0OTc2LDU0OTc3LDU0OTc4''@;'; put 'put ''LDU0OTc5LDU0OTgyLDU0OTgzLDU0OTg1LDU0OTg2LDU0OTg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTg5LDU0OTkwLDU0OTkxLDU0OTkyLDU0OTk0LDU0OTk1LDU0OTk3LDU0OTk4LDU1ZTMsNTUwMDIsNTUwMDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUw''@;'; put 'put ''MTAsNTUwMTEsNTUwMTMsNTUwMTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUwMjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUwMjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAsNTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgs''@;'; put 'put ''NTUwMzksNTUwNDEsNTUwNDIsNTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgsNTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgsNTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4''@;'; put 'put ''NDMsNTI4NDUsNTI4NTIsNTI4NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5MjksNTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAs''@;'; put 'put ''NTI5ODEsNTI5ODMsNTI5ODQsNTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTNlMyw1MzAwOCw1MzAwOSw1MzAxMSw1MzAxMyw1MzAyMCw1MzAyNCw1MzAyOCw1MzAzNiw1MzAzNyw1MzAzOSw1MzA0MCw1MzA0MSw1MzA0OCw1MzA3Niw1MzA3Nyw1MzA4MCw1MzA4NCw1MzA5Miw1MzA5Myw1MzA5''@;'; put 'put ''NSw1MzA5Nyw1MzEwNCw1MzEwNSw1MzEwOCw1MzExMiw1MzEyMCw1MzEyNSw1MzEzMiw1MzE1Myw1MzE2MCw1MzE2OCw1MzE4OCw1MzIxNiw1MzIxNyw1MzIyMCw1MzIyNCw1MzIzMiw1MzIzMyw1MzIzNSw1MzIzNyw1MzI0NCw1MzI0OCw1MzI1Miw1MzI2NSw1MzI3Miw1MzI5Myw1MzMwMCw1''@;'; put 'put ''MzMwMSw1MzMwNCw1MzMwOCw1NTA2MSw1NTA2Miw1NTA2Myw1NTA2Niw1NTA2Nyw1NTA2OSw1NTA3MCw1NTA3MSw1NTA3Myw1NTA3NCw1NTA3NSw1NTA3Niw1NTA3Nyw1NTA3OCw1NTA3OSw1NTA4Miw1NTA4NCw1NTA4Niw1NTA4Nyw1NTA4OCw1NTA4OSw1NTA5MCw1NTA5MSw1NTA5NCw1NTA5''@;'; put 'put ''NSw1NTA5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTA5OCw1NTA5OSw1NTEwMSw1NTEwMiw1NTEwMyw1NTEwNCw1NTEwNSw1NTEwNiw1NTEwNyw1NTEwOSw1NTExMCw1NTExMiw1NTExNCw1NTExNSw1NTExNiw1NTExNyw1NTExOCw1NTExOSw1NTEyMiw1NTEyMyw1NTEyNSw1''@;'; put 'put ''NTEzMCw1NTEzMSw1NTEzMiw1NTEzMyw1NTEzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTEzNSw1NTEzOCw1NTE0MCw1NTE0Miw1NTE0Myw1NTE0NCw1NTE0Niw1NTE0Nyw1NTE0OSw1NTE1MCw1NTE1MSw1NTE1Myw1NTE1NCw1NTE1NSw1NTE1Nyw1NTE1OCw1NTE1OSw1NTE2''@;'; put 'put ''MCw1NTE2MSw1NTE2Miw1NTE2Myw1NTE2Niw1NTE2Nyw1NTE2OCw1NTE3MCw1NTE3MSw1NTE3Miw1NTE3Myw1NTE3NCw1NTE3NSw1NTE3OCw1NTE3OSw1MzMxNiw1MzMxNyw1MzMxOSw1MzMyMSw1MzMyOCw1MzMzMiw1MzMzNiw1MzM0NCw1MzM1Niw1MzM1Nyw1MzM2MCw1MzM2NCw1MzM3Miw1''@;'; put 'put ''MzM3Myw1MzM3Nyw1MzQxMiw1MzQxMyw1MzQxNiw1MzQyMCw1MzQyOCw1MzQyOSw1MzQzMSw1MzQzMyw1MzQ0MCw1MzQ0MSw1MzQ0NCw1MzQ0OCw1MzQ0OSw1MzQ1Niw1MzQ1Nyw1MzQ1OSw1MzQ2MCw1MzQ2MSw1MzQ2OCw1MzQ2OSw1MzQ3Miw1MzQ3Niw1MzQ4NCw1MzQ4NSw1MzQ4Nyw1MzQ4''@;'; put 'put ''OCw1MzQ4OSw1MzQ5Niw1MzUxNyw1MzU1Miw1MzU1Myw1MzU1Niw1MzU2MCw1MzU2Miw1MzU2OCw1MzU2OSw1MzU3MSw1MzU3Miw1MzU3Myw1MzU4MCw1MzU4MSw1MzU4NCw1MzU4OCw1MzU5Niw1MzU5Nyw1MzU5OSw1MzYwMSw1MzYwOCw1MzYxMiw1MzYyOCw1MzYzNiw1MzY0MCw1MzY2NCw1''@;'; put 'put ''MzY2NSw1MzY2OCw1MzY3Miw1MzY4MCw1MzY4MSw1MzY4Myw1MzY4NSw1MzY5MCw1MzY5Miw1MzY5Niw1MzcyMCw1Mzc0OCw1Mzc1Miw1Mzc2Nyw1Mzc2OSw1Mzc3Niw1MzgwNCw1MzgwNSw1MzgwOCw1MzgxMiw1MzgyMCw1MzgyMSw1MzgyMyw1MzgyNSw1MzgzMiw1Mzg1Miw1NTE4MSw1NTE4''@;'; put 'put ''Miw1NTE4Myw1NTE4NSw1NTE4Niw1NTE4Nyw1NTE4OCw1NTE4OSw1NTE5MCw1NTE5MSw1NTE5NCw1NTE5Niw1NTE5OCw1NTE5OSw1NTIwMCw1NTIwMSw1NTIwMiw1NTIwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2MCw1''@;'; put 'put ''Mzg4OCw1Mzg4OSw1Mzg5Miw1Mzg5Niw1MzkwNCw1MzkwNSw1MzkwOSw1MzkxNiw1MzkyMCw1MzkyNCw1MzkzMiw1MzkzNyw1Mzk0NCw1Mzk0NSw1Mzk0OCw1Mzk1MSw1Mzk1Miw1Mzk1NCw1Mzk2MCw1Mzk2MSw1Mzk2Myw1Mzk3Miw1Mzk3Niw1Mzk4MCw1Mzk4OCw1Mzk4OSw1NGUzLDU0MDAx''@;'; put 'put ''LDU0MDA0LDU0MDA4LDU0MDE2LDU0MDE3LDU0MDE5LDU0MDIxLDU0MDI4LDU0MDI5LDU0MDMwLDU0MDMyLDU0MDM2LDU0MDM4LDU0MDQ0LDU0MDQ1LDU0MDQ3LDU0MDQ4LDU0MDQ5LDU0MDUzLDU0MDU2LDU0MDU3LDU0MDYwLDU0MDY0LDU0MDcyLDU0MDczLDU0MDc1LDU0MDc2LDU0MDc3LDU0''@;'; put 'put ''MDg0LDU0MDg1LDU0MTQwLDU0MTQxLDU0MTQ0LDU0MTQ4LDU0MTU2LDU0MTU3LDU0MTU5LDU0MTYwLDU0MTYxLDU0MTY4LDU0MTY5LDU0MTcyLDU0MTc2LDU0MTg0LDU0MTg1LDU0MTg3LDU0MTg5LDU0MTk2LDU0MjAwLDU0MjA0LDU0MjEyLDU0MjEzLDU0MjE2LDU0MjE3LDU0MjI0LDU0MjMy''@;'; put 'put ''LDU0MjQxLDU0MjQzLDU0MjUyLDU0MjUzLDU0MjU2LDU0MjYwLDU0MjY4LDU0MjY5LDU0MjcxLDU0MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjgwLDU0MzAxLDU0MzM2LDU0MzQwLDU0MzY0LDU0MzY4LDU0MzcyLDU0MzgxLDU0MzgzLDU0MzkyLDU0MzkzLDU0Mzk2LDU0Mzk5LDU0NDAwLDU0NDAyLDU0NDA4LDU0NDA5LDU0NDExLDU0NDEzLDU0NDIw''@;'; put 'put ''LDU0NDQxLDU0NDc2LDU0NDgwLDU0NDg0LDU0NDkyLDU0NDk1LDU0NTA0LDU0NTA4LDU0NTEyLDU0NTIwLDU0NTIzLDU0NTI1LDU0NTMyLDU0NTM2LDU0NTQwLDU0NTQ4LDU0NTQ5LDU0NTUxLDU0NTg4LDU0NTg5LDU0NTkyLDU0NTk2LDU0NjA0LDU0NjA1LDU0NjA3LDU0NjA5LDU0NjE2LDU0''@;'; put 'put ''NjE3LDU0NjIwLDU0NjI0LDU0NjI5LDU0NjMyLDU0NjMzLDU0NjM1LDU0NjM3LDU0NjQ0LDU0NjQ1LDU0NjQ4LDU0NjUyLDU0NjYwLDU0NjYxLDU0NjYzLDU0NjY0LDU0NjY1LDU0NjcyLDU0NjkzLDU0NzI4LDU0NzI5LDU0NzMyLDU0NzM2LDU0NzM4LDU0NzQ0LDU0NzQ1LDU0NzQ3LDU0NzQ5''@;'; put 'put ''LDU0NzU2LDU0NzU3LDU0NzYwLDU0NzY0LDU0NzcyLDU0NzczLDU0Nzc1LDU0Nzc3LDU0Nzg0LDU0Nzg1LDU0Nzg4LDU0NzkyLDU0ODAwLDU0ODAxLDU0ODAzLDU0ODA0LDU0ODA1LDU0ODEyLDU0ODE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODIwLDU0ODI5LDU0ODQwLDU0ODQxLDU0ODQ0LDU0ODQ4LDU0ODUzLDU0ODU2LDU0ODU3LDU0ODU5LDU0ODYx''@;'; put 'put ''LDU0ODY1LDU0ODY4LDU0ODY5LDU0ODcyLDU0ODc2LDU0ODg3LDU0ODg5LDU0ODk2LDU0ODk3LDU0OTAwLDU0OTE1LDU0OTE3LDU0OTI0LDU0OTI1LDU0OTI4LDU0OTMyLDU0OTQxLDU0OTQzLDU0OTQ1LDU0OTUyLDU0OTU2LDU0OTYwLDU0OTY5LDU0OTcxLDU0OTgwLDU0OTgxLDU0OTg0LDU0''@;'; put 'put ''OTg4LDU0OTkzLDU0OTk2LDU0OTk5LDU1MDAxLDU1MDA4LDU1MDEyLDU1MDE2LDU1MDI0LDU1MDI5LDU1MDM2LDU1MDM3LDU1MDQwLDU1MDQ0LDU1MDU3LDU1MDY0LDU1MDY1LDU1MDY4LDU1MDcyLDU1MDgwLDU1MDgxLDU1MDgzLDU1MDg1LDU1MDkyLDU1MDkzLDU1MDk2LDU1MTAwLDU1MTA4''@;'; put 'put ''LDU1MTExLDU1MTEzLDU1MTIwLDU1MTIxLDU1MTI0LDU1MTI2LDU1MTI3LDU1MTI4LDU1MTI5LDU1MTM2LDU1MTM3LDU1MTM5LDU1MTQxLDU1MTQ1LDU1MTQ4LDU1MTUyLDU1MTU2LDU1MTY0LDU1MTY1LDU1MTY5LDU1MTc2LDU1MTc3LDU1MTgwLDU1MTg0LDU1MTkyLDU1MTkzLDU1MTk1LDU1''@;'; put 'put ''MTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAyODUsMjAzMzksMjA1NTEsMjA3MjksMjExNTIsMjE0ODcsMjE2MjEsMjE3MzMsMjIw''@;'; put 'put ''MjUsMjMyMzMsMjM0NzgsMjYyNDcsMjY1NTAsMjY1NTEsMjY2MDcsMjc0NjgsMjk2MzQsMzAxNDYsMzEyOTIsMzM0OTksMzM1NDAsMzQ5MDMsMzQ5NTIsMzUzODIsMzYwNDAsMzYzMDMsMzY2MDMsMzY4MzgsMzkzODEsMjEwNTEsMjEzNjQsMjE1MDgsMjQ2ODIsMjQ5MzIsMjc1ODAsMjk2NDcs''@;'; put 'put ''MzMwNTAsMzUyNTgsMzUyODIsMzgzMDcsMjAzNTUsMjEwMDIsMjI3MTgsMjI5MDQsMjMwMTQsMjQxNzgsMjQxODUsMjUwMzEsMjU1MzYsMjY0MzgsMjY2MDQsMjY3NTEsMjg1NjcsMzAyODYsMzA0NzUsMzA5NjUsMzEyNDAsMzE0ODcsMzE3NzcsMzI5MjUsMzMzOTAsMzMzOTMsMzU1NjMsMzgy''@;'; put 'put ''OTEsMjAwNzUsMjE5MTcsMjYzNTksMjgyMTIsMzA4ODMsMzE0NjksMzM4ODMsMzUwODgsMzQ2MzgsMzg4MjQsMjEyMDgsMjIzNTAsMjI1NzAsMjM4ODQsMjQ4NjMsMjUwMjIsMjUxMjEsMjU5NTQsMjY1NzcsMjcyMDQsMjgxODcsMjk5NzYsMzAxMzEsMzA0MzUsMzA2NDAsMzIwNTgsMzcwMzks''@;'; put 'put ''Mzc5NjksMzc5NzAsNDA4NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsMjEyODMsMjM3MjQsMzAwMDIsMzI5ODcsMzc0NDAsMzgyOTYsMjEwODMsMjI1MzYsMjMwMDQsMjM3MTMsMjM4MzEsMjQyNDcsMjQzNzgsMjQzOTQsMjQ5NTEsMjc3NDMsMzAwNzQsMzAwODYsMzE5NjgsMzIxMTUsMzIxNzcsMzI2NTIsMzMxMDgsMzMzMTMsMzQxOTMsMzUxMzcsMzU2MTEs''@;'; put 'put ''Mzc2MjgsMzg0NzcsNDAwMDcsMjAxNzEsMjAyMTUsMjA0OTEsMjA5NzcsMjI2MDcsMjQ4ODcsMjQ4OTQsMjQ5MzYsMjU5MTMsMjcxMTQsMjg0MzMsMzAxMTcsMzAzNDIsMzA0MjIsMzE2MjMsMzM0NDUsMzM5OTUsNjM3NDQsMzc3OTksMzgyODMsMjE4ODgsMjM0NTgsMjIzNTMsNjM3NDUsMzE5''@;'; put 'put ''MjMsMzI2OTcsMzczMDEsMjA1MjAsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjU0NTQsMjU4MTgsMjU4MzEsMjgxOTIsMjg4NDQsMzEwNjcsMzYzMTcsMzYzODIsNjM3NDYsMzY5ODksMzc0NDUsMzc2MjQsMjAwOTQsMjAyMTQsMjA1ODEsMjQwNjIsMjQzMTQsMjQ4MzgsMjY5NjcsMzMxMzcs''@;'; put 'put ''MzQzODgsMzY0MjMsMzc3NDksMzk0NjcsMjAwNjIsMjA2MjUsMjY0ODAsMjY2ODgsMjA3NDUsMjExMzMsMjExMzgsMjcyOTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA2NTIsMzczOTIsNDA2NjAsMjExNjMsMjQ2MjMsMzY4NTAsMjA1NTIsMjUwMDEsMjU1ODEsMjU4MDIsMjY2ODQsMjcyNjgsMjg2MDgsMzMxNjAsMzUyMzMsMzg1NDgsMjI1MzMsMjkzMDks''@;'; put 'put ''MjkzNTYsMjk5NTYsMzIxMjEsMzIzNjUsMzI5MzcsMzUyMTEsMzU3MDAsMzY5NjMsNDAyNzMsMjUyMjUsMjc3NzAsMjg1MDAsMzIwODAsMzI1NzAsMzUzNjMsMjA4NjAsMjQ5MDYsMzE2NDUsMzU2MDksMzc0NjMsMzc3NzIsMjAxNDAsMjA0MzUsMjA1MTAsMjA2NzAsMjA3NDIsMjExODUsMjEx''@;'; put 'put ''OTcsMjEzNzUsMjIzODQsMjI2NTksMjQyMTgsMjQ0NjUsMjQ5NTAsMjUwMDQsMjU4MDYsMjU5NjQsMjYyMjMsMjYyOTksMjYzNTYsMjY3NzUsMjgwMzksMjg4MDUsMjg5MTMsMjk4NTUsMjk4NjEsMjk4OTgsMzAxNjksMzA4MjgsMzA5NTYsMzE0NTUsMzE0NzgsMzIwNjksMzIxNDcsMzI3ODks''@;'; put 'put ''MzI4MzEsMzMwNTEsMzM2ODYsMzU2ODYsMzY2MjksMzY4ODUsMzc4NTcsMzg5MTUsMzg5NjgsMzk1MTQsMzk5MTIsMjA0MTgsMjE4NDMsMjI1ODYsMjI4NjUsMjMzOTUsMjM2MjIsMjQ3NjAsMjUxMDYsMjY2OTAsMjY4MDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4NTYsMjgzMzAsMzAwMjgsMzAzMjgsMzA5MjYsMzEyOTMsMzE5OTUsMzIzNjMsMzIzODAs''@;'; put 'put ''MzUzMzYsMzU0ODksMzU5MDMsMzg1NDIsNDAzODgsMjE0NzYsMjE0ODEsMjE1NzgsMjE2MTcsMjIyNjYsMjI5OTMsMjMzOTYsMjM2MTEsMjQyMzUsMjUzMzUsMjU5MTEsMjU5MjUsMjU5NzAsMjYyNzIsMjY1NDMsMjcwNzMsMjc4MzcsMzAyMDQsMzAzNTIsMzA1OTAsMzEyOTUsMzI2NjAsMzI3''@;'; put 'put ''NzEsMzI5MjksMzMxNjcsMzM1MTAsMzM1MzMsMzM3NzYsMzQyNDEsMzQ4NjUsMzQ5OTYsMzU0OTMsNjM3NDcsMzY3NjQsMzc2NzgsMzg1OTksMzkwMTUsMzk2NDAsNDA3MjMsMjE3NDEsMjYwMTEsMjYzNTQsMjY3NjcsMzEyOTYsMzU4OTUsNDAyODgsMjIyNTYsMjIzNzIsMjM4MjUsMjYxMTgs''@;'; put 'put ''MjY4MDEsMjY4MjksMjg0MTQsMjk3MzYsMzQ5NzQsMzk5MDgsMjc3NTIsNjM3NDgsMzk1OTIsMjAzNzksMjA4NDQsMjA4NDksMjExNTEsMjMzODAsMjQwMzcsMjQ2NTYsMjQ2ODUsMjUzMjksMjU1MTEsMjU5MTUsMjk2NTcsMzEzNTQsMzQ0NjcsMzYwMDIsMzg3OTksMjAwMTgsMjM1MjEsMjUw''@;'; put 'put ''OTYsMjY1MjQsMjk5MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MzExODUsMzM3NDcsMzU0NjMsMzU1MDYsMzYzMjgsMzY5NDIsMzc3MDcsMzg5ODIsMjQyNzUsMjcxMTIsMzQzMDMsMzcxMDEsNjM3NDksMjA4OTYsMjM0NDgsMjM1MzIsMjQ5MzEsMjY4NzQsMjc0NTQsMjg3NDgsMjk3NDMsMjk5MTIsMzE2NDksMzI1OTIsMzM3MzMsMzUyNjQsMzYwMTEsMzgz''@;'; put 'put ''NjQsMzkyMDgsMjEwMzgsMjQ2NjksMjUzMjQsMzY4NjYsMjAzNjIsMjA4MDksMjEyODEsMjI3NDUsMjQyOTEsMjYzMzYsMjc5NjAsMjg4MjYsMjkzNzgsMjk2NTQsMzE1NjgsMzMwMDksMzc5NzksMjEzNTAsMjU0OTksMzI2MTksMjAwNTQsMjA2MDgsMjI2MDIsMjI3NTAsMjQ2MTgsMjQ4NzEs''@;'; put 'put ''MjUyOTYsMjcwODgsMzk3NDUsMjM0MzksMzIwMjQsMzI5NDUsMzY3MDMsMjAxMzIsMjA2ODksMjE2NzYsMjE5MzIsMjMzMDgsMjM5NjgsMjQwMzksMjU4OTgsMjU5MzQsMjY2NTcsMjcyMTEsMjk0MDksMzAzNTAsMzA3MDMsMzIwOTQsMzI3NjEsMzMxODQsMzQxMjYsMzQ1MjcsMzY2MTEsMzY2''@;'; put 'put ''ODYsMzcwNjYsMzkxNzEsMzk1MDksMzk4NTEsMTk5OTIsMjAwMzcsMjAwNjEsMjAxNjcsMjA0NjUsMjA4NTUsMjEyNDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEzMTIsMjE0NzUsMjE0NzcsMjE2NDYsMjIwMzYsMjIzODksMjI0MzQsMjM0OTUsMjM5NDMsMjQyNzIsMjUwODQsMjUzMDQsMjU5MzcsMjY1NTIsMjY2MDEsMjcwODMsMjc0NzIsMjc1OTAsMjc2''@;'; put 'put ''MjgsMjc3MTQsMjgzMTcsMjg3OTIsMjkzOTksMjk1OTAsMjk2OTksMzA2NTUsMzA2OTcsMzEzNTAsMzIxMjcsMzI3NzcsMzMyNzYsMzMyODUsMzMyOTAsMzM1MDMsMzQ5MTQsMzU2MzUsMzYwOTIsMzY1NDQsMzY4ODEsMzcwNDEsMzc0NzYsMzc1NTgsMzkzNzgsMzk0OTMsNDAxNjksNDA0MDcs''@;'; put 'put ''NDA4NjAsMjIyODMsMjM2MTYsMzM3MzgsMzg4MTYsMzg4MjcsNDA2MjgsMjE1MzEsMzEzODQsMzI2NzYsMzUwMzMsMzY1NTcsMzcwODksMjI1MjgsMjM2MjQsMjU0OTYsMzEzOTEsMjM0NzAsMjQzMzksMzEzNTMsMzE0MDYsMzM0MjIsMzY1MjQsMjA1MTgsMjEwNDgsMjEyNDAsMjEzNjcsMjIy''@;'; put 'put ''ODAsMjUzMzEsMjU0NTgsMjc0MDIsMjgwOTksMzA1MTksMjE0MTMsMjk1MjcsMzQxNTIsMzY0NzAsMzgzNTcsMjY0MjYsMjczMzEsMjg1MjgsMzU0MzcsMzY1NTYsMzkyNDMsNjM3NTAsMjYyMzEsMjc1MTIsMzYwMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzk3NDAsNjM3NTEsMjE0ODMsMjIzMTcsMjI4NjIsMjU1NDIsMjcxMzEsMjk2NzQsMzA3ODksMzE0''@;'; put 'put ''MTgsMzE0MjksMzE5OTgsMzM5MDksMzUyMTUsMzYyMTEsMzY5MTcsMzgzMTIsMjEyNDMsMjIzNDMsMzAwMjMsMzE1ODQsMzM3NDAsMzc0MDYsNjM3NTIsMjcyMjQsMjA4MTEsMjEwNjcsMjExMjcsMjUxMTksMjY4NDAsMjY5OTcsMzg1NTMsMjA2NzcsMjExNTYsMjEyMjAsMjUwMjcsMjYwMjAs''@;'; put 'put ''MjY2ODEsMjcxMzUsMjk4MjIsMzE1NjMsMzM0NjUsMzM3NzEsMzUyNTAsMzU2NDEsMzY4MTcsMzkyNDEsNjM3NTMsMjAxNzAsMjI5MzUsMjU4MTAsMjYxMjksMjcyNzgsMjk3NDgsMzExMDUsMzExNjUsMzM0NDksMzQ5NDIsMzQ5NDMsMzUxNjcsNjM3NTQsMzc2NzAsMjAyMzUsMjE0NTAsMjQ2''@;'; put 'put ''MTMsMjUyMDEsMjc3NjIsMzIwMjYsMzIxMDIsMjAxMjAsMjA4MzQsMzA2ODQsMzI5NDMsMjAyMjUsMjAyMzgsMjA4NTQsMjA4NjQsMjE5ODAsMjIxMjAsMjIzMzEsMjI1MjIsMjI1MjQsMjI4MDQsMjI4NTUsMjI5MzEsMjM0OTIsMjM2OTYsMjM4MjIsMjQwNDksMjQxOTAsMjQ1MjQsMjUyMTYs''@;'; put 'put ''MjYwNzEsMjYwODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjYz''@;'; put 'put ''OTgsMjYzOTksMjY0NjIsMjY4MjcsMjY4MjAsMjcyMzEsMjc0NTAsMjc2ODMsMjc3NzMsMjc3NzgsMjgxMDMsMjk1OTIsMjk3MzQsMjk3MzgsMjk4MjYsMjk4NTksMzAwNzIsMzAwNzksMzA4NDksMzA5NTksMzEwNDEsMzEwNDcsMzEwNDgsMzEwOTgsMzE2MzcsMzJlMywzMjE4NiwzMjY0OCwz''@;'; put 'put ''Mjc3NCwzMjgxMywzMjkwOCwzNTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwzNzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0MiwyMTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkzMSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1''@;'; put 'put ''NywyNTI5NSwyNTM0Myw2Mzc1OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3MywyOTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywy''@;'; put 'put ''NTQ2NiwyMTMzNSw2Mzc3NywyNjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwyMDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwy''@;'; put 'put ''NDE4MCwyNTc1NCwzMTE3OCwyNDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywyMzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwyOTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2Mzgw''@;'; put 'put ''Myw2MzgwNCw2MzgwNSw2MzgwNiw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2MzgxMSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEyNiw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2''@;'; put 'put ''MzgyNSwyMzI3MywzNTM2NSwyNjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwyODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwyMjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwy''@;'; put 'put ''NzU3MywyODIzNywzMDcwMSwzMTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2MiwzNzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwyNTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDEx''@;'; put 'put ''MywzNTIwMywzNTUyNywzNTY3NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwyMjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwy''@;'; put 'put ''NDQ1MywyNTE0MCwyNTgyNSwyOTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwyMjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYy''@;'; put 'put ''MywyNjY5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3Mywy''@;'; put 'put ''NzMzMCwyODEyMCwyODE5MywyODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwzMTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwzNjk0NywzNzExNywzNzcwOSwzODUxOCwzODg3NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2''@;'; put 'put ''MywzMTE2NywzMTcxNiwzMjQxMSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEwOSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwyNDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwz''@;'; put 'put ''MDE0MCwzMDY0MywzMTQ2MSwzMzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywyNjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1NywyMzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMz''@;'; put 'put ''MSwzMTU2MSwzNDI3NiwzNTU4OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2MzgzNSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5NywzMzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2MzgzOCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIx''@;'; put 'put ''MSwzNDM0OSw0MDQ3OCwyMTA2OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQxNCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwyOTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwy''@;'; put 'put ''NDQ4MCwzMzgwMiwyMDkxOSwyNTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwyMDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwzNzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3''@;'; put 'put ''MCwzMTAxOCwzNDI2OCwzNDg1MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAzMCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1''@;'; put 'put ''NSwyNzkxNiwyODg3MiwzNTAxMCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgwNiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYxOCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwzNjg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwy''@;'; put 'put ''MDM2MywyODU4MywzMTE1MCwzNzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwyNTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5NiwzNjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYz''@;'; put 'put ''Niw0MDU3NSw0MDU5NSwzNTU0MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkwMywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwyNDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0Miwz''@;'; put 'put ''NDA0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcx''@;'; put 'put ''OSw0MDg0NSwyMjc0NCwyMzEwNSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYxMSwyNzA2MCwyNzk2OSwyODMxNiwyODY4NywyOTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwz''@;'; put 'put ''OTAwNiwyMDg0NSwyNTEzNCwzODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwzMjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywyMDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUx''@;'; put 'put ''OSwyMTc3NCwyMzY1MywyNDc0MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQzMiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAyMywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwzOTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwz''@;'; put 'put ''NjUyMiwzODU2Myw0MDAyMyw0MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1NiwzODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQzNSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwzMzE4MCwzMzcwNywzN2UzLDE5OTc1LDIxMzI1LDIzMDgxLDI0''@;'; put 'put ''MDE4LDI0Mzk4LDI0OTMwLDI1NDA1LDI2MjE3LDI2MzY0LDI4NDE1LDI4NDU5LDI4NzcxLDMwNjIyLDMzODM2LDM0MDY3LDM0ODc1LDM2NjI3LDM5MjM3LDM5OTk1LDIxNzg4LDI1MjczLDI2NDExLDI3ODE5LDMzNTQ1LDM1MTc4LDM4Nzc4LDIwMTI5LDIyOTE2LDI0NTM2LDI0NTM3LDI2Mzk1''@;'; put 'put ''LDMyMTc4LDMyNTk2LDMzNDI2LDMzNTc5LDMzNzI1LDM2NjM4LDM3MDE3LDIyNDc1LDIyOTY5LDIzMTg2LDIzNTA0LDI2MTUxLDI2NTIyLDI2NzU3LDI3NTk5LDI5MDI4LDMyNjI5LDM2MDIzLDM2MDY3LDM2OTkzLDM5NzQ5LDMzMDMyLDM1OTc4LDM4NDc2LDM5NDg4LDQwNjEzLDIzMzkxLDI3''@;'; put 'put ''NjY3LDI5NDY3LDMwNDUwLDMwNDMxLDMzODA0LDIwOTA2LDM1MjE5LDIwODEzLDIwODg1LDIxMTkzLDI2ODI1LDI3Nzk2LDMwNDY4LDMwNDk2LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjI5LDI4MzU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MDY1LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDI2MjY5LDI2OTE5LDI4MzE5LDMwMzk5LDMwNjA5LDMzNTU5LDMz''@;'; put 'put ''OTg2LDM0NzE5LDM3MjI1LDM3NTI4LDQwMTgwLDM0OTQ2LDIwMzk4LDIwODgyLDIxMjE1LDIyOTgyLDI0MTI1LDI0OTE3LDI1NzIwLDI1NzIxLDI2Mjg2LDI2NTc2LDI3MTY5LDI3NTk3LDI3NjExLDI5Mjc5LDI5MjgxLDI5NzYxLDMwNTIwLDMwNjgzLDMyNzkxLDMzNDY4LDMzNTQxLDM1NTg0''@;'; put 'put ''LDM1NjI0LDM1OTgwLDI2NDA4LDI3NzkyLDI5Mjg3LDMwNDQ2LDMwNTY2LDMxMzAyLDQwMzYxLDI3NTE5LDI3Nzk0LDIyODE4LDI2NDA2LDMzOTQ1LDIxMzU5LDIyNjc1LDIyOTM3LDI0Mjg3LDI1NTUxLDI2MTY0LDI2NDgzLDI4MjE4LDI5NDgzLDMxNDQ3LDMzNDk1LDM3NjcyLDIxMjA5LDI0''@;'; put 'put ''MDQzLDI1MDA2LDI1MDM1LDI1MDk4LDI1Mjg3LDI1NzcxLDI2MDgwLDI2OTY5LDI3NDk0LDI3NTk1LDI4OTYxLDI5Njg3LDMwMDQ1LDMyMzI2LDMzMzEwLDMzNTM4LDM0MTU0LDM1NDkxLDM2MDMxLDM4Njk1LDQwMjg5LDIyNjk2LDQwNjY0LDIwNDk3LDIxMDA2LDIxNTYzLDIxODM5LDI1OTkx''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3NzY2LDMyMDEwLDMy''@;'; put 'put ''MDExLDMyODYyLDM0NDQyLDM4MjcyLDM4NjM5LDIxMjQ3LDI3Nzk3LDI5Mjg5LDIxNjE5LDIzMTk0LDIzNjE0LDIzODgzLDI0Mzk2LDI0NDk0LDI2NDEwLDI2ODA2LDI2OTc5LDI4MjIwLDI4MjI4LDMwNDczLDMxODU5LDMyNjU0LDM0MTgzLDM1NTk4LDM2ODU1LDM4NzUzLDQwNjkyLDIzNzM1''@;'; put 'put ''LDI0NzU4LDI0ODQ1LDI1MDAzLDI1OTM1LDI2MTA3LDI2MTA4LDI3NjY1LDI3ODg3LDI5NTk5LDI5NjQxLDMyMjI1LDM4MjkyLDIzNDk0LDM0NTg4LDM1NjAwLDIxMDg1LDIxMzM4LDI1MjkzLDI1NjE1LDI1Nzc4LDI2NDIwLDI3MTkyLDI3ODUwLDI5NjMyLDI5ODU0LDMxNjM2LDMxODkzLDMy''@;'; put 'put ''MjgzLDMzMTYyLDMzMzM0LDM0MTgwLDM2ODQzLDM4NjQ5LDM5MzYxLDIwMjc2LDIxMzIyLDIxNDUzLDIxNDY3LDI1MjkyLDI1NjQ0LDI1ODU2LDI2MDAxLDI3MDc1LDI3ODg2LDI4NTA0LDI5Njc3LDMwMDM2LDMwMjQyLDMwNDM2LDMwNDYwLDMwOTI4LDMwOTcxLDMxMDIwLDMyMDcwLDMzMzI0''@;'; put 'put ''LDM0Nzg0LDM2ODIwLDM4OTMwLDM5MTUxLDIxMTg3LDI1MzAwLDI1NzY1LDI4MTk2LDI4NDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwMzMyLDM2Mjk5LDM3Mjk3LDM3NDc0LDM5NjYyLDM5NzQ3LDIwNTE1LDIwNjIxLDIyMzQ2LDIyOTUyLDIzNTkyLDI0MTM1LDI0NDM5LDI1MTUxLDI1OTE4LDI2MDQxLDI2MDQ5LDI2MTIxLDI2NTA3LDI3MDM2LDI4MzU0''@;'; put 'put ''LDMwOTE3LDMyMDMzLDMyOTM4LDMzMTUyLDMzMzIzLDMzNDU5LDMzOTUzLDM0NDQ0LDM1MzcwLDM1NjA3LDM3MDMwLDM4NDUwLDQwODQ4LDIwNDkzLDIwNDY3LDYzODQzLDIyNTIxLDI0NDcyLDI1MzA4LDI1NDkwLDI2NDc5LDI4MjI3LDI4OTUzLDMwNDAzLDMyOTcyLDMyOTg2LDM1MDYwLDM1''@;'; put 'put ''MDYxLDM1MDk3LDM2MDY0LDM2NjQ5LDM3MTk3LDM4NTA2LDIwMjcxLDIwMzM2LDI0MDkxLDI2NTc1LDI2NjU4LDMwMzMzLDMwMzM0LDM5NzQ4LDI0MTYxLDI3MTQ2LDI5MDMzLDI5MTQwLDMwMDU4LDYzODQ0LDMyMzIxLDM0MTE1LDM0MjgxLDM5MTMyLDIwMjQwLDMxNTY3LDMyNjI0LDM4MzA5''@;'; put 'put ''LDIwOTYxLDI0MDcwLDI2ODA1LDI3NzEwLDI3NzI2LDI3ODY3LDI5MzU5LDMxNjg0LDMzNTM5LDI3ODYxLDI5NzU0LDIwNzMxLDIxMTI4LDIyNzIxLDI1ODE2LDI3Mjg3LDI5ODYzLDMwMjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwODg3LDM0MzI3LDM4MzcwLDM4NzEzLDYzODQ1LDIxMzQyLDI0MzIxLDM1NzIyLDM2Nzc2LDM2NzgzLDM3MDAyLDIxMDI5''@;'; put 'put ''LDMwNjI5LDQwMDA5LDQwNzEyLDE5OTkzLDIwNDgyLDIwODUzLDIzNjQzLDI0MTgzLDI2MTQyLDI2MTcwLDI2NTY0LDI2ODIxLDI4ODUxLDI5OTUzLDMwMTQ5LDMxMTc3LDMxNDUzLDM2NjQ3LDM5MjAwLDM5NDMyLDIwNDQ1LDIyNTYxLDIyNTc3LDIzNTQyLDI2MjIyLDI3NDkzLDI3OTIxLDI4''@;'; put 'put ''MjgyLDI4NTQxLDI5NjY4LDI5OTk1LDMzNzY5LDM1MDM2LDM1MDkxLDM1Njc2LDM2NjI4LDIwMjM5LDIwNjkzLDIxMjY0LDIxMzQwLDIzNDQzLDI0NDg5LDI2MzgxLDMxMTE5LDMzMTQ1LDMzNTgzLDM0MDY4LDM1MDc5LDM1MjA2LDM2NjY1LDM2NjY3LDM5MzMzLDM5OTU0LDI2NDEyLDIwMDg2''@;'; put 'put ''LDIwNDcyLDIyODU3LDIzNTUzLDIzNzkxLDIzNzkyLDI1NDQ3LDI2ODM0LDI4OTI1LDI5MDkwLDI5NzM5LDMyMjk5LDM0MDI4LDM0NTYyLDM2ODk4LDM3NTg2LDQwMTc5LDE5OTgxLDIwMTg0LDIwNDYzLDIwNjEzLDIxMDc4LDIxMTAzLDIxNTQyLDIxNjQ4LDIyNDk2LDIyODI3LDIzMTQyLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMzg2LDIzNDEzLDIzNTAw''@;'; put 'put ''LDI0MjIwLDYzODQ2LDI1MjA2LDI1OTc1LDI2MDIzLDI4MDE0LDI4MzI1LDI5MjM4LDMxNTI2LDMxODA3LDMyNTY2LDMzMTA0LDMzMTA1LDMzMTc4LDMzMzQ0LDMzNDMzLDMzNzA1LDM1MzMxLDM2ZTMsMzYwNzAsMzYwOTEsMzYyMTIsMzYyODIsMzcwOTYsMzczNDAsMzg0MjgsMzg0NjgsMzkz''@;'; put 'put ''ODUsNDAxNjcsMjEyNzEsMjA5OTgsMjE1NDUsMjIxMzIsMjI3MDcsMjI4NjgsMjI4OTQsMjQ1NzUsMjQ5OTYsMjUxOTgsMjYxMjgsMjc3NzQsMjg5NTQsMzA0MDYsMzE4ODEsMzE5NjYsMzIwMjcsMzM0NTIsMzYwMzMsMzg2NDAsNjM4NDcsMjAzMTUsMjQzNDMsMjQ0NDcsMjUyODIsMjM4NDks''@;'; put 'put ''MjYzNzksMjY4NDIsMzA4NDQsMzIzMjMsNDAzMDAsMTk5ODksMjA2MzMsMjEyNjksMjEyOTAsMjEzMjksMjI5MTUsMjMxMzgsMjQxOTksMjQ3NTQsMjQ5NzAsMjUxNjEsMjUyMDksMjZlMywyNjUwMywyNzA0NywyNzYwNCwyNzYwNiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIw''@;'; put 'put ''MiwzMDczOCwzMDg2NSwzMTE4OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwzMzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3''@;'; put 'put ''NywyOTYxMywzNjAwNywzNjA1MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQyNSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDczNSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4NywyMjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0Niwy''@;'; put 'put ''MzU1NiwyNDA1MSwyNDEwNywyNDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwyNjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwzMDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3''@;'; put 'put ''OCwzNDAwMSwzNDUwMywzNTAzOSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwyMzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4''@;'; put 'put ''NywyNTc0NiwyNzU3OCwyOTAyMiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwyMTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwy''@;'; put 'put ''NDIwMiwyNDIyNCwyNDI1OCwyNDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwyOTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0MywzNTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5''@;'; put 'put ''NCwyOTI5OCwyOTk4MywyOTk4OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMyOSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwyOTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5''@;'; put 'put ''OSwzNTQ3NSwzNjg5MywzNzYwNCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEwOSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwyMDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwy''@;'; put 'put ''NTk4MiwyNjA1OSwyODIxMCwyOTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4NywzMDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwzNDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUyMSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2''@;'; put 'put ''NCwyNzg0NCwyNzk0NSwyODIwMywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwy''@;'; put 'put ''NTEwNCwyNjE0MywyNjIwNywyOTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEyNSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2MywyMjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1Miwy''@;'; put 'put ''NTQ3NSwyNTYyMCwyNjE1NywyNjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywyODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4NywzMjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMxMSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkw''@;'; put 'put ''MiwzOTQ3OSwyMDQzOSwyMzY2MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYwNiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwzNTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1Niwy''@;'; put 'put ''ODc1MywzMDg2MiwzNzc4MiwzNDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywyMjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5MywyNzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywy''@;'; put 'put ''OTU2MCwyOTcwMywyOTg3NCwzMDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2NiwzMTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwzNDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUz''@;'; put 'put ''OSwzODU2NywzODU2OCwzODYxNCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcwNiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcyOSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywyNDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwy''@;'; put 'put ''NzIxOSwyNzUyOSwyNzk1NywyODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwzMjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwzNzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwy''@;'; put 'put ''ODYyOSwyNTM0MiwzMjcyMiwzNTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwyMTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3MywyMjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYzMCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1''@;'; put 'put ''OSwyNjE3OCwyNjU1OCwyNjYxMiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUwOCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5MywyNzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3Miwz''@;'; put 'put ''NjYwNiwzOTEzNSwzOTE2NiwyMDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3MiwyMzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwzMzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgz''@;'; put 'put ''MywyMzQ2MCwyMzUyNiwyNDcxMywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4MywyOTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwyMDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkw''@;'; put 'put ''NSwzNTM1NywzODQ2MywzODU5NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzczMSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcxNiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywyMzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5Mywz''@;'; put 'put ''ODc5NywzODk5NiwzOTgzOSwyNjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywyMzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3NiwyOTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5''@;'; put 'put ''NiwyMjQ2NywyMzgzMCwyNDg1OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgxMiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2''@;'; put 'put ''MCwzNzMyNiwyNDM2OSw2Mzg2MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwz''@;'; put 'put ''MDE2MiwzMDIyMSwzMTE1NSwzMTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwyODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3''@;'; put 'put ''NywzMzIyMiwyMDU0NywyMjU3NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQyMCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3''@;'; put 'put ''NywzMDk5OCw2Mzg3NywzMzI4NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEzMSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3NywzNTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2Nywy''@;'; put 'put ''MzAzMiwyMzA3MSwyMzQ3Niw2Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwyNTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5''@;'; put 'put ''MywzMTYwNSwzMjIyNyw2Mzg5NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcwOSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwy''@;'; put 'put ''NjU3OSw2MzkwOSwyODgxNCwyODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2MzkxNSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwyNjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwy''@;'; put 'put ''ODQ4MSwyODYzNCwyODY5OSwyODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywyOTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwzNTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2MzkyMiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2Mzky''@;'; put 'put ''NSwyMWUzLDIxNDczLDI2MzU1LDI3NzU3LDI4NjE4LDI5NDUwLDMwNTkxLDMxMzMwLDMzNDU0LDM0MjY5LDM0MzA2LDYzOTI2LDM1MDI4LDM1NDI3LDM1NzA5LDM1OTQ3LDYzOTI3LDM3NTU1LDYzOTI4LDM4Njc1LDM4OTI4LDIwMTE2LDIwMjM3LDIwNDI1LDIwNjU4LDIxMzIwLDIxNTY2LDIx''@;'; put 'put ''NTU1LDIxOTc4LDIyNjI2LDIyNzE0LDIyODg3LDIzMDY3LDIzNTI0LDI0NzM1LDYzOTI5LDI1MDM0LDI1OTQyLDI2MTExLDI2MjEyLDI2NzkxLDI3NzM4LDI4NTk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4ODc5LDI5MTAwLDI5NTIyLDMxNjEzLDM0NTY4LDM1NDkyLDM5OTg2LDQwNzExLDIzNjI3LDI3Nzc5LDI5NTA4LDI5NTc3LDM3NDM0LDI4MzMxLDI5''@;'; put 'put ''Nzk3LDMwMjM5LDMxMzM3LDMyMjc3LDM0MzE0LDIwODAwLDIyNzI1LDI1NzkzLDI5OTM0LDI5OTczLDMwMzIwLDMyNzA1LDM3MDEzLDM4NjA1LDM5MjUyLDI4MTk4LDI5OTI2LDMxNDAxLDMxNDAyLDMzMjUzLDM0NTIxLDM0NjgwLDM1MzU1LDIzMTEzLDIzNDM2LDIzNDUxLDI2Nzg1LDI2ODgw''@;'; put 'put ''LDI4MDAzLDI5NjA5LDI5NzE1LDI5NzQwLDMwODcxLDMyMjMzLDMyNzQ3LDMzMDQ4LDMzMTA5LDMzNjk0LDM1OTE2LDM4NDQ2LDM4OTI5LDI2MzUyLDI0NDQ4LDI2MTA2LDI2NTA1LDI3NzU0LDI5NTc5LDIwNTI1LDIzMDQzLDI3NDk4LDMwNzAyLDIyODA2LDIzOTE2LDI0MDEzLDI5NDc3LDMw''@;'; put 'put ''MDMxLDYzOTMwLDYzOTMxLDIwNzA5LDIwOTg1LDIyNTc1LDIyODI5LDIyOTM0LDIzMDAyLDIzNTI1LDYzOTMyLDYzOTMzLDIzOTcwLDI1MzAzLDI1NjIyLDI1NzQ3LDI1ODU0LDYzOTM0LDI2MzMyLDYzOTM1LDI3MjA4LDYzOTM2LDI5MTgzLDI5Nzk2LDYzOTM3LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMzY4LDMxNDA3LDMyMzI3LDMyMzUwLDMyNzY4LDMz''@;'; put 'put ''MTM2LDYzOTM4LDM0Nzk5LDM1MjAxLDM1NjE2LDM2OTUzLDYzOTM5LDM2OTkyLDM5MjUwLDI0OTU4LDI3NDQyLDI4MDIwLDMyMjg3LDM1MTA5LDM2Nzg1LDIwNDMzLDIwNjUzLDIwODg3LDIxMTkxLDIyNDcxLDIyNjY1LDIzNDgxLDI0MjQ4LDI0ODk4LDI3MDI5LDI4MDQ0LDI4MjYzLDI4MzQy''@;'; put 'put ''LDI5MDc2LDI5Nzk0LDI5OTkyLDI5OTk2LDMyODgzLDMzNTkyLDMzOTkzLDM2MzYyLDM3NzgwLDM3ODU0LDYzOTQwLDIwMTEwLDIwMzA1LDIwNTk4LDIwNzc4LDIxNDQ4LDIxNDUxLDIxNDkxLDIzNDMxLDIzNTA3LDIzNTg4LDI0ODU4LDI0OTYyLDI2MTAwLDI5Mjc1LDI5NTkxLDI5NzYwLDMw''@;'; put 'put ''NDAyLDMxMDU2LDMxMTIxLDMxMTYxLDMyMDA2LDMyNzAxLDMzNDE5LDM0MjYxLDM0Mzk4LDM2ODAyLDM2OTM1LDM3MTA5LDM3MzU0LDM4NTMzLDM4NjMyLDM4NjMzLDIxMjA2LDI0NDIzLDI2MDkzLDI2MTYxLDI2NjcxLDI5MDIwLDMxMjg2LDM3MDU3LDM4OTIyLDIwMTEzLDYzOTQxLDI3MjE4''@;'; put 'put ''LDI3NTUwLDI4NTYwLDI5MDY1LDMyNzkyLDMzNDY0LDM0MTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTM5LDM4NTQ5LDM4NjQyLDM4OTA3LDM0MDc0LDM5NzI5LDIwMTEyLDI5MDY2LDM4NTk2LDIwODAzLDIxNDA3LDIxNzI5LDIyMjkxLDIyMjkwLDIyNDM1LDIzMTk1LDIzMjM2LDIzNDkxLDI0NjE2LDI0ODk1LDI1NTg4LDI3NzgxLDI3OTYxLDI4Mjc0''@;'; put 'put ''LDI4MzA0LDI5MjMyLDI5NTAzLDI5NzgzLDMzNDg5LDM0OTQ1LDM2Njc3LDM2OTYwLDYzOTQyLDM4NDk4LDM5ZTMsNDAyMTksMjYzNzYsMzYyMzQsMzc0NzAsMjAzMDEsMjA1NTMsMjA3MDIsMjEzNjEsMjIyODUsMjI5OTYsMjMwNDEsMjM1NjEsMjQ5NDQsMjYyNTYsMjgyMDUsMjkyMzQsMjk3''@;'; put 'put ''NzEsMzIyMzksMzI5NjMsMzM4MDYsMzM4OTQsMzQxMTEsMzQ2NTUsMzQ5MDcsMzUwOTYsMzU1ODYsMzY5NDksMzg4NTksMzk3NTksMjAwODMsMjAzNjksMjA3NTQsMjA4NDIsNjM5NDMsMjE4MDcsMjE5MjksMjM0MTgsMjM0NjEsMjQxODgsMjQxODksMjQyNTQsMjQ3MzYsMjQ3OTksMjQ4NDAs''@;'; put 'put ''MjQ4NDEsMjU1NDAsMjU5MTIsMjYzNzcsNjM5NDQsMjY1ODAsMjY1ODYsNjM5NDUsMjY5NzcsMjY5NzgsMjc4MzMsMjc5NDMsNjM5NDYsMjgyMTYsNjM5NDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg2NDEsMjk0OTQsMjk0OTUsNjM5NDgsMjk3ODgsMzAwMDEsNjM5NDksMzAyOTAsNjM5NTAsNjM5NTEsMzIxNzMsMzMyNzgsMzM4NDgsMzUwMjksMzU0ODAs''@;'; put 'put ''MzU1NDcsMzU1NjUsMzY0MDAsMzY0MTgsMzY5MzgsMzY5MjYsMzY5ODYsMzcxOTMsMzczMjEsMzc3NDIsNjM5NTIsNjM5NTMsMjI1MzcsNjM5NTQsMjc2MDMsMzI5MDUsMzI5NDYsNjM5NTUsNjM5NTYsMjA4MDEsMjI4OTEsMjM2MDksNjM5NTcsNjM5NTgsMjg1MTYsMjk2MDcsMzI5OTYsMzYx''@;'; put 'put ''MDMsNjM5NTksMzczOTksMzgyODcsNjM5NjAsNjM5NjEsNjM5NjIsNjM5NjMsMzI4OTUsMjUxMDIsMjg3MDAsMzIxMDQsMzQ3MDEsNjM5NjQsMjI0MzIsMjQ2ODEsMjQ5MDMsMjc1NzUsMzU1MTgsMzc1MDQsMzg1NzcsMjAwNTcsMjE1MzUsMjgxMzksMzQwOTMsMzg1MTIsMzg4OTksMzkxNTAs''@;'; put 'put ''MjU1NTgsMjc4NzUsMzcwMDksMjA5NTcsMjUwMzMsMzMyMTAsNDA0NDEsMjAzODEsMjA1MDYsMjA3MzYsMjM0NTIsMjQ4NDcsMjUwODcsMjU4MzYsMjY4ODUsMjc1ODksMzAwOTcsMzA2OTEsMzI2ODEsMzMzODAsMzQxOTEsMzQ4MTEsMzQ5MTUsMzU1MTYsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzU2OTYsMzcyOTEsMjAxMDgsMjAxOTcsMjAyMzQsNjM5NjUs''@;'; put 'put ''NjM5NjYsMjI4MzksMjMwMTYsNjM5NjcsMjQwNTAsMjQzNDcsMjQ0MTEsMjQ2MDksNjM5NjgsNjM5NjksNjM5NzAsNjM5NzEsMjkyNDYsMjk2NjksNjM5NzIsMzAwNjQsMzAxNTcsNjM5NzMsMzEyMjcsNjM5NzQsMzI3ODAsMzI4MTksMzI5MDAsMzM1MDUsMzM2MTcsNjM5NzUsNjM5NzYsMzYw''@;'; put 'put ''MjksMzYwMTksMzY5OTksNjM5NzcsNjM5NzgsMzkxNTYsMzkxODAsNjM5NzksNjM5ODAsMjg3MjcsMzA0MTAsMzI3MTQsMzI3MTYsMzI3NjQsMzU2MTAsMjAxNTQsMjAxNjEsMjA5OTUsMjEzNjAsNjM5ODEsMjE2OTMsMjIyNDAsMjMwMzUsMjM0OTMsMjQzNDEsMjQ1MjUsMjgyNzAsNjM5ODIs''@;'; put 'put ''NjM5ODMsMzIxMDYsMzM1ODksNjM5ODQsMzQ0NTEsMzU0NjksNjM5ODUsMzg3NjUsMzg3NzUsNjM5ODYsNjM5ODcsMTk5NjgsMjAzMTQsMjAzNTAsMjI3NzcsMjYwODUsMjgzMjIsMzY5MjAsMzc4MDgsMzkzNTMsMjAyMTksMjI3NjQsMjI5MjIsMjMwMDEsMjQ2NDEsNjM5ODgsNjM5ODksMzEy''@;'; put 'put ''NTIsNjM5OTAsMzM2MTUsMzYwMzUsMjA4MzcsMjEzMTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNjM5OTEsNjM5OTIsNjM5OTMsMjAxNzMsMjEwOTcsMjMzODEsMzM0NzEsMjAxODAsMjEwNTAsMjE2NzIsMjI5ODUsMjMwMzksMjMzNzYsMjMzODMsMjMzODgsMjQ2NzUsMjQ5MDQsMjgzNjMsMjg4MjUsMjkwMzgsMjk1NzQsMjk5NDMsMzAxMzMsMzA5MTMsMzIw''@;'; put 'put ''NDMsMzI3NzMsMzMyNTgsMzM1NzYsMzQwNzEsMzQyNDksMzU1NjYsMzYwMzksMzg2MDQsMjAzMTYsMjEyNDIsMjIyMDQsMjYwMjcsMjYxNTIsMjg3OTYsMjg4NTYsMjkyMzcsMzIxODksMzM0MjEsMzcxOTYsMzg1OTIsNDAzMDYsMjM0MDksMjY4NTUsMjc1NDQsMjg1MzgsMzA0MzAsMjM2OTcs''@;'; put 'put ''MjYyODMsMjg1MDcsMzE2NjgsMzE3ODYsMzQ4NzAsMzg2MjAsMTk5NzYsMjAxODMsMjEyODAsMjI1ODAsMjI3MTUsMjI3NjcsMjI4OTIsMjM1NTksMjQxMTUsMjQxOTYsMjQzNzMsMjU0ODQsMjYyOTAsMjY0NTQsMjcxNjcsMjcyOTksMjc0MDQsMjg0NzksMjkyNTQsNjM5OTQsMjk1MjAsMjk4''@;'; put 'put ''MzUsMzE0NTYsMzE5MTEsMzMxNDQsMzMyNDcsMzMyNTUsMzM2NzQsMzM5MDAsMzQwODMsMzQxOTYsMzQyNTUsMzUwMzcsMzYxMTUsMzcyOTIsMzgyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg1NTYsMjA4NzcsMjE3MDUsMjIzMTIsMjM0NzIsMjUxNjUsMjY0NDgsMjY2ODUsMjY3NzEsMjgyMjEsMjgzNzEsMjg3OTcsMzIyODksMzUwMDksMzYwMDEsMzY2''@;'; put 'put ''MTcsNDA3NzksNDA3ODIsMjkyMjksMzE2MzEsMzU1MzMsMzc2NTgsMjAyOTUsMjAzMDIsMjA3ODYsMjE2MzIsMjI5OTIsMjQyMTMsMjUyNjksMjY0ODUsMjY5OTAsMjcxNTksMjc4MjIsMjgxODYsMjk0MDEsMjk0ODIsMzAxNDEsMzE2NzIsMzIwNTMsMzM1MTEsMzM3ODUsMzM4NzksMzQyOTUs''@;'; put 'put ''MzU0MTksMzYwMTUsMzY0ODcsMzY4ODksMzcwNDgsMzg2MDYsNDA3OTksMjEyMTksMjE1MTQsMjMyNjUsMjM0OTAsMjU2ODgsMjU5NzMsMjg0MDQsMjkzODAsNjM5OTUsMzAzNDAsMzEzMDksMzE1MTUsMzE4MjEsMzIzMTgsMzI3MzUsMzM2NTksMzU2MjcsMzYwNDIsMzYxOTYsMzYzMjEsMzY0''@;'; put 'put ''NDcsMzY4NDIsMzY4NTcsMzY5NjksMzc4NDEsMjAyOTEsMjAzNDYsMjA2NTksMjA4NDAsMjA4NTYsMjEwNjksMjEwOTgsMjI2MjUsMjI2NTIsMjI4ODAsMjM1NjAsMjM2MzcsMjQyODMsMjQ3MzEsMjUxMzYsMjY2NDMsMjc1ODMsMjc2NTYsMjg1OTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkwMDYsMjk3MjgsM2U0LDMwMDA4LDMwMDMzLDMwMzIyLDMxNTY0''@;'; put 'put ''LDMxNjI3LDMxNjYxLDMxNjg2LDMyMzk5LDM1NDM4LDM2NjcwLDM2NjgxLDM3NDM5LDM3NTIzLDM3NjY2LDM3OTMxLDM4NjUxLDM5MDAyLDM5MDE5LDM5MTk4LDIwOTk5LDI1MTMwLDI1MjQwLDI3OTkzLDMwMzA4LDMxNDM0LDMxNjgwLDMyMTE4LDIxMzQ0LDIzNzQyLDI0MjE1LDI4NDcyLDI4''@;'; put 'put ''ODU3LDMxODk2LDM4NjczLDM5ODIyLDQwNjcwLDI1NTA5LDI1NzIyLDM0Njc4LDE5OTY5LDIwMTE3LDIwMTQxLDIwNTcyLDIwNTk3LDIxNTc2LDIyOTc5LDIzNDUwLDI0MTI4LDI0MjM3LDI0MzExLDI0NDQ5LDI0NzczLDI1NDAyLDI1OTE5LDI1OTcyLDI2MDYwLDI2MjMwLDI2MjMyLDI2NjIy''@;'; put 'put ''LDI2OTg0LDI3MjczLDI3NDkxLDI3NzEyLDI4MDk2LDI4MTM2LDI4MTkxLDI4MjU0LDI4NzAyLDI4ODMzLDI5NTgyLDI5NjkzLDMwMDEwLDMwNTU1LDMwODU1LDMxMTE4LDMxMjQzLDMxMzU3LDMxOTM0LDMyMTQyLDMzMzUxLDM1MzMwLDM1NTYyLDM1OTk4LDM3MTY1LDM3MTk0LDM3MzM2LDM3''@;'; put 'put ''NDc4LDM3NTgwLDM3NjY0LDM4NjYyLDM4NzQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDM4NzQ4LDM4OTE0LDQwNzE4LDIxMDQ2LDIxMTM3LDIxODg0LDIyNTY0LDI0MDkzLDI0MzUxLDI0NzE2LDI1NTUyLDI2Nzk5LDI4NjM5LDMxMDg1LDMxNTMyLDMzMjI5LDM0MjM0LDM1MDY5LDM1NTc2LDM2NDIwLDM3MjYxLDM4NTAwLDM4NTU1LDM4NzE3LDM4OTg4LDQw''@;'; put 'put ''Nzc4LDIwNDMwLDIwODA2LDIwOTM5LDIxMTYxLDIyMDY2LDI0MzQwLDI0NDI3LDI1NTE0LDI1ODA1LDI2MDg5LDI2MTc3LDI2MzYyLDI2MzYxLDI2Mzk3LDI2NzgxLDI2ODM5LDI3MTMzLDI4NDM3LDI4NTI2LDI5MDMxLDI5MTU3LDI5MjI2LDI5ODY2LDMwNTIyLDMxMDYyLDMxMDY2LDMxMTk5''@;'; put 'put ''LDMxMjY0LDMxMzgxLDMxODk1LDMxOTY3LDMyMDY4LDMyMzY4LDMyOTAzLDM0Mjk5LDM0NDY4LDM1NDEyLDM1NTE5LDM2MjQ5LDM2NDgxLDM2ODk2LDM2OTczLDM3MzQ3LDM4NDU5LDM4NjEzLDQwMTY1LDI2MDYzLDMxNzUxLDM2Mjc1LDM3ODI3LDIzMzg0LDIzNTYyLDIxMzMwLDI1MzA1LDI5''@;'; put 'put ''NDY5LDIwNTE5LDIzNDQ3LDI0NDc4LDI0NzUyLDI0OTM5LDI2ODM3LDI4MTIxLDI5NzQyLDMxMjc4LDMyMDY2LDMyMTU2LDMyMzA1LDMzMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2Mzk0LDM2NDA1LDM3NzU4LDM3OTEyLDIwMzA0LDIyMzUyLDI0MDM4LDI0MjMxLDI1Mzg3LDMyNjE4LDIwMDI3LDIwMzAzLDIwMzY3LDIwNTcwLDIzMDA1LDMyOTY0LDIx''@;'; put 'put ''NjEwLDIxNjA4LDIyMDE0LDIyODYzLDIzNDQ5LDI0MDMwLDI0MjgyLDI2MjA1LDI2NDE3LDI2NjA5LDI2NjY2LDI3ODgwLDI3OTU0LDI4MjM0LDI4NTU3LDI4ODU1LDI5NjY0LDMwMDg3LDMxODIwLDMyMDAyLDMyMDQ0LDMyMTYyLDMzMzExLDM0NTIzLDM1Mzg3LDM1NDYxLDM2MjA4LDM2NDkw''@;'; put 'put ''LDM2NjU5LDM2OTEzLDM3MTk4LDM3MjAyLDM3OTU2LDM5Mzc2LDMxNDgxLDMxOTA5LDIwNDI2LDIwNzM3LDIwOTM0LDIyNDcyLDIzNTM1LDIzODAzLDI2MjAxLDI3MTk3LDI3OTk0LDI4MzEwLDI4NjUyLDI4OTQwLDMwMDYzLDMxNDU5LDM0ODUwLDM2ODk3LDM2OTgxLDM4NjAzLDM5NDIzLDMz''@;'; put 'put ''NTM3LDIwMDEzLDIwMjEwLDM0ODg2LDM3MzI1LDIxMzczLDI3MzU1LDI2OTg3LDI3NzEzLDMzOTE0LDIyNjg2LDI0OTc0LDI2MzY2LDI1MzI3LDI4ODkzLDI5OTY5LDMwMTUxLDMyMzM4LDMzOTc2LDM1NjU3LDM2MTA0LDIwMDQzLDIxNDgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjc1LDIyMzIwLDIyMzM2LDI0NTM1LDI1MzQ1LDI1MzUxLDI1NzExLDI1''@;'; put 'put ''OTAzLDI2MDg4LDI2MjM0LDI2NTI1LDI2NTQ3LDI3NDkwLDI3NzQ0LDI3ODAyLDI4NDYwLDMwNjkzLDMwNzU3LDMxMDQ5LDMxMDYzLDMyMDI1LDMyOTMwLDMzMDI2LDMzMjY3LDMzNDM3LDMzNDYzLDM0NTg0LDM1NDY4LDYzOTk2LDM2MTAwLDM2Mjg2LDM2OTc4LDMwNDUyLDMxMjU3LDMxMjg3''@;'; put 'put ''LDMyMzQwLDMyODg3LDIxNzY3LDIxOTcyLDIyNjQ1LDI1MzkxLDI1NjM0LDI2MTg1LDI2MTg3LDI2NzMzLDI3MDM1LDI3NTI0LDI3OTQxLDI4MzM3LDI5NjQ1LDI5ODAwLDI5ODU3LDMwMDQzLDMwMTM3LDMwNDMzLDMwNDk0LDMwNjAzLDMxMjA2LDMyMjY1LDMyMjg1LDMzMjc1LDM0MDk1LDM0''@;'; put 'put ''OTY3LDM1Mzg2LDM2MDQ5LDM2NTg3LDM2Nzg0LDM2OTE0LDM3ODA1LDM4NDk5LDM4NTE1LDM4NjYzLDIwMzU2LDIxNDg5LDIzMDE4LDIzMjQxLDI0MDg5LDI2NzAyLDI5ODk0LDMwMTQyLDMxMjA5LDMxMzc4LDMzMTg3LDM0NTQxLDM2MDc0LDM2MzAwLDM2ODQ1LDI2MDE1LDI2Mzg5LDYzOTk3''@;'; put 'put ''LDIyNTE5LDI4NTAzLDMyMjIxLDM2NjU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDM3ODc4LDM4NTk4LDI0NTAxLDI1MDc0LDI4NTQ4LDE5OTg4LDIwMzc2LDIwNTExLDIxNDQ5LDIxOTgzLDIzOTE5LDI0MDQ2LDI3NDI1LDI3NDkyLDMwOTIzLDMxNjQyLDYzOTk4LDM2NDI1LDM2NTU0LDM2OTc0LDI1NDE3LDI1NjYyLDMwNTI4LDMxMzY0LDM3Njc5LDM4MDE1''@;'; put 'put ''LDQwODEwLDI1Nzc2LDI4NTkxLDI5MTU4LDI5ODY0LDI5OTE0LDMxNDI4LDMxNzYyLDMyMzg2LDMxOTIyLDMyNDA4LDM1NzM4LDM2MTA2LDM4MDEzLDM5MTg0LDM5MjQ0LDIxMDQ5LDIzNTE5LDI1ODMwLDI2NDEzLDMyMDQ2LDIwNzE3LDIxNDQzLDIyNjQ5LDI0OTIwLDI0OTIxLDI1MDgyLDI2''@;'; put 'put ''MDI4LDMxNDQ5LDM1NzMwLDM1NzM0LDIwNDg5LDIwNTEzLDIxMTA5LDIxODA5LDIzMTAwLDI0Mjg4LDI0NDMyLDI0ODg0LDI1OTUwLDI2MTI0LDI2MTY2LDI2Mjc0LDI3MDg1LDI4MzU2LDI4NDY2LDI5NDYyLDMwMjQxLDMxMzc5LDMzMDgxLDMzMzY5LDMzNzUwLDMzOTgwLDIwNjYxLDIyNTEy''@;'; put 'put ''LDIzNDg4LDIzNTI4LDI0NDI1LDI1NTA1LDMwNzU4LDMyMTgxLDMzNzU2LDM0MDgxLDM3MzE5LDM3MzY1LDIwODc0LDI2NjEzLDMxNTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MDEyLDIwOTMyLDIyOTcxLDI0NzY1LDM0Mzg5LDIwNTA4LDYzOTk5LDIxMDc2LDIzNjEwLDI0OTU3LDI1MTE0LDI1Mjk5LDI1ODQyLDI2MDIxLDI4MzY0LDMwMjQwLDMzMDM0''@;'; put 'put ''LDM2NDQ4LDM4NDk1LDM4NTg3LDIwMTkxLDIxMzE1LDIxOTEyLDIyODI1LDI0MDI5LDI1Nzk3LDI3ODQ5LDI4MTU0LDI5NTg4LDMxMzU5LDMzMzA3LDM0MjE0LDM2MDY4LDM2MzY4LDM2OTgzLDM3MzUxLDM4MzY5LDM4NDMzLDM4ODU0LDIwOTg0LDIxNzQ2LDIxODk0LDI0NTA1LDI1NzY0LDI4''@;'; put 'put ''NTUyLDMyMTgwLDM2NjM5LDM2Njg1LDM3OTQxLDIwNjgxLDIzNTc0LDI3ODM4LDI4MTU1LDI5OTc5LDMwNjUxLDMxODA1LDMxODQ0LDM1NDQ5LDM1NTIyLDIyNTU4LDIyOTc0LDI0MDg2LDI1NDYzLDI5MjY2LDMwMDkwLDMwNTcxLDM1NTQ4LDM2MDI4LDM2NjI2LDI0MzA3LDI2MjI4LDI4MTUy''@;'; put 'put ''LDMyODkzLDMzNzI5LDM1NTMxLDM4NzM3LDM5ODk0LDY0ZTMsMjEwNTksMjYzNjcsMjgwNTMsMjgzOTksMzIyMjQsMzU1NTgsMzY5MTAsMzY5NTgsMzk2MzYsMjEwMjEsMjExMTksMjE3MzYsMjQ5ODAsMjUyMjAsMjUzMDcsMjY3ODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4OTgsMjY5NzAsMjcxODksMjg4MTgsMjg5NjYsMzA4MTMsMzA5NzcsMzA5OTAs''@;'; put 'put ''MzExODYsMzEyNDUsMzI5MTgsMzM0MDAsMzM0OTMsMzM2MDksMzQxMjEsMzU5NzAsMzYyMjksMzcyMTgsMzcyNTksMzcyOTQsMjA0MTksMjIyMjUsMjkxNjUsMzA2NzksMzQ1NjAsMzUzMjAsMjM1NDQsMjQ1MzQsMjY0NDksMzcwMzIsMjE0NzQsMjI2MTgsMjM1NDEsMjQ3NDAsMjQ5NjEsMjU2''@;'; put 'put ''OTYsMzIzMTcsMzI4ODAsMzQwODUsMzc1MDcsMjU3NzQsMjA2NTIsMjM4MjgsMjYzNjgsMjI2ODQsMjUyNzcsMjU1MTIsMjY4OTQsMjdlMywyNzE2NiwyODI2NywzMDM5NCwzMTE3OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwzNjg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1Niwz''@;'; put 'put ''Nzc4NiwzODYxOSwzOTQ3OCwzOTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4MiwzMTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwyNjk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkz''@;'; put 'put ''NSwyNDc1NiwzMzIwNSwzMzc5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCwzNjEwMSwyMTQ2MiwyMTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwzMjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5NiwyMDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3''@;'; put 'put ''NywyNjc3MiwyNzgzNSwyODEwMCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwzNTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwy''@;'; put 'put ''NjUxNywyNzc4NCwyODAyNCwyOTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1NiwzMTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwyNTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMzMywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgy''@;'; put 'put ''OCwyMjM5Niw2NDAwMSwyNTE3Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYwOSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwyODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYx''@;'; put 'put ''MiwyNTY0NSwyNzA2NywyMzQ0NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgxMiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwy''@;'; put 'put ''MTUyMCwyMjMwMywzNTM0MiwyNDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwzMjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwyMjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcyMiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1''@;'; put 'put ''MiwyNTIyNiwyNTc3MywyNTg1MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgw''@;'; put 'put ''MywyODAzMSwyOTI2MCwyOTQzNywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIzMiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwzNjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywy''@;'; put 'put ''MTUzNiwyMzMxOCwyNDE2MywyNDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwzODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwyNDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQyOSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5''@;'; put 'put ''MCwzMzA3MSwzMzUwMiwzMzg4OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYxMCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwyNzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwz''@;'; put 'put ''OTExMSwzOTEwOCwzOTQ5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCwyMTY5NywzMTI2MywyNjk2MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUxNywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwzMTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwy''@;'; put 'put ''MDMwOSwyMTQxNCwyMjc5OSwyNDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwzNDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1''@;'; put 'put ''MiwzODI4OSwzODI5MCwzODQ4MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUxOSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwzNDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywy''@;'; put 'put ''MzAyMiwyMzI3MCwyNDA1NSwyNDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4MiwyODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwyODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwz''@;'; put 'put ''Njk5NCwzOTQwNSwzOTYwOCwyMTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0NywzMzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3NywzOTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2''@;'; put 'put ''MywzODU3MCwzOTUxMSwyMjg2OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUwNSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwzMzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywy''@;'; put 'put ''MzM3NywzMTM0OCwzNDg4MCwzODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0NiwyMzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwyMDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2NiwyODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwz''@;'; put 'put ''MzYxMCwzNDcyMiwzNDkxMywzNjg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0NiwyNDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0NiwyMDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkwOSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIx''@;'; put 'put ''NSwyNzYyNywyODAwOSwyODExMSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4MywzNDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwz''@;'; put 'put ''ODkxMiwzOTAxMywyNDc4NSwyNTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwyODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0MiwyNzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQyNSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5''@;'; put 'put ''NCwyODc3OSwzMDA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwz''@;'; put 'put ''MTExNywzMTE2NiwzMzQ1NywzMzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwyMzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAw''@;'; put 'put ''OCwzNjk5NiwzOTUyOSwzOTk3MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwyODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4Mywz''@;'; put 'put ''MzYxOCwzNDY0NywzNjk0NSwzODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwyNDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwyODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0''@;'; put 'put ''NiwyNzI0MywzNzg5MiwyMTc0MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMxMywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwyMTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIz''@;'; put 'put ''NSwyMjYyOCwyMjczNCwyODkzMiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQwOSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwzNTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwz''@;'; put 'put ''MDA1NCwzNDQwNywyNDY3NiwzNTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1NiwyNzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3MywzMjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5''@;'; put 'put ''NCwyMDk1OCwyMTkxNiwyMjEyMywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxnYjE4MDMwOlsxOTk3MCwxOTk3MiwxOTk3MywxOTk3NCwxOTk4MywxOTk4NiwxOTk5MSwxOTk5OSwyZTQsMjAwMDEsMjAwMDMsMjAwMDYsMjAw''@;'; put 'put ''MDksMjAwMTQsMjAwMTUsMjAwMTcsMjAwMTksMjAwMjEsMjAwMjMsMjAwMjgsMjAwMzIsMjAwMzMsMjAwMzQsMjAwMzYsMjAwMzgsMjAwNDIsMjAwNDksMjAwNTMsMjAwNTUsMjAwNTgsMjAwNTksMjAwNjYsMjAwNjcsMjAwNjgsMjAwNjksMjAwNzEsMjAwNzIsMjAwNzQsMjAwNzUsMjAwNzYs''@;'; put 'put ''MjAwNzcsMjAwNzgsMjAwNzksMjAwODIsMjAwODQsMjAwODUsMjAwODYsMjAwODcsMjAwODgsMjAwODksMjAwOTAsMjAwOTEsMjAwOTIsMjAwOTMsMjAwOTUsMjAwOTYsMjAwOTcsMjAwOTgsMjAwOTksMjAxMDAsMjAxMDEsMjAxMDMsMjAxMDYsMjAxMTIsMjAxMTgsMjAxMTksMjAxMjEsMjAx''@;'; put 'put ''MjQsMjAxMjUsMjAxMjYsMjAxMzEsMjAxMzgsMjAxNDMsMjAxNDQsMjAxNDUsMjAxNDgsMjAxNTAsMjAxNTEsMjAxNTIsMjAxNTMsMjAxNTYsMjAxNTcsMjAxNTgsMjAxNjgsMjAxNzIsMjAxNzUsMjAxNzYsMjAxNzgsMjAxODYsMjAxODcsMjAxODgsMjAxOTIsMjAxOTQsMjAxOTgsMjAxOTks''@;'; put 'put ''MjAyMDEsMjAyMDUsMjAyMDYsMjAyMDcsMjAyMDksMjAyMTIsMjAyMTYsMjAyMTcsMjAyMTgsMjAyMjAsMjAyMjIsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMjgsMjAyMjksMjAyMzAsMjAyMzEsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDMsMjAyNDQsMjAyNDUsMjAyNDYsMjAyNTIsMjAy''@;'; put 'put ''NTMsMjAyNTcsMjAyNTksMjAyNjQsMjAyNjUsMjAyNjgsMjAyNjksMjAyNzAsMjAyNzMsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODcsMjAyODgsMjAyODksMjAyOTAsMjAyOTIsMjAyOTMsMjAyOTUsMjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAsMjAzMDYs''@;'; put 'put ''MjAzMDgsMjAzMTAsMjAzMjEsMjAzMjIsMjAzMjYsMjAzMjgsMjAzMzAsMjAzMzEsMjAzMzMsMjAzMzQsMjAzMzcsMjAzMzgsMjAzNDEsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTIsMjAzNTMsMjAzNTQsMjAzNTcsMjAzNTgsMjAzNTksMjAzNjIsMjAzNjQsMjAzNjYsMjAz''@;'; put 'put ''NjgsMjAzNzAsMjAzNzEsMjAzNzMsMjAzNzQsMjAzNzYsMjAzNzcsMjAzNzgsMjAzODAsMjAzODIsMjAzODMsMjAzODUsMjAzODYsMjAzODgsMjAzOTUsMjAzOTcsMjA0MDAsMjA0MDEsMjA0MDIsMjA0MDMsMjA0MDQsMjA0MDYsMjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsMjA0MTEsMjA0MTIs''@;'; put 'put ''MjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MTgsMjA0MjIsMjA0MjMsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzQsMjA0MzUsMjA0MzYsMjA0MzcsMjA0MzgsMjA0NDEsMjA0NDMsMjA0NDgsMjA0NTAsMjA0NTIsMjA0NTMsMjA0NTUsMjA0NTksMjA0NjAsMjA0NjQsMjA0''@;'; put 'put ''NjYsMjA0NjgsMjA0NjksMjA0NzAsMjA0NzEsMjA0NzMsMjA0NzUsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsMjA0ODMsMjA0ODQsMjA0ODUsMjA0ODYsMjA0ODcsMjA0ODgsMjA0ODksMjA0OTAsMjA0OTEsMjA0OTQsMjA0OTYsMjA0OTcsMjA0OTksMjA1MDEsMjA1MDIs''@;'; put 'put ''MjA1MDMsMjA1MDcsMjA1MDksMjA1MTAsMjA1MTIsMjA1MTQsMjA1MTUsMjA1MTYsMjA1MTksMjA1MjMsMjA1MjcsMjA1MjgsMjA1MjksMjA1MzAsMjA1MzEsMjA1MzIsMjA1MzMsMjA1MzQsMjA1MzUsMjA1MzYsMjA1MzcsMjA1MzksMjA1NDEsMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1''@;'; put 'put ''NDgsMjA1NDksMjA1NTAsMjA1NTMsMjA1NTQsMjA1NTUsMjA1NTcsMjA1NjAsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjQsMjA1NjYsMjA1NjcsMjA1NjgsMjA1NjksMjA1NzEsMjA1NzMsMjA1NzQsMjA1NzUsMjA1NzYsMjA1NzcsMjA1NzgsMjA1NzksMjA1ODAsMjA1ODIsMjA1ODMsMjA1ODQs''@;'; put 'put ''MjA1ODUsMjA1ODYsMjA1ODcsMjA1ODksMjA1OTAsMjA1OTEsMjA1OTIsMjA1OTMsMjA1OTQsMjA1OTUsMjA1OTYsMjA1OTcsMjA2MDAsMjA2MDEsMjA2MDIsMjA2MDQsMjA2MDUsMjA2MDksMjA2MTAsMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTUsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2''@;'; put 'put ''MjIsMjA2MjMsMjA2MjQsMjA2MjUsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MjksMjA2MzAsMjA2MzEsMjA2MzIsMjA2MzMsMjA2MzQsMjA2MzUsMjA2MzYsMjA2MzcsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NDQsMjA2NDYsMjA2NTAsMjA2NTEsMjA2NTMsMjA2NTQsMjA2NTUs''@;'; put 'put ''MjA2NTYsMjA2NTcsMjA2NTksMjA2NjAsMjA2NjEsMjA2NjIsMjA2NjMsMjA2NjQsMjA2NjUsMjA2NjgsMjA2NjksMjA2NzAsMjA2NzEsMjA2NzIsMjA2NzMsMjA2NzQsMjA2NzUsMjA2NzYsMjA2NzcsMjA2NzgsMjA2NzksMjA2ODAsMjA2ODEsMjA2ODIsMjA2ODMsMjA2ODQsMjA2ODUsMjA2''@;'; put 'put ''ODYsMjA2ODgsMjA2ODksMjA2OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTUsMjA2OTYsMjA2OTcsMjA2OTksMjA3MDAsMjA3MDEsMjA3MDIsMjA3MDMsMjA3MDQsMjA3MDUsMjA3MDYsMjA3MDcsMjA3MDgsMjA3MDksMjA3MTIsMjA3MTMsMjA3MTQsMjA3MTUsMjA3MTksMjA3MjAsMjA3MjEs''@;'; put 'put ''MjA3MjIsMjA3MjQsMjA3MjYsMjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzIsMjA3MzMsMjA3MzQsMjA3MzUsMjA3MzYsMjA3MzcsMjA3MzgsMjA3MzksMjA3NDAsMjA3NDEsMjA3NDQsMjA3NDUsMjA3NDYsMjA3NDgsMjA3NDksMjA3NTAsMjA3NTEsMjA3NTIsMjA3NTMsMjA3NTUsMjA3''@;'; put 'put ''NTYsMjA3NTcsMjA3NTgsMjA3NTksMjA3NjAsMjA3NjEsMjA3NjIsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NzAsMjA3NzEsMjA3NzIsMjA3NzMsMjA3NzQsMjA3NzUsMjA3NzYsMjA3NzcsMjA3NzgsMjA3NzksMjA3ODAsMjA3ODEsMjA3ODIsMjA3ODMsMjA3ODQs''@;'; put 'put ''MjA3ODUsMjA3ODYsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTAsMjA3OTEsMjA3OTIsMjA3OTMsMjA3OTQsMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA4MDIsMjA4MDcsMjA4MTAsMjA4MTIsMjA4MTQsMjA4MTUsMjA4MTYsMjA4MTgsMjA4MTksMjA4MjMsMjA4MjQsMjA4MjUsMjA4MjcsMjA4''@;'; put 'put ''MjksMjA4MzAsMjA4MzEsMjA4MzIsMjA4MzMsMjA4MzUsMjA4MzYsMjA4MzgsMjA4MzksMjA4NDEsMjA4NDIsMjA4NDcsMjA4NTAsMjA4NTgsMjA4NjIsMjA4NjMsMjA4NjcsMjA4NjgsMjA4NzAsMjA4NzEsMjA4NzQsMjA4NzUsMjA4NzgsMjA4NzksMjA4ODAsMjA4ODEsMjA4ODMsMjA4ODQs''@;'; put 'put ''MjA4ODgsMjA4OTAsMjA4OTMsMjA4OTQsMjA4OTUsMjA4OTcsMjA4OTksMjA5MDIsMjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDksMjA5MTAsMjA5MTYsMjA5MjAsMjA5MjEsMjA5MjIsMjA5MjYsMjA5MjcsMjA5MjksMjA5MzAsMjA5MzEsMjA5MzMsMjA5MzYsMjA5MzgsMjA5NDEsMjA5''@;'; put 'put ''NDIsMjA5NDQsMjA5NDYsMjA5NDcsMjA5NDgsMjA5NDksMjA5NTAsMjA5NTEsMjA5NTIsMjA5NTMsMjA5NTQsMjA5NTYsMjA5NTgsMjA5NTksMjA5NjIsMjA5NjMsMjA5NjUsMjA5NjYsMjA5NjcsMjA5NjgsMjA5NjksMjA5NzAsMjA5NzIsMjA5NzQsMjA5NzcsMjA5NzgsMjA5ODAsMjA5ODMs''@;'; put 'put ''MjA5OTAsMjA5OTYsMjA5OTcsMjEwMDEsMjEwMDMsMjEwMDQsMjEwMDcsMjEwMDgsMjEwMTEsMjEwMTIsMjEwMTMsMjEwMjAsMjEwMjIsMjEwMjMsMjEwMjUsMjEwMjYsMjEwMjcsMjEwMjksMjEwMzAsMjEwMzEsMjEwMzQsMjEwMzYsMjEwMzksMjEwNDEsMjEwNDIsMjEwNDQsMjEwNDUsMjEw''@;'; put 'put ''NTIsMjEwNTQsMjEwNjAsMjEwNjEsMjEwNjIsMjEwNjMsMjEwNjQsMjEwNjUsMjEwNjcsMjEwNzAsMjEwNzEsMjEwNzQsMjEwNzUsMjEwNzcsMjEwNzksMjEwODAsMjEwODEsMjEwODIsMjEwODMsMjEwODUsMjEwODcsMjEwODgsMjEwOTAsMjEwOTEsMjEwOTIsMjEwOTQsMjEwOTYsMjEwOTks''@;'; put 'put ''MjExMDAsMjExMDEsMjExMDIsMjExMDQsMjExMDUsMjExMDcsMjExMDgsMjExMDksMjExMTAsMjExMTEsMjExMTIsMjExMTMsMjExMTQsMjExMTUsMjExMTYsMjExMTgsMjExMjAsMjExMjMsMjExMjQsMjExMjUsMjExMjYsMjExMjcsMjExMjksMjExMzAsMjExMzEsMjExMzIsMjExMzMsMjEx''@;'; put 'put ''MzQsMjExMzUsMjExMzcsMjExMzgsMjExNDAsMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDUsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjYsMjExNjcsMjExNjgsMjExNzIsMjExNzMsMjExNzQsMjExNzUsMjExNzYsMjExNzcsMjExNzgsMjExNzksMjExODAs''@;'; put 'put ''MjExODEsMjExODQsMjExODUsMjExODYsMjExODgsMjExODksMjExOTAsMjExOTIsMjExOTQsMjExOTYsMjExOTcsMjExOTgsMjExOTksMjEyMDEsMjEyMDMsMjEyMDQsMjEyMDUsMjEyMDcsMjEyMDksMjEyMTAsMjEyMTEsMjEyMTIsMjEyMTMsMjEyMTQsMjEyMTYsMjEyMTcsMjEyMTgsMjEy''@;'; put 'put ''MTksMjEyMjEsMjEyMjIsMjEyMjMsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjcsMjEyMjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzMsMjEyMzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEyMzgsMjEyMzksMjEyNDAsMjEyNDMsMjEyNDQsMjEyNDUsMjEyNDksMjEyNTAsMjEyNTEsMjEyNTIsMjEyNTUs''@;'; put 'put ''MjEyNTcsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjIsMjEyNjUsMjEyNjYsMjEyNjcsMjEyNjgsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODIsMjEyODQsMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTUsMjEyOTYsMjEyOTcsMjEyOTgsMjEy''@;'; put 'put ''OTksMjEzMDAsMjEzMDEsMjEzMDIsMjEzMDMsMjEzMDQsMjEzMDgsMjEzMDksMjEzMTIsMjEzMTQsMjEzMTYsMjEzMTgsMjEzMjMsMjEzMjQsMjEzMjUsMjEzMjgsMjEzMzIsMjEzMzYsMjEzMzcsMjEzMzksMjEzNDEsMjEzNDksMjEzNTIsMjEzNTQsMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjYs''@;'; put 'put ''MjEzNjksMjEzNzEsMjEzNzIsMjEzNzMsMjEzNzQsMjEzNzYsMjEzNzcsMjEzNzksMjEzODMsMjEzODQsMjEzODYsMjEzOTAsMjEzOTEsMjEzOTIsMjEzOTMsMjEzOTQsMjEzOTUsMjEzOTYsMjEzOTgsMjEzOTksMjE0MDEsMjE0MDMsMjE0MDQsMjE0MDYsMjE0MDgsMjE0MDksMjE0MTIsMjE0''@;'; put 'put ''MTUsMjE0MTgsMjE0MTksMjE0MjAsMjE0MjEsMjE0MjMsMjE0MjQsMjE0MjUsMjE0MjYsMjE0MjcsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzMsMjE0MzQsMjE0MzYsMjE0MzcsMjE0MzgsMjE0NDAsMjE0NDMsMjE0NDQsMjE0NDUsMjE0NDYsMjE0NDcsMjE0NTQsMjE0NTUsMjE0NTYs''@;'; put 'put ''MjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjgsMjE0NjksMjE0NzAsMjE0NzMsMjE0NzQsMjE0NzksMjE0OTIsMjE0OTgsMjE1MDIsMjE1MDMsMjE1MDQsMjE1MDYsMjE1MDksMjE1MTEsMjE1MTUsMjE1MjQsMjE1MjgsMjE1MjksMjE1MzAsMjE1MzIsMjE1MzgsMjE1NDAsMjE1NDEsMjE1''@;'; put 'put ''NDYsMjE1NTIsMjE1NTUsMjE1NTgsMjE1NTksMjE1NjIsMjE1NjUsMjE1NjcsMjE1NjksMjE1NzAsMjE1NzIsMjE1NzMsMjE1NzUsMjE1NzcsMjE1ODAsMjE1ODEsMjE1ODIsMjE1ODMsMjE1ODUsMjE1OTQsMjE1OTcsMjE1OTgsMjE1OTksMjE2MDAsMjE2MDEsMjE2MDMsMjE2MDUsMjE2MDcs''@;'; put 'put ''MjE2MDksMjE2MTAsMjE2MTEsMjE2MTIsMjE2MTMsMjE2MTQsMjE2MTUsMjE2MTYsMjE2MjAsMjE2MjUsMjE2MjYsMjE2MzAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2MzksMjE2NDAsMjE2NDEsMjE2NDIsMjE2NDUsMjE2NDksMjE2NTEsMjE2NTUsMjE2NTYsMjE2NjAsMjE2NjIsMjE2''@;'; put 'put ''NjMsMjE2NjQsMjE2NjUsMjE2NjYsMjE2NjksMjE2NzgsMjE2ODAsMjE2ODIsMjE2ODUsMjE2ODYsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTIsMjE2OTQsMjE2OTksMjE3MDEsMjE3MDYsMjE3MDcsMjE3MTgsMjE3MjAsMjE3MjMsMjE3MjgsMjE3MjksMjE3MzAsMjE3MzEsMjE3MzIsMjE3Mzks''@;'; put 'put ''MjE3NDAsMjE3NDMsMjE3NDQsMjE3NDUsMjE3NDgsMjE3NDksMjE3NTAsMjE3NTEsMjE3NTIsMjE3NTMsMjE3NTUsMjE3NTgsMjE3NjAsMjE3NjIsMjE3NjMsMjE3NjQsMjE3NjUsMjE3NjgsMjE3NzAsMjE3NzEsMjE3NzIsMjE3NzMsMjE3NzQsMjE3NzgsMjE3NzksMjE3ODEsMjE3ODIsMjE3''@;'; put 'put ''ODMsMjE3ODQsMjE3ODUsMjE3ODYsMjE3ODgsMjE3ODksMjE3OTAsMjE3OTEsMjE3OTMsMjE3OTcsMjE3OTgsMjE4MDAsMjE4MDEsMjE4MDMsMjE4MDUsMjE4MTAsMjE4MTIsMjE4MTMsMjE4MTQsMjE4MTYsMjE4MTcsMjE4MTgsMjE4MTksMjE4MjEsMjE4MjQsMjE4MjYsMjE4MjksMjE4MzEs''@;'; put 'put ''MjE4MzIsMjE4MzUsMjE4MzYsMjE4MzcsMjE4MzgsMjE4MzksMjE4NDEsMjE4NDIsMjE4NDMsMjE4NDQsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsMjE4NTEsMjE4NTMsMjE4NTQsMjE4NTUsMjE4NTYsMjE4NTgsMjE4NTksMjE4NjQsMjE4NjUsMjE4NjcsMjE4NzEsMjE4NzIsMjE4NzMsMjE4''@;'; put 'put ''NzQsMjE4NzUsMjE4NzYsMjE4ODEsMjE4ODIsMjE4ODUsMjE4ODcsMjE4OTMsMjE4OTQsMjE5MDAsMjE5MDEsMjE5MDIsMjE5MDQsMjE5MDYsMjE5MDcsMjE5MDksMjE5MTAsMjE5MTEsMjE5MTQsMjE5MTUsMjE5MTgsMjE5MjAsMjE5MjEsMjE5MjIsMjE5MjMsMjE5MjQsMjE5MjUsMjE5MjYs''@;'; put 'put ''MjE5MjgsMjE5MjksMjE5MzAsMjE5MzEsMjE5MzIsMjE5MzMsMjE5MzQsMjE5MzUsMjE5MzYsMjE5MzgsMjE5NDAsMjE5NDIsMjE5NDQsMjE5NDYsMjE5NDgsMjE5NTEsMjE5NTIsMjE5NTMsMjE5NTQsMjE5NTUsMjE5NTgsMjE5NTksMjE5NjAsMjE5NjIsMjE5NjMsMjE5NjYsMjE5NjcsMjE5''@;'; put 'put ''NjgsMjE5NzMsMjE5NzUsMjE5NzYsMjE5NzcsMjE5NzgsMjE5NzksMjE5ODIsMjE5ODQsMjE5ODYsMjE5OTEsMjE5OTMsMjE5OTcsMjE5OTgsMjJlMywyMjAwMSwyMjAwNCwyMjAwNiwyMjAwOCwyMjAwOSwyMjAxMCwyMjAxMSwyMjAxMiwyMjAxNSwyMjAxOCwyMjAxOSwyMjAyMCwyMjAyMSwy''@;'; put 'put ''MjAyMiwyMjAyMywyMjAyNiwyMjAyNywyMjAyOSwyMjAzMiwyMjAzMywyMjAzNCwyMjAzNSwyMjAzNiwyMjAzNywyMjAzOCwyMjAzOSwyMjA0MSwyMjA0MiwyMjA0NCwyMjA0NSwyMjA0OCwyMjA0OSwyMjA1MCwyMjA1MywyMjA1NCwyMjA1NiwyMjA1NywyMjA1OCwyMjA1OSwyMjA2MiwyMjA2''@;'; put 'put ''MywyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MiwyMjA3NCwyMjA3NiwyMjA3NywyMjA3OCwyMjA4MCwyMjA4MSwyMjA4MiwyMjA4MywyMjA4NCwyMjA4NSwyMjA4NiwyMjA4NywyMjA4OCwyMjA4OSwyMjA5MCwyMjA5MSwyMjA5NSwyMjA5NiwyMjA5NywyMjA5OCwyMjA5OSwyMjEwMSwy''@;'; put 'put ''MjEwMiwyMjEwNiwyMjEwNywyMjEwOSwyMjExMCwyMjExMSwyMjExMiwyMjExMywyMjExNSwyMjExNywyMjExOCwyMjExOSwyMjEyNSwyMjEyNiwyMjEyNywyMjEyOCwyMjEzMCwyMjEzMSwyMjEzMiwyMjEzMywyMjEzNSwyMjEzNiwyMjEzNywyMjEzOCwyMjE0MSwyMjE0MiwyMjE0MywyMjE0''@;'; put 'put ''NCwyMjE0NSwyMjE0NiwyMjE0NywyMjE0OCwyMjE1MSwyMjE1MiwyMjE1MywyMjE1NCwyMjE1NSwyMjE1NiwyMjE1NywyMjE2MCwyMjE2MSwyMjE2MiwyMjE2NCwyMjE2NSwyMjE2NiwyMjE2NywyMjE2OCwyMjE2OSwyMjE3MCwyMjE3MSwyMjE3MiwyMjE3MywyMjE3NCwyMjE3NSwyMjE3Niwy''@;'; put 'put ''MjE3NywyMjE3OCwyMjE4MCwyMjE4MSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NiwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MCwyMjE5MiwyMjE5MywyMjE5NCwyMjE5NSwyMjE5NiwyMjE5NywyMjE5OCwyMjIwMCwyMjIwMSwyMjIwMiwyMjIwMywyMjIwNSwyMjIwNiwyMjIwNywyMjIw''@;'; put 'put ''OCwyMjIwOSwyMjIxMCwyMjIxMSwyMjIxMiwyMjIxMywyMjIxNCwyMjIxNSwyMjIxNiwyMjIxNywyMjIxOSwyMjIyMCwyMjIyMSwyMjIyMiwyMjIyMywyMjIyNCwyMjIyNSwyMjIyNiwyMjIyNywyMjIyOSwyMjIzMCwyMjIzMiwyMjIzMywyMjIzNiwyMjI0MywyMjI0NSwyMjI0NiwyMjI0Nywy''@;'; put 'put ''MjI0OCwyMjI0OSwyMjI1MCwyMjI1MiwyMjI1NCwyMjI1NSwyMjI1OCwyMjI1OSwyMjI2MiwyMjI2MywyMjI2NCwyMjI2NywyMjI2OCwyMjI3MiwyMjI3MywyMjI3NCwyMjI3NywyMjI3OSwyMjI4MywyMjI4NCwyMjI4NSwyMjI4NiwyMjI4NywyMjI4OCwyMjI4OSwyMjI5MCwyMjI5MSwyMjI5''@;'; put 'put ''MiwyMjI5MywyMjI5NCwyMjI5NSwyMjI5NiwyMjI5NywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwMiwyMjMwNCwyMjMwNSwyMjMwNiwyMjMwOCwyMjMwOSwyMjMxMCwyMjMxMSwyMjMxNSwyMjMyMSwyMjMyMiwyMjMyNCwyMjMyNSwyMjMyNiwyMjMyNywyMjMyOCwyMjMzMiwyMjMzMywyMjMzNSwy''@;'; put 'put ''MjMzNywyMjMzOSwyMjM0MCwyMjM0MSwyMjM0MiwyMjM0NCwyMjM0NSwyMjM0NywyMjM1NCwyMjM1NSwyMjM1NiwyMjM1NywyMjM1OCwyMjM2MCwyMjM2MSwyMjM3MCwyMjM3MSwyMjM3MywyMjM3NSwyMjM4MCwyMjM4MiwyMjM4NCwyMjM4NSwyMjM4NiwyMjM4OCwyMjM4OSwyMjM5MiwyMjM5''@;'; put 'put ''MywyMjM5NCwyMjM5NywyMjM5OCwyMjM5OSwyMjQwMCwyMjQwMSwyMjQwNywyMjQwOCwyMjQwOSwyMjQxMCwyMjQxMywyMjQxNCwyMjQxNSwyMjQxNiwyMjQxNywyMjQyMCwyMjQyMSwyMjQyMiwyMjQyMywyMjQyNCwyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzNywy''@;'; put 'put ''MjQ0MCwyMjQ0MiwyMjQ0NCwyMjQ0NywyMjQ0OCwyMjQ0OSwyMjQ1MSwyMjQ1MywyMjQ1NCwyMjQ1NSwyMjQ1NywyMjQ1OCwyMjQ1OSwyMjQ2MCwyMjQ2MSwyMjQ2MiwyMjQ2MywyMjQ2NCwyMjQ2NSwyMjQ2OCwyMjQ2OSwyMjQ3MCwyMjQ3MSwyMjQ3MiwyMjQ3MywyMjQ3NCwyMjQ3NiwyMjQ3''@;'; put 'put ''NywyMjQ4MCwyMjQ4MSwyMjQ4MywyMjQ4NiwyMjQ4NywyMjQ5MSwyMjQ5MiwyMjQ5NCwyMjQ5NywyMjQ5OCwyMjQ5OSwyMjUwMSwyMjUwMiwyMjUwMywyMjUwNCwyMjUwNSwyMjUwNiwyMjUwNywyMjUwOCwyMjUxMCwyMjUxMiwyMjUxMywyMjUxNCwyMjUxNSwyMjUxNywyMjUxOCwyMjUxOSwy''@;'; put 'put ''MjUyMywyMjUyNCwyMjUyNiwyMjUyNywyMjUyOSwyMjUzMSwyMjUzMiwyMjUzMywyMjUzNiwyMjUzNywyMjUzOCwyMjU0MCwyMjU0MiwyMjU0MywyMjU0NCwyMjU0NiwyMjU0NywyMjU0OCwyMjU1MCwyMjU1MSwyMjU1MiwyMjU1NCwyMjU1NSwyMjU1NiwyMjU1NywyMjU1OSwyMjU2MiwyMjU2''@;'; put 'put ''MywyMjU2NSwyMjU2NiwyMjU2NywyMjU2OCwyMjU2OSwyMjU3MSwyMjU3MiwyMjU3MywyMjU3NCwyMjU3NSwyMjU3NywyMjU3OCwyMjU3OSwyMjU4MCwyMjU4MiwyMjU4MywyMjU4NCwyMjU4NSwyMjU4NiwyMjU4NywyMjU4OCwyMjU4OSwyMjU5MCwyMjU5MSwyMjU5MiwyMjU5MywyMjU5NCwy''@;'; put 'put ''MjU5NSwyMjU5NywyMjU5OCwyMjU5OSwyMjYwMCwyMjYwMSwyMjYwMiwyMjYwMywyMjYwNiwyMjYwNywyMjYwOCwyMjYxMCwyMjYxMSwyMjYxMywyMjYxNCwyMjYxNSwyMjYxNywyMjYxOCwyMjYxOSwyMjYyMCwyMjYyMSwyMjYyMywyMjYyNCwyMjYyNSwyMjYyNiwyMjYyNywyMjYyOCwyMjYz''@;'; put 'put ''MCwyMjYzMSwyMjYzMiwyMjYzMywyMjYzNCwyMjYzNywyMjYzOCwyMjYzOSwyMjY0MCwyMjY0MSwyMjY0MiwyMjY0MywyMjY0NCwyMjY0NSwyMjY0NiwyMjY0NywyMjY0OCwyMjY0OSwyMjY1MCwyMjY1MSwyMjY1MiwyMjY1MywyMjY1NSwyMjY1OCwyMjY2MCwyMjY2MiwyMjY2MywyMjY2NCwy''@;'; put 'put ''MjY2NiwyMjY2NywyMjY2OCwyMjY2OSwyMjY3MCwyMjY3MSwyMjY3MiwyMjY3MywyMjY3NiwyMjY3NywyMjY3OCwyMjY3OSwyMjY4MCwyMjY4MywyMjY4NCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5MSwyMjY5MiwyMjY5MywyMjY5NCwyMjY5NSwyMjY5OCwyMjY5OSwyMjcwMCwyMjcw''@;'; put 'put ''MSwyMjcwMiwyMjcwMywyMjcwNCwyMjcwNSwyMjcwNiwyMjcwNywyMjcwOCwyMjcwOSwyMjcxMCwyMjcxMSwyMjcxMiwyMjcxMywyMjcxNCwyMjcxNSwyMjcxNywyMjcxOCwyMjcxOSwyMjcyMCwyMjcyMiwyMjcyMywyMjcyNCwyMjcyNiwyMjcyNywyMjcyOCwyMjcyOSwyMjczMCwyMjczMSwy''@;'; put 'put ''MjczMiwyMjczMywyMjczNCwyMjczNSwyMjczNiwyMjczOCwyMjczOSwyMjc0MCwyMjc0MiwyMjc0MywyMjc0NCwyMjc0NSwyMjc0NiwyMjc0NywyMjc0OCwyMjc0OSwyMjc1MCwyMjc1MSwyMjc1MiwyMjc1MywyMjc1NCwyMjc1NSwyMjc1NywyMjc1OCwyMjc1OSwyMjc2MCwyMjc2MSwyMjc2''@;'; put 'put ''MiwyMjc2NSwyMjc2NywyMjc2OSwyMjc3MCwyMjc3MiwyMjc3MywyMjc3NSwyMjc3NiwyMjc3OCwyMjc3OSwyMjc4MCwyMjc4MSwyMjc4MiwyMjc4MywyMjc4NCwyMjc4NSwyMjc4NywyMjc4OSwyMjc5MCwyMjc5MiwyMjc5MywyMjc5NCwyMjc5NSwyMjc5NiwyMjc5OCwyMjgwMCwyMjgwMSwy''@;'; put 'put ''MjgwMiwyMjgwMywyMjgwNywyMjgwOCwyMjgxMSwyMjgxMywyMjgxNCwyMjgxNiwyMjgxNywyMjgxOCwyMjgxOSwyMjgyMiwyMjgyNCwyMjgyOCwyMjgzMiwyMjgzNCwyMjgzNSwyMjgzNywyMjgzOCwyMjg0MywyMjg0NSwyMjg0NiwyMjg0NywyMjg0OCwyMjg1MSwyMjg1MywyMjg1NCwyMjg1''@;'; put 'put ''OCwyMjg2MCwyMjg2MSwyMjg2NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NiwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg4NCwyMjg4NiwyMjg4NywyMjg4OCwyMjg4OSwyMjg5MCwyMjg5MSwyMjg5MiwyMjg5MywyMjg5NCwyMjg5NSwyMjg5NiwyMjg5NywyMjg5OCwy''@;'; put 'put ''MjkwMSwyMjkwMywyMjkwNiwyMjkwNywyMjkwOCwyMjkxMCwyMjkxMSwyMjkxMiwyMjkxNywyMjkyMSwyMjkyMywyMjkyNCwyMjkyNiwyMjkyNywyMjkyOCwyMjkyOSwyMjkzMiwyMjkzMywyMjkzNiwyMjkzOCwyMjkzOSwyMjk0MCwyMjk0MSwyMjk0MywyMjk0NCwyMjk0NSwyMjk0NiwyMjk1''@;'; put 'put ''MCwyMjk1MSwyMjk1NiwyMjk1NywyMjk2MCwyMjk2MSwyMjk2MywyMjk2NCwyMjk2NSwyMjk2NiwyMjk2NywyMjk2OCwyMjk3MCwyMjk3MiwyMjk3MywyMjk3NSwyMjk3NiwyMjk3NywyMjk3OCwyMjk3OSwyMjk4MCwyMjk4MSwyMjk4MywyMjk4NCwyMjk4NSwyMjk4OCwyMjk4OSwyMjk5MCwy''@;'; put 'put ''Mjk5MSwyMjk5NywyMjk5OCwyMzAwMSwyMzAwMywyMzAwNiwyMzAwNywyMzAwOCwyMzAwOSwyMzAxMCwyMzAxMiwyMzAxNCwyMzAxNSwyMzAxNywyMzAxOCwyMzAxOSwyMzAyMSwyMzAyMiwyMzAyMywyMzAyNCwyMzAyNSwyMzAyNiwyMzAyNywyMzAyOCwyMzAyOSwyMzAzMCwyMzAzMSwyMzAz''@;'; put 'put ''MiwyMzAzNCwyMzAzNiwyMzAzNywyMzAzOCwyMzA0MCwyMzA0MiwyMzA1MCwyMzA1MSwyMzA1MywyMzA1NCwyMzA1NSwyMzA1NiwyMzA1OCwyMzA2MCwyMzA2MSwyMzA2MiwyMzA2MywyMzA2NSwyMzA2NiwyMzA2NywyMzA2OSwyMzA3MCwyMzA3MywyMzA3NCwyMzA3NiwyMzA3OCwyMzA3OSwy''@;'; put 'put ''MzA4MCwyMzA4MiwyMzA4MywyMzA4NCwyMzA4NSwyMzA4NiwyMzA4NywyMzA4OCwyMzA5MSwyMzA5MywyMzA5NSwyMzA5NiwyMzA5NywyMzA5OCwyMzA5OSwyMzEwMSwyMzEwMiwyMzEwMywyMzEwNSwyMzEwNiwyMzEwNywyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNSwyMzExNiwyMzEx''@;'; put 'put ''NywyMzExOCwyMzExOSwyMzEyMCwyMzEyMSwyMzEyMiwyMzEyMywyMzEyNCwyMzEyNiwyMzEyNywyMzEyOCwyMzEyOSwyMzEzMSwyMzEzMiwyMzEzMywyMzEzNCwyMzEzNSwyMzEzNiwyMzEzNywyMzEzOSwyMzE0MCwyMzE0MSwyMzE0MiwyMzE0NCwyMzE0NSwyMzE0NywyMzE0OCwyMzE0OSwy''@;'; put 'put ''MzE1MCwyMzE1MSwyMzE1MiwyMzE1MywyMzE1NCwyMzE1NSwyMzE2MCwyMzE2MSwyMzE2MywyMzE2NCwyMzE2NSwyMzE2NiwyMzE2OCwyMzE2OSwyMzE3MCwyMzE3MSwyMzE3MiwyMzE3MywyMzE3NCwyMzE3NSwyMzE3NiwyMzE3NywyMzE3OCwyMzE3OSwyMzE4MCwyMzE4MSwyMzE4MiwyMzE4''@;'; put 'put ''MywyMzE4NCwyMzE4NSwyMzE4NywyMzE4OCwyMzE4OSwyMzE5MCwyMzE5MSwyMzE5MiwyMzE5MywyMzE5NiwyMzE5NywyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMSwyMzIwMiwyMzIwMywyMzIwNCwyMzIwNSwyMzIwNiwyMzIwNywyMzIwOCwyMzIwOSwyMzIxMSwyMzIxMiwyMzIxMywyMzIxNCwy''@;'; put 'put ''MzIxNSwyMzIxNiwyMzIxNywyMzIyMCwyMzIyMiwyMzIyMywyMzIyNSwyMzIyNiwyMzIyNywyMzIyOCwyMzIyOSwyMzIzMSwyMzIzMiwyMzIzNSwyMzIzNiwyMzIzNywyMzIzOCwyMzIzOSwyMzI0MCwyMzI0MiwyMzI0MywyMzI0NSwyMzI0NiwyMzI0NywyMzI0OCwyMzI0OSwyMzI1MSwyMzI1''@;'; put 'put ''MywyMzI1NSwyMzI1NywyMzI1OCwyMzI1OSwyMzI2MSwyMzI2MiwyMzI2MywyMzI2NiwyMzI2OCwyMzI2OSwyMzI3MSwyMzI3MiwyMzI3NCwyMzI3NiwyMzI3NywyMzI3OCwyMzI3OSwyMzI4MCwyMzI4MiwyMzI4MywyMzI4NCwyMzI4NSwyMzI4NiwyMzI4NywyMzI4OCwyMzI4OSwyMzI5MCwy''@;'; put 'put ''MzI5MSwyMzI5MiwyMzI5MywyMzI5NCwyMzI5NSwyMzI5NiwyMzI5NywyMzI5OCwyMzI5OSwyMzMwMCwyMzMwMSwyMzMwMiwyMzMwMywyMzMwNCwyMzMwNiwyMzMwNywyMzMwOCwyMzMwOSwyMzMxMCwyMzMxMSwyMzMxMiwyMzMxMywyMzMxNCwyMzMxNSwyMzMxNiwyMzMxNywyMzMyMCwyMzMy''@;'; put 'put ''MSwyMzMyMiwyMzMyMywyMzMyNCwyMzMyNSwyMzMyNiwyMzMyNywyMzMyOCwyMzMyOSwyMzMzMCwyMzMzMSwyMzMzMiwyMzMzMywyMzMzNCwyMzMzNSwyMzMzNiwyMzMzNywyMzMzOCwyMzMzOSwyMzM0MCwyMzM0MSwyMzM0MiwyMzM0MywyMzM0NCwyMzM0NSwyMzM0NywyMzM0OSwyMzM1MCwy''@;'; put 'put ''MzM1MiwyMzM1MywyMzM1NCwyMzM1NSwyMzM1NiwyMzM1NywyMzM1OCwyMzM1OSwyMzM2MSwyMzM2MiwyMzM2MywyMzM2NCwyMzM2NSwyMzM2NiwyMzM2NywyMzM2OCwyMzM2OSwyMzM3MCwyMzM3MSwyMzM3MiwyMzM3MywyMzM3NCwyMzM3NSwyMzM3OCwyMzM4MiwyMzM5MCwyMzM5MiwyMzM5''@;'; put 'put ''MywyMzM5OSwyMzQwMCwyMzQwMywyMzQwNSwyMzQwNiwyMzQwNywyMzQxMCwyMzQxMiwyMzQxNCwyMzQxNSwyMzQxNiwyMzQxNywyMzQxOSwyMzQyMCwyMzQyMiwyMzQyMywyMzQyNiwyMzQzMCwyMzQzNCwyMzQzNywyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MiwyMzQ0NCwyMzQ0NiwyMzQ1NSwy''@;'; put 'put ''MzQ2MywyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MCwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4MywyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzQ5MSwyMzQ5NiwyMzQ5NywyMzQ5OCwyMzQ5OSwyMzUwMSwyMzUwMiwyMzUwMywyMzUwNSwyMzUwOCwyMzUwOSwyMzUxMCwyMzUx''@;'; put 'put ''MSwyMzUxMiwyMzUxMywyMzUxNCwyMzUxNSwyMzUxNiwyMzUyMCwyMzUyMiwyMzUyMywyMzUyNiwyMzUyNywyMzUyOSwyMzUzMCwyMzUzMSwyMzUzMiwyMzUzMywyMzUzNSwyMzUzNywyMzUzOCwyMzUzOSwyMzU0MCwyMzU0MSwyMzU0MiwyMzU0MywyMzU0OSwyMzU1MCwyMzU1MiwyMzU1NCwy''@;'; put 'put ''MzU1NSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2MywyMzU2NCwyMzU2NSwyMzU2NiwyMzU2OCwyMzU3MCwyMzU3MSwyMzU3NSwyMzU3NywyMzU3OSwyMzU4MiwyMzU4MywyMzU4NCwyMzU4NSwyMzU4NywyMzU5MCwyMzU5MiwyMzU5MywyMzU5NCwyMzU5NSwyMzU5NywyMzU5OCwyMzU5OSwyMzYw''@;'; put 'put ''MCwyMzYwMiwyMzYwMywyMzYwNSwyMzYwNiwyMzYwNywyMzYxOSwyMzYyMCwyMzYyMiwyMzYyMywyMzYyOCwyMzYyOSwyMzYzNCwyMzYzNSwyMzYzNiwyMzYzOCwyMzYzOSwyMzY0MCwyMzY0MiwyMzY0MywyMzY0NCwyMzY0NSwyMzY0NywyMzY1MCwyMzY1MiwyMzY1NSwyMzY1NiwyMzY1Nywy''@;'; put 'put ''MzY1OCwyMzY1OSwyMzY2MCwyMzY2MSwyMzY2NCwyMzY2NiwyMzY2NywyMzY2OCwyMzY2OSwyMzY3MCwyMzY3MSwyMzY3MiwyMzY3NSwyMzY3NiwyMzY3NywyMzY3OCwyMzY4MCwyMzY4MywyMzY4NCwyMzY4NSwyMzY4NiwyMzY4NywyMzY4OSwyMzY5MCwyMzY5MSwyMzY5NCwyMzY5NSwyMzY5''@;'; put 'put ''OCwyMzY5OSwyMzcwMSwyMzcwOSwyMzcxMCwyMzcxMSwyMzcxMiwyMzcxMywyMzcxNiwyMzcxNywyMzcxOCwyMzcxOSwyMzcyMCwyMzcyMiwyMzcyNiwyMzcyNywyMzcyOCwyMzczMCwyMzczMiwyMzczNCwyMzczNywyMzczOCwyMzczOSwyMzc0MCwyMzc0MiwyMzc0NCwyMzc0NiwyMzc0Nywy''@;'; put 'put ''Mzc0OSwyMzc1MCwyMzc1MSwyMzc1MiwyMzc1MywyMzc1NCwyMzc1NiwyMzc1NywyMzc1OCwyMzc1OSwyMzc2MCwyMzc2MSwyMzc2MywyMzc2NCwyMzc2NSwyMzc2NiwyMzc2NywyMzc2OCwyMzc3MCwyMzc3MSwyMzc3MiwyMzc3MywyMzc3NCwyMzc3NSwyMzc3NiwyMzc3OCwyMzc3OSwyMzc4''@;'; put 'put ''MywyMzc4NSwyMzc4NywyMzc4OCwyMzc5MCwyMzc5MSwyMzc5MywyMzc5NCwyMzc5NSwyMzc5NiwyMzc5NywyMzc5OCwyMzc5OSwyMzgwMCwyMzgwMSwyMzgwMiwyMzgwNCwyMzgwNSwyMzgwNiwyMzgwNywyMzgwOCwyMzgwOSwyMzgxMiwyMzgxMywyMzgxNiwyMzgxNywyMzgxOCwyMzgxOSwy''@;'; put 'put ''MzgyMCwyMzgyMSwyMzgyMywyMzgyNCwyMzgyNSwyMzgyNiwyMzgyNywyMzgyOSwyMzgzMSwyMzgzMiwyMzgzMywyMzgzNCwyMzgzNiwyMzgzNywyMzgzOSwyMzg0MCwyMzg0MSwyMzg0MiwyMzg0MywyMzg0NSwyMzg0OCwyMzg1MCwyMzg1MSwyMzg1MiwyMzg1NSwyMzg1NiwyMzg1NywyMzg1''@;'; put 'put ''OCwyMzg1OSwyMzg2MSwyMzg2MiwyMzg2MywyMzg2NCwyMzg2NSwyMzg2NiwyMzg2NywyMzg2OCwyMzg3MSwyMzg3MiwyMzg3MywyMzg3NCwyMzg3NSwyMzg3NiwyMzg3NywyMzg3OCwyMzg4MCwyMzg4MSwyMzg4NSwyMzg4NiwyMzg4NywyMzg4OCwyMzg4OSwyMzg5MCwyMzg5MSwyMzg5Miwy''@;'; put 'put ''Mzg5MywyMzg5NCwyMzg5NSwyMzg5NywyMzg5OCwyMzkwMCwyMzkwMiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwNywyMzkwOCwyMzkwOSwyMzkxMCwyMzkxMSwyMzkxMiwyMzkxNCwyMzkxNywyMzkxOCwyMzkyMCwyMzkyMSwyMzkyMiwyMzkyMywyMzkyNSwyMzkyNiwyMzkyNywyMzky''@;'; put 'put ''OCwyMzkyOSwyMzkzMCwyMzkzMSwyMzkzMiwyMzkzMywyMzkzNCwyMzkzNSwyMzkzNiwyMzkzNywyMzkzOSwyMzk0MCwyMzk0MSwyMzk0MiwyMzk0MywyMzk0NCwyMzk0NSwyMzk0NiwyMzk0NywyMzk0OCwyMzk0OSwyMzk1MCwyMzk1MSwyMzk1MiwyMzk1MywyMzk1NCwyMzk1NSwyMzk1Niwy''@;'; put 'put ''Mzk1NywyMzk1OCwyMzk1OSwyMzk2MCwyMzk2MiwyMzk2MywyMzk2NCwyMzk2NiwyMzk2NywyMzk2OCwyMzk2OSwyMzk3MCwyMzk3MSwyMzk3MiwyMzk3MywyMzk3NCwyMzk3NSwyMzk3NiwyMzk3NywyMzk3OCwyMzk3OSwyMzk4MCwyMzk4MSwyMzk4MiwyMzk4MywyMzk4NCwyMzk4NSwyMzk4''@;'; put 'put ''NiwyMzk4NywyMzk4OCwyMzk4OSwyMzk5MCwyMzk5MiwyMzk5MywyMzk5NCwyMzk5NSwyMzk5NiwyMzk5NywyMzk5OCwyMzk5OSwyNGUzLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0''@;'; put 'put ''MDE3LDI0MDE4LDI0MDE5LDI0MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0''@;'; put 'put ''LDI0MDY4LDI0MDcxLDI0MDczLDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgyLDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAwLDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0''@;'; put 'put ''MTE2LDI0MTE3LDI0MTE4LDI0MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0''@;'; put 'put ''LDI0MTU2LDI0MTU3LDI0MTU5LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0''@;'; put 'put ''MjAwLDI0MjAxLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUz''@;'; put 'put ''LDI0MjU1LDI0MjU2LDI0MjU3LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYyLDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0''@;'; put 'put ''Mjg5LDI0MjkwLDI0MjkxLDI0MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMy''@;'; put 'put ''LDI0MzMzLDI0MzM0LDI0MzM2LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0''@;'; put 'put ''Mzc5LDI0MzgxLDI0MzgyLDI0MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2''@;'; put 'put ''LDI0NDE5LDI0NDIxLDI0NDIzLDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUxLDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0''@;'; put 'put ''NDc3LDI0NDc4LDI0NDc5LDI0NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEz''@;'; put 'put ''LDI0NTE0LDI0NTE5LDI0NTIwLDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMyLDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0''@;'; put 'put ''NTY3LDI0NTY5LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIxLDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4''@;'; put 'put ''LDI0NjMwLDI0NjMxLDI0NjMyLDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQwLDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0''@;'; put 'put ''NjcxLDI0NjcyLDI0NjczLDI0Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3''@;'; put 'put ''LDI0NzI4LDI0NzI5LDI0NzMyLDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0''@;'; put 'put ''Nzc1LDI0Nzc2LDI0Nzc3LDI0NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEwLDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3''@;'; put 'put ''LDI0ODI4LDI0ODI5LDI0ODMwLDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0''@;'; put 'put ''ODY5LDI0ODcyLDI0ODczLDI0ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAw''@;'; put 'put ''LDI0OTAxLDI0OTAyLDI0OTAzLDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEyLDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIzLDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0''@;'; put 'put ''OTM4LDI0OTM5LDI0OTQwLDI0OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4''@;'; put 'put ''LDI0OTY5LDI0OTcwLDI0OTcyLDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1''@;'; put 'put ''MDAzLDI1MDA1LDI1MDA2LDI1MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3''@;'; put 'put ''LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1''@;'; put 'put ''MDY5LDI1MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDkyLDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEz''@;'; put 'put ''LDI1MTE2LDI1MTE3LDI1MTE4LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQyLDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1''@;'; put 'put ''MTY3LDI1MTY4LDI1MTczLDI1MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4''@;'; put 'put ''LDI1MjE5LDI1MjIxLDI1MjIyLDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUxLDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1''@;'; put 'put ''MjY4LDI1MjcwLDI1MjcxLDI1MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMwLDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0''@;'; put 'put ''LDI1MzQ3LDI1MzQ4LDI1MzQ5LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1''@;'; put 'put ''Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQw''@;'; put 'put ''LDI1NDQ0LDI1NDQ1LDI1NDQ2LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1''@;'; put 'put ''NDkxLDI1NDkyLDI1NDkzLDI1NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMxLDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5''@;'; put 'put ''LDI1NTQxLDI1NTQzLDI1NTQ0LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1''@;'; put 'put ''NTgzLDI1NTg0LDI1NTg1LDI1NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2''@;'; put 'put ''LDI1NjI5LDI1NjMxLDI1NjM0LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQwLDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUzLDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1''@;'; put 'put ''NjczLDI1Njc1LDI1Njc2LDI1Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3''@;'; put 'put ''LDI1NzA4LDI1NzEwLDI1NzExLDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1''@;'; put 'put ''NzQzLDI1NzQ0LDI1NzQ3LDI1NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1''@;'; put 'put ''LDI1Nzg3LDI1Nzg5LDI1NzkwLDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODExLDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1''@;'; put 'put ''ODI1LDI1ODI3LDI1ODI5LDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1''@;'; put 'put ''LDI1ODU3LDI1ODU4LDI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1''@;'; put 'put ''ODg3LDI1ODg4LDI1ODg5LDI1ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIwLDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3''@;'; put 'put ''LDI1OTMwLDI1OTMxLDI1OTMzLDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQwLDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1''@;'; put 'put ''OTc0LDI1OTc2LDI1OTc3LDI1OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEw''@;'; put 'put ''LDI2MDEzLDI2MDE0LDI2MDE2LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2''@;'; put 'put ''MDU4LDI2MDYxLDI2MDY0LDI2MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4''@;'; put 'put ''LDI2MTA5LDI2MTEwLDI2MTExLDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2''@;'; put 'put ''MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAw''@;'; put 'put ''LDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjExLDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2''@;'; put 'put ''MjQzLDI2MjQ1LDI2MjQ2LDI2MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2MjcxLDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3''@;'; put 'put ''LDI2Mjc4LDI2MjgxLDI2MjgyLDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2''@;'; put 'put ''MzExLDI2MzEyLDI2MzEzLDI2MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQz''@;'; put 'put ''LDI2MzQ0LDI2MzQ2LDI2MzQ3LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUzLDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2''@;'; put 'put ''MzkwLDI2MzkyLDI2MzkzLDI2Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2''@;'; put 'put ''LDI2NDM3LDI2NDM5LDI2NDQyLDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUzLDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2''@;'; put 'put ''NDkwLDI2NDkxLDI2NDkzLDI2NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQw''@;'; put 'put ''LDI2NTQyLDI2NTQ1LDI2NTQ2LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2''@;'; put 'put ''NTkxLDI2NTkzLDI2NTk1LDI2NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQw''@;'; put 'put ''LDI2NjQyLDI2NjQ0LDI2NjQ1LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUyLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYzLDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2''@;'; put 'put ''Njc4LDI2NjgyLDI2NjgzLDI2Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMzLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5''@;'; put 'put ''LDI2NzQxLDI2NzQ0LDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUwLDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2''@;'; put 'put ''Nzc3LDI2Nzc4LDI2Nzc5LDI2NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEz''@;'; put 'put ''LDI2ODE0LDI2ODE1LDI2ODE3LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIzLDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2''@;'; put 'put ''ODUyLDI2ODUzLDI2ODU0LDI2ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgwLDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4''@;'; put 'put ''LDI2ODg5LDI2ODkwLDI2ODkyLDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAxLDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEwLDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2''@;'; put 'put ''OTI0LDI2OTI2LDI2OTI3LDI2OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUyLDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4''@;'; put 'put ''LDI2OTU5LDI2OTYwLDI2OTYxLDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgzLDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2''@;'; put 'put ''OTk3LDI2OTk4LDI3MDAyLDI3MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMzLDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQx''@;'; put 'put ''LDI3MDQyLDI3MDQzLDI3MDQ0LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUyLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3''@;'; put 'put ''MDc4LDI3MDc5LDI3MDgwLDI3MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEz''@;'; put 'put ''LDI3MTE0LDI3MTE1LDI3MTE2LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMyLDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3''@;'; put 'put ''MTQ1LDI3MTQ3LDI3MTQ4LDI3MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcxLDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5''@;'; put 'put ''LDI3MTgwLDI3MTgxLDI3MTgyLDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkwLDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3''@;'; put 'put ''MjE0LDI3MjE1LDI3MjE3LDI3MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQxLDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3''@;'; put 'put ''LDI3MjQ4LDI3MjUwLDI3MjUxLDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3''@;'; put 'put ''MjgzLDI3Mjg0LDI3Mjg1LDI3Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1''@;'; put 'put ''LDI3MzE2LDI3MzE3LDI3MzE4LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIzLDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMyLDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3''@;'; put 'put ''MzQzLDI3MzQ0LDI3MzQ1LDI3MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3Mzcw''@;'; put 'put ''LDI3MzcxLDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3''@;'; put 'put ''Mzk4LDI3Mzk5LDI3NDAwLDI3NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMw''@;'; put 'put ''LDI3NDMyLDI3NDMzLDI3NDM0LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3''@;'; put 'put ''NDY5LDI3NDcwLDI3NDcxLDI3NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0''@;'; put 'put ''LDI3NTA1LDI3NTA2LDI3NTA3LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEyLDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3''@;'; put 'put ''NTUwLDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0''@;'; put 'put ''LDI3NTg3LDI3NTg4LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3''@;'; put 'put ''NjI5LDI3NjMwLDI3NjMyLDI3NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2''@;'; put 'put ''LDI3Njc3LDI3Njc4LDI3NjgwLDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3NjkzLDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEwLDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3''@;'; put 'put ''NzI5LDI3NzMwLDI3NzMxLDI3NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3Nzgw''@;'; put 'put ''LDI3NzgzLDI3Nzg2LDI3Nzg3LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEwLDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3''@;'; put 'put ''ODQxLDI3ODQyLDI3ODQzLDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgxLDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAz''@;'; put 'put ''LDI3OTA0LDI3OTA2LDI3OTA3LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3''@;'; put 'put ''OTQ1LDI3OTQ4LDI3OTQ5LDI3OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1''@;'; put 'put ''LDI4MDA3LDI4MDA4LDI4MDExLDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMxLDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4''@;'; put 'put ''MDQ4LDI4MDUwLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDkyLDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0''@;'; put 'put ''LDI4MTA1LDI4MTA2LDI4MTA5LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMxLDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4''@;'; put 'put ''MTQ5LDI4MTUwLDI4MTUyLDI4MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0''@;'; put 'put ''LDI4MTk4LDI4MTk5LDI4MjAwLDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIyLDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4''@;'; put 'put ''MjM1LDI4MjM2LDI4MjM5LDI4MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4Mjcy''@;'; put 'put ''LDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4MjkyLDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4''@;'; put 'put ''MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUx''@;'; put 'put ''LDI4MzUyLDI4MzU1LDI4MzU2LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYyLDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4''@;'; put 'put ''NDAwLDI4NDAxLDI4NDAyLDI4NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMz''@;'; put 'put ''LDI4NDM0LDI4NDM4LDI4NDM5LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4''@;'; put 'put ''NDc0LDI4NDc1LDI4NDc2LDI4NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAwLDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3''@;'; put 'put ''LDI4NTA5LDI4NTExLDI4NTEyLDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMxLDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4''@;'; put 'put ''NTQ2LDI4NTQ3LDI4NTQ5LDI4NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgx''@;'; put 'put ''LDI4NTgyLDI4NTg0LDI4NTg1LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4''@;'; put 'put ''NjE1LDI4NjE2LDI4NjE4LDI4NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQyLDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4''@;'; put 'put ''LDI4NjQ5LDI4NjUwLDI4NjUxLDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4''@;'; put 'put ''Njc4LDI4Njc5LDI4NjgwLDI4NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAyLDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5''@;'; put 'put ''LDI4NzEwLDI4NzExLDI4NzEyLDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4''@;'; put 'put ''NzM5LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYyLDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5''@;'; put 'put ''LDI4NzcwLDI4NzcxLDI4NzcyLDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4''@;'; put 'put ''ODEyLDI4ODEzLDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQxLDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0''@;'; put 'put ''LDI4ODU4LDI4ODYyLDI4ODYzLDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODczLDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4''@;'; put 'put ''ODk4LDI4ODk5LDI4OTAxLDI4OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5''@;'; put 'put ''LDI4OTQwLDI4OTQxLDI4OTQyLDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUxLDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4''@;'; put 'put ''OTc4LDI4OTc5LDI4OTgwLDI4OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk4LDI4OTk5LDI5ZTMsMjkwMDEsMjkwMDMsMjkwMDUsMjkwMDcsMjkwMDgsMjkwMDksMjkwMTAs''@;'; put 'put ''MjkwMTEsMjkwMTIsMjkwMTMsMjkwMTQsMjkwMTUsMjkwMTYsMjkwMTcsMjkwMTgsMjkwMTksMjkwMjEsMjkwMjMsMjkwMjQsMjkwMjUsMjkwMjYsMjkwMjcsMjkwMjksMjkwMzMsMjkwMzQsMjkwMzUsMjkwMzYsMjkwMzcsMjkwMzksMjkwNDAsMjkwNDEsMjkwNDQsMjkwNDUsMjkwNDYsMjkw''@;'; put 'put ''NDcsMjkwNDksMjkwNTEsMjkwNTIsMjkwNTQsMjkwNTUsMjkwNTYsMjkwNTcsMjkwNTgsMjkwNTksMjkwNjEsMjkwNjIsMjkwNjMsMjkwNjQsMjkwNjUsMjkwNjcsMjkwNjgsMjkwNjksMjkwNzAsMjkwNzIsMjkwNzMsMjkwNzQsMjkwNzUsMjkwNzcsMjkwNzgsMjkwNzksMjkwODIsMjkwODMs''@;'; put 'put ''MjkwODQsMjkwODUsMjkwODYsMjkwODksMjkwOTAsMjkwOTEsMjkwOTIsMjkwOTMsMjkwOTQsMjkwOTUsMjkwOTcsMjkwOTgsMjkwOTksMjkxMDEsMjkxMDIsMjkxMDMsMjkxMDQsMjkxMDUsMjkxMDYsMjkxMDgsMjkxMTAsMjkxMTEsMjkxMTIsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkx''@;'; put 'put ''MTgsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjIsMjkxMjQsMjkxMjUsMjkxMjYsMjkxMjcsMjkxMjgsMjkxMjksMjkxMzAsMjkxMzEsMjkxMzIsMjkxMzMsMjkxMzUsMjkxMzYsMjkxMzcsMjkxMzgsMjkxMzksMjkxNDIsMjkxNDMsMjkxNDQsMjkxNDUsMjkxNDYsMjkxNDcsMjkxNDgsMjkxNDks''@;'; put 'put ''MjkxNTAsMjkxNTEsMjkxNTMsMjkxNTQsMjkxNTUsMjkxNTYsMjkxNTgsMjkxNjAsMjkxNjEsMjkxNjIsMjkxNjMsMjkxNjQsMjkxNjUsMjkxNjcsMjkxNjgsMjkxNjksMjkxNzAsMjkxNzEsMjkxNzIsMjkxNzMsMjkxNzQsMjkxNzUsMjkxNzYsMjkxNzgsMjkxNzksMjkxODAsMjkxODEsMjkx''@;'; put 'put ''ODIsMjkxODMsMjkxODQsMjkxODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkxOTEsMjkxOTIsMjkxOTMsMjkxOTQsMjkxOTUsMjkxOTYsMjkxOTcsMjkxOTgsMjkxOTksMjkyMDAsMjkyMDEsMjkyMDIsMjkyMDMsMjkyMDQsMjkyMDUsMjkyMDYsMjkyMDcsMjkyMDgsMjkyMDksMjkyMTAs''@;'; put 'put ''MjkyMTEsMjkyMTIsMjkyMTQsMjkyMTUsMjkyMTYsMjkyMTcsMjkyMTgsMjkyMTksMjkyMjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjUsMjkyMjcsMjkyMjksMjkyMzAsMjkyMzEsMjkyMzQsMjkyMzUsMjkyMzYsMjkyNDIsMjkyNDQsMjkyNDYsMjkyNDgsMjkyNDksMjkyNTAsMjkyNTEsMjky''@;'; put 'put ''NTIsMjkyNTMsMjkyNTQsMjkyNTcsMjkyNTgsMjkyNTksMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjUsMjkyNjcsMjkyNjgsMjkyNjksMjkyNzEsMjkyNzIsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODQsMjkyODUsMjkyODgsMjkyOTAsMjkyOTEsMjkyOTIsMjkyOTMsMjkyOTYs''@;'; put 'put ''MjkyOTcsMjkyOTksMjkzMDAsMjkzMDIsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMDksMjkzMTQsMjkzMTUsMjkzMTcsMjkzMTgsMjkzMTksMjkzMjAsMjkzMjEsMjkzMjQsMjkzMjYsMjkzMjgsMjkzMjksMjkzMzEsMjkzMzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkz''@;'; put 'put ''MzgsMjkzMzksMjkzNDAsMjkzNDEsMjkzNDIsMjkzNDQsMjkzNDUsMjkzNDYsMjkzNDcsMjkzNDgsMjkzNDksMjkzNTAsMjkzNTEsMjkzNTIsMjkzNTMsMjkzNTQsMjkzNTUsMjkzNTgsMjkzNjEsMjkzNjIsMjkzNjMsMjkzNjUsMjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsMjkzNzUs''@;'; put 'put ''MjkzNzYsMjkzODEsMjkzODIsMjkzODMsMjkzODUsMjkzODYsMjkzODcsMjkzODgsMjkzOTEsMjkzOTMsMjkzOTUsMjkzOTYsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDIsMjk0MDMsNTg1NjYsNTg1NjcsNTg1NjgsNTg1NjksNTg1NzAsNTg1NzEsNTg1NzIsNTg1NzMsNTg1NzQsNTg1NzUsNTg1''@;'; put 'put ''NzYsNTg1NzcsNTg1NzgsNTg1NzksNTg1ODAsNTg1ODEsNTg1ODIsNTg1ODMsNTg1ODQsNTg1ODUsNTg1ODYsNTg1ODcsNTg1ODgsNTg1ODksNTg1OTAsNTg1OTEsNTg1OTIsNTg1OTMsNTg1OTQsNTg1OTUsNTg1OTYsNTg1OTcsNTg1OTgsNTg1OTksNTg2MDAsNTg2MDEsNTg2MDIsNTg2MDMs''@;'; put 'put ''NTg2MDQsNTg2MDUsNTg2MDYsNTg2MDcsNTg2MDgsNTg2MDksNTg2MTAsNTg2MTEsNTg2MTIsNTg2MTMsNTg2MTQsNTg2MTUsNTg2MTYsNTg2MTcsNTg2MTgsNTg2MTksNTg2MjAsNTg2MjEsNTg2MjIsNTg2MjMsNTg2MjQsNTg2MjUsNTg2MjYsNTg2MjcsNTg2MjgsNTg2MjksNTg2MzAsNTg2''@;'; put 'put ''MzEsNTg2MzIsNTg2MzMsNTg2MzQsNTg2MzUsNTg2MzYsNTg2MzcsNTg2MzgsNTg2MzksNTg2NDAsNTg2NDEsNTg2NDIsNTg2NDMsNTg2NDQsNTg2NDUsNTg2NDYsNTg2NDcsNTg2NDgsNTg2NDksNTg2NTAsNTg2NTEsNTg2NTIsNTg2NTMsNTg2NTQsNTg2NTUsNTg2NTYsNTg2NTcsNTg2NTgs''@;'; put 'put ''NTg2NTksNTg2NjAsNTg2NjEsMTIyODgsMTIyODksMTIyOTAsMTgzLDcxMyw3MTEsMTY4LDEyMjkxLDEyMjkzLDgyMTIsNjUzNzQsODIxNCw4MjMwLDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMs''@;'; put 'put ''MTIzMTAsMTIzMTEsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODc1OCw4NzQzLDg3NDQsODcyMSw4NzE5LDg3NDYsODc0NSw4NzEyLDg3NTksODczMCw4ODY5LDg3NDEsODczNiw4OTc4LDg4NTcsODc0Nyw4NzUwLDg4MDEsODc4MCw4Nzc2LDg3NjUsODczMyw4ODAwLDg4MTQsODgxNSw4ODA0''@;'; put 'put ''LDg4MDUsODczNCw4NzU3LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTI4NCwxNjQsNjU1MDQsNjU1MDUsODI0MCwxNjcsODQ3MCw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsODI1MSw4NTk0LDg1OTIsODU5Myw4NTk1''@;'; put 'put ''LDEyMzA3LDU4NjYyLDU4NjYzLDU4NjY0LDU4NjY1LDU4NjY2LDU4NjY3LDU4NjY4LDU4NjY5LDU4NjcwLDU4NjcxLDU4NjcyLDU4NjczLDU4Njc0LDU4Njc1LDU4Njc2LDU4Njc3LDU4Njc4LDU4Njc5LDU4NjgwLDU4NjgxLDU4NjgyLDU4NjgzLDU4Njg0LDU4Njg1LDU4Njg2LDU4Njg3LDU4''@;'; put 'put ''Njg4LDU4Njg5LDU4NjkwLDU4NjkxLDU4NjkyLDU4NjkzLDU4Njk0LDU4Njk1LDU4Njk2LDU4Njk3LDU4Njk4LDU4Njk5LDU4NzAwLDU4NzAxLDU4NzAyLDU4NzAzLDU4NzA0LDU4NzA1LDU4NzA2LDU4NzA3LDU4NzA4LDU4NzA5LDU4NzEwLDU4NzExLDU4NzEyLDU4NzEzLDU4NzE0LDU4NzE1''@;'; put 'put ''LDU4NzE2LDU4NzE3LDU4NzE4LDU4NzE5LDU4NzIwLDU4NzIxLDU4NzIyLDU4NzIzLDU4NzI0LDU4NzI1LDU4NzI2LDU4NzI3LDU4NzI4LDU4NzI5LDU4NzMwLDU4NzMxLDU4NzMyLDU4NzMzLDU4NzM0LDU4NzM1LDU4NzM2LDU4NzM3LDU4NzM4LDU4NzM5LDU4NzQwLDU4NzQxLDU4NzQyLDU4''@;'; put 'put ''NzQzLDU4NzQ0LDU4NzQ1LDU4NzQ2LDU4NzQ3LDU4NzQ4LDU4NzQ5LDU4NzUwLDU4NzUxLDU4NzUyLDU4NzUzLDU4NzU0LDU4NzU1LDU4NzU2LDU4NzU3LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNTkyMzgsNTkyMzksNTkyNDAsNTkyNDEsNTky''@;'; put 'put ''NDIsNTkyNDMsOTM1Miw5MzUzLDkzNTQsOTM1NSw5MzU2LDkzNTcsOTM1OCw5MzU5LDkzNjAsOTM2MSw5MzYyLDkzNjMsOTM2NCw5MzY1LDkzNjYsOTM2Nyw5MzY4LDkzNjksOTM3MCw5MzcxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5''@;'; put 'put ''MzQzLDkzNDQsOTM0NSw5MzQ2LDkzNDcsOTM0OCw5MzQ5LDkzNTAsOTM1MSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDgzNjQsNTkyNDUsMTI4MzIsMTI4MzMsMTI4MzQsMTI4MzUsMTI4MzYsMTI4MzcsMTI4MzgsMTI4MzksMTI4NDAsMTI4NDEs''@;'; put 'put ''NTkyNDYsNTkyNDcsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw4NTU0LDg1NTUsNTkyNDgsNTkyNDksNTg3NTgsNTg3NTksNTg3NjAsNTg3NjEsNTg3NjIsNTg3NjMsNTg3NjQsNTg3NjUsNTg3NjYsNTg3NjcsNTg3NjgsNTg3NjksNTg3NzAsNTg3''@;'; put 'put ''NzEsNTg3NzIsNTg3NzMsNTg3NzQsNTg3NzUsNTg3NzYsNTg3NzcsNTg3NzgsNTg3NzksNTg3ODAsNTg3ODEsNTg3ODIsNTg3ODMsNTg3ODQsNTg3ODUsNTg3ODYsNTg3ODcsNTg3ODgsNTg3ODksNTg3OTAsNTg3OTEsNTg3OTIsNTg3OTMsNTg3OTQsNTg3OTUsNTg3OTYsNTg3OTcsNTg3OTgs''@;'; put 'put ''NTg3OTksNTg4MDAsNTg4MDEsNTg4MDIsNTg4MDMsNTg4MDQsNTg4MDUsNTg4MDYsNTg4MDcsNTg4MDgsNTg4MDksNTg4MTAsNTg4MTEsNTg4MTIsNTg4MTMsNTg4MTQsNTg4MTUsNTg4MTYsNTg4MTcsNTg4MTgsNTg4MTksNTg4MjAsNTg4MjEsNTg4MjIsNTg4MjMsNTg4MjQsNTg4MjUsNTg4''@;'; put 'put ''MjYsNTg4MjcsNTg4MjgsNTg4MjksNTg4MzAsNTg4MzEsNTg4MzIsNTg4MzMsNTg4MzQsNTg4MzUsNTg4MzYsNTg4MzcsNTg4MzgsNTg4MzksNTg4NDAsNTg4NDEsNTg4NDIsNTg4NDMsNTg4NDQsNTg4NDUsNTg4NDYsNTg4NDcsNTg4NDgsNTg4NDksNTg4NTAsNTg4NTEsNTg4NTIsMTIyODgs''@;'; put 'put ''NjUyODEsNjUyODIsNjUyODMsNjU1MDksNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUz''@;'; put 'put ''MDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUs''@;'; put 'put ''NjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjUzNDAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUz''@;'; put 'put ''NjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTg4NTQsNTg4NTUsNTg4NTYsNTg4NTcsNTg4NTgsNTg4NTksNTg4NjAsNTg4NjEsNTg4NjIsNTg4NjMsNTg4NjQsNTg4NjUsNTg4NjYsNTg4NjcsNTg4NjgsNTg4Njks''@;'; put 'put ''NTg4NzAsNTg4NzEsNTg4NzIsNTg4NzMsNTg4NzQsNTg4NzUsNTg4NzYsNTg4NzcsNTg4NzgsNTg4NzksNTg4ODAsNTg4ODEsNTg4ODIsNTg4ODMsNTg4ODQsNTg4ODUsNTg4ODYsNTg4ODcsNTg4ODgsNTg4ODksNTg4OTAsNTg4OTEsNTg4OTIsNTg4OTMsNTg4OTQsNTg4OTUsNTg4OTYsNTg4''@;'; put 'put ''OTcsNTg4OTgsNTg4OTksNTg5MDAsNTg5MDEsNTg5MDIsNTg5MDMsNTg5MDQsNTg5MDUsNTg5MDYsNTg5MDcsNTg5MDgsNTg5MDksNTg5MTAsNTg5MTEsNTg5MTIsNTg5MTMsNTg5MTQsNTg5MTUsNTg5MTYsNTg5MTcsNTg5MTgsNTg5MTksNTg5MjAsNTg5MjEsNTg5MjIsNTg5MjMsNTg5MjQs''@;'; put 'put ''NTg5MjUsNTg5MjYsNTg5MjcsNTg5MjgsNTg5MjksNTg5MzAsNTg5MzEsNTg5MzIsNTg5MzMsNTg5MzQsNTg5MzUsNTg5MzYsNTg5MzcsNTg5MzgsNTg5MzksNTg5NDAsNTg5NDEsNTg5NDIsNTg5NDMsNTg5NDQsNTg5NDUsNTg5NDYsNTg5NDcsNTg5NDgsNTg5NDksMTIzNTMsMTIzNTQsMTIz''@;'; put 'put ''NTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIs''@;'; put 'put ''MTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0''@;'; put 'put ''MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsNTkyNTAsNTkyNTEs''@;'; put 'put ''NTkyNTIsNTkyNTMsNTkyNTQsNTkyNTUsNTkyNTYsNTkyNTcsNTkyNTgsNTkyNTksNTkyNjAsNTg5NTAsNTg5NTEsNTg5NTIsNTg5NTMsNTg5NTQsNTg5NTUsNTg5NTYsNTg5NTcsNTg5NTgsNTg5NTksNTg5NjAsNTg5NjEsNTg5NjIsNTg5NjMsNTg5NjQsNTg5NjUsNTg5NjYsNTg5NjcsNTg5''@;'; put 'put ''NjgsNTg5NjksNTg5NzAsNTg5NzEsNTg5NzIsNTg5NzMsNTg5NzQsNTg5NzUsNTg5NzYsNTg5NzcsNTg5NzgsNTg5NzksNTg5ODAsNTg5ODEsNTg5ODIsNTg5ODMsNTg5ODQsNTg5ODUsNTg5ODYsNTg5ODcsNTg5ODgsNTg5ODksNTg5OTAsNTg5OTEsNTg5OTIsNTg5OTMsNTg5OTQsNTg5OTUs''@;'; put 'put ''NTg5OTYsNTg5OTcsNTg5OTgsNTg5OTksNTllMyw1OTAwMSw1OTAwMiw1OTAwMyw1OTAwNCw1OTAwNSw1OTAwNiw1OTAwNyw1OTAwOCw1OTAwOSw1OTAxMCw1OTAxMSw1OTAxMiw1OTAxMyw1OTAxNCw1OTAxNSw1OTAxNiw1OTAxNyw1OTAxOCw1OTAxOSw1OTAyMCw1OTAyMSw1OTAyMiw1OTAy''@;'; put 'put ''Myw1OTAyNCw1OTAyNSw1OTAyNiw1OTAyNyw1OTAyOCw1OTAyOSw1OTAzMCw1OTAzMSw1OTAzMiw1OTAzMyw1OTAzNCw1OTAzNSw1OTAzNiw1OTAzNyw1OTAzOCw1OTAzOSw1OTA0MCw1OTA0MSw1OTA0Miw1OTA0Myw1OTA0NCw1OTA0NSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1Mywx''@;'; put 'put ''MjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4''@;'; put 'put ''MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwx''@;'; put 'put ''MjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCw1OTI2MSw1OTI2''@;'; put 'put ''Miw1OTI2Myw1OTI2NCw1OTI2NSw1OTI2Niw1OTI2Nyw1OTI2OCw1OTA0Niw1OTA0Nyw1OTA0OCw1OTA0OSw1OTA1MCw1OTA1MSw1OTA1Miw1OTA1Myw1OTA1NCw1OTA1NSw1OTA1Niw1OTA1Nyw1OTA1OCw1OTA1OSw1OTA2MCw1OTA2MSw1OTA2Miw1OTA2Myw1OTA2NCw1OTA2NSw1OTA2Niw1''@;'; put 'put ''OTA2Nyw1OTA2OCw1OTA2OSw1OTA3MCw1OTA3MSw1OTA3Miw1OTA3Myw1OTA3NCw1OTA3NSw1OTA3Niw1OTA3Nyw1OTA3OCw1OTA3OSw1OTA4MCw1OTA4MSw1OTA4Miw1OTA4Myw1OTA4NCw1OTA4NSw1OTA4Niw1OTA4Nyw1OTA4OCw1OTA4OSw1OTA5MCw1OTA5MSw1OTA5Miw1OTA5Myw1OTA5''@;'; put 'put ''NCw1OTA5NSw1OTA5Niw1OTA5Nyw1OTA5OCw1OTA5OSw1OTEwMCw1OTEwMSw1OTEwMiw1OTEwMyw1OTEwNCw1OTEwNSw1OTEwNiw1OTEwNyw1OTEwOCw1OTEwOSw1OTExMCw1OTExMSw1OTExMiw1OTExMyw1OTExNCw1OTExNSw1OTExNiw1OTExNyw1OTExOCw1OTExOSw1OTEyMCw1OTEyMSw1''@;'; put 'put ''OTEyMiw1OTEyMyw1OTEyNCw1OTEyNSw1OTEyNiw1OTEyNyw1OTEyOCw1OTEyOSw1OTEzMCw1OTEzMSw1OTEzMiw1OTEzMyw1OTEzNCw1OTEzNSw1OTEzNiw1OTEzNyw1OTEzOCw1OTEzOSw1OTE0MCw1OTE0MSw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDky''@;'; put 'put ''NCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw1OTI2OSw1OTI3MCw1OTI3MSw1OTI3Miw1OTI3Myw1OTI3NCw1OTI3NSw1OTI3Niw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYx''@;'; put 'put ''LDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw1OTI3Nyw1OTI3OCw1OTI3OSw1OTI4MCw1OTI4MSw1OTI4Miw1OTI4Myw2NTA3Nyw2NTA3OCw2NTA4MSw2NTA4Miw2NTA4Nyw2NTA4OCw2NTA4NSw2NTA4Niw2NTA4OSw2NTA5MCw2NTA5MSw2NTA5Miw1OTI4NCw1OTI4NSw2NTA4Myw2NTA4''@;'; put 'put ''NCw2NTA3OSw2NTA4MCw2NTA3Myw1OTI4Niw2NTA3NSw2NTA3Niw1OTI4Nyw1OTI4OCw1OTI4OSw1OTI5MCw1OTI5MSw1OTI5Miw1OTI5Myw1OTI5NCw1OTI5NSw1OTE0Miw1OTE0Myw1OTE0NCw1OTE0NSw1OTE0Niw1OTE0Nyw1OTE0OCw1OTE0OSw1OTE1MCw1OTE1MSw1OTE1Miw1OTE1Myw1''@;'; put 'put ''OTE1NCw1OTE1NSw1OTE1Niw1OTE1Nyw1OTE1OCw1OTE1OSw1OTE2MCw1OTE2MSw1OTE2Miw1OTE2Myw1OTE2NCw1OTE2NSw1OTE2Niw1OTE2Nyw1OTE2OCw1OTE2OSw1OTE3MCw1OTE3MSw1OTE3Miw1OTE3Myw1OTE3NCw1OTE3NSw1OTE3Niw1OTE3Nyw1OTE3OCw1OTE3OSw1OTE4MCw1OTE4''@;'; put 'put ''MSw1OTE4Miw1OTE4Myw1OTE4NCw1OTE4NSw1OTE4Niw1OTE4Nyw1OTE4OCw1OTE4OSw1OTE5MCw1OTE5MSw1OTE5Miw1OTE5Myw1OTE5NCw1OTE5NSw1OTE5Niw1OTE5Nyw1OTE5OCw1OTE5OSw1OTIwMCw1OTIwMSw1OTIwMiw1OTIwMyw1OTIwNCw1OTIwNSw1OTIwNiw1OTIwNyw1OTIwOCw1''@;'; put 'put ''OTIwOSw1OTIxMCw1OTIxMSw1OTIxMiw1OTIxMyw1OTIxNCw1OTIxNSw1OTIxNiw1OTIxNyw1OTIxOCw1OTIxOSw1OTIyMCw1OTIyMSw1OTIyMiw1OTIyMyw1OTIyNCw1OTIyNSw1OTIyNiw1OTIyNyw1OTIyOCw1OTIyOSw1OTIzMCw1OTIzMSw1OTIzMiw1OTIzMyw1OTIzNCw1OTIzNSw1OTIz''@;'; put 'put ''Niw1OTIzNywxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEw''@;'; put 'put ''NzAsMTA3MSw1OTI5Niw1OTI5Nyw1OTI5OCw1OTI5OSw1OTMwMCw1OTMwMSw1OTMwMiw1OTMwMyw1OTMwNCw1OTMwNSw1OTMwNiw1OTMwNyw1OTMwOCw1OTMwOSw1OTMxMCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEw''@;'; put 'put ''ODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw1OTMxMSw1OTMxMiw1OTMxMyw1OTMxNCw1OTMxNSw1OTMxNiw1OTMxNyw1OTMxOCw1OTMxOSw1OTMyMCw1OTMyMSw1''@;'; put 'put ''OTMyMiw1OTMyMyw3MTQsNzE1LDcyOSw4MjExLDgyMTMsODIyOSw4MjQ1LDg0NTMsODQ1Nyw4NTk4LDg1OTksODYwMCw4NjAxLDg3MjUsODczNSw4NzM5LDg3ODYsODgwNiw4ODA3LDg4OTUsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1''@;'; put 'put ''NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk1ODEsOTU4Miw5NTgzLDk1ODQsOTU4NSw5NTg2LDk1ODcsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2''@;'; put 'put ''MDksOTYxMCw5NjExLDk2MTIsOTYxMyw5NjE0LDk2MTUsOTYxOSw5NjIwLDk2MjEsOTY2MCw5NjYxLDk2OTgsOTY5OSw5NzAwLDk3MDEsOTczNyw4ODUzLDEyMzA2LDEyMzE3LDEyMzE4LDU5MzI0LDU5MzI1LDU5MzI2LDU5MzI3LDU5MzI4LDU5MzI5LDU5MzMwLDU5MzMxLDU5MzMyLDU5MzMz''@;'; put 'put ''LDU5MzM0LDI1NywyMjUsNDYyLDIyNCwyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MiwyMzQsNTkzLDc3NDMsMzI0LDMyOCw1MDUsNjA5LDU5MzM3LDU5MzM4LDU5MzM5LDU5MzQwLDEyNTQ5''@;'; put 'put ''LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEy''@;'; put 'put ''NTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDU5MzQxLDU5MzQyLDU5MzQzLDU5MzQ0LDU5MzQ1LDU5MzQ2LDU5MzQ3LDU5MzQ4LDU5MzQ5LDU5MzUwLDU5MzUxLDU5MzUyLDU5MzUzLDU5MzU0LDU5MzU1LDU5MzU2LDU5MzU3LDU5MzU4LDU5MzU5''@;'; put 'put ''LDU5MzYwLDU5MzYxLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDEyOTYzLDEzMTk4LDEzMTk5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE3LDEzMjUyLDEzMjYyLDEzMjY1LDEzMjY2LDEzMjY5LDY1MDcyLDY1NTA2LDY1NTA4LDU5MzYyLDg0''@;'; put 'put ''ODEsMTI4NDksNTkzNjMsODIwOCw1OTM2NCw1OTM2NSw1OTM2NiwxMjU0MCwxMjQ0MywxMjQ0NCwxMjU0MSwxMjU0MiwxMjI5NCwxMjQ0NSwxMjQ0Niw2NTA5Nyw2NTA5OCw2NTA5OSw2NTEwMCw2NTEwMSw2NTEwMiw2NTEwMyw2NTEwNCw2NTEwNSw2NTEwNiw2NTEwOCw2NTEwOSw2NTExMCw2''@;'; put 'put ''NTExMSw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw2NTExOSw2NTEyMCw2NTEyMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTEyOCw2NTEyOSw2NTEzMCw2NTEzMSwxMjM1MCwxMjI3MiwxMjI3MywxMjI3NCwxMjI3NSwxMjI3NiwxMjI3NywxMjI3OCwxMjI3''@;'; put 'put ''OSwxMjI4MCwxMjI4MSwxMjI4MiwxMjI4MywxMjI5NSw1OTM4MCw1OTM4MSw1OTM4Miw1OTM4Myw1OTM4NCw1OTM4NSw1OTM4Niw1OTM4Nyw1OTM4OCw1OTM4OSw1OTM5MCw1OTM5MSw1OTM5Miw5NDcyLDk0NzMsOTQ3NCw5NDc1LDk0NzYsOTQ3Nyw5NDc4LDk0NzksOTQ4MCw5NDgxLDk0ODIs''@;'; put 'put ''OTQ4Myw5NDg0LDk0ODUsOTQ4Niw5NDg3LDk0ODgsOTQ4OSw5NDkwLDk0OTEsOTQ5Miw5NDkzLDk0OTQsOTQ5NSw5NDk2LDk0OTcsOTQ5OCw5NDk5LDk1MDAsOTUwMSw5NTAyLDk1MDMsOTUwNCw5NTA1LDk1MDYsOTUwNyw5NTA4LDk1MDksOTUxMCw5NTExLDk1MTIsOTUxMyw5NTE0LDk1MTUs''@;'; put 'put ''OTUxNiw5NTE3LDk1MTgsOTUxOSw5NTIwLDk1MjEsOTUyMiw5NTIzLDk1MjQsOTUyNSw5NTI2LDk1MjcsOTUyOCw5NTI5LDk1MzAsOTUzMSw5NTMyLDk1MzMsOTUzNCw5NTM1LDk1MzYsOTUzNyw5NTM4LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0Niw5NTQ3LDU5Mzkz''@;'; put 'put ''LDU5Mzk0LDU5Mzk1LDU5Mzk2LDU5Mzk3LDU5Mzk4LDU5Mzk5LDU5NDAwLDU5NDAxLDU5NDAyLDU5NDAzLDU5NDA0LDU5NDA1LDU5NDA2LDU5NDA3LDI5NDA0LDI5NDA1LDI5NDA3LDI5NDEwLDI5NDExLDI5NDEyLDI5NDEzLDI5NDE0LDI5NDE1LDI5NDE4LDI5NDE5LDI5NDI5LDI5NDMwLDI5''@;'; put 'put ''NDMzLDI5NDM3LDI5NDM4LDI5NDM5LDI5NDQwLDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ2LDI5NDQ3LDI5NDQ4LDI5NDQ5LDI5NDUxLDI5NDUyLDI5NDUzLDI5NDU1LDI5NDU2LDI5NDU3LDI5NDU4LDI5NDYwLDI5NDY0LDI5NDY1LDI5NDY2LDI5NDcxLDI5NDcyLDI5NDc1LDI5NDc2LDI5NDc4''@;'; put 'put ''LDI5NDc5LDI5NDgwLDI5NDg1LDI5NDg3LDI5NDg4LDI5NDkwLDI5NDkxLDI5NDkzLDI5NDk0LDI5NDk4LDI5NDk5LDI5NTAwLDI5NTAxLDI5NTA0LDI5NTA1LDI5NTA2LDI5NTA3LDI5NTA4LDI5NTA5LDI5NTEwLDI5NTExLDI5NTEyLDI5NTEzLDI5NTE0LDI5NTE1LDI5NTE2LDI5NTE4LDI5''@;'; put 'put ''NTE5LDI5NTIxLDI5NTIzLDI5NTI0LDI5NTI1LDI5NTI2LDI5NTI4LDI5NTI5LDI5NTMwLDI5NTMxLDI5NTMyLDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM3LDI5NTM4LDI5NTM5LDI5NTQwLDI5NTQxLDI5NTQyLDI5NTQzLDI5NTQ0LDI5NTQ1LDI5NTQ2LDI5NTQ3LDI5NTUwLDI5NTUyLDI5NTUz''@;'; put 'put ''LDU3MzQ0LDU3MzQ1LDU3MzQ2LDU3MzQ3LDU3MzQ4LDU3MzQ5LDU3MzUwLDU3MzUxLDU3MzUyLDU3MzUzLDU3MzU0LDU3MzU1LDU3MzU2LDU3MzU3LDU3MzU4LDU3MzU5LDU3MzYwLDU3MzYxLDU3MzYyLDU3MzYzLDU3MzY0LDU3MzY1LDU3MzY2LDU3MzY3LDU3MzY4LDU3MzY5LDU3MzcwLDU3''@;'; put 'put ''MzcxLDU3MzcyLDU3MzczLDU3Mzc0LDU3Mzc1LDU3Mzc2LDU3Mzc3LDU3Mzc4LDU3Mzc5LDU3MzgwLDU3MzgxLDU3MzgyLDU3MzgzLDU3Mzg0LDU3Mzg1LDU3Mzg2LDU3Mzg3LDU3Mzg4LDU3Mzg5LDU3MzkwLDU3MzkxLDU3MzkyLDU3MzkzLDU3Mzk0LDU3Mzk1LDU3Mzk2LDU3Mzk3LDU3Mzk4''@;'; put 'put ''LDU3Mzk5LDU3NDAwLDU3NDAxLDU3NDAyLDU3NDAzLDU3NDA0LDU3NDA1LDU3NDA2LDU3NDA3LDU3NDA4LDU3NDA5LDU3NDEwLDU3NDExLDU3NDEyLDU3NDEzLDU3NDE0LDU3NDE1LDU3NDE2LDU3NDE3LDU3NDE4LDU3NDE5LDU3NDIwLDU3NDIxLDU3NDIyLDU3NDIzLDU3NDI0LDU3NDI1LDU3''@;'; put 'put ''NDI2LDU3NDI3LDU3NDI4LDU3NDI5LDU3NDMwLDU3NDMxLDU3NDMyLDU3NDMzLDU3NDM0LDU3NDM1LDU3NDM2LDU3NDM3LDI5NTU0LDI5NTU1LDI5NTU2LDI5NTU3LDI5NTU4LDI5NTU5LDI5NTYwLDI5NTYxLDI5NTYyLDI5NTYzLDI5NTY0LDI5NTY1LDI5NTY3LDI5NTY4LDI5NTY5LDI5NTcw''@;'; put 'put ''LDI5NTcxLDI5NTczLDI5NTc0LDI5NTc2LDI5NTc4LDI5NTgwLDI5NTgxLDI5NTgzLDI5NTg0LDI5NTg2LDI5NTg3LDI5NTg4LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTkzLDI5NTk0LDI5NTk2LDI5NTk3LDI5NTk4LDI5NjAwLDI5NjAxLDI5NjAzLDI5NjA0LDI5NjA1LDI5NjA2LDI5NjA3LDI5''@;'; put 'put ''NjA4LDI5NjEwLDI5NjEyLDI5NjEzLDI5NjE3LDI5NjIwLDI5NjIxLDI5NjIyLDI5NjI0LDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMwLDI5NjMxLDI5NjMzLDI5NjM1LDI5NjM2LDI5NjM3LDI5NjM4LDI5NjM5LDI5NjQzLDI5NjQ0LDI5NjQ2LDI5NjUwLDI5NjUxLDI5NjUyLDI5NjUzLDI5NjU0''@;'; put 'put ''LDI5NjU1LDI5NjU2LDI5NjU4LDI5NjU5LDI5NjYwLDI5NjYxLDI5NjYzLDI5NjY1LDI5NjY2LDI5NjY3LDI5NjY4LDI5NjcwLDI5NjcyLDI5Njc0LDI5Njc1LDI5Njc2LDI5Njc4LDI5Njc5LDI5NjgwLDI5NjgxLDI5NjgzLDI5Njg0LDI5Njg1LDI5Njg2LDI5Njg3LDU3NDM4LDU3NDM5LDU3''@;'; put 'put ''NDQwLDU3NDQxLDU3NDQyLDU3NDQzLDU3NDQ0LDU3NDQ1LDU3NDQ2LDU3NDQ3LDU3NDQ4LDU3NDQ5LDU3NDUwLDU3NDUxLDU3NDUyLDU3NDUzLDU3NDU0LDU3NDU1LDU3NDU2LDU3NDU3LDU3NDU4LDU3NDU5LDU3NDYwLDU3NDYxLDU3NDYyLDU3NDYzLDU3NDY0LDU3NDY1LDU3NDY2LDU3NDY3''@;'; put 'put ''LDU3NDY4LDU3NDY5LDU3NDcwLDU3NDcxLDU3NDcyLDU3NDczLDU3NDc0LDU3NDc1LDU3NDc2LDU3NDc3LDU3NDc4LDU3NDc5LDU3NDgwLDU3NDgxLDU3NDgyLDU3NDgzLDU3NDg0LDU3NDg1LDU3NDg2LDU3NDg3LDU3NDg4LDU3NDg5LDU3NDkwLDU3NDkxLDU3NDkyLDU3NDkzLDU3NDk0LDU3''@;'; put 'put ''NDk1LDU3NDk2LDU3NDk3LDU3NDk4LDU3NDk5LDU3NTAwLDU3NTAxLDU3NTAyLDU3NTAzLDU3NTA0LDU3NTA1LDU3NTA2LDU3NTA3LDU3NTA4LDU3NTA5LDU3NTEwLDU3NTExLDU3NTEyLDU3NTEzLDU3NTE0LDU3NTE1LDU3NTE2LDU3NTE3LDU3NTE4LDU3NTE5LDU3NTIwLDU3NTIxLDU3NTIy''@;'; put 'put ''LDU3NTIzLDU3NTI0LDU3NTI1LDU3NTI2LDU3NTI3LDU3NTI4LDU3NTI5LDU3NTMwLDU3NTMxLDI5Njg4LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkyLDI5NjkzLDI5Njk0LDI5Njk1LDI5Njk2LDI5Njk3LDI5Njk4LDI5NzAwLDI5NzAzLDI5NzA0LDI5NzA3LDI5NzA4LDI5NzA5LDI5NzEwLDI5''@;'; put 'put ''NzEzLDI5NzE0LDI5NzE1LDI5NzE2LDI5NzE3LDI5NzE4LDI5NzE5LDI5NzIwLDI5NzIxLDI5NzI0LDI5NzI1LDI5NzI2LDI5NzI3LDI5NzI4LDI5NzI5LDI5NzMxLDI5NzMyLDI5NzM1LDI5NzM3LDI5NzM5LDI5NzQxLDI5NzQzLDI5NzQ1LDI5NzQ2LDI5NzUxLDI5NzUyLDI5NzUzLDI5NzU0''@;'; put 'put ''LDI5NzU1LDI5NzU3LDI5NzU4LDI5NzU5LDI5NzYwLDI5NzYyLDI5NzYzLDI5NzY0LDI5NzY1LDI5NzY2LDI5NzY3LDI5NzY4LDI5NzY5LDI5NzcwLDI5NzcxLDI5NzcyLDI5NzczLDI5Nzc0LDI5Nzc1LDI5Nzc2LDI5Nzc3LDI5Nzc4LDI5Nzc5LDI5NzgwLDI5NzgyLDI5Nzg0LDI5Nzg5LDI5''@;'; put 'put ''NzkyLDI5NzkzLDI5Nzk0LDI5Nzk1LDI5Nzk2LDI5Nzk3LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAxLDI5ODAyLDI5ODAzLDI5ODA0LDI5ODA2LDI5ODA3LDI5ODA5LDI5ODEwLDI5ODExLDI5ODEyLDI5ODEzLDI5ODE2LDI5ODE3LDI5ODE4LDU3NTMyLDU3NTMzLDU3NTM0LDU3NTM1LDU3NTM2''@;'; put 'put ''LDU3NTM3LDU3NTM4LDU3NTM5LDU3NTQwLDU3NTQxLDU3NTQyLDU3NTQzLDU3NTQ0LDU3NTQ1LDU3NTQ2LDU3NTQ3LDU3NTQ4LDU3NTQ5LDU3NTUwLDU3NTUxLDU3NTUyLDU3NTUzLDU3NTU0LDU3NTU1LDU3NTU2LDU3NTU3LDU3NTU4LDU3NTU5LDU3NTYwLDU3NTYxLDU3NTYyLDU3NTYzLDU3''@;'; put 'put ''NTY0LDU3NTY1LDU3NTY2LDU3NTY3LDU3NTY4LDU3NTY5LDU3NTcwLDU3NTcxLDU3NTcyLDU3NTczLDU3NTc0LDU3NTc1LDU3NTc2LDU3NTc3LDU3NTc4LDU3NTc5LDU3NTgwLDU3NTgxLDU3NTgyLDU3NTgzLDU3NTg0LDU3NTg1LDU3NTg2LDU3NTg3LDU3NTg4LDU3NTg5LDU3NTkwLDU3NTkx''@;'; put 'put ''LDU3NTkyLDU3NTkzLDU3NTk0LDU3NTk1LDU3NTk2LDU3NTk3LDU3NTk4LDU3NTk5LDU3NjAwLDU3NjAxLDU3NjAyLDU3NjAzLDU3NjA0LDU3NjA1LDU3NjA2LDU3NjA3LDU3NjA4LDU3NjA5LDU3NjEwLDU3NjExLDU3NjEyLDU3NjEzLDU3NjE0LDU3NjE1LDU3NjE2LDU3NjE3LDU3NjE4LDU3''@;'; put 'put ''NjE5LDU3NjIwLDU3NjIxLDU3NjIyLDU3NjIzLDU3NjI0LDU3NjI1LDI5ODE5LDI5ODIwLDI5ODIxLDI5ODIzLDI5ODI2LDI5ODI4LDI5ODI5LDI5ODMwLDI5ODMyLDI5ODMzLDI5ODM0LDI5ODM2LDI5ODM3LDI5ODM5LDI5ODQxLDI5ODQyLDI5ODQzLDI5ODQ0LDI5ODQ1LDI5ODQ2LDI5ODQ3''@;'; put 'put ''LDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUxLDI5ODUzLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU4LDI5ODU5LDI5ODYwLDI5ODYxLDI5ODYyLDI5ODY2LDI5ODY3LDI5ODY4LDI5ODY5LDI5ODcwLDI5ODcxLDI5ODcyLDI5ODczLDI5ODc0LDI5ODc1LDI5ODc2LDI5ODc3LDI5ODc4LDI5ODc5LDI5''@;'; put 'put ''ODgwLDI5ODgxLDI5ODgzLDI5ODg0LDI5ODg1LDI5ODg2LDI5ODg3LDI5ODg4LDI5ODg5LDI5ODkwLDI5ODkxLDI5ODkyLDI5ODkzLDI5ODk0LDI5ODk1LDI5ODk2LDI5ODk3LDI5ODk4LDI5ODk5LDI5OTAwLDI5OTAxLDI5OTAyLDI5OTAzLDI5OTA0LDI5OTA1LDI5OTA3LDI5OTA4LDI5OTA5''@;'; put 'put ''LDI5OTEwLDI5OTExLDI5OTEyLDI5OTEzLDI5OTE0LDI5OTE1LDI5OTE3LDI5OTE5LDI5OTIxLDI5OTI1LDI5OTI3LDI5OTI4LDI5OTI5LDI5OTMwLDI5OTMxLDI5OTMyLDI5OTMzLDI5OTM2LDI5OTM3LDI5OTM4LDU3NjI2LDU3NjI3LDU3NjI4LDU3NjI5LDU3NjMwLDU3NjMxLDU3NjMyLDU3''@;'; put 'put ''NjMzLDU3NjM0LDU3NjM1LDU3NjM2LDU3NjM3LDU3NjM4LDU3NjM5LDU3NjQwLDU3NjQxLDU3NjQyLDU3NjQzLDU3NjQ0LDU3NjQ1LDU3NjQ2LDU3NjQ3LDU3NjQ4LDU3NjQ5LDU3NjUwLDU3NjUxLDU3NjUyLDU3NjUzLDU3NjU0LDU3NjU1LDU3NjU2LDU3NjU3LDU3NjU4LDU3NjU5LDU3NjYw''@;'; put 'put ''LDU3NjYxLDU3NjYyLDU3NjYzLDU3NjY0LDU3NjY1LDU3NjY2LDU3NjY3LDU3NjY4LDU3NjY5LDU3NjcwLDU3NjcxLDU3NjcyLDU3NjczLDU3Njc0LDU3Njc1LDU3Njc2LDU3Njc3LDU3Njc4LDU3Njc5LDU3NjgwLDU3NjgxLDU3NjgyLDU3NjgzLDU3Njg0LDU3Njg1LDU3Njg2LDU3Njg3LDU3''@;'; put 'put ''Njg4LDU3Njg5LDU3NjkwLDU3NjkxLDU3NjkyLDU3NjkzLDU3Njk0LDU3Njk1LDU3Njk2LDU3Njk3LDU3Njk4LDU3Njk5LDU3NzAwLDU3NzAxLDU3NzAyLDU3NzAzLDU3NzA0LDU3NzA1LDU3NzA2LDU3NzA3LDU3NzA4LDU3NzA5LDU3NzEwLDU3NzExLDU3NzEyLDU3NzEzLDU3NzE0LDU3NzE1''@;'; put 'put ''LDU3NzE2LDU3NzE3LDU3NzE4LDU3NzE5LDI5OTM5LDI5OTQxLDI5OTQ0LDI5OTQ1LDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTQ5LDI5OTUwLDI5OTUyLDI5OTUzLDI5OTU0LDI5OTU1LDI5OTU3LDI5OTU4LDI5OTU5LDI5OTYwLDI5OTYxLDI5OTYyLDI5OTYzLDI5OTY0LDI5OTY2LDI5OTY4LDI5''@;'; put 'put ''OTcwLDI5OTcyLDI5OTczLDI5OTc0LDI5OTc1LDI5OTc5LDI5OTgxLDI5OTgyLDI5OTg0LDI5OTg1LDI5OTg2LDI5OTg3LDI5OTg4LDI5OTkwLDI5OTkxLDI5OTk0LDI5OTk4LDMwMDA0LDMwMDA2LDMwMDA5LDMwMDEyLDMwMDEzLDMwMDE1LDMwMDE3LDMwMDE4LDMwMDE5LDMwMDIwLDMwMDIy''@;'; put 'put ''LDMwMDIzLDMwMDI1LDMwMDI2LDMwMDI5LDMwMDMyLDMwMDMzLDMwMDM0LDMwMDM1LDMwMDM3LDMwMDM4LDMwMDM5LDMwMDQwLDMwMDQ1LDMwMDQ2LDMwMDQ3LDMwMDQ4LDMwMDQ5LDMwMDUwLDMwMDUxLDMwMDUyLDMwMDU1LDMwMDU2LDMwMDU3LDMwMDU5LDMwMDYwLDMwMDYxLDMwMDYyLDMw''@;'; put 'put ''MDYzLDMwMDY0LDMwMDY1LDMwMDY3LDMwMDY5LDMwMDcwLDMwMDcxLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgwLDMwMDgxLDMwMDgyLDMwMDg0LDMwMDg1LDMwMDg3LDU3NzIwLDU3NzIxLDU3NzIyLDU3NzIzLDU3NzI0LDU3NzI1LDU3NzI2LDU3NzI3LDU3NzI4LDU3NzI5''@;'; put 'put ''LDU3NzMwLDU3NzMxLDU3NzMyLDU3NzMzLDU3NzM0LDU3NzM1LDU3NzM2LDU3NzM3LDU3NzM4LDU3NzM5LDU3NzQwLDU3NzQxLDU3NzQyLDU3NzQzLDU3NzQ0LDU3NzQ1LDU3NzQ2LDU3NzQ3LDU3NzQ4LDU3NzQ5LDU3NzUwLDU3NzUxLDU3NzUyLDU3NzUzLDU3NzU0LDU3NzU1LDU3NzU2LDU3''@;'; put 'put ''NzU3LDU3NzU4LDU3NzU5LDU3NzYwLDU3NzYxLDU3NzYyLDU3NzYzLDU3NzY0LDU3NzY1LDU3NzY2LDU3NzY3LDU3NzY4LDU3NzY5LDU3NzcwLDU3NzcxLDU3NzcyLDU3NzczLDU3Nzc0LDU3Nzc1LDU3Nzc2LDU3Nzc3LDU3Nzc4LDU3Nzc5LDU3NzgwLDU3NzgxLDU3NzgyLDU3NzgzLDU3Nzg0''@;'; put 'put ''LDU3Nzg1LDU3Nzg2LDU3Nzg3LDU3Nzg4LDU3Nzg5LDU3NzkwLDU3NzkxLDU3NzkyLDU3NzkzLDU3Nzk0LDU3Nzk1LDU3Nzk2LDU3Nzk3LDU3Nzk4LDU3Nzk5LDU3ODAwLDU3ODAxLDU3ODAyLDU3ODAzLDU3ODA0LDU3ODA1LDU3ODA2LDU3ODA3LDU3ODA4LDU3ODA5LDU3ODEwLDU3ODExLDU3''@;'; put 'put ''ODEyLDU3ODEzLDMwMDg4LDMwMDg5LDMwMDkwLDMwMDkyLDMwMDkzLDMwMDk0LDMwMDk2LDMwMDk5LDMwMTAxLDMwMTA0LDMwMTA3LDMwMTA4LDMwMTEwLDMwMTE0LDMwMTE4LDMwMTE5LDMwMTIwLDMwMTIxLDMwMTIyLDMwMTI1LDMwMTM0LDMwMTM1LDMwMTM4LDMwMTM5LDMwMTQzLDMwMTQ0''@;'; put 'put ''LDMwMTQ1LDMwMTUwLDMwMTU1LDMwMTU2LDMwMTU4LDMwMTU5LDMwMTYwLDMwMTYxLDMwMTYzLDMwMTY3LDMwMTY5LDMwMTcwLDMwMTcyLDMwMTczLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgxLDMwMTg1LDMwMTg4LDMwMTg5LDMwMTkwLDMwMTkxLDMwMTk0LDMwMTk1LDMwMTk3LDMwMTk4LDMw''@;'; put 'put ''MTk5LDMwMjAwLDMwMjAyLDMwMjAzLDMwMjA1LDMwMjA2LDMwMjEwLDMwMjEyLDMwMjE0LDMwMjE1LDMwMjE2LDMwMjE3LDMwMjE5LDMwMjIxLDMwMjIyLDMwMjIzLDMwMjI1LDMwMjI2LDMwMjI3LDMwMjI4LDMwMjMwLDMwMjM0LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQxLDMwMjQzLDMwMjQ3''@;'; put 'put ''LDMwMjQ4LDMwMjUyLDMwMjU0LDMwMjU1LDMwMjU3LDMwMjU4LDMwMjYyLDMwMjYzLDMwMjY1LDMwMjY2LDMwMjY3LDMwMjY5LDMwMjczLDMwMjc0LDMwMjc2LDU3ODE0LDU3ODE1LDU3ODE2LDU3ODE3LDU3ODE4LDU3ODE5LDU3ODIwLDU3ODIxLDU3ODIyLDU3ODIzLDU3ODI0LDU3ODI1LDU3''@;'; put 'put ''ODI2LDU3ODI3LDU3ODI4LDU3ODI5LDU3ODMwLDU3ODMxLDU3ODMyLDU3ODMzLDU3ODM0LDU3ODM1LDU3ODM2LDU3ODM3LDU3ODM4LDU3ODM5LDU3ODQwLDU3ODQxLDU3ODQyLDU3ODQzLDU3ODQ0LDU3ODQ1LDU3ODQ2LDU3ODQ3LDU3ODQ4LDU3ODQ5LDU3ODUwLDU3ODUxLDU3ODUyLDU3ODUz''@;'; put 'put ''LDU3ODU0LDU3ODU1LDU3ODU2LDU3ODU3LDU3ODU4LDU3ODU5LDU3ODYwLDU3ODYxLDU3ODYyLDU3ODYzLDU3ODY0LDU3ODY1LDU3ODY2LDU3ODY3LDU3ODY4LDU3ODY5LDU3ODcwLDU3ODcxLDU3ODcyLDU3ODczLDU3ODc0LDU3ODc1LDU3ODc2LDU3ODc3LDU3ODc4LDU3ODc5LDU3ODgwLDU3''@;'; put 'put ''ODgxLDU3ODgyLDU3ODgzLDU3ODg0LDU3ODg1LDU3ODg2LDU3ODg3LDU3ODg4LDU3ODg5LDU3ODkwLDU3ODkxLDU3ODkyLDU3ODkzLDU3ODk0LDU3ODk1LDU3ODk2LDU3ODk3LDU3ODk4LDU3ODk5LDU3OTAwLDU3OTAxLDU3OTAyLDU3OTAzLDU3OTA0LDU3OTA1LDU3OTA2LDU3OTA3LDMwMjc3''@;'; put 'put ''LDMwMjc4LDMwMjc5LDMwMjgwLDMwMjgxLDMwMjgyLDMwMjgzLDMwMjg2LDMwMjg3LDMwMjg4LDMwMjg5LDMwMjkwLDMwMjkxLDMwMjkzLDMwMjk1LDMwMjk2LDMwMjk3LDMwMjk4LDMwMjk5LDMwMzAxLDMwMzAzLDMwMzA0LDMwMzA1LDMwMzA2LDMwMzA4LDMwMzA5LDMwMzEwLDMwMzExLDMw''@;'; put 'put ''MzEyLDMwMzEzLDMwMzE0LDMwMzE2LDMwMzE3LDMwMzE4LDMwMzIwLDMwMzIxLDMwMzIyLDMwMzIzLDMwMzI0LDMwMzI1LDMwMzI2LDMwMzI3LDMwMzI5LDMwMzMwLDMwMzMyLDMwMzM1LDMwMzM2LDMwMzM3LDMwMzM5LDMwMzQxLDMwMzQ1LDMwMzQ2LDMwMzQ4LDMwMzQ5LDMwMzUxLDMwMzUy''@;'; put 'put ''LDMwMzU0LDMwMzU2LDMwMzU3LDMwMzU5LDMwMzYwLDMwMzYyLDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY2LDMwMzY3LDMwMzY4LDMwMzY5LDMwMzcwLDMwMzcxLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc3LDMwMzc4LDMwMzc5LDMwMzgwLDMwMzgxLDMwMzgzLDMwMzg0LDMwMzg3LDMw''@;'; put 'put ''Mzg5LDMwMzkwLDMwMzkxLDMwMzkyLDMwMzkzLDMwMzk0LDMwMzk1LDMwMzk2LDMwMzk3LDMwMzk4LDMwNDAwLDMwNDAxLDMwNDAzLDIxODM0LDM4NDYzLDIyNDY3LDI1Mzg0LDIxNzEwLDIxNzY5LDIxNjk2LDMwMzUzLDMwMjg0LDM0MTA4LDMwNzAyLDMzNDA2LDMwODYxLDI5MjMzLDM4NTUy''@;'; put 'put ''LDM4Nzk3LDI3Njg4LDIzNDMzLDIwNDc0LDI1MzUzLDI2MjYzLDIzNzM2LDMzMDE4LDI2Njk2LDMyOTQyLDI2MTE0LDMwNDE0LDIwOTg1LDI1OTQyLDI5MTAwLDMyNzUzLDM0OTQ4LDIwNjU4LDIyODg1LDI1MDM0LDI4NTk1LDMzNDUzLDI1NDIwLDI1MTcwLDIxNDg1LDIxNTQzLDMxNDk0LDIw''@;'; put 'put ''ODQzLDMwMTE2LDI0MDUyLDI1MzAwLDM2Mjk5LDM4Nzc0LDI1MjI2LDMyNzkzLDIyMzY1LDM4NzEyLDMyNjEwLDI5MjQwLDMwMzMzLDI2NTc1LDMwMzM0LDI1NjcwLDIwMzM2LDM2MTMzLDI1MzA4LDMxMjU1LDI2MDAxLDI5Njc3LDI1NjQ0LDI1MjAzLDMzMzI0LDM5MDQxLDI2NDk1LDI5MjU2''@;'; put 'put ''LDI1MTk4LDI1MjkyLDIwMjc2LDI5OTIzLDIxMzIyLDIxMTUwLDMyNDU4LDM3MDMwLDI0MTEwLDI2NzU4LDI3MDM2LDMzMTUyLDMyNDY1LDI2ODM0LDMwOTE3LDM0NDQ0LDM4MjI1LDIwNjIxLDM1ODc2LDMzNTAyLDMyOTkwLDIxMjUzLDM1MDkwLDIxMDkzLDMwNDA0LDMwNDA3LDMwNDA5LDMw''@;'; put 'put ''NDExLDMwNDEyLDMwNDE5LDMwNDIxLDMwNDI1LDMwNDI2LDMwNDI4LDMwNDI5LDMwNDMwLDMwNDMyLDMwNDMzLDMwNDM0LDMwNDM1LDMwNDM2LDMwNDM4LDMwNDM5LDMwNDQwLDMwNDQxLDMwNDQyLDMwNDQzLDMwNDQ0LDMwNDQ1LDMwNDQ4LDMwNDUxLDMwNDUzLDMwNDU0LDMwNDU1LDMwNDU4''@;'; put 'put ''LDMwNDU5LDMwNDYxLDMwNDYzLDMwNDY0LDMwNDY2LDMwNDY3LDMwNDY5LDMwNDcwLDMwNDc0LDMwNDc2LDMwNDc4LDMwNDc5LDMwNDgwLDMwNDgxLDMwNDgyLDMwNDgzLDMwNDg0LDMwNDg1LDMwNDg2LDMwNDg3LDMwNDg4LDMwNDkxLDMwNDkyLDMwNDkzLDMwNDk0LDMwNDk3LDMwNDk5LDMw''@;'; put 'put ''NTAwLDMwNTAxLDMwNTAzLDMwNTA2LDMwNTA3LDMwNTA4LDMwNTEwLDMwNTEyLDMwNTEzLDMwNTE0LDMwNTE1LDMwNTE2LDMwNTIxLDMwNTIzLDMwNTI1LDMwNTI2LDMwNTI3LDMwNTMwLDMwNTMyLDMwNTMzLDMwNTM0LDMwNTM2LDMwNTM3LDMwNTM4LDMwNTM5LDMwNTQwLDMwNTQxLDMwNTQy''@;'; put 'put ''LDMwNTQzLDMwNTQ2LDMwNTQ3LDMwNTQ4LDMwNTQ5LDMwNTUwLDMwNTUxLDMwNTUyLDMwNTUzLDMwNTU2LDM0MTgwLDM4NjQ5LDIwNDQ1LDIyNTYxLDM5MjgxLDIzNDUzLDI1MjY1LDI1MjUzLDI2MjkyLDM1OTYxLDQwMDc3LDI5MTkwLDI2NDc5LDMwODY1LDI0NzU0LDIxMzI5LDIxMjcxLDM2''@;'; put 'put ''NzQ0LDMyOTcyLDM2MTI1LDM4MDQ5LDIwNDkzLDI5Mzg0LDIyNzkxLDI0ODExLDI4OTUzLDM0OTg3LDIyODY4LDMzNTE5LDI2NDEyLDMxNTI4LDIzODQ5LDMyNTAzLDI5OTk3LDI3ODkzLDM2NDU0LDM2ODU2LDM2OTI0LDQwNzYzLDI3NjA0LDM3MTQ1LDMxNTA4LDI0NDQ0LDMwODg3LDM0MDA2''@;'; put 'put ''LDM0MTA5LDI3NjA1LDI3NjA5LDI3NjA2LDI0MDY1LDI0MTk5LDMwMjAxLDM4MzgxLDI1OTQ5LDI0MzMwLDI0NTE3LDM2NzY3LDIyNzIxLDMzMjE4LDM2OTkxLDM4NDkxLDM4ODI5LDM2NzkzLDMyNTM0LDM2MTQwLDI1MTUzLDIwNDE1LDIxNDY0LDIxMzQyLDM2Nzc2LDM2Nzc3LDM2Nzc5LDM2''@;'; put 'put ''OTQxLDI2NjMxLDI0NDI2LDMzMTc2LDM0OTIwLDQwMTUwLDI0OTcxLDIxMDM1LDMwMjUwLDI0NDI4LDI1OTk2LDI4NjI2LDI4MzkyLDIzNDg2LDI1NjcyLDIwODUzLDIwOTEyLDI2NTY0LDE5OTkzLDMxMTc3LDM5MjkyLDI4ODUxLDMwNTU3LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTY0LDMwNTY3''@;'; put 'put ''LDMwNTY5LDMwNTcwLDMwNTczLDMwNTc0LDMwNTc1LDMwNTc2LDMwNTc3LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTgxLDMwNTgyLDMwNTgzLDMwNTg0LDMwNTg2LDMwNTg3LDMwNTg4LDMwNTkzLDMwNTk0LDMwNTk1LDMwNTk4LDMwNTk5LDMwNjAwLDMwNjAxLDMwNjAyLDMwNjAzLDMwNjA3LDMw''@;'; put 'put ''NjA4LDMwNjExLDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE1LDMwNjE2LDMwNjE3LDMwNjE4LDMwNjE5LDMwNjIwLDMwNjIxLDMwNjIyLDMwNjI1LDMwNjI3LDMwNjI4LDMwNjMwLDMwNjMyLDMwNjM1LDMwNjM3LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQyLDMwNjQ0LDMwNjQ2LDMwNjQ3LDMwNjQ4''@;'; put 'put ''LDMwNjQ5LDMwNjUwLDMwNjUyLDMwNjU0LDMwNjU2LDMwNjU3LDMwNjU4LDMwNjU5LDMwNjYwLDMwNjYxLDMwNjYyLDMwNjYzLDMwNjY0LDMwNjY1LDMwNjY2LDMwNjY3LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjcyLDMwNjczLDMwNjc0LDMwNjc1LDMwNjc2LDMwNjc3LDMwNjc4LDMwNjgwLDMw''@;'; put 'put ''NjgxLDMwNjgyLDMwNjg1LDMwNjg2LDMwNjg3LDMwNjg4LDMwNjg5LDMwNjkyLDMwMTQ5LDI0MTgyLDI5NjI3LDMzNzYwLDI1NzczLDI1MzIwLDM4MDY5LDI3ODc0LDIxMzM4LDIxMTg3LDI1NjE1LDM4MDgyLDMxNjM2LDIwMjcxLDI0MDkxLDMzMzM0LDMzMDQ2LDMzMTYyLDI4MTk2LDI3ODUw''@;'; put 'put ''LDM5NTM5LDI1NDI5LDIxMzQwLDIxNzU0LDM0OTE3LDIyNDk2LDE5OTgxLDI0MDY3LDI3NDkzLDMxODA3LDM3MDk2LDI0NTk4LDI1ODMwLDI5NDY4LDM1MDA5LDI2NDQ4LDI1MTY1LDM2MTMwLDMwNTcyLDM2MzkzLDM3MzE5LDI0NDI1LDMzNzU2LDM0MDgxLDM5MTg0LDIxNDQyLDM0NDUzLDI3''@;'; put 'put ''NTMxLDI0ODEzLDI0ODA4LDI4Nzk5LDMzNDg1LDMzMzI5LDIwMTc5LDI3ODE1LDM0MjU1LDI1ODA1LDMxOTYxLDI3MTMzLDI2MzYxLDMzNjA5LDIxMzk3LDMxNTc0LDIwMzkxLDIwODc2LDI3OTc5LDIzNjE4LDM2NDYxLDI1NTU0LDIxNDQ5LDMzNTgwLDMzNTkwLDI2NTk3LDMwOTAwLDI1NjYx''@;'; put 'put ''LDIzNTE5LDIzNzAwLDI0MDQ2LDM1ODE1LDI1Mjg2LDI2NjEyLDM1OTYyLDI1NjAwLDI1NTMwLDM0NjMzLDM5MzA3LDM1ODYzLDMyNTQ0LDM4MTMwLDIwMTM1LDM4NDE2LDM5MDc2LDI2MTI0LDI5NDYyLDMwNjk0LDMwNjk2LDMwNjk4LDMwNzAzLDMwNzA0LDMwNzA1LDMwNzA2LDMwNzA4LDMw''@;'; put 'put ''NzA5LDMwNzExLDMwNzEzLDMwNzE0LDMwNzE1LDMwNzE2LDMwNzIzLDMwNzI0LDMwNzI1LDMwNzI2LDMwNzI3LDMwNzI4LDMwNzMwLDMwNzMxLDMwNzM0LDMwNzM1LDMwNzM2LDMwNzM5LDMwNzQxLDMwNzQ1LDMwNzQ3LDMwNzUwLDMwNzUyLDMwNzUzLDMwNzU0LDMwNzU2LDMwNzYwLDMwNzYy''@;'; put 'put ''LDMwNzYzLDMwNzY2LDMwNzY3LDMwNzY5LDMwNzcwLDMwNzcxLDMwNzczLDMwNzc0LDMwNzgxLDMwNzgzLDMwNzg1LDMwNzg2LDMwNzg3LDMwNzg4LDMwNzkwLDMwNzkyLDMwNzkzLDMwNzk0LDMwNzk1LDMwNzk3LDMwNzk5LDMwODAxLDMwODAzLDMwODA0LDMwODA4LDMwODA5LDMwODEwLDMw''@;'; put 'put ''ODExLDMwODEyLDMwODE0LDMwODE1LDMwODE2LDMwODE3LDMwODE4LDMwODE5LDMwODIwLDMwODIxLDMwODIyLDMwODIzLDMwODI0LDMwODI1LDMwODMxLDMwODMyLDMwODMzLDMwODM0LDMwODM1LDMwODM2LDMwODM3LDMwODM4LDMwODQwLDMwODQxLDMwODQyLDMwODQzLDMwODQ1LDMwODQ2''@;'; put 'put ''LDMwODQ3LDMwODQ4LDMwODQ5LDMwODUwLDMwODUxLDIyMzMwLDIzNTgxLDI0MTIwLDM4MjcxLDIwNjA3LDMyOTI4LDIxMzc4LDI1OTUwLDMwMDIxLDIxODA5LDIwNTEzLDM2MjI5LDI1MjIwLDM4MDQ2LDI2Mzk3LDIyMDY2LDI4NTI2LDI0MDM0LDIxNTU3LDI4ODE4LDM2NzEwLDI1MTk5LDI1''@;'; put 'put ''NzY0LDI1NTA3LDI0NDQzLDI4NTUyLDM3MTA4LDMzMjUxLDM2Nzg0LDIzNTc2LDI2MjE2LDI0NTYxLDI3Nzg1LDM4NDcyLDM2MjI1LDM0OTI0LDI1NzQ1LDMxMjE2LDIyNDc4LDI3MjI1LDI1MTA0LDIxNTc2LDIwMDU2LDMxMjQzLDI0ODA5LDI4NTQ4LDM1ODAyLDI1MjE1LDM2ODk0LDM5NTYz''@;'; put 'put ''LDMxMjA0LDIxNTA3LDMwMTk2LDI1MzQ1LDIxMjczLDI3NzQ0LDM2ODMxLDI0MzQ3LDM5NTM2LDMyODI3LDQwODMxLDIwMzYwLDIzNjEwLDM2MTk2LDMyNzA5LDI2MDIxLDI4ODYxLDIwODA1LDIwOTE0LDM0NDExLDIzODE1LDIzNDU2LDI1Mjc3LDM3MjI4LDMwMDY4LDM2MzY0LDMxMjY0LDI0''@;'; put 'put ''ODMzLDMxNjA5LDIwMTY3LDMyNTA0LDMwNTk3LDE5OTg1LDMzMjYxLDIxMDIxLDIwOTg2LDI3MjQ5LDIxNDE2LDM2NDg3LDM4MTQ4LDM4NjA3LDI4MzUzLDM4NTAwLDI2OTcwLDMwODUyLDMwODUzLDMwODU0LDMwODU2LDMwODU4LDMwODU5LDMwODYzLDMwODY0LDMwODY2LDMwODY4LDMwODY5''@;'; put 'put ''LDMwODcwLDMwODczLDMwODc3LDMwODc4LDMwODgwLDMwODgyLDMwODg0LDMwODg2LDMwODg4LDMwODg5LDMwODkwLDMwODkxLDMwODkyLDMwODkzLDMwODk0LDMwODk1LDMwOTAxLDMwOTAyLDMwOTAzLDMwOTA0LDMwOTA2LDMwOTA3LDMwOTA4LDMwOTA5LDMwOTExLDMwOTEyLDMwOTE0LDMw''@;'; put 'put ''OTE1LDMwOTE2LDMwOTE4LDMwOTE5LDMwOTIwLDMwOTI0LDMwOTI1LDMwOTI2LDMwOTI3LDMwOTI5LDMwOTMwLDMwOTMxLDMwOTM0LDMwOTM1LDMwOTM2LDMwOTM4LDMwOTM5LDMwOTQwLDMwOTQxLDMwOTQyLDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTQ2LDMwOTQ3LDMwOTQ4LDMwOTQ5LDMwOTUw''@;'; put 'put ''LDMwOTUxLDMwOTUzLDMwOTU0LDMwOTU1LDMwOTU3LDMwOTU4LDMwOTU5LDMwOTYwLDMwOTYxLDMwOTYzLDMwOTY1LDMwOTY2LDMwOTY4LDMwOTY5LDMwOTcxLDMwOTcyLDMwOTczLDMwOTc0LDMwOTc1LDMwOTc2LDMwOTc4LDMwOTc5LDMwOTgwLDMwOTgyLDMwOTgzLDMwOTg0LDMwOTg1LDMw''@;'; put 'put ''OTg2LDMwOTg3LDMwOTg4LDMwNzg0LDIwNjQ4LDMwNjc5LDI1NjE2LDM1MzAyLDIyNzg4LDI1NTcxLDI0MDI5LDMxMzU5LDI2OTQxLDIwMjU2LDMzMzM3LDIxOTEyLDIwMDE4LDMwMTI2LDMxMzgzLDI0MTYyLDI0MjAyLDM4MzgzLDIxMDE5LDIxNTYxLDI4ODEwLDI1NDYyLDM4MTgwLDIyNDAy''@;'; put 'put ''LDI2MTQ5LDI2OTQzLDM3MjU1LDIxNzY3LDI4MTQ3LDMyNDMxLDM0ODUwLDI1MTM5LDMyNDk2LDMwMTMzLDMzNTc2LDMwOTEzLDM4NjA0LDM2NzY2LDI0OTA0LDI5OTQzLDM1Nzg5LDI3NDkyLDIxMDUwLDM2MTc2LDI3NDI1LDMyODc0LDMzOTA1LDIyMjU3LDIxMjU0LDIwMTc0LDE5OTk1LDIw''@;'; put 'put ''OTQ1LDMxODk1LDM3MjU5LDMxNzUxLDIwNDE5LDM2NDc5LDMxNzEzLDMxMzg4LDI1NzAzLDIzODI4LDIwNjUyLDMzMDMwLDMwMjA5LDMxOTI5LDI4MTQwLDMyNzM2LDI2NDQ5LDIzMzg0LDIzNTQ0LDMwOTIzLDI1Nzc0LDI1NjE5LDI1NTE0LDI1Mzg3LDM4MTY5LDI1NjQ1LDM2Nzk4LDMxNTcy''@;'; put 'put ''LDMwMjQ5LDI1MTcxLDIyODIzLDIxNTc0LDI3NTEzLDIwNjQzLDI1MTQwLDI0MTAyLDI3NTI2LDIwMTk1LDM2MTUxLDM0OTU1LDI0NDUzLDM2OTEwLDMwOTg5LDMwOTkwLDMwOTkxLDMwOTkyLDMwOTkzLDMwOTk0LDMwOTk2LDMwOTk3LDMwOTk4LDMwOTk5LDMxZTMsMzEwMDEsMzEwMDIsMzEw''@;'; put 'put ''MDMsMzEwMDQsMzEwMDUsMzEwMDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEwMTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMs''@;'; put 'put ''MzEwMzcsMzEwMzksMzEwNDIsMzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAsMzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAsMzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEwNzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEw''@;'; put 'put ''ODQsMzEwODYsMzEwODgsMzEwODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzExMTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUsMzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIs''@;'; put 'put ''MjQ2MDgsMzI4MjksMjUyODUsMjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYsMjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMsMjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1''@;'; put 'put ''NDgsMjEwNDAsMzEyOTEsMjQ3NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAzNDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAzMDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUsMjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMs''@;'; put 'put ''MjIzMjAsMzM5MjIsMzE1MzIsMjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIsMjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEsMzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgwOTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5''@;'; put 'put ''OTMsMjU0ODEsMjE1MTQsMzgwMzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzExMjgsMzExMjksMzExMzEsMzExMzIsMzExMzMsMzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzks''@;'; put 'put ''MzExNDAsMzExNDEsMzExNDIsMzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgsMzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgsMzExNTksMzExNjAsMzExNjQsMzExNjcsMzExNzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzEx''@;'; put 'put ''ODAsMzExODIsMzExODMsMzExODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzExOTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQsMzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIs''@;'; put 'put ''MzEyMjMsMzEyMjUsMzEyMjYsMzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYsMzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDksMzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEyNTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0''@;'; put 'put ''ODYsMzgwMjUsMzkwMzAsNDA3MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcsMzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIs''@;'; put 'put ''MjkzMjIsMjk0MjAsMzU4MzUsMjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgsMzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjksMzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIy''@;'; put 'put ''NDQsMzgwNDUsMzA0NjIsMzY5MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3NjksMjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIs''@;'; put 'put ''MzkyOTUsMjQ2ODEsMzI3ODAsMjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMsMjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEsMzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEy''@;'; put 'put ''ODIsMzEyODQsMzEyODUsMzEyODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEyOTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEzMDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgs''@;'; put 'put ''MzEzMjAsMzEzMjEsMzEzMjIsMzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcsMzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYsMzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEzNDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEz''@;'; put 'put ''NDksMzEzNTUsMzEzNTYsMzEzNTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEzNjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEzODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMsMzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAs''@;'; put 'put ''MjAwNDcsMzg0MDAsMjc4NjEsMjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMsMjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1MzksMzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIzNDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5''@;'; put 'put ''NTIsMjAyMjMsMzU3NzUsMzI0NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkxMzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgsMzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTks''@;'; put 'put ''MjAyMjEsMjQ1NzUsMjQ4NjgsMzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIsMjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMsMjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3''@;'; put 'put ''NTIsMjQxMzMsMjc2NzksMzE1MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEzOTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEs''@;'; put 'put ''MzE0MjIsMzE0MjQsMzE0MjUsMzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAsMzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAsMzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0''@;'; put 'put ''NTMsMzE0NTcsMzE0NTgsMzE0NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQsMzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUs''@;'; put 'put ''MzE0OTcsMzE1MDAsMzE1MDEsMzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAsMzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMsMzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgwNzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3''@;'; put 'put ''NDEsMjA0NjMsMzczNDAsMjYwMjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYyMTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMxNDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0NjgsMjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMs''@;'; put 'put ''MjU5MTMsMjcwMTAsMzgwNDEsMzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0MzgsMjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIsMjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2''@;'; put 'put ''NDAsMzMxNjcsMzI2NjAsMzE5NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgsMzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTks''@;'; put 'put ''MzI3ODksMjYzNTYsMjQyMTgsMzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAsMzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1''@;'; put 'put ''NzUsMzE1NzcsMzE1ODAsMzE1ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYsMzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcs''@;'; put 'put ''MzE2MTgsMzE2MTksMzE2MjAsMzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYsMzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAsMzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2''@;'; put 'put ''NjMsMzE2NjQsMzE2NjYsMzE2NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcsMjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQs''@;'; put 'put ''MjA4NDQsMjM0NjcsMjQzMzksMjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDksMzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUsMzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAyNzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1''@;'; put 'put ''MDYsMzk1OTIsMzU4OTUsMzI5MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEwMzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYsMzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMs''@;'; put 'put ''MjA4MDksMjQxOTEsMzY4OTEsMjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIsNDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAsMzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4''@;'; put 'put ''MDcsMjE3MDQsMzE2ODUsMzE2ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEs''@;'; put 'put ''MzE3MjMsMzE3MjQsMzE3MjUsMzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIsMzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3''@;'; put 'put ''NTgsMzE3NjAsMzE3NjEsMzE3NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQsMzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEs''@;'; put 'put ''MzE3OTIsMzE3OTMsMzE3OTQsMzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTksMzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEsMjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1NTksMzcyMTksMjVlMywzNzAzOSwzODg4OSwyMTU0NywyODA4''@;'; put 'put ''NSwyMzUwNiwyMDk4OSwyMTg5OCwzMjU5NywzMjc1MiwyNTc4OCwyNTQyMSwyNjA5NywyNTAyMiwyNDcxNywyODkzOCwyNzczNSwyNzcyMSwyMjgzMSwyNjQ3NywzMzMyMiwyMjc0MSwyMjE1OCwzNTk0NiwyNzYyNywzNzA4NSwyMjkwOSwzMjc5MSwyMTQ5NSwyODAwOSwyMTYyMSwyMTkxNywz''@;'; put 'put ''MzY1NSwzMzc0MywyNjY4MCwzMTE2NiwyMTY0NCwyMDMwOSwyMTUxMiwzMDQxOCwzNTk3NywzODQwMiwyNzgyNywyODA4OCwzNjIwMywzNTA4OCw0MDU0OCwzNjE1NCwyMjA3OSw0MDY1NywzMDE2NSwyNDQ1NiwyOTQwOCwyNDY4MCwyMTc1NiwyMDEzNiwyNzE3OCwzNDkxMywyNDY1OCwzNjcy''@;'; put 'put ''MCwyMTcwMCwyODg4OCwzNDQyNSw0MDUxMSwyNzk0NiwyMzQzOSwyNDM0NCwzMjQxOCwyMTg5NywyMDM5OSwyOTQ5MiwyMTU2NCwyMTQwMiwyMDUwNSwyMTUxOCwyMTYyOCwyMDA0NiwyNDU3MywyOTc4NiwyMjc3NCwzMzg5OSwzMjk5MywzNDY3NiwyOTM5MiwzMTk0NiwyODI0NiwzMTgxMSwz''@;'; put 'put ''MTgxMiwzMTgxMywzMTgxNCwzMTgxNSwzMTgxNiwzMTgxNywzMTgxOCwzMTgxOSwzMTgyMCwzMTgyMiwzMTgyMywzMTgyNCwzMTgyNSwzMTgyNiwzMTgyNywzMTgyOCwzMTgyOSwzMTgzMCwzMTgzMSwzMTgzMiwzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTgzOSwzMTg0''@;'; put 'put ''MCwzMTg0MSwzMTg0MiwzMTg0MywzMTg0NCwzMTg0NSwzMTg0NiwzMTg0NywzMTg0OCwzMTg0OSwzMTg1MCwzMTg1MSwzMTg1MiwzMTg1MywzMTg1NCwzMTg1NSwzMTg1NiwzMTg1NywzMTg1OCwzMTg2MSwzMTg2MiwzMTg2MywzMTg2NCwzMTg2NSwzMTg2NiwzMTg3MCwzMTg3MSwzMTg3Miwz''@;'; put 'put ''MTg3MywzMTg3NCwzMTg3NSwzMTg3NiwzMTg3NywzMTg3OCwzMTg3OSwzMTg4MCwzMTg4MiwzMTg4MywzMTg4NCwzMTg4NSwzMTg4NiwzMTg4NywzMTg4OCwzMTg5MSwzMTg5MiwzMTg5NCwzMTg5NywzMTg5OCwzMTg5OSwzMTkwNCwzMTkwNSwzMTkwNywzMTkxMCwzMTkxMSwzMTkxMiwzMTkx''@;'; put 'put ''MywzMTkxNSwzMTkxNiwzMTkxNywzMTkxOSwzMTkyMCwzMTkyNCwzMTkyNSwzMTkyNiwzMTkyNywzMTkyOCwzMTkzMCwzMTkzMSwyNDM1OSwzNDM4MiwyMTgwNCwyNTI1MiwyMDExNCwyNzgxOCwyNTE0MywzMzQ1NywyMTcxOSwyMTMyNiwyOTUwMiwyODM2OSwzMDAxMSwyMTAxMCwyMTI3MCwz''@;'; put 'put ''NTgwNSwyNzA4OCwyNDQ1OCwyNDU3NiwyODE0MiwyMjM1MSwyNzQyNiwyOTYxNSwyNjcwNywzNjgyNCwzMjUzMSwyNTQ0MiwyNDczOSwyMTc5NiwzMDE4NiwzNTkzOCwyODk0OSwyODA2NywyMzQ2MiwyNDE4NywzMzYxOCwyNDkwOCw0MDY0NCwzMDk3MCwzNDY0NywzMTc4MywzMDM0MywyMDk3''@;'; put 'put ''NiwyNDgyMiwyOTAwNCwyNjE3OSwyNDE0MCwyNDY1MywzNTg1NCwyODc4NCwyNTM4MSwzNjc0NSwyNDUwOSwyNDY3NCwzNDUxNiwyMjIzOCwyNzU4NSwyNDcyNCwyNDkzNSwyMTMyMSwyNDgwMCwyNjIxNCwzNjE1OSwzMTIyOSwyMDI1MCwyODkwNSwyNzcxOSwzNTc2MywzNTgyNiwzMjQ3Miwz''@;'; put 'put ''MzYzNiwyNjEyNywyMzEzMCwzOTc0NiwyNzk4NSwyODE1MSwzNTkwNSwyNzk2MywyMDI0OSwyODc3OSwzMzcxOSwyNTExMCwyNDc4NSwzODY2OSwzNjEzNSwzMTA5NiwyMDk4NywyMjMzNCwyMjUyMiwyNjQyNiwzMDA3MiwzMTI5MywzMTIxNSwzMTYzNywzMTkzNSwzMTkzNiwzMTkzOCwzMTkz''@;'; put 'put ''OSwzMTk0MCwzMTk0MiwzMTk0NSwzMTk0NywzMTk1MCwzMTk1MSwzMTk1MiwzMTk1MywzMTk1NCwzMTk1NSwzMTk1NiwzMTk2MCwzMTk2MiwzMTk2MywzMTk2NSwzMTk2NiwzMTk2OSwzMTk3MCwzMTk3MSwzMTk3MiwzMTk3MywzMTk3NCwzMTk3NSwzMTk3NywzMTk3OCwzMTk3OSwzMTk4MCwz''@;'; put 'put ''MTk4MSwzMTk4MiwzMTk4NCwzMTk4NSwzMTk4NiwzMTk4NywzMTk4OCwzMTk4OSwzMTk5MCwzMTk5MSwzMTk5MywzMTk5NCwzMTk5NiwzMTk5NywzMTk5OCwzMTk5OSwzMmUzLDMyMDAxLDMyMDAyLDMyMDAzLDMyMDA0LDMyMDA1LDMyMDA2LDMyMDA3LDMyMDA4LDMyMDA5LDMyMDExLDMyMDEy''@;'; put 'put ''LDMyMDEzLDMyMDE0LDMyMDE1LDMyMDE2LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIwLDMyMDIxLDMyMDIyLDMyMDIzLDMyMDI0LDMyMDI1LDMyMDI2LDMyMDI3LDMyMDI4LDMyMDI5LDMyMDMwLDMyMDMxLDMyMDMzLDMyMDM1LDMyMDM2LDMyMDM3LDMyMDM4LDMyMDQwLDMyMDQxLDMyMDQyLDMy''@;'; put 'put ''MDQ0LDMyMDQ1LDMyMDQ2LDMyMDQ4LDMyMDQ5LDMyMDUwLDMyMDUxLDMyMDUyLDMyMDUzLDMyMDU0LDMyOTA4LDM5MjY5LDM2ODU3LDI4NjA4LDM1NzQ5LDQwNDgxLDIzMDIwLDMyNDg5LDMyNTIxLDIxNTEzLDI2NDk3LDI2ODQwLDM2NzUzLDMxODIxLDM4NTk4LDIxNDUwLDI0NjEzLDMwMTQy''@;'; put 'put ''LDI3NzYyLDIxMzYzLDIzMjQxLDMyNDIzLDI1MzgwLDIwOTYwLDMzMDM0LDI0MDQ5LDM0MDE1LDI1MjE2LDIwODY0LDIzMzk1LDIwMjM4LDMxMDg1LDIxMDU4LDI0NzYwLDI3OTgyLDIzNDkyLDIzNDkwLDM1NzQ1LDM1NzYwLDI2MDgyLDI0NTI0LDM4NDY5LDIyOTMxLDMyNDg3LDMyNDI2LDIy''@;'; put 'put ''MDI1LDI2NTUxLDIyODQxLDIwMzM5LDIzNDc4LDIxMTUyLDMzNjI2LDM5MDUwLDM2MTU4LDMwMDAyLDM4MDc4LDIwNTUxLDMxMjkyLDIwMjE1LDI2NTUwLDM5NTUwLDIzMjMzLDI3NTE2LDMwNDE3LDIyMzYyLDIzNTc0LDMxNTQ2LDM4Mzg4LDI5MDA2LDIwODYwLDMyOTM3LDMzMzkyLDIyOTA0''@;'; put 'put ''LDMyNTE2LDMzNTc1LDI2ODE2LDI2NjA0LDMwODk3LDMwODM5LDI1MzE1LDI1NDQxLDMxNjE2LDIwNDYxLDIxMDk4LDIwOTQzLDMzNjE2LDI3MDk5LDM3NDkyLDM2MzQxLDM2MTQ1LDM1MjY1LDM4MTkwLDMxNjYxLDIwMjE0LDMyMDU1LDMyMDU2LDMyMDU3LDMyMDU4LDMyMDU5LDMyMDYwLDMy''@;'; put 'put ''MDYxLDMyMDYyLDMyMDYzLDMyMDY0LDMyMDY1LDMyMDY2LDMyMDY3LDMyMDY4LDMyMDY5LDMyMDcwLDMyMDcxLDMyMDcyLDMyMDczLDMyMDc0LDMyMDc1LDMyMDc2LDMyMDc3LDMyMDc4LDMyMDc5LDMyMDgwLDMyMDgxLDMyMDgyLDMyMDgzLDMyMDg0LDMyMDg1LDMyMDg2LDMyMDg3LDMyMDg4''@;'; put 'put ''LDMyMDg5LDMyMDkwLDMyMDkxLDMyMDkyLDMyMDkzLDMyMDk0LDMyMDk1LDMyMDk2LDMyMDk3LDMyMDk4LDMyMDk5LDMyMTAwLDMyMTAxLDMyMTAyLDMyMTAzLDMyMTA0LDMyMTA1LDMyMTA2LDMyMTA3LDMyMTA4LDMyMTA5LDMyMTExLDMyMTEyLDMyMTEzLDMyMTE0LDMyMTE1LDMyMTE2LDMy''@;'; put 'put ''MTE3LDMyMTE4LDMyMTIwLDMyMTIxLDMyMTIyLDMyMTIzLDMyMTI0LDMyMTI1LDMyMTI2LDMyMTI3LDMyMTI4LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMyLDMyMTMzLDMyMTM0LDMyMTM1LDMyMTM2LDMyMTM3LDMyMTM4LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQyLDMyMTQzLDMyMTQ0LDMyMTQ1''@;'; put 'put ''LDMyMTQ2LDMyMTQ3LDMyMTQ4LDMyMTQ5LDMyMTUwLDMyMTUxLDMyMTUyLDIwNTgxLDMzMzI4LDIxMDczLDM5Mjc5LDI4MTc2LDI4MjkzLDI4MDcxLDI0MzE0LDIwNzI1LDIzMDA0LDIzNTU4LDI3OTc0LDI3NzQzLDMwMDg2LDMzOTMxLDI2NzI4LDIyODcwLDM1NzYyLDIxMjgwLDM3MjMzLDM4''@;'; put 'put ''NDc3LDM0MTIxLDI2ODk4LDMwOTc3LDI4OTY2LDMzMDE0LDIwMTMyLDM3MDY2LDI3OTc1LDM5NTU2LDIzMDQ3LDIyMjA0LDI1NjA1LDM4MTI4LDMwNjk5LDIwMzg5LDMzMDUwLDI5NDA5LDM1MjgyLDM5MjkwLDMyNTY0LDMyNDc4LDIxMTE5LDI1OTQ1LDM3MjM3LDM2NzM1LDM2NzM5LDIxNDgz''@;'; put 'put ''LDMxMzgyLDI1NTgxLDI1NTA5LDMwMzQyLDMxMjI0LDM0OTAzLDM4NDU0LDI1MTMwLDIxMTYzLDMzNDEwLDI2NzA4LDI2NDgwLDI1NDYzLDMwNTcxLDMxNDY5LDI3OTA1LDMyNDY3LDM1Mjk5LDIyOTkyLDI1MTA2LDM0MjQ5LDMzNDQ1LDMwMDI4LDIwNTExLDIwMTcxLDMwMTE3LDM1ODE5LDIz''@;'; put 'put ''NjI2LDI0MDYyLDMxNTYzLDI2MDIwLDM3MzI5LDIwMTcwLDI3OTQxLDM1MTY3LDMyMDM5LDM4MTgyLDIwMTY1LDM1ODgwLDM2ODI3LDM4NzcxLDI2MTg3LDMxMTA1LDM2ODE3LDI4OTA4LDI4MDI0LDMyMTUzLDMyMTU0LDMyMTU1LDMyMTU2LDMyMTU3LDMyMTU4LDMyMTU5LDMyMTYwLDMyMTYx''@;'; put 'put ''LDMyMTYyLDMyMTYzLDMyMTY0LDMyMTY1LDMyMTY3LDMyMTY4LDMyMTY5LDMyMTcwLDMyMTcxLDMyMTcyLDMyMTczLDMyMTc1LDMyMTc2LDMyMTc3LDMyMTc4LDMyMTc5LDMyMTgwLDMyMTgxLDMyMTgyLDMyMTgzLDMyMTg0LDMyMTg1LDMyMTg2LDMyMTg3LDMyMTg4LDMyMTg5LDMyMTkwLDMy''@;'; put 'put ''MTkxLDMyMTkyLDMyMTkzLDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMTk5LDMyMjAwLDMyMjAxLDMyMjAyLDMyMjAzLDMyMjA0LDMyMjA1LDMyMjA2LDMyMjA3LDMyMjA4LDMyMjA5LDMyMjEwLDMyMjExLDMyMjEyLDMyMjEzLDMyMjE0LDMyMjE1LDMyMjE2LDMyMjE3LDMyMjE4''@;'; put 'put ''LDMyMjE5LDMyMjIwLDMyMjIxLDMyMjIyLDMyMjIzLDMyMjI0LDMyMjI1LDMyMjI2LDMyMjI3LDMyMjI4LDMyMjI5LDMyMjMwLDMyMjMxLDMyMjMyLDMyMjMzLDMyMjM0LDMyMjM1LDMyMjM2LDMyMjM3LDMyMjM4LDMyMjM5LDMyMjQwLDMyMjQxLDMyMjQyLDMyMjQzLDMyMjQ0LDMyMjQ1LDMy''@;'; put 'put ''MjQ2LDMyMjQ3LDMyMjQ4LDMyMjQ5LDMyMjUwLDIzNjEzLDIxMTcwLDMzNjA2LDIwODM0LDMzNTUwLDMwNTU1LDI2MjMwLDQwMTIwLDIwMTQwLDI0Nzc4LDMxOTM0LDMxOTIzLDMyNDYzLDIwMTE3LDM1Njg2LDI2MjIzLDM5MDQ4LDM4NzQ1LDIyNjU5LDI1OTY0LDM4MjM2LDI0NDUyLDMwMTUz''@;'; put 'put ''LDM4NzQyLDMxNDU1LDMxNDU0LDIwOTI4LDI4ODQ3LDMxMzg0LDI1NTc4LDMxMzUwLDMyNDE2LDI5NTkwLDM4ODkzLDIwMDM3LDI4NzkyLDIwMDYxLDM3MjAyLDIxNDE3LDI1OTM3LDI2MDg3LDMzMjc2LDMzMjg1LDIxNjQ2LDIzNjAxLDMwMTA2LDM4ODE2LDI1MzA0LDI5NDAxLDMwMTQxLDIz''@;'; put 'put ''NjIxLDM5NTQ1LDMzNzM4LDIzNjE2LDIxNjMyLDMwNjk3LDIwMDMwLDI3ODIyLDMyODU4LDI1Mjk4LDI1NDU0LDI0MDQwLDIwODU1LDM2MzE3LDM2MzgyLDM4MTkxLDIwNDY1LDIxNDc3LDI0ODA3LDI4ODQ0LDIxMDk1LDI1NDI0LDQwNTE1LDIzMDcxLDIwNTE4LDMwNTE5LDIxMzY3LDMyNDgy''@;'; put 'put ''LDI1NzMzLDI1ODk5LDI1MjI1LDI1NDk2LDIwNTAwLDI5MjM3LDM1MjczLDIwOTE1LDM1Nzc2LDMyNDc3LDIyMzQzLDMzNzQwLDM4MDU1LDIwODkxLDIxNTMxLDIzODAzLDMyMjUxLDMyMjUyLDMyMjUzLDMyMjU0LDMyMjU1LDMyMjU2LDMyMjU3LDMyMjU4LDMyMjU5LDMyMjYwLDMyMjYxLDMy''@;'; put 'put ''MjYyLDMyMjYzLDMyMjY0LDMyMjY1LDMyMjY2LDMyMjY3LDMyMjY4LDMyMjY5LDMyMjcwLDMyMjcxLDMyMjcyLDMyMjczLDMyMjc0LDMyMjc1LDMyMjc2LDMyMjc3LDMyMjc4LDMyMjc5LDMyMjgwLDMyMjgxLDMyMjgyLDMyMjgzLDMyMjg0LDMyMjg1LDMyMjg2LDMyMjg3LDMyMjg4LDMyMjg5''@;'; put 'put ''LDMyMjkwLDMyMjkxLDMyMjkyLDMyMjkzLDMyMjk0LDMyMjk1LDMyMjk2LDMyMjk3LDMyMjk4LDMyMjk5LDMyMzAwLDMyMzAxLDMyMzAyLDMyMzAzLDMyMzA0LDMyMzA1LDMyMzA2LDMyMzA3LDMyMzA4LDMyMzA5LDMyMzEwLDMyMzExLDMyMzEyLDMyMzEzLDMyMzE0LDMyMzE2LDMyMzE3LDMy''@;'; put 'put ''MzE4LDMyMzE5LDMyMzIwLDMyMzIyLDMyMzIzLDMyMzI0LDMyMzI1LDMyMzI2LDMyMzI4LDMyMzI5LDMyMzMwLDMyMzMxLDMyMzMyLDMyMzMzLDMyMzM0LDMyMzM1LDMyMzM2LDMyMzM3LDMyMzM4LDMyMzM5LDMyMzQwLDMyMzQxLDMyMzQyLDMyMzQzLDMyMzQ0LDMyMzQ1LDMyMzQ2LDMyMzQ3''@;'; put 'put ''LDMyMzQ4LDMyMzQ5LDIwNDI2LDMxNDU5LDI3OTk0LDM3MDg5LDM5NTY3LDIxODg4LDIxNjU0LDIxMzQ1LDIxNjc5LDI0MzIwLDI1NTc3LDI2OTk5LDIwOTc1LDI0OTM2LDIxMDAyLDIyNTcwLDIxMjA4LDIyMzUwLDMwNzMzLDMwNDc1LDI0MjQ3LDI0OTUxLDMxOTY4LDI1MTc5LDI1MjM5LDIw''@;'; put 'put ''MTMwLDI4ODIxLDMyNzcxLDI1MzM1LDI4OTAwLDM4NzUyLDIyMzkxLDMzNDk5LDI2NjA3LDI2ODY5LDMwOTMzLDM5MDYzLDMxMTg1LDIyNzcxLDIxNjgzLDIxNDg3LDI4MjEyLDIwODExLDIxMDUxLDIzNDU4LDM1ODM4LDMyOTQzLDIxODI3LDIyNDM4LDI0NjkxLDIyMzUzLDIxNTQ5LDMxMzU0''@;'; put 'put ''LDI0NjU2LDIzMzgwLDI1NTExLDI1MjQ4LDIxNDc1LDI1MTg3LDIzNDk1LDI2NTQzLDIxNzQxLDMxMzkxLDMzNTEwLDM3MjM5LDI0MjExLDM1MDQ0LDIyODQwLDIyNDQ2LDI1MzU4LDM2MzI4LDMzMDA3LDIyMzU5LDMxNjA3LDIwMzkzLDI0NTU1LDIzNDg1LDI3NDU0LDIxMjgxLDMxNTY4LDI5''@;'; put 'put ''Mzc4LDI2Njk0LDMwNzE5LDMwNTE4LDI2MTAzLDIwOTE3LDIwMTExLDMwNDIwLDIzNzQzLDMxMzk3LDMzOTA5LDIyODYyLDM5NzQ1LDIwNjA4LDMyMzUwLDMyMzUxLDMyMzUyLDMyMzUzLDMyMzU0LDMyMzU1LDMyMzU2LDMyMzU3LDMyMzU4LDMyMzU5LDMyMzYwLDMyMzYxLDMyMzYyLDMyMzYz''@;'; put 'put ''LDMyMzY0LDMyMzY1LDMyMzY2LDMyMzY3LDMyMzY4LDMyMzY5LDMyMzcwLDMyMzcxLDMyMzcyLDMyMzczLDMyMzc0LDMyMzc1LDMyMzc2LDMyMzc3LDMyMzc4LDMyMzc5LDMyMzgwLDMyMzgxLDMyMzgyLDMyMzgzLDMyMzg0LDMyMzg1LDMyMzg3LDMyMzg4LDMyMzg5LDMyMzkwLDMyMzkxLDMy''@;'; put 'put ''MzkyLDMyMzkzLDMyMzk0LDMyMzk1LDMyMzk2LDMyMzk3LDMyMzk4LDMyMzk5LDMyNDAwLDMyNDAxLDMyNDAyLDMyNDAzLDMyNDA0LDMyNDA1LDMyNDA2LDMyNDA3LDMyNDA4LDMyNDA5LDMyNDEwLDMyNDEyLDMyNDEzLDMyNDE0LDMyNDMwLDMyNDM2LDMyNDQzLDMyNDQ0LDMyNDcwLDMyNDg0''@;'; put 'put ''LDMyNDkyLDMyNTA1LDMyNTIyLDMyNTI4LDMyNTQyLDMyNTY3LDMyNTY5LDMyNTcxLDMyNTcyLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc2LDMyNTc3LDMyNTc5LDMyNTgyLDMyNTgzLDMyNTg0LDMyNTg1LDMyNTg2LDMyNTg3LDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkxLDMyNTk0LDMyNTk1LDM5''@;'; put 'put ''MzA0LDI0ODcxLDI4MjkxLDIyMzcyLDI2MTE4LDI1NDE0LDIyMjU2LDI1MzI0LDI1MTkzLDI0Mjc1LDM4NDIwLDIyNDAzLDI1Mjg5LDIxODk1LDM0NTkzLDMzMDk4LDM2NzcxLDIxODYyLDMzNzEzLDI2NDY5LDM2MTgyLDM0MDEzLDIzMTQ2LDI2NjM5LDI1MzE4LDMxNzI2LDM4NDE3LDIwODQ4''@;'; put 'put ''LDI4NTcyLDM1ODg4LDI1NTk3LDM1MjcyLDI1MDQyLDMyNTE4LDI4ODY2LDI4Mzg5LDI5NzAxLDI3MDI4LDI5NDM2LDI0MjY2LDM3MDcwLDI2MzkxLDI4MDEwLDI1NDM4LDIxMTcxLDI5MjgyLDMyNzY5LDIwMzMyLDIzMDEzLDM3MjI2LDI4ODg5LDI4MDYxLDIxMjAyLDIwMDQ4LDM4NjQ3LDM4''@;'; put 'put ''MjUzLDM0MTc0LDMwOTIyLDMyMDQ3LDIwNzY5LDIyNDE4LDI1Nzk0LDMyOTA3LDMxODY3LDI3ODgyLDI2ODY1LDI2OTc0LDIwOTE5LDIxNDAwLDI2NzkyLDI5MzEzLDQwNjU0LDMxNzI5LDI5NDMyLDMxMTYzLDI4NDM1LDI5NzAyLDI2NDQ2LDM3MzI0LDQwMTAwLDMxMDM2LDMzNjczLDMzNjIw''@;'; put 'put ''LDIxNTE5LDI2NjQ3LDIwMDI5LDIxMzg1LDIxMTY5LDMwNzgyLDIxMzgyLDIxMDMzLDIwNjE2LDIwMzYzLDIwNDMyLDMyNTk4LDMyNjAxLDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA2LDMyNjA4LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjE1LDMyNjE5LDMyNjIwLDMyNjIxLDMyNjIzLDMy''@;'; put 'put ''NjI0LDMyNjI3LDMyNjI5LDMyNjMwLDMyNjMxLDMyNjMyLDMyNjM0LDMyNjM1LDMyNjM2LDMyNjM3LDMyNjM5LDMyNjQwLDMyNjQyLDMyNjQzLDMyNjQ0LDMyNjQ1LDMyNjQ2LDMyNjQ3LDMyNjQ4LDMyNjQ5LDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjU4LDMyNjU5LDMyNjYx''@;'; put 'put ''LDMyNjYyLDMyNjYzLDMyNjY0LDMyNjY1LDMyNjY3LDMyNjY4LDMyNjcyLDMyNjc0LDMyNjc1LDMyNjc3LDMyNjc4LDMyNjgwLDMyNjgxLDMyNjgyLDMyNjgzLDMyNjg0LDMyNjg1LDMyNjg2LDMyNjg5LDMyNjkxLDMyNjkyLDMyNjkzLDMyNjk0LDMyNjk1LDMyNjk4LDMyNjk5LDMyNzAyLDMy''@;'; put 'put ''NzA0LDMyNzA2LDMyNzA3LDMyNzA4LDMyNzEwLDMyNzExLDMyNzEyLDMyNzEzLDMyNzE1LDMyNzE3LDMyNzE5LDMyNzIwLDMyNzIxLDMyNzIyLDMyNzIzLDMyNzI2LDMyNzI3LDMyNzI5LDMyNzMwLDMyNzMxLDMyNzMyLDMyNzMzLDMyNzM0LDMyNzM4LDMyNzM5LDMwMTc4LDMxNDM1LDMxODkw''@;'; put 'put ''LDI3ODEzLDM4NTgyLDIxMTQ3LDI5ODI3LDIxNzM3LDIwNDU3LDMyODUyLDMzNzE0LDM2ODMwLDM4MjU2LDI0MjY1LDI0NjA0LDI4MDYzLDI0MDg4LDI1OTQ3LDMzMDgwLDM4MTQyLDI0NjUxLDI4ODYwLDMyNDUxLDMxOTE4LDIwOTM3LDI2NzUzLDMxOTIxLDMzMzkxLDIwMDA0LDM2NzQyLDM3''@;'; put 'put ''MzI3LDI2MjM4LDIwMTQyLDM1ODQ1LDI1NzY5LDMyODQyLDIwNjk4LDMwMTAzLDI5MTM0LDIzNTI1LDM2Nzk3LDI4NTE4LDIwMTAyLDI1NzMwLDM4MjQzLDI0Mjc4LDI2MDA5LDIxMDE1LDM1MDEwLDI4ODcyLDIxMTU1LDI5NDU0LDI5NzQ3LDI2NTE5LDMwOTY3LDM4Njc4LDIwMDIwLDM3MDUx''@;'; put 'put ''LDQwMTU4LDI4MTA3LDIwOTU1LDM2MTYxLDIxNTMzLDI1Mjk0LDI5NjE4LDMzNzc3LDM4NjQ2LDQwODM2LDM4MDgzLDIwMjc4LDMyNjY2LDIwOTQwLDI4Nzg5LDM4NTE3LDIzNzI1LDM5MDQ2LDIxNDc4LDIwMTk2LDI4MzE2LDI5NzA1LDI3MDYwLDMwODI3LDM5MzExLDMwMDQxLDIxMDE2LDMw''@;'; put 'put ''MjQ0LDI3OTY5LDI2NjExLDIwODQ1LDQwODU3LDMyODQzLDIxNjU3LDMxNTQ4LDMxNDIzLDMyNzQwLDMyNzQzLDMyNzQ0LDMyNzQ2LDMyNzQ3LDMyNzQ4LDMyNzQ5LDMyNzUxLDMyNzU0LDMyNzU2LDMyNzU3LDMyNzU4LDMyNzU5LDMyNzYwLDMyNzYxLDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3''@;'; put 'put ''LDMyNzcwLDMyNzc1LDMyNzc2LDMyNzc3LDMyNzc4LDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzk0LDMyNzk1LDMyNzk3LDMyNzk4LDMyNzk5LDMyODAxLDMyODAzLDMyODA0LDMyODExLDMyODEyLDMyODEzLDMyODE0LDMyODE1LDMyODE2LDMyODE4LDMyODIwLDMyODI1LDMyODI2LDMy''@;'; put 'put ''ODI4LDMyODMwLDMyODMyLDMyODMzLDMyODM2LDMyODM3LDMyODM5LDMyODQwLDMyODQxLDMyODQ2LDMyODQ3LDMyODQ4LDMyODQ5LDMyODUxLDMyODUzLDMyODU0LDMyODU1LDMyODU3LDMyODU5LDMyODYwLDMyODYxLDMyODYyLDMyODYzLDMyODY0LDMyODY1LDMyODY2LDMyODY3LDMyODY4''@;'; put 'put ''LDMyODY5LDMyODcwLDMyODcxLDMyODcyLDMyODc1LDMyODc2LDMyODc3LDMyODc4LDMyODc5LDMyODgwLDMyODgyLDMyODgzLDMyODg0LDMyODg1LDMyODg2LDMyODg3LDMyODg4LDMyODg5LDMyODkwLDMyODkxLDMyODkyLDMyODkzLDM4NTM0LDIyNDA0LDI1MzE0LDM4NDcxLDI3MDA0LDIz''@;'; put 'put ''MDQ0LDI1NjAyLDMxNjk5LDI4NDMxLDM4NDc1LDMzNDQ2LDIxMzQ2LDM5MDQ1LDI0MjA4LDI4ODA5LDI1NTIzLDIxMzQ4LDM0MzgzLDQwMDY1LDQwNTk1LDMwODYwLDM4NzA2LDM2MzM1LDM2MTYyLDQwNTc1LDI4NTEwLDMxMTA4LDI0NDA1LDM4NDcwLDI1MTM0LDM5NTQwLDIxNTI1LDM4MTA5''@;'; put 'put ''LDIwMzg3LDI2MDUzLDIzNjUzLDIzNjQ5LDMyNTMzLDM0Mzg1LDI3Njk1LDI0NDU5LDI5NTc1LDI4Mzg4LDMyNTExLDIzNzgyLDI1MzcxLDIzNDAyLDI4MzkwLDIxMzY1LDIwMDgxLDI1NTA0LDMwMDUzLDI1MjQ5LDM2NzE4LDIwMjYyLDIwMTc3LDI3ODE0LDMyNDM4LDM1NzcwLDMzODIxLDM0''@;'; put 'put ''NzQ2LDMyNTk5LDM2OTIzLDM4MTc5LDMxNjU3LDM5NTg1LDM1MDY0LDMzODUzLDI3OTMxLDM5NTU4LDMyNDc2LDIyOTIwLDQwNjM1LDI5NTk1LDMwNzIxLDM0NDM0LDM5NTMyLDM5NTU0LDIyMDQzLDIxNTI3LDIyNDc1LDIwMDgwLDQwNjE0LDIxMzM0LDM2ODA4LDMzMDMzLDMwNjEwLDM5MzE0''@;'; put 'put ''LDM0NTQyLDI4Mzg1LDM0MDY3LDI2MzY0LDI0OTMwLDI4NDU5LDMyODk0LDMyODk3LDMyODk4LDMyOTAxLDMyOTA0LDMyOTA2LDMyOTA5LDMyOTEwLDMyOTExLDMyOTEyLDMyOTEzLDMyOTE0LDMyOTE2LDMyOTE3LDMyOTE5LDMyOTIxLDMyOTI2LDMyOTMxLDMyOTM0LDMyOTM1LDMyOTM2LDMy''@;'; put 'put ''OTQwLDMyOTQ0LDMyOTQ3LDMyOTQ5LDMyOTUwLDMyOTUyLDMyOTUzLDMyOTU1LDMyOTY1LDMyOTY3LDMyOTY4LDMyOTY5LDMyOTcwLDMyOTcxLDMyOTc1LDMyOTc2LDMyOTc3LDMyOTc4LDMyOTc5LDMyOTgwLDMyOTgxLDMyOTg0LDMyOTkxLDMyOTkyLDMyOTk0LDMyOTk1LDMyOTk4LDMzMDA2''@;'; put 'put ''LDMzMDEzLDMzMDE1LDMzMDE3LDMzMDE5LDMzMDIyLDMzMDIzLDMzMDI0LDMzMDI1LDMzMDI3LDMzMDI4LDMzMDI5LDMzMDMxLDMzMDMyLDMzMDM1LDMzMDM2LDMzMDQ1LDMzMDQ3LDMzMDQ5LDMzMDUxLDMzMDUyLDMzMDUzLDMzMDU1LDMzMDU2LDMzMDU3LDMzMDU4LDMzMDU5LDMzMDYwLDMz''@;'; put 'put ''MDYxLDMzMDYyLDMzMDYzLDMzMDY0LDMzMDY1LDMzMDY2LDMzMDY3LDMzMDY5LDMzMDcwLDMzMDcyLDMzMDc1LDMzMDc2LDMzMDc3LDMzMDc5LDMzMDgxLDMzMDgyLDMzMDgzLDMzMDg0LDMzMDg1LDMzMDg3LDM1ODgxLDMzNDI2LDMzNTc5LDMwNDUwLDI3NjY3LDI0NTM3LDMzNzI1LDI5NDgz''@;'; put 'put ''LDMzNTQxLDM4MTcwLDI3NjExLDMwNjgzLDM4MDg2LDIxMzU5LDMzNTM4LDIwODgyLDI0MTI1LDM1OTgwLDM2MTUyLDIwMDQwLDI5NjExLDI2NTIyLDI2NzU3LDM3MjM4LDM4NjY1LDI5MDI4LDI3ODA5LDMwNDczLDIzMTg2LDM4MjA5LDI3NTk5LDMyNjU0LDI2MTUxLDIzNTA0LDIyOTY5LDIz''@;'; put 'put ''MTk0LDM4Mzc2LDM4MzkxLDIwMjA0LDMzODA0LDMzOTQ1LDI3MzA4LDMwNDMxLDM4MTkyLDI5NDY3LDI2NzkwLDIzMzkxLDMwNTExLDM3Mjc0LDM4NzUzLDMxOTY0LDM2ODU1LDM1ODY4LDI0MzU3LDMxODU5LDMxMTkyLDM1MjY5LDI3ODUyLDM0NTg4LDIzNDk0LDI0MTMwLDI2ODI1LDMwNDk2''@;'; put 'put ''LDMyNTAxLDIwODg1LDIwODEzLDIxMTkzLDIzMDgxLDMyNTE3LDM4NzU0LDMzNDk1LDI1NTUxLDMwNTk2LDM0MjU2LDMxMTg2LDI4MjE4LDI0MjE3LDIyOTM3LDM0MDY1LDI4NzgxLDI3NjY1LDI1Mjc5LDMwMzk5LDI1OTM1LDI0NzUxLDM4Mzk3LDI2MTI2LDM0NzE5LDQwNDgzLDM4MTI1LDIx''@;'; put 'put ''NTE3LDIxNjI5LDM1ODg0LDI1NzIwLDMzMDg4LDMzMDg5LDMzMDkwLDMzMDkxLDMzMDkyLDMzMDkzLDMzMDk1LDMzMDk3LDMzMTAxLDMzMTAyLDMzMTAzLDMzMTA2LDMzMTEwLDMzMTExLDMzMTEyLDMzMTE1LDMzMTE2LDMzMTE3LDMzMTE4LDMzMTE5LDMzMTIxLDMzMTIyLDMzMTIzLDMzMTI0''@;'; put 'put ''LDMzMTI2LDMzMTI4LDMzMTMwLDMzMTMxLDMzMTMyLDMzMTM1LDMzMTM4LDMzMTM5LDMzMTQxLDMzMTQyLDMzMTQzLDMzMTQ0LDMzMTUzLDMzMTU1LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTU5LDMzMTYxLDMzMTYzLDMzMTY0LDMzMTY1LDMzMTY2LDMzMTY4LDMzMTcwLDMzMTcxLDMzMTcyLDMz''@;'; put 'put ''MTczLDMzMTc0LDMzMTc1LDMzMTc3LDMzMTc4LDMzMTgyLDMzMTgzLDMzMTg0LDMzMTg1LDMzMTg2LDMzMTg4LDMzMTg5LDMzMTkxLDMzMTkzLDMzMTk1LDMzMTk2LDMzMTk3LDMzMTk4LDMzMTk5LDMzMjAwLDMzMjAxLDMzMjAyLDMzMjA0LDMzMjA1LDMzMjA2LDMzMjA3LDMzMjA4LDMzMjA5''@;'; put 'put ''LDMzMjEyLDMzMjEzLDMzMjE0LDMzMjE1LDMzMjIwLDMzMjIxLDMzMjIzLDMzMjI0LDMzMjI1LDMzMjI3LDMzMjI5LDMzMjMwLDMzMjMxLDMzMjMyLDMzMjMzLDMzMjM0LDMzMjM1LDI1NzIxLDM0MzIxLDI3MTY5LDMzMTgwLDMwOTUyLDI1NzA1LDM5NzY0LDI1MjczLDI2NDExLDMzNzA3LDIy''@;'; put 'put ''Njk2LDQwNjY0LDI3ODE5LDI4NDQ4LDIzNTE4LDM4NDc2LDM1ODUxLDI5Mjc5LDI2NTc2LDI1Mjg3LDI5MjgxLDIwMTM3LDIyOTgyLDI3NTk3LDIyNjc1LDI2Mjg2LDI0MTQ5LDIxMjE1LDI0OTE3LDI2NDA4LDMwNDQ2LDMwNTY2LDI5Mjg3LDMxMzAyLDI1MzQzLDIxNzM4LDIxNTg0LDM4MDQ4''@;'; put 'put ''LDM3MDI3LDIzMDY4LDMyNDM1LDI3NjcwLDIwMDM1LDIyOTAyLDMyNzg0LDIyODU2LDIxMzM1LDMwMDA3LDM4NTkwLDIyMjE4LDI1Mzc2LDMzMDQxLDI0NzAwLDM4MzkzLDI4MTE4LDIxNjAyLDM5Mjk3LDIwODY5LDIzMjczLDMzMDIxLDIyOTU4LDM4Njc1LDIwNTIyLDI3ODc3LDIzNjEyLDI1''@;'; put 'put ''MzExLDIwMzIwLDIxMzExLDMzMTQ3LDM2ODcwLDI4MzQ2LDM0MDkxLDI1Mjg4LDI0MTgwLDMwOTEwLDI1NzgxLDI1NDY3LDI0NTY1LDIzMDY0LDM3MjQ3LDQwNDc5LDIzNjE1LDI1NDIzLDMyODM0LDIzNDIxLDIxODcwLDM4MjE4LDM4MjIxLDI4MDM3LDI0NzQ0LDI2NTkyLDI5NDA2LDIwOTU3''@;'; put 'put ''LDIzNDI1LDMzMjM2LDMzMjM3LDMzMjM4LDMzMjM5LDMzMjQwLDMzMjQxLDMzMjQyLDMzMjQzLDMzMjQ0LDMzMjQ1LDMzMjQ2LDMzMjQ3LDMzMjQ4LDMzMjQ5LDMzMjUwLDMzMjUyLDMzMjUzLDMzMjU0LDMzMjU2LDMzMjU3LDMzMjU5LDMzMjYyLDMzMjYzLDMzMjY0LDMzMjY1LDMzMjY2LDMz''@;'; put 'put ''MjY5LDMzMjcwLDMzMjcxLDMzMjcyLDMzMjczLDMzMjc0LDMzMjc3LDMzMjc5LDMzMjgzLDMzMjg3LDMzMjg4LDMzMjg5LDMzMjkwLDMzMjkxLDMzMjk0LDMzMjk1LDMzMjk3LDMzMjk5LDMzMzAxLDMzMzAyLDMzMzAzLDMzMzA0LDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEyLDMzMzE2LDMzMzE3''@;'; put 'put ''LDMzMzE4LDMzMzE5LDMzMzIxLDMzMzI2LDMzMzMwLDMzMzM4LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzQ0LDMzMzQ1LDMzMzQ2LDMzMzQ3LDMzMzQ5LDMzMzUwLDMzMzUyLDMzMzU0LDMzMzU2LDMzMzU3LDMzMzU4LDMzMzYwLDMzMzYxLDMzMzYyLDMzMzYzLDMzMzY0LDMzMzY1LDMzMzY2LDMz''@;'; put 'put ''MzY3LDMzMzY5LDMzMzcxLDMzMzcyLDMzMzczLDMzMzc0LDMzMzc2LDMzMzc3LDMzMzc4LDMzMzc5LDMzMzgwLDMzMzgxLDMzMzgyLDMzMzgzLDMzMzg1LDI1MzE5LDI3ODcwLDI5Mjc1LDI1MTk3LDM4MDYyLDMyNDQ1LDMzMDQzLDI3OTg3LDIwODkyLDI0MzI0LDIyOTAwLDIxMTYyLDI0NTk0''@;'; put 'put ''LDIyODk5LDI2MjYyLDM0Mzg0LDMwMTExLDI1Mzg2LDI1MDYyLDMxOTgzLDM1ODM0LDIxNzM0LDI3NDMxLDQwNDg1LDI3NTcyLDM0MjYxLDIxNTg5LDIwNTk4LDI3ODEyLDIxODY2LDM2Mjc2LDI5MjI4LDI0MDg1LDI0NTk3LDI5NzUwLDI1MjkzLDI1NDkwLDI5MjYwLDI0NDcyLDI4MjI3LDI3''@;'; put 'put ''OTY2LDI1ODU2LDI4NTA0LDMwNDI0LDMwOTI4LDMwNDYwLDMwMDM2LDIxMDI4LDIxNDY3LDIwMDUxLDI0MjIyLDI2MDQ5LDMyODEwLDMyOTgyLDI1MjQzLDIxNjM4LDIxMDMyLDI4ODQ2LDM0OTU3LDM2MzA1LDI3ODczLDIxNjI0LDMyOTg2LDIyNTIxLDM1MDYwLDM2MTgwLDM4NTA2LDM3MTk3''@;'; put 'put ''LDIwMzI5LDI3ODAzLDIxOTQzLDMwNDA2LDMwNzY4LDI1MjU2LDI4OTIxLDI4NTU4LDI0NDI5LDM0MDI4LDI2ODQyLDMwODQ0LDMxNzM1LDMzMTkyLDI2Mzc5LDQwNTI3LDI1NDQ3LDMwODk2LDIyMzgzLDMwNzM4LDM4NzEzLDI1MjA5LDI1MjU5LDIxMTI4LDI5NzQ5LDI3NjA3LDMzMzg2LDMz''@;'; put 'put ''Mzg3LDMzMzg4LDMzMzg5LDMzMzkzLDMzMzk3LDMzMzk4LDMzMzk5LDMzNDAwLDMzNDAzLDMzNDA0LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEzLDMzNDE0LDMzNDE1LDMzNDE3LDMzNDIwLDMzNDI0LDMzNDI3LDMzNDI4LDMzNDI5LDMzNDMwLDMzNDM0LDMzNDM1LDMzNDM4LDMzNDQwLDMzNDQy''@;'; put 'put ''LDMzNDQzLDMzNDQ3LDMzNDU4LDMzNDYxLDMzNDYyLDMzNDY2LDMzNDY3LDMzNDY4LDMzNDcxLDMzNDcyLDMzNDc0LDMzNDc1LDMzNDc3LDMzNDc4LDMzNDgxLDMzNDg4LDMzNDk0LDMzNDk3LDMzNDk4LDMzNTAxLDMzNTA2LDMzNTExLDMzNTEyLDMzNTEzLDMzNTE0LDMzNTE2LDMzNTE3LDMz''@;'; put 'put ''NTE4LDMzNTIwLDMzNTIyLDMzNTIzLDMzNTI1LDMzNTI2LDMzNTI4LDMzNTMwLDMzNTMyLDMzNTMzLDMzNTM0LDMzNTM1LDMzNTM2LDMzNTQ2LDMzNTQ3LDMzNTQ5LDMzNTUyLDMzNTU0LDMzNTU1LDMzNTU4LDMzNTYwLDMzNTYxLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY4LDMzNTY5LDMzNTcw''@;'; put 'put ''LDMzNTcxLDMzNTcyLDMzNTczLDMzNTc0LDMzNTc3LDMzNTc4LDMzNTgyLDMzNTg0LDMzNTg2LDMzNTkxLDMzNTk1LDMzNTk3LDIxODYwLDMzMDg2LDMwMTMwLDMwMzgyLDIxMzA1LDMwMTc0LDIwNzMxLDIzNjE3LDM1NjkyLDMxNjg3LDIwNTU5LDI5MjU1LDM5NTc1LDM5MTI4LDI4NDE4LDI5''@;'; put 'put ''OTIyLDMxMDgwLDI1NzM1LDMwNjI5LDI1MzQwLDM5MDU3LDM2MTM5LDIxNjk3LDMyODU2LDIwMDUwLDIyMzc4LDMzNTI5LDMzODA1LDI0MTc5LDIwOTczLDI5OTQyLDM1NzgwLDIzNjMxLDIyMzY5LDI3OTAwLDM5MDQ3LDIzMTEwLDMwNzcyLDM5NzQ4LDM2ODQzLDMxODkzLDIxMDc4LDI1MTY5''@;'; put 'put ''LDM4MTM4LDIwMTY2LDMzNjcwLDMzODg5LDMzNzY5LDMzOTcwLDIyNDg0LDI2NDIwLDIyMjc1LDI2MjIyLDI4MDA2LDM1ODg5LDI2MzMzLDI4Njg5LDI2Mzk5LDI3NDUwLDI2NjQ2LDI1MTE0LDIyOTcxLDE5OTcxLDIwOTMyLDI4NDIyLDI2NTc4LDI3NzkxLDIwODU0LDI2ODI3LDIyODU1LDI3''@;'; put 'put ''NDk1LDMwMDU0LDIzODIyLDMzMDQwLDQwNzg0LDI2MDcxLDMxMDQ4LDMxMDQxLDM5NTY5LDM2MjE1LDIzNjgyLDIwMDYyLDIwMjI1LDIxNTUxLDIyODY1LDMwNzMyLDIyMTIwLDI3NjY4LDM2ODA0LDI0MzIzLDI3NzczLDI3ODc1LDM1NzU1LDI1NDg4LDMzNTk4LDMzNTk5LDMzNjAxLDMzNjAy''@;'; put 'put ''LDMzNjA0LDMzNjA1LDMzNjA4LDMzNjEwLDMzNjExLDMzNjEyLDMzNjEzLDMzNjE0LDMzNjE5LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjI0LDMzNjI1LDMzNjI5LDMzNjM0LDMzNjQ4LDMzNjQ5LDMzNjUwLDMzNjUxLDMzNjUyLDMzNjUzLDMzNjU0LDMzNjU3LDMzNjU4LDMzNjYyLDMzNjYzLDMz''@;'; put 'put ''NjY0LDMzNjY1LDMzNjY2LDMzNjY3LDMzNjY4LDMzNjcxLDMzNjcyLDMzNjc0LDMzNjc1LDMzNjc2LDMzNjc3LDMzNjc5LDMzNjgwLDMzNjgxLDMzNjg0LDMzNjg1LDMzNjg2LDMzNjg3LDMzNjg5LDMzNjkwLDMzNjkzLDMzNjk1LDMzNjk3LDMzNjk4LDMzNjk5LDMzNzAwLDMzNzAxLDMzNzAy''@;'; put 'put ''LDMzNzAzLDMzNzA4LDMzNzA5LDMzNzEwLDMzNzExLDMzNzE3LDMzNzIzLDMzNzI2LDMzNzI3LDMzNzMwLDMzNzMxLDMzNzMyLDMzNzM0LDMzNzM2LDMzNzM3LDMzNzM5LDMzNzQxLDMzNzQyLDMzNzQ0LDMzNzQ1LDMzNzQ2LDMzNzQ3LDMzNzQ5LDMzNzUxLDMzNzUzLDMzNzU0LDMzNzU1LDMz''@;'; put 'put ''NzU4LDMzNzYyLDMzNzYzLDMzNzY0LDMzNzY2LDMzNzY3LDMzNzY4LDMzNzcxLDMzNzcyLDMzNzczLDI0Njg4LDI3OTY1LDI5MzAxLDI1MTkwLDM4MDMwLDM4MDg1LDIxMzE1LDM2ODAxLDMxNjE0LDIwMTkxLDM1ODc4LDIwMDk0LDQwNjYwLDM4MDY1LDM4MDY3LDIxMDY5LDI4NTA4LDM2OTYz''@;'; put 'put ''LDI3OTczLDM1ODkyLDIyNTQ1LDIzODg0LDI3NDI0LDI3NDY1LDI2NTM4LDIxNTk1LDMzMTA4LDMyNjUyLDIyNjgxLDM0MTAzLDI0Mzc4LDI1MjUwLDI3MjA3LDM4MjAxLDI1OTcwLDI0NzA4LDI2NzI1LDMwNjMxLDIwMDUyLDIwMzkyLDI0MDM5LDM4ODA4LDI1NzcyLDMyNzI4LDIzNzg5LDIw''@;'; put 'put ''NDMxLDMxMzczLDIwOTk5LDMzNTQwLDE5OTg4LDI0NjIzLDMxMzYzLDM4MDU0LDIwNDA1LDIwMTQ2LDMxMjA2LDI5NzQ4LDIxMjIwLDMzNDY1LDI1ODEwLDMxMTY1LDIzNTE3LDI3Nzc3LDM4NzM4LDM2NzMxLDI3NjgyLDIwNTQyLDIxMzc1LDI4MTY1LDI1ODA2LDI2MjI4LDI3Njk2LDI0Nzcz''@;'; put 'put ''LDM5MDMxLDM1ODMxLDI0MTk4LDI5NzU2LDMxMzUxLDMxMTc5LDE5OTkyLDM3MDQxLDI5Njk5LDI3NzE0LDIyMjM0LDM3MTk1LDI3ODQ1LDM2MjM1LDIxMzA2LDM0NTAyLDI2MzU0LDM2NTI3LDIzNjI0LDM5NTM3LDI4MTkyLDMzNzc0LDMzNzc1LDMzNzc5LDMzNzgwLDMzNzgxLDMzNzgyLDMz''@;'; put 'put ''NzgzLDMzNzg2LDMzNzg3LDMzNzg4LDMzNzkwLDMzNzkxLDMzNzkyLDMzNzk0LDMzNzk3LDMzNzk5LDMzODAwLDMzODAxLDMzODAyLDMzODA4LDMzODEwLDMzODExLDMzODEyLDMzODEzLDMzODE0LDMzODE1LDMzODE3LDMzODE4LDMzODE5LDMzODIyLDMzODIzLDMzODI0LDMzODI1LDMzODI2''@;'; put 'put ''LDMzODI3LDMzODMzLDMzODM0LDMzODM1LDMzODM2LDMzODM3LDMzODM4LDMzODM5LDMzODQwLDMzODQyLDMzODQzLDMzODQ0LDMzODQ1LDMzODQ2LDMzODQ3LDMzODQ5LDMzODUwLDMzODUxLDMzODU0LDMzODU1LDMzODU2LDMzODU3LDMzODU4LDMzODU5LDMzODYwLDMzODYxLDMzODYzLDMz''@;'; put 'put ''ODY0LDMzODY1LDMzODY2LDMzODY3LDMzODY4LDMzODY5LDMzODcwLDMzODcxLDMzODcyLDMzODc0LDMzODc1LDMzODc2LDMzODc3LDMzODc4LDMzODgwLDMzODg1LDMzODg2LDMzODg3LDMzODg4LDMzODkwLDMzODkyLDMzODkzLDMzODk0LDMzODk1LDMzODk2LDMzODk4LDMzOTAyLDMzOTAz''@;'; put 'put ''LDMzOTA0LDMzOTA2LDMzOTA4LDMzOTExLDMzOTEzLDMzOTE1LDMzOTE2LDIxNDYyLDIzMDk0LDQwODQzLDM2MjU5LDIxNDM1LDIyMjgwLDM5MDc5LDI2NDM1LDM3Mjc1LDI3ODQ5LDIwODQwLDMwMTU0LDI1MzMxLDI5MzU2LDIxMDQ4LDIxMTQ5LDMyNTcwLDI4ODIwLDMwMjY0LDIxMzY0LDQw''@;'; put 'put ''NTIyLDI3MDYzLDMwODMwLDM4NTkyLDM1MDMzLDMyNjc2LDI4OTgyLDI5MTIzLDIwODczLDI2NTc5LDI5OTI0LDIyNzU2LDI1ODgwLDIyMTk5LDM1NzUzLDM5Mjg2LDI1MjAwLDMyNDY5LDI0ODI1LDI4OTA5LDIyNzY0LDIwMTYxLDIwMTU0LDI0NTI1LDM4ODg3LDIwMjE5LDM1NzQ4LDIwOTk1''@;'; put 'put ''LDIyOTIyLDMyNDI3LDI1MTcyLDIwMTczLDI2MDg1LDI1MTAyLDMzNTkyLDMzOTkzLDMzNjM1LDM0NzAxLDI5MDc2LDI4MzQyLDIzNDgxLDMyNDY2LDIwODg3LDI1NTQ1LDI2NTgwLDMyOTA1LDMzNTkzLDM0ODM3LDIwNzU0LDIzNDE4LDIyOTE0LDM2Nzg1LDIwMDgzLDI3NzQxLDIwODM3LDM1''@;'; put 'put ''MTA5LDM2NzE5LDM4NDQ2LDM0MTIyLDI5NzkwLDM4MTYwLDM4Mzg0LDI4MDcwLDMzNTA5LDI0MzY5LDI1NzQ2LDI3OTIyLDMzODMyLDMzMTM0LDQwMTMxLDIyNjIyLDM2MTg3LDE5OTc3LDIxNDQxLDMzOTE3LDMzOTE4LDMzOTE5LDMzOTIwLDMzOTIxLDMzOTIzLDMzOTI0LDMzOTI1LDMzOTI2''@;'; put 'put ''LDMzOTMwLDMzOTMzLDMzOTM1LDMzOTM2LDMzOTM3LDMzOTM4LDMzOTM5LDMzOTQwLDMzOTQxLDMzOTQyLDMzOTQ0LDMzOTQ2LDMzOTQ3LDMzOTQ5LDMzOTUwLDMzOTUxLDMzOTUyLDMzOTU0LDMzOTU1LDMzOTU2LDMzOTU3LDMzOTU4LDMzOTU5LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTYzLDMz''@;'; put 'put ''OTY0LDMzOTY1LDMzOTY2LDMzOTY4LDMzOTY5LDMzOTcxLDMzOTczLDMzOTc0LDMzOTc1LDMzOTc5LDMzOTgwLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTg3LDMzOTg5LDMzOTkwLDMzOTkxLDMzOTkyLDMzOTk1LDMzOTk2LDMzOTk4LDMzOTk5LDM0MDAyLDM0MDA0LDM0MDA1LDM0MDA3LDM0MDA4''@;'; put 'put ''LDM0MDA5LDM0MDEwLDM0MDExLDM0MDEyLDM0MDE0LDM0MDE3LDM0MDE4LDM0MDIwLDM0MDIzLDM0MDI0LDM0MDI1LDM0MDI2LDM0MDI3LDM0MDI5LDM0MDMwLDM0MDMxLDM0MDMzLDM0MDM0LDM0MDM1LDM0MDM2LDM0MDM3LDM0MDM4LDM0MDM5LDM0MDQwLDM0MDQxLDM0MDQyLDM0MDQzLDM0''@;'; put 'put ''MDQ1LDM0MDQ2LDM0MDQ4LDM0MDQ5LDM0MDUwLDIwMjU0LDI1OTU1LDI2NzA1LDIxOTcxLDIwMDA3LDI1NjIwLDM5NTc4LDI1MTk1LDIzMjM0LDI5NzkxLDMzMzk0LDI4MDczLDI2ODYyLDIwNzExLDMzNjc4LDMwNzIyLDI2NDMyLDIxMDQ5LDI3ODAxLDMyNDMzLDIwNjY3LDIxODYxLDI5MDIy''@;'; put 'put ''LDMxNTc5LDI2MTk0LDI5NjQyLDMzNTE1LDI2NDQxLDIzNjY1LDIxMDI0LDI5MDUzLDM0OTIzLDM4Mzc4LDM4NDg1LDI1Nzk3LDM2MTkzLDMzMjAzLDIxODkyLDI3NzMzLDI1MTU5LDMyNTU4LDIyNjc0LDIwMjYwLDIxODMwLDM2MTc1LDI2MTg4LDE5OTc4LDIzNTc4LDM1MDU5LDI2Nzg2LDI1''@;'; put 'put ''NDIyLDMxMjQ1LDI4OTAzLDMzNDIxLDIxMjQyLDM4OTAyLDIzNTY5LDIxNzM2LDM3MDQ1LDMyNDYxLDIyODgyLDM2MTcwLDM0NTAzLDMzMjkyLDMzMjkzLDM2MTk4LDI1NjY4LDIzNTU2LDI0OTEzLDI4MDQxLDMxMDM4LDM1Nzc0LDMwNzc1LDMwMDAzLDIxNjI3LDIwMjgwLDM2NTIzLDI4MTQ1''@;'; put 'put ''LDIzMDcyLDMyNDUzLDMxMDcwLDI3Nzg0LDIzNDU3LDIzMTU4LDI5OTc4LDMyOTU4LDI0OTEwLDI4MTgzLDIyNzY4LDI5OTgzLDI5OTg5LDI5Mjk4LDIxMzE5LDMyNDk5LDM0MDUxLDM0MDUyLDM0MDUzLDM0MDU0LDM0MDU1LDM0MDU2LDM0MDU3LDM0MDU4LDM0MDU5LDM0MDYxLDM0MDYyLDM0''@;'; put 'put ''MDYzLDM0MDY0LDM0MDY2LDM0MDY4LDM0MDY5LDM0MDcwLDM0MDcyLDM0MDczLDM0MDc1LDM0MDc2LDM0MDc3LDM0MDc4LDM0MDgwLDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg2LDM0MDg3LDM0MDg4LDM0MDg5LDM0MDkwLDM0MDkzLDM0MDk0LDM0MDk1LDM0MDk2LDM0MDk3LDM0MDk4''@;'; put 'put ''LDM0MDk5LDM0MTAwLDM0MTAxLDM0MTAyLDM0MTEwLDM0MTExLDM0MTEyLDM0MTEzLDM0MTE0LDM0MTE2LDM0MTE3LDM0MTE4LDM0MTE5LDM0MTIzLDM0MTI0LDM0MTI1LDM0MTI2LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTMyLDM0MTMzLDM0MTM1LDM0MTM2LDM0MTM4LDM0''@;'; put 'put ''MTM5LDM0MTQwLDM0MTQxLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ3LDM0MTQ5LDM0MTUwLDM0MTUxLDM0MTUzLDM0MTU0LDM0MTU1LDM0MTU2LDM0MTU3LDM0MTU4LDM0MTU5LDM0MTYwLDM0MTYxLDM0MTYzLDM0MTY1LDM0MTY2LDM0MTY3LDM0MTY4LDM0MTcyLDM0MTczLDM0MTc1''@;'; put 'put ''LDM0MTc2LDM0MTc3LDMwNDY1LDMwNDI3LDIxMDk3LDMyOTg4LDIyMzA3LDI0MDcyLDIyODMzLDI5NDIyLDI2MDQ1LDI4Mjg3LDM1Nzk5LDIzNjA4LDM0NDE3LDIxMzEzLDMwNzA3LDI1MzQyLDI2MTAyLDIwMTYwLDM5MTM1LDM0NDMyLDIzNDU0LDM1NzgyLDIxNDkwLDMwNjkwLDIwMzUxLDIz''@;'; put 'put ''NjMwLDM5NTQyLDIyOTg3LDI0MzM1LDMxMDM0LDIyNzYzLDE5OTkwLDI2NjIzLDIwMTA3LDI1MzI1LDM1NDc1LDM2ODkzLDIxMTgzLDI2MTU5LDIxOTgwLDIyMTI0LDM2ODY2LDIwMTgxLDIwMzY1LDM3MzIyLDM5MjgwLDI3NjYzLDI0MDY2LDI0NjQzLDIzNDYwLDM1MjcwLDM1Nzk3LDI1OTEw''@;'; put 'put ''LDI1MTYzLDM5MzE4LDIzNDMyLDIzNTUxLDI1NDgwLDIxODA2LDIxNDYzLDMwMjQ2LDIwODYxLDM0MDkyLDI2NTMwLDI2ODAzLDI3NTMwLDI1MjM0LDM2NzU1LDIxNDYwLDMzMjk4LDI4MTEzLDMwMDk1LDIwMDcwLDM2MTc0LDIzNDA4LDI5MDg3LDM0MjIzLDI2MjU3LDI2MzI5LDMyNjI2LDM0''@;'; put 'put ''NTYwLDQwNjUzLDQwNzM2LDIzNjQ2LDI2NDE1LDM2ODQ4LDI2NjQxLDI2NDYzLDI1MTAxLDMxNDQ2LDIyNjYxLDI0MjQ2LDI1OTY4LDI4NDY1LDM0MTc4LDM0MTc5LDM0MTgyLDM0MTg0LDM0MTg1LDM0MTg2LDM0MTg3LDM0MTg4LDM0MTg5LDM0MTkwLDM0MTkyLDM0MTkzLDM0MTk0LDM0MTk1''@;'; put 'put ''LDM0MTk2LDM0MTk3LDM0MTk4LDM0MTk5LDM0MjAwLDM0MjAxLDM0MjAyLDM0MjA1LDM0MjA2LDM0MjA3LDM0MjA4LDM0MjA5LDM0MjEwLDM0MjExLDM0MjEzLDM0MjE0LDM0MjE1LDM0MjE3LDM0MjE5LDM0MjIwLDM0MjIxLDM0MjI1LDM0MjI2LDM0MjI3LDM0MjI4LDM0MjI5LDM0MjMwLDM0''@;'; put 'put ''MjMyLDM0MjM0LDM0MjM1LDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQwLDM0MjQyLDM0MjQzLDM0MjQ0LDM0MjQ1LDM0MjQ2LDM0MjQ3LDM0MjQ4LDM0MjUwLDM0MjUxLDM0MjUyLDM0MjUzLDM0MjU0LDM0MjU3LDM0MjU4LDM0MjYwLDM0MjYyLDM0MjYzLDM0MjY0LDM0MjY1LDM0MjY2''@;'; put 'put ''LDM0MjY3LDM0MjY5LDM0MjcwLDM0MjcxLDM0MjcyLDM0MjczLDM0Mjc0LDM0Mjc1LDM0Mjc3LDM0Mjc4LDM0Mjc5LDM0MjgwLDM0MjgyLDM0MjgzLDM0Mjg0LDM0Mjg1LDM0Mjg2LDM0Mjg3LDM0Mjg4LDM0Mjg5LDM0MjkwLDM0MjkxLDM0MjkyLDM0MjkzLDM0Mjk0LDM0Mjk1LDM0Mjk2LDI0''@;'; put 'put ''NjYxLDIxMDQ3LDMyNzgxLDI1Njg0LDM0OTI4LDI5OTkzLDI0MDY5LDI2NjQzLDI1MzMyLDM4Njg0LDIxNDUyLDI5MjQ1LDM1ODQxLDI3NzAwLDMwNTYxLDMxMjQ2LDIxNTUwLDMwNjM2LDM5MDM0LDMzMzA4LDM1ODI4LDMwODA1LDI2Mzg4LDI4ODY1LDI2MDMxLDI1NzQ5LDIyMDcwLDI0NjA1''@;'; put 'put ''LDMxMTY5LDIxNDk2LDE5OTk3LDI3NTE1LDMyOTAyLDIzNTQ2LDIxOTg3LDIyMjM1LDIwMjgyLDIwMjg0LDM5MjgyLDI0MDUxLDI2NDk0LDMyODI0LDI0NTc4LDM5MDQyLDM2ODY1LDIzNDM1LDM1NzcyLDM1ODI5LDI1NjI4LDMzMzY4LDI1ODIyLDIyMDEzLDMzNDg3LDM3MjIxLDIwNDM5LDMy''@;'; put 'put ''MDMyLDM2ODk1LDMxOTAzLDIwNzIzLDIyNjA5LDI4MzM1LDIzNDg3LDM1Nzg1LDMyODk5LDM3MjQwLDMzOTQ4LDMxNjM5LDM0NDI5LDM4NTM5LDM4NTQzLDMyNDg1LDM5NjM1LDMwODYyLDIzNjgxLDMxMzE5LDM2OTMwLDM4NTY3LDMxMDcxLDIzMzg1LDI1NDM5LDMxNDk5LDM0MDAxLDI2Nzk3''@;'; put 'put ''LDIxNzY2LDMyNTUzLDI5NzEyLDMyMDM0LDM4MTQ1LDI1MTUyLDIyNjA0LDIwMTgyLDIzNDI3LDIyOTA1LDIyNjEyLDM0Mjk3LDM0Mjk4LDM0MzAwLDM0MzAxLDM0MzAyLDM0MzA0LDM0MzA1LDM0MzA2LDM0MzA3LDM0MzA4LDM0MzEwLDM0MzExLDM0MzEyLDM0MzEzLDM0MzE0LDM0MzE1LDM0''@;'; put 'put ''MzE2LDM0MzE3LDM0MzE4LDM0MzE5LDM0MzIwLDM0MzIyLDM0MzIzLDM0MzI0LDM0MzI1LDM0MzI3LDM0MzI4LDM0MzI5LDM0MzMwLDM0MzMxLDM0MzMyLDM0MzMzLDM0MzM0LDM0MzM1LDM0MzM2LDM0MzM3LDM0MzM4LDM0MzM5LDM0MzQwLDM0MzQxLDM0MzQyLDM0MzQ0LDM0MzQ2LDM0MzQ3''@;'; put 'put ''LDM0MzQ4LDM0MzQ5LDM0MzUwLDM0MzUxLDM0MzUyLDM0MzUzLDM0MzU0LDM0MzU1LDM0MzU2LDM0MzU3LDM0MzU4LDM0MzU5LDM0MzYxLDM0MzYyLDM0MzYzLDM0MzY1LDM0MzY2LDM0MzY3LDM0MzY4LDM0MzY5LDM0MzcwLDM0MzcxLDM0MzcyLDM0MzczLDM0Mzc0LDM0Mzc1LDM0Mzc2LDM0''@;'; put 'put ''Mzc3LDM0Mzc4LDM0Mzc5LDM0MzgwLDM0Mzg2LDM0Mzg3LDM0Mzg5LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk1LDM0Mzk2LDM0Mzk3LDM0Mzk5LDM0NDAwLDM0NDAxLDM0NDAzLDM0NDA0LDM0NDA1LDM0NDA2LDM0NDA3LDM0NDA4LDM0NDA5LDM0NDEwLDI5NTQ5LDI1Mzc0LDM2NDI3''@;'; put 'put ''LDM2MzY3LDMyOTc0LDMzNDkyLDI1MjYwLDIxNDg4LDI3ODg4LDM3MjE0LDIyODI2LDI0NTc3LDI3NzYwLDIyMzQ5LDI1Njc0LDM2MTM4LDMwMjUxLDI4MzkzLDIyMzYzLDI3MjY0LDMwMTkyLDI4NTI1LDM1ODg1LDM1ODQ4LDIyMzc0LDI3NjMxLDM0OTYyLDMwODk5LDI1NTA2LDIxNDk3LDI4''@;'; put 'put ''ODQ1LDI3NzQ4LDIyNjE2LDI1NjQyLDIyNTMwLDI2ODQ4LDMzMTc5LDIxNzc2LDMxOTU4LDIwNTA0LDM2NTM4LDI4MTA4LDM2MjU1LDI4OTA3LDI1NDg3LDI4MDU5LDI4MzcyLDMyNDg2LDMzNzk2LDI2NjkxLDM2ODY3LDI4MTIwLDM4NTE4LDM1NzUyLDIyODcxLDI5MzA1LDM0Mjc2LDMzMTUw''@;'; put 'put ''LDMwMTQwLDM1NDY2LDI2Nzk5LDIxMDc2LDM2Mzg2LDM4MTYxLDI1NTUyLDM5MDY0LDM2NDIwLDIxODg0LDIwMzA3LDI2MzY3LDIyMTU5LDI0Nzg5LDI4MDUzLDIxMDU5LDIzNjI1LDIyODI1LDI4MTU1LDIyNjM1LDNlNCwyOTk4MCwyNDY4NCwzMzMwMCwzMzA5NCwyNTM2MSwyNjQ2NSwzNjgz''@;'; put 'put ''NCwzMDUyMiwzNjMzOSwzNjE0OCwzODA4MSwyNDA4NiwyMTM4MSwyMTU0OCwyODg2NywzNDQxMywzNDQxNSwzNDQxNiwzNDQxOCwzNDQxOSwzNDQyMCwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNCwzNDQzNSwzNDQzNiwzNDQzNywzNDQzOCwzNDQzOSwzNDQ0MCwzNDQ0MSwzNDQ0NiwzNDQ0Nywz''@;'; put 'put ''NDQ0OCwzNDQ0OSwzNDQ1MCwzNDQ1MiwzNDQ1NCwzNDQ1NSwzNDQ1NiwzNDQ1NywzNDQ1OCwzNDQ1OSwzNDQ2MiwzNDQ2MywzNDQ2NCwzNDQ2NSwzNDQ2NiwzNDQ2OSwzNDQ3MCwzNDQ3NSwzNDQ3NywzNDQ3OCwzNDQ4MiwzNDQ4MywzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5MSwzNDQ5MiwzNDQ5''@;'; put 'put ''MywzNDQ5NCwzNDQ5NSwzNDQ5NywzNDQ5OCwzNDQ5OSwzNDUwMSwzNDUwNCwzNDUwOCwzNDUwOSwzNDUxNCwzNDUxNSwzNDUxNywzNDUxOCwzNDUxOSwzNDUyMiwzNDUyNCwzNDUyNSwzNDUyOCwzNDUyOSwzNDUzMCwzNDUzMSwzNDUzMywzNDUzNCwzNDUzNSwzNDUzNiwzNDUzOCwzNDUzOSwz''@;'; put 'put ''NDU0MCwzNDU0MywzNDU0OSwzNDU1MCwzNDU1MSwzNDU1NCwzNDU1NSwzNDU1NiwzNDU1NywzNDU1OSwzNDU2MSwzNDU2NCwzNDU2NSwzNDU2NiwzNDU3MSwzNDU3MiwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3NywzNDU4MCwzNDU4MiwyNzcxMiwyNDMxMSwyMDU3MiwyMDE0MSwyNDIzNywyNTQw''@;'; put 'put ''MiwzMzM1MSwzNjg5MCwyNjcwNCwzNzIzMCwzMDY0MywyMTUxNiwzODEwOCwyNDQyMCwzMTQ2MSwyNjc0MiwyNTQxMywzMTU3MCwzMjQ3OSwzMDE3MSwyMDU5OSwyNTIzNywyMjgzNiwzNjg3OSwyMDk4NCwzMTE3MSwzMTM2MSwyMjI3MCwyNDQ2NiwzNjg4NCwyODAzNCwyMzY0OCwyMjMwMywy''@;'; put 'put ''MTUyMCwyMDgyMCwyODIzNywyMjI0MiwyNTUxMiwzOTA1OSwzMzE1MSwzNDU4MSwzNTExNCwzNjg2NCwyMTUzNCwyMzY2MywzMzIxNiwyNTMwMiwyNTE3NiwzMzA3Myw0MDUwMSwzODQ2NCwzOTUzNCwzOTU0OCwyNjkyNSwyMjk0OSwyNTI5OSwyMTgyMiwyNTM2NiwyMTcwMywzNDUyMSwyNzk2''@;'; put 'put ''NCwyMzA0MywyOTkyNiwzNDk3MiwyNzQ5OCwyMjgwNiwzNTkxNiwyNDM2NywyODI4NiwyOTYwOSwzOTAzNywyMDAyNCwyODkxOSwyMzQzNiwzMDg3MSwyNTQwNSwyNjIwMiwzMDM1OCwyNDc3OSwyMzQ1MSwyMzExMywxOTk3NSwzMzEwOSwyNzc1NCwyOTU3OSwyMDEyOSwyNjUwNSwzMjU5Mywy''@;'; put 'put ''NDQ0OCwyNjEwNiwyNjM5NSwyNDUzNiwyMjkxNiwyMzA0MSwzNDU4NSwzNDU4NywzNDU4OSwzNDU5MSwzNDU5MiwzNDU5NiwzNDU5OCwzNDU5OSwzNDYwMCwzNDYwMiwzNDYwMywzNDYwNCwzNDYwNSwzNDYwNywzNDYwOCwzNDYxMCwzNDYxMSwzNDYxMywzNDYxNCwzNDYxNiwzNDYxNywzNDYx''@;'; put 'put ''OCwzNDYyMCwzNDYyMSwzNDYyNCwzNDYyNSwzNDYyNiwzNDYyNywzNDYyOCwzNDYyOSwzNDYzMCwzNDYzNCwzNDYzNSwzNDYzNywzNDYzOSwzNDY0MCwzNDY0MSwzNDY0MiwzNDY0NCwzNDY0NSwzNDY0NiwzNDY0OCwzNDY1MCwzNDY1MSwzNDY1MiwzNDY1MywzNDY1NCwzNDY1NSwzNDY1Nywz''@;'; put 'put ''NDY1OCwzNDY2MiwzNDY2MywzNDY2NCwzNDY2NSwzNDY2NiwzNDY2NywzNDY2OCwzNDY2OSwzNDY3MSwzNDY3MywzNDY3NCwzNDY3NSwzNDY3NywzNDY3OSwzNDY4MCwzNDY4MSwzNDY4MiwzNDY4NywzNDY4OCwzNDY4OSwzNDY5MiwzNDY5NCwzNDY5NSwzNDY5NywzNDY5OCwzNDcwMCwzNDcw''@;'; put 'put ''MiwzNDcwMywzNDcwNCwzNDcwNSwzNDcwNiwzNDcwOCwzNDcwOSwzNDcxMCwzNDcxMiwzNDcxMywzNDcxNCwzNDcxNSwzNDcxNiwzNDcxNywzNDcxOCwzNDcyMCwzNDcyMSwzNDcyMiwzNDcyMywzNDcyNCwyNDAxMywyNDQ5NCwyMTM2MSwzODg4NiwzNjgyOSwyNjY5MywyMjI2MCwyMTgwNywy''@;'; put 'put ''NDc5OSwyMDAyNiwyODQ5MywzMjUwMCwzMzQ3OSwzMzgwNiwyMjk5NiwyMDI1NSwyMDI2NiwyMzYxNCwzMjQyOCwyNjQxMCwzNDA3NCwyMTYxOSwzMDAzMSwzMjk2MywyMTg5MCwzOTc1OSwyMDMwMSwyODIwNSwzNTg1OSwyMzU2MSwyNDk0NCwyMTM1NSwzMDIzOSwyODIwMSwzNDQ0MiwyNTk5''@;'; put 'put ''MSwzODM5NSwzMjQ0MSwyMTU2MywzMTI4MywzMjAxMCwzODM4MiwyMTk4NSwzMjcwNSwyOTkzNCwyNTM3MywzNDU4MywyODA2NSwzMTM4OSwyNTEwNSwyNjAxNywyMTM1MSwyNTU2OSwyNzc3OSwyNDA0MywyMTU5NiwzODA1NiwyMDA0NCwyNzc0NSwzNTgyMCwyMzYyNywyNjA4MCwzMzQzNiwy''@;'; put 'put ''Njc5MSwyMTU2NiwyMTU1NiwyNzU5NSwyNzQ5NCwyMDExNiwyNTQxMCwyMTMyMCwzMzMxMCwyMDIzNywyMDM5OCwyMjM2NiwyNTA5OCwzODY1NCwyNjIxMiwyOTI4OSwyMTI0NywyMTE1MywyNDczNSwzNTgyMywyNjEzMiwyOTA4MSwyNjUxMiwzNTE5OSwzMDgwMiwzMDcxNywyNjIyNCwyMjA3''@;'; put 'put ''NSwyMTU2MCwzODE3NywyOTMwNiwzNDcyNSwzNDcyNiwzNDcyNywzNDcyOSwzNDczMCwzNDczNCwzNDczNiwzNDczNywzNDczOCwzNDc0MCwzNDc0MiwzNDc0MywzNDc0NCwzNDc0NSwzNDc0NywzNDc0OCwzNDc1MCwzNDc1MSwzNDc1MywzNDc1NCwzNDc1NSwzNDc1NiwzNDc1NywzNDc1OSwz''@;'; put 'put ''NDc2MCwzNDc2MSwzNDc2NCwzNDc2NSwzNDc2NiwzNDc2NywzNDc2OCwzNDc3MiwzNDc3MywzNDc3NCwzNDc3NSwzNDc3NiwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MSwzNDc4MiwzNDc4MywzNDc4NSwzNDc4NiwzNDc4NywzNDc4OCwzNDc5MCwzNDc5MSwzNDc5MiwzNDc5MywzNDc5NSwzNDc5''@;'; put 'put ''NiwzNDc5NywzNDc5OSwzNDgwMCwzNDgwMSwzNDgwMiwzNDgwMywzNDgwNCwzNDgwNSwzNDgwNiwzNDgwNywzNDgwOCwzNDgxMCwzNDgxMSwzNDgxMiwzNDgxMywzNDgxNSwzNDgxNiwzNDgxNywzNDgxOCwzNDgyMCwzNDgyMSwzNDgyMiwzNDgyMywzNDgyNCwzNDgyNSwzNDgyNywzNDgyOCwz''@;'; put 'put ''NDgyOSwzNDgzMCwzNDgzMSwzNDgzMiwzNDgzMywzNDgzNCwzNDgzNiwzNDgzOSwzNDg0MCwzNDg0MSwzNDg0MiwzNDg0NCwzNDg0NSwzNDg0NiwzNDg0NywzNDg0OCwzNDg1MSwzMTIzMiwyNDY4NywyNDA3NiwyNDcxMywzMzE4MSwyMjgwNSwyNDc5NiwyOTA2MCwyODkxMSwyODMzMCwyNzcy''@;'; put 'put ''OCwyOTMxMiwyNzI2OCwzNDk4OSwyNDEwOSwyMDA2NCwyMzIxOSwyMTkxNiwzODExNSwyNzkyNywzMTk5NSwzODU1MywyNTEwMywzMjQ1NCwzMDYwNiwzNDQzMCwyMTI4MywzODY4NiwzNjc1OCwyNjI0NywyMzc3NywyMDM4NCwyOTQyMSwxOTk3OSwyMTQxNCwyMjc5OSwyMTUyMywyNTQ3Miwz''@;'; put 'put ''ODE4NCwyMDgwOCwyMDE4NSw0MDA5MiwzMjQyMCwyMTY4OCwzNjEzMiwzNDkwMCwzMzMzNSwzODM4NiwyODA0NiwyNDM1OCwyMzI0NCwyNjE3NCwzODUwNSwyOTYxNiwyOTQ4NiwyMTQzOSwzMzE0NiwzOTMwMSwzMjY3MywyMzQ2NiwzODUxOSwzODQ4MCwzMjQ0NywzMDQ1NiwyMTQxMCwzODI2''@;'; put 'put ''MiwzOTMyMSwzMTY2NSwzNTE0MCwyODI0OCwyMDA2NSwzMjcyNCwzMTA3NywzNTgxNCwyNDgxOSwyMTcwOSwyMDEzOSwzOTAzMywyNDA1NSwyNzIzMywyMDY4NywyMTUyMSwzNTkzNywzMzgzMSwzMDgxMywzODY2MCwyMTA2NiwyMTc0MiwyMjE3OSwzODE0NCwyODA0MCwyMzQ3NywyODEwMiwy''@;'; put 'put ''NjE5NSwzNDg1MiwzNDg1MywzNDg1NCwzNDg1NSwzNDg1NiwzNDg1NywzNDg1OCwzNDg1OSwzNDg2MCwzNDg2MSwzNDg2MiwzNDg2MywzNDg2NCwzNDg2NSwzNDg2NywzNDg2OCwzNDg2OSwzNDg3MCwzNDg3MSwzNDg3MiwzNDg3NCwzNDg3NSwzNDg3NywzNDg3OCwzNDg3OSwzNDg4MSwzNDg4''@;'; put 'put ''MiwzNDg4MywzNDg4NiwzNDg4NywzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NSwzNDg5NiwzNDg5NywzNDg5OCwzNDg5OSwzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwNywzNDkwOCwzNDkwOSwzNDkxMCwzNDkxMSwzNDkxMiwzNDkxOCwzNDkxOSwzNDkyMiwzNDkyNSwz''@;'; put 'put ''NDkyNywzNDkyOSwzNDkzMSwzNDkzMiwzNDkzMywzNDkzNCwzNDkzNiwzNDkzNywzNDkzOCwzNDkzOSwzNDk0MCwzNDk0NCwzNDk0NywzNDk1MCwzNDk1MSwzNDk1MywzNDk1NCwzNDk1NiwzNDk1OCwzNDk1OSwzNDk2MCwzNDk2MSwzNDk2MywzNDk2NCwzNDk2NSwzNDk2NywzNDk2OCwzNDk2''@;'; put 'put ''OSwzNDk3MCwzNDk3MSwzNDk3MywzNDk3NCwzNDk3NSwzNDk3NiwzNDk3NywzNDk3OSwzNDk4MSwzNDk4MiwzNDk4MywzNDk4NCwzNDk4NSwzNDk4NiwyMzU2NywyMzM4OSwyNjY1NywzMjkxOCwyMTg4MCwzMTUwNSwyNTkyOCwyNjk2NCwyMDEyMywyNzQ2MywzNDYzOCwzODc5NSwyMTMyNywy''@;'; put 'put ''NTM3NSwyNTY1OCwzNzAzNCwyNjAxMiwzMjk2MSwzNTg1NiwyMDg4OSwyNjgwMCwyMTM2OCwzNDgwOSwyNTAzMiwyNzg0NCwyNzg5OSwzNTg3NCwyMzYzMywzNDIxOCwzMzQ1NSwzODE1NiwyNzQyNywzNjc2MywyNjAzMiwyNDU3MSwyNDUxNSwyMDQ0OSwzNDg4NSwyNjE0MywzMzEyNSwyOTQ4''@;'; put 'put ''MSwyNDgyNiwyMDg1MiwyMTAwOSwyMjQxMSwyNDQxOCwzNzAyNiwzNDg5MiwzNzI2NiwyNDE4NCwyNjQ0NywyNDYxNSwyMjk5NSwyMDgwNCwyMDk4MiwzMzAxNiwyMTI1NiwyNzc2OSwzODU5NiwyOTA2NiwyMDI0MSwyMDQ2MiwzMjY3MCwyNjQyOSwyMTk1NywzODE1MiwzMTE2OCwzNDk2Niwz''@;'; put 'put ''MjQ4MywyMjY4NywyNTEwMCwzODY1NiwzNDM5NCwyMjA0MCwzOTAzNSwyNDQ2NCwzNTc2OCwzMzk4OCwzNzIwNywyMTQ2NSwyNjA5MywyNDIwNywzMDA0NCwyNDY3NiwzMjExMCwyMzE2NywzMjQ5MCwzMjQ5MywzNjcxMywyMTkyNywyMzQ1OSwyNDc0OCwyNjA1OSwyOTU3MiwzNDk4OCwzNDk5''@;'; put 'put ''MCwzNDk5MSwzNDk5MiwzNDk5NCwzNDk5NSwzNDk5NiwzNDk5NywzNDk5OCwzNWUzLDM1MDAxLDM1MDAyLDM1MDAzLDM1MDA1LDM1MDA2LDM1MDA3LDM1MDA4LDM1MDExLDM1MDEyLDM1MDE1LDM1MDE2LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIzLDM1MDI0LDM1MDI1LDM1MDI3LDM1''@;'; put 'put ''MDMwLDM1MDMxLDM1MDM0LDM1MDM1LDM1MDM2LDM1MDM3LDM1MDM4LDM1MDQwLDM1MDQxLDM1MDQ2LDM1MDQ3LDM1MDQ5LDM1MDUwLDM1MDUxLDM1MDUyLDM1MDUzLDM1MDU0LDM1MDU1LDM1MDU4LDM1MDYxLDM1MDYyLDM1MDYzLDM1MDY2LDM1MDY3LDM1MDY5LDM1MDcxLDM1MDcyLDM1MDcz''@;'; put 'put ''LDM1MDc1LDM1MDc2LDM1MDc3LDM1MDc4LDM1MDc5LDM1MDgwLDM1MDgxLDM1MDgzLDM1MDg0LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDg5LDM1MDkyLDM1MDkzLDM1MDk0LDM1MDk1LDM1MDk2LDM1MTAwLDM1MTAxLDM1MTAyLDM1MTAzLDM1MTA0LDM1MTA2LDM1MTA3LDM1MTA4LDM1MTEwLDM1''@;'; put 'put ''MTExLDM1MTEyLDM1MTEzLDM1MTE2LDM1MTE3LDM1MTE4LDM1MTE5LDM1MTIxLDM1MTIyLDM1MTIzLDM1MTI1LDM1MTI3LDM2ODczLDMwMzA3LDMwNTA1LDMyNDc0LDM4NzcyLDM0MjAzLDIzMzk4LDMxMzQ4LDM4NjM0LDM0ODgwLDIxMTk1LDI5MDcxLDI0NDkwLDI2MDkyLDM1ODEwLDIzNTQ3''@;'; put 'put ''LDM5NTM1LDI0MDMzLDI3NTI5LDI3NzM5LDM1NzU3LDM1NzU5LDM2ODc0LDM2ODA1LDIxMzg3LDI1Mjc2LDQwNDg2LDQwNDkzLDIxNTY4LDIwMDExLDMzNDY5LDI5MjczLDM0NDYwLDIzODMwLDM0OTA1LDI4MDc5LDM4NTk3LDIxNzEzLDIwMTIyLDM1NzY2LDI4OTM3LDIxNjkzLDM4NDA5LDI4''@;'; put 'put ''ODk1LDI4MTUzLDMwNDE2LDIwMDA1LDMwNzQwLDM0NTc4LDIzNzIxLDI0MzEwLDM1MzI4LDM5MDY4LDM4NDE0LDI4ODE0LDI3ODM5LDIyODUyLDI1NTEzLDMwNTI0LDM0ODkzLDI4NDM2LDMzMzk1LDIyNTc2LDI5MTQxLDIxMzg4LDMwNzQ2LDM4NTkzLDIxNzYxLDI0NDIyLDI4OTc2LDIzNDc2''@;'; put 'put ''LDM1ODY2LDM5NTY0LDI3NTIzLDIyODMwLDQwNDk1LDMxMjA3LDI2NDcyLDI1MTk2LDIwMzM1LDMwMTEzLDMyNjUwLDI3OTE1LDM4NDUxLDI3Njg3LDIwMjA4LDMwMTYyLDIwODU5LDI2Njc5LDI4NDc4LDM2OTkyLDMzMTM2LDIyOTM0LDI5ODE0LDM1MTI4LDM1MTI5LDM1MTMwLDM1MTMxLDM1''@;'; put 'put ''MTMyLDM1MTMzLDM1MTM0LDM1MTM1LDM1MTM2LDM1MTM4LDM1MTM5LDM1MTQxLDM1MTQyLDM1MTQzLDM1MTQ0LDM1MTQ1LDM1MTQ2LDM1MTQ3LDM1MTQ4LDM1MTQ5LDM1MTUwLDM1MTUxLDM1MTUyLDM1MTUzLDM1MTU0LDM1MTU1LDM1MTU2LDM1MTU3LDM1MTU4LDM1MTU5LDM1MTYwLDM1MTYx''@;'; put 'put ''LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY1LDM1MTY4LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTcyLDM1MTczLDM1MTc1LDM1MTc2LDM1MTc3LDM1MTc4LDM1MTc5LDM1MTgwLDM1MTgxLDM1MTgyLDM1MTgzLDM1MTg0LDM1MTg1LDM1MTg2LDM1MTg3LDM1MTg4LDM1MTg5LDM1MTkwLDM1MTkxLDM1''@;'; put 'put ''MTkyLDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk3LDM1MTk4LDM1MjAwLDM1MjAyLDM1MjA0LDM1MjA1LDM1MjA3LDM1MjA4LDM1MjA5LDM1MjEwLDM1MjExLDM1MjEyLDM1MjEzLDM1MjE0LDM1MjE1LDM1MjE2LDM1MjE3LDM1MjE4LDM1MjE5LDM1MjIwLDM1MjIxLDM1MjIyLDM1MjIzLDM1MjI0''@;'; put 'put ''LDM1MjI1LDM1MjI2LDM1MjI3LDM1MjI4LDM1MjI5LDM1MjMwLDM1MjMxLDM1MjMyLDM1MjMzLDI1NjcxLDIzNTkxLDM2OTY1LDMxMzc3LDM1ODc1LDIzMDAyLDIxNjc2LDMzMjgwLDMzNjQ3LDM1MjAxLDMyNzY4LDI2OTI4LDIyMDk0LDMyODIyLDI5MjM5LDM3MzI2LDIwOTE4LDIwMDYzLDM5''@;'; put 'put ''MDI5LDI1NDk0LDE5OTk0LDIxNDk0LDI2MzU1LDMzMDk5LDIyODEyLDI4MDgyLDE5OTY4LDIyNzc3LDIxMzA3LDI1NTU4LDM4MTI5LDIwMzgxLDIwMjM0LDM0OTE1LDM5MDU2LDIyODM5LDM2OTUxLDMxMjI3LDIwMjAyLDMzMDA4LDMwMDk3LDI3Nzc4LDIzNDUyLDIzMDE2LDI0NDEzLDI2ODg1''@;'; put 'put ''LDM0NDMzLDIwNTA2LDI0MDUwLDIwMDU3LDMwNjkxLDIwMTk3LDMzNDAyLDI1MjMzLDI2MTMxLDM3MDA5LDIzNjczLDIwMTU5LDI0NDQxLDMzMjIyLDM2OTIwLDMyOTAwLDMwMTIzLDIwMTM0LDM1MDI4LDI0ODQ3LDI3NTg5LDI0NTE4LDIwMDQxLDMwNDEwLDI4MzIyLDM1ODExLDM1NzU4LDM1''@;'; put 'put ''ODUwLDM1NzkzLDI0MzIyLDMyNzY0LDMyNzE2LDMyNDYyLDMzNTg5LDMzNjQzLDIyMjQwLDI3NTc1LDM4ODk5LDM4NDUyLDIzMDM1LDIxNTM1LDM4MTM0LDI4MTM5LDIzNDkzLDM5Mjc4LDIzNjA5LDI0MzQxLDM4NTQ0LDM1MjM0LDM1MjM1LDM1MjM2LDM1MjM3LDM1MjM4LDM1MjM5LDM1MjQw''@;'; put 'put ''LDM1MjQxLDM1MjQyLDM1MjQzLDM1MjQ0LDM1MjQ1LDM1MjQ2LDM1MjQ3LDM1MjQ4LDM1MjQ5LDM1MjUwLDM1MjUxLDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjU2LDM1MjU3LDM1MjU4LDM1MjU5LDM1MjYwLDM1MjYxLDM1MjYyLDM1MjYzLDM1MjY0LDM1MjY3LDM1Mjc3LDM1MjgzLDM1''@;'; put 'put ''Mjg0LDM1Mjg1LDM1Mjg3LDM1Mjg4LDM1Mjg5LDM1MjkxLDM1MjkzLDM1Mjk1LDM1Mjk2LDM1Mjk3LDM1Mjk4LDM1MzAwLDM1MzAzLDM1MzA0LDM1MzA1LDM1MzA2LDM1MzA4LDM1MzA5LDM1MzEwLDM1MzEyLDM1MzEzLDM1MzE0LDM1MzE2LDM1MzE3LDM1MzE4LDM1MzE5LDM1MzIwLDM1MzIx''@;'; put 'put ''LDM1MzIyLDM1MzIzLDM1MzI0LDM1MzI1LDM1MzI2LDM1MzI3LDM1MzI5LDM1MzMwLDM1MzMxLDM1MzMyLDM1MzMzLDM1MzM0LDM1MzM2LDM1MzM3LDM1MzM4LDM1MzM5LDM1MzQwLDM1MzQxLDM1MzQyLDM1MzQzLDM1MzQ0LDM1MzQ1LDM1MzQ2LDM1MzQ3LDM1MzQ4LDM1MzQ5LDM1MzUwLDM1''@;'; put 'put ''MzUxLDM1MzUyLDM1MzUzLDM1MzU0LDM1MzU1LDM1MzU2LDM1MzU3LDIxMzYwLDMzNTIxLDI3MTg1LDIzMTU2LDQwNTYwLDI0MjEyLDMyNTUyLDMzNzIxLDMzODI4LDMzODI5LDMzNjM5LDM0NjMxLDM2ODE0LDM2MTk0LDMwNDA4LDI0NDMzLDM5MDYyLDMwODI4LDI2MTQ0LDIxNzI3LDI1MzE3''@;'; put 'put ''LDIwMzIzLDMzMjE5LDMwMTUyLDI0MjQ4LDM4NjA1LDM2MzYyLDM0NTUzLDIxNjQ3LDI3ODkxLDI4MDQ0LDI3NzA0LDI0NzAzLDIxMTkxLDI5OTkyLDI0MTg5LDIwMjQ4LDI0NzM2LDI0NTUxLDIzNTg4LDMwMDAxLDM3MDM4LDM4MDgwLDI5MzY5LDI3ODMzLDI4MjE2LDM3MTkzLDI2Mzc3LDIx''@;'; put 'put ''NDUxLDIxNDkxLDIwMzA1LDM3MzIxLDM1ODI1LDIxNDQ4LDI0MTg4LDM2ODAyLDI4MTMyLDIwMTEwLDMwNDAyLDI3MDE0LDM0Mzk4LDI0ODU4LDMzMjg2LDIwMzEzLDIwNDQ2LDM2OTI2LDQwMDYwLDI0ODQxLDI4MTg5LDI4MTgwLDM4NTMzLDIwMTA0LDIzMDg5LDM4NjMyLDE5OTgyLDIzNjc5''@;'; put 'put ''LDMxMTYxLDIzNDMxLDM1ODIxLDMyNzAxLDI5NTc3LDIyNDk1LDMzNDE5LDM3MDU3LDIxNTA1LDM2OTM1LDIxOTQ3LDIzNzg2LDI0NDgxLDI0ODQwLDI3NDQyLDI5NDI1LDMyOTQ2LDM1NDY1LDM1MzU4LDM1MzU5LDM1MzYwLDM1MzYxLDM1MzYyLDM1MzYzLDM1MzY0LDM1MzY1LDM1MzY2LDM1''@;'; put 'put ''MzY3LDM1MzY4LDM1MzY5LDM1MzcwLDM1MzcxLDM1MzcyLDM1MzczLDM1Mzc0LDM1Mzc1LDM1Mzc2LDM1Mzc3LDM1Mzc4LDM1Mzc5LDM1MzgwLDM1MzgxLDM1MzgyLDM1MzgzLDM1Mzg0LDM1Mzg1LDM1Mzg2LDM1Mzg3LDM1Mzg4LDM1Mzg5LDM1MzkxLDM1MzkyLDM1MzkzLDM1Mzk0LDM1Mzk1''@;'; put 'put ''LDM1Mzk2LDM1Mzk3LDM1Mzk4LDM1Mzk5LDM1NDAxLDM1NDAyLDM1NDAzLDM1NDA0LDM1NDA1LDM1NDA2LDM1NDA3LDM1NDA4LDM1NDA5LDM1NDEwLDM1NDExLDM1NDEyLDM1NDEzLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDE3LDM1NDE4LDM1NDE5LDM1NDIwLDM1NDIxLDM1NDIyLDM1NDIzLDM1''@;'; put 'put ''NDI0LDM1NDI1LDM1NDI2LDM1NDI3LDM1NDI4LDM1NDI5LDM1NDMwLDM1NDMxLDM1NDMyLDM1NDMzLDM1NDM0LDM1NDM1LDM1NDM2LDM1NDM3LDM1NDM4LDM1NDM5LDM1NDQwLDM1NDQxLDM1NDQyLDM1NDQzLDM1NDQ0LDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ4LDM1NDUwLDM1NDUxLDM1NDUy''@;'; put 'put ''LDM1NDUzLDM1NDU0LDM1NDU1LDM1NDU2LDI4MDIwLDIzNTA3LDM1MDI5LDM5MDQ0LDM1OTQ3LDM5NTMzLDQwNDk5LDI4MTcwLDIwOTAwLDIwODAzLDIyNDM1LDM0OTQ1LDIxNDA3LDI1NTg4LDM2NzU3LDIyMjUzLDIxNTkyLDIyMjc4LDI5NTAzLDI4MzA0LDMyNTM2LDM2ODI4LDMzNDg5LDI0''@;'; put 'put ''ODk1LDI0NjE2LDM4NDk4LDI2MzUyLDMyNDIyLDM2MjM0LDM2MjkxLDM4MDUzLDIzNzMxLDMxOTA4LDI2Mzc2LDI0NzQyLDM4NDA1LDMyNzkyLDIwMTEzLDM3MDk1LDIxMjQ4LDM4NTA0LDIwODAxLDM2ODE2LDM0MTY0LDM3MjEzLDI2MTk3LDM4OTAxLDIzMzgxLDIxMjc3LDMwNzc2LDI2NDM0''@;'; put 'put ''LDI2Njg1LDIxNzA1LDI4Nzk4LDIzNDcyLDM2NzMzLDIwODc3LDIyMzEyLDIxNjgxLDI1ODc0LDI2MjQyLDM2MTkwLDM2MTYzLDMzMDM5LDMzOTAwLDM2OTczLDMxOTY3LDIwOTkxLDM0Mjk5LDI2NTMxLDI2MDg5LDI4NTc3LDM0NDY4LDM2NDgxLDIyMTIyLDM2ODk2LDMwMzM4LDI4NzkwLDI5''@;'; put 'put ''MTU3LDM2MTMxLDI1MzIxLDIxMDE3LDI3OTAxLDM2MTU2LDI0NTkwLDIyNjg2LDI0OTc0LDI2MzY2LDM2MTkyLDI1MTY2LDIxOTM5LDI4MTk1LDI2NDEzLDM2NzExLDM1NDU3LDM1NDU4LDM1NDU5LDM1NDYwLDM1NDYxLDM1NDYyLDM1NDYzLDM1NDY0LDM1NDY3LDM1NDY4LDM1NDY5LDM1NDcw''@;'; put 'put ''LDM1NDcxLDM1NDcyLDM1NDczLDM1NDc0LDM1NDc2LDM1NDc3LDM1NDc4LDM1NDc5LDM1NDgwLDM1NDgxLDM1NDgyLDM1NDgzLDM1NDg0LDM1NDg1LDM1NDg2LDM1NDg3LDM1NDg4LDM1NDg5LDM1NDkwLDM1NDkxLDM1NDkyLDM1NDkzLDM1NDk0LDM1NDk1LDM1NDk2LDM1NDk3LDM1NDk4LDM1''@;'; put 'put ''NDk5LDM1NTAwLDM1NTAxLDM1NTAyLDM1NTAzLDM1NTA0LDM1NTA1LDM1NTA2LDM1NTA3LDM1NTA4LDM1NTA5LDM1NTEwLDM1NTExLDM1NTEyLDM1NTEzLDM1NTE0LDM1NTE1LDM1NTE2LDM1NTE3LDM1NTE4LDM1NTE5LDM1NTIwLDM1NTIxLDM1NTIyLDM1NTIzLDM1NTI0LDM1NTI1LDM1NTI2''@;'; put 'put ''LDM1NTI3LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTMxLDM1NTMyLDM1NTMzLDM1NTM0LDM1NTM1LDM1NTM2LDM1NTM3LDM1NTM4LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQyLDM1NTQzLDM1NTQ0LDM1NTQ1LDM1NTQ2LDM1NTQ3LDM1NTQ4LDM1NTQ5LDM1NTUwLDM1NTUxLDM1NTUyLDM1NTUzLDM1''@;'; put 'put ''NTU0LDM1NTU1LDM4MTEzLDM4MzkyLDMwNTA0LDI2NjI5LDI3MDQ4LDIxNjQzLDIwMDQ1LDI4ODU2LDM1Nzg0LDI1Njg4LDI1OTk1LDIzNDI5LDMxMzY0LDIwNTM4LDIzNTI4LDMwNjUxLDI3NjE3LDM1NDQ5LDMxODk2LDI3ODM4LDMwNDE1LDI2MDI1LDM2NzU5LDIzODUzLDIzNjM3LDM0MzYw''@;'; put 'put ''LDI2NjMyLDIxMzQ0LDI1MTEyLDMxNDQ5LDI4MjUxLDMyNTA5LDI3MTY3LDMxNDU2LDI0NDMyLDI4NDY3LDI0MzUyLDI1NDg0LDI4MDcyLDI2NDU0LDE5OTc2LDI0MDgwLDM2MTM0LDIwMTgzLDMyOTYwLDMwMjYwLDM4NTU2LDI1MzA3LDI2MTU3LDI1MjE0LDI3ODM2LDM2MjEzLDI5MDMxLDMy''@;'; put 'put ''NjE3LDIwODA2LDMyOTAzLDIxNDg0LDM2OTc0LDI1MjQwLDIxNzQ2LDM0NTQ0LDM2NzYxLDMyNzczLDM4MTY3LDM0MDcxLDM2ODI1LDI3OTkzLDI5NjQ1LDI2MDE1LDMwNDk1LDI5OTU2LDMwNzU5LDMzMjc1LDM2MTI2LDM4MDI0LDIwMzkwLDI2NTE3LDMwMTM3LDM1Nzg2LDM4NjYzLDI1Mzkx''@;'; put 'put ''LDM4MjE1LDM4NDUzLDMzOTc2LDI1Mzc5LDMwNTI5LDI0NDQ5LDI5NDI0LDIwMTA1LDI0NTk2LDI1OTcyLDI1MzI3LDI3NDkxLDI1OTE5LDM1NTU2LDM1NTU3LDM1NTU4LDM1NTU5LDM1NTYwLDM1NTYxLDM1NTYyLDM1NTYzLDM1NTY0LDM1NTY1LDM1NTY2LDM1NTY3LDM1NTY4LDM1NTY5LDM1''@;'; put 'put ''NTcwLDM1NTcxLDM1NTcyLDM1NTczLDM1NTc0LDM1NTc1LDM1NTc2LDM1NTc3LDM1NTc4LDM1NTc5LDM1NTgwLDM1NTgxLDM1NTgyLDM1NTgzLDM1NTg0LDM1NTg1LDM1NTg2LDM1NTg3LDM1NTg4LDM1NTg5LDM1NTkwLDM1NTkyLDM1NTkzLDM1NTk0LDM1NTk1LDM1NTk2LDM1NTk3LDM1NTk4''@;'; put 'put ''LDM1NTk5LDM1NjAwLDM1NjAxLDM1NjAyLDM1NjAzLDM1NjA0LDM1NjA1LDM1NjA2LDM1NjA3LDM1NjA4LDM1NjA5LDM1NjEwLDM1NjExLDM1NjEyLDM1NjEzLDM1NjE0LDM1NjE1LDM1NjE2LDM1NjE3LDM1NjE4LDM1NjE5LDM1NjIwLDM1NjIxLDM1NjIzLDM1NjI0LDM1NjI1LDM1NjI2LDM1''@;'; put 'put ''NjI3LDM1NjI4LDM1NjI5LDM1NjMwLDM1NjMxLDM1NjMyLDM1NjMzLDM1NjM0LDM1NjM1LDM1NjM2LDM1NjM3LDM1NjM4LDM1NjM5LDM1NjQwLDM1NjQxLDM1NjQyLDM1NjQzLDM1NjQ0LDM1NjQ1LDM1NjQ2LDM1NjQ3LDM1NjQ4LDM1NjQ5LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDI0MTAz''@;'; put 'put ''LDMwMTUxLDM3MDczLDM1Nzc3LDMzNDM3LDI2NTI1LDI1OTAzLDIxNTUzLDM0NTg0LDMwNjkzLDMyOTMwLDMzMDI2LDI3NzEzLDIwMDQzLDMyNDU1LDMyODQ0LDMwNDUyLDI2ODkzLDI3NTQyLDI1MTkxLDIwNTQwLDIwMzU2LDIyMzM2LDI1MzUxLDI3NDkwLDM2Mjg2LDIxNDgyLDI2MDg4LDMy''@;'; put 'put ''NDQwLDI0NTM1LDI1MzcwLDI1NTI3LDMzMjY3LDMzMjY4LDMyNjIyLDI0MDkyLDIzNzY5LDIxMDQ2LDI2MjM0LDMxMjA5LDMxMjU4LDM2MTM2LDI4ODI1LDMwMTY0LDI4MzgyLDI3ODM1LDMxMzc4LDIwMDEzLDMwNDA1LDI0NTQ0LDM4MDQ3LDM0OTM1LDMyNDU2LDMxMTgxLDMyOTU5LDM3MzI1''@;'; put 'put ''LDIwMjEwLDIwMjQ3LDMzMzExLDIxNjA4LDI0MDMwLDI3OTU0LDM1Nzg4LDMxOTA5LDM2NzI0LDMyOTIwLDI0MDkwLDIxNjUwLDMwMzg1LDIzNDQ5LDI2MTcyLDM5NTg4LDI5NjY0LDI2NjY2LDM0NTIzLDI2NDE3LDI5NDgyLDM1ODMyLDM1ODAzLDM2ODgwLDMxNDgxLDI4ODkxLDI5MDM4LDI1''@;'; put 'put ''Mjg0LDMwNjMzLDIyMDY1LDIwMDI3LDMzODc5LDI2NjA5LDIxMTYxLDM0NDk2LDM2MTQyLDM4MTM2LDMxNTY5LDM1NjU0LDM1NjU1LDM1NjU2LDM1NjU3LDM1NjU4LDM1NjU5LDM1NjYwLDM1NjYxLDM1NjYyLDM1NjYzLDM1NjY0LDM1NjY1LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjY5LDM1Njcw''@;'; put 'put ''LDM1NjcxLDM1NjcyLDM1NjczLDM1Njc0LDM1Njc1LDM1Njc2LDM1Njc3LDM1Njc4LDM1Njc5LDM1NjgwLDM1NjgxLDM1NjgyLDM1NjgzLDM1Njg0LDM1Njg1LDM1Njg3LDM1Njg4LDM1Njg5LDM1NjkwLDM1NjkxLDM1NjkzLDM1Njk0LDM1Njk1LDM1Njk2LDM1Njk3LDM1Njk4LDM1Njk5LDM1''@;'; put 'put ''NzAwLDM1NzAxLDM1NzAyLDM1NzAzLDM1NzA0LDM1NzA1LDM1NzA2LDM1NzA3LDM1NzA4LDM1NzA5LDM1NzEwLDM1NzExLDM1NzEyLDM1NzEzLDM1NzE0LDM1NzE1LDM1NzE2LDM1NzE3LDM1NzE4LDM1NzE5LDM1NzIwLDM1NzIxLDM1NzIyLDM1NzIzLDM1NzI0LDM1NzI1LDM1NzI2LDM1NzI3''@;'; put 'put ''LDM1NzI4LDM1NzI5LDM1NzMwLDM1NzMxLDM1NzMyLDM1NzMzLDM1NzM0LDM1NzM1LDM1NzM2LDM1NzM3LDM1NzM4LDM1NzM5LDM1NzQwLDM1NzQxLDM1NzQyLDM1NzQzLDM1NzU2LDM1NzYxLDM1NzcxLDM1NzgzLDM1NzkyLDM1ODE4LDM1ODQ5LDM1ODcwLDIwMzAzLDI3ODgwLDMxMDY5LDM5''@;'; put 'put ''NTQ3LDI1MjM1LDI5MjI2LDI1MzQxLDE5OTg3LDMwNzQyLDM2NzE2LDI1Nzc2LDM2MTg2LDMxNjg2LDI2NzI5LDI0MTk2LDM1MDEzLDIyOTE4LDI1NzU4LDIyNzY2LDI5MzY2LDI2ODk0LDM4MTgxLDM2ODYxLDM2MTg0LDIyMzY4LDMyNTEyLDM1ODQ2LDIwOTM0LDI1NDE3LDI1MzA1LDIxMzMx''@;'; put 'put ''LDI2NzAwLDI5NzMwLDMzNTM3LDM3MTk2LDIxODI4LDMwNTI4LDI4Nzk2LDI3OTc4LDIwODU3LDIxNjcyLDM2MTY0LDIzMDM5LDI4MzYzLDI4MTAwLDIzMzg4LDMyMDQzLDIwMTgwLDMxODY5LDI4MzcxLDIzMzc2LDMzMjU4LDI4MTczLDIzMzgzLDM5NjgzLDI2ODM3LDM2Mzk0LDIzNDQ3LDMy''@;'; put 'put ''NTA4LDI0NjM1LDMyNDM3LDM3MDQ5LDM2MjA4LDIyODYzLDI1NTQ5LDMxMTk5LDM2Mjc1LDIxMzMwLDI2MDYzLDMxMDYyLDM1NzgxLDM4NDU5LDMyNDUyLDM4MDc1LDMyMzg2LDIyMDY4LDM3MjU3LDI2MzY4LDMyNjE4LDIzNTYyLDM2OTgxLDI2MTUyLDI0MDM4LDIwMzA0LDI2NTkwLDIwNTcw''@;'; put 'put ''LDIwMzE2LDIyMzUyLDI0MjMxLDU5NDA4LDU5NDA5LDU5NDEwLDU5NDExLDU5NDEyLDM1ODk2LDM1ODk3LDM1ODk4LDM1ODk5LDM1OTAwLDM1OTAxLDM1OTAyLDM1OTAzLDM1OTA0LDM1OTA2LDM1OTA3LDM1OTA4LDM1OTA5LDM1OTEyLDM1OTE0LDM1OTE1LDM1OTE3LDM1OTE4LDM1OTE5LDM1''@;'; put 'put ''OTIwLDM1OTIxLDM1OTIyLDM1OTIzLDM1OTI0LDM1OTI2LDM1OTI3LDM1OTI4LDM1OTI5LDM1OTMxLDM1OTMyLDM1OTMzLDM1OTM0LDM1OTM1LDM1OTM2LDM1OTM5LDM1OTQwLDM1OTQxLDM1OTQyLDM1OTQzLDM1OTQ0LDM1OTQ1LDM1OTQ4LDM1OTQ5LDM1OTUwLDM1OTUxLDM1OTUyLDM1OTUz''@;'; put 'put ''LDM1OTU0LDM1OTU2LDM1OTU3LDM1OTU4LDM1OTU5LDM1OTYzLDM1OTY0LDM1OTY1LDM1OTY2LDM1OTY3LDM1OTY4LDM1OTY5LDM1OTcxLDM1OTcyLDM1OTc0LDM1OTc1LDM1OTc2LDM1OTc5LDM1OTgxLDM1OTgyLDM1OTgzLDM1OTg0LDM1OTg1LDM1OTg2LDM1OTg3LDM1OTg5LDM1OTkwLDM1''@;'; put 'put ''OTkxLDM1OTkzLDM1OTk0LDM1OTk1LDM1OTk2LDM1OTk3LDM1OTk4LDM1OTk5LDM2ZTMsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYwMDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMsMjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcs''@;'; put 'put ''MTk5ODksMjAxMjAsMTk5OTgsMzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIsMjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYsMzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAwMjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0''@;'; put 'put ''MTYsMjMzODcsMjE4NjgsMjIwMzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYxODgsMjEzNTAsMjEzNDcsMjA5OTQsMjFlMywyMTAwNiwyMTAzNywyMTA0MywyMTA1NSwyMTA1NiwyMTA2OCwy''@;'; put 'put ''MTA4NiwyMTA4OSwyMTA4NCwzMzk2NywyMTExNywyMTEyMiwyMTEyMSwyMTEzNiwyMTEzOSwyMDg2NiwzMjU5NiwyMDE1NSwyMDE2MywyMDE2OSwyMDE2MiwyMDIwMCwyMDE5MywyMDIwMywyMDE5MCwyMDI1MSwyMDIxMSwyMDI1OCwyMDMyNCwyMDIxMywyMDI2MSwyMDI2MywyMDIzMywyMDI2''@;'; put 'put ''NywyMDMxOCwyMDMyNywyNTkxMiwyMDMxNCwyMDMxNywzNjAxNCwzNjAxNSwzNjAxNiwzNjAxNywzNjAxOCwzNjAxOSwzNjAyMCwzNjAyMSwzNjAyMiwzNjAyMywzNjAyNCwzNjAyNSwzNjAyNiwzNjAyNywzNjAyOCwzNjAyOSwzNjAzMCwzNjAzMSwzNjAzMiwzNjAzMywzNjAzNCwzNjAzNSwz''@;'; put 'put ''NjAzNiwzNjAzNywzNjAzOCwzNjAzOSwzNjA0MCwzNjA0MSwzNjA0MiwzNjA0MywzNjA0NCwzNjA0NSwzNjA0NiwzNjA0NywzNjA0OCwzNjA0OSwzNjA1MCwzNjA1MSwzNjA1MiwzNjA1MywzNjA1NCwzNjA1NSwzNjA1NiwzNjA1NywzNjA1OCwzNjA1OSwzNjA2MCwzNjA2MSwzNjA2MiwzNjA2''@;'; put 'put ''MywzNjA2NCwzNjA2NSwzNjA2NiwzNjA2NywzNjA2OCwzNjA2OSwzNjA3MCwzNjA3MSwzNjA3MiwzNjA3MywzNjA3NCwzNjA3NSwzNjA3NiwzNjA3NywzNjA3OCwzNjA3OSwzNjA4MCwzNjA4MSwzNjA4MiwzNjA4MywzNjA4NCwzNjA4NSwzNjA4NiwzNjA4NywzNjA4OCwzNjA4OSwzNjA5MCwz''@;'; put 'put ''NjA5MSwzNjA5MiwzNjA5MywzNjA5NCwzNjA5NSwzNjA5NiwzNjA5NywzNjA5OCwzNjA5OSwzNjEwMCwzNjEwMSwzNjEwMiwzNjEwMywzNjEwNCwzNjEwNSwzNjEwNiwzNjEwNywzNjEwOCwzNjEwOSwyMDMxOSwyMDMxMSwyMDI3NCwyMDI4NSwyMDM0MiwyMDM0MCwyMDM2OSwyMDM2MSwyMDM1''@;'; put 'put ''NSwyMDM2NywyMDM1MCwyMDM0NywyMDM5NCwyMDM0OCwyMDM5NiwyMDM3MiwyMDQ1NCwyMDQ1NiwyMDQ1OCwyMDQyMSwyMDQ0MiwyMDQ1MSwyMDQ0NCwyMDQzMywyMDQ0NywyMDQ3MiwyMDUyMSwyMDU1NiwyMDQ2NywyMDUyNCwyMDQ5NSwyMDUyNiwyMDUyNSwyMDQ3OCwyMDUwOCwyMDQ5Miwy''@;'; put 'put ''MDUxNywyMDUyMCwyMDYwNiwyMDU0NywyMDU2NSwyMDU1MiwyMDU1OCwyMDU4OCwyMDYwMywyMDY0NSwyMDY0NywyMDY0OSwyMDY2NiwyMDY5NCwyMDc0MiwyMDcxNywyMDcxNiwyMDcxMCwyMDcxOCwyMDc0MywyMDc0NywyMDE4OSwyNzcwOSwyMDMxMiwyMDMyNSwyMDQzMCw0MDg2NCwyNzcx''@;'; put 'put ''OCwzMTg2MCwyMDg0NiwyNDA2MSw0MDY0OSwzOTMyMCwyMDg2NSwyMjgwNCwyMTI0MSwyMTI2MSwzNTMzNSwyMTI2NCwyMDk3MSwyMjgwOSwyMDgyMSwyMDEyOCwyMDgyMiwyMDE0NywzNDkyNiwzNDk4MCwyMDE0OSwzMzA0NCwzNTAyNiwzMTEwNCwyMzM0OCwzNDgxOSwzMjY5NiwyMDkwNywy''@;'; put 'put ''MDkxMywyMDkyNSwyMDkyNCwzNjExMCwzNjExMSwzNjExMiwzNjExMywzNjExNCwzNjExNSwzNjExNiwzNjExNywzNjExOCwzNjExOSwzNjEyMCwzNjEyMSwzNjEyMiwzNjEyMywzNjEyNCwzNjEyOCwzNjE3NywzNjE3OCwzNjE4MywzNjE5MSwzNjE5NywzNjIwMCwzNjIwMSwzNjIwMiwzNjIw''@;'; put 'put ''NCwzNjIwNiwzNjIwNywzNjIwOSwzNjIxMCwzNjIxNiwzNjIxNywzNjIxOCwzNjIxOSwzNjIyMCwzNjIyMSwzNjIyMiwzNjIyMywzNjIyNCwzNjIyNiwzNjIyNywzNjIzMCwzNjIzMSwzNjIzMiwzNjIzMywzNjIzNiwzNjIzNywzNjIzOCwzNjIzOSwzNjI0MCwzNjI0MiwzNjI0MywzNjI0NSwz''@;'; put 'put ''NjI0NiwzNjI0NywzNjI0OCwzNjI0OSwzNjI1MCwzNjI1MSwzNjI1MiwzNjI1MywzNjI1NCwzNjI1NiwzNjI1NywzNjI1OCwzNjI2MCwzNjI2MSwzNjI2MiwzNjI2MywzNjI2NCwzNjI2NSwzNjI2NiwzNjI2NywzNjI2OCwzNjI2OSwzNjI3MCwzNjI3MSwzNjI3MiwzNjI3NCwzNjI3OCwzNjI3''@;'; put 'put ''OSwzNjI4MSwzNjI4MywzNjI4NSwzNjI4OCwzNjI4OSwzNjI5MCwzNjI5MywzNjI5NSwzNjI5NiwzNjI5NywzNjI5OCwzNjMwMSwzNjMwNCwzNjMwNiwzNjMwNywzNjMwOCwyMDkzNSwyMDg4NiwyMDg5OCwyMDkwMSwzNTc0NCwzNTc1MCwzNTc1MSwzNTc1NCwzNTc2NCwzNTc2NSwzNTc2Nywz''@;'; put 'put ''NTc3OCwzNTc3OSwzNTc4NywzNTc5MSwzNTc5MCwzNTc5NCwzNTc5NSwzNTc5NiwzNTc5OCwzNTgwMCwzNTgwMSwzNTgwNCwzNTgwNywzNTgwOCwzNTgxMiwzNTgxNiwzNTgxNywzNTgyMiwzNTgyNCwzNTgyNywzNTgzMCwzNTgzMywzNTgzNiwzNTgzOSwzNTg0MCwzNTg0MiwzNTg0NCwzNTg0''@;'; put 'put ''NywzNTg1MiwzNTg1NSwzNTg1NywzNTg1OCwzNTg2MCwzNTg2MSwzNTg2MiwzNTg2NSwzNTg2NywzNTg2NCwzNTg2OSwzNTg3MSwzNTg3MiwzNTg3MywzNTg3NywzNTg3OSwzNTg4MiwzNTg4MywzNTg4NiwzNTg4NywzNTg5MCwzNTg5MSwzNTg5MywzNTg5NCwyMTM1MywyMTM3MCwzODQyOSwz''@;'; put 'put ''ODQzNCwzODQzMywzODQ0OSwzODQ0MiwzODQ2MSwzODQ2MCwzODQ2NiwzODQ3MywzODQ4NCwzODQ5NSwzODUwMywzODUwOCwzODUxNCwzODUxNiwzODUzNiwzODU0MSwzODU1MSwzODU3NiwzNzAxNSwzNzAxOSwzNzAyMSwzNzAxNywzNzAzNiwzNzAyNSwzNzA0NCwzNzA0MywzNzA0NiwzNzA1''@;'; put 'put ''MCwzNjMwOSwzNjMxMiwzNjMxMywzNjMxNiwzNjMyMCwzNjMyMSwzNjMyMiwzNjMyNSwzNjMyNiwzNjMyNywzNjMyOSwzNjMzMywzNjMzNCwzNjMzNiwzNjMzNywzNjMzOCwzNjM0MCwzNjM0MiwzNjM0OCwzNjM1MCwzNjM1MSwzNjM1MiwzNjM1MywzNjM1NCwzNjM1NSwzNjM1NiwzNjM1OCwz''@;'; put 'put ''NjM1OSwzNjM2MCwzNjM2MywzNjM2NSwzNjM2NiwzNjM2OCwzNjM2OSwzNjM3MCwzNjM3MSwzNjM3MywzNjM3NCwzNjM3NSwzNjM3NiwzNjM3NywzNjM3OCwzNjM3OSwzNjM4MCwzNjM4NCwzNjM4NSwzNjM4OCwzNjM4OSwzNjM5MCwzNjM5MSwzNjM5MiwzNjM5NSwzNjM5NywzNjQwMCwzNjQw''@;'; put 'put ''MiwzNjQwMywzNjQwNCwzNjQwNiwzNjQwNywzNjQwOCwzNjQxMSwzNjQxMiwzNjQxNCwzNjQxNSwzNjQxOSwzNjQyMSwzNjQyMiwzNjQyOCwzNjQyOSwzNjQzMCwzNjQzMSwzNjQzMiwzNjQzNSwzNjQzNiwzNjQzNywzNjQzOCwzNjQzOSwzNjQ0MCwzNjQ0MiwzNjQ0MywzNjQ0NCwzNjQ0NSwz''@;'; put 'put ''NjQ0NiwzNjQ0NywzNjQ0OCwzNjQ0OSwzNjQ1MCwzNjQ1MSwzNjQ1MiwzNjQ1MywzNjQ1NSwzNjQ1NiwzNjQ1OCwzNjQ1OSwzNjQ2MiwzNjQ2NSwzNzA0OCwzNzA0MCwzNzA3MSwzNzA2MSwzNzA1NCwzNzA3MiwzNzA2MCwzNzA2MywzNzA3NSwzNzA5NCwzNzA5MCwzNzA4NCwzNzA3OSwzNzA4''@;'; put 'put ''MywzNzA5OSwzNzEwMywzNzExOCwzNzEyNCwzNzE1NCwzNzE1MCwzNzE1NSwzNzE2OSwzNzE2NywzNzE3NywzNzE4NywzNzE5MCwyMTAwNSwyMjg1MCwyMTE1NCwyMTE2NCwyMTE2NSwyMTE4MiwyMTc1OSwyMTIwMCwyMTIwNiwyMTIzMiwyMTQ3MSwyOTE2NiwzMDY2OSwyNDMwOCwyMDk4MSwy''@;'; put 'put ''MDk4OCwzOTcyNywyMTQzMCwyNDMyMSwzMDA0MiwyNDA0NywyMjM0OCwyMjQ0MSwyMjQzMywyMjY1NCwyMjcxNiwyMjcyNSwyMjczNywyMjMxMywyMjMxNiwyMjMxNCwyMjMyMywyMjMyOSwyMjMxOCwyMjMxOSwyMjM2NCwyMjMzMSwyMjMzOCwyMjM3NywyMjQwNSwyMjM3OSwyMjQwNiwyMjM5''@;'; put 'put ''NiwyMjM5NSwyMjM3NiwyMjM4MSwyMjM5MCwyMjM4NywyMjQ0NSwyMjQzNiwyMjQxMiwyMjQ1MCwyMjQ3OSwyMjQzOSwyMjQ1MiwyMjQxOSwyMjQzMiwyMjQ4NSwyMjQ4OCwyMjQ5MCwyMjQ4OSwyMjQ4MiwyMjQ1NiwyMjUxNiwyMjUxMSwyMjUyMCwyMjUwMCwyMjQ5MywzNjQ2NywzNjQ2OSwz''@;'; put 'put ''NjQ3MSwzNjQ3MiwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ3NywzNjQ3OCwzNjQ4MCwzNjQ4MiwzNjQ4MywzNjQ4NCwzNjQ4NiwzNjQ4OCwzNjQ4OSwzNjQ5MCwzNjQ5MSwzNjQ5MiwzNjQ5MywzNjQ5NCwzNjQ5NywzNjQ5OCwzNjQ5OSwzNjUwMSwzNjUwMiwzNjUwMywzNjUwNCwzNjUwNSwzNjUw''@;'; put 'put ''NiwzNjUwNywzNjUwOSwzNjUxMSwzNjUxMiwzNjUxMywzNjUxNCwzNjUxNSwzNjUxNiwzNjUxNywzNjUxOCwzNjUxOSwzNjUyMCwzNjUyMSwzNjUyMiwzNjUyNSwzNjUyNiwzNjUyOCwzNjUyOSwzNjUzMSwzNjUzMiwzNjUzMywzNjUzNCwzNjUzNSwzNjUzNiwzNjUzNywzNjUzOSwzNjU0MCwz''@;'; put 'put ''NjU0MSwzNjU0MiwzNjU0MywzNjU0NCwzNjU0NSwzNjU0NiwzNjU0NywzNjU0OCwzNjU0OSwzNjU1MCwzNjU1MSwzNjU1MiwzNjU1MywzNjU1NCwzNjU1NSwzNjU1NiwzNjU1NywzNjU1OSwzNjU2MCwzNjU2MSwzNjU2MiwzNjU2MywzNjU2NCwzNjU2NSwzNjU2NiwzNjU2NywzNjU2OCwzNjU2''@;'; put 'put ''OSwzNjU3MCwzNjU3MSwzNjU3MiwzNjU3MywzNjU3NCwzNjU3NSwzNjU3NiwzNjU3NywzNjU3OCwzNjU3OSwzNjU4MCwyMjUzOSwyMjU0MSwyMjUyNSwyMjUwOSwyMjUyOCwyMjU1OCwyMjU1MywyMjU5NiwyMjU2MCwyMjYyOSwyMjYzNiwyMjY1NywyMjY2NSwyMjY4MiwyMjY1NiwzOTMzNiw0''@;'; put 'put ''MDcyOSwyNTA4NywzMzQwMSwzMzQwNSwzMzQwNywzMzQyMywzMzQxOCwzMzQ0OCwzMzQxMiwzMzQyMiwzMzQyNSwzMzQzMSwzMzQzMywzMzQ1MSwzMzQ2NCwzMzQ3MCwzMzQ1NiwzMzQ4MCwzMzQ4MiwzMzUwNywzMzQzMiwzMzQ2MywzMzQ1NCwzMzQ4MywzMzQ4NCwzMzQ3MywzMzQ0OSwzMzQ2''@;'; put 'put ''MCwzMzQ0MSwzMzQ1MCwzMzQzOSwzMzQ3NiwzMzQ4NiwzMzQ0NCwzMzUwNSwzMzU0NSwzMzUyNywzMzUwOCwzMzU1MSwzMzU0MywzMzUwMCwzMzUyNCwzMzQ5MCwzMzQ5NiwzMzU0OCwzMzUzMSwzMzQ5MSwzMzU1MywzMzU2MiwzMzU0MiwzMzU1NiwzMzU1NywzMzUwNCwzMzQ5MywzMzU2NCwz''@;'; put 'put ''MzYxNywzMzYyNywzMzYyOCwzMzU0NCwzMzY4MiwzMzU5NiwzMzU4OCwzMzU4NSwzMzY5MSwzMzYzMCwzMzU4MywzMzYxNSwzMzYwNywzMzYwMywzMzYzMSwzMzYwMCwzMzU1OSwzMzYzMiwzMzU4MSwzMzU5NCwzMzU4NywzMzYzOCwzMzYzNywzNjU4MSwzNjU4MiwzNjU4MywzNjU4NCwzNjU4''@;'; put 'put ''NSwzNjU4NiwzNjU4NywzNjU4OCwzNjU4OSwzNjU5MCwzNjU5MSwzNjU5MiwzNjU5MywzNjU5NCwzNjU5NSwzNjU5NiwzNjU5NywzNjU5OCwzNjU5OSwzNjYwMCwzNjYwMSwzNjYwMiwzNjYwMywzNjYwNCwzNjYwNSwzNjYwNiwzNjYwNywzNjYwOCwzNjYwOSwzNjYxMCwzNjYxMSwzNjYxMiwz''@;'; put 'put ''NjYxMywzNjYxNCwzNjYxNSwzNjYxNiwzNjYxNywzNjYxOCwzNjYxOSwzNjYyMCwzNjYyMSwzNjYyMiwzNjYyMywzNjYyNCwzNjYyNSwzNjYyNiwzNjYyNywzNjYyOCwzNjYyOSwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzMywzNjYzNCwzNjYzNSwzNjYzNiwzNjYzNywzNjYzOCwzNjYzOSwzNjY0''@;'; put 'put ''MCwzNjY0MSwzNjY0MiwzNjY0MywzNjY0NCwzNjY0NSwzNjY0NiwzNjY0NywzNjY0OCwzNjY0OSwzNjY1MCwzNjY1MSwzNjY1MiwzNjY1MywzNjY1NCwzNjY1NSwzNjY1NiwzNjY1NywzNjY1OCwzNjY1OSwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NCwzNjY2NSwzNjY2NiwzNjY2Nywz''@;'; put 'put ''NjY2OCwzNjY2OSwzNjY3MCwzNjY3MSwzNjY3MiwzNjY3MywzNjY3NCwzNjY3NSwzNjY3NiwzMzY0MCwzMzU2MywzMzY0MSwzMzY0NCwzMzY0MiwzMzY0NSwzMzY0NiwzMzcxMiwzMzY1NiwzMzcxNSwzMzcxNiwzMzY5NiwzMzcwNiwzMzY4MywzMzY5MiwzMzY2OSwzMzY2MCwzMzcxOCwzMzcw''@;'; put 'put ''NSwzMzY2MSwzMzcyMCwzMzY1OSwzMzY4OCwzMzY5NCwzMzcwNCwzMzcyMiwzMzcyNCwzMzcyOSwzMzc5MywzMzc2NSwzMzc1MiwyMjUzNSwzMzgxNiwzMzgwMywzMzc1NywzMzc4OSwzMzc1MCwzMzgyMCwzMzg0OCwzMzgwOSwzMzc5OCwzMzc0OCwzMzc1OSwzMzgwNywzMzc5NSwzMzc4NCwz''@;'; put 'put ''Mzc4NSwzMzc3MCwzMzczMywzMzcyOCwzMzgzMCwzMzc3NiwzMzc2MSwzMzg4NCwzMzg3MywzMzg4MiwzMzg4MSwzMzkwNywzMzkyNywzMzkyOCwzMzkxNCwzMzkyOSwzMzkxMiwzMzg1MiwzMzg2MiwzMzg5NywzMzkxMCwzMzkzMiwzMzkzNCwzMzg0MSwzMzkwMSwzMzk4NSwzMzk5NywzNGUz''@;'; put 'put ''LDM0MDIyLDMzOTgxLDM0MDAzLDMzOTk0LDMzOTgzLDMzOTc4LDM0MDE2LDMzOTUzLDMzOTc3LDMzOTcyLDMzOTQzLDM0MDIxLDM0MDE5LDM0MDYwLDI5OTY1LDM0MTA0LDM0MDMyLDM0MTA1LDM0MDc5LDM0MTA2LDM2Njc3LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgxLDM2NjgyLDM2NjgzLDM2''@;'; put 'put ''Njg0LDM2Njg1LDM2Njg2LDM2Njg3LDM2Njg4LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk0LDM2Njk1LDM2Njk2LDM2Njk3LDM2Njk4LDM2Njk5LDM2NzAwLDM2NzAxLDM2NzAyLDM2NzAzLDM2NzA0LDM2NzA1LDM2NzA2LDM2NzA3LDM2NzA4LDM2NzA5LDM2NzE0LDM2NzM2''@;'; put 'put ''LDM2NzQ4LDM2NzU0LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcwLDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzc1LDM2Nzc4LDM2NzgwLDM2NzgxLDM2NzgyLDM2NzgzLDM2Nzg2LDM2Nzg3LDM2Nzg4LDM2Nzg5LDM2NzkxLDM2NzkyLDM2Nzk0LDM2Nzk1LDM2Nzk2LDM2Nzk5LDM2ODAwLDM2ODAzLDM2''@;'; put 'put ''ODA2LDM2ODA5LDM2ODEwLDM2ODExLDM2ODEyLDM2ODEzLDM2ODE1LDM2ODE4LDM2ODIyLDM2ODIzLDM2ODI2LDM2ODMyLDM2ODMzLDM2ODM1LDM2ODM5LDM2ODQ0LDM2ODQ3LDM2ODQ5LDM2ODUwLDM2ODUyLDM2ODUzLDM2ODU0LDM2ODU4LDM2ODU5LDM2ODYwLDM2ODYyLDM2ODYzLDM2ODcx''@;'; put 'put ''LDM2ODcyLDM2ODc2LDM2ODc4LDM2ODgzLDM2ODg1LDM2ODg4LDM0MTM0LDM0MTA3LDM0MDQ3LDM0MDQ0LDM0MTM3LDM0MTIwLDM0MTUyLDM0MTQ4LDM0MTQyLDM0MTcwLDMwNjI2LDM0MTE1LDM0MTYyLDM0MTcxLDM0MjEyLDM0MjE2LDM0MTgzLDM0MTkxLDM0MTY5LDM0MjIyLDM0MjA0LDM0''@;'; put 'put ''MTgxLDM0MjMzLDM0MjMxLDM0MjI0LDM0MjU5LDM0MjQxLDM0MjY4LDM0MzAzLDM0MzQzLDM0MzA5LDM0MzQ1LDM0MzI2LDM0MzY0LDI0MzE4LDI0MzI4LDIyODQ0LDIyODQ5LDMyODIzLDIyODY5LDIyODc0LDIyODcyLDIxMjYzLDIzNTg2LDIzNTg5LDIzNTk2LDIzNjA0LDI1MTY0LDI1MTk0''@;'; put 'put ''LDI1MjQ3LDI1Mjc1LDI1MjkwLDI1MzA2LDI1MzAzLDI1MzI2LDI1Mzc4LDI1MzM0LDI1NDAxLDI1NDE5LDI1NDExLDI1NTE3LDI1NTkwLDI1NDU3LDI1NDY2LDI1NDg2LDI1NTI0LDI1NDUzLDI1NTE2LDI1NDgyLDI1NDQ5LDI1NTE4LDI1NTMyLDI1NTg2LDI1NTkyLDI1NTY4LDI1NTk5LDI1''@;'; put 'put ''NTQwLDI1NTY2LDI1NTUwLDI1NjgyLDI1NTQyLDI1NTM0LDI1NjY5LDI1NjY1LDI1NjExLDI1NjI3LDI1NjMyLDI1NjEyLDI1NjM4LDI1NjMzLDI1Njk0LDI1NzMyLDI1NzA5LDI1NzUwLDM2ODg5LDM2ODkyLDM2ODk5LDM2OTAwLDM2OTAxLDM2OTAzLDM2OTA0LDM2OTA1LDM2OTA2LDM2OTA3''@;'; put 'put ''LDM2OTA4LDM2OTEyLDM2OTEzLDM2OTE0LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTIxLDM2OTIyLDM2OTI1LDM2OTI3LDM2OTI4LDM2OTMxLDM2OTMzLDM2OTM0LDM2OTM2LDM2OTM3LDM2OTM4LDM2OTM5LDM2OTQwLDM2OTQyLDM2OTQ4LDM2OTQ5LDM2OTUwLDM2OTUzLDM2OTU0LDM2OTU2LDM2''@;'; put 'put ''OTU3LDM2OTU4LDM2OTU5LDM2OTYwLDM2OTYxLDM2OTY0LDM2OTY2LDM2OTY3LDM2OTY5LDM2OTcwLDM2OTcxLDM2OTcyLDM2OTc1LDM2OTc2LDM2OTc3LDM2OTc4LDM2OTc5LDM2OTgyLDM2OTgzLDM2OTg0LDM2OTg1LDM2OTg2LDM2OTg3LDM2OTg4LDM2OTkwLDM2OTkzLDM2OTk2LDM2OTk3''@;'; put 'put ''LDM2OTk4LDM2OTk5LDM3MDAxLDM3MDAyLDM3MDA0LDM3MDA1LDM3MDA2LDM3MDA3LDM3MDA4LDM3MDEwLDM3MDEyLDM3MDE0LDM3MDE2LDM3MDE4LDM3MDIwLDM3MDIyLDM3MDIzLDM3MDI0LDM3MDI4LDM3MDI5LDM3MDMxLDM3MDMyLDM3MDMzLDM3MDM1LDM3MDM3LDM3MDQyLDM3MDQ3LDM3''@;'; put 'put ''MDUyLDM3MDUzLDM3MDU1LDM3MDU2LDI1NzIyLDI1NzgzLDI1Nzg0LDI1NzUzLDI1Nzg2LDI1NzkyLDI1ODA4LDI1ODE1LDI1ODI4LDI1ODI2LDI1ODY1LDI1ODkzLDI1OTAyLDI0MzMxLDI0NTMwLDI5OTc3LDI0MzM3LDIxMzQzLDIxNDg5LDIxNTAxLDIxNDgxLDIxNDgwLDIxNDk5LDIxNTIy''@;'; put 'put ''LDIxNTI2LDIxNTEwLDIxNTc5LDIxNTg2LDIxNTg3LDIxNTg4LDIxNTkwLDIxNTcxLDIxNTM3LDIxNTkxLDIxNTkzLDIxNTM5LDIxNTU0LDIxNjM0LDIxNjUyLDIxNjIzLDIxNjE3LDIxNjA0LDIxNjU4LDIxNjU5LDIxNjM2LDIxNjIyLDIxNjA2LDIxNjYxLDIxNzEyLDIxNjc3LDIxNjk4LDIx''@;'; put 'put ''Njg0LDIxNzE0LDIxNjcxLDIxNjcwLDIxNzE1LDIxNzE2LDIxNjE4LDIxNjY3LDIxNzE3LDIxNjkxLDIxNjk1LDIxNzA4LDIxNzIxLDIxNzIyLDIxNzI0LDIxNjczLDIxNjc0LDIxNjY4LDIxNzI1LDIxNzExLDIxNzI2LDIxNzg3LDIxNzM1LDIxNzkyLDIxNzU3LDIxNzgwLDIxNzQ3LDIxNzk0''@;'; put 'put ''LDIxNzk1LDIxNzc1LDIxNzc3LDIxNzk5LDIxODAyLDIxODYzLDIxOTAzLDIxOTQxLDIxODMzLDIxODY5LDIxODI1LDIxODQ1LDIxODIzLDIxODQwLDIxODIwLDM3MDU4LDM3MDU5LDM3MDYyLDM3MDY0LDM3MDY1LDM3MDY3LDM3MDY4LDM3MDY5LDM3MDc0LDM3MDc2LDM3MDc3LDM3MDc4LDM3''@;'; put 'put ''MDgwLDM3MDgxLDM3MDgyLDM3MDg2LDM3MDg3LDM3MDg4LDM3MDkxLDM3MDkyLDM3MDkzLDM3MDk3LDM3MDk4LDM3MTAwLDM3MTAyLDM3MTA0LDM3MTA1LDM3MTA2LDM3MTA3LDM3MTA5LDM3MTEwLDM3MTExLDM3MTEzLDM3MTE0LDM3MTE1LDM3MTE2LDM3MTE5LDM3MTIwLDM3MTIxLDM3MTIz''@;'; put 'put ''LDM3MTI1LDM3MTI2LDM3MTI3LDM3MTI4LDM3MTI5LDM3MTMwLDM3MTMxLDM3MTMyLDM3MTMzLDM3MTM0LDM3MTM1LDM3MTM2LDM3MTM3LDM3MTM4LDM3MTM5LDM3MTQwLDM3MTQxLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ3LDM3MTQ4LDM3MTQ5LDM3MTUxLDM3MTUyLDM3MTUzLDM3''@;'; put 'put ''MTU2LDM3MTU3LDM3MTU4LDM3MTU5LDM3MTYwLDM3MTYxLDM3MTYyLDM3MTYzLDM3MTY0LDM3MTY1LDM3MTY2LDM3MTY4LDM3MTcwLDM3MTcxLDM3MTcyLDM3MTczLDM3MTc0LDM3MTc1LDM3MTc2LDM3MTc4LDM3MTc5LDM3MTgwLDM3MTgxLDM3MTgyLDM3MTgzLDM3MTg0LDM3MTg1LDM3MTg2''@;'; put 'put ''LDM3MTg4LDIxODE1LDIxODQ2LDIxODc3LDIxODc4LDIxODc5LDIxODExLDIxODA4LDIxODUyLDIxODk5LDIxOTcwLDIxODkxLDIxOTM3LDIxOTQ1LDIxODk2LDIxODg5LDIxOTE5LDIxODg2LDIxOTc0LDIxOTA1LDIxODgzLDIxOTgzLDIxOTQ5LDIxOTUwLDIxOTA4LDIxOTEzLDIxOTk0LDIy''@;'; put 'put ''MDA3LDIxOTYxLDIyMDQ3LDIxOTY5LDIxOTk1LDIxOTk2LDIxOTcyLDIxOTkwLDIxOTgxLDIxOTU2LDIxOTk5LDIxOTg5LDIyMDAyLDIyMDAzLDIxOTY0LDIxOTY1LDIxOTkyLDIyMDA1LDIxOTg4LDM2NzU2LDIyMDQ2LDIyMDI0LDIyMDI4LDIyMDE3LDIyMDUyLDIyMDUxLDIyMDE0LDIyMDE2''@;'; put 'put ''LDIyMDU1LDIyMDYxLDIyMTA0LDIyMDczLDIyMTAzLDIyMDYwLDIyMDkzLDIyMTE0LDIyMTA1LDIyMTA4LDIyMDkyLDIyMTAwLDIyMTUwLDIyMTE2LDIyMTI5LDIyMTIzLDIyMTM5LDIyMTQwLDIyMTQ5LDIyMTYzLDIyMTkxLDIyMjI4LDIyMjMxLDIyMjM3LDIyMjQxLDIyMjYxLDIyMjUxLDIy''@;'; put 'put ''MjY1LDIyMjcxLDIyMjc2LDIyMjgyLDIyMjgxLDIyMzAwLDI0MDc5LDI0MDg5LDI0MDg0LDI0MDgxLDI0MTEzLDI0MTIzLDI0MTI0LDM3MTg5LDM3MTkxLDM3MTkyLDM3MjAxLDM3MjAzLDM3MjA0LDM3MjA1LDM3MjA2LDM3MjA4LDM3MjA5LDM3MjExLDM3MjEyLDM3MjE1LDM3MjE2LDM3MjIy''@;'; put 'put ''LDM3MjIzLDM3MjI0LDM3MjI3LDM3MjI5LDM3MjM1LDM3MjQyLDM3MjQzLDM3MjQ0LDM3MjQ4LDM3MjQ5LDM3MjUwLDM3MjUxLDM3MjUyLDM3MjU0LDM3MjU2LDM3MjU4LDM3MjYyLDM3MjYzLDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcwLDM3MjcxLDM3MjcyLDM3MjczLDM3Mjc2LDM3Mjc3LDM3''@;'; put 'put ''Mjc4LDM3Mjc5LDM3MjgwLDM3MjgxLDM3Mjg0LDM3Mjg1LDM3Mjg2LDM3Mjg3LDM3Mjg4LDM3Mjg5LDM3MjkxLDM3MjkyLDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzAzLDM3MzA0LDM3MzA1LDM3MzA3LDM3MzA4LDM3MzA5LDM3MzEwLDM3MzExLDM3MzEyLDM3MzEzLDM3MzE0''@;'; put 'put ''LDM3MzE1LDM3MzE2LDM3MzE3LDM3MzE4LDM3MzIwLDM3MzIzLDM3MzI4LDM3MzMwLDM3MzMxLDM3MzMyLDM3MzMzLDM3MzM0LDM3MzM1LDM3MzM2LDM3MzM3LDM3MzM4LDM3MzM5LDM3MzQxLDM3MzQyLDM3MzQzLDM3MzQ0LDM3MzQ1LDM3MzQ2LDM3MzQ3LDM3MzQ4LDM3MzQ5LDI0MTE5LDI0''@;'; put 'put ''MTMyLDI0MTQ4LDI0MTU1LDI0MTU4LDI0MTYxLDIzNjkyLDIzNjc0LDIzNjkzLDIzNjk2LDIzNzAyLDIzNjg4LDIzNzA0LDIzNzA1LDIzNjk3LDIzNzA2LDIzNzA4LDIzNzMzLDIzNzE0LDIzNzQxLDIzNzI0LDIzNzIzLDIzNzI5LDIzNzE1LDIzNzQ1LDIzNzM1LDIzNzQ4LDIzNzYyLDIzNzgw''@;'; put 'put ''LDIzNzU1LDIzNzgxLDIzODEwLDIzODExLDIzODQ3LDIzODQ2LDIzODU0LDIzODQ0LDIzODM4LDIzODE0LDIzODM1LDIzODk2LDIzODcwLDIzODYwLDIzODY5LDIzOTE2LDIzODk5LDIzOTE5LDIzOTAxLDIzOTE1LDIzODgzLDIzODgyLDIzOTEzLDIzOTI0LDIzOTM4LDIzOTYxLDIzOTY1LDM1''@;'; put 'put ''OTU1LDIzOTkxLDI0MDA1LDI0NDM1LDI0NDM5LDI0NDUwLDI0NDU1LDI0NDU3LDI0NDYwLDI0NDY5LDI0NDczLDI0NDc2LDI0NDg4LDI0NDkzLDI0NTAxLDI0NTA4LDM0OTE0LDI0NDE3LDI5MzU3LDI5MzYwLDI5MzY0LDI5MzY3LDI5MzY4LDI5Mzc5LDI5Mzc3LDI5MzkwLDI5Mzg5LDI5Mzk0''@;'; put 'put ''LDI5NDE2LDI5NDIzLDI5NDE3LDI5NDI2LDI5NDI4LDI5NDMxLDI5NDQxLDI5NDI3LDI5NDQzLDI5NDM0LDM3MzUwLDM3MzUxLDM3MzUyLDM3MzUzLDM3MzU0LDM3MzU1LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzYyLDM3MzYzLDM3MzY0LDM3MzY1LDM3MzY2LDM3''@;'; put 'put ''MzY3LDM3MzY4LDM3MzY5LDM3MzcwLDM3MzcxLDM3MzcyLDM3MzczLDM3Mzc0LDM3Mzc1LDM3Mzc2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzg3LDM3Mzg4LDM3Mzg5LDM3MzkwLDM3MzkxLDM3MzkyLDM3MzkzLDM3Mzk0''@;'; put 'put ''LDM3Mzk1LDM3Mzk2LDM3Mzk3LDM3Mzk4LDM3Mzk5LDM3NDAwLDM3NDAxLDM3NDAyLDM3NDAzLDM3NDA0LDM3NDA1LDM3NDA2LDM3NDA3LDM3NDA4LDM3NDA5LDM3NDEwLDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE1LDM3NDE2LDM3NDE3LDM3NDE4LDM3NDE5LDM3NDIwLDM3NDIxLDM3''@;'; put 'put ''NDIyLDM3NDIzLDM3NDI0LDM3NDI1LDM3NDI2LDM3NDI3LDM3NDI4LDM3NDI5LDM3NDMwLDM3NDMxLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM1LDM3NDM2LDM3NDM3LDM3NDM4LDM3NDM5LDM3NDQwLDM3NDQxLDM3NDQyLDM3NDQzLDM3NDQ0LDM3NDQ1LDI5NDM1LDI5NDYzLDI5NDU5LDI5NDcz''@;'; put 'put ''LDI5NDUwLDI5NDcwLDI5NDY5LDI5NDYxLDI5NDc0LDI5NDk3LDI5NDc3LDI5NDg0LDI5NDk2LDI5NDg5LDI5NTIwLDI5NTE3LDI5NTI3LDI5NTM2LDI5NTQ4LDI5NTUxLDI5NTY2LDMzMzA3LDIyODIxLDM5MTQzLDIyODIwLDIyNzg2LDM5MjY3LDM5MjcxLDM5MjcyLDM5MjczLDM5Mjc0LDM5''@;'; put 'put ''Mjc1LDM5Mjc2LDM5Mjg0LDM5Mjg3LDM5MjkzLDM5Mjk2LDM5MzAwLDM5MzAzLDM5MzA2LDM5MzA5LDM5MzEyLDM5MzEzLDM5MzE1LDM5MzE2LDM5MzE3LDI0MTkyLDI0MjA5LDI0MjAzLDI0MjE0LDI0MjI5LDI0MjI0LDI0MjQ5LDI0MjQ1LDI0MjU0LDI0MjQzLDM2MTc5LDI0Mjc0LDI0Mjcz''@;'; put 'put ''LDI0MjgzLDI0Mjk2LDI0Mjk4LDMzMjEwLDI0NTE2LDI0NTIxLDI0NTM0LDI0NTI3LDI0NTc5LDI0NTU4LDI0NTgwLDI0NTQ1LDI0NTQ4LDI0NTc0LDI0NTgxLDI0NTgyLDI0NTU0LDI0NTU3LDI0NTY4LDI0NjAxLDI0NjI5LDI0NjE0LDI0NjAzLDI0NTkxLDI0NTg5LDI0NjE3LDI0NjE5LDI0''@;'; put 'put ''NTg2LDI0NjM5LDI0NjA5LDI0Njk2LDI0Njk3LDI0Njk5LDI0Njk4LDI0NjQyLDM3NDQ2LDM3NDQ3LDM3NDQ4LDM3NDQ5LDM3NDUwLDM3NDUxLDM3NDUyLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU2LDM3NDU3LDM3NDU4LDM3NDU5LDM3NDYwLDM3NDYxLDM3NDYyLDM3NDYzLDM3NDY0LDM3NDY1''@;'; put 'put ''LDM3NDY2LDM3NDY3LDM3NDY4LDM3NDY5LDM3NDcwLDM3NDcxLDM3NDcyLDM3NDczLDM3NDc0LDM3NDc1LDM3NDc2LDM3NDc3LDM3NDc4LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDgyLDM3NDgzLDM3NDg0LDM3NDg1LDM3NDg2LDM3NDg3LDM3NDg4LDM3NDg5LDM3NDkwLDM3NDkxLDM3NDkzLDM3''@;'; put 'put ''NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk4LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAyLDM3NTAzLDM3NTA0LDM3NTA1LDM3NTA2LDM3NTA3LDM3NTA4LDM3NTA5LDM3NTEwLDM3NTExLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE1LDM3NTE2LDM3NTE3LDM3NTE5LDM3NTIwLDM3NTIxLDM3NTIy''@;'; put 'put ''LDM3NTIzLDM3NTI0LDM3NTI1LDM3NTI2LDM3NTI3LDM3NTI4LDM3NTI5LDM3NTMwLDM3NTMxLDM3NTMyLDM3NTMzLDM3NTM0LDM3NTM1LDM3NTM2LDM3NTM3LDM3NTM4LDM3NTM5LDM3NTQwLDM3NTQxLDM3NTQyLDM3NTQzLDI0NjgyLDI0NzAxLDI0NzI2LDI0NzMwLDI0NzQ5LDI0NzMzLDI0''@;'; put 'put ''NzA3LDI0NzIyLDI0NzE2LDI0NzMxLDI0ODEyLDI0NzYzLDI0NzUzLDI0Nzk3LDI0NzkyLDI0Nzc0LDI0Nzk0LDI0NzU2LDI0ODY0LDI0ODcwLDI0ODUzLDI0ODY3LDI0ODIwLDI0ODMyLDI0ODQ2LDI0ODc1LDI0OTA2LDI0OTQ5LDI1MDA0LDI0OTgwLDI0OTk5LDI1MDE1LDI1MDQ0LDI1MDc3''@;'; put 'put ''LDI0NTQxLDM4NTc5LDM4Mzc3LDM4Mzc5LDM4Mzg1LDM4Mzg3LDM4Mzg5LDM4MzkwLDM4Mzk2LDM4Mzk4LDM4NDAzLDM4NDA0LDM4NDA2LDM4NDA4LDM4NDEwLDM4NDExLDM4NDEyLDM4NDEzLDM4NDE1LDM4NDE4LDM4NDIxLDM4NDIyLDM4NDIzLDM4NDI1LDM4NDI2LDIwMDEyLDI5MjQ3LDI1''@;'; put 'put ''MTA5LDI3NzAxLDI3NzMyLDI3NzQwLDI3NzIyLDI3ODExLDI3NzgxLDI3NzkyLDI3Nzk2LDI3Nzg4LDI3NzUyLDI3NzUzLDI3NzY0LDI3NzY2LDI3NzgyLDI3ODE3LDI3ODU2LDI3ODYwLDI3ODIxLDI3ODk1LDI3ODk2LDI3ODg5LDI3ODYzLDI3ODI2LDI3ODcyLDI3ODYyLDI3ODk4LDI3ODgz''@;'; put 'put ''LDI3ODg2LDI3ODI1LDI3ODU5LDI3ODg3LDI3OTAyLDM3NTQ0LDM3NTQ1LDM3NTQ2LDM3NTQ3LDM3NTQ4LDM3NTQ5LDM3NTUxLDM3NTUyLDM3NTUzLDM3NTU0LDM3NTU1LDM3NTU2LDM3NTU3LDM3NTU4LDM3NTU5LDM3NTYwLDM3NTYxLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY2LDM3''@;'; put 'put ''NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTcyLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc3LDM3NTc4LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTgzLDM3NTg0LDM3NTg1LDM3NTg2LDM3NTg3LDM3NTg4LDM3NTg5LDM3NTkwLDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk0LDM3NTk1''@;'; put 'put ''LDM3NTk2LDM3NTk3LDM3NTk4LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAyLDM3NjAzLDM3NjA0LDM3NjA1LDM3NjA2LDM3NjA3LDM3NjA4LDM3NjA5LDM3NjEwLDM3NjExLDM3NjEyLDM3NjEzLDM3NjE0LDM3NjE1LDM3NjE2LDM3NjE3LDM3NjE4LDM3NjE5LDM3NjIwLDM3NjIxLDM3NjIyLDM3''@;'; put 'put ''NjIzLDM3NjI0LDM3NjI1LDM3NjI2LDM3NjI3LDM3NjI4LDM3NjI5LDM3NjMwLDM3NjMxLDM3NjMyLDM3NjMzLDM3NjM0LDM3NjM1LDM3NjM2LDM3NjM3LDM3NjM4LDM3NjM5LDM3NjQwLDM3NjQxLDI3OTYxLDI3OTQzLDI3OTE2LDI3OTcxLDI3OTc2LDI3OTExLDI3OTA4LDI3OTI5LDI3OTE4''@;'; put 'put ''LDI3OTQ3LDI3OTgxLDI3OTUwLDI3OTU3LDI3OTMwLDI3OTgzLDI3OTg2LDI3OTg4LDI3OTU1LDI4MDQ5LDI4MDE1LDI4MDYyLDI4MDY0LDI3OTk4LDI4MDUxLDI4MDUyLDI3OTk2LDI4ZTMsMjgwMjgsMjgwMDMsMjgxODYsMjgxMDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgx''@;'; put 'put ''NzcsMjgxMzQsMjgxMjUsMjgxMjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgyMDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgyMTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcsMjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcs''@;'; put 'put ''MjgzNDksMjgzNDcsMjgzNDMsMjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQsMjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAsMjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1''@;'; put 'put ''NDAsMjg1MzgsMjg2MjUsMzc2NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYs''@;'; put 'put ''Mzc2NjcsMzc2NjgsMzc2NjksMzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQsMzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMsMzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2''@;'; put 'put ''OTUsMzc2OTYsMzc2OTcsMzc2OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYsMzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIs''@;'; put 'put ''Mzc3MjMsMzc3MjQsMzc3MjUsMzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAsMzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcsMjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3''@;'; put 'put ''MDcsMjg2OTksMjg3MjksMjg3MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUxMjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAsMzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEs''@;'; put 'put ''MzY4MzgsMzY4NTEsMzY4NDAsMzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEsMzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUsMzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzdl''@;'; put 'put ''MywzNjk5NSwzNzAwMywyNDQwMCwyNDQwNywyNDQwNiwyNDQwOCwyMzYxMSwyMTY3NSwyMzYzMiwyMzY0MSwyMzQwOSwyMzY1MSwyMzY1NCwzMjcwMCwyNDM2MiwyNDM2MSwyNDM2NSwzMzM5NiwyNDM4MCwzOTczOSwyMzY2MiwyMjkxMywyMjkxNSwyMjkyNSwyMjk1MywyMjk1NCwyMjk0Nywz''@;'; put 'put ''Nzc0MCwzNzc0MSwzNzc0MiwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NiwzNzc0NywzNzc0OCwzNzc0OSwzNzc1MCwzNzc1MSwzNzc1MiwzNzc1MywzNzc1NCwzNzc1NSwzNzc1NiwzNzc1NywzNzc1OCwzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2MywzNzc2NCwzNzc2NSwzNzc2NiwzNzc2''@;'; put 'put ''NywzNzc2OCwzNzc2OSwzNzc3MCwzNzc3MSwzNzc3MiwzNzc3MywzNzc3NCwzNzc3NiwzNzc3NywzNzc3OCwzNzc3OSwzNzc4MCwzNzc4MSwzNzc4MiwzNzc4MywzNzc4NCwzNzc4NSwzNzc4NiwzNzc4NywzNzc4OCwzNzc4OSwzNzc5MCwzNzc5MSwzNzc5MiwzNzc5MywzNzc5NCwzNzc5NSwz''@;'; put 'put ''Nzc5NiwzNzc5NywzNzc5OCwzNzc5OSwzNzgwMCwzNzgwMSwzNzgwMiwzNzgwMywzNzgwNCwzNzgwNSwzNzgwNiwzNzgwNywzNzgwOCwzNzgwOSwzNzgxMCwzNzgxMSwzNzgxMiwzNzgxMywzNzgxNCwzNzgxNSwzNzgxNiwzNzgxNywzNzgxOCwzNzgxOSwzNzgyMCwzNzgyMSwzNzgyMiwzNzgy''@;'; put 'put ''MywzNzgyNCwzNzgyNSwzNzgyNiwzNzgyNywzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMiwzNzgzMywzNzgzNSwzNzgzNiwzNzgzNywyMjkzNSwyMjk4NiwyMjk1NSwyMjk0MiwyMjk0OCwyMjk5NCwyMjk2MiwyMjk1OSwyMjk5OSwyMjk3NCwyMzA0NSwyMzA0NiwyMzAwNSwyMzA0OCwy''@;'; put 'put ''MzAxMSwyM2UzLDIzMDMzLDIzMDUyLDIzMDQ5LDIzMDkwLDIzMDkyLDIzMDU3LDIzMDc1LDIzMDU5LDIzMTA0LDIzMTQzLDIzMTE0LDIzMTI1LDIzMTAwLDIzMTM4LDIzMTU3LDMzMDA0LDIzMjEwLDIzMTk1LDIzMTU5LDIzMTYyLDIzMjMwLDIzMjc1LDIzMjE4LDIzMjUwLDIzMjUyLDIzMjI0''@;'; put 'put ''LDIzMjY0LDIzMjY3LDIzMjgxLDIzMjU0LDIzMjcwLDIzMjU2LDIzMjYwLDIzMzA1LDIzMzE5LDIzMzE4LDIzMzQ2LDIzMzUxLDIzMzYwLDIzNTczLDIzNTgwLDIzMzg2LDIzMzk3LDIzNDExLDIzMzc3LDIzMzc5LDIzMzk0LDM5NTQxLDM5NTQzLDM5NTQ0LDM5NTQ2LDM5NTUxLDM5NTQ5LDM5''@;'; put 'put ''NTUyLDM5NTUzLDM5NTU3LDM5NTYwLDM5NTYyLDM5NTY4LDM5NTcwLDM5NTcxLDM5NTc0LDM5NTc2LDM5NTc5LDM5NTgwLDM5NTgxLDM5NTgzLDM5NTg0LDM5NTg2LDM5NTg3LDM5NTg5LDM5NTkxLDMyNDE1LDMyNDE3LDMyNDE5LDMyNDIxLDMyNDI0LDMyNDI1LDM3ODM4LDM3ODM5LDM3ODQw''@;'; put 'put ''LDM3ODQxLDM3ODQyLDM3ODQzLDM3ODQ0LDM3ODQ1LDM3ODQ3LDM3ODQ4LDM3ODQ5LDM3ODUwLDM3ODUxLDM3ODUyLDM3ODUzLDM3ODU0LDM3ODU1LDM3ODU2LDM3ODU3LDM3ODU4LDM3ODU5LDM3ODYwLDM3ODYxLDM3ODYyLDM3ODYzLDM3ODY0LDM3ODY1LDM3ODY2LDM3ODY3LDM3ODY4LDM3''@;'; put 'put ''ODY5LDM3ODcwLDM3ODcxLDM3ODcyLDM3ODczLDM3ODc0LDM3ODc1LDM3ODc2LDM3ODc3LDM3ODc4LDM3ODc5LDM3ODgwLDM3ODgxLDM3ODgyLDM3ODgzLDM3ODg0LDM3ODg1LDM3ODg2LDM3ODg3LDM3ODg4LDM3ODg5LDM3ODkwLDM3ODkxLDM3ODkyLDM3ODkzLDM3ODk0LDM3ODk1LDM3ODk2''@;'; put 'put ''LDM3ODk3LDM3ODk4LDM3ODk5LDM3OTAwLDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA0LDM3OTA1LDM3OTA2LDM3OTA3LDM3OTA4LDM3OTA5LDM3OTEwLDM3OTExLDM3OTEyLDM3OTEzLDM3OTE0LDM3OTE1LDM3OTE2LDM3OTE3LDM3OTE4LDM3OTE5LDM3OTIwLDM3OTIxLDM3OTIyLDM3OTIzLDM3''@;'; put 'put ''OTI0LDM3OTI1LDM3OTI2LDM3OTI3LDM3OTI4LDM3OTI5LDM3OTMwLDM3OTMxLDM3OTMyLDM3OTMzLDM3OTM0LDMyNDI5LDMyNDMyLDMyNDQ2LDMyNDQ4LDMyNDQ5LDMyNDUwLDMyNDU3LDMyNDU5LDMyNDYwLDMyNDY0LDMyNDY4LDMyNDcxLDMyNDc1LDMyNDgwLDMyNDgxLDMyNDg4LDMyNDkx''@;'; put 'put ''LDMyNDk0LDMyNDk1LDMyNDk3LDMyNDk4LDMyNTI1LDMyNTAyLDMyNTA2LDMyNTA3LDMyNTEwLDMyNTEzLDMyNTE0LDMyNTE1LDMyNTE5LDMyNTIwLDMyNTIzLDMyNTI0LDMyNTI3LDMyNTI5LDMyNTMwLDMyNTM1LDMyNTM3LDMyNTQwLDMyNTM5LDMyNTQzLDMyNTQ1LDMyNTQ2LDMyNTQ3LDMy''@;'; put 'put ''NTQ4LDMyNTQ5LDMyNTUwLDMyNTUxLDMyNTU0LDMyNTU1LDMyNTU2LDMyNTU3LDMyNTU5LDMyNTYwLDMyNTYxLDMyNTYyLDMyNTYzLDMyNTY1LDI0MTg2LDMwMDc5LDI0MDI3LDMwMDE0LDM3MDEzLDI5NTgyLDI5NTg1LDI5NjE0LDI5NjAyLDI5NTk5LDI5NjQ3LDI5NjM0LDI5NjQ5LDI5NjIz''@;'; put 'put ''LDI5NjE5LDI5NjMyLDI5NjQxLDI5NjQwLDI5NjY5LDI5NjU3LDM5MDM2LDI5NzA2LDI5NjczLDI5NjcxLDI5NjYyLDI5NjI2LDI5NjgyLDI5NzExLDI5NzM4LDI5Nzg3LDI5NzM0LDI5NzMzLDI5NzM2LDI5NzQ0LDI5NzQyLDI5NzQwLDM3OTM1LDM3OTM2LDM3OTM3LDM3OTM4LDM3OTM5LDM3''@;'; put 'put ''OTQwLDM3OTQxLDM3OTQyLDM3OTQzLDM3OTQ0LDM3OTQ1LDM3OTQ2LDM3OTQ3LDM3OTQ4LDM3OTQ5LDM3OTUxLDM3OTUyLDM3OTUzLDM3OTU0LDM3OTU1LDM3OTU2LDM3OTU3LDM3OTU4LDM3OTU5LDM3OTYwLDM3OTYxLDM3OTYyLDM3OTYzLDM3OTY0LDM3OTY1LDM3OTY2LDM3OTY3LDM3OTY4''@;'; put 'put ''LDM3OTY5LDM3OTcwLDM3OTcxLDM3OTcyLDM3OTczLDM3OTc0LDM3OTc1LDM3OTc2LDM3OTc3LDM3OTc4LDM3OTc5LDM3OTgwLDM3OTgxLDM3OTgyLDM3OTgzLDM3OTg0LDM3OTg1LDM3OTg2LDM3OTg3LDM3OTg4LDM3OTg5LDM3OTkwLDM3OTkxLDM3OTkyLDM3OTkzLDM3OTk0LDM3OTk2LDM3''@;'; put 'put ''OTk3LDM3OTk4LDM3OTk5LDM4ZTMsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgwMDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgwMTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgsMzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcs''@;'; put 'put ''MzgwOTUsMzgwOTksMzgxMDAsMzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYsMjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUsMjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4''@;'; put 'put ''NDAsMjk4NjMsMjk5MDYsMjk4ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEsMjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQs''@;'; put 'put ''MjY2MzQsMjY2MDEsMjY1NDQsMjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcsMjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQsMjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3''@;'; put 'put ''MjYsMjY2ODksMjY3MjcsMjY2ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUsMzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQs''@;'; put 'put ''MzgyNDAsMzgyNTQsMzgyNjAsMzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYsMzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYsMzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgyODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgy''@;'; put 'put ''ODcsMzgyODgsMzgyODksMzgyOTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgyOTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgsMzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQs''@;'; put 'put ''MzgzMTUsMzgzMTYsMzgzMTcsMzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIsMzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEsMzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgzMzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgz''@;'; put 'put ''NDIsMzgzNDMsMzgzNDQsMzgzNDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIsMjdlMywyNjkzMiwyNzA4NCwyNzAxNSwyNzAxNiwyNzA4Niwy''@;'; put 'put ''NzAxNywyNjk4MiwyNjk3OSwyNzAwMSwyNzAzNSwyNzA0NywyNzA2NywyNzA1MSwyNzA1MywyNzA5MiwyNzA1NywyNzA3MywyNzA4MiwyNzEwMywyNzAyOSwyNzEwNCwyNzAyMSwyNzEzNSwyNzE4MywyNzExNywyNzE1OSwyNzE2MCwyNzIzNywyNzEyMiwyNzIwNCwyNzE5OCwyNzI5NiwyNzIx''@;'; put 'put ''NiwyNzIyNywyNzE4OSwyNzI3OCwyNzI1NywyNzE5NywyNzE3NiwyNzIyNCwyNzI2MCwyNzI4MSwyNzI4MCwyNzMwNSwyNzI4NywyNzMwNywyOTQ5NSwyOTUyMiwyNzUyMSwyNzUyMiwyNzUyNywyNzUyNCwyNzUzOCwyNzUzOSwyNzUzMywyNzU0NiwyNzU0NywyNzU1MywyNzU2MiwzNjcxNSwz''@;'; put 'put ''NjcxNywzNjcyMSwzNjcyMiwzNjcyMywzNjcyNSwzNjcyNiwzNjcyOCwzNjcyNywzNjcyOSwzNjczMCwzNjczMiwzNjczNCwzNjczNywzNjczOCwzNjc0MCwzNjc0MywzNjc0NywzODM0OCwzODM0OSwzODM1MCwzODM1MSwzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM1NiwzODM1NywzODM1''@;'; put 'put ''OCwzODM1OSwzODM2MCwzODM2MSwzODM2MiwzODM2MywzODM2NCwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM2OSwzODM3MCwzODM3MSwzODM3MiwzODM3MywzODM3NCwzODM3NSwzODM4MCwzODM5OSwzODQwNywzODQxOSwzODQyNCwzODQyNywzODQzMCwzODQzMiwzODQzNSwzODQzNiwz''@;'; put 'put ''ODQzNywzODQzOCwzODQzOSwzODQ0MCwzODQ0MSwzODQ0MywzODQ0NCwzODQ0NSwzODQ0NywzODQ0OCwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MiwzODQ2NSwzODQ2NywzODQ3NCwzODQ3OCwzODQ3OSwzODQ4MSwzODQ4MiwzODQ4MywzODQ4NiwzODQ4NywzODQ4OCwzODQ4OSwzODQ5''@;'; put 'put ''MCwzODQ5MiwzODQ5MywzODQ5NCwzODQ5NiwzODQ5OSwzODUwMSwzODUwMiwzODUwNywzODUwOSwzODUxMCwzODUxMSwzODUxMiwzODUxMywzODUxNSwzODUyMCwzODUyMSwzODUyMiwzODUyMywzODUyNCwzODUyNSwzODUyNiwzODUyNywzODUyOCwzODUyOSwzODUzMCwzODUzMSwzODUzMiwz''@;'; put 'put ''ODUzNSwzODUzNywzODUzOCwzNjc0OSwzNjc1MCwzNjc1MSwzNjc2MCwzNjc2MiwzNjU1OCwyNTA5OSwyNTExMSwyNTExNSwyNTExOSwyNTEyMiwyNTEyMSwyNTEyNSwyNTEyNCwyNTEzMiwzMzI1NSwyOTkzNSwyOTk0MCwyOTk1MSwyOTk2NywyOTk2OSwyOTk3MSwyNTkwOCwyNjA5NCwyNjA5''@;'; put 'put ''NSwyNjA5NiwyNjEyMiwyNjEzNywyNjQ4MiwyNjExNSwyNjEzMywyNjExMiwyODgwNSwyNjM1OSwyNjE0MSwyNjE2NCwyNjE2MSwyNjE2NiwyNjE2NSwzMjc3NCwyNjIwNywyNjE5NiwyNjE3NywyNjE5MSwyNjE5OCwyNjIwOSwyNjE5OSwyNjIzMSwyNjI0NCwyNjI1MiwyNjI3OSwyNjI2OSwy''@;'; put 'put ''NjMwMiwyNjMzMSwyNjMzMiwyNjM0MiwyNjM0NSwzNjE0NiwzNjE0NywzNjE1MCwzNjE1NSwzNjE1NywzNjE2MCwzNjE2NSwzNjE2NiwzNjE2OCwzNjE2OSwzNjE2NywzNjE3MywzNjE4MSwzNjE4NSwzNTI3MSwzNTI3NCwzNTI3NSwzNTI3NiwzNTI3OCwzNTI3OSwzNTI4MCwzNTI4MSwyOTI5''@;'; put 'put ''NCwyOTM0MywyOTI3NywyOTI4NiwyOTI5NSwyOTMxMCwyOTMxMSwyOTMxNiwyOTMyMywyOTMyNSwyOTMyNywyOTMzMCwyNTM1MiwyNTM5NCwyNTUyMCwzODU0MCwzODU0MiwzODU0NSwzODU0NiwzODU0NywzODU0OSwzODU1MCwzODU1NCwzODU1NSwzODU1NywzODU1OCwzODU1OSwzODU2MCwz''@;'; put 'put ''ODU2MSwzODU2MiwzODU2MywzODU2NCwzODU2NSwzODU2NiwzODU2OCwzODU2OSwzODU3MCwzODU3MSwzODU3MiwzODU3MywzODU3NCwzODU3NSwzODU3NywzODU3OCwzODU4MCwzODU4MSwzODU4MywzODU4NCwzODU4NiwzODU4NywzODU5MSwzODU5NCwzODU5NSwzODYwMCwzODYwMiwzODYw''@;'; put 'put ''MywzODYwOCwzODYwOSwzODYxMSwzODYxMiwzODYxNCwzODYxNSwzODYxNiwzODYxNywzODYxOCwzODYxOSwzODYyMCwzODYyMSwzODYyMiwzODYyMywzODYyNSwzODYyNiwzODYyNywzODYyOCwzODYyOSwzODYzMCwzODYzMSwzODYzNSwzODYzNiwzODYzNywzODYzOCwzODY0MCwzODY0MSwz''@;'; put 'put ''ODY0MiwzODY0NCwzODY0NSwzODY0OCwzODY1MCwzODY1MSwzODY1MiwzODY1MywzODY1NSwzODY1OCwzODY1OSwzODY2MSwzODY2NiwzODY2NywzODY2OCwzODY3MiwzODY3MywzODY3NCwzODY3NiwzODY3NywzODY3OSwzODY4MCwzODY4MSwzODY4MiwzODY4MywzODY4NSwzODY4NywzODY4''@;'; put 'put ''OCwyNTY2MywyNTgxNiwzMjc3MiwyNzYyNiwyNzYzNSwyNzY0NSwyNzYzNywyNzY0MSwyNzY1MywyNzY1NSwyNzY1NCwyNzY2MSwyNzY2OSwyNzY3MiwyNzY3MywyNzY3NCwyNzY4MSwyNzY4OSwyNzY4NCwyNzY5MCwyNzY5OCwyNTkwOSwyNTk0MSwyNTk2MywyOTI2MSwyOTI2NiwyOTI3MCwy''@;'; put 'put ''OTIzMiwzNDQwMiwyMTAxNCwzMjkyNywzMjkyNCwzMjkxNSwzMjk1NiwyNjM3OCwzMjk1NywzMjk0NSwzMjkzOSwzMjk0MSwzMjk0OCwzMjk1MSwzMjk5OSwzM2UzLDMzMDAxLDMzMDAyLDMyOTg3LDMyOTYyLDMyOTY0LDMyOTg1LDMyOTczLDMyOTgzLDI2Mzg0LDMyOTg5LDMzMDAzLDMzMDA5''@;'; put 'put ''LDMzMDEyLDMzMDA1LDMzMDM3LDMzMDM4LDMzMDEwLDMzMDIwLDI2Mzg5LDMzMDQyLDM1OTMwLDMzMDc4LDMzMDU0LDMzMDY4LDMzMDQ4LDMzMDc0LDMzMDk2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMTEzLDMzMTE0LDMzMTM3LDMzMTIwLDMzMTI5LDMzMTQ4LDMzMTQ5LDMzMTMzLDMzMTI3LDIy''@;'; put 'put ''NjA1LDIzMjIxLDMzMTYwLDMzMTU0LDMzMTY5LDI4MzczLDMzMTg3LDMzMTk0LDMzMjI4LDI2NDA2LDMzMjI2LDMzMjExLDM4Njg5LDM4NjkwLDM4NjkxLDM4NjkyLDM4NjkzLDM4Njk0LDM4Njk1LDM4Njk2LDM4Njk3LDM4Njk5LDM4NzAwLDM4NzAyLDM4NzAzLDM4NzA1LDM4NzA3LDM4NzA4''@;'; put 'put ''LDM4NzA5LDM4NzEwLDM4NzExLDM4NzE0LDM4NzE1LDM4NzE2LDM4NzE3LDM4NzE5LDM4NzIwLDM4NzIxLDM4NzIyLDM4NzIzLDM4NzI0LDM4NzI1LDM4NzI2LDM4NzI3LDM4NzI4LDM4NzI5LDM4NzMwLDM4NzMxLDM4NzMyLDM4NzMzLDM4NzM0LDM4NzM1LDM4NzM2LDM4NzM3LDM4NzQwLDM4''@;'; put 'put ''NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ4LDM4NzQ5LDM4NzUxLDM4NzU1LDM4NzU2LDM4NzU4LDM4NzU5LDM4NzYwLDM4NzYyLDM4NzYzLDM4NzY0LDM4NzY1LDM4NzY2LDM4NzY3LDM4NzY4LDM4NzY5LDM4NzcwLDM4NzczLDM4Nzc1LDM4Nzc2LDM4Nzc3LDM4Nzc4LDM4Nzc5LDM4Nzgx''@;'; put 'put ''LDM4NzgyLDM4NzgzLDM4Nzg0LDM4Nzg1LDM4Nzg2LDM4Nzg3LDM4Nzg4LDM4NzkwLDM4NzkxLDM4NzkyLDM4NzkzLDM4Nzk0LDM4Nzk2LDM4Nzk4LDM4Nzk5LDM4ODAwLDM4ODAzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODExLDM4ODEyLDM4ODEzLDMzMjE3LDMzMTkwLDI3''@;'; put 'put ''NDI4LDI3NDQ3LDI3NDQ5LDI3NDU5LDI3NDYyLDI3NDgxLDM5MTIxLDM5MTIyLDM5MTIzLDM5MTI1LDM5MTI5LDM5MTMwLDI3NTcxLDI0Mzg0LDI3NTg2LDM1MzE1LDI2ZTMsNDA3ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIsMjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAs''@;'; put 'put ''Mjg4MjgsMjg4MjIsMjg4MjksMjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDksMjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAsMjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkwNDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkw''@;'; put 'put ''ODgsMjkxNTIsMjkxNDAsMjkxNTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEwNDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgsMzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcs''@;'; put 'put ''MzEwNzksMzEwOTgsMzExMDksMzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1MjksMjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMsMzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4''@;'; put 'put ''MzksMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYs''@;'; put 'put ''Mzg4NjcsMzg4NjgsMzg4NjksMzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQsMzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMsMzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5''@;'; put 'put ''MDQsMzg5MDUsMzg5MDYsMzg5MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUsMzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEs''@;'; put 'put ''MjQ2NjUsMjQ2NzUsMjQ3NDcsMjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODksMjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAsMzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3''@;'; put 'put ''NzcsMzA3NzgsMzA3NzksMzA3NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUsMzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUs''@;'; put 'put ''MzA5MzIsMzA5MzcsMzA5MjEsMzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUsMzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0NjgsMzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1''@;'; put 'put ''MjAsMzA1NDQsMzA1NDUsMzA1MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEsMzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcs''@;'; put 'put ''Mzg5NDgsMzg5NDksMzg5NTAsMzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUsMzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQsMzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5''@;'; put 'put ''NzUsMzg5NzYsMzg5NzcsMzg5NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYsMzg5OTcsMzg5OTgsMzg5OTksMzllMywzOTAwMSwzOTAwMiwz''@;'; put 'put ''OTAwMywzOTAwNCwzOTAwNSwzOTAwNiwzOTAwNywzOTAwOCwzOTAwOSwzOTAxMCwzOTAxMSwzOTAxMiwzOTAxMywzOTAxNCwzOTAxNSwzOTAxNiwzOTAxNywzOTAxOCwzOTAxOSwzOTAyMCwzOTAyMSwzOTAyMiwzMDU2MiwzMDU2NSwzMDU5MSwzMDYwNSwzMDU4OSwzMDU5MiwzMDYwNCwzMDYw''@;'; put 'put ''OSwzMDYyMywzMDYyNCwzMDY0MCwzMDY0NSwzMDY1MywzMDAxMCwzMDAxNiwzMDAzMCwzMDAyNywzMDAyNCwzMDA0MywzMDA2NiwzMDA3MywzMDA4MywzMjYwMCwzMjYwOSwzMjYwNywzNTQwMCwzMjYxNiwzMjYyOCwzMjYyNSwzMjYzMywzMjY0MSwzMjYzOCwzMDQxMywzMDQzNywzNDg2Niwz''@;'; put 'put ''ODAyMSwzODAyMiwzODAyMywzODAyNywzODAyNiwzODAyOCwzODAyOSwzODAzMSwzODAzMiwzODAzNiwzODAzOSwzODAzNywzODA0MiwzODA0MywzODA0NCwzODA1MSwzODA1MiwzODA1OSwzODA1OCwzODA2MSwzODA2MCwzODA2MywzODA2NCwzODA2NiwzODA2OCwzODA3MCwzODA3MSwzODA3''@;'; put 'put ''MiwzODA3MywzODA3NCwzODA3NiwzODA3NywzODA3OSwzODA4NCwzODA4OCwzODA4OSwzODA5MCwzODA5MSwzODA5MiwzODA5MywzODA5NCwzODA5NiwzODA5NywzODA5OCwzODEwMSwzODEwMiwzODEwMywzODEwNSwzODEwNCwzODEwNywzODExMCwzODExMSwzODExMiwzODExNCwzODExNiwz''@;'; put 'put ''ODExNywzODExOSwzODEyMCwzODEyMiwzOTAyMywzOTAyNCwzOTAyNSwzOTAyNiwzOTAyNywzOTAyOCwzOTA1MSwzOTA1NCwzOTA1OCwzOTA2MSwzOTA2NSwzOTA3NSwzOTA4MCwzOTA4MSwzOTA4MiwzOTA4MywzOTA4NCwzOTA4NSwzOTA4NiwzOTA4NywzOTA4OCwzOTA4OSwzOTA5MCwzOTA5''@;'; put 'put ''MSwzOTA5MiwzOTA5MywzOTA5NCwzOTA5NSwzOTA5NiwzOTA5NywzOTA5OCwzOTA5OSwzOTEwMCwzOTEwMSwzOTEwMiwzOTEwMywzOTEwNCwzOTEwNSwzOTEwNiwzOTEwNywzOTEwOCwzOTEwOSwzOTExMCwzOTExMSwzOTExMiwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTExNywzOTExOSwz''@;'; put 'put ''OTEyMCwzOTEyNCwzOTEyNiwzOTEyNywzOTEzMSwzOTEzMiwzOTEzMywzOTEzNiwzOTEzNywzOTEzOCwzOTEzOSwzOTE0MCwzOTE0MSwzOTE0MiwzOTE0NSwzOTE0NiwzOTE0NywzOTE0OCwzOTE0OSwzOTE1MCwzOTE1MSwzOTE1MiwzOTE1MywzOTE1NCwzOTE1NSwzOTE1NiwzOTE1NywzOTE1''@;'; put 'put ''OCwzOTE1OSwzOTE2MCwzOTE2MSwzOTE2MiwzOTE2MywzOTE2NCwzOTE2NSwzOTE2NiwzOTE2NywzOTE2OCwzOTE2OSwzOTE3MCwzOTE3MSwzOTE3MiwzOTE3MywzOTE3NCwzOTE3NSwzODEyMSwzODEyMywzODEyNiwzODEyNywzODEzMSwzODEzMiwzODEzMywzODEzNSwzODEzNywzODE0MCwz''@;'; put 'put ''ODE0MSwzODE0MywzODE0NywzODE0NiwzODE1MCwzODE1MSwzODE1MywzODE1NCwzODE1NywzODE1OCwzODE1OSwzODE2MiwzODE2MywzODE2NCwzODE2NSwzODE2NiwzODE2OCwzODE3MSwzODE3MywzODE3NCwzODE3NSwzODE3OCwzODE4NiwzODE4NywzODE4NSwzODE4OCwzODE5MywzODE5''@;'; put 'put ''NCwzODE5NiwzODE5OCwzODE5OSwzODIwMCwzODIwNCwzODIwNiwzODIwNywzODIxMCwzODE5NywzODIxMiwzODIxMywzODIxNCwzODIxNywzODIyMCwzODIyMiwzODIyMywzODIyNiwzODIyNywzODIyOCwzODIzMCwzODIzMSwzODIzMiwzODIzMywzODIzNSwzODIzOCwzODIzOSwzODIzNywz''@;'; put 'put ''ODI0MSwzODI0MiwzODI0NCwzODI0NSwzODI0NiwzODI0NywzODI0OCwzODI0OSwzODI1MCwzODI1MSwzODI1MiwzODI1NSwzODI1NywzODI1OCwzODI1OSwzODIwMiwzMDY5NSwzMDcwMCwzODYwMSwzMTE4OSwzMTIxMywzMTIwMywzMTIxMSwzMTIzOCwyMzg3OSwzMTIzNSwzMTIzNCwzMTI2''@;'; put 'put ''MiwzMTI1MiwzOTE3NiwzOTE3NywzOTE3OCwzOTE3OSwzOTE4MCwzOTE4MiwzOTE4MywzOTE4NSwzOTE4NiwzOTE4NywzOTE4OCwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5MiwzOTE5MywzOTE5NCwzOTE5NSwzOTE5NiwzOTE5NywzOTE5OCwzOTE5OSwzOTIwMCwzOTIwMSwzOTIwMiwzOTIwMywz''@;'; put 'put ''OTIwNCwzOTIwNSwzOTIwNiwzOTIwNywzOTIwOCwzOTIwOSwzOTIxMCwzOTIxMSwzOTIxMiwzOTIxMywzOTIxNSwzOTIxNiwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyMiwzOTIyMywzOTIyNCwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIyOSwzOTIzMCwzOTIzMSwzOTIz''@;'; put 'put ''MiwzOTIzMywzOTIzNCwzOTIzNSwzOTIzNiwzOTIzNywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0MSwzOTI0MiwzOTI0MywzOTI0NCwzOTI0NSwzOTI0NiwzOTI0NywzOTI0OCwzOTI0OSwzOTI1MCwzOTI1MSwzOTI1NCwzOTI1NSwzOTI1NiwzOTI1NywzOTI1OCwzOTI1OSwzOTI2MCwzOTI2MSwz''@;'; put 'put ''OTI2MiwzOTI2MywzOTI2NCwzOTI2NSwzOTI2NiwzOTI2OCwzOTI3MCwzOTI4MywzOTI4OCwzOTI4OSwzOTI5MSwzOTI5NCwzOTI5OCwzOTI5OSwzOTMwNSwzMTI4OSwzMTI4NywzMTMxMyw0MDY1NSwzOTMzMywzMTM0NCwzMDM0NCwzMDM1MCwzMDM1NSwzMDM2MSwzMDM3MiwyOTkxOCwyOTky''@;'; put 'put ''MCwyOTk5Niw0MDQ4MCw0MDQ4Miw0MDQ4OCw0MDQ4OSw0MDQ5MCw0MDQ5MSw0MDQ5Miw0MDQ5OCw0MDQ5Nyw0MDUwMiw0MDUwNCw0MDUwMyw0MDUwNSw0MDUwNiw0MDUxMCw0MDUxMyw0MDUxNCw0MDUxNiw0MDUxOCw0MDUxOSw0MDUyMCw0MDUyMSw0MDUyMyw0MDUyNCw0MDUyNiw0MDUyOSw0''@;'; put 'put ''MDUzMyw0MDUzNSw0MDUzOCw0MDUzOSw0MDU0MCw0MDU0Miw0MDU0Nyw0MDU1MCw0MDU1MSw0MDU1Miw0MDU1Myw0MDU1NCw0MDU1NSw0MDU1Niw0MDU2MSw0MDU1Nyw0MDU2MywzMDA5OCwzMDEwMCwzMDEwMiwzMDExMiwzMDEwOSwzMDEyNCwzMDExNSwzMDEzMSwzMDEzMiwzMDEzNiwzMDE0''@;'; put 'put ''OCwzMDEyOSwzMDEyOCwzMDE0NywzMDE0NiwzMDE2NiwzMDE1NywzMDE3OSwzMDE4NCwzMDE4MiwzMDE4MCwzMDE4NywzMDE4MywzMDIxMSwzMDE5MywzMDIwNCwzMDIwNywzMDIyNCwzMDIwOCwzMDIxMywzMDIyMCwzMDIzMSwzMDIxOCwzMDI0NSwzMDIzMiwzMDIyOSwzMDIzMywzOTMwOCwz''@;'; put 'put ''OTMxMCwzOTMyMiwzOTMyMywzOTMyNCwzOTMyNSwzOTMyNiwzOTMyNywzOTMyOCwzOTMyOSwzOTMzMCwzOTMzMSwzOTMzMiwzOTMzNCwzOTMzNSwzOTMzNywzOTMzOCwzOTMzOSwzOTM0MCwzOTM0MSwzOTM0MiwzOTM0MywzOTM0NCwzOTM0NSwzOTM0NiwzOTM0NywzOTM0OCwzOTM0OSwzOTM1''@;'; put 'put ''MCwzOTM1MSwzOTM1MiwzOTM1MywzOTM1NCwzOTM1NSwzOTM1NiwzOTM1NywzOTM1OCwzOTM1OSwzOTM2MCwzOTM2MSwzOTM2MiwzOTM2MywzOTM2NCwzOTM2NSwzOTM2NiwzOTM2NywzOTM2OCwzOTM2OSwzOTM3MCwzOTM3MSwzOTM3MiwzOTM3MywzOTM3NCwzOTM3NSwzOTM3NiwzOTM3Nywz''@;'; put 'put ''OTM3OCwzOTM3OSwzOTM4MCwzOTM4MSwzOTM4MiwzOTM4MywzOTM4NCwzOTM4NSwzOTM4NiwzOTM4NywzOTM4OCwzOTM4OSwzOTM5MCwzOTM5MSwzOTM5MiwzOTM5MywzOTM5NCwzOTM5NSwzOTM5NiwzOTM5NywzOTM5OCwzOTM5OSwzOTQwMCwzOTQwMSwzOTQwMiwzOTQwMywzOTQwNCwzOTQw''@;'; put 'put ''NSwzOTQwNiwzOTQwNywzOTQwOCwzOTQwOSwzOTQxMCwzOTQxMSwzOTQxMiwzOTQxMywzOTQxNCwzOTQxNSwzOTQxNiwzOTQxNywzMDIzNSwzMDI2OCwzMDI0MiwzMDI0MCwzMDI3MiwzMDI1MywzMDI1NiwzMDI3MSwzMDI2MSwzMDI3NSwzMDI3MCwzMDI1OSwzMDI4NSwzMDMwMiwzMDI5Miwz''@;'; put 'put ''MDMwMCwzMDI5NCwzMDMxNSwzMDMxOSwzMjcxNCwzMTQ2MiwzMTM1MiwzMTM1MywzMTM2MCwzMTM2NiwzMTM2OCwzMTM4MSwzMTM5OCwzMTM5MiwzMTQwNCwzMTQwMCwzMTQwNSwzMTQxMSwzNDkxNiwzNDkyMSwzNDkzMCwzNDk0MSwzNDk0MywzNDk0NiwzNDk3OCwzNTAxNCwzNDk5OSwzNTAw''@;'; put 'put ''NCwzNTAxNywzNTA0MiwzNTAyMiwzNTA0MywzNTA0NSwzNTA1NywzNTA5OCwzNTA2OCwzNTA0OCwzNTA3MCwzNTA1NiwzNTEwNSwzNTA5NywzNTA5MSwzNTA5OSwzNTA4MiwzNTEyNCwzNTExNSwzNTEyNiwzNTEzNywzNTE3NCwzNTE5NSwzMDA5MSwzMjk5NywzMDM4NiwzMDM4OCwzMDY4NCwz''@;'; put 'put ''Mjc4NiwzMjc4OCwzMjc5MCwzMjc5NiwzMjgwMCwzMjgwMiwzMjgwNSwzMjgwNiwzMjgwNywzMjgwOSwzMjgwOCwzMjgxNywzMjc3OSwzMjgyMSwzMjgzNSwzMjgzOCwzMjg0NSwzMjg1MCwzMjg3MywzMjg4MSwzNTIwMywzOTAzMiwzOTA0MCwzOTA0MywzOTQxOCwzOTQxOSwzOTQyMCwzOTQy''@;'; put 'put ''MSwzOTQyMiwzOTQyMywzOTQyNCwzOTQyNSwzOTQyNiwzOTQyNywzOTQyOCwzOTQyOSwzOTQzMCwzOTQzMSwzOTQzMiwzOTQzMywzOTQzNCwzOTQzNSwzOTQzNiwzOTQzNywzOTQzOCwzOTQzOSwzOTQ0MCwzOTQ0MSwzOTQ0MiwzOTQ0MywzOTQ0NCwzOTQ0NSwzOTQ0NiwzOTQ0NywzOTQ0OCwz''@;'; put 'put ''OTQ0OSwzOTQ1MCwzOTQ1MSwzOTQ1MiwzOTQ1MywzOTQ1NCwzOTQ1NSwzOTQ1NiwzOTQ1NywzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MSwzOTQ2MiwzOTQ2MywzOTQ2NCwzOTQ2NSwzOTQ2NiwzOTQ2NywzOTQ2OCwzOTQ2OSwzOTQ3MCwzOTQ3MSwzOTQ3MiwzOTQ3MywzOTQ3NCwzOTQ3NSwzOTQ3''@;'; put 'put ''NiwzOTQ3NywzOTQ3OCwzOTQ3OSwzOTQ4MCwzOTQ4MSwzOTQ4MiwzOTQ4MywzOTQ4NCwzOTQ4NSwzOTQ4NiwzOTQ4NywzOTQ4OCwzOTQ4OSwzOTQ5MCwzOTQ5MSwzOTQ5MiwzOTQ5MywzOTQ5NCwzOTQ5NSwzOTQ5NiwzOTQ5NywzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMSwzOTUwMiwzOTUwMywz''@;'; put 'put ''OTUwNCwzOTUwNSwzOTUwNiwzOTUwNywzOTUwOCwzOTUwOSwzOTUxMCwzOTUxMSwzOTUxMiwzOTUxMywzOTA0OSwzOTA1MiwzOTA1MywzOTA1NSwzOTA2MCwzOTA2NiwzOTA2NywzOTA3MCwzOTA3MSwzOTA3MywzOTA3NCwzOTA3NywzOTA3OCwzNDM4MSwzNDM4OCwzNDQxMiwzNDQxNCwzNDQz''@;'; put 'put ''MSwzNDQyNiwzNDQyOCwzNDQyNywzNDQ3MiwzNDQ0NSwzNDQ0MywzNDQ3NiwzNDQ2MSwzNDQ3MSwzNDQ2NywzNDQ3NCwzNDQ1MSwzNDQ3MywzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUxMCwzNDQ4MCwzNDQ5MCwzNDQ4MSwzNDQ3OSwzNDUwNSwzNDUxMSwzNDQ4NCwzNDUzNywzNDU0NSwzNDU0Niwz''@;'; put 'put ''NDU0MSwzNDU0NywzNDUxMiwzNDU3OSwzNDUyNiwzNDU0OCwzNDUyNywzNDUyMCwzNDUxMywzNDU2MywzNDU2NywzNDU1MiwzNDU2OCwzNDU3MCwzNDU3MywzNDU2OSwzNDU5NSwzNDYxOSwzNDU5MCwzNDU5NywzNDYwNiwzNDU4NiwzNDYyMiwzNDYzMiwzNDYxMiwzNDYwOSwzNDYwMSwzNDYx''@;'; put 'put ''NSwzNDYyMywzNDY5MCwzNDU5NCwzNDY4NSwzNDY4NiwzNDY4MywzNDY1NiwzNDY3MiwzNDYzNiwzNDY3MCwzNDY5OSwzNDY0MywzNDY1OSwzNDY4NCwzNDY2MCwzNDY0OSwzNDY2MSwzNDcwNywzNDczNSwzNDcyOCwzNDc3MCwzOTUxNCwzOTUxNSwzOTUxNiwzOTUxNywzOTUxOCwzOTUxOSwz''@;'; put 'put ''OTUyMCwzOTUyMSwzOTUyMiwzOTUyMywzOTUyNCwzOTUyNSwzOTUyNiwzOTUyNywzOTUyOCwzOTUyOSwzOTUzMCwzOTUzMSwzOTUzOCwzOTU1NSwzOTU2MSwzOTU2NSwzOTU2NiwzOTU3MiwzOTU3MywzOTU3NywzOTU5MCwzOTU5MywzOTU5NCwzOTU5NSwzOTU5NiwzOTU5NywzOTU5OCwzOTU5''@;'; put 'put ''OSwzOTYwMiwzOTYwMywzOTYwNCwzOTYwNSwzOTYwOSwzOTYxMSwzOTYxMywzOTYxNCwzOTYxNSwzOTYxOSwzOTYyMCwzOTYyMiwzOTYyMywzOTYyNCwzOTYyNSwzOTYyNiwzOTYyOSwzOTYzMCwzOTYzMSwzOTYzMiwzOTYzNCwzOTYzNiwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MSwzOTY0Miwz''@;'; put 'put ''OTY0MywzOTY0NCwzOTY0NSwzOTY0NiwzOTY0OCwzOTY1MCwzOTY1MSwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NiwzOTY1NywzOTY1OCwzOTY2MCwzOTY2MiwzOTY2NCwzOTY2NSwzOTY2NiwzOTY2NywzOTY2OCwzOTY2OSwzOTY3MCwzOTY3MSwzOTY3MiwzOTY3NCwzOTY3NiwzOTY3NywzOTY3''@;'; put 'put ''OCwzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4NCwzOTY4NSwzOTY4NiwzNDc1OCwzNDY5NiwzNDY5MywzNDczMywzNDcxMSwzNDY5MSwzNDczMSwzNDc4OSwzNDczMiwzNDc0MSwzNDczOSwzNDc2MywzNDc3MSwzNDc0OSwzNDc2OSwzNDc1MiwzNDc2MiwzNDc3OSwzNDc5NCwzNDc4NCwz''@;'; put 'put ''NDc5OCwzNDgzOCwzNDgzNSwzNDgxNCwzNDgyNiwzNDg0MywzNDg0OSwzNDg3MywzNDg3NiwzMjU2NiwzMjU3OCwzMjU4MCwzMjU4MSwzMzI5NiwzMTQ4MiwzMTQ4NSwzMTQ5NiwzMTQ5MSwzMTQ5MiwzMTUwOSwzMTQ5OCwzMTUzMSwzMTUwMywzMTU1OSwzMTU0NCwzMTUzMCwzMTUxMywzMTUz''@;'; put 'put ''NCwzMTUzNywzMTUyMCwzMTUyNSwzMTUyNCwzMTUzOSwzMTU1MCwzMTUxOCwzMTU3NiwzMTU3OCwzMTU1NywzMTYwNSwzMTU2NCwzMTU4MSwzMTU4NCwzMTU5OCwzMTYxMSwzMTU4NiwzMTYwMiwzMTYwMSwzMTYzMiwzMTY1NCwzMTY1NSwzMTY3MiwzMTY2MCwzMTY0NSwzMTY1NiwzMTYyMSwz''@;'; put 'put ''MTY1OCwzMTY0NCwzMTY1MCwzMTY1OSwzMTY2OCwzMTY5NywzMTY4MSwzMTY5MiwzMTcwOSwzMTcwNiwzMTcxNywzMTcxOCwzMTcyMiwzMTc1NiwzMTc0MiwzMTc0MCwzMTc1OSwzMTc2NiwzMTc1NSwzOTY4NywzOTY4OSwzOTY5MCwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5''@;'; put 'put ''NywzOTY5OCwzOTcwMCwzOTcwMSwzOTcwMiwzOTcwMywzOTcwNCwzOTcwNSwzOTcwNiwzOTcwNywzOTcwOCwzOTcwOSwzOTcxMCwzOTcxMiwzOTcxMywzOTcxNCwzOTcxNiwzOTcxNywzOTcxOCwzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyMywzOTcyNCwzOTcyNSwzOTcyNiwzOTcyOCwz''@;'; put 'put ''OTcyOSwzOTczMSwzOTczMiwzOTczMywzOTczNCwzOTczNSwzOTczNiwzOTczNywzOTczOCwzOTc0MSwzOTc0MiwzOTc0MywzOTc0NCwzOTc1MCwzOTc1NCwzOTc1NSwzOTc1NiwzOTc1OCwzOTc2MCwzOTc2MiwzOTc2MywzOTc2NSwzOTc2NiwzOTc2NywzOTc2OCwzOTc2OSwzOTc3MCwzOTc3''@;'; put 'put ''MSwzOTc3MiwzOTc3MywzOTc3NCwzOTc3NSwzOTc3NiwzOTc3NywzOTc3OCwzOTc3OSwzOTc4MCwzOTc4MSwzOTc4MiwzOTc4MywzOTc4NCwzOTc4NSwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5MSwzOTc5MiwzOTc5MywzOTc5NCwzOTc5NSwzOTc5NiwzOTc5NywzOTc5OCwz''@;'; put 'put ''OTc5OSwzOTgwMCwzOTgwMSwzOTgwMiwzOTgwMywzMTc3NSwzMTc4NiwzMTc4MiwzMTgwMCwzMTgwOSwzMTgwOCwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NCwzMzI2MCwzNDg4NCwzMzMxMywzMzMxNCwzMzMxNSwzMzMyNSwzMzMyNywzMzMyMCwzMzMyMywzMzMzNiwzMzMzOSwzMzMzMSwzMzMz''@;'; put 'put ''MiwzMzM0MiwzMzM0OCwzMzM1MywzMzM1NSwzMzM1OSwzMzM3MCwzMzM3NSwzMzM4NCwzNDk0MiwzNDk0OSwzNDk1MiwzNTAzMiwzNTAzOSwzNTE2NiwzMjY2OSwzMjY3MSwzMjY3OSwzMjY4NywzMjY4OCwzMjY5MCwzMTg2OCwyNTkyOSwzMTg4OSwzMTkwMSwzMTkwMCwzMTkwMiwzMTkwNiwz''@;'; put 'put ''MTkyMiwzMTkzMiwzMTkzMywzMTkzNywzMTk0MywzMTk0OCwzMTk0OSwzMTk0NCwzMTk0MSwzMTk1OSwzMTk3NiwzMzM5MCwyNjI4MCwzMjcwMywzMjcxOCwzMjcyNSwzMjc0MSwzMjczNywzMjc0MiwzMjc0NSwzMjc1MCwzMjc1NSwzMTk5MiwzMjExOSwzMjE2NiwzMjE3NCwzMjMyNywzMjQx''@;'; put 'put ''MSw0MDYzMiw0MDYyOCwzNjIxMSwzNjIyOCwzNjI0NCwzNjI0MSwzNjI3MywzNjE5OSwzNjIwNSwzNTkxMSwzNTkxMywzNzE5NCwzNzIwMCwzNzE5OCwzNzE5OSwzNzIyMCwzOTgwNCwzOTgwNSwzOTgwNiwzOTgwNywzOTgwOCwzOTgwOSwzOTgxMCwzOTgxMSwzOTgxMiwzOTgxMywzOTgxNCwz''@;'; put 'put ''OTgxNSwzOTgxNiwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMCwzOTgyMSwzOTgyMiwzOTgyMywzOTgyNCwzOTgyNSwzOTgyNiwzOTgyNywzOTgyOCwzOTgyOSwzOTgzMCwzOTgzMSwzOTgzMiwzOTgzMywzOTgzNCwzOTgzNSwzOTgzNiwzOTgzNywzOTgzOCwzOTgzOSwzOTg0MCwzOTg0MSwzOTg0''@;'; put 'put ''MiwzOTg0MywzOTg0NCwzOTg0NSwzOTg0NiwzOTg0NywzOTg0OCwzOTg0OSwzOTg1MCwzOTg1MSwzOTg1MiwzOTg1MywzOTg1NCwzOTg1NSwzOTg1NiwzOTg1NywzOTg1OCwzOTg1OSwzOTg2MCwzOTg2MSwzOTg2MiwzOTg2MywzOTg2NCwzOTg2NSwzOTg2NiwzOTg2NywzOTg2OCwzOTg2OSwz''@;'; put 'put ''OTg3MCwzOTg3MSwzOTg3MiwzOTg3MywzOTg3NCwzOTg3NSwzOTg3NiwzOTg3NywzOTg3OCwzOTg3OSwzOTg4MCwzOTg4MSwzOTg4MiwzOTg4MywzOTg4NCwzOTg4NSwzOTg4NiwzOTg4NywzOTg4OCwzOTg4OSwzOTg5MCwzOTg5MSwzOTg5MiwzOTg5MywzOTg5NCwzOTg5NSwzOTg5NiwzOTg5''@;'; put 'put ''NywzOTg5OCwzOTg5OSwzNzIxOCwzNzIxNywzNzIzMiwzNzIyNSwzNzIzMSwzNzI0NSwzNzI0NiwzNzIzNCwzNzIzNiwzNzI0MSwzNzI2MCwzNzI1MywzNzI2NCwzNzI2MSwzNzI2NSwzNzI4MiwzNzI4MywzNzI5MCwzNzI5MywzNzI5NCwzNzI5NSwzNzMwMSwzNzMwMCwzNzMwNiwzNTkyNSw0''@;'; put 'put ''MDU3NCwzNjI4MCwzNjMzMSwzNjM1NywzNjQ0MSwzNjQ1NywzNjI3NywzNjI4NywzNjI4NCwzNjI4MiwzNjI5MiwzNjMxMCwzNjMxMSwzNjMxNCwzNjMxOCwzNjMwMiwzNjMwMywzNjMxNSwzNjI5NCwzNjMzMiwzNjM0MywzNjM0NCwzNjMyMywzNjM0NSwzNjM0NywzNjMyNCwzNjM2MSwzNjM0''@;'; put 'put ''OSwzNjM3MiwzNjM4MSwzNjM4MywzNjM5NiwzNjM5OCwzNjM4NywzNjM5OSwzNjQxMCwzNjQxNiwzNjQwOSwzNjQwNSwzNjQxMywzNjQwMSwzNjQyNSwzNjQxNywzNjQxOCwzNjQzMywzNjQzNCwzNjQyNiwzNjQ2NCwzNjQ3MCwzNjQ3NiwzNjQ2MywzNjQ2OCwzNjQ4NSwzNjQ5NSwzNjUwMCwz''@;'; put 'put ''NjQ5NiwzNjUwOCwzNjUxMCwzNTk2MCwzNTk3MCwzNTk3OCwzNTk3MywzNTk5MiwzNTk4OCwyNjAxMSwzNTI4NiwzNTI5NCwzNTI5MCwzNTI5MiwzOTkwMCwzOTkwMSwzOTkwMiwzOTkwMywzOTkwNCwzOTkwNSwzOTkwNiwzOTkwNywzOTkwOCwzOTkwOSwzOTkxMCwzOTkxMSwzOTkxMiwzOTkx''@;'; put 'put ''MywzOTkxNCwzOTkxNSwzOTkxNiwzOTkxNywzOTkxOCwzOTkxOSwzOTkyMCwzOTkyMSwzOTkyMiwzOTkyMywzOTkyNCwzOTkyNSwzOTkyNiwzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMSwzOTkzMiwzOTkzMywzOTkzNCwzOTkzNSwzOTkzNiwzOTkzNywzOTkzOCwzOTkzOSwzOTk0MCwz''@;'; put 'put ''OTk0MSwzOTk0MiwzOTk0MywzOTk0NCwzOTk0NSwzOTk0NiwzOTk0NywzOTk0OCwzOTk0OSwzOTk1MCwzOTk1MSwzOTk1MiwzOTk1MywzOTk1NCwzOTk1NSwzOTk1NiwzOTk1NywzOTk1OCwzOTk1OSwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2MywzOTk2NCwzOTk2NSwzOTk2NiwzOTk2NywzOTk2''@;'; put 'put ''OCwzOTk2OSwzOTk3MCwzOTk3MSwzOTk3MiwzOTk3MywzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk3OSwzOTk4MCwzOTk4MSwzOTk4MiwzOTk4MywzOTk4NCwzOTk4NSwzOTk4NiwzOTk4NywzOTk4OCwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5MiwzOTk5MywzOTk5NCwzOTk5NSwz''@;'; put 'put ''NTMwMSwzNTMwNywzNTMxMSwzNTM5MCwzNTYyMiwzODczOSwzODYzMywzODY0MywzODYzOSwzODY2MiwzODY1NywzODY2NCwzODY3MSwzODY3MCwzODY5OCwzODcwMSwzODcwNCwzODcxOCw0MDgzMiw0MDgzNSw0MDgzNyw0MDgzOCw0MDgzOSw0MDg0MCw0MDg0MSw0MDg0Miw0MDg0NCw0MDcw''@;'; put 'put ''Miw0MDcxNSw0MDcxNywzODU4NSwzODU4OCwzODU4OSwzODYwNiwzODYxMCwzMDY1NSwzODYyNCwzNzUxOCwzNzU1MCwzNzU3NiwzNzY5NCwzNzczOCwzNzgzNCwzNzc3NSwzNzk1MCwzNzk5NSw0MDA2Myw0MDA2Niw0MDA2OSw0MDA3MCw0MDA3MSw0MDA3MiwzMTI2Nyw0MDA3NSw0MDA3OCw0''@;'; put 'put ''MDA4MCw0MDA4MSw0MDA4Miw0MDA4NCw0MDA4NSw0MDA5MCw0MDA5MSw0MDA5NCw0MDA5NSw0MDA5Niw0MDA5Nyw0MDA5OCw0MDA5OSw0MDEwMSw0MDEwMiw0MDEwMyw0MDEwNCw0MDEwNSw0MDEwNyw0MDEwOSw0MDExMCw0MDExMiw0MDExMyw0MDExNCw0MDExNSw0MDExNiw0MDExNyw0MDEx''@;'; put 'put ''OCw0MDExOSw0MDEyMiw0MDEyMyw0MDEyNCw0MDEyNSw0MDEzMiw0MDEzMyw0MDEzNCw0MDEzNSw0MDEzOCw0MDEzOSwzOTk5NiwzOTk5NywzOTk5OCwzOTk5OSw0ZTQsNDAwMDEsNDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAw''@;'; put 'put ''MTIsNDAwMTMsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAwMjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMsNDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzks''@;'; put 'put ''NDAwNDAsNDAwNDEsNDAwNDIsNDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcsNDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYsNDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAwNjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAw''@;'; put 'put ''NzYsNDAwNzksNDAwODMsNDAwODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAxMDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAxMzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQsNDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIs''@;'; put 'put ''NDAxNDMsNDAxNDQsNDAxNDcsNDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMsNDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQsMzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2''@;'; put 'put ''MTAsMzk2MTIsMzk2MTcsMzk2MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkxODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcsMzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEs''@;'; put 'put ''Mzk2NzMsMzk2ODgsMzk2OTUsMzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2MzgsMzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcsNDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2''@;'; put 'put ''ODcsNDA3MzgsNDA3NDgsNDA3NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAxNzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUsNDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEs''@;'; put 'put ''NDAxODIsNDAxODMsNDAxODQsNDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODksNDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgsNDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAyMDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAy''@;'; put 'put ''MDksNDAyMTAsNDAyMTEsNDAyMTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAyMTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAyMjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAsNDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYs''@;'; put 'put ''NDAyMzcsNDAyMzgsNDAyMzksNDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMsNDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAyNTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5''@;'; put 'put ''MTMsNTc5MTQsNTc5MTUsNTc5MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQsNTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAs''@;'; put 'put ''NTc5NDEsNTc5NDIsNTc5NDMsNTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgsNTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcsNTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5''@;'; put 'put ''NjgsNTc5NjksNTc5NzAsNTc5NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODksNTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUs''@;'; put 'put ''NTc5OTYsNTc5OTcsNTc5OTgsNTc5OTksNThlMyw1ODAwMSw0MDI1OSw0MDI2MCw0MDI2MSw0MDI2Miw0MDI2Myw0MDI2NCw0MDI2NSw0MDI2Niw0MDI2Nyw0MDI2OCw0MDI2OSw0MDI3MCw0MDI3MSw0MDI3Miw0MDI3Myw0MDI3NCw0MDI3NSw0MDI3Niw0MDI3Nyw0MDI3OCw0MDI3OSw0MDI4''@;'; put 'put ''MCw0MDI4MSw0MDI4Miw0MDI4Myw0MDI4NCw0MDI4NSw0MDI4Niw0MDI4Nyw0MDI4OCw0MDI4OSw0MDI5MCw0MDI5MSw0MDI5Miw0MDI5Myw0MDI5NCw0MDI5NSw0MDI5Niw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwMCw0MDMwMSw0MDMwMiw0MDMwMyw0MDMwNCw0MDMwNSw0MDMwNiw0MDMwNyw0''@;'; put 'put ''MDMwOCw0MDMwOSw0MDMxMCw0MDMxMSw0MDMxMiw0MDMxMyw0MDMxNCw0MDMxNSw0MDMxNiw0MDMxNyw0MDMxOCw0MDMxOSw0MDMyMCw0MDMyMSw0MDMyMiw0MDMyMyw0MDMyNCw0MDMyNSw0MDMyNiw0MDMyNyw0MDMyOCw0MDMyOSw0MDMzMCw0MDMzMSw0MDMzMiw0MDMzMyw0MDMzNCw0MDMz''@;'; put 'put ''NSw0MDMzNiw0MDMzNyw0MDMzOCw0MDMzOSw0MDM0MCw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM0NSw0MDM0Niw0MDM0Nyw0MDM0OCw0MDM0OSw0MDM1MCw0MDM1MSw0MDM1Miw0MDM1Myw0MDM1NCw1ODAwMiw1ODAwMyw1ODAwNCw1ODAwNSw1ODAwNiw1ODAwNyw1ODAwOCw1ODAwOSw1''@;'; put 'put ''ODAxMCw1ODAxMSw1ODAxMiw1ODAxMyw1ODAxNCw1ODAxNSw1ODAxNiw1ODAxNyw1ODAxOCw1ODAxOSw1ODAyMCw1ODAyMSw1ODAyMiw1ODAyMyw1ODAyNCw1ODAyNSw1ODAyNiw1ODAyNyw1ODAyOCw1ODAyOSw1ODAzMCw1ODAzMSw1ODAzMiw1ODAzMyw1ODAzNCw1ODAzNSw1ODAzNiw1ODAz''@;'; put 'put ''Nyw1ODAzOCw1ODAzOSw1ODA0MCw1ODA0MSw1ODA0Miw1ODA0Myw1ODA0NCw1ODA0NSw1ODA0Niw1ODA0Nyw1ODA0OCw1ODA0OSw1ODA1MCw1ODA1MSw1ODA1Miw1ODA1Myw1ODA1NCw1ODA1NSw1ODA1Niw1ODA1Nyw1ODA1OCw1ODA1OSw1ODA2MCw1ODA2MSw1ODA2Miw1ODA2Myw1ODA2NCw1''@;'; put 'put ''ODA2NSw1ODA2Niw1ODA2Nyw1ODA2OCw1ODA2OSw1ODA3MCw1ODA3MSw1ODA3Miw1ODA3Myw1ODA3NCw1ODA3NSw1ODA3Niw1ODA3Nyw1ODA3OCw1ODA3OSw1ODA4MCw1ODA4MSw1ODA4Miw1ODA4Myw1ODA4NCw1ODA4NSw1ODA4Niw1ODA4Nyw1ODA4OCw1ODA4OSw1ODA5MCw1ODA5MSw1ODA5''@;'; put 'put ''Miw1ODA5Myw1ODA5NCw1ODA5NSw0MDM1NSw0MDM1Niw0MDM1Nyw0MDM1OCw0MDM1OSw0MDM2MCw0MDM2MSw0MDM2Miw0MDM2Myw0MDM2NCw0MDM2NSw0MDM2Niw0MDM2Nyw0MDM2OCw0MDM2OSw0MDM3MCw0MDM3MSw0MDM3Miw0MDM3Myw0MDM3NCw0MDM3NSw0MDM3Niw0MDM3Nyw0MDM3OCw0''@;'; put 'put ''MDM3OSw0MDM4MCw0MDM4MSw0MDM4Miw0MDM4Myw0MDM4NCw0MDM4NSw0MDM4Niw0MDM4Nyw0MDM4OCw0MDM4OSw0MDM5MCw0MDM5MSw0MDM5Miw0MDM5Myw0MDM5NCw0MDM5NSw0MDM5Niw0MDM5Nyw0MDM5OCw0MDM5OSw0MDQwMCw0MDQwMSw0MDQwMiw0MDQwMyw0MDQwNCw0MDQwNSw0MDQw''@;'; put 'put ''Niw0MDQwNyw0MDQwOCw0MDQwOSw0MDQxMCw0MDQxMSw0MDQxMiw0MDQxMyw0MDQxNCw0MDQxNSw0MDQxNiw0MDQxNyw0MDQxOCw0MDQxOSw0MDQyMCw0MDQyMSw0MDQyMiw0MDQyMyw0MDQyNCw0MDQyNSw0MDQyNiw0MDQyNyw0MDQyOCw0MDQyOSw0MDQzMCw0MDQzMSw0MDQzMiw0MDQzMyw0''@;'; put 'put ''MDQzNCw0MDQzNSw0MDQzNiw0MDQzNyw0MDQzOCw0MDQzOSw0MDQ0MCw0MDQ0MSw0MDQ0Miw0MDQ0Myw0MDQ0NCw0MDQ0NSw0MDQ0Niw0MDQ0Nyw0MDQ0OCw0MDQ0OSw0MDQ1MCw1ODA5Niw1ODA5Nyw1ODA5OCw1ODA5OSw1ODEwMCw1ODEwMSw1ODEwMiw1ODEwMyw1ODEwNCw1ODEwNSw1ODEw''@;'; put 'put ''Niw1ODEwNyw1ODEwOCw1ODEwOSw1ODExMCw1ODExMSw1ODExMiw1ODExMyw1ODExNCw1ODExNSw1ODExNiw1ODExNyw1ODExOCw1ODExOSw1ODEyMCw1ODEyMSw1ODEyMiw1ODEyMyw1ODEyNCw1ODEyNSw1ODEyNiw1ODEyNyw1ODEyOCw1ODEyOSw1ODEzMCw1ODEzMSw1ODEzMiw1ODEzMyw1''@;'; put 'put ''ODEzNCw1ODEzNSw1ODEzNiw1ODEzNyw1ODEzOCw1ODEzOSw1ODE0MCw1ODE0MSw1ODE0Miw1ODE0Myw1ODE0NCw1ODE0NSw1ODE0Niw1ODE0Nyw1ODE0OCw1ODE0OSw1ODE1MCw1ODE1MSw1ODE1Miw1ODE1Myw1ODE1NCw1ODE1NSw1ODE1Niw1ODE1Nyw1ODE1OCw1ODE1OSw1ODE2MCw1ODE2''@;'; put 'put ''MSw1ODE2Miw1ODE2Myw1ODE2NCw1ODE2NSw1ODE2Niw1ODE2Nyw1ODE2OCw1ODE2OSw1ODE3MCw1ODE3MSw1ODE3Miw1ODE3Myw1ODE3NCw1ODE3NSw1ODE3Niw1ODE3Nyw1ODE3OCw1ODE3OSw1ODE4MCw1ODE4MSw1ODE4Miw1ODE4Myw1ODE4NCw1ODE4NSw1ODE4Niw1ODE4Nyw1ODE4OCw1''@;'; put 'put ''ODE4OSw0MDQ1MSw0MDQ1Miw0MDQ1Myw0MDQ1NCw0MDQ1NSw0MDQ1Niw0MDQ1Nyw0MDQ1OCw0MDQ1OSw0MDQ2MCw0MDQ2MSw0MDQ2Miw0MDQ2Myw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2Nyw0MDQ2OCw0MDQ2OSw0MDQ3MCw0MDQ3MSw0MDQ3Miw0MDQ3Myw0MDQ3NCw0MDQ3NSw0MDQ3Niw0MDQ3''@;'; put 'put ''Nyw0MDQ3OCw0MDQ4NCw0MDQ4Nyw0MDQ5NCw0MDQ5Niw0MDUwMCw0MDUwNyw0MDUwOCw0MDUxMiw0MDUyNSw0MDUyOCw0MDUzMCw0MDUzMSw0MDUzMiw0MDUzNCw0MDUzNyw0MDU0MSw0MDU0Myw0MDU0NCw0MDU0NSw0MDU0Niw0MDU0OSw0MDU1OCw0MDU1OSw0MDU2Miw0MDU2NCw0MDU2NSw0''@;'; put 'put ''MDU2Niw0MDU2Nyw0MDU2OCw0MDU2OSw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Myw0MDU3Niw0MDU3Nyw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Miw0MDU4NSw0MDU4Niw0MDU4OCw0MDU4OSw0MDU5MCw0MDU5MSw0MDU5Miw0MDU5Myw0MDU5Niw0MDU5Nyw0MDU5OCw0MDU5OSw0MDYwMCw0MDYw''@;'; put 'put ''MSw0MDYwMiw0MDYwMyw0MDYwNCw0MDYwNiw0MDYwOCw0MDYwOSw0MDYxMCw0MDYxMSw0MDYxMiw0MDYxMyw0MDYxNSw0MDYxNiw0MDYxNyw0MDYxOCw1ODE5MCw1ODE5MSw1ODE5Miw1ODE5Myw1ODE5NCw1ODE5NSw1ODE5Niw1ODE5Nyw1ODE5OCw1ODE5OSw1ODIwMCw1ODIwMSw1ODIwMiw1''@;'; put 'put ''ODIwMyw1ODIwNCw1ODIwNSw1ODIwNiw1ODIwNyw1ODIwOCw1ODIwOSw1ODIxMCw1ODIxMSw1ODIxMiw1ODIxMyw1ODIxNCw1ODIxNSw1ODIxNiw1ODIxNyw1ODIxOCw1ODIxOSw1ODIyMCw1ODIyMSw1ODIyMiw1ODIyMyw1ODIyNCw1ODIyNSw1ODIyNiw1ODIyNyw1ODIyOCw1ODIyOSw1ODIz''@;'; put 'put ''MCw1ODIzMSw1ODIzMiw1ODIzMyw1ODIzNCw1ODIzNSw1ODIzNiw1ODIzNyw1ODIzOCw1ODIzOSw1ODI0MCw1ODI0MSw1ODI0Miw1ODI0Myw1ODI0NCw1ODI0NSw1ODI0Niw1ODI0Nyw1ODI0OCw1ODI0OSw1ODI1MCw1ODI1MSw1ODI1Miw1ODI1Myw1ODI1NCw1ODI1NSw1ODI1Niw1ODI1Nyw1''@;'; put 'put ''ODI1OCw1ODI1OSw1ODI2MCw1ODI2MSw1ODI2Miw1ODI2Myw1ODI2NCw1ODI2NSw1ODI2Niw1ODI2Nyw1ODI2OCw1ODI2OSw1ODI3MCw1ODI3MSw1ODI3Miw1ODI3Myw1ODI3NCw1ODI3NSw1ODI3Niw1ODI3Nyw1ODI3OCw1ODI3OSw1ODI4MCw1ODI4MSw1ODI4Miw1ODI4Myw0MDYxOSw0MDYy''@;'; put 'put ''MCw0MDYyMSw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNSw0MDYyNiw0MDYyNyw0MDYyOSw0MDYzMCw0MDYzMSw0MDYzMyw0MDYzNCw0MDYzNiw0MDYzOSw0MDY0MCw0MDY0MSw0MDY0Miw0MDY0Myw0MDY0NSw0MDY0Niw0MDY0Nyw0MDY0OCw0MDY1MCw0MDY1MSw0MDY1Miw0MDY1Niw0MDY1OCw0''@;'; put 'put ''MDY1OSw0MDY2MSw0MDY2Miw0MDY2Myw0MDY2NSw0MDY2Niw0MDY3MCw0MDY3Myw0MDY3NSw0MDY3Niw0MDY3OCw0MDY4MCw0MDY4Myw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5MSw0MDY5Miw0MDY5Myw0MDY5NCw0MDY5NSw0MDY5Niw0MDY5OCw0MDcwMSw0MDcw''@;'; put 'put ''Myw0MDcwNCw0MDcwNSw0MDcwNiw0MDcwNyw0MDcwOCw0MDcwOSw0MDcxMCw0MDcxMSw0MDcxMiw0MDcxMyw0MDcxNCw0MDcxNiw0MDcxOSw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNSw0MDcyNiw0MDcyOCw0MDczMCw0MDczMSw0MDczMiw0MDczMyw0MDczNCw0MDczNSw0MDczNyw0MDczOSw0''@;'; put 'put ''MDc0MCw0MDc0MSw0MDc0Miw0MDc0Myw0MDc0NCw0MDc0NSw0MDc0Niw0MDc0Nyw0MDc0OSw0MDc1MCw0MDc1Miw0MDc1Myw1ODI4NCw1ODI4NSw1ODI4Niw1ODI4Nyw1ODI4OCw1ODI4OSw1ODI5MCw1ODI5MSw1ODI5Miw1ODI5Myw1ODI5NCw1ODI5NSw1ODI5Niw1ODI5Nyw1ODI5OCw1ODI5''@;'; put 'put ''OSw1ODMwMCw1ODMwMSw1ODMwMiw1ODMwMyw1ODMwNCw1ODMwNSw1ODMwNiw1ODMwNyw1ODMwOCw1ODMwOSw1ODMxMCw1ODMxMSw1ODMxMiw1ODMxMyw1ODMxNCw1ODMxNSw1ODMxNiw1ODMxNyw1ODMxOCw1ODMxOSw1ODMyMCw1ODMyMSw1ODMyMiw1ODMyMyw1ODMyNCw1ODMyNSw1ODMyNiw1''@;'; put 'put ''ODMyNyw1ODMyOCw1ODMyOSw1ODMzMCw1ODMzMSw1ODMzMiw1ODMzMyw1ODMzNCw1ODMzNSw1ODMzNiw1ODMzNyw1ODMzOCw1ODMzOSw1ODM0MCw1ODM0MSw1ODM0Miw1ODM0Myw1ODM0NCw1ODM0NSw1ODM0Niw1ODM0Nyw1ODM0OCw1ODM0OSw1ODM1MCw1ODM1MSw1ODM1Miw1ODM1Myw1ODM1''@;'; put 'put ''NCw1ODM1NSw1ODM1Niw1ODM1Nyw1ODM1OCw1ODM1OSw1ODM2MCw1ODM2MSw1ODM2Miw1ODM2Myw1ODM2NCw1ODM2NSw1ODM2Niw1ODM2Nyw1ODM2OCw1ODM2OSw1ODM3MCw1ODM3MSw1ODM3Miw1ODM3Myw1ODM3NCw1ODM3NSw1ODM3Niw1ODM3Nyw0MDc1NCw0MDc1NSw0MDc1Niw0MDc1Nyw0''@;'; put 'put ''MDc1OCw0MDc2MCw0MDc2Miw0MDc2NCw0MDc2Nyw0MDc2OCw0MDc2OSw0MDc3MCw0MDc3MSw0MDc3Myw0MDc3NCw0MDc3NSw0MDc3Niw0MDc3Nyw0MDc3OCw0MDc3OSw0MDc4MCw0MDc4MSw0MDc4Miw0MDc4Myw0MDc4Niw0MDc4Nyw0MDc4OCw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5''@;'; put 'put ''Myw0MDc5NCw0MDc5NSw0MDc5Niw0MDc5Nyw0MDc5OCw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwMiw0MDgwMyw0MDgwNCw0MDgwNSw0MDgwNiw0MDgwNyw0MDgwOCw0MDgwOSw0MDgxMCw0MDgxMSw0MDgxMiw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOCw0MDgxOSw0MDgyMCw0''@;'; put 'put ''MDgyMSw0MDgyMiw0MDgyMyw0MDgyNCw0MDgyNSw0MDgyNiw0MDgyNyw0MDgyOCw0MDgyOSw0MDgzMCw0MDgzMyw0MDgzNCw0MDg0NSw0MDg0Niw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1MSw0MDg1Miw0MDg1Myw0MDg1NCw0MDg1NSw0MDg1Niw0MDg2MCw0MDg2MSw0MDg2Miw0MDg2''@;'; put 'put ''NSw0MDg2Niw0MDg2Nyw0MDg2OCw0MDg2OSw2Mzc4OCw2Mzg2NSw2Mzg5Myw2Mzk3NSw2Mzk4NSw1ODM3OCw1ODM3OSw1ODM4MCw1ODM4MSw1ODM4Miw1ODM4Myw1ODM4NCw1ODM4NSw1ODM4Niw1ODM4Nyw1ODM4OCw1ODM4OSw1ODM5MCw1ODM5MSw1ODM5Miw1ODM5Myw1ODM5NCw1ODM5NSw1''@;'; put 'put ''ODM5Niw1ODM5Nyw1ODM5OCw1ODM5OSw1ODQwMCw1ODQwMSw1ODQwMiw1ODQwMyw1ODQwNCw1ODQwNSw1ODQwNiw1ODQwNyw1ODQwOCw1ODQwOSw1ODQxMCw1ODQxMSw1ODQxMiw1ODQxMyw1ODQxNCw1ODQxNSw1ODQxNiw1ODQxNyw1ODQxOCw1ODQxOSw1ODQyMCw1ODQyMSw1ODQyMiw1ODQy''@;'; put 'put ''Myw1ODQyNCw1ODQyNSw1ODQyNiw1ODQyNyw1ODQyOCw1ODQyOSw1ODQzMCw1ODQzMSw1ODQzMiw1ODQzMyw1ODQzNCw1ODQzNSw1ODQzNiw1ODQzNyw1ODQzOCw1ODQzOSw1ODQ0MCw1ODQ0MSw1ODQ0Miw1ODQ0Myw1ODQ0NCw1ODQ0NSw1ODQ0Niw1ODQ0Nyw1ODQ0OCw1ODQ0OSw1ODQ1MCw1''@;'; put 'put ''ODQ1MSw1ODQ1Miw1ODQ1Myw1ODQ1NCw1ODQ1NSw1ODQ1Niw1ODQ1Nyw1ODQ1OCw1ODQ1OSw1ODQ2MCw1ODQ2MSw1ODQ2Miw1ODQ2Myw1ODQ2NCw1ODQ2NSw1ODQ2Niw1ODQ2Nyw1ODQ2OCw1ODQ2OSw1ODQ3MCw1ODQ3MSw2NDAxMiw2NDAxMyw2NDAxNCw2NDAxNSw2NDAxNyw2NDAxOSw2NDAy''@;'; put 'put ''MCw2NDAyNCw2NDAzMSw2NDAzMiw2NDAzMyw2NDAzNSw2NDAzNiw2NDAzOSw2NDA0MCw2NDA0MSwxMTkwNSw1OTQxNCw1OTQxNSw1OTQxNiwxMTkwOCwxMzQyNywxMzM4MywxMTkxMiwxMTkxNSw1OTQyMiwxMzcyNiwxMzg1MCwxMzgzOCwxMTkxNiwxMTkyNywxNDcwMiwxNDYxNiw1OTQzMCwx''@;'; put 'put ''NDc5OSwxNDgxNSwxNDk2MywxNDgwMCw1OTQzNSw1OTQzNiwxNTE4MiwxNTQ3MCwxNTU4NCwxMTk0Myw1OTQ0MSw1OTQ0MiwxMTk0NiwxNjQ3MCwxNjczNSwxMTk1MCwxNzIwNywxMTk1NSwxMTk1OCwxMTk1OSw1OTQ1MSwxNzMyOSwxNzMyNCwxMTk2MywxNzM3MywxNzYyMiwxODAxNywxNzk5''@;'; put 'put ''Niw1OTQ1OSwxODIxMSwxODIxNywxODMwMCwxODMxNywxMTk3OCwxODc1OSwxODgxMCwxODgxMywxODgxOCwxODgxOSwxODgyMSwxODgyMiwxODg0NywxODg0MywxODg3MSwxODg3MCw1OTQ3Niw1OTQ3NywxOTYxOSwxOTYxNSwxOTYxNiwxOTYxNywxOTU3NSwxOTYxOCwxOTczMSwxOTczMiwx''@;'; put 'put ''OTczMywxOTczNCwxOTczNSwxOTczNiwxOTczNywxOTg4Niw1OTQ5Miw1ODQ3Miw1ODQ3Myw1ODQ3NCw1ODQ3NSw1ODQ3Niw1ODQ3Nyw1ODQ3OCw1ODQ3OSw1ODQ4MCw1ODQ4MSw1ODQ4Miw1ODQ4Myw1ODQ4NCw1ODQ4NSw1ODQ4Niw1ODQ4Nyw1ODQ4OCw1ODQ4OSw1ODQ5MCw1ODQ5MSw1ODQ5''@;'; put 'put ''Miw1ODQ5Myw1ODQ5NCw1ODQ5NSw1ODQ5Niw1ODQ5Nyw1ODQ5OCw1ODQ5OSw1ODUwMCw1ODUwMSw1ODUwMiw1ODUwMyw1ODUwNCw1ODUwNSw1ODUwNiw1ODUwNyw1ODUwOCw1ODUwOSw1ODUxMCw1ODUxMSw1ODUxMiw1ODUxMyw1ODUxNCw1ODUxNSw1ODUxNiw1ODUxNyw1ODUxOCw1ODUxOSw1''@;'; put 'put ''ODUyMCw1ODUyMSw1ODUyMiw1ODUyMyw1ODUyNCw1ODUyNSw1ODUyNiw1ODUyNyw1ODUyOCw1ODUyOSw1ODUzMCw1ODUzMSw1ODUzMiw1ODUzMyw1ODUzNCw1ODUzNSw1ODUzNiw1ODUzNyw1ODUzOCw1ODUzOSw1ODU0MCw1ODU0MSw1ODU0Miw1ODU0Myw1ODU0NCw1ODU0NSw1ODU0Niw1ODU0''@;'; put 'put ''Nyw1ODU0OCw1ODU0OSw1ODU1MCw1ODU1MSw1ODU1Miw1ODU1Myw1ODU1NCw1ODU1NSw1ODU1Niw1ODU1Nyw1ODU1OCw1ODU1OSw1ODU2MCw1ODU2MSw1ODU2Miw1ODU2Myw1ODU2NCw1ODU2NV0sImdiMTgwMzAtcmFuZ2VzIjpbWzAsMTI4XSxbMzYsMTY1XSxbMzgsMTY5XSxbNDUsMTc4XSxb''@;'; put 'put ''NTAsMTg0XSxbODEsMjE2XSxbODksMjI2XSxbOTUsMjM1XSxbOTYsMjM4XSxbMTAwLDI0NF0sWzEwMywyNDhdLFsxMDQsMjUxXSxbMTA1LDI1M10sWzEwOSwyNThdLFsxMjYsMjc2XSxbMTMzLDI4NF0sWzE0OCwzMDBdLFsxNzIsMzI1XSxbMTc1LDMyOV0sWzE3OSwzMzRdLFsyMDgsMzY0XSxb''@;'; put 'put ''MzA2LDQ2M10sWzMwNyw0NjVdLFszMDgsNDY3XSxbMzA5LDQ2OV0sWzMxMCw0NzFdLFszMTEsNDczXSxbMzEyLDQ3NV0sWzMxMyw0NzddLFszNDEsNTA2XSxbNDI4LDU5NF0sWzQ0Myw2MTBdLFs1NDQsNzEyXSxbNTQ1LDcxNl0sWzU1OCw3MzBdLFs3NDEsOTMwXSxbNzQyLDkzOF0sWzc0OSw5''@;'; put 'put ''NjJdLFs3NTAsOTcwXSxbODA1LDEwMjZdLFs4MTksMTEwNF0sWzgyMCwxMTA2XSxbNzkyMiw4MjA5XSxbNzkyNCw4MjE1XSxbNzkyNSw4MjE4XSxbNzkyNyw4MjIyXSxbNzkzNCw4MjMxXSxbNzk0Myw4MjQxXSxbNzk0NCw4MjQ0XSxbNzk0NSw4MjQ2XSxbNzk1MCw4MjUyXSxbODA2Miw4MzY1''@;'; put 'put ''XSxbODE0OCw4NDUyXSxbODE0OSw4NDU0XSxbODE1Miw4NDU4XSxbODE2NCw4NDcxXSxbODE3NCw4NDgyXSxbODIzNiw4NTU2XSxbODI0MCw4NTcwXSxbODI2Miw4NTk2XSxbODI2NCw4NjAyXSxbODM3NCw4NzEzXSxbODM4MCw4NzIwXSxbODM4MSw4NzIyXSxbODM4NCw4NzI2XSxbODM4OCw4''@;'; put 'put ''NzMxXSxbODM5MCw4NzM3XSxbODM5Miw4NzQwXSxbODM5Myw4NzQyXSxbODM5NCw4NzQ4XSxbODM5Niw4NzUxXSxbODQwMSw4NzYwXSxbODQwNiw4NzY2XSxbODQxNiw4Nzc3XSxbODQxOSw4NzgxXSxbODQyNCw4Nzg3XSxbODQzNyw4ODAyXSxbODQzOSw4ODA4XSxbODQ0NSw4ODE2XSxbODQ4''@;'; put 'put ''Miw4ODU0XSxbODQ4NSw4ODU4XSxbODQ5Niw4ODcwXSxbODUyMSw4ODk2XSxbODYwMyw4OTc5XSxbODkzNiw5MzIyXSxbODk0Niw5MzcyXSxbOTA0Niw5NTQ4XSxbOTA1MCw5NTg4XSxbOTA2Myw5NjE2XSxbOTA2Niw5NjIyXSxbOTA3Niw5NjM0XSxbOTA5Miw5NjUyXSxbOTEwMCw5NjYyXSxb''@;'; put 'put ''OTEwOCw5NjcyXSxbOTExMSw5Njc2XSxbOTExMyw5NjgwXSxbOTEzMSw5NzAyXSxbOTE2Miw5NzM1XSxbOTE2NCw5NzM4XSxbOTIxOCw5NzkzXSxbOTIxOSw5Nzk1XSxbMTEzMjksMTE5MDZdLFsxMTMzMSwxMTkwOV0sWzExMzM0LDExOTEzXSxbMTEzMzYsMTE5MTddLFsxMTM0NiwxMTkyOF0s''@;'; put 'put ''WzExMzYxLDExOTQ0XSxbMTEzNjMsMTE5NDddLFsxMTM2NiwxMTk1MV0sWzExMzcwLDExOTU2XSxbMTEzNzIsMTE5NjBdLFsxMTM3NSwxMTk2NF0sWzExMzg5LDExOTc5XSxbMTE2ODIsMTIyODRdLFsxMTY4NiwxMjI5Ml0sWzExNjg3LDEyMzEyXSxbMTE2OTIsMTIzMTldLFsxMTY5NCwxMjMz''@;'; put 'put ''MF0sWzExNzE0LDEyMzUxXSxbMTE3MTYsMTI0MzZdLFsxMTcyMywxMjQ0N10sWzExNzI1LDEyNTM1XSxbMTE3MzAsMTI1NDNdLFsxMTczNiwxMjU4Nl0sWzExOTgyLDEyODQyXSxbMTE5ODksMTI4NTBdLFsxMjEwMiwxMjk2NF0sWzEyMzM2LDEzMjAwXSxbMTIzNDgsMTMyMTVdLFsxMjM1MCwx''@;'; put 'put ''MzIxOF0sWzEyMzg0LDEzMjUzXSxbMTIzOTMsMTMyNjNdLFsxMjM5NSwxMzI2N10sWzEyMzk3LDEzMjcwXSxbMTI1MTAsMTMzODRdLFsxMjU1MywxMzQyOF0sWzEyODUxLDEzNzI3XSxbMTI5NjIsMTM4MzldLFsxMjk3MywxMzg1MV0sWzEzNzM4LDE0NjE3XSxbMTM4MjMsMTQ3MDNdLFsxMzkx''@;'; put 'put ''OSwxNDgwMV0sWzEzOTMzLDE0ODE2XSxbMTQwODAsMTQ5NjRdLFsxNDI5OCwxNTE4M10sWzE0NTg1LDE1NDcxXSxbMTQ2OTgsMTU1ODVdLFsxNTU4MywxNjQ3MV0sWzE1ODQ3LDE2NzM2XSxbMTYzMTgsMTcyMDhdLFsxNjQzNCwxNzMyNV0sWzE2NDM4LDE3MzMwXSxbMTY0ODEsMTczNzRdLFsx''@;'; put 'put ''NjcyOSwxNzYyM10sWzE3MTAyLDE3OTk3XSxbMTcxMjIsMTgwMThdLFsxNzMxNSwxODIxMl0sWzE3MzIwLDE4MjE4XSxbMTc0MDIsMTgzMDFdLFsxNzQxOCwxODMxOF0sWzE3ODU5LDE4NzYwXSxbMTc5MDksMTg4MTFdLFsxNzkxMSwxODgxNF0sWzE3OTE1LDE4ODIwXSxbMTc5MTYsMTg4MjNd''@;'; put 'put ''LFsxNzkzNiwxODg0NF0sWzE3OTM5LDE4ODQ4XSxbMTc5NjEsMTg4NzJdLFsxODY2NCwxOTU3Nl0sWzE4NzAzLDE5NjIwXSxbMTg4MTQsMTk3MzhdLFsxODk2MiwxOTg4N10sWzE5MDQzLDQwODcwXSxbMzM0NjksNTkyNDRdLFszMzQ3MCw1OTMzNl0sWzMzNDcxLDU5MzY3XSxbMzM0ODQsNTk0''@;'; put 'put ''MTNdLFszMzQ4NSw1OTQxN10sWzMzNDkwLDU5NDIzXSxbMzM0OTcsNTk0MzFdLFszMzUwMSw1OTQzN10sWzMzNTA1LDU5NDQzXSxbMzM1MTMsNTk0NTJdLFszMzUyMCw1OTQ2MF0sWzMzNTM2LDU5NDc4XSxbMzM1NTAsNTk0OTNdLFszNzg0NSw2Mzc4OV0sWzM3OTIxLDYzODY2XSxbMzc5NDgs''@;'; put 'put ''NjM4OTRdLFszODAyOSw2Mzk3Nl0sWzM4MDM4LDYzOTg2XSxbMzgwNjQsNjQwMTZdLFszODA2NSw2NDAxOF0sWzM4MDY2LDY0MDIxXSxbMzgwNjksNjQwMjVdLFszODA3NSw2NDAzNF0sWzM4MDc2LDY0MDM3XSxbMzgwNzgsNjQwNDJdLFszOTEwOCw2NTA3NF0sWzM5MTA5LDY1MDkzXSxbMzkx''@;'; put 'put ''MTMsNjUxMDddLFszOTExNCw2NTExMl0sWzM5MTE1LDY1MTI3XSxbMzkxMTYsNjUxMzJdLFszOTI2NSw2NTM3NV0sWzM5Mzk0LDY1NTEwXSxbMTg5ZTMsNjU1MzZdXSxqaXMwMjA4OlsxMjI4OCwxMjI4OSwxMjI5MCw2NTI5Miw2NTI5NCwxMjUzOSw2NTMwNiw2NTMwNyw2NTMxMSw2NTI4MSwx''@;'; put 'put ''MjQ0MywxMjQ0NCwxODAsNjUzNDQsMTY4LDY1MzQyLDY1NTA3LDY1MzQzLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDgyMTMsODIwOCw2NTI5NSw2NTM0MCw2NTM3NCw4NzQxLDY1MzcyLDgyMzAsODIyOSw4MjE2LDgyMTcsODIy''@;'; put 'put ''MCw4MjIxLDY1Mjg4LDY1Mjg5LDEyMzA4LDEyMzA5LDY1MzM5LDY1MzQxLDY1MzcxLDY1MzczLDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDY1MjkxLDY1MjkzLDE3NywyMTUsMjQ3LDY1MzA5LDg4MDAsNjUzMDgsNjUzMTAsODgw''@;'; put 'put ''Niw4ODA3LDg3MzQsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1NTA5LDY1Mjg0LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MjgzLDY1Mjg2LDY1MjkwLDY1MzEyLDE2Nyw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5''@;'; put 'put ''NjYwLDgyNTEsMTIzMDYsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw4NzQzLDg3NDQsNjU1MDYsODY1OCw4NjYwLDg3MDQsODcwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4Niw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1''@;'; put 'put ''Nyw4NzQ3LDg3NDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NDkxLDgyNDAsOTgzOSw5ODM3LDk4MzQsODIyNCw4MjI1LDE4MixudWxsLG51bGwsbnVsbCxudWxsLDk3MTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2''@;'; put 'put ''NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0''@;'; put 'put ''OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCxudWxsLG51bGwsbnVsbCxudWxsLDEyMzUzLDEyMzU0LDEyMzU1''@;'; put 'put ''LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEy''@;'; put 'put ''MzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEw''@;'; put 'put ''LDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2''@;'; put 'put ''OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5Niwx''@;'; put 'put ''MjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUy''@;'; put 'put ''NCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4''@;'; put 'put ''LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5Njgs''@;'; put 'put ''OTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwx''@;'; put 'put ''MDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4Miwx''@;'; put 'put ''MDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiw5MzI3LDkzMjgsOTMyOSw5MzMwLDkzMzEsODU0NCw4NTQ1LDg1NDYsODU0Nyw4''@;'; put 'put ''NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLDEzMTI5LDEzMDc2LDEzMDkwLDEzMTMzLDEzMDgwLDEzMDk1LDEzMDU5LDEzMTEwLDEzMTM3LDEzMTQzLDEzMDY5LDEzMDk0LDEzMDkxLDEzMDk5LDEzMTMwLDEzMTE1LDEzMjEyLDEzMjEzLDEzMjE0LDEzMTk4LDEzMTk5LDEzMjUy''@;'; put 'put ''LDEzMjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMzE3OSwxMjMxNywxMjMxOSw4NDcwLDEzMjYxLDg0ODEsMTI5NjQsMTI5NjUsMTI5NjYsMTI5NjcsMTI5NjgsMTI4NDksMTI4NTAsMTI4NTcsMTMxODIsMTMxODEsMTMxODAsODc4Niw4ODAxLDg3NDcsODc1''@;'; put 'put ''MCw4NzIxLDg3MzAsODg2OSw4NzM2LDg3MzUsODg5NSw4NzU3LDg3NDUsODc0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDIwMTI0LDIxNzgyLDIzMDQzLDM4NDYzLDIxNjk2LDI0ODU5LDI1Mzg0LDIzMDMwLDM2ODk4LDMzOTA5LDMzNTY0LDMxMzEyLDI0NzQ2LDI1NTY5LDI4MTk3LDI2MDkzLDMzODk0LDMzNDQ2LDM5OTI1LDI2NzcxLDIyMzExLDI2MDE3LDI1MjAxLDIzNDUxLDIyOTkyLDM0NDI3LDM5''@;'; put 'put ''MTU2LDMyMDk4LDMyMTkwLDM5ODIyLDI1MTEwLDMxOTAzLDM0OTk5LDIzNDMzLDI0MjQ1LDI1MzUzLDI2MjYzLDI2Njk2LDM4MzQzLDM4Nzk3LDI2NDQ3LDIwMTk3LDIwMjM0LDIwMzAxLDIwMzgxLDIwNTUzLDIyMjU4LDIyODM5LDIyOTk2LDIzMDQxLDIzNTYxLDI0Nzk5LDI0ODQ3LDI0OTQ0''@;'; put 'put ''LDI2MTMxLDI2ODg1LDI4ODU4LDMwMDMxLDMwMDY0LDMxMjI3LDMyMTczLDMyMjM5LDMyOTYzLDMzODA2LDM0OTE1LDM1NTg2LDM2OTQ5LDM2OTg2LDIxMzA3LDIwMTE3LDIwMTMzLDIyNDk1LDMyOTQ2LDM3MDU3LDMwOTU5LDE5OTY4LDIyNzY5LDI4MzIyLDM2OTIwLDMxMjgyLDMzNTc2LDMz''@;'; put 'put ''NDE5LDM5OTgzLDIwODAxLDIxMzYwLDIxNjkzLDIxNzI5LDIyMjQwLDIzMDM1LDI0MzQxLDM5MTU0LDI4MTM5LDMyOTk2LDM0MDkzLDM4NDk4LDM4NTEyLDM4NTYwLDM4OTA3LDIxNTE1LDIxNDkxLDIzNDMxLDI4ODc5LDMyNzAxLDM2ODAyLDM4NjMyLDIxMzU5LDQwMjg0LDMxNDE4LDE5OTg1''@;'; put 'put ''LDMwODY3LDMzMjc2LDI4MTk4LDIyMDQwLDIxNzY0LDI3NDIxLDM0MDc0LDM5OTk1LDIzMDEzLDIxNDE3LDI4MDA2LDI5OTE2LDM4Mjg3LDIyMDgyLDIwMTEzLDM2OTM5LDM4NjQyLDMzNjE1LDM5MTgwLDIxNDczLDIxOTQyLDIzMzQ0LDI0NDMzLDI2MTQ0LDI2MzU1LDI2NjI4LDI3NzA0LDI3''@;'; put 'put ''ODkxLDI3OTQ1LDI5Nzg3LDMwNDA4LDMxMzEwLDM4OTY0LDMzNTIxLDM0OTA3LDM1NDI0LDM3NjEzLDI4MDgyLDMwMTIzLDMwNDEwLDM5MzY1LDI0NzQyLDM1NTg1LDM2MjM0LDM4MzIyLDI3MDIyLDIxNDIxLDIwODcwLDIyMjkwLDIyNTc2LDIyODUyLDIzNDc2LDI0MzEwLDI0NjE2LDI1NTEz''@;'; put 'put ''LDI1NTg4LDI3ODM5LDI4NDM2LDI4ODE0LDI4OTQ4LDI5MDE3LDI5MTQxLDI5NTAzLDMyMjU3LDMzMzk4LDMzNDg5LDM0MTk5LDM2OTYwLDM3NDY3LDQwMjE5LDIyNjMzLDI2MDQ0LDI3NzM4LDI5OTg5LDIwOTg1LDIyODMwLDIyODg1LDI0NDQ4LDI0NTQwLDI1Mjc2LDI2MTA2LDI3MTc4LDI3''@;'; put 'put ''NDMxLDI3NTcyLDI5NTc5LDMyNzA1LDM1MTU4LDQwMjM2LDQwMjA2LDQwNjQ0LDIzNzEzLDI3Nzk4LDMzNjU5LDIwNzQwLDIzNjI3LDI1MDE0LDMzMjIyLDI2NzQyLDI5MjgxLDIwMDU3LDIwNDc0LDIxMzY4LDI0NjgxLDI4MjAxLDMxMzExLDM4ODk5LDE5OTc5LDIxMjcwLDIwMjA2LDIwMzA5''@;'; put 'put ''LDIwMjg1LDIwMzg1LDIwMzM5LDIxMTUyLDIxNDg3LDIyMDI1LDIyNzk5LDIzMjMzLDIzNDc4LDIzNTIxLDMxMTg1LDI2MjQ3LDI2NTI0LDI2NTUwLDI3NDY4LDI3ODI3LDI4Nzc5LDI5NjM0LDMxMTE3LDMxMTY2LDMxMjkyLDMxNjIzLDMzNDU3LDMzNDk5LDMzNTQwLDMzNjU1LDMzNzc1LDMz''@;'; put 'put ''NzQ3LDM0NjYyLDM1NTA2LDIyMDU3LDM2MDA4LDM2ODM4LDM2OTQyLDM4Njg2LDM0NDQyLDIwNDIwLDIzNzg0LDI1MTA1LDI5MjczLDMwMDExLDMzMjUzLDMzNDY5LDM0NTU4LDM2MDMyLDM4NTk3LDM5MTg3LDM5MzgxLDIwMTcxLDIwMjUwLDM1Mjk5LDIyMjM4LDIyNjAyLDIyNzMwLDI0MzE1''@;'; put 'put ''LDI0NTU1LDI0NjE4LDI0NzI0LDI0Njc0LDI1MDQwLDI1MTA2LDI1Mjk2LDI1OTEzLDM5NzQ1LDI2MjE0LDI2ODAwLDI4MDIzLDI4Nzg0LDMwMDI4LDMwMzQyLDMyMTE3LDMzNDQ1LDM0ODA5LDM4MjgzLDM4NTQyLDM1OTk3LDIwOTc3LDIxMTgyLDIyODA2LDIxNjgzLDIzNDc1LDIzODMwLDI0''@;'; put 'put ''OTM2LDI3MDEwLDI4MDc5LDMwODYxLDMzOTk1LDM0OTAzLDM1NDQyLDM3Nzk5LDM5NjA4LDI4MDEyLDM5MzM2LDM0NTIxLDIyNDM1LDI2NjIzLDM0NTEwLDM3MzkwLDIxMTIzLDIyMTUxLDIxNTA4LDI0Mjc1LDI1MzEzLDI1Nzg1LDI2Njg0LDI2NjgwLDI3NTc5LDI5NTU0LDMwOTA2LDMxMzM5''@;'; put 'put ''LDM1MjI2LDM1MjgyLDM2MjAzLDM2NjExLDM3MTAxLDM4MzA3LDM4NTQ4LDM4NzYxLDIzMzk4LDIzNzMxLDI3MDA1LDM4OTg5LDM4OTkwLDI1NDk5LDMxNTIwLDI3MTc5LDI3MjYzLDI2ODA2LDM5OTQ5LDI4NTExLDIxMTA2LDIxOTE3LDI0Njg4LDI1MzI0LDI3OTYzLDI4MTY3LDI4MzY5LDMz''@;'; put 'put ''ODgzLDM1MDg4LDM2Njc2LDE5OTg4LDM5OTkzLDIxNDk0LDI2OTA3LDI3MTk0LDM4Nzg4LDI2NjY2LDIwODI4LDMxNDI3LDMzOTcwLDM3MzQwLDM3NzcyLDIyMTA3LDQwMjMyLDI2NjU4LDMzNTQxLDMzODQxLDMxOTA5LDIxZTMsMzM0NzcsMjk5MjYsMjAwOTQsMjAzNTUsMjA4OTYsMjM1MDYs''@;'; put 'put ''MjEwMDIsMjEyMDgsMjEyMjMsMjQwNTksMjE5MTQsMjI1NzAsMjMwMTQsMjM0MzYsMjM0NDgsMjM1MTUsMjQxNzgsMjQxODUsMjQ3MzksMjQ4NjMsMjQ5MzEsMjUwMjIsMjU1NjMsMjU5NTQsMjY1NzcsMjY3MDcsMjY4NzQsMjc0NTQsMjc0NzUsMjc3MzUsMjg0NTAsMjg1NjcsMjg0ODUsMjk4''@;'; put 'put ''NzIsMjk5NzYsMzA0MzUsMzA0NzUsMzE0ODcsMzE2NDksMzE3NzcsMzIyMzMsMzI1NjYsMzI3NTIsMzI5MjUsMzMzODIsMzM2OTQsMzUyNTEsMzU1MzIsMzYwMTEsMzY5OTYsMzc5NjksMzgyOTEsMzgyODksMzgzMDYsMzg1MDEsMzg4NjcsMzkyMDgsMzMzMDQsMjAwMjQsMjE1NDcsMjM3MzYs''@;'; put 'put ''MjQwMTIsMjk2MDksMzAyODQsMzA1MjQsMjM3MjEsMzI3NDcsMzYxMDcsMzg1OTMsMzg5MjksMzg5OTYsMzllMywyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwyMjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4''@;'; put 'put ''MiwyNjM5OSwyNjgyNywyNjgyMCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMmUzLDI0NTA5LDM1MjE1LDM1MzUyLDM2MDIwLDM2MjE1LDM2NTU2LDM2NjM3LDM5MTM4LDM5NDM4LDM5NzQwLDIwMDk2LDIwNjA1LDIwNzM2LDIyOTMxLDIz''@;'; put 'put ''NDUyLDI1MTM1LDI1MjE2LDI1ODM2LDI3NDUwLDI5MzQ0LDMwMDk3LDMxMDQ3LDMyNjgxLDM0ODExLDM1NTE2LDM1Njk2LDI1NTE2LDMzNzM4LDM4ODE2LDIxNTEzLDIxNTA3LDIxOTMxLDI2NzA4LDI3MjI0LDM1NDQwLDMwNzU5LDI2NDg1LDQwNjUzLDIxMzY0LDIzNDU4LDMzMDUwLDM0Mzg0''@;'; put 'put ''LDM2ODcwLDE5OTkyLDIwMDM3LDIwMTY3LDIwMjQxLDIxNDUwLDIxNTYwLDIzNDcwLDI0MzM5LDI0NjEzLDI1OTM3LDI2NDI5LDI3NzE0LDI3NzYyLDI3ODc1LDI4NzkyLDI5Njk5LDMxMzUwLDMxNDA2LDMxNDk2LDMyMDI2LDMxOTk4LDMyMTAyLDI2MDg3LDI5Mjc1LDIxNDM1LDIzNjIxLDI0''@;'; put 'put ''MDQwLDI1Mjk4LDI1MzEyLDI1MzY5LDI4MTkyLDM0Mzk0LDM1Mzc3LDM2MzE3LDM3NjI0LDI4NDE3LDMxMTQyLDM5NzcwLDIwMTM2LDIwMTM5LDIwMTQwLDIwMzc5LDIwMzg0LDIwNjg5LDIwODA3LDMxNDc4LDIwODQ5LDIwOTgyLDIxMzMyLDIxMjgxLDIxMzc1LDIxNDgzLDIxOTMyLDIyNjU5''@;'; put 'put ''LDIzNzc3LDI0Mzc1LDI0Mzk0LDI0NjIzLDI0NjU2LDI0Njg1LDI1Mzc1LDI1OTQ1LDI3MjExLDI3ODQxLDI5Mzc4LDI5NDIxLDMwNzAzLDMzMDE2LDMzMDI5LDMzMjg4LDM0MTI2LDM3MTExLDM3ODU3LDM4OTExLDM5MjU1LDM5NTE0LDIwMjA4LDIwOTU3LDIzNTk3LDI2MjQxLDI2OTg5LDIz''@;'; put 'put ''NjE2LDI2MzU0LDI2OTk3LDI5NTc3LDI2NzA0LDMxODczLDIwNjc3LDIxMjIwLDIyMzQzLDI0MDYyLDM3NjcwLDI2MDIwLDI3NDI3LDI3NDUzLDI5NzQ4LDMxMTA1LDMxMTY1LDMxNTYzLDMyMjAyLDMzNDY1LDMzNzQwLDM0OTQzLDM1MTY3LDM1NjQxLDM2ODE3LDM3MzI5LDIxNTM1LDM3NTA0''@;'; put 'put ''LDIwMDYxLDIwNTM0LDIxNDc3LDIxMzA2LDI5Mzk5LDI5NTkwLDMwNjk3LDMzNTEwLDM2NTI3LDM5MzY2LDM5MzY4LDM5Mzc4LDIwODU1LDI0ODU4LDM0Mzk4LDIxOTM2LDMxMzU0LDIwNTk4LDIzNTA3LDM2OTM1LDM4NTMzLDIwMDE4LDI3MzU1LDM3MzUxLDIzNjMzLDIzNjI0LDI1NDk2LDMx''@;'; put 'put ''MzkxLDI3Nzk1LDM4NzcyLDM2NzA1LDMxNDAyLDI5MDY2LDM4NTM2LDMxODc0LDI2NjQ3LDMyMzY4LDI2NzA1LDM3NzQwLDIxMjM0LDIxNTMxLDM0MjE5LDM1MzQ3LDMyNjc2LDM2NTU3LDM3MDg5LDIxMzUwLDM0OTUyLDMxMDQxLDIwNDE4LDIwNjcwLDIxMDA5LDIwODA0LDIxODQzLDIyMzE3''@;'; put 'put ''LDI5Njc0LDIyNDExLDIyODY1LDI0NDE4LDI0NDUyLDI0NjkzLDI0OTUwLDI0OTM1LDI1MDAxLDI1NTIyLDI1NjU4LDI1OTY0LDI2MjIzLDI2NjkwLDI4MTc5LDMwMDU0LDMxMjkzLDMxOTk1LDMyMDc2LDMyMTUzLDMyMzMxLDMyNjE5LDMzNTUwLDMzNjEwLDM0NTA5LDM1MzM2LDM1NDI3LDM1''@;'; put 'put ''Njg2LDM2NjA1LDM4OTM4LDQwMzM1LDMzNDY0LDM2ODE0LDM5OTEyLDIxMTI3LDI1MTE5LDI1NzMxLDI4NjA4LDM4NTUzLDI2Njg5LDIwNjI1LDI3NDI0LDI3NzcwLDI4NTAwLDMxMzQ4LDMyMDgwLDM0ODgwLDM1MzYzLDI2Mzc2LDIwMjE0LDIwNTM3LDIwNTE4LDIwNTgxLDIwODYwLDIxMDQ4''@;'; put 'put ''LDIxMDkxLDIxOTI3LDIyMjg3LDIyNTMzLDIzMjQ0LDI0MzE0LDI1MDEwLDI1MDgwLDI1MzMxLDI1NDU4LDI2OTA4LDI3MTc3LDI5MzA5LDI5MzU2LDI5NDg2LDMwNzQwLDMwODMxLDMyMTIxLDMwNDc2LDMyOTM3LDM1MjExLDM1NjA5LDM2MDY2LDM2NTYyLDM2OTYzLDM3NzQ5LDM4NTIyLDM4''@;'; put 'put ''OTk3LDM5NDQzLDQwNTY4LDIwODAzLDIxNDA3LDIxNDI3LDI0MTg3LDI0MzU4LDI4MTg3LDI4MzA0LDI5NTcyLDI5Njk0LDMyMDY3LDMzMzM1LDM1MzI4LDM1NTc4LDM4NDgwLDIwMDQ2LDIwNDkxLDIxNDc2LDIxNjI4LDIyMjY2LDIyOTkzLDIzMzk2LDI0MDQ5LDI0MjM1LDI0MzU5LDI1MTQ0''@;'; put 'put ''LDI1OTI1LDI2NTQzLDI4MjQ2LDI5MzkyLDMxOTQ2LDM0OTk2LDMyOTI5LDMyOTkzLDMzNzc2LDM0MzgyLDM1NDYzLDM2MzI4LDM3NDMxLDM4NTk5LDM5MDE1LDQwNzIzLDIwMTE2LDIwMTE0LDIwMjM3LDIxMzIwLDIxNTc3LDIxNTY2LDIzMDg3LDI0NDYwLDI0NDgxLDI0NzM1LDI2NzkxLDI3''@;'; put 'put ''Mjc4LDI5Nzg2LDMwODQ5LDM1NDg2LDM1NDkyLDM1NzAzLDM3MjY0LDIwMDYyLDM5ODgxLDIwMTMyLDIwMzQ4LDIwMzk5LDIwNTA1LDIwNTAyLDIwODA5LDIwODQ0LDIxMTUxLDIxMTc3LDIxMjQ2LDIxNDAyLDIxNDc1LDIxNTIxLDIxNTE4LDIxODk3LDIyMzUzLDIyNDM0LDIyOTA5LDIzMzgw''@;'; put 'put ''LDIzMzg5LDIzNDM5LDI0MDM3LDI0MDM5LDI0MDU1LDI0MTg0LDI0MTk1LDI0MjE4LDI0MjQ3LDI0MzQ0LDI0NjU4LDI0OTA4LDI1MjM5LDI1MzA0LDI1NTExLDI1OTE1LDI2MTE0LDI2MTc5LDI2MzU2LDI2NDc3LDI2NjU3LDI2Nzc1LDI3MDgzLDI3NzQzLDI3OTQ2LDI4MDA5LDI4MjA3LDI4''@;'; put 'put ''MzE3LDMwMDAyLDMwMzQzLDMwODI4LDMxMjk1LDMxOTY4LDMyMDA1LDMyMDI0LDMyMDk0LDMyMTc3LDMyNzg5LDMyNzcxLDMyOTQzLDMyOTQ1LDMzMTA4LDMzMTY3LDMzMzIyLDMzNjE4LDM0ODkyLDM0OTEzLDM1NjExLDM2MDAyLDM2MDkyLDM3MDY2LDM3MjM3LDM3NDg5LDMwNzgzLDM3NjI4''@;'; put 'put ''LDM4MzA4LDM4NDc3LDM4OTE3LDM5MzIxLDM5NjQwLDQwMjUxLDIxMDgzLDIxMTYzLDIxNDk1LDIxNTEyLDIyNzQxLDI1MzM1LDI4NjQwLDM1OTQ2LDM2NzAzLDQwNjMzLDIwODExLDIxMDUxLDIxNTc4LDIyMjY5LDMxMjk2LDM3MjM5LDQwMjg4LDQwNjU4LDI5NTA4LDI4NDI1LDMzMTM2LDI5''@;'; put 'put ''OTY5LDI0NTczLDI0Nzk0LDM5NTkyLDI5NDAzLDM2Nzk2LDI3NDkyLDM4OTE1LDIwMTcwLDIyMjU2LDIyMzcyLDIyNzE4LDIzMTMwLDI0NjgwLDI1MDMxLDI2MTI3LDI2MTE4LDI2NjgxLDI2ODAxLDI4MTUxLDMwMTY1LDMyMDU4LDMzMzkwLDM5NzQ2LDIwMTIzLDIwMzA0LDIxNDQ5LDIxNzY2''@;'; put 'put ''LDIzOTE5LDI0MDM4LDI0MDQ2LDI2NjE5LDI3ODAxLDI5ODExLDMwNzIyLDM1NDA4LDM3NzgyLDM1MDM5LDIyMzUyLDI0MjMxLDI1Mzg3LDIwNjYxLDIwNjUyLDIwODc3LDI2MzY4LDIxNzA1LDIyNjIyLDIyOTcxLDIzNDcyLDI0NDI1LDI1MTY1LDI1NTA1LDI2Njg1LDI3NTA3LDI4MTY4LDI4''@;'; put 'put ''Nzk3LDM3MzE5LDI5MzEyLDMwNzQxLDMwNzU4LDMxMDg1LDI1OTk4LDMyMDQ4LDMzNzU2LDM1MDA5LDM2NjE3LDM4NTU1LDIxMDkyLDIyMzEyLDI2NDQ4LDMyNjE4LDM2MDAxLDIwOTE2LDIyMzM4LDM4NDQyLDIyNTg2LDI3MDE4LDMyOTQ4LDIxNjgyLDIzODIyLDIyNTI0LDMwODY5LDQwNDQy''@;'; put 'put ''LDIwMzE2LDIxMDY2LDIxNjQzLDI1NjYyLDI2MTUyLDI2Mzg4LDI2NjEzLDMxMzY0LDMxNTc0LDMyMDM0LDM3Njc5LDI2NzE2LDM5ODUzLDMxNTQ1LDIxMjczLDIwODc0LDIxMDQ3LDIzNTE5LDI1MzM0LDI1Nzc0LDI1ODMwLDI2NDEzLDI3NTc4LDM0MjE3LDM4NjA5LDMwMzUyLDM5ODk0LDI1''@;'; put 'put ''NDIwLDM3NjM4LDM5ODUxLDMwMzk5LDI2MTk0LDE5OTc3LDIwNjMyLDIxNDQyLDIzNjY1LDI0ODA4LDI1NzQ2LDI1OTU1LDI2NzE5LDI5MTU4LDI5NjQyLDI5OTg3LDMxNjM5LDMyMzg2LDM0NDUzLDM1NzE1LDM2MDU5LDM3MjQwLDM5MTg0LDI2MDI4LDI2MjgzLDI3NTMxLDIwMTgxLDIwMTgw''@;'; put 'put ''LDIwMjgyLDIwMzUxLDIxMDUwLDIxNDk2LDIxNDkwLDIxOTg3LDIyMjM1LDIyNzYzLDIyOTg3LDIyOTg1LDIzMDM5LDIzMzc2LDIzNjI5LDI0MDY2LDI0MTA3LDI0NTM1LDI0NjA1LDI1MzUxLDI1OTAzLDIzMzg4LDI2MDMxLDI2MDQ1LDI2MDg4LDI2NTI1LDI3NDkwLDI3NTE1LDI3NjYzLDI5''@;'; put 'put ''NTA5LDMxMDQ5LDMxMTY5LDMxOTkyLDMyMDI1LDMyMDQzLDMyOTMwLDMzMDI2LDMzMjY3LDM1MjIyLDM1NDIyLDM1NDMzLDM1NDMwLDM1NDY4LDM1NTY2LDM2MDM5LDM2MDYwLDM4NjA0LDM5MTY0LDI3NTAzLDIwMTA3LDIwMjg0LDIwMzY1LDIwODE2LDIzMzgzLDIzNTQ2LDI0OTA0LDI1MzQ1''@;'; put 'put ''LDI2MTc4LDI3NDI1LDI4MzYzLDI3ODM1LDI5MjQ2LDI5ODg1LDMwMTY0LDMwOTEzLDMxMDM0LDMyNzgwLDMyODE5LDMzMjU4LDMzOTQwLDM2NzY2LDI3NzI4LDQwNTc1LDI0MzM1LDM1NjcyLDQwMjM1LDMxNDgyLDM2NjAwLDIzNDM3LDM4NjM1LDE5OTcxLDIxNDg5LDIyNTE5LDIyODMzLDIz''@;'; put 'put ''MjQxLDIzNDYwLDI0NzEzLDI4Mjg3LDI4NDIyLDMwMTQyLDM2MDc0LDIzNDU1LDM0MDQ4LDMxNzEyLDIwNTk0LDI2NjEyLDMzNDM3LDIzNjQ5LDM0MTIyLDMyMjg2LDMzMjk0LDIwODg5LDIzNTU2LDI1NDQ4LDM2MTk4LDI2MDEyLDI5MDM4LDMxMDM4LDMyMDIzLDMyNzczLDM1NjEzLDM2NTU0''@;'; put 'put ''LDM2OTc0LDM0NTAzLDM3MDM0LDIwNTExLDIxMjQyLDIzNjEwLDI2NDUxLDI4Nzk2LDI5MjM3LDM3MTk2LDM3MzIwLDM3Njc1LDMzNTA5LDIzNDkwLDI0MzY5LDI0ODI1LDIwMDI3LDIxNDYyLDIzNDMyLDI1MTYzLDI2NDE3LDI3NTMwLDI5NDE3LDI5NjY0LDMxMjc4LDMzMTMxLDM2MjU5LDM3''@;'; put 'put ''MjAyLDM5MzE4LDIwNzU0LDIxNDYzLDIxNjEwLDIzNTUxLDI1NDgwLDI3MTkzLDMyMTcyLDM4NjU2LDIyMjM0LDIxNDU0LDIxNjA4LDIzNDQ3LDIzNjAxLDI0MDMwLDIwNDYyLDI0ODMzLDI1MzQyLDI3OTU0LDMxMTY4LDMxMTc5LDMyMDY2LDMyMzMzLDMyNzIyLDMzMjYxLDMzMzExLDMzOTM2''@;'; put 'put ''LDM0ODg2LDM1MTg2LDM1NzI4LDM2NDY4LDM2NjU1LDM2OTEzLDM3MTk1LDM3MjI4LDM4NTk4LDM3Mjc2LDIwMTYwLDIwMzAzLDIwODA1LDIxMzEzLDI0NDY3LDI1MTAyLDI2NTgwLDI3NzEzLDI4MTcxLDI5NTM5LDMyMjk0LDM3MzI1LDM3NTA3LDIxNDYwLDIyODA5LDIzNDg3LDI4MTEzLDMx''@;'; put 'put ''MDY5LDMyMzAyLDMxODk5LDIyNjU0LDI5MDg3LDIwOTg2LDM0ODk5LDM2ODQ4LDIwNDI2LDIzODAzLDI2MTQ5LDMwNjM2LDMxNDU5LDMzMzA4LDM5NDIzLDIwOTM0LDI0NDkwLDI2MDkyLDI2OTkxLDI3NTI5LDI4MTQ3LDI4MzEwLDI4NTE2LDMwNDYyLDMyMDIwLDI0MDMzLDM2OTgxLDM3MjU1''@;'; put 'put ''LDM4OTE4LDIwOTY2LDIxMDIxLDI1MTUyLDI2MjU3LDI2MzI5LDI4MTg2LDI0MjQ2LDMyMjEwLDMyNjI2LDI2MzYwLDM0MjIzLDM0Mjk1LDM1NTc2LDIxMTYxLDIxNDY1LDIyODk5LDI0MjA3LDI0NDY0LDI0NjYxLDM3NjA0LDM4NTAwLDIwNjYzLDIwNzY3LDIxMjEzLDIxMjgwLDIxMzE5LDIx''@;'; put 'put ''NDg0LDIxNzM2LDIxODMwLDIxODA5LDIyMDM5LDIyODg4LDIyOTc0LDIzMTAwLDIzNDc3LDIzNTU4LDIzNTY3LDIzNTY5LDIzNTc4LDI0MTk2LDI0MjAyLDI0Mjg4LDI0NDMyLDI1MjE1LDI1MjIwLDI1MzA3LDI1NDg0LDI1NDYzLDI2MTE5LDI2MTI0LDI2MTU3LDI2MjMwLDI2NDk0LDI2Nzg2''@;'; put 'put ''LDI3MTY3LDI3MTg5LDI3ODM2LDI4MDQwLDI4MTY5LDI4MjQ4LDI4OTg4LDI4OTY2LDI5MDMxLDMwMTUxLDMwNDY1LDMwODEzLDMwOTc3LDMxMDc3LDMxMjE2LDMxNDU2LDMxNTA1LDMxOTExLDMyMDU3LDMyOTE4LDMzNzUwLDMzOTMxLDM0MTIxLDM0OTA5LDM1MDU5LDM1MzU5LDM1Mzg4LDM1''@;'; put 'put ''NDEyLDM1NDQzLDM1OTM3LDM2MDYyLDM3Mjg0LDM3NDc4LDM3NzU4LDM3OTEyLDM4NTU2LDM4ODA4LDE5OTc4LDE5OTc2LDE5OTk4LDIwMDU1LDIwODg3LDIxMTA0LDIyNDc4LDIyNTgwLDIyNzMyLDIzMzMwLDI0MTIwLDI0NzczLDI1ODU0LDI2NDY1LDI2NDU0LDI3OTcyLDI5MzY2LDMwMDY3''@;'; put 'put ''LDMxMzMxLDMzOTc2LDM1Njk4LDM3MzA0LDM3NjY0LDIyMDY1LDIyNTE2LDM5MTY2LDI1MzI1LDI2ODkzLDI3NTQyLDI5MTY1LDMyMzQwLDMyODg3LDMzMzk0LDM1MzAyLDM5MTM1LDM0NjQ1LDM2Nzg1LDIzNjExLDIwMjgwLDIwNDQ5LDIwNDA1LDIxNzY3LDIzMDcyLDIzNTE3LDIzNTI5LDI0''@;'; put 'put ''NTE1LDI0OTEwLDI1MzkxLDI2MDMyLDI2MTg3LDI2ODYyLDI3MDM1LDI4MDI0LDI4MTQ1LDMwMDAzLDMwMTM3LDMwNDk1LDMxMDcwLDMxMjA2LDMyMDUxLDMzMjUxLDMzNDU1LDM0MjE4LDM1MjQyLDM1Mzg2LDM2NTIzLDM2NzYzLDM2OTE0LDM3MzQxLDM4NjYzLDIwMTU0LDIwMTYxLDIwOTk1''@;'; put 'put ''LDIyNjQ1LDIyNzY0LDIzNTYzLDI5OTc4LDIzNjEzLDMzMTAyLDM1MzM4LDM2ODA1LDM4NDk5LDM4NzY1LDMxNTI1LDM1NTM1LDM4OTIwLDM3MjE4LDIyMjU5LDIxNDE2LDM2ODg3LDIxNTYxLDIyNDAyLDI0MTAxLDI1NTEyLDI3NzAwLDI4ODEwLDMwNTYxLDMxODgzLDMyNzM2LDM0OTI4LDM2''@;'; put 'put ''OTMwLDM3MjA0LDM3NjQ4LDM3NjU2LDM4NTQzLDI5NzkwLDM5NjIwLDIzODE1LDIzOTEzLDI1OTY4LDI2NTMwLDM2MjY0LDM4NjE5LDI1NDU0LDI2NDQxLDI2OTA1LDMzNzMzLDM4OTM1LDM4NTkyLDM1MDcwLDI4NTQ4LDI1NzIyLDIzNTQ0LDE5OTkwLDI4NzE2LDMwMDQ1LDI2MTU5LDIwOTMy''@;'; put 'put ''LDIxMDQ2LDIxMjE4LDIyOTk1LDI0NDQ5LDI0NjE1LDI1MTA0LDI1OTE5LDI1OTcyLDI2MTQzLDI2MjI4LDI2ODY2LDI2NjQ2LDI3NDkxLDI4MTY1LDI5Mjk4LDI5OTgzLDMwNDI3LDMxOTM0LDMyODU0LDIyNzY4LDM1MDY5LDM1MTk5LDM1NDg4LDM1NDc1LDM1NTMxLDM2ODkzLDM3MjY2LDM4''@;'; put 'put ''NzM4LDM4NzQ1LDI1OTkzLDMxMjQ2LDMzMDMwLDM4NTg3LDI0MTA5LDI0Nzk2LDI1MTE0LDI2MDIxLDI2MTMyLDI2NTEyLDMwNzA3LDMxMzA5LDMxODIxLDMyMzE4LDMzMDM0LDM2MDEyLDM2MTk2LDM2MzIxLDM2NDQ3LDMwODg5LDIwOTk5LDI1MzA1LDI1NTA5LDI1NjY2LDI1MjQwLDM1Mzcz''@;'; put 'put ''LDMxMzYzLDMxNjgwLDM1NTAwLDM4NjM0LDMyMTE4LDMzMjkyLDM0NjMzLDIwMTg1LDIwODA4LDIxMzE1LDIxMzQ0LDIzNDU5LDIzNTU0LDIzNTc0LDI0MDI5LDI1MTI2LDI1MTU5LDI1Nzc2LDI2NjQzLDI2Njc2LDI3ODQ5LDI3OTczLDI3OTI3LDI2NTc5LDI4NTA4LDI5MDA2LDI5MDUzLDI2''@;'; put 'put ''MDU5LDMxMzU5LDMxNjYxLDMyMjE4LDMyMzMwLDMyNjgwLDMzMTQ2LDMzMzA3LDMzMzM3LDM0MjE0LDM1NDM4LDM2MDQ2LDM2MzQxLDM2OTg0LDM2OTgzLDM3NTQ5LDM3NTIxLDM4Mjc1LDM5ODU0LDIxMDY5LDIxODkyLDI4NDcyLDI4OTgyLDIwODQwLDMxMTA5LDMyMzQxLDMzMjAzLDMxOTUw''@;'; put 'put ''LDIyMDkyLDIyNjA5LDIzNzIwLDI1NTE0LDI2MzY2LDI2MzY1LDI2OTcwLDI5NDAxLDMwMDk1LDMwMDk0LDMwOTkwLDMxMDYyLDMxMTk5LDMxODk1LDMyMDMyLDMyMDY4LDM0MzExLDM1MzgwLDM4NDU5LDM2OTYxLDQwNzM2LDIwNzExLDIxMTA5LDIxNDUyLDIxNDc0LDIwNDg5LDIxOTMwLDIy''@;'; put 'put ''NzY2LDIyODYzLDI5MjQ1LDIzNDM1LDIzNjUyLDIxMjc3LDI0ODAzLDI0ODE5LDI1NDM2LDI1NDc1LDI1NDA3LDI1NTMxLDI1ODA1LDI2MDg5LDI2MzYxLDI0MDM1LDI3MDg1LDI3MTMzLDI4NDM3LDI5MTU3LDIwMTA1LDMwMTg1LDMwNDU2LDMxMzc5LDMxOTY3LDMyMjA3LDMyMTU2LDMyODY1''@;'; put 'put ''LDMzNjA5LDMzNjI0LDMzOTAwLDMzOTgwLDM0Mjk5LDM1MDEzLDM2MjA4LDM2ODY1LDM2OTczLDM3NzgzLDM4Njg0LDM5NDQyLDIwNjg3LDIyNjc5LDI0OTc0LDMzMjM1LDM0MTAxLDM2MTA0LDM2ODk2LDIwNDE5LDIwNTk2LDIxMDYzLDIxMzYzLDI0Njg3LDI1NDE3LDI2NDYzLDI4MjA0LDM2''@;'; put 'put ''Mjc1LDM2ODk1LDIwNDM5LDIzNjQ2LDM2MDQyLDI2MDYzLDMyMTU0LDIxMzMwLDM0OTY2LDIwODU0LDI1NTM5LDIzMzg0LDIzNDAzLDIzNTYyLDI1NjEzLDI2NDQ5LDM2OTU2LDIwMTgyLDIyODEwLDIyODI2LDI3NzYwLDM1NDA5LDIxODIyLDIyNTQ5LDIyOTQ5LDI0ODE2LDI1MTcxLDI2NTYx''@;'; put 'put ''LDMzMzMzLDI2OTY1LDM4NDY0LDM5MzY0LDM5NDY0LDIwMzA3LDIyNTM0LDIzNTUwLDMyNzg0LDIzNzI5LDI0MTExLDI0NDUzLDI0NjA4LDI0OTA3LDI1MTQwLDI2MzY3LDI3ODg4LDI4MzgyLDMyOTc0LDMzMTUxLDMzNDkyLDM0OTU1LDM2MDI0LDM2ODY0LDM2OTEwLDM4NTM4LDQwNjY3LDM5''@;'; put 'put ''ODk5LDIwMTk1LDIxNDg4LDIyODIzLDMxNTMyLDM3MjYxLDM4OTg4LDQwNDQxLDI4MzgxLDI4NzExLDIxMzMxLDIxODI4LDIzNDI5LDI1MTc2LDI1MjQ2LDI1Mjk5LDI3ODEwLDI4NjU1LDI5NzMwLDM1MzUxLDM3OTQ0LDI4NjA5LDM1NTgyLDMzNTkyLDIwOTY3LDM0NTUyLDIxNDgyLDIxNDgx''@;'; put 'put ''LDIwMjk0LDM2OTQ4LDM2Nzg0LDIyODkwLDMzMDczLDI0MDYxLDMxNDY2LDM2Nzk5LDI2ODQyLDM1ODk1LDI5NDMyLDQwMDA4LDI3MTk3LDM1NTA0LDIwMDI1LDIxMzM2LDIyMDIyLDIyMzc0LDI1Mjg1LDI1NTA2LDI2MDg2LDI3NDcwLDI4MTI5LDI4MjUxLDI4ODQ1LDMwNzAxLDMxNDcxLDMx''@;'; put 'put ''NjU4LDMyMTg3LDMyODI5LDMyOTY2LDM0NTA3LDM1NDc3LDM3NzIzLDIyMjQzLDIyNzI3LDI0MzgyLDI2MDI5LDI2MjYyLDI3MjY0LDI3NTczLDMwMDA3LDM1NTI3LDIwNTE2LDMwNjkzLDIyMzIwLDI0MzQ3LDI0Njc3LDI2MjM0LDI3NzQ0LDMwMTk2LDMxMjU4LDMyNjIyLDMzMjY4LDM0NTg0''@;'; put 'put ''LDM2OTMzLDM5MzQ3LDMxNjg5LDMwMDQ0LDMxNDgxLDMxNTY5LDMzOTg4LDM2ODgwLDMxMjA5LDMxMzc4LDMzNTkwLDIzMjY1LDMwNTI4LDIwMDEzLDIwMjEwLDIzNDQ5LDI0NTQ0LDI1Mjc3LDI2MTcyLDI2NjA5LDI3ODgwLDM0NDExLDM0OTM1LDM1Mzg3LDM3MTk4LDM3NjE5LDM5Mzc2LDI3''@;'; put 'put ''MTU5LDI4NzEwLDI5NDgyLDMzNTExLDMzODc5LDM2MDE1LDE5OTY5LDIwODA2LDIwOTM5LDIxODk5LDIzNTQxLDI0MDg2LDI0MTE1LDI0MTkzLDI0MzQwLDI0MzczLDI0NDI3LDI0NTAwLDI1MDc0LDI1MzYxLDI2Mjc0LDI2Mzk3LDI4NTI2LDI5MjY2LDMwMDEwLDMwNTIyLDMyODg0LDMzMDgx''@;'; put 'put ''LDMzMTQ0LDM0Njc4LDM1NTE5LDM1NTQ4LDM2MjI5LDM2MzM5LDM3NTMwLDM4MjYzLDM4OTE0LDQwMTY1LDIxMTg5LDI1NDMxLDMwNDUyLDI2Mzg5LDI3Nzg0LDI5NjQ1LDM2MDM1LDM3ODA2LDM4NTE1LDI3OTQxLDIyNjg0LDI2ODk0LDI3MDg0LDM2ODYxLDM3Nzg2LDMwMTcxLDM2ODkwLDIy''@;'; put 'put ''NjE4LDI2NjI2LDI1NTI0LDI3MTMxLDIwMjkxLDI4NDYwLDI2NTg0LDM2Nzk1LDM0MDg2LDMyMTgwLDM3NzE2LDI2OTQzLDI4NTI4LDIyMzc4LDIyNzc1LDIzMzQwLDMyMDQ0LDI5MjI2LDIxNTE0LDM3MzQ3LDQwMzcyLDIwMTQxLDIwMzAyLDIwNTcyLDIwNTk3LDIxMDU5LDM1OTk4LDIxNTc2''@;'; put 'put ''LDIyNTY0LDIzNDUwLDI0MDkzLDI0MjEzLDI0MjM3LDI0MzExLDI0MzUxLDI0NzE2LDI1MjY5LDI1NDAyLDI1NTUyLDI2Nzk5LDI3NzEyLDMwODU1LDMxMTE4LDMxMjQzLDMyMjI0LDMzMzUxLDM1MzMwLDM1NTU4LDM2NDIwLDM2ODgzLDM3MDQ4LDM3MTY1LDM3MzM2LDQwNzE4LDI3ODc3LDI1''@;'; put 'put ''Njg4LDI1ODI2LDI1OTczLDI4NDA0LDMwMzQwLDMxNTE1LDM2OTY5LDM3ODQxLDI4MzQ2LDIxNzQ2LDI0NTA1LDI1NzY0LDM2Njg1LDM2ODQ1LDM3NDQ0LDIwODU2LDIyNjM1LDIyODI1LDIzNjM3LDI0MjE1LDI4MTU1LDMyMzk5LDI5OTgwLDM2MDI4LDM2NTc4LDM5MDAzLDI4ODU3LDIwMjUz''@;'; put 'put ''LDI3NTgzLDI4NTkzLDNlNCwzODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwyMjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3NywzNjg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5''@;'; put 'put ''OCwyMDgyNiwyMDkwOCwyMDk0MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgxMiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwyODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwz''@;'; put 'put ''MTU2MSwzMTU3MiwzMTU3MCwzMTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1MywzNDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwzODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIwNSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkz''@;'; put 'put ''NCwzMDY0MywzMTQ2MSwzMzAxMiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYwMiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywyMDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwy''@;'; put 'put ''MzQ5MywzNzE5MywyODcwMiwyMjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwzNTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwyMDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3''@;'; put 'put ''MSwyMTMzNSwyNjk3NiwzNjU3NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMzNiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgzNywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwyMjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwy''@;'; put 'put ''MzUyNywzMzkwNSwyOTQ4MywyOTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwyOTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwzMjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIw''@;'; put 'put ''NywyNjQ4NywyNzg3NCwyNzk2NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5NywyMDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwy''@;'; put 'put ''OTQzNywzNjAyMywyMjc3MCwzNjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwzMDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywzMTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2''@;'; put 'put ''MSw0MDYxNCwyMDk4OSwzMTY2NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwzMTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwz''@;'; put 'put ''ODU4OCwyMDI3NiwyMTAyOCwyMTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwyNjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwzMzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMxOCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1''@;'; put 'put ''OCwzMDQzNiwzMDkyOCwzNDExNSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkxNSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNmUzLDI3NjA0LDI3ODUyLDMwMTMwLDMwMzgyLDMwODY1LDMxMTkyLDMyMjAzLDMyNjMxLDMyOTMzLDM0OTg3LDM1NTEzLDM2MDI3LDM2''@;'; put 'put ''OTkxLDM4NzUwLDM5MTMxLDI3MTQ3LDMxODAwLDIwNjMzLDIzNjE0LDI0NDk0LDI2NTAzLDI3NjA4LDI5NzQ5LDMwNDczLDMyNjU0LDQwNzYzLDI2NTcwLDMxMjU1LDIxMzA1LDMwMDkxLDM5NjYxLDI0NDIyLDMzMTgxLDMzNzc3LDMyOTIwLDI0MzgwLDI0NTE3LDMwMDUwLDMxNTU4LDM2OTI0''@;'; put 'put ''LDI2NzI3LDIzMDE5LDIzMTk1LDMyMDE2LDMwMzM0LDM1NjI4LDIwNDY5LDI0NDI2LDI3MTYxLDI3NzAzLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1NDEzLDM1OTYxLDI0Mjg3LDI1NTUxLDMwMTQ5LDMxMTg2LDMzNDk1LDM3NjcyLDM3NjE4LDMzOTQ4LDM0NTQxLDM5OTgxLDIxNjk3LDI0''@;'; put 'put ''NDI4LDI1OTk2LDI3OTk2LDI4NjkzLDM2MDA3LDM2MDUxLDM4OTcxLDI1OTM1LDI5OTQyLDE5OTgxLDIwMTg0LDIyNDk2LDIyODI3LDIzMTQyLDIzNTAwLDIwOTA0LDI0MDY3LDI0MjIwLDI0NTk4LDI1MjA2LDI1OTc1LDI2MDIzLDI2MjIyLDI4MDE0LDI5MjM4LDMxNTI2LDMzMTA0LDMzMTc4''@;'; put 'put ''LDMzNDMzLDM1Njc2LDM2ZTMsMzYwNzAsMzYyMTIsMzg0MjgsMzg0NjgsMjAzOTgsMjU3NzEsMjc0OTQsMzMzMTAsMzM4ODksMzQxNTQsMzcwOTYsMjM1NTMsMjY5NjMsMzkwODAsMzM5MTQsMzQxMzUsMjAyMzksMjExMDMsMjQ0ODksMjQxMzMsMjYzODEsMzExMTksMzMxNDUsMzUwNzksMzUy''@;'; put 'put ''MDYsMjgxNDksMjQzNDMsMjUxNzMsMjc4MzIsMjAxNzUsMjkyODksMzk4MjYsMjA5OTgsMjE1NjMsMjIxMzIsMjI3MDcsMjQ5OTYsMjUxOTgsMjg5NTQsMjI4OTQsMzE4ODEsMzE5NjYsMzIwMjcsMzg2NDAsMjU5OTEsMzI4NjIsMTk5OTMsMjAzNDEsMjA4NTMsMjI1OTIsMjQxNjMsMjQxNzks''@;'; put 'put ''MjQzMzAsMjY1NjQsMjAwMDYsMzQxMDksMzgyODEsMzg0OTEsMzE4NTksMzg5MTMsMjA3MzEsMjI3MjEsMzAyOTQsMzA4ODcsMjEwMjksMzA2MjksMzQwNjUsMzE2MjIsMjA1NTksMjI3OTMsMjkyNTUsMzE2ODcsMzIyMzIsMzY3OTQsMzY4MjAsMzY5NDEsMjA0MTUsMjExOTMsMjMwODEsMjQz''@;'; put 'put ''MjEsMzg4MjksMjA0NDUsMzMzMDMsMzc2MTAsMjIyNzUsMjU0MjksMjc0OTcsMjk5OTUsMzUwMzYsMzY2MjgsMzEyOTgsMjEyMTUsMjI2NzUsMjQ5MTcsMjUwOTgsMjYyODYsMjc1OTcsMzE4MDcsMzM3NjksMjA1MTUsMjA0NzIsMjEyNTMsMjE1NzQsMjI1NzcsMjI4NTcsMjM0NTMsMjM3OTIs''@;'; put 'put ''MjM3OTEsMjM4NDksMjQyMTQsMjUyNjUsMjU0NDcsMjU5MTgsMjYwNDEsMjYzNzksMjc4NjEsMjc4NzMsMjg5MjEsMzA3NzAsMzIyOTksMzI5OTAsMzM0NTksMzM4MDQsMzQwMjgsMzQ1NjIsMzUwOTAsMzUzNzAsMzU5MTQsMzcwMzAsMzc1ODYsMzkxNjUsNDAxNzksNDAzMDAsMjAwNDcsMjAx''@;'; put 'put ''MjksMjA2MjEsMjEwNzgsMjIzNDYsMjI5NTIsMjQxMjUsMjQ1MzYsMjQ1MzcsMjUxNTEsMjYyOTIsMjYzOTUsMjY1NzYsMjY4MzQsMjA4ODIsMzIwMzMsMzI5MzgsMzMxOTIsMzU1ODQsMzU5ODAsMzYwMzEsMzc1MDIsMzg0NTAsMjE1MzYsMzg5NTYsMjEyNzEsMjA2OTMsMjEzNDAsMjI2OTYs''@;'; put 'put ''MjU3NzgsMjY0MjAsMjkyODcsMzA1NjYsMzEzMDIsMzczNTAsMjExODcsMjc4MDksMjc1MjYsMjI1MjgsMjQxNDAsMjI4NjgsMjY0MTIsMzI3NjMsMjA5NjEsMzA0MDYsMjU3MDUsMzA5NTIsMzk3NjQsNDA2MzUsMjI0NzUsMjI5NjksMjYxNTEsMjY1MjIsMjc1OTgsMjE3MzcsMjcwOTcsMjQx''@;'; put 'put ''NDksMzMxODAsMjY1MTcsMzk4NTAsMjY2MjIsNDAwMTgsMjY3MTcsMjAxMzQsMjA0NTEsMjE0NDgsMjUyNzMsMjY0MTEsMjc4MTksMzY4MDQsMjAzOTcsMzIzNjUsNDA2MzksMTk5NzUsMjQ5MzAsMjgyODgsMjg0NTksMzQwNjcsMjE2MTksMjY0MTAsMzk3NDksMjQwNTEsMzE2MzcsMjM3MjQs''@;'; put 'put ''MjM0OTQsMzQ1ODgsMjgyMzQsMzQwMDEsMzEyNTIsMzMwMzIsMjI5MzcsMzE4ODUsMjc2NjUsMzA0OTYsMjEyMDksMjI4MTgsMjg5NjEsMjkyNzksMzA2ODMsMzg2OTUsNDAyODksMjY4OTEsMjMxNjcsMjMwNjQsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMzA0MzEsMzY4NTUsMzc1MjgsNDAx''@;'; put 'put ''ODAsMjMwMTgsMjkyNzcsMjgzNTcsMjA4MTMsMjY4MjUsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MzQsMjU3MjAsMjcxNjksMzM1MzgsMjI5MTYsMjMzOTEsMjc2MTEsMjk0NjcsMzA0NTAsMzIxNzgsMzI3OTEsMzM5NDUsMjA3ODYsMjY0MDgsNDA2NjUsMzA0NDYsMjY0NjYsMjEyNDcsMzkxNzMs''@;'; put 'put ''MjM1ODgsMjUxNDcsMzE4NzAsMzYwMTYsMjE4MzksMjQ3NTgsMzIwMTEsMzgyNzIsMjEyNDksMjAwNjMsMjA5MTgsMjI4MTIsMjkyNDIsMzI4MjIsMzczMjYsMjQzNTcsMzA2OTAsMjEzODAsMjQ0NDEsMzIwMDQsMzQyMjAsMzUzNzksMzY0OTMsMzg3NDIsMjY2MTEsMzQyMjIsMzc5NzEsMjQ4''@;'; put 'put ''NDEsMjQ4NDAsMjc4MzMsMzAyOTAsMzU1NjUsMzY2NjQsMjE4MDcsMjAzMDUsMjA3NzgsMjExOTEsMjE0NTEsMjM0NjEsMjQxODksMjQ3MzYsMjQ5NjIsMjU1NTgsMjYzNzcsMjY1ODYsMjgyNjMsMjgwNDQsMjk0OTQsMjk0OTUsMzAwMDEsMzEwNTYsMzUwMjksMzU0ODAsMzY5MzgsMzcwMDks''@;'; put 'put ''MzcxMDksMzg1OTYsMzQ3MDEsMjI4MDUsMjAxMDQsMjAzMTMsMTk5ODIsMzU0NjUsMzY2NzEsMzg5MjgsMjA2NTMsMjQxODgsMjI5MzQsMjM0ODEsMjQyNDgsMjU1NjIsMjU1OTQsMjU3OTMsMjYzMzIsMjY5NTQsMjcwOTYsMjc5MTUsMjgzNDIsMjkwNzYsMjk5OTIsMzE0MDcsMzI2NTAsMzI3''@;'; put 'put ''NjgsMzM4NjUsMzM5OTMsMzUyMDEsMzU2MTcsMzYzNjIsMzY5NjUsMzg1MjUsMzkxNzgsMjQ5NTgsMjUyMzMsMjc0NDIsMjc3NzksMjgwMjAsMzI3MTYsMzI3NjQsMjgwOTYsMzI2NDUsMzQ3NDYsMzUwNjQsMjY0NjksMzM3MTMsMzg5NzIsMzg2NDcsMjc5MzEsMzIwOTcsMzM4NTMsMzcyMjYs''@;'; put 'put ''MjAwODEsMjEzNjUsMjM4ODgsMjczOTYsMjg2NTEsMzQyNTMsMzQzNDksMzUyMzksMjEwMzMsMjE1MTksMjM2NTMsMjY0NDYsMjY3OTIsMjk3MDIsMjk4MjcsMzAxNzgsMzUwMjMsMzUwNDEsMzczMjQsMzg2MjYsMzg1MjAsMjQ0NTksMjk1NzUsMzE0MzUsMzM4NzAsMjU1MDQsMzAwNTMsMjEx''@;'; put 'put ''MjksMjc5NjksMjgzMTYsMjk3MDUsMzAwNDEsMzA4MjcsMzE4OTAsMzg1MzQsMzE0NTIsNDA4NDUsMjA0MDYsMjQ5NDIsMjYwNTMsMzQzOTYsMjAxMDIsMjAxNDIsMjA2OTgsMjAwMDEsMjA5NDAsMjM1MzQsMjYwMDksMjY3NTMsMjgwOTIsMjk0NzEsMzAyNzQsMzA2MzcsMzEyNjAsMzE5NzUs''@;'; put 'put ''MzMzOTEsMzU1MzgsMzY5ODgsMzczMjcsMzg1MTcsMzg5MzYsMjExNDcsMzIyMDksMjA1MjMsMjE0MDAsMjY1MTksMjgxMDcsMjkxMzYsMjk3NDcsMzMyNTYsMzY2NTAsMzg1NjMsNDAwMjMsNDA2MDcsMjk3OTIsMjI1OTMsMjgwNTcsMzIwNDcsMzkwMDYsMjAxOTYsMjAyNzgsMjAzNjMsMjA5''@;'; put 'put ''MTksMjExNjksMjM5OTQsMjQ2MDQsMjk2MTgsMzEwMzYsMzM0OTEsMzc0MjgsMzg1ODMsMzg2NDYsMzg2NjYsNDA1OTksNDA4MDIsMjYyNzgsMjc1MDgsMjEwMTUsMjExNTUsMjg4NzIsMzUwMTAsMjQyNjUsMjQ2NTEsMjQ5NzYsMjg0NTEsMjkwMDEsMzE4MDYsMzIyNDQsMzI4NzksMzQwMzAs''@;'; put 'put ''MzY4OTksMzc2NzYsMjE1NzAsMzk3OTEsMjczNDcsMjg4MDksMzYwMzQsMzYzMzUsMzg3MDYsMjExNzIsMjMxMDUsMjQyNjYsMjQzMjQsMjYzOTEsMjcwMDQsMjcwMjgsMjgwMTAsMjg0MzEsMjkyODIsMjk0MzYsMzE3MjUsMzI3NjksMzI4OTQsMzQ2MzUsMzcwNzAsMjA4NDUsNDA1OTUsMzEx''@;'; put 'put ''MDgsMzI5MDcsMzc2ODIsMzU1NDIsMjA1MjUsMjE2NDQsMzU0NDEsMjc0OTgsMzYwMzYsMzMwMzEsMjQ3ODUsMjY1MjgsNDA0MzQsMjAxMjEsMjAxMjAsMzk5NTIsMzU0MzUsMzQyNDEsMzQxNTIsMjY4ODAsMjgyODYsMzA4NzEsMzMxMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCwyNDMzMiwxOTk4NCwxOTk4OSwyMDAxMCwyMDAxNywyMDAyMiwyMDAyOCwyMDAzMSwyMDAzNCwyMDA1NCwyMDA1NiwyMDA5OCwyMDEwMSwzNTk0NywyMDEwNiwzMzI5OCwyNDMzMywyMDExMCwyMDEyNiwyMDEyNywyMDEyOCwyMDEzMCwyMDE0NCwyMDE0Nywy''@;'; put 'put ''MDE1MCwyMDE3NCwyMDE3MywyMDE2NCwyMDE2NiwyMDE2MiwyMDE4MywyMDE5MCwyMDIwNSwyMDE5MSwyMDIxNSwyMDIzMywyMDMxNCwyMDI3MiwyMDMxNSwyMDMxNywyMDMxMSwyMDI5NSwyMDM0MiwyMDM2MCwyMDM2NywyMDM3NiwyMDM0NywyMDMyOSwyMDMzNiwyMDM2OSwyMDMzNSwyMDM1''@;'; put 'put ''OCwyMDM3NCwyMDc2MCwyMDQzNiwyMDQ0NywyMDQzMCwyMDQ0MCwyMDQ0MywyMDQzMywyMDQ0MiwyMDQzMiwyMDQ1MiwyMDQ1MywyMDUwNiwyMDUyMCwyMDUwMCwyMDUyMiwyMDUxNywyMDQ4NSwyMDI1MiwyMDQ3MCwyMDUxMywyMDUyMSwyMDUyNCwyMDQ3OCwyMDQ2MywyMDQ5NywyMDQ4Niwy''@;'; put 'put ''MDU0NywyMDU1MSwyNjM3MSwyMDU2NSwyMDU2MCwyMDU1MiwyMDU3MCwyMDU2NiwyMDU4OCwyMDYwMCwyMDYwOCwyMDYzNCwyMDYxMywyMDY2MCwyMDY1OCwyMDY4MSwyMDY4MiwyMDY1OSwyMDY3NCwyMDY5NCwyMDcwMiwyMDcwOSwyMDcxNywyMDcwNywyMDcxOCwyMDcyOSwyMDcyNSwyMDc0''@;'; put 'put ''NSwyMDczNywyMDczOCwyMDc1OCwyMDc1NywyMDc1NiwyMDc2MiwyMDc2OSwyMDc5NCwyMDc5MSwyMDc5NiwyMDc5NSwyMDc5OSwyMDgwMCwyMDgxOCwyMDgxMiwyMDgyMCwyMDgzNCwzMTQ4MCwyMDg0MSwyMDg0MiwyMDg0NiwyMDg2NCwyMDg2NiwyMjIzMiwyMDg3NiwyMDg3MywyMDg3OSwy''@;'; put 'put ''MDg4MSwyMDg4MywyMDg4NSwyMDg4NiwyMDkwMCwyMDkwMiwyMDg5OCwyMDkwNSwyMDkwNiwyMDkwNywyMDkxNSwyMDkxMywyMDkxNCwyMDkxMiwyMDkxNywyMDkyNSwyMDkzMywyMDkzNywyMDk1NSwyMDk2MCwzNDM4OSwyMDk2OSwyMDk3MywyMDk3NiwyMDk4MSwyMDk5MCwyMDk5NiwyMTAw''@;'; put 'put ''MywyMTAxMiwyMTAwNiwyMTAzMSwyMTAzNCwyMTAzOCwyMTA0MywyMTA0OSwyMTA3MSwyMTA2MCwyMTA2NywyMTA2OCwyMTA4NiwyMTA3NiwyMTA5OCwyMTEwOCwyMTA5NywyMTEwNywyMTExOSwyMTExNywyMTEzMywyMTE0MCwyMTEzOCwyMTEwNSwyMTEyOCwyMTEzNywzNjc3NiwzNjc3NSwy''@;'; put 'put ''MTE2NCwyMTE2NSwyMTE4MCwyMTE3MywyMTE4NSwyMTE5NywyMTIwNywyMTIxNCwyMTIxOSwyMTIyMiwzOTE0OSwyMTIxNiwyMTIzNSwyMTIzNywyMTI0MCwyMTI0MSwyMTI1NCwyMTI1NiwzMDAwOCwyMTI2MSwyMTI2NCwyMTI2MywyMTI2OSwyMTI3NCwyMTI4MywyMTI5NSwyMTI5NywyMTI5''@;'; put 'put ''OSwyMTMwNCwyMTMxMiwyMTMxOCwyMTMxNywxOTk5MSwyMTMyMSwyMTMyNSwyMDk1MCwyMTM0MiwyMTM1MywyMTM1OCwyMjgwOCwyMTM3MSwyMTM2NywyMTM3OCwyMTM5OCwyMTQwOCwyMTQxNCwyMTQxMywyMTQyMiwyMTQyNCwyMTQzMCwyMTQ0MywzMTc2MiwzODYxNywyMTQ3MSwyNjM2NCwy''@;'; put 'put ''OTE2NiwyMTQ4NiwyMTQ4MCwyMTQ4NSwyMTQ5OCwyMTUwNSwyMTU2NSwyMTU2OCwyMTU0OCwyMTU0OSwyMTU2NCwyMTU1MCwyMTU1OCwyMTU0NSwyMTUzMywyMTU4MiwyMTY0NywyMTYyMSwyMTY0NiwyMTU5OSwyMTYxNywyMTYyMywyMTYxNiwyMTY1MCwyMTYyNywyMTYzMiwyMTYyMiwyMTYz''@;'; put 'put ''NiwyMTY0OCwyMTYzOCwyMTcwMywyMTY2NiwyMTY4OCwyMTY2OSwyMTY3NiwyMTcwMCwyMTcwNCwyMTY3MiwyMTY3NSwyMTY5OCwyMTY2OCwyMTY5NCwyMTY5MiwyMTcyMCwyMTczMywyMTczNCwyMTc3NSwyMTc4MCwyMTc1NywyMTc0MiwyMTc0MSwyMTc1NCwyMTczMCwyMTgxNywyMTgyNCwy''@;'; put 'put ''MTg1OSwyMTgzNiwyMTgwNiwyMTg1MiwyMTgyOSwyMTg0NiwyMTg0NywyMTgxNiwyMTgxMSwyMTg1MywyMTkxMywyMTg4OCwyMTY3OSwyMTg5OCwyMTkxOSwyMTg4MywyMTg4NiwyMTkxMiwyMTkxOCwyMTkzNCwyMTg4NCwyMTg5MSwyMTkyOSwyMTg5NSwyMTkyOCwyMTk3OCwyMTk1NywyMTk4''@;'; put 'put ''MywyMTk1NiwyMTk4MCwyMTk4OCwyMTk3MiwyMjAzNiwyMjAwNywyMjAzOCwyMjAxNCwyMjAxMywyMjA0MywyMjAwOSwyMjA5NCwyMjA5NiwyOTE1MSwyMjA2OCwyMjA3MCwyMjA2NiwyMjA3MiwyMjEyMywyMjExNiwyMjA2MywyMjEyNCwyMjEyMiwyMjE1MCwyMjE0NCwyMjE1NCwyMjE3Niwy''@;'; put 'put ''MjE2NCwyMjE1OSwyMjE4MSwyMjE5MCwyMjE5OCwyMjE5NiwyMjIxMCwyMjIwNCwyMjIwOSwyMjIxMSwyMjIwOCwyMjIxNiwyMjIyMiwyMjIyNSwyMjIyNywyMjIzMSwyMjI1NCwyMjI2NSwyMjI3MiwyMjI3MSwyMjI3NiwyMjI4MSwyMjI4MCwyMjI4MywyMjI4NSwyMjI5MSwyMjI5NiwyMjI5''@;'; put 'put ''NCwyMTk1OSwyMjMwMCwyMjMxMCwyMjMyNywyMjMyOCwyMjM1MCwyMjMzMSwyMjMzNiwyMjM1MSwyMjM3NywyMjQ2NCwyMjQwOCwyMjM2OSwyMjM5OSwyMjQwOSwyMjQxOSwyMjQzMiwyMjQ1MSwyMjQzNiwyMjQ0MiwyMjQ0OCwyMjQ2NywyMjQ3MCwyMjQ4NCwyMjQ4MiwyMjQ4MywyMjUzOCwy''@;'; put 'put ''MjQ4NiwyMjQ5OSwyMjUzOSwyMjU1MywyMjU1NywyMjY0MiwyMjU2MSwyMjYyNiwyMjYwMywyMjY0MCwyNzU4NCwyMjYxMCwyMjU4OSwyMjY0OSwyMjY2MSwyMjcxMywyMjY4NywyMjY5OSwyMjcxNCwyMjc1MCwyMjcxNSwyMjcxMiwyMjcwMiwyMjcyNSwyMjczOSwyMjczNywyMjc0MywyMjc0''@;'; put 'put ''NSwyMjc0NCwyMjc1NywyMjc0OCwyMjc1NiwyMjc1MSwyMjc2NywyMjc3OCwyMjc3NywyMjc3OSwyMjc4MCwyMjc4MSwyMjc4NiwyMjc5NCwyMjgwMCwyMjgxMSwyNjc5MCwyMjgyMSwyMjgyOCwyMjgyOSwyMjgzNCwyMjg0MCwyMjg0NiwzMTQ0MiwyMjg2OSwyMjg2NCwyMjg2MiwyMjg3NCwy''@;'; put 'put ''Mjg3MiwyMjg4MiwyMjg4MCwyMjg4NywyMjg5MiwyMjg4OSwyMjkwNCwyMjkxMywyMjk0MSwyMDMxOCwyMDM5NSwyMjk0NywyMjk2MiwyMjk4MiwyMzAxNiwyMzAwNCwyMjkyNSwyMzAwMSwyMzAwMiwyMzA3NywyMzA3MSwyMzA1NywyMzA2OCwyMzA0OSwyMzA2NiwyMzEwNCwyMzE0OCwyMzEx''@;'; put 'put ''MywyMzA5MywyMzA5NCwyMzEzOCwyMzE0NiwyMzE5NCwyMzIyOCwyMzIzMCwyMzI0MywyMzIzNCwyMzIyOSwyMzI2NywyMzI1NSwyMzI3MCwyMzI3MywyMzI1NCwyMzI5MCwyMzI5MSwyMzMwOCwyMzMwNywyMzMxOCwyMzM0NiwyMzI0OCwyMzMzOCwyMzM1MCwyMzM1OCwyMzM2MywyMzM2NSwy''@;'; put 'put ''MzM2MCwyMzM3NywyMzM4MSwyMzM4NiwyMzM4NywyMzM5NywyMzQwMSwyMzQwOCwyMzQxMSwyMzQxMywyMzQxNiwyNTk5MiwyMzQxOCwyMzQyNCwyMzQyNywyMzQ2MiwyMzQ4MCwyMzQ5MSwyMzQ5NSwyMzQ5NywyMzUwOCwyMzUwNCwyMzUyNCwyMzUyNiwyMzUyMiwyMzUxOCwyMzUyNSwyMzUz''@;'; put 'put ''MSwyMzUzNiwyMzU0MiwyMzUzOSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2NSwyMzU3MSwyMzU4NCwyMzU4NiwyMzU5MiwyMzYwOCwyMzYwOSwyMzYxNywyMzYyMiwyMzYzMCwyMzYzNSwyMzYzMiwyMzYzMSwyMzQwOSwyMzY2MCwyMzY2MiwyMDA2NiwyMzY3MCwyMzY3MywyMzY5MiwyMzY5Nywy''@;'; put 'put ''MzcwMCwyMjkzOSwyMzcyMywyMzczOSwyMzczNCwyMzc0MCwyMzczNSwyMzc0OSwyMzc0MiwyMzc1MSwyMzc2OSwyMzc4NSwyMzgwNSwyMzgwMiwyMzc4OSwyMzk0OCwyMzc4NiwyMzgxOSwyMzgyOSwyMzgzMSwyMzkwMCwyMzgzOSwyMzgzNSwyMzgyNSwyMzgyOCwyMzg0MiwyMzgzNCwyMzgz''@;'; put 'put ''MywyMzgzMiwyMzg4NCwyMzg5MCwyMzg4NiwyMzg4MywyMzkxNiwyMzkyMywyMzkyNiwyMzk0MywyMzk0MCwyMzkzOCwyMzk3MCwyMzk2NSwyMzk4MCwyMzk4MiwyMzk5NywyMzk1MiwyMzk5MSwyMzk5NiwyNDAwOSwyNDAxMywyNDAxOSwyNDAxOCwyNDAyMiwyNDAyNywyNDA0MywyNDA1MCwy''@;'; put 'put ''NDA1MywyNDA3NSwyNDA5MCwyNDA4OSwyNDA4MSwyNDA5MSwyNDExOCwyNDExOSwyNDEzMiwyNDEzMSwyNDEyOCwyNDE0MiwyNDE1MSwyNDE0OCwyNDE1OSwyNDE2MiwyNDE2NCwyNDEzNSwyNDE4MSwyNDE4MiwyNDE4Niw0MDYzNiwyNDE5MSwyNDIyNCwyNDI1NywyNDI1OCwyNDI2NCwyNDI3''@;'; put 'put ''MiwyNDI3MSwyNDI3OCwyNDI5MSwyNDI4NSwyNDI4MiwyNDI4MywyNDI5MCwyNDI4OSwyNDI5NiwyNDI5NywyNDMwMCwyNDMwNSwyNDMwNywyNDMwNCwyNDMwOCwyNDMxMiwyNDMxOCwyNDMyMywyNDMyOSwyNDQxMywyNDQxMiwyNDMzMSwyNDMzNywyNDM0MiwyNDM2MSwyNDM2NSwyNDM3Niwy''@;'; put 'put ''NDM4NSwyNDM5MiwyNDM5NiwyNDM5OCwyNDM2NywyNDQwMSwyNDQwNiwyNDQwNywyNDQwOSwyNDQxNywyNDQyOSwyNDQzNSwyNDQzOSwyNDQ1MSwyNDQ1MCwyNDQ0NywyNDQ1OCwyNDQ1NiwyNDQ2NSwyNDQ1NSwyNDQ3OCwyNDQ3MywyNDQ3MiwyNDQ4MCwyNDQ4OCwyNDQ5MywyNDUwOCwyNDUz''@;'; put 'put ''NCwyNDU3MSwyNDU0OCwyNDU2OCwyNDU2MSwyNDU0MSwyNDc1NSwyNDU3NSwyNDYwOSwyNDY3MiwyNDYwMSwyNDU5MiwyNDYxNywyNDU5MCwyNDYyNSwyNDYwMywyNDU5NywyNDYxOSwyNDYxNCwyNDU5MSwyNDYzNCwyNDY2NiwyNDY0MSwyNDY4MiwyNDY5NSwyNDY3MSwyNDY1MCwyNDY0Niwy''@;'; put 'put ''NDY1MywyNDY3NSwyNDY0MywyNDY3NiwyNDY0MiwyNDY4NCwyNDY4MywyNDY2NSwyNDcwNSwyNDcxNywyNDgwNywyNDcwNywyNDczMCwyNDcwOCwyNDczMSwyNDcyNiwyNDcyNywyNDcyMiwyNDc0MywyNDcxNSwyNDgwMSwyNDc2MCwyNDgwMCwyNDc4NywyNDc1NiwyNDU2MCwyNDc2NSwyNDc3''@;'; put 'put ''NCwyNDc1NywyNDc5MiwyNDkwOSwyNDg1MywyNDgzOCwyNDgyMiwyNDgyMywyNDgzMiwyNDgyMCwyNDgyNiwyNDgzNSwyNDg2NSwyNDgyNywyNDgxNywyNDg0NSwyNDg0NiwyNDkwMywyNDg5NCwyNDg3MiwyNDg3MSwyNDkwNiwyNDg5NSwyNDg5MiwyNDg3NiwyNDg4NCwyNDg5MywyNDg5OCwy''@;'; put 'put ''NDkwMCwyNDk0NywyNDk1MSwyNDkyMCwyNDkyMSwyNDkyMiwyNDkzOSwyNDk0OCwyNDk0MywyNDkzMywyNDk0NSwyNDkyNywyNDkyNSwyNDkxNSwyNDk0OSwyNDk4NSwyNDk4MiwyNDk2NywyNTAwNCwyNDk4MCwyNDk4NiwyNDk3MCwyNDk3NywyNTAwMywyNTAwNiwyNTAzNiwyNTAzNCwyNTAz''@;'; put 'put ''MywyNTA3OSwyNTAzMiwyNTAyNywyNTAzMCwyNTAxOCwyNTAzNSwzMjYzMywyNTAzNywyNTA2MiwyNTA1OSwyNTA3OCwyNTA4MiwyNTA3NiwyNTA4NywyNTA4NSwyNTA4NCwyNTA4NiwyNTA4OCwyNTA5NiwyNTA5NywyNTEwMSwyNTEwMCwyNTEwOCwyNTExNSwyNTExOCwyNTEyMSwyNTEzMCwy''@;'; put 'put ''NTEzNCwyNTEzNiwyNTEzOCwyNTEzOSwyNTE1MywyNTE2NiwyNTE4MiwyNTE4NywyNTE3OSwyNTE4NCwyNTE5MiwyNTIxMiwyNTIxOCwyNTIyNSwyNTIxNCwyNTIzNCwyNTIzNSwyNTIzOCwyNTMwMCwyNTIxOSwyNTIzNiwyNTMwMywyNTI5NywyNTI3NSwyNTI5NSwyNTM0MywyNTI4NiwyNTgx''@;'; put 'put ''MiwyNTI4OCwyNTMwOCwyNTI5MiwyNTI5MCwyNTI4MiwyNTI4NywyNTI0MywyNTI4OSwyNTM1NiwyNTMyNiwyNTMyOSwyNTM4MywyNTM0NiwyNTM1MiwyNTMyNywyNTMzMywyNTQyNCwyNTQwNiwyNTQyMSwyNTYyOCwyNTQyMywyNTQ5NCwyNTQ4NiwyNTQ3MiwyNTUxNSwyNTQ2MiwyNTUwNywy''@;'; put 'put ''NTQ4NywyNTQ4MSwyNTUwMywyNTUyNSwyNTQ1MSwyNTQ0OSwyNTUzNCwyNTU3NywyNTUzNiwyNTU0MiwyNTU3MSwyNTU0NSwyNTU1NCwyNTU5MCwyNTU0MCwyNTYyMiwyNTY1MiwyNTYwNiwyNTYxOSwyNTYzOCwyNTY1NCwyNTg4NSwyNTYyMywyNTY0MCwyNTYxNSwyNTcwMywyNTcxMSwyNTcx''@;'; put 'put ''OCwyNTY3OCwyNTg5OCwyNTc0OSwyNTc0NywyNTc2NSwyNTc2OSwyNTczNiwyNTc4OCwyNTgxOCwyNTgxMCwyNTc5NywyNTc5OSwyNTc4NywyNTgxNiwyNTc5NCwyNTg0MSwyNTgzMSwzMzI4OSwyNTgyNCwyNTgyNSwyNTI2MCwyNTgyNywyNTgzOSwyNTkwMCwyNTg0NiwyNTg0NCwyNTg0Miwy''@;'; put 'put ''NTg1MCwyNTg1NiwyNTg1MywyNTg4MCwyNTg4NCwyNTg2MSwyNTg5MiwyNTg5MSwyNTg5OSwyNTkwOCwyNTkwOSwyNTkxMSwyNTkxMCwyNTkxMiwzMDAyNywyNTkyOCwyNTk0MiwyNTk0MSwyNTkzMywyNTk0NCwyNTk1MCwyNTk0OSwyNTk3MCwyNTk3NiwyNTk4NiwyNTk4NywzNTcyMiwyNjAx''@;'; put 'put ''MSwyNjAxNSwyNjAyNywyNjAzOSwyNjA1MSwyNjA1NCwyNjA0OSwyNjA1MiwyNjA2MCwyNjA2NiwyNjA3NSwyNjA3MywyNjA4MCwyNjA4MSwyNjA5NywyNjQ4MiwyNjEyMiwyNjExNSwyNjEwNywyNjQ4MywyNjE2NSwyNjE2NiwyNjE2NCwyNjE0MCwyNjE5MSwyNjE4MCwyNjE4NSwyNjE3Nywy''@;'; put 'put ''NjIwNiwyNjIwNSwyNjIxMiwyNjIxNSwyNjIxNiwyNjIwNywyNjIxMCwyNjIyNCwyNjI0MywyNjI0OCwyNjI1NCwyNjI0OSwyNjI0NCwyNjI2NCwyNjI2OSwyNjMwNSwyNjI5NywyNjMxMywyNjMwMiwyNjMwMCwyNjMwOCwyNjI5NiwyNjMyNiwyNjMzMCwyNjMzNiwyNjE3NSwyNjM0MiwyNjM0''@;'; put 'put ''NSwyNjM1MiwyNjM1NywyNjM1OSwyNjM4MywyNjM5MCwyNjM5OCwyNjQwNiwyNjQwNywzODcxMiwyNjQxNCwyNjQzMSwyNjQyMiwyNjQzMywyNjQyNCwyNjQyMywyNjQzOCwyNjQ2MiwyNjQ2NCwyNjQ1NywyNjQ2NywyNjQ2OCwyNjUwNSwyNjQ4MCwyNjUzNywyNjQ5MiwyNjQ3NCwyNjUwOCwy''@;'; put 'put ''NjUwNywyNjUzNCwyNjUyOSwyNjUwMSwyNjU1MSwyNjYwNywyNjU0OCwyNjYwNCwyNjU0NywyNjYwMSwyNjU1MiwyNjU5NiwyNjU5MCwyNjU4OSwyNjU5NCwyNjYwNiwyNjU1MywyNjU3NCwyNjU2NiwyNjU5OSwyNzI5MiwyNjY1NCwyNjY5NCwyNjY2NSwyNjY4OCwyNjcwMSwyNjY3NCwyNjcw''@;'; put 'put ''MiwyNjgwMywyNjY2NywyNjcxMywyNjcyMywyNjc0MywyNjc1MSwyNjc4MywyNjc2NywyNjc5NywyNjc3MiwyNjc4MSwyNjc3OSwyNjc1NSwyNzMxMCwyNjgwOSwyNjc0MCwyNjgwNSwyNjc4NCwyNjgxMCwyNjg5NSwyNjc2NSwyNjc1MCwyNjg4MSwyNjgyNiwyNjg4OCwyNjg0MCwyNjkxNCwy''@;'; put 'put ''NjkxOCwyNjg0OSwyNjg5MiwyNjgyOSwyNjgzNiwyNjg1NSwyNjgzNywyNjkzNCwyNjg5OCwyNjg4NCwyNjgzOSwyNjg1MSwyNjkxNywyNjg3MywyNjg0OCwyNjg2MywyNjkyMCwyNjkyMiwyNjkwNiwyNjkxNSwyNjkxMywyNjgyMiwyNzAwMSwyNjk5OSwyNjk3MiwyN2UzLDI2OTg3LDI2OTY0''@;'; put 'put ''LDI3MDA2LDI2OTkwLDI2OTM3LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDczLDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3''@;'; put 'put ''MDI1LDI3MDQwLDI3MDM2LDI3MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUw''@;'; put 'put ''LDI3MTkwLDI3MjU2LDI3MjA3LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTkyLDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3''@;'; put 'put ''MzU0LDI3MzcwLDI3Mzg3LDI3Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgzLDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIw''@;'; put 'put ''LDI3NTI0LDI3NTIzLDI3NTMzLDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYyLDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3''@;'; put 'put ''Njc1LDI3Njg0LDI3NjgzLDI3NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYzLDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0''@;'; put 'put ''LDI3ODY3LDI3ODg3LDI3ODY1LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUxLDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4''@;'; put 'put ''MTcwLDI4MDg1LDI4MTAzLDI4MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAz''@;'; put 'put ''LDI4Mjc4LDI4MjM3LDI4MTkxLDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4''@;'; put 'put ''NDMzLDI4NzQ4LDI4Mzk2LDI4NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYx''@;'; put 'put ''LDI4NjEwLDI4NTE4LDI4NTk1LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4''@;'; put 'put ''NzAxLDI4Njk2LDI4NzAzLDI4NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMw''@;'; put 'put ''LDI5MDI2LDI5MDA0LDI5MDE0LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5''@;'; put 'put ''MjI0LDI5MjI5LDI5MjI4LDI5MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0''@;'; put 'put ''LDI5NDEwLDI5NDA4LDI5NDA5LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUwLDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5''@;'; put 'put ''NjQwLDI5NjE5LDI5NjQ2LDI5NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAxLDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1''@;'; put 'put ''LDI5ODU0LDI5ODYzLDI5ODk4LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIzLDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMw''@;'; put 'put ''MDEyLDMwMDIwLDMwMDI5LDMwMDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMwMDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMwMDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAwLDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMx''@;'; put 'put ''LDMwMTQ3LDMwMTMzLDMwMTQxLDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTkyLDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMwMjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMw''@;'; put 'put ''MjQyLDMwMjQ0LDMwMjYwLDMwMjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMwMzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMwMzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMyLDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4''@;'; put 'put ''LDMwMzU1LDMwMzYxLDMwMzYyLDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQyLDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMwNDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMw''@;'; put 'put ''NDkxLDMwNTE5LDMwNTIwLDMwNTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMwNTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMwNjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUyLDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgy''@;'; put 'put ''LDMwNjg0LDMwNjkxLDMwNzAyLDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUyLDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgzLDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMwOTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMw''@;'; put 'put ''OTIyLDMwOTU2LDMwOTUxLDMwOTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMwOTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMxMDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1''@;'; put 'put ''LDMxMTYxLDMxMTYyLDMxMTc3LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAzLDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkxLDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMxMzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMx''@;'; put 'put ''MzUzLDMxMzU3LDMxMzY4LDMxMzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMxNDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMxNDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5''@;'; put 'put ''LDMxNDcyLDMxNDkwLDMxNTAzLDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEzLDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMxNjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMx''@;'; put 'put ''NjQ1LDMxNjQwLDMxNjQ3LDMxNjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMxNjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMxNzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMx''@;'; put 'put ''LDMxNzM1LDMxNzY3LDMxNzU3LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMxODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMx''@;'; put 'put ''OTE3LDMxOTA2LDMxOTE1LDMxOTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMxOTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMxOTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIx''@;'; put 'put ''LDMyMDEwLDMyMDY5LDMyMDc1LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcwLDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMyMTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMy''@;'; put 'put ''MTg5LDMyMTcxLDMyMzE3LDMyMTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMyMTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMyMjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4''@;'; put 'put ''LDMyMzE1LDMyMzA5LDMyMzEzLDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgwLDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMy''@;'; put 'put ''NDAwLDMyNDAzLDMyNDA0LDMyNDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMyNTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMyNjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4''@;'; put 'put ''LDMyNjQ3LDMyNjUyLDMyNjYwLDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMy''@;'; put 'put ''Nzc5LDMyNzg2LDMyNzkyLDMyNzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMyODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMyODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIz''@;'; put 'put ''LDMyOTE1LDMyOTIyLDMyOTQxLDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMzMDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMz''@;'; put 'put ''MTM0LDMzMTI1LDMzMTI2LDMzMTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMzMTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMzMjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQx''@;'; put 'put ''LDMzMjQwLDMzMjI0LDMzMjQyLDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAyLDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMzMzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMz''@;'; put 'put ''MzgwLDMzMzc4LDMzMzg0LDMzMzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMzNDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMzNTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIzLDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAy''@;'; put 'put ''LDMzNTQyLDMzNTAwLDMzNTQ1LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYwLDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMzNjk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMz''@;'; put 'put ''NjYwLDMzNzE3LDMzNjUxLDMzNjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMzODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMzNzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAx''@;'; put 'put ''LDMzODM0LDMzODUyLDM0MTM4LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAyLDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkwLDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMzOTk3LDMzOTc5LDM0MDEwLDM0ZTMsMzM5ODUsMzM5OTAsMzQw''@;'; put 'put ''MDYsMzM5NTMsMzQwODEsMzQwNDcsMzQwMzYsMzQwNzEsMzQwNzIsMzQwOTIsMzQwNzksMzQwNjksMzQwNjgsMzQwNDQsMzQxMTIsMzQxNDcsMzQxMzYsMzQxMjAsMzQxMTMsMzQzMDYsMzQxMjMsMzQxMzMsMzQxNzYsMzQyMTIsMzQxODQsMzQxOTMsMzQxODYsMzQyMTYsMzQxNTcsMzQxOTYs''@;'; put 'put ''MzQyMDMsMzQyODIsMzQxODMsMzQyMDQsMzQxNjcsMzQxNzQsMzQxOTIsMzQyNDksMzQyMzQsMzQyNTUsMzQyMzMsMzQyNTYsMzQyNjEsMzQyNjksMzQyNzcsMzQyNjgsMzQyOTcsMzQzMTQsMzQzMjMsMzQzMTUsMzQzMDIsMzQyOTgsMzQzMTAsMzQzMzgsMzQzMzAsMzQzNTIsMzQzNjcsMzQz''@;'; put 'put ''ODEsMjAwNTMsMzQzODgsMzQzOTksMzQ0MDcsMzQ0MTcsMzQ0NTEsMzQ0NjcsMzQ0NzMsMzQ0NzQsMzQ0NDMsMzQ0NDQsMzQ0ODYsMzQ0NzksMzQ1MDAsMzQ1MDIsMzQ0ODAsMzQ1MDUsMzQ4NTEsMzQ0NzUsMzQ1MTYsMzQ1MjYsMzQ1MzcsMzQ1NDAsMzQ1MjcsMzQ1MjMsMzQ1NDMsMzQ1Nzgs''@;'; put 'put ''MzQ1NjYsMzQ1NjgsMzQ1NjAsMzQ1NjMsMzQ1NTUsMzQ1NzcsMzQ1NjksMzQ1NzMsMzQ1NTMsMzQ1NzAsMzQ2MTIsMzQ2MjMsMzQ2MTUsMzQ2MTksMzQ1OTcsMzQ2MDEsMzQ1ODYsMzQ2NTYsMzQ2NTUsMzQ2ODAsMzQ2MzYsMzQ2MzgsMzQ2NzYsMzQ2NDcsMzQ2NjQsMzQ2NzAsMzQ2NDksMzQ2''@;'; put 'put ''NDMsMzQ2NTksMzQ2NjYsMzQ4MjEsMzQ3MjIsMzQ3MTksMzQ2OTAsMzQ3MzUsMzQ3NjMsMzQ3NDksMzQ3NTIsMzQ3NjgsMzg2MTQsMzQ3MzEsMzQ3NTYsMzQ3MzksMzQ3NTksMzQ3NTgsMzQ3NDcsMzQ3OTksMzQ4MDIsMzQ3ODQsMzQ4MzEsMzQ4MjksMzQ4MTQsMzQ4MDYsMzQ4MDcsMzQ4MzAs''@;'; put 'put ''MzQ3NzAsMzQ4MzMsMzQ4MzgsMzQ4MzcsMzQ4NTAsMzQ4NDksMzQ4NjUsMzQ4NzAsMzQ4NzMsMzQ4NTUsMzQ4NzUsMzQ4ODQsMzQ4ODIsMzQ4OTgsMzQ5MDUsMzQ5MTAsMzQ5MTQsMzQ5MjMsMzQ5NDUsMzQ5NDIsMzQ5NzQsMzQ5MzMsMzQ5NDEsMzQ5OTcsMzQ5MzAsMzQ5NDYsMzQ5NjcsMzQ5''@;'; put 'put ''NjIsMzQ5OTAsMzQ5NjksMzQ5NzgsMzQ5NTcsMzQ5ODAsMzQ5OTIsMzUwMDcsMzQ5OTMsMzUwMTEsMzUwMTIsMzUwMjgsMzUwMzIsMzUwMzMsMzUwMzcsMzUwNjUsMzUwNzQsMzUwNjgsMzUwNjAsMzUwNDgsMzUwNTgsMzUwNzYsMzUwODQsMzUwODIsMzUwOTEsMzUxMzksMzUxMDIsMzUxMDks''@;'; put 'put ''MzUxMTQsMzUxMTUsMzUxMzcsMzUxNDAsMzUxMzEsMzUxMjYsMzUxMjgsMzUxNDgsMzUxMDEsMzUxNjgsMzUxNjYsMzUxNzQsMzUxNzIsMzUxODEsMzUxNzgsMzUxODMsMzUxODgsMzUxOTEsMzUxOTgsMzUyMDMsMzUyMDgsMzUyMTAsMzUyMTksMzUyMjQsMzUyMzMsMzUyNDEsMzUyMzgsMzUy''@;'; put 'put ''NDQsMzUyNDcsMzUyNTAsMzUyNTgsMzUyNjEsMzUyNjMsMzUyNjQsMzUyOTAsMzUyOTIsMzUyOTMsMzUzMDMsMzUzMTYsMzUzMjAsMzUzMzEsMzUzNTAsMzUzNDQsMzUzNDAsMzUzNTUsMzUzNTcsMzUzNjUsMzUzODIsMzUzOTMsMzU0MTksMzU0MTAsMzUzOTgsMzU0MDAsMzU0NTIsMzU0Mzcs''@;'; put 'put ''MzU0MzYsMzU0MjYsMzU0NjEsMzU0NTgsMzU0NjAsMzU0OTYsMzU0ODksMzU0NzMsMzU0OTMsMzU0OTQsMzU0ODIsMzU0OTEsMzU1MjQsMzU1MzMsMzU1MjIsMzU1NDYsMzU1NjMsMzU1NzEsMzU1NTksMzU1NTYsMzU1NjksMzU2MDQsMzU1NTIsMzU1NTQsMzU1NzUsMzU1NTAsMzU1NDcsMzU1''@;'; put 'put ''OTYsMzU1OTEsMzU2MTAsMzU1NTMsMzU2MDYsMzU2MDAsMzU2MDcsMzU2MTYsMzU2MzUsMzg4MjcsMzU2MjIsMzU2MjcsMzU2NDYsMzU2MjQsMzU2NDksMzU2NjAsMzU2NjMsMzU2NjIsMzU2NTcsMzU2NzAsMzU2NzUsMzU2NzQsMzU2OTEsMzU2NzksMzU2OTIsMzU2OTUsMzU3MDAsMzU3MDks''@;'; put 'put ''MzU3MTIsMzU3MjQsMzU3MjYsMzU3MzAsMzU3MzEsMzU3MzQsMzU3MzcsMzU3MzgsMzU4OTgsMzU5MDUsMzU5MDMsMzU5MTIsMzU5MTYsMzU5MTgsMzU5MjAsMzU5MjUsMzU5MzgsMzU5NDgsMzU5NjAsMzU5NjIsMzU5NzAsMzU5NzcsMzU5NzMsMzU5NzgsMzU5ODEsMzU5ODIsMzU5ODgsMzU5''@;'; put 'put ''NjQsMzU5OTIsMjUxMTcsMzYwMTMsMzYwMTAsMzYwMjksMzYwMTgsMzYwMTksMzYwMTQsMzYwMjIsMzYwNDAsMzYwMzMsMzYwNjgsMzYwNjcsMzYwNTgsMzYwOTMsMzYwOTAsMzYwOTEsMzYxMDAsMzYxMDEsMzYxMDYsMzYxMDMsMzYxMTEsMzYxMDksMzYxMTIsNDA3ODIsMzYxMTUsMzYwNDUs''@;'; put 'put ''MzYxMTYsMzYxMTgsMzYxOTksMzYyMDUsMzYyMDksMzYyMTEsMzYyMjUsMzYyNDksMzYyOTAsMzYyODYsMzYyODIsMzYzMDMsMzYzMTQsMzYzMTAsMzYzMDAsMzYzMTUsMzYyOTksMzYzMzAsMzYzMzEsMzYzMTksMzYzMjMsMzYzNDgsMzYzNjAsMzYzNjEsMzYzNTEsMzYzODEsMzYzODIsMzYz''@;'; put 'put ''NjgsMzYzODMsMzY0MTgsMzY0MDUsMzY0MDAsMzY0MDQsMzY0MjYsMzY0MjMsMzY0MjUsMzY0MjgsMzY0MzIsMzY0MjQsMzY0NDEsMzY0NTIsMzY0NDgsMzYzOTQsMzY0NTEsMzY0MzcsMzY0NzAsMzY0NjYsMzY0NzYsMzY0ODEsMzY0ODcsMzY0ODUsMzY0ODQsMzY0OTEsMzY0OTAsMzY0OTks''@;'; put 'put ''MzY0OTcsMzY1MDAsMzY1MDUsMzY1MjIsMzY1MTMsMzY1MjQsMzY1MjgsMzY1NTAsMzY1MjksMzY1NDIsMzY1NDksMzY1NTIsMzY1NTUsMzY1NzEsMzY1NzksMzY2MDQsMzY2MDMsMzY1ODcsMzY2MDYsMzY2MTgsMzY2MTMsMzY2MjksMzY2MjYsMzY2MzMsMzY2MjcsMzY2MzYsMzY2MzksMzY2''@;'; put 'put ''MzUsMzY2MjAsMzY2NDYsMzY2NTksMzY2NjcsMzY2NjUsMzY2NzcsMzY2NzQsMzY2NzAsMzY2ODQsMzY2ODEsMzY2NzgsMzY2ODYsMzY2OTUsMzY3MDAsMzY3MDYsMzY3MDcsMzY3MDgsMzY3NjQsMzY3NjcsMzY3NzEsMzY3ODEsMzY3ODMsMzY3OTEsMzY4MjYsMzY4MzcsMzY4MzQsMzY4NDIs''@;'; put 'put ''MzY4NDcsMzY5OTksMzY4NTIsMzY4NjksMzY4NTcsMzY4NTgsMzY4ODEsMzY4ODUsMzY4OTcsMzY4NzcsMzY4OTQsMzY4ODYsMzY4NzUsMzY5MDMsMzY5MTgsMzY5MTcsMzY5MjEsMzY4NTYsMzY5NDMsMzY5NDQsMzY5NDUsMzY5NDYsMzY4NzgsMzY5MzcsMzY5MjYsMzY5NTAsMzY5NTIsMzY5''@;'; put 'put ''NTgsMzY5NjgsMzY5NzUsMzY5ODIsMzg1NjgsMzY5NzgsMzY5OTQsMzY5ODksMzY5OTMsMzY5OTIsMzcwMDIsMzcwMDEsMzcwMDcsMzcwMzIsMzcwMzksMzcwNDEsMzcwNDUsMzcwOTAsMzcwOTIsMjUxNjAsMzcwODMsMzcxMjIsMzcxMzgsMzcxNDUsMzcxNzAsMzcxNjgsMzcxOTQsMzcyMDYs''@;'; put 'put ''MzcyMDgsMzcyMTksMzcyMjEsMzcyMjUsMzcyMzUsMzcyMzQsMzcyNTksMzcyNTcsMzcyNTAsMzcyODIsMzcyOTEsMzcyOTUsMzcyOTAsMzczMDEsMzczMDAsMzczMDYsMzczMTIsMzczMTMsMzczMjEsMzczMjMsMzczMjgsMzczMzQsMzczNDMsMzczNDUsMzczMzksMzczNzIsMzczNjUsMzcz''@;'; put 'put ''NjYsMzc0MDYsMzczNzUsMzczOTYsMzc0MjAsMzczOTcsMzczOTMsMzc0NzAsMzc0NjMsMzc0NDUsMzc0NDksMzc0NzYsMzc0NDgsMzc1MjUsMzc0MzksMzc0NTEsMzc0NTYsMzc1MzIsMzc1MjYsMzc1MjMsMzc1MzEsMzc0NjYsMzc1ODMsMzc1NjEsMzc1NTksMzc2MDksMzc2NDcsMzc2MjYs''@;'; put 'put ''Mzc3MDAsMzc2NzgsMzc2NTcsMzc2NjYsMzc2NTgsMzc2NjcsMzc2OTAsMzc2ODUsMzc2OTEsMzc3MjQsMzc3MjgsMzc3NTYsMzc3NDIsMzc3MTgsMzc4MDgsMzc4MDQsMzc4MDUsMzc3ODAsMzc4MTcsMzc4NDYsMzc4NDcsMzc4NjQsMzc4NjEsMzc4NDgsMzc4MjcsMzc4NTMsMzc4NDAsMzc4''@;'; put 'put ''MzIsMzc4NjAsMzc5MTQsMzc5MDgsMzc5MDcsMzc4OTEsMzc4OTUsMzc5MDQsMzc5NDIsMzc5MzEsMzc5NDEsMzc5MjEsMzc5NDYsMzc5NTMsMzc5NzAsMzc5NTYsMzc5NzksMzc5ODQsMzc5ODYsMzc5ODIsMzc5OTQsMzc0MTcsMzhlMywzODAwNSwzODAwNywzODAxMywzNzk3OCwzODAxMiwz''@;'; put 'put ''ODAxNCwzODAxNywzODAxNSwzODI3NCwzODI3OSwzODI4MiwzODI5MiwzODI5NCwzODI5NiwzODI5NywzODMwNCwzODMxMiwzODMxMSwzODMxNywzODMzMiwzODMzMSwzODMyOSwzODMzNCwzODM0NiwyODY2MiwzODMzOSwzODM0OSwzODM0OCwzODM1NywzODM1NiwzODM1OCwzODM2NCwzODM2''@;'; put 'put ''OSwzODM3MywzODM3MCwzODQzMywzODQ0MCwzODQ0NiwzODQ0NywzODQ2NiwzODQ3NiwzODQ3OSwzODQ3NSwzODUxOSwzODQ5MiwzODQ5NCwzODQ5MywzODQ5NSwzODUwMiwzODUxNCwzODUwOCwzODU0MSwzODU1MiwzODU0OSwzODU1MSwzODU3MCwzODU2NywzODU3NywzODU3OCwzODU3Niwz''@;'; put 'put ''ODU4MCwzODU4MiwzODU4NCwzODU4NSwzODYwNiwzODYwMywzODYwMSwzODYwNSwzNTE0OSwzODYyMCwzODY2OSwzODYxMywzODY0OSwzODY2MCwzODY2MiwzODY2NCwzODY3NSwzODY3MCwzODY3MywzODY3MSwzODY3OCwzODY4MSwzODY5MiwzODY5OCwzODcwNCwzODcxMywzODcxNywzODcx''@;'; put 'put ''OCwzODcyNCwzODcyNiwzODcyOCwzODcyMiwzODcyOSwzODc0OCwzODc1MiwzODc1NiwzODc1OCwzODc2MCwyMTIwMiwzODc2MywzODc2OSwzODc3NywzODc4OSwzODc4MCwzODc4NSwzODc3OCwzODc5MCwzODc5NSwzODc5OSwzODgwMCwzODgxMiwzODgyNCwzODgyMiwzODgxOSwzODgzNSwz''@;'; put 'put ''ODgzNiwzODg1MSwzODg1NCwzODg1NiwzODg1OSwzODg3NiwzODg5Myw0MDc4MywzODg5OCwzMTQ1NSwzODkwMiwzODkwMSwzODkyNywzODkyNCwzODk2OCwzODk0OCwzODk0NSwzODk2NywzODk3MywzODk4MiwzODk5MSwzODk4NywzOTAxOSwzOTAyMywzOTAyNCwzOTAyNSwzOTAyOCwzOTAy''@;'; put 'put ''NywzOTA4MiwzOTA4NywzOTA4OSwzOTA5NCwzOTEwOCwzOTEwNywzOTExMCwzOTE0NSwzOTE0NywzOTE3MSwzOTE3NywzOTE4NiwzOTE4OCwzOTE5MiwzOTIwMSwzOTE5NywzOTE5OCwzOTIwNCwzOTIwMCwzOTIxMiwzOTIxNCwzOTIyOSwzOTIzMCwzOTIzNCwzOTI0MSwzOTIzNywzOTI0OCwz''@;'; put 'put ''OTI0MywzOTI0OSwzOTI1MCwzOTI0NCwzOTI1MywzOTMxOSwzOTMyMCwzOTMzMywzOTM0MSwzOTM0MiwzOTM1NiwzOTM5MSwzOTM4NywzOTM4OSwzOTM4NCwzOTM3NywzOTQwNSwzOTQwNiwzOTQwOSwzOTQxMCwzOTQxOSwzOTQxNiwzOTQyNSwzOTQzOSwzOTQyOSwzOTM5NCwzOTQ0OSwzOTQ2''@;'; put 'put ''NywzOTQ3OSwzOTQ5MywzOTQ5MCwzOTQ4OCwzOTQ5MSwzOTQ4NiwzOTUwOSwzOTUwMSwzOTUxNSwzOTUxMSwzOTUxOSwzOTUyMiwzOTUyNSwzOTUyNCwzOTUyOSwzOTUzMSwzOTUzMCwzOTU5NywzOTYwMCwzOTYxMiwzOTYxNiwzOTYzMSwzOTYzMywzOTYzNSwzOTYzNiwzOTY0NiwzOTY0Nywz''@;'; put 'put ''OTY1MCwzOTY1MSwzOTY1NCwzOTY2MywzOTY1OSwzOTY2MiwzOTY2OCwzOTY2NSwzOTY3MSwzOTY3NSwzOTY4NiwzOTcwNCwzOTcwNiwzOTcxMSwzOTcxNCwzOTcxNSwzOTcxNywzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyNiwzOTcyNywzOTczMCwzOTc0OCwzOTc0NywzOTc1OSwzOTc1''@;'; put 'put ''NywzOTc1OCwzOTc2MSwzOTc2OCwzOTc5NiwzOTgyNywzOTgxMSwzOTgyNSwzOTgzMCwzOTgzMSwzOTgzOSwzOTg0MCwzOTg0OCwzOTg2MCwzOTg3MiwzOTg4MiwzOTg2NSwzOTg3OCwzOTg4NywzOTg4OSwzOTg5MCwzOTkwNywzOTkwNiwzOTkwOCwzOTg5MiwzOTkwNSwzOTk5NCwzOTkyMiwz''@;'; put 'put ''OTkyMSwzOTkyMCwzOTk1NywzOTk1NiwzOTk0NSwzOTk1NSwzOTk0OCwzOTk0MiwzOTk0NCwzOTk1NCwzOTk0NiwzOTk0MCwzOTk4MiwzOTk2MywzOTk3MywzOTk3MiwzOTk2OSwzOTk4NCw0MDAwNywzOTk4Niw0MDAwNiwzOTk5OCw0MDAyNiw0MDAzMiw0MDAzOSw0MDA1NCw0MDA1Niw0MDE2''@;'; put 'put ''Nyw0MDE3Miw0MDE3Niw0MDIwMSw0MDIwMCw0MDE3MSw0MDE5NSw0MDE5OCw0MDIzNCw0MDIzMCw0MDM2Nyw0MDIyNyw0MDIyMyw0MDI2MCw0MDIxMyw0MDIxMCw0MDI1Nyw0MDI1NSw0MDI1NCw0MDI2Miw0MDI2NCw0MDI4NSw0MDI4Niw0MDI5Miw0MDI3Myw0MDI3Miw0MDI4MSw0MDMwNiw0''@;'; put 'put ''MDMyOSw0MDMyNyw0MDM2Myw0MDMwMyw0MDMxNCw0MDM0Niw0MDM1Niw0MDM2MSw0MDM3MCw0MDM4OCw0MDM4NSw0MDM3OSw0MDM3Niw0MDM3OCw0MDM5MCw0MDM5OSw0MDM4Niw0MDQwOSw0MDQwMyw0MDQ0MCw0MDQyMiw0MDQyOSw0MDQzMSw0MDQ0NSw0MDQ3NCw0MDQ3NSw0MDQ3OCw0MDU2''@;'; put 'put ''NSw0MDU2OSw0MDU3Myw0MDU3Nyw0MDU4NCw0MDU4Nyw0MDU4OCw0MDU5NCw0MDU5Nyw0MDU5Myw0MDYwNSw0MDYxMyw0MDYxNyw0MDYzMiw0MDYxOCw0MDYyMSwzODc1Myw0MDY1Miw0MDY1NCw0MDY1NSw0MDY1Niw0MDY2MCw0MDY2OCw0MDY3MCw0MDY2OSw0MDY3Miw0MDY3Nyw0MDY4MCw0''@;'; put 'put ''MDY4Nyw0MDY5Miw0MDY5NCw0MDY5NSw0MDY5Nyw0MDY5OSw0MDcwMCw0MDcwMSw0MDcxMSw0MDcxMiwzMDM5MSw0MDcyNSw0MDczNyw0MDc0OCw0MDc2Niw0MDc3OCw0MDc4Niw0MDc4OCw0MDgwMyw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwNiw0MDgwNyw0MDgxMiw0MDgxMCw0MDgyMyw0MDgx''@;'; put 'put ''OCw0MDgyMiw0MDg1Myw0MDg2MCw0MDg2NCwyMjU3NSwyNzA3OSwzNjk1MywyOTc5NiwyMDk1NiwyOTA4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAy''@;'; put 'put ''MjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQs''@;'; put 'put ''MjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4''@;'; put 'put ''ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQs''@;'; put 'put ''MjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYy''@;'; put 'put ''NjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEs''@;'; put 'put ''Mjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5''@;'; put 'put ''MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMs''@;'; put 'put ''MzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIx''@;'; put 'put ''ODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgs''@;'; put 'put ''MzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzcz''@;'; put 'put ''ODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQs''@;'; put 'put ''Mzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkz''@;'; put 'put ''MjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNjU1MDYsNjU1MDgsNjUyODcs''@;'; put 'put ''NjUyODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5''@;'; put 'put ''LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDg3NTcsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQz''@;'; put 'put ''ODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIs''@;'; put 'put ''MjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3''@;'; put 'put ''OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMs''@;'; put 'put ''MjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYx''@;'; put 'put ''OTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIs''@;'; put 'put ''MjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3''@;'; put 'put ''MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQs''@;'; put 'put ''Mjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2''@;'; put 'put ''NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYs''@;'; put 'put ''MzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzcz''@;'; put 'put ''NDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAs''@;'; put 'put ''Mzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQw''@;'; put 'put ''NDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''XSxqaXMwMjEyOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw3MjgsNzExLDE4NCw3MjksNzMzLDE3NSw3MzEsNzMwLDY1Mzc0LDkwMCw5MDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MSwxNjYsMTkxLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCwxODYsMTcwLDE2OSwxNzQsODQ4MiwxNjQsODQ3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTAyLDkwNCw5MDUsOTA2LDkzOCxudWxsLDkwOCxudWxsLDkxMCw5MzksbnVsbCw5MTEsbnVsbCxudWxsLG51bGwsbnVsbCw5NDAsOTQxLDk0Miw5NDMsOTcwLDkxMiw5NzIsOTYyLDk3Myw5NzEsOTQ0LDk3NCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTAyNiwxMDI3LDEw''@;'; put 'put ''MjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzgsMTAzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTgsMTExOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OCwyNzIsbnVsbCwyOTQsbnVsbCwzMDYsbnVsbCwzMjEsMzE5LG51bGwsMzMwLDIxNiwzMzgsbnVsbCwz''@;'; put 'put ''NTgsMjIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMiwzMjAsMzI5LDMzMSwyNDgsMzM5LDIyMywzNTksMjU0LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTkzLDE5MiwxOTYsMTk0LDI1OCw0NjEsMjU2LDI2MCwxOTcsMTk1LDI2MiwyNjQsMjY4LDE5OSwyNjYsMjcwLDIwMSwyMDAsMjAzLDIwMiwyODIsMjc4LDI3NCwyODAsbnVsbCwyODQsMjg2LDI5MCwy''@;'; put 'put ''ODgsMjkyLDIwNSwyMDQsMjA3LDIwNiw0NjMsMzA0LDI5OCwzMDIsMjk2LDMwOCwzMTAsMzEzLDMxNywzMTUsMzIzLDMyNywzMjUsMjA5LDIxMSwyMTAsMjE0LDIxMiw0NjUsMzM2LDMzMiwyMTMsMzQwLDM0NCwzNDIsMzQ2LDM0OCwzNTIsMzUwLDM1NiwzNTQsMjE4LDIxNywyMjAsMjE5LDM2''@;'; put 'put ''NCw0NjcsMzY4LDM2MiwzNzAsMzY2LDM2MCw0NzEsNDc1LDQ3Myw0NjksMzcyLDIyMSwzNzYsMzc0LDM3NywzODEsMzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjI1LDIyNCwyMjgsMjI2LDI1OSw0NjIsMjU3LDI2MSwyMjksMjI3LDI2MywyNjUsMjY5LDIzMSwyNjcs''@;'; put 'put ''MjcxLDIzMywyMzIsMjM1LDIzNCwyODMsMjc5LDI3NSwyODEsNTAxLDI4NSwyODcsbnVsbCwyODksMjkzLDIzNywyMzYsMjM5LDIzOCw0NjQsbnVsbCwyOTksMzAzLDI5NywzMDksMzExLDMxNCwzMTgsMzE2LDMyNCwzMjgsMzI2LDI0MSwyNDMsMjQyLDI0NiwyNDQsNDY2LDMzNywzMzMsMjQ1''@;'; put 'put ''LDM0MSwzNDUsMzQzLDM0NywzNDksMzUzLDM1MSwzNTcsMzU1LDI1MCwyNDksMjUyLDI1MSwzNjUsNDY4LDM2OSwzNjMsMzcxLDM2NywzNjEsNDcyLDQ3Niw0NzQsNDcwLDM3MywyNTMsMjU1LDM3NSwzNzgsMzgyLDM4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NzAsMTk5NzIsMTk5NzMsMTk5ODAsMTk5ODYsMTk5OTksMjAwMDMsMjAwMDQsMjAwMDgsMjAwMTEsMjAwMTQsMjAwMTUsMjAwMTYsMjAwMjEsMjAwMzIsMjAwMzMsMjAwMzYsMjAw''@;'; put 'put ''MzksMjAwNDksMjAwNTgsMjAwNjAsMjAwNjcsMjAwNzIsMjAwNzMsMjAwODQsMjAwODUsMjAwODksMjAwOTUsMjAxMDksMjAxMTgsMjAxMTksMjAxMjUsMjAxNDMsMjAxNTMsMjAxNjMsMjAxNzYsMjAxODYsMjAxODcsMjAxOTIsMjAxOTMsMjAxOTQsMjAyMDAsMjAyMDcsMjAyMDksMjAyMTEs''@;'; put 'put ''MjAyMTMsMjAyMjEsMjAyMjIsMjAyMjMsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDUsMjAyNDYsMjAyNDcsMjAyNDksMjAyNzAsMjAyNzMsMjAzMjAsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODgsMjAyOTAsMjAyOTYsMjAy''@;'; put 'put ''OTcsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMTIsMjAzMTksMjAzMjMsMjAzMzAsMjAzMzIsMjAzMzQsMjAzMzcsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTAsMjAzNTMsMjAzNTQsMjAzNTYsMjAzNTcsMjAzNjEsMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgs''@;'; put 'put ''MjAzNzAsMjAzNzEsMjAzNzIsMjAzNzUsMjAzNzcsMjAzNzgsMjAzODIsMjAzODMsMjA0MDIsMjA0MDcsMjA0MDksMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MjEsMjA0MjIsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzEsMjA0MzQsMjA0NDQsMjA0''@;'; put 'put ''NDgsMjA0NTAsMjA0NjQsMjA0NjYsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODQsMjA0ODcsMjA0OTAsMjA0OTIsMjA0OTQsMjA0OTYsMjA0OTksMjA1MDMsMjA1MDQsMjA1MDcsMjA1MDgsMjA1MDksMjA1MTAsMjA1MTQsMjA1MTksMjA1MjYsMjA1MjgsMjA1MzAsMjA1MzEs''@;'; put 'put ''MjA1MzMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDksMjA1NTAsMjA1NTQsMjA1NTYsMjA1NTgsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjcsMjA1NjksMjA1NzUsMjA1NzYsMjA1NzgsMjA1NzksMjA1ODIsMjA1ODMsMjA1ODYsMjA1ODksMjA1OTIsMjA1OTMsMjA1MzksMjA2MDksMjA2MTEsMjA2''@;'; put 'put ''MTIsMjA2MTQsMjA2MTgsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MzAsMjA2MzUsMjA2MzYsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NTAsMjA2NTUsMjA2NTYsMjA2NjUsMjA2NjYsMjA2NjksMjA2NzIsMjA2NzUsMjA2NzYsMjA2NzksMjA2ODQs''@;'; put 'put ''MjA2ODYsMjA2ODgsMjA2OTEsMjA2OTIsMjA2OTYsMjA3MDAsMjA3MDEsMjA3MDMsMjA3MDYsMjA3MDgsMjA3MTAsMjA3MTIsMjA3MTMsMjA3MTksMjA3MjEsMjA3MjYsMjA3MzAsMjA3MzQsMjA3MzksMjA3NDIsMjA3NDMsMjA3NDQsMjA3NDcsMjA3NDgsMjA3NDksMjA3NTAsMjA3MjIsMjA3''@;'; put 'put ''NTIsMjA3NTksMjA3NjEsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NzEsMjA3NzUsMjA3NzYsMjA3ODAsMjA3ODEsMjA3ODMsMjA3ODUsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTIsMjA3OTMsMjA4MDIsMjA4MTAsMjA4MTUsMjA4MTksMjA4MjEsMjA4MjMsMjA4MjQsMjA4MzEsMjA4MzYs''@;'; put 'put ''MjA4MzgsMjA4NjIsMjA4NjcsMjA4NjgsMjA4NzUsMjA4NzgsMjA4ODgsMjA4OTMsMjA4OTcsMjA4OTksMjA5MDksMjA5MjAsMjA5MjIsMjA5MjQsMjA5MjYsMjA5MjcsMjA5MzAsMjA5MzYsMjA5NDMsMjA5NDUsMjA5NDYsMjA5NDcsMjA5NDksMjA5NTIsMjA5NTgsMjA5NjIsMjA5NjUsMjA5''@;'; put 'put ''NzQsMjA5NzgsMjA5NzksMjA5ODAsMjA5ODMsMjA5OTMsMjA5OTQsMjA5OTcsMjEwMTAsMjEwMTEsMjEwMTMsMjEwMTQsMjEwMTYsMjEwMjYsMjEwMzIsMjEwNDEsMjEwNDIsMjEwNDUsMjEwNTIsMjEwNjEsMjEwNjUsMjEwNzcsMjEwNzksMjEwODAsMjEwODIsMjEwODQsMjEwODcsMjEwODgs''@;'; put 'put ''MjEwODksMjEwOTQsMjExMDIsMjExMTEsMjExMTIsMjExMTMsMjExMjAsMjExMjIsMjExMjUsMjExMzAsMjExMzIsMjExMzksMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjcsMjExNjgsMjExNzQsMjExNzUsMjExNzYsMjEx''@;'; put 'put ''NzgsMjExNzksMjExODEsMjExODQsMjExODgsMjExOTAsMjExOTIsMjExOTYsMjExOTksMjEyMDEsMjEyMDQsMjEyMDYsMjEyMTEsMjEyMTIsMjEyMTcsMjEyMjEsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjgsMjEyMzIsMjEyMzMsMjEyMzYsMjEyMzgsMjEyMzksMjEyNDgsMjEyNTEsMjEyNTgs''@;'; put 'put ''MjEyNTksMjEyNjAsMjEyNjUsMjEyNjcsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTYsMjEyOTgsMjEzMDEsMjEzMDgsMjEzMDksMjEzMTAsMjEzMTQsMjEzMjQsMjEzMjMsMjEzMzcsMjEzMzksMjEz''@;'; put 'put ''NDUsMjEzNDcsMjEzNDksMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjksMjEzNzQsMjEzNzksMjEzODMsMjEzODQsMjEzOTAsMjEzOTUsMjEzOTYsMjE0MDEsMjE0MDUsMjE0MDksMjE0MTIsMjE0MTgsMjE0MTksMjE0MjMsMjE0MjYsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzQsMjE0Mzcs''@;'; put 'put ''MjE0NDAsMjE0NDUsMjE0NTUsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjksMjE0NzAsMjE0NzIsMjE0NzgsMjE0NzksMjE0OTMsMjE1MDYsMjE1MjMsMjE1MzAsMjE1MzcsMjE1NDMsMjE1NDQsMjE1NDYsMjE1NTEsMjE1NTMsMjE1NTYsMjE1NTcsMjE1NzEsMjE1NzIsMjE1NzUsMjE1''@;'; put 'put ''ODEsMjE1ODMsMjE1OTgsMjE2MDIsMjE2MDQsMjE2MDYsMjE2MDcsMjE2MDksMjE2MTEsMjE2MTMsMjE2MTQsMjE2MjAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2NDAsMjE2NDEsMjE2NDUsMjE2NDksMjE2NTMsMjE2NTQsMjE2NjAsMjE2NjMsMjE2NjUsMjE2NzAsMjE2NzEsMjE2NzMs''@;'; put 'put ''MjE2NzQsMjE2NzcsMjE2NzgsMjE2ODEsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTEsMjE2OTUsMjE3MDIsMjE3MDYsMjE3MDksMjE3MTAsMjE3MjgsMjE3MzgsMjE3NDAsMjE3NDMsMjE3NTAsMjE3NTYsMjE3NTgsMjE3NTksMjE3NjAsMjE3NjEsMjE3NjUsMjE3NjgsMjE3NjksMjE3NzIsMjE3''@;'; put 'put ''NzMsMjE3NzQsMjE3ODEsMjE4MDIsMjE4MDMsMjE4MTAsMjE4MTMsMjE4MTQsMjE4MTksMjE4MjAsMjE4MjEsMjE4MjUsMjE4MzEsMjE4MzMsMjE4MzQsMjE4MzcsMjE4NDAsMjE4NDEsMjE4NDgsMjE4NTAsMjE4NTEsMjE4NTQsMjE4NTYsMjE4NTcsMjE4NjAsMjE4NjIsMjE4ODcsMjE4ODks''@;'; put 'put ''MjE4OTAsMjE4OTQsMjE4OTYsMjE5MDIsMjE5MDMsMjE5MDUsMjE5MDYsMjE5MDcsMjE5MDgsMjE5MTEsMjE5MjMsMjE5MjQsMjE5MzMsMjE5MzgsMjE5NTEsMjE5NTMsMjE5NTUsMjE5NTgsMjE5NjEsMjE5NjMsMjE5NjQsMjE5NjYsMjE5NjksMjE5NzAsMjE5NzEsMjE5NzUsMjE5NzYsMjE5''@;'; put 'put ''NzksMjE5ODIsMjE5ODYsMjE5OTMsMjIwMDYsMjIwMTUsMjIwMjEsMjIwMjQsMjIwMjYsMjIwMjksMjIwMzAsMjIwMzEsMjIwMzIsMjIwMzMsMjIwMzQsMjIwNDEsMjIwNjAsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzMsMjIwNzUsMjIwNzYsMjIwNzcsMjIwNzksMjIwODAsMjIwODEs''@;'; put 'put ''MjIwODMsMjIwODQsMjIwODYsMjIwODksMjIwOTEsMjIwOTMsMjIwOTUsMjIxMDAsMjIxMTAsMjIxMTIsMjIxMTMsMjIxMTQsMjIxMTUsMjIxMTgsMjIxMjEsMjIxMjUsMjIxMjcsMjIxMjksMjIxMzAsMjIxMzMsMjIxNDgsMjIxNDksMjIxNTIsMjIxNTUsMjIxNTYsMjIxNjUsMjIxNjksMjIx''@;'; put 'put ''NzAsMjIxNzMsMjIxNzQsMjIxNzUsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODcsMjIxODgsMjIxODksMjIxOTMsMjIxOTUsMjIxOTksMjIyMDYsMjIyMTMsMjIyMTcsMjIyMTgsMjIyMTksMjIyMjMsMjIyMjQsMjIyMjAsMjIyMjEsMjIyMzMsMjIyMzYsMjIyMzcsMjIyMzksMjIyNDEs''@;'; put 'put ''MjIyNDQsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNTcsMjIyNTEsMjIyNTMsMjIyNjIsMjIyNjMsMjIyNzMsMjIyNzQsMjIyNzksMjIyODIsMjIyODQsMjIyODksMjIyOTMsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDQsMjIzMDYsMjIzMDcsMjIzMDgsMjIzMDksMjIzMTMsMjIzMTQsMjIz''@;'; put 'put ''MTYsMjIzMTgsMjIzMTksMjIzMjMsMjIzMjQsMjIzMzMsMjIzMzQsMjIzMzUsMjIzNDEsMjIzNDIsMjIzNDgsMjIzNDksMjIzNTQsMjIzNzAsMjIzNzMsMjIzNzUsMjIzNzYsMjIzNzksMjIzODEsMjIzODIsMjIzODMsMjIzODQsMjIzODUsMjIzODcsMjIzODgsMjIzODksMjIzOTEsMjIzOTMs''@;'; put 'put ''MjIzOTQsMjIzOTUsMjIzOTYsMjIzOTgsMjI0MDEsMjI0MDMsMjI0MTIsMjI0MjAsMjI0MjMsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzMsMjI0MjEsMjI0MzksMjI0NDAsMjI0NDEsMjI0NDQsMjI0NTYsMjI0NjEsMjI0NzEsMjI0NzIsMjI0NzYsMjI0NzksMjI0''@;'; put 'put ''ODUsMjI0OTMsMjI0OTQsMjI1MDAsMjI1MDIsMjI1MDMsMjI1MDUsMjI1MDksMjI1MTIsMjI1MTcsMjI1MTgsMjI1MjAsMjI1MjUsMjI1MjYsMjI1MjcsMjI1MzEsMjI1MzIsMjI1MzYsMjI1MzcsMjI0OTcsMjI1NDAsMjI1NDEsMjI1NTUsMjI1NTgsMjI1NTksMjI1NjAsMjI1NjYsMjI1Njcs''@;'; put 'put ''MjI1NzMsMjI1NzgsMjI1ODUsMjI1OTEsMjI2MDEsMjI2MDQsMjI2MDUsMjI2MDcsMjI2MDgsMjI2MTMsMjI2MjMsMjI2MjUsMjI2MjgsMjI2MzEsMjI2MzIsMjI2NDgsMjI2NTIsMjI2NTUsMjI2NTYsMjI2NTcsMjI2NjMsMjI2NjQsMjI2NjUsMjI2NjYsMjI2NjgsMjI2NjksMjI2NzEsMjI2''@;'; put 'put ''NzIsMjI2NzYsMjI2NzgsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTQsMjI2OTcsMjI3MDUsMjI3MDYsMjI3MjQsMjI3MTYsMjI3MjIsMjI3MjgsMjI3MzMsMjI3MzQsMjI3MzYsMjI3MzgsMjI3NDAsMjI3NDIsMjI3NDYsMjI3NDksMjI3NTMsMjI3NTQsMjI3NjEsMjI3NzEsMjI3ODks''@;'; put 'put ''MjI3OTAsMjI3OTUsMjI3OTYsMjI4MDIsMjI4MDMsMjI4MDQsMzQzNjksMjI4MTMsMjI4MTcsMjI4MTksMjI4MjAsMjI4MjQsMjI4MzEsMjI4MzIsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDcsMjI4NTEsMjI4NTQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzcsMjI4NzgsMjI4NzksMjI4''@;'; put 'put ''ODEsMjI4ODMsMjI4OTEsMjI4OTMsMjI4OTUsMjI4OTgsMjI5MDEsMjI5MDIsMjI5MDUsMjI5MDcsMjI5MDgsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MzAsMjI5MzMsMjI5MzUsMjI5NDMsMjI5NDgsMjI5NTEsMjI5NTcsMjI5NTgsMjI5NTksMjI5NjAsMjI5NjMsMjI5NjcsMjI5NzAsMjI5NzIs''@;'; put 'put ''MjI5NzcsMjI5NzksMjI5ODAsMjI5ODQsMjI5ODYsMjI5ODksMjI5OTQsMjMwMDUsMjMwMDYsMjMwMDcsMjMwMTEsMjMwMTIsMjMwMTUsMjMwMjIsMjMwMjMsMjMwMjUsMjMwMjYsMjMwMjgsMjMwMzEsMjMwNDAsMjMwNDQsMjMwNTIsMjMwNTMsMjMwNTQsMjMwNTgsMjMwNTksMjMwNzAsMjMw''@;'; put 'put ''NzUsMjMwNzYsMjMwNzksMjMwODAsMjMwODIsMjMwODUsMjMwODgsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTYsMjMxMjAsMjMxMjUsMjMxMzQsMjMxMzksMjMxNDEsMjMxNDMsMjMxNDksMjMxNTksMjMxNjIsMjMxNjMsMjMxNjYsMjMxNzksMjMxODQsMjMxODcsMjMxOTAsMjMxOTMs''@;'; put 'put ''MjMxOTYsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDIsMjMyMDcsMjMyMTIsMjMyMTcsMjMyMTgsMjMyMTksMjMyMjEsMjMyMjQsMjMyMjYsMjMyMjcsMjMyMzEsMjMyMzYsMjMyMzgsMjMyNDAsMjMyNDcsMjMyNTgsMjMyNjAsMjMyNjQsMjMyNjksMjMyNzQsMjMyNzgsMjMyODUsMjMyODYsMjMy''@;'; put 'put ''OTMsMjMyOTYsMjMyOTcsMjMzMDQsMjMzMTksMjMzNDgsMjMzMjEsMjMzMjMsMjMzMjUsMjMzMjksMjMzMzMsMjMzNDEsMjMzNTIsMjMzNjEsMjMzNzEsMjMzNzIsMjMzNzgsMjMzODIsMjMzOTAsMjM0MDAsMjM0MDYsMjM0MDcsMjM0MjAsMjM0MjEsMjM0MjIsMjM0MjMsMjM0MjUsMjM0Mjgs''@;'; put 'put ''MjM0MzAsMjM0MzQsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDMsMjM0NDQsMjM0NDYsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODQsMjM0ODgsMjM0ODksMjM1MDEsMjM1MDMsMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1''@;'; put 'put ''MjAsMjM1MzUsMjM1MzcsMjM1NDAsMjM1NDksMjM1NjQsMjM1NzUsMjM1ODIsMjM1ODMsMjM1ODcsMjM1OTAsMjM1OTMsMjM1OTUsMjM1OTYsMjM1OTgsMjM2MDAsMjM2MDIsMjM2MDUsMjM2MDYsMjM2NDEsMjM2NDIsMjM2NDQsMjM2NTAsMjM2NTEsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NjEs''@;'; put 'put ''MjM2NjQsMjM2NjgsMjM2NjksMjM2NzQsMjM2NzUsMjM2NzYsMjM2NzcsMjM2ODcsMjM2ODgsMjM2OTAsMjM2OTUsMjM2OTgsMjM3MDksMjM3MTEsMjM3MTIsMjM3MTQsMjM3MTUsMjM3MTgsMjM3MjIsMjM3MzAsMjM3MzIsMjM3MzMsMjM3MzgsMjM3NTMsMjM3NTUsMjM3NjIsMjM3NzMsMjM3''@;'; put 'put ''NjcsMjM3OTAsMjM3OTMsMjM3OTQsMjM3OTYsMjM4MDksMjM4MTQsMjM4MjEsMjM4MjYsMjM4NTEsMjM4NDMsMjM4NDQsMjM4NDYsMjM4NDcsMjM4NTcsMjM4NjAsMjM4NjUsMjM4NjksMjM4NzEsMjM4NzQsMjM4NzUsMjM4NzgsMjM4ODAsMjM4OTMsMjM4ODksMjM4OTcsMjM4ODIsMjM5MDMs''@;'; put 'put ''MjM5MDQsMjM5MDUsMjM5MDYsMjM5MDgsMjM5MTQsMjM5MTcsMjM5MjAsMjM5MjksMjM5MzAsMjM5MzQsMjM5MzUsMjM5MzcsMjM5MzksMjM5NDQsMjM5NDYsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NjEsMjM5NjMsMjM5NjcsMjM5NjgsMjM5NzUsMjM5NzksMjM5ODQsMjM5ODgsMjM5''@;'; put 'put ''OTIsMjM5OTMsMjQwMDMsMjQwMDcsMjQwMTEsMjQwMTYsMjQwMTQsMjQwMjQsMjQwMjUsMjQwMzIsMjQwMzYsMjQwNDEsMjQwNTYsMjQwNTcsMjQwNjQsMjQwNzEsMjQwNzcsMjQwODIsMjQwODQsMjQwODUsMjQwODgsMjQwOTUsMjQwOTYsMjQxMTAsMjQxMDQsMjQxMTQsMjQxMTcsMjQxMjYs''@;'; put 'put ''MjQxMzksMjQxNDQsMjQxMzcsMjQxNDUsMjQxNTAsMjQxNTIsMjQxNTUsMjQxNTYsMjQxNTgsMjQxNjgsMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzYsMjQxOTIsMjQyMDMsMjQyMDYsMjQyMjYsMjQyMjgsMjQyMjksMjQyMzIsMjQyMzQsMjQyMzYsMjQyNDEsMjQyNDMsMjQy''@;'; put 'put ''NTMsMjQyNTQsMjQyNTUsMjQyNjIsMjQyNjgsMjQyNjcsMjQyNzAsMjQyNzMsMjQyNzQsMjQyNzYsMjQyNzcsMjQyODQsMjQyODYsMjQyOTMsMjQyOTksMjQzMjIsMjQzMjYsMjQzMjcsMjQzMjgsMjQzMzQsMjQzNDUsMjQzNDgsMjQzNDksMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAs''@;'; put 'put ''MjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzIsMjQzNzQsMjQzNzksMjQzODEsMjQzODMsMjQzODQsMjQzODgsMjQzODksMjQzOTEsMjQzOTcsMjQ0MDAsMjQ0MDQsMjQ0MDgsMjQ0MTEsMjQ0MTYsMjQ0MTksMjQ0MjAsMjQ0MjMsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0NDAsMjQ0''@;'; put 'put ''NDIsMjQ0NDUsMjQ0NDYsMjQ0NTcsMjQ0NjEsMjQ0NjMsMjQ0NzAsMjQ0NzYsMjQ0NzcsMjQ0ODIsMjQ0ODcsMjQ0OTEsMjQ0ODQsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ1MDQsMjQ1MTYsMjQ1MTksMjQ1MjAsMjQ1MjEsMjQ1MjMsMjQ1MjgsMjQ1MjksMjQ1MzAsMjQ1MzEsMjQ1MzIs''@;'; put 'put ''MjQ1NDIsMjQ1NDUsMjQ1NDYsMjQ1NTIsMjQ1NTMsMjQ1NTQsMjQ1NTYsMjQ1NTcsMjQ1NTgsMjQ1NTksMjQ1NjIsMjQ1NjMsMjQ1NjYsMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODYsMjQ1ODksMjQ1OTUsMjQ1OTYsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDcsMjQ2MTIsMjQ2MjEsMjQ2MjcsMjQ2''@;'; put 'put ''MjksMjQ2NDAsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTIsMjQ2NTcsMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjksMjQ2NzMsMjQ2NzksMjQ2ODksMjQ3MDIsMjQ3MDMsMjQ3MDYsMjQ3MTAsMjQ3MTIsMjQ3MTQsMjQ3MTgsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjgsMjQ3MzMsMjQ3MzQsMjQ3Mzgs''@;'; put 'put ''MjQ3NDAsMjQ3NDEsMjQ3NDQsMjQ3NTIsMjQ3NTMsMjQ3NTksMjQ3NjMsMjQ3NjYsMjQ3NzAsMjQ3NzIsMjQ3NzYsMjQ3NzcsMjQ3NzgsMjQ3NzksMjQ3ODIsMjQ3ODMsMjQ3ODgsMjQ3ODksMjQ3OTMsMjQ3OTUsMjQ3OTcsMjQ3OTgsMjQ4MDIsMjQ4MDUsMjQ4MTgsMjQ4MjEsMjQ4MjQsMjQ4''@;'; put 'put ''MjgsMjQ4MjksMjQ4MzQsMjQ4MzksMjQ4NDIsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTcsMjQ4NjAsMjQ4NjIsMjQ4NjYsMjQ4NzQsMjQ4NzUsMjQ4ODAsMjQ4ODEsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODksMjQ4OTcsMjQ5MDEsMjQ5MDIs''@;'; put 'put ''MjQ5MDUsMjQ5MjYsMjQ5MjgsMjQ5NDAsMjQ5NDYsMjQ5NTIsMjQ5NTUsMjQ5NTYsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjMsMjQ5NjQsMjQ5NzEsMjQ5NzMsMjQ5NzgsMjQ5NzksMjQ5ODMsMjQ5ODQsMjQ5ODgsMjQ5ODksMjQ5OTEsMjQ5OTIsMjQ5OTcsMjVlMywyNTAwMiwyNTAwNSwyNTAx''@;'; put 'put ''NiwyNTAxNywyNTAyMCwyNTAyNCwyNTAyNSwyNTAyNiwyNTAzOCwyNTAzOSwyNTA0NSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NywyNTA1OCwyNTA2MywyNTA2NSwyNTA2MSwyNTA2OCwyNTA2OSwyNTA3MSwyNTA4OSwyNTA5MSwyNTA5MiwyNTA5NSwyNTEwNywyNTEwOSwyNTExNiwy''@;'; put 'put ''NTEyMCwyNTEyMiwyNTEyMywyNTEyNywyNTEyOSwyNTEzMSwyNTE0NSwyNTE0OSwyNTE1NCwyNTE1NSwyNTE1NiwyNTE1OCwyNTE2NCwyNTE2OCwyNTE2OSwyNTE3MCwyNTE3MiwyNTE3NCwyNTE3OCwyNTE4MCwyNTE4OCwyNTE5NywyNTE5OSwyNTIwMywyNTIxMCwyNTIxMywyNTIyOSwyNTIz''@;'; put 'put ''MCwyNTIzMSwyNTIzMiwyNTI1NCwyNTI1NiwyNTI2NywyNTI3MCwyNTI3MSwyNTI3NCwyNTI3OCwyNTI3OSwyNTI4NCwyNTI5NCwyNTMwMSwyNTMwMiwyNTMwNiwyNTMyMiwyNTMzMCwyNTMzMiwyNTM0MCwyNTM0MSwyNTM0NywyNTM0OCwyNTM1NCwyNTM1NSwyNTM1NywyNTM2MCwyNTM2Mywy''@;'; put 'put ''NTM2NiwyNTM2OCwyNTM4NSwyNTM4NiwyNTM4OSwyNTM5NywyNTM5OCwyNTQwMSwyNTQwNCwyNTQwOSwyNTQxMCwyNTQxMSwyNTQxMiwyNTQxNCwyNTQxOCwyNTQxOSwyNTQyMiwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMiwyNTQzNSwyNTQ0NSwyNTQ0NiwyNTQ1MiwyNTQ1MywyNTQ1NywyNTQ2''@;'; put 'put ''MCwyNTQ2MSwyNTQ2NCwyNTQ2OCwyNTQ2OSwyNTQ3MSwyNTQ3NCwyNTQ3NiwyNTQ3OSwyNTQ4MiwyNTQ4OCwyNTQ5MiwyNTQ5MywyNTQ5NywyNTQ5OCwyNTUwMiwyNTUwOCwyNTUxMCwyNTUxNywyNTUxOCwyNTUxOSwyNTUzMywyNTUzNywyNTU0MSwyNTU0NCwyNTU1MCwyNTU1MywyNTU1NSwy''@;'; put 'put ''NTU1NiwyNTU1NywyNTU2NCwyNTU2OCwyNTU3MywyNTU3OCwyNTU4MCwyNTU4NiwyNTU4NywyNTU4OSwyNTU5MiwyNTU5MywyNTYwOSwyNTYxMCwyNTYxNiwyNTYxOCwyNTYyMCwyNTYyNCwyNTYzMCwyNTYzMiwyNTYzNCwyNTYzNiwyNTYzNywyNTY0MSwyNTY0MiwyNTY0NywyNTY0OCwyNTY1''@;'; put 'put ''MywyNTY2MSwyNTY2MywyNTY3NSwyNTY3OSwyNTY4MSwyNTY4MiwyNTY4MywyNTY4NCwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OSwyNTcwOSwyNTcxNSwyNTcxNiwyNTcyMywyNTcyNSwyNTczMywyNTczNSwyNTc0MywyNTc0NCwyNTc0NSwyNTc1Miwy''@;'; put 'put ''NTc1MywyNTc1NSwyNTc1NywyNTc1OSwyNTc2MSwyNTc2MywyNTc2NiwyNTc2OCwyNTc3MiwyNTc3OSwyNTc4OSwyNTc5MCwyNTc5MSwyNTc5NiwyNTgwMSwyNTgwMiwyNTgwMywyNTgwNCwyNTgwNiwyNTgwOCwyNTgwOSwyNTgxMywyNTgxNSwyNTgyOCwyNTgyOSwyNTgzMywyNTgzNCwyNTgz''@;'; put 'put ''NywyNTg0MCwyNTg0NSwyNTg0NywyNTg1MSwyNTg1NSwyNTg1NywyNTg2MCwyNTg2NCwyNTg2NSwyNTg2NiwyNTg3MSwyNTg3NSwyNTg3NiwyNTg3OCwyNTg4MSwyNTg4MywyNTg4NiwyNTg4NywyNTg5MCwyNTg5NCwyNTg5NywyNTkwMiwyNTkwNSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMywy''@;'; put 'put ''NTkyNywyNTkyOSwyNTkzNiwyNTkzOCwyNTk0MCwyNTk1MSwyNTk1MiwyNTk1OSwyNTk2MywyNTk3OCwyNTk4MSwyNTk4NSwyNTk4OSwyNTk5NCwyNjAwMiwyNjAwNSwyNjAwOCwyNjAxMywyNjAxNiwyNjAxOSwyNjAyMiwyNjAzMCwyNjAzNCwyNjAzNSwyNjAzNiwyNjA0NywyNjA1MCwyNjA1''@;'; put 'put ''NiwyNjA1NywyNjA2MiwyNjA2NCwyNjA2OCwyNjA3MCwyNjA3MiwyNjA3OSwyNjA5NiwyNjA5OCwyNjEwMCwyNjEwMSwyNjEwNSwyNjExMCwyNjExMSwyNjExMiwyNjExNiwyNjEyMCwyNjEyMSwyNjEyNSwyNjEyOSwyNjEzMCwyNjEzMywyNjEzNCwyNjE0MSwyNjE0MiwyNjE0NSwyNjE0Niwy''@;'; put 'put ''NjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MSwyNjE2MywyNjE2OSwyNjE2NywyNjE3NiwyNjE4MSwyNjE4MiwyNjE4NiwyNjE4OCwyNjE5MywyNjE5MCwyNjE5OSwyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwOCwyNjIwOSwyNjM2''@;'; put 'put ''MywyNjIxOCwyNjIxOSwyNjIyMCwyNjIzOCwyNjIyNywyNjIyOSwyNjIzOSwyNjIzMSwyNjIzMiwyNjIzMywyNjIzNSwyNjI0MCwyNjIzNiwyNjI1MSwyNjI1MiwyNjI1MywyNjI1NiwyNjI1OCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MSwyNjI3MiwyNjI3NiwyNjI4NSwyNjI4OSwy''@;'; put 'put ''NjI5MCwyNjI5MywyNjI5OSwyNjMwMywyNjMwNCwyNjMwNiwyNjMwNywyNjMxMiwyNjMxNiwyNjMxOCwyNjMxOSwyNjMyNCwyNjMzMSwyNjMzNSwyNjM0NCwyNjM0NywyNjM0OCwyNjM1MCwyNjM2MiwyNjM3MywyNjM3NSwyNjM4MiwyNjM4NywyNjM5MywyNjM5NiwyNjQwMCwyNjQwMiwyNjQx''@;'; put 'put ''OSwyNjQzMCwyNjQzNywyNjQzOSwyNjQ0MCwyNjQ0NCwyNjQ1MiwyNjQ1MywyNjQ2MSwyNjQ3MCwyNjQ3NiwyNjQ3OCwyNjQ4NCwyNjQ4NiwyNjQ5MSwyNjQ5NywyNjUwMCwyNjUxMCwyNjUxMSwyNjUxMywyNjUxNSwyNjUxOCwyNjUyMCwyNjUyMSwyNjUyMywyNjU0NCwyNjU0NSwyNjU0Niwy''@;'; put 'put ''NjU0OSwyNjU1NSwyNjU1NiwyNjU1NywyNjYxNywyNjU2MCwyNjU2MiwyNjU2MywyNjU2NSwyNjU2OCwyNjU2OSwyNjU3OCwyNjU4MywyNjU4NSwyNjU4OCwyNjU5MywyNjU5OCwyNjYwOCwyNjYxMCwyNjYxNCwyNjYxNSwyNjcwNiwyNjY0NCwyNjY0OSwyNjY1MywyNjY1NSwyNjY2NCwyNjY2''@;'; put 'put ''MywyNjY2OCwyNjY2OSwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NSwyNjY4MywyNjY4NywyNjY5MiwyNjY5MywyNjY5OCwyNjcwMCwyNjcwOSwyNjcxMSwyNjcxMiwyNjcxNSwyNjczMSwyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjc0MSwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwy''@;'; put 'put ''Njc1NCwyNjc1NiwyNjc1OCwyNjc2MCwyNjc3NCwyNjc3NiwyNjc3OCwyNjc4MCwyNjc4NSwyNjc4NywyNjc4OSwyNjc5MywyNjc5NCwyNjc5OCwyNjgwMiwyNjgxMSwyNjgyMSwyNjgyNCwyNjgyOCwyNjgzMSwyNjgzMiwyNjgzMywyNjgzNSwyNjgzOCwyNjg0MSwyNjg0NCwyNjg0NSwyNjg1''@;'; put 'put ''MywyNjg1NiwyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2NCwyNjg2NSwyNjg2OSwyNjg3MCwyNjg3NSwyNjg3NiwyNjg3NywyNjg4NiwyNjg4OSwyNjg5MCwyNjg5NiwyNjg5NywyNjg5OSwyNjkwMiwyNjkwMywyNjkyOSwyNjkzMSwyNjkzMywyNjkzNiwyNjkzOSwyNjk0NiwyNjk0OSwy''@;'; put 'put ''Njk1MywyNjk1OCwyNjk2NywyNjk3MSwyNjk3OSwyNjk4MCwyNjk4MSwyNjk4MiwyNjk4NCwyNjk4NSwyNjk4OCwyNjk5MiwyNjk5MywyNjk5NCwyNzAwMiwyNzAwMywyNzAwNywyNzAwOCwyNzAyMSwyNzAyNiwyNzAzMCwyNzAzMiwyNzA0MSwyNzA0NSwyNzA0NiwyNzA0OCwyNzA1MSwyNzA1''@;'; put 'put ''MywyNzA1NSwyNzA2MywyNzA2NCwyNzA2NiwyNzA2OCwyNzA3NywyNzA4MCwyNzA4OSwyNzA5NCwyNzA5NSwyNzEwNiwyNzEwOSwyNzExOCwyNzExOSwyNzEyMSwyNzEyMywyNzEyNSwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOSwyNzE1MSwyNzE1MywyNzE1NywyNzE2MiwyNzE2NSwyNzE2OCwy''@;'; put 'put ''NzE3MiwyNzE3NiwyNzE4NCwyNzE4NiwyNzE4OCwyNzE5MSwyNzE5NSwyNzE5OCwyNzE5OSwyNzIwNSwyNzIwNiwyNzIwOSwyNzIxMCwyNzIxNCwyNzIxNiwyNzIxNywyNzIxOCwyNzIyMSwyNzIyMiwyNzIyNywyNzIzNiwyNzIzOSwyNzI0MiwyNzI0OSwyNzI1MSwyNzI2MiwyNzI2NSwyNzI2''@;'; put 'put ''NywyNzI3MCwyNzI3MSwyNzI3MywyNzI3NSwyNzI4MSwyNzI5MSwyNzI5MywyNzI5NCwyNzI5NSwyNzMwMSwyNzMwNywyNzMxMSwyNzMxMiwyNzMxMywyNzMxNiwyNzMyNSwyNzMyNiwyNzMyNywyNzMzNCwyNzMzNywyNzMzNiwyNzM0MCwyNzM0NCwyNzM0OCwyNzM0OSwyNzM1MCwyNzM1Niwy''@;'; put 'put ''NzM1NywyNzM2NCwyNzM2NywyNzM3MiwyNzM3NiwyNzM3NywyNzM3OCwyNzM4OCwyNzM4OSwyNzM5NCwyNzM5NSwyNzM5OCwyNzM5OSwyNzQwMSwyNzQwNywyNzQwOCwyNzQwOSwyNzQxNSwyNzQxOSwyNzQyMiwyNzQyOCwyNzQzMiwyNzQzNSwyNzQzNiwyNzQzOSwyNzQ0NSwyNzQ0NiwyNzQ1''@;'; put 'put ''MSwyNzQ1NSwyNzQ2MiwyNzQ2NiwyNzQ2OSwyNzQ3NCwyNzQ3OCwyNzQ4MCwyNzQ4NSwyNzQ4OCwyNzQ5NSwyNzQ5OSwyNzUwMiwyNzUwNCwyNzUwOSwyNzUxNywyNzUxOCwyNzUyMiwyNzUyNSwyNzU0MywyNzU0NywyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU2MCwyNzU2MSwyNzU2NCwy''@;'; put 'put ''NzU2NSwyNzU2NiwyNzU2OCwyNzU3NiwyNzU3NywyNzU4MSwyNzU4MiwyNzU4NywyNzU4OCwyNzU5MywyNzU5NiwyNzYwNiwyNzYxMCwyNzYxNywyNzYxOSwyNzYyMiwyNzYyMywyNzYzMCwyNzYzMywyNzYzOSwyNzY0MSwyNzY0NywyNzY1MCwyNzY1MiwyNzY1MywyNzY1NywyNzY2MSwyNzY2''@;'; put 'put ''MiwyNzY2NCwyNzY2NiwyNzY3MywyNzY3OSwyNzY4NiwyNzY4NywyNzY4OCwyNzY5MiwyNzY5NCwyNzY5OSwyNzcwMSwyNzcwMiwyNzcwNiwyNzcwNywyNzcxMSwyNzcyMiwyNzcyMywyNzcyNSwyNzcyNywyNzczMCwyNzczMiwyNzczNywyNzczOSwyNzc0MCwyNzc1NSwyNzc1NywyNzc1OSwy''@;'; put 'put ''Nzc2NCwyNzc2NiwyNzc2OCwyNzc2OSwyNzc3MSwyNzc4MSwyNzc4MiwyNzc4MywyNzc4NSwyNzc5NiwyNzc5NywyNzc5OSwyNzgwMCwyNzgwNCwyNzgwNywyNzgyNCwyNzgyNiwyNzgyOCwyNzg0MiwyNzg0NiwyNzg1MywyNzg1NSwyNzg1NiwyNzg1NywyNzg1OCwyNzg2MCwyNzg2MiwyNzg2''@;'; put 'put ''NiwyNzg2OCwyNzg3MiwyNzg3OSwyNzg4MSwyNzg4MywyNzg4NCwyNzg4NiwyNzg5MCwyNzg5MiwyNzkwOCwyNzkxMSwyNzkxNCwyNzkxOCwyNzkxOSwyNzkyMSwyNzkyMywyNzkzMCwyNzk0MiwyNzk0MywyNzk0NCwyNzc1MSwyNzk1MCwyNzk1MSwyNzk1MywyNzk2MSwyNzk2NCwyNzk2Nywy''@;'; put 'put ''Nzk5MSwyNzk5OCwyNzk5OSwyODAwMSwyODAwNSwyODAwNywyODAxNSwyODAxNiwyODAyOCwyODAzNCwyODAzOSwyODA0OSwyODA1MCwyODA1MiwyODA1NCwyODA1NSwyODA1NiwyODA3NCwyODA3NiwyODA4NCwyODA4NywyODA4OSwyODA5MywyODA5NSwyODEwMCwyODEwNCwyODEwNiwyODEx''@;'; put 'put ''MCwyODExMSwyODExOCwyODEyMywyODEyNSwyODEyNywyODEyOCwyODEzMCwyODEzMywyODEzNywyODE0MywyODE0NCwyODE0OCwyODE1MCwyODE1NiwyODE2MCwyODE2NCwyODE5MCwyODE5NCwyODE5OSwyODIxMCwyODIxNCwyODIxNywyODIxOSwyODIyMCwyODIyOCwyODIyOSwyODIzMiwy''@;'; put 'put ''ODIzMywyODIzNSwyODIzOSwyODI0MSwyODI0MiwyODI0MywyODI0NCwyODI0NywyODI1MiwyODI1MywyODI1NCwyODI1OCwyODI1OSwyODI2NCwyODI3NSwyODI4MywyODI4NSwyODMwMSwyODMwNywyODMxMywyODMyMCwyODMyNywyODMzMywyODMzNCwyODMzNywyODMzOSwyODM0NywyODM1''@;'; put 'put ''MSwyODM1MiwyODM1MywyODM1NSwyODM1OSwyODM2MCwyODM2MiwyODM2NSwyODM2NiwyODM2NywyODM5NSwyODM5NywyODM5OCwyODQwOSwyODQxMSwyODQxMywyODQyMCwyODQyNCwyODQyNiwyODQyOCwyODQyOSwyODQzOCwyODQ0MCwyODQ0MiwyODQ0MywyODQ1NCwyODQ1NywyODQ1OCwy''@;'; put 'put ''ODQ2MywyODQ2NCwyODQ2NywyODQ3MCwyODQ3NSwyODQ3NiwyODQ2MSwyODQ5NSwyODQ5NywyODQ5OCwyODQ5OSwyODUwMywyODUwNSwyODUwNiwyODUwOSwyODUxMCwyODUxMywyODUxNCwyODUyMCwyODUyNCwyODU0MSwyODU0MiwyODU0NywyODU1MSwyODU1MiwyODU1NSwyODU1NiwyODU1''@;'; put 'put ''NywyODU2MCwyODU2MiwyODU2MywyODU2NCwyODU2NiwyODU3MCwyODU3NSwyODU3NiwyODU4MSwyODU4MiwyODU4MywyODU4NCwyODU5MCwyODU5MSwyODU5MiwyODU5NywyODU5OCwyODYwNCwyODYxMywyODYxNSwyODYxNiwyODYxOCwyODYzNCwyODYzOCwyODY0OCwyODY0OSwyODY1Niwy''@;'; put 'put ''ODY2MSwyODY2NSwyODY2OCwyODY2OSwyODY3MiwyODY3NywyODY3OCwyODY3OSwyODY4NSwyODY5NSwyODcwNCwyODcwNywyODcxOSwyODcyNCwyODcyNywyODcyOSwyODczMiwyODczOSwyODc0MCwyODc0NCwyODc0NSwyODc0NiwyODc0NywyODc1NiwyODc1NywyODc2NSwyODc2NiwyODc1''@;'; put 'put ''MCwyODc3MiwyODc3MywyODc4MCwyODc4MiwyODc4OSwyODc5MCwyODc5OCwyODgwMSwyODgwNSwyODgwNiwyODgyMCwyODgyMSwyODgyMiwyODgyMywyODgyNCwyODgyNywyODgzNiwyODg0MywyODg0OCwyODg0OSwyODg1MiwyODg1NSwyODg3NCwyODg4MSwyODg4MywyODg4NCwyODg4NSwy''@;'; put 'put ''ODg4NiwyODg4OCwyODg5MiwyODkwMCwyODkyMiwyODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzOSwyODk0MCwyODk0MywyODk1OCwyODk2MCwyODk3MSwyODk3MywyODk3NSwyODk3NiwyODk3NywyODk4NCwyODk5MywyODk5NywyODk5OCwyODk5OSwyOTAwMiwyOTAwMywyOTAw''@;'; put 'put ''OCwyOTAxMCwyOTAxNSwyOTAxOCwyOTAyMCwyOTAyMiwyOTAyNCwyOTAzMiwyOTA0OSwyOTA1NiwyOTA2MSwyOTA2MywyOTA2OCwyOTA3NCwyOTA4MiwyOTA4MywyOTA4OCwyOTA5MCwyOTEwMywyOTEwNCwyOTEwNiwyOTEwNywyOTExNCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyNCwyOTEzMSwy''@;'; put 'put ''OTEzMiwyOTEzOSwyOTE0MiwyOTE0NSwyOTE0NiwyOTE0OCwyOTE3NiwyOTE4MiwyOTE4NCwyOTE5MSwyOTE5MiwyOTE5MywyOTIwMywyOTIwNywyOTIxMCwyOTIxMywyOTIxNSwyOTIyMCwyOTIyNywyOTIzMSwyOTIzNiwyOTI0MCwyOTI0MSwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MywyOTI2''@;'; put 'put ''MiwyOTI2MywyOTI2NCwyOTI2NywyOTI2OSwyOTI3MCwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4OCwyOTI5MSwyOTI5NCwyOTI5NSwyOTI5NywyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMxMSwyOTMxNiwyOTMyMSwyOTMyNSwyOTMyNiwyOTMzMSwyOTMzOSwyOTM1Miwy''@;'; put 'put ''OTM1NywyOTM1OCwyOTM2MSwyOTM2NCwyOTM3NCwyOTM3NywyOTM4MywyOTM4NSwyOTM4OCwyOTM5NywyOTM5OCwyOTQwMCwyOTQwNywyOTQxMywyOTQyNywyOTQyOCwyOTQzNCwyOTQzNSwyOTQzOCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NywyOTQ1MSwyOTQ1MywyOTQ1OCwyOTQ1OSwyOTQ2''@;'; put 'put ''NCwyOTQ2NSwyOTQ3MCwyOTQ3NCwyOTQ3NiwyOTQ3OSwyOTQ4MCwyOTQ4NCwyOTQ4OSwyOTQ5MCwyOTQ5MywyOTQ5OCwyOTQ5OSwyOTUwMSwyOTUwNywyOTUxNywyOTUyMCwyOTUyMiwyOTUyNiwyOTUyOCwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNiwyOTU0MiwyOTU0MywyOTU0NSwyOTU0Nywy''@;'; put 'put ''OTU0OCwyOTU1MCwyOTU1MSwyOTU1MywyOTU1OSwyOTU2MSwyOTU2NCwyOTU2OCwyOTU2OSwyOTU3MSwyOTU3MywyOTU3NCwyOTU4MiwyOTU4NCwyOTU4NywyOTU4OSwyOTU5MSwyOTU5MiwyOTU5NiwyOTU5OCwyOTU5OSwyOTYwMCwyOTYwMiwyOTYwNSwyOTYwNiwyOTYxMCwyOTYxMSwyOTYx''@;'; put 'put ''MywyOTYyMSwyOTYyMywyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMSwyOTYzNywyOTYzOCwyOTY0MSwyOTY0MywyOTY0NCwyOTY0NywyOTY1MCwyOTY1MSwyOTY1NCwyOTY1NywyOTY2MSwyOTY2NSwyOTY2NywyOTY3MCwyOTY3MSwyOTY3MywyOTY4NCwyOTY4NSwyOTY4NywyOTY4OSwyOTY5MCwy''@;'; put 'put ''OTY5MSwyOTY5MywyOTY5NSwyOTY5NiwyOTY5NywyOTcwMCwyOTcwMywyOTcwNiwyOTcxMywyOTcyMiwyOTcyMywyOTczMiwyOTczNCwyOTczNiwyOTczNywyOTczOCwyOTczOSwyOTc0MCwyOTc0MSwyOTc0MiwyOTc0MywyOTc0NCwyOTc0NSwyOTc1MywyOTc2MCwyOTc2MywyOTc2NCwyOTc2''@;'; put 'put ''NiwyOTc2NywyOTc3MSwyOTc3MywyOTc3NywyOTc3OCwyOTc4MywyOTc4OSwyOTc5NCwyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMywyOTgwNSwyOTgwNiwyOTgwOSwyOTgxMCwyOTgyNCwyOTgyNSwyOTgyOSwyOTgzMCwyOTgzMSwyOTgzMywyOTgzOSwyOTg0MCwyOTg0MSwyOTg0MiwyOTg0OCwy''@;'; put 'put ''OTg0OSwyOTg1MCwyOTg1MiwyOTg1NSwyOTg1NiwyOTg1NywyOTg1OSwyOTg2MiwyOTg2NCwyOTg2NSwyOTg2NiwyOTg2NywyOTg3MCwyOTg3MSwyOTg3MywyOTg3NCwyOTg3NywyOTg4MSwyOTg4MywyOTg4NywyOTg5NiwyOTg5NywyOTkwMCwyOTkwNCwyOTkwNywyOTkxMiwyOTkxNCwyOTkx''@;'; put 'put ''NSwyOTkxOCwyOTkxOSwyOTkyNCwyOTkyOCwyOTkzMCwyOTkzMSwyOTkzNSwyOTk0MCwyOTk0NiwyOTk0NywyOTk0OCwyOTk1MSwyOTk1OCwyOTk3MCwyOTk3NCwyOTk3NSwyOTk4NCwyOTk4NSwyOTk4OCwyOTk5MSwyOTk5MywyOTk5NCwyOTk5OSwzMDAwNiwzMDAwOSwzMDAxMywzMDAxNCwz''@;'; put 'put ''MDAxNSwzMDAxNiwzMDAxOSwzMDAyMywzMDAyNCwzMDAzMCwzMDAzMiwzMDAzNCwzMDAzOSwzMDA0NiwzMDA0NywzMDA0OSwzMDA2MywzMDA2NSwzMDA3MywzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MSwzMDA4NSwzMDA5NiwzMDA5OCwzMDA5OSwzMDEwMSwzMDEwNSwzMDEw''@;'; put 'put ''OCwzMDExNCwzMDExNiwzMDEzMiwzMDEzOCwzMDE0MywzMDE0NCwzMDE0NSwzMDE0OCwzMDE1MCwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2NywzMDE3MiwzMDE3NSwzMDE3NiwzMDE3NywzMDE4MCwzMDE4MywzMDE4OCwzMDE5MCwzMDE5MSwzMDE5MywzMDIwMSwzMDIwOCwzMDIxMCwzMDIxMSwz''@;'; put 'put ''MDIxMiwzMDIxNSwzMDIxNiwzMDIxOCwzMDIyMCwzMDIyMywzMDIyNiwzMDIyNywzMDIyOSwzMDIzMCwzMDIzMywzMDIzNSwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MywzMDI0NSwzMDI0NiwzMDI0OSwzMDI1MywzMDI1OCwzMDI1OSwzMDI2MSwzMDI2NCwzMDI2NSwzMDI2NiwzMDI2OCwzMDI4''@;'; put 'put ''MiwzMDI3MiwzMDI3MywzMDI3NSwzMDI3NiwzMDI3NywzMDI4MSwzMDI4MywzMDI5MywzMDI5NywzMDMwMywzMDMwOCwzMDMwOSwzMDMxNywzMDMxOCwzMDMxOSwzMDMyMSwzMDMyNCwzMDMzNywzMDM0MSwzMDM0OCwzMDM0OSwzMDM1NywzMDM2MywzMDM2NCwzMDM2NSwzMDM2NywzMDM2OCwz''@;'; put 'put ''MDM3MCwzMDM3MSwzMDM3MiwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3OCwzMDM4MSwzMDM5NywzMDQwMSwzMDQwNSwzMDQwOSwzMDQxMSwzMDQxMiwzMDQxNCwzMDQyMCwzMDQyNSwzMDQzMiwzMDQzOCwzMDQ0MCwzMDQ0NCwzMDQ0OCwzMDQ0OSwzMDQ1NCwzMDQ1NywzMDQ2MCwzMDQ2''@;'; put 'put ''NCwzMDQ3MCwzMDQ3NCwzMDQ3OCwzMDQ4MiwzMDQ4NCwzMDQ4NSwzMDQ4NywzMDQ4OSwzMDQ5MCwzMDQ5MiwzMDQ5OCwzMDUwNCwzMDUwOSwzMDUxMCwzMDUxMSwzMDUxNiwzMDUxNywzMDUxOCwzMDUyMSwzMDUyNSwzMDUyNiwzMDUzMCwzMDUzMywzMDUzNCwzMDUzOCwzMDU0MSwzMDU0Miwz''@;'; put 'put ''MDU0MywzMDU0NiwzMDU1MCwzMDU1MSwzMDU1NiwzMDU1OCwzMDU1OSwzMDU2MCwzMDU2MiwzMDU2NCwzMDU2NywzMDU3MCwzMDU3MiwzMDU3NiwzMDU3OCwzMDU3OSwzMDU4MCwzMDU4NiwzMDU4OSwzMDU5MiwzMDU5NiwzMDYwNCwzMDYwNSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxOCwzMDYy''@;'; put 'put ''MywzMDYyNiwzMDYzMSwzMDYzNCwzMDYzOCwzMDYzOSwzMDY0MSwzMDY0NSwzMDY1NCwzMDY1OSwzMDY2NSwzMDY3MywzMDY3NCwzMDY3NywzMDY4MSwzMDY4NiwzMDY4NywzMDY4OCwzMDY5MiwzMDY5NCwzMDY5OCwzMDcwMCwzMDcwNCwzMDcwNSwzMDcwOCwzMDcxMiwzMDcxNSwzMDcyNSwz''@;'; put 'put ''MDcyNiwzMDcyOSwzMDczMywzMDczNCwzMDczNywzMDc0OSwzMDc1MywzMDc1NCwzMDc1NSwzMDc2NSwzMDc2NiwzMDc2OCwzMDc3MywzMDc3NSwzMDc4NywzMDc4OCwzMDc5MSwzMDc5MiwzMDc5NiwzMDc5OCwzMDgwMiwzMDgxMiwzMDgxNCwzMDgxNiwzMDgxNywzMDgxOSwzMDgyMCwzMDgy''@;'; put 'put ''NCwzMDgyNiwzMDgzMCwzMDg0MiwzMDg0NiwzMDg1OCwzMDg2MywzMDg2OCwzMDg3MiwzMDg4MSwzMDg3NywzMDg3OCwzMDg3OSwzMDg4NCwzMDg4OCwzMDg5MiwzMDg5MywzMDg5NiwzMDg5NywzMDg5OCwzMDg5OSwzMDkwNywzMDkwOSwzMDkxMSwzMDkxOSwzMDkyMCwzMDkyMSwzMDkyNCwz''@;'; put 'put ''MDkyNiwzMDkzMCwzMDkzMSwzMDkzMywzMDkzNCwzMDk0OCwzMDkzOSwzMDk0MywzMDk0NCwzMDk0NSwzMDk1MCwzMDk1NCwzMDk2MiwzMDk2MywzMDk3NiwzMDk2NiwzMDk2NywzMDk3MCwzMDk3MSwzMDk3NSwzMDk4MiwzMDk4OCwzMDk5MiwzMTAwMiwzMTAwNCwzMTAwNiwzMTAwNywzMTAw''@;'; put 'put ''OCwzMTAxMywzMTAxNSwzMTAxNywzMTAyMSwzMTAyNSwzMTAyOCwzMTAyOSwzMTAzNSwzMTAzNywzMTAzOSwzMTA0NCwzMTA0NSwzMTA0NiwzMTA1MCwzMTA1MSwzMTA1NSwzMTA1NywzMTA2MCwzMTA2NCwzMTA2NywzMTA2OCwzMTA3OSwzMTA4MSwzMTA4MywzMTA5MCwzMTA5NywzMTA5OSwz''@;'; put 'put ''MTEwMCwzMTEwMiwzMTExNSwzMTExNiwzMTEyMSwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyOCwzMTEzMSwzMTEzMiwzMTEzNywzMTE0NCwzMTE0NSwzMTE0NywzMTE1MSwzMTE1MywzMTE1NiwzMTE2MCwzMTE2MywzMTE3MCwzMTE3MiwzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MywzMTE4''@;'; put 'put ''OCwzMTE5MCwzMTE5NCwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMiwzMTIwNSwzMTIxMCwzMTIxMSwzMTIxMywzMTIxNywzMTIyNCwzMTIyOCwzMTIzNCwzMTIzNSwzMTIzOSwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0OSwzMTI1MywzMTI1OSwzMTI2MiwzMTI2NSwzMTI3MSwzMTI3NSwzMTI3Nywz''@;'; put 'put ''MTI3OSwzMTI4MCwzMTI4NCwzMTI4NSwzMTI4OCwzMTI4OSwzMTI5MCwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwOCwzMTMxNywzMTMxOCwzMTMyMSwzMTMyNCwzMTMyNSwzMTMyNywzMTMyOCwzMTMzMywzMTMzNSwzMTMzOCwzMTM0MSwzMTM0OSwzMTM1MiwzMTM1OCwzMTM2MCwzMTM2''@;'; put 'put ''MiwzMTM2NSwzMTM2NiwzMTM3MCwzMTM3MSwzMTM3NiwzMTM3NywzMTM4MCwzMTM5MCwzMTM5MiwzMTM5NSwzMTQwNCwzMTQxMSwzMTQxMywzMTQxNywzMTQxOSwzMTQyMCwzMTQzMCwzMTQzMywzMTQzNiwzMTQzOCwzMTQ0MSwzMTQ1MSwzMTQ2NCwzMTQ2NSwzMTQ2NywzMTQ2OCwzMTQ3Mywz''@;'; put 'put ''MTQ3NiwzMTQ4MywzMTQ4NSwzMTQ4NiwzMTQ5NSwzMTUwOCwzMTUxOSwzMTUyMywzMTUyNywzMTUyOSwzMTUzMCwzMTUzMSwzMTUzMywzMTUzNCwzMTUzNSwzMTUzNiwzMTUzNywzMTU0MCwzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1OSwzMTU2NiwzMTU3MywzMTU4NCwzMTU4OCwzMTU5''@;'; put 'put ''MCwzMTU5MywzMTU5NCwzMTU5NywzMTU5OSwzMTYwMiwzMTYwMywzMTYwNywzMTYyMCwzMTYyNSwzMTYzMCwzMTYzMiwzMTYzMywzMTYzOCwzMTY0MywzMTY0NiwzMTY0OCwzMTY1MywzMTY2MCwzMTY2MywzMTY2NCwzMTY2NiwzMTY2OSwzMTY3MCwzMTY3NCwzMTY3NSwzMTY3NiwzMTY3Nywz''@;'; put 'put ''MTY4MiwzMTY4NSwzMTY4OCwzMTY5MCwzMTcwMCwzMTcwMiwzMTcwMywzMTcwNSwzMTcwNiwzMTcwNywzMTcyMCwzMTcyMiwzMTczMCwzMTczMiwzMTczMywzMTczNiwzMTczNywzMTczOCwzMTc0MCwzMTc0MiwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc1MCwzMTc1MywzMTc1NSwzMTc1''@;'; put 'put ''NiwzMTc1OCwzMTc1OSwzMTc2OSwzMTc3MSwzMTc3NiwzMTc4MSwzMTc4MiwzMTc4NCwzMTc4OCwzMTc5MywzMTc5NSwzMTc5NiwzMTc5OCwzMTgwMSwzMTgwMiwzMTgxNCwzMTgxOCwzMTgyOSwzMTgyNSwzMTgyNiwzMTgyNywzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwz''@;'; put 'put ''MTg0MSwzMTg0MywzMTg0NywzMTg0OSwzMTg1MywzMTg1NCwzMTg1NiwzMTg1OCwzMTg2NSwzMTg2OCwzMTg2OSwzMTg3OCwzMTg3OSwzMTg4NywzMTg5MiwzMTkwMiwzMTkwNCwzMTkxMCwzMTkyMCwzMTkyNiwzMTkyNywzMTkzMCwzMTkzMSwzMTkzMiwzMTkzNSwzMTk0MCwzMTk0MywzMTk0''@;'; put 'put ''NCwzMTk0NSwzMTk0OSwzMTk1MSwzMTk1NSwzMTk1NiwzMTk1NywzMTk1OSwzMTk2MSwzMTk2MiwzMTk2NSwzMTk3NCwzMTk3NywzMTk3OSwzMTk4OSwzMjAwMywzMjAwNywzMjAwOCwzMjAwOSwzMjAxNSwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMiwzMjAyOSwzMjAzMCwzMjAzNSwzMjAzOCwz''@;'; put 'put ''MjA0MiwzMjA0NSwzMjA0OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2NCwzMjA2NSwzMjA3MSwzMjA3MiwzMjA3NywzMjA4MSwzMjA4MywzMjA4NywzMjA4OSwzMjA5MCwzMjA5MiwzMjA5MywzMjEwMSwzMjEwMywzMjEwNiwzMjExMiwzMjEyMCwzMjEyMiwzMjEyMywzMjEyNywzMjEyOSwzMjEz''@;'; put 'put ''MCwzMjEzMSwzMjEzMywzMjEzNCwzMjEzNiwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0NSwzMjE1MCwzMjE1MSwzMjE1NywzMjE1OCwzMjE2NiwzMjE2NywzMjE3MCwzMjE3OSwzMjE4MiwzMjE4MywzMjE4NSwzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjIwNCwzMjIwNSwzMjIwNiwz''@;'; put 'put ''MjIxNSwzMjIxNywzMjI1NiwzMjIyNiwzMjIyOSwzMjIzMCwzMjIzNCwzMjIzNSwzMjIzNywzMjI0MSwzMjI0NSwzMjI0NiwzMjI0OSwzMjI1MCwzMjI2NCwzMjI3MiwzMjI3MywzMjI3NywzMjI3OSwzMjI4NCwzMjI4NSwzMjI4OCwzMjI5NSwzMjI5NiwzMjMwMCwzMjMwMSwzMjMwMywzMjMw''@;'; put 'put ''NywzMjMxMCwzMjMxOSwzMjMyNCwzMjMyNSwzMjMyNywzMjMzNCwzMjMzNiwzMjMzOCwzMjM0NCwzMjM1MSwzMjM1MywzMjM1NCwzMjM1NywzMjM2MywzMjM2NiwzMjM2NywzMjM3MSwzMjM3NiwzMjM4MiwzMjM4NSwzMjM5MCwzMjM5MSwzMjM5NCwzMjM5NywzMjQwMSwzMjQwNSwzMjQwOCwz''@;'; put 'put ''MjQxMCwzMjQxMywzMjQxNCwzMjU3MiwzMjU3MSwzMjU3MywzMjU3NCwzMjU3NSwzMjU3OSwzMjU4MCwzMjU4MywzMjU5MSwzMjU5NCwzMjU5NSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwOSwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYyMSwzMjYyNSwzMjYzNywzMjYzOCwzMjYzOSwzMjY0''@;'; put 'put ''MCwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY2MiwzMjY2MywzMjY2OCwzMjY3MywzMjY3NCwzMjY3OCwzMjY4MiwzMjY4NSwzMjY5MiwzMjcwMCwzMjcwMywzMjcwNCwzMjcwNywzMjcxMiwzMjcxOCwzMjcxOSwzMjczMSwzMjczNSwzMjczOSwzMjc0MSwzMjc0NCwzMjc0OCwz''@;'; put 'put ''Mjc1MCwzMjc1MSwzMjc1NCwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3NSwzMjc3NiwzMjc3OCwzMjc4MSwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc4OCwzMjc5MCwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMCwzMjgwNCwzMjgwNiwzMjgxMiwzMjgxNCwzMjgxNiwzMjgyMCwzMjgy''@;'; put 'put ''MSwzMjgyMywzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzNiwzMjg2NCwzMjg2OCwzMjg3MCwzMjg3NywzMjg4MSwzMjg4NSwzMjg5NywzMjkwNCwzMjkxMCwzMjkyNCwzMjkyNiwzMjkzNCwzMjkzNSwzMjkzOSwzMjk1MiwzMjk1MywzMjk2OCwzMjk3MywzMjk3NSwzMjk3OCwz''@;'; put 'put ''Mjk4MCwzMjk4MSwzMjk4MywzMjk4NCwzMjk5MiwzMzAwNSwzMzAwNiwzMzAwOCwzMzAxMCwzMzAxMSwzMzAxNCwzMzAxNywzMzAxOCwzMzAyMiwzMzAyNywzMzAzNSwzMzA0NiwzMzA0NywzMzA0OCwzMzA1MiwzMzA1NCwzMzA1NiwzMzA2MCwzMzA2MywzMzA2OCwzMzA3MiwzMzA3NywzMzA4''@;'; put 'put ''MiwzMzA4NCwzMzA5MywzMzA5NSwzMzA5OCwzMzEwMCwzMzEwNiwzMzExMSwzMzEyMCwzMzEyMSwzMzEyNywzMzEyOCwzMzEyOSwzMzEzMywzMzEzNSwzMzE0MywzMzE1MywzMzE2OCwzMzE1NiwzMzE1NywzMzE1OCwzMzE2MywzMzE2NiwzMzE3NCwzMzE3NiwzMzE3OSwzMzE4MiwzMzE4Niwz''@;'; put 'put ''MzE5OCwzMzIwMiwzMzIwNCwzMzIxMSwzMzIyNywzMzIxOSwzMzIyMSwzMzIyNiwzMzIzMCwzMzIzMSwzMzIzNywzMzIzOSwzMzI0MywzMzI0NSwzMzI0NiwzMzI0OSwzMzI1MiwzMzI1OSwzMzI2MCwzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MiwzMzI3MywzMzI3NywzMzI3''@;'; put 'put ''OSwzMzI4MCwzMzI4MywzMzI5NSwzMzI5OSwzMzMwMCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMywzMzMxNCwzMzMyMCwzMzMzMCwzMzMzMiwzMzMzOCwzMzM0NywzMzM0OCwzMzM0OSwzMzM1MCwzMzM1NSwzMzM1OCwzMzM1OSwzMzM2MSwzMzM2NiwzMzM3MiwzMzM3NiwzMzM3OSwzMzM4Mywz''@;'; put 'put ''MzM4OSwzMzM5NiwzMzQwMywzMzQwNSwzMzQwNywzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMiwzMzQxNSwzMzQxNywzMzQxOCwzMzQyMiwzMzQyNSwzMzQyOCwzMzQzMCwzMzQzMiwzMzQzNCwzMzQzNSwzMzQ0MCwzMzQ0MSwzMzQ0MywzMzQ0NCwzMzQ0NywzMzQ0OCwzMzQ0OSwzMzQ1MCwzMzQ1''@;'; put 'put ''NCwzMzQ1NiwzMzQ1OCwzMzQ2MCwzMzQ2MywzMzQ2NiwzMzQ2OCwzMzQ3MCwzMzQ3MSwzMzQ3OCwzMzQ4OCwzMzQ5MywzMzQ5OCwzMzUwNCwzMzUwNiwzMzUwOCwzMzUxMiwzMzUxNCwzMzUxNywzMzUxOSwzMzUyNiwzMzUyNywzMzUzMywzMzUzNCwzMzUzNiwzMzUzNywzMzU0MywzMzU0NCwz''@;'; put 'put ''MzU0NiwzMzU0NywzMzYyMCwzMzU2MywzMzU2NSwzMzU2NiwzMzU2NywzMzU2OSwzMzU3MCwzMzU4MCwzMzU4MSwzMzU4MiwzMzU4NCwzMzU4NywzMzU5MSwzMzU5NCwzMzU5NiwzMzU5NywzMzYwMiwzMzYwMywzMzYwNCwzMzYwNywzMzYxMywzMzYxNCwzMzYxNywzMzYyMSwzMzYyMiwzMzYy''@;'; put 'put ''MywzMzY0OCwzMzY1NiwzMzY2MSwzMzY2MywzMzY2NCwzMzY2NiwzMzY2OCwzMzY3MCwzMzY3NywzMzY4MiwzMzY4NCwzMzY4NSwzMzY4OCwzMzY4OSwzMzY5MSwzMzY5MiwzMzY5MywzMzcwMiwzMzcwMywzMzcwNSwzMzcwOCwzMzcyNiwzMzcyNywzMzcyOCwzMzczNSwzMzczNywzMzc0Mywz''@;'; put 'put ''Mzc0NCwzMzc0NSwzMzc0OCwzMzc1NywzMzYxOSwzMzc2OCwzMzc3MCwzMzc4MiwzMzc4NCwzMzc4NSwzMzc4OCwzMzc5MywzMzc5OCwzMzgwMiwzMzgwNywzMzgwOSwzMzgxMywzMzgxNywzMzcwOSwzMzgzOSwzMzg0OSwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NiwzMzg2OSwzMzg3MSwzMzg3''@;'; put 'put ''MywzMzg3NCwzMzg3OCwzMzg4MCwzMzg4MSwzMzg4MiwzMzg4NCwzMzg4OCwzMzg5MiwzMzg5MywzMzg5NSwzMzg5OCwzMzkwNCwzMzkwNywzMzkwOCwzMzkxMCwzMzkxMiwzMzkxNiwzMzkxNywzMzkyMSwzMzkyNSwzMzkzOCwzMzkzOSwzMzk0MSwzMzk1MCwzMzk1OCwzMzk2MCwzMzk2MSwz''@;'; put 'put ''Mzk2MiwzMzk2NywzMzk2OSwzMzk3MiwzMzk3OCwzMzk4MSwzMzk4MiwzMzk4NCwzMzk4NiwzMzk5MSwzMzk5MiwzMzk5NiwzMzk5OSwzNDAwMywzNDAxMiwzNDAyMywzNDAyNiwzNDAzMSwzNDAzMiwzNDAzMywzNDAzNCwzNDAzOSwzNDA5OCwzNDA0MiwzNDA0MywzNDA0NSwzNDA1MCwzNDA1''@;'; put 'put ''MSwzNDA1NSwzNDA2MCwzNDA2MiwzNDA2NCwzNDA3NiwzNDA3OCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NywzNDA5MCwzNDA5MSwzNDA5NSwzNDA5OSwzNDEwMCwzNDEwMiwzNDExMSwzNDExOCwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzNCwzNDEzNywzNDE0MCwz''@;'; put 'put ''NDE0MSwzNDE0MiwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0OCwzNDE1NSwzNDE1OSwzNDE2OSwzNDE3MCwzNDE3MSwzNDE3MywzNDE3NSwzNDE3NywzNDE4MSwzNDE4MiwzNDE4NSwzNDE4NywzNDE4OCwzNDE5MSwzNDE5NSwzNDIwMCwzNDIwNSwzNDIwNywzNDIwOCwzNDIxMCwzNDIx''@;'; put 'put ''MywzNDIxNSwzNDIyOCwzNDIzMCwzNDIzMSwzNDIzMiwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MiwzNDI0NywzNDI1MCwzNDI1MSwzNDI1NCwzNDIyMSwzNDI2NCwzNDI2NiwzNDI3MSwzNDI3MiwzNDI3OCwzNDI4MCwzNDI4NSwzNDI5MSwzNDI5NCwzNDMwMCwzNDMwMywzNDMwNCwz''@;'; put 'put ''NDMwOCwzNDMwOSwzNDMxNywzNDMxOCwzNDMyMCwzNDMyMSwzNDMyMiwzNDMyOCwzNDMyOSwzNDMzMSwzNDMzNCwzNDMzNywzNDM0MywzNDM0NSwzNDM1OCwzNDM2MCwzNDM2MiwzNDM2NCwzNDM2NSwzNDM2OCwzNDM3MCwzNDM3NCwzNDM4NiwzNDM4NywzNDM5MCwzNDM5MSwzNDM5MiwzNDM5''@;'; put 'put ''MywzNDM5NywzNDQwMCwzNDQwMSwzNDQwMiwzNDQwMywzNDQwNCwzNDQwOSwzNDQxMiwzNDQxNSwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNiwzNDQ0NSwzNDQ0OSwzNDQ1NCwzNDQ1NiwzNDQ1OCwzNDQ2MCwzNDQ2NSwzNDQ3MCwzNDQ3MSwzNDQ3MiwzNDQ3NywzNDQ4MSwzNDQ4MywzNDQ4NCwz''@;'; put 'put ''NDQ4NSwzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5NSwzNDQ5NiwzNDQ5NywzNDQ5OSwzNDUwMSwzNDUxMywzNDUxNCwzNDUxNywzNDUxOSwzNDUyMiwzNDUyNCwzNDUyOCwzNDUzMSwzNDUzMywzNDUzNSwzNDQ0MCwzNDU1NCwzNDU1NiwzNDU1NywzNDU2NCwzNDU2NSwzNDU2NywzNDU3MSwzNDU3''@;'; put 'put ''NCwzNDU3NSwzNDU3NiwzNDU3OSwzNDU4MCwzNDU4NSwzNDU5MCwzNDU5MSwzNDU5MywzNDU5NSwzNDYwMCwzNDYwNiwzNDYwNywzNDYwOSwzNDYxMCwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyMiwzNDYyNCwzNDYyNywzNDYyOSwzNDYzNywzNDY0OCwzNDY1MywzNDY1NywzNDY2MCwz''@;'; put 'put ''NDY2MSwzNDY3MSwzNDY3MywzNDY3NCwzNDY4MywzNDY5MSwzNDY5MiwzNDY5MywzNDY5NCwzNDY5NSwzNDY5NiwzNDY5NywzNDY5OSwzNDcwMCwzNDcwNCwzNDcwNywzNDcwOSwzNDcxMSwzNDcxMiwzNDcxMywzNDcxOCwzNDcyMCwzNDcyMywzNDcyNywzNDczMiwzNDczMywzNDczNCwzNDcz''@;'; put 'put ''NywzNDc0MSwzNDc1MCwzNDc1MSwzNDc1MywzNDc2MCwzNDc2MSwzNDc2MiwzNDc2NiwzNDc3MywzNDc3NCwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MywzNDc4NiwzNDc4NywzNDc4OCwzNDc5NCwzNDc5NSwzNDc5NywzNDgwMSwzNDgwMywzNDgwOCwzNDgxMCwzNDgxNSwzNDgxNywzNDgxOSwz''@;'; put 'put ''NDgyMiwzNDgyNSwzNDgyNiwzNDgyNywzNDgzMiwzNDg0MSwzNDgzNCwzNDgzNSwzNDgzNiwzNDg0MCwzNDg0MiwzNDg0MywzNDg0NCwzNDg0NiwzNDg0NywzNDg1NiwzNDg2MSwzNDg2MiwzNDg2NCwzNDg2NiwzNDg2OSwzNDg3NCwzNDg3NiwzNDg4MSwzNDg4MywzNDg4NSwzNDg4OCwzNDg4''@;'; put 'put ''OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NywzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwOCwzNDkxMSwzNDkxMiwzNDkxNiwzNDkyMSwzNDkyOSwzNDkzNywzNDkzOSwzNDk0NCwzNDk2OCwzNDk3MCwzNDk3MSwzNDk3MiwzNDk3NSwzNDk3NiwzNDk4NCwzNDk4NiwzNTAwMiwzNTAwNSwz''@;'; put 'put ''NTAwNiwzNTAwOCwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMiwzNTAyNSwzNTAyNiwzNTAyNywzNTAzNSwzNTAzOCwzNTA0NywzNTA1NSwzNTA1NiwzNTA1NywzNTA2MSwzNTA2MywzNTA3MywzNTA3OCwzNTA4NSwzNTA4NiwzNTA4NywzNTA5MywzNTA5NCwzNTA5NiwzNTA5NywzNTA5''@;'; put 'put ''OCwzNTEwMCwzNTEwNCwzNTExMCwzNTExMSwzNTExMiwzNTEyMCwzNTEyMSwzNTEyMiwzNTEyNSwzNTEyOSwzNTEzMCwzNTEzNCwzNTEzNiwzNTEzOCwzNTE0MSwzNTE0MiwzNTE0NSwzNTE1MSwzNTE1NCwzNTE1OSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3OSwz''@;'; put 'put ''NTE4MiwzNTE4NCwzNTE4NywzNTE4OSwzNTE5NCwzNTE5NSwzNTE5NiwzNTE5NywzNTIwOSwzNTIxMywzNTIxNiwzNTIyMCwzNTIyMSwzNTIyNywzNTIyOCwzNTIzMSwzNTIzMiwzNTIzNywzNTI0OCwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI2MCwzNTI4NCwzNTI4NSwzNTI4NiwzNTI4''@;'; put 'put ''NywzNTI4OCwzNTMwMSwzNTMwNSwzNTMwNywzNTMwOSwzNTMxMywzNTMxNSwzNTMxOCwzNTMyMSwzNTMyNSwzNTMyNywzNTMzMiwzNTMzMywzNTMzNSwzNTM0MywzNTM0NSwzNTM0NiwzNTM0OCwzNTM0OSwzNTM1OCwzNTM2MCwzNTM2MiwzNTM2NCwzNTM2NiwzNTM3MSwzNTM3MiwzNTM3NSwz''@;'; put 'put ''NTM4MSwzNTM4MywzNTM4OSwzNTM5MCwzNTM5MiwzNTM5NSwzNTM5NywzNTM5OSwzNTQwMSwzNTQwNSwzNTQwNiwzNTQxMSwzNTQxNCwzNTQxNSwzNTQxNiwzNTQyMCwzNTQyMSwzNTQyNSwzNTQyOSwzNTQzMSwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OSwzNTQ1MCwzNTQ1MSwzNTQ1NCwzNTQ1''@;'; put 'put ''NSwzNTQ1NiwzNTQ1OSwzNTQ2MiwzNTQ2NywzNTQ3MSwzNTQ3MiwzNTQ3NCwzNTQ3OCwzNTQ3OSwzNTQ4MSwzNTQ4NywzNTQ5NSwzNTQ5NywzNTUwMiwzNTUwMywzNTUwNywzNTUxMCwzNTUxMSwzNTUxNSwzNTUxOCwzNTUyMywzNTUyNiwzNTUyOCwzNTUyOSwzNTUzMCwzNTUzNywzNTUzOSwz''@;'; put 'put ''NTU0MCwzNTU0MSwzNTU0MywzNTU0OSwzNTU1MSwzNTU2NCwzNTU2OCwzNTU3MiwzNTU3MywzNTU3NCwzNTU4MCwzNTU4MywzNTU4OSwzNTU5MCwzNTU5NSwzNTYwMSwzNTYxMiwzNTYxNCwzNTYxNSwzNTU5NCwzNTYyOSwzNTYzMiwzNTYzOSwzNTY0NCwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1''@;'; put 'put ''MywzNTY1NCwzNTY1NiwzNTY2NiwzNTY2NywzNTY2OCwzNTY3MywzNTY2MSwzNTY3OCwzNTY4MywzNTY5MywzNTcwMiwzNTcwNCwzNTcwNSwzNTcwOCwzNTcxMCwzNTcxMywzNTcxNiwzNTcxNywzNTcyMywzNTcyNSwzNTcyNywzNTczMiwzNTczMywzNTc0MCwzNTc0MiwzNTc0MywzNTg5Niwz''@;'; put 'put ''NTg5NywzNTkwMSwzNTkwMiwzNTkwOSwzNTkxMSwzNTkxMywzNTkxNSwzNTkxOSwzNTkyMSwzNTkyMywzNTkyNCwzNTkyNywzNTkyOCwzNTkzMSwzNTkzMywzNTkyOSwzNTkzOSwzNTk0MCwzNTk0MiwzNTk0NCwzNTk0NSwzNTk0OSwzNTk1NSwzNTk1NywzNTk1OCwzNTk2MywzNTk2NiwzNTk3''@;'; put 'put ''NCwzNTk3NSwzNTk3OSwzNTk4NCwzNTk4NiwzNTk4NywzNTk5MywzNTk5NSwzNTk5NiwzNjAwNCwzNjAyNSwzNjAyNiwzNjAzNywzNjAzOCwzNjA0MSwzNjA0MywzNjA0NywzNjA1NCwzNjA1MywzNjA1NywzNjA2MSwzNjA2NSwzNjA3MiwzNjA3NiwzNjA3OSwzNjA4MCwzNjA4MiwzNjA4NSwz''@;'; put 'put ''NjA4NywzNjA4OCwzNjA5NCwzNjA5NSwzNjA5NywzNjA5OSwzNjEwNSwzNjExNCwzNjExOSwzNjEyMywzNjE5NywzNjIwMSwzNjIwNCwzNjIwNiwzNjIyMywzNjIyNiwzNjIyOCwzNjIzMiwzNjIzNywzNjI0MCwzNjI0MSwzNjI0NSwzNjI1NCwzNjI1NSwzNjI1NiwzNjI2MiwzNjI2NywzNjI2''@;'; put 'put ''OCwzNjI3MSwzNjI3NCwzNjI3NywzNjI3OSwzNjI4MSwzNjI4MywzNjI4OCwzNjI5MywzNjI5NCwzNjI5NSwzNjI5NiwzNjI5OCwzNjMwMiwzNjMwNSwzNjMwOCwzNjMwOSwzNjMxMSwzNjMxMywzNjMyNCwzNjMyNSwzNjMyNywzNjMzMiwzNjMzNiwzNjI4NCwzNjMzNywzNjMzOCwzNjM0MCwz''@;'; put 'put ''NjM0OSwzNjM1MywzNjM1NiwzNjM1NywzNjM1OCwzNjM2MywzNjM2OSwzNjM3MiwzNjM3NCwzNjM4NCwzNjM4NSwzNjM4NiwzNjM4NywzNjM5MCwzNjM5MSwzNjQwMSwzNjQwMywzNjQwNiwzNjQwNywzNjQwOCwzNjQwOSwzNjQxMywzNjQxNiwzNjQxNywzNjQyNywzNjQyOSwzNjQzMCwzNjQz''@;'; put 'put ''MSwzNjQzNiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0OSwzNjQ1MCwzNjQ1NywzNjQ2MCwzNjQ2MSwzNjQ2MywzNjQ2NCwzNjQ2NSwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ4MiwzNjQ4MywzNjQ4OSwzNjQ5NiwzNjQ5OCwzNjUwMSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMCwzNjUxNCwz''@;'; put 'put ''NjUxOSwzNjUyMSwzNjUyNSwzNjUyNiwzNjUzMSwzNjUzMywzNjUzOCwzNjUzOSwzNjU0NCwzNjU0NSwzNjU0NywzNjU0OCwzNjU1MSwzNjU1OSwzNjU2MSwzNjU2NCwzNjU3MiwzNjU4NCwzNjU5MCwzNjU5MiwzNjU5MywzNjU5OSwzNjYwMSwzNjYwMiwzNjU4OSwzNjYwOCwzNjYxMCwzNjYx''@;'; put 'put ''NSwzNjYxNiwzNjYyMywzNjYyNCwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzOCwzNjY0MCwzNjY0MSwzNjY0MywzNjY0NSwzNjY0NywzNjY0OCwzNjY1MiwzNjY1MywzNjY1NCwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NiwzNjY3MiwzNjY3MywzNjY3NSwzNjY3OSwzNjY4NywzNjY4OSwz''@;'; put 'put ''NjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NiwzNjcwMSwzNjcwMiwzNjcwOSwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MiwzNjc3MywzNjc3NCwzNjc4OSwzNjc5MCwzNjc5MiwzNjc5OCwzNjgwMCwzNjgwMSwzNjgwNiwzNjgxMCwzNjgxMSwzNjgxMywzNjgxNiwzNjgxOCwzNjgxOSwzNjgy''@;'; put 'put ''MSwzNjgzMiwzNjgzNSwzNjgzNiwzNjg0MCwzNjg0NiwzNjg0OSwzNjg1MywzNjg1NCwzNjg1OSwzNjg2MiwzNjg2NiwzNjg2OCwzNjg3MiwzNjg3NiwzNjg4OCwzNjg5MSwzNjkwNCwzNjkwNSwzNjkxMSwzNjkwNiwzNjkwOCwzNjkwOSwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyNywzNjkzMSwz''@;'; put 'put ''NjkzMiwzNjk0MCwzNjk1NSwzNjk1NywzNjk2MiwzNjk2NiwzNjk2NywzNjk3MiwzNjk3NiwzNjk4MCwzNjk4NSwzNjk5NywzN2UzLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQy''@;'; put 'put ''LDM3MDQzLDM3MDQ0LDM3MDQ2LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYwLDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3''@;'; put 'put ''MTIwLDM3MTI0LDM3MTI1LDM3MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4''@;'; put 'put ''LDM3MTgwLDM3MTgxLDM3MTg3LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQxLDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3''@;'; put 'put ''MjY4LDM3MjY5LDM3MjcyLDM3Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQy''@;'; put 'put ''LDM3MzQ4LDM3MzQ5LDM3MzUzLDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3''@;'; put 'put ''NDAwLDM3NDA0LDM3NDA1LDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQzLDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1''@;'; put 'put ''LDM3NDU3LDM3NDY0LDM3NDY1LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3''@;'; put 'put ''NTE4LDM3NTIyLDM3NTI3LDM3NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2''@;'; put 'put ''LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3''@;'; put 'put ''NjQwLDM3NjQ1LDM3NjQ5LDM3NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIw''@;'; put 'put ''LDM3NzIyLDM3NzI2LDM3NzMyLDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQxLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3''@;'; put 'put ''Nzg0LDM3Nzg3LDM3NzkwLDM3NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0''@;'; put 'put ''LDM3ODU1LDM3ODU4LDM3ODYyLDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgyLDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3''@;'; put 'put ''OTQwLDM3OTQ3LDM3OTUxLDM3OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAyLDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2''@;'; put 'put ''LDM4MjgwLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4''@;'; put 'put ''MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3''@;'; put 'put ''LDM4NTEwLDM4NTE2LDM4NTIzLDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4''@;'; put 'put ''NjE2LDM4NjE4LDM4NjIxLDM4NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQx''@;'; put 'put ''LDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4NzkzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4''@;'; put 'put ''ODMzLDM4ODM0LDM4ODM3LDM4ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgw''@;'; put 'put ''LDM4ODc1LDM4ODgxLDM4ODg0LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQwLDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4''@;'; put 'put ''OTY1LDM4OTQ5LDM4OTc0LDM4OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5''@;'; put 'put ''LDM5MTAzLDM5MTA2LDM5MTA5LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQxLDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5''@;'; put 'put ''MjExLDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYwLDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3''@;'; put 'put ''LDM5MzM0LDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5MzkwLDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5''@;'; put 'put ''NDI2LDM5NDI3LDM5NDI4LDM5NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1''@;'; put 'put ''LDM5NTA4LDM5NTEwLDM5NTE3LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5''@;'; put 'put ''NjQ4LDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAy''@;'; put 'put ''LDM5NzA1LDM5NzA3LDM5NzA4LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5''@;'; put 'put ''Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3''@;'; put 'put ''LDM5ODQ5LDM5ODUyLDM5ODU2LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5''@;'; put 'put ''OTI4LDM5OTI5LDM5OTMwLDM5OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3''@;'; put 'put ''LDQwMDAxLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQwMDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQw''@;'; put 'put ''MDU1LDQwMDU5LDQwMTY2LDQwMTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQwMjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYxLDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1''@;'; put 'put ''LDQwMjc2LDQwMjg3LDQwMjkxLDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQwMzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQw''@;'; put 'put ''MzYyLDQwMzY0LDQwMzY2LDQwMzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQwMzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIzLDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2''@;'; put 'put ''LDQwNDQ2LDQwNDU4LDQwNDUwLDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQw''@;'; put 'put ''NjA2LDQwNjEyLDQwNjE2LDQwNjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQwNjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3''@;'; put 'put ''LDQwNzEzLDQwNzE5LDQwNzIwLDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUxLDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQwNzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQw''@;'; put 'put ''NzcxLDQwNzcyLDQwNzczLDQwNzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIxLDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUw''@;'; put 'put ''LDQwODUyLDQwODU0LDQwODU1LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0saWJtODY2OlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEw''@;'; put 'put ''NTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEw''@;'; put 'put ''ODYsMTA4Nyw5NjE3LDk2MTgsOTYxOSw5NDc0LDk1MDgsOTU2OSw5NTcwLDk1NTgsOTU1Nyw5NTcxLDk1NTMsOTU1OSw5NTY1LDk1NjQsOTU2Myw5NDg4LDk0OTIsOTUyNCw5NTE2LDk1MDAsOTQ3Miw5NTMyLDk1NjYsOTU2Nyw5NTYyLDk1NTYsOTU3Nyw5NTc0LDk1NjgsOTU1Miw5NTgwLDk1''@;'; put 'put ''NzUsOTU3Niw5NTcyLDk1NzMsOTU2MSw5NTYwLDk1NTQsOTU1NSw5NTc5LDk1NzgsOTQ5Niw5NDg0LDk2MDgsOTYwNCw5NjEyLDk2MTYsOTYwMCwxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDEw''@;'; put 'put ''MjUsMTEwNSwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzgsMTExOCwxNzYsODcyOSwxODMsODczMCw4NDcwLDE2NCw5NjMyLDE2MF0sImlzby04ODU5LTIiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYs''@;'; put 'put ''MTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsNzI4LDMyMSwxNjQsMzE3LDM0NiwxNjcsMTY4LDM1MiwzNTAsMzU2LDM3NywxNzMsMzgxLDM3OSwxNzYsMjYxLDczMSwzMjIsMTgwLDMxOCwzNDcsNzExLDE4NCwzNTMsMzUxLDM1Nywz''@;'; put 'put ''NzgsNzMzLDM4MiwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMx''@;'; put 'put ''NCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSwiaXNvLTg4NTktMyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgs''@;'; put 'put ''MTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI5NCw3MjgsMTYzLDE2NCxudWxsLDI5MiwxNjcsMTY4LDMwNCwzNTAsMjg2LDMwOCwxNzMsbnVsbCwzNzksMTc2LDI5NSwxNzgsMTc5''@;'; put 'put ''LDE4MCwxODEsMjkzLDE4MywxODQsMzA1LDM1MSwyODcsMzA5LDE4OSxudWxsLDM4MCwxOTIsMTkzLDE5NCxudWxsLDE5NiwyNjYsMjY0LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LG51bGwsMjA5LDIxMCwyMTEsMjEyLDI4OCwyMTQsMjE1LDI4NCwyMTcsMjE4LDIxOSwy''@;'; put 'put ''MjAsMzY0LDM0OCwyMjMsMjI0LDIyNSwyMjYsbnVsbCwyMjgsMjY3LDI2NSwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSxudWxsLDI0MSwyNDIsMjQzLDI0NCwyODksMjQ2LDI0NywyODUsMjQ5LDI1MCwyNTEsMjUyLDM2NSwzNDksNzI5XSwiaXNvLTg4NTktNCI6WzEyOCwx''@;'; put 'put ''MjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwzMTIsMzQyLDE2NCwyOTYsMzE1LDE2NywxNjgsMzUyLDI3''@;'; put 'put ''NCwyOTAsMzU4LDE3MywzODEsMTc1LDE3NiwyNjEsNzMxLDM0MywxODAsMjk3LDMxNiw3MTEsMTg0LDM1MywyNzUsMjkxLDM1OSwzMzAsMzgyLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyOTgsMjcyLDMyNSwzMzIsMzEw''@;'; put 'put ''LDIxMiwyMTMsMjE0LDIxNSwyMTYsMzcwLDIxOCwyMTksMjIwLDM2MCwzNjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDI5OSwyNzMsMzI2LDMzMywzMTEsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwzNzEsMjUwLDI1MSwyNTIs''@;'; put 'put ''MzYxLDM2Myw3MjldLCJpc28tODg1OS01IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTAyNSwx''@;'; put 'put ''MDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTczLDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEw''@;'; put 'put ''NTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEw''@;'; put 'put ''OTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg0NzAsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTY3LDExMTgsMTExOV0sImlzby04ODU5LTYiOlsxMjgsMTI5LDEzMCwx''@;'; put 'put ''MzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLG51bGwsbnVsbCwxNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCwxNTQ4LDE3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NjMsbnVsbCxudWxsLG51bGwsMTU2NyxudWxsLDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3''@;'; put 'put ''OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMTU5MSwxNTkyLDE1OTMsMTU5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYwMCwxNjAxLDE2MDIsMTYwMywxNjA0LDE2MDUsMTYwNiwxNjA3LDE2MDgsMTYwOSwxNjEwLDE2MTEsMTYx''@;'; put 'put ''MiwxNjEzLDE2MTQsMTYxNSwxNjE2LDE2MTcsMTYxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSwiaXNvLTg4NTktNyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwx''@;'; put 'put ''NDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMTYsODIxNywxNjMsODM2NCw4MzY3LDE2NiwxNjcsMTY4LDE2OSw4OTAsMTcxLDE3MiwxNzMsbnVsbCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAs''@;'; put 'put ''OTAxLDkwMiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEs''@;'; put 'put ''OTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sImlzby04ODU5LTgiOlsxMjgsMTI5LDEzMCwx''@;'; put 'put ''MzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwx''@;'; put 'put ''NzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDgyMTUsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUs''@;'; put 'put ''MTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwiaXNvLTg4NTktMTAiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3''@;'; put 'put ''LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjc0LDI5MCwyOTgsMjk2LDMxMCwxNjcsMzE1LDI3MiwzNTIsMzU4LDM4MSwxNzMsMzYyLDMzMCwxNzYsMjYxLDI3NSwyOTEsMjk5LDI5NywzMTEsMTgzLDMxNiwyNzMsMzUzLDM1OSwzODIs''@;'; put 'put ''ODIxMywzNjMsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDIwNywyMDgsMzI1LDMzMiwyMTEsMjEyLDIxMywyMTQsMzYwLDIxNiwzNzAsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjks''@;'; put 'put ''MjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjM5LDI0MCwzMjYsMzMzLDI0MywyNDQsMjQ1LDI0NiwzNjEsMjQ4LDM3MSwyNTAsMjUxLDI1MiwyNTMsMjU0LDMxMl0sImlzby04ODU5LTEzIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwx''@;'; put 'put ''MzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIyMSwxNjIsMTYzLDE2NCw4MjIyLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzks''@;'; put 'put ''ODIyMCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAs''@;'; put 'put ''Mzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDgyMTddLCJpc28tODg1OS0xNCI6WzEyOCwxMjks''@;'; put 'put ''MTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDc2ODIsNzY4MywxNjMsMjY2LDI2Nyw3NjkwLDE2Nyw3ODA4LDE2OSw3''@;'; put 'put ''ODEwLDc2OTEsNzkyMiwxNzMsMTc0LDM3Niw3NzEwLDc3MTEsMjg4LDI4OSw3NzQ0LDc3NDUsMTgyLDc3NjYsNzgwOSw3NzY3LDc4MTEsNzc3Niw3OTIzLDc4MTIsNzgxMyw3Nzc3LDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIw''@;'; put 'put ''NywzNzIsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsNzc4NiwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwzNzQsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwzNzMsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsNzc4Nywy''@;'; put 'put ''NDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywzNzUsMjU1XSwiaXNvLTg4NTktMTUiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1''@;'; put 'put ''NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzY0LDE2NSwzNTIsMTY3LDM1MywxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDM4MSwxODEsMTgyLDE4MywzODIsMTg1LDE4NiwxODcsMzM4LDMzOSwzNzYsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5''@;'; put 'put ''OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5''@;'; put 'put ''LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sImlzby04ODU5LTE2IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgs''@;'; put 'put ''MTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI2MSwzMjEsODM2NCw4MjIyLDM1MiwxNjcsMzUzLDE2OSw1MzYsMTcxLDM3NywxNzMsMzc4LDM3OSwxNzYsMTc3LDI2OCwzMjIsMzgxLDgyMjEsMTgyLDE4MywzODIsMjY5LDUzNywxODcsMzM4LDMz''@;'; put 'put ''OSwzNzYsMzgwLDE5MiwxOTMsMTk0LDI1OCwxOTYsMjYyLDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyNzIsMzIzLDIxMCwyMTEsMjEyLDMzNiwyMTQsMzQ2LDM2OCwyMTcsMjE4LDIxOSwyMjAsMjgwLDUzOCwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyNjMsMjMw''@;'; put 'put ''LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI3MywzMjQsMjQyLDI0MywyNDQsMzM3LDI0NiwzNDcsMzY5LDI0OSwyNTAsMjUxLDI1MiwyODEsNTM5LDI1NV0sImtvaTgtciI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUz''@;'; put 'put ''Miw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2''@;'; put 'put ''Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0''@;'; put 'put ''LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUz''@;'; put 'put ''LDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sImtvaTgtdSI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYw''@;'; put 'put ''OCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSwxMTA4LDk1NTYsMTExMCwxMTExLDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2MywxMTY5LDExMTgsOTU2''@;'; put 'put ''Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDEwMjgsOTU3MSwxMDMwLDEwMzEsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDExNjgsMTAzOCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3''@;'; put 'put ''LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcx''@;'; put 'put ''LDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sbWFjaW50b3NoOlsxOTYsMTk3LDE5OSwyMDEsMjA5LDIxNCwyMjAsMjI1LDIyNCwyMjYsMjI4LDIyNywyMjksMjMxLDIzMywyMzIsMjM0LDIzNSwyMzcsMjM2LDIz''@;'; put 'put ''OCwyMzksMjQxLDI0MywyNDIsMjQ0LDI0NiwyNDUsMjUwLDI0OSwyNTEsMjUyLDgyMjQsMTc2LDE2MiwxNjMsMTY3LDgyMjYsMTgyLDIyMywxNzQsMTY5LDg0ODIsMTgwLDE2OCw4ODAwLDE5OCwyMTYsODczNCwxNzcsODgwNCw4ODA1LDE2NSwxODEsODcwNiw4NzIxLDg3MTksOTYwLDg3NDcs''@;'; put 'put ''MTcwLDE4Niw5MzcsMjMwLDI0OCwxOTEsMTYxLDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxOTIsMTk1LDIxMywzMzgsMzM5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw5Njc0LDI1NSwzNzYsODI2MCw4MzY0LDgyNDksODI1MCw2NDI1Nyw2NDI1''@;'; put 'put ''OCw4MjI1LDE4Myw4MjE4LDgyMjIsODI0MCwxOTQsMjAyLDE5MywyMDMsMjAwLDIwNSwyMDYsMjA3LDIwNCwyMTEsMjEyLDYzNzQzLDIxMCwyMTgsMjE5LDIxNywzMDUsNzEwLDczMiwxNzUsNzI4LDcyOSw3MzAsMTg0LDczMyw3MzEsNzExXSwid2luZG93cy04NzQiOls4MzY0LDEyOSwxMzAs''@;'; put 'put ''MTMxLDEzMiw4MjMwLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwzNTg1LDM1ODYsMzU4NywzNTg4LDM1ODksMzU5MCwzNTkxLDM1''@;'; put 'put ''OTIsMzU5MywzNTk0LDM1OTUsMzU5NiwzNTk3LDM1OTgsMzU5OSwzNjAwLDM2MDEsMzYwMiwzNjAzLDM2MDQsMzYwNSwzNjA2LDM2MDcsMzYwOCwzNjA5LDM2MTAsMzYxMSwzNjEyLDM2MTMsMzYxNCwzNjE1LDM2MTYsMzYxNywzNjE4LDM2MTksMzYyMCwzNjIxLDM2MjIsMzYyMywzNjI0LDM2''@;'; put 'put ''MjUsMzYyNiwzNjI3LDM2MjgsMzYyOSwzNjMwLDM2MzEsMzYzMiwzNjMzLDM2MzQsMzYzNSwzNjM2LDM2MzcsMzYzOCwzNjM5LDM2NDAsMzY0MSwzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsMzY0NywzNjQ4LDM2NDksMzY1MCwzNjUxLDM2NTIsMzY1MywzNjU0LDM2NTUsMzY1NiwzNjU3LDM2''@;'; put 'put ''NTgsMzY1OSwzNjYwLDM2NjEsMzY2MiwzNjYzLDM2NjQsMzY2NSwzNjY2LDM2NjcsMzY2OCwzNjY5LDM2NzAsMzY3MSwzNjcyLDM2NzMsMzY3NCwzNjc1LG51bGwsbnVsbCxudWxsLG51bGxdLCJ3aW5kb3dzLTEyNTAiOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEz''@;'; put 'put ''Niw4MjQwLDM1Miw4MjQ5LDM0NiwzNTYsMzgxLDM3NywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwzNTMsODI1MCwzNDcsMzU3LDM4MiwzNzgsMTYwLDcxMSw3MjgsMzIxLDE2NCwyNjAsMTY2LDE2NywxNjgsMTY5LDM1MCwxNzEsMTcyLDE3MywxNzQs''@;'; put 'put ''Mzc5LDE3NiwxNzcsNzMxLDMyMiwxODAsMTgxLDE4MiwxODMsMTg0LDI2MSwzNTEsMTg3LDMxNyw3MzMsMzE4LDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwz''@;'; put 'put ''NDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJ3aW5k''@;'; put 'put ''b3dzLTEyNTEiOlsxMDI2LDEwMjcsODIxOCwxMTA3LDgyMjIsODIzMCw4MjI0LDgyMjUsODM2NCw4MjQwLDEwMzMsODI0OSwxMDM0LDEwMzYsMTAzNSwxMDM5LDExMDYsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxMTEzLDgyNTAsMTExNCwxMTE2LDExMTUs''@;'; put 'put ''MTExOSwxNjAsMTAzOCwxMTE4LDEwMzIsMTY0LDExNjgsMTY2LDE2NywxMDI1LDE2OSwxMDI4LDE3MSwxNzIsMTczLDE3NCwxMDMxLDE3NiwxNzcsMTAzMCwxMTEwLDExNjksMTgxLDE4MiwxODMsMTEwNSw4NDcwLDExMDgsMTg3LDExMTIsMTAyOSwxMTA5LDExMTEsMTA0MCwxMDQxLDEwNDIs''@;'; put 'put ''MTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUs''@;'; put 'put ''MTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwM10sIndpbmRvd3MtMTI1MiI6WzgzNjQsMTI5''@;'; put 'put ''LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwzODEsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMzgyLDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYs''@;'; put 'put ''MTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywy''@;'; put 'put ''MDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0''@;'; put 'put ''OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sIndpbmRvd3MtMTI1MyI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1''@;'; put 'put ''NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsOTAxLDkwMiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksbnVsbCwxNzEsMTcyLDE3MywxNzQsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDE4MSwxODIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQs''@;'; put 'put ''OTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUs''@;'; put 'put ''OTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLCJ3aW5kb3dzLTEyNTQiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMTQy''@;'; put 'put ''LDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgx''@;'; put 'put ''LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjg2LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDMwNCwzNTAs''@;'; put 'put ''MjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyODcsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMzA1LDM1MSwyNTVdLCJ3aW5kb3dzLTEyNTUiOls4MzY0LDEyOSw4MjE4LDQw''@;'; put 'put ''Miw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjIsMTY1LDE2NiwxNjcsMTY4''@;'; put 'put ''LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCwxOTEsMTQ1NiwxNDU3LDE0NTgsMTQ1OSwxNDYwLDE0NjEsMTQ2MiwxNDYzLDE0NjQsMTQ2NSwxNDY2LDE0NjcsMTQ2OCwxNDY5LDE0''@;'; put 'put ''NzAsMTQ3MSwxNDcyLDE0NzMsMTQ3NCwxNDc1LDE1MjAsMTUyMSwxNTIyLDE1MjMsMTUyNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1''@;'; put 'put ''MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sIndpbmRvd3MtMTI1NiI6WzgzNjQsMTY2Miw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDE2NTcsODI0OSwzMzgsMTY3''@;'; put 'put ''MCwxNjg4LDE2NzIsMTcxMSw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE3MDUsODQ4MiwxNjgxLDgyNTAsMzM5LDgyMDQsODIwNSwxNzIyLDE2MCwxNTQ4LDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcyNiwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcs''@;'; put 'put ''MTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxNTYzLDE4NywxODgsMTg5LDE5MCwxNTY3LDE3MjksMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1''@;'; put 'put ''ODksMTU5MCwyMTUsMTU5MSwxNTkyLDE1OTMsMTU5NCwxNjAwLDE2MDEsMTYwMiwxNjAzLDIyNCwxNjA0LDIyNiwxNjA1LDE2MDYsMTYwNywxNjA4LDIzMSwyMzIsMjMzLDIzNCwyMzUsMTYwOSwxNjEwLDIzOCwyMzksMTYxMSwxNjEyLDE2MTMsMTYxNCwyNDQsMTYxNSwxNjE2LDI0NywxNjE3''@;'; put 'put ''LDI0OSwxNjE4LDI1MSwyNTIsODIwNiw4MjA3LDE3NDZdLCJ3aW5kb3dzLTEyNTciOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNjgsNzExLDE4NCwxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIs''@;'; put 'put ''ODQ4MiwxNTQsODI1MCwxNTYsMTc1LDczMSwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsbnVsbCwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwz''@;'; put 'put ''MDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3''@;'; put 'put ''OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDcyOV0sIndpbmRvd3MtMTI1OCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMzM4LDE0''@;'; put 'put ''MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4''@;'; put 'put ''MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDI1OCwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDc2OCwyMDUsMjA2LDIwNywyNzIsMjA5LDc3NywyMTEsMjEyLDQxNiwyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsNDMx''@;'; put 'put ''LDc3MSwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsNzY5LDIzNywyMzgsMjM5LDI3MywyNDEsODAzLDI0MywyNDQsNDE3LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1Miw0MzIsODM2MywyNTVdLCJ4LW1hYy1jeXJpbGxpYyI6WzEwNDAsMTA0''@;'; put 'put ''MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw4MjI0LDE3NiwxMTY4''@;'; put 'put ''LDE2MywxNjcsODIyNiwxODIsMTAzMCwxNzQsMTY5LDg0ODIsMTAyNiwxMTA2LDg4MDAsMTAyNywxMTA3LDg3MzQsMTc3LDg4MDQsODgwNSwxMTEwLDE4MSwxMTY5LDEwMzIsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDMzLDExMTMsMTAzNCwxMTE0LDExMTIsMTAyOSwxNzIsODczMCw0MDIsODc3''@;'; put 'put ''Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTAzNSwxMTE1LDEwMzYsMTExNiwxMTA5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw4MjIyLDEwMzgsMTExOCwxMDM5LDExMTksODQ3MCwxMDI1LDExMDUsMTEwMywxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEw''@;'; put 'put ''NzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDgzNjRdfX0odGhpc3x8e30pfSw2NDMxOCh0ZSxqLGQpeyFmdW5jdGlvbihTKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7ZnVuY3Rpb24gaCh3ZSxwdCxLZSl7cmV0dXJuIHB0PD13ZSYmd2U8PUtlfXRlLmV4cG9ydHMmJiFTWyJlbmNvZGluZy1pbmRleGVzIl0mJihTWyJlbmNvZGluZy1pbmRleGVzIl09ZCg2Nzk1MSlbImVuY29kaW5nLWluZGV4ZXMiXSk7dmFyIEk9TWF0aC5mbG9vcjtmdW5j''@;'; put 'put ''dGlvbiBmKHdlKXtpZih2b2lkIDA9PT13ZSlyZXR1cm57fTtpZih3ZT09PU9iamVjdCh3ZSkpcmV0dXJuIHdlO3Rocm93IFR5cGVFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgdG8gZGljdGlvbmFyeSIpfWZ1bmN0aW9uIE0od2Upe3JldHVybiAwPD13ZSYmd2U8PTEyN312YXIg''@;'; put 'put ''Tz1NLEQ9LTE7ZnVuY3Rpb24gRSh3ZSl7dGhpcy50b2tlbnM9W10uc2xpY2UuY2FsbCh3ZSksdGhpcy50b2tlbnMucmV2ZXJzZSgpfUUucHJvdG90eXBlPXtlbmRPZlN0cmVhbTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnRva2Vucy5sZW5ndGh9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zLnBvcCgpOkR9LHByZXBlbmQ6ZnVuY3Rpb24od2Upe2lmKEFycmF5LmlzQXJyYXkod2UpKWZvcih2YXIgcHQ9d2U7cHQubGVuZ3RoOyl0aGlzLnRva2Vucy5wdXNoKHB0LnBvcCgpKTtlbHNlIHRoaXMudG9rZW5zLnB1c2god2UpfSxwdXNoOmZ1''@;'; put 'put ''bmN0aW9uKHdlKXtpZihBcnJheS5pc0FycmF5KHdlKSlmb3IodmFyIHB0PXdlO3B0Lmxlbmd0aDspdGhpcy50b2tlbnMudW5zaGlmdChwdC5zaGlmdCgpKTtlbHNlIHRoaXMudG9rZW5zLnVuc2hpZnQod2UpfX07dmFyIEI9LTE7ZnVuY3Rpb24gRih3ZSxwdCl7aWYod2UpdGhyb3cgVHlwZUVy''@;'; put 'put ''cm9yKCJEZWNvZGVyIGVycm9yIik7cmV0dXJuIHB0fHw2NTUzM31mdW5jdGlvbiBOKHdlKXt0aHJvdyBUeXBlRXJyb3IoIlRoZSBjb2RlIHBvaW50ICIrd2UrIiBjb3VsZCBub3QgYmUgZW5jb2RlZC4iKX1mdW5jdGlvbiBaKHdlKXtyZXR1cm4gd2U9U3RyaW5nKHdlKS50cmltKCkudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSyx3ZSk/S1t3ZV06bnVsbH12YXIgVT1be2VuY29kaW5nczpbe2xhYmVsczpbInVuaWNvZGUtMS0xLXV0Zi04IiwidXRmLTgiLCJ1dGY4Il0sbmFtZToiVVRGLTgifV0saGVhZGluZzoiVGhlIEVuY29kaW5nIn0s''@;'; put 'put ''e2VuY29kaW5nczpbe2xhYmVsczpbIjg2NiIsImNwODY2IiwiY3NpYm04NjYiLCJpYm04NjYiXSxuYW1lOiJJQk04NjYifSx7bGFiZWxzOlsiY3Npc29sYXRpbjIiLCJpc28tODg1OS0yIiwiaXNvLWlyLTEwMSIsImlzbzg4NTktMiIsImlzbzg4NTkyIiwiaXNvXzg4NTktMiIsImlzb184ODU5''@;'; put 'put ''LTI6MTk4NyIsImwyIiwibGF0aW4yIl0sbmFtZToiSVNPLTg4NTktMiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMyIsImlzby04ODU5LTMiLCJpc28taXItMTA5IiwiaXNvODg1OS0zIiwiaXNvODg1OTMiLCJpc29fODg1OS0zIiwiaXNvXzg4NTktMzoxOTg4IiwibDMiLCJsYXRpbjMiXSxuYW1l''@;'; put 'put ''OiJJU08tODg1OS0zIn0se2xhYmVsczpbImNzaXNvbGF0aW40IiwiaXNvLTg4NTktNCIsImlzby1pci0xMTAiLCJpc284ODU5LTQiLCJpc284ODU5NCIsImlzb184ODU5LTQiLCJpc29fODg1OS00OjE5ODgiLCJsNCIsImxhdGluNCJdLG5hbWU6IklTTy04ODU5LTQifSx7bGFiZWxzOlsiY3Np''@;'; put 'put ''c29sYXRpbmN5cmlsbGljIiwiY3lyaWxsaWMiLCJpc28tODg1OS01IiwiaXNvLWlyLTE0NCIsImlzbzg4NTktNSIsImlzbzg4NTk1IiwiaXNvXzg4NTktNSIsImlzb184ODU5LTU6MTk4OCJdLG5hbWU6IklTTy04ODU5LTUifSx7bGFiZWxzOlsiYXJhYmljIiwiYXNtby03MDgiLCJjc2lzbzg4''@;'; put 'put ''NTk2ZSIsImNzaXNvODg1OTZpIiwiY3Npc29sYXRpbmFyYWJpYyIsImVjbWEtMTE0IiwiaXNvLTg4NTktNiIsImlzby04ODU5LTYtZSIsImlzby04ODU5LTYtaSIsImlzby1pci0xMjciLCJpc284ODU5LTYiLCJpc284ODU5NiIsImlzb184ODU5LTYiLCJpc29fODg1OS02OjE5ODciXSxuYW1l''@;'; put 'put ''OiJJU08tODg1OS02In0se2xhYmVsczpbImNzaXNvbGF0aW5ncmVlayIsImVjbWEtMTE4IiwiZWxvdF85MjgiLCJncmVlayIsImdyZWVrOCIsImlzby04ODU5LTciLCJpc28taXItMTI2IiwiaXNvODg1OS03IiwiaXNvODg1OTciLCJpc29fODg1OS03IiwiaXNvXzg4NTktNzoxOTg3Iiwic3Vu''@;'; put 'put ''X2V1X2dyZWVrIl0sbmFtZToiSVNPLTg4NTktNyJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4ZSIsImNzaXNvbGF0aW5oZWJyZXciLCJoZWJyZXciLCJpc28tODg1OS04IiwiaXNvLTg4NTktOC1lIiwiaXNvLWlyLTEzOCIsImlzbzg4NTktOCIsImlzbzg4NTk4IiwiaXNvXzg4NTktOCIsImlzb184''@;'; put 'put ''ODU5LTg6MTk4OCIsInZpc3VhbCJdLG5hbWU6IklTTy04ODU5LTgifSx7bGFiZWxzOlsiY3Npc284ODU5OGkiLCJpc28tODg1OS04LWkiLCJsb2dpY2FsIl0sbmFtZToiSVNPLTg4NTktOC1JIn0se2xhYmVsczpbImNzaXNvbGF0aW42IiwiaXNvLTg4NTktMTAiLCJpc28taXItMTU3IiwiaXNv''@;'; put 'put ''ODg1OS0xMCIsImlzbzg4NTkxMCIsImw2IiwibGF0aW42Il0sbmFtZToiSVNPLTg4NTktMTAifSx7bGFiZWxzOlsiaXNvLTg4NTktMTMiLCJpc284ODU5LTEzIiwiaXNvODg1OTEzIl0sbmFtZToiSVNPLTg4NTktMTMifSx7bGFiZWxzOlsiaXNvLTg4NTktMTQiLCJpc284ODU5LTE0IiwiaXNv''@;'; put 'put ''ODg1OTE0Il0sbmFtZToiSVNPLTg4NTktMTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbjkiLCJpc28tODg1OS0xNSIsImlzbzg4NTktMTUiLCJpc284ODU5MTUiLCJpc29fODg1OS0xNSIsImw5Il0sbmFtZToiSVNPLTg4NTktMTUifSx7bGFiZWxzOlsiaXNvLTg4NTktMTYiXSxuYW1lOiJJU08t''@;'; put 'put ''ODg1OS0xNiJ9LHtsYWJlbHM6WyJjc2tvaThyIiwia29pIiwia29pOCIsImtvaTgtciIsImtvaThfciJdLG5hbWU6IktPSTgtUiJ9LHtsYWJlbHM6WyJrb2k4LXJ1Iiwia29pOC11Il0sbmFtZToiS09JOC1VIn0se2xhYmVsczpbImNzbWFjaW50b3NoIiwibWFjIiwibWFjaW50b3NoIiwieC1t''@;'; put 'put ''YWMtcm9tYW4iXSxuYW1lOiJtYWNpbnRvc2gifSx7bGFiZWxzOlsiZG9zLTg3NCIsImlzby04ODU5LTExIiwiaXNvODg1OS0xMSIsImlzbzg4NTkxMSIsInRpcy02MjAiLCJ3aW5kb3dzLTg3NCJdLG5hbWU6IndpbmRvd3MtODc0In0se2xhYmVsczpbImNwMTI1MCIsIndpbmRvd3MtMTI1MCIs''@;'; put 'put ''IngtY3AxMjUwIl0sbmFtZToid2luZG93cy0xMjUwIn0se2xhYmVsczpbImNwMTI1MSIsIndpbmRvd3MtMTI1MSIsIngtY3AxMjUxIl0sbmFtZToid2luZG93cy0xMjUxIn0se2xhYmVsczpbImFuc2lfeDMuNC0xOTY4IiwiYXNjaWkiLCJjcDEyNTIiLCJjcDgxOSIsImNzaXNvbGF0aW4xIiwi''@;'; put 'put ''aWJtODE5IiwiaXNvLTg4NTktMSIsImlzby1pci0xMDAiLCJpc284ODU5LTEiLCJpc284ODU5MSIsImlzb184ODU5LTEiLCJpc29fODg1OS0xOjE5ODciLCJsMSIsImxhdGluMSIsInVzLWFzY2lpIiwid2luZG93cy0xMjUyIiwieC1jcDEyNTIiXSxuYW1lOiJ3aW5kb3dzLTEyNTIifSx7bGFi''@;'; put 'put ''ZWxzOlsiY3AxMjUzIiwid2luZG93cy0xMjUzIiwieC1jcDEyNTMiXSxuYW1lOiJ3aW5kb3dzLTEyNTMifSx7bGFiZWxzOlsiY3AxMjU0IiwiY3Npc29sYXRpbjUiLCJpc28tODg1OS05IiwiaXNvLWlyLTE0OCIsImlzbzg4NTktOSIsImlzbzg4NTk5IiwiaXNvXzg4NTktOSIsImlzb184ODU5''@;'; put 'put ''LTk6MTk4OSIsImw1IiwibGF0aW41Iiwid2luZG93cy0xMjU0IiwieC1jcDEyNTQiXSxuYW1lOiJ3aW5kb3dzLTEyNTQifSx7bGFiZWxzOlsiY3AxMjU1Iiwid2luZG93cy0xMjU1IiwieC1jcDEyNTUiXSxuYW1lOiJ3aW5kb3dzLTEyNTUifSx7bGFiZWxzOlsiY3AxMjU2Iiwid2luZG93cy0x''@;'; put 'put ''MjU2IiwieC1jcDEyNTYiXSxuYW1lOiJ3aW5kb3dzLTEyNTYifSx7bGFiZWxzOlsiY3AxMjU3Iiwid2luZG93cy0xMjU3IiwieC1jcDEyNTciXSxuYW1lOiJ3aW5kb3dzLTEyNTcifSx7bGFiZWxzOlsiY3AxMjU4Iiwid2luZG93cy0xMjU4IiwieC1jcDEyNTgiXSxuYW1lOiJ3aW5kb3dzLTEy''@;'; put 'put ''NTgifSx7bGFiZWxzOlsieC1tYWMtY3lyaWxsaWMiLCJ4LW1hYy11a3JhaW5pYW4iXSxuYW1lOiJ4LW1hYy1jeXJpbGxpYyJ9XSxoZWFkaW5nOiJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNoaW5lc2UiLCJjc2diMjMxMiIsImNzaXNvNThn''@;'; put 'put ''YjIzMTI4MCIsImdiMjMxMiIsImdiXzIzMTIiLCJnYl8yMzEyLTgwIiwiZ2JrIiwiaXNvLWlyLTU4IiwieC1nYmsiXSxuYW1lOiJHQksifSx7bGFiZWxzOlsiZ2IxODAzMCJdLG5hbWU6ImdiMTgwMzAifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAoc2ltcGxpZmllZCkg''@;'; put 'put ''ZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImJpZzUiLCJiaWc1LWhrc2NzIiwiY24tYmlnNSIsImNzYmlnNSIsIngteC1iaWc1Il0sbmFtZToiQmlnNSJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzIn0se2VuY29k''@;'; put 'put ''aW5nczpbe2xhYmVsczpbImNzZXVjcGtkZm10amFwYW5lc2UiLCJldWMtanAiLCJ4LWV1Yy1qcCJdLG5hbWU6IkVVQy1KUCJ9LHtsYWJlbHM6WyJjc2lzbzIwMjJqcCIsImlzby0yMDIyLWpwIl0sbmFtZToiSVNPLTIwMjItSlAifSx7bGFiZWxzOlsiY3NzaGlmdGppcyIsIm1zOTMyIiwibXNf''@;'; put 'put ''a2FuamkiLCJzaGlmdC1qaXMiLCJzaGlmdF9qaXMiLCJzamlzIiwid2luZG93cy0zMWoiLCJ4LXNqaXMiXSxuYW1lOiJTaGlmdF9KSVMifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVja3IiLCJjc2tz''@;'; put 'put ''YzU2MDExOTg3IiwiZXVjLWtyIiwiaXNvLWlyLTE0OSIsImtvcmVhbiIsImtzX2NfNTYwMS0xOTg3Iiwia3NfY181NjAxLTE5ODkiLCJrc2M1NjAxIiwia3NjXzU2MDEiLCJ3aW5kb3dzLTk0OSJdLG5hbWU6IkVVQy1LUiJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBLb3JlYW4gZW5j''@;'; put 'put ''b2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzaXNvMjAyMmtyIiwiaHotZ2ItMjMxMiIsImlzby0yMDIyLWNuIiwiaXNvLTIwMjItY24tZXh0IiwiaXNvLTIwMjIta3IiXSxuYW1lOiJyZXBsYWNlbWVudCJ9LHtsYWJlbHM6WyJ1dGYtMTZiZSJdLG5hbWU6IlVURi0xNkJFIn0se2xh''@;'; put 'put ''YmVsczpbInV0Zi0xNiIsInV0Zi0xNmxlIl0sbmFtZToiVVRGLTE2TEUifSx7bGFiZWxzOlsieC11c2VyLWRlZmluZWQiXSxuYW1lOiJ4LXVzZXItZGVmaW5lZCJ9XSxoZWFkaW5nOiJMZWdhY3kgbWlzY2VsbGFuZW91cyBlbmNvZGluZ3MifV0sSz17fTtVLmZvckVhY2goZnVuY3Rpb24od2Up''@;'; put 'put ''e3dlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKHB0KXtwdC5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbihLZSl7S1tLZV09cHR9KX0pfSk7dmFyIHMsWD17fSxuZT17fTtmdW5jdGlvbiBzZSh3ZSxwdCl7cmV0dXJuIHB0JiZwdFt3ZV18fG51bGx9ZnVuY3Rpb24gaGUod2UscHQpe3ZhciBL''@;'; put 'put ''ZT1wdC5pbmRleE9mKHdlKTtyZXR1cm4tMT09PUtlP251bGw6S2V9ZnVuY3Rpb24gX2Uod2Upe2lmKCEoImVuY29kaW5nLWluZGV4ZXMiaW4gUykpdGhyb3cgRXJyb3IoIkluZGV4ZXMgbWlzc2luZy4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0''@;'; put 'put ''PyIpO3JldHVybiBTWyJlbmNvZGluZy1pbmRleGVzIl1bd2VdfXZhciB2LHA9InV0Zi04IjtmdW5jdGlvbiBfKHdlLHB0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBfKSl0aHJvdyBUeXBlRXJyb3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCAnbmV3Jz8iKTt3ZT12b2lk''@;'; put 'put ''IDAhPT13ZT9TdHJpbmcod2UpOnAscHQ9ZihwdCksdGhpcy5fZW5jb2Rpbmc9bnVsbCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5faWdub3JlQk9NPSExLHRoaXMuX0JPTXNlZW49ITEsdGhpcy5fZXJyb3JfbW9kZT0icmVwbGFjZW1lbnQiLHRoaXMuX2RvX25vdF9mbHVzaD0hMTt2YXIgS2U9''@;'; put 'put ''Wih3ZSk7aWYobnVsbD09PUtlfHwicmVwbGFjZW1lbnQiPT09S2UubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3dlKTtpZighbmVbS2UubmFtZV0pdGhyb3cgRXJyb3IoIkRlY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5j''@;'; put 'put ''b2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt2YXIgWWU9dGhpcztyZXR1cm4gWWUuX2VuY29kaW5nPUtlLHB0LmZhdGFsJiYoWWUuX2Vycm9yX21vZGU9ImZhdGFsIikscHQuaWdub3JlQk9NJiYoWWUuX2lnbm9yZUJPTT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGlu''@;'; put 'put ''Zz1ZZS5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpLHRoaXMuZmF0YWw9ImZhdGFsIj09PVllLl9lcnJvcl9tb2RlLHRoaXMuaWdub3JlQk9NPVllLl9pZ25vcmVCT00pLFllfWZ1bmN0aW9uIGsod2UscHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGspKXRocm93IFR5cGVFcnJvcigiQ2Fs''@;'; put 'put ''bGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO2lmKHB0PWYocHQpLHRoaXMuX2VuY29kaW5nPW51bGwsdGhpcy5fZW5jb2Rlcj1udWxsLHRoaXMuX2RvX25vdF9mbHVzaD0hMSx0aGlzLl9mYXRhbD1wdC5mYXRhbD8iZmF0YWwiOiJyZXBsYWNlbWVudCIscHQuTk9O''@;'; put 'put ''U1RBTkRBUkRfYWxsb3dMZWdhY3lFbmNvZGluZyl7dmFyIFllPVood2U9dm9pZCAwIT09d2U/U3RyaW5nKHdlKTpwKTtpZihudWxsPT09WWV8fCJyZXBsYWNlbWVudCI9PT1ZZS5uYW1lKXRocm93IFJhbmdlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrd2UpO2lmKCFYW1llLm5hbWVdKXRo''@;'; put 'put ''cm93IEVycm9yKCJFbmNvZGVyIG5vdCBwcmVzZW50LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dGhpcy5fZW5jb2Rpbmc9WWV9ZWxzZSB0aGlzLl9lbmNvZGluZz1aKCJ1dGYtOCIpLHZvaWQgMCE9PXdlJiYiY29uc29sZSJpbiBTJiZj''@;'; put 'put ''b25zb2xlLndhcm4oIlRleHRFbmNvZGVyIGNvbnN0cnVjdG9yIGNhbGxlZCB3aXRoIGVuY29kaW5nIGxhYmVsLCB3aGljaCBpcyBpZ25vcmVkLiIpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPXRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKSks''@;'; put 'put ''dGhpc31mdW5jdGlvbiBMKHdlKXt2YXIgcHQ9d2UuZmF0YWwsS2U9MCxZZT0wLHF0PTAsaHQ9MTI4LHZ0PTE5MTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oWXQsdHQpe2lmKHR0PT09RCYmMCE9PXF0KXJldHVybiBxdD0wLEYocHQpO2lmKHR0PT09RClyZXR1cm4gQjtpZigwPT09cXQpe2lmKGgo''@;'; put 'put ''dHQsMCwxMjcpKXJldHVybiB0dDtpZihoKHR0LDE5NCwyMjMpKXF0PTEsS2U9MzEmdHQ7ZWxzZSBpZihoKHR0LDIyNCwyMzkpKTIyND09PXR0JiYoaHQ9MTYwKSwyMzc9PT10dCYmKHZ0PTE1OSkscXQ9MixLZT0xNSZ0dDtlbHNle2lmKCFoKHR0LDI0MCwyNDQpKXJldHVybiBGKHB0KTsyNDA9''@;'; put 'put ''PT10dCYmKGh0PTE0NCksMjQ0PT09dHQmJih2dD0xNDMpLHF0PTMsS2U9NyZ0dH1yZXR1cm4gbnVsbH1pZighaCh0dCxodCx2dCkpcmV0dXJuIEtlPXF0PVllPTAsaHQ9MTI4LHZ0PTE5MSxZdC5wcmVwZW5kKHR0KSxGKHB0KTtpZihodD0xMjgsdnQ9MTkxLEtlPUtlPDw2fDYzJnR0LChZZSs9''@;'; put 'put ''MSkhPT1xdClyZXR1cm4gbnVsbDt2YXIgVWU9S2U7cmV0dXJuIEtlPXF0PVllPTAsVWV9fWZ1bmN0aW9uIHkod2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihLZSxZZSl7aWYoWWU9PT1EKXJldHVybiBCO2lmKE8oWWUpKXJldHVybiBZZTt2YXIgcXQsaHQ7aChZZSwxMjgsMjA0Nyk/KHF0PTEs''@;'; put 'put ''aHQ9MTkyKTpoKFllLDIwNDgsNjU1MzUpPyhxdD0yLGh0PTIyNCk6aChZZSw2NTUzNiwxMTE0MTExKSYmKHF0PTMsaHQ9MjQwKTtmb3IodmFyIHZ0PVsoWWU+PjYqcXQpK2h0XTtxdD4wOyl2dC5wdXNoKDEyOHw2MyZZZT4+NioocXQtMSkpLHF0LT0xO3JldHVybiB2dH19ZnVuY3Rpb24gbCh3''@;'; put 'put ''ZSxwdCl7dmFyIEtlPXB0LmZhdGFsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihZZSxxdCl7aWYocXQ9PT1EKXJldHVybiBCO2lmKE0ocXQpKXJldHVybiBxdDt2YXIgaHQ9d2VbcXQtMTI4XTtyZXR1cm4gbnVsbD09PWh0P0YoS2UpOmh0fX1mdW5jdGlvbiBiKHdlLHB0KXt0aGlzLmhhbmRsZXI9''@;'; put 'put ''ZnVuY3Rpb24oWWUscXQpe2lmKHF0PT09RClyZXR1cm4gQjtpZihPKHF0KSlyZXR1cm4gcXQ7dmFyIGh0PWhlKHF0LHdlKTtyZXR1cm4gbnVsbD09PWh0JiZOKHF0KSxodCsxMjh9fWZ1bmN0aW9uIHEod2Upe3ZhciBwdD13ZS5mYXRhbCxLZT0wLFllPTAscXQ9MDt0aGlzLmhhbmRsZXI9ZnVu''@;'; put 'put ''Y3Rpb24oaHQsdnQpe2lmKHZ0PT09RCYmMD09PUtlJiYwPT09WWUmJjA9PT1xdClyZXR1cm4gQjt2YXIgWXQ7aWYodnQ9PT1EJiYoMCE9PUtlfHwwIT09WWV8fDAhPT1xdCkmJihLZT0wLFllPTAscXQ9MCxGKHB0KSksMCE9PXF0KXtZdD1udWxsLGgodnQsNDgsNTcpJiYoWXQ9ZnVuY3Rpb24g''@;'; put 'put ''bWUod2Upe2lmKHdlPjM5NDE5JiZ3ZTwxODllM3x8d2U+MTIzNzU3NSlyZXR1cm4gbnVsbDtpZig3NDU3PT09d2UpcmV0dXJuIDU5MzM1O3ZhciBxdCxwdD0wLEtlPTAsWWU9X2UoImdiMTgwMzAtcmFuZ2VzIik7Zm9yKHF0PTA7cXQ8WWUubGVuZ3RoOysrcXQpe3ZhciBodD1ZZVtxdF07aWYo''@;'; put 'put ''IShodFswXTw9d2UpKWJyZWFrO3B0PWh0WzBdLEtlPWh0WzFdfXJldHVybiBLZSt3ZS1wdH0oMTAqKDEyNiooMTAqKEtlLTEyOSkrWWUtNDgpK3F0LTEyOSkrdnQtNDgpKTt2YXIgdHQ9W1llLHF0LHZ0XTtyZXR1cm4gS2U9MCxZZT0wLHF0PTAsbnVsbD09PVl0PyhodC5wcmVwZW5kKHR0KSxG''@;'; put 'put ''KHB0KSk6WXR9aWYoMCE9PVllKXJldHVybiBoKHZ0LDEyOSwyNTQpPyhxdD12dCxudWxsKTooaHQucHJlcGVuZChbWWUsdnRdKSxLZT0wLFllPTAsRihwdCkpO2lmKDAhPT1LZSl7aWYoaCh2dCw0OCw1NykpcmV0dXJuIFllPXZ0LG51bGw7dmFyIFVlPUtlLCRlPW51bGw7S2U9MDt2YXIgTGU9''@;'; put 'put ''dnQ8MTI3PzY0OjY1O3JldHVybihoKHZ0LDY0LDEyNil8fGgodnQsMTI4LDI1NCkpJiYoJGU9MTkwKihVZS0xMjkpKyh2dC1MZSkpLG51bGw9PT0oWXQ9bnVsbD09PSRlP251bGw6c2UoJGUsX2UoImdiMTgwMzAiKSkpJiZNKHZ0KSYmaHQucHJlcGVuZCh2dCksbnVsbD09PVl0P0YocHQpOll0''@;'; put 'put ''fXJldHVybiBNKHZ0KT92dDoxMjg9PT12dD84MzY0OmgodnQsMTI5LDI1NCk/KEtlPXZ0LG51bGwpOkYocHQpfX1mdW5jdGlvbiBHKHdlLHB0KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oWWUscXQpe2lmKHF0PT09RClyZXR1cm4gQjtpZihPKHF0KSlyZXR1cm4gcXQ7aWYoNTg4NTM9PT1xdCly''@;'; put 'put ''ZXR1cm4gTihxdCk7aWYocHQmJjgzNjQ9PT1xdClyZXR1cm4gMTI4O3ZhciBodD1oZShxdCxfZSgiZ2IxODAzMCIpKTtpZihudWxsIT09aHQpe3ZhciBZdD1odCUxOTA7cmV0dXJuW0koaHQvMTkwKSsxMjksWXQrKFl0PDYzPzY0OjY1KV19aWYocHQpcmV0dXJuIE4ocXQpO2h0PWZ1bmN0aW9u''@;'; put 'put ''IEZlKHdlKXtpZig1OTMzNT09PXdlKXJldHVybiA3NDU3O3ZhciBxdCxwdD0wLEtlPTAsWWU9X2UoImdiMTgwMzAtcmFuZ2VzIik7Zm9yKHF0PTA7cXQ8WWUubGVuZ3RoOysrcXQpe3ZhciBodD1ZZVtxdF07aWYoIShodFsxXTw9d2UpKWJyZWFrO3B0PWh0WzFdLEtlPWh0WzBdfXJldHVybiBL''@;'; put 'put ''ZSt3ZS1wdH0ocXQpO3ZhciBVZT1JKGh0LzEwLzEyNi8xMCksJGU9SSgoaHQtPTEwKlVlKjEyNioxMCkvMTAvMTI2KSxMZT1JKChodC09MTAqJGUqMTI2KS8xMCk7cmV0dXJuW1VlKzEyOSwkZSs0OCxMZSsxMjksaHQtMTAqTGUrNDhdfX1mdW5jdGlvbiBRKHdlKXt2YXIgcHQ9d2UuZmF0YWws''@;'; put 'put ''S2U9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oWWUscXQpe2lmKHF0PT09RCYmMCE9PUtlKXJldHVybiBLZT0wLEYocHQpO2lmKHF0PT09RCYmMD09PUtlKXJldHVybiBCO2lmKDAhPT1LZSl7dmFyIGh0PUtlLHZ0PW51bGw7S2U9MDt2YXIgWXQ9cXQ8MTI3PzY0Ojk4O3N3aXRjaCgoaChxdCw2''@;'; put 'put ''NCwxMjYpfHxoKHF0LDE2MSwyNTQpKSYmKHZ0PTE1NyooaHQtMTI5KSsocXQtWXQpKSx2dCl7Y2FzZSAxMTMzOnJldHVyblsyMDIsNzcyXTtjYXNlIDExMzU6cmV0dXJuWzIwMiw3ODBdO2Nhc2UgMTE2NDpyZXR1cm5bMjM0LDc3Ml07Y2FzZSAxMTY2OnJldHVyblsyMzQsNzgwXX12YXIgdHQ9''@;'; put 'put ''bnVsbD09PXZ0P251bGw6c2UodnQsX2UoImJpZzUiKSk7cmV0dXJuIG51bGw9PT10dCYmTShxdCkmJlllLnByZXBlbmQocXQpLG51bGw9PT10dD9GKHB0KTp0dH1yZXR1cm4gTShxdCk/cXQ6aChxdCwxMjksMjU0KT8oS2U9cXQsbnVsbCk6RihwdCl9fWZ1bmN0aW9uIHBlKHdlKXt0aGlzLmhh''@;'; put 'put ''bmRsZXI9ZnVuY3Rpb24oS2UsWWUpe2lmKFllPT09RClyZXR1cm4gQjtpZihPKFllKSlyZXR1cm4gWWU7dmFyIHF0PWZ1bmN0aW9uIHUod2Upe3ZhciBwdD12PXZ8fF9lKCJiaWc1IikubWFwKGZ1bmN0aW9uKEtlLFllKXtyZXR1cm4gWWU8NTAyND9udWxsOktlfSk7cmV0dXJuIDk1NTI9PT13''@;'; put 'put ''ZXx8OTU2Nj09PXdlfHw5NTY5PT09d2V8fDk1Nzg9PT13ZXx8MjEzMTM9PT13ZXx8MjEzMTc9PT13ZT9wdC5sYXN0SW5kZXhPZih3ZSk6aGUod2UscHQpfShZZSk7aWYobnVsbD09PXF0KXJldHVybiBOKFllKTt2YXIgaHQ9SShxdC8xNTcpKzEyOTtpZihodDwxNjEpcmV0dXJuIE4oWWUpO3Zh''@;'; put 'put ''ciB2dD1xdCUxNTc7cmV0dXJuW2h0LHZ0Kyh2dDw2Mz82NDo5OCldfX1mdW5jdGlvbiBQZSh3ZSl7dmFyIHB0PXdlLmZhdGFsLEtlPSExLFllPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHF0LGh0KXtpZihodD09PUQmJjAhPT1ZZSlyZXR1cm4gWWU9MCxGKHB0KTtpZihodD09PUQmJjA9PT1Z''@;'; put 'put ''ZSlyZXR1cm4gQjtpZigxNDI9PT1ZZSYmaChodCwxNjEsMjIzKSlyZXR1cm4gWWU9MCw2NTIxNitodDtpZigxNDM9PT1ZZSYmaChodCwxNjEsMjU0KSlyZXR1cm4gS2U9ITAsWWU9aHQsbnVsbDtpZigwIT09WWUpe3ZhciB2dD1ZZTtZZT0wO3ZhciBZdD1udWxsO3JldHVybiBoKHZ0LDE2MSwy''@;'; put 'put ''NTQpJiZoKGh0LDE2MSwyNTQpJiYoWXQ9c2UoOTQqKHZ0LTE2MSkrKGh0LTE2MSksX2UoS2U/ImppczAyMTIiOiJqaXMwMjA4IikpKSxLZT0hMSxoKGh0LDE2MSwyNTQpfHxxdC5wcmVwZW5kKGh0KSxudWxsPT09WXQ/RihwdCk6WXR9cmV0dXJuIE0oaHQpP2h0OjE0Mj09PWh0fHwxNDM9PT1o''@;'; put 'put ''dHx8aChodCwxNjEsMjU0KT8oWWU9aHQsbnVsbCk6RihwdCl9fWZ1bmN0aW9uIFplKHdlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oS2UsWWUpe2lmKFllPT09RClyZXR1cm4gQjtpZihPKFllKSlyZXR1cm4gWWU7aWYoMTY1PT09WWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1ZZSlyZXR1cm4gMTI2''@;'; put 'put ''O2lmKGgoWWUsNjUzNzcsNjU0MzkpKXJldHVyblsxNDIsWWUtNjUzNzcrMTYxXTs4NzIyPT09WWUmJihZZT02NTI5Myk7dmFyIHF0PWhlKFllLF9lKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09cXQ/TihZZSk6W0kocXQvOTQpKzE2MSxxdCU5NCsxNjFdfX1mdW5jdGlvbiBxZSh3ZSl7dmFy''@;'; put 'put ''IHB0PXdlLmZhdGFsLFllPTAsaHQ9MCx2dD0hMTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oWXQsdHQpe3N3aXRjaChZZSl7ZGVmYXVsdDpjYXNlIDA6cmV0dXJuIDI3PT09dHQ/KFllPTUsbnVsbCk6aCh0dCwwLDEyNykmJjE0IT09dHQmJjE1IT09dHQmJjI3IT09dHQ/KHZ0PSExLHR0KTp0dD09''@;'; put 'put ''PUQ/QjoodnQ9ITEsRihwdCkpO2Nhc2UgMTpyZXR1cm4gMjc9PT10dD8oWWU9NSxudWxsKTo5Mj09PXR0Pyh2dD0hMSwxNjUpOjEyNj09PXR0Pyh2dD0hMSw4MjU0KTpoKHR0LDAsMTI3KSYmMTQhPT10dCYmMTUhPT10dCYmMjchPT10dCYmOTIhPT10dCYmMTI2IT09dHQ/KHZ0PSExLHR0KTp0''@;'; put 'put ''dD09PUQ/QjoodnQ9ITEsRihwdCkpO2Nhc2UgMjpyZXR1cm4gMjc9PT10dD8oWWU9NSxudWxsKTpoKHR0LDMzLDk1KT8odnQ9ITEsNjUzNDQrdHQpOnR0PT09RD9COih2dD0hMSxGKHB0KSk7Y2FzZSAzOnJldHVybiAyNz09PXR0PyhZZT01LG51bGwpOmgodHQsMzMsMTI2KT8odnQ9ITEsaHQ9''@;'; put 'put ''dHQsWWU9NCxudWxsKTp0dD09PUQ/QjoodnQ9ITEsRihwdCkpO2Nhc2UgNDppZigyNz09PXR0KXJldHVybiBZZT01LEYocHQpO2lmKGgodHQsMzMsMTI2KSl7WWU9Mzt2YXIgJGU9c2UoOTQqKGh0LTMzKSt0dC0zMyxfZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PSRlP0YocHQpOiRlfXJl''@;'; put 'put ''dHVybiB0dD09PUQ/KFllPTMsWXQucHJlcGVuZCh0dCksRihwdCkpOihZZT0zLEYocHQpKTtjYXNlIDU6cmV0dXJuIDM2PT09dHR8fDQwPT09dHQ/KGh0PXR0LFllPTYsbnVsbCk6KFl0LnByZXBlbmQodHQpLHZ0PSExLFllPTAsRihwdCkpO2Nhc2UgNjp2YXIgTGU9aHQ7aHQ9MDt2YXIgbnQ9''@;'; put 'put ''bnVsbDtpZig0MD09PUxlJiY2Nj09PXR0JiYobnQ9MCksNDA9PT1MZSYmNzQ9PT10dCYmKG50PTEpLDQwPT09TGUmJjczPT09dHQmJihudD0yKSwzNj09PUxlJiYoNjQ9PT10dHx8NjY9PT10dCkmJihudD0zKSxudWxsIT09bnQpe1llPVllPW50O3ZhciBybj12dDtyZXR1cm4gdnQ9ITAscm4/''@;'; put 'put ''RihwdCk6bnVsbH1yZXR1cm4gWXQucHJlcGVuZChbTGUsdHRdKSx2dD0hMSxZZT0wLEYocHQpfX19ZnVuY3Rpb24gdmUod2Upe3ZhciBZZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihxdCxodCl7aWYoaHQ9PT1EJiYwIT09WWUpcmV0dXJuIHF0LnByZXBlbmQoaHQpLFllPTAsWzI3LDQwLDY2''@;'; put 'put ''XTtpZihodD09PUQmJjA9PT1ZZSlyZXR1cm4gQjtpZighKDAhPT1ZZSYmMSE9PVllfHwxNCE9PWh0JiYxNSE9PWh0JiYyNyE9PWh0KSlyZXR1cm4gTig2NTUzMyk7aWYoMD09PVllJiZPKGh0KSlyZXR1cm4gaHQ7aWYoMT09PVllJiYoTyhodCkmJjkyIT09aHQmJjEyNiE9PWh0fHwxNjU9PWh0''@;'; put 'put ''fHw4MjU0PT1odCkpe2lmKE8oaHQpKXJldHVybiBodDtpZigxNjU9PT1odClyZXR1cm4gOTI7aWYoODI1ND09PWh0KXJldHVybiAxMjZ9aWYoTyhodCkmJjAhPT1ZZSlyZXR1cm4gcXQucHJlcGVuZChodCksWWU9MCxbMjcsNDAsNjZdO2lmKCgxNjU9PT1odHx8ODI1ND09PWh0KSYmMSE9PVll''@;'; put 'put ''KXJldHVybiBxdC5wcmVwZW5kKGh0KSxZZT0xLFsyNyw0MCw3NF07ODcyMj09PWh0JiYoaHQ9NjUyOTMpO3ZhciB2dD1oZShodCxfZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PXZ0P04oaHQpOjIhPT1ZZT8ocXQucHJlcGVuZChodCksWWU9MixbMjcsMzYsNjZdKTpbSSh2dC85NCkrMzMs''@;'; put 'put ''dnQlOTQrMzNdfX1mdW5jdGlvbiB1ZSh3ZSl7dmFyIHB0PXdlLmZhdGFsLEtlPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFllLHF0KXtpZihxdD09PUQmJjAhPT1LZSlyZXR1cm4gS2U9MCxGKHB0KTtpZihxdD09PUQmJjA9PT1LZSlyZXR1cm4gQjtpZigwIT09S2Upe3ZhciBodD1LZSx2dD1u''@;'; put 'put ''dWxsO0tlPTA7dmFyIFl0PXF0PDEyNz82NDo2NSx0dD1odDwxNjA/MTI5OjE5MztpZigoaChxdCw2NCwxMjYpfHxoKHF0LDEyOCwyNTIpKSYmKHZ0PTE4OCooaHQtdHQpK3F0LVl0KSxoKHZ0LDg4MzYsMTA3MTUpKXJldHVybiA0ODUwOCt2dDt2YXIgVWU9bnVsbD09PXZ0P251bGw6c2UodnQs''@;'; put 'put ''X2UoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1VZSYmTShxdCkmJlllLnByZXBlbmQocXQpLG51bGw9PT1VZT9GKHB0KTpVZX1yZXR1cm4gTShxdCl8fDEyOD09PXF0P3F0OmgocXQsMTYxLDIyMyk/NjUyMTYrcXQ6aChxdCwxMjksMTU5KXx8aChxdCwyMjQsMjUyKT8oS2U9cXQsbnVsbCk6''@;'; put 'put ''RihwdCl9fWZ1bmN0aW9uIHplKHdlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oS2UsWWUpe2lmKFllPT09RClyZXR1cm4gQjtpZihPKFllKXx8MTI4PT09WWUpcmV0dXJuIFllO2lmKDE2NT09PVllKXJldHVybiA5MjtpZig4MjU0PT09WWUpcmV0dXJuIDEyNjtpZihoKFllLDY1Mzc3LDY1NDM5''@;'; put 'put ''KSlyZXR1cm4gWWUtNjUzNzcrMTYxOzg3MjI9PT1ZZSYmKFllPTY1MjkzKTt2YXIgcXQ9ZnVuY3Rpb24gUih3ZSl7cmV0dXJuKHM9c3x8X2UoImppczAyMDgiKS5tYXAoZnVuY3Rpb24oS2UsWWUpe3JldHVybiBoKFllLDgyNzIsODgzNSk/bnVsbDpLZX0pKS5pbmRleE9mKHdlKX0oWWUpO2lm''@;'; put 'put ''KG51bGw9PT1xdClyZXR1cm4gTihZZSk7dmFyIGh0PUkocXQvMTg4KSxZdD1xdCUxODg7cmV0dXJuW2h0KyhodDwzMT8xMjk6MTkzKSxZdCsoWXQ8NjM/NjQ6NjUpXX19ZnVuY3Rpb24gT2Uod2Upe3ZhciBwdD13ZS5mYXRhbCxLZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihZZSxxdCl7aWYo''@;'; put 'put ''cXQ9PT1EJiYwIT09S2UpcmV0dXJuIEtlPTAsRihwdCk7aWYocXQ9PT1EJiYwPT09S2UpcmV0dXJuIEI7aWYoMCE9PUtlKXt2YXIgaHQ9S2UsdnQ9bnVsbDtLZT0wLGgocXQsNjUsMjU0KSYmKHZ0PTE5MCooaHQtMTI5KSsocXQtNjUpKTt2YXIgWXQ9bnVsbD09PXZ0P251bGw6c2UodnQsX2Uo''@;'; put 'put ''ImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PXZ0JiZNKHF0KSYmWWUucHJlcGVuZChxdCksbnVsbD09PVl0P0YocHQpOll0fXJldHVybiBNKHF0KT9xdDpoKHF0LDEyOSwyNTQpPyhLZT1xdCxudWxsKTpGKHB0KX19ZnVuY3Rpb24gQ2Uod2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihLZSxZZSl7''@;'; put 'put ''aWYoWWU9PT1EKXJldHVybiBCO2lmKE8oWWUpKXJldHVybiBZZTt2YXIgcXQ9aGUoWWUsX2UoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PXF0P04oWWUpOltJKHF0LzE5MCkrMTI5LHF0JTE5MCs2NV19fWZ1bmN0aW9uIGtlKHdlLHB0KXt2YXIgS2U9d2U+PjgsWWU9MjU1JndlO3JldHVybiBw''@;'; put 'put ''dD9bS2UsWWVdOltZZSxLZV19ZnVuY3Rpb24geGUod2UscHQpe3ZhciBLZT1wdC5mYXRhbCxZZT1udWxsLHF0PW51bGw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKGh0LHZ0KXtpZih2dD09PUQmJihudWxsIT09WWV8fG51bGwhPT1xdCkpcmV0dXJuIEYoS2UpO2lmKHZ0PT09RCYmbnVsbD09PVll''@;'; put 'put ''JiZudWxsPT09cXQpcmV0dXJuIEI7aWYobnVsbD09PVllKXJldHVybiBZZT12dCxudWxsO3ZhciBZdDtpZihZdD13ZT8oWWU8PDgpK3Z0Oih2dDw8OCkrWWUsWWU9bnVsbCxudWxsIT09cXQpe3ZhciB0dD1xdDtyZXR1cm4gcXQ9bnVsbCxoKFl0LDU2MzIwLDU3MzQzKT82NTUzNisxMDI0Kih0''@;'; put 'put ''dC01NTI5NikrKFl0LTU2MzIwKTooaHQucHJlcGVuZChrZShZdCx3ZSkpLEYoS2UpKX1yZXR1cm4gaChZdCw1NTI5Niw1NjMxOSk/KHF0PVl0LG51bGwpOmgoWXQsNTYzMjAsNTczNDMpP0YoS2UpOll0fX1mdW5jdGlvbiBNZSh3ZSxwdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFllLHF0KXtp''@;'; put 'put ''ZihxdD09PUQpcmV0dXJuIEI7aWYoaChxdCwwLDY1NTM1KSlyZXR1cm4ga2UocXQsd2UpO3ZhciBodD1rZSg1NTI5NisocXQtNjU1MzY+PjEwKSx3ZSksdnQ9a2UoNTYzMjArKHF0LTY1NTM2JjEwMjMpLHdlKTtyZXR1cm4gaHQuY29uY2F0KHZ0KX19ZnVuY3Rpb24gSWUod2Upe3RoaXMuaGFu''@;'; put 'put ''ZGxlcj1mdW5jdGlvbihLZSxZZSl7cmV0dXJuIFllPT09RD9COk0oWWUpP1llOjYzMzYwK1llLTEyOH19ZnVuY3Rpb24gYmUod2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihLZSxZZSl7cmV0dXJuIFllPT09RD9COk8oWWUpP1llOmgoWWUsNjMzNjAsNjM0ODcpP1llLTYzMzYwKzEyODpOKFll''@;'; put 'put ''KX19T2JqZWN0LmRlZmluZVByb3BlcnR5JiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KF8ucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8ucHJvdG90eXBl''@;'; put 'put ''LCJmYXRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLnByb3RvdHlwZSwiaWdub3JlQk9NIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lnbm9yZUJPTX19KSksXy5wcm90b3R5cGUuZGVj''@;'; put 'put ''b2RlPWZ1bmN0aW9uKHB0LEtlKXt2YXIgWWU7WWU9Im9iamVjdCI9PXR5cGVvZiBwdCYmcHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShwdCk6Im9iamVjdCI9PXR5cGVvZiBwdCYmImJ1ZmZlciJpbiBwdCYmcHQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkocHQuYnVmZmVyLHB0LmJ5dGVPZmZzZXQscHQuYnl0ZUxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoMCksS2U9ZihLZSksdGhpcy5fZG9fbm90X2ZsdXNofHwodGhpcy5fZGVjb2Rlcj1uZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2Vy''@;'; put 'put ''cm9yX21vZGV9KSx0aGlzLl9CT01zZWVuPSExKSx0aGlzLl9kb19ub3RfZmx1c2g9ISFLZS5zdHJlYW07Zm9yKHZhciB2dCxxdD1uZXcgRShZZSksaHQ9W107Oyl7dmFyIFl0PXF0LnJlYWQoKTtpZihZdD09PUR8fCh2dD10aGlzLl9kZWNvZGVyLmhhbmRsZXIocXQsWXQpKT09PUIpYnJlYWs7''@;'; put 'put ''bnVsbCE9PXZ0JiYoQXJyYXkuaXNBcnJheSh2dCk/aHQucHVzaC5hcHBseShodCx2dCk6aHQucHVzaCh2dCkpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Rve2lmKCh2dD10aGlzLl9kZWNvZGVyLmhhbmRsZXIocXQscXQucmVhZCgpKSk9PT1CKWJyZWFrO251bGwhPT12dCYmKEFycmF5Lmlz''@;'; put 'put ''QXJyYXkodnQpP2h0LnB1c2guYXBwbHkoaHQsdnQpOmh0LnB1c2godnQpKX13aGlsZSghcXQuZW5kT2ZTdHJlYW0oKSk7dGhpcy5fZGVjb2Rlcj1udWxsfXJldHVybiBmdW5jdGlvbiB0dChVZSl7cmV0dXJuIGZ1bmN0aW9uIG8od2UscHQpe3JldHVybi0xIT09d2UuaW5kZXhPZihwdCl9KFsi''@;'; put 'put ''VVRGLTgiLCJVVEYtMTZMRSIsIlVURi0xNkJFIl0sdGhpcy5fZW5jb2RpbmcubmFtZSkmJiF0aGlzLl9pZ25vcmVCT00mJiF0aGlzLl9CT01zZWVuJiYoVWUubGVuZ3RoPjAmJjY1Mjc5PT09VWVbMF0/KHRoaXMuX0JPTXNlZW49ITAsVWUuc2hpZnQoKSk6VWUubGVuZ3RoPjAmJih0aGlzLl9C''@;'; put 'put ''T01zZWVuPSEwKSksZnVuY3Rpb24gQSh3ZSl7Zm9yKHZhciBwdD0iIixLZT0wO0tlPHdlLmxlbmd0aDsrK0tlKXt2YXIgWWU9d2VbS2VdO1llPD02NTUzNT9wdCs9U3RyaW5nLmZyb21DaGFyQ29kZShZZSk6KFllLT02NTUzNixwdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoWWU+PjEw''@;'; put 'put ''KSw1NjMyMCsoMTAyMyZZZSkpKX1yZXR1cm4gcHR9KFVlKX0uY2FsbCh0aGlzLGh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoay5wcm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9M''@;'; put 'put ''b3dlckNhc2UoKX19KSxrLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24ocHQsS2Upe3B0PXZvaWQgMD09PXB0PyIiOlN0cmluZyhwdCksS2U9ZihLZSksdGhpcy5fZG9fbm90X2ZsdXNofHwodGhpcy5fZW5jb2Rlcj1YW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhp''@;'; put 'put ''cy5fZmF0YWx9KSksdGhpcy5fZG9fbm90X2ZsdXNoPSEhS2Uuc3RyZWFtO2Zvcih2YXIgaHQsWWU9bmV3IEUoZnVuY3Rpb24gVCh3ZSl7Zm9yKHZhciBwdD1TdHJpbmcod2UpLEtlPXB0Lmxlbmd0aCxZZT0wLHF0PVtdO1llPEtlOyl7dmFyIGh0PXB0LmNoYXJDb2RlQXQoWWUpO2lmKGh0PDU1''@;'; put 'put ''Mjk2fHxodD41NzM0MylxdC5wdXNoKGh0KTtlbHNlIGlmKDU2MzIwPD1odCYmaHQ8PTU3MzQzKXF0LnB1c2goNjU1MzMpO2Vsc2UgaWYoNTUyOTY8PWh0JiZodDw9NTYzMTkpaWYoWWU9PT1LZS0xKXF0LnB1c2goNjU1MzMpO2Vsc2V7dmFyIHZ0PXB0LmNoYXJDb2RlQXQoWWUrMSk7NTYzMjA8''@;'; put 'put ''PXZ0JiZ2dDw9NTczNDM/KHF0LnB1c2goNjU1MzYrKCgxMDIzJmh0KTw8MTApKygxMDIzJnZ0KSksWWUrPTEpOnF0LnB1c2goNjU1MzMpfVllKz0xfXJldHVybiBxdH0ocHQpKSxxdD1bXTs7KXt2YXIgdnQ9WWUucmVhZCgpO2lmKHZ0PT09RHx8KGh0PXRoaXMuX2VuY29kZXIuaGFuZGxlcihZ''@;'; put 'put ''ZSx2dCkpPT09QilicmVhaztBcnJheS5pc0FycmF5KGh0KT9xdC5wdXNoLmFwcGx5KHF0LGh0KTpxdC5wdXNoKGh0KX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtmb3IoOyhodD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoWWUsWWUucmVhZCgpKSkhPT1COylBcnJheS5pc0FycmF5KGh0KT9xdC5w''@;'; put 'put ''dXNoLmFwcGx5KHF0LGh0KTpxdC5wdXNoKGh0KTt0aGlzLl9lbmNvZGVyPW51bGx9cmV0dXJuIG5ldyBVaW50OEFycmF5KHF0KX0sWFsiVVRGLTgiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyB5KHdlKX0sbmVbIlVURi04Il09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgTCh3ZSl9LCJlbmNv''@;'; put 'put ''ZGluZy1pbmRleGVzImluIFMmJlUuZm9yRWFjaChmdW5jdGlvbih3ZSl7IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MiPT09d2UuaGVhZGluZyYmd2UuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24ocHQpe3ZhciBLZT1wdC5uYW1lLFllPV9lKEtlLnRvTG93ZXJDYXNlKCkpO25lW0tl''@;'; put 'put ''XT1mdW5jdGlvbihxdCl7cmV0dXJuIG5ldyBsKFllLHF0KX0sWFtLZV09ZnVuY3Rpb24ocXQpe3JldHVybiBuZXcgYihZZSxxdCl9fSl9KSxuZS5HQks9ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgcSh3ZSl9LFguR0JLPWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IEcod2UsITApfSxYLmdiMTgw''@;'; put 'put ''MzA9ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgRyh3ZSl9LG5lLmdiMTgwMzA9ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgcSh3ZSl9LFguQmlnNT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBwZSh3ZSl9LG5lLkJpZzU9ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgUSh3ZSl9LFhbIkVVQy1KUCJd''@;'; put 'put ''PWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IFplKHdlKX0sbmVbIkVVQy1KUCJdPWZ1bmN0aW9uKHdlKXtyZXR1cm4gbmV3IFBlKHdlKX0sWFsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyB2ZSh3ZSl9LG5lWyJJU08tMjAyMi1KUCJdPWZ1bmN0aW9uKHdlKXtyZXR1cm4g''@;'; put 'put ''bmV3IHFlKHdlKX0sWC5TaGlmdF9KSVM9ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgemUod2UpfSxuZS5TaGlmdF9KSVM9ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgdWUod2UpfSxYWyJFVUMtS1IiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBDZSh3ZSl9LG5lWyJFVUMtS1IiXT1mdW5jdGlv''@;'; put 'put ''bih3ZSl7cmV0dXJuIG5ldyBPZSh3ZSl9LFhbIlVURi0xNkJFIl09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgTWUoITAsd2UpfSxuZVsiVVRGLTE2QkUiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyB4ZSghMCx3ZSl9LFhbIlVURi0xNkxFIl09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgTWUo''@;'; put 'put ''ITEsd2UpfSxuZVsiVVRGLTE2TEUiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyB4ZSghMSx3ZSl9LFhbIngtdXNlci1kZWZpbmVkIl09ZnVuY3Rpb24od2Upe3JldHVybiBuZXcgYmUod2UpfSxuZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbih3ZSl7cmV0dXJuIG5ldyBJZSh3ZSl9LFMu''@;'; put 'put ''VGV4dEVuY29kZXJ8fChTLlRleHRFbmNvZGVyPWspLFMuVGV4dERlY29kZXJ8fChTLlRleHREZWNvZGVyPV8pLHRlLmV4cG9ydHMmJih0ZS5leHBvcnRzPXtUZXh0RW5jb2RlcjpTLlRleHRFbmNvZGVyLFRleHREZWNvZGVyOlMuVGV4dERlY29kZXIsRW5jb2RpbmdJbmRleGVzOlNbImVuY29k''@;'; put 'put ''aW5nLWluZGV4ZXMiXX0pfSh0aGlzfHx7fSl9LDQxMDkwKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjcwNTQpLkJ1ZmZlcixoPWQoNTY0NzEpLG89ZCg1NzMpLEk9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbihPKXt0cnl7cmV0dXJuIG8oTyksITB9Y2F0Y2h7cmV0dXJuITF9''@;'; put 'put ''fSxmPXR5cGVvZiBVaW50OEFycmF5PCJ1IixUPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IixBPVQmJihTLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fFMuVFlQRURfQVJSQVlfU1VQUE9SVCk7dGUuZXhwb3J0cz1mdW5jdGlvbihPLEQpe2lm''@;'; put 'put ''KFMuaXNCdWZmZXIoTykpcmV0dXJuIE8uY29uc3RydWN0b3ImJiEoImlzQnVmZmVyImluIE8pP1MuZnJvbShPKTpPO2lmKCJzdHJpbmciPT10eXBlb2YgTylyZXR1cm4gUy5mcm9tKE8sRCk7aWYoVCYmSShPKSl7aWYoMD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gUy5hbGxvYygwKTtpZihBKXt2''@;'; put 'put ''YXIgRT1TLmZyb20oTy5idWZmZXIsTy5ieXRlT2Zmc2V0LE8uYnl0ZUxlbmd0aCk7aWYoRS5ieXRlTGVuZ3RoPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBFfXZhciBCPU8gaW5zdGFuY2VvZiBVaW50OEFycmF5P086bmV3IFVpbnQ4QXJyYXkoTy5idWZmZXIsTy5ieXRlT2Zmc2V0LE8uYnl0ZUxl''@;'; put 'put ''bmd0aCksRj1TLmZyb20oQik7aWYoRi5sZW5ndGg9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIEZ9aWYoZiYmTyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIFMuZnJvbShPKTt2YXIgTj1oKE8pO2lmKE4pZm9yKHZhciBIPTA7SDxPLmxlbmd0aDtIKz0xKXt2YXIgej1PW0hdO2lmKCJudW1i''@;'; put 'put ''ZXIiIT10eXBlb2Ygenx8ejwwfHx6PjI1NXx8fn56IT09eil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJyYXkgaXRlbXMgbXVzdCBiZSBudW1iZXJzIGluIHRoZSByYW5nZSAwLTI1NS4iKX1pZihOfHxTLmlzQnVmZmVyKE8pJiZPLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5j''@;'; put 'put ''b25zdHJ1Y3Rvci5pc0J1ZmZlciYmTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihPKSlyZXR1cm4gUy5mcm9tKE8pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXksIGEgQnVmZmVyLCBhIFVpbnQ4QXJyYXksIG9yIGEgRGF0''@;'; put 'put ''YVZpZXcuJyl9fSw1NjQ3MSh0ZSl7dmFyIGo9e30udG9TdHJpbmc7dGUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihkKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qLmNhbGwoZCl9fSw1NzModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0Njc1OCksbz1kKDEyNzczKSgi''@;'; put 'put ''VHlwZWRBcnJheS5wcm90b3R5cGUuYnVmZmVyIiwhMCksST1kKDQ3MjkpO3RlLmV4cG9ydHM9b3x8ZnVuY3Rpb24oVCl7aWYoIUkoVCkpdGhyb3cgbmV3IFMoIk5vdCBhIFR5cGVkIEFycmF5Iik7cmV0dXJuIFQuYnVmZmVyfX0sMzM5OCh0ZSl7ZnVuY3Rpb24gZChTKXt0cnl7aWYoIWdsb2Jh''@;'; put 'put ''bC5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIGg9Z2xvYmFsLmxvY2FsU3RvcmFnZVtTXTtyZXR1cm4gbnVsbCE9aCYmInRydWUiPT09U3RyaW5nKGgpLnRvTG93ZXJDYXNlKCl9dGUuZXhwb3J0cz1mdW5jdGlvbiBqKFMsaCl7aWYoZCgibm9EZXByZWNhdGlvbiIp''@;'; put 'put ''KXJldHVybiBTO3ZhciBvPSExO3JldHVybiBmdW5jdGlvbiBJKCl7aWYoIW8pe2lmKGQoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3IoaCk7ZCgidHJhY2VEZXByZWNhdGlvbiIpP2NvbnNvbGUudHJhY2UoaCk6Y29uc29sZS53YXJuKGgpLG89ITB9cmV0dXJuIFMuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfX19LDEyOTU0KHRlLGosZCl7IWZ1bmN0aW9uKFMpeyJ1c2Ugc3RyaWN0IjtTLmV4cG9ydHMuaXNfdXJpPW8sUy5leHBvcnRzLmlzX2h0dHBfdXJpPUksUy5leHBvcnRzLmlzX2h0dHBzX3VyaT1mLFMuZXhwb3J0cy5pc193ZWJfdXJpPVQsUy5leHBvcnRzLmlzVXJp''@;'; put 'put ''PW8sUy5leHBvcnRzLmlzSHR0cFVyaT1JLFMuZXhwb3J0cy5pc0h0dHBzVXJpPWYsUy5leHBvcnRzLmlzV2ViVXJpPVQ7dmFyIGg9ZnVuY3Rpb24oQSl7cmV0dXJuIEEubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNdKikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzoj''@;'; put 'put ''KC4qKSk/Lyl9O2Z1bmN0aW9uIG8oQSl7aWYoQSYmIS9bXmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChBKSYmIS8lW14wLTlhLWZdL2kudGVzdChBKSYmIS8lWzAtOWEtZl0oOj9bXjAtOWEtZl18JCkvaS50ZXN0KEEpKXt2YXIg''@;'; put 'put ''TSxELEUsQixGLE89IiIsTj0iIjtpZihEPShNPWgoQSkpWzJdLEU9TVszXSxCPU1bNF0sRj1NWzVdLChPPU1bMV0pJiZPLmxlbmd0aCYmRS5sZW5ndGg+PTApe2lmKEQmJkQubGVuZ3RoKXtpZigwIT09RS5sZW5ndGgmJiEvXlwvLy50ZXN0KEUpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVz''@;'; put 'put ''dChFKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3QoTy50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gTis9TysiOiIsRCYmRC5sZW5ndGgmJihOKz0iLy8iK0QpLE4rPUUsQiYmQi5sZW5ndGgmJihOKz0iPyIrQiksRiYmRi5sZW5ndGgmJihOKz0iIyIrRiksTn19fWZ1bmN0''@;'; put 'put ''aW9uIEkoQSxNKXtpZihvKEEpKXt2YXIgTyxCLE4sSCxEPSIiLEU9IiIsRj0iIix6PSIiO2lmKEU9KE89aChBKSlbMl0sQj1PWzNdLE49T1s0XSxIPU9bNV0sRD1PWzFdKXtpZihNKXtpZigiaHR0cHMiIT1ELnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1ELnRvTG93ZXJD''@;'; put 'put ''YXNlKCkpcmV0dXJuO2lmKEUpcmV0dXJuLzooXGQrKSQvLnRlc3QoRSkmJihGPUUubWF0Y2goLzooXGQrKSQvKVswXSxFPUUucmVwbGFjZSgvOlxkKyQvLCIiKSkseis9RCsiOiIseis9Ii8vIitFLEYmJih6Kz1GKSx6Kz1CLE4mJk4ubGVuZ3RoJiYoeis9Ij8iK04pLEgmJkgubGVuZ3RoJiYo''@;'; put 'put ''eis9IiMiK0gpLHp9fX1mdW5jdGlvbiBmKEEpe3JldHVybiBJKEEsITApfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIEkoQSl8fGYoQSl9fSh0ZT1kLm5tZCh0ZSkpfSw4NjYxKHRlLGosZCl7dGUuZXhwb3J0cz1kKDg2NjEpfSw0NDA2OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg5OTk5''@;'; put 'put ''KSxoPWQoOTc1OTQpLG89ZCg0ODEyOCksST1kKDEyNzczKSxmPWQoODM3OTgpLFQ9ZCg5MTYyNyksQT1JKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksTT1kKDg4Nzc5KSgpLE89dHlwZW9mIGdsb2JhbFRoaXM+InUiP2dsb2JhbDpnbG9iYWxUaGlzLEQ9aCgpLEU9SSgiU3RyaW5nLnBy''@;'; put 'put ''b3RvdHlwZS5zbGljZSIpLEI9SSgiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oWixVKXtmb3IodmFyIEs9MDtLPFoubGVuZ3RoO0srPTEpaWYoWltLXT09PVUpcmV0dXJuIEs7cmV0dXJuLTF9LEY9e19fcHJvdG9fXzpudWxsfTtTKEQsTSYmZiYmVD9mdW5jdGlvbih6''@;'; put 'put ''KXt2YXIgWj1uZXcgT1t6XTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gWiYmVCl7dmFyIFU9VChaKSxLPWYoVSxTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFLJiZVKXt2YXIgWD1UKFUpO0s9ZihYLFN5bWJvbC50b1N0cmluZ1RhZyl9aWYoSyYmSy5nZXQpe3ZhciBuZT1vKEsuZ2V0KTtGWyIk''@;'; put 'put ''Iit6XT1uZX19fTpmdW5jdGlvbih6KXt2YXIgWj1uZXcgT1t6XSxVPVouc2xpY2V8fFouc2V0O2lmKFUpe3ZhciBLPW8oVSk7RlsiJCIrel09S319KSx0ZS5leHBvcnRzPWZ1bmN0aW9uKFope2lmKCFafHwib2JqZWN0IiE9dHlwZW9mIFopcmV0dXJuITE7aWYoIU0pe3ZhciBVPUUoQShaKSw4''@;'; put 'put ''LC0xKTtyZXR1cm4gQihELFUpPi0xP1U6Ik9iamVjdCI9PT1VJiZmdW5jdGlvbihaKXt2YXIgVT0hMTtyZXR1cm4gUyhGLGZ1bmN0aW9uKEssWCl7aWYoIVUpdHJ5e0soWiksVT1FKFgsMSl9Y2F0Y2h7fX0pLFV9KFopfXJldHVybiBmP2Z1bmN0aW9uKFope3ZhciBVPSExO3JldHVybiBTKEYs''@;'; put 'put ''ZnVuY3Rpb24oSyxYKXtpZighVSl0cnl7IiQiK0soWik9PT1YJiYoVT1FKFgsMSkpfWNhdGNoe319KSxVfShaKTpudWxsfX0sMzUzNTgodGUsaixkKXt2YXIgUz17Ii4vYWYiOjExNTQ0LCIuL2FmLmpzIjoxMTU0NCwiLi9hciI6MzMxMDgsIi4vYXItZHoiOjUyMTU1LCIuL2FyLWR6LmpzIjo1''@;'; put 'put ''MjE1NSwiLi9hci1rdyI6NTM1ODMsIi4vYXIta3cuanMiOjUzNTgzLCIuL2FyLWx5Ijo0MTYzOCwiLi9hci1seS5qcyI6NDE2MzgsIi4vYXItbWEiOjg3ODIzLCIuL2FyLW1hLmpzIjo4NzgyMywiLi9hci1wcyI6NzcxMiwiLi9hci1wcy5qcyI6NzcxMiwiLi9hci1zYSI6NzgyNjEsIi4vYXIt''@;'; put 'put ''c2EuanMiOjc4MjYxLCIuL2FyLXRuIjo1NjcwMywiLi9hci10bi5qcyI6NTY3MDMsIi4vYXIuanMiOjMzMTA4LCIuL2F6Ijo0NjUwOCwiLi9hei5qcyI6NDY1MDgsIi4vYmUiOjE2NzY2LCIuL2JlLmpzIjoxNjc2NiwiLi9iZyI6Mjg1NjQsIi4vYmcuanMiOjI4NTY0LCIuL2JtIjo5NzQ2Miwi''@;'; put 'put ''Li9ibS5qcyI6OTc0NjIsIi4vYm4iOjE3MTA3LCIuL2JuLWJkIjo0MzQzOCwiLi9ibi1iZC5qcyI6NDM0MzgsIi4vYm4uanMiOjE3MTA3LCIuL2JvIjo5MDA0LCIuL2JvLmpzIjo5MDA0LCIuL2JyIjo1MDkyNywiLi9ici5qcyI6NTA5MjcsIi4vYnMiOjg3NzY4LCIuL2JzLmpzIjo4Nzc2OCwi''@;'; put 'put ''Li9jYSI6NTYyOTEsIi4vY2EuanMiOjU2MjkxLCIuL2NzIjo4NTMwMSwiLi9jcy5qcyI6ODUzMDEsIi4vY3YiOjY2NjY2LCIuL2N2LmpzIjo2NjY2NiwiLi9jeSI6NTUxNjMsIi4vY3kuanMiOjU1MTYzLCIuL2RhIjo4NzM2MCwiLi9kYS5qcyI6ODczNjAsIi4vZGUiOjQ1OTMyLCIuL2RlLWF0''@;'; put 'put ''Ijo0MzI0OCwiLi9kZS1hdC5qcyI6NDMyNDgsIi4vZGUtY2giOjgzMjIyLCIuL2RlLWNoLmpzIjo4MzIyMiwiLi9kZS5qcyI6NDU5MzIsIi4vZHYiOjY0MDUsIi4vZHYuanMiOjY0MDUsIi4vZWwiOjYwNzE4LCIuL2VsLmpzIjo2MDcxOCwiLi9lbi1hdSI6MzYzMTksIi4vZW4tYXUuanMiOjM2''@;'; put 'put ''MzE5LCIuL2VuLWNhIjo4MDU5NywiLi9lbi1jYS5qcyI6ODA1OTcsIi4vZW4tZ2IiOjUxODAwLCIuL2VuLWdiLmpzIjo1MTgwMCwiLi9lbi1pZSI6ODA3LCIuL2VuLWllLmpzIjo4MDcsIi4vZW4taWwiOjk1OTYwLCIuL2VuLWlsLmpzIjo5NTk2MCwiLi9lbi1pbiI6ODQ0MTgsIi4vZW4taW4u''@;'; put 'put ''anMiOjg0NDE4LCIuL2VuLW56Ijo0Njg2NSwiLi9lbi1uei5qcyI6NDY4NjUsIi4vZW4tc2ciOjMyNjQ3LCIuL2VuLXNnLmpzIjozMjY0NywiLi9lbyI6NjE5MzEsIi4vZW8uanMiOjYxOTMxLCIuL2VzIjo0NjY3OSwiLi9lcy1kbyI6NDE4MDUsIi4vZXMtZG8uanMiOjQxODA1LCIuL2VzLW14''@;'; put 'put ''Ijo4MzQ0NSwiLi9lcy1teC5qcyI6ODM0NDUsIi4vZXMtdXMiOjgxNTE2LCIuL2VzLXVzLmpzIjo4MTUxNiwiLi9lcy5qcyI6NDY2NzksIi4vZXQiOjg4MTUwLCIuL2V0LmpzIjo4ODE1MCwiLi9ldSI6ODA3NTcsIi4vZXUuanMiOjgwNzU3LCIuL2ZhIjo2NTc0MiwiLi9mYS5qcyI6NjU3NDIs''@;'; put 'put ''Ii4vZmkiOjMzOTU4LCIuL2ZpLmpzIjozMzk1OCwiLi9maWwiOjQ2NzIwLCIuL2ZpbC5qcyI6NDY3MjAsIi4vZm8iOjk4MzUyLCIuL2ZvLmpzIjo5ODM1MiwiLi9mciI6NDA1OSwiLi9mci1jYSI6NDIwOTYsIi4vZnItY2EuanMiOjQyMDk2LCIuL2ZyLWNoIjo5NTc1OSwiLi9mci1jaC5qcyI6''@;'; put 'put ''OTU3NTksIi4vZnIuanMiOjQwNTksIi4vZnkiOjE1OTU4LCIuL2Z5LmpzIjoxNTk1OCwiLi9nYSI6OTQxNDMsIi4vZ2EuanMiOjk0MTQzLCIuL2dkIjo2NzAyOCwiLi9nZC5qcyI6NjcwMjgsIi4vZ2wiOjgwNDI4LCIuL2dsLmpzIjo4MDQyOCwiLi9nb20tZGV2YSI6NzY4NjEsIi4vZ29tLWRl''@;'; put 'put ''dmEuanMiOjc2ODYxLCIuL2dvbS1sYXRuIjo1NzcxOCwiLi9nb20tbGF0bi5qcyI6NTc3MTgsIi4vZ3UiOjI2ODI3LCIuL2d1LmpzIjoyNjgyNywiLi9oZSI6MjE5MzYsIi4vaGUuanMiOjIxOTM2LCIuL2hpIjozMTMzMiwiLi9oaS5qcyI6MzEzMzIsIi4vaHIiOjkxOTU3LCIuL2hyLmpzIjo5''@;'; put 'put ''MTk1NywiLi9odSI6NDg5MjgsIi4vaHUuanMiOjQ4OTI4LCIuL2h5LWFtIjo1NjIxNSwiLi9oeS1hbS5qcyI6NTYyMTUsIi4vaWQiOjU4NiwiLi9pZC5qcyI6NTg2LCIuL2lzIjo5MDIxMSwiLi9pcy5qcyI6OTAyMTEsIi4vaXQiOjcwMTcwLCIuL2l0LWNoIjoyMjM0MCwiLi9pdC1jaC5qcyI6''@;'; put 'put ''MjIzNDAsIi4vaXQuanMiOjcwMTcwLCIuL2phIjozOTc3MCwiLi9qYS5qcyI6Mzk3NzAsIi4vanYiOjczODc1LCIuL2p2LmpzIjo3Mzg3NSwiLi9rYSI6Nzk0OTksIi4va2EuanMiOjc5NDk5LCIuL2trIjo5MzU3MywiLi9ray5qcyI6OTM1NzMsIi4va20iOjY4ODA3LCIuL2ttLmpzIjo2ODgw''@;'; put 'put ''NywiLi9rbiI6NjUwODIsIi4va24uanMiOjY1MDgyLCIuL2tvIjoyMDEzNywiLi9rby5qcyI6MjAxMzcsIi4va3UiOjcwMTExLCIuL2t1LWttciI6NjM3NDQsIi4va3Uta21yLmpzIjo2Mzc0NCwiLi9rdS5qcyI6NzAxMTEsIi4va3kiOjk5MTg3LCIuL2t5LmpzIjo5OTE4NywiLi9sYiI6MzU5''@;'; put 'put ''NjksIi4vbGIuanMiOjM1OTY5LCIuL2xvIjozMzUyNiwiLi9sby5qcyI6MzM1MjYsIi4vbHQiOjkwNDExLCIuL2x0LmpzIjo5MDQxMSwiLi9sdiI6MzI2MjEsIi4vbHYuanMiOjMyNjIxLCIuL21lIjo4NTg2OSwiLi9tZS5qcyI6ODU4NjksIi4vbWkiOjM1ODgxLCIuL21pLmpzIjozNTg4MSwi''@;'; put 'put ''Li9tayI6OTIzOTEsIi4vbWsuanMiOjkyMzkxLCIuL21sIjoyMTEyNiwiLi9tbC5qcyI6MjExMjYsIi4vbW4iOjQ0ODkyLCIuL21uLmpzIjo0NDg5MiwiLi9tciI6NTkwODAsIi4vbXIuanMiOjU5MDgwLCIuL21zIjo3MDM5OSwiLi9tcy1teSI6MjU5NTAsIi4vbXMtbXkuanMiOjI1OTUwLCIu''@;'; put 'put ''L21zLmpzIjo3MDM5OSwiLi9tdCI6Nzk5MDIsIi4vbXQuanMiOjc5OTAyLCIuL215Ijo3Mjk4NSwiLi9teS5qcyI6NzI5ODUsIi4vbmIiOjY3ODU5LCIuL25iLmpzIjo2Nzg1OSwiLi9uZSI6MTM2NDIsIi4vbmUuanMiOjEzNjQyLCIuL25sIjo2NTQ0MSwiLi9ubC1iZSI6OTk4NzUsIi4vbmwt''@;'; put 'put ''YmUuanMiOjk5ODc1LCIuL25sLmpzIjo2NTQ0MSwiLi9ubiI6ODEzMTEsIi4vbm4uanMiOjgxMzExLCIuL29jLWxuYyI6NzI1NjcsIi4vb2MtbG5jLmpzIjo3MjU2NywiLi9wYS1pbiI6NTY5NjIsIi4vcGEtaW4uanMiOjU2OTYyLCIuL3BsIjo2MTA2MywiLi9wbC5qcyI6NjEwNjMsIi4vcHQi''@;'; put 'put ''Ojc4NzE5LCIuL3B0LWJyIjo5NzQ3NiwiLi9wdC1ici5qcyI6OTc0NzYsIi4vcHQuanMiOjc4NzE5LCIuL3JvIjo1MTAwNCwiLi9yby5qcyI6NTEwMDQsIi4vcnUiOjUxMzI2LCIuL3J1LmpzIjo1MTMyNiwiLi9zZCI6NzI2MDgsIi4vc2QuanMiOjcyNjA4LCIuL3NlIjoxMzkxMSwiLi9zZS5q''@;'; put 'put ''cyI6MTM5MTEsIi4vc2kiOjI1MTQ3LCIuL3NpLmpzIjoyNTE0NywiLi9zayI6MjM3NDEsIi4vc2suanMiOjIzNzQxLCIuL3NsIjo5M2UzLCIuL3NsLmpzIjo5M2UzLCIuL3NxIjo2MDQ1MSwiLi9zcS5qcyI6NjA0NTEsIi4vc3IiOjU1MDQ2LCIuL3NyLWN5cmwiOjQwOTA1LCIuL3NyLWN5cmwu''@;'; put 'put ''anMiOjQwOTA1LCIuL3NyLmpzIjo1NTA0NiwiLi9zcyI6ODU3NjUsIi4vc3MuanMiOjg1NzY1LCIuL3N2Ijo5OTI5MCwiLi9zdi5qcyI6OTkyOTAsIi4vc3ciOjUzNDQ5LCIuL3N3LmpzIjo1MzQ0OSwiLi90YSI6NzI2ODgsIi4vdGEuanMiOjcyNjg4LCIuL3RlIjozMjA2MCwiLi90ZS5qcyI6''@;'; put 'put ''MzIwNjAsIi4vdGV0Ijo5MzI5MCwiLi90ZXQuanMiOjkzMjkwLCIuL3RnIjo4Mjk0LCIuL3RnLmpzIjo4Mjk0LCIuL3RoIjoxMjMxLCIuL3RoLmpzIjoxMjMxLCIuL3RrIjozNzQ2LCIuL3RrLmpzIjozNzQ2LCIuL3RsLXBoIjo0OTA0MCwiLi90bC1waC5qcyI6NDkwNDAsIi4vdGxoIjoxNzE4''@;'; put 'put ''NywiLi90bGguanMiOjE3MTg3LCIuL3RyIjo2MDE1MywiLi90ci5qcyI6NjAxNTMsIi4vdHpsIjo4ODUyMSwiLi90emwuanMiOjg4NTIxLCIuL3R6bSI6MTgwMTAsIi4vdHptLWxhdG4iOjIyMjM0LCIuL3R6bS1sYXRuLmpzIjoyMjIzNCwiLi90em0uanMiOjE4MDEwLCIuL3VnLWNuIjo2MzM0''@;'; put 'put ''OSwiLi91Zy1jbi5qcyI6NjMzNDksIi4vdWsiOjY4NDc5LCIuL3VrLmpzIjo2ODQ3OSwiLi91ciI6NDMwMjQsIi4vdXIuanMiOjQzMDI0LCIuL3V6IjoxOTgwMCwiLi91ei1sYXRuIjo3MjM3NiwiLi91ei1sYXRuLmpzIjo3MjM3NiwiLi91ei5qcyI6MTk4MDAsIi4vdmkiOjg5MzY2LCIuL3Zp''@;'; put 'put ''LmpzIjo4OTM2NiwiLi94LXBzZXVkbyI6Njk3MDIsIi4veC1wc2V1ZG8uanMiOjY5NzAyLCIuL3lvIjo3MjY1NSwiLi95by5qcyI6NzI2NTUsIi4vemgtY24iOjU3NSwiLi96aC1jbi5qcyI6NTc1LCIuL3poLWhrIjoxODM1MSwiLi96aC1oay5qcyI6MTgzNTEsIi4vemgtbW8iOjUxNjI2LCIu''@;'; put 'put ''L3poLW1vLmpzIjo1MTYyNiwiLi96aC10dyI6ODg4NywiLi96aC10dy5qcyI6ODg4N307ZnVuY3Rpb24gaChJKXt2YXIgZj1vKEkpO3JldHVybiBkKGYpfWZ1bmN0aW9uIG8oSSl7aWYoIWQubyhTLEkpKXt2YXIgZj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitJKyInIik7dGhy''@;'; put 'put ''b3cgZi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixmfXJldHVybiBTW0ldfWgua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhTKX0saC5yZXNvbHZlPW8sdGUuZXhwb3J0cz1oLGguaWQ9MzUzNTh9LDgzMzM3KCl7fSw3ODk4Migpe30sNDc3OTAoKXt9LDc3OTY1KCl7fSw2NjA4''@;'; put 'put ''OSgpe30sNzkzNjgoKXt9LDE1NzkxKCl7fSw2MTA5Mygpe30sNjQ2ODgoKXt9LDUxMDY5KCl7fSwxNTM0MCgpe30sNzk4MzgoKXt9LDYzNzc5KCl7fSw3NzE5OSgpe30sOTc1OTQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg1MDE5KSxoPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9nbG9i''@;'; put 'put ''YWw6Z2xvYmFsVGhpczt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBJPVtdLGY9MDtmPFMubGVuZ3RoO2YrKykiZnVuY3Rpb24iPT10eXBlb2YgaFtTW2ZdXSYmKElbSS5sZW5ndGhdPVNbZl0pO3JldHVybiBJfX0sMjUxNzIodGUpe3RlLmV4cG9ydHM9ZnVuY3Rpb24gaihkLFMpe3Ro''@;'; put 'put ''aXMudj1kLHRoaXMuaz1TfSx0ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdGUuZXhwb3J0cy5kZWZhdWx0PXRlLmV4cG9ydHN9LDkzNTEzKHRlLGosZCl7dmFyIFM9ZCgyNTE3Mik7dGUuZXhwb3J0cz1mdW5jdGlvbiBoKG8pe3ZhciBJPXt9LGY9ITE7ZnVuY3Rpb24gVChBLE0pe3JldHVybiBm''@;'; put 'put ''PSEwLE09bmV3IFByb21pc2UoZnVuY3Rpb24oTyl7TyhvW0FdKE0pKX0pLHtkb25lOiExLHZhbHVlOm5ldyBTKE0sMSl9fXJldHVybiBJW3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sSS5uZXh0PWZ1bmN0''@;'; put 'put ''aW9uKEEpe3JldHVybiBmPyhmPSExLEEpOlQoIm5leHQiLEEpfSwiZnVuY3Rpb24iPT10eXBlb2Ygby50aHJvdyYmKEkudGhyb3c9ZnVuY3Rpb24oQSl7aWYoZil0aHJvdyBmPSExLEE7cmV0dXJuIFQoInRocm93IixBKX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBvLnJldHVybiYmKEkucmV0dXJu''@;'; put 'put ''PWZ1bmN0aW9uKEEpe3JldHVybiBmPyhmPSExLEEpOlQoInJldHVybiIsQSl9KSxJfSx0ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdGUuZXhwb3J0cy5kZWZhdWx0PXRlLmV4cG9ydHN9LDgyODgxKHRlKXtmdW5jdGlvbiBkKFMpe2Z1bmN0aW9uIGgobyl7aWYoT2JqZWN0KG8pIT09bylyZXR1''@;'; put 'put ''cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihvKyIgaXMgbm90IGFuIG9iamVjdC4iKSk7dmFyIEk9by5kb25lO3JldHVybiBQcm9taXNlLnJlc29sdmUoby52YWx1ZSkudGhlbihmdW5jdGlvbihmKXtyZXR1cm57dmFsdWU6Zixkb25lOkl9fSl9cmV0dXJuKGQ9ZnVuY3Rpb24oSSl7''@;'; put 'put ''dGhpcy5zPUksdGhpcy5uPUkubmV4dH0pLnByb3RvdHlwZT17czpudWxsLG46bnVsbCxuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5uLmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX0scmV0dXJuOmZ1bmN0aW9uKEkpe3ZhciBmPXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PWY/''@;'; put 'put ''UHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTpJLGRvbmU6ITB9KTpoKGYuYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSx0aHJvdzpmdW5jdGlvbihJKXt2YXIgZj10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT1mP1Byb21pc2UucmVqZWN0KEkpOmgoZi5hcHBseSh0aGlzLnMsYXJndW1lbnRz''@;'; put 'put ''KSl9fSxuZXcgZChTKX10ZS5leHBvcnRzPWZ1bmN0aW9uIGooUyl7dmFyIGgsbyxJLGY9Mjtmb3IodHlwZW9mIFN5bWJvbDwidSImJihvPVN5bWJvbC5hc3luY0l0ZXJhdG9yLEk9U3ltYm9sLml0ZXJhdG9yKTtmLS07KXtpZihvJiZudWxsIT0oaD1TW29dKSlyZXR1cm4gaC5jYWxsKFMpO2lm''@;'; put 'put ''KEkmJm51bGwhPShoPVNbSV0pKXJldHVybiBuZXcgZChoLmNhbGwoUykpO289IkBAYXN5bmNJdGVyYXRvciIsST0iQEBpdGVyYXRvciJ9dGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGlzIG5vdCBhc3luYyBpdGVyYWJsZSIpfSx0ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdGUuZXhwb3J0''@;'; put 'put ''cy5kZWZhdWx0PXRlLmV4cG9ydHN9LDI5MjkzKHRlKXtmdW5jdGlvbiBqKFMsaCxvLEksZixULEEpe3RyeXt2YXIgTT1TW1RdKEEpLE89TS52YWx1ZX1jYXRjaChEKXtyZXR1cm4gdm9pZCBvKEQpfU0uZG9uZT9oKE8pOlByb21pc2UucmVzb2x2ZShPKS50aGVuKEksZil9dGUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBkKFMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBoPXRoaXMsbz1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEksZil7dmFyIFQ9Uy5hcHBseShoLG8pO2Z1bmN0aW9uIEEoTyl7aihULEksZixBLE0sIm5leHQiLE8pfWZ1bmN0aW9uIE0oTyl7aihULEksZixB''@;'; put 'put ''LE0sInRocm93IixPKX1BKHZvaWQgMCl9KX19LHRlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx0ZS5leHBvcnRzLmRlZmF1bHQ9dGUuZXhwb3J0c30sNTMzNDQodGUsaixkKXt2YXIgUz1kKDI1MTcyKTt0ZS5leHBvcnRzPWZ1bmN0aW9uIGgobyl7cmV0dXJuIG5ldyBTKG8sMCl9LHRlLmV4cG9y''@;'; put 'put ''dHMuX19lc01vZHVsZT0hMCx0ZS5leHBvcnRzLmRlZmF1bHQ9dGUuZXhwb3J0c30sNDI5NTgodGUsaixkKXt2YXIgUz1kKDI1MTcyKTtmdW5jdGlvbiBvKEkpe3ZhciBmLFQ7ZnVuY3Rpb24gQShPLEQpe3RyeXt2YXIgRT1JW09dKEQpLEI9RS52YWx1ZSxGPUIgaW5zdGFuY2VvZiBTO1Byb21p''@;'; put 'put ''c2UucmVzb2x2ZShGP0IudjpCKS50aGVuKGZ1bmN0aW9uKE4pe2lmKEYpe3ZhciBIPSJyZXR1cm4iPT09Tz8icmV0dXJuIjoibmV4dCI7aWYoIUIua3x8Ti5kb25lKXJldHVybiBBKEgsTik7Tj1JW0hdKE4pLnZhbHVlfU0oRS5kb25lPyJyZXR1cm4iOiJub3JtYWwiLE4pfSxmdW5jdGlvbihO''@;'; put 'put ''KXtBKCJ0aHJvdyIsTil9KX1jYXRjaChOKXtNKCJ0aHJvdyIsTil9fWZ1bmN0aW9uIE0oTyxEKXtzd2l0Y2goTyl7Y2FzZSJyZXR1cm4iOmYucmVzb2x2ZSh7dmFsdWU6RCxkb25lOiEwfSk7YnJlYWs7Y2FzZSJ0aHJvdyI6Zi5yZWplY3QoRCk7YnJlYWs7ZGVmYXVsdDpmLnJlc29sdmUoe3Zh''@;'; put 'put ''bHVlOkQsZG9uZTohMX0pfShmPWYubmV4dCk/QShmLmtleSxmLmFyZyk6VD1udWxsfXRoaXMuX2ludm9rZT1mdW5jdGlvbihPLEQpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihFLEIpe3ZhciBGPXtrZXk6Tyxhcmc6RCxyZXNvbHZlOkUscmVqZWN0OkIsbmV4dDpudWxsfTtUP1Q9VC5u''@;'; put 'put ''ZXh0PUY6KGY9VD1GLEEoTyxEKSl9KX0sImZ1bmN0aW9uIiE9dHlwZW9mIEkucmV0dXJuJiYodGhpcy5yZXR1cm49dm9pZCAwKX1vLnByb3RvdHlwZVsiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciJdPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oSSl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsSSl9LG8ucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzLl9pbnZva2UoInRocm93IixJKX0sby5wcm90b3R5cGUucmV0dXJuPWZ1bmN0aW9uKEkp''@;'; put 'put ''e3JldHVybiB0aGlzLl9pbnZva2UoInJldHVybiIsSSl9LHRlLmV4cG9ydHM9ZnVuY3Rpb24gaChJKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8oSS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0sdGUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHRlLmV4cG9ydHMuZGVmYXVsdD10ZS5l''@;'; put 'put ''eHBvcnRzfSwzMTQ4Myh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDE5MTUwKSxoPWQoNzUyMTIpLG89VHlwZUVycm9yO3RlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7aWYoUyhJKSlyZXR1cm4gSTt0aHJvdyBuZXcgbyhoKEkpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX19LDI3NjcodGUsaixk''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0MzQwNiksaD1TdHJpbmcsbz1UeXBlRXJyb3I7dGUuZXhwb3J0cz1mdW5jdGlvbihJKXtpZihTKEkpKXJldHVybiBJO3Rocm93IG5ldyBvKCJDYW4ndCBzZXQgIitoKEkpKyIgYXMgYSBwcm90b3R5cGUiKX19LDM3NzMxKHRlLGosZCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBTPWQoOTc1NDEpLmhhczt0ZS5leHBvcnRzPWZ1bmN0aW9uKGgpe3JldHVybiBTKGgpLGh9fSw3MDgyNCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4MDEyKSxoPWQoOTc5NTEpLG89ZCg0NDY0OCkuZixJPVMoInVuc2NvcGFibGVzIiksZj1BcnJheS5wcm90b3R5cGU7''@;'; put 'put ''dm9pZCAwPT09ZltJXSYmbyhmLEkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpoKG51bGwpfSksdGUuZXhwb3J0cz1mdW5jdGlvbihUKXtmW0ldW1RdPSEwfX0sNjMzMzYodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0NjgpLGg9VHlwZUVycm9yO3RlLmV4cG9ydHM9ZnVuY3Rpb24obyxJ''@;'; put 'put ''KXtpZihTKEksbykpcmV0dXJuIG87dGhyb3cgbmV3IGgoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSwxMTA4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzI2MzMpLGg9U3RyaW5nLG89VHlwZUVycm9yO3RlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7aWYoUyhJKSlyZXR1cm4gSTt0aHJv''@;'; put 'put ''dyBuZXcgbyhoKEkpKyIgaXMgbm90IGFuIG9iamVjdCIpfX0sMzg4MSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDcxNzEpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oaCxvLEkpe2Zvcih2YXIgZj0wLFQ9YXJndW1lbnRzLmxlbmd0aD4yP0k6UyhvKSxBPW5ldyBoKFQpO1Q+ZjspQVtmXT1v''@;'; put 'put ''W2YrK107cmV0dXJuIEF9fSw3NDgyNCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDkzMTYyKSxoPWQoNzQ4NSksbz1kKDcxNzEpLEk9ZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKFQsQSxNKXt2YXIgTz1TKFQpLEQ9byhPKTtpZigwPT09RClyZXR1cm4hZiYmLTE7dmFyIEIsRT1o''@;'; put 'put ''KE0sRCk7aWYoZiYmQSE9QSl7Zm9yKDtEPkU7KWlmKChCPU9bRSsrXSkhPUIpcmV0dXJuITB9ZWxzZSBmb3IoO0Q+RTtFKyspaWYoKGZ8fEUgaW4gTykmJk9bRV09PT1BKXJldHVybiBmfHxFfHwwO3JldHVybiFmJiYtMX19O3RlLmV4cG9ydHM9e2luY2x1ZGVzOkkoITApLGluZGV4T2Y6SSgh''@;'; put 'put ''MSl9fSwzOTIwNih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ2Mzg3KSxoPWQoNjcyNzcpLG89VHlwZUVycm9yLEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixmPVMmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChUKXtyZXR1cm4gVCBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCk7dGUuZXhwb3J0cz1mP2Z1bmN0aW9uKFQsQSl7aWYoaChUKSYmIUkoVCwibGVuZ3RoIikud3JpdGFibGUpdGhyb3cgbmV3IG8oIkNhbm5v''@;'; put 'put ''dCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgiKTtyZXR1cm4gVC5sZW5ndGg9QX06ZnVuY3Rpb24oVCxBKXtyZXR1cm4gVC5sZW5ndGg9QX19LDc3NjM5KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTg2MDcpO3RlLmV4cG9ydHM9UyhbXS5zbGljZSl9LDQyOTI2KHRlLGosZCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBTPWQoMTEwOCksaD1kKDY2NTQyKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8sSSxmLFQpe3RyeXtyZXR1cm4gVD9JKFMoZilbMF0sZlsxXSk6SShmKX1jYXRjaChBKXtoKG8sInRocm93IixBKX19fSw4NjY3NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxo''@;'; put 'put ''PVMoe30udG9TdHJpbmcpLG89UygiIi5zbGljZSk7dGUuZXhwb3J0cz1mdW5jdGlvbihJKXtyZXR1cm4gbyhoKEkpLDgsLTEpfX0sNzE4MjQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzODU5NSksaD1kKDE5MTUwKSxvPWQoODY2NzUpLGY9ZCg1ODAxMikoInRvU3RyaW5nVGFnIiks''@;'; put 'put ''VD1PYmplY3QsQT0iQXJndW1lbnRzIj09PW8oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTt0ZS5leHBvcnRzPVM/bzpmdW5jdGlvbihPKXt2YXIgRCxFLEI7cmV0dXJuIHZvaWQgMD09PU8/IlVuZGVmaW5lZCI6bnVsbD09PU8/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoRT1mdW5j''@;'; put 'put ''dGlvbihPLEQpe3RyeXtyZXR1cm4gT1tEXX1jYXRjaHt9fShEPVQoTyksZikpP0U6QT9vKEQpOiJPYmplY3QiPT09KEI9byhEKSkmJmgoRC5jYWxsZWUpPyJBcmd1bWVudHMiOkJ9fSw0ODYzOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM4ZTMpLGg9ZCg4ODA3OCksbz1kKDU0MTIy''@;'; put 'put ''KSxJPWQoNDQ2NDgpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oZixULEEpe2Zvcih2YXIgTT1oKFQpLE89SS5mLEQ9by5mLEU9MDtFPE0ubGVuZ3RoO0UrKyl7dmFyIEI9TVtFXTshUyhmLEIpJiYoIUF8fCFTKEEsQikpJiZPKGYsQixEKFQsQikpfX19LDgyODM0KHRlLGosZCl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBTPWQoNTU1OTIpO3RlLmV4cG9ydHM9IVMoZnVuY3Rpb24oKXtmdW5jdGlvbiBoKCl7fXJldHVybiBoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgaCkhPT1oLnByb3RvdHlwZX0pfSw1ODk3OCh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oaixkKXtyZXR1cm57dmFsdWU6aixkb25lOmR9fX0sMzY2NzgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0NjM4NyksaD1kKDQ0NjQ4KSxvPWQoNzc3NzMpO3RlLmV4cG9ydHM9Uz9mdW5jdGlvbihJLGYsVCl7cmV0dXJuIGguZihJLGYsbygxLFQpKX06ZnVu''@;'; put 'put ''Y3Rpb24oSSxmLFQpe3JldHVybiBJW2ZdPVQsSX19LDc3NzczKHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1mdW5jdGlvbihqLGQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZqKSxjb25maWd1cmFibGU6ISgyJmopLHdyaXRhYmxlOiEoNCZqKSx2YWx1ZTpkfX19LDU4Nzk1KHRlLGosZCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBTPWQoNDYzODcpLGg9ZCg0NDY0OCksbz1kKDc3NzczKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKEksZixUKXtTP2guZihJLGYsbygwLFQpKTpJW2ZdPVR9fSw0NDAzOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDE2OTgwKSxoPWQoNDQ2NDgpO3RlLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24obyxJLGYpe3JldHVybiBmLmdldCYmUyhmLmdldCxJLHtnZXR0ZXI6ITB9KSxmLnNldCYmUyhmLnNldCxJLHtzZXR0ZXI6ITB9KSxoLmYobyxJLGYpfX0sMzEwODModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgxOTE1MCksaD1kKDQ0NjQ4KSxvPWQoMTY5ODApLEk9''@;'; put 'put ''ZCg0ODEwNCk7dGUuZXhwb3J0cz1mdW5jdGlvbihmLFQsQSxNKXtNfHwoTT17fSk7dmFyIE89TS5lbnVtZXJhYmxlLEQ9dm9pZCAwIT09TS5uYW1lP00ubmFtZTpUO2lmKFMoQSkmJm8oQSxELE0pLE0uZ2xvYmFsKU8/ZltUXT1BOkkoVCxBKTtlbHNle3RyeXtNLnVuc2FmZT9mW1RdJiYoTz0h''@;'; put 'put ''MCk6ZGVsZXRlIGZbVF19Y2F0Y2h7fU8/ZltUXT1BOmguZihmLFQse3ZhbHVlOkEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IU0ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFNLm5vbldyaXRhYmxlfSl9cmV0dXJuIGZ9fSwxNDc1MCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1k''@;'; put 'put ''KDMxMDgzKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGgsbyxJKXtmb3IodmFyIGYgaW4gbylTKGgsZixvW2ZdLEkpO3JldHVybiBofX0sNDgxMDQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzMzk2MyksaD1PYmplY3QuZGVmaW5lUHJvcGVydHk7dGUuZXhwb3J0cz1mdW5jdGlvbihvLEkp''@;'; put 'put ''e3RyeXtoKFMsbyx7dmFsdWU6SSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaHtTW29dPUl9cmV0dXJuIEl9fSw0MzE5NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDc1MjEyKSxoPVR5cGVFcnJvcjt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8sSSl7aWYoIWRlbGV0ZSBv''@;'; put 'put ''W0ldKXRocm93IG5ldyBoKCJDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICIrUyhJKSsiIG9mICIrUyhvKSl9fSw0NjM4Nyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU1NTkyKTt0ZS5leHBvcnRzPSFTKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30s''@;'; put 'put ''MSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KX0sNTU5ODgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzMzk2MyksaD1kKDMyNjMzKSxvPVMuZG9jdW1lbnQsST1oKG8pJiZoKG8uY3JlYXRlRWxlbWVudCk7dGUuZXhwb3J0cz1mdW5jdGlvbihmKXtyZXR1cm4gST9vLmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoZik6e319fSwzMzE2KHRlKXsidXNlIHN0cmljdCI7dmFyIGo9VHlwZUVycm9yO3RlLmV4cG9ydHM9ZnVuY3Rpb24oUyl7aWYoUz45MDA3MTk5MjU0NzQwOTkxKXRocm93IG5ldyBqKCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiKTtyZXR1cm4gU319LDU4NTQw''@;'; put 'put ''KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSw0NDEzNyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgUz1kKDIzNTgpO3RlLmV4cG9ydHM9L2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KFMpJiYvYXBwbGV3ZWJraXQvaS50ZXN0KFMpfSwyMTUxMCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ3MDkyKTt0ZS5leHBvcnRzPSJOT0RFIj09PVN9LDIzNTgodGUsaixkKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGg9ZCgzMzk2MykubmF2aWdhdG9yLG89aCYmaC51c2VyQWdlbnQ7dGUuZXhwb3J0cz1vP1N0cmluZyhvKToiIn0sNDQwNjYodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIEEsTSxTPWQoMzM5NjMpLGg9ZCgyMzU4KSxvPVMucHJvY2VzcyxJPVMuRGVubyxmPW8mJm8udmVyc2lv''@;'; put 'put ''bnN8fEkmJkkudmVyc2lvbixUPWYmJmYudjg7VCYmKE09KEE9VC5zcGxpdCgiLiIpKVswXT4wJiZBWzBdPDQ/MTorKEFbMF0rQVsxXSkpLCFNJiZoJiYoIShBPWgubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxBWzFdPj03NCkmJihBPWgubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihNPStBWzFd''@;'; put 'put ''KSx0ZS5leHBvcnRzPU19LDQ3MDkyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzM5NjMpLGg9ZCgyMzU4KSxvPWQoODY2NzUpLEk9ZnVuY3Rpb24oZil7cmV0dXJuIGguc2xpY2UoMCxmLmxlbmd0aCk9PT1mfTt0ZS5leHBvcnRzPUkoIkJ1bi8iKT8iQlVOIjpJKCJDbG91ZGZsYXJl''@;'; put 'put ''LVdvcmtlcnMiKT8iQ0xPVURGTEFSRSI6SSgiRGVuby8iKT8iREVOTyI6SSgiTm9kZS5qcy8iKT8iTk9ERSI6Uy5CdW4mJiJzdHJpbmciPT10eXBlb2YgQnVuLnZlcnNpb24/IkJVTiI6Uy5EZW5vJiYib2JqZWN0Ij09dHlwZW9mIERlbm8udmVyc2lvbj8iREVOTyI6InByb2Nlc3MiPT09byhT''@;'; put 'put ''LnByb2Nlc3MpPyJOT0RFIjpTLndpbmRvdyYmUy5kb2N1bWVudD8iQlJPV1NFUiI6IlJFU1QifSw5ODg1NCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPUVycm9yLG89UygiIi5yZXBsYWNlKSxJPVN0cmluZyhuZXcgaCgienhjYXNkIikuc3RhY2spLGY9L1xuXHMqYXQg''@;'; put 'put ''W146XSo6W15cbl0qLyxUPWYudGVzdChJKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKEEsTSl7aWYoVCYmInN0cmluZyI9PXR5cGVvZiBBJiYhaC5wcmVwYXJlU3RhY2tUcmFjZSlmb3IoO00tLTspQT1vKEEsZiwiIik7cmV0dXJuIEF9fSwyMjMwNCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1k''@;'; put 'put ''KDM2Njc4KSxoPWQoOTg4NTQpLG89ZCg3NDk2NCksST1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGYsVCxBLE0pe28mJihJP0koZixUKTpTKGYsInN0YWNrIixoKEEsTSkpKX19LDc0OTY0KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTU1OTIpLGg9''@;'; put 'put ''ZCg3Nzc3Myk7dGUuZXhwb3J0cz0hUyhmdW5jdGlvbigpe3ZhciBvPW5ldyBFcnJvcigiYSIpO3JldHVybiEoInN0YWNrImluIG8pfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sInN0YWNrIixoKDEsNykpLDchPT1vLnN0YWNrKX0pfSwyODM2Nyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''Uz1kKDMzOTYzKSxoPWQoNTQxMjIpLmYsbz1kKDM2Njc4KSxJPWQoMzEwODMpLGY9ZCg0ODEwNCksVD1kKDQ4NjM5KSxBPWQoMTYzNjMpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oTSxPKXt2YXIgTixILHosWixVLEQ9TS50YXJnZXQsRT1NLmdsb2JhbCxCPU0uc3RhdDtpZihOPUU/UzpCP1NbRF18''@;'; put 'put ''fGYoRCx7fSk6U1tEXSYmU1tEXS5wcm90b3R5cGUpZm9yKEggaW4gTyl7aWYoWj1PW0hdLHo9TS5kb250Q2FsbEdldFNldD8oVT1oKE4sSCkpJiZVLnZhbHVlOk5bSF0sIUEoRT9IOkQrKEI/Ii4iOiIjIikrSCxNLmZvcmNlZCkmJnZvaWQgMCE9PXope2lmKHR5cGVvZiBaPT10eXBlb2Ygeilj''@;'; put 'put ''b250aW51ZTtUKFoseil9KE0uc2hhbXx8eiYmei5zaGFtKSYmbyhaLCJzaGFtIiwhMCksSShOLEgsWixNKX19fSw1NTU5Mih0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9ZnVuY3Rpb24oail7dHJ5e3JldHVybiEhaigpfWNhdGNoe3JldHVybiEwfX19LDQwMjIwKHRlLGosZCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBTPWQoNzUxNTcpLGg9RnVuY3Rpb24ucHJvdG90eXBlLG89aC5hcHBseSxJPWguY2FsbDt0ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KFM/SS5iaW5kKG8pOmZ1bmN0aW9uKCl7cmV0dXJuIEkuYXBwbHkobyxhcmd1bWVudHMp''@;'; put 'put ''fSl9LDc4ODExKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzYyOSksaD1kKDMxNDgzKSxvPWQoNzUxNTcpLEk9UyhTLmJpbmQpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oZixUKXtyZXR1cm4gaChmKSx2b2lkIDA9PT1UP2Y6bz9JKGYsVCk6ZnVuY3Rpb24oKXtyZXR1cm4gZi5hcHBseShU''@;'; put 'put ''LGFyZ3VtZW50cyl9fX0sNzUxNTcodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg1NTU5Mik7dGUuZXhwb3J0cz0hUyhmdW5jdGlvbigpe3ZhciBoPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGh8fGguaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIp''@;'; put 'put ''fSl9LDQ2OTI2KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNzUxNTcpLGg9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dGUuZXhwb3J0cz1TP2guYmluZChoKTpmdW5jdGlvbigpe3JldHVybiBoLmFwcGx5KGgsYXJndW1lbnRzKX19LDg5OTgxKHRlLGosZCl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBTPWQoNDYzODcpLGg9ZCgzOGUzKSxvPUZ1bmN0aW9uLnByb3RvdHlwZSxJPVMmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZj1oKG8sIm5hbWUiKSxUPWYmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsQT1mJiYoIVN8fFMmJkkobywibmFtZSIpLmNvbmZpZ3Vy''@;'; put 'put ''YWJsZSk7dGUuZXhwb3J0cz17RVhJU1RTOmYsUFJPUEVSOlQsQ09ORklHVVJBQkxFOkF9fSw2OTIyNyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPWQoMzE0ODMpO3RlLmV4cG9ydHM9ZnVuY3Rpb24obyxJLGYpe3RyeXtyZXR1cm4gUyhoKE9iamVjdC5nZXRPd25Qcm9w''@;'; put 'put ''ZXJ0eURlc2NyaXB0b3IobyxJKVtmXSkpfWNhdGNoe319fSwzNjI5KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODY2NzUpLGg9ZCg1ODYwNyk7dGUuZXhwb3J0cz1mdW5jdGlvbihvKXtpZigiRnVuY3Rpb24iPT09UyhvKSlyZXR1cm4gaChvKX19LDU4NjA3KHRlLGosZCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBTPWQoNzUxNTcpLGg9RnVuY3Rpb24ucHJvdG90eXBlLG89aC5jYWxsLEk9UyYmaC5iaW5kLmJpbmQobyxvKTt0ZS5leHBvcnRzPVM/STpmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gby5hcHBseShmLGFyZ3VtZW50cyl9fX0sNjY1MDModGUsaixkKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIFM9ZCgzMzk2Myk7dGUuZXhwb3J0cz1mdW5jdGlvbihoLG8pe3ZhciBJPVNbaF0sZj1JJiZJLnByb3RvdHlwZTtyZXR1cm4gZiYmZltvXX19LDEyMjAyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzM5NjMpLGg9ZCgxOTE1MCk7dGUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihJLGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZnVuY3Rpb24oSSl7cmV0dXJuIGgoSSk/STp2b2lkIDB9KFNbSV0pOlNbSV0mJlNbSV1bZl19fSw3NTQyNCh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9ZnVuY3Rpb24oail7cmV0dXJue2l0ZXJhdG9yOmosbmV4dDpqLm5l''@;'; put 'put ''eHQsZG9uZTohMX19fSw2MzYyNyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ2OTI2KSxoPWQoMTEwOCksbz1kKDc1NDI0KSxJPWQoMzY5MzIpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oZixUKXsoIVR8fCJzdHJpbmciIT10eXBlb2YgZikmJmgoZik7dmFyIEE9SShmKTtyZXR1cm4gbyho''@;'; put 'put ''KHZvaWQgMCE9PUE/UyhBLGYpOmYpKX19LDM2OTMyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNzE4MjQpLGg9ZCg4NjExNSksbz1kKDk0NDY4KSxJPWQoMTkyNTgpLFQ9ZCg1ODAxMikoIml0ZXJhdG9yIik7dGUuZXhwb3J0cz1mdW5jdGlvbihBKXtpZighbyhBKSlyZXR1cm4gaChB''@;'; put 'put ''LFQpfHxoKEEsIkBAaXRlcmF0b3IiKXx8SVtTKEEpXX19LDQzNTg0KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDY5MjYpLGg9ZCgzMTQ4Myksbz1kKDExMDgpLEk9ZCg3NTIxMiksZj1kKDM2OTMyKSxUPVR5cGVFcnJvcjt0ZS5leHBvcnRzPWZ1bmN0aW9uKEEsTSl7dmFyIE89YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwyP2YoQSk6TTtpZihoKE8pKXJldHVybiBvKFMoTyxBKSk7dGhyb3cgbmV3IFQoSShBKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sODYxMTUodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzMTQ4MyksaD1kKDk0NDY4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8sSSl7''@;'; put 'put ''dmFyIGY9b1tJXTtyZXR1cm4gaChmKT92b2lkIDA6UyhmKX19LDQzNjMyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzE0ODMpLGg9ZCgxMTA4KSxvPWQoNDY5MjYpLEk9ZCg2NDU1MCksZj1kKDc1NDI0KSxUPSJJbnZhbGlkIHNpemUiLEE9UmFuZ2VFcnJvcixNPVR5cGVFcnJvcixP''@;'; put 'put ''PU1hdGgubWF4LEQ9ZnVuY3Rpb24oRSxCKXt0aGlzLnNldD1FLHRoaXMuc2l6ZT1PKEIsMCksdGhpcy5oYXM9UyhFLmhhcyksdGhpcy5rZXlzPVMoRS5rZXlzKX07RC5wcm90b3R5cGU9e2dldEl0ZXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIGYoaChvKHRoaXMua2V5cyx0aGlzLnNldCkpKX0s''@;'; put 'put ''aW5jbHVkZXM6ZnVuY3Rpb24oRSl7cmV0dXJuIG8odGhpcy5oYXMsdGhpcy5zZXQsRSl9fSx0ZS5leHBvcnRzPWZ1bmN0aW9uKEUpe2goRSk7dmFyIEI9K0Uuc2l6ZTtpZihCIT1CKXRocm93IG5ldyBNKFQpO3ZhciBGPUkoQik7aWYoRjwwKXRocm93IG5ldyBBKFQpO3JldHVybiBuZXcgRChF''@;'; put 'put ''LEYpfX0sOTYzMzkodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg1ODYwNyksaD1kKDMxOTUwKSxvPU1hdGguZmxvb3IsST1TKCIiLmNoYXJBdCksZj1TKCIiLnJlcGxhY2UpLFQ9UygiIi5zbGljZSksQT0vXCQoWyQmJ2BdfFxkezEsMn18PFtePl0qPikvZyxNPS9cJChbJCYnYF18XGR7''@;'; put 'put ''MSwyfSkvZzt0ZS5leHBvcnRzPWZ1bmN0aW9uKE8sRCxFLEIsRixOKXt2YXIgSD1FK08ubGVuZ3RoLHo9Qi5sZW5ndGgsWj1NO3JldHVybiB2b2lkIDAhPT1GJiYoRj1oKEYpLFo9QSksZihOLFosZnVuY3Rpb24oVSxLKXt2YXIgWDtzd2l0Y2goSShLLDApKXtjYXNlIiQiOnJldHVybiIkIjtj''@;'; put 'put ''YXNlIiYiOnJldHVybiBPO2Nhc2UiYCI6cmV0dXJuIFQoRCwwLEUpO2Nhc2UiJyI6cmV0dXJuIFQoRCxIKTtjYXNlIjwiOlg9RltUKEssMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIG5lPStLO2lmKDA9PT1uZSlyZXR1cm4gVTtpZihuZT56KXt2YXIgc2U9byhuZS8xMCk7cmV0dXJuIDA9PT1z''@;'; put 'put ''ZT9VOnNlPD16P3ZvaWQgMD09PUJbc2UtMV0/SShLLDEpOkJbc2UtMV0rSShLLDEpOlV9WD1CW25lLTFdfXJldHVybiB2b2lkIDA9PT1YPyIiOlh9KX19LDMzOTYzKHRlKXsidXNlIHN0cmljdCI7dmFyIGo9ZnVuY3Rpb24oZCl7cmV0dXJuIGQmJmQuTWF0aD09PU1hdGgmJmR9O3RlLmV4cG9y''@;'; put 'put ''dHM9aigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxqKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxqKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGooIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fGooIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiB0aGlzJiZ0aGlzKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sMzhlMyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPWQoMzE5NTApLG89Uyh7fS5oYXNPd25Qcm9wZXJ0eSk7dGUuZXhwb3J0cz1PYmplY3Qu''@;'; put 'put ''aGFzT3dufHxmdW5jdGlvbihmLFQpe3JldHVybiBvKGgoZiksVCl9fSwzNDY3MCh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9e319LDg3MzcyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMTIyMDIpO3RlLmV4cG9ydHM9UygiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0s''@;'; put 'put ''NTcyNDQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0NjM4NyksaD1kKDU1NTkyKSxvPWQoNTU5ODgpO3RlLmV4cG9ydHM9IVMmJiFoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkobygiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319''@;'; put 'put ''KS5hfSl9LDU1OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPWQoNTU1OTIpLG89ZCg4NjY3NSksST1PYmplY3QsZj1TKCIiLnNwbGl0KTt0ZS5leHBvcnRzPWgoZnVuY3Rpb24oKXtyZXR1cm4hSSgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSk/ZnVuY3Rpb24o''@;'; put 'put ''VCl7cmV0dXJuIlN0cmluZyI9PT1vKFQpP2YoVCwiIik6SShUKX06SX0sMTcyOTYodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgxOTE1MCksaD1kKDMyNjMzKSxvPWQoMjE2MTIpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oSSxmLFQpe3ZhciBBLE07cmV0dXJuIG8mJlMoQT1mLmNvbnN0cnVj''@;'; put 'put ''dG9yKSYmQSE9PVQmJmgoTT1BLnByb3RvdHlwZSkmJk0hPT1ULnByb3RvdHlwZSYmbyhJLE0pLEl9fSwyNjkzMSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPWQoMTkxNTApLG89ZCg0ODM1NiksST1TKEZ1bmN0aW9uLnRvU3RyaW5nKTtoKG8uaW5zcGVjdFNvdXJjZSl8''@;'; put 'put ''fChvLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZil7cmV0dXJuIEkoZil9KSx0ZS5leHBvcnRzPW8uaW5zcGVjdFNvdXJjZX0sNjQ4NTUodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzMjYzMyksaD1kKDM2Njc4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8sSSl7UyhJKSYmImNhdXNlImlu''@;'; put 'put ''IEkmJmgobywiY2F1c2UiLEkuY2F1c2UpfX0sNDczNih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgQixGLE4sUz1kKDQ4NjkxKSxoPWQoMzM5NjMpLG89ZCgzMjYzMyksST1kKDM2Njc4KSxmPWQoMzhlMyksVD1kKDQ4MzU2KSxBPWQoNzk2NjIpLE09ZCgzNDY3MCksTz0iT2JqZWN0IGFscmVh''@;'; put 'put ''ZHkgaW5pdGlhbGl6ZWQiLEQ9aC5UeXBlRXJyb3I7aWYoU3x8VC5zdGF0ZSl7dmFyIFo9VC5zdGF0ZXx8KFQuc3RhdGU9bmV3KDAsaC5XZWFrTWFwKSk7Wi5nZXQ9Wi5nZXQsWi5oYXM9Wi5oYXMsWi5zZXQ9Wi5zZXQsQj1mdW5jdGlvbihLLFgpe2lmKFouaGFzKEspKXRocm93IG5ldyBEKE8p''@;'; put 'put ''O3JldHVybiBYLmZhY2FkZT1LLFouc2V0KEssWCksWH0sRj1mdW5jdGlvbihLKXtyZXR1cm4gWi5nZXQoSyl8fHt9fSxOPWZ1bmN0aW9uKEspe3JldHVybiBaLmhhcyhLKX19ZWxzZXt2YXIgVT1BKCJzdGF0ZSIpO01bVV09ITAsQj1mdW5jdGlvbihLLFgpe2lmKGYoSyxVKSl0aHJvdyBuZXcg''@;'; put 'put ''RChPKTtyZXR1cm4gWC5mYWNhZGU9SyxJKEssVSxYKSxYfSxGPWZ1bmN0aW9uKEspe3JldHVybiBmKEssVSk/S1tVXTp7fX0sTj1mdW5jdGlvbihLKXtyZXR1cm4gZihLLFUpfX10ZS5leHBvcnRzPXtzZXQ6QixnZXQ6RixoYXM6TixlbmZvcmNlOmZ1bmN0aW9uKEspe3JldHVybiBOKEspP0Yo''@;'; put 'put ''Syk6QihLLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKEspe3JldHVybiBmdW5jdGlvbihYKXt2YXIgbmU7aWYoIW8oWCl8fChuZT1GKFgpKS50eXBlIT09Syl0aHJvdyBuZXcgRCgiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK0srIiByZXF1aXJlZCIpO3JldHVybiBuZX19fX0sNjY3OTIodGUs''@;'; put 'put ''aixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg1ODAxMiksaD1kKDE5MjU4KSxvPVMoIml0ZXJhdG9yIiksST1BcnJheS5wcm90b3R5cGU7dGUuZXhwb3J0cz1mdW5jdGlvbihmKXtyZXR1cm4gdm9pZCAwIT09ZiYmKGguQXJyYXk9PT1mfHxJW29dPT09Zil9fSw2NzI3Nyh0ZSxqLGQpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgUz1kKDg2Njc1KTt0ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKG8pe3JldHVybiJBcnJheSI9PT1TKG8pfX0sMTkxNTAodGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGw7dGUuZXhwb3J0cz10''@;'; put 'put ''eXBlb2Ygaj4idSImJnZvaWQgMCE9PWo/ZnVuY3Rpb24oZCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGR8fGQ9PT1qfTpmdW5jdGlvbihkKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZH19LDE2MzYzKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTU1OTIpLGg9ZCgxOTE1MCks''@;'; put 'put ''bz0vI3xcLnByb3RvdHlwZVwuLyxJPWZ1bmN0aW9uKE8sRCl7dmFyIEU9VFtmKE8pXTtyZXR1cm4gRT09PU18fEUhPT1BJiYoaChEKT9TKEQpOiEhRCl9LGY9SS5ub3JtYWxpemU9ZnVuY3Rpb24oTyl7cmV0dXJuIFN0cmluZyhPKS5yZXBsYWNlKG8sIi4iKS50b0xvd2VyQ2FzZSgpfSxUPUku''@;'; put 'put ''ZGF0YT17fSxBPUkuTkFUSVZFPSJOIixNPUkuUE9MWUZJTEw9IlAiO3RlLmV4cG9ydHM9SX0sOTQ0NjgodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPWZ1bmN0aW9uKGope3JldHVybiBudWxsPT1qfX0sMzI2MzModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgxOTE1MCk7dGUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihoKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGg/bnVsbCE9PWg6UyhoKX19LDQzNDA2KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzI2MzMpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oaCl7cmV0dXJuIFMoaCl8fG51bGw9PT1ofX0sODg3ODgodGUpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt0ZS5leHBvcnRzPSExfSw2MDM5Nyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDMyNjMzKSxoPWQoNDczNikuZ2V0O3RlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7aWYoIVMoSSkpcmV0dXJuITE7dmFyIGY9aChJKTtyZXR1cm4hIWYmJiJSYXdKU09OIj09PWYudHlwZX19LDg4ODY3''@;'; put 'put ''KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzI2MzMpLGg9ZCg4NjY3NSksST1kKDU4MDEyKSgibWF0Y2giKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGYpe3ZhciBUO3JldHVybiBTKGYpJiYodm9pZCAwIT09KFQ9ZltJXSk/ISFUOiJSZWdFeHAiPT09aChmKSl9fSw5Mjk5OCh0ZSxqLGQp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDEyMjAyKSxoPWQoMTkxNTApLG89ZCg0NjgpLEk9ZCg2Njk5NSksZj1PYmplY3Q7dGUuZXhwb3J0cz1JP2Z1bmN0aW9uKFQpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgVH06ZnVuY3Rpb24oVCl7dmFyIEE9UygiU3ltYm9sIik7cmV0dXJuIGgoQSkmJm8o''@;'; put 'put ''QS5wcm90b3R5cGUsZihUKSl9fSwxMTM4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDY5MjYpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oaCxvLEkpe2Zvcih2YXIgQSxNLGY9ST9oOmguaXRlcmF0b3IsVD1oLm5leHQ7IShBPVMoVCxmKSkuZG9uZTspaWYodm9pZCAwIT09KE09byhBLnZh''@;'; put 'put ''bHVlKSkpcmV0dXJuIE19fSwzMDc4Nyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDc4ODExKSxoPWQoNDY5MjYpLG89ZCgxMTA4KSxJPWQoNzUyMTIpLGY9ZCg2Njc5MiksVD1kKDcxNzEpLEE9ZCg0NjgpLE09ZCg0MzU4NCksTz1kKDM2OTMyKSxEPWQoNjY1NDIpLEU9VHlwZUVycm9y''@;'; put 'put ''LEI9ZnVuY3Rpb24oTixIKXt0aGlzLnN0b3BwZWQ9Tix0aGlzLnJlc3VsdD1IfSxGPUIucHJvdG90eXBlO3RlLmV4cG9ydHM9ZnVuY3Rpb24oTixILHope3ZhciBoZSxfZSxtZSxGZSxSLHMsdSxVPSEoIXp8fCF6LkFTX0VOVFJJRVMpLEs9ISghenx8IXouSVNfUkVDT1JEKSxYPSEoIXp8fCF6''@;'; put 'put ''LklTX0lURVJBVE9SKSxuZT0hKCF6fHwhei5JTlRFUlJVUFRFRCksc2U9UyhILHomJnoudGhhdCksdj1mdW5jdGlvbihrKXt2YXIgTD1oZTtyZXR1cm4gaGU9dm9pZCAwLEwmJkQoTCwibm9ybWFsIiksbmV3IEIoITAsayl9LHA9ZnVuY3Rpb24oayl7cmV0dXJuIFU/KG8oayksbmU/c2Uoa1sw''@;'; put 'put ''XSxrWzFdLHYpOnNlKGtbMF0sa1sxXSkpOm5lP3NlKGssdik6c2Uoayl9O2lmKEspaGU9Ti5pdGVyYXRvcjtlbHNlIGlmKFgpaGU9TjtlbHNle2lmKCEoX2U9TyhOKSkpdGhyb3cgbmV3IEUoSShOKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKGYoX2UpKXtmb3IobWU9MCxGZT1UKE4pO0ZlPm1l''@;'; put 'put ''O21lKyspaWYoKFI9cChOW21lXSkpJiZBKEYsUikpcmV0dXJuIFI7cmV0dXJuIG5ldyBCKCExKX1oZT1NKE4sX2UpfWZvcihzPUs/Ti5uZXh0OmhlLm5leHQ7ISh1PWgocyxoZSkpLmRvbmU7KXt2YXIgXz11LnZhbHVlO3RyeXtSPXAoXyl9Y2F0Y2goayl7aWYoIWhlKXRocm93IGs7RChoZSwi''@;'; put 'put ''dGhyb3ciLGspfWlmKCJvYmplY3QiPT10eXBlb2YgUiYmUiYmQShGLFIpKXJldHVybiBSfXJldHVybiBuZXcgQighMSl9fSw2MDEyOCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDY2NTQyKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGgsbyxJKXtmb3IodmFyIGY9aC5sZW5ndGgtMTtmPj0w''@;'; put 'put ''O2YtLSlpZih2b2lkIDAhPT1oW2ZdKXRyeXtJPVMoaFtmXS5pdGVyYXRvcixvLEkpfWNhdGNoKFQpe289InRocm93IixJPVR9aWYoInRocm93Ij09PW8pdGhyb3cgSTtyZXR1cm4gSX19LDY2NTQyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDY5MjYpLGg9ZCgxMTA4KSxvPWQoODYx''@;'; put 'put ''MTUpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oSSxmLFQpe3ZhciBBLE07aChJKTt0cnl7aWYoIShBPW8oSSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09Zil0aHJvdyBUO3JldHVybiBUfUE9UyhBLEkpfWNhdGNoKE8pe009ITAsQT1PfWlmKCJ0aHJvdyI9PT1mKXRocm93IFQ7aWYoTSl0aHJvdyBB''@;'; put 'put ''O3JldHVybiBoKEEpLFR9fSw2OTkxNyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ2OTI2KSxoPWQoOTc5NTEpLG89ZCgzNjY3OCksST1kKDE0NzUwKSxmPWQoNTgwMTIpLFQ9ZCg0NzM2KSxBPWQoODYxMTUpLE09ZCg3ODk2OCkuSXRlcmF0b3JQcm90b3R5cGUsTz1kKDU4OTc4KSxE''@;'; put 'put ''PWQoNjY1NDIpLEU9ZCg2MDEyOCksQj1mKCJ0b1N0cmluZ1RhZyIpLEY9Ikl0ZXJhdG9ySGVscGVyIixOPSJXcmFwRm9yVmFsaWRJdGVyYXRvciIsSD0ibm9ybWFsIix6PSJ0aHJvdyIsWj1ULnNldCxVPWZ1bmN0aW9uKG5lKXt2YXIgc2U9VC5nZXR0ZXJGb3IobmU/TjpGKTtyZXR1cm4gSSho''@;'; put 'put ''KE0pLHtuZXh0OmZ1bmN0aW9uKCl7dmFyIF9lPXNlKHRoaXMpO2lmKG5lKXJldHVybiBfZS5uZXh0SGFuZGxlcigpO2lmKF9lLmRvbmUpcmV0dXJuIE8odm9pZCAwLCEwKTt0cnl7dmFyIG1lPV9lLm5leHRIYW5kbGVyKCk7cmV0dXJuIF9lLnJldHVybkhhbmRsZXJSZXN1bHQ/bWU6TyhtZSxf''@;'; put 'put ''ZS5kb25lKX1jYXRjaChGZSl7dGhyb3cgX2UuZG9uZT0hMCxGZX19LHJldHVybjpmdW5jdGlvbigpe3ZhciBoZT1zZSh0aGlzKSxfZT1oZS5pdGVyYXRvcixtZT1oZS5kb25lO2lmKGhlLmRvbmU9ITAsbmUpe3ZhciBGZT1BKF9lLCJyZXR1cm4iKTtyZXR1cm4gRmU/UyhGZSxfZSk6Tyh2b2lk''@;'; put 'put ''IDAsITApfWlmKG1lKXJldHVybiBPKHZvaWQgMCwhMCk7aWYoaGUuaW5uZXIpdHJ5e0QoaGUuaW5uZXIuaXRlcmF0b3IsSCl9Y2F0Y2goUil7cmV0dXJuIEQoX2UseixSKX1pZihoZS5vcGVuSXRlcnMpdHJ5e0UoaGUub3Blbkl0ZXJzLEgpfWNhdGNoKFIpe2lmKF9lKXJldHVybiBEKF9lLHos''@;'; put 'put ''Uik7dGhyb3cgUn1yZXR1cm4gX2UmJkQoX2UsSCksTyh2b2lkIDAsITApfX0pfSxLPVUoITApLFg9VSghMSk7byhYLEIsIkl0ZXJhdG9yIEhlbHBlciIpLHRlLmV4cG9ydHM9ZnVuY3Rpb24obmUsc2UsaGUpe3ZhciBfZT1mdW5jdGlvbihGZSxSKXtSPyhSLml0ZXJhdG9yPUZlLml0ZXJhdG9y''@;'; put 'put ''LFIubmV4dD1GZS5uZXh0KTpSPUZlLFIudHlwZT1zZT9OOkYsUi5yZXR1cm5IYW5kbGVyUmVzdWx0PSEhaGUsUi5uZXh0SGFuZGxlcj1uZSxSLmNvdW50ZXI9MCxSLmRvbmU9ITEsWih0aGlzLFIpfTtyZXR1cm4gX2UucHJvdG90eXBlPXNlP0s6WCxfZX19LDU2NzQ1KHRlKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dGUuZXhwb3J0cz1mdW5jdGlvbihqLGQpe3ZhciBTPSJmdW5jdGlvbiI9PXR5cGVvZiBJdGVyYXRvciYmSXRlcmF0b3IucHJvdG90eXBlW2pdO2lmKFMpdHJ5e1MuY2FsbCh7bmV4dDpudWxsfSxkKS5uZXh0KCl9Y2F0Y2h7cmV0dXJuITB9fX0sNDEyNTIodGUsaixkKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIFM9ZCgzMzk2Myk7dGUuZXhwb3J0cz1mdW5jdGlvbihoLG8pe3ZhciBJPVMuSXRlcmF0b3IsZj1JJiZJLnByb3RvdHlwZSxUPWYmJmZbaF0sQT0hMTtpZihUKXRyeXtULmNhbGwoe25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19LHJldHVybjpmdW5jdGlvbigpe0E9ITB9''@;'; put 'put ''fSwtMSl9Y2F0Y2goTSl7TSBpbnN0YW5jZW9mIG98fChBPSExKX1pZighQSlyZXR1cm4gVH19LDc4OTY4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBFLEIsRixTPWQoNTU1OTIpLGg9ZCgxOTE1MCksbz1kKDMyNjMzKSxJPWQoOTc5NTEpLGY9ZCgyNjQwMCksVD1kKDMxMDgzKSxBPWQoNTgw''@;'; put 'put ''MTIpLE09ZCg4ODc4OCksTz1BKCJpdGVyYXRvciIpLEQ9ITE7W10ua2V5cyYmKCJuZXh0ImluKEY9W10ua2V5cygpKT8oQj1mKGYoRikpKSE9PU9iamVjdC5wcm90b3R5cGUmJihFPUIpOkQ9ITApLCFvKEUpfHxTKGZ1bmN0aW9uKCl7dmFyIEg9e307cmV0dXJuIEVbT10uY2FsbChIKSE9PUh9''@;'; put 'put ''KT9FPXt9Ok0mJihFPUkoRSkpLGgoRVtPXSl8fFQoRSxPLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZS5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpFLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6RH19LDE5MjU4KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz17fX0sNzE3MSh0ZSxq''@;'; put 'put ''LGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk0MjM3KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGgpe3JldHVybiBTKGgubGVuZ3RoKX19LDE2OTgwKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNTg2MDcpLGg9ZCg1NTU5Miksbz1kKDE5MTUwKSxJPWQoMzhlMyksZj1kKDQ2Mzg3KSxUPWQo''@;'; put 'put ''ODk5ODEpLkNPTkZJR1VSQUJMRSxBPWQoMjY5MzEpLE09ZCg0NzM2KSxPPU0uZW5mb3JjZSxEPU0uZ2V0LEU9U3RyaW5nLEI9T2JqZWN0LmRlZmluZVByb3BlcnR5LEY9UygiIi5zbGljZSksTj1TKCIiLnJlcGxhY2UpLEg9UyhbXS5qb2luKSx6PWYmJiFoKGZ1bmN0aW9uKCl7cmV0dXJuIDgh''@;'; put 'put ''PT1CKGZ1bmN0aW9uKCl7fSwibGVuZ3RoIix7dmFsdWU6OH0pLmxlbmd0aH0pLFo9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLFU9dGUuZXhwb3J0cz1mdW5jdGlvbihLLFgsbmUpeyJTeW1ib2woIj09PUYoRShYKSwwLDcpJiYoWD0iWyIrTihFKFgpLC9eU3ltYm9sXCgoW14pXSop''@;'; put 'put ''XCkuKiQvLCIkMSIpKyJdIiksbmUmJm5lLmdldHRlciYmKFg9ImdldCAiK1gpLG5lJiZuZS5zZXR0ZXImJihYPSJzZXQgIitYKSwoIUkoSywibmFtZSIpfHxUJiZLLm5hbWUhPT1YKSYmKGY/QihLLCJuYW1lIix7dmFsdWU6WCxjb25maWd1cmFibGU6ITB9KTpLLm5hbWU9WCkseiYmbmUmJkko''@;'; put 'put ''bmUsImFyaXR5IikmJksubGVuZ3RoIT09bmUuYXJpdHkmJkIoSywibGVuZ3RoIix7dmFsdWU6bmUuYXJpdHl9KTt0cnl7bmUmJkkobmUsImNvbnN0cnVjdG9yIikmJm5lLmNvbnN0cnVjdG9yP2YmJkIoSywicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTpLLnByb3RvdHlwZSYmKEsucHJvdG90''@;'; put 'put ''eXBlPXZvaWQgMCl9Y2F0Y2h7fXZhciBzZT1PKEspO3JldHVybiBJKHNlLCJzb3VyY2UiKXx8KHNlLnNvdXJjZT1IKFosInN0cmluZyI9PXR5cGVvZiBYP1g6IiIpKSxLfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9VShmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpJiZEKHRoaXMpLnNv''@;'; put 'put ''dXJjZXx8QSh0aGlzKX0sInRvU3RyaW5nIil9LDE4NTU2KHRlKXsidXNlIHN0cmljdCI7dmFyIGo9TWF0aC5jZWlsLGQ9TWF0aC5mbG9vcjt0ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGgpe3ZhciBvPStoO3JldHVybihvPjA/ZDpqKShvKX19LDg4MjQ0KHRlLGosZCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBTPWQoNTU1OTIpO3RlLmV4cG9ydHM9IVMoZnVuY3Rpb24oKXt2YXIgaD0iOTAwNzE5OTI1NDc0MDk5MyIsbz1KU09OLnJhd0pTT04oaCk7cmV0dXJuIUpTT04uaXNSYXdKU09OKG8pfHxKU09OLnN0cmluZ2lmeShvKSE9PWh9KX0sMzkxMTYodGUsaixkKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIFM9ZCg2ODMzMik7dGUuZXhwb3J0cz1mdW5jdGlvbihoLG8pe3JldHVybiB2b2lkIDA9PT1oP2FyZ3VtZW50cy5sZW5ndGg8Mj8iIjpvOlMoaCl9fSw5Nzk1MSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgWixTPWQoMTEwOCksaD1kKDcxMTY4KSxvPWQoNTg1NDApLEk9ZCgzNDY3''@;'; put 'put ''MCksZj1kKDg3MzcyKSxUPWQoNTU5ODgpLEE9ZCg3OTY2MiksRD0icHJvdG90eXBlIixFPSJzY3JpcHQiLEI9QSgiSUVfUFJPVE8iKSxGPWZ1bmN0aW9uKCl7fSxOPWZ1bmN0aW9uKEspe3JldHVybiI8IitFKyI+IitLKyI8LyIrRSsiPiJ9LEg9ZnVuY3Rpb24oSyl7Sy53cml0ZShOKCIiKSks''@;'; put 'put ''Sy5jbG9zZSgpO3ZhciBYPUsucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gSz1udWxsLFh9LFU9ZnVuY3Rpb24oKXt0cnl7Wj1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaHt9VT10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmRvbWFpbiYmWj9IKFopOmZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIG5lLEs9VCgiaWZyYW1lIiksWD0iamF2YSIrRSsiOiI7cmV0dXJuIEsuc3R5bGUuZGlzcGxheT0ibm9uZSIsZi5hcHBlbmRDaGlsZChLKSxLLnNyYz1TdHJpbmcoWCksKG5lPUsuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLG5lLndyaXRlKE4oImRvY3VtZW50LkY9T2Jq''@;'; put 'put ''ZWN0IikpLG5lLmNsb3NlKCksbmUuRn0oKTpIKFopO2Zvcih2YXIgSz1vLmxlbmd0aDtLLS07KWRlbGV0ZSBVW0RdW29bS11dO3JldHVybiBVKCl9O0lbQl09ITAsdGUuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihYLG5lKXt2YXIgc2U7cmV0dXJuIG51bGwhPT1YPyhGW0RdPVMo''@;'; put 'put ''WCksc2U9bmV3IEYsRltEXT1udWxsLHNlW0JdPVgpOnNlPVUoKSx2b2lkIDA9PT1uZT9zZTpoLmYoc2UsbmUpfX0sNzExNjgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0NjM4NyksaD1kKDI2OTI5KSxvPWQoNDQ2NDgpLEk9ZCgxMTA4KSxmPWQoOTMxNjIpLFQ9ZCgxMDE0Myk7ai5m''@;'; put 'put ''PVMmJiFoP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKE0sTyl7SShNKTtmb3IodmFyIE4sRD1mKE8pLEU9VChPKSxCPUUubGVuZ3RoLEY9MDtCPkY7KW8uZihNLE49RVtGKytdLERbTl0pO3JldHVybiBNfX0sNDQ2NDgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0NjM4''@;'; put 'put ''NyksaD1kKDU3MjQ0KSxvPWQoMjY5MjkpLEk9ZCgxMTA4KSxmPWQoNTk0MTApLFQ9VHlwZUVycm9yLEE9T2JqZWN0LmRlZmluZVByb3BlcnR5LE09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixPPSJlbnVtZXJhYmxlIixEPSJjb25maWd1cmFibGUiLEU9IndyaXRhYmxlIjtqLmY9''@;'; put 'put ''Uz9vP2Z1bmN0aW9uKEYsTixIKXtpZihJKEYpLE49ZihOKSxJKEgpLCJmdW5jdGlvbiI9PXR5cGVvZiBGJiYicHJvdG90eXBlIj09PU4mJiJ2YWx1ZSJpbiBIJiZFIGluIEgmJiFIW0VdKXt2YXIgej1NKEYsTik7eiYmeltFXSYmKEZbTl09SC52YWx1ZSxIPXtjb25maWd1cmFibGU6RCBpbiBI''@;'; put 'put ''P0hbRF06eltEXSxlbnVtZXJhYmxlOk8gaW4gSD9IW09dOnpbT10sd3JpdGFibGU6ITF9KX1yZXR1cm4gQShGLE4sSCl9OkE6ZnVuY3Rpb24oRixOLEgpe2lmKEkoRiksTj1mKE4pLEkoSCksaCl0cnl7cmV0dXJuIEEoRixOLEgpfWNhdGNoe31pZigiZ2V0ImluIEh8fCJzZXQiaW4gSCl0aHJv''@;'; put 'put ''dyBuZXcgVCgiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gSCYmKEZbTl09SC52YWx1ZSksRn19LDU0MTIyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDYzODcpLGg9ZCg0NjkyNiksbz1kKDM5NjIpLEk9ZCg3Nzc3MyksZj1kKDkzMTYyKSxUPWQoNTk0''@;'; put 'put ''MTApLEE9ZCgzOGUzKSxNPWQoNTcyNDQpLE89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtqLmY9Uz9POmZ1bmN0aW9uKEUsQil7aWYoRT1mKEUpLEI9VChCKSxNKXRyeXtyZXR1cm4gTyhFLEIpfWNhdGNoe31pZihBKEUsQikpcmV0dXJuIEkoIWgoby5mLEUsQiksRVtCXSl9fSwz''@;'; put 'put ''NjE0Myh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDIzMzEzKSxvPWQoNTg1NDApLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ai5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihmKXtyZXR1cm4gUyhmLG8pfX0sMjgwNzAodGUsail7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2ouZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwyNjQwMCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM4ZTMpLGg9ZCgxOTE1MCksbz1kKDMxOTUwKSxJPWQoNzk2NjIpLGY9ZCg4MjgzNCksVD1JKCJJRV9QUk9UTyIpLEE9T2JqZWN0LE09QS5wcm90b3R5cGU7dGUuZXhw''@;'; put 'put ''b3J0cz1mP0EuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oTyl7dmFyIEQ9byhPKTtpZihTKEQsVCkpcmV0dXJuIERbVF07dmFyIEU9RC5jb25zdHJ1Y3RvcjtyZXR1cm4gaChFKSYmRCBpbnN0YW5jZW9mIEU/RS5wcm90b3R5cGU6RCBpbnN0YW5jZW9mIEE/TTpudWxsfX0sNDY4KHRlLGosZCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBTPWQoNTg2MDcpO3RlLmV4cG9ydHM9Uyh7fS5pc1Byb3RvdHlwZU9mKX0sMjMzMTModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg1ODYwNyksaD1kKDM4ZTMpLG89ZCg5MzE2MiksST1kKDc0ODI0KS5pbmRleE9mLGY9ZCgzNDY3MCksVD1TKFtdLnB1c2gp''@;'; put 'put ''O3RlLmV4cG9ydHM9ZnVuY3Rpb24oQSxNKXt2YXIgQixPPW8oQSksRD0wLEU9W107Zm9yKEIgaW4gTykhaChmLEIpJiZoKE8sQikmJlQoRSxCKTtmb3IoO00ubGVuZ3RoPkQ7KWgoTyxCPU1bRCsrXSkmJih+SShFLEIpfHxUKEUsQikpO3JldHVybiBFfX0sMTAxNDModGUsaixkKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIFM9ZCgyMzMxMyksaD1kKDU4NTQwKTt0ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihJKXtyZXR1cm4gUyhJLGgpfX0sMzk2Mih0ZSxqKXsidXNlIHN0cmljdCI7dmFyIGQ9e30ucHJvcGVydHlJc0VudW1lcmFibGUsUz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj''@;'; put 'put ''cmlwdG9yLGg9UyYmIWQuY2FsbCh7MToyfSwxKTtqLmY9aD9mdW5jdGlvbihJKXt2YXIgZj1TKHRoaXMsSSk7cmV0dXJuISFmJiZmLmVudW1lcmFibGV9OmR9LDIxNjEyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNjkyMjcpLGg9ZCgzMjYzMyksbz1kKDg4Mjc1KSxJPWQoMjc2Nyk7''@;'; put 'put ''dGUuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgQSxmPSExLFQ9e307dHJ5eyhBPVMoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiwic2V0IikpKFQsW10pLGY9VCBpbnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oTyxEKXtyZXR1cm4gbyhPKSxJKEQpLGgoTykmJihmP0EoTyxEKTpPLl9fcHJvdG9fXz1EKSxPfX0oKTp2b2lkIDApfSw5Mzg2NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ2OTI2KSxoPWQoMTkxNTApLG89ZCgzMjYzMyksST1UeXBlRXJyb3I7dGUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihmLFQpe3ZhciBBLE07aWYoInN0cmluZyI9PT1UJiZoKEE9Zi50b1N0cmluZykmJiFvKE09UyhBLGYpKXx8aChBPWYudmFsdWVPZikmJiFvKE09UyhBLGYpKXx8InN0cmluZyIhPT1UJiZoKEE9Zi50b1N0cmluZykmJiFvKE09UyhBLGYpKSlyZXR1cm4gTTt0aHJvdyBuZXcgSSgi''@;'; put 'put ''Q2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw4ODA3OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDEyMjAyKSxoPWQoNTg2MDcpLG89ZCgzNjE0MyksST1kKDI4MDcwKSxmPWQoMTEwOCksVD1oKFtdLmNvbmNhdCk7dGUuZXhwb3J0cz1TKCJSZWZsZWN0''@;'; put 'put ''Iiwib3duS2V5cyIpfHxmdW5jdGlvbihNKXt2YXIgTz1vLmYoZihNKSksRD1JLmY7cmV0dXJuIEQ/VChPLEQoTSkpOk99fSw5NjY0Nyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPWQoMzhlMyksbz1TeW50YXhFcnJvcixJPXBhcnNlSW50LGY9U3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZSxUPVMoIiIuY2hhckF0KSxBPVMoIiIuc2xpY2UpLE09UygvLi8uZXhlYyksTz17J1xcIic6JyInLCJcXFxcIjoiXFwiLCJcXC8iOiIvIiwiXFxiIjoiXGIiLCJcXGYiOiJcZiIsIlxcbiI6IlxuIiwiXFxyIjoiXHIiLCJcXHQiOiJcdCJ9LEQ9L15bXGRhLWZdezR9JC9pLEU9L15bXHUw''@;'; put 'put ''MDAwLVx1MDAxRl0kLzt0ZS5leHBvcnRzPWZ1bmN0aW9uKEIsRil7Zm9yKHZhciBOPSEwLEg9IiI7RjxCLmxlbmd0aDspe3ZhciB6PVQoQixGKTtpZigiXFwiPT09eil7dmFyIFo9QShCLEYsRisyKTtpZihoKE8sWikpSCs9T1taXSxGKz0yO2Vsc2V7aWYoIlxcdSIhPT1aKXRocm93IG5ldyBv''@;'; put 'put ''KCdVbmtub3duIGVzY2FwZSBzZXF1ZW5jZTogIicrWisnIicpO3ZhciBVPUEoQixGKz0yLEYrNCk7aWYoIU0oRCxVKSl0aHJvdyBuZXcgbygiQmFkIFVuaWNvZGUgZXNjYXBlIGF0OiAiK0YpO0grPWYoSShVLDE2KSksRis9NH19ZWxzZXtpZignIic9PT16KXtOPSExLEYrKzticmVha31pZihN''@;'; put 'put ''KEUseikpdGhyb3cgbmV3IG8oIkJhZCBjb250cm9sIGNoYXJhY3RlciBpbiBzdHJpbmcgbGl0ZXJhbCBhdDogIitGKTtIKz16LEYrK319aWYoTil0aHJvdyBuZXcgbygiVW50ZXJtaW5hdGVkIHN0cmluZyBhdDogIitGKTtyZXR1cm57dmFsdWU6SCxlbmQ6Rn19fSw2MDMyMSh0ZSxqLGQpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ0NjQ4KS5mO3RlLmV4cG9ydHM9ZnVuY3Rpb24oaCxvLEkpe0kgaW4gaHx8UyhoLEkse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb1tJXX0sc2V0OmZ1bmN0aW9uKGYpe29bSV09Zn19KX19LDc4NzI3KHRlLGosZCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBTPWQoMzM5NjMpLGg9ZCg1NTU5Miksbz1TLlJlZ0V4cCxJPSFoKGZ1bmN0aW9uKCl7dmFyIGY9ITA7dHJ5e28oIi4iLCJkIil9Y2F0Y2h7Zj0hMX12YXIgVD17fSxBPSIiLE09Zj8iZGdpbXN5IjoiZ2ltc3kiLE89ZnVuY3Rpb24oRixOKXtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''VCxGLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQSs9TiwhMH19KX0sRD17ZG90QWxsOiJzIixnbG9iYWw6ImciLGlnbm9yZUNhc2U6ImkiLG11bHRpbGluZToibSIsc3RpY2t5OiJ5In07Zm9yKHZhciBFIGluIGYmJihELmhhc0luZGljZXM9ImQiKSxEKU8oRSxEW0VdKTtyZXR1cm4gT2JqZWN0''@;'; put 'put ''LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLnByb3RvdHlwZSwiZmxhZ3MiKS5nZXQuY2FsbChUKSE9PU18fEEhPT1NfSk7dGUuZXhwb3J0cz17Y29ycmVjdDpJfX0sMjI3NTQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgxMTA4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGg9''@;'; put 'put ''Uyh0aGlzKSxvPSIiO3JldHVybiBoLmhhc0luZGljZXMmJihvKz0iZCIpLGguZ2xvYmFsJiYobys9ImciKSxoLmlnbm9yZUNhc2UmJihvKz0iaSIpLGgubXVsdGlsaW5lJiYobys9Im0iKSxoLmRvdEFsbCYmKG8rPSJzIiksaC51bmljb2RlJiYobys9InUiKSxoLnVuaWNvZGVTZXRzJiYobys9''@;'; put 'put ''InYiKSxoLnN0aWNreSYmKG8rPSJ5Iiksb319LDM3MDc1KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoNDY5MjYpLGg9ZCgzOGUzKSxvPWQoNDY4KSxJPWQoNzg3MjcpLGY9ZCgyMjc1NCksVD1SZWdFeHAucHJvdG90eXBlO3RlLmV4cG9ydHM9SS5jb3JyZWN0P2Z1bmN0aW9uKEEpe3Jl''@;'; put 'put ''dHVybiBBLmZsYWdzfTpmdW5jdGlvbihBKXtyZXR1cm4gSS5jb3JyZWN0fHwhbyhULEEpfHxoKEEsImZsYWdzIik/QS5mbGFnczpTKGYsQSl9fSw4ODI3NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDk0NDY4KSxoPVR5cGVFcnJvcjt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8pe2lmKFMo''@;'; put 'put ''bykpdGhyb3cgbmV3IGgoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrbyk7cmV0dXJuIG99fSw0MzI0OSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgRCxTPWQoMzM5NjMpLGg9ZCg0MDIyMCksbz1kKDE5MTUwKSxJPWQoNDcwOTIpLGY9ZCgyMzU4KSxUPWQoNzc2MzkpLEE9ZCgyNzk2NyksTT1T''@;'; put 'put ''LkZ1bmN0aW9uLE89L01TSUUgLlwuLy50ZXN0KGYpfHwiQlVOIj09PUkmJigoRD1TLkJ1bi52ZXJzaW9uLnNwbGl0KCIuIikpLmxlbmd0aDwzfHwiMCI9PT1EWzBdJiYoRFsxXTwzfHwiMyI9PT1EWzFdJiYiMCI9PT1EWzJdKSk7dGUuZXhwb3J0cz1mdW5jdGlvbihELEUpe3ZhciBCPUU/Mjox''@;'; put 'put ''O3JldHVybiBPP2Z1bmN0aW9uKEYsTil7dmFyIEg9QShhcmd1bWVudHMubGVuZ3RoLDEpPkIsej1vKEYpP0Y6TShGKSxaPUg/VChhcmd1bWVudHMsQik6W10sVT1IP2Z1bmN0aW9uKCl7aCh6LHRoaXMsWil9Ono7cmV0dXJuIEU/RChVLE4pOkQoVSl9OkR9fSwxNDQ1KHRlLGosZCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBTPWQoOTc1NDEpLGg9ZCgyMTkxMCksbz1TLlNldCxJPVMuYWRkO3RlLmV4cG9ydHM9ZnVuY3Rpb24oZil7dmFyIFQ9bmV3IG87cmV0dXJuIGgoZixmdW5jdGlvbihBKXtJKFQsQSl9KSxUfX0sODAyMTModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzNzczMSksaD1k''@;'; put 'put ''KDk3NTQxKSxvPWQoMTQ0NSksST1kKDMwMzM5KSxmPWQoNDM2MzIpLFQ9ZCgyMTkxMCksQT1kKDExMzgpLE09aC5oYXMsTz1oLnJlbW92ZTt0ZS5leHBvcnRzPWZ1bmN0aW9uKEUpe3ZhciBCPVModGhpcyksRj1mKEUpLE49byhCKTtyZXR1cm4gSShOKTw9Ri5zaXplP1QoTixmdW5jdGlvbihI''@;'; put 'put ''KXtGLmluY2x1ZGVzKEgpJiZPKE4sSCl9KTpBKEYuZ2V0SXRlcmF0b3IoKSxmdW5jdGlvbihIKXtNKE4sSCkmJk8oTixIKX0pLE59fSw5NzU0MSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPVNldC5wcm90b3R5cGU7dGUuZXhwb3J0cz17U2V0LGFkZDpTKGguYWRkKSxo''@;'; put 'put ''YXM6UyhoLmhhcykscmVtb3ZlOlMoaC5kZWxldGUpLHByb3RvOmh9fSw2MTg3OSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM3NzMxKSxoPWQoOTc1NDEpLG89ZCgzMDMzOSksST1kKDQzNjMyKSxmPWQoMjE5MTApLFQ9ZCgxMTM4KSxBPWguU2V0LE09aC5hZGQsTz1oLmhhczt0ZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKEUpe3ZhciBCPVModGhpcyksRj1JKEUpLE49bmV3IEE7cmV0dXJuIG8oQik+Ri5zaXplP1QoRi5nZXRJdGVyYXRvcigpLGZ1bmN0aW9uKEgpe08oQixIKSYmTShOLEgpfSk6ZihCLGZ1bmN0aW9uKEgpe0YuaW5jbHVkZXMoSCkmJk0oTixIKX0pLE59fSw3MzYyNCh0''@;'; put 'put ''ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDM3NzMxKSxoPWQoOTc1NDEpLmhhcyxvPWQoMzAzMzkpLEk9ZCg0MzYzMiksZj1kKDIxOTEwKSxUPWQoMTEzOCksQT1kKDY2NTQyKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3ZhciBEPVModGhpcyksRT1JKE8pO2lmKG8oRCk8PUUuc2l6ZSly''@;'; put 'put ''ZXR1cm4hMSE9PWYoRCxmdW5jdGlvbihGKXtpZihFLmluY2x1ZGVzKEYpKXJldHVybiExfSwhMCk7dmFyIEI9RS5nZXRJdGVyYXRvcigpO3JldHVybiExIT09VChCLGZ1bmN0aW9uKEYpe2lmKGgoRCxGKSlyZXR1cm4gQShCLml0ZXJhdG9yLCJub3JtYWwiLCExKX0pfX0sNzQ4MzkodGUsaixk''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzNzczMSksaD1kKDMwMzM5KSxvPWQoMjE5MTApLEk9ZCg0MzYzMik7dGUuZXhwb3J0cz1mdW5jdGlvbihUKXt2YXIgQT1TKHRoaXMpLE09SShUKTtyZXR1cm4hKGgoQSk+TS5zaXplKSYmITEhPT1vKEEsZnVuY3Rpb24oTyl7aWYoIU0uaW5jbHVkZXMo''@;'; put 'put ''TykpcmV0dXJuITF9LCEwKX19LDk2MDYyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzc3MzEpLGg9ZCg5NzU0MSkuaGFzLG89ZCgzMDMzOSksST1kKDQzNjMyKSxmPWQoMTEzOCksVD1kKDY2NTQyKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKE0pe3ZhciBPPVModGhpcyksRD1JKE0pO2lm''@;'; put 'put ''KG8oTyk8RC5zaXplKXJldHVybiExO3ZhciBFPUQuZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PWYoRSxmdW5jdGlvbihCKXtpZighaChPLEIpKXJldHVybiBUKEUuaXRlcmF0b3IsIm5vcm1hbCIsITEpfSl9fSwyMTkxMCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU4NjA3KSxoPWQo''@;'; put 'put ''MTEzOCksbz1kKDk3NTQxKSxJPW8uU2V0LGY9by5wcm90byxUPVMoZi5mb3JFYWNoKSxBPVMoZi5rZXlzKSxNPUEobmV3IEkpLm5leHQ7dGUuZXhwb3J0cz1mdW5jdGlvbihPLEQsRSl7cmV0dXJuIEU/aCh7aXRlcmF0b3I6QShPKSxuZXh0Ok19LEQpOlQoTyxEKX19LDUzNTA1KHRlLGosZCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBTPWQoMTIyMDIpLGg9ZnVuY3Rpb24oSSl7cmV0dXJue3NpemU6SSxoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sa2V5czpmdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9fX19fX0sbz1mdW5jdGlvbihJKXtyZXR1cm57c2l6''@;'; put 'put ''ZTpJLGhhczpmdW5jdGlvbigpe3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJlIil9fX07dGUuZXhwb3J0cz1mdW5jdGlvbihJLGYpe3ZhciBUPVMoIlNldCIpO3RyeXsobmV3IFQpW0ldKGgoMCkpO3RyeXtyZXR1cm4obmV3IFQpW0ldKGgoLTEpKSwhMX1jYXRj''@;'; put 'put ''aHtpZighZilyZXR1cm4hMDt0cnl7cmV0dXJuKG5ldyBUKVtJXShvKC0xLzApKSwhMX1jYXRjaHtyZXR1cm4gZihuZXcgVChbMSwyXSlbSV0obygxLzApKSl9fX1jYXRjaHtyZXR1cm4hMX19fSw0NjM2Mih0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9ZnVuY3Rpb24oail7dHJ5e3ZhciBk''@;'; put 'put ''PW5ldyBTZXQsUz17c2l6ZTowLGhhczpmdW5jdGlvbigpe3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibmV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkLmNsZWFyKCksZC5hZGQoNCksZnVuY3Rpb24oKXtyZXR1cm57ZG9uZToh''@;'; put 'put ''MH19fX0pfX0saD1kW2pdKFMpO3JldHVybiAxPT09aC5zaXplJiY0PT09aC52YWx1ZXMoKS5uZXh0KCkudmFsdWV9Y2F0Y2h7cmV0dXJuITF9fX0sMzAzMzkodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg2OTIyNyksaD1kKDk3NTQxKTt0ZS5leHBvcnRzPVMoaC5wcm90bywic2l6ZSIs''@;'; put 'put ''ImdldCIpfHxmdW5jdGlvbihvKXtyZXR1cm4gby5zaXplfX0sODUwMzkodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzNzczMSksaD1kKDk3NTQxKSxvPWQoMTQ0NSksST1kKDQzNjMyKSxmPWQoMTEzOCksVD1oLmFkZCxBPWguaGFzLE09aC5yZW1vdmU7dGUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihEKXt2YXIgRT1TKHRoaXMpLEI9SShEKS5nZXRJdGVyYXRvcigpLEY9byhFKTtyZXR1cm4gZihCLGZ1bmN0aW9uKE4pe0EoRSxOKT9NKEYsTik6VChGLE4pfSksRn19LDIwNTA3KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzc3MzEpLGg9ZCg5NzU0MSkuYWRkLG89ZCgxNDQ1KSxJ''@;'; put 'put ''PWQoNDM2MzIpLGY9ZCgxMTM4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKEEpe3ZhciBNPVModGhpcyksTz1JKEEpLmdldEl0ZXJhdG9yKCksRD1vKE0pO3JldHVybiBmKE8sZnVuY3Rpb24oRSl7aChELEUpfSksRH19LDc5NjYyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODc0ODQpLGg9''@;'; put 'put ''ZCg2Mzk1MSksbz1TKCJrZXlzIik7dGUuZXhwb3J0cz1mdW5jdGlvbihJKXtyZXR1cm4gb1tJXXx8KG9bSV09aChJKSl9fSw0ODM1Nih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDg4Nzg4KSxoPWQoMzM5NjMpLG89ZCg0ODEwNCksST0iX19jb3JlLWpzX3NoYXJlZF9fIixmPXRlLmV4''@;'; put 'put ''cG9ydHM9aFtJXXx8byhJLHt9KTsoZi52ZXJzaW9uc3x8KGYudmVyc2lvbnM9W10pKS5wdXNoKHt2ZXJzaW9uOiIzLjQ5LjAiLG1vZGU6Uz8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiJceGE5IDIwMTNcdTIwMTMyMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpLCAyMDI1XHUy''@;'; put 'put ''MDEzMjAyNiBDb3JlSlMgQ29tcGFueSAoY29yZS1qcy5pbykuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQ5LjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29y''@;'; put 'put ''ZS1qcyJ9KX0sODc0ODQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg0ODM1Nik7dGUuZXhwb3J0cz1mdW5jdGlvbihoLG8pe3JldHVybiBTW2hdfHwoU1toXT1vfHx7fSl9fSwzNjUwNih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ0MDY2KSxoPWQoNTU1OTIpLEk9ZCgzMzk2''@;'; put 'put ''MykuU3RyaW5nO3RlLmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhaChmdW5jdGlvbigpe3ZhciBmPVN5bWJvbCgic3ltYm9sIGRldGVjdGlvbiIpO3JldHVybiFJKGYpfHwhKE9iamVjdChmKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZTJiZTPDQx''@;'; put 'put ''fSl9LDc1OTYodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIGhlLF9lLG1lLEZlLFM9ZCgzMzk2MyksaD1kKDQwMjIwKSxvPWQoNzg4MTEpLEk9ZCgxOTE1MCksZj1kKDM4ZTMpLFQ9ZCg1NTU5MiksQT1kKDg3MzcyKSxNPWQoNzc2MzkpLE89ZCg1NTk4OCksRD1kKDI3OTY3KSxFPWQoNDQxMzcp''@;'; put 'put ''LEI9ZCgyMTUxMCksRj1TLnNldEltbWVkaWF0ZSxOPVMuY2xlYXJJbW1lZGlhdGUsSD1TLnByb2Nlc3Msej1TLkRpc3BhdGNoLFo9Uy5GdW5jdGlvbixVPVMuTWVzc2FnZUNoYW5uZWwsSz1TLlN0cmluZyxYPTAsbmU9e30sc2U9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7VChmdW5jdGlvbigpe2hl''@;'; put 'put ''PVMubG9jYXRpb259KTt2YXIgUj1mdW5jdGlvbihwKXtpZihmKG5lLHApKXt2YXIgXz1uZVtwXTtkZWxldGUgbmVbcF0sXygpfX0scz1mdW5jdGlvbihwKXtyZXR1cm4gZnVuY3Rpb24oKXtSKHApfX0sdT1mdW5jdGlvbihwKXtSKHAuZGF0YSl9LHY9ZnVuY3Rpb24ocCl7Uy5wb3N0TWVzc2Fn''@;'; put 'put ''ZShLKHApLGhlLnByb3RvY29sKyIvLyIraGUuaG9zdCl9OyghRnx8IU4pJiYoRj1mdW5jdGlvbihfKXtEKGFyZ3VtZW50cy5sZW5ndGgsMSk7dmFyIGs9SShfKT9fOlooXyksTD1NKGFyZ3VtZW50cywxKTtyZXR1cm4gbmVbKytYXT1mdW5jdGlvbigpe2goayx2b2lkIDAsTCl9LF9lKFgpLFh9''@;'; put 'put ''LE49ZnVuY3Rpb24oXyl7ZGVsZXRlIG5lW19dfSxCP19lPWZ1bmN0aW9uKHApe0gubmV4dFRpY2socyhwKSl9OnomJnoubm93P19lPWZ1bmN0aW9uKHApe3oubm93KHMocCkpfTpVJiYhRT8oRmU9KG1lPW5ldyBVKS5wb3J0MixtZS5wb3J0MS5vbm1lc3NhZ2U9dSxfZT1vKEZlLnBvc3RNZXNz''@;'; put 'put ''YWdlLEZlKSk6Uy5hZGRFdmVudExpc3RlbmVyJiZJKFMucG9zdE1lc3NhZ2UpJiYhUy5pbXBvcnRTY3JpcHRzJiZoZSYmImZpbGU6IiE9PWhlLnByb3RvY29sJiYhVCh2KT8oX2U9dixTLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHUsITEpKTpfZT1zZSBpbiBPKCJzY3JpcHQiKT9mdW5j''@;'; put 'put ''dGlvbihwKXtBLmFwcGVuZENoaWxkKE8oInNjcmlwdCIpKVtzZV09ZnVuY3Rpb24oKXtBLnJlbW92ZUNoaWxkKHRoaXMpLFIocCl9fTpmdW5jdGlvbihwKXtzZXRUaW1lb3V0KHMocCksMCl9KSx0ZS5leHBvcnRzPXtzZXQ6RixjbGVhcjpOfX0sNzQ4NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgUz1kKDY0NTUwKSxoPU1hdGgubWF4LG89TWF0aC5taW47dGUuZXhwb3J0cz1mdW5jdGlvbihJLGYpe3ZhciBUPVMoSSk7cmV0dXJuIFQ8MD9oKFQrZiwwKTpvKFQsZil9fSw5MzE2Mih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDU1OCksaD1kKDg4Mjc1KTt0ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKG8pe3JldHVybiBTKGgobykpfX0sNjQ1NTAodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgxODU1Nik7dGUuZXhwb3J0cz1mdW5jdGlvbihoKXt2YXIgbz0raDtyZXR1cm4gbyE9b3x8MD09PW8/MDpTKG8pfX0sOTQyMzcodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg2''@;'; put 'put ''NDU1MCksaD1NYXRoLm1pbjt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciBJPVMobyk7cmV0dXJuIEk+MD9oKEksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDMxOTUwKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoODgyNzUpLGg9T2JqZWN0O3RlLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0''@;'; put 'put ''dXJuIGgoUyhvKSl9fSw4NTY1Nih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDQ2OTI2KSxoPWQoMzI2MzMpLG89ZCg5Mjk5OCksST1kKDg2MTE1KSxmPWQoOTM4NjUpLFQ9ZCg1ODAxMiksQT1UeXBlRXJyb3IsTT1UKCJ0b1ByaW1pdGl2ZSIpO3RlLmV4cG9ydHM9ZnVuY3Rpb24oTyxE''@;'; put 'put ''KXtpZighaChPKXx8byhPKSlyZXR1cm4gTzt2YXIgQixFPUkoTyxNKTtpZihFKXtpZih2b2lkIDA9PT1EJiYoRD0iZGVmYXVsdCIpLEI9UyhFLE8sRCksIWgoQil8fG8oQikpcmV0dXJuIEI7dGhyb3cgbmV3IEEoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJl''@;'; put 'put ''dHVybiB2b2lkIDA9PT1EJiYoRD0ibnVtYmVyIiksZihPLEQpfX0sNTk0MTAodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg4NTY1NiksaD1kKDkyOTk4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciBJPVMobywic3RyaW5nIik7cmV0dXJuIGgoSSk/STpJKyIifX0sMzg1OTUodGUs''@;'; put 'put ''aixkKXsidXNlIHN0cmljdCI7dmFyIG89e307b1tkKDU4MDEyKSgidG9TdHJpbmdUYWciKV09InoiLHRlLmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKG8pfSw2ODMzMih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDcxODI0KSxoPVN0cmluZzt0ZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KG8pe2lmKCJTeW1ib2wiPT09UyhvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyIpO3JldHVybiBoKG8pfX0sNzUyMTIodGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1TdHJpbmc7dGUuZXhwb3J0cz1mdW5jdGlvbihkKXt0cnl7''@;'; put 'put ''cmV0dXJuIGooZCl9Y2F0Y2h7cmV0dXJuIk9iamVjdCJ9fX0sNjM5NTEodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCg1ODYwNyksaD0wLG89TWF0aC5yYW5kb20oKSxJPVMoMS4xLnRvU3RyaW5nKTt0ZS5leHBvcnRzPWZ1bmN0aW9uKGYpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09''@;'; put 'put ''Zj8iIjpmKSsiKV8iK0koKytoK28sMzYpfX0sNjY5OTUodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgzNjUwNik7dGUuZXhwb3J0cz1TJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwyNjkyOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1k''@;'; put 'put ''KDQ2Mzg3KSxoPWQoNTU1OTIpO3RlLmV4cG9ydHM9UyYmaChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe30sInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSl9LDI3OTY3KHRlKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIGo9VHlwZUVycm9yO3RlLmV4cG9ydHM9ZnVuY3Rpb24oZCxTKXtpZihkPFMpdGhyb3cgbmV3IGooIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGR9fSw0ODY5MSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDMzOTYzKSxoPWQoMTkxNTApLG89Uy5XZWFrTWFwO3RlLmV4''@;'; put 'put ''cG9ydHM9aChvKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhvKSl9LDU4MDEyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMzM5NjMpLGg9ZCg4NzQ4NCksbz1kKDM4ZTMpLEk9ZCg2Mzk1MSksZj1kKDM2NTA2KSxUPWQoNjY5OTUpLEE9Uy5TeW1ib2wsTT1oKCJ3a3MiKSxPPVQ/''@;'; put 'put ''QS5mb3J8fEE6QSYmQS53aXRob3V0U2V0dGVyfHxJO3RlLmV4cG9ydHM9ZnVuY3Rpb24oRCl7cmV0dXJuIG8oTSxEKXx8KE1bRF09ZiYmbyhBLEQpP0FbRF06TygiU3ltYm9sLiIrRCkpLE1bRF19fSwzMjkzMCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDEyMjAyKSxoPWQoMzhlMyks''@;'; put 'put ''bz1kKDM2Njc4KSxJPWQoNDY4KSxmPWQoMjE2MTIpLFQ9ZCg0ODYzOSksQT1kKDYwMzIxKSxNPWQoMTcyOTYpLE89ZCgzOTExNiksRD1kKDY0ODU1KSxFPWQoMjIzMDQpLEI9ZCg0NjM4NyksRj1kKDg4Nzg4KTt0ZS5leHBvcnRzPWZ1bmN0aW9uKE4sSCx6LFope3ZhciBVPSJzdGFja1RyYWNl''@;'; put 'put ''TGltaXQiLEs9Wj8yOjEsWD1OLnNwbGl0KCIuIiksbmU9WFtYLmxlbmd0aC0xXSxzZT1TLmFwcGx5KG51bGwsWCk7aWYoc2Upe3ZhciBoZT1zZS5wcm90b3R5cGU7aWYoIUYmJmgoaGUsImNhdXNlIikmJmRlbGV0ZSBoZS5jYXVzZSwheilyZXR1cm4gc2U7dmFyIF9lPVMoIkVycm9yIiksbWU9''@;'; put 'put ''SChmdW5jdGlvbihGZSxSKXt2YXIgcz1PKFo/UjpGZSx2b2lkIDApLHU9Wj9uZXcgc2UoRmUpOm5ldyBzZTtyZXR1cm4gdm9pZCAwIT09cyYmbyh1LCJtZXNzYWdlIixzKSxFKHUsbWUsdS5zdGFjaywyKSx0aGlzJiZJKGhlLHRoaXMpJiZNKHUsdGhpcyxtZSksYXJndW1lbnRzLmxlbmd0aD5L''@;'; put 'put ''JiZEKHUsYXJndW1lbnRzW0tdKSx1fSk7aWYobWUucHJvdG90eXBlPWhlLCJFcnJvciIhPT1uZT9mP2YobWUsX2UpOlQobWUsX2Use25hbWU6ITB9KTpCJiZVIGluIHNlJiYoQShtZSxzZSxVKSxBKG1lLHNlLCJwcmVwYXJlU3RhY2tUcmFjZSIpKSxUKG1lLHNlKSwhRil0cnl7aGUubmFtZSE9''@;'; put 'put ''PW5lJiZvKGhlLCJuYW1lIixuZSksaGUuY29uc3RydWN0b3I9bWV9Y2F0Y2h7fXJldHVybiBtZX19fSwzOTA5Mih0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI4MzY3KSxoPWQoMzE5NTApLG89ZCg3MTcxKSxJPWQoNjQ1NTApLGY9ZCg3MDgyNCk7Uyh7dGFyZ2V0OiJBcnJheSIscHJv''@;'; put 'put ''dG86ITB9LHthdDpmdW5jdGlvbihBKXt2YXIgTT1oKHRoaXMpLE89byhNKSxEPUkoQSksRT1EPj0wP0Q6TytEO3JldHVybiBFPDB8fEU+PU8/dm9pZCAwOk1bRV19fSksZigiYXQiKX0sNzc1MjUodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDMxOTUwKSxvPWQoNzE3''@;'; put 'put ''MSksST1kKDM5MjA2KSxmPWQoMzMxNik7Uyh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6ZCg1NTU5MikoZnVuY3Rpb24oKXtyZXR1cm4gNDI5NDk2NzI5NyE9PVtdLnB1c2guY2FsbCh7bGVuZ3RoOjQyOTQ5NjcyOTZ9LDEpfSl8fCFmdW5jdGlvbigpe3RyeXtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKEQpe3JldHVybiBEIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3B1c2g6ZnVuY3Rpb24oRSl7dmFyIEI9aCh0aGlzKSxGPW8oQiksTj1hcmd1bWVudHMubGVuZ3RoO2YoRitOKTtmb3Io''@;'; put 'put ''dmFyIEg9MDtIPE47SCsrKUJbRl09YXJndW1lbnRzW0hdLEYrKztyZXR1cm4gSShCLEYpLEZ9fSl9LDIzMDEyKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCg1ODYwNyksbz1kKDMxNDgzKSxJPWQoOTMxNjIpLGY9ZCgzODgxKSxUPWQoNjY1MDMpLEE9ZCg3MDgyNCks''@;'; put 'put ''TT1BcnJheSxPPWgoVCgiQXJyYXkiLCJzb3J0IikpO1Moe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7dG9Tb3J0ZWQ6ZnVuY3Rpb24oRSl7dm9pZCAwIT09RSYmbyhFKTt2YXIgQj1JKHRoaXMpLEY9ZihNLEIpO3JldHVybiBPKEYsRSl9fSksQSgidG9Tb3J0ZWQiKX0sNjgxNDYodGUsaixk''@;'; put 'put ''KXsidXNlIHN0cmljdCI7ZCg3MDgyNCkoImZsYXRNYXAiKX0sOTM5MDkodGUsaixkKXsidXNlIHN0cmljdCI7ZCg3MDgyNCkoImZsYXQiKX0sMjk3NjAodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDMxOTUwKSxvPWQoNzE3MSksST1kKDM5MjA2KSxmPWQoNDMxOTUp''@;'; put 'put ''LFQ9ZCgzMzE2KTtTKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDoxIT09W10udW5zaGlmdCgwKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS51bnNoaWZ0KCl9Y2F0Y2goRCl7cmV0dXJuIEQg''@;'; put 'put ''aW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7dW5zaGlmdDpmdW5jdGlvbihFKXt2YXIgQj1oKHRoaXMpLEY9byhCKSxOPWFyZ3VtZW50cy5sZW5ndGg7aWYoTil7VChGK04pO2Zvcih2YXIgSD1GO0gtLTspe3ZhciB6PUgrTjtIIGluIEI/Qlt6XT1CW0hdOmYoQix6KX1mb3IodmFyIFo9MDta''@;'; put 'put ''PE47WisrKUJbWl09YXJndW1lbnRzW1pdfXJldHVybiBJKEIsRitOKX19KX0sNDk1MzcodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDMzOTYzKSxvPWQoNDAyMjApLEk9ZCgzMjkzMCksZj0iV2ViQXNzZW1ibHkiLFQ9aFtmXSxBPTchPT1uZXcgRXJyb3IoImUiLHtj''@;'; put 'put ''YXVzZTo3fSkuY2F1c2UsTT1mdW5jdGlvbihELEUpe3ZhciBCPXt9O0JbRF09SShELEUsQSksUyh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGFyaXR5OjEsZm9yY2VkOkF9LEIpfSxPPWZ1bmN0aW9uKEQsRSl7aWYoVCYmVFtEXSl7dmFyIEI9e307QltEXT1JKGYrIi4iK0QsRSxBKSxTKHt0''@;'; put 'put ''YXJnZXQ6ZixzdGF0OiEwLGNvbnN0cnVjdG9yOiEwLGFyaXR5OjEsZm9yY2VkOkF9LEIpfX07TSgiRXJyb3IiLGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihCKXtyZXR1cm4gbyhELHRoaXMsYXJndW1lbnRzKX19KSxNKCJFdmFsRXJyb3IiLGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihCKXtyZXR1cm4gbyhELHRoaXMsYXJndW1lbnRzKX19KSxNKCJSYW5nZUVycm9yIixmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oQil7cmV0dXJuIG8oRCx0aGlzLGFyZ3VtZW50cyl9fSksTSgiUmVmZXJlbmNlRXJyb3IiLGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihCKXtyZXR1''@;'; put 'put ''cm4gbyhELHRoaXMsYXJndW1lbnRzKX19KSxNKCJTeW50YXhFcnJvciIsZnVuY3Rpb24oRCl7cmV0dXJuIGZ1bmN0aW9uKEIpe3JldHVybiBvKEQsdGhpcyxhcmd1bWVudHMpfX0pLE0oIlR5cGVFcnJvciIsZnVuY3Rpb24oRCl7cmV0dXJuIGZ1bmN0aW9uKEIpe3JldHVybiBvKEQsdGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfX0pLE0oIlVSSUVycm9yIixmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oQil7cmV0dXJuIG8oRCx0aGlzLGFyZ3VtZW50cyl9fSksTygiQ29tcGlsZUVycm9yIixmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oQil7cmV0dXJuIG8oRCx0aGlzLGFyZ3VtZW50cyl9fSks''@;'; put 'put ''TygiTGlua0Vycm9yIixmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oQil7cmV0dXJuIG8oRCx0aGlzLGFyZ3VtZW50cyl9fSksTygiUnVudGltZUVycm9yIixmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oQil7cmV0dXJuIG8oRCx0aGlzLGFyZ3VtZW50cyl9fSl9LDk2MTgwKHRlLGos''@;'; put 'put ''ZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCgzMzk2Myksbz1kKDYzMzM2KSxJPWQoMTEwOCksZj1kKDE5MTUwKSxUPWQoMjY0MDApLEE9ZCg0NDAzOSksTT1kKDU4Nzk1KSxPPWQoNTU1OTIpLEQ9ZCgzOGUzKSxFPWQoNTgwMTIpLEI9ZCg3ODk2OCkuSXRlcmF0b3JQcm90b3R5''@;'; put 'put ''cGUsRj1kKDQ2Mzg3KSxOPWQoODg3ODgpLEg9ImNvbnN0cnVjdG9yIix6PSJJdGVyYXRvciIsWj1FKCJ0b1N0cmluZ1RhZyIpLFU9VHlwZUVycm9yLEs9aFt6XSxYPU58fCFmKEspfHxLLnByb3RvdHlwZSE9PUJ8fCFPKGZ1bmN0aW9uKCl7Syh7fSl9KSxuZT1mdW5jdGlvbigpe2lmKG8odGhp''@;'; put 'put ''cyxCKSxUKHRoaXMpPT09Qil0aHJvdyBuZXcgVSgiQWJzdHJhY3QgY2xhc3MgSXRlcmF0b3Igbm90IGRpcmVjdGx5IGNvbnN0cnVjdGFibGUiKX0sc2U9ZnVuY3Rpb24oaGUsX2Upe0Y/QShCLGhlLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9lfSxzZXQ6ZnVuY3Rp''@;'; put 'put ''b24obWUpe2lmKEkodGhpcyksdGhpcz09PUIpdGhyb3cgbmV3IFUoIllvdSBjYW4ndCByZWRlZmluZSB0aGlzIHByb3BlcnR5Iik7RCh0aGlzLGhlKT90aGlzW2hlXT1tZTpNKHRoaXMsaGUsbWUpfX0pOkJbaGVdPV9lfTtEKEIsWil8fHNlKFoseiksKFh8fCFEKEIsSCl8fEJbSF09PT1PYmpl''@;'; put 'put ''Y3QpJiZzZShILG5lKSxuZS5wcm90b3R5cGU9QixTKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZm9yY2VkOlh9LHtJdGVyYXRvcjpuZX0pfSwzOTU5NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI4MzY3KSxoPWQoNDY5MjYpLG89ZCgzMDc4NyksST1kKDMxNDgzKSxmPWQoMTEw''@;'; put 'put ''OCksVD1kKDc1NDI0KSxBPWQoNjY1NDIpLE89ZCg0MTI1MikoImV2ZXJ5IixUeXBlRXJyb3IpO1Moe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOk99LHtldmVyeTpmdW5jdGlvbihFKXtmKHRoaXMpO3RyeXtJKEUpfWNhdGNoKE4pe0EodGhpcywidGhyb3ciLE4p''@;'; put 'put ''fWlmKE8pcmV0dXJuIGgoTyx0aGlzLEUpO3ZhciBCPVQodGhpcyksRj0wO3JldHVybiFvKEIsZnVuY3Rpb24oTixIKXtpZighRShOLEYrKykpcmV0dXJuIEgoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDkyNTgwKHRlLGosZCl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBTPWQoMjgzNjcpLGg9ZCg0NjkyNiksbz1kKDMxNDgzKSxJPWQoMTEwOCksZj1kKDc1NDI0KSxUPWQoNjk5MTcpLEE9ZCg0MjkyNiksTT1kKDg4Nzg4KSxPPWQoNjY1NDIpLEQ9ZCg1Njc0NSksRT1kKDQxMjUyKSxCPSFNJiYhRCgiZmlsdGVyIixmdW5jdGlvbigpe30pLEY9IU0mJiFCJiZF''@;'; put 'put ''KCJmaWx0ZXIiLFR5cGVFcnJvciksTj1NfHxCfHxGLEg9VChmdW5jdGlvbigpe2Zvcih2YXIgSyxuZSx6PXRoaXMuaXRlcmF0b3IsWj10aGlzLnByZWRpY2F0ZSxVPXRoaXMubmV4dDs7KXtpZihLPUkoaChVLHopKSx0aGlzLmRvbmU9ISFLLmRvbmUpcmV0dXJuO2lmKEEoeixaLFtuZT1LLnZh''@;'; put 'put ''bHVlLHRoaXMuY291bnRlcisrXSwhMCkpcmV0dXJuIG5lfX0pO1Moe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOk59LHtmaWx0ZXI6ZnVuY3Rpb24oWil7SSh0aGlzKTt0cnl7byhaKX1jYXRjaChVKXtPKHRoaXMsInRocm93IixVKX1yZXR1cm4gRj9oKEYsdGhp''@;'; put 'put ''cyxaKTpuZXcgSChmKHRoaXMpLHtwcmVkaWNhdGU6Wn0pfX0pfSwyNjM1Nyh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI4MzY3KSxoPWQoNDY5MjYpLG89ZCgzMDc4NyksST1kKDMxNDgzKSxmPWQoMTEwOCksVD1kKDc1NDI0KSxBPWQoNjY1NDIpLE89ZCg0MTI1MikoImZpbmQiLFR5''@;'; put 'put ''cGVFcnJvcik7Uyh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6T30se2ZpbmQ6ZnVuY3Rpb24oRSl7Zih0aGlzKTt0cnl7SShFKX1jYXRjaChOKXtBKHRoaXMsInRocm93IixOKX1pZihPKXJldHVybiBoKE8sdGhpcyxFKTt2YXIgQj1UKHRoaXMpLEY9MDtyZXR1''@;'; put 'put ''cm4gbyhCLGZ1bmN0aW9uKE4sSCl7aWYoRShOLEYrKykpcmV0dXJuIEgoTil9LHtJU19SRUNPUkQ6ITAsSU5URVJSVVBURUQ6ITB9KS5yZXN1bHR9fSl9LDM2NTc4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCg0NjkyNiksbz1kKDMxNDgzKSxJPWQoMTEwOCksZj1k''@;'; put 'put ''KDc1NDI0KSxUPWQoNjM2MjcpLEE9ZCg2OTkxNyksTT1kKDY2NTQyKSxPPWQoODg3ODgpLEQ9ZCg1Njc0NSksRT1kKDQxMjUyKSxGPSFPJiYhRCgiZmxhdE1hcCIsZnVuY3Rpb24oKXt9KSxOPSFPJiYhRiYmRSgiZmxhdE1hcCIsVHlwZUVycm9yKSxIPU98fEZ8fE58fGZ1bmN0aW9uIEIoKXt0''@;'; put 'put ''cnl7dmFyIFo9SXRlcmF0b3IucHJvdG90eXBlLmZsYXRNYXAuY2FsbChuZXcgTWFwKFtbNCw1XV0pLmVudHJpZXMoKSxmdW5jdGlvbihVKXtyZXR1cm4gVX0pO1oubmV4dCgpLFoucmV0dXJuKCl9Y2F0Y2h7cmV0dXJuITB9fSgpLHo9QShmdW5jdGlvbigpe2Zvcih2YXIgSyxYLFo9dGhpcy5p''@;'; put 'put ''dGVyYXRvcixVPXRoaXMubWFwcGVyOzspe2lmKFg9dGhpcy5pbm5lcil0cnl7aWYoIShLPUkoaChYLm5leHQsWC5pdGVyYXRvcikpKS5kb25lKXJldHVybiBLLnZhbHVlO3RoaXMuaW5uZXI9bnVsbH1jYXRjaChuZSl7TShaLCJ0aHJvdyIsbmUpfWlmKEs9SShoKHRoaXMubmV4dCxaKSksdGhp''@;'; put 'put ''cy5kb25lPSEhSy5kb25lKXJldHVybjt0cnl7dGhpcy5pbm5lcj1UKFUoSy52YWx1ZSx0aGlzLmNvdW50ZXIrKyksITEpfWNhdGNoKG5lKXtNKFosInRocm93IixuZSl9fX0pO1Moe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOkh9LHtmbGF0TWFwOmZ1bmN0aW9u''@;'; put 'put ''KFUpe0kodGhpcyk7dHJ5e28oVSl9Y2F0Y2goSyl7TSh0aGlzLCJ0aHJvdyIsSyl9cmV0dXJuIE4/aChOLHRoaXMsVSk6bmV3IHooZih0aGlzKSx7bWFwcGVyOlUsaW5uZXI6bnVsbH0pfX0pfSwzMTM1Myh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI4MzY3KSxoPWQoNDY5MjYpLG89''@;'; put 'put ''ZCgzMDc4NyksST1kKDMxNDgzKSxmPWQoMTEwOCksVD1kKDc1NDI0KSxBPWQoNjY1NDIpLE89ZCg0MTI1MikoImZvckVhY2giLFR5cGVFcnJvcik7Uyh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6T30se2ZvckVhY2g6ZnVuY3Rpb24oRSl7Zih0aGlzKTt0cnl7''@;'; put 'put ''SShFKX1jYXRjaChOKXtBKHRoaXMsInRocm93IixOKX1pZihPKXJldHVybiBoKE8sdGhpcyxFKTt2YXIgQj1UKHRoaXMpLEY9MDtvKEIsZnVuY3Rpb24oTil7RShOLEYrKyl9LHtJU19SRUNPUkQ6ITB9KX19KX0sNzEzNTQodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1k''@;'; put 'put ''KDQ2OTI2KSxvPWQoMzE0ODMpLEk9ZCgxMTA4KSxmPWQoNzU0MjQpLFQ9ZCg2OTkxNyksQT1kKDQyOTI2KSxNPWQoNjY1NDIpLE89ZCg1Njc0NSksRD1kKDQxMjUyKSxFPWQoODg3ODgpLEI9IUUmJiFPKCJtYXAiLGZ1bmN0aW9uKCl7fSksRj0hRSYmIUImJkQoIm1hcCIsVHlwZUVycm9yKSxO''@;'; put 'put ''PUV8fEJ8fEYsSD1UKGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5pdGVyYXRvcixaPUkoaCh0aGlzLm5leHQseikpO2lmKCEodGhpcy5kb25lPSEhWi5kb25lKSlyZXR1cm4gQSh6LHRoaXMubWFwcGVyLFtaLnZhbHVlLHRoaXMuY291bnRlcisrXSwhMCl9KTtTKHt0YXJnZXQ6Ikl0ZXJhdG9yIixw''@;'; put 'put ''cm90bzohMCxyZWFsOiEwLGZvcmNlZDpOfSx7bWFwOmZ1bmN0aW9uKFope0kodGhpcyk7dHJ5e28oWil9Y2F0Y2goVSl7TSh0aGlzLCJ0aHJvdyIsVSl9cmV0dXJuIEY/aChGLHRoaXMsWik6bmV3IEgoZih0aGlzKSx7bWFwcGVyOlp9KX19KX0sNTMzNDgodGUsaixkKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIFM9ZCgyODM2NyksaD1kKDMwNzg3KSxvPWQoMzE0ODMpLEk9ZCgxMTA4KSxmPWQoNzU0MjQpLFQ9ZCg2NjU0MiksQT1kKDQxMjUyKSxNPWQoNDAyMjApLE89ZCg1NTU5MiksRD1UeXBlRXJyb3IsRT1PKGZ1bmN0aW9uKCl7W10ua2V5cygpLnJlZHVjZShmdW5jdGlvbigpe30sdm9pZCAw''@;'; put 'put ''KX0pLEI9IUUmJkEoInJlZHVjZSIsRCk7Uyh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6RXx8Qn0se3JlZHVjZTpmdW5jdGlvbihOKXtJKHRoaXMpO3RyeXtvKE4pfWNhdGNoKEspe1QodGhpcywidGhyb3ciLEspfXZhciBIPWFyZ3VtZW50cy5sZW5ndGg8Mix6''@;'; put 'put ''PUg/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihCKXJldHVybiBNKEIsdGhpcyxIP1tOXTpbTix6XSk7dmFyIFo9Zih0aGlzKSxVPTA7aWYoaChaLGZ1bmN0aW9uKEspe0g/KEg9ITEsej1LKTp6PU4oeixLLFUpLFUrK30se0lTX1JFQ09SRDohMH0pLEgpdGhyb3cgbmV3IEQoIlJlZHVjZSBvZiBl''@;'; put 'put ''bXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gen19KX0sOTM3OCh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI4MzY3KSxoPWQoNDY5MjYpLG89ZCgzMDc4NyksST1kKDMxNDgzKSxmPWQoMTEwOCksVD1kKDc1NDI0KSxBPWQoNjY1NDIpLE89ZCg0MTI1''@;'; put 'put ''MikoInNvbWUiLFR5cGVFcnJvcik7Uyh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6T30se3NvbWU6ZnVuY3Rpb24oRSl7Zih0aGlzKTt0cnl7SShFKX1jYXRjaChOKXtBKHRoaXMsInRocm93IixOKX1pZihPKXJldHVybiBoKE8sdGhpcyxFKTt2YXIgQj1UKHRo''@;'; put 'put ''aXMpLEY9MDtyZXR1cm4gbyhCLGZ1bmN0aW9uKE4sSCl7aWYoRShOLEYrKykpcmV0dXJuIEgoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDk1NDkzKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCgxMjIwMiksbz1kKDQwMjIwKSxJ''@;'; put 'put ''PWQoNDY5MjYpLGY9ZCg1ODYwNyksVD1kKDU1NTkyKSxBPWQoNjcyNzcpLE09ZCgxOTE1MCksTz1kKDYwMzk3KSxEPWQoOTI5OTgpLEU9ZCg4NjY3NSksQj1kKDY4MzMyKSxGPWQoNzc2MzkpLE49ZCg5NjY0NyksSD1kKDYzOTUxKSx6PWQoMzY1MDYpLFo9ZCg4ODI0NCksVT1TdHJpbmcsSz1o''@;'; put 'put ''KCJKU09OIiwic3RyaW5naWZ5IiksWD1mKC8uLy5leGVjKSxuZT1mKCIiLmNoYXJBdCksc2U9ZigiIi5jaGFyQ29kZUF0KSxoZT1mKCIiLnJlcGxhY2UpLF9lPWYoIiIuc2xpY2UpLG1lPWYoW10ucHVzaCksRmU9ZigxLjEudG9TdHJpbmcpLFI9L1tcdUQ4MDAtXHVERkZGXS9nLHM9L15bXHVE''@;'; put 'put ''ODAwLVx1REJGRl0kLyx1PS9eW1x1REMwMC1cdURGRkZdJC8sdj1IKCkscD12Lmxlbmd0aCxfPSF6fHxUKGZ1bmN0aW9uKCl7dmFyIGI9aCgiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PUsoW2JdKXx8Int9IiE9PUsoe2E6Yn0pfHwie30iIT09SyhP''@;'; put 'put ''YmplY3QoYikpfSksaz1UKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09SygiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVhZCInIT09SygiXHVkZWFkIil9KSxMPV8/ZnVuY3Rpb24oYixxKXt2YXIgRz1GKGFyZ3VtZW50cyksUT1sKHEpO2lmKE0oUSl8fHZvaWQgMCE9PWIm''@;'; put 'put ''JiFEKGIpKXJldHVybiBHWzFdPWZ1bmN0aW9uKHBlLFBlKXtpZihNKFEpJiYoUGU9SShRLHRoaXMsVShwZSksUGUpKSwhRChQZSkpcmV0dXJuIFBlfSxvKEssbnVsbCxHKX06Syx5PWZ1bmN0aW9uKGIscSxHKXt2YXIgUT1uZShHLHEtMSkscGU9bmUoRyxxKzEpO3JldHVybiBYKHMsYikmJiFY''@;'; put 'put ''KHUscGUpfHxYKHUsYikmJiFYKHMsUSk/IlxcdSIrRmUoc2UoYiwwKSwxNik6Yn0sbD1mdW5jdGlvbihiKXtpZihNKGIpKXJldHVybiBiO2lmKEEoYikpe2Zvcih2YXIgcT1iLmxlbmd0aCxHPVtdLFE9MDtRPHE7USsrKXt2YXIgcGU9YltRXTsic3RyaW5nIj09dHlwZW9mIHBlP21lKEcscGUp''@;'; put 'put ''OigibnVtYmVyIj09dHlwZW9mIHBlfHwiTnVtYmVyIj09PUUocGUpfHwiU3RyaW5nIj09PUUocGUpKSYmbWUoRyxCKHBlKSl9dmFyIFBlPUcubGVuZ3RoLFplPSEwO3JldHVybiBmdW5jdGlvbihxZSx2ZSl7aWYoWmUpcmV0dXJuIFplPSExLHZlO2lmKEEodGhpcykpcmV0dXJuIHZlO2Zvcih2''@;'; put 'put ''YXIgdWU9MDt1ZTxQZTt1ZSsrKWlmKEdbdWVdPT09cWUpcmV0dXJuIHZlfX19O0smJlMoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpffHxrfHwhWn0se3N0cmluZ2lmeTpmdW5jdGlvbihxLEcsUSl7dmFyIHBlPWwoRyksUGU9W10sWmU9TChxLGZ1bmN0aW9uKGtlLHhl''@;'; put 'put ''KXt2YXIgTWU9TShwZSk/SShwZSx0aGlzLFUoa2UpLHhlKTp4ZTtyZXR1cm4hWiYmTyhNZSk/disobWUoUGUsTWUucmF3SlNPTiktMSk6TWV9LFEpO2lmKCJzdHJpbmciIT10eXBlb2YgWmV8fChrJiYoWmU9aGUoWmUsUix5KSksWikpcmV0dXJuIFplO2Zvcih2YXIgcWU9IiIsdmU9WmUubGVu''@;'; put 'put ''Z3RoLHVlPTA7dWU8dmU7dWUrKyl7dmFyIHplPW5lKFplLHVlKTtpZignIic9PT16ZSl7dmFyIE9lPU4oWmUsKyt1ZSkuZW5kLTEsQ2U9X2UoWmUsdWUsT2UpO3FlKz1fZShDZSwwLHApPT09dj9QZVtfZShDZSxwKV06JyInK0NlKyciJyx1ZT1PZX1lbHNlIHFlKz16ZX1yZXR1cm4gcWV9fSl9''@;'; put 'put ''LDU3NzIodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDMwNzg3KSxvPWQoNTg3OTUpO1Moe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZnJvbUVudHJpZXM6ZnVuY3Rpb24oZil7dmFyIFQ9e307cmV0dXJuIGgoZixmdW5jdGlvbihBLE0pe28oVCxBLE0pfSx7QVNf''@;'; put 'put ''RU5UUklFUzohMH0pLFR9fSl9LDY5ODc1KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCg4MDIxMyksbz1kKDU1NTkyKTtTKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWQoNTM1MDUpKCJkaWZmZXJlbmNlIixmdW5jdGlvbihBKXtyZXR1cm4g''@;'; put 'put ''MD09PUEuc2l6ZX0pfHxvKGZ1bmN0aW9uKCl7dmFyIEE9e3NpemU6MSxoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sa2V5czpmdW5jdGlvbigpe3ZhciBPPTA7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXt2YXIgRD1PKys+MTtyZXR1cm4gTS5oYXMoMSkmJk0uY2xlYXIoKSx7ZG9uZTpELHZhbHVl''@;'; put 'put ''OjJ9fX19fSxNPW5ldyBTZXQoWzEsMiwzLDRdKTtyZXR1cm4gMyE9PU0uZGlmZmVyZW5jZShBKS5zaXplfSl9LHtkaWZmZXJlbmNlOmh9KX0sMTYwOTModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDU1NTkyKSxvPWQoNjE4NzkpO1Moe3RhcmdldDoiU2V0Iixwcm90''@;'; put 'put ''bzohMCxyZWFsOiEwLGZvcmNlZDohZCg1MzUwNSkoImludGVyc2VjdGlvbiIsZnVuY3Rpb24oVCl7cmV0dXJuIDI9PT1ULnNpemUmJlQuaGFzKDEpJiZULmhhcygyKX0pfHxoKGZ1bmN0aW9uKCl7cmV0dXJuIjMsMiIhPT1TdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLDIsM10pLmludGVy''@;'; put 'put ''c2VjdGlvbihuZXcgU2V0KFszLDJdKSkpKX0pfSx7aW50ZXJzZWN0aW9uOm99KX0sOTU2MDgodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDczNjI0KTtTKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWQoNTM1MDUpKCJpc0Rpc2pvaW50RnJv''@;'; put 'put ''bSIsZnVuY3Rpb24oZil7cmV0dXJuIWZ9KX0se2lzRGlzam9pbnRGcm9tOmh9KX0sMTY0OTModGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDc0ODM5KTtTKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWQoNTM1MDUpKCJpc1N1YnNldE9mIixm''@;'; put 'put ''dW5jdGlvbihmKXtyZXR1cm4gZn0pfSx7aXNTdWJzZXRPZjpofSl9LDYxOTM0KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCg5NjA2Mik7Uyh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFkKDUzNTA1KSgiaXNTdXBlcnNldE9mIixmdW5jdGlv''@;'; put 'put ''bihmKXtyZXR1cm4hZn0pfSx7aXNTdXBlcnNldE9mOmh9KX0sMTAxMDEodGUsaixkKXsidXNlIHN0cmljdCI7dmFyIFM9ZCgyODM2NyksaD1kKDg1MDM5KSxvPWQoNDYzNjIpO1Moe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohZCg1MzUwNSkoInN5bW1ldHJpY0RpZmZl''@;'; put 'put ''cmVuY2UiKXx8IW8oInN5bW1ldHJpY0RpZmZlcmVuY2UiKX0se3N5bW1ldHJpY0RpZmZlcmVuY2U6aH0pfSwyNjg4OSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI4MzY3KSxoPWQoMjA1MDcpLG89ZCg0NjM2Mik7Uyh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2Vk''@;'; put 'put ''OiFkKDUzNTA1KSgidW5pb24iKXx8IW8oInVuaW9uIil9LHt1bmlvbjpofSl9LDE0MzYwKHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCg1ODYwNyksbz1kKDg4Mjc1KSxJPWQoNjQ1NTApLGY9ZCg2ODMzMiksVD1kKDU1NTkyKSxBPWgoIiIuY2hhckF0KTtTKHt0YXJn''@;'; put 'put ''ZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOlQoZnVuY3Rpb24oKXtyZXR1cm4iXHVkODQyIiE9PSJcdXsyMGJiN30iLmF0KC0yKX0pfSx7YXQ6ZnVuY3Rpb24oRCl7dmFyIEU9ZihvKHRoaXMpKSxCPUUubGVuZ3RoLEY9SShEKSxOPUY+PTA/RjpCK0Y7cmV0dXJuIE48MHx8Tj49Qj92b2lk''@;'; put 'put ''IDA6QShFLE4pfX0pfSwxNjIyOSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUz1kKDI4MzY3KSxoPWQoNDY5MjYpLG89ZCg1ODYwNyksST1kKDg4Mjc1KSxmPWQoMTkxNTApLFQ9ZCgzMjYzMyksQT1kKDg4ODY3KSxNPWQoNjgzMzIpLE89ZCg4NjExNSksRD1kKDM3MDc1KSxFPWQoOTYzMzkp''@;'; put 'put ''LEI9ZCg1ODAxMiksRj1kKDg4Nzg4KSxOPUIoInJlcGxhY2UiKSxIPVR5cGVFcnJvcix6PW8oIiIuaW5kZXhPZiksWj1vKCIiLnJlcGxhY2UpLFU9bygiIi5zbGljZSksSz1NYXRoLm1heDtTKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBsYWNlQWxsOmZ1bmN0aW9uKG5lLHNlKXt2''@;'; put 'put ''YXIgX2UsbWUsRmUsUixzLHUsdixwLF8sayxoZT1JKHRoaXMpLEw9MCx5PSIiO2lmKFQobmUpKXtpZigoX2U9QShuZSkpJiYobWU9TShJKEQobmUpKSksIX56KG1lLCJnIikpKXRocm93IG5ldyBIKCJgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lm''@;'; put 'put ''KEZlPU8obmUsTikpcmV0dXJuIGgoRmUsbmUsaGUsc2UpO2lmKEYmJl9lKXJldHVybiBaKE0oaGUpLG5lLHNlKX1mb3IoUj1NKGhlKSxzPU0obmUpLCh1PWYoc2UpKXx8KHNlPU0oc2UpKSxwPUsoMSx2PXMubGVuZ3RoKSxfPXooUixzKTstMSE9PV87KWs9dT9NKHNlKHMsXyxSKSk6RShzLFIs''@;'; put 'put ''XyxbXSx2b2lkIDAsc2UpLHkrPVUoUixMLF8pK2ssTD1fK3YsXz1fK3A+Ui5sZW5ndGg/LTE6eihSLHMsXytwKTtyZXR1cm4gTDxSLmxlbmd0aCYmKHkrPVUoUixMKSkseX19KX0sNDMyODcodGUsaixkKXsidXNlIHN0cmljdCI7ZCg5NjE4MCl9LDEzOTA4KHRlLGosZCl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2QoMzk1OTUpfSw2NTc0NSh0ZSxqLGQpeyJ1c2Ugc3RyaWN0IjtkKDkyNTgwKX0sODEyNjAodGUsaixkKXsidXNlIHN0cmljdCI7ZCgyNjM1Nyl9LDc0OTkodGUsaixkKXsidXNlIHN0cmljdCI7ZCgzNjU3OCl9LDI5NzA4KHRlLGosZCl7InVzZSBzdHJpY3QiO2QoMzEzNTMpfSw2NTExNyh0''@;'; put 'put ''ZSxqLGQpeyJ1c2Ugc3RyaWN0IjtkKDcxMzU0KX0sNDQyMTModGUsaixkKXsidXNlIHN0cmljdCI7ZCg1MzM0OCl9LDIwMjkxKHRlLGosZCl7InVzZSBzdHJpY3QiO2QoOTM3OCl9LDY4NzY4KHRlLGosZCl7InVzZSBzdHJpY3QiO3ZhciBTPWQoMjgzNjcpLGg9ZCgzMzk2Myksbz1kKDc1OTYp''@;'; put 'put ''LmNsZWFyO1Moe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOmguY2xlYXJJbW1lZGlhdGUhPT1vfSx7Y2xlYXJJbW1lZGlhdGU6b30pfSwxMDM2Myh0ZSxqLGQpeyJ1c2Ugc3RyaWN0IjtkKDY4NzY4KSxkKDgyMzA2KX0sODIzMDYodGUsaixkKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIFM9ZCgyODM2NyksaD1kKDMzOTYzKSxvPWQoNzU5Nikuc2V0LEk9ZCg0MzI0OSksZj1oLnNldEltbWVkaWF0ZT9JKG8sITEpOm87Uyh7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6aC5zZXRJbW1lZGlhdGUhPT1mfSx7c2V0SW1tZWRpYXRlOmZ9KX0sMzIxOSh0''@;'; put 'put ''ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJt''@;'; put 'put ''b2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwi''@;'; put 'put ''dHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9j''@;'; put 'put ''ayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVy''@;'; put 'put ''IjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJr''@;'; put 'put ''ZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgs''@;'; put 'put ''Iml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6''@;'; put 'put ''MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJt''@;'; put 'put ''b2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoi''@;'; put 'put ''T0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlw''@;'; put 'put ''ZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVh''@;'; put 'put ''bSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5''@;'; put 'put ''Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw2Mjk1MSh0ZSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3RlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNh''@;'; put 'put ''IiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIw''@;'; put 'put ''In0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQx''@;'; put 'put ''MzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWdu''@;'; put 'put ''IjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAi''@;'; put 'put ''fSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhh''@;'; put 'put ''c2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJp''@;'; put 'put ''ZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsi''@;'; put 'put ''c2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWdu''@;'; put 'put ''IjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2ln''@;'; put 'put ''biI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2ln''@;'; put 'put ''biI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5''@;'; put 'put ''cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0s''@;'; put 'put ''NjQ1ODkodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAu''@;'; put 'put ''MzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDIzMjQxKHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAy''@;'; put 'put ''NGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJw''@;'; put 'put ''cmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdl''@;'; put 'put ''YzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRj''@;'; put 'put ''NjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZi''@;'; put 'put ''NWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3''@;'; put 'put ''MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIz''@;'; put 'put ''MDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNm''@;'; put 'put ''YThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1''@;'; put 'put ''ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3''@;'; put 'put ''NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4''@;'; put 'put ''NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMx''@;'; put 'put ''ODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBj''@;'; put 'put ''N2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNk''@;'; put 'put ''YjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3''@;'; put 'put ''OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYz''@;'; put 'put ''YmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZi''@;'; put 'put ''NWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFl''@;'; put 'put ''OGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTky''@;'; put 'put ''MTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2Vk''@;'; put 'put ''MWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBm''@;'; put 'put ''ZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZm''@;'; put 'put ''NDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4''@;'; put 'put ''MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1''@;'; put 'put ''NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3''@;'; put 'put ''N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4''@;'; put 'put ''ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2''@;'; put 'put ''YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1''@;'; put 'put ''MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQx''@;'; put 'put ''NTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZl''@;'; put 'put ''Njk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUx''@;'; put 'put ''OWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFj''@;'; put 'put ''NTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJj''@;'; put 'put ''OWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThj''@;'; put 'put ''OTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJh''@;'; put 'put ''Nzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3''@;'; put 'put ''YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2''@;'; put 'put ''YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJm''@;'; put 'put ''NDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZi''@;'; put 'put ''ZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0''@;'; put 'put ''MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3''@;'; put 'put ''ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3''@;'; put 'put ''OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDE2MzYodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5l''@;'; put 'put ''eHBvcnRzPXtyRToiNi42LjEifX0sNDMyNjcodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjg3NDAiLCJcdTQzZjBcdTRjMzJcdTQ2MDNcdTQ1YTZcdTQ1NzhcdXsyNzI2N31cdTRkNzdcdTQ1YjNcdXsyN2NiMX1cdTRjZTJcdXsyN2NjNX1cdTNiOTVcdTQ3MzZc''@;'; put 'put ''dTQ3NDRcdTRjNDdcdTRjNDBcdXsyNDJiZn1cdXsyMzYxN31cdXsyNzM1Mn1cdXsyNmU4Yn1cdXsyNzBkMn1cdTRjNTdcdXsyYTM1MX1cdTQ3NGZcdTQ1ZGFcdTRjODVcdXsyN2M2Y31cdTRkMDdcdTRhYTRcdTQ2YTFcdXsyNmIyM31cdTcyMjVcdXsyNWE1NH1cdXsyMWE2M31cdXsyM2UwNn1c''@;'; put 'put ''dXsyM2Y2MX1cdTY2NGRcdTU2ZmIiXSxbIjg3NjciLCJcdTdkOTVcdTU5MWRcdXsyOGJiOX1cdTNkZjRcdTk3MzRcdXsyN2JlZn1cdTViZGJcdXsyMWQ1ZX1cdTVhYTRcdTM2MjVcdXsyOWViMH1cdTVhZDFcdTViYjdcdTVjZmNcdTY3NmVcdTg1OTNcdXsyOTk0NX1cdTc0NjFcdTc0OWRcdTM4''@;'; put 'put ''NzVcdXsyMWQ1M31cdXsyMzY5ZX1cdXsyNjAyMX1cdTNlZWMiXSxbIjg3YTEiLCJcdXsyNThkZX1cdTNhZjVcdTdhZmNcdTlmOTdcdXsyNDE2MX1cdXsyODkwZH1cdXsyMzFlYX1cdXsyMGE4YX1cdXsyMzI1ZX1cdTQzMGFcdTg0ODRcdTlmOTZcdTk0MmZcdTQ5MzBcdTg2MTNcdTU4OTZcdTk3''@;'; put 'put ''NGFcdTkyMThcdTc5ZDBcdTdhMzJcdTY2NjBcdTZhMjlcdTg4OWRcdTc0NGNcdTdiYzVcdTY3ODJcdTdhMmNcdTUyNGZcdTkwNDZcdTM0ZTZcdTczYzRcdXsyNWRiOX1cdTc0YzZcdTlmYzdcdTU3YjNcdTQ5MmZcdTU0NGNcdTQxMzFcdXsyMzY4ZX1cdTU4MThcdTdhNzJcdXsyN2I2NX1cdThi''@;'; put 'put ''OGZcdTQ2YWVcdXsyNmU4OH1cdTQxODFcdXsyNWQ5OX1cdTdiYWVcdXsyMjRiY31cdTlmYzhcdXsyMjRjMX1cdXsyMjRjOX1cdXsyMjRjY31cdTlmYzlcdTg1MDRcdXsyMzViYn1cdTQwYjRcdTlmY2FcdTQ0ZTFcdXsyYWRmZn1cdTYyYzFcdTcwNmVcdTlmY2IiXSxbIjg4NDAiLCJcdTMxYzAi''@;'; put 'put ''LDQsIlx1ezIwMTBjfVx1MzFjNVx1ezIwMGQxfVx1ezIwMGNkfVx1MzFjNlx1MzFjN1x1ezIwMGNifVx1ezIxZmU4fVx1MzFjOFx1ezIwMGNhfVx1MzFjOVx1MzFjYVx1MzFjYlx1MzFjY1x1ezIwMTBlfVx1MzFjZFx1MzFjZVx1MDEwMFx4YzFcdTAxY2RceGMwXHUwMTEyXHhjOVx1MDExYVx4''@;'; put 'put ''YzhcdTAxNGNceGQzXHUwMWQxXHhkMlx1MGZmZlx4Y2FcdTAzMDRcdTFlYmVcdTBmZmZceGNhXHUwMzBjXHUxZWMwXHhjYVx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMjUxXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhm''@;'; put 'put ''YVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGEiXSxbIjg4YTEiLCJcdTAxZGNceGZjXHUwZmZmXHhlYVx1MDMwNFx1MWViZlx1MGZmZlx4ZWFcdTAzMGNcdTFlYzFceGVhXHUwMjYxXHUyM2RhXHUyM2RiIl0sWyI4OTQwIiwiXHV7MmEzYTl9XHV7MjExNDV9Il0sWyI4OTQzIiwiXHU2NTBh''@;'; put 'put ''Il0sWyI4OTQ2IiwiXHU0ZTNkXHU2ZWRkXHU5ZDRlXHU5MWRmIl0sWyI4OTRjIiwiXHV7Mjc3MzV9XHU2NDkxXHU0ZjFhXHU0ZjI4XHU0ZmE4XHU1MTU2XHU1MTc0XHU1MTljXHU1MWU0XHU1MmExXHU1MmE4XHU1MzNiXHU1MzRlXHU1M2QxXHU1M2Q4XHU1NmUyXHU1OGYwXHU1OTA0XHU1OTA3''@;'; put 'put ''XHU1OTMyXHU1OTM0XHU1YjY2XHU1YjllXHU1YjlmXHU1YzlhXHU1ZTg2XHU2MDNiXHU2NTg5XHU2N2ZlXHU2ODA0XHU2ODY1XHU2ZDRlXHU3MGJjXHU3NTM1XHU3ZWE0XHU3ZWFjXHU3ZWJhXHU3ZWM3XHU3ZWNmXHU3ZWRmXHU3ZjA2XHU3ZjM3XHU4MjdhXHU4MmNmXHU4MzZmXHU4OWM2XHU4''@;'; put 'put ''YmJlXHU4YmUyXHU4ZjY2XHU4ZjY3XHU4ZjZlIl0sWyI4OWExIiwiXHU3NDExXHU3Y2ZjXHU3ZGNkXHU2OTQ2XHU3YWM5XHU1MjI3Il0sWyI4OWFiIiwiXHU5MThjXHU3OGI4XHU5MTVlXHU4MGJjIl0sWyI4OWIwIiwiXHU4ZDBiXHU4MGY2XHV7MjA5ZTd9Il0sWyI4OWI1IiwiXHU4MDlmXHU5''@;'; put 'put ''ZWM3XHU0Y2NkXHU5ZGM5XHU5ZTBjXHU0YzNlXHV7MjlkZjZ9XHV7MjcwMGV9XHU5ZTBhXHV7MmExMzN9XHUzNWMxIl0sWyI4OWMxIiwiXHU2ZTlhXHU4MjNlXHU3NTE5Il0sWyI4OWM1IiwiXHU0OTExXHU5YTZjXHU5YThmXHU5Zjk5XHU3OTg3XHV7Mjg0NmN9XHV7MjFkY2F9XHV7MjA1ZDB9''@;'; put 'put ''XHV7MjJhZTZ9XHU0ZTI0XHU0ZTgxXHU0ZTgwXHU0ZTg3XHU0ZWJmXHU0ZWViXHU0ZjM3XHUzNDRjXHU0ZmJkXHUzZTQ4XHU1MDAzXHU1MDg4XHUzNDdkXHUzNDkzXHUzNGE1XHU1MTg2XHU1OTA1XHU1MWRiXHU1MWZjXHU1MjA1XHU0ZTg5XHU1Mjc5XHU1MjkwXHU1MzI3XHUzNWM3XHU1M2E5''@;'; put 'put ''XHUzNTUxXHU1M2IwXHUzNTUzXHU1M2MyXHU1NDIzXHUzNTZkXHUzNTcyXHUzNjgxXHU1NDkzXHU1NGEzXHU1NGI0XHU1NGI5XHU1NGQwXHU1NGVmXHU1NTE4XHU1NTIzXHU1NTI4XHUzNTk4XHU1NTNmXHUzNWE1XHUzNWJmXHU1NWQ3XHUzNWM1Il0sWyI4YTQwIiwiXHV7MjdkODR9XHU1NTI1''@;'; put 'put ''Il0sWyI4YTQzIiwiXHV7MjBjNDJ9XHV7MjBkMTV9XHV7MjUxMmJ9XHU1NTkwXHV7MjJjYzZ9XHUzOWVjXHV7MjAzNDF9XHU4ZTQ2XHV7MjRkYjh9XHV7Mjk0ZTV9XHU0MDUzXHV7MjgwYmV9XHU3NzdhXHV7MjJjMzh9XHUzYTM0XHU0N2Q1XHV7MjgxNWR9XHV7MjY5ZjJ9XHV7MjRkZWF9XHU2''@;'; put 'put ''NGRkXHV7MjBkN2N9XHV7MjBmYjR9XHV7MjBjZDV9XHV7MjEwZjR9XHU2NDhkXHU4ZTdlXHV7MjBlOTZ9XHV7MjBjMGJ9XHV7MjBmNjR9XHV7MjJjYTl9XHV7MjgyNTZ9XHV7MjQ0ZDN9Il0sWyI4YTY0IiwiXHV7MjBkNDZ9XHV7MjlhNGR9XHV7MjgwZTl9XHU0N2Y0XHV7MjRlYTd9XHV7MjJj''@;'; put 'put ''YzJ9XHU5YWIyXHUzYTY3XHV7Mjk1ZjR9XHUzZmVkXHUzNTA2XHV7MjUyYzd9XHV7Mjk3ZDR9XHV7Mjc4Yzh9XHV7MjJkNDR9XHU5ZDZlXHU5ODE1Il0sWyI4YTc2IiwiXHU0M2Q5XHV7MjYwYTV9XHU2NGI0XHU1NGUzXHV7MjJkNGN9XHV7MjJiY2F9XHV7MjEwNzd9XHUzOWZiXHV7MjEwNmZ9''@;'; put 'put ''Il0sWyI4YWExIiwiXHV7MjY2ZGF9XHV7MjY3MTZ9XHV7Mjc5YTB9XHU2NGVhXHV7MjUwNTJ9XHV7MjBjNDN9XHU4ZTY4XHV7MjIxYTF9XHV7MjhiNGN9XHV7MjA3MzF9Il0sWyI4YWFjIiwiXHU0ODBiXHV7MjAxYTl9XHUzZmZhXHU1ODczXHV7MjJkOGR9Il0sWyI4YWIyIiwiXHV7MjQ1Yzh9''@;'; put 'put ''XHV7MjA0ZmN9XHV7MjYwOTd9XHV7MjBmNGN9XHV7MjBkOTZ9XHU1NTc5XHU0MGJiXHU0M2JhIl0sWyI4YWJiIiwiXHU0YWI0XHV7MjJhNjZ9XHV7MjEwOWR9XHU4MWFhXHU5OGY1XHV7MjBkOWN9XHU2Mzc5XHUzOWZlXHV7MjI3NzV9XHU4ZGMwXHU1NmExXHU2NDdjXHUzZTQzIl0sWyI4YWM5''@;'; put 'put ''IiwiXHV7MmE2MDF9XHV7MjBlMDl9XHV7MjJhY2Z9XHV7MjJjYzl9Il0sWyI4YWNlIiwiXHV7MjEwYzh9XHV7MjM5YzJ9XHUzOTkyXHUzYTA2XHV7MjgyOWJ9XHUzNTc4XHV7MjVlNDl9XHV7MjIwYzd9XHU1NjUyXHV7MjBmMzF9XHV7MjJjYjJ9XHV7Mjk3MjB9XHUzNGJjXHU2YzNkXHV7MjRl''@;'; put 'put ''M2J9Il0sWyI4YWRmIiwiXHV7Mjc1NzR9XHV7MjJlOGJ9XHV7MjIyMDh9XHV7MmE2NWJ9XHV7MjhjY2R9XHV7MjBlN2F9XHV7MjBjMzR9XHV7MjY4MWN9XHU3ZjkzXHV7MjEwY2Z9XHV7MjI4MDN9XHV7MjI5Mzl9XHUzNWZiXHV7MjUxZTN9XHV7MjBlOGN9XHV7MjBmOGR9XHV7MjBlYWF9XHUz''@;'; put 'put ''ZjkzXHV7MjBmMzB9XHV7MjBkNDd9XHV7MjExNGZ9XHV7MjBlNGN9Il0sWyI4YWY2IiwiXHV7MjBlYWJ9XHV7MjBiYTl9XHV7MjBkNDh9XHV7MjEwYzB9XHV7MjExM2R9XHUzZmY5XHV7MjI2OTZ9XHU2NDMyXHV7MjBmYWR9Il0sWyI4YjQwIiwiXHV7MjMzZjR9XHV7Mjc2Mzl9XHV7MjJiY2V9''@;'; put 'put ''XHV7MjBkN2V9XHV7MjBkN2Z9XHV7MjJjNTF9XHV7MjJjNTV9XHUzYTE4XHV7MjBlOTh9XHV7MjEwYzd9XHV7MjBmMmV9XHV7MmE2MzJ9XHV7MjZiNTB9XHV7MjhjZDJ9XHV7MjhkOTl9XHV7MjhjY2F9XHU5NWFhXHU1NGNjXHU4MmM0XHU1NWI5Il0sWyI4YjU1IiwiXHV7MjllYzN9XHU5YzI2''@;'; put 'put ''XHU5YWI2XHV7Mjc3NWV9XHV7MjJkZWV9XHU3MTQwXHU4MTZkXHU4MGVjXHU1YzFjXHV7MjY1NzJ9XHU4MTM0XHUzNzk3XHU1MzVmXHV7MjgwYmR9XHU5MWI2XHV7MjBlZmF9XHV7MjBlMGZ9XHV7MjBlNzd9XHV7MjBlZmJ9XHUzNWRkXHV7MjRkZWJ9XHUzNjA5XHV7MjBjZDZ9XHU1NmFmXHV7''@;'; put 'put ''MjI3YjV9XHV7MjEwYzl9XHV7MjBlMTB9XHV7MjBlNzh9XHV7MjEwNzh9XHV7MjExNDh9XHV7MjgyMDd9XHV7MjE0NTV9XHV7MjBlNzl9XHV7MjRlNTB9XHV7MjJkYTR9XHU1YTU0XHV7MjEwMWR9XHV7MjEwMWV9XHV7MjEwZjV9XHV7MjEwZjZ9XHU1NzljXHV7MjBlMTF9Il0sWyI4YmExIiwi''@;'; put 'put ''XHV7Mjc2OTR9XHV7MjgyY2R9XHV7MjBmYjV9XHV7MjBlN2J9XHV7MjUxN2V9XHUzNzAzXHV7MjBmYjZ9XHV7MjExODB9XHV7MjUyZDh9XHV7MmEyYmR9XHV7MjQ5ZGF9XHV7MjE4M2F9XHV7MjQxNzd9XHV7MjgyN2N9XHU1ODk5XHU1MjY4XHUzNjFhXHV7MjU3M2R9XHU3YmIyXHU1YjY4XHU0''@;'; put 'put ''ODAwXHU0YjJjXHU5ZjI3XHU0OWU3XHU5YzFmXHU5YjhkXHV7MjViNzR9XHV7MjMxM2R9XHU1NWZiXHUzNWYyXHU1Njg5XHU0ZTI4XHU1OTAyXHV7MjFiYzF9XHV7MmY4Nzh9XHU5NzUxXHV7MjAwODZ9XHU0ZTViXHU0ZWJiXHUzNTNlXHU1YzIzXHU1ZjUxXHU1ZmM0XHUzOGZhXHU2MjRjXHU2''@;'; put 'put ''NTM1XHU2YjdhXHU2YzM1XHU2YzNhXHU3MDZjXHU3MjJiXHU0ZTJjXHU3MmFkXHV7MjQ4ZTl9XHU3ZjUyXHU3OTNiXHU3Y2Y5XHU3ZjUzXHV7MjYyNmF9XHUzNGMxIl0sWyI4YmRlIiwiXHV7MjYzNGJ9XHU4MDAyXHU4MDgwXHV7MjY2MTJ9XHV7MjY5NTF9XHU1MzVkXHU4ODY0XHU4OWMxXHV7''@;'; put 'put ''Mjc4YjJ9XHU4YmEwXHU4ZDFkXHU5NDg1XHU5NTc4XHU5NTdmXHU5NWU4XHV7MjhlMGZ9XHU5N2U2XHU5ODc1XHU5OGNlXHU5OGRlXHU5OTYzXHV7Mjk4MTB9XHU5YzdjXHU5ZTFmXHU5ZWM0XHU2YjZmXHVmOTA3XHU0ZTM3XHV7MjAwODd9XHU5NjFkXHU2MjM3XHU5NGEyIl0sWyI4YzQwIiwi''@;'; put 'put ''XHU1MDNiXHU2ZGZlXHV7MjljNzN9XHU5ZmE2XHUzZGM5XHU4ODhmXHV7MjQxNGV9XHU3MDc3XHU1Y2Y1XHU0YjIwXHV7MjUxY2R9XHUzNTU5XHV7MjVkMzB9XHU2MTIyXHV7MjhhMzJ9XHU4ZmE3XHU5MWY2XHU3MTkxXHU2NzE5XHU3M2JhXHV7MjMyODF9XHV7MmExMDd9XHUzYzhiXHV7MjE5''@;'; put 'put ''ODB9XHU0YjEwXHU3OGU0XHU3NDAyXHU1MWFlXHV7Mjg3MGZ9XHU0MDA5XHU2YTYzXHV7MmEyYmF9XHU0MjIzXHU4NjBmXHV7MjBhNmZ9XHU3YTJhXHV7Mjk5NDd9XHV7MjhhZWF9XHU5NzU1XHU3MDRkXHU1MzI0XHV7MjIwN2V9XHU5M2Y0XHU3NmQ5XHV7Mjg5ZTN9XHU5ZmE3XHU3N2RkXHU0''@;'; put 'put ''ZWEzXHU0ZmYwXHU1MGJjXHU0ZTJmXHU0ZjE3XHU5ZmE4XHU1NDM0XHU3ZDhiXHU1ODkyXHU1OGQwXHV7MjFkYjZ9XHU1ZTkyXHU1ZTk5XHU1ZmMyXHV7MjI3MTJ9XHU2NThiIl0sWyI4Y2ExIiwiXHV7MjMzZjl9XHU2OTE5XHU2YTQzXHV7MjNjNjN9XHU2Y2ZmIl0sWyI4Y2E3IiwiXHU3MjAw''@;'; put 'put ''XHV7MjQ1MDV9XHU3MzhjXHUzZWRiXHV7MjRhMTN9XHU1YjE1XHU3NGI5XHU4YjgzXHV7MjVjYTR9XHV7MjU2OTV9XHU3YTkzXHU3YmVjXHU3Y2MzXHU3ZTZjXHU4MmY4XHU4NTk3XHU5ZmE5XHU4ODkwXHU5ZmFhXHU4ZWI5XHU5ZmFiXHU4ZmNmXHU4NTVmXHU5OWUwXHU5MjIxXHU5ZmFjXHV7''@;'; put 'put ''MjhkYjl9XHV7MjE0M2Z9XHU0MDcxXHU0MmEyXHU1YTFhIl0sWyI4Y2M5IiwiXHU5ODY4XHU2NzZiXHU0Mjc2XHU1NzNkIl0sWyI4Y2NlIiwiXHU4NWQ2XHV7MjQ5N2J9XHU4MmJmXHV7MjcxMGR9XHU0YzgxXHV7MjZkNzR9XHU1ZDdiXHV7MjZiMTV9XHV7MjZmYmV9XHU5ZmFkXHU5ZmFlXHU1''@;'; put 'put ''Yjk2XHU5ZmFmXHU2NmU3XHU3ZTViXHU2ZTU3XHU3OWNhXHUzZDg4XHU0NGMzXHV7MjMyNTZ9XHV7MjI3OTZ9XHU0MzlhXHU0NTM2Il0sWyI4Y2U2IiwiXHU1Y2Q1XHV7MjNiMWF9XHU4YWY5XHU1Yzc4XHUzZDEyXHV7MjM1NTF9XHU1ZDc4XHU5ZmIyXHU3MTU3XHU0NTU4XHV7MjQwZWN9XHV7''@;'; put 'put ''MjFlMjN9XHU0Yzc3XHUzOTc4XHUzNDRhXHV7MjAxYTR9XHV7MjZjNDF9XHU4YWNjXHU0ZmI0XHV7MjAyMzl9XHU1OWJmXHU4MTZjXHU5ODU2XHV7Mjk4ZmF9XHU1ZjNiIl0sWyI4ZDQwIiwiXHV7MjBiOWZ9Il0sWyI4ZDQyIiwiXHV7MjIxYzF9XHV7Mjg5NmR9XHU0MTAyXHU0NmJiXHV7Mjkw''@;'; put 'put ''Nzl9XHUzZjA3XHU5ZmIzXHV7MmExYjV9XHU0MGY4XHUzN2Q2XHU0NmY3XHV7MjZjNDZ9XHU0MTdjXHV7Mjg2YjJ9XHV7MjczZmZ9XHU0NTZkXHUzOGQ0XHV7MjU0OWF9XHU0NTYxXHU0NTFiXHU0ZDg5XHU0YzdiXHU0ZDc2XHU0NWVhXHUzZmM4XHV7MjRiMGZ9XHUzNjYxXHU0NGRlXHU0NGJk''@;'; put 'put ''XHU0MWVkXHU1ZDNlXHU1ZDQ4XHU1ZDU2XHUzZGZjXHUzODBmXHU1ZGE0XHU1ZGI5XHUzODIwXHUzODM4XHU1ZTQyXHU1ZWJkXHU1ZjI1XHU1ZjgzXHUzOTA4XHUzOTE0XHUzOTNmXHUzOTRkXHU2MGQ3XHU2MTNkXHU1Y2U1XHUzOTg5XHU2MWI3XHU2MWI5XHU2MWNmXHUzOWI4XHU2MjJjXHU2''@;'; put 'put ''MjkwXHU2MmU1XHU2MzE4XHUzOWY4XHU1NmIxIl0sWyI4ZGExIiwiXHUzYTAzXHU2M2UyXHU2M2ZiXHU2NDA3XHU2NDVhXHUzYTRiXHU2NGMwXHU1ZDE1XHU1NjIxXHU5ZjlmXHUzYTk3XHU2NTg2XHUzYWJkXHU2NWZmXHU2NjUzXHUzYWYyXHU2NjkyXHUzYjIyXHU2NzE2XHUzYjQyXHU2N2E0''@;'; put 'put ''XHU2ODAwXHUzYjU4XHU2ODRhXHU2ODg0XHUzYjcyXHUzYjcxXHUzYjdiXHU2OTA5XHU2OTQzXHU3MjVjXHU2OTY0XHU2OTlmXHU2OTg1XHUzYmJjXHU2OWQ2XHUzYmRkXHU2YTY1XHU2YTc0XHU2YTcxXHU2YTgyXHUzYmVjXHU2YTk5XHUzYmYyXHU2YWFiXHU2YWI1XHU2YWQ0XHU2YWY2XHU2''@;'; put 'put ''YjgxXHU2YmMxXHU2YmVhXHU2Yzc1XHU2Y2FhXHUzY2NiXHU2ZDAyXHU2ZDA2XHU2ZDI2XHU2ZDgxXHUzY2VmXHU2ZGE0XHU2ZGIxXHU2ZTE1XHU2ZTE4XHU2ZTI5XHU2ZTg2XHV7Mjg5YzB9XHU2ZWJiXHU2ZWUyXHU2ZWRhXHU5ZjdmXHU2ZWU4XHU2ZWU5XHU2ZjI0XHU2ZjM0XHUzZDQ2XHV7''@;'; put 'put ''MjNmNDF9XHU2ZjgxXHU2ZmJlXHUzZDZhXHUzZDc1XHU3MWI3XHU1Yzk5XHUzZDhhXHU3MDJjXHUzZDkxXHU3MDUwXHU3MDU0XHU3MDZmXHU3MDdmXHU3MDg5XHV7MjAzMjV9XHU0M2MxXHUzNWYxXHV7MjBlZDh9Il0sWyI4ZTQwIiwiXHV7MjNlZDd9XHU1N2JlXHV7MjZlZDN9XHU3MTNlXHV7''@;'; put 'put ''MjU3ZTB9XHUzNjRlXHU2OWEyXHV7MjhiZTl9XHU1Yjc0XHU3YTQ5XHV7MjU4ZTF9XHV7Mjk0ZDl9XHU3YTY1XHU3YTdkXHV7MjU5YWN9XHU3YWJiXHU3YWIwXHU3YWMyXHU3YWMzXHU3MWQxXHV7MjY0OGR9XHU0MWNhXHU3YWRhXHU3YWRkXHU3YWVhXHU0MWVmXHU1NGIyXHV7MjVjMDF9XHU3''@;'; put 'put ''YjBiXHU3YjU1XHU3YjI5XHV7MjUzMGV9XHV7MjVjZmV9XHU3YmEyXHU3YjZmXHU4MzljXHV7MjViYjR9XHV7MjZjN2Z9XHU3YmQwXHU4NDIxXHU3YjkyXHU3YmI4XHV7MjVkMjB9XHUzZGFkXHV7MjVjNjV9XHU4NDkyXHU3YmZhXHU3YzA2XHU3YzM1XHV7MjVjYzF9XHU3YzQ0XHU3YzgzXHV7''@;'; put 'put ''MjQ4ODJ9XHU3Y2E2XHU2NjdkXHV7MjQ1Nzh9XHU3Y2M5XHU3Y2M3XHU3Y2U2XHU3Yzc0XHU3Y2YzXHU3Y2Y1XHU3Y2NlIl0sWyI4ZWExIiwiXHU3ZTY3XHU0NTFkXHV7MjZlNDR9XHU3ZDVkXHV7MjZlZDZ9XHU3NDhkXHU3ZDg5XHU3ZGFiXHU3MTM1XHU3ZGIzXHU3ZGQyXHV7MjQwNTd9XHV7''@;'; put 'put ''MjYwMjl9XHU3ZGU0XHUzZDEzXHU3ZGY1XHV7MjE3Zjl9XHU3ZGU1XHV7MjgzNmR9XHU3ZTFkXHV7MjYxMjF9XHV7MjYxNWF9XHU3ZTZlXHU3ZTkyXHU0MzJiXHU5NDZjXHU3ZTI3XHU3ZjQwXHU3ZjQxXHU3ZjQ3XHU3OTM2XHV7MjYyZDB9XHU5OWUxXHU3Zjk3XHV7MjYzNTF9XHU3ZmEzXHV7''@;'; put 'put ''MjE2NjF9XHV7MjAwNjh9XHU0NTVjXHV7MjM3NjZ9XHU0NTAzXHV7MjgzM2F9XHU3ZmZhXHV7MjY0ODl9XHU4MDA1XHU4MDA4XHU4MDFkXHU4MDI4XHU4MDJmXHV7MmEwODd9XHV7MjZjYzN9XHU4MDNiXHU4MDNjXHU4MDYxXHV7MjI3MTR9XHU0OTg5XHV7MjY2MjZ9XHV7MjNkZTN9XHV7MjY2''@;'; put 'put ''ZTh9XHU2NzI1XHU4MGE3XHV7MjhhNDh9XHU4MTA3XHU4MTFhXHU1OGIwXHV7MjI2ZjZ9XHU2YzdmXHV7MjY0OTh9XHV7MjRmYjh9XHU2NGU3XHV7MjE0OGF9XHU4MjE4XHV7MjE4NWV9XHU2YTUzXHV7MjRhNjV9XHV7MjRhOTV9XHU0NDdhXHU4MjI5XHV7MjBiMGR9XHV7MjZhNTJ9XHV7MjNk''@;'; put 'put ''N2V9XHU0ZmY5XHV7MjE0ZmR9XHU4NGUyXHU4MzYyXHV7MjZiMGF9XHV7MjQ5YTd9XHV7MjM1MzB9XHV7MjE3NzN9XHV7MjNkZjh9XHU4MmFhXHU2OTFiXHV7MmY5OTR9XHU0MWRiIl0sWyI4ZjQwIiwiXHU4NTRiXHU4MmQwXHU4MzFhXHV7MjBlMTZ9XHV7MjE3YjR9XHUzNmMxXHV7MjMxN2R9''@;'; put 'put ''XHV7MjM1NWF9XHU4MjdiXHU4MmUyXHU4MzE4XHV7MjNlOGJ9XHV7MjZkYTN9XHV7MjZiMDV9XHV7MjZiOTd9XHV7MjM1Y2V9XHUzZGJmXHU4MzFkXHU1NWVjXHU4Mzg1XHU0NTBiXHV7MjZkYTV9XHU4M2FjXHU4M2MxXHU4M2QzXHUzNDdlXHV7MjZlZDR9XHU2YTU3XHU4NTVhXHUzNDk2XHV7''@;'; put 'put ''MjZlNDJ9XHV7MjJlZWZ9XHU4NDU4XHV7MjViZTR9XHU4NDcxXHUzZGQzXHU0NGU0XHU2YWE3XHU4NDRhXHV7MjNjYjV9XHU3OTU4XHU4NGE4XHV7MjZiOTZ9XHV7MjZlNzd9XHV7MjZlNDN9XHU4NGRlXHU4NDBmXHU4MzkxXHU0NGEwXHU4NDkzXHU4NGU0XHV7MjVjOTF9XHU0MjQwXHV7MjVj''@;'; put 'put ''YzB9XHU0NTQzXHU4NTM0XHU1YWYyXHV7MjZlOTl9XHU0NTI3XHU4NTczXHU0NTE2XHU2N2JmXHU4NjE2Il0sWyI4ZmExIiwiXHV7Mjg2MjV9XHV7Mjg2M2J9XHU4NWMxXHV7MjcwODh9XHU4NjAyXHV7MjE1ODJ9XHV7MjcwY2R9XHV7MmY5YjJ9XHU0NTZhXHU4NjI4XHUzNjQ4XHV7MjE4YTJ9''@;'; put 'put ''XHU1M2Y3XHV7MjczOWF9XHU4NjdlXHU4NzcxXHV7MmEwZjh9XHU4N2VlXHV7MjJjMjd9XHU4N2IxXHU4N2RhXHU4ODBmXHU1NjYxXHU4NjZjXHU2ODU2XHU0NjBmXHU4ODQ1XHU4ODQ2XHV7Mjc1ZTB9XHV7MjNkYjl9XHV7Mjc1ZTR9XHU4ODVlXHU4ODljXHU0NjViXHU4OGI0XHU4OGI1XHU2''@;'; put 'put ''M2MxXHU4OGM1XHU3Nzc3XHV7Mjc3MGZ9XHU4OTg3XHU4OThhXHU4OWE2XHU4OWE5XHU4OWE3XHU4OWJjXHV7MjhhMjV9XHU4OWU3XHV7Mjc5MjR9XHV7MjdhYmR9XHU4YTljXHU3NzkzXHU5MWZlXHU4YTkwXHV7MjdhNTl9XHU3YWU5XHV7MjdiM2F9XHV7MjNmOGZ9XHU0NzEzXHV7MjdiMzh9''@;'; put 'put ''XHU3MTdjXHU4YjBjXHU4YjFmXHV7MjU0MzB9XHV7MjU1NjV9XHU4YjNmXHU4YjRjXHU4YjRkXHU4YWE5XHV7MjRhN2F9XHU4YjkwXHU4YjliXHU4YWFmXHV7MjE2ZGZ9XHU0NjE1XHU4ODRmXHU4YzliXHV7MjdkNTR9XHV7MjdkOGZ9XHV7MmY5ZDR9XHUzNzI1XHV7MjdkNTN9XHU4Y2Q2XHV7''@;'; put 'put ''MjdkOTh9XHV7MjdkYmR9XHU4ZDEyXHU4ZDAzXHV7MjE5MTB9XHU4Y2RiXHU3MDVjXHU4ZDExXHV7MjRjYzl9XHUzZWQwXHU4ZDc3Il0sWyI5MDQwIiwiXHU4ZGE5XHV7MjgwMDJ9XHV7MjEwMTR9XHV7MjQ5OGF9XHUzYjdjXHV7MjgxYmN9XHV7MjcxMGN9XHU3YWU3XHU4ZWFkXHU4ZWI2XHU4''@;'; put 'put ''ZWMzXHU5MmQ0XHU4ZjE5XHU4ZjJkXHV7MjgzNjV9XHV7Mjg0MTJ9XHU4ZmE1XHU5MzAzXHV7MmEyOWZ9XHV7MjBhNTB9XHU4ZmIzXHU0OTJhXHV7Mjg5ZGV9XHV7Mjg1M2R9XHV7MjNkYmJ9XHU1ZWY4XHV7MjMyNjJ9XHU4ZmY5XHV7MmEwMTR9XHV7Mjg2YmN9XHV7Mjg1MDF9XHV7MjIzMjV9''@;'; put 'put ''XHUzOTgwXHV7MjZlZDd9XHU5MDM3XHV7Mjg1M2N9XHV7MjdhYmV9XHU5MDYxXHV7Mjg1NmN9XHV7Mjg2MGJ9XHU5MGE4XHV7Mjg3MTN9XHU5MGM0XHV7Mjg2ZTZ9XHU5MGFlXHU5MGZkXHU5MTY3XHUzYWYwXHU5MWE5XHU5MWM0XHU3Y2FjXHV7Mjg5MzN9XHV7MjFlODl9XHU5MjBlXHU2Yzlm''@;'; put 'put ''XHU5MjQxXHU5MjYyXHV7MjU1Yjl9XHU5MmI5XHV7MjhhYzZ9XHV7MjNjOWJ9XHV7MjhiMGN9XHV7MjU1ZGJ9Il0sWyI5MGExIiwiXHV7MjBkMzF9XHU5MzJjXHU5MzZiXHV7MjhhZTF9XHV7MjhiZWJ9XHU3MDhmXHU1YWMzXHV7MjhhZTJ9XHV7MjhhZTV9XHU0OTY1XHU5MjQ0XHV7MjhiZWN9''@;'; put 'put ''XHV7MjhjMzl9XHV7MjhiZmZ9XHU5MzczXHU5NDViXHU4ZWJjXHU5NTg1XHU5NWE2XHU5NDI2XHU5NWEwXHU2ZmY2XHU0MmI5XHV7MjI2N2F9XHV7Mjg2ZDh9XHV7MjEyN2N9XHV7MjNlMmV9XHU0OWRmXHU2YzFjXHU5NjdiXHU5Njk2XHU0MTZjXHU5NmEzXHV7MjZlZDV9XHU2MWRhXHU5NmI2''@;'; put 'put ''XHU3OGY1XHV7MjhhZTB9XHU5NmJkXHU1M2NjXHU0OWExXHV7MjZjYjh9XHV7MjAyNzR9XHV7MjY0MTB9XHV7MjkwYWZ9XHV7MjkwZTV9XHV7MjRhZDF9XHV7MjE5MTV9XHV7MjMzMGF9XHU5NzMxXHU4NjQyXHU5NzM2XHU0YTBmXHU0NTNkXHU0NTg1XHV7MjRhZTl9XHU3MDc1XHU1YjQxXHU5''@;'; put 'put ''NzFiXHU5NzVjXHV7MjkxZDV9XHU5NzU3XHU1YjRhXHV7MjkxZWJ9XHU5NzVmXHU5NDI1XHU1MGQwXHV7MjMwYjd9XHV7MjMwYmN9XHU5Nzg5XHU5NzlmXHU5N2IxXHU5N2JlXHU5N2MwXHU5N2QyXHU5N2UwXHV7MjU0NmN9XHU5N2VlXHU3NDFjXHV7Mjk0MzN9XHU5N2ZmXHU5N2Y1XHV7Mjk0''@;'; put 'put ''MWR9XHV7Mjc5N2F9XHU0YWQxXHU5ODM0XHU5ODMzXHU5ODRiXHU5ODY2XHUzYjBlXHV7MjcxNzV9XHUzZDUxXHV7MjA2MzB9XHV7MjQxNWN9Il0sWyI5MTQwIiwiXHV7MjU3MDZ9XHU5OGNhXHU5OGI3XHU5OGM4XHU5OGM3XHU0YWZmXHV7MjZkMjd9XHV7MjE2ZDN9XHU1NWIwXHU5OGUxXHU5''@;'; put 'put ''OGU2XHU5OGVjXHU5Mzc4XHU5OTM5XHV7MjRhMjl9XHU0YjcyXHV7Mjk4NTd9XHV7Mjk5MDV9XHU5OWY1XHU5YTBjXHU5YTNiXHU5YTEwXHU5YTU4XHV7MjU3MjV9XHUzNmM0XHV7MjkwYjF9XHV7MjliZDV9XHU5YWUwXHU5YWUyXHV7MjliMDV9XHU5YWY0XHU0YzBlXHU5YjE0XHU5YjJkXHV7''@;'; put 'put ''Mjg2MDB9XHU1MDM0XHU5YjM0XHV7MjY5YTh9XHUzOGMzXHV7MjMwN2R9XHU5YjUwXHU5YjQwXHV7MjlkM2V9XHU1YTQ1XHV7MjE4NjN9XHU5YjhlXHV7MjQyNGJ9XHU5YzAyXHU5YmZmXHU5YzBjXHV7MjllNjh9XHU5ZGQ0XHV7MjlmYjd9XHV7MmExOTJ9XHV7MmExYWJ9XHV7MmEwZTF9XHV7''@;'; put 'put ''MmExMjN9XHV7MmExZGZ9XHU5ZDdlXHU5ZDgzXHV7MmExMzR9XHU5ZTBlXHU2ODg4Il0sWyI5MWExIiwiXHU5ZGM0XHV7MjIxNWJ9XHV7MmExOTN9XHV7MmEyMjB9XHV7MjE5M2J9XHV7MmEyMzN9XHU5ZDM5XHV7MmEwYjl9XHV7MmEyYjR9XHU5ZTkwXHU5ZTk1XHU5ZTllXHU5ZWEyXHU0ZDM0''@;'; put 'put ''XHU5ZWFhXHU5ZWFmXHV7MjQzNjR9XHU5ZWMxXHUzYjYwXHUzOWU1XHUzZDFkXHU0ZjMyXHUzN2JlXHV7MjhjMmJ9XHU5ZjAyXHU5ZjA4XHU0Yjk2XHU5NDI0XHV7MjZkYTJ9XHU5ZjE3XHU5ZjE2XHU5ZjM5XHU1NjlmXHU1NjhhXHU5ZjQ1XHU5OWI4XHV7MjkwOGJ9XHU5N2YyXHU4NDdmXHU5''@;'; put 'put ''ZjYyXHU5ZjY5XHU3YWRjXHU5ZjhlXHU3MjE2XHU0YmJlXHV7MjQ5NzV9XHV7MjQ5YmJ9XHU3MTc3XHV7MjQ5Zjh9XHV7MjQzNDh9XHV7MjRhNTF9XHU3MzllXHV7MjhiZGF9XHV7MjE4ZmF9XHU3OTlmXHV7Mjg5N2V9XHV7MjhlMzZ9XHU5MzY5XHU5M2YzXHV7MjhhNDR9XHU5MmVjXHU5Mzgx''@;'; put 'put ''XHU5M2NiXHV7Mjg5NmN9XHV7MjQ0Yjl9XHU3MjE3XHUzZWViXHU3NzcyXHU3YTQzXHU3MGQwXHV7MjQ0NzN9XHV7MjQzZjh9XHU3MTdlXHV7MjE3ZWZ9XHU3MGEzXHV7MjE4YmV9XHV7MjM1OTl9XHUzZWM3XHV7MjE4ODV9XHV7MjU0MmZ9XHV7MjE3Zjh9XHUzNzIyXHV7MjE2ZmJ9XHV7MjE4''@;'; put 'put ''Mzl9XHUzNmUxXHV7MjE3NzR9XHV7MjE4ZDF9XHV7MjVmNGJ9XHUzNzIzXHV7MjE2YzB9XHU1NzViXHV7MjRhMjV9XHV7MjEzZmV9XHV7MjEyYTh9Il0sWyI5MjQwIiwiXHV7MjEzYzZ9XHV7MjE0YjZ9XHU4NTAzXHV7MjM2YTZ9XHU4NTAzXHU4NDU1XHV7MjQ5OTR9XHV7MjcxNjV9XHV7MjNl''@;'; put 'put ''MzF9XHV7MjU1NWN9XHV7MjNlZmJ9XHV7MjcwNTJ9XHU0NGY0XHV7MjM2ZWV9XHV7Mjk5OWR9XHV7MjZmMjZ9XHU2N2Y5XHUzNzMzXHUzYzE1XHUzZGU3XHU1ODZjXHV7MjE5MjJ9XHU2ODEwXHU0MDU3XHV7MjM3M2Z9XHV7MjQwZTF9XHV7MjQwOGJ9XHV7MjQxMGZ9XHV7MjZjMjF9XHU1NGNi''@;'; put 'put ''XHU1NjllXHV7MjY2YjF9XHU1NjkyXHV7MjBmZGZ9XHV7MjBiYTh9XHV7MjBlMGR9XHU5M2M2XHV7MjhiMTN9XHU5MzljXHU0ZWY4XHU1MTJiXHUzODE5XHV7MjQ0MzZ9XHU0ZWJjXHV7MjA0NjV9XHV7MjAzN2Z9XHU0ZjRiXHU0ZjhhXHV7MjU2NTF9XHU1YTY4XHV7MjAxYWJ9XHV7MjAzY2J9''@;'; put 'put ''XHUzOTk5XHV7MjAzMGF9XHV7MjA0MTR9XHUzNDM1XHU0ZjI5XHV7MjAyYzB9XHV7MjhlYjN9XHV7MjAyNzV9XHU4YWRhXHV7MjAyMGN9XHU0ZTk4Il0sWyI5MmExIiwiXHU1MGNkXHU1MTBkXHU0ZmEyXHU0ZjAzXHV7MjRhMGV9XHV7MjNlOGF9XHU0ZjQyXHU1MDJlXHU1MDZjXHU1MDgxXHU0''@;'; put 'put ''ZmNjXHU0ZmU1XHU1MDU4XHU1MGZjXHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU2ZTc2XHV7MjM1OTV9XHV7MjNlMzl9XHV7MjNlYmZ9XHU2ZDcyXHV7MjE4ODR9XHV7MjNlODl9XHU1MWE4XHU1MWMzXHV7MjA1ZTB9XHU0NGRkXHV7MjA0YTN9XHV7MjA0OTJ9XHV7MjA0OTF9XHU4ZDdhXHV7''@;'; put 'put ''MjhhOWN9XHV7MjA3MGV9XHU1MjU5XHU1MmE0XHV7MjA4NzN9XHU1MmUxXHU5MzZlXHU0NjdhXHU3MThjXHV7MjQzOGN9XHV7MjBjMjB9XHV7MjQ5YWN9XHV7MjEwZTR9XHU2OWQxXHV7MjBlMWR9XHU3NDc5XHUzZWRlXHU3NDk5XHU3NDE0XHU3NDU2XHU3Mzk4XHU0YjhlXHV7MjRhYmN9XHV7''@;'; put 'put ''MjQwOGR9XHU1M2QwXHUzNTg0XHU3MjBmXHV7MjQwYzl9XHU1NWI0XHV7MjAzNDV9XHU1NGNkXHV7MjBiYzZ9XHU1NzFkXHU5MjVkXHU5NmY0XHU5MzY2XHU1N2RkXHU1NzhkXHU1NzdmXHUzNjNlXHU1OGNiXHU1YTk5XHV7MjhhNDZ9XHV7MjE2ZmF9XHV7MjE3NmZ9XHV7MjE3MTB9XHU1YTJj''@;'; put 'put ''XHU1OWI4XHU5MjhmXHU1YTdlXHU1YWNmXHU1YTEyXHV7MjU5NDZ9XHV7MjE5ZjN9XHV7MjE4NjF9XHV7MjQyOTV9XHUzNmY1XHU2ZDA1XHU3NDQzXHU1YTIxXHV7MjVlODN9Il0sWyI5MzQwIiwiXHU1YTgxXHV7MjhiZDd9XHV7MjA0MTN9XHU5M2UwXHU3NDhjXHV7MjEzMDN9XHU3MTA1XHU0''@;'; put 'put ''OTcyXHU5NDA4XHV7Mjg5ZmJ9XHU5M2JkXHUzN2EwXHU1YzFlXHU1YzllXHU1ZTVlXHU1ZTQ4XHV7MjE5OTZ9XHV7MjE5N2N9XHV7MjNhZWV9XHU1ZWNkXHU1YjRmXHV7MjE5MDN9XHV7MjE5MDR9XHUzNzAxXHV7MjE4YTB9XHUzNmRkXHV7MjE2ZmV9XHUzNmQzXHU4MTJhXHV7MjhhNDd9XHV7''@;'; put 'put ''MjFkYmF9XHV7MjM0NzJ9XHV7Mjg5YTh9XHU1ZjBjXHU1ZjBlXHV7MjE5Mjd9XHV7MjE3YWJ9XHU1YTZiXHV7MjE3M2J9XHU1YjQ0XHU4NjE0XHV7Mjc1ZmR9XHU4ODYwXHU2MDdlXHV7MjI4NjB9XHV7MjI2MmJ9XHU1ZmRiXHUzZWI4XHV7MjI1YWZ9XHV7MjI1YmV9XHV7MjkwODh9XHV7MjZm''@;'; put 'put ''NzN9XHU2MWMwXHV7MjAwM2V9XHV7MjAwNDZ9XHV7MjI2MWJ9XHU2MTk5XHU2MTk4XHU2MDc1XHV7MjJjOWJ9XHV7MjJkMDd9XHV7MjQ2ZDR9XHV7MjkxNGR9Il0sWyI5M2ExIiwiXHU2NDcxXHV7MjQ2NjV9XHV7MjJiNmF9XHUzYTI5XHV7MjJiMjJ9XHV7MjM0NTB9XHV7Mjk4ZWF9XHV7MjJl''@;'; put 'put ''Nzh9XHU2MzM3XHV7MmE0NWJ9XHU2NGI2XHU2MzMxXHU2M2QxXHV7MjQ5ZTN9XHV7MjJkNjd9XHU2MmE0XHV7MjJjYTF9XHU2NDNiXHU2NTZiXHU2OTcyXHUzYmY0XHV7MjMwOGV9XHV7MjMyYWR9XHV7MjQ5ODl9XHV7MjMyYWJ9XHU1NTBkXHV7MjMyZTB9XHV7MjE4ZDl9XHV7Mjk0M2Z9XHU2''@;'; put 'put ''NmNlXHV7MjMyODl9XHV7MjMxYjN9XHUzYWUwXHU0MTkwXHV7MjU1ODR9XHV7MjhiMjJ9XHV7MjU1OGZ9XHV7MjE2ZmN9XHV7MjU1NWJ9XHV7MjU0MjV9XHU3OGVlXHV7MjMxMDN9XHV7MjE4MmF9XHV7MjMyMzR9XHUzNDY0XHV7MjMyMGZ9XHV7MjMxODJ9XHV7MjQyYzl9XHU2NjhlXHV7MjZk''@;'; put 'put ''MjR9XHU2NjZiXHU0YjkzXHU2NjMwXHV7Mjc4NzB9XHV7MjFkZWJ9XHU2NjYzXHV7MjMyZDJ9XHV7MjMyZTF9XHU2NjFlXHV7MjU4NzJ9XHUzOGQxXHV7MjM4M2F9XHV7MjM3YmN9XHUzYjk5XHV7MjM3YTJ9XHV7MjMzZmV9XHU3NGQwXHUzYjk2XHU2NzhmXHV7MjQ2MmF9XHU2OGI2XHU2ODFl''@;'; put 'put ''XHUzYmM0XHU2YWJlXHUzODYzXHV7MjM3ZDV9XHV7MjQ0ODd9XHU2YTMzXHU2YTUyXHU2YWM5XHU2YjA1XHV7MjE5MTJ9XHU2NTExXHU2ODk4XHU2YTRjXHUzYmQ3XHU2YTdhXHU2YjU3XHV7MjNmYzB9XHV7MjNjOWF9XHU5M2EwXHU5MmYyXHV7MjhiZWF9XHV7MjhhY2J9Il0sWyI5NDQwIiwi''@;'; put 'put ''XHU5Mjg5XHV7MjgwMWV9XHV7Mjg5ZGN9XHU5NDY3XHU2ZGE1XHU2ZjBiXHV7MjQ5ZWN9XHU2ZDY3XHV7MjNmN2Z9XHUzZDhmXHU2ZTA0XHV7MjQwM2N9XHU1YTNkXHU2ZTBhXHU1ODQ3XHU2ZDI0XHU3ODQyXHU3MTNiXHV7MjQzMWF9XHV7MjQyNzZ9XHU3MGYxXHU3MjUwXHU3Mjg3XHU3Mjk0''@;'; put 'put ''XHV7MjQ3OGZ9XHV7MjQ3MjV9XHU1MTc5XHV7MjRhYTR9XHV7MjA1ZWJ9XHU3NDdhXHV7MjNlZjh9XHV7MjM2NWZ9XHV7MjRhNGF9XHV7MjQ5MTd9XHV7MjVmZTF9XHUzZjA2XHUzZWIxXHV7MjRhZGZ9XHV7MjhjMjN9XHV7MjNmMzV9XHU2MGE3XHUzZWYzXHU3NGNjXHU3NDNjXHU5Mzg3XHU3''@;'; put 'put ''NDM3XHU0NDlmXHV7MjZkZWF9XHU0NTUxXHU3NTgzXHUzZjYzXHV7MjRjZDl9XHV7MjRkMDZ9XHUzZjU4XHU3NTU1XHU3NjczXHV7MmE1YzZ9XHUzYjE5XHU3NDY4XHV7MjhhY2N9XHV7MjQ5YWJ9XHV7MjQ5OGV9XHUzYWZiIl0sWyI5NGExIiwiXHUzZGNkXHV7MjRhNGV9XHUzZWZmXHV7MjQ5''@;'; put 'put ''YzV9XHV7MjQ4ZjN9XHU5MWZhXHU1NzMyXHU5MzQyXHV7MjhhZTN9XHV7MjE4NjR9XHU1MGRmXHV7MjUyMjF9XHV7MjUxZTd9XHU3Nzc4XHV7MjMyMzJ9XHU3NzBlXHU3NzBmXHU3NzdiXHV7MjQ2OTd9XHV7MjM3ODF9XHUzYTVlXHV7MjQ4ZjB9XHU3NDM4XHU3NDliXHUzZWJmXHV7MjRhYmF9''@;'; put 'put ''XHV7MjRhYzd9XHU0MGM4XHV7MjRhOTZ9XHV7MjYxYWV9XHU5MzA3XHV7MjU1ODF9XHU3ODFlXHU3ODhkXHU3ODg4XHU3OGQyXHU3M2QwXHU3OTU5XHV7Mjc3NDF9XHV7MjU2ZTN9XHU0MTBlXHU3OTliXHU4NDk2XHU3OWE1XHU2YTJkXHV7MjNlZmF9XHU3YTNhXHU3OWY0XHU0MTZlXHV7MjE2''@;'; put 'put ''ZTZ9XHU0MTMyXHU5MjM1XHU3OWYxXHV7MjBkNGN9XHV7MjQ5OGN9XHV7MjAyOTl9XHV7MjNkYmF9XHV7MjE3NmV9XHUzNTk3XHU1NTZiXHUzNTcwXHUzNmFhXHV7MjAxZDR9XHV7MjBjMGR9XHU3YWUyXHU1YTU5XHV7MjI2ZjV9XHV7MjVhYWZ9XHV7MjVhOWN9XHU1YTBkXHV7MjAyNWJ9XHU3''@;'; put 'put ''OGYwXHU1YTJhXHV7MjViYzZ9XHU3YWZlXHU0MWY5XHU3YzVkXHU3YzZkXHU0MjExXHV7MjViYjN9XHV7MjVlYmN9XHV7MjVlYTZ9XHU3Y2NkXHV7MjQ5Zjl9XHV7MjE3YjB9XHU3YzhlXHU3YzdjXHU3Y2FlXHU2YWIyXHU3ZGRjXHU3ZTA3XHU3ZGQzXHU3ZjRlXHV7MjYyNjF9Il0sWyI5NTQw''@;'; put 'put ''IiwiXHV7MjYxNWN9XHV7MjdiNDh9XHU3ZDk3XHV7MjVlODJ9XHU0MjZhXHV7MjZiNzV9XHV7MjA5MTZ9XHU2N2Q2XHV7MjAwNGV9XHV7MjM1Y2Z9XHU1N2M0XHV7MjY0MTJ9XHV7MjYzZjh9XHV7MjQ5NjJ9XHU3ZmRkXHU3YjI3XHV7MjA4MmN9XHV7MjVhZTl9XHV7MjVkNDN9XHU3YjBjXHV7''@;'; put 'put ''MjVlMGV9XHU5OWU2XHU4NjQ1XHU5YTYzXHU2YTFjXHV7MjM0M2Z9XHUzOWUyXHV7MjQ5Zjd9XHV7MjY1YWR9XHU5YTFmXHV7MjY1YTB9XHU4NDgwXHV7MjcxMjd9XHV7MjZjZDF9XHU0NGVhXHU4MTM3XHU0NDAyXHU4MGM2XHU4MTA5XHU4MTQyXHV7MjY3YjR9XHU5OGMzXHV7MjZhNDJ9XHU4''@;'; put 'put ''MjYyXHU4MjY1XHV7MjZhNTF9XHU4NDUzXHV7MjZkYTd9XHU4NjEwXHV7MjcyMWJ9XHU1YTg2XHU0MTdmXHV7MjE4NDB9XHU1YjJiXHV7MjE4YTF9XHU1YWU0XHV7MjE4ZDh9XHU4NmEwXHV7MmY5YmN9XHV7MjNkOGZ9XHU4ODJkXHV7Mjc0MjJ9XHU1YTAyIl0sWyI5NWExIiwiXHU4ODZlXHU0''@;'; put 'put ''ZjQ1XHU4ODg3XHU4OGJmXHU4OGU2XHU4OTY1XHU4OTRkXHV7MjU2ODN9XHU4OTU0XHV7Mjc3ODV9XHV7Mjc3ODR9XHV7MjhiZjV9XHV7MjhiZDl9XHV7MjhiOWN9XHV7Mjg5Zjl9XHUzZWFkXHU4NGEzXHU0NmY1XHU0NmNmXHUzN2YyXHU4YTNkXHU4YTFjXHV7Mjk0NDh9XHU1ZjRkXHU5MjJi''@;'; put 'put ''XHV7MjQyODR9XHU2NWQ0XHU3MTI5XHU3MGM0XHV7MjE4NDV9XHU5ZDZkXHU4YzlmXHU4Y2U5XHV7MjdkZGN9XHU1OTlhXHU3N2MzXHU1OWYwXHU0MzZlXHUzNmQ0XHU4ZTJhXHU4ZWE3XHV7MjRjMDl9XHU4ZjMwXHU4ZjRhXHU0MmY0XHU2YzU4XHU2ZmJiXHV7MjIzMjF9XHU0ODliXHU2Zjc5''@;'; put 'put ''XHU2ZThiXHV7MjE3ZGF9XHU5YmU5XHUzNmI1XHV7MjQ5MmZ9XHU5MGJiXHU5MDk3XHU1NTcxXHU0OTA2XHU5MWJiXHU5NDA0XHV7MjhhNGJ9XHU0MDYyXHV7MjhhZmN9XHU5NDI3XHV7MjhjMWR9XHV7MjhjM2J9XHU4NGU1XHU4YTJiXHU5NTk5XHU5NWE3XHU5NTk3XHU5NTk2XHV7MjhkMzR9''@;'; put 'put ''XHU3NDQ1XHUzZWMyXHV7MjQ4ZmZ9XHV7MjRhNDJ9XHV7MjQzZWF9XHUzZWU3XHV7MjMyMjV9XHU5NjhmXHV7MjhlZTd9XHV7MjhlNjZ9XHV7MjhlNjV9XHUzZWNjXHV7MjQ5ZWR9XHV7MjRhNzh9XHV7MjNmZWV9XHU3NDEyXHU3NDZiXHUzZWZjXHU5NzQxXHV7MjkwYjB9Il0sWyI5NjQwIiwi''@;'; put 'put ''XHU2ODQ3XHU0YTFkXHV7MjkwOTN9XHV7MjU3ZGZ9XHU5NzVkXHU5MzY4XHV7Mjg5ODl9XHV7MjhjMjZ9XHV7MjhiMmZ9XHV7MjYzYmV9XHU5MmJhXHU1YjExXHU4YjY5XHU0OTNjXHU3M2Y5XHV7MjQyMWJ9XHU5NzliXHU5NzcxXHU5OTM4XHV7MjBmMjZ9XHU1ZGMxXHV7MjhiYzV9XHV7MjRh''@;'; put 'put ''YjJ9XHU5ODFmXHV7Mjk0ZGF9XHU5MmY2XHV7Mjk1ZDd9XHU5MWU1XHU0NGMwXHV7MjhiNTB9XHV7MjRhNjd9XHV7MjhiNjR9XHU5OGRjXHV7MjhhNDV9XHUzZjAwXHU5MjJhXHU0OTI1XHU4NDE0XHU5OTNiXHU5OTRkXHV7MjdiMDZ9XHUzZGZkXHU5OTliXHU0YjZmXHU5OWFhXHU5YTVjXHV7''@;'; put 'put ''MjhiNjV9XHV7MjU4Yzh9XHU2YThmXHU5YTIxXHU1YWZlXHU5YTJmXHV7Mjk4ZjF9XHU0YjkwXHV7Mjk5NDh9XHU5OWJjXHU0YmJkXHU0Yjk3XHU5MzdkXHU1ODcyXHV7MjEzMDJ9XHU1ODIyXHV7MjQ5Yjh9Il0sWyI5NmExIiwiXHV7MjE0ZTh9XHU3ODQ0XHV7MjI3MWZ9XHV7MjNkYjh9XHU2''@;'; put 'put ''OGM1XHUzZDdkXHU5NDU4XHUzOTI3XHU2MTUwXHV7MjI3ODF9XHV7MjI5NmJ9XHU2MTA3XHU5YzRmXHU5YzUzXHU5YzdiXHU5YzM1XHU5YzEwXHU5YjdmXHU5YmNmXHV7MjllMmR9XHU5YjlmXHV7MmExZjV9XHV7MmEwZmV9XHU5ZDIxXHU0Y2FlXHV7MjQxMDR9XHU5ZTE4XHU0Y2IwXHU5ZDBj''@;'; put 'put ''XHV7MmExYjR9XHV7MmEwZWR9XHV7MmEwZjN9XHV7Mjk5MmZ9XHU5ZGE1XHU4NGJkXHV7MjZlMTJ9XHV7MjZmZGZ9XHV7MjZiODJ9XHU4NWZjXHU0NTMzXHV7MjZkYTR9XHV7MjZlODR9XHV7MjZkZjB9XHU4NDIwXHU4NWVlXHV7MjZlMDB9XHV7MjM3ZDd9XHV7MjYwNjR9XHU3OWUyXHV7MjM1''@;'; put 'put ''OWN9XHV7MjM2NDB9XHU0OTJkXHV7MjQ5ZGV9XHUzZDYyXHU5M2RiXHU5MmJlXHU5MzQ4XHV7MjAyYmZ9XHU3OGI5XHU5Mjc3XHU5NDRkXHU0ZmU0XHUzNDQwXHU5MDY0XHV7MjU1NWR9XHU3ODNkXHU3ODU0XHU3OGI2XHU3ODRiXHV7MjE3NTd9XHV7MjMxYzl9XHV7MjQ5NDF9XHUzNjlhXHU0''@;'; put 'put ''ZjcyXHU2ZmRhXHU2ZmQ5XHU3MDFlXHU3MDFlXHU1NDE0XHV7MjQxYjV9XHU1N2JiXHU1OGYzXHU1NzhhXHU5ZDE2XHU1N2Q3XHU3MTM0XHUzNGFmXHV7MjQxYWN9XHU3MWViXHV7MjZjNDB9XHV7MjRmOTd9XHU1YjI4XHV7MjE3YjV9XHV7MjhhNDl9Il0sWyI5NzQwIiwiXHU2MTBjXHU1YWNl''@;'; put 'put ''XHU1YTBiXHU0MmJjXHV7MjQ0ODh9XHUzNzJjXHU0YjdiXHV7Mjg5ZmN9XHU5M2JiXHU5M2I4XHV7MjE4ZDZ9XHV7MjBmMWR9XHU4NDcyXHV7MjZjYzB9XHV7MjE0MTN9XHV7MjQyZmF9XHV7MjJjMjZ9XHV7MjQzYzF9XHU1OTk0XHV7MjNkYjd9XHV7MjY3NDF9XHU3ZGE4XHV7MjYxNWJ9XHV7''@;'; put 'put ''MjYwYTR9XHV7MjQ5Yjl9XHV7MjQ5OGJ9XHV7Mjg5ZmF9XHU5MmU1XHU3M2UyXHUzZWU5XHU3NGI0XHV7MjhiNjN9XHV7MjE4OWZ9XHUzZWUxXHV7MjRhYjN9XHU2YWQ4XHU3M2YzXHU3M2ZiXHUzZWQ2XHV7MjRhM2V9XHV7MjRhOTR9XHV7MjE3ZDl9XHV7MjRhNjZ9XHV7MjAzYTd9XHV7MjE0''@;'; put 'put ''MjR9XHV7MjQ5ZTV9XHU3NDQ4XHV7MjQ5MTZ9XHU3MGE1XHV7MjQ5NzZ9XHU5Mjg0XHU3M2U2XHU5MzVmXHV7MjA0ZmV9XHU5MzMxXHV7MjhhY2V9XHV7MjhhMTZ9XHU5Mzg2XHV7MjhiZTd9XHV7MjU1ZDV9XHU0OTM1XHV7MjhhODJ9XHU3MTZiIl0sWyI5N2ExIiwiXHV7MjQ5NDN9XHV7MjBj''@;'; put 'put ''ZmZ9XHU1NmE0XHV7MjA2MWF9XHV7MjBiZWJ9XHV7MjBjYjh9XHU1NTAyXHU3OWM0XHV7MjE3ZmF9XHU3ZGZlXHV7MjE2YzJ9XHV7MjRhNTB9XHV7MjE4NTJ9XHU0NTJlXHU5NDAxXHUzNzBhXHV7MjhhYzB9XHV7MjQ5YWR9XHU1OWIwXHV7MjE4YmZ9XHV7MjE4ODN9XHV7Mjc0ODR9XHU1YWEx''@;'; put 'put ''XHUzNmUyXHV7MjNkNWJ9XHUzNmIwXHU5MjVmXHU1YTc5XHV7MjhhODF9XHV7MjE4NjJ9XHU5Mzc0XHUzY2NkXHV7MjBhYjR9XHU0YTk2XHUzOThhXHU1MGY0XHUzZDY5XHUzZDRjXHV7MjEzOWN9XHU3MTc1XHU0MmZiXHV7MjgyMTh9XHU2ZTBmXHV7MjkwZTR9XHU0NGViXHU2ZDU3XHV7Mjdl''@;'; put 'put ''NGZ9XHU3MDY3XHU2Y2FmXHUzY2Q2XHV7MjNmZWR9XHV7MjNlMmR9XHU2ZTAyXHU2ZjBjXHUzZDZmXHV7MjAzZjV9XHU3NTUxXHUzNmJjXHUzNGM4XHU0NjgwXHUzZWRhXHU0ODcxXHU1OWM0XHU5MjZlXHU0OTNlXHU4ZjQxXHV7MjhjMWN9XHV7MjZiYzB9XHU1ODEyXHU1N2M4XHUzNmQ2XHV7''@;'; put 'put ''MjE0NTJ9XHU3MGZlXHV7MjQzNjJ9XHV7MjRhNzF9XHV7MjJmZTN9XHV7MjEyYjB9XHV7MjIzYmR9XHU2OGI5XHU2OTY3XHV7MjEzOTh9XHV7MjM0ZTV9XHV7MjdiZjR9XHV7MjM2ZGZ9XHV7MjhhODN9XHV7MjM3ZDZ9XHV7MjMzZmF9XHV7MjRjOWZ9XHU2YTFhXHV7MjM2YWR9XHV7MjZjYjd9''@;'; put 'put ''XHU4NDNlXHU0NGRmXHU0NGNlIl0sWyI5ODQwIiwiXHV7MjZkMjZ9XHV7MjZkNTF9XHV7MjZjODJ9XHV7MjZmZGV9XHU2ZjE3XHV7MjcxMDl9XHU4MzNkXHV7MjE3M2F9XHU4M2VkXHV7MjZjODB9XHV7MjcwNTN9XHV7MjE3ZGJ9XHU1OTg5XHU1YTgyXHV7MjE3YjN9XHU1YTYxXHU1YTcxXHV7''@;'; put 'put ''MjE5MDV9XHV7MjQxZmN9XHUzNzJkXHU1OWVmXHV7MjE3M2N9XHUzNmM3XHU3MThlXHU5MzkwXHU2NjlhXHV7MjQyYTV9XHU1YTZlXHU1YTJiXHV7MjQyOTN9XHU2YTJiXHV7MjNlZjl9XHV7Mjc3MzZ9XHV7MjQ0NWJ9XHV7MjQyY2F9XHU3MTFkXHV7MjQyNTl9XHV7Mjg5ZTF9XHU0ZmIwXHV7''@;'; put 'put ''MjZkMjh9XHU1Y2MyXHV7MjQ0Y2V9XHV7MjdlNGR9XHV7MjQzYmR9XHU2YTBjXHV7MjQyNTZ9XHV7MjEzMDR9XHU3MGE2XHU3MTMzXHV7MjQzZTl9XHUzZGE1XHU2Y2RmXHV7MmY4MjV9XHV7MjRhNGZ9XHU3ZTY1XHU1OWViXHU1ZDJmXHUzZGYzXHU1ZjVjXHV7MjRhNWR9XHV7MjE3ZGZ9XHU3''@;'; put 'put ''ZGE0XHU4NDI2Il0sWyI5OGExIiwiXHU1NDg1XHV7MjNhZmF9XHV7MjMzMDB9XHV7MjAyMTR9XHU1NzdlXHV7MjA4ZDV9XHV7MjA2MTl9XHUzZmU1XHV7MjFmOWV9XHV7MmEyYjZ9XHU3MDAzXHV7MjkxNWJ9XHU1ZDcwXHU3MzhmXHU3Y2QzXHV7MjhhNTl9XHV7Mjk0MjB9XHU0ZmM4XHU3ZmU3''@;'; put 'put ''XHU3MmNkXHU3MzEwXHV7MjdhZjR9XHU3MzM4XHU3MzM5XHV7MjU2ZjZ9XHU3MzQxXHU3MzQ4XHUzZWE5XHV7MjdiMTh9XHU5MDZjXHU3MWY1XHV7MjQ4ZjJ9XHU3M2UxXHU4MWY2XHUzZWNhXHU3NzBjXHUzZWQxXHU2Y2EyXHU1NmZkXHU3NDE5XHU3NDFlXHU3NDFmXHUzZWUyXHUzZWYwXHUz''@;'; put 'put ''ZWY0XHUzZWZhXHU3NGQzXHUzZjBlXHUzZjUzXHU3NTQyXHU3NTZkXHU3NTcyXHU3NThkXHUzZjdjXHU3NWM4XHU3NWRjXHUzZmMwXHU3NjRkXHUzZmQ3XHU3Njc0XHUzZmRjXHU3NjdhXHV7MjRmNWN9XHU3MTg4XHU1NjIzXHU4OTgwXHU1ODY5XHU0MDFkXHU3NzQzXHU0MDM5XHU2NzYxXHU0''@;'; put 'put ''MDQ1XHUzNWRiXHU3Nzk4XHU0MDZhXHU0MDZmXHU1YzVlXHU3N2JlXHU3N2NiXHU1OGYyXHU3ODE4XHU3MGI5XHU3ODFjXHU0MGE4XHU3ODM5XHU3ODQ3XHU3ODUxXHU3ODY2XHU4NDQ4XHV7MjU1MzV9XHU3OTMzXHU2ODAzXHU3OTMyXHU0MTAzIl0sWyI5OTQwIiwiXHU0MTA5XHU3OTkxXHU3''@;'; put 'put ''OTk5XHU4ZmJiXHU3YTA2XHU4ZmJjXHU0MTY3XHU3YTkxXHU0MWIyXHU3YWJjXHU4Mjc5XHU0MWM0XHU3YWNmXHU3YWRiXHU0MWNmXHU0ZTIxXHU3YjYyXHU3YjZjXHU3YjdiXHU3YzEyXHU3YzFiXHU0MjYwXHU0MjdhXHU3YzdiXHU3YzljXHU0MjhjXHU3Y2I4XHU0Mjk0XHU3Y2VkXHU4Zjkz''@;'; put 'put ''XHU3MGMwXHV7MjBjY2Z9XHU3ZGNmXHU3ZGQ0XHU3ZGQwXHU3ZGZkXHU3ZmFlXHU3ZmI0XHU3MjlmXHU0Mzk3XHU4MDIwXHU4MDI1XHU3YjM5XHU4MDJlXHU4MDMxXHU4MDU0XHUzZGNjXHU1N2I0XHU3MGEwXHU4MGI3XHU4MGU5XHU0M2VkXHU4MTBjXHU3MzJhXHU4MTBlXHU4MTEyXHU3NTYw''@;'; put 'put ''XHU4MTE0XHU0NDAxXHUzYjM5XHU4MTU2XHU4MTU5XHU4MTVhIl0sWyI5OWExIiwiXHU0NDEzXHU1ODNhXHU4MTdjXHU4MTg0XHU0NDI1XHU4MTkzXHU0NDJkXHU4MWE1XHU1N2VmXHU4MWMxXHU4MWU0XHU4MjU0XHU0NDhmXHU4MmE2XHU4Mjc2XHU4MmNhXHU4MmQ4XHU4MmZmXHU0NGIwXHU4''@;'; put 'put ''MzU3XHU5NjY5XHU2OThhXHU4NDA1XHU3MGY1XHU4NDY0XHU2MGUzXHU4NDg4XHU0NTA0XHU4NGJlXHU4NGUxXHU4NGY4XHU4NTEwXHU4NTM4XHU4NTUyXHU0NTNiXHU4NTZmXHU4NTcwXHU4NWUwXHU0NTc3XHU4NjcyXHU4NjkyXHU4NmIyXHU4NmVmXHU5NjQ1XHU4NzhiXHU0NjA2XHU0NjE3''@;'; put 'put ''XHU4OGFlXHU4OGZmXHU4OTI0XHU4OTQ3XHU4OTkxXHV7Mjc5Njd9XHU4YTI5XHU4YTM4XHU4YTk0XHU4YWI0XHU4YzUxXHU4Y2Q0XHU4Y2YyXHU4ZDFjXHU0Nzk4XHU1ODVmXHU4ZGMzXHU0N2VkXHU0ZWVlXHU4ZTNhXHU1NWQ4XHU1NzU0XHU4ZTcxXHU1NWY1XHU4ZWIwXHU0ODM3XHU4ZWNl''@;'; put 'put ''XHU4ZWUyXHU4ZWU0XHU4ZWVkXHU4ZWYyXHU4ZmI3XHU4ZmMxXHU4ZmNhXHU4ZmNjXHU5MDMzXHU5OWM0XHU0OGFkXHU5OGUwXHU5MjEzXHU0OTFlXHU5MjI4XHU5MjU4XHU5MjZiXHU5MmIxXHU5MmFlXHU5MmJmIl0sWyI5YTQwIiwiXHU5MmUzXHU5MmViXHU5MmYzXHU5MmY0XHU5MmZkXHU5''@;'; put 'put ''MzQzXHU5Mzg0XHU5M2FkXHU0OTQ1XHU0OTUxXHU5ZWJmXHU5NDE3XHU1MzAxXHU5NDFkXHU5NDJkXHU5NDNlXHU0OTZhXHU5NDU0XHU5NDc5XHU5NTJkXHU5NWEyXHU0OWE3XHU5NWY0XHU5NjMzXHU0OWU1XHU2N2EwXHU0YTI0XHU5NzQwXHU0YTM1XHU5N2IyXHU5N2MyXHU1NjU0XHU0YWU0''@;'; put 'put ''XHU2MGU4XHU5OGI5XHU0YjE5XHU5OGYxXHU1ODQ0XHU5OTBlXHU5OTE5XHU1MWI0XHU5OTFjXHU5OTM3XHU5OTQyXHU5OTVkXHU5OTYyXHU0YjcwXHU5OWM1XHU0YjlkXHU5YTNjXHU5YjBmXHU3YTgzXHU5YjY5XHU5YjgxXHU5YmRkXHU5YmYxXHU5YmY0XHU0YzZkXHU5YzIwXHUzNzZmXHV7''@;'; put 'put ''MjFiYzJ9XHU5ZDQ5XHU5YzNhIl0sWyI5YWExIiwiXHU5ZWZlXHU1NjUwXHU5ZDkzXHU5ZGJkXHU5ZGMwXHU5ZGZjXHU5NGY2XHU4ZmI2XHU5ZTdiXHU5ZWFjXHU5ZWIxXHU5ZWJkXHU5ZWM2XHU5NGRjXHU5ZWUyXHU5ZWYxXHU5ZWY4XHU3YWM4XHU5ZjQ0XHV7MjAwOTR9XHV7MjAyYjd9XHV7''@;'; put 'put ''MjAzYTB9XHU2OTFhXHU5NGMzXHU1OWFjXHV7MjA0ZDd9XHU1ODQwXHU5NGMxXHUzN2I5XHV7MjA1ZDV9XHV7MjA2MTV9XHV7MjA2NzZ9XHV7MjE2YmF9XHU1NzU3XHU3MTczXHV7MjBhYzJ9XHV7MjBhY2R9XHV7MjBiYmZ9XHU1NDZhXHV7MmY4M2J9XHV7MjBiY2J9XHU1NDllXHV7MjBiZmJ9''@;'; put 'put ''XHV7MjBjM2J9XHV7MjBjNTN9XHV7MjBjNjV9XHV7MjBjN2N9XHU2MGU3XHV7MjBjOGR9XHU1NjdhXHV7MjBjYjV9XHV7MjBjZGR9XHV7MjBjZWR9XHV7MjBkNmZ9XHV7MjBkYjJ9XHV7MjBkYzh9XHU2OTU1XHU5YzJmXHU4N2E1XHV7MjBlMDR9XHV7MjBlMGV9XHV7MjBlZDd9XHV7MjBmOTB9''@;'; put 'put ''XHV7MjBmMmR9XHV7MjBlNzN9XHU1YzIwXHV7MjBmYmN9XHU1ZTBiXHV7MjEwNWN9XHV7MjEwNGZ9XHV7MjEwNzZ9XHU2NzFlXHV7MjEwN2J9XHV7MjEwODh9XHV7MjEwOTZ9XHUzNjQ3XHV7MjEwYmZ9XHV7MjEwZDN9XHV7MjExMmZ9XHV7MjExM2J9XHU1MzY0XHU4NGFkXHV7MjEyZTN9XHV7''@;'; put 'put ''MjEzNzV9XHV7MjEzMzZ9XHU4YjgxXHV7MjE1Nzd9XHV7MjE2MTl9XHV7MjE3YzN9XHV7MjE3Yzd9XHU0ZTc4XHU3MGJiXHV7MjE4MmR9XHV7MjE5NmF9Il0sWyI5YjQwIiwiXHV7MjFhMmR9XHV7MjFhNDV9XHV7MjFjMmF9XHV7MjFjNzB9XHV7MjFjYWN9XHV7MjFlYzh9XHU2MmMzXHV7MjFl''@;'; put 'put ''ZDV9XHV7MjFmMTV9XHU3MTk4XHU2ODU1XHV7MjIwNDV9XHU2OWU5XHUzNmM4XHV7MjIyN2N9XHV7MjIzZDd9XHV7MjIzZmF9XHV7MjI3MmF9XHV7MjI4NzF9XHV7MjI5NGZ9XHU4MmZkXHV7MjI5Njd9XHV7MjI5OTN9XHV7MjJhZDV9XHU4OWE1XHV7MjJhZTh9XHU4ZmEwXHV7MjJiMGV9XHU5''@;'; put 'put ''N2I4XHV7MjJiM2Z9XHU5ODQ3XHU5YWJkXHV7MjJjNGN9Il0sWyI5YjYyIiwiXHV7MjJjODh9XHV7MjJjYjd9XHV7MjViZTh9XHV7MjJkMDh9XHV7MjJkMTJ9XHV7MjJkYjd9XHV7MjJkOTV9XHV7MjJlNDJ9XHV7MjJmNzR9XHV7MjJmY2N9XHV7MjMwMzN9XHV7MjMwNjZ9XHV7MjMzMWZ9XHV7''@;'; put 'put ''MjMzZGV9XHU1ZmIxXHU2NjQ4XHU2NmJmXHV7MjdhNzl9XHV7MjM1Njd9XHV7MjM1ZjN9XHU3MjAxXHV7MjQ5YmF9XHU3N2Q3XHV7MjM2MWF9XHV7MjM3MTZ9XHU3ZTg3XHV7MjAzNDZ9XHU1OGI1XHU2NzBlIl0sWyI5YmExIiwiXHU2OTE4XHV7MjNhYTd9XHV7Mjc2NTd9XHV7MjVmZTJ9XHV7''@;'; put 'put ''MjNlMTF9XHV7MjNlYjl9XHV7Mjc1ZmV9XHV7MjIwOWF9XHU0OGQwXHU0YWI4XHV7MjQxMTl9XHV7MjhhOWF9XHV7MjQyZWV9XHV7MjQzMGR9XHV7MjQwM2J9XHV7MjQzMzR9XHV7MjQzOTZ9XHV7MjRhNDV9XHV7MjA1Y2F9XHU1MWQyXHV7MjA2MTF9XHU1OTlmXHV7MjFlYTh9XHUzYmJlXHV7''@;'; put 'put ''MjNjZmZ9XHV7MjQ0MDR9XHV7MjQ0ZDZ9XHU1Nzg4XHV7MjQ2NzR9XHUzOTliXHV7MjQ3MmZ9XHV7Mjg1ZTh9XHV7Mjk5Yzl9XHUzNzYyXHV7MjIxYzN9XHU4YjVlXHV7MjhiNGV9XHU5OWQ2XHV7MjQ4MTJ9XHV7MjQ4ZmJ9XHV7MjRhMTV9XHU3MjA5XHV7MjRhYzB9XHV7MjBjNzh9XHU1OTY1''@;'; put 'put ''XHV7MjRlYTV9XHV7MjRmODZ9XHV7MjA3Nzl9XHU4ZWRhXHV7MjUwMmN9XHU1MjhmXHU1NzNmXHU3MTcxXHV7MjUyOTl9XHV7MjU0MTl9XHV7MjNmNGF9XHV7MjRhYTd9XHU1NWJjXHV7MjU0NDZ9XHV7MjU0NmV9XHV7MjZiNTJ9XHU5MWQ0XHUzNDczXHV7MjU1M2Z9XHV7Mjc2MzJ9XHV7MjU1''@;'; put 'put ''NWV9XHU0NzE4XHV7MjU1NjJ9XHV7MjU1NjZ9XHV7MjU3Yzd9XHV7MjQ5M2Z9XHV7MjU4NWR9XHU1MDY2XHUzNGZiXHV7MjMzY2N9XHU2MGRlXHV7MjU5MDN9XHU0NzdjXHV7Mjg5NDh9XHV7MjVhYWV9XHV7MjViODl9XHV7MjVjMDZ9XHV7MjFkOTB9XHU1N2ExXHU3MTUxXHU2ZmI2XHV7MjYx''@;'; put 'put ''MDJ9XHV7MjdjMTJ9XHU5MDU2XHV7MjYxYjJ9XHV7MjRmOWF9XHU4YjYyXHV7MjY0MDJ9XHV7MjY0NGF9Il0sWyI5YzQwIiwiXHU1ZDViXHV7MjZiZjd9XHU4ZjM2XHV7MjY0ODR9XHV7MjE5MWN9XHU4YWVhXHV7MjQ5ZjZ9XHV7MjY0ODh9XHV7MjNmZWZ9XHV7MjY1MTJ9XHU0YmMwXHV7MjY1''@;'; put 'put ''YmZ9XHV7MjY2YjV9XHV7MjI3MWJ9XHU5NDY1XHV7MjU3ZTF9XHU2MTk1XHU1YTI3XHV7MmY4Y2R9XHU0ZmJiXHU1NmI5XHV7MjQ1MjF9XHV7MjY2ZmN9XHU0ZTZhXHV7MjQ5MzR9XHU5NjU2XHU2ZDhmXHV7MjZjYmR9XHUzNjE4XHU4OTc3XHV7MjY3OTl9XHV7MjY4NmV9XHV7MjY0MTF9XHV7''@;'; put 'put ''MjY4NWV9XHU3MWRmXHV7MjY4Yzd9XHU3YjQyXHV7MjkwYzB9XHV7MjBhMTF9XHV7MjY5MjZ9XHU5MTA0XHV7MjY5Mzl9XHU3YTQ1XHU5ZGYwXHV7MjY5ZmF9XHU5YTI2XHV7MjZhMmR9XHUzNjVmXHV7MjY0Njl9XHV7MjAwMjF9XHU3OTgzXHV7MjZhMzR9XHV7MjZiNWJ9XHU1ZDJjXHV7MjM1''@;'; put 'put ''MTl9XHU4M2NmXHV7MjZiOWR9XHU0NmQwXHV7MjZjYTR9XHU3NTNiXHU4ODY1XHV7MjZkYWV9XHU1OGI2Il0sWyI5Y2ExIiwiXHUzNzFjXHV7MjI1OGR9XHV7MjcwNGJ9XHV7MjcxY2R9XHUzYzU0XHV7MjcyODB9XHV7MjcyODV9XHU5MjgxXHV7MjIxN2F9XHV7MjcyOGJ9XHU5MzMwXHV7Mjcy''@;'; put 'put ''ZTZ9XHV7MjQ5ZDB9XHU2YzM5XHU5NDlmXHV7Mjc0NTB9XHV7MjBlZjh9XHU4ODI3XHU4OGY1XHV7MjI5MjZ9XHV7Mjg0NzN9XHV7MjE3YjF9XHU2ZWI4XHV7MjRhMmF9XHV7MjE4MjB9XHUzOWE0XHUzNmI5XHU1YzEwXHU3OWUzXHU0NTNmXHU2NmI2XHV7MjljYWR9XHV7Mjk4YTR9XHU4OTQz''@;'; put 'put ''XHV7Mjc3Y2N9XHV7Mjc4NTh9XHU1NmQ2XHU0MGRmXHV7MjE2MGF9XHUzOWExXHV7MjM3MmZ9XHV7MjgwZTh9XHV7MjEzYzV9XHU3MWFkXHU4MzY2XHV7Mjc5ZGR9XHV7MjkxYTh9XHU1YTY3XHU0Y2I3XHV7MjcwYWZ9XHV7Mjg5YWJ9XHV7Mjc5ZmR9XHV7MjdhMGF9XHV7MjdiMGJ9XHV7Mjdk''@;'; put 'put ''NjZ9XHV7MjQxN2F9XHU3YjQzXHU3OTdlXHV7MjgwMDl9XHU2ZmI1XHV7MmEyZGZ9XHU2YTAzXHV7MjgzMTh9XHU1M2EyXHV7MjZlMDd9XHU5M2JmXHU2ODM2XHU5NzVkXHV7MjgxNmZ9XHV7MjgwMjN9XHV7MjY5YjV9XHV7MjEzZWR9XHV7MjMyMmZ9XHV7MjgwNDh9XHU1ZDg1XHV7MjhjMzB9''@;'; put 'put ''XHV7MjgwODN9XHU1NzE1XHU5ODIzXHV7Mjg5NDl9XHU1ZGFiXHV7MjQ5ODh9XHU2NWJlXHU2OWQ1XHU1M2QyXHV7MjRhYTV9XHV7MjNmODF9XHUzYzExXHU2NzM2XHV7MjgwOTB9XHV7MjgwZjR9XHV7MjgxMmV9XHV7MjFmYTF9XHV7MjgxNGZ9Il0sWyI5ZDQwIiwiXHV7MjgxODl9XHV7Mjgx''@;'; put 'put ''YWZ9XHV7MjgyMWF9XHV7MjgzMDZ9XHV7MjgzMmZ9XHV7MjgzOGF9XHUzNWNhXHV7Mjg0Njh9XHV7Mjg2YWF9XHU0OGZhXHU2M2U2XHV7Mjg5NTZ9XHU3ODA4XHU5MjU1XHV7Mjg5Yjh9XHU0M2YyXHV7Mjg5ZTd9XHU0M2RmXHV7Mjg5ZTh9XHV7MjhiNDZ9XHV7MjhiZDR9XHU1OWY4XHV7Mjhj''@;'; put 'put ''MDl9XHU4ZjBiXHV7MjhmYzV9XHV7MjkwZWN9XHU3YjUxXHV7MjkxMTB9XHV7MjkxM2N9XHUzZGY3XHV7MjkxNWV9XHV7MjRhY2F9XHU4ZmQwXHU3MjhmXHU1NjhiXHV7Mjk0ZTd9XHV7Mjk1ZTl9XHV7Mjk1YjB9XHV7Mjk1Yjh9XHV7Mjk3MzJ9XHV7Mjk4ZDF9XHV7Mjk5NDl9XHV7Mjk5NmF9''@;'; put 'put ''XHV7Mjk5YzN9XHV7MjlhMjh9XHV7MjliMGV9XHV7MjlkNWF9XHV7MjlkOWJ9XHU3ZTlmXHV7MjllZjh9XHV7MjlmMjN9XHU0Y2E0XHU5NTQ3XHV7MmEyOTN9XHU3MWEyXHV7MmEyZmZ9XHU0ZDkxXHU5MDEyXHV7MmE1Y2J9XHU0ZDljXHV7MjBjOWN9XHU4ZmJlXHU1NWMxIl0sWyI5ZGExIiwi''@;'; put 'put ''XHU4ZmJhXHV7MjI0YjB9XHU4ZmI5XHV7MjRhOTN9XHU0NTA5XHU3ZTdmXHU2ZjU2XHU2YWIxXHU0ZWVhXHUzNGU0XHV7MjhiMmN9XHV7Mjc4OWR9XHUzNzNhXHU4ZTgwXHV7MjE3ZjV9XHV7MjgwMjR9XHV7MjhiNmN9XHV7MjhiOTl9XHV7MjdhM2V9XHV7MjY2YWZ9XHUzZGViXHV7Mjc2NTV9''@;'; put 'put ''XHV7MjNjYjd9XHV7MjU2MzV9XHV7MjU5NTZ9XHU0ZTlhXHV7MjVlODF9XHV7MjYyNTh9XHU1NmJmXHV7MjBlNmR9XHU4ZTBlXHU1YjZkXHV7MjNlODh9XHV7MjRjOWV9XHU2M2RlXHU2MmQwXHV7MjE3ZjZ9XHV7MjE4N2J9XHU2NTMwXHU1NjJkXHV7MjVjNGF9XHU1NDFhXHV7MjUzMTF9XHUz''@;'; put 'put ''ZGM2XHV7MjlkOTh9XHU0YzdkXHU1NjIyXHU1NjFlXHU3ZjQ5XHV7MjVlZDh9XHU1OTc1XHV7MjNkNDB9XHU4NzcwXHU0ZTFjXHV7MjBmZWF9XHV7MjBkNDl9XHV7MjM2YmF9XHU4MTE3XHU5ZDVlXHU4ZDE4XHU3NjNiXHU5YzQ1XHU3NjRlXHU3N2I5XHU5MzQ1XHU1NDMyXHU4MTQ4XHU4MmY3''@;'; put 'put ''XHU1NjI1XHU4MTMyXHU4NDE4XHU4MGJkXHU1NWVhXHU3OTYyXHU1NjQzXHU1NDE2XHV7MjBlOWR9XHUzNWNlXHU1NjA1XHU1NWYxXHU2NmYxXHV7MjgyZTJ9XHUzNjJkXHU3NTM0XHU1NWYwXHU1NWJhXHU1NDk3XHU1NTcyXHV7MjBjNDF9XHV7MjBjOTZ9XHU1ZWQwXHV7MjUxNDh9XHV7MjBl''@;'; put 'put ''NzZ9XHV7MjJjNjJ9Il0sWyI5ZTQwIiwiXHV7MjBlYTJ9XHU5ZWFiXHU3ZDVhXHU1NWRlXHV7MjEwNzV9XHU2MjlkXHU5NzZkXHU1NDk0XHU4Y2NkXHU3MWY2XHU5MTc2XHU2M2ZjXHU2M2I5XHU2M2ZlXHU1NTY5XHV7MjJiNDN9XHU5YzcyXHV7MjJlYjN9XHU1MTlhXHUzNGRmXHV7MjBkYTd9''@;'; put 'put ''XHU1MWE3XHU1NDRkXHU1NTFlXHU1NTEzXHU3NjY2XHU4ZTJkXHV7MjY4OGF9XHU3NWIxXHU4MGI2XHU4ODA0XHU4Nzg2XHU4OGM3XHU4MWI2XHU4NDFjXHV7MjEwYzF9XHU0NGVjXHU3MzA0XHV7MjQ3MDZ9XHU1YjkwXHU4MzBiXHV7MjY4OTN9XHU1NjdiXHV7MjI2ZjR9XHV7MjdkMmZ9XHV7''@;'; put 'put ''MjQxYTN9XHV7MjdkNzN9XHV7MjZlZDB9XHV7MjcyYjZ9XHU5MTcwXHV7MjExZDl9XHU5MjA4XHV7MjNjZmN9XHV7MmE2YTl9XHV7MjBlYWN9XHV7MjBlZjl9XHU3MjY2XHV7MjFjYTJ9XHU0NzRlXHV7MjRmYzJ9XHV7MjdmZjl9XHV7MjBmZWJ9XHU0MGZhIl0sWyI5ZWExIiwiXHU5YzVkXHU2''@;'; put 'put ''NTFmXHV7MjJkYTB9XHU0OGYzXHV7MjQ3ZTB9XHV7MjlkN2N9XHV7MjBmZWN9XHV7MjBlMGF9XHU2MDYyXHV7Mjc1YTN9XHV7MjBmZWR9Il0sWyI5ZWFkIiwiXHV7MjYwNDh9XHV7MjExODd9XHU3MWEzXHU3ZThlXHU5ZDUwXHU0ZTFhXHU0ZTA0XHUzNTc3XHU1YjBkXHU2Y2IyXHU1MzY3XHUz''@;'; put 'put ''NmFjXHUzOWRjXHU1MzdkXHUzNmE1XHV7MjQ2MTh9XHU1ODlhXHV7MjRiNmV9XHU4MjJkXHU1NDRiXHU1N2FhXHV7MjVhOTV9XHV7MjA5Nzl9Il0sWyI5ZWM1IiwiXHUzYTUyXHV7MjI0NjV9XHU3Mzc0XHV7MjllYWN9XHU0ZDA5XHU5YmVkXHV7MjNjZmV9XHV7MjlmMzB9XHU0YzViXHV7MjRm''@;'; put 'put ''YTl9XHV7Mjk1OWV9XHV7MjlmZGV9XHU4NDVjXHV7MjNkYjZ9XHV7MjcyYjJ9XHV7MjY3YjN9XHV7MjM3MjB9XHU2MzJlXHU3ZDI1XHV7MjNlZjd9XHV7MjNlMmN9XHUzYTJhXHU5MDA4XHU1MmNjXHUzZTc0XHUzNjdhXHU0NWU5XHV7MjA0OGV9XHU3NjQwXHU1YWYwXHV7MjBlYjZ9XHU3ODdh''@;'; put 'put ''XHV7MjdmMmV9XHU1OGE3XHU0MGJmXHU1NjdjXHU5YjhiXHU1ZDc0XHU3NjU0XHV7MmE0MzR9XHU5ZTg1XHU0Y2UxXHU3NWY5XHUzN2ZiXHU2MTE5XHV7MjMwZGF9XHV7MjQzZjJ9Il0sWyI5ZWY1IiwiXHU1NjVkXHV7MjEyYTl9XHU1N2E3XHV7MjQ5NjN9XHV7MjllMDZ9XHU1MjM0XHV7Mjcw''@;'; put 'put ''YWV9XHUzNWFkXHU2YzRhXHU5ZDdjIl0sWyI5ZjQwIiwiXHU3YzU2XHU5YjM5XHU1N2RlXHV7MjE3NmN9XHU1YzUzXHU2NGQzXHV7Mjk0ZDB9XHV7MjYzMzV9XHV7MjcxNjR9XHU4NmFkXHV7MjBkMjh9XHV7MjZkMjJ9XHV7MjRhZTJ9XHV7MjBkNzF9Il0sWyI5ZjRmIiwiXHU1MWZlXHV7MjFm''@;'; put 'put ''MGZ9XHU1ZDhlXHU5NzAzXHV7MjFkZDF9XHU5ZTgxXHU5MDRjXHU3YjFmXHU5YjAyXHU1Y2QxXHU3YmEzXHU2MjY4XHU2MzM1XHU5YWZmXHU3YmNmXHU5YjJhXHU3YzdlXHU5YjJlXHU3YzQyXHU3Yzg2XHU5YzE1XHU3YmZjXHU5YjA5XHU5ZjE3XHU5YzFiXHV7MjQ5M2V9XHU5ZjVhXHU1NTcz''@;'; put 'put ''XHU1YmMzXHU0ZmZkXHU5ZTk4XHU0ZmYyXHU1MjYwXHUzZTA2XHU1MmQxXHU1NzY3XHU1MDU2XHU1OWI3XHU1ZTEyXHU5N2M4XHU5ZGFiXHU4ZjVjXHU1NDY5XHU5N2I0XHU5OTQwXHU5N2JhXHU1MzJjXHU2MTMwIl0sWyI5ZmExIiwiXHU2OTJjXHU1M2RhXHU5YzBhXHU5ZDAyXHU0YzNiXHU5''@;'; put 'put ''NjQxXHU2OTgwXHU1MGE2XHU3NTQ2XHV7MjE3NmR9XHU5OWRhXHU1MjczIl0sWyI5ZmFlIiwiXHU5MTU5XHU5NjgxXHU5MTVjIl0sWyI5ZmIyIiwiXHU5MTUxXHV7MjhlOTd9XHU2MzdmXHV7MjZkMjN9XHU2YWNhXHU1NjExXHU5MThlXHU3NTdhXHU2Mjg1XHV7MjAzZmN9XHU3MzRmXHU3Yzcw''@;'; put 'put ''XHV7MjVjMjF9XHV7MjNjZmR9Il0sWyI5ZmMxIiwiXHV7MjQ5MTl9XHU3NmQ2XHU5YjlkXHU0ZTJhXHV7MjBjZDR9XHU4M2JlXHU4ODQyIl0sWyI5ZmM5IiwiXHU1YzRhXHU2OWMwXHU1MGVkXHU1NzdhXHU1MjFmXHU1ZGY1XHU0ZWNlXHU2YzMxXHV7MjAxZjJ9XHU0ZjM5XHU1NDljXHU1NGRh''@;'; put 'put ''XHU1MjlhXHU4ZDgyXHUzNWZlXHU1ZjBjXHUzNWYzIl0sWyI5ZmRiIiwiXHU2YjUyXHU5MTdjXHU5ZmE1XHU5Yjk3XHU5ODJlXHU5OGI0XHU5YWJhXHU5ZWE4XHU5ZTg0XHU3MTdhXHU3YjE0Il0sWyI5ZmU3IiwiXHU2YmZhXHU4ODE4XHU3Zjc4Il0sWyI5ZmViIiwiXHU1NjIwXHV7MmE2NGF9''@;'; put 'put ''XHU4ZTc3XHU5ZjUzIl0sWyI5ZmYwIiwiXHU4ZGQ0XHU4ZTRmXHU5ZTFjXHU4ZTAxXHU2MjgyXHV7MjgzN2R9XHU4ZTI4XHU4ZTc1XHU3YWQzXHV7MjRhNzd9XHU3YTNlXHU3OGQ4XHU2Y2VhXHU4YTY3XHU3NjA3Il0sWyJhMDQwIiwiXHV7MjhhNWF9XHU5ZjI2XHU2Y2NlXHU4N2Q2XHU3NWMz''@;'; put 'put ''XHV7MmEyYjJ9XHU3ODUzXHV7MmY4NDB9XHU4ZDBjXHU3MmUyXHU3MzcxXHU4YjJkXHU3MzAyXHU3NGYxXHU4Y2ViXHV7MjRhYmJ9XHU4NjJmXHU1ZmJhXHU4OGEwXHU0NGI3Il0sWyJhMDU1IiwiXHV7MjE4M2J9XHV7MjZlMDV9Il0sWyJhMDU4IiwiXHU4YTdlXHV7MjI1MWJ9Il0sWyJhMDVi''@;'; put 'put ''IiwiXHU2MGZkXHU3NjY3XHU5YWQ3XHU5ZDQ0XHU5MzZlXHU5YjhmXHU4N2Y1Il0sWyJhMDYzIiwiXHU4ODBmXHU4Y2Y3XHU3MzJjXHU5NzIxXHU5YmIwXHUzNWQ2XHU3MmIyXHU0YzA3XHU3YzUxXHU5OTRhXHV7MjYxNTl9XHU2MTU5XHU0YzA0XHU5ZTk2XHU2MTdkIl0sWyJhMDczIiwiXHU1''@;'; put 'put ''NzVmXHU2MTZmXHU2MmE2XHU2MjM5XHU2MmNlXHUzYTVjXHU2MWUyXHU1M2FhXHV7MjMzZjV9XHU2MzY0XHU2ODAyXHUzNWQyIl0sWyJhMGExIiwiXHU1ZDU3XHV7MjhiYzJ9XHU4ZmRhXHV7MjhlMzl9Il0sWyJhMGE2IiwiXHU1MGQ5XHV7MjFkNDZ9XHU3OTA2XHU1MzMyXHU5NjM4XHV7MjBm''@;'; put 'put ''M2J9XHU0MDY1Il0sWyJhMGFlIiwiXHU3N2ZlIl0sWyJhMGIwIiwiXHU3Y2MyXHV7MjVmMWF9XHU3Y2RhXHU3YTJkXHU4MDY2XHU4MDYzXHU3ZDRkXHU3NTA1XHU3NGYyXHU4OTk0XHU4MjFhXHU2NzBjXHU4MDYyXHV7Mjc0ODZ9XHU4MDViXHU3NGYwXHU4MTAzXHU3NzI0XHU4OTg5XHV7MjY3''@;'; put 'put ''Y2N9XHU3NTUzXHV7MjZlZDF9XHU4N2E5XHU4N2NlXHU4MWM4XHU4NzhjXHU4YTQ5XHU4Y2FkXHU4YjQzXHU3NzJiXHU3NGY4XHU4NGRhXHUzNjM1XHU2OWIyXHU4ZGE2Il0sWyJhMGQ0IiwiXHU4OWE5XHU3NDY4XHU2ZGI5XHU4N2MxXHV7MjQwMTF9XHU3NGU3XHUzZGRiXHU3MTc2XHU2MGE0''@;'; put 'put ''XHU2MTljXHUzY2QxXHU3MTYyXHU2MDc3Il0sWyJhMGUyIiwiXHU3ZjcxXHV7MjhiMmR9XHU3MjUwXHU2MGU5XHU0YjdlXHU1MjIwXHUzYzE4XHV7MjNjYzd9XHV7MjVlZDd9XHV7Mjc2NTZ9XHV7MjU1MzF9XHV7MjE5NDR9XHV7MjEyZmV9XHV7Mjk5MDN9XHV7MjZkZGN9XHV7MjcwYWR9XHU1''@;'; put 'put ''Y2MxXHV7MjYxYWR9XHV7MjhhMGZ9XHV7MjM2Nzd9XHV7MjAwZWV9XHV7MjY4NDZ9XHV7MjRmMGV9XHU0NTYyXHU1YjFmXHV7MjYzNGN9XHU5ZjUwXHU5ZWE2XHV7MjYyNmJ9Il0sWyJhM2MwIiwiXHUyNDAwIiwzMSwiXHUyNDIxIl0sWyJjNmExIiwiXHUyNDYwIiw5LCJcdTI0NzQiLDksIlx1''@;'; put 'put ''MjE3MCIsOSwiXHU0ZTM2XHU0ZTNmXHU0ZTg1XHU0ZWEwXHU1MTgyXHU1MTk2XHU1MWFiXHU1MmY5XHU1MzM4XHU1MzY5XHU1M2I2XHU1OTBhXHU1YjgwXHU1ZGRiXHUyZjMzXHU1ZTdmXHU1ZWY0XHU1ZjUwXHU1ZjYxXHU2NTM0XHU2NWUwXHU3NTkyXHU3Njc2XHU4ZmI1XHU5NmI2XHhhOFx1''@;'; put 'put ''MDJjNlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1ZmYzYlx1ZmYzZFx1MjczZFx1MzA0MSIsMjNdLFsiYzc0MCIsIlx1MzA1OSIsNTgsIlx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNCJdLFsiYzdhMSIsIlx1MzBhNSIsODEsIlx1''@;'; put 'put ''MDQxMCIsNSwiXHUwNDAxXHUwNDE2Iiw0XSxbImM4NDAiLCJcdTA0MWIiLDI2LCJcdTA0NTFcdTA0MzYiLDI1LCJcdTIxZTdcdTIxYjhcdTIxYjlcdTMxY2ZcdXsyMDBjY31cdTRlNWFcdXsyMDA4YX1cdTUyMDJcdTQ0OTEiXSxbImM4YTEiLCJcdTlmYjBcdTUxODhcdTlmYjFcdXsyNzYwN30i''@;'; put 'put ''XSxbImM4Y2QiLCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTMwOWJcdTMwOWNcdTJlODBcdTJlODRcdTJlODZcdTJlODdcdTJlODhcdTJlOGFcdTJlOGNcdTJlOGRcdTJlOTVcdTJlOWNcdTJlOWRcdTJlYTVcdTJlYTdcdTJlYWFcdTJlYWNcdTJlYWVcdTJl''@;'; put 'put ''YjZcdTJlYmNcdTJlYmVcdTJlYzZcdTJlY2FcdTJlY2NcdTJlY2RcdTJlY2ZcdTJlZDZcdTJlZDdcdTJlZGVcdTJlZTMiXSxbImM4ZjUiLCJcdTAyODNcdTAyNTBcdTAyNWJcdTAyNTRcdTAyNzVcdTAxNTNceGY4XHUwMTRiXHUwMjhhXHUwMjZhIl0sWyJmOWZlIiwiXHVmZmVkIl0sWyJmYTQw''@;'; put 'put ''IiwiXHV7MjA1NDd9XHU5MmRiXHV7MjA1ZGZ9XHV7MjNmYzV9XHU4NTRjXHU0MmI1XHU3M2VmXHU1MWI1XHUzNjQ5XHV7MjQ5NDJ9XHV7Mjg5ZTR9XHU5MzQ0XHV7MjE5ZGJ9XHU4MmVlXHV7MjNjYzh9XHU3ODNjXHU2NzQ0XHU2MmRmXHV7MjQ5MzN9XHV7Mjg5YWF9XHV7MjAyYTB9XHV7MjZi''@;'; put 'put ''YjN9XHV7MjEzMDV9XHU0ZmFiXHV7MjI0ZWR9XHU1MDA4XHV7MjZkMjl9XHV7MjdhODR9XHV7MjM2MDB9XHV7MjRhYjF9XHV7MjI1MTN9XHU1MDI5XHV7MjAzN2V9XHU1ZmE0XHV7MjAzODB9XHV7MjAzNDd9XHU2ZWRiXHV7MjA0MWZ9XHU1MDdkXHU1MTAxXHUzNDdhXHU1MTBlXHU5ODZjXHUz''@;'; put 'put ''NzQzXHU4NDE2XHV7MjQ5YTR9XHV7MjA0ODd9XHU1MTYwXHV7MjMzYjR9XHU1MTZhXHV7MjBiZmZ9XHV7MjIwZmN9XHV7MjAyZTV9XHV7MjI1MzB9XHV7MjA1OGV9XHV7MjMyMzN9XHV7MjE5ODN9XHU1YjgyXHU4NzdkXHV7MjA1YjN9XHV7MjNjOTl9XHU1MWIyXHU1MWI4Il0sWyJmYWExIiwi''@;'; put 'put ''XHU5ZDM0XHU1MWM5XHU1MWNmXHU1MWQxXHUzY2RjXHU1MWQzXHV7MjRhYTZ9XHU1MWIzXHU1MWUyXHU1MzQyXHU1MWVkXHU4M2NkXHU2OTNlXHV7MjM3MmR9XHU1ZjdiXHU1MjBiXHU1MjI2XHU1MjNjXHU1MmI1XHU1MjU3XHU1Mjk0XHU1MmI5XHU1MmM1XHU3YzE1XHU4NTQyXHU1MmUwXHU4''@;'; put 'put ''NjBkXHV7MjZiMTN9XHU1MzA1XHV7MjhhZGV9XHU1NTQ5XHU2ZWQ5XHV7MjNmODB9XHV7MjA5NTR9XHV7MjNmZWN9XHU1MzMzXHU1MzQ0XHV7MjBiZTJ9XHU2Y2NiXHV7MjE3MjZ9XHU2ODFiXHU3M2Q1XHU2MDRhXHUzZWFhXHUzOGNjXHV7MjE2ZTh9XHU3MWRkXHU0NGEyXHU1MzZkXHU1Mzc0''@;'; put 'put ''XHV7Mjg2YWJ9XHU1MzdlXHU1MzdmXHV7MjE1OTZ9XHV7MjE2MTN9XHU3N2U2XHU1MzkzXHV7MjhhOWJ9XHU1M2EwXHU1M2FiXHU1M2FlXHU3M2E3XHV7MjU3NzJ9XHUzZjU5XHU3MzljXHU1M2MxXHU1M2M1XHU2YzQ5XHU0ZTQ5XHU1N2ZlXHU1M2Q5XHUzYWFiXHV7MjBiOGZ9XHU1M2UwXHV7''@;'; put 'put ''MjNmZWJ9XHV7MjJkYTN9XHU1M2Y2XHV7MjBjNzd9XHU1NDEzXHU3MDc5XHU1NTJiXHU2NjU3XHU2ZDViXHU1NDZkXHV7MjZiNTN9XHV7MjBkNzR9XHU1NTVkXHU1NDhmXHU1NGE0XHU0N2E2XHV7MjE3MGR9XHV7MjBlZGR9XHUzZGI0XHV7MjBkNGR9Il0sWyJmYjQwIiwiXHV7Mjg5YmN9XHV7''@;'; put 'put ''MjI2OTh9XHU1NTQ3XHU0Y2VkXHU1NDJmXHU3NDE3XHU1NTg2XHU1NWE5XHU1NjA1XHV7MjE4ZDd9XHV7MjQwM2F9XHU0NTUyXHV7MjQ0MzV9XHU2NmIzXHV7MjEwYjR9XHU1NjM3XHU2NmNkXHV7MjMyOGF9XHU2NmE0XHU2NmFkXHU1NjRkXHU1NjRmXHU3OGYxXHU1NmYxXHU5Nzg3XHU1M2Zl''@;'; put 'put ''XHU1NzAwXHU1NmVmXHU1NmVkXHV7MjhiNjZ9XHUzNjIzXHV7MjEyNGZ9XHU1NzQ2XHV7MjQxYTV9XHU2YzZlXHU3MDhiXHU1NzQyXHUzNmIxXHV7MjZjN2V9XHU1N2U2XHV7MjE0MTZ9XHU1ODAzXHV7MjE0NTR9XHV7MjQzNjN9XHU1ODI2XHV7MjRiZjV9XHU1ODVjXHU1OGFhXHUzNTYxXHU1''@;'; put 'put ''OGUwXHU1OGRjXHV7MjEyM2N9XHU1OGZiXHU1YmZmXHU1NzQzXHV7MmExNTB9XHV7MjQyNzh9XHU5M2QzXHUzNWExXHU1OTFmXHU2OGE2XHUzNmMzXHU2ZTU5Il0sWyJmYmExIiwiXHV7MjE2M2V9XHU1YTI0XHU1NTUzXHV7MjE2OTJ9XHU4NTA1XHU1OWM5XHV7MjBkNGV9XHV7MjZjODF9XHV7''@;'; put 'put ''MjZkMmF9XHV7MjE3ZGN9XHU1OWQ5XHV7MjE3ZmJ9XHV7MjE3YjJ9XHV7MjZkYTZ9XHU2ZDcxXHV7MjE4Mjh9XHV7MjE2ZDV9XHU1OWY5XHV7MjZlNDV9XHU1YWFiXHU1YTYzXHUzNmU2XHV7MjQ5YTl9XHU1YTc3XHUzNzA4XHU1YTk2XHU3NDY1XHU1YWQzXHV7MjZmYTF9XHV7MjI1NTR9XHUz''@;'; put 'put ''ZDg1XHV7MjE5MTF9XHUzNzMyXHV7MjE2Yjh9XHU1ZTgzXHU1MmQwXHU1Yjc2XHU2NTg4XHU1YjdjXHV7MjdhMGV9XHU0MDA0XHU0ODVkXHV7MjAyMDR9XHU1YmQ1XHU2MTYwXHV7MjFhMzR9XHV7MjU5Y2N9XHV7MjA1YTV9XHU1YmYzXHU1YjlkXHU0ZDEwXHU1YzA1XHV7MjFiNDR9XHU1YzEz''@;'; put 'put ''XHU3M2NlXHU1YzE0XHV7MjFjYTV9XHV7MjZiMjh9XHU1YzQ5XHU0OGRkXHU1Yzg1XHU1Y2U5XHU1Y2VmXHU1ZDhiXHV7MjFkZjl9XHV7MjFlMzd9XHU1ZDEwXHU1ZDE4XHU1ZDQ2XHV7MjFlYTR9XHU1Y2JhXHU1ZGQ3XHU4MmZjXHUzODJkXHV7MjQ5MDF9XHV7MjIwNDl9XHV7MjIxNzN9XHU4''@;'; put 'put ''Mjg3XHUzODM2XHUzYmMyXHU1ZTJlXHU2YThhXHU1ZTc1XHU1ZTdhXHV7MjQ0YmN9XHV7MjBjZDN9XHU1M2E2XHU0ZWI3XHU1ZWQwXHU1M2E4XHV7MjE3NzF9XHU1ZTA5XHU1ZWY0XHV7Mjg0ODJ9Il0sWyJmYzQwIiwiXHU1ZWY5XHU1ZWZiXHUzOGEwXHU1ZWZjXHU2ODNlXHU5NDFiXHU1ZjBk''@;'; put 'put ''XHV7MjAxYzF9XHV7MmY4OTR9XHUzYWRlXHU0OGFlXHV7MjEzM2F9XHU1ZjNhXHV7MjY4ODh9XHV7MjIzZDB9XHU1ZjU4XHV7MjI0NzF9XHU1ZjYzXHU5N2JkXHV7MjZlNmV9XHU1ZjcyXHU5MzQwXHV7MjhhMzZ9XHU1ZmE3XHU1ZGI2XHUzZDVmXHV7MjUyNTB9XHV7MjFmNmF9XHV7MjcwZjh9''@;'; put 'put ''XHV7MjI2Njh9XHU5MWQ2XHV7MjAyOWV9XHV7MjhhMjl9XHU2MDMxXHU2Njg1XHV7MjE4Nzd9XHUzOTYzXHUzZGM3XHUzNjM5XHU1NzkwXHV7MjI3YjR9XHU3OTcxXHUzZTQwXHU2MDllXHU2MGE0XHU2MGIzXHV7MjQ5ODJ9XHV7MjQ5OGZ9XHV7MjdhNTN9XHU3NGE0XHU1MGUxXHU1YWEwXHU2''@;'; put 'put ''MTY0XHU4NDI0XHU2MTQyXHV7MmY4YTZ9XHV7MjZlZDJ9XHU2MTgxXHU1MWY0XHV7MjA2NTZ9XHU2MTg3XHU1YmFhXHV7MjNmYjd9Il0sWyJmY2ExIiwiXHV7MjI4NWZ9XHU2MWQzXHV7MjhiOWR9XHV7Mjk5NWR9XHU2MWQwXHUzOTMyXHV7MjI5ODB9XHV7MjI4YzF9XHU2MDIzXHU2MTVjXHU2''@;'; put 'put ''NTFlXHU2MzhiXHV7MjAxMTh9XHU2MmM1XHV7MjE3NzB9XHU2MmQ1XHV7MjJlMGR9XHU2MzZjXHV7MjQ5ZGZ9XHUzYTE3XHU2NDM4XHU2M2Y4XHV7MjEzOGV9XHV7MjE3ZmN9XHU2NDkwXHU2ZjhhXHV7MjJlMzZ9XHU5ODE0XHV7MjQwOGN9XHV7MjU3MWR9XHU2NGUxXHU2NGU1XHU5NDdiXHUz''@;'; put 'put ''YTY2XHU2NDNhXHUzYTU3XHU2NTRkXHU2ZjE2XHV7MjRhMjh9XHV7MjRhMjN9XHU2NTg1XHU2NTZkXHU2NTVmXHV7MjMwN2V9XHU2NWI1XHV7MjQ5NDB9XHU0YjM3XHU2NWQxXHU0MGQ4XHV7MjE4Mjl9XHU2NWUwXHU2NWUzXHU1ZmRmXHV7MjM0MDB9XHU2NjE4XHV7MjMxZjd9XHV7MjMxZjh9''@;'; put 'put ''XHU2NjQ0XHV7MjMxYTR9XHV7MjMxYTV9XHU2NjRiXHV7MjBlNzV9XHU2NjY3XHV7MjUxZTZ9XHU2NjczXHU2Njc0XHV7MjFlM2R9XHV7MjMyMzF9XHV7Mjg1ZjR9XHV7MjMxYzh9XHV7MjUzMTN9XHU3N2M1XHV7MjI4Zjd9XHU5OWE0XHU2NzAyXHV7MjQzOWN9XHV7MjRhMjF9XHUzYjJiXHU2''@;'; put 'put ''OWZhXHV7MjM3YzJ9XHU2NzVlXHU2NzY3XHU2NzYyXHV7MjQxY2R9XHV7MjkwZWR9XHU2N2Q3XHU0NGU5XHU2ODIyXHU2ZTUwXHU5MjNjXHU2ODAxXHV7MjMzZTZ9XHV7MjZkYTB9XHU2ODVkIl0sWyJmZDQwIiwiXHV7MjM0NmZ9XHU2OWUxXHU2YTBiXHV7MjhhZGZ9XHU2OTczXHU2OGMzXHV7''@;'; put 'put ''MjM1Y2R9XHU2OTAxXHU2OTAwXHUzZDMyXHUzYTAxXHV7MjM2M2N9XHUzYjgwXHU2N2FjXHU2OTYxXHV7MjhhNGF9XHU0MmZjXHU2OTM2XHU2OTk4XHUzYmExXHV7MjAzYzl9XHU4MzYzXHU1MDkwXHU2OWY5XHV7MjM2NTl9XHV7MjIxMmF9XHU2YTQ1XHV7MjM3MDN9XHU2YTlkXHUzYmYzXHU2''@;'; put 'put ''N2IxXHU2YWM4XHV7MjkxOWN9XHUzYzBkXHU2YjFkXHV7MjA5MjN9XHU2MGRlXHU2YjM1XHU2Yjc0XHV7MjI3Y2R9XHU2ZWI1XHV7MjNhZGJ9XHV7MjAzYjV9XHV7MjE5NTh9XHUzNzQwXHU1NDIxXHV7MjNiNWF9XHU2YmUxXHV7MjNlZmN9XHU2YmRjXHU2YzM3XHV7MjI0OGJ9XHV7MjQ4ZjF9''@;'; put 'put ''XHV7MjZiNTF9XHU2YzVhXHU4MjI2XHU2Yzc5XHV7MjNkYmN9XHU0NGM1XHV7MjNkYmR9XHV7MjQxYTR9XHV7MjQ5MGN9XHV7MjQ5MDB9Il0sWyJmZGExIiwiXHV7MjNjYzl9XHUzNmU1XHUzY2ViXHV7MjBkMzJ9XHU5YjgzXHV7MjMxZjl9XHV7MjI0OTF9XHU3ZjhmXHU2ODM3XHV7MjZkMjV9''@;'; put 'put ''XHV7MjZkYTF9XHV7MjZkZWJ9XHU2ZDk2XHU2ZDVjXHU2ZTdjXHU2ZjA0XHV7MjQ5N2Z9XHV7MjQwODV9XHV7MjZlNzJ9XHU4NTMzXHV7MjZmNzR9XHU1MWM3XHU2YzljXHU2ZTFkXHU4NDJlXHV7MjhiMjF9XHU2ZTJmXHV7MjNlMmZ9XHU3NDUzXHV7MjNmODJ9XHU3OWNjXHU2ZTRmXHU1YTkx''@;'; put 'put ''XHV7MjMwNGJ9XHU2ZmY4XHUzNzBkXHU2ZjlkXHV7MjNlMzB9XHU2ZWZhXHV7MjE0OTd9XHV7MjQwM2R9XHU0NTU1XHU5M2YwXHU2ZjQ0XHU2ZjVjXHUzZDRlXHU2Zjc0XHV7MjkxNzB9XHUzZDNiXHU2ZjlmXHV7MjQxNDR9XHU2ZmQzXHV7MjQwOTF9XHV7MjQxNTV9XHV7MjQwMzl9XHV7MjNm''@;'; put 'put ''ZjB9XHV7MjNmYjR9XHV7MjQxM2Z9XHU1MWRmXHV7MjQxNTZ9XHV7MjQxNTd9XHV7MjQxNDB9XHV7MjYxZGR9XHU3MDRiXHU3MDdlXHU3MGE3XHU3MDgxXHU3MGNjXHU3MGQ1XHU3MGQ2XHU3MGRmXHU0MTA0XHUzZGU4XHU3MWI0XHU3MTk2XHV7MjQyNzd9XHU3MTJiXHU3MTQ1XHU1YTg4XHU3''@;'; put 'put ''MTRhXHU3MTZlXHU1YzljXHV7MjQzNjV9XHU3MTRmXHU5MzYyXHV7MjQyYzF9XHU3MTJjXHV7MjQ0NWF9XHV7MjRhMjd9XHV7MjRhMjJ9XHU3MWJhXHV7MjhiZTh9XHU3MGJkXHU3MjBlIl0sWyJmZTQwIiwiXHU5NDQyXHU3MjE1XHU1OTExXHU5NDQzXHU3MjI0XHU5MzQxXHV7MjU2MDV9XHU3''@;'; put 'put ''MjJlXHU3MjQwXHV7MjQ5NzR9XHU2OGJkXHU3MjU1XHU3MjU3XHUzZTU1XHV7MjMwNDR9XHU2ODBkXHU2ZjNkXHU3MjgyXHU3MzJhXHU3MzJiXHV7MjQ4MjN9XHV7Mjg4MmJ9XHU0OGVkXHV7Mjg4MDR9XHU3MzI4XHU3MzJlXHU3M2NmXHU3M2FhXHV7MjBjM2F9XHV7MjZhMmV9XHU3M2M5XHU3''@;'; put 'put ''NDQ5XHV7MjQxZTJ9XHV7MjE2ZTd9XHV7MjRhMjR9XHU2NjIzXHUzNmM1XHV7MjQ5Yjd9XHV7MjQ5OGR9XHV7MjQ5ZmJ9XHU3M2Y3XHU3NDE1XHU2OTAzXHV7MjRhMjZ9XHU3NDM5XHV7MjA1YzN9XHUzZWQ3XHU3NDVjXHV7MjI4YWR9XHU3NDYwXHV7MjhlYjJ9XHU3NDQ3XHU3M2U0XHU3NDc2''@;'; put 'put ''XHU4M2I5XHU3NDZjXHUzNzMwXHU3NDc0XHU5M2YxXHU2YTJjXHU3NDgyXHU0OTUzXHV7MjRhOGN9Il0sWyJmZWExIiwiXHV7MjQxNWZ9XHV7MjRhNzl9XHV7MjhiOGZ9XHU1YjQ2XHV7MjhjMDN9XHV7MjE4OWV9XHU3NGM4XHV7MjE5ODh9XHU3NTBlXHU3NGU5XHU3NTFlXHV7MjhlZDl9XHV7''@;'; put 'put ''MjFhNGJ9XHU1YmQ3XHV7MjhlYWN9XHU5Mzg1XHU3NTRkXHU3NTRhXHU3NTY3XHU3NTZlXHV7MjRmODJ9XHUzZjA0XHV7MjRkMTN9XHU3NThlXHU3NDVkXHU3NTllXHU3NWI0XHU3NjAyXHU3NjJjXHU3NjUxXHU3NjRmXHU3NjZmXHU3Njc2XHV7MjYzZjV9XHU3NjkwXHU4MWVmXHUzN2Y4XHV7''@;'; put 'put ''MjY5MTF9XHV7MjY5MGV9XHU3NmExXHU3NmE1XHU3NmI3XHU3NmNjXHV7MjZmOWZ9XHU4NDYyXHV7MjUwOWR9XHV7MjUxN2R9XHV7MjFlMWN9XHU3NzFlXHU3NzI2XHU3NzQwXHU2NGFmXHV7MjUyMjB9XHU3NzU4XHV7MjMyYWN9XHU3N2FmXHV7Mjg5NjR9XHV7Mjg5Njh9XHV7MjE2YzF9XHU3''@;'; put 'put ''N2Y0XHU3ODA5XHV7MjEzNzZ9XHV7MjRhMTJ9XHU2OGNhXHU3OGFmXHU3OGM3XHU3OGQzXHU5NmE1XHU3OTJlXHV7MjU1ZTB9XHU3OGQ3XHU3OTM0XHU3OGIxXHV7Mjc2MGN9XHU4ZmI4XHU4ODg0XHV7MjhiMmJ9XHV7MjYwODN9XHV7MjI2MWN9XHU3OTg2XHU4OTAwXHU2OTAyXHU3OTgwXHV7''@;'; put 'put ''MjU4NTd9XHU3OTlkXHV7MjdiMzl9XHU3OTNjXHU3OWE5XHU2ZTJhXHV7MjcxMjZ9XHUzZWE4XHU3OWM2XHV7MjkxMGR9XHU3OWQ0Il1dJyl9LDc0NDg4KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3LCJcdTIwYWMiXSxbIjgxNDAi''@;'; put 'put ''LCJcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFc''@;'; put 'put ''dTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmEiLDUsIlx1NGU3Mlx1NGU3NCIsOSwiXHU0ZTdmIiw2LCJcdTRlODdcdTRlOGEiXSxbIjgxODAiLCJcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVc''@;'; put 'put ''dTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRl''@;'; put 'put ''ZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRmMDIiLDYsIlx1NGYwYlx1NGYwY1x1NGYxMiIsNCwiXHU0ZjFjXHU0ZjFkXHU0ZjIxXHU0ZjIzXHU0ZjI4XHU0ZjI5XHU0ZjJjXHU0ZjJkXHU0ZjJlXHU0ZjMxXHU0ZjMzXHU0ZjM1XHU0''@;'; put 'put ''ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlIiw0LCJcdTRmNDRcdTRmNDVcdTRmNDciLDUsIlx1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1''@;'; put 'put ''NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMiJdLFsiODI0MCIsIlx1NGZhNFx1NGZhYlx1NGZhZFx1NGZi''@;'; put 'put ''MCIsNCwiXHU0ZmI2Iiw4LCJcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDIiLDQsIlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZm''@;'; put 'put ''NVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZiIsMTFdLFsiODI4MCIsIlx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAy''@;'; put 'put ''ZiIsMTAsIlx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MCIsNCwiXHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1MDViXHU1MDVkIiw3LCJcdTUwNjYiLDUsIlx1NTA2ZCIsOCwiXHU1MDc4''@;'; put 'put ''XHU1MDc5XHU1MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlIiwyMCwiXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkIiw0LCJcdTUwYjMiLDYsIlx1NTBiYyJdLFsiODM0MCIsIlx1NTBi''@;'; put 'put ''ZCIsMTcsIlx1NTBkMCIsNSwiXHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiIiwxMCwiXHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2Iiw0LCJcdTUwZmMiLDksIlx1NTEwOCJdLFsiODM4MCIsIlx1NTEwOVx1NTEwYVx1NTEwYyIsNSwi''@;'; put 'put ''XHU1MTEzIiwxMywiXHU1MTIyIiwyOCwiXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkIiw0LCJcdTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUx''@;'; put 'put ''N2FcdTUxN2VcdTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUxOWVcdTUxOWZcdTUxYTFcdTUxYTNcdTUxYTYiLDQsIlx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1''@;'; put 'put ''NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMiIsNV0sWyI4NDQwIiwiXHU1MWQ4XHU1MWQ5XHU1MWRhXHU1MWRjXHU1MWRlXHU1MWRmXHU1MWUyXHU1MWUzXHU1MWU1Iiw1LCJcdTUxZWNcdTUx''@;'; put 'put ''ZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZc''@;'; put 'put ''dTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDQiLDUsIlx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OCJdLFsiODQ4MCIsIlx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2''@;'; put 'put ''Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3MyIsOSwiXHU1MjdlXHU1MjgwXHU1MjgzIiw0LCJcdTUyODkiLDYsIlx1NTI5MVx1NTI5Mlx1NTI5NCIsNiwiXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFlXHU1MmFmXHU1MmIwXHU1MmI0''@;'; put 'put ''Iiw5LCJcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDkiLDUsIlx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNSIsMTAsIlx1NTJmMSIsNywi''@;'; put 'put ''XHU1MmZiXHU1MmZjXHU1MmZkXHU1MzAxXHU1MzAyXHU1MzAzXHU1MzA0XHU1MzA3XHU1MzA5XHU1MzBhXHU1MzBiXHU1MzBjXHU1MzBlIl0sWyI4NTQwIiwiXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0XHU1MzI1XHU1''@;'; put 'put ''MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmIiw5LCJcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRc''@;'; put 'put ''dTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGYiXSxbIjg1ODAiLCJcdTUzOTAiLDQsIlx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNh''@;'; put 'put ''NFx1NTNhN1x1NTNhYVx1NTNhYlx1NTNhY1x1NTNhZFx1NTNhZiIsNiwiXHU1M2I3XHU1M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzIiw0LCJcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUz''@;'; put 'put ''ZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2Zc''@;'; put 'put ''dTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWQiLDQsIlx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OSIsNywiXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3''@;'; put 'put ''XHU1NDg4XHU1NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExIl0sWyI4NjQwIiwiXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1''@;'; put 'put ''NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwIiw0LCJcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjQiLDUsIlx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYSIsNCwiXHU1NTEyXHU1NTEzXHU1''@;'; put 'put ''NTE1Iiw1LCJcdTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjYiXSxbIjg2ODAiLCJcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVcdTU1MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdc''@;'; put 'put ''dTU1NDhcdTU1NGIiLDQsIlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1NyIsNCwiXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmIiw1LCJcdTU1NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRc''@;'; put 'put ''dTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdcdTU1OWFcdTU1OWJcdTU1OWVcdTU1YTAiLDYsIlx1NTVhOCIsOCwiXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmIiw0LCJcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2Vc''@;'; put 'put ''dTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDciLDQsIlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOCIsNCwiXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1Il0sWyI4NzQwIiwiXHU1NjA2XHU1NjA3XHU1NjBh''@;'; put 'put ''XHU1NjBiXHU1NjBkXHU1NjEwIiw3LCJcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2''@;'; put 'put ''M2VcdTU2NDAiLDExLCJcdTU2NGYiLDQsIlx1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZCIsNF0sWyI4NzgwIiwiXHU1NjYzXHU1NjY1XHU1NjY2XHU1NjY3XHU1NjZkXHU1NjZlXHU1NjZmXHU1NjcwXHU1NjcyXHU1NjczXHU1Njc0XHU1Njc1XHU1Njc3XHU1Njc4XHU1Njc5XHU1Njdh''@;'; put 'put ''XHU1NjdkIiw3LCJcdTU2ODciLDYsIlx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NCIsMTQsIlx1NTZhNCIsMTAsIlx1NTZiMCIsNiwiXHU1NmI4XHU1NmI5XHU1NmJhXHU1NmJiXHU1NmJkIiwxMiwiXHU1NmNiIiw4LCJcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTUi''@;'; put 'put ''LDUsIlx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYiIsNl0sWyI4ODQwIiwiXHU1NzEyIiw5LCJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3''@;'; put 'put ''MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzQiLDQsIlx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1MiIsNCwiXHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1''@;'; put 'put ''NzZlXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1NzgwIl0sWyI4ODgwIiwiXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkIiw0LCJcdTU3OTQiLDYsIlx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1''@;'; put 'put ''NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOSIsOCwiXHU1N2M0Iiw2LCJcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNc''@;'; put 'put ''dTU3ZTUiLDcsIlx1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgx''@;'; put 'put ''NFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNSIsNCwiXHU1ODJiIiw0LCJcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzYiLDddLFsiODk0MCIsIlx1NTgzZSIsNSwiXHU1ODQ1Iiw2LCJcdTU4NGVcdTU4NGZcdTU4''@;'; put 'put ''NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTkiLDQsIlx1NTg1ZiIsNSwiXHU1ODY2Iiw0LCJcdTU4NmQiLDE2LCJcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJcdTU4OGMiXSxbIjg5ODAiLCJcdTU4OGQiLDQsIlx1NTg5NCIsNCwi''@;'; put 'put ''XHU1ODliXHU1ODljXHU1ODlkXHU1OGEwIiw3LCJcdTU4YWEiLDE3LCJcdTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzYiLDEwLCJcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDYiLDEzLCJcdTU4ZTUiLDUsIlx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThm''@;'; put 'put ''NFx1NThmNVx1NThmN1x1NThmOFx1NThmYSIsNywiXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4Iiw0LCJcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThcdTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5''@;'; put 'put ''MzBcdTU5MzJcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2IiXSxbIjhhNDAiLCJcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWIiLDQsIlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2NiIs''@;'; put 'put ''MTIsIlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlh''@;'; put 'put ''Mlx1NTlhNiJdLFsiOGE4MCIsIlx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliMyIsNSwiXHU1OWJhXHU1OWJjXHU1OWJkXHU1OWJmIiw2LCJcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGUiLDQs''@;'; put 'put ''Ilx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZCIsMTEsIlx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1''@;'; put 'put ''NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYSIsNiwiXHU1YTMzXHU1YTM1XHU1YTM3Iiw0LCJcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDEiLDQsIlx1NWE0N1x1NWE0OFx1NWE0YiIsOSwiXHU1YTU2XHU1YTU3XHU1YTU4XHU1YTU5XHU1''@;'; put 'put ''YTViIiw1XSxbIjhiNDAiLCJcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmIiLDgsIlx1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MCIsMTcsIlx1NWE5MyIsNiwiXHU1YTljIiwxMywiXHU1YWFiXHU1YWFjIl0sWyI4YjgwIiwi''@;'; put 'put ''XHU1YWFkIiw0LCJcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjkiLDQsIlx1NWFiZlx1NWFjMFx1NWFjMyIsNSwiXHU1YWNhXHU1YWNiXHU1YWNkIiw0LCJcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdc''@;'; put 'put ''dTVhZThcdTVhZWFcdTVhZWMiLDQsIlx1NWFmMiIsMjIsIlx1NWIwYSIsMTEsIlx1NWIxOCIsMjUsIlx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOCIsNywiXHU1YjQxIiw2XSxbIjhjNDAiLCJcdTViNDgiLDcsIlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2''@;'; put 'put ''Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1''@;'; put 'put ''NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZiJdLFsiOGM4MCIsIlx1NWJkMVx1NWJkNCIsOCwiXHU1YmUwXHU1YmUyXHU1YmUz''@;'; put 'put ''XHU1YmU2XHU1YmU3XHU1YmU5Iiw0LCJcdTViZWZcdTViZjEiLDYsIlx1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMy''@;'; put 'put ''MFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1''@;'; put 'put ''NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2NyIsNiwiXHU1YzcwXHU1YzcyIiw2LCJcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVjODMiLDQsIlx1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1''@;'; put 'put ''NWM5ZCIsNCwiXHU1Y2E0Iiw0XSxbIjhkNDAiLCJcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzUiLDUsIlx1NWNjYyIsNSwiXHU1Y2QzIiw1LCJcdTVjZGEiLDYsIlx1''@;'; put 'put ''NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMSIsOSwiXHU1Y2ZjIiw0XSxbIjhkODAiLCJcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDgiLDUsIlx1NWQwZiIsNCwiXHU1ZDE1XHU1ZDE3XHU1ZDE4XHU1ZDE5XHU1ZDFhXHU1ZDFjXHU1ZDFkXHU1ZDFm''@;'; put 'put ''Iiw0LCJcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmYiLDQsIlx1NWQzNSIsNywiXHU1ZDNmIiw3LCJcdTVkNDhcdTVkNDlcdTVkNGQiLDEwLCJcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWUiLDEwLCJcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNc''@;'; put 'put ''dTVkNzUiLDEyLCJcdTVkODMiLDIxLCJcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTAiXSxbIjhlNDAiLCJcdTVkYTEiLDIxLCJcdTVkYjgiLDEyLCJcdTVkYzYiLDYsIlx1NWRjZSIsMTIsIlx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRl''@;'; put 'put ''ZCJdLFsiOGU4MCIsIlx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOCIsNCwiXHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlIiw3LCJcdTVlMjgiLDQsIlx1NWUyZlx1NWUzMFx1NWUzMiIsNCwiXHU1ZTM5''@;'; put 'put ''XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2Iiw1LCJcdTVlNGQiLDYsIlx1NWU1NiIsNCwiXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzIiwxNCwiXHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5''@;'; put 'put ''XHU1ZThjXHU1ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4Iiw0LCJcdTVlYWUiLDQsIlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZiIsNl0sWyI4ZjQwIiwiXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiIiw1''@;'; put 'put ''LCJcdTVlZDRcdTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGMiLDExLCJcdTVlZTlcdTVlZWIiLDgsIlx1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1''@;'; put 'put ''NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNCJdLFsiOGY4MCIsIlx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMiIsNiwiXHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxIiwxNCwiXHU1ZjUxXHU1ZjU0XHU1ZjU5''@;'; put 'put ''XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1''@;'; put 'put ''ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyIiw1LCJcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWYiLDUsIlx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZSIsNCwiXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1''@;'; put 'put ''ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3Il0sWyI5''@;'; put 'put ''MDQwIiwiXHU2MDA4XHU2MDA5XHU2MDBiXHU2MDBjXHU2MDEwXHU2MDExXHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFlXHU2MDFmXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJjXHU2MDJkXHU2MDJlXHU2MDMwIiw0LCJcdTYwMzYiLDQsIlx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NCIsNiwi''@;'; put 'put ''XHU2MDRjXHU2MDRlXHU2MDRmXHU2MDUxXHU2MDUzXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDU4XHU2MDViXHU2MDVjXHU2MDVlXHU2MDVmXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZlXHU2MDcxXHU2MDcyXHU2MDc0XHU2MDc1XHU2MDc3XHU2MDdlXHU2MDgwIl0sWyI5MDgwIiwiXHU2''@;'; put 'put ''MDgxXHU2MDgyXHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhhXHU2MDhiXHU2MDhlXHU2MDhmXHU2MDkwXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDljXHU2MDllXHU2MGExXHU2MGEyXHU2MGE0XHU2MGE1XHU2MGE3XHU2MGE5XHU2MGFhXHU2MGFlXHU2MGIw''@;'; put 'put ''XHU2MGIzXHU2MGI1XHU2MGI2XHU2MGI3XHU2MGI5XHU2MGJhXHU2MGJkIiw3LCJcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2MiLDQsIlx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMSIsNCwiXHU2MGVhXHU2MGYxXHU2MGYyXHU2MGY1XHU2MGY3''@;'; put 'put ''XHU2MGY4XHU2MGZiIiw0LCJcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEy''@;'; put 'put ''YyIsMTgsIlx1NjE0MCIsNl0sWyI5MTQwIiwiXHU2MTQ3XHU2MTQ5XHU2MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2Iiw2LCJcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjkiLDYsIlx1NjE3MVx1NjE3Mlx1''@;'; put 'put ''NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OCIsMTgsIlx1NjE4Y1x1NjE4ZFx1NjE4ZiIsNCwiXHU2MTk1Il0sWyI5MTgwIiwiXHU2MTk2Iiw2LCJcdTYxOWUiLDgsIlx1NjFhYVx1NjFhYlx1NjFhZCIsOSwiXHU2MWI4Iiw1LCJcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzMiLDQsIlx1NjFjOVx1NjFj''@;'; put 'put ''YyIsNCwiXHU2MWQzXHU2MWQ1IiwxNiwiXHU2MWU3IiwxMywiXHU2MWY2Iiw4LCJcdTYyMDAiLDUsIlx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIz''@;'; put 'put ''MFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOCIsNCwiXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhIl0sWyI5MjQwIiwiXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjIiw2LCJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFcdTYyNzJcdTYy''@;'; put 'put ''NzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGIiLDUsIlx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1''@;'; put 'put ''NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMSJdLFsiOTI4MCIsIlx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJm''@;'; put 'put ''Mlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1''@;'; put 'put ''NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzMyIsNSwiXHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2Iiw3LCJcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhc''@;'; put 'put ''dTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYzN2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYz''@;'; put 'put ''OTkiLDYsIlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMCJdLFsiOTM0MCIsIlx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1''@;'; put 'put ''NjNkM1x1NjNkNFx1NjNkNVx1NjNkNyIsNiwiXHU2M2RmXHU2M2UyXHU2M2U0Iiw0LCJcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDYiLDQsIlx1NjQwZFx1''@;'; put 'put ''NjQwZVx1NjQxMVx1NjQxMlx1NjQxNSIsNSwiXHU2NDFkXHU2NDFmXHU2NDIyXHU2NDIzXHU2NDI0Il0sWyI5MzgwIiwiXHU2NDI1XHU2NDI3XHU2NDI4XHU2NDI5XHU2NDJiXHU2NDJlIiw1LCJcdTY0MzUiLDQsIlx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1''@;'; put 'put ''NjQ0YiIsNiwiXHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2NDU5Iiw0LCJcdTY0NWYiLDcsIlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZSIsOSwiXHU2NDdiIiw2LCJcdTY0ODNcdTY0ODZcdTY0ODgiLDgsIlx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5''@;'; put 'put ''Y1x1NjQ5ZFx1NjQ5ZiIsNCwiXHU2NGE1XHU2NGE2XHU2NGE3XHU2NGE4XHU2NGFhXHU2NGFiXHU2NGFmXHU2NGIxXHU2NGIyXHU2NGIzXHU2NGI0XHU2NGI2XHU2NGI5XHU2NGJiXHU2NGJkXHU2NGJlXHU2NGJmXHU2NGMxXHU2NGMzXHU2NGM0XHU2NGM2Iiw2LCJcdTY0Y2ZcdTY0ZDFcdTY0''@;'; put 'put ''ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGEiXSxbIjk0NDAiLCJcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTciLDI0LCJcdTY1MDEiLDcsIlx1NjUwYSIsNywiXHU2NTEzIiw0LCJcdTY1MTkiLDhdLFsiOTQ4MCIsIlx1NjUyMlx1''@;'; put 'put ''NjUyM1x1NjUyNFx1NjUyNiIsNCwiXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwIiw0LCJcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThc''@;'; put 'put ''dTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzgiLDE0LCJcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1''@;'; put 'put ''OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjEiLDcsIlx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1''@;'; put 'put ''NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOCIsNywiXHU2NWUxXHU2NWUzXHU2NWU0XHU2NWVhXHU2NWViIl0sWyI5NTQwIiwiXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiIiw0LCJcdTY2MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlc''@;'; put 'put ''dTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzJcdTY2MzNcdTY2MzciLDQsIlx1NjYz''@;'; put 'put ''ZFx1NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NCIsNiwiXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4Il0sWyI5NTgwIiwiXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5Iiw0LCJcdTY2NzFcdTY2NzJcdTY2NzNcdTY2''@;'; put 'put ''NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZcdTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OTgiLDQsIlx1NjY5ZSIsOCwiXHU2''@;'; put 'put ''NmE5Iiw0LCJcdTY2YWYiLDQsIlx1NjZiNVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZiIsMjUsIlx1NjZkYVx1NjZkZSIsNywiXHU2NmU3XHU2NmU4XHU2NmVhIiw1LCJcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3''@;'; put 'put ''MDFcdTY3MDJcdTY3MDMiXSxbIjk2NDAiLCJcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjAiLDUsIlx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1''@;'; put 'put ''NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1NyIsNCwiXHU2NzVkXHU2NzYyXHU2NzYzXHU2NzY0XHU2NzY2XHU2NzY3XHU2NzZi''@;'; put 'put ''XHU2NzZjXHU2NzZlXHU2NzcxXHU2Nzc0XHU2Nzc2Il0sWyI5NjgwIiwiXHU2Nzc4XHU2Nzc5XHU2NzdhXHU2NzdiXHU2NzdkXHU2NzgwXHU2NzgyXHU2NzgzXHU2Nzg1XHU2Nzg2XHU2Nzg4XHU2NzhhXHU2NzhjXHU2NzhkXHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkyXHU2NzkzXHU2Nzk0XHU2''@;'; put 'put ''Nzk2XHU2Nzk5XHU2NzliXHU2NzlmXHU2N2EwXHU2N2ExXHU2N2E0XHU2N2E2XHU2N2E5XHU2N2FjXHU2N2FlXHU2N2IxXHU2N2IyXHU2N2I0XHU2N2I5Iiw3LCJcdTY3YzJcdTY3YzUiLDksIlx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1''@;'; put 'put ''NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNSIsNywiXHU2N2ZlXHU2ODAxXHU2ODAyXHU2ODAzXHU2ODA0XHU2ODA2XHU2ODBkXHU2ODEwXHU2ODEyXHU2ODE0XHU2ODE1XHU2ODE4Iiw0LCJcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjIiLDYsIlx1NjgyYiIs''@;'; put 'put ''NiwiXHU2ODM0XHU2ODM1XHU2ODM2XHU2ODNhXHU2ODNiXHU2ODNmXHU2ODQ3XHU2ODRiXHU2ODRkXHU2ODRmXHU2ODUyXHU2ODU2Iiw1XSxbIjk3NDAiLCJcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmMiLDcsIlx1Njg3NVx1Njg3OCIsOCwiXHU2ODgyXHU2ODg0XHU2ODg3''@;'; put 'put ''Iiw3LCJcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OTgiLDksIlx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOCJdLFsiOTc4MCIsIlx1NjhiOSIsNiwiXHU2OGMx''@;'; put 'put ''XHU2OGMzIiw1LCJcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGIiLDQsIlx1NjhlMVx1NjhlMlx1NjhlNCIsOSwiXHU2OGVmXHU2OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4XHU2OGZiXHU2OGZk''@;'; put 'put ''XHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2Iiw0LCJcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTMiLDExLCJcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjUiLDcsIlx1NjkyZVx1NjkyZlx1NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1Njkz''@;'; put 'put ''YVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0MyIsMTYsIlx1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1ZiJdLFsiOTg0MCIsIlx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1''@;'; put 'put ''Njk3MFx1Njk3MiIsNCwiXHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlIiw1LCJcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWQiLDksIlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1''@;'; put 'put ''NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZCJdLFsiOTg4MCIsIlx1NjliZVx1NjliZlx1NjljMFx1NjljMiIsNywiXHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1Iiw1LCJcdTY5ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTEi''@;'; put 'put ''LDExLCJcdTY5ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjMiLDksIlx1NjlmZVx1NmEwMCIsOSwiXHU2YTBiIiwxMSwiXHU2YTE5Iiw1LCJcdTZhMjBcdTZhMjIiLDUsIlx1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNiIsNiwiXHU2''@;'; put 'put ''YTNmIiw0LCJcdTZhNDVcdTZhNDZcdTZhNDgiLDcsIlx1NmE1MSIsNiwiXHU2YTVhIl0sWyI5OTQwIiwiXHU2YTVjIiw0LCJcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjYiLDEwLCJcdTZhNzIiLDYsIlx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4''@;'; put 'put ''NSIsOCwiXHU2YThmXHU2YTkyIiw0LCJcdTZhOTgiLDcsIlx1NmFhMSIsNV0sWyI5OTgwIiwiXHU2YWE3XHU2YWE4XHU2YWFhXHU2YWFkIiwxMTQsIlx1NmIyNVx1NmIyNlx1NmIyOCIsNl0sWyI5YTQwIiwiXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4''@;'; put 'put ''XHU2YjNiXHU2YjNjXHU2YjNkXHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkIiwxMSwiXHU2YjVhIiw3LCJcdTZiNjhcdTZiNjlcdTZiNmIiLDEzLCJcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODgiXSxb''@;'; put 'put ''IjlhODAiLCJcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWMiLDQsIlx1NmJhMiIsNywiXHU2YmFiIiw3LCJcdTZiYjZcdTZiYjgiLDYsIlx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNiIsNCwiXHU2YmNjXHU2YmNlXHU2YmQw''@;'; put 'put ''XHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjIiw0LCJcdTZiZTIiLDcsIlx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZSIsNiwiXHU2YzA4Iiw0LCJcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNc''@;'; put 'put ''dTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGIiLDQsIlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1''@;'; put 'put ''Nlx1NmM1OCJdLFsiOWI0MCIsIlx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2YiIsNCwiXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2''@;'; put 'put ''YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3''@;'; put 'put ''XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4Il0sWyI5YjgwIiwiXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2''@;'; put 'put ''ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmIiw1LCJcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZkMmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZc''@;'; put 'put ''dTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhcdTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZk''@;'; put 'put ''NzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2QiLDQsIlx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5NiIsNCwiXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2''@;'; put 'put ''ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5Iiw1LCJcdTZkYzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2EiXSxbIjljNDAiLCJcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZc''@;'; put 'put ''dTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmQiLDcsIlx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUx''@;'; put 'put ''OFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNSJdLFsiOWM4MCIsIlx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYiIsNywiXHU2ZTQ1Iiw3LCJcdTZlNGZcdTZlNTBcdTZl''@;'; put 'put ''NTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjAiLDEwLCJcdTZlNmNcdTZlNmRcdTZlNmYiLDE0LCJcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGEiLDQsIlx1NmU5MSIsNiwiXHU2ZTk5XHU2ZTlhXHU2ZTliXHU2''@;'; put 'put ''ZTlkXHU2ZTllXHU2ZWEwXHU2ZWExXHU2ZWEzXHU2ZWE0XHU2ZWE2XHU2ZWE4XHU2ZWE5XHU2ZWFiXHU2ZWFjXHU2ZWFkXHU2ZWFlXHU2ZWIwXHU2ZWIzXHU2ZWI1XHU2ZWI4XHU2ZWI5XHU2ZWJjXHU2ZWJlXHU2ZWJmXHU2ZWMwXHU2ZWMzXHU2ZWM0XHU2ZWM1XHU2ZWM2XHU2ZWM4XHU2ZWM5''@;'; put 'put ''XHU2ZWNhXHU2ZWNjXHU2ZWNkXHU2ZWNlXHU2ZWQwXHU2ZWQyXHU2ZWQ2XHU2ZWQ4XHU2ZWQ5XHU2ZWRiXHU2ZWRjXHU2ZWRkXHU2ZWUzXHU2ZWU3XHU2ZWVhIiw1XSxbIjlkNDAiLCJcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmEiLDcsIlx1''@;'; put 'put ''NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYSIsNCwiXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2Iiw5LCJcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzciLDYsIlx1NmYzZlx1''@;'; put 'put ''NmY0MFx1NmY0MVx1NmY0MiJdLFsiOWQ4MCIsIlx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZSIsOSwiXHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYxXHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3Iiw1LCJcdTZmNmZcdTZmNzBc''@;'; put 'put ''dTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2QiLDYsIlx1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4ZiIsMTIsIlx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMiIsNCwiXHU2ZmE4IiwxMCwiXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4''@;'; put 'put ''XHU2ZmJhIiw1LCJcdTZmYzFcdTZmYzMiLDUsIlx1NmZjYSIsNiwiXHU2ZmQzIiwxMCwiXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1Il0sWyI5ZTQwIiwiXHU2ZmU2Iiw3LCJcdTZmZjAiLDMyLCJcdTcwMTIiLDcsIlx1NzAxYyIsNiwiXHU3MDI0Iiw2XSxbIjllODAiLCJcdTcwMmIi''@;'; put 'put ''LDksIlx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYSIsMTcsIlx1NzA0ZFx1NzA0ZVx1NzA1MCIsMTMsIlx1NzA1ZiIsMTEsIlx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4''@;'; put 'put ''N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZSIsMTIsIlx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1''@;'; put 'put ''NzBjYiIsMTIsIlx1NzBkYSJdLFsiOWY0MCIsIlx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMCIsNiwiXHU3MGY4XHU3MGZhXHU3MGZiXHU3MGZjXHU3MGZlIiwxMCwiXHU3MTBiIiw0LCJcdTcxMTFcdTcxMTJcdTcxMTRc''@;'; put 'put ''dTcxMTdcdTcxMWIiLDEwLCJcdTcxMjciLDcsIlx1NzEzMlx1NzEzM1x1NzEzNCJdLFsiOWY4MCIsIlx1NzEzNVx1NzEzNyIsMTMsIlx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0ZiIsMTIsIlx1NzE1ZFx1NzE1ZiIsNCwiXHU3MTY1XHU3MTY5Iiw0LCJcdTcxNmZc''@;'; put 'put ''dTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2UiLDUsIlx1NzE4NSIsNCwiXHU3MThiXHU3MThjXHU3MThkXHU3MThlXHU3MTkwXHU3MTkxXHU3MTkyXHU3MTkzXHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlhIiw0LCJcdTcxYTEiLDYsIlx1''@;'; put 'put ''NzFhOVx1NzFhYVx1NzFhYlx1NzFhZCIsNSwiXHU3MWI0XHU3MWI2XHU3MWI3XHU3MWI4XHU3MWJhIiw4LCJcdTcxYzQiLDksIlx1NzFjZiIsNF0sWyJhMDQwIiwiXHU3MWQ2Iiw5LCJcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZTgiLDUsIlx1NzFlZiIsOSwiXHU3MWZhIiwx''@;'; put 'put ''MSwiXHU3MjA3IiwxOV0sWyJhMDgwIiwiXHU3MjFiXHU3MjFjXHU3MjFlIiw5LCJcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDAiLDYsIlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1''@;'; put 'put ''MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1''@;'; put 'put ''NzI4Mlx1NzI4M1x1NzI4NSIsNCwiXHU3MjhjXHU3MjhlXHU3MjkwXHU3MjkxXHU3MjkzIiwxMSwiXHU3MmEwIiwxMSwiXHU3MmFlXHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhIiw2LCJcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFc''@;'; put 'put ''dTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGIiXSxbImExYTEiLCJcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1''@;'; put 'put ''MzAwOCIsNywiXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4''@;'; put 'put ''XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUy''@;'; put 'put ''NWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyJhMmExIiwiXHUyMTcwIiw5XSxbImEyYjEiLCJcdTI0ODgiLDE5LCJcdTI0NzQiLDE5LCJcdTI0NjAiLDldLFsiYTJlNSIsIlx1MzIyMCIsOV0sWyJhMmYxIiwi''@;'; put 'put ''XHUyMTYwIiwxMV0sWyJhM2ExIiwiXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1Iiw4OCwiXHVmZmUzIl0sWyJhNGExIiwiXHUzMDQxIiw4Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJhNmExIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAz''@;'; put 'put ''YzMiLDZdLFsiYTZlMCIsIlx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NCJdLFsiYTZlZSIsIlx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMSJdLFsiYTZmNCIsIlx1ZmUzM1x1ZmUzNCJdLFsiYTdhMSIs''@;'; put 'put ''Ilx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhN2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImE4NDAiLCJcdTAyY2FcdTAyY2JcdTAyZDlcdTIwMTNcdTIwMTVcdTIwMjVcdTIwMzVcdTIxMDVcdTIxMDlcdTIxOTZcdTIxOTdcdTIxOThcdTIxOTlcdTIyMTVcdTIy''@;'; put 'put ''MWZcdTIyMjNcdTIyNTJcdTIyNjZcdTIyNjdcdTIyYmZcdTI1NTAiLDM1LCJcdTI1ODEiLDZdLFsiYTg4MCIsIlx1MjU4OCIsNywiXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlIl0sWyJh''@;'; put 'put ''OGExIiwiXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxIl0sWyJhOGJkIiwiXHUwMTQ0XHUw''@;'; put 'put ''MTQ4Il0sWyJhOGMwIiwiXHUwMjYxIl0sWyJhOGM1IiwiXHUzMTA1IiwzNl0sWyJhOTQwIiwiXHUzMDIxIiw4LCJcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTQiXSxbImE5NTki''@;'; put 'put ''LCJcdTIxMjFcdTMyMzEiXSxbImE5NWMiLCJcdTIwMTAiXSxbImE5NjAiLCJcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDkiLDksIlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OSIsOF0sWyJhOTgwIiwiXHVmZTYyIiw0LCJcdWZlNjhc''@;'; put 'put ''dWZlNjlcdWZlNmFcdWZlNmIiXSxbImE5OTYiLCJcdTMwMDciXSxbImE5YTQiLCJcdTI1MDAiLDc1XSxbImFhNDAiLCJcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTIiLDUsIlx1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNCIs''@;'; put 'put ''NSwiXHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNi''@;'; put 'put ''XHU3MzNjXHU3MzNkXHU3MzQwIiw4XSxbImFhODAiLCJcdTczNDlcdTczNGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNTgiLDcsIlx1NzM2MSIsMTAsIlx1NzM2ZVx1NzM3MFx1NzM3MSJdLFsiYWI0MCIsIlx1NzM3MiIsMTEsIlx1''@;'; put 'put ''NzM3ZiIsNCwiXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzIiw1LCJcdTczYWFcdTczYWNcdTczYWRc''@;'; put 'put ''dTczYjFcdTczYjRcdTczYjVcdTczYjZcdTczYjhcdTczYjlcdTczYmNcdTczYmRcdTczYmVcdTczYmZcdTczYzFcdTczYzMiLDRdLFsiYWI4MCIsIlx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMiIsNiwiXHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3''@;'; put 'put ''M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzIiw0XSxbImFjNDAiLCJcdTczZjgiLDEwLCJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTEiLDgsIlx1NzQxYyIsNSwiXHU3NDIzXHU3NDI0''@;'; put 'put ''XHU3NDI3XHU3NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3Iiw0LCJcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDIiLDExXSxbImFjODAiLCJcdTc0NGUiLDYsIlx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MCIsMTIsIlx1NzQ2ZVx1NzQ2Zlx1NzQ3MSIsNCwiXHU3''@;'; put 'put ''NDc4XHU3NDc5XHU3NDdhIl0sWyJhZDQwIiwiXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxIiwxMCwiXHU3NDlkXHU3NDlmIiw3LCJcdTc0YWEiLDE1LCJcdTc0YmIiLDEyXSxb''@;'; put 'put ''ImFkODAiLCJcdTc0YzgiLDksIlx1NzRkMyIsOCwiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3Iiw2LCJcdTc0ZjBcdTc0ZjFcdTc0ZjIiXSxbImFlNDAiLCJcdTc0ZjNcdTc0ZjVcdTc0ZjgiLDYsIlx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNSIsNywiXHU3NTBlXHU3NTEw''@;'; put 'put ''XHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwIiw0LCJcdTc1MjZcdTc1MjdcdTc1MmFcdTc1MmVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M2NcdTc1M2RcdTc1M2ZcdTc1NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1''@;'; put 'put ''NGFcdTc1NGRcdTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVcdTc1NTZcdTc1NTdcdTc1NTgiXSxbImFlODAiLCJcdTc1NWQiLDcsIlx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2YiIsNiwiXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhIiw0LCJcdTc1ODBcdTc1ODFcdTc1ODJcdTc1''@;'; put 'put ''ODRcdTc1ODVcdTc1ODciXSxbImFmNDAiLCJcdTc1ODhcdTc1ODlcdTc1OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTYiLDQsIlx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1''@;'; put 'put ''NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVm''@;'; put 'put ''N1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwNyJdLFsiYWY4MCIsIlx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1''@;'; put 'put ''NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NCJdLFsiYjA0MCIsIlx1NzY0NSIsNiwiXHU3NjRlIiw1LCJcdTc2NTVcdTc2NTciLDQsIlx1NzY1ZFx1NzY1Zlx1''@;'; put 'put ''NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NCIsNiwiXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwIiw3LCJcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdc''@;'; put 'put ''dTc2OThcdTc2OWFcdTc2OWIiXSxbImIwODAiLCJcdTc2OWMiLDcsIlx1NzZhNSIsOCwiXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1Iiw5LCJcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVc''@;'; put 'put ''dTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYy''@;'; put 'put ''NTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNc''@;'; put 'put ''dTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUy''@;'; put 'put ''NjUiXSxbImIxNDAiLCJcdTc2YzRcdTc2YzdcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2ZDNcdTc2ZDVcdTc2ZDlcdTc2ZGFcdTc2ZGNcdTc2ZGRcdTc2ZGVcdTc2ZTAiLDQsIlx1NzZlNiIsNywiXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3''@;'; put 'put ''NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlIiwxMCwiXHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiIl0sWyJiMTgwIiwiXHU3NzJjXHU3NzJlXHU3NzMwIiw0LCJcdTc3MzlcdTc3M2Jc''@;'; put 'put ''dTc3M2RcdTc3M2VcdTc3M2ZcdTc3NDJcdTc3NDRcdTc3NDVcdTc3NDZcdTc3NDgiLDcsIlx1Nzc1MiIsNywiXHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUx''@;'; put 'put ''XHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3''@;'; put 'put ''OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5''@;'; put 'put ''XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzIl0sWyJiMjQwIiwiXHU3NzVkXHU3NzVlXHU3''@;'; put 'put ''NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkIiwxMSwiXHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2Iiw1LCJcdTc3OGZcdTc3OTBcdTc3OTMiLDExLCJcdTc3YTFcdTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVc''@;'; put 'put ''dTc3YWZcdTc3YjFcdTc3YjJcdTc3YjRcdTc3YjYiLDRdLFsiYjI4MCIsIlx1NzdiY1x1NzdiZVx1NzdjMCIsMTIsIlx1NzdjZSIsOCwiXHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkIiw0LCJcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUz''@;'; put 'put ''NWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBc''@;'; put 'put ''dTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRm''@;'; put 'put ''YTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBc''@;'; put 'put ''dTk4YTRcdTY2MGNcdTczMTYiXSxbImIzNDAiLCJcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDMiLDUsIlx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1Nzgx''@;'; put 'put ''NVx1NzgxOVx1NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1NzgyOFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1''@;'; put 'put ''Nzg0Ylx1Nzg0ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1Nzg1YSJdLFsiYjM4MCIsIlx1Nzg1Ylx1Nzg1Y1x1Nzg1ZSIsMTEsIlx1Nzg2ZiIsNywiXHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkIiw2LCJcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2Zc''@;'; put 'put ''dTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZj''@;'; put 'put ''ODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2Jc''@;'; put 'put ''dTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUz''@;'; put 'put ''YThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWEiXSxbImI0NDAiLCJcdTc4ODRcdTc4ODVcdTc4ODZcdTc4ODhcdTc4OGFcdTc4OGJcdTc4OGZcdTc4OTBcdTc4OTJcdTc4OTRcdTc4OTVcdTc4OTZcdTc4OTlcdTc4OWRcdTc4OWVcdTc4YTBcdTc4YTJcdTc4YTRcdTc4YTZc''@;'; put 'put ''dTc4YTgiLDcsIlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1Nzhk''@;'; put 'put ''OFx1NzhkYSIsOV0sWyJiNDgwIiwiXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkIiw0LCJcdTc4ZjNcdTc4ZjVcdTc4ZjZcdTc4ZjhcdTc4ZjlcdTc4ZmIiLDUsIlx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNiIsNiwiXHU3ODQwXHU1MGE4XHU3N2Q3XHU2''@;'; put 'put ''NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFm''@;'; put 'put ''XHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3''@;'; put 'put ''YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEz''@;'; put 'put ''XHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlIl0sWyJiNTQwIiwiXHU3OTBkIiw1LCJcdTc5MTQiLDksIlx1NzkxZiIsNCwiXHU3OTI1IiwxNCwiXHU3OTM1Iiw0LCJcdTc5M2RcdTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGEi''@;'; put 'put ''LDgsIlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2MyJdLFsiYjU4MCIsIlx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MCIsNiwiXHU3OTc5XHU3OTdiIiw0LCJcdTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJc''@;'; put 'put ''dTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUy''@;'; put 'put ''MDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJc''@;'; put 'put ''dTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZk''@;'; put 'put ''YzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTAiXSxbImI2NDAiLCJcdTc5OTMiLDYsIlx1Nzk5YiIsMTEsIlx1NzlhOCIsMTAsIlx1NzliNCIsNCwiXHU3''@;'; put 'put ''OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5Iiw1LCJcdTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWEiXSxbImI2ODAiLCJcdTc5ZWNcdTc5ZWVc''@;'; put 'put ''dTc5ZjEiLDYsIlx1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1N2EwYVx1N2EwY1x1N2EwZiIsNCwiXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2''@;'; put 'put ''XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4''@;'; put 'put ''YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZl''@;'; put 'put ''XHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4''@;'; put 'put ''MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjIl0sWyJiNzQwIiwiXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0IiwxNCwiXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwIiw1LCJcdTdhNDciLDksIlx1N2E1MiIsNCwiXHU3YTU4Iiwx''@;'; put 'put ''Nl0sWyJiNzgwIiwiXHU3YTY5Iiw2LCJcdTdhNzFcdTdhNzJcdTdhNzNcdTdhNzVcdTdhN2JcdTdhN2NcdTdhN2RcdTdhN2VcdTdhODJcdTdhODVcdTdhODdcdTdhODlcdTdhOGFcdTdhOGJcdTdhOGNcdTdhOGVcdTdhOGZcdTdhOTBcdTdhOTNcdTdhOTRcdTdhOTlcdTdhOWFcdTdhOWJcdTdh''@;'; put 'put ''OWVcdTdhYTFcdTdhYTJcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRc''@;'; put 'put ''dTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZj''@;'; put 'put ''MWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJc''@;'; put 'put ''dTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGQiXSxbImI4NDAiLCJcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWUiLDQsIlx1N2FiNCIsMTAsIlx1N2FjMCIsMTAs''@;'; put 'put ''Ilx1N2FjYyIsOSwiXHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3Iiw1LCJcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjMiXSxbImI4ODAiLCJcdTdhZjQiLDQsIlx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2Iw''@;'; put 'put ''Mlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1''@;'; put 'put ''NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3''@;'; put 'put ''Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1''@;'; put 'put ''N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2Vk''@;'; put 'put ''OVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOSJdLFsiYjk0MCIsIlx1N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZiIsNSwiXHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3''@;'; put 'put ''YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzIiwxMCwiXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2Iiw2LCJcdTdiOGVcdTdiOGYiXSxbImI5ODAiLCJc''@;'; put 'put ''dTdiOTFcdTdiOTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjkiLDcsIlx1N2JjMlx1N2JjM1x1N2JjNFx1NTdj''@;'; put 'put ''Mlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1''@;'; put 'put ''ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3''@;'; put 'put ''M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1''@;'; put 'put ''NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOCJdLFsiYmE0MCIsIlx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNCIsNCwiXHU3YmRiXHU3YmRjXHU3YmRl''@;'; put 'put ''XHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyIiw0LCJcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmJcdTdiZmRcdTdiZmYiLDcsIlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2Mx''@;'; put 'put ''MCIsNSwiXHU3YzE3XHU3YzE4XHU3YzE5Il0sWyJiYTgwIiwiXHU3YzFhIiw0LCJcdTdjMjAiLDUsIlx1N2MyOFx1N2MyOVx1N2MyYiIsMTIsIlx1N2MzOSIsNSwiXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5''@;'; put 'put ''XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1''@;'; put 'put ''NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYx''@;'; put 'put ''XHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2''@;'; put 'put ''ZTU2Il0sWyJiYjQwIiwiXHU3YzQzIiw5LCJcdTdjNGUiLDM2LCJcdTdjNzUiLDUsIlx1N2M3ZSIsOV0sWyJiYjgwIiwiXHU3Yzg4XHU3YzhhIiw2LCJcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlc''@;'; put 'put ''dTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjQiLDQsIlx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAw''@;'; put 'put ''MFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1''@;'; put 'put ''NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0''@;'; put 'put ''Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NSJdLFsiYmM0MCIsIlx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1''@;'; put 'put ''N2NjNlx1N2NjOVx1N2NjYlx1N2NjZSIsNiwiXHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxIiw2LCJcdTdjZTkiLDUsIlx1N2NmMCIsNywiXHU3Y2Y5XHU3Y2ZhXHU3Y2ZjIiwxMywiXHU3ZDBiIiw1XSxbImJjODAiLCJcdTdkMTEiLDE0LCJcdTdkMjFcdTdkMjNcdTdkMjRc''@;'; put 'put ''dTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRcdTdkMmVcdTdkMzAiLDYsIlx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzVi''@;'; put 'put ''ZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1''@;'; put 'put ''NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3''@;'; put 'put ''OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNiJdLFsiYmQ0MCIsIlx1N2QzNyIsNTQsIlx1N2Q2ZiIsN10sWyJi''@;'; put 'put ''ZDgwIiwiXHU3ZDc4IiwzMiwiXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3''@;'; put 'put ''MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2''@;'; put 'put ''XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5''@;'; put 'put ''MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4Il0sWyJiZTQwIiwiXHU3ZDk5IiwxMiwiXHU3ZGE3Iiw2LCJcdTdkYWYiLDQyXSxbImJlODAiLCJcdTdkZGEiLDMyLCJcdTVjM2RcdTUy''@;'; put 'put ''YjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThc''@;'; put 'put ''dTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRl''@;'; put 'put ''M2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVc''@;'; put 'put ''dTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmIiXSxbImJmNDAiLCJcdTdkZmIiLDYyXSxbImJmODAiLCJcdTdlM2FcdTdlM2MiLDQsIlx1N2U0MiIsNCwiXHU3ZTQ4IiwyMSwiXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1''@;'; put 'put ''NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRi''@;'; put 'put ''XHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2''@;'; put 'put ''N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0''@;'; put 'put ''XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwIl0sWyJjMDQwIiwiXHU3ZTVlIiwzNSwiXHU3ZTgzIiwyMywiXHU3ZTljXHU3ZTlkXHU3ZTllIl0sWyJjMDgwIiwiXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3''@;'; put 'put ''ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiIiw2LCJcdTdmNDNcdTdmNDYiLDksIlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1''@;'; put 'put ''ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2''@;'; put 'put ''Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1''@;'; put 'put ''NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMCJdLFsiYzE0MCIsIlx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1''@;'; put 'put ''ZFx1N2Y1ZVx1N2Y2MFx1N2Y2MyIsNCwiXHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyIiw3LCJcdTdmOGJcdTdmOGRcdTdmOGYiLDQsIlx1N2Y5NSIsNCwi''@;'; put 'put ''XHU3ZjliXHU3ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4Iiw2LCJcdTdmYjEiXSxbImMxODAiLCJcdTdmYjMiLDQsIlx1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2Zj''@;'; put 'put ''ZiIsNCwiXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5Iiw1LCJcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYw''@;'; put 'put ''NGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdc''@;'; put 'put ''dTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4''@;'; put 'put ''ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmYiXSxbImMyNDAiLCJcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRc''@;'; put 'put ''dTdmZWZcdTdmZjJcdTdmZjQiLDYsIlx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYiIsNSwiXHU4MDMyXHU4MDM0''@;'; put 'put ''XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3Il0sWyJjMjgwIiwiXHU4MDU5XHU4MDViIiwxMywiXHU4MDZiIiw1LCJcdTgwNzIiLDEx''@;'; put 'put ''LCJcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRc''@;'; put 'put ''dTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRm''@;'; put 'put ''MjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBc''@;'; put 'put ''dTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmIiXSxbImMzNDAiLCJcdTgwN2VcdTgwODFcdTgwODJcdTgwODVcdTgwODhcdTgwOGFcdTgwOGQiLDUsIlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBh''@;'; put 'put ''M1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjNyIsNCwiXHU4MGNmIiw2LCJcdTgwZDhcdTgwZGZcdTgwZTBcdTgwZTJcdTgwZTNcdTgwZTZcdTgwZWVcdTgwZjVcdTgwZjdcdTgwZjlcdTgwZmJcdTgw''@;'; put 'put ''ZmVcdTgwZmZcdTgxMDBcdTgxMDFcdTgxMDNcdTgxMDRcdTgxMDVcdTgxMDdcdTgxMDhcdTgxMGIiXSxbImMzODAiLCJcdTgxMGNcdTgxMTVcdTgxMTdcdTgxMTlcdTgxMWJcdTgxMWNcdTgxMWRcdTgxMWYiLDEyLCJcdTgxMmRcdTgxMmVcdTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdc''@;'; put 'put ''dTgxMzkiLDQsIlx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcw''@;'; put 'put ''OVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1''@;'; put 'put ''OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2''@;'; put 'put ''ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OCJdLFsiYzQ0MCIsIlx1ODE0MCIsNSwiXHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4''@;'; put 'put ''MTViIiw0LCJcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODMiLDQsIlx1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5MiIs''@;'; put 'put ''NSwiXHU4MTk5XHU4MTlhXHU4MTllIiw0LCJcdTgxYTRcdTgxYTUiXSxbImM0ODAiLCJcdTgxYTdcdTgxYTlcdTgxYWIiLDcsIlx1ODFiNCIsNSwiXHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkIiw2LCJcdTY0NzlcdTg2''@;'; put 'put ''MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVc''@;'; put 'put ''dTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5''@;'; put 'put ''ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJc''@;'; put 'put ''dTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODEiXSxbImM1NDAiLCJcdTgxZDQiLDE0LCJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWUiLDQsIlx1ODFmNSIsNSwiXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3''@;'; put 'put ''Iiw0LCJcdTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTUiLDUsIlx1ODIxZFx1ODIyMFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZiJdLFsiYzU4MCIsIlx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0''@;'; put 'put ''Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MCIsNywiXHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwIiw3LCJcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYw''@;'; put 'put ''MTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNc''@;'; put 'put ''dTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkx''@;'; put 'put ''NGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDciXSxbImM2''@;'; put 'put ''NDAiLCJcdTgyNmFcdTgyNmJcdTgyNmNcdTgyNmRcdTgyNzFcdTgyNzVcdTgyNzZcdTgyNzdcdTgyNzhcdTgyN2JcdTgyN2NcdTgyODBcdTgyODFcdTgyODNcdTgyODVcdTgyODZcdTgyODdcdTgyODlcdTgyOGNcdTgyOTBcdTgyOTNcdTgyOTRcdTgyOTVcdTgyOTZcdTgyOWFcdTgyOWJcdTgy''@;'; put 'put ''OWVcdTgyYTBcdTgyYTJcdTgyYTNcdTgyYTdcdTgyYjJcdTgyYjVcdTgyYjZcdTgyYmFcdTgyYmJcdTgyYmNcdTgyYmZcdTgyYzBcdTgyYzJcdTgyYzNcdTgyYzVcdTgyYzZcdTgyYzlcdTgyZDBcdTgyZDZcdTgyZDlcdTgyZGFcdTgyZGRcdTgyZTJcdTgyZTdcdTgyZThcdTgyZTlcdTgyZWFc''@;'; put 'put ''dTgyZWNcdTgyZWRcdTgyZWVcdTgyZjBcdTgyZjJcdTgyZjNcdTgyZjVcdTgyZjZcdTgyZjgiXSxbImM2ODAiLCJcdTgyZmFcdTgyZmMiLDQsIlx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZCIsOSwiXHU4MzI5XHU4MzJhXHU4MzJl''@;'; put 'put ''XHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1''@;'; put 'put ''NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0''@;'; put 'put ''XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3''@;'; put 'put ''OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwIl0sWyJjNzQwIiwiXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhIiw0LCJc''@;'; put 'put ''dTgzNTNcdTgzNTUiLDQsIlx1ODM1ZFx1ODM2Mlx1ODM3MCIsNiwiXHU4Mzc5XHU4MzdhXHU4MzdlIiw2LCJcdTgzODdcdTgzODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZc''@;'; put 'put ''dTgzYTEiLDYsIlx1ODNhY1x1ODNhZFx1ODNhZSJdLFsiYzc4MCIsIlx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNk''@;'; put 'put ''OVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1''@;'; put 'put ''NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRh''@;'; put 'put ''Y1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1''@;'; put 'put ''NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMCJdLFsiYzg0MCIsIlx1ODNlZVx1ODNl''@;'; put 'put ''Zlx1ODNmMyIsNCwiXHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyIiw1LCJcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWUiLDUsIlx1ODQyOSIsNywiXHU4NDMyIiw1LCJcdTg0MzlcdTg0M2Fc''@;'; put 'put ''dTg0M2JcdTg0M2UiLDcsIlx1ODQ0N1x1ODQ0OFx1ODQ0OSJdLFsiYzg4MCIsIlx1ODQ0YSIsNiwiXHU4NDUyIiw0LCJcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjQiLDQsIlx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1''@;'; put 'put ''ODQ3Ylx1ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2Zh''@;'; put 'put ''NFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1''@;'; put 'put ''NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUx''@;'; put 'put ''MFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMSJdLFsiYzk0MCIsIlx1ODQ3ZCIsNCwiXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmIiw3LCJcdTg0OThcdTg0OWFcdTg0''@;'; put 'put ''OWJcdTg0OWRcdTg0OWVcdTg0OWZcdTg0YTBcdTg0YTIiLDEyLCJcdTg0YjBcdTg0YjFcdTg0YjNcdTg0YjVcdTg0YjZcdTg0YjdcdTg0YmJcdTg0YmNcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzNcdTg0YzVcdTg0YzZcdTg0YzdcdTg0YzhcdTg0Y2JcdTg0Y2NcdTg0Y2VcdTg0Y2ZcdTg0ZDJc''@;'; put 'put ''dTg0ZDRcdTg0ZDVcdTg0ZDciXSxbImM5ODAiLCJcdTg0ZDgiLDQsIlx1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlNyIsNCwiXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxIiwxMCwiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3''@;'; put 'put ''XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5''@;'; put 'put ''NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNk''@;'; put 'put ''XHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2''@;'; put 'put ''ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzIl0sWyJjYTQwIiwiXHU4NTAzIiw4LCJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjIiLDgsIlx1''@;'; put 'put ''ODUyZCIsOSwiXHU4NTNlIiw0LCJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NGIiLDEwXSxbImNhODAiLCJcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWYiLDQsIlx1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OSIsOCwiXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3''@;'; put 'put ''XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4''@;'; put 'put ''YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQz''@;'; put 'put ''XHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4''@;'; put 'put ''NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxIl0sWyJjYjQwIiwiXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4Iiw2LCJcdTg1OTAiLDEwLCJcdTg1OWQi''@;'; put 'put ''LDYsIlx1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1ODViMSIsNSwiXHU4NWI4XHU4NWJhIiw2LCJcdTg1YzIiLDYsIlx1ODVjYSIsNCwiXHU4NWQxXHU4NWQyIl0sWyJjYjgwIiwiXHU4NWQ0XHU4NWQ2Iiw1LCJcdTg1ZGQiLDYsIlx1ODVlNVx1ODVlNlx1ODVl''@;'; put 'put ''N1x1ODVlOFx1ODVlYSIsMTQsIlx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1''@;'; put 'put ''NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVm''@;'; put 'put ''ZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1''@;'; put 'put ''NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NCJdLFsiY2M0MCIsIlx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMCIsNCwiXHU4NjA2IiwxMCwiXHU4NjEyXHU4NjEz''@;'; put 'put ''XHU4NjE0XHU4NjE1XHU4NjE3IiwxNSwiXHU4NjI4XHU4NjJhIiwxMywiXHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwIl0sWyJjYzgwIiwiXHU4NjQxIiwxMSwiXHU4NjUyXHU4NjUzXHU4NjU1Iiw0LCJcdTg2NWJcdTg2NWNcdTg2NWRcdTg2NWZcdTg2NjBcdTg2''@;'; put 'put ''NjFcdTg2NjMiLDcsIlx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1''@;'; put 'put ''NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3''@;'; put 'put ''Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1''@;'; put 'put ''NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjMyJdLFsiY2Q0MCIsIlx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3MiIsNiwiXHU4NjgzIiw2LCJcdTg2OGUiLDQsIlx1ODY5NFx1ODY5NiIsNSwiXHU4''@;'; put 'put ''NjllIiw0LCJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmIiLDQsIlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkYyJd''@;'; put 'put ''LFsiY2Q4MCIsIlx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcw''@;'; put 'put ''Ylx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1''@;'; put 'put ''NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1''@;'; put 'put ''OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1''@;'; put 'put ''NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMSJdLFsiY2U0MCIsIlx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcy''@;'; put 'put ''Nlx1ODcyN1x1ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcyZlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MCIsNiwiXHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4''@;'; put 'put ''NzU1XHU4NzU2XHU4NzU4XHU4NzVhIiw1LCJcdTg3NjFcdTg3NjJcdTg3NjYiLDcsIlx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NSJdLFsiY2U4MCIsIlx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1''@;'; put 'put ''ODc4Y1x1ODc4ZSIsNCwiXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4Iiw2LCJcdTg3YTAiLDQsIlx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1''@;'; put 'put ''N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMx''@;'; put 'put ''ZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1''@;'; put 'put ''NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YSJdLFsiY2Y0MCIsIlx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdh''@;'; put 'put ''YVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMSIsNCwiXHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjIiw0LCJcdTg3ZDQiLDYsIlx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdl''@;'; put 'put ''Mlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZiIsOV0sWyJjZjgwIiwiXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0Iiw1LCJcdTg4MGIiLDcsIlx1ODgxNFx1ODgxN1x1ODgxOFx1''@;'; put 'put ''ODgxOVx1ODgxYVx1ODgxYyIsNCwiXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBm''@;'; put 'put ''XHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1''@;'; put 'put ''YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5''@;'; put 'put ''XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzIl0sWyJkMDQwIiwiXHU4ODI0IiwxMywiXHU4ODMzIiw1LCJcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4''@;'; put 'put ''NDFcdTg4NDJcdTg4NDNcdTg4NDYiLDUsIlx1ODg0ZSIsNSwiXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhIiw2LCJcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N2EiXSxbImQwODAiLCJcdTg4N2JcdTg4''@;'; put 'put ''N2NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNcdTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTciLDQsIlx1ODg5ZCIsNCwiXHU4OGEzXHU4OGE1Iiw1LCJcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1''@;'; put 'put ''NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBc''@;'; put 'put ''dTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRm''@;'; put 'put ''ZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlc''@;'; put 'put ''dTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODQiXSxbImQxNDAiLCJcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjIiLDQsIlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhj''@;'; put 'put ''Y1x1ODhjZFx1ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhkN1x1ODhkYSIsNCwiXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5Iiw2LCJcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDMiLDVdLFsiZDE4''@;'; put 'put ''MCIsIlx1ODkwOVx1ODkwYiIsNCwiXHU4OTExXHU4OTE0Iiw0LCJcdTg5MWMiLDQsIlx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1''@;'; put 'put ''N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJi''@;'; put 'put ''ZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1''@;'; put 'put ''NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVm''@;'; put 'put ''MFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3NiJdLFsiZDI0MCIsIlx1ODkzOCIsOCwiXHU4OTQyXHU4OTQzXHU4OTQ1IiwyNCwiXHU4OTYwIiw1LCJcdTg5NjciLDE5LCJcdTg5N2MiXSxbImQyODAiLCJcdTg5N2RcdTg5N2VcdTg5ODBcdTg5ODJcdTg5''@;'; put 'put ''ODRcdTg5ODVcdTg5ODciLDI2LCJcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJc''@;'; put 'put ''dTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRl''@;'; put 'put ''ZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2Vc''@;'; put 'put ''dTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTAiXSxbImQzNDAiLCJcdTg5YTIiLDMwLCJcdTg5YzNcdTg5Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5''@;'; put 'put ''ZGJcdTg5ZGRcdTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjQiLDZdLFsiZDM4MCIsIlx1ODlmYiIsNCwiXHU4YTAxIiw1LCJcdThhMDgiLDIxLCJcdTUzNzBcdTgyZjFc''@;'; put 'put ''dTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZj''@;'; put 'put ''ZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRc''@;'; put 'put ''dTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0''@;'; put 'put ''MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODkiXSxbImQ0NDAiLCJcdThhMWUiLDMxLCJcdThhM2YiLDgsIlx1OGE0OSIsMjFdLFsiZDQ4MCIsIlx1OGE1ZiIsMjUsIlx1OGE3YSIsNiwiXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZi''@;'; put 'put ''XHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3''@;'; put 'put ''Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEy''@;'; put 'put ''XHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2''@;'; put 'put ''NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3Il0sWyJkNTQwIiwiXHU4YTgxIiw3LCJcdThhOGIiLDcsIlx1OGE5NCIsNDZdLFsiZDU4MCIsIlx1OGFjMyIsMzIsIlx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1''@;'; put 'put ''OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1''@;'; put 'put ''NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUx''@;'; put 'put ''N1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1''@;'; put 'put ''NmI2M1x1NjUzZiJdLFsiZDY0MCIsIlx1OGFlNCIsMzQsIlx1OGIwOCIsMjddLFsiZDY4MCIsIlx1OGIyNFx1OGIyNVx1OGIyNyIsMzAsIlx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1''@;'; put 'put ''N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQy''@;'; put 'put ''OFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1''@;'; put 'put ''NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MSJdLFsiZDc0MCIsIlx1OGI0''@;'; put 'put ''NiIsMzEsIlx1OGI2NyIsNCwiXHU4YjZkIiwyNV0sWyJkNzgwIiwiXHU4Yjg3IiwyNCwiXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIw''@;'; put 'put ''XHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2''@;'; put 'put ''ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRm''@;'; put 'put ''XHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3Il0sWyJkODQwIiwiXHU4YzM4Iiw4LCJcdThj''@;'; put 'put ''NDJcdThjNDNcdThjNDRcdThjNDVcdThjNDhcdThjNGFcdThjNGJcdThjNGQiLDcsIlx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1YiIsNSwiXHU4YzYzIiw2LCJcdThjNmMiLDYsIlx1OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3YiIsNiwiXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3''@;'; put 'put ''Il0sWyJkODgwIiwiXHU4Yzg4XHU4YzhiXHU4YzhkIiw2LCJcdThjOTVcdThjOTZcdThjOTdcdThjOTkiLDIwLCJcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRl''@;'; put 'put ''NDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVc''@;'; put 'put ''dThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdm''@;'; put 'put ''NTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWQiXSxbImQ5NDAiLCJcdThjYWUiLDYyXSxbImQ5ODAi''@;'; put 'put ''LCJcdThjZWQiLDMyLCJcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZc''@;'; put 'put ''dTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUw''@;'; put 'put ''ZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZc''@;'; put 'put ''dTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmMiXSxbImRhNDAiLCJcdThkMGUiLDE0LCJcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThk''@;'; put 'put ''NmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzgiLDgsIlx1OGQ4Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4YyIsNCwiXHU4ZDkyXHU4ZDkzXHU4ZDk1Iiw5LCJcdThkYTBcdThkYTEiXSxbImRhODAiLCJcdThkYTJcdThkYTQiLDEyLCJcdThkYjJcdThkYjZcdThk''@;'; put 'put ''YjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdc''@;'; put 'put ''dThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThj''@;'; put 'put ''MDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRc''@;'; put 'put ''dTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkw''@;'; put 'put ''YmEiXSxbImRiNDAiLCJcdThkZDVcdThkZDhcdThkZDlcdThkZGNcdThkZTBcdThkZTFcdThkZTJcdThkZTVcdThkZTZcdThkZTdcdThkZTlcdThkZWRcdThkZWVcdThkZjBcdThkZjFcdThkZjJcdThkZjRcdThkZjZcdThkZmNcdThkZmUiLDYsIlx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1''@;'; put 'put ''OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNSIsNywiXHU4ZTIwXHU4ZTIxXHU4ZTI0Iiw0LCJcdThlMmJcdThlMmRcdThlMzBcdThlMzJcdThlMzNcdThlMzRcdThlMzZcdThlMzdcdThlMzhcdThlM2JcdThlM2NcdThlM2UiXSxbImRiODAiLCJcdThlM2ZcdThlNDNc''@;'; put 'put ''dThlNDVcdThlNDZcdThlNGMiLDQsIlx1OGU1MyIsNSwiXHU4ZTVhIiwxMSwiXHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRi''@;'; put 'put ''XHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1''@;'; put 'put ''MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1Nzdj''@;'; put 'put ''XHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkIl0sWyJkYzQwIiwiXHU4''@;'; put 'put ''ZTczXHU4ZTc1XHU4ZTc3Iiw0LCJcdThlN2RcdThlN2VcdThlODBcdThlODJcdThlODNcdThlODRcdThlODZcdThlODgiLDYsIlx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NSIsNiwiXHU4ZTlkXHU4ZTlmIiwxMSwiXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzIiw2LCJcdThlYmIiLDdd''@;'; put 'put ''LFsiZGM4MCIsIlx1OGVjMyIsMTAsIlx1OGVjZiIsMjEsIlx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4''@;'; put 'put ''Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1''@;'; put 'put ''ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMz''@;'; put 'put ''Y1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NSJdLFsiZGQ0MCIsIlx1OGVlNSIsNjJdLFsiZGQ4MCIsIlx1OGYyNCIsMzIsIlx1ODM2OFx1ODMxYlx1ODM2''@;'; put 'put ''OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1''@;'; put 'put ''ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3''@;'; put 'put ''M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1''@;'; put 'put ''ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYSJdLFsiZGU0MCIsIlx1OGY0NSIsMzIsIlx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZh''@;'; put 'put ''ZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNiJdLFsiZGU4MCIsIlx1OGZjOSIsNCwiXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4''@;'; put 'put ''ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0''@;'; put 'put ''XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1''@;'; put 'put ''ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2Mzcx''@;'; put 'put ''XHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2''@;'; put 'put ''NDVlXHU2NDg0XHU2NDZkXHU2NDk2Il0sWyJkZjQwIiwiXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3Iiw1LCJcdTkwMzAiLDQsIlx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OCIsNCwiXHU5MDRlXHU5MDU0XHU5''@;'; put 'put ''MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjIiw1LCJcdTkwNjRcdTkwNjZcdTkwNjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmYiLDQsIlx1OTA3NiIsNiwiXHU5MDdlXHU5MDgxIl0sWyJkZjgwIiwiXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjIiw0''@;'; put 'put ''LCJcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFc''@;'; put 'put ''dTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0''@;'; put 'put ''MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVc''@;'; put 'put ''dTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1''@;'; put 'put ''NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2MiXSxbImUwNDAiLCJcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNc''@;'; put 'put ''dTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDUiLDE5LCJcdTkxMWFcdTkxMWJcdTkxMWMiXSxbImUwODAi''@;'; put 'put ''LCJcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjQiLDEwLCJcdTkxMzBcdTkxMzIiLDYsIlx1OTEzYSIsOCwiXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1''@;'; put 'put ''NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4''@;'; put 'put ''XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1''@;'; put 'put ''NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjIl0sWyJlMTQwIiwiXHU5MTQ1XHU5MTQ3''@;'; put 'put ''XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwIiw0LCJcdTkxODZcdTkxODhcdTkxOGFcdTkxOGVcdTkx''@;'; put 'put ''OGZcdTkxOTMiLDYsIlx1OTE5YyIsNSwiXHU5MWE0Iiw1LCJcdTkxYWJcdTkxYWNcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYjdcdTkxYjhcdTkxYjlcdTkxYmIiXSxbImUxODAiLCJcdTkxYmMiLDEwLCJcdTkxYzhcdTkxY2JcdTkxZDBcdTkxZDIiLDksIlx1OTFkZCIsOCwi''@;'; put 'put ''XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1''@;'; put 'put ''Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5''@;'; put 'put ''XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3''@;'; put 'put ''MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhIl0sWyJlMjQwIiwiXHU5MWU2Iiw2Ml0sWyJlMjgwIiwiXHU5MjI1IiwzMiwiXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3''@;'; put 'put ''MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3Iiw1LCJcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFc''@;'; put 'put ''dTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYw''@;'; put 'put ''MDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDIiXSxbImUz''@;'; put 'put ''NDAiLCJcdTkyNDYiLDQ1LCJcdTkyNzUiLDE2XSxbImUzODAiLCJcdTkyODYiLDcsIlx1OTI4ZiIsMjQsIlx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1''@;'; put 'put ''NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYw''@;'; put 'put ''M1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1''@;'; put 'put ''NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZSJdLFsiZTQ0MCIsIlx1OTJhOCIsNSwiXHU5MmFmIiwyNCwi''@;'; put 'put ''XHU5MmM5IiwzMV0sWyJlNDgwIiwiXHU5MmU5IiwzMiwiXHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEw''@;'; put 'put ''XHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2''@;'; put 'put ''ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0''@;'; put 'put ''XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxIl0sWyJlNTQwIiwiXHU5MzBhIiw1MSwiXHU5MzNmIiwxMF0sWyJlNTgwIiwiXHU5MzRhIiwzMSwiXHU5MzZi''@;'; put 'put ''XHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1''@;'; put 'put ''YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0''@;'; put 'put ''XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1''@;'; put 'put ''ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzIl0sWyJlNjQwIiwiXHU5MzZjIiwzNCwiXHU5MzkwIiwyN10sWyJlNjgwIiwiXHU5M2FjIiwyOSwiXHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1''@;'; put 'put ''OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1''@;'; put 'put ''XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1''@;'; put 'put ''YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEz''@;'; put 'put ''XHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5Il0sWyJlNzQwIiwiXHU5M2NlIiw3LCJcdTkzZDciLDU0XSxbImU3ODAiLCJcdTk0MGUiLDMyLCJcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBc''@;'; put 'put ''dTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdm''@;'; put 'put ''MTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjEiLDYsIlx1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZiIsNCwiXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3''@;'; put 'put ''M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjIl0sWyJlODQwIiwiXHU5NDJmIiwxNCwiXHU5NDNmIiw0MywiXHU5NDZj''@;'; put 'put ''XHU5NDZkXHU5NDZlXHU5NDZmIl0sWyJlODgwIiwiXHU5NDcwIiwyMCwiXHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3''@;'; put 'put ''NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4''@;'; put 'put ''XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2''@;'; put 'put ''ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZj''@;'; put 'put ''XHU2OTFmXHU2OTIwXHU2OGY5Il0sWyJlOTQwIiwiXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3Iiw3LCJcdTk1ODAiLDQyXSxbImU5ODAiLCJcdTk1YWIiLDMyLCJcdTY5MjRcdTY4ZjBcdTY5MGJc''@;'; put 'put ''dTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5''@;'; put 'put ''YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2Nc''@;'; put 'put ''dTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThm''@;'; put 'put ''NzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGIiXSxbImVhNDAiLCJcdTk1Y2MiLDI3LCJcdTk1ZWNcdTk1ZmZcdTk2MDdcdTk2MTNcdTk2MThcdTk2MWJcdTk2MWVcdTk2MjBcdTk2MjMiLDYsIlx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1''@;'; put 'put ''OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1NyJdLFsiZWE4MCIsIlx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2''@;'; put 'put ''Ylx1OTY2ZCIsNCwiXHU5NjczXHU5Njc4IiwxMiwiXHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3''@;'; put 'put ''NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3''@;'; put 'put ''XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4''@;'; put 'put ''OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwIl0sWyJlYjQwIiwiXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1''@;'; put 'put ''XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkIiw5LCJcdTk2YTgiLDcsIlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNiIsOSwiXHU5NmUx''@;'; put 'put ''Iiw2LCJcdTk2ZWIiXSxbImViODAiLCJcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3''@;'; put 'put ''MTRcdTk3MTVcdTk3MTciLDQsIlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1''@;'; put 'put ''NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBk''@;'; put 'put ''OVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1''@;'; put 'put ''ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYiJdLFsiZWM0MCIsIlx1OTcyMSIsOCwiXHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMz''@;'; put 'put ''Iiw0LCJcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2YiLDE4LCJcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmEiLDddLFsiZWM4MCIsIlx1OTc3Mlx1OTc3NVx1OTc3NyIsNCwiXHU5''@;'; put 'put ''NzdkIiw3LCJcdTk3ODYiLDQsIlx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OSIsNCwiXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2''@;'; put 'put ''YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEz''@;'; put 'put ''XHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2''@;'; put 'put ''MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwIl0sWyJlZDQwIiwiXHU5Nzll''@;'; put 'put ''XHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0Iiw2LCJcdTk3YWNcdTk3YWVcdTk3YjBcdTk3YjFcdTk3YjNcdTk3YjUiLDQ2XSxbImVkODAiLCJcdTk3ZTRcdTk3ZTVcdTk3ZThcdTk3ZWUiLDQsIlx1OTdmNFx1OTdmNyIsMjMsIlx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1''@;'; put 'put ''NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1Nzgz''@;'; put 'put ''YVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1''@;'; put 'put ''NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1''@;'; put 'put ''MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OCJdLFsiZWU0MCIsIlx1OTgwZiIsNjJdLFsiZWU4MCIsIlx1OTg0ZSIsMzIsIlx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0''@;'; put 'put ''MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1''@;'; put 'put ''OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNiIsNCwiXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4Iiw2LCJcdTk0ZDBcdTk0ZDFc''@;'; put 'put ''dTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWEiXSxbImVmNDAiLCJcdTk4NmYiLDUsIlx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOCIsMzcs''@;'; put 'put ''Ilx1OThjZlx1OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1OThkZFx1OThlMCIsNF0sWyJlZjgwIiwiXHU5OGU1XHU5OGU2XHU5OGU5IiwzMCwiXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZm''@;'; put 'put ''XHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyIiw0LCJcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1''@;'; put 'put ''M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjQiLDgsIlx1OTU2Zlx1''@;'; put 'put ''OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNCJdLFsiZjA0MCIsIlx1OTkwOCIsNCwiXHU5OTBlXHU5OTBmXHU5OTExIiwyOCwiXHU5OTJmIiwyNl0sWyJmMDgw''@;'; put 'put ''IiwiXHU5OTRhIiw5LCJcdTk5NTYiLDEyLCJcdTk5NjRcdTk5NjZcdTk5NzNcdTk5NzhcdTk5NzlcdTk5N2JcdTk5N2VcdTk5ODJcdTk5ODNcdTk5ODlcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBc''@;'; put 'put ''dTc1MmNcdTllMjBcdTllMjJcdTllMjgiLDQsIlx1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1''@;'; put 'put ''Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2NiIsNiwiXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3''@;'; put 'put ''NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5Il0sWyJmMTQwIiwiXHU5OThjXHU5OThlXHU5OTlhIiwxMCwiXHU5OWE2XHU5OWE3XHU5OWE5Iiw0N10s''@;'; put 'put ''WyJmMTgwIiwiXHU5OWQ5IiwzMiwiXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgw''@;'; put 'put ''XHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4''@;'; put 'put ''OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3''@;'; put 'put ''XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzIl0sWyJmMjQwIiwiXHU5OWZhIiw2Ml0sWyJmMjgwIiwiXHU5YTM5IiwzMiwiXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0''@;'; put 'put ''XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4''@;'; put 'put ''NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBk''@;'; put 'put ''XHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4''@;'; put 'put ''NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyIl0sWyJmMzQwIiwiXHU5YTVhIiwxNywiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5Iiw2LCJcdTlhYjJcdTlhYjNcdTlhYjRcdTlhYjVcdTlhYjlcdTlhYmJc''@;'; put 'put ''dTlhYmRcdTlhYmVcdTlhYmZcdTlhYzNcdTlhYzRcdTlhYzYiLDQsIlx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkYyJdLFsiZjM4MCIsIlx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFl''@;'; put 'put ''NFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMCIsOCwiXHU5YWZhXHU5YWZjIiw2LCJcdTliMDRcdTliMDVcdTliMDZcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3''@;'; put 'put ''ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVc''@;'; put 'put ''dTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdi''@;'; put 'put ''OTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGIiXSxbImY0''@;'; put 'put ''NDAiLCJcdTliMDdcdTliMDkiLDUsIlx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNCIsMTAsIlx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNCIsMTAsIlx1OWIzMFx1OWIzMVx1OWIzMyIsNywiXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUw''@;'; put 'put ''XHU5YjUyXHU5YjUzXHU5YjU1Iiw1XSxbImY0ODAiLCJcdTliNWIiLDMyLCJcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhc''@;'; put 'put ''dTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdj''@;'; put 'put ''OWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZc''@;'; put 'put ''dTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjQiXSxbImY1NDAiLCJcdTliN2MiLDYyXSxbImY1ODAiLCJcdTliYmIiLDMyLCJcdTkxNjJc''@;'; put 'put ''dTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThl''@;'; put 'put ''MDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZc''@;'; put 'put ''dThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThj''@;'; put 'put ''NzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGMiXSxbImY2NDAiLCJcdTliZGMiLDYyXSxbImY2ODAiLCJcdTljMWIiLDMyLCJcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3''@;'; put 'put ''MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODUiLDUsIlx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1''@;'; put 'put ''OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZSIsNSwiXHU5Y2E1Iiw0LCJcdTljYWJcdTljYWRcdTljYWVc''@;'; put 'put ''dTljYjAiLDcsIlx1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYiJdLFsiZjc0MCIsIlx1OWMzYyIsNjJdLFsiZjc4MCIsIlx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1''@;'; put 'put ''OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZSIsNCwiXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjIiw0LCJcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlc''@;'; put 'put ''dTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlh''@;'; put 'put ''ZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVc''@;'; put 'put ''dTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlm''@;'; put 'put ''NDQiXSxbImY4NDAiLCJcdTljZTMiLDYyXSxbImY4ODAiLCJcdTlkMjIiLDMyXSxbImY5NDAiLCJcdTlkNDMiLDYyXSxbImY5ODAiLCJcdTlkODIiLDMyXSxbImZhNDAiLCJcdTlkYTMiLDYyXSxbImZhODAiLCJcdTlkZTIiLDMyXSxbImZiNDAiLCJcdTllMDMiLDI3LCJcdTllMjRcdTllMjdc''@;'; put 'put ''dTllMmVcdTllMzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTllNGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTllNmZcdTllNzJcdTllNzQiLDksIlx1OWU4MCJdLFsiZmI4MCIsIlx1OWU4''@;'; put 'put ''MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4YyIsNSwiXHU5ZTk0Iiw4LCJcdTllOWVcdTllYTAiLDUsIlx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYSJdLFsiZmM0MCIsIlx1OWVhYiIsOCwiXHU5ZWI1XHU5ZWI2XHU5ZWI3XHU5ZWI5XHU5ZWJhXHU5ZWJjXHU5ZWJm''@;'; put 'put ''Iiw0LCJcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjAiLDgs''@;'; put 'put ''Ilx1OWVmYVx1OWVmZFx1OWVmZiIsNl0sWyJmYzgwIiwiXHU5ZjA2Iiw0LCJcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWEiLDUsIlx1OWYyMVx1OWYyMyIsOCwiXHU5ZjJkXHU5ZjJlXHU5ZjMwXHU5ZjMxIl0sWyJmZDQwIiwiXHU5ZjMyIiw0''@;'; put 'put ''LCJcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2YiLDQsIlx1OWY0NSIsMTAsIlx1OWY1MiIsMzhdLFsiZmQ4MCIsIlx1OWY3OSIsNSwiXHU5ZjgxXHU5ZjgyXHU5ZjhkIiwxMSwiXHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmExIiw0LCJcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjEiXSxbImZl''@;'; put 'put ''NDAiLCJcdWZhMGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjkiXV0nKX0sMjExNjYodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUw''@;'; put 'put ''MDAwIiwxMjddLFsiODE0MSIsIlx1YWMwMlx1YWMwM1x1YWMwNVx1YWMwNlx1YWMwYiIsNCwiXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1Iiw2LCJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzQiXSxbIjgxNjEiLCJcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2FcdWFj''@;'; put 'put ''M2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDEiLDksIlx1YWM0Y1x1YWM0ZSIsNSwiXHVhYzU1Il0sWyI4MTgxIiwiXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkIiwxOCwiXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiIiw0LCJcdWFjODJcdWFjODdcdWFj''@;'; put 'put ''ODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTUiLDYsIlx1YWM5ZVx1YWNhMiIsNSwiXHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxIiw2LCJcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFj''@;'; put 'put ''Y2JcdWFjY2QiLDcsIlx1YWNkNlx1YWNkOCIsNywiXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3Iiw0LCJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDciLDQsIlx1YWQwZVx1YWQxMFx1YWQx''@;'; put 'put ''Mlx1YWQxMyJdLFsiODI0MSIsIlx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMSIsNywiXHVhZDJhXHVhZDJiXHVhZDJlIiw1XSxbIjgyNjEiLCJcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2QiLDYsIlx1''@;'; put 'put ''YWQ0Nlx1YWQ0OFx1YWQ0YSIsNSwiXHVhZDUxXHVhZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3Il0sWyI4MjgxIiwiXHVhZDU5Iiw3LCJcdWFkNjJcdWFkNjQiLDcsIlx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4MyIs''@;'; put 'put ''NCwiXHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVhZDkxIiwxMCwiXHVhZDllIiw1LCJcdWFkYTUiLDE3LCJcdWFkYjgiLDcsIlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOSIsNiwiXHVhZGQyXHVhZGQ0Iiw3LCJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFk''@;'; put 'put ''ZTJcdWFkZTNcdWFkZTUiLDE4XSxbIjgzNDEiLCJcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDIiLDUsIlx1YWUwYVx1YWUwY1x1YWUwZSIsNSwiXHVhZTE1Iiw3XSxbIjgzNjEiLCJcdWFlMWQiLDE4LCJcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2MiXSxb''@;'; put 'put ''IjgzODEiLCJcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTciLDQsIlx1YWU1ZVx1YWU2Mlx1YWU2M1x1YWU2NFx1YWU2Nlx1YWU2N1x1YWU2YVx1YWU2Ylx1YWU2ZFx1YWU2ZVx1''@;'; put 'put ''YWU2Zlx1YWU3MSIsNiwiXHVhZTdhXHVhZTdlIiw1LCJcdWFlODYiLDUsIlx1YWU4ZCIsNDYsIlx1YWViZlx1YWVjMVx1YWVjMlx1YWVjM1x1YWVjNSIsNiwiXHVhZWNlXHVhZWQyIiw1LCJcdWFlZGFcdWFlZGJcdWFlZGQiLDhdLFsiODQ0MSIsIlx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1''@;'; put 'put ''YWVlY1x1YWVlZSIsNSwiXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkIiw4XSxbIjg0NjEiLCJcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTEiLDE4XSxbIjg0ODEiLCJcdWFmMjQiLDcsIlx1YWYyZVx1YWYyZlx1YWYzMVx1''@;'; put 'put ''YWYzM1x1YWYzNSIsNiwiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhIiw1LCJcdWFmNTEiLDEwLCJcdWFmNWUiLDUsIlx1YWY2NiIsMTgsIlx1YWY3YSIsNSwiXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5Iiw2LCJcdWFmOTJcdWFm''@;'; put 'put ''OTNcdWFmOTRcdWFmOTYiLDUsIlx1YWY5ZCIsMjYsIlx1YWZiYVx1YWZiYlx1YWZiZFx1YWZiZSJdLFsiODU0MSIsIlx1YWZiZlx1YWZjMSIsNSwiXHVhZmNhXHVhZmNjXHVhZmNmIiw0LCJcdWFmZDUiLDYsIlx1YWZkZCIsNF0sWyI4NTYxIiwiXHVhZmUyIiw1LCJcdWFmZWEiLDUsIlx1YWZm''@;'; put 'put ''Mlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOSIsNiwiXHViMDAyXHViMDAzIl0sWyI4NTgxIiwiXHViMDA1Iiw2LCJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTUiLDYsIlx1YjAxZSIsOSwiXHViMDI5IiwyNiwiXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRi''@;'; put 'put ''XHViMDRkXHViMDRmXHViMDUwXHViMDUxXHViMDUyXHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlIiwyOSwiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1Iiw2LCJcdWIwOGVcdWIwOTBcdWIwOTIiLDUsIlx1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBh''@;'; put 'put ''NCJdLFsiODY0MSIsIlx1YjBhNVx1YjBhNlx1YjBhN1x1YjBhYVx1YjBiMFx1YjBiMlx1YjBiNlx1YjBiN1x1YjBiOVx1YjBiYVx1YjBiYlx1YjBiZCIsNiwiXHViMGM2XHViMGNhIiw1LCJcdWIwZDIiXSxbIjg2NjEiLCJcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDkiLDYsIlx1YjBl''@;'; put 'put ''MVx1YjBlMlx1YjBlM1x1YjBlNFx1YjBlNiIsMTBdLFsiODY4MSIsIlx1YjBmMSIsMjIsIlx1YjEwYVx1YjEwZFx1YjEwZVx1YjEwZlx1YjExMVx1YjExNFx1YjExNVx1YjExNlx1YjExN1x1YjExYVx1YjExZSIsNCwiXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkIiw2LCJc''@;'; put 'put ''dWIxMzZcdWIxM2EiLDUsIlx1YjE0Mlx1YjE0M1x1YjE0NVx1YjE0Nlx1YjE0N1x1YjE0OSIsNiwiXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxIiwyMiwiXHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgx''@;'; put 'put ''XHViMTgzIiw0LCJcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWQiXSxbIjg3NDEiLCJcdWIxOWUiLDksIlx1YjFhOSIsMTVdLFsiODc2MSIsIlx1YjFiOSIsMTgsIlx1YjFjZFx1YjFjZVx1YjFjZlx1''@;'; put 'put ''YjFkMVx1YjFkMlx1YjFkM1x1YjFkNSJdLFsiODc4MSIsIlx1YjFkNiIsNSwiXHViMWRlXHViMWUwIiw3LCJcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjEiLDcsIlx1YjFmYVx1YjFmY1x1YjFmZSIsNSwiXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkIiw2LCJcdWIy''@;'; put 'put ''MTZcdWIyMThcdWIyMWEiLDUsIlx1YjIyMSIsMTgsIlx1YjIzNSIsNiwiXHViMjNkIiwyNiwiXHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxIiw2LCJcdWIyNmEiLDRdLFsiODg0MSIsIlx1YjI2ZiIsNCwiXHViMjc2Iiw1LCJcdWIyN2QiLDYsIlx1YjI4Nlx1YjI4''@;'; put 'put ''N1x1YjI4OFx1YjI4YSIsNF0sWyI4ODYxIiwiXHViMjhmXHViMjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliIiw0LCJcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjci''@;'; put 'put ''XSxbIjg4ODEiLCJcdWIyYjgiLDE1LCJcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDMiLDQsIlx1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJm''@;'; put 'put ''ZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOSIsNiwiXHViMzEyXHViMzE2Iiw1LCJcdWIzMWQiLDU0LCJcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjMiXSxbIjg5NDEiLCJcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIz''@;'; put 'put ''NmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzkiLDYsIlx1YjM4Mlx1YjM4NiIsNSwiXHViMzhkIl0sWyI4OTYxIiwiXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1IiwxMCwiXHViM2EyIiw1LCJcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWQiXSxb''@;'; put 'put ''Ijg5ODEiLCJcdWIzYWUiLDIxLCJcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTkiLDE4LCJcdWIzZmQi''@;'; put 'put ''LDE4LCJcdWI0MTEiLDYsIlx1YjQxOVx1YjQxYVx1YjQxYlx1YjQxZFx1YjQxZVx1YjQxZlx1YjQyMSIsNiwiXHViNDJhXHViNDJjIiw3LCJcdWI0MzUiLDE1XSxbIjhhNDEiLCJcdWI0NDUiLDEwLCJcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTkiLDYsIlx1YjQ2Mlx1YjQ2''@;'; put 'put ''NFx1YjQ2NiJdLFsiOGE2MSIsIlx1YjQ2NyIsNCwiXHViNDZkIiwxOCwiXHViNDgxXHViNDgyIl0sWyI4YTgxIiwiXHViNDgzIiw0LCJcdWI0ODkiLDE5LCJcdWI0OWUiLDUsIlx1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRhYVx1YjRhYlx1YjRhZCIsNywiXHViNGI2XHViNGI4XHViNGJh''@;'; put 'put ''Iiw1LCJcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzkiLDYsIlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNiIsNSwiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3Iiw0LCJcdWI0ZWVcdWI0ZjBcdWI0ZjIiLDUsIlx1YjRmOSIsMjYsIlx1''@;'; put 'put ''YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZCJdLFsiOGI0MSIsIlx1YjUxZSIsNSwiXHViNTI2XHViNTJiIiw0LCJcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzkiLDYsIlx1YjU0Mlx1YjU0NiJdLFsiOGI2MSIsIlx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1''@;'; put 'put ''YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NSIsNiwiXHViNTVlXHViNTYyIiw4XSxbIjhiODEiLCJcdWI1NmIiLDUyLCJcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjYiLDQsIlx1YjViZVx1YjViZlx1YjVj''@;'; put 'put ''MVx1YjVjMlx1YjVjM1x1YjVjNSIsNiwiXHViNWNlXHViNWQyIiw1LCJcdWI1ZDkiLDE4LCJcdWI1ZWQiLDE4XSxbIjhjNDEiLCJcdWI2MDAiLDE1LCJcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTkiLDRdLFsiOGM2MSIsIlx1YjYxZSIsNiwiXHViNjI2Iiw1LCJcdWI2MmQi''@;'; put 'put ''LDYsIlx1YjYzNSIsNV0sWyI4YzgxIiwiXHViNjNiIiwxMiwiXHViNjQ5IiwyNiwiXHViNjY1XHViNjY2XHViNjY3XHViNjY5Iiw1MCwiXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1Iiw1LCJcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjIiLDE2XSxbIjhkNDEiLCJc''@;'; put 'put ''dWI2YzMiLDE2LCJcdWI2ZDUiLDhdLFsiOGQ2MSIsIlx1YjZkZSIsMTcsIlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYSJdLFsiOGQ4MSIsIlx1YjZmYiIsNCwiXHViNzAyXHViNzAzXHViNzA0XHViNzA2IiwzMywiXHViNzJhXHViNzJiXHViNzJkXHVi''@;'; put 'put ''NzJlXHViNzMxIiw2LCJcdWI3M2FcdWI3M2MiLDcsIlx1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZCIsNiwiXHViNzU2Iiw5LCJcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjkiLDYsIlx1Yjc3Mlx1Yjc3NFx1Yjc3NiIsNSwiXHViNzdl''@;'; put 'put ''XHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1Iiw2LCJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWUiXSxbIjhlNDEiLCJcdWI3OWZcdWI3YTEiLDYsIlx1YjdhYVx1YjdhZSIsNSwiXHViN2I2XHViN2I3XHViN2I5Iiw4XSxbIjhlNjEiLCJcdWI3''@;'; put 'put ''YzIiLDQsIlx1YjdjOFx1YjdjYSIsMTldLFsiOGU4MSIsIlx1YjdkZSIsMTMsIlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNSIsNiwiXHViN2ZlXHViODAyIiw0LCJcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTEiLDYsIlx1YjgxYVx1YjgxY1x1YjgxZSIs''@;'; put 'put ''NSwiXHViODI2XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkIiw2LCJcdWI4MzZcdWI4M2EiLDUsIlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NSIsMTEsIlx1Yjg1Mlx1Yjg1NCIsNywiXHViODVlXHViODVmXHViODYxXHViODYyXHViODYzXHViODY1Iiw2LCJcdWI4NmVcdWI4NzBcdWI4''@;'; put 'put ''NzIiLDUsIlx1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZCIsN10sWyI4ZjQxIiwiXHViODg1Iiw3LCJcdWI4OGUiLDE3XSxbIjhmNjEiLCJcdWI4YTAiLDcsIlx1YjhhOSIsNiwiXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5Iiw0XSxbIjhmODEiLCJcdWI4YmVcdWI4''@;'; put 'put ''YmZcdWI4YzJcdWI4YzRcdWI4YzYiLDUsIlx1YjhjZFx1YjhjZVx1YjhjZlx1YjhkMVx1YjhkMlx1YjhkM1x1YjhkNSIsNywiXHViOGRlXHViOGUwXHViOGUyIiw1LCJcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjEiLDYsIlx1YjhmYVx1YjhmY1x1YjhmZSIsNSwiXHViOTA1''@;'; put 'put ''IiwxOCwiXHViOTE5Iiw2LCJcdWI5MjEiLDI2LCJcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDUiLDYsIlx1Yjk0ZFx1Yjk0ZVx1Yjk1MFx1Yjk1MiIsNV0sWyI5MDQxIiwiXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxIiw2LCJcdWI5NmFcdWI5NmNcdWI5''@;'; put 'put ''NmUiLDUsIlx1Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3ZCJdLFsiOTA2MSIsIlx1Yjk3ZSIsNSwiXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmIiwxNV0sWyI5MDgxIiwiXHViOTlmIiwxMiwiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1Iiw2LCJc''@;'; put 'put ''dWI5YmVcdWI5YzBcdWI5YzIiLDUsIlx1YjljYVx1YjljYlx1YjljZFx1YjlkMyIsNCwiXHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkIiw2LCJcdWI5ZjZcdWI5ZmIiLDQsIlx1YmEwMiIsNSwiXHViYTA5IiwxMSwiXHVi''@;'; put 'put ''YTE2IiwzMywiXHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2Il0sWyI5MTQxIiwiXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkIiw2LCJc''@;'; put 'put ''dWJhNjZcdWJhNmEiLDVdLFsiOTE2MSIsIlx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OSIsOSwiXHViYTg2XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkIiw1XSxbIjkxODEiLCJcdWJhOTMiLDIwLCJcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjMi''@;'; put 'put ''LDQsIlx1YmFiYVx1YmFiY1x1YmFiZSIsNSwiXHViYWM1XHViYWM2XHViYWM3XHViYWM5IiwxNCwiXHViYWRhIiwzMywiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAzXHViYjA1Iiw3LCJcdWJiMGVcdWJiMTBcdWJiMTIiLDUsIlx1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1''@;'; put 'put ''YmIxZVx1YmIxZlx1YmIyMSIsNl0sWyI5MjQxIiwiXHViYjI4XHViYjJhXHViYjJjIiw3LCJcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2YiLDQsIlx1YmI0Nlx1YmI0OFx1YmI0YVx1YmI0Ylx1YmI0Y1x1YmI0ZVx1YmI1MVx1YmI1MiJdLFsiOTI2MSIsIlx1YmI1M1x1YmI1NVx1YmI1Nlx1YmI1''@;'; put 'put ''N1x1YmI1OSIsNywiXHViYjYyXHViYjY0Iiw3LCJcdWJiNmQiLDRdLFsiOTI4MSIsIlx1YmI3MiIsMjEsIlx1YmI4OVx1YmI4YVx1YmI4Ylx1YmI4ZFx1YmI4ZVx1YmI4Zlx1YmI5MSIsMTgsIlx1YmJhNVx1YmJhNlx1YmJhN1x1YmJhOVx1YmJhYVx1YmJhYlx1YmJhZCIsNiwiXHViYmI1XHVi''@;'; put 'put ''YmI2XHViYmI4Iiw3LCJcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzkiLDYsIlx1YmJkMVx1YmJkMlx1YmJkNCIsMzUsIlx1YmJmYVx1YmJmYlx1YmJmZFx1YmJmZVx1YmMwMSJdLFsiOTM0MSIsIlx1YmMwMyIsNCwiXHViYzBhXHViYzBlXHViYzEwXHViYzEyXHVi''@;'; put 'put ''YzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1Il0sWyI5MzYxIiwiXHViYzM2XHViYzM3XHViYzM5Iiw2LCJcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFc''@;'; put 'put ''dWJjNGJcdWJjNGVcdWJjNGZcdWJjNTEiLDhdLFsiOTM4MSIsIlx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZSIsMzcsIlx1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4ZiIsNCwiXHViYzk2XHViYzk4XHViYzliIiw0LCJcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTkiLDYs''@;'; put 'put ''Ilx1YmNiMlx1YmNiNiIsNSwiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1Iiw3LCJcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGQiLDIyLCJcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmQiXSxbIjk0NDEi''@;'; put 'put ''LCJcdWJjZmUiLDUsIlx1YmQwNlx1YmQwOFx1YmQwYSIsNSwiXHViZDExXHViZDEyXHViZDEzXHViZDE1Iiw4XSxbIjk0NjEiLCJcdWJkMWUiLDUsIlx1YmQyNSIsNiwiXHViZDJkIiwxMl0sWyI5NDgxIiwiXHViZDNhIiw1LCJcdWJkNDEiLDYsIlx1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1''@;'; put 'put ''YmQ0Zlx1YmQ1MSIsNiwiXHViZDVhIiw5LCJcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjkiLDIyLCJcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGIiLDQsIlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZCIsNiwiXHViZGE1IiwxMCwiXHViZGIxIiw2LCJcdWJk''@;'; put 'put ''YjkiLDI0XSxbIjk1NDEiLCJcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGQiLDExLCJcdWJkZWEiLDUsIlx1YmRmMSJdLFsiOTU2MSIsIlx1YmRmMlx1YmRmM1x1YmRmNVx1YmRmNlx1YmRmN1x1YmRmOSIsNiwiXHViZTAxXHViZTAyXHViZTA0XHViZTA2''@;'; put 'put ''Iiw1LCJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTMiXSxbIjk1ODEiLCJcdWJlMTUiLDYsIlx1YmUxZVx1YmUyMCIsMzUsIlx1YmU0Nlx1YmU0N1x1YmU0OVx1YmU0YVx1YmU0Ylx1YmU0ZFx1YmU0ZiIsNCwiXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYy''@;'; put 'put ''XHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiIiw0LCJcdWJlNzJcdWJlNzYiLDQsIlx1YmU3ZVx1YmU3Zlx1YmU4MVx1YmU4Mlx1YmU4M1x1YmU4NSIsNiwiXHViZThlXHViZTkyIiw1LCJcdWJlOWEiLDEzLCJcdWJlYTkiLDE0XSxbIjk2NDEiLCJcdWJlYjgiLDIzLCJcdWJl''@;'; put 'put ''ZDJcdWJlZDMiXSxbIjk2NjEiLCJcdWJlZDVcdWJlZDZcdWJlZDkiLDYsIlx1YmVlMVx1YmVlMlx1YmVlNiIsNSwiXHViZWVkIiw4XSxbIjk2ODEiLCJcdWJlZjYiLDEwLCJcdWJmMDIiLDUsIlx1YmYwYSIsMTMsIlx1YmYxYVx1YmYxZSIsMzMsIlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1''@;'; put 'put ''YmY0N1x1YmY0OSIsNiwiXHViZjUyXHViZjUzXHViZjU0XHViZjU2Iiw0NF0sWyI5NzQxIiwiXHViZjgzIiwxNiwiXHViZjk1Iiw4XSxbIjk3NjEiLCJcdWJmOWUiLDE3LCJcdWJmYjEiLDddLFsiOTc4MSIsIlx1YmZiOSIsMTEsIlx1YmZjNiIsNSwiXHViZmNlXHViZmNmXHViZmQxXHViZmQy''@;'; put 'put ''XHViZmQzXHViZmQ1Iiw2LCJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTIiLDg5LCJcdWMwM2RcdWMwM2VcdWMwM2YiXSxbIjk4NDEiLCJcdWMwNDAiLDE2LCJcdWMwNTIiLDUsIlx1YzA1OVx1YzA1YVx1YzA1YiJdLFsiOTg2MSIsIlx1YzA1ZFx1YzA1ZVx1YzA1Zlx1YzA2MSIsNiwiXHVjMDZh''@;'; put 'put ''IiwxNV0sWyI5ODgxIiwiXHVjMDdhIiwyMSwiXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5Iiw2LCJcdWMwYTJcdWMwYTRcdWMwYTYiLDUsIlx1YzBhZVx1YzBiMVx1YzBiMlx1YzBiNyIsNCwiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVj''@;'; put 'put ''MGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxIiw2LCJcdWMwZGFcdWMwZGUiLDUsIlx1YzBlNlx1YzBlN1x1YzBlOVx1YzBlYVx1YzBlYlx1YzBlZCIsNiwiXHVjMGY2XHVjMGY4XHVjMGZhIiw1LCJcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDkiLDYsIlx1YzEx''@;'; put 'put ''MVx1YzExMlx1YzExM1x1YzExNFx1YzExNiIsNSwiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlIl0sWyI5OTQxIiwiXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxIiw2LCJcdWMx''@;'; put 'put ''NGFcdWMxNGUiLDUsIlx1YzE1Nlx1YzE1NyJdLFsiOTk2MSIsIlx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZCIsNiwiXHVjMTY2XHVjMTZhIiw1LCJcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2IiXSxbIjk5ODEiLCJcdWMxN2MiLDgsIlx1YzE4''@;'; put 'put ''NiIsNSwiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3Iiw0LCJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjEiLDExLCJcdWMxYmUiLDUsIlx1YzFjNVx1YzFjNlx1YzFjN1x1YzFj''@;'; put 'put ''OVx1YzFjYVx1YzFjYlx1YzFjZCIsNiwiXHVjMWQ1XHVjMWQ2XHVjMWQ5Iiw2LCJcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTkiLDYsIlx1YzFmMlx1YzFmNCIsNywiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1Iiw2LCJcdWMyMGVcdWMyMTBc''@;'; put 'put ''dWMyMTIiLDUsIlx1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1YzIyMVx1YzIyMlx1YzIyMyJdLFsiOWE0MSIsIlx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNSIsMTZdLFsiOWE2MSIsIlx1YzI0Nlx1YzI0N1x1YzI0OSIsNiwiXHVj''@;'; put 'put ''MjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5Iiw2LCJcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjYiXSxbIjlhODEiLCJcdWMyNjciLDQsIlx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NSIsNiwiXHVjMjdlXHVjMjgwXHVjMjgyIiw1LCJcdWMyOGEiLDUs''@;'; put 'put ''Ilx1YzI5MSIsNiwiXHVjMjk5XHVjMjlhXHVjMjljXHVjMjllIiw1LCJcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWUiLDUsIlx1YzJiNlx1YzJiOFx1YzJiYSIsMzMsIlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNSIsNSwiXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYz''@;'; put 'put ''XHVjMmY0XHVjMmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxIiw2LCJcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGYiXSxbIjliNDEiLCJcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWQiLDYsIlx1YzMyNlx1YzMyN1x1YzMy''@;'; put 'put ''YSIsOF0sWyI5YjYxIiwiXHVjMzMzIiwxNywiXHVjMzQ2Iiw3XSxbIjliODEiLCJcdWMzNGUiLDI1LCJcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzMiLDQsIlx1YzM3YVx1YzM3Ylx1YzM3ZSIsNSwiXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhi''@;'; put 'put ''XHVjMzhkIiw1MCwiXHVjM2MxIiwyMiwiXHVjM2RhIl0sWyI5YzQxIiwiXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzIiw0LCJcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWUiLDUsIlx1YzNmNlx1YzNmN1x1YzNmOSIsNV0sWyI5YzYxIiwiXHVjM2ZmIiw4LCJcdWM0MDkiLDYsIlx1YzQx''@;'; put 'put ''MSIsOV0sWyI5YzgxIiwiXHVjNDFiIiw4LCJcdWM0MjUiLDYsIlx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNSIsNiwiXHVjNDNlIiw5LCJcdWM0NDkiLDI2LCJcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmQiLDYsIlx1YzQ3Nlx1YzQ3N1x1YzQ3''@;'; put 'put ''OFx1YzQ3YSIsNSwiXHVjNDgxIiwxOCwiXHVjNDk1Iiw2LCJcdWM0OWQiLDEyXSxbIjlkNDEiLCJcdWM0YWEiLDEzLCJcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmQiLDhdLFsiOWQ2MSIsIlx1YzRjNiIsMjVdLFsiOWQ4MSIsIlx1YzRlMCIsOCwiXHVjNGVhIiw1LCJcdWM0ZjJcdWM0ZjNcdWM0''@;'; put 'put ''ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDIiLDksIlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNSIsNiwiXHVjNTFkIiwxMCwiXHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxIiw2LCJcdWM1M2FcdWM1''@;'; put 'put ''M2NcdWM1M2UiLDUsIlx1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OSIsNiwiXHVjNTcyXHVjNTc2Iiw1LCJcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1''@;'; put 'put ''ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTQiXSxbIjllNDEiLCJcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTEiLDcsIlx1YzVhYSIsOSwiXHVjNWI2Il0sWyI5ZTYx''@;'; put 'put ''IiwiXHVjNWI3XHVjNWJhXHVjNWJmIiw0LCJcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDkiLDYsIlx1YzVlMlx1YzVlNFx1YzVlNlx1YzVlNyJdLFsiOWU4MSIsIlx1YzVlOFx1YzVlOVx1YzVlYVx1YzVlYlx1YzVlZlx1YzVmMVx1YzVmMlx1''@;'; put 'put ''YzVmM1x1YzVmNVx1YzVmOFx1YzVmOVx1YzVmYVx1YzVmYlx1YzYwMlx1YzYwM1x1YzYwNFx1YzYwOVx1YzYwYVx1YzYwYlx1YzYwZFx1YzYwZVx1YzYwZlx1YzYxMSIsNiwiXHVjNjFhXHVjNjFkIiw2LCJcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJc''@;'; put 'put ''dWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDkiLDYsIlx1YzY1Mlx1YzY1NiIsNSwiXHVjNjVlXHVjNjVmXHVjNjYxIiwxMCwiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyIiw1LCJcdWM2N2FcdWM2N2Jc''@;'; put 'put ''dWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODEiLDYsIlx1YzY4YVx1YzY4Y1x1YzY4ZSIsNSwiXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkIiw2LCJcdWM2YTYiXSxbIjlmNDEiLCJcdWM2YThcdWM2YWEiLDUsIlx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYiIs''@;'; put 'put ''NCwiXHVjNmMyXHVjNmM0XHVjNmM2Iiw1LCJcdWM2Y2UiXSxbIjlmNjEiLCJcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDUiLDYsIlx1YzZkZVx1YzZkZlx1YzZlMiIsNSwiXHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyIl0sWyI5ZjgxIiwiXHVjNmYzIiw0''@;'; put 'put ''LCJcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmUiLDUsIlx1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZCIsNiwiXHVjNzE2XHVjNzE4XHVjNzFhIiw1LCJcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjkiLDYsIlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1Yzcz''@;'; put 'put ''OVx1YzczYVx1YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NSIsNCwiXHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxIiw2LCJcdWM3NjlcdWM3NmFcdWM3NmMiLDcsIlx1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3''@;'; put 'put ''YVx1Yzc3Ylx1Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5YiIsNCwiXHVjN2EyXHVjN2E3Iiw0LCJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjciXSxb''@;'; put 'put ''ImEwNDEiLCJcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzIiLDUsIlx1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMSIsNiwiXHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjIl0sWyJhMDYxIiwiXHVjN2RlIiw1LCJcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3''@;'; put 'put ''ZWJcdWM3ZWQiLDEzXSxbImEwODEiLCJcdWM3ZmIiLDQsIlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYiIsNCwiXHVjODEyXHVjODE0XHVjODE3Iiw0LCJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjUiLDYsIlx1YzgyZVx1YzgzMFx1YzgzMiIs''@;'; put 'put ''NSwiXHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxIiw2LCJcdWM4NGFcdWM4NGJcdWM4NGUiLDUsIlx1Yzg1NSIsMjYsIlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3YiIsNCwiXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVj''@;'; put 'put ''ODhlIiw1LCJcdWM4OTUiLDcsIlx1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNCJdLFsiYTE0MSIsIlx1YzhhNVx1YzhhNlx1YzhhN1x1YzhhOSIsMTgsIlx1YzhiZVx1YzhiZlx1YzhjMFx1YzhjMSJdLFsiYTE2MSIsIlx1YzhjMlx1YzhjM1x1YzhjNVx1YzhjNlx1YzhjN1x1YzhjOVx1''@;'; put 'put ''YzhjYVx1YzhjYlx1YzhjZCIsNiwiXHVjOGQ2XHVjOGQ4XHVjOGRhIiw1LCJcdWM4ZTJcdWM4ZTNcdWM4ZTUiXSxbImExODEiLCJcdWM4ZTYiLDE0LCJcdWM4ZjYiLDUsIlx1YzhmZVx1YzhmZlx1YzkwMVx1YzkwMlx1YzkwM1x1YzkwNyIsNCwiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhi''@;'; put 'put ''N1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw5LCJceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUy''@;'; put 'put ''MTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1''@;'; put 'put ''MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMiJdLFsiYTI0MSIsIlx1Yzkx''@;'; put 'put ''MFx1YzkxMiIsNSwiXHVjOTE5IiwxOF0sWyJhMjYxIiwiXHVjOTJkIiw2LCJcdWM5MzUiLDE4XSxbImEyODEiLCJcdWM5NDgiLDcsIlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OSIsNiwiXHVjOTYyXHVjOTY0Iiw3LCJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRc''@;'; put 'put ''dTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1''@;'; put 'put ''MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2Njlc''@;'; put 'put ''dTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlIl0sWyJhMzQxIiwiXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1Iiw2LCJcdWM5N2QiLDEwLCJcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGYiXSxbImEzNjEiLCJc''@;'; put 'put ''dWM5OTEiLDYsIlx1Yzk5YVx1Yzk5Y1x1Yzk5ZSIsMTZdLFsiYTM4MSIsIlx1YzlhZiIsMTYsIlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYiIsNCwiXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRiXHVmZjAxIiw1OCwiXHVmZmU2XHVmZjNkIiwzMiwiXHVmZmUzIl0s''@;'; put 'put ''WyJhNDQxIiwiXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyIiw1LCJcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDQiXSxbImE0NjEiLCJcdWNhMDVcdWNhMDZc''@;'; put 'put ''dWNhMDdcdWNhMGFcdWNhMGUiLDUsIlx1Y2ExNVx1Y2ExNlx1Y2ExN1x1Y2ExOSIsMTJdLFsiYTQ4MSIsIlx1Y2EyNlx1Y2EyN1x1Y2EyOFx1Y2EyYSIsMjgsIlx1MzEzMSIsOTNdLFsiYTU0MSIsIlx1Y2E0NyIsNCwiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1Iiw2LCJc''@;'; put 'put ''dWNhNWVcdWNhNjIiLDUsIlx1Y2E2OVx1Y2E2YSJdLFsiYTU2MSIsIlx1Y2E2YiIsMTcsIlx1Y2E3ZSIsNSwiXHVjYTg1XHVjYTg2Il0sWyJhNTgxIiwiXHVjYTg3IiwxNiwiXHVjYTk5IiwxNCwiXHUyMTcwIiw5XSxbImE1YjAiLCJcdTIxNjAiLDldLFsiYTVjMSIsIlx1MDM5MSIsMTYsIlx1''@;'; put 'put ''MDNhMyIsNl0sWyJhNWUxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE2NDEiLCJcdWNhYTgiLDE5LCJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzUiXSxbImE2NjEiLCJcdWNhYzYiLDUsIlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1''@;'; put 'put ''Y2FkYSIsNSwiXHVjYWUxIiw2XSxbImE2ODEiLCJcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWQiLDYsIlx1Y2FmNSIsMTgsIlx1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUw''@;'; put 'put ''M1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1''@;'; put 'put ''MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0MyIsN10sWyJhNzQxIiwiXHVjYjBiIiw0LCJcdWNiMTFcdWNiMTJcdWNi''@;'; put 'put ''MTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTkiLDYsIlx1Y2IyMiIsN10sWyJhNzYxIiwiXHVjYjJhIiwyMiwiXHVjYjQyXHVjYjQzXHVjYjQ0Il0sWyJhNzgxIiwiXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxIiw2LCJcdWNiNWFcdWNiNWJc''@;'; put 'put ''dWNiNWNcdWNiNWUiLDUsIlx1Y2I2NSIsNywiXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5Iiw5LCJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjAi''@;'; put 'put ''LDksIlx1MzM4MCIsNCwiXHUzM2JhIiw1LCJcdTMzOTAiLDQsIlx1MjEyNlx1MzNjMFx1MzNjMVx1MzM4YVx1MzM4Ylx1MzM4Y1x1MzNkNlx1MzNjNVx1MzNhZFx1MzNhZVx1MzNhZlx1MzNkYlx1MzNhOVx1MzNhYVx1MzNhYlx1MzNhY1x1MzNkZFx1MzNkMFx1MzNkM1x1MzNjM1x1MzNjOVx1''@;'; put 'put ''MzNkY1x1MzNjNiJdLFsiYTg0MSIsIlx1Y2I2ZCIsMTAsIlx1Y2I3YSIsMTRdLFsiYTg2MSIsIlx1Y2I4OSIsMTgsIlx1Y2I5ZCIsNl0sWyJhODgxIiwiXHVjYmE0IiwxOSwiXHVjYmI5IiwxMSwiXHhjNlx4ZDBceGFhXHUwMTI2Il0sWyJhOGE2IiwiXHUwMTMyIl0sWyJhOGE4IiwiXHUwMTNm''@;'; put 'put ''XHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhIl0sWyJhOGIxIiwiXHUzMjYwIiwyNywiXHUyNGQwIiwyNSwiXHUyNDYwIiwxNCwiXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlIl0sWyJhOTQxIiwiXHVjYmM1IiwxNCwiXHVjYmQ1Iiwx''@;'; put 'put ''MF0sWyJhOTYxIiwiXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUzXHVjYmU1XHVjYmU2XHVjYmU4XHVjYmVhIiwxOF0sWyJhOTgxIiwiXHVjYmZkIiwxNCwiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1Iiw2LCJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUw''@;'; put 'put ''MTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMCIsMjcsIlx1MjQ5YyIsMjUsIlx1MjQ3NCIsMTQsIlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NCJd''@;'; put 'put ''LFsiYWE0MSIsIlx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMSIsNiwiXHVjYzNhXHVjYzNmIiw0LCJcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGUiXSxbImFhNjEiLCJcdWNjNGYiLDQsIlx1Y2M1Nlx1Y2M1YSIsNSwiXHVjYzYxXHVj''@;'; put 'put ''YzYyXHVjYzYzXHVjYzY1XHVjYzY3XHVjYzY5Iiw2LCJcdWNjNzFcdWNjNzIiXSxbImFhODEiLCJcdWNjNzNcdWNjNzRcdWNjNzYiLDI5LCJcdTMwNDEiLDgyXSxbImFiNDEiLCJcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTEiLDYs''@;'; put 'put ''Ilx1Y2NhYVx1Y2NhZSIsNSwiXHVjY2I2XHVjY2I3XHVjY2I5Il0sWyJhYjYxIiwiXHVjY2JhXHVjY2JiXHVjY2JkIiw2LCJcdWNjYzZcdWNjYzhcdWNjY2EiLDUsIlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNSIsNV0sWyJhYjgxIiwiXHVjY2RiIiw4LCJcdWNjZTUiLDYsIlx1Y2NlZFx1Y2Nl''@;'; put 'put ''ZVx1Y2NlZlx1Y2NmMSIsMTIsIlx1MzBhMSIsODVdLFsiYWM0MSIsIlx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMiIsNSwiXHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExIiw2LCJcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjAiXSxbImFjNjEiLCJcdWNkMjFcdWNkMjJc''@;'; put 'put ''dWNkMjNcdWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmQiLDExLCJcdWNkM2EiLDRdLFsiYWM4MSIsIlx1Y2QzZiIsMjgsIlx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhY2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYi''@;'; put 'put ''LDI1XSxbImFkNDEiLCJcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjUiLDYsIlx1Y2Q2ZVx1Y2Q3MFx1Y2Q3MiIsNSwiXHVjZDc5Iiw3XSxbImFkNjEiLCJcdWNkODEiLDYsIlx1Y2Q4OSIsMTAsIlx1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5ZiJdLFsiYWQ4''@;'; put 'put ''MSIsIlx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYSIsNSwiXHVjZGIxIiwxOCwiXHVjZGM1Il0sWyJhZTQxIiwiXHVjZGM2Iiw1LCJcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDEiLDE2XSxbImFlNjEiLCJcdWNkZTIiLDUsIlx1Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2Rl''@;'; put 'put ''ZFx1Y2RlZVx1Y2RlZlx1Y2RmMSIsNiwiXHVjZGZhXHVjZGZjXHVjZGZlIiw0XSxbImFlODEiLCJcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGQiLDYsIlx1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYSIsNSwiXHVjZTIyXHVjZTIzXHVjZTI1XHVj''@;'; put 'put ''ZTI2XHVjZTI3XHVjZTI5XHVjZTJhXHVjZTJiIl0sWyJhZjQxIiwiXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2IiwxOV0sWyJhZjYxIiwiXHVjZTRhIiwxMywiXHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyIiw1LCJcdWNlNmFcdWNlNmMiXSxbImFmODEi''@;'; put 'put ''LCJcdWNlNmUiLDUsIlx1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZCIsNiwiXHVjZTg2XHVjZTg4XHVjZThhIiw1LCJcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTkiXSxbImIwNDEiLCJcdWNlOWEiLDUsIlx1Y2VhMlx1Y2VhNiIsNSwiXHVjZWFlIiwxMl0s''@;'; put 'put ''WyJiMDYxIiwiXHVjZWJiIiw1LCJcdWNlYzIiLDE5XSxbImIwODEiLCJcdWNlZDYiLDEzLCJcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWQiLDYsIlx1Y2VmNlx1Y2VmYSIsNSwiXHVhYzAwXHVhYzAxXHVhYzA0XHVhYzA3XHVhYzA4XHVhYzA5XHVhYzBhXHVhYzEwIiw3LCJcdWFjMTki''@;'; put 'put ''LDQsIlx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4''@;'; put 'put ''NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1''@;'; put 'put ''YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNiJdLFsiYjE0MSIsIlx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2Yw''@;'; put 'put ''OSIsNiwiXHVjZjEyXHVjZjE0XHVjZjE2Iiw1LCJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjMiXSxbImIxNjEiLCJcdWNmMjUiLDYsIlx1Y2YyZVx1Y2YzMiIsNSwiXHVjZjM5IiwxMV0sWyJiMTgxIiwiXHVjZjQ1IiwxNCwiXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVj''@;'; put 'put ''ZjViXHVjZjVkIiw2LCJcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRc''@;'; put 'put ''dWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFk''@;'; put 'put ''YzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVc''@;'; put 'put ''dWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzgiXSxbImIyNDEiLCJcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNm''@;'; put 'put ''NzZcdWNmNzdcdWNmNzkiLDYsIlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4NiIsNSwiXHVjZjhkIl0sWyJiMjYxIiwiXHVjZjhlIiwxOCwiXHVjZmEyIiw1LCJcdWNmYTkiXSxbImIyODEiLCJcdWNmYWEiLDUsIlx1Y2ZiMSIsMTgsIlx1Y2ZjNSIsNiwiXHVhZTc5XHVhZTdiXHVhZTdj''@;'; put 'put ''XHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVh''@;'; put 'put ''ZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5''@;'; put 'put ''XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHVi''@;'; put 'put ''MDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5Il0sWyJiMzQxIiwiXHVjZmNjIiwxOSwiXHVjZmUyXHVjZmUzXHVjZmU1XHVjZmU2XHVjZmU3XHVjZmU5Il0sWyJiMzYxIiwiXHVjZmVhIiw1LCJcdWNmZjJcdWNmZjRcdWNmZjYiLDUsIlx1Y2ZmZFx1''@;'; put 'put ''Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNSIsNV0sWyJiMzgxIiwiXHVkMDBiIiw1LCJcdWQwMTIiLDUsIlx1ZDAxOSIsMTksIlx1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5''@;'; put 'put ''Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYiIsNCwiXHViMGIxXHViMGIzXHViMGI0XHViMGI1XHViMGI4XHViMGJjXHViMGM0XHViMGM1XHViMGM3XHViMGM4XHViMGM5XHViMGQwXHViMGQxXHViMGQ0XHViMGQ4XHViMGUwXHViMGU1XHViMTA4XHViMTA5XHViMTBiXHVi''@;'; put 'put ''MTBjXHViMTEwXHViMTEyXHViMTEzXHViMTE4XHViMTE5XHViMTFiXHViMTFjXHViMTFkXHViMTIzXHViMTI0XHViMTI1XHViMTI4XHViMTJjXHViMTM0XHViMTM1XHViMTM3XHViMTM4XHViMTM5XHViMTQwXHViMTQxXHViMTQ0XHViMTQ4XHViMTUwXHViMTUxXHViMTU0XHViMTU1XHViMTU4''@;'; put 'put ''XHViMTVjXHViMTYwXHViMTc4XHViMTc5XHViMTdjXHViMTgwXHViMTgyXHViMTg4XHViMTg5XHViMThiXHViMThkXHViMTkyXHViMTkzXHViMTk0XHViMTk4XHViMTljXHViMWE4XHViMWNjXHViMWQwXHViMWQ0XHViMWRjXHViMWRkIl0sWyJiNDQxIiwiXHVkMDJlIiw1LCJcdWQwMzZcdWQw''@;'; put 'put ''MzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2QiLDYsIlx1ZDA0Nlx1ZDA0OFx1ZDA0YSIsNV0sWyJiNDYxIiwiXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5Iiw2LCJcdWQwNjEiLDEwLCJcdWQwNmVcdWQwNmYiXSxbImI0ODEiLCJcdWQwNzFcdWQwNzJcdWQwNzNc''@;'; put 'put ''dWQwNzUiLDYsIlx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4MiIsMTgsIlx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1''@;'; put 'put ''OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1''@;'; put 'put ''YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYiIsNCwiXHViMmYzXHViMmY0XHViMmY1XHViMmY3Iiw0LCJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRc''@;'; put 'put ''dWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjUiXSxbImI1NDEiLCJcdWQwOTUiLDE0LCJcdWQwYTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJcdWQwYWQiLDVdLFsiYjU2MSIsIlx1ZDBiM1x1ZDBiNlx1ZDBiOFx1''@;'; put 'put ''ZDBiYSIsNSwiXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhIiw1LCJcdWQwZDJcdWQwZDYiLDRdLFsiYjU4MSIsIlx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNSIsNiwiXHVkMGVlXHVkMGYyIiw1LCJcdWQwZjkiLDExLCJcdWIzNjdcdWIzNjlc''@;'; put 'put ''dWIzNmJcdWIzNmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhcdWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIz''@;'; put 'put ''ZDdcdWIzZDlcdWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRc''@;'; put 'put ''dWI0YTRcdWI0YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFcdWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1''@;'; put 'put ''MjRcdWI1MjVcdWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzgiXSxbImI2NDEiLCJcdWQxMDUiLDcsIlx1ZDEwZSIsMTddLFsiYjY2MSIsIlx1ZDEyMCIsMTUsIlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEz''@;'; put 'put ''ZFx1ZDEzZSJdLFsiYjY4MSIsIlx1ZDEzZlx1ZDE0Mlx1ZDE0NiIsNSwiXHVkMTRlXHVkMTRmXHVkMTUxXHVkMTUyXHVkMTUzXHVkMTU1Iiw2LCJcdWQxNWVcdWQxNjBcdWQxNjIiLDUsIlx1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0''@;'; put 'put ''Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1''@;'; put 'put ''YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1Yjcw''@;'; put 'put ''MVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1''@;'; put 'put ''Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5NyJdLFsiYjc0MSIsIlx1ZDE2ZSIsMTMsIlx1ZDE3ZCIsNiwiXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhIl0sWyJiNzYxIiwiXHVkMThiIiwyMCwiXHVkMWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3Il0sWyJiNzgxIiwi''@;'; put 'put ''XHVkMWE5Iiw2LCJcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzEiLDE0LCJcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3''@;'; put 'put ''YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4Mzlc''@;'; put 'put ''dWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4''@;'; put 'put ''ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjkiXSxbImI4NDEiLCJc''@;'; put 'put ''dWQxZDAiLDcsIlx1ZDFkOSIsMTddLFsiYjg2MSIsIlx1ZDFlYiIsOCwiXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5IiwxM10sWyJiODgxIiwiXHVkMjA4XHVkMjBhIiw1LCJcdWQyMTEiLDI0LCJcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdc''@;'; put 'put ''dWI5ODlcdWI5OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5YzlcdWI5Y2NcdWI5Y2UiLDQsIlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1Yjll''@;'; put 'put ''Y1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1''@;'; put 'put ''YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmYyJdLFsi''@;'; put 'put ''Yjk0MSIsIlx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNSIsNiwiXHVkMjNlXHVkMjQwXHVkMjQyIiw1LCJcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGMiXSxbImI5NjEiLCJcdWQyNGQiLDE0LCJcdWQyNWQiLDYsIlx1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2''@;'; put 'put ''OCJdLFsiYjk4MSIsIlx1ZDI2OSIsMjIsIlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1''@;'; put 'put ''YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJk''@;'; put 'put ''MFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNCIsNCwiXHViYzFiIiw0LCJcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJj''@;'; put 'put ''NDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTciXSxbImJhNDEiLCJcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTYi''@;'; put 'put ''LDUsIlx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNSIsNiwiXHVkMmFkIl0sWyJiYTYxIiwiXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyIiw1LCJcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzMiLDQsIlx1ZDJjYVx1ZDJjYyIsNV0sWyJiYTgxIiwi''@;'; put 'put ''XHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5XHVkMmRhXHVkMmRiXHVkMmRkIiw2LCJcdWQyZTYiLDksIlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNi''@;'; put 'put ''MVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1''@;'; put 'put ''YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRk''@;'; put 'put ''NVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1''@;'; put 'put ''YmU2MFx1YmU2MVx1YmU2NCJdLFsiYmI0MSIsIlx1ZDJmYiIsNCwiXHVkMzAyXHVkMzA0XHVkMzA2Iiw1LCJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTciLDQsIlx1ZDMxZVx1ZDMyMlx1ZDMyMyJdLFsiYmI2MSIsIlx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1''@;'; put 'put ''ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMSIsNiwiXHVkMzNhXHVkMzNlIiw1LCJcdWQzNDZcdWQzNDdcdWQzNDhcdWQzNDkiXSxbImJiODEiLCJcdWQzNGEiLDMxLCJcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRc''@;'; put 'put ''dWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBcdWJlOTFcdWJlOThcdWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJm''@;'; put 'put ''NDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJmNTFcdWJmNTVcdWJmOTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBc''@;'; put 'put ''dWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNcdWMwYWRcdWMwYWZcdWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTQiXSxb''@;'; put 'put ''ImJjNDEiLCJcdWQzNmEiLDE3LCJcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODciXSxbImJjNjEiLCJcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTIiLDUsIlx1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMSIsNiwiXHVk''@;'; put 'put ''M2FhXHVkM2FjXHVkM2FlIl0sWyJiYzgxIiwiXHVkM2FmIiw0LCJcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmQiLDYsIlx1ZDNjNlx1ZDNjN1x1ZDNjYSIsNSwiXHVkM2QxIiw1LCJcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMx''@;'; put 'put ''MDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWMiLDQsIlx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1''@;'; put 'put ''YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFj''@;'; put 'put ''NFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1''@;'; put 'put ''YzIyZCJdLFsiYmQ0MSIsIlx1ZDNkN1x1ZDNkOSIsNywiXHVkM2UyXHVkM2U0Iiw3LCJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjciXSxbImJkNjEiLCJcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDIiLDUsIlx1ZDQwOSIs''@;'; put 'put ''MTNdLFsiYmQ4MSIsIlx1ZDQxNyIsNSwiXHVkNDFlIiwyNSwiXHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVj''@;'; put 'put ''MjkwXHVjMjk4XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVjMmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZj''@;'; put 'put ''XHVjMzAwXHVjMzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVj''@;'; put 'put ''M2MwXHVjM2Q4XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVjNDEwXHVjNDI0XHVjNDJjXHVjNDMwIl0sWyJiZTQxIiwiXHVkNDM4Iiw3LCJcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDUiLDE0XSxbImJlNjEi''@;'; put 'put ''LCJcdWQ0NTQiLDcsIlx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NSIsNywiXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyIl0sWyJiZTgxIiwiXHVkNDczIiw0LCJcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0ODFcdWQ0ODMiLDQsIlx1ZDQ4YVx1ZDQ4Y1x1ZDQ4''@;'; put 'put ''ZSIsNSwiXHVkNDk1Iiw4LCJcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVcdWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1''@;'; put 'put ''MDFcdWM1MGNcdWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRc''@;'; put 'put ''dWM1NWVcdWM1NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBcdWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1''@;'; put 'put ''YjhcdWM1YjlcdWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzQiLDYsIlx1YzVjY1x1YzVjZSJdLFsiYmY0MSIsIlx1ZDQ5ZSIsMTAsIlx1ZDRhYSIsMTRdLFsiYmY2MSIsIlx1ZDRiOSIsMTgsIlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNSJdLFsiYmY4MSIs''@;'; put 'put ''Ilx1ZDRkNiIsNSwiXHVkNGRkXHVkNGRlXHVkNGUwIiw3LCJcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjEiLDYsIlx1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVl''@;'; put 'put ''ZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmYyIsNSwiXHVjNjA1XHVjNjA2XHVjNjA3XHVjNjA4XHVjNjBjXHVjNjEwXHVjNjE4XHVjNjE5XHVjNjFiXHVjNjFjXHVjNjI0XHVjNjI1XHVjNjI4XHVjNjJjXHVjNjJkXHVjNjJlXHVjNjMwXHVjNjMzXHVjNjM0XHVjNjM1XHVjNjM3XHVj''@;'; put 'put ''NjM5XHVjNjNiXHVjNjQwXHVjNjQxXHVjNjQ0XHVjNjQ4XHVjNjUwXHVjNjUxXHVjNjUzXHVjNjU0XHVjNjU1XHVjNjVjXHVjNjVkXHVjNjYwXHVjNjZjXHVjNjZmXHVjNjcxXHVjNjc4XHVjNjc5XHVjNjdjXHVjNjgwXHVjNjg4XHVjNjg5XHVjNjhiXHVjNjhkXHVjNjk0XHVjNjk1XHVjNjk4''@;'; put 'put ''XHVjNjljXHVjNmE0XHVjNmE1XHVjNmE3XHVjNmE5XHVjNmIwXHVjNmIxXHVjNmI0XHVjNmI4XHVjNmI5XHVjNmJhXHVjNmMwXHVjNmMxXHVjNmMzXHVjNmM1XHVjNmNjXHVjNmNkXHVjNmQwXHVjNmQ0XHVjNmRjXHVjNmRkXHVjNmUwXHVjNmUxXHVjNmU4Il0sWyJjMDQxIiwiXHVkNGZlIiw1''@;'; put 'put ''LCJcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGQiLDYsIlx1ZDUxNlx1ZDUxOCIsNV0sWyJjMDYxIiwiXHVkNTFlIiwyNV0sWyJjMDgxIiwiXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNmXHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1Iiw2LCJcdWQ1''@;'; put 'put ''NGVcdWQ1NTBcdWQ1NTIiLDUsIlx1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1''@;'; put 'put ''YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MSIsNywiXHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgz''@;'; put 'put ''XHVjNzg0XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVjNzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVjN2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVj''@;'; put 'put ''N2MwXHVjN2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2QwXHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhIl0sWyJjMTQxIiwiXHVkNTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlIiw1LCJcdWQ1NzZcdWQ1Nzdc''@;'; put 'put ''dWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2QiLDYsIlx1ZDU4Nlx1ZDU4YVx1ZDU4YiJdLFsiYzE2MSIsIlx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MSIsMTksIlx1ZDVhNlx1ZDVhNyJdLFsiYzE4MSIsIlx1ZDVhOCIsMzEsIlx1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1Yzgx''@;'; put 'put ''Y1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1''@;'; put 'put ''Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1Yzkw''@;'; put 'put ''ZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1''@;'; put 'put ''YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkMyJdLFsiYzI0MSIsIlx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkMyIsNCwiXHVkNWRhXHVkNWRjXHVkNWRlIiw1LCJcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWUiXSxbImMy''@;'; put 'put ''NjEiLCJcdWQ1ZWYiLDQsIlx1ZDVmNlx1ZDVmOFx1ZDVmYSIsNSwiXHVkNjAyXHVkNjAzXHVkNjA1XHVkNjA2XHVkNjA3XHVkNjA5Iiw2LCJcdWQ2MTIiXSxbImMyODEiLCJcdWQ2MTYiLDUsIlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNSIsNywiXHVkNjJlIiw5''@;'; put 'put ''LCJcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRc''@;'; put 'put ''dWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNh''@;'; put 'put ''ZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBc''@;'; put 'put ''dWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2IiXSxbImMzNDEiLCJcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2''@;'; put 'put ''NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWQiLDRdLFsiYzM2MSIsIlx1ZDY2MiIsNCwiXHVkNjY4XHVkNjZhIiw1LCJcdWQ2NzJcdWQ2NzNcdWQ2NzUiLDExXSxbImMzODEiLCJcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODYiLDUs''@;'; put 'put ''Ilx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NSIsNywiXHVkNjllXHVkNmEwXHVkNmEyIiw1LCJcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNj''@;'; put 'put ''NjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhc''@;'; put 'put ''dWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNk''@;'; put 'put ''YTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzUiXSxbImM0NDEiLCJcdWQ2YWJc''@;'; put 'put ''dWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjEiLDcsIlx1ZDZiYVx1ZDZiYyIsNywiXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiIl0sWyJjNDYxIiwiXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhIiw1LCJcdWQ2ZTFcdWQ2ZTJc''@;'; put 'put ''dWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTkiLDRdLFsiYzQ4MSIsIlx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNiIsNSwiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1IiwxMSwiXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVj''@;'; put 'put ''ZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMx''@;'; put 'put ''XHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVj''@;'; put 'put ''ZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZj''@;'; put 'put ''XHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVkMDM1XHVkMDM4XHVkMDNjIl0sWyJjNTQxIiwiXHVkNzE1XHVkNzE2XHVkNzE3XHVkNzFhXHVkNzFiXHVkNzFkXHVkNzFlXHVkNzFmXHVkNzIxIiw2LCJcdWQ3MmFcdWQ3MmNcdWQ3MmUiLDUsIlx1ZDczNlx1ZDczN1x1ZDcz''@;'; put 'put ''OSJdLFsiYzU2MSIsIlx1ZDczYVx1ZDczYlx1ZDczZCIsNiwiXHVkNzQ1XHVkNzQ2XHVkNzQ4XHVkNzRhIiw1LCJcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWEiLDRdLFsiYzU4MSIsIlx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1''@;'; put 'put ''ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NSIsNiwiXHVkNzdlXHVkNzdmXHVkNzgwXHVkNzgyIiw1LCJcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFc''@;'; put 'put ''dWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQw''@;'; put 'put ''ZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRc''@;'; put 'put ''dWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWMiXSxbImM2NDEiLCJcdWQ3OGRcdWQ3''@;'; put 'put ''OGVcdWQ3OGZcdWQ3OTEiLDYsIlx1ZDc5YVx1ZDc5Y1x1ZDc5ZSIsNV0sWyJjNmExIiwiXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVkMmMwXHVkMmMy''@;'; put 'put ''XHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIwXHVkMzIxXHVk''@;'; put 'put ''MzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVkM2E5XHVkM2Fi''@;'; put 'put ''XHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxIl0sWyJjN2ExIiwiXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVk''@;'; put 'put ''NDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0''@;'; put 'put ''XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVk''@;'; put 'put ''NTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEw''@;'; put 'put ''XHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwIl0sWyJjOGExIiwiXHVkNjI0XHVkNjJkXHVkNjM4XHVkNjM5XHVkNjNjXHVkNjQwXHVkNjQ1XHVkNjQ4XHVkNjQ5XHVkNjRiXHVkNjRkXHVkNjUxXHVkNjU0XHVkNjU1XHVkNjU4XHVkNjVjXHVkNjY3XHVkNjY5XHVkNjcwXHVk''@;'; put 'put ''NjcxXHVkNjc0XHVkNjgzXHVkNjg1XHVkNjhjXHVkNjhkXHVkNjkwXHVkNjk0XHVkNjlkXHVkNjlmXHVkNmExXHVkNmE4XHVkNmFjXHVkNmIwXHVkNmI5XHVkNmJiXHVkNmM0XHVkNmM1XHVkNmM4XHVkNmNjXHVkNmQxXHVkNmQ0XHVkNmQ3XHVkNmQ5XHVkNmUwXHVkNmU0XHVkNmU4XHVkNmYw''@;'; put 'put ''XHVkNmY1XHVkNmZjXHVkNmZkXHVkNzAwXHVkNzA0XHVkNzExXHVkNzE4XHVkNzE5XHVkNzFjXHVkNzIwXHVkNzI4XHVkNzI5XHVkNzJiXHVkNzJkXHVkNzM0XHVkNzM1XHVkNzM4XHVkNzNjXHVkNzQ0XHVkNzQ3XHVkNzQ5XHVkNzUwXHVkNzUxXHVkNzU0XHVkNzU2XHVkNzU3XHVkNzU4XHVk''@;'; put 'put ''NzU5XHVkNzYwXHVkNzYxXHVkNzYzXHVkNzY1XHVkNzY5XHVkNzZjXHVkNzcwXHVkNzc0XHVkNzdjXHVkNzdkXHVkNzgxXHVkNzg4XHVkNzg5XHVkNzhjXHVkNzkwXHVkNzk4XHVkNzk5XHVkNzliXHVkNzlkIl0sWyJjYWExIiwiXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2Vm''@;'; put 'put ''XHU1NDc1XHU1NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNmXHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2''@;'; put 'put ''MTY0XHU2YmJjXHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQyXHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZl''@;'; put 'put ''XHU4MjcxXHU4YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIxXHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3''@;'; put 'put ''N2IwXHU3ZDNhXHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1Il0sWyJjYmExIiwiXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDcz''@;'; put 'put ''XHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVm''@;'; put 'put ''OTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdl''@;'; put 'put ''XHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyIl0sWyJjY2ExIiwiXHU3N2JjXHU5MjEwXHU5ZWQ0XHU1MmFiXHU2MDJmXHU4ZmYyXHU1''@;'; put 'put ''MDQ4XHU2MWE5XHU2M2VkXHU2NGNhXHU2ODNjXHU2YTg0XHU2ZmMwXHU4MTg4XHU4OWExXHU5Njk0XHU1ODA1XHU3MjdkXHU3MmFjXHU3NTA0XHU3ZDc5XHU3ZTZkXHU4MGE5XHU4OThiXHU4Yjc0XHU5MDYzXHU5ZDUxXHU2Mjg5XHU2YzdhXHU2ZjU0XHU3ZDUwXHU3ZjNhXHU4YTIzXHU1MTdj''@;'; put 'put ''XHU2MTRhXHU3YjlkXHU4YjE5XHU5MjU3XHU5MzhjXHU0ZWFjXHU0ZmQzXHU1MDFlXHU1MGJlXHU1MTA2XHU1MmMxXHU1MmNkXHU1MzdmXHU1NzcwXHU1ODgzXHU1ZTlhXHU1ZjkxXHU2MTc2XHU2MWFjXHU2NGNlXHU2NTZjXHU2NjZmXHU2NmJiXHU2NmY0XHU2ODk3XHU2ZDg3XHU3MDg1XHU3''@;'; put 'put ''MGYxXHU3NDlmXHU3NGE1XHU3NGNhXHU3NWQ5XHU3ODZjXHU3OGVjXHU3YWRmXHU3YWY2XHU3ZDQ1XHU3ZDkzXHU4MDE1XHU4MDNmXHU4MTFiXHU4Mzk2XHU4YjY2XHU4ZjE1XHU5MDE1XHU5M2UxXHU5ODAzXHU5ODM4XHU5YTVhXHU5YmU4XHU0ZmMyXHU1NTUzXHU1ODNhXHU1OTUxXHU1YjYz''@;'; put 'put ''XHU1YzQ2XHU2MGI4XHU2MjEyXHU2ODQyXHU2OGIwIl0sWyJjZGExIiwiXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQxXHU1''@;'; put 'put ''YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4Zjlj''@;'; put 'put ''XHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZjXHU1''@;'; put 'put ''MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjIl0sWyJjZWExIiwiXHU3OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRi''@;'; put 'put ''XHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1''@;'; put 'put ''MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVm''@;'; put 'put ''XHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0''@;'; put 'put ''ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlIl0sWyJjZmExIiwiXHU1MzQwXHU1M2UzXHU1M2U1XHU1NDhlXHU1NjE0XHU1Nzc1XHU1N2EyXHU1YmM3XHU1ZDg3XHU1ZWQwXHU2MWZjXHU2MmQ4XHU2NTUxXHU2N2I4XHU2N2U5XHU2OWNiXHU2YjUwXHU2YmM2XHU2YmVjXHU2YzQyXHU2ZTlk''@;'; put 'put ''XHU3MDc4XHU3MmQ3XHU3Mzk2XHU3NDAzXHU3N2JmXHU3N2U5XHU3YTc2XHU3ZDdmXHU4MDA5XHU4MWZjXHU4MjA1XHU4MjBhXHU4MmRmXHU4ODYyXHU4YjMzXHU4Y2ZjXHU4ZWMwXHU5MDExXHU5MGIxXHU5MjY0XHU5MmI2XHU5OWQyXHU5YTQ1XHU5Y2U5XHU5ZGQ3XHU5ZjljXHU1NzBiXHU1''@;'; put 'put ''YzQwXHU4M2NhXHU5N2EwXHU5N2FiXHU5ZWI0XHU1NDFiXHU3YTk4XHU3ZmE0XHU4OGQ5XHU4ZWNkXHU5MGUxXHU1ODAwXHU1YzQ4XHU2Mzk4XHU3YTlmXHU1YmFlXHU1ZjEzXHU3YTc5XHU3YWFlXHU4MjhlXHU4ZWFjXHU1MDI2XHU1MjM4XHU1MmY4XHU1Mzc3XHU1NzA4XHU2MmYzXHU2Mzcy''@;'; put 'put ''XHU2YjBhXHU2ZGMzXHU3NzM3XHU1M2E1XHU3MzU3XHU4NTY4XHU4ZTc2XHU5NWQ1XHU2NzNhXHU2YWMzXHU2ZjcwXHU4YTZkXHU4ZWNjXHU5OTRiXHVmOTA2XHU2Njc3XHU2Yjc4XHU4Y2I0Il0sWyJkMGExIiwiXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3''@;'; put 'put ''M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0''@;'; put 'put ''XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRiXHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0''@;'; put 'put ''ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdl''@;'; put 'put ''XHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzIl0sWyJkMWExIiwiXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3''@;'; put 'put ''OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQx''@;'; put 'put ''XHU1NWFiXHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlIiw1LCJcdTkwYTNcdWY5MTQiLDQsIlx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3''@;'; put 'put ''YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNSJdLFsiZDJhMSIsIlx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOCIsNCwiXHU0ZTQzXHVmOTJkXHU1MTY3XHU1OTQ4XHU2N2YwXHU4MDEwXHVmOTJlXHU1''@;'; put 'put ''OTczXHU1ZTc0XHU2NDlhXHU3OWNhXHU1ZmY1XHU2MDZjXHU2MmM4XHU2MzdiXHU1YmU3XHU1YmQ3XHU1MmFhXHVmOTJmXHU1OTc0XHU1ZjI5XHU2MDEyXHVmOTMwXHVmOTMxXHVmOTMyXHU3NDU5XHVmOTMzIiw1LCJcdTk5ZDFcdWY5MzkiLDEwLCJcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZc''@;'; put 'put ''dThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGEiLDcsIlx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1MiIsNSwiXHU4MGZkXHVmOTU4XHVmOTU5XHU1YzNjXHU2Y2U1XHU1MzNmXHU2ZWJhXHU1OTFhXHU4MzM2Il0sWyJkM2ExIiwiXHU0ZTM5''@;'; put 'put ''XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2''@;'; put 'put ''NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2''@;'; put 'put ''XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1''@;'; put 'put ''YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzIl0sWyJkNGExIiwiXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYz''@;'; put 'put ''XHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5''@;'; put 'put ''ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVh''@;'; put 'put ''XHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1Il0sWyJkNWExIiwiXHU4NjNmXHU4''@;'; put 'put ''N2JhXHU4OGY4XHU5MDhmXHVmOTVjXHU2ZDFiXHU3MGQ5XHU3M2RlXHU3ZDYxXHU4NDNkXHVmOTVkXHU5MTZhXHU5OWYxXHVmOTVlXHU0ZTgyXHU1Mzc1XHU2YjA0XHU2YjEyXHU3MDNlXHU3MjFiXHU4NjJkXHU5ZTFlXHU1MjRjXHU4ZmEzXHU1ZDUwXHU2NGU1XHU2NTJjXHU2YjE2XHU2ZmVi''@;'; put 'put ''XHU3YzQzXHU3ZTljXHU4NWNkXHU4OTY0XHU4OWJkXHU2MmM5XHU4MWQ4XHU4ODFmXHU1ZWNhXHU2NzE3XHU2ZDZhXHU3MmZjXHU3NDA1XHU3NDZmXHU4NzgyXHU5MGRlXHU0Zjg2XHU1ZDBkXHU1ZmEwXHU4NDBhXHU1MWI3XHU2M2EwXHU3NTY1XHU0ZWFlXHU1MDA2XHU1MTY5XHU1MWM5XHU2''@;'; put 'put ''ODgxXHU2YTExXHU3Y2FlXHU3Y2IxXHU3Y2U3XHU4MjZmXHU4YWQyXHU4ZjFiXHU5MWNmXHU0ZmI2XHU1MTM3XHU1MmY1XHU1NDQyXHU1ZWVjXHU2MTZlXHU2MjNlXHU2NWM1XHU2YWRhXHU2ZmZlXHU3OTJhXHU4NWRjXHU4ODIzXHU5NWFkXHU5YTYyXHU5YTZhXHU5ZTk3XHU5ZWNlXHU1Mjli''@;'; put 'put ''XHU2NmM2XHU2Yjc3XHU3MDFkXHU3OTJiXHU4ZjYyXHU5NzQyXHU2MTkwXHU2MjAwXHU2NTIzXHU2ZjIzIl0sWyJkNmExIiwiXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2''@;'; put 'put ''NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3''@;'; put 'put ''XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1''@;'; put 'put ''ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4NGZjIl0sWyJkN2ExIiwiXHU5MDdjXHU5YjI3''@;'; put 'put ''XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5''@;'; put 'put ''ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBm''@;'; put 'put ''XHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4''@;'; put 'put ''ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjIl0sWyJkOGExIiwiXHU3YWNiXHU3YjIwXHU3YzkyXHU2NDY5XHU3NDZhXHU3NWYyXHU3OGJjXHU3OGU4XHU5OWFjXHU5YjU0XHU5ZWJiXHU1YmRlXHU1ZTU1XHU2ZjIwXHU4MTljXHU4M2Fi''@;'; put 'put ''XHU5MDg4XHU0ZTA3XHU1MzRkXHU1YTI5XHU1ZGQyXHU1ZjRlXHU2MTYyXHU2MzNkXHU2NjY5XHU2NmZjXHU2ZWZmXHU2ZjJiXHU3MDYzXHU3NzllXHU4NDJjXHU4NTEzXHU4ODNiXHU4ZjEzXHU5OTQ1XHU5YzNiXHU1NTFjXHU2MmI5XHU2NzJiXHU2Y2FiXHU4MzA5XHU4OTZhXHU5NzdhXHU0''@;'; put 'put ''ZWExXHU1OTg0XHU1ZmQ4XHU1ZmQ5XHU2NzFiXHU3ZGIyXHU3ZjU0XHU4MjkyXHU4MzJiXHU4M2JkXHU4ZjFlXHU5MDk5XHU1N2NiXHU1OWI5XHU1YTkyXHU1YmQwXHU2NjI3XHU2NzlhXHU2ODg1XHU2YmNmXHU3MTY0XHU3Zjc1XHU4Y2I3XHU4Y2UzXHU5MDgxXHU5YjQ1XHU4MTA4XHU4Yzhh''@;'; put 'put ''XHU5NjRjXHU5YTQwXHU5ZWE1XHU1YjVmXHU2YzEzXHU3MzFiXHU3NmYyXHU3NmRmXHU4NDBjXHU1MWFhXHU4OTkzXHU1MTRkXHU1MTk1XHU1MmM5XHU2OGM5XHU2Yzk0XHU3NzA0XHU3NzIwXHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWI1XHU2ZWM1Il0sWyJkOWExIiwiXHU4NTExXHU1MWE1XHU1''@;'; put 'put ''NDBkXHU1NDdkXHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRi''@;'; put 'put ''XHU3MjVmXHU3MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2''@;'; put 'put ''M2NmXHU2NjM0XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2Jm''@;'; put 'put ''XHU5NzI3XHU5ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1NDNiXHU1NTRmXHU2NTg3Il0sWyJkYWExIiwiXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2''@;'; put 'put ''NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFj''@;'; put 'put ''XHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2''@;'; put 'put ''NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxIl0sWyJkYmExIiwiXHU3NjdjXHU4ZGNiXHU5MWIx''@;'; put 'put ''XHU5MjYyXHU5YWVlXHU5YjQzXHU1MDIzXHU1MDhkXHU1NzRhXHU1OWE4XHU1YzI4XHU1ZTQ3XHU1Zjc3XHU2MjNmXHU2NTNlXHU2NWI5XHU2NWMxXHU2NjA5XHU2NzhiXHU2OTljXHU2ZWMyXHU3OGM1XHU3ZDIxXHU4MGFhXHU4MTgwXHU4MjJiXHU4MmIzXHU4NGExXHU4NjhjXHU4YTJhXHU4''@;'; put 'put ''YjE3XHU5MGE2XHU5NjMyXHU5ZjkwXHU1MDBkXHU0ZmYzXHVmOTYzXHU1N2Y5XHU1Zjk4XHU2MmRjXHU2MzkyXHU2NzZmXHU2ZTQzXHU3MTE5XHU3NmMzXHU4MGNjXHU4MGRhXHU4OGY0XHU4OGY1XHU4OTE5XHU4Y2UwXHU4ZjI5XHU5MTRkXHU5NjZhXHU0ZjJmXHU0ZjcwXHU1ZTFiXHU2N2Nm''@;'; put 'put ''XHU2ODIyXHU3NjdkXHU3NjdlXHU5YjQ0XHU1ZTYxXHU2YTBhXHU3MTY5XHU3MWQ0XHU3NTZhXHVmOTY0XHU3ZTQxXHU4NTQzXHU4NWU5XHU5OGRjXHU0ZjEwXHU3YjRmXHU3ZjcwXHU5NWE1XHU1MWUxXHU1ZTA2XHU2OGI1XHU2YzNlXHU2YzRlXHU2Y2RiXHU3MmFmXHU3YmM0XHU4MzAzXHU2''@;'; put 'put ''Y2Q1XHU3NDNhXHU1MGZiXHU1Mjg4XHU1OGMxXHU2NGQ4XHU2YTk3XHU3NGE3XHU3NjU2Il0sWyJkY2ExIiwiXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAy''@;'; put 'put ''XHU1MTc1XHU1YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4''@;'; put 'put ''OGRjXHU4OTEzXHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2Yw''@;'; put 'put ''XHU2MzY3XHU2OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2Il0sWyJkZGExIiwiXHU1YjVhXHU1Yjc1XHU1YmNjXHU1''@;'; put 'put ''ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5''@;'; put 'put ''XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2''@;'; put 'put ''NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZh''@;'; put 'put ''XHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1Il0sWyJkZWExIiwiXHU4MTNlXHU4MWMyXHU4M2YyXHU4NzFhXHU4OGU4XHU4YWI5XHU4YjZjXHU4Y2JiXHU5MTE5XHU5NzVlXHU5OGRiXHU5ZjNiXHU1NmFjXHU1YjJhXHU1ZjZjXHU2NThjXHU2YWIzXHU2''@;'; put 'put ''YmFmXHU2ZDVjXHU2ZmYxXHU3MDE1XHU3MjVkXHU3M2FkXHU4Y2E3XHU4Y2QzXHU5ODNiXHU2MTkxXHU2YzM3XHU4MDU4XHU5YTAxXHU0ZTRkXHU0ZThiXHU0ZTliXHU0ZWQ1XHU0ZjNhXHU0ZjNjXHU0ZjdmXHU0ZmRmXHU1MGZmXHU1M2YyXHU1M2Y4XHU1NTA2XHU1NWUzXHU1NmRiXHU1OGVi''@;'; put 'put ''XHU1OTYyXHU1YTExXHU1YmViXHU1YmZhXHU1YzA0XHU1ZGYzXHU1ZTJiXHU1Zjk5XHU2MDFkXHU2MzY4XHU2NTljXHU2NWFmXHU2N2Y2XHU2N2ZiXHU2OGFkXHU2YjdiXHU2Yzk5XHU2Y2Q3XHU2ZTIzXHU3MDA5XHU3MzQ1XHU3ODAyXHU3OTNlXHU3OTQwXHU3OTYwXHU3OWMxXHU3YmU5XHU3''@;'; put 'put ''ZDE3XHU3ZDcyXHU4MDg2XHU4MjBkXHU4MzhlXHU4NGQxXHU4NmM3XHU4OGRmXHU4YTUwXHU4YTVlXHU4YjFkXHU4Y2RjXHU4ZDY2XHU4ZmFkXHU5MGFhXHU5OGZjXHU5OWRmXHU5ZTlkXHU1MjRhXHVmOTY5XHU2NzE0XHVmOTZhIl0sWyJkZmExIiwiXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYz''@;'; put 'put ''XHU2YzU1XHU3M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1''@;'; put 'put ''MGNmXHU1MTFmXHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2UwXHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2Rl''@;'; put 'put ''XHU5NzFjXHU1ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2''@;'; put 'put ''ODE2XHU2OGYyXHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3ZjcyIl0sWyJlMGExIiwiXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1''@;'; put 'put ''XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4''@;'; put 'put ''MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2''@;'; put 'put ''XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZjIl0sWyJlMWExIiwiXHU4MDU2XHU4MDcyXHU4MTY1XHU4YWEwXHU5''@;'; put 'put ''MTkyXHU0ZTE2XHU1MmUyXHU2YjcyXHU2ZDE3XHU3YTA1XHU3YjM5XHU3ZDMwXHVmOTZmXHU4Y2IwXHU1M2VjXHU1NjJmXHU1ODUxXHU1YmI1XHU1YzBmXHU1YzExXHU1ZGUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJkXHU2OGIzXHU2Y2JjXHU2ZDg4XHU2ZWFmXHU3MDFmXHU3MGE0XHU3MWQy''@;'; put 'put ''XHU3NTI2XHU3NThmXHU3NThlXHU3NjE5XHU3YjExXHU3YmUwXHU3YzJiXHU3ZDIwXHU3ZDM5XHU4NTJjXHU4NTZkXHU4NjA3XHU4YTM0XHU5MDBkXHU5MDYxXHU5MGI1XHU5MmI3XHU5N2Y2XHU5YTM3XHU0ZmQ3XHU1YzZjXHU2NzVmXHU2ZDkxXHU3YzlmXHU3ZThjXHU4YjE2XHU4ZDE2XHU5''@;'; put 'put ''MDFmXHU1YjZiXHU1ZGZkXHU2NDBkXHU4NGMwXHU5MDVjXHU5OGUxXHU3Mzg3XHU1YjhiXHU2MDlhXHU2NzdlXHU2ZGRlXHU4YTFmXHU4YWE2XHU5MDAxXHU5ODBjXHU1MjM3XHVmOTcwXHU3MDUxXHU3ODhlXHU5Mzk2XHU4ODcwXHU5MWQ3XHU0ZmVlXHU1M2Q3XHU1NWZkXHU1NmRhXHU1Nzgy''@;'; put 'put ''XHU1OGZkXHU1YWMyXHU1Yjg4XHU1Y2FiXHU1Y2MwXHU1ZTI1XHU2MTAxIl0sWyJlMmExIiwiXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3''@;'; put 'put ''OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4''@;'; put 'put ''XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3''@;'; put 'put ''NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3Il0sWyJlM2ExIiwiXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1''@;'; put 'put ''XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2''@;'; put 'put ''NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZl''@;'; put 'put ''XHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1''@;'; put 'put ''YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxIl0sWyJlNGExIiwiXHVmOTcyXHU2ZGYxXHU3MDBiXHU3NTFhXHU4MmFmXHU4YWY2XHU0ZWMwXHU1MzQxXHVmOTczXHU5NmQ5XHU2YzBmXHU0ZTllXHU0ZmM0XHU1MTUyXHU1NTVlXHU1YTI1XHU1Y2U4XHU2MjExXHU3MjU5''@;'; put 'put ''XHU4MmJkXHU4M2FhXHU4NmZlXHU4ODU5XHU4YTFkXHU5NjNmXHU5NmM1XHU5OTEzXHU5ZDA5XHU5ZDVkXHU1ODBhXHU1Y2IzXHU1ZGJkXHU1ZTQ0XHU2MGUxXHU2MTE1XHU2M2UxXHU2YTAyXHU2ZTI1XHU5MTAyXHU5MzU0XHU5ODRlXHU5YzEwXHU5Zjc3XHU1Yjg5XHU1Y2I4XHU2MzA5XHU2''@;'; put 'put ''NjRmXHU2ODQ4XHU3NzNjXHU5NmMxXHU5NzhkXHU5ODU0XHU5YjlmXHU2NWExXHU4YjAxXHU4ZWNiXHU5NWJjXHU1NTM1XHU1Y2E5XHU1ZGQ2XHU1ZWI1XHU2Njk3XHU3NjRjXHU4M2Y0XHU5NWM3XHU1OGQzXHU2MmJjXHU3MmNlXHU5ZDI4XHU0ZWYwXHU1OTJlXHU2MDBmXHU2NjNiXHU2Yjgz''@;'; put 'put ''XHU3OWU3XHU5ZDI2XHU1MzkzXHU1NGMwXHU1N2MzXHU1ZDE2XHU2MTFiXHU2NmQ2XHU2ZGFmXHU3ODhkXHU4MjdlXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdjXHU2Mzk2XHU2ZGIyXHU3ZTBhXHU4MTRiXHU5ODRkIl0sWyJlNWExIiwiXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1''@;'; put 'put ''MDNiXHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4''@;'; put 'put ''XHU2NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3''@;'; put 'put ''OWE2XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4''@;'; put 'put ''XHU0ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyIl0sWyJlNmExIiwiXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1''@;'; put 'put ''N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkz''@;'; put 'put ''XHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVm''@;'; put 'put ''OTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyIl0sWyJlN2ExIiwiXHVmOWE2XHU5NWJiXHU5YWU1XHU5ZTdkXHU2NmM0XHVmOWE3''@;'; put 'put ''XHU3MWMxXHU4NDQ5XHVmOWE4XHVmOWE5XHU1ODRiXHVmOWFhXHVmOWFiXHU1ZGI4XHU1ZjcxXHVmOWFjXHU2NjIwXHU2NjhlXHU2OTc5XHU2OWFlXHU2YzM4XHU2Y2YzXHU2ZTM2XHU2ZjQxXHU2ZmRhXHU3MDFiXHU3MDJmXHU3MTUwXHU3MWRmXHU3MzcwXHVmOWFkXHU3NDViXHVmOWFlXHU3''@;'; put 'put ''NGQ0XHU3NmM4XHU3YTRlXHU3ZTkzXHVmOWFmXHVmOWIwXHU4MmYxXHU4YTYwXHU4ZmNlXHVmOWIxXHU5MzQ4XHVmOWIyXHU5NzE5XHVmOWIzXHVmOWI0XHU0ZTQyXHU1MDJhXHVmOWI1XHU1MjA4XHU1M2UxXHU2NmYzXHU2YzZkXHU2ZmNhXHU3MzBhXHU3NzdmXHU3YTYyXHU4MmFlXHU4NWRk''@;'; put 'put ''XHU4NjAyXHVmOWI2XHU4OGQ0XHU4YTYzXHU4YjdkXHU4YzZiXHVmOWI3XHU5MmIzXHVmOWI4XHU5NzEzXHU5ODEwXHU0ZTk0XHU0ZjBkXHU0ZmM5XHU1MGIyXHU1MzQ4XHU1NDNlXHU1NDMzXHU1NWRhXHU1ODYyXHU1OGJhXHU1OTY3XHU1YTFiXHU1YmU0XHU2MDlmXHVmOWI5XHU2MWNhXHU2''@;'; put 'put ''NTU2XHU2NWZmXHU2NjY0XHU2OGE3XHU2YzVhXHU2ZmIzIl0sWyJlOGExIiwiXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQw''@;'; put 'put ''XHU1OGM1XHU2NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3''@;'; put 'put ''ZGU5XHU3ZmViXHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJm''@;'; put 'put ''XHU1OTJkXHU1OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxIl0sWyJlOWExIiwiXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVm''@;'; put 'put ''OWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0''@;'; put 'put ''XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3''@;'; put 'put ''OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2Yjll''@;'; put 'put ''XHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzIl0sWyJlYWExIiwiXHU5MDRiXHU5Njk1XHU5NmYyXHU5N2ZiXHU4NTFhXHU5YjMxXHU0ZTkwXHU3MThhXHU5NmM0XHU1MTQzXHU1MzlmXHU1NGUxXHU1NzEzXHU1NzEyXHU1N2EzXHU1YTliXHU1YWM0XHU1YmMzXHU2MDI4XHU2MTNmXHU2''@;'; put 'put ''M2Y0XHU2Yzg1XHU2ZDM5XHU2ZTcyXHU2ZTkwXHU3MjMwXHU3MzNmXHU3NDU3XHU4MmQxXHU4ODgxXHU4ZjQ1XHU5MDYwXHVmOWM2XHU5NjYyXHU5ODU4XHU5ZDFiXHU2NzA4XHU4ZDhhXHU5MjVlXHU0ZjRkXHU1MDQ5XHU1MGRlXHU1MzcxXHU1NzBkXHU1OWQ0XHU1YTAxXHU1YzA5XHU2MTcw''@;'; put 'put ''XHU2NjkwXHU2ZTJkXHU3MjMyXHU3NDRiXHU3ZGVmXHU4MGMzXHU4NDBlXHU4NDY2XHU4NTNmXHU4NzVmXHU4ODViXHU4OTE4XHU4YjAyXHU5MDU1XHU5N2NiXHU5YjRmXHU0ZTczXHU0ZjkxXHU1MTEyXHU1MTZhXHVmOWM3XHU1NTJmXHU1NWE5XHU1YjdhXHU1YmE1XHU1ZTdjXHU1ZTdkXHU1''@;'; put 'put ''ZWJlXHU2MGEwXHU2MGRmXHU2MTA4XHU2MTA5XHU2M2M0XHU2NTM4XHU2NzA5XHVmOWM4XHU2N2Q0XHU2N2RhXHVmOWM5XHU2OTYxXHU2OTYyXHU2Y2I5XHU2ZDI3XHVmOWNhXHU2ZTM4XHVmOWNiIl0sWyJlYmExIiwiXHU2ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNk''@;'; put 'put ''XHU3NjUyXHVmOWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1''@;'; put 'put ''MTQxXHU1OTZiXHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVmOWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5Mjgw''@;'; put 'put ''XHU5NmIxXHU0ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVlXHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZmXHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4''@;'; put 'put ''MjY0XHU4NThmXHU4N2ZiXHU4ODYzXHU4YWJjIl0sWyJlY2ExIiwiXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0''@;'; put 'put ''XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0''@;'; put 'put ''ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5''@;'; put 'put ''XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0Il0sWyJlZGExIiwiXHVmOWY3XHVmOWY4XHVmOWY5XHU0ZWNkXHU1MjY5XHU1YjU1XHU4MmJmXHU0''@;'; put 'put ''ZWQ0XHU1MjNhXHU1NGE4XHU1OWM5XHU1OWZmXHU1YjUwXHU1YjU3XHU1YjVjXHU2MDYzXHU2MTQ4XHU2ZWNiXHU3MDk5XHU3MTZlXHU3Mzg2XHU3NGY3XHU3NWI1XHU3OGMxXHU3ZDJiXHU4MDA1XHU4MWVhXHU4MzI4XHU4NTE3XHU4NWM5XHU4YWVlXHU4Y2M3XHU5NmNjXHU0ZjVjXHU1MmZh''@;'; put 'put ''XHU1NmJjXHU2NWFiXHU2NjI4XHU3MDdjXHU3MGI4XHU3MjM1XHU3ZGJkXHU4MjhkXHU5MTRjXHU5NmMwXHU5ZDcyXHU1YjcxXHU2OGU3XHU2Yjk4XHU2ZjdhXHU3NmRlXHU1YzkxXHU2NmFiXHU2ZjViXHU3YmI0XHU3YzJhXHU4ODM2XHU5NmRjXHU0ZTA4XHU0ZWQ3XHU1MzIwXHU1ODM0XHU1''@;'; put 'put ''OGJiXHU1OGVmXHU1OTZjXHU1YzA3XHU1ZTMzXHU1ZTg0XHU1ZjM1XHU2MzhjXHU2NmIyXHU2NzU2XHU2YTFmXHU2YWEzXHU2YjBjXHU2ZjNmXHU3MjQ2XHVmOWZhXHU3MzUwXHU3NDhiXHU3YWUwXHU3Y2E3XHU4MTc4XHU4MWRmXHU4MWU3XHU4MzhhXHU4NDZjXHU4NTIzXHU4NTk0XHU4NWNm''@;'; put 'put ''XHU4OGRkXHU4ZDEzXHU5MWFjXHU5NTc3Il0sWyJlZWExIiwiXHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5''@;'; put 'put ''MzFhXHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNl''@;'; put 'put ''XHU5ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0''@;'; put 'put ''ZjdhXHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2YmJmXHU2YzA4XHU2ZmIxIl0sWyJlZmExIiwiXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3Yjhi''@;'; put 'put ''XHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3''@;'; put 'put ''Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4''@;'; put 'put ''XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5''@;'; put 'put ''MmNjXHU5MzIwXHU5NzA2XHU5NzU2Il0sWyJmMGExIiwiXHU5NzVjXHU5ODAyXHU5ZjBlXHU1MjM2XHU1MjkxXHU1NTdjXHU1ODI0XHU1ZTFkXHU1ZjFmXHU2MDhjXHU2M2QwXHU2OGFmXHU2ZmRmXHU3OTZkXHU3YjJjXHU4MWNkXHU4NWJhXHU4OGZkXHU4YWY4XHU4ZTQ0XHU5MThkXHU5NjY0''@;'; put 'put ''XHU5NjliXHU5NzNkXHU5ODRjXHU5ZjRhXHU0ZmNlXHU1MTQ2XHU1MWNiXHU1MmE5XHU1NjMyXHU1ZjE0XHU1ZjZiXHU2M2FhXHU2NGNkXHU2NWU5XHU2NjQxXHU2NmZhXHU2NmY5XHU2NzFkXHU2ODlkXHU2OGQ3XHU2OWZkXHU2ZjE1XHU2ZjZlXHU3MTY3XHU3MWU1XHU3MjJhXHU3NGFhXHU3''@;'; put 'put ''NzNhXHU3OTU2XHU3OTVhXHU3OWRmXHU3YTIwXHU3YTk1XHU3Yzk3XHU3Y2RmXHU3ZDQ0XHU3ZTcwXHU4MDg3XHU4NWZiXHU4NmE0XHU4YTU0XHU4YWJmXHU4ZDk5XHU4ZTgxXHU5MDIwXHU5MDZkXHU5MWUzXHU5NjNiXHU5NmQ1XHU5Y2U1XHU2NWNmXHU3YzA3XHU4ZGIzXHU5M2MzXHU1YjU4''@;'; put 'put ''XHU1YzBhXHU1MzUyXHU2MmQ5XHU3MzFkXHU1MDI3XHU1Yjk3XHU1ZjllXHU2MGIwXHU2MTZiXHU2OGQ1XHU2ZGQ5XHU3NDJlXHU3YTJlXHU3ZDQyXHU3ZDljXHU3ZTMxXHU4MTZiIl0sWyJmMWExIiwiXHU4ZTJhXHU4ZTM1XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2''@;'; put 'put ''MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAy''@;'; put 'put ''XHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVmXHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3''@;'; put 'put ''MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5''@;'; put 'put ''XHU4ZDA4XHU0ZTRiXHU1M2VhIl0sWyJmMmExIiwiXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4''@;'; put 'put ''MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2Nk''@;'; put 'put ''XHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2''@;'; put 'put ''ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmIl0sWyJmM2ExIiwiXHU5M2Y2XHU5NmM2XHU1ZmI1XHU2MWYyXHU2Zjg0XHU0ZTE0XHU0Zjk4XHU1MDFmXHU1M2M5''@;'; put 'put ''XHU1NWRmXHU1ZDZmXHU1ZGVlXHU2YjIxXHU2YjY0XHU3OGNiXHU3YjlhXHVmOWZlXHU4ZTQ5XHU4ZWNhXHU5MDZlXHU2MzQ5XHU2NDNlXHU3NzQwXHU3YTg0XHU5MzJmXHU5NDdmXHU5ZjZhXHU2NGIwXHU2ZmFmXHU3MWU2XHU3NGE4XHU3NGRhXHU3YWM0XHU3YzEyXHU3ZTgyXHU3Y2IyXHU3''@;'; put 'put ''ZTk4XHU4YjlhXHU4ZDBhXHU5NDdkXHU5OTEwXHU5OTRjXHU1MjM5XHU1YmRmXHU2NGU2XHU2NzJkXHU3ZDJlXHU1MGVkXHU1M2MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MWZhXHU2NWFjXHU3YWQ5XHU4YjkyXHU4Yjk2XHU1MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1YTNjXHU1ZWUwXHU1Zjcw''@;'; put 'put ''XHU2MTM0XHU2NTVlXHU2NjBjXHU2NjM2XHU2NmEyXHU2OWNkXHU2ZWM0XHU2ZjMyXHU3MzE2XHU3NjIxXHU3YTkzXHU4MTM5XHU4MjU5XHU4M2Q2XHU4NGJjXHU1MGI1XHU1N2YwXHU1YmMwXHU1YmU4XHU1ZjY5XHU2M2ExXHU3ODI2XHU3ZGI1XHU4M2RjXHU4NTIxXHU5MWM3XHU5MWY1XHU1''@;'; put 'put ''MThhXHU2N2Y1XHU3YjU2Il0sWyJmNGExIiwiXHU4Y2FjXHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4''@;'; put 'put ''XHU1OTI5XHU1ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1''@;'; put 'put ''YzE2XHU2Y2JlXHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAw''@;'; put 'put ''XHU1MjQzXHU2NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyIl0sWyJmNWExIiwiXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3''@;'; put 'put ''YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNk''@;'; put 'put ''XHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5''@;'; put 'put ''NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0''@;'; put 'put ''XHU4MWI1XHU4NDAzIl0sWyJmNmExIiwiXHU4ZDA1XHU1M2Q2XHU1NDM5XHU1NjM0XHU1YTM2XHU1YzMxXHU3MDhhXHU3ZmUwXHU4MDVhXHU4MTA2XHU4MWVkXHU4ZGEzXHU5MTg5XHU5YTVmXHU5ZGYyXHU1MDc0XHU0ZWM0XHU1M2EwXHU2MGZiXHU2ZTJjXHU1YzY0XHU0Zjg4XHU1MDI0XHU1''@;'; put 'put ''NWU0XHU1Y2Q5XHU1ZTVmXHU2MDY1XHU2ODk0XHU2Y2JiXHU2ZGM0XHU3MWJlXHU3NWQ0XHU3NWY0XHU3NjYxXHU3YTFhXHU3YTQ5XHU3ZGM3XHU3ZGZiXHU3ZjZlXHU4MWY0XHU4NmE5XHU4ZjFjXHU5NmM5XHU5OWIzXHU5ZjUyXHU1MjQ3XHU1MmM1XHU5OGVkXHU4OWFhXHU0ZTAzXHU2N2Qy''@;'; put 'put ''XHU2ZjA2XHU0ZmI1XHU1YmUyXHU2Nzk1XHU2Yzg4XHU2ZDc4XHU3NDFiXHU3ODI3XHU5MWRkXHU5MzdjXHU4N2M0XHU3OWU0XHU3YTMxXHU1ZmViXHU0ZWQ2XHU1NGE0XHU1NTNlXHU1OGFlXHU1OWE1XHU2MGYwXHU2MjUzXHU2MmQ2XHU2NzM2XHU2OTU1XHU4MjM1XHU5NjQwXHU5OWIxXHU5''@;'; put 'put ''OWRkXHU1MDJjXHU1MzUzXHU1NTQ0XHU1NzdjXHVmYTAxXHU2MjU4XHVmYTAyXHU2NGUyXHU2NjZiXHU2N2RkXHU2ZmMxXHU2ZmVmXHU3NDIyXHU3NDM4XHU4YTE3Il0sWyJmN2ExIiwiXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJi''@;'; put 'put ''XHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5''@;'; put 'put ''MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1''@;'; put 'put ''XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4''@;'; put 'put ''ZmE2XHU5MjExIl0sWyJmOGExIiwiXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3''@;'; put 'put ''XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1''@;'; put 'put ''NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2''@;'; put 'put ''XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzIl0sWyJmOWExIiwiXHU1NGMxXHU3YTFmXHU2OTUzXHU4YWY3XHU4YzRhXHU5OGE4XHU5OWFlXHU1ZjdjXHU2MmFiXHU3NWIyXHU3''@;'; put 'put ''NmFlXHU4OGFiXHU5MDdmXHU5NjQyXHU1MzM5XHU1ZjNjXHU1ZmM1XHU2Y2NjXHU3M2NjXHU3NTYyXHU3NThiXHU3YjQ2XHU4MmZlXHU5OTlkXHU0ZTRmXHU5MDNjXHU0ZTBiXHU0ZjU1XHU1M2E2XHU1OTBmXHU1ZWM4XHU2NjMwXHU2Y2IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Y2MwXHU5MDUw''@;'; put 'put ''XHU5NzFlXHU5YzE1XHU1OGQxXHU1Yjc4XHU4NjUwXHU4YjE0XHU5ZGI0XHU1YmQyXHU2MDY4XHU2MDhkXHU2NWYxXHU2YzU3XHU2ZjIyXHU2ZmEzXHU3MDFhXHU3ZjU1XHU3ZmYwXHU5NTkxXHU5NTkyXHU5NjUwXHU5N2QzXHU1MjcyXHU4ZjQ0XHU1MWZkXHU1NDJiXHU1NGI4XHU1NTYzXHU1''@;'; put 'put ''NThhXHU2YWJiXHU2ZGI1XHU3ZGQ4XHU4MjY2XHU5MjljXHU5Njc3XHU5ZTc5XHU1NDA4XHU1NGM4XHU3NmQyXHU4NmU0XHU5NWE0XHU5NWQ0XHU5NjVjXHU0ZWEyXHU0ZjA5XHU1OWVlXHU1YWU2XHU1ZGY3XHU2MDUyXHU2Mjk3XHU2NzZkXHU2ODQxXHU2Yzg2XHU2ZTJmXHU3ZjM4XHU4MDli''@;'; put 'put ''XHU4MjJhIl0sWyJmYWExIiwiXHVmYTA4XHVmYTA5XHU5ODA1XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1''@;'; put 'put ''ZTc4XHU2NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5''@;'; put 'put ''XHU0ZmQ0XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1''@;'; put 'put ''MzU0XHU1OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiIl0sWyJmYmExIiwiXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2Ey''@;'; put 'put ''XHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZlXHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2''@;'; put 'put ''ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1''@;'; put 'put ''XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3''@;'; put 'put ''NTc1Il0sWyJmY2ExIiwiXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5''@;'; put 'put ''XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3''@;'; put 'put ''Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0''@;'; put 'put ''XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2Il0sWyJmZGExIiwiXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1''@;'; put 'put ''ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5''@;'; put 'put ''XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2''@;'; put 'put ''YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcw''@;'; put 'put ''Il1dJyl9LDcyMzI0KHRlKXsidXNlIHN0cmljdCI7dGUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbImExNDAiLCJcdTMwMDBcdWZmMGNcdTMwMDFcdTMwMDJcdWZmMGVcdTIwMjdcdWZmMWJcdWZmMWFcdWZmMWZcdWZmMDFcdWZlMzBcdTIwMjZcdTIwMjVcdWZl''@;'; put 'put ''NTBcdWZlNTFcdWZlNTJceGI3XHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZjVjXHUyMDEzXHVmZTMxXHUyMDE0XHVmZTMzXHUyNTc0XHVmZTM0XHVmZTRmXHVmZjA4XHVmZjA5XHVmZTM1XHVmZTM2XHVmZjViXHVmZjVkXHVmZTM3XHVmZTM4XHUzMDE0XHUzMDE1XHVmZTM5XHVmZTNhXHUz''@;'; put 'put ''MDEwXHUzMDExXHVmZTNiXHVmZTNjXHUzMDBhXHUzMDBiXHVmZTNkXHVmZTNlXHUzMDA4XHUzMDA5XHVmZTNmXHVmZTQwXHUzMDBjXHUzMDBkXHVmZTQxXHVmZTQyXHUzMDBlXHUzMDBmXHVmZTQzXHVmZTQ0XHVmZTU5XHVmZTVhIl0sWyJhMWExIiwiXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVl''@;'; put 'put ''XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDFkXHUzMDFlXHUyMDM1XHUyMDMyXHVmZjAzXHVmZjA2XHVmZjBhXHUyMDNiXHhhN1x1MzAwM1x1MjVjYlx1MjVjZlx1MjViM1x1MjViMlx1MjVjZVx1MjYwNlx1MjYwNVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViZFx1MjViY1x1MzJh''@;'; put 'put ''M1x1MjEwNVx4YWZcdWZmZTNcdWZmM2ZcdTAyY2RcdWZlNDlcdWZlNGFcdWZlNGRcdWZlNGVcdWZlNGJcdWZlNGNcdWZlNWZcdWZlNjBcdWZlNjFcdWZmMGJcdWZmMGRceGQ3XHhmN1x4YjFcdTIyMWFcdWZmMWNcdWZmMWVcdWZmMWRcdTIyNjZcdTIyNjdcdTIyNjBcdTIyMWVcdTIyNTJcdTIy''@;'; put 'put ''NjFcdWZlNjIiLDQsIlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1''@;'; put 'put ''MjIyNVx1MjIyM1x1ZmYwZiJdLFsiYTI0MCIsIlx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4''@;'; put 'put ''Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODEiLDcsIlx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUw''@;'; put 'put ''Mlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZCJdLFsiYTJhMSIsIlx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMCIsOSwiXHUyMTYwIiw5LCJcdTMwMjEiLDgs''@;'; put 'put ''Ilx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMSIsMjUsIlx1ZmY0MSIsMjFdLFsiYTM0MCIsIlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MSIsMTYsIlx1MDNhMyIsNiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2LCJcdTMxMDUiLDEwXSxbImEzYTEiLCJcdTMxMTAiLDI1LCJcdTAyZDlcdTAy''@;'; put 'put ''YzlcdTAyY2FcdTAyYzdcdTAyY2IiXSxbImEzZTEiLCJcdTIwYWMiXSxbImE0NDAiLCJcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNc''@;'; put 'put ''dTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTVi''@;'; put 'put ''NTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVmMGJcdTVmMTNcdTYyNGQiXSxbImE0YTEiLCJcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhc''@;'; put 'put ''dTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUy''@;'; put 'put ''ZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhc''@;'; put 'put ''dTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcy''@;'; put 'put ''YWNcdTczOGJcdTRlMTkiXSxbImE1NDAiLCJcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNc''@;'; put 'put ''dTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUz''@;'; put 'put ''ZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTYiXSxbImE1YTEiLCJcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNc''@;'; put 'put ''dTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTcz''@;'; put 'put ''ODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlc''@;'; put 'put ''dTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjgiXSxbImE2NDAi''@;'; put 'put ''LCJcdTUxNzFcdTUxOGRcdTUxYjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNcdTU0MGFcdTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRcdTU0MDhcdTU0MDNcdTU0MGVc''@;'; put 'put ''dTU0MDZcdTU0MTJcdTU2ZTBcdTU2ZGVcdTU2ZGRcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5NzhcdTU5ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTViNThcdTViODdcdTViODhcdTVi''@;'; put 'put ''ODVcdTViODlcdTViZmFcdTVjMTZcdTVjNzlcdTVkZGVcdTVlMDZcdTVlNzZcdTVlNzQiXSxbImE2YTEiLCJcdTVmMGZcdTVmMWJcdTVmZDlcdTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBcdTYyNjNcdTYyNWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1ZWNcdTY1ZWRcdTY2ZjJc''@;'; put 'put ''dTY2ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlcdTZjNWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZjNWJcdTZjNGRcdTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2VcdTdhZjlcdTdjNzNcdTdj''@;'; put 'put ''ZjhcdTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgxZTNcdTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJcdTgyMWZcdTgyNmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4NGNcdTg4NjNcdTg5N2Zc''@;'; put 'put ''dTk2MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBcdTRmNTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRmNTRcdTRmM2NcdTRmNDZcdTRmNjMiXSxbImE3NDAiLCJcdTRmNWNcdTRmNjBcdTRmMmZcdTRm''@;'; put 'put ''NGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2Vc''@;'; put 'put ''dTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2''@;'; put 'put ''ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGQiXSxbImE3YTEiLCJcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRc''@;'; put 'put ''dTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVm''@;'; put 'put ''ZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNc''@;'; put 'put ''dTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjAiXSxbImE4NDAiLCJcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZj''@;'; put 'put ''ODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhc''@;'; put 'put ''dTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgy''@;'; put 'put ''OTIiXSxbImE4YTEiLCJcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZc''@;'; put 'put ''dTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRm''@;'; put 'put ''NzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVc''@;'; put 'put ''dTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzUiXSxbImE5NDAiLCJcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0OTBcdTU0''@;'; put 'put ''NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJcdTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3NzdcdTU3NmFcdTU3NjlcdTU3NjFcdTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRcdTU5Yjlc''@;'; put 'put ''dTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5YzVcdTViNWZcdTViNjRcdTViNjNcdTViOTdcdTViOWFcdTViOThcdTViOWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDUiXSxbImE5YTEiLCJcdTVjNDZcdTVj''@;'; put 'put ''YjdcdTVjYTFcdTVjYjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVlMThcdTVlMWFcdTVlMTZcdTVlMTVcdTVlMWJcdTVlMTFcdTVlNzhcdTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZcdTVlZjZcdTVmMjZcdTVmMjdcdTVmMjlcdTVmODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRc''@;'; put 'put ''dTVmZTBcdTVmZmRcdTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZcdTYwMzVcdTYwMTZcdTYwMmFcdTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYyM2ZcdTYyM2VcdTYyNDBcdTYyN2ZcdTYyYzlcdTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYy''@;'; put 'put ''YjlcdTYyZDJcdTYyZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYyYzhcdTYyYThcdTYyYmRcdTYyYmNcdTYyZDBcdTYyZDlcdTYyYzdcdTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhcdTYyZDZcdTYyZDdcdTYyYzZcdTYyYWNcdTYyY2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFc''@;'; put 'put ''dTY2MTRcdTY2MTNcdTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBcdTY2MGZcdTY2MTVcdTY2MGEiXSxbImFhNDAiLCJcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3''@;'; put 'put ''N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJc''@;'; put 'put ''dTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTAiXSxbImFhYTEiLCJcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcy''@;'; put 'put ''MmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBc''@;'; put 'put ''dTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgy''@;'; put 'put ''YWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1Nzdc''@;'; put 'put ''dTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDQiXSxbImFiNDAiLCJcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRm''@;'; put 'put ''ZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdc''@;'; put 'put ''dTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzEiXSxbImFiYTEiLCJcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2''@;'; put 'put ''ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNc''@;'; put 'put ''dTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVm''@;'; put 'put ''OGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdc''@;'; put 'put ''dTYyZjFcdTYyZjciXSxbImFjNDAiLCJcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRcdTYzMTFcdTYzMDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1YmRcdTY1ZTJcdTY2MjVcdTY2MmRcdTY2MjBcdTY2MjdcdTY2MmZcdTY2MWZcdTY2MjhcdTY2MzFcdTY2MjRcdTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3''@;'; put 'put ''ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3ZWZcdTY3YzRcdTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVcdTY3YjhcdTY3Y2ZcdTY3ZGVcdTY3ZjNcdTY3YjBcdTY3ZDlcdTY3ZTJcdTY3ZGRcdTY3ZDJcdTZiNmFcdTZiODNcdTZiODZcdTZiYjVcdTZiZDJc''@;'; put 'put ''dTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVcdTZkMGNcdTZkMzFcdTZkMWVcdTZkMTciXSxbImFjYTEiLCJcdTZkM2JcdTZkM2RcdTZkM2VcdTZkMzZcdTZkMWJcdTZjZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZk''@;'; put 'put ''MmJcdTcwYWJcdTcwYmFcdTcwYjNcdTcwYWNcdTcwYWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJcdTcyNmZcdTcyNzRcdTcyZTlcdTcyZTBcdTcyZTFcdTczYjdcdTczY2FcdTczYmJcdTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNc''@;'; put 'put ''dTc1NGVcdTc1NGJcdTc1YWJcdTc1YTRcdTc1YTVcdTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2YzhcdTc2YzZcdTc2YzNcdTc2YzVcdTc3MDFcdTc2ZjlcdTc2ZjhcdTc3MDlcdTc3MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4''@;'; put 'put ''MGRcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFcdTdhZmZcdTdhZmRcdTdjN2RcdTdkMDJcdTdkMDVcdTdkMDBcdTdkMDlcdTdkMDdcdTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDQiXSxbImFkNDAiLCJc''@;'; put 'put ''dTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgz''@;'; put 'put ''MDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNc''@;'; put 'put ''dThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTUiXSxbImFkYTEiLCJcdThmZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3''@;'; put 'put ''NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFc''@;'; put 'put ''dTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUy''@;'; put 'put ''NWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWEiXSxbImFlNDAiLCJcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRc''@;'; put 'put ''dTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTVi''@;'; put 'put ''YjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFc''@;'; put 'put ''dTVmOTJcdTVmOTFcdTVmOTBcdTYwNTkiXSxbImFlYTEiLCJcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYz''@;'; put 'put ''MmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2Zjhc''@;'; put 'put ''dTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZi''@;'; put 'put ''OGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTMiXSxbImFmNDAiLCJcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlcdTZkOGNcdTZkOGFc''@;'; put 'put ''dTZkNzlcdTZkODVcdTZkNjVcdTZkOTRcdTcwY2FcdTcwZDhcdTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcyZjlcdTcyZmRcdTcyZjhcdTcyZjdcdTczODZcdTczZWRcdTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1NWRcdTc1NWNcdTc1''@;'; put 'put ''NWFcdTc1NTlcdTc1YmVcdTc1YzVcdTc1YzdcdTc1YjJcdTc1YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBcdTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3MjlcdTc3MWZcdTc3MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRcdTc4MzRcdTc4Mzci''@;'; put 'put ''XSxbImFmYTEiLCJcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5NWVcdTc5NWRcdTc5NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5ZTdcdTc5ZGZcdTc5ZTZcdTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlcdTdiMDZcdTdi''@;'; put 'put ''MTFcdTdjODlcdTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNcdTdkMGRcdTdkMTlcdTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRcdTdmYzVcdTdmYzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM2RcdTgwM2Zc''@;'; put 'put ''dTgwZjFcdTgxMDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgwZmNcdTgwZWZcdTgxZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgyMmFcdTgyMmJcdTgyMjhcdTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRcdTgzNGFcdTgz''@;'; put 'put ''MzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDMiXSxbImIwNDAiLCJcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFc''@;'; put 'put ''dTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThm''@;'; put 'put ''ZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjEiXSxbImIwYTEiLCJcdTk2NWJcdTk2NWRc''@;'; put 'put ''dTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUw''@;'; put 'put ''NGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNc''@;'; put 'put ''dTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3''@;'; put 'put ''ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDAiXSxbImIxNDAiLCJcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBc''@;'; put 'put ''dTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVm''@;'; put 'put ''NTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmQiXSxbImIxYTEiLCJcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhc''@;'; put 'put ''dTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYz''@;'; put 'put ''ODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2Vc''@;'; put 'put ''dTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4''@;'; put 'put ''YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmEiXSxbImIyNDAiLCJcdTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNcdTZkZjNcdTZkZDlcdTZkYjJcdTZkZTFcdTZkY2NcdTZkZTRcdTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZkYWVcdTZkZGVc''@;'; put 'put ''dTZkZjlcdTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZkYjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZkZjFcdTZkZWVcdTZkZThcdTZkYzZcdTZkYzRcdTZkYWFcdTZkZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZcdTcyM2RcdTcy''@;'; put 'put ''N2RcdTcyODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVcdTc0MGRcdTc0ZTBcdTc0ZjYiXSxbImIyYTEiLCJcdTc0ZjdcdTc1MWNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1NzBcdTc1OGZcdTc1ZDRcdTc1ZDVc''@;'; put 'put ''dTc1YjVcdTc1Y2FcdTc1Y2RcdTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3MzdcdTc3M2VcdTc3M2NcdTc3MzZcdTc3MzhcdTc3M2FcdTc4NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5NmRcdTc5ZmJcdTdhOTJcdTdhOTVcdTdiMjBcdTdiMjhcdTdiMWJcdTdiMmNcdTdiMjZcdTdi''@;'; put 'put ''MTlcdTdiMWVcdTdiMmVcdTdjOTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdkNzFcdTdkMmVcdTdkMzlcdTdkM2NcdTdkNDBcdTdkMzBcdTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJcdTdkMzFcdTdmM2RcdTdmOWVcdTdmOWFcdTdmY2NcdTdmY2VcdTdmZDJcdTgwMWNcdTgwNGFc''@;'; put 'put ''dTgwNDZcdTgxMmZcdTgxMTZcdTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgzOGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgzOTZcdTgzYmRcdTgzYWJcdTgzOTJcdTgzOGFcdTgzOTNcdTgzODlcdTgzYTBcdTgzNzdcdTgz''@;'; put 'put ''N2JcdTgzN2MiXSxbImIzNDAiLCJcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZc''@;'; put 'put ''dThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkw''@;'; put 'put ''MjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTQiXSxbImIzYTEiLCJcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVc''@;'; put 'put ''dTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUw''@;'; put 'put ''OThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNc''@;'; put 'put ''dTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjAiXSxbImI0NDAiLCJcdTVh''@;'; put 'put ''NzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJc''@;'; put 'put ''dTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYz''@;'; put 'put ''YTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2QiXSxbImI0YTEiLCJcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNc''@;'; put 'put ''dTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4''@;'; put 'put ''ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdc''@;'; put 'put ''dTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2IiXSxbImI1NDAiLCJcdTZlODlcdTZlMTlcdTZlNGVcdTZlNjNcdTZl''@;'; put 'put ''NDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNmVcdTcxMWNcdTcyNGNcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlcdTc0M2FcdTc0MmFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MmZc''@;'; put 'put ''dTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1ZTJcdTc1ZGJcdTc1ZTNcdTc1ZDlcdTc1ZDhcdTc1ZGVcdTc1ZTBcdTc2N2JcdTc2N2NcdTc2OTZcdTc2OTNcdTc2YjRcdTc2ZGNcdTc3NGZcdTc3ZWRcdTc4NWRcdTc4NmNcdTc4NmZcdTdhMGRcdTdhMDhcdTdh''@;'; put 'put ''MGJcdTdhMDVcdTdhMDBcdTdhOTgiXSxbImI1YTEiLCJcdTdhOTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZcdTdiNTBcdTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJcdTdiNGZcdTdiNTFcdTdjOWZcdTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVc''@;'; put 'put ''dTdkNzJcdTdkNjFcdTdkNjZcdTdkNjJcdTdkNzBcdTdkNzNcdTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgxNTVcdTgxNTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgxMzlcdTgxNDZcdTgxM2VcdTgxNGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgz''@;'; put 'put ''ZjhcdTg0MGRcdTgzZTBcdTgzYzVcdTg0MGJcdTgzYzFcdTgzZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNcdTgzY2NcdTgzZmRcdTgzZjJcdTgzY2FcdTg0MzhcdTg0MGVcdTg0MDRcdTgzZGNcdTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRc''@;'; put 'put ''dTg2ZDRcdTg2ZGJcdTg2ZTRcdTg2ZDBcdTg2ZGVcdTg4NTdcdTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThhNjBcdThhNTVcdThhNWVcdThhM2NcdThhNDEiXSxbImI2NDAiLCJcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThj''@;'; put 'put ''NjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNc''@;'; put 'put ''dThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTEiXSxb''@;'; put 'put ''ImI2YTEiLCJcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZc''@;'; put 'put ''dTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUy''@;'; put 'put ''ZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJc''@;'; put 'put ''dTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmMiXSxbImI3NDAiLCJcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVm''@;'; put 'put ''YWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2Rc''@;'; put 'put ''dTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmQiXSxbImI3YTEiLCJcdTY5NWFcdTY5NzdcdTY5''@;'; put 'put ''NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRc''@;'; put 'put ''dTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcx''@;'; put 'put ''NDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZc''@;'; put 'put ''dTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjMiXSxbImI4NDAiLCJcdTc3NzlcdTc3NmFcdTc3NmNcdTc3NWNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3ZWVcdTc4OGVcdTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4OTFcdTc4''@;'; put 'put ''OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5ODFcdTg0MmNcdTc5YmRcdTdhMWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZcdTdhYTBcdTdiNzdcdTdiYzBcdTdiNjBcdTdiNmVcdTdiNjdcdTdjYjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFcdTdkOGZc''@;'; put 'put ''dTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFcdTdmNzJcdTdmYTlcdTdmYThcdTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgxNmVcdTgxNzNcdTgxNmIiXSxbImI4YTEiLCJcdTgxNzlcdTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0''@;'; put 'put ''NzdcdTg0M2RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0NjlcdTg0NmRcdTg0NDZcdTg2NWVcdTg2NWNcdTg2NWZcdTg2ZjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3MDNc''@;'; put 'put ''dTg3MDZcdTg3MGFcdTg4NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVcdTg4ZDJcdTg5OWNcdTg5ZTNcdThhNmJcdThhNzJcdThhNzNcdThhNjZcdThhNjlcdThhNzBcdThhODdcdThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVcdThh''@;'; put 'put ''NmRcdThhNjJcdThhNmVcdThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThjYzdcdThjYzhcdThjYzRcdThjYjJcdThjYzNcdThjYzJcdThjYzVcdThkZTFcdThkZGZcdThkZThcdThkZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThkZTZc''@;'; put 'put ''dThlYjJcdThmMDNcdThmMDlcdThlZmVcdThmMGEiXSxbImI5NDAiLCJcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkx''@;'; put 'put ''NmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2Fc''@;'; put 'put ''dTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjQiXSxbImI5YTEiLCJcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlm''@;'; put 'put ''MjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRc''@;'; put 'put ''dTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVh''@;'; put 'put ''ZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlc''@;'; put 'put ''dTYxNDciXSxbImJhNDAiLCJcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1''@;'; put 'put ''ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNc''@;'; put 'put ''dTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjIiXSxbImJhYTEiLCJcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZl''@;'; put 'put ''ZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNc''@;'; put 'put ''dTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdi''@;'; put 'put ''YjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWMiXSxbImJiNDAiLCJcdTdmNzBc''@;'; put 'put ''dTdmZTBcdTdmZTFcdTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgxOGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgxZTdcdTgxZmFcdTgyMDdcdTgyMTRcdTgyMWVcdTgyNGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0YjJcdTg0OWNcdTg0''@;'; put 'put ''Y2JcdTg0YjhcdTg0YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2ZcdTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRcdTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4ZjNcdTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFcdTg4ZWZcdThhYTZc''@;'; put 'put ''dThhOGNcdThhOWVcdThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTQiXSxbImJiYTEiLCJcdThhYWFcdThhYTVcdThhYThcdThhOThcdThhOTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThjOGNcdThjZDNcdThjZDFcdThjZDJcdThkNmJcdThkOTlcdThkOTVcdThkZmNcdThmMTRcdThm''@;'; put 'put ''MTJcdThmMTVcdThmMTNcdThmYTNcdTkwNjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkwNWVcdTkwNjJcdTkwNWRcdTkwNWJcdTkxMTlcdTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN2JcdTkyOTNcdTkyOWNc''@;'; put 'put ''dTkyYThcdTkyN2NcdTkyOTFcdTk1YTFcdTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRcdTk2OTlcdTk2OWNcdTk2OWJcdTk2Y2NcdTk2ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4MTdcdTk4MThcdTk4YWZcdTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNcdTk5MDlcdTk5YzFcdTlh''@;'; put 'put ''YWZcdTlhYjBcdTlhZTZcdTliNDFcdTliNDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlmM2JcdTlmNGFcdTUxMDRcdTUxMDBcdTUwZmJcdTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxZGMiXSxbImJjNDAiLCJcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFc''@;'; put 'put ''dTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTVi''@;'; put 'put ''MGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVc''@;'; put 'put ''dTYxNWRcdTYxNTVcdTYxODIiXSxbImJjYTEiLCJcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0''@;'; put 'put ''YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFc''@;'; put 'put ''dTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZm''@;'; put 'put ''OTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODMiXSxbImJkNDAiLCJcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFc''@;'; put 'put ''dTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdi''@;'; put 'put ''YzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWYiXSxbImJk''@;'; put 'put ''YTEiLCJcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3''@;'; put 'put ''NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBc''@;'; put 'put ''dThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThl''@;'; put 'put ''MjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWUiXSxbImJlNDAiLCJcdThmMjVcdTkwNjlcdTkwNmVcdTkwNjhcdTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkxMjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOGJc''@;'; put 'put ''dTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRcdTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTkyYzdcdTkyZjBcdTkyYjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZcdTk3MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJcdTk3OGZcdTk4MjFcdTk4MmJcdTk4MWNcdTk4''@;'; put 'put ''YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJcdTk5ZDlcdTlhYjdcdTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTliNDRcdTliNzdcdTliNmZcdTlkMDZcdTlkMDkiXSxbImJlYTEiLCJcdTlkMDNcdTllYTlcdTllYmVc''@;'; put 'put ''dTllY2VcdTU4YThcdTlmNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUyZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2NjRcdTU2NzhcdTU2NmFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2''@;'; put 'put ''NzZcdTU4YzFcdTU4YmVcdTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTViMzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFcdTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVcdTYxY2FcdTYxYzhcdTYyMzBcdTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFc''@;'; put 'put ''dTY0YzRcdTY0YzdcdTY0YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRcdTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZhNTlcdTZhNmJcdTZhNThcdTZhMzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZh''@;'; put 'put ''MzVcdTZhNWZcdTZhNDhcdTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZmYjFcdTZmYTEiXSxbImJmNDAiLCJcdTZmYzNcdTZmYTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZcdTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVc''@;'; put 'put ''dTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4''@;'; put 'put ''ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGEiXSxbImJmYTEiLCJcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlc''@;'; put 'put ''dTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3''@;'; put 'put ''YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRc''@;'; put 'put ''dThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkz''@;'; put 'put ''MjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWEiXSxbImMwNDAiLCJcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThc''@;'; put 'put ''dTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlk''@;'; put 'put ''MWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODciXSxbImMwYTEiLCJcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhc''@;'; put 'put ''dTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2''@;'; put 'put ''ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlc''@;'; put 'put ''dTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3''@;'; put 'put ''YWMiXSxbImMxNDAiLCJcdTc3YTdcdTc3YWRcdTc3ZWZcdTc4ZjdcdTc4ZmFcdTc4ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdcdTdhYmZcdTdjMDdcdTdjMGRcdTdiZmVcdTdiZjdcdTdjMGNcdTdiZTBcdTdjZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRc''@;'; put 'put ''dTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJcdTdlNDNcdTdlMmJcdTdlM2RcdTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdlNDhcdTdlMzVcdTdlM2ZcdTdlMmZcdTdmNDRcdTdmZjNcdTdmZmNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgx''@;'; put 'put ''YmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgxYzlcdTgxYmVcdTgxZThcdTgyMDlcdTgyNzFcdTg1YWEiXSxbImMxYTEiLCJcdTg1ODRcdTg1N2VcdTg1OWNcdTg1OTFcdTg1OTRcdTg1YWZcdTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJc''@;'; put 'put ''dTg3YzZcdTg3YWJcdTg3YmJcdTg3YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5YWNcdThiMGVcdThiMTdcdThiMTlcdThiMWJcdThiMGFcdThiMjBcdThiMWRcdThiMDRcdThiMTBcdThjNDFcdThjM2ZcdThjNzNcdThjZmFcdThjZmRcdThjZmNcdThj''@;'; put 'put ''ZjhcdThjZmJcdThkYThcdThlNDlcdThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2ZcdTkwN2ZcdTkwN2RcdTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlcdTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkzODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVc''@;'; put 'put ''dTkzNGJcdTkzMThcdTkzN2VcdTkzNmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1YzhcdTk1YzZcdTk2YjFcdTk2YjhcdTk2ZDZcdTk3MWNcdTk3MWVcdTk3YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVcdTlhMDEiXSxbImMyNDAiLCJcdTk5ZmZcdTli''@;'; put 'put ''YWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFc''@;'; put 'put ''dTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTcz''@;'; put 'put ''NzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NTgiXSxbImMyYTEiLCJcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdc''@;'; put 'put ''dTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3''@;'; put 'put ''ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZc''@;'; put 'put ''dTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3YTNcdTk3YTYiXSxbImMzNDAiLCJcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4''@;'; put 'put ''NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVc''@;'; put 'put ''dTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcy''@;'; put 'put ''NThcdTcyYTJcdTczNzgiXSxbImMzYTEiLCJcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlc''@;'; put 'put ''dTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThi''@;'; put 'put ''NWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRc''@;'; put 'put ''dTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWUiXSxbImM0NDAiLCJcdTk4NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlcdTliMGRcdTliZThcdTli''@;'; put 'put ''ZTdcdTliZDZcdTliZGJcdTlkODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdcdTllOTNcdTllYjRcdTUyZjhcdTU2YThcdTU2YjdcdTU2YjZcdTU2YjRcdTU2YmNcdTU4ZTRcdTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYxZmFcdTY1MThcdTY1MTRc''@;'; put 'put ''dTY1MTlcdTY2ZTZcdTY3MjdcdTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MmFcdTc5MmNcdTc5MmJcdTdhYzdcdTdhZjZcdTdjNGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2RcdTdlN2MiXSxbImM0YTEi''@;'; put 'put ''LCJcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgyNjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2MDZcdTg2MGJcdTg2MDdcdTg2MGFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5ZjhcdThiNzBcdThiNmNcdThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThkMGRcdThlODlc''@;'; put 'put ''dThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2JcdTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBcdTk4YzRcdTk5NTJcdTk5NTFcdTk5YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTljMTNcdTljMGRcdTllNzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNcdTlmNjFcdTUx''@;'; put 'put ''MzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1MWRcdTY1MWNcdTY1OTVcdTY2ZTlcdTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNcdTcyMWJcdTcyYTdcdTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdlOGZcdTdlOGNc''@;'; put 'put ''dTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNcdTg5YmRcdThiNzQiXSxbImM1NDAiLCJcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0''@;'; put 'put ''MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNc''@;'; put 'put ''dTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmMiXSxbImM1YTEiLCJcdTc5YjNcdTdjNjBcdTdjNWZcdTgw''@;'; put 'put ''N2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFc''@;'; put 'put ''dTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4''@;'; put 'put ''MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJc''@;'; put 'put ''dTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNcdThiOTIiXSxbImM2NDAiLCJcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTll''@;'; put 'put ''N2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNc''@;'; put 'put ''dThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzIiXSxbImM5NDAiLCJcdTRlNDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRlMGNcdTRl''@;'; put 'put ''NDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNcdTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNcdTRlYzJcdTRlYzlcdTRlYzhcdTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBcdTU5MDNcdTU5MmNcdTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRcdTcyM2Zc''@;'; put 'put ''dTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRlZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUzNGNcdTU3MjJcdTU3MjNcdTU5MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVjM2JcdTVjNzRcdTVjNzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYyNTBcdTZj''@;'; put 'put ''MTUiXSxbImM5YTEiLCJcdTZjMzZcdTZjNDNcdTZjM2ZcdTZjM2JcdTcyYWVcdTcyYjBcdTczOGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVcdTRmMThcdTRmMmNcdTRlZjVcdTRmMTRcdTRlZjFcdTRmMDBcdTRlZjdcdTRmMDhcdTRmMWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRc''@;'; put 'put ''dTRlZjRcdTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyYTZcdTUzMjJcdTUzMWZcdTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2ZGZcdTU3MmVcdTU3MmFcdTU3MzRcdTU5M2NcdTU5ODBcdTU5N2NcdTU5ODVcdTU5N2JcdTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVj''@;'; put 'put ''MjVcdTVjN2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVlNzVcdTVlODRcdTVmMDJcdTVmMWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2ZcdTYyNWNcdTYyNWVcdTYyNjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYyNWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3Mzlc''@;'; put 'put ''dTY3MzhcdTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNcdTZjMThcdTZjNDZcdTZjNTJcdTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZjNGIiXSxbImNhNDAiLCJcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgy''@;'; put 'put ''N2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRc''@;'; put 'put ''dTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MTgiXSxbImNhYTEiLCJcdTU0M2RcdTU0''@;'; put 'put ''NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJc''@;'; put 'put ''dTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVm''@;'; put 'put ''ZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2Rc''@;'; put 'put ''dTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDciXSxbImNiNDAiLCJcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZj''@;'; put 'put ''OGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNc''@;'; put 'put ''dTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTMiXSxbImNiYTEiLCJcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThm''@;'; put 'put ''YmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlc''@;'; put 'put ''dTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0''@;'; put 'put ''ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZc''@;'; put 'put ''dTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjIiXSxbImNjNDAiLCJcdTU3NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5YmFcdTU5Y2ZcdTU5Y2VcdTU5YjJcdTU5Y2NcdTU5YzFcdTU5YjZcdTU5YmNcdTU5YzNcdTU5ZDZcdTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5''@;'; put 'put ''YjRcdTU5YzdcdTViNjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVcdTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThcdTVjYWNcdTVjOWZcdTVjYTNcdTVjYWRcdTVjYTJcdTVjYWFcdTVjYTdcdTVjOWRcdTVjYTVcdTVjYjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRc''@;'; put 'put ''dTVlMTlcdTVmMjhcdTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVmN2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYwMTlcdTYwMzJcdTYwMGIiXSxbImNjYTEiLCJcdTYwMzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNcdTYwMjJcdTYwMGRcdTYw''@;'; put 'put ''MTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYwMGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRcdTYyZDFcdTYyYmVcdTYyYWFcdTYyYjZcdTYyY2FcdTYyYWVcdTYyYjNcdTYyYWZcdTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1YmJcdTY2MDlcdTY1ZmNc''@;'; put 'put ''dTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJcdTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2MTBcdTY2ZjZcdTY3MGFcdTY3ODVcdTY3NmNcdTY3OGVcdTY3OTJcdTY3NzZcdTY3N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNcdTY3N2FcdTY3OWZcdTY3''@;'; put 'put ''OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2VcdTZiZGVcdTZjMWRcdTZjOTNcdTZjZWNcdTZjZWJcdTZjZWVcdTZjZDlcdTZjYjZcdTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZjYmFcdTZjYzNcdTZjYzZc''@;'; put 'put ''dTZjZWRcdTZjZjIiXSxbImNkNDAiLCJcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcw''@;'; put 'put ''OTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2Vc''@;'; put 'put ''dTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmEiXSxbImNkYTEiLCJcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgw''@;'; put 'put ''YjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRc''@;'; put 'put ''dTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRm''@;'; put 'put ''ZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2YiXSxbImNlNDAiLCJc''@;'; put 'put ''dTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3''@;'; put 'put ''OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRc''@;'; put 'put ''dTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGIiXSxbImNlYTEiLCJcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVl''@;'; put 'put ''MjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRc''@;'; put 'put ''dTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1''@;'; put 'put ''YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmEiXSxbImNmNDAiLCJcdTY3ZGNcdTY3YmJcdTY3ZjhcdTY3ZDhc''@;'; put 'put ''dTY3YzBcdTY3YjdcdTY3YzVcdTY3ZWJcdTY3ZTRcdTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZcdTY3ZWVcdTY3ZTNcdTY3YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBcdTY3YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3ZTZcdTY3ZGJcdTY3ZmFcdTY3''@;'; put 'put ''YzlcdTY3Y2FcdTY3YzNcdTY3ZWFcdTY3Y2JcdTZiMjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZiZTBcdTZjMjBcdTZjMjFcdTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZkM2NcdTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRcdTZkMTlcdTZkM2FcdTZkMWFc''@;'; put 'put ''dTZkMTFcdTZkMDBcdTZkMWRcdTZkNDIiXSxbImNmYTEiLCJcdTZkMDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZkMjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZkMTBcdTcwYjdcdTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFcdTcwYjRcdTcwYjVcdTcw''@;'; put 'put ''YTlcdTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNcdTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFcdTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJcdTczYzhcdTczYzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTczZWJcdTczYmZcdTczYzdc''@;'; put 'put ''dTczYmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MGFcdTc2ZjdcdTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4''@;'; put 'put ''MDVcdTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2RcdTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODAiXSxbImQwNDAiLCJcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2Zc''@;'; put 'put ''dTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgw''@;'; put 'put ''YzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWEi''@;'; put 'put ''XSxbImQwYTEiLCJcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkw''@;'; put 'put ''ZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdc''@;'; put 'put ''dTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0''@;'; put 'put ''ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjEiXSxbImQxNDAiLCJcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJc''@;'; put 'put ''dTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTVi''@;'; put 'put ''YWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjciXSxbImQxYTEiLCJcdTYwNDFcdTYwYTJc''@;'; put 'put ''dTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYz''@;'; put 'put ''MjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZc''@;'; put 'put ''dTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZi''@;'; put 'put ''MmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTQiXSxbImQyNDAiLCJcdTZiZThcdTZiZTNcdTZiZTJcdTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNcdTZkNjRcdTZkNzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZc''@;'; put 'put ''dTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZkNjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZkNWZcdTZkODJcdTZkOThcdTZkMmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZkODBcdTZkODRcdTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcw''@;'; put 'put ''ZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdcdTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2RcdTcwYzVcdTcwYzZcdTcwYzdcdTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJcdTcyNzgiXSxbImQyYTEiLCJcdTcyNzdcdTcyNzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVc''@;'; put 'put ''dTcyZjZcdTcyZjNcdTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVcdTczZDZcdTczYmNcdTczZTdcdTczZTNcdTczZTlcdTczZGNcdTczZDJcdTczZGJcdTczZDRcdTczZGRcdTczZGFcdTczZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZcdTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1''@;'; put 'put ''NWZcdTc1YjBcdTc1YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1YjZcdTc1YmFcdTc2OGFcdTc2YzlcdTc3MWRcdTc3MWJcdTc3MTBcdTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZc''@;'; put 'put ''dTc4MjhcdTc4MmVcdTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFcdTc4MzFcdTc5NTRcdTc5NWJcdTc5NGZcdTc5NWNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5ZWJcdTc5ZWNcdTc5ZTBcdTc5ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVcdTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdh''@;'; put 'put ''OGJcdTdhOGNcdTdhOGFcdTdhODdcdTdhZDhcdTdiMTAiXSxbImQzNDAiLCJcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVc''@;'; put 'put ''dTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgx''@;'; put 'put ''MDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjIiXSxbImQzYTEiLCJcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBc''@;'; put 'put ''dTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2''@;'; put 'put ''OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRc''@;'; put 'put ''dThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkw''@;'; put 'put ''ZTRcdTkxNTAiXSxbImQ0NDAiLCJcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFc''@;'; put 'put ''dTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1''@;'; put 'put ''M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDUiXSxbImQ0YTEiLCJcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRc''@;'; put 'put ''dTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3''@;'; put 'put ''ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRc''@;'; put 'put ''dTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGYiXSxbImQ1NDAiLCJcdTVk''@;'; put 'put ''MzBcdTVkMTJcdTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlcdTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhcdTVmOWJcdTVmOTZcdTVmOWZcdTYwOGFcdTYwOTBcdTYwODZcdTYwYmVcdTYwYjBcdTYwYmFcdTYwZDNcdTYwZDRcdTYwY2ZcdTYwZTRcdTYwZDlc''@;'; put 'put ''dTYwZGRcdTYwYzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYwYzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYzODJcdTYzN2RcdTYzYmRcdTYzOWVcdTYzYWRcdTYzOWRcdTYzOTdcdTYzYWJcdTYzOGVcdTYzNmZcdTYzODdcdTYzOTBcdTYzNmVcdTYzYWZcdTYz''@;'; put 'put ''NzVcdTYzOWNcdTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWYiXSxbImQ1YTEiLCJcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFcdTYzOGRcdTYzNzBcdTY1NTNcdTY1Y2RcdTY2NjVcdTY2NjFcdTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBc''@;'; put 'put ''dTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJcdTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4NzRcdTY4YjJcdTY4OGZcdTY4NzdcdTY4OTJcdTY4N2NcdTY4NmJcdTY4NzJcdTY4YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4OTZcdTY4OGJcdTY4YTBcdTY4''@;'; put 'put ''ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhcdTZiOTFcdTZiOGZcdTZiOGRcdTZiOGVcdTZiOGNcdTZjMmFcdTZkYzBcdTZkYWJcdTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlcdTZkZTJcdTZkYjdcdTZkZjZc''@;'; put 'put ''dTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZcdTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZkZjRcdTZkY2FcdTZkYmRcdTZkZWRcdTZkZjBcdTZkYmFcdTZkZDVcdTZkYzJcdTZkY2ZcdTZkYzkiXSxbImQ2NDAiLCJcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZk''@;'; put 'put ''ZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2Zc''@;'; put 'put ''dTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1''@;'; put 'put ''NjNcdTc1Y2VcdTc1ZDJcdTc1Y2YiXSxbImQ2YTEiLCJcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3MzlcdTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRc''@;'; put 'put ''dTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdi''@;'; put 'put ''MzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThcdTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2Zc''@;'; put 'put ''dTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdmYzdcdTdmY2ZcdTdmYzlcdTgwMWYiXSxbImQ3NDAiLCJcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgx''@;'; put 'put ''MWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVc''@;'; put 'put ''dTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjciXSxb''@;'; put 'put ''ImQ3YTEiLCJcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZc''@;'; put 'put ''dTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThk''@;'; put 'put ''YmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlc''@;'; put 'put ''dTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWEiXSxbImQ4NDAiLCJcdTkxZWJcdTkxZjdcdTkxZThcdTkxZWVcdTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2NzFcdTk2NmZcdTk2''@;'; put 'put ''YmZcdTk3NmFcdTk4MDRcdTk4ZTVcdTk5OTdcdTUwOWJcdTUwOTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNcdTUwODNcdTUwOGNcdTUwOGVcdTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJcdTUwODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdcdTU1OTFcdTU1YThc''@;'; put 'put ''dTU1YTVcdTU1YWRcdTU1NzdcdTU2NDVcdTU1YTJcdTU1OTNcdTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1YTNcdTU1OTJcdTU1YTRcdTU1N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1YTFcdTU1OGVcdTU3MGNcdTU4MjlcdTU4MzciXSxbImQ4YTEiLCJcdTU4MTlcdTU4MWVcdTU4''@;'; put 'put ''MjdcdTU4MjNcdTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4MzhcdTU4MmRcdTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZcdTVhOTRcdTVhOWZcdTVhN2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVhN2NcdTVhYTVc''@;'; put 'put ''dTVhYWNcdTVhOTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFcdTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVhOWNcdTVhOGZcdTVhOTNcdTVhOWRcdTViZWFcdTViY2RcdTViY2JcdTViZDRcdTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBcdTVkMzdcdTVk''@;'; put 'put ''NDNcdTVkNmJcdTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVkNTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFcdTVkNTlcdTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhcdTVkM2NcdTVkMzJcdTVkMzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVmNThcdTVmYTZc''@;'; put 'put ''dTVmYTVcdTVmYWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJcdTYwY2VcdTYwYzRcdTYxMTQiXSxbImQ5NDAiLCJcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYx''@;'; put 'put ''MGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdc''@;'; put 'put ''dTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDIiXSxbImQ5YTEiLCJcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2''@;'; put 'put ''NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZc''@;'; put 'put ''dTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZi''@;'; put 'put ''OTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBc''@;'; put 'put ''dTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWUiXSxbImRhNDAiLCJcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZl''@;'; put 'put ''NjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBc''@;'; put 'put ''dTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTYiXSxbImRhYTEiLCJcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0''@;'; put 'put ''ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRc''@;'; put 'put ''dTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdi''@;'; put 'put ''NGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2Zc''@;'; put 'put ''dTdmNjUiXSxbImRiNDAiLCJcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdmZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgwZDRcdTgxNDNcdTgxNGFcdTgxNTJcdTgxNGZcdTgxNDdcdTgxM2RcdTgxNGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgy''@;'; put 'put ''M2NcdTgyM2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNcdTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRcdTgzZmNcdTgzZjZcdTg0MTBcdTgzYzZcdTgzYzhcdTgzZWJcdTgzZTNcdTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2Jc''@;'; put 'put ''dTgzY2VcdTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0MTFcdTg0MDZcdTgzYzJcdTgzZjMiXSxbImRiYTEiLCJcdTgzZDVcdTgzZmFcdTgzYzdcdTgzZDFcdTgzZWFcdTg0MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJcdTgzZDdcdTgzZTJcdTg0MWJcdTgz''@;'; put 'put ''ZGJcdTgzZmVcdTg2ZDhcdTg2ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2ZWFcdTg2ZGRcdTg2ZWJcdTg2ZGNcdTg2ZWNcdTg2ZTlcdTg2ZDdcdTg2ZThcdTg2ZDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4YzBcdTg4YmVcdTg4YjZcdTg4YmNc''@;'; put 'put ''dTg4YjdcdTg4YmRcdTg4YjJcdTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5ZGRcdTg5ZGFcdTg5ZGJcdThhNGVcdThhNGRcdThhMzlcdThhNTlcdThhNDBcdThhNTdcdThhNThcdThhNDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFcdThhNGNcdThhNGZcdThjNWZcdThj''@;'; put 'put ''ODFcdThjODBcdThjYmFcdThjYmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThkODBcdThkODlcdThkZDhcdThkZDNcdThkY2RcdThkYzdcdThkZDZcdThkZGNcdThkY2ZcdThkZDVcdThkZDlcdThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThlZmEiXSxbImRjNDAiLCJcdThlZjlc''@;'; put 'put ''dThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkx''@;'; put 'put ''MDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZc''@;'; put 'put ''dTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODgiXSxbImRjYTEiLCJcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRl''@;'; put 'put ''YjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2Jc''@;'; put 'put ''dTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4''@;'; put 'put ''NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVhYzYiXSxbImRkNDAiLCJcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZc''@;'; put 'put ''dTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVl''@;'; put 'put ''Y2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJc''@;'; put 'put ''dTY0MDlcdTY0MjBcdTY0MjQiXSxbImRkYTEiLCJcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYz''@;'; put 'put ''ZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5Mzlc''@;'; put 'put ''dTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5''@;'; put 'put ''NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmMiXSxbImRlNDAiLCJcdTZiZjlcdTZiZjdcdTZiZjhcdTZlOWJcdTZlZDZcdTZlYzhcdTZlOGZcdTZlYzBcdTZlOWZc''@;'; put 'put ''dTZlOTNcdTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZlYzlcdTZlYjdcdTZlYjBcdTZlY2RcdTZlYTZcdTZlY2ZcdTZlYjJcdTZlYmVcdTZlYzNcdTZlZGNcdTZlZDhcdTZlOTlcdTZlOTJcdTZlOGVcdTZlOGRcdTZlYTRcdTZlYTFcdTZl''@;'; put 'put ''YmZcdTZlYjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNWRcdTcxNjJcdTcxNzJcdTcxNzhcdTcxNmFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcxNGJcdTcxNzBcdTcxNWZcdTcxNTBcdTcxNTMiXSxbImRl''@;'; put 'put ''YTEiLCJcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRcdTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTczM2JcdTczM2FcdTczNDBcdTczNGFcdTczNDlcdTc0NDRcdTc0NGFcdTc0NGJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NGZcdTc0NTBcdTc0NGVcdTc0''@;'; put 'put ''NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZcdTc2MGZcdTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNcdTc1ZjlcdTc1ZjhcdTc2MTBcdTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1ZjVcdTc1ZmRcdTc2OTlcdTc2YjVc''@;'; put 'put ''dTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3ZTBcdTc4ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4ODRcdTc4OTVcdTc4ODVcdTc4ODZcdTc4YTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4''@;'; put 'put ''N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdhMThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTMiXSxbImRmNDAiLCJcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVc''@;'; put 'put ''dTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdm''@;'; put 'put ''NmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmYiXSxbImRmYTEiLCJcdTgxNDRcdTgxNjFcdTgyMWRc''@;'; put 'put ''dTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0''@;'; put 'put ''MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRcdTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0Njhc''@;'; put 'put ''dTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4''@;'; put 'put ''ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTQiXSxbImUwNDAiLCJcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRc''@;'; put 'put ''dThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThk''@;'; put 'put ''ZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2YiXSxbImUwYTEiLCJcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFc''@;'; put 'put ''dTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTky''@;'; put 'put ''MzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZc''@;'; put 'put ''dTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUw''@;'; put 'put ''ZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTAiXSxbImUxNDAiLCJcdTUxZDhcdTUyODBcdTUyODFcdTUyZTlcdTUyZWJcdTUzMzBcdTUzYWNcdTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNcdTU2MGZcdTU2MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRcdTU1ZmZc''@;'; put 'put ''dTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFcdTU4N2ZcdTU4NzRcdTU4OGJcdTU4N2FcdTU4ODdcdTU4OTFcdTU4OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4OTRcdTU4OGZcdTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVhZWFcdTVh''@;'; put 'put ''ZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVhZTJcdTVhZTBcdTVhZGJcdTVhZWNcdTVhZGVcdTVhZGRcdTVhZDlcdTVhZThcdTVhZGZcdTViNzdcdTViZTAiXSxbImUxYTEiLCJcdTViZTNcdTVjNjNcdTVkODJcdTVkODBcdTVkN2RcdTVkODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVkODlc''@;'; put 'put ''dTVkODhcdTVkN2VcdTVkN2NcdTVkOGRcdTVkNzlcdTVkN2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVlZGNcdTVlZDVcdTVlZDlcdTVlZDJcdTVlZDRcdTVmNDRcdTVmNDNcdTVmNmZcdTVmYjZcdTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFcdTYx''@;'; put 'put ''NzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNmNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFcdTYxNTZcdTYyMjlcdTYyMjdcdTYyMmJcdTY0MmJcdTY0NGRcdTY0NWJcdTY0NWRcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0NzVc''@;'; put 'put ''dTY0NjZcdTY0YTZcdTY0NGVcdTY0ODJcdTY0NWVcdTY0NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0NmJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1YTBcdTY2YTFcdTY2YTBcdTY2OWZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZcdTY5''@;'; put 'put ''YzkiXSxbImUyNDAiLCJcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNc''@;'; put 'put ''dTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZm''@;'; put 'put ''MmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGEiXSxbImUyYTEiLCJcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRc''@;'; put 'put ''dTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTcz''@;'; put 'put ''NGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVc''@;'; put 'put ''dTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTMiXSxbImUzNDAiLCJcdTc5OTdcdTc5''@;'; put 'put ''ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRc''@;'; put 'put ''dTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdk''@;'; put 'put ''YTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGUiXSxbImUzYTEiLCJcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNc''@;'; put 'put ''dTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0''@;'; put 'put ''ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2Fc''@;'; put 'put ''dTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmIiXSxbImU0NDAiLCJcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5''@;'; put 'put ''OWZcdTg5OWVcdTg5ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJcdThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlcdThjZDVcdThjY2ZcdThjZDdcdThkOTZcdThlMDlcdThlMDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVc''@;'; put 'put ''dThkZmVcdThlMDBcdThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkxMWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkxMWFcdTkxMjRcdTkxMjFcdTkxMWJcdTkxN2FcdTkxNzJcdTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTky''@;'; put 'put ''OTRcdTkyYWFcdTkyOGQiXSxbImU0YTEiLCJcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTkyOTdcdTkyN2ZcdTkyYTNcdTkyZWVcdTkyOGVcdTkyODJcdTkyOTVcdTkyYTJcdTkyN2RcdTkyODhcdTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTkyN2VcdTkyODdcdTkyYTlc''@;'; put 'put ''dTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVcdTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2FcdTk3N2VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3N2JcdTk3ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OWRcdTk5OWNcdTk5''@;'; put 'put ''YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlhZTdcdTliM2VcdTliM2ZcdTliNjBcdTliNjFcdTliNWZcdTljZjFcdTljZjJcdTljZjVcdTllYTdcdTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUwZjZcdTUwZmVcdTUxMGJc''@;'; put 'put ''dTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJcdTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJcdTU2NGNcdTU2MzVcdTU2NDFcdTU2NGFcdTU2NDlcdTU2NDZcdTU2NTgiXSxbImU1NDAiLCJcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3''@;'; put 'put ''MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZc''@;'; put 'put ''dTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODkiXSxbImU1YTEi''@;'; put 'put ''LCJcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFc''@;'; put 'put ''dTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZh''@;'; put 'put ''MWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNc''@;'; put 'put ''dTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTIiXSxbImU2NDAiLCJcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZm''@;'; put 'put ''NTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlc''@;'; put 'put ''dTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTkiXSxbImU2YTEiLCJcdTczNjJcdTc0ODdcdTc0ODlcdTc0''@;'; put 'put ''OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhc''@;'; put 'put ''dTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdi''@;'; put 'put ''YWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJc''@;'; put 'put ''dTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWYiXSxbImU3NDAiLCJcdTgxOWVcdTgxOTVcdTgxYTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNcdTgyNTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRcdTg1M2JcdTg1MGZcdTg1MDBcdTg1MjlcdTg1''@;'; put 'put ''MGVcdTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNcdTg0ZjRcdTg1MmFcdTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0ZjNcdTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1MTZcdTg0ZmVcdTg1MjhcdTg1MWRcdTg1MmVc''@;'; put 'put ''dTg1MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1MThcdTg1MjBcdTg1MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjIiXSxbImU3YTEiLCJcdTg3NTZcdTg3NjNcdTg3NjRcdTg3NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3''@;'; put 'put ''NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZcdTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVcdTg3NGZcdTg3N2JcdTg3NzVcdTg3NjJcdTg3NjdcdTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNc''@;'; put 'put ''dTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThhYjhcdThhZDNcdThhZDFcdThhZDRcdThhZDVcdThhYmJcdThhZDdcdThhYmVcdThhYzBcdThh''@;'; put 'put ''YzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThjNGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFcdThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFcdThkOWJcdThlMjBcdThlMjNcdThlMjVcdThlMjRcdThlMmVcdThlMTVcdThlMWJcdThlMTZc''@;'; put 'put ''dThlMTFcdThlMTlcdThlMjZcdThlMjciXSxbImU4NDAiLCJcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkx''@;'; put 'put ''MmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZc''@;'; put 'put ''dTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTkyZDMiXSxbImU4YTEiLCJcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2''@;'; put 'put ''ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2Rc''@;'; put 'put ''dTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTli''@;'; put 'put ''NmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmUi''@;'; put 'put ''XSxbImU5NDAiLCJcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTVi''@;'; put 'put ''MjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJc''@;'; put 'put ''dTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmEiXSxbImU5YTEiLCJcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1''@;'; put 'put ''N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFc''@;'; put 'put ''dTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZj''@;'; put 'put ''MDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjgiXSxbImVhNDAiLCJcdTZmYTJcdTZmYzlc''@;'; put 'put ''dTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBcdTcxYzVcdTcxYzJcdTcxYmZcdTcxYjhcdTcxZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcxZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcxZDhcdTcxYmNcdTcxYzZcdTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTcz''@;'; put 'put ''NjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0N2ZcdTc0OWFcdTc0YTBcdTc0OTRcdTc0OTJcdTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBcdTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNcdTc2M2NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFc''@;'; put 'put ''dTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVcdTc3OTkiXSxbImVhYTEiLCJcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4ZGVcdTc4ZTNcdTc4ZGJcdTc4ZTFcdTc4ZTJcdTc4ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRcdTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdh''@;'; put 'put ''YjVcdTdhYjFcdTdhYjdcdTdiZGVcdTdiZTNcdTdiZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFcdTdiZTJcdTdiZGNcdTdiZWJcdTdiZDhcdTdiZGZcdTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdjZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNc''@;'; put 'put ''dTdlMWZcdTdlMjBcdTdlMTNcdTdlMGVcdTdlMWNcdTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdlMjVcdTdlMjRcdTdmNDNcdTdmN2JcdTdmN2NcdTdmN2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlcdTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgx''@;'; put 'put ''YjlcdTgxYjVcdTgxYWJcdTgxYjBcdTgxYWNcdTgxYjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NmJcdTg1NGRcdTg1NTNcdTg1NjFcdTg1NTgiXSxbImViNDAiLCJcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRc''@;'; put 'put ''dTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3''@;'; put 'put ''ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZc''@;'; put 'put ''dTg5ZjFcdThhZTAiXSxbImViYTEiLCJcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThj''@;'; put 'put ''ZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZc''@;'; put 'put ''dTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkz''@;'; put 'put ''MWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGMiXSxbImVjNDAiLCJcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1Yjlc''@;'; put 'put ''dTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5''@;'; put 'put ''ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTUiXSxbImVjYTEiLCJc''@;'; put 'put ''dTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUx''@;'; put 'put ''MjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2Jc''@;'; put 'put ''dTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZh''@;'; put 'put ''OGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGUiXSxbImVkNDAiLCJcdTZhOTVcdTZhODNcdTZhYThcdTZhYTRcdTZhOTFcdTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlc''@;'; put 'put ''dTZmY2NcdTZmYTlcdTZmZjRcdTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZmZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZmZThcdTcxZTFcdTcxZjFcdTcxZThcdTcxZjJcdTcxZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0''@;'; put 'put ''OTBcdTc0YWFcdTc0YWRcdTc0YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdcdTc2YTRcdTc2ZTlcdTc3YjVcdTc3YWJcdTc3YjJcdTc3YjdcdTc3YjYiXSxbImVkYTEiLCJcdTc3YjRcdTc3YjFcdTc3YThcdTc3ZjBc''@;'; put 'put ''dTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNcdTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRcdTc5YWJcdTc5YThcdTdhNWNcdTdhNWJcdTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdhYmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZcdTdiZmJcdTdj''@;'; put 'put ''MGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdjMDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdjMDZcdTdiZjBcdTdiZjFcdTdjMTBcdTdjMGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJcdTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdlMjlcdTdlNGNc''@;'; put 'put ''dTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2FcdTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRcdTdmZjJcdTgwMmNcdTgxYmJcdTgxYzRcdTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgxYmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZcdTg1YTdcdTg1''@;'; put 'put ''OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1YTRcdTg1OWFcdTg1OWUiXSxbImVlNDAiLCJcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVc''@;'; put 'put ''dTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3''@;'; put 'put ''YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWUiXSxbImVlYTEiLCJcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJc''@;'; put 'put ''dThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkx''@;'; put 'put ''MzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlc''@;'; put 'put ''dTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3''@;'; put 'put ''MTlcdTk3OWFcdTk3YTFcdTk3OWMiXSxbImVmNDAiLCJcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThc''@;'; put 'put ''dTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTli''@;'; put 'put ''YTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzAiXSxbImVmYTEiLCJcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRc''@;'; put 'put ''dTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYx''@;'; put 'put ''ZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZc''@;'; put 'put ''dTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzYiXSxb''@;'; put 'put ''ImYwNDAiLCJcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNcdTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFcdTc2YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4ZmZcdTc5MGNcdTc5MTNcdTc5MTRc''@;'; put 'put ''dTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdjMmRcdTdjMWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdjMzBcdTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThcdTdlNjJcdTdlNWZcdTdlNTFcdTdl''@;'; put 'put ''NjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDIiXSxbImYwYTEiLCJcdTgxZDBcdTgyNWZcdTgyNWVcdTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNcdTg1YzJcdTg1YjNcdTg1YjVcdTg1YmRcdTg1YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2Vc''@;'; put 'put ''dTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1YjdcdTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3ZGJcdTg3ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3ZjNcdTg3ZTRcdTg3ZDRcdTg3ZGNcdTg3ZDNcdTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3''@;'; put 'put ''ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThiMmFcdThiMjdcdThiMjNcdThiMzNcdThiMzBcdThiMzVcdThiNDdcdThiMmZcdThiM2NcdThiM2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZc''@;'; put 'put ''dThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVcdThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThkMDJcdThkMDBcdThlNWNcdThlNjJcdThlNjBcdThlNTdcdThlNTZcdThlNWVcdThlNjVcdThlNjciXSxbImYxNDAiLCJcdThlNWJcdThlNWFcdThl''@;'; put 'put ''NjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVc''@;'; put 'put ''dTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3''@;'; put 'put ''YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWEiXSxbImYxYTEiLCJcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFc''@;'; put 'put ''dTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTliNGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlk''@;'; put 'put ''NTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFcdTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRc''@;'; put 'put ''dTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzAiXSxbImYyNDAiLCJcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1''@;'; put 'put ''MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFc''@;'; put 'put ''dTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5''@;'; put 'put ''MWRcdTc5MWIiXSxbImYyYTEiLCJcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhc''@;'; put 'put ''dTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1''@;'; put 'put ''ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThc''@;'; put 'put ''dTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTUiXSxbImYzNDAiLCJcdThiNTFcdThiNDJcdThiNTJcdThiNTdcdThjNDNcdThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThk''@;'; put 'put ''MDlcdThkYWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThlNzhcdThlNzNcdThlNmFcdThlNmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFcdThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBcdTkxM2ZcdTkxYjBcdTkxYWRcdTkzZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBc''@;'; put 'put ''dTkzZjlcdTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZcdTkzY2FcdTkzZDRcdTkzZWVcdTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkzYzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1ZGJcdTk2ZTFcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MjhcdTk3MjYiXSxbImYzYTEiLCJcdTk3''@;'; put 'put ''YjNcdTk3YjdcdTk3YjZcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZcdTk5YTdcdTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlhMWJcdTlhMjJcdTlhMjBcdTlhMjdc''@;'; put 'put ''dTlhMjNcdTlhMWVcdTlhMWNcdTlhMTRcdTlhYzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTliZGVcdTliZTRcdTliZTZcdTliZTJcdTliZjBcdTliZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVcdTliZDVcdTliZTFcdTliZGFcdTlk''@;'; put 'put ''NzdcdTlkODFcdTlkOGFcdTlkODRcdTlkODhcdTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRcdTlkNzVcdTlkNzBcdTlkNjlcdTlkODVcdTlkNzNcdTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlkODdcdTlkNjhcdTllOTRcdTllOTFc''@;'; put 'put ''dTllYzBcdTllZmNcdTlmMmRcdTlmNDBcdTlmNDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjIiXSxbImY0NDAiLCJcdTU2YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1''@;'; put 'put ''MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFc''@;'; put 'put ''dTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjkiXSxbImY0YTEiLCJcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdh''@;'; put 'put ''ZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlc''@;'; put 'put ''dTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThm''@;'; put 'put ''NTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVc''@;'; put 'put ''dTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmYiXSxbImY1NDAiLCJcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4''@;'; put 'put ''YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVc''@;'; put 'put ''dTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWIiXSxbImY1YTEiLCJcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlk''@;'; put 'put ''YThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNc''@;'; put 'put ''dTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3''@;'; put 'put ''ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBc''@;'; put 'put ''dTg2MjlcdTg2MWVcdTg2MjUiXSxbImY2NDAiLCJcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4MWNcdTg4MmJcdTg4NGFcdTg5NmRcdTg5NjlcdTg5NmVcdTg5NmJcdTg5ZmFcdThiNzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThl''@;'; put 'put ''OGNcdThmNWVcdThmNWJcdThmNWRcdTkxNDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZcdTk0MjlcdTk0M2RcdTk0M2NcdTk0MzBcdTk0MzlcdTk0MmFcdTk0MzdcdTk0MmNcdTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFc''@;'; put 'put ''dTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBcdTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlhNDJcdTlhNDFcdTlhM2EiXSxbImY2YTEiLCJcdTlhM2ZcdTlhY2RcdTliMTVcdTliMTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNcdTlj''@;'; put 'put ''MjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlkYjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlkY2ZcdTlkYmVcdTlkYzVcdTlkYzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlcdTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlkYjJc''@;'; put 'put ''dTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJcdTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVcdTlmNjRcdTlmOTJcdTRlYjlcdTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTViNGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZi''@;'; put 'put ''MGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTczN2ZcdTc0ZDhcdTc0ZDVcdTc0ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVcdTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWEiXSxbImY3''@;'; put 'put ''NDAiLCJcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThi''@;'; put 'put ''ODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2Jc''@;'; put 'put ''dTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGEiXSxbImY3YTEiLCJcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTlj''@;'; put 'put ''M2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJc''@;'; put 'put ''dTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTcz''@;'; put 'put ''ODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmUiXSxbImY4NDAiLCJcdThiOGNcdThiOGVcdThiOGJc''@;'; put 'put ''dThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTlj''@;'; put 'put ''NTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNc''@;'; put 'put ''dTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGYiXSxbImY4YTEiLCJcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5''@;'; put 'put ''MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdc''@;'; put 'put ''dTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlm''@;'; put 'put ''NzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWEiXSxbImY5NDAiLCJcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgxZTFcdTg2NDZcdTg2NDdc''@;'; put 'put ''dTg2NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NWZcdTljNjhcdTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBcdTllMGZcdTllMTJcdTll''@;'; put 'put ''MTFcdTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJcdThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlhNjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTllMTRcdTllMTNcdTllZjZc''@;'; put 'put ''dTlmMGEiXSxbImY5YTEiLCJcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2VcdTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThlYTlcdThlYzlcdTk3NGJcdTk4NzNcdTk4NzRcdTk4Y2NcdTk5NjFcdTk5YWJcdTlhNjRcdTlhNjZcdTlhNjdcdTliMjRcdTllMTVcdTllMTdcdTlm''@;'; put 'put ''NDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlhNjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlcdTg2NGJcdThiOWZcdTk0ODNcdTljNzlcdTllYjdcdTc2NzVcdTlhNmJcdTljN2FcdTllMWRcdTcwNjlcdTcwNmFcdTllYTRcdTlmN2VcdTlmNDlc''@;'; put 'put ''dTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1NjNcdTI1NWFcdTI1NjlcdTI1NWRcdTI1NTJcdTI1NjRcdTI1NTVcdTI1NWVcdTI1NmFcdTI1NjFcdTI1NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1''@;'; put 'put ''NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1OTMiXV0nKX0sNTY0MDYodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiOGVh''@;'; put 'put ''MSIsIlx1ZmY2MSIsNjJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRk''@;'; put 'put ''XHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZm''@;'; put 'put ''MGJcdWZmMGRceGIxXHhkN1x4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYw''@;'; put 'put ''Nlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjNyJdLFsiYTJhMSIsIlx1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJiYSIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1''@;'; put 'put ''MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiYTJjYSIsIlx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiYTJkYyIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIz''@;'; put 'put ''NVx1MjIyYlx1MjIyYyJdLFsiYTJmMiIsIlx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbImEyZmUiLCJcdTI1ZWYiXSxbImEzYjAiLCJcdWZmMTAiLDldLFsiYTNjMSIsIlx1ZmYyMSIsMjVdLFsiYTNlMSIsIlx1ZmY0MSIsMjVdLFsiYTRhMSIsIlx1''@;'; put 'put ''MzA0MSIsODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZhMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2''@;'; put 'put ''IiwyNV0sWyJhOGExIiwiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4''@;'; put 'put ''XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyIl0sWyJhZGExIiwiXHUyNDYwIiwxOSwiXHUyMTYwIiw5XSxbImFkYzAiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNc''@;'; put 'put ''dTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxbImFkZGYiLCJcdTMzN2JcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2''@;'; put 'put ''MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYSJdLFsiYjBhMSIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1''@;'; put 'put ''NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVl''@;'; put 'put ''NVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1''@;'; put 'put ''NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiYjFhMSIsIlx1OTY2''@;'; put 'put ''Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1''@;'; put 'put ''NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTlj''@;'; put 'put ''NVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1''@;'; put 'put ''OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkYyJdLFsiYjJhMSIsIlx1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEw''@;'; put 'put ''NFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1''@;'; put 'put ''NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIx''@;'; put 'put ''MVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiYjNhMSIsIlx1OWI0MVx1''@;'; put 'put ''NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2''@;'; put 'put ''Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1''@;'; put 'put ''NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYlx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1Njgy''@;'; put 'put ''YVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1ODQzMSJdLFsiYjRhMSIsIlx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1''@;'; put 'put ''NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2Rl''@;'; put 'put ''OVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1''@;'; put 'put ''OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiYjVhMSIsIlx1NmE1Zlx1NWUz''@;'; put 'put ''MFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1''@;'; put 'put ''NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYx''@;'; put 'put ''MVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1''@;'; put 'put ''ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhYyJdLFsiYjZhMSIsIlx1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0''@;'; put 'put ''YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1''@;'; put 'put ''NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNl''@;'; put 'put ''NVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiYjdhMSIsIlx1NjM5OFx1N2E5Zlx1''@;'; put 'put ''NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNl''@;'; put 'put ''YVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1''@;'; put 'put ''OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2''@;'; put 'put ''M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3MiJdLFsiYjhhMSIsIlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1''@;'; put 'put ''OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYy''@;'; put 'put ''N1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1''@;'; put 'put ''NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMSJdLFsiYjlhMSIsIlx1NTQwZVx1NTU4OVx1NTc1''@;'; put 'put ''MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1''@;'; put 'put ''NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3''@;'; put 'put ''NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZFx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1''@;'; put 'put ''NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiYyJdLFsiYmFhMSIsIlx1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2''@;'; put 'put ''ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1''@;'; put 'put ''NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBi''@;'; put 'put ''NFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMxOVx1NTE4YVx1NTIzNyJdLFsiYmJhMSIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1''@;'; put 'put ''NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNk''@;'; put 'put ''Ylx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1''@;'; put 'put ''NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4''@;'; put 'put ''Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0MiJdLFsiYmNhMSIsIlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1''@;'; put 'put ''OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMw''@;'; put 'put ''NFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1''@;'; put 'put ''NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OCJdLFsiYmRhMSIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZl''@;'; put 'put ''ZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1''@;'; put 'put ''NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZh''@;'; put 'put ''YVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1''@;'; put 'put ''NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZiJdLFsiYmVhMSIsIlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4''@;'; put 'put ''YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1''@;'; put 'put ''NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5''@;'; put 'put ''N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZSJdLFsiYmZhMSIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1''@;'; put 'put ''N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1''@;'; put 'put ''ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1''@;'; put 'put ''OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOFx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZk''@;'; put 'put ''Ylx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZSJdLFsiYzBhMSIsIlx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1''@;'; put 'put ''NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYx''@;'; put 'put ''NFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1''@;'; put 'put ''NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYSJdLFsiYzFhMSIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIz''@;'; put 'put ''OVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1''@;'; put 'put ''NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1''@;'; put 'put ''Y1x1NjM4M1x1NjMzZlx1NjNiYlx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1''@;'; put 'put ''OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZSJdLFsiYzJhMSIsIlx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5''@;'; put 'put ''YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1''@;'; put 'put ''NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0''@;'; put 'put ''Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYSJdLFsiYzNhMSIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1''@;'; put 'put ''ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZj''@;'; put 'put ''Ylx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1''@;'; put 'put ''N2FmOVx1N2I1MVx1ODRjNFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1''@;'; put 'put ''N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNSJdLFsiYzRhMSIsIlx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1''@;'; put 'put ''OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNi''@;'; put 'put ''NFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1''@;'; put 'put ''NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJdLFsiYzVhMSIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1''@;'; put 'put ''OFx1NjRlMlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1''@;'; put 'put ''NmJiZlx1NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAx''@;'; put 'put ''Mlx1NTE1YVx1NTFhY1x1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1''@;'; put 'put ''N2I0OVx1N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMCJdLFsiYzZhMSIsIlx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFh''@;'; put 'put ''N1x1NjQ5ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1''@;'; put 'put ''OWNmNlx1ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTli''@;'; put 'put ''NFx1N2UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsiYzdhMSIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1''@;'; put 'put ''OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZh''@;'; put 'put ''NFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1''@;'; put 'put ''NWE5Mlx1Njg4NVx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYy''@;'; put 'put ''MFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNiJdLFsiYzhhMSIsIlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1''@;'; put 'put ''N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFj''@;'; put 'put ''Nlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1''@;'; put 'put ''N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiYzlhMSIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2''@;'; put 'put ''Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1''@;'; put 'put ''NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3''@;'; put 'put ''Nlx1NjU3N1x1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1''@;'; put 'put ''NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZCJdLFsiY2FhMSIsIlx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2Nk''@;'; put 'put ''ZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1''@;'; put 'put ''NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJj''@;'; put 'put ''ZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiY2JhMSIsIlx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1''@;'; put 'put ''ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBh''@;'; put 'put ''YVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1''@;'; put 'put ''NzZjNlx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2''@;'; put 'put ''ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MCJdLFsiY2NhMSIsIlx1NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1''@;'; put 'put ''NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4''@;'; put 'put ''NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1''@;'; put 'put ''ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiY2RhMSIsIlx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJh''@;'; put 'put ''NVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1''@;'; put 'put ''NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIz''@;'; put 'put ''Mlx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1''@;'; put 'put ''Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4MyJdLFsiY2VhMSIsIlx1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4''@;'; put 'put ''ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1''@;'; put 'put ''NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZm''@;'; put 'put ''Nlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiY2ZhMSIsIlx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1''@;'; put 'put ''OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2''@;'; put 'put ''YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiZDBhMSIsIlx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1''@;'; put 'put ''NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYz''@;'; put 'put ''MFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1''@;'; put 'put ''NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBi''@;'; put 'put ''NFx1NTBiMiJdLFsiZDFhMSIsIlx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1''@;'; put 'put ''NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFi''@;'; put 'put ''MVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1''@;'; put 'put ''NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOCJdLFsiZDJhMSIsIlx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJl''@;'; put 'put ''Nlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1''@;'; put 'put ''NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQy''@;'; put 'put ''ZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1''@;'; put 'put ''NTRhOCJdLFsiZDNhMSIsIlx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUz''@;'; put 'put ''OFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1''@;'; put 'put ''NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZi''@;'; put 'put ''Y1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOSJdLFsiZDRhMSIsIlx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1''@;'; put 'put ''NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3''@;'; put 'put ''Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1''@;'; put 'put ''NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2''@;'; put 'put ''OSJdLFsiZDVhMSIsIlx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1''@;'; put 'put ''NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1''@;'; put 'put ''YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1''@;'; put 'put ''NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1MyJdLFsiZDZhMSIsIlx1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5''@;'; put 'put ''Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1''@;'; put 'put ''NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUw''@;'; put 'put ''Ylx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJd''@;'; put 'put ''LFsiZDdhMSIsIlx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYz''@;'; put 'put ''OFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1''@;'; put 'put ''NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0''@;'; put 'put ''Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YSJdLFsiZDhhMSIsIlx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1''@;'; put 'put ''NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEz''@;'; put 'put ''NFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1''@;'; put 'put ''NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsi''@;'; put 'put ''ZDlhMSIsIlx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1''@;'; put 'put ''NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4''@;'; put 'put ''ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1''@;'; put 'put ''NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiYyJdLFsiZGFhMSIsIlx1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJh''@;'; put 'put ''Y1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1''@;'; put 'put ''NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYz''@;'; put 'put ''Nlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiZGJh''@;'; put 'put ''MSIsIlx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1''@;'; put 'put ''OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1''@;'; put 'put ''NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1Njhi''@;'; put 'put ''YVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZCJdLFsiZGNhMSIsIlx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1''@;'; put 'put ''NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1Njlj''@;'; put 'put ''MVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1''@;'; put 'put ''NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiZGRhMSIs''@;'; put 'put ''Ilx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1''@;'; put 'put ''NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJi''@;'; put 'put ''Y1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1''@;'; put 'put ''NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZSJdLFsiZGVhMSIsIlx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQz''@;'; put 'put ''M1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1''@;'; put 'put ''NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5''@;'; put 'put ''OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZGZhMSIsIlx1''@;'; put 'put ''NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZk''@;'; put 'put ''NVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1''@;'; put 'put ''NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFk''@;'; put 'put ''N1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmYyJdLFsiZTBhMSIsIlx1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1''@;'; put 'put ''NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMx''@;'; put 'put ''Y1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1''@;'; put 'put ''NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTFhMSIsIlx1NzRl''@;'; put 'put ''MFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1''@;'; put 'put ''NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVj''@;'; put 'put ''ZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1''@;'; put 'put ''NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MCJdLFsiZTJhMSIsIlx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZi''@;'; put 'put ''NFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1''@;'; put 'put ''Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1Nzgw''@;'; put 'put ''Y1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTNhMSIsIlx1NzhlN1x1''@;'; put 'put ''NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1Nzlj''@;'; put 'put ''OVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1''@;'; put 'put ''N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2FiMFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2Iw''@;'; put 'put ''Zlx1N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MCJdLFsiZTRhMSIsIlx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1''@;'; put 'put ''N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2Jm''@;'; put 'put ''N1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1''@;'; put 'put ''N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTVhMSIsIlx1N2QwMlx1N2Qx''@;'; put 'put ''Y1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1''@;'; put 'put ''N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0''@;'; put 'put ''Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1''@;'; put 'put ''N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYSJdLFsiZTZhMSIsIlx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4''@;'; put 'put ''Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1''@;'; put 'put ''OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4''@;'; put 'put ''NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTdhMSIsIlx1OTY4Ylx1ODE0Nlx1''@;'; put 'put ''ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFj''@;'; put 'put ''Mlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1''@;'; put 'put ''ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJm''@;'; put 'put ''YVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOSJdLFsiZThhMSIsIlx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1''@;'; put 'put ''ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQw''@;'; put 'put ''ZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1''@;'; put 'put ''ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTlhMSIsIlx1ODU0MVx1ODYwMlx1ODU0''@;'; put 'put ''Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1''@;'; put 'put ''ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgy''@;'; put 'put ''M1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ODZkZlx1ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1''@;'; put 'put ''ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OSJdLFsiZWFhMSIsIlx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdj''@;'; put 'put ''N1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1''@;'; put 'put ''ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkw''@;'; put 'put ''Mlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZSJdLFsiZWJhMSIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1''@;'; put 'put ''ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGEx''@;'; put 'put ''Nlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1''@;'; put 'put ''OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0''@;'; put 'put ''MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2YiJdLFsiZWNhMSIsIlx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1''@;'; put 'put ''OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNl''@;'; put 'put ''NFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1''@;'; put 'put ''OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YSJdLFsiZWRhMSIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1''@;'; put 'put ''MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1''@;'; put 'put ''OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0''@;'; put 'put ''OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1''@;'; put 'put ''OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOCJdLFsiZWVhMSIsIlx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4''@;'; put 'put ''MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1''@;'; put 'put ''OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1''@;'; put 'put ''N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZSJdLFsiZWZhMSIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1''@;'; put 'put ''OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQw''@;'; put 'put ''N1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1''@;'; put 'put ''OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OVx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYy''@;'; put 'put ''Zlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZSJdLFsiZjBhMSIsIlx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1''@;'; put 'put ''OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0''@;'; put 'put ''Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1''@;'; put 'put ''OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MCJdLFsiZjFhMSIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThh''@;'; put 'put ''Zlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1''@;'; put 'put ''OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0''@;'; put 'put ''NVx1OWE0Mlx1OWE0MFx1OWE0M1x1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1''@;'; put 'put ''OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmNyJdLFsiZjJhMSIsIlx1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0''@;'; put 'put ''ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1''@;'; put 'put ''OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNl''@;'; put 'put ''N1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OCJdLFsiZjNhMSIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1''@;'; put 'put ''OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUx''@;'; put 'put ''Ylx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1''@;'; put 'put ''OWVlNVx1OWVlOFx1OWVlZlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2''@;'; put 'put ''YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMCJdLFsiZjRhMSIsIlx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZjlhMSIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1''@;'; put 'put ''NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFl''@;'; put 'put ''Y1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1''@;'; put 'put ''NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZi''@;'; put 'put ''NyJdLFsiZmFhMSIsIlx1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1''@;'; put 'put ''NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0''@;'; put 'put ''Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1''@;'; put 'put ''NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZmJhMSIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQy''@;'; put 'put ''Nlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1''@;'; put 'put ''N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEy''@;'; put 'put ''MFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYSJd''@;'; put 'put ''LFsiZmNhMSIsIlx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJk''@;'; put 'put ''NVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1''@;'; put 'put ''OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZmNmMSIsIlx1MjE3''@;'; put 'put ''MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyIl0sWyI4ZmEyYWYiLCJcdTAyZDhcdTAyYzdceGI4XHUwMmQ5XHUwMmRkXHhhZlx1MDJkYlx1MDJkYVx1ZmY1ZVx1MDM4NFx1MDM4NSJdLFsiOGZhMmMyIiwiXHhhMVx4YTZceGJmIl0sWyI4ZmEyZWIiLCJceGJhXHhhYVx4YTlceGFlXHUy''@;'; put 'put ''MTIyXHhhNFx1MjExNiJdLFsiOGZhNmUxIiwiXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwM2FhIl0sWyI4ZmE2ZTciLCJcdTAzOGMiXSxbIjhmYTZlOSIsIlx1MDM4ZVx1MDNhYiJdLFsiOGZhNmVjIiwiXHUwMzhmIl0sWyI4ZmE2ZjEiLCJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAz''@;'; put 'put ''Y2FcdTAzOTBcdTAzY2NcdTAzYzJcdTAzY2RcdTAzY2JcdTAzYjBcdTAzY2UiXSxbIjhmYTdjMiIsIlx1MDQwMiIsMTAsIlx1MDQwZVx1MDQwZiJdLFsiOGZhN2YyIiwiXHUwNDUyIiwxMCwiXHUwNDVlXHUwNDVmIl0sWyI4ZmE5YTEiLCJceGM2XHUwMTEwIl0sWyI4ZmE5YTQiLCJcdTAxMjYi''@;'; put 'put ''XSxbIjhmYTlhNiIsIlx1MDEzMiJdLFsiOGZhOWE4IiwiXHUwMTQxXHUwMTNmIl0sWyI4ZmE5YWIiLCJcdTAxNGFceGQ4XHUwMTUyIl0sWyI4ZmE5YWYiLCJcdTAxNjZceGRlIl0sWyI4ZmE5YzEiLCJceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0Mlx1MDE0MFx1''@;'; put 'put ''MDE0OVx1MDE0Ylx4ZjhcdTAxNTNceGRmXHUwMTY3XHhmZSJdLFsiOGZhYWExIiwiXHhjMVx4YzBceGM0XHhjMlx1MDEwMlx1MDFjZFx1MDEwMFx1MDEwNFx4YzVceGMzXHUwMTA2XHUwMTA4XHUwMTBjXHhjN1x1MDEwYVx1MDEwZVx4YzlceGM4XHhjYlx4Y2FcdTAxMWFcdTAxMTZcdTAxMTJc''@;'; put 'put ''dTAxMTgiXSxbIjhmYWFiYSIsIlx1MDExY1x1MDExZVx1MDEyMlx1MDEyMFx1MDEyNFx4Y2RceGNjXHhjZlx4Y2VcdTAxY2ZcdTAxMzBcdTAxMmFcdTAxMmVcdTAxMjhcdTAxMzRcdTAxMzZcdTAxMzlcdTAxM2RcdTAxM2JcdTAxNDNcdTAxNDdcdTAxNDVceGQxXHhkM1x4ZDJceGQ2XHhkNFx1''@;'; put 'put ''MDFkMVx1MDE1MFx1MDE0Y1x4ZDVcdTAxNTRcdTAxNThcdTAxNTZcdTAxNWFcdTAxNWNcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNjJceGRhXHhkOVx4ZGNceGRiXHUwMTZjXHUwMWQzXHUwMTcwXHUwMTZhXHUwMTcyXHUwMTZlXHUwMTY4XHUwMWQ3XHUwMWRiXHUwMWQ5XHUwMWQ1XHUwMTc0XHhk''@;'; put 'put ''ZFx1MDE3OFx1MDE3Nlx1MDE3OVx1MDE3ZFx1MDE3YiJdLFsiOGZhYmExIiwiXHhlMVx4ZTBceGU0XHhlMlx1MDEwM1x1MDFjZVx1MDEwMVx1MDEwNVx4ZTVceGUzXHUwMTA3XHUwMTA5XHUwMTBkXHhlN1x1MDEwYlx1MDEwZlx4ZTlceGU4XHhlYlx4ZWFcdTAxMWJcdTAxMTdcdTAxMTNcdTAx''@;'; put 'put ''MTlcdTAxZjVcdTAxMWRcdTAxMWYiXSxbIjhmYWJiZCIsIlx1MDEyMVx1MDEyNVx4ZWRceGVjXHhlZlx4ZWVcdTAxZDAiXSxbIjhmYWJjNSIsIlx1MDEyYlx1MDEyZlx1MDEyOVx1MDEzNVx1MDEzN1x1MDEzYVx1MDEzZVx1MDEzY1x1MDE0NFx1MDE0OFx1MDE0Nlx4ZjFceGYzXHhmMlx4ZjZc''@;'; put 'put ''eGY0XHUwMWQyXHUwMTUxXHUwMTRkXHhmNVx1MDE1NVx1MDE1OVx1MDE1N1x1MDE1Ylx1MDE1ZFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE2M1x4ZmFceGY5XHhmY1x4ZmJcdTAxNmRcdTAxZDRcdTAxNzFcdTAxNmJcdTAxNzNcdTAxNmZcdTAxNjlcdTAxZDhcdTAxZGNcdTAxZGFcdTAxZDZcdTAx''@;'; put 'put ''NzVceGZkXHhmZlx1MDE3N1x1MDE3YVx1MDE3ZVx1MDE3YyJdLFsiOGZiMGExIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTBjXHU0ZTEyXHU0ZTFmXHU0ZTIzXHU0ZTI0XHU0ZTI4XHU0ZTJiXHU0ZTJlXHU0ZTJmXHU0ZTMwXHU0ZTM1XHU0ZTQwXHU0ZTQxXHU0ZTQ0XHU0ZTQ3XHU0ZTUxXHU0''@;'; put 'put ''ZTVhXHU0ZTVjXHU0ZTYzXHU0ZTY4XHU0ZTY5XHU0ZTc0XHU0ZTc1XHU0ZTc5XHU0ZTdmXHU0ZThkXHU0ZTk2XHU0ZTk3XHU0ZTlkXHU0ZWFmXHU0ZWI5XHU0ZWMzXHU0ZWQwXHU0ZWRhXHU0ZWRiXHU0ZWUwXHU0ZWUxXHU0ZWUyXHU0ZWU4XHU0ZWVmXHU0ZWYxXHU0ZWYzXHU0ZWY1XHU0ZWZk''@;'; put 'put ''XHU0ZWZlXHU0ZWZmXHU0ZjAwXHU0ZjAyXHU0ZjAzXHU0ZjA4XHU0ZjBiXHU0ZjBjXHU0ZjEyXHU0ZjE1XHU0ZjE2XHU0ZjE3XHU0ZjE5XHU0ZjJlXHU0ZjMxXHU0ZjYwXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlXHU0ZjQwXHU0ZjQyXHU0ZjQ4XHU0ZjQ5XHU0ZjRiXHU0''@;'; put 'put ''ZjRjXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjU4XHU0ZjVmXHU0ZjYzXHU0ZjZhXHU0ZjZjXHU0ZjZlXHU0ZjcxXHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjdlXHU0ZjgxXHU0ZjgyXHU0Zjg0Il0sWyI4ZmIxYTEiLCJcdTRmODVcdTRmODlcdTRmOGFcdTRmOGNcdTRmOGVcdTRm''@;'; put 'put ''OTBcdTRmOTJcdTRmOTNcdTRmOTRcdTRmOTdcdTRmOTlcdTRmOWFcdTRmOWVcdTRmOWZcdTRmYjJcdTRmYjdcdTRmYjlcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzVcdTRmYzZcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmY2ZcdTRmZDJcdTRmZGNc''@;'; put 'put ''dTRmZTBcdTRmZTJcdTRmZjBcdTRmZjJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDRcdTUwMDdcdTUwMGFcdTUwMGNcdTUwMGVcdTUwMTBcdTUwMTNcdTUwMTdcdTUwMThcdTUwMWJcdTUwMWNcdTUwMWRcdTUwMWVcdTUwMjJcdTUwMjdcdTUwMmVcdTUwMzBcdTUwMzJcdTUw''@;'; put 'put ''MzNcdTUwMzVcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDVcdTUwNDZcdTUwNGFcdTUwNGNcdTUwNGVcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTdcdTUwNTlcdTUwNWZcdTUwNjBcdTUwNjJcdTUwNjNcdTUwNjZcdTUwNjdcdTUwNmFcdTUwNmRcdTUwNzBcdTUwNzFcdTUwM2JcdTUwODFcdTUwODNc''@;'; put 'put ''dTUwODRcdTUwODZcdTUwOGFcdTUwOGVcdTUwOGZcdTUwOTAiXSxbIjhmYjJhMSIsIlx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5Nlx1NTA5Ylx1NTA5Y1x1NTA5ZSIsNCwiXHU1MGFhXHU1MGFmXHU1MGIwXHU1MGI5XHU1MGJhXHU1MGJkXHU1MGMwXHU1MGMzXHU1MGM0XHU1MGM3XHU1MGNjXHU1''@;'; put 'put ''MGNlXHU1MGQwXHU1MGQzXHU1MGQ0XHU1MGQ4XHU1MGRjXHU1MGRkXHU1MGRmXHU1MGUyXHU1MGU0XHU1MGU2XHU1MGU4XHU1MGU5XHU1MGVmXHU1MGYxXHU1MGY2XHU1MGZhXHU1MGZlXHU1MTAzXHU1MTA2XHU1MTA3XHU1MTA4XHU1MTBiXHU1MTBjXHU1MTBkXHU1MTBlXHU1MGYyXHU1MTEw''@;'; put 'put ''XHU1MTE3XHU1MTE5XHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTIzXHU1MTI3XHU1MTI4XHU1MTJjXHU1MTJkXHU1MTJmXHU1MTMxXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM4XHU1MTM5XHU1MTQyXHU1MTRhXHU1MTRmXHU1MTUzXHU1MTU1XHU1MTU3XHU1MTU4XHU1MTVmXHU1MTY0XHU1''@;'; put 'put ''MTY2XHU1MTdlXHU1MTgzXHU1MTg0XHU1MThiXHU1MThlXHU1MTk4XHU1MTlkXHU1MWExXHU1MWEzXHU1MWFkXHU1MWI4XHU1MWJhXHU1MWJjXHU1MWJlXHU1MWJmXHU1MWMyIl0sWyI4ZmIzYTEiLCJcdTUxYzhcdTUxY2ZcdTUxZDFcdTUxZDJcdTUxZDNcdTUxZDVcdTUxZDhcdTUxZGVcdTUx''@;'; put 'put ''ZTJcdTUxZTVcdTUxZWVcdTUxZjJcdTUxZjNcdTUxZjRcdTUxZjdcdTUyMDFcdTUyMDJcdTUyMDVcdTUyMTJcdTUyMTNcdTUyMTVcdTUyMTZcdTUyMThcdTUyMjJcdTUyMjhcdTUyMzFcdTUyMzJcdTUyMzVcdTUyM2NcdTUyNDVcdTUyNDlcdTUyNTVcdTUyNTdcdTUyNThcdTUyNWFcdTUyNWNc''@;'; put 'put ''dTUyNWZcdTUyNjBcdTUyNjFcdTUyNjZcdTUyNmVcdTUyNzdcdTUyNzhcdTUyNzlcdTUyODBcdTUyODJcdTUyODVcdTUyOGFcdTUyOGNcdTUyOTNcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWZcdTUyYjBcdTUyYjZcdTUy''@;'; put 'put ''YjdcdTUyYjhcdTUyYmFcdTUyYmJcdTUyYmRcdTUyYzBcdTUyYzRcdTUyYzZcdTUyYzhcdTUyY2NcdTUyY2ZcdTUyZDFcdTUyZDRcdTUyZDZcdTUyZGJcdTUyZGNcdTUyZTFcdTUyZTVcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWNcdTUyZjBcdTUyZjFcdTUyZjRcdTUyZjZcdTUyZjdcdTUzMDBc''@;'; put 'put ''dTUzMDNcdTUzMGFcdTUzMGIiXSxbIjhmYjRhMSIsIlx1NTMwY1x1NTMxMVx1NTMxM1x1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMzMFx1NTMzMlx1NTMzNVx1NTMzY1x1NTMzZFx1NTMzZVx1NTM0Mlx1''@;'; put 'put ''NTM0Y1x1NTM0Ylx1NTM1OVx1NTM1Ylx1NTM2MVx1NTM2M1x1NTM2NVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3OVx1NTM3ZVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4ZVx1NTM5M1x1NTM5NFx1NTM5OVx1NTM5ZFx1NTNhMVx1NTNhNFx1NTNhYVx1NTNhYlx1NTNhZlx1NTNiMlx1NTNiNFx1NTNi''@;'; put 'put ''NVx1NTNiN1x1NTNiOFx1NTNiYVx1NTNiZFx1NTNjMFx1NTNjNVx1NTNjZlx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkZFx1NTNkZVx1NTNlMFx1NTNlNlx1NTNlN1x1NTNmNVx1NTQwMlx1NTQxM1x1NTQxYVx1NTQyMVx1NTQyN1x1NTQyOFx1NTQyYVx1NTQyZlx1NTQzMVx1NTQzNFx1''@;'; put 'put ''NTQzNVx1NTQ0M1x1NTQ0NFx1NTQ0N1x1NTQ0ZFx1NTQ0Zlx1NTQ1ZVx1NTQ2Mlx1NTQ2NFx1NTQ2Nlx1NTQ2N1x1NTQ2OVx1NTQ2Ylx1NTQ2ZFx1NTQ2ZVx1NTQ3NFx1NTQ3ZiJdLFsiOGZiNWExIiwiXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg4XHU1NDg5XHU1NDhkXHU1NDkxXHU1NDk1XHU1''@;'; put 'put ''NDk2XHU1NDljXHU1NDlmXHU1NGExXHU1NGE2XHU1NGE3XHU1NGE5XHU1NGFhXHU1NGFkXHU1NGFlXHU1NGIxXHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJiXHU1NGJmXHU1NGM2XHU1NGNhXHU1NGNkXHU1NGNlXHU1NGUwXHU1NGVhXHU1NGVjXHU1NGVmXHU1NGY2XHU1NGZjXHU1NGZlXHU1NGZm''@;'; put 'put ''XHU1NTAwXHU1NTAxXHU1NTA1XHU1NTA4XHU1NTA5XHU1NTBjXHU1NTBkXHU1NTBlXHU1NTE1XHU1NTJhXHU1NTJiXHU1NTMyXHU1NTM1XHU1NTM2XHU1NTNiXHU1NTNjXHU1NTNkXHU1NTQxXHU1NTQ3XHU1NTQ5XHU1NTRhXHU1NTRkXHU1NTUwXHU1NTUxXHU1NTU4XHU1NTVhXHU1NTViXHU1''@;'; put 'put ''NTVlXHU1NTYwXHU1NTYxXHU1NTY0XHU1NTY2XHU1NTdmXHU1NTgxXHU1NTgyXHU1NTg2XHU1NTg4XHU1NThlXHU1NThmXHU1NTkxXHU1NTkyXHU1NTkzXHU1NTk0XHU1NTk3XHU1NWEzXHU1NWE0XHU1NWFkXHU1NWIyXHU1NWJmXHU1NWMxXHU1NWMzXHU1NWM2XHU1NWM5XHU1NWNiXHU1NWNj''@;'; put 'put ''XHU1NWNlXHU1NWQxXHU1NWQyIl0sWyI4ZmI2YTEiLCJcdTU1ZDNcdTU1ZDdcdTU1ZDhcdTU1ZGJcdTU1ZGVcdTU1ZTJcdTU1ZTlcdTU1ZjZcdTU1ZmZcdTU2MDVcdTU2MDhcdTU2MGFcdTU2MGQiLDUsIlx1NTYxOVx1NTYyY1x1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOVx1NTYzYlx1''@;'; put 'put ''NTYzY1x1NTYzZFx1NTYzZlx1NTY0MFx1NTY0MVx1NTY0M1x1NTY0NFx1NTY0Nlx1NTY0OVx1NTY0Ylx1NTY0ZFx1NTY0Zlx1NTY1NFx1NTY1ZVx1NTY2MFx1NTY2MVx1NTY2Mlx1NTY2M1x1NTY2Nlx1NTY2OVx1NTY2ZFx1NTY2Zlx1NTY3MVx1NTY3Mlx1NTY3NVx1NTY4NFx1NTY4NVx1NTY4''@;'; put 'put ''OFx1NTY4Ylx1NTY4Y1x1NTY5NVx1NTY5OVx1NTY5YVx1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZiMVx1NTZiM1x1NTZiN1x1NTZiZVx1NTZjNVx1NTZjOVx1NTZjYVx1NTZjYlx1NTZjZlx1NTZkMFx1NTZjY1x1NTZjZFx1''@;'; put 'put ''NTZkOVx1NTZkY1x1NTZkZFx1NTZkZlx1NTZlMVx1NTZlNCIsNCwiXHU1NmYxXHU1NmViXHU1NmVkIl0sWyI4ZmI3YTEiLCJcdTU2ZjZcdTU2ZjdcdTU3MDFcdTU3MDJcdTU3MDdcdTU3MGFcdTU3MGNcdTU3MTFcdTU3MTVcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MjBcdTU3MjJcdTU3MjNcdTU3''@;'; put 'put ''MjRcdTU3MjVcdTU3MjlcdTU3MmFcdTU3MmNcdTU3MmVcdTU3MmZcdTU3MzNcdTU3MzRcdTU3M2RcdTU3M2VcdTU3M2ZcdTU3NDVcdTU3NDZcdTU3NGNcdTU3NGRcdTU3NTJcdTU3NjJcdTU3NjVcdTU3NjdcdTU3NjhcdTU3NmJcdTU3NmQiLDQsIlx1NTc3M1x1NTc3NFx1NTc3NVx1NTc3N1x1''@;'; put 'put ''NTc3OVx1NTc3YVx1NTc3Ylx1NTc3Y1x1NTc3ZVx1NTc4MVx1NTc4M1x1NTc4Y1x1NTc5NFx1NTc5N1x1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhMVx1NTc5NVx1NTdhN1x1NTdhOFx1NTdhOVx1NTdhY1x1NTdiOFx1NTdiZFx1NTdjN1x1NTdjOFx1NTdjY1x1NTdj''@;'; put 'put ''Zlx1NTdkNVx1NTdkZFx1NTdkZVx1NTdlNFx1NTdlNlx1NTdlN1x1NTdlOVx1NTdlZFx1NTdmMFx1NTdmNVx1NTdmNlx1NTdmOFx1NTdmZFx1NTdmZVx1NTdmZlx1NTgwM1x1NTgwNFx1NTgwOFx1NTgwOVx1NTdlMSJdLFsiOGZiOGExIiwiXHU1ODBjXHU1ODBkXHU1ODFiXHU1ODFlXHU1ODFm''@;'; put 'put ''XHU1ODIwXHU1ODI2XHU1ODI3XHU1ODJkXHU1ODMyXHU1ODM5XHU1ODNmXHU1ODQ5XHU1ODRjXHU1ODRkXHU1ODRmXHU1ODUwXHU1ODU1XHU1ODVmXHU1ODYxXHU1ODY0XHU1ODY3XHU1ODY4XHU1ODc4XHU1ODdjXHU1ODdmXHU1ODgwXHU1ODgxXHU1ODg3XHU1ODg4XHU1ODg5XHU1ODhhXHU1''@;'; put 'put ''ODhjXHU1ODhkXHU1ODhmXHU1ODkwXHU1ODk0XHU1ODk2XHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGE2XHU1OGE5XHU1OGIxXHU1OGIyXHU1OGM0XHU1OGJjXHU1OGMyXHU1OGM4XHU1OGNkXHU1OGNlXHU1OGQwXHU1OGQyXHU1OGQ0XHU1OGQ2XHU1OGRhXHU1OGRkXHU1OGUxXHU1OGUy''@;'; put 'put ''XHU1OGU5XHU1OGYzXHU1OTA1XHU1OTA2XHU1OTBiXHU1OTBjXHU1OTEyXHU1OTEzXHU1OTE0XHU4NjQxXHU1OTFkXHU1OTIxXHU1OTIzXHU1OTI0XHU1OTI4XHU1OTJmXHU1OTMwXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNmXHU1OTQzXHU1OTQ2XHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1''@;'; put 'put ''OTVkXHU1OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTZiXHU1OTZkIl0sWyI4ZmI5YTEiLCJcdTU5NmZcdTU5NzJcdTU5NzVcdTU5NzZcdTU5NzlcdTU5N2JcdTU5N2NcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OTJcdTU5OTVcdTU5OTdcdTU5OWZcdTU5YTRcdTU5YTdcdTU5YWRcdTU5YWVcdTU5''@;'; put 'put ''YWZcdTU5YjBcdTU5YjNcdTU5YjdcdTU5YmFcdTU5YmNcdTU5YzFcdTU5YzNcdTU5YzRcdTU5YzhcdTU5Y2FcdTU5Y2RcdTU5ZDJcdTU5ZGRcdTU5ZGVcdTU5ZGZcdTU5ZTNcdTU5ZTRcdTU5ZTdcdTU5ZWVcdTU5ZWZcdTU5ZjFcdTU5ZjJcdTU5ZjRcdTU5ZjdcdTVhMDBcdTVhMDRcdTVhMGNc''@;'; put 'put ''dTVhMGRcdTVhMGVcdTVhMTJcdTVhMTNcdTVhMWVcdTVhMjNcdTVhMjRcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmRcdTVhMzBcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGNcdTVhNTBcdTVhNTVcdTVhNWVcdTVhNjNcdTVhNjVcdTVhNjdcdTVhNmRcdTVhNzdcdTVhN2FcdTVhN2JcdTVh''@;'; put 'put ''N2VcdTVhOGJcdTVhOTBcdTVhOTNcdTVhOTZcdTVhOTlcdTVhOWNcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTJcdTVhYTdcdTVhYWNcdTVhYjFcdTVhYjJcdTVhYjNcdTVhYjVcdTVhYjhcdTVhYmFcdTVhYmJcdTVhYmYiXSxbIjhmYmFhMSIsIlx1NWFjNFx1NWFjNlx1NWFjOFx1NWFjZlx1NWFk''@;'; put 'put ''YVx1NWFkY1x1NWFlMFx1NWFlNVx1NWFlYVx1NWFlZVx1NWFmNVx1NWFmNlx1NWFmZFx1NWIwMFx1NWIwMVx1NWIwOFx1NWIxN1x1NWIzNFx1NWIxOVx1NWIxYlx1NWIxZFx1NWIyMVx1NWIyNVx1NWIyZFx1NWIzOFx1NWI0MVx1NWI0Ylx1NWI0Y1x1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2OFx1''@;'; put 'put ''NWI2ZVx1NWI2Zlx1NWI3Y1x1NWI3ZFx1NWI3ZVx1NWI3Zlx1NWI4MVx1NWI4NFx1NWI4Nlx1NWI4YVx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5M1x1NWI5NFx1NWI5Nlx1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiY1x1NWJjMFx1NWJj''@;'; put 'put ''MVx1NWJjZFx1NWJjZlx1NWJkNiIsNCwiXHU1YmUwXHU1YmVmXHU1YmYxXHU1YmY0XHU1YmZkXHU1YzBjXHU1YzE3XHU1YzFlXHU1YzFmXHU1YzIzXHU1YzI2XHU1YzI5XHU1YzJiXHU1YzJjXHU1YzJlXHU1YzMwXHU1YzMyXHU1YzM1XHU1YzM2XHU1YzU5XHU1YzVhXHU1YzVjXHU1YzYyXHU1''@;'; put 'put ''YzYzXHU1YzY3XHU1YzY4XHU1YzY5Il0sWyI4ZmJiYTEiLCJcdTVjNmRcdTVjNzBcdTVjNzRcdTVjNzVcdTVjN2FcdTVjN2JcdTVjN2NcdTVjN2RcdTVjODdcdTVjODhcdTVjOGFcdTVjOGZcdTVjOTJcdTVjOWRcdTVjOWZcdTVjYTBcdTVjYTJcdTVjYTNcdTVjYTZcdTVjYWFcdTVjYjJcdTVj''@;'; put 'put ''YjRcdTVjYjVcdTVjYmFcdTVjYzlcdTVjY2JcdTVjZDJcdTVjZGRcdTVjZDdcdTVjZWVcdTVjZjFcdTVjZjJcdTVjZjRcdTVkMDFcdTVkMDZcdTVkMGRcdTVkMTJcdTVkMmJcdTVkMjNcdTVkMjRcdTVkMjZcdTVkMjdcdTVkMzFcdTVkMzRcdTVkMzlcdTVkM2RcdTVkM2ZcdTVkNDJcdTVkNDNc''@;'; put 'put ''dTVkNDZcdTVkNDhcdTVkNTVcdTVkNTFcdTVkNTlcdTVkNGFcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjRcdTVkNmFcdTVkNmRcdTVkNzBcdTVkNzlcdTVkN2FcdTVkN2VcdTVkN2ZcdTVkODFcdTVkODNcdTVkODhcdTVkOGFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTlcdTVk''@;'; put 'put ''OWJcdTVkOWZcdTVkYTBcdTVkYTdcdTVkYWJcdTVkYjBcdTVkYjRcdTVkYjhcdTVkYjlcdTVkYzNcdTVkYzdcdTVkY2JcdTVkZDBcdTVkY2VcdTVkZDhcdTVkZDlcdTVkZTBcdTVkZTQiXSxbIjhmYmNhMSIsIlx1NWRlOVx1NWRmOFx1NWRmOVx1NWUwMFx1NWUwN1x1NWUwZFx1NWUxMlx1NWUx''@;'; put 'put ''NFx1NWUxNVx1NWUxOFx1NWUxZlx1NWUyMFx1NWUyZVx1NWUyOFx1NWUzMlx1NWUzNVx1NWUzZVx1NWU0Ylx1NWU1MFx1NWU0OVx1NWU1MVx1NWU1Nlx1NWU1OFx1NWU1Ylx1NWU1Y1x1NWU1ZVx1NWU2OFx1NWU2YSIsNCwiXHU1ZTcwXHU1ZTgwXHU1ZThiXHU1ZThlXHU1ZWEyXHU1ZWE0XHU1''@;'; put 'put ''ZWE1XHU1ZWE4XHU1ZWFhXHU1ZWFjXHU1ZWIxXHU1ZWIzXHU1ZWJkXHU1ZWJlXHU1ZWJmXHU1ZWM2XHU1ZWNjXHU1ZWNiXHU1ZWNlXHU1ZWQxXHU1ZWQyXHU1ZWQ0XHU1ZWQ1XHU1ZWRjXHU1ZWRlXHU1ZWU1XHU1ZWViXHU1ZjAyXHU1ZjA2XHU1ZjA3XHU1ZjA4XHU1ZjBlXHU1ZjE5XHU1ZjFj''@;'; put 'put ''XHU1ZjFkXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjM0XHU1ZjM2XHU1ZjNiXHU1ZjNkXHU1ZjNmXHU1ZjQwXHU1ZjQ0XHU1ZjQ1XHU1ZjQ3XHU1ZjRkXHU1ZjUwXHU1ZjU0XHU1ZjU4XHU1ZjViXHU1ZjYwXHU1ZjYzXHU1ZjY0XHU1''@;'; put 'put ''ZjY3Il0sWyI4ZmJkYTEiLCJcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmODlcdTVmOGRcdTVmOGZcdTVmOTZcdTVmOWNcdTVmOWRcdTVmYTJcdTVmYTdcdTVmYWJcdTVmYTRcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjhcdTVmYzRcdTVm''@;'; put 'put ''YzdcdTVmYzhcdTVmYzlcdTVmY2JcdTVmZDAiLDQsIlx1NWZkZVx1NWZlMVx1NWZlMlx1NWZlOFx1NWZlOVx1NWZlYVx1NWZlY1x1NWZlZFx1NWZlZVx1NWZlZlx1NWZmMlx1NWZmM1x1NWZmNlx1NWZmYVx1NWZmY1x1NjAwN1x1NjAwYVx1NjAwZFx1NjAxM1x1NjAxNFx1NjAxN1x1NjAxOFx1''@;'; put 'put ''NjAxYVx1NjAxZlx1NjAyNFx1NjAyZFx1NjAzM1x1NjAzNVx1NjA0MFx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0Y1x1NjA1MVx1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1ZFx1NjA2MVx1NjA2N1x1NjA3MVx1NjA3ZVx1NjA3Zlx1NjA4Mlx1NjA4Nlx1NjA4OFx1NjA4YVx1NjA4ZVx1NjA5MVx1NjA5''@;'; put 'put ''M1x1NjA5NVx1NjA5OFx1NjA5ZFx1NjA5ZVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhOFx1NjBiMFx1NjBiMVx1NjBiNyJdLFsiOGZiZWExIiwiXHU2MGJiXHU2MGJlXHU2MGMyXHU2MGM0XHU2MGM4XHU2MGM5XHU2MGNhXHU2MGNiXHU2MGNlXHU2MGNmXHU2MGQ0XHU2MGQ1XHU2MGQ5XHU2MGRi''@;'; put 'put ''XHU2MGRkXHU2MGRlXHU2MGUyXHU2MGU1XHU2MGYyXHU2MGY1XHU2MGY4XHU2MGZjXHU2MGZkXHU2MTAyXHU2MTA3XHU2MTBhXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMTlcdTYxMWNcdTYxMWVcdTYxMjJcdTYxMmFcdTYxMmJcdTYxMzBcdTYxMzFcdTYxMzVcdTYxMzZcdTYx''@;'; put 'put ''MzdcdTYxMzlcdTYxNDFcdTYxNDVcdTYxNDZcdTYxNDlcdTYxNWVcdTYxNjBcdTYxNmNcdTYxNzJcdTYxNzhcdTYxN2JcdTYxN2NcdTYxN2ZcdTYxODBcdTYxODFcdTYxODNcdTYxODRcdTYxOGJcdTYxOGRcdTYxOTJcdTYxOTNcdTYxOTdcdTYxOThcdTYxOWNcdTYxOWRcdTYxOWZcdTYxYTBc''@;'; put 'put ''dTYxYTVcdTYxYThcdTYxYWFcdTYxYWRcdTYxYjhcdTYxYjlcdTYxYmNcdTYxYzBcdTYxYzFcdTYxYzJcdTYxY2VcdTYxY2ZcdTYxZDVcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTFcdTYxZTJcdTYxZTdcdTYxZTlcdTYxZTUiXSxbIjhmYmZhMSIsIlx1NjFlY1x1NjFlZFx1NjFlZlx1''@;'; put 'put ''NjIwMVx1NjIwM1x1NjIwNFx1NjIwN1x1NjIxM1x1NjIxNVx1NjIxY1x1NjIyMFx1NjIyMlx1NjIyM1x1NjIyN1x1NjIyOVx1NjIyYlx1NjIzOVx1NjIzZFx1NjI0Mlx1NjI0M1x1NjI0NFx1NjI0Nlx1NjI0Y1x1NjI1MFx1NjI1MVx1NjI1Mlx1NjI1NFx1NjI1Nlx1NjI1YVx1NjI1Y1x1NjI2''@;'; put 'put ''NFx1NjI2ZFx1NjI2Zlx1NjI3M1x1NjI3YVx1NjI3ZFx1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjJhNlx1NjJhOFx1NjJiM1x1NjJiNlx1NjJiN1x1NjJiYVx1NjJiZVx1NjJiZlx1NjJjNFx1NjJjZVx1NjJkNVx1NjJkNlx1NjJkYVx1NjJlYVx1NjJmMlx1NjJmNFx1NjJmY1x1NjJmZFx1''@;'; put 'put ''NjMwM1x1NjMwNFx1NjMwYVx1NjMwYlx1NjMwZFx1NjMxMFx1NjMxM1x1NjMxNlx1NjMxOFx1NjMyOVx1NjMyYVx1NjMyZFx1NjMzNVx1NjMzNlx1NjMzOVx1NjMzY1x1NjM0MVx1NjM0Mlx1NjM0M1x1NjM0NFx1NjM0Nlx1NjM0YVx1NjM0Ylx1NjM0ZVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1''@;'; put 'put ''OFx1NjM1Ylx1NjM2NVx1NjM2Nlx1NjM2Y1x1NjM2ZFx1NjM3MVx1NjM3NFx1NjM3NSJdLFsiOGZjMGExIiwiXHU2Mzc4XHU2MzdjXHU2MzdkXHU2MzdmXHU2MzgyXHU2Mzg0XHU2Mzg3XHU2MzhhXHU2MzkwXHU2Mzk0XHU2Mzk1XHU2Mzk5XHU2MzlhXHU2MzllXHU2M2E0XHU2M2E2XHU2M2Fk''@;'; put 'put ''XHU2M2FlXHU2M2FmXHU2M2JkXHU2M2MxXHU2M2M1XHU2M2M4XHU2M2NlXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2RjXHU2M2UwXHU2M2U1XHU2M2VhXHU2M2VjXHU2M2YyXHU2M2YzXHU2M2Y1XHU2M2Y4XHU2M2Y5XHU2NDA5XHU2NDBhXHU2NDEwXHU2NDEyXHU2NDE0XHU2NDE4XHU2''@;'; put 'put ''NDFlXHU2NDIwXHU2NDIyXHU2NDI0XHU2NDI1XHU2NDI5XHU2NDJhXHU2NDJmXHU2NDMwXHU2NDM1XHU2NDNkXHU2NDNmXHU2NDRiXHU2NDRmXHU2NDUxXHU2NDUyXHU2NDUzXHU2NDU0XHU2NDVhXHU2NDViXHU2NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYzXHU2NDZkXHU2NDcz''@;'; put 'put ''XHU2NDc0XHU2NDdiXHU2NDdkXHU2NDg1XHU2NDg3XHU2NDhmXHU2NDkwXHU2NDkxXHU2NDk4XHU2NDk5XHU2NDliXHU2NDlkXHU2NDlmXHU2NGExXHU2NGEzXHU2NGE2XHU2NGE4XHU2NGFjXHU2NGIzXHU2NGJkXHU2NGJlXHU2NGJmIl0sWyI4ZmMxYTEiLCJcdTY0YzRcdTY0YzlcdTY0Y2Fc''@;'; put 'put ''dTY0Y2JcdTY0Y2NcdTY0Y2VcdTY0ZDBcdTY0ZDFcdTY0ZDVcdTY0ZDdcdTY0ZTRcdTY0ZTVcdTY0ZTlcdTY0ZWFcdTY0ZWRcdTY0ZjBcdTY0ZjVcdTY0ZjdcdTY0ZmJcdTY0ZmZcdTY1MDFcdTY1MDRcdTY1MDhcdTY1MDlcdTY1MGFcdTY1MGZcdTY1MTNcdTY1MTRcdTY1MTZcdTY1MTlcdTY1''@;'; put 'put ''MWJcdTY1MWVcdTY1MWZcdTY1MjJcdTY1MjZcdTY1MjlcdTY1MmVcdTY1MzFcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDNcdTY1NDdcdTY1NDlcdTY1NTBcdTY1NTJcdTY1NTRcdTY1NWZcdTY1NjBcdTY1NjdcdTY1NmJcdTY1N2FcdTY1N2RcdTY1ODFcdTY1ODVcdTY1OGFcdTY1OTJcdTY1OTVc''@;'; put 'put ''dTY1OThcdTY1OWRcdTY1YTBcdTY1YTNcdTY1YTZcdTY1YWVcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YmZcdTY1YzJcdTY1YzhcdTY1YzlcdTY1Y2VcdTY1ZDBcdTY1ZDRcdTY1ZDZcdTY1ZDhcdTY1ZGZcdTY1ZjBcdTY1ZjJcdTY1ZjRcdTY1ZjVcdTY1ZjlcdTY1ZmVcdTY1ZmZcdTY2MDBcdTY2''@;'; put 'put ''MDRcdTY2MDhcdTY2MDlcdTY2MGRcdTY2MTFcdTY2MTJcdTY2MTVcdTY2MTZcdTY2MWQiXSxbIjhmYzJhMSIsIlx1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMVx1NjYzM1x1NjYzOVx1NjYzN1x1NjY0''@;'; put 'put ''MFx1NjY0NVx1NjY0Nlx1NjY0YVx1NjY0Y1x1NjY1MVx1NjY0ZVx1NjY1N1x1NjY1OFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY2MFx1NjY2MVx1NjZmYlx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY3ZVx1NjY3M1x1NjY3NVx1NjY3Zlx1NjY3N1x1NjY3OFx1NjY3OVx1NjY3Ylx1NjY4MFx1NjY3Y1x1''@;'; put 'put ''NjY4Ylx1NjY4Y1x1NjY4ZFx1NjY5MFx1NjY5Mlx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5Zlx1NjZhMFx1NjZhNFx1NjZhZFx1NjZiMVx1NjZiMlx1NjZiNVx1NjZiYlx1NjZiZlx1NjZjMFx1NjZjMlx1NjZjM1x1NjZjOFx1NjZjY1x1NjZjZVx1NjZjZlx1NjZkNFx1NjZkYlx1NjZk''@;'; put 'put ''Zlx1NjZlOFx1NjZlYlx1NjZlY1x1NjZlZVx1NjZmYVx1NjcwNVx1NjcwN1x1NjcwZVx1NjcxM1x1NjcxOVx1NjcxY1x1NjcyMFx1NjcyMlx1NjczM1x1NjczZVx1Njc0NVx1Njc0N1x1Njc0OFx1Njc0Y1x1Njc1NFx1Njc1NVx1Njc1ZCJdLFsiOGZjM2ExIiwiXHU2NzY2XHU2NzZjXHU2NzZl''@;'; put 'put ''XHU2Nzc0XHU2Nzc2XHU2NzdiXHU2NzgxXHU2Nzg0XHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkzXHU2Nzk2XHU2Nzk4XHU2Nzk5XHU2NzliXHU2N2IwXHU2N2IxXHU2N2IyXHU2N2I1XHU2N2JiXHU2N2JjXHU2N2JkXHU2N2Y5XHU2N2MwXHU2N2MyXHU2N2MzXHU2N2M1XHU2N2M4XHU2N2M5XHU2''@;'; put 'put ''N2QyXHU2N2Q3XHU2N2Q5XHU2N2RjXHU2N2UxXHU2N2U2XHU2N2YwXHU2N2YyXHU2N2Y2XHU2N2Y3XHU2ODUyXHU2ODE0XHU2ODE5XHU2ODFkXHU2ODFmXHU2ODI4XHU2ODI3XHU2ODJjXHU2ODJkXHU2ODJmXHU2ODMwXHU2ODMxXHU2ODMzXHU2ODNiXHU2ODNmXHU2ODQ0XHU2ODQ1XHU2ODRh''@;'; put 'put ''XHU2ODRjXHU2ODU1XHU2ODU3XHU2ODU4XHU2ODViXHU2ODZiXHU2ODZlIiw0LCJcdTY4NzVcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4ODJcdTY4ODRcdTY4ODZcdTY4ODhcdTY4OTZcdTY4OThcdTY4OWFcdTY4OWNcdTY4YTFcdTY4YTNcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWVcdTY4''@;'; put 'put ''YjJcdTY4YmJcdTY4YzVcdTY4YzhcdTY4Y2NcdTY4Y2YiXSxbIjhmYzRhMSIsIlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNlx1NjhkOVx1NjhkY1x1NjhkZFx1NjhlNVx1NjhlOFx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhmMFx1NjhmMVx1NjhmNVx1NjhmNlx1NjhmYlx1NjhmY1x1Njhm''@;'; put 'put ''ZFx1NjkwNlx1NjkwOVx1NjkwYVx1NjkxMFx1NjkxMVx1NjkxM1x1NjkxNlx1NjkxN1x1NjkzMVx1NjkzM1x1NjkzNVx1NjkzOFx1NjkzYlx1Njk0Mlx1Njk0NVx1Njk0OVx1Njk0ZVx1Njk1N1x1Njk1Ylx1Njk2M1x1Njk2NFx1Njk2NVx1Njk2Nlx1Njk2OFx1Njk2OVx1Njk2Y1x1Njk3MFx1''@;'; put 'put ''Njk3MVx1Njk3Mlx1Njk3YVx1Njk3Ylx1Njk3Zlx1Njk4MFx1Njk4ZFx1Njk5Mlx1Njk5Nlx1Njk5OFx1NjlhMVx1NjlhNVx1NjlhNlx1NjlhOFx1NjlhYlx1NjlhZFx1NjlhZlx1NjliN1x1NjliOFx1NjliYVx1NjliY1x1NjljNVx1NjljOFx1NjlkMVx1NjlkNlx1NjlkN1x1NjllMlx1Njll''@;'; put 'put ''NVx1NjllZVx1NjllZlx1NjlmMVx1NjlmM1x1NjlmNVx1NjlmZVx1NmEwMFx1NmEwMVx1NmEwM1x1NmEwZlx1NmExMVx1NmExNVx1NmExYVx1NmExZFx1NmEyMFx1NmEyNFx1NmEyOFx1NmEzMFx1NmEzMiJdLFsiOGZjNWExIiwiXHU2YTM0XHU2YTM3XHU2YTNiXHU2YTNlXHU2YTNmXHU2YTQ1''@;'; put 'put ''XHU2YTQ2XHU2YTQ5XHU2YTRhXHU2YTRlXHU2YTUwXHU2YTUxXHU2YTUyXHU2YTU1XHU2YTU2XHU2YTViXHU2YTY0XHU2YTY3XHU2YTZhXHU2YTcxXHU2YTczXHU2YTdlXHU2YTgxXHU2YTgzXHU2YTg2XHU2YTg3XHU2YTg5XHU2YThiXHU2YTkxXHU2YTliXHU2YTlkXHU2YTllXHU2YTlmXHU2''@;'; put 'put ''YWE1XHU2YWFiXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWI0XHU2YWJkXHU2YWJlXHU2YWJmXHU2YWM2XHU2YWM5XHU2YWM4XHU2YWNjXHU2YWQwXHU2YWQ0XHU2YWQ1XHU2YWQ2XHU2YWRjXHU2YWRkXHU2YWU0XHU2YWU3XHU2YWVjXHU2YWYwXHU2YWYxXHU2YWYyXHU2YWZjXHU2YWZkXHU2YjAy''@;'; put 'put ''XHU2YjAzXHU2YjA2XHU2YjA3XHU2YjA5XHU2YjBmXHU2YjEwXHU2YjExXHU2YjE3XHU2YjFiXHU2YjFlXHU2YjI0XHU2YjI4XHU2YjJiXHU2YjJjXHU2YjJmXHU2YjM1XHU2YjM2XHU2YjNiXHU2YjNmXHU2YjQ2XHU2YjRhXHU2YjRkXHU2YjUyXHU2YjU2XHU2YjU4XHU2YjVkXHU2YjYwXHU2''@;'; put 'put ''YjY3XHU2YjZiXHU2YjZlXHU2YjcwXHU2Yjc1XHU2YjdkIl0sWyI4ZmM2YTEiLCJcdTZiN2VcdTZiODJcdTZiODVcdTZiOTdcdTZiOWJcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYThcdTZiYTlcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYjBcdTZiYjhcdTZiYjlcdTZiYmRcdTZiYmVcdTZi''@;'; put 'put ''YzNcdTZiYzRcdTZiYzlcdTZiY2NcdTZiZDZcdTZiZGFcdTZiZTFcdTZiZTNcdTZiZTZcdTZiZTdcdTZiZWVcdTZiZjFcdTZiZjdcdTZiZjlcdTZiZmZcdTZjMDJcdTZjMDRcdTZjMDVcdTZjMDlcdTZjMGRcdTZjMGVcdTZjMTBcdTZjMTJcdTZjMTlcdTZjMWZcdTZjMjZcdTZjMjdcdTZjMjhc''@;'; put 'put ''dTZjMmNcdTZjMmVcdTZjMzNcdTZjMzVcdTZjMzZcdTZjM2FcdTZjM2JcdTZjM2ZcdTZjNGFcdTZjNGJcdTZjNGRcdTZjNGZcdTZjNTJcdTZjNTRcdTZjNTlcdTZjNWJcdTZjNWNcdTZjNmJcdTZjNmRcdTZjNmZcdTZjNzRcdTZjNzZcdTZjNzhcdTZjNzlcdTZjN2JcdTZjODVcdTZjODZcdTZj''@;'; put 'put ''ODdcdTZjODlcdTZjOTRcdTZjOTVcdTZjOTdcdTZjOThcdTZjOWNcdTZjOWZcdTZjYjBcdTZjYjJcdTZjYjRcdTZjYzJcdTZjYzZcdTZjY2RcdTZjY2ZcdTZjZDBcdTZjZDFcdTZjZDJcdTZjZDRcdTZjZDYiXSxbIjhmYzdhMSIsIlx1NmNkYVx1NmNkY1x1NmNlMFx1NmNlN1x1NmNlOVx1NmNl''@;'; put 'put ''Ylx1NmNlY1x1NmNlZVx1NmNmMlx1NmNmNFx1NmQwNFx1NmQwN1x1NmQwYVx1NmQwZVx1NmQwZlx1NmQxMVx1NmQxM1x1NmQxYVx1NmQyNlx1NmQyN1x1NmQyOFx1NmM2N1x1NmQyZVx1NmQyZlx1NmQzMVx1NmQzOVx1NmQzY1x1NmQzZlx1NmQ1N1x1NmQ1ZVx1NmQ1Zlx1NmQ2MVx1NmQ2NVx1''@;'; put 'put ''NmQ2N1x1NmQ2Zlx1NmQ3MFx1NmQ3Y1x1NmQ4Mlx1NmQ4N1x1NmQ5MVx1NmQ5Mlx1NmQ5NFx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmRhYVx1NmRhY1x1NmRiNFx1NmRiN1x1NmRiOVx1NmRiZFx1NmRiZlx1NmRjNFx1NmRjOFx1NmRjYVx1NmRjZVx1NmRjZlx1NmRkNlx1NmRkYlx1NmRkZFx1NmRk''@;'; put 'put ''Zlx1NmRlMFx1NmRlMlx1NmRlNVx1NmRlOVx1NmRlZlx1NmRmMFx1NmRmNFx1NmRmNlx1NmRmY1x1NmUwMFx1NmUwNFx1NmUxZVx1NmUyMlx1NmUyN1x1NmUzMlx1NmUzNlx1NmUzOVx1NmUzYlx1NmUzY1x1NmU0NFx1NmU0NVx1NmU0OFx1NmU0OVx1NmU0Ylx1NmU0Zlx1NmU1MVx1NmU1Mlx1''@;'; put 'put ''NmU1M1x1NmU1NFx1NmU1N1x1NmU1Y1x1NmU1ZFx1NmU1ZSJdLFsiOGZjOGExIiwiXHU2ZTYyXHU2ZTYzXHU2ZTY4XHU2ZTczXHU2ZTdiXHU2ZTdkXHU2ZThkXHU2ZTkzXHU2ZTk5XHU2ZWEwXHU2ZWE3XHU2ZWFkXHU2ZWFlXHU2ZWIxXHU2ZWIzXHU2ZWJiXHU2ZWJmXHU2ZWMwXHU2ZWMxXHU2''@;'; put 'put ''ZWMzXHU2ZWM3XHU2ZWM4XHU2ZWNhXHU2ZWNkXHU2ZWNlXHU2ZWNmXHU2ZWViXHU2ZWVkXHU2ZWVlXHU2ZWY5XHU2ZWZiXHU2ZWZkXHU2ZjA0XHU2ZjA4XHU2ZjBhXHU2ZjBjXHU2ZjBkXHU2ZjE2XHU2ZjE4XHU2ZjFhXHU2ZjFiXHU2ZjI2XHU2ZjI5XHU2ZjJhXHU2ZjJmXHU2ZjMwXHU2ZjMz''@;'; put 'put ''XHU2ZjM2XHU2ZjNiXHU2ZjNjXHU2ZjJkXHU2ZjRmXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjVkXHU2ZjVlXHU2ZjYxXHU2ZjYyXHU2ZjY4XHU2ZjZjXHU2ZjdkXHU2ZjdlXHU2ZjgzXHU2Zjg3XHU2Zjg4XHU2ZjhiXHU2ZjhjXHU2ZjhkXHU2ZjkwXHU2ZjkyXHU2''@;'; put 'put ''ZjkzXHU2Zjk0XHU2Zjk2XHU2ZjlhXHU2ZjlmXHU2ZmEwXHU2ZmE1XHU2ZmE2XHU2ZmE3XHU2ZmE4XHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmI1XHU2ZmI2XHU2ZmJjXHU2ZmM1XHU2ZmM3XHU2ZmM4XHU2ZmNhIl0sWyI4ZmM5YTEiLCJcdTZmZGFcdTZmZGVcdTZmZThcdTZmZTlcdTZmZjBcdTZm''@;'; put 'put ''ZjVcdTZmZjlcdTZmZmNcdTZmZmRcdTcwMDBcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMGRcdTcwMTdcdTcwMjBcdTcwMjNcdTcwMmZcdTcwMzRcdTcwMzdcdTcwMzlcdTcwM2NcdTcwNDNcdTcwNDRcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNTRcdTcwNTVcdTcwNWRcdTcwNWVcdTcwNGVc''@;'; put 'put ''dTcwNjRcdTcwNjVcdTcwNmNcdTcwNmVcdTcwNzVcdTcwNzZcdTcwN2VcdTcwODFcdTcwODVcdTcwODZcdTcwOTQiLDQsIlx1NzA5Ylx1NzBhNFx1NzBhYlx1NzBiMFx1NzBiMVx1NzBiNFx1NzBiN1x1NzBjYVx1NzBkMVx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkOFx1NzBkY1x1NzBl''@;'; put 'put ''NFx1NzBmYVx1NzEwMyIsNCwiXHU3MTBiXHU3MTBjXHU3MTBmXHU3MTFlXHU3MTIwXHU3MTJiXHU3MTJkXHU3MTJmXHU3MTMwXHU3MTMxXHU3MTM4XHU3MTQxXHU3MTQ1XHU3MTQ2XHU3MTQ3XHU3MTRhXHU3MTRiXHU3MTUwXHU3MTUyXHU3MTU3XHU3MTVhXHU3MTVjXHU3MTVlXHU3MTYwIl0s''@;'; put 'put ''WyI4ZmNhYTEiLCJcdTcxNjhcdTcxNzlcdTcxODBcdTcxODVcdTcxODdcdTcxOGNcdTcxOTJcdTcxOWFcdTcxOWJcdTcxYTBcdTcxYTJcdTcxYWZcdTcxYjBcdTcxYjJcdTcxYjNcdTcxYmFcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzRcdTcxY2JcdTcxY2NcdTcxZDNcdTcxZDZcdTcxZDlcdTcx''@;'; put 'put ''ZGFcdTcxZGNcdTcxZjhcdTcxZmVcdTcyMDBcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMTNcdTcyMTdcdTcyMWFcdTcyMWRcdTcyMWZcdTcyMjRcdTcyMmJcdTcyMmZcdTcyMzRcdTcyMzhcdTcyMzlcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDVcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTNcdTcyNTVc''@;'; put 'put ''dTcyNTZcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjhcdTcyNmJcdTcyNmVcdTcyNmZcdTcyNzFcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2ZcdTcyODRcdTcyODlcdTcyOGRcdTcyOGVcdTcyOTNcdTcyOWJcdTcyYThcdTcyYWRcdTcyYWVcdTcyYjFcdTcyYjRcdTcy''@;'; put 'put ''YmVcdTcyYzFcdTcyYzdcdTcyYzlcdTcyY2NcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGZcdTcyZTVcdTcyZjNcdTcyZjRcdTcyZmFcdTcyZmIiXSxbIjhmY2JhMSIsIlx1NzJmZVx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwN1x1NzMwYlx1NzMwZFx1NzMxMlx1NzMxM1x1NzMxOFx1NzMxOVx1NzMx''@;'; put 'put ''ZVx1NzMyMlx1NzMyNFx1NzMyN1x1NzMyOFx1NzMyY1x1NzMzMVx1NzMzMlx1NzMzNVx1NzMzYVx1NzMzYlx1NzMzZFx1NzM0M1x1NzM0ZFx1NzM1MFx1NzM1Mlx1NzM1Nlx1NzM1OFx1NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM2Nlx1NzM2N1x1NzM2OVx1NzM2Ylx1NzM2Y1x1NzM2ZVx1''@;'; put 'put ''NzM2Zlx1NzM3MVx1NzM3N1x1NzM3OVx1NzM3Y1x1NzM4MFx1NzM4MVx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4ZVx1NzM5MFx1NzM5M1x1NzM5NVx1NzM5N1x1NzM5OFx1NzM5Y1x1NzM5ZVx1NzM5Zlx1NzNhMFx1NzNhMlx1NzNhNVx1NzNhNlx1NzNhYVx1NzNhYlx1NzNhZFx1NzNiNVx1NzNi''@;'; put 'put ''N1x1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZlx1NzNjNVx1NzNjNlx1NzNjOVx1NzNjYlx1NzNjY1x1NzNjZlx1NzNkMlx1NzNkM1x1NzNkNlx1NzNkOVx1NzNkZFx1NzNlMVx1NzNlM1x1NzNlNlx1NzNlN1x1NzNlOVx1NzNmNFx1NzNmNVx1NzNmN1x1NzNmOVx1NzNmYVx1NzNmYlx1NzNmZCJd''@;'; put 'put ''LFsiOGZjY2ExIiwiXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDA0XHU3NDA3XHU3NDBhXHU3NDExXHU3NDFhXHU3NDFiXHU3NDI0XHU3NDI2XHU3NDI4Iiw5LCJcdTc0MzlcdTc0NDBcdTc0NDNcdTc0NDRcdTc0NDZcdTc0NDdcdTc0NGJcdTc0NGRcdTc0NTFcdTc0NTJcdTc0NTdcdTc0NWRcdTc0''@;'; put 'put ''NjJcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NmJcdTc0NmRcdTc0NmVcdTc0NzFcdTc0NzJcdTc0ODBcdTc0ODFcdTc0ODVcdTc0ODZcdTc0ODdcdTc0ODlcdTc0OGZcdTc0OTBcdTc0OTFcdTc0OTJcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWNcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTNcdTc0YTZc''@;'; put 'put ''dTc0YThcdTc0YTlcdTc0YWFcdTc0YWJcdTc0YWVcdTc0YWZcdTc0YjFcdTc0YjJcdTc0YjVcdTc0YjlcdTc0YmJcdTc0YmZcdTc0YzhcdTc0YzlcdTc0Y2NcdTc0ZDBcdTc0ZDNcdTc0ZDhcdTc0ZGFcdTc0ZGJcdTc0ZGVcdTc0ZGZcdTc0ZTRcdTc0ZThcdTc0ZWFcdTc0ZWJcdTc0ZWZcdTc0''@;'; put 'put ''ZjRcdTc0ZmFcdTc0ZmJcdTc0ZmNcdTc0ZmZcdTc1MDYiXSxbIjhmY2RhMSIsIlx1NzUxMlx1NzUxNlx1NzUxN1x1NzUyMFx1NzUyMVx1NzUyNFx1NzUyN1x1NzUyOVx1NzUyYVx1NzUyZlx1NzUzNlx1NzUzOVx1NzUzZFx1NzUzZVx1NzUzZlx1NzU0MFx1NzU0M1x1NzU0N1x1NzU0OFx1NzU0''@;'; put 'put ''ZVx1NzU1MFx1NzU1Mlx1NzU1N1x1NzU1ZVx1NzU1Zlx1NzU2MVx1NzU2Zlx1NzU3MVx1NzU3OSIsNSwiXHU3NTgxXHU3NTg1XHU3NTkwXHU3NTkyXHU3NTkzXHU3NTk1XHU3NTk5XHU3NTljXHU3NWEyXHU3NWE0XHU3NWI0XHU3NWJhXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM0XHU3NWM2XHU3''@;'; put 'put ''NWNjXHU3NWNlXHU3NWNmXHU3NWQ3XHU3NWRjXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU0XHU3NWU3XHU3NWVjXHU3NWVlXHU3NWVmXHU3NWYxXHU3NWY5XHU3NjAwXHU3NjAyXHU3NjAzXHU3NjA0XHU3NjA3XHU3NjA4XHU3NjBhXHU3NjBjXHU3NjBmXHU3NjEyXHU3NjEzXHU3NjE1XHU3NjE2''@;'; put 'put ''XHU3NjE5XHU3NjFiXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIzXHU3NjI1XHU3NjI2XHU3NjI5XHU3NjJkXHU3NjMyXHU3NjMzXHU3NjM1XHU3NjM4XHU3NjM5Il0sWyI4ZmNlYTEiLCJcdTc2M2FcdTc2M2NcdTc2NGFcdTc2NDBcdTc2NDFcdTc2NDNcdTc2NDRcdTc2NDVcdTc2NDlcdTc2NGJc''@;'; put 'put ''dTc2NTVcdTc2NTlcdTc2NWZcdTc2NjRcdTc2NjVcdTc2NmRcdTc2NmVcdTc2NmZcdTc2NzFcdTc2NzRcdTc2ODFcdTc2ODVcdTc2OGNcdTc2OGRcdTc2OTVcdTc2OWJcdTc2OWNcdTc2OWRcdTc2OWZcdTc2YTBcdTc2YTIiLDYsIlx1NzZhYVx1NzZhZFx1NzZiZFx1NzZjMVx1NzZjNVx1NzZj''@;'; put 'put ''OVx1NzZjYlx1NzZjY1x1NzZjZVx1NzZkNFx1NzZkOVx1NzZlMFx1NzZlNlx1NzZlOFx1NzZlY1x1NzZmMFx1NzZmMVx1NzZmNlx1NzZmOVx1NzZmY1x1NzcwMFx1NzcwNlx1NzcwYVx1NzcwZVx1NzcxMlx1NzcxNFx1NzcxNVx1NzcxN1x1NzcxOVx1NzcxYVx1NzcxY1x1NzcyMlx1NzcyOFx1''@;'; put 'put ''NzcyZFx1NzcyZVx1NzcyZlx1NzczNFx1NzczNVx1NzczNlx1NzczOVx1NzczZFx1NzczZVx1Nzc0Mlx1Nzc0NVx1Nzc0Nlx1Nzc0YVx1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1Nlx1Nzc1N1x1Nzc1Y1x1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2MiJdLFsiOGZjZmExIiwiXHU3NzY0XHU3''@;'; put 'put ''NzY3XHU3NzZhXHU3NzZjXHU3NzcwXHU3NzcyXHU3NzczXHU3Nzc0XHU3NzdhXHU3NzdkXHU3NzgwXHU3Nzg0XHU3NzhjXHU3NzhkXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3NzlhXHU3NzlmXHU3N2EyXHU3N2E3XHU3N2FhXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2I1XHU3N2JlXHU3N2MzXHU3N2M5''@;'; put 'put ''XHU3N2QxXHU3N2QyXHU3N2Q1XHU3N2Q5XHU3N2RlXHU3N2RmXHU3N2UwXHU3N2U0XHU3N2U2XHU3N2VhXHU3N2VjXHU3N2YwXHU3N2YxXHU3N2Y0XHU3N2Y4XHU3N2ZiXHU3ODA1XHU3ODA2XHU3ODA5XHU3ODBkXHU3ODBlXHU3ODExXHU3ODFkXHU3ODIxXHU3ODIyXHU3ODIzXHU3ODJkXHU3''@;'; put 'put ''ODJlXHU3ODMwXHU3ODM1XHU3ODM3XHU3ODQzXHU3ODQ0XHU3ODQ3XHU3ODQ4XHU3ODRjXHU3ODRlXHU3ODUyXHU3ODVjXHU3ODVlXHU3ODYwXHU3ODYxXHU3ODYzXHU3ODY0XHU3ODY4XHU3ODZhXHU3ODZlXHU3ODdhXHU3ODdlXHU3ODhhXHU3ODhmXHU3ODk0XHU3ODk4XHU3OGExXHU3ODlk''@;'; put 'put ''XHU3ODllXHU3ODlmXHU3OGE0XHU3OGE4XHU3OGFjXHU3OGFkXHU3OGIwXHU3OGIxXHU3OGIyXHU3OGIzIl0sWyI4ZmQwYTEiLCJcdTc4YmJcdTc4YmRcdTc4YmZcdTc4YzdcdTc4YzhcdTc4YzlcdTc4Y2NcdTc4Y2VcdTc4ZDJcdTc4ZDNcdTc4ZDVcdTc4ZDZcdTc4ZTRcdTc4ZGJcdTc4ZGZc''@;'; put 'put ''dTc4ZTBcdTc4ZTFcdTc4ZTZcdTc4ZWFcdTc4ZjJcdTc4ZjNcdTc5MDBcdTc4ZjZcdTc4ZjdcdTc4ZmFcdTc4ZmJcdTc4ZmZcdTc5MDZcdTc5MGNcdTc5MTBcdTc5MWFcdTc5MWNcdTc5MWVcdTc5MWZcdTc5MjBcdTc5MjVcdTc5MjdcdTc5MjlcdTc5MmRcdTc5MzFcdTc5MzRcdTc5MzVcdTc5''@;'; put 'put ''M2JcdTc5M2RcdTc5M2ZcdTc5NDRcdTc5NDVcdTc5NDZcdTc5NGFcdTc5NGJcdTc5NGZcdTc5NTFcdTc5NTRcdTc5NThcdTc5NWJcdTc5NWNcdTc5NjdcdTc5NjlcdTc5NmJcdTc5NzJcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2VcdTc5OGJcdTc5OGNcdTc5OTFcdTc5OTNcdTc5OTRcdTc5OTVc''@;'; put 'put ''dTc5OTZcdTc5OThcdTc5OWJcdTc5OWNcdTc5YTFcdTc5YThcdTc5YTlcdTc5YWJcdTc5YWZcdTc5YjFcdTc5YjRcdTc5YjhcdTc5YmJcdTc5YzJcdTc5YzRcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2ZcdTc5ZDRcdTc5ZDZcdTc5ZGFcdTc5ZGRcdTc5ZGUiXSxbIjhmZDFhMSIsIlx1NzllMFx1''@;'; put 'put ''NzllMlx1NzllNVx1NzllYVx1NzllYlx1NzllZFx1NzlmMVx1NzlmOFx1NzlmY1x1N2EwMlx1N2EwM1x1N2EwN1x1N2EwOVx1N2EwYVx1N2EwY1x1N2ExMVx1N2ExNVx1N2ExYlx1N2ExZVx1N2EyMVx1N2EyN1x1N2EyYlx1N2EyZFx1N2EyZlx1N2EzMFx1N2EzNFx1N2EzNVx1N2EzOFx1N2Ez''@;'; put 'put ''OVx1N2EzYVx1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0Y1x1N2E1NVx1N2E1Nlx1N2E1OVx1N2E1Y1x1N2E1ZFx1N2E1Zlx1N2E2MFx1N2E2NVx1N2E2N1x1N2E2YVx1N2E2ZFx1N2E3NVx1N2E3OFx1N2E3ZVx1N2E4MFx1N2E4Mlx1N2E4NVx1N2E4Nlx1N2E4YVx1N2E4Ylx1N2E5MFx1''@;'; put 'put ''N2E5MVx1N2E5NFx1N2E5ZVx1N2FhMFx1N2FhM1x1N2FhY1x1N2FiM1x1N2FiNVx1N2FiOVx1N2FiYlx1N2FiY1x1N2FjNlx1N2FjOVx1N2FjY1x1N2FjZVx1N2FkMVx1N2FkYlx1N2FlOFx1N2FlOVx1N2FlYlx1N2FlY1x1N2FmMVx1N2FmNFx1N2FmYlx1N2FmZFx1N2FmZVx1N2IwN1x1N2Ix''@;'; put 'put ''NFx1N2IxZlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyYVx1N2IyYlx1N2IyZFx1N2IyZVx1N2IyZlx1N2IzMCJdLFsiOGZkMmExIiwiXHU3YjMxXHU3YjM0XHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQ3XHU3YjRlXHU3YjU1XHU3YjYwXHU3YjY0XHU3YjY2XHU3YjY5XHU3YjZhXHU3YjZk''@;'; put 'put ''XHU3YjZmXHU3YjcyXHU3YjczXHU3Yjc3XHU3Yjg0XHU3Yjg5XHU3YjhlXHU3YjkwXHU3YjkxXHU3Yjk2XHU3YjliXHU3YjllXHU3YmEwXHU3YmE1XHU3YmFjXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmI1XHU3YmI2XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmMyXHU3YmM1XHU3YmM4XHU3''@;'; put 'put ''YmNhXHU3YmQ0XHU3YmQ2XHU3YmQ3XHU3YmQ5XHU3YmRhXHU3YmRiXHU3YmU4XHU3YmVhXHU3YmYyXHU3YmY0XHU3YmY1XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZjXHU3YmZlXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA2XHU3YzA5XHU3YzBiXHU3YzBjXHU3YzBlXHU3YzBmXHU3YzE5''@;'; put 'put ''XHU3YzFiXHU3YzIwXHU3YzI1XHU3YzI2XHU3YzI4XHU3YzJjXHU3YzMxXHU3YzMzXHU3YzM0XHU3YzM2XHU3YzM5XHU3YzNhXHU3YzQ2XHU3YzRhXHU3YzU1XHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU5Iiw1XSxbIjhmZDNhMSIsIlx1N2M2MVx1N2M2M1x1N2M2N1x1N2M2OVx1N2M2ZFx1N2M2''@;'; put 'put ''ZVx1N2M3MFx1N2M3Mlx1N2M3OVx1N2M3Y1x1N2M3ZFx1N2M4Nlx1N2M4N1x1N2M4Zlx1N2M5NFx1N2M5ZVx1N2NhMFx1N2NhNlx1N2NiMFx1N2NiNlx1N2NiN1x1N2NiYVx1N2NiYlx1N2NiY1x1N2NiZlx1N2NjNFx1N2NjN1x1N2NjOFx1N2NjOVx1N2NjZFx1N2NjZlx1N2NkM1x1N2NkNFx1''@;'; put 'put ''N2NkNVx1N2NkN1x1N2NkOVx1N2NkYVx1N2NkZFx1N2NlNlx1N2NlOVx1N2NlYlx1N2NmNVx1N2QwM1x1N2QwN1x1N2QwOFx1N2QwOVx1N2QwZlx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNlx1N2QxZFx1N2QxZVx1N2QyM1x1N2QyNlx1N2QyYVx1N2QyZFx1N2QzMVx1N2QzY1x1N2QzZFx1N2Qz''@;'; put 'put ''ZVx1N2Q0MFx1N2Q0MVx1N2Q0N1x1N2Q0OFx1N2Q0ZFx1N2Q1MVx1N2Q1M1x1N2Q1N1x1N2Q1OVx1N2Q1YVx1N2Q1Y1x1N2Q1ZFx1N2Q2NVx1N2Q2N1x1N2Q2YVx1N2Q3MFx1N2Q3OFx1N2Q3YVx1N2Q3Ylx1N2Q3Zlx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NVx1N2Q4Nlx1N2Q4OFx1N2Q4Ylx1''@;'; put 'put ''N2Q4Y1x1N2Q4ZFx1N2Q5MVx1N2Q5Nlx1N2Q5N1x1N2Q5ZCJdLFsiOGZkNGExIiwiXHU3ZDllXHU3ZGE2XHU3ZGE3XHU3ZGFhXHU3ZGIzXHU3ZGI2XHU3ZGI3XHU3ZGI5XHU3ZGMyIiw0LCJcdTdkY2NcdTdkY2RcdTdkY2VcdTdkZDdcdTdkZDlcdTdlMDBcdTdkZTJcdTdkZTVcdTdkZTZcdTdk''@;'; put 'put ''ZWFcdTdkZWJcdTdkZWRcdTdkZjFcdTdkZjVcdTdkZjZcdTdkZjlcdTdkZmFcdTdlMDhcdTdlMTBcdTdlMTFcdTdlMTVcdTdlMTdcdTdlMWNcdTdlMWRcdTdlMjBcdTdlMjdcdTdlMjhcdTdlMmNcdTdlMmRcdTdlMmZcdTdlMzNcdTdlMzZcdTdlM2ZcdTdlNDRcdTdlNDVcdTdlNDdcdTdlNGVc''@;'; put 'put ''dTdlNTBcdTdlNTJcdTdlNThcdTdlNWZcdTdlNjFcdTdlNjJcdTdlNjVcdTdlNmJcdTdlNmVcdTdlNmZcdTdlNzNcdTdlNzhcdTdlN2VcdTdlODFcdTdlODZcdTdlODdcdTdlOGFcdTdlOGRcdTdlOTFcdTdlOTVcdTdlOThcdTdlOWFcdTdlOWRcdTdlOWVcdTdmM2NcdTdmM2JcdTdmM2RcdTdm''@;'; put 'put ''M2VcdTdmM2ZcdTdmNDNcdTdmNDRcdTdmNDdcdTdmNGZcdTdmNTJcdTdmNTNcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNjFcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNmQiXSxbIjhmZDVhMSIsIlx1N2Y3MVx1N2Y3ZFx1N2Y3ZVx1N2Y3Zlx1N2Y4MFx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5''@;'; put 'put ''MFx1N2Y5MVx1N2Y5Nlx1N2Y5N1x1N2Y5Y1x1N2ZhMVx1N2ZhMlx1N2ZhNlx1N2ZhYVx1N2ZhZFx1N2ZiNFx1N2ZiY1x1N2ZiZlx1N2ZjMFx1N2ZjM1x1N2ZjOFx1N2ZjZVx1N2ZjZlx1N2ZkYlx1N2ZkZlx1N2ZlM1x1N2ZlNVx1N2ZlOFx1N2ZlY1x1N2ZlZVx1N2ZlZlx1N2ZmMlx1N2ZmYVx1''@;'; put 'put ''N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwN1x1ODAwOFx1ODAwYVx1ODAwZFx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxNFx1ODAxNlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMFx1ODAyNFx1ODAyNlx1ODAyY1x1ODAyZVx1ODAzMFx1ODAzNFx1ODAzNVx1ODAzN1x1ODAzOVx1ODAzYVx1ODAz''@;'; put 'put ''Y1x1ODAzZVx1ODA0MFx1ODA0NFx1ODA2MFx1ODA2NFx1ODA2Nlx1ODA2ZFx1ODA3MVx1ODA3NVx1ODA4MVx1ODA4OFx1ODA4ZVx1ODA5Y1x1ODA5ZVx1ODBhNlx1ODBhN1x1ODBhYlx1ODBiOFx1ODBiOVx1ODBjOFx1ODBjZFx1ODBjZlx1ODBkMlx1ODBkNFx1ODBkNVx1ODBkN1x1ODBkOFx1''@;'; put 'put ''ODBlMFx1ODBlZFx1ODBlZSJdLFsiOGZkNmExIiwiXHU4MGYwXHU4MGYyXHU4MGYzXHU4MGY2XHU4MGY5XHU4MGZhXHU4MGZlXHU4MTAzXHU4MTBiXHU4MTE2XHU4MTE3XHU4MTE4XHU4MTFjXHU4MTFlXHU4MTIwXHU4MTI0XHU4MTI3XHU4MTJjXHU4MTMwXHU4MTM1XHU4MTNhXHU4MTNjXHU4''@;'; put 'put ''MTQ1XHU4MTQ3XHU4MTRhXHU4MTRjXHU4MTUyXHU4MTU3XHU4MTYwXHU4MTYxXHU4MTY3XHU4MTY4XHU4MTY5XHU4MTZkXHU4MTZmXHU4MTc3XHU4MTgxXHU4MTkwXHU4MTg0XHU4MTg1XHU4MTg2XHU4MThiXHU4MThlXHU4MTk2XHU4MTk4XHU4MTliXHU4MTllXHU4MWEyXHU4MWFlXHU4MWIy''@;'; put 'put ''XHU4MWI0XHU4MWJiXHU4MWNiXHU4MWMzXHU4MWM1XHU4MWNhXHU4MWNlXHU4MWNmXHU4MWQ1XHU4MWQ3XHU4MWRiXHU4MWRkXHU4MWRlXHU4MWUxXHU4MWU0XHU4MWViXHU4MWVjXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY4XHU4MWY5XHU4MWZkXHU4MWZmXHU4MjAwXHU4''@;'; put 'put ''MjAzXHU4MjBmXHU4MjEzXHU4MjE0XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIxXHU4MjIyXHU4MjI4XHU4MjMyXHU4MjM0XHU4MjNhXHU4MjQzXHU4MjQ0XHU4MjQ1XHU4MjQ2Il0sWyI4ZmQ3YTEiLCJcdTgyNGJcdTgyNGVcdTgyNGZcdTgyNTFcdTgyNTZcdTgyNWNcdTgyNjBcdTgyNjNcdTgy''@;'; put 'put ''NjdcdTgyNmRcdTgyNzRcdTgyN2JcdTgyN2RcdTgyN2ZcdTgyODBcdTgyODFcdTgyODNcdTgyODRcdTgyODdcdTgyODlcdTgyOGFcdTgyOGVcdTgyOTFcdTgyOTRcdTgyOTZcdTgyOThcdTgyOWFcdTgyOWJcdTgyYTBcdTgyYTFcdTgyYTNcdTgyYTRcdTgyYTdcdTgyYThcdTgyYTlcdTgyYWFc''@;'; put 'put ''dTgyYWVcdTgyYjBcdTgyYjJcdTgyYjRcdTgyYjdcdTgyYmFcdTgyYmNcdTgyYmVcdTgyYmZcdTgyYzZcdTgyZDBcdTgyZDVcdTgyZGFcdTgyZTBcdTgyZTJcdTgyZTRcdTgyZThcdTgyZWFcdTgyZWRcdTgyZWZcdTgyZjZcdTgyZjdcdTgyZmRcdTgyZmVcdTgzMDBcdTgzMDFcdTgzMDdcdTgz''@;'; put 'put ''MDhcdTgzMGFcdTgzMGJcdTgzNTRcdTgzMWJcdTgzMWRcdTgzMWVcdTgzMWZcdTgzMjFcdTgzMjJcdTgzMmNcdTgzMmRcdTgzMmVcdTgzMzBcdTgzMzNcdTgzMzdcdTgzM2FcdTgzM2NcdTgzM2RcdTgzNDJcdTgzNDNcdTgzNDRcdTgzNDdcdTgzNGRcdTgzNGVcdTgzNTFcdTgzNTVcdTgzNTZc''@;'; put 'put ''dTgzNTdcdTgzNzBcdTgzNzgiXSxbIjhmZDhhMSIsIlx1ODM3ZFx1ODM3Zlx1ODM4MFx1ODM4Mlx1ODM4NFx1ODM4Nlx1ODM4ZFx1ODM5Mlx1ODM5NFx1ODM5NVx1ODM5OFx1ODM5OVx1ODM5Ylx1ODM5Y1x1ODM5ZFx1ODNhNlx1ODNhN1x1ODNhOVx1ODNhY1x1ODNiZVx1ODNiZlx1ODNjMFx1''@;'; put 'put ''ODNjN1x1ODNjOVx1ODNjZlx1ODNkMFx1ODNkMVx1ODNkNFx1ODNkZFx1ODM1M1x1ODNlOFx1ODNlYVx1ODNmNlx1ODNmOFx1ODNmOVx1ODNmY1x1ODQwMVx1ODQwNlx1ODQwYVx1ODQwZlx1ODQxMVx1ODQxNVx1ODQxOVx1ODNhZFx1ODQyZlx1ODQzOVx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0''@;'; put 'put ''YVx1ODQ0ZFx1ODQ0Zlx1ODQ1MVx1ODQ1Mlx1ODQ1Nlx1ODQ1OFx1ODQ1OVx1ODQ1YVx1ODQ1Y1x1ODQ2MFx1ODQ2NFx1ODQ2NVx1ODQ2N1x1ODQ2YVx1ODQ3MFx1ODQ3M1x1ODQ3NFx1ODQ3Nlx1ODQ3OFx1ODQ3Y1x1ODQ3ZFx1ODQ4MVx1ODQ4NVx1ODQ5Mlx1ODQ5M1x1ODQ5NVx1ODQ5ZVx1''@;'; put 'put ''ODRhNlx1ODRhOFx1ODRhOVx1ODRhYVx1ODRhZlx1ODRiMVx1ODRiNFx1ODRiYVx1ODRiZFx1ODRiZVx1ODRjMFx1ODRjMlx1ODRjN1x1ODRjOFx1ODRjY1x1ODRjZlx1ODRkMyJdLFsiOGZkOWExIiwiXHU4NGRjXHU4NGU3XHU4NGVhXHU4NGVmXHU4NGYwXHU4NGYxXHU4NGYyXHU4NGY3XHU4''@;'; put 'put ''NTMyXHU4NGZhXHU4NGZiXHU4NGZkXHU4NTAyXHU4NTAzXHU4NTA3XHU4NTBjXHU4NTBlXHU4NTEwXHU4NTFjXHU4NTFlXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI3XHU4NTJhXHU4NTJiXHU4NTJmXHU4NTMzXHU4NTM0XHU4NTM2XHU4NTNmXHU4NTQ2XHU4NTRmIiw0LCJcdTg1NTZc''@;'; put 'put ''dTg1NTlcdTg1NWMiLDYsIlx1ODU2NFx1ODU2Ylx1ODU2Zlx1ODU3OVx1ODU3YVx1ODU3Ylx1ODU3ZFx1ODU3Zlx1ODU4MVx1ODU4NVx1ODU4Nlx1ODU4OVx1ODU4Ylx1ODU4Y1x1ODU4Zlx1ODU5M1x1ODU5OFx1ODU5ZFx1ODU5Zlx1ODVhMFx1ODVhMlx1ODVhNVx1ODVhN1x1ODViNFx1ODVi''@;'; put 'put ''Nlx1ODViN1x1ODViOFx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1ODVjMlx1ODVjN1x1ODVjYVx1ODVjYlx1ODVjZVx1ODVhZFx1ODVkOFx1ODVkYVx1ODVkZlx1ODVlMFx1ODVlNlx1ODVlOFx1ODVlZFx1ODVmM1x1ODVmNlx1ODVmYyJdLFsiOGZkYWExIiwiXHU4NWZmXHU4NjAwXHU4NjA0''@;'; put 'put ''XHU4NjA1XHU4NjBkXHU4NjBlXHU4NjEwXHU4NjExXHU4NjEyXHU4NjE4XHU4NjE5XHU4NjFiXHU4NjFlXHU4NjIxXHU4NjI3XHU4NjI5XHU4NjM2XHU4NjM4XHU4NjNhXHU4NjNjXHU4NjNkXHU4NjQwXHU4NjQyXHU4NjQ2XHU4NjUyXHU4NjUzXHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4''@;'; put 'put ''NjVkXHU4NjYwIiw0LCJcdTg2NjlcdTg2NmNcdTg2NmZcdTg2NzVcdTg2NzZcdTg2NzdcdTg2N2FcdTg2OGRcdTg2OTFcdTg2OTZcdTg2OThcdTg2OWFcdTg2OWNcdTg2YTFcdTg2YTZcdTg2YTdcdTg2YThcdTg2YWRcdTg2YjFcdTg2YjNcdTg2YjRcdTg2YjVcdTg2YjdcdTg2YjhcdTg2Yjlc''@;'; put 'put ''dTg2YmZcdTg2YzBcdTg2YzFcdTg2YzNcdTg2YzVcdTg2ZDFcdTg2ZDJcdTg2ZDVcdTg2ZDdcdTg2ZGFcdTg2ZGNcdTg2ZTBcdTg2ZTNcdTg2ZTVcdTg2ZTdcdTg2ODhcdTg2ZmFcdTg2ZmNcdTg2ZmRcdTg3MDRcdTg3MDVcdTg3MDdcdTg3MGJcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTNcdTg3''@;'; put 'put ''MTRcdTg3MTlcdTg3MWVcdTg3MWZcdTg3MjFcdTg3MjMiXSxbIjhmZGJhMSIsIlx1ODcyOFx1ODcyZVx1ODcyZlx1ODczMVx1ODczMlx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODczZVx1ODc0MFx1ODc0M1x1ODc0NVx1ODc0ZFx1ODc1OFx1ODc1ZFx1ODc2MVx1ODc2NFx1ODc2NVx1ODc2''@;'; put 'put ''Zlx1ODc3MVx1ODc3Mlx1ODc3Ylx1ODc4MyIsNiwiXHU4NzhiXHU4NzhjXHU4NzkwXHU4NzkzXHU4Nzk1XHU4Nzk3XHU4Nzk4XHU4Nzk5XHU4NzllXHU4N2EwXHU4N2EzXHU4N2E3XHU4N2FjXHU4N2FkXHU4N2FlXHU4N2IxXHU4N2I1XHU4N2JlXHU4N2JmXHU4N2MxXHU4N2M4XHU4N2M5XHU4''@;'; put 'put ''N2NhXHU4N2NlXHU4N2Q1XHU4N2Q2XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RmXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2VhXHU4N2ViXHU4N2VkXHU4N2YxXHU4N2YzXHU4N2Y4XHU4N2ZhXHU4N2ZmXHU4ODAxXHU4ODAzXHU4ODA2XHU4ODA5XHU4ODBhXHU4ODBiXHU4ODEwXHU4ODE5XHU4ODEy''@;'; put 'put ''XHU4ODEzXHU4ODE0XHU4ODE4XHU4ODFhXHU4ODFiXHU4ODFjXHU4ODFlXHU4ODFmXHU4ODI4XHU4ODJkXHU4ODJlXHU4ODMwXHU4ODMyXHU4ODM1Il0sWyI4ZmRjYTEiLCJcdTg4M2FcdTg4M2NcdTg4NDFcdTg4NDNcdTg4NDVcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NTFc''@;'; put 'put ''dTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWNcdTg4NWZcdTg4NjBcdTg4NjRcdTg4NjlcdTg4NzFcdTg4NzlcdTg4N2JcdTg4ODBcdTg4OThcdTg4OWFcdTg4OWJcdTg4OWNcdTg4OWZcdTg4YTBcdTg4YThcdTg4YWFcdTg4YmFcdTg4YmRcdTg4YmVcdTg4YzBcdTg4Y2EiLDQsIlx1ODhk''@;'; put 'put ''MVx1ODhkMlx1ODhkM1x1ODhkYlx1ODhkZVx1ODhlN1x1ODhlZlx1ODhmMFx1ODhmMVx1ODhmNVx1ODhmN1x1ODkwMVx1ODkwNlx1ODkwZFx1ODkwZVx1ODkwZlx1ODkxNVx1ODkxNlx1ODkxOFx1ODkxOVx1ODkxYVx1ODkxY1x1ODkyMFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkzMFx1ODkzMVx1''@;'; put 'put ''ODkzMlx1ODkzNVx1ODkzOVx1ODkzYVx1ODkzZVx1ODk0MFx1ODk0Mlx1ODk0NVx1ODk0Nlx1ODk0OVx1ODk0Zlx1ODk1Mlx1ODk1N1x1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2Ylx1ODk2ZVx1ODk3MFx1ODk3M1x1ODk3NVx1ODk3YSJdLFsiOGZkZGExIiwiXHU4''@;'; put 'put ''OTdiXHU4OTdjXHU4OTdkXHU4OTg5XHU4OThkXHU4OTkwXHU4OTk0XHU4OTk1XHU4OTliXHU4OTljXHU4OTlmXHU4OWEwXHU4OWE1XHU4OWIwXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWJjXHU4OWQ0Iiw0LCJcdTg5ZTVcdTg5ZTlcdTg5ZWJcdTg5ZWRcdTg5ZjFcdTg5ZjNcdTg5ZjZc''@;'; put 'put ''dTg5ZjlcdTg5ZmRcdTg5ZmZcdThhMDRcdThhMDVcdThhMDdcdThhMGZcdThhMTFcdThhMTJcdThhMTRcdThhMTVcdThhMWVcdThhMjBcdThhMjJcdThhMjRcdThhMjZcdThhMmJcdThhMmNcdThhMmZcdThhMzVcdThhMzdcdThhM2RcdThhM2VcdThhNDBcdThhNDNcdThhNDVcdThhNDdcdThh''@;'; put 'put ''NDlcdThhNGRcdThhNGVcdThhNTNcdThhNTZcdThhNTdcdThhNThcdThhNWNcdThhNWRcdThhNjFcdThhNjVcdThhNjdcdThhNzVcdThhNzZcdThhNzdcdThhNzlcdThhN2FcdThhN2JcdThhN2VcdThhN2ZcdThhODBcdThhODNcdThhODZcdThhOGJcdThhOGZcdThhOTBcdThhOTJcdThhOTZc''@;'; put 'put ''dThhOTdcdThhOTlcdThhOWZcdThhYTdcdThhYTlcdThhYWVcdThhYWZcdThhYjMiXSxbIjhmZGVhMSIsIlx1OGFiNlx1OGFiN1x1OGFiYlx1OGFiZVx1OGFjM1x1OGFjNlx1OGFjOFx1OGFjOVx1OGFjYVx1OGFkMVx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkN1x1OGFkZFx1OGFkZlx1OGFlY1x1''@;'; put 'put ''OGFmMFx1OGFmNFx1OGFmNVx1OGFmNlx1OGFmY1x1OGFmZlx1OGIwNVx1OGIwNlx1OGIwYlx1OGIxMVx1OGIxY1x1OGIxZVx1OGIxZlx1OGIwYVx1OGIyZFx1OGIzMFx1OGIzN1x1OGIzY1x1OGI0MiIsNCwiXHU4YjQ4XHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU5XHU4YjRkXHU4YjVlXHU4YjYz''@;'; put 'put ''XHU4YjZkXHU4Yjc2XHU4Yjc4XHU4Yjc5XHU4YjdjXHU4YjdlXHU4YjgxXHU4Yjg0XHU4Yjg1XHU4YjhiXHU4YjhkXHU4YjhmXHU4Yjk0XHU4Yjk1XHU4YjljXHU4YjllXHU4YjlmXHU4YzM4XHU4YzM5XHU4YzNkXHU4YzNlXHU4YzQ1XHU4YzQ3XHU4YzQ5XHU4YzRiXHU4YzRmXHU4YzUxXHU4''@;'; put 'put ''YzUzXHU4YzU0XHU4YzU3XHU4YzU4XHU4YzViXHU4YzVkXHU4YzU5XHU4YzYzXHU4YzY0XHU4YzY2XHU4YzY4XHU4YzY5XHU4YzZkXHU4YzczXHU4Yzc1XHU4Yzc2XHU4YzdiXHU4YzdlXHU4Yzg2Il0sWyI4ZmRmYTEiLCJcdThjODdcdThjOGJcdThjOTBcdThjOTJcdThjOTNcdThjOTlcdThj''@;'; put 'put ''OWJcdThjOWNcdThjYTRcdThjYjlcdThjYmFcdThjYzVcdThjYzZcdThjYzlcdThjY2JcdThjY2ZcdThjZDZcdThjZDVcdThjZDlcdThjZGRcdThjZTFcdThjZThcdThjZWNcdThjZWZcdThjZjBcdThjZjJcdThjZjVcdThjZjdcdThjZjhcdThjZmVcdThjZmZcdThkMDFcdThkMDNcdThkMDlc''@;'; put 'put ''dThkMTJcdThkMTdcdThkMWJcdThkNjVcdThkNjlcdThkNmNcdThkNmVcdThkN2ZcdThkODJcdThkODRcdThkODhcdThkOGRcdThkOTBcdThkOTFcdThkOTVcdThkOWVcdThkOWZcdThkYTBcdThkYTZcdThkYWJcdThkYWNcdThkYWZcdThkYjJcdThkYjVcdThkYjdcdThkYjlcdThkYmJcdThk''@;'; put 'put ''YzBcdThkYzVcdThkYzZcdThkYzdcdThkYzhcdThkY2FcdThkY2VcdThkZDFcdThkZDRcdThkZDVcdThkZDdcdThkZDlcdThkZTRcdThkZTVcdThkZTdcdThkZWNcdThkZjBcdThkYmNcdThkZjFcdThkZjJcdThkZjRcdThkZmRcdThlMDFcdThlMDRcdThlMDVcdThlMDZcdThlMGJcdThlMTFc''@;'; put 'put ''dThlMTRcdThlMTZcdThlMjBcdThlMjFcdThlMjIiXSxbIjhmZTBhMSIsIlx1OGUyM1x1OGUyNlx1OGUyN1x1OGUzMVx1OGUzM1x1OGUzNlx1OGUzN1x1OGUzOFx1OGUzOVx1OGUzZFx1OGU0MFx1OGU0MVx1OGU0Ylx1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1NFx1OGU1Ylx1OGU1Y1x1OGU1ZFx1''@;'; put 'put ''OGU1ZVx1OGU2MVx1OGU2Mlx1OGU2OVx1OGU2Y1x1OGU2ZFx1OGU2Zlx1OGU3MFx1OGU3MVx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU4Mlx1OGU4M1x1OGU4OVx1OGU5MFx1OGU5Mlx1OGU5NVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5ZVx1OGVhMlx1OGVhN1x1OGVhOVx1OGVhZFx1OGVhZVx1OGVi''@;'; put 'put ''M1x1OGViNVx1OGViYVx1OGViYlx1OGVjMFx1OGVjMVx1OGVjM1x1OGVjNFx1OGVjN1x1OGVjZlx1OGVkMVx1OGVkNFx1OGVkY1x1OGVlOFx1OGVlZVx1OGVmMFx1OGVmMVx1OGVmN1x1OGVmOVx1OGVmYVx1OGVlZFx1OGYwMFx1OGYwMlx1OGYwN1x1OGYwOFx1OGYwZlx1OGYxMFx1OGYxNlx1''@;'; put 'put ''OGYxN1x1OGYxOFx1OGYxZVx1OGYyMFx1OGYyMVx1OGYyM1x1OGYyNVx1OGYyN1x1OGYyOFx1OGYyY1x1OGYyZFx1OGYyZVx1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzYVx1OGY0MFx1OGY0MSJdLFsiOGZlMWExIiwiXHU4ZjQzXHU4ZjQ3XHU4ZjRmXHU4ZjUxIiw0LCJcdThmNThcdThm''@;'; put 'put ''NWRcdThmNWVcdThmNjVcdThmOWRcdThmYTBcdThmYTFcdThmYTRcdThmYTVcdThmYTZcdThmYjVcdThmYjZcdThmYjhcdThmYmVcdThmYzBcdThmYzFcdThmYzZcdThmY2FcdThmY2JcdThmY2RcdThmZDBcdThmZDJcdThmZDNcdThmZDVcdThmZTBcdThmZTNcdThmZTRcdThmZThcdThmZWVc''@;'; put 'put ''dThmZjFcdThmZjVcdThmZjZcdThmZmJcdThmZmVcdTkwMDJcdTkwMDRcdTkwMDhcdTkwMGNcdTkwMThcdTkwMWJcdTkwMjhcdTkwMjlcdTkwMmZcdTkwMmFcdTkwMmNcdTkwMmRcdTkwMzNcdTkwMzRcdTkwMzdcdTkwM2ZcdTkwNDNcdTkwNDRcdTkwNGNcdTkwNWJcdTkwNWRcdTkwNjJcdTkw''@;'; put 'put ''NjZcdTkwNjdcdTkwNmNcdTkwNzBcdTkwNzRcdTkwNzlcdTkwODVcdTkwODhcdTkwOGJcdTkwOGNcdTkwOGVcdTkwOTBcdTkwOTVcdTkwOTdcdTkwOThcdTkwOTlcdTkwOWJcdTkwYTBcdTkwYTFcdTkwYTJcdTkwYTVcdTkwYjBcdTkwYjJcdTkwYjNcdTkwYjRcdTkwYjZcdTkwYmRcdTkwY2Nc''@;'; put 'put ''dTkwYmVcdTkwYzMiXSxbIjhmZTJhMSIsIlx1OTBjNFx1OTBjNVx1OTBjN1x1OTBjOFx1OTBkNVx1OTBkN1x1OTBkOFx1OTBkOVx1OTBkY1x1OTBkZFx1OTBkZlx1OTBlNVx1OTBkMlx1OTBmNlx1OTBlYlx1OTBlZlx1OTBmMFx1OTBmNFx1OTBmZVx1OTBmZlx1OTEwMFx1OTEwNFx1OTEwNVx1''@;'; put 'put ''OTEwNlx1OTEwOFx1OTEwZFx1OTExMFx1OTExNFx1OTExNlx1OTExN1x1OTExOFx1OTExYVx1OTExY1x1OTExZVx1OTEyMFx1OTEyNVx1OTEyMlx1OTEyM1x1OTEyN1x1OTEyOVx1OTEyZVx1OTEyZlx1OTEzMVx1OTEzNFx1OTEzNlx1OTEzN1x1OTEzOVx1OTEzYVx1OTEzY1x1OTEzZFx1OTE0''@;'; put 'put ''M1x1OTE0N1x1OTE0OFx1OTE0Zlx1OTE1M1x1OTE1N1x1OTE1OVx1OTE1YVx1OTE1Ylx1OTE2MVx1OTE2NFx1OTE2N1x1OTE2ZFx1OTE3NFx1OTE3OVx1OTE3YVx1OTE3Ylx1OTE4MVx1OTE4M1x1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4ZVx1OTE5MVx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5OFx1''@;'; put 'put ''OTE5ZVx1OTFhMVx1OTFhNlx1OTFhOFx1OTFhY1x1OTFhZFx1OTFhZVx1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiYlx1OTFiY1x1OTFiZFx1OTFiZiJdLFsiOGZlM2ExIiwiXHU5MWMyXHU5MWMzXHU5MWM1XHU5MWQzXHU5MWQ0XHU5MWQ3XHU5MWQ5XHU5MWRhXHU5MWRlXHU5''@;'; put 'put ''MWU0XHU5MWU1XHU5MWU5XHU5MWVhXHU5MWVjIiw1LCJcdTkxZjdcdTkxZjlcdTkxZmJcdTkxZmRcdTkyMDBcdTkyMDFcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDlcdTkyMGFcdTkyMGNcdTkyMTBcdTkyMTJcdTkyMTNcdTkyMTZcdTkyMThcdTkyMWNcdTkyMWRcdTkyMjNcdTkyMjRc''@;'; put 'put ''dTkyMjVcdTkyMjZcdTkyMjhcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzNcdTkyMzVcdTkyMzZcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2NcdTkyM2VcdTkyNDBcdTkyNDJcdTkyNDNcdTkyNDZcdTkyNDdcdTkyNGFcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTFcdTkyNThcdTkyNTlcdTkyNWNcdTky''@;'; put 'put ''NWRcdTkyNjBcdTkyNjFcdTkyNjVcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzUiLDQsIlx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3Zlx1OTI4OFx1OTI4OVx1OTI4YVx1OTI4ZFx1OTI4ZVx1OTI5Mlx1OTI5NyJdLFsiOGZlNGExIiwiXHU5Mjk5XHU5MjlmXHU5MmEw''@;'; put 'put ''XHU5MmE0XHU5MmE1XHU5MmE3XHU5MmE4XHU5MmFiXHU5MmFmXHU5MmIyXHU5MmI2XHU5MmI4XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJmIiw0LCJcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzhcdTkyY2JcdTkyY2NcdTkyY2RcdTkyY2VcdTkyZDBcdTkyZDNcdTkyZDVcdTkyZDdcdTky''@;'; put 'put ''ZDhcdTkyZDlcdTkyZGNcdTkyZGRcdTkyZGZcdTkyZTBcdTkyZTFcdTkyZTNcdTkyZTVcdTkyZTdcdTkyZThcdTkyZWNcdTkyZWVcdTkyZjBcdTkyZjlcdTkyZmJcdTkyZmZcdTkzMDBcdTkzMDJcdTkzMDhcdTkzMGRcdTkzMTFcdTkzMTRcdTkzMTVcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZc''@;'; put 'put ''dTkzMjFcdTkzMjRcdTkzMjVcdTkzMjdcdTkzMjlcdTkzMmFcdTkzMzNcdTkzMzRcdTkzMzZcdTkzMzdcdTkzNDdcdTkzNDhcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTVcdTkzNTdcdTkzNThcdTkzNWFcdTkzNWVcdTkzNjRcdTkzNjVcdTkzNjdcdTkzNjlcdTkzNmFcdTkzNmRcdTkz''@;'; put 'put ''NmZcdTkzNzBcdTkzNzFcdTkzNzNcdTkzNzRcdTkzNzYiXSxbIjhmZTVhMSIsIlx1OTM3YVx1OTM3ZFx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4OFx1OTM4YVx1OTM4Ylx1OTM4ZFx1OTM4Zlx1OTM5Mlx1OTM5NVx1OTM5OFx1OTM5Ylx1OTM5ZVx1OTNhMVx1OTNhM1x1OTNhNFx1OTNh''@;'; put 'put ''Nlx1OTNhOFx1OTNhYlx1OTNiNFx1OTNiNVx1OTNiNlx1OTNiYVx1OTNhOVx1OTNjMVx1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOSIsNCwiXHU5M2QzXHU5M2Q5XHU5M2RjXHU5M2RlXHU5M2RmXHU5M2UyXHU5M2U2XHU5M2U3XHU5M2Y5XHU5M2Y3XHU5M2Y4XHU5M2ZhXHU5M2ZiXHU5''@;'; put 'put ''M2ZkXHU5NDAxXHU5NDAyXHU5NDA0XHU5NDA4XHU5NDA5XHU5NDBkXHU5NDBlXHU5NDBmXHU5NDE1XHU5NDE2XHU5NDE3XHU5NDFmXHU5NDJlXHU5NDJmXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDNiXHU5NDNmXHU5NDNkXHU5NDQzXHU5NDQ1XHU5NDQ4XHU5NDRhXHU5NDRjXHU5NDU1''@;'; put 'put ''XHU5NDU5XHU5NDVjXHU5NDVmXHU5NDYxXHU5NDYzXHU5NDY4XHU5NDZiXHU5NDZkXHU5NDZlXHU5NDZmXHU5NDcxXHU5NDcyXHU5NDg0XHU5NDgzXHU5NTc4XHU5NTc5Il0sWyI4ZmU2YTEiLCJcdTk1N2VcdTk1ODRcdTk1ODhcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OWRcdTk1OWVcdTk1OWZc''@;'; put 'put ''dTk1YTFcdTk1YTZcdTk1YTlcdTk1YWJcdTk1YWNcdTk1YjRcdTk1YjZcdTk1YmFcdTk1YmRcdTk1YmZcdTk1YzZcdTk1YzhcdTk1YzlcdTk1Y2JcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNcdTk1ZDlcdTk1ZGFcdTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTRcdTk1ZTZcdTk2MWRcdTk2''@;'; put 'put ''MWVcdTk2MjJcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MmNcdTk2MzFcdTk2MzNcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2NcdTk2M2RcdTk2NDFcdTk2NTJcdTk2NTRcdTk2NTZcdTk2NTdcdTk2NThcdTk2NjFcdTk2NmVcdTk2NzRcdTk2N2JcdTk2N2NcdTk2N2VcdTk2N2ZcdTk2ODFc''@;'; put 'put ''dTk2ODJcdTk2ODNcdTk2ODRcdTk2ODlcdTk2OTFcdTk2OTZcdTk2OWFcdTk2OWRcdTk2OWZcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YTlcdTk2YWVcdTk2YWZcdTk2YjNcdTk2YmFcdTk2Y2FcdTk2ZDJcdTVkYjJcdTk2ZDhcdTk2ZGFcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTlcdTk2ZWZcdTk2''@;'; put 'put ''ZjFcdTk2ZmFcdTk3MDIiXSxbIjhmZTdhMSIsIlx1OTcwM1x1OTcwNVx1OTcwOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyOFx1OTczMVx1OTczM1x1OTc0MVx1OTc0M1x1OTc0YVx1OTc0ZVx1OTc0Zlx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Ylx1OTc2''@;'; put 'put ''M1x1OTc2N1x1OTc2YVx1OTc2ZVx1OTc3M1x1OTc3Nlx1OTc3N1x1OTc3OFx1OTc3Ylx1OTc3ZFx1OTc3Zlx1OTc4MFx1OTc4OVx1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5ZVx1OTc5Zlx1OTdhMlx1OTdhY1x1OTdhZVx1OTdiMVx1OTdiMlx1OTdiNVx1OTdiNlx1OTdiOFx1''@;'; put 'put ''OTdiOVx1OTdiYVx1OTdiY1x1OTdiZVx1OTdiZlx1OTdjMVx1OTdjNFx1OTdjNVx1OTdjN1x1OTdjOVx1OTdjYVx1OTdjY1x1OTdjZFx1OTdjZVx1OTdkMFx1OTdkMVx1OTdkNFx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkZFx1OTdkZVx1OTdlMFx1OTdkYlx1OTdlMVx1OTdlNFx1OTdlZlx1OTdm''@;'; put 'put ''MVx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmYVx1OTgwN1x1OTgwYVx1OTgxOVx1OTgwZFx1OTgwZVx1OTgxNFx1OTgxNlx1OTgxY1x1OTgxZVx1OTgyMFx1OTgyM1x1OTgyNiJdLFsiOGZlOGExIiwiXHU5ODJiXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMyXHU5ODMzXHU5ODM1XHU5ODI1XHU5ODNl''@;'; put 'put ''XHU5ODQ0XHU5ODQ3XHU5ODRhXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU2XHU5ODU3XHU5ODU5XHU5ODVhXHU5ODYyXHU5ODYzXHU5ODY1XHU5ODY2XHU5ODZhXHU5ODZjXHU5OGFiXHU5OGFkXHU5OGFlXHU5OGIwXHU5OGI0XHU5OGI3XHU5OGI4XHU5OGJhXHU5OGJiXHU5OGJmXHU5OGMyXHU5''@;'; put 'put ''OGM1XHU5OGM4XHU5OGNjXHU5OGUxXHU5OGUzXHU5OGU1XHU5OGU2XHU5OGU3XHU5OGVhXHU5OGYzXHU5OGY2XHU5OTAyXHU5OTA3XHU5OTA4XHU5OTExXHU5OTE1XHU5OTE2XHU5OTE3XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFmXHU5OTIyXHU5OTI2XHU5OTI3XHU5OTJiXHU5OTMxIiw0LCJc''@;'; put 'put ''dTk5MzlcdTk5M2FcdTk5M2JcdTk5M2NcdTk5NDBcdTk5NDFcdTk5NDZcdTk5NDdcdTk5NDhcdTk5NGRcdTk5NGVcdTk5NTRcdTk5NThcdTk5NTlcdTk5NWJcdTk5NWNcdTk5NWVcdTk5NWZcdTk5NjBcdTk5OWJcdTk5OWRcdTk5OWZcdTk5YTZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjUiXSxb''@;'; put 'put ''IjhmZTlhMSIsIlx1OTliOVx1OTliYVx1OTliZFx1OTliZlx1OTljM1x1OTljOVx1OTlkM1x1OTlkNFx1OTlkOVx1OTlkYVx1OTlkY1x1OTlkZVx1OTllN1x1OTllYVx1OTllYlx1OTllY1x1OTlmMFx1OTlmNFx1OTlmNVx1OTlmOVx1OTlmZFx1OTlmZVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEw''@;'; put 'put ''Ylx1OWEwY1x1OWExMFx1OWExMVx1OWExNlx1OWExZVx1OWEyMFx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyN1x1OWEyZFx1OWEyZVx1OWEzM1x1OWEzNVx1OWEzNlx1OWEzOFx1OWE0N1x1OWE0MVx1OWE0NFx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZVx1OWE1MVx1OWE1NFx1OWE1Nlx1OWE1ZFx1''@;'; put 'put ''OWFhYVx1OWFhY1x1OWFhZVx1OWFhZlx1OWFiMlx1OWFiNFx1OWFiNVx1OWFiNlx1OWFiOVx1OWFiYlx1OWFiZVx1OWFiZlx1OWFjMVx1OWFjM1x1OWFjNlx1OWFjOFx1OWFjZVx1OWFkMFx1OWFkMlx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkYlx1OWFkY1x1OWFlMFx1OWFlNFx1OWFlNVx1OWFl''@;'; put 'put ''N1x1OWFlOVx1OWFlY1x1OWFmMlx1OWFmM1x1OWFmNVx1OWFmOVx1OWFmYVx1OWFmZFx1OWFmZiIsNF0sWyI4ZmVhYTEiLCJcdTliMDRcdTliMDVcdTliMDhcdTliMDlcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTJcdTliMTZcdTliMTlcdTliMWJcdTliMWNcdTliMjBcdTli''@;'; put 'put ''MjZcdTliMmJcdTliMmRcdTliMzNcdTliMzRcdTliMzVcdTliMzdcdTliMzlcdTliM2FcdTliM2RcdTliNDhcdTliNGJcdTliNGNcdTliNTVcdTliNTZcdTliNTdcdTliNWJcdTliNWVcdTliNjFcdTliNjNcdTliNjVcdTliNjZcdTliNjhcdTliNmEiLDQsIlx1OWI3M1x1OWI3NVx1OWI3N1x1''@;'; put 'put ''OWI3OFx1OWI3OVx1OWI3Zlx1OWI4MFx1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4ZFx1OWI4Zlx1OWI5MFx1OWI5NFx1OWI5YVx1OWI5ZFx1OWI5ZVx1OWJhNlx1OWJhN1x1OWJhOVx1OWJhY1x1OWJiMFx1OWJiMVx1OWJiMlx1OWJiN1x1OWJiOFx1OWJi''@;'; put 'put ''Ylx1OWJiY1x1OWJiZVx1OWJiZlx1OWJjMVx1OWJjN1x1OWJjOFx1OWJjZVx1OWJkMFx1OWJkN1x1OWJkOFx1OWJkZFx1OWJkZlx1OWJlNVx1OWJlN1x1OWJlYVx1OWJlYlx1OWJlZlx1OWJmM1x1OWJmN1x1OWJmOCJdLFsiOGZlYmExIiwiXHU5YmY5XHU5YmZhXHU5YmZkXHU5YmZmXHU5YzAw''@;'; put 'put ''XHU5YzAyXHU5YzBiXHU5YzBmXHU5YzExXHU5YzE2XHU5YzE4XHU5YzE5XHU5YzFhXHU5YzFjXHU5YzFlXHU5YzIyXHU5YzIzXHU5YzI2Iiw0LCJcdTljMzFcdTljMzVcdTljMzZcdTljMzdcdTljM2RcdTljNDFcdTljNDNcdTljNDRcdTljNDVcdTljNDlcdTljNGFcdTljNGVcdTljNGZcdTlj''@;'; put 'put ''NTBcdTljNTNcdTljNTRcdTljNTZcdTljNThcdTljNWJcdTljNWRcdTljNWVcdTljNWZcdTljNjNcdTljNjlcdTljNmFcdTljNWNcdTljNmJcdTljNjhcdTljNmVcdTljNzBcdTljNzJcdTljNzVcdTljNzdcdTljN2JcdTljZTZcdTljZjJcdTljZjdcdTljZjlcdTlkMGJcdTlkMDJcdTlkMTFc''@;'; put 'put ''dTlkMTdcdTlkMThcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMmZcdTlkMzBcdTlkMzJcdTlkMzNcdTlkMzRcdTlkM2FcdTlkM2NcdTlkNDVcdTlkM2RcdTlkNDJcdTlkNDNcdTlkNDdcdTlkNGFcdTlkNTNcdTlkNTRcdTlkNWZcdTlkNjNcdTlkNjJcdTlkNjVcdTlkNjlcdTlkNmFcdTlkNmJcdTlk''@;'; put 'put ''NzBcdTlkNzZcdTlkNzdcdTlkN2IiXSxbIjhmZWNhMSIsIlx1OWQ3Y1x1OWQ3ZVx1OWQ4M1x1OWQ4NFx1OWQ4Nlx1OWQ4YVx1OWQ4ZFx1OWQ4ZVx1OWQ5Mlx1OWQ5M1x1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWRhMVx1OWRhYVx1OWRhY1x1OWRhZVx1OWRiMVx1OWRiNVx1OWRiOVx1OWRi''@;'; put 'put ''Y1x1OWRiZlx1OWRjM1x1OWRjN1x1OWRjOVx1OWRjYVx1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkYVx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlNVx1OWRlN1x1OWRlOVx1OWRlYlx1OWRlZVx1OWRmMFx1OWRmM1x1OWRmNFx1OWRmZVx1OWUwYVx1OWUwMlx1OWUwN1x1OWUwZVx1OWUxMFx1''@;'; put 'put ''OWUxMVx1OWUxMlx1OWUxNVx1OWUxNlx1OWUxOVx1OWUxY1x1OWUxZFx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU4MFx1OWU4Mlx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4N1x1OWU4ZVx1OWU4Zlx1OWU5Nlx1OWU5OFx1OWU5Ylx1OWU5ZVx1OWVhNFx1OWVhOFx1OWVhY1x1OWVhZVx1OWVhZlx1OWVi''@;'; put 'put ''MFx1OWViM1x1OWViNFx1OWViNVx1OWVjNlx1OWVjOFx1OWVjYlx1OWVkNVx1OWVkZlx1OWVlNFx1OWVlN1x1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmNSJdLFsiOGZlZGExIiwiXHU5ZWY4XHU5ZWZmXHU5ZjAyXHU5ZjAzXHU5ZjA5XHU5ZjBmXHU5ZjEwXHU5ZjEx''@;'; put 'put ''XHU5ZjEyXHU5ZjE0XHU5ZjE2XHU5ZjE3XHU5ZjE5XHU5ZjFhXHU5ZjFiXHU5ZjFmXHU5ZjIyXHU5ZjI2XHU5ZjJhXHU5ZjJiXHU5ZjJmXHU5ZjMxXHU5ZjMyXHU5ZjM0XHU5ZjM3XHU5ZjM5XHU5ZjNhXHU5ZjNjXHU5ZjNkXHU5ZjNmXHU5ZjQxXHU5ZjQzIiw0LCJcdTlmNTNcdTlmNTVcdTlm''@;'; put 'put ''NTZcdTlmNTdcdTlmNThcdTlmNWFcdTlmNWRcdTlmNWVcdTlmNjhcdTlmNjlcdTlmNmQiLDQsIlx1OWY3M1x1OWY3NVx1OWY3YVx1OWY3ZFx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5NFx1OWY5Nlx1OWY5N1x1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNSJdXScpfSw5OTEyOSh0''@;'; put 'put ''ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJ1Q2hhcnMiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQsMzAwLDMyNSwzMjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3''@;'; put 'put ''LDUwNiw1OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5MzgsOTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1NCw4NDU4LDg0NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIy''@;'; put 'put ''LDg3MjYsODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0OCw5NTg4LDk2MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAy''@;'; put 'put ''LDk3MzUsOTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDksMTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIzMTksMTIzMzAsMTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIs''@;'; put 'put ''MTI4NTAsMTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMyNTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQsMTUxODMsMTU0NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTcz''@;'; put 'put ''NzQsMTc2MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgsMTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4ODcsNDA4NzAsNTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEs''@;'; put 'put ''NTk0MzcsNTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQsNjUwOTMsNjUxMDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLCJn''@;'; put 'put ''YkNoYXJzIjpbMCwzNiwzOCw0NSw1MCw4MSw4OSw5NSw5NiwxMDAsMTAzLDEwNCwxMDUsMTA5LDEyNiwxMzMsMTQ4LDE3MiwxNzUsMTc5LDIwOCwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDM0MSw0MjgsNDQzLDU0NCw1NDUsNTU4LDc0MSw3NDIsNzQ5LDc1MCw4MDUsODE5LDgy''@;'; put 'put ''MCw3OTIyLDc5MjQsNzkyNSw3OTI3LDc5MzQsNzk0Myw3OTQ0LDc5NDUsNzk1MCw4MDYyLDgxNDgsODE0OSw4MTUyLDgxNjQsODE3NCw4MjM2LDgyNDAsODI2Miw4MjY0LDgzNzQsODM4MCw4MzgxLDgzODQsODM4OCw4MzkwLDgzOTIsODM5Myw4Mzk0LDgzOTYsODQwMSw4NDA2LDg0MTYsODQx''@;'; put 'put ''OSw4NDI0LDg0MzcsODQzOSw4NDQ1LDg0ODIsODQ4NSw4NDk2LDg1MjEsODYwMyw4OTM2LDg5NDYsOTA0Niw5MDUwLDkwNjMsOTA2Niw5MDc2LDkwOTIsOTEwMCw5MTA4LDkxMTEsOTExMyw5MTMxLDkxNjIsOTE2NCw5MjE4LDkyMTksMTEzMjksMTEzMzEsMTEzMzQsMTEzMzYsMTEzNDYsMTEz''@;'; put 'put ''NjEsMTEzNjMsMTEzNjYsMTEzNzAsMTEzNzIsMTEzNzUsMTEzODksMTE2ODIsMTE2ODYsMTE2ODcsMTE2OTIsMTE2OTQsMTE3MTQsMTE3MTYsMTE3MjMsMTE3MjUsMTE3MzAsMTE3MzYsMTE5ODIsMTE5ODksMTIxMDIsMTIzMzYsMTIzNDgsMTIzNTAsMTIzODQsMTIzOTMsMTIzOTUsMTIzOTcs''@;'; put 'put ''MTI1MTAsMTI1NTMsMTI4NTEsMTI5NjIsMTI5NzMsMTM3MzgsMTM4MjMsMTM5MTksMTM5MzMsMTQwODAsMTQyOTgsMTQ1ODUsMTQ2OTgsMTU1ODMsMTU4NDcsMTYzMTgsMTY0MzQsMTY0MzgsMTY0ODEsMTY3MjksMTcxMDIsMTcxMjIsMTczMTUsMTczMjAsMTc0MDIsMTc0MTgsMTc4NTksMTc5''@;'; put 'put ''MDksMTc5MTEsMTc5MTUsMTc5MTYsMTc5MzYsMTc5MzksMTc5NjEsMTg2NjQsMTg3MDMsMTg4MTQsMTg5NjIsMTkwNDMsMzM0NjksMzM0NzAsMzM0NzEsMzM0ODQsMzM0ODUsMzM0OTAsMzM0OTcsMzM1MDEsMzM1MDUsMzM1MTMsMzM1MjAsMzM1MzYsMzM1NTAsMzc4NDUsMzc5MjEsMzc5NDgs''@;'; put 'put ''MzgwMjksMzgwMzgsMzgwNjQsMzgwNjUsMzgwNjYsMzgwNjksMzgwNzUsMzgwNzYsMzgwNzgsMzkxMDgsMzkxMDksMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkyNjUsMzkzOTQsMTg5MDAwXX0nKX0sNTU5MTQodGUpeyJ1c2Ugc3RyaWN0Ijt0ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbImEx''@;'; put 'put ''NDAiLCJcdWU0YzYiLDYyXSxbImExODAiLCJcdWU1MDUiLDMyXSxbImEyNDAiLCJcdWU1MjYiLDYyXSxbImEyODAiLCJcdWU1NjUiLDMyXSxbImEyYWIiLCJcdWU3NjYiLDVdLFsiYTJlMyIsIlx1MjBhY1x1ZTc2ZCJdLFsiYTJlZiIsIlx1ZTc2ZVx1ZTc2ZiJdLFsiYTJmZCIsIlx1ZTc3MFx1''@;'; put 'put ''ZTc3MSJdLFsiYTM0MCIsIlx1ZTU4NiIsNjJdLFsiYTM4MCIsIlx1ZTVjNSIsMzEsIlx1MzAwMCJdLFsiYTQ0MCIsIlx1ZTVlNiIsNjJdLFsiYTQ4MCIsIlx1ZTYyNSIsMzJdLFsiYTRmNCIsIlx1ZTc3MiIsMTBdLFsiYTU0MCIsIlx1ZTY0NiIsNjJdLFsiYTU4MCIsIlx1ZTY4NSIsMzJdLFsi''@;'; put 'put ''YTVmNyIsIlx1ZTc3ZCIsN10sWyJhNjQwIiwiXHVlNmE2Iiw2Ml0sWyJhNjgwIiwiXHVlNmU1IiwzMl0sWyJhNmI5IiwiXHVlNzg1Iiw3XSxbImE2ZDkiLCJcdWU3OGQiLDZdLFsiYTZlYyIsIlx1ZTc5NFx1ZTc5NSJdLFsiYTZmMyIsIlx1ZTc5NiJdLFsiYTZmNiIsIlx1ZTc5NyIsOF0sWyJh''@;'; put 'put ''NzQwIiwiXHVlNzA2Iiw2Ml0sWyJhNzgwIiwiXHVlNzQ1IiwzMl0sWyJhN2MyIiwiXHVlN2EwIiwxNF0sWyJhN2YyIiwiXHVlN2FmIiwxMl0sWyJhODk2IiwiXHVlN2JjIiwxMF0sWyJhOGJjIiwiXHVlN2M3Il0sWyJhOGJmIiwiXHUwMWY5Il0sWyJhOGMxIiwiXHVlN2M5XHVlN2NhXHVlN2Ni''@;'; put 'put ''XHVlN2NjIl0sWyJhOGVhIiwiXHVlN2NkIiwyMF0sWyJhOTU4IiwiXHVlN2UyIl0sWyJhOTViIiwiXHVlN2UzIl0sWyJhOTVkIiwiXHVlN2U0XHVlN2U1XHVlN2U2Il0sWyJhOTg5IiwiXHUzMDNlXHUyZmYwIiwxMV0sWyJhOTk3IiwiXHVlN2Y0IiwxMl0sWyJhOWYwIiwiXHVlODAxIiwxNF0s''@;'; put 'put ''WyJhYWExIiwiXHVlMDAwIiw5M10sWyJhYmExIiwiXHVlMDVlIiw5M10sWyJhY2ExIiwiXHVlMGJjIiw5M10sWyJhZGExIiwiXHVlMTFhIiw5M10sWyJhZWExIiwiXHVlMTc4Iiw5M10sWyJhZmExIiwiXHVlMWQ2Iiw5M10sWyJkN2ZhIiwiXHVlODEwIiw0XSxbImY4YTEiLCJcdWUyMzQiLDkz''@;'; put 'put ''XSxbImY5YTEiLCJcdWUyOTIiLDkzXSxbImZhYTEiLCJcdWUyZjAiLDkzXSxbImZiYTEiLCJcdWUzNGUiLDkzXSxbImZjYTEiLCJcdWUzYWMiLDkzXSxbImZkYTEiLCJcdWU0MGEiLDkzXSxbImZlNTAiLCJcdTJlODFcdWU4MTZcdWU4MTdcdWU4MThcdTJlODRcdTM0NzNcdTM0NDdcdTJlODhc''@;'; put 'put ''dTJlOGJcdWU4MWVcdTM1OWVcdTM2MWFcdTM2MGVcdTJlOGNcdTJlOTdcdTM5NmVcdTM5MThcdWU4MjZcdTM5Y2ZcdTM5ZGZcdTNhNzNcdTM5ZDBcdWU4MmJcdWU4MmNcdTNiNGVcdTNjNmVcdTNjZTBcdTJlYTdcdWU4MzFcdWU4MzJcdTJlYWFcdTQwNTZcdTQxNWZcdTJlYWVcdTQzMzdcdTJl''@;'; put 'put ''YjNcdTJlYjZcdTJlYjdcdWU4M2JcdTQzYjFcdTQzYWNcdTJlYmJcdTQzZGRcdTQ0ZDZcdTQ2NjFcdTQ2NGNcdWU4NDMiXSxbImZlODAiLCJcdTQ3MjNcdTQ3MjlcdTQ3N2NcdTQ3OGRcdTJlY2FcdTQ5NDdcdTQ5N2FcdTQ5N2RcdTQ5ODJcdTQ5ODNcdTQ5ODVcdTQ5ODZcdTQ5OWZcdTQ5OWJc''@;'; put 'put ''dTQ5YjdcdTQ5YjZcdWU4NTRcdWU4NTVcdTRjYTNcdTRjOWZcdTRjYTBcdTRjYTFcdTRjNzdcdTRjYTJcdTRkMTMiLDYsIlx1NGRhZVx1ZTg2NFx1ZTQ2OCIsOTNdXScpfSw0MDY3OSh0ZSl7InVzZSBzdHJpY3QiO3RlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyOF0s''@;'; put 'put ''WyJhMSIsIlx1ZmY2MSIsNjJdLFsiODE0MCIsIlx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0''@;'; put 'put ''ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJc''@;'; put 'put ''dWZmMGJcdWZmMGRceGIxXHhkNyJdLFsiODE4MCIsIlx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBh''@;'; put 'put ''XHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiODFiOCIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4''@;'; put 'put ''N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiODFjOCIsIlx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiODFkYSIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1''@;'; put 'put ''MjIzNVx1MjIyYlx1MjIyYyJdLFsiODFmMCIsIlx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbIjgxZmMiLCJcdTI1ZWYiXSxbIjgyNGYiLCJcdWZmMTAiLDldLFsiODI2MCIsIlx1ZmYyMSIsMjVdLFsiODI4MSIsIlx1ZmY0MSIsMjVdLFsiODI5ZiIs''@;'; put 'put ''Ilx1MzA0MSIsODJdLFsiODM0MCIsIlx1MzBhMSIsNjJdLFsiODM4MCIsIlx1MzBlMCIsMjJdLFsiODM5ZiIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyI4M2JmIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbIjg0NDAiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiODQ3MCIs''@;'; put 'put ''Ilx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2Iiw3XSxbIjg0ODAiLCJcdTA0M2UiLDE3XSxbIjg0OWYiLCJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1''@;'; put 'put ''MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDIiXSxbIjg3NDAiLCJcdTI0NjAiLDE5LCJcdTIxNjAiLDldLFsiODc1ZiIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMy''@;'; put 'put ''N1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiODc3ZSIsIlx1MzM3YiJdLFsiODc4MCIsIlx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1''@;'; put 'put ''MzJhNCIsNCwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhIl0sWyI4ODlmIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMw''@;'; put 'put ''XHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4''@;'; put 'put ''OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZi''@;'; put 'put ''XHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1''@;'; put 'put ''NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkIl0sWyI4OTQwIiwiXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4''@;'; put 'put ''XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3''@;'; put 'put ''YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2Il0sWyI4OTgwIiwiXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2Jm''@;'; put 'put ''XHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3''@;'; put 'put ''MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmEx''@;'; put 'put ''XHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4''@;'; put 'put ''YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJh''@;'; put 'put ''XHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5Il0sWyI4YTQwIiwiXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2''@;'; put 'put ''MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZi''@;'; put 'put ''XHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiIl0sWyI4YTgwIiwiXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2''@;'; put 'put ''ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0Zjgz''@;'; put 'put ''XHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2''@;'; put 'put ''Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4''@;'; put 'put ''XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2''@;'; put 'put ''NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0Il0sWyI4YjQwIiwiXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNj''@;'; put 'put ''XHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5''@;'; put 'put ''ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxIl0sWyI4YjgwIiwiXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFh''@;'; put 'put ''XHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1''@;'; put 'put ''MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3''@;'; put 'put ''XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4''@;'; put 'put ''ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1''@;'; put 'put ''XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4Il0sWyI4YzQwIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1''@;'; put 'put ''MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRj''@;'; put 'put ''XHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4Il0sWyI4YzgwIiwiXHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3''@;'; put 'put ''YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZm''@;'; put 'put ''XHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0''@;'; put 'put ''ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0''@;'; put 'put ''XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1''@;'; put 'put ''MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExIl0sWyI4ZDQwIiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3''@;'; put 'put ''XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4''@;'; put 'put ''MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkIl0sWyI4ZDgwIiwiXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUw''@;'; put 'put ''XHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2''@;'; put 'put ''MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJi''@;'; put 'put ''XHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1''@;'; put 'put ''NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFk''@;'; put 'put ''XHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3Il0sWyI4ZTQwIiwiXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2''@;'; put 'put ''NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZm''@;'; put 'put ''XHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyIl0sWyI4ZTgwIiwiXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4''@;'; put 'put ''OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNh''@;'; put 'put ''XHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3''@;'; put 'put ''YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1''@;'; put 'put ''XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5''@;'; put 'put ''NzAwXHU1NmRhXHU1M2NlXHU1NDY4Il0sWyI4ZjQwIiwiXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRi''@;'; put 'put ''XHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4''@;'; put 'put ''ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzIl0sWyI4ZjgwIiwiXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2Njkx''@;'; put 'put ''XHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1''@;'; put 'put ''OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5''@;'; put 'put ''XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5''@;'; put 'put ''MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIw''@;'; put 'put ''XHU1NjMxXHU1N2Y0XHU5OGZlIl0sWyI5MDQwIiwiXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2''@;'; put 'put ''NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBi''@;'; put 'put ''XHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4Il0sWyI5MDgwIiwiXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5''@;'; put 'put ''MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2''@;'; put 'put ''XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5''@;'; put 'put ''NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgz''@;'; put 'put ''XHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3''@;'; put 'put ''YTdmXHU3YmFkXHU3ZGRhIl0sWyI5MTQwIiwiXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIz''@;'; put 'put ''XHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1''@;'; put 'put ''NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiIl0sWyI5MTgwIiwiXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2Rm''@;'; put 'put ''XHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2''@;'; put 'put ''MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1''@;'; put 'put ''XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5''@;'; put 'put ''MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3''@;'; put 'put ''XHU4NmY4XHU1M2VhIl0sWyI5MjQwIiwiXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2''@;'; put 'put ''ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYw''@;'; put 'put ''XHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0Il0sWyI5MjgwIiwiXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2''@;'; put 'put ''Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEy''@;'; put 'put ''XHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1''@;'; put 'put ''ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0''@;'; put 'put ''XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4''@;'; put 'put ''ZTQ0XHU5MDEzIl0sWyI5MzQwIiwiXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1''@;'; put 'put ''XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5''@;'; put 'put ''MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjIl0sWyI5MzgwIiwiXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQz''@;'; put 'put ''XHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5''@;'; put 'put ''Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0''@;'; put 'put ''XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1''@;'; put 'put ''MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTcz''@;'; put 'put ''XHU1MTY1Il0sWyI5NDQwIiwiXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1''@;'; put 'put ''NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3''@;'; put 'put ''XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1Il0sWyI5NDgwIiwiXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1''@;'; put 'put ''MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYw''@;'; put 'put ''XHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3''@;'; put 'put ''MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5''@;'; put 'put ''XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3''@;'; put 'put ''ZjhlIl0sWyI5NTQwIiwiXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3''@;'; put 'put ''XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0''@;'; put 'put ''ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3Il0sWyI5NTgwIiwiXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFl''@;'; put 'put ''XHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1''@;'; put 'put ''MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAx''@;'; put 'put ''XHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3''@;'; put 'put ''NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBi''@;'; put 'put ''Il0sWyI5NjQwIiwiXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1''@;'; put 'put ''ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2''@;'; put 'put ''XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2Il0sWyI5NjgwIiwiXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2''@;'; put 'put ''N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQx''@;'; put 'put ''XHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1''@;'; put 'put ''MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2Iw''@;'; put 'put ''XHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0s''@;'; put 'put ''WyI5NzQwIiwiXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0''@;'; put 'put ''XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4''@;'; put 'put ''NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyIl0sWyI5NzgwIiwiXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZh''@;'; put 'put ''XHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1''@;'; put 'put ''Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3''@;'; put 'put ''XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1''@;'; put 'put ''MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyI5''@;'; put 'put ''ODQwIiwiXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1''@;'; put 'put ''MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyI5ODlmIiwiXHU1ZjBj''@;'; put 'put ''XHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0''@;'; put 'put ''ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRm''@;'; put 'put ''XHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1''@;'; put 'put ''MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyIl0sWyI5OTQwIiwiXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAy''@;'; put 'put ''XHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1''@;'; put 'put ''MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkIl0sWyI5OTgwIiwiXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBi''@;'; put 'put ''XHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1''@;'; put 'put ''MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMz''@;'; put 'put ''XHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3''@;'; put 'put ''MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0''@;'; put 'put ''XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0sWyI5YTQwIiwiXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1''@;'; put 'put ''NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRh''@;'; put 'put ''XHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4Il0sWyI5YTgwIiwiXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1''@;'; put 'put ''Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBi''@;'; put 'put ''XHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1''@;'; put 'put ''N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1''@;'; put 'put ''XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1''@;'; put 'put ''OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyI5YjQwIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTEx''@;'; put 'put ''XHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1''@;'; put 'put ''YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwIl0sWyI5YjgwIiwiXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5''@;'; put 'put ''XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1''@;'; put 'put ''YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3''@;'; put 'put ''XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1''@;'; put 'put ''ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2''@;'; put 'put ''XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyI5YzQwIiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1''@;'; put 'put ''ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4''@;'; put 'put ''XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwIl0sWyI5YzgwIiwiXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2''@;'; put 'put ''MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2''@;'; put 'put ''XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2''@;'; put 'put ''MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5''@;'; put 'put ''XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2''@;'; put 'put ''MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiIl0sWyI5ZDQwIiwiXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5''@;'; put 'put ''XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2''@;'; put 'put ''MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiIl0sWyI5ZDgwIiwiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5''@;'; put 'put ''XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2''@;'; put 'put ''NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3''@;'; put 'put ''XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2''@;'; put 'put ''NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5''@;'; put 'put ''XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjIl0sWyI5ZTQwIiwiXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2''@;'; put 'put ''NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5''@;'; put 'put ''XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlIl0sWyI5ZTgwIiwiXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2''@;'; put 'put ''ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2''@;'; put 'put ''XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2''@;'; put 'put ''OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAy''@;'; put 'put ''XHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2''@;'; put 'put ''YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzIl0sWyI5ZjQwIiwiXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZh''@;'; put 'put ''XHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2''@;'; put 'put ''YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmIl0sWyI5ZjgwIiwiXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVl''@;'; put 'put ''XHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2''@;'; put 'put ''Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2''@;'; put 'put ''XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2''@;'; put 'put ''ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4''@;'; put 'put ''XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjIl0sWyJlMDQwIiwiXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2''@;'; put 'put ''ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4''@;'; put 'put ''XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkIl0sWyJlMDgwIiwiXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3''@;'; put 'put ''MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFi''@;'; put 'put ''XHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3''@;'; put 'put ''MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3Mzdh''@;'; put 'put ''XHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3''@;'; put 'put ''NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxIl0sWyJlMTQwIiwiXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFl''@;'; put 'put ''XHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3''@;'; put 'put ''NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmIl0sWyJlMTgwIiwiXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5''@;'; put 'put ''XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3''@;'; put 'put ''NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5''@;'; put 'put ''XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3''@;'; put 'put ''N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNi''@;'; put 'put ''XHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjIl0sWyJlMjQwIiwiXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3''@;'; put 'put ''OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3''@;'; put 'put ''XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwIl0sWyJlMjgwIiwiXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3''@;'; put 'put ''YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1''@;'; put 'put ''XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3''@;'; put 'put ''YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVm''@;'; put 'put ''XHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3''@;'; put 'put ''Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0sWyJlMzQwIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkz''@;'; put 'put ''XHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3''@;'; put 'put ''ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3Il0sWyJlMzgwIiwiXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZh''@;'; put 'put ''XHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3''@;'; put 'put ''ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1''@;'; put 'put ''XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4''@;'; put 'put ''MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYx''@;'; put 'put ''XHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiIl0sWyJlNDQwIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4''@;'; put 'put ''MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3''@;'; put 'put ''XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0Il0sWyJlNDgwIiwiXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4''@;'; put 'put ''MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5''@;'; put 'put ''XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4''@;'; put 'put ''M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2''@;'; put 'put ''XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4''@;'; put 'put ''NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4Il0sWyJlNTQwIiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJh''@;'; put 'put ''XHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4''@;'; put 'put ''NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjIl0sWyJlNTgwIiwiXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5''@;'; put 'put ''XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4''@;'; put 'put ''N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMx''@;'; put 'put ''XHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4''@;'; put 'put ''OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4''@;'; put 'put ''XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlIl0sWyJlNjQwIiwiXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4''@;'; put 'put ''OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0''@;'; put 'put ''XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3Il0sWyJlNjgwIiwiXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4''@;'; put 'put ''YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4Yjhl''@;'; put 'put ''XHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4''@;'; put 'put ''Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3''@;'; put 'put ''XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4''@;'; put 'put ''ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhIl0sWyJlNzQwIiwiXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkx''@;'; put 'put ''XHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4''@;'; put 'put ''ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjIl0sWyJlNzgwIiwiXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUy''@;'; put 'put ''XHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5''@;'; put 'put ''MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRh''@;'; put 'put ''XHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5''@;'; put 'put ''MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBm''@;'; put 'put ''XHU5MmZhXHU5MzQ0XHU5MzJlIl0sWyJlODQwIiwiXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5''@;'; put 'put ''M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3''@;'; put 'put ''XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5Il0sWyJlODgwIiwiXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5''@;'; put 'put ''NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3''@;'; put 'put ''XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5''@;'; put 'put ''NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5Nzkw''@;'; put 'put ''XHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5''@;'; put 'put ''ODZiXHU5ODZmXHU5ODcwIl0sWyJlOTQwIiwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJj''@;'; put 'put ''XHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5''@;'; put 'put ''OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzIl0sWyJlOTgwIiwiXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFk''@;'; put 'put ''XHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5''@;'; put 'put ''YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNm''@;'; put 'put ''XHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5''@;'; put 'put ''YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNl''@;'; put 'put ''XHU5ZDQ2XHU5ZDQ4Il0sWyJlYTQwIiwiXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5''@;'; put 'put ''ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYx''@;'; put 'put ''XHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmIl0sWyJlYTgwIiwiXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5''@;'; put 'put ''ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJlZDQwIiwiXHU3ZThhXHU4OTFj''@;'; put 'put ''XHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1''@;'; put 'put ''MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2''@;'; put 'put ''XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmIl0sWyJlZDgwIiwiXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1''@;'; put 'put ''ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYw''@;'; put 'put ''XHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2''@;'; put 'put ''ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYy''@;'; put 'put ''XHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJlZTQwIiwiXHU3MmJlXHU3MzI0XHVm''@;'; put 'put ''YTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRl''@;'; put 'put ''XHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4''@;'; put 'put ''M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5Il0sWyJlZTgwIiwiXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEy''@;'; put 'put ''XHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5''@;'; put 'put ''MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1''@;'; put 'put ''XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5''@;'; put 'put ''YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl0sWyJlZWVmIiwiXHUyMTcwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxbImYwNDAiLCJcdWUwMDAiLDYyXSxbImYwODAiLCJcdWUwM2YiLDEyNF0sWyJmMTQwIiwiXHVlMGJjIiw2Ml0sWyJmMTgwIiwiXHVl''@;'; put 'put ''MGZiIiwxMjRdLFsiZjI0MCIsIlx1ZTE3OCIsNjJdLFsiZjI4MCIsIlx1ZTFiNyIsMTI0XSxbImYzNDAiLCJcdWUyMzQiLDYyXSxbImYzODAiLCJcdWUyNzMiLDEyNF0sWyJmNDQwIiwiXHVlMmYwIiw2Ml0sWyJmNDgwIiwiXHVlMzJmIiwxMjRdLFsiZjU0MCIsIlx1ZTNhYyIsNjJdLFsiZjU4''@;'; put 'put ''MCIsIlx1ZTNlYiIsMTI0XSxbImY2NDAiLCJcdWU0NjgiLDYyXSxbImY2ODAiLCJcdWU0YTciLDEyNF0sWyJmNzQwIiwiXHVlNTI0Iiw2Ml0sWyJmNzgwIiwiXHVlNTYzIiwxMjRdLFsiZjg0MCIsIlx1ZTVlMCIsNjJdLFsiZjg4MCIsIlx1ZTYxZiIsMTI0XSxbImY5NDAiLCJcdWU2OWMiXSxb''@;'; put 'put ''ImZhNDAiLCJcdTIxNzAiLDksIlx1MjE2MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0''@;'; put 'put ''ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhIl0sWyJmYTgwIiwiXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1''@;'; put 'put ''XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1''@;'; put 'put ''OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRl''@;'; put 'put ''XHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2''@;'; put 'put ''NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUy''@;'; put 'put ''XHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmIl0sWyJmYjQwIiwiXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3''@;'; put 'put ''MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJl''@;'; put 'put ''XHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5Il0sWyJmYjgwIiwiXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3''@;'; put 'put ''YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIx''@;'; put 'put ''XHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5''@;'; put 'put ''MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1''@;'; put 'put ''XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5''@;'; put 'put ''NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5Il0sWyJmYzQwIiwiXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl1dJyl9LDE1NTc5KHRlKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dGUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMu''@;'; put 'put ''NC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0''@;'; put 'put ''IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFl''@;'; put 'put ''cy0yNTYtY2ZiIn0nKX19LHRlPT57dGUodGUucz04MTQ3NCl9XSk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=polyfills.623348aa46123983-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0NjFdLHsyNDA1MChjLGYsdCl7InVzZSBzdHJpY3QiO3QoMTg4ODMpLHQoNTQ5NDApLHQoMzkyNzEpLHQoNTI0NDQpLHQoMjYyMDMpLHQoMTU2MjYpLHQo''@;'; put 'put ''ODgwMjUpLHQoNTY0NDIpLHQoMzI4OTkpLHQoNjYzNzQpLHQoNDI0NiksdCgyMjkxMyksdCgxMDc0MyksdCg2NTg0NiksdCg5MzUzKSx0KDk2OTM1KSx0KDkyNTY4KTt2YXIgZHQ9dCg4MzgzOCk7d2luZG93Lmdsb2JhbD13aW5kb3csd2luZG93Lmdsb2JhbC5CdWZmZXI9d2luZG93Lmdsb2Jh''@;'; put 'put ''bC5CdWZmZXJ8fGR0LkJ1ZmZlcix3aW5kb3cucHJvY2Vzcz17dmVyc2lvbjoiIn19LDEzOTgxKGMsZil7InVzZSBzdHJpY3QiO2YuYnl0ZUxlbmd0aD1mdW5jdGlvbiBpKGcpe3ZhciBEPWwoZykseD1EWzFdO3JldHVybiAzKihEWzBdK3gpLzQteH0sZi50b0J5dGVBcnJheT1mdW5jdGlvbiBw''@;'; put 'put ''KGcpe3ZhciBELFQsRj1sKGcpLHg9RlswXSxBPUZbMV0saz1uZXcgZShmdW5jdGlvbiB2KGcsRCxGKXtyZXR1cm4gMyooRCtGKS80LUZ9KDAseCxBKSksUD0wLE09QT4wP3gtNDp4O2ZvcihUPTA7VDxNO1QrPTQpRD1uW2cuY2hhckNvZGVBdChUKV08PDE4fG5bZy5jaGFyQ29kZUF0KFQrMSld''@;'; put 'put ''PDwxMnxuW2cuY2hhckNvZGVBdChUKzIpXTw8NnxuW2cuY2hhckNvZGVBdChUKzMpXSxrW1ArK109RD4+MTYmMjU1LGtbUCsrXT1EPj44JjI1NSxrW1ArK109MjU1JkQ7cmV0dXJuIDI9PT1BJiYoRD1uW2cuY2hhckNvZGVBdChUKV08PDJ8bltnLmNoYXJDb2RlQXQoVCsxKV0+PjQsa1tQKytd''@;'; put 'put ''PTI1NSZEKSwxPT09QSYmKEQ9bltnLmNoYXJDb2RlQXQoVCldPDwxMHxuW2cuY2hhckNvZGVBdChUKzEpXTw8NHxuW2cuY2hhckNvZGVBdChUKzIpXT4+MixrW1ArK109RD4+OCYyNTUsa1tQKytdPTI1NSZEKSxrfSxmLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gRShnKXtmb3IodmFyIEQsRj1n''@;'; put 'put ''Lmxlbmd0aCx4PUYlMyxBPVtdLGs9MTYzODMsUD0wLE09Ri14O1A8TTtQKz1rKUEucHVzaCh5KGcsUCxQK2s+TT9NOlAraykpO3JldHVybiAxPT09eD9BLnB1c2godFsoRD1nW0YtMV0pPj4yXSt0W0Q8PDQmNjNdKyI9PSIpOjI9PT14JiZBLnB1c2godFsoRD0oZ1tGLTJdPDw4KStnW0YtMV0p''@;'; put 'put ''Pj4xMF0rdFtEPj40JjYzXSt0W0Q8PDImNjNdKyI9IiksQS5qb2luKCIiKX07Zm9yKHZhciB0PVtdLG49W10sZT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxzPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1''@;'; put 'put ''Njc4OSsvIixvPTA7bzw2NDsrK28pdFtvXT1zW29dLG5bcy5jaGFyQ29kZUF0KG8pXT1vO2Z1bmN0aW9uIGwoZyl7dmFyIEQ9Zy5sZW5ndGg7aWYoRCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIEY9Zy5p''@;'; put 'put ''bmRleE9mKCI9Iik7cmV0dXJuLTE9PT1GJiYoRj1EKSxbRixGPT09RD8wOjQtRiU0XX1mdW5jdGlvbiBkKGcpe3JldHVybiB0W2c+PjE4JjYzXSt0W2c+PjEyJjYzXSt0W2c+PjYmNjNdK3RbNjMmZ119ZnVuY3Rpb24geShnLEQsRil7Zm9yKHZhciBBPVtdLGs9RDtrPEY7ays9MylBLnB1c2go''@;'; put 'put ''ZCgoZ1trXTw8MTYmMTY3MTE2ODApKyhnW2srMV08PDgmNjUyODApKygyNTUmZ1trKzJdKSkpO3JldHVybiBBLmpvaW4oIiIpfW5bNDVdPTYyLG5bOTVdPTYzfSw4MzgzOChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoMTM5ODEpLGU9dCgyMjAyMCkscz0iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7Zi5CdWZmZXI9aSxmLlNsb3dCdWZmZXI9ZnVuY3Rpb24gayhoKXtyZXR1cm4raCE9aCYmKGg9MCksaS5hbGxvYygraCl9LGYuSU5TUEVDVF9N''@;'; put 'put ''QVhfQllURVM9NTA7dmFyIG89MjE0NzQ4MzY0NztmdW5jdGlvbiBsKGgpe2lmKGg+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2grJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KGgpO3JldHVybiBPYmplY3Quc2V0UHJv''@;'; put 'put ''dG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGgscixhKXtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQg''@;'; put 'put ''dHlwZSBudW1iZXInKTtyZXR1cm4geShoKX1yZXR1cm4gdihoLHIsYSl9ZnVuY3Rpb24gdihoLHIsYSl7aWYoInN0cmluZyI9PXR5cGVvZiBoKXJldHVybiBmdW5jdGlvbiBFKGgscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0VuY29kaW5nKHIp''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7dmFyIGE9MHxQKGgsciksbT1sKGEpLHc9bS53cml0ZShoLHIpO3JldHVybiB3IT09YSYmKG09bS5zbGljZSgwLHcpKSxtfShoLHIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhoKSlyZXR1cm4gZnVuY3Rpb24gRCho''@;'; put 'put ''KXtpZihubihoLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhBcnJheShoKTtyZXR1cm4gRihyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhoKX0oaCk7aWYobnVsbD09aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBi''@;'; put 'put ''ZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBoKTtpZihubihoLEFycmF5QnVmZmVyKXx8aCYmbm4oaC5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJy''@;'; put 'put ''YXlCdWZmZXI8InUiJiYobm4oaCxTaGFyZWRBcnJheUJ1ZmZlcil8fGgmJm5uKGguYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEYoaCxyLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBi''@;'; put 'put ''ZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbT1oLnZhbHVlT2YmJmgudmFsdWVPZigpO2lmKG51bGwhPW0mJm0hPT1oKXJldHVybiBpLmZyb20obSxyLGEpO3ZhciB3PWZ1bmN0aW9uIHgoaCl7aWYoaS5pc0J1ZmZlcihoKSl7dmFyIHI9MHxBKGgubGVuZ3Ro''@;'; put 'put ''KSxhPWwocik7cmV0dXJuIDA9PT1hLmxlbmd0aHx8aC5jb3B5KGEsMCwwLHIpLGF9cmV0dXJuIHZvaWQgMCE9PWgubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgaC5sZW5ndGh8fHluKGgubGVuZ3RoKT9sKDApOmcoaCk6IkJ1ZmZlciI9PT1oLnR5cGUmJkFycmF5LmlzQXJyYXkoaC5kYXRhKT9n''@;'; put 'put ''KGguZGF0YSk6dm9pZCAwfShoKTtpZih3KXJldHVybiB3O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBoW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGkuZnJvbShoW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmlu''@;'; put 'put ''ZyIpLHIsYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgaCl9ZnVuY3Rpb24gcCho''@;'; put 'put ''KXtpZigibnVtYmVyIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihoPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytoKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1m''@;'; put 'put ''dW5jdGlvbiB5KGgpe3JldHVybiBwKGgpLGwoaDwwPzA6MHxBKGgpKX1mdW5jdGlvbiBnKGgpe2Zvcih2YXIgcj1oLmxlbmd0aDwwPzA6MHxBKGgubGVuZ3RoKSxhPWwociksbT0wO208cjttKz0xKWFbbV09MjU1JmhbbV07cmV0dXJuIGF9ZnVuY3Rpb24gRihoLHIsYSl7aWYocjwwfHxoLmJ5''@;'; put 'put ''dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoaC5ieXRlTGVuZ3RoPHIrKGF8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgbTty''@;'; put 'put ''ZXR1cm4gbT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1hP25ldyBVaW50OEFycmF5KGgpOnZvaWQgMD09PWE/bmV3IFVpbnQ4QXJyYXkoaCxyKTpuZXcgVWludDhBcnJheShoLHIsYSksT2JqZWN0LnNldFByb3RvdHlwZU9mKG0saS5wcm90b3R5cGUpLG19ZnVuY3Rpb24gQShoKXtpZihoPj1vKXRo''@;'; put 'put ''cm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8aH1mdW5jdGlvbiBQKGgscil7aWYoaS5pc0J1ZmZlcihoKSlyZXR1cm4gaC5sZW5ndGg7aWYo''@;'; put 'put ''QXJyYXlCdWZmZXIuaXNWaWV3KGgpfHxubihoLEFycmF5QnVmZmVyKSlyZXR1cm4gaC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3Ig''@;'; put 'put ''QXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaCk7dmFyIGE9aC5sZW5ndGgsbT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFtJiYwPT09YSlyZXR1cm4gMDtmb3IodmFyIHc9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEi''@;'; put 'put ''OmNhc2UiYmluYXJ5IjpyZXR1cm4gYTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBZdChoKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmE7Y2FzZSJoZXgiOnJldHVybiBhPj4+MTtjYXNlImJhc2U2NCI6''@;'; put 'put ''cmV0dXJuIGhuKGgpLmxlbmd0aDtkZWZhdWx0OmlmKHcpcmV0dXJuIG0/LTE6WXQoaCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksdz0hMH19ZnVuY3Rpb24gTShoLHIsYSl7dmFyIG09ITE7aWYoKHZvaWQgMD09PXJ8fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8fCgodm9pZCAw''@;'; put 'put ''PT09YXx8YT50aGlzLmxlbmd0aCkmJihhPXRoaXMubGVuZ3RoKSxhPD0wKXx8KGE+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihofHwoaD0idXRmOCIpOzspc3dpdGNoKGgpe2Nhc2UiaGV4IjpyZXR1cm4gZHQodGhpcyxyLGEpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHEo''@;'; put 'put ''dGhpcyxyLGEpO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMscixhKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBsdCh0aGlzLHIsYSk7Y2FzZSJiYXNlNjQiOnJldHVybiBtdCh0aGlzLHIsYSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRm''@;'; put 'put ''LTE2bGUiOnJldHVybiBDdCh0aGlzLHIsYSk7ZGVmYXVsdDppZihtKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7aD0oaCsiIikudG9Mb3dlckNhc2UoKSxtPSEwfX1mdW5jdGlvbiBUKGgscixhKXt2YXIgbT1oW3JdO2hbcl09aFthXSxoW2FdPW19ZnVuY3Rp''@;'; put 'put ''b24gYihoLHIsYSxtLHcpe2lmKDA9PT1oLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGE/KG09YSxhPTApOmE+MjE0NzQ4MzY0Nz9hPTIxNDc0ODM2NDc6YTwtMjE0NzQ4MzY0OCYmKGE9LTIxNDc0ODM2NDgpLHluKGE9K2EpJiYoYT13PzA6aC5sZW5ndGgtMSksYTwwJiYo''@;'; put 'put ''YT1oLmxlbmd0aCthKSxhPj1oLmxlbmd0aCl7aWYodylyZXR1cm4tMTthPWgubGVuZ3RoLTF9ZWxzZSBpZihhPDApe2lmKCF3KXJldHVybi0xO2E9MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLG0pKSxpLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6Qiho''@;'; put 'put ''LHIsYSxtLHcpO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP3c/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGgscixhKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5k''@;'; put 'put ''ZXhPZi5jYWxsKGgscixhKTpCKGgsW3JdLGEsbSx3KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBCKGgscixhLG0sdyl7dmFyIEgsSz0xLCQ9aC5sZW5ndGgsRHQ9ci5sZW5ndGg7aWYodm9pZCAwIT09bSYmKCJ1''@;'; put 'put ''Y3MyIj09PShtPVN0cmluZyhtKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW18fCJ1dGYxNmxlIj09PW18fCJ1dGYtMTZsZSI9PT1tKSl7aWYoaC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtLPTIsJC89MixEdC89MixhLz0yfWZ1bmN0aW9uIF8ocXQscm4pe3JldHVybiAxPT09''@;'; put 'put ''Sz9xdFtybl06cXQucmVhZFVJbnQxNkJFKHJuKkspfWlmKHcpe3ZhciBRPS0xO2ZvcihIPWE7SDwkO0grKylpZihfKGgsSCk9PT1fKHIsLTE9PT1RPzA6SC1RKSl7aWYoLTE9PT1RJiYoUT1IKSxILVErMT09PUR0KXJldHVybiBRKkt9ZWxzZS0xIT09USYmKEgtPUgtUSksUT0tMX1lbHNlIGZv''@;'; put 'put ''cihhK0R0PiQmJihhPSQtRHQpLEg9YTtIPj0wO0gtLSl7Zm9yKHZhciBpdD0hMCx6dD0wO3p0PER0O3p0KyspaWYoXyhoLEgrenQpIT09XyhyLHp0KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIEh9cmV0dXJuLTF9ZnVuY3Rpb24gVShoLHIsYSxtKXthPU51bWJlcihhKXx8MDt2YXIgdz1o''@;'; put 'put ''Lmxlbmd0aC1hO20/KG09TnVtYmVyKG0pKT53JiYobT13KTptPXc7dmFyIEs9ci5sZW5ndGg7bT5LLzImJihtPUsvMik7Zm9yKHZhciAkPTA7JDxtOysrJCl7dmFyIER0PXBhcnNlSW50KHIuc3Vic3RyKDIqJCwyKSwxNik7aWYoeW4oRHQpKXJldHVybiAkO2hbYSskXT1EdH1yZXR1cm4gJH1m''@;'; put 'put ''dW5jdGlvbiBaKGgscixhLG0pe3JldHVybiBvbihZdChyLGgubGVuZ3RoLWEpLGgsYSxtKX1mdW5jdGlvbiBudChoLHIsYSxtKXtyZXR1cm4gb24oZnVuY3Rpb24gcG4oaCl7Zm9yKHZhciByPVtdLGE9MDthPGgubGVuZ3RoOysrYSlyLnB1c2goMjU1JmguY2hhckNvZGVBdChhKSk7cmV0dXJu''@;'; put 'put ''IHJ9KHIpLGgsYSxtKX1mdW5jdGlvbiB0dChoLHIsYSxtKXtyZXR1cm4gb24oaG4ociksaCxhLG0pfWZ1bmN0aW9uIHl0KGgscixhLG0pe3JldHVybiBvbihmdW5jdGlvbiB4bihoLHIpe2Zvcih2YXIgYSxtLEs9W10sJD0wOyQ8aC5sZW5ndGgmJiEoKHItPTIpPDApOysrJCltPShhPWguY2hh''@;'; put 'put ''ckNvZGVBdCgkKSk+PjgsSy5wdXNoKGElMjU2KSxLLnB1c2gobSk7cmV0dXJuIEt9KHIsaC5sZW5ndGgtYSksaCxhLG0pfWZ1bmN0aW9uIG10KGgscixhKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZhPT09aC5sZW5ndGg/aDpoLnNsaWNlKHIsYSkpfWZ1bmN0aW9uIHEoaCxyLGEp''@;'; put 'put ''e2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciBtPVtdLHc9cjt3PGE7KXt2YXIgXyxILFEsaXQsSz1oW3ddLCQ9bnVsbCxEdD1LPjIzOT80Oks+MjIzPzM6Sz4xOTE/MjoxO2lmKHcrRHQ8PWEpc3dpdGNoKER0KXtjYXNlIDE6SzwxMjgmJigkPUspO2JyZWFrO2Nhc2UgMjoxMjg9PSgx''@;'; put 'put ''OTImKF89aFt3KzFdKSkmJihpdD0oMzEmSyk8PDZ8NjMmXyk+MTI3JiYoJD1pdCk7YnJlYWs7Y2FzZSAzOkg9aFt3KzJdLDEyOD09KDE5MiYoXz1oW3crMV0pKSYmMTI4PT0oMTkyJkgpJiYoaXQ9KDE1JkspPDwxMnwoNjMmXyk8PDZ8NjMmSCk+MjA0NyYmKGl0PDU1Mjk2fHxpdD41NzM0Mykm''@;'; put 'put ''JigkPWl0KTticmVhaztjYXNlIDQ6SD1oW3crMl0sUT1oW3crM10sMTI4PT0oMTkyJihfPWhbdysxXSkpJiYxMjg9PSgxOTImSCkmJjEyOD09KDE5MiZRKSYmKGl0PSgxNSZLKTw8MTh8KDYzJl8pPDwxMnwoNjMmSCk8PDZ8NjMmUSk+NjU1MzUmJml0PDExMTQxMTImJigkPWl0KX1udWxsPT09''@;'; put 'put ''JD8oJD02NTUzMyxEdD0xKTokPjY1NTM1JiYobS5wdXNoKCgkLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSwkPTU2MzIwfDEwMjMmJCksbS5wdXNoKCQpLHcrPUR0fXJldHVybiBmdW5jdGlvbiBldChoKXt2YXIgcj1oLmxlbmd0aDtpZihyPD1YKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''LmFwcGx5KFN0cmluZyxoKTtmb3IodmFyIGE9IiIsbT0wO208cjspYSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaC5zbGljZShtLG0rPVgpKTtyZXR1cm4gYX0obSl9Zi5rTWF4TGVuZ3RoPW8sIShpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdSgpe3RyeXt2YXIg''@;'; put 'put ''aD1uZXcgVWludDhBcnJheSgxKSxyPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihoLHIpLDQyPT09aC5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0''@;'; put 'put ''eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZm''@;'; put 'put ''ZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGkuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKGgscixhKXtyZXR1cm4gdiho''@;'; put 'put ''LHIsYSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihpLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksVWludDhBcnJheSksaS5hbGxvYz1mdW5jdGlvbihoLHIsYSl7cmV0dXJuIGZ1bmN0aW9uIGQoaCxyLGEpe3JldHVybiBwKGgpLGg8PTA/''@;'; put 'put ''bChoKTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2YgYT9sKGgpLmZpbGwocixhKTpsKGgpLmZpbGwocik6bChoKX0oaCxyLGEpfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGgpe3JldHVybiB5KGgpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihoKXtyZXR1cm4geShoKX0saS5pc0J1''@;'; put 'put ''ZmZlcj1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmITA9PT1yLl9pc0J1ZmZlciYmciE9PWkucHJvdG90eXBlfSxpLmNvbXBhcmU9ZnVuY3Rpb24ocixhKXtpZihubihyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSxubihhLFVpbnQ4QXJyYXkp''@;'; put 'put ''JiYoYT1pLmZyb20oYSxhLm9mZnNldCxhLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKXx8IWkuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYo''@;'; put 'put ''cj09PWEpcmV0dXJuIDA7Zm9yKHZhciBtPXIubGVuZ3RoLHc9YS5sZW5ndGgsSz0wLCQ9TWF0aC5taW4obSx3KTtLPCQ7KytLKWlmKHJbS10hPT1hW0tdKXttPXJbS10sdz1hW0tdO2JyZWFrfXJldHVybiBtPHc/LTE6dzxtPzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHIpe3N3aXRjaChT''@;'; put 'put ''dHJpbmcocikudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVy''@;'; put 'put ''biEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlvbihyLGEpe2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIGkuYWxsb2Mo''@;'; put 'put ''MCk7dmFyIG07aWYodm9pZCAwPT09YSlmb3IoYT0wLG09MDttPHIubGVuZ3RoOysrbSlhKz1yW21dLmxlbmd0aDt2YXIgdz1pLmFsbG9jVW5zYWZlKGEpLEs9MDtmb3IobT0wO208ci5sZW5ndGg7KyttKXt2YXIgJD1yW21dO2lmKG5uKCQsVWludDhBcnJheSkpSyskLmxlbmd0aD53Lmxlbmd0''@;'; put 'put ''aD9pLmZyb20oJCkuY29weSh3LEspOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHcsJCxLKTtlbHNle2lmKCFpLmlzQnVmZmVyKCQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTskLmNvcHkodyxLKX1LKz0k''@;'; put 'put ''Lmxlbmd0aH1yZXR1cm4gd30saS5ieXRlTGVuZ3RoPVAsaS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRp''@;'; put 'put ''cGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9MilUKHRoaXMsYSxhKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmxlbmd0aDtpZihyJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUg''@;'; put 'put ''YSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBhPTA7YTxyO2ErPTQpVCh0aGlzLGEsYSszKSxUKHRoaXMsYSsxLGErMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJv''@;'; put 'put ''cigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9OClUKHRoaXMsYSxhKzcpLFQodGhpcyxhKzEsYSs2KSxUKHRoaXMsYSsyLGErNSksVCh0aGlzLGErMyxhKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50b1N0cmluZz1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiAwPT09cj8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9xKHRoaXMsMCxyKTpNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9aS5wcm90b3R5cGUudG9TdHJpbmcsaS5wcm90b3R5cGUuZXF1''@;'; put 'put ''YWxzPWZ1bmN0aW9uKHIpe2lmKCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXJ8fDA9PT1pLmNvbXBhcmUodGhpcyxyKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciByPSIiLGE9''@;'; put 'put ''Zi5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gcj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsYSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5hJiYocis9IiAuLi4gIiksIjxCdWZmZXIgIityKyI+In0scyYmKGkucHJvdG90eXBlW3NdPWkucHJvdG90eXBlLmlu''@;'; put 'put ''c3BlY3QpLGkucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24ocixhLG0sdyxLKXtpZihubihyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiByKTtpZih2b2lkIDA9PT1hJiYoYT0wKSx2b2lkIDA9PT1tJiYobT1yP3IubGVuZ3RoOjApLHZvaWQgMD09PXcmJih3PTApLHZvaWQgMD09PUsmJihLPXRoaXMubGVuZ3RoKSxhPDB8''@;'; put 'put ''fG0+ci5sZW5ndGh8fHc8MHx8Sz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYodz49SyYmYT49bSlyZXR1cm4gMDtpZih3Pj1LKXJldHVybi0xO2lmKGE+PW0pcmV0dXJuIDE7aWYodGhpcz09PXIpcmV0dXJuIDA7Zm9yKHZhciAkPShL''@;'; put 'put ''Pj4+PTApLSh3Pj4+PTApLER0PShtPj4+PTApLShhPj4+PTApLF89TWF0aC5taW4oJCxEdCksSD10aGlzLnNsaWNlKHcsSyksUT1yLnNsaWNlKGEsbSksaXQ9MDtpdDxfOysraXQpaWYoSFtpdF0hPT1RW2l0XSl7JD1IW2l0XSxEdD1RW2l0XTticmVha31yZXR1cm4gJDxEdD8tMTpEdDwkPzE6''@;'; put 'put ''MH0saS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24ocixhLG0pe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHIsYSxtKX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIGIodGhpcyxyLGEsbSwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9u''@;'; put 'put ''KHIsYSxtKXtyZXR1cm4gYih0aGlzLHIsYSxtLCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocixhLG0sdyl7aWYodm9pZCAwPT09YSl3PSJ1dGY4IixtPXRoaXMubGVuZ3RoLGE9MDtlbHNlIGlmKHZvaWQgMD09PW0mJiJzdHJpbmciPT10eXBlb2YgYSl3PWEsbT10aGlzLmxlbmd0''@;'; put 'put ''aCxhPTA7ZWxzZXtpZighaXNGaW5pdGUoYSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2E+Pj49MCxpc0Zpbml0ZShtKT8obT4+Pj0wLHZvaWQgMD09PXcmJih3PSJ1dGY4''@;'; put 'put ''IikpOih3PW0sbT12b2lkIDApfXZhciBLPXRoaXMubGVuZ3RoLWE7aWYoKHZvaWQgMD09PW18fG0+SykmJihtPUspLHIubGVuZ3RoPjAmJihtPDB8fGE8MCl8fGE+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRz''@;'; put 'put ''Iik7d3x8KHc9InV0ZjgiKTtmb3IodmFyICQ9ITE7Oylzd2l0Y2godyl7Y2FzZSJoZXgiOnJldHVybiBVKHRoaXMscixhLG0pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFoodGhpcyxyLGEsbSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbnQo''@;'; put 'put ''dGhpcyxyLGEsbSk7Y2FzZSJiYXNlNjQiOnJldHVybiB0dCh0aGlzLHIsYSxtKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHl0KHRoaXMscixhLG0pO2RlZmF1bHQ6aWYoJCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVu''@;'; put 'put ''Y29kaW5nOiAiK3cpO3c9KCIiK3cpLnRvTG93ZXJDYXNlKCksJD0hMH19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFg9NDA5NjtmdW5jdGlv''@;'; put 'put ''biBWKGgscixhKXt2YXIgbT0iIjthPU1hdGgubWluKGgubGVuZ3RoLGEpO2Zvcih2YXIgdz1yO3c8YTsrK3cpbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmaFt3XSk7cmV0dXJuIG19ZnVuY3Rpb24gbHQoaCxyLGEpe3ZhciBtPSIiO2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciB3''@;'; put 'put ''PXI7dzxhOysrdyltKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbd10pO3JldHVybiBtfWZ1bmN0aW9uIGR0KGgscixhKXt2YXIgbT1oLmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghYXx8YTwwfHxhPm0pJiYoYT1tKTtmb3IodmFyIHc9IiIsSz1yO0s8YTsrK0spdys9VG5baFtLXV07cmV0dXJu''@;'; put 'put ''IHd9ZnVuY3Rpb24gQ3QoaCxyLGEpe2Zvcih2YXIgbT1oLnNsaWNlKHIsYSksdz0iIixLPTA7SzxtLmxlbmd0aC0xO0srPTIpdys9U3RyaW5nLmZyb21DaGFyQ29kZShtW0tdKzI1NiptW0srMV0pO3JldHVybiB3fWZ1bmN0aW9uIE90KGgscixhKXtpZihoJTEhPTB8fGg8MCl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoaCtyPmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBOdChoLHIsYSxtLHcsSyl7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+d3x8cjxLKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihhK20+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91''@;'; put 'put ''dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFF0KGgscixhLG0sdyxLKXtpZihhK20+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gYW4oaCxyLGEs''@;'; put 'put ''bSx3KXtyZXR1cm4gcj0rcixhPj4+PTAsd3x8UXQoaCwwLGEsNCksZS53cml0ZShoLHIsYSxtLDIzLDQpLGErNH1mdW5jdGlvbiBHdChoLHIsYSxtLHcpe3JldHVybiByPStyLGE+Pj49MCx3fHxRdChoLDAsYSw4KSxlLndyaXRlKGgscixhLG0sNTIsOCksYSs4fWkucHJvdG90eXBlLnNsaWNl''@;'; put 'put ''PWZ1bmN0aW9uKHIsYSl7dmFyIG09dGhpcy5sZW5ndGg7KHI9fn5yKTwwPyhyKz1tKTwwJiYocj0wKTpyPm0mJihyPW0pLChhPXZvaWQgMD09PWE/bTp+fmEpPDA/KGErPW0pPDAmJihhPTApOmE+bSYmKGE9bSksYTxyJiYoYT1yKTt2YXIgdz10aGlzLnN1YmFycmF5KHIsYSk7cmV0dXJuIE9i''@;'; put 'put ''amVjdC5zZXRQcm90b3R5cGVPZih3LGkucHJvdG90eXBlKSx3fSxpLnByb3RvdHlwZS5yZWFkVWludExFPWkucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24ocixhLG0pe3I+Pj49MCxhPj4+PTAsbXx8T3QocixhLHRoaXMubGVuZ3RoKTtmb3IodmFyIHc9dGhpc1tyXSxLPTEsJD0wOysr''@;'; put 'put ''JDxhJiYoSyo9MjU2KTspdys9dGhpc1tyKyRdKks7cmV0dXJuIHd9LGkucHJvdG90eXBlLnJlYWRVaW50QkU9aS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxPdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgdz10aGlzW3IrLS1hXSxLPTE7''@;'; put 'put ''YT4wJiYoSyo9MjU2KTspdys9dGhpc1tyKy0tYV0qSztyZXR1cm4gd30saS5wcm90b3R5cGUucmVhZFVpbnQ4PWkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3QociwxLHRoaXMubGVuZ3RoKSx0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkVWlu''@;'; put 'put ''dDE2TEU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl18dGhpc1tyKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVWludDE2QkU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHIs''@;'; put 'put ''YSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDh8dGhpc1tyKzFdfSxpLnByb3RvdHlwZS5yZWFkVWludDMyTEU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLCh0''@;'; put 'put ''aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2KSsxNjc3NzIxNip0aGlzW3IrM119LGkucHJvdG90eXBlLnJlYWRVaW50MzJCRT1pLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYq''@;'; put 'put ''dGhpc1tyXSsodGhpc1tyKzFdPDwxNnx0aGlzW3IrMl08PDh8dGhpc1tyKzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PXRoaXNbcl0sSz0xLCQ9MDsrKyQ8YSYmKEsqPTI1Nik7''@;'; put 'put ''KXcrPXRoaXNbciskXSpLO3JldHVybiB3Pj0oSyo9MTI4KSYmKHctPU1hdGgucG93KDIsOCphKSksd30saS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PWEsSz0xLCQ9dGhpc1tyKy0td107''@;'; put 'put ''dz4wJiYoSyo9MjU2KTspJCs9dGhpc1tyKy0td10qSztyZXR1cm4gJD49KEsqPTEyOCkmJigkLT1NYXRoLnBvdygyLDgqYSkpLCR9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3JdPy0xKigy''@;'; put 'put ''NTUtdGhpc1tyXSsxKTp0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihyLGEpe3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRoaXNbcl18dGhpc1tyKzFdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFk''@;'; put 'put ''SW50MTZCRT1mdW5jdGlvbihyLGEpe3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRoaXNbcisxXXx0aGlzW3JdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8''@;'; put 'put ''T3Qociw0LHRoaXMubGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2fHRoaXNbciszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDI0fHRoaXNbcisx''@;'; put 'put ''XTw8MTZ8dGhpc1tyKzJdPDw4fHRoaXNbciszXX0saS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24ocixh''@;'; put 'put ''KXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSwyMyw0KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsNTIsOCl9LGku''@;'; put 'put ''cHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3Qociw4LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVpbnRMRT1pLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihyLGEsbSx3KXty''@;'; put 'put ''PStyLGE+Pj49MCxtPj4+PTAsd3x8TnQodGhpcyxyLGEsbSxNYXRoLnBvdygyLDgqbSktMSwwKTt2YXIgJD0xLER0PTA7Zm9yKHRoaXNbYV09MjU1JnI7KytEdDxtJiYoJCo9MjU2KTspdGhpc1thK0R0XT1yLyQmMjU1O3JldHVybiBhK219LGkucHJvdG90eXBlLndyaXRlVWludEJFPWkucHJv''@;'; put 'put ''dG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHIsYSxtLHcpe3I9K3IsYT4+Pj0wLG0+Pj49MCx3fHxOdCh0aGlzLHIsYSxtLE1hdGgucG93KDIsOCptKS0xLDApO3ZhciAkPW0tMSxEdD0xO2Zvcih0aGlzW2ErJF09MjU1JnI7LS0kPj0wJiYoRHQqPTI1Nik7KXRoaXNbYSskXT1yL0R0JjI1''@;'; put 'put ''NTtyZXR1cm4gYSttfSxpLnByb3RvdHlwZS53cml0ZVVpbnQ4PWkucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSwxLDI1NSwwKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1p''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiw2NTUzNSwwKSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCxhKzJ9LGkucHJvdG90eXBlLndyaXRlVWludDE2QkU9aS5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50MTZCRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIHI9K3IsYT4+Pj0wLG18fE50KHRoaXMscixhLDIsNjU1MzUsMCksdGhpc1thXT1yPj4+OCx0aGlzW2ErMV09MjU1JnIsYSsyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPWkucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24o''@;'; put 'put ''cixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSw0LDQyOTQ5NjcyOTUsMCksdGhpc1thKzNdPXI+Pj4yNCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSsxXT1yPj4+OCx0aGlzW2FdPTI1NSZyLGErNH0saS5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1pLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRl''@;'; put 'put ''SW50TEU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIsOCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD0wLER0PTEsXz0wO2Zvcih0aGlzW2FdPTI1NSZyOysrJDxtJiYoRHQqPTI1Nik7KXI8MCYmMD09PV8mJjAhPT10aGlzW2Er''@;'; put 'put ''JC0xXSYmKF89MSksdGhpc1thKyRdPShyL0R0fDApLV8mMjU1O3JldHVybiBhK219LGkucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIsOCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD1tLTEs''@;'; put 'put ''RHQ9MSxfPTA7Zm9yKHRoaXNbYSskXT0yNTUmcjstLSQ+PTAmJihEdCo9MjU2KTspcjwwJiYwPT09XyYmMCE9PXRoaXNbYSskKzFdJiYoXz0xKSx0aGlzW2ErJF09KHIvRHR8MCktXyYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4g''@;'; put 'put ''cj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMSwxMjcsLTEyOCkscjwwJiYocj0yNTUrcisxKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3Njgp''@;'; put 'put ''LHRoaXNbYV09MjU1JnIsdGhpc1thKzFdPXI+Pj44LGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5w''@;'; put 'put ''cm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSszXT1yPj4+MjQsYSs0''@;'; put 'put ''fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1th''@;'; put 'put ''KzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIGFuKHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBhbih0aGlzLHIsYSwhMSxtKX0s''@;'; put 'put ''aS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIEd0KHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gR3QodGhpcyxyLGEsITEsbSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixh''@;'; put 'put ''LG0sdyl7aWYoIWkuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYobXx8KG09MCksIXcmJjAhPT13JiYodz10aGlzLmxlbmd0aCksYT49ci5sZW5ndGgmJihhPXIubGVuZ3RoKSxhfHwoYT0wKSx3PjAmJnc8bSYmKHc9bSks''@;'; put 'put ''dz09PW18fDA9PT1yLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG08MHx8bT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5n''@;'; put 'put ''ZSIpO2lmKHc8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTt3PnRoaXMubGVuZ3RoJiYodz10aGlzLmxlbmd0aCksci5sZW5ndGgtYTx3LW0mJih3PXIubGVuZ3RoLWErbSk7dmFyIEs9dy1tO3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKGEsbSx3KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkobSx3KSxhKSxLfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsYSxtLHcpe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Ygcil7aWYoInN0cmluZyI9PXR5cGVvZiBhPyh3PWEsYT0wLG09dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbSYmKHc9bSxtPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT13JiYic3RyaW5nIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBh''@;'; put 'put ''IHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgdyYmIWkuaXNFbmNvZGluZyh3KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3cpO2lmKDE9PT1yLmxlbmd0aCl7dmFyIEs9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT13JiZLPDEyOHx8ImxhdGluMSI9PT13''@;'; put 'put ''KSYmKHI9Syl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29sZWFuIj09dHlwZW9mIHImJihyPU51bWJlcihyKSk7aWYoYTwwfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxtKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihtPD1hKXJl''@;'; put 'put ''dHVybiB0aGlzO3ZhciAkO2lmKGE+Pj49MCxtPXZvaWQgMD09PW0/dGhpcy5sZW5ndGg6bT4+PjAscnx8KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcigkPWE7JDxtOysrJCl0aGlzWyRdPXI7ZWxzZXt2YXIgRHQ9aS5pc0J1ZmZlcihyKT9yOmkuZnJvbShyLHcpLF89RHQubGVuZ3RoO2lm''@;'; put 'put ''KDA9PT1fKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytyKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoJD0wOyQ8bS1hOysrJCl0aGlzWyQrYV09RHRbJCVfXX1yZXR1cm4gdGhpc307dmFyIHNuPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24g''@;'; put 'put ''WXQoaCxyKXtyPXJ8fDEvMDtmb3IodmFyIGEsbT1oLmxlbmd0aCx3PW51bGwsSz1bXSwkPTA7JDxtOysrJCl7aWYoKGE9aC5jaGFyQ29kZUF0KCQpKT41NTI5NSYmYTw1NzM0NCl7aWYoIXcpe2lmKGE+NTYzMTkpeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZigk''@;'; put 'put ''KzE9PT1tKXsoci09Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9dz1hO2NvbnRpbnVlfWlmKGE8NTYzMjApeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KSx3PWE7Y29udGludWV9YT02NTUzNisody01NTI5Njw8MTB8YS01NjMyMCl9ZWxzZSB3JiYoci09Myk+LTEm''@;'; put 'put ''JksucHVzaCgyMzksMTkxLDE4OSk7aWYodz1udWxsLGE8MTI4KXtpZigoci09MSk8MClicmVhaztLLnB1c2goYSl9ZWxzZSBpZihhPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrO0sucHVzaChhPj42fDE5Miw2MyZhfDEyOCl9ZWxzZSBpZihhPDY1NTM2KXtpZigoci09Myk8MClicmVhaztLLnB1''@;'; put 'put ''c2goYT4+MTJ8MjI0LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX1lbHNle2lmKCEoYTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrO0sucHVzaChhPj4xOHwyNDAsYT4+MTImNjN8MTI4LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX19''@;'; put 'put ''cmV0dXJuIEt9ZnVuY3Rpb24gaG4oaCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24gRW4oaCl7aWYoKGg9KGg9aC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShzbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7aC5sZW5ndGglNCE9MDspaCs9Ij0iO3JldHVybiBofSho''@;'; put 'put ''KSl9ZnVuY3Rpb24gb24oaCxyLGEsbSl7Zm9yKHZhciB3PTA7dzxtJiYhKHcrYT49ci5sZW5ndGh8fHc+PWgubGVuZ3RoKTsrK3cpclt3K2FdPWhbd107cmV0dXJuIHd9ZnVuY3Rpb24gbm4oaCxyKXtyZXR1cm4gaCBpbnN0YW5jZW9mIHJ8fG51bGwhPWgmJm51bGwhPWguY29uc3RydWN0b3Im''@;'; put 'put ''Jm51bGwhPWguY29uc3RydWN0b3IubmFtZSYmaC5jb25zdHJ1Y3Rvci5uYW1lPT09ci5uYW1lfWZ1bmN0aW9uIHluKGgpe3JldHVybiBoIT1ofXZhciBUbj1mdW5jdGlvbigpe2Zvcih2YXIgaD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxhPTA7YTwxNjsrK2EpZm9yKHZh''@;'; put 'put ''ciBtPTE2KmEsdz0wO3c8MTY7Kyt3KXJbbSt3XT1oW2FdK2hbd107cmV0dXJuIHJ9KCl9LDIyMDIwKGMsZil7Zi5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsbyl7dmFyIHUsbCxpPTgqby1zLTEsdj0oMTw8aSktMSxwPXY+PjEsZD0tNyx5PWU/by0xOjAsRT1lPy0xOjEsZz10W24reV07Zm9yKHkr''@;'; put 'put ''PUUsdT1nJigxPDwtZCktMSxnPj49LWQsZCs9aTtkPjA7dT0yNTYqdSt0W24reV0seSs9RSxkLT04KTtmb3IobD11JigxPDwtZCktMSx1Pj49LWQsZCs9cztkPjA7bD0yNTYqbCt0W24reV0seSs9RSxkLT04KTtpZigwPT09dSl1PTEtcDtlbHNle2lmKHU9PT12KXJldHVybiBsP05hTjoxLzAq''@;'; put 'put ''KGc/LTE6MSk7bCs9TWF0aC5wb3coMixzKSx1LT1wfXJldHVybihnPy0xOjEpKmwqTWF0aC5wb3coMix1LXMpfSxmLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsbyx1KXt2YXIgbCxpLHYscD04KnUtby0xLGQ9KDE8PHApLTEseT1kPj4xLEU9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBv''@;'; put 'put ''dygyLC03Nyk6MCxnPXM/MDp1LTEsRD1zPzE6LTEsRj1uPDB8fDA9PT1uJiYxL248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGw9ZCk6KGw9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioodj1NYXRoLnBvdygyLC1s''@;'; put 'put ''KSk8MSYmKGwtLSx2Kj0yKSwobis9bCt5Pj0xP0UvdjpFKk1hdGgucG93KDIsMS15KSkqdj49MiYmKGwrKyx2Lz0yKSxsK3k+PWQ/KGk9MCxsPWQpOmwreT49MT8oaT0obip2LTEpKk1hdGgucG93KDIsbyksbCs9eSk6KGk9bipNYXRoLnBvdygyLHktMSkqTWF0aC5wb3coMixvKSxsPTApKTtv''@;'; put 'put ''Pj04O3RbZStnXT0yNTUmaSxnKz1ELGkvPTI1NixvLT04KTtmb3IobD1sPDxvfGkscCs9bztwPjA7dFtlK2ddPTI1NSZsLGcrPUQsbC89MjU2LHAtPTgpO3RbZStnLURdfD0xMjgqRn19LDk2OTM1KCl7InVzZSBzdHJpY3QiO2NvbnN0IGM9Z2xvYmFsVGhpcztmdW5jdGlvbiBmKFMpe3JldHVy''@;'; put 'put ''bihjLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIikrU31jb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1PYmplY3QuZGVmaW5lUHJvcGVydHksbz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsdT1PYmplY3QuY3JlYXRlLGw9QXJyYXkucHJvdG90''@;'; put 'put ''eXBlLnNsaWNlLGk9ImFkZEV2ZW50TGlzdGVuZXIiLHY9InJlbW92ZUV2ZW50TGlzdGVuZXIiLHA9ZihpKSxkPWYodikseT0idHJ1ZSIsRT0iZmFsc2UiLGc9ZigiIik7ZnVuY3Rpb24gRChTLFIpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChTLFIpfWZ1bmN0aW9uIEYoUyxSLEwsTyxOKXty''@;'; put 'put ''ZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKFMsUixMLE8sTil9Y29uc3QgeD1mLEE9dHlwZW9mIHdpbmRvdzwidSIsaz1BP3dpbmRvdzp2b2lkIDAsUD1BJiZrfHxnbG9iYWxUaGlzO2Z1bmN0aW9uIFQoUyxSKXtmb3IobGV0IEw9Uy5sZW5ndGgtMTtMPj0wO0wtLSkiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU1tMXSYmKFNbTF09RChTW0xdLFIrIl8iK0wpKTtyZXR1cm4gU31mdW5jdGlvbiBCKFMpe3JldHVybiFTfHwhMSE9PVMud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIFMuZ2V0JiZ0eXBlb2YgUy5zZXQ+InUiKX1jb25zdCBVPXR5cGVvZiBXb3JrZXJHbG9i''@;'; put 'put ''YWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSxaPSEoIm53ImluIFApJiZ0eXBlb2YgUC5wcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09UC5wcm9jZXNzLnRvU3RyaW5nKCksbnQ9IVomJiFVJiYhKCFBfHwhay5IVE1MRWxlbWVudCksdHQ9dHlw''@;'; put 'put ''ZW9mIFAucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PVAucHJvY2Vzcy50b1N0cmluZygpJiYhVSYmISghQXx8IWsuSFRNTEVsZW1lbnQpLHl0PXt9LG10PXgoImVuYWJsZV9iZWZvcmV1bmxvYWQiKSxxPWZ1bmN0aW9uKFMpe2lmKCEoUz1TfHxQLmV2ZW50KSlyZXR1cm47bGV0''@;'; put 'put ''IFI9eXRbUy50eXBlXTtSfHwoUj15dFtTLnR5cGVdPXgoIk9OX1BST1BFUlRZIitTLnR5cGUpKTtjb25zdCBMPXRoaXN8fFMudGFyZ2V0fHxQLE89TFtSXTtsZXQgTjtyZXR1cm4gbnQmJkw9PT1rJiYiZXJyb3IiPT09Uy50eXBlPyhOPU8mJk8uY2FsbCh0aGlzLFMubWVzc2FnZSxTLmZpbGVu''@;'; put 'put ''YW1lLFMubGluZW5vLFMuY29sbm8sUy5lcnJvciksITA9PT1OJiZTLnByZXZlbnREZWZhdWx0KCkpOihOPU8mJk8uYXBwbHkodGhpcyxhcmd1bWVudHMpLCJiZWZvcmV1bmxvYWQiPT09Uy50eXBlJiZQW210XSYmInN0cmluZyI9PXR5cGVvZiBOP1MucmV0dXJuVmFsdWU9TjpudWxsIT1OJiYh''@;'; put 'put ''TiYmUy5wcmV2ZW50RGVmYXVsdCgpKSxOfTtmdW5jdGlvbiBYKFMsUixMKXtsZXQgTz1lKFMsUik7aWYoIU8mJkwmJmUoTCxSKSYmKE89e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksIU98fCFPLmNvbmZpZ3VyYWJsZSlyZXR1cm47Y29uc3QgTj14KCJvbiIrUisicGF0Y2hlZCIp''@;'; put 'put ''O2lmKFMuaGFzT3duUHJvcGVydHkoTikmJlNbTl0pcmV0dXJuO2RlbGV0ZSBPLndyaXRhYmxlLGRlbGV0ZSBPLnZhbHVlO2NvbnN0IEo9Ty5nZXQsc3Q9Ty5zZXQsb3Q9Ui5zbGljZSgyKTtsZXQgZnQ9eXRbb3RdO2Z0fHwoZnQ9eXRbb3RdPXgoIk9OX1BST1BFUlRZIitvdCkpLE8uc2V0PWZ1''@;'; put 'put ''bmN0aW9uKFN0KXtsZXQgcnQ9dGhpczshcnQmJlM9PT1QJiYocnQ9UCkscnQmJigiZnVuY3Rpb24iPT10eXBlb2YgcnRbZnRdJiZydC5yZW1vdmVFdmVudExpc3RlbmVyKG90LHEpLHN0Py5jYWxsKHJ0LG51bGwpLHJ0W2Z0XT1TdCwiZnVuY3Rpb24iPT10eXBlb2YgU3QmJnJ0LmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIob3QscSwhMSkpfSxPLmdldD1mdW5jdGlvbigpe2xldCBTdD10aGlzO2lmKCFTdCYmUz09PVAmJihTdD1QKSwhU3QpcmV0dXJuIG51bGw7Y29uc3QgcnQ9U3RbZnRdO2lmKHJ0KXJldHVybiBydDtpZihKKXtsZXQgeHQ9Si5jYWxsKHRoaXMpO2lmKHh0KXJldHVybiBPLnNldC5j''@;'; put 'put ''YWxsKHRoaXMseHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBTdC5yZW1vdmVBdHRyaWJ1dGUmJlN0LnJlbW92ZUF0dHJpYnV0ZShSKSx4dH1yZXR1cm4gbnVsbH0scyhTLFIsTyksU1tOXT0hMH1mdW5jdGlvbiBldChTLFIsTCl7aWYoUilmb3IobGV0IE89MDtPPFIubGVuZ3RoO08rKylYKFMsIm9u''@;'; put 'put ''IitSW09dLEwpO2Vsc2V7Y29uc3QgTz1bXTtmb3IoY29uc3QgTiBpbiBTKSJvbiI9PU4uc2xpY2UoMCwyKSYmTy5wdXNoKE4pO2ZvcihsZXQgTj0wO048Ty5sZW5ndGg7TisrKVgoUyxPW05dLEwpfX1jb25zdCBWPXgoIm9yaWdpbmFsSW5zdGFuY2UiKTtmdW5jdGlvbiBsdChTKXtjb25zdCBS''@;'; put 'put ''PVBbU107aWYoIVIpcmV0dXJuO1BbeChTKV09UixQW1NdPWZ1bmN0aW9uKCl7Y29uc3QgTj1UKGFyZ3VtZW50cyxTKTtzd2l0Y2goTi5sZW5ndGgpe2Nhc2UgMDp0aGlzW1ZdPW5ldyBSO2JyZWFrO2Nhc2UgMTp0aGlzW1ZdPW5ldyBSKE5bMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW1ZdPW5ldyBS''@;'; put 'put ''KE5bMF0sTlsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbVl09bmV3IFIoTlswXSxOWzFdLE5bMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW1ZdPW5ldyBSKE5bMF0sTlsxXSxOWzJdLE5bM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LE90KFBbU10s''@;'; put 'put ''Uik7Y29uc3QgTD1uZXcgUihmdW5jdGlvbigpe30pO2xldCBPO2ZvcihPIGluIEwpIlhNTEh0dHBSZXF1ZXN0Ij09PVMmJiJyZXNwb25zZUJsb2IiPT09T3x8ZnVuY3Rpb24oTil7ImZ1bmN0aW9uIj09dHlwZW9mIExbTl0/UFtTXS5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''c1tWXVtOXS5hcHBseSh0aGlzW1ZdLGFyZ3VtZW50cyl9OnMoUFtTXS5wcm90b3R5cGUsTix7c2V0OmZ1bmN0aW9uKEopeyJmdW5jdGlvbiI9PXR5cGVvZiBKPyh0aGlzW1ZdW05dPUQoSixTKyIuIitOKSxPdCh0aGlzW1ZdW05dLEopKTp0aGlzW1ZdW05dPUp9LGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzW1ZdW05dfX0pfShPKTtmb3IoTyBpbiBSKSJwcm90b3R5cGUiIT09TyYmUi5oYXNPd25Qcm9wZXJ0eShPKSYmKFBbU11bT109UltPXSl9ZnVuY3Rpb24gZHQoUyxSLEwpe2xldCBPPVM7Zm9yKDtPJiYhTy5oYXNPd25Qcm9wZXJ0eShSKTspTz1vKE8pOyFPJiZTW1JdJiYoTz1T''@;'; put 'put ''KTtjb25zdCBOPXgoUik7bGV0IEo9bnVsbDtpZihPJiYoIShKPU9bTl0pfHwhTy5oYXNPd25Qcm9wZXJ0eShOKSkmJihKPU9bTl09T1tSXSxCKE8mJmUoTyxSKSkpKXtjb25zdCBvdD1MKEosTixSKTtPW1JdPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMsYXJndW1lbnRzKX0sT3QoT1tSXSxK''@;'; put 'put ''KX1yZXR1cm4gSn1mdW5jdGlvbiBDdChTLFIsTCl7bGV0IE89bnVsbDtmdW5jdGlvbiBOKEope2NvbnN0IHN0PUouZGF0YTtyZXR1cm4gc3QuYXJnc1tzdC5jYklkeF09ZnVuY3Rpb24oKXtKLmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LE8uYXBwbHkoc3QudGFyZ2V0LHN0LmFyZ3Mp''@;'; put 'put ''LEp9Tz1kdChTLFIsSj0+ZnVuY3Rpb24oc3Qsb3Qpe2NvbnN0IGZ0PUwoc3Qsb3QpO3JldHVybiBmdC5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG90W2Z0LmNiSWR4XT9GKGZ0Lm5hbWUsb3RbZnQuY2JJZHhdLGZ0LE4pOkouYXBwbHkoc3Qsb3QpfSl9ZnVuY3Rpb24gT3QoUyxSKXtT''@;'; put 'put ''W3goIk9yaWdpbmFsRGVsZWdhdGUiKV09Un1sZXQgTnQ9ITEsUXQ9ITE7ZnVuY3Rpb24gYW4oKXtpZihOdClyZXR1cm4gUXQ7TnQ9ITA7dHJ5e2NvbnN0IFM9ay5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PVMuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1TLmluZGV4T2YoIlRyaWRlbnQvIil8''@;'; put 'put ''fC0xIT09Uy5pbmRleE9mKCJFZGdlLyIpKSYmKFF0PSEwKX1jYXRjaHt9cmV0dXJuIFF0fWZ1bmN0aW9uIEd0KFMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTfWZ1bmN0aW9uIHNuKFMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgU31jb25zdCBFbj17dXNlRzohMH0sWXQ9e30scG49e30s''@;'; put 'put ''eG49bmV3IFJlZ0V4cCgiXiIrZysiKFxcdyspKHRydWV8ZmFsc2UpJCIpLGhuPXgoInByb3BhZ2F0aW9uU3RvcHBlZCIpO2Z1bmN0aW9uIG9uKFMsUil7Y29uc3QgTD0oUj9SKFMpOlMpK0UsTz0oUj9SKFMpOlMpK3ksTj1nK0wsSj1nK087WXRbU109e30sWXRbU11bRV09TixZdFtTXVt5XT1K''@;'; put 'put ''fWZ1bmN0aW9uIG5uKFMsUixMLE8pe2NvbnN0IE49TyYmTy5hZGR8fGksSj1PJiZPLnJtfHx2LHN0PU8mJk8ubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLG90PU8mJk8ucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLGZ0PXgoTiksU3Q9Ii4iK04rIjoiLHJ0PSJwcmVwZW5kTGlzdGVu''@;'; put 'put ''ZXIiLHh0PSIuIitydCsiOiIsYnQ9ZnVuY3Rpb24odnQsWSxqdCl7aWYodnQuaXNSZW1vdmVkKXJldHVybjtjb25zdCBMdD12dC5jYWxsYmFjaztsZXQgWHQ7Im9iamVjdCI9PXR5cGVvZiBMdCYmTHQuaGFuZGxlRXZlbnQmJih2dC5jYWxsYmFjaz11dD0+THQuaGFuZGxlRXZlbnQodXQpLHZ0''@;'; put 'put ''Lm9yaWdpbmFsRGVsZWdhdGU9THQpO3RyeXt2dC5pbnZva2UodnQsWSxbanRdKX1jYXRjaCh1dCl7WHQ9dXR9Y29uc3QgS3Q9dnQub3B0aW9ucztyZXR1cm4gS3QmJiJvYmplY3QiPT10eXBlb2YgS3QmJkt0Lm9uY2UmJllbSl0uY2FsbChZLGp0LnR5cGUsdnQub3JpZ2luYWxEZWxlZ2F0ZT92''@;'; put 'put ''dC5vcmlnaW5hbERlbGVnYXRlOnZ0LmNhbGxiYWNrLEt0KSxYdH07ZnVuY3Rpb24gQnQodnQsWSxqdCl7aWYoIShZPVl8fFMuZXZlbnQpKXJldHVybjtjb25zdCBMdD12dHx8WS50YXJnZXR8fFMsWHQ9THRbWXRbWS50eXBlXVtqdD95OkVdXTtpZihYdCl7Y29uc3QgS3Q9W107aWYoMT09PVh0''@;'; put 'put ''Lmxlbmd0aCl7Y29uc3QgdXQ9YnQoWHRbMF0sTHQsWSk7dXQmJkt0LnB1c2godXQpfWVsc2V7Y29uc3QgdXQ9WHQuc2xpY2UoKTtmb3IobGV0IFd0PTA7V3Q8dXQubGVuZ3RoJiYoIVl8fCEwIT09WVtobl0pO1d0Kyspe2NvbnN0IEl0PWJ0KHV0W1d0XSxMdCxZKTtJdCYmS3QucHVzaChJdCl9''@;'; put 'put ''fWlmKDE9PT1LdC5sZW5ndGgpdGhyb3cgS3RbMF07Zm9yKGxldCB1dD0wO3V0PEt0Lmxlbmd0aDt1dCsrKXtjb25zdCBXdD1LdFt1dF07Ui5uYXRpdmVTY2hlZHVsZU1pY3JvVGFzaygoKT0+e3Rocm93IFd0fSl9fX1jb25zdCBIdD1mdW5jdGlvbih2dCl7cmV0dXJuIEJ0KHRoaXMsdnQsITEp''@;'; put 'put ''fSxfdD1mdW5jdGlvbih2dCl7cmV0dXJuIEJ0KHRoaXMsdnQsITApfTtmdW5jdGlvbiB0bih2dCxZKXtpZighdnQpcmV0dXJuITE7bGV0IGp0PSEwO1kmJnZvaWQgMCE9PVkudXNlRyYmKGp0PVkudXNlRyk7Y29uc3QgTHQ9WSYmWS52aDtsZXQgWHQ9ITA7WSYmdm9pZCAwIT09WS5jaGtEdXAm''@;'; put 'put ''JihYdD1ZLmNoa0R1cCk7bGV0IEt0PSExO1kmJnZvaWQgMCE9PVkucnQmJihLdD1ZLnJ0KTtsZXQgdXQ9dnQ7Zm9yKDt1dCYmIXV0Lmhhc093blByb3BlcnR5KE4pOyl1dD1vKHV0KTtpZighdXQmJnZ0W05dJiYodXQ9dnQpLCF1dHx8dXRbZnRdKXJldHVybiExO2NvbnN0IFd0PVkmJlkuZXZl''@;'; put 'put ''bnROYW1lVG9TdHJpbmcsSXQ9e30sVHQ9dXRbZnRdPXV0W05dLGd0PXV0W3goSildPXV0W0pdLFB0PXV0W3goc3QpXT11dFtzdF0sZW49dXRbeChvdCldPXV0W290XTtsZXQgSnQ7WSYmWS5wcmVwZW5kJiYoSnQ9dXRbeChZLnByZXBlbmQpXT11dFtZLnByZXBlbmRdKTtjb25zdCBadD1qdD9m''@;'; put 'put ''dW5jdGlvbihqKXtpZighSXQuaXNFeGlzdGluZylyZXR1cm4gVHQuY2FsbChJdC50YXJnZXQsSXQuZXZlbnROYW1lLEl0LmNhcHR1cmU/X3Q6SHQsSXQub3B0aW9ucyl9OmZ1bmN0aW9uKGope3JldHVybiBUdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsai5pbnZva2UsSXQub3B0aW9u''@;'; put 'put ''cyl9LGt0PWp0P2Z1bmN0aW9uKGope2lmKCFqLmlzUmVtb3ZlZCl7Y29uc3QgRz1ZdFtqLmV2ZW50TmFtZV07bGV0IHB0O0cmJihwdD1HW2ouY2FwdHVyZT95OkVdKTtjb25zdCBNdD1wdCYmai50YXJnZXRbcHRdO2lmKE10KWZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7Y3QrKylpZihNdFtj''@;'; put 'put ''dF09PT1qKXtNdC5zcGxpY2UoY3QsMSksai5pc1JlbW92ZWQ9ITAsai5yZW1vdmVBYm9ydExpc3RlbmVyJiYoai5yZW1vdmVBYm9ydExpc3RlbmVyKCksai5yZW1vdmVBYm9ydExpc3RlbmVyPW51bGwpLDA9PT1NdC5sZW5ndGgmJihqLmFsbFJlbW92ZWQ9ITAsai50YXJnZXRbcHRdPW51bGwp''@;'; put 'put ''O2JyZWFrfX1pZihqLmFsbFJlbW92ZWQpcmV0dXJuIGd0LmNhbGwoai50YXJnZXQsai5ldmVudE5hbWUsai5jYXB0dXJlP190Okh0LGoub3B0aW9ucyl9OmZ1bmN0aW9uKGope3JldHVybiBndC5jYWxsKGoudGFyZ2V0LGouZXZlbnROYW1lLGouaW52b2tlLGoub3B0aW9ucyl9LGRuPVk/LmRp''@;'; put 'put ''ZmZ8fGZ1bmN0aW9uKGosRyl7Y29uc3QgcHQ9dHlwZW9mIEc7cmV0dXJuImZ1bmN0aW9uIj09PXB0JiZqLmNhbGxiYWNrPT09R3x8Im9iamVjdCI9PT1wdCYmai5vcmlnaW5hbERlbGVnYXRlPT09R30sdm49Wm9uZVt4KCJVTlBBVENIRURfRVZFTlRTIildLHVuPVNbeCgiUEFTU0lWRV9FVkVO''@;'; put 'put ''VFMiKV0sVz1mdW5jdGlvbihqLEcscHQsTXQsY3Q9ITEsd3Q9ITEpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IFJ0PXRoaXN8fFM7bGV0IEZ0PWFyZ3VtZW50c1swXTtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRnQ9WS50cmFuc2ZlckV2ZW50TmFtZShGdCkpO2xldCAkdD1hcmd1bWVudHNb''@;'; put 'put ''MV07aWYoISR0KXJldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihaJiYidW5jYXVnaHRFeGNlcHRpb24iPT09RnQpcmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpO2xldCBVdD0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgJHQpe2lmKCEkdC5oYW5kbGVFdmVudClyZXR1cm4g''@;'; put 'put ''ai5hcHBseSh0aGlzLGFyZ3VtZW50cyk7VXQ9ITB9aWYoTHQmJiFMdChqLCR0LFJ0LGFyZ3VtZW50cykpcmV0dXJuO2NvbnN0IGduPSEhdW4mJi0xIT09dW4uaW5kZXhPZihGdCksbG49ZnVuY3Rpb24geihqKXtpZigib2JqZWN0Ij09dHlwZW9mIGomJm51bGwhPT1qKXtjb25zdCBHPXsuLi5q''@;'; put 'put ''fTtyZXR1cm4gai5zaWduYWwmJihHLnNpZ25hbD1qLnNpZ25hbCksR31yZXR1cm4gan0oZnVuY3Rpb24gQXQoaixHKXtyZXR1cm4gRz8iYm9vbGVhbiI9PXR5cGVvZiBqP3tjYXB0dXJlOmoscGFzc2l2ZTohMH06aj8ib2JqZWN0Ij09dHlwZW9mIGomJiExIT09ai5wYXNzaXZlP3suLi5qLHBh''@;'; put 'put ''c3NpdmU6ITB9Omo6e3Bhc3NpdmU6ITB9Omp9KGFyZ3VtZW50c1syXSxnbikpLFNuPWxuPy5zaWduYWw7aWYoU24/LmFib3J0ZWQpcmV0dXJuO2lmKHZuKWZvcihsZXQgZm49MDtmbjx2bi5sZW5ndGg7Zm4rKylpZihGdD09PXZuW2ZuXSlyZXR1cm4gZ24/ai5jYWxsKFJ0LEZ0LCR0LGxuKTpq''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtjb25zdCBBbj0hIWxuJiYoImJvb2xlYW4iPT10eXBlb2YgbG58fGxuLmNhcHR1cmUpLEZuPSEoIWxufHwib2JqZWN0IiE9dHlwZW9mIGxuKSYmbG4ub25jZSxqbj1ab25lLmN1cnJlbnQ7bGV0IHduPVl0W0Z0XTt3bnx8KG9uKEZ0LFd0KSx3bj1ZdFtG''@;'; put 'put ''dF0pO2NvbnN0IERuPXduW0FuP3k6RV07bGV0IEluLE9uPVJ0W0RuXSxibj0hMTtpZihPbil7aWYoYm49ITAsWHQpZm9yKGxldCBmbj0wO2ZuPE9uLmxlbmd0aDtmbisrKWlmKGRuKE9uW2ZuXSwkdCkpcmV0dXJufWVsc2UgT249UnRbRG5dPVtdO2NvbnN0IENuPVJ0LmNvbnN0cnVjdG9yLm5h''@;'; put 'put ''bWUsa249cG5bQ25dO2tuJiYoSW49a25bRnRdKSxJbnx8KEluPUNuK0crKFd0P1d0KEZ0KTpGdCkpLEl0Lm9wdGlvbnM9bG4sRm4mJihJdC5vcHRpb25zLm9uY2U9ITEpLEl0LnRhcmdldD1SdCxJdC5jYXB0dXJlPUFuLEl0LmV2ZW50TmFtZT1GdCxJdC5pc0V4aXN0aW5nPWJuO2NvbnN0IFBu''@;'; put 'put ''PWp0P0VuOnZvaWQgMDtQbiYmKFBuLnRhc2tEYXRhPUl0KSxTbiYmKEl0Lm9wdGlvbnMuc2lnbmFsPXZvaWQgMCk7Y29uc3QgY249am4uc2NoZWR1bGVFdmVudFRhc2soSW4sJHQsUG4scHQsTXQpO2lmKFNuKXtJdC5vcHRpb25zLnNpZ25hbD1Tbjtjb25zdCBmbj0oKT0+Y24uem9uZS5jYW5j''@;'; put 'put ''ZWxUYXNrKGNuKTtqLmNhbGwoU24sImFib3J0Iixmbix7b25jZTohMH0pLGNuLnJlbW92ZUFib3J0TGlzdGVuZXI9KCk9PlNuLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iixmbil9cmV0dXJuIEl0LnRhcmdldD1udWxsLFBuJiYoUG4udGFza0RhdGE9bnVsbCksRm4mJihJdC5vcHRpb25z''@;'; put 'put ''Lm9uY2U9ITApLCJib29sZWFuIiE9dHlwZW9mIGNuLm9wdGlvbnMmJihjbi5vcHRpb25zPWxuKSxjbi50YXJnZXQ9UnQsY24uY2FwdHVyZT1Bbixjbi5ldmVudE5hbWU9RnQsVXQmJihjbi5vcmlnaW5hbERlbGVnYXRlPSR0KSx3dD9Pbi51bnNoaWZ0KGNuKTpPbi5wdXNoKGNuKSxjdD9SdDp2''@;'; put 'put ''b2lkIDB9fTtyZXR1cm4gdXRbTl09VyhUdCxTdCxadCxrdCxLdCksSnQmJih1dFtydF09VyhKdCx4dCxmdW5jdGlvbihqKXtyZXR1cm4gSnQuY2FsbChJdC50YXJnZXQsSXQuZXZlbnROYW1lLGouaW52b2tlLEl0Lm9wdGlvbnMpfSxrdCxLdCwhMCkpLHV0W0pdPWZ1bmN0aW9uKCl7Y29uc3Qg''@;'; put 'put ''aj10aGlzfHxTO2xldCBHPWFyZ3VtZW50c1swXTtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ZLnRyYW5zZmVyRXZlbnROYW1lKEcpKTtjb25zdCBwdD1hcmd1bWVudHNbMl0sTXQ9ISFwdCYmKCJib29sZWFuIj09dHlwZW9mIHB0fHxwdC5jYXB0dXJlKSxjdD1hcmd1bWVudHNbMV07aWYo''@;'; put 'put ''IWN0KXJldHVybiBndC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoTHQmJiFMdChndCxjdCxqLGFyZ3VtZW50cykpcmV0dXJuO2NvbnN0IHd0PVl0W0ddO2xldCBSdDt3dCYmKFJ0PXd0W010P3k6RV0pO2NvbnN0IEZ0PVJ0JiZqW1J0XTtpZihGdClmb3IobGV0ICR0PTA7JHQ8RnQubGVuZ3Ro''@;'; put 'put ''OyR0Kyspe2NvbnN0IFV0PUZ0WyR0XTtpZihkbihVdCxjdCkpcmV0dXJuIEZ0LnNwbGljZSgkdCwxKSxVdC5pc1JlbW92ZWQ9ITAsMCE9PUZ0Lmxlbmd0aHx8KFV0LmFsbFJlbW92ZWQ9ITAsaltSdF09bnVsbCxNdHx8InN0cmluZyIhPXR5cGVvZiBHKXx8KGpbZysiT05fUFJPUEVSVFkiK0dd''@;'; put 'put ''PW51bGwpLFV0LnpvbmUuY2FuY2VsVGFzayhVdCksS3Q/ajp2b2lkIDB9cmV0dXJuIGd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdXRbc3RdPWZ1bmN0aW9uKCl7Y29uc3Qgaj10aGlzfHxTO2xldCBHPWFyZ3VtZW50c1swXTtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ZLnRyYW5zZmVy''@;'; put 'put ''RXZlbnROYW1lKEcpKTtjb25zdCBwdD1bXSxNdD15bihqLFd0P1d0KEcpOkcpO2ZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7Y3QrKyl7Y29uc3Qgd3Q9TXRbY3RdO3B0LnB1c2god3Qub3JpZ2luYWxEZWxlZ2F0ZT93dC5vcmlnaW5hbERlbGVnYXRlOnd0LmNhbGxiYWNrKX1yZXR1cm4gcHR9''@;'; put 'put ''LHV0W290XT1mdW5jdGlvbigpe2NvbnN0IGo9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07aWYoRyl7WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9WXRbR107aWYocHQpe2NvbnN0IHd0PWpbcHRbRV1dLFJ0PWpbcHRbeV1dO2lm''@;'; put 'put ''KHd0KXtjb25zdCBGdD13dC5zbGljZSgpO2ZvcihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRdO3RoaXNbSl0uY2FsbCh0aGlzLEcsVXQub3JpZ2luYWxEZWxlZ2F0ZT9VdC5vcmlnaW5hbERlbGVnYXRlOlV0LmNhbGxiYWNrLFV0Lm9wdGlvbnMpfX1pZihSdCl7''@;'; put 'put ''Y29uc3QgRnQ9UnQuc2xpY2UoKTtmb3IobGV0ICR0PTA7JHQ8RnQubGVuZ3RoOyR0Kyspe2NvbnN0IFV0PUZ0WyR0XTt0aGlzW0pdLmNhbGwodGhpcyxHLFV0Lm9yaWdpbmFsRGVsZWdhdGU/VXQub3JpZ2luYWxEZWxlZ2F0ZTpVdC5jYWxsYmFjayxVdC5vcHRpb25zKX19fX1lbHNle2NvbnN0''@;'; put 'put ''IHB0PU9iamVjdC5rZXlzKGopO2ZvcihsZXQgTXQ9MDtNdDxwdC5sZW5ndGg7TXQrKyl7Y29uc3Qgd3Q9eG4uZXhlYyhwdFtNdF0pO2xldCBSdD13dCYmd3RbMV07UnQmJiJyZW1vdmVMaXN0ZW5lciIhPT1SdCYmdGhpc1tvdF0uY2FsbCh0aGlzLFJ0KX10aGlzW290XS5jYWxsKHRoaXMsInJl''@;'; put 'put ''bW92ZUxpc3RlbmVyIil9aWYoS3QpcmV0dXJuIHRoaXN9LE90KHV0W05dLFR0KSxPdCh1dFtKXSxndCksZW4mJk90KHV0W290XSxlbiksUHQmJk90KHV0W3N0XSxQdCksITB9bGV0IFZ0PVtdO2ZvcihsZXQgdnQ9MDt2dDxMLmxlbmd0aDt2dCsrKVZ0W3Z0XT10bihMW3Z0XSxPKTtyZXR1cm4g''@;'; put 'put ''VnR9ZnVuY3Rpb24geW4oUyxSKXtpZighUil7Y29uc3QgSj1bXTtmb3IobGV0IHN0IGluIFMpe2NvbnN0IG90PXhuLmV4ZWMoc3QpO2xldCBmdD1vdCYmb3RbMV07aWYoZnQmJighUnx8ZnQ9PT1SKSl7Y29uc3QgU3Q9U1tzdF07aWYoU3QpZm9yKGxldCBydD0wO3J0PFN0Lmxlbmd0aDtydCsr''@;'; put 'put ''KUoucHVzaChTdFtydF0pfX1yZXR1cm4gSn1sZXQgTD1ZdFtSXTtMfHwob24oUiksTD1ZdFtSXSk7Y29uc3QgTz1TW0xbRV1dLE49U1tMW3ldXTtyZXR1cm4gTz9OP08uY29uY2F0KE4pOk8uc2xpY2UoKTpOP04uc2xpY2UoKTpbXX1mdW5jdGlvbiBUbihTLFIpe2NvbnN0IEw9Uy5FdmVudDtM''@;'; put 'put ''JiZMLnByb3RvdHlwZSYmUi5wYXRjaE1ldGhvZChMLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixPPT5mdW5jdGlvbihOLEope05baG5dPSEwLE8mJk8uYXBwbHkoTixKKX0pfWNvbnN0IHI9eCgiem9uZVRhc2siKTtmdW5jdGlvbiBhKFMsUixMLE8pe2xldCBOPW51bGws''@;'; put 'put ''Sj1udWxsO0wrPU87Y29uc3Qgc3Q9e307ZnVuY3Rpb24gb3QoU3Qpe2NvbnN0IHJ0PVN0LmRhdGE7cnQuYXJnc1swXT1mdW5jdGlvbigpe3JldHVybiBTdC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjb25zdCB4dD1OLmFwcGx5KFMscnQuYXJncyk7cmV0dXJuIHNuKHh0KT9ydC5o''@;'; put 'put ''YW5kbGVJZD14dDoocnQuaGFuZGxlPXh0LHJ0LmlzUmVmcmVzaGFibGU9R3QoeHQucmVmcmVzaCkpLFN0fWZ1bmN0aW9uIGZ0KFN0KXtjb25zdHtoYW5kbGU6cnQsaGFuZGxlSWQ6eHR9PVN0LmRhdGE7cmV0dXJuIEouY2FsbChTLHJ0Pz94dCl9Tj1kdChTLFIrPU8sU3Q9PmZ1bmN0aW9uKHJ0''@;'; put 'put ''LHh0KXtpZihHdCh4dFswXSkpe2NvbnN0IGJ0PXtpc1JlZnJlc2hhYmxlOiExLGlzUGVyaW9kaWM6IkludGVydmFsIj09PU8sZGVsYXk6IlRpbWVvdXQiPT09T3x8IkludGVydmFsIj09PU8/eHRbMV18fDA6dm9pZCAwLGFyZ3M6eHR9LEJ0PXh0WzBdO3h0WzBdPWZ1bmN0aW9uKCl7dHJ5e3Jl''@;'; put 'put ''dHVybiBCdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtjb25zdHtoYW5kbGU6anQsaGFuZGxlSWQ6THQsaXNQZXJpb2RpYzpYdCxpc1JlZnJlc2hhYmxlOkt0fT1idDshWHQmJiFLdCYmKEx0P2RlbGV0ZSBzdFtMdF06anQmJihqdFtyXT1udWxsKSl9fTtjb25zdCBIdD1GKFIseHRb''@;'; put 'put ''MF0sYnQsb3QsZnQpO2lmKCFIdClyZXR1cm4gSHQ7Y29uc3R7aGFuZGxlSWQ6X3QsaGFuZGxlOnRuLGlzUmVmcmVzaGFibGU6VnQsaXNQZXJpb2RpYzp2dH09SHQuZGF0YTtpZihfdClzdFtfdF09SHQ7ZWxzZSBpZih0biYmKHRuW3JdPUh0LFZ0JiYhdnQpKXtjb25zdCBZPXRuLnJlZnJlc2g7''@;'; put 'put ''dG4ucmVmcmVzaD1mdW5jdGlvbigpe2NvbnN0e3pvbmU6anQsc3RhdGU6THR9PUh0O3JldHVybiJub3RTY2hlZHVsZWQiPT09THQ/KEh0Ll9zdGF0ZT0ic2NoZWR1bGVkIixqdC5fdXBkYXRlVGFza0NvdW50KEh0LDEpKToicnVubmluZyI9PT1MdCYmKEh0Ll9zdGF0ZT0ic2NoZWR1bGluZyIp''@;'; put 'put ''LFkuY2FsbCh0aGlzKX19cmV0dXJuIHRuPz9fdD8/SHR9cmV0dXJuIFN0LmFwcGx5KFMseHQpfSksSj1kdChTLEwsU3Q9PmZ1bmN0aW9uKHJ0LHh0KXtjb25zdCBidD14dFswXTtsZXQgQnQ7c24oYnQpPyhCdD1zdFtidF0sZGVsZXRlIHN0W2J0XSk6KEJ0PWJ0Py5bcl0sQnQ/YnRbcl09bnVs''@;'; put 'put ''bDpCdD1idCksQnQ/LnR5cGU/QnQuY2FuY2VsRm4mJkJ0LnpvbmUuY2FuY2VsVGFzayhCdCk6U3QuYXBwbHkoUyx4dCl9KX1mdW5jdGlvbiAkKFMsUixMKXtpZighTHx8MD09PUwubGVuZ3RoKXJldHVybiBSO2NvbnN0IE89TC5maWx0ZXIoSj0+Si50YXJnZXQ9PT1TKTtpZigwPT09Ty5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIFI7Y29uc3QgTj1PWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIFIuZmlsdGVyKEo9Pi0xPT09Ti5pbmRleE9mKEopKX1mdW5jdGlvbiBEdChTLFIsTCxPKXtTJiZldChTLCQoUyxSLEwpLE8pfWZ1bmN0aW9uIF8oUyl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h''@;'; put 'put ''bWVzKFMpLmZpbHRlcihSPT5SLnN0YXJ0c1dpdGgoIm9uIikmJlIubGVuZ3RoPjIpLm1hcChSPT5SLnN1YnN0cmluZygyKSl9ZnVuY3Rpb24gcXQoUyxSLEwsTyxOKXtjb25zdCBKPVpvbmUuX19zeW1ib2xfXyhPKTtpZihSW0pdKXJldHVybjtjb25zdCBzdD1SW0pdPVJbT107UltPXT1mdW5j''@;'; put 'put ''dGlvbihvdCxmdCxTdCl7cmV0dXJuIGZ0JiZmdC5wcm90b3R5cGUmJk4uZm9yRWFjaChmdW5jdGlvbihydCl7Y29uc3QgeHQ9YCR7TH0uJHtPfTo6YCtydCxidD1mdC5wcm90b3R5cGU7dHJ5e2lmKGJ0Lmhhc093blByb3BlcnR5KHJ0KSl7Y29uc3QgQnQ9Uy5PYmplY3RHZXRPd25Qcm9wZXJ0''@;'; put 'put ''eURlc2NyaXB0b3IoYnQscnQpO0J0JiZCdC52YWx1ZT8oQnQudmFsdWU9Uy53cmFwV2l0aEN1cnJlbnRab25lKEJ0LnZhbHVlLHh0KSxTLl9yZWRlZmluZVByb3BlcnR5KGZ0LnByb3RvdHlwZSxydCxCdCkpOmJ0W3J0XSYmKGJ0W3J0XT1TLndyYXBXaXRoQ3VycmVudFpvbmUoYnRbcnRdLHh0''@;'; put 'put ''KSl9ZWxzZSBidFtydF0mJihidFtydF09Uy53cmFwV2l0aEN1cnJlbnRab25lKGJ0W3J0XSx4dCkpfWNhdGNoe319KSxzdC5jYWxsKFIsb3QsZnQsU3QpfSxTLmF0dGFjaE9yaWdpblRvUGF0Y2hlZChSW09dLHN0KX1jb25zdCBSbj1mdW5jdGlvbiBuKCl7Y29uc3QgUz1nbG9iYWxUaGlzLFI9''@;'; put 'put ''ITA9PT1TW2YoImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKFMuWm9uZSYmKFJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBTLlpvbmUuX19zeW1ib2xfXykpdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3JldHVybiBTLlpvbmU/Pz1mdW5jdGlvbiB0KCl7Y29uc3Qg''@;'; put 'put ''Uz1jLnBlcmZvcm1hbmNlO2Z1bmN0aW9uIFIoQXQpe1MmJlMubWFyayYmUy5tYXJrKEF0KX1mdW5jdGlvbiBMKEF0LGF0KXtTJiZTLm1lYXN1cmUmJlMubWVhc3VyZShBdCxhdCl9UigiWm9uZSIpO2xldCBPPSgoKT0+e2NsYXNzIEF0e3N0YXRpYyBfX3N5bWJvbF9fPWY7c3RhdGljIGFzc2Vy''@;'; put 'put ''dFpvbmVQYXRjaGVkKCl7aWYoYy5Qcm9taXNlIT09SXQuWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBs''@;'; put 'put ''aWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJl''@;'; put 'put ''Zm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfXN0YXRpYyBnZXQgcm9vdCgpe2xldCBJPUF0LmN1cnJlbnQ7Zm9yKDtJLnBhcmVudDspST1JLnBhcmVudDtyZXR1cm4gSX1zdGF0aWMgZ2V0IGN1cnJlbnQoKXtyZXR1cm4gZ3Quem9uZX1zdGF0aWMgZ2V0IGN1cnJlbnRUYXNrKCl7cmV0dXJuIFB0''@;'; put 'put ''fXN0YXRpYyBfX2xvYWRfcGF0Y2goSSxDLGh0PSExKXtpZihJdC5oYXNPd25Qcm9wZXJ0eShJKSl7Y29uc3QgRXQ9ITA9PT1jW2YoImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKCFodCYmRXQpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK0kpfWVsc2UgaWYoIWNb''@;'; put 'put ''Il9fWm9uZV9kaXNhYmxlXyIrSV0pe2NvbnN0IEV0PSJab25lOiIrSTtSKEV0KSxJdFtJXT1DKGMsQXQsVHQpLEwoRXQsRXQpfX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfV9wYXJlbnQ7X25hbWU7X3Byb3BlcnRpZXM7X3pv''@;'; put 'put ''bmVEZWxlZ2F0ZTtjb25zdHJ1Y3RvcihJLEMpe3RoaXMuX3BhcmVudD1JLHRoaXMuX25hbWU9Qz9DLm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPUMmJkMucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBKKHRoaXMsdGhpcy5fcGFyZW50JiZ0''@;'; put 'put ''aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxDKX1nZXQoSSl7Y29uc3QgQz10aGlzLmdldFpvbmVXaXRoKEkpO2lmKEMpcmV0dXJuIEMuX3Byb3BlcnRpZXNbSV19Z2V0Wm9uZVdpdGgoSSl7bGV0IEM9dGhpcztmb3IoO0M7KXtpZihDLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KEkpKXJl''@;'; put 'put ''dHVybiBDO0M9Qy5fcGFyZW50fXJldHVybiBudWxsfWZvcmsoSSl7aWYoIUkpdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcyxJKX13cmFwKEksQyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEkpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK0kpO2NvbnN0IGh0PXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxJLEMpLEV0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEV0LnJ1bkd1YXJkZWQoaHQsdGhpcyxhcmd1bWVudHMsQyl9fXJ1bihJLEMsaHQs''@;'; put 'put ''RXQpe2d0PXtwYXJlbnQ6Z3Qsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxJLEMsaHQsRXQpfWZpbmFsbHl7Z3Q9Z3QucGFyZW50fX1ydW5HdWFyZGVkKEksQz1udWxsLGh0LEV0KXtndD17cGFyZW50Omd0LHpvbmU6dGhpc307dHJ5e3RyeXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLEksQyxodCxFdCl9Y2F0Y2goWnQpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLFp0KSl0aHJvdyBadH19ZmluYWxseXtndD1ndC5wYXJlbnR9fXJ1blRhc2soSSxDLGh0KXtpZihJLnpvbmUhPXRoaXMp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKEkuem9uZXx8dG4pLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2NvbnN0IEV0PUkse3R5cGU6WnQsZGF0YTp7aXNQZXJpb2RpYzpr''@;'; put 'put ''dD0hMSxpc1JlZnJlc2hhYmxlOm1uPSExfT17fX09STtpZihJLnN0YXRlPT09VnQmJihadD09PVd0fHxadD09PXV0KSlyZXR1cm47Y29uc3QgZG49SS5zdGF0ZSE9anQ7ZG4mJkV0Ll90cmFuc2l0aW9uVG8oanQsWSk7Y29uc3Qgdm49UHQ7UHQ9RXQsZ3Q9e3BhcmVudDpndCx6b25lOnRoaXN9''@;'; put 'put ''O3RyeXtadD09dXQmJkkuZGF0YSYmIWt0JiYhbW4mJihJLmNhbmNlbEZuPXZvaWQgMCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLEV0LEMsaHQpfWNhdGNoKHVuKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx1bikpdGhyb3cg''@;'; put 'put ''dW59fWZpbmFsbHl7Y29uc3QgdW49SS5zdGF0ZTtpZih1biE9PVZ0JiZ1biE9PVh0KWlmKFp0PT1XdHx8a3R8fG1uJiZ1bj09PXZ0KWRuJiZFdC5fdHJhbnNpdGlvblRvKFksanQsdnQpO2Vsc2V7Y29uc3Qgej1FdC5fem9uZURlbGVnYXRlczt0aGlzLl91cGRhdGVUYXNrQ291bnQoRXQsLTEp''@;'; put 'put ''LGRuJiZFdC5fdHJhbnNpdGlvblRvKFZ0LGp0LFZ0KSxtbiYmKEV0Ll96b25lRGVsZWdhdGVzPXopfWd0PWd0LnBhcmVudCxQdD12bn19c2NoZWR1bGVUYXNrKEkpe2lmKEkuem9uZSYmSS56b25lIT09dGhpcyl7bGV0IGh0PXRoaXM7Zm9yKDtodDspe2lmKGh0PT09SS56b25lKXRocm93IEVy''@;'; put 'put ''cm9yKGBjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAke3RoaXMubmFtZX0gd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgJHtJLnpvbmUubmFtZX1gKTtodD1odC5wYXJlbnR9fUkuX3RyYW5zaXRpb25Ubyh2dCxWdCk7Y29uc3QgQz1bXTtJLl96b25lRGVsZWdh''@;'; put 'put ''dGVzPUMsSS5fem9uZT10aGlzO3RyeXtJPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxJKX1jYXRjaChodCl7dGhyb3cgSS5fdHJhbnNpdGlvblRvKFh0LHZ0LFZ0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxodCksaHR9cmV0dXJuIEkuX3pvbmVE''@;'; put 'put ''ZWxlZ2F0ZXM9PT1DJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoSSwxKSxJLnN0YXRlPT12dCYmSS5fdHJhbnNpdGlvblRvKFksdnQpLEl9c2NoZWR1bGVNaWNyb1Rhc2soSSxDLGh0LEV0KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHN0KEt0LEksQyxodCxFdCx2b2lkIDApKX1zY2hl''@;'; put 'put ''ZHVsZU1hY3JvVGFzayhJLEMsaHQsRXQsWnQpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgc3QodXQsSSxDLGh0LEV0LFp0KSl9c2NoZWR1bGVFdmVudFRhc2soSSxDLGh0LEV0LFp0KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHN0KFd0LEksQyxodCxFdCxadCkpfWNhbmNl''@;'; put 'put ''bFRhc2soSSl7aWYoSS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhJLnpvbmV8fHRuKS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihJLnN0''@;'; put 'put ''YXRlPT09WXx8SS5zdGF0ZT09PWp0KXtJLl90cmFuc2l0aW9uVG8oTHQsWSxqdCk7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsSSl9Y2F0Y2goQyl7dGhyb3cgSS5fdHJhbnNpdGlvblRvKFh0LEx0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxD''@;'; put 'put ''KSxDfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQoSSwtMSksSS5fdHJhbnNpdGlvblRvKFZ0LEx0KSxJLnJ1bkNvdW50PS0xLEl9fV91cGRhdGVUYXNrQ291bnQoSSxDKXtjb25zdCBodD1JLl96b25lRGVsZWdhdGVzOy0xPT1DJiYoSS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IobGV0''@;'; put 'put ''IEV0PTA7RXQ8aHQubGVuZ3RoO0V0KyspaHRbRXRdLl91cGRhdGVUYXNrQ291bnQoSS50eXBlLEMpfX1yZXR1cm4gQXR9KSgpO2NvbnN0IE49e25hbWU6IiIsb25IYXNUYXNrOihBdCxhdCxJLEMpPT5BdC5oYXNUYXNrKEksQyksb25TY2hlZHVsZVRhc2s6KEF0LGF0LEksQyk9PkF0LnNjaGVk''@;'; put 'put ''dWxlVGFzayhJLEMpLG9uSW52b2tlVGFzazooQXQsYXQsSSxDLGh0LEV0KT0+QXQuaW52b2tlVGFzayhJLEMsaHQsRXQpLG9uQ2FuY2VsVGFzazooQXQsYXQsSSxDKT0+QXQuY2FuY2VsVGFzayhJLEMpfTtjbGFzcyBKe2dldCB6b25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X3pvbmU7X3Rhc2tD''@;'; put 'put ''b3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfTtfcGFyZW50RGVsZWdhdGU7X2ZvcmtEbGd0O19mb3JrWlM7X2ZvcmtDdXJyWm9uZTtfaW50ZXJjZXB0RGxndDtfaW50ZXJjZXB0WlM7X2ludGVyY2VwdEN1cnJab25lO19pbnZva2VEbGd0O19pbnZva2VaUztfaW52''@;'; put 'put ''b2tlQ3VyclpvbmU7X2hhbmRsZUVycm9yRGxndDtfaGFuZGxlRXJyb3JaUztfaGFuZGxlRXJyb3JDdXJyWm9uZTtfc2NoZWR1bGVUYXNrRGxndDtfc2NoZWR1bGVUYXNrWlM7X3NjaGVkdWxlVGFza0N1cnJab25lO19pbnZva2VUYXNrRGxndDtfaW52b2tlVGFza1pTO19pbnZva2VUYXNrQ3Vy''@;'; put 'put ''clpvbmU7X2NhbmNlbFRhc2tEbGd0O19jYW5jZWxUYXNrWlM7X2NhbmNlbFRhc2tDdXJyWm9uZTtfaGFzVGFza0RsZ3Q7X2hhc1Rhc2tEbGd0T3duZXI7X2hhc1Rhc2taUztfaGFzVGFza0N1cnJab25lO2NvbnN0cnVjdG9yKGF0LEksQyl7dGhpcy5fem9uZT1hdCx0aGlzLl9wYXJlbnREZWxl''@;'; put 'put ''Z2F0ZT1JLHRoaXMuX2ZvcmtaUz1DJiYoQyYmQy5vbkZvcms/QzpJLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PUMmJihDLm9uRm9yaz9JOkkuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9QyYmKEMub25Gb3JrP3RoaXMuX3pvbmU6SS5fZm9ya0N1cnJab25lKSx0aGlzLl9pbnRlcmNl''@;'; put 'put ''cHRaUz1DJiYoQy5vbkludGVyY2VwdD9DOkkuX2ludGVyY2VwdFpTKSx0aGlzLl9pbnRlcmNlcHREbGd0PUMmJihDLm9uSW50ZXJjZXB0P0k6SS5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9QyYmKEMub25JbnRlcmNlcHQ/dGhpcy5fem9uZTpJLl9pbnRlcmNlcHRD''@;'; put 'put ''dXJyWm9uZSksdGhpcy5faW52b2tlWlM9QyYmKEMub25JbnZva2U/QzpJLl9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1DJiYoQy5vbkludm9rZT9JOkkuX2ludm9rZURsZ3QpLHRoaXMuX2ludm9rZUN1cnJab25lPUMmJihDLm9uSW52b2tlP3RoaXMuX3pvbmU6SS5faW52b2tlQ3Vyclpv''@;'; put 'put ''bmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9QyYmKEMub25IYW5kbGVFcnJvcj9DOkkuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1DJiYoQy5vbkhhbmRsZUVycm9yP0k6SS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPUMmJihDLm9uSGFu''@;'; put 'put ''ZGxlRXJyb3I/dGhpcy5fem9uZTpJLl9oYW5kbGVFcnJvckN1cnJab25lKSx0aGlzLl9zY2hlZHVsZVRhc2taUz1DJiYoQy5vblNjaGVkdWxlVGFzaz9DOkkuX3NjaGVkdWxlVGFza1pTKSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PUMmJihDLm9uU2NoZWR1bGVUYXNrP0k6SS5fc2NoZWR1bGVU''@;'; put 'put ''YXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9QyYmKEMub25TY2hlZHVsZVRhc2s/dGhpcy5fem9uZTpJLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSksdGhpcy5faW52b2tlVGFza1pTPUMmJihDLm9uSW52b2tlVGFzaz9DOkkuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFz''@;'; put 'put ''a0RsZ3Q9QyYmKEMub25JbnZva2VUYXNrP0k6SS5faW52b2tlVGFza0RsZ3QpLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT1DJiYoQy5vbkludm9rZVRhc2s/dGhpcy5fem9uZTpJLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1DJiYoQy5vbkNhbmNlbFRhc2s/QzpJ''@;'; put 'put ''Ll9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PUMmJihDLm9uQ2FuY2VsVGFzaz9JOkkuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9QyYmKEMub25DYW5jZWxUYXNrP3RoaXMuX3pvbmU6SS5fY2FuY2VsVGFza0N1cnJab25lKSx0aGlzLl9oYXNU''@;'; put 'put ''YXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDtjb25zdCBodD1DJiZDLm9uSGFzVGFzazsoaHR8fEkmJkkuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9aHQ/QzpOLHRoaXMu''@;'; put 'put ''X2hhc1Rhc2tEbGd0PUksdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT10aGlzLl96b25lLEMub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz1OLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9SSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJy''@;'; put 'put ''Wm9uZT10aGlzLl96b25lKSxDLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1OLHRoaXMuX2ludm9rZVRhc2tEbGd0PUksdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuX3pvbmUpLEMub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPU4sdGhpcy5fY2FuY2Vs''@;'; put 'put ''VGFza0RsZ3Q9SSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9dGhpcy5fem9uZSkpfWZvcmsoYXQsSSl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSxhdCxJKTpuZXcgTyhhdCxJKX1pbnRlcmNlcHQoYXQsSSxDKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxhdCxJLEMpOkl9aW52b2tlKGF0LEksQyxodCxFdCl7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9u''@;'; put 'put ''SW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsYXQsSSxDLGh0LEV0KTpJLmFwcGx5KEMsaHQpfWhhbmRsZUVycm9yKGF0LEkpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxl''@;'; put 'put ''RXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsYXQsSSl9c2NoZWR1bGVUYXNrKGF0LEkpe2xldCBDPUk7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZDLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksQz10aGlzLl9z''@;'; put 'put ''Y2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLGF0LEkpLEN8fChDPUkpO2Vsc2UgaWYoSS5zY2hlZHVsZUZuKUkuc2NoZWR1bGVGbihJKTtlbHNle2lmKEkudHlwZSE9S3QpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTtIdChJKX1yZXR1cm4gQ31pbnZva2VUYXNrKGF0LEksQyxodCl7cmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUz90aGlzLl9pbnZva2VUYXNrWlMub25JbnZva2VUYXNrKHRoaXMuX2ludm9rZVRhc2tEbGd0LHRoaXMuX2ludm9rZVRhc2tD''@;'; put 'put ''dXJyWm9uZSxhdCxJLEMsaHQpOkkuY2FsbGJhY2suYXBwbHkoQyxodCl9Y2FuY2VsVGFzayhhdCxJKXtsZXQgQztpZih0aGlzLl9jYW5jZWxUYXNrWlMpQz10aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9u''@;'; put 'put ''ZSxhdCxJKTtlbHNle2lmKCFJLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7Qz1JLmNhbmNlbEZuKEkpfXJldHVybiBDfWhhc1Rhc2soYXQsSSl7dHJ5e3RoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNr''@;'; put 'put ''RGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsYXQsSSl9Y2F0Y2goQyl7dGhpcy5oYW5kbGVFcnJvcihhdCxDKX19X3VwZGF0ZVRhc2tDb3VudChhdCxJKXtjb25zdCBDPXRoaXMuX3Rhc2tDb3VudHMsaHQ9Q1thdF0sRXQ9Q1thdF09aHQrSTtpZihFdDwwKXRocm93IG5ldyBFcnJvcigiTW9y''@;'; put 'put ''ZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPWh0JiYwIT1FdHx8dGhpcy5oYXNUYXNrKHRoaXMuX3pvbmUse21pY3JvVGFzazpDLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpDLm1hY3JvVGFzaz4wLGV2ZW50VGFzazpDLmV2ZW50VGFzaz4wLGNoYW5nZTphdH0pfX1j''@;'; put 'put ''bGFzcyBzdHt0eXBlO3NvdXJjZTtpbnZva2U7Y2FsbGJhY2s7ZGF0YTtzY2hlZHVsZUZuO2NhbmNlbEZuO196b25lPW51bGw7cnVuQ291bnQ9MDtfem9uZURlbGVnYXRlcz1udWxsO19zdGF0ZT0ibm90U2NoZWR1bGVkIjtjb25zdHJ1Y3RvcihhdCxJLEMsaHQsRXQsWnQpe2lmKHRoaXMudHlw''@;'; put 'put ''ZT1hdCx0aGlzLnNvdXJjZT1JLHRoaXMuZGF0YT1odCx0aGlzLnNjaGVkdWxlRm49RXQsdGhpcy5jYW5jZWxGbj1adCwhQyl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1DO2NvbnN0IGt0PXRoaXM7dGhpcy5pbnZva2U9YXQ9PT1XdCYm''@;'; put 'put ''aHQmJmh0LnVzZUc/c3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiBzdC5pbnZva2VUYXNrLmNhbGwoYyxrdCx0aGlzLGFyZ3VtZW50cyl9fXN0YXRpYyBpbnZva2VUYXNrKGF0LEksQyl7YXR8fChhdD10aGlzKSxlbisrO3RyeXtyZXR1cm4gYXQucnVuQ291bnQrKyxhdC56b25lLnJ1''@;'; put 'put ''blRhc2soYXQsSSxDKX1maW5hbGx5ezE9PWVuJiZfdCgpLGVuLS19fWdldCB6b25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuX3N0YXRlfWNhbmNlbFNjaGVkdWxlUmVxdWVzdCgpe3RoaXMuX3RyYW5zaXRpb25UbyhWdCx2dCl9X3RyYW5zaXRpb25Ubyhh''@;'; put 'put ''dCxJLEMpe2lmKHRoaXMuX3N0YXRlIT09SSYmdGhpcy5fc3RhdGUhPT1DKXRocm93IG5ldyBFcnJvcihgJHt0aGlzLnR5cGV9ICcke3RoaXMuc291cmNlfSc6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnJHthdH0nLCBleHBlY3Rpbmcgc3RhdGUgJyR7SX0nJHtDPyIgb3IgJyIrQysiJyI6IiJ9''@;'; put 'put ''LCB3YXMgJyR7dGhpcy5fc3RhdGV9Jy5gKTt0aGlzLl9zdGF0ZT1hdCxhdD09VnQmJih0aGlzLl96b25lRGVsZWdhdGVzPW51bGwpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuZGF0YSYmdHlwZW9mIHRoaXMuZGF0YS5oYW5kbGVJZDwidSI/dGhpcy5kYXRhLmhhbmRsZUlkLnRvU3RyaW5nKCk6''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfXRvSlNPTigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fX1jb25zdCBvdD1mKCJzZXRU''@;'; put 'put ''aW1lb3V0IiksZnQ9ZigiUHJvbWlzZSIpLFN0PWYoInRoZW4iKTtsZXQgYnQscnQ9W10seHQ9ITE7ZnVuY3Rpb24gQnQoQXQpe2lmKGJ0fHxjW2Z0XSYmKGJ0PWNbZnRdLnJlc29sdmUoMCkpLGJ0KXtsZXQgYXQ9YnRbU3RdO2F0fHwoYXQ9YnQudGhlbiksYXQuY2FsbChidCxBdCl9ZWxzZSBj''@;'; put 'put ''W290XShBdCwwKX1mdW5jdGlvbiBIdChBdCl7MD09PWVuJiYwPT09cnQubGVuZ3RoJiZCdChfdCksQXQmJnJ0LnB1c2goQXQpfWZ1bmN0aW9uIF90KCl7aWYoIXh0KXtmb3IoeHQ9ITA7cnQubGVuZ3RoOyl7Y29uc3QgQXQ9cnQ7cnQ9W107Zm9yKGxldCBhdD0wO2F0PEF0Lmxlbmd0aDthdCsr''@;'; put 'put ''KXtjb25zdCBJPUF0W2F0XTt0cnl7SS56b25lLnJ1blRhc2soSSxudWxsLG51bGwpfWNhdGNoKEMpe1R0Lm9uVW5oYW5kbGVkRXJyb3IoQyl9fX1UdC5taWNyb3Rhc2tEcmFpbkRvbmUoKSx4dD0hMX19Y29uc3QgdG49e25hbWU6Ik5PIFpPTkUifSxWdD0ibm90U2NoZWR1bGVkIix2dD0ic2No''@;'; put 'put ''ZWR1bGluZyIsWT0ic2NoZWR1bGVkIixqdD0icnVubmluZyIsTHQ9ImNhbmNlbGluZyIsWHQ9InVua25vd24iLEt0PSJtaWNyb1Rhc2siLHV0PSJtYWNyb1Rhc2siLFd0PSJldmVudFRhc2siLEl0PXt9LFR0PXtzeW1ib2w6ZixjdXJyZW50Wm9uZUZyYW1lOigpPT5ndCxvblVuaGFuZGxlZEVy''@;'; put 'put ''cm9yOkp0LG1pY3JvdGFza0RyYWluRG9uZTpKdCxzY2hlZHVsZU1pY3JvVGFzazpIdCxzaG93VW5jYXVnaHRFcnJvcjooKT0+IU9bZigiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXSxwYXRjaEV2ZW50VGFyZ2V0OigpPT5bXSxwYXRjaE9uUHJvcGVydGllczpKdCxwYXRjaE1l''@;'; put 'put ''dGhvZDooKT0+SnQsYmluZEFyZ3VtZW50czooKT0+W10scGF0Y2hUaGVuOigpPT5KdCxwYXRjaE1hY3JvVGFzazooKT0+SnQscGF0Y2hFdmVudFByb3RvdHlwZTooKT0+SnQsaXNJRU9yRWRnZTooKT0+ITEsZ2V0R2xvYmFsT2JqZWN0czooKT0+e30sT2JqZWN0RGVmaW5lUHJvcGVydHk6KCk9''@;'; put 'put ''Pkp0LE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjooKT0+e30sT2JqZWN0Q3JlYXRlOigpPT57fSxBcnJheVNsaWNlOigpPT5bXSxwYXRjaENsYXNzOigpPT5KdCx3cmFwV2l0aEN1cnJlbnRab25lOigpPT5KdCxmaWx0ZXJQcm9wZXJ0aWVzOigpPT5bXSxhdHRhY2hPcmlnaW5Ub1Bh''@;'; put 'put ''dGNoZWQ6KCk9Pkp0LF9yZWRlZmluZVByb3BlcnR5OigpPT5KdCxwYXRjaENhbGxiYWNrczooKT0+SnQsbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6QnR9O2xldCBndD17cGFyZW50Om51bGwsem9uZTpuZXcgTyhudWxsLG51bGwpfSxQdD1udWxsLGVuPTA7ZnVuY3Rpb24gSnQoKXt9cmV0dXJu''@;'; put 'put ''IEwoIlpvbmUiLCJab25lIiksT30oKSxTLlpvbmV9KCk7KGZ1bmN0aW9uIE1uKFMpeyhmdW5jdGlvbiBpdChTKXtTLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsKFIsTCxPKT0+e2NvbnN0IE49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixKPU9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSxvdD1PLnN5bWJvbCxmdD1bXSxTdD0hMSE9PVJbb3QoIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0scnQ9b3QoIlByb21pc2UiKSx4dD1vdCgidGhlbiIpO08ub25VbmhhbmRsZWRFcnJvcj16PT57aWYoTy5zaG93VW5jYXVnaHRFcnJvcigp''@;'; put 'put ''KXtjb25zdCBXPXomJnoucmVqZWN0aW9uO1c/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsVyBpbnN0YW5jZW9mIEVycm9yP1cubWVzc2FnZTpXLCI7IFpvbmU6Iix6LnpvbmUubmFtZSwiOyBUYXNrOiIsei50YXNrJiZ6LnRhc2suc291cmNlLCI7IFZhbHVl''@;'; put 'put ''OiIsVyxXIGluc3RhbmNlb2YgRXJyb3I/Vy5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3Ioeil9fSxPLm1pY3JvdGFza0RyYWluRG9uZT0oKT0+e2Zvcig7ZnQubGVuZ3RoOyl7Y29uc3Qgej1mdC5zaGlmdCgpO3RyeXt6LnpvbmUucnVuR3VhcmRlZCgoKT0+e3Rocm93IHoudGhyb3dPcmln''@;'; put 'put ''aW5hbD96LnJlamVjdGlvbjp6fSl9Y2F0Y2goVyl7SHQoVyl9fX07Y29uc3QgQnQ9b3QoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIik7ZnVuY3Rpb24gSHQoeil7Ty5vblVuaGFuZGxlZEVycm9yKHopO3RyeXtjb25zdCBXPUxbQnRdOyJmdW5jdGlvbiI9PXR5cGVvZiBXJiZX''@;'; put 'put ''LmNhbGwodGhpcyx6KX1jYXRjaHt9fWZ1bmN0aW9uIF90KHope3JldHVybiB6JiYiZnVuY3Rpb24iPT10eXBlb2Ygei50aGVufWZ1bmN0aW9uIHRuKHope3JldHVybiB6fWZ1bmN0aW9uIFZ0KHope3JldHVybiBrdC5yZWplY3Qoeil9Y29uc3QgdnQ9b3QoInN0YXRlIiksWT1vdCgidmFsdWUi''@;'; put 'put ''KSxqdD1vdCgiZmluYWxseSIpLEx0PW90KCJwYXJlbnRQcm9taXNlVmFsdWUiKSxYdD1vdCgicGFyZW50UHJvbWlzZVN0YXRlIiksdXQ9bnVsbCxJdD0hMTtmdW5jdGlvbiBndCh6LFcpe3JldHVybiBqPT57dHJ5e0F0KHosVyxqKX1jYXRjaChHKXtBdCh6LCExLEcpfX19Y29uc3QgUHQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtsZXQgej0hMTtyZXR1cm4gZnVuY3Rpb24oail7cmV0dXJuIGZ1bmN0aW9uKCl7enx8KHo9ITAsai5hcHBseShudWxsLGFyZ3VtZW50cykpfX19LGVuPSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixKdD1vdCgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIEF0KHos''@;'; put 'put ''VyxqKXtjb25zdCBHPVB0KCk7aWYoej09PWopdGhyb3cgbmV3IFR5cGVFcnJvcihlbik7aWYoelt2dF09PT11dCl7bGV0IHB0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIGp8fCJmdW5jdGlvbiI9PXR5cGVvZiBqKSYmKHB0PWomJmoudGhlbil9Y2F0Y2goTXQpe3JldHVybiBHKCgpPT57''@;'; put 'put ''QXQoeiwhMSxNdCl9KSgpLHp9aWYoVyE9PUl0JiZqIGluc3RhbmNlb2Yga3QmJmouaGFzT3duUHJvcGVydHkodnQpJiZqLmhhc093blByb3BlcnR5KFkpJiZqW3Z0XSE9PXV0KUkoaiksQXQoeixqW3Z0XSxqW1ldKTtlbHNlIGlmKFchPT1JdCYmImZ1bmN0aW9uIj09dHlwZW9mIHB0KXRyeXtw''@;'; put 'put ''dC5jYWxsKGosRyhndCh6LFcpKSxHKGd0KHosITEpKSl9Y2F0Y2goTXQpe0coKCk9PntBdCh6LCExLE10KX0pKCl9ZWxzZXt6W3Z0XT1XO2NvbnN0IE10PXpbWV07aWYoeltZXT1qLHpbanRdPT09anQmJiEwPT09VyYmKHpbdnRdPXpbWHRdLHpbWV09eltMdF0pLFc9PT1JdCYmaiBpbnN0YW5j''@;'; put 'put ''ZW9mIEVycm9yKXtjb25zdCBjdD1MLmN1cnJlbnRUYXNrJiZMLmN1cnJlbnRUYXNrLmRhdGEmJkwuY3VycmVudFRhc2suZGF0YS5fX2NyZWF0aW9uVHJhY2VfXztjdCYmSihqLEp0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpjdH0pfWZvcihsZXQg''@;'; put 'put ''Y3Q9MDtjdDxNdC5sZW5ndGg7KUMoeixNdFtjdCsrXSxNdFtjdCsrXSxNdFtjdCsrXSxNdFtjdCsrXSk7aWYoMD09TXQubGVuZ3RoJiZXPT1JdCl7elt2dF09MDtsZXQgY3Q9ajt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrZnVuY3Rpb24gc3Qoeil7cmV0''@;'; put 'put ''dXJuIHomJnoudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyh6LmNvbnN0cnVjdG9yJiZ6LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KHopOno/ei50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh6KX0oaikrKGom''@;'; put 'put ''Jmouc3RhY2s/IlxuIitqLnN0YWNrOiIiKSl9Y2F0Y2god3Qpe2N0PXd0fVN0JiYoY3QudGhyb3dPcmlnaW5hbD0hMCksY3QucmVqZWN0aW9uPWosY3QucHJvbWlzZT16LGN0LnpvbmU9TC5jdXJyZW50LGN0LnRhc2s9TC5jdXJyZW50VGFzayxmdC5wdXNoKGN0KSxPLnNjaGVkdWxlTWljcm9U''@;'; put 'put ''YXNrKCl9fX1yZXR1cm4gen1jb25zdCBhdD1vdCgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBJKHope2lmKDA9PT16W3Z0XSl7dHJ5e2NvbnN0IFc9TFthdF07VyYmImZ1bmN0aW9uIj09dHlwZW9mIFcmJlcuY2FsbCh0aGlzLHtyZWplY3Rpb246eltZXSxwcm9taXNlOnp9''@;'; put 'put ''KX1jYXRjaHt9elt2dF09SXQ7Zm9yKGxldCBXPTA7VzxmdC5sZW5ndGg7VysrKXo9PT1mdFtXXS5wcm9taXNlJiZmdC5zcGxpY2UoVywxKX19ZnVuY3Rpb24gQyh6LFcsaixHLHB0KXtJKHopO2NvbnN0IE10PXpbdnRdLGN0PU10PyJmdW5jdGlvbiI9PXR5cGVvZiBHP0c6dG46ImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHB0P3B0OlZ0O1cuc2NoZWR1bGVNaWNyb1Rhc2soIlByb21pc2UudGhlbiIsKCk9Pnt0cnl7Y29uc3Qgd3Q9eltZXSxSdD0hIWomJmp0PT09altqdF07UnQmJihqW0x0XT13dCxqW1h0XT1NdCk7Y29uc3QgRnQ9Vy5ydW4oY3Qsdm9pZCAwLFJ0JiZjdCE9PVZ0JiZjdCE9PXRu''@;'; put 'put ''P1tdOlt3dF0pO0F0KGosITAsRnQpfWNhdGNoKHd0KXtBdChqLCExLHd0KX19LGopfWNvbnN0IEV0PWZ1bmN0aW9uKCl7fSxadD1SLkFnZ3JlZ2F0ZUVycm9yO2NsYXNzIGt0e3N0YXRpYyB0b1N0cmluZygpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNv''@;'; put 'put ''ZGVdIH0ifXN0YXRpYyByZXNvbHZlKFcpe3JldHVybiBXIGluc3RhbmNlb2Yga3Q/VzpBdChuZXcgdGhpcyhudWxsKSwhMCxXKX1zdGF0aWMgcmVqZWN0KFcpe3JldHVybiBBdChuZXcgdGhpcyhudWxsKSxJdCxXKX1zdGF0aWMgd2l0aFJlc29sdmVycygpe2NvbnN0IFc9e307cmV0dXJuIFcu''@;'; put 'put ''cHJvbWlzZT1uZXcga3QoKGosRyk9PntXLnJlc29sdmU9aixXLnJlamVjdD1HfSksV31zdGF0aWMgYW55KFcpe2lmKCFXfHwiZnVuY3Rpb24iIT10eXBlb2YgV1tTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgWnQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVj''@;'; put 'put ''dGVkIikpO2NvbnN0IGo9W107bGV0IEc9MDt0cnl7Zm9yKGxldCBjdCBvZiBXKUcrKyxqLnB1c2goa3QucmVzb2x2ZShjdCkpfWNhdGNoe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgWnQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpfWlmKDA9PT1HKXJldHVybiBQcm9taXNl''@;'; put 'put ''LnJlamVjdChuZXcgWnQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO2xldCBwdD0hMTtjb25zdCBNdD1bXTtyZXR1cm4gbmV3IGt0KChjdCx3dCk9Pntmb3IobGV0IFJ0PTA7UnQ8ai5sZW5ndGg7UnQrKylqW1J0XS50aGVuKEZ0PT57cHR8fChwdD0hMCxjdChGdCkpfSxGdD0+''@;'; put 'put ''e010LnB1c2goRnQpLEctLSwwPT09RyYmKHB0PSEwLHd0KG5ldyBadChNdCwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSkpfSl9KX1zdGF0aWMgcmFjZShXKXtsZXQgaixHLHB0PW5ldyB0aGlzKCh3dCxSdCk9PntqPXd0LEc9UnR9KTtmdW5jdGlvbiBNdCh3dCl7aih3dCl9ZnVuY3Rp''@;'; put 'put ''b24gY3Qod3Qpe0cod3QpfWZvcihsZXQgd3Qgb2YgVylfdCh3dCl8fCh3dD10aGlzLnJlc29sdmUod3QpKSx3dC50aGVuKE10LGN0KTtyZXR1cm4gcHR9c3RhdGljIGFsbChXKXtyZXR1cm4ga3QuYWxsV2l0aENhbGxiYWNrKFcpfXN0YXRpYyBhbGxTZXR0bGVkKFcpe3JldHVybih0aGlzJiZ0''@;'; put 'put ''aGlzLnByb3RvdHlwZSBpbnN0YW5jZW9mIGt0P3RoaXM6a3QpLmFsbFdpdGhDYWxsYmFjayhXLHt0aGVuQ2FsbGJhY2s6Rz0+KHtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6R30pLGVycm9yQ2FsbGJhY2s6Rz0+KHtzdGF0dXM6InJlamVjdGVkIixyZWFzb246R30pfSl9c3RhdGljIGFsbFdp''@;'; put 'put ''dGhDYWxsYmFjayhXLGope2xldCBHLHB0LE10PW5ldyB0aGlzKChGdCwkdCk9PntHPUZ0LHB0PSR0fSksY3Q9Mix3dD0wO2NvbnN0IFJ0PVtdO2ZvcihsZXQgRnQgb2YgVyl7X3QoRnQpfHwoRnQ9dGhpcy5yZXNvbHZlKEZ0KSk7Y29uc3QgJHQ9d3Q7dHJ5e0Z0LnRoZW4oVXQ9PntSdFskdF09''@;'; put 'put ''aj9qLnRoZW5DYWxsYmFjayhVdCk6VXQsY3QtLSwwPT09Y3QmJkcoUnQpfSxVdD0+e2o/KFJ0WyR0XT1qLmVycm9yQ2FsbGJhY2soVXQpLGN0LS0sMD09PWN0JiZHKFJ0KSk6cHQoVXQpfSl9Y2F0Y2goVXQpe3B0KFV0KX1jdCsrLHd0Kyt9cmV0dXJuIGN0LT0yLDA9PT1jdCYmRyhSdCksTXR9''@;'; put 'put ''Y29uc3RydWN0b3IoVyl7Y29uc3Qgaj10aGlzO2lmKCEoaiBpbnN0YW5jZW9mIGt0KSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLiIpO2pbdnRdPXV0LGpbWV09W107dHJ5e2NvbnN0IEc9UHQoKTtXJiZXKEcoZ3QoaiwhMCkpLEcoZ3QoaixJdCkpKX1j''@;'; put 'put ''YXRjaChHKXtBdChqLCExLEcpfX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJQcm9taXNlIn1nZXRbU3ltYm9sLnNwZWNpZXNdKCl7cmV0dXJuIGt0fXRoZW4oVyxqKXtsZXQgRz10aGlzLmNvbnN0cnVjdG9yPy5bU3ltYm9sLnNwZWNpZXNdOyghR3x8ImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIEcpJiYoRz10aGlzLmNvbnN0cnVjdG9yfHxrdCk7Y29uc3QgcHQ9bmV3IEcoRXQpLE10PUwuY3VycmVudDtyZXR1cm4gdGhpc1t2dF09PXV0P3RoaXNbWV0ucHVzaChNdCxwdCxXLGopOkModGhpcyxNdCxwdCxXLGopLHB0fWNhdGNoKFcpe3JldHVybiB0aGlzLnRoZW4obnVsbCxXKX1m''@;'; put 'put ''aW5hbGx5KFcpe2xldCBqPXRoaXMuY29uc3RydWN0b3I/LltTeW1ib2wuc3BlY2llc107KCFqfHwiZnVuY3Rpb24iIT10eXBlb2YgaikmJihqPWt0KTtjb25zdCBHPW5ldyBqKEV0KTtHW2p0XT1qdDtjb25zdCBwdD1MLmN1cnJlbnQ7cmV0dXJuIHRoaXNbdnRdPT11dD90aGlzW1ldLnB1c2go''@;'; put 'put ''cHQsRyxXLFcpOkModGhpcyxwdCxHLFcsVyksR319a3QucmVzb2x2ZT1rdC5yZXNvbHZlLGt0LnJlamVjdD1rdC5yZWplY3Qsa3QucmFjZT1rdC5yYWNlLGt0LmFsbD1rdC5hbGw7Y29uc3QgbW49UltydF09Ui5Qcm9taXNlO1IuUHJvbWlzZT1rdDtjb25zdCBkbj1vdCgidGhlblBhdGNoZWQi''@;'; put 'put ''KTtmdW5jdGlvbiB2bih6KXtjb25zdCBXPXoucHJvdG90eXBlLGo9TihXLCJ0aGVuIik7aWYoaiYmKCExPT09ai53cml0YWJsZXx8IWouY29uZmlndXJhYmxlKSlyZXR1cm47Y29uc3QgRz1XLnRoZW47V1t4dF09Ryx6LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHB0LE10KXtyZXR1cm4gbmV3''@;'; put 'put ''IGt0KCh3dCxSdCk9PntHLmNhbGwodGhpcyx3dCxSdCl9KS50aGVuKHB0LE10KX0seltkbl09ITB9cmV0dXJuIE8ucGF0Y2hUaGVuPXZuLG1uJiYodm4obW4pLGR0KFIsImZldGNoIix6PT5mdW5jdGlvbiB1bih6KXtyZXR1cm4gZnVuY3Rpb24oVyxqKXtsZXQgRz16LmFwcGx5KFcsaik7aWYo''@;'; put 'put ''RyBpbnN0YW5jZW9mIGt0KXJldHVybiBHO2xldCBwdD1HLmNvbnN0cnVjdG9yO3JldHVybiBwdFtkbl18fHZuKHB0KSxHfX0oeikpKSxQcm9taXNlW0wuX19zeW1ib2xfXygidW5jYXVnaHRQcm9taXNlRXJyb3JzIildPWZ0LGt0fSl9KShTKSxmdW5jdGlvbiB6dChTKXtTLl9fbG9hZF9wYXRj''@;'; put 'put ''aCgidG9TdHJpbmciLFI9Pntjb25zdCBMPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxPPXgoIk9yaWdpbmFsRGVsZWdhdGUiKSxOPXgoIlByb21pc2UiKSxKPXgoIkVycm9yIiksc3Q9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7Y29uc3QgcnQ9dGhpc1tPXTtp''@;'; put 'put ''ZihydClyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcnQ/TC5jYWxsKHJ0KTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocnQpO2lmKHRoaXM9PT1Qcm9taXNlKXtjb25zdCB4dD1SW05dO2lmKHh0KXJldHVybiBMLmNhbGwoeHQpfWlmKHRoaXM9PT1FcnJvcil7Y29uc3QgeHQ9UltK''@;'; put 'put ''XTtpZih4dClyZXR1cm4gTC5jYWxsKHh0KX19cmV0dXJuIEwuY2FsbCh0aGlzKX07c3RbT109TCxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9c3Q7Y29uc3Qgb3Q9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpvdC5jYWxsKHRoaXMpfX0pfShTKSxmdW5jdGlvbiBybihTKXtTLl9fbG9hZF9wYXRjaCgidXRpbCIsKFIsTCxPKT0+e2NvbnN0IE49XyhSKTtPLnBhdGNoT25Qcm9w''@;'; put 'put ''ZXJ0aWVzPWV0LE8ucGF0Y2hNZXRob2Q9ZHQsTy5iaW5kQXJndW1lbnRzPVQsTy5wYXRjaE1hY3JvVGFzaz1DdDtjb25zdCBKPUwuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpLHN0PUwuX19zeW1ib2xfXygiVU5QQVRDSEVEX0VWRU5UUyIpO1Jbc3RdJiYoUltKXT1SW3N0XSks''@;'; put 'put ''UltKXSYmKExbSl09TFtzdF09UltKXSksTy5wYXRjaEV2ZW50UHJvdG90eXBlPVRuLE8ucGF0Y2hFdmVudFRhcmdldD1ubixPLmlzSUVPckVkZ2U9YW4sTy5PYmplY3REZWZpbmVQcm9wZXJ0eT1zLE8uT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWUsTy5PYmplY3RDcmVhdGU9dSxP''@;'; put 'put ''LkFycmF5U2xpY2U9bCxPLnBhdGNoQ2xhc3M9bHQsTy53cmFwV2l0aEN1cnJlbnRab25lPUQsTy5maWx0ZXJQcm9wZXJ0aWVzPSQsTy5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9T3QsTy5fcmVkZWZpbmVQcm9wZXJ0eT1PYmplY3QuZGVmaW5lUHJvcGVydHksTy5wYXRjaENhbGxiYWNrcz1xdCxP''@;'; put 'put ''LmdldEdsb2JhbE9iamVjdHM9KCk9Pih7Z2xvYmFsU291cmNlczpwbix6b25lU3ltYm9sRXZlbnROYW1lczpZdCxldmVudE5hbWVzOk4saXNCcm93c2VyOm50LGlzTWl4OnR0LGlzTm9kZTpaLFRSVUVfU1RSOnksRkFMU0VfU1RSOkUsWk9ORV9TWU1CT0xfUFJFRklYOmcsQUREX0VWRU5UX0xJ''@;'; put 'put ''U1RFTkVSX1NUUjppLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6dn0pfSl9KFMpfSkoUm4pLGZ1bmN0aW9uIFEoUyl7Uy5fX2xvYWRfcGF0Y2goImxlZ2FjeSIsUj0+e2NvbnN0IEw9UltTLl9fc3ltYm9sX18oImxlZ2FjeVBhdGNoIildO0wmJkwoKX0pLFMuX19sb2FkX3BhdGNoKCJ0aW1l''@;'; put 'put ''cnMiLFI9Pntjb25zdCBPPSJjbGVhciI7YShSLCJzZXQiLE8sIlRpbWVvdXQiKSxhKFIsInNldCIsTywiSW50ZXJ2YWwiKSxhKFIsInNldCIsTywiSW1tZWRpYXRlIil9KSxTLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixSPT57YShSLCJyZXF1ZXN0IiwiY2FuY2VsIiwi''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUiKSxhKFIsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLGEoUiwid2Via2l0UmVxdWVzdCIsIndlYmtpdENhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIil9KSxTLl9fbG9hZF9wYXRjaCgiYmxvY2tpbmciLChSLEwpPT57Y29uc3QgTz1bImFs''@;'; put 'put ''ZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdO2ZvcihsZXQgTj0wO048Ty5sZW5ndGg7TisrKWR0KFIsT1tOXSwoc3Qsb3QsZnQpPT5mdW5jdGlvbihTdCxydCl7cmV0dXJuIEwuY3VycmVudC5ydW4oc3QsUixydCxmdCl9KX0pLFMuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldCIsKFIsTCxPKT0+''@;'; put 'put ''eyhmdW5jdGlvbiBLKFMsUil7Ui5wYXRjaEV2ZW50UHJvdG90eXBlKFMsUil9KShSLE8pLGZ1bmN0aW9uIHcoUyxSKXtpZihab25lW1Iuc3ltYm9sKCJwYXRjaEV2ZW50VGFyZ2V0IildKXJldHVybjtjb25zdHtldmVudE5hbWVzOkwsem9uZVN5bWJvbEV2ZW50TmFtZXM6TyxUUlVFX1NUUjpO''@;'; put 'put ''LEZBTFNFX1NUUjpKLFpPTkVfU1lNQk9MX1BSRUZJWDpzdH09Ui5nZXRHbG9iYWxPYmplY3RzKCk7Zm9yKGxldCBmdD0wO2Z0PEwubGVuZ3RoO2Z0Kyspe2NvbnN0IFN0PUxbZnRdLGJ0PXN0KyhTdCtKKSxCdD1zdCsoU3QrTik7T1tTdF09e30sT1tTdF1bSl09YnQsT1tTdF1bTl09QnR9Y29u''@;'; put 'put ''c3Qgb3Q9Uy5FdmVudFRhcmdldDtvdCYmb3QucHJvdG90eXBlJiZSLnBhdGNoRXZlbnRUYXJnZXQoUyxSLFtvdCYmb3QucHJvdG90eXBlXSl9KFIsTyk7Y29uc3QgTj1SLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7TiYmTi5wcm90b3R5cGUmJk8ucGF0Y2hFdmVudFRhcmdldChSLE8sW04u''@;'; put 'put ''cHJvdG90eXBlXSl9KSxTLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsKFIsTCxPKT0+e2x0KCJNdXRhdGlvbk9ic2VydmVyIiksbHQoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFMuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsKFIsTCxPKT0+e2x0KCJJ''@;'; put 'put ''bnRlcnNlY3Rpb25PYnNlcnZlciIpfSksUy5fX2xvYWRfcGF0Y2goIkZpbGVSZWFkZXIiLChSLEwsTyk9PntsdCgiRmlsZVJlYWRlciIpfSksUy5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IiwoUixMLE8pPT57IWZ1bmN0aW9uIEgoUyxSKXtpZihaJiYhdHR8fFpvbmVbUy5zeW1ib2woInBh''@;'; put 'put ''dGNoRXZlbnRzIildKXJldHVybjtjb25zdCBMPVIuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2xldCBPPVtdO2lmKG50KXtjb25zdCBOPXdpbmRvdztPPU8uY29uY2F0KFsiRG9jdW1lbnQiLCJTVkdFbGVtZW50IiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwiSFRNTEJvZHlFbGVtZW50''@;'; put 'put ''IiwiSFRNTE1lZGlhRWxlbWVudCIsIkhUTUxGcmFtZVNldEVsZW1lbnQiLCJIVE1MRnJhbWVFbGVtZW50IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJIVE1MTWFycXVlZUVsZW1lbnQiLCJXb3JrZXIiXSk7Y29uc3QgSj1bXTtEdChOLF8oTiksTCYmTC5jb25jYXQoSiksbyhOKSl9Tz1PLmNvbmNh''@;'; put 'put ''dChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5zYWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2ZvcihsZXQgTj0wO048Ty5s''@;'; put 'put ''ZW5ndGg7TisrKXtjb25zdCBKPVJbT1tOXV07Sj8ucHJvdG90eXBlJiZEdChKLnByb3RvdHlwZSxfKEoucHJvdG90eXBlKSxMKX19KE8sUil9KSxTLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLChSLEwsTyk9PnshZnVuY3Rpb24gbShTLFIpe2NvbnN0e2lzQnJvd3NlcjpMLGlzTWl4''@;'; put 'put ''Ok99PVIuZ2V0R2xvYmFsT2JqZWN0cygpOyhMfHxPKSYmUy5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIFMmJlIucGF0Y2hDYWxsYmFja3MoUixTLmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5l''@;'; put 'put ''Y3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIiwiZm9ybUFzc29jaWF0ZWRDYWxsYmFjayIsImZvcm1EaXNhYmxlZENhbGxiYWNrIiwiZm9ybVJlc2V0Q2FsbGJhY2siLCJmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2siXSl9KFIsTyl9KSxT''@;'; put 'put ''Ll9fbG9hZF9wYXRjaCgiWEhSIiwoUixMKT0+eyFmdW5jdGlvbiBTdChydCl7Y29uc3QgeHQ9cnQuWE1MSHR0cFJlcXVlc3Q7aWYoIXh0KXJldHVybjtjb25zdCBidD14dC5wcm90b3R5cGU7bGV0IEh0PWJ0W3BdLF90PWJ0W2RdO2lmKCFIdCl7Y29uc3QgVHQ9cnQuWE1MSHR0cFJlcXVlc3RF''@;'; put 'put ''dmVudFRhcmdldDtpZihUdCl7Y29uc3QgZ3Q9VHQucHJvdG90eXBlO0h0PWd0W3BdLF90PWd0W2RdfX1jb25zdCB0bj0icmVhZHlzdGF0ZWNoYW5nZSIsVnQ9InNjaGVkdWxlZCI7ZnVuY3Rpb24gdnQoVHQpe2NvbnN0IGd0PVR0LmRhdGEsUHQ9Z3QudGFyZ2V0O1B0W3N0XT0hMSxQdFtmdF09''@;'; put 'put ''ITE7Y29uc3QgZW49UHRbSl07SHR8fChIdD1QdFtwXSxfdD1QdFtkXSksZW4mJl90LmNhbGwoUHQsdG4sZW4pO2NvbnN0IEp0PVB0W0pdPSgpPT57aWYoUHQucmVhZHlTdGF0ZT09PVB0LkRPTkUpaWYoIWd0LmFib3J0ZWQmJlB0W3N0XSYmVHQuc3RhdGU9PT1WdCl7Y29uc3QgYXQ9UHRbTC5f''@;'; put 'put ''X3N5bWJvbF9fKCJsb2FkZmFsc2UiKV07aWYoMCE9PVB0LnN0YXR1cyYmYXQmJmF0Lmxlbmd0aD4wKXtjb25zdCBJPVR0Lmludm9rZTtUdC5pbnZva2U9ZnVuY3Rpb24oKXtjb25zdCBDPVB0W0wuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2ZvcihsZXQgaHQ9MDtodDxDLmxlbmd0aDtodCsr''@;'; put 'put ''KUNbaHRdPT09VHQmJkMuc3BsaWNlKGh0LDEpOyFndC5hYm9ydGVkJiZUdC5zdGF0ZT09PVZ0JiZJLmNhbGwoVHQpfSxhdC5wdXNoKFR0KX1lbHNlIFR0Lmludm9rZSgpfWVsc2UhZ3QuYWJvcnRlZCYmITE9PT1QdFtzdF0mJihQdFtmdF09ITApfTtyZXR1cm4gSHQuY2FsbChQdCx0bixKdCks''@;'; put 'put ''UHRbT118fChQdFtPXT1UdCksV3QuYXBwbHkoUHQsZ3QuYXJncyksUHRbc3RdPSEwLFR0fWZ1bmN0aW9uIFkoKXt9ZnVuY3Rpb24ganQoVHQpe2NvbnN0IGd0PVR0LmRhdGE7cmV0dXJuIGd0LmFib3J0ZWQ9ITAsSXQuYXBwbHkoZ3QudGFyZ2V0LGd0LmFyZ3MpfWNvbnN0IEx0PWR0KGJ0LCJv''@;'; put 'put ''cGVuIiwoKT0+ZnVuY3Rpb24oVHQsZ3Qpe3JldHVybiBUdFtOXT0wPT1ndFsyXSxUdFtvdF09Z3RbMV0sTHQuYXBwbHkoVHQsZ3QpfSksS3Q9eCgiZmV0Y2hUYXNrQWJvcnRpbmciKSx1dD14KCJmZXRjaFRhc2tTY2hlZHVsaW5nIiksV3Q9ZHQoYnQsInNlbmQiLCgpPT5mdW5jdGlvbihUdCxn''@;'; put 'put ''dCl7aWYoITA9PT1MLmN1cnJlbnRbdXRdfHxUdFtOXSlyZXR1cm4gV3QuYXBwbHkoVHQsZ3QpO3tjb25zdCBQdD17dGFyZ2V0OlR0LHVybDpUdFtvdF0saXNQZXJpb2RpYzohMSxhcmdzOmd0LGFib3J0ZWQ6ITF9LGVuPUYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLFksUHQsdnQsanQpO1R0JiYh''@;'; put 'put ''MD09PVR0W2Z0XSYmIVB0LmFib3J0ZWQmJmVuLnN0YXRlPT09VnQmJmVuLmludm9rZSgpfX0pLEl0PWR0KGJ0LCJhYm9ydCIsKCk9PmZ1bmN0aW9uKFR0LGd0KXtjb25zdCBQdD1mdW5jdGlvbiBCdChUdCl7cmV0dXJuIFR0W09dfShUdCk7aWYoUHQmJiJzdHJpbmciPT10eXBlb2YgUHQudHlw''@;'; put 'put ''ZSl7aWYobnVsbD09UHQuY2FuY2VsRm58fFB0LmRhdGEmJlB0LmRhdGEuYWJvcnRlZClyZXR1cm47UHQuem9uZS5jYW5jZWxUYXNrKFB0KX1lbHNlIGlmKCEwPT09TC5jdXJyZW50W0t0XSlyZXR1cm4gSXQuYXBwbHkoVHQsZ3QpfSl9KFIpO2NvbnN0IE89eCgieGhyVGFzayIpLE49eCgieGhy''@;'; put 'put ''U3luYyIpLEo9eCgieGhyTGlzdGVuZXIiKSxzdD14KCJ4aHJTY2hlZHVsZWQiKSxvdD14KCJ4aHJVUkwiKSxmdD14KCJ4aHJFcnJvckJlZm9yZVNjaGVkdWxlZCIpfSksUy5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixSPT57Ui5uYXZpZ2F0b3ImJlIubmF2aWdhdG9yLmdlb2xvY2F0aW9u''@;'; put 'put ''JiZmdW5jdGlvbiBiKFMsUil7Y29uc3QgTD1TLmNvbnN0cnVjdG9yLm5hbWU7Zm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspe2NvbnN0IE49UltPXSxKPVNbTl07aWYoSil7aWYoIUIoZShTLE4pKSljb250aW51ZTtTW05dPShvdD0+e2NvbnN0IGZ0PWZ1bmN0aW9uKCl7cmV0dXJuIG90LmFw''@;'; put 'put ''cGx5KHRoaXMsVChhcmd1bWVudHMsTCsiLiIrTikpfTtyZXR1cm4gT3QoZnQsb3QpLGZ0fSkoSil9fX0oUi5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksUy5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIs''@;'; put 'put ''KFIsTCk9PntmdW5jdGlvbiBPKE4pe3JldHVybiBmdW5jdGlvbihKKXt5bihSLE4pLmZvckVhY2gob3Q9Pntjb25zdCBmdD1SLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihmdCl7Y29uc3QgU3Q9bmV3IGZ0KE4se3Byb21pc2U6Si5wcm9taXNlLHJlYXNvbjpKLnJlamVjdGlvbn0pO290Lmlu''@;'; put 'put ''dm9rZShTdCl9fSl9fVIuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYoTFt4KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1PKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxMW3goInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPU8oInJlamVjdGlvbmhhbmRsZWQiKSl9KSxTLl9f''@;'; put 'put ''bG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLChSLEwsTyk9PnshZnVuY3Rpb24gaChTLFIpe1IucGF0Y2hNZXRob2QoUywicXVldWVNaWNyb3Rhc2siLEw9PmZ1bmN0aW9uKE8sTil7Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIsTlswXSl9KX0oUixP''@;'; put 'put ''KX0pfShSbil9LDkyNTY4KGMsZix0KXsidXNlIHN0cmljdCI7Y29uc3Qgbj10KDgyNTc0KTtJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzPWZ1bmN0aW9uKFApe2xldCBNPXRoaXMucmVzb2x2ZWRPcHRpb25zKCksVD1mdW5jdGlvbiBrKFApe3ZhciBaLG50LHR0''@;'; put 'put ''LHl0LG10LE09UC5hdmFpbGFibGVGb3JtYXRzLFQ9UC50aW1lRm9ybWF0cyxiPVAuZGF0ZUZvcm1hdHMsQj1QLm1lZGl1bSxVPVtdLHE9W10sWD1bXTtmdW5jdGlvbiBldChWLGx0KXt2YXIgZHQ9bmV3IEFycmF5KChWLm1hdGNoKC9NL2cpfHxbXSkubGVuZ3RoKzEpLEN0PW5ldyBBcnJheSgo''@;'; put 'put ''Vi5tYXRjaCgvRS9nKXx8W10pLmxlbmd0aCsxKTtyZXR1cm4gZHQubGVuZ3RoPjImJihsdD1sdC5yZXBsYWNlKC8oTXxMKSsvLGR0LmpvaW4oIiQxIikpKSxDdC5sZW5ndGg+MiYmKGx0PWx0LnJlcGxhY2UoLyhbRWVjXSkrLyxDdC5qb2luKCIkMSIpKSksbHR9Zm9yKFogaW4gTSlNLmhhc093''@;'; put 'put ''blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixNW1pdKSkpJiYoVS5wdXNoKHR0KSxGKHR0KT9YLnB1c2gobnQpOngodHQpJiZxLnB1c2gobnQpKSk7Zm9yKHl0PTA7eXQ8cS5sZW5ndGg7eXQrPTEpZm9yKG10PTA7bXQ8WC5sZW5ndGg7bXQrPTEpKHR0PUEobnQ9Qi5yZXBsYWNlKCJ7MH0i''@;'; put 'put ''LHFbeXRdKS5yZXBsYWNlKCJ7MX0iLFhbbXRdKS5yZXBsYWNlKC9eWyxcc10rfFssXHNdKyQvZ2ksIiIpKSkmJlUucHVzaCh0dCk7Zm9yKFogaW4gVClULmhhc093blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixUW1pdKSkpJiZVLnB1c2godHQpKTtmb3IoWiBpbiBiKWIuaGFzT3duUHJv''@;'; put 'put ''cGVydHkoWikmJigodHQ9QShudD1ldChaLGJbWl0pKSkmJlUucHVzaCh0dCkpO3JldHVybiBVfShuLmRhdGUuZm9ybWF0cyksYj17fTtmb3IodmFyIEIgaW4gbClzLmNhbGwobCxCKSYmKGJbIltbIitCKyJdXSJdPU1bQl0pO2xldCBaPWZ1bmN0aW9uIGkoUCxNLFQpe2Zvcih2YXIgcSxtdD0t''@;'; put 'put ''MS8wLFg9MCxldD1NLmxlbmd0aDtYPGV0Oyl7dmFyIFY9TVtYXSxsdD0wO2Zvcih2YXIgZHQgaW4gbClpZihzLmNhbGwobCxkdCkpe3ZhciBDdD1QWyJbWyIrZHQrIl1dIl0sT3Q9cy5jYWxsKFYsZHQpP1ZbZHRdOnZvaWQgMDtpZih2b2lkIDA9PT1DdCYmdm9pZCAwIT09T3QpbHQtPTIwO2Vs''@;'; put 'put ''c2UgaWYodm9pZCAwIT09Q3QmJnZvaWQgMD09PU90KWx0LT0xMjA7ZWxzZXt2YXIgTnQ9WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLFF0PW8uY2FsbChOdCxDdCksYW49by5jYWxsKE50LE90KSxHdD1NYXRoLm1heChNYXRoLm1pbihhbi1RdCwyKSwtMik7''@;'; put 'put ''VCYmKCgibnVtZXJpYyI9PT1DdHx8IjItZGlnaXQiPT09Q3QpJiYibnVtZXJpYyIhPT1PdCYmIjItZGlnaXQiIT09T3R8fCJudW1lcmljIiE9PUN0JiYiMi1kaWdpdCIhPT1DdCYmKCIyLWRpZ2l0Ij09PU90fHwibnVtZXJpYyI9PT1PdCkpJiYobHQtPTgpLDI9PT1HdD9sdC09NjoxPT09R3Q/''@;'; put 'put ''bHQtPTM6LTE9PT1HdD9sdC09NjotMj09PUd0JiYobHQtPTgpfX1sdD5tdCYmKG10PWx0LHE9ViksWCsrfXJldHVybiBxfShiLFQpO3JldHVybiBmdW5jdGlvbiBlKFAsTSl7aWYoIWlzRmluaXRlKE0pKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHZhbGlkIGRhdGUgcGFzc2VkIHRv''@;'; put 'put ''IGZvcm1hdFRvUGFydHMiKTtmb3IodmFyIHEsVD0iZW4tVVMiLGI9UC5wYXR0ZXJuLFo9KG5ldyBJbnRsLk51bWJlckZvcm1hdChbVF0se3VzZUdyb3VwaW5nOiExfSksbmV3IEludGwuTnVtYmVyRm9ybWF0KFtUXSx7bWluaW11bUludGVnZXJEaWdpdHM6Mix1c2VHcm91cGluZzohMX0pLGZ1''@;'; put 'put ''bmN0aW9uIHYoUCxNLFQpe3ZhciBiPW5ldyBEYXRlKFApLEI9ImdldCIrKFR8fCIiKTtyZXR1cm57Iltbd2Vla2RheV1dIjpiW0IrIkRheSJdKCksIltbZXJhXV0iOisoYltCKyJGdWxsWWVhciJdKCk+PTApLCJbW3llYXJdXSI6YltCKyJGdWxsWWVhciJdKCksIltbbW9udGhdXSI6YltCKyJN''@;'; put 'put ''b250aCJdKCksIltbZGF5XV0iOmJbQisiRGF0ZSJdKCksIltbaG91cl1dIjpiW0IrIkhvdXJzIl0oKSwiW1ttaW51dGVdXSI6YltCKyJNaW51dGVzIl0oKSwiW1tzZWNvbmRdXSI6YltCKyJTZWNvbmRzIl0oKSwiW1tpbkRTVF1dIjohMX19KE0pKSxudD0iZ3JlZ29yeSIsdHQ9bi5kYXRlLmNh''@;'; put 'put ''bGVuZGFycyx5dD1bXSxtdD0veyhbXn1dKyl9L2csWD0wO251bGwhPT0ocT1tdC5leGVjKGIpKTspe1g8cS5pbmRleCYmeXQucHVzaCh7dHlwZToic2VwYXJhdG9yIix2YWx1ZTpiLnN1YnN0cihYLHEuaW5kZXgtWCl9KTt2YXIgZXQ9cVsxXSxWPW51bGw7aWYocy5jYWxsKFAsZXQpKXt2YXIg''@;'; put 'put ''bHQsZHQ9UFtldF0sQ3Q9WlsiW1siK2V0KyJdXSJdO2lmKCJ5ZWFyIj09PWV0JiZDdDw9MD9DdD0xLUN0OiJtb250aCI9PT1ldD9DdCsrOiJob3VyIj09PWV0JiYhMD09PVBbIltbaG91cjEyXV0iXSYmKGx0PShDdCU9MTIpIT09WlsiW1siK2V0KyJdXSJdLDA9PT1DdCYmITA9PT1QWyJbW2hv''@;'; put 'put ''dXJObzBdXSJdJiYoQ3Q9MTIpKSwibnVtZXJpYyI9PT1kdClWPUN0O2Vsc2UgaWYoIjItZGlnaXQiPT09ZHQpKFY9Q3QpLmxlbmd0aD4yJiYoVj1WLnNsaWNlKC0yKSk7ZWxzZSBpZihkdCBpbiB1KXN3aXRjaChldCl7Y2FzZSJtb250aCI6Vj1wKHR0LG50LCJtb250aHMiLGR0LFpbIltbIitl''@;'; put 'put ''dCsiXV0iXSk7YnJlYWs7Y2FzZSJ3ZWVrZGF5Ijp0cnl7Vj1wKHR0LG50LCJkYXlzIixkdCxaWyJbWyIrZXQrIl1dIl0pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd2Vla2RheSBkYXRhIGZvciBsb2NhbGUgIitUKX1icmVhaztjYXNlInRpbWVab25lTmFtZSI6Vj0i''@;'; put 'put ''IjticmVhaztkZWZhdWx0OlY9WlsiW1siK2V0KyJdXSJdfX1lbHNlImFtcG0iPT09ZXQmJihWPXAodHQsbnQsImRheVBlcmlvZHMiLGx0PyJwbSI6ImFtIikpO251bGwhPT1WJiYoeXQucHVzaCh7dHlwZTpxWzFdLHZhbHVlOlZ9KSxYPXEuaW5kZXgrcVswXS5sZW5ndGgpfXJldHVybiBYPGIu''@;'; put 'put ''bGVuZ3RoJiZ5dC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVlOmIuc3Vic3RyKFgpfSkseXR9KFosUCl9O3ZhciBzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZix1PU9iamVjdC5jcmVhdGUobnVsbCx7bmFycm93Ont9LHNob3J0''@;'; put 'put ''Ont9LGxvbmc6e319KSxsPXt3ZWVrZGF5OlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0sZXJhOlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0seWVhcjpbIjItZGlnaXQiLCJudW1lcmljIl0sbW9udGg6WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLGRheTpb''@;'; put 'put ''IjItZGlnaXQiLCJudW1lcmljIl0saG91cjpbIjItZGlnaXQiLCJudW1lcmljIl0sbWludXRlOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxzZWNvbmQ6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHRpbWVab25lTmFtZTpbInNob3J0IiwibG9uZyJdfTtmdW5jdGlvbiBwKFAsTSxULGIsQil7dmFyIFU9''@;'; put 'put ''UFtNXSYmUFtNXVtUXT9QW01dW1RdOlAuZ3JlZ29yeVtUXSxaPXtuYXJyb3c6WyJzaG9ydCIsImxvbmciXSxzaG9ydDpbImxvbmciLCJuYXJyb3ciXSxsb25nOlsic2hvcnQiLCJuYXJyb3ciXX0sbnQ9cy5jYWxsKFUsYik/VVtiXTpzLmNhbGwoVSxaW2JdWzBdKT9VW1pbYl1bMF1dOlVbWlti''@;'; put 'put ''XVsxXV07cmV0dXJuIG51bGwhPUI/bnRbQl06bnR9dmFyIGQ9Lyg/OltFZWNdezEsNn18R3sxLDV9fCg/Olt5WXVdK3xVezEsNX0pfFtNTF17MSw1fXxkezEsMn18YXxbaGtIS117MSwyfXxtezEsMn18c3sxLDJ9fHp7MSw0fSkoPz0oW14nXSonW14nXSonKSpbXiddKiQpL2cseT0vW1F4WFZP''@;'; put 'put ''dlpBU2pnRkR3V0lRcUhdLyxFPXttb250aDpbIm51bWVyaWMiLCIyLWRpZ2l0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il0sd2Vla2RheTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXSxlcmE6WyJzaG9ydCIsInNob3J0Iiwic2hvcnQiLCJsb25nIiwibmFycm93''@;'; put 'put ''Il19LGc9WyJ3ZWVrZGF5IiwiZXJhIiwieWVhciIsIm1vbnRoIiwiZGF5Il0sRD1bImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0aW1lWm9uZU5hbWUiXTtmdW5jdGlvbiBGKFApe2Zvcih2YXIgTT0wO008RC5sZW5ndGg7TSs9MSlpZihQLmhhc093blByb3BlcnR5KERbTV0pKXJldHVybiEx''@;'; put 'put ''O3JldHVybiEwfWZ1bmN0aW9uIHgoUCl7Zm9yKHZhciBNPTA7TTxnLmxlbmd0aDtNKz0xKWlmKFAuaGFzT3duUHJvcGVydHkoZ1tNXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQShQKXtpZigheS50ZXN0KFApKXt2YXIgTT17fTtyZXR1cm4gTS5wYXR0ZXJuPVAucmVwbGFjZShkLGZ1''@;'; put 'put ''bmN0aW9uKFQpe3N3aXRjaChULmNoYXJBdCgwKSl7Y2FzZSJFIjpjYXNlImUiOmNhc2UiYyI6cmV0dXJuIE0ud2Vla2RheT1FLndlZWtkYXlbVC5sZW5ndGgtMV0sInt3ZWVrZGF5fSI7Y2FzZSJHIjpyZXR1cm4gTS5lcmE9RS5lcmFbVC5sZW5ndGgtMV0sIntlcmF9IjtjYXNlInkiOmNhc2Ui''@;'; put 'put ''WSI6Y2FzZSJ1IjpjYXNlIlUiOnJldHVybiBNLnllYXI9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInt5ZWFyfSI7Y2FzZSJNIjpjYXNlIkwiOnJldHVybiBNLm1vbnRoPUUubW9udGhbVC5sZW5ndGgtMV0sInttb250aH0iO2Nhc2UiZCI6cmV0dXJuIE0uZGF5PTI9PT1ULmxl''@;'; put 'put ''bmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7ZGF5fSI7Y2FzZSJhIjpyZXR1cm4ie2FtcG19IjtjYXNlImgiOmNhc2UiSCI6Y2FzZSJrIjpjYXNlIksiOnJldHVybiBNLmhvdXI9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntob3VyfSI7Y2FzZSJtIjpyZXR1cm4gTS5taW51''@;'; put 'put ''dGU9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInttaW51dGV9IjtjYXNlInMiOnJldHVybiBNLnNlY29uZD0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3NlY29uZH0iO2Nhc2UieiI6cmV0dXJuIE0udGltZVpvbmVOYW1lPVQubGVuZ3RoPDQ/InNob3J0Ijoi''@;'; put 'put ''bG9uZyIsInt0aW1lWm9uZU5hbWV9In19KSxNLnBhdHRlcm49TS5wYXR0ZXJuLnJlcGxhY2UoLycoW14nXSopJy9nLGZ1bmN0aW9uKFQsYil7cmV0dXJuIGJ8fCInIn0pLE0ucGF0dGVybi5pbmRleE9mKCJ7YW1wbX0iKT4tMSYmKE0uaG91cjEyPSEwLE0ucGF0dGVybjEyPU0ucGF0dGVybixN''@;'; put 'put ''LnBhdHRlcm49TS5wYXR0ZXJuLnJlcGxhY2UoInthbXBtfSIsIiIpLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSksTX19fSw2NjM3NChjLGYsdCl7dCg4Mjk3NSksdCg0Nzg5OSksdCg5Mzg2MyksdCg4MjE4OSksdCg5NjUxMSksdCg5NTg1MyksdCg5''@;'; put 'put ''NzA3NSksdCgzNTA0KSx0KDU0OTEzKSx0KDM5ODEzKSx0KDg2NTExKSx0KDU4ODg4KSx0KDgxNDQ5KSx0KDQ3ODc0KSx0KDM0NjA5KSx0KDMzNzA2KSx0KDE5NjIwKSx0KDU3NzYyKSx0KDE1MTQ0KSx0KDc1MzY5KSx0KDc2MjA5KSx0KDk1MTY1KSx0KDU2MDk0KX0sMzI4OTkoYyxmLHQpe3Qo''@;'; put 'put ''MTMyOTIpLHQoNTIzNDYpLHQoOTQyOSksdCg3ODQ5KSx0KDQ4OTUxKSxjLmV4cG9ydHM9RGF0ZX0sMzkyNzEoYyxmLHQpe3QoNjUwNDkpLHQoNzA0ODkpLHQoOTU1MDIpLHQoNTYwOTQpfSwyMjkxMyhjLGYsdCl7dCgxNzQ4MiksdCg4Mjk3NSksdCgzNTg5MCksdCg5MzM4NiksdCg1NjA5NCl9''@;'; put 'put ''LDg4MDI1KGMsZix0KXt0KDc2NjQ4KSx0KDU1NzcxKSx0KDgyMzkyKSx0KDcyMzM1KSx0KDc0ODk2KSx0KDk0NTIxKSx0KDI5MTQ3KSx0KDQxMzE4KSx0KDg0MzUyKSx0KDE1MzI3KSx0KDU3NTA5KSx0KDE1OTA5KSx0KDc5NTg0KSx0KDQwMzQ1KSx0KDk5MTM0KSx0KDY3OTAxKSx0KDQ2NTky''@;'; put 'put ''KSx0KDU2MDk0KX0sMTU2MjYoYyxmLHQpe3QoNjQ1MDkpLHQoMzc3MjcpLHQoNjcwMSksdCgzNDQxOSksdCg5MTkzMyksdCg1NTUzOCksdCgzOTQ5NyksdCg0MTA0KSx0KDYwMjEwKSx0KDU2NTc2KSx0KDg0NDM3KSx0KDg4MDUwKSx0KDU2MDk0KX0sNTQ5NDAoYyxmLHQpe3QoOTk2NTApLHQo''@;'; put 'put ''OTM1KSx0KDY2MDY0KSx0KDg5NDQ4KSx0KDIyNjQyKSx0KDUzZTMpLHQoODg2NDcpLHQoODE4OTUpLHQoNDgyMzYpLHQoNzM4MjIpLHQoMTU1NzIpLHQoNjkzMTgpLHQoNjUwMzIpLHQoNzkwNzMpLHQoMTE0MzApLHQoMzg0NTEpLHQoMTgxMzIpLHQoMTc0ODIpLHQoNTYwOTQpfSwyNjIwMyhj''@;'; put 'put ''LGYsdCl7dCg5NjEwOCksdCg1NjA5NCl9LDUyNDQ0KGMsZix0KXt0KDkwNTcxKSx0KDU2MDk0KX0sNjU4NDYoYyxmLHQpe3QoNzEwMyksdCg4MjU4NiksdCg5MjU1MiksdCg0Mzc2KSx0KDc1MTUzKSx0KDExODc5KSx0KDUyNjUwKSx0KDMxMTA0KSx0KDIxODgzKSx0KDM1NDMzKSx0KDU1ZTMp''@;'; put 'put ''LHQoMTU5MzIpLHQoNTQ0MyksdCgyNjMxNiksdCg1NjA5NCl9LDQyNDYoYyxmLHQpe3QoODMwMSksdCg5NDExNiksdCg3ODYwNCksdCgzOTYzOCksdCg0MDQwKSx0KDY4MzA1KSx0KDc0NzAxKSx0KDIwMzQxKSx0KDU2MDk0KX0sMTA3NDMoYyxmLHQpe3QoMTc0ODIpLHQoODI5NzUpLHQoMzU4''@;'; put 'put ''OTApLHQoNzE2MzIpLHQoNTYwOTQpfSw1NjQ0MihjLGYsdCl7dCgxMjIyMCksdCgyMzQ4MyksdCgyMDk1NyksdCg4Mjk3NSksdCgzMjQwNSksdCgxNzIyNCksdCgyODg3MiksdCg0NDg5NCksdCgxMDE3NyksdCg2NDk3OSksdCg4OTAxMSksdCg1NDU5MSksdCg0NzMzNCksdCg3MDgzKSx0KDY5''@;'; put 'put ''MjEzKSx0KDM4NDM3KSx0KDYyMjIwKSx0KDc2NTQ5KSx0KDQyODE4KSx0KDI4NTQzKSx0KDM1NTkpLHQoODQxNTMpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDE4ODgzKGMsZix0KXt0KDk5NjUwKSx0KDE3NDgyKSx0KDU2MDk0KX0sOTM1MyhjLGYsdCl7''@;'; put 'put ''dCg3NzQ5MSksdCg3NDkwNyksdCg3OTEwMCksdCgxOTI2OSksdCg5MTMxOSksdCg3OTczMiksdCgxMTc2KSx0KDMxMDcpLHQoNjE2OTEpLHQoNTYwOTQpfSw2MzM4NyhjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGYpdGhyb3cgVHlwZUVycm9yKGYrIiBp''@;'; put 'put ''cyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZn19LDE1MTIyKGMsZix0KXt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJiJOdW1iZXIiIT1uKGUpKXRocm93IFR5cGVFcnJvcihzKTtyZXR1cm4rZX19LDg4MTg0KGMsZix0KXt2''@;'; put 'put ''YXIgbj10KDY3NTc0KSgidW5zY29wYWJsZXMiKSxlPUFycmF5LnByb3RvdHlwZTtudWxsPT1lW25dJiZ0KDMzMzQxKShlLG4se30pLGMuZXhwb3J0cz1mdW5jdGlvbihzKXtlW25dW3NdPSEwfX0sMjg4MjgoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkxMjEyKSghMCk7Yy5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKGUscyxvKXtyZXR1cm4gcysobz9uKGUscykubGVuZ3RoOjEpfX0sMTY0NDAoYyl7Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuLGUpe2lmKCEoZiBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1lJiZlIGluIGYpdGhyb3cgVHlwZUVycm9yKG4rIjogaW5jb3JyZWN0IGludm9jYXRp''@;'; put 'put ''b24hIik7cmV0dXJuIGZ9fSw0MjI4KGMsZix0KXt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sODQ0MzgoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDE4Mjcw''@;'; put 'put ''KSxlPXQoNzAxNTcpLHM9dCg4MTQ4NSk7Yy5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHUsbCl7dmFyIGk9bih0aGlzKSx2PXMoaS5sZW5ndGgpLHA9ZSh1LHYpLGQ9ZShsLHYpLHk9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsRT1NYXRoLm1pbigodm9p''@;'; put 'put ''ZCAwPT09eT92OmUoeSx2KSktZCx2LXApLGc9MTtmb3IoZDxwJiZwPGQrRSYmKGc9LTEsZCs9RS0xLHArPUUtMSk7RS0tID4wOylkIGluIGk/aVtwXT1pW2RdOmRlbGV0ZSBpW3BdLHArPWcsZCs9ZztyZXR1cm4gaX19LDM1NTY0KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCgxODI3MCks''@;'; put 'put ''ZT10KDcwMTU3KSxzPXQoODE0ODUpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXtmb3IodmFyIGw9bih0aGlzKSxpPXMobC5sZW5ndGgpLHY9YXJndW1lbnRzLmxlbmd0aCxwPWUodj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaSksZD12PjI/YXJndW1lbnRzWzJdOnZvaWQgMCx5PXZvaWQgMD09PWQ/''@;'; put 'put ''aTplKGQsaSk7eT5wOylsW3ArK109dTtyZXR1cm4gbH19LDgwOTU2KGMsZix0KXt2YXIgbj10KDQ4NzkwKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXt2YXIgbz1bXTtyZXR1cm4gbihlLCExLG8ucHVzaCxvLHMpLG99fSw2MTQ2NChjLGYsdCl7dmFyIG49dCg1NzIyMSksZT10KDgxNDg1KSxz''@;'; put 'put ''PXQoNzAxNTcpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4gZnVuY3Rpb24odSxsLGkpe3ZhciB5LHY9bih1KSxwPWUodi5sZW5ndGgpLGQ9cyhpLHApO2lmKG8mJmwhPWwpe2Zvcig7cD5kOylpZigoeT12W2QrK10pIT15KXJldHVybiEwfWVsc2UgZm9yKDtwPmQ7ZCsrKWlmKChvfHxk''@;'; put 'put ''IGluIHYpJiZ2W2RdPT09bClyZXR1cm4gb3x8ZHx8MDtyZXR1cm4hbyYmLTF9fX0sNjYxNzkoYyxmLHQpe3ZhciBuPXQoMzUwNTIpLGU9dCg2MTI0OSkscz10KDE4MjcwKSxvPXQoODE0ODUpLHU9dCg5MzE5MSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGwsaSl7dmFyIHY9MT09bCxwPTI9PWwsZD0z''@;'; put 'put ''PT1sLHk9ND09bCxFPTY9PWwsZz01PT1sfHxFLEQ9aXx8dTtyZXR1cm4gZnVuY3Rpb24oRix4LEEpe2Zvcih2YXIgVSxaLGs9cyhGKSxQPWUoayksTT1uKHgsQSwzKSxUPW8oUC5sZW5ndGgpLGI9MCxCPXY/RChGLFQpOnA/RChGLDApOnZvaWQgMDtUPmI7YisrKWlmKChnfHxiIGluIFApJiYo''@;'; put 'put ''Wj1NKFU9UFtiXSxiLGspLGwpKWlmKHYpQltiXT1aO2Vsc2UgaWYoWilzd2l0Y2gobCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gVTtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOkIucHVzaChVKX1lbHNlIGlmKHkpcmV0dXJuITE7cmV0dXJuIEU/LTE6ZHx8eT95OkJ9fX0sNjU0Myhj''@;'; put 'put ''LGYsdCl7dmFyIG49dCg2MzM4NyksZT10KDE4MjcwKSxzPXQoNjEyNDkpLG89dCg4MTQ4NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsbCxpLHYscCl7bihsKTt2YXIgZD1lKHUpLHk9cyhkKSxFPW8oZC5sZW5ndGgpLGc9cD9FLTE6MCxEPXA/LTE6MTtpZihpPDIpZm9yKDs7KXtpZihnIGluIHkp''@;'; put 'put ''e3Y9eVtnXSxnKz1EO2JyZWFrfWlmKGcrPUQscD9nPDA6RTw9Zyl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3A/Zz49MDpFPmc7Zys9RClnIGluIHkmJih2PWwodix5W2ddLGcsZCkpO3JldHVybiB2fX0sNjM2MDYo''@;'; put 'put ''YyxmLHQpe3ZhciBuPXQoNDMzMDUpLGU9dCg3Nzk4MSkscz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdTtyZXR1cm4gZShvKSYmKCJmdW5jdGlvbiI9PXR5cGVvZih1PW8uY29uc3RydWN0b3IpJiYodT09PUFycmF5fHxlKHUucHJvdG90eXBlKSkmJih1''@;'; put 'put ''PXZvaWQgMCksbih1KSYmbnVsbD09PSh1PXVbc10pJiYodT12b2lkIDApKSx2b2lkIDA9PT11P0FycmF5OnV9fSw5MzE5MShjLGYsdCl7dmFyIG49dCg2MzYwNik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0dXJuIG5ldyhuKGUpKShzKX19LDE1NTM4KGMsZix0KXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIG49dCg2MzM4NyksZT10KDQzMzA1KSxzPXQoMjQ4NzcpLG89W10uc2xpY2UsdT17fTtjLmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odil7dmFyIHA9bih0aGlzKSxkPW8uY2FsbChhcmd1bWVudHMsMSkseT1mdW5jdGlvbigpe3ZhciBFPWQuY29uY2F0KG8uY2FsbChhcmd1''@;'; put 'put ''bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHk/ZnVuY3Rpb24oaSx2LHApe2lmKCEodiBpbiB1KSl7Zm9yKHZhciBkPVtdLHk9MDt5PHY7eSsrKWRbeV09ImFbIit5KyJdIjt1W3ZdPUZ1bmN0aW9uKCJGLGEiLCJyZXR1cm4gbmV3IEYoIitkLmpvaW4oIiwiKSsiKSIpfXJldHVybiB1''@;'; put 'put ''W3ZdKGkscCl9KHAsRS5sZW5ndGgsRSk6cyhwLEUsdil9O3JldHVybiBlKHAucHJvdG90eXBlKSYmKHkucHJvdG90eXBlPXAucHJvdG90eXBlKSx5fX0sMzQ4NDgoYyxmLHQpe3ZhciBuPXQoNTUwODkpLGU9dCg2NzU3NCkoInRvU3RyaW5nVGFnIikscz0iQXJndW1lbnRzIj09bihmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBhcmd1bWVudHN9KCkpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgbCxpLHY7cmV0dXJuIHZvaWQgMD09PXU/IlVuZGVmaW5lZCI6bnVsbD09PXU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoaT1mdW5jdGlvbih1LGwpe3RyeXtyZXR1cm4gdVtsXX1jYXRjaHt9fShsPU9i''@;'; put 'put ''amVjdCh1KSxlKSk/aTpzP24obCk6Ik9iamVjdCI9PSh2PW4obCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jYWxsZWU/IkFyZ3VtZW50cyI6dn19LDU1MDg5KGMpe3ZhciBmPXt9LnRvU3RyaW5nO2MuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZi5jYWxsKHQpLnNsaWNlKDgsLTEpfX0s''@;'; put 'put ''MzYxOTcoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQ3OTY3KS5mLGU9dCg4NDcxOSkscz10KDk2MDY1KSxvPXQoMzUwNTIpLHU9dCgxNjQ0MCksbD10KDQ4NzkwKSxpPXQoOTgxNzUpLHY9dCg3NDk3MCkscD10KDU1NzYyKSxkPXQoMTc2MykseT10KDEyOTg4KS5mYXN0S2V5LEU9dCgx''@;'; put 'put ''Mjg4OCksZz1kPyJfcyI6InNpemUiLEQ9ZnVuY3Rpb24oRix4KXt2YXIgayxBPXkoeCk7aWYoIkYiIT09QSlyZXR1cm4gRi5faVtBXTtmb3Ioaz1GLl9mO2s7az1rLm4paWYoay5rPT14KXJldHVybiBrfTtjLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKEYseCxBLGspe3ZhciBQ''@;'; put 'put ''PUYoZnVuY3Rpb24oTSxUKXt1KE0sUCx4LCJfaSIpLE0uX3Q9eCxNLl9pPWUobnVsbCksTS5fZj12b2lkIDAsTS5fbD12b2lkIDAsTVtnXT0wLG51bGwhPVQmJmwoVCxBLE1ba10sTSl9KTtyZXR1cm4gcyhQLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIFQ9RSh0aGlzLHgp''@;'; put 'put ''LGI9VC5faSxCPVQuX2Y7QjtCPUIubilCLnI9ITAsQi5wJiYoQi5wPUIucC5uPXZvaWQgMCksZGVsZXRlIGJbQi5pXTtULl9mPVQuX2w9dm9pZCAwLFRbZ109MH0sZGVsZXRlOmZ1bmN0aW9uKE0pe3ZhciBUPUUodGhpcyx4KSxiPUQoVCxNKTtpZihiKXt2YXIgQj1iLm4sVT1iLnA7ZGVsZXRl''@;'; put 'put ''IFQuX2lbYi5pXSxiLnI9ITAsVSYmKFUubj1CKSxCJiYoQi5wPVUpLFQuX2Y9PWImJihULl9mPUIpLFQuX2w9PWImJihULl9sPVUpLFRbZ10tLX1yZXR1cm4hIWJ9LGZvckVhY2g6ZnVuY3Rpb24oVCl7RSh0aGlzLHgpO2Zvcih2YXIgQixiPW8oVCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1l''@;'; put 'put ''bnRzWzFdOnZvaWQgMCwzKTtCPUI/Qi5uOnRoaXMuX2Y7KWZvcihiKEIudixCLmssdGhpcyk7QiYmQi5yOylCPUIucH0saGFzOmZ1bmN0aW9uKFQpe3JldHVybiEhRChFKHRoaXMseCksVCl9fSksZCYmbihQLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMs''@;'; put 'put ''eClbZ119fSksUH0sZGVmOmZ1bmN0aW9uKEYseCxBKXt2YXIgUCxNLGs9RChGLHgpO3JldHVybiBrP2sudj1BOihGLl9sPWs9e2k6TT15KHgsITApLGs6eCx2OkEscDpQPUYuX2wsbjp2b2lkIDAscjohMX0sRi5fZnx8KEYuX2Y9ayksUCYmKFAubj1rKSxGW2ddKyssIkYiIT09TSYmKEYuX2lb''@;'; put 'put ''TV09aykpLEZ9LGdldEVudHJ5OkQsc2V0U3Ryb25nOmZ1bmN0aW9uKEYseCxBKXtpKEYseCxmdW5jdGlvbihrLFApe3RoaXMuX3Q9RShrLHgpLHRoaXMuX2s9UCx0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIGs9dGhpcyxQPWsuX2ssTT1rLl9sO00mJk0ucjspTT1NLnA7cmV0''@;'; put 'put ''dXJuIGsuX3QmJihrLl9sPU09TT9NLm46ay5fdC5fZik/digwLCJrZXlzIj09UD9NLms6InZhbHVlcyI9PVA/TS52OltNLmssTS52XSk6KGsuX3Q9dm9pZCAwLHYoMSkpfSxBPyJlbnRyaWVzIjoidmFsdWVzIiwhQSwhMCkscCh4KX19fSw5OTg4MihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBu''@;'; put 'put ''PXQoOTYwNjUpLGU9dCgxMjk4OCkuZ2V0V2VhayxzPXQoNDIyOCksbz10KDQzMzA1KSx1PXQoMTY0NDApLGw9dCg0ODc5MCksaT10KDY2MTc5KSx2PXQoNTc5MTcpLHA9dCgxMjg4OCksZD1pKDUpLHk9aSg2KSxFPTAsZz1mdW5jdGlvbih4KXtyZXR1cm4geC5fbHx8KHguX2w9bmV3IEQpfSxE''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSxGPWZ1bmN0aW9uKHgsQSl7cmV0dXJuIGQoeC5hLGZ1bmN0aW9uKGspe3JldHVybiBrWzBdPT09QX0pfTtELnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKHgpe3ZhciBBPUYodGhpcyx4KTtpZihBKXJldHVybiBBWzFdfSxoYXM6ZnVuY3Rpb24oeCl7cmV0''@;'; put 'put ''dXJuISFGKHRoaXMseCl9LHNldDpmdW5jdGlvbih4LEEpe3ZhciBrPUYodGhpcyx4KTtrP2tbMV09QTp0aGlzLmEucHVzaChbeCxBXSl9LGRlbGV0ZTpmdW5jdGlvbih4KXt2YXIgQT15KHRoaXMuYSxmdW5jdGlvbihrKXtyZXR1cm4ga1swXT09PXh9KTtyZXR1cm5+QSYmdGhpcy5hLnNwbGlj''@;'; put 'put ''ZShBLDEpLCEhfkF9fSxjLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHgsQSxrLFApe3ZhciBNPXgoZnVuY3Rpb24oVCxiKXt1KFQsTSxBLCJfaSIpLFQuX3Q9QSxULl9pPUUrKyxULl9sPXZvaWQgMCxudWxsIT1iJiZsKGIsayxUW1BdLFQpfSk7cmV0dXJuIG4oTS5wcm90b3R5''@;'; put 'put ''cGUse2RlbGV0ZTpmdW5jdGlvbihUKXtpZighbyhUKSlyZXR1cm4hMTt2YXIgYj1lKFQpO3JldHVybiEwPT09Yj9nKHAodGhpcyxBKSkuZGVsZXRlKFQpOmImJnYoYix0aGlzLl9pKSYmZGVsZXRlIGJbdGhpcy5faV19LGhhczpmdW5jdGlvbihiKXtpZighbyhiKSlyZXR1cm4hMTt2YXIgQj1l''@;'; put 'put ''KGIpO3JldHVybiEwPT09Qj9nKHAodGhpcyxBKSkuaGFzKGIpOkImJnYoQix0aGlzLl9pKX19KSxNfSxkZWY6ZnVuY3Rpb24oeCxBLGspe3ZhciBQPWUocyhBKSwhMCk7cmV0dXJuITA9PT1QP2coeCkuc2V0KEEsayk6UFt4Ll9pXT1rLHh9LHVmc3RvcmU6Z319LDU4OTMzKGMsZix0KXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIG49dCg2NzUyNiksZT10KDkyMTI3KSxzPXQoMjg4NTkpLG89dCg5NjA2NSksdT10KDEyOTg4KSxsPXQoNDg3OTApLGk9dCgxNjQ0MCksdj10KDQzMzA1KSxwPXQoNzk0NDgpLGQ9dCg5ODkzMSkseT10KDM4NDQpLEU9dCg5ODg4MCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGcs''@;'; put 'put ''RCxGLHgsQSxrKXt2YXIgUD1uW2ddLE09UCxUPUE/InNldCI6ImFkZCIsYj1NJiZNLnByb3RvdHlwZSxCPXt9LFU9ZnVuY3Rpb24ocSl7dmFyIFg9YltxXTtzKGIscSwiZGVsZXRlIj09cT9mdW5jdGlvbihldCl7cmV0dXJuIShrJiYhdihldCkpJiZYLmNhbGwodGhpcywwPT09ZXQ/MDpldCl9''@;'; put 'put ''OiJoYXMiPT1xP2Z1bmN0aW9uKFYpe3JldHVybiEoayYmIXYoVikpJiZYLmNhbGwodGhpcywwPT09Vj8wOlYpfToiZ2V0Ij09cT9mdW5jdGlvbihWKXtyZXR1cm4gayYmIXYoVik/dm9pZCAwOlguY2FsbCh0aGlzLDA9PT1WPzA6Vil9OiJhZGQiPT1xP2Z1bmN0aW9uKFYpe3JldHVybiBYLmNh''@;'; put 'put ''bGwodGhpcywwPT09Vj8wOlYpLHRoaXN9OmZ1bmN0aW9uKFYsbHQpe3JldHVybiBYLmNhbGwodGhpcywwPT09Vj8wOlYsbHQpLHRoaXN9KX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIE0mJihrfHxiLmZvckVhY2gmJiFwKGZ1bmN0aW9uKCl7KG5ldyBNKS5lbnRyaWVzKCkubmV4dCgpfSkpKXt2''@;'; put 'put ''YXIgWj1uZXcgTSxudD1aW1RdKGs/e306LTAsMSkhPVosdHQ9cChmdW5jdGlvbigpe1ouaGFzKDEpfSkseXQ9ZChmdW5jdGlvbihxKXtuZXcgTShxKX0pLG10PSFrJiZwKGZ1bmN0aW9uKCl7Zm9yKHZhciBxPW5ldyBNLFg9NTtYLS07KXFbVF0oWCxYKTtyZXR1cm4hcS5oYXMoLTApfSk7eXR8''@;'; put 'put ''fCgoTT1EKGZ1bmN0aW9uKHEsWCl7aShxLE0sZyk7dmFyIGV0PUUobmV3IFAscSxNKTtyZXR1cm4gbnVsbCE9WCYmbChYLEEsZXRbVF0sZXQpLGV0fSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9TSksKHR0fHxtdCkmJihVKCJkZWxldGUiKSxVKCJoYXMiKSxBJiZVKCJnZXQiKSksKG10''@;'; put 'put ''fHxudCkmJlUoVCksayYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9ZWxzZSBNPXguZ2V0Q29uc3RydWN0b3IoRCxnLEEsVCksbyhNLnByb3RvdHlwZSxGKSx1Lk5FRUQ9ITA7cmV0dXJuIHkoTSxnKSxCW2ddPU0sZShlLkcrZS5XK2UuRiooTSE9UCksQiksa3x8eC5zZXRTdHJvbmcoTSxnLEEp''@;'; put 'put ''LE19fSw1NjA5NChjKXt2YXIgZj1jLmV4cG9ydHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPWYpfSw2NzIyNyhjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNDc5NjcpLGU9dCgxMTk5Nik7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtvIGluIHM/''@;'; put 'put ''bi5mKHMsbyxlKDAsdSkpOnNbb109dX19LDM1MDUyKGMsZix0KXt2YXIgbj10KDYzMzg3KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLG8pe2lmKG4oZSksdm9pZCAwPT09cylyZXR1cm4gZTtzd2l0Y2gobyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gZS5jYWxsKHMsdSl9O2Nh''@;'; put 'put ''c2UgMjpyZXR1cm4gZnVuY3Rpb24odSxsKXtyZXR1cm4gZS5jYWxsKHMsdSxsKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbih1LGwsaSl7cmV0dXJuIGUuY2FsbChzLHUsbCxpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkocyxhcmd1bWVudHMpfX19LDU1Mzg1KGMsZix0KXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCg3OTQ0OCksZT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLHM9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcsbz1mdW5jdGlvbih1KXtyZXR1cm4gdT45P3U6IjAiK3V9O2MuZXhwb3J0cz1uKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6Mzku''@;'; put 'put ''OTk5WiIhPXMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pfHwhbihmdW5jdGlvbigpe3MuY2FsbChuZXcgRGF0ZShOYU4pKX0pP2Z1bmN0aW9uKCl7aWYoIWlzRmluaXRlKGUuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIGw9''@;'; put 'put ''dGhpcyxpPWwuZ2V0VVRDRnVsbFllYXIoKSx2PWwuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscD1pPDA/Ii0iOmk+OTk5OT8iKyI6IiI7cmV0dXJuIHArKCIwMDAwMCIrTWF0aC5hYnMoaSkpLnNsaWNlKHA/LTY6LTQpKyItIitvKGwuZ2V0VVRDTW9udGgoKSsxKSsiLSIrbyhsLmdldFVUQ0RhdGUo''@;'; put 'put ''KSkrIlQiK28obC5nZXRVVENIb3VycygpKSsiOiIrbyhsLmdldFVUQ01pbnV0ZXMoKSkrIjoiK28obC5nZXRVVENTZWNvbmRzKCkpKyIuIisodj45OT92OiIwIitvKHYpKSsiWiJ9OnN9LDIwMTA3KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoODMwNDgpLHM9Im51bWJl''@;'; put 'put ''ciI7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe2lmKCJzdHJpbmciIT09byYmbyE9PXMmJiJkZWZhdWx0IiE9PW8pdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaGludCIpO3JldHVybiBlKG4odGhpcyksbyE9cyl9fSwzMzQ0KGMpe2MuZXhwb3J0cz1mdW5jdGlvbihmKXtpZihudWxsPT1mKXRo''@;'; put 'put ''cm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZik7cmV0dXJuIGZ9fSwxNzYzKGMsZix0KXtjLmV4cG9ydHM9IXQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9''@;'; put 'put ''KX0sNDYwMzQoYyxmLHQpe3ZhciBuPXQoNDMzMDUpLGU9dCg2NzUyNikuZG9jdW1lbnQscz1uKGUpJiZuKGUuY3JlYXRlRWxlbWVudCk7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiBzP2UuY3JlYXRlRWxlbWVudChvKTp7fX19LDg2MTQwKGMpe2MuZXhwb3J0cz0iY29uc3RydWN0b3Is''@;'; put 'put ''aGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwxNTk2OShjLGYsdCl7dmFyIG49dCg1MTMxMSksZT10KDEwNjApLHM9dCg4NDQ5KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7''@;'; put 'put ''dmFyIHU9bihvKSxsPWUuZjtpZihsKWZvcih2YXIgZCxpPWwobyksdj1zLmYscD0wO2kubGVuZ3RoPnA7KXYuY2FsbChvLGQ9aVtwKytdKSYmdS5wdXNoKGQpO3JldHVybiB1fX0sOTIxMjcoYyxmLHQpe3ZhciBuPXQoNjc1MjYpLGU9dCg1NjA5NCkscz10KDMzMzQxKSxvPXQoMjg4NTkpLHU9''@;'; put 'put ''dCgzNTA1MiksbD0icHJvdG90eXBlIixpPWZ1bmN0aW9uKHYscCxkKXt2YXIgUCxNLFQsYix5PXYmaS5GLEU9diZpLkcsRD12JmkuUCxGPXYmaS5CLHg9RT9uOnYmaS5TP25bcF18fChuW3BdPXt9KToobltwXXx8e30pW2xdLEE9RT9lOmVbcF18fChlW3BdPXt9KSxrPUFbbF18fChBW2xdPXt9''@;'; put 'put ''KTtmb3IoUCBpbiBFJiYoZD1wKSxkKVQ9KChNPSF5JiZ4JiZ2b2lkIDAhPT14W1BdKT94OmQpW1BdLGI9RiYmTT91KFQsbik6RCYmImZ1bmN0aW9uIj09dHlwZW9mIFQ/dShGdW5jdGlvbi5jYWxsLFQpOlQseCYmbyh4LFAsVCx2JmkuVSksQVtQXSE9VCYmcyhBLFAsYiksRCYma1tQXSE9VCYm''@;'; put 'put ''KGtbUF09VCl9O24uY29yZT1lLGkuRj0xLGkuRz0yLGkuUz00LGkuUD04LGkuQj0xNixpLlc9MzIsaS5VPTY0LGkuUj0xMjgsYy5leHBvcnRzPWl9LDI1MjAzKGMsZix0KXt2YXIgbj10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHM9Ly4vO3RyeXsiLy4vIltl''@;'; put 'put ''XShzKX1jYXRjaHt0cnl7cmV0dXJuIHNbbl09ITEsISIvLi8iW2VdKHMpfWNhdGNoe319cmV0dXJuITB9fSw3OTQ0OChjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7dHJ5e3JldHVybiEhZigpfWNhdGNoe3JldHVybiEwfX19LDY5MjI4KGMsZix0KXsidXNlIHN0cmljdCI7dCg5NDExNik7dmFy''@;'; put 'put ''IG49dCgyODg1OSksZT10KDMzMzQxKSxzPXQoNzk0NDgpLG89dCgzMzQ0KSx1PXQoNjc1NzQpLGw9dCg2OTYwMCksaT11KCJzcGVjaWVzIiksdj0hcyhmdW5jdGlvbigpe3ZhciBkPS8uLztyZXR1cm4gZC5leGVjPWZ1bmN0aW9uKCl7dmFyIHk9W107cmV0dXJuIHkuZ3JvdXBzPXthOiI3In0s''@;'; put 'put ''eX0sIjciIT09IiIucmVwbGFjZShkLCIkPGE+Iil9KSxwPWZ1bmN0aW9uKCl7dmFyIGQ9Lyg/OikvLHk9ZC5leGVjO2QuZXhlYz1mdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIEU9ImFiIi5zcGxpdChkKTtyZXR1cm4gMj09PUUubGVuZ3RoJiYiYSI9PT1F''@;'; put 'put ''WzBdJiYiYiI9PT1FWzFdfSgpO2MuZXhwb3J0cz1mdW5jdGlvbihkLHksRSl7dmFyIGc9dShkKSxEPSFzKGZ1bmN0aW9uKCl7dmFyIE09e307cmV0dXJuIE1bZ109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbZF0oTSl9KSxGPUQ/IXMoZnVuY3Rpb24oKXt2YXIgTT0hMSxUPS9hLztyZXR1''@;'; put 'put ''cm4gVC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIE09ITAsbnVsbH0sInNwbGl0Ij09PWQmJihULmNvbnN0cnVjdG9yPXt9LFQuY29uc3RydWN0b3JbaV09ZnVuY3Rpb24oKXtyZXR1cm4gVH0pLFRbZ10oIiIpLCFNfSk6dm9pZCAwO2lmKCFEfHwhRnx8InJlcGxhY2UiPT09ZCYmIXZ8fCJzcGxp''@;'; put 'put ''dCI9PT1kJiYhcCl7dmFyIHg9Ly4vW2ddLEE9RShvLGcsIiJbZF0sZnVuY3Rpb24oVCxiLEIsVSxaKXtyZXR1cm4gYi5leGVjPT09bD9EJiYhWj97ZG9uZTohMCx2YWx1ZTp4LmNhbGwoYixCLFUpfTp7ZG9uZTohMCx2YWx1ZTpULmNhbGwoQixiLFUpfTp7ZG9uZTohMX19KSxQPUFbMV07bihT''@;'; put 'put ''dHJpbmcucHJvdG90eXBlLGQsQVswXSksZShSZWdFeHAucHJvdG90eXBlLGcsMj09eT9mdW5jdGlvbihNLFQpe3JldHVybiBQLmNhbGwoTSx0aGlzLFQpfTpmdW5jdGlvbihNKXtyZXR1cm4gUC5jYWxsKE0sdGhpcyl9KX19fSwxMTU4KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4''@;'; put 'put ''KTtjLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHM9IiI7cmV0dXJuIGUuZ2xvYmFsJiYocys9ImciKSxlLmlnbm9yZUNhc2UmJihzKz0iaSIpLGUubXVsdGlsaW5lJiYocys9Im0iKSxlLnVuaWNvZGUmJihzKz0idSIpLGUuc3RpY2t5JiYocys9InkiKSxzfX0sNDg3OTAoYyxm''@;'; put 'put ''LHQpe3ZhciBuPXQoMzUwNTIpLGU9dCg5NzM2OCkscz10KDE1MDgpLG89dCg0MjI4KSx1PXQoODE0ODUpLGw9dCgyMDc2MiksaT17fSx2PXt9LHA9Yy5leHBvcnRzPWZ1bmN0aW9uKGQseSxFLGcsRCl7dmFyIGssUCxNLFQsRj1EP2Z1bmN0aW9uKCl7cmV0dXJuIGR9OmwoZCkseD1uKEUsZyx5''@;'; put 'put ''PzI6MSksQT0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBGKXRocm93IFR5cGVFcnJvcihkKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKHMoRikpe2ZvcihrPXUoZC5sZW5ndGgpO2s+QTtBKyspaWYoKFQ9eT94KG8oUD1kW0FdKVswXSxQWzFdKTp4KGRbQV0pKT09PWl8fFQ9PT12KXJldHVybiBU''@;'; put 'put ''fWVsc2UgZm9yKE09Ri5jYWxsKGQpOyEoUD1NLm5leHQoKSkuZG9uZTspaWYoKFQ9ZShNLHgsUC52YWx1ZSx5KSk9PT1pfHxUPT09dilyZXR1cm4gVH07cC5CUkVBSz1pLHAuUkVUVVJOPXZ9LDQ5NDYxKGMsZix0KXtjLmV4cG9ydHM9dCg0NDU1NikoIm5hdGl2ZS1mdW5jdGlvbi10by1zdHJp''@;'; put 'put ''bmciLEZ1bmN0aW9uLnRvU3RyaW5nKX0sNjc1MjYoYyl7dmFyIGY9Yy5leHBvcnRzPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6dHlwZW9mIHNlbGY8InUiJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgX19nJiYoX19nPWYpfSw1NzkxNyhjKXt2YXIgZj17fS5oYXNPd25Qcm9wZXJ0eTtjLmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZi5jYWxsKHQsbil9fSwzMzM0MShjLGYsdCl7dmFyIG49dCg0Nzk2NyksZT10KDExOTk2KTtjLmV4cG9ydHM9dCgxNzYzKT9mdW5jdGlv''@;'; put 'put ''bihzLG8sdSl7cmV0dXJuIG4uZihzLG8sZSgxLHUpKX06ZnVuY3Rpb24ocyxvLHUpe3JldHVybiBzW29dPXUsc319LDYxMzA4KGMsZix0KXt2YXIgbj10KDY3NTI2KS5kb2N1bWVudDtjLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LDIyOTU2KGMsZix0KXtjLmV4cG9ydHM9IXQoMTc2''@;'; put 'put ''MykmJiF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkodCg0NjAzNCkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSw5ODg4MChjLGYsdCl7dmFyIG49dCg0MzMwNSksZT10KDI1MTcwKS5zZXQ7Yy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKHMsbyx1KXt2YXIgaSxsPW8uY29uc3RydWN0b3I7cmV0dXJuIGwhPT11JiYiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGk9bC5wcm90b3R5cGUpIT09dS5wcm90b3R5cGUmJm4oaSkmJmUmJmUocyxpKSxzfX0sMjQ4NzcoYyl7Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuKXt2YXIgZT12''@;'; put 'put ''b2lkIDA9PT1uO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlP2YoKTpmLmNhbGwobik7Y2FzZSAxOnJldHVybiBlP2YodFswXSk6Zi5jYWxsKG4sdFswXSk7Y2FzZSAyOnJldHVybiBlP2YodFswXSx0WzFdKTpmLmNhbGwobix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gZT9mKHRb''@;'; put 'put ''MF0sdFsxXSx0WzJdKTpmLmNhbGwobix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBlP2YodFswXSx0WzFdLHRbMl0sdFszXSk6Zi5jYWxsKG4sdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGYuYXBwbHkobix0KX19LDYxMjQ5KGMsZix0KXt2YXIgbj10KDU1MDg5KTtjLmV4cG9y''@;'; put 'put ''dHM9T2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJTdHJpbmciPT1uKGUpP2Uuc3BsaXQoIiIpOk9iamVjdChlKX19LDE1MDgoYyxmLHQpe3ZhciBuPXQoNjA5MDYpLGU9dCg2NzU3NCkoIml0ZXJhdG9yIikscz1BcnJheS5wcm90''@;'; put 'put ''b3R5cGU7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiB2b2lkIDAhPT1vJiYobi5BcnJheT09PW98fHNbZV09PT1vKX19LDc3OTgxKGMsZix0KXt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24ocyl7cmV0dXJuIkFycmF5Ij09bihzKX19LDMzODQy''@;'; put 'put ''KGMsZix0KXt2YXIgbj10KDQzMzA1KSxlPU1hdGguZmxvb3I7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiFuKG8pJiZpc0Zpbml0ZShvKSYmZShvKT09PW99fSw0MzMwNShjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBmP251bGwhPT1mOiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBmfX0sOTU0MTEoYyxmLHQpe3ZhciBuPXQoNDMzMDUpLGU9dCg1NTA4OSkscz10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7dmFyIHU7cmV0dXJuIG4obykmJih2b2lkIDAhPT0odT1vW3NdKT8hIXU6IlJlZ0V4cCI9PWUobykpfX0sOTczNjgo''@;'; put 'put ''YyxmLHQpe3ZhciBuPXQoNDIyOCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvLHUpe3RyeXtyZXR1cm4gdT9zKG4obylbMF0sb1sxXSk6cyhvKX1jYXRjaChpKXt2YXIgbD1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1sJiZuKGwuY2FsbChlKSksaX19fSw2MDMyKGMsZix0KXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIG49dCg4NDcxOSksZT10KDExOTk2KSxzPXQoMzg0NCksbz17fTt0KDMzMzQxKShvLHQoNjc1NzQpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjLmV4cG9ydHM9ZnVuY3Rpb24odSxsLGkpe3UucHJvdG90eXBlPW4obyx7bmV4dDplKDEsaSl9KSxzKHUsbCsi''@;'; put 'put ''IEl0ZXJhdG9yIil9fSw5ODE3NShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoMjI3NTApLGU9dCg5MjEyNykscz10KDI4ODU5KSxvPXQoMzMzNDEpLHU9dCg2MDkwNiksbD10KDYwMzIpLGk9dCgzODQ0KSx2PXQoNDA2MjcpLHA9dCg2NzU3NCkoIml0ZXJhdG9yIiksZD0hKFtdLmtleXMm''@;'; put 'put ''JiJuZXh0ImluW10ua2V5cygpKSxFPSJrZXlzIixnPSJ2YWx1ZXMiLEQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307Yy5leHBvcnRzPWZ1bmN0aW9uKEYseCxBLGssUCxNLFQpe2woQSx4LGspO3ZhciBYLGV0LFYsYj1mdW5jdGlvbihsdCl7aWYoIWQmJmx0IGluIG50KXJldHVybiBudFtsdF07''@;'; put 'put ''c3dpdGNoKGx0KXtjYXNlIEU6Y2FzZSBnOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgQSh0aGlzLGx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMsbHQpfX0sQj14KyIgSXRlcmF0b3IiLFU9UD09ZyxaPSExLG50PUYucHJvdG90eXBlLHR0PW50W3BdfHxudFsi''@;'; put 'put ''QEBpdGVyYXRvciJdfHxQJiZudFtQXSx5dD10dHx8YihQKSxtdD1QP1U/YigiZW50cmllcyIpOnl0OnZvaWQgMCxxPSJBcnJheSI9PXgmJm50LmVudHJpZXN8fHR0O2lmKHEmJihWPXYocS5jYWxsKG5ldyBGKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmVi5uZXh0JiYoaShWLEIsITApLCFuJiYi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgVltwXSYmbyhWLHAsRCkpLFUmJnR0JiZ0dC5uYW1lIT09ZyYmKFo9ITAseXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHQuY2FsbCh0aGlzKX0pLCghbnx8VCkmJihkfHxafHwhbnRbcF0pJiZvKG50LHAseXQpLHVbeF09eXQsdVtCXT1ELFApaWYoWD17dmFsdWVzOlU/''@;'; put 'put ''eXQ6YihnKSxrZXlzOk0/eXQ6YihFKSxlbnRyaWVzOm10fSxUKWZvcihldCBpbiBYKWV0IGluIG50fHxzKG50LGV0LFhbZXRdKTtlbHNlIGUoZS5QK2UuRiooZHx8WikseCxYKTtyZXR1cm4gWH19LDk4OTMxKGMsZix0KXt2YXIgbj10KDY3NTc0KSgiaXRlcmF0b3IiKSxlPSExO3RyeXt2YXIg''@;'; put 'put ''cz1bN11bbl0oKTtzLnJldHVybj1mdW5jdGlvbigpe2U9ITB9LEFycmF5LmZyb20ocyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaHt9Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7aWYoIXUmJiFlKXJldHVybiExO3ZhciBsPSExO3RyeXt2YXIgaT1bN10sdj1pW25dKCk7di5uZXh0PWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJue2RvbmU6bD0hMH19LGlbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdn0sbyhpKX1jYXRjaHt9cmV0dXJuIGx9fSw3NDk3MChjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZix0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZn19fSw2MDkwNihjKXtjLmV4cG9ydHM9e319LDIyNzUwKGMp''@;'; put 'put ''e2MuZXhwb3J0cz0hMX0sNzU1NTEoYyl7dmFyIGY9TWF0aC5leHBtMTtjLmV4cG9ydHM9IWZ8fGYoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZigxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWYoLTJlLTE3KT9mdW5jdGlvbihuKXtyZXR1cm4gMD09KG49K24pP246bj4tMWUtNiYm''@;'; put 'put ''bjwxZS02P24rbipuLzI6TWF0aC5leHAobiktMX06Zn0sNzIxMjIoYyxmLHQpe3ZhciBuPXQoMzczMyksZT1NYXRoLnBvdyxzPWUoMiwtNTIpLG89ZSgyLC0yMyksdT1lKDIsMTI3KSooMi1vKSxsPWUoMiwtMTI2KTtjLmV4cG9ydHM9TWF0aC5mcm91bmR8fGZ1bmN0aW9uKHApe3ZhciBFLGcs''@;'; put 'put ''ZD1NYXRoLmFicyhwKSx5PW4ocCk7cmV0dXJuIGQ8bD95KihkL2wvbysxL3MtMS9zKSpsKm86KGc9KEU9KDErby9zKSpkKS0oRS1kKSk+dXx8ZyE9Zz95KigxLzApOnkqZ319LDcxNDczKGMpe2MuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8''@;'; put 'put ''MWUtOD90LXQqdC8yOk1hdGgubG9nKDErdCl9fSwzNzMzKGMpe2MuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LDEyOTg4KGMsZix0KXt2YXIgbj10KDQ0MTUpKCJtZXRhIiksZT10KDQzMzA1KSxzPXQoNTc5MTcpLG89''@;'; put 'put ''dCg0Nzk2NykuZix1PTAsbD1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxpPSF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBsKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksdj1mdW5jdGlvbihnKXtvKGcsbix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7''@;'; put 'put ''fX19KX0sRT1jLmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihnLEQpe2lmKCFlKGcpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZz9nOigic3RyaW5nIj09dHlwZW9mIGc/IlMiOiJQIikrZztpZighcyhnLG4pKXtpZighbChnKSlyZXR1cm4iRiI7aWYoIUQpcmV0dXJu''@;'; put 'put ''IkUiO3YoZyl9cmV0dXJuIGdbbl0uaX0sZ2V0V2VhazpmdW5jdGlvbihnLEQpe2lmKCFzKGcsbikpe2lmKCFsKGcpKXJldHVybiEwO2lmKCFEKXJldHVybiExO3YoZyl9cmV0dXJuIGdbbl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZyl7cmV0dXJuIGkmJkUuTkVFRCYmbChnKSYmIXMoZyxuKSYm''@;'; put 'put ''dihnKSxnfX19LDk3MzgwKGMsZix0KXt2YXIgbj10KDkzMzg2KSxlPXQoOTIxMjcpLHM9dCg0NDU1NikoIm1ldGFkYXRhIiksbz1zLnN0b3JlfHwocy5zdG9yZT1uZXcodCg3OTM5NykpKSx1PWZ1bmN0aW9uKEUsZyxEKXt2YXIgRj1vLmdldChFKTtpZighRil7aWYoIUQpcmV0dXJuO28uc2V0''@;'; put 'put ''KEUsRj1uZXcgbil9dmFyIHg9Ri5nZXQoZyk7aWYoIXgpe2lmKCFEKXJldHVybjtGLnNldChnLHg9bmV3IG4pfXJldHVybiB4fTtjLmV4cG9ydHM9e3N0b3JlOm8sbWFwOnUsaGFzOmZ1bmN0aW9uKEUsZyxEKXt2YXIgRj11KGcsRCwhMSk7cmV0dXJuIHZvaWQgMCE9PUYmJkYuaGFzKEUpfSxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oRSxnLEQpe3ZhciBGPXUoZyxELCExKTtyZXR1cm4gdm9pZCAwPT09Rj92b2lkIDA6Ri5nZXQoRSl9LHNldDpmdW5jdGlvbihFLGcsRCxGKXt1KEQsRiwhMCkuc2V0KEUsZyl9LGtleXM6ZnVuY3Rpb24oRSxnKXt2YXIgRD11KEUsZywhMSksRj1bXTtyZXR1cm4gRCYmRC5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKHgsQSl7Ri5wdXNoKEEpfSksRn0sa2V5OmZ1bmN0aW9uKEUpe3JldHVybiB2b2lkIDA9PT1FfHwic3ltYm9sIj09dHlwZW9mIEU/RTpTdHJpbmcoRSl9LGV4cDpmdW5jdGlvbihFKXtlKGUuUywiUmVmbGVjdCIsRSl9fX0sMjgyMDYoYyxmLHQpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDE3NjMpLGU9dCg1MTMxMSkscz10KDEwNjApLG89dCg4NDQ5KSx1PXQoMTgyNzApLGw9dCg2MTI0OSksaT1PYmplY3QuYXNzaWduO2MuZXhwb3J0cz0haXx8dCg3OTQ0OCkoZnVuY3Rpb24oKXt2YXIgdj17fSxwPXt9LGQ9U3ltYm9sKCkseT0iYWJjZGVmZ2hpamtsbW5vcHFy''@;'; put 'put ''c3QiO3JldHVybiB2W2RdPTcseS5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihFKXtwW0VdPUV9KSw3IT1pKHt9LHYpW2RdfHxPYmplY3Qua2V5cyhpKHt9LHApKS5qb2luKCIiKSE9eX0pP2Z1bmN0aW9uKHAsZCl7Zm9yKHZhciB5PXUocCksRT1hcmd1bWVudHMubGVuZ3RoLGc9MSxEPXMu''@;'; put 'put ''ZixGPW8uZjtFPmc7KWZvcih2YXIgTSx4PWwoYXJndW1lbnRzW2crK10pLEE9RD9lKHgpLmNvbmNhdChEKHgpKTplKHgpLGs9QS5sZW5ndGgsUD0wO2s+UDspTT1BW1ArK10sKCFufHxGLmNhbGwoeCxNKSkmJih5W01dPXhbTV0pO3JldHVybiB5fTppfSw4NDcxOShjLGYsdCl7dmFyIG49dCg0''@;'; put 'put ''MjI4KSxlPXQoMjE2MjYpLHM9dCg4NjE0MCksbz10KDQwNzY2KSgiSUVfUFJPVE8iKSx1PWZ1bmN0aW9uKCl7fSxsPSJwcm90b3R5cGUiLGk9ZnVuY3Rpb24oKXt2YXIgRSx2PXQoNDYwMzQpKCJpZnJhbWUiKSxwPXMubGVuZ3RoO2Zvcih2LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQoNjEzMDgp''@;'; put 'put ''LmFwcGVuZENoaWxkKHYpLHYuc3JjPSJqYXZhc2NyaXB0OiIsKEU9di5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksRS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxFLmNsb3NlKCksaT1FLkY7cC0tOylkZWxldGUgaVtsXVtzW3BdXTtyZXR1cm4g''@;'; put 'put ''aSgpfTtjLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24ocCxkKXt2YXIgeTtyZXR1cm4gbnVsbCE9PXA/KHVbbF09bihwKSx5PW5ldyB1LHVbbF09bnVsbCx5W29dPXApOnk9aSgpLHZvaWQgMD09PWQ/eTplKHksZCl9fSw0Nzk2NyhjLGYsdCl7dmFyIG49dCg0MjI4KSxlPXQoMjI5''@;'; put 'put ''NTYpLHM9dCg4MzA0OCksbz1PYmplY3QuZGVmaW5lUHJvcGVydHk7Zi5mPXQoMTc2Myk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGwsaSx2KXtpZihuKGwpLGk9cyhpLCEwKSxuKHYpLGUpdHJ5e3JldHVybiBvKGwsaSx2KX1jYXRjaHt9aWYoImdldCJpbiB2fHwic2V0ImluIHYp''@;'; put 'put ''dGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEiKTtyZXR1cm4idmFsdWUiaW4gdiYmKGxbaV09di52YWx1ZSksbH19LDIxNjI2KGMsZix0KXt2YXIgbj10KDQ3OTY3KSxlPXQoNDIyOCkscz10KDUxMzExKTtjLmV4cG9ydHM9dCgxNzYzKT9PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydGllczpmdW5jdGlvbih1LGwpe2UodSk7Zm9yKHZhciBkLGk9cyhsKSx2PWkubGVuZ3RoLHA9MDt2PnA7KW4uZih1LGQ9aVtwKytdLGxbZF0pO3JldHVybiB1fX0sNjg2NDEoYyxmLHQpe3ZhciBuPXQoODQ0OSksZT10KDExOTk2KSxzPXQoNTcyMjEpLG89dCg4MzA0OCksdT10KDU3OTE3''@;'; put 'put ''KSxsPXQoMjI5NTYpLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmLmY9dCgxNzYzKT9pOmZ1bmN0aW9uKHAsZCl7aWYocD1zKHApLGQ9byhkLCEwKSxsKXRyeXtyZXR1cm4gaShwLGQpfWNhdGNoe31pZih1KHAsZCkpcmV0dXJuIGUoIW4uZi5jYWxsKHAsZCkscFtkXSl9fSw0''@;'; put 'put ''NzY1KGMsZix0KXt2YXIgbj10KDU3MjIxKSxlPXQoNTk0MTUpLmYscz17fS50b1N0cmluZyxvPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107Yy5leHBvcnRzLmY9''@;'; put 'put ''ZnVuY3Rpb24oaSl7cmV0dXJuIG8mJiJbb2JqZWN0IFdpbmRvd10iPT1zLmNhbGwoaSk/ZnVuY3Rpb24obCl7dHJ5e3JldHVybiBlKGwpfWNhdGNoe3JldHVybiBvLnNsaWNlKCl9fShpKTplKG4oaSkpfX0sNTk0MTUoYyxmLHQpe3ZhciBuPXQoMzQ1NjEpLGU9dCg4NjE0MCkuY29uY2F0KCJs''@;'; put 'put ''ZW5ndGgiLCJwcm90b3R5cGUiKTtmLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKG8pe3JldHVybiBuKG8sZSl9fSwxMDYwKGMsZil7Zi5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDQwNjI3KGMsZix0KXt2YXIgbj10KDU3OTE3KSxlPXQoMTgyNzApLHM9''@;'; put 'put ''dCg0MDc2NikoIklFX1BST1RPIiksbz1PYmplY3QucHJvdG90eXBlO2MuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHUpe3JldHVybiB1PWUodSksbih1LHMpP3Vbc106ImZ1bmN0aW9uIj09dHlwZW9mIHUuY29uc3RydWN0b3ImJnUgaW5zdGFuY2VvZiB1LmNvbnN0''@;'; put 'put ''cnVjdG9yP3UuY29uc3RydWN0b3IucHJvdG90eXBlOnUgaW5zdGFuY2VvZiBPYmplY3Q/bzpudWxsfX0sMzQ1NjEoYyxmLHQpe3ZhciBuPXQoNTc5MTcpLGU9dCg1NzIyMSkscz10KDYxNDY0KSghMSksbz10KDQwNzY2KSgiSUVfUFJPVE8iKTtjLmV4cG9ydHM9ZnVuY3Rpb24odSxsKXt2YXIg''@;'; put 'put ''ZCxpPWUodSksdj0wLHA9W107Zm9yKGQgaW4gaSlkIT1vJiZuKGksZCkmJnAucHVzaChkKTtmb3IoO2wubGVuZ3RoPnY7KW4oaSxkPWxbdisrXSkmJih+cyhwLGQpfHxwLnB1c2goZCkpO3JldHVybiBwfX0sNTEzMTEoYyxmLHQpe3ZhciBuPXQoMzQ1NjEpLGU9dCg4NjE0MCk7Yy5leHBvcnRz''@;'; put 'put ''PU9iamVjdC5rZXlzfHxmdW5jdGlvbihvKXtyZXR1cm4gbihvLGUpfX0sODQ0OShjLGYpe2YuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sODA5MjMoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg1NjA5NCkscz10KDc5NDQ4KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXt2YXIgbD0oZS5P''@;'; put 'put ''YmplY3R8fHt9KVtvXXx8T2JqZWN0W29dLGk9e307aVtvXT11KGwpLG4obi5TK24uRipzKGZ1bmN0aW9uKCl7bCgxKX0pLCJPYmplY3QiLGkpfX0sOTYyMjIoYyxmLHQpe3ZhciBuPXQoNTk0MTUpLGU9dCgxMDYwKSxzPXQoNDIyOCksbz10KDY3NTI2KS5SZWZsZWN0O2MuZXhwb3J0cz1vJiZv''@;'; put 'put ''Lm93bktleXN8fGZ1bmN0aW9uKGwpe3ZhciBpPW4uZihzKGwpKSx2PWUuZjtyZXR1cm4gdj9pLmNvbmNhdCh2KGwpKTppfX0sMzM1ODkoYyxmLHQpe3ZhciBuPXQoNjc1MjYpLnBhcnNlRmxvYXQsZT10KDQwNjI5KS50cmltO2MuZXhwb3J0cz0xL24odCg3ODQ1MSkrIi0wIikhPS0xLzA/ZnVu''@;'; put 'put ''Y3Rpb24obyl7dmFyIHU9ZShTdHJpbmcobyksMyksbD1uKHUpO3JldHVybiAwPT09bCYmIi0iPT11LmNoYXJBdCgwKT8tMDpsfTpufSw4MjczOChjLGYsdCl7dmFyIG49dCg2NzUyNikucGFyc2VJbnQsZT10KDQwNjI5KS50cmltLHM9dCg3ODQ1MSksbz0vXlstK10/MFt4WF0vO2MuZXhwb3J0''@;'; put 'put ''cz04IT09bihzKyIwOCIpfHwyMiE9PW4ocysiMHgxNiIpP2Z1bmN0aW9uKGwsaSl7dmFyIHY9ZShTdHJpbmcobCksMyk7cmV0dXJuIG4odixpPj4+MHx8KG8udGVzdCh2KT8xNjoxMCkpfTpufSwxMTk5NihjKXtjLmV4cG9ydHM9ZnVuY3Rpb24oZix0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEm''@;'; put 'put ''ZiksY29uZmlndXJhYmxlOiEoMiZmKSx3cml0YWJsZTohKDQmZiksdmFsdWU6dH19fSw5NjA2NShjLGYsdCl7dmFyIG49dCgyODg1OSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvKXtmb3IodmFyIHUgaW4gcyluKGUsdSxzW3VdLG8pO3JldHVybiBlfX0sMjg4NTkoYyxmLHQpe3ZhciBuPXQo''@;'; put 'put ''Njc1MjYpLGU9dCgzMzM0MSkscz10KDU3OTE3KSxvPXQoNDQxNSkoInNyYyIpLHU9dCg0OTQ2MSksbD0idG9TdHJpbmciLGk9KCIiK3UpLnNwbGl0KGwpO3QoNTYwOTQpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odil7cmV0dXJuIHUuY2FsbCh2KX0sKGMuZXhwb3J0cz1mdW5jdGlvbih2LHAs''@;'; put 'put ''ZCx5KXt2YXIgRT0iZnVuY3Rpb24iPT10eXBlb2YgZDtFJiYocyhkLCJuYW1lIil8fGUoZCwibmFtZSIscCkpLHZbcF0hPT1kJiYoRSYmKHMoZCxvKXx8ZShkLG8sdltwXT8iIit2W3BdOmkuam9pbihTdHJpbmcocCkpKSksdj09PW4/dltwXT1kOnk/dltwXT92W3BdPWQ6ZSh2LHAsZCk6KGRl''@;'; put 'put ''bGV0ZSB2W3BdLGUodixwLGQpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsbCxmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZ0aGlzW29dfHx1LmNhbGwodGhpcyl9KX0sNTI1MzUoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM0ODQ4KSxlPVJlZ0V4cC5wcm90''@;'; put 'put ''b3R5cGUuZXhlYztjLmV4cG9ydHM9ZnVuY3Rpb24ocyxvKXt2YXIgdT1zLmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciBsPXUuY2FsbChzLG8pO2lmKCJvYmplY3QiIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29t''@;'; put 'put ''ZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwiKTtyZXR1cm4gbH1pZigiUmVnRXhwIiE9PW4ocykpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlciIpO3JldHVybiBlLmNhbGwocyxvKX19LDY5NjAwKGMsZix0''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHAsZCxuPXQoMTE1OCksZT1SZWdFeHAucHJvdG90eXBlLmV4ZWMscz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Usbz1lLHU9Imxhc3RJbmRleCIsbD0oZD0vYiovZyxlLmNhbGwocD0vYS8sImEiKSxlLmNhbGwoZCwiYSIpLDAhPT1wW3VdfHwwIT09ZFt1XSks''@;'; put 'put ''aT12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07KGx8fGkpJiYobz1mdW5jdGlvbihkKXt2YXIgRSxnLEQsRix5PXRoaXM7cmV0dXJuIGkmJihnPW5ldyBSZWdFeHAoIl4iK3kuc291cmNlKyIkKD8hXFxzKSIsbi5jYWxsKHkpKSksbCYmKEU9eVt1XSksRD1lLmNhbGwoeSxkKSxsJiZEJiYo''@;'; put 'put ''eVt1XT15Lmdsb2JhbD9ELmluZGV4K0RbMF0ubGVuZ3RoOkUpLGkmJkQmJkQubGVuZ3RoPjEmJnMuY2FsbChEWzBdLGcsZnVuY3Rpb24oKXtmb3IoRj0xO0Y8YXJndW1lbnRzLmxlbmd0aC0yO0YrKyl2b2lkIDA9PT1hcmd1bWVudHNbRl0mJihEW0ZdPXZvaWQgMCl9KSxEfSksYy5leHBvcnRz''@;'; put 'put ''PW99LDczNTkoYyl7Yy5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD09PW4/MCE9PXR8fDEvdD09MS9uOnQhPXQmJm4hPW59fSwyNTE3MChjLGYsdCl7dmFyIG49dCg0MzMwNSksZT10KDQyMjgpLHM9ZnVuY3Rpb24obyx1KXtpZihlKG8pLCFuKHUpJiZudWxsIT09''@;'; put 'put ''dSl0aHJvdyBUeXBlRXJyb3IodSsiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIpfTtjLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24obyx1LGwpe3RyeXsobD10KDM1MDUyKShGdW5jdGlvbi5jYWxsLHQoNjg2NDEpLmYoT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShvLFtdKSx1PSEobyBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaHt1PSEwfXJldHVybiBmdW5jdGlvbih2LHApe3JldHVybiBzKHYscCksdT92Ll9fcHJvdG9fXz1wOmwodixwKSx2fX0oe30sITEpOnZvaWQgMCksY2hlY2s6c319LDU1''@;'; put 'put ''NzYyKGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg2NzUyNiksZT10KDQ3OTY3KSxzPXQoMTc2Myksbz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgbD1uW3VdO3MmJmwmJiFsW29dJiZlLmYobCxvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXN9fSl9fSwzODQ0KGMsZix0KXt2YXIgbj10KDQ3OTY3KS5mLGU9dCg1NzkxNykscz10KDY3NTc0KSgidG9TdHJpbmdUYWciKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1LGwpe28mJiFlKG89bD9vOm8ucHJvdG90eXBlLHMpJiZuKG8scyx7Y29uZmlndXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOnV9KX19LDQwNzY2KGMsZix0KXt2YXIgbj10KDQ0NTU2KSgia2V5cyIpLGU9dCg0NDE1KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIG5bc118fChuW3NdPWUocykpfX0sNDQ1NTYoYyxmLHQpe3ZhciBuPXQoNTYwOTQpLGU9dCg2NzUyNikscz0iX19jb3JlLWpzX3NoYXJlZF9f''@;'; put 'put ''IixvPWVbc118fChlW3NdPXt9KTsoYy5leHBvcnRzPWZ1bmN0aW9uKHUsbCl7cmV0dXJuIG9bdV18fChvW3VdPXZvaWQgMCE9PWw/bDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOm4udmVyc2lvbixtb2RlOnQoMjI3NTApPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4''@;'; put 'put ''YTkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sMTkxOTAoYyxmLHQpe3ZhciBuPXQoNDIyOCksZT10KDYzMzg3KSxzPXQoNjc1NzQpKCJzcGVjaWVzIik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7dmFyIGksbD1uKG8pLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9''@;'; put 'put ''PT1sfHxudWxsPT0oaT1uKGwpW3NdKT91OmUoaSl9fSw4Njg4NChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNzk0NDgpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3JldHVybiEhZSYmbihmdW5jdGlvbigpe3M/ZS5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOmUuY2FsbChudWxsKX0p''@;'; put 'put ''fX0sOTEyMTIoYyxmLHQpe3ZhciBuPXQoMjcwODcpLGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7dmFyIHAsZCxsPVN0cmluZyhlKG8pKSxpPW4odSksdj1sLmxlbmd0aDtyZXR1cm4gaTwwfHxpPj12P3M/IiI6dm9pZCAwOihwPWwuY2hhckNv''@;'; put 'put ''ZGVBdChpKSk8NTUyOTZ8fHA+NTYzMTl8fGkrMT09PXZ8fChkPWwuY2hhckNvZGVBdChpKzEpKTw1NjMyMHx8ZD41NzM0Mz9zP2wuY2hhckF0KGkpOnA6cz9sLnNsaWNlKGksaSsyKTpkLTU2MzIwKyhwLTU1Mjk2PDwxMCkrNjU1MzZ9fX0sNzg5NDIoYyxmLHQpe3ZhciBuPXQoOTU0MTEpLGU9''@;'; put 'put ''dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyxvLHUpe2lmKG4obykpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmcjIit1KyIgZG9lc24ndCBhY2NlcHQgcmVnZXghIik7cmV0dXJuIFN0cmluZyhlKHMpKX19LDUyNDY4KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNzk0NDgpLHM9dCgzMzQ0''@;'; put 'put ''KSxvPS8iL2csdT1mdW5jdGlvbihsLGksdixwKXt2YXIgZD1TdHJpbmcocyhsKSkseT0iPCIraTtyZXR1cm4iIiE9PXYmJih5Kz0iICIrdisnPSInK1N0cmluZyhwKS5yZXBsYWNlKG8sIiZxdW90OyIpKyciJykseSsiPiIrZCsiPC8iK2krIj4ifTtjLmV4cG9ydHM9ZnVuY3Rpb24obCxpKXt2''@;'; put 'put ''YXIgdj17fTt2W2xdPWkodSksbihuLlArbi5GKmUoZnVuY3Rpb24oKXt2YXIgcD0iIltsXSgnIicpO3JldHVybiBwIT09cC50b0xvd2VyQ2FzZSgpfHxwLnNwbGl0KCciJykubGVuZ3RoPjN9KSwiU3RyaW5nIix2KX19LDI3OTI2KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCgyNzA4Nyks''@;'; put 'put ''ZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdT1TdHJpbmcoZSh0aGlzKSksbD0iIixpPW4obyk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKHUrPXUpKTEmaSYmKGwrPXUpO3Jl''@;'; put 'put ''dHVybiBsfX0sNDA2MjkoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCgzMzQ0KSxzPXQoNzk0NDgpLG89dCg3ODQ1MSksdT0iWyIrbysiXSIsaT1SZWdFeHAoIl4iK3UrdSsiKiIpLHY9UmVnRXhwKHUrdSsiKiQiKSxwPWZ1bmN0aW9uKHksRSxnKXt2YXIgRD17fSxGPXMoZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4hIW9beV0oKXx8Ilx1MjAwYlx4ODUiIT0iXHUyMDBiXHg4NSJbeV0oKX0pLHg9RFt5XT1GP0UoZCk6b1t5XTtnJiYoRFtnXT14KSxuKG4uUCtuLkYqRiwiU3RyaW5nIixEKX0sZD1wLnRyaW09ZnVuY3Rpb24oeSxFKXtyZXR1cm4geT1TdHJpbmcoZSh5KSksMSZFJiYoeT15LnJlcGxh''@;'; put 'put ''Y2UoaSwiIikpLDImRSYmKHk9eS5yZXBsYWNlKHYsIiIpKSx5fTtjLmV4cG9ydHM9cH0sNzg0NTEoYyl7Yy5leHBvcnRzPSJcdFxuXHZcZlxyIFx4YTBcdTE2ODBcdTE4MGVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFc''@;'; put 'put ''dTIwMmZcdTIwNWZcdTMwMDBcdTIwMjhcdTIwMjlcdWZlZmYifSw3MDE1NyhjLGYsdCl7dmFyIG49dCgyNzA4NyksZT1NYXRoLm1heCxzPU1hdGgubWluO2MuZXhwb3J0cz1mdW5jdGlvbihvLHUpe3JldHVybihvPW4obykpPDA/ZShvK3UsMCk6cyhvLHUpfX0sMjcwODcoYyl7dmFyIGY9TWF0''@;'; put 'put ''aC5jZWlsLHQ9TWF0aC5mbG9vcjtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGlzTmFOKG49K24pPzA6KG4+MD90OmYpKG4pfX0sNTcyMjEoYyxmLHQpe3ZhciBuPXQoNjEyNDkpLGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIG4oZShzKSl9fSw4MTQ4NShjLGYs''@;'; put 'put ''dCl7dmFyIG49dCgyNzA4NyksZT1NYXRoLm1pbjtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIHM+MD9lKG4ocyksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDE4MjcwKGMsZix0KXt2YXIgbj10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG4oZSkpfX0sODMw''@;'; put 'put ''NDgoYyxmLHQpe3ZhciBuPXQoNDMzMDUpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe2lmKCFuKGUpKXJldHVybiBlO3ZhciBvLHU7aWYocyYmImZ1bmN0aW9uIj09dHlwZW9mKG89ZS50b1N0cmluZykmJiFuKHU9by5jYWxsKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG89ZS52YWx1ZU9mKSYm''@;'; put 'put ''IW4odT1vLmNhbGwoZSkpfHwhcyYmImZ1bmN0aW9uIj09dHlwZW9mKG89ZS50b1N0cmluZykmJiFuKHU9by5jYWxsKGUpKSlyZXR1cm4gdTt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sNDQxNShjKXt2YXIgZj0wLHQ9TWF0aC5y''@;'; put 'put ''YW5kb20oKTtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1uPyIiOm4sIilfIiwoKytmK3QpLnRvU3RyaW5nKDM2KSl9fSwxMjg4OChjLGYsdCl7dmFyIG49dCg0MzMwNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIW4oZSl8fGUuX3Qh''@;'; put 'put ''PT1zKXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3MrIiByZXF1aXJlZCEiKTtyZXR1cm4gZX19LDIzMDExKGMsZix0KXt2YXIgbj10KDY3NTI2KSxlPXQoNTYwOTQpLHM9dCgyMjc1MCksbz10KDQ3OTYwKSx1PXQoNDc5NjcpLmY7Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KGwpe3ZhciBpPWUuU3ltYm9sfHwoZS5TeW1ib2w9cz97fTpuLlN5bWJvbHx8e30pOyJfIiE9bC5jaGFyQXQoMCkmJiEobCBpbiBpKSYmdShpLGwse3ZhbHVlOm8uZihsKX0pfX0sNDc5NjAoYyxmLHQpe2YuZj10KDY3NTc0KX0sNjc1NzQoYyxmLHQpe3ZhciBuPXQoNDQ1NTYpKCJ3a3MiKSxl''@;'; put 'put ''PXQoNDQxNSkscz10KDY3NTI2KS5TeW1ib2wsbz0iZnVuY3Rpb24iPT10eXBlb2YgczsoYy5leHBvcnRzPWZ1bmN0aW9uKGwpe3JldHVybiBuW2xdfHwobltsXT1vJiZzW2xdfHwobz9zOmUpKCJTeW1ib2wuIitsKSl9KS5zdG9yZT1ufSwyMDc2MihjLGYsdCl7dmFyIG49dCgzNDg0OCksZT10''@;'; put 'put ''KDY3NTc0KSgiaXRlcmF0b3IiKSxzPXQoNjA5MDYpO2MuZXhwb3J0cz10KDU2MDk0KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihvKXtpZihudWxsIT1vKXJldHVybiBvW2VdfHxvWyJAQGl0ZXJhdG9yIl18fHNbbihvKV19fSwxOTYyMChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlAs''@;'; put 'put ''IkFycmF5Iix7Y29weVdpdGhpbjp0KDg0NDM4KX0pLHQoODgxODQpKCJjb3B5V2l0aGluIil9LDU4ODg4KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSg0KTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLmV2ZXJ5LCEwKSwiQXJyYXkiLHtldmVyeTpmdW5jdGlv''@;'; put 'put ''bihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sNTc3NjIoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5QLCJBcnJheSIse2ZpbGw6dCgzNTU2NCl9KSx0KDg4MTg0KSgiZmlsbCIpfSwzOTgxMyhjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3''@;'; put 'put ''OSkoMik7bihuLlArbi5GKiF0KDg2ODg0KShbXS5maWx0ZXIsITApLCJBcnJheSIse2ZpbHRlcjpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sNzUzNjkoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDYpLHM9ImZpbmRJ''@;'; put 'put ''bmRleCIsbz0hMDtzIGluW10mJkFycmF5KDEpW3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmRJbmRleDpmdW5jdGlvbihsKXtyZXR1cm4gZSh0aGlzLGwsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHQoODgxODQpKHMpfSwx''@;'; put 'put ''NTE0NChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoNSkscz0iZmluZCIsbz0hMDtzIGluW10mJkFycmF5KDEpW3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmQ6ZnVuY3Rpb24obCl7cmV0dXJuIGUodGhpcyxsLGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSx0KDg4MTg0KShzKX0sMzUwNChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMCkscz10KDg2ODg0KShbXS5mb3JFYWNoLCEwKTtuKG4uUCtuLkYqIXMsIkFycmF5Iix7Zm9yRWFjaDpmdW5j''@;'; put 'put ''dGlvbih1KXtyZXR1cm4gZSh0aGlzLHUsYXJndW1lbnRzWzFdKX19KX0sOTM4NjMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM1MDUyKSxlPXQoOTIxMjcpLHM9dCgxODI3MCksbz10KDk3MzY4KSx1PXQoMTUwOCksbD10KDgxNDg1KSxpPXQoNjcyMjcpLHY9dCgyMDc2Mik7ZShlLlMr''@;'; put 'put ''ZS5GKiF0KDk4OTMxKShmdW5jdGlvbihwKXtBcnJheS5mcm9tKHApfSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbihkKXt2YXIgayxQLE0sVCx5PXMoZCksRT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LGc9YXJndW1lbnRzLmxlbmd0aCxEPWc+MT9hcmd1bWVudHNbMV06dm9p''@;'; put 'put ''ZCAwLEY9dm9pZCAwIT09RCx4PTAsQT12KHkpO2lmKEYmJihEPW4oRCxnPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09QXx8RT09QXJyYXkmJnUoQSkpZm9yKFA9bmV3IEUoaz1sKHkubGVuZ3RoKSk7az54O3grKylpKFAseCxGP0QoeVt4XSx4KTp5W3hdKTtlbHNlIGZvcihUPUEu''@;'; put 'put ''Y2FsbCh5KSxQPW5ldyBFOyEoTT1ULm5leHQoKSkuZG9uZTt4KyspaShQLHgsRj9vKFQsRCxbTS52YWx1ZSx4XSwhMCk6TS52YWx1ZSk7cmV0dXJuIFAubGVuZ3RoPXgsUH19KX0sMzQ2MDkoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjE0NjQpKCExKSxzPVtdLmlu''@;'; put 'put ''ZGV4T2Ysbz0hIXMmJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKG98fCF0KDg2ODg0KShzKSksIkFycmF5Iix7aW5kZXhPZjpmdW5jdGlvbihsKXtyZXR1cm4gbz9zLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDplKHRoaXMsbCxhcmd1bWVudHNbMV0pfX0pfSw0Nzg5OShjLGYs''@;'; put 'put ''dCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIkFycmF5Iix7aXNBcnJheTp0KDc3OTgxKX0pfSw5NTE2NShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoODgxODQpLGU9dCg3NDk3MCkscz10KDYwOTA2KSxvPXQoNTcyMjEpO2MuZXhwb3J0cz10KDk4MTc1KShBcnJheSwiQXJyYXkiLGZ1bmN0''@;'; put 'put ''aW9uKHUsbCl7dGhpcy5fdD1vKHUpLHRoaXMuX2k9MCx0aGlzLl9rPWx9LGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fdCxsPXRoaXMuX2ssaT10aGlzLl9pKys7cmV0dXJuIXV8fGk+PXUubGVuZ3RoPyh0aGlzLl90PXZvaWQgMCxlKDEpKTplKDAsImtleXMiPT1sP2k6InZhbHVlcyI9PWw/dVtp''@;'; put 'put ''XTpbaSx1W2ldXSl9LCJ2YWx1ZXMiKSxzLkFyZ3VtZW50cz1zLkFycmF5LG4oImtleXMiKSxuKCJ2YWx1ZXMiKSxuKCJlbnRyaWVzIil9LDk2NTExKGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPVtdLmpvaW47bihuLlArbi5GKih0KDYxMjQ5KSE9T2Jq''@;'; put 'put ''ZWN0fHwhdCg4Njg4NCkocykpLCJBcnJheSIse2pvaW46ZnVuY3Rpb24odSl7cmV0dXJuIHMuY2FsbChlKHRoaXMpLHZvaWQgMD09PXU/IiwiOnUpfX0pfSwzMzcwNihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg1NzIyMSkscz10KDI3MDg3KSxvPXQoODE0ODUpLHU9''@;'; put 'put ''W10ubGFzdEluZGV4T2YsbD0hIXUmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDA7bihuLlArbi5GKihsfHwhdCg4Njg4NCkodSkpLCJBcnJheSIse2xhc3RJbmRleE9mOmZ1bmN0aW9uKHYpe2lmKGwpcmV0dXJuIHUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBwPWUodGhpcyksZD1v''@;'; put 'put ''KHAubGVuZ3RoKSx5PWQtMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYoeT1NYXRoLm1pbih5LHMoYXJndW1lbnRzWzFdKSkpLHk8MCYmKHk9ZCt5KTt5Pj0wO3ktLSlpZih5IGluIHAmJnBbeV09PT12KXJldHVybiB5fHwwO3JldHVybi0xfX0pfSw1NDkxMyhjLGYsdCl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMSk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5tYXAsITApLCJBcnJheSIse21hcDpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sODIxODkoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQo''@;'; put 'put ''NjcyMjcpO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHMpaW5zdGFuY2VvZiBzKX0pLCJBcnJheSIse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciBvPTAsdT1hcmd1bWVudHMubGVuZ3RoLGw9bmV3KCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiB0aGlzP3RoaXM6QXJyYXkpKHUpO3U+bzspZShsLG8sYXJndW1lbnRzW28rK10pO3JldHVybiBsLmxlbmd0aD11LGx9fSl9LDQ3ODc0KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRiohdCg4Njg4NCkoW10ucmVkdWNlUmlnaHQsITAp''@;'; put 'put ''LCJBcnJheSIse3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKG8pe3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMCl9fSl9LDgxNDQ5KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRiohdCg4Njg4NCkoW10ucmVk''@;'; put 'put ''dWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sOTU4NTMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjEzMDgpLHM9dCg1NTA4OSksbz10KDcwMTU3KSx1''@;'; put 'put ''PXQoODE0ODUpLGw9W10uc2xpY2U7bihuLlArbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7ZSYmbC5jYWxsKGUpfSksIkFycmF5Iix7c2xpY2U6ZnVuY3Rpb24odixwKXt2YXIgZD11KHRoaXMubGVuZ3RoKSx5PXModGhpcyk7aWYocD12b2lkIDA9PT1wP2Q6cCwiQXJyYXkiPT15KXJldHVybiBs''@;'; put 'put ''LmNhbGwodGhpcyx2LHApO2Zvcih2YXIgRT1vKHYsZCksZz1vKHAsZCksRD11KGctRSksRj1uZXcgQXJyYXkoRCkseD0wO3g8RDt4KyspRlt4XT0iU3RyaW5nIj09eT90aGlzLmNoYXJBdChFK3gpOnRoaXNbRSt4XTtyZXR1cm4gRn19KX0sODY1MTEoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoNjYxNzkpKDMpO24obi5QK24uRiohdCg4Njg4NCkoW10uc29tZSwhMCksIkFycmF5Iix7c29tZTpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sOTcwNzUoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjMz''@;'; put 'put ''ODcpLHM9dCgxODI3MCksbz10KDc5NDQ4KSx1PVtdLnNvcnQsbD1bMSwyLDNdO24obi5QK24uRioobyhmdW5jdGlvbigpe2wuc29ydCh2b2lkIDApfSl8fCFvKGZ1bmN0aW9uKCl7bC5zb3J0KG51bGwpfSl8fCF0KDg2ODg0KSh1KSksIkFycmF5Iix7c29ydDpmdW5jdGlvbih2KXtyZXR1cm4g''@;'; put 'put ''dm9pZCAwPT09dj91LmNhbGwocyh0aGlzKSk6dS5jYWxsKHModGhpcyksZSh2KSl9fSl9LDc2MjA5KGMsZix0KXt0KDU1NzYyKSgiQXJyYXkiKX0sMTMyOTIoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJEYXRlIix7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1l''@;'; put 'put ''KCl9fSl9LDk0MjkoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg1NTM4NSk7bihuLlArbi5GKihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PWUpLCJEYXRlIix7dG9JU09TdHJpbmc6ZX0pfSw1MjM0NihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCgxODI3MCks''@;'; put 'put ''cz10KDgzMDQ4KTtuKG4uUCtuLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pLCJEYXRlIix7dG9KU09OOmZ1''@;'; put 'put ''bmN0aW9uKHUpe3ZhciBsPWUodGhpcyksaT1zKGwpO3JldHVybiJudW1iZXIiIT10eXBlb2YgaXx8aXNGaW5pdGUoaSk/bC50b0lTT1N0cmluZygpOm51bGx9fSl9LDQ4OTUxKGMsZix0KXt2YXIgbj10KDY3NTc0KSgidG9QcmltaXRpdmUiKSxlPURhdGUucHJvdG90eXBlO24gaW4gZXx8dCgz''@;'; put 'put ''MzM0MSkoZSxuLHQoMjAxMDcpKX0sNzg0OShjLGYsdCl7dmFyIG49RGF0ZS5wcm90b3R5cGUsZT0iSW52YWxpZCBEYXRlIixzPSJ0b1N0cmluZyIsbz1uW3NdLHU9bi5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPWUmJnQoMjg4NTkpKG4scyxmdW5jdGlvbigpe3ZhciBpPXUuY2FsbCh0aGlz''@;'; put 'put ''KTtyZXR1cm4gaT09aT9vLmNhbGwodGhpcyk6ZX0pfSw2NTA0OShjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlAsIkZ1bmN0aW9uIix7YmluZDp0KDE1NTM4KX0pfSw5NTUwMihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNDMzMDUpLGU9dCg0MDYyNykscz10KDY3NTc0KSgiaGFzSW5z''@;'; put 'put ''dGFuY2UiKSxvPUZ1bmN0aW9uLnByb3RvdHlwZTtzIGluIG98fHQoNDc5NjcpLmYobyxzLHt2YWx1ZTpmdW5jdGlvbih1KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IW4odSkpcmV0dXJuITE7aWYoIW4odGhpcy5wcm90b3R5cGUpKXJldHVybiB1IGluc3RhbmNlb2YgdGhpcztmb3Io''@;'; put 'put ''O3U9ZSh1KTspaWYodGhpcy5wcm90b3R5cGU9PT11KXJldHVybiEwO3JldHVybiExfX0pfSw3MDQ4OShjLGYsdCl7dmFyIG49dCg0Nzk2NykuZixlPUZ1bmN0aW9uLnByb3RvdHlwZSxzPS9eXHMqZnVuY3Rpb24gKFteIChdKikvLG89Im5hbWUiO28gaW4gZXx8dCgxNzYzKSYmbihlLG8se2Nv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuKCIiK3RoaXMpLm1hdGNoKHMpWzFdfWNhdGNoe3JldHVybiIifX19KX0sOTMzODYoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM2MTk3KSxlPXQoMTI4ODgpLHM9Ik1hcCI7Yy5leHBvcnRzPXQoNTg5MzMpKHMsZnVu''@;'; put 'put ''Y3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7Z2V0OmZ1bmN0aW9uKHUpe3ZhciBsPW4uZ2V0RW50cnkoZSh0aGlzLHMpLHUpO3JldHVybiBsJiZsLnZ9LHNldDpmdW5jdGlvbih1LGwpe3Jl''@;'; put 'put ''dHVybiBuLmRlZihlKHRoaXMscyksMD09PXU/MDp1LGwpfX0sbiwhMCl9LDc2NjQ4KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNzE0NzMpLHM9TWF0aC5zcXJ0LG89TWF0aC5hY29zaDtuKG4uUytuLkYqIShvJiY3MTA9PU1hdGguZmxvb3IobyhOdW1iZXIuTUFYX1ZBTFVFKSkmJm8oMS8w''@;'; put 'put ''KT09MS8wKSwiTWF0aCIse2Fjb3NoOmZ1bmN0aW9uKGwpe3JldHVybihsPStsKTwxP05hTjpsPjk0OTA2MjY1LjYyNDI1MTU2P01hdGgubG9nKGwpK01hdGguTE4yOmUobC0xK3MobC0xKSpzKGwrMSkpfX0pfSw1NTc3MShjLGYsdCl7dmFyIG49dCg5MjEyNyksZT1NYXRoLmFzaW5oO24obi5T''@;'; put 'put ''K24uRiohKGUmJjEvZSgwKT4wKSwiTWF0aCIse2FzaW5oOmZ1bmN0aW9uIHMobyl7cmV0dXJuIGlzRmluaXRlKG89K28pJiYwIT1vP288MD8tcygtbyk6TWF0aC5sb2cobytNYXRoLnNxcnQobypvKzEpKTpvfX0pfSw4MjM5MihjLGYsdCl7dmFyIG49dCg5MjEyNyksZT1NYXRoLmF0YW5oO24o''@;'; put 'put ''bi5TK24uRiohKGUmJjEvZSgtMCk8MCksIk1hdGgiLHthdGFuaDpmdW5jdGlvbihvKXtyZXR1cm4gMD09KG89K28pP286TWF0aC5sb2coKDErbykvKDEtbykpLzJ9fSl9LDcyMzM1KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoMzczMyk7bihuLlMsIk1hdGgiLHtjYnJ0OmZ1bmN0aW9uKG8p''@;'; put 'put ''e3JldHVybiBlKG89K28pKk1hdGgucG93KE1hdGguYWJzKG8pLDEvMyl9fSl9LDc0ODk2KGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2NsejMyOmZ1bmN0aW9uKHMpe3JldHVybihzPj4+PTApPzMxLU1hdGguZmxvb3IoTWF0aC5sb2cocysuNSkqTWF0aC5MT0cyRSk6MzJ9''@;'; put 'put ''fSl9LDk0NTIxKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPU1hdGguZXhwO24obi5TLCJNYXRoIix7Y29zaDpmdW5jdGlvbihvKXtyZXR1cm4oZShvPStvKStlKC1vKSkvMn19KX0sMjkxNDcoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg3NTU1MSk7bihuLlMrbi5GKihlIT1NYXRoLmV4cG0x''@;'; put 'put ''KSwiTWF0aCIse2V4cG0xOmV9KX0sNDEzMTgoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7ZnJvdW5kOnQoNzIxMjIpfSl9LDg0MzUyKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPU1hdGguYWJzO24obi5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rpb24obyx1KXtmb3IodmFyIGQs''@;'; put 'put ''eSxsPTAsaT0wLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7aTx2OylwPChkPWUoYXJndW1lbnRzW2krK10pKT8obD1sKih5PXAvZCkqeSsxLHA9ZCk6bCs9ZD4wPyh5PWQvcCkqeTpkO3JldHVybiBwPT09MS8wPzEvMDpwKk1hdGguc3FydChsKX19KX0sMTUzMjcoYyxmLHQpe3ZhciBuPXQoOTIx''@;'; put 'put ''MjcpLGU9TWF0aC5pbXVsO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi01IT1lKDQyOTQ5NjcyOTUsNSl8fDIhPWUubGVuZ3RofSksIk1hdGgiLHtpbXVsOmZ1bmN0aW9uKG8sdSl7dmFyIGw9NjU1MzUsaT0rbyx2PSt1LHA9bCZpLGQ9bCZ2O3JldHVybiAwfHAqZCsoKGwm''@;'; put 'put ''aT4+PjE2KSpkK3AqKGwmdj4+PjE2KTw8MTY+Pj4wKX19KX0sNTc1MDkoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7bG9nMTA6ZnVuY3Rpb24ocyl7cmV0dXJuIE1hdGgubG9nKHMpKk1hdGguTE9HMTBFfX0pfSwxNTkwOShjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMs''@;'; put 'put ''Ik1hdGgiLHtsb2cxcDp0KDcxNDczKX0pfSw3OTU4NChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKS9NYXRoLkxOMn19KX0sNDAzNDUoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7c2lnbjp0''@;'; put 'put ''KDM3MzMpfSl9LDk5MTM0KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNzU1NTEpLHM9TWF0aC5leHA7bihuLlMrbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT0hTWF0aC5zaW5oKC0yZS0xNyl9KSwiTWF0aCIse3Npbmg6ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguYWJz''@;'; put 'put ''KHU9K3UpPDE/KGUodSktZSgtdSkpLzI6KHModS0xKS1zKC11LTEpKSooTWF0aC5FLzIpfX0pfSw2NzkwMShjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDc1NTUxKSxzPU1hdGguZXhwO24obi5TLCJNYXRoIix7dGFuaDpmdW5jdGlvbih1KXt2YXIgbD1lKHU9K3UpLGk9ZSgtdSk7cmV0dXJu''@;'; put 'put ''IGw9PTEvMD8xOmk9PTEvMD8tMToobC1pKS8ocyh1KStzKC11KSl9fSl9LDQ2NTkyKGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse3RydW5jOmZ1bmN0aW9uKHMpe3JldHVybihzPjA/TWF0aC5mbG9vcjpNYXRoLmNlaWwpKHMpfX0pfSw2NDUwOShjLGYsdCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg1NzkxNykscz10KDU1MDg5KSxvPXQoOTg4ODApLHU9dCg4MzA0OCksbD10KDc5NDQ4KSxpPXQoNTk0MTUpLmYsdj10KDY4NjQxKS5mLHA9dCg0Nzk2NykuZixkPXQoNDA2MjkpLnRyaW0seT0iTnVtYmVyIixFPW5beV0sZz1FLEQ9RS5wcm90b3R5cGUs''@;'; put 'put ''Rj1zKHQoODQ3MTkpKEQpKT09eSx4PSJ0cmltImluIFN0cmluZy5wcm90b3R5cGUsQT1mdW5jdGlvbihUKXt2YXIgYj11KFQsITEpO2lmKCJzdHJpbmciPT10eXBlb2YgYiYmYi5sZW5ndGg+Mil7dmFyIFUsWixudCxCPShiPXg/Yi50cmltKCk6ZChiLDMpKS5jaGFyQ29kZUF0KDApO2lmKDQz''@;'; put 'put ''PT09Qnx8NDU9PT1CKXtpZig4OD09PShVPWIuY2hhckNvZGVBdCgyKSl8fDEyMD09PVUpcmV0dXJuIE5hTn1lbHNlIGlmKDQ4PT09Qil7c3dpdGNoKGIuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4Olo9MixudD00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOlo9OCxudD01NTticmVh''@;'; put 'put ''aztkZWZhdWx0OnJldHVybitifWZvcih2YXIgcSx0dD1iLnNsaWNlKDIpLHl0PTAsbXQ9dHQubGVuZ3RoO3l0PG10O3l0KyspaWYoKHE9dHQuY2hhckNvZGVBdCh5dCkpPDQ4fHxxPm50KXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KHR0LFopfX1yZXR1cm4rYn07aWYoIUUoIiAwbzEiKXx8''@;'; put 'put ''IUUoIjBiMSIpfHxFKCIrMHgxIikpe0U9ZnVuY3Rpb24oYil7dmFyIEI9YXJndW1lbnRzLmxlbmd0aDwxPzA6YixVPXRoaXM7cmV0dXJuIFUgaW5zdGFuY2VvZiBFJiYoRj9sKGZ1bmN0aW9uKCl7RC52YWx1ZU9mLmNhbGwoVSl9KTpzKFUpIT15KT9vKG5ldyBnKEEoQikpLFUsRSk6QShCKX07''@;'; put 'put ''Zm9yKHZhciBNLGs9dCgxNzYzKT9pKGcpOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdF''@;'; put 'put ''UixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSxQPTA7ay5sZW5ndGg+UDtQKyspZShnLE09a1tQXSkmJiFlKEUsTSkmJnAoRSxNLHYoZyxNKSk7RS5wcm90b3R5cGU9RCxELmNvbnN0cnVjdG9yPUUsdCgyODg1OSkobix5LEUpfX0sMzQ0MTkoYyxmLHQpe3ZhciBu''@;'; put 'put ''PXQoOTIxMjcpO24obi5TLCJOdW1iZXIiLHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSw5MTkzMyhjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDY3NTI2KS5pc0Zpbml0ZTtuKG4uUywiTnVtYmVyIix7aXNGaW5pdGU6ZnVuY3Rpb24obyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBvJiZl''@;'; put 'put ''KG8pfX0pfSw1NTUzOChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse2lzSW50ZWdlcjp0KDMzODQyKX0pfSwzOTQ5NyhjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse2lzTmFOOmZ1bmN0aW9uKHMpe3JldHVybiBzIT1zfX0pfSw0MTA0KGMsZix0KXt2''@;'; put 'put ''YXIgbj10KDkyMTI3KSxlPXQoMzM4NDIpLHM9TWF0aC5hYnM7bihuLlMsIk51bWJlciIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odSl7cmV0dXJuIGUodSkmJnModSk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDYwMjEwKGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUFY''@;'; put 'put ''X1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LDU2NTc2KGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSw4NDQzNyhjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDMzNTg5KTtuKG4uUytuLkYq''@;'; put 'put ''KE51bWJlci5wYXJzZUZsb2F0IT1lKSwiTnVtYmVyIix7cGFyc2VGbG9hdDplfSl9LDg4MDUwKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoODI3MzgpO24obi5TK24uRiooTnVtYmVyLnBhcnNlSW50IT1lKSwiTnVtYmVyIix7cGFyc2VJbnQ6ZX0pfSwzNzcyNyhjLGYsdCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBuPXQoOTIxMjcpLGU9dCgyNzA4Nykscz10KDE1MTIyKSxvPXQoMjc5MjYpLHU9MS4udG9GaXhlZCxsPU1hdGguZmxvb3IsaT1bMCwwLDAsMCwwLDBdLHY9Ik51bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiLHA9IjAiLGQ9ZnVuY3Rpb24oRix4KXtmb3IodmFy''@;'; put 'put ''IEE9LTEsaz14OysrQTw2OylpW0FdPShrKz1GKmlbQV0pJTFlNyxrPWwoay8xZTcpfSx5PWZ1bmN0aW9uKEYpe2Zvcih2YXIgeD02LEE9MDstLXg+PTA7KWlbeF09bCgoQSs9aVt4XSkvRiksQT1BJUYqMWU3fSxFPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPTYseD0iIjstLUY+PTA7KWlmKCIiIT09''@;'; put 'put ''eHx8MD09PUZ8fDAhPT1pW0ZdKXt2YXIgQT1TdHJpbmcoaVtGXSk7eD0iIj09PXg/QTp4K28uY2FsbChwLDctQS5sZW5ndGgpK0F9cmV0dXJuIHh9LGc9ZnVuY3Rpb24oRix4LEEpe3JldHVybiAwPT09eD9BOnglMj09MT9nKEYseC0xLEEqRik6ZyhGKkYseC8yLEEpfTtuKG4uUCtuLkYqKCEh''@;'; put 'put ''dSYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCF0KDc5NDQ4KShmdW5jdGlvbigpe3UuY2FsbCh7''@;'; put 'put ''fSl9KSksIk51bWJlciIse3RvRml4ZWQ6ZnVuY3Rpb24oeCl7dmFyIFQsYixCLFUsQT1zKHRoaXMsdiksaz1lKHgpLFA9IiIsTT1wO2lmKGs8MHx8az4yMCl0aHJvdyBSYW5nZUVycm9yKHYpO2lmKEEhPUEpcmV0dXJuIk5hTiI7aWYoQTw9LTFlMjF8fEE+PTFlMjEpcmV0dXJuIFN0cmluZyhB''@;'; put 'put ''KTtpZihBPDAmJihQPSItIixBPS1BKSxBPjFlLTIxKWlmKFQ9ZnVuY3Rpb24oRil7Zm9yKHZhciB4PTAsQT1GO0E+PTQwOTY7KXgrPTEyLEEvPTQwOTY7Zm9yKDtBPj0yOyl4Kz0xLEEvPTI7cmV0dXJuIHh9KEEqZygyLDY5LDEpKS02OSxiPVQ8MD9BKmcoMiwtVCwxKTpBL2coMixULDEpLGIq''@;'; put 'put ''PTQ1MDM1OTk2MjczNzA0OTYsKFQ9NTItVCk+MCl7Zm9yKGQoMCxiKSxCPWs7Qj49NzspZCgxZTcsMCksQi09Nztmb3IoZChnKDEwLEIsMSksMCksQj1ULTE7Qj49MjM7KXkoMTw8MjMpLEItPTIzO3koMTw8QiksZCgxLDEpLHkoMiksTT1FKCl9ZWxzZSBkKDAsYiksZCgxPDwtVCwwKSxNPUUo''@;'; put 'put ''KStvLmNhbGwocCxrKTtyZXR1cm4gTT1rPjA/UCsoKFU9TS5sZW5ndGgpPD1rPyIwLiIrby5jYWxsKHAsay1VKStNOk0uc2xpY2UoMCxVLWspKyIuIitNLnNsaWNlKFUtaykpOlArTX19KX0sNjcwMShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg3OTQ0OCkscz10KDE1''@;'; put 'put ''MTIyKSxvPTEuLnRvUHJlY2lzaW9uO24obi5QK24uRiooZShmdW5jdGlvbigpe3JldHVybiIxIiE9PW8uY2FsbCgxLHZvaWQgMCl9KXx8IWUoZnVuY3Rpb24oKXtvLmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b1ByZWNpc2lvbjpmdW5jdGlvbihsKXt2YXIgaT1zKHRoaXMsIk51bWJlciN0b1By''@;'; put 'put ''ZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIHZvaWQgMD09PWw/by5jYWxsKGkpOm8uY2FsbChpLGwpfX0pfSwxMTQzMChjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMrbi5GLCJPYmplY3QiLHthc3NpZ246dCgyODIwNil9KX0sOTM1KGMsZix0KXt2YXIgbj10KDky''@;'; put 'put ''MTI3KTtuKG4uUywiT2JqZWN0Iix7Y3JlYXRlOnQoODQ3MTkpfSl9LDg5NDQ4KGMsZix0KXt2YXIgbj10KDkyMTI3KTtuKG4uUytuLkYqIXQoMTc2MyksIk9iamVjdCIse2RlZmluZVByb3BlcnRpZXM6dCgyMTYyNil9KX0sNjYwNjQoYyxmLHQpe3ZhciBuPXQoOTIxMjcpO24obi5TK24uRioh''@;'; put 'put ''dCgxNzYzKSwiT2JqZWN0Iix7ZGVmaW5lUHJvcGVydHk6dCg0Nzk2NykuZn0pfSw0ODIzNihjLGYsdCl7dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgiZnJlZXplIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUp''@;'; put 'put ''KTp1fX0pfSwyMjY0MihjLGYsdCl7dmFyIG49dCg1NzIyMSksZT10KDY4NjQxKS5mO3QoODA5MjMpKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7cmV0dXJuIGUobihvKSx1KX19KX0sODE4OTUoYyxmLHQpe3QoODA5MjMpKCJnZXRP''@;'; put 'put ''d25Qcm9wZXJ0eU5hbWVzIixmdW5jdGlvbigpe3JldHVybiB0KDQ3NjUpLmZ9KX0sNTNlMyhjLGYsdCl7dmFyIG49dCgxODI3MCksZT10KDQwNjI3KTt0KDgwOTIzKSgiZ2V0UHJvdG90eXBlT2YiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBlKG4obykpfX0pfSw3OTA3''@;'; put 'put ''MyhjLGYsdCl7dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzRXh0ZW5zaWJsZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiEhbihvKSYmKCFlfHxlKG8pKX19KX0sNjkzMTgoYyxmLHQpe3ZhciBuPXQoNDMzMDUpO3QoODA5MjMpKCJpc0Zyb3plbiIsZnVuY3Rpb24o''@;'; put 'put ''ZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiFuKG8pfHwhIWUmJmUobyl9fSl9LDY1MDMyKGMsZix0KXt2YXIgbj10KDQzMzA1KTt0KDgwOTIzKSgiaXNTZWFsZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4hbihvKXx8ISFlJiZlKG8pfX0pfSwzODQ1MShjLGYs''@;'; put 'put ''dCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse2lzOnQoNzM1OSl9KX0sODg2NDcoYyxmLHQpe3ZhciBuPXQoMTgyNzApLGU9dCg1MTMxMSk7dCg4MDkyMykoImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBlKG4obykpfX0pfSwxNTU3MihjLGYsdCl7''@;'; put 'put ''dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDczODIyKGMsZix0KXt2YXIgbj10KDQzMzA1KSxlPXQoMTI5ODgpLm9u''@;'; put 'put ''RnJlZXplO3QoODA5MjMpKCJzZWFsIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSwxODEzMihjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse3NldFByb3RvdHlwZU9mOnQoMjUxNzApLnNldH0pfSwxNzQ4Mihj''@;'; put 'put ''LGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoMzQ4NDgpLGU9e307ZVt0KDY3NTc0KSgidG9TdHJpbmdUYWciKV09InoiLGUrIiIhPSJbb2JqZWN0IHpdIiYmdCgyODg1OSkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIituKHRoaXMpKyJd''@;'; put 'put ''In0sITApfSw5NjEwOChjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDMzNTg5KTtuKG4uRytuLkYqKHBhcnNlRmxvYXQhPWUpLHtwYXJzZUZsb2F0OmV9KX0sOTA1NzEoYyxmLHQpe3ZhciBuPXQoOTIxMjcpLGU9dCg4MjczOCk7bihuLkcrbi5GKihwYXJzZUludCE9ZSkse3BhcnNlSW50OmV9''@;'; put 'put ''KX0sNzEwMyhjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDYzMzg3KSxzPXQoNDIyOCksbz0odCg2NzUyNikuUmVmbGVjdHx8e30pLmFwcGx5LHU9RnVuY3Rpb24uYXBwbHk7bihuLlMrbi5GKiF0KDc5NDQ4KShmdW5jdGlvbigpe28oZnVuY3Rpb24oKXt9KX0pLCJSZWZsZWN0Iix7YXBwbHk6''@;'; put 'put ''ZnVuY3Rpb24oaSx2LHApe3ZhciBkPWUoaSkseT1zKHApO3JldHVybiBvP28oZCx2LHkpOnUuY2FsbChkLHYseSl9fSl9LDgyNTg2KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoODQ3MTkpLHM9dCg2MzM4Nyksbz10KDQyMjgpLHU9dCg0MzMwNSksbD10KDc5NDQ4KSxpPXQoMTU1MzgpLHY9''@;'; put 'put ''KHQoNjc1MjYpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QscD1sKGZ1bmN0aW9uKCl7ZnVuY3Rpb24geSgpe31yZXR1cm4hKHYoZnVuY3Rpb24oKXt9LFtdLHkpaW5zdGFuY2VvZiB5KX0pLGQ9IWwoZnVuY3Rpb24oKXt2KGZ1bmN0aW9uKCl7fSl9KTtuKG4uUytuLkYqKHB8fGQpLCJSZWZsZWN0''@;'; put 'put ''Iix7Y29uc3RydWN0OmZ1bmN0aW9uKEUsZyl7cyhFKSxvKGcpO3ZhciBEPWFyZ3VtZW50cy5sZW5ndGg8Mz9FOnMoYXJndW1lbnRzWzJdKTtpZihkJiYhcClyZXR1cm4gdihFLGcsRCk7aWYoRT09RCl7c3dpdGNoKGcubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBFO2Nhc2UgMTpyZXR1cm4g''@;'; put 'put ''bmV3IEUoZ1swXSk7Y2FzZSAyOnJldHVybiBuZXcgRShnWzBdLGdbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0sZ1szXSl9dmFyIEY9W251bGxdO3JldHVybiBGLnB1c2guYXBwbHkoRixnKSxuZXcoaS5h''@;'; put 'put ''cHBseShFLEYpKX12YXIgeD1ELnByb3RvdHlwZSxBPWUodSh4KT94Ok9iamVjdC5wcm90b3R5cGUpLGs9RnVuY3Rpb24uYXBwbHkuY2FsbChFLEEsZyk7cmV0dXJuIHUoayk/azpBfX0pfSw5MjU1MihjLGYsdCl7dmFyIG49dCg0Nzk2NyksZT10KDkyMTI3KSxzPXQoNDIyOCksbz10KDgzMDQ4''@;'; put 'put ''KTtlKGUuUytlLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KG4uZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSksIlJlZmxlY3QiLHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihsLGksdil7cyhsKSxpPW8oaSwhMCkscyh2KTt0cnl7cmV0dXJuIG4u''@;'; put 'put ''ZihsLGksdiksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSw0Mzc2KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNjg2NDEpLmYscz10KDQyMjgpO24obi5TLCJSZWZsZWN0Iix7ZGVsZXRlUHJvcGVydHk6ZnVuY3Rpb24odSxsKXt2YXIgaT1lKHModSksbCk7cmV0dXJuIShpJiYhaS5jb25maWd1''@;'; put 'put ''cmFibGUpJiZkZWxldGUgdVtsXX19KX0sNzUxNTMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1mdW5jdGlvbihvKXt0aGlzLl90PWUobyksdGhpcy5faT0wO3ZhciBsLHU9dGhpcy5faz1bXTtmb3IobCBpbiBvKXUucHVzaChsKX07dCg2MDMyKShzLCJP''@;'; put 'put ''YmplY3QiLGZ1bmN0aW9uKCl7dmFyIGwsbz10aGlzLHU9by5faztkb3tpZihvLl9pPj11Lmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGw9dVtvLl9pKytdKWluIG8uX3QpKTtyZXR1cm57dmFsdWU6bCxkb25lOiExfX0pLG4obi5TLCJSZWZsZWN0Iix7ZW51''@;'; put 'put ''bWVyYXRlOmZ1bmN0aW9uKHUpe3JldHVybiBuZXcgcyh1KX19KX0sNTI2NTAoYyxmLHQpe3ZhciBuPXQoNjg2NDEpLGU9dCg5MjEyNykscz10KDQyMjgpO2UoZS5TLCJSZWZsZWN0Iix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHUsbCl7cmV0dXJuIG4uZihzKHUpLGwpfX0p''@;'; put 'put ''fSwzMTEwNChjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDQwNjI3KSxzPXQoNDIyOCk7bihuLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih1KXtyZXR1cm4gZShzKHUpKX19KX0sMTE4NzkoYyxmLHQpe3ZhciBuPXQoNjg2NDEpLGU9dCg0MDYyNykscz10KDU3OTE3KSxv''@;'; put 'put ''PXQoOTIxMjcpLHU9dCg0MzMwNSksbD10KDQyMjgpO28oby5TLCJSZWZsZWN0Iix7Z2V0OmZ1bmN0aW9uIGkodixwKXt2YXIgeSxFLGQ9YXJndW1lbnRzLmxlbmd0aDwzP3Y6YXJndW1lbnRzWzJdO3JldHVybiBsKHYpPT09ZD92W3BdOih5PW4uZih2LHApKT9zKHksInZhbHVlIik/eS52YWx1''@;'; put 'put ''ZTp2b2lkIDAhPT15LmdldD95LmdldC5jYWxsKGQpOnZvaWQgMDp1KEU9ZSh2KSk/aShFLHAsZCk6dm9pZCAwfX0pfSwyMTg4MyhjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIlJlZmxlY3QiLHtoYXM6ZnVuY3Rpb24ocyxvKXtyZXR1cm4gbyBpbiBzfX0pfSwzNTQzMyhjLGYsdCl7dmFy''@;'; put 'put ''IG49dCg5MjEyNyksZT10KDQyMjgpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZTtuKG4uUywiUmVmbGVjdCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih1KXtyZXR1cm4gZSh1KSwhc3x8cyh1KX19KX0sNTVlMyhjLGYsdCl7dmFyIG49dCg5MjEyNyk7bihuLlMsIlJlZmxlY3QiLHtvd25LZXlzOnQo''@;'; put 'put ''OTYyMjIpfSl9LDE1OTMyKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7bihuLlMsIlJlZmxlY3QiLHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih1KXtlKHUpO3RyeXtyZXR1cm4gcyYmcyh1KSwhMH1jYXRjaHtyZXR1cm4hMX19''@;'; put 'put ''fSl9LDI2MzE2KGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoMjUxNzApO2UmJm4obi5TLCJSZWZsZWN0Iix7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24obyx1KXtlLmNoZWNrKG8sdSk7dHJ5e3JldHVybiBlLnNldChvLHUpLCEwfWNhdGNoe3JldHVybiExfX19KX0sNTQ0MyhjLGYsdCl7dmFy''@;'; put 'put ''IG49dCg0Nzk2NyksZT10KDY4NjQxKSxzPXQoNDA2MjcpLG89dCg1NzkxNyksdT10KDkyMTI3KSxsPXQoMTE5OTYpLGk9dCg0MjI4KSx2PXQoNDMzMDUpO3UodS5TLCJSZWZsZWN0Iix7c2V0OmZ1bmN0aW9uIHAoZCx5LEUpe3ZhciBGLHgsZz1hcmd1bWVudHMubGVuZ3RoPDQ/ZDphcmd1bWVu''@;'; put 'put ''dHNbM10sRD1lLmYoaShkKSx5KTtpZighRCl7aWYodih4PXMoZCkpKXJldHVybiBwKHgseSxFLGcpO0Q9bCgwKX1pZihvKEQsInZhbHVlIikpe2lmKCExPT09RC53cml0YWJsZXx8IXYoZykpcmV0dXJuITE7aWYoRj1lLmYoZyx5KSl7aWYoRi5nZXR8fEYuc2V0fHwhMT09PUYud3JpdGFibGUp''@;'; put 'put ''cmV0dXJuITE7Ri52YWx1ZT1FLG4uZihnLHksRil9ZWxzZSBuLmYoZyx5LGwoMCxFKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PUQuc2V0JiYoRC5zZXQuY2FsbChnLEUpLCEwKX19KX0sODMwMShjLGYsdCl7dmFyIG49dCg2NzUyNiksZT10KDk4ODgwKSxzPXQoNDc5NjcpLmYsbz10KDU5''@;'; put 'put ''NDE1KS5mLHU9dCg5NTQxMSksbD10KDExNTgpLGk9bi5SZWdFeHAsdj1pLHA9aS5wcm90b3R5cGUsZD0vYS9nLHk9L2EvZyxFPW5ldyBpKGQpIT09ZDtpZih0KDE3NjMpJiYoIUV8fHQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIHlbdCg2NzU3NCkoIm1hdGNoIildPSExLGkoZCkhPWR8fGko''@;'; put 'put ''eSk9PXl8fCIvYS9pIiE9aShkLCJpIil9KSkpe2k9ZnVuY3Rpb24oQSxrKXt2YXIgUD10aGlzIGluc3RhbmNlb2YgaSxNPXUoQSksVD12b2lkIDA9PT1rO3JldHVybiFQJiZNJiZBLmNvbnN0cnVjdG9yPT09aSYmVD9BOmUoRT9uZXcgdihNJiYhVD9BLnNvdXJjZTpBLGspOnYoKE09QSBpbnN0''@;'; put 'put ''YW5jZW9mIGkpP0Euc291cmNlOkEsTSYmVD9sLmNhbGwoQSk6ayksUD90aGlzOnAsaSl9O2Zvcih2YXIgZz1mdW5jdGlvbih4KXt4IGluIGl8fHMoaSx4LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZbeF19LHNldDpmdW5jdGlvbihBKXt2W3hdPUF9fSl9LEQ9byh2''@;'; put 'put ''KSxGPTA7RC5sZW5ndGg+RjspZyhEW0YrK10pO3AuY29uc3RydWN0b3I9aSxpLnByb3RvdHlwZT1wLHQoMjg4NTkpKG4sIlJlZ0V4cCIsaSl9dCg1NTc2MikoIlJlZ0V4cCIpfSw5NDExNihjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNjk2MDApO3QoOTIxMjcpKHt0YXJnZXQ6IlJlZ0V4''@;'; put 'put ''cCIscHJvdG86ITAsZm9yY2VkOm4hPT0vLi8uZXhlY30se2V4ZWM6bn0pfSwzOTYzOChjLGYsdCl7dCgxNzYzKSYmImciIT0vLi9nLmZsYWdzJiZ0KDQ3OTY3KS5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDp0KDExNTgpfSl9LDQwNDAoYyxmLHQpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg4MTQ4NSkscz10KDI4ODI4KSxvPXQoNTI1MzUpO3QoNjkyMjgpKCJtYXRjaCIsMSxmdW5jdGlvbih1LGwsaSx2KXtyZXR1cm5bZnVuY3Rpb24oZCl7dmFyIHk9dSh0aGlzKSxFPWQ/LltsXTtyZXR1cm4gdm9pZCAwIT09RT9FLmNhbGwoZCx5''@;'; put 'put ''KTpuZXcgUmVnRXhwKGQpW2xdKFN0cmluZyh5KSl9LGZ1bmN0aW9uKHApe3ZhciBkPXYoaSxwLHRoaXMpO2lmKGQuZG9uZSlyZXR1cm4gZC52YWx1ZTt2YXIgeT1uKHApLEU9U3RyaW5nKHRoaXMpO2lmKCF5Lmdsb2JhbClyZXR1cm4gbyh5LEUpO3ZhciBnPXkudW5pY29kZTt5Lmxhc3RJbmRl''@;'; put 'put ''eD0wO2Zvcih2YXIgeCxEPVtdLEY9MDtudWxsIT09KHg9byh5LEUpKTspe3ZhciBBPVN0cmluZyh4WzBdKTtEW0ZdPUEsIiI9PT1BJiYoeS5sYXN0SW5kZXg9cyhFLGUoeS5sYXN0SW5kZXgpLGcpKSxGKyt9cmV0dXJuIDA9PT1GP251bGw6RH1dfSl9LDY4MzA1KGMsZix0KXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIG49dCg0MjI4KSxlPXQoMTgyNzApLHM9dCg4MTQ4NSksbz10KDI3MDg3KSx1PXQoMjg4MjgpLGw9dCg1MjUzNSksaT1NYXRoLm1heCx2PU1hdGgubWluLHA9TWF0aC5mbG9vcixkPS9cJChbJCZgJ118XGRcZD98PFtePl0qPikvZyx5PS9cJChbJCZgJ118XGRcZD8pL2csRT1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdm9pZCAwPT09Zz9nOlN0cmluZyhnKX07dCg2OTIyOCkoInJlcGxhY2UiLDIsZnVuY3Rpb24oZyxELEYseCl7cmV0dXJuW2Z1bmN0aW9uKFAsTSl7dmFyIFQ9Zyh0aGlzKSxiPVA/LltEXTtyZXR1cm4gdm9pZCAwIT09Yj9iLmNhbGwoUCxULE0pOkYuY2FsbChTdHJp''@;'; put 'put ''bmcoVCksUCxNKX0sZnVuY3Rpb24oayxQKXt2YXIgTT14KEYsayx0aGlzLFApO2lmKE0uZG9uZSlyZXR1cm4gTS52YWx1ZTt2YXIgVD1uKGspLGI9U3RyaW5nKHRoaXMpLEI9ImZ1bmN0aW9uIj09dHlwZW9mIFA7Qnx8KFA9U3RyaW5nKFApKTt2YXIgVT1ULmdsb2JhbDtpZihVKXt2YXIgWj1U''@;'; put 'put ''LnVuaWNvZGU7VC5sYXN0SW5kZXg9MH1mb3IodmFyIG50PVtdOzspe3ZhciB0dD1sKFQsYik7aWYobnVsbD09PXR0fHwobnQucHVzaCh0dCksIVUpKWJyZWFrOyIiPT09U3RyaW5nKHR0WzBdKSYmKFQubGFzdEluZGV4PXUoYixzKFQubGFzdEluZGV4KSxaKSl9Zm9yKHZhciBtdD0iIixxPTAs''@;'; put 'put ''WD0wO1g8bnQubGVuZ3RoO1grKyl7dHQ9bnRbWF07Zm9yKHZhciBldD1TdHJpbmcodHRbMF0pLFY9aSh2KG8odHQuaW5kZXgpLGIubGVuZ3RoKSwwKSxsdD1bXSxkdD0xO2R0PHR0Lmxlbmd0aDtkdCsrKWx0LnB1c2goRSh0dFtkdF0pKTt2YXIgQ3Q9dHQuZ3JvdXBzO2lmKEIpe3ZhciBPdD1b''@;'; put 'put ''ZXRdLmNvbmNhdChsdCxWLGIpO3ZvaWQgMCE9PUN0JiZPdC5wdXNoKEN0KTt2YXIgTnQ9U3RyaW5nKFAuYXBwbHkodm9pZCAwLE90KSl9ZWxzZSBOdD1BKGV0LGIsVixsdCxDdCxQKTtWPj1xJiYobXQrPWIuc2xpY2UocSxWKStOdCxxPVYrZXQubGVuZ3RoKX1yZXR1cm4gbXQrYi5zbGljZShx''@;'; put 'put ''KX1dO2Z1bmN0aW9uIEEoayxQLE0sVCxiLEIpe3ZhciBVPU0ray5sZW5ndGgsWj1ULmxlbmd0aCxudD15O3JldHVybiB2b2lkIDAhPT1iJiYoYj1lKGIpLG50PWQpLEYuY2FsbChCLG50LGZ1bmN0aW9uKHR0LHl0KXt2YXIgbXQ7c3dpdGNoKHl0LmNoYXJBdCgwKSl7Y2FzZSIkIjpyZXR1cm4i''@;'; put 'put ''JCI7Y2FzZSImIjpyZXR1cm4gaztjYXNlImAiOnJldHVybiBQLnNsaWNlKDAsTSk7Y2FzZSInIjpyZXR1cm4gUC5zbGljZShVKTtjYXNlIjwiOm10PWJbeXQuc2xpY2UoMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIHE9K3l0O2lmKDA9PT1xKXJldHVybiB0dDtpZihxPlope3ZhciBYPXAocS8x''@;'; put 'put ''MCk7cmV0dXJuIDA9PT1YP3R0Olg8PVo/dm9pZCAwPT09VFtYLTFdP3l0LmNoYXJBdCgxKTpUW1gtMV0reXQuY2hhckF0KDEpOnR0fW10PVRbcS0xXX1yZXR1cm4gdm9pZCAwPT09bXQ/IiI6bXR9KX19KX0sNzQ3MDEoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg3MzU5''@;'; put 'put ''KSxzPXQoNTI1MzUpO3QoNjkyMjgpKCJzZWFyY2giLDEsZnVuY3Rpb24obyx1LGwsaSl7cmV0dXJuW2Z1bmN0aW9uKHApe3ZhciBkPW8odGhpcykseT1wPy5bdV07cmV0dXJuIHZvaWQgMCE9PXk/eS5jYWxsKHAsZCk6bmV3IFJlZ0V4cChwKVt1XShTdHJpbmcoZCkpfSxmdW5jdGlvbih2KXt2''@;'; put 'put ''YXIgcD1pKGwsdix0aGlzKTtpZihwLmRvbmUpcmV0dXJuIHAudmFsdWU7dmFyIGQ9bih2KSx5PVN0cmluZyh0aGlzKSxFPWQubGFzdEluZGV4O2UoRSwwKXx8KGQubGFzdEluZGV4PTApO3ZhciBnPXMoZCx5KTtyZXR1cm4gZShkLmxhc3RJbmRleCxFKXx8KGQubGFzdEluZGV4PUUpLG51bGw9''@;'; put 'put ''PT1nPy0xOmcuaW5kZXh9XX0pfSwyMDM0MShjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoOTU0MTEpLGU9dCg0MjI4KSxzPXQoMTkxOTApLG89dCgyODgyOCksdT10KDgxNDg1KSxsPXQoNTI1MzUpLGk9dCg2OTYwMCksdj10KDc5NDQ4KSxwPU1hdGgubWluLGQ9W10ucHVzaCx5PSJzcGxp''@;'; put 'put ''dCIsRT0ibGVuZ3RoIixnPSJsYXN0SW5kZXgiLEQ9NDI5NDk2NzI5NSxGPSF2KGZ1bmN0aW9uKCl7UmVnRXhwKEQsInkiKX0pO3QoNjkyMjgpKCJzcGxpdCIsMixmdW5jdGlvbih4LEEsayxQKXt2YXIgTTtyZXR1cm4gTT0iYyI9PSJhYmJjIlt5XSgvKGIpKi8pWzFdfHw0IT0idGVzdCJbeV0o''@;'; put 'put ''Lyg/OikvLC0xKVtFXXx8MiE9ImFiIlt5XSgvKD86YWIpKi8pW0VdfHw0IT0iLiJbeV0oLyguPykoLj8pLylbRV18fCIuIlt5XSgvKCkoKS8pW0VdPjF8fCIiW3ldKC8uPy8pW0VdP2Z1bmN0aW9uKFQsYil7dmFyIEI9U3RyaW5nKHRoaXMpO2lmKHZvaWQgMD09PVQmJjA9PT1iKXJldHVybltd''@;'; put 'put ''O2lmKCFuKFQpKXJldHVybiBrLmNhbGwoQixULGIpO2Zvcih2YXIgbXQscSxYLFU9W10sbnQ9MCx0dD12b2lkIDA9PT1iP0Q6Yj4+PjAseXQ9bmV3IFJlZ0V4cChULnNvdXJjZSwoVC5pZ25vcmVDYXNlPyJpIjoiIikrKFQubXVsdGlsaW5lPyJtIjoiIikrKFQudW5pY29kZT8idSI6IiIpKyhU''@;'; put 'put ''LnN0aWNreT8ieSI6IiIpKyJnIik7KG10PWkuY2FsbCh5dCxCKSkmJiEoKHE9eXRbZ10pPm50JiYoVS5wdXNoKEIuc2xpY2UobnQsbXQuaW5kZXgpKSxtdFtFXT4xJiZtdC5pbmRleDxCW0VdJiZkLmFwcGx5KFUsbXQuc2xpY2UoMSkpLFg9bXRbMF1bRV0sbnQ9cSxVW0VdPj10dCkpOyl5dFtn''@;'; put 'put ''XT09PW10LmluZGV4JiZ5dFtnXSsrO3JldHVybiBudD09PUJbRV0/KFh8fCF5dC50ZXN0KCIiKSkmJlUucHVzaCgiIik6VS5wdXNoKEIuc2xpY2UobnQpKSxVW0VdPnR0P1Uuc2xpY2UoMCx0dCk6VX06IjAiW3ldKHZvaWQgMCwwKVtFXT9mdW5jdGlvbihULGIpe3JldHVybiB2b2lkIDA9PT1U''@;'; put 'put ''JiYwPT09Yj9bXTprLmNhbGwodGhpcyxULGIpfTprLFtmdW5jdGlvbihiLEIpe3ZhciBVPXgodGhpcyksWj1iPy5bQV07cmV0dXJuIHZvaWQgMCE9PVo/Wi5jYWxsKGIsVSxCKTpNLmNhbGwoU3RyaW5nKFUpLGIsQil9LGZ1bmN0aW9uKFQsYil7dmFyIEI9UChNLFQsdGhpcyxiLE0hPT1rKTtp''@;'; put 'put ''ZihCLmRvbmUpcmV0dXJuIEIudmFsdWU7dmFyIFU9ZShUKSxaPVN0cmluZyh0aGlzKSxudD1zKFUsUmVnRXhwKSx0dD1VLnVuaWNvZGUsbXQ9bmV3IG50KEY/VToiXig/OiIrVS5zb3VyY2UrIikiLChVLmlnbm9yZUNhc2U/ImkiOiIiKSsoVS5tdWx0aWxpbmU/Im0iOiIiKSsoVS51bmljb2Rl''@;'; put 'put ''PyJ1IjoiIikrKEY/InkiOiJnIikpLHE9dm9pZCAwPT09Yj9EOmI+Pj4wO2lmKDA9PT1xKXJldHVybltdO2lmKDA9PT1aLmxlbmd0aClyZXR1cm4gbnVsbD09PWwobXQsWik/W1pdOltdO2Zvcih2YXIgWD0wLGV0PTAsVj1bXTtldDxaLmxlbmd0aDspe210Lmxhc3RJbmRleD1GP2V0OjA7dmFy''@;'; put 'put ''IGR0LGx0PWwobXQsRj9aOlouc2xpY2UoZXQpKTtpZihudWxsPT09bHR8fChkdD1wKHUobXQubGFzdEluZGV4KyhGPzA6ZXQpKSxaLmxlbmd0aCkpPT09WClldD1vKFosZXQsdHQpO2Vsc2V7aWYoVi5wdXNoKFouc2xpY2UoWCxldCkpLFYubGVuZ3RoPT09cSlyZXR1cm4gVjtmb3IodmFyIEN0''@;'; put 'put ''PTE7Q3Q8PWx0Lmxlbmd0aC0xO0N0KyspaWYoVi5wdXNoKGx0W0N0XSksVi5sZW5ndGg9PT1xKXJldHVybiBWO2V0PVg9ZHR9fXJldHVybiBWLnB1c2goWi5zbGljZShYKSksVn1dfSl9LDc4NjA0KGMsZix0KXsidXNlIHN0cmljdCI7dCgzOTYzOCk7dmFyIG49dCg0MjI4KSxlPXQoMTE1OCks''@;'; put 'put ''cz10KDE3NjMpLG89InRvU3RyaW5nIix1PS8uL1tvXSxsPWZ1bmN0aW9uKGkpe3QoMjg4NTkpKFJlZ0V4cC5wcm90b3R5cGUsbyxpLCEwKX07dCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPXUuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pP2woZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''dj1uKHRoaXMpO3JldHVybiIvIi5jb25jYXQodi5zb3VyY2UsIi8iLCJmbGFncyJpbiB2P3YuZmxhZ3M6IXMmJnYgaW5zdGFuY2VvZiBSZWdFeHA/ZS5jYWxsKHYpOnZvaWQgMCl9KTp1Lm5hbWUhPW8mJmwoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKHRoaXMpfSl9LDcxNjMyKGMsZix0KXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCgzNjE5NyksZT10KDEyODg4KTtjLmV4cG9ydHM9dCg1ODkzMykoIlNldCIsZnVuY3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHUp''@;'; put 'put ''e3JldHVybiBuLmRlZihlKHRoaXMsIlNldCIpLHU9MD09PXU/MDp1LHUpfX0sbil9LDY0OTc5KGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImFuY2hvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImEiLCJuYW1lIixzKX19KX0sODkwMTEoYyxm''@;'; put 'put ''LHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiYmlnIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJiaWciLCIiLCIiKX19KX0sNTQ1OTEoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiYmxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBuKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDQ3MzM0KGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJvbGQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsImIiLCIiLCIiKX19KX0sMzI0MDUoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoOTEyMTIpKCExKTtuKG4uUCwiU3RyaW5nIix7Y29kZVBvaW50QXQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvKX19KX0sMTcyMjQoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoODE0ODUpLHM9dCg3ODk0Miksbz0iZW5kc1dpdGgiLHU9''@;'; put 'put ''IiJbb107bihuLlArbi5GKnQoMjUyMDMpKG8pLCJTdHJpbmciLHtlbmRzV2l0aDpmdW5jdGlvbihpKXt2YXIgdj1zKHRoaXMsaSxvKSxwPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGQ9ZSh2Lmxlbmd0aCkseT12b2lkIDA9PT1wP2Q6TWF0aC5taW4oZShwKSxkKSxF''@;'; put 'put ''PVN0cmluZyhpKTtyZXR1cm4gdT91LmNhbGwodixFLHkpOnYuc2xpY2UoeS1FLmxlbmd0aCx5KT09PUV9fSl9LDcwODMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiZml4ZWQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInR0IiwiIiwiIil9fSl9''@;'; put 'put ''LDY5MjEzKGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRjb2xvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImZvbnQiLCJjb2xvciIscyl9fSl9LDM4NDM3KGMsZix0KXsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRzaXplIixmdW5j''@;'; put 'put ''dGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiZm9udCIsInNpemUiLHMpfX0pfSwxMjIyMChjLGYsdCl7dmFyIG49dCg5MjEyNyksZT10KDcwMTU3KSxzPVN0cmluZy5mcm9tQ2hhckNvZGUsbz1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhbyYmMSE9''@;'; put 'put ''by5sZW5ndGgpLCJTdHJpbmciLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKGwpe2Zvcih2YXIgZCxpPVtdLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7dj5wOyl7aWYoZD0rYXJndW1lbnRzW3ArK10sZShkLDExMTQxMTEpIT09ZCl0aHJvdyBSYW5nZUVycm9yKGQrIiBpcyBub3QgYSB2YWxpZCBj''@;'; put 'put ''b2RlIHBvaW50Iik7aS5wdXNoKGQ8NjU1MzY/cyhkKTpzKDU1Mjk2KygoZC09NjU1MzYpPj4xMCksZCUxMDI0KzU2MzIwKSl9cmV0dXJuIGkuam9pbigiIil9fSl9LDI4ODcyKGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDc4OTQyKSxzPSJpbmNsdWRlcyI7bihuLlAr''@;'; put 'put ''bi5GKnQoMjUyMDMpKHMpLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbih1KXtyZXR1cm4hIX5lKHRoaXMsdSxzKS5pbmRleE9mKHUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2MjIyMChjLGYsdCl7InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJpdGFsaWNz''@;'; put 'put ''IixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJpIiwiIiwiIil9fSl9LDgyOTc1KGMsZix0KXsidXNlIHN0cmljdCI7dmFyIG49dCg5MTIxMikoITApO3QoOTgxNzUpKFN0cmluZywiU3RyaW5nIixmdW5jdGlvbihlKXt0aGlzLl90PVN0cmluZyhlKSx0aGlz''@;'; put 'put ''Ll9pPTB9LGZ1bmN0aW9uKCl7dmFyIG8sZT10aGlzLl90LHM9dGhpcy5faTtyZXR1cm4gcz49ZS5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToobz1uKGUscyksdGhpcy5faSs9by5sZW5ndGgse3ZhbHVlOm8sZG9uZTohMX0pfSl9LDc2NTQ5KGMsZix0KXsidXNlIHN0cmljdCI7dCg1''@;'; put 'put ''MjQ2OCkoImxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwiaHJlZiIscyl9fSl9LDIzNDgzKGMsZix0KXt2YXIgbj10KDkyMTI3KSxlPXQoNTcyMjEpLHM9dCg4MTQ4NSk7bihuLlMsIlN0cmluZyIse3JhdzpmdW5jdGlvbih1KXtmb3IodmFy''@;'; put 'put ''IGw9ZSh1LnJhdyksaT1zKGwubGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1bXSxkPTA7aT5kOylwLnB1c2goU3RyaW5nKGxbZCsrXSkpLGQ8diYmcC5wdXNoKFN0cmluZyhhcmd1bWVudHNbZF0pKTtyZXR1cm4gcC5qb2luKCIiKX19KX0sNDQ4OTQoYyxmLHQpe3ZhciBuPXQoOTIxMjcp''@;'; put 'put ''O24obi5QLCJTdHJpbmciLHtyZXBlYXQ6dCgyNzkyNil9KX0sNDI4MTgoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic21hbGwiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LDEwMTc3KGMsZix0KXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIG49dCg5MjEyNyksZT10KDgxNDg1KSxzPXQoNzg5NDIpLG89InN0YXJ0c1dpdGgiLHU9IiJbb107bihuLlArbi5GKnQoMjUyMDMpKG8pLCJTdHJpbmciLHtzdGFydHNXaXRoOmZ1bmN0aW9uKGkpe3ZhciB2PXModGhpcyxpLG8pLHA9ZShNYXRoLm1pbihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2Lmxlbmd0aCkpLGQ9U3RyaW5nKGkpO3JldHVybiB1P3UuY2FsbCh2LGQscCk6di5zbGljZShwLHArZC5sZW5ndGgpPT09ZH19KX0sMjg1NDMoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic3RyaWtlIixmdW5jdGlvbihuKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdHJpa2UiLCIiLCIiKX19KX0sMzU1OShjLGYsdCl7InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJzdWIiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInN1YiIsIiIsIiIpfX0pfSw4NDE1MyhjLGYsdCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3QoNTI0NjgpKCJzdXAiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInN1cCIsIiIsIiIpfX0pfSwyMDk1NyhjLGYsdCl7InVzZSBzdHJpY3QiO3QoNDA2MjkpKCJ0cmltIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlz''@;'; put 'put ''LDMpfX0pfSw5OTY1MChjLGYsdCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg1NzkxNykscz10KDE3NjMpLG89dCg5MjEyNyksdT10KDI4ODU5KSxsPXQoMTI5ODgpLktFWSxpPXQoNzk0NDgpLHY9dCg0NDU1NikscD10KDM4NDQpLGQ9dCg0NDE1KSx5PXQoNjc1NzQpLEU9dCg0''@;'; put 'put ''Nzk2MCksZz10KDIzMDExKSxEPXQoMTU5NjkpLEY9dCg3Nzk4MSkseD10KDQyMjgpLEE9dCg0MzMwNSksaz10KDE4MjcwKSxQPXQoNTcyMjEpLE09dCg4MzA0OCksVD10KDExOTk2KSxiPXQoODQ3MTkpLEI9dCg0NzY1KSxVPXQoNjg2NDEpLFo9dCgxMDYwKSxudD10KDQ3OTY3KSx0dD10KDUx''@;'; put 'put ''MzExKSx5dD1VLmYsbXQ9bnQuZixxPUIuZixYPW4uU3ltYm9sLGV0PW4uSlNPTixWPWV0JiZldC5zdHJpbmdpZnksbHQ9InByb3RvdHlwZSIsZHQ9eSgiX2hpZGRlbiIpLEN0PXkoInRvUHJpbWl0aXZlIiksT3Q9e30ucHJvcGVydHlJc0VudW1lcmFibGUsTnQ9digic3ltYm9sLXJlZ2lzdHJ5''@;'; put 'put ''IiksUXQ9digic3ltYm9scyIpLGFuPXYoIm9wLXN5bWJvbHMiKSxHdD1PYmplY3RbbHRdLHNuPSJmdW5jdGlvbiI9PXR5cGVvZiBYJiYhIVouZixFbj1uLlFPYmplY3QsWXQ9IUVufHwhRW5bbHRdfHwhRW5bbHRdLmZpbmRDaGlsZCxwbj1zJiZpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPWIobXQo''@;'; put 'put ''e30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbXQodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oXyxILFEpe3ZhciBpdD15dChHdCxIKTtpdCYmZGVsZXRlIEd0W0hdLG10KF8sSCxRKSxpdCYmXyE9PUd0JiZtdChHdCxILGl0KX06bXQseG49ZnVuY3Rpb24oXyl7''@;'; put 'put ''dmFyIEg9UXRbX109YihYW2x0XSk7cmV0dXJuIEguX2s9XyxIfSxobj1zbiYmInN5bWJvbCI9PXR5cGVvZiBYLml0ZXJhdG9yP2Z1bmN0aW9uKF8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgX306ZnVuY3Rpb24oXyl7cmV0dXJuIF8gaW5zdGFuY2VvZiBYfSxvbj1mdW5jdGlvbihILFEsaXQp''@;'; put 'put ''e3JldHVybiBIPT09R3QmJm9uKGFuLFEsaXQpLHgoSCksUT1NKFEsITApLHgoaXQpLGUoUXQsUSk/KGl0LmVudW1lcmFibGU/KGUoSCxkdCkmJkhbZHRdW1FdJiYoSFtkdF1bUV09ITEpLGl0PWIoaXQse2VudW1lcmFibGU6VCgwLCExKX0pKTooZShILGR0KXx8bXQoSCxkdCxUKDEse30pKSxI''@;'; put 'put ''W2R0XVtRXT0hMCkscG4oSCxRLGl0KSk6bXQoSCxRLGl0KX0sbm49ZnVuY3Rpb24oSCxRKXt4KEgpO2Zvcih2YXIgcm4saXQ9RChRPVAoUSkpLHp0PTAscXQ9aXQubGVuZ3RoO3F0Pnp0OylvbihILHJuPWl0W3p0KytdLFFbcm5dKTtyZXR1cm4gSH0sVG49ZnVuY3Rpb24oSCl7dmFyIFE9T3Qu''@;'; put 'put ''Y2FsbCh0aGlzLEg9TShILCEwKSk7cmV0dXJuISh0aGlzPT09R3QmJmUoUXQsSCkmJiFlKGFuLEgpKSYmKCEoUXx8IWUodGhpcyxIKXx8IWUoUXQsSCl8fGUodGhpcyxkdCkmJnRoaXNbZHRdW0hdKXx8USl9LGg9ZnVuY3Rpb24oSCxRKXtpZihIPVAoSCksUT1NKFEsITApLEghPT1HdHx8IWUo''@;'; put 'put ''UXQsUSl8fGUoYW4sUSkpe3ZhciBpdD15dChILFEpO3JldHVybiBpdCYmZShRdCxRKSYmIShlKEgsZHQpJiZIW2R0XVtRXSkmJihpdC5lbnVtZXJhYmxlPSEwKSxpdH19LHI9ZnVuY3Rpb24oSCl7Zm9yKHZhciBxdCxRPXEoUChIKSksaXQ9W10senQ9MDtRLmxlbmd0aD56dDspIWUoUXQscXQ9''@;'; put 'put ''UVt6dCsrXSkmJnF0IT1kdCYmcXQhPWwmJml0LnB1c2gocXQpO3JldHVybiBpdH0sYT1mdW5jdGlvbihIKXtmb3IodmFyIHJuLFE9SD09PUd0LGl0PXEoUT9hbjpQKEgpKSx6dD1bXSxxdD0wO2l0Lmxlbmd0aD5xdDspZShRdCxybj1pdFtxdCsrXSkmJighUXx8ZShHdCxybikpJiZ6dC5wdXNo''@;'; put 'put ''KFF0W3JuXSk7cmV0dXJuIHp0fTtzbnx8KFg9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgWCl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEiKTt2YXIgSD1kKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSxRPWZ1bmN0aW9u''@;'; put 'put ''KGl0KXt0aGlzPT09R3QmJlEuY2FsbChhbixpdCksZSh0aGlzLGR0KSYmZSh0aGlzW2R0XSxIKSYmKHRoaXNbZHRdW0hdPSExKSxwbih0aGlzLEgsVCgxLGl0KSl9O3JldHVybiBzJiZZdCYmcG4oR3QsSCx7Y29uZmlndXJhYmxlOiEwLHNldDpRfSkseG4oSCl9LHUoWFtsdF0sInRvU3RyaW5n''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksVS5mPWgsbnQuZj1vbix0KDU5NDE1KS5mPUIuZj1yLHQoODQ0OSkuZj1UbixaLmY9YSxzJiYhdCgyMjc1MCkmJnUoR3QsInByb3BlcnR5SXNFbnVtZXJhYmxlIixUbiwhMCksRS5mPWZ1bmN0aW9uKF8pe3JldHVybiB4bih5KF8pKX0pLG8o''@;'; put 'put ''by5HK28uVytvLkYqIXNuLHtTeW1ib2w6WH0pO2Zvcih2YXIgbT0iaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMiLnNwbGl0KCIsIiksdz0w''@;'; put 'put ''O20ubGVuZ3RoPnc7KXkobVt3KytdKTtmb3IodmFyIEs9dHQoeS5zdG9yZSksJD0wO0subGVuZ3RoPiQ7KWcoS1skKytdKTtvKG8uUytvLkYqIXNuLCJTeW1ib2wiLHtmb3I6ZnVuY3Rpb24oXyl7cmV0dXJuIGUoTnQsXys9IiIpP050W19dOk50W19dPVgoXyl9LGtleUZvcjpmdW5jdGlvbihI''@;'; put 'put ''KXtpZighaG4oSCkpdGhyb3cgVHlwZUVycm9yKEgrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciBRIGluIE50KWlmKE50W1FdPT09SClyZXR1cm4gUX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7WXQ9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe1l0PSExfX0pLG8oby5TK28uRiohc24sIk9i''@;'; put 'put ''amVjdCIse2NyZWF0ZTpmdW5jdGlvbihILFEpe3JldHVybiB2b2lkIDA9PT1RP2IoSCk6bm4oYihIKSxRKX0sZGVmaW5lUHJvcGVydHk6b24sZGVmaW5lUHJvcGVydGllczpubixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6aCxnZXRPd25Qcm9wZXJ0eU5hbWVzOnIsZ2V0T3duUHJvcGVydHlT''@;'; put 'put ''eW1ib2xzOmF9KTt2YXIgRHQ9aShmdW5jdGlvbigpe1ouZigxKX0pO28oby5TK28uRipEdCwiT2JqZWN0Iix7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKEgpe3JldHVybiBaLmYoayhIKSl9fSksZXQmJm8oby5TK28uRiooIXNufHxpKGZ1bmN0aW9uKCl7dmFyIF89WCgpO3JldHVy''@;'; put 'put ''biJbbnVsbF0iIT1WKFtfXSl8fCJ7fSIhPVYoe2E6X30pfHwie30iIT1WKE9iamVjdChfKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oSCl7Zm9yKHZhciB6dCxxdCxRPVtIXSxpdD0xO2FyZ3VtZW50cy5sZW5ndGg+aXQ7KVEucHVzaChhcmd1bWVudHNbaXQrK10pO2lmKHF0PXp0''@;'; put 'put ''PVFbMV0sKEEoenQpfHx2b2lkIDAhPT1IKSYmIWhuKEgpKXJldHVybiBGKHp0KXx8KHp0PWZ1bmN0aW9uKHJuLE1uKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcXQmJihNbj1xdC5jYWxsKHRoaXMscm4sTW4pKSwhaG4oTW4pKXJldHVybiBNbn0pLFFbMV09enQsVi5hcHBseShldCxRKX19KSxY''@;'; put 'put ''W2x0XVtDdF18fHQoMzMzNDEpKFhbbHRdLEN0LFhbbHRdLnZhbHVlT2YpLHAoWCwiU3ltYm9sIikscChNYXRoLCJNYXRoIiwhMCkscChuLkpTT04sIkpTT04iLCEwKX0sNzkzOTcoYyxmLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgRixuPXQoNjc1MjYpLGU9dCg2NjE3OSkoMCkscz10KDI4ODU5KSxv''@;'; put 'put ''PXQoMTI5ODgpLHU9dCgyODIwNiksbD10KDk5ODgyKSxpPXQoNDMzMDUpLHY9dCgxMjg4OCkscD10KDEyODg4KSxkPSFuLkFjdGl2ZVhPYmplY3QmJiJBY3RpdmVYT2JqZWN0ImluIG4seT0iV2Vha01hcCIsRT1vLmdldFdlYWssZz1PYmplY3QuaXNFeHRlbnNpYmxlLEQ9bC51ZnN0b3JlLHg9''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFAodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSxBPXtnZXQ6ZnVuY3Rpb24oTSl7aWYoaShNKSl7dmFyIFQ9RShNKTtyZXR1cm4hMD09PVQ/RCh2KHRoaXMseSkpLmdldChNKTpUP1RbdGhp''@;'; put 'put ''cy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKE0sVCl7cmV0dXJuIGwuZGVmKHYodGhpcyx5KSxNLFQpfX0saz1jLmV4cG9ydHM9dCg1ODkzMykoeSx4LEEsbCwhMCwhMCk7cCYmZCYmKHUoKEY9bC5nZXRDb25zdHJ1Y3Rvcih4LHkpKS5wcm90b3R5cGUsQSksby5ORUVEPSEwLGUoWyJkZWxl''@;'; put 'put ''dGUiLCJoYXMiLCJnZXQiLCJzZXQiXSxmdW5jdGlvbihQKXt2YXIgTT1rLnByb3RvdHlwZSxUPU1bUF07cyhNLFAsZnVuY3Rpb24oYixCKXtpZihpKGIpJiYhZyhiKSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IEYpO3ZhciBVPXRoaXMuX2ZbUF0oYixCKTtyZXR1cm4ic2V0Ij09UD90aGlzOlV9''@;'; put 'put ''cmV0dXJuIFQuY2FsbCh0aGlzLGIsQil9KX0pKX0sNzc0OTEoYyxmLHQpe3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4ua2V5LG89bi5zZXQ7bi5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGwsaSx2LHApe28obCxpLGUodikscyhwKSl9fSl9LDc0OTA3KGMsZix0KXt2YXIgbj10''@;'; put 'put ''KDk3MzgwKSxlPXQoNDIyOCkscz1uLmtleSxvPW4ubWFwLHU9bi5zdG9yZTtuLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24oaSx2KXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKSxkPW8oZSh2KSxwLCExKTtpZih2b2lkIDA9PT1kfHwhZC5kZWxl''@;'; put 'put ''dGUoaSkpcmV0dXJuITE7aWYoZC5zaXplKXJldHVybiEwO3ZhciB5PXUuZ2V0KHYpO3JldHVybiB5LmRlbGV0ZShwKSwhIXkuc2l6ZXx8dS5kZWxldGUodil9fSl9LDE5MjY5KGMsZix0KXt2YXIgbj10KDcxNjMyKSxlPXQoODA5NTYpLHM9dCg5NzM4MCksbz10KDQyMjgpLHU9dCg0MDYyNyks''@;'; put 'put ''bD1zLmtleXMsaT1zLmtleSx2PWZ1bmN0aW9uKHAsZCl7dmFyIHk9bChwLGQpLEU9dShwKTtpZihudWxsPT09RSlyZXR1cm4geTt2YXIgZz12KEUsZCk7cmV0dXJuIGcubGVuZ3RoP3kubGVuZ3RoP2UobmV3IG4oeS5jb25jYXQoZykpKTpnOnl9O3MuZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIHYobyhkKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmkoYXJndW1lbnRzWzFdKSl9fSl9LDc5MTAwKGMsZix0KXt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz10KDQwNjI3KSxvPW4uaGFzLHU9bi5nZXQsbD1uLmtleSxpPWZ1bmN0aW9uKHYscCxkKXtpZihv''@;'; put 'put ''KHYscCxkKSlyZXR1cm4gdSh2LHAsZCk7dmFyIEU9cyhwKTtyZXR1cm4gbnVsbCE9PUU/aSh2LEUsZCk6dm9pZCAwfTtuLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gaShwLGUoZCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpsKGFyZ3VtZW50c1syXSkpfX0pfSw3''@;'; put 'put ''OTczMihjLGYsdCl7dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5rZXlzLG89bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbihsKXtyZXR1cm4gcyhlKGwpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6byhhcmd1bWVudHNbMV0pKX19KX0sOTEzMTkoYyxmLHQp''@;'; put 'put ''e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uZ2V0LG89bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKGwsaSl7cmV0dXJuIHMobCxlKGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pKX19KX0sMTE3NihjLGYsdCl7dmFyIG49dCg5NzM4''@;'; put 'put ''MCksZT10KDQyMjgpLHM9dCg0MDYyNyksbz1uLmhhcyx1PW4ua2V5LGw9ZnVuY3Rpb24oaSx2LHApe2lmKG8oaSx2LHApKXJldHVybiEwO3ZhciB5PXModik7cmV0dXJuIG51bGwhPT15JiZsKGkseSxwKX07bi5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKHYscCl7cmV0dXJuIGwodixlKHAp''@;'; put 'put ''LGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sMzEwNyhjLGYsdCl7dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5oYXMsbz1uLmtleTtuLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24obCxpKXtyZXR1cm4gcyhsLGUoaSksYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aDwzP3ZvaWQgMDpvKGFyZ3VtZW50c1syXSkpfX0pfSw2MTY5MShjLGYsdCl7dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg2MzM4Nyksbz1uLmtleSx1PW4uc2V0O24uZXhwKHttZXRhZGF0YTpmdW5jdGlvbihpLHYpe3JldHVybiBmdW5jdGlvbihkLHkpe3UoaSx2LCh2b2lkIDAh''@;'; put 'put ''PT15P2U6cykoZCksbyh5KSl9fX0pfSwzNTg5MChjLGYsdCl7Zm9yKHZhciBuPXQoOTUxNjUpLGU9dCg1MTMxMSkscz10KDI4ODU5KSxvPXQoNjc1MjYpLHU9dCgzMzM0MSksbD10KDYwOTA2KSxpPXQoNjc1NzQpLHY9aSgiaXRlcmF0b3IiKSxwPWkoInRvU3RyaW5nVGFnIiksZD1sLkFycmF5''@;'; put 'put ''LHk9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxB''@;'; put 'put ''bGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1''@;'; put 'put ''Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tD''@;'; put 'put ''dWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxFPWUoeSksZz0wO2c8RS5sZW5ndGg7ZysrKXt2YXIgayxEPUVbZ10sRj15W0RdLHg9b1tEXSxBPXgmJngucHJvdG90eXBlO2lmKEEmJihBW3ZdfHx1KEEsdixkKSxBW3BdfHx1KEEscCxEKSxsW0RdPWQsRikpZm9yKGsg''@;'; put 'put ''aW4gbilBW2tdfHxzKEEsayxuW2tdLCEwKX19LDgyNTc0KGMpeyJ1c2Ugc3RyaWN0IjtjLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJsb2NhbGUiOiJlbiIsImRhdGUiOnsiY2EiOlsiZ3JlZ29yeSIsImJ1ZGRoaXN0IiwiY2hpbmVzZSIsImNvcHRpYyIsImRhbmdpIiwiZXRoaW9hYSIsImV0aGlv''@;'; put 'put ''cGljIiwiZ2VuZXJpYyIsImhlYnJldyIsImluZGlhbiIsImlzbGFtaWMiLCJpc2xhbWljYyIsImphcGFuZXNlIiwicGVyc2lhbiIsInJvYyJdLCJob3VyTm8wIjp0cnVlLCJob3VyMTIiOnRydWUsImZvcm1hdHMiOnsic2hvcnQiOiJ7MX0sIHswfSIsIm1lZGl1bSI6InsxfSwgezB9IiwiZnVs''@;'; put 'put ''bCI6InsxfSBcJ2F0XCcgezB9IiwibG9uZyI6InsxfSBcJ2F0XCcgezB9IiwiYXZhaWxhYmxlRm9ybWF0cyI6eyJkIjoiZCIsIkUiOiJjY2MiLCJFZCI6ImQgRSIsIkVobSI6IkUgaDptbSBhIiwiRUhtIjoiRSBISDptbSIsIkVobXMiOiJFIGg6bW06c3MgYSIsIkVIbXMiOiJFIEhIOm1tOnNz''@;'; put 'put ''IiwiR3kiOiJ5IEciLCJHeU1NTSI6Ik1NTSB5IEciLCJHeU1NTWQiOiJNTU0gZCwgeSBHIiwiR3lNTU1FZCI6IkUsIE1NTSBkLCB5IEciLCJoIjoiaCBhIiwiSCI6IkhIIiwiaG0iOiJoOm1tIGEiLCJIbSI6IkhIOm1tIiwiaG1zIjoiaDptbTpzcyBhIiwiSG1zIjoiSEg6bW06c3MiLCJobXN2''@;'; put 'put ''IjoiaDptbTpzcyBhIHYiLCJIbXN2IjoiSEg6bW06c3MgdiIsImhtdiI6Img6bW0gYSB2IiwiSG12IjoiSEg6bW0gdiIsIk0iOiJMIiwiTWQiOiJNL2QiLCJNRWQiOiJFLCBNL2QiLCJNTU0iOiJMTEwiLCJNTU1kIjoiTU1NIGQiLCJNTU1FZCI6IkUsIE1NTSBkIiwiTU1NTWQiOiJNTU1NIGQi''@;'; put 'put ''LCJtcyI6Im1tOnNzIiwieSI6InkiLCJ5TSI6Ik0veSIsInlNZCI6Ik0vZC95IiwieU1FZCI6IkUsIE0vZC95IiwieU1NTSI6Ik1NTSB5IiwieU1NTWQiOiJNTU0gZCwgeSIsInlNTU1FZCI6IkUsIE1NTSBkLCB5IiwieU1NTU0iOiJNTU1NIHkiLCJ5UVFRIjoiUVFRIHkiLCJ5UVFRUSI6IlFR''@;'; put 'put ''UVEgeSJ9LCJkYXRlRm9ybWF0cyI6eyJ5TU1NTUVFRUVkIjoiRUVFRSwgTU1NTSBkLCB5IiwieU1NTU1kIjoiTU1NTSBkLCB5IiwieU1NTWQiOiJNTU0gZCwgeSIsInlNZCI6Ik0vZC95eSJ9LCJ0aW1lRm9ybWF0cyI6eyJobW1zc3p6enoiOiJoOm1tOnNzIGEgenp6eiIsImhtc3oiOiJoOm1t''@;'; put 'put ''OnNzIGEgeiIsImhtcyI6Img6bW06c3MgYSIsImhtIjoiaDptbSBhIn19LCJjYWxlbmRhcnMiOnsiYnVkZGhpc3QiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwi''@;'; put 'put ''QXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVj''@;'; put 'put ''ZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5''@;'; put 'put ''IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkJFIl0sInNob3J0IjpbIkJFIl0sImxvbmciOlsiQkUiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImNoaW5lc2UiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIs''@;'; put 'put ''IjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTW8xIiwiTW8yIiwiTW8zIiwiTW80IiwiTW81IiwiTW82IiwiTW83IiwiTW84IiwiTW85IiwiTW8xMCIsIk1vMTEiLCJNbzEyIl0sImxvbmciOlsiTW9udGgxIiwiTW9udGgyIiwiTW9udGgzIiwiTW9udGg0IiwiTW9u''@;'; put 'put ''dGg1IiwiTW9udGg2IiwiTW9udGg3IiwiTW9udGg4IiwiTW9udGg5IiwiTW9udGgxMCIsIk1vbnRoMTEiLCJNb250aDEyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIs''@;'; put 'put ''IlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJjb3B0aWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMi''@;'; put 'put ''LCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJUb3V0IiwiQmFiYSIsIkhhdG9yIiwiS2lhaGsiLCJUb2JhIiwiQW1zaGlyIiwiQmFyYW1oYXQiLCJCYXJhbW91ZGEiLCJCYXNoYW5zIiwiUGFvbmEiLCJFcGVwIiwiTWVzcmEiLCJOYXNpZSJd''@;'; put 'put ''LCJsb25nIjpbIlRvdXQiLCJCYWJhIiwiSGF0b3IiLCJLaWFoayIsIlRvYmEiLCJBbXNoaXIiLCJCYXJhbWhhdCIsIkJhcmFtb3VkYSIsIkJhc2hhbnMiLCJQYW9uYSIsIkVwZXAiLCJNZXNyYSIsIk5hc2llIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJT''@;'; put 'put ''Il0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJFUkEwIiwiRVJB''@;'; put 'put ''MSJdLCJzaG9ydCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJkYW5naSI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIx''@;'; put 'put ''MiJdLCJzaG9ydCI6WyJNbzEiLCJNbzIiLCJNbzMiLCJNbzQiLCJNbzUiLCJNbzYiLCJNbzciLCJNbzgiLCJNbzkiLCJNbzEwIiwiTW8xMSIsIk1vMTIiXSwibG9uZyI6WyJNb250aDEiLCJNb250aDIiLCJNb250aDMiLCJNb250aDQiLCJNb250aDUiLCJNb250aDYiLCJNb250aDciLCJNb250''@;'; put 'put ''aDgiLCJNb250aDkiLCJNb250aDEwIiwiTW9udGgxMSIsIk1vbnRoMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9u''@;'; put 'put ''ZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImV0aGlvcGljIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5Iiwi''@;'; put 'put ''MTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXSwibG9uZyI6WyJNZXNrZXJlbSIs''@;'; put 'put ''IlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJT''@;'; put 'put ''dW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCIsIkVSQTEiXSwic2hvcnQiOlsi''@;'; put 'put ''RVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZXRoaW9hYSI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNo''@;'; put 'put ''b3J0IjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl0sImxvbmciOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNh''@;'; put 'put ''cyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwi''@;'; put 'put ''VGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiXSwic2hvcnQiOlsiRVJBMCJdLCJsb25nIjpbIkVSQTAiXX0sImRheVBl''@;'; put 'put ''cmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImdlbmVyaWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTTAxIiwiTTAyIiwiTTAzIiwiTTA0IiwiTTA1IiwiTTA2IiwiTTA3Iiwi''@;'; put 'put ''TTA4IiwiTTA5IiwiTTEwIiwiTTExIiwiTTEyIl0sImxvbmciOlsiTTAxIiwiTTAyIiwiTTAzIiwiTTA0IiwiTTA1IiwiTTA2IiwiTTA3IiwiTTA4IiwiTTA5IiwiTTEwIiwiTTExIiwiTTEyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0''@;'; put 'put ''IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJFUkEwIiwiRVJBMSJdLCJzaG9y''@;'; put 'put ''dCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJncmVnb3J5Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0''@;'; put 'put ''IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9j''@;'; put 'put ''dG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXki''@;'; put 'put ''LCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCIiwiQSIsIkJDRSIsIkNFIl0sInNob3J0IjpbIkJDIiwiQUQiLCJCQ0UiLCJDRSJdLCJsb25nIjpbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSIsIkJlZm9yZSBDb21t''@;'; put 'put ''b24gRXJhIiwiQ29tbW9uIEVyYSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiaGVicmV3Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCI3Il0sInNob3J0IjpbIlRpc2hy''@;'; put 'put ''aSIsIkhlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIgSSIsIkFkYXIiLCJOaXNhbiIsIkl5YXIiLCJTaXZhbiIsIlRhbXV6IiwiQXYiLCJFbHVsIiwiQWRhciBJSSJdLCJsb25nIjpbIlRpc2hyaSIsIkhlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFk''@;'; put 'put ''YXIgSSIsIkFkYXIiLCJOaXNhbiIsIkl5YXIiLCJTaXZhbiIsIlRhbXV6IiwiQXYiLCJFbHVsIiwiQWRhciBJSSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQi''@;'; put 'put ''XSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQU0iXSwic2hvcnQiOlsiQU0iXSwibG9uZyI6WyJBTSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0i''@;'; put 'put ''OiJQTSJ9fSwiaW5kaWFuIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIkNoYWl0cmEiLCJWYWlzYWtoYSIsIkp5YWlzdGhhIiwiQXNhZGhhIiwiU3JhdmFuYSIsIkJoYWRyYSIsIkFzdmlu''@;'; put 'put ''YSIsIkthcnRpa2EiLCJBZ3JhaGF5YW5hIiwiUGF1c2EiLCJNYWdoYSIsIlBoYWxndW5hIl0sImxvbmciOlsiQ2hhaXRyYSIsIlZhaXNha2hhIiwiSnlhaXN0aGEiLCJBc2FkaGEiLCJTcmF2YW5hIiwiQmhhZHJhIiwiQXN2aW5hIiwiS2FydGlrYSIsIkFncmFoYXlhbmEiLCJQYXVzYSIsIk1h''@;'; put 'put ''Z2hhIiwiUGhhbGd1bmEiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIs''@;'; put 'put ''IlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIlNha2EiXSwic2hvcnQiOlsiU2FrYSJdLCJsb25nIjpbIlNha2EiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImlzbGFtaWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwi''@;'; put 'put ''MiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTXVoLiIsIlNhZi4iLCJSYWIuIEkiLCJSYWIuIElJIiwiSnVtLiBJIiwiSnVtLiBJSSIsIlJhai4iLCJTaGEuIiwiUmFtLiIsIlNoYXcuIiwiRGh1XHUwMmJibC1RLiIsIkRodVx1MDJiYmwt''@;'; put 'put ''SC4iXSwibG9uZyI6WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaVx1MDJiYiBJIiwiUmFiaVx1MDJiYiBJSSIsIkp1bWFkYSBJIiwiSnVtYWRhIElJIiwiUmFqYWIiLCJTaGFcdTAyYmJiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodVx1MDJiYmwtUWlcdTAyYmJkYWgiLCJEaHVcdTAyYmJs''@;'; put 'put ''LUhpamphaCJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNk''@;'; put 'put ''YXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQUgiXSwic2hvcnQiOlsiQUgiXSwibG9uZyI6WyJBSCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiaXNsYW1pY2MiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0Iiwi''@;'; put 'put ''NSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTXVoLiIsIlNhZi4iLCJSYWIuIEkiLCJSYWIuIElJIiwiSnVtLiBJIiwiSnVtLiBJSSIsIlJhai4iLCJTaGEuIiwiUmFtLiIsIlNoYXcuIiwiRGh1XHUwMmJibC1RLiIsIkRodVx1MDJiYmwtSC4iXSwibG9uZyI6''@;'; put 'put ''WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaVx1MDJiYiBJIiwiUmFiaVx1MDJiYiBJSSIsIkp1bWFkYSBJIiwiSnVtYWRhIElJIiwiUmFqYWIiLCJTaGFcdTAyYmJiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodVx1MDJiYmwtUWlcdTAyYmJkYWgiLCJEaHVcdTAyYmJsLUhpamphaCJdfSwi''@;'; put 'put ''ZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXki''@;'; put 'put ''LCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQUgiXSwic2hvcnQiOlsiQUgiXSwibG9uZyI6WyJBSCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiamFwYW5lc2UiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwi''@;'; put 'put ''QSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5''@;'; put 'put ''IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsi''@;'; put 'put ''U3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNoaSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYp''@;'; put 'put ''IiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRkICg3MDFcdTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwi''@;'; put 'put ''Smlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUyMDEzNzQ5KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDktNzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5w''@;'; put 'put ''eVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3LTc3MCkiLCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgwNikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAo''@;'; put 'put ''ODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQpIiwiSlx1MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCkiLCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5''@;'; put 'put ''KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0ZCAoODc3XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJF''@;'; put 'put ''bmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMxXHUyMDEzOTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUw''@;'; put 'put ''MTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAxMzk3MCkiLCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZcdTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4''@;'; put 'put ''M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4gKDk4N1x1MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRkdG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUy''@;'; put 'put ''MDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJDaFx1MDE0ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIsIk1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1''@;'; put 'put ''MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDApIiwiQ2hcdTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAoMTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktc''@;'; put 'put ''dTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVcdTIwMTMxMDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUwMTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1''@;'; put 'put ''MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwiS2FuamkgKDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEwOTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3''@;'; put 'put ''YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAxMzExMDYpIiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAtMTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIw''@;'; put 'put ''MTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUyMDEzMTEyNCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMxXHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEz''@;'; put 'put ''NSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDExNDFcdTIwMTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUpIiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUx''@;'; put 'put ''XHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1NikiLCJIXHUwMTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzExNjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2Fu''@;'; put 'put ''ICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYpIiwiTmluXHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcxXHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1''@;'; put 'put ''MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUyMDEzMTE4MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIwMTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1''@;'; put 'put ''MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIwMTMxMjA0KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMx''@;'; put 'put ''MjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAxNGRreVx1MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUyMDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgx''@;'; put 'put ''MjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwiSlx1MDE0ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEyMzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4''@;'; put 'put ''XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEyNDApIiwiTmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEzMTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0''@;'; put 'put ''ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1MjAxMzEyNTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwiS1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTll''@;'; put 'put ''aSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4KSIsIktcdTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkzXHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJL''@;'; put 'put ''ZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEzMTMwNikiLCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRkICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMx''@;'; put 'put ''NykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAxNGQgKDEzMTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIwMTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3Ug''@;'; put 'put ''KDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMxMzM0KSIsIktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIwMTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50''@;'; put 'put ''b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1MjAxMzEzNzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdhICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEz''@;'; put 'put ''OTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEzODdcdTIwMTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgx''@;'; put 'put ''NDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0MSkiLCJLYWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUp''@;'; put 'put ''IiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1MDE0ZHJva3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5t''@;'; put 'put ''ZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0ODdcdTIwMTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAoMTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEp''@;'; put 'put ''IiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAoMTUyOFx1MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9rdSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIs''@;'; put 'put ''IlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgxNTkyXHUyMDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUy''@;'; put 'put ''MDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIsIkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUy''@;'; put 'put ''MDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0ZGt5XHUwMTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMxNzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAx''@;'; put 'put ''NGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZcdTIwMTMxNzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1''@;'; put 'put ''MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUyMDE5ZWkgKDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJLeVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAx''@;'; put 'put ''MzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUwMTRkICgxODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFuc2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAx''@;'; put 'put ''MzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdlbmppICgxODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk0iLCJUIiwiUyIsIkgiXSwic2hvcnQiOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBcdTIwMTM2NzEp''@;'; put 'put ''IiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3MTcpIiwiWVx1''@;'; put 'put ''MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQta2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwiVGVucHlcdTAx''@;'; put 'put ''NGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcwXHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRhaWRcdTAxNGQg''@;'; put 'put ''KDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAxMzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtcdTAxNGQgKDg1''@;'; put 'put ''NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlubmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4OThcdTIwMTM5''@;'; put 'put ''MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAxNGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAxMzk2MSkiLCJc''@;'; put 'put ''dTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3OCkiLCJUZW5n''@;'; put 'put ''ZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28gKDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5OTVcdTIwMTM5''@;'; put 'put ''OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMxMDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUgKDEwMjRcdTIw''@;'; put 'put ''MTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgxMDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUyMDEzMTA1Myki''@;'; put 'put ''LCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFrdSAoMTA3N1x1''@;'; put 'put ''MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQpIiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJKXHUwMTRkdG9r''@;'; put 'put ''dSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgxMTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIsIkVpa3lcdTAx''@;'; put 'put ''NmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMxMTMyKSIsIkNo''@;'; put 'put ''XHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1MDE2YmFuICgx''@;'; put 'put ''MTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIwMTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJcdTAxNGNobyAo''@;'; put 'put ''MTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMxMTc1KSIsIkFu''@;'; put 'put ''Z2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJcdTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTApIiwiS2Vua3lc''@;'; put 'put ''dTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIgKDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgxMjA3XHUyMDEz''@;'; put 'put ''MTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEzMTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1KSIsIkthcm9r''@;'; put 'put ''dSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMxMjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJLYXRlaSAoMTIz''@;'; put 'put ''NVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAxMzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIsIktlbmNoXHUw''@;'; put 'put ''MTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdlbiAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRkY2hcdTAxNGQg''@;'; put 'put ''KDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUyMDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMxMjk5KSIsIlNo''@;'; put 'put ''XHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFcdTIwMTMxMzEy''@;'; put 'put ''KSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwiR2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYpIiwiS2FyeWFr''@;'; put 'put ''dSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIwMTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYpIiwiU2hcdTAx''@;'; put 'put ''NGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFcdTIwMTMxMzg0''@;'; put 'put ''KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkgKDEzOTRcdTIw''@;'; put 'put ''MTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIwMTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAxMzE0NTIpIiwi''@;'; put 'put ''S3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2NykiLCJcdTAx''@;'; put 'put ''NGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUyMDEzMTUwNCki''@;'; put 'put ''LCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5idW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4XHUyMDEzMTU3''@;'; put 'put ''MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNoXHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkgKDE2MjRcdTIw''@;'; put 'put ''MTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVuICgxNjYxXHUy''@;'; put 'put ''MDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMxNjg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwiU2hcdTAxNGR0''@;'; put 'put ''b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4gKDE3NDhcdTIw''@;'; put 'put ''MTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEpIiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRkd2EgKDE4MDFc''@;'; put 'put ''dTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIsIktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4NTRcdTIwMTMx''@;'; put 'put ''ODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIsIktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTWVpamkiLCJUYWlzaFx1MDE0ZCIsIlNoXHUwMTRkd2EiLCJIZWlzZWki''@;'; put 'put ''XSwibG9uZyI6WyJUYWlrYSAoNjQ1XHUyMDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgp''@;'; put 'put ''IiwiV2FkXHUwMTRkICg3MDhcdTIwMTM3MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAoNzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDkt''@;'; put 'put ''NzQ5KSIsIlRlbnB5XHUwMTRkLXNoXHUwMTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkgKDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVu''@;'; put 'put ''LVx1MDE0ZCAoNzgxLTc4MikiLCJFbnJ5YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEwKSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0''@;'; put 'put ''ZCAoODQ4XHUyMDEzODUxKSIsIk5pbmp1ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIsIlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5''@;'; put 'put ''KSIsIkthbnB5XHUwMTRkICg4ODlcdTIwMTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3''@;'; put 'put ''KSIsIlRlbnJ5YWt1ICg5NDdcdTIwMTM5NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFcdTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1''@;'; put 'put ''MjAxOWVuICg5NzNcdTIwMTM5NzYpIiwiSlx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEzOTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIs''@;'; put 'put ''IlNoXHUwMTRkcnlha3UgKDk5MFx1MjAxMzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgx''@;'; put 'put ''MDE3XHUyMDEzMTAyMSkiLCJKaWFuICgxMDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hcdTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIs''@;'; put 'put ''IkthbnRva3UgKDEwNDRcdTIwMTMxMDQ2KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUzXHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3''@;'; put 'put ''NCkiLCJTaFx1MDE0ZGhvICgxMDc0XHUyMDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJFaWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEw''@;'; put 'put ''OTRcdTIwMTMxMDk2KSIsIkVpY2hcdTAxNGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEzMTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIs''@;'; put 'put ''IlRlbm5pbiAoMTEwOFx1MjAxMzExMTApIiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAxMzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRh''@;'; put 'put ''aWppICgxMTI2XHUyMDEzMTEzMSkiLCJUZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMx''@;'; put 'put ''MTQ0KSIsIlRlblx1MjAxOXlcdTAxNGQgKDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUxKSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkg''@;'; put 'put ''KDExNTlcdTIwMTMxMTYwKSIsIkVpcnlha3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1''@;'; put 'put ''MDE0ZCAoMTE2OVx1MjAxMzExNzEpIiwiU2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIwMTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vu''@;'; put 'put ''cnlha3UgKDExODRcdTIwMTMxMTg1KSIsIkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYp''@;'; put 'put ''IiwiS2VuXHUyMDE5ZWkgKDEyMDZcdTIwMTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRc''@;'; put 'put ''dTAxNGQgKDEyMjJcdTIwMTMxMjI0KSIsIkdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEzMTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAo''@;'; put 'put ''MTIzM1x1MjAxMzEyMzQpIiwiQnVucnlha3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCkiLCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4g''@;'; put 'put ''KDEyNDNcdTIwMTMxMjQ3KSIsIkhcdTAxNGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIwMTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2''@;'; put 'put ''MCkiLCJCdW5cdTIwMTlcdTAxNGQgKDEyNjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEyNjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUw''@;'; put 'put ''MTRkXHUwMTRkICgxMjg4XHUyMDEzMTI5MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5''@;'; put 'put ''XHUwMTRkICgxMzA4XHUyMDEzMTMxMSkiLCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIx''@;'; put 'put ''XHUyMDEzMTMyNCkiLCJTaFx1MDE0ZGNoXHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEzMTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4g''@;'; put 'put ''KDEzMzZcdTIwMTMxMzQwKSIsIktcdTAxNGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJL''@;'; put 'put ''XHUwMTRkcnlha3UgKDEzNzlcdTIwMTMxMzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAxNmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUy''@;'; put 'put ''MDEzMTM5MCkiLCJNZWl0b2t1ICgxMzkwXHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hcdTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUy''@;'; put 'put ''MDE5YW4gKDE0NDRcdTIwMTMxNDQ5KSIsIkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3UgKDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0''@;'; put 'put ''ZCAoMTQ2MFx1MjAxMzE0NjYpIiwiQnVuc2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDky''@;'; put 'put ''KSIsIk1laVx1MDE0ZCAoMTQ5Mlx1MjAxMzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQgKDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1''@;'; put 'put ''NTUpIiwiS1x1MDE0ZGppICgxNTU1XHUyMDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgxNTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIw''@;'; put 'put ''MTMxNjE1KSIsIkdlbm5hICgxNjE1XHUyMDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hcdTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2''@;'; put 'put ''NTVcdTIwMTMxNjU4KSIsIk1hbmppICgxNjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVucFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAo''@;'; put 'put ''MTY4OFx1MjAxMzE3MDQpIiwiSFx1MDE0ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIwMTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0''@;'; put 'put ''NCkiLCJFbmt5XHUwMTRkICgxNzQ0XHUyMDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFc''@;'; put 'put ''dTIwMTMxNzg5KSIsIkthbnNlaSAoMTc4OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwiQnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0''@;'; put 'put ''XHUyMDEzMTg0OCkiLCJLYWVpICgxODQ4XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUyMDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1''@;'; put 'put ''XHUyMDEzMTg2OCkiLCJNZWlqaSIsIlRhaXNoXHUwMTRkIiwiU2hcdTAxNGR3YSIsIkhlaXNlaSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwicGVyc2lhbiI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEw''@;'; put 'put ''IiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJGYXJ2YXJkaW4iLCJPcmRpYmVoZXNodCIsIktob3JkYWQiLCJUaXIiLCJNb3JkYWQiLCJTaGFocml2YXIiLCJNZWhyIiwiQWJhbiIsIkF6YXIiLCJEZXkiLCJCYWhtYW4iLCJFc2ZhbmQiXSwibG9uZyI6WyJGYXJ2YXJkaW4iLCJPcmRpYmVoZXNodCIs''@;'; put 'put ''Iktob3JkYWQiLCJUaXIiLCJNb3JkYWQiLCJTaGFocml2YXIiLCJNZWhyIiwiQWJhbiIsIkF6YXIiLCJEZXkiLCJCYWhtYW4iLCJFc2ZhbmQiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwi''@;'; put 'put ''VGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFQIl0sInNob3J0IjpbIkFQIl0sImxvbmciOlsiQVAiXX0sImRheVBlcmlvZHMi''@;'; put 'put ''OnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sInJvYyI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJP''@;'; put 'put ''Y3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJU''@;'; put 'put ''IiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJy''@;'; put 'put ''b3ciOlsiQmVmb3JlIFIuTy5DLiIsIk1pbmd1byJdLCJzaG9ydCI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl0sImxvbmciOlsiQmVmb3JlIFIuTy5DLiIsIk1pbmd1byJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fX19LCJudW1iZXIiOnsibnUiOlsibGF0biJdLCJw''@;'; put 'put ''YXR0ZXJucyI6eyJkZWNpbWFsIjp7InBvc2l0aXZlUGF0dGVybiI6IntudW1iZXJ9IiwibmVnYXRpdmVQYXR0ZXJuIjoie21pbnVzU2lnbn17bnVtYmVyfSJ9LCJjdXJyZW5jeSI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7Y3VycmVuY3l9e251bWJlcn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWlu''@;'; put 'put ''dXNTaWdufXtjdXJyZW5jeX17bnVtYmVyfSJ9LCJwZXJjZW50Ijp7InBvc2l0aXZlUGF0dGVybiI6IntudW1iZXJ9e3BlcmNlbnRTaWdufSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e251bWJlcn17cGVyY2VudFNpZ259In19LCJzeW1ib2xzIjp7ImxhdG4iOnsiZGVjaW1hbCI6''@;'; put 'put ''Ii4iLCJncm91cCI6IiwiLCJuYW4iOiJOYU4iLCJwbHVzU2lnbiI6IisiLCJtaW51c1NpZ24iOiItIiwicGVyY2VudFNpZ24iOiIlIiwiaW5maW5pdHkiOiJcdTIyMWUifX0sImN1cnJlbmNpZXMiOnsiQVVEIjoiQSQiLCJCUkwiOiJSJCIsIkNBRCI6IkNBJCIsIkNOWSI6IkNOXHhhNSIsIkVV''@;'; put 'put ''UiI6Ilx1MjBhYyIsIkdCUCI6Ilx4YTMiLCJIS0QiOiJISyQiLCJJTFMiOiJcdTIwYWEiLCJJTlIiOiJcdTIwYjkiLCJKUFkiOiJceGE1IiwiS1JXIjoiXHUyMGE5IiwiTVhOIjoiTVgkIiwiTlpEIjoiTlokIiwiVFdEIjoiTlQkIiwiVVNEIjoiJCIsIlZORCI6Ilx1MjBhYiIsIlhBRiI6IkZD''@;'; put 'put ''RkEiLCJYQ0QiOiJFQyQiLCJYT0YiOiJDRkEiLCJYUEYiOiJDRlBGIn19fScpfX0sYz0+e3ZhciBmPW49PmMoYy5zPW4pO2YoMjQwNTApLGYoOTY5MzUpfV0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.f12fc6f03b026360-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30sdj17fTtmdW5jdGlvbiBhKGUpe3ZhciBuPXZbZV07aWYodm9pZCAwIT09bilyZXR1cm4gbi5leHBvcnRzO3ZhciByPXZbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwoci5leHBvcnRzLHIsci5leHBv''@;'; put 'put ''cnRzLGEpLHIubG9hZGVkPSEwLHIuZXhwb3J0c31hLm09cyxlPVtdLGEuTz0obixyLG8sbCk9PntpZighcil7dmFyIHU9MS8wO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspe2Zvcih2YXJbcixvLGxdPWVbdF0sZD0hMCxmPTA7ZjxyLmxlbmd0aDtmKyspKCExJmx8fHU+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhhLk8pLmV2ZXJ5KHA9PmEuT1twXShyW2ZdKSk/ci5zcGxpY2UoZi0tLDEpOihkPSExLGw8dSYmKHU9bCkpO2lmKGQpe2Uuc3BsaWNlKHQtLSwxKTt2YXIgYz1vKCk7dm9pZCAwIT09YyYmKG49Yyl9fXJldHVybiBufWw9bHx8MDtmb3IodmFyIHQ9ZS5sZW5ndGg7dD4wJiZlW3QtMV1bMl0+''@;'; put 'put ''bDt0LS0pZVt0XT1lW3QtMV07ZVt0XT1bcixvLGxdfSxhLm49ZT0+e3ZhciBuPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBhLmQobix7YTpufSksbn0sYS5kPShlLG4pPT57Zm9yKHZhciByIGluIG4pYS5vKG4scikmJiFhLm8oZSxyKSYmT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6bltyXX0pfSxhLm89KGUsbik9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pLGEucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs''@;'; put 'put ''U3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sYS5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpLCgoKT0+e3ZhciBlPXsxMjE6MH07YS5PLmo9''@;'; put 'put ''bz0+MD09PWVbb107dmFyIG49KG8sbCk9Pnt2YXIgZixjLFt0LHUsZF09bCxpPTA7aWYodC5zb21lKF89PjAhPT1lW19dKSl7Zm9yKGYgaW4gdSlhLm8odSxmKSYmKGEubVtmXT11W2ZdKTtpZihkKXZhciBiPWQoYSl9Zm9yKG8mJm8obCk7aTx0Lmxlbmd0aDtpKyspYS5vKGUsYz10W2ldKSYm''@;'; put 'put ''ZVtjXSYmZVtjXVswXSgpLGVbY109MDtyZXR1cm4gYS5PKGIpfSxyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W107ci5mb3JFYWNoKG4uYmluZChudWxsLDApKSxyLnB1c2g9bi5iaW5kKG51bGwsci5wdXNoLmJpbmQo''@;'; put 'put ''cikpfSkoKX0pKCk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=scripts.021f4a68a7e00093-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''IWZ1bmN0aW9uKEMsUCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9QKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLFApOlAoKEM9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRo''@;'; put 'put ''aXM6Q3x8c2VsZikubWFya2VkPXt9KX0odGhpcyxmdW5jdGlvbihDKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUChhLGkpe2Zvcih2YXIgdD0wO3Q8aS5sZW5ndGg7dCsrKXt2YXIgdT1pW3RdO3UuZW51bWVyYWJsZT11LmVudW1lcmFibGV8fCExLHUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJp''@;'; put 'put ''biB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInN5bWJvbCI9PXR5cGVvZihlPWZ1bmN0aW9uKHIpe2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8bnVsbD09PXIpcmV0dXJuIHI7dmFyIHM9cltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMD09PXMpcmV0dXJu''@;'; put 'put ''IFN0cmluZyhyKTtpZigib2JqZWN0IiE9dHlwZW9mKHM9cy5jYWxsKHIsInN0cmluZyIpKSlyZXR1cm4gczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfShlPXUua2V5KSk/ZTpTdHJpbmcoZSksdSl9dmFyIGV9ZnVu''@;'; put 'put ''Y3Rpb24gdigpe3JldHVybih2PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHQsdT1hcmd1bWVudHNbaV07Zm9yKHQgaW4gdSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''LmNhbGwodSx0KSYmKGFbdF09dVt0XSl9cmV0dXJuIGF9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSihhLGkpeyhudWxsPT1pfHxpPmEubGVuZ3RoKSYmKGk9YS5sZW5ndGgpO2Zvcih2YXIgdD0wLHU9bmV3IEFycmF5KGkpO3Q8aTt0KyspdVt0XT1hW3RdO3JldHVybiB1fWZ1''@;'; put 'put ''bmN0aW9uIFUoYSxpKXt2YXIgdCx1PXR5cGVvZiBTeW1ib2w8InUiJiZhW1N5bWJvbC5pdGVyYXRvcl18fGFbIkBAaXRlcmF0b3IiXTtpZih1KXJldHVybih1PXUuY2FsbChhKSkubmV4dC5iaW5kKHUpO2lmKEFycmF5LmlzQXJyYXkoYSl8fCh1PWZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSly''@;'; put 'put ''ZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/SihlLHIpOiJNYXAiPT09KG49Ik9iamVjdCI9PT0obj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSkpJiZlLmNvbnN0cnVjdG9yP2UuY29uc3RydWN0b3IubmFtZTpuKXx8IlNldCI9PT1uP0FycmF5LmZyb20oZSk6''@;'; put 'put ''IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KKGUscik6dm9pZCAwfShhKSl8fGkmJmEmJiJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgpcmV0dXJuIHUmJihhPXUpLHQ9MCxmdW5jdGlvbigpe3JldHVybiB0Pj1hLmxl''@;'; put 'put ''bmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6YVt0KytdfX07dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBh''@;'; put 'put ''IFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvZT0wO2Z1bmN0aW9uIEsoYSl7cmV0dXJuIl9fcHJpdmF0ZV8iK29lKysrIl8iK2F9ZnVuY3Rpb24gRyhhLGkpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGkpKXJldHVybiBhO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKX1mdW5jdGlvbiBRKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhp''@;'; put 'put ''Z2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxs''@;'; put 'put ''LHhodG1sOiExfX1mdW5jdGlvbiBXKGEpe0MuZGVmYXVsdHM9YX1mdW5jdGlvbiBZKGEpe3JldHVybiBjZVthXX1DLmRlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdo''@;'; put 'put ''bGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4''@;'; put 'put ''aHRtbDohMX07dmFyIGVlPS9bJjw+IiddLyxsZT1uZXcgUmVnRXhwKGVlLnNvdXJjZSwiZyIpLHRlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxEZT1uZXcgUmVnRXhwKHRlLnNvdXJjZSwiZyIpLGNlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsi''@;'; put 'put ''LCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifTtmdW5jdGlvbiB5KGEsaSl7aWYoaSl7aWYoZWUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKGxlLFkpfWVsc2UgaWYodGUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKERlLFkpO3JldHVybiBhfXZhciBwZT0vJigjKD86XGQr''@;'; put 'put ''KXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiB1ZShhKXtyZXR1cm4gYS5yZXBsYWNlKHBlLGZ1bmN0aW9uKGksdCl7cmV0dXJuImNvbG9uIj09PSh0PXQudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PXQuY2hhckF0KDApPyJ4Ij09PXQuY2hhckF0KDEpP1N0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodC5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCt0LnN1YnN0cmluZygxKSk6IiJ9KX12YXIgaGU9LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gRShhLGkpe2E9InN0cmluZyI9PXR5cGVvZiBhP2E6YS5zb3VyY2UsaT1pfHwiIjt2''@;'; put 'put ''YXIgdD17cmVwbGFjZTpmdW5jdGlvbih1LGUpe3JldHVybiBlPShlPWUuc291cmNlfHxlKS5yZXBsYWNlKGhlLCIkMSIpLGE9YS5yZXBsYWNlKHUsZSksdH0sZ2V0UmVnZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlZ0V4cChhLGkpfX07cmV0dXJuIHR9dmFyIGdlPS9bXlx3Ol0vZyxmZT0v''@;'; put 'put ''XiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIG5lKGEsaSx0KXtpZihhKXt0cnl7dT1kZWNvZGVVUklDb21wb25lbnQodWUodCkpLnJlcGxhY2UoZ2UsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PXUuaW5kZXhPZigiamF2YXNjcmlwdDoi''@;'; put 'put ''KXx8MD09PXUuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT11LmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9dmFyIHU7aSYmIWZlLnRlc3QodCkmJihhPXQsTVsiICIrKHU9aSldfHwoTVsiICIrdV09RmUudGVzdCh1KT91KyIvIjpIKHUsIi8iLCEwKSksaT0tMT09PSh1PU1bIiAiK3Vd''@;'; put 'put ''KS5pbmRleE9mKCI6IiksdD0iLy8iPT09YS5zdWJzdHJpbmcoMCwyKT9pP2E6dS5yZXBsYWNlKGRlLCIkMSIpK2E6Ii8iPT09YS5jaGFyQXQoMCk/aT9hOnUucmVwbGFjZShBZSwiJDEiKSthOnUrYSk7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IG51bGx9cmV0dXJuIHR9dmFyIE09e30sRmU9L15bXjpdKzpcLypbXi9dKiQvLGRlPS9eKFteOl0rOilbXHNcU10qJC8sQWU9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLEk9e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiByZShhLGkpe3ZhciB0PWEucmVwbGFjZSgvXHwvZyxmdW5j''@;'; put 'put ''dGlvbihlLHIsbil7Zm9yKHZhciBzPSExLHA9cjswPD0tLXAmJiJcXCI9PT1uW3BdOylzPSFzO3JldHVybiBzPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pLHU9MDtpZih0WzBdLnRyaW0oKXx8dC5zaGlmdCgpLDA8dC5sZW5ndGgmJiF0W3QubGVuZ3RoLTFdLnRyaW0oKSYmdC5wb3AoKSx0Lmxl''@;'; put 'put ''bmd0aD5pKXQuc3BsaWNlKGkpO2Vsc2UgZm9yKDt0Lmxlbmd0aDxpOyl0LnB1c2goIiIpO2Zvcig7dTx0Lmxlbmd0aDt1KyspdFt1XT10W3VdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gdH1mdW5jdGlvbiBIKGEsaSx0KXt2YXIgdT1hLmxlbmd0aDtpZigwPT09dSlyZXR1''@;'; put 'put ''cm4iIjtmb3IodmFyIGU9MDtlPHU7KXt2YXIgcj1hLmNoYXJBdCh1LWUtMSk7aWYoKHIhPT1pfHx0KSYmKHI9PT1pfHwhdCkpYnJlYWs7ZSsrfXJldHVybiBhLnNsaWNlKDAsdS1lKX1mdW5jdGlvbiBpZShhLHIsdCx1KXt2YXIgZT1yLmhyZWYsbj0ocj1yLnRpdGxlP3koci50aXRsZSk6bnVs''@;'; put 'put ''bCxhWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKSk7cmV0dXJuIiEiIT09YVswXS5jaGFyQXQoMCk/KHUuc3RhdGUuaW5MaW5rPSEwLGE9e3R5cGU6ImxpbmsiLHJhdzp0LGhyZWY6ZSx0aXRsZTpyLHRleHQ6bix0b2tlbnM6dS5pbmxpbmVUb2tlbnMobil9LHUuc3RhdGUuaW5MaW5r''@;'; put 'put ''PSExLGEpOnt0eXBlOiJpbWFnZSIscmF3OnQsaHJlZjplLHRpdGxlOnIsdGV4dDp5KG4pfX12YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCl7dGhpcy5vcHRpb25zPXR8fEMuZGVmYXVsdHN9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkuc3BhY2U9ZnVuY3Rpb24odCl7aWYoKHQ9dGhp''@;'; put 'put ''cy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWModCkpJiYwPHRbMF0ubGVuZ3RoKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OnRbMF19fSxpLmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhlKSlyZXR1cm4gdT1lWzBdLnJlcGxhY2UoL14gezEs''@;'; put 'put ''NH0vZ20sIiIpLHt0eXBlOiJjb2RlIixyYXc6ZVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3U6SCh1LCJcbiIpfX0saS5mZW5jZXM9ZnVuY3Rpb24ocyl7dmFyIHUsZSxyLG47aWYocz10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVj''@;'; put 'put ''KHMpKXJldHVybiBlPXU9c1swXSxyPXNbM118fCIiLGU9bnVsbD09PShlPXUubWF0Y2goL14oXHMrKSg/OmBgYCkvKSk/cjoobj1lWzFdLHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHApe3ZhciBnPXAubWF0Y2goL15ccysvKTtyZXR1cm4gbnVsbCE9PWcmJmdbMF0ubGVuZ3RoPj1uLmxl''@;'; put 'put ''bmd0aD9wLnNsaWNlKG4ubGVuZ3RoKTpwfSkuam9pbigiXG4iKSkse3R5cGU6ImNvZGUiLHJhdzp1LGxhbmc6c1syXSYmc1syXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0ZXh0OmV9fSxpLmhlYWRpbmc9ZnVuY3Rpb24ocil7dmFyIHUsZTtpZihy''@;'; put 'put ''PXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHIpKXJldHVybiB1PXJbMl0udHJpbSgpLC8jJC8udGVzdCh1KSYmKGU9SCh1LCIjIiksIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmZSYmIS8gJC8udGVzdChlKXx8KHU9ZS50cmltKCkpKSx7dHlwZToiaGVhZGluZyIscmF3OnJbMF0sZGVw''@;'; put 'put ''dGg6clsxXS5sZW5ndGgsdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkuaHI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWModCkpcmV0dXJue3R5cGU6ImhyIixyYXc6dFswXX19LGkuYmxvY2txdW90ZT1mdW5jdGlvbihuKXt2YXIgdSxlLHI7''@;'; put 'put ''aWYobj10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhuKSlyZXR1cm4gdT1uWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGU9dGhpcy5sZXhlci5zdGF0ZS50b3AsdGhpcy5sZXhlci5zdGF0ZS50b3A9ITAscj10aGlzLmxleGVyLmJsb2NrVG9rZW5zKHUpLHRoaXMubGV4''@;'; put 'put ''ZXIuc3RhdGUudG9wPWUse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzpuWzBdLHRva2VuczpyLHRleHQ6dX19LGkubGlzdD1mdW5jdGlvbih0KXt2YXIgdT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyh0KTtpZih1KXt2YXIgZSxyLG4scyxwLGcsRCxvLEYsZCx4LGg9MTwoaz11WzFdLnRyaW0o''@;'; put 'put ''KSkubGVuZ3RoLGw9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmgsc3RhcnQ6aD8ray5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX0saz1oPyJcXGR7MSw5fVxcIitrLnNsaWNlKC0xKToiXFwiK2s7dGhpcy5vcHRpb25zLnBlZGFudGljJiYoaz1oP2s6IlsqKy1dIik7Zm9y''@;'; put 'put ''KHZhciBiPW5ldyBSZWdFeHAoIl4oIHswLDN9IitrKyIpKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKSIpO3QmJih4PSExLHU9Yi5leGVjKHQpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdCh0KTspe2lmKHQ9dC5zdWJzdHJpbmcoKGU9dVswXSkubGVuZ3RoKSxEPXVbMl0uc3BsaXQo''@;'; put 'put ''IlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyxmdW5jdGlvbihMKXtyZXR1cm4iICIucmVwZWF0KDMqTC5sZW5ndGgpfSksbz10LnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhzPTIsZD1ELnRyaW1MZWZ0KCkpOihzPXVbMl0uc2VhcmNoKC9bXiBdLyksZD1ELnNsaWNl''@;'; put 'put ''KHM9NDxzPzE6cykscys9dVsxXS5sZW5ndGgpLHA9ITEsIUQmJi9eICokLy50ZXN0KG8pJiYoZSs9bysiXG4iLHQ9dC5zdWJzdHJpbmcoby5sZW5ndGgrMSkseD0hMCksIXgpZm9yKHZhciB3PW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLHMtMSkrIn0oPzpbKistXXxcXGR7MSw5fVsu''@;'; put 'put ''KV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxufCQpKSIpLEE9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkiKSxCPW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLHMtMSkrIn0o''@;'; put 'put ''PzpgYGB8fn5+KSIpLF89bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSMiKTt0JiYobz1GPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihvPW8ucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhQi50ZXN0KG8pKSYm''@;'; put 'put ''IV8udGVzdChvKSYmIXcudGVzdChvKSYmIUEudGVzdCh0KTspe2lmKG8uc2VhcmNoKC9bXiBdLyk+PXN8fCFvLnRyaW0oKSlkKz0iXG4iK28uc2xpY2Uocyk7ZWxzZXtpZihwfHw0PD1ELnNlYXJjaCgvW14gXS8pfHxCLnRlc3QoRCl8fF8udGVzdChEKXx8QS50ZXN0KEQpKWJyZWFrO2QrPSJc''@;'; put 'put ''biIrb31wfHxvLnRyaW0oKXx8KHA9ITApLGUrPUYrIlxuIix0PXQuc3Vic3RyaW5nKEYubGVuZ3RoKzEpLEQ9by5zbGljZShzKX1sLmxvb3NlfHwoZz9sLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZSkmJihnPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKHI9L15cW1sgeFhdXF0gLy5leGVj''@;'; put 'put ''KGQpKSYmKG49IlsgXSAiIT09clswXSxkPWQucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpLGwuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZSx0YXNrOiEhcixjaGVja2VkOm4sbG9vc2U6ITEsdGV4dDpkfSksbC5yYXcrPWV9bC5pdGVtc1tsLml0ZW1zLmxlbmd0aC0xXS5y''@;'; put 'put ''YXc9ZS50cmltUmlnaHQoKSxsLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFdLnRleHQ9ZC50cmltUmlnaHQoKSxsLnJhdz1sLnJhdy50cmltUmlnaHQoKTtmb3IodmFyIHosYWU9bC5pdGVtcy5sZW5ndGgsJD0wOyQ8YWU7JCsrKXRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGwuaXRlbXNbJF0udG9r''@;'; put 'put ''ZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMobC5pdGVtc1skXS50ZXh0LFtdKSxsLmxvb3NlfHwoej0wPCh6PWwuaXRlbXNbJF0udG9rZW5zLmZpbHRlcihmdW5jdGlvbihMKXtyZXR1cm4ic3BhY2UiPT09TC50eXBlfSkpLmxlbmd0aCYmei5zb21lKGZ1bmN0aW9uKEwpe3JldHVybi9cbi4q''@;'; put 'put ''XG4vLnRlc3QoTC5yYXcpfSksbC5sb29zZT16KTtpZihsLmxvb3NlKWZvcigkPTA7JDxhZTskKyspbC5pdGVtc1skXS5sb29zZT0hMDtyZXR1cm4gbH19LGkuaHRtbD1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGUpKXJldHVybiB1PXt0eXBlOiJo''@;'; put 'put ''dG1sIixibG9jazohMCxyYXc6ZVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWVbMV18fCJzY3JpcHQiPT09ZVsxXXx8InN0eWxlIj09PWVbMV0pLHRleHQ6ZVswXX0sdGhpcy5vcHRpb25zLnNhbml0aXplJiYoZT10aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMu''@;'; put 'put ''b3B0aW9ucy5zYW5pdGl6ZXIoZVswXSk6eShlWzBdKSx1LnR5cGU9InBhcmFncmFwaCIsdS50ZXh0PWUsdS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZSkpLHV9LGkuZGVmPWZ1bmN0aW9uKG4pe3ZhciB1LGUscjtpZihuPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobikpcmV0dXJuIHU9''@;'; put 'put ''blsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksZT1uWzJdP25bMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIscj1uWzNdJiZuWzNdLnN1YnN0cmluZygxLG5bM10ubGVuZ3RoLTEpLnJlcGxh''@;'; put 'put ''Y2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIikse3R5cGU6ImRlZiIsdGFnOnUscmF3Om5bMF0saHJlZjplLHRpdGxlOnJ9fSxpLnRhYmxlPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKHQpKXt2YXIgdT17dHlwZToidGFibGUiLGhlYWRlcjpy''@;'; put 'put ''ZSh0WzFdKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6Z319KSxhbGlnbjp0WzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czp0WzNdJiZ0WzNdLnRyaW0oKT90WzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZih1''@;'; put 'put ''LmhlYWRlci5sZW5ndGg9PT11LmFsaWduLmxlbmd0aCl7dS5yYXc9dFswXTtmb3IodmFyIGUscixuLHM9dS5hbGlnbi5sZW5ndGgscD0wO3A8cztwKyspdS5hbGlnbltwXT0vXiAqLSs6ICokLy50ZXN0KHUuYWxpZ25bcF0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QodS5hbGlnbltwXSk/''@;'; put 'put ''ImNlbnRlciI6L14gKjotKyAqJC8udGVzdCh1LmFsaWduW3BdKT8ibGVmdCI6bnVsbDtmb3Iocz11LnJvd3MubGVuZ3RoLHA9MDtwPHM7cCsrKXUucm93c1twXT1yZSh1LnJvd3NbcF0sdS5oZWFkZXIubGVuZ3RoKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6Z319KTtmb3Iocz11Lmhl''@;'; put 'put ''YWRlci5sZW5ndGgsZT0wO2U8cztlKyspdS5oZWFkZXJbZV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKHUuaGVhZGVyW2VdLnRleHQpO2ZvcihzPXUucm93cy5sZW5ndGgsZT0wO2U8cztlKyspZm9yKG49dS5yb3dzW2VdLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnRva2Vucz10aGlzLmxl''@;'; put 'put ''eGVyLmlubGluZShuW3JdLnRleHQpO3JldHVybiB1fX19LGkubGhlYWRpbmc9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWModCkpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzp0WzBdLGRlcHRoOiI9Ij09PXRbMl0uY2hhckF0KDApPzE6Mix0ZXh0OnRb''@;'; put 'put ''MV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMV0pfX0saS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGUpKXJldHVybiB1PSJcbiI9PT1lWzFdLmNoYXJBdChlWzFdLmxlbmd0aC0xKT9lWzFdLnNsaWNlKDAsLTEp''@;'; put 'put ''OmVbMV0se3R5cGU6InBhcmFncmFwaCIscmF3OmVbMF0sdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkudGV4dD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHQpKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0ZXh0OnRbMF0sdG9r''@;'; put 'put ''ZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMF0pfX0saS5lc2NhcGU9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6dFswXSx0ZXh0OnkodFsxXSl9fSxpLnRhZz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVs''@;'; put 'put ''ZXMuaW5saW5lLnRhZy5leGVjKHQpKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdCh0WzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUu''@;'; put 'put ''aW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxz''@;'; put 'put ''Y3JpcHQpKFxzfD4pL2kudGVzdCh0WzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJ0ZXh0IjoiaHRtbCIscmF3OnRbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5z''@;'; put 'put ''dGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcih0WzBdKTp5KHRbMF0pOnRbMF19fSxpLmxpbms9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5saW5r''@;'; put 'put ''LmV4ZWModCkpe3ZhciB1PXRbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdCh1KSl7aWYoIS8+JC8udGVzdCh1KSlyZXR1cm47dmFyIHI9SCh1LnNsaWNlKDAsLTEpLCJcXCIpO2lmKCh1Lmxlbmd0aC1yLmxlbmd0aCklMj09MClyZXR1cm59ZWxzZS0xPChy''@;'; put 'put ''PWZ1bmN0aW9uKHMscCl7aWYoLTEhPT1zLmluZGV4T2YocFsxXSkpZm9yKHZhciBnPXMubGVuZ3RoLEQ9MCxvPTA7bzxnO28rKylpZigiXFwiPT09c1tvXSlvKys7ZWxzZSBpZihzW29dPT09cFswXSlEKys7ZWxzZSBpZihzW29dPT09cFsxXSYmLS1EPDApcmV0dXJuIG87cmV0dXJuLTF9KHRb''@;'; put 'put ''Ml0sIigpIikpJiYobj0oMD09PXRbMF0uaW5kZXhPZigiISIpPzU6NCkrdFsxXS5sZW5ndGgrcix0WzJdPXRbMl0uc3Vic3RyaW5nKDAsciksdFswXT10WzBdLnN1YnN0cmluZygwLG4pLnRyaW0oKSx0WzNdPSIiKTtyPXRbMl07dmFyIGUsbj0iIjtyZXR1cm4gdGhpcy5vcHRpb25zLnBlZGFu''@;'; put 'put ''dGljPyhlPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhyKSkmJihyPWVbMV0sbj1lWzNdKTpuPXRbM10/dFszXS5zbGljZSgxLC0xKToiIixyPXIudHJpbSgpLGllKHQse2hyZWY6KHI9L148Ly50ZXN0KHIpP3RoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdCh1''@;'; put 'put ''KT9yLnNsaWNlKDEpOnIuc2xpY2UoMSwtMSk6cikmJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpuJiZuLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LHRbMF0sdGhpcy5sZXhlcil9fSxpLnJlZmxpbms9ZnVuY3Rpb24o''@;'; put 'put ''dCx1KXt2YXIgZTtpZihlPShlPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyh0KSl8fHRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHQpKXJldHVybih0PXVbKHQ9KGVbMl18fGVbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIikpLnRvTG93ZXJDYXNlKCldKT9pZShlLHQsZVswXSx0''@;'; put 'put ''aGlzLmxleGVyKTp7dHlwZToidGV4dCIscmF3OnU9ZVswXS5jaGFyQXQoMCksdGV4dDp1fX0saS5lbVN0cm9uZz1mdW5jdGlvbih0LHUsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciByPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKHQpO2lmKHImJighclszXXx8IWUu''@;'; put 'put ''bWF0Y2goLyg/OlswLTlBLVphLXpceEFBXHhCMlx4QjNceEI1XHhCOVx4QkFceEJDLVx4QkVceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0Zc''@;'; put 'put ''dTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjAtXHUwNTg4XHUwNUQwLVx1MDVFQVx1MDVFRi1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjYwLVx1MDY2OVx1MDY2''@;'; put 'put ''RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUUtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3QzAtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1c''@;'; put 'put ''dTA4NThcdTA4NjAtXHUwODZBXHUwODcwLVx1MDg4N1x1MDg4OS1cdTA4OEVcdTA4QTAtXHUwOEM5XHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFB''@;'; put 'put ''LVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUU2LVx1MDlGMVx1MDlGNC1cdTA5RjlcdTA5RkNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVc''@;'; put 'put ''dTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE2Rlx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1''@;'; put 'put ''MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNkZcdTBCNzEtXHUwQjc3XHUwQjgzXHUwQjg1LVx1''@;'; put 'put ''MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBCRTYtXHUwQkYyXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1''@;'; put 'put ''MEMzOVx1MEMzRFx1MEM1OC1cdTBDNUFcdTBDNURcdTBDNjBcdTBDNjFcdTBDNjYtXHUwQzZGXHUwQzc4LVx1MEM3RVx1MEM4MFx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0REXHUwQ0RFXHUwQ0UwXHUw''@;'; put 'put ''Q0UxXHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwNC1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ1NC1cdTBENTZcdTBENTgtXHUwRDYxXHUwRDY2LVx1MEQ3OFx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1c''@;'; put 'put ''dTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwREU2LVx1MERFRlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4Ni1cdTBFOEFcdTBFOEMtXHUwRUEzXHUwRUE1XHUwRUE3LVx1MEVCMFx1MEVCMlx1MEVCM1x1''@;'; put 'put ''MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYyMC1cdTBGMzNcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGLVx1MTA0OVx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYx''@;'; put 'put ''XHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwOTAtXHUxMDk5XHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4''@;'; put 'put ''OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM2OS1cdTEzN0NcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNVx1''@;'; put 'put ''MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MTFcdTE3MUYtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdE''@;'; put 'put ''Q1x1MTdFMC1cdTE3RTlcdTE3RjAtXHUxN0Y5XHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzhcdTE4ODAtXHUxODg0XHUxODg3LVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1''@;'; put 'put ''MTlEMC1cdTE5REFcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUE4MC1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNENcdTFCNTAtXHUxQjU5XHUxQjgzLVx1MUJBMFx1MUJBRS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzQwLVx1MUM0OVx1MUM0''@;'; put 'put ''RC1cdTFDN0RcdTFDODAtXHUxQzg4XHUxQzkwLVx1MUNCQVx1MUNCRC1cdTFDQkZcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGM1x1MUNGNVx1MUNGNlx1MUNGQVx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1''@;'; put 'put ''MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzBc''@;'; put 'put ''dTIwNzFcdTIwNzQtXHUyMDc5XHUyMDdGLVx1MjA4OVx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVc''@;'; put 'put ''dTIxNTAtXHUyMTg5XHUyNDYwLVx1MjQ5Qlx1MjRFQS1cdTI0RkZcdTI3NzYtXHUyNzkzXHUyQzAwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJDRkRcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2''@;'; put 'put ''XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUz''@;'; put 'put ''MDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRlx1MzEzMS1cdTMxOEVcdTMxOTItXHUzMTk1XHUzMUEwLVx1MzFCRlx1MzFGMC1cdTMxRkZcdTMyMjAtXHUzMjI5XHUzMjQ4LVx1MzI0Rlx1MzI1MS1cdTMyNUZcdTMyODAtXHUzMjg5XHUzMkIxLVx1MzJC''@;'; put 'put ''Rlx1MzQwMC1cdTREQkZcdTRFMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBN0NBXHVBN0QwXHVBN0QxXHVBN0QzXHVB''@;'; put 'put ''N0Q1LVx1QTdEOVx1QTdGMi1cdUE4MDFcdUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4MzAtXHVBODM1XHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RDAtXHVBOEQ5XHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QThGRVx1QTkwMC1cdUE5MjVcdUE5MzAt''@;'; put 'put ''XHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0YtXHVBOUQ5XHVBOUUwLVx1QTlFNFx1QTlFNi1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3RS1cdUFBQUZcdUFBQjFcdUFB''@;'; put 'put ''QjVcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI2OVx1''@;'; put 'put ''QUI3MC1cdUFCRTJcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIz''@;'; put 'put ''RVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVG''@;'; put 'put ''RkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQwNy1cdURE''@;'; put 'put ''MzNcdURENDAtXHVERDc4XHVERDhBXHVERDhCXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTEtXHVERUZCXHVERjAwLVx1REYyM1x1REYyRC1cdURGNEFcdURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXHVERkQxLVx1REZENV18XHVEODAx''@;'; put 'put ''W1x1REMwMC1cdURDOURcdURDQTAtXHVEQ0E5XHVEQ0IwLVx1RENEM1x1RENEOC1cdURDRkJcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REQ3MC1cdUREN0FcdUREN0MtXHVERDhBXHVERDhDLVx1REQ5Mlx1REQ5NFx1REQ5NVx1REQ5Ny1cdUREQTFcdUREQTMtXHVEREIxXHVEREIzLVx1''@;'; put 'put ''RERCOVx1RERCQlx1RERCQ1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N1x1REY4MC1cdURGODVcdURGODctXHVERkIwXHVERkIyLVx1REZCQV18XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1''@;'; put 'put ''NVx1REM1OC1cdURDNzZcdURDNzktXHVEQzlFXHVEQ0E3LVx1RENBRlx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdURDRkItXHVERDFCXHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkMtXHVERENGXHVEREQyLVx1REUwMFx1REUxMC1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1''@;'; put 'put ''REUzNVx1REU0MC1cdURFNDhcdURFNjAtXHVERTdFXHVERTgwLVx1REU5Rlx1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERUVCLVx1REVFRlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjU4LVx1REY3Mlx1REY3OC1cdURGOTFcdURGQTktXHVERkFGXXxcdUQ4MDNbXHVEQzAwLVx1''@;'; put 'put ''REM0OFx1REM4MC1cdURDQjJcdURDQzAtXHVEQ0YyXHVEQ0ZBLVx1REQyM1x1REQzMC1cdUREMzlcdURFNjAtXHVERTdFXHVERTgwLVx1REVBOVx1REVCMFx1REVCMVx1REYwMC1cdURGMjdcdURGMzAtXHVERjQ1XHVERjUxLVx1REY1NFx1REY3MC1cdURGODFcdURGQjAtXHVERkNCXHVERkUw''@;'; put 'put ''LVx1REZGNl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDNTItXHVEQzZGXHVEQzcxXHVEQzcyXHVEQzc1XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdURDRjAtXHVEQ0Y5XHVERDAzLVx1REQyNlx1REQzNi1cdUREM0ZcdURENDRcdURENDdcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1''@;'; put 'put ''RERCMlx1RERDMS1cdUREQzRcdURERDAtXHVERERBXHVERERDXHVEREUxLVx1RERGNFx1REUwMC1cdURFMTFcdURFMTMtXHVERTJCXHVERTNGXHVERTQwXHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFREVcdURFRjAt''@;'; put 'put ''XHVERUY5XHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDMDAtXHVEQzM0XHVEQzQ3LVx1REM0QVx1REM1MC1cdURDNTlcdURDNUYtXHVE''@;'; put 'put ''QzYxXHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1RENDN1x1RENEMC1cdURDRDlcdUREODAtXHVEREFFXHVEREQ4LVx1REREQlx1REUwMC1cdURFMkZcdURFNDRcdURFNTAtXHVERTU5XHVERTgwLVx1REVBQVx1REVCOFx1REVDMC1cdURFQzlcdURGMDAtXHVERjFBXHVERjMwLVx1REYzQlx1''@;'; put 'put ''REY0MC1cdURGNDZdfFx1RDgwNltcdURDMDAtXHVEQzJCXHVEQ0EwLVx1RENGMlx1RENGRi1cdUREMDZcdUREMDlcdUREMEMtXHVERDEzXHVERDE1XHVERDE2XHVERDE4LVx1REQyRlx1REQzRlx1REQ0MVx1REQ1MC1cdURENTlcdUREQTAtXHVEREE3XHVEREFBLVx1REREMFx1RERFMVx1RERF''@;'; put 'put ''M1x1REUwMFx1REUwQi1cdURFMzJcdURFM0FcdURFNTBcdURFNUMtXHVERTg5XHVERTlEXHVERUIwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJFXHVEQzQwXHVEQzUwLVx1REM2Q1x1REM3Mi1cdURDOEZcdUREMDAtXHVERDA2XHVERDA4XHVERDA5XHVERDBCLVx1''@;'; put 'put ''REQzMFx1REQ0Nlx1REQ1MC1cdURENTlcdURENjAtXHVERDY1XHVERDY3XHVERDY4XHVERDZBLVx1REQ4OVx1REQ5OFx1RERBMC1cdUREQTlcdURFRTAtXHVERUYyXHVERjAyXHVERjA0LVx1REYxMFx1REYxMi1cdURGMzNcdURGNTAtXHVERjU5XHVERkIwXHVERkMwLVx1REZENF18XHVEODA4''@;'; put 'put ''W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118XHVEODBCW1x1REY5MC1cdURGRjBdfFtcdUQ4MENcdUQ4MUMtXHVEODIwXHVEODIyXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXHVEODc0LVx1RDg3OVx1RDg4MC1cdUQ4ODNc''@;'; put 'put ''dUQ4ODUtXHVEODg3XVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRlx1REM0MS1cdURDNDZdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFNjAtXHVERTY5XHVERTcwLVx1REVCRVx1REVDMC1cdURFQzlcdURFRDAt''@;'; put 'put ''XHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjVCLVx1REY2MVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERTQwLVx1REU5Nlx1REYwMC1cdURGNEFcdURGNTBcdURGOTMtXHVERjlGXHVERkUwXHVERkUxXHVERkUzXXxcdUQ4MjFb''@;'; put 'put ''XHVEQzAwLVx1REZGN118XHVEODIzW1x1REMwMC1cdURDRDVcdUREMDAtXHVERDA4XXxcdUQ4MkJbXHVERkYwLVx1REZGM1x1REZGNS1cdURGRkJcdURGRkRcdURGRkVdfFx1RDgyQ1tcdURDMDAtXHVERDIyXHVERDMyXHVERDUwLVx1REQ1Mlx1REQ1NVx1REQ2NC1cdURENjdcdURENzAtXHVE''@;'; put 'put ''RUZCXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM0W1x1REVDMC1cdURFRDNcdURFRTAtXHVERUYzXHVERjYwLVx1REY3OF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0Ey''@;'; put 'put ''XHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURE''@;'; put 'put ''NTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0Ut''@;'; put 'put ''XHVERkZGXXxcdUQ4MzdbXHVERjAwLVx1REYxRVx1REYyNS1cdURGMkFdfFx1RDgzOFtcdURDMzAtXHVEQzZEXHVERDAwLVx1REQyQ1x1REQzNy1cdUREM0RcdURENDAtXHVERDQ5XHVERDRFXHVERTkwLVx1REVBRFx1REVDMC1cdURFRUJcdURFRjAtXHVERUY5XXxcdUQ4MzlbXHVEQ0QwLVx1''@;'; put 'put ''RENFQlx1RENGMC1cdURDRjlcdURGRTAtXHVERkU2XHVERkU4LVx1REZFQlx1REZFRFx1REZFRVx1REZGMC1cdURGRkVdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XHVEQ0M3LVx1RENDRlx1REQwMC1cdURENDNcdURENEJcdURENTAtXHVERDU5XXxcdUQ4M0JbXHVEQzcxLVx1RENBQlx1RENBRC1c''@;'; put 'put ''dURDQUZcdURDQjEtXHVEQ0I0XHVERDAxLVx1REQyRFx1REQyRi1cdUREM0RcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1''@;'; put 'put ''REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURF''@;'; put 'put ''QTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODNDW1x1REQwMC1cdUREMENdfFx1RDgzRVtcdURGRjAtXHVERkY5XXxcdUQ4NjlbXHVEQzAwLVx1REVERlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM5XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURc''@;'; put 'put ''dURDMjAtXHVERkZGXXxcdUQ4NzNbXHVEQzAwLVx1REVBMVx1REVCMC1cdURGRkZdfFx1RDg3QVtcdURDMDAtXHVERkUwXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEODg0W1x1REMwMC1cdURGNEFcdURGNTAtXHVERkZGXXxcdUQ4ODhbXHVEQzAwLVx1REZBRl0pLykpJiYoIXJbMV0mJiFy''@;'; put 'put ''WzJdfHwhZXx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhlKSkpe3ZhciBuPXJbMF0ubGVuZ3RoLTEscz1uLHA9MCxnPSIqIj09PXJbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVu''@;'; put 'put ''ZDtmb3IoZy5sYXN0SW5kZXg9MCx1PXUuc2xpY2UoLTEqdC5sZW5ndGgrbik7bnVsbCE9KHI9Zy5leGVjKHUpKTspe3ZhciBELG89clsxXXx8clsyXXx8clszXXx8cls0XXx8cls1XXx8cls2XTtpZihvKWlmKG89by5sZW5ndGgsclszXXx8cls0XSlzKz1vO2Vsc2UgaWYoKHJbNV18fHJbNl0p''@;'; put 'put ''JiZuJTMmJiEoKG4rbyklMykpcCs9bztlbHNlIGlmKCEoMDwocy09bykpKXJldHVybiBvPU1hdGgubWluKG8sbytzK3ApLEQ9dC5zbGljZSgwLG4rci5pbmRleCtvKzEpLE1hdGgubWluKG4sbyklMj8obz1ELnNsaWNlKDEsLTEpLHt0eXBlOiJlbSIscmF3OkQsdGV4dDpvLHRva2Vuczp0aGlz''@;'; put 'put ''LmxleGVyLmlubGluZVRva2VucyhvKX0pOihvPUQuc2xpY2UoMiwtMikse3R5cGU6InN0cm9uZyIscmF3OkQsdGV4dDpvLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhvKX0pfX19LGkuY29kZXNwYW49ZnVuY3Rpb24obil7dmFyIHUsZSxyO2lmKG49dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''Y29kZS5leGVjKG4pKXJldHVybiByPW5bMl0ucmVwbGFjZSgvXG4vZywiICIpLHU9L1teIF0vLnRlc3QociksZT0vXiAvLnRlc3QocikmJi8gJC8udGVzdChyKSxyPXkocj11JiZlP3Iuc3Vic3RyaW5nKDEsci5sZW5ndGgtMSk6ciwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6blswXSx0ZXh0''@;'; put 'put ''OnJ9fSxpLmJyPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyh0KSlyZXR1cm57dHlwZToiYnIiLHJhdzp0WzBdfX0saS5kZWw9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyh0KSlyZXR1cm57dHlwZToiZGVsIixyYXc6dFswXSx0''@;'; put 'put ''ZXh0OnRbMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRbMl0pfX0saS5hdXRvbGluaz1mdW5jdGlvbihyLHUpe3ZhciBlO2lmKHI9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhyKSlyZXR1cm4gdT0iQCI9PT1yWzJdPyJtYWlsdG86IisoZT15KHRoaXMub3B0aW9u''@;'; put 'put ''cy5tYW5nbGU/dShyWzFdKTpyWzFdKSk6ZT15KHJbMV0pLHt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0OmUsaHJlZjp1LHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzplLHRleHQ6ZX1dfX0saS51cmw9ZnVuY3Rpb24odCx1KXt2YXIgZSxyLG4scztpZihlPXRoaXMucnVsZXMuaW5saW5lLnVy''@;'; put 'put ''bC5leGVjKHQpKXtpZigiQCI9PT1lWzJdKW49Im1haWx0bzoiKyhyPXkodGhpcy5vcHRpb25zLm1hbmdsZT91KGVbMF0pOmVbMF0pKTtlbHNle2Zvcig7cz1lWzBdLGVbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGVbMF0pWzBdLHMhPT1lWzBdOyk7cj15KGVbMF0pLG49''@;'; put 'put ''Ind3dy4iPT09ZVsxXT8iaHR0cDovLyIrZVswXTplWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZVswXSx0ZXh0OnIsaHJlZjpuLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19LGkuaW5saW5lVGV4dD1mdW5jdGlvbih0LHUpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''dGV4dC5leGVjKHQpKXJldHVybiB1PXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOnkodFswXSk6dFswXTp5KHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz91''@;'; put 'put ''KHRbMF0pOnRbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0ZXh0OnV9fSxhfSgpLGY9e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+''@;'; put 'put ''ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgj''@;'; put 'put ''ezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0''@;'; put 'put ''YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwk''@;'; put 'put ''KXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58''@;'; put 'put ''JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzog''@;'; put 'put ''Kyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOkksbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFk''@;'; put 'put ''aW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwo''@;'; put 'put ''W14oKV0qXCkpL30sYz0oZi5kZWY9RShmLmRlZikucmVwbGFjZSgibGFiZWwiLGYuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsZi5fdGl0bGUpLmdldFJlZ2V4KCksZi5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sZi5saXN0SXRlbVN0YXJ0PUUoL14oICopKGJ1bGwpICovKS5yZXBs''@;'; put 'put ''YWNlKCJidWxsIixmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLmxpc3Q9RShmLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxmLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJk''@;'; put 'put ''ZWYiLCJcXG4rKD89IitmLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpLGYuX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZp''@;'; put 'put ''ZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18''@;'; put 'put ''c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsZi5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sZi5odG1sPUUoZi5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsZi5fY29tbWVudCku''@;'; put 'put ''cmVwbGFjZSgidGFnIixmLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksZi5saGVhZGluZz1FKGYubGhlYWRpbmcpLnJlcGxhY2UoL2J1''@;'; put 'put ''bGwvZyxmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLnBhcmFncmFwaD1FKGYuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLGYuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxv''@;'; put 'put ''Y2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwv''@;'; put 'put ''Pz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLmJsb2NrcXVvdGU9RShmLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsZi5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksZi5ub3JtYWw9dih7fSxmKSxm''@;'; put 'put ''LmdmbT12KHt9LGYubm9ybWFsLHt0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1s''@;'; put 'put ''KS4qKD86XFxufCQpKSopXFxuKnwkKSJ9KSxmLmdmbS50YWJsZT1FKGYuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5d''@;'; put 'put ''IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHBy''@;'; put 'put ''ZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5nZm0ucGFyYWdyYXBoPUUoZi5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIi''@;'; put 'put ''KS5yZXBsYWNlKCJ0YWJsZSIsZi5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4p''@;'; put 'put ''XSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5wZWRhbnRpYz12KHt9LGYubm9ybWFsLHtodG1sOkUoIl4gKig/OmNvbW1lbnQg''@;'; put 'put ''Kig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLGYuX2NvbW1lbnQpLnJlcGxhY2Uo''@;'; put 'put ''L3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpA''@;'; put 'put ''KVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2VzOkksbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAq''@;'; put 'put ''KD86XG4rfCQpLyxwYXJhZ3JhcGg6RShmLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixmLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJl''@;'; put 'put ''cGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX0pLHtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8''@;'; put 'put ''ZW1haWwpPi8sdXJsOkksdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/''@;'; put 'put ''XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIs''@;'; put 'put ''ZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1b''@;'; put 'put ''XHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVu''@;'; put 'put ''Y3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxb''@;'; put 'put ''XHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOkksdGV4dDovXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4p''@;'; put 'put ''fFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfSk7ZnVuY3Rpb24ga2UoYSl7cmV0dXJuIGEucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxhY2UoLy0tL2csIlx1MjAx''@;'; put 'put ''MyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVwbGFjZSgvXC57M30vZywi''@;'; put 'put ''XHUyMDI2Iil9ZnVuY3Rpb24gc2UoYSl7Zm9yKHZhciBpLHQ9IiIsdT1hLmxlbmd0aCxlPTA7ZTx1O2UrKylpPWEuY2hhckNvZGVBdChlKSx0Kz0iJiMiKyhpPS41PE1hdGgucmFuZG9tKCk/IngiK2kudG9TdHJpbmcoMTYpOmkpKyI7IjtyZXR1cm4gdH1jLl9wdW5jdHVhdGlvbj0iXFxwe1B9''@;'; put 'put ''JCs8PT5gXnx+IixjLnB1bmN0dWF0aW9uPUUoYy5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csYy5hbnlQdW5j''@;'; put 'put ''dHVhdGlvbj0vXFxbcHVuY3RdL2csYy5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyxjLl9jb21tZW50PUUoZi5fY29tbWVudCkucmVwbGFjZSgiKD86LS1ceDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLmxEZWxpbT1FKGMuZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFj''@;'; put 'put ''ZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLnJEZWxpbUFzdD1FKGMuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5lbVN0cm9uZy5yRGVsaW1VbmQ9RShjLmVtU3Ryb25n''@;'; put 'put ''LnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuYW55UHVuY3R1YXRpb249RShjLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5fZXNjYXBlcz1FKGMuX2Vz''@;'; put 'put ''Y2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLGMuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAt''@;'; put 'put ''OS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sYy5hdXRvbGluaz1FKGMuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsYy5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsYy5fZW1haWwpLmdl''@;'; put 'put ''dFJlZ2V4KCksYy5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLGMudGFnPUUoYy50YWcpLnJlcGxhY2UoImNvbW1lbnQiLGMuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIs''@;'; put 'put ''Yy5fYXR0cmlidXRlKS5nZXRSZWdleCgpLGMuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLGMuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sYy5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwn''@;'; put 'put ''KD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyxjLmxpbms9RShjLmxpbmspLnJlcGxhY2UoImxhYmVsIixjLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsYy5faHJlZikucmVwbGFjZSgidGl0bGUiLGMuX3RpdGxlKS5nZXRSZWdleCgpLGMucmVmbGluaz1FKGMucmVmbGlu''@;'; put 'put ''aykucmVwbGFjZSgibGFiZWwiLGMuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLGYuX2xhYmVsKS5nZXRSZWdleCgpLGMubm9saW5rPUUoYy5ub2xpbmspLnJlcGxhY2UoInJlZiIsZi5fbGFiZWwpLmdldFJlZ2V4KCksYy5yZWZsaW5rU2VhcmNoPUUoYy5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFj''@;'; put 'put ''ZSgicmVmbGluayIsYy5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLGMubm9saW5rKS5nZXRSZWdleCgpLGMubm9ybWFsPXYoe30sYyksYy5wZWRhbnRpYz12KHt9LGMubm9ybWFsLHtzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8p''@;'; put 'put ''fF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5k''@;'; put 'put ''QXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6RSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsYy5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpFKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixj''@;'; put 'put ''Ll9sYWJlbCkuZ2V0UmVnZXgoKX0pLGMuZ2ZtPXYoe30sYy5ub3JtYWwse2VzY2FwZTpFKGMuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlth''@;'; put 'put ''LXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6Oypf''@;'; put 'put ''JyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5f''@;'; put 'put ''XXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSksYy5nZm0udXJsPUUoYy5nZm0udXJsLCJpIikucmVwbGFjZSgi''@;'; put 'put ''ZW1haWwiLGMuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxjLmJyZWFrcz12KHt9LGMuZ2ZtLHticjpFKGMuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OkUoYy5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9c''@;'; put 'put ''ezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9KTt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMu''@;'; put 'put ''b3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBqLHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsKHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMpLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxp''@;'; put 'put ''blJhd0Jsb2NrOiExLHRvcDohMH0sZT17YmxvY2s6Zi5ub3JtYWwsaW5saW5lOmMubm9ybWFsfSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KGUuYmxvY2s9Zi5wZWRhbnRpYyxlLmlubGluZT1jLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoZS5ibG9jaz1mLmdmbSxlLmlubGluZT10aGlz''@;'; put 'put ''Lm9wdGlvbnMuYnJlYWtzP2MuYnJlYWtzOmMuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1lfWEubGV4PWZ1bmN0aW9uKGUscil7cmV0dXJuIG5ldyBhKHIpLmxleChlKX0sYS5sZXhJbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGEocikuaW5saW5lVG9rZW5zKGUpfTt2YXIgdCx1''@;'; put 'put ''PWEucHJvdG90eXBlO3JldHVybiB1LmxleD1mdW5jdGlvbihlKXt2YXIgcjtmb3IoZT1lLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO3I9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhyLnNyYyxyLnRv''@;'; put 'put ''a2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfSx1LmJsb2NrVG9rZW5zPWZ1bmN0aW9uKGUscil7dmFyIG4scyxwLGcsRD10aGlzO2Zvcih2b2lkIDA9PT1yJiYocj1bXSksZT10aGlzLm9wdGlvbnMucGVkYW50aWM/ZS5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6''@;'; put 'put ''ZS5yZXBsYWNlKC9eKCAqKShcdCspL2dtLGZ1bmN0aW9uKEYsZCx4KXtyZXR1cm4gZCsiICAgICIucmVwZWF0KHgubGVuZ3RoKX0pO2U7KXt2YXIgbz1mdW5jdGlvbigpe2lmKEQub3B0aW9ucy5leHRlbnNpb25zJiZELm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmRC5vcHRpb25zLmV4dGVu''@;'; put 'put ''c2lvbnMuYmxvY2suc29tZShmdW5jdGlvbihsKXtyZXR1cm4hIShuPWwuY2FsbCh7bGV4ZXI6RH0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5zcGFjZShlKSlyZXR1cm4gZT1lLnN1''@;'; put 'put ''YnN0cmluZyhuLnJhdy5sZW5ndGgpLDE9PT1uLnJhdy5sZW5ndGgmJjA8ci5sZW5ndGg/cltyLmxlbmd0aC0xXS5yYXcrPSJcbiI6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5jb2RlKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIShzPXJbci5s''@;'; put 'put ''ZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRleHQiIT09cy50eXBlP3IucHVzaChuKToocy5yYXcrPSJcbiIrbi5yYXcscy50ZXh0Kz0iXG4iK24udGV4dCxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpLCJjb250aW51ZSI7aWYoKG49''@;'; put 'put ''RC50b2tlbml6ZXIuZmVuY2VzKGUpKXx8KG49RC50b2tlbml6ZXIuaGVhZGluZyhlKSl8fChuPUQudG9rZW5pemVyLmhyKGUpKXx8KG49RC50b2tlbml6ZXIuYmxvY2txdW90ZShlKSl8fChuPUQudG9rZW5pemVyLmxpc3QoZSkpfHwobj1ELnRva2VuaXplci5odG1sKGUpKSlyZXR1cm4gZT1l''@;'; put 'put ''LnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49RC50b2tlbml6ZXIuZGVmKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIShzPXJbci5sZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRleHQiIT09cy50eXBlP0Qu''@;'; put 'put ''dG9rZW5zLmxpbmtzW24udGFnXXx8KEQudG9rZW5zLmxpbmtzW24udGFnXT17aHJlZjpuLmhyZWYsdGl0bGU6bi50aXRsZX0pOihzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi5yYXcsRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9cy50ZXh0KSwiY29u''@;'; put 'put ''dGludWUiO2lmKChuPUQudG9rZW5pemVyLnRhYmxlKGUpKXx8KG49RC50b2tlbml6ZXIubGhlYWRpbmcoZSkpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIEYsZCx4O2lmKHA9ZSxELm9wdGlvbnMuZXh0ZW5zaW9ucyYmRC5vcHRp''@;'; put 'put ''b25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayYmKEY9MS8wLGQ9ZS5zbGljZSgxKSxELm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24obCl7Im51bWJlciI9PXR5cGVvZih4PWwuY2FsbCh7bGV4ZXI6dGhpc30sZCkpJiYwPD14JiYoRj1NYXRoLm1pbihGLHgp''@;'; put 'put ''KX0pLEY8MS8wKSYmMDw9RiYmKHA9ZS5zdWJzdHJpbmcoMCxGKzEpKSxELnN0YXRlLnRvcCYmKG49RC50b2tlbml6ZXIucGFyYWdyYXBoKHApKSlyZXR1cm4gcz1yW3IubGVuZ3RoLTFdLGcmJiJwYXJhZ3JhcGgiPT09cy50eXBlPyhzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi50''@;'; put 'put ''ZXh0LEQuaW5saW5lUXVldWUucG9wKCksRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9cy50ZXh0KTpyLnB1c2gobiksZz1wLmxlbmd0aCE9PWUubGVuZ3RoLGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwiY29udGludWUiO2lmKG49RC50b2tlbml6ZXIudGV4''@;'; put 'put ''dChlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIituLnRleHQsRC5pbmxpbmVRdWV1ZS5wb3AoKSxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVu''@;'; put 'put ''Z3RoLTFdLnNyYz1zLnRleHQpOnIucHVzaChuKSwiY29udGludWUiO2lmKGUpe3ZhciBoPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKEQub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoaCksImJyZWFrIjt0aHJvdyBuZXcgRXJyb3IoaCl9''@;'; put 'put ''fSgpO2lmKCJjb250aW51ZSIhPT1vJiYiYnJlYWsiPT09bylicmVha31yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAscn0sdS5pbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6cj12b2lkIDA9PT1yP1tdOnJ9KSxyfSx1LmlubGlu''@;'; put 'put ''ZVRva2Vucz1mdW5jdGlvbihlLHIpe3ZhciBuLHMscCxnLEQsbyxGPXRoaXMsZD0odm9pZCAwPT09ciYmKHI9W10pLGUpO2lmKHRoaXMudG9rZW5zLmxpbmtzKXt2YXIgeD1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYoMDx4Lmxlbmd0aClmb3IoO251bGwhPShnPXRoaXMudG9r''@;'; put 'put ''ZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMoZCkpOyl4LmluY2x1ZGVzKGdbMF0uc2xpY2UoZ1swXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKGQ9ZC5zbGljZSgwLGcuaW5kZXgpKyJbIisiYSIucmVwZWF0KGdbMF0ubGVuZ3RoLTIpKyJdIitkLnNsaWNlKHRoaXMu''@;'; put 'put ''dG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKGQpKTspZD1kLnNsaWNlKDAsZy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoZ1swXS5sZW5ndGgtMikrIl0i''@;'; put 'put ''K2Quc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMoZCkpOylkPWQuc2xpY2UoMCxnLmluZGV4KSsiKysiK2Quc2xpY2UodGhpcy50''@;'; put 'put ''b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtlOyl7dmFyIGg9ZnVuY3Rpb24oKXtpZihEfHwobz0iIiksRD0hMSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5p''@;'; put 'put ''bmxpbmUuc29tZShmdW5jdGlvbihBKXtyZXR1cm4hIShuPUEuY2FsbCh7bGV4ZXI6Rn0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1GLnRva2VuaXplci5lc2NhcGUoZSkpcmV0dXJuIGU9ZS5zdWJzdHJp''@;'; put 'put ''bmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnRhZyhlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1uLnR5cGUmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMu''@;'; put 'put ''dGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLmxpbmsoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnJlZmxpbmsoZSxGLnRva2Vucy5saW5rcykpcmV0dXJu''@;'; put 'put ''IGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwocz1yW3IubGVuZ3RoLTFdKSYmInRleHQiPT09bi50eXBlJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYoKG49Ri50b2tlbml6ZXIuZW1TdHJvbmcoZSxkLG8p''@;'; put 'put ''KXx8KG49Ri50b2tlbml6ZXIuY29kZXNwYW4oZSkpfHwobj1GLnRva2VuaXplci5icihlKSl8fChuPUYudG9rZW5pemVyLmRlbChlKSl8fChuPUYudG9rZW5pemVyLmF1dG9saW5rKGUsc2UpKXx8IUYuc3RhdGUuaW5MaW5rJiYobj1GLnRva2VuaXplci51cmwoZSxzZSkpKXJldHVybiBlPWUu''@;'; put 'put ''c3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIGwsayxiO2lmKHA9ZSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUmJihsPTEvMCxrPWUuc2xpY2UoMSksRi5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJ''@;'; put 'put ''bmxpbmUuZm9yRWFjaChmdW5jdGlvbihBKXsibnVtYmVyIj09dHlwZW9mKGI9QS5jYWxsKHtsZXhlcjp0aGlzfSxrKSkmJjA8PWImJihsPU1hdGgubWluKGwsYikpfSksbDwxLzApJiYwPD1sJiYocD1lLnN1YnN0cmluZygwLGwrMSkpLG49Ri50b2tlbml6ZXIuaW5saW5lVGV4dChwLGtlKSly''@;'; put 'put ''ZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLCJfIiE9PW4ucmF3LnNsaWNlKC0xKSYmKG89bi5yYXcuc2xpY2UoLTEpKSxEPSEwLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pLCJjb250aW51''@;'; put 'put ''ZSI7aWYoZSl7dmFyIHc9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYoRi5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcih3KSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvcih3KX19KCk7aWYoImNvbnRpbnVlIiE9PWgmJiJicmVhayI9PT1oKWJy''@;'; put 'put ''ZWFrfXJldHVybiByfSx1PWEsKHQ9W3trZXk6InJ1bGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57YmxvY2s6ZixpbmxpbmU6Y319fV0pJiZQKHUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYX0oKSxaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g''@;'; put 'put ''YSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0c312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5jb2RlPWZ1bmN0aW9uKHQsbixlKXt2YXIgcjtyZXR1cm4gbj0obnx8IiIpLm1hdGNoKC9cUyovKVswXSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0JiZudWxsIT0ocj10aGlzLm9wdGlvbnMu''@;'; put 'put ''aGlnaGxpZ2h0KHQsbikpJiZyIT09dCYmKGU9ITAsdD1yKSx0PXQucmVwbGFjZSgvXG4kLywiIikrIlxuIixuPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3kobikrJyI+JysoZT90OnkodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIr''@;'; put 'put ''KGU/dDp5KHQsITApKSsiPC9jb2RlPjwvcHJlPlxuIn0saS5ibG9ja3F1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrdCsiPC9ibG9ja3F1b3RlPlxuIn0saS5odG1sPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIHR9LGkuaGVhZGluZz1mdW5jdGlvbih0LHUsZSxyKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz8iPGgiK3UrJyBpZD0iJysodGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtyLnNsdWcoZSkpKyciPicrdCsiPC9oIit1KyI+XG4iOiI8aCIrdSsiPiIrdCsiPC9oIit1KyI+XG4ifSxpLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54''@;'; put 'put ''aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9LGkubGlzdD1mdW5jdGlvbih0LHUsZSl7dmFyIHI9dT8ib2wiOiJ1bCI7cmV0dXJuIjwiK3IrKHUmJjEhPT1lPycgc3RhcnQ9IicrZSsnIic6IiIpKyI+XG4iK3QrIjwvIityKyI+XG4ifSxpLmxpc3RpdGVtPWZ1bmN0aW9uKHQpe3JldHVybiI8bGk+''@;'; put 'put ''Iit0KyI8L2xpPlxuIn0saS5jaGVja2JveD1mdW5jdGlvbih0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifSxpLnBhcmFncmFwaD1mdW5jdGlvbih0KXty''@;'; put 'put ''ZXR1cm4iPHA+Iit0KyI8L3A+XG4ifSxpLnRhYmxlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrdCsiPC90aGVhZD5cbiIrKHU9dSYmIjx0Ym9keT4iK3UrIjwvdGJvZHk+IikrIjwvdGFibGU+XG4ifSxpLnRhYmxlcm93PWZ1bmN0aW9uKHQpe3JldHVybiI8dHI+''@;'; put 'put ''XG4iK3QrIjwvdHI+XG4ifSxpLnRhYmxlY2VsbD1mdW5jdGlvbih0LHUpe3ZhciBlPXUuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4odS5hbGlnbj8iPCIrZSsnIGFsaWduPSInK3UuYWxpZ24rJyI+JzoiPCIrZSsiPiIpK3QrIjwvIitlKyI+XG4ifSxpLnN0cm9uZz1mdW5jdGlvbih0KXtyZXR1''@;'; put 'put ''cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LGkuZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxlbT4iK3QrIjwvZW0+In0saS5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4iPGNvZGU+Iit0KyI8L2NvZGU+In0saS5icj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxi''@;'; put 'put ''ci8+IjoiPGJyPiJ9LGkuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiI8ZGVsPiIrdCsiPC9kZWw+In0saS5saW5rPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToodD0nPGEgaHJlZj0iJyt0''@;'; put 'put ''KyciJyx1JiYodCs9JyB0aXRsZT0iJyt1KyciJyksdCsiPiIrZSsiPC9hPiIpfSxpLmltYWdlPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToodD0nPGltZyBzcmM9IicrdCsnIiBhbHQ9''@;'; put 'put ''IicrZSsnIicsdSYmKHQrPScgdGl0bGU9IicrdSsnIicpLHQrKHRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IikpfSxpLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkuc3Ryb25nPWZ1''@;'; put 'put ''bmN0aW9uKHQpe3JldHVybiB0fSxpLmVtPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmNvZGVzcGFuPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmRlbD1mdW5jdGlvbih0KXtyZXR1cm4gdH0saS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9''@;'; put 'put ''LGkubGluaz1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5pbWFnZT1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5icj1mdW5jdGlvbigpe3JldHVybiIifSxhfSgpLFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zZWVuPXt9fXZhciBpPWEucHJvdG90eXBlO3JldHVy''@;'; put 'put ''biBpLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC88WyFcL2Etel0uKj8+L2dpLCIiKS5yZXBsYWNlKC9bXHUyMDAwLVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiMkJSYoKSorLC4vOjs8PT4/QFtcXV5ge3x9fl0vZywiIikucmVw''@;'; put 'put ''bGFjZSgvXHMvZywiLSIpfSxpLmdldE5leHRTYWZlU2x1Zz1mdW5jdGlvbih0LHUpe3ZhciBlPXQscj0wO2lmKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShlKSlmb3Iocj10aGlzLnNlZW5bdF07ZT10KyItIisgKytyLHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShlKTspO3JldHVybiB1fHwo''@;'; put 'put ''dGhpcy5zZWVuW3RdPXIsdGhpcy5zZWVuW2VdPTApLGV9LGkuc2x1Zz1mdW5jdGlvbih0LHUpe3JldHVybiB2b2lkIDA9PT11JiYodT17fSksdD10aGlzLnNlcmlhbGl6ZSh0KSx0aGlzLmdldE5leHRTYWZlU2x1Zyh0LHUuZHJ5cnVuKX0sYX0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0''@;'; put 'put ''KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgWix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRl''@;'; put 'put ''cmVyPW5ldyBOLHRoaXMuc2x1Z2dlcj1uZXcgWH1hLnBhcnNlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlKHQpfSxhLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlSW5saW5lKHQpfTt2YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5w''@;'; put 'put ''YXJzZT1mdW5jdGlvbih0LHUpe3ZvaWQgMD09PXUmJih1PSEwKTtmb3IodmFyIGUscixuLHMscCxnLEQsbyxGLGQseCxoLGwsayxiLHcsQT0iIixCPXQubGVuZ3RoLF89MDtfPEI7XysrKWlmKG89dFtfXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMu''@;'; put 'put ''cmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXSYmKCExIT09KHc9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW28udHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LG8pKXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFi''@;'; put 'put ''bGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoby50eXBlKSkpQSs9d3x8IiI7ZWxzZSBzd2l0Y2goby50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpBKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWU7Y2FzZSJo''@;'; put 'put ''ZWFkaW5nIjpBKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShvLnRva2Vucyksby5kZXB0aCx1ZSh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOkErPXRoaXMucmVuZGVy''@;'; put 'put ''ZXIuY29kZShvLnRleHQsby5sYW5nLG8uZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKGc9Rj0iIixuPW8uaGVhZGVyLmxlbmd0aCxlPTA7ZTxuO2UrKylnKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKG8uaGVhZGVyW2VdLnRva2Vucykse2hlYWRl''@;'; put 'put ''cjohMCxhbGlnbjpvLmFsaWduW2VdfSk7Zm9yKEYrPXRoaXMucmVuZGVyZXIudGFibGVyb3coZyksRD0iIixuPW8ucm93cy5sZW5ndGgsZT0wO2U8bjtlKyspe2ZvcihnPSIiLHM9KHA9by5yb3dzW2VdKS5sZW5ndGgscj0wO3I8cztyKyspZys9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhp''@;'; put 'put ''cy5wYXJzZUlubGluZShwW3JdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpvLmFsaWduW3JdfSk7RCs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnKX1BKz10aGlzLnJlbmRlcmVyLnRhYmxlKEYsRCk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpEPXRoaXMucGFyc2Uoby50b2tlbnMpLEEr''@;'; put 'put ''PXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShEKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihGPW8ub3JkZXJlZCx6PW8uc3RhcnQsZD1vLmxvb3NlLG49by5pdGVtcy5sZW5ndGgsRD0iIixlPTA7ZTxuO2UrKylsPShoPW8uaXRlbXNbZV0pLmNoZWNrZWQsaz1oLnRhc2sseD0iIixoLnRhc2sm''@;'; put 'put ''JihiPXRoaXMucmVuZGVyZXIuY2hlY2tib3gobCksZD8wPGgudG9rZW5zLmxlbmd0aCYmInBhcmFncmFwaCI9PT1oLnRva2Vuc1swXS50eXBlPyhoLnRva2Vuc1swXS50ZXh0PWIrIiAiK2gudG9rZW5zWzBdLnRleHQsaC50b2tlbnNbMF0udG9rZW5zJiYwPGgudG9rZW5zWzBdLnRva2Vucy5s''@;'; put 'put ''ZW5ndGgmJiJ0ZXh0Ij09PWgudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoaC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9YisiICIraC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpoLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OmJ9KTp4Kz1iKSx4Kz10aGlzLnBhcnNl''@;'; put 'put ''KGgudG9rZW5zLGQpLEQrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oeCxrLGwpO0ErPXRoaXMucmVuZGVyZXIubGlzdChELEYseik7Y29udGludWU7Y2FzZSJodG1sIjpBKz10aGlzLnJlbmRlcmVyLmh0bWwoby50ZXh0LG8uYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpBKz10aGlz''@;'; put 'put ''LnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKSk7Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoRD1vLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQ7XysxPEImJiJ0ZXh0Ij09PXRbXysxXS50eXBlOylEKz0iXG4iKygobz10WysrX10p''@;'; put 'put ''LnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQpO0ErPXU/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoRCk6RDtjb250aW51ZTtkZWZhdWx0OnZhciB6PSdUb2tlbiB3aXRoICInK28udHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2ls''@;'; put 'put ''ZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3Ioeik7dGhyb3cgbmV3IEVycm9yKHopfXJldHVybiBBfSxpLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7dT11fHx0aGlzLnJlbmRlcmVyO2Zvcih2YXIgZSxyLG49IiIscz10Lmxlbmd0aCxwPTA7cDxzO3ArKylpZihlPXRbcF0sdGhpcy5v''@;'; put 'put ''cHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2UudHlwZV0mJighMSE9PShyPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tlLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlz''@;'; put 'put ''fSxlKSl8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZS50eXBlKSkpbis9cnx8IiI7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpuKz11LnRleHQo''@;'; put 'put ''ZS50ZXh0KTticmVhaztjYXNlImh0bWwiOm4rPXUuaHRtbChlLnRleHQpO2JyZWFrO2Nhc2UibGluayI6bis9dS5saW5rKGUuaHJlZixlLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOm4rPXUuaW1hZ2UoZS5ocmVmLGUudGl0bGUsZS50ZXh0''@;'; put 'put ''KTticmVhaztjYXNlInN0cm9uZyI6bis9dS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShlLnRva2Vucyx1KSk7YnJlYWs7Y2FzZSJlbSI6bis9dS5lbSh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztjYXNlImNvZGVzcGFuIjpuKz11LmNvZGVzcGFuKGUudGV4dCk7YnJlYWs7''@;'; put 'put ''Y2FzZSJiciI6bis9dS5icigpO2JyZWFrO2Nhc2UiZGVsIjpuKz11LmRlbCh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztkZWZhdWx0OnZhciBnPSdUb2tlbiB3aXRoICInK2UudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJl''@;'; put 'put ''dHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoZyk7dGhyb3cgbmV3IEVycm9yKGcpfXJldHVybiBufSxhfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzfXZhciBpPWEucHJvdG90eXBlO3JldHVybiBpLnByZXByb2Nlc3M9ZnVuY3Rpb24odCl7''@;'; put 'put ''cmV0dXJuIHR9LGkucG9zdHByb2Nlc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCkscT0oTy5wYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSksSygicGFyc2VNYXJrZG93biIpKSxWPUsoIm9uRXJyb3IiKTtmdW5jdGlvbiBDZShhLGkpe3Zh''@;'; put 'put ''ciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHUsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpO3ZhciBuLHM9dih7fSxlKSxwPShlPXYoe30sdC5kZWZhdWx0cyxzKSxHKHQsVilbVl0oZS5zaWxlbnQsZS5hc3luYyxyKSk7aWYobnVsbD09dSlyZXR1cm4gcChuZXcgRXJy''@;'; put 'put ''b3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiB1KXJldHVybiBwKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs''@;'; put 'put ''KHUpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihzPXIsKG49ZSkmJiFuLnNpbGVudCYmKHMmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g''@;'; put 'put ''dGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMiKSwobi5zYW5pdGl6ZXx8bi5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0''@;'; put 'put ''ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwhbi5oaWdobGlnaHQmJiJsYW5n''@;'; put 'put ''dWFnZS0iPT09bi5sYW5nUHJlZml4fHxjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUg''@;'; put 'put ''ZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLG4ubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2lu''@;'; put 'put ''Y2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxz''@;'; put 'put ''ZX1gLiIpLG4uYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRw''@;'; put 'put ''czovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksbi5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3''@;'; put 'put ''aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLG4ueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZl''@;'; put 'put ''cnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSxuLmhlYWRlcklkc3x8bi5oZWFkZXJQcmVmaXgpJiZjb25zb2xlLndh''@;'; put 'put ''cm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJu''@;'; put 'put ''aW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSxlLmhvb2tzJiYoZS5ob29rcy5vcHRpb25zPWUpLHIpe3ZhciBnLEQ9ZS5oaWdobGlnaHQ7''@;'; put 'put ''dHJ5e2UuaG9va3MmJih1PWUuaG9va3MucHJlcHJvY2Vzcyh1KSksZz1hKHUsZSl9Y2F0Y2goaCl7cmV0dXJuIHAoaCl9dmFyIG8sRj1mdW5jdGlvbihoKXt2YXIgbDtpZighaCl0cnl7ZS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoZyxlLndhbGtUb2tlbnMpLGw9aShnLGUpLGUuaG9va3Mm''@;'; put 'put ''JihsPWUuaG9va3MucG9zdHByb2Nlc3MobCkpfWNhdGNoKGspe2g9a31yZXR1cm4gZS5oaWdobGlnaHQ9RCxoP3AoaCk6cihudWxsLGwpfTtyZXR1cm4hRHx8RC5sZW5ndGg8Mz9GKCk6KGRlbGV0ZSBlLmhpZ2hsaWdodCxnLmxlbmd0aD8obz0wLHQud2Fsa1Rva2VucyhnLGZ1bmN0aW9uKGgp''@;'; put 'put ''eyJjb2RlIj09PWgudHlwZSYmKG8rKyxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RChoLnRleHQsaC5sYW5nLGZ1bmN0aW9uKGwsayl7aWYobClyZXR1cm4gRihsKTtudWxsIT1rJiZrIT09aC50ZXh0JiYoaC50ZXh0PWssaC5lc2NhcGVkPSEwKSwwPT0tLW8mJkYoKX0pfSwwKSl9KSx2b2lkKDA9''@;'; put 'put ''PT1vJiZGKCkpKTpGKCkpfWlmKGUuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShlLmhvb2tzP2UuaG9va3MucHJlcHJvY2Vzcyh1KTp1KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBhKGgsZSl9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBlLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwo''@;'; put 'put ''dC53YWxrVG9rZW5zKGgsZS53YWxrVG9rZW5zKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBofSk6aH0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGkoaCxlKX0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGUuaG9va3M/ZS5ob29rcy5wb3N0cHJvY2VzcyhoKTpofSkuY2F0Y2gocCk7dHJ5''@;'; put 'put ''e2UuaG9va3MmJih1PWUuaG9va3MucHJlcHJvY2Vzcyh1KSk7dmFyIGQ9YSh1LGUpLHg9KGUud2Fsa1Rva2VucyYmdC53YWxrVG9rZW5zKGQsZS53YWxrVG9rZW5zKSxpKGQsZSkpO3JldHVybiBlLmhvb2tzP2UuaG9va3MucG9zdHByb2Nlc3MoeCk6eH1jYXRjaChoKXtyZXR1cm4gcChoKX19''@;'; put 'put ''fWZ1bmN0aW9uIEVlKGEsaSx0KXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGU7aWYodS5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGEpcmV0dXJuIGU9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIr''@;'; put 'put ''eSh1Lm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iLGk/UHJvbWlzZS5yZXNvbHZlKGUpOnQ/dm9pZCB0KG51bGwsZSk6ZTtpZihpKXJldHVybiBQcm9taXNlLnJlamVjdCh1KTtpZighdCl0aHJvdyB1O3QodSl9fUk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KHRoaXMsVix7dmFsdWU6RWV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxxLHt2YWx1ZTpDZX0pLHRoaXMuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hs''@;'; put 'put ''aWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHho''@;'; put 'put ''dG1sOiExfSx0aGlzLm9wdGlvbnM9dGhpcy5zZXRPcHRpb25zLHRoaXMucGFyc2U9Ryh0aGlzLHEpW3FdKFMubGV4LFQucGFyc2UpLHRoaXMucGFyc2VJbmxpbmU9Ryh0aGlzLHEpW3FdKFMubGV4SW5saW5lLFQucGFyc2VJbmxpbmUpLHRoaXMuUGFyc2VyPVQsdGhpcy5wYXJzZXI9VC5wYXJz''@;'; put 'put ''ZSx0aGlzLlJlbmRlcmVyPVosdGhpcy5UZXh0UmVuZGVyZXI9Tix0aGlzLkxleGVyPVMsdGhpcy5sZXhlcj1TLmxleCx0aGlzLlRva2VuaXplcj1qLHRoaXMuU2x1Z2dlcj1YLHRoaXMuSG9va3M9Tyx0aGlzLnVzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9YS5wcm90b3R5cGU7cmV0''@;'; put 'put ''dXJuIGkud2Fsa1Rva2Vucz1mdW5jdGlvbih0LHUpe2Zvcih2YXIgZSxyPXRoaXMsbj1bXSxzPVUodCk7IShlPXMoKSkuZG9uZTspIWZ1bmN0aW9uKCl7dmFyIHA9ZS52YWx1ZTtzd2l0Y2gobj1uLmNvbmNhdCh1LmNhbGwocixwKSkscC50eXBlKXtjYXNlInRhYmxlIjpmb3IodmFyIGc9VShw''@;'; put 'put ''LmhlYWRlcik7IShEPWcoKSkuZG9uZTspe3ZhciBEPUQudmFsdWU7bj1uLmNvbmNhdChyLndhbGtUb2tlbnMoRC50b2tlbnMsdSkpfWZvcih2YXIgbyxGPVUocC5yb3dzKTshKG89RigpKS5kb25lOylmb3IodmFyIGQ9VShvLnZhbHVlKTshKHg9ZCgpKS5kb25lOyl7dmFyIHg9eC52YWx1ZTtu''@;'; put 'put ''PW4uY29uY2F0KHIud2Fsa1Rva2Vucyh4LnRva2Vucyx1KSl9YnJlYWs7Y2FzZSJsaXN0IjpuPW4uY29uY2F0KHIud2Fsa1Rva2VucyhwLml0ZW1zLHUpKTticmVhaztkZWZhdWx0OnIuZGVmYXVsdHMuZXh0ZW5zaW9ucyYmci5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zJiZyLmRl''@;'; put 'put ''ZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbcC50eXBlXT9yLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbcC50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKGgpe249bi5jb25jYXQoci53YWxrVG9rZW5zKHBbaF0sdSkpfSk6cC50b2tlbnMmJihuPW4uY29uY2F0KHIud2Fsa1Rv''@;'; put 'put ''a2VucyhwLnRva2Vucyx1KSkpfX0oKTtyZXR1cm4gbn0saS51c2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyx1PXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX0sZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7''@;'; put 'put ''bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIHAsZz12KHt9LHMpO2lmKGcuYXN5bmM9dC5kZWZhdWx0cy5hc3luY3x8Zy5hc3luY3x8ITEscy5leHRlbnNpb25zJiYocy5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24obCl7aWYoIWwubmFt''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7dmFyIGs7aWYobC5yZW5kZXJlciYmKHUucmVuZGVyZXJzW2wubmFtZV09KGs9dS5yZW5kZXJlcnNbbC5uYW1lXSk/ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxB''@;'; put 'put ''PTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1sLnJlbmRlcmVyLmFwcGx5KHRoaXMsdyk7cmV0dXJuITE9PT1CP2suYXBwbHkodGhpcyx3KTpCfTpsLnJlbmRlcmVyKSxsLnRva2VuaXplcil7aWYoIWwubGV2ZWx8fCJibG9jayIhPT1sLmxldmVsJiYiaW5saW5lIiE9PWwubGV2''@;'; put 'put ''ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7dVtsLmxldmVsXT91W2wubGV2ZWxdLnVuc2hpZnQobC50b2tlbml6ZXIpOnVbbC5sZXZlbF09W2wudG9rZW5pemVyXSxsLnN0YXJ0JiYoImJsb2NrIj09PWwubGV2ZWw/dS5z''@;'; put 'put ''dGFydEJsb2NrP3Uuc3RhcnRCbG9jay5wdXNoKGwuc3RhcnQpOnUuc3RhcnRCbG9jaz1bbC5zdGFydF06ImlubGluZSI9PT1sLmxldmVsJiYodS5zdGFydElubGluZT91LnN0YXJ0SW5saW5lLnB1c2gobC5zdGFydCk6dS5zdGFydElubGluZT1bbC5zdGFydF0pKX1sLmNoaWxkVG9rZW5zJiYo''@;'; put 'put ''dS5jaGlsZFRva2Vuc1tsLm5hbWVdPWwuY2hpbGRUb2tlbnMpfSksZy5leHRlbnNpb25zPXUpLHMucmVuZGVyZXIpe3ZhciBELG89dC5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IFoodC5kZWZhdWx0cyk7Zm9yKEQgaW4gcy5yZW5kZXJlcikhZnVuY3Rpb24obCl7dmFyIGs9b1tsXTtvW2xdPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0wO0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy5yZW5kZXJlcltsXS5hcHBseShvLHcpO3JldHVybiExPT09Qj9rLmFwcGx5KG8sdyk6Qn19KEQpO2cucmVuZGVyZXI9b31pZihzLnRv''@;'; put 'put ''a2VuaXplcil7dmFyIEYsZD10LmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGoodC5kZWZhdWx0cyk7Zm9yKEYgaW4gcy50b2tlbml6ZXIpIWZ1bmN0aW9uKGwpe3ZhciBrPWRbbF07ZFtsXT1mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9bmV3IEFycmF5KGIpLEE9MDtB''@;'; put 'put ''PGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPXMudG9rZW5pemVyW2xdLmFwcGx5KGQsdyk7cmV0dXJuITE9PT1CP2suYXBwbHkoZCx3KTpCfX0oRik7Zy50b2tlbml6ZXI9ZH1pZihzLmhvb2tzKXt2YXIgeCxoPXQuZGVmYXVsdHMuaG9va3N8fG5ldyBPO2Zvcih4IGluIHMuaG9va3Mp''@;'; put 'put ''IWZ1bmN0aW9uKGwpe3ZhciBrPWhbbF07aFtsXT1PLnBhc3NUaHJvdWdoSG9va3MuaGFzKGwpP2Z1bmN0aW9uKGIpe3JldHVybiB0LmRlZmF1bHRzLmFzeW5jP1Byb21pc2UucmVzb2x2ZShzLmhvb2tzW2xdLmNhbGwoaCxiKSkudGhlbihmdW5jdGlvbih3KXtyZXR1cm4gay5jYWxsKGgsdyl9''@;'; put 'put ''KTooYj1zLmhvb2tzW2xdLmNhbGwoaCxiKSxrLmNhbGwoaCxiKSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0wO0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy5ob29rc1tsXS5hcHBseShoLHcpO3JldHVybiExPT09Qj9r''@;'; put 'put ''LmFwcGx5KGgsdyk6Qn19KHgpO2cuaG9va3M9aH1zLndhbGtUb2tlbnMmJihwPXQuZGVmYXVsdHMud2Fsa1Rva2VucyxnLndhbGtUb2tlbnM9ZnVuY3Rpb24obCl7dmFyIGs9W107cmV0dXJuIGsucHVzaChzLndhbGtUb2tlbnMuY2FsbCh0aGlzLGwpKSxwP2suY29uY2F0KHAuY2FsbCh0aGlz''@;'; put 'put ''LGwpKTprfSksdC5kZWZhdWx0cz12KHt9LHQuZGVmYXVsdHMsZyl9KSx0aGlzfSxpLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9dih7fSx0aGlzLmRlZmF1bHRzLHQpLHRoaXN9LGF9KCk7dmFyIFI9bmV3IEkoQy5kZWZhdWx0cyk7ZnVuY3Rpb24gbShhLGks''@;'; put 'put ''dCl7cmV0dXJuIFIucGFyc2UoYSxpLHQpfW0ub3B0aW9ucz1tLnNldE9wdGlvbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIFIuc2V0T3B0aW9ucyhhKSxXKG0uZGVmYXVsdHM9Ui5kZWZhdWx0cyksbX0sbS5nZXREZWZhdWx0cz1RLG0uZGVmYXVsdHM9Qy5kZWZhdWx0cyxtLnVzZT1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBSLnVzZS5hcHBseShSLGFyZ3VtZW50cyksVyhtLmRlZmF1bHRzPVIuZGVmYXVsdHMpLG19LG0ud2Fsa1Rva2Vucz1mdW5jdGlvbihhLGkpe3JldHVybiBSLndhbGtUb2tlbnMoYSxpKX0sbS5wYXJzZUlubGluZT1SLnBhcnNlSW5saW5lLG0uUGFyc2VyPVQsbS5wYXJzZXI9VC5w''@;'; put 'put ''YXJzZSxtLlJlbmRlcmVyPVosbS5UZXh0UmVuZGVyZXI9TixtLkxleGVyPVMsbS5sZXhlcj1TLmxleCxtLlRva2VuaXplcj1qLG0uU2x1Z2dlcj1YLG0uSG9va3M9Tzt2YXIgbWU9KG0ucGFyc2U9bSkub3B0aW9ucyx4ZT1tLnNldE9wdGlvbnMsYmU9bS51c2Usd2U9bS53YWxrVG9rZW5zLEJl''@;'; put 'put ''PW0ucGFyc2VJbmxpbmUseWU9bSx2ZT1ULnBhcnNlLF9lPVMubGV4O0MuSG9va3M9TyxDLkxleGVyPVMsQy5NYXJrZWQ9SSxDLlBhcnNlcj1ULEMuUmVuZGVyZXI9WixDLlNsdWdnZXI9WCxDLlRleHRSZW5kZXJlcj1OLEMuVG9rZW5pemVyPWosQy5nZXREZWZhdWx0cz1RLEMubGV4ZXI9X2Us''@;'; put 'put ''Qy5tYXJrZWQ9bSxDLm9wdGlvbnM9bWUsQy5wYXJzZT15ZSxDLnBhcnNlSW5saW5lPUJlLEMucGFyc2VyPXZlLEMuc2V0T3B0aW9ucz14ZSxDLnVzZT1iZSxDLndhbGtUb2tlbnM9d2V9KTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.953845c9436bcdca-css; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''QGNoYXJzZXQgIlVURi04IjsvKiEKICogQ29weXJpZ2h0IChjKSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLgogKgogKiBIQU5EU09OVEFCTEUgaXMgYSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLiwgYSBQb2xpc2ggY29ycG9yYXRpb24gYmFzZWQgaW4K''@;'; put 'put ''ICogR2R5bmlhLCBQb2xhbmQsIGF0IEFsZWphIFp3eWNpZXN0d2EgOTYtOTgsIHJlZ2lzdGVyZWQgYnkgdGhlIERpc3RyaWN0IENvdXJ0IGluIEdkYW5zayB1bmRlciBudW1iZXIKICogNTM4NjUxLCBFVSB0YXggSUQgbnVtYmVyOiBQTDU4NjIyOTQwMDIsIHNoYXJlIGNhcGl0YWw6IFBMTiA2''@;'; put 'put ''Miw4MDAuMDAuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC0KICogbGljZW5zZWQgLSBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3Ig''@;'; put 'put ''Y29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IKICogcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LgogKgogKiBJZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkg''@;'; put 'put ''Zm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nCiAqIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwKICog''@;'; put 'put ''eW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImhhbmRzb250YWJsZS1ub24tY29tbWVyY2lhbC1saWNlbnNlLnBkZiIgZmlsZS4KICoKICogWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0''@;'; put 'put ''IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlCiAqIGxpY2Vuc2UgYWdyZWVtZW50LgogKgogKiBJbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUK''@;'; put 'put ''ICogY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuCiAqCiAqIFVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgSEFORFNPTkNPREUgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiCiAqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMg''@;'; put 'put ''T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTwogKiBMRUdBTCBUSEVPUlksIFNIQUxMIEhBTkRTT05DT0RFIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULAogKiBJTkRJUkVDVCwgU1BFQ0lBTCwg''@;'; put 'put ''SU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NCiAqIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuCiAqCiAqIFZlcnNpb246IDE2LjIuMAogKiBSZWxlYXNlIGRhdGU6IDI1LzExLzIwMjUgKGJ1aWx0''@;'; put 'put ''IGF0IDIwLzExLzIwMjUgMTM6Mjc6MDUpCiAqLy5oYW5kc29udGFibGUgLnRhYmxlIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRke2JvcmRlci10b3A6bm9uZX0uaGFuZHNvbnRhYmxlIHRye2JhY2tncm91bmQ6I2ZmZn0uaGFuZHNvbnRhYmxlIHRke2JhY2tncm91bmQtY29sb3I6aW5oZXJp''@;'; put 'put ''dH0uaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhh''@;'; put 'put ''bmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7''@;'; put 'put ''Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZHtib3JkZXI6MDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGgsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGR7Ym9yZGVy''@;'; put 'put ''LWxlZnQ6bm9uZX0uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50ZCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50aHts''@;'; put 'put ''aW5lLWhlaWdodDoyMXB4O3BhZGRpbmc6MH0uY29sLWxnLTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTAuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMi5oYW5kc29udGFibGUsLmNvbC1sZy0zLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLWxnLTQuaGFuZHNvbnRhYmxlLC5jb2wtbGctNS5oYW5kc29udGFibGUsLmNvbC1sZy02LmhhbmRzb250YWJsZSwuY29sLWxnLTcuaGFuZHNvbnRhYmxlLC5jb2wtbGctOC5oYW5kc29udGFibGUsLmNvbC1sZy05LmhhbmRzb250YWJsZSwuY29sLW1kLTEuaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtbWQtMTAuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTEuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMi5oYW5kc29udGFibGUsLmNvbC1tZC0zLmhhbmRzb250YWJsZSwuY29sLW1kLTQuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNS5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC1tZC02LmhhbmRzb250YWJsZSwuY29sLW1kLTcuaGFuZHNvbnRhYmxlLC5jb2wtbWQtOC5oYW5kc29udGFibGUsLmNvbC1tZC05LmhhbmRzb250YWJsZSAuY29sLXNtLTEuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTAuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTEuaGFuZHNvbnRhYmxlLC5jb2wt''@;'; put 'put ''c20tMTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMi5oYW5kc29udGFibGUsLmNvbC1zbS0zLmhhbmRzb250YWJsZSwuY29sLXNtLTQuaGFuZHNvbnRhYmxlLC5jb2wtc20tNS5oYW5kc29udGFibGUsLmNvbC1zbS02LmhhbmRzb250YWJsZSwuY29sLXNtLTcuaGFuZHNvbnRhYmxlLC5jb2wtc20t''@;'; put 'put ''OC5oYW5kc29udGFibGUsLmNvbC1zbS05LmhhbmRzb250YWJsZSAuY29sLXhzLTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTAuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMi5oYW5kc29udGFibGUsLmNvbC14cy0z''@;'; put 'put ''LmhhbmRzb250YWJsZSwuY29sLXhzLTQuaGFuZHNvbnRhYmxlLC5jb2wteHMtNS5oYW5kc29udGFibGUsLmNvbC14cy02LmhhbmRzb250YWJsZSwuY29sLXhzLTcuaGFuZHNvbnRhYmxlLC5jb2wteHMtOC5oYW5kc29udGFibGUsLmNvbC14cy05LmhhbmRzb250YWJsZXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDtwYWRkaW5nLXJpZ2h0OjB9LmhhbmRzb250YWJsZS5odC13cmFwcGVye2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmhhbmRzb250YWJsZSAudGFibGUtc3RyaXBlZD50Ym9keT50cjpudGgtb2YtdHlwZSgybil7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmhpZGV7ZGlz''@;'; put 'put ''cGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99''@;'; put 'put ''LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29udGFibGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5n''@;'; put 'put ''OmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3Jk''@;'; put 'put ''ZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDtib3JkZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUg''@;'; put 'put ''Y29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5kc29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29s''@;'; put 'put ''aWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0OjIxcHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOm5vbmU7b3V0bGluZS13aWR0aDowO3doaXRlLXNwYWNl''@;'; put 'put ''OnByZS13cmFwfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGgsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0ZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmln''@;'; put 'put ''aHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGQ6Zmlyc3Qtb2YtdHlwZSwuaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciB0ZDpmaXJzdC1vZi10eXBlLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIHRk''@;'; put 'put ''OmZpcnN0LW9mLXR5cGUsLmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRGaXJzdERhdGFzZXRDb2x1bW5Ob3RSZW5kZXJlZCkgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLFtkaXI9''@;'; put 'put ''cnRsXS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Rmlyc3REYXRhc2V0Q29sdW1uTm90UmVuZGVyZWQpIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcCB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxl''@;'; put 'put ''ZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVy''@;'; put 'put ''cyB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoLC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY30uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRl''@;'; put 'put ''cklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGQsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaHRf''@;'; put 'put ''bWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDox''@;'; put 'put ''cHggc29saWQgI2NjY31bZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLFtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhl''@;'; put 'put ''YWQgdHIgdGg6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJC''@;'; put 'put ''b3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaHRf''@;'; put 'put ''bWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyOmxhc3QtY2hpbGQg''@;'; put 'put ''dGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0ci5sYXN0Q2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RD''@;'; put 'put ''aGlsZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Y29sb3I6IzIyMjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGhlYWQgdGh7cGFkZGlu''@;'; put 'put ''ZzowfS5oYW5kc29udGFibGUgdGguYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjY30uaGFuZHNvbnRhYmxlIHRoZWFkIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOjJweCA0cHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxLjF9''@;'; put 'put ''LmhhbmRzb250YWJsZSAud3RCb3JkZXJ7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDEpLC5oYW5kc29udGFibGUgLnd0Qm9y''@;'; put 'put ''ZGVyOm50aC1jaGlsZCgzKXt6LWluZGV4OjJ9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgLnd0Qm9yZGVyOm50aC1jaGlsZCg0KXt6LWluZGV4OjF9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLnd0Qm9yZGVyLmFyZWF7ei1pbmRleDo4fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmZpbGx7ei1pbmRleDo2fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmNvcm5lcntmb250LXNpemU6MDtjdXJzb3I6Y3Jvc3NoYWlyfS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1k''@;'; put 'put ''YXNoZWQtdmVydGljYWx7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx2YXIoLS1odC1jdXN0b20tYm9yZGVyLWNvbG9yKSAwIDVweCx0cmFuc3BhcmVudCAwIDEwcHgpfS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1kYXNo''@;'; put 'put ''ZWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0taHQtY3VzdG9tLWJvcmRlci1jb2xvcikgMCA1cHgsdHJhbnNwYXJlbnQgMCAxMHB4KX0uaHRCb3JkZXJzIC53dEJvcmRlci5odC1ib3JkZXItc3R5bGUtZG90dGVk''@;'; put 'put ''LWhvcml6b250YWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29sb3IpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRlci1zaXplKSAvIDIpLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTpjYWxjKHZhcigtLWh0''@;'; put 'put ''LWN1c3RvbS1ib3JkZXItc2l6ZSkgKiAyKSB2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGll''@;'; put 'put ''bnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29sb3IpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRlci1zaXplKSAvIDIpLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTp2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRl''@;'; put 'put ''ci1zaXplKSAqIDIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC15fS5odF9jbG9uZV9tYXN0ZXJ7ei1pbmRleDoxMDB9Lmh0X2Nsb25lX2lubGluZV9zdGFydHt6LWluZGV4OjEyMH0uaHRfY2xvbmVfYm90dG9te3otaW5kZXg6MTMwfS5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nv''@;'; put 'put ''cm5lcnt6LWluZGV4OjE1MH0uaHRfY2xvbmVfdG9we3otaW5kZXg6MTYwfS5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4OjE4MH0uaGFuZHNvbnRhYmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSB0ci5oaWRkZW4sLmhhbmRzb250''@;'; put 'put ''YWJsZSB0ci5oaWRkZW4gdGQsLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGh7ZGlzcGxheTpub25lfS5odF9tYXN0ZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRfY2xvbmVfdG9wLC5odF9jbG9uZV9ib3R0b217b3ZlcmZsb3c6aGlkZGVufS5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJm''@;'; put 'put ''bG93OmF1dG99LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZT50aGVhZCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUuaHRDb3JlPnRib2R5PnRyPnRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9zdGFydCB0YWJsZS5odENvcmU+dGhlYWR7dmlzaWJp''@;'; put 'put ''bGl0eTpoaWRkZW59Lmh0X2Nsb25lX3RvcCAud3RIb2xkZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCAud3RIb2xkZXIsLmh0X2Nsb25lX2JvdHRvbSAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGV7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm1hbmlwdWxh''@;'; put 'put ''dGlvbjtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3fS5oYW5kc29u''@;'; put 'put ''dGFibGUgYXtjb2xvcjojMTA0YWNjfS5oYW5kc29udGFibGUuaHRBdXRvU2l6ZXt2aXNpYmlsaXR5OmhpZGRlbjtsZWZ0Oi05OTAwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTkwMDBweH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmJlYmEhaW1w''@;'; put 'put ''b3J0YW50fS5oYW5kc29udGFibGUgdGQuaHROb1dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGQuaW52aXNpYmxlU2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9ue291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIHRkLmludmlzaWJsZVNl''@;'; put 'put ''bGVjdGlvbjo6c2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb257YmFja2dyb3VuZDojZmZmMH0uaG90LWRpc3BsYXktbGljZW5zZS1pbmZve2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJv''@;'; put 'put ''Ym90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzNzM3Mzc7cGFkZGluZzo1cHggMCAzcHg7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYXtjb2xvcjoj''@;'; put 'put ''MTA0YWNjO2ZvbnQtc2l6ZToxMHB4fS5odEZvY3VzQ2F0Y2hlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO29wYWNpdHk6MDtib3JkZXI6MDttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MDtoZWlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5odFRleHRFbGxpcHNpc3t0ZXh0LW92ZXJmbG93''@;'; put 'put ''OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtjdXJzb3I6Y29sLXJlc2l6ZTt6LWluZGV4OjIxMDt3aWR0aDo1cHg7aGVpZ2h0OjI1cHh9LmhhbmRzb250''@;'; put 'put ''YWJsZSAubWFudWFsUm93UmVzaXplcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Y3Vyc29yOnJvdy1yZXNpemU7ei1pbmRleDoyMTA7aGVpZ2h0OjVweDt3aWR0aDo1MHB4fS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXI6aG92ZXIsLmhhbmRzb250YWJsZSAubWFudWFsQ29s''@;'; put 'put ''dW1uUmVzaXplci5hY3RpdmUsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplcjpob3ZlciwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGJ9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplckd1aWRle3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3JpZ2h0OnVuc2V0O3RvcDowO2JhY2tncm91bmQtY29sb3I6IzM0YTlkYjtkaXNwbGF5Om5vbmU7d2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IGRhc2hlZCAjNzc3O2JvcmRlci1sZWZ0Om5vbmU7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi1yaWdodDp1bnNldH1bZGlyPXJ0''@;'; put 'put ''bF0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGV7bGVmdDp1bnNldDtib3JkZXItbGVmdDoxcHggZGFzaGVkICM3Nzc7Ym9yZGVyLXJpZ2h0Om5vbmU7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVy''@;'; put 'put ''R3VpZGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO2JhY2tncm91bmQtY29sb3I6IzM0YTlkYjtkaXNwbGF5Om5vbmU7aGVpZ2h0OjA7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICM3Nzc7bWFyZ2luLXRvcDo1cHh9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXpl''@;'; put 'put ''ckd1aWRlLmFjdGl2ZSwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyR3VpZGUuYWN0aXZle2Rpc3BsYXk6YmxvY2s7ei1pbmRleDoyMDl9LmhhbmRzb250YWJsZSB0ZC5hcmVhLC5oYW5kc29udGFibGUgdGQuYXJlYS0xLC5oYW5kc29udGFibGUgdGQuYXJlYS0yLC5oYW5kc29udGFi''@;'; put 'put ''bGUgdGQuYXJlYS0zLC5oYW5kc29udGFibGUgdGQuYXJlYS00LC5oYW5kc29udGFibGUgdGQuYXJlYS01LC5oYW5kc29udGFibGUgdGQuYXJlYS02LC5oYW5kc29udGFibGUgdGQuYXJlYS03e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmUsLmhhbmRzb250''@;'; put 'put ''YWJsZSB0ZC5hcmVhLTE6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS0yOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTQ6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS01OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFy''@;'; put 'put ''ZWEtNjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTc6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDVlZmZ9LmhhbmRzb250YWJsZSB0ZC5hcmVhOmJlZm9yZXtvcGFjaXR5Oi4xfS5oYW5kc29udGFibGUgdGQuYXJlYS0xOmJl''@;'; put 'put ''Zm9yZXtvcGFjaXR5Oi4yfS5oYW5kc29udGFibGUgdGQuYXJlYS0yOmJlZm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmV7b3BhY2l0eTouMzV9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTQ6YmVmb3Jle29wYWNpdHk6LjQxfS5oYW5kc29udGFibGUgdGQuYXJl''@;'; put 'put ''YS01OmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNjpiZWZvcmV7b3BhY2l0eTouNTR9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTc6YmVmb3Jle29wYWNpdHk6LjU4fS5oYW5kc29udGFibGUgdGJvZHkgdGguY3VycmVudCwuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmN1''@;'; put 'put ''cnJlbnR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAycHggIzRiODlmZn0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQsLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2RjZGNkY30uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0''@;'; put 'put ''X19hY3RpdmVfaGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojOGViMGU3O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZUlucHV0e2JvcmRlcjpub25lO291dGxpbmUtd2lkdGg6MDttYXJnaW46MDtwYWRkaW5nOjFw''@;'; put 'put ''eCA1cHggMDtmb250LWZhbWlseTppbmhlcml0O2xpbmUtaGVpZ2h0OjIxcHg7Zm9udC1zaXplOmluaGVyaXQ7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDtyZXNpemU6bm9uZTtkaXNwbGF5OmJsb2NrO2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5oYW5kc29udGFibGVJbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9LmhhbmRzb250YWJsZUlucHV0SG9sZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uaHRTZWxlY3RFZGl0b3J7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7c2VsZWN0ey13ZWJraXQtYXBwZWFyYW5jZTptZW51bGlzdC1idXR0b24haW1wb3J0YW50O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjJweCBzb2xpZCAjNGI4OWZmO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnR9fS5odFNlbGVjdEVkaXRvciBzZWxlY3Q6Zm9jdXN7''@;'; put 'put ''b3V0bGluZTpub25lfS5odFNlbGVjdEVkaXRvciAuaHRBdXRvY29tcGxldGVBcnJvd3tkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHREaW1tZWR7Y29sb3I6Izc3N30uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRTdWJtZW51''@;'; put 'put ''IDphZnRlcntjb250ZW50OiJcMjViNiI7Y29sb3I6Izc3Nztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHg7Zm9udC1zaXplOjlweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnUgOmFmdGVye2NvbnRlbnQ6IiJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRTdWJtZW51IDpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiXDI1YzAiO2NvbG9yOiM3Nzc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1cHg7Zm9udC1zaXplOjlweH0uaGFuZHNvbnRhYmxlIC5odExlZnR7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFibGUgLmh0Q2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0UmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uaGFuZHNvbnRhYmxlIC5odEp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5fS5oYW5kc29udGFibGUgLmh0VG9we3ZlcnRpY2FsLWFsaWduOnRvcH0uaGFuZHNvbnRhYmxlIC5odE1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRCb3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tfS5oYW5kc29udGFibGUgLmh0UGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0uaGFuZHNvbnRhYmxlLmxpc3Rib3h7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO21hcmdpbjowfS5oYW5kc29udGFibGUubGlzdGJveC5hdXRvY29tcGxl''@;'; put 'put ''dGVFZGl0b3IsLmhhbmRzb250YWJsZS5saXN0Ym94LmRyb3Bkb3duRWRpdG9ye2JvcmRlci13aWR0aDowfS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfbWFzdGVyIHRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtiYWNrZ3JvdW5kOiNmZmZ9LmhhbmRzb250YWJsZS5saXN0Ym94LmF1''@;'; put 'put ''dG9jb21wbGV0ZUVkaXRvciAuaHRfbWFzdGVyIHRhYmxlLC5oYW5kc29udGFibGUubGlzdGJveC5kcm9wZG93bkVkaXRvciAuaHRfbWFzdGVyIHRhYmxle2JvcmRlcjoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpsYXN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpmaXJzdC1jaGlsZCB0ZCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxp''@;'; put 'put ''c3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRke3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5oYW5kc29udGFibGUubGlzdGJveCB0ZC5odERpbW1lZHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjppbmhlcml0O2ZvbnQtc3R5bGU6aW5oZXJpdH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlLmxpc3Rib3ggLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5oYW5kc29udGFibGUubGlzdGJveCB0ciB0ZC5jdXJyZW50LC5oYW5kc29udGFibGUubGlzdGJveCB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNlZWV9Lmh0X2VkaXRvcl9oaWRkZW57ei1pbmRleDotMX0uaHRfZWRp''@;'; put 'put ''dG9yX3Zpc2libGV7ei1pbmRleDoyMDB9LmhhbmRzb250YWJsZSB0ZC5odFNlYXJjaFJlc3VsdHtiYWNrZ3JvdW5kOiNmY2VkZDk7Y29sb3I6IzU4MzcwN30uaGFuZHNvbnRhYmxlLm1vYmlsZSwuaGFuZHNvbnRhYmxlLm1vYmlsZSAud3RIb2xkZXJ7LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5v''@;'; put 'put ''bmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmhhbmRzb250YWJsZS5tb2JpbGUgLmhhbmRzb250YWJsZUlucHV0OmZvY3Vz''@;'; put 'put ''e2JveC1zaGFkb3c6MCAwIDAgMnB4ICM1MjkyZjcgaW5zZXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlv''@;'; put 'put ''bkhhbmRsZSwuaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtsZWZ0Oi0xMDAwMHB4O3JpZ2h0OnVuc2V0O3RvcDotMTAwMDBweDt6LWluZGV4Ojk5OTl9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLFtkaXI9cnRsXS5oYW5kc29u''@;'; put 'put ''dGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLFtkaXI9cnRsXS5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtyaWdodDotMTAwMDBweDtsZWZ0OnVuc2V0fS5oYW5k''@;'; put 'put ''c29udGFibGUuaGlkZS10d2VlbnthbmltYXRpb246b3BhY2l0eS1oaWRlIC4zczthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzOy13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc30uaGFuZHNvbnRhYmxlLnNob3ctdHdlZW57YW5pbWF0aW9uOm9wYWNpdHktc2hvdyAuM3M7''@;'; put 'put ''YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkczstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9LmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tmbG9hdDpyaWdodDtmb250LXNpemU6MTBweDtjb2xvcjojYmJiO2N1cnNvcjpkZWZhdWx0O3dpZHRoOjE2cHg7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tmbG9hdDpsZWZ0fS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlkIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiM1NTV9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQgLmh0QXV0''@;'; put 'put ''b2NvbXBsZXRlQXJyb3c6aG92ZXJ7Y29sb3I6IzFhMWExYX0uaGFuZHNvbnRhYmxlIHRkIC5odEF1dG9jb21wbGV0ZUFycm93OmhvdmVye2NvbG9yOiM3Nzd9LmhhbmRzb250YWJsZSB0ZC5hcmVhIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiNkM2QzZDN9LmhhbmRzb250YWJsZSAuaHRD''@;'; put 'put ''aGVja2JveFJlbmRlcmVySW5wdXQubm9WYWx1ZXtvcGFjaXR5Oi41fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlckxhYmVse2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbC5mdWxsV2lkdGh7d2lkdGg6MTAwJX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2xlZnQ6dW5zZXQ7cmlnaHQ6NXB4O2JvcmRl''@;'; put 'put ''cjoxcHggc29saWQgI0E2QTZBNjtsaW5lLWhlaWdodDo4cHg7Y29sb3I6IzIyMjtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEwcHg7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtjdXJzb3I6cG9pbnRlcjtib3gtc2hhZG93OjAgMCAwIDNweCAjZWVlO2JhY2tncm91bmQ6I2VlZTt0ZXh0''@;'; put 'put ''LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcntyaWdodDp1bnNldDtsZWZ0OjVweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoZWFkIHRoOmhhcyguY29sbGFwc2libGVJbmRpY2F0b3IpIGRpdi5odFJpZ2h0IHNwYW4uY29sSGVhZGVy''@;'; put 'put ''e21hcmdpbi1yaWdodDoyMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGhlYWQgdGg6aGFzKC5jb2xsYXBzaWJsZUluZGljYXRvcikgZGl2Lmh0TGVmdCBzcGFuLmNvbEhlYWRlcnttYXJnaW4tbGVmdDoyMHB4fS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmd7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmV9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1hc2NlbmRpbmddLC5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ117bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLWxlZnQ6LTEwcHh9LmhhbmRzb250''@;'; put 'put ''YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWFzY2VuZGluZ10sLmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWRlc2NlbmRpbmdde21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0Oi0xMHB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0g''@;'; put 'put ''ZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ106b25seS1jaGlsZHttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tbGVmdDotMTVweH0uaGFuZHNvbnRhYmxl''@;'; put 'put ''W2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXTpvbmx5LWNoaWxke21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0Oi0xNXB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpiZWZvcmV7dG9wOjUwJTttYXJnaW4tdG9wOi02cHg7cGFkZGluZy1s''@;'; put 'put ''ZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTlweDtsZWZ0OnVuc2V0O2NvbnRlbnQ6IiI7aGVpZ2h0OjEwcHg7d2lkdGg6NXB4O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0''@;'; put 'put ''aW9uLXg6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXtwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MDtsZWZ0Oi05cHg7cmlnaHQ6dW5zZXQ7YmFja2dyb3VuZC1wb3NpdGlvbi14OmxlZnR9LmhhbmRzb250YWJs''@;'; put 'put ''ZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmFzY2VuZGluZzpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFvQ0FNQUFBREo3eXJwQUFBQUtsQk1WRVVBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtFODZJQUFBQURYUlNUbE1BQkJFbVJHcHJsSlc3MmU3N3RUa1RLd0FBQUZOSlJFRlVlQUh0emprU2dDQVVCTkhQZ3NveTk3K3VsR1hScUpFNUwreGt4b1l0MlVkc0xiNWJxRklOeithTHV1TG41ckl1MlJrTzNmWnBXRU5pbU5n''@;'; put 'put ''aXc2aUJZUlRQTUxKakdGeFFaMWh4eGIveEJJMXFDOGszOUNkS0FBQUFBRWxGVGtTdVFtQ0MpfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5kZXNjZW5kaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3''@;'; put 'put ''MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRkpKUkVGVWVBSHR6amtTZ0NB''@;'; put 'put ''UVJORm1RWVVaN245ZEtVdnJ1MFRtdlBBbjNicjBRZmdkWjV4eDZ4K3JRbjIzR3FUWW5xMUZEY251elpJTzJXbWVkVnFJUlZ4Z0dLRXlqTmdZUmpLR2taMWhGSVozSTcwTHlNMFZ0VThBQUFBQVNVVk9SSzVDWUlJPSl9Lmh0R2hvc3RUYWJsZSAuaHRDb3JlIHNwYW4uY29sSGVhZGVyLmNvbHVt''@;'; put 'put ''blNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCk6YmVmb3Jle2NvbnRlbnQ6IioiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6MjBweH0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0aGVhZCB0aHtib3JkZXItYm90dG9t''@;'; put 'put ''LXdpZHRoOjB9LmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGgsLmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGR7Ym9yZGVyLXRvcC13aWR0aDowfS5oYW5kc29udGFibGUgLmh0Q29tbWVudENlbGx7cG9zaXRpb246cmVsYXRpdmV9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7bGVmdDp1bnNldDtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDo2cHggc29saWQgYmxh''@;'; put 'put ''Y2t9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntsZWZ0OjA7cmlnaHQ6dW5zZXQ7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDpub25lfS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRze2Rpc3BsYXk6bm9uZTt6''@;'; put 'put ''LWluZGV4OjEwNTk7cG9zaXRpb246YWJzb2x1dGV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhe2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAwM2QgMCAxcHggMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtib3JkZXItbGVm''@;'; put 'put ''dDozcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7d2lkdGg6MjE1cHg7aGVpZ2h0OjkwcHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHg7b3V0bGluZTowIWltcG9ydGFudDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1bZGlyPXJ0bF0uaHRD''@;'; put 'put ''b21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym9yZGVyLXJpZ2h0OjNweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAw''@;'; put 'put ''M2QgMCAxcHggMnB4LGluc2V0IDAgMCAwIDFweCAjNTI5MmY3O2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjNTI5MmY3O2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYTpmb2N1c3tib3JkZXItcmlnaHQ6M3B4IHNvbGlkICM1''@;'; put 'put ''MjkyZjc7Ym9yZGVyLWxlZnQ6bm9uZX0vKiEKICogSGFuZHNvbnRhYmxlIENvbnRleHRNZW51CiAqLy5odENvbnRleHRNZW51Om5vdCguaHRHaG9zdFRhYmxlKXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDYwfS5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3As''@;'; put 'put ''Lmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9j''@;'; put 'put ''b3JuZXJ7ZGlzcGxheTpub25lfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0LXdpZHRoOjJweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZXtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweH0uaHRDb250ZXh0TWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odENv''@;'; put 'put ''bnRleHRNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5v''@;'; put 'put ''d3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH1bZGlyPXJ0bF0u''@;'; put 'put ''aHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0Q29u''@;'; put 'put ''dGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuY3VycmVudHtiYWNrZ3JvdW5kOiNmM2YzZjN9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjA7Y3Vyc29yOmRlZmF1bHR9Lmh0''@;'; put 'put ''Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29u''@;'; put 'put ''dGV4dE1lbnUgdGFibGUgdGJvZHkgdHIuaHRIaWRkZW57ZGlzcGxheTpub25lfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjZweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0''@;'; put 'put ''ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDo2cHh9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3JpZ2h0OjB9W2Rpcj1ydGxd''@;'; put 'put ''Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7cmlnaHQ6NHB4O2xlZnQ6MH0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59dGV4dGFyZWEuSGFuZHNvbnRhYmxlQ29weVBhc3Rle3Bvc2l0aW9uOmZpeGVk''@;'; put 'put ''IWltcG9ydGFudDt0b3A6MCFpbXBvcnRhbnQ7cmlnaHQ6MTAwJSFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuO29wYWNpdHk6MDtvdXRsaW5lOjAgbm9uZSFpbXBvcnRhbnR9LyohCiAqIEhhbmRzb250YWJsZSBEcm9wZG93bk1lbnUKICovLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNr''@;'; put 'put ''Z3JvdW5kOiNlZWU7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO2NvbG9yOiNiYmI7Zm9udC1zaXplOjlweDtsaW5lLWhlaWdodDo5cHg7cGFkZGluZzoycHg7bWFyZ2luOjNweCAxcHggMCA1cHg7ZmxvYXQ6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuY2hh''@;'; put 'put ''bmdlVHlwZXtmbG9hdDpsZWZ0fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gLmNoYW5nZVR5cGV7bWFyZ2luOjNweCA1cHggMCAxcHh9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpiZWZvcmV7Y29udGVudDoiXDI1YmMgICJ9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpob3Zlcntib3JkZXI6''@;'; put 'put ''MXB4IHNvbGlkICM3Nzc7Y29sb3I6Izc3NztjdXJzb3I6cG9pbnRlcn0uaHREcm9wZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3AsLmh0RHJvcGRvd25NZW51''@;'; put 'put ''IC5odF9jbG9uZV9ib3R0b20sLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3Bs''@;'; put 'put ''YXk6bm9uZX0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH1b''@;'; put 'put ''ZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odERyb3Bkb3duTWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odERyb3Bkb3duTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0''@;'; put 'put ''eTpoaWRkZW59Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItd2lkdGg6MDtwYWRkaW5nOjRweCA2cHggMDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9''@;'; put 'put ''Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkg''@;'; put 'put ''dHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6IzMyMzIzMn0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGQuY3VycmVudHtiYWNrZ3JvdW5kOiNlOWU5ZTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U2VwYXJhdG9ye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTY7aGVpZ2h0OjA7cGFkZGluZzowO2N1cnNvcjpkZWZhdWx0fS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9k''@;'; put 'put ''eSB0ciB0ZC5odERpc2FibGVke2NvbG9yOiM5OTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0RHJvcGRvd25NZW51Om5vdCguaHRHaG9zdFRhYmxlKSB0YWJsZSB0''@;'; put 'put ''Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5Om5vbmV9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjEwcHh9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1X''@;'; put 'put ''cmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21hcmdpbi1sZWZ0OjEwcHh9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIGRpdiBzcGFuLnNlbGVjdGVke21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjRweDtyaWdodDowfVtkaXI9cnRsXS5odERyb3Bkb3du''@;'; put 'put ''TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odERyb3Bkb3duTWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LyohCiAqIEhhbmRzb250YWJsZSBGaWx0ZXJzCiAqLy5odEZpbHRlcnNDb25kaXRpb25zTWVu''@;'; put 'put ''dTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA3MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX3RvcCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRGaWx0ZXJzQ29uZGl0aW9u''@;'; put 'put ''c01lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5o''@;'; put 'put ''dEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZS5odENvcmV7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1yaWdodC13aWR0aDoycHh9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGR7YmFja2dyb3VuZDojZmZmO2JvcmRlci13aWR0aDowO3BhZGRpbmc6NHB4IDZweCAwO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfVtkaXI9cnRsXS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0''@;'; put 'put ''YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMzIzMjMyfS5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tncm91bmQ6I2U5ZTllOX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjB9Lmh0''@;'; put 'put ''RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6Izk5OX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0u''@;'; put 'put ''aHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDot''@;'; put 'put ''MnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRNZW51RmlsdGVyaW5ne2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjO2hlaWdodDoxMzVw''@;'; put 'put ''eDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjdXJzb3I6YXV0b30uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51TGFiZWx7Zm9udC1zaXplOi43NWVtfS5oYW5kc29u''@;'; put 'put ''dGFibGUgLmh0RmlsdGVyc01lbnVBY3Rpb25CYXJ7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTozcHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbi5ib3JkZXJ7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1wb3J0''@;'; put 'put ''YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmh0VUlJbnB1dHtwYWRkaW5nOjAgMCA1cHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVle2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEZpbHRl''@;'; put 'put ''cnNNZW51VmFsdWUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaHtwYWRkaW5nOjB9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuaHRVSUlucHV0IGlucHV0LC5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlu''@;'; put 'put ''cHV0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO3BhZGRpbmc6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5odFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6YXV0b30uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNB''@;'; put 'put ''Y3RpdmUgLmNoYW5nZVR5cGV7Ym9yZGVyOjFweCBzb2xpZCAjNTA5MjcyO2NvbG9yOiMxODgwNGU7YmFja2dyb3VuZC1jb2xvcjojZDJlMGQ5fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odFVJU2VsZWN0QWxse21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsIGEsLmhhbmRzb250''@;'; put 'put ''YWJsZSAuaHRVSVNlbGVjdEFsbCBhe2ZvbnQtc2l6ZTouNzVlbX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDVweCAwIDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDoxZW19W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7bWFyZ2luLWxlZnQ6NXB4O21h''@;'; put 'put ''cmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dHtwYWRkaW5nOjNweCAwIDdweDtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQgaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMWQx''@;'; put 'put ''fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dEljb257cG9zaXRpb246YWJzb2x1dGV9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXR7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiMwMDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07Zm9udC13ZWlnaHQ6NzAwO2hlaWdodDoxOXB4O21pbi13aWR0aDo2NHB4fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uIGlucHV0''@;'; put 'put ''OmhvdmVye2JvcmRlci1jb2xvcjojYjliOWI5fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9Le21hcmdpbi1yaWdodDowO21hcmdp''@;'; put 'put ''bi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjlkNTg7Ym9yZGVyLWNvbG9yOiMxODgwNGU7Y29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0OmZvY3VzLXZp''@;'; put 'put ''c2libGV7YmFja2dyb3VuZC1jb2xvcjojOTJkZDhkO2JvcmRlci1jb2xvcjojN2NiODc4O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dDpob3Zlcntib3JkZXItY29sb3I6IzFhNmY0Nn0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0e2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO21hcmdpbi1ib3R0b206N3B4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9ue2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDE7Zm9udC1mYW1pbHk6aW5oZXJp''@;'; put 'put ''dDtmb250LXNpemU6Ljc1ZW07Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6M3B4IDIwcHggM3B4IDEwcHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9uOmhvdmVye2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2U4ZThlODtib3JkZXI6MXB4IHNvbGlkICNiOWI5Yjl9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdERyb3Bkb3duOmFmdGVye2NvbnRlbnQ6IlwyNWIyIjtmb250LXNpemU6N3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjB9LmhhbmRzb250YWJsZSAuaHRV''@;'; put 'put ''SVNlbGVjdERyb3Bkb3duOmJlZm9yZXtjb250ZW50OiJcMjViYyI7Zm9udC1zaXplOjdweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDo4cHh9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5oYW5kc29udGFibGUgLmh0Q29yZXtib3JkZXI6bm9uZX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmhhbmRzb250YWJsZSAuaHRDb3JlIHRkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAj''@;'; put 'put ''ZDJkMWQxO3BhZGRpbmc6M3B4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpb3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo1cHg7aGVpZ2h0OjEwMCV9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVJhZGlve21hcmdpbi1yaWdodDowO21hcmdpbi1s''@;'; put 'put ''ZWZ0OjVweH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW86bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6LjVleH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJUmFk''@;'; put 'put ''aW8+aW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6LjVleH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8gbGFiZWx7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVPcGVyYXRvcnN7cGFkZGluZy1ib3R0b206NXB4fS5o''@;'; put 'put ''YW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVyLC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle2NvbG9yOiNiYmI7cG9zaXRpb246YWJzb2x1dGU7''@;'; put 'put ''dG9wOjUwJTtmb250LXNpemU6NXB0O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW57cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZVtkaXI9bHRyXSB0aC5hZnRlckhpZGRlbkNvbHVtbiBkaXYuaHRMZWZ0e21hcmdpbi1s''@;'; put 'put ''ZWZ0OjEwcHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSB0aC5iZWZvcmVIaWRkZW5Db2x1bW4gZGl2Lmh0UmlnaHQsLmhhbmRzb250YWJsZVtkaXI9cnRsXSB0aC5hZnRlckhpZGRlbkNvbHVtbiBkaXYuaHRSaWdodHttYXJnaW4tcmlnaHQ6MTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIHRo''@;'; put 'put ''LmJlZm9yZUhpZGRlbkNvbHVtbiBkaXYuaHRMZWZ0e21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXJ7cmlnaHQ6MXB4O2NvbnRlbnQ6IlwyNWMwIn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRl''@;'; put 'put ''cntyaWdodDppbml0aWFsO2xlZnQ6MXB4O2NvbnRlbnQ6IlwyNWI2In0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtsZWZ0OjFweDtjb250ZW50OiJcMjViNiJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7cmlnaHQ6''@;'; put 'put ''MXB4O2xlZnQ6aW5pdGlhbDtjb250ZW50OiJcMjVjMCJ9LyohCiAqIEhhbmRzb250YWJsZSBIaWRkZW5Sb3dzCiAqLy5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93OmFmdGVye2NvbG9yOiNiYmI7Zm9udC1zaXpl''@;'; put 'put ''OjZwdDtsaW5lLWhlaWdodDo2cHQ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoycHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3csLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvd3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdzpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiXDI1YjIiO2JvdHRvbToycHh9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzphZnRlcntjb250ZW50OiJcMjViYyI7dG9wOjJweH0uaGFuZHNvbnRhYmxlLmh0X19zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguYmVmb3JlSGlkZGVuUm93Lmh0X19oaWdobGln''@;'; put 'put ''aHQ6YmVmb3JlLC5oYW5kc29udGFibGUuaHRfX3NlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5hZnRlckhpZGRlblJvdy5odF9faGlnaGxpZ2h0OmFmdGVye2NvbG9yOiNlZWV9LmhhbmRzb250YWJsZSB0ZC5hZnRlckhpZGRlblJvdy5maXJzdFZpc2libGVSb3csLmhhbmRzb250YWJsZSB0aC5h''@;'; put 'put ''ZnRlckhpZGRlblJvdy5maXJzdFZpc2libGVSb3d7Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ30uaHRSb3dIZWFkZXJzIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgdGg6bnRoLWNoaWxkKDIpLC5odFJvd0hlYWRl''@;'; put 'put ''cnMgLmh0X21hc3Rlci5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVmdDowIG5vbmV9LmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5hZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMgdGhlYWQgdGgu''@;'; put 'put ''aHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIHRoZWFkIHRoLmh0X19oaWdo''@;'; put 'put ''bGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIC5tYW51YWxDb2x1bW5SZXNpemVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVs''@;'; put 'put ''aW5lLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmV7YmFja2dyb3VuZDojNzU3NTc1O3dpZHRo''@;'; put 'put ''OjJweDt0b3A6MDttYXJnaW4taW5saW5lLXN0YXJ0Oi0xcHg7bWFyZ2luLWlubGluZS1lbmQ6MDt6LWluZGV4OjIwNX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0e2JhY2tncm91bmQ6IzM0MzQzNDtiYWNrZ3JvdW5kOiMzNDM0MzQ0MDtkaXNwbGF5Om5v''@;'; put 'put ''bmU7ei1pbmRleDoyMDU7cG9pbnRlci1ldmVudHM6bm9uZX0uaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tY29sdW1ucy5zaG93LXVpIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUub24tbW92aW5nLS1jb2x1bW5zIC5odF9fbWFudWFsQ29sdW1uTW92ZS0t''@;'; put 'put ''YmFja2xpZ2h0e2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5hZnRlci1zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmlu''@;'; put 'put ''Zy0tcm93cyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIHRib2R5IHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIC5tYW51YWxS''@;'; put 'put ''b3dSZXNpemVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7aGVpZ2h0OjJweDtsZWZ0OjA7bWFyZ2luLXRvcDotMXB4O3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tn''@;'; put 'put ''cm91bmQ6IzM0MzQzNDQwO2Rpc3BsYXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5kc29udGFibGUub24tbW92aW5nLS1yb3dzLnNob3ctdWkgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3MgLmh0X19t''@;'; put 'put ''YW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XTpub3QoW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbF0pOmJlZm9yZXtvcGFjaXR5OjB9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLW11bHRpcGxlXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9''@;'; put 'put ''aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMF06YmVmb3Jle29wYWNpdHk6LjF9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTFdOmJlZm9y''@;'; put 'put ''ZXtvcGFjaXR5Oi4yfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0yXTpiZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFz''@;'; put 'put ''cyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTNdOmJlZm9yZXtvcGFjaXR5Oi4zNX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1l''@;'; put 'put ''cmdlZENlbGwtNF06YmVmb3Jle29wYWNpdHk6LjQxfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC01XTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0Ym9k''@;'; put 'put ''eSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTZdOmJlZm9yZXtvcGFjaXR5Oi41NH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFz''@;'; put 'put ''cyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtN106YmVmb3Jle29wYWNpdHk6LjU4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9c29ydC1de21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0Oi0xNXB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2''@;'; put 'put ''Lmh0TGVmdCBzcGFuW2NsYXNzKj1zb3J0LV17bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1zb3J0LV06b25seS1jaGlsZHttYXJnaW4tcmlnaHQ6MjBweDttYXJnaW4tbGVmdDotMjBweH0u''@;'; put 'put ''aGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9c29ydC1dOm9ubHktY2hpbGR7bWFyZ2luLWxlZnQ6MjBweDttYXJnaW4tcmlnaHQ6LTIwcHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RvcDo1MCU7bWFyZ2luLXRv''@;'; put 'put ''cDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xNXB4O2xlZnQ6dW5zZXQ7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OnVuc2V0O2ZvbnQtc2l6ZTo4cHg7aGVpZ2h0OjhweDtsaW5lLWhlaWdodDoxLjF9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5j''@;'; put 'put ''b2x1bW5Tb3J0aW5nOmFmdGVye2xlZnQ6LTE1cHg7cmlnaHQ6dW5zZXQ7cGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OnVuc2V0fS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzc149c29ydC1dOmFmdGVyLC5oYW5kc29udGFibGUgc3Bhbi5jb2xI''@;'; put 'put ''ZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzcyo9IiBzb3J0LSJdOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTE6YWZ0ZXJ7Y29udGVudDoiMSJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5n''@;'; put 'put ''LnNvcnQtMjphZnRlcntjb250ZW50OiIyIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0zOmFmdGVye2NvbnRlbnQ6IjMifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTQ6YWZ0ZXJ7Y29udGVudDoiNCJ9Lmhh''@;'; put 'put ''bmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNTphZnRlcntjb250ZW50OiI1In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC02OmFmdGVye2NvbnRlbnQ6IjYifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29s''@;'; put 'put ''dW1uU29ydGluZy5zb3J0LTc6YWZ0ZXJ7Y29udGVudDoiNyJ9Lmh0R2hvc3RUYWJsZSB0aCBkaXYgYnV0dG9uLmNoYW5nZVR5cGUrc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKXtwYWRkaW5nLXJpZ2h0OjVweH0uaGFuZHNvbnRhYmxlIHRoZWFk''@;'; put 'put ''IHRoLmhpZGRlbkhlYWRlcjpub3QoOmZpcnN0LW9mLXR5cGUpe2Rpc3BsYXk6bm9uZX10aGVhZCB0aC5oaWRkZW5IZWFkZXJUZXh0IC5jb2xIZWFkZXJ7b3BhY2l0eTowfS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVsc3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjdweH1b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHN7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjdweH0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTFweDty''@;'; put 'put ''aWdodDp1bnNldH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze3JpZ2h0OjExcHg7bGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHMsLmhhbmRzb250YWJsZS5pbm5lckJvcmRl''@;'; put 'put ''cklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTBweDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscyxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''LmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0xldmVsc3tsZWZ0OjEwcHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIHRoIHNwYW4u''@;'; put 'put ''aHRfbmVzdGluZ0xldmVsX2VtcHR5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjFweDtmbG9hdDpsZWZ0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZmxvYXQ6cmlnaHR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0''@;'; put 'put ''X25lc3RpbmdMZXZlbDphZnRlcntjb250ZW50OiJcMjUxMCI7Zm9udC1zaXplOjlweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206M3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7cmlnaHQ6LTJweDtsZWZ0OnVuc2V0O2N1cnNvcjpwb2ludGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257bGVmdDotMnB4O3JpZ2h0OnVuc2V0fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGlu''@;'; put 'put ''Z0V4cGFuZDphZnRlcntjb250ZW50OiIrIn0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTphZnRlcntjb250ZW50OiItIn0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24sLmhh''@;'; put 'put ''bmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257cmlnaHQ6MDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbixbZGly''@;'; put 'put ''PXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0OjA7cmlnaHQ6dW5zZXR9Lmh0LXJvb3Qtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO2hlaWdodDoxMDAlfS5odC1ncmlke2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDowfS5odC1kaWFsb2d7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2Rpc3BsYXk6bm9uZTtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2Jv''@;'; put 'put ''dG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoxMDYwO29wYWNpdHk6MDtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaXppbmc6Ym9yZGVy''@;'; put 'put ''LWJveCFpbXBvcnRhbnR9Lmh0LWRpYWxvZ1tkaXI9cnRsXXtsZWZ0OmF1dG87cmlnaHQ6MH0uaHQtZGlhbG9nOmZvY3Vze2JvcmRlcjoxcHggc29saWQgIzRiODlmZjtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZzpoYXMoLmh0Rm9jdXNDYXRjaGVyOmZvY3VzKXtib3JkZXI6MXB4IHNvbGlkICM0''@;'; put 'put ''Yjg5ZmY7b3V0bGluZTpub25lfS5odC1kaWFsb2cgKntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1kaWFsb2ctLWJhY2tncm91bmQtc29saWR7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5odC1kaWFsb2ctLWJhY2tncm91bmQtc2VtaS10cmFuc3BhcmVudHtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNmZmZmZmY4MH0uaHQtZGlhbG9nLS1hbmltYXRpb257dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgZWFzZS1pbi1vdXR9Lmh0LWRpYWxvZy0tc2hvd3tvcGFjaXR5OjF9Lmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MTAwJTtwYWRkaW5nOjE2cHh9Lmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVyOmZvY3Vze2JvcmRlcjoxcHggc29saWQgIzRiODlmZjtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZ19fY29udGVudHtwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTtwYWRkaW5nOjhweDtkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXgtd2lkdGg6NDgwcHg7Y29sb3I6IzIyMn0uaHQtZGlhbG9nX19jb250ZW50LS1iYWNrZ3JvdW5ke2JveC1zaGFkb3c6MCA4cHggMTZweCAjMDAwMDAwMTQ7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y5fS5odC1kaWFsb2ct''@;'; put 'put ''LWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVye3RleHQtYWxpZ246Y2VudGVyfS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVyLWlubmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjhweDttYXgtd2lkdGg6NDgwcHh9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50LXdyYXBwZXItaW5uZXItLWJhY2tncm91bmR7Ym94LXNoYWRvdzowIDhweCAxNnB4ICMwMDAwMDAxNDtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3''@;'; put 'put ''Zjl9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50Omhhcygu''@;'; put 'put ''aHQtZGlhbG9nX19idXR0b25zKXtnYXA6NHB4fS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fdGl0bGV7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHh9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19kZXNjcmlwdGlv''@;'; put 'put ''bnttYXJnaW46MDtjb2xvcjojMjIyO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxNnB4fS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fYnV0dG9uc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9''@;'; put 'put ''Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnaW5hdGlvbntjb2xvcjojMjIyO2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBV''@;'; put 'put ''SSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3cteDphdXRvfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2luYXRpb25fX2lubmVye2Rp''@;'; put 'put ''c3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7Z2FwOjhweDtwYWRkaW5nLWlubGluZTo4cHg7cGFkZGluZy1ibG9jazo0cHg7bWluLXdpZHRoOjIzMHB4fS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2luYXRp''@;'; put 'put ''b24tLWJvcmRlcmVke2JvcmRlci10b3AtY29sb3I6I2NjY30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLXNpemUtc2VjdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb24gc3Bhbnt3aGl0ZS1z''@;'; put 'put ''cGFjZTpub3dyYXB9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjY30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLXNpemUtc2VjdGlvbl9f''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIgc2VsZWN0e3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweDtwYWRkaW5nLWlubGluZS1lbmQ6OHB4O3BhZGRpbmctdG9wOjRweDtwYWRkaW5nLWJvdHRvbTo0cHg7Ym9yZGVyLXJhZGl1czoycHg7Y29sb3I6IzIyMjtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Ym9yZGVy''@;'; put 'put ''Om5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Zm9udC1zaXplOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXJ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIHNlbGVjdDpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5odC1y''@;'; put 'put ''b290LXdyYXBwZXIgLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6aG92ZXI6bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6''@;'; put 'put ''Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO291dGxpbmU6MXB4IHNvbGlkICM0Yjg5ZmZ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1jb3VudGVyLXNlY3Rpb257bWFyZ2luLWlubGluZS1lbmQ6YXV0b30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlv''@;'; put 'put ''bntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gYnV0dG9ue2ZvbnQtc2l6ZTppbmhlcml0O2NvbG9yOiMyMjI7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtw''@;'; put 'put ''YWRkaW5nOjRweDtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcn0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiBidXR0b246YmVmb3Jle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIGJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2Fi''@;'; put 'put ''bGVkKXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gYnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IHNvbGlkICM0Yjg5ZmZ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBh''@;'; put 'put ''Z2UtZmlyc3Q6YmVmb3Jle2NvbnRlbnQ6IlwyMWE0In1bZGlyPXJ0bF0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1maXJzdDpiZWZvcmV7Y29udGVudDoiXDIxYTYifS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0''@;'; put 'put ''aW9uIC5odC1wYWdlLXByZXY6YmVmb3Jle2NvbnRlbnQ6IlwyMWEyIn1bZGlyPXJ0bF0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1wcmV2OmJlZm9yZXtjb250ZW50OiJcMjFhMyJ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0''@;'; put 'put ''aW9uLXNlY3Rpb24gLmh0LXBhZ2UtbmV4dDpiZWZvcmV7Y29udGVudDoiXDIxYTMifVtkaXI9cnRsXS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLW5leHQ6YmVmb3Jle2NvbnRlbnQ6IlwyMWEyIn0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdl''@;'; put 'put ''LW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1sYXN0OmJlZm9yZXtjb250ZW50OiJcMjFhNiJ9W2Rpcj1ydGxdLmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBhZ2UtbGFzdDpiZWZvcmV7Y29udGVudDoiXDIxYTQifS5odC1yb290LXdyYXBwZXIg''@;'; put 'put ''Lmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIHNwYW57d2hpdGUtc3BhY2U6bm93cmFwfS5odC1sb2FkaW5nX19pY29uLXN2Z3tkaXNwbGF5OmJsb2NrO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Y29sb3I6IzUyOTJmNzthbmltYXRpb246aHQtbG9hZGluZy1zcGluIDFzIGxpbmVhciBpbmZp''@;'; put 'put ''bml0ZTt0cmFuc2Zvcm0tb3JpZ2luOjUwJSA1MCV9Lmh0LWxvYWRpbmdfX2NvbnRlbnR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fS5odC1sb2FkaW5nX190aXRsZXttYXJnaW46MDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MThw''@;'; put 'put ''eH0uaHQtbG9hZGluZ19fZGVzY3JpcHRpb257bWFyZ2luOjA7Y29sb3I6IzIyMjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxNnB4O2ZvbnQtd2VpZ2h0OjQwMH1Aa2V5ZnJhbWVzIGh0LWxvYWRpbmctc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5odC1lbXB0eS1kYXRh''@;'; put 'put ''LXN0YXRle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2xlZnQ6MDt6LWluZGV4Ojk5OTtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lmh0LWVtcHR5LWRhdGEt''@;'; put 'put ''c3RhdGUgKntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7bWlu''@;'; put 'put ''LWhlaWdodDoxMDAlO3BhZGRpbmc6MTZweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWF4LXdpZHRoOjQ4MHB4O3Bh''@;'; put 'put ''ZGRpbmc6MTZweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVyOmZvY3Vze291dGxpbmU6bm9uZTtib3gtc2hhZG93OjAgMCAwIDFweCAjNGI4OWZmfS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1''@;'; put 'put ''bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjRweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fdGl0bGV7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2Rlc2Ny''@;'; put 'put ''aXB0aW9ue21hcmdpbjowO2NvbG9yOiMyMjI7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTZweDtmb250LXdlaWdodDo0MDB9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2J1dHRvbnN7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgt''@;'; put 'put ''d3JhcDp3cmFwO2dhcDo4cHh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2J1dHRvbnMtLWhhcy1idXR0b25ze21hcmdpbi10b3A6OHB4fS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLXRvcC1ib3JkZXJ7Ym9yZGVyLXRvcC13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxl''@;'; put 'put ''LWlubGluZS1ib3JkZXJ7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLWJvdHRvbS1ib3JkZXIsLmh0LWVtcHR5LWRhdGEtc3RhdGU6aGFzKH4uaHQtcGFnaW5hdGlvbil7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS8qIQogKiBQaWthZGF5''@;'; put 'put ''CiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZGJ1c2hlbGwuY29tLwogKi8ucGlrYS1zaW5nbGV7ei1pbmRleDo5OTk5O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzMzMztiYWNrZ3JvdW5kOiNm''@;'; put 'put ''ZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6I2JiYjtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn0ucGlrYS1zaW5nbGU6YmVmb3JlLC5waWthLXNpbmdsZTphZnRlcntjb250ZW50OiIgIjtkaXNwbGF5OnRh''@;'; put 'put ''YmxlfS5waWthLXNpbmdsZTphZnRlcntjbGVhcjpib3RofS5waWthLXNpbmdsZS5pcy1oaWRkZW57ZGlzcGxheTpub25lfS5waWthLXNpbmdsZS5pcy1ib3VuZHtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCAjMDAwMDAwODB9LnBpa2EtbGVuZGFye2Zsb2F0''@;'; put 'put ''OmxlZnQ7d2lkdGg6MjQwcHg7bWFyZ2luOjhweH0ucGlrYS10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0ucGlrYS1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4Ojk5OTk7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjow''@;'; put 'put ''O3BhZGRpbmc6NXB4IDNweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnBpa2EtdGl0bGUgc2VsZWN0e2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5ODttYXJnaW46MDtsZWZ0''@;'; put 'put ''OjA7dG9wOjVweDtvcGFjaXR5OjB9LnBpa2EtcHJldiwucGlrYS1uZXh0e2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7b3V0bGluZTpub25lO2JvcmRlcjowO3BhZGRpbmc6MDt3aWR0aDoyMHB4O2hlaWdodDozMHB4O3RleHQtaW5kZW50OjIwcHg7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjc1JSA3NSU7b3BhY2l0eTouNX0ucGlrYS1w''@;'; put 'put ''cmV2OmhvdmVyLC5waWthLW5leHQ6aG92ZXJ7b3BhY2l0eToxfS5waWthLXByZXYsLmlzLXJ0bCAucGlrYS1uZXh0e2Zsb2F0OmxlZnQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFlQ0FZQUFBQXNFajVy''@;'; put 'put ''QUFBQVVrbEVRVlI0MnUzVk1Rb0FJQkFEUWY4UGdqK09EOWhHMkN0T05KQjJ5bVFrS2UwSGJ3QVAweHVjRGlRV0FSSVRJREVCRW5NZ01ROFM4K0FxQklsNmtLZ0hpWHFRcUFlSmVwQm8vejM4Si9VMHVBSGxhQmtCbDlJNEd3QUFBQUJKUlU1RXJrSmdnZz09KX0ucGlrYS1uZXh0LC5pcy1ydGwg''@;'; put 'put ''LnBpa2EtcHJldntmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQWVDQVlBQUFBc0VqNXJBQUFBVTBsRVFWUjQydTNWT3dvQU1BZ0UwZHdmQW5OalUyNmJZa0JDRkd3ZmlMOVZWV29PK0JK''@;'; put 'put ''NEdmM2d0c0VLS29GQk5UQ29DQVlWd2FBaUdOUUdNVUhNa2pHYmdqazJtSU9OdVhvMG5DOFhuQ2YxSlhnQXJWSVpBUWg1VEtZQUFBQUFTVVZPUks1Q1lJST0pfS5waWthLXByZXYuaXMtZGlzYWJsZWQsLnBpa2EtbmV4dC5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi4yfS5w''@;'; put 'put ''aWthLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9ja30ucGlrYS10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowO2JvcmRlcjowfS5waWthLXRhYmxlIHRoLC5waWthLXRhYmxlIHRke3dpZHRoOjE0LjI4NTcxNDI4NTcxNDI4NiU7cGFk''@;'; put 'put ''ZGluZzowfS5waWthLXRhYmxlIHRoe2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjVweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXJ9LnBpa2EtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94Oy1t''@;'; put 'put ''b3otYm94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtib3JkZXI6MDttYXJnaW46MDt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4O2NvbG9yOiM2NjY7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTVweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmNWY1ZjU7aGVpZ2h0''@;'; put 'put ''OmluaXRpYWx9LnBpa2Etd2Vla3tmb250LXNpemU6MTFweDtjb2xvcjojOTk5fS5pcy10b2RheSAucGlrYS1idXR0b257Y29sb3I6IzNhZjtmb250LXdlaWdodDo3MDB9LmlzLXNlbGVjdGVkIC5waWthLWJ1dHRvbiwuaGFzLWV2ZW50IC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OjcwMDtiYWNrZ3JvdW5kOiMzYWY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzE3OGZlNTtib3JkZXItcmFkaXVzOjNweH0uaGFzLWV2ZW50IC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiMwMDVkYTk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzAwNzZjOX0uaXMtZGlzYWJs''@;'; put 'put ''ZWQgLnBpa2EtYnV0dG9uLC5pcy1pbnJhbmdlIC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiNkNWU5Zjd9LmlzLXN0YXJ0cmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNmNiMzFkO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZW5kcmFuZ2Ug''@;'; put 'put ''LnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojM2FmO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZGlzYWJsZWQgLnBpa2EtYnV0dG9ue3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6Izk5OTtvcGFjaXR5Oi4zfS5pcy1vdXRz''@;'; put 'put ''aWRlLWN1cnJlbnQtbW9udGggLnBpa2EtYnV0dG9ue2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtc2VsZWN0aW9uLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHR9LnBpa2EtYnV0dG9uOmhvdmVyLC5waWthLXJvdy5waWNrLXdob2xlLXdlZWs6aG92ZXIgLnBp''@;'; put 'put ''a2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZmY4MDAwO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0ucGlrYS10YWJsZSBhYmJye2JvcmRlci1ib3R0b206bm9uZTtjdXJzb3I6aGVscH1jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MDtoZWln''@;'; put 'put ''aHQ6MTZweDt3aWR0aDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcn1jbHItaWNvbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOmN1cnJlbnRDb2xvcn1jbHItaWNvbi5pcy1ncmVlbixjbHItaWNvbi5pcy1zdWNjZXNze2ZpbGw6IzJlODUwMH1j''@;'; put 'put ''bHItaWNvbi5pcy1ncmVlbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtc3VjY2VzcyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaXMtcmVkLGNsci1pY29uLmlzLWRhbmdlcixjbHItaWNvbi5pcy1lcnJvcntmaWxsOiNlMDIy''@;'; put 'put ''MDB9Y2xyLWljb24uaXMtcmVkIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1kYW5nZXIgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWVycm9yIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5pcy13YXJuaW5n''@;'; put 'put ''e2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5pcy13YXJuaW5nIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWJsdWUgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNs''@;'; put 'put ''ci1pY29uLmlzLWluZm8gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmlzLXdoaXRlLGNsci1pY29uLmlzLWludmVyc2V7ZmlsbDojZmZmfWNsci1pY29uLmlzLXdoaXRlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbnZlcnNl''@;'; put 'put ''IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2ZmZn1jbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWhpZ2hsaWdodCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMwMDc3Yjh9Y2xyLWljb25bc2hhcGUkPSIgdXAiXSBzdmcsY2xy''@;'; put 'put ''LWljb25bZGlyPXVwXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgwKX1jbHItaWNvbltzaGFwZSQ9IiBkb3duIl0gc3ZnLGNsci1pY29uW2Rpcj1kb3duXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfWNsci1pY29uW3NoYXBlJD0iIHJpZ2h0Il0gc3ZnLGNsci1pY29uW2Rpcj1yaWdodF0g''@;'; put 'put ''c3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfWNsci1pY29uW3NoYXBlJD0iIGxlZnQiXSBzdmcsY2xyLWljb25bZGlyPWxlZnRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9Y2xyLWljb25bZmxpcD1ob3Jpem9udGFsXSBzdmd7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4''@;'; put 'put ''MGRlZyl9Y2xyLWljb25bZmxpcD12ZXJ0aWNhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfWNsci1pY29uIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24gLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIw''@;'; put 'put ''MH1jbHItaWNvbj4qe2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lfWNsci1pY29uPnN2Z3t0cmFuc2l0aW9uOmluaGVyaXR9Y2xyLWljb24+c3ZnIHRpdGxle2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktc29saWQsY2xyLWljb24g''@;'; put 'put ''LmNsci1pLXNvbGlkLS1iYWRnZWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYWxlcnRlZDpub3QoLmNsci1pLW91dGxpbmUpLGNsci1pY29uIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQ6bm90KC5jbHItaS1vdXRs''@;'; put 'put ''aW5lKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydCAuY2xyLWktb3V0bGluZS0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZTpub3QoLmNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGluZSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWR7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVkOm5vdCguY2xyLWktc29saWQpLGNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1iYWRnZWQ6bm90KC5jbHItaS1zb2xpZCl7''@;'; put 'put ''ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNs''@;'; put 'put ''ci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWJhZGdlZCxjbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQ6bm90''@;'; put 'put ''KC5jbHItaS1zb2xpZC0tYmFkZ2VkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0g''@;'; put 'put ''LmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWQsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5o''@;'; put 'put ''YXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWFsZXJ0ZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdle2ZpbGw6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdlIC50cmFuc3Bh''@;'; put 'put ''cmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWVycm9yIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojZTAyMjAwfWNs''@;'; put 'put ''ci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2V7ZmlsbDojMDA3N2I4fWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnR7ZmlsbDoj''@;'; put 'put ''YzI3YjAwfWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojYzI3YjAwfWNsci1pY29uIC5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRh''@;'; put 'put ''bnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAtMXB4IWltcG9ydGFudH1AY2hhcnNldCAiVVRGLTgiOzp3aGVyZSg6cm9vdCw6aG9z''@;'; put 'put ''dCl7LS1jZHMtZ2xvYmFsLWJhc2U6MjA7LS1jZHMtZ2xvYmFsLXNjYWxlLXNwYWNlOjE7LS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZToxOy0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5OjE7LS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHM6MTI7LS1jZHMtZ2xvYmFsLWxh''@;'; put 'put ''eW91dC13aWR0aC14czo1NzZweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXNtOjc2OHB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtbWQ6OTkycHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZzoxMjAwcHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bDoxNDQwcHg7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHM6Y2FsYyg0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzOmNh''@;'; put 'put ''bGMoOCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbTpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2Nh''@;'; put 'put ''bGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGc6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bDpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNw''@;'; put 'put ''YWNlLXh4bDpjYWxjKDQ4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eGw6Y2FsYyg2NCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTA6Y2FsYygwICogdmFyKC0tY2RzLWludGVybmFs''@;'; put 'put ''LXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTpjYWxjKDEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0yOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTM6Y2FsYyg0ICogdmFyKC0t''@;'; put 'put ''Y2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNDpjYWxjKDYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS01OmNhbGMoOCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTY6Y2Fs''@;'; put 'put ''YygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTc6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTg6Y2FsYygxOCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTk6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEwOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xMTpjYWxjKDM2ICogdmFyKC0tY2RzLWludGVybmFsLXNj''@;'; put 'put ''YWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTI6Y2FsYyg0OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEzOmNhbGMoNjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xNDpjYWxjKDcyICogdmFy''@;'; put 'put ''KC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTU6Y2FsYyg5NiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrOmhzbCgwLCAwJSwgMCUpOy0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZTpoc2woMCwgMCUsIDEw''@;'; put 'put ''MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDpoc2woOTMsIDgwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwOmhzbCg5MywgODAlLCA4MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDA6aHNsKDkzLCA4MCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdy''@;'; put 'put ''ZWVuLTMwMDpoc2woOTMsIDgwJSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwOmhzbCg5MywgODAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDA6aHNsKDkzLCA4MCUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMDpoc2woOTMsIDgwJSwgMzcl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwOmhzbCg5MywgODAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDA6aHNsKDkzLCA4MCUsIDIzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMDpoc2woOTMsIDgwJSwgMTclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3Jl''@;'; put 'put ''ZW4tMTAwMDpoc2woOTMsIDgwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yNTpoc2woMTk4LCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwOmhzbCgxOTgsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzU6aHNsKDE5OCwgMTAwJSwgOTQl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDA6aHNsKDE5OCwgMTAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDA6aHNsKDE5OCwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDA6aHNsKDE5OCwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS00MDA6aHNsKDE5OCwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDA6aHNsKDE5OCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDA6aHNsKDE5OCwgMTAwJSwgNDMlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDA6aHNsKDE5OCwgMTAw''@;'; put 'put ''JSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDA6aHNsKDE5OCwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDA6aHNsKDE5OCwgMTAwJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwOmhzbCgxOTgsIDEwMCUsIDE1JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXZpb2xldC01MDpoc2woMjgyLCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwOmhzbCgyODIsIDgwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMDpoc2woMjgyLCA3MyUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDA6''@;'; put 'put ''aHNsKDI4MiwgNjYlLCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwOmhzbCgyODIsIDYwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMDpoc2woMjgyLCA2MCUsIDU3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDA6aHNsKDI4MiwgNjAlLCA0OSUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwOmhzbCgyODMsIDgwJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMDpoc2woMjgyLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtOTAwOmhzbCgyODIsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXZpb2xldC0xMDAwOmhzbCgyODIsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDpoc2woOSwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDpoc2woOSwgMTAwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMDpoc2woOSwgMTAwJSwg''@;'; put 'put ''ODglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTMwMDpoc2woOSwgMTAwJSwgNzklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMDpoc2woOSwgMTAwJSwgNzElKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMDpoc2woOSwgMTAwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYw''@;'; put 'put ''MDpoc2woOSwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMDpoc2woOSwgMTAwJSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMDpoc2woOSwgMTAwJSwgMjglKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItcmVkLTEwMDA6aHNsKDksIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwOmhzbCg0MSwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwOmhzbCg0MSwgMTAwJSwgOTIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwOmhzbCg0''@;'; put 'put ''MSwgMTAwJSwgODYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwOmhzbCg0MSwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwOmhzbCg0MSwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwOmhzbCg0MCwgMTAwJSwgNTklKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3Itb2NocmUtNjAwOmhzbCgzOSwgMTAwJSwgNTAlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwOmhzbCgzOCwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwOmhzbCgzNywgMTAwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAw''@;'; put 'put ''OmhzbCgzNiwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMDpoc2woMzUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwOmhzbCgyMzgsIDEwMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTEwMDpoc2woMjM4LCA1OCUs''@;'; put 'put ''IDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTIwMDpoc2woMjM4LCA1MyUsIDc5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMDpoc2woMjM4LCA1MiUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTQwMDpoc2woMjM4LCA1OCUsIDY0JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwMDpoc2woMjM4LCA1OSUsIDU4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMDpoc2woMjM4LCA2MCUsIDUyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMDpoc2woMjM4LCA2OSUsIDQ1JSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWxhdmVuZGVyLTgwMDpoc2woMjM4LCAxMDAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci05MDA6aHNsKDIzOCwgMTAwJSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMTAwMDpoc2woMjM4LCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01''@;'; put 'put ''MDpoc2woMjExLCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDA6aHNsKDIxMSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMjAwOmhzbCgyMTEsIDEwMCUsIDgxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTMwMDpoc2woMjExLCAxMDAlLCA3''@;'; put 'put ''MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS00MDA6aHNsKDIxMSwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTAwOmhzbCgyMTEsIDEwMCUsIDU0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTYwMDpoc2woMjExLCAxMDAlLCA0NiUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1henVyZS03MDA6aHNsKDIxMSwgMTAwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwOmhzbCgyMTEsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTkwMDpoc2woMjExLCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDAwOmhz''@;'; put 'put ''bCgyMTEsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTA6aHNsKDE4NCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDA6aHNsKDE4NCwgMTAwJSwgODYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDA6aHNsKDE4NCwgMTAwJSwgNzUlKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYXF1YS0zMDA6aHNsKDE4NCwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDA6aHNsKDE4NCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDA6aHNsKDE4NCwgMTAwJSwgNDMlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02''@;'; put 'put ''MDA6aHNsKDE4NCwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDA6aHNsKDE4NCwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDA6aHNsKDE4NCwgMTAwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDA6aHNsKDE4NCwgMTAwJSwgMTMl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwOmhzbCgxODQsIDEwMCUsIDEwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTA6aHNsKDE2MCwgODMlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTEwMDpoc2woMTYwLCA4MiUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWph''@;'; put 'put ''ZGUtMjAwOmhzbCgxNjAsIDc4JSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0zMDA6aHNsKDE2MCwgNjklLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTQwMDpoc2woMTYwLCA2OSUsIDUzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwOmhzbCgxNjAsIDY0JSwgNDUl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS02MDA6aHNsKDE2MCwgNjklLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTcwMDpoc2woMTYwLCA2NCUsIDMwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAwOmhzbCgxNjAsIDEwMCUsIDIxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWph''@;'; put 'put ''ZGUtOTAwOmhzbCgxNjAsIDcwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0xMDAwOmhzbCgxNjAsIDY5JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwOmhzbCg1MCwgMTAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDpoc2woNTAsIDEwMCUs''@;'; put 'put ''IDg0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0yMDA6aHNsKDUwLCAxMDAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwOmhzbCg1MCwgMTAwJSwgNTclKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTQwMDpoc2woNDYsIDEwMCUsIDUyJSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXllbGxvdy01MDA6aHNsKDQ0LCAxMDAlLCA0NyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwOmhzbCg0MiwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTcwMDpoc2woNDAsIDEwMCUsIDM3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy04MDA6''@;'; put 'put ''aHNsKDQwLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctOTAwOmhzbCg0MCwgMTAwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDA6aHNsKDQwLCAxMDAlLCAxMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTUwOmhzbCg2NiwgMTAwJSwgOTQlKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDA6aHNsKDY2LCA5NSUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMjAwOmhzbCg2NiwgODUlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTMwMDpoc2woNjYsIDgwJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS00MDA6''@;'; put 'put ''aHNsKDY2LCA4MCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNTAwOmhzbCg2NiwgOTAlLCA0MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTYwMDpoc2woNjYsIDkwJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS03MDA6aHNsKDY2LCAxMDAlLCAyOCUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1saW1lLTgwMDpoc2woNjYsIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtOTAwOmhzbCg2NiwgMTAwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwOmhzbCg2NiwgMTAwJSwgNyUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTA6''@;'; put 'put ''aHNsKDI1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwOmhzbCgyNSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTIwMDpoc2woMjUsIDk0JSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTMwMDpoc2woMjUsIDEw''@;'; put 'put ''MCUsIDcyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDA6aHNsKDI1LCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTAwOmhzbCgyNSwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTYwMDpoc2woMjUsIDEwMCUsIDQxJSk7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS03MDA6aHNsKDI1LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtODAwOmhzbCgyNSwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTkwMDpoc2woMjUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXRhbmdlcmluZS0xMDAwOmhzbCgyNSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS01MDpoc2woMzQ1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEwMDpoc2woMzQ1LCAxMDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1t''@;'; put 'put ''YWdlbnRhLTIwMDpoc2woMzQ1LCAxMDAlLCA3OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTMwMDpoc2woMzQ1LCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTQwMDpoc2woMzQ1LCAxMDAlLCA2MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTUwMDpo''@;'; put 'put ''c2woMzQ1LCA4MSUsIDUwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNjAwOmhzbCgzNDUsIDgzJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS03MDA6aHNsKDM0NSwgOTElLCAzMSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTgwMDpoc2woMzQ1LCAxMDAlLCAy''@;'; put 'put ''NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTkwMDpoc2woMzQ1LCAxMDAlLCAxOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEwMDA6aHNsKDM0NSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay01MDpoc2woMzI0LCAxMDAlLCA5NyUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1waW5rLTEwMDpoc2woMzI0LCA5NSUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMjAwOmhzbCgzMjQsIDg0JSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0zMDA6aHNsKDMyNCwgNzglLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTQwMDpoc2woMzI0''@;'; put 'put ''LCA3OCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNTAwOmhzbCgzMjQsIDY0JSwgNTElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay02MDA6aHNsKDMyNCwgODAlLCAzOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTcwMDpoc2woMzI0LCAxMDAlLCAzMCUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1waW5rLTgwMDpoc2woMzI0LCAxMDAlLCAyNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTkwMDpoc2woMzI0LCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTEwMDA6aHNsKDMyNCwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTUw''@;'; put 'put ''OmhzbCgyODIsIDMlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwOmhzbCgyODIsIDMlLCA5MiUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMjAwOmhzbCgyODIsIDMlLCA4NCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMzAwOmhzbCgyODIsIDMl''@;'; put 'put ''LCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNDAwOmhzbCgyODIsIDMlLCA2MyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNTAwOmhzbCgyODIsIDMlLCA1NCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNjAwOmhzbCgyODIsIDMlLCA0MyUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci13YXJtLWdyYXktNzAwOmhzbCgyODIsIDMlLCAzNSUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktODAwOmhzbCgyODIsIDMlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktOTAwOmhzbCgyODIsIDMlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci13YXJtLWdyYXktMTAwMDpoc2woMjgyLCAzJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtNTA6aHNsKDIzOCwgMjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDA6aHNsKDIzOCwgMjAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0yMDA6aHNsKDIz''@;'; put 'put ''OCwgMjAlLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0zMDA6aHNsKDIzOCwgMjAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS00MDA6aHNsKDIzOCwgMjAlLCA2MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS01MDA6aHNsKDIzOCwgMjMlLCA1NiUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1zbGF0ZS02MDA6aHNsKDIzOCwgMjQlLCA0OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS03MDA6aHNsKDIzOCwgMjglLCAzOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS04MDA6aHNsKDIzOCwgMjglLCAyOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS05MDA6''@;'; put 'put ''aHNsKDIzOCwgMjglLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDAwOmhzbCgyMzgsIDI4JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTUwOmhzbCgyMTEsIDEwMCUsIDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0xMDA6aHNsKDIxMSwgNTglLCA5MCUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1pY2UtMjAwOmhzbCgyMTEsIDUzJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTMwMDpoc2woMjExLCA0OSUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS00MDA6aHNsKDIxMSwgNDclLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNTAwOmhzbCgy''@;'; put 'put ''MTEsIDQ3JSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTYwMDpoc2woMjExLCA1NiUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS03MDA6aHNsKDIxMSwgNjklLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtODAwOmhzbCgyMTEsIDY5JSwgMjclKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItaWNlLTkwMDpoc2woMjExLCAxMDAlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMTAwMDpoc2woMjExLCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTA6aHNsKDIxMSwgMjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktMTAw''@;'; put 'put ''OmhzbCgyMTEsIDIwJSwgOTAlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTIwMDpoc2woMjExLCAyMCUsIDgxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0zMDA6aHNsKDIxMSwgMjAlLCA3MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNDAwOmhzbCgyMTEs''@;'; put 'put ''IDIwJSwgNjElKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwMDpoc2woMjExLCAyMCUsIDUzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS02MDA6aHNsKDIxMSwgMjAlLCA0NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNzAwOmhzbCgyMTEsIDIzJSwgMzYl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTgwMDpoc2woMjExLCAzMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS05MDA6aHNsKDIxMSwgNDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktMTAwMDpoc2woMjExLCA2MyUsIDE0JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXRhbi01MDpoc2woNDEsIDIzJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTEwMDpoc2woNDEsIDIyJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTIwMDpoc2woNDEsIDI3JSwgODIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTMwMDpoc2woNDEsIDIz''@;'; put 'put ''JSwgNjglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTQwMDpoc2woNDEsIDIzJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTUwMDpoc2woNDEsIDIwJSwgNDclKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTYwMDpoc2woNDEsIDIwJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFu''@;'; put 'put ''LTcwMDpoc2woNDEsIDIwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTgwMDpoc2woNDEsIDIzJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTkwMDpoc2woNDEsIDIzJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTEwMDA6aHNsKDQxLCAyMiUsIDE2JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNTpoc2woMTk4LCAzMyUsIDk5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDpoc2woMTk4LCAzNiUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDA6aHNsKDE5OCwgMjAlLCA5MSUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwOmhzbCgxOTgsIDE0JSwgODIlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMDpoc2woMTk4LCAxMCUsIDcxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDA6aHNsKDE5OCwgOSUsIDU2JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDA6aHNsKDE5OCwgMTAlLCA0NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwOmhzbCgxOTgsIDE0JSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMDpoc2woMTk4LCAxOSUsIDI4JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDA6aHNsKDE5OCwgMjMlLCAyMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwOmhzbCgxOTgsIDI4JSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDA6aHNsKDE5OCwgMzAlLCAxNSUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMDpoc2woMjAwLCAzMSUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMDpoc2woMCwgMCUsIDEwMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTUwOmhzbCgwLCAwJSwgOTglKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDA6aHNs''@;'; put 'put ''KDAsIDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTIwMDpoc2woMCwgMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMzAwOmhzbCgwLCAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS00MDA6aHNsKDAsIDAlLCA4MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1n''@;'; put 'put ''cmF5LTUwMDpoc2woMCwgMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNjAwOmhzbCgwLCAwJSwgNTUlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS03MDA6aHNsKDAsIDAlLCA0MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTgwMDpoc2woMCwgMCUsIDI3JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWdyYXktOTAwOmhzbCgwLCAwJSwgMjAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDAwOmhzbCgwLCAwJSwgMCUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0OjMwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6''@;'; put 'put ''ZS0wOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yOmNhbGMoMTIgKiB2''@;'; put 'put ''YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJu''@;'; put 'put ''YWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS01OmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02OmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS04OmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWZvbnQtc2l6ZS05OmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRl''@;'; put 'put ''ci1mb250LWZhbWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2UtZm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLCBDb25zb2xhcywgTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOy0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0Oi4xNDc1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0Oi4xNzAzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQ6LjUxN2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJl''@;'; put 'put ''ZC03MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0x''@;'; put 'put ''MDAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemU6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodDoxLjQyODU3MTRlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nOi0uMDA3MTQyODZlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1kaXNwbGF5LWZvbnQtc2l6ZTpjYWxjKDQwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0OjEuMWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5l''@;'; put 'put ''LWhlaWdodDoxLjEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC1zaXplOmNh''@;'; put 'put ''bGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGxpbmUtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZTpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodDoxLjMzMzMzM2VtOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nOi0uMDA4MzMzMzNlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemU6Y2FsYygyMCAqIHZhcigtLWNkcy1p''@;'; put 'put ''bnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nOi0uMDFlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0''@;'; put 'put ''OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0OjEuNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0z''@;'; put 'put ''KSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQ6Y2FsYyg0MDAgKiAo''@;'; put 'put ''MXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodDoxLjIz''@;'; put 'put ''MDc3ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nOi0uMDA3NjkyZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZTpjYWxjKDEx''@;'; put 'put ''ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0OjEuNDU0NTQ1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZzouMDE4MTgyZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktY2FwdGlvbi1mb250LXdlaWdodDo0MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZTpjYWxjKDEwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQ6MS4y''@;'; put 'put ''ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWJsdWUtODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS13YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9u''@;'; put 'put ''LWluc3RhbnQ6MHM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1xdWlja2VzdDouMXM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1xdWlja2VyOi4xNXM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1xdWljazouMnM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlv''@;'; put 'put ''bi1kdXJhdGlvbi1zZWNvbmRhcnk6LjNzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tcHJpbWFyeTouNHM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1zbG93Oi41czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3dlcjouN3M7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWFuaW1hdGlvbi1kdXJhdGlvbi1zbG93ZXN0Oi44czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWVhc2luZy1wcmltYXJ5OmN1YmljLWJlemllcigwLC45OSwwLC45OSk7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmctc2Vjb25kYXJ5OmN1YmljLWJlemllcigwLCAxLjUsIC41LCAxKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtYW5pbWF0aW9uLWVhc2luZy1sb29wOmN1YmljLWJlemllciguMTcsIC40LCAuOCwgLjc5KTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDA6Y2FsYyg0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci1yYWRpdXMtMjAwOmNhbGMoMTIgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDA6NTAlOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwOmNhbGMoMSAqICgxcmVtIC8gdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwOmNhbGMoMiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMzAwOmNhbGMoMyAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtNDAwOmNhbGMoNCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLWNvbG9yLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LXNoYWRvdy0xMDA6MCBjYWxjKCgxIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgY2FsYygoMyAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0pIDAgaHNsYSgxOTgsIDMwJSwgMTUlLCAuNSk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0yMDA6MCBj''@;'; put 'put ''YWxjKCgxIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgY2FsYygoMyAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0pIDAgaHNsYSgxOTgsIDMwJSwgMTUlLCAuMyk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDA6MCBjYWxjKCgxIC8gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgY2FsYygoMyAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0pIDAgaHNsYSgxOTgsIDMwJSwgMTUlLCAuMik7LS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMDpoc2xhKDAsIDAlLCAwJSwgMCk7LS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LW9wYWNpdHktMTAwOmhzbGEoMCwgMCUsIDAlLCAuMik7LS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMjAwOmhzbGEoMCwgMCUsIDAlLCAuNCk7LS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMzAwOmhzbGEoMCwgMCUsIDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLW91dGxpbmU6SGlnaGxpZ2h0IHNvbGlkIDJweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS13ZWJraXQ6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldDoxcHg7LS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXRvdWNoLXRhcmdldDpjYWxjKDM2ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTst''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''dWUtNzUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGln''@;'; put 'put ''aGxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tY2xpY2s6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3Jl''@;'; put 'put ''ZW4tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWRhbmdlci1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjUpOy0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZDpoc2xhKDAsIDAlLCAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVy''@;'; put 'put ''LWJhY2tncm91bmQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNv''@;'; put 'put ''bnRhaW5lci1iYWNrZ3JvdW5kLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2UtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDEwMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXN0YXR1cy1pbmZvOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzczp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vz''@;'; put 'put ''cy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0x''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLWRhbmdlci1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC10aW50OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0zMDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLWFsdDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1hbHQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1hbHQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12''@;'; put 'put ''aW9sZXQtOTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtdXRpbGl0''@;'; put 'put ''eS1ncmF5LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJs''@;'; put 'put ''dWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6''@;'; put 'put ''dXJlLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxp''@;'; put 'put ''dHktZ3JlZW46dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3Jl''@;'; put 'put ''ZW4tODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctc2hh''@;'; put 'put ''ZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dXRpbGl0eS1yZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lLXRpbnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci10YW5nZXJpbmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LXZpb2xldC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1ib3JkZXI6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dml6LWdlbmVyYWwtMjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1s''@;'; put 'put ''aW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTUwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTY6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNi1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC03OnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItbGF2ZW5kZXItNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC03LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTg6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVy''@;'; put 'put ''YWwtOC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS05MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTAtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTE6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1qYWRlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTEtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTgwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTMtdmlvbGV0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXZpei1n''@;'; put 'put ''ZW5lcmFsLTE1OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcGluay03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE1LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTY6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS02''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE2LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJp''@;'; put 'put ''dHktc3VjY2Vzczp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXdhcm5pbmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZy1saWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXllbGxvdy00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1pbW1lZGlhdGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktY3JpdGljYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1maWxsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtYm9yZGVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUt''@;'; put 'put ''MjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1z''@;'; put 'put ''ZXF1ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1z''@;'; put 'put ''ZXF1ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUw''@;'; put 'put ''MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtOTAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVu''@;'; put 'put ''dGlhbC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3Itb2NocmUtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LWFxdWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNTA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1n''@;'; put 'put ''cmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotc2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LXNlcXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItcmVkLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1k''@;'; put 'put ''aXZlcmdpbmctdmlvbGV0LWFxdWEtdi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy12aW9sZXQtYXF1YS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0''@;'; put 'put ''LWFxdWEtYS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNzAw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTkwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWFxdWEtOTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''dWUtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJn''@;'; put 'put ''aW5nLWJsdWUtamFkZS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUt''@;'; put 'put ''ai00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai02MDA6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1qYWRlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1q''@;'; put 'put ''YWRlLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1k''@;'; put 'put ''aXZlcmdpbmctYmx1ZS1ncmVlbi1iLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVl''@;'; put 'put ''LWdyZWVuLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTQw''@;'; put 'put ''MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy02MDA6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ncmVlbi02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctODAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNzAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0yMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTQwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTYwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNv''@;'; put 'put ''bG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQ6MzAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcjo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQ6NjAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1z''@;'; put 'put ''aXplLTA6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMTpjYWxjKDExICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yOmNhbGMoMTIgKiB2''@;'; put 'put ''YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTM6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNDpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFs''@;'; put 'put ''LXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS01OmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTY6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNzpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS04OmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC1zaXplLTk6Y2FsYyg0MCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LWZhbWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZh''@;'; put 'put ''bWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsIENvbnNvbGFzLCBNZW5sbywgTW9uYWNvLCBtb25vc3BhY2U7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10''@;'; put 'put ''b3AtZ2FwLWhlaWdodDouMTQ3NWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0Oi4xNzAzZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS14LWhlaWdodDouNTE3ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS03MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWxpbmstb24tY29sb3JiZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplOmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5l''@;'; put 'put ''LWhlaWdodDoxLjQyODU3MTRlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmc6LS4wMDcxNDI4NmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtc2l6ZTpjYWxj''@;'; put 'put ''KDQwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQ6MS4xZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlz''@;'; put 'put ''cGxheS1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWhlYWRpbmctbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxl''@;'; put 'put ''LTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtd2VpZ2h0OjUwMDstLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZTpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0OjEuMzMzMzMzZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZzotLjAwODMzMzMzZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY3Rpb24tbGluZS1oZWlnaHQ6MS4yZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nOi0uMDFlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250''@;'; put 'put ''LXNpemU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0OjEuNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0OjEu''@;'; put 'put ''NWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQ6Y2FsYyg0MDAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1mb250LXNpemU6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQ6MS4yMzA3N2VtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5n''@;'; put 'put ''Oi0uMDA3NjkyZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''YXB0aW9uLWxpbmUtaGVpZ2h0OjEuNDU0NTQ1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wMTgxODJlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0''@;'; put 'put ''aW9uLWZvbnQtc2l6ZTpjYWxjKDEwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZzouMDVlbTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS13YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWludGVybmFsLXNjYWxlLTE6Y2FsYygoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS1sYXlvdXQtc3BhY2UpKTst''@;'; put 'put ''LWNkcy1pbnRlcm5hbC1zY2FsZS0yOmNhbGMoKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIHZhcigtLWNkcy1nbG9iYWwtc2NhbGUtc3BhY2UpKTstLWNkcy1pbnRlcm5hbC1zY2FsZS0zOmNhbGMoKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc2NhbGUtdHlwb2dyYXBoeSkpfWh0bWx7Zm9udC1zaXplOmNhbGMoKHZhcigtLWNkcy1nbG9iYWwtYmFzZSkvMTYpKjEwMCUpO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmluaGVyaXQhaW1wb3J0YW50fVtjZHMtYmFz''@;'; put 'put ''ZS1mb250PSIxNiJdey0tY2RzLWdsb2JhbC1iYXNlOjE2fVtjZHMtdGhlbWVde2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZCk7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTUwMCl9W2Nkcy1jb250cm9sXSA6Oi13ZWJraXQt''@;'; put 'put ''aW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMCl9W2Nkcy1jb250cm9sXSA6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMCl9W2Nkcy1jb250cm9sXVtfZGlzYWJsZWRd''@;'; put 'put ''ey0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKX1odG1sW2Nkcy1mb2N1cy10cmFwXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3dpZHRoOjEwMHZ3O2hlaWdodDoxMDB2aH1bY2RzLXRleHRde2ZvbnQtZmFtaWx5OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSk7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MH1bY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWdyaWRdOmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF06YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXTpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06YmVmb3Jle2Rpc3BsYXk6bm9uZX1bY2RzLXRleHQqPWRpc3Bs''@;'; put 'put ''YXldLFtjZHMtdGV4dCo9aGVhZGluZ10sW2Nkcy10ZXh0Kj1oZWFkbGluZV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHkp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApfVtjZHMtdGV4dCo9Ym9keV0sW2Nkcy10ZXh0Kj1jYXB0aW9uXSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XSxbY2RzLXRleHQqPXNtYWxsY2FwdGlvbl17Y29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTUwMCl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxh''@;'; put 'put ''eS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9ZGlzcGxheV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRv''@;'; put 'put ''cDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWhlYWRpbmddLFtjZHMtdGV4dCo9aGVhZGxpbmVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXNpemUpO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhl''@;'; put 'put ''YWRpbmctbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9aGVhZGluZ106YmVmb3JlLFtjZHMtdGV4dCo9aGVhZGxpbmVdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWhlYWRpbmddOmFmdGVyLFtjZHMtdGV4dCo9aGVhZGxpbmVdOmFmdGVye2NvbnRlbnQ6IiI7''@;'; put 'put ''ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRs''@;'; put 'put ''ZS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9dGl0bGVdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsg''@;'; put 'put ''Y2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj10aXRsZV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFl''@;'; put 'put ''bSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNl''@;'; put 'put ''Y3Rpb25dOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24t''@;'; put 'put ''bGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY3Rpb25dOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdh''@;'; put 'put ''cC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikp''@;'; put 'put ''Ki0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOmJlZm9yZXtjb250''@;'; put 'put ''ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpIC0g''@;'; put 'put ''MWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4w''@;'; put 'put ''NDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KX1bY2RzLXRleHQqPWJvZHldOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4t''@;'; put 'put ''Ym90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjFlbSl9W2Nkcy10ZXh0Kj1ib2R5XTphZnRlcntjb250ZW50''@;'; put 'put ''OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOmFmdGVyLGJvZHlbY2RzLXRleHQqPWJvZHldOmJlZm9yZXtjb250''@;'; put 'put ''ZW50Om5vbmV9W2Nkcy10ZXh0Kj1tZXNzYWdlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPW1lc3NhZ2VdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2Rz''@;'; put 'put ''LXRleHQqPW1lc3NhZ2VdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFz''@;'; put 'put ''Y2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQt''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFy''@;'; put 'put ''eS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90''@;'; put 'put ''dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTphZnRl''@;'; put 'put ''cntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1jYXB0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFj''@;'; put 'put ''aW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPWNhcHRpb25dOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWNhcHRpb25dOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQp''@;'; put 'put ''KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25dOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVp''@;'; put 'put ''Z2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0fj1saW5rXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvcikhaW1wb3J0YW50''@;'; put 'put ''O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRs''@;'; put 'put ''aW5lKTtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyKSFpbXBvcnRhbnR9W2Nkcy10ZXh0''@;'; put 'put ''fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pLFtjZHMtdGV4dH49bGlua11bY2RzLXRleHR+PXZpc2l0ZWRde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6''@;'; put 'put ''bm90KFtjZHMtdGV4dH49c3RhdGljXSk6aG92ZXIsW2Nkcy10ZXh0fj1saW5rXVtjZHMtdGV4dH49dmlzaXRlZF06aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3ZlcikhaW1wb3J0YW50fUBtZWRpYSgtd2Via2l0LW1pbi1kZXZp''@;'; put 'put ''Y2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCl9fVtjZHMtdGV4dH49Y29kZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpO2ZvbnQtZmFtaWx5''@;'; put 'put ''Om1vbm9zcGFjZX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpIDAgMCAwIHZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgaW5zZXR9W2Nkcy10ZXh0fj1leHRyYWJvbGRde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PWJvbGRde2ZvbnQtd2VpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1zZW1pYm9sZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tZWRpdW1d''@;'; put 'put ''e2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pIWltcG9ydGFudH1bY2RzLXRleHR+PXJlZ3VsYXJde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0KSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jYXBpdGFsaXplXXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplIWltcG9ydGFudH1bY2RzLXRleHR+PXVwcGVyY2FzZV17''@;'; put 'put ''dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIWltcG9ydGFudH1bY2RzLXRleHR+PWxvd2VyY2FzZV17dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXMhaW1w''@;'; put 'put ''b3J0YW50O3doaXRlLXNwYWNlOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj10cnVuY2F0ZV06YWZ0ZXIsW2Nkcy10ZXh0fj10cnVuY2F0ZV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHR+PWp1c3RpZnlde3RleHQtYWxpZ246anVzdGlmeSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1s''@;'; put 'put ''ZWZ0XXt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fVtjZHMtdGV4dH49cmlnaHRde3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fVtjZHMtdGV4dH49Y2VudGVyXXt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tb25vc3BhY2Vde2ZvbnQtZmFtaWx5OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2UtZm9udC1mYW1pbHkpfVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOmJlZm9yZXtjb250ZW50OiIiO21hcmdpbi10b3A6LS4xMjRlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dH49bGhl''@;'; put 'put ''XTphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtbGF5b3V0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy1sYXlvdXR+PWRpc2FibGUtbGhlXTpiZWZvcmUsW2Nkcy10ZXh0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy10''@;'; put 'put ''ZXh0fj1kaXNhYmxlLWxoZV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPWgwXSxbY2RzLXRleHQqPWgxXSxbY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LWZhbWlseTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVp''@;'; put 'put ''Z2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi0uMDEyNWVtfVtjZHMtdGV4dCo9aDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsg''@;'; put 'put ''Y2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDBdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWln''@;'; put 'put ''aHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgxXSxbY2RzLXRleHQqPWgyXSxbY2Rz''@;'; put 'put ''LXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS42cmVtO2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDE1NmVtfVtjZHMtdGV4dCo9aDFdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0p''@;'; put 'put ''Ki0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM10sW2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1oNV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOjEuNHJlbTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9''@;'; put 'put ''aDJdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMt''@;'; put 'put ''dGV4dCo9aDJdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVy''@;'; put 'put ''LWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS4x''@;'; put 'put ''cmVtO2xpbmUtaGVpZ2h0OjEuMDkwOWVtO2xldHRlci1zcGFjaW5nOi0uMDEzNjM2ZW19W2Nkcy10ZXh0Kj1oM106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10''@;'; put 'put ''b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9''@;'; put 'put ''aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZTouOXJlbTtsaW5lLWhlaWdodDoxLjMzMzMzM2VtO2xldHRlci1zcGFjaW5nOi0uMDExMTExZW19W2Nkcy10ZXh0Kj1oNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg0XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lk''@;'; put 'put ''dGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBj''@;'; put 'put ''YWxjKCgxLjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6LjhyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDEyNWVtfVtjZHMtdGV4dCo9aDVdOmJlZm9y''@;'; put 'put ''ZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oNV06YWZ0ZXJ7Y29udGVudDoiIjtk''@;'; put 'put ''aXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi43cmVtO2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzotLjAzMTI1ZW19W2Nkcy10ZXh0Kj1oNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jazto''@;'; put 'put ''ZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6''@;'; put 'put ''MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVl''@;'; put 'put ''bSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAwXSxbY2RzLXRleHQqPXAxXXtmb250LXNpemU6MS4ycmVtO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKTtsaW5lLWhlaWdodDoxLjE2NjY3ZW07bGV0dGVyLXNwYWNpbmc6LS4w''@;'; put 'put ''MDgzMzNlbX1bY2RzLXRleHQqPXAwXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMTY2NjdlbSAtIDFlbSkvMikp''@;'; put 'put ''Ki0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAxXXtmb250LXNpemU6LjdyZW07Y29sb3I6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS43MTQyOWVtO2xldHRlci1zcGFjaW5nOi0uMDE0Mjg2ZW19W2Nkcy10ZXh0Kj1wMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjcxNDI5ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDFdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0g''@;'; put 'put ''LSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0MjllbSAtIDFlbSkvMikpKi0x''@;'; put 'put ''KSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wMl0sW2Nkcy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS44''@;'; put 'put ''NDYxNWVtO2xldHRlci1zcGFjaW5nOi0uMDA3NjkyZW19W2Nkcy10ZXh0Kj1wMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBj''@;'; put 'put ''YWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDJdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1o''@;'; put 'put ''ZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1w''@;'; put 'put ''NF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDNdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsg''@;'; put 'put ''Y2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXAzXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDRdLFtjZHMtdGV4dCo9''@;'; put 'put ''cDVde2ZvbnQtc2l6ZTouNnJlbTtmb250LXdlaWdodDo2MDA7bGluZS1oZWlnaHQ6MmVtO2xldHRlci1zcGFjaW5nOi0uMDA4MzMzZW19W2Nkcy10ZXh0Kj1wNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWln''@;'; put 'put ''aHQ6NDAwfVtjZHMtdGV4dCo9cDVdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRl''@;'; put 'put ''eHQqPXA1XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1o''@;'; put 'put ''ZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuNWVtKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDZdLFtjZHMtdGV4dCo9cDddLFtjZHMtdGV4dCo9cDhde2ZvbnQtc2l6ZTouNTVyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuMDkwOTA5ZW07bGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtfVtjZHMtdGV4dCo9cDZdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wNl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgo''@;'; put 'put ''KDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkv''@;'; put 'put ''MikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wN10sW2Nkcy10ZXh0Kj1wOF17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDddOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wN106YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4w''@;'; put 'put ''NDRlbSl9W2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXplOi41cmVtO2xpbmUtaGVpZ2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfVtjZHMtdGV4dCo9cDhdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDhdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0g''@;'; put 'put ''LSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0g''@;'; put 'put ''LjA0NGVtKX06aG9zdCw6cm9vdHstLVwzYjQgMTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzKTstLVwzYjQgMjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMpOy0tXDNiNCAzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzKTstLVwzYjQgNDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSk7LS1cM2I0IDU6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQpOy0tXDNiNCA2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnKTstLVwzYjQgNzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCk7LS1cM2I0''@;'; put 'put ''IDg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhsKTstLVwzYjQgOTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhsKX1bY2RzLWxheW91dCo9ImFsaWduOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1w''@;'; put 'put ''b3J0YW50fUBtZWRpYShtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHhzOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHhzOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25Ac206ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHNtOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2giXXtmbGV4LWdy''@;'; put 'put ''b3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1w''@;'; put 'put ''b3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQG1kOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpz''@;'; put 'put ''aHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImFsaWduQGxnOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0id3JhcEBsZzpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1n''@;'; put 'put ''cm93OjAhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAeGw6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHhsOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWhvcml6b250''@;'; put 'put ''YWxde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1pdGVtczpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7d2lkdGg6MTAwJTttYXJnaW46MDttaW4taGVpZ2h0OjB9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy10ZXh0XXt3aWR0aDppbml0aWFsIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24t''@;'; put 'put ''aXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246''@;'; put 'put ''Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0''@;'; put 'put ''Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpz''@;'; put 'put ''dHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGln''@;'; put 'put ''bi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXth''@;'; put 'put ''bGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17anVzdGlmeS1jb250''@;'; put 'put ''ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde2FsaWdu''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeHM6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6''@;'; put 'put ''aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXtbY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJvcmRlckBzbTpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93''@;'; put 'put ''OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwt''@;'; put 'put ''c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXth''@;'; put 'put ''bGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17''@;'; put 'put ''YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXttYXJnaW4t''@;'; put 'put ''cmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QG1kOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmln''@;'; put 'put ''aHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQG1kOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXXth''@;'; put 'put ''bGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6''@;'; put 'put ''c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQG1kOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24taXRlbXM6Zmxl''@;'; put 'put ''eC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7''@;'; put 'put ''YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQGxnOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3Ry''@;'; put 'put ''ZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQGxnOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxn''@;'; put 'put ''OmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQGxnOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QGxnOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQHhsOnJl''@;'; put 'put ''dmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1zdHJldGNoIl0+Kntm''@;'; put 'put ''bGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHhsOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2Vu''@;'; put 'put ''dGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1zZWxmOmZs''@;'; put 'put ''ZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWlt''@;'; put 'put ''cG9ydGFudH19W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''OnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24t''@;'; put 'put ''aXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVt''@;'; put 'put ''czpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgt''@;'; put 'put ''Z3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''OnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17''@;'; put 'put ''bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYShtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17YWxpZ24taXRlbXM6''@;'; put 'put ''ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeHM6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLXN0cmV0''@;'; put 'put ''Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0''@;'; put 'put ''cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhzOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRv''@;'; put 'put ''O21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQHNtOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBzbTpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBzbTpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6''@;'; put 'put ''Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17YWxp''@;'; put 'put ''Z24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRl''@;'; put 'put ''ciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBtZDpy''@;'; put 'put ''ZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQG1kOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpj''@;'; put 'put ''ZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0''@;'; put 'put ''fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQGxnOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250''@;'; put 'put ''ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRl''@;'; put 'put ''bXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpzdHJldGNoIl0+''@;'; put 'put ''KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1''@;'; put 'put ''dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkB4bDpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZl''@;'; put 'put ''cnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''eGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeGw6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6''@;'; put 'put ''dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwt''@;'; put 'put ''Y2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde21h''@;'; put 'put ''cmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRv''@;'; put 'put ''fX1bY2RzLWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iY29sczphdXRvIl17Z3JpZC1h''@;'; put 'put ''dXRvLWZsb3c6Y29sdW1uO2dyaWQtdGVtcGxhdGUtY29sdW1uczppbml0aWFsfVtjZHMtbGF5b3V0Kj0iY29sc0AiXT4qe2dyaWQtY29sdW1uOnNwYW4gdmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzKX1bY2RzLWxheW91dCo9ImNvbEAiXXtncmlkLWNvbHVtbjpzcGFuIDEyfVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sczoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93czoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sczoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''czoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sczozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93czozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sczo0Il0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93czo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sczo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93czo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sczo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93czo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sczo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''czo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sczo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93czo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sczo5Il0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93czo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sczoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93czoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFu''@;'; put 'put ''IDEwfVtjZHMtbGF5b3V0Kj0iY29sczoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93czoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sczoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93czoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0iY29sOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2w6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3c6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4g''@;'; put 'put ''NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo3Il17Z3JpZC1yb3c6c3BhbiA3L3Nw''@;'; put 'put ''YW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo5Il17Z3JpZC1jb2x1bW46c3Bh''@;'; put 'put ''biA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxMCJde2dyaWQt''@;'; put 'put ''cm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bDoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbDplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2w6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvdzplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3c6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbDplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2w6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvdzplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3c6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bDplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3Rh''@;'; put 'put ''cnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpl''@;'; put 'put ''bmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3Rh''@;'; put 'put ''cnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVu''@;'; put 'put ''ZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpz''@;'; put 'put ''dGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvdzpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bjpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6''@;'; put 'put ''c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEiXT4qe2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjIiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Mi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFu''@;'; put 'put ''IDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xzQHhzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzQHhzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjgiXT4qe2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHhz''@;'; put 'put ''OjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEw''@;'; put 'put ''Il0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEy''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BzbToxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAx''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0BzbToxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BzbToyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BzbToyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0BzbTozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BzbTozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BzbTo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93c0BzbTo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0BzbTo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0BzbTo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BzbTo2''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0BzbTo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0BzbTo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BzbTo3Il0+Kntn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0BzbTo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0BzbTo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BzbTo5Il0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0BzbTo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0BzbToxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BzbToxMCJdPip7Z3JpZC1yb3c6c3Bh''@;'; put 'put ''biAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0BzbToxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0BzbToxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BzbToxMiJdPip7Z3JpZC1jb2x1bW46''@;'; put 'put ''c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0BzbToxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbHNAbWQ6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d3NAbWQ6MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAbWQ6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MyJd''@;'; put 'put ''Pip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9InJvd3NAbWQ6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAbWQ6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAbWQ6NCJdPip7Z3Jp''@;'; put 'put ''ZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAbWQ6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NiJdPip7Z3JpZC1jb2x1bW46''@;'; put 'put ''c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAbWQ6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAbWQ6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3Nw''@;'; put 'put ''YW4gN31bY2RzLWxheW91dCo9ImNvbHNAbWQ6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAbWQ6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd3NAbWQ6OSJdPip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbHNAbWQ6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd3NAbWQ6MTIiXT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BsZzoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxIl0+Kntncmlk''@;'; put 'put ''LXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzozIl0+KntncmlkLWNvbHVtbjpz''@;'; put 'put ''cGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BsZzozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3Bh''@;'; put 'put ''biA0fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93c0BsZzo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sc0BsZzo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''c0BsZzo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0Bs''@;'; put 'put ''ZzoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''c0BsZzoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFu''@;'; put 'put ''IDF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dzQHhsOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xzQHhsOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJyb3dz''@;'; put 'put ''QHhsOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjgiXT4q''@;'; put 'put ''e2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjkiXT4qe2dyaWQt''@;'; put 'put ''cm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjExIl0+KntncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhsOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhsOjEyIl0+Kntncmlk''@;'; put 'put ''LXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYShtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhzOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3Nw''@;'; put 'put ''YW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo0Il17Z3JpZC1y''@;'; put 'put ''b3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4''@;'; put 'put ''czo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9InJvd0B4czo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjEwIl17Z3JpZC1jb2x1bW46''@;'; put 'put ''c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QHhzOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1w''@;'; put 'put ''b3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImNvbEBzbToxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHNtOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QHNtOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NCJde2dyaWQtcm93OnNwYW4gNC9zcGFu''@;'; put 'put ''IDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NiJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dA''@;'; put 'put ''c206NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAc206OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAx''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMSJde2dy''@;'; put 'put ''aWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlh''@;'; put 'put ''KG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoyIl17Z3Jp''@;'; put 'put ''ZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0BtZDozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEBtZDo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3Bh''@;'; put 'put ''biA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjciXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93QG1kOjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MTEiXXtncmlkLXJvdzpzcGFuIDEx''@;'; put 'put ''L3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTIw''@;'; put 'put ''MHB4KXtbY2RzLWxheW91dCo9ImNvbEBsZzoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjIiXXtncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjMiXXtn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQGxnOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QGxnOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFu''@;'; put 'put ''IDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OSJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAbGc6MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQHhsOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MyJde2dyaWQtcm93OnNwYW4g''@;'; put 'put ''My9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NSJde2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAeGw6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAeGw6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3Nw''@;'; put 'put ''YW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxMCJde2dy''@;'; put 'put ''aWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEB4bDoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dCo9ImNvbEB4czpz''@;'; put 'put ''dGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEiXXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QHhzOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9InJvd0B4czpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMyJde2dyaWQtcm93LWVuZDozIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtNCJde2dyaWQtcm93''@;'; put 'put ''LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNSJde2dy''@;'; put 'put ''aWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC01Il17Z3JpZC1yb3ctc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQt''@;'; put 'put ''NiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC02Il17Z3JpZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d0B4czplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC03Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dAeHM6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFy''@;'; put 'put ''dDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMTAiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEwIl17Z3JpZC1yb3ctc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3Rh''@;'; put 'put ''cnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTExIl17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0B4czplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0xMyJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0x''@;'; put 'put ''MyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0''@;'; put 'put ''YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMiJde2dyaWQt''@;'; put 'put ''cm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQt''@;'; put 'put ''MyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBz''@;'; put 'put ''bTplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xAc206c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9InJvd0BzbTplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTciXXtncmlkLXJvdy1l''@;'; put 'put ''bmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTgiXXtn''@;'; put 'put ''cmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5k''@;'; put 'put ''LTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNt''@;'; put 'put ''OnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAc206ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTIiXXtncmlkLWNv''@;'; put 'put ''bHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpl''@;'; put 'put ''bmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dAc206c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMSJde2dy''@;'; put 'put ''aWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpl''@;'; put 'put ''bmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAbWQ6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEBtZDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTUiXXtncmlkLWNvbHVtbi1l''@;'; put 'put ''bmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTYiXXtncmlkLWNv''@;'; put 'put ''bHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTYi''@;'; put 'put ''XXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAbWQ6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQG1kOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5k''@;'; put 'put ''OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTExIl17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dA''@;'; put 'put ''bWQ6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTMiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0zIl17Z3JpZC1y''@;'; put 'put ''b3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC00Il17''@;'; put 'put ''Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFy''@;'; put 'put ''dC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QGxnOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BsZzpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtOCJde2dyaWQtcm93LXN0''@;'; put 'put ''YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtOSJde2dyaWQt''@;'; put 'put ''Y29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTAi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0BsZzplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0''@;'; put 'put ''OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMiJde2dy''@;'; put 'put ''aWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0Bs''@;'; put 'put ''ZzpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMSJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMSJde2dy''@;'; put 'put ''aWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3Rh''@;'; put 'put ''cnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEB4bDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeGw6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4bDplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFy''@;'; put 'put ''dDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTYiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTci''@;'; put 'put ''XXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6''@;'; put 'put ''ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QHhsOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAeGw6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4t''@;'; put 'put ''c3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTEx''@;'; put 'put ''Il17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QHhsOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMh''@;'; put 'put ''aW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2p1c3RpZnktY29udGVu''@;'; put 'put ''dDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7''@;'; put 'put ''anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVu''@;'; put 'put ''ZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRl''@;'; put 'put ''bXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRl''@;'; put 'put ''cn19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91''@;'; put 'put ''dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpj''@;'; put 'put ''ZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1A''@;'; put 'put ''bWVkaWEobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50''@;'; put 'put ''ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVk''@;'; put 'put ''aWEobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeGw6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1bY2RzLWxh''@;'; put 'put ''eW91dH49ImRpc3BsYXk6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheTpjb250ZW50cyJde2Rpc3BsYXk6Y29udGVudHMhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0iZGlzcGxheTpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheTppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNtOm5vbmUiXXtkaXNwbGF5''@;'; put 'put ''Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206aW5saW5lIl17ZGlz''@;'; put 'put ''cGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0iZGlzcGxheUBtZDpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAbGc6bm9uZSJd''@;'; put 'put ''e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBsZzpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBsZzppbmxp''@;'; put 'put ''bmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAeGw6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1v''@;'; put 'put ''bmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4''@;'; put 'put ''O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXA6''@;'; put 'put ''eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXA6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcDpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXA6''@;'; put 'put ''bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91dCo9ImdhcDp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InA6''@;'; put 'put ''bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQg''@;'; put 'put ''MSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im06eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im06bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''Onh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4''@;'; put 'put ''eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRk''@;'; put 'put ''aW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHh4cyJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14Onh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC15Onh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6''@;'; put 'put ''dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLXg6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15''@;'; put 'put ''OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Onh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''eDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHh4cyJde21hcmdpbi1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS14Onh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0''@;'; put 'put ''b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXk6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eGwiXXttYXJnaW4t''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXg6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eGwiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtcjp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4cyJde3BhZGRp''@;'; put 'put ''bmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnNtIl17cGFkZGluZy1ib3R0b206''@;'; put 'put ''dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjptZCJd''@;'; put 'put ''e3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtdDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eGwiXXtwYWRkaW5nLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LXQ6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtbDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eGwiXXtwYWRkaW5nLXJpZ2h0''@;'; put 'put ''OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS10Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bm9uZSJde21hcmdp''@;'; put 'put ''bi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHh4cyJd''@;'; put 'put ''e21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXI6eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAy''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhzIl17bWFyZ2luLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10OnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjpzbSJd''@;'; put 'put ''e21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tdDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigt''@;'; put 'put ''LVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10OnhsIl17bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWw6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tYjp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4eGwiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHh4''@;'; put 'put ''bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fUBtZWRpYShtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHhzOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEB4czp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6''@;'; put 'put ''eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEB4czpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAeHM6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91dCo9ImdhcEB4czp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4eGwiXXtnYXA6dmFyKC0tXDNi''@;'; put 'put ''NCA5KX1bY2RzLWxheW91dH49InBAeHM6bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibUB4czp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwQHhzOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im1AeHM6c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwQHhzOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im1AeHM6eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InBAeHM6eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9y''@;'; put 'put ''dGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC14QHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHMiXXtwYWRkaW5nLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC15QHhzOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFk''@;'; put 'put ''ZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOmxnIl17cGFk''@;'; put 'put ''ZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlA''@;'; put 'put ''eHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czpub25lIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS14QHhzOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFy''@;'; put 'put ''KC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLXlAeHM6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLXhAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFy''@;'; put 'put ''KC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4bCJde21hcmdpbi10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS15QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhz''@;'; put 'put ''Om5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4''@;'; put 'put ''eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHMiXXtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtdEB4czp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4cyJde3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLXJAeHM6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNi''@;'; put 'put ''NCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bWQi''@;'; put 'put ''XXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1yQHhzOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOmxnIl17cGFkZGluZy1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1iQHhzOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4''@;'; put 'put ''czp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOm5v''@;'; put 'put ''bmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6bm9uZSJde21h''@;'; put 'put ''cmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWJAeHM6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAy''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHhz''@;'; put 'put ''Il17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS1iQHhzOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnNtIl17bWFyZ2luLXRvcDp2YXIo''@;'; put 'put ''LS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxA''@;'; put 'put ''eHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bGciXXttYXJnaW4tdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0tbEB4czpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eGwiXXttYXJn''@;'; put 'put ''aW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1sQHhzOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEobWluLXdp''@;'; put 'put ''ZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImdhcEBzbTpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnhzIl17Z2Fw''@;'; put 'put ''OnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAc206c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBzbTptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBA''@;'; put 'put ''c206eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBzbTp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEBzbTp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQHNtOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibUBzbTpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InBAc206eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtQHNtOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icEBzbTptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtQHNtOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icEBzbTp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTpu''@;'; put 'put ''b25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC15QHNtOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFk''@;'; put 'put ''ZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4cyJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1w''@;'; put 'put ''b3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlA''@;'; put 'put ''c206bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigt''@;'; put 'put ''LVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC14QHNtOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eHhsIl17cGFk''@;'; put 'put ''ZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''eUBzbTpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXlAc206eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnhzIl17bWFyZ2lu''@;'; put 'put ''LWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS14QHNtOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOm1kIl17bWFyZ2lu''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS15QHNtOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4bCJde21hcmdp''@;'; put 'put ''bi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBz''@;'; put 'put ''bTpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLXJAc206eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''YkBzbTp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4cyJd''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtYkBzbTpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOm1kIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWxAc206bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4bCJd''@;'; put 'put ''e3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1sQHNtOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4bCJde3BhZGRpbmctcmln''@;'; put 'put ''aHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC10QHNtOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4eHhsIl17cGFkZGluZy1ib3R0b206''@;'; put 'put ''dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTpub25l''@;'; put 'put ''Il17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4eHhzIl17bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS1sQHNtOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4cyJde21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS10QHNtOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206c20iXXttYXJnaW4t''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtLXRAc206bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTpsZyJde21h''@;'; put 'put ''cmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tdEBzbTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eGwiXXttYXJnaW4tYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4''@;'; put 'put ''eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4eGwiXXttYXJn''@;'; put 'put ''aW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bm9uZSJde2dhcDowfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iZ2FwQG1kOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnNtIl17Z2FwOnZhcigtLVwz''@;'; put 'put ''YjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHhsIl17''@;'; put 'put ''Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBtZDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InBAbWQ6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtQG1kOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InBAbWQ6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibUBtZDptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InBAbWQ6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlA''@;'; put 'put ''bWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIo''@;'; put 'put ''LS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnNtIl17cGFkZGluZy1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAteEBtZDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpsZyJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4''@;'; put 'put ''eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1k''@;'; put 'put ''Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBt''@;'; put 'put ''ZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFp''@;'; put 'put ''bXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBt''@;'; put 'put ''ZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtdEBtZDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QG1kOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQG1kOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4cyJde3BhZGRp''@;'; put 'put ''bmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLWxAbWQ6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHMiXXtwYWRkaW5nLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LXRAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOm1kIl17cGFk''@;'; put 'put ''ZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC10QG1kOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOmxnIl17cGFkZGluZy1ib3R0b206''@;'; put 'put ''dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''ckBtZDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnh4bCJd''@;'; put 'put ''e3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4eGwiXXtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDpub25l''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6''@;'; put 'put ''eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHhzIl17bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXJAbWQ6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnNt''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tckBtZDptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6bWQiXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJA''@;'; put 'put ''bWQ6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4bCJde21hcmdpbi1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1iQG1kOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBt''@;'; put 'put ''ZDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImdhcEBsZzpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Z2FwQGxnOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBsZzptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iZ2FwQGxnOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eHhsIl17Z2FwOnZh''@;'; put 'put ''cigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQGxnOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im1AbGc6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icEBsZzp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icEBsZzpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm5vbmUiXXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAteEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5n''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnhzIl17cGFkZGlu''@;'; put 'put ''Zy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAteUBsZzpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzps''@;'; put 'put ''ZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC15QGxnOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6bm9uZSJde21hcmdp''@;'; put 'put ''bi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teEBsZzp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhzIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS15QGxnOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOmxnIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS14QGxnOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eGwiXXttYXJnaW4tdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teUBsZzp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtckBsZzpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''dEBsZzp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6''@;'; put 'put ''eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHMiXXtwYWRk''@;'; put 'put ''aW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC1yQGxnOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnNtIl17cGFkZGluZy1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1i''@;'; put 'put ''QGxnOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpsZyJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtYkBsZzp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4bCJde3BhZGRpbmctdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWxAbGc6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''dEBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOm5v''@;'; put 'put ''bmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1iQGxnOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHMiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1s''@;'; put 'put ''QGxnOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpzbSJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1sQGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOmxnIl17bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLWxAbGc6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHhs''@;'; put 'put ''Il17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tbEBsZzp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhsIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1lZGlh''@;'; put 'put ''KG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHhsOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6''@;'; put 'put ''eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEB4bDpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91''@;'; put 'put ''dCo9ImdhcEB4bDp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAeGw6bm9uZSJde3BhZGRpbmc6MCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icEB4bDp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im1AeGw6eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNi''@;'; put 'put ''NCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC15QHhsOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9y''@;'; put 'put ''dGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhs''@;'; put 'put ''OnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAteUB4bDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmln''@;'; put 'put ''aHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4bCJde3BhZGRpbmctbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7''@;'; put 'put ''cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4''@;'; put 'put ''eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS15QHhsOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eHMi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6bWQi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9y''@;'; put 'put ''dGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eHhs''@;'; put 'put ''Il17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkh''@;'; put 'put ''aW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1iQHhsOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtckB4bDp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHh4cyJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQHhsOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4cyJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QHhsOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6bWQiXXtwYWRk''@;'; put 'put ''aW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtbEB4bDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOmxnIl17cGFkZGluZy1yaWdodDp2YXIo''@;'; put 'put ''LS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10''@;'; put 'put ''QHhsOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHhsIl17cGFk''@;'; put 'put ''ZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4eGwiXXtwYWRkaW5n''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1y''@;'; put 'put ''QHhsOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnh4''@;'; put 'put ''eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHhzIl17bWFyZ2lu''@;'; put 'put ''LXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXRAeGw6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDpzbSJd''@;'; put 'put ''e21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tdEB4bDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6bWQiXXttYXJnaW4tYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhs''@;'; put 'put ''OmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4bCJde21hcmdpbi1ib3R0''@;'; put 'put ''b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1yQHhsOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''OCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHh4''@;'; put 'put ''bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1bY2RzLWxheW91dD1uby1zY3JvbGxpbmdde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJjb250YWluZXI6ZmlsbCJdLFtjZHMtbGF5b3V0fj1maWxsXXt3aWR0aDoxMDAlIWltcG9ydGFudH1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpjZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDphdXRvfVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOnhzIl17d2lk''@;'; put 'put ''dGg6MTAwJTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgteHMpfVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOnNtIl17d2lkdGg6MTAwJTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtc20pfVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOm1kIl17''@;'; put 'put ''d2lkdGg6MTAwJTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtbWQpfVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmxnIl17d2lkdGg6MTAwJTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtbGcpfVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOnhs''@;'; put 'put ''Il17d2lkdGg6MTAwJTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgteGwpfSosOmFmdGVyLDpiZWZvcmUsOmhvc3R7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtdGhlbWV+PWRhcmtdey0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTUwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''MjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktbGluay1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS13YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTYwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbmV1''@;'; put 'put ''dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstb24tY29sb3JiZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEw''@;'; put 'put ''MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRp''@;'; put 'put ''c2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS13YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTYwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstb24tY29sb3JiZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12''@;'; put 'put ''aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItYWN0aXZl''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtdGludDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtZGFyazp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dy''@;'; put 'put ''b3VuZC1pbnZlcnNlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci1zaGFkZTp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0yMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMjAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMDowIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0''@;'; put 'put ''ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwKTstLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0''@;'; put 'put ''cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0''@;'; put 'put ''ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWluZm8tYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1pbmZvLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nl''@;'; put 'put ''c3MtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13''@;'; put 'put ''YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5p''@;'; put 'put ''bmctY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1jbGlj''@;'; put 'put ''azp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRy''@;'; put 'put ''YWwtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24taW52ZXJzZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXRpbnQ6dHJhbnNwYXJlbnQ7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm86dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzczp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi02MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1zaGFkZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''YW5nZXItdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQt''@;'; put 'put ''OTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''bmV1dHJhbC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC10aW50OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dXRpbGl0eS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1i''@;'; put 'put ''bHVlLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxp''@;'; put 'put ''Z2h0LWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1henVyZS0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5''@;'; put 'put ''LWdyZWVuLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9j''@;'; put 'put ''aHJlLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVk''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXV0aWxpdHktdGFuZ2VyaW5lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS1z''@;'; put 'put ''aGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xl''@;'; put 'put ''dC0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1ib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0yLXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTM6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMy1hcXVhOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTQtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJh''@;'; put 'put ''bC01OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcGluay00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTUtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC02OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS00MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTYtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTctdmlvbGV0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtODp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMCk7LS1jZHMtYWxpYXMtdml6LWdl''@;'; put 'put ''bmVyYWwtOTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTEtYXF1YTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xMzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzLXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItZ3JlZW4tMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwt''@;'; put 'put ''MTUtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMjAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJp''@;'; put 'put ''dHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1mcmVlLXNwYWNlLWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1''@;'; put 'put ''Y3Rpb24tODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''c2VxdWVudGlhbC1ibHVlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTQwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1i''@;'; put 'put ''bHVlLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci12aW9sZXQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLXZpb2xldC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTcwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItdmlvbGV0LTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9j''@;'; put 'put ''aHJlLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS01MDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwt''@;'; put 'put ''b2NocmUtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTEwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWFxdWEtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1hcXVhLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTYwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEt''@;'; put 'put ''MjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVu''@;'; put 'put ''dGlhbC1ncmVlbi01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMjAwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWdyZWVuLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi05MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVk''@;'; put 'put ''LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlh''@;'; put 'put ''bC1yZWQtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItcmVkLTUwKX06cm9vdHstLWNkcy1nbG9iYWwtYmFzZToyMH1odG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGluZS1oZWlnaHQ6MS4xNTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9YXJ0aWNsZSxhc2lk''@;'; put 'put ''ZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsbWFpbixtZW51LG5hdixzZWN0aW9uLHN1bW1hcnl7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMscHJvZ3Jlc3MsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6''@;'; put 'put ''bm9uZTtoZWlnaHQ6MH1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX10ZW1wbGF0ZSxbaGlkZGVuXXtkaXNwbGF5Om5vbmV9YXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXA6b2JqZWN0c31hOmFjdGl2ZSxhOmhvdmVye291''@;'; put 'put ''dGxpbmUtd2lkdGg6MH1hYmJyW3RpdGxlXXtib3JkZXItYm90dG9tOm5vbmU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWIsc3Ryb25ne2ZvbnQtd2VpZ2h0''@;'; put 'put ''OmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWRmbntmb250LXN0eWxlOml0YWxpY31oMXtmb250LXNpemU6MmVtO21hcmdpbjouNjdlbSAwfW1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmYwO2NvbG9yOiMwMDB9c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6''@;'; put 'put ''ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfWltZ3tib3JkZXItc3R5bGU6bm9uZX1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59Y29kZSxrYmQscHJlLHNhbXB7''@;'; put 'put ''Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19ZmlndXJle21hcmdpbjoxZW0gNDBweH1ocntib3gtc2l6aW5nOmNvbnRlbnQtYm94O2hlaWdodDowO292ZXJmbG93OnZpc2libGV9YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtmb250OmluaGVyaXQ7bWFy''@;'; put 'put ''Z2luOjB9dGV4dGFyZWF7bGluZS1oZWlnaHQ6MS4xNX1vcHRncm91cHtmb250LXdlaWdodDo3MDB9YnV0dG9uLGlucHV0e292ZXJmbG93OnZpc2libGV9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixodG1sIFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBl''@;'; put 'put ''PXN1Ym1pdF17LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9YnV0dG9uXTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1yZXNldF06Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9c3VibWl0XTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5''@;'; put 'put ''bGU6bm9uZTtwYWRkaW5nOjB9ZmllbGRzZXR7Ym9yZGVyOjFweCBzb2xpZCBzaWx2ZXI7bWFyZ2luOjAgMnB4O3BhZGRpbmc6LjM1ZW0gLjYyNWVtIC43NWVtfWxlZ2VuZHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtkaXNwbGF5OnRhYmxlO21heC13aWR0aDoxMDAlO3Bh''@;'; put 'put ''ZGRpbmc6MDt3aGl0ZS1zcGFjZTpub3JtYWx9dGV4dGFyZWF7b3ZlcmZsb3c6YXV0b31bdHlwZT1jaGVja2JveF0sW3R5cGU9cmFkaW9de2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixbdHlwZT1udW1iZXJd''@;'; put 'put ''Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fVt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sW3R5cGU9c2VhcmNoXTo6LXdl''@;'; put 'put ''YmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTpyb290ey0tY2xyLWNvbG9yLW5ldXRyYWwtMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1j''@;'; put 'put ''bHItY29sb3ItbmV1dHJhbC01MDpoc2woMTk4LCAwJSwgOTglKTstLWNsci1jb2xvci1uZXV0cmFsLTEwMDpoc2woMTk4LCAwJSwgOTUlKTstLWNsci1jb2xvci1uZXV0cmFsLTIwMDpoc2woMTk4LCAwJSwgOTElKTstLWNsci1jb2xvci1uZXV0cmFsLTMwMDpoc2woMTk4LCAwJSwgODclKTst''@;'; put 'put ''LWNsci1jb2xvci1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgODAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwMDpoc2woMTk4LCAwJSwgNzAlKTstLWNsci1jb2xvci1uZXV0cmFsLTYwMDpoc2woMTk4LCAwJSwgNTUlKTstLWNsci1jb2xvci1uZXV0cmFsLTcwMDpoc2woMTk4LCAwJSwgNDAl''@;'; put 'put ''KTstLWNsci1jb2xvci1uZXV0cmFsLTgwMDpoc2woMTk4LCAwJSwgMjclKTstLWNsci1jb2xvci1uZXV0cmFsLTkwMDpoc2woMTk4LCAwJSwgMjAlKTstLWNsci1jb2xvci1uZXV0cmFsLTEwMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTA6aHNsKDE5OCwgMCUs''@;'; put 'put ''IDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMzAwOmhz''@;'; put 'put ''bCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1u''@;'; put 'put ''ZXV0cmFsLTcwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtOTAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDA6aHNsKDE5OCwgMCUsIDEw''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLWFjdGlvbi01MDpoc2woMTk4LCA4MyUsIDk0JSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDpoc2woMTk4LCA4MSUsIDg4JSk7LS1jbHItY29sb3ItYWN0aW9uLTIwMDpoc2woMTk4LCA3OCUsIDc4JSk7LS1jbHItY29sb3ItYWN0aW9uLTMwMDpoc2woMTk4LCA2OSUs''@;'; put 'put ''IDY5JSk7LS1jbHItY29sb3ItYWN0aW9uLTQwMDpoc2woMTk4LCA2NiUsIDU3JSk7LS1jbHItY29sb3ItYWN0aW9uLTUwMDpoc2woMTk4LCA4MCUsIDQ2JSk7LS1jbHItY29sb3ItYWN0aW9uLTYwMDpoc2woMTk4LCAxMDAlLCAzMiUpOy0tY2xyLWNvbG9yLWFjdGlvbi03MDA6aHNsKDE5OCwg''@;'; put 'put ''MTAwJSwgMjglKTstLWNsci1jb2xvci1hY3Rpb24tODAwOmhzbCgxOTgsIDEwMCUsIDI0JSk7LS1jbHItY29sb3ItYWN0aW9uLTkwMDpoc2woMTk4LCAxMDAlLCAyMSUpOy0tY2xyLWNvbG9yLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDEwMCUsIDE1JSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUw''@;'; put 'put ''OmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0yMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0''@;'; put 'put ''aW9uLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi01MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNjAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1hY3Rpb24tODAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tOTAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDpoc2wo''@;'; put 'put ''MjgyLCAxMDAlLCA5NSUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMTAwOmhzbCgyODIsIDU5JSwgODclKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMjgyLCA1MSUsIDc4JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0zMDA6aHNsKDI4MiwgNDUl''@;'; put 'put ''LCA3MCUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNDAwOmhzbCgyODIsIDQ0JSwgNjIlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwMDpoc2woMjgyLCA0MyUsIDU0JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi02MDA6aHNsKDI4MiwgNTAlLCA0NSUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgyODIsIDY5JSwgMzclKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTgwMDpoc2woMjgyLCAxMDAlLCAyOSUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tOTAwOmhzbCgyODIsIDEwMCUsIDIyJSk7LS1jbHItY29s''@;'; put 'put ''b3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDAwOmhzbCgyODIsIDEwMCUsIDE0JSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24t''@;'; put 'put ''c2Vjb25kYXJ5LWFjdGlvbi0yMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25k''@;'; put 'put ''YXJ5LWFjdGlvbi01MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNjAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTcwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25k''@;'; put 'put ''YXJ5LWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tOTAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLWRhbmdlci01''@;'; put 'put ''MDpoc2woOSwgMTAwJSwgOTclKTstLWNsci1jb2xvci1kYW5nZXItMTAwOmhzbCg5LCA5NSUsIDkyJSk7LS1jbHItY29sb3ItZGFuZ2VyLTIwMDpoc2woOSwgOTElLCA4NiUpOy0tY2xyLWNvbG9yLWRhbmdlci0zMDA6aHNsKDksIDgzJSwgNzYlKTstLWNsci1jb2xvci1kYW5nZXItNDAwOmhz''@;'; put 'put ''bCg5LCA4NSUsIDY3JSk7LS1jbHItY29sb3ItZGFuZ2VyLTUwMDpoc2woOSwgODglLCA2MSUpOy0tY2xyLWNvbG9yLWRhbmdlci02MDA6aHNsKDksIDkyJSwgNTAlKTstLWNsci1jb2xvci1kYW5nZXItNzAwOmhzbCg5LCAxMDAlLCA0MyUpOy0tY2xyLWNvbG9yLWRhbmdlci04MDA6aHNsKDks''@;'; put 'put ''IDEwMCUsIDM4JSk7LS1jbHItY29sb3ItZGFuZ2VyLTkwMDpoc2woOSwgMTAwJSwgMzAlKTstLWNsci1jb2xvci1kYW5nZXItMTAwMDpoc2woOSwgMTAwJSwgMjAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMTAwOmhz''@;'; put 'put ''bCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2Vy''@;'; put 'put ''LTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItODAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xv''@;'; put 'put ''ci1vbi1kYW5nZXItOTAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itd2FybmluZy01MDpoc2woNDgsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itd2FybmluZy0xMDA6aHNsKDQ4LCAxMDAlLCA4OSUp''@;'; put 'put ''Oy0tY2xyLWNvbG9yLXdhcm5pbmctMjAwOmhzbCg0OCwgMTAwJSwgODMlKTstLWNsci1jb2xvci13YXJuaW5nLTMwMDpoc2woNDgsIDk4JSwgNzIlKTstLWNsci1jb2xvci13YXJuaW5nLTQwMDpoc2woNDgsIDk0JSwgNTclKTstLWNsci1jb2xvci13YXJuaW5nLTUwMDpoc2woNDgsIDk1JSwg''@;'; put 'put ''NDglKTstLWNsci1jb2xvci13YXJuaW5nLTYwMDpoc2woNDYsIDEwMCUsIDQ1JSk7LS1jbHItY29sb3Itd2FybmluZy03MDA6aHNsKDQzLCAxMDAlLCA0MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctODAwOmhzbCg0MSwgMTAwJSwgMzQlKTstLWNsci1jb2xvci13YXJuaW5nLTkwMDpoc2woMzgs''@;'; put 'put ''IDEwMCUsIDI4JSk7LS1jbHItY29sb3Itd2FybmluZy0xMDAwOmhzbCgzMSwgMTAwJSwgMTklKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5n''@;'; put 'put ''LTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LW9uLXdhcm5pbmctNjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy03MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTgwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctOTAwOmhzbCgxOTgsIDAlLCAwJSk7''@;'; put 'put ''LS1jbHItY29sb3Itb24td2FybmluZy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zdWNjZXNzLTUwOmhzbCg5MywgNTIlLCA4OCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMTAwOmhzbCg5MywgNTglLCA3NSUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMjAwOmhzbCg5MywgNzYl''@;'; put 'put ''LCA0OSUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMzAwOmhzbCg5MywgNzclLCA0NCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNDAwOmhzbCg5MywgNzklLCA0MCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTAwOmhzbCg5MywgNjclLCAzOCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNjAwOmhzbCg5Mywg''@;'; put 'put ''ODUlLCAzMiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNzAwOmhzbCg5MywgMTAwJSwgMjYlKTstLWNsci1jb2xvci1zdWNjZXNzLTgwMDpoc2woOTMsIDEwMCUsIDIxJSk7LS1jbHItY29sb3Itc3VjY2Vzcy05MDA6aHNsKDkzLCAxMDAlLCAxNiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMTAwMDpo''@;'; put 'put ''c2woOTMsIDEwMCUsIDEzJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0yMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1z''@;'; put 'put ''dWNjZXNzLTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy01MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTYwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xy''@;'; put 'put ''LWNvbG9yLW9uLXN1Y2Nlc3MtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMTAwMDpoc2wo''@;'; put 'put ''MTk4LCAwJSwgMTAwJSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZ3JpZC1ndXR0ZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1ncmlkLWNvbnRhaW5lci1wYWRkaW5nOmNhbGModmFyKC0tY2xyLWdyaWQtZ3V0dGVyLXdpZHRoKSAqIC41KTstLWNsci1ncmlkLWNv''@;'; put 'put ''bHVtbi1wYWRkaW5nOmNhbGModmFyKC0tY2xyLWdyaWQtZ3V0dGVyLXdpZHRoKSAqIC41KTstLWNsci1ncmlkLXJvdy1tYXJnaW46Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLS41KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jbG9zZS1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1jbG9zZS1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jbG9zZS1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xv''@;'; put 'put ''ci1hY3RpdmUpOy0tY2xyLWJhc2Vmb250LXNpemU6MTI1JTstLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0x''@;'; put 'put ''MDApOy0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kKTstLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItZ2xv''@;'; put 'put ''YmFsLW9uLXNlbGVjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci1nbG9iYWwtaG92ZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWdsb2JhbC1jb250ZW50''@;'; put 'put ''LWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZ2xvYmFsLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1nbG9iYWwtc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLXN1Y2Nlc3MpOy0tY2xyLWdsb2JhbC1lcnJvci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcil9OnJvb3R7LS1jbHItcG9wb3Zlci1ib3gtc2hhZG93LWNvbG9yOnJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1tZXRyb3BvbGlz''@;'; put 'put ''LWZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmOy0tY2xyLWJvZHktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udDp2YXIoLS1jbHItYm9keS1mb250KTstLWNsci1k''@;'; put 'put ''aXNwbGF5LWZvbnQ6dmFyKC0tY2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHkpOy0tY2xyLWZvbnQtd2VpZ2h0LWxpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0KTstLWNsci1mb250LXdlaWdodC1yZWd1bGFyOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLWZvbnQtd2VpZ2h0LXNlbWlib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb250LXdlaWdodC1ib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJv''@;'; put 'put ''bGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQpOy0tY2xyLWgxLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDEtZm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplKTstLWNsci1oMS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0KTstLWNsci1oMS1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oMS1saW5lLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTstLWNsci1oMS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nKTstLWNsci1oMi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jb2xvci0zMDApOy0tY2xyLWgyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemUpOy0tY2xyLWgyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtd2VpZ2h0KTstLWNsci1oMi1mb250''@;'; put 'put ''LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oMi1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1saW5lLWhlaWdodCk7LS1jbHItaDItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtbGV0''@;'; put 'put ''dGVyLXNwYWNpbmcpOy0tY2xyLWgzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDMtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSk7LS1jbHItaDMtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQpOy0tY2xyLWgzLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgzLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0KTstLWNsci1oMy1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oNC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNp''@;'; put 'put ''emUpOy0tY2xyLWg0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWg0LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg0LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY3Rpb24tbGluZS1oZWlnaHQpOy0tY2xyLWg0LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWg1LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDUtZm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTstLWNsci1oNS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1oNS1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1m''@;'; put 'put ''b250KTstLWNsci1oNS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1oNS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTstLWNsci1oNi1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZSk7LS1jbHItaDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1m''@;'; put 'put ''b250LXdlaWdodCk7LS1jbHItaDYtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDYtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCk7LS1jbHItaDYtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wMC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAwLWZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAwLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAwLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAxLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDEtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTstLWNsci1wMS1mb250LXdlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTstLWNsci1wMS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTstLWNsci1wMS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKTstLWNsci1wMi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXAyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wMi1mb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLXAyLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItcDItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNs''@;'; put 'put ''ci1wMy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXAzLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wMy1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXAzLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItcDMtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNC1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1p''@;'; put 'put ''Ym9sZCk7LS1jbHItcDQtbGluZS1oZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLXA0LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDUtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7LS1jbHItcDUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQt''@;'; put 'put ''d2VpZ2h0KTstLWNsci1wNS1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXA1LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDYtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNi1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpOy0tY2xyLXA2LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpOy0tY2xyLXA2LWxp''@;'; put 'put ''bmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xyLXA2LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA3LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDctZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpOy0tY2xyLXA3LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7''@;'; put 'put ''LS1jbHItcDctbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1wNy1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA4LWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDgtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpOy0tY2xyLXA4LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxs''@;'; put 'put ''Y2FwdGlvbi1mb250LXdlaWdodCk7LS1jbHItcDgtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1wOC1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpOy0tY2xyLWxpc3QtaXRlbS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jbHItYWxpZ24tYmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tdG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRh''@;'; put 'put ''bnR9LmNsci1hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlIWltcG9ydGFudH0uY2xyLWFsaWduLWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b20haW1wb3J0YW50fS5jbHItYWxpZ24tdGV4dC1ib3R0b217dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b20haW1wb3J0YW50fS5j''@;'; put 'put ''bHItYWxpZ24tdGV4dC10b3B7dmVydGljYWwtYWxpZ246dGV4dC10b3AhaW1wb3J0YW50fS5jbHItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9LmNsci1kaXNwbGF5LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1p''@;'; put 'put ''bmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNv''@;'; put 'put ''bHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC13cmFwe2ZsZXgtd3JhcDp3''@;'; put 'put ''cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LWdy''@;'; put 'put ''b3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1w''@;'; put 'put ''b3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXN0YXJ0''@;'; put 'put ''e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtYmFzZWxpbmV7''@;'; put 'put ''YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQt''@;'; put 'put ''ZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1h''@;'; put 'put ''bGlnbi1jb250ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5j''@;'; put 'put ''bHItYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1z''@;'; put 'put ''ZWxmLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtc20tcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4t''@;'; put 'put ''cmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWZsZXgtc20tZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc20tc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1zdHJldGNoe2FsaWduLWl0ZW1z''@;'; put 'put ''OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWNl''@;'; put 'put ''bnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LW1kLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1tZC1jb2x1bW57ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1k''@;'; put 'put ''LXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1tZC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtZmlsbHtmbGV4OjEgMSBh''@;'; put 'put ''dXRvIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXNocmluay0x''@;'; put 'put ''e2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3Rp''@;'; put 'put ''ZnktY29udGVudC1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtYXJvdW5ke2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQt''@;'; put 'put ''Y2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''Y29udGVudC1tZC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtc3Ry''@;'; put 'put ''ZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWVu''@;'; put 'put ''ZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLXN0''@;'; put 'put ''cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZs''@;'; put 'put ''ZXgtbGctcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1sZy1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jv''@;'; put 'put ''dy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWxnLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXJ7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24taXRlbXMtbGctc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbGctY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdGFydHthbGlnbi1jb250ZW50''@;'; put 'put ''OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWJl''@;'; put 'put ''dHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1w''@;'; put 'put ''b3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWFsaWduLXNlbGYtbGctY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9y''@;'; put 'put ''dGFudH19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0''@;'; put 'put ''aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgteGwtbm93cmFwe2ZsZXgtd3Jh''@;'; put 'put ''cDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1mbGV4LXhsLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1zdGFydHtqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''anVzdGlmeS1jb250ZW50LXhsLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLXN0YXJ0e2Fs''@;'; put 'put ''aWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtYmFz''@;'; put 'put ''ZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFs''@;'; put 'put ''aWduLWNvbnRlbnQteGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0''@;'; put 'put ''d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtYXV0''@;'; put 'put ''b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWNlbnRlcnth''@;'; put 'put ''bGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fS5jbHItZmxleC14cy1maXJzdHtvcmRl''@;'; put 'put ''cjotMX0uY2xyLWZsZXgteHMtbGFzdHtvcmRlcjoxfS5jbHItZmxleC14cy11bm9yZGVyZWR7b3JkZXI6MH0uY2xyLWZsZXgtaXRlbXMteHMtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0''@;'; put 'put ''ZW1zLXhzLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH0uY2xyLWZsZXgteHMtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgteHMtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC14cy1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH0uY2xyLWZsZXgtaXRl''@;'; put 'put ''bXMteHMtbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteHMtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtYXJvdW5ke2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXhzLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1zbS1sYXN0e29yZGVyOjF9LmNs''@;'; put 'put ''ci1mbGV4LXNtLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXNtLWJv''@;'; put 'put ''dHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXNtLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtc20tYm90dG9te2FsaWduLXNlbGY6ZmxleC1l''@;'; put 'put ''bmR9fUBtZWRpYShtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1pdGVtcy1zbS1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtc20tcmlnaHR7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1zbS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LW1kLWZp''@;'; put 'put ''cnN0e29yZGVyOi0xfS5jbHItZmxleC1tZC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LW1kLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtaXRlbXMtbWQtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLW1pZGRs''@;'; put 'put ''ZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLW1kLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LW1kLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LW1kLW1pZGRsZXthbGlnbi1zZWxmOmNl''@;'; put 'put ''bnRlcn0uY2xyLWZsZXgtbWQtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYShtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1pdGVtcy1tZC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNl''@;'; put 'put ''bnRlcn0uY2xyLWZsZXgtaXRlbXMtbWQtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vl''@;'; put 'put ''bn19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1sZy1sYXN0e29yZGVyOjF9LmNsci1mbGV4LWxnLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtaXRlbXMtbGctdG9we2FsaWdu''@;'; put 'put ''LWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLWxnLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLWxnLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLXRvcHthbGlnbi1zZWxmOmZs''@;'; put 'put ''ZXgtc3RhcnR9LmNsci1mbGV4LWxnLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtbGctYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5j''@;'; put 'put ''bHItZmxleC1pdGVtcy1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbGctcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRl''@;'; put 'put ''bXMtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgteGwtbGFzdHtvcmRlcjoxfS5jbHItZmxleC14bC11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhKG1p''@;'; put 'put ''bi13aWR0aDoxMjAwcHgpey5jbHItZmxleC1pdGVtcy14bC10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteGwtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEobWlu''@;'; put 'put ''LXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXhsLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteGwtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWZs''@;'; put 'put ''ZXgtaXRlbXMteGwtbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhsLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteGwtYXJv''@;'; put 'put ''dW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXhsLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fS5jbHItZmxvYXQteHMtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhzLXJpZ2h0e2Zsb2F0OnJpZ2h0IWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsb2F0LXhzLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbG9hdC1zbS1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtc20tcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQt''@;'; put 'put ''c20tbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbG9hdC1tZC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtbm9uZXtmbG9hdDpub25l''@;'; put 'put ''IWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbG9hdC1sZy1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtbGctcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQtbGctbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlh''@;'; put 'put ''KG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxvYXQteGwtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhsLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhsLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fS5jbHItaW52aXNpYmxle3Zpc2liaWxp''@;'; put 'put ''dHk6aGlkZGVuIWltcG9ydGFudH0uY2xyLWhpZGRlbi14cy11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYShtYXgtd2lkdGg6NTc1Ljk4cHgpey5jbHItaGlkZGVuLXhzLWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1oaWRk''@;'; put 'put ''ZW4tc20tdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1heC13aWR0aDo3NjcuOThweCl7LmNsci1oaWRkZW4tc20tZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KXsuY2xyLWhpZGRlbi1tZC11cHtkaXNwbGF5Om5vbmUhaW1wb3J0''@;'; put 'put ''YW50fX1AbWVkaWEobWF4LXdpZHRoOjk5MS45OHB4KXsuY2xyLWhpZGRlbi1tZC1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpey5jbHItaGlkZGVuLWxnLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtYXgtd2lkdGg6MTE5OS45''@;'; put 'put ''OHB4KXsuY2xyLWhpZGRlbi1sZy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWhpZGRlbi14bC11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0uY2xyLWhpZGRlbi14bC1kb3duLC5jbHItdmlzaWJsZS1wcmludC1ibG9ja3tkaXNw''@;'; put 'put ''bGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsuY2xyLXZpc2libGUtcHJpbnQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9fS5jbHItdmlzaWJsZS1wcmludC1pbmxpbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LmNsci12aXNpYmxlLXByaW50LWlu''@;'; put 'put ''bGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fS5jbHItdmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LmNsci12aXNpYmxlLXByaW50LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9fUBt''@;'; put 'put ''ZWRpYSBwcmludHsuY2xyLWhpZGRlbi1wcmludHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0uY2xyLWNvbnRhaW5lcnt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmcpO3BhZGRpbmctbGVmdDp2YXIoLS1jbHItZ3JpZC1jb250YWluZXIt''@;'; put 'put ''cGFkZGluZyk7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30uY2xyLXJvd3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1ncmlkLXJvdy1tYXJnaW4pO21hcmdpbi1sZWZ0OnZhcigtLWNsci1ncmlkLXJvdy1tYXJnaW4pfS5jbHIt''@;'; put 'put ''bm8tZ3V0dGVyc3ttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDowfS5jbHItbm8tZ3V0dGVycz4uY2xyLWNvbCwuY2xyLW5vLWd1dHRlcnM+W2NsYXNzKj1jbHItY29sLV17cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowfS5jbHItY29sLXhsLC5jbHItY29sLXhsLWF1dG8sLmNsci1j''@;'; put 'put ''b2wteGwtMTIsLmNsci1jb2wteGwtMTEsLmNsci1jb2wteGwtMTAsLmNsci1jb2wteGwtOSwuY2xyLWNvbC14bC04LC5jbHItY29sLXhsLTcsLmNsci1jb2wteGwtNiwuY2xyLWNvbC14bC01LC5jbHItY29sLXhsLTQsLmNsci1jb2wteGwtMywuY2xyLWNvbC14bC0yLC5jbHItY29sLXhsLTEs''@;'; put 'put ''LmNsci1jb2wtbGcsLmNsci1jb2wtbGctYXV0bywuY2xyLWNvbC1sZy0xMiwuY2xyLWNvbC1sZy0xMSwuY2xyLWNvbC1sZy0xMCwuY2xyLWNvbC1sZy05LC5jbHItY29sLWxnLTgsLmNsci1jb2wtbGctNywuY2xyLWNvbC1sZy02LC5jbHItY29sLWxnLTUsLmNsci1jb2wtbGctNCwuY2xyLWNv''@;'; put 'put ''bC1sZy0zLC5jbHItY29sLWxnLTIsLmNsci1jb2wtbGctMSwuY2xyLWNvbC1tZCwuY2xyLWNvbC1tZC1hdXRvLC5jbHItY29sLW1kLTEyLC5jbHItY29sLW1kLTExLC5jbHItY29sLW1kLTEwLC5jbHItY29sLW1kLTksLmNsci1jb2wtbWQtOCwuY2xyLWNvbC1tZC03LC5jbHItY29sLW1kLTYs''@;'; put 'put ''LmNsci1jb2wtbWQtNSwuY2xyLWNvbC1tZC00LC5jbHItY29sLW1kLTMsLmNsci1jb2wtbWQtMiwuY2xyLWNvbC1tZC0xLC5jbHItY29sLXNtLC5jbHItY29sLXNtLWF1dG8sLmNsci1jb2wtc20tMTIsLmNsci1jb2wtc20tMTEsLmNsci1jb2wtc20tMTAsLmNsci1jb2wtc20tOSwuY2xyLWNv''@;'; put 'put ''bC1zbS04LC5jbHItY29sLXNtLTcsLmNsci1jb2wtc20tNiwuY2xyLWNvbC1zbS01LC5jbHItY29sLXNtLTQsLmNsci1jb2wtc20tMywuY2xyLWNvbC1zbS0yLC5jbHItY29sLXNtLTEsLmNsci1jb2wsLmNsci1jb2wtYXV0bywuY2xyLWNvbC0xMiwuY2xyLWNvbC0xMSwuY2xyLWNvbC0xMCwu''@;'; put 'put ''Y2xyLWNvbC05LC5jbHItY29sLTgsLmNsci1jb2wtNywuY2xyLWNvbC02LC5jbHItY29sLTUsLmNsci1jb2wtNCwuY2xyLWNvbC0zLC5jbHItY29sLTIsLmNsci1jb2wtMXt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6LjA1cmVtO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWdyaWQtY29sdW1uLXBh''@;'; put 'put ''ZGRpbmcpO3BhZGRpbmctbGVmdDp2YXIoLS1jbHItZ3JpZC1jb2x1bW4tcGFkZGluZyl9LmNsci1jb2x7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLTF7''@;'; put 'put ''ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLTR7ZmxleDowIDAg''@;'; put 'put ''MzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wtN3tmbGV4OjAgMCA1OC4zMzMz''@;'; put 'put ''MzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNvbC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMz''@;'; put 'put ''JTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVy''@;'; put 'put ''LWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci0we29yZGVyOjB9LmNsci1vcmRlci0xe29yZGVyOjF9LmNsci1vcmRlci0ye29yZGVyOjJ9LmNsci1vcmRlci0ze29yZGVyOjN9LmNsci1vcmRlci00e29yZGVyOjR9LmNsci1vcmRlci01e29yZGVyOjV9LmNsci1vcmRlci02e29yZGVyOjZ9LmNs''@;'; put 'put ''ci1vcmRlci03e29yZGVyOjd9LmNsci1vcmRlci04e29yZGVyOjh9LmNsci1vcmRlci05e29yZGVyOjl9LmNsci1vcmRlci0xMHtvcmRlcjoxMH0uY2xyLW9yZGVyLTExe29yZGVyOjExfS5jbHItb3JkZXItMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMz''@;'; put 'put ''MzMlfS5jbHItb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zm''@;'; put 'put ''c2V0LTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC0xMHttYXJnaW4tbGVmdDo4My4z''@;'; put 'put ''MzMzMzMzMzMzJX0uY2xyLW9mZnNldC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWNvbC1zbXtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtc20tYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRo''@;'; put 'put ''OmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtc20tMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTN7ZmxleDow''@;'; put 'put ''IDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtc20tNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tNntmbGV4''@;'; put 'put ''OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC1zbS03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS05e2Zs''@;'; put 'put ''ZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXNtLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20t''@;'; put 'put ''MTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXNtLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItc20tbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXNtLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXNtLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXNtLTJ7b3JkZXI6Mn0uY2xy''@;'; put 'put ''LW9yZGVyLXNtLTN7b3JkZXI6M30uY2xyLW9yZGVyLXNtLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXNtLTV7b3JkZXI6NX0uY2xyLW9yZGVyLXNtLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXNtLTd7b3JkZXI6N30uY2xyLW9yZGVyLXNtLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXNtLTl7b3JkZXI6OX0u''@;'; put 'put ''Y2xyLW9yZGVyLXNtLTEwe29yZGVyOjEwfS5jbHItb3JkZXItc20tMTF7b3JkZXI6MTF9LmNsci1vcmRlci1zbS0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1zbS0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtc20tMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNt''@;'; put 'put ''LTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtc20tNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNt''@;'; put 'put ''LTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXNtLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1zbS0xMHttYXJnaW4t''@;'; put 'put ''bGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7LmNsci1jb2wtbWR7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLW1kLWF1dG97ZmxleDow''@;'; put 'put ''IDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLW1kLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNv''@;'; put 'put ''bC1tZC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLW1kLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHIt''@;'; put 'put ''Y29sLW1kLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wtbWQtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNs''@;'; put 'put ''ci1jb2wtbWQtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNvbC1tZC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2Njcl''@;'; put 'put ''fS5jbHItY29sLW1kLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci1tZC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLW1kLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1tZC0we29yZGVyOjB9LmNsci1vcmRlci1tZC0xe29yZGVyOjF9LmNsci1vcmRlci1tZC0y''@;'; put 'put ''e29yZGVyOjJ9LmNsci1vcmRlci1tZC0ze29yZGVyOjN9LmNsci1vcmRlci1tZC00e29yZGVyOjR9LmNsci1vcmRlci1tZC01e29yZGVyOjV9LmNsci1vcmRlci1tZC02e29yZGVyOjZ9LmNsci1vcmRlci1tZC03e29yZGVyOjd9LmNsci1vcmRlci1tZC04e29yZGVyOjh9LmNsci1vcmRlci1t''@;'; put 'put ''ZC05e29yZGVyOjl9LmNsci1vcmRlci1tZC0xMHtvcmRlcjoxMH0uY2xyLW9yZGVyLW1kLTExe29yZGVyOjExfS5jbHItb3JkZXItbWQtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbWQtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LW1kLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0u''@;'; put 'put ''Y2xyLW9mZnNldC1tZC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LW1kLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LW1kLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0u''@;'; put 'put ''Y2xyLW9mZnNldC1tZC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC1tZC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQt''@;'; put 'put ''bWQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYShtaW4td2lkdGg6OTkycHgpey5jbHItY29sLWxne2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1s''@;'; put 'put ''Zy1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1sZy0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2''@;'; put 'put ''NjY2NyV9LmNsci1jb2wtbGctM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1sZy00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2''@;'; put 'put ''NjY2NjY3JX0uY2xyLWNvbC1sZy02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLWxnLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2''@;'; put 'put ''NjY2NjY2NjclfS5jbHItY29sLWxnLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtbGctMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5''@;'; put 'put ''MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItbGctZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1sZy1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItbGctMHtvcmRlcjowfS5jbHItb3JkZXItbGctMXtvcmRlcjoxfS5j''@;'; put 'put ''bHItb3JkZXItbGctMntvcmRlcjoyfS5jbHItb3JkZXItbGctM3tvcmRlcjozfS5jbHItb3JkZXItbGctNHtvcmRlcjo0fS5jbHItb3JkZXItbGctNXtvcmRlcjo1fS5jbHItb3JkZXItbGctNntvcmRlcjo2fS5jbHItb3JkZXItbGctN3tvcmRlcjo3fS5jbHItb3JkZXItbGctOHtvcmRlcjo4''@;'; put 'put ''fS5jbHItb3JkZXItbGctOXtvcmRlcjo5fS5jbHItb3JkZXItbGctMTB7b3JkZXI6MTB9LmNsci1vcmRlci1sZy0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLWxnLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LWxnLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1sZy0xe21hcmdpbi1sZWZ0Ojgu''@;'; put 'put ''MzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy0ze21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1sZy00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTV7bWFyZ2luLWxlZnQ6NDEu''@;'; put 'put ''NjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtbGctN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LWxnLTl7bWFyZ2luLWxlZnQ6NzUl''@;'; put 'put ''fS5jbHItb2Zmc2V0LWxnLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEobWluLXdpZHRoOjEyMDBweCl7LmNsci1jb2wteGx7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDox''@;'; put 'put ''MDAlfS5jbHItY29sLXhsLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLXhsLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13''@;'; put 'put ''aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLXhsLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4''@;'; put 'put ''LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wteGwtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTtt''@;'; put 'put ''YXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNvbC14bC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2''@;'; put 'put ''NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci14bC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLXhsLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci14bC0we29yZGVyOjB9LmNsci1vcmRlci14''@;'; put 'put ''bC0xe29yZGVyOjF9LmNsci1vcmRlci14bC0ye29yZGVyOjJ9LmNsci1vcmRlci14bC0ze29yZGVyOjN9LmNsci1vcmRlci14bC00e29yZGVyOjR9LmNsci1vcmRlci14bC01e29yZGVyOjV9LmNsci1vcmRlci14bC02e29yZGVyOjZ9LmNsci1vcmRlci14bC03e29yZGVyOjd9LmNsci1vcmRl''@;'; put 'put ''ci14bC04e29yZGVyOjh9LmNsci1vcmRlci14bC05e29yZGVyOjl9LmNsci1vcmRlci14bC0xMHtvcmRlcjoxMH0uY2xyLW9yZGVyLXhsLTExe29yZGVyOjExfS5jbHItb3JkZXIteGwtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQteGwtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LXhsLTF7''@;'; put 'put ''bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LXhsLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtNXtt''@;'; put 'put ''YXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC14bC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtOXtt''@;'; put 'put ''YXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQteGwtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fS5jbHItYnJlYWstcm93e3dpZHRoOjEwMCV9Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRl''@;'; put 'put ''ci1ib3h9dWwubGlzdC11bnN0eWxlZDpub3QoW2Nkcy1saXN0XSl7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlLXBvc2l0aW9uOm91dHNpZGV9dWwubGlzdC11bnN0eWxlZDpub3QoW2Nkcy1saXN0XSkgbGk6Om1hcmtlcntjb2xvcjp0cmFuc3BhcmVudH1saXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItbGlzdC1pdGVtLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfXVsOm5vdChbY2RzLWxpc3RdKSxvbDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjppbnNpZGU7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctbGVmdDowfXVsLmxpc3Q6bm90KFtjZHMtbGlzdF0pLG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pe2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYp''@;'; put 'put ''fXVsLmxpc3Q6bm90KFtjZHMtbGlzdF0pLmNvbXBhY3Q+bGksb2wubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saXttYXJnaW4tYm90dG9tOjB9dWw6bm90KC5saXN0LXVuc3R5bGVkKTpub3QoW2Nkcy1saXN0XSk+bGk+dWwubGlzdC11bnN0eWxlZCxvbDpub3QoW2Nkcy1saXN0XSk+''@;'; put 'put ''bGk+dWwubGlzdC11bnN0eWxlZHttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfWxpPnVsOm5vdChbY2RzLWxpc3RdKXttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX11bC5saXN0LWdyb3VwOm5vdChbY2RzLWxpc3RdKXttYXJn''@;'; put 'put ''aW4tdG9wOjB9dWw6bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2VyLG9sOm5vdChbY2RzLWxpc3RdKS5saXN0LXNwYWNlcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9cHJle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDB9cHJle2JvcmRlcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX1wcmUgY29kZXt3aGl0ZS1zcGFjZTpw''@;'; put 'put ''cmV9Y29kZS5jbHItY29kZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOjAgMH1oMTpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIo''@;'; put 'put ''LS1jbHItaDEtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWgxLWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jbHItaDEtbGV0dGVyLXNwYWNpbmcpfWgyOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMi1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgy''@;'; put 'put ''LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgyLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDItbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMi1sZXR0ZXItc3BhY2luZyl9aDM6''@;'; put 'put ''bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgzLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDMtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDMtZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jbHItaDMtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMy1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgzLWxldHRlci1zcGFjaW5nKX1oNDpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDQtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNC1mb250LXdlaWdodCk7''@;'; put 'put ''bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg0LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDQtbGV0dGVyLXNwYWNpbmcpfWg1Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5''@;'; put 'put ''OnZhcigtLWNsci1oNS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWg1LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg1LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg1LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDUtbGluZS1oZWlnaHQpO2xl''@;'; put 'put ''dHRlci1zcGFjaW5nOnZhcigtLWNsci1oNS1sZXR0ZXItc3BhY2luZyl9aDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg2LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItaDYtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDYtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDYtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg2LWxldHRlci1zcGFjaW5n''@;'; put 'put ''KX1ib2R5Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7Y29sb3I6dmFyKC0tY2xyLXAxLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLXAxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXAxLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItcDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1wMS1sZXR0ZXItc3BhY2luZyl9Ym9keSBwOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1w''@;'; put 'put ''MS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IC5wMDpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnAwOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2Zv''@;'; put 'put ''bnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDAtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDAtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMC1saW5lLWhlaWdodCk7bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAwLWxldHRlci1zcGFjaW5nKX1ib2R5IC5wMjpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnAyOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNs''@;'; put 'put ''ci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDItZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0t''@;'; put 'put ''Y2xyLXAyLWxldHRlci1zcGFjaW5nKX1ib2R5IC5wMzpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnAzOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItcDMtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDMtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDMtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMy1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAzLWxldHRlci1zcGFj''@;'; put 'put ''aW5nKX1ib2R5IC5wNDpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA0Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDQtY29sb3IpO2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jbHItcDQtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDQtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wNC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA0LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wNTpub3Qo''@;'; put 'put ''W2Nkcy10ZXh0XSksYm9keSBwLnA1Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHIt''@;'; put 'put ''cDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA1LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wNjpub3QoW2Nkcy10ZXh0XSksYm9keSBw''@;'; put 'put ''LnA2Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDYtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDYtZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jbHItcDYtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wNi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA2LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wNzpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA3Om5vdChbY2RzLXRleHRd''@;'; put 'put ''KXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDctZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHIt''@;'; put 'put ''cDctZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wNy1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA3LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wODpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA4Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDgtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDgtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDgtZm9udC13ZWlnaHQpO2xp''@;'; put 'put ''bmUtaGVpZ2h0OnZhcigtLWNsci1wOC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA4LWxldHRlci1zcGFjaW5nKX0udGV4dC1saWdodHtmb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtbGlnaHQpfS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHQhaW1w''@;'; put 'put ''b3J0YW50fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS50ZXh0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1odG1sOm5vdChbY2RzLXRleHRdKXtjb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtmb250LXNpemU6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpLzE2KjEwMCUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWxpbmstY29sb3IpOy0tY2xyLWxpbmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyKTstLWNsci1saW5rLXZpc2l0ZWQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkKTstLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyKX1odG1se2JveC1zaXppbmc6Ym9yZGVyLWJveH0qLDpi''@;'; put 'put ''ZWZvcmUsOmFmdGVye2JveC1zaXppbmc6aW5oZXJpdH1odG1sey1tcy1vdmVyZmxvdy1zdHlsZTpzY3JvbGxiYXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWltZ3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn1hLGFy''@;'; put 'put ''ZWEsYnV0dG9uLFtyb2xlPWJ1dHRvbl0saW5wdXQsbGFiZWwsc2VsZWN0LHN1bW1hcnksdGV4dGFyZWF7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbn1pbnB1dCxidXR0b24sc2VsZWN0LHRleHRhcmVhe2JvcmRlci1yYWRpdXM6MH1pbnB1dFt0eXBlPXJhZGlvXTpkaXNhYmxlZCxpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9aW5wdXRbdHlwZT1kYXRlXSxpbnB1dFt0eXBlPXRpbWVdLGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLGlucHV0W3R5cGU9bW9udGhdey13ZWJraXQtYXBwZWFyYW5jZTpsaXN0Ym94fXRleHRhcmVhe3Jlc2l6ZTp2''@;'; put 'put ''ZXJ0aWNhbH1maWVsZHNldHttaW4td2lkdGg6MDtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6aW5oZXJpdH1pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9W2hp''@;'; put 'put ''ZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH1kbHttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDoxcmVtfXRhYmxle2JvcmRlci1zcGFjaW5nOjB9LmNsci1zci1vbmx5e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUp''@;'; put 'put ''O3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uYWxlcnQtaWNvbiwuY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5nOjA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uYWxlcnQtaWNvbi5jbHItaWNvbi13YXJuaW5nLC5hbGVydC1pY29uLmljb24td2Fy''@;'; put 'put ''bmluZywuY2xyLWljb24uY2xyLWljb24td2FybmluZywuY2xyLWljb24uaWNvbi13YXJuaW5ne2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2JTIw''@;'; put 'put ''MjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmsl''@;'; put 'put ''MjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZlbm9kZCUzQmNsaXAtcnVsZSUzQWV2ZW5vZGQlM0JmaWxsJTNBJTIzNzQ3NDc0JTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZz''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlhbmdsZS1saW5lJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIw''@;'; put 'put ''Y2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzE4''@;'; put 'put ''JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwY3glM0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJGY2lyY2xlJTNFJTND''@;'; put 'put ''cGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0JTJDMjAuNTklMkM3LjZhMyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMwJTJDOC4yMSUyQzMw''@;'; put 'put ''SDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0tMS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFhMSUyQzElMkMwJTJDMCUyQzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43NCUyQzE3Ljk0QTEl''@;'; put 'put ''MkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3ZnJTNFKX0uYWxlcnQtaWNvbi5jbHItaWNvbi13YXJuaW5nLXdoaXRlLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5n''@;'; put 'put ''LXdoaXRle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVl''@;'; put 'put ''dCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTIwdHlwZSUzRCUyMnRleHQlMkZjc3Ml''@;'; put 'put ''MjIlM0UlMEElMDkuY2xyLWktb3V0bGluZSU3QmZpbGwtcnVsZSUzQWV2ZW5vZGQlM0JjbGlwLXJ1bGUlM0FldmVub2RkJTNCZmlsbCUzQWhzbCgxOTgsIDAlLCAxMDAlKSUzQiU3RCUzQyUyRnN0eWxlJTNFJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFZXhjbGFtYXRpb24tdHJpYW5nbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzIxLjMyYTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzEuMy0xLjNWMTRhMS4zJTJDMS4zJTJDMCUyQzElMkMwLTIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxOCUyQzIxLjMyWiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUl''@;'; put 'put ''MjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMiUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjI0LjI3JTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyUyMiUyMGQlM0QlMjJNMzAuMzMlMkMyNS41NCUyQzIwLjU5JTJDNy42YTMlMkMzJTJDMCUyQzAlMkMwLTUuMjclMkMwTDUuNTclMkMyNS41NEEzJTJDMyUyQzAlMkMwJTJDMCUyQzguMjElMkMzMEgyNy42OWEzJTJDMyUyQzAlMkMwJTJDMCUyQzIuNjQtNC40M1pt''@;'; put 'put ''LTEuNzglMkMxLjk0YTElMkMxJTJDMCUyQzAlMkMxLS44Ni40OUg4LjIxYTElMkMxJTJDMCUyQzAlMkMxLS44OC0xLjQ4TDE3LjA3JTJDOC41NWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNzYlMkMwbDkuNzQlMkMxNy45NEExJTJDMSUyQzAlMkMwJTJDMSUyQzI4LjU1JTJDMjcuNDhaJTIyJTNF''@;'; put 'put ''JTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpfS5hbGVydC1pY29uLmNsci12bXctbG9nbywuY2xyLWljb24uY2xyLXZtdy1sb2dve2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11''@;'; put 'put ''dGY4LCUzQ3N2ZyUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmcl''@;'; put 'put ''MkYxOTk5JTJGeGxpbmslMjIlM0UlMEElMjAlMjAlMjAlMjAlM0N0aXRsZSUzRXZtJTIwYnVnJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMkhlYWRlcnMlMjIlMjBzdHJva2UlM0QlMjJub25l''@;'; put 'put ''JTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMkNMLUhlYWRlcnMtU3BlY3MlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xh''@;'; put 'put ''dGUoLTI2Mi4wMDAwMDAlMkMlMjAtMTc1LjAwMDAwMCklMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjIwMSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyMzguMDAwMDAwJTJDJTIwMTYzLjAwMDAwMCklMjIlM0UlMEElMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjJ2bS1idWclMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUoMjQuNzAzMTI1JTJDJTIwMTIuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBpZCUzRCUyMlJlY3RhbmdsZS00MiUyMiUyMGZpbGwtb3BhY2l0eSUzRCUyMjAuMjUlMjIlMjBmaWxsJTNEJTIyJTIzREREREREJTIyJTIwb3BhY2l0eSUzRCUyMjAuNiUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjAlMjIlMjB3''@;'; put 'put ''aWR0aCUzRCUyMjM2JTIyJTIwaGVpZ2h0JTNEJTIyMzYlMjIlMjByeCUzRCUyMjMlMjIlM0UlM0MlMkZyZWN0JTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNy42Mzk0ODM3NiUyQzEzLjg3''@;'; put 'put ''NjI0MDIlMjBDNy4zMjI2NTMyNCUyQzEzLjIwOTcwODIlMjA2LjUzOTc4MTUyJTJDMTIuOTA4NTEzOSUyMDUuODA5MjMwNDIlMkMxMy4yMTk5MzQlMjBDNS4wNzc3MTA0MyUyQzEzLjUzMjI4MzclMjA0LjgwOTMyNDk1JTJDMTQuMzEwMzY5MSUyMDUuMTM5NzIwMDclMkMxNC45NzY5MDExJTIw''@;'; put 'put ''TDguMjA3MjU5NTQlMkMyMS4zNzQ0OTIzJTIwQzguNjg5NzcyMDclMkMyMi4zNzg0NzM1JTIwOS4xOTg0NDQ5MSUyQzIyLjkwMzcwNDQlMjAxMC4xNTI4MTIxJTJDMjIuOTAzNzA0NCUyMEMxMS4xNzIwOTU1JTJDMjIuOTAzNzA0NCUyMDExLjYxNjgyMDklMkMyMi4zMzEwNjMzJTIwMTIuMDk4''@;'; put 'put ''MzY0NiUyQzIxLjM3NDQ5MjMlMjBDMTIuMDk4MzY0NiUyQzIxLjM3NDQ5MjMlMjAxNC43NzQ0NjgyJTJDMTUuNzg0NzM0MSUyMDE0LjgwMTU5NzQlMkMxNS43MjYxNjg1JTIwQzE0LjgyODcyNjYlMkMxNS42NjY2NzMzJTIwMTQuOTE0OTU4OCUyQzE1LjQ4NjMyODYlMjAxNS4xODcyMTk5JTJD''@;'; put 'put ''MTUuNDg3MjU4MiUyMEMxNS40MTc4MTgyJTJDMTUuNDkwMDQ3JTIwMTUuNjEwNjI5NCUyQzE1LjY2NTc0MzclMjAxNS42MTA2Mjk0JTJDMTUuOTAxODY1MiUyMEwxNS42MTA2Mjk0JTJDMjEuMzY5ODQ0MyUyMEMxNS42MTA2Mjk0JTJDMjIuMjEyMDczJTIwMTYuMDk3OTg2NSUyQzIyLjkwMzcw''@;'; put 'put ''NDQlMjAxNy4wMzQ5MTM0JTJDMjIuOTAzNzA0NCUyMEMxNy45NzE4NDAzJTJDMjIuOTAzNzA0NCUyMDE4LjQ3ODU3NTQlMkMyMi4yMTIwNzMlMjAxOC40Nzg1NzU0JTJDMjEuMzY5ODQ0MyUyMEwxOC40Nzg1NzU0JTJDMTYuODk2NTUwMyUyMEMxOC40Nzg1NzU0JTJDMTYuMDMzODcwMiUyMDE5''@;'; put 'put ''LjEyMTkyNTQlMkMxNS40NzQyNDM2JTIwMjAuMDAwNzE4MyUyQzE1LjQ3NDI0MzYlMjBDMjAuODc4NTQyMyUyQzE1LjQ3NDI0MzYlMjAyMS40NjM3NTgzJTJDMTYuMDUyNDYyNCUyMDIxLjQ2Mzc1ODMlMkMxNi44OTY1NTAzJTIwTDIxLjQ2Mzc1ODMlMkMyMS4zNjk4NDQzJTIwQzIxLjQ2Mzc1''@;'; put 'put ''ODMlMkMyMi4yMTIwNzMlMjAyMS45NTIwODQyJTJDMjIuOTAzNzA0NCUyMDIyLjg4ODA0MjMlMkMyMi45MDM3MDQ0JTIwQzIzLjgyNDAwMDMlMkMyMi45MDM3MDQ0JTIwMjQuMzMyNjczMSUyQzIyLjIxMjA3MyUyMDI0LjMzMjY3MzElMkMyMS4zNjk4NDQzJTIwTDI0LjMzMjY3MzElMkMxNi44''@;'; put 'put ''OTY1NTAzJTIwQzI0LjMzMjY3MzElMkMxNi4wMzM4NzAyJTIwMjQuOTc1MDU0MyUyQzE1LjQ3NDI0MzYlMjAyNS44NTM4NDcyJTJDMTUuNDc0MjQzNiUyMEMyNi43MzA3MDIzJTJDMTUuNDc0MjQzNiUyMDI3LjMxNjg4NzElMkMxNi4wNTI0NjI0JTIwMjcuMzE2ODg3MSUyQzE2Ljg5NjU1MDMl''@;'; put 'put ''MjBMMjcuMzE2ODg3MSUyQzIxLjM2OTg0NDMlMjBDMjcuMzE2ODg3MSUyQzIyLjIxMjA3MyUyMDI3LjgwNTIxMzElMkMyMi45MDM3MDQ0JTIwMjguNzQyMTQlMkMyMi45MDM3MDQ0JTIwQzI5LjY3NzEyOTElMkMyMi45MDM3MDQ0JTIwMzAuMTg0ODMzMSUyQzIyLjIxMjA3MyUyMDMwLjE4NDgz''@;'; put 'put ''MzElMkMyMS4zNjk4NDQzJTIwTDMwLjE4NDgzMzElMkMxNi4yNzgzNTgyJTIwQzMwLjE4NDgzMzElMkMxNC40MDcwNDg4JTIwMjguNjE4MTIwNyUyQzEzLjA5NjI5NTYlMjAyNi43MzA3MDIzJTJDMTMuMDk2Mjk1NiUyMEMyNC44NDUyMjE2JTJDMTMuMDk2Mjk1NiUyMDIzLjY2NTEwMDYlMkMx''@;'; put 'put ''NC4zNDc1NTM2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjBDMjMuMDM3MjUzJTJDMTMuNTY2Njc5MyUyMDIyLjE3MjAyNDclMkMxMy4wOTcyMjUyJTIwMjAuNzA4OTg0NyUyQzEzLjA5NzIyNTIlMjBDMTkuMTY0NTU3JTJDMTMuMDk3MjI1MiUyMDE3LjgxMjk0MDYlMkMxNC4zNDc1NTM2''@;'; put 'put ''JTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjBDMTcuMTg0MTI0MSUyQzEzLjU2NjY3OTMlMjAxNi4xMTU0MjY3JTJDMTMuMDk3MjI1MiUyMDE1LjIzMDgyMDQlMkMxMy4wOTcyMjUyJTIwQzEzLjg2MTc2MzglMkMxMy4wOTcyMjUyJTIwMTIuNzc0NjU3MiUyQzEzLjY3NTQ0NCUyMDEyLjEx''@;'; put 'put ''MTkyOTIlMkMxNS4xMzAyODcxJTIwTDEwLjE1MjgxMjElMkMxOS41NjA4MTg5JTIwTDcuNjM5NDgzNzYlMkMxMy44NzYyNDAyJTIyJTIwaWQlM0QlMjJGaWxsLTQlMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0UiKX0uaXMt''@;'; put 'put ''b2ZmLXNjcmVlbntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDt0b3A6LjA1cmVtIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3Zpc2li''@;'; put 'put ''aWxpdHk6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjowIDAgLjA1cmVtIWltcG9ydGFudH0uY2xyLXBvcG92ZXItY29udGVudHtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwNTB9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYnRuLXZlcnRpY2FsLW1hcmdpbjp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWJ0bi1ob3Jpem9udGFsLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi1ob3Jpem9udGFsLXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1idG4tdmVydGljYWwtcGFkZGluZzowOy0t''@;'; put 'put ''Y2xyLWJ0bi1wYWRkaW5nOnZhcigtLWNsci1idG4tdmVydGljYWwtcGFkZGluZykgdmFyKC0tY2xyLWJ0bi1ob3Jpem9udGFsLXBhZGRpbmcpOy0tY2xyLWJ0bi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7LS1jbHItYnRuLWhlaWdodC1zbTp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpOy0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWJ0bi1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1oZWlnaHQtc20pOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWJ0bi1hcHBl''@;'; put 'put ''YXJhbmNlLWZvcm0taGVpZ2h0OnZhcigtLWNsci1idG4taGVpZ2h0KTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi1wYWRkaW5nKTstLWNsci1idG4tZ3JvdXAtZm9jdXMtb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91''@;'; put 'put ''dGxpbmUpOy0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVy''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVk''@;'; put 'put ''KTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92''@;'; put 'put ''ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1v''@;'; put 'put ''dXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVk''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tcHJpbWFyeS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8taG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''aW5mby1hY3RpdmUpOy0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHIt''@;'; put 'put ''YnRuLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5l''@;'; put 'put ''LWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5''@;'; put 'put ''LWhvdmVyKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHIt''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1wcmltYXJ5''@;'; put 'put ''LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1wcmltYXJ5''@;'; put 'put ''LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWFjdGl2ZSk7LS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1v''@;'; put 'put ''dXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXIpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3Vj''@;'; put 'put ''Y2Vzcy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItYWN0''@;'; put 'put ''aXZlKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tZGFuZ2Vy''@;'; put 'put ''LWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0''@;'; put 'put ''bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdl''@;'; put 'put ''ci1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4td2FybmluZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1idG4td2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmcpOy0tY2xyLWJ0bi13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXdhcm5pbmctYmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcik7LS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNv''@;'; put 'put ''bG9yKTstLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZSk7LS1jbHItYnRuLXdhcm5pbmctYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jb2xvcik7LS1jbHItYnRuLXdhcm5p''@;'; put 'put ''bmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1ib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9y''@;'; put 'put ''KTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1i''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLXdhcm5p''@;'; put 'put ''bmctb3V0bGluZS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS13YXJuaW5nLWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmct''@;'; put 'put ''b3V0bGluZS1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlz''@;'; put 'put ''YWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY2hl''@;'; put 'put ''Y2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItYnRuLW5ldXRyYWwtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRy''@;'; put 'put ''YWwtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWhvdmVyKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlKTstLWNsci1idG4tbmV1dHJhbC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNs''@;'; put 'put ''ci1idG4tbmV1dHJhbC1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJh''@;'; put 'put ''bC1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTAp''@;'; put 'put ''Oy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0t''@;'; put 'put ''Y2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbGluay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1saW5rLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJh''@;'; put 'put ''bnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKTstLWNsci1idG4tbGluay1hY3RpdmUtYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1o''@;'; put 'put ''b3Zlcik7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQpOy0tY2xyLWJ0bi1saW5rLXZpc2l0ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhv''@;'; put 'put ''dmVyKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGlzYWJsZWQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWJsdWUtODAwKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQt''@;'; put 'put ''YmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1s''@;'; put 'put ''aW5rLXByaW1hcnktY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNv''@;'; put 'put ''bG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKTstLWNsci1idG4tbGlu''@;'; put 'put ''ay1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2Fi''@;'; put 'put ''bGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY2hlY2tlZC1iZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13''@;'; put 'put ''YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxp''@;'; put 'put ''bmstd2FybmluZy1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXIpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0''@;'; put 'put ''aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''dHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1kYW5nZXItaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNs''@;'; put 'put ''ci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5n''@;'; put 'put ''ZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1jaGVja2Vk''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbGluay1uZXV0cmFsLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmst''@;'; put 'put ''bmV1dHJhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10''@;'; put 'put ''cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4taW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1i''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYnRuLWludmVyc2UtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1pbnZlcnNlLWhvdmVyKTstLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZl''@;'; put 'put ''KTstLWNsci1idG4taW52ZXJzZS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJnLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWludmVyc2UtYmctY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yKX0uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcjtwbGFjZS1jb250ZW50OmNlbnRlcjstd2Via2l0LWFwcGVhcmFuY2U6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyOnZhcigtLWNsci1idG4tYm9yZGVyLXdpZHRoKSBzb2xpZDtib3JkZXItcmFkaXVzOnZhcigtLWNsci1idG4tYm9y''@;'; put 'put ''ZGVyLXJhZGl1cyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTQpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jb2xvcik7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLXBhZGRpbmcpfS5i''@;'; put 'put ''dG46aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcil9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1jb2xvcil9LmJ0bjpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bjpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX0uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9LmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0''@;'; put 'put ''aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1hY3RpdmUtY29sb3IpfS5idG4uZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuZGlzYWJsZWQuYnRuLC5idG46ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2Fi''@;'; put 'put ''bGVkLWJvcmRlci1jb2xvcil9LmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4gY2RzLWljb24sLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4gY2xyLWlj''@;'; put 'put ''b24sLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKX0uYnRuIC5jbHItbG9hZGluZy1idG4tY29udGVudCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gLmNsci1sb2FkaW5nLWJ0bi1jb250ZW50e2Rpc3BsYXk6ZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9LmJ0bi1ncm91cD4uYnRuIGNsci1pY29uLC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSksMCl9YS5i''@;'; put 'put ''dG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0biwuYnRuLmJ0bi1zZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS5idG4sLmJ0bi1zZWNvbmRhcnkgLmJ0biwuYnRuLXNlY29uZGFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeSAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuIGNkcy1pY29uLGEuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG4gY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNk''@;'; put 'put ''cy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biBjbHItaWNvbiwuYnRuLXNlY29uZGFyeSAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLXNl''@;'; put 'put ''Y29uZGFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcil9YS5idG46aG92ZXIsLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciwuYnRuLmJ0bi1zZWNvbmRhcnk6aG92ZXIsLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LWhvdmVyLWNvbG9yKX1hLmJ0bjpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyIGNkcy1pY29uLGEuYnRuOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4t''@;'; put 'put ''c2Vjb25kYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNv''@;'; put 'put ''bG9yKX1hLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1hY3RpdmUtYmctY29s''@;'; put 'put ''b3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1hY3RpdmUtY29sb3IpfWEuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjZHMtaWNvbixhLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSBhLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZlIGNsci1p''@;'; put 'put ''Y29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1hY3RpdmUtY29sb3IpfWEuYnRuLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5kaXNhYmxlZC5idG4sYS5idG46ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCwu''@;'; put 'put ''YnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfWEuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gYS5kaXNhYmxlZC5idG4gY2RzLWljb24sYS5idG4uZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjbHItaWNvbixhLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLGEuYnRuOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS5kaXNh''@;'; put 'put ''YmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwu''@;'; put 'put ''YnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1pbmZvLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1pbmZvLmJ0biwuYnRuLWluZm8gLmJ0biwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4sLmJ0bi5idG4tcHJpbWFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4t''@;'; put 'put ''cHJpbWFyeS5idG4sLmJ0bi1wcmltYXJ5IC5idG4sLmJ0bi1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeSAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKX0uYnRuLmJ0bi1pbmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYnRuLmJ0bi1pbmZvIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLmJ0biBjbHItaWNvbiwuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mbyAuYnRuIGNs''@;'; put 'put ''ci1pY29uLC5idG4uYnRuLXByaW1hcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKX0uYnRuLmJ0bi1pbmZv''@;'; put 'put ''OmhvdmVyLC5idG4taW5mbyAuYnRuOmhvdmVyLC5idG4uYnRuLXByaW1hcnk6aG92ZXIsLmJ0bi1wcmltYXJ5IC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4taW5mbzpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4taW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4taW5mbyAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4t''@;'; put 'put ''cHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlLC5idG4taW5mbyAuYnRu''@;'; put 'put ''OmFjdGl2ZSwuYnRuLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1p''@;'; put 'put ''bmZvOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnk6YWN0''@;'; put 'put ''aXZlIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvOmRpc2Fi''@;'; put 'put ''bGVkLC5idG4taW5mbyAuYnRuLmRpc2FibGVkLC5idG4taW5mbyAuYnRuOmRpc2FibGVkLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCwuYnRuLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXByaW1hcnkgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5idG4uYnRuLWluZm8uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5mby5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29uLC5idG4uYnRuLXByaW1hcnk6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnkgLmJ0''@;'; put 'put ''bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3MuYnRuLC5i''@;'; put 'put ''dG4tc3VjY2VzcyAuYnRuLC5idG4tc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvcik7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4gY2RzLWljb24sLmJ0bi5i''@;'; put 'put ''dG4tc3VjY2VzcyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29uLC5idG4tc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1zdWNjZXNzIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzczpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmhvdmVyIGNsci1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmhvdmVyIGNsci1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2VzczphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2VzczphY3RpdmUgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQsLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNj''@;'; put 'put ''ZXNzLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1z''@;'; put 'put ''dWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNkcy1pY29u''@;'; put 'put ''LC5idG4tc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4td2Fy''@;'; put 'put ''bmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy5idG4sLmJ0bi13YXJuaW5nIC5idG4sLmJ0bi13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZyAuYnRue2Jv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5p''@;'; put 'put ''bmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jb2xvcil9LmJ0bi5idG4td2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2xyLWljb24sLmJ0bi13YXJuaW5n''@;'; put 'put ''IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6''@;'; put 'put ''ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi13YXJuaW5nIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4sLmJ0bi1kYW5nZXIgLmJ0biwuYnRuLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlciAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFu''@;'; put 'put ''Z2VyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5idG4tZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuIGNsci1pY29u''@;'; put 'put ''LC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlcjpob3Zl''@;'; put 'put ''ciwuYnRuLWRhbmdlciAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2Vy''@;'; put 'put ''OmhvdmVyIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlciAuYnRuOmFjdGl2''@;'; put 'put ''ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0''@;'; put 'put ''bi1kYW5nZXIgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkLC5idG4tZGFuZ2Vy''@;'; put 'put ''IC5idG4uZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRh''@;'; put 'put ''bmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLmJ0biwuYnRuLW5ldXRyYWwgLmJ0biwuYnRuLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRy''@;'; put 'put ''YWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRy''@;'; put 'put ''YWwgLmJ0biBjbHItaWNvbiwuYnRuLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1uZXV0cmFsOmhvdmVyLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjbHItaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6''@;'; put 'put ''YWN0aXZlLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6YWN0aXZlIGNkcy1pY29uLC5i''@;'; put 'put ''dG4uYnRuLW5ldXRyYWw6YWN0aXZlIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLmJ0bi1uZXV0cmFsOmRpc2FibGVkLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkIGNsci1pY29u''@;'; put 'put ''LC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUuYnRuLC5idG4uYnRu''@;'; put 'put ''LW91dGxpbmUgLmJ0biwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUuYnRuLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXNlY29uZGFyeS5idG4sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLC5idG4tb3V0''@;'; put 'put ''bGluZS1zZWNvbmRhcnkgLmJ0biwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biwuYnRuLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUgLmJ0biBjbHIt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIs''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46aG92''@;'; put 'put ''ZXIgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6''@;'; put 'put ''aG92ZXIgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFy''@;'; put 'put ''eSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46YWN0aXZlLC5i''@;'; put 'put ''dG4tb3V0bGluZSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRu''@;'; put 'put ''LXNlY29uZGFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24s''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29u''@;'; put 'put ''LC5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJs''@;'; put 'put ''ZWQsLmJ0bi5idG4tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtc2Vjb25k''@;'; put 'put ''YXJ5OmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCwuYnRu''@;'; put 'put ''LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxp''@;'; put 'put ''bmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eS1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4uZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0''@;'; put 'put ''bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRu''@;'; put 'put ''LXByaW1hcnktb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lLmJ0biwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biwuYnRuLWluZm8tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZSAuYnRuLC5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLC5idG4tb3V0''@;'; put 'put ''bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnkuYnRuLC5idG4uYnRuLW91dGxpbmUtaW5mbywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvLmJ0biwuYnRuLmJ0bi1pbmZvLW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZS5idG4sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgY2xyLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0''@;'; put 'put ''bGluZSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5l''@;'; put 'put ''IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0''@;'; put 'put ''biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm8gY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mby5idG4gY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLC5idG4uYnRuLW91dGxpbmUtaW5mbzpob3ZlciwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0''@;'; put 'put ''bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtaW5mbzpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6YWN0aXZlLC5idG4tb3V0bGluZS1pbmZvIC5idG46YWN0aXZlLC5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSwuYnRuLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0''@;'; put 'put ''aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbzphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUt''@;'; put 'put ''Y29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmRpc2FibGVkLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlz''@;'; put 'put ''YWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJpbWFyeSAu''@;'; put 'put ''YnRuOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmUu''@;'; put 'put ''ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRp''@;'; put 'put ''c2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1p''@;'; put 'put ''bmZvIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1pbmZvLW91dGxp''@;'; put 'put ''bmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVk''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5m''@;'; put 'put ''by1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0''@;'; put 'put ''bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcil9LmJ0bi5i''@;'; put 'put ''dG4tc3VjY2Vzcy1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mt''@;'; put 'put ''b3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYnRuIGNsci1pY29u''@;'; put 'put ''LC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4t''@;'; put 'put ''b3V0bGluZS1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3Mt''@;'; put 'put ''b3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWNvbG9y''@;'; put 'put ''KX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1zdWNjZXNzIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRu''@;'; put 'put ''OmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJs''@;'; put 'put ''ZWQsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1k''@;'; put 'put ''aXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtc3VjY2VzczpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmRpc2FibGVk''@;'; put 'put ''IGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4t''@;'; put 'put ''d2FybmluZy1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4sLmJ0bi13YXJuaW5nLW91dGxp''@;'; put 'put ''bmUgLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4gY2RzLWljb24sLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS13YXJuaW5nIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYnRuIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNkcy1pY29u''@;'; put 'put ''LC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5i''@;'; put 'put ''dG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJu''@;'; put 'put ''aW5nOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2Fybmlu''@;'; put 'put ''ZyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwu''@;'; put 'put ''YnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZCwuYnRuLXdh''@;'; put 'put ''cm5pbmctb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRs''@;'; put 'put ''aW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5i''@;'; put 'put ''dG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4uZGlzYWJsZWQg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJu''@;'; put 'put ''aW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLWRhbmdlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG57''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgY2RzLWljb24sLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFuZ2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIuYnRuIGNsci1pY29uLC5idG4tZGFuZ2VyLW91''@;'; put 'put ''dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5l''@;'; put 'put ''IC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRu''@;'; put 'put ''IGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5l''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUt''@;'; put 'put ''ZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpob3ZlciBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24s''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVk''@;'; put 'put ''LC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5i''@;'; put 'put ''dG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1k''@;'; put 'put ''YW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91''@;'; put 'put ''dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVk''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG4sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1u''@;'; put 'put ''ZXV0cmFsLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG57Ym9yZGVyLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwt''@;'; put 'put ''b3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmUgY2xy''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1uZXV0cmFsLmJ0biBjbHItaWNvbiwuYnRuLW5ldXRy''@;'; put 'put ''YWwtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFs''@;'; put 'put ''LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1u''@;'; put 'put ''ZXV0cmFsIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1''@;'; put 'put ''dHJhbCAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0''@;'; put 'put ''bjpob3ZlciwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0''@;'; put 'put ''cmFsLW91dGxpbmU6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0''@;'; put 'put ''bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''bmV1dHJhbC1vdXRsaW5lOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmFjdGl2ZSwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtbmV1dHJhbCAu''@;'; put 'put ''YnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlIGNkcy1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmUu''@;'; put 'put ''ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQsLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkLC5idG4uYnRu''@;'; put 'put ''LW91dGxpbmUtbmV1dHJhbC5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQs''@;'; put 'put ''LmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtYmct''@;'; put 'put ''Y29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5k''@;'; put 'put ''aXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNkcy1p''@;'; put 'put ''Y29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRy''@;'; put 'put ''YWw6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1uZXV0cmFs''@;'; put 'put ''LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1saW5rLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLmJ0biwuYnRuLWxpbmsgLmJ0''@;'; put 'put ''biwuYnRuLWxpbmsgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4uYnRuLWxpbmsgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmsgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuIGNsci1pY29uLC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLWxpbmsgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmsgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKX0uYnRu''@;'; put 'put ''LmJ0bi1saW5rOmhvdmVyLC5idG4tbGluayAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4t''@;'; put 'put ''bGluazpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmsgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbms6YWN0aXZlLC5idG4tbGluayAuYnRuOmFjdGl2ZXtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbms6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWxpbms6YWN0aXZlIGNsci1pY29uLC5idG4tbGluayAuYnRuOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rOmRpc2FibGVkLC5idG4tbGluayAuYnRuLmRpc2FibGVkLC5idG4tbGluayAu''@;'; put 'put ''YnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2Fi''@;'; put 'put ''bGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbms6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmsgLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmsgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxp''@;'; put 'put ''bmstcHJpbWFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLC5idG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tbGluay1wcmltYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnkt''@;'; put 'put ''Y29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxp''@;'; put 'put ''bmstcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNv''@;'; put 'put ''bntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmhvdmVyLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstcHJp''@;'; put 'put ''bWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXByaW1hcnktYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFy''@;'; put 'put ''eSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlz''@;'; put 'put ''YWJsZWQsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeS5kaXNh''@;'; put 'put ''YmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2Vzcywu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLC5idG4tbGluay1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1z''@;'; put 'put ''dWNjZXNzIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpfS5idG4u''@;'; put 'put ''YnRuLWxpbmstc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2Vzcy5i''@;'; put 'put ''dG4gY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29u''@;'; put 'put ''LC5idG4tbGluay1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmhvdmVyLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2Vzczpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmhv''@;'; put 'put ''dmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6YWN0aXZlLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0''@;'; put 'put ''aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQsLmJ0bi1s''@;'; put 'put ''aW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3Vj''@;'; put 'put ''Y2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNv''@;'; put 'put ''biwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwu''@;'; put 'put ''YnRuLWxpbmstc3VjY2VzcyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZywuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biwuYnRuLWxpbmstd2FybmluZyAuYnRuLC5idG4tbGluay13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG57''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3IpfS5idG4uYnRuLWxpbmstd2Fy''@;'; put 'put ''bmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZy5idG4gY2xyLWljb24s''@;'; put 'put ''LmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13''@;'; put 'put ''YXJuaW5nIC5idG4gY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxp''@;'; put 'put ''bmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmhvdmVyLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5p''@;'; put 'put ''bmctaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZzpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhvdmVyIGNsci1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZlLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9y''@;'; put 'put ''KTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZzphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay13YXJuaW5nOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLWxpbmstd2FybmluZyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZy5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6ZGlzYWJsZWQsLmJ0bi1saW5rLXdhcm5pbmcg''@;'; put 'put ''LmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxl''@;'; put 'put ''ZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1s''@;'; put 'put ''aW5rLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay13YXJuaW5nOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstd2Fy''@;'; put 'put ''bmluZyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4sLmJ0bi1saW5rLWRhbmdlciAuYnRuLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRue2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1kYW5nZXIuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0biBjbHItaWNvbiwuYnRuLWxp''@;'; put 'put ''bmstZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKX0uYnRuLmJ0bi1saW5r''@;'; put 'put ''LWRhbmdlcjpob3ZlciwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdl''@;'; put 'put ''cjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLWRhbmdlcjpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXIt''@;'; put 'put ''Y29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSwuYnRuLWxpbmstZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNv''@;'; put 'put ''bG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlcjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkLC5idG4tbGluay1kYW5nZXIgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNh''@;'; put 'put ''YmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmRpc2FibGVk''@;'; put 'put ''IGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biwuYnRuLWxpbmstbmV1dHJh''@;'; put 'put ''bCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbCAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0''@;'; put 'put ''bi5idG4tbGluay1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDpob3ZlciwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmhvdmVye2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmhv''@;'; put 'put ''dmVyIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSwu''@;'; put 'put ''YnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZl''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZl''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWwuZGlzYWJsZWQsLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJh''@;'; put 'put ''bC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxp''@;'; put 'put ''bmstbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbnZlcnNlLmJ0biwuYnRuLWludmVyc2UgLmJ0biwuYnRuLWludmVyc2UgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbnZlcnNlIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVy''@;'; put 'put ''c2UuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0biBjZHMtaWNvbiwuYnRuLWludmVy''@;'; put 'put ''c2UgLmJ0biBjbHItaWNvbiwuYnRuLWludmVyc2UgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbnZlcnNlIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1pbnZlcnNlOmhvdmVyLC5idG4taW52ZXJzZSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTpob3ZlciBjbHItaWNvbiwuYnRuLWludmVyc2UgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItY29sb3IpfS5idG4uYnRuLWludmVyc2U6''@;'; put 'put ''YWN0aXZlLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWludmVyc2U6YWN0aXZlIGNkcy1pY29uLC5i''@;'; put 'put ''dG4uYnRuLWludmVyc2U6YWN0aXZlIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZS5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLmJ0bi1pbnZlcnNlOmRpc2FibGVkLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkIGNsci1pY29u''@;'; put 'put ''LC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWludmVyc2UgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWludmVyc2UgLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXNtLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLXNtIC5idG57Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC4yKigxcmVt''@;'; put 'put ''L3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLXBhZGRpbmcpfS5idG4tYmxvY2t7ZGlz''@;'; put 'put ''cGxheTpmbGV4O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG57bWFyZ2luOnZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luKSB2YXIoLS1jbHItYnRuLXZlcnRp''@;'; put 'put ''Y2FsLW1hcmdpbikgMH0uYnRuLmJ0bi1saW5rLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLmJ0bnttYXJnaW4tcmlnaHQ6MH0uYnRuLmJ0bi1saW5rLmJ0bi1pbnZlcnNle2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uYnRuLXNtOm5vdCguYnRuLWxpbmspIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpub3QoLmJ0bi1saW5rKSBjbHItaWNvbnt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCxjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpLDApfS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNsci1pY29uLC5idG4tc206bm90KC5idG4tbGluaykgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNkcy1pY29ue2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVh''@;'; put 'put ''cmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplKX0uYnRuLWljb257bWluLXdpZHRoOjB9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxp''@;'; put 'put ''bmstYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2RzLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWNvbG9yKX0u''@;'; put 'put ''YnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1hY3RpdmUtY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCwuYnRu''@;'; put 'put ''LWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkIGNsci1pY29uLC5idG4tZ3Jv''@;'; put 'put ''dXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1zbSAuYnRu''@;'; put 'put ''LWdyb3VwLW92ZXJmbG93Pi5kcm9wZG93bi10b2dnbGUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWdyb3VwLmJ0biAuYnRuLWdyb3VwLW92ZXJmbG93Pi5kcm9wZG93bi10b2dnbGV7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQt''@;'; put 'put ''c2VtaWJvbGQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC4yKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt0ZXh0LXRyYW5zZm9y''@;'; put 'put ''bTp1cHBlcmNhc2U7aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLXBhZGRpbmcpfS5jaGVja2JveC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gu''@;'; put 'put ''YnRuLC5jaGVja2JveC1pbmxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4sLnJhZGlvLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby5idG4sLnJhZGlvLWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAucmFkaW8taW5saW5lLmJ0bntwYWRkaW5nOjB9LmNoZWNrYm94LmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0biBsYWJlbCwucmFkaW8uYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBsYWJlbCwucmFkaW8taW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRuIGxhYmVse2N1''@;'; put 'put ''cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNlLWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS02KX0uY2hlY2tib3guYnRuLmRpc2FibGVkIGxhYmVsLC5jaGVja2JveC5idG46ZGlzYWJsZWQgbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLmJ0bi5kaXNhYmxlZCBsYWJlbCwu''@;'; put 'put ''cmFkaW8uYnRuOmRpc2FibGVkIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuOmRpc2FibGVkIGxhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmJlZm9yZSwuY2hlY2ti''@;'; put 'put ''b3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVyLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmJlZm9yZSwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LnJh''@;'; put 'put ''ZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDpiZWZvcmUsLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlciwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDpiZWZvcmUsLnJhZGlvLWlubGluZS5idG4gaW5wdXRbdHlwZT1yYWRpb10r''@;'; put 'put ''bGFiZWw6YWZ0ZXJ7Y29udGVudDpub25lfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRu''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2''@;'; put 'put ''ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJn''@;'; put 'put ''LWNvbG9yKX0uY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG46ZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcil9LmNoZWNrYm94LmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbHt3aWR0aDoxMDAlfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJp''@;'; put 'put ''bWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNo''@;'; put 'put ''ZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2Jv''@;'; put 'put ''eC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNs''@;'; put 'put ''ci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24s''@;'; put 'put ''LmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2ti''@;'; put 'put ''b3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlu''@;'; put 'put ''bGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRu''@;'; put 'put ''LWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0''@;'; put 'put ''bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhv''@;'; put 'put ''dmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNo''@;'; put 'put ''ZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwu''@;'; put 'put ''Y2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5i''@;'; put 'put ''dG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1j''@;'; put 'put ''b2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNo''@;'; put 'put ''ZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHIt''@;'; put 'put ''aWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91''@;'; put 'put ''dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xh''@;'; put 'put ''YmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFj''@;'; put 'put ''dGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWws''@;'; put 'put ''LmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZl''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29u''@;'; put 'put ''LC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5j''@;'; put 'put ''bHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNl''@;'; put 'put ''Y29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tl''@;'; put 'put ''ZC1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1iZy1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24s''@;'; put 'put ''LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNo''@;'; put 'put ''ZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5i''@;'; put 'put ''dG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbzpk''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNl''@;'; put 'put ''Y29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2ti''@;'; put 'put ''b3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5j''@;'; put 'put ''aGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHIt''@;'; put 'put ''aWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkt''@;'; put 'put ''b3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94''@;'; put 'put ''LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmNoZWNrYm94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlu''@;'; put 'put ''bGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY2hlY2tlZC1jb2xv''@;'; put 'put ''cil9LmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRu''@;'; put 'put ''LWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNv''@;'; put 'put ''bG9yKX0uY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1j''@;'; put 'put ''aGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24s''@;'; put 'put ''LmNoZWNrYm94LWlubGluZS5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0biBpbnB1''@;'; put 'put ''dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1''@;'; put 'put ''bHQtY2hlY2tlZC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''Y2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCtsYWJlbHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1iZy1jb2xvcil9LnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bjpk''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8uYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBsYWJlbHt3''@;'; put 'put ''aWR0aDoxMDAlfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1h''@;'; put 'put ''cnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlw''@;'; put 'put ''ZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlv''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNl''@;'; put 'put ''Y29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8u''@;'; put 'put ''YnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4g''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6''@;'; put 'put ''aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3Zlcits''@;'; put 'put ''YWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNs''@;'; put 'put ''ci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xh''@;'; put 'put ''YmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6''@;'; put 'put ''YWN0aXZlK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZSts''@;'; put 'put ''YWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hl''@;'; put 'put ''Y2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4g''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRu''@;'; put 'put ''LXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQt''@;'; put 'put ''aXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVt''@;'; put 'put ''IC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1iZy1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlv''@;'; put 'put ''LmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAu''@;'; put 'put ''cmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZv''@;'; put 'put ''IC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1kYW5n''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1z''@;'; put 'put ''dWNjZXNzLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''ZGFuZ2VyLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXIt''@;'; put 'put ''b3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1kYW5nZXIt''@;'; put 'put ''b3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNv''@;'; put 'put ''bG9yKX0ucmFkaW8uYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRu''@;'; put 'put ''LWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWlu''@;'; put 'put ''dmVyc2UgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1''@;'; put 'put ''dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcil9LmJ0bi1ncm91cHtkaXNwbGF5Omlu''@;'; put 'put ''bGluZS1mbGV4O21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5idG4tZ3JvdXAgY2xyLWRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXAgY2xyLWRyb3Bkb3duOmxhc3QtY2hpbGQgLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRue21hcmdpbjowO292ZXJmbG93OmhpZGRlbn0uYnRuLWdyb3VwIC5idG4gbGFiZWx7''@;'; put 'put ''aGVpZ2h0OjEwMCV9LmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9cmFkaW9dOmhvdmVyLC5idG4tZ3JvdXAgLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpob3ZlcnthcHBlYXJhbmNlOm5vbmU7b3BhY2l0eToxO3RvcDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7Ym9yZGVyOkhpZ2hsaWdo''@;'; put 'put ''dCBzb2xpZCAycHh9LmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9cmFkaW9dOmhvdmVyOjotbXMtY2hlY2ssLmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVyOjotbXMtY2hlY2t7ZGlzcGxheTpub25lfS5idG4tZ3JvdXAgLmJ0bjpub3QoOmZpcnN0LWNoaWxkKXti''@;'; put 'put ''b3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwIC5idG46ZGlzYWJsZWQ6''@;'; put 'put ''bm90KDpsYXN0LWNoaWxkKXtib3JkZXItcmlnaHQ6bm9uZX0uYnRuLWdyb3VwIC50b29sdGlwOm5vdCg6Zmlyc3QtY2hpbGQpIC5idG57Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRuLWdyb3VwIC50b29sdGlwOm5vdCg6bGFzdC1jaGls''@;'; put 'put ''ZCkgLmJ0bntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4tcHJpbWFyeT4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0''@;'; put 'put ''bi1ncm91cC5idG4tbmV1dHJhbCAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4tbmV1dHJhbD4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4tc3VjY2VzcyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4t''@;'; put 'put ''c3VjY2Vzcz4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4tZGFuZ2VyIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1kYW5nZXI+LmJ0bjpub3QoOmxhc3QtY2hpbGQpLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLnRvb2x0aXA6bm90KDps''@;'; put 'put ''YXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmc+LmJ0bjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbjowIHZhcigtLWNsci1idG4tYm9yZGVyLXdpZHRoKSAwIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93e3Bvc2l0aW9uOnJlbGF0aXZlfS5idG4tZ3JvdXA+LmJ0''@;'; put 'put ''bi1ncm91cC1vdmVyZmxvdzpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpPi5idG46Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSAwfS5idG4tZ3JvdXA+LmJ0bi1ncm91cC1vdmVy''@;'; put 'put ''ZmxvdzpsYXN0LWNoaWxkOmZpcnN0LWNoaWxkPi5idG46Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMpfS5idG4tZ3JvdXAgLmJ0bjpub3QoW2Rpc2FibGVkXSkrLmJ0bntib3JkZXItbGVmdDpub25lfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90''@;'; put 'put ''KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItbGVmdDpub25lfS5idG4tZ3JvdXAgLmJ0bjpub3QoW2Rpc2FibGVkXSkrLmJ0bi1ncm91cC1vdmVyZmxvdyAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLC5idG4tZ3JvdXAuYnRuLWlj''@;'; put 'put ''b24tbGluay5idG4tbGluayAuYnRuLC5idG4tZ3JvdXAuYnRuLWljb24gLmJ0bnttaW4td2lkdGg6MH0uYnRuLWdyb3VwIC5jbHItaWNvbi10aXRsZXtkaXNwbGF5Om5vbmU7dGV4dC10cmFuc2Zvcm06bm9uZX0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGV7ZGlzcGxheTpibG9ja30uYnRu''@;'; put 'put ''LWdyb3VwIC5kcm9wZG93bi1tZW51IGNkcy1pY29uLC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgY2xyLWljb257ZGlzcGxheTpub25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6aW5saW5lfS5jaGVja2JveCwucmFkaW97cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmV9LmNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdLC5jaGVja2JveCBpbnB1dFt0eXBlPXJhZGlvXSwucmFkaW8gaW5wdXRbdHlwZT1jaGVja2JveF0sLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9de2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDto''@;'; put 'put ''ZWlnaHQ6MDt3aWR0aDowO29wYWNpdHk6MH0uZHJvcGRvd24tbWVudS5jbHItYnV0dG9uLWdyb3VwLW1lbnV7dmlzaWJpbGl0eTp2aXNpYmxlfWJ1dHRvbi5jbG9zZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmV9LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxLjhyZW07dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzO2ZvbnQtd2VpZ2h0OjIwMDt0ZXh0LXNoYWRvdzpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKX0uY2xvc2UgY2RzLWljb24s''@;'; put 'put ''LmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKX0uY2xvc2U6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyKX0uY2xvc2U6aG92ZXIgY2RzLWljb24sLmNsb3NlOmhvdmVyIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWhv''@;'; put 'put ''dmVyKX0uY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUpfS5jbG9zZTphY3RpdmUgY2RzLWljb24sLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUpfS5jbG9zZTpmb2N1c3tvdXRsaW5lOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHIt''@;'; put 'put ''YWxlcnQtYm9yZGVycmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWFwcC1hbGVydC1wYWdlci13aWR0aDpjYWxjKDE0NCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1j''@;'; put 'put ''b2xvcik7LS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYXBwLWxldmVsLWFsZXJ0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXRpbnQpOy0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0t''@;'; put 'put ''Y2xyLWFsZXJ0LWluZm8tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxl''@;'; put 'put ''cnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MtdGludCk7LS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9u''@;'; put 'put ''dC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5n''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50KTstLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''c3RhdHVzLXdhcm5pbmcpOy0tY2xyLWFsZXJ0LXdhcm5pbmctaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYWxl''@;'; put 'put ''cnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWlj''@;'; put 'put ''b24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQpOy0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYWxlcnQtZGFuZ2VyLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXIt''@;'; put 'put ''Y2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1u''@;'; put 'put ''ZXV0cmFsLXRpbnQpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItYWxlcnQtbmV1dHJh''@;'; put 'put ''bC1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hbGVydC1uZXV0cmFsLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xv''@;'; put 'put ''c2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8tYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWluZm8taWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTst''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmcpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2Fybmlu''@;'; put 'put ''Zy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''ZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvcjpub25lOy0tY2xy''@;'; put 'put ''LWFwcC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRh''@;'; put 'put ''bmdlci1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xv''@;'; put 'put ''c2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''c3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNz''@;'; put 'put ''LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1u''@;'; put 'put ''ZXV0cmFsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcjpub25lOy0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LW5ldXRyYWwtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1w''@;'; put 'put ''YWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tc2hhZGUpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1iZy1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUpOy0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''YmxhY2spOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTst''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtbmV1dHJhbC1wYWdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtaW5mby1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItbGlnaHR3ZWlnaHQt''@;'; put 'put ''YWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrKTstLWNsci1saWdodHdlaWdodC1hbGVydC13''@;'; put 'put ''YXJuaW5nLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtZGFuZ2VyLWZvbnQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1saWdodHdlaWdodC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlKTstLWNsci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKX0uYWxlcnQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS05KX0uYWxlcnQtaWNvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnQtaXRlbXtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2dhcDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTUpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0uYWxlcnQtaXRlbXN7ZmxleDoxIDEgYXV0bztmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KTtkaXNwbGF5OmZsZXh9LmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtdGV4dHtmbGV4OjEgMTt0ZXh0LWFsaWduOmxlZnQ7YWxpZ24tc2VsZjpjZW50ZXJ9LmFsZXJ0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7Zm9udC13ZWlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2JveC1z''@;'; put 'put ''aXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3dpZHRoOmF1dG87Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItYWxlcnQtYm9yZGVycmFkaXVzKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS02KTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRo''@;'; put 'put ''LTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWluZm8tYm9yZGVyLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBh''@;'; put 'put ''Om5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1pY29u''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0IC5hbGVy''@;'; put 'put ''dC1hY3Rpb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rp''@;'; put 'put ''b24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuIGNkcy1pY29uLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0IC5k''@;'; put 'put ''cm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFj''@;'; put 'put ''dGlvbi1jb2xvcil9LmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRu''@;'; put 'put ''OmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydCAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlIGNsci1pY29ue2Zp''@;'; put 'put ''bGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cywuYWxlcnQgLmNsb3NlOmhvdmVyLC5hbGVydCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydCAuY2xv''@;'; put 'put ''c2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQgLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydCAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0IC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTphY3RpdmUgY2xyLWljb257''@;'; put 'put ''ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29s''@;'; put 'put ''b3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9u''@;'; put 'put ''dC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8t''@;'; put 'put ''YWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFj''@;'; put 'put ''dGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0''@;'; put 'put ''aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5m''@;'; put 'put ''byAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2V7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5j''@;'; put 'put ''bG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxl''@;'; put 'put ''cnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3N7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNj''@;'; put 'put ''ZXNzIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC1zdWNj''@;'; put 'put ''ZXNzIC5hbGVydC1hY3Rpb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC1zdWNjZXNzIC5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0''@;'; put 'put ''LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3Nl''@;'; put 'put ''LWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9j''@;'; put 'put ''dXMsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNkcy1p''@;'; put 'put ''Y29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5ne2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmct''@;'; put 'put ''YmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC13YXJuaW5nLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdh''@;'; put 'put ''cm5pbmcgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxl''@;'; put 'put ''cnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2Fy''@;'; put 'put ''bmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZXtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQuYWxl''@;'; put 'put ''cnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWFsZXJ0LWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFu''@;'; put 'put ''Z2VyLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1h''@;'; put 'put ''Y3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4s''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFj''@;'; put 'put ''dGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5n''@;'; put 'put ''ZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3Nl''@;'; put 'put ''OmZvY3VzLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNkcy1p''@;'; put 'put ''Y29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtYmctY29s''@;'; put 'put ''b3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LW5ldXRyYWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0IC5hbGVydC1pdGVtIC5h''@;'; put 'put ''bGVydC1hY3Rpb25ze3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS00KX0uYWxlcnQgLmFsZXJ0LWl0ZW0gLmNsci1pY29uKy5hbGVydC10ZXh0e3BhZGRpbmctbGVmdDowfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb24rLmFsZXJ0LXRleHQ6YmVmb3Jle2NvbnRlbnQ6bm9uZX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnN7ZmxleDowIDAg''@;'; put 'put ''YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmFsZXJ0IC5hbGVydC1hY3Rpb25zPi5hbGVydC1hY3Rpb246bm90KDpsYXN0LWNoaWxkKSwuYWxlcnQgLmFsZXJ0LWFjdGlvbnM+LmRyb3Bkb3duOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9''@;'; put 'put ''LmFsZXJ0IC5hbGVydC1hY3Rpb25zIC5kcm9wZG93bi1pdGVte2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5hbGVydCAuYWxlcnQtYWN0aW9u''@;'; put 'put ''IGJ1dHRvbi5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pe2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yKX0uYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0''@;'; put 'put ''IC5jbG9zZXtvcmRlcjoxMDA7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmFsZXJ0IC5jbG9z''@;'; put 'put ''ZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpfS5hbGVydCAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS05KTttYXJnaW46MH0uYWxlcnQgLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5hbGVydCAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnQgLmNsb3Nlfi5hbGVydC1pdGVtPi5hbGVydC1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02''@;'; put 'put ''KX0uYWxlcnQgLmNsb3Nlfi5hbGVydC1pdGVtPi5hbGVydC1hY3Rpb25zPi5hbGVydC1hY3Rpb246bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LmFs''@;'; put 'put ''ZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtc3twYWRkaW5nOjB9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbXttaW4taGVpZ2h0OjA7bWFyZ2luOjB9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbT5zcGFu''@;'; put 'put ''LC5hbGVydC5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnMsLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Ym9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5hbGVydC5hbGVydC1saWdodHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfS5hbGVydC5hbGVydC1saWdodHdlaWdodDpub3QoLmFsZXJ0LXNtKSAuYWxlcnQtaWNvbnttYXJnaW46MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQt''@;'; put 'put ''aW5mbyAuYWxlcnQtdGV4dHtjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtaW5mby1pY29uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtd2FybmluZyAuYWxlcnQtdGV4dHtjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtd2FybmluZyAuYWxlcnQtaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxp''@;'; put 'put ''Z2h0d2VpZ2h0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtZGFuZ2VyLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1zdWNjZXNzIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdo''@;'; put 'put ''dC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1zdWNjZXNzIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1u''@;'; put 'put ''ZXV0cmFsIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1uZXV0cmFsIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFs''@;'; put 'put ''LWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWx7bWFyZ2luOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO292ZXJmbG93LXk6YXV0bztiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29s''@;'; put 'put ''b3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxs''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1h''@;'; put 'put ''Y3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5k''@;'; put 'put ''cm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0''@;'; put 'put ''aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFj''@;'; put 'put ''dGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNv''@;'; put 'put ''bi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIgY2xy''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG57bWFyZ2luOjB9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8taWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb25zIC5k''@;'; put 'put ''cm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1h''@;'; put 'put ''Y3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''aW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24u''@;'; put 'put ''YnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRu''@;'; put 'put ''OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1pbmZvIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIsLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1p''@;'; put 'put ''bmZvIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVyLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2Jv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNs''@;'; put 'put ''b3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtbmV1dHJhbHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlk''@;'; put 'put ''IHZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRy''@;'; put 'put ''YWwtYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1u''@;'; put 'put ''ZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1''@;'; put 'put ''dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xv''@;'; put 'put ''cil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5l''@;'; put 'put ''dXRyYWwgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LW5ldXRyYWwgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbnMgLmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2Ut''@;'; put 'put ''aWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2Ut''@;'; put 'put ''aWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92''@;'; put 'put ''ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBj''@;'; put 'put ''bHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3N7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW1z''@;'; put 'put ''IC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MtYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1h''@;'; put 'put ''Y3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''c3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1j''@;'; put 'put ''b2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LXN1Y2Nlc3MgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3Zlciwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtc3thbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW17anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzowfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3Nle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIDB9LmFsZXJ0LXNtIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbXttaW4taGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFsZXJ0LXNtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWljb257''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFsZXJ0LXNtIC5hbGVydC1pdGVtPnNwYW4s''@;'; put 'put ''LmFsZXJ0LXNtIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0LC5hbGVydC1zbSAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9uc3tmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzow''@;'; put 'put ''fS5hbGVydC1zbSAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmV7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFsZXJ0LXNtIC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmJlZm9yZSwuYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YWZ0ZXJ7aGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0e2JhY2tn''@;'; put 'put ''cm91bmQ6MCAwO2JvcmRlcjowfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXN7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbXtwYWRkaW5nOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMykgMH0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9ucywuYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWln''@;'; put 'put ''aHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYWxlcnQtaWNvbi13cmFwcGVye2ZsZXgtYmFzaXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmNsb3Nle2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4''@;'; put 'put ''LXdpZHRoOjc2OHB4KXsuYWxlcnQgLmFsZXJ0LWl0ZW17ZmxleC13cmFwOndyYXB9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e21heC13aWR0aDo5MCU7d2lkdGg6OTAlO2ZsZXgtYmFzaXM6OTAlfS5hbGVydCAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9uc3tmbGV4OjEgMCAxMDAl''@;'; put 'put ''fS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnN7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMil9fS5hbGVydC1oaWRkZW57ZGlzcGxheTpub25lfS5hbGVydHMgLmFsZXJ0e21hcmdpbi10b3A6MH0uYWxlcnRzIC5hbGVydHMtd3JhcHBlcntkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246cm93fS5hbGVydHMgLmFsZXJ0cy13cmFwcGVyIGNsci1hbGVydHtmbGV4OjEgMSAxMDAlfS5hbGVydHMuYWxlcnQtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1iZy1jb2xvcil9LmFsZXJ0cy5hbGVydC13YXJuaW5ne2JhY2tn''@;'; put 'put ''cm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXN1Y2Nlc3N7YmFja2dyb3VuZDp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtbmV1dHJhbHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1wYWdlci1iZy1jb2xvcil9LmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQt''@;'; put 'put ''Y29sb3IpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7ZmxleDoxIDAgdmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci13aWR0aCl9LmFsZXJ0LWluZm8gLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1uZXV0cmFsIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydHMtcGFn''@;'; put 'put ''ZXItYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6''@;'; put 'put ''MCAwO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQpfWJ1dHRvbi5hbGVydHMt''@;'; put 'put ''cGFnZXItYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcil9LmFsZXJ0LWluZm8gLmFsZXJ0cy1wYWdlci1idXR0b24g''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LWluZm8gLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC13YXJuaW5nIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydC13YXJuaW5nIC5hbGVy''@;'; put 'put ''dHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydC1kYW5nZXIgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1uZXV0cmFsIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydC1uZXV0cmFsIC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1wYWdlci1mb250LWNv''@;'; put 'put ''bG9yKX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2x7ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0cy1wYWdlci1jb250cm9s''@;'; put 'put ''Pip7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXg6MSAxIGF1dG99OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItY2FyZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1jYXJkLWRpdmlkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWNhcmQtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jYXJkLXRpdGxlLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9u''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTstLWNsci1jYXJkLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItY2FyZC1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTstLWNsci1jYXJkLWJvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FyZC1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMCk7LS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWNhcmQtY2xpY2thYmxlLWJveC1zaGFkb3c6MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yKTstLWNsci1jYXJkLWhlYWRlci10aXRsZS1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItY2FyZC10aXRsZS1jb2xvcik7LS1jbHItY2FyZC1jb250ZW50LXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0uY2FyZHtib3gtc2hhZG93OnZhcigtLWNs''@;'; put 'put ''ci1jYXJkLWJveC1zaGFkb3cpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yKX0uY2FyZC5jbGlja2FibGU6aG92ZXJ7Ym94LXNoYWRv''@;'; put 'put ''dzp2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm94LXNoYWRvdyk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWNhcmQtY2xpY2thYmxlLWJvcmRlci1jb2xvcik7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5v''@;'; put 'put ''bmU7dHJhbnNpdGlvbjpib3JkZXIgLjJzIGVhc2UsYm94LXNoYWRvdyAuMnMgZWFzZSx0cmFuc2Zvcm0gLjJzIGVhc2V9LmNhcmQtYmxvY2sgLmNhcmQtZGl2aWRlciwuY2FyZCAuY2FyZC10aXRsZSwuY2FyZCAuY2FyZC10ZXh0LC5jYXJkIC5jYXJkLW1lZGlhLWJsb2NrLC5jYXJkIC5saXN0''@;'; put 'put ''LC5jYXJkIC5saXN0LXVuc3R5bGVke21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2sgLmNhcmQtZGl2aWRlcjpsYXN0LWNoaWxkLC5jYXJkIC5jYXJkLXRpdGxlOmxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtdGV4dDpsYXN0LWNo''@;'; put 'put ''aWxkLC5jYXJkIC5jYXJkLW1lZGlhLWJsb2NrOmxhc3QtY2hpbGQsLmNhcmQgLmxpc3Q6bGFzdC1jaGlsZCwuY2FyZCAubGlzdC11bnN0eWxlZDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0uY2FyZC5jYXJkLWltZz5pbWcsLmNhcmQ+LmNhcmQtaW1nOmZpcnN0LWNoaWxkOmxhc3QtY2hp''@;'; put 'put ''bGQ+aW1nLC5jYXJkLWltZz5pbWd7ZGlzcGxheTpibG9jaztoZWlnaHQ6YXV0bzt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlfS5jYXJke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvcik7d2lkdGg6MTAwJTtt''@;'; put 'put ''YXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmNhcmQgLmFsZXJ0e21hcmdpbjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwfS5jYXJkIC5idG4tbGlua3ttaW4td2lkdGg6MDtwYWRkaW5nOjB9LmNhcmQuY2xpY2thYmxle2NvbG9yOmluaGVyaXR9LmNhcmQ+Lmxp''@;'; put 'put ''c3QsLmNhcmQ+Lmxpc3QtdW5zdHlsZWR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9LmNhcmQgLmxpc3QtZ3JvdXB7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWJvdHRvbTowO2xpc3Qtc3R5bGU6bm9uZX0uY2FyZCAubGlzdC1ncm91''@;'; put 'put ''cC1pdGVte2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNhcmQtYmctY29sb3IpO2JvcmRlci1ib3R0b206dmFy''@;'; put 'put ''KC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOmNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSl9fS5jYXJkLWJsb2Nre3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2FyZC1mb290ZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX1oMy5jYXJkLWhlYWRlciwuY2FyZC1oZWFkZXJ7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Y29sb3I6dmFyKC0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yKX1oNC5jYXJkLXRpdGxlLC5jYXJkLXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZyk7Y29sb3I6dmFyKC0tY2xyLWNhcmQtY29udGVudC10aXRsZS1jb2xvcil9aDEuY2FyZC1oZWFkZXIsaDEuY2FyZC10aXRsZSxoMi5jYXJkLWhlYWRlcixoMi5jYXJkLXRpdGxlLGgzLmNhcmQtaGVhZGVyLGgzLmNhcmQtdGl0bGUsaDQuY2FyZC1oZWFkZXIsaDQuY2Fy''@;'; put 'put ''ZC10aXRsZSxoNS5jYXJkLWhlYWRlcixoNS5jYXJkLXRpdGxlLGg2LmNhcmQtaGVhZGVyLGg2LmNhcmQtdGl0bGV7bWFyZ2luLXRvcDowfS5jYXJkLXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItY2FyZC10ZXh0LWNvbG9yKX0uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1y''@;'; put 'put ''YWRpdXMpfS5jYXJkLWltZzpsYXN0LWNoaWxkPmltZ3tib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKX0uY2Fy''@;'; put 'put ''ZC5jYXJkLWltZz5pbWcsLmNhcmQ+LmNhcmQtaW1nOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtYmxvY2sgLmJ0biwuY2FyZC1ibG9jayAuYnRuLmJ0bi1saW5rLC5jYXJkLWJsb2NrIC5jYXJkLWxp''@;'; put 'put ''bmssLmNhcmQtZm9vdGVyIC5idG4sLmNhcmQtZm9vdGVyIC5idG4uYnRuLWxpbmssLmNhcmQtZm9vdGVyIC5jYXJkLWxpbmssLmNhcmQtYmxvY2sgLmJ0bi1ncm91cCAuYnRuLC5jYXJkLWZvb3RlciAuYnRuLWdyb3VwIC5idG57bWFyZ2luOjB9LmNhcmQtaGVhZGVyLC5jYXJkLWJsb2Nre2Jv''@;'; put 'put ''cmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLWhlYWRlcjpsYXN0LWNoaWxkLC5jYXJkLWJsb2NrOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfS5jYXJkLWRpdmlkZXJ7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztib3JkZXItYm90dG9tOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcil9LmNhcmQtYmxvY2sgLmNhcmQtZGl2aWRlcnttYXJnaW4tbGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpO21hcmdpbi1y''@;'; put 'put ''aWdodDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpO3dpZHRoOmF1dG99LmNhcmQtaGVhZGVyKy5jYXJkLWRpdmlkZXIsLmNhcmQtYmxvY2srLmNhcmQtZGl2aWRlcntkaXNwbGF5Om5vbmV9LmNhcmQtbWVkaWEtYmxvY2t7ZGlzcGxheTpmbGV4fS5jYXJkLW1lZGlhLWJsb2Nr''@;'; put 'put ''IC5jYXJkLW1lZGlhLWltYWdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAwIGF1dG87aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO21heC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7bWF4LXdp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLWRlc2NyaXB0aW9ue2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Ym9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9u''@;'; put 'put ''OmNvbHVtbjtjb2xvcjp2YXIoLS1jbHItY2FyZC10ZXh0LWNvbG9yKTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLXRpdGxlLC5jYXJkLW1lZGlhLWJsb2NrIHNwYW4sLmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVk''@;'; put 'put ''aWEtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30uY2FyZC1tZWRpYS1ibG9jay53cmFwe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2FyZC1tZWRpYS1ibG9jay53cmFwIC5jYXJkLW1lZGlhLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpfS5jYXJkLWJsb2NrPi5saXN0LC5jYXJkLWJsb2NrPi5saXN0LXVuc3R5bGVke3BhZGRpbmc6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjU3NnB4KXsuY2FyZC1jb2x1bW5ze2NvbHVtbi1jb3VudDozO2NvbHVtbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTti''@;'; put 'put ''cmVhay1pbnNpZGU6YXZvaWQ7Y29sdW1uLWZpbGw6YmFsYW5jZTstd2Via2l0LXBlcnNwZWN0aXZlOjF9LmNhcmQtY29sdW1ucy5jYXJkLWNvbHVtbnMtMntjb2x1bW4tY291bnQ6Mn0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy00e2NvbHVtbi1jb3VudDo0fS5jYXJkLWNvbHVtbnMgLmNh''@;'; put 'put ''cmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNhcmQtY29sdW1ucyAuY2xpY2thYmxle2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufX1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmNhcmQgLmNoZWNrYm94LmJ0biBsYWJl''@;'; put 'put ''bCwuY2FyZCAuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuY2FyZCAucmFkaW8uYnRuIGxhYmVsLC5jYXJkIC5yYWRpby1pbmxpbmUuYnRuIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItbmF2LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1uYXYtc2VsZWN0ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5''@;'; put 'put ''LTApOy0tY2xyLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLW5hdi1zZWxlY3RlZC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1zZWxlY3RlZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLW5hdi1saW5rLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9QG1lZGlhIHNjcmVlbntzZWN0aW9uW2FyaWEtaGlkZGVuPXRydWVde2Rpc3BsYXk6bm9uZX19W2RhdGEtaGlk''@;'; put 'put ''ZGVuPXRydWVde2Rpc3BsYXk6bm9uZX1idXR0b24ubmF2LWxpbmt7Ym9yZGVyLXJhZGl1czowO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7bWluLXdpZHRoOjB9LnRhYnMtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLW1lbnV7cGFkZGluZzp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwKTtvdmVyZmxvdzpoaWRkZW59LnRhYnMtb3ZlcmZsb3cgLmJ0bntsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTQpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0wKX0udGFiLWNvbnRlbnR7ZGlzcGxheTpp''@;'; put 'put ''bmxpbmV9XzotbXMtZnVsbHNjcmVlbiAudGFiLWNvbnRlbnQsOnJvb3QgLnRhYi1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWx7ZGlzcGxheTpmbGV4fS50YWJzLXZlcnRpY2FsPi5uYXZ7aGVpZ2h0OmF1dG87Ym94LXNoYWRvdzpub25lO2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdHJldGNoO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO292ZXJmbG93OmF1dG87ZmxleC1zaHJpbms6MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGlua3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNik7Ym9yZGVyOjA7ZmxleC1zaHJpbms6MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDt3aWR0aDoxMDAlfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5rLmJ0bnttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2''@;'; put 'put ''LWxpbmsuYWN0aXZlOmJlZm9yZSwudGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluazpob3ZlcjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LnRhYnMtYWN0aW9uc3tkaXNwbGF5OmlubGluZS1mbGV4O3dpZHRoOjEwMCV9''@;'; put 'put ''LnRhYnMtYWN0aW9uc1twb3NpdGlvbn49bGVmdF17anVzdGlmeS1jb250ZW50OnN0YXJ0fS50YWJzLWFjdGlvbnNbcG9zaXRpb25+PXJpZ2h0XXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1kcm9wZG93bi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''Y29sb3IpOy0tY2xyLWRyb3Bkb3duLWRpdmlkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludCk7LS1jbHItZHJvcGRvd24tZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1kcm9wZG93bi1jaGlsZC1ib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItZHJvcGRvd24tdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1kcm9wZG93bi1oZWFkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbWVkaXVtKTstLWNsci1kcm9wZG93bi1pdGVtLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1mb250LXdlaWdodCk7LS1jbHItZHJvcGRvd24taXRlbS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1kcm9wZG93bi1pdGVtLWJnLWNvbG9yOnRyYW5zcGFyZW50Oy0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcjp2YXIoIC0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9yICk7LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZCk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoIC0tY2xyLWRyb3Bkb3duLXNlbGVjdGlvbi1jb2xvciApOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZl''@;'; put 'put ''KTstLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3I6dHJhbnNwYXJlbnR9LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8sLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnksLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzcywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi13YXJuaW5nLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzcywuZHJvcGRvd24tbWVudSAuYnRuLWxpbmssLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWhlYWRlcntvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0''@;'; put 'put ''ZXh0LWFsaWduOmxlZnQ7anVzdGlmeS1jb250ZW50OnN0YXJ0fS5kcm9wZG93bntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTttYXJnaW46MDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb25bc2hhcGVePWNhcmV0XSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49YW5nbGVde2NvbG9yOmluaGVyaXQ7aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUgY2Rz''@;'; put 'put ''LWljb25bc2hhcGVePWNhcmV0XSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbltzaGFwZV49YW5nbGVde21hcmdpbi10b3A6dW5zZXQ7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcp''@;'; put 'put ''fS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0bnt0ZXh0LW92ZXJmbG93OnVuc2V0fS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbnt0cmFuc2Zvcm06bm9uZX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb25bc2hhcGVePWNhcmV0XSwuZHJv''@;'; put 'put ''cGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb25bc2hhcGVePWNhcmV0XSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb25bc2hhcGVePWFuZ2xlXSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb25bc2hhcGVePWFuZ2xlXXtyaWdodDp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pe3BhZGRpbmc6MDtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3IpfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKSBjZHMt''@;'; put 'put ''aWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKSBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''Om5vdCguYnRuKSBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0OjB9LmRyb3Bkb3duIGJ1dHRvbi5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pe2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xv''@;'; put 'put ''cil9LmRyb3Bkb3duLW1lbnU+KntkaXNwbGF5OmJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcH0uZHJvcGRvd24tbWVudXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttaW4td2lkdGg6Y2FsYygxMjAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYmctY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hh''@;'; put 'put ''ZG93LTIwMCk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSAwO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTA1MH0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVye2NvbG9yOnZhcigtLWNsci1kcm9w''@;'; put 'put ''ZG93bi1oZWFkZXItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItZHJvcGRvd24taGVhZGVyLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkp''@;'; put 'put ''O2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luOjB9LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWhlYWRlcn4uZHJvcGRvd24taXRlbSwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bj4uZHJvcGRvd24taXRlbXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLWlu''@;'; put 'put ''Zm8sLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzcywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzcywuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWxpbmssLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bk''@;'; put 'put ''b3duLWl0ZW0tYmctY29sb3IpO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmF1dG87bWFyZ2luOjA7d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpub25lfS5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4uYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuYWN0aXZl''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vz''@;'; put 'put ''cy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tbGluay5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVy''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpob3Zl''@;'; put 'put ''ciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtcHJpbWFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5n''@;'; put 'put ''ZXI6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LXdhcm5pbmc6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpob3Zlci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0''@;'; put 'put ''bGluZS1kYW5nZXI6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6YWN0aXZl''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZS5hY3RpdmUsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXdhcm5pbmc6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjphY3RpdmUuYWN0aXZlLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluazphY3RpdmUuYWN0aXZlLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG46Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6''@;'; put 'put ''Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6Zm9jdXMsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1wcmltYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmZvY3VzLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmZvY3Vze3otaW5kZXg6aW5o''@;'; put 'put ''ZXJpdH0uZHJvcGRvd24tbWVudSAuYnRuLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZv''@;'; put 'put ''LmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUt''@;'; put 'put ''d2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi1wcmltYXJ5LmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5kaXNhYmxl''@;'; put 'put ''ZCwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuZHJv''@;'; put 'put ''cGRvd24taXRlbTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWJnLWNvbG9yKTstd2Via2l0LXVzZXItc2VsZWN0''@;'; put 'put ''Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJs''@;'; put 'put ''ZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZDpob3Zlciwu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmRpc2FibGVkOmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5kaXNhYmxlZDpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxl''@;'; put 'put ''ZDpob3ZlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uZHJvcGRvd24tbWVudSAuYnRuLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29u''@;'; put 'put ''ZGFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2Fi''@;'; put 'put ''bGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZDph''@;'; put 'put ''Y3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFu''@;'; put 'put ''Z2VyOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6YWN0aXZlLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tbGluazpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5hY3RpdmV7cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLW1lbnUgLmJ0bi5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1pbmZvLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFjdGl2ZTpiZWZv''@;'; put 'put ''cmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLWRhbmdlci5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tbGluay5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBh''@;'; put 'put ''bmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGV7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTphZnRlciwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5leHBh''@;'; put 'put ''bmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmFm''@;'; put 'put ''dGVye2NvbnRlbnQ6IiI7bWFzazp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUyMDEyJTIyJTNFJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQSdub25lJyUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUz''@;'; put 'put ''RSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUz''@;'; put 'put ''RSUwQSUzQyUyRnN2ZyUzRSUwQSIpO21hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXNpemU6Y292ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS02KTt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7bWFyZ2luLWxlZnQ6YXV0b30uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4taW5mby5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuZHJv''@;'; put 'put ''cGRvd24taXRlbS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnku''@;'; put 'put ''ZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRh''@;'; put 'put ''YmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1k''@;'; put 'put ''YW5nZXIuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5''@;'; put 'put ''LmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGU6aG92''@;'; put 'put ''ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZTpob3ZlcjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlOmFjdGl2ZTphZnRl''@;'; put 'put ''ciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGU6YWN0aXZl''@;'; put 'put ''OmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcil9LmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFu''@;'; put 'put ''ZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUt''@;'; put 'put ''cHJpbWFyeS5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJs''@;'; put 'put ''ZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc3VjY2Vzcy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXBy''@;'; put 'put ''aW1hcnkuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5p''@;'; put 'put ''bmcuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhw''@;'; put 'put ''YW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFu''@;'; put 'put ''ZGFibGU6ZGlzYWJsZWQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86''@;'; put 'put ''Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9j''@;'; put 'put ''dXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi13YXJuaW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTIpKX0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVte3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW17cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9fS5kcm9wZG93bi1tZW51IGEuZHJvcGRvd24taXRlbXt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24tZGl2aWRlcntib3Jk''@;'; put 'put ''ZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1kcm9wZG93bi1kaXZpZGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1kaXZpZGVyLWNvbG9yKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS02KX0uYnRuLWdyb3VwLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5vcGVuPi5k''@;'; put 'put ''cm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXt2aXNpYmlsaXR5OnZpc2libGV9LmJ0bi1ncm91cC1vdmVyZmxvdy5ib3R0b20t''@;'; put 'put ''bGVmdD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJv''@;'; put 'put ''dHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnV7dG9wOjEwMCU7Ym90dG9tOmF1dG87bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCAwIDB9LmJ0bi1ncm91cC1vdmVyZmxvdy5ib3R0b20tbGVmdD4uZHJvcGRvd24t''@;'; put 'put ''bWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnV7bGVmdDowO3JpZ2h0OmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cu''@;'; put 'put ''Ym90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRv''@;'; put 'put ''d24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87''@;'; put 'put ''Ym90dG9tOjEwMCU7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDB9LmJ0bi1ncm91cC1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24udG9wLWxlZnQ+LmRyb3Bkb3duLW1l''@;'; put 'put ''bnV7bGVmdDowO3JpZ2h0OmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cudG9wLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmJ0bi1n''@;'; put 'put ''cm91cC1vdmVyZmxvdy5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51''@;'; put 'put ''LC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MTAwJTtsZWZ0OmF1dG87bWFyZ2luOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIDB9LmJ0bi1ncm91cC1vdmVyZmxvdy5sZWZ0LWJvdHRvbT4u''@;'; put 'put ''ZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7dG9wOjA7Ym90dG9tOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVy''@;'; put 'put ''Zmxvdy5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnV7Ym90dG9tOjA7dG9wOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7''@;'; put 'put ''bGVmdDoxMDAlO3JpZ2h0OmF1dG87bWFyZ2luOjAgMCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdo''@;'; put 'put ''dC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7dG9wOjA7Ym90dG9tOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnV7Ym90''@;'; put 'put ''dG9tOjA7dG9wOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kcm9wZG93''@;'; put 'put ''bi1jaGlsZC1ib3JkZXItY29sb3IpO3Bvc2l0aW9uOmFic29sdXRlfS5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3du''@;'; put 'put ''LW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3du''@;'; put 'put ''LW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51e2luc2V0OjAgMTAwJSBhdXRvIGF1dG87bWFyZ2luLXRvcDpjYWxjKCgtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMSkpO21hcmdpbi1yaWdodDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfS5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUt''@;'; put 'put ''d3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3du''@;'; put 'put ''LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51e2luc2V0OjAgYXV0byBhdXRvIDEwMCU7bWFyZ2luLXRvcDpjYWxjKCgtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpKSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVm''@;'; put 'put ''dC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6YXV0byAxMDAlIDAgYXV0bzttYXJnaW4tYm90dG9tOmNh''@;'; put 'put ''bGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1t''@;'; put 'put ''ZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJp''@;'; put 'put ''Z2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1l''@;'; put 'put ''bnV7aW5zZXQ6YXV0byBhdXRvIDAgMTAwJTttYXJnaW4tYm90dG9tOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX06cm9vdCBbY2RzLXRo''@;'; put 'put ''ZW1lXXstLWNsci1sb2dpbi10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWhpbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1sb2dpbi1mb290ZXItZ2FwOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNyk7LS1jbHItbG9naW4tY29weXJpZ2h0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3IpOy0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItbG9naW4t''@;'; put 'put ''d2VsY29tZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWVycm9yLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1iZy1jb2xvcik7LS1jbHItbG9naW4tZXJyb3ItaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQt''@;'; put 'put ''ZGFuZ2VyLWljb24tY29sb3IpOy0tY2xyLWxvZ2luLWxvZ28tY29sb3I6IzcxNzE3NTstLWNsci1sb2dpbi10cmFkZW1hcmstY29sb3I6dmFyKC0tY2xyLWgyLWNvbG9yKTstLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgyLWZvbnQtd2VpZ2h0KTstLWNsci1s''@;'; put 'put ''b2dpbi10cmFkZW1hcmstZm9udC1mYW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5KTstLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC1zaXplOnZhcigtLWNsci1oMi1mb250LXNpemUpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1sZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDItbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpfTpyb290IFtjZHMtdGhlbWV+PWRhcmtdey0tY2xyLWxvZ2luLWxvZ28tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSl9LmxvZ2luLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFy''@;'; put 'put ''c2V0PXV0ZjgsJTNDJTNGeG1sJTIwdmVyc2lvbiUzRCUyMjEuMCUyMiUyMGVuY29kaW5nJTNEJTIydXRmLTglMjIlM0YlM0UlMEQlMEElM0MlMjFET0NUWVBFJTIwc3ZnJTIwUFVCTElDJTIwJTIyLSUyRiUyRlczQyUyRiUyRkRURCUyMFNWRyUyMDEuMSUyRiUyRkVOJTIyJTIwJTIyaHR0cCUz''@;'; put 'put ''QSUyRiUyRnd3dy53My5vcmclMkZHcmFwaGljcyUyRlNWRyUyRjEuMSUyRkRURCUyRnN2ZzExLmR0ZCUyMiUzRSUwRCUwQSUzQ3N2ZyUwRCUwQSUyMCUyMCUyMCUyMCUyMHZlcnNpb24lM0QlMjIxLjElMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBpZCUzRCUyMm5vLWFzcGVjdC1yYXRpbyUyMiUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTBEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIweCUzRCUyMjBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHklM0QlMjIwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBoZWlnaHQlM0QlMjIyMDU1LjU1cHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB3aWR0aCUzRCUyMjE0NDBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHZpZXdC''@;'; put 'put ''b3glM0QlMjIwJTIwMCUyMDIwNTUuNTUlMjAxNDQwJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaW5ZTWluJTIwc2xpY2UlMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NkZXNjJTNFTG9naW4lMjBJbWFnZSUzQyUyRmRl''@;'; put 'put ''c2MlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjB0cmFuc2Zvcm0lM0Ql''@;'; put 'put ''MjJ0cmFuc2xhdGUlMjgwLjAwMDAwMCUyQyUyMC00LjAwMDAwMCUyOSUyMiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNGQUZBRkElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI0JTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBm''@;'; put 'put ''aWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjExMDguNDMlMjAxNDQzLjYzJTIwMTEwOS4wOCUyMDE0NDMuNjMlMjA0NDMuNDQlMjA3NzcuNzQlMjIl''@;'; put 'put ''M0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5M0Q4Q0ElMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG92''@;'; put 'put ''ZXJsYXklM0IlMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwMzM0LjkyJTIwNDQzLjQ0JTIwNzc3Ljc0JTIwMC43OSUyMDMzNC40OSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmls''@;'; put 'put ''bCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjAuNzklMjAyMTEuODglMjAwLjc5JTIwMzI5LjYlMjA1OS42MiUyMDI3MC43NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29u''@;'; put 'put ''JTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjE2MC42NSUyMDE2OS43NCUyMDAuNzklMjA5LjczJTIwMC43OSUyMDIxMS44OCUyMDkwLjI3JTIwMzAxLjQ2JTIwNTkuNjIlMjAyNzAuNzclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjI1MDMuNzclMjAxNDQzLjYzJTIwNjk3LjQ3JTIwMTQ0My42MyUyMDgwMy43NCUyMDEzMzcuMzYlMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJG''@;'; put 'put ''cG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyMTU4LjMzJTIwNjkxLjE1JTIwMC43OSUyMDg0OC43MiUyMDAuNzklMjAxNDI3LjQzJTIw''@;'; put 'put ''NDQ3LjUyJTIwOTgwLjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDRURERTAlMjIlMjBwb2ludHMlM0QlMjIyNTcuNzElMjA1OTEuNzUlMjAwLjc5JTIw''@;'; put 'put ''MzM0LjQ5JTIwMC43OSUyMDUzMy40MiUyMDE1OC4zMyUyMDY5MS4xNSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0E5QzlENSUyMiUyMHBvaW50cyUzRCUy''@;'; put 'put ''MjAuNzklMjA1MzMuNDIlMjAwLjc5JTIwODQ4LjcyJTIwMTU4LjMzJTIwNjkxLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9p''@;'; put 'put ''bnRzJTNEJTIyODA2LjQ2JTIwMTE0MC44OSUyMDU0Ni45NCUyMDg4MS4yOCUyMDQ0Ny41MiUyMDk4MC43JTIwNzA2LjkzJTIwMTI0MC40MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29u''@;'; put 'put ''JTIwZmlsbCUzRCUyMiUyMzhGQzRERiUyMiUyMHBvaW50cyUzRCUyMjQ0Ny41MiUyMDk4MC43JTIwMC43OSUyMDE0MjcuNDMlMjAwLjc5JTIwMTQ0My42MyUyMDUwMy43NyUyMDE0NDMuNjMlMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzBDMERDJTIyJTIwcG9pbnRzJTNEJTIyNjA4LjIzJTIwODE5Ljk5JTIwNTQ2Ljk0JTIwODgxLjI4JTIwODA2LjQ2JTIwMTE0MC44OSUyMDg2Ny42NCUyMDEwNzkuNyUyMiUzRSUz''@;'; put 'put ''QyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjQyMC4wNSUyMDQyOS4zOSUyMDMxOS4wMSUyMDUzMC40NSUyMDYwOC4yMyUyMDgx''@;'; put 'put ''OS45OSUyMDcwOS4zJTIwNzE4LjkxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjlBRkQ0JTIyJTIwcG9pbnRzJTNEJTIyNzA5LjMlMjA3MTguOTElMjA2''@;'; put 'put ''MDguMjMlMjA4MTkuOTklMjA4NjcuNjQlMjAxMDc5LjclMjA5NjguNzQlMjA5NzguNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzhFQjVCQyUyMiUyMHBv''@;'; put 'put ''aW50cyUzRCUyMjYxOS41OSUyMDIyOS44MiUyMDM5My40MiUyMDMuMTIlMjAzMjcuMjclMjAzLjEyJTIwMTYwLjY1JTIwMTY5Ljc0JTIwNDIwLjA1JTIwNDI5LjM5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEVCNUJDJTIyJTIwcG9pbnRzJTNEJTIyMzE5LjAxJTIwNTMwLjQ1JTIwMzE5LjAxJTIwNTMwLjQ1JTIwOTAuMjclMjAzMDEuNDYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3Q0IwQzclMjIlMjBwb2ludHMlM0QlMjIxNjAuNjUlMjAxNjkuNzQlMjA1OS42MiUyMDI3MC43NyUyMDkwLjI3JTIwMzAxLjQ2JTIwMzE5LjAxJTIwNTMwLjQ1JTIwNDIwLjA1JTIwNDI5LjM5JTIyJTNFJTNDJTJGcG9s''@;'; put 'put ''eWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODRDNEQyJTIyJTIwcG9pbnRzJTNEJTIyNTkuNjIlMjAyNzAuNzclMjAwLjc5JTIwMzI5LjYlMjAwLjc5JTIwMzM0LjQ5JTIwMjU3Ljcx''@;'; put 'put ''JTIwNTkxLjc1JTIwMzE5LjAxJTIwNTMwLjQ1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzN0NCMEM3JTIyJTIwcG9pbnRzJTNEJTIyNTM3LjU1JTIwMy4x''@;'; put 'put ''MiUyMDM5My40MiUyMDMuMTIlMjA2MTkuNTklMjAyMjkuODIlMjA2OTEuNzQlMjAxNTcuNjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4N0QxREIlMjIl''@;'; put 'put ''MjBwb2ludHMlM0QlMjI4NDYuMjUlMjAzLjEyJTIwNTM3LjU1JTIwMy4xMiUyMDY5MS43NCUyMDE1Ny42NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NE''@;'; put 'put ''RTNFRSUyMiUyMHBvaW50cyUzRCUyMjkwOS44NyUyMDE0NDMuNjMlMjA4NTAuMTklMjAxMzgzLjg3JTIwNzkwLjQzJTIwMTQ0My42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIw''@;'; put 'put ''ZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjMxOS4wMSUyMDUzMC40NSUyMDI1Ny43MSUyMDU5MS43NSUyMDQ0My40NCUyMDc3Ny43NCUyMDU0Ni45NCUyMDg4MS4yOCUyMDYwOC4yMyUyMDgxOS45OSUyMDg2Ny42NCUyMDEwNzkuNyUyMDg2Ny42NCUyMDEwNzkuNyUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjg2Ny42NCUyMDEwNzkuNyUyMDgwNi40NiUyMDExNDAuODklMjA5MDMuMzEl''@;'; put 'put ''MjAxMjM3Ljc4JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwNjUuNTclMjAx''@;'; put 'put ''MDc1LjUyJTIwOTY4Ljc0JTIwOTc4LjYlMjA4NjcuNjQlMjAxMDc5LjclMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZD''@;'; put 'put ''N0RGJTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDg2Ny42NCUyMDEwNzkuNyUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMjQwLjA4JTIwNzA3LjIyJTIwMTE2Ny45JTIwNzc5LjQlMjAxMjY0LjY4JTIwODc2LjQlMjAxMzM2Ljg3JTIwODA0LjIyJTIwMTI0MC4wOCUyMDcwNy4yMSUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjk4MC44MyUyMDQ0Ny4zOSUyMDY5MS43NCUyMDE1Ny42NiUyMDYxOS41OSUy''@;'; put 'put ''MDIyOS44MiUyMDkwOC42NiUyMDUxOS41NiUyMDk4MC44MyUyMDQ0Ny4zOSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDRFNyUyMiUyMHBvaW50cyUz''@;'; put 'put ''RCUyMjcwOS4zJTIwNzE4LjkxJTIwOTY4Ljc0JTIwOTc4LjYlMjAxMTY3LjkxJTIwNzc5LjQlMjA5MDguNjYlMjA1MTkuNTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwl''@;'; put 'put ''M0QlMjIlMjM2OUFGRDQlMjIlMjBwb2ludHMlM0QlMjI5ODAuODMlMjA0NDcuMzklMjA5MDguNjYlMjA1MTkuNTUlMjAxMTY3LjkxJTIwNzc5LjQlMjAxMjQwLjA4JTIwNzA3LjIxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTAzNC41OSUyMDMuMTIlMjA4NDYuMjUlMjAzLjEyJTIwNjkxLjc0JTIwMTU3LjY2JTIwOTgwLjgzJTIwNDQ3LjM5JTIwMTIyOS43NSUyMDE5OC40NyUyMiUzRSUzQyUyRnBvbHln''@;'; put 'put ''b24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjEyNDAuMDglMjA3MDcuMjElMjAxMzM2Ljg3JTIwODA0LjIyJTIwMTU4Ni4wMSUyMDU1NS4wOCUy''@;'; put 'put ''MDE0ODkuMTQlMjA0NTguMTIlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3MEMwREMlMjIlMjBwb2ludHMlM0QlMjIxMjI5Ljc1JTIwMTk4LjQ3JTIwOTgw''@;'; put 'put ''LjgzJTIwNDQ3LjM5JTIwMTI0MC4wOCUyMDcwNy4yMSUyMDE0ODkuMTQlMjA0NTguMTIlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBw''@;'; put 'put ''b2ludHMlM0QlMjIxMjkyLjIyJTIwMTMwMi4zOCUyMDE0MzMuMzIlMjAxNDQzLjYzJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxNDkxLjE4JTIwMTEwMy40MiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''M0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDExMDkuMDglMjAxNDQzLjYzJTIwMTE1MC45OCUyMDE0NDMuNjMlMjAxMTkxLjA5JTIwMTQwMy41MSUyMiUzRSUzQyUyRnBvbHlnb24l''@;'; put 'put ''M0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzc1QjhDNSUyMiUyMHBvaW50cyUzRCUyMjExNTAuOTglMjAxNDQzLjYzJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxMTkxLjA5JTIwMTQwMy41MSUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEyOTIuMjIlMjAxMzAyLjM4JTIwMTExMi4wMyUyMDExMjIuMDIlMjAx''@;'; put 'put ''MDEwLjkyJTIwMTIyMy4xMyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNkVBNEJDJTIyJTIwcG9pbnRzJTNEJTIyMTE5''@;'; put 'put ''MS4wOSUyMDE0MDMuNTElMjAxMjMxLjE2JTIwMTQ0My42MyUyMDE0MzMuMzIlMjAxNDQzLjYzJTIwMTI5Mi4yMiUyMDEzMDIuMzglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZp''@;'; put 'put ''bGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTM4My4zJTIwODUwLjc1JTIwMTMxMS4xMiUyMDkyMi45NCUyMDE0OTEuMTglMjAxMTAzLjQyJTIwMTU2''@;'; put 'put ''My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxNDkxLjE4JTIwMTEwMy40MiUyMDE4MzAu''@;'; put 'put ''NjElMjAxNDQzLjYzJTIwMTk3NC44NiUyMDE0NDMuNjMlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzZFQTRCQyUyMiUy''@;'; put 'put ''MHBvaW50cyUzRCUyMjE0OTEuMTglMjAxMTAzLjQyJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTgxMi42NSUyMDc4MS45NSUyMDE2MzIuNDYlMjA2MDEuNTklMjAxMzgzLjMlMjA4NTAuNzUlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE1NjMuMzclMjAxMDMxLjIzJTIwMTk3NC44NiUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxMDIzLjk5JTIw''@;'; put 'put ''MTgxMi42NSUyMDc4MS45NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzc4Q0FENCUyMiUyMHBvaW50cyUzRCUyMjE1NjMuMzclMjAxMDMxLjIzJTIwMTk3''@;'; put 'put ''NC44NiUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxMDIzLjk5JTIwMTgxMi42NSUyMDc4MS45NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmls''@;'; put 'put ''bCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjgwMy43NCUyMDEzMzcuMzYlMjA4NTAuMTklMjAxMzgzLjg3JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDkwMy4zMSUyMDEyMzcuNzglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjBwb2ludHMlM0QlMjIxMDY1LjU3JTIwMTA3NS41MiUyMDExMTIuMDMlMjAxMTIyLjAyJTIwMTMxMS4xMiUyMDkyMi45NCUyMDEyNjQuNjklMjA4NzYuNCUyMiUzRSUzQyUyRnBvbHlnb24lM0Ul''@;'; put 'put ''MEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzc3QjhEOSUyMiUyMHBvaW50cyUzRCUyMjY5Ny40NyUyMDE0NDMuNjMlMjA3OTAuNDMlMjAxNDQzLjYzJTIwODUwLjE5JTIwMTM4My44NyUyMDgwMy43''@;'; put 'put ''NCUyMDEzMzcuMzYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwOTAzLjMxJTIw''@;'; put 'put ''MTIzNy43OCUyMDk0OS43OCUyMDEyODQuMjclMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzVEQjVENiUyMiUyMHBvaW50''@;'; put 'put ''cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA5MDMuMzElMjAxMjM3Ljc4JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3Ql''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTAzOC4yNDcyOTclMkMlMjAxMTQ5LjI3NTQyOSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTAzOC4yNDcyOTclMkMlMjAtMTE0OS4yNzU0MjklMjklMjAlMjIl''@;'; put 'put ''MjB4JTNEJTIyOTY2Ljc1MjI5NyUyMiUyMHklM0QlMjIxMTE2LjQxMDQzJTIyJTIwd2lkdGglM0QlMjIxNDIuOTklMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Ny''@;'; put 'put ''ZWN0JTIwZmlsbCUzRCUyMiUyMzU3QThEMCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODEwMzguMjQ3Mjk3JTJDJTIwMTE0OS4yNzU0MjklMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEwMzguMjQ3Mjk3JTJDJTIwLTExNDkuMjc1NDI5JTI5JTIw''@;'; put 'put ''JTIyJTIweCUzRCUyMjk2Ni43NTIyOTclMjIlMjB5JTNEJTIyMTExNi40MTA0MyUyMiUyMHdpZHRoJTNEJTIyMTQyLjk5JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDAwMDAlMjIlMjBvcGFjaXR5JTNEJTIyMC40MiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjA5NjQuNDYlMjAxMTc2LjYz''@;'; put 'put ''JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUy''@;'; put 'put ''Mm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTI2NC42OSUyMDg3Ni40JTIwMTMxMS4xMiUyMDkyMi45NCUyMDEzODMuMyUyMDg1MC43NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzU3QThEMCUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMjY0LjY5JTIwODc2LjQlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTM4My4zJTIwODUwLjc1JTIyJTNFJTNDJTJG''@;'; put 'put ''cG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTNEOENBJTIyJTIwb3BhY2l0eSUzRCUyMjAuNiUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBvdmVybGF5JTNC''@;'; put 'put ''JTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEzODMuMyUyMDg1MC43NSUyMDE2MzIuNDYlMjA2MDEuNTklMjAxNTg2LjAxJTIwNTU1LjA4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNURCNUQ2JTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEzODMuMyUyMDg1MC43NSUyMDE2MzIuNDYlMjA2MDEuNTklMjAxNTg2LjAxJTIwNTU1LjA4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZEM0U2JTIyJTIwcG9pbnRzJTNEJTIyMjA1NiUyMDAuMTIlMjAxNjQ1LjQ5JTIwMC4xMiUyMDE2NDguNDklMjAzLjEyJTIwMTk0NC4wNyUyMDMuMTIlMjAxNzk2LjIyJTIwMTUwLjk5''@;'; put 'put ''JTIwMTg5My4xMiUyMDI0Ny45NyUyMDIwNTQuNDUlMjA4Ni42NCUyMDIwNTQuNDUlMjAxNzkuNiUyMDE5MzkuNTglMjAyOTQuNDclMjAyMDU2JTIwNDExJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzN0FCOUQ5JTIyJTIwcG9pbnRzJTNEJTIyMTY0OC40OSUyMDMuMTIlMjAxNzk2LjIyJTIwMTUwLjk5JTIwMTk0NC4wNyUyMDMuMTIlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2NkFFRDQlMjIlMjBwb2ludHMlM0QlMjIyMDU0LjQ1JTIwODYuNjQlMjAxODkzLjEyJTIwMjQ3Ljk3JTIwMTkzOS41OCUyMDI5NC40NyUyMDIwNTQuNDUlMjAxNzkuNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE4ODQuODIlMjA3MDkuNzglMjAyMDU0LjQ1JTIwODc5LjU3JTIwMjA1NC40NSUyMDU0MC4xNSUyMiUzRSUzQyUyRnBvbHlnb24l''@;'; put 'put ''M0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDRFNyUyMiUyMHBvaW50cyUzRCUyMjE0ODkuMTQlMjA0NTguMTIlMjAxNDg5LjE0JTIwNDU4LjEyJTIwMTM3MS4xMyUyMDMzOS45OSUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDRFNyUyMiUyMHBvaW50cyUzRCUyMjE3OTYuMjIlMjAxNTAuOTklMjAxNjQ4LjQ5JTIwMy4xMiUyMDE0MjUuMSUy''@;'; put 'put ''MDMuMTIlMjAxMzAxLjkxJTIwMTI2LjMxJTIwMTU2MS4zJTIwMzg1Ljk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwdHJhbnNmb3JtJTNE''@;'; put 'put ''JTIydHJhbnNsYXRlJTI4MTc5OC45NTQwNjYlMkMlMjAzODguNzk4NzgxJTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xNzk4Ljk1NDA2NiUyQyUyMC0zODguNzk4NzgxJTI5JTIwJTIyJTIweCUzRCUyMjE2MzIuODI0MDclMjIlMjB5JTNEJTIyMzU1LjkzMzc4''@;'; put 'put ''MSUyMiUyMHdpZHRoJTNEJTIyMzMyLjI2JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjBwb2ludHMl''@;'; put 'put ''M0QlMjIxNTg2LjAxJTIwNTU1LjA4JTIwMTYzMi40NiUyMDYwMS41OSUyMDE2MzIuNDYlMjA2MDEuNTklMjAxNTg2LjAxJTIwNTU1LjA4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBm''@;'; put 'put ''aWxsJTNEJTIyJTIzQjNFQUVFJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTU3My43MTE1NzclMkMlMjA0NzAuNjIwMjYzJTI5JTIwcm90YXRlJTI4LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xNTczLjcxMTU3NyUyQyUyMC00NzAuNjIwMjYzJTI5JTIwJTIyJTIweCUz''@;'; put 'put ''RCUyMjE1MjIuNjgxNTglMjIlMjB5JTNEJTIyNDAyLjA4NTI2MyUyMiUyMHdpZHRoJTNEJTIyMTAyLjA2JTIyJTIwaGVpZ2h0JTNEJTIyMTM3LjA3JTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3Ql''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzQjNFQUVFJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTc1OC42NzY3NTglMkMlMjA2NTUuNzY3MTIwJTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xNzU4LjY3Njc1OCUyQyUyMC02NTUuNzY3MTIwJTI5JTIwJTIyJTIw''@;'; put 'put ''eCUzRCUyMjE3MDcuNjQ2NzYlMjIlMjB5JTNEJTIyNTI4LjI5MjEyJTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjIyNTQuOTUlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9s''@;'; put 'put ''eWdvbiUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjBwb2ludHMlM0QlMjIxMzAxLjkxJTIwMTI2LjMxJTIwMTE3OC44NCUyMDMuMTIlMjAxMDM0LjU5JTIwMy4xMiUyMDEyMjkuNzUlMjAxOTguNDclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4M0MwQzglMjIlMjBwb2ludHMlM0QlMjIxODEyLjY1JTIwNzgxLjk1JTIwMjA1NC40NSUyMDEwMjMuOTklMjAyMDU0LjQ1JTIwODc5LjU3JTIwMTg4NC44MiUyMDcwOS43OCUyMiUzRSUzQyUyRnBvbHln''@;'; put 'put ''b24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzdEQzZEQyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODEzOTUuNTE2OTAxJTJDJTIwMjkyLjIwNjUxOSUyOSUyMHJvdGF0ZSUyOC00''@;'; put 'put ''NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTM5NS41MTY5MDElMkMlMjAtMjkyLjIwNjUxOSUyOSUyMCUyMiUyMHglM0QlMjIxMzQ0LjQ5MTklMjIlMjB5JTNEJTIyMTA4LjcwMTUxOSUyMiUyMHdpZHRoJTNEJTIyMTAyLjA1JTIyJTIwaGVpZ2h0JTNEJTIyMzY3LjAxJTIyJTNFJTNDJTJG''@;'; put 'put ''cmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjhCOEQ1JTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTY0NS4zMTM2MTklMkMlMjA1NDIuMjQ5NzYwJTI5JTIwcm90YXRlJTI4''@;'; put 'put ''LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xNjQ1LjMxMzYxOSUyQyUyMC01NDIuMjQ5NzYwJTI5JTIwJTIyJTIweCUzRCUyMjE1OTQuMjgzNjIlMjIlMjB5JTNEJTIyNTA5LjM4NDc2JTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUy''@;'; put 'put ''RnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODAuMDAwMDAwJTJDJTIwMy4wMDAwMDAlMjklMjIl''@;'; put 'put ''MjBzdHJva2UlM0QlMjIlMjMwMDAwMDAlMjIlMjBvcGFjaXR5JTNEJTIyMC4xNSUyMiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBkJTNEJTIyTTAuOTUlMkMwLjEyJTIwTDAuOTUlMkM4NDAuMTIlMjIlMjBpZCUzRCUy''@;'; put 'put ''MlNoYXBlJTIyJTNFJTNDJTJGcGF0aCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUzQyUyRnN2ZyUzRSk7''@;'; put 'put ''YmFja2dyb3VuZC1zaXplOjEwMCU7YmFja2dyb3VuZC1wb3NpdGlvbjpjYWxjKDU4MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LmxvZ2luLXdyYXBwZXIgLmxvZ2lue2JhY2tncm91bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6''@;'; put 'put ''MTAwdmg7d2lkdGg6Y2FsYyg1ODAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVyLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4taGVhZGVye2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJv''@;'; put 'put ''dzthbGlnbi1pdGVtczpjZW50ZXJ9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIgLmFjdGlvbnMsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1oZWFkZXIgLmFjdGlvbnN7bWFyZ2luLWxlZnQ6YXV0b30ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWhlYWRlciAu''@;'; put 'put ''bG9nb3toZWlnaHQ6MTZweDt3aWR0aDoxMDAlO21hc2s6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsXCAlM0NzdmclMjB3aWR0aCUzRCUyMjEwNSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTA1JTIwMTYlMjIlMjBmaWxsJTNEJTIy''@;'; put 'put ''bm9uZSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNNDQuOTM3MSUyMDE0LjhMNDAuMzU5OCUyMDIuMDAwODJDNDAuMjkzMiUyMDEuODAwOTQlMjA0MC4yMjY2JTIwMS42MDEwNiUyMDQwLjIyNjYl''@;'; put 'put ''MjAxLjQwMTE3QzQwLjIyNjYlMjAwLjg2ODE1MyUyMDQwLjY5MyUyMDAuMzQxNzk3JTIwNDEuMzUyNiUyMDAuMzQxNzk3QzQxLjk1MjIlMjAwLjM0MTc5NyUyMDQyLjM0NTMlMjAwLjc0MTU2MyUyMDQyLjQ3ODYlMjAxLjI2NzkyTDQ2LjI1NjQlMjAxMi4yNzQ4TDUwLjEwMDglMjAxLjI2Nzky''@;'; put 'put ''QzUwLjMwMDclMjAwLjczNDklMjA1MC42MzM4JTIwMC4zNDE3OTclMjA1MS4yMjY4JTIwMC4zNDE3OTdINTEuMzZDNTEuOTU5NyUyMDAuMzQxNzk3JTIwNTIuMzUyOCUyMDAuNzQxNTYzJTIwNTIuNTUyNyUyMDEuMjY3OTJMNTYuMzMwNSUyMDEyLjI3NDhMNjAuMTc0OSUyMDEuMjAxMjlDNjAu''@;'; put 'put ''MzA4MiUyMDAuNzM0OTAxJTIwNjAuNjQxMyUyMDAuMzQxNzk3JTIwNjEuMjM0MyUyMDAuMzQxNzk3QzYxLjkwMDYlMjAwLjM0MTc5NyUyMDYyLjM2MDMlMjAwLjgwODE4OCUyMDYyLjM2MDMlMjAxLjQwMTE3QzYyLjM2MDMlMjAxLjYwMTA2JTIwNjIuMjkzNiUyMDEuODY3NTclMjA2Mi4yMjcl''@;'; put 'put ''MjAyLjAwMDgyTDU3LjU4MzElMjAxNC44QzU3LjMxNjYlMjAxNS40NjYzJTIwNTYuODUwMiUyMDE1Ljc5MjglMjA1Ni4zMjM4JTIwMTUuNzkyOEg1Ni4yNTcyQzU1LjY1NzUlMjAxNS43OTI4JTIwNTUuMjY0NCUyMDE1LjQ1OTYlMjA1NC45OTc5JTIwMTQuOEw1MS4yODY4JTIwMy45MjYzNkw0''@;'; put 'put ''Ny41MDklMjAxNC44QzQ3LjMwOTElMjAxNS40NjYzJTIwNDYuODQ5NCUyMDE1Ljc5MjglMjA0Ni4zMTYzJTIwMTUuNzkyOEg0Ni4yNDk3QzQ1LjY1MDElMjAxNS43OTI4JTIwNDUuMTkwMyUyMDE1LjQ1OTYlMjA0NC45MjM4JTIwMTQuOEg0NC45MzcxWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcx''@;'; put 'put ''NzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk03OC4zNTI1JTIwMS40Njc4Qzc4LjM1MjUlMjAwLjg2ODE1MiUyMDc4LjgxODklMjAwLjM0MTc5NyUyMDc5LjQ3ODUlMjAwLjM0MTc5N0M4MC4xMzgyJTIwMC4zNDE3OTclMjA4MC42MDQ1JTIwMC44MDgxODclMjA4MC42MDQ1JTIwMS40''@;'; put 'put ''Njc4VjQuMDUyOTZDODEuNzMwNiUyMDEuNTM0NDMlMjA4NC4xODI1JTIwMC4zNDE3OTclMjA4NS44NDE1JTIwMC4zNDE3OTdDODYuNTAxMSUyMDAuMzQxNzk3JTIwODYuOTY3NSUyMDAuODA4MTg3JTIwODYuOTY3NSUyMDEuNDY3OEM4Ni45Njc1JTIwMi4wNjc0NSUyMDg2LjU2NzclMjAyLjUy''@;'; put 'put ''NzE4JTIwODUuOTc0NyUyMDIuNTkzODFDODMuMDU2NCUyMDIuOTI2OTUlMjA4MC42NzEyJTIwNS4xMTIzNCUyMDgwLjY3MTIlMjA5LjQ4OTc4VjE0LjU5MzVDODAuNjcxMiUyMDE1LjE5MzElMjA4MC4yMDQ4JTIwMTUuNzE5NSUyMDc5LjU0NTIlMjAxNS43MTk1Qzc4Ljg4NTYlMjAxNS43MTk1''@;'; put 'put ''JTIwNzguNDE5MiUyMDE1LjE4NjQlMjA3OC40MTkyJTIwMTQuNTkzNVYxLjQ2MTE0JTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTk0LjEyOTQlMjAxNS45MjcyQzkwLjA4NTElMjAxNS45MjcyJTIwODYuNzA3JTIwMTIuNzQyNCUyMDg2Ljcw''@;'; put 'put ''NyUyMDguMTcxN1Y4LjEwNTA4Qzg2LjcwNyUyMDMuNzk0MjclMjA4OS42OTE5JTIwMC4zNDk2MDklMjA5My44MDI5JTIwMC4zNDk2MDlDOTguMTgwMyUyMDAuMzQ5NjA5JTIwMTAwLjY5OSUyMDMuOTk0MTUlMjAxMDAuNjk5JTIwNy45MTE4NkMxMDAuNjk5JTIwOC41MTE1MSUyMDEwMC4yMzIl''@;'; put 'put ''MjA4Ljk3MTIzJTIwOTkuNjM5NSUyMDguOTcxMjNIODguODk5MUM4OS4yMzIyJTIwMTIuMjIyNyUyMDkxLjQ4NDIlMjAxNC4wMDgzJTIwOTQuMTM2JTIwMTQuMDA4M0M5NS45OTQ5JTIwMTQuMDA4MyUyMDk3LjMyMDglMjAxMy4yODIlMjA5OC4zODAyJTIwMTIuMjgyNkM5OC41ODAxJTIwMTIu''@;'; put 'put ''MTQ5NCUyMDk4Ljc4JTIwMTIuMDE2MSUyMDk5LjAzOTglMjAxMi4wMTYxQzk5LjU3MjglMjAxMi4wMTYxJTIwMTAwLjAzMyUyMDEyLjQ4MjUlMjAxMDAuMDMzJTIwMTIuOTQyMkMxMDAuMDMzJTIwMTMuMjA4OCUyMDk5Ljg5OTMlMjAxMy40NzUzJTIwOTkuNjk5NCUyMDEzLjY2ODVDOTguMzA2''@;'; put 'put ''OSUyMDE0Ljk5NDQlMjA5Ni42NDc5JTIwMTUuOTIwNSUyMDk0LjEyOTQlMjAxNS45MjA1VjE1LjkyNzJaTTk4LjUwNjglMjA3LjIzODkxQzk4LjMwNjklMjA0LjUyMDUxJTIwOTYuNzE0NSUyMDIuMTM1MjMlMjA5My44MDI5JTIwMi4xMzUyM0M5MS4yMTc3JTIwMi4xMzUyMyUyMDg5LjI5MjIl''@;'; put 'put ''MjA0LjMyMDYyJTIwODguOTY1NyUyMDcuMjM4OTFIOTguNTEzNUg5OC41MDY4WiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk02Mi4zNzUlMjAxMS4yMTU4QzYyLjM3NSUyMDcuOTY0NCUyMDY1LjAyNjglMjA2LjMwNTM3JTIwNjguODA0NiUy''@;'; put 'put ''MDYuMzA1MzdDNzAuNzMwMSUyMDYuMzA1MzclMjA3Mi4xMjI2JTIwNi41NzE4OCUyMDczLjQ0MTklMjA2Ljk3MTY1VjYuNDM4NjNDNzMuNDQxOSUyMDMuNzIwMjIlMjA3MS43ODI4JTIwMi4zMjc3JTIwNjguOTMxMiUyMDIuMzI3N0M2Ny40MDU0JTIwMi4zMjc3JTIwNjYuNTQ1OSUyMDIuNTI3''@;'; put 'put ''NTglMjA2NS40MTk5JTIwMi45OTM5N0M2NS4yODY2JTIwMy4wNjA2JTIwNjUuMTUzNCUyMDMuMDYwNiUyMDY1LjAyMDElMjAzLjA2MDZDNjQuNDg3MSUyMDMuMDYwNiUyMDY0LjAyNzQlMjAyLjU5NDIxJTIwNjQuMDI3NCUyMDIuMDY3ODVDNjQuMDI3NCUyMDEuNjAxNDYlMjA2NC4yMjczJTIw''@;'; put 'put ''MS4zNDE2MSUyMDY0LjYyNyUyMDEuMTQxNzJDNjYuMDg2MiUyMDAuNDc1NDQ3JTIwNjcuMjEyMiUyMDAuMjgyMjI3JTIwNjkuMTM3NyUyMDAuMjgyMjI3QzcxLjI1NjUlMjAwLjI4MjIyNyUyMDcyLjkxNTUlMjAwLjgxNTI1MiUyMDczLjk3NDklMjAxLjk0MTI2Qzc0Ljk2NzYlMjAyLjkzNDAx''@;'; put 'put ''JTIwNzUuNTAwNyUyMDQuMzkzMTYlMjA3NS41MDA3JTIwNi4zMTg3VjE0LjYwNzJDNzUuNTAwNyUyMDE1LjI3MzUlMjA3NS4wMzQzJTIwMTUuNzMzMiUyMDc0LjQ0MTMlMjAxNS43MzMyQzczLjc3NSUyMDE1LjczMzIlMjA3My4zODE5JTIwMTUuMjY2OCUyMDczLjM4MTklMjAxNC42NzM4VjEz''@;'; put 'put ''LjIxNDdDNzIuMzIyNSUyMDE0LjYwNzIlMjA3MC41OTY5JTIwMTUuNzk5OCUyMDY3Ljk0NTElMjAxNS43OTk4QzY1LjIyNjclMjAxNS45MzMxJTIwNjIuMzc1JTIwMTQuMzQwNyUyMDYyLjM3NSUyMDExLjIyMjVWMTEuMjE1OFpNNzMuNTE1MiUyMDEwLjA4OThWOC42MzA2OEM3Mi4zODkxJTIw''@;'; put 'put ''OC4yOTc1NCUyMDcwLjkzJTIwNy45NjQ0JTIwNjkuMDcxMSUyMDcuOTY0NEM2Ni4yMTk0JTIwNy45NjQ0JTIwNjQuNjkzNyUyMDkuMjIzNjYlMjA2NC42OTM3JTIwMTEuMDgyNlYxMS4xNDkyQzY0LjY5MzclMjAxMy4wNzQ3JTIwNjYuNDE5MyUyMDE0LjEzNDElMjA2OC40NzE0JTIwMTQuMTM0''@;'; put 'put ''MUM3MS4yNTY1JTIwMTQuMTM0MSUyMDczLjUwODUlMjAxMi40NzUxJTIwNzMuNTA4NSUyMDEwLjA4OThINzMuNTE1MlolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNNC4xMDIyMiUyMDEuMjY4NjJDMy42MzU4MyUyMDAuMjA5MjM3JTIwMi4z''@;'; put 'put ''NzY1NiUyMC0wLjMyMzc4NyUyMDEuMjUwNTUlMjAwLjIwOTIzNUMwLjEyNDU0NSUyMDAuNzQyMjU2JTIwLTAuMjc1MjE4JTIwMi4wMDE1MiUyMDAuMTkxMTc2JTIwMy4wNjA5TDQuOTYxNzIlMjAxMy40NzQ4QzUuNjg3OTYlMjAxNS4xMzM4JTIwNi40ODc0OSUyMDE1LjkyNjclMjA4LjAxMzI3''@;'; put 'put ''JTIwMTUuOTI2N0M5LjUzOTA0JTIwMTUuOTI2NyUyMDEwLjI2NTMlMjAxNS4wMDA2JTIwMTEuMDY0OCUyMDEzLjQ3NDhDMTEuMDY0OCUyMDEzLjQ3NDglMjAxNS4yNDI0JTIwNC4zODY3OSUyMDE1LjMwOSUyMDQuMzI2ODNDMTUuMzc1NiUyMDQuMjYwMiUyMDE1LjUwODklMjAzLjkyNzA2JTIw''@;'; put 'put ''MTUuOTA4NiUyMDMuOTI3MDZDMTYuMjQxOCUyMDMuOTI3MDYlMjAxNi41NjgzJTIwNC4xOTM1NyUyMDE2LjU2ODMlMjA0LjU5MzM0VjEzLjQ4MTVDMTYuNTY4MyUyMDE0Ljg3NCUyMDE3LjI5NDUlMjAxNiUyMDE4LjgyMDMlMjAxNkMyMC4zNDYxJTIwMTYlMjAyMS4wNzIzJTIwMTQuODc0JTIw''@;'; put 'put ''MjEuMDcyMyUyMDEzLjQ4MTVWNi4xODU3NEMyMS4wNzIzJTIwNC43OTMyMiUyMDIyLjA2NSUyMDMuODY3MSUyMDIzLjQ1NzYlMjAzLjg2NzFDMjQuODUwMSUyMDMuODY3MSUyMDI1LjcwOTYlMjA0Ljc5MzIyJTIwMjUuNzA5NiUyMDYuMTg1NzRWMTMuNDgxNUMyNS43MDk2JTIwMTQuODc0JTIw''@;'; put 'put ''MjYuNDQyNSUyMDE2JTIwMjcuOTYxNiUyMDE2QzI5LjQ4MDclMjAxNiUyMDMwLjIxMzYlMjAxNC44NzQlMjAzMC4yMTM2JTIwMTMuNDgxNVY2LjE4NTc0QzMwLjIxMzYlMjA0Ljc5MzIyJTIwMzEuMjA2NCUyMDMuODY3MSUyMDMyLjU5ODklMjAzLjg2NzFDMzMuOTkxNCUyMDMuODY3MSUyMDM0''@;'; put 'put ''Ljg1MDklMjA0Ljc5MzIyJTIwMzQuODUwOSUyMDYuMTg1NzRWMTMuNDgxNUMzNC44NTA5JTIwMTQuODc0JTIwMzUuNTc3MSUyMDE2JTIwMzcuMTAyOSUyMDE2QzM4LjYyODclMjAxNiUyMDM5LjM1NDklMjAxNC44NzQlMjAzOS4zNTQ5JTIwMTMuNDgxNVY1LjE5Mjk5QzM5LjM1NDklMjAyLjE0''@;'; put 'put ''MTQ0JTIwMzYuOTAzJTIwMC4wMjI2NzgxJTIwMzMuOTg0NyUyMDAuMDIyNjc4MUMzMS4wNjY0JTIwMC4wMjI2NzgxJTIwMjkuMjE0MiUyMDIuMDgxNDglMjAyOS4yMTQyJTIwMi4wODE0OEMyOC4wODgyJTIwMC44MjIyMTMlMjAyNi43NjIzJTIwMC4wMjI2NzgxJTIwMjQuNTEwMyUyMDAuMDIy''@;'; put 'put ''Njc4MUMyMi4xMjUlMjAwLjAyMjY3ODElMjAxOS45OTk2JTIwMi4wODE0OCUyMDE5Ljk5OTYlMjAyLjA4MTQ4QzE5LjAwNjglMjAwLjgyMjIxMyUyMDE3LjM0NzglMjAwLjAyMjY3ODElMjAxNS45NTUzJTIwMC4wMjI2NzgxQzEzLjgzNjUlMjAwLjAyMjY3ODElMjAxMi4xMTA5JTIwMC45NDg4''@;'; put 'put ''MDUlMjAxMS4xMTgxJTIwMy4zNDA3NEw4LjA2NjU3JTIwMTAuNTY5OEw0LjA4ODg5JTIwMS4yODg2MUw0LjEwMjIyJTIwMS4yNjg2MlolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAwLjg5MiUyMDIuMjAwNzFDMTAwLjg5MiUyMDEuMTQx''@;'; put 'put ''MzMlMjAxMDEuNjg0JTIwMC4zNDE3OTclMjAxMDIuNzUxJTIwMC4zNDE3OTdDMTAzLjgxNyUyMDAuMzQxNzk3JTIwMTA0LjYwOSUyMDEuMjAxMjklMjAxMDQuNjA5JTIwMi4yMDA3MUMxMDQuNjA5JTIwMy4yMDAxMyUyMDEwMy44MTclMjA0LjA1OTYyJTIwMTAyLjc1MSUyMDQuMDU5NjJDMTAx''@;'; put 'put ''Ljc1OCUyMDQuMDU5NjIlMjAxMDAuODkyJTIwMy4yMDAxMyUyMDEwMC44OTIlMjAyLjIwMDcxWk0xMDQuMjclMjAyLjIwMDcxQzEwNC4yNyUyMDEuMzQxMjElMjAxMDMuNjElMjAwLjY3NDkzNSUyMDEwMi43NDQlMjAwLjY3NDkzNUMxMDEuODc4JTIwMC42NzQ5MzUlMjAxMDEuMjE4JTIwMS40''@;'; put 'put ''MDExOCUyMDEwMS4yMTglMjAyLjIwMDcxQzEwMS4yMTglMjAzLjA2MDIxJTIwMTAxLjg3OCUyMDMuNzI2NDglMjAxMDIuNzQ0JTIwMy43MjY0OEMxMDMuNjElMjAzLjcyNjQ4JTIwMTA0LjI3JTIwMy4wMDAyNCUyMDEwNC4yNyUyMDIuMjAwNzFaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUy''@;'; put 'put ''MiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTEwMi4wODUlMjAxLjQwMjAzQzEwMi4wODUlMjAxLjI2ODc3JTIwMTAyLjE1MiUyMDEuMjAyMTUlMjAxMDIuMjg1JTIwMS4yMDIxNUgxMDIuODg1QzEwMy4xNTElMjAxLjIwMjE1JTIwMTAzLjI4NCUyMDEuMjY4NzclMjAxMDMuNDE4JTIwMS40''@;'; put 'put ''MDIwM0MxMDMuNTUxJTIwMS41MzUyOCUyMDEwMy41NTElMjAxLjY2ODU0JTIwMTAzLjU1MSUyMDEuODAxNzlDMTAzLjU1MSUyMDIuMDY4MyUyMDEwMy40MTglMjAyLjI2ODE5JTIwMTAzLjIxOCUyMDIuMzM0ODJMMTAzLjQ4NCUyMDIuNjY3OTZDMTAzLjUyOSUyMDIuNzEyMzclMjAxMDMuNTUx''@;'; put 'put ''JTIwMi43NTY3OSUyMDEwMy41NTElMjAyLjgwMTIxQzEwMy41NTElMjAyLjkzNDQ2JTIwMTAzLjQ4NCUyMDMuMDAxMDklMjAxMDMuMzUxJTIwMy4wMDEwOUMxMDMuMjg0JTIwMy4wMDEwOSUyMDEwMy4yMTglMjAyLjkzNDQ3JTIwMTAzLjE1MSUyMDIuODY3ODRMMTAyLjc1MSUyMDIuNDAxNDRI''@;'; put 'put ''MTAyLjQxOFYyLjgwMTIxQzEwMi40MTglMjAyLjkzNDQ2JTIwMTAyLjM1MiUyMDMuMDAxMDklMjAxMDIuMjE4JTIwMy4wMDEwOUMxMDIuMDg1JTIwMy4wMDEwOSUyMDEwMi4wMTklMjAyLjkzNDQ2JTIwMTAyLjAxOSUyMDIuODAxMjFWMS40MDg2OUgxMDIuMDg1VjEuNDAyMDNaTTEwMi44Nzgl''@;'; put 'put ''MjAyLjEyODI3QzEwMy4wNzglMjAyLjEyODI3JTIwMTAzLjIxMSUyMDEuOTk1MDIlMjAxMDMuMjExJTIwMS44NjE3NkMxMDMuMjExJTIwMS42NjE4OCUyMDEwMy4wNzglMjAxLjU5NTI1JTIwMTAyLjg3OCUyMDEuNTk1MjVIMTAyLjQ3OFYyLjEyODI3SDEwMi44NzhaJTIyJTIwZmlsbCUzRCUy''@;'; put 'put ''MiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7bWFzay1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxvZ2luLWxvZ28tY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVye2dhcDp2YXIoLS1jbHItbG9naW4tZm9v''@;'; put 'put ''dGVyLWdhcCl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIgYSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuY29weXJpZ2h0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZyk7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLWNvcHlyaWdodC1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ib2R5e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXI7d2lkdGg6Y2FsYygzMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItbG9naW4tdGl0bGUtY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLndlbGNvbWV7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLXdlbGNvbWUtY29sb3IpO21hcmdpbjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0''@;'; put 'put ''bGUgLnN1YnRpdGxlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLmhpbnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4taGludC1jb2xvcik7bWFyZ2lu''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50cmFkZW1hcmt7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcik7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXdlaWdodCk7Zm9udC1mYW1p''@;'; put 'put ''bHk6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseSk7Zm9udC1zaXplOnZhcigtLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC1zaXplKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nKX0ubG9naW4td3JhcHBlciAubG9n''@;'; put 'put ''aW4gLmxvZ2luLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6MTAwJX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5hdXRoLXNvdXJjZSwubG9naW4td3JhcHBlciAu''@;'; put 'put ''bG9naW4gLmxvZ2luLWdyb3VwIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5wYXNzd29yZCwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jaGVja2JveCwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9se21hcmdpbjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jaGVja2JveC13cmFwcGVye21hcmdpbjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMykgMH0ubG9naW4td3JhcHBlciAubG9naW4g''@;'; put 'put ''LmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9n''@;'; put 'put ''aW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdHt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dHt3aWR0aDoxMDAlfS5sb2dpbi13cmFw''@;'; put 'put ''cGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7d2lkdGg6MTAwJX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyPi5jbHItaW5wdXQt''@;'; put 'put ''Z3JvdXB7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyPi5jbHItaW5wdXQtZ3JvdXA+LmNsci1pbnB1dHt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb257bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbiAu''@;'; put 'put ''dXNlcm5hbWUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC5wYXNzd29yZHt3aWR0aDoxMDAlO21hcmdpbi10b3A6MH0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YmFja2dyb3VuZDp2YXIoLS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFs''@;'; put 'put ''ZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNv''@;'; put 'put ''bG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcjpiZWZvcmV7Y29udGVudDoiIjttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAy''@;'; put 'put ''NiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUy''@;'; put 'put ''MiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUzRS5jbHItaS1vdXRsaW5lJTdCZmlsbCUzQSdub25lJyUzQiU3RCUzQyUyRnN0eWxlJTNFJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFZXhjbGFtYXRpb24tY2ly''@;'; put 'put ''Y2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0QlMjJNMTglMkM2QTEyJTJDMTIlMkMwJTJD''@;'; put 'put ''MSUyQzAlMkMzMCUyQzE4JTJDMTIlMkMxMiUyQzAlMkMwJTJDMCUyQzE4JTJDNlptMCUyQzIyQTEwJTJDMTAlMkMwJTJDMSUyQzElMkMyOCUyQzE4JTJDMTAlMkMxMCUyQzAlMkMwJTJDMSUyQzE4JTJDMjhaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91''@;'; put 'put ''dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMiUyMiUyMGQlM0QlMjJNMTglMkMyMC4wN2ExLjMlMkMxLjMlMkMwJTJDMCUyQzEtMS4zLTEuM3YtNmExLjMlMkMxLjMlMkMwJTJDMSUyQzElMkMyLjYlMkMwdjZBMS4zJTJDMS4zJTJDMCUyQzAlMkMxJTJDMTglMkMyMC4wN1olMjIlM0UlM0Ml''@;'; put 'put ''MkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTMlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3klM0QlMjIyMy4wMiUyMiUyMHIlM0QlMjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UiKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1zaXplOmNvdmVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxvZ2luLWVycm9yLWljb24tY29sb3IpO21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNCkgMCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuZXJyb3IuYWN0aXZle2Rpc3BsYXk6ZmxleH0ubG9naW4td3JhcHBlciAubG9n''@;'; put 'put ''aW4gLmxvZ2luLWdyb3VwIC5lcnJvci5hY3RpdmU6YmVmb3Jle2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuYnRue21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDA7bWF4LXdpZHRoOm5vbmV9Lmxv''@;'; put 'put ''Z2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuc2lnbnVwe2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTt0ZXh0LWFsaWduOmNlbnRlcn0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtkaXNw''@;'; put 'put ''bGF5OmJsb2NrO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTtvcGFjaXR5Oi4xO3RvcDowO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9QG1lZGlhIHNjcmVl''@;'; put 'put ''biBhbmQgKG1heC13aWR0aDo3NjhweCl7LmxvZ2luLXdyYXBwZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLWNsci1sb2dpbi1iYWNrZ3JvdW5kLWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW57d2lkdGg6MTAwJTttYXJnaW4tbGVmdDowO3BhZGRpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KSAyMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luOmFmdGVye2NvbnRlbnQ6bm9uZX19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmxvZ2luLXdyYXBwZXIgLmxvZ2lue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSAxNSV9''@;'; put 'put ''fS5tYWluLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDB2aDtiYWNrZ3JvdW5kOnZhcigtLWNsci1nbG9iYWwtYXBwLWJhY2tncm91bmQpfS5tYWluLWNvbnRhaW5lciAuYWxlcnQuYWxlcnQtYXBwLWxldmVse2ZsZXg6MCAwIGF1dG87b3Zl''@;'; put 'put ''cmZsb3cteDpoaWRkZW59Lm1haW4tY29udGFpbmVyIGhlYWRlciwubWFpbi1jb250YWluZXIgLmhlYWRlcntmbGV4OjAgMCB2YXIoLS1jbHItaGVhZGVyLWhlaWdodCl9Lm1haW4tY29udGFpbmVyIC5zdWItbmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2e2ZsZXg6MCAwIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTEpfS5tYWluLWNvbnRhaW5lciAudS1tYWluLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2Zs''@;'; put 'put ''ZXg6MSAxIGF1dG87bWluLWhlaWdodDouMDVyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhe2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3cteTphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3BhZGRpbmc6MS4ycmVtfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYT46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXZ7ZmxleDowIDAgYXV0bztvcmRlcjotMX1AbWVkaWEgcHJpbnR7Lm1haW4tY29u''@;'; put 'put ''dGFpbmVye2hlaWdodDphdXRvfX1ib2R5Lm5vLXNjcm9sbGluZyxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSxib2R5Lm5vLXNjcm9sbGluZyAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEsYm9keVtjZHMtbGF5b3V0PW5vLXNjcm9sbGluZ10g''@;'; put 'put ''Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhe292ZXJmbG93OmhpZGRlbn06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLW1vZGFsLWNs''@;'; put 'put ''b3NlLWNvbG9yOnZhcigtLWNsci1jbG9zZS1jb2xvcik7LS1jbHItbW9kYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItbW9kYWwtY29udGVudC1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMCk7''@;'; put 'put ''LS1jbHItbW9kYWwtYmFja2Ryb3AtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tkcm9wLWJhY2tncm91bmQpOy0tY2xyLW1vZGFsLXNtLXdpZHRoOmNhbGMoMjg4ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtbWQtd2lkdGg6''@;'; put 'put ''Y2FsYyg1NzYgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1sZy13aWR0aDpjYWxjKDg2NCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLXhsLXdpZHRoOmNhbGMoMTE1MiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlKSkpOy0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbW9kYWwtdGl0bGUtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTstLWNsci1tb2RhbC10aXRsZS1m''@;'; put 'put ''b250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7LS1jbHItbW9kYWwtdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vj''@;'; put 'put ''dGlvbi1saW5lLWhlaWdodCk7LS1jbHItbW9kYWwtdGl0bGUtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci1zaWRlLXBhbmVsLXBpbm5lZC1zbXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1zbS13aWR0''@;'; put 'put ''aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbWR7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbWQtd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLWxne3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLWxnLXdpZHRoKSFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1zaWRlLXBhbmVsLXBpbm5lZC14bHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC14bC13aWR0aCkhaW1wb3J0YW50fS5jbHItbW9kYWwtaG9zdHtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LmNsci1tb2RhbC1ob3N0IC5tb2RhbCwuY2xyLW1vZGFsLWhvc3Qg''@;'; put 'put ''Lm1vZGFsLWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlfS5tb2RhbHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MTA1MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6Y2Fs''@;'; put 'put ''Yyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpKjIpO21heC13aWR0aDoxMDAlfS5tb2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlciwubW9kYWwgLmFsZXJ0Ky5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfUBtZWRpYSBzY3JlZW4g''@;'; put 'put ''YW5kIChtYXgtd2lkdGg6NTc2cHgpey5tb2RhbHtwYWRkaW5nOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KS8yKX19Lm1vZGFsIC5tb2RhbC1ib2R5e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uc2lkZS1wYW5lbCAubW9kYWx7bGVmdDppbml0aWFsO3BhZGRpbmc6''@;'; put 'put ''MDtoZWlnaHQ6MTAwJX0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntoZWlnaHQ6MTAwJX0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtY29udGVudHtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246''@;'; put 'put ''Y29sdW1ufS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtZGlhbG9ne2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtoZWlnaHQ6MTAwJX0uc2lkZS1wYW5lbCAubW9kYWwubW9kYWwtZnVsbC1zY3JlZW57aW5zZXQ6MDtwYWRkaW5nOjB9LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1ib2R5LXdy''@;'; put 'put ''YXBwZXJ7ZmxleDoxIDE7bWF4LWhlaWdodDoxMDAlfS5tb2RhbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwO3dpZHRoOnZhcigtLWNsci1tb2RhbC1tZC13aWR0aCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItbW9kYWwtYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2''@;'; put 'put ''YXIoLS1jbHItbW9kYWwtY29udGVudC1ib3gtc2hhZG93KTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW1v''@;'; put 'put ''ZGFsLWJnLWNvbG9yKTttYXgtd2lkdGg6MTAwJX0ubW9kYWwtZGlhbG9nLm1vZGFsLXNte3dpZHRoOnZhcigtLWNsci1tb2RhbC1zbS13aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC1sZ3t3aWR0aDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpfS5tb2RhbC1kaWFsb2cubW9kYWwteGx7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKX0ubW9kYWwtaGVhZGVyLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7Ym9yZGVyLWJvdHRvbTpub25lO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDB9Lm1vZGFsLWhlYWRlcisu''@;'; put 'put ''bW9kYWwtZm9vdGVyLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUrLm1vZGFsLWZvb3RlcntwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWdu''@;'; put 'put ''LWl0ZW1zOmZsZXgtc3RhcnR9Lm1vZGFsLWhlYWRlciAubW9kYWwtdGl0bGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAubW9kYWwtdGl0bGUsLm1vZGFsLWhlYWRlciAuc2lkZS1wYW5lbC10aXRsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5zaWRlLXBhbmVsLXRpdGxle2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1tb2RhbC10aXRsZS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW46MH0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFs''@;'; put 'put ''LWhlYWRlci0tYWNjZXNzaWJsZSAubW9kYWwtdGl0bGU6bm90KFtjZHMtdGV4dF0pLC5tb2RhbC1oZWFkZXIgLnNpZGUtcGFuZWwtdGl0bGU6bm90KFtjZHMtdGV4dF0pLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnNpZGUtcGFuZWwtdGl0bGU6bm90KFtjZHMtdGV4dF0pe2ZvbnQtZmFt''@;'; put 'put ''aWx5OnZhcigtLWNsci1tb2RhbC10aXRsZS1mb250LWZhbWlseSk7Zm9udC1zaXplOnZhcigtLWNsci1tb2RhbC10aXRsZS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWxp''@;'; put 'put ''bmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItbW9kYWwtdGl0bGUtbGV0dGVyLXNwYWNpbmcpfS5tb2RhbC1oZWFkZXIgLmNsb3NlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2li''@;'; put 'put ''bGUgLnBpbm5hYmxle2ZvbnQtc2l6ZTppbml0aWFsO2xpbmUtaGVpZ2h0OmluaXRpYWx9Lm1vZGFsLWhlYWRlciAuY2xvc2UgY2RzLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2RzLWljb24sLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb24sLm1vZGFsLWhlYWRl''@;'; put 'put ''ci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGUgY2RzLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJs''@;'; put 'put ''ZSAucGlubmFibGUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItbW9kYWwtY2xvc2UtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLm1vZGFsLWhl''@;'; put 'put ''YWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXIgY2RzLWljb24sLm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXIgY2xyLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXIgY2RzLWljb24sLm1v''@;'; put 'put ''ZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGU6aG92ZXIgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXIgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGU6aG92ZXIgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3It''@;'; put 'put ''aG92ZXIpfS5tb2RhbC1oZWFkZXIgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFj''@;'; put 'put ''Y2Vzc2libGUgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxl''@;'; put 'put ''OmhvdmVyOmFjdGl2ZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlcjphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3ItYWN0aXZlKX0ubW9kYWwtaGVhZGVyIC5waW5uYWJsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxl''@;'; put 'put ''IC5waW5uYWJsZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7YXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5tb2RhbC10aXRsZS13cmFwcGVye2ZsZXg6''@;'; put 'put ''MX0ubW9kYWwtdGl0bGUtd3JhcHBlciAubW9kYWwtdGl0bGUgaDMsLm1vZGFsLXRpdGxlLXdyYXBwZXIgLnNpZGUtcGFuZWwtdGl0bGUgaDN7bWFyZ2luLXRvcDowfS5tb2RhbC1ib2R5LXdyYXBwZXJ7bWF4LWhlaWdodDo3MHZoO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0u''@;'; put 'put ''bW9kYWwtYm9keS13cmFwcGVyIC5tb2RhbC1ib2R5LC5tb2RhbC1ib2R5LXdyYXBwZXIgLnNpZGUtcGFuZWwtYm9keXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7''@;'; put 'put ''Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0''@;'; put 'put ''ZXItc3BhY2luZyl9Lm1vZGFsLWJvZHktd3JhcHBlcj46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5tb2RhbC1ib2R5LXdyYXBwZXI+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb2RhbC1mb290ZXJ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS05KX0ubW9kYWwtZm9vdGVyLC5zaWRlLXBhbmVsLWZvb3RlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5tb2RhbC1mb290ZXIgLmJ0biwuc2lkZS1wYW5lbC1mb290ZXIgLmJ0bnttYXJn''@;'; put 'put ''aW46MH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KWFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgt''@;'; put 'put ''aGVpZ2h0OjU1dmh9fS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yKTt6LWluZGV4OjEwNDB9Lm1vZGFsIC5tb2RhbC1uYXZ7ZGlzcGxheTpub25lfS5tb2RhbC5tb2RhbC1mdWxsLXNj''@;'; put 'put ''cmVlbntwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cg''@;'; put 'put ''Lm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjF9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVs''@;'; put 'put ''bC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtYm9keS13cmFwcGVyLC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAubW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5e2ZsZXgtZ3JvdzoxO21heC1oZWlnaHQ6MTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1oZWFkZXItaGVpZ2h0OmNhbGMo''@;'; put 'put ''NjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2xyLWhlYWRlci1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAw''@;'; put 'put ''KTstLWNsci1oZWFkZXItMi1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2xyLWhlYWRlci0zLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtOTAwKTstLWNsci1oZWFkZXItNC1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVy''@;'; put 'put ''LTMtYmctY29sb3IpOy0tY2xyLWhlYWRlci01LWJnLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTctYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNv''@;'; put 'put ''bG9yKTstLWNsci1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNsci1oZWFkZXItdGl0bGUtZm9udC13''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRlci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7LS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNs''@;'; put 'put ''ci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNlYXJjaC1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1oZWFkZXItc2VhcmNoLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0t''@;'; put 'put ''Y2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKTstLWNsci1o''@;'; put 'put ''ZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCBIaWdobGln''@;'; put 'put ''aHQ7LS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItaGVhZGVyLWZvbnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItaGVpZ2h0KTt3aGl0ZS1zcGFjZTpub3dyYXB9aGVhZGVyLmhlYWRlci0xLC5oZWFkZXIuaGVhZGVyLTF7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTIsLmhlYWRlci5oZWFkZXItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItaGVhZGVyLTMtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNCwuaGVhZGVyLmhlYWRlci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci00LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTUsLmhlYWRlci5oZWFkZXItNXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFk''@;'; put 'put ''ZXItNS1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTYtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNywuaGVhZGVyLmhlYWRlci03e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci03LWJn''@;'; put 'put ''LWNvbG9yKX1oZWFkZXIuaGVhZGVyLTgsLmhlYWRlci5oZWFkZXItOHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjE3MWN9aGVhZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzttaW4td2lkdGg6Y2FsYygyMDQqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWhlYWRlciAuYnJhbmRpbmc+YSxoZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5hLC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9aGVhZGVyIC5icmFuZGluZz5hOmZvY3VzLGhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3VzLC5oZWFk''@;'; put 'put ''ZXIgLmJyYW5kaW5nPmE6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9aGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24saGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbixoZWFkZXIg''@;'; put 'put ''LmJyYW5kaW5nIGNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGluZyAudGl0bGV7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKTtmb250LWZhbWlseTp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQp''@;'; put 'put ''O2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0''@;'; put 'put ''aW9ucyAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9aGVhZGVyIC5zZXR0''@;'; put 'put ''aW5ncyBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVy''@;'; put 'put ''LW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25z''@;'; put 'put ''IC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zl''@;'; put 'put ''cil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpkaXNhYmxlZCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdiAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbixo''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb24sLmhlYWRl''@;'; put 'put ''ciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0''@;'; put 'put ''aW9ucyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWlj''@;'; put 'put ''b24tdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYt''@;'; put 'put ''bGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0e2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5zZXR0aW5ncyAu''@;'; put 'put ''bmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1s''@;'; put 'put ''aW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2''@;'; put 'put ''LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1p''@;'; put 'put ''Y29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb257dHJhbnNmb3JtOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5r''@;'; put 'put ''IC5uYXYtaWNvbisubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAubmF2LWljb24rLm5h''@;'; put 'put ''di10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0e2Rpc3BsYXk6bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCxo''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cyxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLWFjdGlv''@;'; put 'put ''bnMgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTQpKX1oZWFkZXIgLmhlYWRlci1uYXYsLmhlYWRlciAuaGVhZGVyLW5hdntkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2OmJl''@;'; put 'put ''Zm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5h''@;'; put 'put ''di1saW5rOmZpcnN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBle3Bvc2l0aW9uOnJlbGF0aXZlfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItYWN0aW9ucywuaGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tm''@;'; put 'put ''bGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+''@;'; put 'put ''Om5vdCguZHJvcGRvd24pOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''OmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9''@;'; put 'put ''aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5k''@;'; put 'put ''cm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS00KSk7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVh''@;'; put 'put ''ZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVy''@;'; put 'put ''IC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSxo''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5n''@;'; put 'put ''bGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hh''@;'; put 'put ''cGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkp''@;'; put 'put ''fWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRv''@;'; put 'put ''d24gLmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2xlZnQ6YXV0bztyaWdodDowfWhlYWRlciAuc2VhcmNoLWJveCxoZWFkZXIgLnNlYXJjaCwuaGVhZGVyIC5z''@;'; put 'put ''ZWFyY2gtYm94LC5oZWFkZXIgLnNlYXJjaHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MCAwIGF1dG87bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNlYXJjaC1ib3g6aG92ZXIsaGVhZGVyIC5zZWFyY2g6aG92ZXIsLmhlYWRlciAuc2VhcmNoLWJveDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNl''@;'; put 'put ''YXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxlZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsaGVhZGVyIC5zZWFyY2g6YmVmb3JlLC5o''@;'; put 'put ''ZWFkZXIgLnNlYXJjaC1ib3g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bGVmdDphdXRvfWhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFyY2g+Lm5hdi1pY29uLC5oZWFkZXIg''@;'; put 'put ''LnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZWFyY2gtYm94''@;'; put 'put ''IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsLmhlYWRlciAuc2VhcmNoIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApO21hcmdpbi1sZWZ0OnZhcigtLWNsci1oZWFk''@;'; put 'put ''ZXItc2VhcmNoLW1hcmdpbi1sZWZ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLXJpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcn1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYl''@;'; put 'put ''MkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzZmZmZmZmJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTNDdGl0bGUlM0VTZWFyY2glM0Ml''@;'; put 'put ''MkZ0aXRsZSUzRSUzQ2clMjBpZCUzRCUyMmljb25zJTIyJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTE1JTJDNC4wNUExMC45NSUyQzEwLjk1JTJDMCUyQzElMkMxJTJDNC4wNSUyQzE1JTJDMTElMkMxMSUyQzAlMkMwJTJDMSUyQzE1JTJDNC4wNU0xNSUyQzJB''@;'; put 'put ''MTMlMkMxMyUyQzAlMkMxJTJDMCUyQzI4JTJDMTUlMkMxMyUyQzEzJTJDMCUyQzAlMkMwJTJDMTUlMkMyWiUyMiUyRiUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwJTIwZCUzRCUyMk0zMy43MSUyQzMyLjI5bC03LjM3LTcuNDItMS40MiUyQzEuNDElMkM3LjM3JTJDNy40MmEx''@;'; put 'put ''JTJDMSUyQzAlMkMxJTJDMCUyQzEuNDItMS40MVolMjIlMkYlM0UlM0MlMkZnJTNFJTNDJTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24t''@;'; put 'put ''c2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdp''@;'; put 'put ''bjowO21hcmdpbi1yaWdodDpjYWxjKC0xKih2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgdmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtZ2FwKSkpfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCBpbnB1dCxoZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dCwuaGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94IGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dHtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjphdXRvfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF0s''@;'; put 'put ''LmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRde2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWlucHV0LWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MCAwIDAgY2FsYyh2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgMip2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApKTt2ZXJ0aWNhbC1h''@;'; put 'put ''bGlnbjptaWRkbGU7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTts''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2Zp''@;'; put 'put ''bGw6Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmls''@;'; put 'put ''bCwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9j''@;'; put 'put ''dXN7LXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMHMgNjAwMDAwcyxjb2xvciAwcyA2MDAwMDBzO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBzIDYwMDAwMHN9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06OnBsYWNl''@;'; put 'put ''aG9sZGVyLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNsci1o''@;'; put 'put ''ZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlcixoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5o''@;'; put 'put ''ZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpob3Zlcntib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1''@;'; put 'put ''cy12aXNpYmxlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxle291dGxpbmU6MDti''@;'; put 'put ''b3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZSl9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06YWN0aXZlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9j''@;'; put 'put ''dXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9j''@;'; put 'put ''dXMsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06YWN0aXZle2JhY2tncm91bmQ6MCAwfWhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaCxoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94LC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1i''@;'; put 'put ''b3h7cG9zaXRpb246cmVsYXRpdmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87bWF4LXdpZHRoOm5vbmU7ZGlzcGxheTpu''@;'; put 'put ''b25lfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjB9fWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9u''@;'; put 'put ''LC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspe2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC0uMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlua3tjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItbGluay1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay1ob3Zlci1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxp''@;'; put 'put ''bmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3ZlciBjZHMtaWNvbixhOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1s''@;'; put 'put ''aW5rKTpsaW5rOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmFjdGl2ZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItbGluay1hY3RpdmUtY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVt''@;'; put 'put ''LC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJh''@;'; put 'put ''ZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZHtjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkIGNkcy1p''@;'; put 'put ''Y29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRy''@;'; put 'put ''b3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZDpob3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVyKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0''@;'; put 'put ''LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVyIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcil9YS5saW5rLW5vcm1hbDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWNvbG9yKX1hLmxpbmstaG92ZXJlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hLmxpbmstY2xpY2tlZDpsaW5re2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YS5saW5rLXZpc2l0ZWQ6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hLmxpbmstdmlzaXRlZC1ob3ZlcjpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfS5uYXZ7ZGlz''@;'; put 'put ''cGxheTpmbGV4O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5uYXYgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1pdGVtLmFjdGl2ZT4ubmF2LWxpbmt7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcik7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0fS5uYXYgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlO2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtkaXNw''@;'; put 'put ''bGF5OmlubGluZS1ibG9ja30ubmF2IC5uYXYtbGluay5idG57dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MCAwIGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXJhZGl1czowfS5uYXYgLm5hdi1saW5rLmRyb3Bkb3duLXRvZ2dsZXtwYWRkaW5nOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSl9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcil9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVy''@;'; put 'put ''aXR9Lm5hdiAubmF2LWxpbms6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29sb3IpfS5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZSwubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7''@;'; put 'put ''Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246''@;'; put 'put ''Ym9yZGVyLWJvdHRvbSAuMnMgZWFzZS1pbn0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywubmF2IC5uYXYtbGluazphY3RpdmUsLm5hdiAubmF2LWxpbmsuYWN0aXZle3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKX0ubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0ubmF2IC5uYXYtbGluay5uYXYtaXRlbXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LnN1Yi1uYXYsLnN1Ym5hdntkaXNwbGF5OmZsZXg7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0''@;'; put 'put ''O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCBoc2woMTk4LCAwJSwgODAlKSkgaW5zZXQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1i''@;'; put 'put ''Zy1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5zdWItbmF2IC5uYXYsLnN1Ym5hdiAubmF2e2ZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3ViLW5hdiAubmF2LWl0ZW0sLnN1Yi1uYXYgLm5hdi1pdGVtIGEsLnN1Ym5hdiAubmF2LWl0ZW0sLnN1''@;'; put 'put ''Ym5hdiAubmF2LWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uc3ViLW5hdiBhc2lkZSwuc3VibmF2IGFzaWRle2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIDEuMnJlbX0u''@;'; put 'put ''c3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3BhZGRpbmctcmlnaHQ6MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci12ZXJ0aWNhbC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1j''@;'; put 'put ''b2xvcik7LS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1y''@;'; put 'put ''aWdodC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNhcmV0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY2hpbGQtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTstLWNs''@;'; put 'put ''ci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLXNoYWRlLXNlbGVjdGVkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0''@;'; put 'put ''aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUpOy0t''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLXNoYWRlLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tdG9wLWxldmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlz''@;'; put 'put ''YWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCk7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItY29sbGFwc2VkLW1h''@;'; put 'put ''cmdpbjptaXhpbnMuYmFzZWxpbmVQeCgzKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt3aWxsLWNoYW5nZTp3aWR0aDt0cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLWluLW91dH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zmxl''@;'; put 'put ''eDoxIDEgYXV0bztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAg''@;'; put 'put ''YXV0bztoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudHtkaXNwbGF5OmZsZXg7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0z''@;'; put 'put ''MDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOnZhcigtLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmFjdGl2ZXtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21p''@;'; put 'put ''bi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb24rLm5hdi10ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsrLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0u''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rLmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rOmFjdGl2ZXtmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWZvbnQtd2VpZ2h0''@;'; put 'put ''KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNoaWxkcmVue292ZXJmbG93LXk6aGlkZGVufS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUt''@;'; put 'put ''YnV0dG9uLXNpemUpO2JvcmRlcjowO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZSk7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2''@;'; put 'put ''LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yKX0uY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2Rz''@;'; put 'put ''LWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3Zlcntjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yKX0uY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBj''@;'; put 'put ''ZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3IpfS5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dl''@;'; put 'put ''ci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltz''@;'; put 'put ''aGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3Vi''@;'; put 'put ''bGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dl''@;'; put 'put ''cntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjZHMtaWNvbnttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZXtkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZSBjZHMtaWNvbnttYXJnaW46MH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6''@;'; put 'put ''MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNvbntmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1z''@;'; put 'put ''aXplKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1zZWxmOmNlbnRlcjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLWljb257dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZy10''@;'; put 'put ''b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYt''@;'; put 'put ''aXRlbS1wYWRkaW5nKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRleHR7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2Rpc3BsYXk6ZmxleDt0''@;'; put 'put ''ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRl''@;'; put 'put ''cjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNl''@;'; put 'put ''bGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWhlYWRlcntwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBh''@;'; put 'put ''ZGRpbmcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtfS5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7YWxpZ24tc2VsZjpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6''@;'; put 'put ''ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgY2xyLXZlcnRpY2FsLW5hdi1ncm91cC1jaGlsZHJlbntkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5uYXYtYnRue2ZsZXg6MSAxIGF1dG87cGFkZGluZzowO21hcmdpbjowO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0''@;'; put 'put ''OmNhbGMoLTEqY2FsYyg1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9LmNsci12ZXJ0aWNhbC1uYXY+Lm5hdi1saW5rLC5jbHItdmVydGljYWwtbmF2IC5uYXYtY29udGVudD4ubmF2LWxpbmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNp''@;'; put 'put ''emUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXIgLm5hdi1ncm91cC10ZXh0''@;'; put 'put ''e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWljb24rLm5hdi1ncm91cC10ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtY29udGVudD4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5h''@;'; put 'put ''di1ncm91cCAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRyaWdnZXJ7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLXRvcC1sZXZlbC1mb250LXdlaWdodCl9LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmc6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNoaWxkLXBhZGRpbmcpfS5jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCgu''@;'; put 'put ''aXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rOmhvdmVyfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6YWN0aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZTphY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2Om5vdCguaXMtY29sbGFwc2VkKSAubmF2LWxpbmsrLm5hdi1ncm91''@;'; put 'put ''cC10cmlnZ2Vye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWR7d2lkdGg6dmFyKC0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1taW4td2lkdGgpO21pbi13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWF4LXdpZHRoOmNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpICsgY2FsYygxNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtaWNvbnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAw''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNl''@;'; put 'put ''ZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5re2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdpZHRoKX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rfi5uYXYtZ3JvdXAtdHJpZ2dlcntmbGV4OjAgMCBjYWxjKHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNhcmV0LXNpemUpICsgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0''@;'; put 'put ''LW1hcmdpbikpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSkpKTtwb2ludGVyLWV2ZW50czpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1''@;'; put 'put ''cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGluaywubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNl''@;'; put 'put ''ZCAubmF2LWdyb3VwLXRyaWdnZXJ7cGFkZGluZzowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntw''@;'; put 'put ''YWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb24ubmF2LWdyb3Vw''@;'; put 'put ''LXRyaWdnZXItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW4tbGVmdDpjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRh''@;'; put 'put ''aW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cCwubWFpbi1jb250''@;'; put 'put ''YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWxpbmt7ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJm''@;'; put 'put ''bG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2t9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChb''@;'; put 'put ''Y2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtbGlua3tkaXNwbGF5OmZsZXh9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVy''@;'; put 'put ''Z2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtZ3JvdXAtdGV4dCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUt''@;'; put 'put ''c3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcntvcmRlcjoyO21hcmdpbi10b3A6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9y''@;'; put 'put ''ZGVyLXRvcDowO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItY29sb3IpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JheS03MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTApOy0tY2xy''@;'; put 'put ''LXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDAp''@;'; put 'put ''Oy0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5jbHItbmF2LWNsb3Nle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9y''@;'; put 'put ''OnZhcigtLWNvbG9yKTstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpfS5jbHItbmF2LWNsb3NlOmhvdmVyLC5jbHItbmF2LWNsb3NlOmZvY3Vzey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2Vy''@;'; put 'put ''LC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntkaXNwbGF5Om5vbmV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuLC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YmFja2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1y''@;'; put 'put ''YWRpdXMtMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6''@;'; put 'put ''IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2JvdHRvbTpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSkpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDowIDB9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjphZnRlcntsZWZ0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10''@;'; put 'put ''cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmlnZ2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Myl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO2xlZnQ6MH0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFue2JhY2tncm91bmQ6MCAwfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkpO3RyYW5zZm9ybS1vcmlnaW46LTMlO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3Rp''@;'; put 'put ''dmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRl''@;'; put 'put ''ci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2''@;'; put 'put ''YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3BhZGRpbmc6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9y''@;'; put 'put ''KX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9Lm1haW4tY29udGFpbmVyIC5o''@;'; put 'put ''ZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6aG92ZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92ZXIpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmRpc2Fi''@;'; put 'put ''bGVkLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgYXV0byAwIDA7YmFja2dyb3VuZDp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250''@;'; put 'put ''YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIDAgMCBhdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMzYw''@;'; put 'put ''KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRh''@;'; put 'put ''aW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIgLnN1Ym5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAu''@;'; put 'put ''bmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVy''@;'; put 'put ''IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xMSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5z''@;'; put 'put ''dWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtv''@;'; put 'put ''dmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAu''@;'; put 'put ''bmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9y''@;'; put 'put ''ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5h''@;'; put 'put ''Y3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFj''@;'; put 'put ''dGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3Vi''@;'; put 'put ''bmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAu''@;'; put 'put ''bmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5h''@;'; put 'put ''di1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhv''@;'; put 'put ''dmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2''@;'; put 'put ''LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1j''@;'; put 'put ''b250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtib3gtc2hhZG93Om5vbmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZXtjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYu''@;'; put 'put ''Y2xyLW5hdi1sZXZlbC0ye2JvcmRlci1yaWdodDpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5ne3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmNsci1pY29u''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIC5sb2dvLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNkcy1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmcrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5oZWFkZXItb3ZlcmZsb3ct''@;'; put 'put ''dHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLW5hdisuY2RrLXZpc3VhbGx5LWhpZGRlbisuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7bWFyZ2luLWxlZnQ6YXV0b30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ry''@;'; put 'put ''b3AsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kKTtjdXJzb3I6cG9pbnRlcjt6''@;'; put 'put ''LWluZGV4OjEwMzh9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0y''@;'; put 'put ''IC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5u''@;'; put 'put ''YXYtbGlua3tmbGV4OjAgMCBhdXRvO29wYWNpdHk6MTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24s''@;'; put 'put ''Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxp''@;'; put 'put ''bmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYu''@;'; put 'put ''Y2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLmZhe2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXIt''@;'; put 'put ''bWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFp''@;'; put 'put ''bmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYt''@;'; put 'put ''dGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2hpdGUtc3BhY2U6bm9ybWFsO2NvbG9yOnZhcigtLWNsci1zbGlkaW5nLXBhbmVsLXRl''@;'; put 'put ''eHQtY29sb3IpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC13ZWlnaHQ6NDAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFp''@;'; put 'put ''bi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGlu''@;'; put 'put ''ay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lci5vcGVu''@;'; put 'put ''LWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6''@;'; put 'put ''YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2''@;'; put 'put ''LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIg''@;'; put 'put ''LmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1j''@;'; put 'put ''bHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRh''@;'; put 'put ''aW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3Rp''@;'; put 'put ''dmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29s''@;'; put 'put ''b3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFj''@;'; put 'put ''dGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEg''@;'; put 'put ''Lm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1''@;'; put 'put ''cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2''@;'; put 'put ''LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dHtjb2xvcjppbmhlcml0fS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtdHJpZ2dlciwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7cG9zaXRpb246Zml4''@;'; put 'put ''ZWQ7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5re292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24sLm1haW4t''@;'; put 'put ''Y29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmcgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb25bc2hhcGU9dm0tYnVnXSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGlu''@;'; put 'put ''ZyBjbHItaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItdm13LWxvZ297YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC50aXRsZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlk''@;'; put 'put ''ZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJn''@;'; put 'put ''ZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0''@;'; put 'put ''ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RyYW5zZm9ybS1vcmlnaW46OSU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0''@;'; put 'put ''NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbHItaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92''@;'; put 'put ''ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4t''@;'; put 'put ''Y29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0ye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNw''@;'; put 'put ''YW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9''@;'; put 'put ''Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgt''@;'; put 'put ''NDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVu''@;'; put 'put ''dSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13''@;'; put 'put ''aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250''@;'; put 'put ''YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmt7d2lkdGg6MTAwJX0ubWFpbi1jb250YWlu''@;'; put 'put ''ZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmd7bWF4LXdpZHRoOmNhbGMoMTQ0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3Ry''@;'; put 'put ''YW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWlu''@;'; put 'put ''ZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1''@;'; put 'put ''cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5ne3dpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4t''@;'; put 'put ''aGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkg''@;'; put 'put ''KyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUg''@;'; put 'put ''LmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9w''@;'; put 'put ''ZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9w''@;'; put 'put ''ZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYmFkZ2UtYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItYmFkZ2UtaW5mby1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4pOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAw''@;'; put 'put ''KTstLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdyk7LS1jbHItYmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0''@;'; put 'put ''aWxpdHktcmVkKTstLWNsci1iYWRnZS1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWdyYXktY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0KTstLWNsci1iYWRnZS1wdXJwbGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ibHVl''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItYmFkZ2UtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJp''@;'; put 'put ''bmUpOy0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItcmFkaXVzOmNhbGMoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSk7Zm9udC1zaXplOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTQpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtY29sb3IpfS5iYWRnZTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1iYWRnZS1jb2xvcil9LmJhZGdlOmxpbmt7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYmFk''@;'; put 'put ''Z2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1ncmF5LC5iYWRnZS5iYWRnZS0xe2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0uYmFk''@;'; put 'put ''Z2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmJhZGdlLmJhZGdlLWJsdWUsLmJhZGdlLmJhZGdlLTN7YmFja2dyb3VuZDp2YXIoLS1jbHIt''@;'; put 'put ''YmFkZ2UtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5iYWRnZS5iYWRnZS1vcmFuZ2UsLmJhZGdlLmJhZGdlLTR7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNv''@;'; put 'put ''bG9yKX0uYmFkZ2UuYmFkZ2UtbGlnaHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1saWdodC1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLWluZm97YmFja2dyb3VuZDp2YXIo''@;'; put 'put ''LS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5iYWRnZS5iYWRnZS1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0u''@;'; put 'put ''YmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmJhZGdlLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5iYWRnZSw6cm9vdCAuYmFkZ2V7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH1Ac3VwcG9ydHMg''@;'; put 'put ''KC1tcy1pbWUtYWxpZ246YXV0byl7LmJhZGdle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIDB9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZGVmYXVsdC1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1sYWJlbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1sYWJlbC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItbGFiZWwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQpOy0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2Fi''@;'; put 'put ''bGVkKTstLWNsci1sYWJlbC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtcHVy''@;'; put 'put ''cGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQpOy0tY2xyLWxhYmVsLXB1cnBsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFj''@;'; put 'put ''aXR5LTApOy0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWxhYmVsLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xy''@;'; put 'put ''LWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUpOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludCk7LS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1j''@;'; put 'put ''bHItbGFiZWwtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItbGFiZWwtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50KTstLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbik7LS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludCk7LS1jbHItbGFi''@;'; put 'put ''ZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93KTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXV0aWxpdHktcmVkLXRpbnQpOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWxhYmVsLWJv''@;'; put 'put ''cmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5sYWJlbCxhLmxhYmVse2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2Fw''@;'; put 'put ''dGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTppbmxpbmUtZmxleDtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0''@;'; put 'put ''aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSAwO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsOmhhcyg+LmJhZGdlKSwubGFiZWw6aGFzKD5jZHMtaWNvbiksYS5sYWJlbDpo''@;'; put 'put ''YXMoPi5iYWRnZSksYS5sYWJlbDpoYXMoPmNkcy1pY29uKXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmxhYmVsIC5iYWRnZSwubGFiZWwgY2RzLWljb24sYS5sYWJlbCAuYmFkZ2UsYS5sYWJlbCBjZHMtaWNvbnttYXJnaW46MDt0ZXh0LWRlY29yYXRpb246bm9u''@;'; put 'put ''ZX0ubGFiZWw6aGFzKC5iYWRnZSksYS5sYWJlbDpoYXMoLmJhZGdlKXtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0ubGFiZWwuY2xpY2thYmxlOm5vdCg6aGFzKC50ZXh0KSksYS5sYWJlbC5jbGlja2FibGU6bm90KDpoYXMoLnRleHQpKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5l''@;'; put 'put ''fS5sYWJlbC5jbGlja2FibGU+LnRleHQsYS5sYWJlbC5jbGlja2FibGU+LnRleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ubGFiZWw6dmlzaXRlZCxhLmxhYmVsOnZpc2l0ZWR7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpfS5sYWJlbDpmb2N1cywubGFiZWw6''@;'; put 'put ''aG92ZXIsLmxhYmVsOmFjdGl2ZSxhLmxhYmVsOmZvY3VzLGEubGFiZWw6aG92ZXIsYS5sYWJlbDphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3ZlcixhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3Zlcnt0ZXh0''@;'; put 'put ''LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1ob3Zlci1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWhvdmVyLWNvbG9yKX0ubGFiZWwuY2xpY2thYmxlOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSxhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVk''@;'; put 'put ''KTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtYmctYWN0aXZlLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0ubGFiZWwubGFiZWwtZ3JheSwubGFiZWwubGFi''@;'; put 'put ''ZWwtMSxhLmxhYmVsLmxhYmVsLWdyYXksYS5sYWJlbC5sYWJlbC0xe2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3Ip''@;'; put 'put ''fS5sYWJlbC5sYWJlbC1ncmF5Pi5iYWRnZSxhLmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5sYWJlbC0yLGEu''@;'; put 'put ''bGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcil9''@;'; put 'put ''LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmxhYmVsLmxhYmVsLWJsdWUsLmxhYmVsLmxhYmVs''@;'; put 'put ''LTMsYS5sYWJlbC5sYWJlbC1ibHVlLGEubGFiZWwubGFiZWwtM3tib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1ibHVlLWJnLWNvbG9yKX0u''@;'; put 'put ''bGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1ibHVlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1jb2xvcil9LmxhYmVsLmxhYmVsLW9yYW5nZSwubGFiZWwubGFiZWwtNCxhLmxh''@;'; put 'put ''YmVsLmxhYmVsLW9yYW5nZSxhLmxhYmVsLmxhYmVsLTR7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYmctY29sb3IpfS5s''@;'; put 'put ''YWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdlLGEubGFiZWwubGFiZWwtb3JhbmdlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtY29sb3IpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5s''@;'; put 'put ''YWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1saWdodC1ibHVlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwt''@;'; put 'put ''bGlnaHQtYmx1ZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUt''@;'; put 'put ''Y29sb3IpfS5sYWJlbC5sYWJlbC1pbmZvLGEubGFiZWwubGFiZWwtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29s''@;'; put 'put ''aWQgdmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFiZWwtaW5mbz4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1pbmZvPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtaW5mby1jb2xvcil9''@;'; put 'put ''LmxhYmVsLmxhYmVsLXN1Y2Nlc3MsYS5sYWJlbC5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRo''@;'; put 'put ''KSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC1zdWNjZXNzPi5iYWRnZSxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3M+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''YWRnZS1zdWNjZXNzLWNvbG9yKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNs''@;'; put 'put ''ci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC13YXJuaW5nLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLXdhcm5pbmc+LmJhZGdlLGEubGFiZWwubGFiZWwtd2FybmluZz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xv''@;'; put 'put ''cik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfS5sYWJlbC5sYWJlbC1kYW5nZXIsYS5sYWJlbC5sYWJlbC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWZvbnQtY29sb3Ip''@;'; put 'put ''O2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLWRhbmdlcj4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1kYW5nZXI+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRh''@;'; put 'put ''bmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmxhYmVsPi5iYWRnZSxhLmxhYmVsPi5iYWRnZXttYXJnaW46MH0ubGFiZWwuZGlzYWJsZWQsLmxhYmVsOmRpc2FibGVkLGEubGFiZWwuZGlzYWJsZWQsYS5sYWJlbDpkaXNhYmxlZHtjdXJzb3I6bm90''@;'; put 'put ''LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9''@;'; put 'put ''LmxhYmVsLmRpc2FibGVkIC5iYWRnZSwubGFiZWw6ZGlzYWJsZWQgLmJhZGdlLGEubGFiZWwuZGlzYWJsZWQgLmJhZGdlLGEubGFiZWw6ZGlzYWJsZWQgLmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7''@;'; put 'put ''LmxhYmVsLGEubGFiZWx7dmVydGljYWwtYWxpZ246Ym90dG9tfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1z''@;'; put 'put ''dWNjZXNzKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZSk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlKTstLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbjowO292ZXJmbG93OmhpZGRlbjttYXgtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3Ip''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYmctY29sb3IpO2JvcmRlcjowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXBy''@;'; put 'put ''b2dyZXNzLWRlZmF1bHQtY29sb3IpfS5wcm9ncmVzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJr''@;'; put 'put ''aXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jl''@;'; put 'put ''c3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWlubmVyLWVsZW1lbnR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7''@;'; put 'put ''LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47Ym9yZGVyLXJhZGl1czow''@;'; put 'put ''fS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEp''@;'; put 'put ''fS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJv''@;'; put 'put ''Z3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sYWJlbGVkLC5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZHtwb3Np''@;'; put 'put ''dGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcil9LnByb2dyZXNzLmxhYmVsZWQ+c3BhbiwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7bWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MuY29tcGFjdDpub3QoLmxhYmVsZWQpLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdDpub3QoLmxhYmVsZWQp''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5wcm9ncmVzcy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVyLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdC5sYWJlbGVkPi5wcm9ncmVzcy1tZXRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0b3A6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0zKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1mYWRlezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9ncmVzc1t2YWx1ZT0i''@;'; put 'put ''MTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjNzIGxpbmVhciAuNXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzcywucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3N7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1vdXQgMXN9LnByb2dyZXNzLmZs''@;'; put 'put ''YXNoLWRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7''@;'; put 'put ''dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjAi''@;'; put 'put ''XTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXIsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcnstbW96''@;'; put 'put ''LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAi''@;'; put 'put ''XXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFz''@;'; put 'put ''aD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZh''@;'; put 'put ''ZGUuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC42cyBsaW5lYXIgMXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xv''@;'; put 'put ''ci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAw''@;'; put 'put ''Il06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1sb29wZXJ7MCV7bGVmdDotMTAwJX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5w''@;'; put 'put ''cm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9vcD5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotbW96LXBy''@;'; put 'put ''b2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO3dpZHRoOjUwJX0ucHJvZ3Jlc3MubG9vcC5kYW5nZXI6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5s''@;'; put 'put ''b29wLndhcm5pbmc6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5wcm9ncmVzcy5sb29wLnN1Y2Nlc3M6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWN7cG9z''@;'; put 'put ''aXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1z''@;'; put 'put ''dGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yKTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2NvbnRlbnQ6IiAifS5wcm9ncmVzcy1z''@;'; put 'put ''dGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzIl06YmVmb3Jle3dpZHRoOjIl''@;'; put 'put ''fS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2Il06YmVm''@;'; put 'put ''b3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjciXTpiZWZvcmV7d2lkdGg6NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZh''@;'; put 'put ''bHVlPSI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjExIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjEyIl06YmVmb3Jle3dpZHRoOjEwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNyJdOmJlZm9yZXt3aWR0aDoxNSV9LnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjAiXTpiZWZv''@;'; put 'put ''cmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjIiXTpiZWZvcmV7d2lkdGg6MjAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjIzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9IjI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI3Il06YmVmb3Jle3dpZHRoOjI1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMSJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMiJdOmJlZm9yZXt3aWR0aDozMCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzQiXTpi''@;'; put 'put ''ZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''MzciXTpiZWZvcmV7d2lkdGg6MzUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjQwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQyIl06YmVmb3Jle3dpZHRoOjQwJX0ucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NSJdOmJlZm9yZSwucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NyJdOmJlZm9yZXt3aWR0aDo0NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDgi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iNTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTIiXTpiZWZvcmV7d2lkdGg6NTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjUzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9IjU0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnBy''@;'; put 'put ''b2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU3Il06YmVmb3Jle3dpZHRoOjU1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OSJdOmJlZm9yZSwucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MiJdOmJlZm9y''@;'; put 'put ''ZXt3aWR0aDo2MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12''@;'; put 'put ''YWx1ZT0iNjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjciXTpiZWZvcmV7d2lkdGg6NjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dy''@;'; put 'put ''ZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+''@;'; put 'put ''LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcyIl06YmVmb3Jle3dpZHRoOjcwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3MyJdOmJlZm9yZSwu''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NiJdOmJl''@;'; put 'put ''Zm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NyJdOmJlZm9yZXt3aWR0aDo3NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0''@;'; put 'put ''YS12YWx1ZT0iNzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0''@;'; put 'put ''ZXJbZGF0YS12YWx1ZT0iODIiXTpiZWZvcmV7d2lkdGg6ODAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjgzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg3Il06YmVmb3Jle3dpZHRoOjg1''@;'; put 'put ''JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MCJd''@;'; put 'put ''OmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MiJdOmJlZm9yZXt3aWR0aDo5MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJb''@;'; put 'put ''ZGF0YS12YWx1ZT0iOTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3Mt''@;'; put 'put ''bWV0ZXJbZGF0YS12YWx1ZT0iOTYiXTpiZWZvcmV7d2lkdGg6OTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk3Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk4Il06YmVmb3JlLC5wcm9ncmVzcy1z''@;'; put 'put ''dGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk5Il06YmVmb3Jle3dpZHRoOjk4JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMDAiXTpiZWZvcmV7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''e3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5wcm9ncmVzcy1zdGF0aWMuc3VjY2Vzcz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mtc3RhdGljLndhcm5pbmc+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLXN0YXRpYy5kYW5nZXI+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LmNhcmQt''@;'; put 'put ''YmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3toZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7bWFyZ2luOmNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMCAwfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy50b3AsLmNhcmQtYmxvY2sgLnByb2dyZXNzLXN0YXRpYy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWMudG9we21hcmdpbi10''@;'; put 'put ''b3A6MDt0b3A6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzLCB2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSl9LmNhcmQtYmxvY2sgLnByb2dyZXNzPnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyLC5jYXJkLWZvb3RlciAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtZm9vdGVyIC5wcm9n''@;'; put 'put ''cmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3Bvc2l0aW9uOmFic29sdXRlfS5wcm9ncmVzcy1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MtYmxvY2s+KntmbGV4OjAgMCBhdXRvO3BhZGRpbmctcmlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucHJvZ3Jlc3MtYmxvY2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5wcm9ncmVzcy1ibG9jaz5sYWJlbCwucHJvZ3Jlc3MtYmxvY2s+c3BhbnttYXgtd2lkdGg6MzMlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MsLnByb2dyZXNzLWJs''@;'; put 'put ''b2NrPi5wcm9ncmVzcy1zdGF0aWN7ZmxleDowIDEgYXV0b30ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3Vwe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6YXV0bztmbGV4OjAgMSBhdXRvO2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3Mt''@;'; put 'put ''Z3JvdXAgLmNsci1yb3d7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LnByb2dy''@;'; put 'put ''ZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvdz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2Nre21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5nOjB9LmNh''@;'; put 'put ''cmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jaz5sYWJlbHttYXgtd2lkdGg6MzMlfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2Nr''@;'; put 'put ''IC5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVz''@;'; put 'put ''cz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYp''@;'; put 'put ''fV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5wcm9ncmVzcy1ibG9jaz5sYWJlbCw6cm9vdCAucHJvZ3Jlc3MtYmxvY2s+bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0x''@;'; put 'put ''NCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1zcGlubmVyLXNtYWxsLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTstLWNsci1zcGlubmVyLWluc2lkZS1idXR0b24tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTQpOy0tY2xyLXNwaW5uZXItbWVkaXVtLXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC00MDApOy0tY2xyLXNwaW5uZXItc21hbGwtc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7LS1jbHItc3Bpbm5l''@;'; put 'put ''ci1maWxsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50KTstLWNs''@;'; put 'put ''ci1zcGlubmVyLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXJhZGl1cy0zMDApOy0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LnNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFy''@;'; put 'put ''eS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2FuaW1hdGlvbjpzcGluIDFzIGxpbmVhciBpbmZpbml0ZTttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjA7dGV4dC1pbmRlbnQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5zcGlubmVyOmFmdGVy''@;'; put 'put ''e2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1''@;'; put 'put ''bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NsaXAtcGF0aDplbGxpcHNlKDEwMCUgNTMuNSUgYXQgMCAwKTtib3JkZXI6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zdHJva2Utd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRl''@;'; put 'put ''ci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXNwaW5uZXItYm9yZGVyLXJhZGl1cyl9LnNwaW5uZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQt''@;'; put 'put ''c2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvcmRl''@;'; put 'put ''cjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmlsbC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzKX0uc3Bpbm5lci5zcGlubmVyLW1ke2hlaWdodDp2YXIoLS1jbHIt''@;'; put 'put ''c3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSl9LnNwaW5uZXIuc3Bpbm5lci1tZDpiZWZv''@;'; put 'put ''cmUsLnNwaW5uZXIuc3Bpbm5lci1tZDphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO3dpZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xy''@;'; put 'put ''LXNwaW5uZXItbWVkaXVtLXNpemUpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdpZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZSwuc3Bpbm5lci5zcGlubmVyLXNte2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YWZ0''@;'; put 'put ''ZXIsLnNwaW5uZXIuc3Bpbm5lci1zbTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1zbTphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1z''@;'; put 'put ''aXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXN0cm9rZS13aWR0aCl9LnNwaW5uZXIuc3Bpbm5lci1pbmxpbmV7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207bWFyZ2luLXJpZ2h0OnZhcigt''@;'; put 'put ''LWNsci1zcGlubmVyLW1hcmdpbi1yaWdodCl9LnNwaW5uZXIuc3Bpbm5lci1pbnZlcnNlOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWludmVyc2U6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnNwaW5uZXIuc3Bpbm5lci1uZXV0cmFsLTA6YmVmb3Jle2JvcmRlci1jb2xvcjojMDAwfS5zcGlubmVyLnNwaW5uZXItbmV1''@;'; put 'put ''dHJhbC0wOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3Bpbm5lci1maWxsLWNvbG9yKTtib3JkZXItcmlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2FuaW1hdGlvbjpub25lO21hc2s6dXJs''@;'; put 'put ''KGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJG''@;'; put 'put ''JTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxzZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIydHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIl''@;'; put 'put ''M0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzc0NzQ3NCUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJDMy4yOSUyQzE3LjI3YTElMkMxJTJDMCUyQzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMx''@;'; put 'put ''LjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZzdmclM0UpO21hc2stcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uc3Bpbm5lci5zcGlu''@;'; put 'put ''bmVyLWNoZWNrOmFmdGVyLC5zcGlubmVyLnNwaW5uZXItY2hlY2s6YmVmb3Jle2JvcmRlcjowfS5idG4gLnNwaW5uZXJ7bWFyZ2luLXJpZ2h0OjA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmJ0biAuc3Bpbm5lcjpiZWZvcmUsLmJ0biAuc3Bpbm5lcjphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21p''@;'; put 'put ''bi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItaW5zaWRlLWJ1dHRvbi1zdHJva2Utd2lkdGgpfS5idG4taWNvbjpub3QoLmJ0bi1zbSkgLnNwaW5uZXJ7aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5l''@;'; put 'put ''ciAuc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLXNw''@;'; put 'put ''aW5uZXItY29udGFpbmVyIC5zcGlubmVyOmJlZm9yZSwuY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoKX1Aa2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06''@;'; put 'put ''cm90YXRlKDM2MGRlZyl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRhYmxlLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItdGFibGUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAw''@;'; put 'put ''KTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtY2Vs''@;'; put 'put ''bC1jb21wYWN0LXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLW5vYm9yZGVyLWJvcmRlcndpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQpOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13''@;'; put 'put ''ZWlnaHQtcmVndWxhcik7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1o''@;'; put 'put ''ZWFkZXItY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRhYmxlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItdGhlYWQtYmdjb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLXRhYmxlLWhlYWRlci1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUt''@;'; put 'put ''Zm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRhYmxlLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDAgMCAwOy0tY2xyLXRoZWFkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGFi''@;'; put 'put ''bGUtc21hbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci10YWJsZS1mb250c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci10YWJsZS1saW5laGVpZ2h0Om1peGlucy5iYXNlbGluZVB4KDE0KTstLWNsci10YWJsZS1jZWxscGFkZGluZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZzpjYWxjKCAodmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCkgLSB2YXIo''@;'; put 'put ''LS1jbHItdGFibGUtbGluZWhlaWdodCkpICogLjUgKX0udGFibGV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGgsLnRhYmxl''@;'; put 'put ''IHRke2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yKTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpO3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOnRvcH0udGFibGUgdGgubGVmdCwudGFibGUgdGQubGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRhYmxlIHRoLmxlZnQ6Zmlyc3QtY2hpbGQsLnRhYmxlIHRkLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNyl9LnRhYmxlIHRoLnJpZ2h0LC50YWJsZSB0ZC5yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50YWJsZSB0ZHttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0udGFibGUgdGh7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjpt''@;'; put 'put ''aWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6''@;'; put 'put ''Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxlIHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xv''@;'; put 'put ''cil9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRp''@;'; put 'put ''dXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS1jb21wYWN0''@;'; put 'put ''IHRke21pbi1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aGVhZCB0aHtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25l''@;'; put 'put ''fS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTt2ZXJ0aWNh''@;'; put 'put ''bC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUu''@;'; put 'put ''dGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS50YWJsZS12''@;'; put 'put ''ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpm''@;'; put 'put ''aXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJz''@;'; put 'put ''dC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVz''@;'; put 'put ''KX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0''@;'; put 'put ''b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNo''@;'; put 'put ''aWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtbm9ib3JkZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aHtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJs''@;'; put 'put ''ZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aGVhZCB0aDpm''@;'; put 'put ''aXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjB9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoLC50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItcmFkaXVzOjAhaW1wb3J0YW50fS50YWJsZS50YWJsZS1ub2JvcmRl''@;'; put 'put ''ciB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10b29sdGlwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRvb2x0''@;'; put 'put ''aXAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpfS50b29sdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzp2aXNpYmxlfS50b29sdGlwPi50b29sdGlwLWNvbnRl''@;'; put 'put ''bnR7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyO3doaXRlLXNwYWNlOm5vcm1hbDt6LWluZGV4OjEwNTB9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDotMjBweDtjb250ZW50OiIi''@;'; put 'put ''O3otaW5kZXg6LTF9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCBsaXtjb2xvcjppbmhlcml0fS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29udGVudHt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxfS50b29sdGlwOmhvdmVyPi50''@;'; put 'put ''b29sdGlwLWNvbnRlbnQ6ZW1wdHksLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29udGVudDplbXB0eXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LnRvb2x0aXA6Zm9jdXN7b3V0bGluZTowfS50b29sdGlwOmZvY3VzPjpmaXJzdC1jaGlsZHtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KTtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSl9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50''@;'; put 'put ''b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEw''@;'; put 'put ''MCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJp''@;'; put 'put ''Z2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztib3R0b206Y2Fs''@;'; put 'put ''YygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHIt''@;'; put 'put ''dG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVm''@;'; put 'put ''dD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1z''@;'; put 'put ''aXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTtpbnNldDphdXRvIDUwJSAxMDAlIGF1dG87Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LnRvb2x0aXAt''@;'; put 'put ''Y29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0Pi50b29sdGlw''@;'; put 'put ''LWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5n''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNl''@;'; put 'put ''dDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpi''@;'; put 'put ''ZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2xlZnQ6MDtib3R0b206YXV0bztyaWdodDphdXRvO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNikpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRl''@;'; put 'put ''bnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwMCUg''@;'; put 'put ''NTAlIGF1dG8gYXV0bztib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwu''@;'; put 'put ''dG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtyaWdodDowO2JvdHRvbTphdXRvO2xlZnQ6YXV0bzt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTYpKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50''@;'; put 'put ''b29sdGlwLWNvbnRlbnQudG9vbHRpcC1yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDo1MCUgYXV0byBhdXRvIDEwMCU7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVy''@;'; put 'put ''LXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1i''@;'; put 'put ''b2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7Ym9yZGVy''@;'; put 'put ''LXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50''@;'; put 'put ''b29sdGlwLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1sZWZ0e3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO2luc2V0OjUwJSAxMDAlIGF1dG8gYXV0bzttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''bHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi1yaWdodDpj''@;'; put 'put ''YWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9z''@;'; put 'put ''aXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtib3R0b206YXV0bztsZWZ0OmF1dG87cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAt''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC14cz4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC14c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KX0udG9vbHRpcC50''@;'; put 'put ''b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLW1kPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAt''@;'; put 'put ''Y29udGVudC50b29sdGlwLW1ke3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRoOmNhbGMoMzYwKigxcmVtL3Zhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi1ib3R0b206Y2Fs''@;'; put 'put ''Yyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtYm90dG9t''@;'; put 'put ''LWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4uYnRuKy50b29s''@;'; put 'put ''dGlwLWNvbnRlbnR7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pKX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zn''@;'; put 'put ''e3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpmb2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1mb3Jtcy1iYXNlbGluZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWZvcm1zLWljb24tc2l6''@;'; put 'put ''ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNv''@;'; put 'put ''bG9yLTQwMCk7LS1jbHItZm9ybXMtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLWludmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWZvcm1zLWludmFsaWQtdGV4dC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItZm9ybXMtdmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZm9ybXMtc3VidGV4dC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTIwMCk7LS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYm9yZGVyLWNvbG9yKTstLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXN1YnRleHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlz''@;'; put 'put ''YWJsZWQpOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNs''@;'; put 'put ''ci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nOjAgY2FsYyg0ICogdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSAvIDMpOy0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0OmNhbGMoNCAq''@;'; put 'put ''IHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpOy0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlz''@;'; put 'put ''YWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTstLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1jaGVj''@;'; put 'put ''a2JveC1kaXNhYmxlZC1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMt''@;'; put 'put ''Y2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1j''@;'; put 'put ''aGVja2JveC1kaXNhYmxlZC1pbmRldGVybWluYXRlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1m''@;'; put 'put ''b3Jtcy1yYWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6aW5zZXQg''@;'; put 'put ''MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYWRpby1jaGVja2VkLWRpc2FibGVkLXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTQpIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5''@;'; put 'put ''ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2st''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZSk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXJh''@;'; put 'put ''bmdlLXRodW1iLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTst''@;'; put 'put ''LWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xy''@;'; put 'put ''LWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJs''@;'; put 'put ''ZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYm9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2Vs''@;'; put 'put ''ZWN0LWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtY2Fy''@;'; put 'put ''ZXQtc2l6ZTpjYWxjKDEwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1i''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQt''@;'; put 'put ''b3B0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0t''@;'; put 'put ''Y2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNs''@;'; put 'put ''ci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWlj''@;'; put 'put ''b24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6Y2FsYyg0KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbCBpbnB1dDo6LW1zLXJldmVhbCwuY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlz''@;'; put 'put ''YWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jb250cm9sLWxhYmVse2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxl''@;'; put 'put ''ZCAuY2xyLXRleHRhcmVhLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItbnVtYmVyLWlucHV0e2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVt''@;'; put 'put ''YntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCkpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGl7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1jb250cm9sLW11bHRpIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlfS5jbHItY29u''@;'; put 'put ''dHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7''@;'; put 'put ''bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcik7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3VidGV4dC5lcnJvcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yKX0uY2xyLXN1YnRleHQuc3VjY2Vz''@;'; put 'put ''c3tjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xvcil9LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtkaXNw''@;'; put 'put ''bGF5Om5vbmV9LmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbntkaXNw''@;'; put 'put ''bGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRy''@;'; put 'put ''b2wtbGFiZWx7d2lkdGg6Y2FsYygzMip2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtmbGV4LXNocmluazowO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0taG9yaXpvbnRhbC5jbHItcm93IC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvfS5jbHIt''@;'; put 'put ''Zm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1mb3JtOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1jb250cm9sLWNvbnRhaW5lci5jbHItZXJyb3I+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0''@;'; put 'put ''ZS1pY29uLC5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3QpIC5jbHItY29udHJvbC1jb250YWluZXIuY2xyLXN1Y2Nlc3M+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmNs''@;'; put 'put ''ci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1jb250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7bWluLXdpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wuY2xyLXJvdz4uY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6YXV0bzttaW4td2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLXRvcDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNv''@;'; put 'put ''bXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1zdWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHR7''@;'; put 'put ''bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5lcnJvciwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5zdWNjZXNzLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2Vz''@;'; put 'put ''cyAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItc3VidGV4dC5zdWNjZXNze21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb24sLmNsci1m''@;'; put 'put ''b3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm17cGFkZGluZzp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1iZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94e3dpZHRoOmNhbGMoMTAwJSAtIHZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1m''@;'; put 'put ''dWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItdGV4dGFyZWEtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LWdyb3VwLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIGlucHV0LC5jbHItZm9ybS1mdWxs''@;'; put 'put ''LXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHRleHRhcmVhLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHNlbGVjdHt3aWR0aDoxMDAlfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29tYm9ib3gsLmNsci1mb3JtLWZ1bGwtd2lkdGgu''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3Jt''@;'; put 'put ''LWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItZm9ybS1mdWxsLXdp''@;'; put 'put ''ZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntmbGV4LXdyYXA6bm93cmFwfS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2ZsZXg6MCAwIGF1dG99LmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21w''@;'; put 'put ''YWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLXN1Y2Nlc3MgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntyaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb250cm9sLWNvbnRhaW5lcjpub3QoLmNsci1lcnJvcik6bm90KC5jbHItc3VjY2VzcykgdGV4dGFyZWF7d2lkdGg6Y2Fs''@;'; put 'put ''YygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkpfS5jbHItZm9ybS1ncm91cHtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2NvbnRlbnQ6IioiO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxs''@;'; put 'put ''OnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTMpO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdey13''@;'; put 'put ''ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWlnaHQ6NDAwO2Rpc3BsYXk6YmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUt''@;'; put 'put ''YmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnkt''@;'; put 'put ''Zm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtOSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDB9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpe2N1cnNv''@;'; put 'put ''cjpwb2ludGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmFmdGVye3Bv''@;'; put 'put ''c2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpub25lO2hlaWdodDpjYWxjKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUp''@;'; put 'put ''O2JvcmRlci1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouMTI1KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvcik7Ym9yZGVyLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LWNoZWNrYm94LW1hcmstY29sb3IpO2xlZnQ6Y2FsYyhjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpKi41KTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94''@;'; put 'put ''LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7b3V0bGluZTowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29s''@;'; put 'put ''b3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LWNoZWNrYm94LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5k''@;'; put 'put ''ZXRlcm1pbmF0ZTpiZWZvcmUsLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1pbmRl''@;'; put 'put ''dGVybWluYXRlLWJvcmRlci1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1sZWZ0''@;'; put 'put ''Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkp''@;'; put 'put ''fS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZCtsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpkaXNhYmxlZDpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHIt''@;'; put 'put ''Y2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtaW5kZXRlcm1pbmF0ZS1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWNoZWNrYm94''@;'; put 'put ''LXdyYXBwZXIuY2xyLWNoZWNrYm94LWlubGluZXtkaXNwbGF5OmZsZXh9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmUgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2Vs''@;'; put 'put ''aW5lKSk7d2lkdGg6YXV0b30uY2xyLWVycm9yIC5jbHItY2hlY2tib3gtd3JhcHBlcjpub3QoLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIpIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3Ip''@;'; put 'put ''fS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIC5jbHItY29udHJvbC1sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbnRy''@;'; put 'put ''b2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVyLC5j''@;'; put 'put ''bHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlz''@;'; put 'put ''YWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVyLC5j''@;'; put 'put ''bHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVye21heC13aWR0aDoxMDAlO2Rp''@;'; put 'put ''c3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHIt''@;'; put 'put ''Y29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1maWxlLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9j''@;'; put 'put ''a30uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxlLXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtv''@;'; put 'put ''cGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4''@;'; put 'put ''dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbntsaW5lLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1m''@;'; put 'put ''aWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MDtsaW5lLWhlaWdodDox''@;'; put 'put ''LjA4cmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyIC5idG57aGVpZ2h0OjEuMnJlbX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1p''@;'; put 'put ''bnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dHtoZWlnaHQ6MDt3aWR0aDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbiwuY2xyLWZpbGUt''@;'; put 'put ''aW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtY2xlYXItYnV0dG9ue21hcmdpbjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dC1jbGVhci1idXR0b257cGFkZGluZzowIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMikhaW1wb3J0YW50O21pbi13aWR0aDp1bnNldDtib3JkZXI6MH0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbi10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItZm9ybS1jb21wYWN0''@;'; put 'put ''IC5jbHItZmlsZS1pbnB1dC13cmFwcGVye21hcmdpbi10b3A6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZpbGUtaW5wdXQtd3JhcHBlcnttYXJnaW4tdG9wOjB9fS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1saXN0LWl0''@;'; put 'put ''ZW17bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO21heC13aWR0aDo1MDBweH0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWwtYW5kLXN0YXR1cy1pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmlsZS1saXN0IC5jbHItZmls''@;'; put 'put ''ZS1sYWJlbHt3aGl0ZS1zcGFjZTp3cmFwO2hlaWdodDp1bnNldDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1maWxlLWxpc3QgLmNs''@;'; put 'put ''ci1maWxlLWNsZWFyLWJ1dHRvbnttYXJnaW46MDtwYWRkaW5nOjA7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0''@;'; put 'put ''b24gY2RzLWljb257bWFyZ2luOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtaXRlbXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xy''@;'; put 'put ''LWZpbGUtbGlzdC1pdGVtIC5jbHItc3VidGV4dHttYXJnaW46MCFpbXBvcnRhbnR9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtYnJlYWt7ZmxleC1iYXNpczoxMDAlO2hlaWdodDowfS5jbHItaW5wdXQtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHItaW5wdXR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nKTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhl''@;'; put 'put ''aWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTts''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9ubHlde2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGlu''@;'; put 'put ''ZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRv''@;'; put 'put ''bmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAl''@;'; put 'put ''fS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWlucHV0OmRpc2FibGVkOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3Ip''@;'; put 'put ''fS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxp''@;'; put 'put ''ZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSku''@;'; put 'put ''Y2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90''@;'; put 'put ''KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dy''@;'; put 'put ''b3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLXN1Y2Nlc3MgLmNs''@;'; put 'put ''ci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOmNh''@;'; put 'put ''bGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0e21heC13aWR0aDoxMDAlfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyB2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSl9OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cGxhY2Vob2xkZXItY29sb3IpfS5jbHItaW5wdXQtZ3JvdXB7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNw''@;'; put 'put ''bGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRp''@;'; put 'put ''b246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHIt''@;'; put 'put ''aW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXN7d2lkdGg6YXV0b30uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5w''@;'; put 'put ''dXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjEwMCV9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1c3tiYWNrZ3JvdW5kLXNpemU6MDtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIHNlbGVjdCwuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwIC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItaW5wdXQtZ3JvdXAgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdHtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQt''@;'; put 'put ''Y29sb3IpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjAgY2FsYygxLjUqdmFyKC0tY2xyLWZvcm1zLWJh''@;'; put 'put ''c2VsaW5lKSk7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2N1cnNvcjpwb2ludGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbiwuY2xyLWlucHV0LWdyb3VwIC5j''@;'; put 'put ''bHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2xyLWljb257ZmlsbDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1n''@;'; put 'put ''cm91cC1pY29uLWFjdGlvbi1zaXplKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSl9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNr''@;'; put 'put ''Z3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJh''@;'; put 'put ''bnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLXN1Y2Nlc3Mg''@;'; put 'put ''LmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbntmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yKX0uY2xyLWlucHV0''@;'; put 'put ''LWdyb3VwOmhhcyhpbnB1dFtyZWFkb25seV0pLC5jbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1pbnB1dC1ncm91cDpoYXMoaW5wdXRbcmVhZG9ubHldKSAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMsLmNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnN7ZGlzcGxheTpub25lfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItaW5wdXQtZ3JvdXB7bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowfS5jbHItcmFkaW8td3JhcHBlciBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXJhZGlvLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNl''@;'; put 'put ''bnRlcn0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmNs''@;'; put 'put ''ci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyOi4w''@;'; put 'put ''NXJlbSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpiZWZvcmV7Ym9yZGVyOjA7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tc2VsZWN0ZWQtc2hh''@;'; put 'put ''ZG93KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpkaXNhYmxlZDpiZWZvcmV7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1zaGFkb3cpfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1''@;'; put 'put ''c3tvdXRsaW5lOjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmZvY3VzOmJlZm9yZXtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZz''@;'; put 'put ''ZXQ6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNs''@;'; put 'put ''ci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1j''@;'; put 'put ''b2xvci1kaXNhYmxlZCl9LmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5n''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXJhZGlv''@;'; put 'put ''LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsOmVtcHR5e3BhZGRpbmctbGVmdDowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJl''@;'; put 'put ''bC1kaXNhYmxlZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVye21heC13aWR0aDox''@;'; put 'put ''MDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBh''@;'; put 'put ''Y3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29u''@;'; put 'put ''dHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7''@;'; put 'put ''LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGlu''@;'; put 'put ''ZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2xyLXAyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqMikgMCB2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmZvY3Vze291dGxpbmU6MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211''@;'; put 'put ''bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3Vu''@;'; put 'put ''ZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLXNlbGVjdC13''@;'; put 'put ''cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0aGluLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRp''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06''@;'; put 'put ''Zm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVj''@;'; put 'put ''dDphY3RpdmU6ZGlzYWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxl''@;'; put 'put ''Y3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpkaXNhYmxlZCBvcHRpb24sLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVkLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHIt''@;'; put 'put ''bXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNsci1tdWx0aXNlbGVjdC13cmFwcGVy''@;'; put 'put ''IHNlbGVjdCBvcHRpb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmQsLmNs''@;'; put 'put ''ci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDo6LW1zLWV4cGFuZHtkaXNwbGF5Om5vbmV9LmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVy''@;'; put 'put ''e3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKTt0b3A6Y2FsYyguNSooNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC0gdmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSkpO3JpZ2h0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSk7bWFyZ2luOjA7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2''@;'; put 'put ''ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''M0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4w''@;'; put 'put ''OCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWNvbG9yKX0uY2xyLXNlbGVjdC13''@;'; put 'put ''cmFwcGVyOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcil9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OmNhbGMo''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlw''@;'; put 'put ''bGVdLHNlbGVjdFtzaXplXXtwYWRkaW5nOjA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0''@;'; put 'put ''aXBsZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDphdXRvO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9c2VsZWN0W211bHRpcGxlXTpob3Zlcixz''@;'; put 'put ''ZWxlY3RbbXVsdGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlw''@;'; put 'put ''bGUtYm9yZGVyLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbixzZWxlY3Rbc2l6ZV0gb3B0aW9ue3BhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKi41KSB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlw''@;'; put 'put ''bGUtb3B0aW9uLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbjpjaGVja2VkLHNlbGVjdFtzaXplXSBvcHRpb246Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3IpfS5jbHIt''@;'; put 'put ''ZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKSA5''@;'; put 'put ''NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLWVycm9yIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItZXJy''@;'; put 'put ''b3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWVycm9yIHNlbGVjdFttdWx0aXBsZV17Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zdWNjZXNzIHNlbGVjdDpub3Qo''@;'; put 'put ''W211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0''@;'; put 'put ''W211bHRpcGxlXXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9''@;'; put 'put ''LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ6aG92ZXI6YWZ0ZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9y''@;'; put 'put ''bS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0''@;'; put 'put ''OmhvdmVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFw''@;'; put 'put ''cGVye21hcmdpbi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5j''@;'; put 'put ''bHItdGV4dGFyZWF7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2hlaWdodDphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0v''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci10ZXh0YXJlYTpmb2N1c3tvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMt''@;'; put 'put ''cmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcil9LmNsci10''@;'; put 'put ''ZXh0YXJlYTpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLXN1Y2Nlc3MgLmNsci10ZXh0YXJlYXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXRleHRhcmVh''@;'; put 'put ''e2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7b3V0bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDphdXRvfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLXRleHRh''@;'; put 'put ''cmVhLXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFy''@;'; put 'put ''ZWF7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9m''@;'; put 'put ''Zjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''KTstLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7LS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb246dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXRvZ2dsZS1k''@;'; put 'put ''aXNhYmxlZC1vZmYtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcik7LS1jbHItdG9n''@;'; put 'put ''Z2xlLWRpc2FibGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1j''@;'; put 'put ''b2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVs''@;'; put 'put ''dC1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci10b2dnbGUtd3JhcHBlcntwb3Np''@;'; put 'put ''dGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2p1c3RpZnktY29udGVudDpzdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KX0uY2xyLXRvZ2dsZS13cmFwcGVyIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZsZXg6MSAxIGF1dG99LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmbGV4OjAgMCBhdXRvO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCl9LmNs''@;'; put 'put ''ci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIi''@;'; put 'put ''O2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJv''@;'; put 'put ''cGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAwKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9y''@;'; put 'put ''KTtsZWZ0OjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rp''@;'; put 'put ''b246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1c3tvdXRsaW5lOjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246''@;'; put 'put ''ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yLW9u''@;'; put 'put ''KTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnQ7bGVmdDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSk7cmlnaHQ6''@;'; put 'put ''MH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCl7bGVmdDowfS5jbHItdG9nZ2xlLXdyYXBw''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xl''@;'; put 'put ''LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNh''@;'; put 'put ''YmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10''@;'; put 'put ''b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1j''@;'; put 'put ''b2xvcil9LmNsci10b2dnbGUtd3JhcHBlci5yaWdodC1sYWJlbHtmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQt''@;'; put 'put ''c2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7bWFyZ2luLXRvcDowfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OjB9LmNsci10b2dnbGUtcmlnaHQgLmNsci10b2dnbGUtd3JhcHBlcntmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtcmlnaHQgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1yYW5nZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0''@;'; put 'put ''OjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxs''@;'; put 'put ''LWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6bm9uZX0uY2xyLXJhbmdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1j''@;'; put 'put ''bHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdl''@;'; put 'put ''LXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVp''@;'; put 'put ''Z2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkKy5maWxsLWlucHV0e3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpfWlucHV0W3R5cGU9cmFuZ2Vde3Bh''@;'; put 'put ''ZGRpbmc6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRy''@;'; put 'put ''YWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13''@;'; put 'put ''ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdp''@;'; put 'put ''ZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVp''@;'; put 'put ''Z2h0KX1pbnB1dFt0eXBlPXJhbmdlXTpkaXNhYmxlZHtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvci1kaXNhYmxlZCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBl''@;'; put 'put ''ci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9aW5wdXRbdHlwZT1y''@;'; put 'put ''YW5nZV17Ym9yZGVyOjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7bWFyZ2luOjA7''@;'; put 'put ''Ym9yZGVyOjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX19XzotbXMtZnVs''@;'; put 'put ''bHNjcmVlbiAuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXQsOnJvb3QgLmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e2Rpc3BsYXk6bm9uZX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmls''@;'; put 'put ''bC1sb3dlciw6cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIucHJvZ3Jlc3MtZmlsbCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXJ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXBy''@;'; put 'put ''b2dyZXNzLWZpbGwtY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlu''@;'; put 'put ''cHV0W3R5cGU9cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9''@;'; put 'put ''cmFuZ2VdOjotbXMtdHJhY2ssOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3tib3JkZXI6MDttYXJnaW46MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFu''@;'; put 'put ''Z2UtdHJhY2stY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXBy''@;'; put 'put ''b2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XXtwb3NpdGlvbjpyZWxhdGl2ZX1pbnB1dFtjbHJEYXRhbGlzdElu''@;'; put 'put ''cHV0XTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye29wYWNpdHk6MDtjdXJzb3I6dGV4dH0uY2xyLWlucHV0LWdyb3VwIGlucHV0W2NsckRhdGFsaXN0SW5wdXRde3otaW5kZXg6Mn0uY2xyLWlucHV0LWdyb3VwIC5jbHItZGF0YWxpc3QtY2FyZXR7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7dG9wOjI1JTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcik7Y3Vyc29yOnRleHQ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItZGF0YWxpc3QtY2FyZXR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yKX1jbHItZGF0YWxpc3QtY29udGFpbmVyIC5jbHItaW5wdXQt''@;'; put 'put ''Z3JvdXB7cGFkZGluZy1yaWdodDowfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF0rYnV0dG9uLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcil9''@;'; put 'put ''LmNsci1pbnB1dC13cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uW2Rpc2FibGVkXSAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yKX0uY2xy''@;'; put 'put ''LWlucHV0LXdyYXBwZXIgaW5wdXRbY2xyUGFzc3dvcmRdW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFw''@;'; put 'put ''O21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0ey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dDo6''@;'; put 'put ''LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1i''@;'; put 'put ''ZXItaW5wdXQtc2VwYXJhdG9ye2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwLWljb24tYWN0aW9ue2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWJvcmRlci13aWR0aC0yMDApKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKX0uY2xyLW51bWJl''@;'; put 'put ''ci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp1bnNldH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYWxlbmRhci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tn''@;'; put 'put ''cm91bmQpOy0tY2xyLWNhbGVuZGFyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItb3B0aW9uLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0''@;'; put 'put ''aXZlLW9wdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1zZWxlY3RlZCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNh''@;'; put 'put ''bGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1i''@;'; put 'put ''YWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItaG92ZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZl''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLXdlZWtk''@;'; put 'put ''YXktZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItY2FsZW5kYXItcGlj''@;'; put 'put ''a2VyLWJ0bi1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02KTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pfS5kYXRlcGlja2Vye2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDpjYWxjKCg3KnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpO2hlaWdodDpjYWxjKCg4KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1jYWxlbmRhci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO3otaW5kZXg6''@;'; put 'put ''MTA1MH0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci12aWV3LW1hbmFnZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7d2lkdGg6Y2FsYyg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKX0uZGF0ZXBpY2tlci5o''@;'; put 'put ''YXMtcmFuZ2Utb3B0aW9ue3dpZHRoOmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDE1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UpKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgKyAyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5kYXRlcGlja2VyLmhhcy1hY3Rpb24tYnV0dG9uc3toZWlnaHQ6Y2FsYygoOCp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpICsgdmFyKC0tY2xyLWJ0bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNSkpO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci1hY3Rpb25ze21pbi13aWR0aDoxMDAlO2hlaWdodDpjYWxjKHZhcigtLWNsci1idG4taGVpZ2h0KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpO2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtqdXN0aWZ5LWNvbnRlbnQ6ZW5kO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Z2FwOnZhcigt''@;'; put 'put ''LWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pfS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLWFjdGlvbnMgYnV0dG9ue21hcmdpbjowfS5jbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2e3dpZHRoOmNhbGMoMTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDoxMDAlfS5jYWxlbmRhci1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMSkpfS5jYWxlbmRhci1zd2l0Y2hlcnMsLnllYXItc3dpdGNoZXJze2Rpc3BsYXk6ZmxleH0ueWVhci1zd2l0Y2hlcnN7ZmxleDowIDAgYXV0bzthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKjMpfS5jYWxlbmRhci10YWJsZXtmbGV4''@;'; put 'put ''OjEgMSBhdXRvO2JvcmRlci1zcGFjaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlfXRkLmNhbGVuZGFyLWNlbGwsdGQuY2FsZW5kYXItdGFibGUgLmNhbGVuZGFyLWNlbGx7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5e2Rpc3BsYXk6aW5saW5lfS53ZWVrZGF5c3tmbGV4OjAgMCB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTExKX0ud2Vla2RheXtmb250LXNpemU6dmFyKC0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1idG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQt''@;'; put 'put ''d2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2FsZW5kYXItYnRuLmluLXJhbmdle2JhY2tncm91''@;'; put 'put ''bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLXJhbmdlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5jYWxlbmRhci1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yKX0uY2FsZW5kYXItYnRuOmZvY3Vze291dGxp''@;'; put 'put ''bmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jYWxl''@;'; put 'put ''bmRhci1idG46YWN0aXZle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjA7bWFyZ2luOjAhaW1wb3J0YW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdH0uZGF5LWJ0bi5pbi1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MH0uZGF5LWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5kYXktYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxp''@;'; put 'put ''bmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5kYXktYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZl''@;'; put 'put ''LWNvbG9yLWJnKX0uZGF5LWJ0bjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5kYXktYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9LmRheS1idG4uaXMtdG9kYXl7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1k''@;'; put 'put ''YXRlLWNlbGwtZm9udC13ZWlnaHQpfS5kYXktYnRuLmlzLXNlbGVjdGVkLC5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlLC5kYXktYnRuLmlzLWVuZC1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Y2FsZW5kYXItYWN0aXZlLWNlbGwtY29sb3IpfS5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRheS1idG4uaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFu''@;'; put 'put ''Z2Upe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmRheS1idG4uaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9LmRheS1idG4uaXMtZXhj''@;'; put 'put ''bHVkZWR7ZGlzcGxheTpub25lfS5kYXktYnRuLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFyLXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5z''@;'; put 'put ''d2l0Y2hlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWNvbG9yKX0uc3dpdGNoZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0uc3dpdGNoZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZl''@;'; put 'put ''LWNvbG9yKX0uc3dpdGNoZXIgY2RzLWljb24sLnN3aXRjaGVyIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9Lm1vbnRocGlja2VyLXRyaWdnZXIsLnllYXJwaWNrZXItdHJpZ2dlcnt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTEzKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1vbnRocGlja2VyLXRyaWdn''@;'; put 'put ''ZXIueWVhci1yYW5nZSwueWVhcnBpY2tlci10cmlnZ2VyLnllYXItcmFuZ2V7d2lkdGg6dW5zZXQ7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5tb250aHBpY2tlciwueWVhcnBpY2tlcnttaW4taGVpZ2h0OmNhbGMoNip2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEyKSl9Lm1vbnRocGlja2VyLC55ZWFycGlja2VyLC5kYXlwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtoZWlnaHQ6Y2FsYyg5KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgMyp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS55ZWFyc3tmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnRoLC55ZWFye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXIt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTto''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7d2lkdGg6Y2FsYyguNSpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5tb250aDpob3ZlciwueWVhcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5tb250aDphY3RpdmUsLnll''@;'; put 'put ''YXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0ubW9udGguaXMtdG9kYXksLnllYXIuaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkg''@;'; put 'put ''c29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQpfS5tb250aC5pcy1zZWxlY3RlZCwubW9udGguaXMtc3RhcnQtcmFuZ2UsLm1vbnRoLmlz''@;'; put 'put ''LWVuZC1yYW5nZSwueWVhci5pcy1zZWxlY3RlZCwueWVhci5pcy1zdGFydC1yYW5nZSwueWVhci5pcy1lbmQtcmFuZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxs''@;'; put 'put ''LWNvbG9yKX0ubW9udGguaXMtc3RhcnQtcmFuZ2U6bm90KC5pcy1lbmQtcmFuZ2UpLC55ZWFyLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9Lm1vbnRoLmlzLWVuZC1yYW5nZTpu''@;'; put 'put ''b3QoLmlzLXN0YXJ0LXJhbmdlKSwueWVhci5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFydC1yYW5nZSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ubW9udGguaXMtc2VsZWN0ZWQ6Zm9jdXMsLnllYXIuaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9Lm1vbnRoLmlzLWRpc2FibGVkLC55ZWFyLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXIt''@;'; put 'put ''ZXZlbnRzOm5vbmV9Lm1vbnRoLmlzLWRpc2FibGVkOmhvdmVyLC55ZWFyLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5tb250aHMsLnllYXJze3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtmbGV4LXdyYXA6d3JhcDtkaXNwbGF5OmZsZXh9Lm1vbnRoe3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyO2hlaWdodDpjYWxjKDUqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNvbWJv''@;'; put 'put ''Ym94LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY29tYm9ib3gtaW5wdXQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWNvbWJvYm94LW1pbi13aWR0aDpjYWxjKDE2OCAqICgxcmVt''@;'; put 'put ''IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aDpjYWxjKDM2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1jb21i''@;'; put 'put ''b2JveC1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLWNvbWJvYm94LXRleHQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWNvbWJvYm94LXBhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''Oy0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1nYXA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS02KTstLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJh''@;'; put 'put ''Y2tncm91bmQtaG92ZXIpOy0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7''@;'; put 'put ''LS1jbHItY29tYm9ib3gtcGlsbC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDAgMDstLWNsci1jb21ib2JveC1waWxsLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWlj''@;'; put 'put ''b24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXJhZGl1cy0xMDApfS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9se2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmNsci1jb21ib2JveC1mb3JtLWNvbnRyb2wgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0x''@;'; put 'put ''KSk7bGVmdDowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzKX0uY2xyLWZvY3Vze3dpZHRoOjEwMCV9LmNsci1lcnJvciAu''@;'; put 'put ''Y2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItZ2FwKSArIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0KSkgMCB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQpO21pbi13aWR0aDp2YXIoLS1j''@;'; put 'put ''bHItY29tYm9ib3gtbWluLXdpZHRoKTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXR7cGFkZGluZzowO21heC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1''@;'; put 'put ''dDpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtdGV4dC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4odmFyKC0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aCksMTAwJSk7cGFkZGluZy1ib3R0b206Y2FsYygzKigxcmVt''@;'; put 'put ''L3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dC5jbHItY29tYm9ib3gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyLmludmFsaWR7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''aW52YWxpZC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1yZW1vdmUtYnRue2JhY2tn''@;'; put 'put ''cm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbHtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1oZWlnaHQpO21hcmdpbjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1tYXJnaW4pO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXMpO2Jv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxsIC5jbHItY29tYm9ib3gtcGlsbC1jb250ZW50e2ZvbnQt''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcik7cGFkZGluZzowfS5j''@;'; put 'put ''bHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbiwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb257bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5jbHItY29tYm9ib3gtd3Jh''@;'; put 'put ''cHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbltzaGFwZT13aW5kb3ctY2xvc2VdLC5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjbHItaWNvbltzaGFwZT13aW5kb3ctY2xvc2Vde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29s''@;'; put 'put ''b3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyOm5vdCguZGlzYWJsZWQpOmhvdmVyLC5jbHItY29tYm9ib3gtd3JhcHBlcjpmb2N1cy13aXRoaW57YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1jb21ib2JveC10cmlnZ2Vye3BhZGRpbmctbGVmdDp2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdn''@;'; put 'put ''ZXItcGFkZGluZy1yaWdodCk7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjpjdXJyZW50Q29sb3I7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNh''@;'; put 'put ''YmxlZHtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQgY2RzLWljb25bc2hhcGU9YW5nbGVdLC5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmds''@;'; put 'put ''ZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1jb21ib2JveC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlXSwuY2xyLWNvbWJvYm94LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGVde2NvbG9yOnZhcigtLWNsci1j''@;'; put 'put ''b21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO21pbi13''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0y''@;'; put 'put ''MDApO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRpb246c3RhdGljO21heC1oZWlnaHQ6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlKSkpO292ZXJmbG93LXk6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5ne3BhZGRpbmc6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTEpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZy10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94''@;'; put 'put ''LW9wdGlvbnMtZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWNvbWJvYm94LW9wdGlvbntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bk''@;'; put 'put ''b3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDox''@;'; put 'put ''MDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLWNv''@;'; put 'put ''bWJvYm94LW9wdGlvbjpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb246aG92''@;'; put 'put ''ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpm''@;'; put 'put ''b2N1c3t6LWluZGV4OmluaGVyaXR9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6aG92ZXIsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3Vu''@;'; put 'put ''ZDowIDB9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6YWN0aXZlLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uY2xyLWZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmNsci1jb21ib2Jv''@;'; put 'put ''eC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfX0uY2xyLWNvbWJvYm94LWRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6''@;'; put 'put ''bm90LWFsbG93ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dl''@;'; put 'put ''ZH0uY2xyLWZpbHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdGFjay12aWV3''@;'; put 'put ''LWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''b2xvci00MDApOy0tY2xyLXN0YWNrLXZpZXctcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItc3RhY2stdmlldy1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmll''@;'; put 'put ''dy1leHBhbmRhYmxlLXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItc3RhY2st''@;'; put 'put ''dmlldy1leHBhbmRhYmxlLXJvdy1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zl''@;'; put 'put ''cik7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1ob3Zlci1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4''@;'; put 'put ''cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNp''@;'; put 'put ''emUpOy0tY2xyLXN0YWNrLXZpZXctcm93LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0t''@;'; put 'put ''Y2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1y''@;'; put 'put ''b3ctY29sb3IpOy0tY2xyLXN0YWNrLXZpZXctYmctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplKTstLWNsci1zdGFjay12''@;'; put 'put ''aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQpOy0tY2xyLXN0''@;'; put 'put ''YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1i''@;'; put 'put ''Zy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWhvdmVyKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZp''@;'; put 'put ''ZXctZXhwYW5kZWQtcm93LWNvbG9yKX0uc3RhY2staGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAxIGF1dG87bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTUpIDA7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdo''@;'; put 'put ''dCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9uc3tk''@;'; put 'put ''aXNwbGF5OmJsb2NrO2ZsZXg6MCAwIGF1dG99LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9ucyAuc3RhY2stYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uc3RhY2stdmlld3tvdmVyZmxvdy15OmF1dG87d29yZC13cmFwOmJyZWFrLXdvcmQ7bWFyZ2luLXRv''@;'; put 'put ''cDowO2JvcmRlcjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItcmFkaXVzKX0uc3RhY2stdmlldyBkZCwuc3RhY2stdmlldyBk''@;'; put 'put ''dHttYXJnaW4taW5saW5lLXN0YXJ0OjA7bWFyZ2luLWxlZnQ6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtvdmVyZmxvdy15OmhpZGRlbjtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0''@;'; put 'put ''aCk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20pfS5zdGFjay12aWV3Pi5zdGFjay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1i''@;'; put 'put ''bG9jazpsYXN0LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jaGFuZ2VkOmJlZm9yZXtjb250ZW50OiIgIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MDt3aWR0aDowO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xp''@;'; put 'put ''ZCB2YXIoLS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY2FyZXR7YWxpZ24tc2VsZjpjZW50ZXJ9LnN0YWNrLXZp''@;'; put 'put ''ZXcgLnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29s''@;'; put 'put ''b3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZv''@;'; put 'put ''bnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmcpO2ZsZXg6MSAxIGF1dG87ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWw6Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xKTtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zdGFjay12aWV3IC5zdGFjay12aWV3LWtleXtmbGV4OjAgMSA0MCU7bWF4LXdpZHRoOjQwJTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0u''@;'; put 'put ''c3RhY2stdmlldyAuc3RhY2stYmxvY2stY2FyZXR7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Nyk7LS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcik7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7ZmxleDoxIDEgYXV0bzt3aWR0aDo2MCU7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTowfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbntmbGV4OjAgMCBhdXRv''@;'; put 'put ''O3dpZHRoOjEwMCV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9ja3tib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1jaGls''@;'; put 'put ''ZHJlbj4uc3RhY2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbCwuc3Rh''@;'; put 'put ''Y2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4''@;'; put 'put ''cGFuZGFibGU+LnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUt''@;'; put 'put ''cm93LWJnLWNvbG9yKTtjdXJzb3I6cG9pbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1p''@;'; put 'put ''ZGRsZTtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBdmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yKSUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUy''@;'; put 'put ''QzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFi''@;'; put 'put ''ZWwsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xvciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90''@;'; put 'put ''KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctaG92''@;'; put 'put ''ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlciAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVy''@;'; put 'put ''KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1hY3RpdmUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6''@;'; put 'put ''dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWx7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItc3RhY2stdmlldy1ib3Jk''@;'; put 'put ''ZXItd2lkdGgpO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tKTtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3Rh''@;'; put 'put ''dGUoMCl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3IpfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3Zlcntjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFj''@;'; put 'put ''ay12aWV3LWV4cGFuZGVkLWhvdmVyLXJvdy1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0''@;'; put 'put ''YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZl''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNr''@;'; put 'put ''LWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0ubW9kYWwgLnN0YWNrLXZpZXd7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IGNsci1zdGFjay1ibG9jay5zdGFjay1ibG9jay1leHBhbmRhYmxlIC5zdGFjay1ibG9jay1sYWJl''@;'; put 'put ''bDpiZWZvcmV7Y29udGVudDpub25lfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sgLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleSwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleXtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gY2xyLXN0YWNrLWJsb2NrIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmUsLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlz''@;'; put 'put ''cGxheTpub25lfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10cmVlLWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3Jv''@;'; put 'put ''dW5kLWhvdmVyKTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItdHJlZS1saW5rLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xv''@;'; put 'put ''cik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''Y29sb3ItYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci10cmVlLW5vZGUtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1ob3Zlci1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNv''@;'; put 'put ''bG9yKTstLWNsci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWRpc2FibGVkLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci10cmVlLW5vZGUtY29udGVudC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXRleHQtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1zZWxl''@;'; put 'put ''Y3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQt''@;'; put 'put ''Ymctc2VsZWN0ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3Qtb3BhY2l0eS0wKX0uY2xyLXRyZWUtbm9kZXtkaXNwbGF5OmJsb2NrfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1j''@;'; put 'put ''b250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmt7cG9pbnRlci1ldmVudHM6bm9uZX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVl''@;'; put 'put ''LW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2hlY2tib3h7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNv''@;'; put 'put ''bnRlbnQtYmctZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRy''@;'; put 'put ''ZWVub2RlLWNvbnRlbnQsLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250''@;'; put 'put ''ZW50LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNs''@;'; put 'put ''ci10cmVlbm9kZS1saW5rIGNsci1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRh''@;'; put 'put ''aW5lciAuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24s''@;'; put 'put ''LmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0e2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNhcmV0IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xy''@;'; put 'put ''LXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRyZWUtbm9kZS1jb250''@;'; put 'put ''ZW50LWNvbnRhaW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVye3dpZHRoOjEwMCU7cGFkZGluZzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3gu''@;'; put 'put ''Y2xyLWNoZWNrYm94LXdyYXBwZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVlbm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFi''@;'; put 'put ''ZWx7d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjB9LmNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXM+LmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzPi5jbHItdHJlZW5vZGUtY2hlY2tib3h7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0yMDApKTtvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApfS5jbHItdHJlZW5v''@;'; put 'put ''ZGUtY29udGVudHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKSAwIDAgdmFyKC0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1cyl9LmNsci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMTApfS5jbHItdHJlZW5vZGUtY29udGVudDpub3QoOmhhcyguY2xyLXRyZWVub2RlLWxpbmspKXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50''@;'; put 'put ''IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2NvbG9yOnZhcigtLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3IpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94''@;'; put 'put ''OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWNvbG9yKX0u''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZW5vZGUtY2hlY2tib3h7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcil9LmNs''@;'; put 'put ''ci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVl''@;'; put 'put ''bm9kZS1saW5rOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlbm9kZS1j''@;'; put 'put ''aGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xy''@;'; put 'put ''LXRyZWVub2RlLWxpbmsgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVye2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyIGNsci1pY29uLC5jbHItdHJlZW5v''@;'; put 'put ''ZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVl''@;'; put 'put ''LW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3RpdmUsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVl''@;'; put 'put ''LW5vZGUtY29udGVudC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3gg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZSBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbDphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250''@;'; put 'put ''ZW50LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3RpdmU6aG92ZXIsLmNsci10cmVlbm9kZS1jaGVja2JveDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRp''@;'; put 'put ''c2FibGVkKTpjaGVja2VkKTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0e2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21hcmdpbjowO3BhZGRp''@;'; put 'put ''bmc6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7YmFja2dyb3VuZDowIDA7Ym9y''@;'; put 'put ''ZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcil9LmNsci10cmVlbm9kZS1jYXJldDpob3Zlcntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0OmFjdGl2ZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlLW5vZGUtY2FyZXQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2Rl''@;'; put 'put ''LXNwaW5uZXItY29udGFpbmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtwYWRkaW5nOmNhbGMoKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkqLjUpfS5jbHIt''@;'; put 'put ''dHJlZW5vZGUtc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVu''@;'; put 'put ''b2RlLWNoaWxkcmVue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpbGwtY2hhbmdlOmhlaWdodDtvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXRyZWVub2RlLWxpbmt7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXJnaW46MDtwYWRk''@;'; put 'put ''aW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5jbHItdHJlZW5vZGUtbGlu''@;'; put 'put ''azpob3ZlciwuY2xyLXRyZWVub2RlLWxpbms6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZGF0YWdyaWQtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVy''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLXJvdy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXIt''@;'; put 'put ''YmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRh''@;'; put 'put ''dGFncmlkLWFjdGlvbi1wb3BvdmVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdy''@;'; put 'put ''aWQtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1j''@;'; put 'put ''b2xvci1ob3Zlcik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQt''@;'; put 'put ''cGxhY2Vob2xkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''LXRvZ2dsZS1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9n''@;'; put 'put ''Z2xlLWZpbGwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBh''@;'; put 'put ''bmUtY29udGVudC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNv''@;'; put 'put ''bnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0''@;'; put 'put ''aW9uLWZvbnQtc2l6ZSk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1u''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWRhdGFncmlkLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWFjdGlvbi1hcnJvdy1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldDpjYWxjKC0xICogdG9rZW5zLiRjZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZzptaXhpbnMuYmFz''@;'; put 'put ''ZWxpbmVQeCg5KX0uZGF0YWdyaWR7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdy''@;'; put 'put ''aWQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwt''@;'; put 'put ''cGFkZGluZyk7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hp''@;'; put 'put ''bGQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ucmlnaHQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLnJpZ2h0e3RleHQtYWxpZ246cmlnaHR9''@;'; put 'put ''LmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxse21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0KTtsaW5l''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOnZhcigtLWNsci10aGVhZC1j''@;'; put 'put ''b2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2Fw''@;'; put 'put ''dGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b20tc3R5''@;'; put 'put ''bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6''@;'; put 'put ''Zmlyc3QtY2hpbGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3At''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9''@;'; put 'put ''LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQg''@;'; put 'put ''LmRhdGFncmlkLXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAu''@;'; put 'put ''ZGF0YWdyaWQtcm93Omxhc3QtY2hpbGQgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4sLmRh''@;'; put 'put ''dGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNlbGx7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3QtcGFkZGluZyl9LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1''@;'; put 'put ''bW4gbm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0''@;'; put 'put ''bzttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLmNkay12aXJ0dWFsLXNjcm9sbGFibGUgLmRhdGFncmlkLXJvd3N7ZmxleC1ncm93OjB9LmRhdGFncmlkLW92ZXJmbG93LWVsbGlwc2lzIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxs''@;'; put 'put ''cz4uZGF0YWdyaWQtY2VsbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFs''@;'; put 'put ''LXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1h''@;'; put 'put ''cHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNv''@;'; put 'put ''bntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1jb2xvcil9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiBzdmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0fS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0''@;'; put 'put ''IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzp2YXIoLS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nKX0uZGF0YWdyaWQtaGVhZGVyLC5kYXRhZ3JpZC1ib2R5LC5kYXRhZ3JpZC1yb3csLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY2VsbCwuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6YmxvY2t9LmRhdGFncmlkLXJvd3tib3JkZXIt''@;'; put 'put ''dG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1yb3c6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wOm5vbmV9LmRhdGFncmlkLXJv''@;'; put 'put ''dzpob3ZlciwuZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZCwuZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVk''@;'; put 'put ''IC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkOmhvdmVy''@;'; put 'put ''LC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6''@;'; put 'put ''YWN0aXZlLC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdzphY3RpdmUsLmRh''@;'; put 'put ''dGFncmlkLXJvdzphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b257YmFja2dyb3VuZC1jb2xvcjp1bnNldH0uZGF0YWdyaWQtcm93''@;'; put 'put ''LmRhdGFncmlkLXJvdy1za2VsZXRvbiAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b24gLmRhdGFncmlkLXJvdy1zdGlja3l7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4''@;'; put 'put ''OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlk''@;'; put 'put ''LXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtY29udGFpbmVye2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZm9udHNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdHttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''IC0gdmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKSk7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtcm93IC5kYXRhZ3Jp''@;'; put 'put ''ZC1zZWxlY3QgaW5wdXR7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXR7Y3Vyc29yOm5vdC1hbGxv''@;'; put 'put ''d2VkfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0e21hcmdpbjpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2lnbnBvc3Qt''@;'; put 'put ''dHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2Rpc3BsYXk6bm9uZX0uZGF0YWdy''@;'; put 'put ''aWQtcm93LmRhdGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6ZmxleDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRh''@;'; put 'put ''dGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDt6LWluZGV4OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbDpsYXN0''@;'; put 'put ''LWNoaWxkOmFmdGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3Itd2lkdGgpO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlz''@;'; put 'put ''LXJlcGxhY2Vke2ZsZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbi1zZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpy''@;'; put 'put ''b3cgbm93cmFwfS5kYXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlkLXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgt''@;'; put 'put ''Zmxvdzpyb3cgbm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtYWN0aW9uLWJhcn4uZGF0YWdyaWQtc3Bpbm5lcntoZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSk7dG9wOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlk''@;'; put 'put ''LXJvd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLWJvdHRvbS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7ei1pbmRleDo1MDJ9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdy''@;'; put 'put ''aWQtcm93OmhvdmVyLC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpyb3d9LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEg''@;'; put 'put ''MSBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2ZsZXg6MSAxIGF1dG87dmVydGljYWwtYWxpZ246dG9wO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmlu''@;'; put 'put ''Zy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLXN0cmluZy1maWx0ZXIsLmRhdGFn''@;'; put 'put ''cmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLW51bWVyaWMtZmlsdGVye2Rpc3BsYXk6ZmxleDtvcmRlcjo5OTttYXJnaW4tbGVmdDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXIt''@;'; put 'put ''aW5wdXR7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''biAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6''@;'; put 'put ''bm9uZTtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21pbi1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tn''@;'; put 'put ''cm91bmQtc2l6ZTpjb250YWlufWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNkcy1pY29uLC5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9n''@;'; put 'put ''Z2xlOmhvdmVyIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNsci1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0''@;'; put 'put ''YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAg''@;'; put 'put ''MCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpu''@;'; put 'put ''b25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250''@;'; put 'put ''LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTpmbGV4fWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7Y3Vyc29yOnBvaW50ZXJ9''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5idG57aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLXRpdGxlIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDpjYWxjKC0xKjEwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRp''@;'; put 'put ''dGxlOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''Y29sb3IpO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdy''@;'; put 'put ''aWQtY29sdW1uLXRpdGxlIC5zb3J0LWljb246aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29uOmFjdGl2''@;'; put 'put ''ZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjAgMCBhdXRvO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3JkZXI6MTAwO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7Y29udGVudDoiIjtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3ItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aCk7cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5j''@;'; put 'put ''ZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkp''@;'; put 'put ''O3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7Y3Vyc29yOmNvbC1yZXNpemU7aGVpZ2h0OmNhbGMoMTAwJSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgLSB2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0xMDApKTt6LWluZGV4OjUwMX1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLWhhbmRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2Vye3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2Rpc3BsYXk6bm9uZTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTEpO2hlaWdodDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGUoMCk7Y3Vyc29yOmNvbC1yZXNpemV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBl''@;'; put 'put ''YXNlLW91dH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIGRvdHRlZCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVz''@;'; put 'put ''LWRhbmdlci1kYXJrKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3R7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0''@;'; put 'put ''YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNv''@;'; put 'put ''bHVtbi5kYXRhZ3JpZC1zZWxlY3QsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1yb3ctYWN0aW9uc3ttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZp''@;'; put 'put ''eGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpO2Jv''@;'; put 'put ''cmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZmxleDowIDAgdmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVt''@;'; put 'put ''bi1zaXplKTttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtcm93LWFjdGlvbnN7YmFja2dyb3Vu''@;'; put 'put ''ZDowIDB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4''@;'; put 'put ''dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0x''@;'; put 'put ''KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9u''@;'; put 'put ''ZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAu''@;'; put 'put ''ZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24t''@;'; put 'put ''dG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQt''@;'; put 'put ''YWN0aW9uLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuY2xyLXRvZ2dsZS13cmFwcGVye21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTYpKTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0''@;'; put 'put ''e3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpiZWZvcmUs''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUg''@;'; put 'put ''LmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1l''@;'; put 'put ''eHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZXhwYW5kYWJsZS1j''@;'; put 'put ''YXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXJ7ZmxleDox''@;'; put 'put ''IDEgYXV0bztkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0xMDApfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcik7ZGlzcGxheTpub25lO3dpZHRoOjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRl''@;'; put 'put ''ci5kYXRhZ3JpZC1lbXB0eXtib3JkZXItdG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtOSk7Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWxp''@;'; put 'put ''bmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQt''@;'; put 'put ''cGxhY2Vob2xkZXItaW1hZ2V7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjti''@;'; put 'put ''YWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcyJTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3Zn''@;'; put 'put ''JTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAl''@;'; put 'put ''MjIlMjBjeSUzRCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0''@;'; put 'put ''cyUzRCUyMnVzZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIzMC45MDI1ODA4JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUy''@;'; put 'put ''MiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNF''@;'; put 'put ''JTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''M0NnJTIwaWQlM0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0xMCUyMiUyMHN0cm9rZSUzRCUyMiUyM0MxREZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0''@;'; put 'put ''aCUzRCUyMjIuOCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4bGluayUzQWhyZWYlM0QlMjIlMjNwYXRoLTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIwTDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYw''@;'; put 'put ''NDI1JTIwQzUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4yOTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBa''@;'; put 'put ''JTIyJTIwaWQlM0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEy''@;'; put 'put ''LjE2MDUzNDglMjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIu''@;'; put 'put ''OTMxNzk1NCUyMEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42JTJDMzQuODk5MjM2NSUyMEw1My45NzM0OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkz''@;'; put 'put ''NjMwOSUyQzEyLjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2MzcyMTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIwTDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5''@;'; put 'put ''JTIwTDUuMDkxNzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUy''@;'; put 'put ''RmVsbGlwc2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMuMzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1''@;'; put 'put ''MC4yNzc3NjExJTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUyQzEyLjYzNTU4ODYlMjA1NC42JTJDMTIuMTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1''@;'; put 'put ''NC4xOTM4NTY1JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUyQzguOTI4NDEwMzQlMjA0OC4wMzEyMzcxJTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIx''@;'; put 'put ''NzclMkM2LjQlMjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMz''@;'; put 'put ''NTgxMDclMjBDNS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUyMDUuODA2MTQzNSUyQzEyLjYzNTU4ODYlMjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3''@;'; put 'put ''NyUyMDkuNzIyMjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMxNy4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41''@;'; put 'put ''NzEzMDglMjA0JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4zNTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgwNDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQw''@;'; put 'put ''MzUlMkMxOC41NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4y''@;'; put 'put ''NjA4NjQzJTJDNy4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYuMzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMx''@;'; put 'put ''MS44Mjg0MzAyJTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUyMDExLjExNDU2MyUyQzguNTczMjQyMTklMjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4''@;'; put 'put ''JTIwMTguMjYwODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0Ml''@;'; put 'put ''MkZzdmclM0UiKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1z''@;'; put 'put ''Y3JvbGxhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxp''@;'; put 'put ''bmctY2VsbHMgLmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25zKTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRh''@;'; put 'put ''dGFncmlkLWNlbGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbntkaXNwbGF5Om5vbmV9LmRhdGFn''@;'; put 'put ''cmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5kYXRhZ3JpZC1mb290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dy''@;'; put 'put ''YXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2xyLWRhdGFncmlkLWZvb3Rlci1w''@;'; put 'put ''YWdpbmF0aW9uLWdhcCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXple2Rpc3BsYXk6YmxvY2s7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemUgLmNsci1wYWdlLXNpemUtc2Vs''@;'; put 'put ''ZWN0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9ue3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQt''@;'; put 'put ''Zm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue21pbi13aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1wYWRkaW5nKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtY29sb3IpO21hcmdpbjowfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29s''@;'; put 'put ''dW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRp''@;'; put 'put ''c2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmFj''@;'; put 'put ''dGl2ZSwuZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpkaXNhYmxlZDphY3RpdmV7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4t''@;'; put 'put ''dG9nZ2xlLS1hY3Rpb246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjphY3RpdmUsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4t''@;'; put 'put ''dG9nZ2xlLS1hY3Rpb246Zm9jdXN7Ym94LXNoYWRvdzpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZl''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfS5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y3Vyc29yOmRlZmF1bHQ7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1mb3JtLWNvbnRy''@;'; put 'put ''b2wtZGlzYWJsZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5kYXRhZ3JpZC1z''@;'; put 'put ''cGlubmVye3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYp''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQpO3otaW5kZXg6NTkwfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7cGFkZGluZzp2YXIoLS1jbHIt''@;'; put 'put ''dGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieSkp''@;'; put 'put ''KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3R7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29t''@;'; put 'put ''cGFjdCAuZGF0YWdyaWQtY2VsbCBjbHItaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKTt0cmFuc2Zvcm06dHJh''@;'; put 'put ''bnNsYXRlWShjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCAuYmFkZ2V7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuc3Bpbm5lcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Myl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25l''@;'; put 'put ''O21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xy''@;'; put 'put ''LWRhdGFncmlkLWNvbXBhY3Qtb3V0bGluZS1vZmZzZXQpfWJ1dHRvbi5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhw''@;'; put 'put ''YW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue21hcmdpbjowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNlbGx7cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNh''@;'; put 'put ''cmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWNsci10YWJsZS1jb21wYWN0LXZlcnRpY2FsLXBhZGRpbmcpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cGFkZGluZy1ib3R0b206dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZyl9''@;'; put 'put ''LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNkcy1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1leGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3No''@;'; put 'put ''YXBlPWNoZWNrLWNpcmNsZV0sW3NoYXBlPWluZm9dLFtzaGFwZT1lcnJvcl0pLC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlciBjbHItaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFt''@;'; put 'put ''YXRpb24tdHJpYW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtzaGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3Jp''@;'; put 'put ''ZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXJ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLXZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2ds''@;'; put 'put ''ZS0tYWN0aW9ue291dGxpbmUtb2Zmc2V0OnZhcigtLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxpbmUtb2Zmc2V0KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2Jv''@;'; put 'put ''eC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJn''@;'; put 'put ''aW46YXV0byAwfS5wYWdpbmF0aW9uLWxpc3R7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2ZvbnQtc2l6''@;'; put 'put ''ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2Fw''@;'; put 'put ''dGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kOjAgMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudDpmb2N1cywucGFnaW5hdGlvbi1saXN0''@;'; put 'put ''IC5wYWdpbmF0aW9uLWN1cnJlbnQuY2xyLWZvY3Vze2JhY2tncm91bmQ6MCAwO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcil9LnBhZ2luYXRp''@;'; put 'put ''b24tbGlzdD4qe3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXMsLnBhZ2luYXRpb24t''@;'; put 'put ''bGlzdCAucGFnaW5hdGlvbi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlz''@;'; put 'put ''dCAucGFnaW5hdGlvbi1sYXN0OmRpc2FibGVkLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXM6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0OmRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpO2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZDtvcGFjaXR5OjF9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbGFz''@;'; put 'put ''dCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1v''@;'; put 'put ''LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1idG4tY29sb3IpO2N1cnNvcjpwb2ludGVyfWJ1dHRvbi5wYWdp''@;'; put 'put ''bmF0aW9uLWxpc3QgYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm97Ym9yZGVyOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7d2lkdGg6MDtmbGV4OjAgMCBhdXRvIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7ZGlzcGxheTpibG9j''@;'; put 'put ''ayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfS5k''@;'; put 'put ''YXRhZ3JpZC1pbm5lci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0bzttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQt''@;'; put 'put ''b3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcj4uY2RrLXZp''@;'; put 'put ''cnR1YWwtc2Nyb2xsYWJsZSBkaXYuZGF0YWdyaWQtdGFibGV7b3ZlcmZsb3c6dW5zZXR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyIGNsci1kZy1jZWxse3dpZHRoOjEwMCUhaW1wb3J0YW50fS5kYXRhZ3JpZC1k''@;'; put 'put ''ZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY29sdW1uOmZpcnN0LWNoaWxke3dpZHRoOmF1dG8haW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDti''@;'; put 'put ''b3JkZXItcmlnaHQ6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7d2lkdGg6MzQlfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyLC5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcm93e2Jv''@;'; put 'put ''cmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1vcGVuIC5wYWdpbmF0aW9ue3dpZHRoOjEwMCV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3R7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1s''@;'; put 'put ''aXN0e21hcmdpbi1yaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW57cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7dG9wOmNhbGMoMTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjphZnRlcntj''@;'; put 'put ''b250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7dG9wOmNhbGMo''@;'; put 'put ''MTEqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LmRhdGFncmlkLWRldGFpbC1wYW5le21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1i''@;'; put 'put ''b3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYmctY29sb3IpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2ZsZXgtZ3JvdzoyO3dpZHRoOjY2JX0uZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmF1dG87aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1w''@;'; put 'put ''YWRkaW5nKX0uZGF0YWdyaWQtZGV0YWlsLWJvZHl7ZmxleDoxIDEgYXV0bztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0''@;'; put 'put ''bztmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24t''@;'; put 'put ''bGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwt''@;'; put 'put ''aGVhZGVyLXRpdGxle2ZsZXg6MSAxIGF1dG87Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZXtmbGV4OjEgMSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEx''@;'; put 'put ''KTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5re21pbi13aWR0aDphdXRvO21hcmdpbjowO3BhZGRpbmctcmlnaHQ6MH0uZGF0YWdyaWQtZGV0YWlsLWhl''@;'; put 'put ''YWRlciAuZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGluayBjZHMtaWNvbntoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7''@;'; put 'put ''bWluLWhlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yKX0uZGF0YWdyaWQtZGV0''@;'; put 'put ''YWlsLWNhcmV0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQt''@;'; put 'put ''YnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAw''@;'; put 'put ''O2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9YnV0dG9uLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQt''@;'; put 'put ''ZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmRpc2FibGVkIGNkcy1pY29uLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmRhdGFncmlkLWRldGFpbC1j''@;'; put 'put ''YXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVuIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbntib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRl''@;'; put 'put ''dGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFy''@;'; put 'put ''KC0tY2xyLXRhYmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcnt3aWR0aDowO21p''@;'; put 'put ''bi13aWR0aDp1bnNldH0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7d2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsuZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRh''@;'; put 'put ''dGFncmlkLWlubmVyLXdyYXBwZXJ7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZXtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS04KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1w''@;'; put 'put ''b3BvdmVyLWJvcmRlci1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7d2lkdGg6Y2FsYygyNTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoxMDUw''@;'; put 'put ''fS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5j''@;'; put 'put ''b2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgxLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgyLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgzLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg0LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg1LC5j''@;'; put 'put ''b2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg2e2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9u''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW46MH0uY29sdW1uLXN3''@;'; put 'put ''aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRj''@;'; put 'put ''aC1oZWFkZXItZm9udC1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVye2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWhvdmVyLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRl''@;'; put 'put ''ciBidXR0b24gY2RzLWljb246YWN0aXZle2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWFjdGl2ZS1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50e21heC1oZWlnaHQ6Y2FsYygzMDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlKSkpO292ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudCBsaXtsaW5lLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpO3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5idG57bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24tcmlnaHR7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZmlsdGVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1i''@;'; put 'put ''b3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJv''@;'; put 'put ''eC1zaGFkb3cpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAu''@;'; put 'put ''ZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmU7Zm9udC1zaXplOnVuc2V0fS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1hcHBseXttYXJnaW4tYm90dG9tOjB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9y''@;'; put 'put ''bXtkaXNwbGF5OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSBpbnB1dC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dHt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KX0uZGF0''@;'; put 'put ''YWdyaWQtZmlsdGVyIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNv''@;'; put 'put ''bG9yKTtib3gtc2hhZG93OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93KTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2ZvbnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWFjdGlvbi1v''@;'; put 'put ''dmVyZmxvdzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSk7Ym9yZGVyLXRvcDp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtYWN0aW9uLWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXpl''@;'; put 'put ''KTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAw''@;'; put 'put ''JTtoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXRvcDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDpj''@;'; put 'put ''YWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0''@;'; put 'put ''aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0''@;'; put 'put ''aW9uLWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zl''@;'; put 'put ''cntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06aG92''@;'; put 'put ''ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0''@;'; put 'put ''aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlz''@;'; put 'put ''YWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2Vs''@;'; put 'put ''ZWN0Om5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9u''@;'; put 'put ''LWl0ZW0uZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGV7ZGlzcGxheTpibG9ja30uZGF0''@;'; put 'put ''YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LW1hc3RlciwuZGF0''@;'; put 'put ''YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LWNsaWNrYWJsZXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxle2Rpc3BsYXk6dGFibGU7dGFibGUtbGF5b3V0''@;'; put 'put ''OmF1dG99LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXJ7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1v''@;'; put 'put ''ZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0''@;'; put 'put ''ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0''@;'; put 'put ''aCk7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZTp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNw''@;'; put 'put ''YWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3Vs''@;'; put 'put ''YXRpb24tdGFibGUgLmRhdGFncmlkLXJvd3tkaXNwbGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvdyBjbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpub25lfS5k''@;'; put 'put ''YXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7Zm9udC1zaXplOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZC1o''@;'; put 'put ''b3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUg''@;'; put 'put ''LmRhdGFncmlkLWZpeGVkLWNvbHVtbntkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBjbHItc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6MH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6LTIwMCV9fS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJz''@;'; put 'put ''IGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwt''@;'; put 'put ''Y2hhbmdlOm9wYWNpdHksdHJhbnNmb3JtfS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0uc2tlbGV0b24tbG9hZGluZzpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNrZWxldG9uLWxvYWRpbmctZ3JhZGllbnQpO2FuaW1hdGlvbjp2YXIoLS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1za2VsZXRvbi1kdXJhdGlvbikgY2xyLXNr''@;'; put 'put ''ZWxldG9uLWxvYWRpbmcgdmFyKC0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWluLW91dCkgaW5maW5pdGU7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0t''@;'; put 'put ''Y2xyLXdpemFyZC1tYWluLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQpOy0tY2xyLXdpemFyZC1tYWluLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRy''@;'; put 'put ''YWwtdGludCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItd2l6YXJkLXN0ZXBu''@;'; put 'put ''YXYtc2VsZWN0ZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1z''@;'; put 'put ''ZWxlY3RlZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYmdjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYWN0aXZlLWJnY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWhvdmVyLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1hY3RpdmUtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWVy''@;'; put 'put ''cm9yLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstY29tcGxldGUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWFjdGl2''@;'; put 'put ''ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLXBhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHIt''@;'; put 'put ''d2l6YXJkLXN0ZXBuYXYtaXRlbS1lcnJvci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC10aXRsZS10ZXh0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQ6YXV0bzst''@;'; put 'put ''LWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJlZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTst''@;'; put 'put ''LWNsci13aXphcmQtYm94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXdpemFyZC1jb250ZW50LWJhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LmNsci13aXphcmQgLm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtYm94LXNoYWRvdyk7''@;'; put 'put ''aGVpZ2h0OjUwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzKSAwO2JveC1zaGFkb3c6bm9uZTtwYWRkaW5nOjA7Zmxl''@;'; put 'put ''eDoyIDIgYXV0bzt3aWR0aDo2NiU7aGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2ZsZXg6MCAwIGF1dG87d2lk''@;'; put 'put ''dGg6MTAwJTtwYWRkaW5nOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSAwfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpyb3c7d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtYm9keXtmbGV4OjEgMSBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yKTt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAubW9k''@;'; put 'put ''YWwtZm9vdGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtmbGV4OjAgMCB2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0KTttYXgtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7cGFkZGluZzowIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG57bWFyZ2luOjA7bWF4LXdpZHRoOjEwMCU7ZGlz''@;'; put 'put ''cGxheTpibG9ja30uY2xyLXdpemFyZCAubW9kYWwtdGl0bGUtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMSBhdXRvO3dpZHRoOjEwMCU7b3V0bGluZTowfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWhlYWRl''@;'; put 'put ''ci1hY3Rpb25zLXdyYXBwZXJ7ZmxleDoxIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci13aXphcmQgLmNs''@;'; put 'put ''ci13aXphcmQtaGVhZGVyLWFjdGlvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXh9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''O2JvcmRlcjowO3BhZGRpbmc6MDttYXJnaW46MDttaW4td2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtsaW5lLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcik7dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gYXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHIt''@;'; put 'put ''d2l6YXJkLWhlYWRlci1hY3Rpb246aG92ZXIsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1c3tjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3ItLWhvdmVy''@;'; put 'put ''ZWQpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1''@;'; put 'put ''bHQtc3BhY2UpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2hlaWdodDoxMDAlO3dpZHRoOjM0JTttYXgtd2lkdGg6MzQlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVuO292ZXJm''@;'; put 'put ''bG93LXk6YXV0bztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xvcik7Ym9yZGVyLXJhZGl1czp2''@;'; put 'put ''YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZzowIDAgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1''@;'; put 'put ''bHQtc3BhY2UpO2Rpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNl''@;'; put 'put ''dDphO3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbXtkaXNwbGF5OmJsb2NrO2JvcmRlci1sZWZ0OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1i''@;'; put 'put ''b3JkZXItc2l6ZSkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yKTttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSBidXR0b24uY2xyLXdpemFyZC1zdGVwbmF2LWxpbmt7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1p''@;'; put 'put ''dGVtLmRpc2FibGVke2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LS1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWJnY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ib3JkZXItY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmU6aG92ZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtaG92ZXItYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYWN0''@;'; put 'put ''aXZlLWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVw''@;'; put 'put ''bmF2LWxpbmstaG92ZXItYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6YWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItd2l6YXJkLXN0ZXBuYXYtbGluay1hY3RpdmUtYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstdGl0bGV7d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOm5vcm1hbH0uY2xyLXdpemFyZCAuY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxldGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgZWFzZS1pbn0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0''@;'; put 'put ''ZW0uY29tcGxldGUgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24gY2RzLWljb257LS1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1jb21wbGV0ZS1pY29uLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZXJyb3J7Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWJvcmRlci1jb2xvcik7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmVycm9yIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29uIGNkcy1p''@;'; put 'put ''Y29uey0tY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstZXJyb3ItaWNvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYt''@;'; put 'put ''bGlua3t3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtwbGFjZS1jb250ZW50Om5vcm1hbDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmxlZnQ7dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7aGVp''@;'; put 'put ''Z2h0OmF1dG87bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTttYXgtd2lkdGg6aW5oZXJpdDtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2Vp''@;'; put 'put ''Z2h0LW1lZGl1bSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1s''@;'; put 'put ''aW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29ue2Rpc3BsYXk6ZmxleH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtbGluay1wYWdlLW51bWJlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle21hcmdpbi10b3A6MDtmbGV4OjAgMCBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCk7cGFkZGluZzp2YXIoLS1jbHIt''@;'; put 'put ''d2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93''@;'; put 'put ''O2ZsZXg6MSAxIDEwMCU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtbmF2e2hlaWdodDphdXRvfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25ze3RleHQtYWxpZ246cmln''@;'; put 'put ''aHQ7bWFyZ2luOjB9LmNsci13aXphcmQgLmNsci13aXphcmQtZm9vdGVyLWJ1dHRvbnMtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5j''@;'; put 'put ''bHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi13cmFwcGVye2ZsZXg6MCAxIGF1dG99LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLXdyYXBwZXJbYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi5idG4tbGlua3twYWRkaW5nOjB9LmNs''@;'; put 'put ''ci13aXphcmQgLmNsci13aXphcmQtY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXBhZ2U6bm90KFthcmlhLWhpZGRlbj10cnVlXSl7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZofS5jbHItd2l6YXJkIC5tb2Rh''@;'; put 'put ''bC1ib2R5LXdyYXBwZXJ7bWF4LWhlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6''@;'; put 'put ''Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbWQgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5j''@;'; put 'put ''bHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwt''@;'; put 'put ''Y29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbGcgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAu''@;'; put 'put ''Y2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hl''@;'; put 'put ''aWdodDo3NXZoO21heC1oZWlnaHQ6bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdp''@;'; put 'put ''ZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpub3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXtsZWZ0OmNhbGMoNTAlICsgY2FsYygxMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAlfS5jbHItd2l6YXJkLXBhZ2U+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZD46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZHtw''@;'; put 'put ''YWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZD4uZm9ybS1ibG9jazpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtLWlubGluZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmNsci13aXphcmQtLWlubGluZT5jbHItbW9kYWw+Lm1vZGFs''@;'; put 'put ''OmZvY3Vze291dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLWNvbG9yOnRyYW5zcGFyZW50fS5jbHItd2l6YXJkLS1pbmxpbmUgY2xyLW1vZGFse2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbHtwYWRkaW5nOjA7cG9zaXRpb246''@;'; put 'put ''c3RhdGljO2hlaWdodDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAuY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLmNvbnRlbnQtY29udGFpbmVyIC5uYXYtcGFuZWx7aGVpZ2h0Ojk5JTt3aWR0''@;'; put 'put ''aDo5OSV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLm1vZGFsLWNvbnRlbnR7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDoxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ei1pbmRleDphdXRvfS5jbHItd2l6''@;'; put 'put ''YXJkLS1pbmxpbmUgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUg''@;'; put 'put ''Lm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1j''@;'; put 'put ''b250ZW50LXdyYXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5lLmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDph''@;'; put 'put ''dXRvO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdpemFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAl''@;'; put 'put ''fS5jbHItd2l6YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hhZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1uby10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQt''@;'; put 'put ''LW5vLXRpdGxlIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLndpemFyZC1pbi1wYWdlLndpemFyZC1pbi1wYWdlLS1maWxsLWNvbnRlbnQtYXJl''@;'; put 'put ''YXtkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKDEwMCUgKyAyLjRyZW0pO21hcmdpbjotMS4ycmVtfS53aXphcmQtaW4tcGFnZSAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9ucy13cmFwcGVye2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW57LmNsci13aXphcmQtcGFn''@;'; put 'put ''ZVthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6Y2FsYygtMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fTpyb290IFtjZHMt''@;'; put 'put ''dGhlbWVdey0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItc2lnbnBvc3QtYWN0aW9uLWhv''@;'; put 'put ''dmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXNpZ25wb3N0LWJvcmRlci1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkg''@;'; put 'put ''c29saWQgdmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1''@;'; put 'put ''ZG8tYm9yZGVyOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXNpemUpIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLXBzdWVkby1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHNldWRvLWJvcmRlcik7''@;'; put 'put ''LS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemU6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSl9LnNpZ25wb3N0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdDpob3ZlcntjdXJzb3I6cG9pbnRlcn0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKXttYXJn''@;'; put 'put ''aW46MDtwYWRkaW5nOjA7Ym9yZGVyLXdpZHRoOjA7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2xyLWljb257''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbjpob3Zlciwuc2lnbnBv''@;'; put 'put ''c3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKTpob3Zlcntjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpu''@;'; put 'put ''b3QoLmNsb3NlKS5hY3RpdmUgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZlIGNsci1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWFjdGl2''@;'; put 'put ''ZS1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1jb250ZW50LWhlYWRlciBidXR0b257bGluZS1oZWlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QtdHJpZ2dlcnttYXJnaW46MDtkaXNwbGF5OmlubGluZS1mbGV4fS5zaWdu''@;'; put 'put ''cG9zdC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS0xMik7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwfS5zaWducG9zdC1jb250ZW50OmhvdmVye2N1cnNvcjpkZWZhdWx0fS5zaWducG9z''@;'; put 'put ''dC1jb250ZW50IC5wb3BvdmVyLXBvaW50ZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVudCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtjb250ZW50OiIiO2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LnNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIp''@;'; put 'put ''O2JvdHRvbTpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNv''@;'; put 'put ''bnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7Ym90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnNpZ25wb3N0LXdy''@;'; put 'put ''YXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRv''@;'; put 'put ''cC1yaWdodCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50''@;'; put 'put ''ZXI6YmVmb3Jle2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5i''@;'; put 'put ''b3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXIt''@;'; put 'put ''c2l6ZSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6''@;'; put 'put ''YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0u''@;'; put 'put ''c2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90''@;'; put 'put ''dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBv''@;'; put 'put ''aW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2lu''@;'; put 'put ''dGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVz''@;'; put 'put ''OjB9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1w''@;'; put 'put ''b2ludGVyLC5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFy''@;'; put 'put ''KC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20g''@;'; put 'put ''LnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcil9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVye2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9p''@;'; put 'put ''bnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0yKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOjUwJX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2lu''@;'; put 'put ''dGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0yKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50''@;'; put 'put ''ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUt''@;'; put 'put ''Ym9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9z''@;'; put 'put ''dC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBv''@;'; put 'put ''c3QtYm9yZGVyLXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1w''@;'; put 'put ''b2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFk''@;'; put 'put ''aXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAlfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJl''@;'; put 'put ''Zm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5y''@;'; put 'put ''aWdodC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1''@;'; put 'put ''c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDt0b3A6MDtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKX0uc2lnbnBvc3QtY29udGVudC1oZWFk''@;'; put 'put ''ZXIgLnNpZ25wb3N0LXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1yaWdodDphdXRvfS5zaWducG9zdC13cmFwe2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIGNhbGMoMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1zaWducG9z''@;'; put 'put ''dC1jb250ZW50LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtY29udGVudC1iZy1jb2xvcik7ei1pbmRleDoxMDUwO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7bWF4LWhlaWdodDpjYWxjKDQ1''@;'; put 'put ''MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLWFjY29yZGlvbntkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1wYW5lbHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IpO2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcik7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOjA7''@;'; put 'put ''d2lkdGg6MTAwJTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246bGVmdH0uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9y''@;'; put 'put ''LWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPmRpdj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD4uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVyLC5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRp''@;'; put 'put ''b24taGVhZGVyOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDps''@;'; put 'put ''YXN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpy''@;'; put 'put ''b3cgd3JhcDtmbGV4OjEgMSAwO3dpZHRoOjEwMCU7Ym9yZGVyOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQ6MCAwO3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfUBt''@;'; put 'put ''ZWRpYShtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZmxleC1mbG93OnJvd319LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZCAuY2xy''@;'; put 'put ''LWFjY29yZGlvbi1zdGF0dXMsLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZCAuY2xyLWFjY29yZGlvbi10aXRsZSwuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVkIC5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9ue2NvbG9yOnZhcigtLWNsci1hY2NvcmRp''@;'; put 'put ''b24tcGFuZWwtZGlzYWJsZWQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXN0YXR1c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmNsci1hY2NvcmRpb24tdGl0bGV7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNs''@;'; put 'put ''ci1hY2NvcmRpb24taGVhZGVyLWhhcy1kZXNjcmlwdGlvbiAuY2xyLWFjY29yZGlvbi10aXRsZXttaW4td2lkdGg6dmFyKC0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aCk7bWF4LXdpZHRoOmNhbGMoMjY0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aWR0aDox''@;'; put 'put ''MDAlfS5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDpjYWxjKDY1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9QG1lZGlhKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24tZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6''@;'; put 'put ''Y2FsYyg0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHItYWNjb3JkaW9uLWNvbnRlbnR7YmFja2dyb3VuZDp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0t''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpO2JvcmRlci1ib3R0b206MDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2Rpc3BsYXk6bm9uZX0uY2xyLWFjY29yZGlvbi1jb250ZW50IC5jbHItZm9ybSwuY2xyLWFjY29yZGlvbi1jb250ZW50Lm5n''@;'; put 'put ''LXRyaWdnZXJ7cGFkZGluZzowfUBtZWRpYShtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIGNhbGMoNTQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250''@;'; put 'put ''ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSBjYWxjKDU0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19''@;'; put 'put ''LmNsci1hY2NvcmRpb24tYW5nbGV7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVm''@;'; put 'put ''dC1jdXJyZW50LWluZGljYXRvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiAuY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LWJvcmRlci1sZWZ0LWNvbG9yLWNvbXBsZXRlKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIC5jbHItYWNjb3JkaW9uLXBhbmVsLWVycm9yPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hhZG93Omluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNsci1hY2Nv''@;'; put 'put ''cmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24gLmNsci1hY2NvcmRpb24tY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24t''@;'; put 'put ''aGVhZGVye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVy''@;'; put 'put ''LW9wZW4taG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlv''@;'; put 'put ''bi1oZWFkZXItb3Blbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXIgLmNsci1hY2NvcmRpb24tYW5nbGV7dmlzaWJpbGl0eTp2aXNpYmxlO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2xyLWFjY29yZGlv''@;'; put 'put ''bi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tY29tcGxldGUtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlPi5jbHItYWNjb3JkaW9uLWFuZ2xle3Zpc2li''@;'; put 'put ''aWxpdHk6dmlzaWJsZX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWNvbXBsZXRlKX0uY2xy''@;'; put 'put ''LWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAubmctdHJpZ2dlci5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''IDAgMCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWVycm9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1lcnJvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3IpfS5j''@;'; put 'put ''bHItYWNjb3JkaW9uLXBhbmVsLWVycm9yIC5jbHItYWNjb3JkaW9uLW51bWJlciwuY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAuY2xyLWFjY29yZGlvbi1udW1iZXJ7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7''@;'; put 'put ''cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVy''@;'; put 'put ''LWhlYWRlcil7Ym94LXNoYWRvdzpub25lfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsIC5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlcil7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LWJvcmRlci1yYWRpdXMpfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsIC5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlcikrLmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24+LmNsci1hY2NvcmRp''@;'; put 'put ''b24tY29udGVudHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVy''@;'; put 'put ''LWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCsuY2xyLWFjY29yZGlvbi1wYW5lbD5kaXZbY2xhc3MqPWNsci1hY2NvcmRpb24tcGFuZWwtXT4uY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dW5zZXQ7Ym9yZGVy''@;'; put 'put ''LXRvcC1yaWdodC1yYWRpdXM6dW5zZXR9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWw6bm90KDpsYXN0LWNoaWxkKT5kaXZbY2xhc3MqPWNsci1hY2NvcmRpb24tcGFuZWwtXT4uY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHIt''@;'; put 'put ''c3RlcHBlci1oZWFkZXIpLC5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOm5vdCg6bGFzdC1jaGlsZCk+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXIt''@;'; put 'put ''aGVhZGVyKSsuY2xyLWFjY29yZGlvbi1jb250ZW50LXJlZ2lvbj4uY2xyLWFjY29yZGlvbi1jb250ZW50e2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnVuc2V0O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnVuc2V0fS5jbHItYWNjb3JkaW9uOm5vdCgu''@;'; put 'put ''Y2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMp''@;'; put 'put ''IC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzowfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtZm9udC1zaXplKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZCAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1zdGF0dXN7d2lkdGg6YXV0b30uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1zdGF0dXMgY2RzLWljb24sLmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2Nv''@;'; put 'put ''cmRpb24tc3RhdHVzIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowIWlt''@;'; put 'put ''cG9ydGFudDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowIWltcG9ydGFudDtib3JkZXItYm90dG9tOjAhaW1wb3J0YW50fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xy''@;'; put 'put ''LWFjY29yZGlvbi10ZXh0LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHIt''@;'; put 'put ''YWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWFjY29yZGlvbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtc2VsZWN0ZWQpOy0tY2xyLWFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUw''@;'; put 'put ''KTstLWNsci1hY2NvcmRpb24tY29udGVudC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91''@;'; put 'put ''bmQpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tYWN0aXZlLWJhY2tncm91bmQtY29sb3IpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQt''@;'; put 'put ''YWN0aXZlKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4taG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''c3RhdHVzLWRhbmdlcik7LS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItYWNjb3JkaW9uLWJvcmRl''@;'; put 'put ''ci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWNvbXBsZXRlOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWVycm9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtaW5kaWNhdG9yOmluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC10aW50KTstLWNsci1hY2NvcmRpb24taGVhZGVy''@;'; put 'put ''LWxlZnQtY3VycmVudC1pbmRpY2F0b3I6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItYWNjb3JkaW9uLXN0ZXAtdGl0bGUtbWluLXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTMpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6Y2FsYyg1NiooMXJlbS92YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVh''@;'; put 'put ''ZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1c3ttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO3dpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNs''@;'; put 'put ''ci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtZXJyb3ItaWNvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWNvbXBsZXRlLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOjB9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVzPi5jbHItc3RlcC1lcnJvci1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3IpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtY29tcGxldGUtaWNvbntjb2xvcjp2YXIoLS1jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWNvbXBsZXRlLWNvbG9yKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVye21pbi13aWR0aDp2YXIoLS1jbHItYWNjb3JkaW9uLXN0ZXAtdGl0bGUtbWluLXdpZHRoKTtt''@;'; put 'put ''YXgtd2lkdGg6Y2FsYygyNjQqMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKTt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1i''@;'; put 'put ''b2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS05KX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVyPi5jbHItYWNjb3JkaW9uLXRpdGxle21pbi13aWR0aDppbml0aWFsO21heC13aWR0aDppbml0aWFsO3dpZHRo''@;'; put 'put ''OmluaXRpYWw7bWFyZ2luLWxlZnQ6MH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNj''@;'; put 'put ''b3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1AbWVkaWEobWF4LXdpZHRoOjU3''@;'; put 'put ''NnB4KXsuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1i''@;'; put 'put ''dXR0b24+LmNsci1zdGVwLXN0YXR1c3ttaW4td2lkdGg6aW5pdGlhbDt3aWR0aDppbml0aWFsfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXJ7d2lkdGg6aW5pdGlhbH0uY2xy''@;'; put 'put ''LXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVyPi5jbHItc3RlcC1udW1iZXJ7bWluLXdpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNs''@;'; put 'put ''ci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDowfX0uY2xyLXN0''@;'; put 'put ''ZXBwZXItZm9ybXMgLmNsci1hY2NvcmRpb24tcGFuZWwtaW5hY3RpdmU6bm90KC5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4pPi5jbHItc3RlcHBlci1oZWFkZXIgLmNsci1zdGVwLWFuZ2xle3Zpc2liaWxpdHk6aGlkZGVufUBtZWRpYShtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1m''@;'; put 'put ''b3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7ZGlzcGxheTpub25lfX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwLWJ1dHRvbnttYXJnaW4tdG9wOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9Y2xyLXN0ZXBwZXItcGFuZWwgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdGltZWxpbmUtbGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''NDAwKTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRpbWVsaW5l''@;'; put 'put ''LWluY29tcGxldGUtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0t''@;'; put 'put ''Y2xyLXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdGltZWxpbmV7ZGlzcGxheTpmbGV4O3BhZGRpbmc6dmFyKC0tY2xyLXRpbWVsaW5l''@;'; put 'put ''LXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTttaW4td2lkdGg6Y2FsYygxNzUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTExKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWNpcmNsZV17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUt''@;'; put 'put ''c3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAgY2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdWNjZXNzLXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFw''@;'; put 'put ''ZT1lcnJvci1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtZXJyb3Itc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXJ7bWFyZ2luOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YWZ0ZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YmVmb3Jle2hlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5j''@;'; put 'put ''bHItdGltZWxpbmUtc3RlcC1ib2R5OmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMTEpICsgdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpLGNhbGMoLS41Kih2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpKSl9LmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLWJvdHRvbTp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFj''@;'; put 'put ''aW5nKTtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0p''@;'; put 'put ''O2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZs''@;'; put 'put ''ZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRo''@;'; put 'put ''OmluaXRpYWw7bWluLWhlaWdodDppbml0aWFsfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9''@;'; put 'put ''c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZG90LWNp''@;'; put 'put ''cmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9yOmluaGVyaXR9LmNsci10aW1lbGluZS1zdGVwLXRpdGxle21hcmdpbjp2''@;'; put 'put ''YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0u''@;'; put 'put ''Y2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb257Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci10aW1l''@;'; put 'put ''bGluZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRp''@;'; put 'put ''bWVsaW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1l''@;'; put 'put ''bGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGluZS1zdGVwLWJvZHk6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLS41Kih2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpIC0gdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpLGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWJvcmRlci13aWR0aC0yMDApKSl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2lkdGg6Y2FsYyg2MCooMXJlbS92YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOmNhbGMoNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwIDB9''@;'; put 'put ''LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6Y2FsYygxNzgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNs''@;'; put 'put ''ci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItYnJlYWRjcnVtYi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVt''@;'; put 'put ''czpjZW50ZXJ9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVt''@;'; put 'put ''Om5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXJ7Y29udGVudDoiLyI7bWFyZ2luOjAgdmFyKC0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZSk7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbTps''@;'; put 'put ''YXN0LWNoaWxke2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWV4cGFuZHttYXJnaW46MDtwYWRkaW5nOjA7Z2FwOjA7bWluLXdpZHRoOmZpdC1jb250ZW50fWNsci1tb2RhbHtkaXNwbGF5Om5v''@;'; put 'put ''bmV9Y2xyLW1vZGFsLm9wZW57ZGlzcGxheTppbmxpbmV9Y2xyLWV4cGFuZGFibGUtYW5pbWF0aW9ue2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLWJsb2Nre2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLWhlYWRlcntkaXNwbGF5OmJsb2NrfWNsci1zdGFjay12aWV3e2Rpc3BsYXk6YmxvY2t9OnJv''@;'; put 'put ''b3QgW2Nkcy10aGVtZV17LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHk6dmFyKC0tY2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHkpOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1jb250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZDpoc2xhKDAsIDAlLCAxMDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLXNrZWxldG9uLWR1cmF0aW9uOjRzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWluLW91dDpjdWJpYy1iZXppZXIoLjQyLCAuMDEsIC41OCwgMSk7LS1jZHMtYWxpYXMtb2JqZWN0LXNrZWxldG9uLWxvYWRp''@;'; put 'put ''bmctZ3JhZGllbnQ6bGluZWFyLWdyYWRpZW50KCA5MGRlZywgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKSAwJSwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKSAzNSUsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTMwMCkgNjUlLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpIDEwMCUgKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZTpIaWdobGlnaHQgYXV0byAycHg7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vs''@;'; put 'put ''ZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nl''@;'; put 'put ''c3MtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1jbGljayk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItY2xpY2spOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LW5ldXRyYWwtY2xpY2spOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtY2xpY2spOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFj''@;'; put 'put ''a2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Ut''@;'; put 'put ''dGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCl9OnJvb3QgW2Nkcy10aGVtZX49ZGFya117''@;'; put 'put ''LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQt''@;'; put 'put ''YWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''c2tlbGV0b24tbG9hZGluZy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoIDkwZGVnLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpIDAlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApIDM1JSwgdmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tNDAwKSA2NSUsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMTAwJSApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25z''@;'; put 'put ''dHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3Rl''@;'; put 'put ''ZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2UtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXNoYWRlOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCl9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L01ldHJvcG9saXMtMjAwLjA2MDkzMzdhNzI2MzIzZTAtd29mZikg''@;'; put 'put ''Zm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2Vi''@;'; put 'put ''OS9NZXRyb3BvbGlzLTQwMC4wNTQ0NjY3MGQyN2Y3NjY2LXdvZmYpIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXM7c3JjOnVybCgvU0FTU3RvcmVkUHJvY2Vz''@;'; put 'put ''cy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvTWV0cm9wb2xpcy01MDAuNGVmZDU4MGE0M2I0ZTExNi13b2ZmKSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXB9QGZvbnQtZmFjZXtmb250LWZh''@;'; put 'put ''bWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L01ldHJvcG9saXMtNjAwLmIyODAxYTM4YTc0ZWM2YzEtd29mZikgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc3R5bGU6bm9y''@;'; put 'put ''bWFsO2ZvbnQtZGlzcGxheTpzd2FwfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0eS1kaXNjO3NyYzp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L3RleHQtc2VjdXJpdHktZGlzYy5mNzU4MTMwYmMwZmZjMTEx''@;'; put 'put ''LXdvZmYpIGZvcm1hdCgid29mZiIpfWFwcC1lZGl0b3IgLmNhcmR7bWFyZ2luLXRvcDowO2JvcmRlcjowfWFwcC1lZGl0b3IgLmJ1dHRvbkJhcntwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdG9yIC50ZXN0UmVke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjAw''@;'; put 'put ''YyFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWFwcC1lZGl0b3IgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5''@;'; put 'put ''bGUsYXBwLWVkaXRvciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fWFwcC1lZGl0b3IgLnN1Ym1pdC1yZWFzb257bWlu''@;'; put 'put ''LWhlaWdodDoxMjBweDttYXgtaGVpZ2h0OjEyMHB4O2hlaWdodDoxMjBweH1hcHAtZWRpdG9yIC5pbmZvQmFye21hcmdpbi10b3A6MTRweDtiYWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBw''@;'; put 'put ''eDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLWVkaXRvciAuaW5mb0JhciBzcGFue3dpZHRoOjgwJX1hcHAtZWRpdG9yIC5pbmZvQmFyOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9YXBwLWVkaXRvciAu''@;'; put 'put ''aW5mb0Jhcjpob3ZlciBzcGFue3dpZHRoOnVuc2V0fWFwcC1lZGl0b3IgLnBrSGVhZGVye2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZmO21hcmdpbjotMXB4fWFwcC1lZGl0b3IgLmhlYWRlckJhcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwt''@;'; put 'put ''bmF2LWJnLWNvbG9yKX1hcHAtZWRpdG9yIC5lcnJvci1pY29ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfWFwcC1lZGl0b3IgLmJ0bkN0cmx7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtZWRpdG9yIC5jYXJkLWhlYWRlcntib3JkZXItYm90dG9t''@;'; put 'put ''OjFweCBzb2xpZCB0cmFuc3BhcmVudH1hcHAtZWRpdG9yIC5oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59YXBwLWVkaXRvciAubXktZHJvcC16b25le2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNl''@;'; put 'put ''dCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9YXBwLWVkaXRvciAubnYtZmlsZS1vdmVye2JvcmRlcjpzb2xpZCAycHggZ3JlZW59YXBwLWVkaXRvciAuZmlsZS1kcm9wLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7''@;'; put 'put ''YXBwLWVkaXRvciAucHJvZ3Jlc1N0YXRpY3ttYXJnaW4tdG9wOjlweCFpbXBvcnRhbnR9YXBwLWVkaXRvciAucHJvZ3Jlc3MsYXBwLWVkaXRvciAucHJvZ3Jlc3Mtc3RhdGlje3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfX1hcHAtZWRpdG9yIC5ob3RFZGl0b3J7cG9zaXRpb246cmVsYXRpdmV9''@;'; put 'put ''YXBwLWVkaXRvciAuZXhjZWwtcGFyc2luZ3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtZWRpdG9yIC5leGNlbC1wYXJzaW5nIC5kZXRhaWxze21hcmdpbjowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDot''@;'; put 'put ''NDVweH1hcHAtZWRpdG9yIC5lZGl0LXJlY29yZC1zcGlubmVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY5O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3dpZHRoOjEwMCU7ei1pbmRleDo1MDB9''@;'; put 'put ''QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCl7YXBwLWVkaXRvciAucHJvZ3Jlc1N0YXRpY3ttYXJnaW4tdG9wOjMycHghaW1wb3J0YW50fWFwcC1lZGl0b3IgLmNhcmQtYmxvY2ssYXBwLWVkaXRvciAuY2FyZC1mb290ZXJ7cGFkZGluZzoxMHB4IDAgMH19YXBwLWVkaXRvciAu''@;'; put 'put ''Y29udGVudC1hcmVhe3BhZGRpbmc6MCAuOHJlbSAuOHJlbSFpbXBvcnRhbnQ7cGFkZGluZy10b3A6MH1hcHAtZWRpdG9yIC5kcm9wLWFyZWF7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21h''@;'; put 'put ''cmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfWFwcC1lZGl0b3IgLmRyb3AtYXJlYSBzcGFue2ZvbnQtc2l6ZToyMHB4O21hcmdpbi10b3A6MjBweDtwYWRkaW5nOjEwcHg7YmFja2dyb3VuZDojZGJkYmRiO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiMwMDB9YXBw''@;'; put 'put ''LWVkaXRvciAjc3VibWl0QnRuLGFwcC1lZGl0b3IgI2NhbmNlbFN1Ym1pdEJ0bnt3aWR0aDoxNTBweH1hcHAtZWRpdG9yIC52aWV3LXRhYmxle2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudDtjb2xvcjojMWE1N2JiIWltcG9ydGFudH1AbWVkaWEobWF4LXdpZHRoOjk5MnB4KXthcHAtZWRp''@;'; put 'put ''dG9yIC5pY29uLWNvbGxhcHNlIC50ZXh0e2Rpc3BsYXk6bm9uZX19bXktYXBwIGFwcC1yZXF1ZXN0cy1tb2RhbHt6LWluZGV4OjEwMDAwfW15LWFwcCBoZWFkZXIuYXBwLWhlYWRlcntiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNmZmZ9bXktYXBwIC5sb2dvIGltZy53aXRo''@;'; put 'put ''b3V0LXRleHR7d2lkdGg6MzBweH1teS1hcHAgLmxvZ28gaW1nLndpdGgtdGV4dHt3aWR0aDoyMTBweH1teS1hcHAgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcntkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7bWFyZ2luLWxlZnQ6MTBweH1teS1hcHAgLmRl''@;'; put 'put ''bW8tZXhwaXJlZC1ub3RpY2V7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDt6LWluZGV4OjEwNTtiYWNrZ3Jv''@;'; put 'put ''dW5kOiMyMTIxMjE4MH1teS1hcHAgLmRlbW8tZXhwaXJlZC1ub3RpY2UgLmV4cGlyZWQtZGV0YWlsc3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MzBweDt6LWluZGV4OjExMDtiYWNrZ3JvdW5kOiMzMTQzNTF9bXktYXBwIC5kZW1vLWV4cGlyZWQt''@;'; put 'put ''bm90aWNlIC5leHBpcmVkLWRldGFpbHMgLmV4cGlyZWQtbm90aWNle2NvbG9yOiNlMGUwZTA7Zm9udC1zaXplOjE2cHh9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNlIC5leHBpcmVkLWRldGFpbHMgLmV4cGlyZWQtbm90aWNlIC5tYWlsdG97Y29sb3I6IzhkYzUzZX1teS1hcHAgLm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC51cGRhdGUta2V5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgMTBweDtiYWNrZ3JvdW5kOiMwMDAwMDAyNn1teS1hcHAgLmFsZXJ0LWljb24td3JhcHBlcnttYXJnaW4tdG9wOjAhaW1wb3J0YW50fW15LWFwcCAubmF2LXRl''@;'; put 'put ''eHR7bWFyZ2luLXJpZ2h0OjIwcHh9bXktYXBwIC5zaWRlYmFyLXRvZ2dsZXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmctbGVmdDoxMHB4fW15LWFwcCAuc2lkZWJhci10b2dnbGUgY2xyLWljb257Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MzBweDto''@;'; put 'put ''ZWlnaHQ6MzBweH1teS1hcHAgaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAuZHJvcGRvd257cG9zaXRpb246dW5zZXR9bXktYXBwIGhlYWRlciAubmF2LWxpbms6aG92ZXJ7Y29sb3I6I2ZhZmFmYX1teS1hcHAgaGVhZGVyIC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZDojMWQyZjNkfW15LWFw''@;'; put 'put ''cCAubm90ZntiYWNrZ3JvdW5kOiMxNmE1N2E7Y29sb3I6I2ZmZmNmYztmb250LXNpemU6MTJweH1teS1hcHAgLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiM2MTcxN2Q7YmFja2dyb3VuZC1jb2xvcjojNjE3MTdk''@;'; put 'put ''O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9bXktYXBwIC5tYWluLWNvbnRhaW5lcnttaW4taGVpZ2h0OjEwMHZoIWltcG9ydGFudH1teS1hcHAgLmNvbnRlbnQtY29udGFpbmVye3otaW5kZXg6MCFpbXBv''@;'; put 'put ''cnRhbnR9bXktYXBwIC5uYXZCYXJSZXNwe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6IzQ5NWE2Nztjb2xvcjojZmZmfW15LWFwcCAuYXBwLWxvYWRpbmcgLmxvYWRpbmctbG9nb3ttYXgtd2lkdGg6NDAwcHg7d2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVu''@;'; put 'put ''IGFuZCAobWF4LXdpZHRoOjc2OHB4KXtteS1hcHAgLm5hdkJhclJlc3B7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6IzQ5NWE2Nztjb2xvcjojZmZmfW15LWFwcCAubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYg''@;'; put 'put ''Lm5hdi1saW5rLG15LWFwcCAubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLG15LWFwcCAubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3VibmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGlua3twYWRkaW5nOjAgLjVyZW0gMCAxcmVtO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Ym9yZGVyLXJhZGl1czouMTI1cmVtIDAgMCAuMTI1cmVtO2NvbG9yOiM5NWM4''@;'; put 'put ''NGJ9bXktYXBwIC5jYXJkLWJsb2NrLG15LWFwcCAuY2FyZC1mb290ZXJ7cGFkZGluZzoxMHB4IDAgMH1teS1hcHAgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdIC5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LWMwXSAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtYzBde3BhZGRp''@;'; put 'put ''bmc6MHJlbX19Lmh0SW52YWxpZHtiYWNrZ3JvdW5kOiMwMDAhaW1wb3J0YW50fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpe2gye2ZvbnQtc2l6ZTouN3JlbSFpbXBvcnRhbnR9aDN7Zm9udC1zaXplOi43cmVtfX0ubmF2LWxpbmt7cGFkZGluZzowcmVtIDFyZW19Ym9keVtj''@;'; put 'put ''ZHMtdGhlbWU9bGlnaHRdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuYnRuLmJ0bi1wcmltYXJ5e2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4tcHJpbWFyeSAu''@;'; put 'put ''YnRuLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiM1ZTczODI7YmFja2dyb3VuZC1jb2xvcjojNWU3MzgyO2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb24sYm9keVtjZHMtdGhlbWU9ZGFy''@;'; put 'put ''a10gLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNkcy1pY29ue2NvbG9yOiNmZmZ9LmJ0bi1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi5idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi42NX0uYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTtt''@;'; put 'put ''YXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1z''@;'; put 'put ''cGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW19LmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10''@;'; put 'put ''aGVtZT1kYXJrXSAuYnRuLmJ0bi1pY29uLmJ0bi1kaW1tZWR7Y29sb3I6IzcyOTVhZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMz''@;'; put 'put ''MTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAuaW5wdXRzIHRleHRhcmVhe2ZvbnQtc2l6ZToxM3B0O2JvcmRlcjoycHggc29saWQgIzQ4NTk2Nztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTtib3gtc2hhZG93Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MCAwIDAgMTRweDtwYWRkaW5nOjdwdDt3aWR0aDoyOTBweH0uaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0''@;'; put 'put ''O3RvcDo1MHB4O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC53dEJvcmRlcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiM0OTVhNjchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBlKG9kZCk+dGR7ZmlsdGVyOmJyaWdodG5lc3MoLjk3KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciAuaHREaW1tZWR7Y29sb3I6IzM3MzczNyFp''@;'; put 'put ''bXBvcnRhbnQ7ZmlsdGVyOmJyaWdodG5lc3MoMSkhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcygxLjIpfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXI6bm90KC5lbXB0eUNvbHVt''@;'; put 'put ''bnMpfi5oYW5kc29udGFibGUgdGJvZHkgdHIgdGgsYm9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojMmQ0MDQ4O2Jv''@;'; put 'put ''cmRlci1jb2xvcjojNjk3Yzg1fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgdGQsYm9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCxib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLGJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6IzcwOGI5OH0uaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9y''@;'; put 'put ''ZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I2Y1ZjZmZn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBh''@;'; put 'put ''cmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LC5k''@;'; put 'put ''YXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVy''@;'; put 'put ''LXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjFweH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0''@;'; put 'put ''YWdyaWQgLmRhdGFncmlkLWhlYWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDtt''@;'; put 'put ''YXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVtO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7''@;'; put 'put ''d2lkdGg6MTAwJX0udGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5tYWluLWNvbnRh''@;'; put 'put ''aW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9aG9tZS1jb21wb25lbnQgY2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWhvbWUtY29tcG9uZW50IC5jYXJkLWJsb2Nre2hlaWdodDoxMDAlO3BhZGRpbmc6MH1ob21l''@;'; put 'put ''LWNvbXBvbmVudCAubm8tdGFibGUtc2VsZWN0ZWR7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9aG9tZS1jb21wb25lbnQgLnNwaW5uZXItd3JhcHBlci1mdWxscGFnZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAw''@;'; put 'put ''JTtoZWlnaHQ6MTAwJX1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojNmE5MjM1fWFwcC1zaWRlYmFyIC5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2''@;'; put 'put ''e3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5zdW4tZHJvcGRvd257bWluLWhlaWdodDozNnB4fWFw''@;'; put 'put ''cC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmVle2hlaWdodDoxMDAlO292ZXJmbG93LXk6YXV0b31hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LmNsb3NlZHttYXJnaW4tbGVmdDotMjcycHh9YXBwLXNpZGViYXIgY2xyLXZlcnRpY2FsLW5hdiAucmVzaXplLWhhbmRsZXtw''@;'; put 'put ''b3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtjdXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLnJl''@;'; put 'put ''c2l6ZS1oYW5kbGU6aG92ZXJ7b3BhY2l0eTouNX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5yZXNpemUtaGFuZGxlLnJlc2l6aW5ne29wYWNpdHk6MX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LnJlc2l6aW5ne3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLXNpZGVi''@;'; put 'put ''YXIgLm5hdi1kaXZpZGVye2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfWFwcC1zaWRlYmFyIC5wYWdlLXRpdGxle21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfWFwcC1zaWRlYmFyIC56ZXJvLW1hcmdpbnttYXJn''@;'; put 'put ''aW46MCFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLnVzZXItbmF2LWJ0bntwYWRkaW5nOjAgMnB4fWFwcC1zaWRlYmFyICNzaWRlYmFyTmF2e3otaW5kZXg6MjAwfUBtZWRpYShtYXgtd2lkdGg6NzY3cHgpe2FwcC1zaWRlYmFyICNzaWRlYmFyTmF2e3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTow''@;'; put 'put ''O3RvcDowfX1hcHAteGxtYXAgLmNhcmR7bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC14bG1hcCBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLXhsbWFwIC5uby10YWJsZS1zZWxlY3RlZHtwb3NpdGlv''@;'; put 'put ''bjpyZWxhdGl2ZX1hcHAteGxtYXAgLmhlYWRlci1yb3cgLnRpdGxlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC14bG1hcCAuaGVhZGVyLXJvdyAub3B0aW9ucy1jb2x7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAteGxtYXAgLnN3e21h''@;'; put 'put ''cmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX1hcHAteGxtYXAgLnZpZXdlclRpdGxle3RleHQtYWxpZ246Y2VudGVyfWFwcC14bG1hcCAuY2FyZEZsZXh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9YXBwLXhsbWFwIC5jb250ZW50LWFyZWF7ZGlzcGxheTpmbGV4O2ZsZXgt''@;'; put 'put ''ZGlyZWN0aW9uOmNvbHVtbn1hcHAteGxtYXAgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9YXBwLXhsbWFwIC5kcm9wLWFyZWF7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJn''@;'; put 'put ''aW46MXB4O2JvcmRlcjoycHggZGFzaGVkICNmZmY7ei1pbmRleDotMX1hcHAteGxtYXAgLmRyb3AtYXJlYSBzcGFue2ZvbnQtc2l6ZToyMHB4O21hcmdpbi10b3A6MjBweDtjb2xvcjojZmZmfWFwcC1tdWx0aS1kYXRhc2V0IC5uby10YWJsZS1zZWxlY3RlZHtkaXNwbGF5OmZsZXg7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowfWFwcC1t''@;'; put 'put ''dWx0aS1kYXRhc2V0IC5oZWFkZXItcm93e3BhZGRpbmc6MTVweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9YXBwLW11bHRpLWRhdGFzZXQgLmRhdGFzZXQtaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6NTAwcHg7d2lkdGg6MTAwJX1hcHAtbXVsdGktZGF0YXNldCAuc3VibWl0''@;'; put 'put ''LXJlYXNvbnttaW4taGVpZ2h0OjcwcHg7bWF4LWhlaWdodDo3MHB4O2hlaWdodDo3MHB4fWFwcC1tdWx0aS1kYXRhc2V0IC5sb2ctd3JhcHBlcnttYXJnaW46MCAxMHB4O2hlaWdodDphdXRvfWFwcC1tdWx0aS1kYXRhc2V0IC5kYXRhc2V0LXNlbGVjdGlvbi1hY3Rpb25ze2JvcmRlci10b3A6''@;'; put 'put ''MXB4IHNvbGlkICNkM2QzZDN9YXBwLW11bHRpLWRhdGFzZXQgLmxpY2VuY2UtbGltaXQtbm90aWNle2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrKX1hcHAtbXVsdGktZGF0YXNldCAuc3VibWlzc2lvbi1yZXN1bHRze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNk''@;'; put 'put ''M2QzZDN9dGQubm90LW1hdGNoZWR7YmFja2dyb3VuZC1jb2xvcjojZmYwMDAwNTR9YXBwLXN1Ym1pdHRlZCAubm9Cb3JkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fWFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9v''@;'; put 'put ''bHRpcC1jb250ZW50LGFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9YXBwLXN1Ym1pdHRlZCAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVm''@;'; put 'put ''b3JlLGFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX1hcHAtc3VibWl0dGVkIC5uby1zdWJt''@;'; put 'put ''aXR0ZWQtdGFibGVze2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfWFwcC1hcHByb3ZlIC5jb2x1bW4tY2VudGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWFwcHJvdmUgLmRhdGFncmlk''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZXtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fWFwcC1hcHByb3ZlIC5saW5rc3tmb250LXdlaWdodDo3MDA7Y3Vyc29yOnBvaW50ZXJ9YXBwLWFwcHJvdmUgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1j''@;'; put 'put ''b250ZW50LGFwcC1hcHByb3ZlIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdHtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fWFwcC1hcHByb3ZlIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsYXBwLWFw''@;'; put 'put ''cHJvdmUgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX1hcHAtYXBwcm92ZSAubm9Cb3JkZXJ7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fWFwcC1hcHByb3ZlIC5hcHByb3ZhbHMtbGlzdC13cmFwcGVye2hlaWdodDo3MHZoO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWFw''@;'; put 'put ''cHJvdmUgLm5vYXBwcm92YWxzLWluZm8td3JhcHBlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfWFwcC1oaXN0b3J5IC5yZWplY3RlZHtjb2xvcjoj''@;'; put 'put ''OTIyMDFhO2ZvbnQtd2VpZ2h0OjcwMH1hcHAtaGlzdG9yeSAuYWNjZXB0ZWR7Y29sb3I6IzEwNWMyNjtmb250LXdlaWdodDo3MDB9YXBwLWhpc3RvcnkgLmhzQ2VsbHtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmNlbnRlciFpbXBvcnRhbnQ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudDtwYWRkaW5nOjdweH1hcHAtaGlzdG9yeSAuYnRDZWxse2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9YXBwLWhpc3RvcnkgLnZlckNlbnRlcntkaXNwbGF5''@;'; put 'put ''OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstYWxsfWFwcC1oaXN0b3J5IC5sb2FkLW1vcmUgaW5wdXR7d2lkdGg6OTBweH1hcHAtaGlzdG9yeSAjbm9EYXRhQ29udGFpbmVye2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfWFwcC1oaXN0b3J5IC50YWJsZS1saW5r''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6NzAwfWFwcC12aWV3ZXIgLmNhcmR7bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC12aWV3ZXIgY2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFw''@;'; put 'put ''fWFwcC12aWV3ZXIgLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3Bl''@;'; put 'put ''cnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfWFwcC12aWV3ZXIgLmhlYWRlci1yb3cgLnRpdGxlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC12aWV3ZXIgLmhlYWRlci1yb3cgLm9wdGlvbnMtY29se2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC12aWV3ZXIgLnN3e21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX1hcHAtdmlld2VyIC5pbmZvQmFye21hcmdpbi10b3A6MTBweDtiYWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNw''@;'; put 'put ''eDtmb250LXNpemU6MTZweH1hcHAtdmlld2VyIC5maWx0ZXJTaWRle21hcmdpbi10b3A6MjZweDttYXJnaW4tYm90dG9tOjE5cHh9YXBwLXZpZXdlciAub3B0aW9ucy1kcm9wZG93biBjbHItaWNvbnttYXJnaW4tcmlnaHQ6NXB4fWFwcC12aWV3ZXIgLmRyb3Bkb3duLW1lbnV7d2lkdGg6MTgw''@;'; put 'put ''cHg7bWFyZ2luLXRvcDotMThweDtwYWRkaW5nOjB9YXBwLXZpZXdlciAuZHJvcGRvd24tbWVudSAuYnRue3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX1hcHAtdmlld2VyIC5jYXJkRmxleHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAtdmlld2VyIC5ub0Rh''@;'; put 'put ''dGF7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjF9YXBwLXZpZXdlciAuZmlsdGVyQnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9YXBwLXZpZXdlciAuZWRpdEJ0''@;'; put 'put ''bntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9YXBwLXZpZXdlciAuYnRuVmlld3ttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXZpZXdlciAuY29udGVudC1hcmVhe3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59''@;'; put 'put ''YXBwLXZpZXdlciAuZG93bmxvYWQtc2VsZWN0IC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldCFpbXBvcnRhbnR9YXBwLXZpZXdlciAucmVmcmVzaC10YWJsZXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tbGVmdDo1cHh9YXBwLXZpZXdlciAubGliaW5mb3twYWRkaW5nOjEwcHgg''@;'; put 'put ''MjBweDtvdmVyZmxvdzphdXRvfWFwcC12aWV3ZXIgaG90LXRhYmxle2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfWFwcC12aWV3ZXIgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLXZpZXdlciBob3QtdGFi''@;'; put 'put ''bGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLXZpZXdlciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZi''@;'; put 'put ''MDA2ZSFpbXBvcnRhbnR9YXBwLXZpZXdlciAubm8tdGFibGUtc2VsZWN0ZWQtaW5mb3tiYWNrZ3JvdW5kOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXZpZXdlciAud2ViLXF1ZXJ5e21heC1oZWlnaHQ6MzV2aH1hcHAtdmll''@;'; put 'put ''d2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS10ZXh0e21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDoxMDBweDt3aWR0aDoxMDAlIWltcG9ydGFudH1hcHAtdmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS13cmFwcGVyIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAt''@;'; put 'put ''dmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS13cmFwcGVyIGNsci10ZXh0YXJlYS1jb250YWluZXJ7bWFyZ2luOjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXdyYXBwZXIgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbjowIWltcG9ydGFudH1hcHAt''@;'; put 'put ''dmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlcnttYXJnaW4tbGVmdDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGZvcm17cGFkZGluZy1sZWZ0OjB9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257bWFyZ2luLXRvcDo0cHh9YXBwLXZpZXdlciAu''@;'; put 'put ''dGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcnttYXJnaW4tbGVmdDowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpe2FwcC12''@;'; put 'put ''aWV3ZXIgLmZpbHRlckJ0bntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAtdmlld2VyIC5lZGl0QnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEobWluLXdpZHRoOjU3NnB4KXthcHAtdmlld2VyIC5yb3d7bWFyZ2luLXJpZ2h0OjBy''@;'; put 'put ''ZW07bWFyZ2luLWxlZnQ6MHJlbX19YXBwLWdyb3VwIC5zaWRlYmFyLWhlaWdodHtoZWlnaHQ6MTAwJX1hcHAtZ3JvdXAgLmdyb3VwLWluZm8tdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH1hcHAtZ3JvdXAgLmdyb3VwLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFk''@;'; put 'put ''aXVzOjNweH1hcHAtZ3JvdXAgLmdyb3VwLWluZm8gdGR7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLWdyb3VwIC5ncm91cC1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLWdyb3VwIC5ncm91cC1kYXRhe21pbi1oZWlnaHQ6YXV0b31hcHAtZ3JvdXAgLmdyb3VwLWRh''@;'; put 'put ''dGEgaDMsYXBwLWdyb3VwIC5ncm91cC1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfWFwcC1ncm91cCAuZ3JvdXAtZGF0YSAubWVtYmVyLXRhYmxle3dpZHRoOjEwMCV9YXBwLWdyb3VwIC5ncm91cC1kYXRhIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9YXBw''@;'; put 'put ''LWdyb3VwIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXthcHAtZ3JvdXAgLmdyb3VwLWRhdGF7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1ncm91cCAuZ3JvdXAtaW5m''@;'; put 'put ''b3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtZ3Jv''@;'; put 'put ''dXAgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyOTQwNGJ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1ncm91cCAuZ3JvdXAtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1''@;'; put 'put ''cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtZ3JvdXAgLm1l''@;'; put 'put ''bWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9YXBwLXVzZXIgLnNpZGViYXItaGVpZ2h0e2hlaWdodDoxMDAlfWFwcC11c2VyIC51c2VyLWluZm8tdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH1hcHAtdXNlciAudXNlci1pbmZve2Jv''@;'; put 'put ''cmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLXVzZXIgLnVzZXItaW5mbyB0ZHt0ZXh0LWFsaWduOmNlbnRlcn1hcHAtdXNlciAudXNlci1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLXVzZXIgLnVzZXItZGF0YXttaW4taGVpZ2h0OmF1dG99''@;'; put 'put ''YXBwLXVzZXIgLnVzZXItZGF0YSBoMyxhcHAtdXNlciAudXNlci1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfWFwcC11c2VyIC51c2VyLXRhYmxle3dpZHRoOjEwMCV9YXBwLXVzZXIgLnVzZXItdGFibGUgdGhlYWR7YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfWFwcC11c2VyIC51c2VyLXRh''@;'; put 'put ''YmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfWFwcC11c2VyIC53aWR0aC01MHt3aWR0aDo1MCV9YXBwLXVzZXIgLndpZHRoLTMze3dpZHRoOjMzJX1hcHAtdXNlciAudGFibGUtY29udGFpbmVye292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NTAwcHh9QG1lZGlhIHNjcmVl''@;'; put 'put ''biBhbmQgKG1heC13aWR0aDo3NjhweCl7YXBwLXVzZXIgLnVzZXItZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtj''@;'; put 'put ''ZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifWJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci1kYXRhe2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdXNlciAudXNlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9YXBwLXJlcXVlc3RzLW1v''@;'; put 'put ''ZGFsey0tbGluZS1oZWlnaHQ6IDE2cHg7LS1saW5lLXRvcDogMHB4fWFwcC1yZXF1ZXN0cy1tb2RhbCAubG9nLXdyYXBwZXIuc2FzbG9ne3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOnByZTtmb250LWZhbWlseTptb25vc3BhY2V9YXBwLXJlcXVlc3RzLW1vZGFsIC5sb2ctd3JhcHBl''@;'; put 'put ''ci5zYXNsb2cgLmhpZ2hsaWdodGVkLWxpbmV7YmFja2dyb3VuZC1jb2xvcjojZmYwM31hcHAtcmVxdWVzdHMtbW9kYWwgLmxpbmUtaGlnaGxpZ2h0LW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZTthbmltYXRpb246ZmFkZU91''@;'; put 'put ''dCAzcyBmb3J3YXJkczt6LWluZGV4OjEwfWFwcC1yZXF1ZXN0cy1tb2RhbCAudGVtcC1oZWlnaHQtc2V0dGVye2hlaWdodDp2YXIoLS1saW5lLWhlaWdodCl9YXBwLXJlcXVlc3RzLW1vZGFsIC5saW5lLXBvc2l0aW9uLXNldHRlcnt0b3A6dmFyKC0tbGluZS10b3ApfWFwcC1yZXF1ZXN0cy1t''@;'; put 'put ''b2RhbCAudGVtcC1saW5lLWhlaWdodC1jYWxje3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO2hlaWdodDphdXRvfWFwcC1yZXF1ZXN0cy1tb2RhbCAuZXJyb3ItaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2YwMDN9YXBwLXJlcXVlc3RzLW1vZGFsIC53YXJuaW5nLWhp''@;'; put 'put ''Z2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAzfUBrZXlmcmFtZXMgZmFkZU91dHswJXtvcGFjaXR5OjF9NzAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fWFwcC1yZXF1ZXN0cy1tb2RhbCAuaGlnaGxpZ2h0ZWQtbGluZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MWEyMjAyYn1hcHAtcmVxdWVz''@;'; put 'put ''dHMtbW9kYWwgLmVycm9yLWxpbmV7Y29sb3I6I2UxMjIwMH1hcHAtcmVxdWVzdHMtbW9kYWwgLndhcm5pbmctbGluZXtjb2xvcjojZjJhZjAwfWFwcC1yZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU0ZTQ7cGFkZGlu''@;'; put 'put ''ZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbTo1cHh9YXBwLXJlcXVlc3RzLW1vZGFsIC5kcm9wZG93bi1pdGVtLnNlbGVjdGVke2JhY2tncm91bmQ6I2Q4ZTNlOX1hcHAtcmVxdWVzdHMtbW9kYWwgLm5vLXJlcXN7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7''@;'; put 'put ''cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfS5yZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0ucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGlu''@;'; put 'put ''ZzoyMHB4IDEwcHggNXB4fS53b3JrLXRhYmxlcy1kcm9wZG93biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjOGM4YzhjKSFpbXBvcnRhbnR9LnN0YWNrLXZpZXd7aGVpZ2h0OmF1dG8haW1wb3J0YW50O21hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnQ7LXdlYmtpdC1t''@;'; put 'put ''YXNrLWltYWdlOm5vbmUhaW1wb3J0YW50fS5jb250ZW50IGNsci1pY29ue21hcmdpbi1ib3R0b206NXB4fS5jb250ZW50IHByZXt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3JkZXI6MH0uY29u''@;'; put 'put ''dGVudCAuc3RhY2stYmxvY2stbGFiZWx7d2lkdGg6MTAwJTtwYWRkaW5nLWxlZnQ6LjZyZW0haW1wb3J0YW50fS5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZXJyLWxpbmtzIC5jbHItdHJlZW5vZGUtY2hpbGRyZW57''@;'; put 'put ''bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99YXBwLXN5c3RlbSAuY29udGVudC1ib3h7bWF4LXdpZHRoOjEyODlweH1hcHAtc3lzdGVtIC5zeXMtaW5mbz5kaXZ7ZmxleDoxfWFwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hpbGQoMil7bWFyZ2luOjAgMzBweH1hcHAtc3lzdGVt''@;'; put 'put ''IC5hZG1pbi1hY3Rpb24sYXBwLXN5c3RlbSAudXNlci1hY3Rpb257ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgI2RlZGVkZTttYXJn''@;'; put 'put ''aW4tYm90dG9tOjVweH1hcHAtc3lzdGVtIC5hZG1pbi1hY3Rpb24gYnV0dG9uLGFwcC1zeXN0ZW0gLnVzZXItYWN0aW9uIGJ1dHRvbnttaW4td2lkdGg6MTAycHh9YXBwLXN5c3RlbSAuZGFya3tmb250LXdlaWdodDo3MDA7bWFyZ2luLWxlZnQ6NXB4fUBtZWRpYShtYXgtd2lkdGg6OTkzcHgp''@;'; put 'put ''e2FwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hpbGQoMil7bWFyZ2luOjB9YXBwLXN5c3RlbSAuc3lzLWluZm8gZGl2e21hcmdpbjoyMHB4IDB9fWFwcC1xdWVyeSAuY29udGVudHtkaXNwbGF5OmZsZXh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lcntkaXNwbGF5''@;'; put 'put ''OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1sb2dpY3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzoxNXB4fWFwcC1xdWVyeSAuY29u''@;'; put 'put ''dGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNl''@;'; put 'put ''cy1jb250YWluZXIgLmNsYXVzZS1xdWVyeT4uY2xyLXJvd3tqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnk+LmNsci1yb3c6bm90KDpsYXN0LWNoaWxkKXtwYWRkaW5nLWJvdHRvbToxNXB4O21h''@;'; put 'put ''cmdpbi1ib3R0b206MTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xNil9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdo''@;'; put 'put ''dDoxMHB4O2NvbG9yOmdyYXl9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2x7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNl''@;'; put 'put ''cy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFyaWFibGUtY29sIC5kYXRhbGlzdC13cmFwcGVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2wgLmRhdGFsaXN0LXdyYXBwZXIgaW5wdXR7d2lkdGg6''@;'; put 'put ''MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJhdG9yLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJh''@;'; put 'put ''dG9yLWNvbCBjbHItc2VsZWN0LWNvbnRhaW5lcntoZWlnaHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtw''@;'; put 'put ''YWRkaW5nLWJvdHRvbToxcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHN7d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfWFwcC1x''@;'; put 'put ''dWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jaGVja2JveC12YWxzIGNsci1jaGVja2JveC1jb250YWluZXJ7bWFyZ2luLXRvcDowfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFs''@;'; put 'put ''dWUtY29sIC5jaGVja2JveC12YWxzIHNlY3Rpb257bWF4LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHN7d2lkdGg6MTAwJX1hcHAtcXVl''@;'; put 'put ''cnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFs''@;'; put 'put ''dWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMg''@;'; put 'put ''LmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscz5pbnB1dHt3aWR0aDox''@;'; put 'put ''MDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250''@;'; put 'put ''YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxze3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFw''@;'; put 'put ''cC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWlu''@;'; put 'put ''ZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZh''@;'; put 'put ''bHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbXttYXJnaW4tYm90dG9tOjEwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNs''@;'; put 'put ''YXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbSBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUt''@;'; put 'put ''Y29sIC5yYW5nZS12YWxzIC5mcm9tLGFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC50b3ttaW4td2lkdGg6MTAwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1''@;'; put 'put ''ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+aW5wdXQsYXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLnRvPmlucHV0e3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNv''@;'; put 'put ''bnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20gaW5wdXRbdHlwZT10aW1lXSxhcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAudG8gaW5wdXRbdHlwZT10aW1lXXt3''@;'; put 'put ''aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFsc3t3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1x''@;'; put 'put ''dWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVy''@;'; put 'put ''IC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0''@;'; put 'put ''LWdyb3Vwe3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNvbnRhaW5zLXZhbHM+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkg''@;'; put 'put ''LnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAuY2xhdXNlLWJ1dHRvbnN7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLmNsYXVzZS1idXR0b25zIGJ1dHRvbnttaW4td2lkdGg6YXV0b31hcHAtcXVlcnkgLmludmFsaWQt''@;'; put 'put ''Y2xhdXNle2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMxfWFwcC1xdWVyeSAuY2xhdXNlLXJvdyBjbHItaWNvbnttYXJnaW46MH1hcHAtcXVlcnkgcHJlW2NsYXNzKj1sYW5ndWFnZS1de3BhZGRpbmc6OHB4O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MXB4O2Rpc3BsYXk6ZmxleDtqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OjY2cHg7cG9zaXRpb246cmVsYXRpdmV9YXBwLXF1ZXJ5IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSBzcGFuLnNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O3RvcDoxMHB4fWFwcC1xdWVyeSBw''@;'; put 'put ''cmVbY2xhc3MqPWxhbmd1YWdlLV0gY29kZXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9YXBwLXF1ZXJ5IC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1hcHAtcXVlcnkgY2xy''@;'; put 'put ''LWRhdGUtY29udGFpbmVye21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1hcHAtcXVlcnkgaW5wdXRbdHlwZT10aW1lXXtib3JkZXI6MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiM2IzYjN9YXBwLXF1ZXJ5IGlucHV0W3R5cGU9dGltZV06Zm9jdXN7''@;'; put 'put ''b3V0bGluZTpub25lfWFwcC1xdWVyeSAuaW4tdmFsdWVzLW1vZGFsIC5tb2RhbC1mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2Q4ZDhkODttYXJnaW4tdG9wOjEwcHh9YXBwLXF1ZXJ5IC5wcm9ncmVzcyxhcHAtcXVlcnkgLnByb2dyZXNzLXN0YXRpY3tiYWNrZ3JvdW5kLWNvbG9yOnRy''@;'; put 'put ''YW5zcGFyZW50O3dpZHRoOjEwMCU7aGVpZ2h0OjRweDt0b3A6M3B4fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtcXVlcnkgLmNsYXVzZS1sb2dpY3tiYWNrZ3JvdW5kOiNlOWU5ZTl9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1xdWVyeSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6I2Zi''@;'; put 'put ''ZjhmOH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtcXVlcnkgLmxpbmUtbnVtYmVyc3tib3JkZXItY29sb3I6Izk4OTc5NyFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXF1ZXJ5IC5jbGF1c2UtbG9naWN7YmFja2dyb3VuZDojMTkyYTMwfWJvZHlbY2RzLXRoZW1lPWRhcmtd''@;'; put 'put ''IGFwcC1xdWVyeSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6IzI2M2U0OH1hcHAtbG9naW4gLnNpZGVCYXJQcm9wc3tiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNlMGUwZTB9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaDIsYXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaDMs''@;'; put 'put ''YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaDQsYXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaDUsYXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgaW5wdXR7Y29sb3I6I2UwZTBlMH1hcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBidXR0b257Ym9yZGVyLWNvbG9yOndoZWF0IWltcG9ydGFudH1hcHAtbG9n''@;'; put 'put ''aW4gLnNpZGVCYXJQcm9wcyBhe2NvbG9yOiNlMGUwZTB9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4OjEwMDAwfWFwcC1sb2dpbiAubG9n''@;'; put 'put ''aW4tc2lkZWJhci13cmFwcGVyPip7cG9pbnRlci1ldmVudHM6YXV0b31hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhcnt3aWR0aDo0MDBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1y''@;'; put 'put ''aWdodDoxcHggc29saWQgI2RkZDtwYWRkaW5nOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNDAwcHgpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW57ei1pbmRleDoxMDE7ZGlz''@;'; put 'put ''cGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW4gLnRpdGxle2ZvbnQtc2l6ZTozMnB4O2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhl''@;'; put 'put ''aWdodDozNnB4fWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW4gLnRpdGxlIC53ZWxjb21le21hcmdpbi10b3A6MzZweH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC5sb2dp''@;'; put 'put ''bi1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6NDhweCAwIDB9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbiAubG9naW4tZ3JvdXA+KnttYXJnaW46NnB4IDAgMThweH1hcHAtbG9naW4gLmxv''@;'; put 'put ''Z2luLXNpZGViYXItd3JhcHBlci5hY3RpdmUgLmxvZ2luLXNpZGViYXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt6LWluZGV4OjEwMX1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmUgLm92ZXJsYXl7ZGlzcGxheTpibG9ja31hcHAtbG9naW4gLmxvZ2luLXNpZGViYXIt''@;'; put 'put ''d3JhcHBlciAub3ZlcmxheXtkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7YmFja2dyb3VuZDojMjEyMTIxODA7ei1pbmRleDoxMDB9YXBwLWxvZ2luIC5sb2dpbi1sb2dve21heC13aWR0aDoyMDBweH0ubG9naW4tc2lkZWJh''@;'; put 'put ''ci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAsLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi1zaWRlYmFyLXdyYXBw''@;'; put 'put ''ZXIgLmxvZ2luLWdyb3VwIC5wYXNzd29yZHt3aWR0aDoxMDAlfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtd3JhcHBlciwubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCBidXR0b257bWF4LXdpZHRoOm5vbmV9YXBwLXRlcm1zIDpob3N0''@;'; put 'put ''e2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2Y1ZjZmZn1hcHAtdGVybXMgLmNsci1jaGVja2JveC13cmFwcGVyLmRpc2FibGVke29wYWNpdHk6LjV9YXBwLXRlcm1zIC5jYXJke2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLXRvcDowfWFwcC10''@;'; put 'put ''ZXJtcyAuY2FyZCAuY2FyZC1ibG9ja3tmbGV4OjE7b3ZlcmZsb3c6YXV0b31hcHAtdGVybXMgLmFjY2VwdC1jaGVja2JveHtwYWRkaW5nOjEwcHggMTVweH1hcHAtZGVwbG95IC5jYXJke21hcmdpbi10b3A6MH1hcHAtZGVwbG95IC5idG57bWFyZ2luLXRvcDoxMHB4fWFwcC1kZXBsb3kgLmxv''@;'; put 'put ''Zy13cmFwcGVye3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZjBmMGYwO2JvcmRlcjoxcHggc29saWQgI2M5YzljOTtwYWRkaW5nOjEwcHg7b3ZlcmZsb3c6YXV0bzt3aGl0ZS1zcGFjZTpwcmUtd3JhcH1hcHAtZGVwbG95ICNjb250ZXh0cy1idG57cGFkZGluZzozcHggMCAwO21pbi13aWR0aDoz''@;'; put 'put ''MHB4O21hcmdpbi1sZWZ0OjEwcHg7aGVpZ2h0OjMwcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZGVwbG95IC52YWxpZGF0aW9uLWJhcntkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoyMHB4O2FsaWduLWl0ZW1zOmNl''@;'; put 'put ''bnRlcn1hcHAtZGVwbG95IC52YWxpZGF0aW9uLWJhciBjbHItaWNvbnttYXJnaW4tcmlnaHQ6NXB4fWFwcC1kZXBsb3kgLmF1dG9kZXBsb3ktc2VjdGlvbntwYWRkaW5nOjAgMTVweH1hcHAtZGVwbG95IC5hdXRvZGVwbG95LXNlY3Rpb24gLmNsci1jaGVja2JveC13cmFwcGVye21hcmdpbjoy''@;'; put 'put ''MHB4IDB9YXBwLWRlcGxveSAuYXV0b2RlcGxveS1zZWN0aW9uIC5idG4tYXV0b2RlcGxveXtkaXNwbGF5OmJsb2NrO21hcmdpbjoxNXB4IDB9YXBwLWFsZXJ0cyBjbHItYWxlcnRze2Rpc3BsYXk6YmxvY2t9YXBwLW1hbnVhbC1kZXBsb3kgLmNsZWFyLW1lbW9yeS1idXR0b257cmlnaHQ6MTBw''@;'; put 'put ''eDt0b3A6MnB4fWFwcC1saW5lYWdlIC50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNp''@;'; put 'put ''dGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn1hcHAtbGluZWFnZSAjZ3JhcGh7aGVpZ2h0OmNhbGMoMTAwdmggLSAxOTVweCk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlk''@;'; put 'put ''ICNlNGU0ZTQ7bWFyZ2luLXRvcDoxMHB4fWFwcC1saW5lYWdlIC5zZWxlY3Rpb24td3JhcHBlcnt3aWR0aDoxMDAlO21heC13aWR0aDo2NzBweH1hcHAtbGluZWFnZSAuY29sdW1uLWFjdGl2ZXtiYWNrZ3JvdW5kOiNkOGUzZTk7Y29sb3I6IzAwMH1hcHAtbGluZWFnZSAuY29udGVudC1hcmVh''@;'; put 'put ''e3BhZGRpbmc6LjVyZW0haW1wb3J0YW50fWFwcC1saW5lYWdlIC5jb250ZW50LWFyZWEgLmNhcmR7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gMTIwcHgpfWFwcC1saW5lYWdlIC5jb250ZW50LWFyZWEgLmNhcmQgLmNhcmQtYmxvY2t7cGFkZGluZzouNXJlbSAuMzVyZW0haW1wb3J0YW50fWFw''@;'; put 'put ''cC1saW5lYWdlIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1hcHAtbGluZWFnZSAuYnRuLWdyb3VwLmRpcmVjdGlvbnttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfWFwcC1saW5lYWdlIC5ncmFwaC1yZW5kZXItc3Bpbm5lcntwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTBweH1hcHAtbGluZWFnZSAuYmlnbGluZWFnZS1yb3d7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRl''@;'; put 'put ''cjttYXJnaW4tYm90dG9tOjIwcHh9YXBwLWxpbmVhZ2UgLm1vZGFsLWZvb3RlciBwe21hcmdpbjowfWFwcC1saW5lYWdlIC5saW5lYWdlLXRpdGxlLXdyYXBwZXJ7bGVmdDoxMnB4fWFwcC1saW5lYWdlIC5tYXgtZGVwdGgtaW5wdXR7d2lkdGg6MTAwJX1AbWVkaWEobWF4LXdpZHRoOjc2OHB4''@;'; put 'put ''KXthcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToyMHB4fX1kYy10cmVlIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1kYy10cmVlIGNsci10cmVlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzIC5j''@;'; put 'put ''bHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX1hcHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2hlaWdodDo3NXZoO292ZXJmbG93OnNjcm9sbDti''@;'; put 'put ''b3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1czo0cHh9YXBwLW1ldGFkYXRhIC5jb2xzLWhlYWR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9YXBwLW1ldGFkYXRhIC5vYmplY3QtdGV4dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRl''@;'; put 'put ''bXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX1hcHAtbWV0YWRhdGEgLnJlcG8tZHJvcGRvd257bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9YXBwLW1ldGFkYXRhIC5j''@;'; put 'put ''bHItYWNjb3JkaW9uLXRpdGxle3dpZHRoOjEwMCV9YXBwLW1ldGFkYXRhIC5mbG9hdC1yaWdodHttYXJnaW46MDtmbG9hdDpyaWdodH1hcHAtbWV0YWRhdGEgLmZ1bGwtd2lkdGh7d2lkdGg6MTAwJX1hcHAtbWV0YWRhdGEgLm9iamVjdC11cml7bWFyZ2luOjVweCAwIDB9YXBwLW1ldGFkYXRh''@;'; put 'put ''IC5vYmplY3QtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweH1hcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7Ym9yZGVyLXJhZGl1czozcHh9''@;'; put 'put ''YXBwLW1ldGFkYXRhIC5kYXRhZ3JpZC1ob3N0e2Rpc3BsYXk6dW5zZXQhaW1wb3J0YW50fWFwcC1tZXRhZGF0YSAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLW1ldGFkYXRhIC5jb250ZW50LWFyZWF7cGFkZGluZzouNXJl''@;'; put 'put ''bSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDA1NTYwfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtbWV0YWRhdGEgLm9i''@;'; put 'put ''amVjdHMtY29se2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOX1hcHAtbGljZW5zaW5ne2hlaWdodDpjYWxjKDEwMCUgLSA5NnB4KTtwYWRkaW5nOjIwcHh9YXBwLWxp''@;'; put 'put ''Y2Vuc2luZyAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWxpY2Vuc2luZyAua2V5LWVycm9ye2ZvbnQtc2l6ZToxNnB4fWFwcC1saWNlbnNpbmcgLm1pc3NrZXl7Y29sb3I6I2U3NGMzY31hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtleS1mb3JtLGFwcC1saWNlbnNpbmcgLmFjdGl2YXRpb24ta2V5''@;'; put 'put ''LWZvcm17cGFkZGluZzowfWFwcC1saWNlbnNpbmcgLmxpY2Vuc2Uta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lcixhcHAtbGljZW5zaW5nIC5hY3RpdmF0aW9uLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtl''@;'; put 'put ''eS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEsYXBwLWxpY2Vuc2luZyAuYWN0aXZhdGlvbi1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7aGVpZ2h0OjE3MHB4O21heC1oZWlnaHQ6MTcwcHg7bWluLWhlaWdodDoxNzBweDty''@;'; put 'put ''ZXNpemU6bm9uZX1hcHAtbGljZW5zaW5nIC5hcHBseS1rZXlze2hlaWdodDo0MHB4fWFwcC1saWNlbnNpbmcgLmRyb3AtYXJlYXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxNXB4O2JvcmRlcjoycHggZGFzaGVkICNiMmIy''@;'; put 'put ''YjI7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjEwcHggMH1hcHAtbGljZW5zaW5nIGNsci10YWJzIGJ1dHRvbntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWFwcC12aWV3Ym94ZXMgLmxpY2VuY2Utbm90aWNle2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6YmxvY2s7''@;'; put 'put ''b3BhY2l0eTouNn1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFse3otaW5kZXg6MTMwMH1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFsIC5tb2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpfWFwcC12aWV3Ym94ZXMgY2xyLW1vZGFsLnJv''@;'; put 'put ''b3QtbW9kYWwgLm1vZGFsLWNvbnRlbnR7aGVpZ2h0Ojgwdmh9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbCAubW9kYWwtYm9keXttYXgtaGVpZ2h0OjEwMCU7aGVpZ2h0OjEwMCV9YXBwLXZpZXdib3hlcyBkYy10cmVle292ZXJmbG93OmF1dG87ZmxleDoxfWFwcC12aWV3Ym94''@;'; put 'put ''ZXMgLnRvb2x0aXAtbG9uZ3t3b3JkLWJyZWFrOmJyZWFrLXdvcmR9YXBwLXZpZXdib3hlcyAuYWRkLW5ld3t3aWR0aDo1MCU7cGFkZGluZy1yaWdodDo1cHh9YXBwLXZpZXdib3hlcyAuYWRkLW5ldz5we21hcmdpbi1ib3R0b206MXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3gtbGltaXQtbm90''@;'; put 'put ''aWNle29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY31hcHAtdmlld2JveGVzIC5jdXJyZW50bHktb3Blbnt3aWR0aDo1MCV9YXBwLXZpZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveHtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9YXBwLXZpZXdib3hlcyAuY3VycmVu''@;'; put 'put ''dGx5LW9wZW4gLm9wZW4tdmlld2JveC5zZWxlY3RlZHtiYWNrZ3JvdW5kOiMzYzg1MDAyZX1hcHAtdmlld2JveGVzIC52aWV3Ym94ZXMtY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX1hcHAtdmlld2JveGVzIC52aWV3Ym94''@;'; put 'put ''e21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4O3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1''@;'; put 'put ''czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMwMDB9YXBwLXZpZXdib3hlcyAudmlld2JveC5mb2N1c2Vke3otaW5kZXg6MTEwMDtvdXRsaW5lOm5vbmV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuY29udGVudHtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMwMTk2MDc4NDMp''@;'; put 'put ''O2JhY2tncm91bmQ6I2ZmZjtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXg6MTtvdmVyZmxvdy14OmF1dG99YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGV7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAwO2JvcmRlci10b3AtbGVm''@;'; put 'put ''dC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC50YWJsZS10aXRsZXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFr''@;'; put 'put ''OmJyZWFrLWFsbH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAuYWN0aW9uc3tkaXNwbGF5OmZsZXg7bWluLXdpZHRoOjM1cHh9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGUgLmFjdGlvbnMgY2xyLWljb257Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6''@;'; put 'put ''NXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC5hY3Rpb25zIGNsci1pY29uOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjMpfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNsaWNrLWljb257Y3Vyc29yOnBvaW50ZXJ9YXBwLXZpZXdib3hlcyAudmlld2JveCAuY2xpY2st''@;'; put 'put ''aWNvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxle3Bvc2l0aW9uOmFic29sdXRlfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUuY29ybmVye3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7Y3Vyc29yOm53c2UtcmVz''@;'; put 'put ''aXplfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUucmlnaHR7d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZ0hhbmRsZS5ib3R0b217aGVpZ2h0OjJweDt3aWR0aDoxMDAlO2N1cnNvcjpucy1yZXNpemV9''@;'; put 'put ''YXBwLXZpZXdib3hlcyAuY29scy1zZWFyY2h7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3ODQzMTM3MjUpO2JvcmRlci1yYWRpdXM6M3B4fWFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtib3JkZXI6c29saWQgMXB4ICNjY2M7bWluLWhl''@;'; put 'put ''aWdodDo2MHB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fWFwcC12aWV3Ym94ZXMgLmNvbC1ib3h7cGFkZGluZzoycHggMTBweDtib3JkZXItYm90dG9tOnNvbGlkIDFweCAj''@;'; put 'put ''Y2NjO2NvbG9yOiMwMDAwMDBkZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOm1vdmU7Zm9udC1zaXplOjE0cHh9YXBwLXZpZXdib3hlcyAu''@;'; put 'put ''Y29sLWJveC5zZWFyY2g6Zm9jdXN7YmFja2dyb3VuZDojMDAwMDAwMWF9YXBwLXZpZXdib3hlcyAuY29sLWJveC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwMjR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcHJldmlld3tib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCAjMDAwMywwIDhweCAxMHB4IDFweCAjMDAwMDAwMjQsMCAzcHggMTRweCAycHggIzAwMDAwMDFmO3otaW5kZXg6MTMwMCFpbXBvcnRhbnR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcGxhY2Vob2xkZXJ7b3BhY2l0eTow''@;'; put 'put ''fWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLWFuaW1hdGluZ3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9YXBwLXZpZXdib3hlcyAuY29sLWJveDpsYXN0LWNoaWxke2JvcmRlcjpub25lfWFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdC5jZGstZHJvcC1s''@;'; put 'put ''aXN0LWRyYWdnaW5nIC5jb2wtYm94Om5vdCguY2RrLWRyYWctcGxhY2Vob2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1hcHAtdmlld2JveGVzIC5kaXNhYmxlZHtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWltcG9ydGFudDtwb2ludGVy''@;'; put 'put ''LWV2ZW50czpub25lfWFwcC12aWV3Ym94ZXMgLmZpbHRlci1hY3RpdmV7Y29sb3I6IzAwNzJhM31hcHAtdmlld2JveGVzIGhvdC10YWJsZSAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgLmhhbmRz''@;'; put 'put ''b250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSxhcHAtdmlld2JveGVzIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMGIwfWFwcC12aWV3''@;'; put 'put ''Ym94ZXMgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41''@;'; put 'put ''fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3g6aG92ZXJ7YmFja2dyb3VuZDojMzE0YjU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiMzMTRiNTc7Y29sb3I6I2Zm''@;'; put 'put ''Zjtib3JkZXItY29sb3I6Izg1ODU4NX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jb2wtYm94e2JhY2tncm91bmQ6IzMxNGI1Nztib3JkZXItY29sb3I6Izg1ODU4NTtjb2xvcjppbmhlcml0fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdmlld2JveGVzIC5jdXJyZW50''@;'; put 'put ''bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6I2U4ZThlOH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29scy1saXN0e2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29sLWJveHtiYWNrZ3JvdW5k''@;'; put 'put ''OiNmZmZ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRjLWxvYy1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRoOjUwMHB4fWFwcC1hdXRvbWF0aWMtZGVwbG95IC5hdXRvLWRlcGxveXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246''@;'; put 'put ''Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDA2O3otaW5kZXg6MTAwfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5zcGlubmVyLWJveHt3aWR0aDo0MDBweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDojZmZmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNoYWRvdzoxcHggMXB4IDhweCAjMDAwMDAwODJ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLnNwaW5uZXItYm94IC5idXR0b25ze2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vl''@;'; put 'put ''bjt3aWR0aDoxMDAlfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktc3RhdHVzLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN0YXR1cy1yb3cgcHttYXJnaW46MCAwIDAgMTBw''@;'; put 'put ''eH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN1Y2Nlc3N7Y29sb3I6IzZlY2Y0NH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LWVycm9ye2NvbG9yOiNlNzRjM2N9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS11bmRldGVybWluYXRlZHtjb2xvcjojY2FjYWNhfWFwcC1h''@;'; put 'put ''dXRvbWF0aWMtZGVwbG95IGhye2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3MDU4ODIzNTMpfWFwcC1pbmZvLW1vZGFsIC5jbHItYWJvcnQtbW9kYWwgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtaW5mby1tb2RhbCAuY2xyLWFib3J0''@;'; put 'put ''LW1vZGFsIC5tb2RhbHt6LWluZGV4OjIwNTB9YXBwLWluZm8tbW9kYWwgLm1vZGFsLXRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1pbmZvLW1vZGFsIC5zYXNTZXJ2aWNle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9YXBwLWluZm8tbW9kYWwgLm1vZGFs''@;'; put 'put ''LWZvb3Rlcntwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtaW5mby1tb2RhbCAuc3lzdGV4dHtvdmVyZmxvdzphdXRvO21hcmdpbi10b3A6MjBweDtwYWRkaW5nOjEwcHggMDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNkY2RjfWFwcC1pbmZvLW1vZGFsIC5zeXN0ZXh0IHB7bWFyZ2luLXRvcDowO3dv''@;'; put 'put ''cmQtd3JhcDpicmVhay13b3JkfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5uYW1l''@;'; put 'put ''LWlucHV0LXJvd3t3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLm5hbWUtaW5wdXQtcm93IC5jZWxsLWRlc2N7bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fWFwcC1lZGl0LXJlY29yZCAu''@;'; put 'put ''cmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuaW5wdXRzLXdyYXBwZXJ7ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5pbnB1dHMtd3JhcHBlcj4qOm5vdCguZGF0ZS1m''@;'; put 'put ''aWVsZCk6bm90KGNsci1zZWxlY3QtY29udGFpbmVyKXtmbGV4OjF9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IHB7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuY2xyLXRleHRhcmVh''@;'; put 'put ''LXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4t''@;'; put 'put ''ZW50cnkgYXBwLXNvZnQtc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1y''@;'; put 'put ''aWdodDo2cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1zZWxlY3Qg''@;'; put 'put ''aW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1lZGl0LXJlY29yZCAucmVj''@;'; put 'put ''b3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5OmZpcnN0''@;'; put 'put ''LWNoaWxkIHA6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmRhdGUtZmllbGR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZGF0ZS1maWVs''@;'; put 'put ''ZCB0ZXh0YXJlYXt3aWR0aDoyMzBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5kYXRlLWZpZWxkIC5kYXRlLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDo0cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZGF0ZS1maWVsZCAu''@;'; put 'put ''ZGF0ZS1waWNrZXIgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nLWJvdHRvbToxMHB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250''@;'; put 'put ''YWluZXJ7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czouMTI1cmVtO21hcmdpbi1yaWdodDo1cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6''@;'; put 'put ''dW5zZXR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0e2hlaWdo''@;'; put 'put ''dDphdXRvO3BhZGRpbmc6MTBweCAyMHB4IDEwcHggMTBweDtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAu''@;'; put 'put ''cmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVye3dpZHRoOjIyNHB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtj''@;'; put 'put ''b2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciAuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3Vwe3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVy''@;'; put 'put ''IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQt''@;'; put 'put ''bW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1jb250YWluZXIuaW52YWxpZC1kYXRhe2JvcmRl''@;'; put 'put ''ci1jb2xvcjpyZWR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtZGlhbG9ne3dpZHRoOjgwdnd9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQt''@;'; put 'put ''ZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLmludmFsaWQtZGF0YXti''@;'; put 'put ''b3JkZXItY29sb3I6cmVkO291dGxpbmU6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEubm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1vbm9zcGFjZX1hcHAtZWRpdC1yZWNvcmQgLnJl''@;'; put 'put ''Y29yZC1lZGl0LW1vZGFsIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6NXB4fWFwcC1lZGl0LXJl''@;'; put 'put ''Y29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtwYWRkaW5nOjAgMCAxcmVtfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpz''@;'; put 'put ''cGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlciAuYWxlcnR7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5wcmV2LW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdC1yZWNvcmQgLnByZXYtbmV4dCBw''@;'; put 'put ''e21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucHJldi1uZXh0IGJ1dHRvbnttYXJnaW46MCAxMHB4fWFwcC1lZGl0LXJlY29yZCAuZm9jdXNhYmxlOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfWFwcC1lZGl0LXJlY29yZCAuZW50cnktaW5wdXQtbGVmdC1vZmZzZXR7bGVmdDot''@;'; put 'put ''MzBweH1hcHAtZWRpdC1yZWNvcmQgLnZhbGlkYXRpb24taW5mby1hbGVydHt3aWR0aDozMTBweH1hcHAtYXV0b2NvbXBsZXRlIC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9YXBwLWF1dG9jb21wbGV0''@;'; put 'put ''ZSBpbnB1dHt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1hcHAtYXV0b2NvbXBsZXRlIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5vdmVybGF5e3Bvc2l0aW9uOmZp''@;'; put 'put ''eGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdHtwb3NpdGlvbjpmaXhlZDtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIwMDB9YXBwLWF1dG9jb21w''@;'; put 'put ''bGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDojMDAwMDAwMGZ9YXBwLWF1''@;'; put 'put ''dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6IzAwMDAwMDBmfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5sb2FkLW1vcmV7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXRvcDoxcHggc29s''@;'; put 'put ''aWQgI2U2ZTZlNn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdHtiYWNrZ3JvdW5kOiMyMTMzM2I7Ym9yZGVyOjFweCBzb2xpZCAjNTc1NzU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hdXRvY29tcGxldGUgaW5wdXR7Y29sb3I6I2ZmZn1ib2R5W2Nk''@;'; put 'put ''cy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdCBvcHRpb257Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3R7YmFja2dyb3VuZDojZmZmfWFwcC1jb250YWN0LWxpbmsgLnVuc2V0e2NvbG9yOnVuc2V0fWFwcC1k''@;'; put 'put ''YXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgY2xyLXRhYnN7bWF4LWhlaWdodDo3MHZofWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b31hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IC50YWItY29udGVudCAuZGF0YWdy''@;'; put 'put ''aWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1kYXRhc2V0LWluZm8gY2xyLW1vZGFsIC5tb2RhbC1kaWFsb2d7aGVpZ2h0OjEwMCV9YXBwLWRhdGFzZXQtaW5mbyAuY2xpY2thYmxlLXJvd3tjdXJzb3I6cG9pbnRlcn1hcHAtZGF0YXNldC1pbmZvIC5kYXRhZ3JpZC10YWJsZSAuZGF0''@;'; put 'put ''YWdyaWQtY2VsbDpmb2N1c3tvdXRsaW5lOm5vbmU7b3V0bGluZS1vZmZzZXQ6MH1hcHAtdXBsb2FkLXN0YXRlcntkaXNwbGF5OmJsb2NrfWFwcC11cGxvYWQtc3RhdGVyIHB7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLWFwcHJvdmUtZGV0YWlscyAubG9hZGVye2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLWFwcHJvdmUtZGV0YWlscyAubW9kYWxMYXJnZXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAuYWRkZWRSb3d7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3JkZXItcmFkaXVzOjVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5kZWxldGVkUm93e2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAudXBkYXRlZFJv''@;'; put 'put ''d3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2h7YmFja2dyb3VuZDojMDAwMDAwMWE7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUt''@;'; put 'put ''ZGV0YWlscyAuY2g6aG92ZXJ7YmFja2dyb3VuZDojZmM4Nzc4NjZ9YXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LnRvb2x0aXAtY29udGVu''@;'; put 'put ''dCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7Zm9udC1zaXplOi41NDE2N3JlbTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6IzMxNDM1MTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29sb3I6I2YwZjFlYztsaW5l''@;'; put 'put ''LWhlaWdodDouNzVyZW07bWFyZ2luOjA7cGFkZGluZzouMzc1cmVtIC41cmVtO3dpZHRoOjIzNXB4O3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDEycHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206LjY2NjY3cmVtfWFwcC1hcHByb3Zl''@;'; put 'put ''LWRldGFpbHMgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodDpiZWZvcmUsYXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwPi50b29s''@;'; put 'put ''dGlwLWNvbnRlbnQ6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVy''@;'; put 'put ''LXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZXtib3JkZXI6MHB4IHNvbGlkfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfWFwcC1h''@;'; put 'put ''cHByb3ZlLWRldGFpbHMgLnRhYmxlQ29udHtvdmVyZmxvdzphdXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZUNvbnQgdGR7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsSW5mb3tkaXNwbGF5OmZsZXg7''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsQmFja3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7YXBwLWFwcHJvdmUtZGV0YWlscyAuYXBwcm92YWxJ''@;'; put 'put ''bmZve2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5hcHByb3ZhbEJhY2t7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fWFwcC1hcHByb3ZlLWRldGFpbHMg''@;'; put 'put ''LmNhcmR7bWFyZ2luLXRvcDowcmVtIWltcG9ydGFudDttaW4taGVpZ2h0OmNhbGMoMTAwdmggKyAtMHB4KSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGQubGVmdCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0aC5sZWZ0e3RleHQtYWxpZ246bGVmdDt3aWR0aDox''@;'; put 'put ''NTBweCFpbXBvcnRhbnQ7ZmxleDowfX1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0ZC5sZWZ0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRoLmxlZnR7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MTt3aWR0aDozMDBweCFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbGx7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojZTZiM2IzO2NvbG9yOiMzMTQzNTE7dG9wOjA7aGVpZ2h0OjM2cHg7d2lkdGg6MTAwJTtsZWZ0OjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fWFwcC1hcHByb3ZlLWRldGFpbHMgI2Fj''@;'; put 'put ''Y2VwdEJ0bixhcHAtYXBwcm92ZS1kZXRhaWxzICNyZWplY3RCdG57d2lkdGg6MTc1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAjcmVqZWN0QnRue2JhY2tncm91bmQtY29sb3I6I2E2MmYxNiFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAuZm9ybWF0dGVkLXZhbHVlcy10b2dnbGV7bWlu''@;'; put 'put ''LXdpZHRoOjc1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyBjbHItbW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntvdmVyZmxvdzphdXRvfWFwcC1hcHByb3ZlLWRldGFpbHMgLnJvd3Mtbm90aWNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXJpZ2h0OjEwcHg7Y29sb3I6''@;'; put 'put ''IzZhNmE2YTtmb250LXNpemU6MTVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5yb3dzLW5vdGljZSBjbHItaWNvbnttYXJnaW46MH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC51cGRhdGVkUm93e2JhY2tncm91bmQ6IzkzOTcxZX1ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5hZGRlZFJvd3tiYWNrZ3JvdW5kOiM1Njk5NWZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuZGVsZXRlZFJvd3tiYWNrZ3JvdW5kOiM4YTVhNWF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFw''@;'; put 'put ''cC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLnVwZGF0ZWRSb3d7YmFja2dyb3VuZDojZmFmZGE4fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5hZGRlZFJvd3tiYWNrZ3JvdW5kOiM5MmQwOWF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1hcHByb3Zl''@;'; put 'put ''LWRldGFpbHMgdGFibGUgLmRlbGV0ZWRSb3d7YmFja2dyb3VuZDojZTZiM2IzfWFwcC12aXlhLWFwaS1leHBsb3JlciAuYXBpLWNvbGxlY3Rpb24tZHJvcGRvd257bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9YXBwLXZpeWEtYXBpLWV4cGxv''@;'; put 'put ''cmVyIC5qc29uLWFyZWF7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWEgYXt0ZXh0LWRlY29yYXRpb246bm9uZX1hcHAtdml5YS1hcGktZXhwbG9yZXIg''@;'; put 'put ''Lmpzb24tYXJlYT5uZ3gtanNvbi12aWV3ZXJ7aGVpZ2h0OjEwMCV9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWE+bmd4LWpzb24tdmlld2VyPi5uZ3gtanNvbi12aWV3ZXJ7b3ZlcmZsb3c6YXV0b31hcHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tdG9nZ2xle3Bvc2l0aW9uOmFi''@;'; put 'put ''c29sdXRlO2xlZnQ6MTBweDttYXJnaW46MH1hcHAtdml5YS1hcGktZXhwbG9yZXIgLmVuZHBvaW50LWJyZWFkY3J1bXN7bWFyZ2luOjAgMCAwIDEwcHh9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5xdWVyeS1wYXJhbXMgaW5wdXR7d2lkdGg6NzBweH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxv''@;'; put 'put ''YWRpbmctaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjIuNXJlbTtoZWlnaHQ6Mi41cmVtO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjEwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciAuc3Bpbm5lcnt2ZXJ0''@;'; put 'put ''aWNhbC1hbGlnbjptaWRkbGV9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudHtsaW5lLWhlaWdodDoyNHB4O2NvbG9yOiM1NjU2NTY7Y3Vyc29yOmF1dG99YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBj''@;'; put 'put ''bHItc2lnbnBvc3QtY29udGVudCBwe21hcmdpbi10b3A6MTBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwOmZpcnN0LWNoaWxke21hcmdpbi10''@;'; put 'put ''b3A6MH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHA6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW57''@;'; put 'put ''bWFyZ2luLWxlZnQ6MTBweH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHAgc3Bhbi5ydW5uaW5ne2NvbG9yOiNlOWJmMDR9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29u''@;'; put 'put ''dGVudCBwIHNwYW4uc3VjY2Vzc3tjb2xvcjojNjBiNTE1fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFuLmZhaWx7Y29sb3I6I2M5MjEwMH1hcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwgLmV4Y2VsLXBhc3N3b3JkLXJv''@;'; put 'put ''b3QgLm1vZGFse3otaW5kZXg6MTA2MH1hcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCAubW9kYWwtZm9vdGVyIC5i''@;'; put 'put ''dXR0b25ze2Rpc3BsYXk6ZmxleDtnYXA6NXB4fWFwcC1zdGFnZSAucmVqZWN0ZWR7Y29sb3I6IzkyMjAxYTtmb250LXdlaWdodDo3MDB9YXBwLXN0YWdlIC5hY2NlcHRlZHtjb2xvcjojMTA1YzI2O2ZvbnQtd2VpZ2h0OjcwMH1hcHAtc3RhZ2UgLmJhc2VUYWJsZUxpbmt7Y3Vyc29yOnBvaW50''@;'; put 'put ''ZXI7bWFyZ2luLXRvcDoxMHB4O2NvbG9yOiMwMDdjYmJ9YXBwLXN0YWdlIC5odEZvY3VzQ2F0Y2hlcntwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7bGVmdDotOTk5OXB4IWltcG9ydGFudDt3aWR0aDoxcHghaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O292ZXJmbG93OmhpZGRl''@;'; put 'put ''biFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDAsMCwwLDApIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7bWFyZ2luOi0xcHghaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9YXBwLXN0YWdlIC5odEZvY3VzQ2F0Y2hlcjpmb2N1c3tvdXRsaW5lOm5vbmUhaW1wb3J0YW50fWJvZHlbY2Rz''@;'; put 'put ''LXRoZW1lPWRhcmtdIGFwcC1zdGFnZSAuYmFzZVRhYmxlTGlua3tjb2xvcjojNGVjMGZmfWFwcC1zb2Z0LXNlbGVjdCAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWFwcC1zb2Z0LXNlbGVjdCBpbnB1''@;'; put 'put ''dHt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1hcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJw''@;'; put 'put ''eCFpbXBvcnRhbnR9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1w''@;'; put 'put ''aWNrZXItaW5kaWNhdG9ye21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi10b3A6LTVweH1hcHAtc29mdC1zZWxlY3QgbGFiZWwuc2Vjb25kTGFiZWxBY3RpdmUgc3Bhbjpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7''@;'; put 'put ''b3BhY2l0eTouNn1hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6NTB2d31hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1pbnB1dC13cmFwcGVyIGlu''@;'; put 'put ''cHV0e3dpZHRoOjEwMCV9YXBwLXNhc2pzLWNvbmZpZ3VyYXRvciAudGhpblByb2dyZXNze2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtc2FzanMtY29uZmlndXJhdG9yIC50aGluUHJvZ3Jlc3M6YWZ0ZXJ7dG9wOjB9YXBw''@;'; put 'put ''LWhlYWRlci1hY3Rpb25ze2Rpc3BsYXk6Y29udGVudHN9YXBwLWhlYWRlci1hY3Rpb25zIC5jb3B5UmlnaHR7bWFyZ2luLXRvcDoxMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuY29weVJpZ2h0IHNwYW57d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEw''@;'; put 'put ''MCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fWFwcC1oZWFkZXItYWN0aW9ucyAudXNlci1uYXYtdG9nZ2xle3BhZGRpbmc6MCAxMHB4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBw''@;'; put 'put ''LW5hdi1kcm9wZG93bntwYWRkaW5nLXJpZ2h0OjE1cHg7bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24+YnV0dG9uLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1oZWFkZXIt''@;'; put 'put ''YWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93bj5idXR0b24uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEwcHh9YXBwLWhl''@;'; put 'put ''YWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duPmJ1dHRvbi5kcm9wZG93bi10b2dnbGUgLmJhZGdlLmhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnV7Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJv''@;'; put 'put ''dHRvbTowfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuc2VwYXJhdG9ye21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmRyb3Bkb3duLWl0ZW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjI2cHg7bWFyZ2luLXJpZ2h0OjB9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRj''@;'; put 'put ''aC1pdGVte3BhZGRpbmc6MH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gLnRvZ2dsZS1zd2l0Y2h7bWFyZ2luOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC1oZWFk''@;'; put 'put ''ZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLWxvZ291dHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O3RvcDoxNXB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuZHJvcGRvd24taXRlbSAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21h''@;'; put 'put ''cmdpbjowO2hlaWdodDoxMDAlO3BhZGRpbmc6MTBweCAyMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSBpbnB1dHtpbnNldDowO2N1cnNvcjpwb2ludGVyfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1k''@;'; put 'put ''cm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLWhlYWRlci1hY3Rpb25zIC5kZWJ1Zy10b2dnbGUtbGFiZWx7cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OjQycHh9QG1lZGlhKG1heC13aWR0aDo3NjhweCl7YXBwLWhlYWRlci1hY3Rpb25zIC5zaWRlbmF2LWNvbnRlbnQgYS5uYXYtbGluay5hY3RpdmV7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojNTY1NjU2fX1hcHAtaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5r''@;'; put 'put ''LmQtYmxvY2sgc3Bhbi5iYWRnZXtwb3NpdGlvbjphYnNvbHV0ZX1hcHAtaGVhZGVyLWFjdGlvbnMgLmF2YXRhci1pbWd7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tbGVmdDoxMHB4O2JvcmRlci1yYWRpdXM6NTBweH0uY2xyLWlucHV0LXdyYXBwZXIuc21hbGwtbXQgLmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2x7bWFyZ2luLXRvcDo1cHghaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtde3Njcm9sbGJhci13aWR0aDp0aGluO3Njcm9sbGJhci1jb2xvcjojM2I1MjY4ICMyNzM4NDl9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjExcHh9Ym9keVtj''@;'; put 'put ''ZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNre2JhY2tncm91bmQ6IzNiNTI2OH1ib2R5W2Nkcy10aGVtZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojMjczODQ5O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjozcHggc29saWQg''@;'; put 'put ''IzNiNTI2OH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBjbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojNGVjMGZmfWJvZHksaHRtbHtmb250LXdlaWdodDo0MDAhaW1wb3J0YW50O3BhZGRpbmc6MDttYXJnaW46MH1ib2R5LnNob3VsZC1sb2dpbiBjbHItbW9kYWwsaHRtbC5zaG91bGQtbG9naW4g''@;'; put 'put ''Y2xyLW1vZGFse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gYnV0dG9uOmZvY3Vze291dGxpbmU6bm9uZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBidXR0b246Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjFweCBzb2xpZCByZ2IoMjU1LDI1NSwyNTUpfWJvZHlbY2Rz''@;'; put 'put ''LXRoZW1lPWxpZ2h0XSBidXR0b246Zm9jdXN7b3V0bGluZTpub25lfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBidXR0b246Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjFweCBzb2xpZCByZ2IoMCwwLDApfS5zZWxlY3QtdGFibGUtaWNvbiwuc2VsZWN0LWxpYnJhcnktaWNvbnt3aWR0aDo4MHB4fVtj''@;'; put 'put ''ZHMtdGV4dD1sYWJlbF17Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMCl9W2Nkcy10ZXh0PWxhYmVsTGlua117bGluZS1oZWlnaHQ6MS44IWltcG9ydGFudH1bY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5dOmFmdGVyLFtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXTpiZWZvcmV7ZGlzcGxheTpub25lfS5tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nOjE1cHh9Lm1vZGFsIC5t''@;'; put 'put ''b2RhbC1mb290ZXJ7cGFkZGluZzowIDE1cHggMTVweH0ubG9nLXdyYXBwZXJ7bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJnaW4tdG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2hlaWdodDo0OHZo''@;'; put 'put ''O292ZXJmbG93OmF1dG99LnNsaWRlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMjBweDttYXJnaW4tbGVmdDo3NXB4O21hcmdpbi10b3A6NzBweDtoZWlnaHQ6NXB4O292ZXJmbG93LXg6aGlkZGVufS5saW5le3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6LjQ7YmFja2dyb3VuZDojNzNk''@;'; put 'put ''NTQ0O3dpZHRoOjE1MCU7aGVpZ2h0OjVweH0uc3VibGluZXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiM3M2Q1NDQ7aGVpZ2h0OjVweH0uaW5je2FuaW1hdGlvbjppbmNyZWFzZSAycyBpbmZpbml0ZX0uZGVje2FuaW1hdGlvbjpkZWNyZWFzZSAycyAuNXMgaW5maW5pdGV9QGtleWZy''@;'; put 'put ''YW1lcyBpbmNyZWFzZXswJXtsZWZ0Oi01JTt3aWR0aDo1JX10b3tsZWZ0OjEzMCU7d2lkdGg6MTAwJX19QGtleWZyYW1lcyBkZWNyZWFzZXswJXtsZWZ0Oi04MCU7d2lkdGg6ODAlfXRve2xlZnQ6MTEwJTt3aWR0aDoxMCV9fS5hcHAtbG9hZGluZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6IzMxNDM1MTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoyMDAwO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjB9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNl''@;'; put 'put ''bGVjdDpub25lfS5oLWF1dG97aGVpZ2h0OmF1dG99LmgtdW5zZXQtaXtoZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5taW4taC01MHZoe21pbi1oZWlnaHQ6NTB2aH0uaC0yNHZoLC5oLTI1dmh7aGVpZ2h0OjI1dmh9LmgtNzB2aHtoZWlnaHQ6NzB2aH0uaC04MHZoe2hlaWdodDo4MHZofS5oLTEw''@;'; put 'put ''MHtoZWlnaHQ6MTAwJX0udy01MHZ3e3dpZHRoOjUwdnd9LnctMTAwe3dpZHRoOjEwMCV9LnctMTAwLWl7d2lkdGg6MTAwJSFpbXBvcnRhbnR9LnctNDB7d2lkdGg6NDAlfS5taW4tdy0we21pbi13aWR0aDowcHh9Lm14LTV7bWFyZ2luOjAgNXB4fS5teS01e21hcmdpbjo1cHggMH0ubXktMTV7''@;'; put 'put ''bWFyZ2luOjE1cHggMH0ubXktMTAtbXgtYXV0b3ttYXJnaW46MTBweCBhdXRvfS5tLTB7bWFyZ2luOjAhaW1wb3J0YW50fS5tLTEwe21hcmdpbjoxMHB4fS5tdC0we21hcmdpbi10b3A6MCFpbXBvcnRhbnR9Lm10LTMtbmVnYXRpdmV7bWFyZ2luLXRvcDotM3B4fS5tdC01e21hcmdpbi10b3A6''@;'; put 'put ''NXB4fS5tdC01LWl7bWFyZ2luLXRvcDo1cHghaW1wb3J0YW50fS5tdC0ye21hcmdpbi10b3A6MnB4fS5tdC0yLWl7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fS5tdC0xMHttYXJnaW4tdG9wOjEwcHh9Lm10LTE1e21hcmdpbi10b3A6MTVweH0ubXQtMjB7bWFyZ2luLXRvcDoyMHB4fS5tbC0w''@;'; put 'put ''e21hcmdpbi1sZWZ0OjB9Lm1sLTN7bWFyZ2luLWxlZnQ6M3B4fS5tbC01e21hcmdpbi1sZWZ0OjVweH0ubWwtNS1pe21hcmdpbi1sZWZ0OjVweCFpbXBvcnRhbnR9Lm1sLTEwe21hcmdpbi1sZWZ0OjEwcHh9Lm1sLTE1e21hcmdpbi1sZWZ0OjE1cHh9Lm1sLTIwe21hcmdpbi1sZWZ0OjIwcHh9''@;'; put 'put ''Lm1sLTIwLWl7bWFyZ2luLWxlZnQ6MjBweCFpbXBvcnRhbnR9Lm1yLTB7bWFyZ2luLXJpZ2h0OjB9Lm1yLTV7bWFyZ2luLXJpZ2h0OjVweH0ubXItNWl7bWFyZ2luLXJpZ2h0OjVweCFpbXBvcnRhbnR9Lm1yLTEwe21hcmdpbi1yaWdodDoxMHB4fS5tci0xMnttYXJnaW4tcmlnaHQ6MTJweH0u''@;'; put 'put ''bXItMjB7bWFyZ2luLXJpZ2h0OjIwcHh9Lm1iLTB7bWFyZ2luLWJvdHRvbTowfS5tYi0waXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS5tYi01e21hcmdpbi1ib3R0b206NXB4fS5tYi0xMHttYXJnaW4tYm90dG9tOjEwcHh9Lm1iLTEwLWl7bWFyZ2luLWJvdHRvbToxMHB4IWltcG9ydGFu''@;'; put 'put ''dH0ubWItMTV7bWFyZ2luLWJvdHRvbToxNXB4fS5tYi0yMHttYXJnaW4tYm90dG9tOjIwcHh9Lm1iLTMwe21hcmdpbi1ib3R0b206MzBweH0ucC0we3BhZGRpbmc6MH0ucC0xMHtwYWRkaW5nOjEwcHh9LnBiLTB7cGFkZGluZy1ib3R0b206MH0ucGItMTB7cGFkZGluZy1ib3R0b206MTBweH0u''@;'; put 'put ''cHktNXtwYWRkaW5nOjVweCAwfS5weS0xMHtwYWRkaW5nOjEwcHggMH0uYmFja2dyb3VuZC10cmFuc3BhcmVudHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWl7YmFja2dyb3VuZDp0cmFuc3BhcmVudCFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9bGln''@;'; put 'put ''aHRdIC5jb2xvci1ncmF5e2NvbG9yOiM1YTVhNWF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1kYXJrLWdyYXl7Y29sb3I6IzQ5NTk2N31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbG9yLWRhcmtlci1ncmF5e2NvbG9yOiMzMTQzNTF9LmNvbG9yLXdoaXRle2NvbG9yOiNmZmZ9LmNv''@;'; put 'put ''bG9yLXdoaXRlLWl7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbG9yLWdyZWVue2NvbG9yOiM0YjllNGJ9LmNvbG9yLWRjLWdyZWVue2NvbG9yOiM4MWI0NDB9LmNvbG9yLXJlZHtjb2xvcjojZTQ1NDU0fS5jb2xvci1vcmFuZ2V7Y29sb3I6I2U2N2UyMn0uY29sb3ItYmx1ZXtjb2xvcjojM2Y4''@;'; put 'put ''Y2MzfS5jb2xvci15ZWxsb3d7Y29sb3I6I2YxYzQwZn0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1kZWZ1YWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3ItZGVmYXVsdC1pe2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudHtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmZvbnQtc2l6ZS0xNXtmb250LXNpemU6MTVweH0u''@;'; put 'put ''Zm9udC1zaXplLTE4e2ZvbnQtc2l6ZToxOHB4fS5mb250LWJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5mb250LWJvbGQtaXtmb250LXdlaWdodDo3MDAhaW1wb3J0YW50fS5mb250LXdlaWdodC0zMDB7Zm9udC13ZWlnaHQ6MzAwfS5mb250LXdlaWdodC03MDB7Zm9udC13ZWlnaHQ6NzAwfS53b3Jk''@;'; put 'put ''LWJyZWFre3dvcmQtYnJlYWs6YnJlYWstd29yZH0ud29yZC1icmVhay1hbGx7d29yZC1icmVhazpicmVhay1hbGx9LnBvc2l0aW9uLXJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5wb3NpdGlvbi1hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZC1ub25le2Rpc3BsYXk6bm9uZX0uZC1i''@;'; put 'put ''bG9ja3tkaXNwbGF5OmJsb2NrfS5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZC1mbGV4e2Rpc3BsYXk6ZmxleH0uZC1jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4LXVuc2V0e2ZsZXg6dW5zZXR9LmFsaWduLXNlbGYtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmR9''@;'; put 'put ''LmFsaWduLXNlbGYtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5hbGlnbi1pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXItaXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5qdXN0aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJl''@;'; put 'put ''dHdlZW59Lmp1c3RpZnktY29udGVudC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZ2FwLTV7Z2FwOjVweH0uY2xyLWdhcC0we2dhcDowfS5vdmVyZmxvdy1hdXRve292ZXJmbG93OmF1dG99LnotaW5k''@;'; put 'put ''ZXgtaGlnaGVzdHt6LWluZGV4OjEwMDAwMDAwfS52ZXJ0aWNhbC1hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pY29uLWRjLWZpbGx7ZmlsbDojODFiNDQwfS5kYXRhZ3JpZC1jdXN0b20tZm9vdGVyIC5kYXRhZ3JpZC1vdXRlci13cmFwcGVyLC50ZXh0LWFyZWEtZnVsbC13''@;'; put 'put ''aWR0aCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLC50ZXh0LWFyZWEtZnVsbC13aWR0aCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCV9LnRleHQtYXJlYS1mdWxsLXdpZHRoIGNsci10ZXh0YXJlYS1jb250YWluZXJ7bWFyZ2luOjAhaW1wb3J0YW50fS50ZXh0LWFy''@;'; put 'put ''ZWEtZnVsbC13aWR0aCAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luOjAhaW1wb3J0YW50fS5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6LTZweCFpbXBvcnRhbnQ7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O3otaW5kZXg6MTAwMDAhaW1wb3J0YW50fS5wcm9ncmVzcywucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6I2Y1ZjZmZTtib3JkZXItcmFkaXVzOjA7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjZweDttYXJnaW46MDttYXgtaGVpZ2h0Oi41ODMzMzNyZW07bWluLWhlaWdodDouMTY2NjY3cmVtO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dp''@;'; put 'put ''ZHRoOmNhbGMoMTAwJSAtIDYzcHgpfS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Y29udGVudDoiICI7dG9wOi4xNjY2NjdyZW07Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjojNjBiNTE1O3dpZHRoOjc1JX0uYmFkZ2Utd2FybmluZ3tjb2xvcjojZmZmIWltcG9ydGFudH0uY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSAuY2FyZC1oZWFkZXIgaDN7bWFyZ2luLXRvcDoxMHB4fS5tb2RhbC1oZWFkZXItLWFjY2Vz''@;'; put 'put ''c2libGV7cGFkZGluZzoxNXB4IDE1cHggMH0ubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LnNob3ctY2xvc2UgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246''@;'; put 'put ''cmVsYXRpdmU7dG9wOi0xOHB4O3JpZ2h0Oi0xMHB4fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2Q5NGIyZTtjb2xvcjojZmZmO2JvcmRlcjpub25lfS5jYXJkLWhlYWRlcntmb250LXdlaWdodDozMDB9LnNlbGVjdCBzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bToxcHggc29saWQgIzQ5NTk2NztiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsdHJhbnNwYXJlbnQgOTUlLCM0OTVhNjcgMCkgbm8tcmVwZWF0fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6LjJyZW0haW1wb3J0YW50fS50YWJsZS1hY3RpdmU6Zm9jdXN7YmFj''@;'; put 'put ''a2dyb3VuZDojZDhlM2U5fWNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItY29udHJvbC1jb250YWluZXIsY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyLGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHt3aWR0aDoxMDAlfXRi''@;'; put 'put ''b2R5e2ZvbnQtd2VpZ2h0OjQwMH1oMyxoNHtjb2xvcjojNTg1ODU4O2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MXJlbTttYXJnaW4tdG9wOjFyZW07bWFyZ2luLWJvdHRvbTowfWgxLGgye2NvbG9yOiM1ODU4NTg7Zm9udC13ZWlnaHQ6NDAwO2xl''@;'; put 'put ''dHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoycmVtO21hcmdpbi10b3A6MXJlbTttYXJnaW4tYm90dG9tOjB9Y2xyLWljb24uaXMtaW5mb3tmaWxsOiM4MGI0NDF9LmRhdGFncmlkLWhvc3QsLmRhdGFncmlkLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3Bs''@;'; put 'put ''YXk6LXdlYmtpdC1ib3ghaW1wb3J0YW50fS5idG4gLmNsci1sb2FkaW5nLWJ0bi1jb250ZW50e2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmJ0bi5idG4tZGFuZ2VyLC5idG4uYnRuLXdhcm5pbmd7Ym9yZGVyLWNvbG9yOiNlZjRmMmU7YmFja2dyb3VuZC1jb2xvcjojZDk0YjJlO2NvbG9yOiNm''@;'; put 'put ''ZmZ9LmJ0bi5idG4tc206aGFzKGNsci1pY29uKXtsaW5lLWhlaWdodDoyfS5kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uY2xyLWZsZXgtMXtmbGV4OjF9LmNsci1mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59''@;'; put 'put ''LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmJvcmRlci0we2JvcmRlcjowfS5ib3gtc2hhZG93LW5vbmV7Ym94LXNoYWRvdzpub25lfS5ib3gtc2hhZG93LW5vbmUtaXtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5odEN1c3RvbUhpZGRlbntkaXNwbGF5Om5vbmV9Ym9keVtj''@;'; put 'put ''ZHMtdGhlbWU9ZGFya10gLmh0RGFya3tiYWNrZ3JvdW5kOiM4ODg7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIC5odERhcmt7YmFja2dyb3VuZDojM2M1NjYyO2NvbG9yOiNlZWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuZGFya1RI''@;'; put 'put ''Om5vdCgucHJpbWFyeUtleUhlYWRlclN0eWxlKXtiYWNrZ3JvdW5kOiM0ODdkOTY7Y29sb3I6I2VlZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIC5kYXJrVEguaHRfX2hpZ2hsaWdodHtiYWNrZ3JvdW5kOiMzYjZiODF9LmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVB''@;'; put 'put ''cnJvd3tjb2xvcjojODI4MjgyfS5oYW5kc29udGFibGUubGlzdGJveHtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwfS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlkLC5oYW5kc29udGFibGUgdGQuZGMtaW52YWxpZC1jZWxse2JhY2tncm91bmQ6I2U2MjcwMGFkIWltcG9ydGFudDti''@;'; put 'put ''b3JkZXI6MXB4IHNvbGlkIHJlZCFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAubnVtZXJpY0xpc3Rib3h7dGV4dC1hbGlnbjpyaWdodH0ubWFyZ2luLXRvcC0yMHttYXJnaW4tdG9wOjIwcHh9LmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51bnZp''@;'; put 'put ''c2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm5vLWJvcmRlcnN7Ym9yZGVyOjB9LmNhcmQubm8tYm9yZGVycywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWJvcmRlcnMgLmNhcmQtZm9vdGVyLC5jYXJkLm5vLWlubmVy''@;'; put 'put ''LWJvcmRlcnMgLmNhcmQtaGVhZGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtYmxvY2ssLmNhcmQubm8taW5uZXItYm9yZGVycyAuY2FyZC1mb290ZXJ7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfUBtZWRpYShtaW4td2lkdGg6NTc2cHgpey5kLXNtLW5vbmV7ZGlzcGxheTpub25l''@;'; put 'put ''IWltcG9ydGFudH0uZC1zbS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLXNtLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtc20tYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtc20tdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBv''@;'; put 'put ''cnRhbnR9LmQtc20tdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLXNtLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1zbS1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtc20tY29sdW1ue2ZsZXgtZGlyZWN0''@;'; put 'put ''aW9uOmNvbHVtbn0uY2xyLWZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1zbS01e2dhcDo1cHh9LmNsci1nYXAtc20tMHtnYXA6MH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCl7LmQtbWQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLW1kLWlubGluZXtkaXNw''@;'; put 'put ''bGF5OmlubGluZSFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1tZC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1tZC10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1tZC10YWJsZS1jZWxse2Rpc3Bs''@;'; put 'put ''YXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtbWQtZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLW1kLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1tZC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1tZC1yb3d7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLW1kLTV7Z2FwOjVweH0uY2xyLWdhcC1tZC0we2dhcDowfX1AbWVkaWEobWluLXdpZHRoOjk5MnB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtbGctaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1sZy1p''@;'; put 'put ''bmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLWxnLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLWxnLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1s''@;'; put 'put ''Zy1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAt''@;'; put 'put ''bGctNXtnYXA6NXB4fS5jbHItZ2FwLWxnLTB7Z2FwOjB9fS5kYXRhZ3JpZC1ib2R5e3BhZGRpbmctYm90dG9tOjJyZW0haW1wb3J0YW50fS5hYm9ydE1zZ3t3aGl0ZS1zcGFjZTpwcmUtd3JhcDtmb250LWZhbWlseTptb25vc3BhY2V9I2dyYXBoIHN2Z3toZWlnaHQ6MTAwJTt3aWR0aDoxMDAl''@;'; put 'put ''fS5uby10YWJsZS1zZWxlY3RlZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRl''@;'; put 'put ''eDoxMDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowfS5jb3B5UmlnaHR7YmFja2dyb3VuZDojNDk1OTY3IWltcG9ydGFudDtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMCA0''@;'; put 'put ''cHg7ei1pbmRleDoxMDB9Lm5hdi10cmVlPmNsci10cmVlLW5vZGUuY2xyLWV4cGFuZGVke2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1jbHItdHJlZS1ub2Rle292ZXJmbG93LXk6dmlzaWJsZX1jbHItdHJlZS1ub2RlOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9Y2xyLXRy''@;'; put 'put ''ZWUtbm9kZSAuY2xyLXRyZWVub2RlLWNhcmV0e3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudH1jbHItdHJlZS1ub2RlIC5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7cGFkZGluZzowIDhweDt3aWR0aDphdXRvO2hlaWdodDphdXRvO2FsaWduLWl0ZW1z''@;'; put 'put ''OmNlbnRlcn1jbHItdHJlZS1ub2RlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IHB7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWFyY2gtbm9kZXttYXJnaW4tYm90dG9tOjVweH0udHJlZS1z''@;'; put 'put ''ZWFyY2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luOjB9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7cmln''@;'; put 'put ''aHQ6MDtib3R0b206MDttYXJnaW46MCAwIDNweDtjdXJzb3I6cG9pbnRlcn0uY2xyLXRyZWUtbm9kZXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0uY29udGVudC1jb250YWluZXJ7d2lkdGg6MTAwJX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7Lnd0SG9sZGVye3dpZHRoOjEwMCUh''@;'; put 'put ''aW1wb3J0YW50fX1pbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bm9uZSksKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Y2xyLXRyZWUtbm9kZS5jbHItZXhwYW5kZWR7cGFkZGluZy1ib3R0b206MjBweDttaW4taGVpZ2h0''@;'; put 'put ''OmF1dG99LmNsci10cmVlLW5vZGV7bWluLWhlaWdodDoyNHB4fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCBjbHItaWNvbnttaW4td2lkdGg6MTZweDtt''@;'; put 'put ''aW4taGVpZ2h0OjE2cHh9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257Ym90dG9tOjJweH0uY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNvbnRlbnQtYXJlYT4uY2FyZHttYXJnaW4tYm90dG9tOjIwcHh9LnJlY29yZC1lZGl0LW1vZGFsIHRleHRhcmVhe21pbi1oZWlnaHQ6''@;'; put 'put ''NDJweH19LmJvcmRlci1ib3R0b20tZGl2aWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDNkM2QzfS5sb2FkaW5nU3Bpbm5lcntoZWlnaHQ6NzB2aDtmbGV4OjE7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1z''@;'; put 'put ''OmNlbnRlcn0uZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2Vyey13ZWJraXQtdGV4dC1zZWN1cml0eTpkaXNjOy1tb3otdGV4dC1zZWN1cml0eTpkaXNjO3RleHQtc2VjdXJpdHk6ZGlzYztmb250LWZhbWlseTp0ZXh0LXNlY3VyaXR5LWRpc2N9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfWhy''@;'; put 'put ''LmxpZ2h0e2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZWRlZGV9LnNwaW5uZXJ7YmFja2dyb3VuZDp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L3NwaW5uZXIuMTZmNzYzY2ViYzZiNjRkZi1zdmcpIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9jYXJldC42NWYxZmMwYWNiZTRjN2ZmLXN2ZykhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC50''@;'; put 'put ''YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNrZ3JvdW5kOiMyMTMzM2J9LnRhYmxlLXNlYXJjaC13cmFwcGVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWluLXdpZHRoOjE3MHB4fS50YWJsZS1zZWFy''@;'; put 'put ''Y2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBjbHItaWNvbiwudGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgLnNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTlweDt0b3A6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgY2xyLWljb257Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXJ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIFtuYW1lPXNlYXJjaC1pbnB1dF17cGFkZGluZy1yaWdodDoyNXB4fS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVye21hcmdpbi10b3A6LTVweDttYXJnaW4tcmlnaHQ6MH0udGFi''@;'; put 'put ''bGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lciBsYWJlbHtkaXNwbGF5Om5vbmV9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1jaGVja2JveC1jb250YWluZXJ7bWFyZ2luLXRvcDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1''@;'; put 'put ''dHRvbiwudGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0W3R5cGU9bnVtYmVyXXstbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkfS5kYy1s''@;'; put 'put ''b2NrZWQtY29udHJvbHtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnR9LmxpbmstaXR7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0K'';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=text-security-disc.f758130bc0ffc111-woff; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''d09GRgABAAAAAAusAAsAAAAAMGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZjRmM5Y21hcAAAAYQAAAgCAAArYmjjYVVnbHlmAAAJiAAAAEEAAABQiOYj2mhlYWQAAAnMAAAALgAAADYR8XmmaGhlYQAACfwAAAAcAAAAJAqNAyNo''@;'; put 'put ''bXR4AAAKGAAAAAgAAAAIAyAAAGxvY2EAAAogAAAABgAAAAYAKAAAbWF4cAAACigAAAAeAAAAIAEOACJuYW1lAAAKSAAAAUIAAAKOcN63t3Bvc3QAAAuMAAAAHQAAAC5lhHRpeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGSc''@;'; put 'put ''wDiBgZWBgSGVtYKBgVECQjMfYEhiYmFgYGJgZWbACgLSXFMYHIAq/rNfAHK3gEmgASACAIekCT4AAHic7dhl0zDVmUXh5+XFHYK7E0IguFtwt4QQgmtwd3d3d7cED+4SXIO7u7vbsNfaUzU1fyGcu66u1adOf+6uHhgYGGpgYGDwL37/iyEHBoZZcWDQLzUw9NK/7A5if/DA8OwPOfQknBky+0P8''@;'; put 'put ''/PPPOcd1UJ785frr/Dq/zq/z6/w3zsCgoX/xX74GRsxbcYpRB1iDB/7PGvT/DFGDenBwe8hKD1XpoSs9TKWHrfRwlR6+0iNUesRKj1TpkSs9SqVHrfRolR690r+p9BiVHrPSY1V67EqPU+lxKz1epcev9ASVnrDSE1V64kpPUulJKz1ZpSev9BSVnrLSU1V66kr/ttLTVPp3lZ62/KJSerpKT1/p''@;'; put 'put ''P1R6hkrPWOmZKj1zpWep9KyVnq3Ss1d6jkrPWem5Kj13peep9LyVnq/S81d6gUr/sdILVnqhSi9c6UUqvWilF6v04pVeotJLVnqpSi9d6WUqvWyll6v08pVeodIrVvpPlf5zpVeq9F8qvXKl/1rpVSr9t0qvWunVKr16pdeo9JqVXqvSa1d6nUqvW+n1Kr1+pTeo9N8rvWGlN6r0xpXepNKbVnqz''@;'; put 'put ''Sm9e6S0qvWWlt6r01pXeptLbVnq7Sm9f6R0qvWOld6r0zpXepdK7Vnq3Su9e6T0qvWel96r03pXep9L7Vnq/Su9f6QMqfWClD6r0wZU+pNKHVvqwSh9e6SMqfWSlj6r00ZU+ptLHVvq4Sh9f6RMqfWKlT6r0yZU+pdKnVvq0Sp9e6TMqfWalz6r02ZU+p9LnVvq8Sp9f6QsqfWGl/1Hpf1b6okpf''@;'; put 'put ''XOlLKn1ppS+r9OWVvqLS/6r0lZW+qtJXV/qaSl9b6esqfX2lb6j0jZW+qdI3V/qWSt9a6dsqfXul76j0vyt9Z6XvqvTdlb6n0vdW+r5K31/pByr9YKUfqvTDlX6k0v+p9KOVfqzSj1f6iUo/WemnKv10pZ+p9LOVfq7Sz1f6hUq/WOmXKv1ypV+p9KuVfq3Sr1f6jUq/Wem3Kv12pd+p9LuVfq/S''@;'; put 'put ''71f6g0p/WOmPKv1xpT+p9KeV/qzSn1f6i0p/WemvKv11pb+p9LeV/q7S31f6h0r/WOmfKv1zDfI26KKHED1Y9JCihxI9tOhhRA8rejjRw4seQfSIokcSPbLoUUSPKno00aOL/o3oMUSPKXos0WOLHkf0uKLHEz2+6AlETyh6ItETi55E9KSiJxM9uegpRE8peirRU4v+rehpRP9O9LSify96OtHT''@;'; put 'put ''i/6D6BlEzyh6JtEzi55F9KyiZxM9u+g5RM8pei7Rc4ueR/S8oucTPb/oBUT/UfSCohcSvbDoRUQvKnox0YuLXkL0kqKXEr206GVELyt6OdHLi15B9Iqi/yT6z6JXEv0X0SuL/qvoVUT/TfSqolcTvbroNUSvKXot0WuLXkf0uqLXE72+6A1E/130hqI3Er2x6E1Ebyp6M9Gbi95C9JaitxK9teht''@;'; put 'put ''RG8rejvR24veQfSOoncSvbPoXUTvKno30buL3kP0nqL3Er236H1E7yt6P9H7iz5A9IGiDxJ9sOhDRB8q+jDRh4s+QvSRoo8SfbToY0QfK/o40ceLPkH0iaJPEn2y6FNEnyr6NNGniz5D9JmizxJ9tuhzRJ8r+jzR54u+QPSFov8h+p+iLxJ9sehLRF8q+jLRl4u+QvS/RF8p+irRV4u+RvS1oq8T''@;'; put 'put ''fb3oG0TfKPom0TeLvkX0raJvE3276DtE/1v0naLvEn236HtE3yv6PtH3i35A9IOiHxL9sOhHRP9H9KOiHxP9uOgnRD8p+inRT4t+RvSzop8T/bzoF0S/KPol0S+LfkX0q6JfE/266DdEvyn6LdFvi35H9Lui3xP9vugPRH8o+iPRH4v+RPSnoj8T/bnoL0R/Kfor0V+L/kb0t6K/E/296B9E/yj6''@;'; put 'put ''J9E/K/2/v/npoocQPVj0kKKHEj206GFEDyt6ONHDix5B9IiiRxI9suhRRI8qejTRo4v+jegxRI8peizRY4seR/S4oscTPb7oCURPKHoi0ROLnkT0pKInEz256ClETyl6KtFTi/6t6GlE/070tKJ/L3o60dOL/oPoGUTPKHom0TOLnkX0rKJnEz276DlEzyl6LtFzi55H9Lyi5xM9v+gFRP9R9IKi''@;'; put 'put ''FxK9sOhFRC8qejHRi4teQvSSopcSvbToZUQvK3o50cuLXkH0iqL/JPrPolcS/RfRK4v+q+hVRP9N9KqiVxO9uug1RK8pei3Ra4teR/S6otcTvb7oDUT/XfSGojcSvbHoTURvKnoz0ZuL3kL0lqK3Er216G1Ebyt6O9Hbi95B9I6idxK9s+hdRO8qejfRu4veQ/SeovcSvbfofUTvK3o/0fuLPkD0''@;'; put 'put ''gaIPEn2w6ENEHyr6MNGHiz5C9JGijxJ9tOhjRB8r+jjRx4s+QfSJok8SfbLoU0SfKvo00aeLPkP0maLPEn226HNEnyv6PNHni75A9IWi/yH6n6IvEn2x6EtEXyr6MtGXi75C9L9EXyn6KtFXi75G9LWirxN9vegbRN8o+ibRN4u+RfStom8TfbvoO0T/W/Sdou8Sfbfoe0TfK/o+0feLfkD0g6If''@;'; put 'put ''Ev2w6EdE/0f0o6IfE/246CdEPyn6KdFPi35G9LOinxP9vOgXRL8o+iXRL4t+RfSrol8T/broN0S/Kfot0W+Lfkf0u6LfE/2+6A9Efyj6I9Efi/5E9KeiPxP9uegvRH8p+ivRX4v+RvS3or8T/b3oH0T/KPon0T9rYND/AOaSEScAAHicY2BiAAKmPSy+QEqUgYFRUURcTFzMyNzM3MxEXU1dTYmd''@;'; put 'put ''jZ2NccK/K5oaLm6L3Fw0NOEMZoVAFD6IAQD4PA9iAAAAeJxjYGRgYADilrme/fH8Nl8ZuNkvAEUYbnDPcEOmmfaw+AIpDgYmEA8AHMMJGAAAeJxjYGRgYL/AAATMCiCSaQ8DIwMqYAIAK/QBvQAAAAADIAAAAAAAAAAoAAB4nGNgZGBgYGIQA2IGMIuBgQsIGRj+g/kMAArUATEAAHicjY69TsMw''@;'; put 'put ''FIWP+4doJYSKhMTmoUJIqOnPWIm1ZWDq0IEtTZw2VRpHjlu1D8A7MPMczAw8DM/AifFEl9qS9d1zzr3XAK7xBYHqCHTdW50aLlj9cZ1057lBfvTcRAdPnlvUnz23mXj13MEN3jhBNC6p9PDuuYYrfHquU//23CD/eG7iVnQ9t9ATD57bWIgXzx3ciw+rDrZfqmhnUnvsx2kZzdVql4Xm1DhVFsqU''@;'; put 'put ''qc7lKBiemjOVKxNaFcvlUZb71djaRCZGb+VU51ZlmZaF0RsV2WBtbTEZDBKvB5HewkLhwLePkhRhB4OU9ZFKTCqpzems6GQI6Z7TcU5mQceQUmjkkBghwPCszhmd3HWHLh+ze8mEpLvnT8dULRLWCTMaW9LUbanSGa+mUjhv47ZY7l67rgITDHiTf/mAKU76BTuXfk8AAHicY2BigAARBuyAiZGJ''@;'; put 'put ''kZmBJSWzOJmBAQALQwHHAAAA'';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=datacontroller-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iMTY5MCIgaGVpZ2h0PSIyNDAiIHZpZXdCb3g9IjAgMCAxNjkwIDI0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwNV83KSI+CjxwYXRoIGQ9Ik0xMjQuOSA1NS4yMDAxQzEyOC4y''@;'; put 'put ''IDU1LjYwMDEgMTMxLjQgNTUuOTAwMSAxMzQuNyA1Ni4zMDAxQzE0Mi42IDU3LjQwMDEgMTUwLjMgNTguOTAwMSAxNTcuNSA2Mi42MDAxQzE1OS42IDYzLjcwMDEgMTYxLjYgNjQuOTAwMSAxNjMuMSA2Ni44MDAxQzE2NS41IDY5LjYwMDEgMTY1LjQgNzIuNjAwMSAxNjMgNzUuNDAwMUMxNjAu''@;'; put 'put ''NSA3OC4yMDAxIDE1Ny4zIDc5LjgwMDEgMTUzLjkgODEuMTAwMUMxNDYgODQuMjAwMSAxMzcuNyA4NS42MDAxIDEyOS4zIDg2LjMwMDFDMTE1LjYgODcuNDAwMSAxMDIuMSA4Ni45MDAxIDg4LjcgODMuNzAwMUM4NC4zIDgyLjcwMDEgODAgODEuMzAwMSA3Ni4xIDc5LjEwMDFDNzQuNiA3OC4z''@;'; put 'put ''MDAxIDczLjIgNzcuMzAwMSA3MS45IDc2LjEwMDFDNjguMyA3Mi42MDAxIDY4LjMgNjguOTAwMSA3MiA2NS42MDAxQzc2IDYyLjAwMDEgODAuOSA2MC4zMDAxIDg1LjkgNTguOTAwMUM5Mi45IDU2LjkwMDEgMTAwIDU1LjkwMDEgMTA3LjIgNTUuNDAwMUMxMDcuOCA1NS40MDAxIDEwOC41IDU1''@;'; put 'put ''LjYwMDEgMTA5IDU1LjEwMDFDMTE0LjIgNTUuMjAwMSAxMTkuNiA1NS4yMDAxIDEyNC45IDU1LjIwMDFaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik02OS4yMDAxIDEzNy4zQzc1LjYwMDEgMTQ1LjUgODQuNzAwMSAxNDguNSA5NC4xMDAxIDE1MC41QzExMi43IDE1NC41IDEzMS4zIDE1''@;'; put 'put ''NCAxNDkuNCAxNDcuNkMxNTUgMTQ1LjYgMTYwLjIgMTQyLjkgMTYzLjkgMTM3LjlDMTY0LjUgMTM3LjEgMTY0LjggMTM3LjUgMTY1LjEgMTM4LjFDMTY1LjcgMTM5LjQgMTY2IDE0MC43IDE2NiAxNDIuMUMxNjYgMTQ3IDE2NiAxNTIgMTY2IDE1Ni45QzE2NiAxNjAuMSAxNjQuNSAxNjIuNiAx''@;'; put 'put ''NjIuMyAxNjQuOEMxNTcuNyAxNjkuNCAxNTEuOSAxNzEuOSAxNDUuOCAxNzMuOEMxMzMuNSAxNzcuNiAxMjAuOSAxNzguNCAxMDguMiAxNzcuNUM5OC43MDAxIDE3Ni44IDg5LjUgMTc1IDgwLjggMTcxLjFDNzcuMSAxNjkuNCA3My43MDAxIDE2Ny40IDcxLjAwMDEgMTY0LjNDNjguOTAwMSAx''@;'; put 'put ''NjEuOSA2Ny44IDE1OS4yIDY3LjggMTU2QzY3LjkgMTUxLjUgNjcuOCAxNDcgNjcuOCAxNDIuNUM2Ny44IDE0MC43IDY4LjEwMDEgMTM5IDY5LjIwMDEgMTM3LjNaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik02OS4yOTk5IDEwNi40Qzc0LjU5OTkgMTEzLjUgODEuOTk5OSAxMTYuNSA4''@;'; put 'put ''OS44OTk5IDExOC42QzEwOC44IDEyMy42IDEyNy43IDEyMy41IDE0Ni40IDExNy45QzE1Mi42IDExNi4xIDE1OC40IDExMy40IDE2Mi45IDEwOC41QzE2My41IDEwNy45IDE2My45IDEwNi41IDE2NC42IDEwNi43QzE2NS42IDEwNyAxNjUuNiAxMDguNCAxNjUuOSAxMDkuNUMxNjYuMyAxMTEu''@;'; put 'put ''MiAxNjYuMSAxMTIuOSAxNjYuMSAxMTQuNkMxNjYuMSAxMTggMTY2IDEyMS4zIDE2Ni4xIDEyNC43QzE2Ni4zIDEyOC45IDE2NC42IDEzMi4yIDE2MS41IDEzNC45QzE1Ni44IDEzOS4xIDE1MS4xIDE0MS42IDE0NSAxNDMuMkMxMjQuNSAxNDguNyAxMDQuMSAxNDguNiA4My45OTk5IDE0MS42''@;'; put 'put ''Qzc5LjA5OTkgMTM5LjkgNzQuNTk5OSAxMzcuNSA3MC45OTk5IDEzMy42QzY4Ljc5OTkgMTMxLjIgNjcuNyAxMjguNCA2Ny43IDEyNS4xQzY3LjggMTIwLjcgNjcuNyAxMTYuMiA2Ny43IDExMS44QzY3LjggMTEwIDY4LjA5OTkgMTA4LjIgNjkuMjk5OSAxMDYuNFoiIGZpbGw9IiNFMEUwRTAi''@;'; put 'put ''Lz4KPHBhdGggZD0iTTY5LjEgNzYuN0M3MC42IDgxLjEgNzQuMiA4My4wOTk5IDc4IDg0Ljg5OTlDODQuOCA4OC4wOTk5IDkyLjEgODkuNiA5OS40IDkwLjVDMTEzLjkgOTIuMyAxMjguNCA5Mi4xIDE0Mi43IDg5LjFDMTQ4LjUgODcuOSAxNTQuMSA4Ni4zIDE1OS4yIDgzLjFDMTYyLjEgODEu''@;'; put 'put ''MyAxNjMuNiA3OS42IDE2NC42IDc2LjhDMTY1LjYgNzguMiAxNjUuOSA3OS43IDE2NS45IDgxLjJDMTY1LjkgODYuMiAxNjYgOTEuMSAxNjUuOSA5Ni4xQzE2NS44IDEwMC4zIDE2My40IDEwMy4zIDE2MC4zIDEwNS44QzE1NC41IDExMC40IDE0Ny43IDExMi44IDE0MC42IDExNC40QzEyMS44''@;'; put 'put ''IDExOC41IDEwMy4yIDExOC4yIDg0LjkgMTEyQzgwLjEgMTEwLjQgNzUuNSAxMDguMSA3MS44IDEwNC41QzY5IDEwMS44IDY3LjUgOTguNyA2Ny42IDk0LjdDNjcuNyA5MC40IDY3LjYgODYuMSA2Ny42IDgxLjhDNjcuOCA3OS45IDY4LjEgNzguMyA2OS4xIDc2LjdaIiBmaWxsPSIjOEVDNjNG''@;'; put 'put ''Ii8+CjxwYXRoIGQ9Ik0xODMuOSAyMTAuOUMyMDAuMiAyMTEuOCAyMDguOSAxOTEuOCAxOTcuMSAxODAuNUMxODQuNyAxNjguNiAxNjQuMyAxNzkuNyAxNjcuNSAxOTYuNUM5My44IDI0My41IC0wLjk5OTk4MSAxNzMuMiAyNiA4Ny44MDAxTDcuODAwMDIgNzUuNjAwMUMtMzMuMSAxODQuMyA5''@;'; put 'put ''Mi44IDI3Ni4yIDE4My45IDIxMC45Wk0xNzguNyAxODcuNEMxODYuMyAxNzkuNSAxOTguNCAxOTAuNSAxOTEuMyAxOTguOEMxODMuOCAyMDcuNSAxNzAuNiAxOTUuOCAxNzguNyAxODcuNFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTM1LjIgNTAuNzAwMUM0Ni45IDYxLjkwMDEgNjYu''@;'; put 'put ''MiA1Mi43MDAxIDY1LjEgMzYuNzAwMUMxMzguNyAtMTAuNyAyMzQgNTkuNTAwMSAyMDcgMTQ1LjJMMjI1LjIgMTU3LjRDMjY0LjkgNTEuODAwMSAxNDQuNCAtNDMuMjk5OSA1MS4yIDIwLjYwMDFDMzMuNyAxNy4wMDAxIDIyLjQgMzguNDAwMSAzNS4yIDUwLjcwMDFaTTUzLjYgNDMuODAwMUM0''@;'; put 'put ''NS44IDUxLjkwMDEgMzMuNSA0MC4xMDAxIDQxLjMgMzIuMDAwMUM0OS4xIDIzLjkwMDEgNjEuNCAzNS43MDAxIDUzLjYgNDMuODAwMVoiIGZpbGw9IiM4RUM2M0YiLz4KPHBhdGggZD0iTTMyMy41NzUgNDcuODg3NEMzMjMuNTc1IDQ2Ljc5MDEgMzIzLjkxNyA0NS44OTg1IDMyNC42MDMgNDUu''@;'; put 'put ''MjEyN0MzMjUuNDI2IDQ0LjM4OTcgMzI2LjM4NiA0My45NzgyIDMyNy40ODQgNDMuOTc4MkgzNjkuMDQ0QzM3OC45MiA0My45NzgyIDM4OC4wNDEgNDUuNzYxMyAzOTYuNDA4IDQ5LjMyNzZDNDA0LjkxMyA1Mi44OTM4IDQxMi4yNTEgNTcuOTAwMyA0MTguNDIzIDY0LjM0N0M0MjQuNTk2IDcw''@;'; put 'put ''LjY1NjUgNDI5LjQ2NSA3OC4yMDA1IDQzMy4wMzEgODYuOTc5QzQzNi41OTcgOTUuNzU3NSA0MzguMzggMTA1LjQyOCA0MzguMzggMTE1Ljk4OUM0MzguMzggMTI2LjU1MSA0MzYuNTk3IDEzNi4yMjEgNDMzLjAzMSAxNDQuOTk5QzQyOS40NjUgMTUzLjc3OCA0MjQuNTk2IDE2MS4zOSA0MTgu''@;'; put 'put ''NDIzIDE2Ny44MzdDNDEyLjI1MSAxNzQuMTQ2IDQwNC45MTMgMTc5LjA4NCAzOTYuNDA4IDE4Mi42NTFDMzg4LjA0MSAxODYuMjE3IDM3OC45MiAxODggMzY5LjA0NCAxODhIMzI3LjQ4NEMzMjYuMzg2IDE4OCAzMjUuNDI2IDE4Ny42NTcgMzI0LjYwMyAxODYuOTcxQzMyMy45MTcgMTg2LjE0''@;'; put 'put ''OCAzMjMuNTc1IDE4NS4xODggMzIzLjU3NSAxODQuMDkxVjQ3Ljg4NzRaTTM0OS4yOTMgNjkuMjg0OVYxNjIuNjkzSDM2OS42NjJDMzc1LjgzNCAxNjIuNjkzIDM4MS40NTggMTYxLjUyNyAzODYuNTMzIDE1OS4xOTZDMzkxLjYwOCAxNTYuODY0IDM5NS45MjggMTUzLjY0MSAzOTkuNDk1IDE0''@;'; put 'put ''OS41MjZDNDAzLjE5OCAxNDUuNDExIDQwNi4wMSAxNDAuNTQxIDQwNy45MyAxMzQuOTE4QzQwOS45ODggMTI5LjE1NyA0MTEuMDE2IDEyMi44NDcgNDExLjAxNiAxMTUuOTg5QzQxMS4wMTYgMTA5LjI2OCA0MDkuOTg4IDEwMy4wMjcgNDA3LjkzIDk3LjI2NjNDNDA2LjAxIDkxLjUwNTQgNDAz''@;'; put 'put ''LjE5OCA4Ni41Njc1IDM5OS40OTUgODIuNDUyNkMzOTUuOTI4IDc4LjMzNzcgMzkxLjYwOCA3NS4xMTQzIDM4Ni41MzMgNzIuNzgyNkMzODEuNDU4IDcwLjQ1MDggMzc1LjgzNCA2OS4yODQ5IDM2OS42NjIgNjkuMjg0OUgzNDkuMjkzWk01MzEuMDkzIDE3Ny45MThDNTI3LjM4OSAxODAuNjYy''@;'; put 'put ''IDUyMy4xMzcgMTgzLjEzMSA1MTguMzM3IDE4NS4zMjVDNTEzLjUzNiAxODcuMzgzIDUwOC43MzUgMTg4LjQxMSA1MDMuOTM1IDE4OC40MTFDNDk2LjgwMiAxODguNDExIDQ5MC4yMTggMTg3LjEwOCA0ODQuMTgzIDE4NC41MDJDNDc4LjE0OCAxODEuODk2IDQ3Mi45MzYgMTc4LjI2MSA0Njgu''@;'; put 'put ''NTQ2IDE3My41OThDNDY0LjI5NCAxNjguOTM0IDQ2MC45MzQgMTYzLjQ0OCA0NTguNDY1IDE1Ny4xMzhDNDU1Ljk5NiAxNTAuODI5IDQ1NC43NjEgMTQzLjk3IDQ1NC43NjEgMTM2LjU2NEM0NTQuNzYxIDEyOS40MzEgNDU2LjA2NCAxMjIuNzc5IDQ1OC42NzEgMTE2LjYwNkM0NjEuMjc3IDEx''@;'; put 'put ''MC4yOTcgNDY0Ljg0MyAxMDQuODEgNDY5LjM2OSAxMDAuMTQ3QzQ3My44OTYgOTUuMzQ2IDQ3OS4xMDggOTEuNTc0IDQ4NS4wMDYgODguODMwN0M0OTEuMDQxIDg2LjA4NzQgNDk3LjQ4OCA4NC43MTU4IDUwNC4zNDYgODQuNzE1OEM1MDkuMTQ3IDg0LjcxNTggNTEzLjg3OSA4NS44MTMxIDUx''@;'; put 'put ''OC41NDIgODguMDA3N0M1MjMuMjA2IDkwLjA2NTIgNTI3LjM4OSA5Mi40NjU1IDUzMS4wOTMgOTUuMjA4OFY4OS4wMzY1QzUzMS4wOTMgODcuOTM5MSA1MzEuNDM2IDg3LjA0NzYgNTMyLjEyMiA4Ni4zNjE4QzUzMi45NDUgODUuNTM4OCA1MzMuOTA1IDg1LjEyNzMgNTM1LjAwMiA4NS4xMjcz''@;'; put 'put ''SDU1MS4wNUM1NTMuNjU2IDg1LjEyNzMgNTU0Ljk1OSA4Ni40MzAzIDU1NC45NTkgODkuMDM2NVYxODQuMDkxQzU1NC45NTkgMTg2LjY5NyA1NTMuNjU2IDE4OCA1NTEuMDUgMTg4SDUzNS4wMDJDNTMzLjkwNSAxODggNTMyLjk0NSAxODcuNjU3IDUzMi4xMjIgMTg2Ljk3MUM1MzEuNDM2IDE4''@;'; put 'put ''Ni4xNDggNTMxLjA5MyAxODUuMTg4IDUzMS4wOTMgMTg0LjA5MVYxNzcuOTE4Wk00NzkuNjU3IDEzNi41NjRDNDc5LjY1NyAxNDAuMjY3IDQ4MC4zNDIgMTQzLjc2NSA0ODEuNzE0IDE0Ny4wNTdDNDgzLjA4NiAxNTAuMjExIDQ4NC45MzcgMTUzLjAyMyA0ODcuMjY5IDE1NS40OTJDNDg5LjYw''@;'; put 'put ''MSAxNTcuOTYxIDQ5Mi4yNzYgMTU5Ljk1IDQ5NS4yOTMgMTYxLjQ1OUM0OTguNDQ4IDE2Mi44MyA1MDEuNzQgMTYzLjUxNiA1MDUuMTY5IDE2My41MTZDNTA4Ljg3MiAxNjMuNTE2IDUxMi4yMzMgMTYyLjgzIDUxNS4yNTEgMTYxLjQ1OUM1MTguMjY4IDE1OS45NSA1MjAuODc0IDE1Ny45NjEg''@;'; put 'put ''NTIzLjA2OSAxNTUuNDkyQzUyNS40MDEgMTUzLjAyMyA1MjcuMTg0IDE1MC4yMTEgNTI4LjQxOCAxNDcuMDU3QzUyOS42NTMgMTQzLjc2NSA1MzAuMjcgMTQwLjI2NyA1MzAuMjcgMTM2LjU2NEM1MzAuMjcgMTMyLjg2IDUyOS42NTMgMTI5LjQzMSA1MjguNDE4IDEyNi4yNzZDNTI3LjE4NCAx''@;'; put 'put ''MjIuOTg0IDUyNS40MDEgMTIwLjEwNCA1MjMuMDY5IDExNy42MzVDNTIwLjg3NCAxMTUuMTY2IDUxOC4yNjggMTEzLjI0NiA1MTUuMjUxIDExMS44NzRDNTEyLjIzMyAxMTAuMzY1IDUwOC44NzIgMTA5LjYxMSA1MDUuMTY5IDEwOS42MTFDNTAxLjc0IDEwOS42MTEgNDk4LjQ0OCAxMTAuMzY1''@;'; put 'put ''IDQ5NS4yOTMgMTExLjg3NEM0OTIuMjc2IDExMy4yNDYgNDg5LjYwMSAxMTUuMTY2IDQ4Ny4yNjkgMTE3LjYzNUM0ODQuOTM3IDEyMC4xMDQgNDgzLjA4NiAxMjIuOTg0IDQ4MS43MTQgMTI2LjI3NkM0ODAuMzQyIDEyOS40MzEgNDc5LjY1NyAxMzIuODYgNDc5LjY1NyAxMzYuNTY0Wk01NzQu''@;'; put 'put ''NDA3IDg5LjAzNjVDNTc0LjQwNyA4Ny45MzkxIDU3NC43NSA4Ny4wNDc2IDU3NS40MzYgODYuMzYxOEM1NzYuMTIyIDg1LjUzODggNTc3LjAxMyA4NS4xMjczIDU3OC4xMTEgODUuMTI3M0g1OTMuMzM2VjU4LjE3NDZDNTkzLjMzNiA1Ny4wNzczIDU5My42NzkgNTYuMTg1OCA1OTQuMzY0IDU1''@;'; put 'put ''LjQ5OTlDNTk1LjE4NyA1NC42NzcgNTk2LjE0OCA1NC4yNjU1IDU5Ny4yNDUgNTQuMjY1NUg2MTMuMjkzQzYxNS44OTkgNTQuMjY1NSA2MTcuMjAyIDU1LjU2ODUgNjE3LjIwMiA1OC4xNzQ2Vjg1LjEyNzNINjM1LjMwOEM2MzYuNDA1IDg1LjEyNzMgNjM3LjI5NyA4NS41Mzg4IDYzNy45ODIg''@;'; put 'put ''ODYuMzYxOEM2MzguNjY4IDg3LjA0NzYgNjM5LjAxMSA4Ny45MzkxIDYzOS4wMTEgODkuMDM2NVYxMDQuMjYyQzYzOS4wMTEgMTA1LjM1OSA2MzguNjY4IDEwNi4yNSA2MzcuOTgyIDEwNi45MzZDNjM3LjI5NyAxMDcuNjIyIDYzNi40MDUgMTA3Ljk2NSA2MzUuMzA4IDEwNy45NjVINjE3LjIw''@;'; put 'put ''MlYxODQuMDkxQzYxNy4yMDIgMTg2LjY5NyA2MTUuODk5IDE4OCA2MTMuMjkzIDE4OEg1OTcuMjQ1QzU5Ni4xNDggMTg4IDU5NS4xODcgMTg3LjY1NyA1OTQuMzY0IDE4Ni45NzFDNTkzLjY3OSAxODYuMTQ4IDU5My4zMzYgMTg1LjE4OCA1OTMuMzM2IDE4NC4wOTFWMTA3Ljk2NUg1NzguMTEx''@;'; put 'put ''QzU3Ny4wMTMgMTA3Ljk2NSA1NzYuMTIyIDEwNy42MjIgNTc1LjQzNiAxMDYuOTM2QzU3NC43NSAxMDYuMjUgNTc0LjQwNyAxMDUuMzU5IDU3NC40MDcgMTA0LjI2MlY4OS4wMzY1Wk03MjkuNjkzIDE3Ny45MThDNzI1Ljk5IDE4MC42NjIgNzIxLjczOCAxODMuMTMxIDcxNi45MzcgMTg1LjMy''@;'; put 'put ''NUM3MTIuMTM3IDE4Ny4zODMgNzA3LjMzNiAxODguNDExIDcwMi41MzUgMTg4LjQxMUM2OTUuNDAzIDE4OC40MTEgNjg4LjgxOSAxODcuMTA4IDY4Mi43ODQgMTg0LjUwMkM2NzYuNzQ4IDE4MS44OTYgNjcxLjUzNiAxNzguMjYxIDY2Ny4xNDcgMTczLjU5OEM2NjIuODk1IDE2OC45MzQgNjU5''@;'; put 'put ''LjUzNCAxNjMuNDQ4IDY1Ny4wNjUgMTU3LjEzOEM2NTQuNTk2IDE1MC44MjkgNjUzLjM2MiAxNDMuOTcgNjUzLjM2MiAxMzYuNTY0QzY1My4zNjIgMTI5LjQzMSA2NTQuNjY1IDEyMi43NzkgNjU3LjI3MSAxMTYuNjA2QzY1OS44NzcgMTEwLjI5NyA2NjMuNDQzIDEwNC44MSA2NjcuOTcgMTAw''@;'; put 'put ''LjE0N0M2NzIuNDk2IDk1LjM0NiA2NzcuNzA4IDkxLjU3NCA2ODMuNjA3IDg4LjgzMDdDNjg5LjY0MiA4Ni4wODc0IDY5Ni4wODggODQuNzE1OCA3MDIuOTQ3IDg0LjcxNThDNzA3Ljc0NyA4NC43MTU4IDcxMi40NzkgODUuODEzMSA3MTcuMTQzIDg4LjAwNzdDNzIxLjgwNyA5MC4wNjUyIDcy''@;'; put 'put ''NS45OSA5Mi40NjU1IDcyOS42OTMgOTUuMjA4OFY4OS4wMzY1QzcyOS42OTMgODcuOTM5MSA3MzAuMDM2IDg3LjA0NzYgNzMwLjcyMiA4Ni4zNjE4QzczMS41NDUgODUuNTM4OCA3MzIuNTA1IDg1LjEyNzMgNzMzLjYwMyA4NS4xMjczSDc0OS42NTFDNzUyLjI1NyA4NS4xMjczIDc1My41NiA4''@;'; put 'put ''Ni40MzAzIDc1My41NiA4OS4wMzY1VjE4NC4wOTFDNzUzLjU2IDE4Ni42OTcgNzUyLjI1NyAxODggNzQ5LjY1MSAxODhINzMzLjYwM0M3MzIuNTA1IDE4OCA3MzEuNTQ1IDE4Ny42NTcgNzMwLjcyMiAxODYuOTcxQzczMC4wMzYgMTg2LjE0OCA3MjkuNjkzIDE4NS4xODggNzI5LjY5MyAxODQu''@;'; put 'put ''MDkxVjE3Ny45MThaTTY3OC4yNTcgMTM2LjU2NEM2NzguMjU3IDE0MC4yNjcgNjc4Ljk0MyAxNDMuNzY1IDY4MC4zMTUgMTQ3LjA1N0M2ODEuNjg2IDE1MC4yMTEgNjgzLjUzOCAxNTMuMDIzIDY4NS44NyAxNTUuNDkyQzY4OC4yMDEgMTU3Ljk2MSA2OTAuODc2IDE1OS45NSA2OTMuODk0IDE2''@;'; put 'put ''MS40NTlDNjk3LjA0OSAxNjIuODMgNzAwLjM0IDE2My41MTYgNzAzLjc3IDE2My41MTZDNzA3LjQ3MyAxNjMuNTE2IDcxMC44MzMgMTYyLjgzIDcxMy44NTEgMTYxLjQ1OUM3MTYuODY5IDE1OS45NSA3MTkuNDc1IDE1Ny45NjEgNzIxLjY2OSAxNTUuNDkyQzcyNC4wMDEgMTUzLjAyMyA3MjUu''@;'; put 'put ''Nzg0IDE1MC4yMTEgNzI3LjAxOSAxNDcuMDU3QzcyOC4yNTMgMTQzLjc2NSA3MjguODcgMTQwLjI2NyA3MjguODcgMTM2LjU2NEM3MjguODcgMTMyLjg2IDcyOC4yNTMgMTI5LjQzMSA3MjcuMDE5IDEyNi4yNzZDNzI1Ljc4NCAxMjIuOTg0IDcyNC4wMDEgMTIwLjEwNCA3MjEuNjY5IDExNy42''@;'; put 'put ''MzVDNzE5LjQ3NSAxMTUuMTY2IDcxNi44NjkgMTEzLjI0NiA3MTMuODUxIDExMS44NzRDNzEwLjgzMyAxMTAuMzY1IDcwNy40NzMgMTA5LjYxMSA3MDMuNzcgMTA5LjYxMUM3MDAuMzQgMTA5LjYxMSA2OTcuMDQ5IDExMC4zNjUgNjkzLjg5NCAxMTEuODc0QzY5MC44NzYgMTEzLjI0NiA2ODgu''@;'; put 'put ''MjAxIDExNS4xNjYgNjg1Ljg3IDExNy42MzVDNjgzLjUzOCAxMjAuMTA0IDY4MS42ODYgMTIyLjk4NCA2ODAuMzE1IDEyNi4yNzZDNjc4Ljk0MyAxMjkuNDMxIDY3OC4yNTcgMTMyLjg2IDY3OC4yNTcgMTM2LjU2NFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTg3My4yMDYgNzQuMjIy''@;'; put 'put ''OEM4NzIuNjU3IDc1LjA0NTggODcxLjkwMyA3NS41MjU4IDg3MC45NDMgNzUuNjYzQzg2OS45ODIgNzUuODAwMiA4NjkuMDIyIDc1LjU5NDQgODY4LjA2MiA3NS4wNDU4Qzg2NC45MDcgNzMuMTI1NSA4NjEuMTM1IDcxLjQ3OTUgODU2Ljc0NiA3MC4xMDc5Qzg1Mi4zNTcgNjguNzM2MiA4NDcu''@;'; put 'put ''ODk5IDY4LjExOSA4NDMuMzczIDY4LjI1NjJDODM3LjQ3NSA2OC4yNTYyIDgzMS45ODggNjkuNTU5MiA4MjYuOTEzIDcyLjE2NTNDODIxLjk3NSA3NC42MzQzIDgxNy42NTQgNzguMDYzNCA4MTMuOTUxIDgyLjQ1MjZDODEwLjI0OCA4Ni43MDQ3IDgwNy4zNjcgOTEuNzExMSA4MDUuMzEgOTcu''@;'; put 'put ''NDcyQzgwMy4yNTIgMTAzLjIzMyA4MDIuMjkyIDEwOS40MDUgODAyLjQyOSAxMTUuOTg5QzgwMi41NjYgMTIyLjg0NyA4MDMuNTk1IDEyOS4yMjUgODA1LjUxNSAxMzUuMTIzQzgwNy41NzMgMTQwLjg4NCA4MTAuMzg1IDE0NS44OTEgODEzLjk1MSAxNTAuMTQzQzgxNy41MTcgMTU0LjM5NSA4''@;'; put 'put ''MjEuODM4IDE1Ny43NTUgODI2LjkxMyAxNjAuMjI0QzgzMS45ODggMTYyLjU1NiA4MzcuNjggMTYzLjcyMiA4NDMuOTkgMTYzLjcyMkM4NTAuMDI1IDE2My41ODUgODU1LjUxMiAxNjIuNTU2IDg2MC40NSAxNjAuNjM2Qzg2NS41MjUgMTU4LjcxNiA4NzAuNTMxIDE1NS45NzIgODc1LjQ2OSAx''@;'; put 'put ''NTIuNDA2Qzg3Ni40MjkgMTUxLjcyIDg3Ny40NTggMTUxLjUxNCA4NzguNTU1IDE1MS43ODlDODc5LjY1MiAxNTEuOTI2IDg4MC41NDQgMTUyLjQ3NSA4ODEuMjMgMTUzLjQzNUw4OTEuMTA2IDE2OC4yNDhDODkyLjM0IDE3MC4xNjkgODkxLjk5NyAxNzEuODgzIDg5MC4wNzcgMTczLjM5MkM4''@;'; put 'put ''ODIuNTMzIDE3OS4xNTMgODc1LjE5NSAxODMuMzM2IDg2OC4wNjIgMTg1Ljk0M0M4NjAuOTMgMTg4LjU0OSA4NTIuOTc0IDE4OS44NTIgODQ0LjE5NiAxODkuODUyQzgzMy42MzQgMTg5Ljk4OSA4MjQuMTAxIDE4OC4zNDMgODE1LjU5NyAxODQuOTE0QzgwNy4yMyAxODEuMzQ4IDgwMC4wMjkg''@;'; put 'put ''MTc2LjM0MSA3OTMuOTk0IDE2OS44OTRDNzg4LjA5NiAxNjMuMzExIDc4My41MDEgMTU1LjQ5MiA3ODAuMjA5IDE0Ni40MzlDNzc3LjA1NCAxMzcuMzg3IDc3NS40MDggMTI3LjM3NCA3NzUuMjcxIDExNi40MDFDNzc1LjEzNCAxMDcuMDczIDc3Ni41NzQgOTguMDIwNyA3NzkuNTkyIDg5LjI0''@;'; put 'put ''MjJDNzgyLjc0NiA4MC4zMjY2IDc4Ny4yMDQgNzIuMzcxMSA3OTIuOTY1IDY1LjM3NTdDNzk4LjcyNiA1OC4zODA0IDgwNS43MjEgNTIuNzU2NyA4MTMuOTUxIDQ4LjUwNDZDODIyLjE4MSA0NC4yNTI1IDgzMS40MzkgNDIuMTI2NSA4NDEuNzI3IDQyLjEyNjVDODQ4LjcyMiA0MS45ODkzIDg1''@;'; put 'put ''NS41OCA0Mi44MTIzIDg2Mi4zMDEgNDQuNTk1NEM4NjkuMTU5IDQ2LjM3ODYgODc1Ljg4IDQ5LjY3MDUgODgyLjQ2NCA1NC40NzEyQzg4My40MjQgNTUuMTU3IDg4My45NzMgNTYuMDQ4NiA4ODQuMTEgNTcuMTQ1OUM4ODQuMjQ3IDU4LjEwNjEgODgzLjk3MyA1OS4wNjYyIDg4My4yODcgNjAu''@;'; put 'put ''MDI2M0w4NzMuMjA2IDc0LjIyMjhaTTkwNi4yMTIgMTM2LjU2NEM5MDYuMjEyIDEyOS4yOTQgOTA3LjUxNSAxMjIuNTA0IDkxMC4xMjEgMTE2LjE5NUM5MTIuNzI3IDEwOS44ODUgOTE2LjIyNSAxMDQuMzk5IDkyMC42MTQgOTkuNzM1MkM5MjUuMTQgOTUuMDcxNyA5MzAuNDIxIDkxLjQzNjgg''@;'; put 'put ''OTM2LjQ1NiA4OC44MzA3Qzk0Mi40OTIgODYuMDg3NCA5NDkuMDA3IDg0LjcxNTggOTU2LjAwMiA4NC43MTU4Qzk2Mi45OTggODQuNzE1OCA5NjkuNDQ0IDg2LjA4NzQgOTc1LjM0MiA4OC44MzA3Qzk4MS4zNzcgOTEuNDM2OCA5ODYuNTkgOTUuMDcxNyA5OTAuOTc5IDk5LjczNTJDOTk1LjUw''@;'; put 'put ''NSAxMDQuMzk5IDk5OS4wMDMgMTA5Ljg4NSAxMDAxLjQ3IDExNi4xOTVDMTAwNC4wOCAxMjIuNTA0IDEwMDUuMzggMTI5LjI5NCAxMDA1LjM4IDEzNi41NjRDMTAwNS4zOCAxNDMuODMzIDEwMDQuMDggMTUwLjYyMyAxMDAxLjQ3IDE1Ni45MzJDOTk5LjAwMyAxNjMuMjQyIDk5NS41MDUgMTY4''@;'; put 'put ''LjcyOSA5OTAuOTc5IDE3My4zOTJDOTg2LjU5IDE3OC4wNTYgOTgxLjM3NyAxODEuNzU5IDk3NS4zNDIgMTg0LjUwMkM5NjkuMzA3IDE4Ny4xMDggOTYyLjc5MiAxODguNDExIDk1NS43OTYgMTg4LjQxMUM5NDguODAxIDE4OC40MTEgOTQyLjI4NiAxODcuMTA4IDkzNi4yNTEgMTg0LjUwMkM5''@;'; put 'put ''MzAuMjE1IDE4MS43NTkgOTI0LjkzNSAxNzguMDU2IDkyMC40MDggMTczLjM5MkM5MTYuMDE5IDE2OC43MjkgOTEyLjUyMSAxNjMuMjQyIDkwOS45MTUgMTU2LjkzMkM5MDcuNDQ2IDE1MC42MjMgOTA2LjIxMiAxNDMuODMzIDkwNi4yMTIgMTM2LjU2NFpNOTMxLjEwNyAxMzYuNTY0QzkzMS4x''@;'; put 'put ''MDcgMTQwLjQwNCA5MzEuNzI0IDE0NC4wMzkgOTMyLjk1OSAxNDcuNDY4QzkzNC4xOTMgMTUwLjc2IDkzNS45MDggMTUzLjY0MSA5MzguMTAyIDE1Ni4xMDlDOTQwLjI5NyAxNTguNTc4IDk0Mi45MDMgMTYwLjU2NyA5NDUuOTIxIDE2Mi4wNzZDOTQ4LjkzOCAxNjMuNDQ4IDk1Mi4yMyAxNjQu''@;'; put 'put ''MTM0IDk1NS43OTYgMTY0LjEzNEM5NTkuMzYzIDE2NC4xMzQgOTYyLjY1NSAxNjMuNDQ4IDk2NS42NzIgMTYyLjA3NkM5NjguODI3IDE2MC41NjcgOTcxLjUwMiAxNTguNTc4IDk3My42OTYgMTU2LjEwOUM5NzUuODkxIDE1My42NDEgOTc3LjYwNSAxNTAuNzYgOTc4Ljg0IDE0Ny40NjhDOTgw''@;'; put 'put ''LjA3NCAxNDQuMDM5IDk4MC42OTIgMTQwLjQwNCA5ODAuNjkyIDEzNi41NjRDOTgwLjY5MiAxMzIuNzIzIDk4MC4wNzQgMTI5LjE1NyA5NzguODQgMTI1Ljg2NUM5NzcuNjA1IDEyMi40MzYgOTc1Ljg5MSAxMTkuNDg3IDk3My42OTYgMTE3LjAxOEM5NzEuNTAyIDExNC41NDkgOTY4LjgyNyAx''@;'; put 'put ''MTIuNjI5IDk2NS42NzIgMTExLjI1N0M5NjIuNjU1IDEwOS43NDggOTU5LjM2MyAxMDguOTk0IDk1NS43OTYgMTA4Ljk5NEM5NTIuMjMgMTA4Ljk5NCA5NDguOTM4IDEwOS43NDggOTQ1LjkyMSAxMTEuMjU3Qzk0Mi45MDMgMTEyLjYyOSA5NDAuMjk3IDExNC41NDkgOTM4LjEwMiAxMTcuMDE4''@;'; put 'put ''QzkzNS45MDggMTE5LjQ4NyA5MzQuMTkzIDEyMi40MzYgOTMyLjk1OSAxMjUuODY1QzkzMS43MjQgMTI5LjE1NyA5MzEuMTA3IDEzMi43MjMgOTMxLjEwNyAxMzYuNTY0Wk0xMDUwLjkgMTg0LjA5MUMxMDUwLjkgMTg2LjY5NyAxMDQ5LjU5IDE4OCAxMDQ2Ljk5IDE4OEgxMDMwLjk0QzEwMjku''@;'; put 'put ''ODQgMTg4IDEwMjguODggMTg3LjY1NyAxMDI4LjA2IDE4Ni45NzFDMTAyNy4zNyAxODYuMTQ4IDEwMjcuMDMgMTg1LjE4OCAxMDI3LjAzIDE4NC4wOTFWODkuMDM2NUMxMDI3LjAzIDg3LjkzOTEgMTAyNy4zNyA4Ny4wNDc2IDEwMjguMDYgODYuMzYxOEMxMDI4Ljg4IDg1LjUzODggMTAyOS44''@;'; put 'put ''NCA4NS4xMjczIDEwMzAuOTQgODUuMTI3M0gxMDQ2Ljk5QzEwNDkuNTkgODUuMTI3MyAxMDUwLjkgODYuNDMwMyAxMDUwLjkgODkuMDM2NVY5Ni42NDlDMTA1NC44OCA5My4zNTcxIDEwNTkuNDcgOTAuNTQ1MyAxMDY0LjY4IDg4LjIxMzVDMTA2OS44OSA4NS44ODE3IDEwNzUuMDQgODQuNzE1''@;'; put 'put ''OCAxMDgwLjExIDg0LjcxNThDMTA4NC45MSA4NC43MTU4IDEwODkuMzcgODUuNjA3NCAxMDkzLjQ5IDg3LjM5MDVDMTA5Ny42IDg5LjAzNjUgMTEwMS4xIDkxLjQzNjggMTEwMy45OCA5NC41OTE2QzExMDcgOTcuNjA5MiAxMTA5LjMzIDEwMS4xNzUgMTExMC45OCAxMDUuMjlDMTExMi42MiAx''@;'; put 'put ''MDkuNDA1IDExMTMuNDQgMTEzLjkzMiAxMTEzLjQ0IDExOC44N1YxODQuMDkxQzExMTMuNDQgMTg2LjY5NyAxMTEyLjE0IDE4OCAxMTA5LjUzIDE4OEgxMDkzLjQ5QzEwOTIuMzkgMTg4IDEwOTEuNDMgMTg3LjY1NyAxMDkwLjYxIDE4Ni45NzFDMTA4OS45MiAxODYuMTQ4IDEwODkuNTggMTg1''@;'; put 'put ''LjE4OCAxMDg5LjU4IDE4NC4wOTFWMTI2LjY4OEMxMDg5LjU4IDEyMS4wNjQgMTA4OC4yNyAxMTYuNzQ0IDEwODUuNjcgMTEzLjcyNkMxMDgzLjA2IDExMC41NzEgMTA3OS4zNiAxMDguOTk0IDEwNzQuNTYgMTA4Ljk5NEMxMDcxLjU0IDEwOC45OTQgMTA2OC41OSAxMDkuNjExIDEwNjUuNzEg''@;'; put 'put ''MTEwLjg0NUMxMDYyLjk3IDExMS45NDMgMTA2MC41IDExMy41MiAxMDU4LjMgMTE1LjU3OEMxMDU2LjI1IDExNy40OTggMTA1NC41MyAxMTkuODMgMTA1My4xNiAxMjIuNTczQzEwNTEuOTMgMTI1LjMxNiAxMDUxLjMxIDEyOC4xOTcgMTA1MS4zMSAxMzEuMjE0TDEwNTAuOSAxODQuMDkxWk0x''@;'; put 'put ''MTI3Ljg3IDg5LjAzNjVDMTEyNy44NyA4Ny45MzkxIDExMjguMjEgODcuMDQ3NiAxMTI4LjkgODYuMzYxOEMxMTI5LjU4IDg1LjUzODggMTEzMC40OCA4NS4xMjczIDExMzEuNTcgODUuMTI3M0gxMTQ2LjhWNTguMTc0NkMxMTQ2LjggNTcuMDc3MyAxMTQ3LjE0IDU2LjE4NTggMTE0Ny44MyA1''@;'; put 'put ''NS40OTk5QzExNDguNjUgNTQuNjc3IDExNDkuNjEgNTQuMjY1NSAxMTUwLjcxIDU0LjI2NTVIMTE2Ni43NkMxMTY5LjM2IDU0LjI2NTUgMTE3MC42NyA1NS41Njg1IDExNzAuNjcgNTguMTc0NlY4NS4xMjczSDExODguNzdDMTE4OS44NyA4NS4xMjczIDExOTAuNzYgODUuNTM4OCAxMTkxLjQ1''@;'; put 'put ''IDg2LjM2MThDMTE5Mi4xMyA4Ny4wNDc2IDExOTIuNDcgODcuOTM5MSAxMTkyLjQ3IDg5LjAzNjVWMTA0LjI2MkMxMTkyLjQ3IDEwNS4zNTkgMTE5Mi4xMyAxMDYuMjUgMTE5MS40NSAxMDYuOTM2QzExOTAuNzYgMTA3LjYyMiAxMTg5Ljg3IDEwNy45NjUgMTE4OC43NyAxMDcuOTY1SDExNzAu''@;'; put 'put ''NjdWMTg0LjA5MUMxMTcwLjY3IDE4Ni42OTcgMTE2OS4zNiAxODggMTE2Ni43NiAxODhIMTE1MC43MUMxMTQ5LjYxIDE4OCAxMTQ4LjY1IDE4Ny42NTcgMTE0Ny44MyAxODYuOTcxQzExNDcuMTQgMTg2LjE0OCAxMTQ2LjggMTg1LjE4OCAxMTQ2LjggMTg0LjA5MVYxMDcuOTY1SDExMzEuNTdD''@;'; put 'put ''MTEzMC40OCAxMDcuOTY1IDExMjkuNTggMTA3LjYyMiAxMTI4LjkgMTA2LjkzNkMxMTI4LjIxIDEwNi4yNSAxMTI3Ljg3IDEwNS4zNTkgMTEyNy44NyAxMDQuMjYyVjg5LjAzNjVaTTEyNzMuMjggMTA4LjE3MUMxMjcyLjg3IDEwOS4yNjggMTI3Mi4xOCAxMTAuMDIyIDEyNzEuMjIgMTEwLjQz''@;'; put 'put ''NEMxMjcwLjI2IDExMC44NDUgMTI2OS4yMyAxMTAuNzc3IDEyNjguMTQgMTEwLjIyOEMxMjY3LjA0IDEwOS42OCAxMjY1LjY3IDEwOS4yIDEyNjQuMDIgMTA4Ljc4OEMxMjYyLjUxIDEwOC4zNzcgMTI2MC44NyAxMDguMTcxIDEyNTkuMDggMTA4LjE3MUMxMjU2LjA3IDEwOC4xNzEgMTI1My4x''@;'; put 'put ''OSAxMDguNzg4IDEyNTAuNDQgMTEwLjAyMkMxMjQ3LjcgMTExLjI1NyAxMjQ1LjIzIDExMi45NzIgMTI0My4wNCAxMTUuMTY2QzEyNDAuOTggMTE3LjIyNCAxMjM5LjMzIDExOS42OTMgMTIzOC4xIDEyMi41NzNDMTIzNi44NiAxMjUuMzE2IDEyMzYuMjUgMTI4LjE5NyAxMjM2LjI1IDEzMS4y''@;'; put 'put ''MTRMMTIzNS44NCAxODQuMDkxQzEyMzUuODQgMTg1LjE4OCAxMjM1LjQ5IDE4Ni4xNDggMTIzNC44MSAxODYuOTcxQzEyMzQuMTIgMTg3LjY1NyAxMjMzLjIzIDE4OCAxMjMyLjEzIDE4OEgxMjE1Ljg4QzEyMTQuNzggMTg4IDEyMTMuODIgMTg3LjY1NyAxMjEzIDE4Ni45NzFDMTIxMi4zMSAx''@;'; put 'put ''ODYuMTQ4IDEyMTEuOTcgMTg1LjE4OCAxMjExLjk3IDE4NC4wOTFWODkuMDM2NUMxMjExLjk3IDg3LjkzOTEgMTIxMi4zMSA4Ny4wNDc2IDEyMTMgODYuMzYxOEMxMjEzLjgyIDg1LjUzODggMTIxNC43OCA4NS4xMjczIDEyMTUuODggODUuMTI3M0gxMjMyLjEzQzEyMzMuMjMgODUuMTI3MyAx''@;'; put 'put ''MjM0LjEyIDg1LjUzODggMTIzNC44MSA4Ni4zNjE4QzEyMzUuNDkgODcuMDQ3NiAxMjM1Ljg0IDg3LjkzOTEgMTIzNS44NCA4OS4wMzY1Vjk0LjU5MTZDMTIzOS44MSA5MS43MTExIDEyNDQuMDcgODkuMzc5NCAxMjQ4LjU5IDg3LjU5NjJDMTI1My4xMiA4NS42NzU5IDEyNTcuOTkgODQuNzE1''@;'; put 'put ''OCAxMjYzLjIgODQuNzE1OEMxMjY4LjU1IDg0LjcxNTggMTI3My4yMSA4NS43NDQ1IDEyNzcuMTkgODcuODAyQzEyNzkuMTEgODkuMDM2NSAxMjc5LjczIDkwLjYxMzggMTI3OS4wNCA5Mi41MzQxTDEyNzMuMjggMTA4LjE3MVpNMTI4NS4zMyAxMzYuNTY0QzEyODUuMzMgMTI5LjI5NCAxMjg2''@;'; put 'put ''LjYzIDEyMi41MDQgMTI4OS4yNCAxMTYuMTk1QzEyOTEuODUgMTA5Ljg4NSAxMjk1LjM0IDEwNC4zOTkgMTI5OS43MyA5OS43MzUyQzEzMDQuMjYgOTUuMDcxNyAxMzA5LjU0IDkxLjQzNjggMTMxNS41NyA4OC44MzA3QzEzMjEuNjEgODYuMDg3NCAxMzI4LjEyIDg0LjcxNTggMTMzNS4xMiA4''@;'; put 'put ''NC43MTU4QzEzNDIuMTIgODQuNzE1OCAxMzQ4LjU2IDg2LjA4NzQgMTM1NC40NiA4OC44MzA3QzEzNjAuNSA5MS40MzY4IDEzNjUuNzEgOTUuMDcxNyAxMzcwLjEgOTkuNzM1MkMxMzc0LjYyIDEwNC4zOTkgMTM3OC4xMiAxMDkuODg1IDEzODAuNTkgMTE2LjE5NUMxMzgzLjIgMTIyLjUwNCAx''@;'; put 'put ''Mzg0LjUgMTI5LjI5NCAxMzg0LjUgMTM2LjU2NEMxMzg0LjUgMTQzLjgzMyAxMzgzLjIgMTUwLjYyMyAxMzgwLjU5IDE1Ni45MzJDMTM3OC4xMiAxNjMuMjQyIDEzNzQuNjIgMTY4LjcyOSAxMzcwLjEgMTczLjM5MkMxMzY1LjcxIDE3OC4wNTYgMTM2MC41IDE4MS43NTkgMTM1NC40NiAxODQu''@;'; put 'put ''NTAyQzEzNDguNDMgMTg3LjEwOCAxMzQxLjkxIDE4OC40MTEgMTMzNC45MSAxODguNDExQzEzMjcuOTIgMTg4LjQxMSAxMzIxLjQgMTg3LjEwOCAxMzE1LjM3IDE4NC41MDJDMTMwOS4zMyAxODEuNzU5IDEzMDQuMDUgMTc4LjA1NiAxMjk5LjUzIDE3My4zOTJDMTI5NS4xNCAxNjguNzI5IDEy''@;'; put 'put ''OTEuNjQgMTYzLjI0MiAxMjg5LjAzIDE1Ni45MzJDMTI4Ni41NiAxNTAuNjIzIDEyODUuMzMgMTQzLjgzMyAxMjg1LjMzIDEzNi41NjRaTTEzMTAuMjMgMTM2LjU2NEMxMzEwLjIzIDE0MC40MDQgMTMxMC44NCAxNDQuMDM5IDEzMTIuMDggMTQ3LjQ2OEMxMzEzLjMxIDE1MC43NiAxMzE1LjAz''@;'; put 'put ''IDE1My42NDEgMTMxNy4yMiAxNTYuMTA5QzEzMTkuNDIgMTU4LjU3OCAxMzIyLjAyIDE2MC41NjcgMTMyNS4wNCAxNjIuMDc2QzEzMjguMDYgMTYzLjQ0OCAxMzMxLjM1IDE2NC4xMzQgMTMzNC45MSAxNjQuMTM0QzEzMzguNDggMTY0LjEzNCAxMzQxLjc3IDE2My40NDggMTM0NC43OSAxNjIu''@;'; put 'put ''MDc2QzEzNDcuOTUgMTYwLjU2NyAxMzUwLjYyIDE1OC41NzggMTM1Mi44MSAxNTYuMTA5QzEzNTUuMDEgMTUzLjY0MSAxMzU2LjcyIDE1MC43NiAxMzU3Ljk2IDE0Ny40NjhDMTM1OS4xOSAxNDQuMDM5IDEzNTkuODEgMTQwLjQwNCAxMzU5LjgxIDEzNi41NjRDMTM1OS44MSAxMzIuNzIzIDEz''@;'; put 'put ''NTkuMTkgMTI5LjE1NyAxMzU3Ljk2IDEyNS44NjVDMTM1Ni43MiAxMjIuNDM2IDEzNTUuMDEgMTE5LjQ4NyAxMzUyLjgxIDExNy4wMThDMTM1MC42MiAxMTQuNTQ5IDEzNDcuOTUgMTEyLjYyOSAxMzQ0Ljc5IDExMS4yNTdDMTM0MS43NyAxMDkuNzQ4IDEzMzguNDggMTA4Ljk5NCAxMzM0Ljkx''@;'; put 'put ''IDEwOC45OTRDMTMzMS4zNSAxMDguOTk0IDEzMjguMDYgMTA5Ljc0OCAxMzI1LjA0IDExMS4yNTdDMTMyMi4wMiAxMTIuNjI5IDEzMTkuNDIgMTE0LjU0OSAxMzE3LjIyIDExNy4wMThDMTMxNS4wMyAxMTkuNDg3IDEzMTMuMzEgMTIyLjQzNiAxMzEyLjA4IDEyNS44NjVDMTMxMC44NCAxMjku''@;'; put 'put ''MTU3IDEzMTAuMjMgMTMyLjcyMyAxMzEwLjIzIDEzNi41NjRaTTE0MDguMjEgMzcuMzk0NEMxNDA4LjIxIDM2LjI5NyAxNDA4LjU1IDM1LjQwNTUgMTQwOS4yNCAzNC43MTk3QzE0MTAuMDYgMzQuMDMzOCAxNDExLjAyIDMzLjY5MDkgMTQxMi4xMiAzMy42OTA5SDE0MjguMTZDMTQyOS4yNiAz''@;'; put 'put ''My42OTA5IDE0MzAuMTUgMzQuMDMzOCAxNDMwLjg0IDM0LjcxOTdDMTQzMS42NiAzNS40MDU1IDE0MzIuMDcgMzYuMjk3IDE0MzIuMDcgMzcuMzk0NFYxODQuMDkxQzE0MzIuMDcgMTg2LjY5NyAxNDMwLjc3IDE4OCAxNDI4LjE2IDE4OEgxNDEyLjEyQzE0MTEuMDIgMTg4IDE0MTAuMDYgMTg3''@;'; put 'put ''LjY1NyAxNDA5LjI0IDE4Ni45NzFDMTQwOC41NSAxODYuMTQ4IDE0MDguMjEgMTg1LjE4OCAxNDA4LjIxIDE4NC4wOTFWMzcuMzk0NFpNMTQ2MyAzNy4zOTQ0QzE0NjMgMzYuMjk3IDE0NjMuMzUgMzUuNDA1NSAxNDY0LjAzIDM0LjcxOTdDMTQ2NC44NSAzNC4wMzM4IDE0NjUuODEgMzMuNjkw''@;'; put 'put ''OSAxNDY2LjkxIDMzLjY5MDlIMTQ4Mi45NkMxNDg0LjA2IDMzLjY5MDkgMTQ4NC45NSAzNC4wMzM4IDE0ODUuNjMgMzQuNzE5N0MxNDg2LjQ2IDM1LjQwNTUgMTQ4Ni44NyAzNi4yOTcgMTQ4Ni44NyAzNy4zOTQ0VjE4NC4wOTFDMTQ4Ni44NyAxODYuNjk3IDE0ODUuNTcgMTg4IDE0ODIuOTYg''@;'; put 'put ''MTg4SDE0NjYuOTFDMTQ2NS44MSAxODggMTQ2NC44NSAxODcuNjU3IDE0NjQuMDMgMTg2Ljk3MUMxNDYzLjM1IDE4Ni4xNDggMTQ2MyAxODUuMTg4IDE0NjMgMTg0LjA5MVYzNy4zOTQ0Wk0xNTM3Ljc2IDE0OC4wODVDMTUzOS42OCAxNTIuODg2IDE1NDIuNTYgMTU2Ljc5NSAxNTQ2LjQgMTU5''@;'; put 'put ''LjgxM0MxNTUwLjM3IDE2Mi44MyAxNTU0LjkgMTY0LjMzOSAxNTU5Ljk4IDE2NC4zMzlDMTU2My42OCAxNjQuMzM5IDE1NjcuMjUgMTYzLjcyMiAxNTcwLjY3IDE2Mi40ODhDMTU3NC4xIDE2MS4yNTMgMTU3Ni45OCAxNTkuNTM5IDE1NzkuMzIgMTU3LjM0NEMxNTgwLjE0IDE1Ni42NTggMTU4''@;'; put 'put ''MS4wMyAxNTYuMzg0IDE1ODEuOTkgMTU2LjUyMUMxNTgzLjA5IDE1Ni41MjEgMTU4My45OCAxNTYuODY0IDE1ODQuNjcgMTU3LjU1TDE1OTYuMzkgMTY4LjY2QzE1OTcuMDggMTY5LjM0NiAxNTk3LjQyIDE3MC4yMzcgMTU5Ny40MiAxNzEuMzM1QzE1OTcuNDIgMTcyLjI5NSAxNTk3LjA4IDE3''@;'; put 'put ''My4xMTggMTU5Ni4zOSAxNzMuODA0QzE1OTEuODcgMTc4LjYwNCAxNTg2LjUyIDE4Mi4yMzkgMTU4MC4zNCAxODQuNzA4QzE1NzQuMTcgMTg3LjE3NyAxNTY3LjM4IDE4OC40MTEgMTU1OS45OCAxODguNDExQzE1NTMuMTIgMTg4LjQxMSAxNTQ2Ljc0IDE4Ny4xNzcgMTU0MC44NCAxODQuNzA4''@;'; put 'put ''QzE1MzUuMDggMTgyLjIzOSAxNTMwLjAxIDE3OC43NDEgMTUyNS42MiAxNzQuMjE1QzE1MjAuODIgMTY5LjQxNCAxNTE3LjExIDE2My43MjIgMTUxNC41MSAxNTcuMTM4QzE1MTEuOSAxNTAuNTU0IDE1MTAuNiAxNDMuNTU5IDE1MTAuNiAxMzYuMTUyQzE1MTAuNiAxMjkuMDIgMTUxMS45IDEy''@;'; put 'put ''Mi4zNjcgMTUxNC41MSAxMTYuMTk1QzE1MTcuMTEgMTA5Ljg4NSAxNTIwLjYxIDEwNC4zOTkgMTUyNSA5OS43MzUyQzE1MjkuNTMgOTUuMDcxNyAxNTM0LjgxIDkxLjQzNjggMTU0MC44NCA4OC44MzA3QzE1NDYuODggODYuMDg3NCAxNTUzLjMyIDg0LjcxNTggMTU2MC4xOCA4NC43MTU4QzE1''@;'; put 'put ''NjYuNDkgODQuNzE1OCAxNTcyLjMyIDg1Ljg4MTcgMTU3Ny42NyA4OC4yMTM1QzE1ODMuMTYgOTAuNTQ1MyAxNTg3Ljk2IDkzLjc2ODYgMTU5Mi4wNyA5Ny44ODM1QzE1OTMuODYgOTkuNTI5NSAxNTk1LjU3IDEwMS40NSAxNTk3LjIyIDEwMy42NDRDMTU5OC44NiAxMDUuODM5IDE2MDAuMyAx''@;'; put 'put ''MDguMzc3IDE2MDEuNTQgMTExLjI1N0MxNjAyLjc3IDExNC4xMzcgMTYwMy43MyAxMTcuNDk4IDE2MDQuNDIgMTIxLjMzOEMxNjA1LjI0IDEyNS4wNDIgMTYwNS42NSAxMjkuMjk0IDE2MDUuNjUgMTM0LjA5NUMxNjA1LjY1IDEzNy4zODcgMTYwNS40NSAxNDAuOTUzIDE2MDUuMDMgMTQ0Ljc5''@;'; put 'put ''M0MxNjA0Ljc2IDE0Ni45ODggMTYwMy41MyAxNDguMDg1IDE2MDEuMzMgMTQ4LjA4NUgxNTM3Ljc2Wk0xNTU5LjU2IDEwOC43ODhDMTU1My44IDEwOC43ODggMTU0OS4wNyAxMTAuMzY1IDE1NDUuMzcgMTEzLjUyQzE1NDEuNjYgMTE2LjY3NSAxNTM5LjA2IDEyMC41ODQgMTUzNy41NSAxMjUu''@;'; put 'put ''MjQ4SDE1ODAuNzZDMTU3OS4yNSAxMjAuODU4IDE1NzYuNzEgMTE3LjAxOCAxNTczLjE0IDExMy43MjZDMTU2OS43MSAxMTAuNDM0IDE1NjUuMTkgMTA4Ljc4OCAxNTU5LjU2IDEwOC43ODhaTTE2ODguNTEgMTA4LjE3MUMxNjg4LjEgMTA5LjI2OCAxNjg3LjQxIDExMC4wMjIgMTY4Ni40NSAx''@;'; put 'put ''MTAuNDM0QzE2ODUuNDkgMTEwLjg0NSAxNjg0LjQ2IDExMC43NzcgMTY4My4zNyAxMTAuMjI4QzE2ODIuMjcgMTA5LjY4IDE2ODAuOSAxMDkuMiAxNjc5LjI1IDEwOC43ODhDMTY3Ny43NCAxMDguMzc3IDE2NzYuMSAxMDguMTcxIDE2NzQuMzEgMTA4LjE3MUMxNjcxLjI5IDEwOC4xNzEgMTY2''@;'; put 'put ''OC40MSAxMDguNzg4IDE2NjUuNjcgMTEwLjAyMkMxNjYyLjkzIDExMS4yNTcgMTY2MC40NiAxMTIuOTcyIDE2NTguMjYgMTE1LjE2NkMxNjU2LjIxIDExNy4yMjQgMTY1NC41NiAxMTkuNjkzIDE2NTMuMzMgMTIyLjU3M0MxNjUyLjA5IDEyNS4zMTYgMTY1MS40NyAxMjguMTk3IDE2NTEuNDcg''@;'; put 'put ''MTMxLjIxNEwxNjUxLjA2IDE4NC4wOTFDMTY1MS4wNiAxODUuMTg4IDE2NTAuNzIgMTg2LjE0OCAxNjUwLjAzIDE4Ni45NzFDMTY0OS4zNSAxODcuNjU3IDE2NDguNDYgMTg4IDE2NDcuMzYgMTg4SDE2MzEuMTFDMTYzMC4wMSAxODggMTYyOS4wNSAxODcuNjU3IDE2MjguMjMgMTg2Ljk3MUMx''@;'; put 'put ''NjI3LjU0IDE4Ni4xNDggMTYyNy4yIDE4NS4xODggMTYyNy4yIDE4NC4wOTFWODkuMDM2NUMxNjI3LjIgODcuOTM5MSAxNjI3LjU0IDg3LjA0NzYgMTYyOC4yMyA4Ni4zNjE4QzE2MjkuMDUgODUuNTM4OCAxNjMwLjAxIDg1LjEyNzMgMTYzMS4xMSA4NS4xMjczSDE2NDcuMzZDMTY0OC40NiA4''@;'; put 'put ''NS4xMjczIDE2NDkuMzUgODUuNTM4OCAxNjUwLjAzIDg2LjM2MThDMTY1MC43MiA4Ny4wNDc2IDE2NTEuMDYgODcuOTM5MSAxNjUxLjA2IDg5LjAzNjVWOTQuNTkxNkMxNjU1LjA0IDkxLjcxMTEgMTY1OS4yOSA4OS4zNzk0IDE2NjMuODIgODcuNTk2MkMxNjY4LjM1IDg1LjY3NTkgMTY3My4y''@;'; put 'put ''MiA4NC43MTU4IDE2NzguNDMgODQuNzE1OEMxNjgzLjc4IDg0LjcxNTggMTY4OC40NCA4NS43NDQ1IDE2OTIuNDIgODcuODAyQzE2OTQuMzQgODkuMDM2NSAxNjk0Ljk2IDkwLjYxMzggMTY5NC4yNyA5Mi41MzQxTDE2ODguNTEgMTA4LjE3MVoiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVm''@;'; put 'put ''cz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDVfNyI+CjxyZWN0IHdpZHRoPSIxNjg5IiBoZWlnaHQ9IjI0MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dc-logo-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA3MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwMV84KSI+CjxwYXRoIGQ9Ik0zNy41OTkzIDE2LjYyMTJDMzguNTkxNiAx''@;'; put 'put ''Ni43NDE1IDM5LjU1MzggMTYuODMxNyA0MC41NDYxIDE2Ljk1MTlDNDIuOTIxNiAxNy4yODI3IDQ1LjIzNyAxNy43MzM3IDQ3LjQwMiAxOC44NDYzQzQ4LjAzMzQgMTkuMTc3MSA0OC42MzQ4IDE5LjUzNzkgNDkuMDg1OSAyMC4xMDkyQzQ5LjgwNzUgMjAuOTUxMiA0OS43Nzc0IDIxLjg1MzMg''@;'; put 'put ''NDkuMDU1OCAyMi42OTUyQzQ4LjMwNCAyMy41MzcxIDQ3LjM0MTggMjQuMDE4MyA0Ni4zMTk1IDI0LjQwOTJDNDMuOTQ0IDI1LjM0MTMgNDEuNDQ4MiAyNS43NjIzIDM4LjkyMjQgMjUuOTcyOEMzNC44MDI5IDI2LjMwMzUgMzAuNzQzNSAyNi4xNTMyIDI2LjcxNDIgMjUuMTkxQzI1LjM5MTEg''@;'; put 'put ''MjQuODkwMyAyNC4wOTgxIDI0LjQ2OTMgMjIuOTI1NCAyMy44MDc4QzIyLjQ3NDQgMjMuNTY3MiAyMi4wNTM0IDIzLjI2NjUgMjEuNjYyNSAyMi45MDU3QzIwLjU4IDIxLjg1MzMgMjAuNTggMjAuNzQwNyAyMS42OTI2IDE5Ljc0ODRDMjIuODk1NCAxOC42NjU5IDI0LjM2ODggMTguMTU0NyAy''@;'; put 'put ''NS44NzIyIDE3LjczMzdDMjcuOTc3MSAxNy4xMzI0IDMwLjExMiAxNi44MzE3IDMyLjI3NyAxNi42ODEzQzMyLjQ1NzUgMTYuNjgxMyAzMi42Njc5IDE2Ljc0MTUgMzIuODE4MyAxNi41OTExQzM0LjM4MTkgMTYuNjIxMiAzNi4wMDU2IDE2LjYyMTIgMzcuNTk5MyAxNi42MjEyWiIgZmlsbD0i''@;'; put 'put ''I0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODUwNyA0MS4zMDgyQzIyLjc3NTEgNDMuNzczOCAyNS41MTE1IDQ0LjY3NTkgMjguMzM4IDQ1LjI3NzNDMzMuOTMwOSA0Ni40ODAxIDM5LjUyMzggNDYuMzI5NyA0NC45NjYzIDQ0LjQwNTNDNDYuNjUwMiA0My44MDM5IDQ4LjIxMzggNDIuOTkyIDQ5''@;'; put 'put ''LjMyNjQgNDEuNDg4NkM0OS41MDY4IDQxLjI0OCA0OS41OTcgNDEuMzY4MyA0OS42ODcyIDQxLjU0ODdDNDkuODY3NyA0MS45Mzk2IDQ5Ljk1NzkgNDIuMzMwNSA0OS45NTc5IDQyLjc1MTVDNDkuOTU3OSA0NC4yMjQ5IDQ5Ljk1NzkgNDUuNzI4NCA0OS45NTc5IDQ3LjIwMThDNDkuOTU3OSA0''@;'; put 'put ''OC4xNjQgNDkuNTA2OCA0OC45MTU3IDQ4Ljg0NTMgNDkuNTc3MkM0Ny40NjIxIDUwLjk2MDQgNDUuNzE4MSA1MS43MTIyIDQzLjg4MzggNTIuMjgzNUM0MC4xODUzIDUzLjQyNjEgMzYuMzk2NiA1My42NjY3IDMyLjU3NzcgNTMuMzk2MUMyOS43MjEyIDUzLjE4NTYgMjYuOTU0OCA1Mi42NDQz''@;'; put 'put ''IDI0LjMzODcgNTEuNDcxNkMyMy4yMjYxIDUwLjk2MDQgMjIuMjAzOCA1MC4zNTkxIDIxLjM5MTkgNDkuNDI2OUMyMC43NjA1IDQ4LjcwNTIgMjAuNDI5NyA0Ny44OTM0IDIwLjQyOTcgNDYuOTMxMUMyMC40NTk4IDQ1LjU3OCAyMC40Mjk3IDQ0LjIyNDkgMjAuNDI5NyA0Mi44NzE4QzIwLjQy''@;'; put 'put ''OTcgNDIuMzMwNSAyMC41MTk5IDQxLjgxOTMgMjAuODUwNyA0MS4zMDgyWiIgZmlsbD0iIzhFQzYzRiIvPgo8cGF0aCBkPSJNMjAuODgwNyAzMi4wMTY3QzIyLjQ3NDQgMzQuMTUxNiAyNC42OTk2IDM1LjA1MzcgMjcuMDc1IDM1LjY4NTJDMzIuNzU4MiAzNy4xODg2IDM4LjQ0MTMgMzcuMTU4''@;'; put 'put ''NiA0NC4wNjQzIDM1LjQ3NDdDNDUuOTI4NiAzNC45MzM0IDQ3LjY3MjYgMzQuMTIxNiA0OS4wMjU4IDMyLjY0ODJDNDkuMjA2MiAzMi40Njc3IDQ5LjMyNjUgMzIuMDQ2OCA0OS41MzY5IDMyLjEwNjlDNDkuODM3NiAzMi4xOTcxIDQ5LjgzNzYgMzIuNjE4MSA0OS45Mjc4IDMyLjk0ODhDNTAu''@;'; put 'put ''MDQ4MSAzMy40NiA0OS45ODggMzMuOTcxMiA0OS45ODggMzQuNDgyNEM0OS45ODggMzUuNTA0NyA0OS45NTc5IDM2LjQ5NyA0OS45ODggMzcuNTE5NEM1MC4wNDgxIDM4Ljc4MjMgNDkuNTM2OSAzOS43NzQ2IDQ4LjYwNDggNDAuNTg2NUM0Ny4xOTE1IDQxLjg0OTQgNDUuNDc3NiA0Mi42MDEx''@;'; put 'put ''IDQzLjY0MzMgNDMuMDgyMkMzNy40NzkxIDQ0LjczNjEgMzEuMzQ0OSA0NC43MDYgMjUuMzAwOSA0Mi42MDExQzIzLjgyNzUgNDIuMDkgMjIuNDc0NCA0MS4zNjgzIDIxLjM5MTkgNDAuMTk1NkMyMC43MzA0IDM5LjQ3MzkgMjAuMzk5NyAzOC42MzIgMjAuMzk5NyAzNy42Mzk3QzIwLjQyOTcg''@;'; put 'put ''MzYuMzE2NiAyMC4zOTk3IDM0Ljk2MzUgMjAuMzk5NyAzMy42NDA0QzIwLjQyOTcgMzMuMDk5MiAyMC41MTk5IDMyLjU1NzkgMjAuODgwNyAzMi4wMTY3WiIgZmlsbD0iI0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODIwNyAyMy4wODYxQzIxLjI3MTcgMjQuNDA5MSAyMi4zNTQyIDI1LjAxMDUg''@;'; put 'put ''MjMuNDk2OSAyNS41NTE3QzI1LjU0MTYgMjYuNTE0IDI3LjczNjYgMjYuOTY1IDI5LjkzMTcgMjcuMjM1N0MzNC4yOTE4IDI3Ljc3NjkgMzguNjUxOSAyNy43MTY4IDQyLjk1MTggMjYuODE0N0M0NC42OTU4IDI2LjQ1MzkgNDYuMzc5NyAyNS45NzI3IDQ3LjkxMzIgMjUuMDEwNUM0OC43ODUz''@;'; put 'put ''IDI0LjQ2OTMgNDkuMjM2MyAyMy45NTgxIDQ5LjUzNyAyMy4xMTYxQzQ5LjgzNzcgMjMuNTM3MSA0OS45Mjc5IDIzLjk4ODIgNDkuOTI3OSAyNC40MzkyQzQ5LjkyNzkgMjUuOTQyNyA0OS45NTggMjcuNDE2MSA0OS45Mjc5IDI4LjkxOTVDNDkuODk3OCAzMC4xODI1IDQ5LjE3NjIgMzEuMDg0''@;'; put 'put ''NSA0OC4yNDQgMzEuODM2M0M0Ni41IDMzLjIxOTUgNDQuNDU1MyAzMy45NDExIDQyLjMyMDMgMzQuNDIyM0MzNi42NjczIDM1LjY1NTEgMzEuMDc0NCAzNS41NjQ5IDI1LjU3MTcgMzMuNzAwNkMyNC4xMjgzIDMzLjIxOTUgMjIuNzQ1MSAzMi41Mjc5IDIxLjYzMjYgMzEuNDQ1NEMyMC43OTA2''@;'; put 'put ''IDMwLjYzMzUgMjAuMzM5NiAyOS43MDE0IDIwLjM2OTYgMjguNDk4NkMyMC4zOTk3IDI3LjIwNTYgMjAuMzY5NiAyNS45MTI2IDIwLjM2OTYgMjQuNjE5NkMyMC40Mjk4IDI0LjA0ODMgMjAuNTIgMjMuNTY3MiAyMC44MjA3IDIzLjA4NjFaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik01''@;'; put 'put ''NS4zNDAzIDYzLjQzOTNDNjAuMjQxNyA2My43MDk5IDYyLjg1NzcgNTcuNjk2IDU5LjMwOTUgNTQuMjk4MUM1NS41ODA5IDUwLjcxOTkgNDkuNDQ2NyA1NC4wNTc2IDUwLjQwOSA1OS4xMDkzQzI4LjI0NzggNzMuMjQxOSAtMC4yNTgwMzQgNTIuMTAzMSA3Ljg2MDcxIDI2LjQyMzhMMi4zODgw''@;'; put 'put ''OCAyMi43NTUzQy05LjkxMDMzIDU1LjQ0MDggMjcuOTQ3MSA4My4wNzQ2IDU1LjM0MDMgNjMuNDM5M1pNNTMuNzc2NyA1Ni4zNzI5QzU2LjA2MiA1My45OTc0IDU5LjcwMDQgNTcuMzA1MSA1Ny41NjU1IDU5LjgwMDlDNTUuMzEwMyA2Mi40MTY5IDUxLjM0MTEgNTguODk4OCA1My43NzY3IDU2''@;'; put 'put ''LjM3MjlaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik0xMC42MjcyIDE1LjI2ODFDMTQuMTQ1MyAxOC42MzU4IDE5Ljk0ODcgMTUuODY5NCAxOS42MTc5IDExLjA1ODNDNDEuNzQ5IC0zLjE5NDYxIDcwLjQwNTIgMTcuOTE0MiA2Mi4yODY1IDQzLjY4MzZMNjcuNzU5MSA0Ny4zNTIxQzc5''@;'; put 'put ''LjY5NjcgMTUuNTk4OCA0My40NjMgLTEyLjk5NzIgMTUuNDM4MyA2LjIxNzE1QzEwLjE3NjEgNS4xMzQ2NSA2Ljc3ODI3IDExLjU2OTUgMTAuNjI3MiAxNS4yNjgxWk0xNi4xNTk5IDEzLjE5MzNDMTMuODE0NSAxNS42Mjg5IDEwLjExNiAxMi4wODA3IDEyLjQ2MTQgOS42NDUwN0MxNC44MDY4''@;'; put 'put ''IDcuMjA5NDQgMTguNTA1NCAxMC43NTc2IDE2LjE1OTkgMTMuMTkzM1oiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDFfOCI+CjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8''@;'; put 'put ''L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=favicon-ico; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP''@;'; put 'put ''AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/''@;'; put 'put ''P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1''@;'; put 'put ''wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h''@;'; put 'put ''zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS''@;'; put 'put ''O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ''@;'; put 'put ''CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD''@;'; put 'put ''mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy''@;'; put 'put ''n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY''@;'; put 'put ''SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR''@;'; put 'put ''PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01''@;'; put 'put ''6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10''@;'; put 'put ''3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi''@;'; put 'put ''p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4''@;'; put 'put ''nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy''@;'; put 'put ''Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj''@;'; put 'put ''Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0''@;'; put 'put ''N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv''@;'; put 'put ''Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA''@;'; put 'put ''n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y''@;'; put 'put ''Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp''@;'; put 'put ''b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB''@;'; put 'put ''VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ''@;'; put 'put ''eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ''@;'; put 'put ''AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB''@;'; put 'put ''TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z''@;'; put 'put ''UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg''@;'; put 'put ''ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p''@;'; put 'put ''qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe''@;'; put 'put ''EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN''@;'; put 'put ''TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS''@;'; put 'put ''Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu''@;'; put 'put ''9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN''@;'; put 'put ''VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p''@;'; put 'put ''G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs''@;'; put 'put ''InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg''@;'; put 'put ''DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa''@;'; put 'put ''K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH''@;'; put 'put ''cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM''@;'; put 'put ''RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W''@;'; put 'put ''jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH''@;'; put 'put ''NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy''@;'; put 'put ''F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB''@;'; put 'put ''QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD''@;'; put 'put ''bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S''@;'; put 'put ''AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A''@;'; put 'put ''3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc''@;'; put 'put ''uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN''@;'; put 'put ''Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B''@;'; put 'put ''CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm''@;'; put 'put ''7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG''@;'; put 'put ''bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh''@;'; put 'put ''3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV''@;'; put 'put ''ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL''@;'; put 'put ''LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg''@;'; put 'put ''a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp''@;'; put 'put ''P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp''@;'; put 'put ''QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5''@;'; put 'put ''RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh''@;'; put 'put ''KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu''@;'; put 'put ''9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3''@;'; put 'put ''t4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ''@;'; put 'put ''APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s''@;'; put 'put ''fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY''@;'; put 'put ''FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH''@;'; put 'put ''UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB''@;'; put 'put ''GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4''@;'; put 'put ''ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+''@;'; put 'put ''Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp''@;'; put 'put ''PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM''@;'; put 'put ''sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ''@;'; put 'put ''QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s''@;'; put 'put ''Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al''@;'; put 'put ''ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ''@;'; put 'put ''RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP''@;'; put 'put ''qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW''@;'; put 'put ''xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d''@;'; put 'put ''k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b''@;'; put 'put ''M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL''@;'; put 'put ''bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW''@;'; put 'put ''/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm''@;'; put 'put ''LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl''@;'; put 'put ''YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v''@;'; put 'put ''iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf''@;'; put 'put ''az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1''@;'; put 'put ''MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30''@;'; put 'put ''tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN''@;'; put 'put ''YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl''@;'; put 'put ''91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD''@;'; put 'put ''20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk''@;'; put 'put ''QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K''@;'; put 'put ''LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5''@;'; put 'put ''kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt''@;'; put 'put ''gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9''@;'; put 'put ''bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX''@;'; put 'put ''C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7''@;'; put 'put ''BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw''@;'; put 'put ''cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM''@;'; put 'put ''xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN''@;'; put 'put ''P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s''@;'; put 'put ''3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt''@;'; put 'put ''zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX''@;'; put 'put ''sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t''@;'; put 'put ''SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr''@;'; put 'put ''1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895''@;'; put 'put ''TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn''@;'; put 'put ''vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz''@;'; put 'put ''vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx''@;'; put 'put ''hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy''@;'; put 'put ''OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb''@;'; put 'put ''1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0''@;'; put 'put ''wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ''@;'; put 'put ''jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2''@;'; put 'put ''I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH''@;'; put 'put ''2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5''@;'; put 'put ''JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt''@;'; put 'put ''urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ''@;'; put 'put ''Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ''@;'; put 'put ''yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w''@;'; put 'put ''JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ''@;'; put 'put ''oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537''@;'; put 'put ''XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q''@;'; put 'put ''XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6''@;'; put 'put ''13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK''@;'; put 'put ''RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H''@;'; put 'put ''KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV''@;'; put 'put ''HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA''@;'; put 'put ''i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj''@;'; put 'put ''BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2''@;'; put 'put ''PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr''@;'; put 'put ''DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp''@;'; put 'put ''xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8''@;'; put 'put ''EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye''@;'; put 'put ''BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ''@;'; put 'put ''2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk''@;'; put 'put ''T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA''@;'; put 'put ''Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK''@;'; put 'put ''7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa''@;'; put 'put ''Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT''@;'; put 'put ''DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7''@;'; put 'put ''9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv''@;'; put 'put ''wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ''@;'; put 'put ''AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG''@;'; put 'put ''x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6''@;'; put 'put ''VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj''@;'; put 'put ''O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI''@;'; put 'put ''fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca''@;'; put 'put ''+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G''@;'; put 'put ''WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq''@;'; put 'put ''McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD''@;'; put 'put ''CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje''@;'; put 'put ''pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L''@;'; put 'put ''/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re''@;'; put 'put ''qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm''@;'; put 'put ''y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583''@;'; put 'put ''P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p''@;'; put 'put ''QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE''@;'; put 'put ''ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh''@;'; put 'put ''3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr''@;'; put 'put ''P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU''@;'; put 'put ''HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d''@;'; put 'put ''B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK''@;'; put 'put ''oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe''@;'; put 'put ''+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu''@;'; put 'put ''9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5''@;'; put 'put ''tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd''@;'; put 'put ''LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG''@;'; put 'put ''7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP''@;'; put 'put ''6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw''@;'; put 'put ''LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a''@;'; put 'put ''NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54''@;'; put 'put ''FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u''@;'; put 'put ''b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY''@;'; put 'put ''A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha''@;'; put 'put ''U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl''@;'; put 'put ''uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM''@;'; put 'put ''GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA''@;'; put 'put ''GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi''@;'; put 'put ''0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+''@;'; put 'put ''1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl''@;'; put 'put ''+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN''@;'; put 'put ''alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp''@;'; put 'put ''JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL''@;'; put 'put ''kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy''@;'; put 'put ''uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm''@;'; put 'put ''UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw''@;'; put 'put ''9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz''@;'; put 'put ''vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p''@;'; put 'put ''JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U''@;'; put 'put ''70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95''@;'; put 'put ''EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24''@;'; put 'put ''7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX''@;'; put 'put ''H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o''@;'; put 'put ''Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ''@;'; put 'put ''JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ''@;'; put 'put ''FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A''@;'; put 'put ''jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o''@;'; put 'put ''+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf''@;'; put 'put ''8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA''@;'; put 'put ''QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX''@;'; put 'put ''09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC''@;'; put 'put ''3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn''@;'; put 'put ''/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS''@;'; put 'put ''RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt''@;'; put 'put ''5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy''@;'; put 'put ''o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV''@;'; put 'put ''8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E''@;'; put 'put ''8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8''@;'; put 'put ''8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0''@;'; put 'put ''VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK''@;'; put 'put ''1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw''@;'; put 'put ''Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU''@;'; put 'put ''Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz''@;'; put 'put ''HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3''@;'; put 'put ''uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW''@;'; put 'put ''hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N''@;'; put 'put ''eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl''@;'; put 'put ''4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0''@;'; put 'put ''xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP''@;'; put 'put ''+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh''@;'; put 'put ''Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6''@;'; put 'put ''Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7''@;'; put 'put ''7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw''@;'; put 'put ''PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze''@;'; put 'put ''hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK''@;'; put 'put ''qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz''@;'; put 'put ''0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i''@;'; put 'put ''zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ''@;'; put 'put ''mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo''@;'; put 'put ''ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH''@;'; put 'put ''v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S''@;'; put 'put ''BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp''@;'; put 'put ''Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte''@;'; put 'put ''/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku''@;'; put 'put ''5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus''@;'; put 'put ''k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt''@;'; put 'put ''PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V''@;'; put 'put ''J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN''@;'; put 'put ''undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v''@;'; put 'put ''YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m''@;'; put 'put ''AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO''@;'; put 'put ''Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v''@;'; put 'put ''yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4''@;'; put 'put ''QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b''@;'; put 'put ''1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl''@;'; put 'put ''43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe''@;'; put 'put ''nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4''@;'; put 'put ''Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML''@;'; put 'put ''YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k''@;'; put 'put ''MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//''@;'; put 'put ''/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO''@;'; put 'put ''4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce''@;'; put 'put ''rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr''@;'; put 'put ''kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7''@;'; put 'put ''Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg''@;'; put 'put ''4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp''@;'; put 'put ''mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f''@;'; put 'put ''8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY''@;'; put 'put ''9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo''@;'; put 'put ''soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx''@;'; put 'put ''0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB''@;'; put 'put ''R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO''@;'; put 'put ''/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn''@;'; put 'put ''RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i''@;'; put 'put ''wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y''@;'; put 'put ''FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR''@;'; put 'put ''G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm''@;'; put 'put ''k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj''@;'; put 'put ''HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW''@;'; put 'put ''cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm''@;'; put 'put ''/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r''@;'; put 'put ''SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU''@;'; put 'put ''PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL''@;'; put 'put ''hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu''@;'; put 'put ''1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV''@;'; put 'put ''0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7''@;'; put 'put ''9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ''@;'; put 'put ''P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm''@;'; put 'put ''SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3''@;'; put 'put ''z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL''@;'; put 'put ''bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV''@;'; put 'put ''jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV''@;'; put 'put ''WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI''@;'; put 'put ''G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH''@;'; put 'put ''i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e''@;'; put 'put ''v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt''@;'; put 'put ''AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum''@;'; put 'put ''wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1''@;'; put 'put ''2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v''@;'; put 'put ''a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L''@;'; put 'put ''A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV''@;'; put 'put ''Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0''@;'; put 'put ''9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T''@;'; put 'put ''Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO''@;'; put 'put ''bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw''@;'; put 'put ''+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57''@;'; put 'put ''Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n''@;'; put 'put ''a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq''@;'; put 'put ''sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu''@;'; put 'put ''HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk''@;'; put 'put ''H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw''@;'; put 'put ''rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq''@;'; put 'put ''N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/''@;'; put 'put ''kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O''@;'; put 'put ''Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM''@;'; put 'put ''8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ''@;'; put 'put ''wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM''@;'; put 'put ''1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL''@;'; put 'put ''Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR''@;'; put 'put ''R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim''@;'; put 'put ''txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk''@;'; put 'put ''7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj''@;'; put 'put ''6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA''@;'; put 'put ''o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17''@;'; put 'put ''9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm''@;'; put 'put ''UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8''@;'; put 'put ''/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6''@;'; put 'put ''WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E''@;'; put 'put ''hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC''@;'; put 'put ''LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA''@;'; put 'put ''EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6''@;'; put 'put ''0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy''@;'; put 'put ''oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC''@;'; put 'put ''GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/''@;'; put 'put ''Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz''@;'; put 'put ''jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w''@;'; put 'put ''763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6''@;'; put 'put ''Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX''@;'; put 'put ''3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb''@;'; put 'put ''YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ''@;'; put 'put ''vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7''@;'; put 'put ''yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz''@;'; put 'put ''4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O''@;'; put 'put ''d1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL''@;'; put 'put ''AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc''@;'; put 'put ''PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g''@;'; put 'put ''IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI''@;'; put 'put ''aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9''@;'; put 'put ''8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on''@;'; put 'put ''CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto''@;'; put 'put ''59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx''@;'; put 'put ''P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb''@;'; put 'put ''nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP''@;'; put 'put ''M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K''@;'; put 'put ''72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ''@;'; put 'put ''8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE''@;'; put 'put ''gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n''@;'; put 'put ''M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d''@;'; put 'put ''eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF''@;'; put 'put ''IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ''@;'; put 'put ''TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn''@;'; put 'put ''aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X''@;'; put 'put ''iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L''@;'; put 'put ''1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/''@;'; put 'put ''UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE''@;'; put 'put ''aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy''@;'; put 'put ''dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA''@;'; put 'put ''SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl''@;'; put 'put ''wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf''@;'; put 'put ''r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW''@;'; put 'put ''clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU''@;'; put 'put ''3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd''@;'; put 'put ''nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2''@;'; put 'put ''EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v''@;'; put 'put ''ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul''@;'; put 'put ''JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm''@;'; put 'put ''0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3''@;'; put 'put ''ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA''@;'; put 'put ''EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI''@;'; put 'put ''9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T''@;'; put 'put ''JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ''@;'; put 'put ''M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn''@;'; put 'put ''LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb''@;'; put 'put ''fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H''@;'; put 'put ''DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH''@;'; put 'put ''VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m''@;'; put 'put ''qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b''@;'; put 'put ''hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X''@;'; put 'put ''/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+''@;'; put 'put ''/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu''@;'; put 'put ''PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS''@;'; put 'put ''qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN''@;'; put 'put ''V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p''@;'; put 'put ''pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt''@;'; put 'put ''D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y''@;'; put 'put ''dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU''@;'; put 'put ''aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a''@;'; put 'put ''ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd''@;'; put 'put ''undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk''@;'; put 'put ''WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd''@;'; put 'put ''RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw''@;'; put 'put ''a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz''@;'; put 'put ''/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx''@;'; put 'put ''DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/''@;'; put 'put ''v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL''@;'; put 'put ''qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O''@;'; put 'put ''BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX''@;'; put 'put ''jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf''@;'; put 'put ''v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY''@;'; put 'put ''vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn''@;'; put 'put ''pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk''@;'; put 'put ''gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830''@;'; put 'put ''8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2''@;'; put 'put ''STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs''@;'; put 'put ''qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL''@;'; put 'put ''vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV''@;'; put 'put ''AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3''@;'; put 'put ''Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84''@;'; put 'put ''rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li''@;'; put 'put ''lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT''@;'; put 'put ''9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ''@;'; put 'put ''m+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le''@;'; put 'put ''p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl''@;'; put 'put ''OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0''@;'; put 'put ''GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi''@;'; put 'put ''Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh''@;'; put 'put ''RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef''@;'; put 'put ''HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w''@;'; put 'put ''6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1''@;'; put 'put ''NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz''@;'; put 'put ''zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh''@;'; put 'put ''iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII''@;'; put 'put ''A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM''@;'; put 'put ''DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV''@;'; put 'put ''DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9''@;'; put 'put ''NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI''@;'; put 'put ''MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj''@;'; put 'put ''KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky''@;'; put 'put ''raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x''@;'; put 'put ''ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ''@;'; put 'put ''ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N''@;'; put 'put ''sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU''@;'; put 'put ''XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS''@;'; put 'put ''wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ''@;'; put 'put ''AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs''@;'; put 'put ''wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF''@;'; put 'put ''prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-library-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAG7CAYAAACLjj9uAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQecVNW9x0+7907dQhNLYmLLS4wmStmOYIslGk0sicanRo0JILALqIltLXRYECtJjGkmKinGhiCwC1soorFEk5iosWEBtszutFvOee8uDM7OzrLT596Z/37ey8rOOf/y/Z+Z39x7T8EIfoAA''@;'; put 'put ''EAACQAAIAIGsEsBZtQ7GgQAQAAJAAAgAAQRiC4MACAABIAAEgECWCYDYZhkwmAcCQAAIAAEgAGILYwAIAAEgAASAQJYJpC229zVP9Zgxjo4JtMur82vH/yyQ5fjBfJ4IPL6v7rHuL5pyf1+eQgK3RUYg8tkzdfL9foyReKjtB96ran/ZW2QYIF2bEBggtg83X+EIGOIPCvZ8HSOKMSYYIRxp0/8b''@;'; put 'put ''7/u3+aL5GkYYMSq7zVf6Xx7+R+xtsu/X8O2HaiESNmEGmfbPABOp2MtU3ilkknBtIoUxO8QWyGY5p4CpoLqkPV5j3qRpv18Tpqsbql8gMcChEJF/7/2973XzlxBYGOb/EkxoiPted1J+/pVTfhVK2CE0BAI5IDDgHXl/6yXlSO79d8jwjcyBb3ABBIAAEMgoAZm4exzcfcTV1as7M2oYjAGBNAkM''@;'; put 'put ''ENtVO84ZJTj+d0DvKUvTLnQHAkAACOScgEScPRhrR06v2LAn587BIRA4AIEBYvtA+/ljkMTfDOrdpUANCAABIGA3AhJxdGscHdlQvRaubO1WvAKPd5DYYln8O6B1lRR43pAeEAACBUgAxLYAi1ogKQ0SWyKjt/xaZ/8MY/gBAkAACNiJAIitnapVXLHGEVv8tl/b4y4uDHuz5ULXCGZSsrmbEyIN''@;'; put 'put ''oYXMmdoCcZ5sf2h/YAKMKC6zhcG1MCWSMhyvvfVQg8O1K4bXI+ySyVXn4f4le2bfyH8n2v+zWcOJ9tjfLt505/2fT+bqB0YU53BWTbGlGjtiat0zXcO1hdeBQC4JDBTbV84fI+nSB77wJ3EFRwjBBSIXC52/SBDSdSUsJE6Exknu1gXE0JGT8K0ZoQPGqTn35pHsNw1/dEw2WWUqO4M5rZkadKay''@;'; put 'put ''dAihIe6xDFWjRGqR69zTeUOnzM10uo+dFOSpsU8n8H19NWPoz4Z4ddAMOuS4FIgwGUvHIkyfoYTJ8cIDsc1A0cBEVggMElvFcH7SHfowrjMhOHeotHTalBabSEpWmIFRIAAE8kRgUVuNVwj1A5m64s4rAbHNU2HA7bAEkhZb3ucsmfuNdQMuIIb1Ag2AABAAAhkgsHJrRYlfNd5TmDvuigkQ2wxA''@;'; put 'put ''BhNZIQBimxWsYBQIAIFsENh7ZRv+QKbuoa5se6jGvgjPbLNBH2ymQwDENh160BcIAIGcEth3G/lDmbq88RxLxNGjK+Ev1J/Q0p3TwMAZEBiGAIgtDBEgAARsQwDE1jalgkBjCIDYwpAAAkDANgRAbG1TKggUxBbGABAAAnYlcF/zZE8v8++E28h2rWDxxp3sla3B+5ylMBu5eAcMZA4E8kkgEbGV''@;'; put 'put ''mXH4tePX9+QzTvANBGIJgNjCmAACQMA2BPaKbWCnTJ1DTpACsbVNOYsqUBDboio3JAsE7E1g7zNbzRTbuHuLmbORQWztXeNCjR7EtlArC3kBgQIkAGJbgEUtkpRAbIuk0JAmECgEAuYOUgFNfHiAK9tumRlfgGe2hVDtwsoBxLaw6gnZAIGCJrBwx7hSFKQfgNgWdJkLMjkQ24IsKyQFBAqTwMId''@;'; put 'put ''p5aioO+AYqsr4S/CDlKFWX87ZzVIbIk69Hm2QnBY+mPnakPsQMDmBEyxxUHfB9LQE6S6QWxtXuQCDT+pw+NBbAt0FEBaQMAmBEBsbVIoCHMQgQFiu/KlM0crhvMdv7Yn7tncILYwgoAAEMgngeXNk8tUFngfrmzzWQXwnQoBENtUqEEfIAAE8kIAxDYv2MFpBgiA2GYAIpgAAkAgNwQWtNaWE6S+''@;'; put 'put ''B1e2ueENXjJHII7YOt72a51xd2eB28iZAw+WgAAQSJ4AiG3yzKCHNQiA2FqjDhAFEAACCRBIRGypxo6YWvdMVwLmoAkQyBkBENucoQZHQAAIpEugqaNqhGYY7x7oNjKIbbqUoX82CIDYZoMq2AQCQCArBEBss4IVjOaAAIhtDiCDCyAABDJDAMQ2MxzBSu4JgNjmnjl4BAJAIEUCw4ktI0o30yR4''@;'; put 'put ''ZpsiX+iWPQKw9Cd7bMEyEAACGSYAYpthoGAuZwRAbHOGGhwBASCQLgEQ23QJQv98EQCxzRd58AsEgEDSBIZb+gO3kZNGCh1yRADENkegwQ0QAALpEwCxTZ8hWMgPARDb/HAHr0AACKRAYLi9keHKNgWo0CUnBEBsc4IZnAABIJAJAiC2maAINvJBAMQ2H9TBJxAAAikRGO48W7iyTQkrdMoBARDb''@;'; put 'put ''HEAGF0AACGSGAIhtZjiCldwTALHNPXPwCASAQIoE4DZyiuCgW94JgNjmvQQQABAAAokSALFNlBS0sxqBeGL7X7+2xxUvUCE4533OkrnfWOe3WiIQDxAAAoVPAJb+FH6NCzVDENtCrSzkBQQKkEACO0h1MU06Es6zLcDi2zwlEFubFxDCBwLFRMAUW9Uw3pWp0xMvb0YUENtiGhA2yhWe2dqoWBAq''@;'; put 'put ''ECh2AkubJ4/SWeCdA4mtoahH1J/Q0l3srCB/axEYILardpwzCgnJfGbrhme21ioURAMEgABCKzfXjQ7g8NsgtjAa7EYgabE1JHro9RNbPrZbohAvEAAC9iewYuspB4W13v9IQ95GljsNRTsSrmztX+tCyyCO2LJ3/Fpn3OchQgguU8/Vugg0myCECDPzt65JmBKOdSwG2IuGZb4eD57BiYj+OxN4''@;'; put 'put ''wL8TAR7tdyg/FEv9/g3tsxjJUDHta3sg3xRzbIi9sUf/94Cchdb/Oo/JMZGcYttEx2ocIL5ILNG/k/UXySvSj+7LI9pOdE5UGrpmRpy+w8UTqVVsvcx/J8phf+w4/rgbLoZEXo/lFMsr0bpH84sen0ONgdj6m7WObWvoQ78XE8ktmTaUDa7//vdGVP0jPA40Xky/aoxzrCKdMF01BNYkIh2v8/Bf''@;'; put 'put ''GJEd8WJkRO5UmDji2vHre5LJAdoCgWwTGPAmvXfb+SMZQe8EtE7vUI650DUuuGG+jhGO9B9SZLOdQPbs788twy5E1JeJaGzmn9PwaZqK/poSMR35W/Trsa+llWF0PmkZSrGzFYde0t8XU8g9l3mnnE9KHcWAgRz5h+j/MUFJ1BF3aaL5mim2cGWbwnCCLlknEEdsxdsBrask657BARAAAkAgwwRA''@;'; put 'put ''bDMMFMxljACIbcZQgiEgAATyTcAUW6bJR8E623xXAvzHEhi09Ec2lLcCWteQt5EBIRAAAkDAqgQYUToJNo6ZXrFhj1VjhLiKk8AAsb1v+1ljKVbePNAz2+LEBFkDASBgBwLmphYKU465dvxTu+0QL8RYPAQGiO09L517iFO43vOFP6LFgwAyBQJAoFAImGJLsHE0XNkWSkULJ48BYnt/6yXlsuTa''@;'; put 'put ''iAzjYC6M/hnH5gxZbE483v8TmdaKzcnIOMw+HqMagSGJOIwxHxGkGHivmajpttF2Y2dWpjSJMeWqiIHzeFO2k0zHgUyH7jl8bEPPBk6UYprzWhNNJRk8SbYdyCCBvIfHmmQEiTVPY7Z5lIPk6pW6z/iFHfq9OhDqvqnD/XHvrc/e2cTmMiHe/2+MCRVIZwGy86Ch+DHiQJI28j2EEUci+nNoYI/I''@;'; put 'put ''yoiA3vOqgpzfmzZldV9iNYFWQCA3BAa9b3/zymXu3s4Q9o5wCPO3GYZXdfS/OYIjnf2//WqXKA+7he4Mlwpm/KtP/aR0qHCduPyLP6564r+ZTEcIhO9Zc6Y8lM2xh3vEx+/27c9txllrwpn0D7aAQKERWPnsmUpiOR0V0+w//f8233MXHbs6donssCZXbf72wV34g3/J1Bl3nohC3bsJL5kQFMYn''@;'; put 'put ''pjHzc8e9y69ddNFqI/I54HUehLsUf//73RfepTVOadGHdQwNgECOCST3JTkmOFOYQ1r4gz71k7Kh4lZlqexGWGCe47KCOyBgDwKL2mq8nIffV5g77hd2B/N2hiV2ZP0JT8Bex/YoKUQ5BIE0xfZ0d0grfb9P/bR8KMI4jMvrp8Cm4DACgQAQGExg4fPjSoWC31OYO+7afhcr6eZhfgQs5YHRY3cC''@;'; put 'put ''aYntkldOd5fqZR/2hYe+jQxia/chAvEDgewRMMUWOfB7Mo0vtk5W2mMIeuT0ir/AUp7slQEs54BAWmL7m1dOd4dAbHNQJnABBAqTwHBXtk5W6jMEPQLEtjDrX0xZZUBsy3f2hT8ecntHuLItpuEEuQKB5AgkILY9hIijYN1sclyhtfUIgNharyYQERAoGgIgtkVT6qJPFMS26IcAAAAC+SOwvHly''@;'; put 'put ''WZj1vXugZ7ZwZZu/+oDnzBEAsc0cS7AEBIBAkgRAbJMEBs1tSwDE1ralg8CBgP0J7BVb/3sydcXd1MKcjQxXtvavM2QwYBvG5HGYs5HD+siPesM7hzwlCCZIJc8VegCBYiEAYlsslYY8076yBbGFQQQEgECqBBa01pZjFH4XrmxTJQj97EIAxNYulYI4gUABEgCxLcCiQkpxCYDYwsAAAkAgbwSa''@;'; put 'put ''OqpGqIb+X7iyzVsJwHGOCIDY5gg0uAECQGAwARBbGBXFQgDEtlgqDXkCAQsSGF5svT2EYNhByoK1g5CSIwBimxwvaA0EgEAGCczfNnEkUcU7Q99GBrHNIG4wlUcCaYntfa9f6JFDbCcs/cljBcE1ELAxgUTE1hASnPpj4xpD6HsJpC22Uoh8CAcRwHACAkAgFQKJiC3cRk6FLPSxGgEQW6tVBOIB''@;'; put 'put ''AkVEYGnzuFE6I2/DbeQiKnqRpgpiW6SFh7SBgBUIJHJlC7eRrVApiCFdAiC26RKE/kAACKRMIJErWxDblPFCRwsRALG1UDEgFCBQbARAbIut4sWbL4ht8dYeMgcCeSewT2zfkqmrJF4wLlbSrQt21PSKv+zJe7AQABBIg0BaYmue+hPSy3fCbOQ0KgBdgUARE9j7zJa/PdTh8SC2RTw4Cix1ENsC''@;'; put 'put ''KyikAwTsRADE1k7VgljTIQBimw496AsEgEBaBEBs08IHnW1EAMTWRsWKF2pTR5VT455yig2JEnlQPSWuCm3f3xnhg17XVSOtMRAbU7wYBrXBg+PIVBkMQUSsLYOr/X9jMu3/rfO9bUw2kbaRv/W3IxwLxgjWGcdqYM+0KS19mYoP7AwkAGILI6JYCKT1QQvPbPM/TJZvOfm2oNYz08E85fmPprAi''@;'; put 'put ''0IyQ3+s4+JefuqQ5jceuVgsrO2tkA2JrjTpAFNknAGKbfcZZ9XDvtnNWqobvuqw6KWLjpY7DfutV1KsvArHNyigwxRaH+dsKc8Ns5KwQBqNWIQBia5VKpBjHA9u/dXdQ756RYnfoNgyBcvlzD6nI9eNrx/9MA1iZJwBim3mmYNGaBEBsrVmXhKMCsU0YVUoNS5SDf26IkmkgtinhG7YTiO2wiKBB''@;'; put 'put ''gRAAsbV5Ie9/4byVIa0LbiNnqY5eeewD14x/bGqWzBe9WRDboh8CRQMAxNbmpQaxzW4BPdLoe3444Y9wmz5LmEFsswQWzFqOAIit5UqSXEDDiS1BLIQx1QXi+5a5YGH+RHmJHQMxS2f6/zloOU1yUVquNUYIY4wRFoIzgQznUBG62Ii7fzTxL7Msl0GBBARiWyCFhDSGJQBiOywiazc40DNbc+kK''@;'; put 'put ''w55zZtduaLZ2FvmLblnb5EpMxJahxbZ8xY8mPlGfvwgL2zOIbWHXF7L7jACIrc1Hw4HEVgjOdcG/ckNt+79snmbWwl/RVvMlTtg/h3LgpGXLf1zx14asBVDkhhMR24CuHtlQvbazyFFB+jYnAGJr8wI+sP28FUG9a+ZQaXCdHztnUusbNk8za+Eva609BlM65JcRh1TaNHXCk7OzFkCRGx5ObB3M''@;'; put 'put ''2x3SNRDbIh8nhZA+iK3Nqzjc0h8d83HXV7W+ZPM0sxY+iG3W0CZkeFixlbxdIU07Cq5sE8IJjSxMAMTWwsVJJLThJkgZQjtubk3H3xOxVYxtFrXVfEk6wG1khZUumzbxyTnFyCYXOYPY5oIy+LACARBbK1QhjRhAbNOAhxBa2jH5fwgS/xjKCohtenyH6w1iOxwheL1QCIDY2rySILbpFXD5lklf''@;'; put 'put ''FgIP+UwbxDY9vsP1BrEdjhC8XigEQGxtXslV2867x290TR8qDbiNfOACL91c9xXCyOtDXtmS0mXTKuE2crbeJiC22SILdq1GAMTWahVJMp5V2759j9/YM6TYqlz/6o217UOKSZLuCq75kvbJX6VYvAa3kfNTWhDb/HAHr7knAGKbe+YZ9Qhimx7Opo5JxyGEXwWxTY9jqr1BbFMlB/3sRgDE1m4V''@;'; put 'put ''i4kXxDa9Ai7ZWnc85eQVENv0OKbau6mjakRY194Z6jxbByz9SRUt9LMYARBbixUk2XBAbJMlNrD9stbar2FKXx7KCmxqkR7f4XrDle1whOD1QiEAYmvzSoLYplfA4a5sYbvG9PgO1xvEdjhC8HqhEACxtXklQWzTKyCIbXr80u0Nt5HTJQj97UIAxNYulRoizuHW2cJs5AMXeLjZyC4Gp/5k8y0C''@;'; put 'put ''YptNumDbSgRAbK1UjRRiAbFNAVpUl6a2mmMRYUNuZwm3kdPjO1xvENvhCMHrhUIAxNbmlRxObGFTi/SubEFss/sGAbHNLl+wbh0CILbWqUVKkQx36g9C4viG6s1DbtqQktMC6jTcbWQQ2+wWG8Q2u3zBunUIgNhapxYpRXL/9nOXh/SeWUN1hvNsD4x1uO0aHVJ509QJT8B5timNzuE7gdgOzwha''@;'; put 'put ''FAYBEFub1/GBbec0BQ1ffbw0DK5rmJOvw+HxQxd5uCtbOIggu28QENvs8gXr1iEAYmudWqQUyX1bz1ka5r64V14G18Iy9f6vykWLadyzz0OYOuLWXSI61jgT8QKJvGb+jn59qPYpJRPTKdbXgWwyEj+n+H38/X/WeVhwrtRoPPTHoWwr1Lt4WsXTN2QiH7AxmACILYyKYiEAYmvzSt+37axFYcN/''@;'; put 'put ''/VBpECwhgpjNs8xe+BzpiAttSAcycS+YXvnsT7MXQXFb3ie2byvMXRqPBGzXWNzjo5CyB7G1eTVXbjtzoW4E4MorS3WUqGPedRVrb86S+aI3C2Jb9EOgaACA2Nq81CC22S0gJY47Z1auvTW7XorXOoht8da+2DIHsbV5xe/bevbSMO+D2bJZqiPFyu0zq9Y1Zsl80ZsFsS36IVA0AEBsbV7qVdu/''@;'; put 'put ''c79f3/1jm6dh2fAJke+YVfn8bZYN0OaBgdjavIAQfsIEQGwTRmXNhr986bJHukPvXWLN6OwflUy9S6ZXPD3kBDT7Z5jfDEBs88sfvOeOAIht7lhnxdN9289dGtQ6Z2bFeJEb1Yxgr0PyLquvaplX5Ciylj6IbdbQgmGLEQCxtVhBkg3n8ccvpG+M3iWVKOH+WvrCStx1ssnaLfb2Jk/WXcbH9nn0''@;'; put 'put ''iy5abRQ7j2zlD2KbLbJg12oEQGytVhGIBwgUEQEQ2yIqdpGnCmJb5AMA0gcC+SQAYptP+uA7lwRAbHNJG3wBASAwgACILQyIYiEAYlsslYY8gYAFCYDYWrAoEFJWCKQttmF95Ee94Z3eoaLDYVxeP6WlOyvRg1EgAARsTQDE1tblg+CTIABimwQsaAoEgEBmCYDYZpYnWLMuARBb69YGIgMCBU8A''@;'; put 'put ''xLbgSwwJ7iOQdbFVZansxvHre4A4EAACQCCWAIgtjIliIQBiWyyVhjyBgAUJgNhasCgQUlYIgNhmBSsYBQJAIBECILaJUII2hUAAxLYQqgg5AAGbEtgrturbCvOUxkvBIXm7Qpp2VEP12k6bpghhA4F+AiC2MBCAABDIGwEQ27yhB8c5JgBim2Pg4A4IAIHPCIDYwmgoFgIgtsVSacgTCFiQQCJi''@;'; put 'put ''i0LiyKl1z3RZMHwICQgkTADENmFU0BAIAIFMEwCxzTRRsGdVAiC2Vq0MxAUEioAAiG0RFBlS7CcAYgsDAQgAgbwRALHNG3pwnGMCILY5Bg7ugAAQ+IwAiC2MhmIhAGJbLJWGPIGABQmA2FqwKBBSVgiA2GYFKxgFAkAgEQIgtolQgjaFQADEthCqCDkAAZsSWNBaW45E8J0D7SAFS39sWlwIewAB''@;'; put 'put ''EFsYEEAACOSNAIht3tCD4xwTALHNMXBwBwSAwGcEQGxhNBQLARDbYqk05AkELEjAfGar6upbMvOUxQvPPIgAbiNbsHAQUtIEQGyTRgYdgAAQyBSBRMQWTv3JFG2wk08CILb5pA++gUCREwCxLfIBUETpg9gWUbEh1cEEVm49s4RpvZTLClENJhyGX/Riod9Q294LvLJPAMQ2+4zBgzUIgNhaow4Q''@;'; put 'put ''RY4IPNB++hjElK8KjC+gmNb4Qp8ezpHOorYuFQghPsL5hY+ccsm/e4IfvEwRXa0K450ZlWt8OQqzaNyA2BZNqYs+0ayLLQ7j8vopLd1FTxoA5I1AY/NkNkJhxxGqzPaFPj5DorKbEtmRaEA6V4MOWrITY/J7QvD90yY++3GifaHdgQmA2MIIKRYCILbFUukizNMU2TKZnhAwfHdSTGol6nCni0Ei''@;'; put 'put ''zg8RMn6DdHTvdbXP70zXXrH3B7Et9hFQPPmD2BZPrYsq06U7Jo+iKp2ncf9ljCjOeMlzYWgG1zSBuIEQEv3/hzAmmFKCmUwwNW8vx/3Rufa2g7l/rLDO5mvHv6gVFdwMJgtim0GYYMrSBEBsLV0eCC4VAstbTzmCE+0xjPH42P5CCNGn7Xnfzcr+GtT61hHD8cJNp277JLrd0uZxo8JYP06RPZOJ''@;'; put 'put ''YBcLJI7BGMd9r0jE/Qw39Btn1qz7eyqxFnsfENtiHwHFkz+IbfHUuigyXdo6uRYT47cYky9EJ8yFoUvE2RxSux8Mcve6xiktfYkAWbVjnBTQvIeGdf+tAolvK9RdGttPM0J+Fy19REP6HQ3VGz9MxC602UsAxBZGQrEQALEtlkoXQZ53d0w5RQjyMMf656LTDWm+lwlVfurylW+ccdaacKoozK0F''@;'; put 'put ''GeFXqnrgJ06pdFSsHdXw90jY9XNFkhZOr9iwJ1U/xdQPxLaYql3cuYLYFnf9Cyb7pe2TJgW1zt+75ZGHRpIyuKZS6rgHh/hdmZwRv3j75LFM53cZXP8+JZISCzGk9b7mlcfM2FPi7Wg8drVaMJCzkAiIbRaggklLEgCxtWRZIKhkCCzfMvkLYS3wnMycX4r004xwgAvjbnffqNvTuZo9UBxL2iee''@;'; put 'put ''rBt8oUQdJ8ROpjK4FlZoyTpMjDv2BLSXG6e06MnkVCxtQWyLpdKQJ4gtjAFbEzB3gBJC/7Mh1FOirmjDlEjfa6je9JdcJLe4teqbjCrLEeJHmrOZo30KwTlC9A+c8VvmVmx+Jxfx2MkHiK2dqgWxpkMAxDYdetA3rwSEQLipfVITwmhmZLYwF7pGBLmpobZ1SS6DW/nsmYrfs/smgfRpDlYyItY3''@;'; put 'put ''RnQXIWRxSA+ugq0gP6OTiNhyLh09veIv8Aw8lwMafGWcQNpiq+ojPvaFP/IMFRnsIJXxmoHBfQTuaTvtEA1rbyAs9s8QFgI90Vu26+LGY9/Iy7PSxc0TxiJKZguMpkrU4YotFuf6fzGhd3K347G5X1vnL/ZigtgW+wgonvxBbIun1gWX6d1bTr1N5+ptkavakO7rZNR5yvU1HS/nO9llrbXH+I3u''@;'; put 'put ''+zzyyFNjYxGCG4bgWyXsmHvohyO2X3TRanNTjaL8AbEtyrIXZdIgtkVZdvsn3dTxjREyZVtUo++YSDaaoTXdUNcx2yrZPf74hfSdQ94/m2JpMcFk/+StSHw6Dwcl4nqaCH7HzJqWotwUY/62iSNJ2PjPgQ6Ph9vIVhnREEc6BEBs06EHffNGYPmWyVcIIR7+TGjD78tCqqif1PpR3oIawvHy5sll''@;'; put 'put ''OlNvF5hfE2/rSCzIJ5hIi0pD6gNXTmkJWS3+bMZjB7E1vzT5R++SAmNGM9ITLCUyoiaTsC5zt673EM2nvYuQDjPOszlS7G8bxNb+NSy6DMxdnQQ6/OGAuufSSPIC4ftmV7dMtzKMee3jv+okJTcIrl8ab/tHr3zwS0Gts2ns+6WPFsutZSuLbf9Zx5LzK5KQr/Yqoyo6g+8frBp9I7m5lTYWiGIF''@;'; put 'put ''OZjX71XGfCiE+lpfuGsdIupz145/+j0rj0OILT8EQGzzwx28pkHAPGSAhMULCKP+LRnN7RIxIt+9vm7L02mYzUnXRoGIs73mJCx4E6Py12OdmttKKrRkrUaCNzRMbH49J0Hl0YkVxfbe7eccSxGZRbF8mk/debB5KEUiiMx9t7nQwxJ17qBIukUTPdsaqrcEE+kLbQqfAIht4de44DK8u+O0UzQR''@;'; put 'put ''WEMwk8zkJOJ4WSBykp0Od29snuxwSoGLQ1rf7V5l9OGxRVKNgE+h7l/qQl4wt2bdpwVXxH0JWUVsV+04xxXS1QqJOqf7QjtPlamzJB3m5hK0gNbziVcZvVx3Satg5nk6NAujL4htYdSxqLJYseXUei60pqikf3vYB2OutOOtV1NsREi9DmMyw8G85YOudDl/n1HncoLpQ3b6MpHogLSC2C7fcvKJ''@;'; put 'put ''BEkLQ3p39VBnHhtC1wyuBnQeDplHMyKECMVMokR2mM/hhzqO0dzUhGBpi8Ska6dPXFvwdyoSrXsxtgOxLcaq2zzne7Z+49caD/1vJA0h0NTZNZsesHNai9urjwypvgedUukkSgbftlT1wBtO5r3GIfe8UEjn5+ZTbBtfv1Au83WfgYRYypF2dOz4Mbfc1Hn4n5jQjbqubuE88CZj7p2qEQ66VSY0''@;'; put 'put ''6nAgWTvIMPRjFNk7zjDUixiRv0CJNOi2c0jv63TS0lk91ZMeacSN3M5jFWJPjQCIbWrcoFeeCJi3+whyPtGrfnLafrFFxjmzq9ss/7x2OGTm81xl87hTKVWWUcyOjTeJihHpCYTETddVbPgHxv2n3dv6J19ia7L2ttfcbSDjqtgZ4poR6iOYNYeMvntvOemVdYkCNm06Wk88TWalDVyoUyI7m1UV''@;'; put 'put ''AAAgAElEQVSPOaL7O5n3J9zfd++0BI94TNQ3tLM+ARBb69cIIowi8FDbuV5VxpuCevcJ+8WW46rZtS1bCwVUY/NkprDg/wqhLY13a1k1Ar0Sdq5yCj5/al1bl53zzpfY3rP1zDmq0bcIY0Ki+WlG8In//wbTGKrd/lojRildgZqi6+o4+YsOwpbrInxOtP3+OVRIPC8bnstmTFqzy861g9iTIwBi''@;'; put 'put ''mxwvaJ1nAqbY6or0vF/bXREJhRN0+pzKTc/nObSMu5+/uW40Fv6ZCJPpCht8aD0S+CNMyJ0UK4/Y9XluPsR2efvJjboI3Rh9PGJQ9+2WsGNqqVN9IlO36c0vTW7ZuLJEPqjRr+06JHqAOGhpW5j3zayv2vhSxgcOGLQkARBbS5YFghqKgHkbmWL3477wR2dH2hhCmzm3pmNloVJb2l59eEDtfNAt''@;'; put 'put ''jz4NY9K/oUL0T0jzvexio2d2q2qH3TZWyLXYLu845Tydh39DCfVGGPapu9+nhF1z06RX1mZjDK1om/IlHRuPEowHLPXCiP4LCfrd+prn8769aDbyBpsDCYDYwoiwFYGHmyc7VM+In/m1PZdFAidIvm1W9fN32CqRFIJd0Fo5WQh9kUwdJ8bOftWMUEAizieRwHc11NpnfW4uxfbebacc0xvuXacw''@;'; put 'put ''5/6lVn3q7vfccsl5s6u3/C2FkiTcpamj6lCK3Q8aQvtmdCcnK31D4331nRWT1sPEqYRx2rIhiK0ty1bcQd+99bRbDK7uF1cH8z76qdt5eeOxq/Ny0k8uq2Ee5Rf0dl6iGoF5bnnEwbG+da4GJaSswowunFW54ZNcxpaKr1yJrbmu2S1pj1PC9j9DVY1ApyDkez+p2ZbwJKhUcoz0WbL2dLfh7n5E''@;'; put 'put ''Js5vRdtR9cBup1x6dVfF+qdSfU6cTlzQNzcEQGxzwxm8ZJDAPS+cW6NpPW0Rk2Gt70M3HnNCMU04adwxzuX0k1sZc14fb9ayEOJDIUij7HP+dsZZa8IZxJ9RU7kSW3MtbUjzNSvMvX+zCpWH5t5Yu21pRhMaxtjCHeNKcUh+RCLy/scgZhenVN4Z0rtvqK9q+UUu4wFfuSMAYps71uApQwTu237W''@;'; put 'put ''WH+46wVG5cNMk+bGAUiwc2bXNj+bIRe2MbO8tfYIv+h9yMXKJscGbR7lF9b9bzho+bSG2g2tVkwqF2Lb1FHlNDhdTQndL3CcG+sNJL59Q217b665LGqr8eqG/16nVLp/rbgZQ1jv6ypxHHz5tIlPP5XrmMBf9gmA2GafMXjIMAHzVqpWGnwUY3FexDRG9A/11RsvybArW5gzD2boCbHTCGKLCWHH''@;'; put 'put ''xga97yi/ZwzEb5lT3fJPKyWVC7FdufXMSiH0pwyhjjJz14xgH8POc2fXbmrOFwvzJKF3D9l5Bcbogej1uOY+3xJx3H3Yh2NuteOOaPniaQe/ILZ2qBLEOIjA0vbJFxAsVkdecEnl7wlNr/5x9dMfFiuuBa215YgHZgssfuRgJSNjOZhH+SFMFypG6NdWWZ+bbbE1l994JON3hJCLIzy4MDb0qeyb''@;'; put 'put ''jRY4zvCOluOnUkxud0ql/V8EzB/zQAOFuhtxMNgEm18Uzrs5LbG97/ULPUqIfuQLf+QZCgkO4/L6KS3dhYMMMrECAfNWnEyU1wQy9s8slYiy4LrKdT+1Qnz5jGFRW80hEqa3GUK7nBJZiY3F4Oo7FEm3M5/70Xw/z8222N7TdtohksPbElD39G/HaAqZYQR/cP2kF36VzxpF+17WVlMZ0H1/jp3w''@;'; put 'put ''hgV5UmD5yobqtZ1WiRXiSJ1AWmL7m1dOd6v6iI9BbFMvAPRMnUBT++SlCPMGhHD/OCaIfcyRGN9QvbFor26jaZpLhQgSyxmRj4/dKclsJxHns9wI3TCjuuX1fG39mG2xXd5+8skq9/9Voo7+CwLOjY8IMY602tF3d246/mQhxG898ogBm1+4pPLHdN47bXrFhj2pv1OgpxUIgNhaoQoQQ0oEFm+f''@;'; put 'put ''PFaEgy9K1BH1AYU3MeI81647KqUE4gCd+p8NHvrhN83nuRjjY2Kb9i8Vwo4nOSO3zq7Y8Gam/Q9nL+tiu2XyFZzzX0ZmbBPMtjql7kmZ2iVquPySeX3e5nEH6zzY4pVHD6hTWO/7m8JKz4EvkcnQtF5bEFvr1QQiSoLA4s2V1xHKmiKbPJh7zzLCVh38/sjrYILJZyAX7ji1lISC1ziZd7bGg2Nj''@;'; put 'put ''ETPs8AnEHyQGuvu62ud3JlGCtJpmW2zv3XrG3SoPzjCDNGdnU8QWdVefdItVN5CYt7XiIAd3PI4RmjQArMCvCY4vm13X/EpawKFz3giA2OYNPTjOBAFzZnK4xPdnSthZEXvmczmK6Z3dYXGn3bYvzASTA9lYumPyKKLyOw2uXxm9N3Ckj/k8l2B5gUcpeeTa8U8Fsh1PU0fVCFVX35KZpyyeL4fk''@;'; put 'put ''7eJcOnp6xV9Suo26tK1mEyGsX7h0roawoGfOrWtryXZe6dhfubWipC+s/tkhlZwSbSegdX3slkedDfspp0M3f31BbPPHHjxniMDSzRVfMbB4UqLOI6NNKswzhxHyQC5EI0Op5MzMoraKKRJx3s6FVhnvKDgHK2kJ6b2LfKWjN2ZzZ65siq05E3mky7FdM4L9J0RpPBwQyJh4Y+0Llj/E3ZwAKLj2''@;'; put 'put ''S5k5L4geFJoe2ClL7svrq1rW52ywgKOMEMi62KqyVHbj+PU9GYkWjACBIQgs6qiaKHT9TzJz9W90EfXzHJbYtPoJG94GeIMJLGmv/hbD8jKO+BF430SzSCvzljzF8p8QN26ZWdP8ZjYmUWVTbJc3Ty7zoV2veZVR/WNCNYJ9MqWHN1RvscXsXnOXMNkvHlaY+4LoCW4hvbdLwq6r5tS2PZGNmsD7''@;'; put 'put ''JDsEQGyzwxWs5oHAkvbqKg8b85ug0XVUtHsnK/MFjb5FmhG6Jx87BuUBRVIuTVEK08BcQuhsFmepEMVSJ0XSYr/huz/T/LIptnufB6N/yczZv+aYC6NXptphMyq3+ZIClOfGS9qrF1Is3RAdhvnFgRF56pyatt/mOTxwnyABENsEQUEzexBY2lo7LqB3/tGjjP5CdMTmc1yB0DaZOX809t2Sv8Pk''@;'; put 'put ''qcH1NI/y6wl9usKrjD6DEdkxkB/nmhH6p1sZ03BdxTMZO4oum2Jr7kOs9al/c8sjvmjmYu7OpEieI+1wQEM0e3NG+b9G/+N2tzLypoGCG/C5pRGzrqtc+7A93p3FHWVaYpvIphZwG7m4B1g+sjc/wANq8A8uufT0WP/mB67O1Y2KVHq91bYuzAerWJ/mB/s7h+w8StV9D7rlEYP2Wza4Fg7pfa94''@;'; put 'put ''pPJZPdWbtqV7So1Zq5CuvuXIwgSpvc9sPa2a0Vtp5mnGrgt+xk/qtlp6glS8cSAEwkvbKk/RRPgxBysZEWnDBTcEN37DMZ6Z6bsOVhiPhRQDiG0hVRNy2U/APFJNIl0zEcJzorfCizQIar7dXmXMQp2jh2GHnsEDxxQqiXRfpPHQ/BLloP27dEVa7r1KLPmdQfC82RPXvZ/q0DNv9aKw/h8H82Zl''@;'; put 'put ''NvKy9snrMRb9s3r7D6zA5OaGqk0L7fqsc17bCWcig//aKZWNjmbuZGW/MkTfHNj8ItWRmP1+ILbZZwwe8khg5ea60WHCmzBGF8ebddsb/vS/HmXk9R45+IQVNzrII7p+1+YkHUeAXG4Izdy/d8AHvPl6UPftlqjzQdznWTj3G+v8yca7T2z/7WDe8nh90136c++2by5Tjd6GiG2C5I1OufMMO9d6''@;'; put 'put ''0eaqiRjjPzIqfS6aGcG0WaKOS6ZNfPbjZOsA7bNPAMQ2+4zBgwUILNg04WKBjUUK9Xx+8PmvQsjU+3vV0Bsbqtf+xwLhWi6Epo6qQ33hzgc88ugzIxuIRAepGaF/O2nJNWM/KGtL5nn40uZxo1Qq3syW2C7pqJlFBG2K1Nwjj3ozRAK1M05cs8tykJMIaMGmqhM04XvSI++daR35YcjRShm9CAQ3''@;'; put 'put ''CZg5agpimyPQ4Cb/BMyj6LqD7PtcGHcozB27RKj/mZ5MvL/QmViUzq3R/GeanQgaBSKujuov6kbotw7mrYr1woVhnp/7moOUXZHoTkfZFtvlraccEeDd25ySp/9Unf7lTES6ZFbVhseyQyl3Vhc3TxgrKyXPcqT3ryOO/AiB/05k+i1Y7pa7WiTiCcQ2EUrQpqAI3Nc82RNk+lUCi9soYYNuX4Z0''@;'; put 'put ''X6dMvQ8jhSycM75ld0Eln4FkGl//iqx0ur6vG+G7Yk+qMc2bz3MZcTwkGfyuGZNaD3gFOextZObp5EI+JtUdpMxafyI+XFPmOKR2b+pCOGjpQ/oefXq+TzzKQCnQgi2VX8CaYa4vPzHankLdrxp66Nszaja+lQk/YCN9AiC26TMECzYlsLi9+kgh+DyCyHnxti6kWPkHEfguEg4/CeeKDi7y/M11''@;'; put 'put ''oykO34gQvlaiDndsC8GN9xBh87lb/t3cr8V/nrt3NnLYnCAV/5ltmmJrxtTUMeWksN77V4W5S81/q0aw10VHnjOjes0mmw7dAWGb5xhrRvczHnnkgLsNYd3/scxc35ldvbmjEPK0ew4gtnavIMSfNoElrbUVfm3Xg15lzHEYExprkAu+hWF2u1P2bbTzxJq0QQ1hYEHrieNcbOT1quH/VuyXFnMG''@;'; put 'put ''sFsa1ebXulf2quKZ2APbTaEQIvBWNsXWnJnulIJ/lIjj7EgKGNFWQ+bfLpQ7F+aXFs0Qj0hUOSO6TBiRnYLz7zbUbmrNVv3BbmIEQGwT4wStioDAgs0Tr8ZI3CEz18Gx6ZrPc12sfDXi+u27qqretuqpMfks0+L26tMJJsuxIP+DMSaxsUjEtUY39J/2VNe8GuGXC7E141jWVnOWwPhJgun+L1OE''@;'; put 'put ''KD+ZWbFukV2XAcXyNW+Z+1loFSXSd6O3dwxqPbsVWnrJnNpNz+dzfBS7bxDbYh8BkP8AAuZVUKmDzmBYWqTx4CA6BtdVSpV7ZIIXwJrGwYPH3HxhSVvVDIdUcr3OQwMOQjdby8TZKzD5hSHCi8ydnHIltk0dVc6wrj+qMNe5n13dkk4h8PcaajauK5S3gTl+FeJfpEiu/mMFIz/79lO+fG5d21OF''@;'; put 'put ''kqvd8gCxtVvFIN6cEGhqm3IspdIKQ4RPjeeQYvkfHImbe0rKn87mqTg5STYLTpY2Tx6FJe0mXWhXS9TpiXVBhLQbYX67QfE6NdyzPfI8Nbadg3k6KSFfunb8U2lPVGvqmHxUQOtsc0nlB0X8+NXOD71s1Cmzapv/lQUMeTFpzhp3bJ5wHSL4LjmKvWr4fRJx3N5Q3ba8UK7m8wI4RacZEFv2sS+8''@;'; put 'put ''c9DkiEg8sF1jipWBbnknYJ6Vq5b4LvA6xs7xq7u/HhuQeWvZq4x50q91roBJKIPLZX7oO9snnuikJbNUHro43vrcEnns33rCO78Wfdsz2pIptjrj/5OJdbHmVffi9vHTKHasiL6dzLDjhTAOXD23svXVvA+6DAVg5jq/ddxZQmgPRX+5MJ+hUywtdso9t8L8gwzBTtAMiG2CoKBZ8RIwb0ES5Lwq''@;'; put 'put ''bPhvlqhj/1VRhEhY9/cokvfXOhULrp/YArv3xBkq5vm5BtcXSMRxAiVMjm1iHhOB8eCPI1NssaZ9+cc16z7NxAg03cxrOf5hh1xy6UDxF68yJF8xo3r93zLhxyo2FrR8fULQ6HukzHno0dExYST9FhMx126HMliFaypxZEBs6Ue+8EeDbhPBlW0q5YA+ViZgbv0YxGojQujyeEtdAlr3J25pxK2U''@;'; put 'put ''OB6dUbnGVse45YK7uT7X3V12GhZkMSH0K/F8xoquQj17NEGPnVX55CeZinHJ2tPdyB1sxFjUR1/h+tXOj1ys/OqGms1rCuk2610dVYeqwV3PlDkP/Vo0w6Dme8Ell15UX9Xy30yxBTtDEwCxhdEBBJIksHhTxdGESYsxwufEWyqEEHqJc3RzX82mtemeipNkaLZo3j9ZSdNuYlS5nhImHegqV6Gu''@;'; put 'put ''PZqQMiq2pj8zht5Qz30eZeTl0bewVSOwW6auH9ZXbSqog9nnr584MoA+3TTCdfix0bxVI/ASI95vz6nZ+K4tBo+Ng8y62OIwLq+f0tJtY0YQOhAYRMB8Hlm6dUpVX2jXg25l5FdjG3Bh6DpXN8nU9aOG6hbYbznOGFq0teKwcMj/kEceOegoRLO5eZVLMetm1FExveLZNzM9DPceJ/juFUKg5TJ1''@;'; put 'put ''evffjTOCfTJ1Lmmo3nRHpn3m015jR9UIovke90ij+k9Bivz4wp++5XGOvXhOZfOL+Yyv0H1nXWwFUz4P+8wW+jAq3vzMU3HcquuH3NB+IlFlTCyJ/ue5zP1LrPMl9ZNaPypeUvEzN/er7vTTOl0Eb1GYu4IRxRnb0iONaNG5eqvfob001E5UqXI1vzQprePPZ0S+hxJp//pq88uSQypZperGrYV0''@;'; put 'put ''BOOStce7NQdbKDPXj6KfWQdV325Z8lztr259Cu7GpDqaDtwvbbGVQ2xnb3jn/m+Fse6cdNTNqtHVzAUWCOlI54QjpO1vRjDDBIth49jbP7Uf077Z/0B+eAIxIMRQtA0ujP6YCKb99s38DvRDhsjhQLlxoQuTUWqZJ9crkTokYzHRmpk5xtqlFAvDENj8HfsaFyTlsRBriwhdmHGa/0/ZQF+Gvndc''@;'; put 'put ''mn8XuggbQuv3S6W97bBBuUG4y/xNiDzSLZXcEzA6B9ymi/jrCX/yjlsecYcQ+E9wyPfgUWSKnret9qiA0fOASyqfEnsyk87VkGYEX3PL5dd1h8SLjVNaDvxmS2agmptetNYe4zd6nvLII46J7hrUul50OMvOnz1xc8pn9iYZSk6aL2mbdJHB/atk5tl/jrBmhAKcG8vd/tF3FsK+0TkBmYSTtD7E''@;'; put 'put ''73v9Qo8UIh/2hT8uScInNAUCBUHA3OCCC10TiHMkhCEzd/8H11Aza/cl/TIWeF6Pip6O3bqwIKCkmUT/phjtFWf+/x3kOymRv0Zits/sP+QAy09QxO+cVdue0bWx5jGCQrBHMCYnDUhDoH8ILK4utOVdi9omfNvFRt+rcf+AHdOwIE0uxXfLteNfDKRZTugeRSAtsX2o7Vyv4XR+AGILYwoIDCZw''@;'; put 'put ''INHVudqqMM9VMyqe/08hzXzN5DhYvLnyalUE73JJZYOWW5lbEDLiWEV1x4o5UzJ3MtPCHaeW4qD/DxKVz4zOxZyp7JZHn9dQvXF7JnPMty1zSZaqBx6JPb0JI/YzSuS5MKs+cxUCsc0cS7AEBOISGEp0heAGxcoDKtPnwfrc+INnefPkMo0Gb2LMMSe2hUDmFg3G+xSRBb7yPb9sPPYNNRNDcNWO''@;'; put 'put ''ca6ekHI3I9LV0fZUPbCbYuUHhbbl4cK2CcfqRvgvLql8/1pcIYT5DOVZB+eXTa1r68oE12K3kZbYrtx6ZolDKnkfrmyLfRhB/sMRONBVbkDrv2q61SW5f3/t+Kfg1l0MTPPW8sptk47qC/t+7pRKB97iRQiZh9aHNN8rCi2ZOreubdtwtUjkdXPiVk+A/YRSpTH6+XFY7+uhVJl1fU3HrxKxY5c2''@;'; put 'put ''C1qPKw+ogfZy52Ffjo5ZcL2dY/e352ZoUxG78MhGnGmJ7f2vnl3ONM9/QWyzURqwWYgEhhJdUzAwpi8jTu7AJPR8Q/WWwacgFCKQJHIyt88MebtPE0jcJVFlwAYNphnVCPQy7HiSIL6gobb99SRMD3FHAuGFrRMuR0jcrTD3/nkpmhHsY9g5v1fDSzI9USvdmNPpv7R53CiV8tUOVjI52g7F0lZD''@;'; put 'put ''6JfBErZ06CKUnti2nl3OXO53+sKf9B/KDD9AAAgkRmDoW8tC6FzdrEhlM7orKv8OR/kN5mluSKHq4gpDhG53SqWjY1uYJ9zI1PNL2RCLZkxq3ZVYRYZuNX/T+LM4Uh92SeUDlnYx5LhPR6iglgat3FpRsifQvbrUMXbA2ueg1vsPr1J+wYzKDW+ky7NY+6clto+/fqHc2+uZjwQ7VOehgMG1/dPx''@;'; put 'put ''zecpGCPOhcHNJyscC47NBwFcCIT2HnWJScySn30LOvi+qHB/W/Mn+mhMbq61OeDSD3Mhh9mL76uqQGb7yL8QwnGX4Jiv7/UjCBeYkwOyEQktFRrK1/DDbaB9My7eH/fev8fw6P/33vzi5zacv4G5D9c68rrge7+skf3+P4uLR/GOtfdZtAf2FLv8I7o1RnE20jXzx8l/gRQC7V3CFTVm9udojmOT''@;'; put 'put ''O+HmkBYYmaPYHJjmX7kwiPl6/184xsKclcwFNgxz3COM+/9t/t18HWHOkWE6IkTCzpGE0Ckc952IKXXFkjCvnmTi/JmOlEVwCy/+OJm3teIgWcU3C4KvYkQetD7XMNR3EKY3+8s7/5ju89xFbRPH64b6hFMqPTQ6GoPrz0rM8YNC2mN471pc+pBDKrk4OldVD7zHsPvSOXUtbYl+RkC7zwikJbYA''@;'; put 'put ''EggAgfQILG+tPULF+nyKpQtil7mYlmXqfksYxq17qqoehavc+KwXbppQzTFvUqhrQrzTgyTiWKMb4Z/Oqm55JZ2Z3/PaJ3yda6E1bnnE2AGRcNKuyOKCaQV0CIW5jzXb47jXxbzXROca0vu6FFL2ndm1G5rTG/nF1xvEtvhqDhlbjIB5mdzUVns0pqQJIXx2bHi8f9YyfRlhdGN9Vct6i4VviXAa''@;'; put 'put ''myczWQqeLmNpGcH0f2KDMrimIsQeVRi5aUZlywepBr2obfyXKHauJZgcPsAGxlslQ/rOdbXP70zVttX6mdtZ/mfsW3co1H1jzP7RPoW6L6+vbnnCajFbOR4QWytXB2IrKgL9h363T7hA17X5Lrn0yNjkdR4OysT1a4H5IjipJf7QmL9t4kgc1mZyIX7slEpHxbYigu5GGN0uwvx3qe7ZPr914jG6''@;'; put 'put ''7n/Wo4waUCOK5W2c8UvqJ2x4u5AG7rxNX/shxnShg3nLI3mZm4s4qffmztLy+xuPXZ2RJVeFxCxeLiC2hV5hyM92BMwj4ISr59L/n9xwR7zzc0O6r1Mh3l9i4lxQSPv2ZrJQi9pqDkHCuEEg4wqZugbtcKfp4f9IVJmPsPpoKjO/mzqqRggh/RFjPCU6blUPviUT75UNtRtaM5lPvm0t6qiaGFK7''@;'; put 'put ''V3vlMZ8fEIsQf2KG+8czJq1JeyJavnPMtn8Q22wTBvtAIEUCi5orDjOodgfB7EKZOgedGU2x8g+OtJuFCK1JRTBSDMtW3ea3jqvwsPL6sBE4jxJJiQ3eyUo3B7Sulb1lY59K9grN3G3Kw5UHVb3vu9F2Zer+WNX6ZvpqTv5jIT1nn7d53IkSlh5nVBlwRS+E2ECpdGkhTRLLxiAHsc0GVbAJBDJI''@;'; put 'put ''wDw/lzK2RCD8zejDziMuhBDbERY/7a1qbYYTW+KDX9xa9U1KpGUY4wEHDZitzZ28ZOp+Thf63Pqq9f9IpnTmMiSElZ8Jblwy8Lmmv8fBSq/trqxbXUiCu3hz5YmaCD0ZOytbIq6NQkXfhSvcoUcPiG0y7yxoCwTyRMCcRLWg9YTvCCEWO6XSL8aGYS6vo9Txc86NOxuqN36YpzAt7baxebLDzfSZ''@;'; put 'put ''DsnboPHAoOMQGVZ6EDLuC3N6dzLLrczarNgy5XaB+C3RACiW/aoevHNuXdsiS4NJMrhlHVUnKKT81yr3H7f/Cx8SwsVGNOuq/7JCmiSWJJoDNgexzSRNsAUEskxg34YO30eI3y4z54DTWkzX5vNcmbh/5pCUpdMrNuzJcji2NL98c93BgpJGQ2iXx7u1zDl/n2ByW0PNpocTTdCc3FbWcfJVBtIe''@;'; put 'put ''jL7C7d8ZTOD5vTWtjYV012FFa83nVcz/xIg8PpoRQcoOZPDvzKpb/16i7IqlHYhtsVQa8iwoAndtmvA5hNSbJaJcKlGnOzY5guTXMRLzVTf5a6YPXC8EkOaylncOee9kwY0FMnOPi83JPDxewZ61GtJ/0lC9/rVEcu6/+7B5wmyJyvMoYfL+qz7BDUbdt3QFQwW1veOC1glHcK79zimVVkXzYdjx''@;'; put 'put ''gi7QJQ3Va/+TCLdiaQNiWyyVhjwLkoD5PNenf/zzEuXgiYwog3ZR0oW6yck8c/Z4yl5NdgJQQQKLSco8cKAzIF2uc/8dLqn8IIxx9PZs5n7LPRJ2/tyQybJET2ZauHn8d3WuLnfJ5QM2v5CQc6mGREHNIF+4Y1wp8pOHZcl1fjTasO7/l4OWXllfs2FLMYyjRHIEsU2EErQBAhYnsGjz+IlhI/gr''@;'; put 'put ''jzJqwKktZtgG18IaV5sdzHMdbCYfv5DmnsBhg16hGcFbHaxkZGyrsN7XRZG8otSlLk3kUPUl7dVf9Yf3PFHiGDtg5q5f71rvoJ5L59Z0fGrxIZVweOaRhL6gdC+lypXRnfrU3R84SMn3r5+0ZVPCxgq4IYhtARcXUisuAuYEIIJ23cSoY7qDecpisw9qPbtc8qjbekL6w41TWkLFRSexbJe2Vx/e''@;'; put 'put ''G9p9b4njoLPibf0Y0nr/rtCSaxpqWrYNt/WjudtUUPU9U+I4eODmF4g9g3X1ykwckpBYVtlvZW7vKO9WlijMOz367oCq93XLzPm9huq257IfhbU9gNhauz4QHRBImkDj1ooSWdXvkqjjRxQzKdqAOWvZr3V+4JZG3Iax/hiszx2M13ye++6hH345pAfvd0sldbEtDK5rQa1rh1sZNW129ea/HahA''@;'; put 'put ''5uYXfrXvGbc8ojK6XXfwo9fKXYecW0g7gZmTxOTN46+UqHw/JdL+Z9aaEfQzosztrW5dVUiTxJJ9Y4LYJksM2gMBmxBY2loxzqfuub/MeejE2JDNCUAGN7bIxDOjvub5l22SUk7DNO8UyKT3YpX7G0uUg74Q61ztP5nJ9RA2jEX1k1o/Giq4Ba215f7wB8+OcB0+QHBDat/rTlp2bn1dYW3vuKB1''@;'; put 'put ''whmaEfi5Rx51WISJ+ShDYd57///IqztmVK7x5bSQFnEGYmuRQkAYQCAbBCKCYYjwTW555NGDBcPf45DKH2WGsWBa9cb3hrs1mo0YrW7TfJ4b1ND3VSNwy6ATfxBCAa37E4k4H+SI3f2TurauePksaqvxYkrSxfgAACAASURBVMxXMSx/L/p187mmWy65eHb1lg6rc0gmvsXt1V9HHP2eUWnAHAIh''@;'; put 'put ''+DqMpR8U41pwENtkRhC0BQI2JRCZAIQFuZ0QOuh5rvlsjVHvQwLJi5PZ0MGmOFIKe97mcQczTOcIJK6Rqcsba0Q31LcpkZdKNPTIjMptg67eVj57phL0di6mhE0lmLFI/6DWvUvGjmv8ddueKqTbrEs3V3wlYPj/6FFGDhBcSuTNBjcuKTbBBbFN6W0HnYCAPQks2TTpi5jxJoSQufXj/g/8SDaM''@;'; put 'put ''OP7JuT73kA9GrLnootXmUffwE0PAZBgW3ebh6nXxGAY130tuVvKjmdWbdsS7U7C4tWImJmxJ9PP0sO7voVhqCNRu+VUhCe6CLZVfCAb3PFfmOORL0RgNrr/gQK7zimm3KRBb+CgBAkVGoH/zhfbxZ5bIB9+m6r5Bz3PNvYI98pinekN7ls2pa2krMjwJpWtOBnK3VZ6NCVsc7/xcc+coiqQ/c67d''@;'; put 'put ''PLuu7c1Yo/Pbxp+FOP9d9LF1OldDFEt3z67ZfGNCQdik0bJNEz5nEGoeYDDgmbVC3X/ThXbxzMrn/22TVNIKE8Q2LXzQGQjYl8C+25qXCCHmxdv60fzwd7CS3xoM3VY/fu2QE4DsSyD9yM3jEHVn1w0IiRkKc5fGWlSNgI9ix88Upt4Ze2t5cdvEOoMbf1WYZ/85seZsccTFQ706m9o4pUVPP0Jr''@;'; put 'put ''WGjcMc6F+wJrvPKYSdER9am73y2XDz3juup1/7RGpNmLAsQ2e2zBMhCwBYEl7dVjsKA/EsiYQYk0aEMHmXreMWeXCiSvgvNz45d0wabxJyjMeZ3G1Ysk6hiwfaYQQnjlg17waZ+u6Csd86fonbzu3PTVb0vEdb9MnQdFLJvtGZFX4C7pJzPOWhO2xSBKIEhz3kBIE79j1HlOzC3ltxBml82t2VTQ''@;'; put 'put ''u02B2CYwSKAJECgGAuazSM7C87Ag5zMiO2JzJpi9KhC+3SU5n7t2/FOBYmCSTI7m7fmFm080D5OfJzHX+HjPc2XqeU7j+k31VWtfithe0F49QVW7HvcqYwYsL+KCP+Zg8rRCOlDCFNy+cPjnDqn0omi2GLH/IoyvrK9a35IMczu1BbG1U7UgViCQAwLLOiadIBGlSefq5Fh35rNILowOiuTbejXc''@;'; put 'put ''Wki3OjOJdklr1fmEyAsxRoPOzzW4GsKIPWogftMNte07Tb+L26uPZEL6MyLo+Og4VD2w1iGXXF5IB7Objy/Cpb3zKaYNA3P1d8vM/YOG6k1/yWQtrGILxNYqlYA4gICFCPTvonTIB1cHdd/NbnnkoRjhQZ8VEnE9jLBx53UV696xUOiWCWXv89w9N2CErpPjbJ8phPgQYXRnb+nuhxuPfUM1t4pU''@;'; put 'put ''9fBTDsmz/5xYMxku+EYu0UsTPQjBMgAOEIi5vSPahZZ4pZHTo7fFNIxwH2POy2dVNv+l0NZ8g9jaYWRCjEAgxwTua57s8TFdcjDHWJkoD4aNvgETWyLhBHXf7hL54LtIMPDQtCktfTkO0xbuFrXVHEIQ/wlC5IfRR++ZwZszvzUj/B9MyPU31G59sn89tM4eo4SdEZ2cX+38u5O4Lp4zadsbtkg6''@;'; put 'put ''wSAXt1Z9U+Ohh51SyahIF3NiHsOsya0EGq8d/6KWoCnLNwOxtXyJIEAgkH0C5qH0WHIdjHV8iUydp6p68JiA3ikTRKhEnSXxNuWPRMUFN9fjbndK7plhvefvsN9y/Hot3DShWkPh+Q7qqYw9tN7gahghspoJfFtQVntQ0HjQIXsuiLbEhf5PxPH359S1vZj9EZE7D+as7KDe9zuvPPrz0V4pVn5n''@;'; put 'put ''CDyzUCblgdjmbkyBJyBgOQKLt08eS3R0BUXk0rDRd7hMnYN2Rko0aI2HA1ig7UwpnX7Yf0v+CZtiDCZn3j51drlOEhzFPbQ+pPv2IIR+rQi2QjDlZoTQD6InWgW0ro8d1PuDObXtaxKtix3aLW6f8PWQau42NXrACUkIoY0Sly8rhM0vQGztMBIhRiCQYQLmrU2BtBu5oV7skErHZNK8agR7HVLp''@;'; put 'put ''7wUjt8P63PhkzdvFvaHgtQLjOS6pbBD/oNb1osxKV7lY6aVho/ekaCtBrXePQj0//PzOg/5aSF9o5neM+x83HvFrQ6gDNlqRqWcD14PXzqjZ+FYmx2mubYHY5po4+AMCeSRw77ZTRmq6qPdrXde65M+ekw28Xdk/41gzN1gIG71dGDGdIGwwqqCw0ScTzCSZukowItT8b4wHT54y7VGsPDSzat3V''@;'; put 'put ''eUzX8q7NI/hUQ5+LEZ4uUacnNmAHLQmPdh+lvO/bv1Kov4nOw0GB8NJgzZbGQtresf9Oi6Y9RjCtQ1GT8mTmek1F/HsNE9e+bvmiDhEgiK1dKwdxA4EkCSzZWne8P/Dx417l4GPiCWRA6/rEr3W+7iCe+72O8mZfWPF9ZddoYbp548LV4iurL9z/efHG6F1YYf7PEyHOkqn74pDhPy56B6WQ3rvH''@;'; put 'put ''6SyfWD+hsI6PSxJ5ws3vajthvDD4CrdUVpNoJ4Nrqsycd82s3HBnon3s0G5p87hRkmPkbw0RHjBJzC2NfDNs+C6fUbl+qx3yiI0RxNaOVYOYgUASBMznhI7OkukI8dvlmKsn81xbzQhvxgg3obDRFmJef7JrZxubJzOF6V6Mtat0IzTXvOpVqHNZV+XGWwvpqisJ5Ck1Neuk7Hacr/LgwtgNLoYy''@;'; put 'put ''aN59oJj+zCn3ziikmbvmhD1faHdrieOQcdG564b6jkMq++aMyjW2m5UNYpvS2wI6AQF7EDDXelKvdpvBw+ZWjEp01J3B918rlUbf4jecaxuntIQykZG59aOmB8+h1PX4DbXtvZmwWWw2FrQeV24Y6DqM6QynVDpo+8x4PDAiqyVKflxIu02Zt9g5Z48RQk6Nzplz423GHJfPqlxvq0MyQGyL7Z0M''@;'; put 'put ''+RYNgVU7xkm7/NoKhXqvoYRJkcQ1I+QnWJ7HtN4H6qe83F00QGyW6F2bJnwuZHQu8UgjzjTvFgwbvhAbCZevnFW3/r1h29qkgbneu5v6fuVk3u9Eh9wb3vXfcuWQb8+oXv83m6SCQGztUimIEwgkSeDuradeqevafZggZ6RrSPN9igid89O6Hb9N0hw0zxOBZa21xwQN34NDnZ8bHZYvtPNfZfJh''@;'; put 'put ''35pV2/yvPIWbcbfm7XVP18hpAhkLKZHkiIM+ddd7Hlb+nYba9h0Zd5oFgyC2WYAKJoFAvgksaau5SCD+K0bk/UJLsfyGqgd/MLeubVu+4wP/yROYt+nEi7jQVrjl8rHRM3VjLYW0vjddxHHarLr2grnCNXNc0l73XYzE7wimNJKzwY1XEeanza3p+DR5orntAWKbW97gDQhknUBTx6nHhbWu5xTJ''@;'; put 'put ''c0jEmWYE35ao8r2G6tbtWQ8AHGSNgHkurBIgNxOMr4u3VOgzEdLeogh/1y5XfYkCW9JePQMjvNRcchbpw4jjibHvlVxg9TXHILaJVhnaAQEbEFjUVuNFQntOos7qSLi6oX6AiXT53JrNG22QAoSYAAHzlCBV6/2FSx4x6GSmSPeQ7utUSOnZs2tbbLlUZigMTe2TViCMZ0ZeN/eXVojrkulVax9P''@;'; put 'put ''AF3emoDY5g09OAYCmSewcus3Zuk8tDzqCkelWPpRQ82mhzPvDSzmk4C55Mophc5CAt3BiHRcvP2rg5pvt0ceOW1m1XpLC1EyHJe8crqb+3paJOoYH3V1+09K6JRpE5/9OBlbuWwLYptL2uALCGSRwPId3zhYC/k6GJH3H0IeUPc8r4QPOX/uN9b5s+gaTOeZwOL26u8wrCxBiH8xNhS/uucDh1Qy''@;'; put 'put ''zg7PNRPFuLS1dpwuws/LzFUe6eNk5cs+mfD16xtxI0/UTi7bgdjmkjb4AgJZJLByyzdu0EVoYcQFQfRtgfVv1ldt/kcW3YJpixAw91sOavQ2jMVURmRHJCyKpUe6QvrVmVpLbZF00dKOutsJIrdG4lH14Kdeh+tr0ya2WPLqFsTWKiMH4gACaRBYsfWUg/pCu7e65LL9V7Wc85vm1LbOT8MsdLUh''@;'; put 'put ''gaaOkw9FwrhVIHENpfJWhsU5hbTZRaQki7ZOPkyova/JzFMW+ZtM3OdNr3z2r1YsG4itFasCMQGBJAk0tU26imOximDSvywirPs/8CqlXy/ED9kk0RRl85XPnqmoJb6TCaEfNFRvfq0QIew9rtD7Z4k4zo7k55VH/+Ka8X+8xor5gthasSoQExBIgoC5U5Qv5FhHCds/M5Vz/Z6+mvZZsDdxEiCh''@;'; put 'put ''qe0ILGmdPJlS0RwJ3COP/rceDFZMrXumy2rJgNharSIQDxBIksDyzXUHh1HwFZm5R5tdzdNgGJYm19ds2pKkKWgOBGxFYOGOU0tFoOsthXn695DWjFCfh42aOK3qGcvNUwCxtdXQgmCBwGACK7ee8hW/2tMROeLOr3budMueiQ3VWz4EXkCgkAmYt8v18uA2JMTXInliwi6sr9zwR6vlDWJrtYpA''@;'; put 'put ''PEAgSQJNHafMNHhw8Wf7xuK/1Fe1fAdj1H8WLfwAgUIl8PjjF9LdXwzfG9J6fhTJUZZK7pk+4akZVssZxNZqFYF4gECSBO7ectpjhlAv2nsLWVcxQj+cU9v+6yTNQHMgYEsCyztOnsWFtiyyqUeZ47C1PzjxkQEHz1shMRBbK1QBYgACaRBYsHn8PxXm/pJpQjUCPkKkE6+v6XgrDZPQFQjYhsCK''@;'; put 'put ''LVMqdK61EUyZGbSEXe/Jkuf4a8ev7rFSEiC2VqoGxAIEUiDwsxcu+HuftuvYvWIb7MWYT7ihdkfBHLGWAhLoUkQE7mk77ZAQCrxDCes/fk/V/d2YlB97Q+3zO62EAcTWStWAWIBAkgRWbj2zBAn+mi5Cn49c2WIsf/mG2nZLfdAkmRY0BwIJE1i149RSzZDeVI3AGLOTQMLcmrRudvVmSx0sD2Kb''@;'; put 'put ''cEmhIRCwHgHzgyagin8IpB9sRhfW/T0COY/+6aTWXdaLFiICApknYB7IcKh3zKu96idfNq0bXA0z6rikvqr5z5n3lrpFENvU2UFPIJB3AsubJ5fJLu/LYcN3eOTKVuLoq7NPeuH9vAcHAQCBHBBoFI1k1AsvPq/qvpMj7hhx1M+oXLsiB+4TdgFimzAqaAgErEdg+d8ml/GA8TLGJCK2veZxa3Nq''@;'; put 'put ''Ot61XrQQERDIPAEhEL532xmLNR6cE7HukEoemjrhqasz7y11iyC2qbODnkAg7wQaX79QLvd1bzKEWmkGo/NwUCB69g217fu3sMt7kBAAEMgygbu3nHK5ztWH8L69wZ1SecePJzxRk2W3SZkHsU0KFzQGAtYjsHLr6ct1Hp4ViYwjfsec6tbbrBcpRAQEskNgWdspUwwUeDZytKBLGvnOx32dxzRO''@;'; put 'put ''adGz4zF5qyC2yTODHkDAUgRWbvvG/4Y034OMyE4zMG4Y22fXtlXCDlKWKhMEk0UCTW1TjtWEf6tEnR7TjUzcPk2RD68/4YnuLLpNyjSIbVK4oDEQsB6BRZsnniew+I1MXV4zurDWt4s6vcdfb9FDtK1HECKyO4FFbTWHCB5+XWbuvWfbCtQnCflL11lorS2Ird1HGcRf9ATMDxoZs1aB0RH9V7ZC''@;'; put 'put ''1wjH5zbUtT1X9HAAQFEQ2Lve3Nihi/DRZsI6V0MKcZ4ys3pjh1UAgNhapRIQBxBIkYC5zpDgPU965BFn9n+pF0L8/1Xusj0VlTc04kaeolnoBgRsRWD+5nEvOZjnBDNo85hJh1Ry7nUVz621ShIgtlapBMQBBNIgsLjtpDouAs9EbiX3qXs+cLhGTYBbyWlAha62InDftrN/ETb6rooErVDvvbsm''@;'; put 'put ''jp9plS+cILa2Gk4QLBCIT2DVjnGu3rCrhWAyIdKCYmXejMp1t8BEKRg1xUBg+ZbJNwkh7orkOsJ5+NP/7X7vfKvMSAaxLYZRCDkWBYFl7bUNGNNlkWRDum+PRx4xaUblhjeKAgAkWdQEVmw95XhV929lROmflW9wfecoTTryyiktISuAAbG1QhUgBiCQAQIrtp5ykISdm8NG7zERcwSR58JcveiG''@;'; put 'put ''2vbeDLgAE0DAsgSWtdZ+TUdqW2T5T7njc592hd76QkP1lqAVggaxtUIVIAYgkCECTR0n34iQsSBijgvDoITdVl/VMi9DLsAMELAkgRVbKw4KqOobDlYywgzQHPsuufSYqROeedsKAYPYWqEKEAMQyBCBJa+c7qaB8FNIoCkRk4bguyim/9tQ3QJLgTLEGcxYj8Dyv51XVmI4X+tRdx5mRicENwgi''@;'; put 'put ''dfU1m7ZYIVoQWytUAWIAAhkkcPfW044Oqp3bZebZu8AfIeRXO99xOcecMbtiw5sZdAWmgIBlCJhrbcN69z8pkfuPmzTFVsKu6hnVa7dbIUgQWytUAWIAAhkm0NQ26SoD6fdTIskR0wTR17Hg351Z0/L3DLsDc0Ag7wQebp7sCLlL1gb1nkl7xVYIJyuZM7Xi6aa8B4cQArG1QhUgBiCQYQJL2ydN''@;'; put 'put ''EsJ4lhLmjjatUO+rWJDLplY++WqGXYI5IJB3AvduP3u5qvftP5SjxHHoYwb/12XXjn9Ry3dwILb5rgD4BwIZIrDy2TMVURaqlZjn0t7wroslqrjimQ7rfe8rjpIzGyY2v54h12AGCFiCwAPbzvlm0PA9FRXMe4y4jptRucaX7wBBbPNdAfAPBDJAYOXWyYcFtNBKjMTpEnUMuJqNmNeMUMDJSj/F''@;'; put 'put ''mP5V13pX1te1WWKWZgbSBxNAoJ/AkrZJV1GCfxHBUeI4pNMX6jy6oXptZ74RgdjmuwLgHwikSWBp+0kTEDIeIpgeF2vK4FqYEcd7Ahl/MAReXaKw9384br0PdpVKEzp0tySBFe0nTQjxwHqZukoiATqR97AfVz/9Yb4DBrHNdwXAPxBIg0BT+6TT/VrnL93yyEOjzZgiq7CSP2s8cG9v6e4djce+''@;'; put 'put ''oabhBroCAVsQMO/waIa+A2N6UCRgQtjXZlVuyPscBRBbWwwhCBIIDCawuL36CsNQVyjMXRp51ZyBGTb6PpCQ43p/XcfjjRjBqT8weIqGwP+1d+fxdZTl4sDfbWbOknOSphuUTQGvCAoCaZOcpG3SdKOKChcKondB0UopaZO2FMX7MaJQuiVtCkJBFC4XvbYISIHSLUmzF1IuXBblB1xRsC2U7Ged''@;'; put 'put ''mfd9f59JOSEcWrKd/Tz5w4+fnJnnfZ7vTHkyc2bet7q1MNene593qrnnhIu2sdySpTOeOJBoBGi2iT4CMD4IjEGgpqXkqhDvf2Dou7TW1SzG6GEbs/9kWf7+zjGEhV1AIKUFpES4tn3+PVyGbvy42bo3L52xsyLRhUGzTfQRgPFBYJQCm1tLF3iNzoccyoRTwrsGzb4uhbhuPOvw1D8uXryDjzIk''@;'; put 'put ''bA4CaSNQ0zrvdon0/wgX5GAT6/wm/XqlZ0dC50iGZps2pxgUkgkCte1l53cHj+x0qZPPHtJoO6XES2+b/eL2TDCAGkHgswQ2tcz+Acbo/vA2kxznvNiv9M++6YId3kTKQbNNpD6MDQKjENjYUTIJBY3thLDBeY91HuinxPat1UWNdaMIBZuCQNoKVLeWLBTS3EkwZVaRE9TT/hpQ0aVLL/xddyKL''@;'; put 'put ''hmabSH0YGwRGIbClde5ajoxbw7sIaRoCyeW3FLXeO4owsCkIpLXAuuaiPCTNvQq1DcwNzojtQ405L1yS9/iRRBYOzTaR+jA2CIxQoKap+Gwv7212qrkDk6xbPwYPPnZL8cHF8M7sCBFhs4wQ2NAyfwqSvpcoYQP/Vgwe8CrYWVBZnNgZ06DZZsTpB0WmssD27VfTw2f0VnERvA1jPPBvNmh6X2NU''@;'; put 'put ''++YtRa1vp3JtkDsIRFugpr4kR7HbD+rC/0/h2BjjeRWFDfuiPdZo4kGzHY0WbAsCCRCobi7J06WvTqUOlzW8zv19Gsm6rqKo/pkEpANDgkBSC2zruNwR0P0NApnTP05Urqj0NG5JZOLQbBOpD2ODwAgEatsW/tSUgV+EN+0NHu3QnNkLf5L/PLxLOwI/2CSzBKw7QZ2fMx8MmF3/Fq6cEdvm8oLd''@;'; put 'put ''CX3XFpptZp2HUG2KCVS3LshVCNpviOBXrdSF5Bwj5ZqVRfV/TLFSIF0QiJvAlra5VVwaPwsP6FQm/veS6Y9/O24JnGAgaLaJ1IexQWAYgZqW0q9JLJ4Ob6Zz/1GVsrxKT1vCJ1aHgwcCySqwuXX21QKhwffOnUruCwibJUvydvoTlTM020TJw7ggMAKB2vb5600RWj14O4xqz5m8/8pKT1tCZ8MZ''@;'; put 'put ''QeqwCQgkTGBTc0kBpaRNyOOTqdmY67BqGl+5IYFL7UGzTdjpAAODwGcLbHh5vhP3BeoIJTPCW0okf7TS07gN7EAABE4ucE/rgnNNLN7k8vhiV7rp7XGoU6xF5N9LlBs020TJw7ggMIzA+vqSU0K485BTzZ1mbWrNf0yw4+JbZ7b8HfBAAAROLrCt4/JJvlDfSwijgaUnDR70qcReXFHU8FKi3KDZ''@;'; put 'put ''JkoexgWB4ZptY8ElAhn7wyv7EMTeCIng9DXFLf2ABwIgcHKB39aX2PSs3J0+o3NueCsu5A2rixsfTJQbNNtEycO4IDCMwJ0H8hZRQnco1OawNnUpU59j3g+uuL60IQh4IAACJxeoqi9hkx3OmhD3LgtvxbC6qbxw76pEuUGzTZQ8jAsCwwhsbC66khA2+IqPylxPiQl8cfkXdoUADwRA4LMFatvm''@;'; put 'put ''3qiL0FaCCbW21Iht100Fuxclyg2abaLkYVwQGEZgQ4vneoqV34Q3s7MJv3vfqVxfdcGO4099wA8IgMBJBba0ly4yuP4kwUyxNlKo41W/oXjWFD+VkK9hoNnCyQoCSSqwsanwh4Sqg08eO5SJD2L8txuX5B0ykjRlSAsEkkZgQ4unEEnUQImiWkm51FPe7dd7vlqZoNd/oNkmzakBiYDAJwU2tBRf''@;'; put 'put ''TzEdvLJ1sOz/OurUvg9XtnCmgMDwAtWtc04T0niTYGK3tg6Z3u4skvvlm4v3Hh5+7+hvAc02+qYQEQSiInBX84zrFKz9J/7oO6cJ2unPdIf0qys9O2BCi6gIQ5B0FrirY2624T36mlOdOPD6j24G+h006+LyorqErJQFzTadzzaoLaUFtrSUfNnP+xs1ljXh+F/m/sMuzX3hsvz9sABBSh9ZSD4e''@;'; put 'put ''AlUSEVfr7IMYozxrPFPoQRvL+mZ5wd498Rg/cgxotolQhzFBYAQCm9vLpgZCPYc0JWvgL3MphUBCXrJyZvPLI9gdNgGBjBaQEuFtHVc85De6/jUMgSX9eUVRXVUiYKDZJkIdxgSBEQhYt8HsBmnkMnTh4OaYXFNZWD84wfoIwsAmIJCRAlazvfeFy9cHzb7Bd2tt1P3I0vydg803njDQbOOpDWOB''@;'; put 'put ''wCgEqupLbE7FeIIStnBwN4lqK4sOLB9FGNgUBDJWoLqt5Eec61sGn0jWpuz7waU75iUCBJptItRhTBAYocD6Fs8tDCvrwpvbmbuhlwS+dWvevt4RhoDNQCBjBapbS87Vue9FlTpcFoLf7PmbG02bXj5r17F4o0Czjbc4jAcCoxDY2Fpynmn6W1Vm/+ghKW+3xtxXVHrqD4wiDGwKAhkpsK656IsY''@;'; put 'put ''8ecZ0dwWgFs91R8S3muPTc97pgpXiXiiQLONpzaMBQKjFNjWcanj/f7gnixtUlF4V4rV6uWFe1eOMhRsDgIZJ7ChxTPF4MG/2Jhr4I9V60dIbmrUtVbqaGs8r3Ch2Wbc6QcFp5rA1raFJYYM1Ifz9htdRxzKhAWVnsZXUq0WyBcE4imwffvV9G/TDu+hhM2JHNend75rV3M32UPkwZtKG7yxzgua''@;'; put 'put ''bayFIT4IjFOgtj3f3eXrbnTbT70oHIoR+z1dLlclzCY1TlzYPe0FNljvqxvHttmZ62JGtIHZpIb+BE1fm5O5V3WHxItVMVxRC5pt2p9qUGA6CGxsLrpMIvkEJYpm1WMthq0xx3UrCuufSof6oAYQiKVA1Wvnq1k9ORcFDd99DjXnksixrFvLIdPf5FZyly8r3PcqxkhGOx9ottEWhXggECOBn+77''@;'; put 'put ''fFuu48yCwatbrL5uULxw5Yw978ZoSAgLAmklsLG+ZBJS+A8Vqq3k0siNLE6j7k5T6A8KBW2uyNt9JJrFQ7ONpibEAoEYCmxoKsjnyNyjUufAk5XWj5S8KUubsHBJ3k5/DIeG0CCQVgLrmoumEYRuJ5hcjzEhny6O/ZUS/Ivy/H0PResqF5ptWp1CUEw6C1gz4qxvzr9bobalQ+tkxP4IDQSXxuMh''@;'; put 'put ''j3T2hdoyS8CaOzm7teTCPv2Du13a5MGn/T/+Q1YIU5gvOdmEpcsKnz04Xh1otuMVhP1BII4C1m2wfnT02Wxt6vShw1Kk3a87UeXqi/b44pgODAUCKS9gzdRmU3zfIJLeyah2TmRBBg/5bcz9uOTGL1cU178x1oKh2Y5VDvYDgQQJ1LSVfM7kxnZK2CcaLkH0SYlFRUVhwzsJSg2GBYGUFVjXXOSS''@;'; put 'put ''wriZy9AKu5IzObKQgNn3YZaaW2swfu+qvIYPR1soNNvRisH2IJAEAlbD7Qkc3pttO/Xcoen49Z43s5SJN/ToorWqtMFMglQhBRBIKYFNB6afYRL6M4LxdylRB57+/+QPeYthdocpvX+o9LSNeG1paLYpdRpAsiDwscDa+kvO1dSsnQjj84a6CGmaWNIHMWG/qPTU/QPMQAAERi+wtiV/PpXs5wTj''@;'; put 'put ''6QRTOjSCtdylS52836d3bzntH5OeW7x4Bx9uBGi2wwnB5yCQxAIbWuZPMXnXkxpzFkam6Te6j7qVU+9Apv8P5bOa4j7xehKzQWogMCKBqvoSZleCi4Qw1mos6/zInaQU3MbcT5jE+Pny6Xte/ayg0GxHRA4bgUDyClS3FtrtbOr2gNn99cgshRQ8aPZ8MMl+9n2G7v/1zcV7DydvJZAZCCSngPVv''@;'; put 'put ''THB6FSZkLcb4tMgsTTHwENVjCOm3lRc0vHeiKqDZJuexhaxAYMQC9zy/cLrk+DFd+s882U7WbS8hRSu2KVeM5eGOEScDdT3IRAAAH41JREFUG4JAGgtsODDr8338H7/KUibNVKjN+ek/btEbDjVnWdAIvljp2d019HNotml8YkBp6S1wV8fcbLuJ1wSMnqUqdWSfqFrd9PYw6viQIuUPQjG3rZzR''@;'; put 'put ''CLNNpfdpAdXFWMB6PzeraeZ5Pt55f5Y6sfCEk2JI/GebMuHGpTOeGFwKE5ptjA8MhAeBWAhsbJx5viTiXkrYrE//dc1NjNBfpJS/IUTbDg9JxeIIQEwQQGh9c8E1GNF1BJMzIpuuQpzPkID/2vBkM9Bs4YwBgRQTqG4uylOY+2FD+D/xwIaUUtqYqz1g9PyGI/SHNcUt/SlWGqQLAiknUNt+mZsS''@;'; put 'put ''tj9k9uUNJi9Rv8q065bl73k6/Dtotil3aCHhTBaoaZtZ5A31bHequdOGOoRM7+s26r6lN+f9vVUXvK5nshHUDgLxFNjaOvcrXrP3gMYcgwvUa9T902MzLl1bhasENNt4Hg0YCwSiILC+saAoJHyfarSmNJ5UOF1aMaspqquURCFlCAECaS9wR8NX/mRXc78RLlRI8Q7Scqavytv5iVmm4Mo27U8F''@;'; put 'put ''KDAdBNa3eM4JGN11LnXK4BPHOvf3M2Jf79J81UvyDsGqP+lwoKGGlBLY1FxSYEr/XoXas6zEheScYmVphaf+/shCoNmm1KGFZDNRwHrqWPq6ntMU1+Batjr396nYXllZ3PhgJppAzSCQaIGBd28FOUCGzFGuEeeuY/kzvj709jHcRk70kYLxQWAEAtayelsOzl0nhLE6vLk1a40p+G1rZrauG0EI''@;'; put 'put ''2AQEQCAGAhubi9YSwm79uJkSH8ZK2YrCPSdcjg+ubGNwECAkCERLYENbSQk3fX9SqWNwwXiM6dYVBXXLo7WodbRyhTggkCkCtY2XTSYqPqgL3+c/brZ0e4Wn7pqTGUCzzZSzA+pMOYGB21SS7SSYlIWT7wu9/5aTuOevnv38X1OuIEgYBNJE4O62RZUh4d2IMR7oodw0OylBsyuLW16DZpsmBxnK''@;'; put 'put ''yByBmrbZl5nceIISZWCZL4MHfQqyfbty5oGdmaMAlYJAcglsap5dasrAU+GHoqzsFOpYc3P+rvWflSlc2SbXcYRsQGBAoOq1q9Wcvu4/CmkMLi7Ahfm42xa8dkneIQOYQAAE4i9g3W1ixPV7U4S+GR7detVH5Vkzymft+syVtaDZxv94wYggMKzAxpZZs0wReFqlDpe1sTU7FMaytNLTNDjX6rBB''@;'; put 'put ''YAMQAIGoCmxunXO1LgIPM6LarcBCcpNhbdkKz/5tww0EzXY4IfgcBBIgsPX5y/7DMP23h4fm0njTp6sXVpU2BBOQDgwJAhkvsP75klMUk+yRiH8ljKFSx06nP7D4+hH8u4Rmm/GnEAAkm8C2jssdAd1/QCBzYK5V61UfhPAvVxY1ViVbrpAPCGSKQHVraTVCoiJcL5bYiwiZXVFY9+JIDKDZjkQJ''@;'; put 'put ''tgGBOApsbi79IsfmQYzJwLJ5pggFKFGLVnoa/yeOacBQIAACHwnc3TLnLMqymgO89/QwCsHq4z1B45qq0gZzJFDQbEeiBNuAQBwFNrXOuklKuYVgQq1hQ6b3HY2p51d62gJxTAOGAgEQ+EhgS9v8X3EZujEMIkyzkzBaWulpfGWkSNBsRyoF24FAnATu71h8p1d//8fh4bgwn1hd3HJlnIaHYUAA''@;'; put 'put ''BIYI1LbOvTjAvc0K1RzWr62vdVSadevNBbs2jgYKmu1otGBbEIixgDU9Y237vBe41C+1hjJ40M+w4+qVxfXPxnhoCA8CIBAhYL2CN8nbv13ngcFXfUxpvCk0x/Rb8/b1jgYMmu1otGBbEIixwK+avjYBqeTlIO87wxrq+IIDquezZqaJcUoQHgQyVmBzW9k1XOiP4o++0uHC0BViLx/Jqz6RaNBs''@;'; put 'put ''M/Y0gsKTUWBbx9zsgC4PCWSe81Gz7VeofTY8HJWMRwtySmeBmvqSHKShRonk4Ks+jNie7HK5r6m6YIc+2tqh2Y5WDLYHgRgKWLeRH37pXx7vCvz9W9YwQgouhbxt9cxmWOEnhu4QGgQiBWrb5pebMrQl/HshzE5G1a+tKKw/4ao+wwlCsx1OCD4HgTgKWM3214eueaBfP/r98LAY0Y0VnrrBJfbi''@;'; put 'put ''mA4MBQIZKVDTNvdLCtGe07n3zEEAiR7p0/H3RvqqD9xGzshTB4pOJYHa9vnrTREabK42ln3P0hlPLUulGiBXEEhVgSpZRZwtu5+kRL08XINpBo8qijanorDxz2OtC65sxyoH+4FAjAS2tJf9kAtzcK5Vm+Les3T6zgUxGg7CggAIDBGobp0zQ+f9e4euIa1grfLmwj0144GCZjsePdgXBGIgsKW1''@;'; put 'put ''tCwkAjsZ0QYmO7dR9+tL83deEIOhICQIgECEwNa2+Y8bMnTF4FWtNN600ey88oJdfePBgmY7Hj3YFwRiIFDTVHx2SAYOqSwrxwqvm/6eLM197rL8/Z0xGA5CggAIfCRgveqjc/9DjKg261fWqj5EkhsqixsfHi8SNNvxCsL+IBBlgbs65maTQH87o7bzrNBcGCGGldKKogNtUR4KwoEACHwksK65''@;'; put 'put ''yKUS1iwRujCMohHXrpsKnl4UDSRottFQhBggEGWBjS0znyCYDLz+M/CD6S/7Cmb9rApXiSgPBeFAAAQQQrXtC1bq3L8uPCc5kqifYm3hcs+e1mgAQbONhiLEAIEoC2xuLVnCpbgXYzzwb5QRewfqwsXli3aFojwUhAOBjBeobl1wbsD8oM3O3JMG/75FdHuFp+6aaOFAs42WJMQBgSgKbG4u+qKP''@;'; put 'put ''+5rsSvZkK6w1uYWKtenlnn2wzF4UnSEUCFTVl7AJGruHI+OHYQ2Th95XmFo6nld9ImWh2cK5BgJJKLB9+9X06Jm995si9L1weobQnwkY2lVVpQ3BJEwZUgKBlBTY3DY/3+D9DfSjh6KsIihWypcX7tsazYKg2UZTE2KBQBQFNjYXfUci+SAlimaFtRaRV6ijuKKw7sUoDgOhQCBjBapeO19VP9Se''@;'; put 'put ''tinueYN/1HL9DYUiT6WnrSuaMNBso6kJsUAgigK17fluIbJ2CWR6Pr66De3KsRlXLck75I/iUBAKBDJSoKZlzhxd+HYq1DawVq2QpoER+eHKoqaHog0CzTbaohAPBKIosKHF8wOC6H0YE/Lx1W3WdysK9z0exWEgFAhknMDdB8smhri+GyMysHa09aPRrGcdft8/Xx+Dr2qg2WbcKQYFp5JAdWuh''@;'; put 'put ''XQj2FCFkbjjvgNF7jFHnojXFLR2pVAvkCgLJJLC1fd5yQ4RqEDr+xL+C7ZILlL+i6LkXYpEnNNtYqEJMEIiiwKam4osCon+PQ8mZMhgWo3aT4itumdFwNIpDQSgQyAiBmsaZp/plb4ddmTAtXDAj9j91BYLWA4hmLBCg2cZCFWKCQJQF1rd45mOJngo/LGWF183AQQ2r11XMbP6/KA8H4UAgrQXu''@;'; put 'put ''aV94a4D7fhmewIJz4xgj6vyKooaXYlU4NNtYyUJcEIiywNrGSx7RmOu7Q8MSRNtMJL63ytPwlygPB+FAIC0FNreV5vv0nqftyvEJLKz5jxmx3bKicN+4VvUZDgua7XBC8DkIJImA9XSyN6Q/NvQ1BSs1r975bo596ne6Zsxsgekck+RgQRpJKVD77GWa33Vsl0qdpeEEdTPwukPFheUFB8e1qs9w''@;'; put 'put ''BUOzHU4IPgeBJBKwGm7IINspVT+xvq3Bgz5GbNswtt1R6dkd1fcDk6h8SAUExiVQ3Vw2ExGzMRxESiEQxj9Y6Wn8zbgCj2BnaLYjQIJNQCCZBO6pL8nqpj2/cbDsq4fmJaWUAaP3Lac2cXlFYd2uZMoZcgGBRAtUty7IFdy3i1A6I5wLI9qTGtO+syRvZ8zfW4dmm+gzAMYHgTEIWDPfKB/afkAw''@;'; put 'put ''uUNjzuyhIbgwdEbtBzAS/7GisP7gGMLDLiCQdgKbmmduwISsChcmhNmpMvvXywv2tcejWGi28VCGMUAgRgJ3tl56ntd37NFcx5kXEkzZ0GGsW8uUqI+rSPl5eVHd2zFKAcKCQNILbG6aeyZTWL0uAmcPJivRI306/l6sXvWJRIFmm/SnCSQIAsMLrG2avlDnvm0udfKZkVvrpreHYHU7o+4fw/e5''@;'; put 'put ''w1vCFuklYC3q0XmWfmuA9/wyXJlhBo+oilYWzVV9hlODZjucEHwOAikisKHFM8VndG91sOxvMKLZItMO6L3/59BylvS6P2isuuB1PUXKgjRBYFwCNW2zLwuZvt+r9PjXLdazDYxoq5YX7q0eV+BR7gzNdpRgsDkIJLvAhgOzPi9o6CGF2GZF5mr9h8arH3s5S8m9cWVxS1y+q0p2L8gvvQXuPrjo''@;'; put 'put ''KZ37Lg9XyYXxFiXywkpPWyCelUOzjac2jAUCcRIYWDqsy75MCHPNJ6Z5/Gh8U+hBjNAfNKb9tLyg4b04pQXDgEBcBWray64yTP8j7KO1arkwDULoj+Lxqk9kodBs43roYTAQiK9AdWthLhdoFZfGTSp1uiNHD5p9XRgpv2M05xeri/Z8EN/sYDQQiJ1AbePMyZyxOonEl8OjDMx/7HItrrpgR9y/''@;'; put 'put ''RoFmG7tjDZFBIGkE1rUVfMmGs1eHzN5rGdHskYm5tFP+0qcfrRUO7T9XX7THlzSJQyIgMAYBKRHe3Dpzo0B4BcZ4YHlKJGQfxsrCiqL9bWMIOe5doNmOmxACgEDqCGxsKiomlNVKKS4Kr5E7NHtKtH0cyx+f/rec/1m8eAdPncogUxD4WKC2Zc45CnM0BHj/6eHfEkR+t8JT/51EOUGzTZQ8jAsC''@;'; put 'put ''CRKw1sjlgnzfpU29zW90nhKZBkYkoFLnw6bsq15e0PhmgtKEYUFgzAK17fPvM0VoSTiAyUPvY0WZv7qg6X/HHHScO0KzHScg7A4CqSpwV8fcbKYbtxGEVp+wBon8hCq/IF1KTfmiXaFUrRPyziyB2ta5F/vNnjqVOXMGr2qxUhnrVX2GU4ZmO5wQfA4CaSxgfbe1sdVzAcOOm00R+HdKmBpZrlOd''@;'; put 'put ''8qpf/3CrRMFH4v26RBrTQ2kxEPhtfYmtz679FxfBfw6H58J8267Y8pfl7++MwZAjDgnNdsRUsCEIpLfAxpZZsxCSGwgmgxO1hyu21vxUaVajQObPVhTsa05vCaguVQW2tJddGzL9vw2/6mPVQST94YqiugcSXRM020QfARgfBJJIwHo/19U7ZT7FZK2QfPCViaFNF0uyExP0s4rCxlcxRjKJ0odU''@;'; put 'put ''MlhgY0fJJBISexHGXw0zKMT+lCF6r02GOzLQbDP45ITSQeBkAlbTdfa4fyyEXK1QmzNyOylFn8ocWzEyaxJ9ew6OIghYAjVtc2+U0vhVWIMiJUQoLr45f29HMghBs02GowA5gECSCmxuL5saNPu3qcT+zROlaHLjQ4bpzyuLm+5O0hIgrQwQqHmh7GzG2W5DBM8dbLZY++Op72ZfkyyvsEGzzYAT''@;'; put 'put ''EUoEgfEIWKumvDPt7wv8oa7Nbvu0L5zgKpcr1NHKublmhWd/O9xaHo827DtagSpZRRzNu/7IqO1b4X2tVX0UwuZVFre8Ntp4sdoemm2sZCEuCKSZQFXHpQ5H0HZ50OzelKVOPi2yPFOE/Bipj1HCflLpqftHmpUP5SSpwOaWsukh4W1QqM1hpWjNf6xgddWKovraZEoZmm0yHQ3IBQRSQKCmviRH''@;'; put 'put ''Z97lXPJyG3PnRqasm4EjCrNVG6r6wK15+3pToCRIMUUFql67Wp3U3/+oLgJXhUsImt7/zeauoptKG7zJVBY022Q6GpALCKSQQHVr4WlevX+rnbkXUaJokan79e43XbapK7pdOfsSMfF7ClFCqmMUqGkrvVJK8cfw7tYrakjKG1YVtzw8xpAx2w2abcxoITAIZIbAXQcKPZSSaoLp9MFJ34eUzoi9''@;'; put 'put ''wRT6morCuhfg+9zMOCfiUWV164JcJAP7h77qw7D6uCm9302GV30iDaDZxuOsgDFAIM0FqupLmFPVvxYw+u7OUicOTv4eLptL01CIfadEbGVF4XPvpDkHlBcHgdrWuStMZNQMXtUK3s2wtmBF0f4X4jD8qIeAZjtqMtgBBEDgZAK17fnugIErJRKVKrW7Irfj3PjQruTcpwteU+nZ3QWSIDAWgS3t''@;'; put 'put ''877QFzxS5xzyh521qs+09yb9a7K86gNXtmM5srAPCIDAqAQ2HZh1hk92VmvUeZlC7Z+aFCNg9r3t0iYuDxiBxjXFLf2jCg4bZ7zA5tay+wQyh67qcxQryoJEruoz3EGBK9vhhOBzEACBMQusb/GcY4rQvRpxlJ1o/VxfqPNVhzK1/IzDuY3JekUy5uJhx5gIVLfOmaHzvj0qdWZbA0gpBCO21csL''@;'; put 'put ''91bHZMAoBYVmGyVICAMCIHBygXWNhd8ypO9eO8uZijH+xH93TBEKEET/QAX5Se/MsvercJUASxA4kYC1StXaxot32xT3vPDnhjD+n2qo+RWlDT3JrAbNNpmPDuQGAmkksK65yCWlvhwhdItKHZ/6PtdqugiRR20se2V5wa6+NCodSomSQO3BsplBw7+bEdVuheTCCGGEv7+quOXRKA0RszDQbGNG''@;'; put 'put ''C4FBAAROJHBX8/QLODfW2Zh7UeRVrpRSOtXJL+umd3VXMNRQVdpggiIIWAK17Ze5De6rxxhfEhZhxPbkKX93X5UKX0FAs4XzGARAIO4C1u3ADS1FxQih9YywgsgErCsWhdrrJZK3VRTWvRj3BGHApBOoaS27SUi9Nvzdv+SylxJlXrK+6hMJCM026U4pSAgEMkfAmm/ZFqT/kqVMWq1z3zmRlQvB''@;'; put 'put ''ezTmepibwXtXFNe/kTkyUOlQAWv1qb7g0eez1Elnhn9PMP3vFYV1304VKWi2qXKkIE8QSGOBDS/Pd6L+wBohQxUKtWdFlmpy/RgjyjpGnQ/A97lpfCKcoDTrLkjtwbkruTA2hD82TP9hhdkXVnoaX0kVDWi2qXKkIE8QyACBtU3Tz7Yz90qDB26gRFEjS87WTvlLd+hozcrCAw/A1I8ZcEIMLAo/''@;'; put 'put ''5xK/0b3bztyTwhUzzJaXF+5PqlV9hjsa0GyHE4LPQQAE4ipQJRFxNhdMx4TVEkxnRA4upeCU2Oq4aa5eObP+5bgmB4PFVaCqvsRmo96nVeYsCw8sBP8rsrEZq/IaPoxrMuMcDJrtOAFhdxAAgdgIDKyfG2DftSu5qw3hPzdyFOv7XIU4fi2wfk9FYQPMtxybw5DQqFta55UFeO8Tn5j6E9MbKwvr''@;'; put 'put ''7ktoYmMYHJrtGNBgFxAAgfgJHF8/138Tl0blidbPtb7PtTFnLTJC28pnNR2LX2YwUiwF7j5YNtFvBJ5mRBl8Wl2lzp1Ov3/x9aUNwViOHYvY0GxjoQoxQQAEoi5Q0zjz1BAO3E2wsogR1RY5QEDvPqxR11a7qdydbAuHRx0jAwJWt5QuFUjfTDBTrHIxwj6KtDnlnt3Pp2L50GxT8ahBziCQwQJ3''@;'; put 'put ''NE4vCxgfbM6xnfklggmNpFCw41UuzdtJD3uqfNGuUAZTpWzp1lUtF6iJS/NL4SIYsf+pK7/gylSdzhOabcqejpA4CGSugPUQla0p/3JTBu5zKBNOiZSQUgpT6B2a4vzBioL9/5u5UqlXufWqz9bnF67STe+dBFM2UIGUfZTSOcsL6g+lXkXHM4Zmm6pHDvIGARBAd3Vcmh3o7d+sKa5v2ljWhEgS''@;'; put 'put ''U4T8EuGn7dj+k/KiureBLPkFNjXPLjVlcKdCbQNLM3JhGip13Jrsq/oMJwvNdjgh+BwEQCDpBTa350/1Br13KTRrsUJtjsiEDR706dz/ikPN+WmW6m9bknfIn/RFZWCCtc9epuEJ/PeGDF0RLt9a1UchrsJKz+6uVCaBZpvKRw9yBwEQ+ITAna2XnodNtAYhfIXGjq93OvTHWuhAIvEGRuheVdof''@;'; put 'put ''6zSMD2Cxg+Q5iba2LSwJ8J5nGNEG/mDiwtQp1Zan4qs+karQbJPnPINMQAAEoiSwscVzltforrZT98ITXelaw1hXuypxPE0xXecKmX9OxddJosSVFGFqOhacinT9OYnEheGENJr1rN9mLF590R5fUiQ5jiSg2Y4DD3YFARBIbgFr+kck5BpMyHXqCeZcDmdPEH1bYvSIoOw3ldP3vAdTQcb/uFa3''@;'; put 'put ''lW5BUpSHR7ZW9dG0rG8sm/FsY/yzif6I0GyjbwoRQQAEkkjAerp17fMzclFQ/6lE6Lt2JXtwjt3INK2l/UwResfO3A8yibf7ZKhrTXFLfxKV85mpbOu4VEFogsPgklGT0n5FJ0qQY8NGpSqoNBnnPOgOrSl+Kqlqqmlb+DkbVVsCZu+0cIGMKDtQl/Iv6fL6FjTbVPlXBHmCAAiMW6Cm/qs5QUYW''@;'; put 'put ''S4GWKcx+Hv1owoQTBbZuMzOiee1swh6d+/YRotQhhPoSueqQtToS9WGNEFNBBtaoSs5lRPsCRuSrNuY+3eDGNJ17J+tmX5YuQkQiMfjfeOvr6ix1IpcSfTjBfvobhgh1h8y+twSnj9k4f+/7CWzAW9rm3cul/qPwcRCCd2GpzEmnua+h2Y77ny8EAAEQSDUB6wqwL+T6Ijd9twtszj7RNJCRNenc''@;'; put 'put ''3ysl8mVrU17RpdGgUdtugxvHOBPcFpKcaNkhtd8Zur70oVFPJfjb+n+3CaVLkURTuNqnmcLGpGEQQlm2RMY/SYRnEMIulFKc1hN8b6r1/inGmFKsapQo2nj8rT8qnGruMYU46rjQd0rM2xl5v3NJ3iFjPHFHum/twdKL/KH+BpU5c6x9pBRCpVlrluXv2pROt/Oh2Y70jIDtQAAE0lLAem0oYPCv''@;'; put 'put ''ZSmTvu03ugsUavvUeronK1zngT400Bwcerbt9KMqdbzNkfG+Yfr/RiR52RB6jySoH3MhqEKkkIIhRBWExCSKqWYI/iWHkjNBIvk5hm2nBY3eM3pC/3CZIjgwmQNGhI4mn2gcoJDp7861n9FkysCvHb7A3lg+OFZVX8Im2tTtQ1/14cJ8i9vsebfm7euNRj3JEgOabbIcCcgDBEAg4QLr22d9AZv8''@;'; put 'put ''KkbUqwwRPJ9gqhBMPzUlZMITPUkC1lWhRFJYyxBKJCUa+P9yYGuMMbb+9/gUl4RghMnx3534R0huutUp9Qb3387YsYOxuNKtaS+7yjSDj1LCBtYutr4zZ0hdVlHc8OtkNR5rXtBsxyoH+4EACKStgDUdJGooUR1KYI6N5SySUi7SuXfaeG/ZRgvMakoKcXQRjI5QqrXrPHCYmwGvIQIfcsTfZcT9''@;'; put 'put ''jkqFty+k9Q0dU3X4s4lunG5yfiYjyufsWm5xQO8rUqnttJPlZjVujblekdy4Mytk7IzWla61Vu0EGz3EpXl+eGyNZj2zdMYzl6fT7eNwbdBso3X2QxwQAIG0FahuLbRjk+UEcahAY7ZLNOK+pD/0/vkCmW6F2LMoUQauzKL1Y32Pago9YGMuL6XqEYbYC0He9xZC6GVpsne5U+2agLqNI/azzaoL''@;'; put 'put ''duhjHdd6UrumrdCGOT3VIPhrutFf7lCzP7V2sBXfutKVUh60kewbb/Y8+8pYxwzvt6Vt3o9MEfrV4NW1RP0atS+6qeC55vHGTsb9odkm41GBnEAABJJeYFvHpY5OTu1KCJ/GEf+8JORUjdpzGVJPVZnrLILIWbrpzzFkUDOFQax7uAgjoRG7oSouv5DysJDme7rpPyIx7xZcD5hC9yLMj1JC/mow''@;'; put 'put ''ckTpyQn6VD0Ur1muqjouddh86ldVpvxbkPdfdaIHx3Qe6Lez7EelKdeumLnv72M5UJuen3+GItB+U4S+EN7fetWnK2BeF69ax5L3ePaBZjsePdgXBEAABE4isH371fRvX+y1aQFKeSBANGbikMmkrhhcIdPMSs+OQDLjbW4qOjMgA9WUqJeFp08cmm/Q9Ha5tMm/lBI/OJrXoSyXI2f0buUydGM4''@;'; put 'put ''nmEGj6jUvqiiqOGlZDYZT27QbMejB/uCAAiAQJoLbGjxfJkRezUXoTknelgMY/Yywfhn3QHzmZFclVqv+vhC/QeGzl3NkFJR7tm3OZ0podmm89GF2kAABEAgSgJ3NU9fnKNN+7HP6L4Io08/xexUpjweNHo3Lffsaf2sIbe0z3+Mi9A/h7cRUrzjEO5Lls58pjtKqSZlGGi2SXlYICkQAAEQSD6B''@;'; put 'put ''qtfOV909U2/gUv8FJSw3MsOBp6Spcxsj4vZl+fs7Iz+vaSm7ypC+h4felsaILKnw1N+ffNVGNyNottH1hGggAAIgkPYCNU3FZ+vIvINgcuWJnsRmxPYGFuh2A/U9UelpG/hu+q6OudlKSK/HGF8cBlKw9kSnO/va8TxRnSrY0GxT5UhBniAAAiCQZALVzUV5PaEPfuXSJl8U2XSPvyok2jWSXY4I''@;'; put 'put ''elsI/dumDN1tTTU5UIZEfUgST2Vx/WtJVlZM0oFmGxNWCAoCIAACmSOwvrloZsjsfcCpTvxiZNVCCm5Xcv6uYtXdb3w4Mfw5Repjyz17r84UJWi2mXKkoU4QAAEQiKGA9X2u2mnfyIhyAyOa/bOGEoJ3U0qKKgob/xzDlJIqNDTbpDockAwIgAAIpK6ANSPVXe0FZxFTriWYXnGy6S0Voq64uWDv''@;'; put 'put ''ltStdPSZQ7MdvRnsAQIgAAIg8BkC1sQV7007fJ7A5E6CyTeGbqrz4OvI7vKk26o+w50Q0GyHE4LPQQAEQAAExiRgLaGXpfAbhDRvZ1SdTJGiE8wW3Fz4XMOYAqbwTtBsU/jgQeogAAIgkAoCtY0zJyNVu19KkhXktivXFD/Vnwp5RzNHaLbR1IRYIAACIAACIHACAWi2cFqAAAiAAAiAQIwFoNnG''@;'; put 'put ''GBjCgwAIgAAIgAA0WzgHQAAEQAAEQCDGAtBsYwwM4UEABEAABEAAmi2cAyAAAiAAAiAQYwFotjEGhvAgAAIgAAIg8P8BcbF+IvaVe9EAAAAASUVORK5CYII='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=select-table-png; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAAdsAAAGTCAYAAABgcbg1AAAAAXNSR0IArs4c6QAAIABJREFUeF7sXQecVNXVv+WVmdm+gKBgRY3GLxqlLNsQY4nGoFGDGhOjsVNEqiXFoKJIEdTYiCWxRlEESyAWBNkCKGpMYo0FQRTp26a89+69X+7Mzu7b2ZmdXnb2zC+R3Zl7zzn3f+7b/9xyzsEIXoAAIAAI''@;'; put 'put ''AAKAACCQVgRwWqWDcEAAEAAEAAFAABBA3ch2ycYrSpqdjKrEgYvaAbK4JuSPJvP6/3Ux3f9vKl4mc3eTZZTELr+ItfVoSwstiOsLhdbk67G9Sl1xyQvg1n2ModjZ5bppwAaVOvz/KsToprMnn4Tqi4ZnpDEnMtZY50QsmMQqK1y74Jij+dPeN3S8oX4I+iKIfbBvLM9FT+ON5p9oczwWnOJ9Duwy''@;'; put 'put ''48EwFltiwTw4/+1z30van4e2wPPgpSZWiO7/mfk8hGjU+8uj798Trw3QHhDIBAIdf8SXNI5zGq7yvzrVku8TTDVKVAUjQjHCGOMAKQuBhP+39pdAnWSNEepGekKIsEQopKT2V6BfZ7PgL+3v2PrHy++ddgYNxn57O3nLbn9ksANy4mVY+xgjjdWPKeq0E0mspS4/3lii0q7b3kb2acdPCG63O4Bd''@;'; put 'put ''AKcgrl3ADTPILoC09+wJFzkf4p2Ydrvi7Rtve2ybWz341P9R13FiTNpxD37WPu3lgNvHTBBCAcjlmKQfgvPePtcDHgg/90Nt6vrciK4PQ+dzFvwp3ocgMJs6n7Uu6mP1ZWzPSUB06PPck/+6zv1g/y7zyz9e+R/p1/Z574deyDe4fI+zgF6iMeH9zBJt55x71H2t8c4baA8IpBuBjgfxkbfO39+H''@;'; put 'put ''PJ95rL1aupWCfEAAEAAEUo1AodYfKaR4n0uO+8uOVMsGeYBAsgh0kO3ijecNFcL7kdvcqyYrFPoDAoAAIJBpBCTZEoP0u6zq2d2Z1g36AIFoCHSQ7QPvnXMYstiHbnOPEq0TfA4IAAKAQK4hIMnW8njLJ9T+Hc5tc805YE/nUeRD74w71OLmR0C2MCsAAUCgNyIgybaNsrKpxy7f2xvtB5vzG4GQ''@;'; put 'put ''bWTfx0C2+e1wGB0gkK8IANnmq2fzY1ydF6TePvsQA/FPgGzzw7EwCkCgryEAZNvXPN67xttBtg9uGHcwI+anPZEt46ZPIG4PN+kI7rFf2O8MeuiIVEggZKF3AZmgte34+4Mwgj93hPtQouo9yWXcMgViZrsT8hTj2EJoAlEncUUl2RoHfmyfw1KOdAcmWNHsoW7hfGFxn0eIQPhJ11e4EKmYxxJO''@;'; put 'put ''VbzjS3BKZr2b/ZnwuyXwH0ykXyhRI0ZLANlm3XdgQA8IdPzBuf+9nx2ELfTfnshWI/opFmL/kvKIYfBW3ddBvJrbhYVmyEBEpFIW01+9tiRcozGas+RixmhbECf5r0GcWPXKfzlWiY5VpBSVuoY8tcP9+bHhYBIyxhbT3zBFvGp5GZN4mIrV5Y++Thn29uALzd3pJ8OWrCNW/4WzK9axJ+H6HrtG''@;'; put 'put ''sz34ueHhGKGCgKz2f4KChWEShVFKNO2nnBv3RiJcl1q6wmDGTB9r2okNjRPdx32MCoelCK9idTwD0g9B2T35I3Rgdv/YP7P7Kls4pkJvpLlify6kHtlOqBpRGR4qBK+PpFuSbekXRDn33GfDfPlJhcUgAxBIHAHbme24A4QwP+95G7loyLSql7cmrg56xorAkg/GaYgPeuXrln+NCU+2nCMujpxe''@;'; put 'put ''W/9prDKhXXwILGo4sZIh31qCadgb+i6t/MGrhi+7Ij6p0DpRBO7ZcGI/g1k7gWwTRRD6ZROBDrK9960z96cYf9ET2apcG3x1zWvfZNPgvqJ78cYr1BKHvvKb5n+dGIlsGWKHX1vd+HlfwSTT47yjfswoga16gikNp7tA7f/IlSOWXpppu/qqPiDbvur5/Bh3XGSLEB0yreoNWNlmwPexkC3G1vem''@;'; put 'put ''Va37LAPm9EkVd647ocLiZkMksi3UBz1+xbBnft0nwcnCoBc2/rgcIe8uWNlmAXxQmTQCnRek1p89hFH+Zc/byEC2SSMeo4BYyJZwcdjU2vovYhQJzeJEAMg2TsDS3BzINs0Ag/i0ItB5Qapx3GCsmpuAbNOKd8zCJdkWadqKba3/PinSNjK38KEzj1/7ZcxCoWFcCATI1mogmITdRi5S933i8hFP''@;'; put 'put ''XxiXUGicMAJAtglDBx1zAIEOsn343TP2Mxn5Csg2B7yCEAKyzb4fgGyz7wO7BUC2ueUPsCY+BGy3kc/eVwi+Gcg2PgDT1RrINl3Ixi43Ktlqg568fPgzv4pdIrRMBgEg22TQg77ZRiAusoXbyJlzF5Bt5rCOpCkq2cI2ckadBGSbUbhBWYoRsN1GHjeIYnMLhP6kGOEExQHZJghcCrtFuyAFZ7Yp''@;'; put 'put ''BDsGUUC2MYAETXIWASDbHHVNLGRrEHPoDZXrN+XoEHq9WQsba0dyIRoh9Cc3XAlkmxt+ACsSQwDINjHc0t7LH/qj6Su/aY2c1ALINr1uWNBw/AiE2Dog2/TiHKt0INtYkYJ2uYiALc72jIGMkq9hGzk33BRLnC2QbXp9BWSbXnzjlQ5kGy9i0D6XEOiMs33/rH2wIbYC2eaGe4Bss++HhfVjhnNs''@;'; put 'put ''rY+0si3SBj52+fAlF2Xf0r5hAZBt3/Bzvo4SyDZHPQtkm33HANlm3wd2C4Bsc8sfYE18CADZxodXxloD2WYM6oiKgGyz7wMg29zyAViTOAJAtoljl9aeQLZphTcm4QvqaoYhguQ2ctgSe7CNHBOMKWsEK9uUQQmCsoAAkG0WQI9FJZBtLCiltw2QbXrxjVc6kG28iEH7XEKgg2wfeXfcAIOZ30C6''@;'; put 'put ''xtxwD5Bt9v0QC9ludYrLZx31rJF9a/PfAiDb/PdxPo8QyDZHvRsL2ULVn/Q6LxrZFmoDH/sGyDa9TrBJB7LNGNSgKA0IANmmAdRUiASyTQWKycmIRrbyzBZWtslhHE9vINt40IK2uYYAkG2ueaTdHiDb7Dtm0bra4xgXGyJdkIKVbWZ9BGSbWbxBW2oRALJNLZ4pkxZI16it+AaKx6cM03gFAdnG''@;'; put 'put ''i1h62wPZphdfkJ5eBGwl9sb2F4J+Cxek0gt4rNJjKUQAZ7axoplYu2hkW6QNeHSrE18BF6QSwzfeXkC28SIG7XMJgVCylbeR1cgG0iHTqt7YmksDyFdbgGyz71kg2+z7wG4BkG1u+QOsiQ8BINv48MpYa0m2xZr6929b/3NyOKVCcA4r2/S6A8g2vfjGK/2+upoyL6W7I/Ur1Pqj0i+Icu65z7J4''@;'; put 'put ''ZUN7QCDdCADZphvhBOXHQraEi8Om1tZ/kaAK6BYFASDb3JoisLLNLX+ANfEhAGQbH14Zaw1kmzGoIyqKRrZwGzmzPgKyzSzeoC21CADZphbPlEmTZFuoKS9/1/rBKZG2kWFlmzK4wwoCsk0vvvFKB7KNFzFon0sIANnmkjdstgDZZt8x0cgWbiNn1keSbE3WtEWluiucZjizzaw/QFt8CADZxodX''@;'; put 'put ''xlr7byPr9KVtLR/+GFa2GYO9i6JoZAvbyJn1y8LGynKT8S0qdQDZZhZ60JYCBIBsUwBiOkT4yValL21rA7JNB76xyIyWrhHINhYUU9emnWw3q9RRACvb1OEKkjKDAJBtZnCOW4sk2wKVvri97cNTYWUbN3wp6RCNbGEbOSUwxyxkTl1NGUGmXNkC2caMGjTMFQSAbHPFEyF2+M9sVfLCd20fnQZk''@;'; put 'put ''mx0nAdlmB/dIWmFlm1v+AGviQyA0N/JWyCAVH4Dpag1kmy5kY5cLZBs7VploCSvbTKAMOtKFAJBtupBNUm6AbPHy79o+/kmklS1kkEoS5CjdgWzTi2+80oFs40UM2ucSAkC2ueQNmy2zVo9RhpZ/74UdQLZZ8xCQbdagD6sYtpFzyx9gTXwIANnGh1fGWkuyPbTf4cu3t35yOqxsMwZ7F0VAttnB''@;'; put 'put ''PZJWINvc8gdYEx8CQLbx4ZWx1n6yLTts2Xb3pz8Fss0Y7EC22YE6Jq2wjRwTTNAoRxGA4vE56hgg2+w7Bla22feB3QJY2eaWP8Ca+BDoINv73z9rH2wIeRtZiSwC6tnGB2/irSXZHlJ22LKdsLJNHMQkewLZJglgirsD2aYYUBCXUQSAbDMKd+zK/Bekyg5/fof7k7GwjRw7bqlsCWSbSjSTlwVk''@;'; put 'put ''mzyGICF7CADZZg/7HjX7ybZ06NIdns/OALLNjpOAbLODeyStQLa55Q+wJj4EgGzjwytjrYFsMwZ1REXRyBZyI2fWR0C2mcUbtKUWgQ6yfXD9GQMZJV/DmW1qAU5UGpBtosilrl80si3SBj621Skun3XUs0bqtIIkWNnCHMhHBIBsc9SrsZCtQcyhN1Su35SjQ+j1ZkUj20J90OPfOPhlQLaZcTWs''@;'; put 'put ''bDODM2hJDwJAtunBNWmpQLZJQ5i0gKj1bIFsk8Y4HgEQZxsPWtA21xDoINt73xo3iGJzC2wj54aL/KE/5UOf29n22ZnhLBKCc1jZptdX0ci2SN33ia0udimsbNPrh6B0INvM4Axa0oMAkG16cE1aaiDO9pBnd7o//xmQbdJwJiQAyDYh2NLWCcg2bdCC4AwgAGSbAZATUSHJ9uDSQ5bs8nx+ViSy''@;'; put 'put ''FYgdMqO68atE5EOf6Ajc0Tj6WCH4WwTTsIleirRBT2518ktgZRsdy1S0ALJNBYogI1sIANlmC/koev1kW3LwM7u8X5wNZJsdJwHZZgf3SFqBbHPLH2BNfAgA2caHV8ZaS7I9qPTAv+32bPo5kG3GYO+iaF5D1Q8JIm/DyjY7+IdqDZCtsVmlzsJwFhVq/VHpF0Q599xnWW5YDFYAAp0IANnm6GyQ''@;'; put 'put ''ZHtgyYFP7fFuGgdkmx0nzV9fezRmfCPBihrOArgglVm/ANlmFm/QlloEOsh28caz9xWCb+7pNrLKtcFX17z2TWpNAGnhEAiQ7f5P7PFuPi8S2ZqcH3x9bcNmQDA9CMxvqPo/jPC7kcgW4mzTg3vP28iwss0s6qAtVQjERbZYc+w3dfgr36ZKOciJjIAk2/1Lhjze5N1yfiSyRRY+aPrxa7cAjulB''@;'; put 'put ''YGF99VEco/cirmy1AY9udeIr4IJUevAPlbpo9ZhSn+LerFFnEWwjZwZz0JI6BDrI9k/vnrGfyshXPa1sgWxTB3w0SbGsbC1qHHjdqA1fR5MFnyeGwIK1td8XlP+TRthGLlT7P3zFiKWXJSYdesWLQIBs2zZr1AVkGy940D7rCHSQ7cPvnrGfGYVsdQXvO3Hkmm1Zt7oPGBDLBSmMrQOmVa3b2gfg''@;'; put 'put ''yMoQo5Gtk5YvHl+x7KqsGNcHlQLZ9kGn59GQO6v+NI4bjFVzU08rWyDbzHl+8cYrVAe1nukpzhbINr3+8JMt4f+kJPwFKZ0W3TOx4uWr02sFSA8iIC9IYWR81dM2sukkRROPerYVUAMEcg2BuMgWITpkWtUbsJLKgBeXfDBO85qlS3e6P/1pOHWQrjH9Tmgn2/coUbRw2oBs0+8Du4ZYbiO3UVY2''@;'; put 'put ''9djlezNrGWgDBKIjYCtEcPYQRvmXPa9sC46dOHLFP6OLhRbJIrB44y/6l+oDlmxtef+E8GQrOBbqmGk1q+qS1QX9wyOwaMOPfsQs3z8i3kbWBj7WpO6dMPOYV9sAw/QjcMdbp+wvTPcXkeKeZZwtkG36/QAaEkMgLrLdt+ioeoLoToQRoVjjAnFLqsWIYowQQVj+gxFGol0u6W6Vv03Xl79T4GXr''@;'; put 'put ''3963vX1Qkuho2ylHdhYo8LtNFiLtfYOfoYCB/pdApJsdgf7C1sYvV4SDFiPuf18g/2D9P3PBROB3/z+c+xswgREWDAkufw7IE0LI/wsmm8i+8j2pnbQLxEIw4bWafrrLvckRybXl+gH/UTXnJyp2StAxwYpAwmYvlqBggiUSApF2QDDCfn/J//n/L/9DMMWys+wSwJi0YxEQYrdB4tn+RrvdkSef''@;'; put 'put ''HGg7PAGQbK8gtp3zpdu8CHg07EsgbvNNpz8k9n4/Ci4hbveHH2/5s+DyJb+pMCE448iyuLDkz1z6hSP5m8kopophef5vr2/LsZFGV6wP2uNUyl4XmPsoUUm7ukBCBakOYyx4YADEP4ElthjLH7EgBBGB/S9E/S7wf+b/3f84BeazdF7AT4Hf2ueo9GH3Z6LjHX/D0Gci+DwE5m1QVvfnMej/yF7t''@;'; put 'put ''/CSIe/BZCPrajr8EQ45Ytg08E50+CkriyD9RuPSDQEz+y2RDizHGkeGzuEm5YEV7PJvC5gqXcoBsY/EYtMkWArakFmfuTzH+oueqP9kyE/QCAoAAINAzAkC2MENyGQEg21z2DtgGCAACMSMAZBszVNAwCwjYklqMO0AI83NY2WbBC6ASEAAEkkYAyDZpCEFAGhEAsk0juCAaEAAEMocAkG3msAZN''@;'; put 'put ''8SMAZBs/ZtADEAAEchABINscdAqY1IEAkC1MBkAAEMgLBIBs88KNeTuIuMiWCybDGsKGwkRAKErbeETlrQ9sAwtGLwXeihRPGOwgwyMECkQYwSsVCHQJM8IYExoIu4n84sIyAyE/tmYhoVLhevcoNBVDyTsZgWejp2cCyDbvnJ5XA4rrNjJB6kU+3Po2FVhgRjkjnDFOBCUcMyywxhixsIqDv4ci''@;'; put 'put ''RU015G+MgSyiYIVbCbMuUwNxpdQMxPYGfw/qDr4faktou2helWMO10aOP/i+IsyOnxkPtGdq5+d+OwUWEqugPPlzwH6OiUooshRCFItyoZaVOYY83OTbemg4vfIP/P/+8MzmzFwqKPNhxjgjCsOW1UG+FhGYklDMw480aEcnbjxpPqAkGG8dkBrExD9eIrD8PbSN3To5l6L5JdLndl9EkxG0K2iL''@;'; put 'put ''oJRgRnVC1fM4YtdHIlyK9dWM+f5oMW8gX7hCOTM4U7WAz02DY+RASDE4tjQi5L/yfemXAAaB8dmxl/Mgmr3dnqsQnOPtn6n2dv+HezaCz4HdHvn8yGdFCKxoRDlOIPRUJHuheHymPAl6EkEgLrKFeraJQJxYH1mI4ODSoc/t8nx2Zniy5VxgetSMqjUfJ6YBekVDYNG62uMYF+sJpmGLxytEnz95''@;'; put 'put ''1KvXRpMDn6cGgXs2nNjPYNZOINvU4AlSMotAB9k+uD56ukYg28w5J0C2By/Z5fnirEhkyxA7/Nrqxs8zZ1Xf0nRHXc0xgoi3I6VrVIlzwdWj/jGzb6GSvdEubKwsNxnfrFJHQTgrYGWbPd+A5ugIdJDt/TFU/QGyjQ5oqlq0r2yX7vJ8dkYksuUWPnTm8Wu/TJVOkNMVgYWNo3/ABXsnEtnqSsFd''@;'; put 'put ''E0eumAK4ZQaBQCECcwuQbWbwBi2pRaCDbNuLx8sSe2G3zKRaINvUgt+TNEm2Q8sOf36H+5OxkcjWIObQGyrXb8qcVX1LUzSy1WjxnyZVvDS5b6GSvdEC2WYPe9CcPAK228hn7ysE/wrINnlQUyFBku0hZYct66nEnkDskBnVjV+lQh/I6I7A/PW1R2PGN0Zc2UI924xOm1hK7JV+QZRzz302UAwC''@;'; put 'put ''XoBADiEAZJtDzrCbIsn20H6HL9/e+snpkVa2QLbpdV7gzBZtjBRuAvVs04t/qHQg28ziDdpSiwCQbWrxTJk0SbaHlR/x4ndtH50WiWxhGzllcIcVBGSbXnzjlQ5kGy9i0D6XEAgl2809FSKAM9vMuW7xxivUIpW+uK3tw1OBbDOHu13TvIaqHxJE3o60stWUknsnjXxxUnas63ta4cy27/k8n0YM''@;'; put 'put ''ZJuj3pRkW6gpL3/X+sEpQLbZcdIdjaOPFYK/FYlsHUrJvROAbDPmHCDbjEENitKAAJBtGkBNhUhJtsWa+vdvW/9zMpBtKhCNX0Y0snUqxfeNH/nSxPglQ49EEACyTQQ16JMrCNgySI0bRLG5BbaRc8M1/m1kTVuxrfXfJwHZZscn0cjWoZTcP2HkixOyY13f0wpk2/d8nk8jBrLNUW8C2WbfMVHJ''@;'; put 'put ''Vi19YMKIF8Zn39K+YQGQbd/wc76OEsg2Rz0rybbEoa/8pvlfJ8LKNjtOas+NvCHimS2QbUYdA2SbUbhBWYoRALJNMaCpEgdkmyokE5cTjWydtHTx+IoXrkpcA/SMBwHIjRwPWtA21xCIi2wRokOmVb2xNdcGkY/2LPlgnMbFoBWwss2ed6OTbfni8RXLgGwz5CIg2wwBDWrSggCQbVpgTV5oLGQL''@;'; put 'put ''hQiSx7knCdHI1qWU/fmqkcuvTK8VID2IAJAtzIXejACQbY56z7+NrGkrvunhNjKQbXqdF5VstfIHrxq+7Ir0WgHSgWxhDuQDAkC2OerFWG4jA9mm13nRbiO7gGzT64AQ6bCyzSjcoCzFCNiKx58xkFHydU9xtnBmm2L0exAXS1ILINv0+iMa2TqV8ofGj1x2eXqtAOmwsoU5kA8IANnmqBeBbLPv''@;'; put 'put ''GCDb7PvAbgGsbHPLH2BNfAgA2caHV8ZaB8hWefnbHnIjw8o2ve4IkC3bEKmerUvt9/BVI56/LL1WgHRY2cIcyAcEgGxz1Iv+M1udvrSt5cMfhzNRCM6BbNPrvEDVH/xWJLJ1Kv0eGj/yedhGTq8bOqTDyjZDQIOatCAAZJsWWJMX2l5i76VtbUC2yaOZmIRAPVvxNqxsE8Mv1b2AbFONKMjLJAJA''@;'; put 'put ''tplEOw5dkmwLVPri9h7q2cLKNg5AE2g6f33t0ZjxjUC2CYCXhi5AtmkAFURmDIFQspVVf9TI2iGDVKY8469nq5IXvmv76DTYRs4U6l31LGwc/QMu2DuRt5HhNnImPQNkm0m0QVeqEQCyTTWiKZInydal4uU72j7+CZBtikCNU8zC+uqjOEbvAdnGCVyamgPZpglYEJsRBIBsMwJz/Er828gaWra9''@;'; put 'put ''9ZPTgWzjxy8VPW6vrz6KYvQexUrY3R6Is00FyrHLALKNHStomXsIANnmnk/8FvnJVhHPb3d/+lMg2+w4acHa2u8Lyv8JZJsd/EO1Atnmhh/AisQQALJNDLe095q1eowytOzw53e4PxkLZJt2uMMqmLtu1JGE0fcpCb+ydSnlD141EnIjZ8o7QLaZQhr0pAMBINt0oJoCmX6yLR26dIfnszOAbFMA''@;'; put 'put ''aAIigGwTAC2NXYBs0wguiE47AkC2aYc4MQVAtonhlspeCxorjxCcyJWtFk4ulNhLJdrRZQXIln2lUmdhuNaFWn9U+gVRzj33WRZdGrQABDKLAJBtZvGOWZsk20PKhz63s+2zM2FlGzNsKW04t776ewShfwHZphTWhIUB2SYMHXTMAQSAbHPACeFM8JNt2dBnd7o/+xmQbXacdEddzeEc839TooZd''@;'; put 'put ''2Tpp+eLxFcuuyo51fU/rnLqaMoKMzbCy7Xu+z4cRA9nmqBf9ZFt6yLM7PZ9HJFuDmENvqFy/KUeH0OvNmvdmxWGY0v9EIluHWvrAhBEvjO/1A+0lAwCy7SWOAjPDIgBkm6MTI3Bme8iSHZ7Pz4q0sgWyTa/z5jVUDcUCfUCJqofTBGSbXvxDpQPZZhZv0JZaBIBsU4tnyqRJsj249JAlu4BsU4Zp''@;'; put 'put ''vILmvznyYESVj4Bs40UuPe2BbNODK0jNDAJAtpnBOW4tAbI9eMkuzxewso0bvdR0mLNu1EEKwx9TosHKNjWQJiUFyDYp+KBzlhEAss2yAyKp95NtycHP7PJ+cTZsI2fHSQsaqg7kQnysEM0RdhtZKbl/wsgXJ2THur6nFci27/k8n0YMZJuj3gSyzb5j5q6uGIJV8t8eyPbe/pv0ayCuMzO+kmSL''@;'; put 'put ''kfGVRp1F4TRCnG1m/ABaEkMAyDYx3NLeC7aR0w5xh4L5759SoDdRl6X4NKEoBFsWVzkVFjW/bzHj5UhntrpScNfEkSumZM7Svq2pnWw3a5DUom9PhF46eiDbHHUckG36HDNLzCIDGxv7W0T7vqpovyCIVDf5vh3MhRVS3QcjhWgFGHc8Jl2MUnHBoqsrV0xLn6Ug2Y4AkC3Mh96MAJBtjnovFrIV''@;'; put 'put ''iB0yo7rxqxwdQs6ZJVewDq9yJEF4SpN326kq1QsjrVojGS+EQEHydaglD/T/Up8E28iZcTVsI2cGZ9CSHgQ6yPb+98/aBxvia7e5J2ztzoB6OmRa1Rtb02MKSLUjAGSbuvmwZMk4um1Ia42F2uZa3DhaIbozWemSdAv1gV9YyHPRxOEv1ycrD/pHRwDINjpG0CJ3EQCyzVHfANmmxjF3rj9xoEDo''@;'; put 'put ''JsNs/ZVKHQXhpDJuGVyYBhfMFIhzhBDGiGCMqUKxqkfKjSxlCcG/cinlV5q7jDWTf7LSlxqrQUo4BIBsYV70ZgTiIluVa4Ovrnntm9484N5ieyy3kWEbuWdv3t140rEM878IwY4JbSkJ1sfa9jiUwic8vj1rsa69r7jJXspNS7ZlRFWwohRZ1HdMobLPGCZ8Yy1hHBjuZjLjps+plrwqkHXzwK9K''@;'; put 'put ''34Nt5fQ8ZUC26cEVpGYGASDbzOAct5ZAIYKDnt7p/vKccJ2F4BzINjKsi9adeJLg1sMIowPsrSQxqsS5xme1PkQ8npUzf/yvtlids7BxzKEm89wskBgb7kasxX0ehRY8qDIyd1d19bZZeJZcJcMrRQgA2aYISBCTFQSAbLMCe3SlkmwPKjvo6d09kK3J+cHX1zZsji6tb7W4a/3JP6FIeczg7n7B''@;'; put 'put ''kQshuMHcnyjYcd3M2vqXkkFkwcYx/bHJrzTNthmaUlgaKstkPrdCtD9h7Jw3reqV3cnogr6dCADZwmzozQjERbZwQSpzrvaTbemBf9vt2fRzWNnGjvuC9cefbBqtz+hKYVkn0cpzWDzfYZDZE09Y0xq7tJ5bzq2v3k8j+u1MGBcQTGloa8Nq+8ipFF+2p/KN9bMwglVuksAD2SYJIHTPKgJAtlmF''@;'; put 'put ''P7LywAWpA5/a5dk0Dsg2NifdWXfSASbyrKFUOTjYw+I+N+Pm7TeMfueW2KTE32pufcUJROBFhGhH45CgXC4sU8H6S4yJm6fXrn4/funQI4gAkC3Mhd6MAJBtjnovcEHqwKd2eYFsY3HRotVjSlWXc4XB3JXB9gZra1Kx64LpNWtXxCIjmTYy/HZBfc3PKFXvQIh3kH1QpiRdgtSlCKM/TKsqLbZ5''@;'; put 'put ''AAAgAElEQVRa81kyuvpqXyDbvur5/Bh3XGQLt5Ez53Qg2/iwvqvxpMWWMC63ryyFYNOnV9cvjE9Scq3vXl9R7DHFbwUS4zXqKg6VhhHdoSqOuw2L3QfnufFhDWQbH17QOrcQiCuDFJBt5pwHZ7axY333+tOGGFbre4SQ/sFeBCkrzQI6buYxr8Z82zh2jdFb3rZhZD9ikt9hIa5UqcNl7yGQvK7F''@;'; put 'put ''vlKwfptZqDyVLRujjyK3WgTI1veVRl1QiCC3XAPWxIBAXGQLF6RiQDRFTRZvvEJ1EOPpXd4vI5bY4xY+dObxa79MkcpeK+bet8Yu8FnN04MD8FltTQrVTptZ3bgum4OSW8sL62sO8/K2R5xqcXWoLVwwC2H0jiL0q6+pWrURYySyaW+u617YWFluMGsTkG2uewrsC4dAXGSrENf+k0et/BqgTD8C''@;'; put 'put ''kmyd1Fqy0/P5z8Jpk3G2DLHDr61u/Dz91uSuhvsbTtmHaIXvtJm7hgStFEjc01K59ppcuQF894rTdKOkdSzByrxw57kyPpdifSm3xI3w5SnyXJNkazL2lQpVf3L3gQTLIiLQQbb3vjVuEMXm5p5yI2u04HuTKlZ8CnimH4G/rB7jUMuPXLa97cNTI5Etwnj49Kq176XfmtzVcO+Gn17rtZpuw5j4''@;'; put 'put ''Q284t7bpyDUsFzOdSbIQnNxkCvOicDVZiVB2CiJu1i3jiQm19XtyF/XsWCbjm5HP+pZgqoSzIN31bOVOxf31p5eqql7AEHYylfvtoCaxGLG82GG1jv/B3/fCDkV25keua42LbIv0fW8yedsGwRBjwuBCcMEx98vAmGKCBOaYYsyE/z2CSYd8jgPv2YMRWTs63QIUQ1CTMv3yBOvYZpPvhf4eCra0''@;'; put 'put ''Jx0O4Ah32+4T7bYREfiMCy4E7WzXxdYw/YPYBfs7qKvIQUsW7fR+vn94shXCoRT92RLGiwJhU7aRNhBBbBgFfEMxIXYZnAfw9L8oQkF/hfrMP44wfgu1J+ifoI9C/SX9HBxXt75+vIIzAaEgZhKvAM4MCYGEBJTL8bVjyhnFuu4qdpLia5t8X1cF5QqE751etWZSOvyeKplz6iqGOajraoH4ReFk''@;'; put 'put ''Fqj9PjKYd7XAbIVg5h7DP7dMRLDAghHCMcIEUyw4IfK9gJ86fSoZQH4elB18RoO/y2fVrjfcc+KfI1HmRk94yPkf6XP7c2Gfe/45jLAgRPqey1oPQm7fCMFMpCJEGTlYYPZYJLnpIFtJsA+v+3GZ0It/SDC9wKmU/rDJ+93BbdYOnTOG5RQlSOMurcwo1vfZLBD/3GLeNwXz/H2X1vodnMen6qnp''@;'; put 'put ''/XI6HrrFG8/eVyZV77nqT+8fcG8ZgUyKTzDtoQJTbxlJcnbK9IqBP8L+v92hf8AFxaozGNpqccOLED/n2poNaQ/1SW5Ugd5z6ytOxogsoFj9QWh8rvzcYqaJMJdfpOzkiG2/Br7odvkYoXjLBqZiLKmU0ZPPw+WmDupOJdkubBzn1LDnSIrJVYiQMa3Gd0Mo0WKuFmUwT7OmuN5xKcVz3KbvHbh5''@;'; put 'put ''nsoZ0jtlAdn2Tr+B1WEQ0GnhB8jdNiqVWaLSDfSsjcNcDrf6S0u4b3GpZQPD6bPX0E23Pb1ZfirIdvHGsS6DmbWaUjhhj3vzCeG2++PFyG3u3Vag9rvD4L7F19U0tMTbH9rnBwIdZPund8/YT2VkE6xs88OxfXEUClGfmTzq9fN749gXrB7WnynKHwTiF4eLzwXCje7VZMn2rvWnDEMCzfaxluOV''@;'; put 'put ''CKtYIYSwhOHh3PT5t7f9WwtYIVhVKVZ0SlStB0vXaFS5clLFKrj3Et2dedcilGzlNnLYywd5N3IYUK9HoDsB4SnTqtbc1ZsHtqiu5hC3aH3UQYsqg5e+7OMB0o3s3UTJVsa093PqZyKE7zC558BQDXJbW2CxmSCl3sfa1mJufc4x30QJbvVZVLiQ6vAq7oHYoocV6v0rTOY5lxJlcDj/eazmnU61''@;'; put 'put ''ZMaQLQOegFKMvflJjd92INv4MYMeOYJAKPFwbp0zo6bh+RwxLykz5jVUnUMEuRljfAQOueAmBQPpdoc3EbKVRFugmvMF4leGrmZN5nUrWFtrIu9fMNJWxroFLI8GnF71VI26rjKstiqVOgrs1spQL00p+QPnzfdNq1rnSWqiQOdegwCQba9xFRgaikA3smVW7Yzahvp8QWphY6XTYugSk3tnOdXi''@;'; put 'put ''juxYsNIN7+F4yXbJknF02wHNV/uslrn27V/GLUMg9IZA1k3X1WxYn8x8mrd+9GEKx7O5YOeEVobigr2iUP2iKaNWfZeMDujbOxAAsu0dfuqTVsqchh0DxzKODHcJWQklW8HF6ZkoOpBpZ8g0hQQZv8eYjFeI3u1GrB0HSRT+AJowq+HArebA3eVwW5yZHleq9cVDtv7sXg211zNk3Wi/4WxYbXsJ''@;'; put 'put ''Vq+5tnZdxBCjROyeW1d1Yalz37ltxs597f1dSnmDlzdPmDJq1b8SkQt9eg8CcZGtigseNkXbJ0gG2GLBhJDBtpbhDzYLhGe0x9wG4mv9zRD2x8v5fydcYN4Zeyvfw7a4hWD/UPj8f2fDvPziQ16YhIuBDcT8Be0MdpF2SZuCv3eMIyRGEHfEnYSTHWuKPVnOlCDcoY8iab9//FgQLCjFWEYTEhUT''@;'; put 'put ''SnXqGOCgJVe1GNs7CqB3HaoQKil4jTHPGxayWoRgjGNuII4shDmX8Yq43R/y54A/Om2VIZuiPUbT7oOOPu1+kp91vNfuq6A/pL+C/gzKCJ0Dof6Rc8L+nt0nQX8E5oycYkhI1Pw2SHukYv+HiDq1ogOKtIGTdns2l3T4E/Ebp1fVpa2UXrYf6wUNVQd6rNZHnUpJDWlP4mG3iSDFawnfrYbl/ZfA''@;'; put 'put ''FqNIUbhAJibM4DL2XYblYqRiQXSM/JGrCsEyNFsG7WKKBCYEyzhegQnvjCfiBAl7nLQMeu58ZgLPZjAeW/5MOMGcdvbHtudUzvQuNrOuz4/sJ9tLV/vnV/uzT5Di1KnjSB9r+3UkP8RDtgvX/WgsZ+ZThJDCoDyv1bxLxerlM2vfWpYOX8vzeIvwZylWj+v6DNBPKMFnTx616sN06AWZuYFAXGSL''@;'; put 'put ''Ncd+U4e/8m1umJ7/Vjz49nmPtJjbfhP2i4ZM10jxEdeOWvvf/Eci/AgXv33O023mzvOCn+qKa8HEkStn5jsec9cMPxkr2kKKlaPC1c8lSFnq4+7f3VD79hf5hMV9dTVlHkJ2hYtJluOMlWz9dY+xZyMlyoAgPh6zaYdGCsfOrK3fkE7MbltbO6BIcz1ucu+P7XqcStknHqvpymlVq99Mp36QnT0E''@;'; put 'put ''QuNsZbrGiLeRCVEGwflC5pz10Mbz/tJsbLs4EtkiCx80/fi1WzJnUW5pWtgwejrCeEHQqmJ90Evu4uZxkw9b6U+Ekc8vuQ06t6HyCs69tzmU4vLQsTJuGjotfNRQjd/OGL5mZz5gIWsW+xT35kixr7GS7cLGMa8hJE4KYmJxs0WGXF1Xsz4jl+vmv39KAW71LCWYdCFcxs0WlTgvmFK16uV88BeM''@;'; put 'put ''oSsCQLY5PCMeeuf8x5t93/4KyDa8k+6sr/6egdh7wXNMk/l2OEXZUZNHr9yRw25NqWm3bxxWItrQDZjQiVpIgn55SoI5+e5/pxJzplSuujulirMgLEC2bbLEXrc6wbGubBetO+lIw2p5235DWAh807SqNTdlMqdxoO4xflKl+k/tUBbq+7S0+XZOmVq1+pEsQAwq04hAaG7kLT2tbHUF7ztx5Jpt''@;'; put 'put ''abQHRNsQePjdX/2tybslbJIGWfXHosaB143a0GerMN2+8aQS1ef7AmPiX9nJg16FOs++ZtQrL/S1ibSwsfLQVl/T/YX6gI4VWxADmYjBYG0fOdTyK6ZWvtbQW7GR/kaeps3JkO3Cxh+9jhA7MYgBRqTBp9HTrx/+elOmcZn/ytEFPl3c7dLKL7HrNpi7xUFLxk2pev2VTNsE+tKHQAfZPrj+jIGM''@;'; put 'put ''kq+BbNMHdryS//LuhUv2eDePi7Syxdg6YFrVuq3xys2n9netO+VVJnwnB8ek0YKX+C4xbvJP8n8rOdSPizcOU3d58ckO7LoTYXxY6OfyprJGClZalF07vRdmMUp2ZXvn+lOPVjCpN1ibv/i8xQ2PQvSzp1Wt+Ue2nolZApGidTW/sph5v0odrqAdMsaXIHX+zNr6WdmyDfSmFoEOsr3//bP2wYbY''@;'; put 'put ''2hPZwgWp1IIfTdqj7168tKfi8UC2CN297uSLLWH8JYhlsWPQd8J0V15e8dKX0fDN18/9pETdN3BkXe5QispCx6lgRzOhdD73isW9acu9nWzlytZPlqGvaGe2d647ZQUXvtOC/VTifNdttYyJNVlFuuaLPH+/Ze0PLlexNk9XCjtv1wvOHbTkVkXBt185/CV3uvSD3MwgAGSbGZwT0vLYe5cu3+n5''@;'; put 'put ''7MxIK9u+vo0scZHF45lC/2Mwd8fNUodScu/2tuYps05YYyUEfJ50mt9QtQ9BZBbGdHzYOcTZZqroc00nfbQ3lIKT8cYYGV8lckHq7ndPG1CE+v97j3dzZ7EHgWdMq15zR664e279yOEm8/3dpZbuE7RJHgFggZebyLoo218KcgWn3moHkG0Oe+7xf1724g73f8dGItu+fhs5iMud6068iwtrcvB3''@;'; put 'put ''ih07VayfOGHUi30+UYBcNd2+duQJAvM5DqVgZLi5pCuFr3HGbxq4pXB9LufrbU/usVkNuQgWHFNPK9t71p9yssdqfSlYflAI8R1hzmOnjs6tUMbZb/5gNBfsyUJtwBA74TqUoqd9zJoEpfpy+A92FNM6yPaRd8cNMJj5DWwj544zgWxj88W9b40Z1OrzvatSrSM7j0YK3scEnTpx5Aq40Pc/GGet''@;'; put 'put ''HuMoUs1TOMJzKKHfD0VW1gLWSMEKxNlvp9Ss/iQ25DPbKhmyvXvdKeMt4bsvaDHBSuNeLztx1glrvJkdRXRtMnlJi2/HyyWO/f7P3tpjNr2tKfv8dGb1q9ujS4EWuYYAkG2ueaTdHpkg/ZCyw5btdH/aJTSg89su5ybnB19f27A5R4eQUbMWNv7oei6M2fb8sy6l7Am3pV4xrepZSPbe7g0ZKkS8''@;'; put 'put ''2uUOpXiaxb1dUgfKJgQpuzBBf2Zc3Dut6o2cunyXDNne/9bP/uqx9lzUQbZEnT9l1OvXZnSSxqFsbn31fhSTvxFMRtu7CSHe5YhcNLN6zX/iEAdNcwABINsccEI4EyTZHtrv8OXbWz85PdznMvQHyLYTGVn022O2vMyFOCH4LhfMctCSu3YWuX4766hnjRx1dVbMunP9iQOZZd7EkPHrcPmWObc2''@;'; put 'put ''YUJvL9TaHr9y+Ds5cTknGbK9e90p71jC15EmkSD11FwPrVnYWFnuY9Zynbpq7ZOk2bvtC5fe75xrqxv/mZXJA0oTQgDINiHY0t8JyDZ+jO+oqzmGY/EiJcoBwd6yFqlLLb7B7eB/7g2XgOIfdXI95q0dcTylzpsFEtXh8i07SNHrBvLMcyp711w5/J1AsfQsvST5mIx9lciZ7QNvn/WJ29x9uDTd''@;'; put 'put ''ZN42lWo/mlZV91aWhhKzWvkFQyX8MYLVLjtcPrN1K6GOC6+tbliTyWQcMRsODbshAGSbo5MiFrIViB0yo7rxqxwdQlbMmreuthpZ5lKF6p23Tv2W0FUqIlN3VdZ8MAvPkvUN4NWOwN0rTtON4ubTEca3EkyPCAVGfmGh1PkyYvyP02pWf5At4BIl23tXjylsIq1bHGpBqbTdYG3NRC/83rW9JEGP''@;'; put 'put ''zDbVZpiP6Erh2f6yHO0vWThBVwrGT6usfw4IN1uzMna9QLaxY5XRlkC2icN9x9raEwtdAx9tM3YMtktRifNbxn0PKJTcO6li1a7ENeRnT3mei930dwjjCaEFz+WIMSLfUarfYTHxcDZuxSYa+iP7KYhvolT1p3lkzGpSVcf3elue9/n11fMIpjPshRjkFweVOK+ZVlX3KBBubj+XQLY56h8/2ZYd''@;'; put 'put ''vny7O/KZLaxsIztvXn11rcGan3Gp5d0uASGENmrUOVmlOzZme2s0F6ffvIaqoR6j6V6XWjImGCpjt9Ni3o8Ltf4zrF389Uxm6kqUbGWaR+Jxf6VQ1Z8wwmSe1gKtaNikXphF69Y3j1mgUdckSjQ96BOZ3tFFy6bs9hlP5eLt6lyc49mwyVaIYGx/Iei3EPqTDTd01xkg28OWbe/hNrJBzKE3VK7f''@;'; put 'put ''lBsW554V/j/OwnhRU5w1odbJwvQWN9c4ievKydVvfJ571mffornrRh3JTPOvOi0YLgvLhlrkNlveK9RKxu8ddfzbmdiaT5RsFzZWOov0A95p8W07MjgGFevnX1356jPZRzl+CxY21pxqMnOpPb2jlCK4eMxCbBIkv4gf00z0iItsVa4NvrrmtW8yYVhf1wFkm5oZIONLncQ9SxAxIVyaP6/VvLtI''@;'; put 'put ''22+OT2n7a76UoksNcgEpsz74vubYVXARE6Ys5dcvXP1cBy15EjE0a1L1irTeHwiQrU9W/Yk7XeO9G8Zu9LHmYUFsnErJHYRsvaG37mzMqTvuVILUboRbqPZ7TODmyVdmobBCKuddPsoCss1RrwLZptYxc+urizSiPyIQ+3m3VS4Swm3s/tqllM+cXrO2V652UotWd2nyEpW7aPdlQrBbdaWgI39v''@;'; put 'put ''sGXgEpXjHiTU29J1npsM2T688fyHmoxvLw3aq9OiOuRu/cnEE9a0phu7dMmf82blsZSI5QrVO27fy9pXBKsNXDjPn1b1ck7FSacLh94iF8g2Rz0VC9lyCx868/i1fTbhfryukxVWHHUjLmDImu1Uig8M7c8FZw6l9BnBfLdcXfXqx/HK7wvtb68bdoDbar6nVN+vWxpRWT/XYr7/FjnKp0wYsXJl''@;'; put 'put ''qvFoJ9tNiZTYu2v9KXMY910ftKnUMXiTz+OpGF+9rFdnY7q9fsRRXqPphWLHvkPteKvE1aAI8avxlf+AY6ZUT8QE5QHZJghcursB2aYP4Vkbh7mcXvXXgrM/aIprv1BNcpWmK8V/xZjPvbriVfgyEwKQ/0tLw4gjBeMP6WrhqO5fWphlWG3vF6r9Lp9c9fp7qfJkMmS76O0TD7G87vcp1QqlPTIp''@;'; put 'put ''jK4UXDKp4h+Ppsq+bMlZ2Fg5GCP9BYFExza5tAUj/AEl9NzJo1Z9mC3bQG8nAnGRLUJ0SK6lcMtXZwLZpt+zcmtZRcpVjJvXUUXtF6pRJj/QqPNBhavz4a5Cd38EznOLLzV5240FWvmg0BYW93k0WvioMH03Tx1d922yHpVki4T3y3Db2FJ2T4UIAoXa8bsurdSf2EK+CtT+j/t2uC/P5I3qZDGI''@;'; put 'put ''1P/2uuoDkDCWa4rrWHsbjRa8L5hx4dVVr/87XbpBbmwIhJKtLESgRu4KZBsbrMm3ArJNHsNYJcx7s+IwQfFslejnhuujEOcnBKM5ptv7wtQT1uyNVW5faXfb2toBCrb+KBC/OGx8rkDfKIrjLmooD06o/fueRHFJhmylzoWNJxxvce8/FKI55O8GczcV6gPOmDRyxdpEbcqlfrKkomG1vexUS0fY''@;'; put 'put ''7fKaLd8UqCW/vqZq9apcsrev2QJkm6MeX7zxCrVAwc9vd38csRABnNmm1nkL64+vdVt7H3FppYeGSubCMglW/q0QZY6u7H2ht95iTS1indJkKb95DRUVBbT8WkO4zwqnp1Qf8n6LueM+r+X423U1L7bEa4u/eDxt+VJTCv2ZoEJf0YrHL1kyjm4Zsv0NjFBHcn+M6DqdGadPqK1P+EtAvONIZ/u7''@;'; put 'put ''19YO8GH2OKXqj+16MCLfcI4un16zekU69YPsyAgA2ebo7ACyzY5jAreWtUkW902npPvWsixFV6D2W2IS67YpI/6Rk6XosoNcQOvijcPUZsP5UwWpCwTih4SzxamUreKI3bBjxLB34onPTZZspS3zG2pPR4I/T4miBW1TSeEtuzxtN886YY2VTexSpVveSXC51UcURT/PLtNjNu8s0EovnVK5+sVU''@;'; put 'put ''6QI5sSMAZBs7VhltCWSbUbi7KVuwcUx/Byu402e1/BJ3pqPtaOezWvc4lJLHKOELJo9a83V2rc097TJrE/X6rtAV19RwpfwU7GhSqf6UwT2Lrhn12n9jGYEkWw9t/sKhFJWFax9tZSv7yHPmgj1lL1CinBqUQZDahAm96JpRr7wQix29oY0/vpx6F1GqXEYwVYI2y3zKBWr5dIe69ynYncmsJ4Fs''@;'; put 'put ''M4t3zNr8ZKuhZT2V2INt5JjhTKjhXY0/qjK4dzXBihaOcKVQhegfC85vcWjO5VcOfyknStElNNg0dfKX8mPGHy1uXKhSh/8msP2FEf1OUxx3Gm3uB6Kdh8vczdwtvkyGbKXuRevGHNRm7Gq0p/JsNXZtKdIH/Xhq5esfpQmKjIuVuwx7vcoMjMiNwXNqaYT/tj0puG23z5wH6R0z5xYg28xhHZcm''@;'; put 'put ''INu44EpL4/nra49GFnsrmB9YyIPJMKtc+cerRB/0ktdqWqyre9+EFUN3d8ytrxjloEVTfax1bLj6uaX64Hfcxt4HsNf9dKREEwGyRV86lMKEV7ZBy+bVVVxDiLrAvupzKCX/NLn3smtGvfpOWiZUloTOqRs5Dgv2Z/tZNxfMdKjFf24zmm6A9I6ZcQyQbWZwjlsLkG3ckKW8w/y1tUcjwt6mRO04''@;'; put 'put ''35NKIpGuPM91KcVPCSxmQ3xueHfMq6s8lSNztkqcP8SY0NBWLrV8tSV8s/hOsSE0JEduI3tp66ZEQn9C9ciMWE2urQ861eILCKYddhBMP6aEXnh1xWsbUz6hsijwtrXDqy3uW1KolXeJK3epZSuYcF81ceSrW7JoXp9QDWSbo24Gss2+Y9qL0b9lv0wTtCoS4crP3eaebcXqgFm+AvoEFKzv7kdJ''@;'; put 'put ''dN7SljNUpM0TiB0U2kJ+adGJ62VMldm7R1b+O3iJyn9BSmnbnEhu5HCzqf38djbGZBqxEX+bsfubArXsN9Oq176a/VmYOgvmvzn6YA/f+UqhPuAwu1ST+T4qpCVnTKx65bPUaQNJoQgA2ebonJBk61Lx8h1tH/8knIkyAw6c2abXefMaqn6IBZZkGzb2XCUFzxJC93cbu44LXf1Kywim/yGC3mah''@;'; put 'put ''1uXTqtZ50mtt75Mu42YpMq5ngl8ZbrWKEd2hE+c9mJkPjK9+dbskW0Nxb1Gps9vZrxx9LBekQlGSF4kUtPsBh1b8S/uWso+5tzvU4omDN5cvO/fcZ1nvQze8xTL5hdfcubrYMSjkpjj+r44LzpxY+fe8ObPONZ8B2eaaR9rtAbLNvmPmras9jnC+nuDwZIuRdotVgOeqHlbV6t31gFMtOghj0q0U''@;'; put 'put ''ncmNtS5SNmlX5cgP4gl1yT4CmbFgTl3NIaa1589OtXR0uC82QvAtFKvzKKfPe1DLfxWiu8JZlgjZBuXMr6++FCFxr71+rzyLV4h6a5MPz8mXsCA5XpnfGmN9uUrULtmmvGbT9kLHwJ9PrnilLjOe71tagGxz1N+SbAtVvPw7WNlmzUML6mqGISLWRSJbhejzJ4969VppoIxtLPDpl3HOfqtSx8BQ''@;'; put 'put ''o+WFFJ0W/oWZ1q1Tal/fnLVB5bDiW9cMPxkTMVujjmPDYV7mOODjPd7NR0QaQjJkK2XOWTv8HJU67iOY7mPX4VTKHm013dfOrH61VxctsI9J1vi1OH7wf2fU59u30DlnpkacF+2urH4Gvhim9mEJIVvyjdvcC+kaU4txQtKAbBOCLaWdFjQcPwIh1mjfXrQrUIjrjsmjVs6wv3fv6jGFbYpnASHa''@;'; put 'put ''ZfY/YsE2/tWD1n8WwuqTk0etbE6pwXkibEHjmCNMq/kxjRbKovUdf6OCw4t0Xp4s2Ur5i+pOPMQjmt5wKAVdqkK5jb3/LHaUjc23mOpF68b8knP2mH1HRgjBkeD3t1SfNBkIN3UPFZBt6rBMqaQA2ZIXvmv76LRwguHMNqVwhxW2sLF2JBeiISLZUufCyRX/mB6u89z66u8RhG6jRDk79HNZik7B''@;'; put 'put ''2gcCidlTKldB/dwIrpzXUHWOgtQ5CKMuF3oika4kW4GaSpMtnC7jcAlSn2HCGGk3jSDyscXMX82orc+r0KAFDTUXFqgD7vRYu8s7xyuERov+wgWfCl8KU/O3Bsg2NTimXAqQbcohjVvgnXUnVFjErI9EtiouWHR15YppkQTLsNyFDWMq2sydjxTq/Y7sRrqCcyZYg0pdV+ZTMoW4ge6hg7zAVKAZ''@;'; put 'put ''VzDmuylSTuTgSleSbRtlZVOPXZ50sQiZAUvx+p4nhPzIbl6rsXOLQy//2bWVde+mcpzZlrWw4YQzfaz1L7ri6hLD7FCKnkY+MSGZAhLZHluu6AeyzRVPhNgBZJt9x9y57oQKi0cmW10puGviyBVTolkqCcOleH4tELo53HmuP9SFFv3FomjOdIh3jLDLUFluMH4jRuLScLeRJeE6lCKkUMeRVw5f''@;'; put 'put ''+nE0n8TyuTwS8GniPoTRhfb2XrNlm6o4LptZ3fj3WOT0ljYLGqpGmMz3nK4UHmC3WaHOemyy86DMZHKeBLJNDr+09QayTRu0MQuORrYaLf7TpIqXJscqUK6WkLt5Dsb41+FK0bnN3d8WaANuobjtycmjNsB5bgiwcqdg0brKoV7T95hDLaoMh7vgfLOuFV04ccSKOoyRiNU3kdr5V9aqeSMlyg32''@;'; put 'put ''NibzuQlRp8ysrnswWR251H9RXc0hzWz36iJtQBfCJUh5jxDtjMmjVkIe8AQdBmSbIHDp7gZkm26Eo8uPRrZOUnzf+FEvTYwuqWuLhY2VP2CczAp3nssFswii/8IIz3HpLVDKLwy4MimGUdx8OsZUfnHpKAYfbBpMisE4nzWtZvUH8fontL2/fGB9xXiB+O32hBoyNEjFrtl7q16/bRZGPFk9udJ/''@;'; put 'put ''YWPloUIoz2BMjrPb5KBF7wsufgGxuIl5Csg2MdzS3gvINu0QR1UQjWwdaukDE0a8MD6qoDANZJL4Fl9BpdvYdV+h3v+o0CaMWyYTxlqXWjx58qhVHyaiI9/7zH/llAJc4LnC4K2/cyjF/ULHazJPq0KcfyTw2c8AACAASURBVOZIn5ts2I6fcNeOOMtC5gNOtWRAUJescyyPAEwubphW9crufMHc''@;'; put 'put ''X2GJtKx2qIU/7Lqi93xeqAwYC4Qbv6fjIluVa4Nh3z5+kBPp4U/XqNIXt7d92FEKzC4HbiMngmp8faKRrVMpf2j8yGWXxye1a2t5LuhRzcuZsK4Ld55rWK17VVLwEOFi4dTRdd8moytf+857a8wgjeHbuGAXI9Q9VMhixhcqdczVfOKpSEUOYsVmfsPISsMyn3OqxV1yDCMkVmHNeeHU4a/kjY9k''@;'; put 'put ''hi+d4ucRImPs+BiWZ7Ouui6dWrnm9Vhxg3YIAdnm6CyQZFuk0he3AdlmzUPRyLZA7f/IlSOWXpoKA2WoEOe+3xNMfhbuApAs5Yc4noMIWQ6hGOERv72x8seIWbepxHlsaHyu3ClwaaVrOOM3DdxSuD6ZFIxz6o4bZjLvC4XagMF2SwjSGpmCz8+nS25z66uLFEwfxxifaR+rz2prcmllF1wz6rUV''@;'; put 'put ''qZj/fUEGkG2OejkWsjWIOfSGyvWbcnQIvd6saGRbpA149PLhz12cyoEurK8ejqljDuPGCaFJMeSWJUL0HYrobJfe/CqU8uuOvMyMxDgZS4l2O0L84NAWFve5FaQvJ4jcPKVm9SeJ+u62upGHE4SWa9TZJaSLYPVdSsjP86nqk8RUcOVuhNEl9uQXBnM3O9XSSXsqXnsyn86sE50T0foB2UZDKEuf''@;'; put 'put ''A9lmCXib2mhJLQr1QY9/c9yRF6c6y468AetUPL9g3JjlUIu73AqV5skLQE61bAli1pxdPuOzfMrbmyqv3722doCbmDcIbl6sh6l/SwTdqSj6Imqxh2SRg0T03vLmDw8zrZalpc4hP7D3V6nrPcLJL/PtXPP2N0dcjwj+nWYrBGFxn0dXim/cU1Ry96yjnjUSwbGv9Okg27vfHTdAY8bWntI1wplt''@;'; put 'put ''5qbFkg/GaZbV/4WetpEFYofMqG78KnNW9S1N0ci2SBv05FYnvyRdf2TkFh4ldCLi/DpCaGko+l6rZZdTKXuCK/SOfNq6TOUsk1VudKLcZHDvuHDhVoybnyvUdYfmtR5P5Dx3YWNlucXE05RoJ9m3rg3m+dxJS399TdWrjakcT7Zl3VF//Ale1vSM/ZKYtIlztgQ5lIkzhq/ZmW0bc1U/kG2OegbI''@;'; put 'put ''NvuOiZYbudgx+Kli3fzNuWn+Rj+voWooQmIOEuinCtGcocioxPkpFmQ+9rqfToQwso90+i2YVz+y1qX0m+yxmsbaK/sENReq/RpazZ33NfvI87NOWOONx6LbNw4r0c3Suzg3L8QYd1R9Uolzq8HarmmpqluWT9us89bVVmtCeY4jPqgrTniNrqBfTBy5Zls8+PWVtkC2OeppINvsO2Zh/ZjhHFvr''@;'; put 'put ''IqVrLNH3e7rIYV2UbrINIiHPcxXqmm9wb224IgcY4XcQJn9o8vLXYGs5/PxZ2Hj8WYxbswkmR4SWQ2TcMhSivyy4uLG5+viP4jke8Ce/UIz7CKEX2eV6rZY9Gim8rLV67fJ8ItwFddU1hvAsdShFXSokKdixSuXigkS35rP/1KfPAiDb9GGblGRJtobV/4WeQn9gGzkpiKN2jka2xfrgZ4od5q8z''@;'; put 'put ''RbbSYBmfu9en/4pbvlt0tbDLbVj/dp6wTIdS8rTB2M3NlZVfxEMYUQHJkwYLVo/pLxTrUodaNNXk7m7lEAlSdxGCHjF9xp+mH792SzzDXlBf/VuO+B8UojmC/QhWWi1mzDngm0Fzk7kFHY8dmWh725qRlUWO8sUm93Q5s3YqZXXMbL5wUvUbcMRlcwSQbSZmZQI6JNmaVr/lPVX9AbJNANg4ukSr''@;'; put 'put ''ZyvJ1l2856LJh630xSE2JU3lSqpYF1fL+rnhznMNq22vQgsf1hibO3l03Y6UKM0zIQsbfzSYYHSLxX2/Clc/V3C2WRB6a6sPPxLPTsEddTW/Zth6QCF61y1/IWY3V639Yz6tcO+oqzkcEbIUY/x/9ukhb2UjC50FtZs7UQGyzdE/IAGyLV/WU/F4CP1Jr/MWras9jnG+PlLx+BJ98NNtxXsuzgbZ''@;'; put 'put ''dmwtN1Yeagk8nyI6FmNCQxHRaMHnnLGbd1dWPgGr3PDzZX7dqJM4EvMVoh8Trn6uTgpf93HP76ZWvvF2rPmW59QNm0CxuiCUcDXs/MNOr3dBvOfC6Z3pyUlf0Fh5BGfiWYXqXQhXo4Xvc8EvmDxqJWRAQ7akFnAbObkJl+re/gxSGlq2vfWT08PJlhmkgGxTjXpXeXc0jj5WCLYhEtnKC1Luoj2X''@;'; put 'put ''ZJNsgxbPbzi+ss27fXGxc58uW3qBz4VAiL7nIPpvJoz6x7/Si1rvlD7rg+9rzj3FlzDuu9WhFNvqugbGI3NWO2jJY6Zi/T7WLFG3r/3hmQhrj2vUWdSJihA6Lb631SS/va7mxZbeiVZ3qwPZpsgyhPDx9k85Y18rquMXU0a9Xp8vY010HLCyTRS5NPeTZOui7Lkdns/OiES2sI2cXifMX197NGZ8''@;'; put 'put ''YySylXG23uLmy3OBbCUSswQihetqT7ZM78Oa6gpznssZ50adQp2XT6ta81l60eud0mX6TLdmTWTc9zt70YHglxZ5iYpSxz2GSm65fvjrTdFGKW+Su307Xyl27Ds02FYIIQzuqVedBWfnU6hMoCQh+ivC4hw7LvJIQ1eLL5ha+cbKaHjl8+dxkS3WHPvF+q0un0HLxNgk2TpV9uzOts+6pEnrfGA5''@;'; put 'put ''Nzk/+Prahs2ZsKcv6pjfUPV/GOF3I5FtgTrgkW9deHy64mwTxVz+0WtWWmZjRC7pThgIecymnQVq/5s4ok/lU/L8RPEK10+eRbZae+4p0vuf3P1zIQzL+6mmF10+rWJVXTS9t7x59MGG1bqizLn/Efa2Oil43ce9F0+remNrNBm95fNZq8coDsWzWKOOS7oQLnM360rhb6ZWrn6+t4wl1XYC2aYa''@;'; put 'put ''0RTJ869sFb50h/u/YyOtbIFsUwR2BDELG0f/gAv2TiSydWnlD25zKpNyjWyDw7lnw4n9DMu6B2F0fugQueCszdy1tUQdNJvQtmegfm73SSCJo0ixjjKEsVhXnBWhLRg3DbfV9E+HUjrxupqGjT3NxtvW1g5gfO8LBVp5lzq8e73ffliuDT47mdSR6X0K4pe+ZMk4umm/r6cihG6x38o2mbdNU1w3''@;'; put 'put ''Tq1cvTB+qb2/RwfZ3v/+Wftgg3/dUwYpWNlmzuEBskVLd7g/iUi2sI2cXn9E20Z2KCX3Thj54qT0WpG89LsaTzix1dz7oFMt7pYrWJ5FCiHeVhXHVVNGrYLz3DBwy5vfuuK5wGAtfwwtqi6by5SFKnb+1RDG7OtqGr6J5DFJuG2+LS/2KzhwlL2N12j9QNOKfj6jas3HyXs7NyTIkoRzGyp/gYT1''@;'; put 'put ''gH13RX7J0xTXXT6HuHHmMa+25Ya1mbEiLrJViGv/yaNWfp0Z0/q2lrv/e5rez3PQi9+1fnhKpJUts/AR1x6/9r99G6n0jT4QZ2s2RlrZynq221ubro4nLCR91vYsWdYnJbo+zWPtvlRTXCHl4RAymLvFoZQ8TjhfOLn6jc+zZWcu65XpMzEWFxtW2+9camm3+Fyf1bpHIY4HsKkunHFC+LSF8185''@;'; put 'put ''ugC5Cv5KqfZz+1jbjF1bC7SyX06rqnszlzGI17YFDaNHK8TxLBe+juQXQgiOkHhdV7QLJlWs2hWvzN7aPi6ydan9xpm89R1BKUG+QGihhVW/DEp4h6wgGBbu/l6gbaBPtl7UDG+XtIepRATtCrazvxePzQo3RU8BmLpNmEVU7Nen6YgJUxTj0tICvd8jW1v+8/3wZCu4QhxTEBb/wIxxO9bh8I3k''@;'; put 'put ''i2jjybavotkX7XPGzQ5/yraKICL4nv9nDXd8LkzWnmov4Bmd0rEeq2V+uGxN8vNS5+B6w/BcyxjbYREPZlzOna4et+MXaks426VNoe/bbfQ/c7YxKX6dnS/L9hzqluIfD1YUji2LW5wIrtMinSsTLGFexYSvI7VgUIIkDJUWPEKZuAPq54afXfMbqvZhzLgOYXx5uDNxWT+XEm2BJawnrqtp6Hbj''@;'; put 'put ''+O4Vp+m+kj0LKdYn2DXIs3RdcY2fUd34XLR53Zs+n19XU8GEsUxTnPva7VawusYS9Jy+cm8gLrINbDlxFr+jZehBrr1kkWlpV/di052W2j8P/pzsWHrS568vHMRKUKJ2ZKGJhB7jpk/4x5HaV+q+DdnHm3o7kxl1ONDs4yZY1cPFXdp1ymdC/r/rnLG38EtMHZzdfd35ZUHu3XWdXna98hKsbCsU''@;'; put 'put ''ohfIcclfQ9p3GE6x8m/O0c20SXtp8k8yn7QjGb9mqu+CtbXfd/PdfypQ+42x50QO6m8z9mws1vpfs+/X/TaEZo6S58FOpW0CQvhWe/1ig7U1q8R5fUvprodnHfVh3lTRWdhY+YNm354Xi/WBB3X5csiMtxxC+WlfSLwSF9lmahKDHkAAEMgcApFIV5byK9b3e8nH9t7vUPbWQ/3c7j6Rq1R30c5T''@;'; put 'put ''CFZuU4jWJamDbC3r5xKsv4gYv2XG6LpuyR1urx9+GmPscada3C8oXX55w4LciYl547SqdZ7MzYT0apr3ZsVhiuJYijDqEguuEH2jQN4LrhmV30diXW4jq8zY6jH3qumFHKQDAoBALiIQiXQN5m5y0JLHmWLMmz4yvlzBuTjOdNh09/qKYq9JbubI/I1GC4pDdfi354lzseVw3B4an3v7myNGCyxe''@;'; put 'put ''0pXOfjJpDUL4rxibk/KJcBetrd3Xg9r+7lCKjrVj1Grs3FzgHHTy9IpVn6bDP7kgs3Nl23DWPkjlWzzWXi0XDAMbAAFAIDsIRCJdnRZ+6bVaHlaZ+HNf2PZLBP05dccNc+DCySYyxnXLjYwQKtb3e6fZu31Bgb53qX2n4NY3jzlXpQUPKEQtC+qVhOtUSx+iBE29cvhL7kTsycU+d64/cSBj5jMY''@;'; put 'put ''d802JQT6inN23sza+g25aHeyNnWQ7b1v/WQQQepXQLbJQgr9AYHej0BP57kYkX9igWY79cKV+UQCqfTavIaKUyxm3aJR5zCCaZec1bIyk4odL3Bs3jh4y8BPg+e5c+oqhvmspudCzzUxpi9SrF84edTK5lTamE1ZMga8zdf6mKo4fmK3g2L9aySs866peqMxm/alQ7eNbM/cnyD0GZBtOmAGmYBA''@;'; put 'put ''70QgEun6L4Vh9A7i9KZWE0P93DDuDdS49Z2GMb4FY3pkaP1cGZ9LBPkbU7U/XjdqjT+kclFdzSGC0mUIoaPtImUsNCHk3KmVazb1zpnU3WqZ/GLLkB13YSQm2j/1Wi27VFI4YWbN2iX5MlY5jg6yXbxx3AGMez/2Ws1dy0Ll02hhLIAAIJBSBBi3TF0tfJQb7BYopxYeWnme2+IzpyHEJznVko6L''@;'; put 'put ''UMHWFjO+RIjOdlvKU7Ia0Jy6EYcIzl9wqIVdLlwpxPEOo9a5U0es+iKlTsyiMJnPW3nzqPt1pfQ3lCgd94UMy9PkUEuv3G9LyXP5UgO4c2X7wbhCl1d/AGEyCCMZdcwRwYpCEVUxIQQJTAIlvGTQACFEYIwwIQh3DWsQQoaucCHjCrgU5P+5M5Yxkl+7hmFkIEQEd4TYdDNJCNZzKI1/jN1fojNs''@;'; put 'put ''xx/BYy/HxQWPKBMjiU/7xxK99l/8sRo4ACPnXTEhBOP2wI2gI7AI8UUkrIP62uOeutgl38visxdRtYzTSsSuwBixnJb+WK9QGbzDl/4AqsDnsnkgBktI7NsvqwiB5Lyw+0H6gMr/kKA/2r/BRsfQb073lwzIke8G50BAXsD/AnMZIM6FkJNBcIQ5978vAs0xQfJxk591jBPL4cu5wjEm/gdR/kuo''@;'; put 'put ''//32lz9sRVBFzjXGDS9HvCPkRCN6kVMp2adQ22e/7W2f9m/yhU/j6zWbthdo+8zeU1yyOFfTVyYyf1LZ59a1w/ZViToTIzKRErXb3RiDuT/GgvzBU7vh+ZI1Y4oN1feUSrTT7DaYzLdZI/r5U6vfXJdK27Ita97ainMwoU9SotrTDyBC1DudivN3+XBcEf2PQra9APoBAUAgYwg81DiunGraYIHE''@;'; put 'put ''LynVTvWYzUe4rV1d/gD2ZIwQaCOlzkv3Voz6D9TPDY/U3LXDRxrCXOBSiqtDt5YDMdv0OY7M3xNDa+KK93GF6qfaJRGsbGaMnTe9Zs36jE2MDCiaUzdqDOe+5+xhUFKtTgqeRR73JRNPWNOaATPSpgLINm3QgmBAoPcg8KcNYw+mhFzJmfEzg7u/l4zl/rW24I26ql8yKY9DOZLBSPadV1d5KsZk''@;'; put 'put ''PiVKt/hcf7IUbj5MSMEcjShzLeE7z67PazXvduDii6fVvvlSsnbkUv85bw4/liHjJZda1qVEJMFqgyzdN2XUqu9yyd54bAGyjQctaAsI5BkCd68/bQjj3ttM7v05xaojWsaseIYvCUOjroeRQf8wefTKHfH07SttZ20c5lJarMkKVa7TlMJS+7jlcYDPbP1PgV52j4uWXd5i7hjelXBbdzvV4svz''@;'; put 'put ''rWzdbauHHVHo6Pe0JXzH2MfrUEtXM+659OqKV7/sjfMDyLY3eg1sBgSSRODutacNQBr/rdvYc5mmOAsjiTOs1r1MpmlFnBOkcIKpUKiOfFar6r+8gQgJJYlQWbpS8uSATfpF+XLRJUnow3afU1dTRoR5o6o4poQ2kF9a/ld/GPd3HUy3NL/b5WMZRoQQWVSku3+fTxm+5q6vGKJyx1KE0Ej7gBXq''@;'; put 'put ''eI9x9supla9/lA4/pFMmkG060QXZgEAOInB3449H7vFtebJQ6z803ErWbe7d5rNaP3IpJYtVjlcRXWtr9umi3PO1QOgw/4h2Oz24WPfhZs3ArraCwQgbp1Kq/txgnmN0paAkOGyDeVp0pfzoqZX/yJuQlXS51F+Wbu2IWkzIXSp1/DBWPZKMKXHc6lL33JpvhOsU5X+1hPvELitcpfgDg7VeOqVy''@;'; put 'put ''da9KfgFkG+uMhnaAQB4gML9h9CzOvdPtye+Dw/IxTx3B5E4ulNU+S2mJt3SgTK7vKFIKFK/vGou7p8oV7/8KHcyaMmrNzfab+XkAY1qHIPMte4p3ne+z2mYXav2HxKJMEq5K9L8y4Z6cT+kdF6we079NfPtakWNQly8fpuX9zKWUjL266tVeUwMYyDaWmQxtAIFejsD8908p0D3oNpN5rw5dzTZ5''@;'; put 'put ''vv3IpZf/3mM6Vsg4z1QMVf6RtFT3OV7T9WiqZKbCrt4kQ24tC942DWNyta4UduwW9DQGjNQXmGZdNmN4+Hq6vWn8QVtvXV8xULXIEwrRTrLbzzn/XKHKL3vLChfItjfOPrAZEIgDgVliFnE1rHxUIY5f2buZzNOmEsftPs7vvaG2fk8cIqFpBhGYW1+9n8fY9WenWjxGpc6CaKoxIm9iRn+dT0lG''@;'; put 'put ''5EUytZU9qquFZ9nTX7b4tn9VqA84a3rV2vei4ZLtz4Fss+0B0A8IpBEBeQ54z1unX8K5+RATnYXtPWbTdxjR64zR7zw+C8ukGPDKdQRk/VyfaH3QoRRVRrs13uT99jOXs/yM6yrX97qLRJH8MOuD72uFu0vGc4xuV4jWUeu71dj5ta4UnHVdzVsbc9mHQLa57B2wDRBIEoGFDbXnG9z3Z406i2yi''@;'; put 'put ''3uXCvGpGdePbSYqH7hlGwF8/t3jvxabV+sf/b+/M46Oqzj5+lrvMloSEHbVaW1srVqwEkswkmMgmuFYL1drW2triAoEEBKy+bbq4QIAkIChql7eLWql1QUDCkpA9CO5Lbat1X1izzXKXc87bG3rzxoBCktnnmX9aP3PP8/ye77nkN3fmnPO4lazRn5c+qLe/Icuuixb7mt6MssyIpitvyPuOQOLB''@;'; put 'put ''3l2VOGevYkZmLDw/fltAgtlG9LaA4EAgdgQqG3xf1bjZIEuOYbYKzez6J6Xq7MW+phdipwwyD5ZAeaN3BGOhhQKROb1Xf/eNa3LjTSKUHywqqG0YbM54Gr+sIW8uQWQlJVLPsZcycTwhDpGrimdu+f+vcOJINJhtHE0GSAEC4SKwtqbQ00X9z8iSy2fHZJx9LLj5rcWTWhrDlQfixJbA8l05Z2gi''@;'; put 'put ''cL9Tzijo28rPVtalH/zALQ37VrId71je4LNO31r0//e3qTultGvn5j7zSGxn5djZwWzjcVZAExAYJIGKpsk3C2TeY4exjlAkmF5f4q357SBDw/A4JFBen/fN/zQi+QXF0llHGsZ8+hU02g845IybFnp3bYhD+QOSVL51mttwHNjmkNPy7AAydf2TYDzp5ombPx5Q0AgOArONIFwIDQRiQWBdfX5m''@;'; put 'put ''F2bPSUQ5zc4fNNsbnJJzWjLtwYwF23jOaS0gSjs87JsyVctNoZ/SV2unvv9dtxgxflFR8mwLKq/LOcdEvFaVXJl2vQ7qufOmnE23xdtcgdnG24yAHiAwSAKrm6f/1BShO+wwBElvc8Smlnpr/zXI0DA8AQisrisYHqLmbYLz62Xq6N4qZPWJJFj5M22Tfxyvv2kOFO2KxvxfEUxvt8ebTDukyO6z''@;'; put 'put ''4q1pAZjtQGcYxgGBOCRwT+MFp3aa7Y2q7OnumiIEZ0yYSxfnN6+IQ7kgKYIEVjXlnUSxa5nOQrMwwnWmw/Gtpdnb2yOYMiahVzVdcJJutr9in9HNuKkTpHxzYX7N5pgI+oykYLbxNBugBQgMksC61otLQ6xzpR0moLe95VJcE0q9zYcGGRqGJyAB66tl10HXBKHQd5bktr6fgCWckOTyeu8zlMrT''@;'; put 'put ''7YvdcuZv50x44kcnNDhKF4HZRgk0pAECkSawqinPiZGzViDW0ynFYMFlSwp2L410bogPBGJJoLJx0iSOUS1CuNvT3PLQfyHckT0njp7kwWxjeYdAbiAQRgJ3tk4cSjT+uiK5h1thGdc1hHH2Lb6mV8KYBkIBgbgjYP1OHUChN5T/LpQyuRZQkPO8Bfk1b8SLWDDbeJkJ0AEEBkmgvKXgHG5oTfb5''@;'; put 'put ''uX790IcOOe0bt/ia9g0yNAwHAnFNYP2eS1y6abxo8OCXLaHWVjeJKFfNz9v+aLwIB7ONl5kAHUBgkASqmqcuZkJf1hMG06dL83ZeMsiwMBwIxD0B6wzwe/dc+kDIaO/5ndYhpd1708Snb4oX8WC28TIToAMIDILA+j3jZc5OfiLI2mZaYbjgDBF6w6K82gcHERaGAoGEIVDZMmUp58ZdtuDhzi/W''@;'; put 'put ''mW1vT78uTG0jBwsCzHawBGE8EIgDAla/Wt7Z8cp/Goh3H2Rhcj2kIMe58fSbVRxgAglJTKCycdokjrVddolOacghZJCv3eh7PC5+RgGzTeKbD0pLHQLWWcjO9JNebtPe7zZba3EUQ2T80vzGV1OHAlSaygTWNEwd4xdtryvUlf7fD5xBj5p19k0TNr0VD1zAbONhFkADEBgkgdUtM9Iplv6usY7u''@;'; put 'put ''tmvWky2j4mu35rW8PcjQMBwIJASBVU3TsyQiXja5NsYSjJGkUypNKc7ZWh8PBYDZxsMsgAYgMEgC6/dMyQga+A0u9JG22QpEvrQkv/HDQYaG4UAgIQhYK5IRkpv8+sFxtmBVSr/u5okbfx8PBYDZxsMsgAYgMEgC1pOtSh2v+41D3Z/qrSdbWdCxJQUNcfEV2iDLg+FA4LgEyl6dpWR2tD/GhHax''@;'; put 'put ''fXG6MvrX12c/8j/HHRyFC8BsowAZUgCBSBNY1uBLk4n8GkLiZCsX44amSNLX5+fW/TPSuSE+EIgXAlUtU+/8z3qFW209Q92nP3ntuN9dHg/6wGzjYRZAAxAYJIGymkLHUKej0eDB86xQXJgGQerFpb6d1YMMDcOBQMIQqGiefI0Q5p9swVnO017xK4G8m8du6Ip1EWC2sZ4ByA8EwkRgXevF60Ks''@;'; put 'put ''80Y7nISVlcV52xaFKTyEAQJxT2Bl0ySvEKKOYEItsUMcJ30SMIJj5+Y8fjDW4sFsYz0DkB8IhInA2taLfqSxrp5DLDAiL5V4a3oWi4QpDYQBAnFLoKI+/3QNac/b238cNL2LUvkrc7L/9lGsRYPZxnoGID8QCBOB8gbfbILJwxgT0v1VMjeDArtPu8VXHReb+sNUJoQBAp9JYEXN+GEaYX93yhlD''@;'; put 'put ''rYswokFVdsbFXlswW7hxgUCSELD2GcqYvGaIQPf2Hy6YSTCaXepteDxJSoQygMDnErBW5ROMX9KZ/9Qj/wZMQ6LuixbkVm+LNTow21jPAOQHAmEi8LuaQsd+SauXqJJth1Soa83cnC3FYUoBYYBAXBOw9tp2am0vE0xOtz9wuqWhs2/MeTLmHzjBbOP61gFxQKB/BFY1Tb4QIXOLPSpotH/icI6Y''@;'; put 'put ''sHBi9Xv9iwRXA4HEJHBv62V/CLK279nq3fKw++dMeGxOrKsBs431DEB+IBBGAtYZyaZDbmVCP8sKK5AQElbL5+dtWxLGNBAKCMQtgarmaWVMaD+3BY50f23HNePumxJrwWC2sZ4ByA8EwkygovH8xQKjnr62JtcCijrkvAUTnnkjzKkgHBCIOwKrm6ZPNFGo1RZGCG1zSu6T5mRvDMRSLJhtLOlD''@;'; put 'put ''biAQAQLr6vMzkZLZGmIdZ9jhJeKoDZpdly7Jb+yMQEoICQTihkBFc4FPCNJgCxrh/krnoWDg5OLcP3fEUiSYbSzpQ24gECECK5uKbsWI32mHF0IImaq/Ks7d1vP1WoRSQ1ggEFMCFXUFozUUfE2R3EMsIYwbwaHKF776w4mPxHTdAphtTG8LSA4EIkPAaiaPuwKPE0yn2hkoVvxCiCsXeLdvjUxW''@;'; put 'put ''iAoEYk+goqZwiDtt+PNd+r7/9nY2dCyYd1FB695YqgOzjSV9yA0EIkhg+e7CUUbw8EtOechwO43fOPyuU86avshb+/cIpobQQCBmBKy9tkHj4CsydZ5y5MnW1CmSfaX5tXtiJqr7gA14AQEgkLQEltXnfE+mjj98qkCBXsYIf7/EV/tC0hYOhaUsAWu/ecDp2qhxf/cKZCE4l6lrYXHu1spYQgGz''@;'; put 'put ''jSV9yA0EIkzA2ncrhP4ExkTtnUqhnhcpkX9yQ/YTz2KMRIRlQHggEFUClc1T7+ZC79nulqaM+OuPszfMiqqIPsnAbGNJuzpOogAAIABJREFUH3IDgQgQsNrtpcvG2YQ4vxMwDv/AIXsyj5UmZHT826WOvHxB7jMvRUAGhAQCMSOwumnG+SYK1NoChOBvd+r0jLKiWjNWosBsY0Ue8gKBCBAob/SO''@;'; put 'put ''YJzdi5GYJlOn51gpDBbsUojnQ4LpFs3Q1i4+HxrMR2AqIGQMCSxvyJkpEccmW0KaMvqg3vnxaTcX1casry2YbQxvCEgNBMJJYEXj+RM40u+TsNLdQL73y+RaECP6Bsb0Mcz5RhOLt2DPbTjpQ6x4IrB816QzOAnuVagrzdJl3f8SyTi51Lv1UKx0gtnGijzkBQJhIiAEwhUN518c5O2/ccoZPSuP''@;'; put 'put ''j/yR0UMSdTzMuXZvl6q9Wpa9N6an6ISpZAgDBD6XgHWwS4iS1xHC3R2wGDc0WeCvLChofDdW6MBsY0Ue8gKBMBCwjLa8yXst50aV3TDbCmsdYvGf32vfVqnntsUFzQ+HIRWEAAIJQ2BZgy/NZP6XnHJGz15bB/GMm+etjtmWNzDbhLl9QCgQOJpARUPRFZro+l1vo2Xc0AmWH2IyvnXxxNqPgRsQ''@;'; put 'put ''SDUCZa/OUkYH+B/8xoFv99SO6a9L83b+T6xYgNnGijzkBQKDJLCq8YJpOmv/iyJ5uo+ls14GC/kl4rxhoa/2T4MMD8OBQEITWLt7ZqVm+ufbRcjEvWle7uaLY1UUmG2syENeIDAIAiuaCs8M6gd3upWs0XYYnQW7kOA/XjppzyODCA1DgUBSEKhsnlzMhVllF5PpOHn3def9OSdWxYHZxoo85AUC''@;'; put 'put ''AyRw954pGVIo+BQh0iQ7hGb621XivqQ0f1f9AMPCMCCQVARWNRZdhjB/wi4qQx39jinYuDnZG9pjUSiYbSyoQ04gMAgClU0X3MWEuRhjTKww1kpLhsz5S/N3rx9EWBgKBJKKwIqWwnxJ0Houjpxj4ZSGhJDJvnyj9+kPYlEomG0sqENOIDBAApUNRV/tYodqXfKQUXYIxvW/nfrhybNnz97ABhgW''@;'; put 'put ''hgGBpCNQ8ezk07GJnufCTLeK48I03MqQ826csOmVWBQLZhsL6pATCAyQwJrmC8sMEezpSWuw0FuYqxfCKVADBArDkpZAxfOXD3Ex/IpfP3TSEbNlpoN6Lpub+8zmWBQNZhsL6pATCAyAwIr6/PEa79zklId0b9Q3ua6pkusH83N3wIKoAfCEIclNYP2eS1y6aTQZPDjOqtTaey4Reen8vB3LY1E5''@;'; put 'put ''mG0sqENOIDAAAqubp91uCu1X9tAu/cBrTpkW3eJ7ad8AwsEQIJDUBNbvGS9z/oUHguaha+1C3XLW+jkTHr8hFoWD2caCOuQEAv0ksK7+okyuiFqd+c+xhloHV0hYuabEV/vXfoaCy4FAyhCobL7gV//5+vh2u+Asxxc3/uC8318aCwBgtrGgDjmBQD8JVLZMudIwgw9RIinWUM3s+pAQx4Ql+Y0f''@;'; put 'put ''9jMUXA4EUoZARfPka4Qwew54yVJPeYUFO7w/yn+qM9oQwGyjTRzyAYEBELhn98X36GbnzfZQUxgPZ6jatXOy9xoDCAdDgEBKEKhsLspBCLdwcWShvkvK2icM9PUbfY9H/acXMNuUuOWgyEQmsH7PlAzNoC2mCJ1p1WG1C+OM/WDp+c8+msh1gXYgEGkCFXUFo3WsvyJTR5aVy9r+QxXHmSUTdrwV''@;'; put 'put ''6dx944PZRps45AMC/SRQ0Vx4mmZ2vaBQd4Y11K8f+sgphp6zqKj2QD9DweVAIKUIrK0p9Phl7WWJKN3df6ztP4rkvqA4Z2vUT1oDs02pWw+KTUQClY2TJunC2CoRxWHpZ9x8lhJ+fqm3OZiI9YBmIBAtAqs3z1Cdw92bOo39k62cQgiuSmk/nZuzaVm0NNh5wGyjTRzyAYF+Eihv9H6XYvmP9jCF''@;'; put 'put ''ev46N2fTrH6GgcuBQMoRKBNlZOSzz1cEzbZiu3iPMuL3P8necF20YYDZRps45AMC/SRQ1Tz1eib0B+xhEpE3FOdun93PMHA5EEhJAn3//WSoo5t+NP4RX7RhgNlGmzjkAwL9JFDVMmUR40a5PUym7j/My9ncs1G/n+HgciCQUgQqWyZP5dystotOV0a8fX32hi9GGwKYbbSJQz4g0E8Clc2Tf8qF''@;'; put 'put ''eYc9zCGlPXjTxKd/3M8wcDkQSEkCK+p9+YRKPQuiMh2nfcIDh8+I9l5bMNuUvP2g6EQiUNU8uZQJc6WtWaFpDx3wOK8rG7tBT6Q6QCsQiAUBazW/yYyXKZE8Vn5rRbJE1ZMX5O74JJp6wGyjSRtyAYEBEChv8P0IIbTOPj0qTR65sdMQ3y71boDVyAPgCUNSi0BFTeGQIG1/0yGlH9lryzmThHr6''@;'; put 'put ''goLt70aTBJhtNGlDLiAwAAIrmgrPNJm/VaGu7r6cmtn1nioNO7fUu/XQAMLBECCQUgRWNeU5kVAaEEbnWYULwTnF0swF3pqt0QQBZhtN2pALCAyAwPLdhaOEFnpZpuowa7hudrXJ2JmzsKDhHwMIB0OAQEoRePTRWfSTL3StNHhgfrfZou5We3fPz93x02iCALONJm3IBQQGQMDq+CMU3KqxzjOs''@;'; put 'put ''4SbXQ5TQWQu9DU8PIBwMAQIpR6CiqXCRQKJnRb9LHva3GyY8dmU0QYDZRpM25AICAyBgNcEOGoGtXJj59nDO2PJFBQ1LBhAOhgCBlCOwoiH3GkLUnu4/QxwntfzwvIfyogkCzDaatCEXEBgggYrmwp8LIcrs4U4pY1fI33F5SVFt2wBDwjAgkDIEKuunfMHA/n9QoqhW0ZrZtS/LNWbsnOyNUTtf''@;'; put 'put ''HMw2ZW43KDSRCVS1TBsfNDp2KlTtXiSls0CHiw65tNi7bVci1wXagUA0CKxo9J7KOHtepo5MK1+GOiakmV1X35Sz8Ylo5LdygNlGizTkAQKDILCswZfm1/Y/PcQ5epIdRiHO1QeCoYVlRbXmIELDUCCQ9ASsFckBw/+WS84cZRers2CHRx66kuvo3uJJW/ZHGgKYbaQJQ3wgECYCFc1FPs30b1Go''@;'; put 'put ''M80KGTI7Djllz9SSvPrnwpQCwgCBpCRQVlMouSX9aUrl6X0LDBiHPnJKGStkajxYnNvaESkAYLaRIgtxgUCYCVTUnDvkEO+qzXSeNM4OLRPXAweDwZvg6TbMsCFc0hFY1uD7qma0/a8qeb4uU4erb4EhM7DbLWWWHNb058qKakPhBgBmG26iEA8IRJDAquai2SYL/l4iqtNKYzAtoMqe7y/I3f5Y''@;'; put 'put ''BNNCaCCQFASEQLiy6fzcgNmxzimnjUMIH+WBQaOzziFnLSjN2/4CxkiEq3Aw23CRhDhAIAoErKPn2sXH29MdI8fb6QiSXpKEuHSub+c7UZAAKYBAwhO4s3XiUKpL18tEni+wGIX7mK5K0w5yod+vSfqqRdm1YVmxDGab8LcNFJBqBJY3F/iYEdysSu7ulcndLy4andhxxY2+6n2pxgPqBQIDJWCt''@;'; put 'put ''UuYC3Y6Q+K5EFEffOARLbxMk3am5xEO3jKv2DzSPNQ7MdjD0YCwQiBGB5fV590hUubl3eoW6/0h0PP+mgk2HYyQL0gKBhCSwqsE31m+2/9YlZ03A+Oivlk2m7VXl9DnFOdXPDfSrZTDbhLw1QHSqE7h7z/iMYEdXdYZj1ESbhXXmqyp5fm/4A6Vw2EWq3yFQ/0AI3N0wYTbm9A5ZUr/cd7wQgsvU''@;'; put 'put ''+RfMxS/neav/3t/4YLb9JQbXA4E4IXDH9pyRskqelqiS3WO4QgiFurYZXP9hqXfnB3EiFWQAgYQhsLolJz1o4FKM0WJ7IWJv8ToLdqYpQ1czDVX1Z38umG3C3AIgFAgcTWBZg2+MX/9kxxDHSWf2fjdotr/pVob9YEHu9gbgBgSAQP8JLN816Qwi4V8KYV5h95Lu/aGWEvkdgpQ7TdH2p1Jv83F7''@;'; put 'put ''S4PZ9n8OYAQQiCsCdzXlfZky8YhE1Z4VypZAg4X8quR+lGD+s+Lc2vfjSjSIAQIJQMBqz/fvMe9dJGHldozxhL6SueAsUx29q0Pft6bEW/u5Rz+C2SbAhINEIHA8AtZWBjMU/ItHzprc99qQ2XXIIw//BaWhR2+eWPvx8WLB+0AACHyaQFlNocMta1dwwctk6uhuddn7xbihOaS0pwRGdxTnbH3x''@;'; put 'put ''WPzAbOGuAgJJQuDuPVMy0oXrzyGj/aK+JVmLpzTTf3iE60sPBFnb+nk51f9OkrKhDCAQNQJrawo9IUVcTTD5lUB8ZN/E1rdJDinjcS6xn5dM2PFW7/fBbKM2TZAICESWwL3PXjyRmWyDLgJf+LxMlCgvOCQyc0721o8iqwiiA4HkJLCqKe/LHaHDD7iUzNxj7c8VAv3dqaSXhgy9tdS79ZBFAcw2''@;'; put 'put ''Oe8FqCqFCKyrvyjTkMylQfPwjXaTgr7l62ZXm0RdBxXq/JtA4oH5udv+mUKIoFQgEHYCR37P/fAbutm+1q0M7dmCZycyuR7EiP7DrWTOv2nixl1gtmGfAggIBKJHoKJxch7GaC1H5jeO+upYCCFT9V1TmPcLKv/RQ9SDc7I3BqKnDjIBgeQnsH7PeFeX5rkGI/4zhMnJfSt2ShlbjZDxPTDb5L8X''@;'; put 'put ''oMIkJVDVMnWmg6bf5zcOnNK7ROsTdZoy8pWAceARJ0e/u6mgAU6UStJ7AMqKHwIVe6aPdiPPti79wFhbFRa4y6mkffeGCRufBLONn7kCJUDghAmsaZ56qd9s+4NCXRm9B+lm4DVC5RJHe8au4plbtBMOCBcCASAwKAKrm6ZPDPH2Gomo3e37uGDMIaeXzZ24+dfWf4PZDgovDAYC0SdQ0Vh0kcY7''@;'; put 'put ''/6xQd4/RWvv9OGIbXZLz+rk5Ow5GXxVkBAKpS8DaGuSS/Fsk6iq0KXDB3zZV9dyl2dvbwWxT996AyhOUQFXjtLO7zE+2O+UhPdsOdBbskqjjDqXNXQFPswk6sSA7oQlUtUwv0sz2TfbxjlwwUyaO0vl529f0fKWc0BWCeCCQQgRW7CkcxkKhapmoPYuhrH19hMjzbvE1/C6FUECpQCBuCNzbOG2E''@;'; put 'put ''gdlOE5k9v9VKxPmkyduv7n2MI3yNHDdTBkKAwGcTEALhe1ovXG7w4CL7KiE4Rwj/cqGv7hfADggAgdgQqGgqukcg3tPuEgsSoJjmF3u3P99bEZhtbOYHsgKBfhFY2TC5yBSdT8rUmWYPlInz/oPB0PyyotpQv4LBxUAACISFQHnjtBEeSdkbZJ09W34k4niiOHfrN/smALMNC3IIAgQiR6D7iDhV''@;'; put 'put ''bMIITbKzdGr73nHTYTMXTap/LXKZITIQAAKfR2Bt68WLNda5zL7G2uojMPeWeuteBrOFewcIJBiBiqbJlxs88LB9LJzOAh2EyLMW+5qqE6wUkAsEkoZAeeOkCwzm3+CQPFlWUdaiKFVy3zYvZ+vyYxUJT7ZJM/VQSDISWNWU55RJ5lMG90+x6+OCP7HQW38FxkgkY81QExCIdwLWVp8sp/KwybXL''@;'; put 'put ''ba2Ms39LhnReSVFtG5htvM8g6AMCfQisaio432D6Jpk63NZb1ulQBCmXLcrftQ1gAQEgEBsCVS2TrzKY9keCqWQpYNw0JCLNLfHuuv+zFMGTbWzmCrICgRMiUNU87TYmtO4TaI78ozb+JRnKhM/69HxCQeEiIAAEBkxg5e5pp8icbzO58VU7iEKdG2W6/8o52XsNMNsBo4WBQCA2BH5XU+g4JPPt''@;'; put 'put ''mGCfrYAIcucCX81tsVEEWYEAEKhsumANR2xuDwmBOglRpy7Iq279PDrwZAv3DhCIUwIV9ZNPZ1jbQwjNtCTqLNCpUMeUUm/97jiVDLKAQFITWN0y4yyZyNuCZvuYXh+A/zLmg2HXzJ69gYHZJvX0Q3HJSmBZo/c6LMS6nlXIRugDQeSv3wpdfJJ1yqGuOCawfs942WQjH9SY//u2TJNpn2DimHKL''@;'; put 'put ''r/aV40mHJ9vjEYL3gUCMCNy3+5JFfqPtbowJtSRwzjYqHWmz4PzjGE0IpE1pAlVN07xBdniLQl3p3f8eBTMl4lq8IK+64kTAgNmeCCW4BgjEgMDKxvydGNMiOzUV8uXzfdufjIEUSAkEUprA6s0zVGko/WuIdV7c81QrjH96OMk50X7RYLYpfQtB8fFKoHzrNDfxaI0Yo3GWRpNrAUqU/IXeuk+d''@;'; put 'put ''txqv+kEXEEgmAlWt067Vja71lMjqkada0yCC3liaX/ebE60TzPZEScF1QCCKBKxP0n73vlpV9uRaaRk3dAk7C0t8O5qjKANSAYGUJ1DZMnkk4mIHR6ynq49MnE8ZvP2q3l19jgcKzPZ4hOB9IBAjAmtaZ6wxWKBni4EQ4vaFvro7YiQH0gKBlCRwT/OFpboIrrSLF5y3YSJPL/Xu7NeuADDblLx9''@;'; put 'put ''oOhEILCmdfqvDRbq2VMrEUdlce7WkkTQDhqBQDIQuKd15lcwwtUa6zrVrocgeYNTOXzN5x1gcazawWyT4Y6AGpKSQEVz4c+FEGV2cW45a/2cCY/fkJTFQlFAIM4IWD2kVzblbySYXmRLM5m+jyLHtIUFNS/2Vy6YbX+JwfVAIEoEVjYWfJcL9qC9KMMjDd8p+w9cdB30r43SDECaVCawumVKbtDo''@;'; put 'put ''3G6fSy6EEDJWSou92ysHwgXMdiDUYAwQiAKB5XUFPoH1apk6XFa6dGXUOwzxcXOyN7RHIT2kAAIpTeCe3TOe1M3ApTYEnYVeV02nd6DnkoPZpvTtBMXHM4EVjd5TTa6/pFB39yZ6gwXbZeoZW+rd+UE86wZtQCDRCVQ2T/62wQK/p0Rx9NQi0A9Lfbt+N9DawGwHSg7GAYEIE1hXn59pSM43mNCH''@;'; put 'put ''W6msr7Ewki4s9e2EpvERZg/hU5fAPa2ThxqM1Qgkvm5TUGnaZoniWXOyNwYGSgbMdqDkYBwQiAKBquZp1UxoU+1UElFWFuduWxSF1JACCKQkgTXN00p0HlqBMSbdAATqlIkyY17etsbBAAGzHQw9GAsEIkygsmn6XI5Ca+w0CnW/6DfaC5bkN3ZGODWEBwIpR8DqtBXgh1qdcvqwng+4WPnbofQh''@;'; put 'put ''V5eN3aAPBgiY7WDowVggEGECVY2FZwd5V4NC3RlWKoMFuxx0yPT53uqmCKeG8EAg5QhUtUz5DePGD+3CGTMOSJJjeknezucGCwPMdrAEYTwQiCCBsppCaYQ7408hs+3bPX8AuFmd7sj65mB+P4qgZAgNBBKSgLXVJ2C0b7W7+lhFqJL71psmbF6GMRKDLQrMdrAEYTwQiDCBVQ2TfsQxu5dgSbZS''@;'; put 'put ''aaa/PUMZNumm3GdeinBqCA8EUobAsvqJ9TJ15vf6UPsvD3b7bvRV7wsHBDDbcFCEGEAgggSsVclcSd+pM/+5PX8IkLllmCZfAQdcRBA8hE4ZAhXNUwpNFnjGPkCGcVOnVJ1fmrfzvnBBALMNF0mIAwQiSKCiuaiUcWMZwVSy0jBuaAp1fX9+3vZHI5gWQgOBpCewum7GcJMGtiKMvmEXK2PX04Zo''@;'; put 'put ''m92frj7HAwVmezxC8D4QiAMC6/eMd/k1z9MIo55m8n790EcuxfOthd5mWCwVB3MEEhKTwNqWC5eGmP8OjEn3Vh+rqw9CdMbC/NqWcFYEZhtOmhALCESQQHl9fo7OuzY65YzuQy6sF8XSiyY1Llk4se69CKaG0EAgKQks3104Sg8efsElDxlpFyghecMhzfxOWVGtGc6iwWzDSRNiAYEIE6hsmXKl''@;'; put 'put ''yUKP2F8nW+lMpj+HufytW86v+3eE00N4IJBUBNa0Tl2sm9pd9gEWJtP2SVSZUuqteznchYLZhpsoxAMCESRQ9uosxXn4/T/KRJndOw1Byh5dsKsW+3a+GcH0EBoIJA2BypbJ5wT0thqH5Mmyi5KpY8m8nK3LI1EkmG0kqEJMIBBBAssafGkCmU8rxDGpd5oO/ZO30qVR3y7x1e4Nx77ACJYAoYFA''@;'; put 'put ''zAncXZ+9U6HunjUQjJtvojT3uFvGVfsjIQ7MNhJUISYQiDCBu/dMyZBCob8SQqf0TmWtUqZEXoeQ49el3q2HIiwDwgOBhCRgHWBhML0JY9ztgVaTD4LpDSXemvsjVRCYbaTIQlwgEGEC5Vunubmz7VFZcs7smypotL/llrKuW+DbWRdhGRAeCCQUgdV1BcOZRLYLhM6xhTto2tZ9Huelgz3/+PNA''@;'; put 'put ''gNkm1G0CYoHApwms3jxDDbgPlCCCb1Oo09P7XSE4o1ja9p+9DD9b4Nv1LLADAqlOQAiEK5oKKxAW83tYCNyFEZ1W4tvRHEk+YLaRpAuxgUCUCCyvyz3vsPbhg8PdX+zZmG+n7j4NhyhPCEletHBiNWwRitKcQJr4I7B2d+EoJFy7NeY/xVaHkfzoSe9nfmf27A0skorBbCNJF2IDgSgSKHv1LMV5''@;'; put 'put ''OP1ik4Xu670X15Zgci1AkLyBK3Tp4om1H0dRGqQCAjEnYD3V3rvnkltDRscdPR9EmbEfU2XSIm/t3yMtEMw20oQhPhCIMoHKlpyRXaHQgy5lyMXHSh0yO99Jk4YtIJq+/eai2q4oy4N0QCAmBCqaC6cYTNsoEcVhC5CxWjovr7oiGoLAbKNBGXIAgSgTsD7FVzUWfcUkxv8SRHP6pmfcNIJG2z/S''@;'; put 'put ''naNK2nJ27CjDiEdZIqQDAlEjsH7PeNlko57QWFfPYsJIb/XpWxyYbdSmGxIBgegTWFtT6OmS/SWMm/MdUvrQo01X12Ti3oIJXnw4x/dmGS4D043+NEHGCBOobJ78bZOH/mi3qfzvVp/rS7w1v41w6p7wYLbRIg15gEAMCdzZOnGobKhLTR78sSq5M/pK0VmgQyGOJxGWby317vwghlIhNRAIK4E1''@;'; put 'put ''DVPHcCp2MGGcaQdWiXvL/jT35ZHc6gNPtmGdRggGBBKLwN0NE8aqJL3Y4P7vSUR19lU/xHHKv7r0g/cFTfn+JflPdSZWdaAWCHyaQJkoI0Oa66o4YnPtdzAifozR5AV5Na3R5AVPttGkDbmAQJwQWNVUcD5CZJUQ4lz7EPbe0hTqrkPY/J8Dfr0p3N1P4gQByEgBAqsbZ3xJluW6oNk+xi6XYvWx''@;'; put 'put ''+XnV34p2+WC20SYO+YBAnBDoPoHK3XldmjJsccjs6Nl32OsJIOhWsv5imv6Km3KfeSlOZIMMIHBCBKyn2qHNTfcaSPuJPYBzdljG0qT5vtpXTihIGC8Csw0jTAgFBBKRgHXOsqqJn+m88ydyn1OorHo45wcdkms1wubauTk7DiZijaA59QisaZ2a7dfbdijUlW5VL4TgMnUuLs7dujIWNMBsY0Ed''@;'; put 'put ''cgKBOCRwd4NvrEfKWBQ0266mRFb7SsxQxvyjXf9oHULa/aXe5mAclgCSgEA3gVVNeU6ZZm4wmP8iG4nBjH8Ip2vi0uzt7bHABGYbC+qQEwjEMYGVDecXISyWCyS+QTChfaUqxNNoIm1pW9Bsgd9z43giU1haVeu0axnTft/z9bEwDSLoj0vz6/43VljAbGNFHvICgTgnsKr5/Etk7Fxh8OBX+krl''@;'; put 'put ''ghkSkbdxwZaW5NW9Av1z43wyU0jePa2ThzKO6pkwv2aXLRPHU/Nyt14WSwxgtrGkD7mBQJwTKH9xmpv4g7eZTJt3rN9zMSJBgukyJuga6J8b55OZIvJWN19YbIpglV0uFiQgMC4q9e7cHUsEYLaxpA+5gUCCEFjW4BuDEL9fIvJMjI403O79MljoY5mqd5d663r+yCVIaSAziQhUtUw9Q8bqjhDr''@;'; put 'put ''7FldT5Hy1/nebbNiXSaYbaxnAPIDgQQhYJ23fHfDhMma3rYu3TnmjL6yrSPwVMndojNtQayfIhIEKcgMIwGrt7OW3vUEJeTCnrACdSJB8krza14NY6oBhQKzHRA2GAQEUpdAWU2hpNLgZQbvqvAow47an2v1z5Ww8jhiZknJpPqPUpcUVB5NAquaLpios67tCnWm2XkV6lw8N+eZ8mjq+KxcYLbx''@;'; put 'put ''MAugAQgkIIFlDb40wULzEcG3KNTdvZfx0y/sJ5jeGZLx2lhtt0hArCB5AATKagodWU7HIyYP9iyCYpz9W+VpOcWTtuwfQMiwDwGzDTtSCAgEUovA8prCUSFy6D6PnHnM1Z5+/fA/3UpWcUdebTW08kuteyNa1R7p6qP9iWAqWTkZN3QJKTeX5Nc+GC0Nx8sDZns8QvA+EAACxyVg/Z5b3jgxHyO5''@;'; put 'put ''nBLpGP1zDV2hzjqB+O3zc2t2w1ah4yKFC06QwLr6/EydKg0csbPsIRJ1blTp/ivnZO81TjBMxC8Ds404YkgABFKHwJFFKh2XhcyOCreS1XP4u03A5FqAIvlvskRvLc6tfT91yEClkSJQ1TJ1vsFCK3sOYBG4kxA8NdpdfY5XH5jt8QjB+0AACPSbwF31+ZkE6QsFEvPss2l7B2HcOKSQtLWGoq1e''@;'; put 'put ''lF17oN8JYAAQQAhVNBee1qUdaHArQ0+ygVhdfQ6H9Kvi7XQzMFu4ZYEAEIgYAWt/rma236dS92SZOlx9EwWNjn+nKyMXBFhnzZL8RuifG7GZSM7Aq5oK70VI3GBXZ5ihjyXsunBhQc2L8VYxmG28zQjoAQJJSKCiPv90Hem/lYhagDEhfUvs0g6+7paH3nzKhyPqZs/ewJIQAZQUZgKVzUU5QaNz''@;'; put 'put ''qyq5M6zQXHCmUNeSWHX1OV55YLbHIwTvAwEgEDYCyxt839bMjlWf8XtukCD5b5TS2096b/h7YLphw550gcpePUtRDzq3qJLnArs4LsTbbuTIudFXvS8eCwazjcdZAU1AIIkJdP+eK4xbEBbFMnW6+5aqm/42SuTHEE776S1x+ocziacnIUqrapo6WeNdGyWiOI881ZoGxcrcEm/N/fFaAJhtvM4M''@;'; put 'put ''6AICSU7grvqc8RixcooV77H657rkzBd0pi1JCwbrriuqDSU5DijvBAms2FM4jBpouxBinD1EJu5NBj88K577LIPZnuAEw2VAAAhEhkB5o/cCiuVyIfi5x/o9V5XSmgyk3zrm7YxG+Go5MnOQSFHXtMxYZPDA/x/BKEQHEvLFpfk76uO5DjDbeJ4d0AYEUoSAddyeW9ZuSFNHLQkYh0b1LZsgSVel''@;'; put 'put ''9IeDKFBeMmHra3AoRorcGH3KXNZSeLLCjMD4AAALhklEQVQW2t/U+0xuq6sPbpO+WzxzixbPVMBs43l2QBsQSDECa2sKPSFF/I9ArNQ+eq83AoIkTSbOCo0b5dA/N8VuDoRQZfPUn3Kh32FXbjLtE4qk6QsLGuJuq0/f2QGzTb37FSoGAnFPYNmu3K+5HVm3a2bX1Rgf3T830/mFN7u0g2vm5W6G''@;'; put 'put ''/rlxP5vhEVjVMm180Di8Q6Gu7q0+CAlBiVoyP3dbQtwDYLbhuQ8gChAAAmEmYJ23XNU0qQARaS0X7Oy+4a3+uS4la69p+hfMy9vWGOb0EC7OCNxVl12jSu5CW5YQ4l1Vks+bm7PjYJxJPaYcMNtEmCXQCARSmMCqpjwnE+LHHnnELUGz/eS+KAiSdbeS9YhfdNy5YMIzb6QwqqQtfXXr5IKQ4d8q''@;'; put 'put ''EbV7q4/J9RDFSvFC364HEqVoMNtEmSnQCQRSnMDqlpx0zZAXM6TPV6jT0xcHRiQoEccKoaM18dLDNMWnLCzlW119ggRvx5icZwdUafozEkVXzsneGAhLkigEAbONAmRIAQSAQPgIVLbkjNQN8YBEnZccK6rOAh0Sdi0zHTI0rQ8f9phFsrr6mCy0yt4WhhHxYyHPXOCrrouZqAEkBrMdADQYAgSA''@;'; put 'put ''QGwJWL/nLqufODNotlVmOEZ/+VhqVOp5nXHjDhrSn7y5qLYrtooh+0AIlDdOG6EQvosJ40x7vEKdG92B0OxEO+gEzHYgdwCMAQJAIC4IdP+ey9iFIRZc51ayjtqfa4nk3HxepWmlI99Lq4dDMeJi2k5YxLrWi5YEzY477adaxoz9MlIvWVBQ03rCQeLkQjDbOJkIkAEEgMDACayoGT+sU3RVOSXP''@;'; put 'put ''TEXyDOkb6b8LaqpV2fHToCrevmVctX/g2WBkNAgsb/AVcB56qvd8SsSx6FBOXkUZLuPR0BDOHGC24aQJsYAAEIgpgYq6gtFdon2FTByXHmsRlWW6JtdedytDbw+ZgXrooRvT6frc5FXNU/7KhHGlfZHJ2VuyIY0vKapti1/Vn60MzDYRZw00AwEg8LkE7t6V93VMxW1CsJkKdaX1vZhxU8eE/Atj''@;'; put 'put ''6TcKkx4Z+eGQT+Ar5vi5qVa3TMnVzECt3aCCcdOQSHx39TkePTDb4xGC94EAEEhYAlbT+k7WVqlS9wUydRzVzs8qLGR2HFJp2haKXFWyHnodFlPFdrorWyaP5MzcijDq6eqjUs8zGjt0RTx39TkeNTDb4xGC94EAEEh4Aivqcs5iGC3igl2hSu7/Hvf36bKsnqgESW9hgh8mWH5Id+IP4bfd6E/9''@;'; put 'put ''qqYL1iDE5tqZKZI1KkTRXN+O5uirCV9GMNvwsYRIQAAIxDmBZQ2+MUwEf4YFvkqVPMc0XasELphpMv0dh5z2W0rowwpVP0mUAxTW7xkvK51pNICGS1LaYerXHR5V0ok9NViTu0yZM1WSTIQ+NDLfOp3Hy1foFc0XnuakanPAbOtZWW5t9ZHp/ivnZO814vz2+lx5YLaJPHugHQgAgQERuLN14lBq''@;'; put 'put ''8O9xjn5CifxFiSiOzwrEBWecm++7lMxtIda5iZquVpdLabeMKtoGUCbKyOi9G6llpgeyFCoHmYdil4th7RTM8akYo7EuKeNUk7HTTB4cFTQ73IzrMsLCMtvuv/dCCO6WMzWMSGe6Y9TrGvd/4Nf3v0q5a7OJ2z48+f2T9ViZ7z0tM36j88AP7bng3DyIhDJ9UUHN3gFNdBwNArONo8kAKUAACESf''@;'; put 'put ''QHldwTkMB39BsDxdIkr32buf97IaIBg89PEQx+iXQ2Zgl0zlzQiZBw3OdM4DHW5FN62nxddmjRX92aJiGelZG17Fh0/PJFrGewR1onQcMGXmUCVFmE7G6TlEoBxKlXOY4Ke0h97NIogqEnWmEUzo8XQf730hOFcl97syce/UTP8mzFhLNBeOrW6dPk43A3t712Jt9SnO3bryeNoT4X0w20SYJdAI''@;'; put 'put ''BIBAxAlYx0AaJrrao4z+jt848I1j9dP9PBFHjolU/WnqiI8cNO1NnQU/0HnnmxiRF02EOxSBAowbAssSJwxTJoTEEc8iWFYQ5mNV6swiWDqVEPVk3ew8rUPfN5RxXZWp46hzoCMOAyGkM39bmjJyu879a9tDqKGsqNaMVF7rg8aIZ/duCpkdF9o5hODvcI9zbLL8bg5mG6m7B+ICASCQsASWt0w6''@;'; put 'put ''g3B2pYxd15g8dBZCVlfdo/vqxmOBAgmBRI8ygf77HwYLdlj/X6au9CPvdv/5x9b/YPT5taUpI3aGjM5fReoUrqqWaVeZLPSQzdj69oAiac4C386E6epzvHsBzPZ4hOB9IAAEUpaAdQbzL16bJbsOvzvFpQyfyUxtBkP66fECRDe72hQprR0jtE+W0p43WPAjQ/i7DFM7wDF/28XlN3Widmn5De29''@;'; put 'put ''Nac35w3RGP8iY9rpquQ+TZU92UH9cJ5Mnad8Vm3Wb70ydT1nCv2XHSG+JVxPulZXH0N2NDNufNXOrVLP5v0e1zfLxm7Q44X1YHWA2Q6WIIwHAkAgZQiU1RRK6So6jQk91yVnTfDIQ70HAm+fihAfap/fG24Y1lOeRJRPKJU/RAjV+fWDb1Ikv0EpfR8Zos3lChwY7Ipi60PF/XvHS22G/GVqSjN1''@;'; put 'put ''EZjnkNJOPVYtXDAmOGqVZc+NC3KfeWmw9Va1TL2Zcf2eXs/inZSSovm5ib8oqjcbMNvB3ikwHggAgZQlYJnvqeg0qd35XgY32Sk6D54pSdLJEnFmqcQ5XMKOUQLxMRrzp+ksqDJhUowwwRhxmTg1RXL5KZIOcSz2cW7sN5jexkWgyxCsTTD2Eab0X7JKP2nvpIdHp3WyaK1+Xr15hhpKPzhRpWlz''@;'; put 'put ''TK5fhY+xAItxQ3NKQx5CLPSLub6d7wzkJljTMHUMkmmdwYJfssdLyPHkqPfTr4zViuiB1HEiY8BsT4QSXAMEgAAQ6CcBa9EPqq0lZ40YTvz79hM9LY10HNR6/ubStE4uDR/C1fZTeOZbh+Nmr2vfMlc0XnCqybsqJaJcQjA9atVz0Gjfn66OucPgh+/vzwlPFp+s3c3rTRa63s4pOD+MhFS0sKDm''@;'; put 'put ''xX7ijvvLwWzjfopAIBAAAkAgtgS6vz6Xja9yTO5ECF3Ud6uRdQgIwfQlgskvnHLHlhN5Al/dMvkszQw+Z59/bFUoU7V0Xk51RWyrjUx2MNvIcIWoQAAIAIGkI2CdTtUeVC73qCOWhMy28X0L7P5qWc56LGR2rO/SSdNnLaKy4ujmsEcNHrq856lWiHc9asbXEuWkrv5OLphtf4nB9UAACACBFCew''@;'; put 'put ''qinPaXBxreD8Z4rkHN0Xh8GCXQ4p4086xz+/xVe9r+/7lU0XzDK49idKJMV6r3urD5ZvXODdsT5Z0YLZJuvMQl1AAAgAgQgTWN7o/RLnxi8xwpfK1HnU4RsKdb+JEP+VTOUN9hNrRU3hEKTieoH42bY8mbg3iUPiyuKZW7QIS45ZeDDbmKGHxEAACACBxCdg/Z7rlI1sv7ZvXbpjxNkES3LfqgTC''@;'; put 'put ''zzqJ+0Yqaf8KGeT7TGir7WswIn4kRH6Jr/aFxKfx2RWA2Sbz7EJtQAAIAIEoESh79SzFczhzssb89zjljKMO/rAWUXnU4Z/I2JHern2YZsuSiPpEcW71N6MkM2ZpwGxjhh4SAwEgAASSj8CKmsJhTArdiRC/+lhfLX+qYoE6COUFC3LrB304RryTBLON9xkCfUAACACBBCRQ3ug9myD5Lia0yRJR''@;'; put 'put ''j+qmZLUuVKlj4bzcbVUJWF6/JYPZ9hsZDAACQAAIAIETJVDRWHguxnSlKfTze+/PNTl7y21I424uqu060ViJfB2YbSLPHmgHAkAACCQAAWtfrV9PX8C4toQSeShFikGwdNm8vC1bEkB+WCSC2YYFIwQBAkAACACB4xFY0zrtizJx/wYh7NJZcFpx7paO441JlvfBbJNlJqEOIAAEgEACELDORB69''@;'; put 'put ''d68jWU+K+qwp+D9J1vEz+kjcvQAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; options notes; data _null_; format url $256.; rc=METADATA_GETURI("Stored Process Web App",url); url=coalescec(url,"localhost/SASStoredProcess"); urlEscaped = tranwrd(trim(url)," ","%20"); putlog "NOTE: SASjs Streaming App Created! Check it out here:" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; putlog "NOTE- " urlEscaped +(-1) "?_program=&appLoc/services/clickme" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; run;